[{"Attribute":[{"category":"External analysis","disable_correlation":false,"first_seen":"2024-09-05T11:07:19.443000+00:00","to_ids":false,"type":"link","uuid":"3d41e752-8a34-40e0-89a7-d25bcfc3da9d","value":"https://lookyloo.circl.lu/tree/ac01358d-a97f-44d1-b996-0727dc567979"},{"category":"External analysis","comment":"Screenshot of the page at the end of the capture","data":"iVBORw0KGgoAAAANSUhEUgAABQAAAAOKCAIAAABLfWokAAAAAXNSR0IArs4c6QAAIABJREFUeJzs3Xd8FEUbB/CZ3et36QUInYQiVYpKUQQURHoT6U3pQTqCgIB0BKV3XloCRDpEqvQSqlQp0ktISCD1+u3tvn8snmcayeWSC8nv++GPvb2Z2ediCc/NzDNUEAQCAAAAAAAAkN8xrg4AAAAAAAAAIDcgAQYAAAAAAIACAQkwAAAAAAAAFAhIgAEAAAAAAKBAoK+LBbk6BgAAAAAAAIAchxlgAAAAAAAAKBCQAAMAAAAAAECBgAQYAAAAAAAACgQkwAAAAAAAAFAgIAEGAAAAAACAAgEJMAAAAAAAABQISIABAAAAAACgQEACDAAAAAAAAAUCEmAAAAAAAAAoEJAAAwAAAAAAQIGABBgAAAAAAAAKBCTAAAAAAAAAUCAgAQYAAAAAAHABzYpFnhdPe546Iv5RDOov3ve6fkHRq5t4zVZ8T7Nkvq2Lom9vz9NHPM8e8/hjn6zFl7b7XtcvpBhc1qypes4M8Zr6+7mtX+W+d5vHob2aBXOJTJa6l7TBJ/YPynzYbPmyb26eP+l5/KDniUMe4TvYShXtu6hnT/M4sDvFIJoVi2wvPY8f/DeST+p5HNjtef6kx7ED8s4d//Oh2rT0fnSbennZ7qimTpK1bS1eSz6o6b4zzH3PVo/DvysG9k0zeElmPiEAAAAAAAA4nfa7kVzE+RQ3+djX8u5djVt3Ep3O/r6sTUtZ0yaJLTsI8fFM8WLum9dzt+7wDx+99Smq4UNMe343b99FCFFPnyxr8pk5fL/Tw9YOGy3elNSro541Nall+zdvSCSyzxoKZjMTWIZ/8NDWng0MlFR/n7ty1X4QJqCI+ucZyd8OtN68Rb293Teu4aNfWo6dEN+Vt2nJP3kqa97UFLI5dVTqWdOSe/Xlnz0nCrn75g3mPb/zkS9StMEMMAAAAAAAQF5i5UyhW5QDvk1xW9Gnh27SVCE+nhDCP3ue8HnzzGS/hBCq0VDJm7lP3fjJ2cx+34o7E8GWLmV7KW34KffXLdOuvfLWLeybGeYvUv0wOkVfeddOxvUh1pu3CCFCXFxS928sJ0+/+RSeHpL3q+l+mpliHBvqriEsQwghRlNS269TZ79IgAEAAAAAAPIYhjVu3CRr2oT6+drfZkuXst6+++9rozGT4xmWrVIOH+K+NVQ5ZCBTorj9W54Rx8U/ml9/dk7whMi+/MJ6+47tpbxNS9PucPOuPSkSV+72XT4qWvp5I/ubbFAZ7toN20shLo5YrW+GbdHMfPiI5fhJtnQppnCh1M/Vz5rnsXurZtVSebfO1N0tzdiQAAMAAAAAALiGZs4Mj4N7xD9s1cr/vmGxGJauUI347j+teZ4wDCFE1rKZZ8Rxz4unlcOHZOYp1lu3Ez7+TD9/MfXw8Ni9Vdqoge2thDoNxD/a4SknYzMKe/7PnscPin9sO3LFz+J54ZSib2/tyLFvmiqV0k/qmg/+Yf37vmA2p9gbrP/5V9XIoeKHsqEsm+ZD5W1amneHE5437Tsga9EsdQPz9l0JH39m3rVXWquGx5H9TJHCqdtgDzAAAAAAAIBraMf8kHozrci8c4+iT0/7tcTW+w8l1apwl/40791n3rtP1qyppFrlNPumQD09hIRE7kwEdyaCu/ynvGM7y9Hj2Qr7n+2+qT+L9OO6yiED+afPxJuypk0IK/HYsZkQwnh5yVu30P91y9aFf/bccuGi/Kt2gpV/8xnvPZB8UNNy6oz4kilVgnBW/nkkU6Sw5P1qqh/HEUGgSiWfmGRcvTblx/RwFxKTzL/vN/++X/XTRGmTz0zrQ1O0wQwwAAAAAABAXmSYO185dJDtpXH1WvWUidTfjxBC1Gppw/qCVpdR/3947PpNUquGeM2WDeKfPs+piAmxnD7LJyXL2rQUX8rbttQOHZX4RavEL1oltuloX7laZJi/RNH/G9tLU+gWRbfOkprVCSHU18dt8XzxKwBZm5bG9SGJTVomftEqoX5jxtOTKVnCfhwmoIjH7zuprw8hhLAsW7p0mh8TM8AAAAAAAACuoZn/MzEYxGvLpT91o8bZv2s5cUqwO87HvP8QUak8tm8hhAgWs3l3uGHpStu7tpOEDKvXpSiSnDxomPqnidRNQwix/n1fN+7HHP1Q+qkz3bdssPxxjEgkbIXythrO/PNI/ukzSa0a3KU/bY2F+Hjz7nBFzzfHPvFR0cnfDlTPmMKUKMFHRhoWLxdng+WtW2iHjrL1Mm3bIW/V3LBome0O/yJKP+cX95D/EUoJw5j3HbQ91x59XSwoJz87AAAAAAAAQNZoFs4zLFluvXvPucNiCTQAAAAAAADkIdTHm4+Pl3z4gfNHxgwwAAAAAAAAFASYAQYAAAAAAIACAQkwAAAAAAAAFAhIgAEAAAAAAKBAQAIMAAAAAAAABQISYAAAAAAAACgQkAADAAAAAABAgYAEGAAAAAAAAAoEJMAAAAAAAABQICABBgAAAAAAgAIBCTAAAAAAAAAUCFQQBFfHAAAAAAAAAJDjMAMMAAAAAAAABQISYAAAAAAAACgQkAADAAAAAABAgSBxdQCQS7ibt4hWy1Z8j7q7uTqWf/GRL6yPH7PFizMlirs6ln8JOr315l9EqZRUrezqWAAAAAAAwGkwA1wgGBYsSWraKqnVV8m9+vJR0a4O5w3LydNJrTsmtf06qXVHy8nTrg7nDSEpSTtkRGKL9klftjbM/JnwvKsjAgAAAAAA50ACnP9Z7z0wLl3Jv3otWDnznnDLH8dcHREhhAhmi+HXxdzly4RQ7tp1w/Q5QrLW1UERQogpbLspdDOxWvm4OOOaddYHj1wdEQAAAAAAOAcS4AJArxO0WqpUULWaSqTm3/cLWp2rYyJE4IXEBCKVUoWCKpWC1UrYvPFvo9VKWZYqFVSpFExmYjK6OiAAAAAAAHCOvJFyQE5iK5SXtW4pJGv56JdsuSA+Lj65cw/jqv8JCYkujIrK5fIuXzM+PoLBIJjNROAJkzf+beQsRCCC2UwsnKxpYyawjKsDAgAAAAAA52AnT57s6hggh0kk0o/rsIFlGHc3QafTLF1ArFbT/9aZ9/xOGZYtWYIqFK6Jq0Z1ppA/d+WaasR3fMwr7tQZ6WcNqFTqkmBE5u27DIuWKb8bRDhOUuk9zcJfqJvGhfEAAAAAAIATUUEQXB0D5BaeT/qytaxZU8XQwXzsK1PoFtOGUKJUKvt/I+vQjqqUuR+R9dFjbb/BbqHrKMsmNmvLVqygWb6QyuW5H4mY/WqHf6+e9ZO8y9e670YyhfyV4793SSQAAAAAAJAT8saiU8gdDKMcNsS4biN//wHj56scFuy+d7u8YzvD8lWJjZsZl68mZnMuRyRotcTC8TEx1MfbPWwDf+++9tuBxGrN5TAIIabNW7Wjf1DPmCLv8jUhRNDrBSN2/wIAAAAA5CtIgAsWadPG1NvbGLJZfMkUDVAODXYPC5G3am7aHJbYtLVh8XJBl+slsgSBEMKUKqlZu4J/+jy5V1/Ccbn5fFPIFv3kaaqJY+XdOr25RWluBgAAAAAAALkACXABQ6lycH/zgcP8o8e2e0zxYsrvR7lt2yT99GPTpi1J7Tu7qkQWWzZIs2aZ9dETbd/BgsGQOw81bdmqnzpTOWqYoneP3HkiAAAAAAC4BBLgAkfWrjXj7W1cvjrFfcbPTzVpvEf4Tukn9YzLVia172TauDn302A2KNB90zru1m3dkJGCXp/TjzNv36X/YZJy7EhF3945/SwAAAAAAHAtJMAFkbxHF/PR43z0y9RvUW8v1fjv3Q+Gy1o2N/y6MLF5W9OGUEGfS5OxIqZEcfftW7gbf2kHDxdMppx7kFj1SvXTRMz9AgAAAAAUBEiACyJ5h7Zs8WKGXxal18DlJbKYYgE5XRPr36pX3TrnxPgAAAAAAJDXIAEukCQSeddO5n0HhJcxGbRybYmsHK2JlUbVKwAAAAAAyO+QABdQ0mZfsIGlDctWvrWlC0tk5VBNLFS9AgAAAAAomJAAF1BUqVQO+Nb02w7+6bPMtHdViSyn18RC1SsAAAAAgAILCXDBJW3YgC0WYPrnTODMcEmJLCfWxELVKwAAAACAggwJcAGmkCuHf2fattN6736W+uV+iSyn1MRC1SsAAAAAgAIOCXCBJm3amHp5mUK3ONA3l0tkZbMmFqpeAQAAAAAAEuCCjVLl4P7mA4f5R48dGyA3S2Q5XBMLVa8AAAAAAAAJMBBZu9aMt7dx+ersDJJrJbIcqImFqlcAAAAAACBCAgxE3qOL+ehxPvplNsdJu0SWweikMN/4tyZW8HDhbRuPUfUKAAAAAABskAADkXdoyxYravh1kVNGS1kiq9EXxuWrHNi1m9EjxJpYd+9p+/QngpBeM9OWrdqRY1H1CgAAAAAAREiAgRCJRN65o3n/QSH2lbOGtJXIkjVqYFwfktSmo2l9iBNLZDGlSmpWLrHee6DtH5xmXWjzzj36ydOVo4ah6hUAAAAAAIiQAAMhhEhbNGOLFzOuXOPcYZnixVTTp7jv2iqpVtUwf1HyV11Nv20TkrX/tpBICMsSqdSBwdlK77ltWM1dvqINHi6YLfZvmffu040ZrxjcXxk8wAkfAwAAAAAA8gUkwEAIIVSlVAz41rRlG//sudMHZwr5q6ZPdt+/W1Kvjn7arKRW7c3bdxGLhRBCeJ4YDA4vkGbLl3P7LYQ7f1E/8nshIUFITBJ0evP+Q9qho5QjhyqHDHTyJwEAAAAAgHcZFdLfQgkFi8GY2KKtrMnnyu9H5txD+MdPTFu3m8K2M/5+sg5tLafOWH7fL6lXVz13JhtYxrExrQ8e6gYN5ZO1VKkkgiDExSuHB8t7dstOnNq+g5jChVRTJ2VnEAAAAAAAyFMwAwz/UCqUQ4NNW3fwDx/l3EOYUiWVo0e4bV4vqf2hYdps82/bCSsx7w7XT54uGB2sF80GlpHUqslFnOEuXrYcO0EIkbVt5ezAAQAAAADgnYcEGP4la/4ldXMzhW7J6QexZYNUP/7AlClFOI7IZFSp4K5ey06JLOvjJ1Qip54e1NOTT07mo7J7pBMAAAAAAOQ/SIDBDssoBvQ17TuYEzuBU5N+8jFhWEGnIzwvb9OK8fR0eChZk8+IWi0kawWDQfpBDaZIYadGCgAAAAAA+QESYPgP+dftGU8P4/LVufAs5ZgRynGjqFSq/H6k8ocxhGUdHkres5tm4Tzq4Sbv9JV6/lzq7ubUSAEAAACgYFm9ejWllFLapk0bV8cCzoQEGFKSd+tsPvSHEBOb0w+iSoW8W2e2Qnl5z65UqcjmaPIeXSU1qiu+bs8ULuSkAAEAAAAAIF9BAgwpyTu0Y4oUNixcmgvPEvR6Qoig0zthKKORECIYTc6ICwAAAMD5evXqRdPHsqyXl1f58uW7du0aEhJiMuFvNQDOhwQYUpHLFN06m3aHC7GvcvxZgvDmT54aCgAAACDX8TyfkJDw999/b9q0qXv37qVLl96/f7+rg8pZCxcupJQ2aNDA1YFAASJxdQCQF0lbNGPXhxhWrFZNGOvqWAAAAADym9KlS9etWzfFTYvFEhsbe+3atbi4OEJIVFRU8+bNN2/e/PXXX7sozBx39uxZV4cABQ4SYEgDVSkVA/rqxk5QdO/ClCzh6nAAAAAA8pW6deuGhISk+ZbVat29e/d3330XGRkpCEKfPn3q169fpEiRXI8xNyABhtyHJdCQNtnnjZhChYwbN7k6EAAAAIAChGXZdu3aHT9+XK1WE0L0ev2iRYtcHVSOiIyMfPbsmaujgAIHCTCkQ6lQDg82b9tpvffA1aEAAAAAFCxBQUF9+vQRrw8cOODwOJGRkVOmTPnkk0+KFCkil8s9PDwCAwM7deoUEhLCcZxjYy5fvlys2jVlyhRCyLlz5xo2bKjRaNRqdSZDnTVrFqW0WLFi4ssTJ07YKoHduXMnq/Ho9frVq1e3adOmTJkybm5uEonEy8vr/fffHzx48J9//pn1zwf5HBJgSJes+ZfUy8uESWAAAACAXFenTh3x4uHDh46NMGfOnKCgoMmTJ58+fTo6OtpsNiclJT18+DAsLKx79+4VK1a8ceOGA8MqFG9Or9Tr9X/99VejRo2OHz+u0+n0er1Wq3UsVIdFRESUK1eub9++u3fvfvTokVartVqtCQkJ165dW7p0aa1atUaOHCmgSCrYwR5gSB/DKAf21f/8i7xPD7ZUSVdHAwAAAFCAiEugCSFGo9GB7hMnTpw2bZp43aBBg7Zt25YsWdJkMl29enXt2rXR0dH37t2rX7/+hQsXypYtm6WRpVKpeGEwGMaOHWswGCQSSdGiRS0WC8NkanatS5cutWvXPnHixOTJkwkh1apVmz9/vvhWiRJZqD7z6NGjpk2bJiUlEUKKFCnSoUOHcuXKaTSauLi4Y8eOhYeHC4Lwyy+/+Pr6jhs3LkufEfIxJMCQEVnH9sb/rTcuW6mePd3VsQAAAAAUIE+fPhUvChcunNW+ERERM2bMEK+XL1/ev39/21sdO3b8/vvvmzRpcuHChYSEhG+//fbEiRNZGlwieZNBPH78eN++fZ06dVq4cKGfn1/mRyhRokSJEiVevXpz4qanp6djJyHNnj1bzH4rV6587NgxX19f21sjRoxYtWpVv379CCEzZswIDg52c3Nz4BGQ/2AJNLyFvEdXy6EjfFS0qwMBAAAAKEB27dolXtSrVy+rfefMmcPzPCGkU6dO9tmvyMPDY+PGjSzLEkJOnjx5+fLlLA0udiSE7N+/v2bNmiEhIVnKfp3IYDBUqVLFz89v9OjR9tmvqG/fvkFBQYQQrVab1SQf8jEkwPAW8g5tmWJFDfPzZ/lBAAAAgDxozZo1R44cEa979uyZpb5JSUnh4eHi9ZAhQ9JsU65cOduk62+//eZYkBzHjRs3zpYP577169dfv349JiamR48eaTaoXr26eOHwPmrIf5AAw9vIZIoeXc179/MvX7o6FAAAAIB8y2q1xsbGHj58uEuXLt9++614s0WLFk2aNMnSOH/++adY4VmlUtWuXTu9Zp988ol4kdUZYBuWZbMaWy5TqVTiRXJysqtjgbwCe4Dh7aQtvmTXbjAuXamaMtHVsQAAAAC880JDQ0NDQ9/arF69eplplsLt27fFi3LlymVQlapChQrixd27d7P6CJG/v7+tUpcL3b17NyQk5OTJk/fv34+Li0uzZhgKQYMNEmB4O6pUKgb2030/XtGnJ1MyC6X5AAAAAMAB/v7+I0aMGDlypK3iVOYlJCSIF56enhk0s72bmJjocJCOdXQWjuNGjx69cOFCccMzQGYgAYZMkTVuZPi1sHHjJtWEsa6OBQAAAODdFhgYmLruMaXU3d3d39+/du3aderUkclkjg2u0+nEC6VSmUEz23G+BoPBsQdlnGDnguDg4BUrVojXjRo1at++fZkyZby9vW0rnydMmLB7926Xxgh5DhJgyByFQjk8WD/xJ/nXHdiyQa6OBgAAAOAdVrt27dWrV+fQ4LZlyXq9PoNmtrxXo9HkUCQ56tKlS7bsd9GiRcHBwanbuDxFhzwIRbAgs2TNmlJ3d9Pmra4OBAAAAADS5e3tLV7ExcVl0Cw+Pl688PLyypW4nGzLli3iRf369dPMft/6E4CCCQkwZBrLKgZ8aw7fxz+PdNqYDEMoJemXZ3DNUIQQSgmlzhkKAAAAIBdVrFhRvPj777/FctBpstXKsrV/t9y/f1+8aNy4cZoNeJ6/cOFC7gYF7wAkwJAF8k4dGH9/43KnrdihSiUhAs1wg0pmh5LLCSVULndGXIQwDJFKnTMUAAAAQC6qWbOmuH/YZDKdOnUqvWbHjh0TLz766KNcjM5pkpKSxIv0lnDv2bPnJU7xhFSQABcI3J9XtIOGJnf/xrQuJFsDMaysXWtT6JbkHt8YfllILJbsDCYkJRuXrbLeu29cvFz4539hDjMuXclduWZcH2J9/CSbQ5l27LacOms5dIS7cDGbQ1kOH9F+MyC5Vz9z+P5sDgUAAACQGSqVqkOHDuL1okWL0mxz9erVM2fOEEIYhunWrVvuBvgG/We1nWNVuHx9fcWLhw8fpn43Pj5++PDhtpdpno0EBROKYOV/QkKifsIU8/7fCSM3HzhElEpJzerEseW9gsBdvcZHvzRt3mrauoNQKmvV3NGwiHHpCuOSFdTdzbh4BSFUMaivw6uOLQcO6X6YTFjWtGO3YDarf/qRKBWORWW9fVs34nshLo5/8FA3ZoJm4TyiVjk2lBAToxs1jrt+gxCBO3eBLRvIli/nyFAAAAAAWTFmzJitW7daLJadO3cuW7Zs4MCB9u++fPmyW7du4tG4nTt3Ll26tEuCtBXrunv3rsFgyLhmdWp169bdunWreKjyjz/+aMuHCSGPHz/u0KFDfHz80KFDFyxYkJ2zjiH/QQKc/1kfPOSuXqc+halSIZhMhpk/0yKFiQOnpVFKeKv1r9vU04PKZIJOb/h1kfngYUIIyerR4pQQXrBeu0483IlSSSg1btzE3bhJWJZk9ZhySgih1r9uEYahbhqqkFuOntDGfkc0asJn/cRzhvKPngjxCdTLi3Cc9a/b2sHDHB2KEZKS+OiXTNGiRBCsT59xl/5EAgwAAAC5oFq1atOnTx8zZgwhZNCgQTt37mzdunVAQIBWq7148eKGDRvEs38DAwPTmyLOBZUrVxYvEhMTP/300y+//NJgMNStW7dNmzaZ6d69e/fJkycnJibGxcXVqFFj+PDhZcuWjY+PP378+JYtW/R6/caNG728vMQEePfu3XPnzq1YseKHH35onypDAYQEOP9jihdlSpXgIs4TtUawWOQTxsqaNRX+OSAuCyglPG+YNsu0fSd1cxN0ekWvbvIeXbKc/f6TABt+/tX023bKMEJ8gvzrDsqRQx1JgAkhlJp/266fO59KJXxSsqTG+6oZP1FPd8eyVu7CJd3344WYWMFikVSupJo2iXp7OTAUVSqsf9/X9h3Ex74igsD4+bLly2Y5HgAAAACHjB49WqVSjRkzRq/XHz58+PDhwykaNGzYcMuWLS4sAV2sWLE2bdrs2rWLEHLx4sWLFy8SQmbOnJnJ7j4+Phs2bOjYsaPJZHr27NmIESNsb0kkkrVr13br1s1isRQrVuz58+cWi2X06NGEkIiICCTABRwS4PyP8fdXT5usnz6H6PVEo7EcO6Ho1okGlXFsNNXUSYRhuBs3pI0aqn4YQ70d/5+mevY0IpGYw3+Xf91BPWc6E1DE4aHYckECIaaVa6T16qhnT5PUquHwUJIqlYjZZFzxP6pRK8d/L/30E4eHMsxfzFZ8jyVESE5WBg+Q1HQ8KgAAAICsGjx4cPv27VesWHH48OF79+7Fx8erVKoiRYrUq1evU6dOn3/+uasDJBs2bBg9evTOnTvj4uLc3d0DAwOrVKmS+e6tWrW6dOnS3Llzjx07Fh0dzbJsyZIlmzdv/t1335UoUYIQIpVKDxw4MGTIkMuXL4sT44ULF87JDwTvACo4MOEG7yBBrxf0BiqV6oaOst5/oFm/ig10MAcmHMdHv2SKFc1+VNydu7o+A9Rrlkneq5DdsXhrUssOim96ydq1zn5g/KvXVCqhHh6OdReStdq+g/iYWM26lYyXJ7Fw2fmmAAAAAAAAnAJVoAsKqlIxvj7Uw12zYjFTsoS2Z1/rw0cOjiWROCX7JYQQgSfOOAOJECJYeaJUEolzFjUwvj6OZ7+JSdr+wXxkpFvIGrZEcermhuwXAAAAACAvQAJc8MhlbmtXMKVLJXftzT977uJgOCuxWkn6R7RnZSjOaUNlg6DTafsH88+eu/0WygQEuDYYAAAAAACwhwS4QJLJ3FYvlZQrm/RVV9fnwPmJyaTt1Y+PfukWtoEpgh0mAAAAAAB5CxLggkouV69YJClfLqljN/7xE1dHkx8IRmNytz786zi3jWsw9wsAAAAAkAchAS64qEKhXrmYDQpM7tbH+uChq8N5twnJWm2vfnxsrNv6VUzxYq4OBwAAAAAA0oAEuECjcrnbmmXZrYlV4P1b9WrTemS/AAAAAAB5FhLgAk+Wl2pivYP+W/XK8aOMAQAAAAAgpyEBBtTEygZUvQIAAAAAeHcgAQZCUBPLIah6BQAAAADwbkECDG+gJlaWoOoVAAAAAMA7Bwkw/As1sTIJVa8AAAAAAN5FSIDhv1AT621Q9QoAAAAA4B2FBBhSQU2sDKDqFQAAAADAOwsJMKQFNbHSgqpXAAAAAADvNCTAkDbUxEoBVa8AAAAAAN51SIAhXaiJZYOqVwAAAAAA+QASYMiQrSZWtz4Fdj+woNNpBwxB1SsAAAAAgHcdEmB4G5nMbfVSNrBMUvvOfPRLV0eT63he26sf/zwSVa8AAAAAAN51SIAhE+RyzdIFbFBgcpde/NNnThyYursRiYS6uzlhKKWSSKVUo3FGXP8wmZJ79+NjYjVrV6DqFQAAAADAu07i6gDg3UDdNJo1y7U9++pGj5M2/kyIfcW+V0HWugWh1PFBrVZz+AH+8WPznt+Vg/oTls1OhOYDh6x37poPHJJ8UIN6eWVnKO7Sn5Yjx6mbhrt9h3/yTLNuJVu6VHYGBAAAAACAvIAKguDqGOCdIZhMSS3bWw4fJVIpVas1yxfKWrcghJCs/ltEKREE47JV+inTiURCLJxq8njFgG8JwzgyFCGWw0e1A4YIej0xmeTdu6hnTyMKJRH4rA1FKGGo9c5dbc++3PWbhGHYUiXdD+5hA8tkcRwAAAAAAMiLkABDVpjNSW07WY6fpN5egl7P+PiwlStmOWUVs1ae5y5fEQwGqlYLOh2VyyU1qxOJxLHRrDf/4mNeUXc3YjYLnFVSszpVq7OeABPCMPyjx9YHj6ibRtDrGX8/9z3b2XJBWR4HAAAAAADyHiyBhqyQyYhcJuj1RKUUEpMlTT6Xf9XOwaEEwZCcbDl1lioUJFnLVq4o796FOroK2rR9l2kuAwzpAAAgAElEQVTrDqpSCslapnhReeevGHd3x8Lirlw3LFgsaHWCwUAEgUjx3wgAAAAAQD6Bv9xDFlhOn+VfRLHlywqJSdIvPldNn8yWKe3waEypkrqRY7mrVyW1aqh/nin5oKbDQ0lqf0jMZvMfR5lSJdU/TZS1b+PwULLWLQWTyRSyhfHzVY4azpYq6fBQAAAAAACQp2AJNGQWdzoi+duB8h5d5J2+El7GsFUqZb/ksuXiJV3/Ieql86W1P8rmUEJCQlK7Toqe3eU9u2ZzKEIId+0GVSrYcmWzPxQAAAAAAOQRmAGGTOHOnkvu3U/erbPqhzGEEJKNiV97jIcH9fZmfLyzPxR1d6e+voyvjzPiIpJqVZwyDgAAAAAA5B04BxjejjsTkdyzr7x7F9WkH5w7smAyEY4TjCbnDGWxCCYnDAUAAAAAAPkSEmB4C8uJ08l9Bsi7dVb9OM7VsTiHyWRKSkriOM7VgeQIns9y7essdUlKSoqLi7NYLFl9CgAAAACAy2EJNGTEcuKUtv8QeaevnD73m/suXbq0bdu2e/fuRUVFGQwGd3f3woULv/fee127di1b9j97fZOTkydNmhQZGUkIqVu37tChQ1OPdujQoTVr1ojXo0aN+uCDD2y9KKX2LQVBkEqlbm5uJUuWbN68eZUq/1lcvWDBgrNnz6buIpFI1Gp18eLFv/jiiw8//ND+3WfPnk2aNEmn0xFCvvjiiz59+ti/e/PmzSlTpkilUkEQAgICpk+frlKpUsf/yy+/nD9/nlJqsVj69ev3xRdfZPzT27t37/79+x8/fhwVFWU2m318fIoVK1azZs3evXt7e/+7gj0uLm7ChAmvX7/O4Ee3cePG8PBwQoi7u/uUKVMCAgLSfOL169dnzpzJ8zyldODAgZ9++mmazdJ84tWrV2fNmsXzfEBAwNSpU93c3FL0Onr06IoVKwghlNKxY8e+//77GX98AAAAAMgnBIB0WE6djStXVTdpag4+4vqNhE+bWK7fyP5QvF6f2Kajafuu1G9xHDdz5kxfX980/xMoXbr0hg0b7Nu/fPnS399ffLdZs2ZpPu7nn3+2jRAWFpaiV3r8/PwmT56s1Wpt4zRr1izjLp6eniNHjkxISLB1+fPPP23v9uzZM0VgMTEx9jn2+vXrUwcfGRnp5eUlNmAY5ubNmxn8YKOiovr16yeRpP1l2UcffXT48GFb4ydPntjy7fR+dP379xcbUEr/+uuv9J47YMAA21O++eab9Jql+cRdu3bZ+s6cOTN1r0WLFtka7NqVxr8zAAAAAJAvYQk0pO1N1asuX6smT3B1LNk1bdq0cePGvXr1Ks13Hz161KtXr//973+2OwzD2PLD1JOHIqVSabuWyWQpeqUnNjZ28uTJEydOtN1Jb3ybhISEefPmDRo0yPTP9maJROLp6Slea1IV4vbz85szZ47tpZjbp2izfPny+Ph48Xrw4MGVKlVK7+nx8fGdO3deuXJleivGz58/365du82bN1utVvGHYJsQTu+jqdVq8cLHx4dN5+Tn+/fvb9u2zfby5MmT4hxvamk+UfwnIlqwYMFff/2VopdCobBd2zcGAAAAgPwNS6AhDdyZiORe/eTdu+SDfb/37t379ddfbS+rVq36+eefe3p6vnjx4siRI/fu3RM3wQYHBwcFBdWvX98pD/X29q5cubK4sFkQhISEhMjISFsKt2TJkq+++qpOnTr2XeRy+fvvv69UKsWvppKTk6OioqKjo8V3N23a1L1796ZNm2bm6Q0aNKhTp05ERAQh5Pjx47t3727T5t+DkSMjI1euXCleFy9efNSoUemNw/P8hAkTjh8/brtTsmTJatWqyWSy+/fvX79+Xdw8nJycvGTJkpYtW6bOxh127Ngx+y8s7t27t3nz5uDgYAeGio6OHjVq1P79+50VGwAAAAC8u5AAQ0qWE6e1/Qbnm6pX+/fvT0xMFK/79es3c+ZM24Thixcvpk6dunz5ckKI1Wq9evWqsxLgDz/8cO/evbaXOp0uKipq7ty54rZhs9m8efPmFAmwn5/fli1bihcvLk7YGgyGmJiYRYsWLViwQGywe/fuTCbACoXixx9/bNmyJcdxVqt14cKF9gnwrl27Xr58KV63a9euRIkS6Y1z7NixpUuXitcsy44fP/6bb74R2ycmJp48eXLMmDF37typUKHC3LlzbfO6TmH/0xNt27Zt8ODBKTZLZ9LBgwc3bNjQo0cPJ0UHAAAAAO8qLIGG/7CcOKXtH5w/ql6J7t+/L16oVKrvv//evmJTQEDAggULOnbsOGzYsOPHj9tvOs0mlmUldjw8PCpUqDBt2rSiRYuKDe7cuZOiC6VUrVbbOrq5uQUGBv7000/ly5cXG9y6dUtcZpwZX3zxxUcffSReR0REnD59WryOioqaP3++eO3v7//tt99mMMju3btt10OGDJkyZYotW/bw8GjZsuWmTZt69uwZGhpau3Ztx1LTNJ08efLQoUPij9HDw0O8eeXKldQrmTNJEIQffvjhxYsXzooQAAAAAN5RSIDhX9zpCG2/YHmnDqop7/y+Xxvbulyz2bxz584U78pkss2bN//666916tRx4l7QNA8W8vX1tW0STn2MkCAIplSHGIulqsVrk8mU+QSYUjpixAipVEoIMRqNs2bNEp8YHh5u+0agZ8+elStXTm+E169fHzx4ULz29/dPs55z9erV161bV6NGjTRHYJi0//eS3n2bXbt2iT8KT0/PiRMnFitWTDx+af369Rl3zEBkZOTUqVNTb4cGAAAAgAIFCTC8kZ+qXtmzHZ/DcdyYMWO6deu2d+/eO3fuGI1G8f5b8zEHpFkz+fLly+LRSmkWr2IYxt3dPcXNmzdv2uaK3d3dxYQ2k9q1a9egQQPx+sCBA7dv3yaErFu3zjZa9+7dM+h+5coVcYM0IaRFixalSpXK/KNF6c0JZzxXrNfrbbuOg4KCBg4caJvK3rJlS0xMTJZisP+Hu3z5cvH4JQAAgBwVGRnZv3//KlWqlC1btmTJksWKFQsICChcuHChQoX8/Px8fX19fHy8U/Hx8fH19fX39y9UqFDhwoWLFClStGjRUqVKBQYGVqlSZdCgQVn9JeiAly9f9u3bt0SJEmXKlOnfv39UVFROPxEg92EPMJB8VvUqhYYNGzZp0kRcUsvzfGhoaGhoqI+PT7ly5T777LMvv/yyevXq9iWdnSIxMfHu3buUUkEQGIYxGAzXrl2bPn26rfZyzZo1U3Qxm81XrlwJCAgQT761WCy3b9+ePXu2bb9uzZo1s7rMuE+fPocPHxZ3OK9fv75atWpnz54V3xowYECKE4lTuHv3rm2+tF69ell6rujUqVOdOnVKcZNSeuXKlQx67dmzx9bg66+/VqlUNWvW3L59OyHk+fPnFy5caNGiReZjkEqltWvXPnfunDilPGXKlHr16nl7e2MqGAAAcsizZ89q167t9H03N2/ePHz48JkzZ9565qLDXr16VadOnUePHokvV65cefDgwfPnzxcqVCiHngjgEkiAIb9VvUpBJpOtWrVq6NCh9mfDvn79OiIiIiIiYt68eVWrVu3Tp0+/fv2c+NBz5859/PHH4jWl1Gw22wpxiWuhu3XrlqJLTExMu3btWJYVBIFSynGcLVsWtWrVKqthdOjQYcOGDWIB5JUrV9rOy1WpVL169cq4r30RZtvW5Sx59uxZWFhYVnuFhISIF35+fm3btiWEtG3bdt68eWIN7Y0bN2YpATabzb17965Vq9a8efPESfi5c+fOmDEjvWONAQAAsinnqk7cv39/0qRJy5Yty4nBCSHTp0+3Zb+iJ0+eTJ06dfHixTn0RACXwBLogi7/Vb1KrUSJEqGhoSEhIZ07d07xvanBYDh//nz//v379Omj0+mc9USz2fzqH7GxsfbZr0QimT59elBQUIouPM/HxcXFxsaKXVJkv1OmTPnwww+zGoZEIunbt694rdVqbUununfv/t5772Xc136/cZaWXmfH06dPL1y4IF7Xr19fXHddoUIF2/cFe/fu/fPPPzM/oCAIHh4eP/zwg4+Pj3hn+fLlt27dsh2kDAAA4Fy2Cho54cSJEzk3+NGjR3P5ia5ltVo3btzYpEmTgICAQoUKvf/++2PHjrXtVhM9ePDAtmkO8g1MgxRob6pedf4qn+37TU2lUnXt2rVr16537tw5efLkzZs37969e+7cuaSkJLHB2rVrfX1958yZI2ZNtiWyTixu7Ofn99FHH/Xo0eOrr77KZBdPT88PPvigQ4cODk9QN27c+JNPPjl16pTtjpeX1+jRo9/aUS6X2671er0Djy5atOgHH3yQ4ial9MaNG7ZCXCmEhYXFxsaK16VKlbp27RrHcRKJxJa+GgyGI0eOpFd2K02vX7/29vaeOnXqoEGDCCHx8fE//vhjkyZNGIZJs1YZAABAdnAcl/nGDMNUqFChSJEiMplMrFtx+vRp++/NU3Dil/Wppflr0Yl/EcpRFoslLCws9Qq79Lx48aJ9+/bnzp2z3YmJibl27dqyZctWrVrVqlWrI0eOrF27Nj4+/siRIzkWNbgGEuCC603Vq26d8/Hcb2oVKlSoUKGCmOVeunRp6dKlmzZtMpvNhJDQ0NCRI0cWKlSIZVlb8aTU5ZpF9r8PUm8orVy5sq1sMs/zMpnMx8enbNmy4qPT5OXlNW7cOHF7Ks/zEonE29s7MDCwYsWKLMs6/Hk1Gs3o0aPPnDlj+63Wpk2bwMDAt3YsXry47dpWDStL6tevv2nTptT3x4wZ8/PPP6e+n6LO8+rVq1euXCkuCLf/Ce/cuTM4ODjz27bFDz5gwICtW7ceO3ZMnEZ+8uQJy7JIgAEAwIVatWo1f/780qVL29+sVavW5cuX0+uS+fMgHNCoUaObN2+muNmwYcOce6IT7d+/v0ePHq9evRo2bNhbGyclJTVu3PjWrVtpvtWpUyeJRGKxWDw8PM6cOZMz8YIrIQEuoLgz55J79c2XVa/SZDAYZDKZfSZJKf3ggw/Wrl0rLoARv/n7+++/CxUqpFarbcfPvnz5UpyETDGgmDOLUp+fFBgYmPERu6m5ubkNHjzYtk3XiT777LOqVatevXqVEOLt7Z3mgUapVa5cWalUGgwGQsihQ4eGDRvmrO+A0ytAde3aNftfRel9/x0REbFv37727dtn8nFi2JTSOXPmNGnSJD4+3mw2X7p0yaHYAQAAnKNevXrbt2/Pak2K9L6Xd4qJEyfu37/f/lvvMmXKTJjwbiwSPH36tCAII0aMSEpK+vHHHzNuPGHChDSzX5EgCBaLxcvLa+3atXfu3Dl69OiQIUNyIGRwGewBLogsp868mfvN79lvdHT0jBkzvvrqq4YNG65ZsybNNra9tRzHJScni6t/S5QoId68f/++fTkoG/FUIXFxdeoaUfbpcSbxPJ9i36+zqFQq23RuoUKFypQpk5lelSpVqlWrlnh97Ngx+zVC9k6cOJHeAun05lfTu79t27ZMFmfet29fZpqlUKtWrQEDBjjQEQAAwOmGDRvmQEXGHD3FwNfX98yZM4MGDQoKCipbtmxwcPC5c+f8/Pxy7olOFBcXJ/58Jk2a1KlTpwyWkSclJa1evfqtAxqNxnbt2o0YMUIsyQn5CWaACxzu3AXd4OGytq3ywspnqlYRiYSq1U4YSqkkMin97wxqYmLi+PHjxWuDwdC8efPUyapta4dKpSpSpIh4Xbly5a1bt4ozwDt37hw4cKB9l6tXr+7Zs0e8rlChQtmyZbMfv2O/1ex36mbAth+J53mTyeTm5paZkZs2bSpuHjaZTNOmTVu/fr2vr699m40bNwYHB3fp0mXevHnZnLt+/Pjxb7/9Jl5XqVJl6tSpKebV9Xr9qFGjHj9+LGbdsbGxDvxKHjZs2MGDB7NURgsAACAn2G814nn+4MGD8fHxgiCIiVx6cnrzjp+f35IlS3L0ETnEvrxlWFhYRETE3Llz06y6cuHCBXGBW8YMBkPJkiX/+OOPYsWKOTtYcDEkwAWD0Wi5fIVwHOF53ZgJslbNVNMmuzomQgix3r0vxMZab99ly5TORPMMh3rwkI+Msv59T9q0se1m2bJle/bsKe4svX79eseOHX/66afy5ct7enpaLJZnz56tW7fOlsqWKlXKVpzZNi0sCMLYsWPFPTAajcZsNt+/f3/8+PHR0dFig7Zt26qdkcA75vnz5+mlc0FBQe7u7tkZvHXr1r/++qs4Ab5v374uXbqMGTOmdOnSUqk0NjZ29+7ds2fPNpvNy5cvN5lMCxcu1Gg0Dj/r6NGjth/p119/3bp169Rtbty4MWXKFLEk46ZNmzK5ltuev7//5MmTW7dujXOAAQDAteyLWRw6dKhZs2aZ6YXqFempXbu2/cunT5927NixVq1aw4cPb9++vf2EQcZfMdgUKlQIZyDnV0iACwBB0M+aa1iwlMrlhLcqhg1R/fD2IsC5wLx3n27EGP51nG7oKGK1ylo1d3go7voNbf8h1jt39bMeCTyvHDKIsIxYXPHHH388cODAy5cvCSFnz55t2rRpQECAn5+f0Wh8/vy5/QqZvn372qZGGzZs2KZNG/Ho4KSkpEGDBvn4+CiVSo7jYmJibL9+vLy8OnXqlO2fhON27tyZ3nrgHTt2NG7cOM23MqlSpUqzZs2ybWY+fPjwkSNH/Pz8WJZNSkrSarW2lk+fPs1mWQ7bp6CU1q1bN802nTp1WrBgQUJCgrheesiQIbZaZZnXsmXLvn37rly5MjvRAgAAZJP9QifbmRSuFR8ff/r06RQ3a9WqZVsfd+/evTt37ti/6+bm1qBBAzGrXLVq1Z49e+7cuWM2m/38/KpXr962bduOHTumLpWSE1q0aBEQEJDiBOZLly517do1ODi4efPmn3/+ea1atYKCgjIZT9GiRZH95ldIgPM/69/3TCGbBbOZSiUCZ7XevKkbO5GYTK6MiVLC8+Y/jvHRMdTTw/rkqeGXhdIGn1BHZyyNS1dx584zRYvy8QnGZavkrVswpUuJb5UpU2bFihW9evUSEyeO454+ffr06dMUIwwePNi+woFcLp87d+7NmzdtB/a8fv06RReZTLZ06VL7E31t84qZn2B0oIt9Y4vFkl49DJPdP2LHnkII6dOnz+PHj6dNmya+5Hle/CrB3ueff7527Vpb2bC3Pit1g4iIiN9//128rlevXp06ddLsWL58+SpVqoirsq9cuXLjxo1q1arZn1mVyU83YcKEPXv22CacAQAAcp99GubAZuCccOfOnVatWqW4uXXr1g4dOojXW7ZsSVFfqnz58nfu3NmyZcugQYPsS5lotdpHjx7t2LFjxowZYWFhVapUyengFQrF4sWLO3TokHqSPD4+PiQkJCQkhBDCsmwmF6xlZr8YvKNQBKsA4AWB4yjLEImEmM2C0USlUqrRuPKPWk01GkIJEXgi1hbmOJKNIsNUo6YSKeF5QohgsQj//X9f69att2/f3rJlyzT7Vq5cecmSJb/88kuK04YCAwO3b9/epUsXqVSautfHH38cFhZmP/0rCIKYYxNCxGJamWGbR01ISMjkuiar1ZpBaQf7ZrZrWzwJCQlZyoEppVOnTl2/fr2tIJY9Nze34cOHb9q0ybY9hud52w/BforYnq1olu035Zo1a2ynzHfr1k2hUKQXTJs2bcRrnU43b9488TdZ6ifaFyFLfX598eLFZ8+ebXvpQMUyAAAAx9SqVevZs2fR0dGlSpWy3WzRokV0dHRkZOSzZ8/Kly/v0gCzhuf5VatWdenSJb1Cnrdv327QoEGKeeOcsGDBAvEvLRl/m5DJv0QRQgoXLuy86CBvyRNfOEGOYssFKXp2N/yykH/1WlqvtmbBXKZ4ntjNL/mwlm7UOD7mJVu8mHL4EJqNb9qEpCQilwtaLVUqlf2/YUsUT9GgUaNG9evXP3DgwJkzZ2JiYgwGg0Qi8fT0rFKlSqtWrdJb4lK1atXQ0NDevXufPn365cuXYkrp6elZs2bNZs2apfhqUK1WT5w4UZwotp8Wzljv3r3F/cbu7u729RsyEBAQMGvWrNR5XQqVKlWyXQ8cOFBcDu3j4+PAjuUePXo0b948PDz86tWrYqKuUCiKFi3auHHjFLO1np6eU6dOFZdy2Qdgr127duJiKpVK5e/vLy44L1asGKWUZVlbipum7t27GwwGjuMEQfDx8eF53svLK/UTK1WqNHnym13uaS6o7tGjh1arjY2NzSBOAAAAp5PL5amLKslkMttfRVKvOMvLoqKigoODM/5uPS4urk+fPmfPns3RSO7du+fEIxuz9Hc5eOdQFIMpEDir+cAhPvqlrEVTJi99oWXef0g3cox65lRZ67SnZ9+O53VjxnPnLypHDBG0Olq4sKxxIydHCQAAAJA53t7eGZxrWK9evdT7bG0sFotSqcygrIaXl1cmazg5ICIiIvW3xvZLoKdOnfrWI3bTc/z48U8//TTbMaZrz549aVbQdNjOnTsz/lIe3l2YAS4YJKysxZeuDiINbLkgpmgxtkplB/sLgm70D+aDh922bJRUrujk4AAAAACcShAEMb+133hlNBrFdbmxsbHZLCqZZ4WFheVoAtyiRYuqVatev37dKaNJpVKxuBfkS9gDDK4k6PXEYhF0Ose664aPMf9x1D0sJKvZr5CUxL96LeSNoot5mtnMR77go6KJhSOEEIuF4AAGAAAAR509e1YikUgkEvttsTt27ChcuHDhwoVzoVhUTvjyyy/PnDmTlJQUFRW1cOFClUqVus3FixdzNAaGYdatW5fNAyBtGjVqlMmNafAuwgwwvKt0Q0ZYzkS4rV/NVnovk124P6+ad+6xPnrMR78kRiNRKJjChdgypeVftWOrZLQRlDt/0bhqLaGUUKocMjC9xkJSsn7ufP7JUyqXKfp/K6lZPUUD/mWMYd4C4fVrYuFkrVvI2qe9tEbQ6w0//2p9/JRYrdL6Hyu+7ZVeYObtu8y7w4lGTYht04tAKKVKBdW4seWCpA3qMwFFMv6xWI6dNG0IIayEKOTKEd/Zn8ksmM3mQ39QmYzK5dTPj7tyVdHvG6pSZjgeAAAAFBRNmzYNDw8XDyZ0c3MbMmSIh4dHz549UzSLiYnJ6UiqV69+5MiRjh07Pnr0KJtD9ejRw0lBQV6EBBjeSbphoy1nIjSrl0rer5qZ9oLJZFy22rh4mfXZM8pKiERCKCWCQDhO4DjT1h2q0cPkfVL+z9rGtHOPYc0yRuHFGxOpSqme/3PaTzEYzNt3WW9dJ0TgX7123xpK/ltZWkhMNG3Zyj97SoiJBhRJLwG23v3buGgZHxdPBI67dFnWtDFTrGiaLS0XLxs3rqFKr1Q1tKkg8FQqZcuXV/TsovimN1HI0xyBmM2GxctMO35j5O6CScsU8ldNHPfvKBoNW6I4VSotZyIsm39jfLyJ06pLAAAAwDtvzpw5YvZr061bt4kTJ6Y4cvKtxTudokKFCocPH167du2SJUtsh0RkVfHixW3bniFfwhJoeNfwvG7kWPPRE5q1KyU1Uk6xpscwfY7u+/H86zjGz48oFYTnCccRnicqJePvx7+I0g4brZ8yI83F2EJiInf+IuPmT319GK/C5gOHrH/fS/sxDEM9PaiHD1O4uOXYCeP60JQNWJZ6eVIvb6ryoWktEBJZDvwhGE1MQBEmoDj/5Jlp2870WlKViqp8qLc39fIiMjmRSIhEQiRSIpNStZoqVdY7d7XDv9eNn0TSOS7Yev+h9ep1xqcI9fOlak/LiVPkv7+iqI8P8fCQ1K0ta1Bf+llDgrJ5AAAAQAghRKPRVK6cspILwzCpb3IclwvxREVFVahQYfr06Q5nv4SQcePG2Z/SDPkPEmB4p/xb9Wq9pFpm98mYQsMMC5dSD3eqUgrJWqZogKx9G8XAvrI2LZlChYRkLdWoBYPRtCGUj36Zurt5737uyjWqURNCqFLBR77gzkS85ZFSKREEw8+/WB9keREO/yLKtGMXkbCEUsJQQojl8FGS8a8NQSASCfteeUn19yXV35dUq8yWKcN4egpmE9WoGQ8P46q15sNH0uxqOXaCj42lcjkhhKpV1jt/W87/Z5eOpGplyXvlpfXqKIYMlH/Vjiqx/hkAAACIuOY5zZOH3FKdbZk7586ULVt24MCB2Rnh/fff79u3r/MigrwIS6DhXaIbPsZ87IR7WAhbMbP7foXkZOOK1cRsphq1oNUpundRDB3Elg0ihBBBsN6+a5i/yLjqf0zp0ur5P7OlSqbqL5jD9xGzibhpiNlMpFIiEPOhP+Q9uqZY3pyiF3Vz4588M8ybr1n0S0YtU+Eizlvv3adqtThnSzVq7q9b3NXrklo10n2a0cj4eGsW/8qWLkkIEXieGIx87CvTxs3GtRuoSkm0WtPGzbImn5P/ng4vvI4zbd1OCCWUEo4jMpnwOs4UGiat//G/a6rt1zUx+MoMAAAA3pBKpWnel8vT2XiV8+bOnfvo0aPw8HAH+ioUinXr1kkkyI/yOfx1Ft4ZuiEjLCdPZ6nqFSHE8scx61+3qKeHEJ8g/fRj9S+z3mS/hBBK2YoV1At/UY0fq/l1jqxls9SZqvXhI+76DaJUEZ6nfn5UKqUqpeX4acuJdA/xs6FuGtOmMHP4/ix9TMuxE2KxZerhQb29CMsKMbGmzb9l1EcQCMMwhQtRLy/q5cX4+DDFikqqV1PPnipr+aWQnExUSu7yFev9BymfdeEid+MvqlYRSolcTgSBKBWWU2esT56m8yQAAACAN9LLFRnXfWMuk8l27do1b948f3//LHWklC5durRatWo5FhrkFUiA4d2Q1apXb/C8ec/vgt5AeJ56uCu/G0RSbeqgCrlq2iRZ6xZpDmDesZt/+pxQyvj6Kr8bRH28BV4Q4uLSW1H8L0EgMhnhecO8BXzki0zGy924aT74B1EoBKNR3r2zrGkTISmZyLwEJhoAACAASURBVGXmP47yL6IyfpxgMKS8KZXKGn9GKCWsREhItD5+kuJ9y4lTxGAUzBamaICib28ilxOW5aOiudNnMxkwAAAA5Jo01xu7EJvOGjcXJsBiVCNGjHj+/PmJEydq1aqVmS6U0p9++ql37945Hx24HhJgyPMcqnr1puurV9yt20QuE3R6Sc0a0k8/yVJ3IT7BvDucMAwxGNiqleU9u7LvVSAGPVEouIjzQkJiuj3FEtMWC/Vw585dMCxalsknWn4/yD9/TliWqtXyrztIGzciLENkMv75C+68IwfoUY2aSGWECAJvFbT/KfFlffjIvO8gUciJ0SCt/7Fy5DBJ5YrEaCQcZwrbJuhTpdMAAADgUuklnHlNXkjUr169OmHChEuXLr21JcMws2fPnjBhQq7EBa6HBBjyNoeqXv3bOy5BSNYSliW8lS1TimRxUwd3/ab1wUOqVBCBl1StTOVyedtWVKmkCjl39bp57750expN7Hvl2TKlBb2BeHqYQrdYjp/MxPM4y7kLhJUQo5EtU5otWUJa/xO2SmViNBGT0bR1R3qVnDMikVCGEkIIz6co72z+/QB//yGVSqlGI2vyGVXIpY0aECtP1SruwiXH8m0AAADIOXkhsbSX3kyvC+O8f//+8uXL69ev/9FHH506deqt7X19fXfu3Dl69OhciQ7yBCTAkKfpho8x/3HUPSxEkumqV/YEk4lwHKGUEEo1mqx2N+/aIyQlC1YrExAg/eJzQoi0QX02KFAwmYjZbA7fl96ZQIJeJ6lUUTlxHFUqKaXC6zjDrHnisboZHCNkOX6SO3+BqlTEyktbfElkMqpWyb5sQjgLVSotJ09zl69k9SO8OfFYXJJttdq/w509RwgRTGamWDG2SmVCiPSjD6iXJxEEIVlrwSpoAACAPCa9olOukl4CnMtLoI8cOdKgQYNy5cp5eXmJhaBPnTr11rrTDMN06dLlxo0brVq1yq1IIU9AAgx5l2NVr/7DaiU8/yYDzOKqIT7yhfnocSKVEoNR1raVpGoVQgj19pI2/JRYLESp4K7fSF1W6p/OvGAwyL5sImvTgk9IpJ4elrPnjGvWEZbJYBbatG2XEJ8gcBxbNlDZu4d4U/blF9Tbm1AqxMVb3nr8UmosS9L6Fpa7cNEScZ6qVITj5O3bMIX8CSGS2h/KmjYW9AYik5p/389HR2f5cQAAAJAJI0eO7PSPxYsXZ7JXXitQnEeWZH/22Wfh4eEDBgzw9vbOTHulUtmtW7fLly+HhoYWLlw45wOEvCVv/VcEYONg1asUZFIiYcVJV8FszlJX7vxF/lkkVcgFlqEe7tzFy2IuTX28qcaNMJR/+ty0badqXFprZigVDEZCiHLUcO70Oevjx0TCGhYsoV5ejJsbn9bj+NhX3KXLRKEgAk99faz3H5CHjwghfFISE1DEev8BkUjMvx9Q9OlJvTyz8DEs3L9zznaZsClsuxD9knp5UoUH9fPhLlwigkBYlilenMrlRCa1/nXLvO+Qok+PLP3QAAAACrhM5oT79qW/kSp9CoXCgV65L/eLYGk0mhEjRgwfPvz8+fP79+8/f/787du3X7x4wXGcuCRbnByuUaNGgwYNmjZt6u7unssRQt6BBBjyHp7Xjf7BfPSE28Y1Duz7tUdVKiKTEV4gRBBex2Whp9li2rqDmExEraIymel/G4xr1hMiEEKpREIUcsLzhGXNe35X9v+Gpvl1I6WEELZUScWgfroRY6i7u/AyxrhwiZCYSKUywZQyG7ccOGR98JCqlIRhrPcfJnXtLSaulGUFnqdKJZHz3J9XzIf+kH/dIQsfxGp9kwAzDPln3ZSQmGg5d4HIZYSVEAljmPOrwHH/fDqWqFXiemnLqTNIgAEAALKkcePGmzdvzqHBP/744xwa2TF5bQ8wpbR27dq1a9d2ydPhXYEl0JDHZK/qVQqMvz9TqBCxWIhMxt24ycfEZrIj9+cVy6nTVKMmAiEmE5+QIMTFC3EJQlw8/+qVYDAQQaAqFf/wMXf1esZDyXt2lbVuKSQkEJmMu3WHj31FZCk38AgGoylsO7FYiERCeF7QaoXXcUJcvBAXz8e+EpKSCc8TiYSYTJYTby/n8J+RzWbByhPxd8I/Xxtbjp/i/75H1Woi8ILewMe+svt0ccRkIoJAVGruTIT15q0sPQ4AAKCAmzZtmp+fX06MXLx48Z9++iknRnZYXkuAATIDM8CQt+iGjzEfO+EeFsI6VPUqBapRS+vW5k6fpW5u1lu3TVu2Kr8blLoZd/kKddOw5cra7ljOnhPiE6iXF7FyRC6nKhUhtlIKlAgCMZmIVCLExZt27JY2apBRDHK5cvgQy8nTgt5AVUoi1qP6L/7vv7kbN4lKJdapom5udo8jhFBiMhGrlahU3Omz1keP2dKlMvkT4CMjiclEVEoqk1FvL0IIsVhMm8MEnZ76eBOepyoVUdP/fDqeJxxHlQr+2XNT2FZV5UmZfBYAAACUKVPm/PnzEydOPHXqlNFotDhwgsN/yWQyhUJRv379GTNmBAQEOCnMNLAs6+XlleKmfdkthUIhNmAYhmEYSqnv/9m7z/goqoWP42dLNj0BAiEJCYRUIJTAQmgCIkhA7hUFL1JsgEpVkGLB+lzAS5MmKigqYECKV0DpKFKkCSQBAklID6T3usm2eV7MvfvkCUlERaPZ3/fji9kz7Zwzs2v+zJmZli3r3JSjo2OtJe/y7lzgD0AAxp/AfwNhxYvzDD+e/U1PvbqDZvSoqq3bRFm5UKurNnxi07e3upe25gKG8z+VPztd2ayZ06cfqYKDhBBScYn+4GGhVksVFargIMd3/0fh6Pj/Nmo2695bqz92XGFvZzhyzHQ9tuEKq3v2sJ/7YuWb/xS2mjqfxaU/fEwqKFQ4OQmDwf61BTb9ag/dMfx4Rrd8tUKjMSUl63f92/6Vef9vtiQJhUJxx90sxqjo6oidCluNVF2t9G2n6hAshDAlJRsvRgoHB6mk1Gb4gw7zZtdaS9LpKl5903QzQajVhtNnJZ1OYW/fQOsAAEBN7du3j4iIaOxa/GJhYWGFhQ3dL7ZgwYK7fF3Q8uXLly9ffu+qBtxLBGA0Ko1GKJUKV1chRMXLr+uPHXfeuuk3PfXqDuqunW0G9K/+cpfS08OckVX2/EyHV+eru3VVONhLFRXGy1GVy94zp6aZ9Inlz890/uJzZVtv/fc/GC9HKRwcpJJSzUPD67zAa/PQcP2ho8LBwZyVYzh3/mcTu+0zT+j37DNGXVE0b17rCrA5N696zzdCpZJ0OnXXznbPT1E4OtRaXRUcVL19lyk5RSgUhh9O2c99UdR8EYJaLQwGw+kzqjZeQgghSZJOZ7x6rXrrdlNiksLFReTm2QwZLD/q2XDqR3NevsLRQdLpNA8+oO7dq47W9e5lir6qcHU13UwwnvvJ5oFBv6jPAQAAgD8nAjAaVWWlMBikvHzdjt36/QedIz5Ta7vf410oFA6vzjdGXzEnJClatTSn3yp/cZ6yZUuFrUaqqjbn5QmzpGjeXOTlSyWlkskkhDCcPC2qqiS1WtnGy/bRul8NZ9Ozh9KjtVRSKoQwHP3e9uknFA2+mk/ZvLnD26+XPTFZ0ukUtrY1ZxnPnjfF31Q42EulpTYjht2ZfoUQimau6q6dTTfiFM5Oxrh4Y9QVdVjP/5trayuVllXMfeX/XvlrMEhl5cJGrXBxkQqLlD7edk+ME0JIJaX6XV8LSZKqq1WB/poHh9RZW83oUdX/3isMBqm4pHr7Dpv7B4g//HGOAAAAwD3HH7VoNMZLkRXzF5pSUssmPa/ft995+5Z7n36FEEKoOnVwWrtS6dvWnJWtUKkUCqU5O9uUkmbOyVWo1QqVypyVrerWxenTDar27cy3bhtPnxG2tqK8QhUcqOoYXPc2u4TYPHC/VFGusLc3nDhl+OHUf2aYzf/5744bfW2GDNaMeVQqKa21gOH4SaGrEiaTwt7BpkasrUXz8N+Eg71QKKTsnKqI/z5eUpL+szWTWaqokMrKpLIyqbxcqq4WGo0wGM3ZuUovT8c1K1QhnYQQxnPnDZHRCns7odPZhD+o9G1X575s+vdVh/WUysqFRmM4fcaUkvoruh0AAAD4syEAo5EYjLr31hqO/yDMZtP1WIV7q3s78rkWm8GDnLdvsXvmCWFjYy4tEVVVQq8XVTqpuESolHaTn3be/LEcv6s2Rxijo4TBKFVX2QweJOp747xCoXnk70KpkioqzHkZ+j3fCCEUSqVUWSmVlUtV5ZJOd+dKDq/OU/cINWdlS1Xl8nuJjdFXqr/6WjKZzHl5qq6d1b3qDcA2w4aou3Yx5+ZIBoN+335TUooQQqrWS1XlUnmFVFEh9AZhMAqDQRiMQgiFo4O6R6jDK3Odd2zR/G2EEEKYzfr9h6SiXKm8QkjizjuN/49arQ7rKenKhcFgupmoP3D4V/U6AAAA8OfCEGg0DslkMmdmKTQaoVYr7GzNmZlSUZHijmcP3kPq7t2cPvnQcPqM8dwFc0GhMJuEUqVs5qruE2Yz+P/ucVV36+y4ZpXC1laolJqH/9bABm3u6+f44RqpolIYjSrftkIIhZOTw2sLzAUFwmRWBQXcuYrSu43jmhXGCxeFQiGPYVao1favzFPY20lVVTa9eipc630tu8LR0eF/3jBG/V1hayuEpLDVCCE0Dz+k9HBX2NkK8d/3DUiSUKkULZqrvNuoAgMUzZv93ybMZvWgAY7BQUKtUtjZ2dzXt4HW2T7+mNLVVSgVUlV1zedjAwAAAH9dCumOgZrAH0P33rrKdxZLlRUKO3uHd163nz9H8NY4AAAAAL8bAjAaj9lc/e+9htOnbXr3th33jzrfDwQAAAAA9woBGAAAAABgFXgIFgAAAADAKhCAAQAAAABWgQAMAAAAALAKBGAAAAAAgFUgAAMAAAAArAIBGAAAAABgFQjAAAAAAACroG7sCgC/I4PBkJmZWVFRoVAoAgICbGxsysrKcnJyqqqqmjdv3qZNG3mx4uLi5ORkDw8PLy8vIURBQUFhYaFer5ckydvb28HB4datW1VVVZIk2draBgYGCiHi4+MrKiq6du2qVquFEHq9PiYmxsnJKSgoSN6CXq/39PQUQuTn56enp3t7e7u7uwshcnJyHBwcnJ2dS0pKKisr5WVMJlNWVpaHh4e8tYKCArPZ3KpVK0tDCgoKkpOTvb295eVrtbGgoMDDw0P+mJeXV1hYaDKZ2rdvb29vn5+fX11dLbe0oKCgqqqqTZs2ZrM5KyvL09NTqVSazeacnBx3d3eVSlVQUFBdXS13QlFRUVJSUuvWrX18fIxGY3Z2tru7u9FoLCsra926tVzi5uZmb28vhLh69apKpQoJCbHUSpKk1NRUnU5na2ur1+tdXFzc3d1zc3NbtWql0Wjy8vKEEK1atcrMzCwtLTWZTEIIb29vV1dXefWKiors7Gy5z1u0aNGqVaua6yqVSkdHx+TkZBsbG7nzfXx8zGZzdXV169at9Xp9Xl6ep6enTqfLzMysrq5u1qyZt7d3rSPr7u4uHxEAAABYEQlouhISEkJCQvz8/AICAh577LGysrLdu3e3adMmMDAwJCTks88+kyQpLi6uX79+7dq169Chw8mTJyVJevXVV318fIKDg4OCgvbs2XPp0qU2bdoEBQUFBwePGDGiqqpqw4YNHTp0CAwMDA8PLywsLC4ufvzxxzt27NiuXbv33ntPkqR//vOfjz/+uCRJly9f7tGjR7t27bp06RIVFSVJ0qRJk5544glJkrZu3TpmzBiz2SxJUnR0tK+v7zfffCNXe+HChS+88IKlFVevXu3bt2+HDh2CgoJ27dpVq42HDx/u1KlTbGys/PH5559v27ZtQEBAnz59EhISvvrqq759+1ZUVEiS9MQTT0yfPl2SpH379rVr1+7s2bOSJFVXVw8ZMuT111+XJGnp0qV/+9vfJEmKiYnp1atX27Zt/f39T5w4kZeXN2DAgNjY2LNnz4aGhsoZu3///j/99JMkSS+88IKXl5eXl9dLL71kMBjkahiNxvHjx/v5+Xl5ebVv337BggUJCQlDhw6NiYmRJOnFF1+cMWOG2WweMWJE+/bt5a7ev3+/pVE7d+708vKS+/zNN9+MjY29//77r127Ju/ulVdeuX79eqdOnby9vb29vQMCAo4cObJixYpJkyZJknTt2rUhQ4YUFhbu2bPH29s7MDCwU6dO27ZtkzvWcmTff//93/8EBAAAwJ8LQ6DRlJWWlmZnZ//zn//ctWvXhQsX9u7dW1hY6Orq+vXXXz/44IOLFi0qLi5+5ZVXHB0dt27dev/998+cObOsrCwjI8PX13fbtm3bt2/v169fYmKiEOKjjz7atm3b0qVLdTrdu+++O3To0F27doWFhZlMpp07d+7fv3/jxo3vv/++s7OzJEkFBQX5+fkmk+mll17y8fH54osvunbtOnPmzOrqaqPRGBERcerUKYVCkZGRoVAohBBHjx5NTU3dvn27XO28vLycnBxLKz799NPU1NSIiIiZM2cajcZabfzqq69u3Lixc+dO+WNiYmLfvn0//vhjs9m8cuVKrVabmpoaFRVlMBhOnjzZp08feYNpaWknT54UQqhUqszMzCVLlsTFxSkUitzcXIPB8OKLL7Zo0SIiImLOnDkajUan06Wlpen1eqVSGR0dvWTJkqqqqqysLLVafeLEiYiIiA8//HDz5s1+fn5K5X9+UpRK5csvv/zOO+9UV1fPmjVr8uTJlZWVqamp8tz8/Pzs7GyDwZCamvr0009v27YtIiIiLCzM0qjbt28LITZt2rRt27ZJkyaVlZUlJydXV1fLl9ATExPbtm27YcMGf39/f3//TZs29ejRIzk5OSsrSwhRXV1969Yto9F469YtT0/Pr7/+evz48fPmzSstLa15ZEeNGvU7n30AAAD40yEAoynTaDS2trY//PDDrl27dDqdu7u7o6NjeXn5nj170tPTe/ToYTAY4uLinnzyyYEDB06fPr2wsPD27dutW7fOyMjYtGnTrl27mjdv3qxZs6qqqoiIiE8++SQ3N9fZ2fmhhx46efLkBx980L1795YtW4aGhnbr1m358uU//vjj4MGDFQqFSqVycXEpLi7OzMx85plnBgwYMGvWrJSUlIyMDHkM81tvvZWWliYPcs7Pz9+/f/+bb76ZnJx85swZIYStra2dnZ2lFQ8++KCzs/PSpUsrKysffPDBmg2MjIyMiYlZsGDBoUOH8vPzhRBqtbpTp06DBw+eMGHC9evXfX19H3jggX379n399detWrUaN27czZs309LSZsyYceLEifLycpVKJQ/zXrp0aW5uroeHR0FBQVJS0pQpU+Rq9+3bV6fTOTg4KJVKlUrl5OS0YcOGiIgIb29vpVJ54MCBESNGjBo1Kj093c3Nrby8XK6YQqEIDQ0NDw/38PAYNGhQhw4d7O3tDQbDSy+9NH78+DNnzrRq1UqlUjk6Op46dWrTpk0nTpxwc3OztMvZ2bmqqmrLli2bNm0qKipycXFxcHBQqVRCCHt7e7kaAwYMCAwMDAwMHDRoUMuWLYUQDg4OcqR3dHRUKBROTk5FRUV79uyJj48PDQ3VaDROTk7ykd26dav8Tw8AAACwKgRgNGXyPa4xMTE3btxYsGDBsGHD5MHAX3zxxZEjR1avXt2sWbPq6mo5WSmVSnl5eV2z2WwwGOQxvfJNp87Ozmq1WqlULl++/O2337axsZk1a9YXX3wRFhb25ZdfDh48ODExcfTo0enp6S4uLvL9BXIYlnOpUqk0mUzl5eV///vfW7Zs+f7778uzzpw5c+HChby8vLi4uB9++EFeUaPRWFoxfPjwHTt2hISE7N69+/nnn9fr9ZZZJ06cuH79elZWVmRkZGRkpFwoSZKcA+V7a8eOHbt///7FixcPGzZMo9Hs378/ISGhvLz89OnTR44cke9Anj9/fkZGxqeffurk5CTHV7lutVRUVAQHB48bN+699967deuWnZ2d0Wi0t7fX6/UHDhyYNm2a5RqvrKSkxGQylZWVWXrDycnJ1dVVo9HIlZQDrbOzs3wvcS0mk8lkMhmNRkmSDAaDo6OjfJgMBoO8gF6vt/SGyWSSM61817FCoVCr1Waz+csvv9y5c+dHH31kZ2dXWVlpY2Pj7OwsJ+TffH4BAADgL4YAjKZMp9NJkrRq1ap9+/a9/PLLQojMzMzg4ODjx48HBwfv2bPHxsamXbt2u3fvjoyM3Lp1q6OjY5s2bTIzM3v27Llx48ZVq1Y5ODjk5eU5OjpOmjRpxowZvr6+GRkZL7zwQrNmzV577TU7O7uUlJR9+/bJN/1Onz49Pj4+MzNToVCUl5e7urq2aNFix44dkZGRn376aevWrb29vbOzs/38/BYtWpSTk5ObmytJ0t69e9u3b29jYxMWFvbNN99UVVXZ2dnJ45YjIyN1Ot2aNWv+/e9/T506dciQIVFRUZbIV1lZuW/fvm7durm5ucm3NJvNZoVCkZSU9NNPP+3du1e+2tynT5+MjIyYmJiHHnqovLx88+bN999/f4sWLby9vb/88kuTyVRcXBwSEjJ//vzi4mL50Vbe3t7btm2LioraunXrmTNnbG1tq6qqzGazXq+vqKh49913/f39U1JSbG1thw0b9u23354/f37kyJFGo9Hyzwcys9ms0+nkHF5ZWalWq//1r39t2LChT58+BQUFJpOpsrLy/vvvnzFjRnh4eGlpqWXFoqIid3f3zz///OOPPw4LC3NxcVEoFDt27IiKirp48aLl4VXV1dXyuGghRMeOHS9fvnzp0qX9+/cXFxc7ODjk5ub26NHj6NGjHTt23L9/vxCivLzcx8dnxowZzz77rL29vclkOnv2rDxwGgAAANaAAIymzMbGpnXr1jUvZrq4uNja2np7e8+cOXP9+vWFhYVr1qyRr9zu3r37vffea9asmZ2dnXwhVNa6devy8vKxY8cOGzZsxowZrq6urVu3fvLJJx944AE3N7dJkyZ16dLl2rVrAwYMeP7556dPn96zZ08hhJOTk42NzfLlyyMjI0ePHn3s2LHVq1fb29s7ODiYTKaOHTtOnz7d09MzKSkpOjp69erV69ati4iI0Ol0Z86cCQwMvHr16tixYx9//PG4uLj77rtv69atAwYM+Oqrr+bMmWOp2+nTp3Nzcz///PM1a9Z88MEH165di4uL69Chw7FjxyZMmJCVlTV79mwhhLu7+8iRIzt27NivX7/Tp08bDIbPP/989erVS5cuTUtLS0xM9PHxqaqqCg8PHz9+vFKptLGxee+99+Lj4x999NGFCxfKYdLd3d3GxsbW1tbJycnd3X3JkiW+vr4lJSUjRowYMmTIhAkT5FRc60KuWq12d3e3tbWVh6O3atVKTu9OTk4tWrSwsbHx8PBYt25deHj4Qw89JA//ljk7O7u5uVVWVsofvby8Xn311Q8//HD06NGOjo5yu4QQzZs3b968uTz95JNPtm/ffsyYMWvXrp08ebK9vb2NjY08wHvhwoXr1q3LyMgICQm5evVqeHh4eHj4vn37dDrd9OnTv//++9/zHAQAAMCfiMIyEBFoenQ6nfwKInn0rPx8qbKyMj8/P6PRGBMT4+fn5+LikpmZmZiY6OnpKb/iKD09XQjRtm1beZXy8vKkpCSdTmc2mx0cHEJDQ4UQly5dKi0t7dKli3wfb2lpaWRkpK2tbd++feXrzNXV1e3btxdCpKWlpaWl+fj4WD4qlUo5c+bn5zs4OGRnZ3fq1EneV2JiooODg729fUpKinxts1OnTq6urrdu3UpISGjVqlWXLl0srcvMzCwvL5dfvCSEiI2NdXd3NxgMt27dkiSpffv2lhcp5eXlVVRU+Pr6ZmVllZWVyauYzea4uDgPD4+ysjInJyc3N7eSkpL8/Hx/f38hREZGRmJioru7e8eOHQ0GQ0pKStu2bY1GY2ZmZkBAgFKpTElJadmypbOzs16vl9vesmXLli1b1szAer0+NTW1TZs2jo6OVVVVt27d8vb2tre3v337tiRJPj4+SUlJhYWF8pO9goKCLLcB5+fnFxUV+fv7W56qJYS4du1aUVFRSEiIZTH5WVnyK47k68YxMTGOjo49evQQQuTm5lZWVvr6+sovavL19ZWfj1VdXS1Jkq+vr6en59WrV9u0aSPfQgwAAIAmjwAMAAAAALAKDIEGAAAAAFgFAjAAAAAAwCoQgAEAAAAAVoEADAAAAACwCgRgAAAAAIBVIAADAAAAAKwCARgAAAAAYBUIwAAAAAAAq0AABgAAAABYBQIwAAAAAMAqEIABAAAAAFaBAAwAAAAAsAoEYAAAAACAVSAAAwAAAACsAgEYAAAAAGAVCMAAAAAAAKtAAAYAAAAAWAUCMAAAAADAKhCAAQAAAABWgQAMAAAAALAKBGAAAAAAgFUgAAMAAAAArAIBGAAAAABgFQjAAAAAAACrQAAGAAAAAFgFAjAAAAAAwCoQgAEAAAAAVoEADAAAAACwCgRgAAAAAIBVIAADAAAAAKwCARgAAAAAYBUIwAAAAAAAq0AABgAAAABYBQIwAAAAAMAqEIABAAAAAFaBAAwAAAAAsAoEYAAAAACAVSAAAwAAAACsAgEYAAAAAGAVCMAAAAAAAKtAAAYAAAAAWAUCMAAAAADAKhCAAQAAAABWgQAMAAAAALAKBGAAAAAAgFUgAAMAAAAArAIBGAAAAABgFQjAAAAAAACrQAAGAAAAAFgFAjAAAAAAwCoQgAEAAAAAVoEADAAAAACwCgRgAAAAAIBVIAADAAAAAKwCARgAAAAAYBUIwAAAAAAAq0AABgAAAABYBQIwAAAAAMAqEIABAAAAAFaBAAwAAAAAsAoEYAAAAACAVSAAAwAAAACsAgEYAAAAAGAVCMAAAAAAAKtAAAYAAAAAWAUCMAAAAADAKhCAUWGFUQAAIABJREFUAQAAAABWgQAMAAAAALAKBGAAAAAAgFUgAAMAAAAArAIBGAAAAABgFQjAAAAAAACrQAAGAAAAAFgFAjD+FGJiYhT/denSpcauDgAAAIAmiADcdHTo0EEOkPfff39j1wUAAAAA/nQIwAAAAAAAq6Bu7AoAQgjh6+t76NAheTooKKixqwMAAACgCSIA40/Byclp+PDhjV0LAAAAAE0ZQ6ABAAAAAFaBAAwAAAAAsAoEYNRWUVGxcePGMWPG+Pv7u7q62traenp6arXauXPnnj59+mdXP3ny5KRJkwIDA52dnZs1axYaGvryyy+npaXJc5977jn5UdUTJkyouVYDr0EaN26cXL5w4UK5JD09fcGCBZ06dXJ0dNRoNB4eHuHh4Zs2bdLr9fe0JwAAAAA0KdwDjP9n+/btL730Um5ubs3C7Ozs7OzsyMjI1atXDxs2bMuWLR4eHneuazAYpk2b9tlnn9UsvHLlypUrV9auXbtp06Ynn3yysLBQLndwcLjLKtna2soTFRUVQoitW7dOmTLFaDRaFsjJyTl69OjRo0c//fTTgwcPNm/e/Je3GwAAAEDTRwDG/1m9evXcuXPlaaVSGRYW1q1bNwcHh+zs7JMnT2ZmZgohjh492r9//1OnTrVp06bW6lOnTv3888/laRsbm8GDBwcEBJSXl3/33XeZmZlPPfWUjY1NeXm5vIBGo7nLWtUMwDt37nzmmWckSWrTpk3Xrl1tbW3T09Ojo6PNZrMQ4vz587Nmzdq2bds96g8AAAAATQoBGP9x/vz5BQsWyNNdunT58ssvQ0JCLHONRuPatWsXLFggSVJycvLzzz9/4MCBmqsfP37ckn5DQ0O//vrr9u3byx9NJtOKFSsWLlz44osvuru7y4U2NjZ3WTGVSiVPpKSkzJgxo2XLlhs2bHj00UcVCoVcHhsbO3LkyJSUFCHEjh07li1b5u3t/ds6AwAAAEATxD3A+I/58+ebTCYhhJub23fffVcz/Qoh1Gr1vHnzLHfhHjx48NSpUzUXWLp0qTzh6Oi4f/9+S/qVE+yrr766dOnSvLy869evy4WW+PqzLAH4+PHjlZWVx48fHz16dM3VO3bs+OGHH8rTZrP5u+++++WtBwAAAND0EYAh5IuoZ86ckadffvlly3XaWhYuXOjk5CRPb9myxVJeWlp64sQJeXrSpEl3jo4WQsybN69WqP4VXnrppc6dO99Z/uCDDzo7O8vTlowNAAAAADURgCGEEIcPH7ZMjx8/vr7FHBwcwsPD5envv//eUn7u3DmDwSBPP/zww3Wuq1Kppk6d+hvrOXny5Po2HhAQIE9bnrMFAAAAADURgCGEEJY3D7m7u/v4+DSwZPfu3eWJtLS04uJiefrmzZt3LnCn4cOH/5ZKurm5WVLunVxcXOSJysrK37IXAAAAAE0VARhCCJGcnCxPBAYGNrykv7+/ZTo1NVWeSE9PlyccHR1btmxZ37qBgYGWmPor1PnuJQu1+j9PdJMk6VfvAgAAAEATRgCGEEKUlJTIEz8bUC232sq3/soTZWVld7l6q1atfnUl7ezsfvW6AAAAAEAAhqg5bPhnQ2bNBSxr6XS6u1zd8gwtAAAAAPiDEYAhaubSn72BtuYClrU0Go08odfr7351AAAAAPgjEYAhhBDNmjWTJyyjmutjGe1ccy1HR0d5oqKiouHVCwoKfltNAQAAAOBXIgBD1Hy0Vc3nOdcpPj5enlAqlb6+vvK05fFUxcXF5eXl9a2bnp7OO4oAAAAANBYCMIQQIiwsTJ4oKCiwPBG6ThcvXpQnOnToYBkCXfPZ0Tdu3Khv3WPHjt2j+gIAAADAL0YAhhBCjBgxQqFQyNPbtm2rb7HCwsLvv//esoqlvGfPnpbpw4cP17muJEkffPDBvasyAAAAAPwyBGAIIYSfn58l0K5atSorK6vOxd566y35MVcKheL555+3lLdr1y4kJESe3rBhQ513Aq9evToqKur3qT4AAAAA/DwCMP5j+fLltra28n28w4YNs9zrK6uqqnrzzTctl3BnzZoVFBRUc4FZs2bJE1lZWf/4xz+Kiooss0wm04oVK+bPnx8cHNy5c+c/pDUAAAAAUJu6sSuAe+/UqVM/+z5e2Y0bN/z8/OTpkJCQDz/88LnnnjObzTExMZ07d77vvvtCQkJsbGxu3bp18uTJ/Px8ecmBAwcuX7681qamTJmyadOmy5cvCyEOHTrUvn37oUOHtm3btqSk5LvvvktPT9doNJs2bZozZ869bi4AAAAA3BUCcBMkSVJ1dfXdLGk2m2t+nDx5csuWLWfMmJGRkWE0Gk+cOHHixImaC6jV6ueee2716tXyteKabGxs9u/fP3LkyMjISCFESUnJv//9b8vcVq1abd269b777vttLQMAAACAX48AjP/n4YcfHjZsWERExKFDhyIjI/Py8oxGo5ubm5+f3wMPPPDkk08GBATUt66Hh8eFCxc+//zz3bt3x8TE5Ofn29vbBwcHjxs3burUqfK7gk0mk7ywRqP5A5sFAAAAAEIhSVJj1wFWxN/fX37N0pIlSxYuXNjY1QEAAABgRXgIFv44Op0uPT1dnm7Tpk1jVwcAAACAdWEINO6N1NTUmJiYhIQEjUYzc+bMOpf57rvvjEajPN27d+8/toIAAAAArB1DoHFvTJs2bePGjfLTsGJjY/39/WstYDQa+/Xrd/HiRSFEx44dr1+/rlAoGqmyAAAAAKwRQ6Bxb0yfPl0OtAaDYejQoefPn685NycnZ+zYsXL6FUIsWLCA9AsAAADgD8YVYNwzb7311qJFiywfQ0JCgoKCnJyc0tPTL1y4UFVVJZePHj265huSAAAAAOCPQQDGvbRs2bJ33nnHknVrUalUM2bMWLVqlVrNzecAAAAA/mgEYNxjt27d2rJly/fffx8bG1tUVKRQKJo3bx4QEDBw4MDJkyffeW8wAAAAAPwxCMAAAAAAAKvAQ7AAAAAAAFaBAAwAAAAAsAoEYAAAAACAVSAAAwAAAACsAgEYAAAAAGAVCMAAAAAAAKtAAAYAAAAAWAUCMAAAAADAKhCAAQAAAABWgQAMAAAAALAKBGAAAAAAgFUgADcF8+bN61nD0KFDp02bFhkZKc9NTEzs2bNndHR0Y1cT98zLL788ffr0e3Vwx44du2zZsl86689s2bJlY8eObexa/C6acNN+1q1bt3r27HnhwoXfspGGfy1/D5ZvKwAA+DMgADcR3t7eG/5r/vz5JpNp6tSp169fb+x6/XpJSUl/+9vfGrsWf1KjR4+eMGFCY9cCfyJN9fvye7TrXv1a7tq165133rm3dQMAAL83dWNXAPeGvb19z549LR8HDx78yCOPfPnll4sXL27Uev16sbGxjV2FP68+ffo0dhXw59JUvy+/R7vu1a9lU+1zAACaNgJw02RraxsYGHj79u07Zx05ciQiIiIlJcXBwSE8PHzmzJl2dnZCCJPJ9Mknnxw+fDg3N9fV1XXQoEGzZ8+2t7cXQkRFRX3wwQeJiYkmkykoKGjmzJk9evQQQhiNxk8//fTo0aNZWVmtW7eeOHHiY489Vmd96tvpq6++KoTo16/f5s2b8/Ly2rVr98orr3Tp0mXjxo2ffPKJEKJnz55z586dMGFCXFzc+vXrY2NjDQZDWFjYvHnzPD095Yswn3zyyRtvvLF48eKRI0fOmTPHstOPPvpox44dR44ckfclhPjyyy/ff//9I0eOODs77927NyIi4vbt2w4ODv369XvppZfc3NyEEPIW1qxZI69y8ODBt95669SpUw4ODkOHDp08efL58+cvXrx47NgxJyenmm0sKipavXr15cuXi4uLAwMDZ82aVfOP7JoefPDBSZMmJScn//DDDyaT6ZFHHnnqqacWL14cFRXl4OAwbdq0v//97/KShw8f/uKLL9LT0zUaTdeuXefNm+ft7S0PqiwrK/voo48aOAdu3Lixfv36+Pj46upqPz+/mTNn9u7dW54VHR29bNmylJQULy+vmTNn1lyrvll39nMDR3/v3r3bt2/PyMiws7Pr0aPH/PnzW7du3UB5TQ2ch/WdLUKIvLy8RYsWXbp0ycnJacyYMfX1ydy5c1UqVdeuXXfs2FFUVOTn57dw4cJOnTo1vN/s7Ow1a9Zcvny5oqLCy8trwoQJo0ePrq984cKFhYWFGzZskPc4ZsyY0tLSY8eOyR9fe+21ysrKtWvX5uTkrF69+sKFCzqdrl27dk8//fRDDz1UZz/fTdPu/L7Ut/1aCgsL16xZ89NPP5WWlrZu3frxxx8fN26cPMtgMGzcuPHAgQNlZWXBwcEvvvhit27dGihv4Hyo7wekvvL62jVgwAAhhE6ne+ONN06ePKlUKh9++OE5c+aoVKpf9AWspdav5V0emhs3bsgDp/fv379t27aAgID6zh8AAPDnIuGvb+7cuePGjatVOGbMmAULFkiSlJCQoNVqo6KiJEn64YcftFrt+++/n56e/uOPP44YMeKNN96Ql9+6dWvv3r2PHDmSlpZ27ty54cOHr1ixQpKkysrKgQMHLlmyJDk5OSkp6V//+lf//v1LSkokSVq5cmX//v2//fbb9PT03bt39+7de8+ePXdWr4Gdvv766+Hh4UuWLKmsrNTpdDNnzhwzZowkSTqdbsWKFQ899FBRUVFVVVVWVtbAgQNfeOGFhISE69evP/vss6NGjaqurpYk6euvv+7fv/+0adN+/PHH27dv19xvRkaGVqs9cuSIpWTKlCmvvfaaJEn79+/XarWfffZZamrqpUuXxowZM3HiRLPZLEnS7NmzZ8+ebVnlwIEDWq22oqJCkqTw8PAxY8asXbv2ypUrBoOh5r5MJtPEiRNHjRr1008/JScnL1u2rG/fvgkJCXUer+HDh48YMeLUqVNms/mrr77SarUTJ068cuWK2Wz+8MMP+/XrJ3dvTEyMVqv94IMPUlJSYmJipk6dajnKCxYsmDZtWq2DW1NVVdUDDzwwe/bsuLi4pKSkFStW9O/fPycnR5KksrKywYMHT5069ebNm9evX582bdrgwYOXLl3a8Kw7+7m+ox8ZGanVar/++utbt25du3bt2WeffeaZZxoor6W+87CBs0WSpGnTpj300ENy5y9dunTYsGH/+Mc/7tz4ggULBg0a9O6771ZVVZWWls6cOXPkyJEmk6nh/U6bNm3y5MkxMTG3bt3avXt3r169zp07V1/5nj17+vfvL58e+fn5/fr1GzJkSGpqqryp8PDwbdu26fX6MWPGjBs37vLly2lpaRs2bNBqtSdOnKizn++mabW+Lw1sv5bZs2ePGjXq8uXLqampe/fu7dWr1w8//CDPWrZs2ZAhQ44ePXrjxo233377vvvuk+tTX3l950N9PyAN/LDU16709HStVjt+/PgdO3bEx8dv2bLF8gW/+y9gw7+Wd39oysrKJk6c+NprrxUVFRmNxgbOH8u3FQAA/BkQgJsC+U86w3/l5OSsW7dOq9XKf6bXzEhPP/30c889Z1nx4MGDWq02OztbkqS8vLyafy+uWrVKThfJyck1I5bBYLh06ZJOpysrK+vdu/eGDRssqyxatGjUqFF3Vq+Bnb7++usDBw7U6XTyLDmXyh/XrVs3cuRIufz9998fNGhQaWmp/DErK6tnz54HDx6UJGnPnj1arfbUqVN19sz06dMtaTYvL69nz55yn4wfP37u3LmWxc6fP29pYwMBePjw4RMnTqxzR2fPntVqtRcvXpQ/mkym0aNHL1q0qM6Fhw8fPmfOHHm6rKxMq9XKIVOSpKSkJK1We/XqVXnWjRs3LEn75MmTWq22oKDgbgKwwWBISEgoKiqSP5aXl2u12qNHj0qSdOjQIa1Wm5SUJM/KycmxVKCBWbX6uYGjv3v37n79+lmqnZ+ff+3atQbKa6nvPGzgbJHruWvXLrncbDY/+uij9QXg++67r6qqSv4YHR2t1Wp/+umnhvc7dOjQTz75xDLr2rVr+fn59ZVnZmZqtdrr169LknTkyJFnnnnmhRdekKOgnN8SExPlfxKKi4uzrDt58uTp06ff2c9337Sa35cGtl9Lenp6zX82mjhx4r/+9S/5hOnbt++OHTvkcr1ev2DBgnPnztVX3sD5UN8PSH3lDbRL7sC1a9da5o4YMeK99977RV/Ahn8t7/7QyL9sb7/9tjzdwPlDAAYA4E+FIdBNREJCQs37Qp2dnd96661ad4qazebY2NipU6daSrRarbxu69atmzVrduDAgcWLF+fm5hqNxsrKSgcHByFE27Zt27Vr98Ybbzz22GN9+vQJDg6W14qMjDQajTV3odVq9+7da1nxbnYqhPDx8bEMUXZxcRFClJaWWkpkMTExISEhzs7O8kcPD482bdrEx8ePGDFCLpHHwd7pkUceefPNNwsLC1u0aHH8+PFWrVqFhYUZjcaEhIRhw4ZZFpMHwd68eTM0NLThfu7atWud5TExMTY2NnLThBBKpbJ79+7x8fFCiOrqar1eL5fb2dnZ2NgIIdq1ayeXyOOofX195Y+Ojo5CiPLycnlWRkbG+vXrb926VVVVZTAY5M5p0aJFw5UUQqjVaoPBsHz58ps3b5aVlUmSJIQoKSkRQiQnJ9vZ2fn5+clLuru7u7u7y9MNzJJZ+vnmzZv1Hf2ePXsqFAr5Kn3v3r29vLzkseX1lddS33koq/NsSUlJEUKEhITI5QqFIiQkRO78O7Vv397W1lae9vf3l58t3KtXrwb2O3DgwM2bN5eVlfXv37979+6dO3duuNzb2/vKlSudOnWKjIwMDQ11dHSMjo5+5JFHIiMjW7Zs6e/vf+zYMVtb26CgIEutOnbsePjw4Tv7+Rc1zSIuLq7h7VvY29tv3rz50qVLxcXFZrO5tLTUx8dHfvSUXq+37NfGxmb58uVCiKtXr9ZZ3sCvQX0/IPWV/6ya38EWLVpUVlY2/AW8UwO/lj/bdfX91DR83gIAgD8PAnAT0bZtW8sTXOzs7Nq2batW1z64VVVVJpPJcludRX5+vhBixYoVBw8efO2117p162Zra7tly5YjR44IIVQq1aZNm7Zs2bJnz57169d7eHhMnz595MiRFRUVQoipU6cqFAp5O3LKKigoqPmXX8M7lW/Aq1VPeTs1lZeXx8fH9+3b11JiMBgsW7DEyDsNHjzY2dn5yJEj48eP//7770eOHKlUKuXLuXLUlMkVlv+Sblh9O6qoqDAYDP369bOUmEwmOeB9/PHHW7ZskQvffvtt+f5ejUZTc/VanSD3wNGjRxcuXDhlypQFCxY4OTlFR0fLN8HejfT09GnTpvXq1WvRokWtWrUym82WW0ArKytr/fuC5Xg1MKtW8xs4+r6+vp9//vmWLVvef//9JUuWdO7cef78+Z07d66vvFbN6zsP6+woeb/ygas5q4HsUXOW3NiysrKG9/vaa68FBAQcPHhw27Ztjo6Ojz322PTp09VqdX3lYWFh0dHR48ePv3z58osvvmhnZ/ftt9/Kt7zKt2GXl5fb29tbuk7+hw+5S2v18y9qmsXPbl9mNBpnzZplMpnmz5/v6+urUqnmzZsnzyotLbX0T031lTdwPvj4+NT5A1LfD8vPtq7WjbXyjhr4At6pgV/Luz80tTR83gIAgD8PAnATYWtrK1/GbICdnZ1arR43btwjjzxSs7xFixYmk2nfvn3PPvusJSbJFyFlzZs3nzNnzpw5c5KTkyMiIt5++20/Pz/5D8HFixcHBATU3Fqtxxo1sNO7b52Tk1NoaOjrr79es/BukoCNjc2IESOOHTsWHh4eFRUlb8He3l6OwZbF5Ok6/7Strq6+yxpqNJrt27fXLFQqlUKIxx57TH54j/yX991sTbZnz56ePXta3iBaVVV19+sePXrUZDItWbJEzk7Z2dmWWXZ2djUPriUBNjyrloaPfmBg4OLFi00mU3R09IcffjhnzpyDBw9qNJr6yi2rN3we1kdORDWXrK/almNdc9rFxaXh/arV6vHjx48fP76goODAgQMffvhh8+bNn3jiifrKw8LCVq5cWVRUlJqa2q1bN41Gk5OTk5eXFxkZOW3aNLn3KisrJUmyBK2Kioo6T79f1DSLu9x+TExMYmLiJ5980r17d7mkqKjIy8tL/srX6itZfeUNnw91/oB07NixvvKfbWCdTa7vC3inBn4t7/7Q1PTrzlsAANAoeA+wFVEqlR06dMjKyvL9rzZt2qjVahcXF7PZbDKZXF1d5SUrKirkW92EEBkZGSdOnJDL5afmKpXKpKSkwMBAGxubwsJCy9ZcXV2bNWtW69pmAzu9+5p37tz51q1b3t7elo0oFIqWLVvezbqPPPLI1atXt2/f3qVLFzl/qtXqoKCg6OhoyzJXr161DIR2cnKqmTFu3rx5N3sJCQnR6/Umk8lSQ1tbW3n8sKenZ+h//aLYr9frmzVrZvkoj8O88/J4feva2dlZrhwePHjQMsvX19doNCYnJ8sfExMTCwoKfnZWLQ0c/ZiYGLk/VSqVVqudPn16cXFxQUFBfeU1N9vAedgAeTy55UgZjcbLly/Xt3BSUpI8FNzyGhtfX98G9lteXn7o0CGj0SiEcHNze+qpp7p06ZKYmFhfuTzYOz8//9tvv/X393dxcbGzswsKCjpy5EhmZmZYWJh8pun1+ri4OEutrl69ahlX/KubZnGX25f/ccfS6qtXr2ZmZsqtbteunZ2dnfyUY/m4PPfcc/v376+vvIHzob4fkPrKf7Z1dWrgC/iL3P2hkcnd9evOWwAA0CgIwNblqaeeOn78+ObNm9PS0uLj4998880pU6ZUVFTY2NgEBwfv37//9u3bCQkJc+bM6d+/f2lpaWpqakZGxssvvxwREZGampqWlrZp0yalUtmlSxcnJ6fRo0dv3Ljx6NGjGRkZly5dmjFjxjvvvHP3O224qs7Ozvn5+VFRUVlZWWPGjKmsrHznnXfi4+PT09M3bdo0duzY69ev302T/f39O3fu/MUXX1jeLSSEeOKJJ3788ceIiIisrKxLly6tXLmyR48ecgDu0KHD9evX5efZnD179ty5c3ezl7CwsODg4DfffPPy5cuZmZmHDx+eMGHC7t2772bd+nTu3Pn8+fMxMTFZWVn/+te/5MB/48aNu7kU3Llz5+Li4m+++SY/P3/37t3Xr19v3rz5zZs3y8vL77vvPgcHh+XLl1+/fj06Onrp0qWWWN7ArFoaOPpnz56dO3fu999/f/v27fj4+B07dnh6enp4eNRXXnOzDZyHctSsk6enZ5cuXT7//PPz58/Hx8cvXrxYvtG6Ti4uLosWLUpOTo6NjV27dq2Pj09oaGgD+zWZTMuWLVu8eHF8fHxGRsbhw4djY2O1Wq1CoaizXL4dNDg4eOfOnZYrq6GhoTt27AgICJAPYr9+/dq3b7948eLr16/fvn17/fr1N27cmDhx4m9pWs3vy11uPygoSKPR7NixIz8///z588uXL+/Tp09aWlphYaGTk9PDDz/82WefHThwIDY29t13342NjQ0NDW2gvL7zITs7u84fkPrKG2hXfcf0Hn4B7/7QyHWLj4+Pj4+vqKj4FectAABoFAyBti4PPPDAokWLNm/evGHDBicnp27dum3cuFG+G/att9765z//OXbsWC8vr+nTp3fu3PnKlStPPfXUjh073n777YiIiA0bNqhUKj8/v5UrV8oXpl566SVnZ+d169bl5+e7ubkNHDiw1ktlf3anDRg+fPj+/funT5/+zDPPTJs2bePGjevWrZsyZYpKpfL391+1alV9T6OpswKJiYlDhw6tufGqqqqIiIj169c7OTndf//9s2fPlmc99thjcXFxzz33nEql6tu376xZs1599VWz2dzwLlQq1fvvv79mzZqXX35Zp9N5eXk9++yz9f3dfJcmT558+/bt6dOnOzo6jh49+tlnn83Ly1u8eLH81tOGDRw48Mknn1y3bt2qVav69+//P//zP9u2bduyZYtSqXz11VdXrly5cuXKKVOmeHp6zpo1a/v27fLVqmbNmtU36071Hf3JkycbDIY1a9bk5eXJh3vdunUKhaK+8lqbbeA8bKC9S5YsWbRo0UsvvSS/LPehhx46fvx4nUv6+fn1799/9uzZeXl5wcHBK1askOvQwH7Xr1+/fv36qVOn6vV6Ly8vy4ua6yuX89gXX3xheattaGjo9u3bJ0yYIH9Uq9Xr169ftWrVzJkzq6qqAgICVq5c2atXr9/StFrfl7vZfvPmzd9+++3169cfOHCgY8eO77zzTm5u7muvvTZt2rRdu3bNnj1bqVSuXbu2srIyICBg7dq18juo6yuv73zQarV1/oC0a9euvh+W+trVwB3C9+oL+IsOzbhx4956660pU6asWLHi1523AADgj6dgmBaaNkmSJk2a1KFDh7t/ghSaqpdffrmsrOyjjz5q7IoAAACgcXAFGE1WVVXV7du3d+zYkZKSIr+sBQAAAIA1IwCjyUpOTn766afbt2+/evXqX/E4HAAAAABNDEOgAQAAAABWgadAAwAAAACsAgEYAAAAAGAVCMAAAAAAAKtAAAYAAAAAWAUCMAAAAADAKhCAAQAAAABWgQAMAAAAALAKBGAAAAAAgFUgAAMAAAAArAIBGAAAAABgFQjAAAAAAACrQAAGAAAAAFgFAjAAAAAAwCoQgAEAAAAAVoEADAAAAACwCgRgAAAAAIBVUDd2BXAP3IyLTU64WVpS0tgVAQDgHnNxdfULDArq0LGxKwIAaAoIwH95N+Nic7Iyu/bQ2js4NnZdAAC4x3SVFUk344UkBXXs1Nh1AQD85RGA//KSE25279XbrWVLpVKpUCgauzoAANwzkiQ5OzurVOqoixcIwACA344A/JdXWlLSws1NreZQAgCaGoVCoVQqW7i5cZsPAOCe4CFYTYFKpWrsKgAA8Hvhf3MAgHuFANwUMPIZANBVsT5fAAAgAElEQVSE8b85AMC9QgAGAAAAAFgFAjAAAAAAwCoQgAEAAAAAVoEADAAAAACwCgRgAAAAAIBVIAADAAAAAKwCARgAAAAAYBUIwPiVUlNTt2zZIoTQ6/Uff/xxYWHhr9tOREREUlJSrcLS0tKPP/64srLyXtQUAAAAAIQQQt3YFcAfYefOnSUlJbUKe/fu3a1bt1+9TQ8Pj/Dw8IaXycrK+vbbbwMDAwcPHvyrdwQAAAAA9wQB2FqEhoZ26NChZomdnd1v2aCdnZ2Hh0fDy8TFxfn5+aWkpPTv31+j0fyW3QEAAADAb0QAtha2trYuLi53ln/99df+/v6ZmZnFxcUqlWro0KExMTHZ2dlGo3HgwIHe3t5CiNzc3PPnz+fn56vVal9f3/79+6tUqtTU1JMnTz799NP17VGv1ycnJz/66KPFxcVJSUkdO3aUy81m89mzZ5OSklQqlVarVSgUcnllZeWJEyeys7OdnJy6d+9u2cjmzZsHDRp04cIFrVYbEhKSkZFx8eLFwsJCjUbTtWvXrl27CiHKy8tPnz6dk5MjSVLr1q0HDhzo5ORUZ+Hv07sAAAAA/gIIwNZOqVTGxcU9/PDDdnZ2+/fv/+abb4YPHz5w4MDIyMgLFy7IAfjo0aOBgYEjR46srKw8cOBATEzM3YydTkhIcHV1bdGiRVBQUFxcnCUA37hxIzU1ddSoUU5OTufOnauqqpLLf/zxR7PZ/MQTTxgMhuPHj8uFKpVKCJGUlPTwww87OTmVlZUdOXJkwIABAQEBxcXFhw4dsrOzCwoKOn/+vL29/RNPPGE2m8+dO3fu3LkHH3ywzsLfsy8BAAAA/KkRgK3FxYsXL1++XLPkqaeeUqvVQoh27drZ29sLIdzd3fV6vTyw2cPDIzo6Wl7yscces7GxUalUzs7OPj4++fn5d7PHuLi4oKAgIURAQMCFCxcKCwtbtGghhEhJSQkMDGzWrJkQIiwsLDY2Vr4snJaWNnz4cI1Go9FounTpkpWVZdmUZfmEhAQ3N7fAwEAhRPPmzTt16hQfHx8UFFRdXW1vby83Z+DAgfJV5ToLAQAAAFgtArC16Nq1a617gOVkKIRwdHS0lMhJWL4ybDKZ5Onc3NzIyMjS0lKFQmEwGNq0afOzu8vLyyssLAwICBBCODg4tGnTJi4url+/fkKIiooKZ2dneTFbW1t5jzqdTpIkS7kcdy0sg7dLS0tzcnI+/vhjyyx5VLNWqz169GhaWpqPj09AQICnp2d9hQAAAACsFgHYWtR3D/DPKioqOnr06IABAwIDA5VK5blz50pLS392rbi4OEmSduzYIX80m815eXm9e/dWqVSWXC0zGo1CiDoLLZTK/7yvS6VS+fr6Dhs2rNbuPDw8JkyYcPv27bS0tEOHDoWEhPTu3bvOwl/RAwAAAACaBgIwfkZubq6trW1wcLDl488+PtpoNCYmJt53333yLcRyAN6zZ09qaqq/v7+jo2NZWZlcXllZaTAY5KvEQoiysjL52u+dL22Subq6ZmRkWD7qdDqNRqNSqXQ6nb29va+vr6+vb9u2bU+cONG7d+86C+9RrwAAAAD461E2dgXwB9Hr9WX/n06nu5sVnZ2dq6uri4qKDAbD5cuXjUZjZWVlw6skJSUplcrg4GCX/2rWrFlAQEBcXJwQwsfHJyEhobCwsLq6+uLFi/JIbLVa7enpeeXKFZ1OV1paeuPGjTq3HBgYWFlZGRUVZTQay8rKDh48GB0dLUnSv//97ytXrhiNRqPRmJub6+LiUmfhr+o5AAAAAE0EV4CtRVRUVFRUVM0SLy+vv/3tbz+7opeXV4cOHfbt26dWq0NCQu6///4DBw4cPny41h3FNcXGxgYGBsoPcLYIDg7eu3dvWVlZaGhoeXn5N998o1artVqt/JoiIcTgwYN/+OGHL7/80snJqXfv3jUfgmVhb28fHh5+/vz5y5cv29nZBQYGdu/eXaFQDBs27OzZs5cvX1Yqle7u7kOGDKmz8Bf2GQAAAIAmRSFnD/x17YrY+o+JT/KIYwBAUyVJ0u5tX4x94qnGrggA4C+PIdAAAAAAAKtAAAYAAAAAWAUCMAAAAADAKhCAAQAAAABWgQAMAAAAALAKBGAAAAAAgFUgAAMAAAAArAIBGAAAAABgFQjAAAAAAACrQAAGAAAAAFgFAvBfnoura2lJcWPXAgCA30tpSbGLq2tj1wIA0BQQgP/y/AKDYqKjS4rJwACAJqikuDgmOtovILCxKwIAaAoUkiQ1dh3wW92MvZGcmFBaUtLYFQEA4B5zcXX1CwgM6tipsSsCAGgKCMAAAAAAAKvAEGgAAAAAgFUgAAMAAAAArAIBGAAAAABgFQjAAAAAAACrQAAGAAAAAFgFAjAAAAAAwCoQgAEAAAAAVoEADAAAAACwCgRgAAAAAIBVIAADAAAAAKwCARgAAAAAYBUIwAAAAAAAq0AABgAAAABYBQIwAAAAAMAqqBu7ArgHbsbFJifcLC0paeyKAABwj7m4uvoFBgV16NjYFQEANAUE4L+8m3GxOVmZXXto7R0cG7suAADcY7rKiqSb8UKSgjp2auy6AAD+8gjAf3nJCTe79+rt1rKlUqlUKBSNXR0AAO4ZSZKcnZ1VKnXUxQsEYADAb0cA/ssrLSlp4eamVnMoAQBNjUKhUCqVLdzcuM0HAHBP8BCspkClUjV2FQAA+L3wvzkAwL1CAG4KGPkMAGjC+N8cAOBeIQADAAAAAKwCARgAAAAAYBUIwAAAAAAAq0AABgAAAABYBQIwAAAAAMAqEIABAAAAAFaBAAwAAAAAsAoEYPzpHD9+/PTp041dCwAAAABNjbqxK4A/ws6dO0tKSuRptVrdvHlzrVbbtm3bxq4XAAAAAPxxCMDWonv37p06dRJC6PX6hISEI0eOjB492s3NrbHrBQAAAAB/EAKwtdBoNI6OjkIIR0fHsLCw9PT01NRUNzc3nU73448/ZmVlmUym1q1bDxgwwNnZWQhx/fr1q1evVlRUODo6du3aNSQkpM7Cbdu29e/f39fXVwhx8ODB8vLysWPHCiEKCgr27NnzzDPPCCEuXLiQmppqMBjc3Nz69OnTqlUrvV6/efPmQYMGXbhwQavVhoSE3LhxIzo6urq6OjAwUJKkxu4tAAAAAE0QAdhKqVQqs9kshDh79mx1dfXYsWOVSuWJEyfOnDkzfPjwoqKi8+fPjxo1ys3NLS8v7+DBg56engqF4s5CLy+v7OxsX19fSZIKCgpUKlVVVZWdnV12draHh4darT5z5kxOTs6oUaPs7OwuXrx4+PDh8ePHq1QqIURSUtLDDz/s5ORUWFj4448/hoeH+/j4JCQknDlzJjAwsLF7CAAAAEBTw0OwrI7ZbE5ISMjLy5PvAR4wYMCwYcPs7Ow0Gk1AQEBeXp48TFoIYWdnp1Ao3N3dn3766RYtWtRZKAdgIUR+fr6Li4u7u7v8MSsrq02bNkKIuLi4Hj16ODk5qdXqnj17VldXywsIIQIDA5s1a6ZWq1NSUlq1atWuXTulUhkcHOzq6trYnYT/Ze++46Oo9v+Pn930BAiBkEIINYm0QEAgUgSuNEMJ1SAtFgzCVUHBawVFBcULFgQ7ShNFpAiE3gNcWgKhd2khpBFSN8lmd+f3x7nf+e1NWSImxDCv5x8+sjOzZz4zs4t555w5AwAAADyA6AHWiiNHjsTFxQkhzGazo6Pjo48+6u3tLYQwGAyHDh1KTU21WCyyT1gI4eXl1ahRo+XLl/v6+tavXz8oKMjJyanEhX5+fnv37jWbzYmJiT4+Pm5ubrJDOCkpqVWrVgaDwWw2e3h4yGYdHBzc3Nyys7N9fX2FEDVq1JDLc3Nz5bhrqWbNmpVxhgAAAAA84AjAWtGqVaumTZvKWaBdXV3lQovFsnHjRn9//+HDhzs4OFy9enX37t1CCJ1O99hjj7Vt2/batWsXL148duzY4MGDq1evXuLCatWqpaam3rp1q3nz5i4uLpcuXcrKyjKZTHXq1MnLyyteiRqz9fr/DkAwm806nU7dwGQyOTo63pezAgAAAEBDGAKtFU5OTjVq1KhRo4aafmXXa05OTnBwsIODgxAiJSVFLrdYLPn5+TVr1mzduvXgwYNdXV2vXr1a4kIhRN26dW/dupWcnOzt7V27du2MjIyEhAR5z7Crq6u9vX16erpstrCwMDc3V+34Vbm6umZnZ6sv1Sc2AQAAAEA5IgBrmouLi52dXVJSksViuXLlyq1btwoLC41G47lz59atW5eRkaEoSkZGRl5eXvXq1UtcKITw8/O7cOGCm5ubk5OTXq+vXbv2qVOn6tWrJ3fx0EMPHTt2zGAwmEymw4cPu7q6ynuDrdWvXz8lJUXOFH369GmDwVAZJwMAAADAA44h0Jpmb2/fpUuXw4cPHzx4sH79+n369ImOjl6+fPmoUaOys7PXr19fUFDg5uYWHBws53kuvlD2AGdmZsqHDAshfHx8jh07pqbcDh067N+/f/Xq1fIxS/3799fr9Waz2boMX1/fjh077t+/32g0BgYGNmnShCchAQAAACh3OpJGVbfipyVPjBpjfQ8tAAAPEkVRflu2NGJ0ZGUXAgCo8hgCDQAAAADQBAIwAAAAAEATCMAAAAAAAE0gAAMAAAAANIEADAAAAADQBAIwAAAAAEATCMAAAAAAAE0gAAMAAAAANIEADAAAAADQBAIwAAAAAEATCMBVXg1396zMjMquAgCAipKVmVHD3b2yqwAAPAgIwFVe48CgU/HxmRlkYADAAygzI+NUfHzjgMDKLgQA8CDQKYpS2TXgr7pw9swfly5mZWZWdiEAAJSzGu7ujQMCg5o1r+xCAAAPAgIwAAAAAEATGAINAAAAANAEAjAAAAAAQBMIwAAAAAAATSAAAwAAAAA0gQAMAAAAANAEAjAAAAAAQBMIwAAAAAAATSAAAwAAAAA0gQAMAAAAANAEAjAAAAAAQBMIwAAAAAAATSAAAwAAAAA0gQAMAAAAANAEAjAAAAAAQBPsK7sAlANLUnLBLysK1m+wXLxc2bVUOH1gE6cB/ZxGROh9vCu7FgAAAABViU5RlMquAX+JJSk5c8BQJSm5sgu5r3Q+3u7rV5GBAQAAAJQdQ6CrvIJfVmgt/QohlKTk/GXLK7sKAAAAAFUJAbjKK1i/obJLqBzGDZsquwQAAAAAVQkBuMrTwn2/JdLsgQMAAAC4NwRgAAAAAIAmEIABAAAAAJpAAAYAAAAAaAIBGAAAAACgCQRgAAAAAIAmEIABAAAAAJpAAAYAAAAAaAIBGAAAAACgCQRgAAAAAIAmEIABAAAAAJpAAAYAAAAAaAIBGAAAAACgCQRgAAAAAIAmEIDxX8a1KwoOx5RPUyuWFuzYWC5NAQAAAEB5sa/sAvAAsp/9uXB0rOwqAAAAAOB/EIBxd5YO7UwvjVcaNRQGg932XXbzv9UZDEIIyz+6ml54XtTx1G/aqnjUtPyjm9M/wkRurulfLyu1azv16CuEMK7+RZhMdsuWm59/TrG3s1u11v7bHyr7gAAAAABoEUOgcReWoMDCL+YIRTi88Y79itXmYYNNb/1LCKF41Cx8/x3h5mb/7gyRfsfSuaMQQpgKi77fZFJ8fCzBLe3feleXlm4e+5QlKLBSDgQAAACAxhGAcReWQf2FXm8/72v9vv/YLViku3TZ0usxxdnZEtpeODnq10brd++1/+5HXWpaqU04OTp8Pl8ff8IueqMQQmnS6L4eAAAAAAAIQQDG3SledYQQuuQU+VKXkip0OuFVR3h4CCHU3KtuUIKcXJGTK4QQublCCOHocF8KBwAAAID/QQDGXeiSU4UQireXfKl4ewtFEckpuqwsIYTiWfu/y328K7VMAAAAALgLJsHC/zCPfvL/v0hLt9u8Vb822jx0oPnF8eKr75RWLZUmjfTRm3QFBbojccJksgwOt1y4ZAlsoiZhAAAAAPh7IgDjf5gm/lP9WX/2vN3mrfoLFx1eec007lnTv2eI9Dt2y361+2aBEEKkpNp/MMs8IarwnTf0G7boj5+0tH9YKJVZPAAAAADYoFMUIkvVlu5faZMqK06Oolo13e10IYTxpx8UX1/56KP7ptaNi/dzdwAAAACqNHqAcY8UFxfjxtW6wkL7N99V/OoqgQH6rTsquygAAAAAKBU9wFVeJfYAW9o/bH7heUvjhrqcXN2BQ/Zzv5IzY9039AADAAAAKDsCcJVXiQG40hGAAQAAAJQdj0ECAAAAAGgCARgAAAAAoAkEYAAAAACAJhCAAQAAAACaQAAGAAAAAGgCARgAAAAAoAkEYAAAAACAJhCAAQAAAACaQAAGAAAAAGgCARgAAAAAoAkE4CpPH9ikskuoHJo9cAAAAAD3hgBc5TkN6FfZJVQOx35hlV0CAAAAgKqEAFzlOY2IEO41KruK+869hvOoJyu7CAAAAABViU5RlMquAX+VJSk5f9ly44ZNlouXK7uWCqcPbOLYL8x51JN6H+/KrgUAAABAVUIABgAAAABoAkOgAQAAAACaQAAGAAAAAGgCARgAAAAAoAkEYAAAAACAJhCAAQAAAACaQAAGAAAAAGgCARgAAAAAoAkEYAAAAACAJhCAAQAAAACaQAAGAAAAAGgCARgAAAAAoAkEYAAAAACAJhCAAQAAAACaQAAGAAAAAGgCARgAAAAAoAkEYAAAAACAJhCAAQAAAACaQAAGAAAAAGgCARgAAAAAoAkEYAAAAACAJhCAAQAAAACaQAAGAAAAAGgCAfhB4OnpqStJfHx8ZZeGcrZ582adTufj41Pi2q+//lqn033yySdFlg8bNqzET8jnn38uhGjYsKFOp/v9998rtPKrV6/KnWZkZFTF9qVFixbpdLqQkJDybfZPXYLo6Oh27dq5uLh4eXn16tVr79695VsMAADAA8y+sgtAufHy8qpevbr1Eicnp/tcQ0BAQMuWLSs6SqE08k8erVu3LnFt9erVvby8rJfUrFlTCNGjR4/k5OTSQrVtY8eOXbVqVWmZ0/rz4Orq2q9fPyGEg4PDPezob8Lf379fv36NGzcu32bLfgkWLlz47LPPCiHq1KlTWFi4ffv2Xbt27d69u0uXLuVbEgAAwAOJAPzg+Pjjj59++ulKLCA2Nvby5cstW7asxBo07tixY0KI0vonhwwZsmjRouLLf/jhh3vbXWFh4Zo1a0pbW+Tz4OXlFR0dfW87+vvo0aNHjx49yr3ZMl4Ck8k0ZcoUIcTUqVPff/99k8k0bNiwdevWvf/++1u3bi33qgAAAB48DIF+8BUUFEyfPj0wMNDJyalOnTrDhw+/cOGCXPXVV1/pdLqBAwd++eWXNWvWnD17thDi9OnTjz76qLOzc2Bg4PLly+Xo2S+++EK+JTExcezYsT4+Po6Ojg0aNJg8eXJWVpYQ4tVXX23fvr0QYu3atTqdrkjUGTJkiE6nGzdunLrkqaee0ul0amJftmxZu3btXF1dq1ev3r17d/W3+d27d+t0OtlRKT3yyCM6ne6bb74prX5rTzzxhE6ne//9999++21fX19XV9fw8PDk5GS51mAwvPnmm4GBga6urg899NAnn3yiKIpclZSUFBUV1bBhQ2dn5wYNGrzyyisGg0Guio2N7devn4+Pj6ura3Bw8JdffimEOHnypE6na9Kkidxm5cqVcjjurl275BJfX1+dTpeQkCCEOHToUFhYWM2aNZ2dnYODg+fNm6fu18vLS6fTbdmy5ZFHHqlRo4Zc+MEHH/j4+FSrVm3o0KG3b98u7UKbzeaTJ0/6+fl5enr+mQ/I/4y/LfGUlnjI0dHRjo6Od+7cyczM1Ol0r776qnWbxT8PRYYoR0RE6HS6Tz/99L333qtdu7aHh8fbb79tNBonTJjg7u5ep04d60y4evXqzp0716xZ09PT8/nnn8/Ozi7Lcdk4z5mZmaNGjZJd4lOnTp07d65OpxsyZIhca+MrUGQItLxe+/fvHz9+vIeHh7u7+2uvvWY2m+/ajo1LoJ6ZL774wt/f39nZOTw8XF73W7duhYeHP/3002+99ZZOp3NwcOjTp49c/qeuOAAAgHYpqPpq164tx0aWuHbAgAHyPuHRo0fLwbG1a9e+fv26oigLFiwQQjRv3tzd3b1Hjx6LFi0qLCxs2LChHOo5ZswYHx+f+vXry1ykKMrt27fly6ZNm0ZGRvr5+QkhOnbsaDKZ1q5d27FjRyFE48aNJ02adPr0aesaNm7cKITw8fGxWCyKolgsFjnac8eOHYqizJkzRwhhb28/bNiwxx9/XAih1+vXr1+vKIoMkO7u7mpToaGh8mbXEusvcuyjR4+WKaVHjx4ffvhhgwYNhBADBgyQayMjI2V/6euvvy4z9rfffitXde7cWQjRt2/fyZMnd+rUScYSRVFSUlJq1qzp4ODw9NNPv/zyy40aNZInx2Kx1KpVSwiRlpamKMpLL73k4OCg1+vfe+89RVGuX78uhGjSpImiKPv375dD07t16/bkk0+6uLgIIV577TW533r16smSmjZt2rt3b/UYdTrdyJEj+/fvL8+bt7d38Qt96tQpWXPxVUOHDpV/dCjxEyJPy5o1a0o8paUd8unTp5944gkhhKOj46RJk9auXWvdZvHPw5UrV+S/OXfu3FEvTXBw8GOPPTZo0CC5KiwsrHfv3nKktF6vv3r1qqIospPZxcXl1VdflR/mfv36FT+KIu3bPs+jRo0SQri5uY0cObJZs2ZySLO8xLa/AgsXLpSDzK2vV5s2bQYMGCA/TkKIH3/88a7t2LgE8sy0adMmJCTkxRdflH8HiYyMLP4us9ksu6NLXAsAAIDiCMAPAhsBePv27UIIOzu78+fPK4piNBpl59WkSZPU3+aFEJs2bZLby7Bhb29/7do1RVHi4uLkBjJwTp06VQgRGBiYl5enKEpCQoLMGPIX9w8++EAIMXDgwOJlmM1m+dv/gQMH1Gb9/f0tFktmZqabm5sQYsGCBXLjF154Qc0YtgNw8fqLeOqpp4QQ9erVMxqNiqLExMTIZJWQkJCXlxcSEtKiRYu4uDhFUaZPny6E6NOnj6Ioubm58lbVgoICmWTefvttmVtkku/WrZts/8KFC9OmTZNZPTw8XE5SpShK69atH3nkkeDg4J49eyqKsmrVKiHEs88+qyiKvFdz9OjRsoXffvtNnvCUlBQ1CHXu3LmwsFBu0KZNG/V6KYoyfPjw0gLw0qVLhRBvvfVW8VVlD8DFT6mNQ5bTL1lfHWtFPg9FAqq8NA0aNDAajRaL5aGHHpJ/WDGbzWazWQZL+ZGQf7WZOXOmbCc4OFgIcfTo0SK7K9K+jfOckpIi70P++eef5eX29fUVQgwfPvyuX4EiAVieOjWQy1w9dOjQu7Zj4xLIM+Pl5ZWTk6Moyvfffy//aFXkLXl5efIPEHXr1pV/KQAAAMBdMQT6wfHMM88UmePXZDLJANy2bdugoCAZ6gYPHiwHtapvrFOnjux3FUKcOHFC9kDKvNq2bdtmzZqpW8rWBg0a5OzsLITw8/OTvaPWrZVIr9c/88wzQoh169bJcCWEGDNmjE6nO3DggAycI0aMkBtHRETIQcVGo7EsB25df4nCwsJk4OncubOdnZ3FYjlz5oyzs/OxY8dOnToVEhKSn58ve1Zv3rwpp2tq0KBBYWFhcHDwv/71r02bNr3xxhsTJkwQQgQFBen1+j179nTt2nXGjBnJycnvvvtu//79hRBdu3aVpyIzM/PkyZOPPvpo586dDx48aDabDx8+LDOkwWD4z3/+Y32wQ4YMsbe3N5lMx48fVwseMWKEvb29EMJisZw8eVImc7lKZp4S2b4BWAixePHiIp8QeUFtn1Ibh/zXde/e3cHBQafTNW/eXL7U6/V6vb5FixZCiJSUlJycHHlmAgICEhISEhIS2rZtK4TYv3+/jWZtn+ezZ88WFhYKIeTfLFxdXdUu6Lt+BUqkjp1u166dOiD5Htqx1qdPH/mHIdnm7du3Zc2SoiiDBw/+7bff2rVrd+jQIZmfAQAAcFcE4AeHl5dXk/+l0+nS0tLk+Gd1M/nzjRs31CXe3t7qz/JWQzmaV5Ldy1JZWivNs88+q9fr165dK7tJ5bhNtU0XFxdXV1frNi0Wi4yjd2Vdf4nUW4j1er3cizzM7777rmnTpo6Oji4uLuPHj5e5Qm65cuXK1q1bX7hwYc6cOeHh4fXq1Vu8eLEcxrxo0SIfH5+9e/dOmzbt0UcfDQoKOnr0qMy3QogjR47s3bvXYrF07dq1S5cuOTk5x44dO3LkiNzgzp07FovF+hzq9XoPD48i51CdDTgzM9NkMlkfgvXt0EXYngJazgJd5BOinnMbp9TGIf916uE4OjrKzmT5Uv6FxWw2q/NLDx8+3N/f39/fX14I258N2+dZXn1HR0eZMIt8yG1/BUqkbqyWfW/t2GhTbVbavHnz5s2bGzRosHPnTtlbDgAAgLJgFugHR4mzQMvfua1nTkpJSSnyu7idnZ36s/y1Oz09XV0iA6ra2qVLl2y3Vpr69ev36dNn06ZNsbGxBw8e7NChgxz1Kt+bl5eXl5cnb9SUbep0ulq1aslYmJ+fr7aTmppapGXr+kukviU/P1/On+Tl5bVx48bnn3/eycnpm2++ad68eXR09EcffaS+pV27dvHx8ZcuXYqJiVm7du26devGjh3bs2dPPz+/MWPGjBo1Ki4ubu/evcuWLTt69OjIkSPPnTvXpk2b6tWrHzlyJCgoSKfTde7cOTMzUwgRExMTFxfXoEGDBg0aGAwGvV5vsVjUc2gymeTZLvGKuLu7y37LO3fuWJ/wEsXHx7u5uQUEBJS2QWmzQBdX5JSWdshlaeovUhPy7NmzmzZtqi633efp4eFh4zzLmG00GnNzc2UGtv6Q2/4KlF15tVMiT0/P2bNnt2zZssiTzwAAAGAbPcAPuL59+8obJv/447Wdg80AACAASURBVA/r59b06tWrxO3lQ2vi4+PlvE2xsbHWOUe2tm7dOjk4+caNGwcOHFBb0+l0QoicnJzSinnuueeEEBMnTjSZTPJGRzmHlgw58i5NIcSvv/4qhGjfvr27u7t8bm1BQcGZM2eEEMePH5cH8qdER0fLqjZs2CBvy2zRooUcltysWbPnnnuuU6dOMmnLTrbLly/PmDFjwYIFAQEBzz777Nq1a4OCgsxmc0JCQkxMzFtvvbVv37727dtPnjxZTnZ97do1GRo7deqUmJi4cuXK4OBgDw+Phg0b+vn5/fjjj5mZmbJ/2NXVVf6gHuyqVavMZrOzs3OJz3HV6/VybLA6q/aSJUtKPMZr166lp6e3atVKry/nL7WNQ5ZXPD8/37pzUnXXz0NZVKtWTd706+Dg0L9///79++t0OqPRKLtzS2P7PDdt2lQmfDkeIScnx/phTra/AmVXXu2UyNvbu3v37oGBgeXVIAAAgEbQA/yA69q16+DBg9esWdO1a9fHH388Li7uxIkTfn5+RR5aoxowYICPj09SUlLnzp27du26c+fOunXrJiYmyrWTJ09esGDBuXPnHnnkkTZt2mzevNloNPbp00feLyonhd6zZ09kZOSzzz7bvXv3Io2Hh4d7e3sfOHDA0dHxySeflAvd3d3fe++9SZMmPf/889u3b09LS9u0aZODg8PHH38sb0ANCAi4dOnSoEGD+vbtu379+qZNm/7ZIOHq6tqhQ4fQ0NDVq1fL22i9vb1lsDx58uSUKVOuX7+enJys0+kuXbr09ttvT5o06eOPP87Ly9u7d2/dunXPnz9/4cKFJk2atG7deufOnR999NF33303cuRIFxeX3bt3y0mP1LO9ZcuWK1euyHm85F3HK1asUAdIy57Mjh07Lly4UM6uLOfHmjZtmvVYWWtRUVEvvfTS119/nZycnJGRIad6Uodqq+46/vme5eTklHbIdevWlX+e6Nev35AhQ6wfc1X88yCnRL4H06ZNi4iIeO21144fP56dnb1y5UpPT095w7MNts9zeHj4mjVroqKi1q1bFx8fL4ceSLa/AmVXXu2U6N///veXX345cOBA+eQkAAAAlBE9wA++n3/++c0333RwcFiyZEliYmJkZOSBAwfq1KlT4saOjo7r169v06ZNSkpKbGysfBKp7H+T3XH79+8fNWpUQkLC0qVLnZ2d33777d9//1329T3xxBO9evWys7PbtGlTif1+9vb2cjKnfv36Wee9iRMn/vDDDw899NCKFSv27dvXu3fv3bt3y/ys1+tXrVoVGhp68+bN7du3z58/X/YHFhQUlP0MDB48OCIiYsOGDSaTacSIEfJJP0888cQrr7zi4eHx/fffOzg4rF279p///Kednd3PP//s5eW1Z8+e3r17r1+//pNPPjl8+HBkZOT27dudnZ379u27fPnyxo0bL1q06IsvvkhPT3/zzTflPL3WKVdOiCUDcJFVDz/88K5du3r06LFnz55Vq1Y1b9584cKFb731VmnFT5gw4eWXX65Zs+a2bdvq1KkjH4Bc/PDvOgPWPbNxyI0aNZoyZYr8VBS/D/yun4cyeuKJJ3799dfmzZsvW7Zs8+bN/fv337Nnz11vfLV9nr/99tsBAwZYLJbdu3dHRETIqcXkh9z2V6DsyqsdAAAAlCNd8a4kaFlBQcGJEyeSk5N79uzp7Oycm5tbr169jIyMXbt2Fe/R/bPS0tIeeuih9PT07du3y+eXVrSnn3568eLFkyZN+vzzz+/D7lBVnDx5MjExsXnz5jKU9u7de9u2be++++706dPL6ytQoV8lAAAA3BuGQFd5sve1XCiKYrFYwsPDk5KS2rdv36VLl5iYmIyMjG7duskOzHvbl6Io165dmzhx4tGjR9PT03v06CHTbzlWXtp+rV9W9O5QJchPxbRp09auXVu/fv3w8PDr169v27bN09NTPumqXL4CFfRVsqFevXplmYwdAABA4xgCXeWV41Oh5eOIYmJiIiIibty48dVXX2VkZEyaNGn16tXy9/V7bjY/P3/Xrl0ZGRmDBw/++eefy73y0vZbQScKVZf8MPz000+vvPKKXq///vvv4+LihgwZEhMTIx/+VC5fgQr6KtlA+gUAACgLhkADAAAAADSBHmAAAAAAgCYQgAEAAAAAmkAABgAAAABoAgEYAAAAAKAJBGAAAAAAgCYQgAEAAAAAmkAABgAAAABoAgEYAAAAAKAJBGAAAAAAgCYQgAEAAAAAmkAABgAAAABoAgEYAAAAAKAJBGAAAAAAgCYQgAEAAAAAmkAABgAAAABoAgEYAAAAAKAJBGAAAAAAgCYQgAEAAAAAmkAABgAAAABoAgEYAAAAAKAJBGAAAAAAgCYQgAEAAAAAmkAABgAAAABoAgEYAAAAAKAJBGAAAAAAgCYQgAEAAAAAmkAABgAAAABoAgEYAAAAAKAJBGAAAAAAgCYQgAEAAAAAmkAABgAAAABoAgEYAAAAAKAJBGAAAAAAgCYQgAEAAAAAmkAABgAAAABoAgEYAAAAAKAJBGAAAAAAgCYQgAEAAAAAmkAABgAAAABoAgEYAAAAAKAJBGAAAAAAgCYQgAEAAAAAmkAABgAAAABoAgEYAAAAAKAJBGAAAAAAgCYQgAEAAAAAmkAABgAAAABoAgEYAAAAAKAJBGAAAAAAgCYQgAEAAAAAmkAABgAAAABoAgEYAAAAAKAJBGAAAAAAgCYQgAEAAAAAmkAABgAAAABoAgEYAAAAAKAJBGAAAAAAgCYQgAEAAAAAmkAABgAAAABoAgEYAAAAAKAJBGAAAAAAgCYQgAEAAAAAmkAABgAAAABoAgEYAAAAAKAJBGAAAAAAgCYQgAEAAAAAmkAABgAAAABoAgEYAAAAAKAJBGAAAAAAgCYQgAEAAAAAmkAABgAAAABoAgEYAAAAAKAJBGAAAAAAgCYQgAEAAAAAmkAABgAAAABoAgEYAAAAAKAJBGAAAAAAgCYQgAEAAAAAmkAABgAAAABoAgEYAAAAAKAJBGAAAAAAgCYQgAEAAAAAmkAABgAAAABoAgEYAAAAAKAJBGAAAAAAgCYQgAEAAAAAmkAABgAAAABoAgEYAAAAAKAJBGAAAAAAgCYQgAEAAAAAmkAABgAAAABoAgEYAAAAAKAJBGAAAAAAgCYQgAEAAAAAmkAABgAAAABoAgEYAAAAAKAJBGAAAAAAgCYQgAEAAAAAmkAABgAAAABoAgEYAAAAAKAJBGAAAAAAgCYQgAEAAAAAmkAABgAAAABoAgEYAAAAAKAJBGAAAAAAgCYQgAEAAAAAmkAABgAAAABoAgEYAAAAAKAJBGAAAAAAgCYQgAEAAAAAmkAABgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPBg0lV2ASh/fn5+77zzTqdOnZydnR0dHe3s7PR6vV6v1+l08r9SkXcpiqIoisViUf6PxWIpLCw0m80Gg2Hv3r3Tp09PSUmp0Mq9vb1nzJjRp08fk8m0bdu26dOn37p1q0L3CAAAAACoqvz9/W/evKlUgIsXL3p5eVVc5Z6enn/88Yf1Hq9evert7V1xewQAAAAAVGFLly6tiPQrff311xVX+WeffVZ8j/Pnz6+4PQIAAAAAqrCUlJSKC8BnzpypuMqPHz9efI8nT56suD1WLjs7uzFjxmzdujUxMTE5OTk+Pn7WrFl+fn7W2zRp0sTZ2bnyagQAAACAv7H09PSyB1qz2Xz69Ont27dv3LgxOjo6Ojo6IyPDxvbXrl2ruMpPnjxZfI8nTpyouD2WIwcHh9GjR5d9+7p16x44cKD48WZmZkZERDg7O/fr12/lypU7duyoyKoBAAAAoCorewBeu3Zto0aNirw9NjbWxlsSEhIqrvK5c+cW3+PcuXMrbo/lKDw83GKxvPzyy2XZuEaNGqdPny7tJFssFqPRqChKRkZGixYtKr52AAAAAKiayhiA9+3bZ29vX/zttgNwcnJyxVXu6el54cIF691dvny5Tp06FbfHcvTvf/9bZtd33nnnrht/8cUXd71A6enpAwcOHDp06EsvvXRfjgAAAAAAqpoyBuBhw4aV+HbbAbiiH4NUp06dL7/88uLFixcuXJg3b15VSb9CiAULFqhnafny5e7u7qVtWaNGDYPBcNcLZDAYzGbztWvX6tWrd38PBQAAAACqiDIG4NDQUPUter0+LCxs5MiRo0aNKvIgoiLS0tIq9eD+vubMmWN9oq5du/bEE0+UuGXPnj3LcoHkU6ACAgLu+6EAAAAAQBVRxgDcqlUr9S2PP/54GSNZenp6pR7c39ewYcOKn64jR46MHDnSycnJesuIiIiynOqkpCSegQwAAACUrxLuAoUWGI1G9ecaNWpUai3/5eHh0aVLlyILY2Njb926JX8ODAxs2rSp9drs7Ozdu3cLIWrVqhUVFRUeHt60aVNHR8fU1NRjx46tWbNmxYoV1kdacaKjoxMTE+vWrWu9sF27dsuWLZs/f/6GDRu2b98eGxt76dKlMtZz8+bNCr3jGgAAAACqvDL2ADdu3Fh9y5AhQ/4OPcAdO3Ysvkfre5WnTZtWZO25c+eEEE8++WRpR33mzJng4OCKq9na4MGDzWaz7RNoMplsP2hKJYM9AAAAgHKkr+wCcF/Fxsb6+/v7+PhcvXpVXRgdHe3j4+Pn5+fv73/+/PlKLfDP0ev1UVFRP//8s4eHR4kbNGvWbPfu3UX6jSvCpEmTFEWZNm2ayWSysZmdnZ2N+bGsJSUllV91AAAAAARDoDWnoKCg+LN8jUajOtq2du3alVHXPfL19Z0/f75Op7OxTa1atX788cdOnTpVaCWBgYGff/65oijl1eClS5fKqykAAAAAEj3A+P8cHBxK60r9e6pWrZqjo+NdN+vYsWO3bt0qtJKtW7cKIXQ6ne00XnaxsbHl0g4AAAAAFQFYW3Q6nZ2dnZ2dnfVCZ2dnb29vb2/vhx56qMiqB8bw4cMrtP3o6OgTJ06UV2uFhYXcAwwAAACUOwKwtnTq1MlkMplMJuvbYocMGZKUlJSUlHTy5MlKre4ebdq0qXPnzjVq1PD19Z04caLBYCi+Tfv27Su0BovF8vTTT2dlZZVLazt37szIyCiXpgAAAACoCMCo2jZv3ty/f////Oc/2dnZSUlJ8+bNmzBhQvHNvLy8KrqSY8eO9ejR48qVK3+9qSVLlpRHRQAAAAD+BwEYVdtrr71msVisl/z000/Xr18vspmzs/N9KObcuXO9evWaOXPmX+m/vXHjxsqVK8u1LgAAAACCWaBRteXk5Jw6darIQovFcurUqfr161svtLe/Hx91X1/fM2fO/MV9ffTRR0ajsfyKAgAAAPBf9ACjCsvOzi7xyUPZ2dlFlpTX5My2Xbx48euvv/4rLcTHx3///fflVxEAAACA/48AjCqssLCwxOUFBQX3vZb/evXVV6Ojo+/tvfn5+U8//bTJZCrvogAAAAAIAjCqttKyYpG7gu8no9E4aNCgKVOmpKSk/Kk3Koryz3/+8/jx4xVWGgAAAKB1BGD8CSWON65EZrO5xOWVGIBlVZ9++mm9evW6desWGxtblrcoivLOO+8sXLiw4qsDAAAAtItJsPAnlBY4/27+DkE9JCRkxowZ7dq1u+uWFovljTfemD179n2pCwAAANAuAjD+hL9DsLRWWk9vJdYZEBDQs2fPkSNHdunSpSwzb6WlpY0dO3bdunX3pToAAABA0wjA+BNKm3SqspQWgO/zEOgePXpMmzatbt26derUqVmzZhnfZbFYli9fPmXKlKSkpAouEAAAAIAgAGvXJ598oj4rqMgjc234u01Q/DcZkr1jx45Dhw6NGzfuhRdeKEsAzsvLW7Vq1SeffBIfH39fCgQAAAAgCMAPoDJmwr59+95D4/n5+ffwrvvv/k+ClZOT8+mnn3722WehoaFhYWGhoaHNmjWrW7euvb29HJJ9586dixcvHj16dPfu3Zs3b87KyrrPFQIAAAAgAD9otm3bNmLEiApqfN++fRXU8r35u90DrCjKwYMHDx48WCl7BwAAAGAbj0F60EydOjU1NbUiWr5x48Y777xTES3fs79bAAYAAADwd0YP8IPmjz/+CA0N/eCDDx599FFnZ2cHB4e/2KDRaMzPz4+JiXnrrbcSExPLqcwSmM3mO3fuFFloPe1Wfn6+3MBisVgsFkVR0tLSSmwqNze3yJbp6ekVVzkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwIaQkBDFitFoPHfu3KxZs6pVq1bi9i+++KLJZLrvZf5XtWrVpk+ffvbs2ZycnIKCgrNnz06dOtXR0bGy6qkg8fHxU6dOLbLwueeeU0qxfPnySqq0VA0aNDh06FB+fv7LL79cfG23bt2io6Nv3bpVWFh4+/bt33//PTQ0tLx23bJlS0VRunTpUl4NlqjEa6Tq1KnT6tWrU1JS8vPzr169unDhwmbNmt3DXk6dOjV//vy/Vun/Z/uiVKtWberUqSdOnDAYDOnp6YcOHRo/frxery+vvQshhg0bpiiKp6dnObYJAAAA/AkyAE+dOrV79+7du3cPCwt75513cnJy1q1bV+L2LVq0GDdu3H0v87+2bt1648aNqKio0NDQzp07T5061Wg0Llq0SK3t6tWrZWknJSWlYcOGFVzsXbzwwgtq5UWUGK7q1q3b8/9s3LgxKSlJfdmyZcv7UvKf8N5772VnZ3ft2tXb27vIqu7duxuNxiVLlvTu3btt27aDBg06cOBAbm5uixYtymXXHh4e48eP9/HxKZfWSmMjAI8bN85isRw4cOC5557r37//lClTLl++nJ2d3a1btz+7l/INwDYuSq1atU6cOJGbmztnzpyBAweOHDly8eLFJpPp999/L8cM/BcDsI2vDAAAAFAmMgAPGjTIeuGLL76oKEpAQEDl1VWCFi1aKIoyePBg64X/+te/Dh065ObmJoSIjIwsSwCuX7++oiiVHoB//PHHPxWArS1YsKCMUb+yzJs379SpUyWu+u233+Lj462XVK9e/dSpU+PHj79f1ZWD0q5RUFBQQUHBTz/9ZJ0bq1evfvTo0XPnzv3ZMFm+AdjGRVm8eHFubm5ISIj1wlGjRimKMnLkyPIq4C8GYBtfGQAAAKBMSgzAHTp0UBTl8ccfl3Hl119/ff/993Nycvr3768Ogd6/f//mzZut37Vx48b//Oc/QggvL68lS5bcvHkzLy/vwoULEydOVLdxdHT88MMPExIScnJy9u3b16lTJyHE3r17t27dat3UmjVrDhw4UKTUNm3aKIoyfPjwEg9k+vTp6pBgOcJzxIgRR48ezc7OTktLW7duXZMmTWT3o7rZ77//LoSwt7efPn36uXPnZLUTJkyQDTZr1kxRlN69e+/YsSMzM/P69esjR47s0KHD4cOHs7Ky4uPj27dvr+79ySefPHLkSE5OTlJS0meffebi4iKXJycnT5w4cc6cOQkJCZmZmevXr5c9k7t371bLKJI67i0Al1ZAamrqyy+/vHHjxvz8fHd39wkTJqSkpHTv3v348eO5ubnHjx9v3br1U089deHChaysrI0bN9apU0e+8bnnnjt16pTBYEhLS1u1alW9evVKrGTs2LFnzpwpKCi4ffv2smXLZNfivn371KN74403irxl7dq1Z86csXF0bdu23bJlS1paWlZW1urVqxs0aCCXv/DCC8nJyeHh4cnJyZ9//nleXp51446OjhkZGR9++GGRIdChoaExMTEGg+HGjRv//ve/nZycbO/F399/xYoVycnJeXl5Z86cKW28Q2nX6LPPPsvLy/Pw8CiyvEmTJr6+vvJnJyen2bNn37hxw2g0Xrt2bebMmfb29nJV586d4+PjCwoKzp8/P3ToUOsAXKdOnSVLlly/ft1gMBw8eLB79+4lFlZa4zYuiqenp9Fo/Pjjj4u31rFjRzW0d+7cWZ7JnJycnTt3qp//X3/9dcWKFc8888z58+ezs7Pj4uIeeeQRucre3n7+/Pl37tzJysr6+eefx44dqwbgnJycV199Vd3RggULYmNj1UtZ/F8J218ZAAAAoExKDMBPPvmkoihyYO2yZcvOnj27fv36rl271q5dWw3AL730ktFodHd3l29xd3cvKCh46aWXhBDR0dGXLl3q2rVrUFDQs88+azKZ1PbnzZuXkpISERHx8MMPL1q0KDs7u1GjRk899ZTZbK5bt67cxs3NzWAwPP/880VKdXR0vHLlSlpaWlRUVO3atYusdXV1nTt37vXr1z09PZ2dndu3b2+xWGbMmNG0adP27dvv3LlT9jo6ODhEREQoitKmTZvq1avLxJKbmxsZGRkQEDB+/PiCgoKxY8cKIQICAhRFOXToUNOmTe3s7JYtW5aVlbVly5a6des6OTnt2LHj4MGDctcDBw5UFOWjjz4KCAgICwu7cePG0qVL5aqEhISEhIRnnnnG3t6+Xr16iYmJX331lTxdsbGxv/zyi6enp52dXZFj+bMB2EYBN2/ePHPmzMcff9yxY0d7e/vnnnuuoKDgl19+qVmzZs2aNc+dO3f58uWFCxe6uLj4+fmlpKTMmjVLCPHoo49aLJaoqKgmTZp06NBhz5498k8bRYwZM8Zisbz55ptBQUHdunU7e/ZsbGysTqdzd3dfsGDB2bNnPT091SiuioqKUhRl5cqVHTp0KN4j6u/vn5mZuXHjxuDg4Hbt2u3Zs+fixYsytUZFReXm5m7fvj0sLKxRo0arVq06dOiQ+sa+ffsqihIcHGwdgBs2bJiVlbVw4cJHHnlk8ODBqampMk/a2Mv27dv37dvXvn37Jk2aTJgwwWQy9e7du/ixl3aN4uLi9u3bZ+PaCSF++OGH27dvDx8+vEmTJqNGjcrKyvr000/lp+L27ds7duxo1apVu3bttm/ffvv2bVmwXq+PjY29ePHiY4891qxZs3nz5uXl5ZU49N1G46VdlAEDBiiK0rNnTxs1BwUF5eXl/fLLL61atWrVqtXatWuzsrLkn0V++umnxMTEb775xs3NzcXFZcuWLeofOKZOnVpQUPDMM88EBARMmDDh2rVrZQnAJf4rYfsrAwAAAJSJDMBDhgyxt7e3t7d3c3Pr2rXrpUuX9u3bp9Pp5G+3RqOxVq1acns1APv6+prNZnV4ZGRkpMlkkh2AAQEBjRo1UncRFxcnU1/16tXz8vJefPFFudzR0XHlypW9evVycXHJyMhQfxsePnx4Xl6eGq2tBQUF7d+/X1EUi8Vy6tSpzz//vG3bturaWbNmqbGwRo0aDz/8sNqxJn/F9/LyEkI8/vjj6hDoGjVqFBQUTJ8+XW3k+++/v3jxohqAJ0+eLJeHh4crijJs2DD58p///GdeXp78+cCBA7t371ZbGDVqlMVikdkgISFh27Zt6qoffvjh8OHD8ueDBw+W1xBo2wWouUKdSUs9aZ9++qmiKGqv74oVK2Sv/oQJEwwGg4ODg1zu7e3doUOH4mUcO3ZM9qJLPXv2VBSlc+fOQoj58+eXNtpWCPH6669nZWUpipKZmblhw4Zx48a5urrKVR999FFGRkbNmjXlS39/f7PZPGrUKLX4/v37y1UREREWi8XPz0++/PHHH0+ePFlkEqyZM2cmJyereWnMmDHff/+97b0kJydbn/zQ0NDid8zauEZJSUlLliwp7cCFELVr1y4sLLSehmrGjBk5OTmOjo4jR45UFKV58+ZyuZ+fn8VikQG4T58+iqKovb56vf7cuXPyWMrYuI2LMn78eEVRGjdubKPszz77LDU1Vf1IVKtWLS8v7+2335b/RGRmZqqhesyYMYqiyAt64cKFFStWqI189913dw3Apf0rYfsrAwBQlefshQDwoFq1alVhYWFhYWFOTs6ePXsuXLgwfPhwRVHk2vPnz6enpxd5y61bt2JiYtQ7cocOHbpjx47k5GT5q+2kSZOOHz+emJiYlJQUHBws83PLli2dnZ2PHDki32I0GocNG7Zt2zbZszRmzBi5fNiwYWvWrMnMzCxe54ULFzp37tysWbMpU6ZcuXJl3LhxcXFxsoOriKysrEaNGm3cuPGPP/5ISkpavHixnOmnyGYhISGOjo7WA7B3794dEBCgToJ9/vx5tUEhxLlz59SXzs7OTk5Oer2+Xbt2RVrQ6XStW7eW15BytAAAIABJREFUL0+cOKGuunPnTvHBsX/RXQsoPpjc+qBu376dmpqqvpR/d9i5c6eiKDExMVFRUQ0bNkxOTlZzu8rBwaFVq1ZqN7gQQgaYsgxP/fjjj318fAYOHLh48eLGjRt/++2358+fl8EvNDT08OHDGRkZcssbN2788ccf1m2qhxMdHW0wGOTgAnt7+/Dw8J9//rnIjtq1a3f06FGz2SxfLl26NCoqyvZe1q9f/+abb37yySc9evRwdHQ8dOiQ/FSXkaIohYWFNjZo3bq1vb19kfPm5uYWGBjYvHnz3Nxctfv05s2bN2/elD+HhoYWFBTs2bNHvrRYLHv37i1+qm00brtmIYTtsh9++OG4uDh1m5ycnPPnz6sFXLp0Sf170J07d+RUZI6OjgEBAdafHOse+9KU9q/EXd8IAJAIwABwd6+++mr79u3bt2/ftm1bX1/fvn37qr95CyFKzKLy3r+wsDBnZ+fq1av37t1bxg8HB4ctW7b06tVrypQpHTp0CAkJOXbsmNxeZr/c3NziTS1YsKBVq1atW7d2cXEJCwtbuHChjWrPnTv32WefDRgwwNvbe8mSJa+88krx/snhw4f/9ttvhw4dCgsLCwkJKT6gWqpRo4YQYteuXfn/R+5anUO4oKDAevv8/HzrlzqdztXV1d7e/r333lNbuHz5suwhl9uowUB9i41Duwd3LaD45bM+qOJHJBNyx44dL1++PGvWrCtXrhw8eLD4GXZzc9Pr9fLvAlJ2drbswStL2QaDYd26dRMnTmzWrNljjz3m5uY2Z84ceUV69OiRb8X67lnrwzEYDNHR0UOGDBFC/OMf/6hdu/Yvv/xSZC8eHh4lft5s7GXChAlvvfVW165dt23blpqaOmvWLHUcQVncuHHDdtqUH7kSz5vs/LTeOCcnR32Xk5NTXl6eWvAzzzxjfVru2rjtmoUQdy3bulnZstpskbLlB8nNzU2n01mvUg/HBhv/SgAAyuJP/E8LADTr8uXL1gNly2jVqlXz58/v3bu3HO64Zs0a2VXVqlWrrl277t27V25Wp06dK1euyAmZ1N/Ri4iLizt27FhERMTRo0fT09N37NhRfBsHBwdfX9/r16+rS7Kzs99+++3IyMiQkJAiXZRRUVE7d+6cNm2afFn8TlRJpqnRo0fL0bOqGzdu+Pv7l+UkGAyGwsLCuXPn/vDDD9bL/1S34V9RQQWcOHFi9OjRdnZ2Xbp0mTlz5oYNG+rVq2ednHNzc81ms/XVlD+X9ucSlY+PT05OjnUW2rVr1+rVq/v27Svfvm/fviJ/sJAprjg5/VKtWrWGDh164MCB4jNjp6amlvh5s7EXeTLnzp3r7e0dGRk5c+bMlJSUEkcZlCgmJuaVV15p0aLF6dOnrZe3aNGiV69eX375pTw/JZ633NzcItWqg7QzMzPz8/PbtGljvVbt2bY+rtIat1HzwYMHjUbjuHHjdu7cWWTVq6++unnz5lOnTmVmZhaprUaNGomJiTaaNRgM8t7j4oejdjurrKdtK+1fCQBAWdADDAAVJTU1defOnf369Rs0aNCGDRtkB5Gzs7MQ4vbt23Kbjh07NmrUSO1XNBgM6tNQ9Xr9nj17IiMj5csffvghIiJi+PDhS5YssVgsxXf36aefHjt2rMgzVJo1ayZvvJQv1f5VZ2dntQZ5W2yR3lf58/HjxwsKCry8vM79HzkkuEjHrw0WiyUuLq5hw4ZqC3/88YfRaJQDQW0rl97gv1JAaUJDQzt27Cgj1p49e6ZNm+bp6VnkybqFhYXHjx+Xd/xK8i3q4NUSeXt737hx47XXXrNeqNPpHnroIXkRDx8+HBgYePnyZfVwLBbLrVu3Smxt06ZNeXl5YWFhAwcOLD7+Wd6lHBoaKj+T8vbUmJgYvV5f2l7c3d1HjRol73RNTk6ePXv2gQMHgoODy37qvv7668LCwi+++EKdblrGucWLF8sJpY8fP24ymYqct8zMzIsXL54/f97R0VG9Bzg4OFg954cPH3Z2drazs1MLzsvLS0hIKLJ3G43bqDk9PX3JkiURERF9+vSxXj5q1KjZs2fLsfSxsbHt2rWT9xLLKNu0aVPb17qgoODq1avW47TlrbxSVlaWdR5u1aqV/MH2vxLlPoACAAAA2lLiLNDWfvrpJ+tZbdVJsKSxY8devXr1zp07ciSq7O/Ny8v75ptvfH19e/fuHRcXt2XLlvj4eDkB1bx587Kzs8eMGfPwww9/9913ubm58ulE8ldqg8FgNBpLe/5wo0aNbt26deHChfHjx3fr1u2xxx57/fXX09LSjh07JhPL66+/XlBQ8OijjzZo0OCTTz65c+dOaGhogwYNvv7664ULFyqKMmbMGBcXl9DQUEVRXnzxRZk0vvjii7S0tOHDhzdq1Kh79+7x8fHR0dHqJFjq1Ljy+UlqbaNHj1YURSarIUOGmM3mN954IygoKCQk5Ndff71165YcHZqQkDBjxgz1EObMmXPp0iX586ZNm06cOBESElJ8Rus/OwlW2QuQ80ipY3qnT59uHaIWLFggbx999913U1JShg4d2rhx45CQkDVr1ly5cqV49hgxYoTFYpk8eXKDBg3+8Y9/XLx4UZ2Ly8YkWB9//LHFYvnuu+/69+/fqVOnoUOHrl+/3mKxRERECCEaNGiQlZW1bNmykJCQwMDAqVOnFhYWysfqFCleWrp0aXx8vMlkkh+wIpNg+fv7GwyGVatWderUaeDAgbdu3fr2229t7KV69eoZGRkLFy4MCQlp1KjRiBEjcnJynn766eJHYeMaPfXUUyaT6dSpUy+99NLAgQMnT558+fLl5ORkNUh/++23aWlpAwcOrF+/fmRkZG5urpyGrXbt2llZWfIJQ126dNm7d29SUpKcBMvOzu7o0aPHjh3r1q1bw4YNR4wYkZ6ebj2JlKq0xm1fFDnHcmFh4TfffDNs2LCRI0cuXrzYbDZ/+eWXcoMmTZoYDIalS5cGBQUFBwdv3LgxNTVVTp9W5J+I/v37K4oi52D78MMPCwoKoqKiWrZsOWXKlMuXL6uTYK1bt+7UqVO1a9d2dHR88803ExMTrWeBLvFfCRtfGQAAAKBM/mIA9vDwMBqNGRkZ1v1dTz755JUrVwwGQ0xMTHBw8OOPP56ZmSl/83Z2dp47d25SUlJubu6BAwfUfh5pw4YNMTExNqpt1KjRl19+efHixdzc3Ly8vHPnzs2aNUsdY1m/fv2zZ88WFBS89957tWrV+v3337OzsxMTE9999129Xr9169b8/PwRI0bY2dlt3LixoKBADvi0t7d///33r127ZjQar1+/Pn/+fDn8suwBWEZB2ZmckpLy+++/N23aVC63EYDDwsLS0tJycnKKdLvd23OAy1hAGQOwvb39zJkzr1y5ojYoe9qLGzt27NmzZ41GY0pKyvfff6/26dmeBToyMnLPnj3JycmFhYVpaWmbN2+2ftTQww8/vH379tzc3MzMzP3794eFhZVYvCTjlvUjqYs8B7hr166HDh2S/aWff/65Ot10aXvp0KHDjh07MjIy5HOA/197dx4W1XXwcfwKI+AGihuuBUWJuDBxrSuWVhQXwICSGJcQ0ahBG+sS+ySu1VYr1qqY0KiJErVxx6i41GBZYsCIWwVBUVFEREYFh5lhZhzu+8d5e5/7skxM0prl/X7+mjnnnnvP3Dv68Jtz7rnz5s2r8SPYv0Z9+vTZv39/cXFxRUVFXl5ebGys+kHKTk5OMTExhYWFVqv11q1bv//975UfF379619fvXrVYrFcv349LCwsLS1NrKCuPF5bp9OJjs2dO7fGQ9vZuf2L4uLismjRosuXLxuNxkePHqWlpYmfJBQDBw5MS0szmUx6vf748eNdu3YV5XYCsLOz85YtW8rKyvR6/WeffRYWFqYsxu7t7Z2amlpeXl5QULB06dI//elPFy5cUHpS4/8Sdv7JAAAAAD8xzZs31+v148aN+6E78sP7xgCMHxzXCADw48Q9wADwY+fu7t6vX7/Dhw9nZ2cfOHDgh+4OAADATxUBGAB+7CIjI1NSUgwGQ3h4eI3LXwEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoOLk5DRlypSEhISkpKTU1NSVK1e2bNmyto0dHR1/97vfZWVlGQyGnJychQsXOjo6KrVz5sy5efOm2WzOycmZNGmSUu7u7r558+b8/Hy9Xp+RkREcHFx9z927d7darTt37qzt0P7+/kePHi0qKrJarY8ePUpISOjXr9/3++i1io6Ofvbs2bdt1b59+w8//DA/P99sNhcVFR0/fnz48OFK7b1791auXPmtdtitWzdZlgcNGvRte9KwYcP333//ypUrRqPx8ePHGRkZM2bMcHBw+Lb7+W5iY2OvXr36PXfi6OhYWFgoy7KPj4+6XH1pdDrd+++//4272r9//+nTp+1v4+3tLcvyb37zm+/X65+q/8glAwAAAH7s2rZte/r06dmzZ7u6ukqSpNFoQkNDMzIyRowYUeP2f/zjH81m88KFC/39/RcvXmyz2ebPny+qpk+fbrFYFixYMGTIkGXLllVWVoqg6+DgkJqaWlBQMGnSpICAgN27d9tstr59+6p3W6dOnbNnz1osltoC8NChQy0WS3x8fGBgYM+ePUNDQ7/66iuDwdC1a9f/wln5LgG4T58+T548uXv37oIFC0aPHh0VFZWcnCzL8rx588QG3yEAN2nSZMaMGR4eHt+qlbu7+5UrVwwGQ0xMTEhIyIQJE3bs2PHs2bOEhIQXk4H/I2kqKCiooqIiJydn1apV6vLvEICHDRs2evRo+9vYD8D79u174403vk33f2IIwAAAAPj5c3Z2PnPmTLdu3Zo1a7Zv3768vLzU1NSAgIBGjRolJSX16NGjyvZ169bV6/WrV69WSvbt2/f111+LBJufn79+/Xqlas+ePRkZGZIk9e/fX5ZlJVFrNJqioqK1a9eq9zxz5sz8/Pzjx4/XFoD37dt36dIldUmjRo2uXr06Y8aM/8SZqOrbBmCNRpOXl5eVldWkSRN1+ZYtWywWi6en53cLwN/Njh07DAaDVqtVF77++uuyLE+YMOEFdOA/kqb27Nnz+eefL1my5M6dO3Xq1FHKv0MAfh72A/CtW7cIwAAAAMBPW3R09LRp0yRJSktLi46OdnR09PX1vXv3bvv27T09PY8ePVplewcHB29vb3XGW7du3c2bNyVJ6ty5syzLQ4cOVaomTpwoy7Krq2u9evV8fX3r1q2rVGVmZm7btk156+HhUVpaGhwcnJCQUFsAPnz4cHZ2dm0fpHfv3rIs9+7dWynJy8uLiYmRJOnll1+WZTkkJOTMmTNlZWU6nS4mJkYMhM6dO/fRo0eBgYFZWVnl5eW3b9+ePHmycmZEykpNTT116pT6WIcOHfrqq6+qdCAkJESW5aCgoCrlbm5u3bp1E6/v3bu3fPnyJUuWPHjwoKKiIjExsUWLFqKqRYsW8fHxhYWFJpPp+vXrc+bMEeXqKdB79uzZu3dvZGRkbm6uXq/PzMz85S9/Wf1UNGvWzGKxrFmzpnpV//79xQd3dHRcsWJFXl6eyWS6d+/e5s2bGzRoILaxc5TaOilJUuvWrRMTE00m04MHD5YtW6ZOU7179/7HP/6h0+nKy8vPnTv3nHOMGzdubDKZIiIiOnbsKMvyr371K6XqeQJwSUnJO++8k5iYWFFR4ebmpp4CPXDgwIsXL1ZUVGRlZY0YMSItLe2DDz5QAnBISMiuXbv0en1ZWdn69evF9H7530pLSyVJGjx4cEpKSmlpqV6vT0tLGzJkSPUOvP3228XFxcHBwcXFxeK3nubNm8fHx9+9e9doNKanp6v/pURFRV29etVoNOp0ugMHDrRt21aU19aka9eusiyPGTMmKyvr3LlzX3755YkTJ9RHT0xMPHv2rPhdZtmyZTk5OeKSzZw583kuGQAAAPDzdOrUKWdnZ19f35ycHKVQuQH4wIEDSkKrkUajuXLlyo4dOyRJGj16tCzL7dq1U2rFwG+vXr2qtGrXrp3ZbI6MjFRK9u7dm5CQIEmSnQA8bdo0WZb379/ft2/f6vN47QRgkSFzc3NFwzFjxlit1qioKCVKnTx5slWrVs7OzitWrLDZbOKOUyVlTZkyxWaztW7dWuy2QYMGRqPxrbfeqtKBdevW2Ww2JycnO6fr3r17OTk5mzZt6tWr1yuvvFJaWvrhhx+KqqNHj+bl5Q0ZMqRz585vvvnms2fPQkNDqwTgnTt33r9/Py4urkGDBvXq1Tt58mSNvwiMGTPmG+9lnT9/vtlsjoiI6NSp07Bhw+7du/fXv/5VVNk5Sm2dlCTp9OnTd+/eDQgI6NKlS2xsbFFRkUhTLi4uOp3uyJEjWq3W19d3w4YN5eXlbdq0sdM3YebMmU+ePHFxcRG/QWzfvl2pep4AXFhYmJ2dvWbNmv79+2s0GiUAi/4kJydrtVp/f/+LFy8WFhbGxsYqAfjixYvR0dF+fn4LFiyQZTkiIkKSpDZt2siyHB0d7e7u3qBBg7Kysri4uC5duvj6+n7wwQcGg6HKsL/4uhoMhtOnTwcFBXl5eTk4OJw/f/7GjRviFG3atMlkMolfRgYPHlxZWTlt2rSOHTv27ds3OTlZZFc7TTp16iTLcmZmZmRkZPfu3WfPnm2xWNzc3MSh3dzczGbz7NmzJUlav369wWCYPHmyt7f3jBkzzGbz1KlT7V8yAAAA4Gfr+PHjkiQFBwcfPHiweu3ixYv9/f3tNF+7dq1er+/UqZMkSRMmTJBlWfkrXAlv6rE7Mek6NTX1ypUryoDwyJEjy8vLRXK2E4AlSXr33XefPn0qy3JZWdmxY8emT59ev359UfWNAVgdk06dOpWSkiKilHqJKScnJ71ev2LFCnXKqlevXmlpqXKfc0REhMlkUn9M4bPPPrt7966dcyUCsJgTLnz66acXLlwQr729vb28vJSqzMxMMSxZJQCXlZXVq1dPbDNp0iRZlpUzoJgxY4Ysyx06dLDTEw8Pj+7duytv161bp6RcO0eprZMiH86aNUuU16lTJzc3V6SpunXrdu/evWnTpqKqUaNGsiyPHz/e/omSJCkjIyMuLk68njp1ql6vVz7p8wTge/funT9/XnmrBODw8HBZln19fUX5oEGDZFlWB2D1yHlBQcFf/vIXEZtlWRZToLt06aL+zmg0Gn9//+pXISoqSpZl5cbj4cOHq+dHODg45OTkbNmyRUR9o9Go/HNo2bKluD3eThPRVfH1liSpVatWNptNmdw+efLkZ8+etWzZ0tXV1Ww2L1u2TOnVli1bbty4Yf+SAQBevBe0RiUAQKisrFSv5KyoU6eO1WqtrdXq1atnz54dEREh/qR+Hg0bNjx27Fj79u2Dg4PFnuvXr7958+alS5cWFBR8Y/M1a9Z4eHiEhITs2LGjQ4cOf/vb33Jzc5UwY58SNSVJysrK8vb2rl5lsVjy8vLUVZIkmUymv//978qK1uHh4YcOHSorK6uyf1mW7ZwrhRjcEx4+fNioUSPxury8/Le//e3ly5fv37//4MGD7t27u7u7V28uJi2L10+ePBGrZFXviSRJ9juj0+mCgoLS09MLCgoePHjw1ltvqQ9X21Fq62SXLl0kSTp37pzSAeW11Wp1cnKKjY29du1aUVGR+KrU+NHUXnrppb59++7atUuj0Wg0moMHDzo4OLzyyiv2W1VRfZq62HNpaamS9tPS0nQ6nXqD2i6Q4vr167m5ubt27Vq0aFHPnj1tNltycrLRaLTfh379+pnN5uTkZPG2srIyNTVV3KSdlJQky3JKSsq0adM8PT2Li4vF2bPTpMrOi4qKUlJSxo4dK96GhYV98cUXxcXFWq3WyclJPYH/n//8p7e3d8OGDe1cMgDAi0cABoAXxNHR0cnJKTc3t0ePHso6Q1qtVgQePz+/GsOtg4PDli1bZs2aNXLkyMTERFEobo9UD402btxYKRf3piYlJbVp02bQoEH5+fmicPny5Y8fP96wYcNzdthoNH7++edz5szp0qVLQEBAgwYNlHEw+8rLy5XXBoNB9E386a9OL+oqxdatW3v06OHn51evXr2goKBPPvmk+v4LCgratWsnpuzaYTAYlNeyLItzXrdu3ZMnTw4bNmzevHl9+/bVarUXL16ssbmSSxXq1aGUnohZsna6sWnTpsWLF8fGxg4ZMkSr1YpxRftHsdNJkRLVrZSz3alTp6SkJBcXl4kTJ/bs2bP6fPgaienxKSkpVqvVarU+fvy4fv36U6ZMeZ62iuo/UkiS1LRpU71ery559OiR+m2NF0jNZrMNHjx4796906ZNy8zMzM/PVz/uq7Y+uLq6Ojs7m0ymin+LjIxs1aqVJEm5ubn9+/e/efPm6tWrb9++nZ6eLkaA7TSp/gH37NkTFBTk4uLSqFGjwMDA3bt3iz1IknTmzBllD+Kr6+HhYeeSAQBePM0P3QEA+P/iyJEjkyZN2rZt282bN999992YmJiOHTseOnRo+PDhbm5uGo2mpKSkeqtNmzaNHTs2ICBAPcs0NzdXBB5lJrCPj4/NZhPl9evXT0xMdHBwGDx4sHrMLTw8vH379hUVFeKtuLn31Vdf7dWr1+XLl9UH9fDwKC8vV/+ZfubMmYMHD44cOVIZ9lRTJvEK6qE8V1dXMbApol2DBg2U2OPq6nrnzp0qu8rMzLx48eL48eMvXLjw+PHjL774ovo5SUlJWbBgwRtvvKFM3BVcXFzee++9DRs2VBlpVOvXr1+PHj2GDBmSmpoqSpo3b3779u3atrcvPT3dYrFMnz49KSmpStX8+fNPnDhx7dq1N998c+XKlcps8+ozur9VJ8XZq/7bh5gxrtFoXnvtNXGJ27dv/40HcnR0nDhx4saNGz/99FOlsHfv3ps3b27Tpk1hYeHznYaaVVRUVJmu/I3D0dWVlJQsWLBgwYIFvr6+8+bNi4+Pz87OzszMtNOkrKysoqLi5ZdfVhfabDbx4sqVKxMnTnR0dBw0aNCqVauOHTvWtm1b+02qOHDgQGxsbGBgoPh0hw4dUhLyxIkT//Wvf6k3LigoEDPka7xkAIAXjxFgAHhBtmzZMmnSJF9f3/DwcD8/v9zc3O3bt0dFRRUVFX388cfvvfde9SaTJ0+OjIwcMWKEOv1KknTz5s0bN24o8zAlSQoNDVVmh8bGxrq6ug4bNqxKDhw+fLifn5/2386cOXPs2DGtVitis6Jly5YFBQULFy5UF9apU8fHx+fBgweSJD19+lT9R3yLFi3UY2WSJKlvZu7du7d60S+lqmHDhj4+PuoqxbZt28aPHx8REREfH19ZWVl9g+PHj+fm5i5dulS9DJgkSRs2bJg/f779dCHGjZWhyP79+3t5eVUfe3xOjx8/jo+PHz9+/PDhw9Xlr7/++tq1a/38/BwdHTUajXK4Ro0aBQcHf+Ph7HRSXCxldm7dunWVO1ddXFwMBoPyA8fEiRNrHLVWCwwMbN26dVxc3HmVjz/++OnTp6L593Hjxo2mTZt27NhRvB04cGDz5s2fs63otpeXV0hIiCjJzs6eMWOGzWZTFvquzblz51xcXBwdHXP+Tay/LX5Z6N+/vwi3ycnJixcvbtasmYeHh50m1ZWUlCQlJY0aNSo0NPTYsWPin8Ply5fNZnOLFi2UPTx69KikpMRsNtu5ZAAAAMDPWfv27ZOSkqKjo8VwkEajGTNmzJdffqk8tletXr16BQUFBw4cGPp/idWPJ0+ebLVaFy1a5O/vv3btWpvNJv6q9vPzs9lsixcvVjcR8zyrsLMI1po1ayorKz/66KPRo0cPGDAgLCzsyJEjlZWVYkUlZ2fnkpKS+Ph4jUbTuHHjPXv2iMcdKetI5eTkvPrqq15eXnPnzpVlWUSp6Ohoq9WakpIyaNCgzp07x8fHm81mMThW5TnAjRs3NhqNFoulyh3Can5+fiUlJTqdbunSpaGhoVFRUcnJyVarVVmdqMpzgGNiYvLy8sRQqslkiouLa9WqVWBgYGZm5smTJy9dutSiRYsqi2ClpaUpzcWy28ojc9Tc3NzOnz9vtVrj4uLCw8MnTJiwY8cOm822efNmsUFmZmZGRkaHDh169OiRnJwcHx9vtVp9fHw0Gk1tR7HTSXHrbEFBQWBgoFar/eSTT+7cuSNWVBJLUou5u7NmzUpISCguLo6LixOzc7du3bpx48Yqnd+zZ0+VEUth+/bt4t7d51wES32qlUWwWrZsaTQajx49+tJLLw0cODA9Pf3+/fvqRbDUq2efP39+69at4rXRaNy+fbtWqw0ICHj27Nm8efN8fHw6d+68fPlyi8XSuXPnKh0Qi2BpNP87qc3R0fHChQsXL1709/f39PR87bXXHj9+LFZWW7p06cOHD8PCwjp06KDVag8dOnT79u06derYaVLjI4unTp2an5//5MkT9c3SGzdu1Ol0ERERXl5eQ4cOvXTpkvJss9ouWW3XBQAAAPiZcHZ2joqKOnbsWEpKSlJS0h/+8AcPD48at9RqtXJNlO1nzZp169Yti8WSlZUVFhYmCt8Zym+vAAAC40lEQVR5553qTWocaLW/CvTkyZOTk5OLi4utVqtOpztx4kRgYKBSGxQUlJubW15efu3atbFjx549e1Ys4Ssy5Lhx444ePWowGHQ6nTKyLQLwgAEDMjMzzWbzrVu3Ro0apVSpA7AkSeL82D+TrVu3jo2NvX37ttlsLiwsPHToUJ8+fZTa2gKwmPV9+/Zto9GYkpLSvXv3ESNGlJWVXb169bsFYDH0umjRosuXLxuNxkePHqWlpanXXvbz8zt//rzJZLp27VpYWFjbtm1v3rz59OlTT09PO0eprZOSJHl6ep4+fbqioqK4uHj58uUrV65UFpr685//XFJSUlpaunv3bjc3t2XLlplMJhHF09PTlcfzCuLxv0uWLKn+iUaNGiUW+v4+AVh8ouvXr1dUVHz99dcDBgy4du2a+KHEfgBesmSJ+PI0btx40qRJly5dMhgMZWVlZ8+eVb4zalUCsPIUZZ1OZzKZsrOz586dK8o1Gs2qVavEd+bhw4cJCQlihSo7TWoMwE2aNLFYLKWlpc7OzkqhRqNZsWLFnTt3LBbL3bt3xUQMUWXnklW/LgAAAAB+GtQZsorqKbc2zZs31+v148aN+y90EC+Uu7u7slaZs7OzwWB4++23f+hOAQD+X+MeYADAj4W7u3u/fv0OHz6cnZ194MCBH7o7+F5cXV1v3bq1c+fOHj16dOvW7aOPPrLZbFxWAMAPiwAMAPixiIyMTElJMRgM4eHhNS5/hZ+Qp0+fBgYGNm3aNC0tLTU19Re/+EVgYKBYRw0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAF+x9FQIy64bi+1QAAAABJRU5ErkJggg==","disable_correlation":true,"first_seen":"2024-09-05T11:07:19.443000+00:00","to_ids":false,"type":"attachment","uuid":"f8a55a44-b4cc-4b58-aeca-1ae67ab6a6d8","value":"screenshot_landing_page.png"},{"category":"External analysis","comment":"HTTP Archive (HAR) of the whole capture","data":"eyJsb2ciOiB7InZlcnNpb24iOiAiMS4yIiwgImNyZWF0b3IiOiB7Im5hbWUiOiAiUGxheXdyaWdodCIsICJ2ZXJzaW9uIjogIjEuNDYuMCJ9LCAiYnJvd3NlciI6IHsibmFtZSI6ICJjaHJvbWl1bSIsICJ2ZXJzaW9uIjogIjEyOC4wLjY2MTMuMTgifSwgInBhZ2VzIjogW3sic3RhcnRlZERhdGVUaW1lIjogIjIwMjQtMDktMDVUMTE6MDc6MTkuMzcwWiIsICJpZCI6ICJwYWdlQDhjOTMyZjgzMzdkOWFiYjRiOWFiOTg4OWRlYzUxYjk5IiwgInRpdGxlIjogIlN1cHBseSBDaGFpbiBDYW5hZGEgUG9ydGFsIiwgInBhZ2VUaW1pbmdzIjogeyJvbkNvbnRlbnRMb2FkIjogMTcxNSwgIm9uTG9hZCI6IDIzMzF9fV0sICJlbnRyaWVzIjogW3sic3RhcnRlZERhdGVUaW1lIjogIjIwMjQtMDktMDVUMTE6MDc6MTkuNDQzWiIsICJ0aW1lIjogMjQ4LjQ2NiwgInJlcXVlc3QiOiB7Im1ldGhvZCI6ICJHRVQiLCAidXJsIjogImh0dHA6Ly9wb3J0YWwuc3VwcGx5Y2hhaW5jYW5hZGEuY29tLyIsICJodHRwVmVyc2lvbiI6ICJIVFRQLzEuMSIsICJjb29raWVzIjogW10sICJoZWFkZXJzIjogW3sibmFtZSI6ICJBY2NlcHQiLCAidmFsdWUiOiAidGV4dC9odG1sLGFwcGxpY2F0aW9uL3hodG1sK3htbCxhcHBsaWNhdGlvbi94bWw7cT0wLjksaW1hZ2UvYXZpZixpbWFnZS93ZWJwLGltYWdlL2FwbmcsKi8qO3E9MC44LGFwcGxpY2F0aW9uL3NpZ25lZC1leGNoYW5nZTt2PWIzO3E9MC43In0sIHsibmFtZSI6ICJBY2NlcHQtRW5jb2RpbmciLCAidmFsdWUiOiAiZ3ppcCwgZGVmbGF0ZSJ9LCB7Im5hbWUiOiAiQWNjZXB0LUxhbmd1YWdlIiwgInZhbHVlIjogImVuLVVTIn0sIHsibmFtZSI6ICJDb25uZWN0aW9uIiwgInZhbHVlIjogImtlZXAtYWxpdmUifSwgeyJuYW1lIjogIkhvc3QiLCAidmFsdWUiOiAicG9ydGFsLnN1cHBseWNoYWluY2FuYWRhLmNvbSJ9LCB7Im5hbWUiOiAiVXBncmFkZS1JbnNlY3VyZS1SZXF1ZXN0cyIsICJ2YWx1ZSI6ICIxIn0sIHsibmFtZSI6ICJVc2VyLUFnZW50IiwgInZhbHVlIjogIk1vemlsbGEvNS4wIChXaW5kb3dzIE5UIDEwLjA7IFdpbjY0OyB4NjQpIEFwcGxlV2ViS2l0LzUzNy4zNiAoS0hUTUwsIGxpa2UgR2Vja28pIENocm9tZS8xMjguMC42NjEzLjE4IFNhZmFyaS81MzcuMzYifV0sICJxdWVyeVN0cmluZyI6IFtdLCAiaGVhZGVyc1NpemUiOiA0MzYsICJib2R5U2l6ZSI6IDB9LCAicmVzcG9uc2UiOiB7InN0YXR1cyI6IDMwMSwgInN0YXR1c1RleHQiOiAiTW92ZWQgUGVybWFuZW50bHkiLCAiaHR0cFZlcnNpb24iOiAiSFRUUC8xLjEiLCAiY29va2llcyI6IFtdLCAiaGVhZGVycyI6IFt7Im5hbWUiOiAiQ0YtQ2FjaGUtU3RhdHVzIiwgInZhbHVlIjogIkRZTkFNSUMifSwgeyJuYW1lIjogIkNGLVJBWSIsICJ2YWx1ZSI6ICI4YmU1YzE0Njk5YzExYzE1LUZSQSJ9LCB7Im5hbWUiOiAiQ29ubmVjdGlvbiIsICJ2YWx1ZSI6ICJrZWVwLWFsaXZlIn0sIHsibmFtZSI6ICJDb250ZW50LVR5cGUiLCAidmFsdWUiOiAidGV4dC9odG1sOyBjaGFyc2V0PWlzby04ODU5LTEifSwgeyJuYW1lIjogIkRhdGUiLCAidmFsdWUiOiAiVGh1LCAwNSBTZXAgMjAyNCAxMTowNzoxOSBHTVQifSwgeyJuYW1lIjogIkxvY2F0aW9uIiwgInZhbHVlIjogImh0dHBzOi8vcG9ydGFsLnN1cHBseWNoYWluY2FuYWRhLmNvbS8ifSwgeyJuYW1lIjogIk5FTCIsICJ2YWx1ZSI6ICJ7XCJzdWNjZXNzX2ZyYWN0aW9uXCI6MCxcInJlcG9ydF90b1wiOlwiY2YtbmVsXCIsXCJtYXhfYWdlXCI6NjA0ODAwfSJ9LCB7Im5hbWUiOiAiUmVwb3J0LVRvIiwgInZhbHVlIjogIntcImVuZHBvaW50c1wiOlt7XCJ1cmxcIjpcImh0dHBzOlxcL1xcL2EubmVsLmNsb3VkZmxhcmUuY29tXFwvcmVwb3J0XFwvdjQ/cz1TQldaeGx6b0Z5MmdTbFFMV3FyRlNRMU5WbWlMeU50Z1FxWHA0RHd0WHM1Q2IyUUhsSkZDd2tnZ1hxUmFoQjFKVmRoYWVTZ0dZRUJFR3A3eFRLYWdqcThxaCUyRjlsNjU1cmclMkY0WkJDQ0lGRVduTHVGY3gwSWJ6czlENFJBUnFRR21CaUptbjJ0SXR4OEc5dzVoaTBnajZlNGVvVENCNCUyRktLQXFjJTNEXCJ9XSxcImdyb3VwXCI6XCJjZi1uZWxcIixcIm1heF9hZ2VcIjo2MDQ4MDB9In0sIHsibmFtZSI6ICJTZXJ2ZXIiLCAidmFsdWUiOiAiY2xvdWRmbGFyZSJ9LCB7Im5hbWUiOiAiVHJhbnNmZXItRW5jb2RpbmciLCAidmFsdWUiOiAiY2h1bmtlZCJ9XSwgImNvbnRlbnQiOiB7InNpemUiOiAtMSwgIm1pbWVUeXBlIjogInRleHQvaHRtbDsgY2hhcnNldD1pc28tODg1OS0xIiwgImNvbXByZXNzaW9uIjogMH0sICJoZWFkZXJzU2l6ZSI6IDY1MCwgImJvZHlTaXplIjogMCwgInJlZGlyZWN0VVJMIjogImh0dHBzOi8vcG9ydGFsLnN1cHBseWNoYWluY2FuYWRhLmNvbS8iLCAiX3RyYW5zZmVyU2l6ZSI6IDY1MH0sICJjYWNoZSI6IHt9LCAidGltaW5ncyI6IHsiZG5zIjogMS45NzQsICJjb25uZWN0IjogNS4wNzYsICJzc2wiOiA4LjA1LCAic2VuZCI6IDAsICJ3YWl0IjogMjI4Ljg4OCwgInJlY2VpdmUiOiA0LjQ3OH0sICJwYWdlcmVmIjogInBhZ2VAOGM5MzJmODMzN2Q5YWJiNGI5YWI5ODg5ZGVjNTFiOTkiLCAic2VydmVySVBBZGRyZXNzIjogIlsyNjA2OjQ3MDA6MjA6OjY4MWE6ZWNmXSIsICJfc2VydmVyUG9ydCI6IDgwLCAiX3NlY3VyaXR5RGV0YWlscyI6IHt9fSwgeyJzdGFydGVkRGF0ZVRpbWUiOiAiMjAyNC0wOS0wNVQxMTowNzoxOS42ODlaIiwgInRpbWUiOiAzNjkuMjg3LCAicmVxdWVzdCI6IHsibWV0aG9kIjogIkdFVCIsICJ1cmwiOiAiaHR0cHM6Ly9wb3J0YWwuc3VwcGx5Y2hhaW5jYW5hZGEuY29tLyIsICJodHRwVmVyc2lvbiI6ICJIVFRQLzIuMCIsICJjb29raWVzIjogW10sICJoZWFkZXJzIjogW3sibmFtZSI6ICI6YXV0aG9yaXR5IiwgInZhbHVlIjogInBvcnRhbC5zdXBwbHljaGFpbmNhbmFkYS5jb20ifSwgeyJuYW1lIjogIjptZXRob2QiLCAidmFsdWUiOiAiR0VUIn0sIHsibmFtZSI6ICI6cGF0aCIsICJ2YWx1ZSI6ICIvIn0sIHsibmFtZSI6ICI6c2NoZW1lIiwgInZhbHVlIjogImh0dHBzIn0sIHsibmFtZSI6ICJhY2NlcHQiLCAidmFsdWUiOiAidGV4dC9odG1sLGFwcGxpY2F0aW9uL3hodG1sK3htbCxhcHBsaWNhdGlvbi94bWw7cT0wLjksaW1hZ2UvYXZpZixpbWFnZS93ZWJwLGltYWdlL2FwbmcsKi8qO3E9MC44LGFwcGxpY2F0aW9uL3NpZ25lZC1leGNoYW5nZTt2PWIzO3E9MC43In0sIHsibmFtZSI6ICJhY2NlcHQtZW5jb2RpbmciLCAidmFsdWUiOiAiZ3ppcCwgZGVmbGF0ZSwgYnIsIHpzdGQifSwgeyJuYW1lIjogImFjY2VwdC1sYW5ndWFnZSIsICJ2YWx1ZSI6ICJlbi1VUyJ9LCB7Im5hbWUiOiAicHJpb3JpdHkiLCAidmFsdWUiOiAidT0wLCBpIn0sIHsibmFtZSI6ICJzZWMtY2gtdWEiLCAidmFsdWUiOiAiXCJOb3Q7QT1CcmFuZFwiO3Y9XCIyNFwiLCBcIkNocm9taXVtXCI7dj1cIjEyOFwiIn0sIHsibmFtZSI6ICJzZWMtY2gtdWEtbW9iaWxlIiwgInZhbHVlIjogIj8wIn0sIHsibmFtZSI6ICJzZWMtY2gtdWEtcGxhdGZvcm0iLCAidmFsdWUiOiAiXCJXaW5kb3dzXCIifSwgeyJuYW1lIjogInNlYy1mZXRjaC1kZXN0IiwgInZhbHVlIjogImRvY3VtZW50In0sIHsibmFtZSI6ICJzZWMtZmV0Y2gtbW9kZSIsICJ2YWx1ZSI6ICJuYXZpZ2F0ZSJ9LCB7Im5hbWUiOiAic2VjLWZldGNoLXNpdGUiLCAidmFsdWUiOiAibm9uZSJ9LCB7Im5hbWUiOiAic2VjLWZldGNoLXVzZXIiLCAidmFsdWUiOiAiPzEifSwgeyJuYW1lIjogInVwZ3JhZGUtaW5zZWN1cmUtcmVxdWVzdHMiLCAidmFsdWUiOiAiMSJ9LCB7Im5hbWUiOiAidXNlci1hZ2VudCIsICJ2YWx1ZSI6ICJNb3ppbGxhLzUuMCAoV2luZG93cyBOVCAxMC4wOyBXaW42NDsgeDY0KSBBcHBsZVdlYktpdC81MzcuMzYgKEtIVE1MLCBsaWtlIEdlY2tvKSBDaHJvbWUvMTI4LjAuNjYxMy4xOCBTYWZhcmkvNTM3LjM2In1dLCAicXVlcnlTdHJpbmciOiBbXSwgImhlYWRlcnNTaXplIjogNjg2LCAiYm9keVNpemUiOiAwfSwgInJlc3BvbnNlIjogeyJzdGF0dXMiOiAzMDEsICJzdGF0dXNUZXh0IjogIiIsICJodHRwVmVyc2lvbiI6ICJIVFRQLzIuMCIsICJjb29raWVzIjogW10sICJoZWFkZXJzIjogW3sibmFtZSI6ICJjZi1jYWNoZS1zdGF0dXMiLCAidmFsdWUiOiAiRFlOQU1JQyJ9LCB7Im5hbWUiOiAiY2YtcmF5IiwgInZhbHVlIjogIjhiZTVjMTQ4NGM5ODcxYzQtRlJBIn0sIHsibmFtZSI6ICJjb250ZW50LXR5cGUiLCAidmFsdWUiOiAidGV4dC9odG1sOyBjaGFyc2V0PWlzby04ODU5LTEifSwgeyJuYW1lIjogImRhdGUiLCAidmFsdWUiOiAiVGh1LCAwNSBTZXAgMjAyNCAxMTowNzoyMCBHTVQifSwgeyJuYW1lIjogImxvY2F0aW9uIiwgInZhbHVlIjogImh0dHBzOi8vcG9ydGFsLnN1cHBseWNoYWluY2FuYWRhLmNvbS9lbi9wb3J0YWxsb2dpbiJ9LCB7Im5hbWUiOiAibmVsIiwgInZhbHVlIjogIntcInN1Y2Nlc3NfZnJhY3Rpb25cIjowLFwicmVwb3J0X3RvXCI6XCJjZi1uZWxcIixcIm1heF9hZ2VcIjo2MDQ4MDB9In0sIHsibmFtZSI6ICJyZXBvcnQtdG8iLCAidmFsdWUiOiAie1wiZW5kcG9pbnRzXCI6W3tcInVybFwiOlwiaHR0cHM6XFwvXFwvYS5uZWwuY2xvdWRmbGFyZS5jb21cXC9yZXBvcnRcXC92ND9zPWpidHhLaXV4V1lrZnA3UlVOSG5nNkIlMkZBVEdEck0lMkY2NWRicVd0Mm9KQTQlMkIyR1l0TlRkciUyQld6bURxb2VoTHI2bFd2aFRoTVZRTDFHbUglMkJXWUxRaWclMkY0SmNzOUtQS3FyJTJCTk9sckFiSHdvbmIyN3dCQ0J4Q1B4RllMTyUyRlZNTG1pJTJGTFclMkZKWnlkVThuRWNGcW01dmdEelZDJTJCbkRwN2xQOFRoRGcwJTNEXCJ9XSxcImdyb3VwXCI6XCJjZi1uZWxcIixcIm1heF9hZ2VcIjo2MDQ4MDB9In0sIHsibmFtZSI6ICJzZXJ2ZXIiLCAidmFsdWUiOiAiY2xvdWRmbGFyZSJ9LCB7Im5hbWUiOiAic3RyaWN0LXRyYW5zcG9ydC1zZWN1cml0eSIsICJ2YWx1ZSI6ICJtYXgtYWdlPTYzMDcyMDAwOyBpbmNsdWRlU3ViZG9tYWluczsgcHJlbG9hZCJ9XSwgImNvbnRlbnQiOiB7InNpemUiOiAtMSwgIm1pbWVUeXBlIjogInRleHQvaHRtbDsgY2hhcnNldD1pc28tODg1OS0xIiwgImNvbXByZXNzaW9uIjogMH0sICJoZWFkZXJzU2l6ZSI6IDAsICJib2R5U2l6ZSI6IDAsICJyZWRpcmVjdFVSTCI6ICJodHRwczovL3BvcnRhbC5zdXBwbHljaGFpbmNhbmFkYS5jb20vZW4vcG9ydGFsbG9naW4iLCAiX3RyYW5zZmVyU2l6ZSI6IDB9LCAiY2FjaGUiOiB7fSwgInRpbWluZ3MiOiB7ImRucyI6IDEuMjU5LCAiY29ubmVjdCI6IDMzLjMzMywgInNzbCI6IDIzLjI0MywgInNlbmQiOiAwLCAid2FpdCI6IDMwOC44NTYsICJyZWNlaXZlIjogMi41OTZ9LCAicGFnZXJlZiI6ICJwYWdlQDhjOTMyZjgzMzdkOWFiYjRiOWFiOTg4OWRlYzUxYjk5IiwgInNlcnZlcklQQWRkcmVzcyI6ICJbMjYwNjo0NzAwOjIwOjo2ODFhOmVjZl0iLCAiX3NlcnZlclBvcnQiOiA0NDMsICJfc2VjdXJpdHlEZXRhaWxzIjogeyJwcm90b2NvbCI6ICJUTFMgMS4zIiwgInN1YmplY3ROYW1lIjogInN1cHBseWNoYWluY2FuYWRhLmNvbSIsICJpc3N1ZXIiOiAiV0UxIiwgInZhbGlkRnJvbSI6IDE3MjM0NzA4NDEsICJ2YWxpZFRvIjogMTczMTI0Njg0MH19LCB7InN0YXJ0ZWREYXRlVGltZSI6ICIyMDI0LTA5LTA1VDExOjA3OjIwLjAzMVoiLCAidGltZSI6IDI4Ni43NTIsICJyZXF1ZXN0IjogeyJtZXRob2QiOiAiR0VUIiwgInVybCI6ICJodHRwczovL3BvcnRhbC5zdXBwbHljaGFpbmNhbmFkYS5jb20vZW4vcG9ydGFsbG9naW4iLCAiaHR0cFZlcnNpb24iOiAiSFRUUC8yLjAiLCAiY29va2llcyI6IFtdLCAiaGVhZGVycyI6IFt7Im5hbWUiOiAiOmF1dGhvcml0eSIsICJ2YWx1ZSI6ICJwb3J0YWwuc3VwcGx5Y2hhaW5jYW5hZGEuY29tIn0sIHsibmFtZSI6ICI6bWV0aG9kIiwgInZhbHVlIjogIkdFVCJ9LCB7Im5hbWUiOiAiOnBhdGgiLCAidmFsdWUiOiAiL2VuL3BvcnRhbGxvZ2luIn0sIHsibmFtZSI6ICI6c2NoZW1lIiwgInZhbHVlIjogImh0dHBzIn0sIHsibmFtZSI6ICJhY2NlcHQiLCAidmFsdWUiOiAidGV4dC9odG1sLGFwcGxpY2F0aW9uL3hodG1sK3htbCxhcHBsaWNhdGlvbi94bWw7cT0wLjksaW1hZ2UvYXZpZixpbWFnZS93ZWJwLGltYWdlL2FwbmcsKi8qO3E9MC44LGFwcGxpY2F0aW9uL3NpZ25lZC1leGNoYW5nZTt2PWIzO3E9MC43In0sIHsibmFtZSI6ICJhY2NlcHQtZW5jb2RpbmciLCAidmFsdWUiOiAiZ3ppcCwgZGVmbGF0ZSwgYnIsIHpzdGQifSwgeyJuYW1lIjogImFjY2VwdC1sYW5ndWFnZSIsICJ2YWx1ZSI6ICJlbi1VUyJ9LCB7Im5hbWUiOiAicHJpb3JpdHkiLCAidmFsdWUiOiAidT0wLCBpIn0sIHsibmFtZSI6ICJzZWMtY2gtdWEiLCAidmFsdWUiOiAiXCJOb3Q7QT1CcmFuZFwiO3Y9XCIyNFwiLCBcIkNocm9taXVtXCI7dj1cIjEyOFwiIn0sIHsibmFtZSI6ICJzZWMtY2gtdWEtbW9iaWxlIiwgInZhbHVlIjogIj8wIn0sIHsibmFtZSI6ICJzZWMtY2gtdWEtcGxhdGZvcm0iLCAidmFsdWUiOiAiXCJXaW5kb3dzXCIifSwgeyJuYW1lIjogInNlYy1mZXRjaC1kZXN0IiwgInZhbHVlIjogImRvY3VtZW50In0sIHsibmFtZSI6ICJzZWMtZmV0Y2gtbW9kZSIsICJ2YWx1ZSI6ICJuYXZpZ2F0ZSJ9LCB7Im5hbWUiOiAic2VjLWZldGNoLXNpdGUiLCAidmFsdWUiOiAibm9uZSJ9LCB7Im5hbWUiOiAic2VjLWZldGNoLXVzZXIiLCAidmFsdWUiOiAiPzEifSwgeyJuYW1lIjogInVwZ3JhZGUtaW5zZWN1cmUtcmVxdWVzdHMiLCAidmFsdWUiOiAiMSJ9LCB7Im5hbWUiOiAidXNlci1hZ2VudCIsICJ2YWx1ZSI6ICJNb3ppbGxhLzUuMCAoV2luZG93cyBOVCAxMC4wOyBXaW42NDsgeDY0KSBBcHBsZVdlYktpdC81MzcuMzYgKEtIVE1MLCBsaWtlIEdlY2tvKSBDaHJvbWUvMTI4LjAuNjYxMy4xOCBTYWZhcmkvNTM3LjM2In1dLCAicXVlcnlTdHJpbmciOiBbXSwgImhlYWRlcnNTaXplIjogNzE0LCAiYm9keVNpemUiOiAwfSwgInJlc3BvbnNlIjogeyJzdGF0dXMiOiAyMDAsICJzdGF0dXNUZXh0IjogIiIsICJodHRwVmVyc2lvbiI6ICJIVFRQLzIuMCIsICJjb29raWVzIjogW3sibmFtZSI6ICJKU0VTU0lPTklEIiwgInZhbHVlIjogIjI1N0Q5REM5MjA0NTJBNEQ5MzNCOEEzQ0RBOUI2QkQzIiwgImRvbWFpbiI6ICIuc3VwcGx5Y2hhaW5jYW5hZGEuY29tIiwgInBhdGgiOiAiLyIsICJzZWN1cmUiOiB0cnVlLCAiaHR0cE9ubHkiOiB0cnVlLCAic2FtZVNpdGUiOiAiTm9uZSJ9XSwgImhlYWRlcnMiOiBbeyJuYW1lIjogImNmLWNhY2hlLXN0YXR1cyIsICJ2YWx1ZSI6ICJEWU5BTUlDIn0sIHsibmFtZSI6ICJjZi1yYXkiLCAidmFsdWUiOiAiOGJlNWMxNGEzZTY1NzFjNC1GUkEifSwgeyJuYW1lIjogImNvbnRlbnQtZW5jb2RpbmciLCAidmFsdWUiOiAiYnIifSwgeyJuYW1lIjogImNvbnRlbnQtdHlwZSIsICJ2YWx1ZSI6ICJ0ZXh0L2h0bWw7Y2hhcnNldD11dGYtOCJ9LCB7Im5hbWUiOiAiZGF0ZSIsICJ2YWx1ZSI6ICJUaHUsIDA1IFNlcCAyMDI0IDExOjA3OjIwIEdNVCJ9LCB7Im5hbWUiOiAibmVsIiwgInZhbHVlIjogIntcInN1Y2Nlc3NfZnJhY3Rpb25cIjowLFwicmVwb3J0X3RvXCI6XCJjZi1uZWxcIixcIm1heF9hZ2VcIjo2MDQ4MDB9In0sIHsibmFtZSI6ICJyZXBvcnQtdG8iLCAidmFsdWUiOiAie1wiZW5kcG9pbnRzXCI6W3tcInVybFwiOlwiaHR0cHM6XFwvXFwvYS5uZWwuY2xvdWRmbGFyZS5jb21cXC9yZXBvcnRcXC92ND9zPVNobjJKanFTM21DMXJ4elZKSXY2R1VLNE9VQ0lPRVgyV05HMDF6OXh0UCUyQk9qNmlJc25uSWVoaEE1Q3RCV0paaVl4cGkySXNBSlE3bDdEMFcxTjJzYTBQSXVKQjE3MnRnNTIlMkJ1VG5GZHdMMUJqT29JYmVNViUyQlJUN0d0QjM5Y1RBV3R1bWdrQUhCNmt5c2NyajdDN0U5bVkyY09nbm02MnQlMkJ0byUzRFwifV0sXCJncm91cFwiOlwiY2YtbmVsXCIsXCJtYXhfYWdlXCI6NjA0ODAwfSJ9LCB7Im5hbWUiOiAic2VydmVyIiwgInZhbHVlIjogImNsb3VkZmxhcmUifSwgeyJuYW1lIjogInNldC1jb29raWUiLCAidmFsdWUiOiAiSlNFU1NJT05JRD0yNTdEOURDOTIwNDUyQTREOTMzQjhBM0NEQTlCNkJEMzsgRG9tYWluPS5zdXBwbHljaGFpbmNhbmFkYS5jb207IFBhdGg9LzsgU2VjdXJlOyBIdHRwT25seTsgSHR0cE9ubHk7IFNlY3VyZTsgU2FtZVNpdGU9Tm9uZSJ9LCB7Im5hbWUiOiAic3RyaWN0LXRyYW5zcG9ydC1zZWN1cml0eSIsICJ2YWx1ZSI6ICJtYXgtYWdlPTYzMDcyMDAwOyBpbmNsdWRlU3ViZG9tYWluczsgcHJlbG9hZCJ9XSwgImNvbnRlbnQiOiB7InNpemUiOiAzMTQyNSwgIm1pbWVUeXBlIjogInRleHQvaHRtbDtjaGFyc2V0PXV0Zi04IiwgImNvbXByZXNzaW9uIjogMjI5NjYsICJ0ZXh0IjogIlxyXG5cclxuXHJcblxyXG5cclxuXHJcblxyXG5cclxuXHJcblxyXG5cclxuXHJcblxyXG5cclxuXHJcblxyXG5cclxuXHJcbjwhRE9DVFlQRSBodG1sIFBVQkxJQyBcIi0vL1czQy8vRFREIFhIVE1MIDEuMCBUcmFuc2l0aW9uYWwvL0VOXCIgXCJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDEvRFREL3hodG1sMS10cmFuc2l0aW9uYWwuZHRkXCI+XHJcbjxodG1sIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbFwiPlxyXG48aGVhZD5cclxuXHQ8bWV0YSBjb250ZW50PVwidGV4dC9odG1sOyBjaGFyc2V0PVVURi04XCIgaHR0cC1lcXVpdj1cIkNvbnRlbnQtVHlwZVwiIC8+XHJcblx0PG1ldGEgbmFtZT1cInZpZXdwb3J0XCIgY29udGVudD1cIndpZHRoPWRldmljZS13aWR0aCwgbWluaW11bS1zY2FsZT0xLjAsIG1heGltdW0tc2NhbGU9MS4wIHVzZXItc2NhbGFibGU9MFwiIC8+XHJcblx0PHRpdGxlPlxyXG5cdFxyXG5cdFxyXG5cdFx0U3VwcGx5IENoYWluIENhbmFkYSBQb3J0YWxcclxuXHRcclxuXHQ8L3RpdGxlPlxyXG5cclxuXHQ8c2NyaXB0IHR5cGU9XCJ0ZXh0L2phdmFzY3JpcHRcIiBzcmM9XCIuLi9jb21tb24vc2NyaXB0cy9jYWxlbmRhci9tb290b29scy5qc1wiPjwvc2NyaXB0PlxyXG5cdDxzY3JpcHQgdHlwZT1cInRleHQvamF2YXNjcmlwdFwiIHNyYz1cIi4uL2NvbW1vbi9zY3JpcHRzL2NhbGVuZGFyL2NhbGVuZGFyLmpzXCI+PC9zY3JpcHQ+XHJcblx0PHNjcmlwdCB0eXBlPVwidGV4dC9qYXZhc2NyaXB0XCIgc3JjPVwiLi4vY29tbW9uL3NjcmlwdHMvZXh0cmEuanNcIj48L3NjcmlwdD5cclxuXHRcclxuXHQ8c2NyaXB0IHNyYz1cIi4uL2NtczIvanMvanF1ZXJ5LTIuMS40LmpzXCI+PC9zY3JpcHQ+IDwhLS0gSnF1ZXJ5IExpYnJhcnkgQ2FsbCAtLT5cclxuXHQ8c2NyaXB0IHNyYz1cIi4uL2NtczIvanMvYm9vdHN0cmFwLmpzXCI+PC9zY3JpcHQ+IDwhLS0gVUkgLS0+XHJcblx0XHJcblx0PGxpbmsgcmVsPVwic3R5bGVzaGVldFwiIGhyZWY9XCIvL2NvZGUuanF1ZXJ5LmNvbS91aS8xLjExLjQvdGhlbWVzL3Ntb290aG5lc3MvanF1ZXJ5LXVpLmNzc1wiLz5cclxuXHQ8bGluayByZWw9XCJzdHlsZXNoZWV0XCIgaHJlZj1cIi4uL2NvbW1vbi9ib290c3RyYXAvY3NzL2Jvb3RzdHJhcC5jc3NcIiB0eXBlPVwidGV4dC9jc3NcIiBtZWRpYT1cImFsbFwiICAvPlxyXG5cdFxyXG5cdDxsaW5rIHJlbD1cInN0eWxlc2hlZXRcIiB0eXBlPVwidGV4dC9jc3NcIiBocmVmPVwiLi4vY29tbW9uL2Nzcy9jYWxlbmRhci5jc3NcIiAvPlxyXG5cdDxsaW5rIHJlbD1cInN0eWxlc2hlZXRcIiB0eXBlPVwidGV4dC9jc3NcIiBocmVmPVwiLi4vY21zMi9jc3MvbWVtYmVyX3BvcnRhbC5jc3NcIiAvPlxyXG5cdFxyXG5cdDwhLS0gPGxpbmsgcmVsPVwiaW1wb3J0XCIgaHJlZj1cIi4uL2NtczIvZGlzcGxheS9leHRlcm5hbF9zb3VyY2Uvc2VsZWN0LWxpc3QuanNwXCIgLz4gLS0+XHJcblx0PHNjcmlwdCB0eXBlPVwidGV4dC9qYXZhc2NyaXB0XCIgc3JjPVwiLi4vY29tbW9uL2Jvb3RzdHJhcC9qcy9ib290c3RyYXAtc2VsZWN0Lm1pbi5qc1wiPjwvc2NyaXB0PlxyXG5cdDwhLS0gPHNjcmlwdCB0eXBlPVwidGV4dC9qYXZhc2NyaXB0XCIgc3JjPVwiLi4vY29tbW9uL2Jvb3RzdHJhcC9qcy9ib290c3RyYXBfZHJvcGRvd24ubWluLmpzXCI+PC9zY3JpcHQ+IC0tPlxyXG5cdDxsaW5rIHJlbD1cInN0eWxlc2hlZXRcIiBocmVmPVwiLi4vY29tbW9uL2Jvb3RzdHJhcC9jc3MvYm9vdHN0cmFwLXNlbGVjdC5taW4uY3NzXCIgIHR5cGU9XCJ0ZXh0L2Nzc1wiIG1lZGlhPVwic2NyZWVuXCIgLz5cclxuXHQ8bGluayByZWw9XCJzdHlsZXNoZWV0XCIgaHJlZj1cIi4uL2NvbW1vbi9ib290c3RyYXAvY3NzL2Jvb3RzdHJhcC10aGVtZS5taW4uY3NzXCIgIHR5cGU9XCJ0ZXh0L2Nzc1wiIG1lZGlhPVwic2NyZWVuXCIgLz5cclxuXHQgXHJcblx0PHNjcmlwdCBzcmM9XCIuLi9jbXMyL2pzL3NjbWEvc2NtYS10ZW1wbGF0ZS5qcz92PTEuMy4xXCIgdHlwZT1cInRleHQvamF2YXNjcmlwdFwiPjwvc2NyaXB0PlxyXG5cdFxyXG5cdDxzY3JpcHQgdHlwZT1cInRleHQvamF2YXNjcmlwdFwiIHNyYz1cImh0dHBzOi8vd3d3LmdzdGF0aWMuY29tL2NoYXJ0cy9sb2FkZXIuanNcIj48L3NjcmlwdD5cclxuXHRcclxuXHQ8c2NyaXB0IGxhbmd1YWdlPVwiSmF2YVNjcmlwdFwiIHR5cGU9XCJ0ZXh0L2phdmFzY3JpcHRcIj5cclxuXHRcdHZhciAkanFtb2RhbCA9IGpRdWVyeTtcclxuXHRcdHZhciB1cmxQcmVmaXggPSBcIm1wb3dlclwiO1xyXG5cdFx0dmFyIGlzTG9jYWxUZXN0ID0gZmFsc2U7XHJcblx0XHRpZiAod2luZG93LmxvY2F0aW9uLmhyZWYuaW5jbHVkZXMoXCJsb2NhbGhvc3RcIikpIHtcclxuXHRcdFx0aXNMb2NhbFRlc3QgPSB0cnVlO1xyXG5cdFx0XHR1cmxQcmVmaXggPSBcIm1wb3dlcjhQTUFDXCI7XHJcblx0XHR9XHJcblx0XHJcblx0ICBmdW5jdGlvbiBjaGVja0NSKGV2dCkge1xyXG5cdCAgICB2YXIgZXZ0ICA9IChldnQpID8gZXZ0IDogKChldmVudCkgPyBldmVudCA6IG51bGwpO1xyXG5cdCAgICB2YXIgbm9kZSA9IChldnQudGFyZ2V0KSA/IGV2dC50YXJnZXQgOiAoKGV2dC5zcmNFbGVtZW50KSA/IGV2dC5zcmNFbGVtZW50IDogbnVsbCk7XHJcblx0ICAgIGlmICgoZXZ0LmtleUNvZGUgPT0gMTMpICYmIChub2RlLnR5cGU9PVwidGV4dFwiKSkge3JldHVybiBmYWxzZTt9XHJcblx0ICB9XHJcblx0ICBcclxuXHQgIGZ1bmN0aW9uIGluc2VydFBhcmFtKGtleSwgdmFsdWUpXHJcblx0XHR7XHJcblx0XHQgICAga2V5ID0gZXNjYXBlKGtleSk7IHZhbHVlID0gZXNjYXBlKHZhbHVlKTtcclxuXHJcblx0XHQgICAgdmFyIGt2cCA9IGRvY3VtZW50LmxvY2F0aW9uLnNlYXJjaC5zdWJzdHIoMSkuc3BsaXQoJyYnKTtcclxuXHJcblx0XHQgICAgdmFyIGk9a3ZwLmxlbmd0aDsgdmFyIHg7IHdoaWxlKGktLSkgXHJcblx0XHQgICAge1xyXG5cdFx0ICAgICAgICB4ID0ga3ZwW2ldLnNwbGl0KCc9Jyk7XHJcblxyXG5cdFx0ICAgICAgICBpZiAoeFswXT09a2V5KVxyXG5cdFx0ICAgICAgICB7XHJcblx0XHQgICAgICAgICAgICAgICAgeFsxXSA9IHZhbHVlO1xyXG5cdFx0ICAgICAgICAgICAgICAgIGt2cFtpXSA9IHguam9pbignPScpO1xyXG5cdFx0ICAgICAgICAgICAgICAgIGJyZWFrO1xyXG5cdFx0ICAgICAgICB9XHJcblx0XHQgICAgfVxyXG5cclxuXHRcdCAgICBpZihpPDApIHtcclxuXHRcdCAgICBcdGlmIChrdnAubGVuZ3RoID09IDEgJiYga3ZwWzBdID09IFwiXCIpe1xyXG5cdFx0ICAgIFx0XHRrdnBbMF0gPSBba2V5LHZhbHVlXS5qb2luKCc9Jyk7XHRcclxuXHRcdCAgICBcdH1cclxuXHRcdCAgICBcdGVsc2V7XHJcblx0XHQgICAgXHRcdGt2cFtrdnAubGVuZ3RoXSA9IFtrZXksdmFsdWVdLmpvaW4oJz0nKTtcdFxyXG5cdFx0ICAgIFx0fVxyXG5cdFx0ICAgIFx0XHJcblx0XHQgICAgfVxyXG5cclxuXHRcdCAgICB2YXIgb3V0cHV0ID0gIGt2cC5qb2luKCcmJyk7XHJcblx0XHQgICAgcmV0dXJuIG91dHB1dDtcclxuXHRcdH1cclxuXHRcdFxyXG5cdFx0dmFyIGxvY2FsZV9mciA9IGRvY3VtZW50LmxvY2F0aW9uLnBhdGhuYW1lICsgXCI/XCIgKyBpbnNlcnRQYXJhbShcInJlcXVlc3RfbG9jYWxlXCIsIFwiZnJcIik7XHJcblx0XHR2YXIgbG9jYWxlX2VuID0gZG9jdW1lbnQubG9jYXRpb24ucGF0aG5hbWUgKyBcIj9cIiArIGluc2VydFBhcmFtKFwicmVxdWVzdF9sb2NhbGVcIiwgXCJlblwiKTtcclxuXHJcblx0IFx0ZG9jdW1lbnQub25rZXlwcmVzcyA9IGNoZWNrQ1I7XHJcblx0IFx0XHJcblx0IFx0dmFyIGxhbmdDaGsgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShcInNjbWEtbGFuZy1zZXR0aW5nXCIpO1xyXG5cdCBcdGlmICh3aW5kb3cubG9jYXRpb24uaHJlZi5pbmNsdWRlcyhcIi9lbi9cIikpIHtsb2NhbFN0b3JhZ2Uuc2V0SXRlbShcInNjbWEtbGFuZy1zZXR0aW5nXCIsIFwiZW5cIik7fVxyXG5cdCBcdGVsc2UgaWYgKHdpbmRvdy5sb2NhdGlvbi5ocmVmLmluY2x1ZGVzKFwiL2ZyL1wiKSkge2xvY2FsU3RvcmFnZS5zZXRJdGVtKFwic2NtYS1sYW5nLXNldHRpbmdcIiwgXCJmclwiKTt9XHJcblx0IFx0ZWxzZSB7bG9jYWxTdG9yYWdlLnNldEl0ZW0oXCJzY21hLWxhbmctc2V0dGluZ1wiLCBcImVuXCIpO31cclxuXHQgXHQvKiBpZiAobGFuZ0NoayA9PSBudWxsKSB7XHJcblx0IFx0XHRsb2NhbFN0b3JhZ2Uuc2V0SXRlbShcInNjbWEtbGFuZy1zZXR0aW5nXCIsIFwiZW5cIik7XHJcblx0IFx0fSAqL1xyXG5cdCBcdFxyXG5cdCBcdHZhciBpc01vYmlsZURldmljZSA9IGZhbHNlO1x0IFx0XHJcblx0IFx0aWYgKCgod2luZG93LmlubmVyV2lkdGggPiAwKSA/IHdpbmRvdy5pbm5lcldpZHRoIDogc2NyZWVuLndpZHRoKSA8PSA3NjgpIHtcclxuXHQgXHRcdGlzTW9iaWxlRGV2aWNlID0gdHJ1ZTtcclxuXHQgXHR9IGVsc2Uge1xyXG5cdCBcdFx0aXNNb2JpbGVEZXZpY2UgPSBmYWxzZTtcclxuXHQgXHR9XHJcblx0IFx0XHJcblx0IFx0bG9jYWxTdG9yYWdlLnNldEl0ZW0oXCJzY21hLWVudGl0eS1jb21wLWNybVwiLCAnJyk7XHJcblx0IFx0bG9jYWxTdG9yYWdlLnNldEl0ZW0oXCJzY21hLWVudGl0eS1jb21wLWVtYWlsXCIsICcnKTtcclxuXHQ8L3NjcmlwdD5cclxuXHRcclxuXHJcblxyXG5cclxuXHJcblxyXG5cclxuXHJcblxyXG5cclxuXHJcblxyXG5cclxuXHJcblxyXG5cclxuXHJcblxyXG5cclxuXHRcclxuXHRcclxuPCEtLSAqKioqKipNT0RBTCBMSVNUKioqKioqIC0tPiBcclxuPHNjcmlwdCB0eXBlPVwidGV4dC9qYXZhc2NyaXB0XCIgc3JjPVwiLi4vY21zMi9qcy9ib290c3RyYXAtbW9kYWwuanNcIj48L3NjcmlwdD5cclxuXHJcblxyXG48c2NyaXB0IHR5cGU9XCJ0ZXh0L2phdmFzY3JpcHRcIj4gXHRcclxuXHQkKFwiLmlzTW9kYWxcIikuY2xpY2soZnVuY3Rpb24oZSl7XHJcbiAgICBcdGlmIChlLnRhcmdldC5ocmVmLmluY2x1ZGVzKFwiJG1vZGFsLlwiKSkge1xyXG4gICAgXHRcdHZhciBtb2RhbE5hbWUgPSBcIiNcIiArIGUudGFyZ2V0LmhyZWYuc3BsaXQoXCIkbW9kYWwuXCIpWzFdLnJlcGxhY2UoXCIgXCIsIFwiX1wiKTtcclxuICAgIFx0XHQkanFtb2RhbChtb2RhbE5hbWUpLm1vZGFsKFwic2hvd1wiKTtcclxuICAgIFx0XHRyZXR1cm4gZmFsc2U7XHJcbiAgICBcdH1cdCAgICBcdCAgICAgICAgXHJcblx0fSlcclxuIDwvc2NyaXB0PlxyXG4gXHJcbiA8IS0tIGhhcmQgY29kZWQgbW9kYWwgbGlzdCAtLT5cclxuIDxkaXYgaWQ9XCJtZW1EaXJNb2RhbFwiIGNsYXNzPVwibW9kYWwgaGlkZSBmYWRlXCIgdGFiaW5kZXg9XCItMVwiIHJvbGU9XCJkaWFsb2dcIiBhcmlhLWxhYmVsbGVkYnk9XCJtZW1EaXJNb2RhbExhYmVsXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCIgc3R5bGU9XCJkaXNwbGF5OiBub25lO1wiPlxyXG5cdDxkaXYgY2xhc3M9XCJtb2RhbC1oZWFkZXJcIj5cclxuXHRcdDxoMyBpZD1cIm1lbURpck1vZGFsTGFiZWxcIj5cclxuXHRcdFx0TWVtYmVyIERpcmVjdG9yeVxyXG5cdFx0XHRcclxuXHRcdDwvaDM+XHJcblx0PC9kaXY+XHJcblx0PGRpdiBjbGFzcz1cIm1vZGFsLWJvZHlcIiBzdHlsZT1cIm1heC1oZWlnaHQ6IDY1dmg7XCI+XHJcblx0XHRcdDxwPjxiPlN1cHBseSBDaGFpbiBDYW5hZGEgT25saW5lIE1lbWJlciBEaXJlY3RvcnktVGVybXMgYW5kIENvbmRpdGlvbnM8L2I+PC9wPlxyXG5cdFx0XHRBY2Nlc3MgYW5kIHVzZSBvZiB0aGUgU3VwcGx5IENoYWluIENhbmFkYSBPbmxpbmUgTWVtYmVyIERpcmVjdG9yeSBmcm9tIHRoaXMgd2Vic2l0ZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBsaXN0ZWQgYmVsb3cuIFRoZSBTdXBwbHkgQ2hhaW4gQ2FuYWRhIHJlc2VydmVzIHRoZSByaWdodCB0byBjaGFuZ2UgdGVybXMgYW5kIGNvbmRpdGlvbnMgd2l0aG91dCBub3RpY2UuPGJyIC8+PGJyIC8+XHJcblx0XHRcdElmIHlvdSByZWFkIGFuZCBhZ3JlZSB0byB0aGVzZSB0ZXJtcyBhbmQgY29uZGl0aW9ucywgY2xpY2sgdGhlIFwiSSBBR1JFRVwiIGJ1dHRvbiBiZWxvdy4gSWYgeW91IGRpc2FncmVlIHdpdGggdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zLCBjbGljayB0aGUgXCJJIERFQ0xJTkVcIiBidXR0b24gYmVsb3cuPGJyIC8+PGJyIC8+IFxyXG5cdFx0XHQxLiBZb3UgbWF5IHVzZSB0aGUgU3VwcGx5IENoYWluIENhbmFkYSBPbmxpbmUgTWVtYmVyIERpcmVjdG9yeSB0byBhc3Npc3QgeW91IGluIGZpbmRpbmcgYSBTdXBwbHkgQ2hhaW4gQ2FuYWRhIG1lbWJlci48YnIgLz48YnIgLz4gXHJcblx0XHRcdDIuIFlvdSBtYXkgbm90IHVzZSwgcmVwcm9kdWNlLCBwdWJsaXNoLCBkaXN0cmlidXRlIG9yIGNvbW11bmljYXRlIGFsbCBvciBhbnkgcGFydCBvZiB0aGUgU3VwcGx5IENoYWluIENhbmFkYSBPbmxpbmUgTWVtYmVyIERpcmVjdG9yeSBleGNlcHQgYXMgZXhwcmVzc2x5IHBlcm1pdHRlZCBieSBjbGF1c2UgMS4gSW4gcGFydGljdWxhciwgYnV0IHdpdGhvdXQgbGltaXRpbmcgdGhlIGZvcmVnb2luZywgeW91IG1heSBub3QgdXNlIHRoZSBTdXBwbHkgQ2hhaW4gQ2FuYWRhIE9ubGluZSBNZW1iZXIgRGlyZWN0b3J5IGZvcjo8YnIgLz5cclxuXHRcdFx0KGEpIGFueSBjb21tZXJjaWFsIHB1cnBvc2VzOzxiciAvPiBcclxuXHRcdFx0KGIpIGNyZWF0aW5nIG9yIGNvbXBpbGluZyBhbnkgZGlyZWN0b3J5IG9yIGFueSBtYWlsaW5nIGxpc3Q7PGJyIC8+IFxyXG5cdFx0XHQoYykgaW4gYSBjb21wdXRlciBzZXJ2aWNlLCBhcyBwYXJ0IG9mIGEgZmVlLWZvci1zZXJ2aWNlLCBjb3B5IHNlcnZpY2UsIG9yIGRvY3VtZW50IGRlbGl2ZXJ5IHNlcnZpY2U7PGJyIC8+IFxyXG5cdFx0XHQoZCkgZm9yIGFueSBvdGhlciBwdXJwb3NlIHRoYXQgd291bGQgYmUgc3VzY2VwdGlibGUgdG8gYmUgdXNlZCBhcyBhIHNvdXJjZSBvZiBvciBzdWJzdGl0dXRlIGZvciB0aGUgU3VwcGx5IENoYWluIENhbmFkYSBPbmxpbmUgTWVtYmVyIERpcmVjdG9yeS48YnIgLz5cclxuXHRcdFx0QW55IG1lbWJlciB3aG8gYWJ1c2VzIGFjY2VzcyB0byB0aGlzIERpcmVjdG9yeSBtYXkgaGF2ZSB0aGVpciBhY2Nlc3Mgc3VzcGVuZGVkLjxiciAvPjxiciAvPiBcclxuXHRcdFx0SWYgeW91IGhhdmUgcmVhZCBhbmQgYWdyZWUgdG8gdGhlc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMsIHBsZWFzZSBjbGljayB0aGUgXCJJIEFHUkVFXCIgYW5kIGNvbnRpbnVlIHRvIHRoZSBkaXJlY3RvcnkuPGJyIC8+PGJyIC8+IFxyXG5cdFx0XHRJZiB5b3UgZG8gbm90IGFncmVlIHRvIHRoZXNlIHRlcm1zIGFuZCBjb25kaXRpb25zLCBjbGljayBcIkkgREVDTElORVwiIGFuZCB5b3Ugd2lsbCBiZSByZWRpcmVjdGVkIHRvIHRoZSBtZW1iZXJzaGlwIGhvbWUgcGFnZS4gXHJcblx0XHRcclxuXHQ8L2Rpdj5cclxuXHQ8ZGl2IGNsYXNzPVwibW9kYWwtZm9vdGVyXCI+XHJcblx0XHQ8aW5wdXQgdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuXCIgdmFsdWU9XCJJIEFHUkVFXCIgZGF0YS1kaXNtaXNzPVwibW9kYWxcIiBhcmlhLWhpZGRlbj1cInRydWVcIiBvbmNsaWNrPVwicmV0dXJuIG1lbURpckFncmVlKCk7XCIgLz5cclxuXHRcdDxpbnB1dCB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG5cIiB2YWx1ZT1cIkkgREVDTElORVwiIGRhdGEtZGlzbWlzcz1cIm1vZGFsXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCIgb25jbGljaz1cInJldHVybiBtZW1EaXJEaXNhZ3JlZSgpO1wiIC8+XHJcblx0XHRcclxuXHQ8L2Rpdj5cclxuPC9kaXY+XHJcbjxkaXYgaWQ9XCJtZW1EaXJNb2RhbEZyXCIgY2xhc3M9XCJtb2RhbCBoaWRlIGZhZGVcIiB0YWJpbmRleD1cIi0xXCIgcm9sZT1cImRpYWxvZ1wiIGFyaWEtbGFiZWxsZWRieT1cIm1lbURpck1vZGFsTGFiZWxcIiBhcmlhLWhpZGRlbj1cInRydWVcIiBzdHlsZT1cImRpc3BsYXk6IG5vbmU7XCI+XHJcblx0PGRpdiBjbGFzcz1cIm1vZGFsLWhlYWRlclwiPlxyXG5cdFx0PGgzIGlkPVwibWVtRGlyTW9kYWxMYWJlbFwiPlxyXG5cdFx0XHRSXHUwMGU5cGVydG9pcmUgZGVzIG1lbWJyZXNcclxuXHRcdDwvaDM+XHJcblx0PC9kaXY+XHJcblx0PGRpdiBjbGFzcz1cIm1vZGFsLWJvZHlcIj5cclxuXHRcdFx0PHA+PGI+Q29uZGl0aW9ucyBkJ3V0aWxpc2F0aW9uIGRlIGwnYW5udWFpcmUgZW4gbGlnbmUgZGVzIG1lbWJyZXMgZGUgQ2hhXHUwMGVlbmUgZCdBcHByb3Zpc2lvbm5lbWVudCBDYW5hZGE8L2I+PC9wPlxyXG5cdFx0XHRMJ2FubnVhaXJlIGRlcyBtZW1icmVzIGRlIENoYVx1MDBlZW5lIGQnQXBwcm92aXNpb25uZW1lbnQgQ2FuYWRhIHBlcm1ldCBcdTAwZTAgY2V1eC1jaSBkZSByZWNoZXJjaGVyIGQnYXV0cmVzIG1lbWJyZXMgZXQgZCdlbnRyZXIgZW4gcmVsYXRpb24gYXZlYyBldXguIEwnYWNjXHUwMGU4cyBldCBsJ3V0aWxpc2F0aW9uIGRlIGwnYW5udWFpcmUgZW4gbGlnbmUgZGVzIG1lbWJyZXMgZGUgQ2hhXHUwMGVlbmUgZCdBcHByb3Zpc2lvbm5lbWVudCBDYW5hZGEgXHUwMGUwIHBhcnRpciBkZSBjZSBzaXRlIFdlYiBzb250IGFzc3VqZXR0aXMgYXV4IGNvbmRpdGlvbnMgZCd1dGlsaXNhdGlvbiBxdWkgZmlndXJlbnQgY2ktZGVzc291cy4gQ2hhXHUwMGVlbmUgZCdBcHByb3Zpc2lvbm5lbWVudCBDYW5hZGEgc2Ugclx1MDBlOXNlcnZlIGxlIGRyb2l0IGRlIG1vZGlmaWVyIGxlcyBjb25kaXRpb25zIGQndXRpbGlzYXRpb24gc2FucyBwclx1MDBlOWF2aXMuPGJyIC8+PGJyIC8+XHJcblx0XHRcdFNpIHZvdXMgbGlzZXogbGVzIHByXHUwMGU5c2VudGVzIGNvbmRpdGlvbnMgZCd1dGlsaXNhdGlvbiBldCBsZXMgYWNjZXB0ZXosIGNsaXF1ZXogc3VyIGxlIGJvdXRvbiBcdTAwYWIgSidBQ0NFUFRFIFx1MDBiYiBjaS1kZXNzb3VzLiBTaSB2b3VzIG4nXHUwMGVhdGVzIHBhcyBkJ2FjY29yZCBhdmVjIGxlcyBwclx1MDBlOXNlbnRlcyBjb25kaXRpb25zIGQndXRpbGlzYXRpb24sIGNsaXF1ZXogc3VyIGxlIGJvdXRvbiBcdTAwYWIgSkUgUkVGVVNFIFx1MDBiYiBjaS1kZXNzb3VzLjxiciAvPjxiciAvPlxyXG5cdFx0XHQxLiBWb3VzIHBvdXZleiB1dGlsaXNlciBsJ2FubnVhaXJlIGVuIGxpZ25lIGRlcyBtZW1icmVzIGRlIENoYVx1MDBlZW5lIGQnQXBwcm92aXNpb25uZW1lbnQgQ2FuYWRhIHBvdXIgdm91cyBhaWRlciBcdTAwZTAgdHJvdXZlciB1biBtZW1icmUgZGUgQ2hhXHUwMGVlbmUgZCdBcHByb3Zpc2lvbm5lbWVudCBDYW5hZGEuPGJyIC8+PGJyIC8+XHJcblx0XHRcdDIuIFZvdXMgbmUgcG91dmV6IHBhcyB1dGlsaXNlciwgcmVwcm9kdWlyZSwgcHVibGllciwgZGlmZnVzZXIgb3UgdHJhbnNtZXR0cmUgbGEgdG90YWxpdFx1MDBlOSBvdSB1bmUgcGFydGllIGRlIGwnYW5udWFpcmUgZW4gbGlnbmUgZGVzIG1lbWJyZXMgZGUgQ2hhXHUwMGVlbmUgZCdBcHByb3Zpc2lvbm5lbWVudCBDYW5hZGEsIHNhdWYgc2kgbGEgY2xhdXNlIDEgbGUgcGVybWV0IGV4cHJlc3NcdTAwZTltZW50LiBFbiBwYXJ0aWN1bGllciwgbWFpcyBzYW5zIGxpbWl0ZXIgY2UgcXVpIHByXHUwMGU5Y1x1MDBlOGRlLCB2b3VzIG5lIHBvdXZleiBwYXMgdXRpbGlzZXIgbCdhbm51YWlyZSBlbiBsaWduZSBkZXMgbWVtYnJlcyBkZSBDaGFcdTAwZWVuZSBkJ0FwcHJvdmlzaW9ubmVtZW50IENhbmFkYSBhdXggZmlucyBzdWl2YW50ZXMgOjxiciAvPlxyXG5cdFx0XHQoYSkgZGVzIGZpbnMgY29tbWVyY2lhbGVzOzxiciAvPiBcclxuXHRcdFx0KGIpIGxhIGNyXHUwMGU5YXRpb24gb3UgbGEgY29tcGlsYXRpb24gZCd1biBhbm51YWlyZSBvdSBkJ3VuZSBsaXN0ZSBkJ2Vudm9pOzxiciAvPiBcclxuXHRcdFx0KGMpIGRhbnMgdW4gc2VydmljZSBpbmZvcm1hdGlxdWUsIGRhbnMgbGUgY2FkcmUgZCd1biBzZXJ2aWNlIHBheVx1MDBlOSBcdTAwZTAgbCdhY3RlLCBkJ3VuIHNlcnZpY2UgZGUgY29waWUgb3UgZCd1biBzZXJ2aWNlIGRlIGxpdnJhaXNvbiBkZSBkb2N1bWVudHM7PGJyIC8+IFxyXG5cdFx0XHQoZCkgdG91dGUgYXV0cmUgZmluIHF1aSBwb3VycmFpdCBcdTAwZWF0cmUgdXRpbGlzXHUwMGU5ZSBjb21tZSBzb3VyY2Ugb3UgcmVtcGxhY2VtZW50IHBvdXIgbCdhbm51YWlyZSBlbiBsaWduZSBkZXMgbWVtYnJlcyBkZSBDaGFcdTAwZWVuZSBkJ0FwcHJvdmlzaW9ubmVtZW50IENhbmFkYS48YnIgLz5cclxuXHRcdFx0TCdhY2NcdTAwZThzIGRlIHRvdXQgbWVtYnJlIHF1aSBhYnVzZSBkZSBzb24gYWNjXHUwMGU4cyBhdSBwclx1MDBlOXNlbnQgYW5udWFpcmUgcG91cnJhaXQgXHUwMGVhdHJlIHN1c3BlbmR1LjxiciAvPjxiciAvPlxyXG5cdFx0XHRTaSB2b3VzIGF2ZXogbHUgbGVzIHByXHUwMGU5c2VudGVzIGNvbmRpdGlvbnMgZCd1dGlsaXNhdGlvbiBldCBsZXMgYWNjZXB0ZXosIHZldWlsbGV6IGNsaXF1ZXIgc3VyIGxlIGJvdXRvbiBcdTAwYWIgSidBQ0NFUFRFIFx1MDBiYiBjaS1kZXNzb3VzIGV0IHZvdXMgcmVuZHJlIFx1MDBlMCBsJ2FubnVhaXJlLjxiciAvPjxiciAvPlxyXG5cdFx0XHRTaSB2b3VzIG4nYWNjZXB0ZXogcGFzIGxlcyBwclx1MDBlOXNlbnRlcyBjb25kaXRpb25zIGQndXRpbGlzYXRpb24sIGNsaXF1ZXogc3VyIGxlIGJvdXRvbiBcdTAwYWIgSidBQ0NFUFRFIFx1MDBiYiBjaS1kZXNzb3VzIGV0IHZvdXMgc2VyZXogcmVudm95XHUwMGU5IFx1MDBlMCBsYSBwYWdlIGQnYWNjdWVpbCBkZXMgbWVtYnJlcy5cclxuXHQ8L2Rpdj5cclxuXHQ8ZGl2IGNsYXNzPVwibW9kYWwtZm9vdGVyXCI+XHJcblx0XHQ8aW5wdXQgdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuXCIgdmFsdWU9XCJKJ0FDQ0VQVEVcIiBkYXRhLWRpc21pc3M9XCJtb2RhbFwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiIG9uY2xpY2s9XCJyZXR1cm4gbWVtRGlyQWdyZWUoKTtcIiAvPlxyXG5cdFx0PGlucHV0IHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0blwiIHZhbHVlPVwiSkUgUkVGVVNFXCIgZGF0YS1kaXNtaXNzPVwibW9kYWxcIiBhcmlhLWhpZGRlbj1cInRydWVcIiBvbmNsaWNrPVwicmV0dXJuIG1lbURpckRpc2FncmVlKCk7XCIgLz5cclxuXHQ8L2Rpdj5cclxuPC9kaXY+XHJcblxyXG5cclxuPGRpdiBpZD1cIm1lbURpckRlY2xpbmVkTW9kYWxcIiBjbGFzcz1cIm1vZGFsIGhpZGUgZmFkZVwiIHRhYmluZGV4PVwiLTFcIiByb2xlPVwiZGlhbG9nXCIgYXJpYS1sYWJlbGxlZGJ5PVwibWVtRGlyRGVjbGluZWRNb2RhbExhYmVsXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCIgc3R5bGU9XCJkaXNwbGF5OiBub25lO1wiPlxyXG5cdDxkaXYgY2xhc3M9XCJtb2RhbC1oZWFkZXJcIj5cclxuXHRcdDxoMyBpZD1cIm1lbURpckRlY2xpbmVkTW9kYWxMYWJlbFwiPlxyXG5cdFx0XHRNZW1iZXIgRGlyZWN0b3J5XHJcblx0XHRcdFxyXG5cdFx0PC9oMz5cclxuXHQ8L2Rpdj5cclxuXHQ8ZGl2IGNsYXNzPVwibW9kYWwtYm9keVwiPlxyXG5cdFx0SXQgYXBwZWFycyB0aGF0IHlvdSBoYXZlIGRlY2xpbmVkIHRvIGFjY2VwdCB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgZm9yIHRoZSB1c2FnZSBvZiB0aGUgbWVtYmVyIGRpcmVjdG9yeS4gUGxlYXNlIGNsaWNrIE9LIHRvIGNsb3NlIHRoaXMgbWVzc2FnZS5cclxuXHRcdFxyXG5cdDwvZGl2PlxyXG5cdDxkaXYgY2xhc3M9XCJtb2RhbC1mb290ZXJcIj5cdFxyXG5cdFx0PGlucHV0IHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0blwiIHZhbHVlPVwiT0tcIiBkYXRhLWRpc21pc3M9XCJtb2RhbFwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiIC8+XHJcblx0XHRcclxuXHQ8L2Rpdj5cclxuPC9kaXY+XHJcblxyXG48ZGl2IGlkPVwibWVtRGlyRGVjbGluZWRNb2RhbEZyXCIgY2xhc3M9XCJtb2RhbCBoaWRlIGZhZGVcIiB0YWJpbmRleD1cIi0xXCIgcm9sZT1cImRpYWxvZ1wiIGFyaWEtbGFiZWxsZWRieT1cIm1lbURpckRlY2xpbmVkTW9kYWxMYWJlbFwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiIHN0eWxlPVwiZGlzcGxheTogbm9uZTtcIj5cclxuXHQ8ZGl2IGNsYXNzPVwibW9kYWwtaGVhZGVyXCI+XHJcblx0XHQ8aDMgaWQ9XCJtZW1EaXJEZWNsaW5lZE1vZGFsTGFiZWxcIj5cclxuXHRcdFx0Ulx1MDBlOXBlcnRvaXJlIGRlcyBtZW1icmVzXHJcblx0XHQ8L2gzPlxyXG5cdDwvZGl2PlxyXG5cdDxkaXYgY2xhc3M9XCJtb2RhbC1ib2R5XCI+XHJcblx0XHRcdElsIHNlbWJsZSBxdWUgdm91cyBhdmV6IHJlZnVzXHUwMGU5IGQnYWNjZXB0ZXIgbGVzIG1vZGFsaXRcdTAwZTlzIGV0IGxlcyBjb25kaXRpb25zIGQndXRpbGlzYXRpb24gcG91ciBsJ2FubnVhaXJlIGRlcyBtZW1icmVzLiBDbGlxdWV6IHN1ciBPSyBwb3VyIGZlcm1lciBjZSBtZXNzYWdlLlxyXG5cdDwvZGl2PlxyXG5cdDxkaXYgY2xhc3M9XCJtb2RhbC1mb290ZXJcIj5cdFxyXG5cdFx0PGlucHV0IHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0blwiIHZhbHVlPVwiT0tcIiBkYXRhLWRpc21pc3M9XCJtb2RhbFwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiIC8+XHJcblx0PC9kaXY+XHJcbjwvZGl2PlxyXG5cclxuPGRpdiBpZD1cInNjbWFMZWFybmluZ01vZGFsXCIgY2xhc3M9XCJtb2RhbCBoaWRlIGZhZGVcIiB0YWJpbmRleD1cIi0xXCIgcm9sZT1cImRpYWxvZ1wiIGFyaWEtbGFiZWxsZWRieT1cInNjbWFMZWFybmluZ01vZGFsTGFiZWxcIiBhcmlhLWhpZGRlbj1cInRydWVcIiBzdHlsZT1cImRpc3BsYXk6IG5vbmU7XCI+XHJcblx0PGRpdiBjbGFzcz1cIm1vZGFsLWhlYWRlclwiPlxyXG5cdFx0PGgzIGlkPVwic2NtYUxlYXJuaW5nTW9kYWxMYWJlbFwiPk9ubGluZSBMZWFybmluZzwvaDM+XHJcblx0PC9kaXY+XHJcblx0PGRpdiBjbGFzcz1cIm1vZGFsLWJvZHlcIj5cclxuXHRcdDxwPldlbGNvbWUgdG8gU3VwcGx5IENoYWluIENhbmFkYSdzIG9ubGluZSBsZWFybmluZyBTdXBwbHkgQ2hhaW4gTWFuYWdlbWVudCBQcm9mZXNzaW9uYWwgKFNDTVApIHByb2dyYW0uIEluIG9yZGVyIHRvIGVucm9sbCBpbiBhbnkgb2YgdGhlIHByb2dyYW0gbW9kdWxlcywgeW91IG11c3QgZmlyc3QgYmUgYWRtaXR0ZWQgdG8gdGhlIFNDTVAgcHJvZ3JhbS4gSWYgeW91IG1lZXQgdGhlIHF1YWxpZnlpbmcgPGEgaHJlZj1cImh0dHA6Ly9zY21hLmNvbS9lbi9lZHVjYXRpb24tYWNjcmVkaXRhdGlvbi9zY21wLWRlc2lnbmF0aW9uLXByb2dyYW0jcHJlLXJlcXVpc2l0ZXMtYW5kLWFkbWlzc2lvblwiIHRhcmdldD1cIl9ibGFua1wiPnByZS1yZXF1aXNpdGVzPC9hPiwgcGxlYXNlIGNvbnRhY3QgeW91ciA8YSBocmVmPVwiaHR0cDovL3NjbWEuY29tL2VuL2Fib3V0LXNjbWEvam9pbi1zY21hL3NjbWEtaW5zdGl0dXRlc1wiIHRhcmdldD1cIl9ibGFua1wiPlByb3ZpbmNpYWwgSW5zdGl0dXRlPC9hPiBmb3IgcHJvZ3JhbSBhZG1pc3Npb24uPC9wPlxyXG5cdDwvZGl2PlxyXG5cdDxkaXYgY2xhc3M9XCJtb2RhbC1mb290ZXJcIj5cclxuXHRcdDxpbnB1dCB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG5cIiB2YWx1ZT1cIkNsb3NlXCIgZGF0YS1kaXNtaXNzPVwibW9kYWxcIiBhcmlhLWhpZGRlbj1cInRydWVcIiAvPlxyXG5cdFx0XHJcblx0PC9kaXY+XHJcbjwvZGl2PlxyXG5cclxuPGRpdiBpZD1cInNjbWFMZWFybmluZ01vZGFsLWZyXCIgY2xhc3M9XCJtb2RhbCBoaWRlIGZhZGVcIiB0YWJpbmRleD1cIi0xXCIgcm9sZT1cImRpYWxvZ1wiIGFyaWEtbGFiZWxsZWRieT1cInNjbWFMZWFybmluZ01vZGFsTGFiZWxcIiBhcmlhLWhpZGRlbj1cInRydWVcIiBzdHlsZT1cImRpc3BsYXk6IG5vbmU7XCI+XHJcblx0PGRpdiBjbGFzcz1cIm1vZGFsLWhlYWRlclwiPlxyXG5cdFx0PGgzIGlkPVwic2NtYUxlYXJuaW5nTW9kYWxMYWJlbFwiPkFwcHJlbnRpc3NhZ2UgZW4gbGlnbmU8L2gzPlxyXG5cdDwvZGl2PlxyXG5cdDxkaXYgY2xhc3M9XCJtb2RhbC1ib2R5XCI+XHJcblx0XHQ8cD5CaWVudmVudWUgYXUgcHJvZ3JhbW1lIGRlIHByb2Zlc3Npb25uZWwgZGUgbGEgZ2VzdGlvbiBkZSBsYSBjaGFpbmUgZCdhcHByb3Zpc2lvbm5lbWVudCAocC5nLmMuYS4pIGVuIGxpZ25lLiBQb3VyIHZvdXMgaW5zY3JpcmUgXHUwMGUwIGwndW4gZGVzIG1vZHVsZXMgZHUgcHJvZ3JhbW1lLCB2b3VzIGRldmV6IGQnYWJvcmQgXHUwMGVhdHJlIGFkbWlzIGF1IHByb2dyYW1tZSBwLmcuYy5hLiBTaSB2b3VzIHJcdTAwZTlwb25kZXogYXV4IGNvbmRpdGlvbnMgPGEgaHJlZj1cImh0dHA6Ly9zY21hLmNvbS9mci9mb3JtYXRpb24tZXQtYWNjcmVkaXRhdGlvbi1mci9wLWctYy1hI2NvbmRpdGlvbnNcIiB0YXJnZXQ9XCJfYmxhbmtcIj5wclx1MDBlOWFsYWJsZXMgcmVxdWlzZXM8L2E+LCB2ZXVpbGxleiBjb21tdW5pcXVlciBhdmVjIHZvdHJlIDxhIGhyZWY9XCJodHRwOi8vc2NtYS5jb20vZnIvYS1wcm9wb3MvYWRoZXNpb24tYS1sLWFnY2EvY29ycG9yYXRpb25zLWRlLWwtYWdjYVwiIHRhcmdldD1cIl9ibGFua1wiPmluc3RpdHV0IHByb3ZpbmNpYWw8L2E+IHBvdXIgbCdhZG1pc3Npb24gYXUgcHJvZ3JhbW1lLjwvcD5cclxuXHQ8L2Rpdj5cclxuXHQ8ZGl2IGNsYXNzPVwibW9kYWwtZm9vdGVyXCI+XHJcblx0XHQ8aW5wdXQgdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuXCIgdmFsdWU9XCJDbG9zZVwiIGRhdGEtZGlzbWlzcz1cIm1vZGFsXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCIgLz5cclxuXHRcdFxyXG5cdDwvZGl2PlxyXG48L2Rpdj5cclxuXHJcblxyXG5cclxuPGRpdiBpZD1cImFsZXJ0LWZpbGwtb3V0XCIgY2xhc3M9XCJtb2RhbCBoaWRlIGZhZGVcIj5cclxuICA8ZGl2IGNsYXNzPVwibW9kYWwtYm9keVwiPlxyXG4gICAgUGxlYXNlIGZpbGwgb3V0IGFsbCByZXF1aXJlZCBmaWVsZHNcclxuICA8L2Rpdj5cclxuICA8ZGl2IGNsYXNzPVwibW9kYWwtZm9vdGVyXCI+XHJcbiAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBkYXRhLWRpc21pc3M9XCJtb2RhbFwiIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5XCIgZGF0YS12YWx1ZT1cIjFcIj5PSzwvYnV0dG9uPlxyXG4gIDwvZGl2PlxyXG48L2Rpdj5cclxuXHJcbjxkaXYgaWQ9XCJhbGVydC1jcGQtZmlsbGVkXCIgY2xhc3M9XCJtb2RhbCBoaWRlIGZhZGVcIj5cclxuICA8ZGl2IGNsYXNzPVwibW9kYWwtYm9keVwiPlxyXG4gICAgQ1BEIEFjdGl2aXR5IHN1Ym1pdHRlZC5cclxuICA8L2Rpdj5cclxuICA8ZGl2IGNsYXNzPVwibW9kYWwtZm9vdGVyXCI+XHJcbiAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBkYXRhLWRpc21pc3M9XCJtb2RhbFwiIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5XCIgZGF0YS12YWx1ZT1cIjFcIiBvbmNsaWNrPVwibG9jYXRpb24ucmVsb2FkKCk7XCI+T0s8L2J1dHRvbj5cclxuICA8L2Rpdj5cclxuPC9kaXY+XHJcblxyXG48ZGl2IGlkPVwiYWxlcnQtZmFpbFwiIGNsYXNzPVwibW9kYWwgaGlkZSBmYWRlXCI+XHJcbiAgPGRpdiBjbGFzcz1cIm1vZGFsLWJvZHlcIj5cclxuICAgIEZhaWxlZCB0byBpbnNlcnQgZGF0YVxyXG4gIDwvZGl2PlxyXG4gIDxkaXYgY2xhc3M9XCJtb2RhbC1mb290ZXJcIj5cclxuICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGRhdGEtZGlzbWlzcz1cIm1vZGFsXCIgY2xhc3M9XCJidG4gYnRuLXByaW1hcnlcIiBkYXRhLXZhbHVlPVwiMVwiPk9LPC9idXR0b24+XHJcbiAgPC9kaXY+XHJcbjwvZGl2PlxyXG5cclxuPGRpdiBpZD1cImFsZXJ0LXJlbmV3YWxcIiBjbGFzcz1cIm1vZGFsIGhpZGUgZmFkZVwiPlxyXG4gIDxkaXYgY2xhc3M9XCJtb2RhbC1ib2R5XCI+XHJcbiAgICA8ZGl2IHN0eWxlPVwiZGlzcGxheTogaW5saW5lLWJsb2NrOyB3aWR0aDogMjUlOyB2ZXJ0aWNhbC1hbGlnbjogdG9wO1wiPlBsZWFzZSBjb250YWN0OjwvZGl2PlxyXG4gICAgPGRpdiBzdHlsZT1cImRpc3BsYXk6IGlubGluZS1ibG9jazsgd2lkdGg6IDc0JTsgbGluZS1oZWlnaHQ6IDI0cHg7XCI+PHNwYW4gaWQ9XCJwLWVudGl0eS1pbmZvXCIgc3R5bGU9XCJmb250LXdlaWdodDogYm9sZDtcIj48L3NwYW4+IHRvIHJlbmV3LiBUaGFuayB5b3UuPC9kaXY+XHJcbiAgPC9kaXY+XHJcbiAgPGRpdiBjbGFzcz1cIm1vZGFsLWZvb3RlclwiPlxyXG4gICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgZGF0YS1kaXNtaXNzPVwibW9kYWxcIiBjbGFzcz1cImJ0biBidG4tcHJpbWFyeVwiIGRhdGEtdmFsdWU9XCIxXCI+T0s8L2J1dHRvbj5cclxuICA8L2Rpdj5cclxuPC9kaXY+XHJcblxyXG48ZGl2IGlkPVwiYWxlcnQtcmVuZXdhbC1mclwiIGNsYXNzPVwibW9kYWwgaGlkZSBmYWRlXCI+XHJcbiAgPGRpdiBjbGFzcz1cIm1vZGFsLWJvZHlcIj5cclxuICAgIDxkaXYgc3R5bGU9XCJkaXNwbGF5OiBpbmxpbmUtYmxvY2s7IHdpZHRoOiA0MCU7IHZlcnRpY2FsLWFsaWduOiB0b3A7XCI+UG91ciByZW5vdXZlbGVyIHZvdHJlIGFkaFx1MDBlOXNpb24gdmV1aWxsZXogY29udGFjdGVyOjwvZGl2PlxyXG4gICAgPGRpdiBzdHlsZT1cImRpc3BsYXk6IGlubGluZS1ibG9jazsgd2lkdGg6IDU5JTsgbGluZS1oZWlnaHQ6IDI0cHg7XCI+PHNwYW4gaWQ9XCJwLWVudGl0eS1pbmZvXCIgc3R5bGU9XCJmb250LXdlaWdodDogYm9sZDtcIj48L3NwYW4+LiBNZXJjaS48L2Rpdj5cclxuICA8L2Rpdj5cclxuICA8ZGl2IGNsYXNzPVwibW9kYWwtZm9vdGVyXCI+XHJcbiAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBkYXRhLWRpc21pc3M9XCJtb2RhbFwiIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5XCIgZGF0YS12YWx1ZT1cIjFcIj5EJ2FjY29yZDwvYnV0dG9uPlxyXG4gIDwvZGl2PlxyXG48L2Rpdj5cclxuXHJcbjwhLS0gKioqKioqTU9EQUwgTElTVCBFTkQqKioqKiogLS0+IFxyXG5cclxuXHRcclxuXHRcclxuXHRcclxuXHRcdDxzY3JpcHQ+XHJcblx0XHQgIChmdW5jdGlvbihpLHMsbyxnLHIsYSxtKXtpWydHb29nbGVBbmFseXRpY3NPYmplY3QnXT1yO2lbcl09aVtyXXx8ZnVuY3Rpb24oKXtcclxuXHRcdCAgKGlbcl0ucT1pW3JdLnF8fFtdKS5wdXNoKGFyZ3VtZW50cyl9LGlbcl0ubD0xKm5ldyBEYXRlKCk7YT1zLmNyZWF0ZUVsZW1lbnQobyksXHJcblx0XHQgIG09cy5nZXRFbGVtZW50c0J5VGFnTmFtZShvKVswXTthLmFzeW5jPTE7YS5zcmM9ZzttLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGEsbSlcclxuXHRcdCAgfSkod2luZG93LGRvY3VtZW50LCdzY3JpcHQnLCdodHRwczovL3d3dy5nb29nbGUtYW5hbHl0aWNzLmNvbS9hbmFseXRpY3MuanMnLCdnYScpO1xyXG5cdFx0XHJcblx0XHQgIGdhKCdjcmVhdGUnLCAnVUEtMTAxNDA3NzgxLTEnLCAnYXV0bycpO1xyXG5cdFx0ICBnYSgnc2VuZCcsICdwYWdldmlldycpO1xyXG5cdFx0XHRcclxuXHRcdDwvc2NyaXB0PlxyXG5cdFxyXG5cdFx0PCEtLSBHb29nbGUgVGFnIE1hbmFnZXIgLS0+XHJcblx0XHQ8c2NyaXB0PihmdW5jdGlvbih3LGQscyxsLGkpe3dbbF09d1tsXXx8W107d1tsXS5wdXNoKHsnZ3RtLnN0YXJ0JzpcclxuXHRcdG5ldyBEYXRlKCkuZ2V0VGltZSgpLGV2ZW50OidndG0uanMnfSk7dmFyIGY9ZC5nZXRFbGVtZW50c0J5VGFnTmFtZShzKVswXSxcclxuXHRcdGo9ZC5jcmVhdGVFbGVtZW50KHMpLGRsPWwhPSdkYXRhTGF5ZXInPycmbD0nK2w6Jyc7ai5hc3luYz10cnVlO2ouc3JjPVxyXG5cdFx0J2h0dHBzOi8vd3d3Lmdvb2dsZXRhZ21hbmFnZXIuY29tL2d0bS5qcz9pZD0nK2krZGw7Zi5wYXJlbnROb2RlLmluc2VydEJlZm9yZShqLGYpO1xyXG5cdFx0fSkod2luZG93LGRvY3VtZW50LCdzY3JpcHQnLCdkYXRhTGF5ZXInLCdHVE0tTjZCVktQOScpOzwvc2NyaXB0PlxyXG5cdFx0PCEtLSBFbmQgR29vZ2xlIFRhZyBNYW5hZ2VyIC0tPlxyXG5cdFxyXG5cdDwvaGVhZD5cclxuPGJvZHk+XHJcblx0XHJcblx0XHQ8IS0tIEdvb2dsZSBUYWcgTWFuYWdlciAobm9zY3JpcHQpIC0tPlxyXG5cdFx0PG5vc2NyaXB0PjxpZnJhbWUgc3JjPVwiaHR0cHM6Ly93d3cuZ29vZ2xldGFnbWFuYWdlci5jb20vbnMuaHRtbD9pZD1HVE0tTjZCVktQOVwiXHJcblx0XHRoZWlnaHQ9XCIwXCIgd2lkdGg9XCIwXCIgc3R5bGU9XCJkaXNwbGF5Om5vbmU7dmlzaWJpbGl0eTpoaWRkZW5cIj48L2lmcmFtZT48L25vc2NyaXB0PlxyXG5cdFx0PCEtLSBFbmQgR29vZ2xlIFRhZyBNYW5hZ2VyIChub3NjcmlwdCkgLS0+XHJcblx0XHJcblxyXG5cdDxkaXYgY2xhc3M9XCJjb250YWluZXJcIj5cclxuXHRcdFxyXG5cclxuXHJcblxyXG5cclxuXHJcblxyXG5cclxuXHJcblxyXG5cclxuXHJcblxyXG5cclxuXHJcblxyXG5cclxuXHJcblxyXG48ZGl2IGNsYXNzPVwiZGl2LWhlYWRlclwiPlxyXG5cdDxzdHlsZT48IS0tXHJcbi50aXRsZS1sb2dvLCAjcG9ydGFsLWljb25zIHtcclxuXHRcdG1heC13aWR0aDogMTAwMHB4O1xyXG5cdFx0d2lkdGg6IDEwMCU7XHJcblx0XHRsZXR0ZXItc3BhY2luZzogMnB4O1xyXG5cdFx0bWFyZ2luOiBhdXRvO1xyXG5cdH1cclxuXHRcclxuXHQjZGl2LXRvcC1saW5rcyB7XHJcblx0XHR3aWR0aDogMTAwJTtcclxuXHRcdGhlaWdodDogMzRweDtcclxuXHRcdGRpc3BsYXk6IGZsZXg7XHJcbiAgICBcdGFsaWduLWl0ZW1zOiBjZW50ZXI7XHJcbiAgICBcdGp1c3RpZnktY29udGVudDogZmxleC1lbmQ7XHJcbiAgICBcdG1hcmdpbjogYXV0bztcclxuICAgIFx0YmFja2dyb3VuZC1jb2xvcjojRUQxQzI0O1xyXG5cdH1cclxuXHQjZGl2LXRvcC1saW5rcyB1bCB7XHJcblx0XHRkaXNwbGF5OiBmbGV4O1xyXG5cdFx0anVzdGlmeS1jb250ZW50OiBmbGV4LWVuZDtcclxuXHRcdGZsZXgtd3JhcDogd3JhcDtcclxuXHR9XHJcblx0I2Rpdi10b3AtbGlua3MgdWwgbGkge1xyXG5cdFx0bWFyZ2luLWxlZnQ6IDVweDtcclxuXHRcdG1hcmdpbi1yaWdodDogNXB4O1xyXG5cdH1cclxuXHQjZGl2LXRvcC1saW5rcyB1bCBsaSBhIHtcclxuXHRcdGNvbG9yOiAjZmZmO1xyXG5cdFx0Zm9udC1zaXplOiAxMHB4O1xyXG4gICAgXHRsZXR0ZXItc3BhY2luZzogMXB4O1xyXG4gICAgXHR0ZXh0LWRlY29yYXRpb246IG5vbmU7XHJcblx0fVxyXG5cdFxyXG5cdCNkaXYtdG9wLWxpbmtzIHVsIGxpIGE6aG92ZXIge1xyXG4gICAgXHR0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTtcclxuXHR9XHJcblx0XHJcblx0I2Rpdi10b3AtbGlua3MgLmluYWN0aXZlIHtcclxuXHRcdGNvbG9yOiAjZmZmO1xyXG5cdH1cclxuICAgICAgICAjZGl2LXNpZ25pbi1pZCB7XHJcblx0XHRtYXgtd2lkdGg6IDEwMDBweDtcclxuXHRcdHdpZHRoOiAxMDAlO1xyXG4gICAgXHQgICAgICAgIG1hcmdpbjogYXV0bztcclxuICAgICAgICAgICAgICAgIHRleHQtYWxpZ246IHJpZ2h0O1xyXG4gICAgICAgIH1cclxuXHQjdGl0bGUtd3JhcHBlciB7XHJcblx0XHRwb3NpdGlvbjogcmVsYXRpdmU7XHJcblx0XHRoZWlnaHQ6IDE2MHB4O1xyXG5cdH1cclxuICAgIC50aXRsZS13cmFwcGVyLXJpZ2h0LXBhcnQge1xyXG5cdCAgICBwb3NpdGlvbjogYWJzb2x1dGU7XHJcblx0ICAgIHdpZHRoOiA0MCU7XHJcblx0ICAgIGhlaWdodDogMTAwJTtcclxuXHQgICAgdG9wOiAwO1xyXG5cdCAgICByaWdodDogMDtcclxuXHQgICAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjtcclxuXHQgICAgei1pbmRleDogLTE7XHJcblx0fVxyXG5cdC50aXRsZS13cmFwcGVyLWxlZnQtcGFydCB7XHJcblx0ICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcclxuXHQgICAgd2lkdGg6IDQwJTtcclxuXHQgICAgaGVpZ2h0OiA2NXB4O1xyXG5cdCAgICBib3R0b206IDA7XHJcblx0ICAgIGxlZnQ6IDA7XHJcblx0ICAgIGJhY2tncm91bmQtY29sb3I6ICNmZmY7XHJcblx0ICAgIHotaW5kZXg6IC0xO1xyXG5cdH1cclxuXHQudGl0bGUtbG9nby10b3Age1xyXG5cdFx0aGVpZ2h0OiA5NnB4O1xyXG5cdFx0ZGlzcGxheTogZmxleDtcclxuXHRcdGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcclxuXHRcdGFsaWduLWl0ZW1zOiBjZW50ZXI7XHJcblx0fVxyXG5cdC50aXRsZS1sb2dvLWJvdHRvbSB7XHJcblx0XHRoZWlnaHQ6IDY0cHg7XHJcblx0XHRkaXNwbGF5OiBmbGV4O1xyXG4gICAgXHRqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtZW5kO1xyXG5cdH1cclxuXHRcclxuXHQudGl0bGVfX2JvdHRvbV9fc29jaWFsbGlua3Mge1xyXG5cdFx0bWFyZ2luOiAwcHg7XHJcblx0XHRwYWRkaW5nOiAwcHg7XHJcblx0XHRkaXNwbGF5OiBmbGV4O1xyXG5cdH1cclxuXHQudGl0bGVfX2JvdHRvbV9fc29jaWFsbGlua3MgbGkge1xyXG5cdFx0bWFyZ2luLWxlZnQ6IDE1cHg7XHJcbiAgICBcdG1hcmdpbi1yaWdodDogMTVweDtcclxuXHR9XHJcblx0XHJcblx0LmxhbmctaW5saW5lIHtcclxuXHRcdG1hcmdpbjogMHB4O1xyXG5cdH1cclxuXHQjbG9nb19saW5rIHtcclxucGFkZGluZy1sZWZ0OjE1cHg7XHJcbnBhZGRpbmctdG9wOjYwcHg7XHJcbn1cclxuI2Rpdi1zaWduaW4taWQge1xyXG5cdFx0dGV4dC1hbGlnbjogcmlnaHQ7XHJcblx0fVxyXG5cclxuXHRAbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiAxMDAwcHgpIHtcclxuXHQgICAgLnRpdGxlLXdyYXBwZXItcmlnaHQtcGFydCwgLnRpdGxlLXdyYXBwZXItbGVmdC1wYXJ0LCAudGl0bGVfX2JvdHRvbV9fc29jaWFsbGlua3MsIC5sb2dvLXRleHQge1xyXG5cdCAgICBcdGRpc3BsYXk6IG5vbmU7XHJcblx0ICAgIH1cclxuXHR9XHJcblx0XHJcblx0QG1lZGlhIHNjcmVlbiBhbmQgKG1heC13aWR0aDogNzY4cHgpIHtcclxuXHQgICAgLmNvbnRhaW5OYXYubWVudS1pY29uLWJhY2tncm91bmQge1xyXG5cdCAgICBcdGRpc3BsYXk6IGZsZXggIWltcG9ydGFudDtcclxuXHQgICAgfVxyXG4jZGl2LXRvcC1saW5rcy5jb250YWluTmF2IHtcclxuXHQgICAgXHRqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW4gIWltcG9ydGFudDtcclxuXHQgICAgfVxyXG4jZGl2LXNpZ25pbi1pZCB7XHJcblx0ICAgIFx0ZGlzcGxheTogZmxleCAhaW1wb3J0YW50O1xyXG4gICAgcGFkZGluZzogMDtcclxuICAgIGp1c3RpZnktY29udGVudDogZmxleC1lbmQ7XHJcbiAgICBjb2xvcjogI2ZmZjtcclxuICAgIGZvbnQtc2l6ZTogMTBweDtcclxuICAgIGxldHRlci1zcGFjaW5nOiAxcHg7XHJcbnBhZGRpbmctcmlnaHQ6IDE1cHg7XHJcbiAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xyXG5cdCAgICB9XHJcbiNsaS1zaWduaW4taWQge1xyXG5cdCAgICBcdGRpc3BsYXk6IG5vbmU7XHJcblx0ICAgIH1cclxuXHJcbiNkaXYtdG9wLWxpbmtzIHtcclxuanVzdGlmeS1jb250ZW50OiBmbGV4LWVuZDtcclxufVxyXG5cdH1cdCBcclxuXHRcclxuXHQubWVudS1pY29uLWJhY2tncm91bmQge1xyXG5cdCAgICBkaXNwbGF5OiBmbGV4O1xyXG5cdCAgICBmbGV4LWZsb3c6IHJvdyB3cmFwO1xyXG5cdCAgICBhbGlnbi1pdGVtczogY2VudGVyO1xyXG5cdCAgICBwYWRkaW5nLXRvcDogNHB4O1xyXG5cdCAgICBwYWRkaW5nLWJvdHRvbTogNHB4O1xyXG5cdCAgICBwYWRkaW5nLWxlZnQ6IDNweDtcclxuXHQgICAgcGFkZGluZy1yaWdodDogM3B4O1xyXG5cdCAgICBoZWlnaHQ6IDE2cHg7XHJcblx0ICAgIHdpZHRoOiAxOHB4O1xyXG5cdCAgICBtYXJnaW4tcmlnaHQ6IDE1cHg7XHJcbiAgICBcdG1hcmdpbi1sZWZ0OiAxNXB4O1xyXG5cdH1cclxuXHQuYmFyIHtcclxuXHQgICAgd2lkdGg6IDI0cHg7XHJcblx0ICAgIGhlaWdodDogMnB4O1xyXG5cdCAgICBib3JkZXItcmFkaXVzOiAycHg7XHJcblx0ICAgIGJhY2tncm91bmQ6ICMwMDcxOGY7XHJcblx0fVxyXG5cdC5vbmUge1xyXG5cdFx0d2lkdGg6IDEwMCU7XHJcblx0ICAgIHRvcDogMTRweDtcclxuXHQgICAgbGVmdDogMTBweDtcclxuXHR9XHJcblx0LnR3byB7XHJcblx0XHR3aWR0aDogMTAwJTtcclxuXHQgICAgdG9wOiA3cHg7XHJcblx0ICAgIGxlZnQ6IDBweDtcclxuXHR9XHJcblx0LnRocmVlIHtcclxuXHRcdHdpZHRoOiAxMDAlO1xyXG5cdCAgICB0b3A6IDdweDtcclxuXHQgICAgbGVmdDogMHB4O1xyXG5cdH1cclxuLS0+PC9zdHlsZT5cclxuPGRpdiBjbGFzcz1cImhlYWRlci1jb250YWluZXJcIj5cclxuPGRpdiBpZD1cImRpdi10b3AtbGlua3NcIj5cclxuPGRpdiBpZD1cImhhbU1lbnVcIiBjbGFzcz1cIm1lbnUtaWNvbi1iYWNrZ3JvdW5kXCIgc3R5bGU9XCJkaXNwbGF5OiBub25lO1wiPlxyXG48ZGl2IGNsYXNzPVwiYmFyIG9uZVwiPjwvZGl2PlxyXG48ZGl2IGNsYXNzPVwiYmFyIHR3b1wiPjwvZGl2PlxyXG48ZGl2IGNsYXNzPVwiYmFyIHRocmVlXCI+PC9kaXY+XHJcbjwvZGl2PlxyXG48dWwgY2xhc3M9XCJsYW5nLWlubGluZVwiPjxsaT48YSBpZD0nbGFuZy1lbicgaHJlZj0nIyc+RU5HTElTSDwvYT48L2xpPjxsaT48YSBpZD0nbGFuZy1mcicgaHJlZj0nIycgY2xhc3M9J2luYWN0aXZlJz5GUkFOXHUwMGM3QUlTPC9hPjwvbGk+PC91bD5cclxuPC9kaXY+XHJcbjxkaXYgaWQ9XCJkaXYtc2lnbmluLWlkXCIgY2xhc3M9XCJtZW51LWljb24tYmFja2dyb3VuZFwiIHN0eWxlPVwiZGlzcGxheTogbm9uZTtcIj48L2Rpdj5cclxuPGRpdiBpZD1cInRpdGxlLXdyYXBwZXJcIj5cclxuPGRpdiBjbGFzcz1cInRpdGxlLXdyYXBwZXItbGVmdC1wYXJ0XCI+PC9kaXY+XHJcbjxkaXYgY2xhc3M9XCJ0aXRsZS13cmFwcGVyLXJpZ2h0LXBhcnRcIj48L2Rpdj5cclxuPGRpdiBjbGFzcz1cInRpdGxlLWxvZ29cIj5cclxuPGRpdiBjbGFzcz1cInRpdGxlLWxvZ28tdG9wXCI+PGEgaWQ9XCJsb2dvX2xpbmtcIiBocmVmPVwiL3BvcnRhbC1ob21lXCIgc3R5bGU9XCJ6LWluZGV4OiAtMTtcIj4gPCEtLSAkaHRtbFNjbWFMb2dvIC0tPiA8aW1nIGlkPVwiaGVhZGVyLWxvZ29cIiBzcmM9XCIvbXBvd2VyL2NtczIvaW1nL3NjbWFfbG9nb190YWdfMjUwLnBuZ1wiIC8+IDwvYT4gPHNwYW4gY2xhc3M9XCJsb2dvLXRleHQtMVwiIHN0eWxlPVwiZm9udC1zaXplOiAzNXB4OyBjb2xvcjogIzAwMDsgbGV0dGVyLXNwYWNpbmc6IDEycHg7XCI+UG9ydGFsPC9zcGFuPjwvZGl2PlxyXG48ZGl2IGNsYXNzPVwidGl0bGUtbG9nby1ib3R0b21cIj5cclxuPHVsIGNsYXNzPVwidGl0bGVfX2JvdHRvbV9fc29jaWFsbGlua3NcIj5cclxuPGxpPjxhIGhyZWY9XCJodHRwczovL3d3dy5mYWNlYm9vay5jb20vc3VwcGx5LWNoYWluLWNhbmFkYVwiIHRhcmdldD1cIl9ibGFua1wiIHJlbD1cIm5vb3BlbmVyIG5vcmVmZXJyZXJcIj4gPGltZyBzcmM9XCIvbXBvd2VyL2NtczIvaW1nL2ljb24tZmFjZWJvb2stMzJfYmxhY2sucG5nXCIgLz48L2E+PC9saT5cclxuPGxpPjxhIGhyZWY9XCJodHRwczovL3d3dy5saW5rZWRpbi5jb20vY29tcGFueS9zdXBwbHktY2hhaW4tY2FuYWRhXCIgdGFyZ2V0PVwiX2JsYW5rXCIgcmVsPVwibm9vcGVuZXIgbm9yZWZlcnJlclwiPiA8aW1nIHNyYz1cIi9tcG93ZXIvY21zMi9pbWcvaWNvbi1saW5rZWRpbi0zMl9ibGFjay5wbmdcIiAvPjwvYT48L2xpPlxyXG48bGk+PGEgaHJlZj1cImh0dHBzOi8vdHdpdHRlci5jb20vc3VwcGx5LWNoYWluLWNhXCIgdGFyZ2V0PVwiX2JsYW5rXCIgcmVsPVwibm9vcGVuZXIgbm9yZWZlcnJlclwiPiA8aW1nIHNyYz1cIi9tcG93ZXIvY21zMi9pbWcvaWNvbi10d2l0dGVyLTMyX2JsYWNrLnBuZ1wiIC8+PC9hPjwvbGk+XHJcbjwvdWw+XHJcbjxzcGFuIGNsYXNzPVwibG9nby10ZXh0LTJcIiBzdHlsZT1cImZvbnQtc2l6ZTogMzVweDsgY29sb3I6ICMwMDA7IGxldHRlci1zcGFjaW5nOiAxMnB4OyBkaXNwbGF5OiBub25lOyBtYXJnaW4tbGVmdDogMjgwcHg7XCI+UG9ydGFsPC9zcGFuPjwvZGl2PlxyXG48L2Rpdj5cclxuPC9kaXY+XHJcbjwvZGl2PlxyXG5cdFxyXG5cdFxyXG48L2Rpdj5cclxuXHJcbjxzY3JpcHQgdHlwZT1cInRleHQvamF2YXNjcmlwdFwiPlxyXG5cdCQoIGRvY3VtZW50ICkucmVhZHkoZnVuY3Rpb24oKSB7XHJcblx0XHQkKFwiI2xhbmctZW5cIikuYXR0ciggXCJocmVmXCIsIFwiL1wiK2xvY2FsU3RvcmFnZS5nZXRJdGVtKFwic2NtYS1sYW5nLXNldHRpbmdcIikrXCIvcG9ydGFsbG9naW5cIiApXHJcblx0XHQkKFwiI2xhbmctZnJcIikuYXR0ciggXCJocmVmXCIsIFwiL1wiK2xvY2FsU3RvcmFnZS5nZXRJdGVtKFwic2NtYS1sYW5nLXNldHRpbmdcIikrXCIvcG9ydGFsbG9naW5cIiApXHJcblx0XHRcclxuXHRcdHZhciBsYW5nQ2hrID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oXCJzY21hLWxhbmctc2V0dGluZ1wiKTtcclxuXHQgXHRpZiAobGFuZ0NoayA9PSBudWxsIHx8IGxvY2FsU3RvcmFnZS5nZXRJdGVtKFwic2NtYS1sYW5nLXNldHRpbmdcIikgPT0gXCJlblwiKSB7XHJcblx0IFx0XHQkKFwiI2xhbmctZW5cIikucmVtb3ZlQ2xhc3MoXCJpbmFjdGl2ZVwiKTtcclxuXHRcdFx0JChcIiNsYW5nLWZyXCIpLmFkZENsYXNzKFwiaW5hY3RpdmVcIik7XHJcblx0IFx0fSBlbHNlIHtcclxuXHQgXHRcdCQoXCIjbGFuZy1lblwiKS5hZGRDbGFzcyhcImluYWN0aXZlXCIpO1xyXG5cdFx0XHQkKFwiI2xhbmctZnJcIikucmVtb3ZlQ2xhc3MoXCJpbmFjdGl2ZVwiKTtcclxuXHQgXHR9XHJcblx0XHRcdFxyXG5cdFx0dmFyIGxvY2FsZSA9IFwiZW5cIlx0XHJcblx0XHRcclxuXHRcdGlmIChsb2NhbGUgPT09IFwiZnJcIikge1xyXG5cdFx0XHQkKFwiI3NpZ24tb3V0LWZyXCIpLnNob3coKTtcdFx0XHRcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdCQoXCIjc2lnbi1vdXRcIikuc2hvdygpO1xyXG5cdFx0fVxyXG5cdFx0JChcIi5sYW5nLWlubGluZVwiKS5zaG93KCk7XHJcblx0XHRcclxuXHRcdFxyXG5cdFx0JChcIiNsYW5nLWVuXCIpLmNsaWNrKGZ1bmN0aW9uKGUpe1xyXG5cdFx0XHRcclxuXHRcdFx0LyogdmFyIGlzTG9jYWxUZXN0ID0gZmFsc2U7XHJcblx0XHRcdHZhciB0bXAgPSBcIm1wb3dlclwiO1xyXG5cdFx0XHRpZiAod2luZG93LmxvY2F0aW9uLmhyZWYuaW5jbHVkZXMoXCJsb2NhbGhvc3RcIikpIHtcclxuXHRcdFx0XHRpc0xvY2FsVGVzdCA9IHRydWU7XHJcblx0XHRcdFx0dG1wID0gXCJtcG93ZXI4UE1BQ1wiO1xyXG5cdFx0XHR9ICovXHJcblx0XHRcdFxyXG5cdFx0XHQkKFwiI2xhbmctZW5cIikucmVtb3ZlQXR0ciggXCJocmVmXCIgKTtcclxuXHRcdFx0XHJcblx0XHRcdGxvY2FsU3RvcmFnZS5zZXRJdGVtKFwic2NtYS1sYW5nLXNldHRpbmdcIiwgXCJlblwiKTtcclxuXHRcdFx0XHJcblx0XHRcdHZhciB1cmwgPSB3aW5kb3cubG9jYXRpb24uaHJlZjtcclxuXHRcdFx0XHJcblx0XHRcdHZhciBhcnJVcmwgPSB1cmwuc3BsaXQoXCIvXCIpO1xyXG5cdFx0XHR2YXIgcGFyYW0gPSBhcnJVcmxbYXJyVXJsLmxlbmd0aC0xXTtcclxuXHRcdFx0aWYgKHBhcmFtLnNsaWNlKC0xKSA9PSBcIiNcIikge1xyXG5cdFx0XHRcdHBhcmFtID0gcGFyYW0uc3Vic3RyaW5nKDAsIHBhcmFtLmxlbmd0aC0xKTtcclxuXHRcdFx0fVxyXG5cdFx0XHRcclxuXHRcdFx0aWYgKGlzTG9jYWxUZXN0KSB7XHRcdFx0XHQvL0ZvciBsb2NhbCB0ZXN0XHJcblx0XHRcdFx0dmFyIGFyclBhcmFtID0gcGFyYW0uc3BsaXQoXCJwYWdlTmFtZT1cIik7XHJcblx0XHRcdFx0dmFyIGFyclBhcmFtMiA9IGFyclBhcmFtW2FyclBhcmFtLmxlbmd0aC0xXS5zcGxpdChcIi9cIik7XHJcblx0XHRcdFx0cGFyYW0gPSBhcnJQYXJhbTJbYXJyUGFyYW0yLmxlbmd0aC0xXTtcclxuXHRcdFx0fVxyXG5cdFx0XHRcdFx0XHJcblx0XHRcdGlmIChwYXJhbSA9PSBcIlwiKSB7XHJcblx0XHRcdFx0cGFyYW0gPSBcInBvcnRhbGxvZ2luXCI7XHJcblx0XHRcdH1cclxuXHRcdFx0XHJcblx0XHRcdCQuYWpheCh7XHJcbiAgICBcdFx0XHR0eXBlOidQT1NUJyxcclxuICAgIFx0XHRcdHVybDonLycgKyB1cmxQcmVmaXggKyAnL2NtczIvY2hhbmdlTGFuZ1NldHRpbmcuYWN0aW9uJyxcclxuICAgIFx0XHRcdGRhdGE6eydsYW5nJzogJ2VuJ30sXHJcbiAgICBcdFx0XHRzdWNjZXNzOmZ1bmN0aW9uKGRhdGEpe1xyXG4gICAgXHRcdFx0XHRjb25zb2xlLmxvZyhcInN1Y2Nlc3NcIik7XHJcblx0XHRcdFx0XHJcblx0XHRcdFx0XHQkKFwiI2xhbmctZW5cIikuYXR0ciggXCJocmVmXCIsIGxvY2FsU3RvcmFnZS5nZXRJdGVtKFwic2NtYS1sYW5nLXNldHRpbmdcIikrXCIvXCIrcGFyYW0gKTtcclxuICAgIFx0XHRcdFx0XHJcbiAgICBcdFx0XHRcdGlmIChpc0xvY2FsVGVzdCkge1x0XHRcdFx0Ly9Gb3IgbG9jYWwgdGVzdFxyXG4gICAgXHRcdFx0XHRcdGxvY2F0aW9uLmhyZWYgPSBcImRpc3BsYXkuYWN0aW9uP3BhZ2VOYW1lPVwiKyQoXCIjbGFuZy1lblwiKS5hdHRyKFwiaHJlZlwiKTtcclxuICAgIFx0XHRcdFx0fSBlbHNlIHtcclxuICAgIFx0XHRcdFx0XHRsb2NhdGlvbi5ocmVmID0gXCIvXCIgKyAkKFwiI2xhbmctZW5cIikuYXR0cihcImhyZWZcIik7XHJcbiAgICBcdFx0XHRcdH1cclxuICAgIFx0XHRcdH0sXHJcbiAgICBcdFx0XHRlcnJvcjpmdW5jdGlvbihkYXRhKXtcclxuICAgIFx0XHRcdFx0Y29uc29sZS5sb2coXCJmYWlsXCIpO1xyXG4gICAgXHRcdFx0fVxyXG5cdCAgICBcdH0pO1xyXG5cdFx0XHRcclxuXHRcdH0pO1xyXG5cdFx0JChcIiNsYW5nLWZyXCIpLmNsaWNrKGZ1bmN0aW9uKGUpe1xyXG5cdFx0XHRcclxuXHRcdFx0LyogdmFyIGlzTG9jYWxUZXN0ID0gZmFsc2U7XHJcblx0XHRcdHZhciB0bXAgPSBcIm1wb3dlclwiO1xyXG5cdFx0XHRpZiAod2luZG93LmxvY2F0aW9uLmhyZWYuaW5jbHVkZXMoXCJsb2NhbGhvc3RcIikpIHtcclxuXHRcdFx0XHRpc0xvY2FsVGVzdCA9IHRydWU7XHJcblx0XHRcdFx0dG1wID0gXCJtcG93ZXI4UE1BQ1wiO1xyXG5cdFx0XHR9ICovXHJcblx0XHRcdFxyXG5cdFx0XHQkKFwiI2xhbmctZnJcIikucmVtb3ZlQXR0ciggXCJocmVmXCIgKTtcclxuXHRcdFx0XHJcblx0XHRcdGxvY2FsU3RvcmFnZS5zZXRJdGVtKFwic2NtYS1sYW5nLXNldHRpbmdcIiwgXCJmclwiKTtcclxuXHJcblx0XHRcdHZhciB1cmwgPSB3aW5kb3cubG9jYXRpb24uaHJlZjtcclxuXHRcclxuXHRcdFx0dmFyIGFyclVybCA9IHVybC5zcGxpdChcIi9cIik7XHJcblx0XHRcdHZhciBwYXJhbSA9IGFyclVybFthcnJVcmwubGVuZ3RoLTFdXHJcblx0XHRcdGlmIChwYXJhbS5zbGljZSgtMSkgPT0gXCIjXCIpIHtcclxuXHRcdFx0XHRwYXJhbSA9IHBhcmFtLnN1YnN0cmluZygwLCBwYXJhbS5sZW5ndGgtMSk7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdGlmIChpc0xvY2FsVGVzdCkge1x0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdC8vRm9yIGxvY2FsIHRlc3RcclxuXHRcdFx0XHR2YXIgYXJyUGFyYW0gPSBwYXJhbS5zcGxpdChcInBhZ2VOYW1lPVwiKTtcclxuXHRcdFx0XHR2YXIgYXJyUGFyYW0yID0gYXJyUGFyYW1bYXJyUGFyYW0ubGVuZ3RoLTFdLnNwbGl0KFwiL1wiKTtcclxuXHRcdFx0XHRwYXJhbSA9IGFyclBhcmFtMlthcnJQYXJhbTIubGVuZ3RoLTFdO1xyXG5cdFx0XHR9XHJcblx0XHRcdFxyXG5cdFx0XHRpZiAocGFyYW0gPT0gXCJcIikge1xyXG5cdFx0XHRcdHBhcmFtID0gXCJwb3J0YWxsb2dpblwiO1xyXG5cdFx0XHR9XHJcblx0XHRcdFxyXG5cdFx0XHQkLmFqYXgoe1xyXG4gICAgXHRcdFx0dHlwZTonUE9TVCcsXHJcbiAgICBcdFx0XHR1cmw6Jy8nICsgdXJsUHJlZml4ICsgJy9jbXMyL2NoYW5nZUxhbmdTZXR0aW5nLmFjdGlvbicsXHJcbiAgICBcdFx0XHRkYXRhOnsnbGFuZyc6ICdmcid9LFxyXG4gICAgXHRcdFx0c3VjY2VzczpmdW5jdGlvbihkYXRhKXtcclxuICAgIFx0XHRcdFx0Y29uc29sZS5sb2coXCJzdWNjZXNzXCIpO1xyXG4gICAgXHRcdFx0XHRcclxuICAgIFx0XHRcdFx0JChcIiNsYW5nLWZyXCIpLmF0dHIoIFwiaHJlZlwiLCBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShcInNjbWEtbGFuZy1zZXR0aW5nXCIpK1wiL1wiK3BhcmFtICk7XHJcbiAgICBcdFx0XHRcdFxyXG4gICAgXHRcdFx0XHRpZiAoaXNMb2NhbFRlc3QpIHtcdFx0XHRcdC8vRm9yIGxvY2FsIHRlc3RcclxuICAgIFx0XHRcdFx0XHRsb2NhdGlvbi5ocmVmID0gXCJkaXNwbGF5LmFjdGlvbj9wYWdlTmFtZT1cIiskKFwiI2xhbmctZnJcIikuYXR0cihcImhyZWZcIik7XHJcbiAgICBcdFx0XHRcdH0gZWxzZSB7XHJcbiAgICBcdFx0XHRcdFx0bG9jYXRpb24uaHJlZiA9IFwiL1wiICsgJChcIiNsYW5nLWZyXCIpLmF0dHIoXCJocmVmXCIpO1xyXG4gICAgXHRcdFx0XHR9XHJcbiAgICBcdFx0XHRcdFxyXG4gICAgXHRcdFx0XHQvL2RvY3VtZW50LmdldEVsZW1lbnRCeUlkKCcjbGFuZy1mcicpLmNsaWNrKCk7XHJcbiAgICBcdFx0XHRcdFxyXG4gICAgXHRcdFx0fSxcclxuICAgIFx0XHRcdGVycm9yOmZ1bmN0aW9uKGRhdGEpe1xyXG4gICAgXHRcdFx0XHRjb25zb2xlLmxvZyhcImZhaWxcIik7ICAgIFx0XHRcdFx0XHJcbiAgICBcdFx0XHR9XHJcblx0ICAgIFx0fSk7XHJcblx0XHRcdFxyXG5cdFx0fSk7XHRcdFxyXG5cdFx0XHJcblx0XHRcclxuXHRcdC8qICQoXCIudGl0bGUtbG9nby10b3BcIikuY2xpY2soZnVuY3Rpb24oZSl7XHJcblx0XHRcdGFsZXJ0KGxvY2FsU3RvcmFnZS5nZXRJdGVtKFwic2NtYS1sYW5nLXNldHRpbmdcIikpO1xyXG5cdFx0fSk7ICovXHJcblx0XHRcclxuXHRcdCQoXCIjc2lnbi1vdXQsICNzaWduLW91dC1mclwiKS5jbGljayhmdW5jdGlvbihlKXtcclxuXHRcdFx0JC5hamF4KHtcclxuICAgIFx0XHRcdHR5cGU6J1BPU1QnLFxyXG4gICAgXHRcdFx0dXJsOicvJyArIHVybFByZWZpeCArICcvY21zMi9hamF4LW1lbWJlci1sb2dvdXQuYWN0aW9uJyxcclxuICAgIFx0XHRcdHN1Y2Nlc3M6ZnVuY3Rpb24oZGF0YSl7XHJcbiAgICBcdFx0XHRcdGNvbnNvbGUubG9nKFwic3VjY2Vzc1wiKTtcclxuXHJcbiAgICBcdFx0XHRcdHZhciBocmVmID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oXCJzY21hLWxhbmctc2V0dGluZ1wiKStcIi9cIitcInBvcnRhbGxvZ2luXCI7XHJcbiAgICBcdFx0XHRcdGlmIChpc0xvY2FsVGVzdCkge1x0XHRcdFx0Ly9Gb3IgbG9jYWwgdGVzdFxyXG4gICAgXHRcdFx0XHRcdGxvY2F0aW9uLmhyZWYgPSBcImRpc3BsYXkuYWN0aW9uP3BhZ2VOYW1lPVwiK2hyZWY7XHJcbiAgICBcdFx0XHRcdH0gZWxzZSB7XHJcbiAgICBcdFx0XHRcdFx0bG9jYXRpb24uaHJlZiA9IFwiL1wiICsgaHJlZjtcclxuICAgIFx0XHRcdFx0fVxyXG4gICAgXHRcdFx0XHRcclxuICAgIFx0XHRcdFx0Ly9kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnI2xhbmctZnInKS5jbGljaygpO1xyXG4gICAgXHRcdFx0XHRcclxuICAgIFx0XHRcdH0sXHJcbiAgICBcdFx0XHRlcnJvcjpmdW5jdGlvbihkYXRhKXtcclxuICAgIFx0XHRcdFx0Y29uc29sZS5sb2coXCJmYWlsXCIpOyAgICBcdFx0XHRcdFxyXG4gICAgXHRcdFx0fVxyXG5cdCAgICBcdH0pO1xyXG5cdFx0fSk7XHJcblx0XHRcclxuXHRcdGlmICh3aW5kb3cubG9jYXRpb24uaHJlZi5pbmNsdWRlcyhcInBvcnRhbGxvZ2luXCIpKSB7XHJcblx0XHRcdCQoXCIjaGFtTWVudVwiKS5yZW1vdmVDbGFzcyhcImNvbnRhaW5OYXZcIik7XHRcdFx0Ly9yZW1vdmUgaGFtYnVyZ2VyIGJ1dHRvbiBpbiBsb2dpbiBwYWdlXHJcblx0XHRcdCQoXCIjZGl2LXRvcC1saW5rc1wiKS5yZW1vdmVDbGFzcyhcImNvbnRhaW5OYXZcIik7XHRcdC8vZm9yIGFsaWduaW5nIGhhbWJ1cmdlciBidXR0b25cclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdCQoXCIjaGFtTWVudVwiKS5hZGRDbGFzcyhcImNvbnRhaW5OYXZcIik7XHRcdFx0XHRcclxuXHRcdFx0JChcIiNkaXYtdG9wLWxpbmtzXCIpLmFkZENsYXNzKFwiY29udGFpbk5hdlwiKTtcclxuXHRcdH1cclxuXHRcdFxyXG5cdH0pO1xyXG48L3NjcmlwdD5cclxuXHJcblx0XHRcclxuXHJcblxyXG5cclxuXHJcblxyXG5cclxuXHJcblxyXG5cclxuXHJcblxyXG5cclxuXHJcblxyXG5cclxuXHJcblxyXG48IS0tICoqKioqKkNPTlRFTlQqKioqKiogLS0+IFxyXG48c3R5bGU+XHJcblx0LnBhZ2Utd3JhcHBlciB7XHJcblx0XHRoZWlnaHQ6IDEwMCU7XHJcblx0fVxyXG5cdC5wYWdlLWNvbnRlbnQge1xyXG5cdFx0ZGlzcGxheTogZmxleDtcclxuICAgIFx0aGVpZ2h0OiAxMDAlO1xyXG5cdH1cclxuPC9zdHlsZT5cclxuPGRpdiBjbGFzcz1cImNvbnRlbnRcIj5cclxuXHQ8ZGl2IGNsYXNzPVwicGFnZS13cmFwcGVyXCI+XHJcblx0XHJcblx0PGRpdiBjbGFzcz1cInBhZ2UtY29udGVudFwiPlxyXG5cdFx0PHN0eWxlPjwhLS1cclxuLmxvZ2luLWNvbnRhaW5lciB7XHJcblx0XHR3aWR0aDogMTAwJTtcclxuXHRcdG1heC13aWR0aDogMTAwMHB4O1xyXG5cdFx0bWFyZ2luOiBhdXRvO1xyXG5cdFx0Y29sb3I6ICMzMzMzMzM7XHJcblx0XHRiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xyXG5cdFx0ZGlzcGxheTp0YWJsZS1yb3c7XHJcblx0XHRcclxuXHR9XHJcblx0I2Rpdi1sb2dpbi1taWRkbGUge1xyXG5cdCAgIFx0bWF4LXdpZHRoOiAxMDAwcHg7XHJcblx0ICAgXHRtYXJnaW46IGF1dG87XHJcblx0ICAgXHRwYWRkaW5nLXRvcDogNTBweDtcclxuXHQgICBcdHBhZGRpbmctYm90dG9tOiA1MHB4O1xyXG5cdH1cclxuXHQjZGl2LWxvZ2luLW1pZGRsZSA+IGgxIHtcclxuXHRcdGNvbG9yOiAjMDAwO1xyXG5cdFx0Zm9udC13ZWlnaHQ6IG5vcm1hbDtcclxuXHR9XHJcblx0I2Rpdi1sb2dpbi1taWRkbGUgPiBoMSwgI2Rpdi1sb2dpbi1taWRkbGUgPiBwLCAjZGl2LWxvZ2luLW1pZGRsZSA+IGRpdntcclxuXHRcdHBhZGRpbmctbGVmdDogMTBweDtcclxuXHRcdHBhZGRpbmctcmlnaHQ6IDEwcHg7XHJcblx0fVxyXG5cdCNkaXYtbG9naW4tbWlkZGxlIGgzIHtcclxuXHRcdGZvbnQtc2l6ZTogMTFweDtcclxuXHRcdGNvbG9yOiAjMzMzMzMzO1xyXG5cdCAgICBmb250LXdlaWdodDogbm9ybWFsO1xyXG5cdCAgICBtYXJnaW4tYm90dG9tOiA1cHg7XHJcblx0fVxyXG5cdCNkaXYtbG9naW4tbWlkZGxlIHVsIHtcclxuXHRcdG1hcmdpbi1sZWZ0OiAxMHB4O1xyXG5cdFx0cGFkZGluZy1sZWZ0OiAwcHg7XHJcblx0fVxyXG5cdCNkaXYtbG9naW4tYm90dG9tIHtcclxuXHRcdGhlaWdodDogNTBweDtcclxuXHR9XHJcblx0LmxvZ2luIGlucHV0IHtcclxuXHRcdGRpc3BsYXk6IGJsb2NrO1xyXG5cdH1cclxuXHQubG9naW4gLmxvZ2luLWlucHV0LWJveCB7XHJcblx0XHR3aWR0aDogY2FsYygxMDAlIC0gMjJweCk7XHJcblx0XHRoZWlnaHQ6IDE2cHg7XHJcblx0XHRtYXgtd2lkdGg6IDU3MHB4O1xyXG5cdFx0Ym9yZGVyOiAxcHggc29saWQgI0E5QTNBMTtcclxuXHRcdGJvcmRlci1yYWRpdXM6IDNweDtcclxuXHRcdHBhZGRpbmc6IDEwcHg7XHJcblx0XHRtYXJnaW4tdG9wOiAxNXB4O1xyXG5cdFx0bWFyZ2luLWJvdHRvbTogMTVweDtcclxuXHR9XHJcblx0I21lbWJlci1sb2dpbi1zdWJtaXRfcGFzc3dvcmQge1xyXG5cdFx0bWFyZ2luLWJvdHRvbTogMjBweDtcclxuXHR9XHJcblx0I21lbWJlci1sb2dpbiB7XHJcblx0XHR3aWR0aDogODRweDtcclxuXHRcdGhlaWdodDogNDVweDtcclxuXHRcdG1hcmdpbi1ib3R0b206IDIwcHg7XHJcblx0fVxyXG5cdFxyXG5cdCNmb3Jnb3QtcHcge1xyXG5cdFx0dGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XHJcblx0XHRjb2xvcjogIzAwMDtcclxuXHRcdGZvbnQtd2VpZ2h0OiBib2xkO1xyXG5cdH1cclxuXHQuZ3JlZW5CdG4ge1xyXG5cdCAgICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQodG8gYm90dG9tLCAjRUQxQzI0IDAlLCAjRUQxQzI0IDEwMCUpO1xyXG5cdCAgICBmaWx0ZXI6IHByb2dpZDpEWEltYWdlVHJhbnNmb3JtLk1pY3Jvc29mdC5ncmFkaWVudCggc3RhcnRDb2xvcnN0cj0nI0VEMUMyNCcsIGVuZENvbG9yc3RyPScjRUQxQzI0JyxHcmFkaWVudFR5cGU9MCApO1xyXG5cdCAgICBib3JkZXI6IDFweCBzb2xpZCAjRUQxQzI0O1xyXG5cdCAgICBtYXJnaW4tdG9wOiAxMHB4O1xyXG5cdCAgICBwYWRkaW5nOiAwICFpbXBvcnRhbnQ7XHJcblx0ICAgIHRleHQtYWxpZ246IGNlbnRlcjtcclxuXHQgICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcclxuXHQgICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xyXG5cdCAgICB3aWR0aDogMTAwJTtcclxuXHQgICAgYm9yZGVyLXJhZGl1czogNHB4O1xyXG5cdCAgICBjb2xvcjogI2U2ZTZlNjtcclxuXHQgICAgZm9udC1mYW1pbHk6IFwibXlyaWFkLXByb1wiLCBzYW5zLXNlcmlmO1xyXG5cdCAgICBmb250LXNpemU6IDAuODEyNXJlbTtcclxuXHQgICAgbGV0dGVyLXNwYWNpbmc6IDAuMzhweDtcclxuXHQgICAgZm9udC13ZWlnaHQ6IDYwMDtcclxuXHR9XHJcblx0LmdyZWVuQnRuOmhvdmVyIHtcclxuXHRcdGNvbG9yOiAjZmZmO1xyXG5cdH1cclxuLS0+PC9zdHlsZT5cclxuPGRpdiBjbGFzcz1cImxvZ2luLWNvbnRhaW5lclwiPlxyXG48ZGl2IGlkPVwiZGl2LWxvZ2luLW1pZGRsZVwiPlxyXG48aDE+TG9naW48L2gxPlxyXG48cD5QbGVhc2UgZW50ZXIgeW91ciBlLW1haWwgYWRkcmVzcyBhbmQgcGFzc3dvcmQgdG8gYWNjZXNzIHRoZSBQb3J0YWw8L3A+XHJcbjxkaXYgY2xhc3M9XCJsb2dpblwiPjxpbnB1dCB0eXBlPVwidGV4dFwiIG5hbWU9XCJ1c2VybmFtZVwiIHNpemU9XCI0MFwiIG1heGxlbmd0aD1cIjEwMFwiIGlkPVwibWVtYmVyLWxvZ2luLXVzZXJuYW1lXCIgY2xhc3M9XCJsb2dpbi1pbnB1dC1ib3hcIiBwbGFjZWhvbGRlcj1cIkVtYWlsIEFkZHJlc3NcIiAvPiA8aW5wdXQgdHlwZT1cInBhc3N3b3JkXCIgbmFtZT1cInBhc3N3b3JkXCIgc2l6ZT1cIjQwXCIgbWF4bGVuZ3RoPVwiMTAwXCIgaWQ9XCJtZW1iZXItbG9naW4tcGFzc3dvcmRcIiBjbGFzcz1cImxvZ2luLWlucHV0LWJveFwiIHBsYWNlaG9sZGVyPVwiUGFzc3dvcmRcIiAvPiA8aW5wdXQgdHlwZT1cInN1Ym1pdFwiIGlkPVwibWVtYmVyLWxvZ2luXCIgY2xhc3M9XCJncmVlbkJ0blwiIG5hbWU9XCJsb2dpbi5sb2dpblwiIHZhbHVlPVwiTG9naW5cIiAvPiA8YSBpZD1cImZvcmdvdC1wd1wiIGhyZWY9XCIvbXBvd2VyL21wcC9tZW1iZXItZm9yZ290XCI+IEZvcmdvdCB5b3VyIHBhc3N3b3JkIC8gRmlyc3QgdGltZSBsb2dnaW5nIGluPyA8L2E+PC9kaXY+XHJcbjwvZGl2PlxyXG48ZGl2IGlkPVwiZGl2LWxvZ2luLWJvdHRvbVwiPjwvZGl2PlxyXG48L2Rpdj5cclxuXHQ8L2Rpdj5cclxuXHRcclxuXHQ8L2Rpdj5cclxuIDwvZGl2Plx0XHJcblx0XHRcclxuXHJcblxyXG5cclxuXHJcblxyXG5cclxuXHJcblxyXG5cclxuXHJcblxyXG5cclxuXHJcblxyXG5cclxuXHJcblxyXG5cclxuPGRpdiBjbGFzcz1cImRpdi1mb290ZXJcIj5cclxuXHQ8c3R5bGU+PCEtLVxyXG4uZm9vdGVyLWNvbnRhaW5lciB7XHJcblx0ICAgIGJhY2tncm91bmQtY29sb3I6ICMwMDA7XHJcblx0ICAgIGhlaWdodDogMTAwJTtcclxuXHQgICAgd2lkdGg6IDEwMCU7XHJcblx0fVxyXG5cdFxyXG5cdC5mb290ZXItbGlua3MtcmlnaHRzIHtcclxuXHRcdGhlaWdodDogMTAwJTtcclxuXHQgICAgbWF4LXdpZHRoOiAxMDAwcHg7XHJcblx0ICAgIG1hcmdpbjogYXV0bztcclxuXHQgICAgcGFkZGluZy10b3A6IDI1cHg7XHJcblx0ICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XHJcblx0ICAgIGRpc3BsYXk6IGZsZXg7XHJcblx0ICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XHJcblx0ICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcclxuXHQgICAgcGFkZGluZy1ib3R0b206IDI1cHg7XHJcbiAgICBcclxuXHR9XHRcclxuXHQuZm9vdGVyLWxpbmtzLXJpZ2h0cyBzcGFuIHtcclxuXHRcdGNvbG9yOiAjZmZmO1xyXG5cdH1cclxuXHRcclxuXHQudGl0bGVfX2JvdHRvbV9fc29jaWFsbGlua3Mge1xyXG5cdFx0bWFyZ2luOiAwcHg7XHJcblx0XHRwYWRkaW5nOiAwcHg7XHJcblx0XHRkaXNwbGF5OiBmbGV4O1xyXG5cdFx0bGlzdC1zdHlsZTogbm9uZTtcclxuXHR9XHJcblx0LnRpdGxlX19ib3R0b21fX3NvY2lhbGxpbmtzIGxpIHtcclxuXHRcdG1hcmdpbi1sZWZ0OiAxNXB4O1xyXG4gICAgXHRtYXJnaW4tcmlnaHQ6IDE1cHg7O1xyXG5cdH1cclxuXHRcclxuXHQjZm9vdGVyLWxpbmtzLCAjZm9vdGVyLXJpZ2h0cyB7XHJcblx0XHRtYXgtd2lkdGg6IDEwMDBweDtcclxuXHQgICAgbWFyZ2luLXRvcDogMjBweDtcclxuXHR9ICAgIFxyXG5cdCNmb290ZXItcmlnaHRzIHtcclxuXHRcdHRleHQtYWxpZ246IGNlbnRlcjtcclxuXHRcdFxyXG5cdH1cclxuLS0+PC9zdHlsZT5cclxuPGRpdiBjbGFzcz1cImZvb3Rlci1jb250YWluZXJcIj5cclxuPGRpdiBjbGFzcz1cImZvb3Rlci1saW5rcy1yaWdodHNcIj5cclxuPGRpdiBpZD1cImZvb3Rlci1saW5rc1wiPlxyXG48dWwgY2xhc3M9XCJ0aXRsZV9fYm90dG9tX19zb2NpYWxsaW5rc1wiPlxyXG48bGk+PGEgaHJlZj1cImh0dHBzOi8vd3d3LmZhY2Vib29rLmNvbS9zdXBwbHktY2hhaW4tY2FuYWRhXCIgdGFyZ2V0PVwiX2JsYW5rXCIgcmVsPVwibm9vcGVuZXIgbm9yZWZlcnJlclwiPiA8aW1nIHNyYz1cIi9tcG93ZXIvY21zMi9pbWcvaWNvbi1mYWNlYm9vay0zMi5wbmdcIiAvPjwvYT48L2xpPlxyXG48bGk+PGEgaHJlZj1cImh0dHBzOi8vd3d3LmxpbmtlZGluLmNvbS9jb21wYW55L3N1cHBseS1jaGFpbi1jYW5hZGFcIiB0YXJnZXQ9XCJfYmxhbmtcIiByZWw9XCJub29wZW5lciBub3JlZmVycmVyXCI+IDxpbWcgc3JjPVwiL21wb3dlci9jbXMyL2ltZy9pY29uLWxpbmtlZGluLTMyLnBuZ1wiIC8+PC9hPjwvbGk+XHJcbjxsaT48YSBocmVmPVwiaHR0cHM6Ly90d2l0dGVyLmNvbS9zdXBwbHktY2hhaW4tY2FcIiB0YXJnZXQ9XCJfYmxhbmtcIiByZWw9XCJub29wZW5lciBub3JlZmVycmVyXCI+IDxpbWcgc3JjPVwiL21wb3dlci9jbXMyL2ltZy9pY29uLXR3aXR0ZXItMzIucG5nXCIgLz48L2E+PC9saT5cclxuPC91bD5cclxuPC9kaXY+XHJcbjxkaXY+PHNwYW4+PC9zcGFuPjwvZGl2PlxyXG48ZGl2IHN0eWxlPVwidGV4dC1hbGlnbjogY2VudGVyO1wiPjxzcGFuIHN0eWxlPVwiY29sb3I6ICNmZmZmZmY7XCI+PGEgaHJlZj1cImh0dHBzOi8vd3d3LnN1cHBseWNoYWluY2FuYWRhLmNvbS9wcml2YWN5XCIgdGFyZ2V0PVwiX2JsYW5rXCIgcmVsPVwibm9vcGVuZXIgbm9yZWZlcnJlclwiIHN0eWxlPVwiY29sb3I6ICNmZmZmZmY7XCI+UHJpdmFjeSBTdGF0ZW1lbnQ8L2E+IHwgPGEgaHJlZj1cImh0dHBzOi8vd3d3LnN1cHBseWNoYWluY2FuYWRhLmNvbS90ZXJtcy1vZi1zZXJ2aWNlXCIgdGFyZ2V0PVwiX2JsYW5rXCIgcmVsPVwibm9vcGVuZXIgbm9yZWZlcnJlclwiIHN0eWxlPVwiY29sb3I6ICNmZmZmZmY7XCI+VGVybXMgb2YgU2VydmljZXM8L2E+IHwgPGEgaHJlZj1cImh0dHBzOi8vd3d3LnN1cHBseWNoYWluY2FuYWRhLmNvbS9jb2RlLW9mLWNvbmR1Y3RcIiB0YXJnZXQ9XCJfYmxhbmtcIiByZWw9XCJub29wZW5lciBub3JlZmVycmVyXCIgc3R5bGU9XCJjb2xvcjogI2ZmZmZmZjtcIj5Db2RlIG9mIENvbmR1Y3Q8L2E+PC9zcGFuPjwvZGl2PlxyXG48ZGl2IGlkPVwiZm9vdGVyLXJpZ2h0c1wiPjxzcGFuPiZjb3B5OyA8c3BhbiBpZD1cImN1clllYXJcIj48L3NwYW4+IFN1cHBseSBDaGFpbiBDYW5hZGEuIEFsbCByaWdodHMgcmVzZXJ2ZWQuPC9zcGFuPjwvZGl2PlxyXG48L2Rpdj5cclxuPC9kaXY+XHJcbjxzY3JpcHQgdHlwZT1cInRleHQvamF2YXNjcmlwdFwiPi8vIDwhW0NEQVRBW1xyXG4kKFwiI3RhZ3NjbG91ZCBzcGFuXCIpLnRleHQoXCJZb3VyIHRleHQgaGVyZVwiKTtcclxuXHQkKFwiI2N1clllYXJcIikudGV4dChuZXcgRGF0ZSgpLmdldEZ1bGxZZWFyKCkpO1xyXG4vLyBdXT48L3NjcmlwdD5cclxuXHRcclxuXHRcclxuPC9kaXY+XHJcblx0PC9kaXY+XHJcbjwvYm9keT5cclxuXHJcblxyXG48c2NyaXB0IHR5cGU9XCJ0ZXh0L2phdmFzY3JpcHRcIj5cclxuXHQkKCBkb2N1bWVudCApLnJlYWR5KGZ1bmN0aW9uKCkge1xyXG5cdFx0dmFyIGxhbmdDaGsgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShcInNjbWEtbGFuZy1zZXR0aW5nXCIpO1xyXG5cdFx0dmFyICRhbGVydDtcclxuXHRcdFxyXG5cdFx0JChcIi5sb2dpbi1jb250YWluZXIgaW5wdXQjbWVtYmVyLWxvZ2luLXBhc3N3b3JkXCIpLmtleXByZXNzKGZ1bmN0aW9uKGUpIHsgXHJcblx0XHRcdFx0aWYoZS5rZXlDb2RlPT0xMykgeyAkKFwiLmxvZ2luLWNvbnRhaW5lciAjbWVtYmVyLWxvZ2luXCIpLmNsaWNrKCk7IH0gXHJcblx0XHR9KTtcclxuXHR9KTtcclxuPC9zY3JpcHQ+XHJcblx0XHJcblxyXG48L2h0bWw+XHJcblxyXG4ifSwgImhlYWRlcnNTaXplIjogMCwgImJvZHlTaXplIjogODQ1OSwgInJlZGlyZWN0VVJMIjogIiIsICJfdHJhbnNmZXJTaXplIjogODQ1OX0sICJjYWNoZSI6IHt9LCAidGltaW5ncyI6IHsiZG5zIjogLTEsICJjb25uZWN0IjogLTEsICJzc2wiOiAtMSwgInNlbmQiOiAwLCAid2FpdCI6IDIyMi42OTIsICJyZWNlaXZlIjogNjQuMDZ9LCAicGFnZXJlZiI6ICJwYWdlQDhjOTMyZjgzMzdkOWFiYjRiOWFiOTg4OWRlYzUxYjk5IiwgInNlcnZlcklQQWRkcmVzcyI6ICJbMjYwNjo0NzAwOjIwOjo2ODFhOmVjZl0iLCAiX3NlcnZlclBvcnQiOiA0NDMsICJfc2VjdXJpdHlEZXRhaWxzIjogeyJwcm90b2NvbCI6ICJUTFMgMS4zIiwgInN1YmplY3ROYW1lIjogInN1cHBseWNoYWluY2FuYWRhLmNvbSIsICJpc3N1ZXIiOiAiV0UxIiwgInZhbGlkRnJvbSI6IDE3MjM0NzA4NDEsICJ2YWxpZFRvIjogMTczMTI0Njg0MH19LCB7InN0YXJ0ZWREYXRlVGltZSI6ICIyMDI0LTA5LTA1VDExOjA3OjIwLjI4OFoiLCAidGltZSI6IDUyMi42MTUsICJyZXF1ZXN0IjogeyJtZXRob2QiOiAiR0VUIiwgInVybCI6ICJodHRwczovL3BvcnRhbC5zdXBwbHljaGFpbmNhbmFkYS5jb20vY29tbW9uL3NjcmlwdHMvY2FsZW5kYXIvbW9vdG9vbHMuanMiLCAiaHR0cFZlcnNpb24iOiAiSFRUUC8yLjAiLCAiY29va2llcyI6IFt7Im5hbWUiOiAiSlNFU1NJT05JRCIsICJ2YWx1ZSI6ICIyNTdEOURDOTIwNDUyQTREOTMzQjhBM0NEQTlCNkJEMyJ9XSwgImhlYWRlcnMiOiBbeyJuYW1lIjogIjphdXRob3JpdHkiLCAidmFsdWUiOiAicG9ydGFsLnN1cHBseWNoYWluY2FuYWRhLmNvbSJ9LCB7Im5hbWUiOiAiOm1ldGhvZCIsICJ2YWx1ZSI6ICJHRVQifSwgeyJuYW1lIjogIjpwYXRoIiwgInZhbHVlIjogIi9jb21tb24vc2NyaXB0cy9jYWxlbmRhci9tb290b29scy5qcyJ9LCB7Im5hbWUiOiAiOnNjaGVtZSIsICJ2YWx1ZSI6ICJodHRwcyJ9LCB7Im5hbWUiOiAiYWNjZXB0IiwgInZhbHVlIjogIiovKiJ9LCB7Im5hbWUiOiAiYWNjZXB0LWVuY29kaW5nIiwgInZhbHVlIjogImd6aXAsIGRlZmxhdGUsIGJyLCB6c3RkIn0sIHsibmFtZSI6ICJhY2NlcHQtbGFuZ3VhZ2UiLCAidmFsdWUiOiAiZW4tVVMifSwgeyJuYW1lIjogImNvb2tpZSIsICJ2YWx1ZSI6ICJKU0VTU0lPTklEPTI1N0Q5REM5MjA0NTJBNEQ5MzNCOEEzQ0RBOUI2QkQzIn0sIHsibmFtZSI6ICJwcmlvcml0eSIsICJ2YWx1ZSI6ICJ1PTEifSwgeyJuYW1lIjogInJlZmVyZXIiLCAidmFsdWUiOiAiaHR0cHM6Ly9wb3J0YWwuc3VwcGx5Y2hhaW5jYW5hZGEuY29tL2VuL3BvcnRhbGxvZ2luIn0sIHsibmFtZSI6ICJzZWMtY2gtdWEiLCAidmFsdWUiOiAiXCJOb3Q7QT1CcmFuZFwiO3Y9XCIyNFwiLCBcIkNocm9taXVtXCI7dj1cIjEyOFwiIn0sIHsibmFtZSI6ICJzZWMtY2gtdWEtbW9iaWxlIiwgInZhbHVlIjogIj8wIn0sIHsibmFtZSI6ICJzZWMtY2gtdWEtcGxhdGZvcm0iLCAidmFsdWUiOiAiXCJXaW5kb3dzXCIifSwgeyJuYW1lIjogInNlYy1mZXRjaC1kZXN0IiwgInZhbHVlIjogInNjcmlwdCJ9LCB7Im5hbWUiOiAic2VjLWZldGNoLW1vZGUiLCAidmFsdWUiOiAibm8tY29ycyJ9LCB7Im5hbWUiOiAic2VjLWZldGNoLXNpdGUiLCAidmFsdWUiOiAic2FtZS1vcmlnaW4ifSwgeyJuYW1lIjogInVzZXItYWdlbnQiLCAidmFsdWUiOiAiTW96aWxsYS81LjAgKFdpbmRvd3MgTlQgMTAuMDsgV2luNjQ7IHg2NCkgQXBwbGVXZWJLaXQvNTM3LjM2IChLSFRNTCwgbGlrZSBHZWNrbykgQ2hyb21lLzEyOC4wLjY2MTMuMTggU2FmYXJpLzUzNy4zNiJ9XSwgInF1ZXJ5U3RyaW5nIjogW10sICJoZWFkZXJzU2l6ZSI6IDY5MCwgImJvZHlTaXplIjogMH0sICJyZXNwb25zZSI6IHsic3RhdHVzIjogMjAwLCAic3RhdHVzVGV4dCI6ICIiLCAiaHR0cFZlcnNpb24iOiAiSFRUUC8yLjAiLCAiY29va2llcyI6IFtdLCAiaGVhZGVycyI6IFt7Im5hbWUiOiAiY2FjaGUtY29udHJvbCIsICJ2YWx1ZSI6ICJtYXgtYWdlPTE0NDAwIn0sIHsibmFtZSI6ICJjZi1jYWNoZS1zdGF0dXMiLCAidmFsdWUiOiAiTUlTUyJ9LCB7Im5hbWUiOiAiY2YtcmF5IiwgInZhbHVlIjogIjhiZTVjMTRiZDg0MjcxYzQtRlJBIn0sIHsibmFtZSI6ICJjb250ZW50LWVuY29kaW5nIiwgInZhbHVlIjogImJyIn0sIHsibmFtZSI6ICJjb250ZW50LXR5cGUiLCAidmFsdWUiOiAiYXBwbGljYXRpb24vamF2YXNjcmlwdCJ9LCB7Im5hbWUiOiAiZGF0ZSIsICJ2YWx1ZSI6ICJUaHUsIDA1IFNlcCAyMDI0IDExOjA3OjIwIEdNVCJ9LCB7Im5hbWUiOiAiZXRhZyIsICJ2YWx1ZSI6ICJXL1wiNDMyMDMtMTY4MTMzMzQyMjAwMFwiIn0sIHsibmFtZSI6ICJsYXN0LW1vZGlmaWVkIiwgInZhbHVlIjogIldlZCwgMTIgQXByIDIwMjMgMjE6MDM6NDIgR01UIn0sIHsibmFtZSI6ICJuZWwiLCAidmFsdWUiOiAie1wic3VjY2Vzc19mcmFjdGlvblwiOjAsXCJyZXBvcnRfdG9cIjpcImNmLW5lbFwiLFwibWF4X2FnZVwiOjYwNDgwMH0ifSwgeyJuYW1lIjogInJlcG9ydC10byIsICJ2YWx1ZSI6ICJ7XCJlbmRwb2ludHNcIjpbe1widXJsXCI6XCJodHRwczpcXC9cXC9hLm5lbC5jbG91ZGZsYXJlLmNvbVxcL3JlcG9ydFxcL3Y0P3M9JTJGZ3NtZ2gxdW5zeVklMkJNNUtGdWVpeUQ1ODV0eHV1N1hTakpmNHclMkZDWiUyRk9GYkpncmVwTXRHWjExWGt5OG9tUVNSUHVyVGROSUdsSFhTRGVDJTJGS3VqaUFmRlFpSWRodWQxN3NPOHJNQlB2MndzcG1mNkRtcVY1SkJJVWZUQmt3OGZ2VndDJTJGajJXZG5yRUJnOWZZbGxXUkMlMkI1ZUlJTjdxRzc1bEZBJTNEXCJ9XSxcImdyb3VwXCI6XCJjZi1uZWxcIixcIm1heF9hZ2VcIjo2MDQ4MDB9In0sIHsibmFtZSI6ICJzZXJ2ZXIiLCAidmFsdWUiOiAiY2xvdWRmbGFyZSJ9LCB7Im5hbWUiOiAic3RyaWN0LXRyYW5zcG9ydC1zZWN1cml0eSIsICJ2YWx1ZSI6ICJtYXgtYWdlPTYzMDcyMDAwOyBpbmNsdWRlU3ViZG9tYWluczsgcHJlbG9hZCJ9LCB7Im5hbWUiOiAidmFyeSIsICJ2YWx1ZSI6ICJBY2NlcHQtRW5jb2RpbmcifV0sICJjb250ZW50IjogeyJzaXplIjogNDMyMDMsICJtaW1lVHlwZSI6ICJhcHBsaWNhdGlvbi9qYXZhc2NyaXB0IiwgImNvbXByZXNzaW9uIjogMzAxOTksICJ0ZXh0IjogIi8vTW9vVG9vbHMsIE15IE9iamVjdCBPcmllbnRlZCBKYXZhc2NyaXB0IFRvb2xzLiBDb3B5cmlnaHQgKGMpIDIwMDYtMjAwNyBWYWxlcmlvIFByb2lldHRpLCA8aHR0cDovL21hZDRtaWxrLm5ldD4sIE1JVCBTdHlsZSBMaWNlbnNlLlxyXG5cclxudmFyIE1vb1Rvb2xzPXt2ZXJzaW9uOicxLjExJ307ZnVuY3Rpb24gJGRlZmluZWQob2JqKXtyZXR1cm4ob2JqIT11bmRlZmluZWQpO307ZnVuY3Rpb24gJHR5cGUob2JqKXtpZighJGRlZmluZWQob2JqKSlyZXR1cm4gZmFsc2U7aWYob2JqLmh0bWxFbGVtZW50KXJldHVybidlbGVtZW50Jzt2YXIgdHlwZT10eXBlb2Ygb2JqO2lmKHR5cGU9PSdvYmplY3QnJiZvYmoubm9kZU5hbWUpe3N3aXRjaChvYmoubm9kZVR5cGUpe2Nhc2UgMTpyZXR1cm4nZWxlbWVudCc7Y2FzZSAzOnJldHVybigvXFxTLykudGVzdChvYmoubm9kZVZhbHVlKT8ndGV4dG5vZGUnOid3aGl0ZXNwYWNlJzt9fVxyXG5pZih0eXBlPT0nb2JqZWN0J3x8dHlwZT09J2Z1bmN0aW9uJyl7c3dpdGNoKG9iai5jb25zdHJ1Y3Rvcil7Y2FzZSBBcnJheTpyZXR1cm4nYXJyYXknO2Nhc2UgUmVnRXhwOnJldHVybidyZWdleHAnO2Nhc2UgQ2xhc3M6cmV0dXJuJ2NsYXNzJzt9XHJcbmlmKHR5cGVvZiBvYmoubGVuZ3RoPT0nbnVtYmVyJyl7aWYob2JqLml0ZW0pcmV0dXJuJ2NvbGxlY3Rpb24nO2lmKG9iai5jYWxsZWUpcmV0dXJuJ2FyZ3VtZW50cyc7fX1cclxucmV0dXJuIHR5cGU7fTtmdW5jdGlvbiAkbWVyZ2UoKXt2YXIgbWl4PXt9O2Zvcih2YXIgaT0wO2k8YXJndW1lbnRzLmxlbmd0aDtpKyspe2Zvcih2YXIgcHJvcGVydHkgaW4gYXJndW1lbnRzW2ldKXt2YXIgYXA9YXJndW1lbnRzW2ldW3Byb3BlcnR5XTt2YXIgbXA9bWl4W3Byb3BlcnR5XTtpZihtcCYmJHR5cGUoYXApPT0nb2JqZWN0JyYmJHR5cGUobXApPT0nb2JqZWN0JyltaXhbcHJvcGVydHldPSRtZXJnZShtcCxhcCk7ZWxzZSBtaXhbcHJvcGVydHldPWFwO319XHJcbnJldHVybiBtaXg7fTt2YXIgJGV4dGVuZD1mdW5jdGlvbigpe3ZhciBhcmdzPWFyZ3VtZW50cztpZighYXJnc1sxXSlhcmdzPVt0aGlzLGFyZ3NbMF1dO2Zvcih2YXIgcHJvcGVydHkgaW4gYXJnc1sxXSlhcmdzWzBdW3Byb3BlcnR5XT1hcmdzWzFdW3Byb3BlcnR5XTtyZXR1cm4gYXJnc1swXTt9O3ZhciAkbmF0aXZlPWZ1bmN0aW9uKCl7Zm9yKHZhciBpPTAsbD1hcmd1bWVudHMubGVuZ3RoO2k8bDtpKyspe2FyZ3VtZW50c1tpXS5leHRlbmQ9ZnVuY3Rpb24ocHJvcHMpe2Zvcih2YXIgcHJvcCBpbiBwcm9wcyl7aWYoIXRoaXMucHJvdG90eXBlW3Byb3BdKXRoaXMucHJvdG90eXBlW3Byb3BdPXByb3BzW3Byb3BdO2lmKCF0aGlzW3Byb3BdKXRoaXNbcHJvcF09JG5hdGl2ZS5nZW5lcmljKHByb3ApO319O319OyRuYXRpdmUuZ2VuZXJpYz1mdW5jdGlvbihwcm9wKXtyZXR1cm4gZnVuY3Rpb24oYmluZCl7cmV0dXJuIHRoaXMucHJvdG90eXBlW3Byb3BdLmFwcGx5KGJpbmQsQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLDEpKTt9O307JG5hdGl2ZShGdW5jdGlvbixBcnJheSxTdHJpbmcsTnVtYmVyKTtmdW5jdGlvbiAkY2hrKG9iail7cmV0dXJuISEob2JqfHxvYmo9PT0wKTt9O2Z1bmN0aW9uICRwaWNrKG9iaixwaWNrZWQpe3JldHVybiAkZGVmaW5lZChvYmopP29iajpwaWNrZWQ7fTtmdW5jdGlvbiAkcmFuZG9tKG1pbixtYXgpe3JldHVybiBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkqKG1heC1taW4rMSkrbWluKTt9O2Z1bmN0aW9uICR0aW1lKCl7cmV0dXJuIG5ldyBEYXRlKCkuZ2V0VGltZSgpO307ZnVuY3Rpb24gJGNsZWFyKHRpbWVyKXtjbGVhclRpbWVvdXQodGltZXIpO2NsZWFySW50ZXJ2YWwodGltZXIpO3JldHVybiBudWxsO307dmFyIEFic3RyYWN0PWZ1bmN0aW9uKG9iail7b2JqPW9ianx8e307b2JqLmV4dGVuZD0kZXh0ZW5kO3JldHVybiBvYmo7fTt2YXIgV2luZG93PW5ldyBBYnN0cmFjdCh3aW5kb3cpO3ZhciBEb2N1bWVudD1uZXcgQWJzdHJhY3QoZG9jdW1lbnQpO2RvY3VtZW50LmhlYWQ9ZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2hlYWQnKVswXTt3aW5kb3cueHBhdGg9ISEoZG9jdW1lbnQuZXZhbHVhdGUpO2lmKHdpbmRvdy5BY3RpdmVYT2JqZWN0KXdpbmRvdy5pZT13aW5kb3dbd2luZG93LlhNTEh0dHBSZXF1ZXN0PydpZTcnOidpZTYnXT10cnVlO2Vsc2UgaWYoZG9jdW1lbnQuY2hpbGROb2RlcyYmIWRvY3VtZW50LmFsbCYmIW5hdmlnYXRvci50YWludEVuYWJsZWQpd2luZG93LndlYmtpdD13aW5kb3dbd2luZG93LnhwYXRoPyd3ZWJraXQ0MjAnOid3ZWJraXQ0MTknXT10cnVlO2Vsc2UgaWYoZG9jdW1lbnQuZ2V0Qm94T2JqZWN0Rm9yIT1udWxsKXdpbmRvdy5nZWNrbz10cnVlO3dpbmRvdy5raHRtbD13aW5kb3cud2Via2l0O09iamVjdC5leHRlbmQ9JGV4dGVuZDtpZih0eXBlb2YgSFRNTEVsZW1lbnQ9PSd1bmRlZmluZWQnKXt2YXIgSFRNTEVsZW1lbnQ9ZnVuY3Rpb24oKXt9O2lmKHdpbmRvdy53ZWJraXQpZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImlmcmFtZVwiKTtIVE1MRWxlbWVudC5wcm90b3R5cGU9KHdpbmRvdy53ZWJraXQpP3dpbmRvd1tcIltbRE9NRWxlbWVudC5wcm90b3R5cGVdXVwiXTp7fTt9XHJcbkhUTUxFbGVtZW50LnByb3RvdHlwZS5odG1sRWxlbWVudD1mdW5jdGlvbigpe307aWYod2luZG93LmllNil0cnl7ZG9jdW1lbnQuZXhlY0NvbW1hbmQoXCJCYWNrZ3JvdW5kSW1hZ2VDYWNoZVwiLGZhbHNlLHRydWUpO31jYXRjaChlKXt9O3ZhciBDbGFzcz1mdW5jdGlvbihwcm9wZXJ0aWVzKXt2YXIga2xhc3M9ZnVuY3Rpb24oKXtyZXR1cm4oYXJndW1lbnRzWzBdIT09bnVsbCYmdGhpcy5pbml0aWFsaXplJiYkdHlwZSh0aGlzLmluaXRpYWxpemUpPT0nZnVuY3Rpb24nKT90aGlzLmluaXRpYWxpemUuYXBwbHkodGhpcyxhcmd1bWVudHMpOnRoaXM7fTskZXh0ZW5kKGtsYXNzLHRoaXMpO2tsYXNzLnByb3RvdHlwZT1wcm9wZXJ0aWVzO2tsYXNzLmNvbnN0cnVjdG9yPUNsYXNzO3JldHVybiBrbGFzczt9O0NsYXNzLmVtcHR5PWZ1bmN0aW9uKCl7fTtDbGFzcy5wcm90b3R5cGU9e2V4dGVuZDpmdW5jdGlvbihwcm9wZXJ0aWVzKXt2YXIgcHJvdG89bmV3IHRoaXMobnVsbCk7Zm9yKHZhciBwcm9wZXJ0eSBpbiBwcm9wZXJ0aWVzKXt2YXIgcHA9cHJvdG9bcHJvcGVydHldO3Byb3RvW3Byb3BlcnR5XT1DbGFzcy5NZXJnZShwcCxwcm9wZXJ0aWVzW3Byb3BlcnR5XSk7fVxyXG5yZXR1cm4gbmV3IENsYXNzKHByb3RvKTt9LGltcGxlbWVudDpmdW5jdGlvbigpe2Zvcih2YXIgaT0wLGw9YXJndW1lbnRzLmxlbmd0aDtpPGw7aSsrKSRleHRlbmQodGhpcy5wcm90b3R5cGUsYXJndW1lbnRzW2ldKTt9fTtDbGFzcy5NZXJnZT1mdW5jdGlvbihwcmV2aW91cyxjdXJyZW50KXtpZihwcmV2aW91cyYmcHJldmlvdXMhPWN1cnJlbnQpe3ZhciB0eXBlPSR0eXBlKGN1cnJlbnQpO2lmKHR5cGUhPSR0eXBlKHByZXZpb3VzKSlyZXR1cm4gY3VycmVudDtzd2l0Y2godHlwZSl7Y2FzZSdmdW5jdGlvbic6dmFyIG1lcmdlZD1mdW5jdGlvbigpe3RoaXMucGFyZW50PWFyZ3VtZW50cy5jYWxsZWUucGFyZW50O3JldHVybiBjdXJyZW50LmFwcGx5KHRoaXMsYXJndW1lbnRzKTt9O21lcmdlZC5wYXJlbnQ9cHJldmlvdXM7cmV0dXJuIG1lcmdlZDtjYXNlJ29iamVjdCc6cmV0dXJuICRtZXJnZShwcmV2aW91cyxjdXJyZW50KTt9fVxyXG5yZXR1cm4gY3VycmVudDt9O3ZhciBDaGFpbj1uZXcgQ2xhc3Moe2NoYWluOmZ1bmN0aW9uKGZuKXt0aGlzLmNoYWlucz10aGlzLmNoYWluc3x8W107dGhpcy5jaGFpbnMucHVzaChmbik7cmV0dXJuIHRoaXM7fSxjYWxsQ2hhaW46ZnVuY3Rpb24oKXtpZih0aGlzLmNoYWlucyYmdGhpcy5jaGFpbnMubGVuZ3RoKXRoaXMuY2hhaW5zLnNoaWZ0KCkuZGVsYXkoMTAsdGhpcyk7fSxjbGVhckNoYWluOmZ1bmN0aW9uKCl7dGhpcy5jaGFpbnM9W107fX0pO3ZhciBFdmVudHM9bmV3IENsYXNzKHthZGRFdmVudDpmdW5jdGlvbih0eXBlLGZuKXtpZihmbiE9Q2xhc3MuZW1wdHkpe3RoaXMuJGV2ZW50cz10aGlzLiRldmVudHN8fHt9O3RoaXMuJGV2ZW50c1t0eXBlXT10aGlzLiRldmVudHNbdHlwZV18fFtdO3RoaXMuJGV2ZW50c1t0eXBlXS5pbmNsdWRlKGZuKTt9XHJcbnJldHVybiB0aGlzO30sZmlyZUV2ZW50OmZ1bmN0aW9uKHR5cGUsYXJncyxkZWxheSl7aWYodGhpcy4kZXZlbnRzJiZ0aGlzLiRldmVudHNbdHlwZV0pe3RoaXMuJGV2ZW50c1t0eXBlXS5lYWNoKGZ1bmN0aW9uKGZuKXtmbi5jcmVhdGUoeydiaW5kJzp0aGlzLCdkZWxheSc6ZGVsYXksJ2FyZ3VtZW50cyc6YXJnc30pKCk7fSx0aGlzKTt9XHJcbnJldHVybiB0aGlzO30scmVtb3ZlRXZlbnQ6ZnVuY3Rpb24odHlwZSxmbil7aWYodGhpcy4kZXZlbnRzJiZ0aGlzLiRldmVudHNbdHlwZV0pdGhpcy4kZXZlbnRzW3R5cGVdLnJlbW92ZShmbik7cmV0dXJuIHRoaXM7fX0pO3ZhciBPcHRpb25zPW5ldyBDbGFzcyh7c2V0T3B0aW9uczpmdW5jdGlvbigpe3RoaXMub3B0aW9ucz0kbWVyZ2UuYXBwbHkobnVsbCxbdGhpcy5vcHRpb25zXS5leHRlbmQoYXJndW1lbnRzKSk7aWYodGhpcy5hZGRFdmVudCl7Zm9yKHZhciBvcHRpb24gaW4gdGhpcy5vcHRpb25zKXtpZigkdHlwZSh0aGlzLm9wdGlvbnNbb3B0aW9uXT09J2Z1bmN0aW9uJykmJigvXm9uW0EtWl0vKS50ZXN0KG9wdGlvbikpdGhpcy5hZGRFdmVudChvcHRpb24sdGhpcy5vcHRpb25zW29wdGlvbl0pO319XHJcbnJldHVybiB0aGlzO319KTtBcnJheS5leHRlbmQoe2ZvckVhY2g6ZnVuY3Rpb24oZm4sYmluZCl7Zm9yKHZhciBpPTAsaj10aGlzLmxlbmd0aDtpPGo7aSsrKWZuLmNhbGwoYmluZCx0aGlzW2ldLGksdGhpcyk7fSxmaWx0ZXI6ZnVuY3Rpb24oZm4sYmluZCl7dmFyIHJlc3VsdHM9W107Zm9yKHZhciBpPTAsaj10aGlzLmxlbmd0aDtpPGo7aSsrKXtpZihmbi5jYWxsKGJpbmQsdGhpc1tpXSxpLHRoaXMpKXJlc3VsdHMucHVzaCh0aGlzW2ldKTt9XHJcbnJldHVybiByZXN1bHRzO30sbWFwOmZ1bmN0aW9uKGZuLGJpbmQpe3ZhciByZXN1bHRzPVtdO2Zvcih2YXIgaT0wLGo9dGhpcy5sZW5ndGg7aTxqO2krKylyZXN1bHRzW2ldPWZuLmNhbGwoYmluZCx0aGlzW2ldLGksdGhpcyk7cmV0dXJuIHJlc3VsdHM7fSxldmVyeTpmdW5jdGlvbihmbixiaW5kKXtmb3IodmFyIGk9MCxqPXRoaXMubGVuZ3RoO2k8ajtpKyspe2lmKCFmbi5jYWxsKGJpbmQsdGhpc1tpXSxpLHRoaXMpKXJldHVybiBmYWxzZTt9XHJcbnJldHVybiB0cnVlO30sc29tZTpmdW5jdGlvbihmbixiaW5kKXtmb3IodmFyIGk9MCxqPXRoaXMubGVuZ3RoO2k8ajtpKyspe2lmKGZuLmNhbGwoYmluZCx0aGlzW2ldLGksdGhpcykpcmV0dXJuIHRydWU7fVxyXG5yZXR1cm4gZmFsc2U7fSxpbmRleE9mOmZ1bmN0aW9uKGl0ZW0sZnJvbSl7dmFyIGxlbj10aGlzLmxlbmd0aDtmb3IodmFyIGk9KGZyb208MCk/TWF0aC5tYXgoMCxsZW4rZnJvbSk6ZnJvbXx8MDtpPGxlbjtpKyspe2lmKHRoaXNbaV09PT1pdGVtKXJldHVybiBpO31cclxucmV0dXJuLTE7fSxjb3B5OmZ1bmN0aW9uKHN0YXJ0LGxlbmd0aCl7c3RhcnQ9c3RhcnR8fDA7aWYoc3RhcnQ8MClzdGFydD10aGlzLmxlbmd0aCtzdGFydDtsZW5ndGg9bGVuZ3RofHwodGhpcy5sZW5ndGgtc3RhcnQpO3ZhciBuZXdBcnJheT1bXTtmb3IodmFyIGk9MDtpPGxlbmd0aDtpKyspbmV3QXJyYXlbaV09dGhpc1tzdGFydCsrXTtyZXR1cm4gbmV3QXJyYXk7fSxyZW1vdmU6ZnVuY3Rpb24oaXRlbSl7dmFyIGk9MDt2YXIgbGVuPXRoaXMubGVuZ3RoO3doaWxlKGk8bGVuKXtpZih0aGlzW2ldPT09aXRlbSl7dGhpcy5zcGxpY2UoaSwxKTtsZW4tLTt9ZWxzZXtpKys7fX1cclxucmV0dXJuIHRoaXM7fSxjb250YWluczpmdW5jdGlvbihpdGVtLGZyb20pe3JldHVybiB0aGlzLmluZGV4T2YoaXRlbSxmcm9tKSE9LTE7fSxhc3NvY2lhdGU6ZnVuY3Rpb24oa2V5cyl7dmFyIG9iaj17fSxsZW5ndGg9TWF0aC5taW4odGhpcy5sZW5ndGgsa2V5cy5sZW5ndGgpO2Zvcih2YXIgaT0wO2k8bGVuZ3RoO2krKylvYmpba2V5c1tpXV09dGhpc1tpXTtyZXR1cm4gb2JqO30sZXh0ZW5kOmZ1bmN0aW9uKGFycmF5KXtmb3IodmFyIGk9MCxqPWFycmF5Lmxlbmd0aDtpPGo7aSsrKXRoaXMucHVzaChhcnJheVtpXSk7cmV0dXJuIHRoaXM7fSxtZXJnZTpmdW5jdGlvbihhcnJheSl7Zm9yKHZhciBpPTAsbD1hcnJheS5sZW5ndGg7aTxsO2krKyl0aGlzLmluY2x1ZGUoYXJyYXlbaV0pO3JldHVybiB0aGlzO30saW5jbHVkZTpmdW5jdGlvbihpdGVtKXtpZighdGhpcy5jb250YWlucyhpdGVtKSl0aGlzLnB1c2goaXRlbSk7cmV0dXJuIHRoaXM7fSxnZXRSYW5kb206ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc1skcmFuZG9tKDAsdGhpcy5sZW5ndGgtMSldfHxudWxsO30sZ2V0TGFzdDpmdW5jdGlvbigpe3JldHVybiB0aGlzW3RoaXMubGVuZ3RoLTFdfHxudWxsO319KTtBcnJheS5wcm90b3R5cGUuZWFjaD1BcnJheS5wcm90b3R5cGUuZm9yRWFjaDtBcnJheS5lYWNoPUFycmF5LmZvckVhY2g7ZnVuY3Rpb24gJEEoYXJyYXkpe3JldHVybiBBcnJheS5jb3B5KGFycmF5KTt9O2Z1bmN0aW9uICRlYWNoKGl0ZXJhYmxlLGZuLGJpbmQpe2lmKGl0ZXJhYmxlJiZ0eXBlb2YgaXRlcmFibGUubGVuZ3RoPT0nbnVtYmVyJyYmJHR5cGUoaXRlcmFibGUpIT0nb2JqZWN0Jyl7QXJyYXkuZm9yRWFjaChpdGVyYWJsZSxmbixiaW5kKTt9ZWxzZXtmb3IodmFyIG5hbWUgaW4gaXRlcmFibGUpZm4uY2FsbChiaW5kfHxpdGVyYWJsZSxpdGVyYWJsZVtuYW1lXSxuYW1lKTt9fTtBcnJheS5wcm90b3R5cGUudGVzdD1BcnJheS5wcm90b3R5cGUuY29udGFpbnM7U3RyaW5nLmV4dGVuZCh7dGVzdDpmdW5jdGlvbihyZWdleCxwYXJhbXMpe3JldHVybigoJHR5cGUocmVnZXgpPT0nc3RyaW5nJyk/bmV3IFJlZ0V4cChyZWdleCxwYXJhbXMpOnJlZ2V4KS50ZXN0KHRoaXMpO30sdG9JbnQ6ZnVuY3Rpb24oKXtyZXR1cm4gcGFyc2VJbnQodGhpcywxMCk7fSx0b0Zsb2F0OmZ1bmN0aW9uKCl7cmV0dXJuIHBhcnNlRmxvYXQodGhpcyk7fSxjYW1lbENhc2U6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yZXBsYWNlKC8tXFxEL2csZnVuY3Rpb24obWF0Y2gpe3JldHVybiBtYXRjaC5jaGFyQXQoMSkudG9VcHBlckNhc2UoKTt9KTt9LGh5cGhlbmF0ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnJlcGxhY2UoL1xcd1tBLVpdL2csZnVuY3Rpb24obWF0Y2gpe3JldHVybihtYXRjaC5jaGFyQXQoMCkrJy0nK21hdGNoLmNoYXJBdCgxKS50b0xvd2VyQ2FzZSgpKTt9KTt9LGNhcGl0YWxpemU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yZXBsYWNlKC9cXGJbYS16XS9nLGZ1bmN0aW9uKG1hdGNoKXtyZXR1cm4gbWF0Y2gudG9VcHBlckNhc2UoKTt9KTt9LHRyaW06ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yZXBsYWNlKC9eXFxzK3xcXHMrJC9nLCcnKTt9LGNsZWFuOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmVwbGFjZSgvXFxzezIsfS9nLCcgJykudHJpbSgpO30scmdiVG9IZXg6ZnVuY3Rpb24oYXJyYXkpe3ZhciByZ2I9dGhpcy5tYXRjaCgvXFxkezEsM30vZyk7cmV0dXJuKHJnYik/cmdiLnJnYlRvSGV4KGFycmF5KTpmYWxzZTt9LGhleFRvUmdiOmZ1bmN0aW9uKGFycmF5KXt2YXIgaGV4PXRoaXMubWF0Y2goL14jPyhcXHd7MSwyfSkoXFx3ezEsMn0pKFxcd3sxLDJ9KSQvKTtyZXR1cm4oaGV4KT9oZXguc2xpY2UoMSkuaGV4VG9SZ2IoYXJyYXkpOmZhbHNlO30sY29udGFpbnM6ZnVuY3Rpb24oc3RyaW5nLHMpe3JldHVybihzKT8ocyt0aGlzK3MpLmluZGV4T2YocytzdHJpbmcrcyk+LTE6dGhpcy5pbmRleE9mKHN0cmluZyk+LTE7fSxlc2NhcGVSZWdFeHA6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yZXBsYWNlKC8oWy4qKz9eJHt9KCl8W1xcXVxcL1xcXFxdKS9nLCdcXFxcJDEnKTt9fSk7QXJyYXkuZXh0ZW5kKHtyZ2JUb0hleDpmdW5jdGlvbihhcnJheSl7aWYodGhpcy5sZW5ndGg8MylyZXR1cm4gZmFsc2U7aWYodGhpcy5sZW5ndGg9PTQmJnRoaXNbM109PTAmJiFhcnJheSlyZXR1cm4ndHJhbnNwYXJlbnQnO3ZhciBoZXg9W107Zm9yKHZhciBpPTA7aTwzO2krKyl7dmFyIGJpdD0odGhpc1tpXS0wKS50b1N0cmluZygxNik7aGV4LnB1c2goKGJpdC5sZW5ndGg9PTEpPycwJytiaXQ6Yml0KTt9XHJcbnJldHVybiBhcnJheT9oZXg6JyMnK2hleC5qb2luKCcnKTt9LGhleFRvUmdiOmZ1bmN0aW9uKGFycmF5KXtpZih0aGlzLmxlbmd0aCE9MylyZXR1cm4gZmFsc2U7dmFyIHJnYj1bXTtmb3IodmFyIGk9MDtpPDM7aSsrKXtyZ2IucHVzaChwYXJzZUludCgodGhpc1tpXS5sZW5ndGg9PTEpP3RoaXNbaV0rdGhpc1tpXTp0aGlzW2ldLDE2KSk7fVxyXG5yZXR1cm4gYXJyYXk/cmdiOidyZ2IoJytyZ2Iuam9pbignLCcpKycpJzt9fSk7RnVuY3Rpb24uZXh0ZW5kKHtjcmVhdGU6ZnVuY3Rpb24ob3B0aW9ucyl7dmFyIGZuPXRoaXM7b3B0aW9ucz0kbWVyZ2UoeydiaW5kJzpmbiwnZXZlbnQnOmZhbHNlLCdhcmd1bWVudHMnOm51bGwsJ2RlbGF5JzpmYWxzZSwncGVyaW9kaWNhbCc6ZmFsc2UsJ2F0dGVtcHQnOmZhbHNlfSxvcHRpb25zKTtpZigkY2hrKG9wdGlvbnMuYXJndW1lbnRzKSYmJHR5cGUob3B0aW9ucy5hcmd1bWVudHMpIT0nYXJyYXknKW9wdGlvbnMuYXJndW1lbnRzPVtvcHRpb25zLmFyZ3VtZW50c107cmV0dXJuIGZ1bmN0aW9uKGV2ZW50KXt2YXIgYXJncztpZihvcHRpb25zLmV2ZW50KXtldmVudD1ldmVudHx8d2luZG93LmV2ZW50O2FyZ3M9WyhvcHRpb25zLmV2ZW50PT09dHJ1ZSk/ZXZlbnQ6bmV3IG9wdGlvbnMuZXZlbnQoZXZlbnQpXTtpZihvcHRpb25zLmFyZ3VtZW50cylhcmdzLmV4dGVuZChvcHRpb25zLmFyZ3VtZW50cyk7fVxyXG5lbHNlIGFyZ3M9b3B0aW9ucy5hcmd1bWVudHN8fGFyZ3VtZW50czt2YXIgcmV0dXJucz1mdW5jdGlvbigpe3JldHVybiBmbi5hcHBseSgkcGljayhvcHRpb25zLmJpbmQsZm4pLGFyZ3MpO307aWYob3B0aW9ucy5kZWxheSlyZXR1cm4gc2V0VGltZW91dChyZXR1cm5zLG9wdGlvbnMuZGVsYXkpO2lmKG9wdGlvbnMucGVyaW9kaWNhbClyZXR1cm4gc2V0SW50ZXJ2YWwocmV0dXJucyxvcHRpb25zLnBlcmlvZGljYWwpO2lmKG9wdGlvbnMuYXR0ZW1wdCl0cnl7cmV0dXJuIHJldHVybnMoKTt9Y2F0Y2goZXJyKXtyZXR1cm4gZmFsc2U7fTtyZXR1cm4gcmV0dXJucygpO307fSxwYXNzOmZ1bmN0aW9uKGFyZ3MsYmluZCl7cmV0dXJuIHRoaXMuY3JlYXRlKHsnYXJndW1lbnRzJzphcmdzLCdiaW5kJzpiaW5kfSk7fSxhdHRlbXB0OmZ1bmN0aW9uKGFyZ3MsYmluZCl7cmV0dXJuIHRoaXMuY3JlYXRlKHsnYXJndW1lbnRzJzphcmdzLCdiaW5kJzpiaW5kLCdhdHRlbXB0Jzp0cnVlfSkoKTt9LGJpbmQ6ZnVuY3Rpb24oYmluZCxhcmdzKXtyZXR1cm4gdGhpcy5jcmVhdGUoeydiaW5kJzpiaW5kLCdhcmd1bWVudHMnOmFyZ3N9KTt9LGJpbmRBc0V2ZW50TGlzdGVuZXI6ZnVuY3Rpb24oYmluZCxhcmdzKXtyZXR1cm4gdGhpcy5jcmVhdGUoeydiaW5kJzpiaW5kLCdldmVudCc6dHJ1ZSwnYXJndW1lbnRzJzphcmdzfSk7fSxkZWxheTpmdW5jdGlvbihkZWxheSxiaW5kLGFyZ3Mpe3JldHVybiB0aGlzLmNyZWF0ZSh7J2RlbGF5JzpkZWxheSwnYmluZCc6YmluZCwnYXJndW1lbnRzJzphcmdzfSkoKTt9LHBlcmlvZGljYWw6ZnVuY3Rpb24oaW50ZXJ2YWwsYmluZCxhcmdzKXtyZXR1cm4gdGhpcy5jcmVhdGUoeydwZXJpb2RpY2FsJzppbnRlcnZhbCwnYmluZCc6YmluZCwnYXJndW1lbnRzJzphcmdzfSkoKTt9fSk7TnVtYmVyLmV4dGVuZCh7dG9JbnQ6ZnVuY3Rpb24oKXtyZXR1cm4gcGFyc2VJbnQodGhpcyk7fSx0b0Zsb2F0OmZ1bmN0aW9uKCl7cmV0dXJuIHBhcnNlRmxvYXQodGhpcyk7fSxsaW1pdDpmdW5jdGlvbihtaW4sbWF4KXtyZXR1cm4gTWF0aC5taW4obWF4LE1hdGgubWF4KG1pbix0aGlzKSk7fSxyb3VuZDpmdW5jdGlvbihwcmVjaXNpb24pe3ByZWNpc2lvbj1NYXRoLnBvdygxMCxwcmVjaXNpb258fDApO3JldHVybiBNYXRoLnJvdW5kKHRoaXMqcHJlY2lzaW9uKS9wcmVjaXNpb247fSx0aW1lczpmdW5jdGlvbihmbil7Zm9yKHZhciBpPTA7aTx0aGlzO2krKylmbihpKTt9fSk7dmFyIEVsZW1lbnQ9bmV3IENsYXNzKHtpbml0aWFsaXplOmZ1bmN0aW9uKGVsLHByb3BzKXtpZigkdHlwZShlbCk9PSdzdHJpbmcnKXtpZih3aW5kb3cuaWUmJnByb3BzJiYocHJvcHMubmFtZXx8cHJvcHMudHlwZSkpe3ZhciBuYW1lPShwcm9wcy5uYW1lKT8nIG5hbWU9XCInK3Byb3BzLm5hbWUrJ1wiJzonJzt2YXIgdHlwZT0ocHJvcHMudHlwZSk/JyB0eXBlPVwiJytwcm9wcy50eXBlKydcIic6Jyc7ZGVsZXRlIHByb3BzLm5hbWU7ZGVsZXRlIHByb3BzLnR5cGU7ZWw9JzwnK2VsK25hbWUrdHlwZSsnPic7fVxyXG5lbD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KGVsKTt9XHJcbmVsPSQoZWwpO3JldHVybighcHJvcHN8fCFlbCk/ZWw6ZWwuc2V0KHByb3BzKTt9fSk7dmFyIEVsZW1lbnRzPW5ldyBDbGFzcyh7aW5pdGlhbGl6ZTpmdW5jdGlvbihlbGVtZW50cyl7cmV0dXJuKGVsZW1lbnRzKT8kZXh0ZW5kKGVsZW1lbnRzLHRoaXMpOnRoaXM7fX0pO0VsZW1lbnRzLmV4dGVuZD1mdW5jdGlvbihwcm9wcyl7Zm9yKHZhciBwcm9wIGluIHByb3BzKXt0aGlzLnByb3RvdHlwZVtwcm9wXT1wcm9wc1twcm9wXTt0aGlzW3Byb3BdPSRuYXRpdmUuZ2VuZXJpYyhwcm9wKTt9fTtmdW5jdGlvbiAkKGVsKXtpZighZWwpcmV0dXJuIG51bGw7aWYoZWwuaHRtbEVsZW1lbnQpcmV0dXJuIEdhcmJhZ2UuY29sbGVjdChlbCk7aWYoW3dpbmRvdyxkb2N1bWVudF0uY29udGFpbnMoZWwpKXJldHVybiBlbDt2YXIgdHlwZT0kdHlwZShlbCk7aWYodHlwZT09J3N0cmluZycpe2VsPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGVsKTt0eXBlPShlbCk/J2VsZW1lbnQnOmZhbHNlO31cclxuaWYodHlwZSE9J2VsZW1lbnQnKXJldHVybiBudWxsO2lmKGVsLmh0bWxFbGVtZW50KXJldHVybiBHYXJiYWdlLmNvbGxlY3QoZWwpO2lmKFsnb2JqZWN0JywnZW1iZWQnXS5jb250YWlucyhlbC50YWdOYW1lLnRvTG93ZXJDYXNlKCkpKXJldHVybiBlbDskZXh0ZW5kKGVsLEVsZW1lbnQucHJvdG90eXBlKTtlbC5odG1sRWxlbWVudD1mdW5jdGlvbigpe307cmV0dXJuIEdhcmJhZ2UuY29sbGVjdChlbCk7fTtkb2N1bWVudC5nZXRFbGVtZW50c0J5U2VsZWN0b3I9ZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWU7ZnVuY3Rpb24gJCQoKXt2YXIgZWxlbWVudHM9W107Zm9yKHZhciBpPTAsaj1hcmd1bWVudHMubGVuZ3RoO2k8ajtpKyspe3ZhciBzZWxlY3Rvcj1hcmd1bWVudHNbaV07c3dpdGNoKCR0eXBlKHNlbGVjdG9yKSl7Y2FzZSdlbGVtZW50JzplbGVtZW50cy5wdXNoKHNlbGVjdG9yKTtjYXNlJ2Jvb2xlYW4nOmJyZWFrO2Nhc2UgZmFsc2U6YnJlYWs7Y2FzZSdzdHJpbmcnOnNlbGVjdG9yPWRvY3VtZW50LmdldEVsZW1lbnRzQnlTZWxlY3RvcihzZWxlY3Rvcix0cnVlKTtkZWZhdWx0OmVsZW1lbnRzLmV4dGVuZChzZWxlY3Rvcik7fX1cclxucmV0dXJuICQkLnVuaXF1ZShlbGVtZW50cyk7fTskJC51bmlxdWU9ZnVuY3Rpb24oYXJyYXkpe3ZhciBlbGVtZW50cz1bXTtmb3IodmFyIGk9MCxsPWFycmF5Lmxlbmd0aDtpPGw7aSsrKXtpZihhcnJheVtpXS4kaW5jbHVkZWQpY29udGludWU7dmFyIGVsZW1lbnQ9JChhcnJheVtpXSk7aWYoZWxlbWVudCYmIWVsZW1lbnQuJGluY2x1ZGVkKXtlbGVtZW50LiRpbmNsdWRlZD10cnVlO2VsZW1lbnRzLnB1c2goZWxlbWVudCk7fX1cclxuZm9yKHZhciBuPTAsZD1lbGVtZW50cy5sZW5ndGg7bjxkO24rKyllbGVtZW50c1tuXS4kaW5jbHVkZWQ9bnVsbDtyZXR1cm4gbmV3IEVsZW1lbnRzKGVsZW1lbnRzKTt9O0VsZW1lbnRzLk11bHRpPWZ1bmN0aW9uKHByb3BlcnR5KXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgYXJncz1hcmd1bWVudHM7dmFyIGl0ZW1zPVtdO3ZhciBlbGVtZW50cz10cnVlO2Zvcih2YXIgaT0wLGo9dGhpcy5sZW5ndGgscmV0dXJucztpPGo7aSsrKXtyZXR1cm5zPXRoaXNbaV1bcHJvcGVydHldLmFwcGx5KHRoaXNbaV0sYXJncyk7aWYoJHR5cGUocmV0dXJucykhPSdlbGVtZW50JyllbGVtZW50cz1mYWxzZTtpdGVtcy5wdXNoKHJldHVybnMpO307cmV0dXJuKGVsZW1lbnRzKT8kJC51bmlxdWUoaXRlbXMpOml0ZW1zO307fTtFbGVtZW50LmV4dGVuZD1mdW5jdGlvbihwcm9wZXJ0aWVzKXtmb3IodmFyIHByb3BlcnR5IGluIHByb3BlcnRpZXMpe0hUTUxFbGVtZW50LnByb3RvdHlwZVtwcm9wZXJ0eV09cHJvcGVydGllc1twcm9wZXJ0eV07RWxlbWVudC5wcm90b3R5cGVbcHJvcGVydHldPXByb3BlcnRpZXNbcHJvcGVydHldO0VsZW1lbnRbcHJvcGVydHldPSRuYXRpdmUuZ2VuZXJpYyhwcm9wZXJ0eSk7dmFyIGVsZW1lbnRzUHJvcGVydHk9KEFycmF5LnByb3RvdHlwZVtwcm9wZXJ0eV0pP3Byb3BlcnR5KydFbGVtZW50cyc6cHJvcGVydHk7RWxlbWVudHMucHJvdG90eXBlW2VsZW1lbnRzUHJvcGVydHldPUVsZW1lbnRzLk11bHRpKHByb3BlcnR5KTt9fTtFbGVtZW50LmV4dGVuZCh7c2V0OmZ1bmN0aW9uKHByb3BzKXtmb3IodmFyIHByb3AgaW4gcHJvcHMpe3ZhciB2YWw9cHJvcHNbcHJvcF07c3dpdGNoKHByb3Ape2Nhc2Unc3R5bGVzJzp0aGlzLnNldFN0eWxlcyh2YWwpO2JyZWFrO2Nhc2UnZXZlbnRzJzppZih0aGlzLmFkZEV2ZW50cyl0aGlzLmFkZEV2ZW50cyh2YWwpO2JyZWFrO2Nhc2UncHJvcGVydGllcyc6dGhpcy5zZXRQcm9wZXJ0aWVzKHZhbCk7YnJlYWs7ZGVmYXVsdDp0aGlzLnNldFByb3BlcnR5KHByb3AsdmFsKTt9fVxyXG5yZXR1cm4gdGhpczt9LGluamVjdDpmdW5jdGlvbihlbCx3aGVyZSl7ZWw9JChlbCk7c3dpdGNoKHdoZXJlKXtjYXNlJ2JlZm9yZSc6ZWwucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUodGhpcyxlbCk7YnJlYWs7Y2FzZSdhZnRlcic6dmFyIG5leHQ9ZWwuZ2V0TmV4dCgpO2lmKCFuZXh0KWVsLnBhcmVudE5vZGUuYXBwZW5kQ2hpbGQodGhpcyk7ZWxzZSBlbC5wYXJlbnROb2RlLmluc2VydEJlZm9yZSh0aGlzLG5leHQpO2JyZWFrO2Nhc2UndG9wJzp2YXIgZmlyc3Q9ZWwuZmlyc3RDaGlsZDtpZihmaXJzdCl7ZWwuaW5zZXJ0QmVmb3JlKHRoaXMsZmlyc3QpO2JyZWFrO31cclxuZGVmYXVsdDplbC5hcHBlbmRDaGlsZCh0aGlzKTt9XHJcbnJldHVybiB0aGlzO30saW5qZWN0QmVmb3JlOmZ1bmN0aW9uKGVsKXtyZXR1cm4gdGhpcy5pbmplY3QoZWwsJ2JlZm9yZScpO30saW5qZWN0QWZ0ZXI6ZnVuY3Rpb24oZWwpe3JldHVybiB0aGlzLmluamVjdChlbCwnYWZ0ZXInKTt9LGluamVjdEluc2lkZTpmdW5jdGlvbihlbCl7cmV0dXJuIHRoaXMuaW5qZWN0KGVsLCdib3R0b20nKTt9LGluamVjdFRvcDpmdW5jdGlvbihlbCl7cmV0dXJuIHRoaXMuaW5qZWN0KGVsLCd0b3AnKTt9LGFkb3B0OmZ1bmN0aW9uKCl7dmFyIGVsZW1lbnRzPVtdOyRlYWNoKGFyZ3VtZW50cyxmdW5jdGlvbihhcmd1bWVudCl7ZWxlbWVudHM9ZWxlbWVudHMuY29uY2F0KGFyZ3VtZW50KTt9KTskJChlbGVtZW50cykuaW5qZWN0KHRoaXMpO3JldHVybiB0aGlzO30scmVtb3ZlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0aGlzKTt9LGNsb25lOmZ1bmN0aW9uKGNvbnRlbnRzKXt2YXIgZWw9JCh0aGlzLmNsb25lTm9kZShjb250ZW50cyE9PWZhbHNlKSk7aWYoIWVsLiRldmVudHMpcmV0dXJuIGVsO2VsLiRldmVudHM9e307Zm9yKHZhciB0eXBlIGluIHRoaXMuJGV2ZW50cyllbC4kZXZlbnRzW3R5cGVdPXsna2V5cyc6JEEodGhpcy4kZXZlbnRzW3R5cGVdLmtleXMpLCd2YWx1ZXMnOiRBKHRoaXMuJGV2ZW50c1t0eXBlXS52YWx1ZXMpfTtyZXR1cm4gZWwucmVtb3ZlRXZlbnRzKCk7fSxyZXBsYWNlV2l0aDpmdW5jdGlvbihlbCl7ZWw9JChlbCk7dGhpcy5wYXJlbnROb2RlLnJlcGxhY2VDaGlsZChlbCx0aGlzKTtyZXR1cm4gZWw7fSxhcHBlbmRUZXh0OmZ1bmN0aW9uKHRleHQpe3RoaXMuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUodGV4dCkpO3JldHVybiB0aGlzO30saGFzQ2xhc3M6ZnVuY3Rpb24oY2xhc3NOYW1lKXtyZXR1cm4gdGhpcy5jbGFzc05hbWUuY29udGFpbnMoY2xhc3NOYW1lLCcgJyk7fSxhZGRDbGFzczpmdW5jdGlvbihjbGFzc05hbWUpe2lmKCF0aGlzLmhhc0NsYXNzKGNsYXNzTmFtZSkpdGhpcy5jbGFzc05hbWU9KHRoaXMuY2xhc3NOYW1lKycgJytjbGFzc05hbWUpLmNsZWFuKCk7cmV0dXJuIHRoaXM7fSxyZW1vdmVDbGFzczpmdW5jdGlvbihjbGFzc05hbWUpe3RoaXMuY2xhc3NOYW1lPXRoaXMuY2xhc3NOYW1lLnJlcGxhY2UobmV3IFJlZ0V4cCgnKF58XFxcXHMpJytjbGFzc05hbWUrJyg/OlxcXFxzfCQpJyksJyQxJykuY2xlYW4oKTtyZXR1cm4gdGhpczt9LHRvZ2dsZUNsYXNzOmZ1bmN0aW9uKGNsYXNzTmFtZSl7cmV0dXJuIHRoaXMuaGFzQ2xhc3MoY2xhc3NOYW1lKT90aGlzLnJlbW92ZUNsYXNzKGNsYXNzTmFtZSk6dGhpcy5hZGRDbGFzcyhjbGFzc05hbWUpO30sc2V0U3R5bGU6ZnVuY3Rpb24ocHJvcGVydHksdmFsdWUpe3N3aXRjaChwcm9wZXJ0eSl7Y2FzZSdvcGFjaXR5JzpyZXR1cm4gdGhpcy5zZXRPcGFjaXR5KHBhcnNlRmxvYXQodmFsdWUpKTtjYXNlJ2Zsb2F0Jzpwcm9wZXJ0eT0od2luZG93LmllKT8nc3R5bGVGbG9hdCc6J2Nzc0Zsb2F0Jzt9XHJcbnByb3BlcnR5PXByb3BlcnR5LmNhbWVsQ2FzZSgpO3N3aXRjaCgkdHlwZSh2YWx1ZSkpe2Nhc2UnbnVtYmVyJzppZighWyd6SW5kZXgnLCd6b29tJ10uY29udGFpbnMocHJvcGVydHkpKXZhbHVlKz0ncHgnO2JyZWFrO2Nhc2UnYXJyYXknOnZhbHVlPSdyZ2IoJyt2YWx1ZS5qb2luKCcsJykrJyknO31cclxudGhpcy5zdHlsZVtwcm9wZXJ0eV09dmFsdWU7cmV0dXJuIHRoaXM7fSxzZXRTdHlsZXM6ZnVuY3Rpb24oc291cmNlKXtzd2l0Y2goJHR5cGUoc291cmNlKSl7Y2FzZSdvYmplY3QnOkVsZW1lbnQuc2V0TWFueSh0aGlzLCdzZXRTdHlsZScsc291cmNlKTticmVhaztjYXNlJ3N0cmluZyc6dGhpcy5zdHlsZS5jc3NUZXh0PXNvdXJjZTt9XHJcbnJldHVybiB0aGlzO30sc2V0T3BhY2l0eTpmdW5jdGlvbihvcGFjaXR5KXtpZihvcGFjaXR5PT0wKXtpZih0aGlzLnN0eWxlLnZpc2liaWxpdHkhPVwiaGlkZGVuXCIpdGhpcy5zdHlsZS52aXNpYmlsaXR5PVwiaGlkZGVuXCI7fWVsc2V7aWYodGhpcy5zdHlsZS52aXNpYmlsaXR5IT1cInZpc2libGVcIil0aGlzLnN0eWxlLnZpc2liaWxpdHk9XCJ2aXNpYmxlXCI7fVxyXG5pZighdGhpcy5jdXJyZW50U3R5bGV8fCF0aGlzLmN1cnJlbnRTdHlsZS5oYXNMYXlvdXQpdGhpcy5zdHlsZS56b29tPTE7aWYod2luZG93LmllKXRoaXMuc3R5bGUuZmlsdGVyPShvcGFjaXR5PT0xKT8nJzpcImFscGhhKG9wYWNpdHk9XCIrb3BhY2l0eSoxMDArXCIpXCI7dGhpcy5zdHlsZS5vcGFjaXR5PXRoaXMuJHRtcC5vcGFjaXR5PW9wYWNpdHk7cmV0dXJuIHRoaXM7fSxnZXRTdHlsZTpmdW5jdGlvbihwcm9wZXJ0eSl7cHJvcGVydHk9cHJvcGVydHkuY2FtZWxDYXNlKCk7dmFyIHJlc3VsdD10aGlzLnN0eWxlW3Byb3BlcnR5XTtpZighJGNoayhyZXN1bHQpKXtpZihwcm9wZXJ0eT09J29wYWNpdHknKXJldHVybiB0aGlzLiR0bXAub3BhY2l0eTtyZXN1bHQ9W107Zm9yKHZhciBzdHlsZSBpbiBFbGVtZW50LlN0eWxlcyl7aWYocHJvcGVydHk9PXN0eWxlKXtFbGVtZW50LlN0eWxlc1tzdHlsZV0uZWFjaChmdW5jdGlvbihzKXt2YXIgc3R5bGU9dGhpcy5nZXRTdHlsZShzKTtyZXN1bHQucHVzaChwYXJzZUludChzdHlsZSk/c3R5bGU6JzBweCcpO30sdGhpcyk7aWYocHJvcGVydHk9PSdib3JkZXInKXt2YXIgZXZlcnk9cmVzdWx0LmV2ZXJ5KGZ1bmN0aW9uKGJpdCl7cmV0dXJuKGJpdD09cmVzdWx0WzBdKTt9KTtyZXR1cm4oZXZlcnkpP3Jlc3VsdFswXTpmYWxzZTt9XHJcbnJldHVybiByZXN1bHQuam9pbignICcpO319XHJcbmlmKHByb3BlcnR5LmNvbnRhaW5zKCdib3JkZXInKSl7aWYoRWxlbWVudC5TdHlsZXMuYm9yZGVyLmNvbnRhaW5zKHByb3BlcnR5KSl7cmV0dXJuWydXaWR0aCcsJ1N0eWxlJywnQ29sb3InXS5tYXAoZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuZ2V0U3R5bGUocHJvcGVydHkrcCk7fSx0aGlzKS5qb2luKCcgJyk7fWVsc2UgaWYoRWxlbWVudC5ib3JkZXJTaG9ydC5jb250YWlucyhwcm9wZXJ0eSkpe3JldHVyblsnVG9wJywnUmlnaHQnLCdCb3R0b20nLCdMZWZ0J10ubWFwKGZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmdldFN0eWxlKCdib3JkZXInK3ArcHJvcGVydHkucmVwbGFjZSgnYm9yZGVyJywnJykpO30sdGhpcykuam9pbignICcpO319XHJcbmlmKGRvY3VtZW50LmRlZmF1bHRWaWV3KXJlc3VsdD1kb2N1bWVudC5kZWZhdWx0Vmlldy5nZXRDb21wdXRlZFN0eWxlKHRoaXMsbnVsbCkuZ2V0UHJvcGVydHlWYWx1ZShwcm9wZXJ0eS5oeXBoZW5hdGUoKSk7ZWxzZSBpZih0aGlzLmN1cnJlbnRTdHlsZSlyZXN1bHQ9dGhpcy5jdXJyZW50U3R5bGVbcHJvcGVydHldO31cclxuaWYod2luZG93LmllKXJlc3VsdD1FbGVtZW50LmZpeFN0eWxlKHByb3BlcnR5LHJlc3VsdCx0aGlzKTtpZihyZXN1bHQmJnByb3BlcnR5LnRlc3QoL2NvbG9yL2kpJiZyZXN1bHQuY29udGFpbnMoJ3JnYicpKXtyZXR1cm4gcmVzdWx0LnNwbGl0KCdyZ2InKS5zcGxpY2UoMSw0KS5tYXAoZnVuY3Rpb24oY29sb3Ipe3JldHVybiBjb2xvci5yZ2JUb0hleCgpO30pLmpvaW4oJyAnKTt9XHJcbnJldHVybiByZXN1bHQ7fSxnZXRTdHlsZXM6ZnVuY3Rpb24oKXtyZXR1cm4gRWxlbWVudC5nZXRNYW55KHRoaXMsJ2dldFN0eWxlJyxhcmd1bWVudHMpO30sd2FsazpmdW5jdGlvbihicm90aGVyLHN0YXJ0KXticm90aGVyKz0nU2libGluZyc7dmFyIGVsPShzdGFydCk/dGhpc1tzdGFydF06dGhpc1ticm90aGVyXTt3aGlsZShlbCYmJHR5cGUoZWwpIT0nZWxlbWVudCcpZWw9ZWxbYnJvdGhlcl07cmV0dXJuICQoZWwpO30sZ2V0UHJldmlvdXM6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy53YWxrKCdwcmV2aW91cycpO30sZ2V0TmV4dDpmdW5jdGlvbigpe3JldHVybiB0aGlzLndhbGsoJ25leHQnKTt9LGdldEZpcnN0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMud2FsaygnbmV4dCcsJ2ZpcnN0Q2hpbGQnKTt9LGdldExhc3Q6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy53YWxrKCdwcmV2aW91cycsJ2xhc3RDaGlsZCcpO30sZ2V0UGFyZW50OmZ1bmN0aW9uKCl7cmV0dXJuICQodGhpcy5wYXJlbnROb2RlKTt9LGdldENoaWxkcmVuOmZ1bmN0aW9uKCl7cmV0dXJuICQkKHRoaXMuY2hpbGROb2Rlcyk7fSxoYXNDaGlsZDpmdW5jdGlvbihlbCl7cmV0dXJuISEkQSh0aGlzLmdldEVsZW1lbnRzQnlUYWdOYW1lKCcqJykpLmNvbnRhaW5zKGVsKTt9LGdldFByb3BlcnR5OmZ1bmN0aW9uKHByb3BlcnR5KXt2YXIgaW5kZXg9RWxlbWVudC5Qcm9wZXJ0aWVzW3Byb3BlcnR5XTtpZihpbmRleClyZXR1cm4gdGhpc1tpbmRleF07dmFyIGZsYWc9RWxlbWVudC5Qcm9wZXJ0aWVzSUZsYWdbcHJvcGVydHldfHwwO2lmKCF3aW5kb3cuaWV8fGZsYWcpcmV0dXJuIHRoaXMuZ2V0QXR0cmlidXRlKHByb3BlcnR5LGZsYWcpO3ZhciBub2RlPXRoaXMuYXR0cmlidXRlc1twcm9wZXJ0eV07cmV0dXJuKG5vZGUpP25vZGUubm9kZVZhbHVlOm51bGw7fSxyZW1vdmVQcm9wZXJ0eTpmdW5jdGlvbihwcm9wZXJ0eSl7dmFyIGluZGV4PUVsZW1lbnQuUHJvcGVydGllc1twcm9wZXJ0eV07aWYoaW5kZXgpdGhpc1tpbmRleF09Jyc7ZWxzZSB0aGlzLnJlbW92ZUF0dHJpYnV0ZShwcm9wZXJ0eSk7cmV0dXJuIHRoaXM7fSxnZXRQcm9wZXJ0aWVzOmZ1bmN0aW9uKCl7cmV0dXJuIEVsZW1lbnQuZ2V0TWFueSh0aGlzLCdnZXRQcm9wZXJ0eScsYXJndW1lbnRzKTt9LHNldFByb3BlcnR5OmZ1bmN0aW9uKHByb3BlcnR5LHZhbHVlKXt2YXIgaW5kZXg9RWxlbWVudC5Qcm9wZXJ0aWVzW3Byb3BlcnR5XTtpZihpbmRleCl0aGlzW2luZGV4XT12YWx1ZTtlbHNlIHRoaXMuc2V0QXR0cmlidXRlKHByb3BlcnR5LHZhbHVlKTtyZXR1cm4gdGhpczt9LHNldFByb3BlcnRpZXM6ZnVuY3Rpb24oc291cmNlKXtyZXR1cm4gRWxlbWVudC5zZXRNYW55KHRoaXMsJ3NldFByb3BlcnR5Jyxzb3VyY2UpO30sc2V0SFRNTDpmdW5jdGlvbigpe3RoaXMuaW5uZXJIVE1MPSRBKGFyZ3VtZW50cykuam9pbignJyk7cmV0dXJuIHRoaXM7fSxzZXRUZXh0OmZ1bmN0aW9uKHRleHQpe3ZhciB0YWc9dGhpcy5nZXRUYWcoKTtpZihbJ3N0eWxlJywnc2NyaXB0J10uY29udGFpbnModGFnKSl7aWYod2luZG93LmllKXtpZih0YWc9PSdzdHlsZScpdGhpcy5zdHlsZVNoZWV0LmNzc1RleHQ9dGV4dDtlbHNlIGlmKHRhZz09J3NjcmlwdCcpdGhpcy5zZXRQcm9wZXJ0eSgndGV4dCcsdGV4dCk7cmV0dXJuIHRoaXM7fWVsc2V7dGhpcy5yZW1vdmVDaGlsZCh0aGlzLmZpcnN0Q2hpbGQpO3JldHVybiB0aGlzLmFwcGVuZFRleHQodGV4dCk7fX1cclxudGhpc1skZGVmaW5lZCh0aGlzLmlubmVyVGV4dCk/J2lubmVyVGV4dCc6J3RleHRDb250ZW50J109dGV4dDtyZXR1cm4gdGhpczt9LGdldFRleHQ6ZnVuY3Rpb24oKXt2YXIgdGFnPXRoaXMuZ2V0VGFnKCk7aWYoWydzdHlsZScsJ3NjcmlwdCddLmNvbnRhaW5zKHRhZykpe2lmKHdpbmRvdy5pZSl7aWYodGFnPT0nc3R5bGUnKXJldHVybiB0aGlzLnN0eWxlU2hlZXQuY3NzVGV4dDtlbHNlIGlmKHRhZz09J3NjcmlwdCcpcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHkoJ3RleHQnKTt9ZWxzZXtyZXR1cm4gdGhpcy5pbm5lckhUTUw7fX1cclxucmV0dXJuKCRwaWNrKHRoaXMuaW5uZXJUZXh0LHRoaXMudGV4dENvbnRlbnQpKTt9LGdldFRhZzpmdW5jdGlvbigpe3JldHVybiB0aGlzLnRhZ05hbWUudG9Mb3dlckNhc2UoKTt9LGVtcHR5OmZ1bmN0aW9uKCl7R2FyYmFnZS50cmFzaCh0aGlzLmdldEVsZW1lbnRzQnlUYWdOYW1lKCcqJykpO3JldHVybiB0aGlzLnNldEhUTUwoJycpO319KTtFbGVtZW50LmZpeFN0eWxlPWZ1bmN0aW9uKHByb3BlcnR5LHJlc3VsdCxlbGVtZW50KXtpZigkY2hrKHBhcnNlSW50KHJlc3VsdCkpKXJldHVybiByZXN1bHQ7aWYoWydoZWlnaHQnLCd3aWR0aCddLmNvbnRhaW5zKHByb3BlcnR5KSl7dmFyIHZhbHVlcz0ocHJvcGVydHk9PSd3aWR0aCcpP1snbGVmdCcsJ3JpZ2h0J106Wyd0b3AnLCdib3R0b20nXTt2YXIgc2l6ZT0wO3ZhbHVlcy5lYWNoKGZ1bmN0aW9uKHZhbHVlKXtzaXplKz1lbGVtZW50LmdldFN0eWxlKCdib3JkZXItJyt2YWx1ZSsnLXdpZHRoJykudG9JbnQoKStlbGVtZW50LmdldFN0eWxlKCdwYWRkaW5nLScrdmFsdWUpLnRvSW50KCk7fSk7cmV0dXJuIGVsZW1lbnRbJ29mZnNldCcrcHJvcGVydHkuY2FwaXRhbGl6ZSgpXS1zaXplKydweCc7fWVsc2UgaWYocHJvcGVydHkudGVzdCgvYm9yZGVyKC4rKVdpZHRofG1hcmdpbnxwYWRkaW5nLykpe3JldHVybicwcHgnO31cclxucmV0dXJuIHJlc3VsdDt9O0VsZW1lbnQuU3R5bGVzPXsnYm9yZGVyJzpbXSwncGFkZGluZyc6W10sJ21hcmdpbic6W119O1snVG9wJywnUmlnaHQnLCdCb3R0b20nLCdMZWZ0J10uZWFjaChmdW5jdGlvbihkaXJlY3Rpb24pe2Zvcih2YXIgc3R5bGUgaW4gRWxlbWVudC5TdHlsZXMpRWxlbWVudC5TdHlsZXNbc3R5bGVdLnB1c2goc3R5bGUrZGlyZWN0aW9uKTt9KTtFbGVtZW50LmJvcmRlclNob3J0PVsnYm9yZGVyV2lkdGgnLCdib3JkZXJTdHlsZScsJ2JvcmRlckNvbG9yJ107RWxlbWVudC5nZXRNYW55PWZ1bmN0aW9uKGVsLG1ldGhvZCxrZXlzKXt2YXIgcmVzdWx0PXt9OyRlYWNoKGtleXMsZnVuY3Rpb24oa2V5KXtyZXN1bHRba2V5XT1lbFttZXRob2RdKGtleSk7fSk7cmV0dXJuIHJlc3VsdDt9O0VsZW1lbnQuc2V0TWFueT1mdW5jdGlvbihlbCxtZXRob2QscGFpcnMpe2Zvcih2YXIga2V5IGluIHBhaXJzKWVsW21ldGhvZF0oa2V5LHBhaXJzW2tleV0pO3JldHVybiBlbDt9O0VsZW1lbnQuUHJvcGVydGllcz1uZXcgQWJzdHJhY3QoeydjbGFzcyc6J2NsYXNzTmFtZScsJ2Zvcic6J2h0bWxGb3InLCdjb2xzcGFuJzonY29sU3BhbicsJ3Jvd3NwYW4nOidyb3dTcGFuJywnYWNjZXNza2V5JzonYWNjZXNzS2V5JywndGFiaW5kZXgnOid0YWJJbmRleCcsJ21heGxlbmd0aCc6J21heExlbmd0aCcsJ3JlYWRvbmx5JzoncmVhZE9ubHknLCdmcmFtZWJvcmRlcic6J2ZyYW1lQm9yZGVyJywndmFsdWUnOid2YWx1ZScsJ2Rpc2FibGVkJzonZGlzYWJsZWQnLCdjaGVja2VkJzonY2hlY2tlZCcsJ211bHRpcGxlJzonbXVsdGlwbGUnLCdzZWxlY3RlZCc6J3NlbGVjdGVkJ30pO0VsZW1lbnQuUHJvcGVydGllc0lGbGFnPXsnaHJlZic6Miwnc3JjJzoyfTtFbGVtZW50Lk1ldGhvZHM9e0xpc3RlbmVyczp7YWRkTGlzdGVuZXI6ZnVuY3Rpb24odHlwZSxmbil7aWYodGhpcy5hZGRFdmVudExpc3RlbmVyKXRoaXMuYWRkRXZlbnRMaXN0ZW5lcih0eXBlLGZuLGZhbHNlKTtlbHNlIHRoaXMuYXR0YWNoRXZlbnQoJ29uJyt0eXBlLGZuKTtyZXR1cm4gdGhpczt9LHJlbW92ZUxpc3RlbmVyOmZ1bmN0aW9uKHR5cGUsZm4pe2lmKHRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcil0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIodHlwZSxmbixmYWxzZSk7ZWxzZSB0aGlzLmRldGFjaEV2ZW50KCdvbicrdHlwZSxmbik7cmV0dXJuIHRoaXM7fX19O3dpbmRvdy5leHRlbmQoRWxlbWVudC5NZXRob2RzLkxpc3RlbmVycyk7ZG9jdW1lbnQuZXh0ZW5kKEVsZW1lbnQuTWV0aG9kcy5MaXN0ZW5lcnMpO0VsZW1lbnQuZXh0ZW5kKEVsZW1lbnQuTWV0aG9kcy5MaXN0ZW5lcnMpO3ZhciBHYXJiYWdlPXtlbGVtZW50czpbXSxjb2xsZWN0OmZ1bmN0aW9uKGVsKXtpZighZWwuJHRtcCl7R2FyYmFnZS5lbGVtZW50cy5wdXNoKGVsKTtlbC4kdG1wPXsnb3BhY2l0eSc6MX07fVxyXG5yZXR1cm4gZWw7fSx0cmFzaDpmdW5jdGlvbihlbGVtZW50cyl7Zm9yKHZhciBpPTAsaj1lbGVtZW50cy5sZW5ndGgsZWw7aTxqO2krKyl7aWYoIShlbD1lbGVtZW50c1tpXSl8fCFlbC4kdG1wKWNvbnRpbnVlO2lmKGVsLiRldmVudHMpZWwuZmlyZUV2ZW50KCd0cmFzaCcpLnJlbW92ZUV2ZW50cygpO2Zvcih2YXIgcCBpbiBlbC4kdG1wKWVsLiR0bXBbcF09bnVsbDtmb3IodmFyIGQgaW4gRWxlbWVudC5wcm90b3R5cGUpZWxbZF09bnVsbDtHYXJiYWdlLmVsZW1lbnRzW0dhcmJhZ2UuZWxlbWVudHMuaW5kZXhPZihlbCldPW51bGw7ZWwuaHRtbEVsZW1lbnQ9ZWwuJHRtcD1lbD1udWxsO31cclxuR2FyYmFnZS5lbGVtZW50cy5yZW1vdmUobnVsbCk7fSxlbXB0eTpmdW5jdGlvbigpe0dhcmJhZ2UuY29sbGVjdCh3aW5kb3cpO0dhcmJhZ2UuY29sbGVjdChkb2N1bWVudCk7R2FyYmFnZS50cmFzaChHYXJiYWdlLmVsZW1lbnRzKTt9fTt3aW5kb3cuYWRkTGlzdGVuZXIoJ2JlZm9yZXVubG9hZCcsZnVuY3Rpb24oKXt3aW5kb3cuYWRkTGlzdGVuZXIoJ3VubG9hZCcsR2FyYmFnZS5lbXB0eSk7aWYod2luZG93LmllKXdpbmRvdy5hZGRMaXN0ZW5lcigndW5sb2FkJyxDb2xsZWN0R2FyYmFnZSk7fSk7dmFyIEV2ZW50PW5ldyBDbGFzcyh7aW5pdGlhbGl6ZTpmdW5jdGlvbihldmVudCl7aWYoZXZlbnQmJmV2ZW50LiRleHRlbmRlZClyZXR1cm4gZXZlbnQ7dGhpcy4kZXh0ZW5kZWQ9dHJ1ZTtldmVudD1ldmVudHx8d2luZG93LmV2ZW50O3RoaXMuZXZlbnQ9ZXZlbnQ7dGhpcy50eXBlPWV2ZW50LnR5cGU7dGhpcy50YXJnZXQ9ZXZlbnQudGFyZ2V0fHxldmVudC5zcmNFbGVtZW50O2lmKHRoaXMudGFyZ2V0Lm5vZGVUeXBlPT0zKXRoaXMudGFyZ2V0PXRoaXMudGFyZ2V0LnBhcmVudE5vZGU7dGhpcy5zaGlmdD1ldmVudC5zaGlmdEtleTt0aGlzLmNvbnRyb2w9ZXZlbnQuY3RybEtleTt0aGlzLmFsdD1ldmVudC5hbHRLZXk7dGhpcy5tZXRhPWV2ZW50Lm1ldGFLZXk7aWYoWydET01Nb3VzZVNjcm9sbCcsJ21vdXNld2hlZWwnXS5jb250YWlucyh0aGlzLnR5cGUpKXt0aGlzLndoZWVsPShldmVudC53aGVlbERlbHRhKT9ldmVudC53aGVlbERlbHRhLzEyMDotKGV2ZW50LmRldGFpbHx8MCkvMzt9ZWxzZSBpZih0aGlzLnR5cGUuY29udGFpbnMoJ2tleScpKXt0aGlzLmNvZGU9ZXZlbnQud2hpY2h8fGV2ZW50LmtleUNvZGU7Zm9yKHZhciBuYW1lIGluIEV2ZW50LmtleXMpe2lmKEV2ZW50LmtleXNbbmFtZV09PXRoaXMuY29kZSl7dGhpcy5rZXk9bmFtZTticmVhazt9fVxyXG5pZih0aGlzLnR5cGU9PSdrZXlkb3duJyl7dmFyIGZLZXk9dGhpcy5jb2RlLTExMTtpZihmS2V5PjAmJmZLZXk8MTMpdGhpcy5rZXk9J2YnK2ZLZXk7fVxyXG50aGlzLmtleT10aGlzLmtleXx8U3RyaW5nLmZyb21DaGFyQ29kZSh0aGlzLmNvZGUpLnRvTG93ZXJDYXNlKCk7fWVsc2UgaWYodGhpcy50eXBlLnRlc3QoLyhjbGlja3xtb3VzZXxtZW51KS8pKXt0aGlzLnBhZ2U9eyd4JzpldmVudC5wYWdlWHx8ZXZlbnQuY2xpZW50WCtkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsTGVmdCwneSc6ZXZlbnQucGFnZVl8fGV2ZW50LmNsaWVudFkrZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNjcm9sbFRvcH07dGhpcy5jbGllbnQ9eyd4JzpldmVudC5wYWdlWD9ldmVudC5wYWdlWC13aW5kb3cucGFnZVhPZmZzZXQ6ZXZlbnQuY2xpZW50WCwneSc6ZXZlbnQucGFnZVk/ZXZlbnQucGFnZVktd2luZG93LnBhZ2VZT2Zmc2V0OmV2ZW50LmNsaWVudFl9O3RoaXMucmlnaHRDbGljaz0oZXZlbnQud2hpY2g9PTMpfHwoZXZlbnQuYnV0dG9uPT0yKTtzd2l0Y2godGhpcy50eXBlKXtjYXNlJ21vdXNlb3Zlcic6dGhpcy5yZWxhdGVkVGFyZ2V0PWV2ZW50LnJlbGF0ZWRUYXJnZXR8fGV2ZW50LmZyb21FbGVtZW50O2JyZWFrO2Nhc2UnbW91c2VvdXQnOnRoaXMucmVsYXRlZFRhcmdldD1ldmVudC5yZWxhdGVkVGFyZ2V0fHxldmVudC50b0VsZW1lbnQ7fVxyXG50aGlzLmZpeFJlbGF0ZWRUYXJnZXQoKTt9XHJcbnJldHVybiB0aGlzO30sc3RvcDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnN0b3BQcm9wYWdhdGlvbigpLnByZXZlbnREZWZhdWx0KCk7fSxzdG9wUHJvcGFnYXRpb246ZnVuY3Rpb24oKXtpZih0aGlzLmV2ZW50LnN0b3BQcm9wYWdhdGlvbil0aGlzLmV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO2Vsc2UgdGhpcy5ldmVudC5jYW5jZWxCdWJibGU9dHJ1ZTtyZXR1cm4gdGhpczt9LHByZXZlbnREZWZhdWx0OmZ1bmN0aW9uKCl7aWYodGhpcy5ldmVudC5wcmV2ZW50RGVmYXVsdCl0aGlzLmV2ZW50LnByZXZlbnREZWZhdWx0KCk7ZWxzZSB0aGlzLmV2ZW50LnJldHVyblZhbHVlPWZhbHNlO3JldHVybiB0aGlzO319KTtFdmVudC5maXg9e3JlbGF0ZWRUYXJnZXQ6ZnVuY3Rpb24oKXtpZih0aGlzLnJlbGF0ZWRUYXJnZXQmJnRoaXMucmVsYXRlZFRhcmdldC5ub2RlVHlwZT09Myl0aGlzLnJlbGF0ZWRUYXJnZXQ9dGhpcy5yZWxhdGVkVGFyZ2V0LnBhcmVudE5vZGU7fSxyZWxhdGVkVGFyZ2V0R2Vja286ZnVuY3Rpb24oKXt0cnl7RXZlbnQuZml4LnJlbGF0ZWRUYXJnZXQuY2FsbCh0aGlzKTt9Y2F0Y2goZSl7dGhpcy5yZWxhdGVkVGFyZ2V0PXRoaXMudGFyZ2V0O319fTtFdmVudC5wcm90b3R5cGUuZml4UmVsYXRlZFRhcmdldD0od2luZG93LmdlY2tvKT9FdmVudC5maXgucmVsYXRlZFRhcmdldEdlY2tvOkV2ZW50LmZpeC5yZWxhdGVkVGFyZ2V0O0V2ZW50LmtleXM9bmV3IEFic3RyYWN0KHsnZW50ZXInOjEzLCd1cCc6MzgsJ2Rvd24nOjQwLCdsZWZ0JzozNywncmlnaHQnOjM5LCdlc2MnOjI3LCdzcGFjZSc6MzIsJ2JhY2tzcGFjZSc6OCwndGFiJzo5LCdkZWxldGUnOjQ2fSk7RWxlbWVudC5NZXRob2RzLkV2ZW50cz17YWRkRXZlbnQ6ZnVuY3Rpb24odHlwZSxmbil7dGhpcy4kZXZlbnRzPXRoaXMuJGV2ZW50c3x8e307dGhpcy4kZXZlbnRzW3R5cGVdPXRoaXMuJGV2ZW50c1t0eXBlXXx8eydrZXlzJzpbXSwndmFsdWVzJzpbXX07aWYodGhpcy4kZXZlbnRzW3R5cGVdLmtleXMuY29udGFpbnMoZm4pKXJldHVybiB0aGlzO3RoaXMuJGV2ZW50c1t0eXBlXS5rZXlzLnB1c2goZm4pO3ZhciByZWFsVHlwZT10eXBlO3ZhciBjdXN0b209RWxlbWVudC5FdmVudHNbdHlwZV07aWYoY3VzdG9tKXtpZihjdXN0b20uYWRkKWN1c3RvbS5hZGQuY2FsbCh0aGlzLGZuKTtpZihjdXN0b20ubWFwKWZuPWN1c3RvbS5tYXA7aWYoY3VzdG9tLnR5cGUpcmVhbFR5cGU9Y3VzdG9tLnR5cGU7fVxyXG5pZighdGhpcy5hZGRFdmVudExpc3RlbmVyKWZuPWZuLmNyZWF0ZSh7J2JpbmQnOnRoaXMsJ2V2ZW50Jzp0cnVlfSk7dGhpcy4kZXZlbnRzW3R5cGVdLnZhbHVlcy5wdXNoKGZuKTtyZXR1cm4oRWxlbWVudC5OYXRpdmVFdmVudHMuY29udGFpbnMocmVhbFR5cGUpKT90aGlzLmFkZExpc3RlbmVyKHJlYWxUeXBlLGZuKTp0aGlzO30scmVtb3ZlRXZlbnQ6ZnVuY3Rpb24odHlwZSxmbil7aWYoIXRoaXMuJGV2ZW50c3x8IXRoaXMuJGV2ZW50c1t0eXBlXSlyZXR1cm4gdGhpczt2YXIgcG9zPXRoaXMuJGV2ZW50c1t0eXBlXS5rZXlzLmluZGV4T2YoZm4pO2lmKHBvcz09LTEpcmV0dXJuIHRoaXM7dmFyIGtleT10aGlzLiRldmVudHNbdHlwZV0ua2V5cy5zcGxpY2UocG9zLDEpWzBdO3ZhciB2YWx1ZT10aGlzLiRldmVudHNbdHlwZV0udmFsdWVzLnNwbGljZShwb3MsMSlbMF07dmFyIGN1c3RvbT1FbGVtZW50LkV2ZW50c1t0eXBlXTtpZihjdXN0b20pe2lmKGN1c3RvbS5yZW1vdmUpY3VzdG9tLnJlbW92ZS5jYWxsKHRoaXMsZm4pO2lmKGN1c3RvbS50eXBlKXR5cGU9Y3VzdG9tLnR5cGU7fVxyXG5yZXR1cm4oRWxlbWVudC5OYXRpdmVFdmVudHMuY29udGFpbnModHlwZSkpP3RoaXMucmVtb3ZlTGlzdGVuZXIodHlwZSx2YWx1ZSk6dGhpczt9LGFkZEV2ZW50czpmdW5jdGlvbihzb3VyY2Upe3JldHVybiBFbGVtZW50LnNldE1hbnkodGhpcywnYWRkRXZlbnQnLHNvdXJjZSk7fSxyZW1vdmVFdmVudHM6ZnVuY3Rpb24odHlwZSl7aWYoIXRoaXMuJGV2ZW50cylyZXR1cm4gdGhpcztpZighdHlwZSl7Zm9yKHZhciBldlR5cGUgaW4gdGhpcy4kZXZlbnRzKXRoaXMucmVtb3ZlRXZlbnRzKGV2VHlwZSk7dGhpcy4kZXZlbnRzPW51bGw7fWVsc2UgaWYodGhpcy4kZXZlbnRzW3R5cGVdKXt0aGlzLiRldmVudHNbdHlwZV0ua2V5cy5lYWNoKGZ1bmN0aW9uKGZuKXt0aGlzLnJlbW92ZUV2ZW50KHR5cGUsZm4pO30sdGhpcyk7dGhpcy4kZXZlbnRzW3R5cGVdPW51bGw7fVxyXG5yZXR1cm4gdGhpczt9LGZpcmVFdmVudDpmdW5jdGlvbih0eXBlLGFyZ3MsZGVsYXkpe2lmKHRoaXMuJGV2ZW50cyYmdGhpcy4kZXZlbnRzW3R5cGVdKXt0aGlzLiRldmVudHNbdHlwZV0ua2V5cy5lYWNoKGZ1bmN0aW9uKGZuKXtmbi5jcmVhdGUoeydiaW5kJzp0aGlzLCdkZWxheSc6ZGVsYXksJ2FyZ3VtZW50cyc6YXJnc30pKCk7fSx0aGlzKTt9XHJcbnJldHVybiB0aGlzO30sY2xvbmVFdmVudHM6ZnVuY3Rpb24oZnJvbSx0eXBlKXtpZighZnJvbS4kZXZlbnRzKXJldHVybiB0aGlzO2lmKCF0eXBlKXtmb3IodmFyIGV2VHlwZSBpbiBmcm9tLiRldmVudHMpdGhpcy5jbG9uZUV2ZW50cyhmcm9tLGV2VHlwZSk7fWVsc2UgaWYoZnJvbS4kZXZlbnRzW3R5cGVdKXtmcm9tLiRldmVudHNbdHlwZV0ua2V5cy5lYWNoKGZ1bmN0aW9uKGZuKXt0aGlzLmFkZEV2ZW50KHR5cGUsZm4pO30sdGhpcyk7fVxyXG5yZXR1cm4gdGhpczt9fTt3aW5kb3cuZXh0ZW5kKEVsZW1lbnQuTWV0aG9kcy5FdmVudHMpO2RvY3VtZW50LmV4dGVuZChFbGVtZW50Lk1ldGhvZHMuRXZlbnRzKTtFbGVtZW50LmV4dGVuZChFbGVtZW50Lk1ldGhvZHMuRXZlbnRzKTtFbGVtZW50LkV2ZW50cz1uZXcgQWJzdHJhY3Qoeydtb3VzZWVudGVyJzp7dHlwZTonbW91c2VvdmVyJyxtYXA6ZnVuY3Rpb24oZXZlbnQpe2V2ZW50PW5ldyBFdmVudChldmVudCk7aWYoZXZlbnQucmVsYXRlZFRhcmdldCE9dGhpcyYmIXRoaXMuaGFzQ2hpbGQoZXZlbnQucmVsYXRlZFRhcmdldCkpdGhpcy5maXJlRXZlbnQoJ21vdXNlZW50ZXInLGV2ZW50KTt9fSwnbW91c2VsZWF2ZSc6e3R5cGU6J21vdXNlb3V0JyxtYXA6ZnVuY3Rpb24oZXZlbnQpe2V2ZW50PW5ldyBFdmVudChldmVudCk7aWYoZXZlbnQucmVsYXRlZFRhcmdldCE9dGhpcyYmIXRoaXMuaGFzQ2hpbGQoZXZlbnQucmVsYXRlZFRhcmdldCkpdGhpcy5maXJlRXZlbnQoJ21vdXNlbGVhdmUnLGV2ZW50KTt9fSwnbW91c2V3aGVlbCc6e3R5cGU6KHdpbmRvdy5nZWNrbyk/J0RPTU1vdXNlU2Nyb2xsJzonbW91c2V3aGVlbCd9fSk7RWxlbWVudC5OYXRpdmVFdmVudHM9WydjbGljaycsJ2RibGNsaWNrJywnbW91c2V1cCcsJ21vdXNlZG93bicsJ21vdXNld2hlZWwnLCdET01Nb3VzZVNjcm9sbCcsJ21vdXNlb3ZlcicsJ21vdXNlb3V0JywnbW91c2Vtb3ZlJywna2V5ZG93bicsJ2tleXByZXNzJywna2V5dXAnLCdsb2FkJywndW5sb2FkJywnYmVmb3JldW5sb2FkJywncmVzaXplJywnbW92ZScsJ2ZvY3VzJywnYmx1cicsJ2NoYW5nZScsJ3N1Ym1pdCcsJ3Jlc2V0Jywnc2VsZWN0JywnZXJyb3InLCdhYm9ydCcsJ2NvbnRleHRtZW51Jywnc2Nyb2xsJ107RnVuY3Rpb24uZXh0ZW5kKHtiaW5kV2l0aEV2ZW50OmZ1bmN0aW9uKGJpbmQsYXJncyl7cmV0dXJuIHRoaXMuY3JlYXRlKHsnYmluZCc6YmluZCwnYXJndW1lbnRzJzphcmdzLCdldmVudCc6RXZlbnR9KTt9fSk7RWxlbWVudHMuZXh0ZW5kKHtmaWx0ZXJCeVRhZzpmdW5jdGlvbih0YWcpe3JldHVybiBuZXcgRWxlbWVudHModGhpcy5maWx0ZXIoZnVuY3Rpb24oZWwpe3JldHVybihFbGVtZW50LmdldFRhZyhlbCk9PXRhZyk7fSkpO30sZmlsdGVyQnlDbGFzczpmdW5jdGlvbihjbGFzc05hbWUsbm9jYXNoKXt2YXIgZWxlbWVudHM9dGhpcy5maWx0ZXIoZnVuY3Rpb24oZWwpe3JldHVybihlbC5jbGFzc05hbWUmJmVsLmNsYXNzTmFtZS5jb250YWlucyhjbGFzc05hbWUsJyAnKSk7fSk7cmV0dXJuKG5vY2FzaCk/ZWxlbWVudHM6bmV3IEVsZW1lbnRzKGVsZW1lbnRzKTt9LGZpbHRlckJ5SWQ6ZnVuY3Rpb24oaWQsbm9jYXNoKXt2YXIgZWxlbWVudHM9dGhpcy5maWx0ZXIoZnVuY3Rpb24oZWwpe3JldHVybihlbC5pZD09aWQpO30pO3JldHVybihub2Nhc2gpP2VsZW1lbnRzOm5ldyBFbGVtZW50cyhlbGVtZW50cyk7fSxmaWx0ZXJCeUF0dHJpYnV0ZTpmdW5jdGlvbihuYW1lLG9wZXJhdG9yLHZhbHVlLG5vY2FzaCl7dmFyIGVsZW1lbnRzPXRoaXMuZmlsdGVyKGZ1bmN0aW9uKGVsKXt2YXIgY3VycmVudD1FbGVtZW50LmdldFByb3BlcnR5KGVsLG5hbWUpO2lmKCFjdXJyZW50KXJldHVybiBmYWxzZTtpZighb3BlcmF0b3IpcmV0dXJuIHRydWU7c3dpdGNoKG9wZXJhdG9yKXtjYXNlJz0nOnJldHVybihjdXJyZW50PT12YWx1ZSk7Y2FzZScqPSc6cmV0dXJuKGN1cnJlbnQuY29udGFpbnModmFsdWUpKTtjYXNlJ149JzpyZXR1cm4oY3VycmVudC5zdWJzdHIoMCx2YWx1ZS5sZW5ndGgpPT12YWx1ZSk7Y2FzZSckPSc6cmV0dXJuKGN1cnJlbnQuc3Vic3RyKGN1cnJlbnQubGVuZ3RoLXZhbHVlLmxlbmd0aCk9PXZhbHVlKTtjYXNlJyE9JzpyZXR1cm4oY3VycmVudCE9dmFsdWUpO2Nhc2Unfj0nOnJldHVybiBjdXJyZW50LmNvbnRhaW5zKHZhbHVlLCcgJyk7fVxyXG5yZXR1cm4gZmFsc2U7fSk7cmV0dXJuKG5vY2FzaCk/ZWxlbWVudHM6bmV3IEVsZW1lbnRzKGVsZW1lbnRzKTt9fSk7ZnVuY3Rpb24gJEUoc2VsZWN0b3IsZmlsdGVyKXtyZXR1cm4oJChmaWx0ZXIpfHxkb2N1bWVudCkuZ2V0RWxlbWVudChzZWxlY3Rvcik7fTtmdW5jdGlvbiAkRVMoc2VsZWN0b3IsZmlsdGVyKXtyZXR1cm4oJChmaWx0ZXIpfHxkb2N1bWVudCkuZ2V0RWxlbWVudHNCeVNlbGVjdG9yKHNlbGVjdG9yKTt9OyQkLnNoYXJlZD17J3JlZ2V4cCc6L14oXFx3KnxcXCopKD86IyhbXFx3LV0rKXxcXC4oW1xcdy1dKykpPyg/OlxcWyhcXHcrKSg/OihbISpeJF0/PSlbXCInXT8oW15cIidcXF1dKilbXCInXT8pP10pPyQvLCd4cGF0aCc6e2dldFBhcmFtOmZ1bmN0aW9uKGl0ZW1zLGNvbnRleHQscGFyYW0saSl7dmFyIHRlbXA9W2NvbnRleHQubmFtZXNwYWNlVVJJPyd4aHRtbDonOicnLHBhcmFtWzFdXTtpZihwYXJhbVsyXSl0ZW1wLnB1c2goJ1tAaWQ9XCInLHBhcmFtWzJdLCdcIl0nKTtpZihwYXJhbVszXSl0ZW1wLnB1c2goJ1tjb250YWlucyhjb25jYXQoXCIgXCIsIEBjbGFzcywgXCIgXCIpLCBcIiAnLHBhcmFtWzNdLCcgXCIpXScpO2lmKHBhcmFtWzRdKXtpZihwYXJhbVs1XSYmcGFyYW1bNl0pe3N3aXRjaChwYXJhbVs1XSl7Y2FzZScqPSc6dGVtcC5wdXNoKCdbY29udGFpbnMoQCcscGFyYW1bNF0sJywgXCInLHBhcmFtWzZdLCdcIildJyk7YnJlYWs7Y2FzZSdePSc6dGVtcC5wdXNoKCdbc3RhcnRzLXdpdGgoQCcscGFyYW1bNF0sJywgXCInLHBhcmFtWzZdLCdcIildJyk7YnJlYWs7Y2FzZSckPSc6dGVtcC5wdXNoKCdbc3Vic3RyaW5nKEAnLHBhcmFtWzRdLCcsIHN0cmluZy1sZW5ndGgoQCcscGFyYW1bNF0sJykgLSAnLHBhcmFtWzZdLmxlbmd0aCwnICsgMSkgPSBcIicscGFyYW1bNl0sJ1wiXScpO2JyZWFrO2Nhc2UnPSc6dGVtcC5wdXNoKCdbQCcscGFyYW1bNF0sJz1cIicscGFyYW1bNl0sJ1wiXScpO2JyZWFrO2Nhc2UnIT0nOnRlbXAucHVzaCgnW0AnLHBhcmFtWzRdLCchPVwiJyxwYXJhbVs2XSwnXCJdJyk7fX1lbHNle3RlbXAucHVzaCgnW0AnLHBhcmFtWzRdLCddJyk7fX1cclxuaXRlbXMucHVzaCh0ZW1wLmpvaW4oJycpKTtyZXR1cm4gaXRlbXM7fSxnZXRJdGVtczpmdW5jdGlvbihpdGVtcyxjb250ZXh0LG5vY2FzaCl7dmFyIGVsZW1lbnRzPVtdO3ZhciB4cGF0aD1kb2N1bWVudC5ldmFsdWF0ZSgnLi8vJytpdGVtcy5qb2luKCcvLycpLGNvbnRleHQsJCQuc2hhcmVkLnJlc29sdmVyLFhQYXRoUmVzdWx0LlVOT1JERVJFRF9OT0RFX1NOQVBTSE9UX1RZUEUsbnVsbCk7Zm9yKHZhciBpPTAsaj14cGF0aC5zbmFwc2hvdExlbmd0aDtpPGo7aSsrKWVsZW1lbnRzLnB1c2goeHBhdGguc25hcHNob3RJdGVtKGkpKTtyZXR1cm4obm9jYXNoKT9lbGVtZW50czpuZXcgRWxlbWVudHMoZWxlbWVudHMubWFwKCQpKTt9fSwnbm9ybWFsJzp7Z2V0UGFyYW06ZnVuY3Rpb24oaXRlbXMsY29udGV4dCxwYXJhbSxpKXtpZihpPT0wKXtpZihwYXJhbVsyXSl7dmFyIGVsPWNvbnRleHQuZ2V0RWxlbWVudEJ5SWQocGFyYW1bMl0pO2lmKCFlbHx8KChwYXJhbVsxXSE9JyonKSYmKEVsZW1lbnQuZ2V0VGFnKGVsKSE9cGFyYW1bMV0pKSlyZXR1cm4gZmFsc2U7aXRlbXM9W2VsXTt9ZWxzZXtpdGVtcz0kQShjb250ZXh0LmdldEVsZW1lbnRzQnlUYWdOYW1lKHBhcmFtWzFdKSk7fX1lbHNle2l0ZW1zPSQkLnNoYXJlZC5nZXRFbGVtZW50c0J5VGFnTmFtZShpdGVtcyxwYXJhbVsxXSk7aWYocGFyYW1bMl0paXRlbXM9RWxlbWVudHMuZmlsdGVyQnlJZChpdGVtcyxwYXJhbVsyXSx0cnVlKTt9XHJcbmlmKHBhcmFtWzNdKWl0ZW1zPUVsZW1lbnRzLmZpbHRlckJ5Q2xhc3MoaXRlbXMscGFyYW1bM10sdHJ1ZSk7aWYocGFyYW1bNF0paXRlbXM9RWxlbWVudHMuZmlsdGVyQnlBdHRyaWJ1dGUoaXRlbXMscGFyYW1bNF0scGFyYW1bNV0scGFyYW1bNl0sdHJ1ZSk7cmV0dXJuIGl0ZW1zO30sZ2V0SXRlbXM6ZnVuY3Rpb24oaXRlbXMsY29udGV4dCxub2Nhc2gpe3JldHVybihub2Nhc2gpP2l0ZW1zOiQkLnVuaXF1ZShpdGVtcyk7fX0scmVzb2x2ZXI6ZnVuY3Rpb24ocHJlZml4KXtyZXR1cm4ocHJlZml4PT0neGh0bWwnKT8naHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCc6ZmFsc2U7fSxnZXRFbGVtZW50c0J5VGFnTmFtZTpmdW5jdGlvbihjb250ZXh0LHRhZ05hbWUpe3ZhciBmb3VuZD1bXTtmb3IodmFyIGk9MCxqPWNvbnRleHQubGVuZ3RoO2k8ajtpKyspZm91bmQuZXh0ZW5kKGNvbnRleHRbaV0uZ2V0RWxlbWVudHNCeVRhZ05hbWUodGFnTmFtZSkpO3JldHVybiBmb3VuZDt9fTskJC5zaGFyZWQubWV0aG9kPSh3aW5kb3cueHBhdGgpPyd4cGF0aCc6J25vcm1hbCc7RWxlbWVudC5NZXRob2RzLkRvbT17Z2V0RWxlbWVudHM6ZnVuY3Rpb24oc2VsZWN0b3Isbm9jYXNoKXt2YXIgaXRlbXM9W107c2VsZWN0b3I9c2VsZWN0b3IudHJpbSgpLnNwbGl0KCcgJyk7Zm9yKHZhciBpPTAsaj1zZWxlY3Rvci5sZW5ndGg7aTxqO2krKyl7dmFyIHNlbD1zZWxlY3RvcltpXTt2YXIgcGFyYW09c2VsLm1hdGNoKCQkLnNoYXJlZC5yZWdleHApO2lmKCFwYXJhbSlicmVhaztwYXJhbVsxXT1wYXJhbVsxXXx8JyonO3ZhciB0ZW1wPSQkLnNoYXJlZFskJC5zaGFyZWQubWV0aG9kXS5nZXRQYXJhbShpdGVtcyx0aGlzLHBhcmFtLGkpO2lmKCF0ZW1wKWJyZWFrO2l0ZW1zPXRlbXA7fVxyXG5yZXR1cm4gJCQuc2hhcmVkWyQkLnNoYXJlZC5tZXRob2RdLmdldEl0ZW1zKGl0ZW1zLHRoaXMsbm9jYXNoKTt9LGdldEVsZW1lbnQ6ZnVuY3Rpb24oc2VsZWN0b3Ipe3JldHVybiAkKHRoaXMuZ2V0RWxlbWVudHMoc2VsZWN0b3IsdHJ1ZSlbMF18fGZhbHNlKTt9LGdldEVsZW1lbnRzQnlTZWxlY3RvcjpmdW5jdGlvbihzZWxlY3Rvcixub2Nhc2gpe3ZhciBlbGVtZW50cz1bXTtzZWxlY3Rvcj1zZWxlY3Rvci5zcGxpdCgnLCcpO2Zvcih2YXIgaT0wLGo9c2VsZWN0b3IubGVuZ3RoO2k8ajtpKyspZWxlbWVudHM9ZWxlbWVudHMuY29uY2F0KHRoaXMuZ2V0RWxlbWVudHMoc2VsZWN0b3JbaV0sdHJ1ZSkpO3JldHVybihub2Nhc2gpP2VsZW1lbnRzOiQkLnVuaXF1ZShlbGVtZW50cyk7fX07RWxlbWVudC5leHRlbmQoe2dldEVsZW1lbnRCeUlkOmZ1bmN0aW9uKGlkKXt2YXIgZWw9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpO2lmKCFlbClyZXR1cm4gZmFsc2U7Zm9yKHZhciBwYXJlbnQ9ZWwucGFyZW50Tm9kZTtwYXJlbnQhPXRoaXM7cGFyZW50PXBhcmVudC5wYXJlbnROb2RlKXtpZighcGFyZW50KXJldHVybiBmYWxzZTt9XHJcbnJldHVybiBlbDt9LGdldEVsZW1lbnRzQnlDbGFzc05hbWU6ZnVuY3Rpb24oY2xhc3NOYW1lKXtyZXR1cm4gdGhpcy5nZXRFbGVtZW50cygnLicrY2xhc3NOYW1lKTt9fSk7ZG9jdW1lbnQuZXh0ZW5kKEVsZW1lbnQuTWV0aG9kcy5Eb20pO0VsZW1lbnQuZXh0ZW5kKEVsZW1lbnQuTWV0aG9kcy5Eb20pO0VsZW1lbnQuZXh0ZW5kKHtnZXRWYWx1ZTpmdW5jdGlvbigpe3N3aXRjaCh0aGlzLmdldFRhZygpKXtjYXNlJ3NlbGVjdCc6dmFyIHZhbHVlcz1bXTskZWFjaCh0aGlzLm9wdGlvbnMsZnVuY3Rpb24ob3B0aW9uKXtpZihvcHRpb24uc2VsZWN0ZWQpdmFsdWVzLnB1c2goJHBpY2sob3B0aW9uLnZhbHVlLG9wdGlvbi50ZXh0KSk7fSk7cmV0dXJuKHRoaXMubXVsdGlwbGUpP3ZhbHVlczp2YWx1ZXNbMF07Y2FzZSdpbnB1dCc6aWYoISh0aGlzLmNoZWNrZWQmJlsnY2hlY2tib3gnLCdyYWRpbyddLmNvbnRhaW5zKHRoaXMudHlwZSkpJiYhWydoaWRkZW4nLCd0ZXh0JywncGFzc3dvcmQnXS5jb250YWlucyh0aGlzLnR5cGUpKWJyZWFrO2Nhc2UndGV4dGFyZWEnOnJldHVybiB0aGlzLnZhbHVlO31cclxucmV0dXJuIGZhbHNlO30sZ2V0Rm9ybUVsZW1lbnRzOmZ1bmN0aW9uKCl7cmV0dXJuICQkKHRoaXMuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2lucHV0JyksdGhpcy5nZXRFbGVtZW50c0J5VGFnTmFtZSgnc2VsZWN0JyksdGhpcy5nZXRFbGVtZW50c0J5VGFnTmFtZSgndGV4dGFyZWEnKSk7fSx0b1F1ZXJ5U3RyaW5nOmZ1bmN0aW9uKCl7dmFyIHF1ZXJ5U3RyaW5nPVtdO3RoaXMuZ2V0Rm9ybUVsZW1lbnRzKCkuZWFjaChmdW5jdGlvbihlbCl7dmFyIG5hbWU9ZWwubmFtZTt2YXIgdmFsdWU9ZWwuZ2V0VmFsdWUoKTtpZih2YWx1ZT09PWZhbHNlfHwhbmFtZXx8ZWwuZGlzYWJsZWQpcmV0dXJuO3ZhciBxcz1mdW5jdGlvbih2YWwpe3F1ZXJ5U3RyaW5nLnB1c2gobmFtZSsnPScrZW5jb2RlVVJJQ29tcG9uZW50KHZhbCkpO307aWYoJHR5cGUodmFsdWUpPT0nYXJyYXknKXZhbHVlLmVhY2gocXMpO2Vsc2UgcXModmFsdWUpO30pO3JldHVybiBxdWVyeVN0cmluZy5qb2luKCcmJyk7fX0pO0VsZW1lbnQuZXh0ZW5kKHtzY3JvbGxUbzpmdW5jdGlvbih4LHkpe3RoaXMuc2Nyb2xsTGVmdD14O3RoaXMuc2Nyb2xsVG9wPXk7fSxnZXRTaXplOmZ1bmN0aW9uKCl7cmV0dXJueydzY3JvbGwnOnsneCc6dGhpcy5zY3JvbGxMZWZ0LCd5Jzp0aGlzLnNjcm9sbFRvcH0sJ3NpemUnOnsneCc6dGhpcy5vZmZzZXRXaWR0aCwneSc6dGhpcy5vZmZzZXRIZWlnaHR9LCdzY3JvbGxTaXplJzp7J3gnOnRoaXMuc2Nyb2xsV2lkdGgsJ3knOnRoaXMuc2Nyb2xsSGVpZ2h0fX07fSxnZXRQb3NpdGlvbjpmdW5jdGlvbihvdmVyZmxvd24pe292ZXJmbG93bj1vdmVyZmxvd258fFtdO3ZhciBlbD10aGlzLGxlZnQ9MCx0b3A9MDtkb3tsZWZ0Kz1lbC5vZmZzZXRMZWZ0fHwwO3RvcCs9ZWwub2Zmc2V0VG9wfHwwO2VsPWVsLm9mZnNldFBhcmVudDt9d2hpbGUoZWwpO292ZXJmbG93bi5lYWNoKGZ1bmN0aW9uKGVsZW1lbnQpe2xlZnQtPWVsZW1lbnQuc2Nyb2xsTGVmdHx8MDt0b3AtPWVsZW1lbnQuc2Nyb2xsVG9wfHwwO30pO3JldHVybnsneCc6bGVmdCwneSc6dG9wfTt9LGdldFRvcDpmdW5jdGlvbihvdmVyZmxvd24pe3JldHVybiB0aGlzLmdldFBvc2l0aW9uKG92ZXJmbG93bikueTt9LGdldExlZnQ6ZnVuY3Rpb24ob3ZlcmZsb3duKXtyZXR1cm4gdGhpcy5nZXRQb3NpdGlvbihvdmVyZmxvd24pLng7fSxnZXRDb29yZGluYXRlczpmdW5jdGlvbihvdmVyZmxvd24pe3ZhciBwb3NpdGlvbj10aGlzLmdldFBvc2l0aW9uKG92ZXJmbG93bik7dmFyIG9iaj17J3dpZHRoJzp0aGlzLm9mZnNldFdpZHRoLCdoZWlnaHQnOnRoaXMub2Zmc2V0SGVpZ2h0LCdsZWZ0Jzpwb3NpdGlvbi54LCd0b3AnOnBvc2l0aW9uLnl9O29iai5yaWdodD1vYmoubGVmdCtvYmoud2lkdGg7b2JqLmJvdHRvbT1vYmoudG9wK29iai5oZWlnaHQ7cmV0dXJuIG9iajt9fSk7RWxlbWVudC5FdmVudHMuZG9tcmVhZHk9e2FkZDpmdW5jdGlvbihmbil7aWYod2luZG93LmxvYWRlZCl7Zm4uY2FsbCh0aGlzKTtyZXR1cm47fVxyXG52YXIgZG9tUmVhZHk9ZnVuY3Rpb24oKXtpZih3aW5kb3cubG9hZGVkKXJldHVybjt3aW5kb3cubG9hZGVkPXRydWU7d2luZG93LnRpbWVyPSRjbGVhcih3aW5kb3cudGltZXIpO3RoaXMuZmlyZUV2ZW50KCdkb21yZWFkeScpO30uYmluZCh0aGlzKTtpZihkb2N1bWVudC5yZWFkeVN0YXRlJiZ3aW5kb3cud2Via2l0KXt3aW5kb3cudGltZXI9ZnVuY3Rpb24oKXtpZihbJ2xvYWRlZCcsJ2NvbXBsZXRlJ10uY29udGFpbnMoZG9jdW1lbnQucmVhZHlTdGF0ZSkpZG9tUmVhZHkoKTt9LnBlcmlvZGljYWwoNTApO31lbHNlIGlmKGRvY3VtZW50LnJlYWR5U3RhdGUmJndpbmRvdy5pZSl7aWYoISQoJ2llX3JlYWR5Jykpe3ZhciBzcmM9KHdpbmRvdy5sb2NhdGlvbi5wcm90b2NvbD09J2h0dHBzOicpPyc6Ly8wJzonamF2YXNjcmlwdDp2b2lkKDApJztkb2N1bWVudC53cml0ZSgnPHNjcmlwdCBpZD1cImllX3JlYWR5XCIgZGVmZXIgc3JjPVwiJytzcmMrJ1wiPjxcXC9zY3JpcHQ+Jyk7JCgnaWVfcmVhZHknKS5vbnJlYWR5c3RhdGVjaGFuZ2U9ZnVuY3Rpb24oKXtpZih0aGlzLnJlYWR5U3RhdGU9PSdjb21wbGV0ZScpZG9tUmVhZHkoKTt9O319ZWxzZXt3aW5kb3cuYWRkTGlzdGVuZXIoXCJsb2FkXCIsZG9tUmVhZHkpO2RvY3VtZW50LmFkZExpc3RlbmVyKFwiRE9NQ29udGVudExvYWRlZFwiLGRvbVJlYWR5KTt9fX07d2luZG93Lm9uRG9tUmVhZHk9ZnVuY3Rpb24oZm4pe3JldHVybiB0aGlzLmFkZEV2ZW50KCdkb21yZWFkeScsZm4pO307d2luZG93LmV4dGVuZCh7Z2V0V2lkdGg6ZnVuY3Rpb24oKXtpZih0aGlzLndlYmtpdDQxOSlyZXR1cm4gdGhpcy5pbm5lcldpZHRoO2lmKHRoaXMub3BlcmEpcmV0dXJuIGRvY3VtZW50LmJvZHkuY2xpZW50V2lkdGg7cmV0dXJuIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRXaWR0aDt9LGdldEhlaWdodDpmdW5jdGlvbigpe2lmKHRoaXMud2Via2l0NDE5KXJldHVybiB0aGlzLmlubmVySGVpZ2h0O2lmKHRoaXMub3BlcmEpcmV0dXJuIGRvY3VtZW50LmJvZHkuY2xpZW50SGVpZ2h0O3JldHVybiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50SGVpZ2h0O30sZ2V0U2Nyb2xsV2lkdGg6ZnVuY3Rpb24oKXtpZih0aGlzLmllKXJldHVybiBNYXRoLm1heChkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQub2Zmc2V0V2lkdGgsZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNjcm9sbFdpZHRoKTtpZih0aGlzLndlYmtpdClyZXR1cm4gZG9jdW1lbnQuYm9keS5zY3JvbGxXaWR0aDtyZXR1cm4gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNjcm9sbFdpZHRoO30sZ2V0U2Nyb2xsSGVpZ2h0OmZ1bmN0aW9uKCl7aWYodGhpcy5pZSlyZXR1cm4gTWF0aC5tYXgoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50Lm9mZnNldEhlaWdodCxkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsSGVpZ2h0KTtpZih0aGlzLndlYmtpdClyZXR1cm4gZG9jdW1lbnQuYm9keS5zY3JvbGxIZWlnaHQ7cmV0dXJuIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxIZWlnaHQ7fSxnZXRTY3JvbGxMZWZ0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucGFnZVhPZmZzZXR8fGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxMZWZ0O30sZ2V0U2Nyb2xsVG9wOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucGFnZVlPZmZzZXR8fGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxUb3A7fSxnZXRTaXplOmZ1bmN0aW9uKCl7cmV0dXJueydzaXplJzp7J3gnOnRoaXMuZ2V0V2lkdGgoKSwneSc6dGhpcy5nZXRIZWlnaHQoKX0sJ3Njcm9sbFNpemUnOnsneCc6dGhpcy5nZXRTY3JvbGxXaWR0aCgpLCd5Jzp0aGlzLmdldFNjcm9sbEhlaWdodCgpfSwnc2Nyb2xsJzp7J3gnOnRoaXMuZ2V0U2Nyb2xsTGVmdCgpLCd5Jzp0aGlzLmdldFNjcm9sbFRvcCgpfX07fSxnZXRQb3NpdGlvbjpmdW5jdGlvbigpe3JldHVybnsneCc6MCwneSc6MH07fX0pO3ZhciBGeD17fTtGeC5CYXNlPW5ldyBDbGFzcyh7b3B0aW9uczp7b25TdGFydDpDbGFzcy5lbXB0eSxvbkNvbXBsZXRlOkNsYXNzLmVtcHR5LG9uQ2FuY2VsOkNsYXNzLmVtcHR5LHRyYW5zaXRpb246ZnVuY3Rpb24ocCl7cmV0dXJuLShNYXRoLmNvcyhNYXRoLlBJKnApLTEpLzI7fSxkdXJhdGlvbjo1MDAsdW5pdDoncHgnLHdhaXQ6dHJ1ZSxmcHM6NTB9LGluaXRpYWxpemU6ZnVuY3Rpb24ob3B0aW9ucyl7dGhpcy5lbGVtZW50PXRoaXMuZWxlbWVudHx8bnVsbDt0aGlzLnNldE9wdGlvbnMob3B0aW9ucyk7aWYodGhpcy5vcHRpb25zLmluaXRpYWxpemUpdGhpcy5vcHRpb25zLmluaXRpYWxpemUuY2FsbCh0aGlzKTt9LHN0ZXA6ZnVuY3Rpb24oKXt2YXIgdGltZT0kdGltZSgpO2lmKHRpbWU8dGhpcy50aW1lK3RoaXMub3B0aW9ucy5kdXJhdGlvbil7dGhpcy5kZWx0YT10aGlzLm9wdGlvbnMudHJhbnNpdGlvbigodGltZS10aGlzLnRpbWUpL3RoaXMub3B0aW9ucy5kdXJhdGlvbik7dGhpcy5zZXROb3coKTt0aGlzLmluY3JlYXNlKCk7fWVsc2V7dGhpcy5zdG9wKHRydWUpO3RoaXMuc2V0KHRoaXMudG8pO3RoaXMuZmlyZUV2ZW50KCdvbkNvbXBsZXRlJyx0aGlzLmVsZW1lbnQsMTApO3RoaXMuY2FsbENoYWluKCk7fX0sc2V0OmZ1bmN0aW9uKHRvKXt0aGlzLm5vdz10bzt0aGlzLmluY3JlYXNlKCk7cmV0dXJuIHRoaXM7fSxzZXROb3c6ZnVuY3Rpb24oKXt0aGlzLm5vdz10aGlzLmNvbXB1dGUodGhpcy5mcm9tLHRoaXMudG8pO30sY29tcHV0ZTpmdW5jdGlvbihmcm9tLHRvKXtyZXR1cm4odG8tZnJvbSkqdGhpcy5kZWx0YStmcm9tO30sc3RhcnQ6ZnVuY3Rpb24oZnJvbSx0byl7aWYoIXRoaXMub3B0aW9ucy53YWl0KXRoaXMuc3RvcCgpO2Vsc2UgaWYodGhpcy50aW1lcilyZXR1cm4gdGhpczt0aGlzLmZyb209ZnJvbTt0aGlzLnRvPXRvO3RoaXMuY2hhbmdlPXRoaXMudG8tdGhpcy5mcm9tO3RoaXMudGltZT0kdGltZSgpO3RoaXMudGltZXI9dGhpcy5zdGVwLnBlcmlvZGljYWwoTWF0aC5yb3VuZCgxMDAwL3RoaXMub3B0aW9ucy5mcHMpLHRoaXMpO3RoaXMuZmlyZUV2ZW50KCdvblN0YXJ0Jyx0aGlzLmVsZW1lbnQpO3JldHVybiB0aGlzO30sc3RvcDpmdW5jdGlvbihlbmQpe2lmKCF0aGlzLnRpbWVyKXJldHVybiB0aGlzO3RoaXMudGltZXI9JGNsZWFyKHRoaXMudGltZXIpO2lmKCFlbmQpdGhpcy5maXJlRXZlbnQoJ29uQ2FuY2VsJyx0aGlzLmVsZW1lbnQpO3JldHVybiB0aGlzO30sY3VzdG9tOmZ1bmN0aW9uKGZyb20sdG8pe3JldHVybiB0aGlzLnN0YXJ0KGZyb20sdG8pO30sY2xlYXJUaW1lcjpmdW5jdGlvbihlbmQpe3JldHVybiB0aGlzLnN0b3AoZW5kKTt9fSk7RnguQmFzZS5pbXBsZW1lbnQobmV3IENoYWluLG5ldyBFdmVudHMsbmV3IE9wdGlvbnMpO0Z4LkNTUz17c2VsZWN0OmZ1bmN0aW9uKHByb3BlcnR5LHRvKXtpZihwcm9wZXJ0eS50ZXN0KC9jb2xvci9pKSlyZXR1cm4gdGhpcy5Db2xvcjt2YXIgdHlwZT0kdHlwZSh0byk7aWYoKHR5cGU9PSdhcnJheScpfHwodHlwZT09J3N0cmluZycmJnRvLmNvbnRhaW5zKCcgJykpKXJldHVybiB0aGlzLk11bHRpO3JldHVybiB0aGlzLlNpbmdsZTt9LHBhcnNlOmZ1bmN0aW9uKGVsLHByb3BlcnR5LGZyb21Ubyl7aWYoIWZyb21Uby5wdXNoKWZyb21Ubz1bZnJvbVRvXTt2YXIgZnJvbT1mcm9tVG9bMF0sdG89ZnJvbVRvWzFdO2lmKCEkY2hrKHRvKSl7dG89ZnJvbTtmcm9tPWVsLmdldFN0eWxlKHByb3BlcnR5KTt9XHJcbnZhciBjc3M9dGhpcy5zZWxlY3QocHJvcGVydHksdG8pO3JldHVybnsnZnJvbSc6Y3NzLnBhcnNlKGZyb20pLCd0byc6Y3NzLnBhcnNlKHRvKSwnY3NzJzpjc3N9O319O0Z4LkNTUy5TaW5nbGU9e3BhcnNlOmZ1bmN0aW9uKHZhbHVlKXtyZXR1cm4gcGFyc2VGbG9hdCh2YWx1ZSk7fSxnZXROb3c6ZnVuY3Rpb24oZnJvbSx0byxmeCl7cmV0dXJuIGZ4LmNvbXB1dGUoZnJvbSx0byk7fSxnZXRWYWx1ZTpmdW5jdGlvbih2YWx1ZSx1bml0LHByb3BlcnR5KXtpZih1bml0PT0ncHgnJiZwcm9wZXJ0eSE9J29wYWNpdHknKXZhbHVlPU1hdGgucm91bmQodmFsdWUpO3JldHVybiB2YWx1ZSt1bml0O319O0Z4LkNTUy5NdWx0aT17cGFyc2U6ZnVuY3Rpb24odmFsdWUpe3JldHVybiB2YWx1ZS5wdXNoP3ZhbHVlOnZhbHVlLnNwbGl0KCcgJykubWFwKGZ1bmN0aW9uKHYpe3JldHVybiBwYXJzZUZsb2F0KHYpO30pO30sZ2V0Tm93OmZ1bmN0aW9uKGZyb20sdG8sZngpe3ZhciBub3c9W107Zm9yKHZhciBpPTA7aTxmcm9tLmxlbmd0aDtpKyspbm93W2ldPWZ4LmNvbXB1dGUoZnJvbVtpXSx0b1tpXSk7cmV0dXJuIG5vdzt9LGdldFZhbHVlOmZ1bmN0aW9uKHZhbHVlLHVuaXQscHJvcGVydHkpe2lmKHVuaXQ9PSdweCcmJnByb3BlcnR5IT0nb3BhY2l0eScpdmFsdWU9dmFsdWUubWFwKE1hdGgucm91bmQpO3JldHVybiB2YWx1ZS5qb2luKHVuaXQrJyAnKSt1bml0O319O0Z4LkNTUy5Db2xvcj17cGFyc2U6ZnVuY3Rpb24odmFsdWUpe3JldHVybiB2YWx1ZS5wdXNoP3ZhbHVlOnZhbHVlLmhleFRvUmdiKHRydWUpO30sZ2V0Tm93OmZ1bmN0aW9uKGZyb20sdG8sZngpe3ZhciBub3c9W107Zm9yKHZhciBpPTA7aTxmcm9tLmxlbmd0aDtpKyspbm93W2ldPU1hdGgucm91bmQoZnguY29tcHV0ZShmcm9tW2ldLHRvW2ldKSk7cmV0dXJuIG5vdzt9LGdldFZhbHVlOmZ1bmN0aW9uKHZhbHVlKXtyZXR1cm4ncmdiKCcrdmFsdWUuam9pbignLCcpKycpJzt9fTtGeC5TdHlsZT1GeC5CYXNlLmV4dGVuZCh7aW5pdGlhbGl6ZTpmdW5jdGlvbihlbCxwcm9wZXJ0eSxvcHRpb25zKXt0aGlzLmVsZW1lbnQ9JChlbCk7dGhpcy5wcm9wZXJ0eT1wcm9wZXJ0eTt0aGlzLnBhcmVudChvcHRpb25zKTt9LGhpZGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zZXQoMCk7fSxzZXROb3c6ZnVuY3Rpb24oKXt0aGlzLm5vdz10aGlzLmNzcy5nZXROb3codGhpcy5mcm9tLHRoaXMudG8sdGhpcyk7fSxzZXQ6ZnVuY3Rpb24odG8pe3RoaXMuY3NzPUZ4LkNTUy5zZWxlY3QodGhpcy5wcm9wZXJ0eSx0byk7cmV0dXJuIHRoaXMucGFyZW50KHRoaXMuY3NzLnBhcnNlKHRvKSk7fSxzdGFydDpmdW5jdGlvbihmcm9tLHRvKXtpZih0aGlzLnRpbWVyJiZ0aGlzLm9wdGlvbnMud2FpdClyZXR1cm4gdGhpczt2YXIgcGFyc2VkPUZ4LkNTUy5wYXJzZSh0aGlzLmVsZW1lbnQsdGhpcy5wcm9wZXJ0eSxbZnJvbSx0b10pO3RoaXMuY3NzPXBhcnNlZC5jc3M7cmV0dXJuIHRoaXMucGFyZW50KHBhcnNlZC5mcm9tLHBhcnNlZC50byk7fSxpbmNyZWFzZTpmdW5jdGlvbigpe3RoaXMuZWxlbWVudC5zZXRTdHlsZSh0aGlzLnByb3BlcnR5LHRoaXMuY3NzLmdldFZhbHVlKHRoaXMubm93LHRoaXMub3B0aW9ucy51bml0LHRoaXMucHJvcGVydHkpKTt9fSk7RWxlbWVudC5leHRlbmQoe2VmZmVjdDpmdW5jdGlvbihwcm9wZXJ0eSxvcHRpb25zKXtyZXR1cm4gbmV3IEZ4LlN0eWxlKHRoaXMscHJvcGVydHksb3B0aW9ucyk7fX0pO3ZhciBEcmFnPXt9O0RyYWcuQmFzZT1uZXcgQ2xhc3Moe29wdGlvbnM6e2hhbmRsZTpmYWxzZSx1bml0OidweCcsb25TdGFydDpDbGFzcy5lbXB0eSxvbkJlZm9yZVN0YXJ0OkNsYXNzLmVtcHR5LG9uQ29tcGxldGU6Q2xhc3MuZW1wdHksb25TbmFwOkNsYXNzLmVtcHR5LG9uRHJhZzpDbGFzcy5lbXB0eSxsaW1pdDpmYWxzZSxtb2RpZmllcnM6e3g6J2xlZnQnLHk6J3RvcCd9LGdyaWQ6ZmFsc2Usc25hcDo2fSxpbml0aWFsaXplOmZ1bmN0aW9uKGVsLG9wdGlvbnMpe3RoaXMuc2V0T3B0aW9ucyhvcHRpb25zKTt0aGlzLmVsZW1lbnQ9JChlbCk7dGhpcy5oYW5kbGU9JCh0aGlzLm9wdGlvbnMuaGFuZGxlKXx8dGhpcy5lbGVtZW50O3RoaXMubW91c2U9eydub3cnOnt9LCdwb3MnOnt9fTt0aGlzLnZhbHVlPXsnc3RhcnQnOnt9LCdub3cnOnt9fTt0aGlzLmJvdW5kPXsnc3RhcnQnOnRoaXMuc3RhcnQuYmluZFdpdGhFdmVudCh0aGlzKSwnY2hlY2snOnRoaXMuY2hlY2suYmluZFdpdGhFdmVudCh0aGlzKSwnZHJhZyc6dGhpcy5kcmFnLmJpbmRXaXRoRXZlbnQodGhpcyksJ3N0b3AnOnRoaXMuc3RvcC5iaW5kKHRoaXMpfTt0aGlzLmF0dGFjaCgpO2lmKHRoaXMub3B0aW9ucy5pbml0aWFsaXplKXRoaXMub3B0aW9ucy5pbml0aWFsaXplLmNhbGwodGhpcyk7fSxhdHRhY2g6ZnVuY3Rpb24oKXt0aGlzLmhhbmRsZS5hZGRFdmVudCgnbW91c2Vkb3duJyx0aGlzLmJvdW5kLnN0YXJ0KTtyZXR1cm4gdGhpczt9LGRldGFjaDpmdW5jdGlvbigpe3RoaXMuaGFuZGxlLnJlbW92ZUV2ZW50KCdtb3VzZWRvd24nLHRoaXMuYm91bmQuc3RhcnQpO3JldHVybiB0aGlzO30sc3RhcnQ6ZnVuY3Rpb24oZXZlbnQpe3RoaXMuZmlyZUV2ZW50KCdvbkJlZm9yZVN0YXJ0Jyx0aGlzLmVsZW1lbnQpO3RoaXMubW91c2Uuc3RhcnQ9ZXZlbnQucGFnZTt2YXIgbGltaXQ9dGhpcy5vcHRpb25zLmxpbWl0O3RoaXMubGltaXQ9eyd4JzpbXSwneSc6W119O2Zvcih2YXIgeiBpbiB0aGlzLm9wdGlvbnMubW9kaWZpZXJzKXtpZighdGhpcy5vcHRpb25zLm1vZGlmaWVyc1t6XSljb250aW51ZTt0aGlzLnZhbHVlLm5vd1t6XT10aGlzLmVsZW1lbnQuZ2V0U3R5bGUodGhpcy5vcHRpb25zLm1vZGlmaWVyc1t6XSkudG9JbnQoKTt0aGlzLm1vdXNlLnBvc1t6XT1ldmVudC5wYWdlW3pdLXRoaXMudmFsdWUubm93W3pdO2lmKGxpbWl0JiZsaW1pdFt6XSl7Zm9yKHZhciBpPTA7aTwyO2krKyl7aWYoJGNoayhsaW1pdFt6XVtpXSkpdGhpcy5saW1pdFt6XVtpXT0oJHR5cGUobGltaXRbel1baV0pPT0nZnVuY3Rpb24nKT9saW1pdFt6XVtpXSgpOmxpbWl0W3pdW2ldO319fVxyXG5pZigkdHlwZSh0aGlzLm9wdGlvbnMuZ3JpZCk9PSdudW1iZXInKXRoaXMub3B0aW9ucy5ncmlkPXsneCc6dGhpcy5vcHRpb25zLmdyaWQsJ3knOnRoaXMub3B0aW9ucy5ncmlkfTtkb2N1bWVudC5hZGRMaXN0ZW5lcignbW91c2Vtb3ZlJyx0aGlzLmJvdW5kLmNoZWNrKTtkb2N1bWVudC5hZGRMaXN0ZW5lcignbW91c2V1cCcsdGhpcy5ib3VuZC5zdG9wKTt0aGlzLmZpcmVFdmVudCgnb25TdGFydCcsdGhpcy5lbGVtZW50KTtldmVudC5zdG9wKCk7fSxjaGVjazpmdW5jdGlvbihldmVudCl7dmFyIGRpc3RhbmNlPU1hdGgucm91bmQoTWF0aC5zcXJ0KE1hdGgucG93KGV2ZW50LnBhZ2UueC10aGlzLm1vdXNlLnN0YXJ0LngsMikrTWF0aC5wb3coZXZlbnQucGFnZS55LXRoaXMubW91c2Uuc3RhcnQueSwyKSkpO2lmKGRpc3RhbmNlPnRoaXMub3B0aW9ucy5zbmFwKXtkb2N1bWVudC5yZW1vdmVMaXN0ZW5lcignbW91c2Vtb3ZlJyx0aGlzLmJvdW5kLmNoZWNrKTtkb2N1bWVudC5hZGRMaXN0ZW5lcignbW91c2Vtb3ZlJyx0aGlzLmJvdW5kLmRyYWcpO3RoaXMuZHJhZyhldmVudCk7dGhpcy5maXJlRXZlbnQoJ29uU25hcCcsdGhpcy5lbGVtZW50KTt9XHJcbmV2ZW50LnN0b3AoKTt9LGRyYWc6ZnVuY3Rpb24oZXZlbnQpe3RoaXMub3V0PWZhbHNlO3RoaXMubW91c2Uubm93PWV2ZW50LnBhZ2U7Zm9yKHZhciB6IGluIHRoaXMub3B0aW9ucy5tb2RpZmllcnMpe2lmKCF0aGlzLm9wdGlvbnMubW9kaWZpZXJzW3pdKWNvbnRpbnVlO3RoaXMudmFsdWUubm93W3pdPXRoaXMubW91c2Uubm93W3pdLXRoaXMubW91c2UucG9zW3pdO2lmKHRoaXMubGltaXRbel0pe2lmKCRjaGsodGhpcy5saW1pdFt6XVsxXSkmJih0aGlzLnZhbHVlLm5vd1t6XT50aGlzLmxpbWl0W3pdWzFdKSl7dGhpcy52YWx1ZS5ub3dbel09dGhpcy5saW1pdFt6XVsxXTt0aGlzLm91dD10cnVlO31lbHNlIGlmKCRjaGsodGhpcy5saW1pdFt6XVswXSkmJih0aGlzLnZhbHVlLm5vd1t6XTx0aGlzLmxpbWl0W3pdWzBdKSl7dGhpcy52YWx1ZS5ub3dbel09dGhpcy5saW1pdFt6XVswXTt0aGlzLm91dD10cnVlO319XHJcbmlmKHRoaXMub3B0aW9ucy5ncmlkW3pdKXRoaXMudmFsdWUubm93W3pdLT0odGhpcy52YWx1ZS5ub3dbel0ldGhpcy5vcHRpb25zLmdyaWRbel0pO3RoaXMuZWxlbWVudC5zZXRTdHlsZSh0aGlzLm9wdGlvbnMubW9kaWZpZXJzW3pdLHRoaXMudmFsdWUubm93W3pdK3RoaXMub3B0aW9ucy51bml0KTt9XHJcbnRoaXMuZmlyZUV2ZW50KCdvbkRyYWcnLHRoaXMuZWxlbWVudCk7ZXZlbnQuc3RvcCgpO30sc3RvcDpmdW5jdGlvbigpe2RvY3VtZW50LnJlbW92ZUxpc3RlbmVyKCdtb3VzZW1vdmUnLHRoaXMuYm91bmQuY2hlY2spO2RvY3VtZW50LnJlbW92ZUxpc3RlbmVyKCdtb3VzZW1vdmUnLHRoaXMuYm91bmQuZHJhZyk7ZG9jdW1lbnQucmVtb3ZlTGlzdGVuZXIoJ21vdXNldXAnLHRoaXMuYm91bmQuc3RvcCk7dGhpcy5maXJlRXZlbnQoJ29uQ29tcGxldGUnLHRoaXMuZWxlbWVudCk7fX0pO0RyYWcuQmFzZS5pbXBsZW1lbnQobmV3IEV2ZW50cyxuZXcgT3B0aW9ucyk7RWxlbWVudC5leHRlbmQoe21ha2VSZXNpemFibGU6ZnVuY3Rpb24ob3B0aW9ucyl7cmV0dXJuIG5ldyBEcmFnLkJhc2UodGhpcywkbWVyZ2Uoe21vZGlmaWVyczp7eDond2lkdGgnLHk6J2hlaWdodCd9fSxvcHRpb25zKSk7fX0pO0RyYWcuTW92ZT1EcmFnLkJhc2UuZXh0ZW5kKHtvcHRpb25zOntkcm9wcGFibGVzOltdLGNvbnRhaW5lcjpmYWxzZSxvdmVyZmxvd246W119LGluaXRpYWxpemU6ZnVuY3Rpb24oZWwsb3B0aW9ucyl7dGhpcy5zZXRPcHRpb25zKG9wdGlvbnMpO3RoaXMuZWxlbWVudD0kKGVsKTt0aGlzLmRyb3BwYWJsZXM9JCQodGhpcy5vcHRpb25zLmRyb3BwYWJsZXMpO3RoaXMuY29udGFpbmVyPSQodGhpcy5vcHRpb25zLmNvbnRhaW5lcik7dGhpcy5wb3NpdGlvbj17J2VsZW1lbnQnOnRoaXMuZWxlbWVudC5nZXRTdHlsZSgncG9zaXRpb24nKSwnY29udGFpbmVyJzpmYWxzZX07aWYodGhpcy5jb250YWluZXIpdGhpcy5wb3NpdGlvbi5jb250YWluZXI9dGhpcy5jb250YWluZXIuZ2V0U3R5bGUoJ3Bvc2l0aW9uJyk7aWYoIVsncmVsYXRpdmUnLCdhYnNvbHV0ZScsJ2ZpeGVkJ10uY29udGFpbnModGhpcy5wb3NpdGlvbi5lbGVtZW50KSl0aGlzLnBvc2l0aW9uLmVsZW1lbnQ9J2Fic29sdXRlJzt2YXIgdG9wPXRoaXMuZWxlbWVudC5nZXRTdHlsZSgndG9wJykudG9JbnQoKTt2YXIgbGVmdD10aGlzLmVsZW1lbnQuZ2V0U3R5bGUoJ2xlZnQnKS50b0ludCgpO2lmKHRoaXMucG9zaXRpb24uZWxlbWVudD09J2Fic29sdXRlJyYmIVsncmVsYXRpdmUnLCdhYnNvbHV0ZScsJ2ZpeGVkJ10uY29udGFpbnModGhpcy5wb3NpdGlvbi5jb250YWluZXIpKXt0b3A9JGNoayh0b3ApP3RvcDp0aGlzLmVsZW1lbnQuZ2V0VG9wKHRoaXMub3B0aW9ucy5vdmVyZmxvd24pO2xlZnQ9JGNoayhsZWZ0KT9sZWZ0OnRoaXMuZWxlbWVudC5nZXRMZWZ0KHRoaXMub3B0aW9ucy5vdmVyZmxvd24pO31lbHNle3RvcD0kY2hrKHRvcCk/dG9wOjA7bGVmdD0kY2hrKGxlZnQpP2xlZnQ6MDt9XHJcbnRoaXMuZWxlbWVudC5zZXRTdHlsZXMoeyd0b3AnOnRvcCwnbGVmdCc6bGVmdCwncG9zaXRpb24nOnRoaXMucG9zaXRpb24uZWxlbWVudH0pO3RoaXMucGFyZW50KHRoaXMuZWxlbWVudCk7fSxzdGFydDpmdW5jdGlvbihldmVudCl7dGhpcy5vdmVyZWQ9bnVsbDtpZih0aGlzLmNvbnRhaW5lcil7dmFyIGNvbnQ9dGhpcy5jb250YWluZXIuZ2V0Q29vcmRpbmF0ZXMoKTt2YXIgZWw9dGhpcy5lbGVtZW50LmdldENvb3JkaW5hdGVzKCk7aWYodGhpcy5wb3NpdGlvbi5lbGVtZW50PT0nYWJzb2x1dGUnJiYhWydyZWxhdGl2ZScsJ2Fic29sdXRlJywnZml4ZWQnXS5jb250YWlucyh0aGlzLnBvc2l0aW9uLmNvbnRhaW5lcikpe3RoaXMub3B0aW9ucy5saW1pdD17J3gnOltjb250LmxlZnQsY29udC5yaWdodC1lbC53aWR0aF0sJ3knOltjb250LnRvcCxjb250LmJvdHRvbS1lbC5oZWlnaHRdfTt9ZWxzZXt0aGlzLm9wdGlvbnMubGltaXQ9eyd5JzpbMCxjb250LmhlaWdodC1lbC5oZWlnaHRdLCd4JzpbMCxjb250LndpZHRoLWVsLndpZHRoXX07fX1cclxudGhpcy5wYXJlbnQoZXZlbnQpO30sZHJhZzpmdW5jdGlvbihldmVudCl7dGhpcy5wYXJlbnQoZXZlbnQpO3ZhciBvdmVyZWQ9dGhpcy5vdXQ/ZmFsc2U6dGhpcy5kcm9wcGFibGVzLmZpbHRlcih0aGlzLmNoZWNrQWdhaW5zdCx0aGlzKS5nZXRMYXN0KCk7aWYodGhpcy5vdmVyZWQhPW92ZXJlZCl7aWYodGhpcy5vdmVyZWQpdGhpcy5vdmVyZWQuZmlyZUV2ZW50KCdsZWF2ZScsW3RoaXMuZWxlbWVudCx0aGlzXSk7dGhpcy5vdmVyZWQ9b3ZlcmVkP292ZXJlZC5maXJlRXZlbnQoJ292ZXInLFt0aGlzLmVsZW1lbnQsdGhpc10pOm51bGw7fVxyXG5yZXR1cm4gdGhpczt9LGNoZWNrQWdhaW5zdDpmdW5jdGlvbihlbCl7ZWw9ZWwuZ2V0Q29vcmRpbmF0ZXModGhpcy5vcHRpb25zLm92ZXJmbG93bik7dmFyIG5vdz10aGlzLm1vdXNlLm5vdztyZXR1cm4obm93Lng+ZWwubGVmdCYmbm93Lng8ZWwucmlnaHQmJm5vdy55PGVsLmJvdHRvbSYmbm93Lnk+ZWwudG9wKTt9LHN0b3A6ZnVuY3Rpb24oKXtpZih0aGlzLm92ZXJlZCYmIXRoaXMub3V0KXRoaXMub3ZlcmVkLmZpcmVFdmVudCgnZHJvcCcsW3RoaXMuZWxlbWVudCx0aGlzXSk7ZWxzZSB0aGlzLmVsZW1lbnQuZmlyZUV2ZW50KCdlbXB0eWRyb3AnLHRoaXMpO3RoaXMucGFyZW50KCk7cmV0dXJuIHRoaXM7fX0pO0VsZW1lbnQuZXh0ZW5kKHttYWtlRHJhZ2dhYmxlOmZ1bmN0aW9uKG9wdGlvbnMpe3JldHVybiBuZXcgRHJhZy5Nb3ZlKHRoaXMsb3B0aW9ucyk7fX0pOyJ9LCAiaGVhZGVyc1NpemUiOiAwLCAiYm9keVNpemUiOiAxMzAwNCwgInJlZGlyZWN0VVJMIjogIiIsICJfdHJhbnNmZXJTaXplIjogMTMwMDR9LCAiY2FjaGUiOiB7fSwgInRpbWluZ3MiOiB7ImRucyI6IC0xLCAiY29ubmVjdCI6IC0xLCAic3NsIjogLTEsICJzZW5kIjogMCwgIndhaXQiOiA1MTguNDMyLCAicmVjZWl2ZSI6IDQuMTgzfSwgInBhZ2VyZWYiOiAicGFnZUA4YzkzMmY4MzM3ZDlhYmI0YjlhYjk4ODlkZWM1MWI5OSIsICJzZXJ2ZXJJUEFkZHJlc3MiOiAiWzI2MDY6NDcwMDoyMDo6NjgxYTplY2ZdIiwgIl9zZXJ2ZXJQb3J0IjogNDQzLCAiX3NlY3VyaXR5RGV0YWlscyI6IHsicHJvdG9jb2wiOiAiVExTIDEuMyIsICJzdWJqZWN0TmFtZSI6ICJzdXBwbHljaGFpbmNhbmFkYS5jb20iLCAiaXNzdWVyIjogIldFMSIsICJ2YWxpZEZyb20iOiAxNzIzNDcwODQxLCAidmFsaWRUbyI6IDE3MzEyNDY4NDB9fSwgeyJzdGFydGVkRGF0ZVRpbWUiOiAiMjAyNC0wOS0wNVQxMTowNzoyMC4yODhaIiwgInRpbWUiOiA0MTQuNDExLCAicmVxdWVzdCI6IHsibWV0aG9kIjogIkdFVCIsICJ1cmwiOiAiaHR0cHM6Ly9wb3J0YWwuc3VwcGx5Y2hhaW5jYW5hZGEuY29tL2NvbW1vbi9zY3JpcHRzL2NhbGVuZGFyL2NhbGVuZGFyLmpzIiwgImh0dHBWZXJzaW9uIjogIkhUVFAvMi4wIiwgImNvb2tpZXMiOiBbeyJuYW1lIjogIkpTRVNTSU9OSUQiLCAidmFsdWUiOiAiMjU3RDlEQzkyMDQ1MkE0RDkzM0I4QTNDREE5QjZCRDMifV0sICJoZWFkZXJzIjogW3sibmFtZSI6ICI6YXV0aG9yaXR5IiwgInZhbHVlIjogInBvcnRhbC5zdXBwbHljaGFpbmNhbmFkYS5jb20ifSwgeyJuYW1lIjogIjptZXRob2QiLCAidmFsdWUiOiAiR0VUIn0sIHsibmFtZSI6ICI6cGF0aCIsICJ2YWx1ZSI6ICIvY29tbW9uL3NjcmlwdHMvY2FsZW5kYXIvY2FsZW5kYXIuanMifSwgeyJuYW1lIjogIjpzY2hlbWUiLCAidmFsdWUiOiAiaHR0cHMifSwgeyJuYW1lIjogImFjY2VwdCIsICJ2YWx1ZSI6ICIqLyoifSwgeyJuYW1lIjogImFjY2VwdC1lbmNvZGluZyIsICJ2YWx1ZSI6ICJnemlwLCBkZWZsYXRlLCBiciwgenN0ZCJ9LCB7Im5hbWUiOiAiYWNjZXB0LWxhbmd1YWdlIiwgInZhbHVlIjogImVuLVVTIn0sIHsibmFtZSI6ICJjb29raWUiLCAidmFsdWUiOiAiSlNFU1NJT05JRD0yNTdEOURDOTIwNDUyQTREOTMzQjhBM0NEQTlCNkJEMyJ9LCB7Im5hbWUiOiAicHJpb3JpdHkiLCAidmFsdWUiOiAidT0xIn0sIHsibmFtZSI6ICJyZWZlcmVyIiwgInZhbHVlIjogImh0dHBzOi8vcG9ydGFsLnN1cHBseWNoYWluY2FuYWRhLmNvbS9lbi9wb3J0YWxsb2dpbiJ9LCB7Im5hbWUiOiAic2VjLWNoLXVhIiwgInZhbHVlIjogIlwiTm90O0E9QnJhbmRcIjt2PVwiMjRcIiwgXCJDaHJvbWl1bVwiO3Y9XCIxMjhcIiJ9LCB7Im5hbWUiOiAic2VjLWNoLXVhLW1vYmlsZSIsICJ2YWx1ZSI6ICI/MCJ9LCB7Im5hbWUiOiAic2VjLWNoLXVhLXBsYXRmb3JtIiwgInZhbHVlIjogIlwiV2luZG93c1wiIn0sIHsibmFtZSI6ICJzZWMtZmV0Y2gtZGVzdCIsICJ2YWx1ZSI6ICJzY3JpcHQifSwgeyJuYW1lIjogInNlYy1mZXRjaC1tb2RlIiwgInZhbHVlIjogIm5vLWNvcnMifSwgeyJuYW1lIjogInNlYy1mZXRjaC1zaXRlIiwgInZhbHVlIjogInNhbWUtb3JpZ2luIn0sIHsibmFtZSI6ICJ1c2VyLWFnZW50IiwgInZhbHVlIjogIk1vemlsbGEvNS4wIChXaW5kb3dzIE5UIDEwLjA7IFdpbjY0OyB4NjQpIEFwcGxlV2ViS2l0LzUzNy4zNiAoS0hUTUwsIGxpa2UgR2Vja28pIENocm9tZS8xMjguMC42NjEzLjE4IFNhZmFyaS81MzcuMzYifV0sICJxdWVyeVN0cmluZyI6IFtdLCAiaGVhZGVyc1NpemUiOiA2OTAsICJib2R5U2l6ZSI6IDB9LCAicmVzcG9uc2UiOiB7InN0YXR1cyI6IDIwMCwgInN0YXR1c1RleHQiOiAiIiwgImh0dHBWZXJzaW9uIjogIkhUVFAvMi4wIiwgImNvb2tpZXMiOiBbXSwgImhlYWRlcnMiOiBbeyJuYW1lIjogImNhY2hlLWNvbnRyb2wiLCAidmFsdWUiOiAibWF4LWFnZT0xNDQwMCJ9LCB7Im5hbWUiOiAiY2YtY2FjaGUtc3RhdHVzIiwgInZhbHVlIjogIk1JU1MifSwgeyJuYW1lIjogImNmLXJheSIsICJ2YWx1ZSI6ICI4YmU1YzE0YmQ4NDM3MWM0LUZSQSJ9LCB7Im5hbWUiOiAiY29udGVudC1lbmNvZGluZyIsICJ2YWx1ZSI6ICJiciJ9LCB7Im5hbWUiOiAiY29udGVudC10eXBlIiwgInZhbHVlIjogImFwcGxpY2F0aW9uL2phdmFzY3JpcHQifSwgeyJuYW1lIjogImRhdGUiLCAidmFsdWUiOiAiVGh1LCAwNSBTZXAgMjAyNCAxMTowNzoyMCBHTVQifSwgeyJuYW1lIjogImV0YWciLCAidmFsdWUiOiAiVy9cIjE1ODMyLTE2ODEzMzM0MjIwMDBcIiJ9LCB7Im5hbWUiOiAibGFzdC1tb2RpZmllZCIsICJ2YWx1ZSI6ICJXZWQsIDEyIEFwciAyMDIzIDIxOjAzOjQyIEdNVCJ9LCB7Im5hbWUiOiAibmVsIiwgInZhbHVlIjogIntcInN1Y2Nlc3NfZnJhY3Rpb25cIjowLFwicmVwb3J0X3RvXCI6XCJjZi1uZWxcIixcIm1heF9hZ2VcIjo2MDQ4MDB9In0sIHsibmFtZSI6ICJyZXBvcnQtdG8iLCAidmFsdWUiOiAie1wiZW5kcG9pbnRzXCI6W3tcInVybFwiOlwiaHR0cHM6XFwvXFwvYS5uZWwuY2xvdWRmbGFyZS5jb21cXC9yZXBvcnRcXC92ND9zPWdzQ2dSR0hlU3ZrQW9BUXFHS001NDYwcE9od3VhQVlKYXd2V2FGRmpvYWZ3WWxjNXZSQXdqZEhlOE5Zbm9xTHF4a2hKbzl6bW1ncTBHJTJGU1hmanphJTJGVzhTZDZhMXlMZktIcjRZeWpVVG85WndjUDFlVEFRbTZsZHNEb212N0RQViUyRllVJTJCSm1IRm4zMkFaTXl1Z2pkb2Z5YiUyRkFYUk1wakxmRmU4JTNEXCJ9XSxcImdyb3VwXCI6XCJjZi1uZWxcIixcIm1heF9hZ2VcIjo2MDQ4MDB9In0sIHsibmFtZSI6ICJzZXJ2ZXIiLCAidmFsdWUiOiAiY2xvdWRmbGFyZSJ9LCB7Im5hbWUiOiAic3RyaWN0LXRyYW5zcG9ydC1zZWN1cml0eSIsICJ2YWx1ZSI6ICJtYXgtYWdlPTYzMDcyMDAwOyBpbmNsdWRlU3ViZG9tYWluczsgcHJlbG9hZCJ9LCB7Im5hbWUiOiAidmFyeSIsICJ2YWx1ZSI6ICJBY2NlcHQtRW5jb2RpbmcifV0sICJjb250ZW50IjogeyJzaXplIjogMTU4MzIsICJtaW1lVHlwZSI6ICJhcHBsaWNhdGlvbi9qYXZhc2NyaXB0IiwgImNvbXByZXNzaW9uIjogMTA0MTQsICJ0ZXh0IjogIi8vIENhbGVuZGFyOiBhIEphdmFzY3JpcHQgY2xhc3MgZm9yIE1vb3Rvb2xzIHRoYXQgYWRkcyBhY2Nlc3NpYmxlIGFuZCB1bm9idHJ1c2l2ZSBkYXRlIHBpY2tlcnMgdG8geW91ciBmb3JtIGVsZW1lbnRzIDxodHRwOi8vZWxlY3RyaWNwcmlzbS5jb20vYWVyb24vY2FsZW5kYXI+XHJcbi8vIENhbGVuZGFyIFJDNCwgQ29weXJpZ2h0IChjKSAyMDA3IEFlcm9uIEdsZW1hbm4gPGh0dHA6Ly9lbGVjdHJpY3ByaXNtLmNvbS9hZXJvbj4sIE1JVCBTdHlsZSBMaWNlbnNlLlxyXG5cclxudmFyIENhbGVuZGFyPW5ldyBDbGFzcyh7b3B0aW9uczp7YmxvY2tlZDpbXSxjbGFzc2VzOltdLGRheXM6W1wiU3VuZGF5XCIsXCJNb25kYXlcIixcIlR1ZXNkYXlcIixcIldlZG5lc2RheVwiLFwiVGh1cnNkYXlcIixcIkZyaWRheVwiLFwiU2F0dXJkYXlcIl0sZGlyZWN0aW9uOjAsZHJhZ2dhYmxlOnRydWUsbW9udGhzOltcIkphbnVhcnlcIixcIkZlYnJ1YXJ5XCIsXCJNYXJjaFwiLFwiQXByaWxcIixcIk1heVwiLFwiSnVuZVwiLFwiSnVseVwiLFwiQXVndXN0XCIsXCJTZXB0ZW1iZXJcIixcIk9jdG9iZXJcIixcIk5vdmVtYmVyXCIsXCJEZWNlbWJlclwiXSxuYXZpZ2F0aW9uOjEsb2Zmc2V0OjAsb25IaWRlU3RhcnQ6Q2xhc3MuZW1wdHksb25IaWRlQ29tcGxldGU6Q2xhc3MuZW1wdHksb25TaG93U3RhcnQ6Q2xhc3MuZW1wdHksb25TaG93Q29tcGxldGU6Q2xhc3MuZW1wdHkscGFkOjEsdHdlYWs6e3g6MCx5OjB9fSxpbml0aWFsaXplOmZ1bmN0aW9uKEYsQil7aWYoIUYpe3JldHVybiBmYWxzZX10aGlzLnNldE9wdGlvbnMoQik7dmFyIEQ9W1wiY2FsZW5kYXJcIixcInByZXZcIixcIm5leHRcIixcIm1vbnRoXCIsXCJ5ZWFyXCIsXCJ0b2RheVwiLFwiaW52YWxpZFwiLFwidmFsaWRcIixcImluYWN0aXZlXCIsXCJhY3RpdmVcIixcImhvdmVyXCIsXCJoaWxpdGVcIl07dmFyIEE9RC5tYXAoZnVuY3Rpb24oSixJKXtpZih0aGlzLm9wdGlvbnMuY2xhc3Nlc1tJXSl7aWYodGhpcy5vcHRpb25zLmNsYXNzZXNbSV0ubGVuZ3RoKXtKPXRoaXMub3B0aW9ucy5jbGFzc2VzW0ldfX1yZXR1cm4gSn0sdGhpcyk7dGhpcy5jbGFzc2VzPUEuYXNzb2NpYXRlKEQpO3RoaXMuY2FsZW5kYXI9bmV3IEVsZW1lbnQoXCJkaXZcIix7c3R5bGVzOntsZWZ0OlwiLTEwMDBweFwiLG9wYWNpdHk6MCxwb3NpdGlvbjpcImFic29sdXRlXCIsdG9wOlwiLTEwMDBweFwiLHpJbmRleDoxMDAwfX0pLmFkZENsYXNzKHRoaXMuY2xhc3Nlcy5jYWxlbmRhcikuaW5qZWN0SW5zaWRlKGRvY3VtZW50LmJvZHkpO2lmKHdpbmRvdy5pZTYpe3RoaXMuaWZyYW1lPW5ldyBFbGVtZW50KFwiaWZyYW1lXCIse3N0eWxlczp7bGVmdDpcIi0xMDAwcHhcIixwb3NpdGlvbjpcImFic29sdXRlXCIsdG9wOlwiLTEwMDBweFwiLHpJbmRleDo5OTl9fSkuaW5qZWN0SW5zaWRlKGRvY3VtZW50LmJvZHkpO3RoaXMuaWZyYW1lLnN0eWxlLmZpbHRlcj1cInByb2dpZDpEWEltYWdlVHJhbnNmb3JtLk1pY3Jvc29mdC5BbHBoYShzdHlsZT0wLG9wYWNpdHk9MClcIn10aGlzLmZ4PXRoaXMuY2FsZW5kYXIuZWZmZWN0KFwib3BhY2l0eVwiLHtvblN0YXJ0OmZ1bmN0aW9uKCl7aWYodGhpcy5jYWxlbmRhci5nZXRTdHlsZShcIm9wYWNpdHlcIik9PTApe2lmKHdpbmRvdy5pZTYpe3RoaXMuaWZyYW1lLnNldFN0eWxlKFwiZGlzcGxheVwiLFwiYmxvY2tcIil9dGhpcy5jYWxlbmRhci5zZXRTdHlsZShcImRpc3BsYXlcIixcImJsb2NrXCIpO3RoaXMuZmlyZUV2ZW50KFwib25TaG93U3RhcnRcIix0aGlzLmVsZW1lbnQpfWVsc2V7dGhpcy5maXJlRXZlbnQoXCJvbkhpZGVTdGFydFwiLHRoaXMuZWxlbWVudCl9fS5iaW5kKHRoaXMpLG9uQ29tcGxldGU6ZnVuY3Rpb24oKXtpZih0aGlzLmNhbGVuZGFyLmdldFN0eWxlKFwib3BhY2l0eVwiKT09MCl7dGhpcy5jYWxlbmRhci5zZXRTdHlsZShcImRpc3BsYXlcIixcIm5vbmVcIik7aWYod2luZG93LmllNil7dGhpcy5pZnJhbWUuc2V0U3R5bGUoXCJkaXNwbGF5XCIsXCJub25lXCIpfXRoaXMuZmlyZUV2ZW50KFwib25IaWRlQ29tcGxldGVcIix0aGlzLmVsZW1lbnQpfWVsc2V7dGhpcy5maXJlRXZlbnQoXCJvblNob3dDb21wbGV0ZVwiLHRoaXMuZWxlbWVudCl9fS5iaW5kKHRoaXMpfSk7aWYod2luZG93LkRyYWcmJnRoaXMub3B0aW9ucy5kcmFnZ2FibGUpe3RoaXMuZHJhZz1uZXcgRHJhZy5Nb3ZlKHRoaXMuY2FsZW5kYXIse29uRHJhZzpmdW5jdGlvbigpe2lmKHdpbmRvdy5pZTYpe3RoaXMuaWZyYW1lLnNldFN0eWxlcyh7bGVmdDp0aGlzLmNhbGVuZGFyLnN0eWxlLmxlZnQsdG9wOnRoaXMuY2FsZW5kYXIuc3R5bGUudG9wfSl9fS5iaW5kKHRoaXMpfSl9dGhpcy5jYWxlbmRhcnM9W107dmFyIEg9MDt2YXIgRz1uZXcgRGF0ZSgpO0cuc2V0RGF0ZShHLmdldERhdGUoKSt0aGlzLm9wdGlvbnMuZGlyZWN0aW9uLnRvSW50KCkpO2Zvcih2YXIgQyBpbiBGKXt2YXIgRT17YnV0dG9uOm5ldyBFbGVtZW50KFwiYnV0dG9uXCIse3R5cGU6XCJidXR0b25cIn0pLGVsOiQoQyksZWxzOltdLGlkOkgrKyxtb250aDpHLmdldE1vbnRoKCksdmlzaWJsZTpmYWxzZSx5ZWFyOkcuZ2V0RnVsbFllYXIoKX07aWYoIXRoaXMuZWxlbWVudChDLEZbQ10sRSkpe2NvbnRpbnVlfUUuZWwuYWRkQ2xhc3ModGhpcy5jbGFzc2VzLmNhbGVuZGFyKTtFLmJ1dHRvbi5hZGRDbGFzcyh0aGlzLmNsYXNzZXMuY2FsZW5kYXIpLmFkZEV2ZW50KFwiY2xpY2tcIixmdW5jdGlvbihJKXt0aGlzLnRvZ2dsZShJKX0ucGFzcyhFLHRoaXMpKS5pbmplY3RBZnRlcihFLmVsKTtFLnZhbD10aGlzLnJlYWQoRSk7JGV4dGVuZChFLHRoaXMuYm91bmRzKEUpKTskZXh0ZW5kKEUsdGhpcy52YWx1ZXMoRSkpO3RoaXMucmVidWlsZChFKTt0aGlzLmNhbGVuZGFycy5wdXNoKEUpfX0sYmxvY2tlZDpmdW5jdGlvbihDKXt2YXIgQT1bXTt2YXIgRD1uZXcgRGF0ZShDLnllYXIsQy5tb250aCwxKS5nZXREYXkoKTt2YXIgQj1uZXcgRGF0ZShDLnllYXIsQy5tb250aCsxLDApLmdldERhdGUoKTt0aGlzLm9wdGlvbnMuYmxvY2tlZC5lYWNoKGZ1bmN0aW9uKEkpe3ZhciBHPUkuc3BsaXQoXCIgXCIpO2Zvcih2YXIgSj0wO0o8PTM7SisrKXtpZighR1tKXSl7R1tKXT0oSj09Myk/XCJcIjpcIipcIn1HW0pdPUdbSl0uY29udGFpbnMoXCIsXCIpP0dbSl0uc3BsaXQoXCIsXCIpOm5ldyBBcnJheShHW0pdKTt2YXIgSz1HW0pdLmxlbmd0aC0xO2Zvcih2YXIgSD1LO0g+PTA7SC0tKXtpZihHW0pdW0hdLmNvbnRhaW5zKFwiLVwiKSl7dmFyIEw9R1tKXVtIXS5zcGxpdChcIi1cIik7Zm9yKHZhciBGPUxbMF07Rjw9TFsxXTtGKyspe2lmKCFHW0pdLmNvbnRhaW5zKEYpKXtHW0pdLnB1c2goRitcIlwiKX19R1tKXS5zcGxpY2UoSCwxKX19fWlmKEdbMl0uY29udGFpbnMoQy55ZWFyK1wiXCIpfHxHWzJdLmNvbnRhaW5zKFwiKlwiKSl7aWYoR1sxXS5jb250YWlucyhDLm1vbnRoKzErXCJcIil8fEdbMV0uY29udGFpbnMoXCIqXCIpKXtHWzBdLmVhY2goZnVuY3Rpb24oTSl7aWYoTT4wKXtBLnB1c2goTS50b0ludCgpKX19KTtpZihHWzNdKXtmb3IodmFyIEo9MDtKPEI7SisrKXt2YXIgRT0oSitEKSU3O2lmKEdbM10uY29udGFpbnMoRStcIlwiKSl7QS5wdXNoKEorMSl9fX19fX0sdGhpcyk7cmV0dXJuIEF9LGJvdW5kczpmdW5jdGlvbihDKXt2YXIgRD1uZXcgRGF0ZSgxMDAwLDAsMSk7dmFyIEE9bmV3IERhdGUoMjk5OSwxMSwzMSk7dmFyIEI9bmV3IERhdGUoKS5nZXREYXRlKCkrdGhpcy5vcHRpb25zLmRpcmVjdGlvbi50b0ludCgpO2lmKHRoaXMub3B0aW9ucy5kaXJlY3Rpb24+MCl7RD1uZXcgRGF0ZSgpO0Quc2V0RGF0ZShCK3RoaXMub3B0aW9ucy5wYWQqQy5pZCl9aWYodGhpcy5vcHRpb25zLmRpcmVjdGlvbjwwKXtBPW5ldyBEYXRlKCk7QS5zZXREYXRlKEItdGhpcy5vcHRpb25zLnBhZCoodGhpcy5jYWxlbmRhcnMubGVuZ3RoLUMuaWQtMSkpfUMuZWxzLmVhY2goZnVuY3Rpb24oRil7aWYoRi5nZXRUYWcoKT09XCJzZWxlY3RcIil7aWYoRi5mb3JtYXQudGVzdChcIih5fFkpXCIpKXt2YXIgRT1bXTtGLmdldENoaWxkcmVuKCkuZWFjaChmdW5jdGlvbihKKXt2YXIgST10aGlzLnVuZm9ybWF0KEoudmFsdWUsRi5mb3JtYXQpO2lmKCFFLmNvbnRhaW5zKElbMF0pKXtFLnB1c2goSVswXSl9fSx0aGlzKTtFLnNvcnQodGhpcy5zb3J0KTtpZihFWzBdPkQuZ2V0RnVsbFllYXIoKSl7ZD1uZXcgRGF0ZShFWzBdLEQuZ2V0TW9udGgoKSsxLDApO2lmKEQuZ2V0RGF0ZSgpPmQuZ2V0RGF0ZSgpKXtELnNldERhdGUoZC5nZXREYXRlKCkpfUQuc2V0WWVhcihFWzBdKX1pZihFLmdldExhc3QoKTxBLmdldEZ1bGxZZWFyKCkpe2Q9bmV3IERhdGUoRS5nZXRMYXN0KCksQS5nZXRNb250aCgpKzEsMCk7aWYoQS5nZXREYXRlKCk+ZC5nZXREYXRlKCkpe0Euc2V0RGF0ZShkLmdldERhdGUoKSl9QS5zZXRZZWFyKEUuZ2V0TGFzdCgpKX19aWYoRi5mb3JtYXQudGVzdChcIihGfG18TXxuKVwiKSl7dmFyIEc9W107dmFyIEg9W107Ri5nZXRDaGlsZHJlbigpLmVhY2goZnVuY3Rpb24oSil7dmFyIEk9dGhpcy51bmZvcm1hdChKLnZhbHVlLEYuZm9ybWF0KTtpZigkdHlwZShJWzBdKSE9XCJudW1iZXJcInx8SVswXT09RVswXSl7aWYoIUcuY29udGFpbnMoSVsxXSkpe0cucHVzaChJWzFdKX19aWYoJHR5cGUoSVswXSkhPVwibnVtYmVyXCJ8fElbMF09PUUuZ2V0TGFzdCgpKXtpZighSC5jb250YWlucyhJWzFdKSl7SC5wdXNoKElbMV0pfX19LHRoaXMpO0cuc29ydCh0aGlzLnNvcnQpO0guc29ydCh0aGlzLnNvcnQpO2lmKEdbMF0+RC5nZXRNb250aCgpKXtkPW5ldyBEYXRlKEQuZ2V0RnVsbFllYXIoKSxHWzBdKzEsMCk7aWYoRC5nZXREYXRlKCk+ZC5nZXREYXRlKCkpe0Quc2V0RGF0ZShkLmdldERhdGUoKSl9RC5zZXRNb250aChHWzBdKX1pZihILmdldExhc3QoKTxBLmdldE1vbnRoKCkpe2Q9bmV3IERhdGUoRC5nZXRGdWxsWWVhcigpLEguZ2V0TGFzdCgpKzEsMCk7aWYoQS5nZXREYXRlKCk+ZC5nZXREYXRlKCkpe0Euc2V0RGF0ZShkLmdldERhdGUoKSl9QS5zZXRNb250aChILmdldExhc3QoKSl9fX19LHRoaXMpO3JldHVybntzdGFydDpELGVuZDpBfX0sY2FwdGlvbjpmdW5jdGlvbihHKXt2YXIgQT17cHJldjp7bW9udGg6dHJ1ZSx5ZWFyOnRydWV9LG5leHQ6e21vbnRoOnRydWUseWVhcjp0cnVlfX07aWYoRy55ZWFyPT1HLnN0YXJ0LmdldEZ1bGxZZWFyKCkpe0EucHJldi55ZWFyPWZhbHNlO2lmKEcubW9udGg9PUcuc3RhcnQuZ2V0TW9udGgoKSYmdGhpcy5vcHRpb25zLm5hdmlnYXRpb249PTEpe0EucHJldi5tb250aD1mYWxzZX19aWYoRy55ZWFyPT1HLmVuZC5nZXRGdWxsWWVhcigpKXtBLm5leHQueWVhcj1mYWxzZTtpZihHLm1vbnRoPT1HLmVuZC5nZXRNb250aCgpJiZ0aGlzLm9wdGlvbnMubmF2aWdhdGlvbj09MSl7QS5uZXh0Lm1vbnRoPWZhbHNlfX1pZigkdHlwZShHLm1vbnRocyk9PVwiYXJyYXlcIil7aWYoRy5tb250aHMubGVuZ3RoPT0xJiZ0aGlzLm9wdGlvbnMubmF2aWdhdGlvbj09Mil7QS5wcmV2Lm1vbnRoPUEubmV4dC5tb250aD1mYWxzZX19dmFyIEI9bmV3IEVsZW1lbnQoXCJjYXB0aW9uXCIpO3ZhciBFPW5ldyBFbGVtZW50KFwiYVwiKS5hZGRDbGFzcyh0aGlzLmNsYXNzZXMucHJldikuYXBwZW5kVGV4dChcIlxceDNjXCIpO3ZhciBEPW5ldyBFbGVtZW50KFwiYVwiKS5hZGRDbGFzcyh0aGlzLmNsYXNzZXMubmV4dCkuYXBwZW5kVGV4dChcIlxceDNlXCIpO2lmKHRoaXMub3B0aW9ucy5uYXZpZ2F0aW9uPT0yKXt2YXIgRj1uZXcgRWxlbWVudChcInNwYW5cIikuYWRkQ2xhc3ModGhpcy5jbGFzc2VzLm1vbnRoKS5pbmplY3RJbnNpZGUoQik7aWYoQS5wcmV2Lm1vbnRoKXtFLmNsb25lKCkuYWRkRXZlbnQoXCJjbGlja1wiLGZ1bmN0aW9uKEgpe3RoaXMubmF2aWdhdGUoSCxcIm1cIiwtMSl9LnBhc3MoRyx0aGlzKSkuaW5qZWN0SW5zaWRlKEYpfUYuYWRvcHQobmV3IEVsZW1lbnQoXCJzcGFuXCIpLmFwcGVuZFRleHQodGhpcy5vcHRpb25zLm1vbnRoc1tHLm1vbnRoXSkpO2lmKEEubmV4dC5tb250aCl7RC5jbG9uZSgpLmFkZEV2ZW50KFwiY2xpY2tcIixmdW5jdGlvbihIKXt0aGlzLm5hdmlnYXRlKEgsXCJtXCIsMSl9LnBhc3MoRyx0aGlzKSkuaW5qZWN0SW5zaWRlKEYpfXZhciBDPW5ldyBFbGVtZW50KFwic3BhblwiKS5hZGRDbGFzcyh0aGlzLmNsYXNzZXMueWVhcikuaW5qZWN0SW5zaWRlKEIpO2lmKEEucHJldi55ZWFyKXtFLmNsb25lKCkuYWRkRXZlbnQoXCJjbGlja1wiLGZ1bmN0aW9uKEgpe3RoaXMubmF2aWdhdGUoSCxcInlcIiwtMSl9LnBhc3MoRyx0aGlzKSkuaW5qZWN0SW5zaWRlKEMpfUMuYWRvcHQobmV3IEVsZW1lbnQoXCJzcGFuXCIpLmFwcGVuZFRleHQoRy55ZWFyKSk7aWYoQS5uZXh0LnllYXIpe0QuY2xvbmUoKS5hZGRFdmVudChcImNsaWNrXCIsZnVuY3Rpb24oSCl7dGhpcy5uYXZpZ2F0ZShILFwieVwiLDEpfS5wYXNzKEcsdGhpcykpLmluamVjdEluc2lkZShDKX19ZWxzZXtpZihBLnByZXYubW9udGgmJnRoaXMub3B0aW9ucy5uYXZpZ2F0aW9uKXtFLmNsb25lKCkuYWRkRXZlbnQoXCJjbGlja1wiLGZ1bmN0aW9uKEgpe3RoaXMubmF2aWdhdGUoSCxcIm1cIiwtMSl9LnBhc3MoRyx0aGlzKSkuaW5qZWN0SW5zaWRlKEIpfUIuYWRvcHQobmV3IEVsZW1lbnQoXCJzcGFuXCIpLmFkZENsYXNzKHRoaXMuY2xhc3Nlcy5tb250aCkuYXBwZW5kVGV4dCh0aGlzLm9wdGlvbnMubW9udGhzW0cubW9udGhdKSk7Qi5hZG9wdChuZXcgRWxlbWVudChcInNwYW5cIikuYWRkQ2xhc3ModGhpcy5jbGFzc2VzLnllYXIpLmFwcGVuZFRleHQoRy55ZWFyKSk7aWYoQS5uZXh0Lm1vbnRoJiZ0aGlzLm9wdGlvbnMubmF2aWdhdGlvbil7RC5jbG9uZSgpLmFkZEV2ZW50KFwiY2xpY2tcIixmdW5jdGlvbihIKXt0aGlzLm5hdmlnYXRlKEgsXCJtXCIsMSl9LnBhc3MoRyx0aGlzKSkuaW5qZWN0SW5zaWRlKEIpfX1yZXR1cm4gQn0sY2hhbmdlZDpmdW5jdGlvbihBKXtBLnZhbD10aGlzLnJlYWQoQSk7JGV4dGVuZChBLHRoaXMudmFsdWVzKEEpKTt0aGlzLnJlYnVpbGQoQSk7aWYoIUEudmFsKXtyZXR1cm4gfWlmKEEudmFsLmdldERhdGUoKTxBLmRheXNbMF0pe0EudmFsLnNldERhdGUoQS5kYXlzWzBdKX1pZihBLnZhbC5nZXREYXRlKCk+QS5kYXlzLmdldExhc3QoKSl7QS52YWwuc2V0RGF0ZShBLmRheXMuZ2V0TGFzdCgpKX1BLmVscy5lYWNoKGZ1bmN0aW9uKEIpe0IudmFsdWU9dGhpcy5mb3JtYXQoQS52YWwsQi5mb3JtYXQpfSx0aGlzKTt0aGlzLmNoZWNrKEEpO3RoaXMuY2FsZW5kYXJzLmVhY2goZnVuY3Rpb24oQil7aWYoQi52aXNpYmxlKXt0aGlzLmRpc3BsYXkoQil9fSx0aGlzKX0sY2hlY2s6ZnVuY3Rpb24oQSl7dGhpcy5jYWxlbmRhcnMuZWFjaChmdW5jdGlvbihELEIpe2lmKEQudmFsKXt2YXIgRT1mYWxzZTtpZihCPEEuaWQpe3ZhciBDPW5ldyBEYXRlKERhdGUucGFyc2UoQS52YWwpKTtDLnNldERhdGUoQy5nZXREYXRlKCktKHRoaXMub3B0aW9ucy5wYWQqKEEuaWQtQikpKTtpZihDPEQudmFsKXtFPXRydWV9fWlmKEI+QS5pZCl7dmFyIEM9bmV3IERhdGUoRGF0ZS5wYXJzZShBLnZhbCkpO0Muc2V0RGF0ZShDLmdldERhdGUoKSsodGhpcy5vcHRpb25zLnBhZCooQi1BLmlkKSkpO2lmKEM+RC52YWwpe0U9dHJ1ZX19aWYoRSl7aWYoRC5zdGFydD5DKXtDPUQuc3RhcnR9aWYoRC5lbmQ8Qyl7Qz1ELmVuZH1ELm1vbnRoPUMuZ2V0TW9udGgoKTtELnllYXI9Qy5nZXRGdWxsWWVhcigpOyRleHRlbmQoRCx0aGlzLnZhbHVlcyhEKSk7RC52YWw9RC5kYXlzLmNvbnRhaW5zKEMuZ2V0RGF0ZSgpKT9DOm51bGw7dGhpcy53cml0ZShEKTtpZihELnZpc2libGUpe3RoaXMuZGlzcGxheShEKX19fWVsc2V7RC5tb250aD1BLm1vbnRoO0QueWVhcj1BLnllYXJ9fSx0aGlzKX0sY2xpY2tlZDpmdW5jdGlvbihDLEEsQil7Qi52YWw9KHRoaXMudmFsdWUoQik9PUEpP251bGw6bmV3IERhdGUoQi55ZWFyLEIubW9udGgsQSk7dGhpcy53cml0ZShCKTtpZighQi52YWwpe0IudmFsPXRoaXMucmVhZChCKX1pZihCLnZhbCl7dGhpcy5jaGVjayhCKTt0aGlzLnRvZ2dsZShCKX1lbHNle0MuYWRkQ2xhc3ModGhpcy5jbGFzc2VzLnZhbGlkKTtDLnJlbW92ZUNsYXNzKHRoaXMuY2xhc3Nlcy5hY3RpdmUpfX0sZGlzcGxheTpmdW5jdGlvbihKKXt0aGlzLmNhbGVuZGFyLmVtcHR5KCk7dGhpcy5jYWxlbmRhci5jbGFzc05hbWU9dGhpcy5jbGFzc2VzLmNhbGVuZGFyK1wiIFwiK3RoaXMub3B0aW9ucy5tb250aHNbSi5tb250aF0udG9Mb3dlckNhc2UoKTt2YXIgSz1uZXcgRWxlbWVudChcImRpdlwiKS5pbmplY3RJbnNpZGUodGhpcy5jYWxlbmRhcik7dmFyIFI9bmV3IEVsZW1lbnQoXCJ0YWJsZVwiKS5pbmplY3RJbnNpZGUoSykuYWRvcHQodGhpcy5jYXB0aW9uKEopKTt2YXIgUT1uZXcgRWxlbWVudChcInRoZWFkXCIpLmluamVjdEluc2lkZShSKTt2YXIgQj1uZXcgRWxlbWVudChcInRyXCIpLmluamVjdEluc2lkZShRKTtmb3IodmFyIFA9MDtQPD02O1ArKyl7dmFyIEU9dGhpcy5vcHRpb25zLmRheXNbKFArdGhpcy5vcHRpb25zLm9mZnNldCklN107Qi5hZG9wdChuZXcgRWxlbWVudChcInRoXCIse3RpdGxlOkV9KS5hcHBlbmRUZXh0KEUuc3Vic3RyKDAsMSkpKX12YXIgQT1uZXcgRWxlbWVudChcInRib2R5XCIpLmluamVjdEluc2lkZShSKTt2YXIgQj1uZXcgRWxlbWVudChcInRyXCIpLmluamVjdEluc2lkZShBKTt2YXIgVD1uZXcgRGF0ZShKLnllYXIsSi5tb250aCwxKTt2YXIgRD0oKFQuZ2V0RGF5KCktdGhpcy5vcHRpb25zLm9mZnNldCkrNyklNzt2YXIgST1uZXcgRGF0ZShKLnllYXIsSi5tb250aCsxLDApLmdldERhdGUoKTt2YXIgTD1uZXcgRGF0ZShKLnllYXIsSi5tb250aCwwKS5nZXREYXRlKCk7dmFyIEY9dGhpcy52YWx1ZShKKTt2YXIgTj1KLmRheXM7dmFyIE09W107dmFyIEc9W107dGhpcy5jYWxlbmRhcnMuZWFjaChmdW5jdGlvbihYLFcpe2lmKFghPUomJlgudmFsKXtpZihKLnllYXI9PVgudmFsLmdldEZ1bGxZZWFyKCkmJkoubW9udGg9PVgudmFsLmdldE1vbnRoKCkpe00ucHVzaChYLnZhbC5nZXREYXRlKCkpfWlmKEoudmFsKXtmb3IodmFyIFY9MTtWPD1JO1YrKyl7VC5zZXREYXRlKFYpO2lmKChXPEouaWQmJlQ+WC52YWwmJlQ8Si52YWwpfHwoVz5KLmlkJiZUPkoudmFsJiZUPFgudmFsKSl7aWYoIUcuY29udGFpbnMoVikpe0cucHVzaChWKX19fX19fSx0aGlzKTt2YXIgVD1uZXcgRGF0ZSgpO3ZhciBTPW5ldyBEYXRlKFQuZ2V0RnVsbFllYXIoKSxULmdldE1vbnRoKCksVC5nZXREYXRlKCkpLmdldFRpbWUoKTtmb3IodmFyIFA9MTtQPDQzO1ArKyl7aWYoKFAtMSklNz09MCl7Qj1uZXcgRWxlbWVudChcInRyXCIpLmluamVjdEluc2lkZShBKX12YXIgSD1uZXcgRWxlbWVudChcInRkXCIpLmluamVjdEluc2lkZShCKTt2YXIgTz1QLUQ7dmFyIFU9bmV3IERhdGUoSi55ZWFyLEoubW9udGgsTyk7dmFyIEM9XCJcIjtpZihPPT09Ril7Qz10aGlzLmNsYXNzZXMuYWN0aXZlfWVsc2V7aWYoTS5jb250YWlucyhPKSl7Qz10aGlzLmNsYXNzZXMuaW5hY3RpdmV9ZWxzZXtpZihOLmNvbnRhaW5zKE8pKXtDPXRoaXMuY2xhc3Nlcy52YWxpZH1lbHNle2lmKE8+PTEmJk88PUkpe0M9dGhpcy5jbGFzc2VzLmludmFsaWR9fX19aWYoVS5nZXRUaW1lKCk9PVMpe0M9QytcIiBcIit0aGlzLmNsYXNzZXMudG9kYXl9aWYoRy5jb250YWlucyhPKSl7Qz1DK1wiIFwiK3RoaXMuY2xhc3Nlcy5oaWxpdGV9SC5hZGRDbGFzcyhDKTtpZihOLmNvbnRhaW5zKE8pKXtILnNldFByb3BlcnR5KFwidGl0bGVcIix0aGlzLmZvcm1hdChVLFwiRCBNIGpTIFlcIikpO0guYWRkRXZlbnRzKHtjbGljazpmdW5jdGlvbihYLFYsVyl7dGhpcy5jbGlja2VkKFgsVixXKX0ucGFzcyhbSCxPLEpdLHRoaXMpLG1vdXNlb3ZlcjpmdW5jdGlvbihXLFYpe1cuYWRkQ2xhc3MoVil9LnBhc3MoW0gsdGhpcy5jbGFzc2VzLmhvdmVyXSksbW91c2VvdXQ6ZnVuY3Rpb24oVyxWKXtXLnJlbW92ZUNsYXNzKFYpfS5wYXNzKFtILHRoaXMuY2xhc3Nlcy5ob3Zlcl0pfSl9aWYoTzwxKXtPPUwrT31lbHNle2lmKE8+SSl7Tz1PLUl9fUguYXBwZW5kVGV4dChPKX19LGVsZW1lbnQ6ZnVuY3Rpb24oQixDLEQpe2lmKCR0eXBlKEMpPT1cIm9iamVjdFwiKXtmb3IodmFyIEEgaW4gQyl7aWYoIXRoaXMuZWxlbWVudChBLENbQV0sRCkpe3JldHVybiBmYWxzZX19cmV0dXJuIHRydWV9Qj0kKEIpO2lmKCFCKXtyZXR1cm4gZmFsc2V9Qi5mb3JtYXQ9QztpZihCLmdldFRhZygpPT1cInNlbGVjdFwiKXtCLmFkZEV2ZW50KFwiY2hhbmdlXCIsZnVuY3Rpb24oRSl7dGhpcy5jaGFuZ2VkKEUpfS5wYXNzKEQsdGhpcykpfWVsc2V7Qi5yZWFkT25seT10cnVlO0IuYWRkRXZlbnQoXCJmb2N1c1wiLGZ1bmN0aW9uKEUpe3RoaXMudG9nZ2xlKEUpfS5wYXNzKEQsdGhpcykpfUQuZWxzLnB1c2goQik7cmV0dXJuIHRydWV9LGZvcm1hdDpmdW5jdGlvbihDLEspe3ZhciBJPVwiXCI7aWYoQyl7dmFyIEU9Qy5nZXREYXRlKCk7dmFyIEw9Qy5nZXREYXkoKTt2YXIgRD10aGlzLm9wdGlvbnMuZGF5c1tMXTt2YXIgQj1DLmdldE1vbnRoKCkrMTt2YXIgSD10aGlzLm9wdGlvbnMubW9udGhzW0ItMV07dmFyIEo9Qy5nZXRGdWxsWWVhcigpK1wiXCI7Zm9yKHZhciBGPTAsRz1LLmxlbmd0aDtGPEc7RisrKXt2YXIgQT1LLmNoYXJBdChGKTtzd2l0Y2goQSl7Y2FzZVwieVwiOko9Si5zdWJzdHIoMik7Y2FzZVwiWVwiOkkrPUo7YnJlYWs7Y2FzZVwibVwiOmlmKEI8MTApe0I9XCIwXCIrQn1jYXNlXCJuXCI6SSs9QjticmVhaztjYXNlXCJNXCI6SD1ILnN1YnN0cigwLDMpO2Nhc2VcIkZcIjpJKz1IO2JyZWFrO2Nhc2VcImRcIjppZihFPDEwKXtFPVwiMFwiK0V9Y2FzZVwialwiOkkrPUU7YnJlYWs7Y2FzZVwiRFwiOkQ9RC5zdWJzdHIoMCwzKTtjYXNlXCJsXCI6SSs9RDticmVhaztjYXNlXCJOXCI6TCs9MTtjYXNlXCJ3XCI6SSs9TDticmVhaztjYXNlXCJTXCI6aWYoRSUxMD09MSYmRSE9XCIxMVwiKXtJKz1cInN0XCJ9ZWxzZXtpZihFJTEwPT0yJiZFIT1cIjEyXCIpe0krPVwibmRcIn1lbHNle2lmKEUlMTA9PTMmJkUhPVwiMTNcIil7SSs9XCJyZFwifWVsc2V7SSs9XCJ0aFwifX19YnJlYWs7ZGVmYXVsdDpJKz1BfX19cmV0dXJuIEl9LG5hdmlnYXRlOmZ1bmN0aW9uKEMsQixEKXtzd2l0Y2goQil7Y2FzZVwibVwiOmlmKCR0eXBlKEMubW9udGhzKT09XCJhcnJheVwiKXt2YXIgQT1DLm1vbnRocy5pbmRleE9mKEMubW9udGgpK0Q7aWYoQTwwfHxBPT1DLm1vbnRocy5sZW5ndGgpe2lmKHRoaXMub3B0aW9ucy5uYXZpZ2F0aW9uPT0xKXt0aGlzLm5hdmlnYXRlKEMsXCJ5XCIsRCl9QT0oQTwwKT9DLm1vbnRocy5sZW5ndGgtMTowfUMubW9udGg9Qy5tb250aHNbQV19ZWxzZXt2YXIgQT1DLm1vbnRoK0Q7aWYoQTwwfHxBPT0xMil7aWYodGhpcy5vcHRpb25zLm5hdmlnYXRpb249PTEpe3RoaXMubmF2aWdhdGUoQyxcInlcIixEKX1BPShBPDApPzExOjB9Qy5tb250aD1BfWJyZWFrO2Nhc2VcInlcIjppZigkdHlwZShDLnllYXJzKT09XCJhcnJheVwiKXt2YXIgQT1DLnllYXJzLmluZGV4T2YoQy55ZWFyKStEO0MueWVhcj1DLnllYXJzW0FdfWVsc2V7Qy55ZWFyKz1EfWJyZWFrfSRleHRlbmQoQyx0aGlzLnZhbHVlcyhDKSk7aWYoJHR5cGUoQy5tb250aHMpPT1cImFycmF5XCIpe3ZhciBBPUMubW9udGhzLmluZGV4T2YoQy5tb250aCk7aWYoQTwwKXtDLm1vbnRoPUMubW9udGhzWzBdfX10aGlzLmRpc3BsYXkoQyl9LHJlYWQ6ZnVuY3Rpb24oQyl7dmFyIEE9W251bGwsbnVsbCxudWxsXTtDLmVscy5lYWNoKGZ1bmN0aW9uKEYpe3ZhciBFPXRoaXMudW5mb3JtYXQoRi52YWx1ZSxGLmZvcm1hdCk7RS5lYWNoKGZ1bmN0aW9uKEgsRyl7aWYoJHR5cGUoSCk9PVwibnVtYmVyXCIpe0FbR109SH19KX0sdGhpcyk7aWYoJHR5cGUoQVswXSk9PVwibnVtYmVyXCIpe0MueWVhcj1BWzBdfWlmKCR0eXBlKEFbMV0pPT1cIm51bWJlclwiKXtDLm1vbnRoPUFbMV19dmFyIEQ9bnVsbDtpZihBLmV2ZXJ5KGZ1bmN0aW9uKEUpe3JldHVybiAkdHlwZShFKT09XCJudW1iZXJcIn0pKXt2YXIgQj1uZXcgRGF0ZShBWzBdLEFbMV0rMSwwKS5nZXREYXRlKCk7aWYoQVsyXT5CKXtBWzJdPUJ9RD1uZXcgRGF0ZShBWzBdLEFbMV0sQVsyXSl9cmV0dXJuKEMudmFsPT1EKT9udWxsOkR9LHJlYnVpbGQ6ZnVuY3Rpb24oQSl7QS5lbHMuZWFjaChmdW5jdGlvbihCKXtpZihCLmdldFRhZygpPT1cInNlbGVjdFwiJiZCLmZvcm1hdC50ZXN0KFwiXihkfGopJFwiKSl7dmFyIEM9dGhpcy52YWx1ZShBKTtpZighQyl7Qz1CLnZhbHVlLnRvSW50KCl9Qi5lbXB0eSgpO0EuZGF5cy5lYWNoKGZ1bmN0aW9uKEQpe3ZhciBFPW5ldyBFbGVtZW50KFwib3B0aW9uXCIse3NlbGVjdGVkOihDPT1EKSx2YWx1ZTooKEIuZm9ybWF0PT1cImRcIiYmRDwxMCk/XCIwXCIrRDpEKX0pLmFwcGVuZFRleHQoRCkuaW5qZWN0SW5zaWRlKEIpfSx0aGlzKX19LHRoaXMpfSxzb3J0OmZ1bmN0aW9uKEIsQSl7cmV0dXJuIEItQX0sdG9nZ2xlOmZ1bmN0aW9uKEMpe2RvY3VtZW50LnJlbW92ZUV2ZW50KFwibW91c2Vkb3duXCIsdGhpcy5mbik7aWYoQy52aXNpYmxlKXtDLnZpc2libGU9ZmFsc2U7Qy5idXR0b24ucmVtb3ZlQ2xhc3ModGhpcy5jbGFzc2VzLmFjdGl2ZSk7dGhpcy5meC5zdGFydCgxLDApfWVsc2V7dGhpcy5mbj1mdW5jdGlvbihJLEgpe3ZhciBJPW5ldyBFdmVudChJKTt2YXIgRz1JLnRhcmdldDt2YXIgRj1mYWxzZTt3aGlsZShHIT1kb2N1bWVudC5ib2R5JiZHLm5vZGVUeXBlPT0xKXtpZihHPT10aGlzLmNhbGVuZGFyKXtGPXRydWV9dGhpcy5jYWxlbmRhcnMuZWFjaChmdW5jdGlvbihKKXtpZihKLmJ1dHRvbj09R3x8Si5lbHMuY29udGFpbnMoRykpe0Y9dHJ1ZX19KTtpZihGKXtJLnN0b3AoKTtyZXR1cm4gZmFsc2V9ZWxzZXtHPUcucGFyZW50Tm9kZX19dGhpcy50b2dnbGUoSCl9LmNyZWF0ZSh7XCJhcmd1bWVudHNcIjpDLGJpbmQ6dGhpcyxldmVudDp0cnVlfSk7ZG9jdW1lbnQuYWRkRXZlbnQoXCJtb3VzZWRvd25cIix0aGlzLmZuKTt0aGlzLmNhbGVuZGFycy5lYWNoKGZ1bmN0aW9uKEYpe2lmKEY9PUMpe0YudmlzaWJsZT10cnVlO0YuYnV0dG9uLmFkZENsYXNzKHRoaXMuY2xhc3Nlcy5hY3RpdmUpfWVsc2V7Ri52aXNpYmxlPWZhbHNlO0YuYnV0dG9uLnJlbW92ZUNsYXNzKHRoaXMuY2xhc3Nlcy5hY3RpdmUpfX0sdGhpcyk7dmFyIEI9d2luZG93LmdldFNpemUoKS5zY3JvbGxTaXplO3ZhciBFPUMuYnV0dG9uLmdldENvb3JkaW5hdGVzKCk7dmFyIEE9RS5yaWdodCt0aGlzLm9wdGlvbnMudHdlYWsueDt2YXIgRD1FLnRvcCt0aGlzLm9wdGlvbnMudHdlYWsueTtpZighdGhpcy5jYWxlbmRhci5jb29yZCl7dGhpcy5jYWxlbmRhci5jb29yZD10aGlzLmNhbGVuZGFyLmdldENvb3JkaW5hdGVzKCl9aWYoQSt0aGlzLmNhbGVuZGFyLmNvb3JkLndpZHRoPkIueCl7QS09KEErdGhpcy5jYWxlbmRhci5jb29yZC53aWR0aC1CLngpfWlmKEQrdGhpcy5jYWxlbmRhci5jb29yZC5oZWlnaHQ+Qi55KXtELT0oRCt0aGlzLmNhbGVuZGFyLmNvb3JkLmhlaWdodC1CLnkpfXRoaXMuY2FsZW5kYXIuc2V0U3R5bGVzKHtsZWZ0OkErXCJweFwiLHRvcDpEK1wicHhcIn0pO2lmKHdpbmRvdy5pZTYpe3RoaXMuaWZyYW1lLnNldFN0eWxlcyh7aGVpZ2h0OnRoaXMuY2FsZW5kYXIuY29vcmQuaGVpZ2h0K1wicHhcIixsZWZ0OkErXCJweFwiLHRvcDpEK1wicHhcIix3aWR0aDp0aGlzLmNhbGVuZGFyLmNvb3JkLndpZHRoK1wicHhcIn0pfXRoaXMuZGlzcGxheShDKTt0aGlzLmZ4LnN0YXJ0KDAsMSl9fSx1bmZvcm1hdDpmdW5jdGlvbihCLEcpe0c9Ry5lc2NhcGVSZWdFeHAoKTt2YXIgST17ZDpcIihbMC05XXsyfSlcIixqOlwiKFswLTldezEsMn0pXCIsRDpcIihcIit0aGlzLm9wdGlvbnMuZGF5cy5tYXAoZnVuY3Rpb24oSil7cmV0dXJuIEouc3Vic3RyKDAsMyl9KS5qb2luKFwifFwiKStcIilcIixsOlwiKFwiK3RoaXMub3B0aW9ucy5kYXlzLmpvaW4oXCJ8XCIpK1wiKVwiLFM6XCIoc3R8bmR8cmR8dGgpXCIsRjpcIihcIit0aGlzLm9wdGlvbnMubW9udGhzLmpvaW4oXCJ8XCIpK1wiKVwiLG06XCIoWzAtOV17Mn0pXCIsTTpcIihcIit0aGlzLm9wdGlvbnMubW9udGhzLm1hcChmdW5jdGlvbihKKXtyZXR1cm4gSi5zdWJzdHIoMCwzKX0pLmpvaW4oXCJ8XCIpK1wiKVwiLG46XCIoWzAtOV17MSwyfSlcIixZOlwiKFswLTldezR9KVwiLHk6XCIoWzAtOV17Mn0pXCJ9O3ZhciBFPVtdO3ZhciBGPVwiXCI7Zm9yKHZhciBDPTA7QzxHLmxlbmd0aDtDKyspe3ZhciBIPUcuY2hhckF0KEMpO2lmKElbSF0pe0UucHVzaChIKTtGKz1JW0hdfWVsc2V7Ris9SH19dmFyIEQ9Qi5tYXRjaChcIl5cIitGK1wiJFwiKTt2YXIgQT1uZXcgQXJyYXkoMyk7aWYoRCl7RD1ELnNsaWNlKDEpO0UuZWFjaChmdW5jdGlvbihLLEope0o9RFtKXTtzd2l0Y2goSyl7Y2FzZVwieVwiOko9XCIxOVwiK0o7Y2FzZVwiWVwiOkFbMF09Si50b0ludCgpO2JyZWFrO2Nhc2VcIkZcIjpKPUouc3Vic3RyKDAsMyk7Y2FzZVwiTVwiOko9dGhpcy5vcHRpb25zLm1vbnRocy5tYXAoZnVuY3Rpb24oTCl7cmV0dXJuIEwuc3Vic3RyKDAsMyl9KS5pbmRleE9mKEopKzE7Y2FzZVwibVwiOmNhc2VcIm5cIjpBWzFdPUoudG9JbnQoKS0xO2JyZWFrO2Nhc2VcImRcIjpjYXNlXCJqXCI6QVsyXT1KLnRvSW50KCk7YnJlYWt9fSx0aGlzKX1yZXR1cm4gQX0sdmFsdWU6ZnVuY3Rpb24oQil7dmFyIEE9bnVsbDtpZihCLnZhbCl7aWYoQi55ZWFyPT1CLnZhbC5nZXRGdWxsWWVhcigpJiZCLm1vbnRoPT1CLnZhbC5nZXRNb250aCgpKXtBPUIudmFsLmdldERhdGUoKX19cmV0dXJuIEF9LHZhbHVlczpmdW5jdGlvbihGKXt2YXIgRCxBLEg7Ri5lbHMuZWFjaChmdW5jdGlvbihJKXtpZihJLmdldFRhZygpPT1cInNlbGVjdFwiKXtpZihJLmZvcm1hdC50ZXN0KFwiKHl8WSlcIikpe0Q9W107SS5nZXRDaGlsZHJlbigpLmVhY2goZnVuY3Rpb24oSyl7dmFyIEo9dGhpcy51bmZvcm1hdChLLnZhbHVlLEkuZm9ybWF0KTtpZighRC5jb250YWlucyhKWzBdKSl7RC5wdXNoKEpbMF0pfX0sdGhpcyk7RC5zb3J0KHRoaXMuc29ydCl9aWYoSS5mb3JtYXQudGVzdChcIihGfG18TXxuKVwiKSl7QT1bXTtJLmdldENoaWxkcmVuKCkuZWFjaChmdW5jdGlvbihLKXt2YXIgSj10aGlzLnVuZm9ybWF0KEsudmFsdWUsSS5mb3JtYXQpO2lmKCR0eXBlKEpbMF0pIT1cIm51bWJlclwifHxKWzBdPT1GLnllYXIpe2lmKCFBLmNvbnRhaW5zKEpbMV0pKXtBLnB1c2goSlsxXSl9fX0sdGhpcyk7QS5zb3J0KHRoaXMuc29ydCl9aWYoSS5mb3JtYXQudGVzdChcIihkfGopXCIpJiYhSS5mb3JtYXQudGVzdChcIl4oZHxqKSRcIikpe0g9W107SS5nZXRDaGlsZHJlbigpLmVhY2goZnVuY3Rpb24oSyl7dmFyIEo9dGhpcy51bmZvcm1hdChLLnZhbHVlLEkuZm9ybWF0KTtpZihKWzBdPT1GLnllYXImJkpbMV09PUYubW9udGgpe2lmKCFILmNvbnRhaW5zKEpbMl0pKXtILnB1c2goSlsyXSl9fX0sdGhpcyl9fX0sdGhpcyk7dmFyIEc9MTt2YXIgRT1uZXcgRGF0ZShGLnllYXIsRi5tb250aCsxLDApLmdldERhdGUoKTtpZihGLnllYXI9PUYuc3RhcnQuZ2V0RnVsbFllYXIoKSl7aWYoQT09bnVsbCYmdGhpcy5vcHRpb25zLm5hdmlnYXRpb249PTIpe0E9W107Zm9yKHZhciBDPTA7QzwxMjtDKyspe2lmKEM+PUYuc3RhcnQuZ2V0TW9udGgoKSl7QS5wdXNoKEMpfX19aWYoRi5tb250aD09Ri5zdGFydC5nZXRNb250aCgpKXtHPUYuc3RhcnQuZ2V0RGF0ZSgpfX1pZihGLnllYXI9PUYuZW5kLmdldEZ1bGxZZWFyKCkpe2lmKEE9PW51bGwmJnRoaXMub3B0aW9ucy5uYXZpZ2F0aW9uPT0yKXtBPVtdO2Zvcih2YXIgQz0wO0M8MTI7QysrKXtpZihDPD1GLmVuZC5nZXRNb250aCgpKXtBLnB1c2goQyl9fX1pZihGLm1vbnRoPT1GLmVuZC5nZXRNb250aCgpKXtFPUYuZW5kLmdldERhdGUoKX19dmFyIEI9dGhpcy5ibG9ja2VkKEYpO2lmKCR0eXBlKEgpPT1cImFycmF5XCIpe0g9SC5maWx0ZXIoZnVuY3Rpb24oSSl7aWYoST49RyYmSTw9RSYmIUIuY29udGFpbnMoSSkpe3JldHVybiBJfX0pfWVsc2V7SD1bXTtmb3IodmFyIEM9RztDPD1FO0MrKyl7aWYoIUIuY29udGFpbnMoQykpe0gucHVzaChDKX19fUguc29ydCh0aGlzLnNvcnQpO3JldHVybntkYXlzOkgsbW9udGhzOkEseWVhcnM6RH19LHdyaXRlOmZ1bmN0aW9uKEEpe3RoaXMucmVidWlsZChBKTtBLmVscy5lYWNoKGZ1bmN0aW9uKEIpe0IudmFsdWU9dGhpcy5mb3JtYXQoQS52YWwsQi5mb3JtYXQpfSx0aGlzKX19KTtDYWxlbmRhci5pbXBsZW1lbnQobmV3IEV2ZW50cyxuZXcgT3B0aW9ucyk7XHJcbiJ9LCAiaGVhZGVyc1NpemUiOiAwLCAiYm9keVNpemUiOiA1NDE4LCAicmVkaXJlY3RVUkwiOiAiIiwgIl90cmFuc2ZlclNpemUiOiA1NDE4fSwgImNhY2hlIjoge30sICJ0aW1pbmdzIjogeyJkbnMiOiAtMSwgImNvbm5lY3QiOiAtMSwgInNzbCI6IC0xLCAic2VuZCI6IDAsICJ3YWl0IjogNDEwLjEyOCwgInJlY2VpdmUiOiA0LjI4M30sICJwYWdlcmVmIjogInBhZ2VAOGM5MzJmODMzN2Q5YWJiNGI5YWI5ODg5ZGVjNTFiOTkiLCAic2VydmVySVBBZGRyZXNzIjogIlsyNjA2OjQ3MDA6MjA6OjY4MWE6ZWNmXSIsICJfc2VydmVyUG9ydCI6IDQ0MywgIl9zZWN1cml0eURldGFpbHMiOiB7InByb3RvY29sIjogIlRMUyAxLjMiLCAic3ViamVjdE5hbWUiOiAic3VwcGx5Y2hhaW5jYW5hZGEuY29tIiwgImlzc3VlciI6ICJXRTEiLCAidmFsaWRGcm9tIjogMTcyMzQ3MDg0MSwgInZhbGlkVG8iOiAxNzMxMjQ2ODQwfX0sIHsic3RhcnRlZERhdGVUaW1lIjogIjIwMjQtMDktMDVUMTE6MDc6MjAuMjg5WiIsICJ0aW1lIjogMzIzLjEyNywgInJlcXVlc3QiOiB7Im1ldGhvZCI6ICJHRVQiLCAidXJsIjogImh0dHBzOi8vcG9ydGFsLnN1cHBseWNoYWluY2FuYWRhLmNvbS9jb21tb24vc2NyaXB0cy9leHRyYS5qcyIsICJodHRwVmVyc2lvbiI6ICJIVFRQLzIuMCIsICJjb29raWVzIjogW3sibmFtZSI6ICJKU0VTU0lPTklEIiwgInZhbHVlIjogIjI1N0Q5REM5MjA0NTJBNEQ5MzNCOEEzQ0RBOUI2QkQzIn1dLCAiaGVhZGVycyI6IFt7Im5hbWUiOiAiOmF1dGhvcml0eSIsICJ2YWx1ZSI6ICJwb3J0YWwuc3VwcGx5Y2hhaW5jYW5hZGEuY29tIn0sIHsibmFtZSI6ICI6bWV0aG9kIiwgInZhbHVlIjogIkdFVCJ9LCB7Im5hbWUiOiAiOnBhdGgiLCAidmFsdWUiOiAiL2NvbW1vbi9zY3JpcHRzL2V4dHJhLmpzIn0sIHsibmFtZSI6ICI6c2NoZW1lIiwgInZhbHVlIjogImh0dHBzIn0sIHsibmFtZSI6ICJhY2NlcHQiLCAidmFsdWUiOiAiKi8qIn0sIHsibmFtZSI6ICJhY2NlcHQtZW5jb2RpbmciLCAidmFsdWUiOiAiZ3ppcCwgZGVmbGF0ZSwgYnIsIHpzdGQifSwgeyJuYW1lIjogImFjY2VwdC1sYW5ndWFnZSIsICJ2YWx1ZSI6ICJlbi1VUyJ9LCB7Im5hbWUiOiAiY29va2llIiwgInZhbHVlIjogIkpTRVNTSU9OSUQ9MjU3RDlEQzkyMDQ1MkE0RDkzM0I4QTNDREE5QjZCRDMifSwgeyJuYW1lIjogInByaW9yaXR5IiwgInZhbHVlIjogInU9MSJ9LCB7Im5hbWUiOiAicmVmZXJlciIsICJ2YWx1ZSI6ICJodHRwczovL3BvcnRhbC5zdXBwbHljaGFpbmNhbmFkYS5jb20vZW4vcG9ydGFsbG9naW4ifSwgeyJuYW1lIjogInNlYy1jaC11YSIsICJ2YWx1ZSI6ICJcIk5vdDtBPUJyYW5kXCI7dj1cIjI0XCIsIFwiQ2hyb21pdW1cIjt2PVwiMTI4XCIifSwgeyJuYW1lIjogInNlYy1jaC11YS1tb2JpbGUiLCAidmFsdWUiOiAiPzAifSwgeyJuYW1lIjogInNlYy1jaC11YS1wbGF0Zm9ybSIsICJ2YWx1ZSI6ICJcIldpbmRvd3NcIiJ9LCB7Im5hbWUiOiAic2VjLWZldGNoLWRlc3QiLCAidmFsdWUiOiAic2NyaXB0In0sIHsibmFtZSI6ICJzZWMtZmV0Y2gtbW9kZSIsICJ2YWx1ZSI6ICJuby1jb3JzIn0sIHsibmFtZSI6ICJzZWMtZmV0Y2gtc2l0ZSIsICJ2YWx1ZSI6ICJzYW1lLW9yaWdpbiJ9LCB7Im5hbWUiOiAidXNlci1hZ2VudCIsICJ2YWx1ZSI6ICJNb3ppbGxhLzUuMCAoV2luZG93cyBOVCAxMC4wOyBXaW42NDsgeDY0KSBBcHBsZVdlYktpdC81MzcuMzYgKEtIVE1MLCBsaWtlIEdlY2tvKSBDaHJvbWUvMTI4LjAuNjYxMy4xOCBTYWZhcmkvNTM3LjM2In1dLCAicXVlcnlTdHJpbmciOiBbXSwgImhlYWRlcnNTaXplIjogNjY2LCAiYm9keVNpemUiOiAwfSwgInJlc3BvbnNlIjogeyJzdGF0dXMiOiAyMDAsICJzdGF0dXNUZXh0IjogIiIsICJodHRwVmVyc2lvbiI6ICJIVFRQLzIuMCIsICJjb29raWVzIjogW10sICJoZWFkZXJzIjogW3sibmFtZSI6ICJjYWNoZS1jb250cm9sIiwgInZhbHVlIjogIm1heC1hZ2U9MTQ0MDAifSwgeyJuYW1lIjogImNmLWNhY2hlLXN0YXR1cyIsICJ2YWx1ZSI6ICJNSVNTIn0sIHsibmFtZSI6ICJjZi1yYXkiLCAidmFsdWUiOiAiOGJlNWMxNGJkODQ3NzFjNC1GUkEifSwgeyJuYW1lIjogImNvbnRlbnQtZW5jb2RpbmciLCAidmFsdWUiOiAiYnIifSwgeyJuYW1lIjogImNvbnRlbnQtdHlwZSIsICJ2YWx1ZSI6ICJhcHBsaWNhdGlvbi9qYXZhc2NyaXB0In0sIHsibmFtZSI6ICJkYXRlIiwgInZhbHVlIjogIlRodSwgMDUgU2VwIDIwMjQgMTE6MDc6MjAgR01UIn0sIHsibmFtZSI6ICJldGFnIiwgInZhbHVlIjogIlcvXCIyNDc4LTE2ODEzMzM0MjIwMDBcIiJ9LCB7Im5hbWUiOiAibGFzdC1tb2RpZmllZCIsICJ2YWx1ZSI6ICJXZWQsIDEyIEFwciAyMDIzIDIxOjAzOjQyIEdNVCJ9LCB7Im5hbWUiOiAibmVsIiwgInZhbHVlIjogIntcInN1Y2Nlc3NfZnJhY3Rpb25cIjowLFwicmVwb3J0X3RvXCI6XCJjZi1uZWxcIixcIm1heF9hZ2VcIjo2MDQ4MDB9In0sIHsibmFtZSI6ICJyZXBvcnQtdG8iLCAidmFsdWUiOiAie1wiZW5kcG9pbnRzXCI6W3tcInVybFwiOlwiaHR0cHM6XFwvXFwvYS5uZWwuY2xvdWRmbGFyZS5jb21cXC9yZXBvcnRcXC92ND9zPXVod211Q2g1NHdyQUFyTXpUNEdtcFJUUlczMjdMODIzZ0FWZEtMcW53SUVLQnhxMU8lMkI3YTFYeER0WDl2JTJGc0dnWCUyQmFibXhHWVlFM2tqTFladG5oQUhlSGFNWlFSTldmOWxIUmZoaFlISSUyRkZZVEJ3OVhnV1c3dGM4QTc1ZnROV09GenFzM0dQdVpCJTJCSUlPR2x6SUl5aFlhYVRTUHdLY3BQbFZrJTNEXCJ9XSxcImdyb3VwXCI6XCJjZi1uZWxcIixcIm1heF9hZ2VcIjo2MDQ4MDB9In0sIHsibmFtZSI6ICJzZXJ2ZXIiLCAidmFsdWUiOiAiY2xvdWRmbGFyZSJ9LCB7Im5hbWUiOiAic3RyaWN0LXRyYW5zcG9ydC1zZWN1cml0eSIsICJ2YWx1ZSI6ICJtYXgtYWdlPTYzMDcyMDAwOyBpbmNsdWRlU3ViZG9tYWluczsgcHJlbG9hZCJ9LCB7Im5hbWUiOiAidmFyeSIsICJ2YWx1ZSI6ICJBY2NlcHQtRW5jb2RpbmcifV0sICJjb250ZW50IjogeyJzaXplIjogMjQ3OCwgIm1pbWVUeXBlIjogImFwcGxpY2F0aW9uL2phdmFzY3JpcHQiLCAiY29tcHJlc3Npb24iOiAxMjM5LCAidGV4dCI6ICJ2YXIgcVRpcFRhZyA9IFwiYSxsYWJlbCxpbnB1dFwiOyAvL1doaWNoIHRhZyBkbyB5b3Ugd2FudCB0byBxVGlwLWl6ZT8gS2VlcCBpdCBsb3dlcmNhc2UhLy9cclxudmFyIHFUaXBYID0gMDsgLy9UaGlzIGlzIHFUaXAncyBYIG9mZnNldC8vXHJcbnZhciBxVGlwWSA9IDE1OyAvL1RoaXMgaXMgcVRpcCdzIFkgb2Zmc2V0Ly9cclxuXHJcbi8vVGhlcmUncyBObyBuZWVkIHRvIGVkaXQgYW55dGhpbmcgYmVsb3cgdGhpcyBsaW5lLy9cclxudG9vbHRpcCA9IHtcclxuICBuYW1lIDogXCJxVGlwXCIsXHJcbiAgb2Zmc2V0WCA6IHFUaXBYLFxyXG4gIG9mZnNldFkgOiBxVGlwWSxcclxuICB0aXAgOiBudWxsXHJcbn1cclxuXHJcbnRvb2x0aXAuaW5pdCA9IGZ1bmN0aW9uICgpIHtcclxuXHR2YXIgdGlwTmFtZVNwYWNlVVJJID0gXCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sXCI7XHJcblx0aWYoIXRpcENvbnRhaW5lcklEKXsgdmFyIHRpcENvbnRhaW5lcklEID0gXCJxVGlwXCI7fVxyXG5cdHZhciB0aXBDb250YWluZXIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCh0aXBDb250YWluZXJJRCk7XHJcblxyXG5cdGlmKCF0aXBDb250YWluZXIpIHtcclxuXHQgIHRpcENvbnRhaW5lciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyA/IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyh0aXBOYW1lU3BhY2VVUkksIFwiZGl2XCIpIDogZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcclxuXHRcdHRpcENvbnRhaW5lci5zZXRBdHRyaWJ1dGUoXCJpZFwiLCB0aXBDb250YWluZXJJRCk7XHJcblx0ICBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZShcImJvZHlcIikuaXRlbSgwKS5hcHBlbmRDaGlsZCh0aXBDb250YWluZXIpO1xyXG5cdH1cclxuXHJcblx0aWYgKCFkb2N1bWVudC5nZXRFbGVtZW50QnlJZCkgcmV0dXJuO1xyXG5cdHRoaXMudGlwID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQgKHRoaXMubmFtZSk7XHJcblx0aWYgKHRoaXMudGlwKSBkb2N1bWVudC5vbm1vdXNlbW92ZSA9IGZ1bmN0aW9uIChldnQpIHt0b29sdGlwLm1vdmUgKGV2dCl9O1xyXG5cclxuXHR2YXIgYSwgc1RpdGxlLCBlbGVtZW50cztcclxuXHRcclxuXHR2YXIgZWxlbWVudExpc3QgPSBxVGlwVGFnLnNwbGl0KFwiLFwiKTtcclxuXHRmb3IodmFyIGogPSAwOyBqIDwgZWxlbWVudExpc3QubGVuZ3RoOyBqKyspXHJcblx0e1x0XHJcblx0XHRlbGVtZW50cyA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKGVsZW1lbnRMaXN0W2pdKTtcclxuXHRcdGlmKGVsZW1lbnRzKVxyXG5cdFx0e1xyXG5cdFx0XHRmb3IgKHZhciBpID0gMDsgaSA8IGVsZW1lbnRzLmxlbmd0aDsgaSArKylcclxuXHRcdFx0e1xyXG5cdFx0XHRcdGEgPSBlbGVtZW50c1tpXTtcclxuXHRcdFx0XHRzVGl0bGUgPSBhLmdldEF0dHJpYnV0ZShcInRpdGxlXCIpO1x0XHRcdFx0XHJcblx0XHRcdFx0aWYoc1RpdGxlKVxyXG5cdFx0XHRcdHtcclxuXHRcdFx0XHRcdGEuc2V0QXR0cmlidXRlKFwidGlwdGl0bGVcIiwgc1RpdGxlKTtcclxuXHRcdFx0XHRcdGEucmVtb3ZlQXR0cmlidXRlKFwidGl0bGVcIik7XHJcblx0XHRcdFx0XHRhLnJlbW92ZUF0dHJpYnV0ZShcImFsdFwiKTtcclxuXHRcdFx0XHRcdGEub25tb3VzZW92ZXIgPSBmdW5jdGlvbigpIHt0b29sdGlwLnNob3codGhpcy5nZXRBdHRyaWJ1dGUoJ3RpcHRpdGxlJykpfTtcclxuXHRcdFx0XHRcdGEub25tb3VzZW91dCA9IGZ1bmN0aW9uKCkge3Rvb2x0aXAuaGlkZSgpfTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHR9XHJcbn1cclxuXHJcbnRvb2x0aXAubW92ZSA9IGZ1bmN0aW9uIChldnQpIHtcclxuXHR2YXIgeD0wLCB5PTA7XHJcblx0aWYgKGRvY3VtZW50LmFsbCkgey8vSUVcclxuXHRcdHggPSAoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50ICYmIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxMZWZ0KSA/IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxMZWZ0IDogZG9jdW1lbnQuYm9keS5zY3JvbGxMZWZ0O1xyXG5cdFx0eSA9IChkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQgJiYgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNjcm9sbFRvcCkgPyBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsVG9wIDogZG9jdW1lbnQuYm9keS5zY3JvbGxUb3A7XHJcblx0XHR4ICs9IHdpbmRvdy5ldmVudC5jbGllbnRYO1xyXG5cdFx0eSArPSB3aW5kb3cuZXZlbnQuY2xpZW50WTtcclxuXHRcdFxyXG5cdH0gZWxzZSB7Ly9Hb29kIEJyb3dzZXJzXHJcblx0XHR4ID0gZXZ0LnBhZ2VYO1xyXG5cdFx0eSA9IGV2dC5wYWdlWTtcclxuXHR9XHJcblx0dGhpcy50aXAuc3R5bGUubGVmdCA9ICh4ICsgdGhpcy5vZmZzZXRYKSArIFwicHhcIjtcclxuXHR0aGlzLnRpcC5zdHlsZS50b3AgPSAoeSArIHRoaXMub2Zmc2V0WSkgKyBcInB4XCI7XHJcbn1cclxuXHJcbnRvb2x0aXAuc2hvdyA9IGZ1bmN0aW9uICh0ZXh0KSB7XHJcblx0aWYgKCF0aGlzLnRpcCkgcmV0dXJuO1xyXG5cdHRoaXMudGlwLmlubmVySFRNTCA9IHRleHQ7XHJcblx0dGhpcy50aXAuc3R5bGUuZGlzcGxheSA9IFwiYmxvY2tcIjtcclxufVxyXG5cclxudG9vbHRpcC5oaWRlID0gZnVuY3Rpb24gKCkge1xyXG5cdGlmICghdGhpcy50aXApIHJldHVybjtcclxuXHR0aGlzLnRpcC5pbm5lckhUTUwgPSBcIlwiO1xyXG5cdHRoaXMudGlwLnN0eWxlLmRpc3BsYXkgPSBcIm5vbmVcIjtcclxufVxyXG5cclxud2luZG93Lm9ubG9hZCA9IGZ1bmN0aW9uICgpIHtcclxuXHR0b29sdGlwLmluaXQgKCk7XHJcbn0ifSwgImhlYWRlcnNTaXplIjogMCwgImJvZHlTaXplIjogMTIzOSwgInJlZGlyZWN0VVJMIjogIiIsICJfdHJhbnNmZXJTaXplIjogMTIzOX0sICJjYWNoZSI6IHt9LCAidGltaW5ncyI6IHsiZG5zIjogLTEsICJjb25uZWN0IjogLTEsICJzc2wiOiAtMSwgInNlbmQiOiAwLCAid2FpdCI6IDMxNy44MiwgInJlY2VpdmUiOiA1LjMwN30sICJwYWdlcmVmIjogInBhZ2VAOGM5MzJmODMzN2Q5YWJiNGI5YWI5ODg5ZGVjNTFiOTkiLCAic2VydmVySVBBZGRyZXNzIjogIlsyNjA2OjQ3MDA6MjA6OjY4MWE6ZWNmXSIsICJfc2VydmVyUG9ydCI6IDQ0MywgIl9zZWN1cml0eURldGFpbHMiOiB7InByb3RvY29sIjogIlRMUyAxLjMiLCAic3ViamVjdE5hbWUiOiAic3VwcGx5Y2hhaW5jYW5hZGEuY29tIiwgImlzc3VlciI6ICJXRTEiLCAidmFsaWRGcm9tIjogMTcyMzQ3MDg0MSwgInZhbGlkVG8iOiAxNzMxMjQ2ODQwfX0sIHsic3RhcnRlZERhdGVUaW1lIjogIjIwMjQtMDktMDVUMTE6MDc6MjAuMjg5WiIsICJ0aW1lIjogNjk2LjIwOSwgInJlcXVlc3QiOiB7Im1ldGhvZCI6ICJHRVQiLCAidXJsIjogImh0dHBzOi8vcG9ydGFsLnN1cHBseWNoYWluY2FuYWRhLmNvbS9jbXMyL2pzL2pxdWVyeS0yLjEuNC5qcyIsICJodHRwVmVyc2lvbiI6ICJIVFRQLzIuMCIsICJjb29raWVzIjogW3sibmFtZSI6ICJKU0VTU0lPTklEIiwgInZhbHVlIjogIjI1N0Q5REM5MjA0NTJBNEQ5MzNCOEEzQ0RBOUI2QkQzIn1dLCAiaGVhZGVycyI6IFt7Im5hbWUiOiAiOmF1dGhvcml0eSIsICJ2YWx1ZSI6ICJwb3J0YWwuc3VwcGx5Y2hhaW5jYW5hZGEuY29tIn0sIHsibmFtZSI6ICI6bWV0aG9kIiwgInZhbHVlIjogIkdFVCJ9LCB7Im5hbWUiOiAiOnBhdGgiLCAidmFsdWUiOiAiL2NtczIvanMvanF1ZXJ5LTIuMS40LmpzIn0sIHsibmFtZSI6ICI6c2NoZW1lIiwgInZhbHVlIjogImh0dHBzIn0sIHsibmFtZSI6ICJhY2NlcHQiLCAidmFsdWUiOiAiKi8qIn0sIHsibmFtZSI6ICJhY2NlcHQtZW5jb2RpbmciLCAidmFsdWUiOiAiZ3ppcCwgZGVmbGF0ZSwgYnIsIHpzdGQifSwgeyJuYW1lIjogImFjY2VwdC1sYW5ndWFnZSIsICJ2YWx1ZSI6ICJlbi1VUyJ9LCB7Im5hbWUiOiAiY29va2llIiwgInZhbHVlIjogIkpTRVNTSU9OSUQ9MjU3RDlEQzkyMDQ1MkE0RDkzM0I4QTNDREE5QjZCRDMifSwgeyJuYW1lIjogInByaW9yaXR5IiwgInZhbHVlIjogInU9MSJ9LCB7Im5hbWUiOiAicmVmZXJlciIsICJ2YWx1ZSI6ICJodHRwczovL3BvcnRhbC5zdXBwbHljaGFpbmNhbmFkYS5jb20vZW4vcG9ydGFsbG9naW4ifSwgeyJuYW1lIjogInNlYy1jaC11YSIsICJ2YWx1ZSI6ICJcIk5vdDtBPUJyYW5kXCI7dj1cIjI0XCIsIFwiQ2hyb21pdW1cIjt2PVwiMTI4XCIifSwgeyJuYW1lIjogInNlYy1jaC11YS1tb2JpbGUiLCAidmFsdWUiOiAiPzAifSwgeyJuYW1lIjogInNlYy1jaC11YS1wbGF0Zm9ybSIsICJ2YWx1ZSI6ICJcIldpbmRvd3NcIiJ9LCB7Im5hbWUiOiAic2VjLWZldGNoLWRlc3QiLCAidmFsdWUiOiAic2NyaXB0In0sIHsibmFtZSI6ICJzZWMtZmV0Y2gtbW9kZSIsICJ2YWx1ZSI6ICJuby1jb3JzIn0sIHsibmFtZSI6ICJzZWMtZmV0Y2gtc2l0ZSIsICJ2YWx1ZSI6ICJzYW1lLW9yaWdpbiJ9LCB7Im5hbWUiOiAidXNlci1hZ2VudCIsICJ2YWx1ZSI6ICJNb3ppbGxhLzUuMCAoV2luZG93cyBOVCAxMC4wOyBXaW42NDsgeDY0KSBBcHBsZVdlYktpdC81MzcuMzYgKEtIVE1MLCBsaWtlIEdlY2tvKSBDaHJvbWUvMTI4LjAuNjYxMy4xOCBTYWZhcmkvNTM3LjM2In1dLCAicXVlcnlTdHJpbmciOiBbXSwgImhlYWRlcnNTaXplIjogNjY2LCAiYm9keVNpemUiOiAwfSwgInJlc3BvbnNlIjogeyJzdGF0dXMiOiAyMDAsICJzdGF0dXNUZXh0IjogIiIsICJodHRwVmVyc2lvbiI6ICJIVFRQLzIuMCIsICJjb29raWVzIjogW10sICJoZWFkZXJzIjogW3sibmFtZSI6ICJjYWNoZS1jb250cm9sIiwgInZhbHVlIjogIm1heC1hZ2U9MTQ0MDAifSwgeyJuYW1lIjogImNmLWNhY2hlLXN0YXR1cyIsICJ2YWx1ZSI6ICJNSVNTIn0sIHsibmFtZSI6ICJjZi1yYXkiLCAidmFsdWUiOiAiOGJlNWMxNGJkODQ4NzFjNC1GUkEifSwgeyJuYW1lIjogImNvbnRlbnQtZW5jb2RpbmciLCAidmFsdWUiOiAiYnIifSwgeyJuYW1lIjogImNvbnRlbnQtdHlwZSIsICJ2YWx1ZSI6ICJhcHBsaWNhdGlvbi9qYXZhc2NyaXB0In0sIHsibmFtZSI6ICJkYXRlIiwgInZhbHVlIjogIlRodSwgMDUgU2VwIDIwMjQgMTE6MDc6MjAgR01UIn0sIHsibmFtZSI6ICJldGFnIiwgInZhbHVlIjogIlcvXCIyNTY4MDctMTY4MTMzMzQyMjAwMFwiIn0sIHsibmFtZSI6ICJsYXN0LW1vZGlmaWVkIiwgInZhbHVlIjogIldlZCwgMTIgQXByIDIwMjMgMjE6MDM6NDIgR01UIn0sIHsibmFtZSI6ICJuZWwiLCAidmFsdWUiOiAie1wic3VjY2Vzc19mcmFjdGlvblwiOjAsXCJyZXBvcnRfdG9cIjpcImNmLW5lbFwiLFwibWF4X2FnZVwiOjYwNDgwMH0ifSwgeyJuYW1lIjogInJlcG9ydC10byIsICJ2YWx1ZSI6ICJ7XCJlbmRwb2ludHNcIjpbe1widXJsXCI6XCJodHRwczpcXC9cXC9hLm5lbC5jbG91ZGZsYXJlLmNvbVxcL3JlcG9ydFxcL3Y0P3M9VHNMdDBxaWx4Q2g1d2hkbDUwVkNaVzNUQU5rZmc2enhwTkdyTURybzZmOWtORVI2dkxQbiUyQk8xSmVJbnp0NmdDVzlocVFWdkdkJTJGczklMkY5MiUyRk1RUUhxaWVzTjAlMkZ5QVN5SldmYVZrNmJsZXRaRExUWTZsd0ElMkZaOHBvMmhkQ0ZGamh2dSUyRmNwejBCY1ptMU5sYVpHdUJrdXkxYnFjbGx4bTVJTjkwJTNEXCJ9XSxcImdyb3VwXCI6XCJjZi1uZWxcIixcIm1heF9hZ2VcIjo2MDQ4MDB9In0sIHsibmFtZSI6ICJzZXJ2ZXIiLCAidmFsdWUiOiAiY2xvdWRmbGFyZSJ9LCB7Im5hbWUiOiAic3RyaWN0LXRyYW5zcG9ydC1zZWN1cml0eSIsICJ2YWx1ZSI6ICJtYXgtYWdlPTYzMDcyMDAwOyBpbmNsdWRlU3ViZG9tYWluczsgcHJlbG9hZCJ9LCB7Im5hbWUiOiAidmFyeSIsICJ2YWx1ZSI6ICJBY2NlcHQtRW5jb2RpbmcifV0sICJjb250ZW50IjogeyJzaXplIjogMjU2ODA3LCAibWltZVR5cGUiOiAiYXBwbGljYXRpb24vamF2YXNjcmlwdCIsICJjb21wcmVzc2lvbiI6IDE4MDA5NywgInRleHQiOiAiLyohXHJcbiAqIGpRdWVyeSBKYXZhU2NyaXB0IExpYnJhcnkgdjIuMS40XHJcbiAqIGh0dHA6Ly9qcXVlcnkuY29tL1xyXG4gKlxyXG4gKiBJbmNsdWRlcyBTaXp6bGUuanNcclxuICogaHR0cDovL3NpenpsZWpzLmNvbS9cclxuICpcclxuICogQ29weXJpZ2h0IDIwMDUsIDIwMTQgalF1ZXJ5IEZvdW5kYXRpb24sIEluYy4gYW5kIG90aGVyIGNvbnRyaWJ1dG9yc1xyXG4gKiBSZWxlYXNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2VcclxuICogaHR0cDovL2pxdWVyeS5vcmcvbGljZW5zZVxyXG4gKlxyXG4gKiBEYXRlOiAyMDE1LTA0LTI4VDE2OjAxWlxyXG4gKi9cclxuXHJcbihmdW5jdGlvbiggZ2xvYmFsLCBmYWN0b3J5ICkge1xyXG5cclxuXHRpZiAoIHR5cGVvZiBtb2R1bGUgPT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIG1vZHVsZS5leHBvcnRzID09PSBcIm9iamVjdFwiICkge1xyXG5cdFx0Ly8gRm9yIENvbW1vbkpTIGFuZCBDb21tb25KUy1saWtlIGVudmlyb25tZW50cyB3aGVyZSBhIHByb3BlciBgd2luZG93YFxyXG5cdFx0Ly8gaXMgcHJlc2VudCwgZXhlY3V0ZSB0aGUgZmFjdG9yeSBhbmQgZ2V0IGpRdWVyeS5cclxuXHRcdC8vIEZvciBlbnZpcm9ubWVudHMgdGhhdCBkbyBub3QgaGF2ZSBhIGB3aW5kb3dgIHdpdGggYSBgZG9jdW1lbnRgXHJcblx0XHQvLyAoc3VjaCBhcyBOb2RlLmpzKSwgZXhwb3NlIGEgZmFjdG9yeSBhcyBtb2R1bGUuZXhwb3J0cy5cclxuXHRcdC8vIFRoaXMgYWNjZW50dWF0ZXMgdGhlIG5lZWQgZm9yIHRoZSBjcmVhdGlvbiBvZiBhIHJlYWwgYHdpbmRvd2AuXHJcblx0XHQvLyBlLmcuIHZhciBqUXVlcnkgPSByZXF1aXJlKFwianF1ZXJ5XCIpKHdpbmRvdyk7XHJcblx0XHQvLyBTZWUgdGlja2V0ICMxNDU0OSBmb3IgbW9yZSBpbmZvLlxyXG5cdFx0bW9kdWxlLmV4cG9ydHMgPSBnbG9iYWwuZG9jdW1lbnQgP1xyXG5cdFx0XHRmYWN0b3J5KCBnbG9iYWwsIHRydWUgKSA6XHJcblx0XHRcdGZ1bmN0aW9uKCB3ICkge1xyXG5cdFx0XHRcdGlmICggIXcuZG9jdW1lbnQgKSB7XHJcblx0XHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoIFwialF1ZXJ5IHJlcXVpcmVzIGEgd2luZG93IHdpdGggYSBkb2N1bWVudFwiICk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdHJldHVybiBmYWN0b3J5KCB3ICk7XHJcblx0XHRcdH07XHJcblx0fSBlbHNlIHtcclxuXHRcdGZhY3RvcnkoIGdsb2JhbCApO1xyXG5cdH1cclxuXHJcbi8vIFBhc3MgdGhpcyBpZiB3aW5kb3cgaXMgbm90IGRlZmluZWQgeWV0XHJcbn0odHlwZW9mIHdpbmRvdyAhPT0gXCJ1bmRlZmluZWRcIiA/IHdpbmRvdyA6IHRoaXMsIGZ1bmN0aW9uKCB3aW5kb3csIG5vR2xvYmFsICkge1xyXG5cclxuLy8gU3VwcG9ydDogRmlyZWZveCAxOCtcclxuLy8gQ2FuJ3QgYmUgaW4gc3RyaWN0IG1vZGUsIHNldmVyYWwgbGlicyBpbmNsdWRpbmcgQVNQLk5FVCB0cmFjZVxyXG4vLyB0aGUgc3RhY2sgdmlhIGFyZ3VtZW50cy5jYWxsZXIuY2FsbGVlIGFuZCBGaXJlZm94IGRpZXMgaWZcclxuLy8geW91IHRyeSB0byB0cmFjZSB0aHJvdWdoIFwidXNlIHN0cmljdFwiIGNhbGwgY2hhaW5zLiAoIzEzMzM1KVxyXG4vL1xyXG5cclxudmFyIGFyciA9IFtdO1xyXG5cclxudmFyIHNsaWNlID0gYXJyLnNsaWNlO1xyXG5cclxudmFyIGNvbmNhdCA9IGFyci5jb25jYXQ7XHJcblxyXG52YXIgcHVzaCA9IGFyci5wdXNoO1xyXG5cclxudmFyIGluZGV4T2YgPSBhcnIuaW5kZXhPZjtcclxuXHJcbnZhciBjbGFzczJ0eXBlID0ge307XHJcblxyXG52YXIgdG9TdHJpbmcgPSBjbGFzczJ0eXBlLnRvU3RyaW5nO1xyXG5cclxudmFyIGhhc093biA9IGNsYXNzMnR5cGUuaGFzT3duUHJvcGVydHk7XHJcblxyXG52YXIgc3VwcG9ydCA9IHt9O1xyXG5cclxuXHJcblxyXG52YXJcclxuXHQvLyBVc2UgdGhlIGNvcnJlY3QgZG9jdW1lbnQgYWNjb3JkaW5nbHkgd2l0aCB3aW5kb3cgYXJndW1lbnQgKHNhbmRib3gpXHJcblx0ZG9jdW1lbnQgPSB3aW5kb3cuZG9jdW1lbnQsXHJcblxyXG5cdHZlcnNpb24gPSBcIjIuMS40XCIsXHJcblxyXG5cdC8vIERlZmluZSBhIGxvY2FsIGNvcHkgb2YgalF1ZXJ5XHJcblx0alF1ZXJ5ID0gZnVuY3Rpb24oIHNlbGVjdG9yLCBjb250ZXh0ICkge1xyXG5cdFx0Ly8gVGhlIGpRdWVyeSBvYmplY3QgaXMgYWN0dWFsbHkganVzdCB0aGUgaW5pdCBjb25zdHJ1Y3RvciAnZW5oYW5jZWQnXHJcblx0XHQvLyBOZWVkIGluaXQgaWYgalF1ZXJ5IGlzIGNhbGxlZCAoanVzdCBhbGxvdyBlcnJvciB0byBiZSB0aHJvd24gaWYgbm90IGluY2x1ZGVkKVxyXG5cdFx0cmV0dXJuIG5ldyBqUXVlcnkuZm4uaW5pdCggc2VsZWN0b3IsIGNvbnRleHQgKTtcclxuXHR9LFxyXG5cclxuXHQvLyBTdXBwb3J0OiBBbmRyb2lkPDQuMVxyXG5cdC8vIE1ha2Ugc3VyZSB3ZSB0cmltIEJPTSBhbmQgTkJTUFxyXG5cdHJ0cmltID0gL15bXFxzXFx1RkVGRlxceEEwXSt8W1xcc1xcdUZFRkZcXHhBMF0rJC9nLFxyXG5cclxuXHQvLyBNYXRjaGVzIGRhc2hlZCBzdHJpbmcgZm9yIGNhbWVsaXppbmdcclxuXHRybXNQcmVmaXggPSAvXi1tcy0vLFxyXG5cdHJkYXNoQWxwaGEgPSAvLShbXFxkYS16XSkvZ2ksXHJcblxyXG5cdC8vIFVzZWQgYnkgalF1ZXJ5LmNhbWVsQ2FzZSBhcyBjYWxsYmFjayB0byByZXBsYWNlKClcclxuXHRmY2FtZWxDYXNlID0gZnVuY3Rpb24oIGFsbCwgbGV0dGVyICkge1xyXG5cdFx0cmV0dXJuIGxldHRlci50b1VwcGVyQ2FzZSgpO1xyXG5cdH07XHJcblxyXG5qUXVlcnkuZm4gPSBqUXVlcnkucHJvdG90eXBlID0ge1xyXG5cdC8vIFRoZSBjdXJyZW50IHZlcnNpb24gb2YgalF1ZXJ5IGJlaW5nIHVzZWRcclxuXHRqcXVlcnk6IHZlcnNpb24sXHJcblxyXG5cdGNvbnN0cnVjdG9yOiBqUXVlcnksXHJcblxyXG5cdC8vIFN0YXJ0IHdpdGggYW4gZW1wdHkgc2VsZWN0b3JcclxuXHRzZWxlY3RvcjogXCJcIixcclxuXHJcblx0Ly8gVGhlIGRlZmF1bHQgbGVuZ3RoIG9mIGEgalF1ZXJ5IG9iamVjdCBpcyAwXHJcblx0bGVuZ3RoOiAwLFxyXG5cclxuXHR0b0FycmF5OiBmdW5jdGlvbigpIHtcclxuXHRcdHJldHVybiBzbGljZS5jYWxsKCB0aGlzICk7XHJcblx0fSxcclxuXHJcblx0Ly8gR2V0IHRoZSBOdGggZWxlbWVudCBpbiB0aGUgbWF0Y2hlZCBlbGVtZW50IHNldCBPUlxyXG5cdC8vIEdldCB0aGUgd2hvbGUgbWF0Y2hlZCBlbGVtZW50IHNldCBhcyBhIGNsZWFuIGFycmF5XHJcblx0Z2V0OiBmdW5jdGlvbiggbnVtICkge1xyXG5cdFx0cmV0dXJuIG51bSAhPSBudWxsID9cclxuXHJcblx0XHRcdC8vIFJldHVybiBqdXN0IHRoZSBvbmUgZWxlbWVudCBmcm9tIHRoZSBzZXRcclxuXHRcdFx0KCBudW0gPCAwID8gdGhpc1sgbnVtICsgdGhpcy5sZW5ndGggXSA6IHRoaXNbIG51bSBdICkgOlxyXG5cclxuXHRcdFx0Ly8gUmV0dXJuIGFsbCB0aGUgZWxlbWVudHMgaW4gYSBjbGVhbiBhcnJheVxyXG5cdFx0XHRzbGljZS5jYWxsKCB0aGlzICk7XHJcblx0fSxcclxuXHJcblx0Ly8gVGFrZSBhbiBhcnJheSBvZiBlbGVtZW50cyBhbmQgcHVzaCBpdCBvbnRvIHRoZSBzdGFja1xyXG5cdC8vIChyZXR1cm5pbmcgdGhlIG5ldyBtYXRjaGVkIGVsZW1lbnQgc2V0KVxyXG5cdHB1c2hTdGFjazogZnVuY3Rpb24oIGVsZW1zICkge1xyXG5cclxuXHRcdC8vIEJ1aWxkIGEgbmV3IGpRdWVyeSBtYXRjaGVkIGVsZW1lbnQgc2V0XHJcblx0XHR2YXIgcmV0ID0galF1ZXJ5Lm1lcmdlKCB0aGlzLmNvbnN0cnVjdG9yKCksIGVsZW1zICk7XHJcblxyXG5cdFx0Ly8gQWRkIHRoZSBvbGQgb2JqZWN0IG9udG8gdGhlIHN0YWNrIChhcyBhIHJlZmVyZW5jZSlcclxuXHRcdHJldC5wcmV2T2JqZWN0ID0gdGhpcztcclxuXHRcdHJldC5jb250ZXh0ID0gdGhpcy5jb250ZXh0O1xyXG5cclxuXHRcdC8vIFJldHVybiB0aGUgbmV3bHktZm9ybWVkIGVsZW1lbnQgc2V0XHJcblx0XHRyZXR1cm4gcmV0O1xyXG5cdH0sXHJcblxyXG5cdC8vIEV4ZWN1dGUgYSBjYWxsYmFjayBmb3IgZXZlcnkgZWxlbWVudCBpbiB0aGUgbWF0Y2hlZCBzZXQuXHJcblx0Ly8gKFlvdSBjYW4gc2VlZCB0aGUgYXJndW1lbnRzIHdpdGggYW4gYXJyYXkgb2YgYXJncywgYnV0IHRoaXMgaXNcclxuXHQvLyBvbmx5IHVzZWQgaW50ZXJuYWxseS4pXHJcblx0ZWFjaDogZnVuY3Rpb24oIGNhbGxiYWNrLCBhcmdzICkge1xyXG5cdFx0cmV0dXJuIGpRdWVyeS5lYWNoKCB0aGlzLCBjYWxsYmFjaywgYXJncyApO1xyXG5cdH0sXHJcblxyXG5cdG1hcDogZnVuY3Rpb24oIGNhbGxiYWNrICkge1xyXG5cdFx0cmV0dXJuIHRoaXMucHVzaFN0YWNrKCBqUXVlcnkubWFwKHRoaXMsIGZ1bmN0aW9uKCBlbGVtLCBpICkge1xyXG5cdFx0XHRyZXR1cm4gY2FsbGJhY2suY2FsbCggZWxlbSwgaSwgZWxlbSApO1xyXG5cdFx0fSkpO1xyXG5cdH0sXHJcblxyXG5cdHNsaWNlOiBmdW5jdGlvbigpIHtcclxuXHRcdHJldHVybiB0aGlzLnB1c2hTdGFjayggc2xpY2UuYXBwbHkoIHRoaXMsIGFyZ3VtZW50cyApICk7XHJcblx0fSxcclxuXHJcblx0Zmlyc3Q6IGZ1bmN0aW9uKCkge1xyXG5cdFx0cmV0dXJuIHRoaXMuZXEoIDAgKTtcclxuXHR9LFxyXG5cclxuXHRsYXN0OiBmdW5jdGlvbigpIHtcclxuXHRcdHJldHVybiB0aGlzLmVxKCAtMSApO1xyXG5cdH0sXHJcblxyXG5cdGVxOiBmdW5jdGlvbiggaSApIHtcclxuXHRcdHZhciBsZW4gPSB0aGlzLmxlbmd0aCxcclxuXHRcdFx0aiA9ICtpICsgKCBpIDwgMCA/IGxlbiA6IDAgKTtcclxuXHRcdHJldHVybiB0aGlzLnB1c2hTdGFjayggaiA+PSAwICYmIGogPCBsZW4gPyBbIHRoaXNbal0gXSA6IFtdICk7XHJcblx0fSxcclxuXHJcblx0ZW5kOiBmdW5jdGlvbigpIHtcclxuXHRcdHJldHVybiB0aGlzLnByZXZPYmplY3QgfHwgdGhpcy5jb25zdHJ1Y3RvcihudWxsKTtcclxuXHR9LFxyXG5cclxuXHQvLyBGb3IgaW50ZXJuYWwgdXNlIG9ubHkuXHJcblx0Ly8gQmVoYXZlcyBsaWtlIGFuIEFycmF5J3MgbWV0aG9kLCBub3QgbGlrZSBhIGpRdWVyeSBtZXRob2QuXHJcblx0cHVzaDogcHVzaCxcclxuXHRzb3J0OiBhcnIuc29ydCxcclxuXHRzcGxpY2U6IGFyci5zcGxpY2VcclxufTtcclxuXHJcbmpRdWVyeS5leHRlbmQgPSBqUXVlcnkuZm4uZXh0ZW5kID0gZnVuY3Rpb24oKSB7XHJcblx0dmFyIG9wdGlvbnMsIG5hbWUsIHNyYywgY29weSwgY29weUlzQXJyYXksIGNsb25lLFxyXG5cdFx0dGFyZ2V0ID0gYXJndW1lbnRzWzBdIHx8IHt9LFxyXG5cdFx0aSA9IDEsXHJcblx0XHRsZW5ndGggPSBhcmd1bWVudHMubGVuZ3RoLFxyXG5cdFx0ZGVlcCA9IGZhbHNlO1xyXG5cclxuXHQvLyBIYW5kbGUgYSBkZWVwIGNvcHkgc2l0dWF0aW9uXHJcblx0aWYgKCB0eXBlb2YgdGFyZ2V0ID09PSBcImJvb2xlYW5cIiApIHtcclxuXHRcdGRlZXAgPSB0YXJnZXQ7XHJcblxyXG5cdFx0Ly8gU2tpcCB0aGUgYm9vbGVhbiBhbmQgdGhlIHRhcmdldFxyXG5cdFx0dGFyZ2V0ID0gYXJndW1lbnRzWyBpIF0gfHwge307XHJcblx0XHRpKys7XHJcblx0fVxyXG5cclxuXHQvLyBIYW5kbGUgY2FzZSB3aGVuIHRhcmdldCBpcyBhIHN0cmluZyBvciBzb21ldGhpbmcgKHBvc3NpYmxlIGluIGRlZXAgY29weSlcclxuXHRpZiAoIHR5cGVvZiB0YXJnZXQgIT09IFwib2JqZWN0XCIgJiYgIWpRdWVyeS5pc0Z1bmN0aW9uKHRhcmdldCkgKSB7XHJcblx0XHR0YXJnZXQgPSB7fTtcclxuXHR9XHJcblxyXG5cdC8vIEV4dGVuZCBqUXVlcnkgaXRzZWxmIGlmIG9ubHkgb25lIGFyZ3VtZW50IGlzIHBhc3NlZFxyXG5cdGlmICggaSA9PT0gbGVuZ3RoICkge1xyXG5cdFx0dGFyZ2V0ID0gdGhpcztcclxuXHRcdGktLTtcclxuXHR9XHJcblxyXG5cdGZvciAoIDsgaSA8IGxlbmd0aDsgaSsrICkge1xyXG5cdFx0Ly8gT25seSBkZWFsIHdpdGggbm9uLW51bGwvdW5kZWZpbmVkIHZhbHVlc1xyXG5cdFx0aWYgKCAob3B0aW9ucyA9IGFyZ3VtZW50c1sgaSBdKSAhPSBudWxsICkge1xyXG5cdFx0XHQvLyBFeHRlbmQgdGhlIGJhc2Ugb2JqZWN0XHJcblx0XHRcdGZvciAoIG5hbWUgaW4gb3B0aW9ucyApIHtcclxuXHRcdFx0XHRzcmMgPSB0YXJnZXRbIG5hbWUgXTtcclxuXHRcdFx0XHRjb3B5ID0gb3B0aW9uc1sgbmFtZSBdO1xyXG5cclxuXHRcdFx0XHQvLyBQcmV2ZW50IG5ldmVyLWVuZGluZyBsb29wXHJcblx0XHRcdFx0aWYgKCB0YXJnZXQgPT09IGNvcHkgKSB7XHJcblx0XHRcdFx0XHRjb250aW51ZTtcclxuXHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdC8vIFJlY3Vyc2UgaWYgd2UncmUgbWVyZ2luZyBwbGFpbiBvYmplY3RzIG9yIGFycmF5c1xyXG5cdFx0XHRcdGlmICggZGVlcCAmJiBjb3B5ICYmICggalF1ZXJ5LmlzUGxhaW5PYmplY3QoY29weSkgfHwgKGNvcHlJc0FycmF5ID0galF1ZXJ5LmlzQXJyYXkoY29weSkpICkgKSB7XHJcblx0XHRcdFx0XHRpZiAoIGNvcHlJc0FycmF5ICkge1xyXG5cdFx0XHRcdFx0XHRjb3B5SXNBcnJheSA9IGZhbHNlO1xyXG5cdFx0XHRcdFx0XHRjbG9uZSA9IHNyYyAmJiBqUXVlcnkuaXNBcnJheShzcmMpID8gc3JjIDogW107XHJcblxyXG5cdFx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdFx0Y2xvbmUgPSBzcmMgJiYgalF1ZXJ5LmlzUGxhaW5PYmplY3Qoc3JjKSA/IHNyYyA6IHt9O1xyXG5cdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdC8vIE5ldmVyIG1vdmUgb3JpZ2luYWwgb2JqZWN0cywgY2xvbmUgdGhlbVxyXG5cdFx0XHRcdFx0dGFyZ2V0WyBuYW1lIF0gPSBqUXVlcnkuZXh0ZW5kKCBkZWVwLCBjbG9uZSwgY29weSApO1xyXG5cclxuXHRcdFx0XHQvLyBEb24ndCBicmluZyBpbiB1bmRlZmluZWQgdmFsdWVzXHJcblx0XHRcdFx0fSBlbHNlIGlmICggY29weSAhPT0gdW5kZWZpbmVkICkge1xyXG5cdFx0XHRcdFx0dGFyZ2V0WyBuYW1lIF0gPSBjb3B5O1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0Ly8gUmV0dXJuIHRoZSBtb2RpZmllZCBvYmplY3RcclxuXHRyZXR1cm4gdGFyZ2V0O1xyXG59O1xyXG5cclxualF1ZXJ5LmV4dGVuZCh7XHJcblx0Ly8gVW5pcXVlIGZvciBlYWNoIGNvcHkgb2YgalF1ZXJ5IG9uIHRoZSBwYWdlXHJcblx0ZXhwYW5kbzogXCJqUXVlcnlcIiArICggdmVyc2lvbiArIE1hdGgucmFuZG9tKCkgKS5yZXBsYWNlKCAvXFxEL2csIFwiXCIgKSxcclxuXHJcblx0Ly8gQXNzdW1lIGpRdWVyeSBpcyByZWFkeSB3aXRob3V0IHRoZSByZWFkeSBtb2R1bGVcclxuXHRpc1JlYWR5OiB0cnVlLFxyXG5cclxuXHRlcnJvcjogZnVuY3Rpb24oIG1zZyApIHtcclxuXHRcdHRocm93IG5ldyBFcnJvciggbXNnICk7XHJcblx0fSxcclxuXHJcblx0bm9vcDogZnVuY3Rpb24oKSB7fSxcclxuXHJcblx0aXNGdW5jdGlvbjogZnVuY3Rpb24oIG9iaiApIHtcclxuXHRcdHJldHVybiBqUXVlcnkudHlwZShvYmopID09PSBcImZ1bmN0aW9uXCI7XHJcblx0fSxcclxuXHJcblx0aXNBcnJheTogQXJyYXkuaXNBcnJheSxcclxuXHJcblx0aXNXaW5kb3c6IGZ1bmN0aW9uKCBvYmogKSB7XHJcblx0XHRyZXR1cm4gb2JqICE9IG51bGwgJiYgb2JqID09PSBvYmoud2luZG93O1xyXG5cdH0sXHJcblxyXG5cdGlzTnVtZXJpYzogZnVuY3Rpb24oIG9iaiApIHtcclxuXHRcdC8vIHBhcnNlRmxvYXQgTmFOcyBudW1lcmljLWNhc3QgZmFsc2UgcG9zaXRpdmVzIChudWxsfHRydWV8ZmFsc2V8XCJcIilcclxuXHRcdC8vIC4uLmJ1dCBtaXNpbnRlcnByZXRzIGxlYWRpbmctbnVtYmVyIHN0cmluZ3MsIHBhcnRpY3VsYXJseSBoZXggbGl0ZXJhbHMgKFwiMHguLi5cIilcclxuXHRcdC8vIHN1YnRyYWN0aW9uIGZvcmNlcyBpbmZpbml0aWVzIHRvIE5hTlxyXG5cdFx0Ly8gYWRkaW5nIDEgY29ycmVjdHMgbG9zcyBvZiBwcmVjaXNpb24gZnJvbSBwYXJzZUZsb2F0ICgjMTUxMDApXHJcblx0XHRyZXR1cm4gIWpRdWVyeS5pc0FycmF5KCBvYmogKSAmJiAob2JqIC0gcGFyc2VGbG9hdCggb2JqICkgKyAxKSA+PSAwO1xyXG5cdH0sXHJcblxyXG5cdGlzUGxhaW5PYmplY3Q6IGZ1bmN0aW9uKCBvYmogKSB7XHJcblx0XHQvLyBOb3QgcGxhaW4gb2JqZWN0czpcclxuXHRcdC8vIC0gQW55IG9iamVjdCBvciB2YWx1ZSB3aG9zZSBpbnRlcm5hbCBbW0NsYXNzXV0gcHJvcGVydHkgaXMgbm90IFwiW29iamVjdCBPYmplY3RdXCJcclxuXHRcdC8vIC0gRE9NIG5vZGVzXHJcblx0XHQvLyAtIHdpbmRvd1xyXG5cdFx0aWYgKCBqUXVlcnkudHlwZSggb2JqICkgIT09IFwib2JqZWN0XCIgfHwgb2JqLm5vZGVUeXBlIHx8IGpRdWVyeS5pc1dpbmRvdyggb2JqICkgKSB7XHJcblx0XHRcdHJldHVybiBmYWxzZTtcclxuXHRcdH1cclxuXHJcblx0XHRpZiAoIG9iai5jb25zdHJ1Y3RvciAmJlxyXG5cdFx0XHRcdCFoYXNPd24uY2FsbCggb2JqLmNvbnN0cnVjdG9yLnByb3RvdHlwZSwgXCJpc1Byb3RvdHlwZU9mXCIgKSApIHtcclxuXHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8vIElmIHRoZSBmdW5jdGlvbiBoYXNuJ3QgcmV0dXJuZWQgYWxyZWFkeSwgd2UncmUgY29uZmlkZW50IHRoYXRcclxuXHRcdC8vIHxvYmp8IGlzIGEgcGxhaW4gb2JqZWN0LCBjcmVhdGVkIGJ5IHt9IG9yIGNvbnN0cnVjdGVkIHdpdGggbmV3IE9iamVjdFxyXG5cdFx0cmV0dXJuIHRydWU7XHJcblx0fSxcclxuXHJcblx0aXNFbXB0eU9iamVjdDogZnVuY3Rpb24oIG9iaiApIHtcclxuXHRcdHZhciBuYW1lO1xyXG5cdFx0Zm9yICggbmFtZSBpbiBvYmogKSB7XHJcblx0XHRcdHJldHVybiBmYWxzZTtcclxuXHRcdH1cclxuXHRcdHJldHVybiB0cnVlO1xyXG5cdH0sXHJcblxyXG5cdHR5cGU6IGZ1bmN0aW9uKCBvYmogKSB7XHJcblx0XHRpZiAoIG9iaiA9PSBudWxsICkge1xyXG5cdFx0XHRyZXR1cm4gb2JqICsgXCJcIjtcclxuXHRcdH1cclxuXHRcdC8vIFN1cHBvcnQ6IEFuZHJvaWQ8NC4wLCBpT1M8NiAoZnVuY3Rpb25pc2ggUmVnRXhwKVxyXG5cdFx0cmV0dXJuIHR5cGVvZiBvYmogPT09IFwib2JqZWN0XCIgfHwgdHlwZW9mIG9iaiA9PT0gXCJmdW5jdGlvblwiID9cclxuXHRcdFx0Y2xhc3MydHlwZVsgdG9TdHJpbmcuY2FsbChvYmopIF0gfHwgXCJvYmplY3RcIiA6XHJcblx0XHRcdHR5cGVvZiBvYmo7XHJcblx0fSxcclxuXHJcblx0Ly8gRXZhbHVhdGVzIGEgc2NyaXB0IGluIGEgZ2xvYmFsIGNvbnRleHRcclxuXHRnbG9iYWxFdmFsOiBmdW5jdGlvbiggY29kZSApIHtcclxuXHRcdHZhciBzY3JpcHQsXHJcblx0XHRcdGluZGlyZWN0ID0gZXZhbDtcclxuXHJcblx0XHRjb2RlID0galF1ZXJ5LnRyaW0oIGNvZGUgKTtcclxuXHJcblx0XHRpZiAoIGNvZGUgKSB7XHJcblx0XHRcdC8vIElmIHRoZSBjb2RlIGluY2x1ZGVzIGEgdmFsaWQsIHByb2xvZ3VlIHBvc2l0aW9uXHJcblx0XHRcdC8vIHN0cmljdCBtb2RlIHByYWdtYSwgZXhlY3V0ZSBjb2RlIGJ5IGluamVjdGluZyBhXHJcblx0XHRcdC8vIHNjcmlwdCB0YWcgaW50byB0aGUgZG9jdW1lbnQuXHJcblx0XHRcdGlmICggY29kZS5pbmRleE9mKFwidXNlIHN0cmljdFwiKSA9PT0gMSApIHtcclxuXHRcdFx0XHRzY3JpcHQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwic2NyaXB0XCIpO1xyXG5cdFx0XHRcdHNjcmlwdC50ZXh0ID0gY29kZTtcclxuXHRcdFx0XHRkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKCBzY3JpcHQgKS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKCBzY3JpcHQgKTtcclxuXHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0Ly8gT3RoZXJ3aXNlLCBhdm9pZCB0aGUgRE9NIG5vZGUgY3JlYXRpb24sIGluc2VydGlvblxyXG5cdFx0XHQvLyBhbmQgcmVtb3ZhbCBieSB1c2luZyBhbiBpbmRpcmVjdCBnbG9iYWwgZXZhbFxyXG5cdFx0XHRcdGluZGlyZWN0KCBjb2RlICk7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHR9LFxyXG5cclxuXHQvLyBDb252ZXJ0IGRhc2hlZCB0byBjYW1lbENhc2U7IHVzZWQgYnkgdGhlIGNzcyBhbmQgZGF0YSBtb2R1bGVzXHJcblx0Ly8gU3VwcG9ydDogSUU5LTExK1xyXG5cdC8vIE1pY3Jvc29mdCBmb3Jnb3QgdG8gaHVtcCB0aGVpciB2ZW5kb3IgcHJlZml4ICgjOTU3MilcclxuXHRjYW1lbENhc2U6IGZ1bmN0aW9uKCBzdHJpbmcgKSB7XHJcblx0XHRyZXR1cm4gc3RyaW5nLnJlcGxhY2UoIHJtc1ByZWZpeCwgXCJtcy1cIiApLnJlcGxhY2UoIHJkYXNoQWxwaGEsIGZjYW1lbENhc2UgKTtcclxuXHR9LFxyXG5cclxuXHRub2RlTmFtZTogZnVuY3Rpb24oIGVsZW0sIG5hbWUgKSB7XHJcblx0XHRyZXR1cm4gZWxlbS5ub2RlTmFtZSAmJiBlbGVtLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgPT09IG5hbWUudG9Mb3dlckNhc2UoKTtcclxuXHR9LFxyXG5cclxuXHQvLyBhcmdzIGlzIGZvciBpbnRlcm5hbCB1c2FnZSBvbmx5XHJcblx0ZWFjaDogZnVuY3Rpb24oIG9iaiwgY2FsbGJhY2ssIGFyZ3MgKSB7XHJcblx0XHR2YXIgdmFsdWUsXHJcblx0XHRcdGkgPSAwLFxyXG5cdFx0XHRsZW5ndGggPSBvYmoubGVuZ3RoLFxyXG5cdFx0XHRpc0FycmF5ID0gaXNBcnJheWxpa2UoIG9iaiApO1xyXG5cclxuXHRcdGlmICggYXJncyApIHtcclxuXHRcdFx0aWYgKCBpc0FycmF5ICkge1xyXG5cdFx0XHRcdGZvciAoIDsgaSA8IGxlbmd0aDsgaSsrICkge1xyXG5cdFx0XHRcdFx0dmFsdWUgPSBjYWxsYmFjay5hcHBseSggb2JqWyBpIF0sIGFyZ3MgKTtcclxuXHJcblx0XHRcdFx0XHRpZiAoIHZhbHVlID09PSBmYWxzZSApIHtcclxuXHRcdFx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdGZvciAoIGkgaW4gb2JqICkge1xyXG5cdFx0XHRcdFx0dmFsdWUgPSBjYWxsYmFjay5hcHBseSggb2JqWyBpIF0sIGFyZ3MgKTtcclxuXHJcblx0XHRcdFx0XHRpZiAoIHZhbHVlID09PSBmYWxzZSApIHtcclxuXHRcdFx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblxyXG5cdFx0Ly8gQSBzcGVjaWFsLCBmYXN0LCBjYXNlIGZvciB0aGUgbW9zdCBjb21tb24gdXNlIG9mIGVhY2hcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdGlmICggaXNBcnJheSApIHtcclxuXHRcdFx0XHRmb3IgKCA7IGkgPCBsZW5ndGg7IGkrKyApIHtcclxuXHRcdFx0XHRcdHZhbHVlID0gY2FsbGJhY2suY2FsbCggb2JqWyBpIF0sIGksIG9ialsgaSBdICk7XHJcblxyXG5cdFx0XHRcdFx0aWYgKCB2YWx1ZSA9PT0gZmFsc2UgKSB7XHJcblx0XHRcdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRmb3IgKCBpIGluIG9iaiApIHtcclxuXHRcdFx0XHRcdHZhbHVlID0gY2FsbGJhY2suY2FsbCggb2JqWyBpIF0sIGksIG9ialsgaSBdICk7XHJcblxyXG5cdFx0XHRcdFx0aWYgKCB2YWx1ZSA9PT0gZmFsc2UgKSB7XHJcblx0XHRcdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiBvYmo7XHJcblx0fSxcclxuXHJcblx0Ly8gU3VwcG9ydDogQW5kcm9pZDw0LjFcclxuXHR0cmltOiBmdW5jdGlvbiggdGV4dCApIHtcclxuXHRcdHJldHVybiB0ZXh0ID09IG51bGwgP1xyXG5cdFx0XHRcIlwiIDpcclxuXHRcdFx0KCB0ZXh0ICsgXCJcIiApLnJlcGxhY2UoIHJ0cmltLCBcIlwiICk7XHJcblx0fSxcclxuXHJcblx0Ly8gcmVzdWx0cyBpcyBmb3IgaW50ZXJuYWwgdXNhZ2Ugb25seVxyXG5cdG1ha2VBcnJheTogZnVuY3Rpb24oIGFyciwgcmVzdWx0cyApIHtcclxuXHRcdHZhciByZXQgPSByZXN1bHRzIHx8IFtdO1xyXG5cclxuXHRcdGlmICggYXJyICE9IG51bGwgKSB7XHJcblx0XHRcdGlmICggaXNBcnJheWxpa2UoIE9iamVjdChhcnIpICkgKSB7XHJcblx0XHRcdFx0alF1ZXJ5Lm1lcmdlKCByZXQsXHJcblx0XHRcdFx0XHR0eXBlb2YgYXJyID09PSBcInN0cmluZ1wiID9cclxuXHRcdFx0XHRcdFsgYXJyIF0gOiBhcnJcclxuXHRcdFx0XHQpO1xyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdHB1c2guY2FsbCggcmV0LCBhcnIgKTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiByZXQ7XHJcblx0fSxcclxuXHJcblx0aW5BcnJheTogZnVuY3Rpb24oIGVsZW0sIGFyciwgaSApIHtcclxuXHRcdHJldHVybiBhcnIgPT0gbnVsbCA/IC0xIDogaW5kZXhPZi5jYWxsKCBhcnIsIGVsZW0sIGkgKTtcclxuXHR9LFxyXG5cclxuXHRtZXJnZTogZnVuY3Rpb24oIGZpcnN0LCBzZWNvbmQgKSB7XHJcblx0XHR2YXIgbGVuID0gK3NlY29uZC5sZW5ndGgsXHJcblx0XHRcdGogPSAwLFxyXG5cdFx0XHRpID0gZmlyc3QubGVuZ3RoO1xyXG5cclxuXHRcdGZvciAoIDsgaiA8IGxlbjsgaisrICkge1xyXG5cdFx0XHRmaXJzdFsgaSsrIF0gPSBzZWNvbmRbIGogXTtcclxuXHRcdH1cclxuXHJcblx0XHRmaXJzdC5sZW5ndGggPSBpO1xyXG5cclxuXHRcdHJldHVybiBmaXJzdDtcclxuXHR9LFxyXG5cclxuXHRncmVwOiBmdW5jdGlvbiggZWxlbXMsIGNhbGxiYWNrLCBpbnZlcnQgKSB7XHJcblx0XHR2YXIgY2FsbGJhY2tJbnZlcnNlLFxyXG5cdFx0XHRtYXRjaGVzID0gW10sXHJcblx0XHRcdGkgPSAwLFxyXG5cdFx0XHRsZW5ndGggPSBlbGVtcy5sZW5ndGgsXHJcblx0XHRcdGNhbGxiYWNrRXhwZWN0ID0gIWludmVydDtcclxuXHJcblx0XHQvLyBHbyB0aHJvdWdoIHRoZSBhcnJheSwgb25seSBzYXZpbmcgdGhlIGl0ZW1zXHJcblx0XHQvLyB0aGF0IHBhc3MgdGhlIHZhbGlkYXRvciBmdW5jdGlvblxyXG5cdFx0Zm9yICggOyBpIDwgbGVuZ3RoOyBpKysgKSB7XHJcblx0XHRcdGNhbGxiYWNrSW52ZXJzZSA9ICFjYWxsYmFjayggZWxlbXNbIGkgXSwgaSApO1xyXG5cdFx0XHRpZiAoIGNhbGxiYWNrSW52ZXJzZSAhPT0gY2FsbGJhY2tFeHBlY3QgKSB7XHJcblx0XHRcdFx0bWF0Y2hlcy5wdXNoKCBlbGVtc1sgaSBdICk7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gbWF0Y2hlcztcclxuXHR9LFxyXG5cclxuXHQvLyBhcmcgaXMgZm9yIGludGVybmFsIHVzYWdlIG9ubHlcclxuXHRtYXA6IGZ1bmN0aW9uKCBlbGVtcywgY2FsbGJhY2ssIGFyZyApIHtcclxuXHRcdHZhciB2YWx1ZSxcclxuXHRcdFx0aSA9IDAsXHJcblx0XHRcdGxlbmd0aCA9IGVsZW1zLmxlbmd0aCxcclxuXHRcdFx0aXNBcnJheSA9IGlzQXJyYXlsaWtlKCBlbGVtcyApLFxyXG5cdFx0XHRyZXQgPSBbXTtcclxuXHJcblx0XHQvLyBHbyB0aHJvdWdoIHRoZSBhcnJheSwgdHJhbnNsYXRpbmcgZWFjaCBvZiB0aGUgaXRlbXMgdG8gdGhlaXIgbmV3IHZhbHVlc1xyXG5cdFx0aWYgKCBpc0FycmF5ICkge1xyXG5cdFx0XHRmb3IgKCA7IGkgPCBsZW5ndGg7IGkrKyApIHtcclxuXHRcdFx0XHR2YWx1ZSA9IGNhbGxiYWNrKCBlbGVtc1sgaSBdLCBpLCBhcmcgKTtcclxuXHJcblx0XHRcdFx0aWYgKCB2YWx1ZSAhPSBudWxsICkge1xyXG5cdFx0XHRcdFx0cmV0LnB1c2goIHZhbHVlICk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblxyXG5cdFx0Ly8gR28gdGhyb3VnaCBldmVyeSBrZXkgb24gdGhlIG9iamVjdCxcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdGZvciAoIGkgaW4gZWxlbXMgKSB7XHJcblx0XHRcdFx0dmFsdWUgPSBjYWxsYmFjayggZWxlbXNbIGkgXSwgaSwgYXJnICk7XHJcblxyXG5cdFx0XHRcdGlmICggdmFsdWUgIT0gbnVsbCApIHtcclxuXHRcdFx0XHRcdHJldC5wdXNoKCB2YWx1ZSApO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdC8vIEZsYXR0ZW4gYW55IG5lc3RlZCBhcnJheXNcclxuXHRcdHJldHVybiBjb25jYXQuYXBwbHkoIFtdLCByZXQgKTtcclxuXHR9LFxyXG5cclxuXHQvLyBBIGdsb2JhbCBHVUlEIGNvdW50ZXIgZm9yIG9iamVjdHNcclxuXHRndWlkOiAxLFxyXG5cclxuXHQvLyBCaW5kIGEgZnVuY3Rpb24gdG8gYSBjb250ZXh0LCBvcHRpb25hbGx5IHBhcnRpYWxseSBhcHBseWluZyBhbnlcclxuXHQvLyBhcmd1bWVudHMuXHJcblx0cHJveHk6IGZ1bmN0aW9uKCBmbiwgY29udGV4dCApIHtcclxuXHRcdHZhciB0bXAsIGFyZ3MsIHByb3h5O1xyXG5cclxuXHRcdGlmICggdHlwZW9mIGNvbnRleHQgPT09IFwic3RyaW5nXCIgKSB7XHJcblx0XHRcdHRtcCA9IGZuWyBjb250ZXh0IF07XHJcblx0XHRcdGNvbnRleHQgPSBmbjtcclxuXHRcdFx0Zm4gPSB0bXA7XHJcblx0XHR9XHJcblxyXG5cdFx0Ly8gUXVpY2sgY2hlY2sgdG8gZGV0ZXJtaW5lIGlmIHRhcmdldCBpcyBjYWxsYWJsZSwgaW4gdGhlIHNwZWNcclxuXHRcdC8vIHRoaXMgdGhyb3dzIGEgVHlwZUVycm9yLCBidXQgd2Ugd2lsbCBqdXN0IHJldHVybiB1bmRlZmluZWQuXHJcblx0XHRpZiAoICFqUXVlcnkuaXNGdW5jdGlvbiggZm4gKSApIHtcclxuXHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcclxuXHRcdH1cclxuXHJcblx0XHQvLyBTaW11bGF0ZWQgYmluZFxyXG5cdFx0YXJncyA9IHNsaWNlLmNhbGwoIGFyZ3VtZW50cywgMiApO1xyXG5cdFx0cHJveHkgPSBmdW5jdGlvbigpIHtcclxuXHRcdFx0cmV0dXJuIGZuLmFwcGx5KCBjb250ZXh0IHx8IHRoaXMsIGFyZ3MuY29uY2F0KCBzbGljZS5jYWxsKCBhcmd1bWVudHMgKSApICk7XHJcblx0XHR9O1xyXG5cclxuXHRcdC8vIFNldCB0aGUgZ3VpZCBvZiB1bmlxdWUgaGFuZGxlciB0byB0aGUgc2FtZSBvZiBvcmlnaW5hbCBoYW5kbGVyLCBzbyBpdCBjYW4gYmUgcmVtb3ZlZFxyXG5cdFx0cHJveHkuZ3VpZCA9IGZuLmd1aWQgPSBmbi5ndWlkIHx8IGpRdWVyeS5ndWlkKys7XHJcblxyXG5cdFx0cmV0dXJuIHByb3h5O1xyXG5cdH0sXHJcblxyXG5cdG5vdzogRGF0ZS5ub3csXHJcblxyXG5cdC8vIGpRdWVyeS5zdXBwb3J0IGlzIG5vdCB1c2VkIGluIENvcmUgYnV0IG90aGVyIHByb2plY3RzIGF0dGFjaCB0aGVpclxyXG5cdC8vIHByb3BlcnRpZXMgdG8gaXQgc28gaXQgbmVlZHMgdG8gZXhpc3QuXHJcblx0c3VwcG9ydDogc3VwcG9ydFxyXG59KTtcclxuXHJcbi8vIFBvcHVsYXRlIHRoZSBjbGFzczJ0eXBlIG1hcFxyXG5qUXVlcnkuZWFjaChcIkJvb2xlYW4gTnVtYmVyIFN0cmluZyBGdW5jdGlvbiBBcnJheSBEYXRlIFJlZ0V4cCBPYmplY3QgRXJyb3JcIi5zcGxpdChcIiBcIiksIGZ1bmN0aW9uKGksIG5hbWUpIHtcclxuXHRjbGFzczJ0eXBlWyBcIltvYmplY3QgXCIgKyBuYW1lICsgXCJdXCIgXSA9IG5hbWUudG9Mb3dlckNhc2UoKTtcclxufSk7XHJcblxyXG5mdW5jdGlvbiBpc0FycmF5bGlrZSggb2JqICkge1xyXG5cclxuXHQvLyBTdXBwb3J0OiBpT1MgOC4yIChub3QgcmVwcm9kdWNpYmxlIGluIHNpbXVsYXRvcilcclxuXHQvLyBgaW5gIGNoZWNrIHVzZWQgdG8gcHJldmVudCBKSVQgZXJyb3IgKGdoLTIxNDUpXHJcblx0Ly8gaGFzT3duIGlzbid0IHVzZWQgaGVyZSBkdWUgdG8gZmFsc2UgbmVnYXRpdmVzXHJcblx0Ly8gcmVnYXJkaW5nIE5vZGVsaXN0IGxlbmd0aCBpbiBJRVxyXG5cdHZhciBsZW5ndGggPSBcImxlbmd0aFwiIGluIG9iaiAmJiBvYmoubGVuZ3RoLFxyXG5cdFx0dHlwZSA9IGpRdWVyeS50eXBlKCBvYmogKTtcclxuXHJcblx0aWYgKCB0eXBlID09PSBcImZ1bmN0aW9uXCIgfHwgalF1ZXJ5LmlzV2luZG93KCBvYmogKSApIHtcclxuXHRcdHJldHVybiBmYWxzZTtcclxuXHR9XHJcblxyXG5cdGlmICggb2JqLm5vZGVUeXBlID09PSAxICYmIGxlbmd0aCApIHtcclxuXHRcdHJldHVybiB0cnVlO1xyXG5cdH1cclxuXHJcblx0cmV0dXJuIHR5cGUgPT09IFwiYXJyYXlcIiB8fCBsZW5ndGggPT09IDAgfHxcclxuXHRcdHR5cGVvZiBsZW5ndGggPT09IFwibnVtYmVyXCIgJiYgbGVuZ3RoID4gMCAmJiAoIGxlbmd0aCAtIDEgKSBpbiBvYmo7XHJcbn1cclxudmFyIFNpenpsZSA9XHJcbi8qIVxyXG4gKiBTaXp6bGUgQ1NTIFNlbGVjdG9yIEVuZ2luZSB2Mi4yLjAtcHJlXHJcbiAqIGh0dHA6Ly9zaXp6bGVqcy5jb20vXHJcbiAqXHJcbiAqIENvcHlyaWdodCAyMDA4LCAyMDE0IGpRdWVyeSBGb3VuZGF0aW9uLCBJbmMuIGFuZCBvdGhlciBjb250cmlidXRvcnNcclxuICogUmVsZWFzZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlXHJcbiAqIGh0dHA6Ly9qcXVlcnkub3JnL2xpY2Vuc2VcclxuICpcclxuICogRGF0ZTogMjAxNC0xMi0xNlxyXG4gKi9cclxuKGZ1bmN0aW9uKCB3aW5kb3cgKSB7XHJcblxyXG52YXIgaSxcclxuXHRzdXBwb3J0LFxyXG5cdEV4cHIsXHJcblx0Z2V0VGV4dCxcclxuXHRpc1hNTCxcclxuXHR0b2tlbml6ZSxcclxuXHRjb21waWxlLFxyXG5cdHNlbGVjdCxcclxuXHRvdXRlcm1vc3RDb250ZXh0LFxyXG5cdHNvcnRJbnB1dCxcclxuXHRoYXNEdXBsaWNhdGUsXHJcblxyXG5cdC8vIExvY2FsIGRvY3VtZW50IHZhcnNcclxuXHRzZXREb2N1bWVudCxcclxuXHRkb2N1bWVudCxcclxuXHRkb2NFbGVtLFxyXG5cdGRvY3VtZW50SXNIVE1MLFxyXG5cdHJidWdneVFTQSxcclxuXHRyYnVnZ3lNYXRjaGVzLFxyXG5cdG1hdGNoZXMsXHJcblx0Y29udGFpbnMsXHJcblxyXG5cdC8vIEluc3RhbmNlLXNwZWNpZmljIGRhdGFcclxuXHRleHBhbmRvID0gXCJzaXp6bGVcIiArIDEgKiBuZXcgRGF0ZSgpLFxyXG5cdHByZWZlcnJlZERvYyA9IHdpbmRvdy5kb2N1bWVudCxcclxuXHRkaXJydW5zID0gMCxcclxuXHRkb25lID0gMCxcclxuXHRjbGFzc0NhY2hlID0gY3JlYXRlQ2FjaGUoKSxcclxuXHR0b2tlbkNhY2hlID0gY3JlYXRlQ2FjaGUoKSxcclxuXHRjb21waWxlckNhY2hlID0gY3JlYXRlQ2FjaGUoKSxcclxuXHRzb3J0T3JkZXIgPSBmdW5jdGlvbiggYSwgYiApIHtcclxuXHRcdGlmICggYSA9PT0gYiApIHtcclxuXHRcdFx0aGFzRHVwbGljYXRlID0gdHJ1ZTtcclxuXHRcdH1cclxuXHRcdHJldHVybiAwO1xyXG5cdH0sXHJcblxyXG5cdC8vIEdlbmVyYWwtcHVycG9zZSBjb25zdGFudHNcclxuXHRNQVhfTkVHQVRJVkUgPSAxIDw8IDMxLFxyXG5cclxuXHQvLyBJbnN0YW5jZSBtZXRob2RzXHJcblx0aGFzT3duID0gKHt9KS5oYXNPd25Qcm9wZXJ0eSxcclxuXHRhcnIgPSBbXSxcclxuXHRwb3AgPSBhcnIucG9wLFxyXG5cdHB1c2hfbmF0aXZlID0gYXJyLnB1c2gsXHJcblx0cHVzaCA9IGFyci5wdXNoLFxyXG5cdHNsaWNlID0gYXJyLnNsaWNlLFxyXG5cdC8vIFVzZSBhIHN0cmlwcGVkLWRvd24gaW5kZXhPZiBhcyBpdCdzIGZhc3RlciB0aGFuIG5hdGl2ZVxyXG5cdC8vIGh0dHA6Ly9qc3BlcmYuY29tL3Rob3ItaW5kZXhvZi12cy1mb3IvNVxyXG5cdGluZGV4T2YgPSBmdW5jdGlvbiggbGlzdCwgZWxlbSApIHtcclxuXHRcdHZhciBpID0gMCxcclxuXHRcdFx0bGVuID0gbGlzdC5sZW5ndGg7XHJcblx0XHRmb3IgKCA7IGkgPCBsZW47IGkrKyApIHtcclxuXHRcdFx0aWYgKCBsaXN0W2ldID09PSBlbGVtICkge1xyXG5cdFx0XHRcdHJldHVybiBpO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0XHRyZXR1cm4gLTE7XHJcblx0fSxcclxuXHJcblx0Ym9vbGVhbnMgPSBcImNoZWNrZWR8c2VsZWN0ZWR8YXN5bmN8YXV0b2ZvY3VzfGF1dG9wbGF5fGNvbnRyb2xzfGRlZmVyfGRpc2FibGVkfGhpZGRlbnxpc21hcHxsb29wfG11bHRpcGxlfG9wZW58cmVhZG9ubHl8cmVxdWlyZWR8c2NvcGVkXCIsXHJcblxyXG5cdC8vIFJlZ3VsYXIgZXhwcmVzc2lvbnNcclxuXHJcblx0Ly8gV2hpdGVzcGFjZSBjaGFyYWN0ZXJzIGh0dHA6Ly93d3cudzMub3JnL1RSL2NzczMtc2VsZWN0b3JzLyN3aGl0ZXNwYWNlXHJcblx0d2hpdGVzcGFjZSA9IFwiW1xcXFx4MjBcXFxcdFxcXFxyXFxcXG5cXFxcZl1cIixcclxuXHQvLyBodHRwOi8vd3d3LnczLm9yZy9UUi9jc3MzLXN5bnRheC8jY2hhcmFjdGVyc1xyXG5cdGNoYXJhY3RlckVuY29kaW5nID0gXCIoPzpcXFxcXFxcXC58W1xcXFx3LV18W15cXFxceDAwLVxcXFx4YTBdKStcIixcclxuXHJcblx0Ly8gTG9vc2VseSBtb2RlbGVkIG9uIENTUyBpZGVudGlmaWVyIGNoYXJhY3RlcnNcclxuXHQvLyBBbiB1bnF1b3RlZCB2YWx1ZSBzaG91bGQgYmUgYSBDU1MgaWRlbnRpZmllciBodHRwOi8vd3d3LnczLm9yZy9UUi9jc3MzLXNlbGVjdG9ycy8jYXR0cmlidXRlLXNlbGVjdG9yc1xyXG5cdC8vIFByb3BlciBzeW50YXg6IGh0dHA6Ly93d3cudzMub3JnL1RSL0NTUzIxL3N5bmRhdGEuaHRtbCN2YWx1ZS1kZWYtaWRlbnRpZmllclxyXG5cdGlkZW50aWZpZXIgPSBjaGFyYWN0ZXJFbmNvZGluZy5yZXBsYWNlKCBcIndcIiwgXCJ3I1wiICksXHJcblxyXG5cdC8vIEF0dHJpYnV0ZSBzZWxlY3RvcnM6IGh0dHA6Ly93d3cudzMub3JnL1RSL3NlbGVjdG9ycy8jYXR0cmlidXRlLXNlbGVjdG9yc1xyXG5cdGF0dHJpYnV0ZXMgPSBcIlxcXFxbXCIgKyB3aGl0ZXNwYWNlICsgXCIqKFwiICsgY2hhcmFjdGVyRW5jb2RpbmcgKyBcIikoPzpcIiArIHdoaXRlc3BhY2UgK1xyXG5cdFx0Ly8gT3BlcmF0b3IgKGNhcHR1cmUgMilcclxuXHRcdFwiKihbKl4kfCF+XT89KVwiICsgd2hpdGVzcGFjZSArXHJcblx0XHQvLyBcIkF0dHJpYnV0ZSB2YWx1ZXMgbXVzdCBiZSBDU1MgaWRlbnRpZmllcnMgW2NhcHR1cmUgNV0gb3Igc3RyaW5ncyBbY2FwdHVyZSAzIG9yIGNhcHR1cmUgNF1cIlxyXG5cdFx0XCIqKD86JygoPzpcXFxcXFxcXC58W15cXFxcXFxcXCddKSopJ3xcXFwiKCg/OlxcXFxcXFxcLnxbXlxcXFxcXFxcXFxcIl0pKilcXFwifChcIiArIGlkZW50aWZpZXIgKyBcIikpfClcIiArIHdoaXRlc3BhY2UgK1xyXG5cdFx0XCIqXFxcXF1cIixcclxuXHJcblx0cHNldWRvcyA9IFwiOihcIiArIGNoYXJhY3RlckVuY29kaW5nICsgXCIpKD86XFxcXCgoXCIgK1xyXG5cdFx0Ly8gVG8gcmVkdWNlIHRoZSBudW1iZXIgb2Ygc2VsZWN0b3JzIG5lZWRpbmcgdG9rZW5pemUgaW4gdGhlIHByZUZpbHRlciwgcHJlZmVyIGFyZ3VtZW50czpcclxuXHRcdC8vIDEuIHF1b3RlZCAoY2FwdHVyZSAzOyBjYXB0dXJlIDQgb3IgY2FwdHVyZSA1KVxyXG5cdFx0XCIoJygoPzpcXFxcXFxcXC58W15cXFxcXFxcXCddKSopJ3xcXFwiKCg/OlxcXFxcXFxcLnxbXlxcXFxcXFxcXFxcIl0pKilcXFwiKXxcIiArXHJcblx0XHQvLyAyLiBzaW1wbGUgKGNhcHR1cmUgNilcclxuXHRcdFwiKCg/OlxcXFxcXFxcLnxbXlxcXFxcXFxcKClbXFxcXF1dfFwiICsgYXR0cmlidXRlcyArIFwiKSopfFwiICtcclxuXHRcdC8vIDMuIGFueXRoaW5nIGVsc2UgKGNhcHR1cmUgMilcclxuXHRcdFwiLipcIiArXHJcblx0XHRcIilcXFxcKXwpXCIsXHJcblxyXG5cdC8vIExlYWRpbmcgYW5kIG5vbi1lc2NhcGVkIHRyYWlsaW5nIHdoaXRlc3BhY2UsIGNhcHR1cmluZyBzb21lIG5vbi13aGl0ZXNwYWNlIGNoYXJhY3RlcnMgcHJlY2VkaW5nIHRoZSBsYXR0ZXJcclxuXHRyd2hpdGVzcGFjZSA9IG5ldyBSZWdFeHAoIHdoaXRlc3BhY2UgKyBcIitcIiwgXCJnXCIgKSxcclxuXHRydHJpbSA9IG5ldyBSZWdFeHAoIFwiXlwiICsgd2hpdGVzcGFjZSArIFwiK3woKD86XnxbXlxcXFxcXFxcXSkoPzpcXFxcXFxcXC4pKilcIiArIHdoaXRlc3BhY2UgKyBcIiskXCIsIFwiZ1wiICksXHJcblxyXG5cdHJjb21tYSA9IG5ldyBSZWdFeHAoIFwiXlwiICsgd2hpdGVzcGFjZSArIFwiKixcIiArIHdoaXRlc3BhY2UgKyBcIipcIiApLFxyXG5cdHJjb21iaW5hdG9ycyA9IG5ldyBSZWdFeHAoIFwiXlwiICsgd2hpdGVzcGFjZSArIFwiKihbPit+XXxcIiArIHdoaXRlc3BhY2UgKyBcIilcIiArIHdoaXRlc3BhY2UgKyBcIipcIiApLFxyXG5cclxuXHRyYXR0cmlidXRlUXVvdGVzID0gbmV3IFJlZ0V4cCggXCI9XCIgKyB3aGl0ZXNwYWNlICsgXCIqKFteXFxcXF0nXFxcIl0qPylcIiArIHdoaXRlc3BhY2UgKyBcIipcXFxcXVwiLCBcImdcIiApLFxyXG5cclxuXHRycHNldWRvID0gbmV3IFJlZ0V4cCggcHNldWRvcyApLFxyXG5cdHJpZGVudGlmaWVyID0gbmV3IFJlZ0V4cCggXCJeXCIgKyBpZGVudGlmaWVyICsgXCIkXCIgKSxcclxuXHJcblx0bWF0Y2hFeHByID0ge1xyXG5cdFx0XCJJRFwiOiBuZXcgUmVnRXhwKCBcIl4jKFwiICsgY2hhcmFjdGVyRW5jb2RpbmcgKyBcIilcIiApLFxyXG5cdFx0XCJDTEFTU1wiOiBuZXcgUmVnRXhwKCBcIl5cXFxcLihcIiArIGNoYXJhY3RlckVuY29kaW5nICsgXCIpXCIgKSxcclxuXHRcdFwiVEFHXCI6IG5ldyBSZWdFeHAoIFwiXihcIiArIGNoYXJhY3RlckVuY29kaW5nLnJlcGxhY2UoIFwid1wiLCBcIncqXCIgKSArIFwiKVwiICksXHJcblx0XHRcIkFUVFJcIjogbmV3IFJlZ0V4cCggXCJeXCIgKyBhdHRyaWJ1dGVzICksXHJcblx0XHRcIlBTRVVET1wiOiBuZXcgUmVnRXhwKCBcIl5cIiArIHBzZXVkb3MgKSxcclxuXHRcdFwiQ0hJTERcIjogbmV3IFJlZ0V4cCggXCJeOihvbmx5fGZpcnN0fGxhc3R8bnRofG50aC1sYXN0KS0oY2hpbGR8b2YtdHlwZSkoPzpcXFxcKFwiICsgd2hpdGVzcGFjZSArXHJcblx0XHRcdFwiKihldmVufG9kZHwoKFsrLV18KShcXFxcZCopbnwpXCIgKyB3aGl0ZXNwYWNlICsgXCIqKD86KFsrLV18KVwiICsgd2hpdGVzcGFjZSArXHJcblx0XHRcdFwiKihcXFxcZCspfCkpXCIgKyB3aGl0ZXNwYWNlICsgXCIqXFxcXCl8KVwiLCBcImlcIiApLFxyXG5cdFx0XCJib29sXCI6IG5ldyBSZWdFeHAoIFwiXig/OlwiICsgYm9vbGVhbnMgKyBcIikkXCIsIFwiaVwiICksXHJcblx0XHQvLyBGb3IgdXNlIGluIGxpYnJhcmllcyBpbXBsZW1lbnRpbmcgLmlzKClcclxuXHRcdC8vIFdlIHVzZSB0aGlzIGZvciBQT1MgbWF0Y2hpbmcgaW4gYHNlbGVjdGBcclxuXHRcdFwibmVlZHNDb250ZXh0XCI6IG5ldyBSZWdFeHAoIFwiXlwiICsgd2hpdGVzcGFjZSArIFwiKls+K35dfDooZXZlbnxvZGR8ZXF8Z3R8bHR8bnRofGZpcnN0fGxhc3QpKD86XFxcXChcIiArXHJcblx0XHRcdHdoaXRlc3BhY2UgKyBcIiooKD86LVxcXFxkKT9cXFxcZCopXCIgKyB3aGl0ZXNwYWNlICsgXCIqXFxcXCl8KSg/PVteLV18JClcIiwgXCJpXCIgKVxyXG5cdH0sXHJcblxyXG5cdHJpbnB1dHMgPSAvXig/OmlucHV0fHNlbGVjdHx0ZXh0YXJlYXxidXR0b24pJC9pLFxyXG5cdHJoZWFkZXIgPSAvXmhcXGQkL2ksXHJcblxyXG5cdHJuYXRpdmUgPSAvXltee10rXFx7XFxzKlxcW25hdGl2ZSBcXHcvLFxyXG5cclxuXHQvLyBFYXNpbHktcGFyc2VhYmxlL3JldHJpZXZhYmxlIElEIG9yIFRBRyBvciBDTEFTUyBzZWxlY3RvcnNcclxuXHRycXVpY2tFeHByID0gL14oPzojKFtcXHctXSspfChcXHcrKXxcXC4oW1xcdy1dKykpJC8sXHJcblxyXG5cdHJzaWJsaW5nID0gL1srfl0vLFxyXG5cdHJlc2NhcGUgPSAvJ3xcXFxcL2csXHJcblxyXG5cdC8vIENTUyBlc2NhcGVzIGh0dHA6Ly93d3cudzMub3JnL1RSL0NTUzIxL3N5bmRhdGEuaHRtbCNlc2NhcGVkLWNoYXJhY3RlcnNcclxuXHRydW5lc2NhcGUgPSBuZXcgUmVnRXhwKCBcIlxcXFxcXFxcKFtcXFxcZGEtZl17MSw2fVwiICsgd2hpdGVzcGFjZSArIFwiP3woXCIgKyB3aGl0ZXNwYWNlICsgXCIpfC4pXCIsIFwiaWdcIiApLFxyXG5cdGZ1bmVzY2FwZSA9IGZ1bmN0aW9uKCBfLCBlc2NhcGVkLCBlc2NhcGVkV2hpdGVzcGFjZSApIHtcclxuXHRcdHZhciBoaWdoID0gXCIweFwiICsgZXNjYXBlZCAtIDB4MTAwMDA7XHJcblx0XHQvLyBOYU4gbWVhbnMgbm9uLWNvZGVwb2ludFxyXG5cdFx0Ly8gU3VwcG9ydDogRmlyZWZveDwyNFxyXG5cdFx0Ly8gV29ya2Fyb3VuZCBlcnJvbmVvdXMgbnVtZXJpYyBpbnRlcnByZXRhdGlvbiBvZiArXCIweFwiXHJcblx0XHRyZXR1cm4gaGlnaCAhPT0gaGlnaCB8fCBlc2NhcGVkV2hpdGVzcGFjZSA/XHJcblx0XHRcdGVzY2FwZWQgOlxyXG5cdFx0XHRoaWdoIDwgMCA/XHJcblx0XHRcdFx0Ly8gQk1QIGNvZGVwb2ludFxyXG5cdFx0XHRcdFN0cmluZy5mcm9tQ2hhckNvZGUoIGhpZ2ggKyAweDEwMDAwICkgOlxyXG5cdFx0XHRcdC8vIFN1cHBsZW1lbnRhbCBQbGFuZSBjb2RlcG9pbnQgKHN1cnJvZ2F0ZSBwYWlyKVxyXG5cdFx0XHRcdFN0cmluZy5mcm9tQ2hhckNvZGUoIGhpZ2ggPj4gMTAgfCAweEQ4MDAsIGhpZ2ggJiAweDNGRiB8IDB4REMwMCApO1xyXG5cdH0sXHJcblxyXG5cdC8vIFVzZWQgZm9yIGlmcmFtZXNcclxuXHQvLyBTZWUgc2V0RG9jdW1lbnQoKVxyXG5cdC8vIFJlbW92aW5nIHRoZSBmdW5jdGlvbiB3cmFwcGVyIGNhdXNlcyBhIFwiUGVybWlzc2lvbiBEZW5pZWRcIlxyXG5cdC8vIGVycm9yIGluIElFXHJcblx0dW5sb2FkSGFuZGxlciA9IGZ1bmN0aW9uKCkge1xyXG5cdFx0c2V0RG9jdW1lbnQoKTtcclxuXHR9O1xyXG5cclxuLy8gT3B0aW1pemUgZm9yIHB1c2guYXBwbHkoIF8sIE5vZGVMaXN0IClcclxudHJ5IHtcclxuXHRwdXNoLmFwcGx5KFxyXG5cdFx0KGFyciA9IHNsaWNlLmNhbGwoIHByZWZlcnJlZERvYy5jaGlsZE5vZGVzICkpLFxyXG5cdFx0cHJlZmVycmVkRG9jLmNoaWxkTm9kZXNcclxuXHQpO1xyXG5cdC8vIFN1cHBvcnQ6IEFuZHJvaWQ8NC4wXHJcblx0Ly8gRGV0ZWN0IHNpbGVudGx5IGZhaWxpbmcgcHVzaC5hcHBseVxyXG5cdGFyclsgcHJlZmVycmVkRG9jLmNoaWxkTm9kZXMubGVuZ3RoIF0ubm9kZVR5cGU7XHJcbn0gY2F0Y2ggKCBlICkge1xyXG5cdHB1c2ggPSB7IGFwcGx5OiBhcnIubGVuZ3RoID9cclxuXHJcblx0XHQvLyBMZXZlcmFnZSBzbGljZSBpZiBwb3NzaWJsZVxyXG5cdFx0ZnVuY3Rpb24oIHRhcmdldCwgZWxzICkge1xyXG5cdFx0XHRwdXNoX25hdGl2ZS5hcHBseSggdGFyZ2V0LCBzbGljZS5jYWxsKGVscykgKTtcclxuXHRcdH0gOlxyXG5cclxuXHRcdC8vIFN1cHBvcnQ6IElFPDlcclxuXHRcdC8vIE90aGVyd2lzZSBhcHBlbmQgZGlyZWN0bHlcclxuXHRcdGZ1bmN0aW9uKCB0YXJnZXQsIGVscyApIHtcclxuXHRcdFx0dmFyIGogPSB0YXJnZXQubGVuZ3RoLFxyXG5cdFx0XHRcdGkgPSAwO1xyXG5cdFx0XHQvLyBDYW4ndCB0cnVzdCBOb2RlTGlzdC5sZW5ndGhcclxuXHRcdFx0d2hpbGUgKCAodGFyZ2V0W2orK10gPSBlbHNbaSsrXSkgKSB7fVxyXG5cdFx0XHR0YXJnZXQubGVuZ3RoID0gaiAtIDE7XHJcblx0XHR9XHJcblx0fTtcclxufVxyXG5cclxuZnVuY3Rpb24gU2l6emxlKCBzZWxlY3RvciwgY29udGV4dCwgcmVzdWx0cywgc2VlZCApIHtcclxuXHR2YXIgbWF0Y2gsIGVsZW0sIG0sIG5vZGVUeXBlLFxyXG5cdFx0Ly8gUVNBIHZhcnNcclxuXHRcdGksIGdyb3Vwcywgb2xkLCBuaWQsIG5ld0NvbnRleHQsIG5ld1NlbGVjdG9yO1xyXG5cclxuXHRpZiAoICggY29udGV4dCA/IGNvbnRleHQub3duZXJEb2N1bWVudCB8fCBjb250ZXh0IDogcHJlZmVycmVkRG9jICkgIT09IGRvY3VtZW50ICkge1xyXG5cdFx0c2V0RG9jdW1lbnQoIGNvbnRleHQgKTtcclxuXHR9XHJcblxyXG5cdGNvbnRleHQgPSBjb250ZXh0IHx8IGRvY3VtZW50O1xyXG5cdHJlc3VsdHMgPSByZXN1bHRzIHx8IFtdO1xyXG5cdG5vZGVUeXBlID0gY29udGV4dC5ub2RlVHlwZTtcclxuXHJcblx0aWYgKCB0eXBlb2Ygc2VsZWN0b3IgIT09IFwic3RyaW5nXCIgfHwgIXNlbGVjdG9yIHx8XHJcblx0XHRub2RlVHlwZSAhPT0gMSAmJiBub2RlVHlwZSAhPT0gOSAmJiBub2RlVHlwZSAhPT0gMTEgKSB7XHJcblxyXG5cdFx0cmV0dXJuIHJlc3VsdHM7XHJcblx0fVxyXG5cclxuXHRpZiAoICFzZWVkICYmIGRvY3VtZW50SXNIVE1MICkge1xyXG5cclxuXHRcdC8vIFRyeSB0byBzaG9ydGN1dCBmaW5kIG9wZXJhdGlvbnMgd2hlbiBwb3NzaWJsZSAoZS5nLiwgbm90IHVuZGVyIERvY3VtZW50RnJhZ21lbnQpXHJcblx0XHRpZiAoIG5vZGVUeXBlICE9PSAxMSAmJiAobWF0Y2ggPSBycXVpY2tFeHByLmV4ZWMoIHNlbGVjdG9yICkpICkge1xyXG5cdFx0XHQvLyBTcGVlZC11cDogU2l6emxlKFwiI0lEXCIpXHJcblx0XHRcdGlmICggKG0gPSBtYXRjaFsxXSkgKSB7XHJcblx0XHRcdFx0aWYgKCBub2RlVHlwZSA9PT0gOSApIHtcclxuXHRcdFx0XHRcdGVsZW0gPSBjb250ZXh0LmdldEVsZW1lbnRCeUlkKCBtICk7XHJcblx0XHRcdFx0XHQvLyBDaGVjayBwYXJlbnROb2RlIHRvIGNhdGNoIHdoZW4gQmxhY2tiZXJyeSA0LjYgcmV0dXJuc1xyXG5cdFx0XHRcdFx0Ly8gbm9kZXMgdGhhdCBhcmUgbm8gbG9uZ2VyIGluIHRoZSBkb2N1bWVudCAoalF1ZXJ5ICM2OTYzKVxyXG5cdFx0XHRcdFx0aWYgKCBlbGVtICYmIGVsZW0ucGFyZW50Tm9kZSApIHtcclxuXHRcdFx0XHRcdFx0Ly8gSGFuZGxlIHRoZSBjYXNlIHdoZXJlIElFLCBPcGVyYSwgYW5kIFdlYmtpdCByZXR1cm4gaXRlbXNcclxuXHRcdFx0XHRcdFx0Ly8gYnkgbmFtZSBpbnN0ZWFkIG9mIElEXHJcblx0XHRcdFx0XHRcdGlmICggZWxlbS5pZCA9PT0gbSApIHtcclxuXHRcdFx0XHRcdFx0XHRyZXN1bHRzLnB1c2goIGVsZW0gKTtcclxuXHRcdFx0XHRcdFx0XHRyZXR1cm4gcmVzdWx0cztcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdFx0cmV0dXJuIHJlc3VsdHM7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdC8vIENvbnRleHQgaXMgbm90IGEgZG9jdW1lbnRcclxuXHRcdFx0XHRcdGlmICggY29udGV4dC5vd25lckRvY3VtZW50ICYmIChlbGVtID0gY29udGV4dC5vd25lckRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCBtICkpICYmXHJcblx0XHRcdFx0XHRcdGNvbnRhaW5zKCBjb250ZXh0LCBlbGVtICkgJiYgZWxlbS5pZCA9PT0gbSApIHtcclxuXHRcdFx0XHRcdFx0cmVzdWx0cy5wdXNoKCBlbGVtICk7XHJcblx0XHRcdFx0XHRcdHJldHVybiByZXN1bHRzO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdC8vIFNwZWVkLXVwOiBTaXp6bGUoXCJUQUdcIilcclxuXHRcdFx0fSBlbHNlIGlmICggbWF0Y2hbMl0gKSB7XHJcblx0XHRcdFx0cHVzaC5hcHBseSggcmVzdWx0cywgY29udGV4dC5nZXRFbGVtZW50c0J5VGFnTmFtZSggc2VsZWN0b3IgKSApO1xyXG5cdFx0XHRcdHJldHVybiByZXN1bHRzO1xyXG5cclxuXHRcdFx0Ly8gU3BlZWQtdXA6IFNpenpsZShcIi5DTEFTU1wiKVxyXG5cdFx0XHR9IGVsc2UgaWYgKCAobSA9IG1hdGNoWzNdKSAmJiBzdXBwb3J0LmdldEVsZW1lbnRzQnlDbGFzc05hbWUgKSB7XHJcblx0XHRcdFx0cHVzaC5hcHBseSggcmVzdWx0cywgY29udGV4dC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCBtICkgKTtcclxuXHRcdFx0XHRyZXR1cm4gcmVzdWx0cztcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdC8vIFFTQSBwYXRoXHJcblx0XHRpZiAoIHN1cHBvcnQucXNhICYmICghcmJ1Z2d5UVNBIHx8ICFyYnVnZ3lRU0EudGVzdCggc2VsZWN0b3IgKSkgKSB7XHJcblx0XHRcdG5pZCA9IG9sZCA9IGV4cGFuZG87XHJcblx0XHRcdG5ld0NvbnRleHQgPSBjb250ZXh0O1xyXG5cdFx0XHRuZXdTZWxlY3RvciA9IG5vZGVUeXBlICE9PSAxICYmIHNlbGVjdG9yO1xyXG5cclxuXHRcdFx0Ly8gcVNBIHdvcmtzIHN0cmFuZ2VseSBvbiBFbGVtZW50LXJvb3RlZCBxdWVyaWVzXHJcblx0XHRcdC8vIFdlIGNhbiB3b3JrIGFyb3VuZCB0aGlzIGJ5IHNwZWNpZnlpbmcgYW4gZXh0cmEgSUQgb24gdGhlIHJvb3RcclxuXHRcdFx0Ly8gYW5kIHdvcmtpbmcgdXAgZnJvbSB0aGVyZSAoVGhhbmtzIHRvIEFuZHJldyBEdXBvbnQgZm9yIHRoZSB0ZWNobmlxdWUpXHJcblx0XHRcdC8vIElFIDggZG9lc24ndCB3b3JrIG9uIG9iamVjdCBlbGVtZW50c1xyXG5cdFx0XHRpZiAoIG5vZGVUeXBlID09PSAxICYmIGNvbnRleHQubm9kZU5hbWUudG9Mb3dlckNhc2UoKSAhPT0gXCJvYmplY3RcIiApIHtcclxuXHRcdFx0XHRncm91cHMgPSB0b2tlbml6ZSggc2VsZWN0b3IgKTtcclxuXHJcblx0XHRcdFx0aWYgKCAob2xkID0gY29udGV4dC5nZXRBdHRyaWJ1dGUoXCJpZFwiKSkgKSB7XHJcblx0XHRcdFx0XHRuaWQgPSBvbGQucmVwbGFjZSggcmVzY2FwZSwgXCJcXFxcJCZcIiApO1xyXG5cdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRjb250ZXh0LnNldEF0dHJpYnV0ZSggXCJpZFwiLCBuaWQgKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0bmlkID0gXCJbaWQ9J1wiICsgbmlkICsgXCInXSBcIjtcclxuXHJcblx0XHRcdFx0aSA9IGdyb3Vwcy5sZW5ndGg7XHJcblx0XHRcdFx0d2hpbGUgKCBpLS0gKSB7XHJcblx0XHRcdFx0XHRncm91cHNbaV0gPSBuaWQgKyB0b1NlbGVjdG9yKCBncm91cHNbaV0gKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0bmV3Q29udGV4dCA9IHJzaWJsaW5nLnRlc3QoIHNlbGVjdG9yICkgJiYgdGVzdENvbnRleHQoIGNvbnRleHQucGFyZW50Tm9kZSApIHx8IGNvbnRleHQ7XHJcblx0XHRcdFx0bmV3U2VsZWN0b3IgPSBncm91cHMuam9pbihcIixcIik7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdGlmICggbmV3U2VsZWN0b3IgKSB7XHJcblx0XHRcdFx0dHJ5IHtcclxuXHRcdFx0XHRcdHB1c2guYXBwbHkoIHJlc3VsdHMsXHJcblx0XHRcdFx0XHRcdG5ld0NvbnRleHQucXVlcnlTZWxlY3RvckFsbCggbmV3U2VsZWN0b3IgKVxyXG5cdFx0XHRcdFx0KTtcclxuXHRcdFx0XHRcdHJldHVybiByZXN1bHRzO1xyXG5cdFx0XHRcdH0gY2F0Y2gocXNhRXJyb3IpIHtcclxuXHRcdFx0XHR9IGZpbmFsbHkge1xyXG5cdFx0XHRcdFx0aWYgKCAhb2xkICkge1xyXG5cdFx0XHRcdFx0XHRjb250ZXh0LnJlbW92ZUF0dHJpYnV0ZShcImlkXCIpO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0Ly8gQWxsIG90aGVyc1xyXG5cdHJldHVybiBzZWxlY3QoIHNlbGVjdG9yLnJlcGxhY2UoIHJ0cmltLCBcIiQxXCIgKSwgY29udGV4dCwgcmVzdWx0cywgc2VlZCApO1xyXG59XHJcblxyXG4vKipcclxuICogQ3JlYXRlIGtleS12YWx1ZSBjYWNoZXMgb2YgbGltaXRlZCBzaXplXHJcbiAqIEByZXR1cm5zIHtGdW5jdGlvbihzdHJpbmcsIE9iamVjdCl9IFJldHVybnMgdGhlIE9iamVjdCBkYXRhIGFmdGVyIHN0b3JpbmcgaXQgb24gaXRzZWxmIHdpdGhcclxuICpcdHByb3BlcnR5IG5hbWUgdGhlIChzcGFjZS1zdWZmaXhlZCkgc3RyaW5nIGFuZCAoaWYgdGhlIGNhY2hlIGlzIGxhcmdlciB0aGFuIEV4cHIuY2FjaGVMZW5ndGgpXHJcbiAqXHRkZWxldGluZyB0aGUgb2xkZXN0IGVudHJ5XHJcbiAqL1xyXG5mdW5jdGlvbiBjcmVhdGVDYWNoZSgpIHtcclxuXHR2YXIga2V5cyA9IFtdO1xyXG5cclxuXHRmdW5jdGlvbiBjYWNoZSgga2V5LCB2YWx1ZSApIHtcclxuXHRcdC8vIFVzZSAoa2V5ICsgXCIgXCIpIHRvIGF2b2lkIGNvbGxpc2lvbiB3aXRoIG5hdGl2ZSBwcm90b3R5cGUgcHJvcGVydGllcyAoc2VlIElzc3VlICMxNTcpXHJcblx0XHRpZiAoIGtleXMucHVzaCgga2V5ICsgXCIgXCIgKSA+IEV4cHIuY2FjaGVMZW5ndGggKSB7XHJcblx0XHRcdC8vIE9ubHkga2VlcCB0aGUgbW9zdCByZWNlbnQgZW50cmllc1xyXG5cdFx0XHRkZWxldGUgY2FjaGVbIGtleXMuc2hpZnQoKSBdO1xyXG5cdFx0fVxyXG5cdFx0cmV0dXJuIChjYWNoZVsga2V5ICsgXCIgXCIgXSA9IHZhbHVlKTtcclxuXHR9XHJcblx0cmV0dXJuIGNhY2hlO1xyXG59XHJcblxyXG4vKipcclxuICogTWFyayBhIGZ1bmN0aW9uIGZvciBzcGVjaWFsIHVzZSBieSBTaXp6bGVcclxuICogQHBhcmFtIHtGdW5jdGlvbn0gZm4gVGhlIGZ1bmN0aW9uIHRvIG1hcmtcclxuICovXHJcbmZ1bmN0aW9uIG1hcmtGdW5jdGlvbiggZm4gKSB7XHJcblx0Zm5bIGV4cGFuZG8gXSA9IHRydWU7XHJcblx0cmV0dXJuIGZuO1xyXG59XHJcblxyXG4vKipcclxuICogU3VwcG9ydCB0ZXN0aW5nIHVzaW5nIGFuIGVsZW1lbnRcclxuICogQHBhcmFtIHtGdW5jdGlvbn0gZm4gUGFzc2VkIHRoZSBjcmVhdGVkIGRpdiBhbmQgZXhwZWN0cyBhIGJvb2xlYW4gcmVzdWx0XHJcbiAqL1xyXG5mdW5jdGlvbiBhc3NlcnQoIGZuICkge1xyXG5cdHZhciBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xyXG5cclxuXHR0cnkge1xyXG5cdFx0cmV0dXJuICEhZm4oIGRpdiApO1xyXG5cdH0gY2F0Y2ggKGUpIHtcclxuXHRcdHJldHVybiBmYWxzZTtcclxuXHR9IGZpbmFsbHkge1xyXG5cdFx0Ly8gUmVtb3ZlIGZyb20gaXRzIHBhcmVudCBieSBkZWZhdWx0XHJcblx0XHRpZiAoIGRpdi5wYXJlbnROb2RlICkge1xyXG5cdFx0XHRkaXYucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCggZGl2ICk7XHJcblx0XHR9XHJcblx0XHQvLyByZWxlYXNlIG1lbW9yeSBpbiBJRVxyXG5cdFx0ZGl2ID0gbnVsbDtcclxuXHR9XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBBZGRzIHRoZSBzYW1lIGhhbmRsZXIgZm9yIGFsbCBvZiB0aGUgc3BlY2lmaWVkIGF0dHJzXHJcbiAqIEBwYXJhbSB7U3RyaW5nfSBhdHRycyBQaXBlLXNlcGFyYXRlZCBsaXN0IG9mIGF0dHJpYnV0ZXNcclxuICogQHBhcmFtIHtGdW5jdGlvbn0gaGFuZGxlciBUaGUgbWV0aG9kIHRoYXQgd2lsbCBiZSBhcHBsaWVkXHJcbiAqL1xyXG5mdW5jdGlvbiBhZGRIYW5kbGUoIGF0dHJzLCBoYW5kbGVyICkge1xyXG5cdHZhciBhcnIgPSBhdHRycy5zcGxpdChcInxcIiksXHJcblx0XHRpID0gYXR0cnMubGVuZ3RoO1xyXG5cclxuXHR3aGlsZSAoIGktLSApIHtcclxuXHRcdEV4cHIuYXR0ckhhbmRsZVsgYXJyW2ldIF0gPSBoYW5kbGVyO1xyXG5cdH1cclxufVxyXG5cclxuLyoqXHJcbiAqIENoZWNrcyBkb2N1bWVudCBvcmRlciBvZiB0d28gc2libGluZ3NcclxuICogQHBhcmFtIHtFbGVtZW50fSBhXHJcbiAqIEBwYXJhbSB7RWxlbWVudH0gYlxyXG4gKiBAcmV0dXJucyB7TnVtYmVyfSBSZXR1cm5zIGxlc3MgdGhhbiAwIGlmIGEgcHJlY2VkZXMgYiwgZ3JlYXRlciB0aGFuIDAgaWYgYSBmb2xsb3dzIGJcclxuICovXHJcbmZ1bmN0aW9uIHNpYmxpbmdDaGVjayggYSwgYiApIHtcclxuXHR2YXIgY3VyID0gYiAmJiBhLFxyXG5cdFx0ZGlmZiA9IGN1ciAmJiBhLm5vZGVUeXBlID09PSAxICYmIGIubm9kZVR5cGUgPT09IDEgJiZcclxuXHRcdFx0KCB+Yi5zb3VyY2VJbmRleCB8fCBNQVhfTkVHQVRJVkUgKSAtXHJcblx0XHRcdCggfmEuc291cmNlSW5kZXggfHwgTUFYX05FR0FUSVZFICk7XHJcblxyXG5cdC8vIFVzZSBJRSBzb3VyY2VJbmRleCBpZiBhdmFpbGFibGUgb24gYm90aCBub2Rlc1xyXG5cdGlmICggZGlmZiApIHtcclxuXHRcdHJldHVybiBkaWZmO1xyXG5cdH1cclxuXHJcblx0Ly8gQ2hlY2sgaWYgYiBmb2xsb3dzIGFcclxuXHRpZiAoIGN1ciApIHtcclxuXHRcdHdoaWxlICggKGN1ciA9IGN1ci5uZXh0U2libGluZykgKSB7XHJcblx0XHRcdGlmICggY3VyID09PSBiICkge1xyXG5cdFx0XHRcdHJldHVybiAtMTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0cmV0dXJuIGEgPyAxIDogLTE7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBSZXR1cm5zIGEgZnVuY3Rpb24gdG8gdXNlIGluIHBzZXVkb3MgZm9yIGlucHV0IHR5cGVzXHJcbiAqIEBwYXJhbSB7U3RyaW5nfSB0eXBlXHJcbiAqL1xyXG5mdW5jdGlvbiBjcmVhdGVJbnB1dFBzZXVkbyggdHlwZSApIHtcclxuXHRyZXR1cm4gZnVuY3Rpb24oIGVsZW0gKSB7XHJcblx0XHR2YXIgbmFtZSA9IGVsZW0ubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtcclxuXHRcdHJldHVybiBuYW1lID09PSBcImlucHV0XCIgJiYgZWxlbS50eXBlID09PSB0eXBlO1xyXG5cdH07XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBSZXR1cm5zIGEgZnVuY3Rpb24gdG8gdXNlIGluIHBzZXVkb3MgZm9yIGJ1dHRvbnNcclxuICogQHBhcmFtIHtTdHJpbmd9IHR5cGVcclxuICovXHJcbmZ1bmN0aW9uIGNyZWF0ZUJ1dHRvblBzZXVkbyggdHlwZSApIHtcclxuXHRyZXR1cm4gZnVuY3Rpb24oIGVsZW0gKSB7XHJcblx0XHR2YXIgbmFtZSA9IGVsZW0ubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtcclxuXHRcdHJldHVybiAobmFtZSA9PT0gXCJpbnB1dFwiIHx8IG5hbWUgPT09IFwiYnV0dG9uXCIpICYmIGVsZW0udHlwZSA9PT0gdHlwZTtcclxuXHR9O1xyXG59XHJcblxyXG4vKipcclxuICogUmV0dXJucyBhIGZ1bmN0aW9uIHRvIHVzZSBpbiBwc2V1ZG9zIGZvciBwb3NpdGlvbmFsc1xyXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmblxyXG4gKi9cclxuZnVuY3Rpb24gY3JlYXRlUG9zaXRpb25hbFBzZXVkbyggZm4gKSB7XHJcblx0cmV0dXJuIG1hcmtGdW5jdGlvbihmdW5jdGlvbiggYXJndW1lbnQgKSB7XHJcblx0XHRhcmd1bWVudCA9ICthcmd1bWVudDtcclxuXHRcdHJldHVybiBtYXJrRnVuY3Rpb24oZnVuY3Rpb24oIHNlZWQsIG1hdGNoZXMgKSB7XHJcblx0XHRcdHZhciBqLFxyXG5cdFx0XHRcdG1hdGNoSW5kZXhlcyA9IGZuKCBbXSwgc2VlZC5sZW5ndGgsIGFyZ3VtZW50ICksXHJcblx0XHRcdFx0aSA9IG1hdGNoSW5kZXhlcy5sZW5ndGg7XHJcblxyXG5cdFx0XHQvLyBNYXRjaCBlbGVtZW50cyBmb3VuZCBhdCB0aGUgc3BlY2lmaWVkIGluZGV4ZXNcclxuXHRcdFx0d2hpbGUgKCBpLS0gKSB7XHJcblx0XHRcdFx0aWYgKCBzZWVkWyAoaiA9IG1hdGNoSW5kZXhlc1tpXSkgXSApIHtcclxuXHRcdFx0XHRcdHNlZWRbal0gPSAhKG1hdGNoZXNbal0gPSBzZWVkW2pdKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdH0pO1xyXG5cdH0pO1xyXG59XHJcblxyXG4vKipcclxuICogQ2hlY2tzIGEgbm9kZSBmb3IgdmFsaWRpdHkgYXMgYSBTaXp6bGUgY29udGV4dFxyXG4gKiBAcGFyYW0ge0VsZW1lbnR8T2JqZWN0PX0gY29udGV4dFxyXG4gKiBAcmV0dXJucyB7RWxlbWVudHxPYmplY3R8Qm9vbGVhbn0gVGhlIGlucHV0IG5vZGUgaWYgYWNjZXB0YWJsZSwgb3RoZXJ3aXNlIGEgZmFsc3kgdmFsdWVcclxuICovXHJcbmZ1bmN0aW9uIHRlc3RDb250ZXh0KCBjb250ZXh0ICkge1xyXG5cdHJldHVybiBjb250ZXh0ICYmIHR5cGVvZiBjb250ZXh0LmdldEVsZW1lbnRzQnlUYWdOYW1lICE9PSBcInVuZGVmaW5lZFwiICYmIGNvbnRleHQ7XHJcbn1cclxuXHJcbi8vIEV4cG9zZSBzdXBwb3J0IHZhcnMgZm9yIGNvbnZlbmllbmNlXHJcbnN1cHBvcnQgPSBTaXp6bGUuc3VwcG9ydCA9IHt9O1xyXG5cclxuLyoqXHJcbiAqIERldGVjdHMgWE1MIG5vZGVzXHJcbiAqIEBwYXJhbSB7RWxlbWVudHxPYmplY3R9IGVsZW0gQW4gZWxlbWVudCBvciBhIGRvY3VtZW50XHJcbiAqIEByZXR1cm5zIHtCb29sZWFufSBUcnVlIGlmZiBlbGVtIGlzIGEgbm9uLUhUTUwgWE1MIG5vZGVcclxuICovXHJcbmlzWE1MID0gU2l6emxlLmlzWE1MID0gZnVuY3Rpb24oIGVsZW0gKSB7XHJcblx0Ly8gZG9jdW1lbnRFbGVtZW50IGlzIHZlcmlmaWVkIGZvciBjYXNlcyB3aGVyZSBpdCBkb2Vzbid0IHlldCBleGlzdFxyXG5cdC8vIChzdWNoIGFzIGxvYWRpbmcgaWZyYW1lcyBpbiBJRSAtICM0ODMzKVxyXG5cdHZhciBkb2N1bWVudEVsZW1lbnQgPSBlbGVtICYmIChlbGVtLm93bmVyRG9jdW1lbnQgfHwgZWxlbSkuZG9jdW1lbnRFbGVtZW50O1xyXG5cdHJldHVybiBkb2N1bWVudEVsZW1lbnQgPyBkb2N1bWVudEVsZW1lbnQubm9kZU5hbWUgIT09IFwiSFRNTFwiIDogZmFsc2U7XHJcbn07XHJcblxyXG4vKipcclxuICogU2V0cyBkb2N1bWVudC1yZWxhdGVkIHZhcmlhYmxlcyBvbmNlIGJhc2VkIG9uIHRoZSBjdXJyZW50IGRvY3VtZW50XHJcbiAqIEBwYXJhbSB7RWxlbWVudHxPYmplY3R9IFtkb2NdIEFuIGVsZW1lbnQgb3IgZG9jdW1lbnQgb2JqZWN0IHRvIHVzZSB0byBzZXQgdGhlIGRvY3VtZW50XHJcbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIGN1cnJlbnQgZG9jdW1lbnRcclxuICovXHJcbnNldERvY3VtZW50ID0gU2l6emxlLnNldERvY3VtZW50ID0gZnVuY3Rpb24oIG5vZGUgKSB7XHJcblx0dmFyIGhhc0NvbXBhcmUsIHBhcmVudCxcclxuXHRcdGRvYyA9IG5vZGUgPyBub2RlLm93bmVyRG9jdW1lbnQgfHwgbm9kZSA6IHByZWZlcnJlZERvYztcclxuXHJcblx0Ly8gSWYgbm8gZG9jdW1lbnQgYW5kIGRvY3VtZW50RWxlbWVudCBpcyBhdmFpbGFibGUsIHJldHVyblxyXG5cdGlmICggZG9jID09PSBkb2N1bWVudCB8fCBkb2Mubm9kZVR5cGUgIT09IDkgfHwgIWRvYy5kb2N1bWVudEVsZW1lbnQgKSB7XHJcblx0XHRyZXR1cm4gZG9jdW1lbnQ7XHJcblx0fVxyXG5cclxuXHQvLyBTZXQgb3VyIGRvY3VtZW50XHJcblx0ZG9jdW1lbnQgPSBkb2M7XHJcblx0ZG9jRWxlbSA9IGRvYy5kb2N1bWVudEVsZW1lbnQ7XHJcblx0cGFyZW50ID0gZG9jLmRlZmF1bHRWaWV3O1xyXG5cclxuXHQvLyBTdXBwb3J0OiBJRT44XHJcblx0Ly8gSWYgaWZyYW1lIGRvY3VtZW50IGlzIGFzc2lnbmVkIHRvIFwiZG9jdW1lbnRcIiB2YXJpYWJsZSBhbmQgaWYgaWZyYW1lIGhhcyBiZWVuIHJlbG9hZGVkLFxyXG5cdC8vIElFIHdpbGwgdGhyb3cgXCJwZXJtaXNzaW9uIGRlbmllZFwiIGVycm9yIHdoZW4gYWNjZXNzaW5nIFwiZG9jdW1lbnRcIiB2YXJpYWJsZSwgc2VlIGpRdWVyeSAjMTM5MzZcclxuXHQvLyBJRTYtOCBkbyBub3Qgc3VwcG9ydCB0aGUgZGVmYXVsdFZpZXcgcHJvcGVydHkgc28gcGFyZW50IHdpbGwgYmUgdW5kZWZpbmVkXHJcblx0aWYgKCBwYXJlbnQgJiYgcGFyZW50ICE9PSBwYXJlbnQudG9wICkge1xyXG5cdFx0Ly8gSUUxMSBkb2VzIG5vdCBoYXZlIGF0dGFjaEV2ZW50LCBzbyBhbGwgbXVzdCBzdWZmZXJcclxuXHRcdGlmICggcGFyZW50LmFkZEV2ZW50TGlzdGVuZXIgKSB7XHJcblx0XHRcdHBhcmVudC5hZGRFdmVudExpc3RlbmVyKCBcInVubG9hZFwiLCB1bmxvYWRIYW5kbGVyLCBmYWxzZSApO1xyXG5cdFx0fSBlbHNlIGlmICggcGFyZW50LmF0dGFjaEV2ZW50ICkge1xyXG5cdFx0XHRwYXJlbnQuYXR0YWNoRXZlbnQoIFwib251bmxvYWRcIiwgdW5sb2FkSGFuZGxlciApO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0LyogU3VwcG9ydCB0ZXN0c1xyXG5cdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cclxuXHRkb2N1bWVudElzSFRNTCA9ICFpc1hNTCggZG9jICk7XHJcblxyXG5cdC8qIEF0dHJpYnV0ZXNcclxuXHQtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXHJcblxyXG5cdC8vIFN1cHBvcnQ6IElFPDhcclxuXHQvLyBWZXJpZnkgdGhhdCBnZXRBdHRyaWJ1dGUgcmVhbGx5IHJldHVybnMgYXR0cmlidXRlcyBhbmQgbm90IHByb3BlcnRpZXNcclxuXHQvLyAoZXhjZXB0aW5nIElFOCBib29sZWFucylcclxuXHRzdXBwb3J0LmF0dHJpYnV0ZXMgPSBhc3NlcnQoZnVuY3Rpb24oIGRpdiApIHtcclxuXHRcdGRpdi5jbGFzc05hbWUgPSBcImlcIjtcclxuXHRcdHJldHVybiAhZGl2LmdldEF0dHJpYnV0ZShcImNsYXNzTmFtZVwiKTtcclxuXHR9KTtcclxuXHJcblx0LyogZ2V0RWxlbWVudChzKUJ5KlxyXG5cdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cclxuXHJcblx0Ly8gQ2hlY2sgaWYgZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCIqXCIpIHJldHVybnMgb25seSBlbGVtZW50c1xyXG5cdHN1cHBvcnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUgPSBhc3NlcnQoZnVuY3Rpb24oIGRpdiApIHtcclxuXHRcdGRpdi5hcHBlbmRDaGlsZCggZG9jLmNyZWF0ZUNvbW1lbnQoXCJcIikgKTtcclxuXHRcdHJldHVybiAhZGl2LmdldEVsZW1lbnRzQnlUYWdOYW1lKFwiKlwiKS5sZW5ndGg7XHJcblx0fSk7XHJcblxyXG5cdC8vIFN1cHBvcnQ6IElFPDlcclxuXHRzdXBwb3J0LmdldEVsZW1lbnRzQnlDbGFzc05hbWUgPSBybmF0aXZlLnRlc3QoIGRvYy5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lICk7XHJcblxyXG5cdC8vIFN1cHBvcnQ6IElFPDEwXHJcblx0Ly8gQ2hlY2sgaWYgZ2V0RWxlbWVudEJ5SWQgcmV0dXJucyBlbGVtZW50cyBieSBuYW1lXHJcblx0Ly8gVGhlIGJyb2tlbiBnZXRFbGVtZW50QnlJZCBtZXRob2RzIGRvbid0IHBpY2sgdXAgcHJvZ3JhbWF0aWNhbGx5LXNldCBuYW1lcyxcclxuXHQvLyBzbyB1c2UgYSByb3VuZGFib3V0IGdldEVsZW1lbnRzQnlOYW1lIHRlc3RcclxuXHRzdXBwb3J0LmdldEJ5SWQgPSBhc3NlcnQoZnVuY3Rpb24oIGRpdiApIHtcclxuXHRcdGRvY0VsZW0uYXBwZW5kQ2hpbGQoIGRpdiApLmlkID0gZXhwYW5kbztcclxuXHRcdHJldHVybiAhZG9jLmdldEVsZW1lbnRzQnlOYW1lIHx8ICFkb2MuZ2V0RWxlbWVudHNCeU5hbWUoIGV4cGFuZG8gKS5sZW5ndGg7XHJcblx0fSk7XHJcblxyXG5cdC8vIElEIGZpbmQgYW5kIGZpbHRlclxyXG5cdGlmICggc3VwcG9ydC5nZXRCeUlkICkge1xyXG5cdFx0RXhwci5maW5kW1wiSURcIl0gPSBmdW5jdGlvbiggaWQsIGNvbnRleHQgKSB7XHJcblx0XHRcdGlmICggdHlwZW9mIGNvbnRleHQuZ2V0RWxlbWVudEJ5SWQgIT09IFwidW5kZWZpbmVkXCIgJiYgZG9jdW1lbnRJc0hUTUwgKSB7XHJcblx0XHRcdFx0dmFyIG0gPSBjb250ZXh0LmdldEVsZW1lbnRCeUlkKCBpZCApO1xyXG5cdFx0XHRcdC8vIENoZWNrIHBhcmVudE5vZGUgdG8gY2F0Y2ggd2hlbiBCbGFja2JlcnJ5IDQuNiByZXR1cm5zXHJcblx0XHRcdFx0Ly8gbm9kZXMgdGhhdCBhcmUgbm8gbG9uZ2VyIGluIHRoZSBkb2N1bWVudCAjNjk2M1xyXG5cdFx0XHRcdHJldHVybiBtICYmIG0ucGFyZW50Tm9kZSA/IFsgbSBdIDogW107XHJcblx0XHRcdH1cclxuXHRcdH07XHJcblx0XHRFeHByLmZpbHRlcltcIklEXCJdID0gZnVuY3Rpb24oIGlkICkge1xyXG5cdFx0XHR2YXIgYXR0cklkID0gaWQucmVwbGFjZSggcnVuZXNjYXBlLCBmdW5lc2NhcGUgKTtcclxuXHRcdFx0cmV0dXJuIGZ1bmN0aW9uKCBlbGVtICkge1xyXG5cdFx0XHRcdHJldHVybiBlbGVtLmdldEF0dHJpYnV0ZShcImlkXCIpID09PSBhdHRySWQ7XHJcblx0XHRcdH07XHJcblx0XHR9O1xyXG5cdH0gZWxzZSB7XHJcblx0XHQvLyBTdXBwb3J0OiBJRTYvN1xyXG5cdFx0Ly8gZ2V0RWxlbWVudEJ5SWQgaXMgbm90IHJlbGlhYmxlIGFzIGEgZmluZCBzaG9ydGN1dFxyXG5cdFx0ZGVsZXRlIEV4cHIuZmluZFtcIklEXCJdO1xyXG5cclxuXHRcdEV4cHIuZmlsdGVyW1wiSURcIl0gPSAgZnVuY3Rpb24oIGlkICkge1xyXG5cdFx0XHR2YXIgYXR0cklkID0gaWQucmVwbGFjZSggcnVuZXNjYXBlLCBmdW5lc2NhcGUgKTtcclxuXHRcdFx0cmV0dXJuIGZ1bmN0aW9uKCBlbGVtICkge1xyXG5cdFx0XHRcdHZhciBub2RlID0gdHlwZW9mIGVsZW0uZ2V0QXR0cmlidXRlTm9kZSAhPT0gXCJ1bmRlZmluZWRcIiAmJiBlbGVtLmdldEF0dHJpYnV0ZU5vZGUoXCJpZFwiKTtcclxuXHRcdFx0XHRyZXR1cm4gbm9kZSAmJiBub2RlLnZhbHVlID09PSBhdHRySWQ7XHJcblx0XHRcdH07XHJcblx0XHR9O1xyXG5cdH1cclxuXHJcblx0Ly8gVGFnXHJcblx0RXhwci5maW5kW1wiVEFHXCJdID0gc3VwcG9ydC5nZXRFbGVtZW50c0J5VGFnTmFtZSA/XHJcblx0XHRmdW5jdGlvbiggdGFnLCBjb250ZXh0ICkge1xyXG5cdFx0XHRpZiAoIHR5cGVvZiBjb250ZXh0LmdldEVsZW1lbnRzQnlUYWdOYW1lICE9PSBcInVuZGVmaW5lZFwiICkge1xyXG5cdFx0XHRcdHJldHVybiBjb250ZXh0LmdldEVsZW1lbnRzQnlUYWdOYW1lKCB0YWcgKTtcclxuXHJcblx0XHRcdC8vIERvY3VtZW50RnJhZ21lbnQgbm9kZXMgZG9uJ3QgaGF2ZSBnRUJUTlxyXG5cdFx0XHR9IGVsc2UgaWYgKCBzdXBwb3J0LnFzYSApIHtcclxuXHRcdFx0XHRyZXR1cm4gY29udGV4dC5xdWVyeVNlbGVjdG9yQWxsKCB0YWcgKTtcclxuXHRcdFx0fVxyXG5cdFx0fSA6XHJcblxyXG5cdFx0ZnVuY3Rpb24oIHRhZywgY29udGV4dCApIHtcclxuXHRcdFx0dmFyIGVsZW0sXHJcblx0XHRcdFx0dG1wID0gW10sXHJcblx0XHRcdFx0aSA9IDAsXHJcblx0XHRcdFx0Ly8gQnkgaGFwcHkgY29pbmNpZGVuY2UsIGEgKGJyb2tlbikgZ0VCVE4gYXBwZWFycyBvbiBEb2N1bWVudEZyYWdtZW50IG5vZGVzIHRvb1xyXG5cdFx0XHRcdHJlc3VsdHMgPSBjb250ZXh0LmdldEVsZW1lbnRzQnlUYWdOYW1lKCB0YWcgKTtcclxuXHJcblx0XHRcdC8vIEZpbHRlciBvdXQgcG9zc2libGUgY29tbWVudHNcclxuXHRcdFx0aWYgKCB0YWcgPT09IFwiKlwiICkge1xyXG5cdFx0XHRcdHdoaWxlICggKGVsZW0gPSByZXN1bHRzW2krK10pICkge1xyXG5cdFx0XHRcdFx0aWYgKCBlbGVtLm5vZGVUeXBlID09PSAxICkge1xyXG5cdFx0XHRcdFx0XHR0bXAucHVzaCggZWxlbSApO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0cmV0dXJuIHRtcDtcclxuXHRcdFx0fVxyXG5cdFx0XHRyZXR1cm4gcmVzdWx0cztcclxuXHRcdH07XHJcblxyXG5cdC8vIENsYXNzXHJcblx0RXhwci5maW5kW1wiQ0xBU1NcIl0gPSBzdXBwb3J0LmdldEVsZW1lbnRzQnlDbGFzc05hbWUgJiYgZnVuY3Rpb24oIGNsYXNzTmFtZSwgY29udGV4dCApIHtcclxuXHRcdGlmICggZG9jdW1lbnRJc0hUTUwgKSB7XHJcblx0XHRcdHJldHVybiBjb250ZXh0LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoIGNsYXNzTmFtZSApO1xyXG5cdFx0fVxyXG5cdH07XHJcblxyXG5cdC8qIFFTQS9tYXRjaGVzU2VsZWN0b3JcclxuXHQtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXHJcblxyXG5cdC8vIFFTQSBhbmQgbWF0Y2hlc1NlbGVjdG9yIHN1cHBvcnRcclxuXHJcblx0Ly8gbWF0Y2hlc1NlbGVjdG9yKDphY3RpdmUpIHJlcG9ydHMgZmFsc2Ugd2hlbiB0cnVlIChJRTkvT3BlcmEgMTEuNSlcclxuXHRyYnVnZ3lNYXRjaGVzID0gW107XHJcblxyXG5cdC8vIHFTYSg6Zm9jdXMpIHJlcG9ydHMgZmFsc2Ugd2hlbiB0cnVlIChDaHJvbWUgMjEpXHJcblx0Ly8gV2UgYWxsb3cgdGhpcyBiZWNhdXNlIG9mIGEgYnVnIGluIElFOC85IHRoYXQgdGhyb3dzIGFuIGVycm9yXHJcblx0Ly8gd2hlbmV2ZXIgYGRvY3VtZW50LmFjdGl2ZUVsZW1lbnRgIGlzIGFjY2Vzc2VkIG9uIGFuIGlmcmFtZVxyXG5cdC8vIFNvLCB3ZSBhbGxvdyA6Zm9jdXMgdG8gcGFzcyB0aHJvdWdoIFFTQSBhbGwgdGhlIHRpbWUgdG8gYXZvaWQgdGhlIElFIGVycm9yXHJcblx0Ly8gU2VlIGh0dHA6Ly9idWdzLmpxdWVyeS5jb20vdGlja2V0LzEzMzc4XHJcblx0cmJ1Z2d5UVNBID0gW107XHJcblxyXG5cdGlmICggKHN1cHBvcnQucXNhID0gcm5hdGl2ZS50ZXN0KCBkb2MucXVlcnlTZWxlY3RvckFsbCApKSApIHtcclxuXHRcdC8vIEJ1aWxkIFFTQSByZWdleFxyXG5cdFx0Ly8gUmVnZXggc3RyYXRlZ3kgYWRvcHRlZCBmcm9tIERpZWdvIFBlcmluaVxyXG5cdFx0YXNzZXJ0KGZ1bmN0aW9uKCBkaXYgKSB7XHJcblx0XHRcdC8vIFNlbGVjdCBpcyBzZXQgdG8gZW1wdHkgc3RyaW5nIG9uIHB1cnBvc2VcclxuXHRcdFx0Ly8gVGhpcyBpcyB0byB0ZXN0IElFJ3MgdHJlYXRtZW50IG9mIG5vdCBleHBsaWNpdGx5XHJcblx0XHRcdC8vIHNldHRpbmcgYSBib29sZWFuIGNvbnRlbnQgYXR0cmlidXRlLFxyXG5cdFx0XHQvLyBzaW5jZSBpdHMgcHJlc2VuY2Ugc2hvdWxkIGJlIGVub3VnaFxyXG5cdFx0XHQvLyBodHRwOi8vYnVncy5qcXVlcnkuY29tL3RpY2tldC8xMjM1OVxyXG5cdFx0XHRkb2NFbGVtLmFwcGVuZENoaWxkKCBkaXYgKS5pbm5lckhUTUwgPSBcIjxhIGlkPSdcIiArIGV4cGFuZG8gKyBcIic+PC9hPlwiICtcclxuXHRcdFx0XHRcIjxzZWxlY3QgaWQ9J1wiICsgZXhwYW5kbyArIFwiLVxcZl0nIG1zYWxsb3djYXB0dXJlPScnPlwiICtcclxuXHRcdFx0XHRcIjxvcHRpb24gc2VsZWN0ZWQ9Jyc+PC9vcHRpb24+PC9zZWxlY3Q+XCI7XHJcblxyXG5cdFx0XHQvLyBTdXBwb3J0OiBJRTgsIE9wZXJhIDExLTEyLjE2XHJcblx0XHRcdC8vIE5vdGhpbmcgc2hvdWxkIGJlIHNlbGVjdGVkIHdoZW4gZW1wdHkgc3RyaW5ncyBmb2xsb3cgXj0gb3IgJD0gb3IgKj1cclxuXHRcdFx0Ly8gVGhlIHRlc3QgYXR0cmlidXRlIG11c3QgYmUgdW5rbm93biBpbiBPcGVyYSBidXQgXCJzYWZlXCIgZm9yIFdpblJUXHJcblx0XHRcdC8vIGh0dHA6Ly9tc2RuLm1pY3Jvc29mdC5jb20vZW4tdXMvbGlicmFyeS9pZS9oaDQ2NTM4OC5hc3B4I2F0dHJpYnV0ZV9zZWN0aW9uXHJcblx0XHRcdGlmICggZGl2LnF1ZXJ5U2VsZWN0b3JBbGwoXCJbbXNhbGxvd2NhcHR1cmVePScnXVwiKS5sZW5ndGggKSB7XHJcblx0XHRcdFx0cmJ1Z2d5UVNBLnB1c2goIFwiWypeJF09XCIgKyB3aGl0ZXNwYWNlICsgXCIqKD86Jyd8XFxcIlxcXCIpXCIgKTtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0Ly8gU3VwcG9ydDogSUU4XHJcblx0XHRcdC8vIEJvb2xlYW4gYXR0cmlidXRlcyBhbmQgXCJ2YWx1ZVwiIGFyZSBub3QgdHJlYXRlZCBjb3JyZWN0bHlcclxuXHRcdFx0aWYgKCAhZGl2LnF1ZXJ5U2VsZWN0b3JBbGwoXCJbc2VsZWN0ZWRdXCIpLmxlbmd0aCApIHtcclxuXHRcdFx0XHRyYnVnZ3lRU0EucHVzaCggXCJcXFxcW1wiICsgd2hpdGVzcGFjZSArIFwiKig/OnZhbHVlfFwiICsgYm9vbGVhbnMgKyBcIilcIiApO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHQvLyBTdXBwb3J0OiBDaHJvbWU8MjksIEFuZHJvaWQ8NC4yKywgU2FmYXJpPDcuMCssIGlPUzw3LjArLCBQaGFudG9tSlM8MS45LjcrXHJcblx0XHRcdGlmICggIWRpdi5xdWVyeVNlbGVjdG9yQWxsKCBcIltpZH49XCIgKyBleHBhbmRvICsgXCItXVwiICkubGVuZ3RoICkge1xyXG5cdFx0XHRcdHJidWdneVFTQS5wdXNoKFwifj1cIik7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdC8vIFdlYmtpdC9PcGVyYSAtIDpjaGVja2VkIHNob3VsZCByZXR1cm4gc2VsZWN0ZWQgb3B0aW9uIGVsZW1lbnRzXHJcblx0XHRcdC8vIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMTEvUkVDLWNzczMtc2VsZWN0b3JzLTIwMTEwOTI5LyNjaGVja2VkXHJcblx0XHRcdC8vIElFOCB0aHJvd3MgZXJyb3IgaGVyZSBhbmQgd2lsbCBub3Qgc2VlIGxhdGVyIHRlc3RzXHJcblx0XHRcdGlmICggIWRpdi5xdWVyeVNlbGVjdG9yQWxsKFwiOmNoZWNrZWRcIikubGVuZ3RoICkge1xyXG5cdFx0XHRcdHJidWdneVFTQS5wdXNoKFwiOmNoZWNrZWRcIik7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdC8vIFN1cHBvcnQ6IFNhZmFyaSA4KywgaU9TIDgrXHJcblx0XHRcdC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzY4NTFcclxuXHRcdFx0Ly8gSW4tcGFnZSBgc2VsZWN0b3IjaWQgc2liaW5nLWNvbWJpbmF0b3Igc2VsZWN0b3JgIGZhaWxzXHJcblx0XHRcdGlmICggIWRpdi5xdWVyeVNlbGVjdG9yQWxsKCBcImEjXCIgKyBleHBhbmRvICsgXCIrKlwiICkubGVuZ3RoICkge1xyXG5cdFx0XHRcdHJidWdneVFTQS5wdXNoKFwiLiMuK1srfl1cIik7XHJcblx0XHRcdH1cclxuXHRcdH0pO1xyXG5cclxuXHRcdGFzc2VydChmdW5jdGlvbiggZGl2ICkge1xyXG5cdFx0XHQvLyBTdXBwb3J0OiBXaW5kb3dzIDggTmF0aXZlIEFwcHNcclxuXHRcdFx0Ly8gVGhlIHR5cGUgYW5kIG5hbWUgYXR0cmlidXRlcyBhcmUgcmVzdHJpY3RlZCBkdXJpbmcgLmlubmVySFRNTCBhc3NpZ25tZW50XHJcblx0XHRcdHZhciBpbnB1dCA9IGRvYy5jcmVhdGVFbGVtZW50KFwiaW5wdXRcIik7XHJcblx0XHRcdGlucHV0LnNldEF0dHJpYnV0ZSggXCJ0eXBlXCIsIFwiaGlkZGVuXCIgKTtcclxuXHRcdFx0ZGl2LmFwcGVuZENoaWxkKCBpbnB1dCApLnNldEF0dHJpYnV0ZSggXCJuYW1lXCIsIFwiRFwiICk7XHJcblxyXG5cdFx0XHQvLyBTdXBwb3J0OiBJRThcclxuXHRcdFx0Ly8gRW5mb3JjZSBjYXNlLXNlbnNpdGl2aXR5IG9mIG5hbWUgYXR0cmlidXRlXHJcblx0XHRcdGlmICggZGl2LnF1ZXJ5U2VsZWN0b3JBbGwoXCJbbmFtZT1kXVwiKS5sZW5ndGggKSB7XHJcblx0XHRcdFx0cmJ1Z2d5UVNBLnB1c2goIFwibmFtZVwiICsgd2hpdGVzcGFjZSArIFwiKlsqXiR8IX5dPz1cIiApO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHQvLyBGRiAzLjUgLSA6ZW5hYmxlZC86ZGlzYWJsZWQgYW5kIGhpZGRlbiBlbGVtZW50cyAoaGlkZGVuIGVsZW1lbnRzIGFyZSBzdGlsbCBlbmFibGVkKVxyXG5cdFx0XHQvLyBJRTggdGhyb3dzIGVycm9yIGhlcmUgYW5kIHdpbGwgbm90IHNlZSBsYXRlciB0ZXN0c1xyXG5cdFx0XHRpZiAoICFkaXYucXVlcnlTZWxlY3RvckFsbChcIjplbmFibGVkXCIpLmxlbmd0aCApIHtcclxuXHRcdFx0XHRyYnVnZ3lRU0EucHVzaCggXCI6ZW5hYmxlZFwiLCBcIjpkaXNhYmxlZFwiICk7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdC8vIE9wZXJhIDEwLTExIGRvZXMgbm90IHRocm93IG9uIHBvc3QtY29tbWEgaW52YWxpZCBwc2V1ZG9zXHJcblx0XHRcdGRpdi5xdWVyeVNlbGVjdG9yQWxsKFwiKiw6eFwiKTtcclxuXHRcdFx0cmJ1Z2d5UVNBLnB1c2goXCIsLio6XCIpO1xyXG5cdFx0fSk7XHJcblx0fVxyXG5cclxuXHRpZiAoIChzdXBwb3J0Lm1hdGNoZXNTZWxlY3RvciA9IHJuYXRpdmUudGVzdCggKG1hdGNoZXMgPSBkb2NFbGVtLm1hdGNoZXMgfHxcclxuXHRcdGRvY0VsZW0ud2Via2l0TWF0Y2hlc1NlbGVjdG9yIHx8XHJcblx0XHRkb2NFbGVtLm1vek1hdGNoZXNTZWxlY3RvciB8fFxyXG5cdFx0ZG9jRWxlbS5vTWF0Y2hlc1NlbGVjdG9yIHx8XHJcblx0XHRkb2NFbGVtLm1zTWF0Y2hlc1NlbGVjdG9yKSApKSApIHtcclxuXHJcblx0XHRhc3NlcnQoZnVuY3Rpb24oIGRpdiApIHtcclxuXHRcdFx0Ly8gQ2hlY2sgdG8gc2VlIGlmIGl0J3MgcG9zc2libGUgdG8gZG8gbWF0Y2hlc1NlbGVjdG9yXHJcblx0XHRcdC8vIG9uIGEgZGlzY29ubmVjdGVkIG5vZGUgKElFIDkpXHJcblx0XHRcdHN1cHBvcnQuZGlzY29ubmVjdGVkTWF0Y2ggPSBtYXRjaGVzLmNhbGwoIGRpdiwgXCJkaXZcIiApO1xyXG5cclxuXHRcdFx0Ly8gVGhpcyBzaG91bGQgZmFpbCB3aXRoIGFuIGV4Y2VwdGlvblxyXG5cdFx0XHQvLyBHZWNrbyBkb2VzIG5vdCBlcnJvciwgcmV0dXJucyBmYWxzZSBpbnN0ZWFkXHJcblx0XHRcdG1hdGNoZXMuY2FsbCggZGl2LCBcIltzIT0nJ106eFwiICk7XHJcblx0XHRcdHJidWdneU1hdGNoZXMucHVzaCggXCIhPVwiLCBwc2V1ZG9zICk7XHJcblx0XHR9KTtcclxuXHR9XHJcblxyXG5cdHJidWdneVFTQSA9IHJidWdneVFTQS5sZW5ndGggJiYgbmV3IFJlZ0V4cCggcmJ1Z2d5UVNBLmpvaW4oXCJ8XCIpICk7XHJcblx0cmJ1Z2d5TWF0Y2hlcyA9IHJidWdneU1hdGNoZXMubGVuZ3RoICYmIG5ldyBSZWdFeHAoIHJidWdneU1hdGNoZXMuam9pbihcInxcIikgKTtcclxuXHJcblx0LyogQ29udGFpbnNcclxuXHQtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXHJcblx0aGFzQ29tcGFyZSA9IHJuYXRpdmUudGVzdCggZG9jRWxlbS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbiApO1xyXG5cclxuXHQvLyBFbGVtZW50IGNvbnRhaW5zIGFub3RoZXJcclxuXHQvLyBQdXJwb3NlZnVsbHkgZG9lcyBub3QgaW1wbGVtZW50IGluY2x1c2l2ZSBkZXNjZW5kZW50XHJcblx0Ly8gQXMgaW4sIGFuIGVsZW1lbnQgZG9lcyBub3QgY29udGFpbiBpdHNlbGZcclxuXHRjb250YWlucyA9IGhhc0NvbXBhcmUgfHwgcm5hdGl2ZS50ZXN0KCBkb2NFbGVtLmNvbnRhaW5zICkgP1xyXG5cdFx0ZnVuY3Rpb24oIGEsIGIgKSB7XHJcblx0XHRcdHZhciBhZG93biA9IGEubm9kZVR5cGUgPT09IDkgPyBhLmRvY3VtZW50RWxlbWVudCA6IGEsXHJcblx0XHRcdFx0YnVwID0gYiAmJiBiLnBhcmVudE5vZGU7XHJcblx0XHRcdHJldHVybiBhID09PSBidXAgfHwgISEoIGJ1cCAmJiBidXAubm9kZVR5cGUgPT09IDEgJiYgKFxyXG5cdFx0XHRcdGFkb3duLmNvbnRhaW5zID9cclxuXHRcdFx0XHRcdGFkb3duLmNvbnRhaW5zKCBidXAgKSA6XHJcblx0XHRcdFx0XHRhLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uICYmIGEuY29tcGFyZURvY3VtZW50UG9zaXRpb24oIGJ1cCApICYgMTZcclxuXHRcdFx0KSk7XHJcblx0XHR9IDpcclxuXHRcdGZ1bmN0aW9uKCBhLCBiICkge1xyXG5cdFx0XHRpZiAoIGIgKSB7XHJcblx0XHRcdFx0d2hpbGUgKCAoYiA9IGIucGFyZW50Tm9kZSkgKSB7XHJcblx0XHRcdFx0XHRpZiAoIGIgPT09IGEgKSB7XHJcblx0XHRcdFx0XHRcdHJldHVybiB0cnVlO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0XHRyZXR1cm4gZmFsc2U7XHJcblx0XHR9O1xyXG5cclxuXHQvKiBTb3J0aW5nXHJcblx0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xyXG5cclxuXHQvLyBEb2N1bWVudCBvcmRlciBzb3J0aW5nXHJcblx0c29ydE9yZGVyID0gaGFzQ29tcGFyZSA/XHJcblx0ZnVuY3Rpb24oIGEsIGIgKSB7XHJcblxyXG5cdFx0Ly8gRmxhZyBmb3IgZHVwbGljYXRlIHJlbW92YWxcclxuXHRcdGlmICggYSA9PT0gYiApIHtcclxuXHRcdFx0aGFzRHVwbGljYXRlID0gdHJ1ZTtcclxuXHRcdFx0cmV0dXJuIDA7XHJcblx0XHR9XHJcblxyXG5cdFx0Ly8gU29ydCBvbiBtZXRob2QgZXhpc3RlbmNlIGlmIG9ubHkgb25lIGlucHV0IGhhcyBjb21wYXJlRG9jdW1lbnRQb3NpdGlvblxyXG5cdFx0dmFyIGNvbXBhcmUgPSAhYS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbiAtICFiLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uO1xyXG5cdFx0aWYgKCBjb21wYXJlICkge1xyXG5cdFx0XHRyZXR1cm4gY29tcGFyZTtcclxuXHRcdH1cclxuXHJcblx0XHQvLyBDYWxjdWxhdGUgcG9zaXRpb24gaWYgYm90aCBpbnB1dHMgYmVsb25nIHRvIHRoZSBzYW1lIGRvY3VtZW50XHJcblx0XHRjb21wYXJlID0gKCBhLm93bmVyRG9jdW1lbnQgfHwgYSApID09PSAoIGIub3duZXJEb2N1bWVudCB8fCBiICkgP1xyXG5cdFx0XHRhLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKCBiICkgOlxyXG5cclxuXHRcdFx0Ly8gT3RoZXJ3aXNlIHdlIGtub3cgdGhleSBhcmUgZGlzY29ubmVjdGVkXHJcblx0XHRcdDE7XHJcblxyXG5cdFx0Ly8gRGlzY29ubmVjdGVkIG5vZGVzXHJcblx0XHRpZiAoIGNvbXBhcmUgJiAxIHx8XHJcblx0XHRcdCghc3VwcG9ydC5zb3J0RGV0YWNoZWQgJiYgYi5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbiggYSApID09PSBjb21wYXJlKSApIHtcclxuXHJcblx0XHRcdC8vIENob29zZSB0aGUgZmlyc3QgZWxlbWVudCB0aGF0IGlzIHJlbGF0ZWQgdG8gb3VyIHByZWZlcnJlZCBkb2N1bWVudFxyXG5cdFx0XHRpZiAoIGEgPT09IGRvYyB8fCBhLm93bmVyRG9jdW1lbnQgPT09IHByZWZlcnJlZERvYyAmJiBjb250YWlucyhwcmVmZXJyZWREb2MsIGEpICkge1xyXG5cdFx0XHRcdHJldHVybiAtMTtcclxuXHRcdFx0fVxyXG5cdFx0XHRpZiAoIGIgPT09IGRvYyB8fCBiLm93bmVyRG9jdW1lbnQgPT09IHByZWZlcnJlZERvYyAmJiBjb250YWlucyhwcmVmZXJyZWREb2MsIGIpICkge1xyXG5cdFx0XHRcdHJldHVybiAxO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHQvLyBNYWludGFpbiBvcmlnaW5hbCBvcmRlclxyXG5cdFx0XHRyZXR1cm4gc29ydElucHV0ID9cclxuXHRcdFx0XHQoIGluZGV4T2YoIHNvcnRJbnB1dCwgYSApIC0gaW5kZXhPZiggc29ydElucHV0LCBiICkgKSA6XHJcblx0XHRcdFx0MDtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gY29tcGFyZSAmIDQgPyAtMSA6IDE7XHJcblx0fSA6XHJcblx0ZnVuY3Rpb24oIGEsIGIgKSB7XHJcblx0XHQvLyBFeGl0IGVhcmx5IGlmIHRoZSBub2RlcyBhcmUgaWRlbnRpY2FsXHJcblx0XHRpZiAoIGEgPT09IGIgKSB7XHJcblx0XHRcdGhhc0R1cGxpY2F0ZSA9IHRydWU7XHJcblx0XHRcdHJldHVybiAwO1xyXG5cdFx0fVxyXG5cclxuXHRcdHZhciBjdXIsXHJcblx0XHRcdGkgPSAwLFxyXG5cdFx0XHRhdXAgPSBhLnBhcmVudE5vZGUsXHJcblx0XHRcdGJ1cCA9IGIucGFyZW50Tm9kZSxcclxuXHRcdFx0YXAgPSBbIGEgXSxcclxuXHRcdFx0YnAgPSBbIGIgXTtcclxuXHJcblx0XHQvLyBQYXJlbnRsZXNzIG5vZGVzIGFyZSBlaXRoZXIgZG9jdW1lbnRzIG9yIGRpc2Nvbm5lY3RlZFxyXG5cdFx0aWYgKCAhYXVwIHx8ICFidXAgKSB7XHJcblx0XHRcdHJldHVybiBhID09PSBkb2MgPyAtMSA6XHJcblx0XHRcdFx0YiA9PT0gZG9jID8gMSA6XHJcblx0XHRcdFx0YXVwID8gLTEgOlxyXG5cdFx0XHRcdGJ1cCA/IDEgOlxyXG5cdFx0XHRcdHNvcnRJbnB1dCA/XHJcblx0XHRcdFx0KCBpbmRleE9mKCBzb3J0SW5wdXQsIGEgKSAtIGluZGV4T2YoIHNvcnRJbnB1dCwgYiApICkgOlxyXG5cdFx0XHRcdDA7XHJcblxyXG5cdFx0Ly8gSWYgdGhlIG5vZGVzIGFyZSBzaWJsaW5ncywgd2UgY2FuIGRvIGEgcXVpY2sgY2hlY2tcclxuXHRcdH0gZWxzZSBpZiAoIGF1cCA9PT0gYnVwICkge1xyXG5cdFx0XHRyZXR1cm4gc2libGluZ0NoZWNrKCBhLCBiICk7XHJcblx0XHR9XHJcblxyXG5cdFx0Ly8gT3RoZXJ3aXNlIHdlIG5lZWQgZnVsbCBsaXN0cyBvZiB0aGVpciBhbmNlc3RvcnMgZm9yIGNvbXBhcmlzb25cclxuXHRcdGN1ciA9IGE7XHJcblx0XHR3aGlsZSAoIChjdXIgPSBjdXIucGFyZW50Tm9kZSkgKSB7XHJcblx0XHRcdGFwLnVuc2hpZnQoIGN1ciApO1xyXG5cdFx0fVxyXG5cdFx0Y3VyID0gYjtcclxuXHRcdHdoaWxlICggKGN1ciA9IGN1ci5wYXJlbnROb2RlKSApIHtcclxuXHRcdFx0YnAudW5zaGlmdCggY3VyICk7XHJcblx0XHR9XHJcblxyXG5cdFx0Ly8gV2FsayBkb3duIHRoZSB0cmVlIGxvb2tpbmcgZm9yIGEgZGlzY3JlcGFuY3lcclxuXHRcdHdoaWxlICggYXBbaV0gPT09IGJwW2ldICkge1xyXG5cdFx0XHRpKys7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIGkgP1xyXG5cdFx0XHQvLyBEbyBhIHNpYmxpbmcgY2hlY2sgaWYgdGhlIG5vZGVzIGhhdmUgYSBjb21tb24gYW5jZXN0b3JcclxuXHRcdFx0c2libGluZ0NoZWNrKCBhcFtpXSwgYnBbaV0gKSA6XHJcblxyXG5cdFx0XHQvLyBPdGhlcndpc2Ugbm9kZXMgaW4gb3VyIGRvY3VtZW50IHNvcnQgZmlyc3RcclxuXHRcdFx0YXBbaV0gPT09IHByZWZlcnJlZERvYyA/IC0xIDpcclxuXHRcdFx0YnBbaV0gPT09IHByZWZlcnJlZERvYyA/IDEgOlxyXG5cdFx0XHQwO1xyXG5cdH07XHJcblxyXG5cdHJldHVybiBkb2M7XHJcbn07XHJcblxyXG5TaXp6bGUubWF0Y2hlcyA9IGZ1bmN0aW9uKCBleHByLCBlbGVtZW50cyApIHtcclxuXHRyZXR1cm4gU2l6emxlKCBleHByLCBudWxsLCBudWxsLCBlbGVtZW50cyApO1xyXG59O1xyXG5cclxuU2l6emxlLm1hdGNoZXNTZWxlY3RvciA9IGZ1bmN0aW9uKCBlbGVtLCBleHByICkge1xyXG5cdC8vIFNldCBkb2N1bWVudCB2YXJzIGlmIG5lZWRlZFxyXG5cdGlmICggKCBlbGVtLm93bmVyRG9jdW1lbnQgfHwgZWxlbSApICE9PSBkb2N1bWVudCApIHtcclxuXHRcdHNldERvY3VtZW50KCBlbGVtICk7XHJcblx0fVxyXG5cclxuXHQvLyBNYWtlIHN1cmUgdGhhdCBhdHRyaWJ1dGUgc2VsZWN0b3JzIGFyZSBxdW90ZWRcclxuXHRleHByID0gZXhwci5yZXBsYWNlKCByYXR0cmlidXRlUXVvdGVzLCBcIj0nJDEnXVwiICk7XHJcblxyXG5cdGlmICggc3VwcG9ydC5tYXRjaGVzU2VsZWN0b3IgJiYgZG9jdW1lbnRJc0hUTUwgJiZcclxuXHRcdCggIXJidWdneU1hdGNoZXMgfHwgIXJidWdneU1hdGNoZXMudGVzdCggZXhwciApICkgJiZcclxuXHRcdCggIXJidWdneVFTQSAgICAgfHwgIXJidWdneVFTQS50ZXN0KCBleHByICkgKSApIHtcclxuXHJcblx0XHR0cnkge1xyXG5cdFx0XHR2YXIgcmV0ID0gbWF0Y2hlcy5jYWxsKCBlbGVtLCBleHByICk7XHJcblxyXG5cdFx0XHQvLyBJRSA5J3MgbWF0Y2hlc1NlbGVjdG9yIHJldHVybnMgZmFsc2Ugb24gZGlzY29ubmVjdGVkIG5vZGVzXHJcblx0XHRcdGlmICggcmV0IHx8IHN1cHBvcnQuZGlzY29ubmVjdGVkTWF0Y2ggfHxcclxuXHRcdFx0XHRcdC8vIEFzIHdlbGwsIGRpc2Nvbm5lY3RlZCBub2RlcyBhcmUgc2FpZCB0byBiZSBpbiBhIGRvY3VtZW50XHJcblx0XHRcdFx0XHQvLyBmcmFnbWVudCBpbiBJRSA5XHJcblx0XHRcdFx0XHRlbGVtLmRvY3VtZW50ICYmIGVsZW0uZG9jdW1lbnQubm9kZVR5cGUgIT09IDExICkge1xyXG5cdFx0XHRcdHJldHVybiByZXQ7XHJcblx0XHRcdH1cclxuXHRcdH0gY2F0Y2ggKGUpIHt9XHJcblx0fVxyXG5cclxuXHRyZXR1cm4gU2l6emxlKCBleHByLCBkb2N1bWVudCwgbnVsbCwgWyBlbGVtIF0gKS5sZW5ndGggPiAwO1xyXG59O1xyXG5cclxuU2l6emxlLmNvbnRhaW5zID0gZnVuY3Rpb24oIGNvbnRleHQsIGVsZW0gKSB7XHJcblx0Ly8gU2V0IGRvY3VtZW50IHZhcnMgaWYgbmVlZGVkXHJcblx0aWYgKCAoIGNvbnRleHQub3duZXJEb2N1bWVudCB8fCBjb250ZXh0ICkgIT09IGRvY3VtZW50ICkge1xyXG5cdFx0c2V0RG9jdW1lbnQoIGNvbnRleHQgKTtcclxuXHR9XHJcblx0cmV0dXJuIGNvbnRhaW5zKCBjb250ZXh0LCBlbGVtICk7XHJcbn07XHJcblxyXG5TaXp6bGUuYXR0ciA9IGZ1bmN0aW9uKCBlbGVtLCBuYW1lICkge1xyXG5cdC8vIFNldCBkb2N1bWVudCB2YXJzIGlmIG5lZWRlZFxyXG5cdGlmICggKCBlbGVtLm93bmVyRG9jdW1lbnQgfHwgZWxlbSApICE9PSBkb2N1bWVudCApIHtcclxuXHRcdHNldERvY3VtZW50KCBlbGVtICk7XHJcblx0fVxyXG5cclxuXHR2YXIgZm4gPSBFeHByLmF0dHJIYW5kbGVbIG5hbWUudG9Mb3dlckNhc2UoKSBdLFxyXG5cdFx0Ly8gRG9uJ3QgZ2V0IGZvb2xlZCBieSBPYmplY3QucHJvdG90eXBlIHByb3BlcnRpZXMgKGpRdWVyeSAjMTM4MDcpXHJcblx0XHR2YWwgPSBmbiAmJiBoYXNPd24uY2FsbCggRXhwci5hdHRySGFuZGxlLCBuYW1lLnRvTG93ZXJDYXNlKCkgKSA/XHJcblx0XHRcdGZuKCBlbGVtLCBuYW1lLCAhZG9jdW1lbnRJc0hUTUwgKSA6XHJcblx0XHRcdHVuZGVmaW5lZDtcclxuXHJcblx0cmV0dXJuIHZhbCAhPT0gdW5kZWZpbmVkID9cclxuXHRcdHZhbCA6XHJcblx0XHRzdXBwb3J0LmF0dHJpYnV0ZXMgfHwgIWRvY3VtZW50SXNIVE1MID9cclxuXHRcdFx0ZWxlbS5nZXRBdHRyaWJ1dGUoIG5hbWUgKSA6XHJcblx0XHRcdCh2YWwgPSBlbGVtLmdldEF0dHJpYnV0ZU5vZGUobmFtZSkpICYmIHZhbC5zcGVjaWZpZWQgP1xyXG5cdFx0XHRcdHZhbC52YWx1ZSA6XHJcblx0XHRcdFx0bnVsbDtcclxufTtcclxuXHJcblNpenpsZS5lcnJvciA9IGZ1bmN0aW9uKCBtc2cgKSB7XHJcblx0dGhyb3cgbmV3IEVycm9yKCBcIlN5bnRheCBlcnJvciwgdW5yZWNvZ25pemVkIGV4cHJlc3Npb246IFwiICsgbXNnICk7XHJcbn07XHJcblxyXG4vKipcclxuICogRG9jdW1lbnQgc29ydGluZyBhbmQgcmVtb3ZpbmcgZHVwbGljYXRlc1xyXG4gKiBAcGFyYW0ge0FycmF5TGlrZX0gcmVzdWx0c1xyXG4gKi9cclxuU2l6emxlLnVuaXF1ZVNvcnQgPSBmdW5jdGlvbiggcmVzdWx0cyApIHtcclxuXHR2YXIgZWxlbSxcclxuXHRcdGR1cGxpY2F0ZXMgPSBbXSxcclxuXHRcdGogPSAwLFxyXG5cdFx0aSA9IDA7XHJcblxyXG5cdC8vIFVubGVzcyB3ZSAqa25vdyogd2UgY2FuIGRldGVjdCBkdXBsaWNhdGVzLCBhc3N1bWUgdGhlaXIgcHJlc2VuY2VcclxuXHRoYXNEdXBsaWNhdGUgPSAhc3VwcG9ydC5kZXRlY3REdXBsaWNhdGVzO1xyXG5cdHNvcnRJbnB1dCA9ICFzdXBwb3J0LnNvcnRTdGFibGUgJiYgcmVzdWx0cy5zbGljZSggMCApO1xyXG5cdHJlc3VsdHMuc29ydCggc29ydE9yZGVyICk7XHJcblxyXG5cdGlmICggaGFzRHVwbGljYXRlICkge1xyXG5cdFx0d2hpbGUgKCAoZWxlbSA9IHJlc3VsdHNbaSsrXSkgKSB7XHJcblx0XHRcdGlmICggZWxlbSA9PT0gcmVzdWx0c1sgaSBdICkge1xyXG5cdFx0XHRcdGogPSBkdXBsaWNhdGVzLnB1c2goIGkgKTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdFx0d2hpbGUgKCBqLS0gKSB7XHJcblx0XHRcdHJlc3VsdHMuc3BsaWNlKCBkdXBsaWNhdGVzWyBqIF0sIDEgKTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdC8vIENsZWFyIGlucHV0IGFmdGVyIHNvcnRpbmcgdG8gcmVsZWFzZSBvYmplY3RzXHJcblx0Ly8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9qcXVlcnkvc2l6emxlL3B1bGwvMjI1XHJcblx0c29ydElucHV0ID0gbnVsbDtcclxuXHJcblx0cmV0dXJuIHJlc3VsdHM7XHJcbn07XHJcblxyXG4vKipcclxuICogVXRpbGl0eSBmdW5jdGlvbiBmb3IgcmV0cmlldmluZyB0aGUgdGV4dCB2YWx1ZSBvZiBhbiBhcnJheSBvZiBET00gbm9kZXNcclxuICogQHBhcmFtIHtBcnJheXxFbGVtZW50fSBlbGVtXHJcbiAqL1xyXG5nZXRUZXh0ID0gU2l6emxlLmdldFRleHQgPSBmdW5jdGlvbiggZWxlbSApIHtcclxuXHR2YXIgbm9kZSxcclxuXHRcdHJldCA9IFwiXCIsXHJcblx0XHRpID0gMCxcclxuXHRcdG5vZGVUeXBlID0gZWxlbS5ub2RlVHlwZTtcclxuXHJcblx0aWYgKCAhbm9kZVR5cGUgKSB7XHJcblx0XHQvLyBJZiBubyBub2RlVHlwZSwgdGhpcyBpcyBleHBlY3RlZCB0byBiZSBhbiBhcnJheVxyXG5cdFx0d2hpbGUgKCAobm9kZSA9IGVsZW1baSsrXSkgKSB7XHJcblx0XHRcdC8vIERvIG5vdCB0cmF2ZXJzZSBjb21tZW50IG5vZGVzXHJcblx0XHRcdHJldCArPSBnZXRUZXh0KCBub2RlICk7XHJcblx0XHR9XHJcblx0fSBlbHNlIGlmICggbm9kZVR5cGUgPT09IDEgfHwgbm9kZVR5cGUgPT09IDkgfHwgbm9kZVR5cGUgPT09IDExICkge1xyXG5cdFx0Ly8gVXNlIHRleHRDb250ZW50IGZvciBlbGVtZW50c1xyXG5cdFx0Ly8gaW5uZXJUZXh0IHVzYWdlIHJlbW92ZWQgZm9yIGNvbnNpc3RlbmN5IG9mIG5ldyBsaW5lcyAoalF1ZXJ5ICMxMTE1MylcclxuXHRcdGlmICggdHlwZW9mIGVsZW0udGV4dENvbnRlbnQgPT09IFwic3RyaW5nXCIgKSB7XHJcblx0XHRcdHJldHVybiBlbGVtLnRleHRDb250ZW50O1xyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0Ly8gVHJhdmVyc2UgaXRzIGNoaWxkcmVuXHJcblx0XHRcdGZvciAoIGVsZW0gPSBlbGVtLmZpcnN0Q2hpbGQ7IGVsZW07IGVsZW0gPSBlbGVtLm5leHRTaWJsaW5nICkge1xyXG5cdFx0XHRcdHJldCArPSBnZXRUZXh0KCBlbGVtICk7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHR9IGVsc2UgaWYgKCBub2RlVHlwZSA9PT0gMyB8fCBub2RlVHlwZSA9PT0gNCApIHtcclxuXHRcdHJldHVybiBlbGVtLm5vZGVWYWx1ZTtcclxuXHR9XHJcblx0Ly8gRG8gbm90IGluY2x1ZGUgY29tbWVudCBvciBwcm9jZXNzaW5nIGluc3RydWN0aW9uIG5vZGVzXHJcblxyXG5cdHJldHVybiByZXQ7XHJcbn07XHJcblxyXG5FeHByID0gU2l6emxlLnNlbGVjdG9ycyA9IHtcclxuXHJcblx0Ly8gQ2FuIGJlIGFkanVzdGVkIGJ5IHRoZSB1c2VyXHJcblx0Y2FjaGVMZW5ndGg6IDUwLFxyXG5cclxuXHRjcmVhdGVQc2V1ZG86IG1hcmtGdW5jdGlvbixcclxuXHJcblx0bWF0Y2g6IG1hdGNoRXhwcixcclxuXHJcblx0YXR0ckhhbmRsZToge30sXHJcblxyXG5cdGZpbmQ6IHt9LFxyXG5cclxuXHRyZWxhdGl2ZToge1xyXG5cdFx0XCI+XCI6IHsgZGlyOiBcInBhcmVudE5vZGVcIiwgZmlyc3Q6IHRydWUgfSxcclxuXHRcdFwiIFwiOiB7IGRpcjogXCJwYXJlbnROb2RlXCIgfSxcclxuXHRcdFwiK1wiOiB7IGRpcjogXCJwcmV2aW91c1NpYmxpbmdcIiwgZmlyc3Q6IHRydWUgfSxcclxuXHRcdFwiflwiOiB7IGRpcjogXCJwcmV2aW91c1NpYmxpbmdcIiB9XHJcblx0fSxcclxuXHJcblx0cHJlRmlsdGVyOiB7XHJcblx0XHRcIkFUVFJcIjogZnVuY3Rpb24oIG1hdGNoICkge1xyXG5cdFx0XHRtYXRjaFsxXSA9IG1hdGNoWzFdLnJlcGxhY2UoIHJ1bmVzY2FwZSwgZnVuZXNjYXBlICk7XHJcblxyXG5cdFx0XHQvLyBNb3ZlIHRoZSBnaXZlbiB2YWx1ZSB0byBtYXRjaFszXSB3aGV0aGVyIHF1b3RlZCBvciB1bnF1b3RlZFxyXG5cdFx0XHRtYXRjaFszXSA9ICggbWF0Y2hbM10gfHwgbWF0Y2hbNF0gfHwgbWF0Y2hbNV0gfHwgXCJcIiApLnJlcGxhY2UoIHJ1bmVzY2FwZSwgZnVuZXNjYXBlICk7XHJcblxyXG5cdFx0XHRpZiAoIG1hdGNoWzJdID09PSBcIn49XCIgKSB7XHJcblx0XHRcdFx0bWF0Y2hbM10gPSBcIiBcIiArIG1hdGNoWzNdICsgXCIgXCI7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdHJldHVybiBtYXRjaC5zbGljZSggMCwgNCApO1xyXG5cdFx0fSxcclxuXHJcblx0XHRcIkNISUxEXCI6IGZ1bmN0aW9uKCBtYXRjaCApIHtcclxuXHRcdFx0LyogbWF0Y2hlcyBmcm9tIG1hdGNoRXhwcltcIkNISUxEXCJdXHJcblx0XHRcdFx0MSB0eXBlIChvbmx5fG50aHwuLi4pXHJcblx0XHRcdFx0MiB3aGF0IChjaGlsZHxvZi10eXBlKVxyXG5cdFx0XHRcdDMgYXJndW1lbnQgKGV2ZW58b2RkfFxcZCp8XFxkKm4oWystXVxcZCspP3wuLi4pXHJcblx0XHRcdFx0NCB4bi1jb21wb25lbnQgb2YgeG4reSBhcmd1bWVudCAoWystXT9cXGQqbnwpXHJcblx0XHRcdFx0NSBzaWduIG9mIHhuLWNvbXBvbmVudFxyXG5cdFx0XHRcdDYgeCBvZiB4bi1jb21wb25lbnRcclxuXHRcdFx0XHQ3IHNpZ24gb2YgeS1jb21wb25lbnRcclxuXHRcdFx0XHQ4IHkgb2YgeS1jb21wb25lbnRcclxuXHRcdFx0Ki9cclxuXHRcdFx0bWF0Y2hbMV0gPSBtYXRjaFsxXS50b0xvd2VyQ2FzZSgpO1xyXG5cclxuXHRcdFx0aWYgKCBtYXRjaFsxXS5zbGljZSggMCwgMyApID09PSBcIm50aFwiICkge1xyXG5cdFx0XHRcdC8vIG50aC0qIHJlcXVpcmVzIGFyZ3VtZW50XHJcblx0XHRcdFx0aWYgKCAhbWF0Y2hbM10gKSB7XHJcblx0XHRcdFx0XHRTaXp6bGUuZXJyb3IoIG1hdGNoWzBdICk7XHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHQvLyBudW1lcmljIHggYW5kIHkgcGFyYW1ldGVycyBmb3IgRXhwci5maWx0ZXIuQ0hJTERcclxuXHRcdFx0XHQvLyByZW1lbWJlciB0aGF0IGZhbHNlL3RydWUgY2FzdCByZXNwZWN0aXZlbHkgdG8gMC8xXHJcblx0XHRcdFx0bWF0Y2hbNF0gPSArKCBtYXRjaFs0XSA/IG1hdGNoWzVdICsgKG1hdGNoWzZdIHx8IDEpIDogMiAqICggbWF0Y2hbM10gPT09IFwiZXZlblwiIHx8IG1hdGNoWzNdID09PSBcIm9kZFwiICkgKTtcclxuXHRcdFx0XHRtYXRjaFs1XSA9ICsoICggbWF0Y2hbN10gKyBtYXRjaFs4XSApIHx8IG1hdGNoWzNdID09PSBcIm9kZFwiICk7XHJcblxyXG5cdFx0XHQvLyBvdGhlciB0eXBlcyBwcm9oaWJpdCBhcmd1bWVudHNcclxuXHRcdFx0fSBlbHNlIGlmICggbWF0Y2hbM10gKSB7XHJcblx0XHRcdFx0U2l6emxlLmVycm9yKCBtYXRjaFswXSApO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRyZXR1cm4gbWF0Y2g7XHJcblx0XHR9LFxyXG5cclxuXHRcdFwiUFNFVURPXCI6IGZ1bmN0aW9uKCBtYXRjaCApIHtcclxuXHRcdFx0dmFyIGV4Y2VzcyxcclxuXHRcdFx0XHR1bnF1b3RlZCA9ICFtYXRjaFs2XSAmJiBtYXRjaFsyXTtcclxuXHJcblx0XHRcdGlmICggbWF0Y2hFeHByW1wiQ0hJTERcIl0udGVzdCggbWF0Y2hbMF0gKSApIHtcclxuXHRcdFx0XHRyZXR1cm4gbnVsbDtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0Ly8gQWNjZXB0IHF1b3RlZCBhcmd1bWVudHMgYXMtaXNcclxuXHRcdFx0aWYgKCBtYXRjaFszXSApIHtcclxuXHRcdFx0XHRtYXRjaFsyXSA9IG1hdGNoWzRdIHx8IG1hdGNoWzVdIHx8IFwiXCI7XHJcblxyXG5cdFx0XHQvLyBTdHJpcCBleGNlc3MgY2hhcmFjdGVycyBmcm9tIHVucXVvdGVkIGFyZ3VtZW50c1xyXG5cdFx0XHR9IGVsc2UgaWYgKCB1bnF1b3RlZCAmJiBycHNldWRvLnRlc3QoIHVucXVvdGVkICkgJiZcclxuXHRcdFx0XHQvLyBHZXQgZXhjZXNzIGZyb20gdG9rZW5pemUgKHJlY3Vyc2l2ZWx5KVxyXG5cdFx0XHRcdChleGNlc3MgPSB0b2tlbml6ZSggdW5xdW90ZWQsIHRydWUgKSkgJiZcclxuXHRcdFx0XHQvLyBhZHZhbmNlIHRvIHRoZSBuZXh0IGNsb3NpbmcgcGFyZW50aGVzaXNcclxuXHRcdFx0XHQoZXhjZXNzID0gdW5xdW90ZWQuaW5kZXhPZiggXCIpXCIsIHVucXVvdGVkLmxlbmd0aCAtIGV4Y2VzcyApIC0gdW5xdW90ZWQubGVuZ3RoKSApIHtcclxuXHJcblx0XHRcdFx0Ly8gZXhjZXNzIGlzIGEgbmVnYXRpdmUgaW5kZXhcclxuXHRcdFx0XHRtYXRjaFswXSA9IG1hdGNoWzBdLnNsaWNlKCAwLCBleGNlc3MgKTtcclxuXHRcdFx0XHRtYXRjaFsyXSA9IHVucXVvdGVkLnNsaWNlKCAwLCBleGNlc3MgKTtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0Ly8gUmV0dXJuIG9ubHkgY2FwdHVyZXMgbmVlZGVkIGJ5IHRoZSBwc2V1ZG8gZmlsdGVyIG1ldGhvZCAodHlwZSBhbmQgYXJndW1lbnQpXHJcblx0XHRcdHJldHVybiBtYXRjaC5zbGljZSggMCwgMyApO1xyXG5cdFx0fVxyXG5cdH0sXHJcblxyXG5cdGZpbHRlcjoge1xyXG5cclxuXHRcdFwiVEFHXCI6IGZ1bmN0aW9uKCBub2RlTmFtZVNlbGVjdG9yICkge1xyXG5cdFx0XHR2YXIgbm9kZU5hbWUgPSBub2RlTmFtZVNlbGVjdG9yLnJlcGxhY2UoIHJ1bmVzY2FwZSwgZnVuZXNjYXBlICkudG9Mb3dlckNhc2UoKTtcclxuXHRcdFx0cmV0dXJuIG5vZGVOYW1lU2VsZWN0b3IgPT09IFwiKlwiID9cclxuXHRcdFx0XHRmdW5jdGlvbigpIHsgcmV0dXJuIHRydWU7IH0gOlxyXG5cdFx0XHRcdGZ1bmN0aW9uKCBlbGVtICkge1xyXG5cdFx0XHRcdFx0cmV0dXJuIGVsZW0ubm9kZU5hbWUgJiYgZWxlbS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpID09PSBub2RlTmFtZTtcclxuXHRcdFx0XHR9O1xyXG5cdFx0fSxcclxuXHJcblx0XHRcIkNMQVNTXCI6IGZ1bmN0aW9uKCBjbGFzc05hbWUgKSB7XHJcblx0XHRcdHZhciBwYXR0ZXJuID0gY2xhc3NDYWNoZVsgY2xhc3NOYW1lICsgXCIgXCIgXTtcclxuXHJcblx0XHRcdHJldHVybiBwYXR0ZXJuIHx8XHJcblx0XHRcdFx0KHBhdHRlcm4gPSBuZXcgUmVnRXhwKCBcIihefFwiICsgd2hpdGVzcGFjZSArIFwiKVwiICsgY2xhc3NOYW1lICsgXCIoXCIgKyB3aGl0ZXNwYWNlICsgXCJ8JClcIiApKSAmJlxyXG5cdFx0XHRcdGNsYXNzQ2FjaGUoIGNsYXNzTmFtZSwgZnVuY3Rpb24oIGVsZW0gKSB7XHJcblx0XHRcdFx0XHRyZXR1cm4gcGF0dGVybi50ZXN0KCB0eXBlb2YgZWxlbS5jbGFzc05hbWUgPT09IFwic3RyaW5nXCIgJiYgZWxlbS5jbGFzc05hbWUgfHwgdHlwZW9mIGVsZW0uZ2V0QXR0cmlidXRlICE9PSBcInVuZGVmaW5lZFwiICYmIGVsZW0uZ2V0QXR0cmlidXRlKFwiY2xhc3NcIikgfHwgXCJcIiApO1xyXG5cdFx0XHRcdH0pO1xyXG5cdFx0fSxcclxuXHJcblx0XHRcIkFUVFJcIjogZnVuY3Rpb24oIG5hbWUsIG9wZXJhdG9yLCBjaGVjayApIHtcclxuXHRcdFx0cmV0dXJuIGZ1bmN0aW9uKCBlbGVtICkge1xyXG5cdFx0XHRcdHZhciByZXN1bHQgPSBTaXp6bGUuYXR0ciggZWxlbSwgbmFtZSApO1xyXG5cclxuXHRcdFx0XHRpZiAoIHJlc3VsdCA9PSBudWxsICkge1xyXG5cdFx0XHRcdFx0cmV0dXJuIG9wZXJhdG9yID09PSBcIiE9XCI7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdGlmICggIW9wZXJhdG9yICkge1xyXG5cdFx0XHRcdFx0cmV0dXJuIHRydWU7XHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRyZXN1bHQgKz0gXCJcIjtcclxuXHJcblx0XHRcdFx0cmV0dXJuIG9wZXJhdG9yID09PSBcIj1cIiA/IHJlc3VsdCA9PT0gY2hlY2sgOlxyXG5cdFx0XHRcdFx0b3BlcmF0b3IgPT09IFwiIT1cIiA/IHJlc3VsdCAhPT0gY2hlY2sgOlxyXG5cdFx0XHRcdFx0b3BlcmF0b3IgPT09IFwiXj1cIiA/IGNoZWNrICYmIHJlc3VsdC5pbmRleE9mKCBjaGVjayApID09PSAwIDpcclxuXHRcdFx0XHRcdG9wZXJhdG9yID09PSBcIio9XCIgPyBjaGVjayAmJiByZXN1bHQuaW5kZXhPZiggY2hlY2sgKSA+IC0xIDpcclxuXHRcdFx0XHRcdG9wZXJhdG9yID09PSBcIiQ9XCIgPyBjaGVjayAmJiByZXN1bHQuc2xpY2UoIC1jaGVjay5sZW5ndGggKSA9PT0gY2hlY2sgOlxyXG5cdFx0XHRcdFx0b3BlcmF0b3IgPT09IFwifj1cIiA/ICggXCIgXCIgKyByZXN1bHQucmVwbGFjZSggcndoaXRlc3BhY2UsIFwiIFwiICkgKyBcIiBcIiApLmluZGV4T2YoIGNoZWNrICkgPiAtMSA6XHJcblx0XHRcdFx0XHRvcGVyYXRvciA9PT0gXCJ8PVwiID8gcmVzdWx0ID09PSBjaGVjayB8fCByZXN1bHQuc2xpY2UoIDAsIGNoZWNrLmxlbmd0aCArIDEgKSA9PT0gY2hlY2sgKyBcIi1cIiA6XHJcblx0XHRcdFx0XHRmYWxzZTtcclxuXHRcdFx0fTtcclxuXHRcdH0sXHJcblxyXG5cdFx0XCJDSElMRFwiOiBmdW5jdGlvbiggdHlwZSwgd2hhdCwgYXJndW1lbnQsIGZpcnN0LCBsYXN0ICkge1xyXG5cdFx0XHR2YXIgc2ltcGxlID0gdHlwZS5zbGljZSggMCwgMyApICE9PSBcIm50aFwiLFxyXG5cdFx0XHRcdGZvcndhcmQgPSB0eXBlLnNsaWNlKCAtNCApICE9PSBcImxhc3RcIixcclxuXHRcdFx0XHRvZlR5cGUgPSB3aGF0ID09PSBcIm9mLXR5cGVcIjtcclxuXHJcblx0XHRcdHJldHVybiBmaXJzdCA9PT0gMSAmJiBsYXN0ID09PSAwID9cclxuXHJcblx0XHRcdFx0Ly8gU2hvcnRjdXQgZm9yIDpudGgtKihuKVxyXG5cdFx0XHRcdGZ1bmN0aW9uKCBlbGVtICkge1xyXG5cdFx0XHRcdFx0cmV0dXJuICEhZWxlbS5wYXJlbnROb2RlO1xyXG5cdFx0XHRcdH0gOlxyXG5cclxuXHRcdFx0XHRmdW5jdGlvbiggZWxlbSwgY29udGV4dCwgeG1sICkge1xyXG5cdFx0XHRcdFx0dmFyIGNhY2hlLCBvdXRlckNhY2hlLCBub2RlLCBkaWZmLCBub2RlSW5kZXgsIHN0YXJ0LFxyXG5cdFx0XHRcdFx0XHRkaXIgPSBzaW1wbGUgIT09IGZvcndhcmQgPyBcIm5leHRTaWJsaW5nXCIgOiBcInByZXZpb3VzU2libGluZ1wiLFxyXG5cdFx0XHRcdFx0XHRwYXJlbnQgPSBlbGVtLnBhcmVudE5vZGUsXHJcblx0XHRcdFx0XHRcdG5hbWUgPSBvZlR5cGUgJiYgZWxlbS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpLFxyXG5cdFx0XHRcdFx0XHR1c2VDYWNoZSA9ICF4bWwgJiYgIW9mVHlwZTtcclxuXHJcblx0XHRcdFx0XHRpZiAoIHBhcmVudCApIHtcclxuXHJcblx0XHRcdFx0XHRcdC8vIDooZmlyc3R8bGFzdHxvbmx5KS0oY2hpbGR8b2YtdHlwZSlcclxuXHRcdFx0XHRcdFx0aWYgKCBzaW1wbGUgKSB7XHJcblx0XHRcdFx0XHRcdFx0d2hpbGUgKCBkaXIgKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRub2RlID0gZWxlbTtcclxuXHRcdFx0XHRcdFx0XHRcdHdoaWxlICggKG5vZGUgPSBub2RlWyBkaXIgXSkgKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdGlmICggb2ZUeXBlID8gbm9kZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpID09PSBuYW1lIDogbm9kZS5ub2RlVHlwZSA9PT0gMSApIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gZmFsc2U7XHJcblx0XHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHRcdC8vIFJldmVyc2UgZGlyZWN0aW9uIGZvciA6b25seS0qIChpZiB3ZSBoYXZlbid0IHlldCBkb25lIHNvKVxyXG5cdFx0XHRcdFx0XHRcdFx0c3RhcnQgPSBkaXIgPSB0eXBlID09PSBcIm9ubHlcIiAmJiAhc3RhcnQgJiYgXCJuZXh0U2libGluZ1wiO1xyXG5cdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdFx0c3RhcnQgPSBbIGZvcndhcmQgPyBwYXJlbnQuZmlyc3RDaGlsZCA6IHBhcmVudC5sYXN0Q2hpbGQgXTtcclxuXHJcblx0XHRcdFx0XHRcdC8vIG5vbi14bWwgOm50aC1jaGlsZCguLi4pIHN0b3JlcyBjYWNoZSBkYXRhIG9uIGBwYXJlbnRgXHJcblx0XHRcdFx0XHRcdGlmICggZm9yd2FyZCAmJiB1c2VDYWNoZSApIHtcclxuXHRcdFx0XHRcdFx0XHQvLyBTZWVrIGBlbGVtYCBmcm9tIGEgcHJldmlvdXNseS1jYWNoZWQgaW5kZXhcclxuXHRcdFx0XHRcdFx0XHRvdXRlckNhY2hlID0gcGFyZW50WyBleHBhbmRvIF0gfHwgKHBhcmVudFsgZXhwYW5kbyBdID0ge30pO1xyXG5cdFx0XHRcdFx0XHRcdGNhY2hlID0gb3V0ZXJDYWNoZVsgdHlwZSBdIHx8IFtdO1xyXG5cdFx0XHRcdFx0XHRcdG5vZGVJbmRleCA9IGNhY2hlWzBdID09PSBkaXJydW5zICYmIGNhY2hlWzFdO1xyXG5cdFx0XHRcdFx0XHRcdGRpZmYgPSBjYWNoZVswXSA9PT0gZGlycnVucyAmJiBjYWNoZVsyXTtcclxuXHRcdFx0XHRcdFx0XHRub2RlID0gbm9kZUluZGV4ICYmIHBhcmVudC5jaGlsZE5vZGVzWyBub2RlSW5kZXggXTtcclxuXHJcblx0XHRcdFx0XHRcdFx0d2hpbGUgKCAobm9kZSA9ICsrbm9kZUluZGV4ICYmIG5vZGUgJiYgbm9kZVsgZGlyIF0gfHxcclxuXHJcblx0XHRcdFx0XHRcdFx0XHQvLyBGYWxsYmFjayB0byBzZWVraW5nIGBlbGVtYCBmcm9tIHRoZSBzdGFydFxyXG5cdFx0XHRcdFx0XHRcdFx0KGRpZmYgPSBub2RlSW5kZXggPSAwKSB8fCBzdGFydC5wb3AoKSkgKSB7XHJcblxyXG5cdFx0XHRcdFx0XHRcdFx0Ly8gV2hlbiBmb3VuZCwgY2FjaGUgaW5kZXhlcyBvbiBgcGFyZW50YCBhbmQgYnJlYWtcclxuXHRcdFx0XHRcdFx0XHRcdGlmICggbm9kZS5ub2RlVHlwZSA9PT0gMSAmJiArK2RpZmYgJiYgbm9kZSA9PT0gZWxlbSApIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0b3V0ZXJDYWNoZVsgdHlwZSBdID0gWyBkaXJydW5zLCBub2RlSW5kZXgsIGRpZmYgXTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdFx0Ly8gVXNlIHByZXZpb3VzbHktY2FjaGVkIGVsZW1lbnQgaW5kZXggaWYgYXZhaWxhYmxlXHJcblx0XHRcdFx0XHRcdH0gZWxzZSBpZiAoIHVzZUNhY2hlICYmIChjYWNoZSA9IChlbGVtWyBleHBhbmRvIF0gfHwgKGVsZW1bIGV4cGFuZG8gXSA9IHt9KSlbIHR5cGUgXSkgJiYgY2FjaGVbMF0gPT09IGRpcnJ1bnMgKSB7XHJcblx0XHRcdFx0XHRcdFx0ZGlmZiA9IGNhY2hlWzFdO1xyXG5cclxuXHRcdFx0XHRcdFx0Ly8geG1sIDpudGgtY2hpbGQoLi4uKSBvciA6bnRoLWxhc3QtY2hpbGQoLi4uKSBvciA6bnRoKC1sYXN0KT8tb2YtdHlwZSguLi4pXHJcblx0XHRcdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRcdFx0Ly8gVXNlIHRoZSBzYW1lIGxvb3AgYXMgYWJvdmUgdG8gc2VlayBgZWxlbWAgZnJvbSB0aGUgc3RhcnRcclxuXHRcdFx0XHRcdFx0XHR3aGlsZSAoIChub2RlID0gKytub2RlSW5kZXggJiYgbm9kZSAmJiBub2RlWyBkaXIgXSB8fFxyXG5cdFx0XHRcdFx0XHRcdFx0KGRpZmYgPSBub2RlSW5kZXggPSAwKSB8fCBzdGFydC5wb3AoKSkgKSB7XHJcblxyXG5cdFx0XHRcdFx0XHRcdFx0aWYgKCAoIG9mVHlwZSA/IG5vZGUubm9kZU5hbWUudG9Mb3dlckNhc2UoKSA9PT0gbmFtZSA6IG5vZGUubm9kZVR5cGUgPT09IDEgKSAmJiArK2RpZmYgKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdC8vIENhY2hlIHRoZSBpbmRleCBvZiBlYWNoIGVuY291bnRlcmVkIGVsZW1lbnRcclxuXHRcdFx0XHRcdFx0XHRcdFx0aWYgKCB1c2VDYWNoZSApIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQobm9kZVsgZXhwYW5kbyBdIHx8IChub2RlWyBleHBhbmRvIF0gPSB7fSkpWyB0eXBlIF0gPSBbIGRpcnJ1bnMsIGRpZmYgXTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdFx0XHRcdFx0aWYgKCBub2RlID09PSBlbGVtICkge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0XHQvLyBJbmNvcnBvcmF0ZSB0aGUgb2Zmc2V0LCB0aGVuIGNoZWNrIGFnYWluc3QgY3ljbGUgc2l6ZVxyXG5cdFx0XHRcdFx0XHRkaWZmIC09IGxhc3Q7XHJcblx0XHRcdFx0XHRcdHJldHVybiBkaWZmID09PSBmaXJzdCB8fCAoIGRpZmYgJSBmaXJzdCA9PT0gMCAmJiBkaWZmIC8gZmlyc3QgPj0gMCApO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH07XHJcblx0XHR9LFxyXG5cclxuXHRcdFwiUFNFVURPXCI6IGZ1bmN0aW9uKCBwc2V1ZG8sIGFyZ3VtZW50ICkge1xyXG5cdFx0XHQvLyBwc2V1ZG8tY2xhc3MgbmFtZXMgYXJlIGNhc2UtaW5zZW5zaXRpdmVcclxuXHRcdFx0Ly8gaHR0cDovL3d3dy53My5vcmcvVFIvc2VsZWN0b3JzLyNwc2V1ZG8tY2xhc3Nlc1xyXG5cdFx0XHQvLyBQcmlvcml0aXplIGJ5IGNhc2Ugc2Vuc2l0aXZpdHkgaW4gY2FzZSBjdXN0b20gcHNldWRvcyBhcmUgYWRkZWQgd2l0aCB1cHBlcmNhc2UgbGV0dGVyc1xyXG5cdFx0XHQvLyBSZW1lbWJlciB0aGF0IHNldEZpbHRlcnMgaW5oZXJpdHMgZnJvbSBwc2V1ZG9zXHJcblx0XHRcdHZhciBhcmdzLFxyXG5cdFx0XHRcdGZuID0gRXhwci5wc2V1ZG9zWyBwc2V1ZG8gXSB8fCBFeHByLnNldEZpbHRlcnNbIHBzZXVkby50b0xvd2VyQ2FzZSgpIF0gfHxcclxuXHRcdFx0XHRcdFNpenpsZS5lcnJvciggXCJ1bnN1cHBvcnRlZCBwc2V1ZG86IFwiICsgcHNldWRvICk7XHJcblxyXG5cdFx0XHQvLyBUaGUgdXNlciBtYXkgdXNlIGNyZWF0ZVBzZXVkbyB0byBpbmRpY2F0ZSB0aGF0XHJcblx0XHRcdC8vIGFyZ3VtZW50cyBhcmUgbmVlZGVkIHRvIGNyZWF0ZSB0aGUgZmlsdGVyIGZ1bmN0aW9uXHJcblx0XHRcdC8vIGp1c3QgYXMgU2l6emxlIGRvZXNcclxuXHRcdFx0aWYgKCBmblsgZXhwYW5kbyBdICkge1xyXG5cdFx0XHRcdHJldHVybiBmbiggYXJndW1lbnQgKTtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0Ly8gQnV0IG1haW50YWluIHN1cHBvcnQgZm9yIG9sZCBzaWduYXR1cmVzXHJcblx0XHRcdGlmICggZm4ubGVuZ3RoID4gMSApIHtcclxuXHRcdFx0XHRhcmdzID0gWyBwc2V1ZG8sIHBzZXVkbywgXCJcIiwgYXJndW1lbnQgXTtcclxuXHRcdFx0XHRyZXR1cm4gRXhwci5zZXRGaWx0ZXJzLmhhc093blByb3BlcnR5KCBwc2V1ZG8udG9Mb3dlckNhc2UoKSApID9cclxuXHRcdFx0XHRcdG1hcmtGdW5jdGlvbihmdW5jdGlvbiggc2VlZCwgbWF0Y2hlcyApIHtcclxuXHRcdFx0XHRcdFx0dmFyIGlkeCxcclxuXHRcdFx0XHRcdFx0XHRtYXRjaGVkID0gZm4oIHNlZWQsIGFyZ3VtZW50ICksXHJcblx0XHRcdFx0XHRcdFx0aSA9IG1hdGNoZWQubGVuZ3RoO1xyXG5cdFx0XHRcdFx0XHR3aGlsZSAoIGktLSApIHtcclxuXHRcdFx0XHRcdFx0XHRpZHggPSBpbmRleE9mKCBzZWVkLCBtYXRjaGVkW2ldICk7XHJcblx0XHRcdFx0XHRcdFx0c2VlZFsgaWR4IF0gPSAhKCBtYXRjaGVzWyBpZHggXSA9IG1hdGNoZWRbaV0gKTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0fSkgOlxyXG5cdFx0XHRcdFx0ZnVuY3Rpb24oIGVsZW0gKSB7XHJcblx0XHRcdFx0XHRcdHJldHVybiBmbiggZWxlbSwgMCwgYXJncyApO1xyXG5cdFx0XHRcdFx0fTtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0cmV0dXJuIGZuO1xyXG5cdFx0fVxyXG5cdH0sXHJcblxyXG5cdHBzZXVkb3M6IHtcclxuXHRcdC8vIFBvdGVudGlhbGx5IGNvbXBsZXggcHNldWRvc1xyXG5cdFx0XCJub3RcIjogbWFya0Z1bmN0aW9uKGZ1bmN0aW9uKCBzZWxlY3RvciApIHtcclxuXHRcdFx0Ly8gVHJpbSB0aGUgc2VsZWN0b3IgcGFzc2VkIHRvIGNvbXBpbGVcclxuXHRcdFx0Ly8gdG8gYXZvaWQgdHJlYXRpbmcgbGVhZGluZyBhbmQgdHJhaWxpbmdcclxuXHRcdFx0Ly8gc3BhY2VzIGFzIGNvbWJpbmF0b3JzXHJcblx0XHRcdHZhciBpbnB1dCA9IFtdLFxyXG5cdFx0XHRcdHJlc3VsdHMgPSBbXSxcclxuXHRcdFx0XHRtYXRjaGVyID0gY29tcGlsZSggc2VsZWN0b3IucmVwbGFjZSggcnRyaW0sIFwiJDFcIiApICk7XHJcblxyXG5cdFx0XHRyZXR1cm4gbWF0Y2hlclsgZXhwYW5kbyBdID9cclxuXHRcdFx0XHRtYXJrRnVuY3Rpb24oZnVuY3Rpb24oIHNlZWQsIG1hdGNoZXMsIGNvbnRleHQsIHhtbCApIHtcclxuXHRcdFx0XHRcdHZhciBlbGVtLFxyXG5cdFx0XHRcdFx0XHR1bm1hdGNoZWQgPSBtYXRjaGVyKCBzZWVkLCBudWxsLCB4bWwsIFtdICksXHJcblx0XHRcdFx0XHRcdGkgPSBzZWVkLmxlbmd0aDtcclxuXHJcblx0XHRcdFx0XHQvLyBNYXRjaCBlbGVtZW50cyB1bm1hdGNoZWQgYnkgYG1hdGNoZXJgXHJcblx0XHRcdFx0XHR3aGlsZSAoIGktLSApIHtcclxuXHRcdFx0XHRcdFx0aWYgKCAoZWxlbSA9IHVubWF0Y2hlZFtpXSkgKSB7XHJcblx0XHRcdFx0XHRcdFx0c2VlZFtpXSA9ICEobWF0Y2hlc1tpXSA9IGVsZW0pO1xyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fSkgOlxyXG5cdFx0XHRcdGZ1bmN0aW9uKCBlbGVtLCBjb250ZXh0LCB4bWwgKSB7XHJcblx0XHRcdFx0XHRpbnB1dFswXSA9IGVsZW07XHJcblx0XHRcdFx0XHRtYXRjaGVyKCBpbnB1dCwgbnVsbCwgeG1sLCByZXN1bHRzICk7XHJcblx0XHRcdFx0XHQvLyBEb24ndCBrZWVwIHRoZSBlbGVtZW50IChpc3N1ZSAjMjk5KVxyXG5cdFx0XHRcdFx0aW5wdXRbMF0gPSBudWxsO1xyXG5cdFx0XHRcdFx0cmV0dXJuICFyZXN1bHRzLnBvcCgpO1xyXG5cdFx0XHRcdH07XHJcblx0XHR9KSxcclxuXHJcblx0XHRcImhhc1wiOiBtYXJrRnVuY3Rpb24oZnVuY3Rpb24oIHNlbGVjdG9yICkge1xyXG5cdFx0XHRyZXR1cm4gZnVuY3Rpb24oIGVsZW0gKSB7XHJcblx0XHRcdFx0cmV0dXJuIFNpenpsZSggc2VsZWN0b3IsIGVsZW0gKS5sZW5ndGggPiAwO1xyXG5cdFx0XHR9O1xyXG5cdFx0fSksXHJcblxyXG5cdFx0XCJjb250YWluc1wiOiBtYXJrRnVuY3Rpb24oZnVuY3Rpb24oIHRleHQgKSB7XHJcblx0XHRcdHRleHQgPSB0ZXh0LnJlcGxhY2UoIHJ1bmVzY2FwZSwgZnVuZXNjYXBlICk7XHJcblx0XHRcdHJldHVybiBmdW5jdGlvbiggZWxlbSApIHtcclxuXHRcdFx0XHRyZXR1cm4gKCBlbGVtLnRleHRDb250ZW50IHx8IGVsZW0uaW5uZXJUZXh0IHx8IGdldFRleHQoIGVsZW0gKSApLmluZGV4T2YoIHRleHQgKSA+IC0xO1xyXG5cdFx0XHR9O1xyXG5cdFx0fSksXHJcblxyXG5cdFx0Ly8gXCJXaGV0aGVyIGFuIGVsZW1lbnQgaXMgcmVwcmVzZW50ZWQgYnkgYSA6bGFuZygpIHNlbGVjdG9yXHJcblx0XHQvLyBpcyBiYXNlZCBzb2xlbHkgb24gdGhlIGVsZW1lbnQncyBsYW5ndWFnZSB2YWx1ZVxyXG5cdFx0Ly8gYmVpbmcgZXF1YWwgdG8gdGhlIGlkZW50aWZpZXIgQyxcclxuXHRcdC8vIG9yIGJlZ2lubmluZyB3aXRoIHRoZSBpZGVudGlmaWVyIEMgaW1tZWRpYXRlbHkgZm9sbG93ZWQgYnkgXCItXCIuXHJcblx0XHQvLyBUaGUgbWF0Y2hpbmcgb2YgQyBhZ2FpbnN0IHRoZSBlbGVtZW50J3MgbGFuZ3VhZ2UgdmFsdWUgaXMgcGVyZm9ybWVkIGNhc2UtaW5zZW5zaXRpdmVseS5cclxuXHRcdC8vIFRoZSBpZGVudGlmaWVyIEMgZG9lcyBub3QgaGF2ZSB0byBiZSBhIHZhbGlkIGxhbmd1YWdlIG5hbWUuXCJcclxuXHRcdC8vIGh0dHA6Ly93d3cudzMub3JnL1RSL3NlbGVjdG9ycy8jbGFuZy1wc2V1ZG9cclxuXHRcdFwibGFuZ1wiOiBtYXJrRnVuY3Rpb24oIGZ1bmN0aW9uKCBsYW5nICkge1xyXG5cdFx0XHQvLyBsYW5nIHZhbHVlIG11c3QgYmUgYSB2YWxpZCBpZGVudGlmaWVyXHJcblx0XHRcdGlmICggIXJpZGVudGlmaWVyLnRlc3QobGFuZyB8fCBcIlwiKSApIHtcclxuXHRcdFx0XHRTaXp6bGUuZXJyb3IoIFwidW5zdXBwb3J0ZWQgbGFuZzogXCIgKyBsYW5nICk7XHJcblx0XHRcdH1cclxuXHRcdFx0bGFuZyA9IGxhbmcucmVwbGFjZSggcnVuZXNjYXBlLCBmdW5lc2NhcGUgKS50b0xvd2VyQ2FzZSgpO1xyXG5cdFx0XHRyZXR1cm4gZnVuY3Rpb24oIGVsZW0gKSB7XHJcblx0XHRcdFx0dmFyIGVsZW1MYW5nO1xyXG5cdFx0XHRcdGRvIHtcclxuXHRcdFx0XHRcdGlmICggKGVsZW1MYW5nID0gZG9jdW1lbnRJc0hUTUwgP1xyXG5cdFx0XHRcdFx0XHRlbGVtLmxhbmcgOlxyXG5cdFx0XHRcdFx0XHRlbGVtLmdldEF0dHJpYnV0ZShcInhtbDpsYW5nXCIpIHx8IGVsZW0uZ2V0QXR0cmlidXRlKFwibGFuZ1wiKSkgKSB7XHJcblxyXG5cdFx0XHRcdFx0XHRlbGVtTGFuZyA9IGVsZW1MYW5nLnRvTG93ZXJDYXNlKCk7XHJcblx0XHRcdFx0XHRcdHJldHVybiBlbGVtTGFuZyA9PT0gbGFuZyB8fCBlbGVtTGFuZy5pbmRleE9mKCBsYW5nICsgXCItXCIgKSA9PT0gMDtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9IHdoaWxlICggKGVsZW0gPSBlbGVtLnBhcmVudE5vZGUpICYmIGVsZW0ubm9kZVR5cGUgPT09IDEgKTtcclxuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XHJcblx0XHRcdH07XHJcblx0XHR9KSxcclxuXHJcblx0XHQvLyBNaXNjZWxsYW5lb3VzXHJcblx0XHRcInRhcmdldFwiOiBmdW5jdGlvbiggZWxlbSApIHtcclxuXHRcdFx0dmFyIGhhc2ggPSB3aW5kb3cubG9jYXRpb24gJiYgd2luZG93LmxvY2F0aW9uLmhhc2g7XHJcblx0XHRcdHJldHVybiBoYXNoICYmIGhhc2guc2xpY2UoIDEgKSA9PT0gZWxlbS5pZDtcclxuXHRcdH0sXHJcblxyXG5cdFx0XCJyb290XCI6IGZ1bmN0aW9uKCBlbGVtICkge1xyXG5cdFx0XHRyZXR1cm4gZWxlbSA9PT0gZG9jRWxlbTtcclxuXHRcdH0sXHJcblxyXG5cdFx0XCJmb2N1c1wiOiBmdW5jdGlvbiggZWxlbSApIHtcclxuXHRcdFx0cmV0dXJuIGVsZW0gPT09IGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgJiYgKCFkb2N1bWVudC5oYXNGb2N1cyB8fCBkb2N1bWVudC5oYXNGb2N1cygpKSAmJiAhIShlbGVtLnR5cGUgfHwgZWxlbS5ocmVmIHx8IH5lbGVtLnRhYkluZGV4KTtcclxuXHRcdH0sXHJcblxyXG5cdFx0Ly8gQm9vbGVhbiBwcm9wZXJ0aWVzXHJcblx0XHRcImVuYWJsZWRcIjogZnVuY3Rpb24oIGVsZW0gKSB7XHJcblx0XHRcdHJldHVybiBlbGVtLmRpc2FibGVkID09PSBmYWxzZTtcclxuXHRcdH0sXHJcblxyXG5cdFx0XCJkaXNhYmxlZFwiOiBmdW5jdGlvbiggZWxlbSApIHtcclxuXHRcdFx0cmV0dXJuIGVsZW0uZGlzYWJsZWQgPT09IHRydWU7XHJcblx0XHR9LFxyXG5cclxuXHRcdFwiY2hlY2tlZFwiOiBmdW5jdGlvbiggZWxlbSApIHtcclxuXHRcdFx0Ly8gSW4gQ1NTMywgOmNoZWNrZWQgc2hvdWxkIHJldHVybiBib3RoIGNoZWNrZWQgYW5kIHNlbGVjdGVkIGVsZW1lbnRzXHJcblx0XHRcdC8vIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMTEvUkVDLWNzczMtc2VsZWN0b3JzLTIwMTEwOTI5LyNjaGVja2VkXHJcblx0XHRcdHZhciBub2RlTmFtZSA9IGVsZW0ubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtcclxuXHRcdFx0cmV0dXJuIChub2RlTmFtZSA9PT0gXCJpbnB1dFwiICYmICEhZWxlbS5jaGVja2VkKSB8fCAobm9kZU5hbWUgPT09IFwib3B0aW9uXCIgJiYgISFlbGVtLnNlbGVjdGVkKTtcclxuXHRcdH0sXHJcblxyXG5cdFx0XCJzZWxlY3RlZFwiOiBmdW5jdGlvbiggZWxlbSApIHtcclxuXHRcdFx0Ly8gQWNjZXNzaW5nIHRoaXMgcHJvcGVydHkgbWFrZXMgc2VsZWN0ZWQtYnktZGVmYXVsdFxyXG5cdFx0XHQvLyBvcHRpb25zIGluIFNhZmFyaSB3b3JrIHByb3Blcmx5XHJcblx0XHRcdGlmICggZWxlbS5wYXJlbnROb2RlICkge1xyXG5cdFx0XHRcdGVsZW0ucGFyZW50Tm9kZS5zZWxlY3RlZEluZGV4O1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRyZXR1cm4gZWxlbS5zZWxlY3RlZCA9PT0gdHJ1ZTtcclxuXHRcdH0sXHJcblxyXG5cdFx0Ly8gQ29udGVudHNcclxuXHRcdFwiZW1wdHlcIjogZnVuY3Rpb24oIGVsZW0gKSB7XHJcblx0XHRcdC8vIGh0dHA6Ly93d3cudzMub3JnL1RSL3NlbGVjdG9ycy8jZW1wdHktcHNldWRvXHJcblx0XHRcdC8vIDplbXB0eSBpcyBuZWdhdGVkIGJ5IGVsZW1lbnQgKDEpIG9yIGNvbnRlbnQgbm9kZXMgKHRleHQ6IDM7IGNkYXRhOiA0OyBlbnRpdHkgcmVmOiA1KSxcclxuXHRcdFx0Ly8gICBidXQgbm90IGJ5IG90aGVycyAoY29tbWVudDogODsgcHJvY2Vzc2luZyBpbnN0cnVjdGlvbjogNzsgZXRjLilcclxuXHRcdFx0Ly8gbm9kZVR5cGUgPCA2IHdvcmtzIGJlY2F1c2UgYXR0cmlidXRlcyAoMikgZG8gbm90IGFwcGVhciBhcyBjaGlsZHJlblxyXG5cdFx0XHRmb3IgKCBlbGVtID0gZWxlbS5maXJzdENoaWxkOyBlbGVtOyBlbGVtID0gZWxlbS5uZXh0U2libGluZyApIHtcclxuXHRcdFx0XHRpZiAoIGVsZW0ubm9kZVR5cGUgPCA2ICkge1xyXG5cdFx0XHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0XHRyZXR1cm4gdHJ1ZTtcclxuXHRcdH0sXHJcblxyXG5cdFx0XCJwYXJlbnRcIjogZnVuY3Rpb24oIGVsZW0gKSB7XHJcblx0XHRcdHJldHVybiAhRXhwci5wc2V1ZG9zW1wiZW1wdHlcIl0oIGVsZW0gKTtcclxuXHRcdH0sXHJcblxyXG5cdFx0Ly8gRWxlbWVudC9pbnB1dCB0eXBlc1xyXG5cdFx0XCJoZWFkZXJcIjogZnVuY3Rpb24oIGVsZW0gKSB7XHJcblx0XHRcdHJldHVybiByaGVhZGVyLnRlc3QoIGVsZW0ubm9kZU5hbWUgKTtcclxuXHRcdH0sXHJcblxyXG5cdFx0XCJpbnB1dFwiOiBmdW5jdGlvbiggZWxlbSApIHtcclxuXHRcdFx0cmV0dXJuIHJpbnB1dHMudGVzdCggZWxlbS5ub2RlTmFtZSApO1xyXG5cdFx0fSxcclxuXHJcblx0XHRcImJ1dHRvblwiOiBmdW5jdGlvbiggZWxlbSApIHtcclxuXHRcdFx0dmFyIG5hbWUgPSBlbGVtLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7XHJcblx0XHRcdHJldHVybiBuYW1lID09PSBcImlucHV0XCIgJiYgZWxlbS50eXBlID09PSBcImJ1dHRvblwiIHx8IG5hbWUgPT09IFwiYnV0dG9uXCI7XHJcblx0XHR9LFxyXG5cclxuXHRcdFwidGV4dFwiOiBmdW5jdGlvbiggZWxlbSApIHtcclxuXHRcdFx0dmFyIGF0dHI7XHJcblx0XHRcdHJldHVybiBlbGVtLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgPT09IFwiaW5wdXRcIiAmJlxyXG5cdFx0XHRcdGVsZW0udHlwZSA9PT0gXCJ0ZXh0XCIgJiZcclxuXHJcblx0XHRcdFx0Ly8gU3VwcG9ydDogSUU8OFxyXG5cdFx0XHRcdC8vIE5ldyBIVE1MNSBhdHRyaWJ1dGUgdmFsdWVzIChlLmcuLCBcInNlYXJjaFwiKSBhcHBlYXIgd2l0aCBlbGVtLnR5cGUgPT09IFwidGV4dFwiXHJcblx0XHRcdFx0KCAoYXR0ciA9IGVsZW0uZ2V0QXR0cmlidXRlKFwidHlwZVwiKSkgPT0gbnVsbCB8fCBhdHRyLnRvTG93ZXJDYXNlKCkgPT09IFwidGV4dFwiICk7XHJcblx0XHR9LFxyXG5cclxuXHRcdC8vIFBvc2l0aW9uLWluLWNvbGxlY3Rpb25cclxuXHRcdFwiZmlyc3RcIjogY3JlYXRlUG9zaXRpb25hbFBzZXVkbyhmdW5jdGlvbigpIHtcclxuXHRcdFx0cmV0dXJuIFsgMCBdO1xyXG5cdFx0fSksXHJcblxyXG5cdFx0XCJsYXN0XCI6IGNyZWF0ZVBvc2l0aW9uYWxQc2V1ZG8oZnVuY3Rpb24oIG1hdGNoSW5kZXhlcywgbGVuZ3RoICkge1xyXG5cdFx0XHRyZXR1cm4gWyBsZW5ndGggLSAxIF07XHJcblx0XHR9KSxcclxuXHJcblx0XHRcImVxXCI6IGNyZWF0ZVBvc2l0aW9uYWxQc2V1ZG8oZnVuY3Rpb24oIG1hdGNoSW5kZXhlcywgbGVuZ3RoLCBhcmd1bWVudCApIHtcclxuXHRcdFx0cmV0dXJuIFsgYXJndW1lbnQgPCAwID8gYXJndW1lbnQgKyBsZW5ndGggOiBhcmd1bWVudCBdO1xyXG5cdFx0fSksXHJcblxyXG5cdFx0XCJldmVuXCI6IGNyZWF0ZVBvc2l0aW9uYWxQc2V1ZG8oZnVuY3Rpb24oIG1hdGNoSW5kZXhlcywgbGVuZ3RoICkge1xyXG5cdFx0XHR2YXIgaSA9IDA7XHJcblx0XHRcdGZvciAoIDsgaSA8IGxlbmd0aDsgaSArPSAyICkge1xyXG5cdFx0XHRcdG1hdGNoSW5kZXhlcy5wdXNoKCBpICk7XHJcblx0XHRcdH1cclxuXHRcdFx0cmV0dXJuIG1hdGNoSW5kZXhlcztcclxuXHRcdH0pLFxyXG5cclxuXHRcdFwib2RkXCI6IGNyZWF0ZVBvc2l0aW9uYWxQc2V1ZG8oZnVuY3Rpb24oIG1hdGNoSW5kZXhlcywgbGVuZ3RoICkge1xyXG5cdFx0XHR2YXIgaSA9IDE7XHJcblx0XHRcdGZvciAoIDsgaSA8IGxlbmd0aDsgaSArPSAyICkge1xyXG5cdFx0XHRcdG1hdGNoSW5kZXhlcy5wdXNoKCBpICk7XHJcblx0XHRcdH1cclxuXHRcdFx0cmV0dXJuIG1hdGNoSW5kZXhlcztcclxuXHRcdH0pLFxyXG5cclxuXHRcdFwibHRcIjogY3JlYXRlUG9zaXRpb25hbFBzZXVkbyhmdW5jdGlvbiggbWF0Y2hJbmRleGVzLCBsZW5ndGgsIGFyZ3VtZW50ICkge1xyXG5cdFx0XHR2YXIgaSA9IGFyZ3VtZW50IDwgMCA/IGFyZ3VtZW50ICsgbGVuZ3RoIDogYXJndW1lbnQ7XHJcblx0XHRcdGZvciAoIDsgLS1pID49IDA7ICkge1xyXG5cdFx0XHRcdG1hdGNoSW5kZXhlcy5wdXNoKCBpICk7XHJcblx0XHRcdH1cclxuXHRcdFx0cmV0dXJuIG1hdGNoSW5kZXhlcztcclxuXHRcdH0pLFxyXG5cclxuXHRcdFwiZ3RcIjogY3JlYXRlUG9zaXRpb25hbFBzZXVkbyhmdW5jdGlvbiggbWF0Y2hJbmRleGVzLCBsZW5ndGgsIGFyZ3VtZW50ICkge1xyXG5cdFx0XHR2YXIgaSA9IGFyZ3VtZW50IDwgMCA/IGFyZ3VtZW50ICsgbGVuZ3RoIDogYXJndW1lbnQ7XHJcblx0XHRcdGZvciAoIDsgKytpIDwgbGVuZ3RoOyApIHtcclxuXHRcdFx0XHRtYXRjaEluZGV4ZXMucHVzaCggaSApO1xyXG5cdFx0XHR9XHJcblx0XHRcdHJldHVybiBtYXRjaEluZGV4ZXM7XHJcblx0XHR9KVxyXG5cdH1cclxufTtcclxuXHJcbkV4cHIucHNldWRvc1tcIm50aFwiXSA9IEV4cHIucHNldWRvc1tcImVxXCJdO1xyXG5cclxuLy8gQWRkIGJ1dHRvbi9pbnB1dCB0eXBlIHBzZXVkb3NcclxuZm9yICggaSBpbiB7IHJhZGlvOiB0cnVlLCBjaGVja2JveDogdHJ1ZSwgZmlsZTogdHJ1ZSwgcGFzc3dvcmQ6IHRydWUsIGltYWdlOiB0cnVlIH0gKSB7XHJcblx0RXhwci5wc2V1ZG9zWyBpIF0gPSBjcmVhdGVJbnB1dFBzZXVkbyggaSApO1xyXG59XHJcbmZvciAoIGkgaW4geyBzdWJtaXQ6IHRydWUsIHJlc2V0OiB0cnVlIH0gKSB7XHJcblx0RXhwci5wc2V1ZG9zWyBpIF0gPSBjcmVhdGVCdXR0b25Qc2V1ZG8oIGkgKTtcclxufVxyXG5cclxuLy8gRWFzeSBBUEkgZm9yIGNyZWF0aW5nIG5ldyBzZXRGaWx0ZXJzXHJcbmZ1bmN0aW9uIHNldEZpbHRlcnMoKSB7fVxyXG5zZXRGaWx0ZXJzLnByb3RvdHlwZSA9IEV4cHIuZmlsdGVycyA9IEV4cHIucHNldWRvcztcclxuRXhwci5zZXRGaWx0ZXJzID0gbmV3IHNldEZpbHRlcnMoKTtcclxuXHJcbnRva2VuaXplID0gU2l6emxlLnRva2VuaXplID0gZnVuY3Rpb24oIHNlbGVjdG9yLCBwYXJzZU9ubHkgKSB7XHJcblx0dmFyIG1hdGNoZWQsIG1hdGNoLCB0b2tlbnMsIHR5cGUsXHJcblx0XHRzb0ZhciwgZ3JvdXBzLCBwcmVGaWx0ZXJzLFxyXG5cdFx0Y2FjaGVkID0gdG9rZW5DYWNoZVsgc2VsZWN0b3IgKyBcIiBcIiBdO1xyXG5cclxuXHRpZiAoIGNhY2hlZCApIHtcclxuXHRcdHJldHVybiBwYXJzZU9ubHkgPyAwIDogY2FjaGVkLnNsaWNlKCAwICk7XHJcblx0fVxyXG5cclxuXHRzb0ZhciA9IHNlbGVjdG9yO1xyXG5cdGdyb3VwcyA9IFtdO1xyXG5cdHByZUZpbHRlcnMgPSBFeHByLnByZUZpbHRlcjtcclxuXHJcblx0d2hpbGUgKCBzb0ZhciApIHtcclxuXHJcblx0XHQvLyBDb21tYSBhbmQgZmlyc3QgcnVuXHJcblx0XHRpZiAoICFtYXRjaGVkIHx8IChtYXRjaCA9IHJjb21tYS5leGVjKCBzb0ZhciApKSApIHtcclxuXHRcdFx0aWYgKCBtYXRjaCApIHtcclxuXHRcdFx0XHQvLyBEb24ndCBjb25zdW1lIHRyYWlsaW5nIGNvbW1hcyBhcyB2YWxpZFxyXG5cdFx0XHRcdHNvRmFyID0gc29GYXIuc2xpY2UoIG1hdGNoWzBdLmxlbmd0aCApIHx8IHNvRmFyO1xyXG5cdFx0XHR9XHJcblx0XHRcdGdyb3Vwcy5wdXNoKCAodG9rZW5zID0gW10pICk7XHJcblx0XHR9XHJcblxyXG5cdFx0bWF0Y2hlZCA9IGZhbHNlO1xyXG5cclxuXHRcdC8vIENvbWJpbmF0b3JzXHJcblx0XHRpZiAoIChtYXRjaCA9IHJjb21iaW5hdG9ycy5leGVjKCBzb0ZhciApKSApIHtcclxuXHRcdFx0bWF0Y2hlZCA9IG1hdGNoLnNoaWZ0KCk7XHJcblx0XHRcdHRva2Vucy5wdXNoKHtcclxuXHRcdFx0XHR2YWx1ZTogbWF0Y2hlZCxcclxuXHRcdFx0XHQvLyBDYXN0IGRlc2NlbmRhbnQgY29tYmluYXRvcnMgdG8gc3BhY2VcclxuXHRcdFx0XHR0eXBlOiBtYXRjaFswXS5yZXBsYWNlKCBydHJpbSwgXCIgXCIgKVxyXG5cdFx0XHR9KTtcclxuXHRcdFx0c29GYXIgPSBzb0Zhci5zbGljZSggbWF0Y2hlZC5sZW5ndGggKTtcclxuXHRcdH1cclxuXHJcblx0XHQvLyBGaWx0ZXJzXHJcblx0XHRmb3IgKCB0eXBlIGluIEV4cHIuZmlsdGVyICkge1xyXG5cdFx0XHRpZiAoIChtYXRjaCA9IG1hdGNoRXhwclsgdHlwZSBdLmV4ZWMoIHNvRmFyICkpICYmICghcHJlRmlsdGVyc1sgdHlwZSBdIHx8XHJcblx0XHRcdFx0KG1hdGNoID0gcHJlRmlsdGVyc1sgdHlwZSBdKCBtYXRjaCApKSkgKSB7XHJcblx0XHRcdFx0bWF0Y2hlZCA9IG1hdGNoLnNoaWZ0KCk7XHJcblx0XHRcdFx0dG9rZW5zLnB1c2goe1xyXG5cdFx0XHRcdFx0dmFsdWU6IG1hdGNoZWQsXHJcblx0XHRcdFx0XHR0eXBlOiB0eXBlLFxyXG5cdFx0XHRcdFx0bWF0Y2hlczogbWF0Y2hcclxuXHRcdFx0XHR9KTtcclxuXHRcdFx0XHRzb0ZhciA9IHNvRmFyLnNsaWNlKCBtYXRjaGVkLmxlbmd0aCApO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKCAhbWF0Y2hlZCApIHtcclxuXHRcdFx0YnJlYWs7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHQvLyBSZXR1cm4gdGhlIGxlbmd0aCBvZiB0aGUgaW52YWxpZCBleGNlc3NcclxuXHQvLyBpZiB3ZSdyZSBqdXN0IHBhcnNpbmdcclxuXHQvLyBPdGhlcndpc2UsIHRocm93IGFuIGVycm9yIG9yIHJldHVybiB0b2tlbnNcclxuXHRyZXR1cm4gcGFyc2VPbmx5ID9cclxuXHRcdHNvRmFyLmxlbmd0aCA6XHJcblx0XHRzb0ZhciA/XHJcblx0XHRcdFNpenpsZS5lcnJvciggc2VsZWN0b3IgKSA6XHJcblx0XHRcdC8vIENhY2hlIHRoZSB0b2tlbnNcclxuXHRcdFx0dG9rZW5DYWNoZSggc2VsZWN0b3IsIGdyb3VwcyApLnNsaWNlKCAwICk7XHJcbn07XHJcblxyXG5mdW5jdGlvbiB0b1NlbGVjdG9yKCB0b2tlbnMgKSB7XHJcblx0dmFyIGkgPSAwLFxyXG5cdFx0bGVuID0gdG9rZW5zLmxlbmd0aCxcclxuXHRcdHNlbGVjdG9yID0gXCJcIjtcclxuXHRmb3IgKCA7IGkgPCBsZW47IGkrKyApIHtcclxuXHRcdHNlbGVjdG9yICs9IHRva2Vuc1tpXS52YWx1ZTtcclxuXHR9XHJcblx0cmV0dXJuIHNlbGVjdG9yO1xyXG59XHJcblxyXG5mdW5jdGlvbiBhZGRDb21iaW5hdG9yKCBtYXRjaGVyLCBjb21iaW5hdG9yLCBiYXNlICkge1xyXG5cdHZhciBkaXIgPSBjb21iaW5hdG9yLmRpcixcclxuXHRcdGNoZWNrTm9uRWxlbWVudHMgPSBiYXNlICYmIGRpciA9PT0gXCJwYXJlbnROb2RlXCIsXHJcblx0XHRkb25lTmFtZSA9IGRvbmUrKztcclxuXHJcblx0cmV0dXJuIGNvbWJpbmF0b3IuZmlyc3QgP1xyXG5cdFx0Ly8gQ2hlY2sgYWdhaW5zdCBjbG9zZXN0IGFuY2VzdG9yL3ByZWNlZGluZyBlbGVtZW50XHJcblx0XHRmdW5jdGlvbiggZWxlbSwgY29udGV4dCwgeG1sICkge1xyXG5cdFx0XHR3aGlsZSAoIChlbGVtID0gZWxlbVsgZGlyIF0pICkge1xyXG5cdFx0XHRcdGlmICggZWxlbS5ub2RlVHlwZSA9PT0gMSB8fCBjaGVja05vbkVsZW1lbnRzICkge1xyXG5cdFx0XHRcdFx0cmV0dXJuIG1hdGNoZXIoIGVsZW0sIGNvbnRleHQsIHhtbCApO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0fSA6XHJcblxyXG5cdFx0Ly8gQ2hlY2sgYWdhaW5zdCBhbGwgYW5jZXN0b3IvcHJlY2VkaW5nIGVsZW1lbnRzXHJcblx0XHRmdW5jdGlvbiggZWxlbSwgY29udGV4dCwgeG1sICkge1xyXG5cdFx0XHR2YXIgb2xkQ2FjaGUsIG91dGVyQ2FjaGUsXHJcblx0XHRcdFx0bmV3Q2FjaGUgPSBbIGRpcnJ1bnMsIGRvbmVOYW1lIF07XHJcblxyXG5cdFx0XHQvLyBXZSBjYW4ndCBzZXQgYXJiaXRyYXJ5IGRhdGEgb24gWE1MIG5vZGVzLCBzbyB0aGV5IGRvbid0IGJlbmVmaXQgZnJvbSBkaXIgY2FjaGluZ1xyXG5cdFx0XHRpZiAoIHhtbCApIHtcclxuXHRcdFx0XHR3aGlsZSAoIChlbGVtID0gZWxlbVsgZGlyIF0pICkge1xyXG5cdFx0XHRcdFx0aWYgKCBlbGVtLm5vZGVUeXBlID09PSAxIHx8IGNoZWNrTm9uRWxlbWVudHMgKSB7XHJcblx0XHRcdFx0XHRcdGlmICggbWF0Y2hlciggZWxlbSwgY29udGV4dCwgeG1sICkgKSB7XHJcblx0XHRcdFx0XHRcdFx0cmV0dXJuIHRydWU7XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9XHJcblx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0d2hpbGUgKCAoZWxlbSA9IGVsZW1bIGRpciBdKSApIHtcclxuXHRcdFx0XHRcdGlmICggZWxlbS5ub2RlVHlwZSA9PT0gMSB8fCBjaGVja05vbkVsZW1lbnRzICkge1xyXG5cdFx0XHRcdFx0XHRvdXRlckNhY2hlID0gZWxlbVsgZXhwYW5kbyBdIHx8IChlbGVtWyBleHBhbmRvIF0gPSB7fSk7XHJcblx0XHRcdFx0XHRcdGlmICggKG9sZENhY2hlID0gb3V0ZXJDYWNoZVsgZGlyIF0pICYmXHJcblx0XHRcdFx0XHRcdFx0b2xkQ2FjaGVbIDAgXSA9PT0gZGlycnVucyAmJiBvbGRDYWNoZVsgMSBdID09PSBkb25lTmFtZSApIHtcclxuXHJcblx0XHRcdFx0XHRcdFx0Ly8gQXNzaWduIHRvIG5ld0NhY2hlIHNvIHJlc3VsdHMgYmFjay1wcm9wYWdhdGUgdG8gcHJldmlvdXMgZWxlbWVudHNcclxuXHRcdFx0XHRcdFx0XHRyZXR1cm4gKG5ld0NhY2hlWyAyIF0gPSBvbGRDYWNoZVsgMiBdKTtcclxuXHRcdFx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdFx0XHQvLyBSZXVzZSBuZXdjYWNoZSBzbyByZXN1bHRzIGJhY2stcHJvcGFnYXRlIHRvIHByZXZpb3VzIGVsZW1lbnRzXHJcblx0XHRcdFx0XHRcdFx0b3V0ZXJDYWNoZVsgZGlyIF0gPSBuZXdDYWNoZTtcclxuXHJcblx0XHRcdFx0XHRcdFx0Ly8gQSBtYXRjaCBtZWFucyB3ZSdyZSBkb25lOyBhIGZhaWwgbWVhbnMgd2UgaGF2ZSB0byBrZWVwIGNoZWNraW5nXHJcblx0XHRcdFx0XHRcdFx0aWYgKCAobmV3Q2FjaGVbIDIgXSA9IG1hdGNoZXIoIGVsZW0sIGNvbnRleHQsIHhtbCApKSApIHtcclxuXHRcdFx0XHRcdFx0XHRcdHJldHVybiB0cnVlO1xyXG5cdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0fTtcclxufVxyXG5cclxuZnVuY3Rpb24gZWxlbWVudE1hdGNoZXIoIG1hdGNoZXJzICkge1xyXG5cdHJldHVybiBtYXRjaGVycy5sZW5ndGggPiAxID9cclxuXHRcdGZ1bmN0aW9uKCBlbGVtLCBjb250ZXh0LCB4bWwgKSB7XHJcblx0XHRcdHZhciBpID0gbWF0Y2hlcnMubGVuZ3RoO1xyXG5cdFx0XHR3aGlsZSAoIGktLSApIHtcclxuXHRcdFx0XHRpZiAoICFtYXRjaGVyc1tpXSggZWxlbSwgY29udGV4dCwgeG1sICkgKSB7XHJcblx0XHRcdFx0XHRyZXR1cm4gZmFsc2U7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHRcdHJldHVybiB0cnVlO1xyXG5cdFx0fSA6XHJcblx0XHRtYXRjaGVyc1swXTtcclxufVxyXG5cclxuZnVuY3Rpb24gbXVsdGlwbGVDb250ZXh0cyggc2VsZWN0b3IsIGNvbnRleHRzLCByZXN1bHRzICkge1xyXG5cdHZhciBpID0gMCxcclxuXHRcdGxlbiA9IGNvbnRleHRzLmxlbmd0aDtcclxuXHRmb3IgKCA7IGkgPCBsZW47IGkrKyApIHtcclxuXHRcdFNpenpsZSggc2VsZWN0b3IsIGNvbnRleHRzW2ldLCByZXN1bHRzICk7XHJcblx0fVxyXG5cdHJldHVybiByZXN1bHRzO1xyXG59XHJcblxyXG5mdW5jdGlvbiBjb25kZW5zZSggdW5tYXRjaGVkLCBtYXAsIGZpbHRlciwgY29udGV4dCwgeG1sICkge1xyXG5cdHZhciBlbGVtLFxyXG5cdFx0bmV3VW5tYXRjaGVkID0gW10sXHJcblx0XHRpID0gMCxcclxuXHRcdGxlbiA9IHVubWF0Y2hlZC5sZW5ndGgsXHJcblx0XHRtYXBwZWQgPSBtYXAgIT0gbnVsbDtcclxuXHJcblx0Zm9yICggOyBpIDwgbGVuOyBpKysgKSB7XHJcblx0XHRpZiAoIChlbGVtID0gdW5tYXRjaGVkW2ldKSApIHtcclxuXHRcdFx0aWYgKCAhZmlsdGVyIHx8IGZpbHRlciggZWxlbSwgY29udGV4dCwgeG1sICkgKSB7XHJcblx0XHRcdFx0bmV3VW5tYXRjaGVkLnB1c2goIGVsZW0gKTtcclxuXHRcdFx0XHRpZiAoIG1hcHBlZCApIHtcclxuXHRcdFx0XHRcdG1hcC5wdXNoKCBpICk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRyZXR1cm4gbmV3VW5tYXRjaGVkO1xyXG59XHJcblxyXG5mdW5jdGlvbiBzZXRNYXRjaGVyKCBwcmVGaWx0ZXIsIHNlbGVjdG9yLCBtYXRjaGVyLCBwb3N0RmlsdGVyLCBwb3N0RmluZGVyLCBwb3N0U2VsZWN0b3IgKSB7XHJcblx0aWYgKCBwb3N0RmlsdGVyICYmICFwb3N0RmlsdGVyWyBleHBhbmRvIF0gKSB7XHJcblx0XHRwb3N0RmlsdGVyID0gc2V0TWF0Y2hlciggcG9zdEZpbHRlciApO1xyXG5cdH1cclxuXHRpZiAoIHBvc3RGaW5kZXIgJiYgIXBvc3RGaW5kZXJbIGV4cGFuZG8gXSApIHtcclxuXHRcdHBvc3RGaW5kZXIgPSBzZXRNYXRjaGVyKCBwb3N0RmluZGVyLCBwb3N0U2VsZWN0b3IgKTtcclxuXHR9XHJcblx0cmV0dXJuIG1hcmtGdW5jdGlvbihmdW5jdGlvbiggc2VlZCwgcmVzdWx0cywgY29udGV4dCwgeG1sICkge1xyXG5cdFx0dmFyIHRlbXAsIGksIGVsZW0sXHJcblx0XHRcdHByZU1hcCA9IFtdLFxyXG5cdFx0XHRwb3N0TWFwID0gW10sXHJcblx0XHRcdHByZWV4aXN0aW5nID0gcmVzdWx0cy5sZW5ndGgsXHJcblxyXG5cdFx0XHQvLyBHZXQgaW5pdGlhbCBlbGVtZW50cyBmcm9tIHNlZWQgb3IgY29udGV4dFxyXG5cdFx0XHRlbGVtcyA9IHNlZWQgfHwgbXVsdGlwbGVDb250ZXh0cyggc2VsZWN0b3IgfHwgXCIqXCIsIGNvbnRleHQubm9kZVR5cGUgPyBbIGNvbnRleHQgXSA6IGNvbnRleHQsIFtdICksXHJcblxyXG5cdFx0XHQvLyBQcmVmaWx0ZXIgdG8gZ2V0IG1hdGNoZXIgaW5wdXQsIHByZXNlcnZpbmcgYSBtYXAgZm9yIHNlZWQtcmVzdWx0cyBzeW5jaHJvbml6YXRpb25cclxuXHRcdFx0bWF0Y2hlckluID0gcHJlRmlsdGVyICYmICggc2VlZCB8fCAhc2VsZWN0b3IgKSA/XHJcblx0XHRcdFx0Y29uZGVuc2UoIGVsZW1zLCBwcmVNYXAsIHByZUZpbHRlciwgY29udGV4dCwgeG1sICkgOlxyXG5cdFx0XHRcdGVsZW1zLFxyXG5cclxuXHRcdFx0bWF0Y2hlck91dCA9IG1hdGNoZXIgP1xyXG5cdFx0XHRcdC8vIElmIHdlIGhhdmUgYSBwb3N0RmluZGVyLCBvciBmaWx0ZXJlZCBzZWVkLCBvciBub24tc2VlZCBwb3N0RmlsdGVyIG9yIHByZWV4aXN0aW5nIHJlc3VsdHMsXHJcblx0XHRcdFx0cG9zdEZpbmRlciB8fCAoIHNlZWQgPyBwcmVGaWx0ZXIgOiBwcmVleGlzdGluZyB8fCBwb3N0RmlsdGVyICkgP1xyXG5cclxuXHRcdFx0XHRcdC8vIC4uLmludGVybWVkaWF0ZSBwcm9jZXNzaW5nIGlzIG5lY2Vzc2FyeVxyXG5cdFx0XHRcdFx0W10gOlxyXG5cclxuXHRcdFx0XHRcdC8vIC4uLm90aGVyd2lzZSB1c2UgcmVzdWx0cyBkaXJlY3RseVxyXG5cdFx0XHRcdFx0cmVzdWx0cyA6XHJcblx0XHRcdFx0bWF0Y2hlckluO1xyXG5cclxuXHRcdC8vIEZpbmQgcHJpbWFyeSBtYXRjaGVzXHJcblx0XHRpZiAoIG1hdGNoZXIgKSB7XHJcblx0XHRcdG1hdGNoZXIoIG1hdGNoZXJJbiwgbWF0Y2hlck91dCwgY29udGV4dCwgeG1sICk7XHJcblx0XHR9XHJcblxyXG5cdFx0Ly8gQXBwbHkgcG9zdEZpbHRlclxyXG5cdFx0aWYgKCBwb3N0RmlsdGVyICkge1xyXG5cdFx0XHR0ZW1wID0gY29uZGVuc2UoIG1hdGNoZXJPdXQsIHBvc3RNYXAgKTtcclxuXHRcdFx0cG9zdEZpbHRlciggdGVtcCwgW10sIGNvbnRleHQsIHhtbCApO1xyXG5cclxuXHRcdFx0Ly8gVW4tbWF0Y2ggZmFpbGluZyBlbGVtZW50cyBieSBtb3ZpbmcgdGhlbSBiYWNrIHRvIG1hdGNoZXJJblxyXG5cdFx0XHRpID0gdGVtcC5sZW5ndGg7XHJcblx0XHRcdHdoaWxlICggaS0tICkge1xyXG5cdFx0XHRcdGlmICggKGVsZW0gPSB0ZW1wW2ldKSApIHtcclxuXHRcdFx0XHRcdG1hdGNoZXJPdXRbIHBvc3RNYXBbaV0gXSA9ICEobWF0Y2hlckluWyBwb3N0TWFwW2ldIF0gPSBlbGVtKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHJcblx0XHRpZiAoIHNlZWQgKSB7XHJcblx0XHRcdGlmICggcG9zdEZpbmRlciB8fCBwcmVGaWx0ZXIgKSB7XHJcblx0XHRcdFx0aWYgKCBwb3N0RmluZGVyICkge1xyXG5cdFx0XHRcdFx0Ly8gR2V0IHRoZSBmaW5hbCBtYXRjaGVyT3V0IGJ5IGNvbmRlbnNpbmcgdGhpcyBpbnRlcm1lZGlhdGUgaW50byBwb3N0RmluZGVyIGNvbnRleHRzXHJcblx0XHRcdFx0XHR0ZW1wID0gW107XHJcblx0XHRcdFx0XHRpID0gbWF0Y2hlck91dC5sZW5ndGg7XHJcblx0XHRcdFx0XHR3aGlsZSAoIGktLSApIHtcclxuXHRcdFx0XHRcdFx0aWYgKCAoZWxlbSA9IG1hdGNoZXJPdXRbaV0pICkge1xyXG5cdFx0XHRcdFx0XHRcdC8vIFJlc3RvcmUgbWF0Y2hlckluIHNpbmNlIGVsZW0gaXMgbm90IHlldCBhIGZpbmFsIG1hdGNoXHJcblx0XHRcdFx0XHRcdFx0dGVtcC5wdXNoKCAobWF0Y2hlckluW2ldID0gZWxlbSkgKTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0cG9zdEZpbmRlciggbnVsbCwgKG1hdGNoZXJPdXQgPSBbXSksIHRlbXAsIHhtbCApO1xyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0Ly8gTW92ZSBtYXRjaGVkIGVsZW1lbnRzIGZyb20gc2VlZCB0byByZXN1bHRzIHRvIGtlZXAgdGhlbSBzeW5jaHJvbml6ZWRcclxuXHRcdFx0XHRpID0gbWF0Y2hlck91dC5sZW5ndGg7XHJcblx0XHRcdFx0d2hpbGUgKCBpLS0gKSB7XHJcblx0XHRcdFx0XHRpZiAoIChlbGVtID0gbWF0Y2hlck91dFtpXSkgJiZcclxuXHRcdFx0XHRcdFx0KHRlbXAgPSBwb3N0RmluZGVyID8gaW5kZXhPZiggc2VlZCwgZWxlbSApIDogcHJlTWFwW2ldKSA+IC0xICkge1xyXG5cclxuXHRcdFx0XHRcdFx0c2VlZFt0ZW1wXSA9ICEocmVzdWx0c1t0ZW1wXSA9IGVsZW0pO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cclxuXHRcdC8vIEFkZCBlbGVtZW50cyB0byByZXN1bHRzLCB0aHJvdWdoIHBvc3RGaW5kZXIgaWYgZGVmaW5lZFxyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0bWF0Y2hlck91dCA9IGNvbmRlbnNlKFxyXG5cdFx0XHRcdG1hdGNoZXJPdXQgPT09IHJlc3VsdHMgP1xyXG5cdFx0XHRcdFx0bWF0Y2hlck91dC5zcGxpY2UoIHByZWV4aXN0aW5nLCBtYXRjaGVyT3V0Lmxlbmd0aCApIDpcclxuXHRcdFx0XHRcdG1hdGNoZXJPdXRcclxuXHRcdFx0KTtcclxuXHRcdFx0aWYgKCBwb3N0RmluZGVyICkge1xyXG5cdFx0XHRcdHBvc3RGaW5kZXIoIG51bGwsIHJlc3VsdHMsIG1hdGNoZXJPdXQsIHhtbCApO1xyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdHB1c2guYXBwbHkoIHJlc3VsdHMsIG1hdGNoZXJPdXQgKTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdH0pO1xyXG59XHJcblxyXG5mdW5jdGlvbiBtYXRjaGVyRnJvbVRva2VucyggdG9rZW5zICkge1xyXG5cdHZhciBjaGVja0NvbnRleHQsIG1hdGNoZXIsIGosXHJcblx0XHRsZW4gPSB0b2tlbnMubGVuZ3RoLFxyXG5cdFx0bGVhZGluZ1JlbGF0aXZlID0gRXhwci5yZWxhdGl2ZVsgdG9rZW5zWzBdLnR5cGUgXSxcclxuXHRcdGltcGxpY2l0UmVsYXRpdmUgPSBsZWFkaW5nUmVsYXRpdmUgfHwgRXhwci5yZWxhdGl2ZVtcIiBcIl0sXHJcblx0XHRpID0gbGVhZGluZ1JlbGF0aXZlID8gMSA6IDAsXHJcblxyXG5cdFx0Ly8gVGhlIGZvdW5kYXRpb25hbCBtYXRjaGVyIGVuc3VyZXMgdGhhdCBlbGVtZW50cyBhcmUgcmVhY2hhYmxlIGZyb20gdG9wLWxldmVsIGNvbnRleHQocylcclxuXHRcdG1hdGNoQ29udGV4dCA9IGFkZENvbWJpbmF0b3IoIGZ1bmN0aW9uKCBlbGVtICkge1xyXG5cdFx0XHRyZXR1cm4gZWxlbSA9PT0gY2hlY2tDb250ZXh0O1xyXG5cdFx0fSwgaW1wbGljaXRSZWxhdGl2ZSwgdHJ1ZSApLFxyXG5cdFx0bWF0Y2hBbnlDb250ZXh0ID0gYWRkQ29tYmluYXRvciggZnVuY3Rpb24oIGVsZW0gKSB7XHJcblx0XHRcdHJldHVybiBpbmRleE9mKCBjaGVja0NvbnRleHQsIGVsZW0gKSA+IC0xO1xyXG5cdFx0fSwgaW1wbGljaXRSZWxhdGl2ZSwgdHJ1ZSApLFxyXG5cdFx0bWF0Y2hlcnMgPSBbIGZ1bmN0aW9uKCBlbGVtLCBjb250ZXh0LCB4bWwgKSB7XHJcblx0XHRcdHZhciByZXQgPSAoICFsZWFkaW5nUmVsYXRpdmUgJiYgKCB4bWwgfHwgY29udGV4dCAhPT0gb3V0ZXJtb3N0Q29udGV4dCApICkgfHwgKFxyXG5cdFx0XHRcdChjaGVja0NvbnRleHQgPSBjb250ZXh0KS5ub2RlVHlwZSA/XHJcblx0XHRcdFx0XHRtYXRjaENvbnRleHQoIGVsZW0sIGNvbnRleHQsIHhtbCApIDpcclxuXHRcdFx0XHRcdG1hdGNoQW55Q29udGV4dCggZWxlbSwgY29udGV4dCwgeG1sICkgKTtcclxuXHRcdFx0Ly8gQXZvaWQgaGFuZ2luZyBvbnRvIGVsZW1lbnQgKGlzc3VlICMyOTkpXHJcblx0XHRcdGNoZWNrQ29udGV4dCA9IG51bGw7XHJcblx0XHRcdHJldHVybiByZXQ7XHJcblx0XHR9IF07XHJcblxyXG5cdGZvciAoIDsgaSA8IGxlbjsgaSsrICkge1xyXG5cdFx0aWYgKCAobWF0Y2hlciA9IEV4cHIucmVsYXRpdmVbIHRva2Vuc1tpXS50eXBlIF0pICkge1xyXG5cdFx0XHRtYXRjaGVycyA9IFsgYWRkQ29tYmluYXRvcihlbGVtZW50TWF0Y2hlciggbWF0Y2hlcnMgKSwgbWF0Y2hlcikgXTtcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdG1hdGNoZXIgPSBFeHByLmZpbHRlclsgdG9rZW5zW2ldLnR5cGUgXS5hcHBseSggbnVsbCwgdG9rZW5zW2ldLm1hdGNoZXMgKTtcclxuXHJcblx0XHRcdC8vIFJldHVybiBzcGVjaWFsIHVwb24gc2VlaW5nIGEgcG9zaXRpb25hbCBtYXRjaGVyXHJcblx0XHRcdGlmICggbWF0Y2hlclsgZXhwYW5kbyBdICkge1xyXG5cdFx0XHRcdC8vIEZpbmQgdGhlIG5leHQgcmVsYXRpdmUgb3BlcmF0b3IgKGlmIGFueSkgZm9yIHByb3BlciBoYW5kbGluZ1xyXG5cdFx0XHRcdGogPSArK2k7XHJcblx0XHRcdFx0Zm9yICggOyBqIDwgbGVuOyBqKysgKSB7XHJcblx0XHRcdFx0XHRpZiAoIEV4cHIucmVsYXRpdmVbIHRva2Vuc1tqXS50eXBlIF0gKSB7XHJcblx0XHRcdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRyZXR1cm4gc2V0TWF0Y2hlcihcclxuXHRcdFx0XHRcdGkgPiAxICYmIGVsZW1lbnRNYXRjaGVyKCBtYXRjaGVycyApLFxyXG5cdFx0XHRcdFx0aSA+IDEgJiYgdG9TZWxlY3RvcihcclxuXHRcdFx0XHRcdFx0Ly8gSWYgdGhlIHByZWNlZGluZyB0b2tlbiB3YXMgYSBkZXNjZW5kYW50IGNvbWJpbmF0b3IsIGluc2VydCBhbiBpbXBsaWNpdCBhbnktZWxlbWVudCBgKmBcclxuXHRcdFx0XHRcdFx0dG9rZW5zLnNsaWNlKCAwLCBpIC0gMSApLmNvbmNhdCh7IHZhbHVlOiB0b2tlbnNbIGkgLSAyIF0udHlwZSA9PT0gXCIgXCIgPyBcIipcIiA6IFwiXCIgfSlcclxuXHRcdFx0XHRcdCkucmVwbGFjZSggcnRyaW0sIFwiJDFcIiApLFxyXG5cdFx0XHRcdFx0bWF0Y2hlcixcclxuXHRcdFx0XHRcdGkgPCBqICYmIG1hdGNoZXJGcm9tVG9rZW5zKCB0b2tlbnMuc2xpY2UoIGksIGogKSApLFxyXG5cdFx0XHRcdFx0aiA8IGxlbiAmJiBtYXRjaGVyRnJvbVRva2VucyggKHRva2VucyA9IHRva2Vucy5zbGljZSggaiApKSApLFxyXG5cdFx0XHRcdFx0aiA8IGxlbiAmJiB0b1NlbGVjdG9yKCB0b2tlbnMgKVxyXG5cdFx0XHRcdCk7XHJcblx0XHRcdH1cclxuXHRcdFx0bWF0Y2hlcnMucHVzaCggbWF0Y2hlciApO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0cmV0dXJuIGVsZW1lbnRNYXRjaGVyKCBtYXRjaGVycyApO1xyXG59XHJcblxyXG5mdW5jdGlvbiBtYXRjaGVyRnJvbUdyb3VwTWF0Y2hlcnMoIGVsZW1lbnRNYXRjaGVycywgc2V0TWF0Y2hlcnMgKSB7XHJcblx0dmFyIGJ5U2V0ID0gc2V0TWF0Y2hlcnMubGVuZ3RoID4gMCxcclxuXHRcdGJ5RWxlbWVudCA9IGVsZW1lbnRNYXRjaGVycy5sZW5ndGggPiAwLFxyXG5cdFx0c3VwZXJNYXRjaGVyID0gZnVuY3Rpb24oIHNlZWQsIGNvbnRleHQsIHhtbCwgcmVzdWx0cywgb3V0ZXJtb3N0ICkge1xyXG5cdFx0XHR2YXIgZWxlbSwgaiwgbWF0Y2hlcixcclxuXHRcdFx0XHRtYXRjaGVkQ291bnQgPSAwLFxyXG5cdFx0XHRcdGkgPSBcIjBcIixcclxuXHRcdFx0XHR1bm1hdGNoZWQgPSBzZWVkICYmIFtdLFxyXG5cdFx0XHRcdHNldE1hdGNoZWQgPSBbXSxcclxuXHRcdFx0XHRjb250ZXh0QmFja3VwID0gb3V0ZXJtb3N0Q29udGV4dCxcclxuXHRcdFx0XHQvLyBXZSBtdXN0IGFsd2F5cyBoYXZlIGVpdGhlciBzZWVkIGVsZW1lbnRzIG9yIG91dGVybW9zdCBjb250ZXh0XHJcblx0XHRcdFx0ZWxlbXMgPSBzZWVkIHx8IGJ5RWxlbWVudCAmJiBFeHByLmZpbmRbXCJUQUdcIl0oIFwiKlwiLCBvdXRlcm1vc3QgKSxcclxuXHRcdFx0XHQvLyBVc2UgaW50ZWdlciBkaXJydW5zIGlmZiB0aGlzIGlzIHRoZSBvdXRlcm1vc3QgbWF0Y2hlclxyXG5cdFx0XHRcdGRpcnJ1bnNVbmlxdWUgPSAoZGlycnVucyArPSBjb250ZXh0QmFja3VwID09IG51bGwgPyAxIDogTWF0aC5yYW5kb20oKSB8fCAwLjEpLFxyXG5cdFx0XHRcdGxlbiA9IGVsZW1zLmxlbmd0aDtcclxuXHJcblx0XHRcdGlmICggb3V0ZXJtb3N0ICkge1xyXG5cdFx0XHRcdG91dGVybW9zdENvbnRleHQgPSBjb250ZXh0ICE9PSBkb2N1bWVudCAmJiBjb250ZXh0O1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHQvLyBBZGQgZWxlbWVudHMgcGFzc2luZyBlbGVtZW50TWF0Y2hlcnMgZGlyZWN0bHkgdG8gcmVzdWx0c1xyXG5cdFx0XHQvLyBLZWVwIGBpYCBhIHN0cmluZyBpZiB0aGVyZSBhcmUgbm8gZWxlbWVudHMgc28gYG1hdGNoZWRDb3VudGAgd2lsbCBiZSBcIjAwXCIgYmVsb3dcclxuXHRcdFx0Ly8gU3VwcG9ydDogSUU8OSwgU2FmYXJpXHJcblx0XHRcdC8vIFRvbGVyYXRlIE5vZGVMaXN0IHByb3BlcnRpZXMgKElFOiBcImxlbmd0aFwiOyBTYWZhcmk6IDxudW1iZXI+KSBtYXRjaGluZyBlbGVtZW50cyBieSBpZFxyXG5cdFx0XHRmb3IgKCA7IGkgIT09IGxlbiAmJiAoZWxlbSA9IGVsZW1zW2ldKSAhPSBudWxsOyBpKysgKSB7XHJcblx0XHRcdFx0aWYgKCBieUVsZW1lbnQgJiYgZWxlbSApIHtcclxuXHRcdFx0XHRcdGogPSAwO1xyXG5cdFx0XHRcdFx0d2hpbGUgKCAobWF0Y2hlciA9IGVsZW1lbnRNYXRjaGVyc1tqKytdKSApIHtcclxuXHRcdFx0XHRcdFx0aWYgKCBtYXRjaGVyKCBlbGVtLCBjb250ZXh0LCB4bWwgKSApIHtcclxuXHRcdFx0XHRcdFx0XHRyZXN1bHRzLnB1c2goIGVsZW0gKTtcclxuXHRcdFx0XHRcdFx0XHRicmVhaztcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0aWYgKCBvdXRlcm1vc3QgKSB7XHJcblx0XHRcdFx0XHRcdGRpcnJ1bnMgPSBkaXJydW5zVW5pcXVlO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0Ly8gVHJhY2sgdW5tYXRjaGVkIGVsZW1lbnRzIGZvciBzZXQgZmlsdGVyc1xyXG5cdFx0XHRcdGlmICggYnlTZXQgKSB7XHJcblx0XHRcdFx0XHQvLyBUaGV5IHdpbGwgaGF2ZSBnb25lIHRocm91Z2ggYWxsIHBvc3NpYmxlIG1hdGNoZXJzXHJcblx0XHRcdFx0XHRpZiAoIChlbGVtID0gIW1hdGNoZXIgJiYgZWxlbSkgKSB7XHJcblx0XHRcdFx0XHRcdG1hdGNoZWRDb3VudC0tO1xyXG5cdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdC8vIExlbmd0aGVuIHRoZSBhcnJheSBmb3IgZXZlcnkgZWxlbWVudCwgbWF0Y2hlZCBvciBub3RcclxuXHRcdFx0XHRcdGlmICggc2VlZCApIHtcclxuXHRcdFx0XHRcdFx0dW5tYXRjaGVkLnB1c2goIGVsZW0gKTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdC8vIEFwcGx5IHNldCBmaWx0ZXJzIHRvIHVubWF0Y2hlZCBlbGVtZW50c1xyXG5cdFx0XHRtYXRjaGVkQ291bnQgKz0gaTtcclxuXHRcdFx0aWYgKCBieVNldCAmJiBpICE9PSBtYXRjaGVkQ291bnQgKSB7XHJcblx0XHRcdFx0aiA9IDA7XHJcblx0XHRcdFx0d2hpbGUgKCAobWF0Y2hlciA9IHNldE1hdGNoZXJzW2orK10pICkge1xyXG5cdFx0XHRcdFx0bWF0Y2hlciggdW5tYXRjaGVkLCBzZXRNYXRjaGVkLCBjb250ZXh0LCB4bWwgKTtcclxuXHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdGlmICggc2VlZCApIHtcclxuXHRcdFx0XHRcdC8vIFJlaW50ZWdyYXRlIGVsZW1lbnQgbWF0Y2hlcyB0byBlbGltaW5hdGUgdGhlIG5lZWQgZm9yIHNvcnRpbmdcclxuXHRcdFx0XHRcdGlmICggbWF0Y2hlZENvdW50ID4gMCApIHtcclxuXHRcdFx0XHRcdFx0d2hpbGUgKCBpLS0gKSB7XHJcblx0XHRcdFx0XHRcdFx0aWYgKCAhKHVubWF0Y2hlZFtpXSB8fCBzZXRNYXRjaGVkW2ldKSApIHtcclxuXHRcdFx0XHRcdFx0XHRcdHNldE1hdGNoZWRbaV0gPSBwb3AuY2FsbCggcmVzdWx0cyApO1xyXG5cdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdC8vIERpc2NhcmQgaW5kZXggcGxhY2Vob2xkZXIgdmFsdWVzIHRvIGdldCBvbmx5IGFjdHVhbCBtYXRjaGVzXHJcblx0XHRcdFx0XHRzZXRNYXRjaGVkID0gY29uZGVuc2UoIHNldE1hdGNoZWQgKTtcclxuXHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdC8vIEFkZCBtYXRjaGVzIHRvIHJlc3VsdHNcclxuXHRcdFx0XHRwdXNoLmFwcGx5KCByZXN1bHRzLCBzZXRNYXRjaGVkICk7XHJcblxyXG5cdFx0XHRcdC8vIFNlZWRsZXNzIHNldCBtYXRjaGVzIHN1Y2NlZWRpbmcgbXVsdGlwbGUgc3VjY2Vzc2Z1bCBtYXRjaGVycyBzdGlwdWxhdGUgc29ydGluZ1xyXG5cdFx0XHRcdGlmICggb3V0ZXJtb3N0ICYmICFzZWVkICYmIHNldE1hdGNoZWQubGVuZ3RoID4gMCAmJlxyXG5cdFx0XHRcdFx0KCBtYXRjaGVkQ291bnQgKyBzZXRNYXRjaGVycy5sZW5ndGggKSA+IDEgKSB7XHJcblxyXG5cdFx0XHRcdFx0U2l6emxlLnVuaXF1ZVNvcnQoIHJlc3VsdHMgKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdC8vIE92ZXJyaWRlIG1hbmlwdWxhdGlvbiBvZiBnbG9iYWxzIGJ5IG5lc3RlZCBtYXRjaGVyc1xyXG5cdFx0XHRpZiAoIG91dGVybW9zdCApIHtcclxuXHRcdFx0XHRkaXJydW5zID0gZGlycnVuc1VuaXF1ZTtcclxuXHRcdFx0XHRvdXRlcm1vc3RDb250ZXh0ID0gY29udGV4dEJhY2t1cDtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0cmV0dXJuIHVubWF0Y2hlZDtcclxuXHRcdH07XHJcblxyXG5cdHJldHVybiBieVNldCA/XHJcblx0XHRtYXJrRnVuY3Rpb24oIHN1cGVyTWF0Y2hlciApIDpcclxuXHRcdHN1cGVyTWF0Y2hlcjtcclxufVxyXG5cclxuY29tcGlsZSA9IFNpenpsZS5jb21waWxlID0gZnVuY3Rpb24oIHNlbGVjdG9yLCBtYXRjaCAvKiBJbnRlcm5hbCBVc2UgT25seSAqLyApIHtcclxuXHR2YXIgaSxcclxuXHRcdHNldE1hdGNoZXJzID0gW10sXHJcblx0XHRlbGVtZW50TWF0Y2hlcnMgPSBbXSxcclxuXHRcdGNhY2hlZCA9IGNvbXBpbGVyQ2FjaGVbIHNlbGVjdG9yICsgXCIgXCIgXTtcclxuXHJcblx0aWYgKCAhY2FjaGVkICkge1xyXG5cdFx0Ly8gR2VuZXJhdGUgYSBmdW5jdGlvbiBvZiByZWN1cnNpdmUgZnVuY3Rpb25zIHRoYXQgY2FuIGJlIHVzZWQgdG8gY2hlY2sgZWFjaCBlbGVtZW50XHJcblx0XHRpZiAoICFtYXRjaCApIHtcclxuXHRcdFx0bWF0Y2ggPSB0b2tlbml6ZSggc2VsZWN0b3IgKTtcclxuXHRcdH1cclxuXHRcdGkgPSBtYXRjaC5sZW5ndGg7XHJcblx0XHR3aGlsZSAoIGktLSApIHtcclxuXHRcdFx0Y2FjaGVkID0gbWF0Y2hlckZyb21Ub2tlbnMoIG1hdGNoW2ldICk7XHJcblx0XHRcdGlmICggY2FjaGVkWyBleHBhbmRvIF0gKSB7XHJcblx0XHRcdFx0c2V0TWF0Y2hlcnMucHVzaCggY2FjaGVkICk7XHJcblx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0ZWxlbWVudE1hdGNoZXJzLnB1c2goIGNhY2hlZCApO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblxyXG5cdFx0Ly8gQ2FjaGUgdGhlIGNvbXBpbGVkIGZ1bmN0aW9uXHJcblx0XHRjYWNoZWQgPSBjb21waWxlckNhY2hlKCBzZWxlY3RvciwgbWF0Y2hlckZyb21Hcm91cE1hdGNoZXJzKCBlbGVtZW50TWF0Y2hlcnMsIHNldE1hdGNoZXJzICkgKTtcclxuXHJcblx0XHQvLyBTYXZlIHNlbGVjdG9yIGFuZCB0b2tlbml6YXRpb25cclxuXHRcdGNhY2hlZC5zZWxlY3RvciA9IHNlbGVjdG9yO1xyXG5cdH1cclxuXHRyZXR1cm4gY2FjaGVkO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEEgbG93LWxldmVsIHNlbGVjdGlvbiBmdW5jdGlvbiB0aGF0IHdvcmtzIHdpdGggU2l6emxlJ3MgY29tcGlsZWRcclxuICogIHNlbGVjdG9yIGZ1bmN0aW9uc1xyXG4gKiBAcGFyYW0ge1N0cmluZ3xGdW5jdGlvbn0gc2VsZWN0b3IgQSBzZWxlY3RvciBvciBhIHByZS1jb21waWxlZFxyXG4gKiAgc2VsZWN0b3IgZnVuY3Rpb24gYnVpbHQgd2l0aCBTaXp6bGUuY29tcGlsZVxyXG4gKiBAcGFyYW0ge0VsZW1lbnR9IGNvbnRleHRcclxuICogQHBhcmFtIHtBcnJheX0gW3Jlc3VsdHNdXHJcbiAqIEBwYXJhbSB7QXJyYXl9IFtzZWVkXSBBIHNldCBvZiBlbGVtZW50cyB0byBtYXRjaCBhZ2FpbnN0XHJcbiAqL1xyXG5zZWxlY3QgPSBTaXp6bGUuc2VsZWN0ID0gZnVuY3Rpb24oIHNlbGVjdG9yLCBjb250ZXh0LCByZXN1bHRzLCBzZWVkICkge1xyXG5cdHZhciBpLCB0b2tlbnMsIHRva2VuLCB0eXBlLCBmaW5kLFxyXG5cdFx0Y29tcGlsZWQgPSB0eXBlb2Ygc2VsZWN0b3IgPT09IFwiZnVuY3Rpb25cIiAmJiBzZWxlY3RvcixcclxuXHRcdG1hdGNoID0gIXNlZWQgJiYgdG9rZW5pemUoIChzZWxlY3RvciA9IGNvbXBpbGVkLnNlbGVjdG9yIHx8IHNlbGVjdG9yKSApO1xyXG5cclxuXHRyZXN1bHRzID0gcmVzdWx0cyB8fCBbXTtcclxuXHJcblx0Ly8gVHJ5IHRvIG1pbmltaXplIG9wZXJhdGlvbnMgaWYgdGhlcmUgaXMgbm8gc2VlZCBhbmQgb25seSBvbmUgZ3JvdXBcclxuXHRpZiAoIG1hdGNoLmxlbmd0aCA9PT0gMSApIHtcclxuXHJcblx0XHQvLyBUYWtlIGEgc2hvcnRjdXQgYW5kIHNldCB0aGUgY29udGV4dCBpZiB0aGUgcm9vdCBzZWxlY3RvciBpcyBhbiBJRFxyXG5cdFx0dG9rZW5zID0gbWF0Y2hbMF0gPSBtYXRjaFswXS5zbGljZSggMCApO1xyXG5cdFx0aWYgKCB0b2tlbnMubGVuZ3RoID4gMiAmJiAodG9rZW4gPSB0b2tlbnNbMF0pLnR5cGUgPT09IFwiSURcIiAmJlxyXG5cdFx0XHRcdHN1cHBvcnQuZ2V0QnlJZCAmJiBjb250ZXh0Lm5vZGVUeXBlID09PSA5ICYmIGRvY3VtZW50SXNIVE1MICYmXHJcblx0XHRcdFx0RXhwci5yZWxhdGl2ZVsgdG9rZW5zWzFdLnR5cGUgXSApIHtcclxuXHJcblx0XHRcdGNvbnRleHQgPSAoIEV4cHIuZmluZFtcIklEXCJdKCB0b2tlbi5tYXRjaGVzWzBdLnJlcGxhY2UocnVuZXNjYXBlLCBmdW5lc2NhcGUpLCBjb250ZXh0ICkgfHwgW10gKVswXTtcclxuXHRcdFx0aWYgKCAhY29udGV4dCApIHtcclxuXHRcdFx0XHRyZXR1cm4gcmVzdWx0cztcclxuXHJcblx0XHRcdC8vIFByZWNvbXBpbGVkIG1hdGNoZXJzIHdpbGwgc3RpbGwgdmVyaWZ5IGFuY2VzdHJ5LCBzbyBzdGVwIHVwIGEgbGV2ZWxcclxuXHRcdFx0fSBlbHNlIGlmICggY29tcGlsZWQgKSB7XHJcblx0XHRcdFx0Y29udGV4dCA9IGNvbnRleHQucGFyZW50Tm9kZTtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0c2VsZWN0b3IgPSBzZWxlY3Rvci5zbGljZSggdG9rZW5zLnNoaWZ0KCkudmFsdWUubGVuZ3RoICk7XHJcblx0XHR9XHJcblxyXG5cdFx0Ly8gRmV0Y2ggYSBzZWVkIHNldCBmb3IgcmlnaHQtdG8tbGVmdCBtYXRjaGluZ1xyXG5cdFx0aSA9IG1hdGNoRXhwcltcIm5lZWRzQ29udGV4dFwiXS50ZXN0KCBzZWxlY3RvciApID8gMCA6IHRva2Vucy5sZW5ndGg7XHJcblx0XHR3aGlsZSAoIGktLSApIHtcclxuXHRcdFx0dG9rZW4gPSB0b2tlbnNbaV07XHJcblxyXG5cdFx0XHQvLyBBYm9ydCBpZiB3ZSBoaXQgYSBjb21iaW5hdG9yXHJcblx0XHRcdGlmICggRXhwci5yZWxhdGl2ZVsgKHR5cGUgPSB0b2tlbi50eXBlKSBdICkge1xyXG5cdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHR9XHJcblx0XHRcdGlmICggKGZpbmQgPSBFeHByLmZpbmRbIHR5cGUgXSkgKSB7XHJcblx0XHRcdFx0Ly8gU2VhcmNoLCBleHBhbmRpbmcgY29udGV4dCBmb3IgbGVhZGluZyBzaWJsaW5nIGNvbWJpbmF0b3JzXHJcblx0XHRcdFx0aWYgKCAoc2VlZCA9IGZpbmQoXHJcblx0XHRcdFx0XHR0b2tlbi5tYXRjaGVzWzBdLnJlcGxhY2UoIHJ1bmVzY2FwZSwgZnVuZXNjYXBlICksXHJcblx0XHRcdFx0XHRyc2libGluZy50ZXN0KCB0b2tlbnNbMF0udHlwZSApICYmIHRlc3RDb250ZXh0KCBjb250ZXh0LnBhcmVudE5vZGUgKSB8fCBjb250ZXh0XHJcblx0XHRcdFx0KSkgKSB7XHJcblxyXG5cdFx0XHRcdFx0Ly8gSWYgc2VlZCBpcyBlbXB0eSBvciBubyB0b2tlbnMgcmVtYWluLCB3ZSBjYW4gcmV0dXJuIGVhcmx5XHJcblx0XHRcdFx0XHR0b2tlbnMuc3BsaWNlKCBpLCAxICk7XHJcblx0XHRcdFx0XHRzZWxlY3RvciA9IHNlZWQubGVuZ3RoICYmIHRvU2VsZWN0b3IoIHRva2VucyApO1xyXG5cdFx0XHRcdFx0aWYgKCAhc2VsZWN0b3IgKSB7XHJcblx0XHRcdFx0XHRcdHB1c2guYXBwbHkoIHJlc3VsdHMsIHNlZWQgKTtcclxuXHRcdFx0XHRcdFx0cmV0dXJuIHJlc3VsdHM7XHJcblx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHQvLyBDb21waWxlIGFuZCBleGVjdXRlIGEgZmlsdGVyaW5nIGZ1bmN0aW9uIGlmIG9uZSBpcyBub3QgcHJvdmlkZWRcclxuXHQvLyBQcm92aWRlIGBtYXRjaGAgdG8gYXZvaWQgcmV0b2tlbml6YXRpb24gaWYgd2UgbW9kaWZpZWQgdGhlIHNlbGVjdG9yIGFib3ZlXHJcblx0KCBjb21waWxlZCB8fCBjb21waWxlKCBzZWxlY3RvciwgbWF0Y2ggKSApKFxyXG5cdFx0c2VlZCxcclxuXHRcdGNvbnRleHQsXHJcblx0XHQhZG9jdW1lbnRJc0hUTUwsXHJcblx0XHRyZXN1bHRzLFxyXG5cdFx0cnNpYmxpbmcudGVzdCggc2VsZWN0b3IgKSAmJiB0ZXN0Q29udGV4dCggY29udGV4dC5wYXJlbnROb2RlICkgfHwgY29udGV4dFxyXG5cdCk7XHJcblx0cmV0dXJuIHJlc3VsdHM7XHJcbn07XHJcblxyXG4vLyBPbmUtdGltZSBhc3NpZ25tZW50c1xyXG5cclxuLy8gU29ydCBzdGFiaWxpdHlcclxuc3VwcG9ydC5zb3J0U3RhYmxlID0gZXhwYW5kby5zcGxpdChcIlwiKS5zb3J0KCBzb3J0T3JkZXIgKS5qb2luKFwiXCIpID09PSBleHBhbmRvO1xyXG5cclxuLy8gU3VwcG9ydDogQ2hyb21lIDE0LTM1K1xyXG4vLyBBbHdheXMgYXNzdW1lIGR1cGxpY2F0ZXMgaWYgdGhleSBhcmVuJ3QgcGFzc2VkIHRvIHRoZSBjb21wYXJpc29uIGZ1bmN0aW9uXHJcbnN1cHBvcnQuZGV0ZWN0RHVwbGljYXRlcyA9ICEhaGFzRHVwbGljYXRlO1xyXG5cclxuLy8gSW5pdGlhbGl6ZSBhZ2FpbnN0IHRoZSBkZWZhdWx0IGRvY3VtZW50XHJcbnNldERvY3VtZW50KCk7XHJcblxyXG4vLyBTdXBwb3J0OiBXZWJraXQ8NTM3LjMyIC0gU2FmYXJpIDYuMC4zL0Nocm9tZSAyNSAoZml4ZWQgaW4gQ2hyb21lIDI3KVxyXG4vLyBEZXRhY2hlZCBub2RlcyBjb25mb3VuZGluZ2x5IGZvbGxvdyAqZWFjaCBvdGhlcipcclxuc3VwcG9ydC5zb3J0RGV0YWNoZWQgPSBhc3NlcnQoZnVuY3Rpb24oIGRpdjEgKSB7XHJcblx0Ly8gU2hvdWxkIHJldHVybiAxLCBidXQgcmV0dXJucyA0IChmb2xsb3dpbmcpXHJcblx0cmV0dXJuIGRpdjEuY29tcGFyZURvY3VtZW50UG9zaXRpb24oIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIikgKSAmIDE7XHJcbn0pO1xyXG5cclxuLy8gU3VwcG9ydDogSUU8OFxyXG4vLyBQcmV2ZW50IGF0dHJpYnV0ZS9wcm9wZXJ0eSBcImludGVycG9sYXRpb25cIlxyXG4vLyBodHRwOi8vbXNkbi5taWNyb3NvZnQuY29tL2VuLXVzL2xpYnJhcnkvbXM1MzY0MjklMjhWUy44NSUyOS5hc3B4XHJcbmlmICggIWFzc2VydChmdW5jdGlvbiggZGl2ICkge1xyXG5cdGRpdi5pbm5lckhUTUwgPSBcIjxhIGhyZWY9JyMnPjwvYT5cIjtcclxuXHRyZXR1cm4gZGl2LmZpcnN0Q2hpbGQuZ2V0QXR0cmlidXRlKFwiaHJlZlwiKSA9PT0gXCIjXCIgO1xyXG59KSApIHtcclxuXHRhZGRIYW5kbGUoIFwidHlwZXxocmVmfGhlaWdodHx3aWR0aFwiLCBmdW5jdGlvbiggZWxlbSwgbmFtZSwgaXNYTUwgKSB7XHJcblx0XHRpZiAoICFpc1hNTCApIHtcclxuXHRcdFx0cmV0dXJuIGVsZW0uZ2V0QXR0cmlidXRlKCBuYW1lLCBuYW1lLnRvTG93ZXJDYXNlKCkgPT09IFwidHlwZVwiID8gMSA6IDIgKTtcclxuXHRcdH1cclxuXHR9KTtcclxufVxyXG5cclxuLy8gU3VwcG9ydDogSUU8OVxyXG4vLyBVc2UgZGVmYXVsdFZhbHVlIGluIHBsYWNlIG9mIGdldEF0dHJpYnV0ZShcInZhbHVlXCIpXHJcbmlmICggIXN1cHBvcnQuYXR0cmlidXRlcyB8fCAhYXNzZXJ0KGZ1bmN0aW9uKCBkaXYgKSB7XHJcblx0ZGl2LmlubmVySFRNTCA9IFwiPGlucHV0Lz5cIjtcclxuXHRkaXYuZmlyc3RDaGlsZC5zZXRBdHRyaWJ1dGUoIFwidmFsdWVcIiwgXCJcIiApO1xyXG5cdHJldHVybiBkaXYuZmlyc3RDaGlsZC5nZXRBdHRyaWJ1dGUoIFwidmFsdWVcIiApID09PSBcIlwiO1xyXG59KSApIHtcclxuXHRhZGRIYW5kbGUoIFwidmFsdWVcIiwgZnVuY3Rpb24oIGVsZW0sIG5hbWUsIGlzWE1MICkge1xyXG5cdFx0aWYgKCAhaXNYTUwgJiYgZWxlbS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpID09PSBcImlucHV0XCIgKSB7XHJcblx0XHRcdHJldHVybiBlbGVtLmRlZmF1bHRWYWx1ZTtcclxuXHRcdH1cclxuXHR9KTtcclxufVxyXG5cclxuLy8gU3VwcG9ydDogSUU8OVxyXG4vLyBVc2UgZ2V0QXR0cmlidXRlTm9kZSB0byBmZXRjaCBib29sZWFucyB3aGVuIGdldEF0dHJpYnV0ZSBsaWVzXHJcbmlmICggIWFzc2VydChmdW5jdGlvbiggZGl2ICkge1xyXG5cdHJldHVybiBkaXYuZ2V0QXR0cmlidXRlKFwiZGlzYWJsZWRcIikgPT0gbnVsbDtcclxufSkgKSB7XHJcblx0YWRkSGFuZGxlKCBib29sZWFucywgZnVuY3Rpb24oIGVsZW0sIG5hbWUsIGlzWE1MICkge1xyXG5cdFx0dmFyIHZhbDtcclxuXHRcdGlmICggIWlzWE1MICkge1xyXG5cdFx0XHRyZXR1cm4gZWxlbVsgbmFtZSBdID09PSB0cnVlID8gbmFtZS50b0xvd2VyQ2FzZSgpIDpcclxuXHRcdFx0XHRcdCh2YWwgPSBlbGVtLmdldEF0dHJpYnV0ZU5vZGUoIG5hbWUgKSkgJiYgdmFsLnNwZWNpZmllZCA/XHJcblx0XHRcdFx0XHR2YWwudmFsdWUgOlxyXG5cdFx0XHRcdG51bGw7XHJcblx0XHR9XHJcblx0fSk7XHJcbn1cclxuXHJcbnJldHVybiBTaXp6bGU7XHJcblxyXG59KSggd2luZG93ICk7XHJcblxyXG5cclxuXHJcbmpRdWVyeS5maW5kID0gU2l6emxlO1xyXG5qUXVlcnkuZXhwciA9IFNpenpsZS5zZWxlY3RvcnM7XHJcbmpRdWVyeS5leHByW1wiOlwiXSA9IGpRdWVyeS5leHByLnBzZXVkb3M7XHJcbmpRdWVyeS51bmlxdWUgPSBTaXp6bGUudW5pcXVlU29ydDtcclxualF1ZXJ5LnRleHQgPSBTaXp6bGUuZ2V0VGV4dDtcclxualF1ZXJ5LmlzWE1MRG9jID0gU2l6emxlLmlzWE1MO1xyXG5qUXVlcnkuY29udGFpbnMgPSBTaXp6bGUuY29udGFpbnM7XHJcblxyXG5cclxuXHJcbnZhciBybmVlZHNDb250ZXh0ID0galF1ZXJ5LmV4cHIubWF0Y2gubmVlZHNDb250ZXh0O1xyXG5cclxudmFyIHJzaW5nbGVUYWcgPSAoL148KFxcdyspXFxzKlxcLz8+KD86PFxcL1xcMT58KSQvKTtcclxuXHJcblxyXG5cclxudmFyIHJpc1NpbXBsZSA9IC9eLlteOiNcXFtcXC4sXSokLztcclxuXHJcbi8vIEltcGxlbWVudCB0aGUgaWRlbnRpY2FsIGZ1bmN0aW9uYWxpdHkgZm9yIGZpbHRlciBhbmQgbm90XHJcbmZ1bmN0aW9uIHdpbm5vdyggZWxlbWVudHMsIHF1YWxpZmllciwgbm90ICkge1xyXG5cdGlmICggalF1ZXJ5LmlzRnVuY3Rpb24oIHF1YWxpZmllciApICkge1xyXG5cdFx0cmV0dXJuIGpRdWVyeS5ncmVwKCBlbGVtZW50cywgZnVuY3Rpb24oIGVsZW0sIGkgKSB7XHJcblx0XHRcdC8qIGpzaGludCAtVzAxOCAqL1xyXG5cdFx0XHRyZXR1cm4gISFxdWFsaWZpZXIuY2FsbCggZWxlbSwgaSwgZWxlbSApICE9PSBub3Q7XHJcblx0XHR9KTtcclxuXHJcblx0fVxyXG5cclxuXHRpZiAoIHF1YWxpZmllci5ub2RlVHlwZSApIHtcclxuXHRcdHJldHVybiBqUXVlcnkuZ3JlcCggZWxlbWVudHMsIGZ1bmN0aW9uKCBlbGVtICkge1xyXG5cdFx0XHRyZXR1cm4gKCBlbGVtID09PSBxdWFsaWZpZXIgKSAhPT0gbm90O1xyXG5cdFx0fSk7XHJcblxyXG5cdH1cclxuXHJcblx0aWYgKCB0eXBlb2YgcXVhbGlmaWVyID09PSBcInN0cmluZ1wiICkge1xyXG5cdFx0aWYgKCByaXNTaW1wbGUudGVzdCggcXVhbGlmaWVyICkgKSB7XHJcblx0XHRcdHJldHVybiBqUXVlcnkuZmlsdGVyKCBxdWFsaWZpZXIsIGVsZW1lbnRzLCBub3QgKTtcclxuXHRcdH1cclxuXHJcblx0XHRxdWFsaWZpZXIgPSBqUXVlcnkuZmlsdGVyKCBxdWFsaWZpZXIsIGVsZW1lbnRzICk7XHJcblx0fVxyXG5cclxuXHRyZXR1cm4galF1ZXJ5LmdyZXAoIGVsZW1lbnRzLCBmdW5jdGlvbiggZWxlbSApIHtcclxuXHRcdHJldHVybiAoIGluZGV4T2YuY2FsbCggcXVhbGlmaWVyLCBlbGVtICkgPj0gMCApICE9PSBub3Q7XHJcblx0fSk7XHJcbn1cclxuXHJcbmpRdWVyeS5maWx0ZXIgPSBmdW5jdGlvbiggZXhwciwgZWxlbXMsIG5vdCApIHtcclxuXHR2YXIgZWxlbSA9IGVsZW1zWyAwIF07XHJcblxyXG5cdGlmICggbm90ICkge1xyXG5cdFx0ZXhwciA9IFwiOm5vdChcIiArIGV4cHIgKyBcIilcIjtcclxuXHR9XHJcblxyXG5cdHJldHVybiBlbGVtcy5sZW5ndGggPT09IDEgJiYgZWxlbS5ub2RlVHlwZSA9PT0gMSA/XHJcblx0XHRqUXVlcnkuZmluZC5tYXRjaGVzU2VsZWN0b3IoIGVsZW0sIGV4cHIgKSA/IFsgZWxlbSBdIDogW10gOlxyXG5cdFx0alF1ZXJ5LmZpbmQubWF0Y2hlcyggZXhwciwgalF1ZXJ5LmdyZXAoIGVsZW1zLCBmdW5jdGlvbiggZWxlbSApIHtcclxuXHRcdFx0cmV0dXJuIGVsZW0ubm9kZVR5cGUgPT09IDE7XHJcblx0XHR9KSk7XHJcbn07XHJcblxyXG5qUXVlcnkuZm4uZXh0ZW5kKHtcclxuXHRmaW5kOiBmdW5jdGlvbiggc2VsZWN0b3IgKSB7XHJcblx0XHR2YXIgaSxcclxuXHRcdFx0bGVuID0gdGhpcy5sZW5ndGgsXHJcblx0XHRcdHJldCA9IFtdLFxyXG5cdFx0XHRzZWxmID0gdGhpcztcclxuXHJcblx0XHRpZiAoIHR5cGVvZiBzZWxlY3RvciAhPT0gXCJzdHJpbmdcIiApIHtcclxuXHRcdFx0cmV0dXJuIHRoaXMucHVzaFN0YWNrKCBqUXVlcnkoIHNlbGVjdG9yICkuZmlsdGVyKGZ1bmN0aW9uKCkge1xyXG5cdFx0XHRcdGZvciAoIGkgPSAwOyBpIDwgbGVuOyBpKysgKSB7XHJcblx0XHRcdFx0XHRpZiAoIGpRdWVyeS5jb250YWlucyggc2VsZlsgaSBdLCB0aGlzICkgKSB7XHJcblx0XHRcdFx0XHRcdHJldHVybiB0cnVlO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0fSkgKTtcclxuXHRcdH1cclxuXHJcblx0XHRmb3IgKCBpID0gMDsgaSA8IGxlbjsgaSsrICkge1xyXG5cdFx0XHRqUXVlcnkuZmluZCggc2VsZWN0b3IsIHNlbGZbIGkgXSwgcmV0ICk7XHJcblx0XHR9XHJcblxyXG5cdFx0Ly8gTmVlZGVkIGJlY2F1c2UgJCggc2VsZWN0b3IsIGNvbnRleHQgKSBiZWNvbWVzICQoIGNvbnRleHQgKS5maW5kKCBzZWxlY3RvciApXHJcblx0XHRyZXQgPSB0aGlzLnB1c2hTdGFjayggbGVuID4gMSA/IGpRdWVyeS51bmlxdWUoIHJldCApIDogcmV0ICk7XHJcblx0XHRyZXQuc2VsZWN0b3IgPSB0aGlzLnNlbGVjdG9yID8gdGhpcy5zZWxlY3RvciArIFwiIFwiICsgc2VsZWN0b3IgOiBzZWxlY3RvcjtcclxuXHRcdHJldHVybiByZXQ7XHJcblx0fSxcclxuXHRmaWx0ZXI6IGZ1bmN0aW9uKCBzZWxlY3RvciApIHtcclxuXHRcdHJldHVybiB0aGlzLnB1c2hTdGFjayggd2lubm93KHRoaXMsIHNlbGVjdG9yIHx8IFtdLCBmYWxzZSkgKTtcclxuXHR9LFxyXG5cdG5vdDogZnVuY3Rpb24oIHNlbGVjdG9yICkge1xyXG5cdFx0cmV0dXJuIHRoaXMucHVzaFN0YWNrKCB3aW5ub3codGhpcywgc2VsZWN0b3IgfHwgW10sIHRydWUpICk7XHJcblx0fSxcclxuXHRpczogZnVuY3Rpb24oIHNlbGVjdG9yICkge1xyXG5cdFx0cmV0dXJuICEhd2lubm93KFxyXG5cdFx0XHR0aGlzLFxyXG5cclxuXHRcdFx0Ly8gSWYgdGhpcyBpcyBhIHBvc2l0aW9uYWwvcmVsYXRpdmUgc2VsZWN0b3IsIGNoZWNrIG1lbWJlcnNoaXAgaW4gdGhlIHJldHVybmVkIHNldFxyXG5cdFx0XHQvLyBzbyAkKFwicDpmaXJzdFwiKS5pcyhcInA6bGFzdFwiKSB3b24ndCByZXR1cm4gdHJ1ZSBmb3IgYSBkb2Mgd2l0aCB0d28gXCJwXCIuXHJcblx0XHRcdHR5cGVvZiBzZWxlY3RvciA9PT0gXCJzdHJpbmdcIiAmJiBybmVlZHNDb250ZXh0LnRlc3QoIHNlbGVjdG9yICkgP1xyXG5cdFx0XHRcdGpRdWVyeSggc2VsZWN0b3IgKSA6XHJcblx0XHRcdFx0c2VsZWN0b3IgfHwgW10sXHJcblx0XHRcdGZhbHNlXHJcblx0XHQpLmxlbmd0aDtcclxuXHR9XHJcbn0pO1xyXG5cclxuXHJcbi8vIEluaXRpYWxpemUgYSBqUXVlcnkgb2JqZWN0XHJcblxyXG5cclxuLy8gQSBjZW50cmFsIHJlZmVyZW5jZSB0byB0aGUgcm9vdCBqUXVlcnkoZG9jdW1lbnQpXHJcbnZhciByb290alF1ZXJ5LFxyXG5cclxuXHQvLyBBIHNpbXBsZSB3YXkgdG8gY2hlY2sgZm9yIEhUTUwgc3RyaW5nc1xyXG5cdC8vIFByaW9yaXRpemUgI2lkIG92ZXIgPHRhZz4gdG8gYXZvaWQgWFNTIHZpYSBsb2NhdGlvbi5oYXNoICgjOTUyMSlcclxuXHQvLyBTdHJpY3QgSFRNTCByZWNvZ25pdGlvbiAoIzExMjkwOiBtdXN0IHN0YXJ0IHdpdGggPClcclxuXHRycXVpY2tFeHByID0gL14oPzpcXHMqKDxbXFx3XFxXXSs+KVtePl0qfCMoW1xcdy1dKikpJC8sXHJcblxyXG5cdGluaXQgPSBqUXVlcnkuZm4uaW5pdCA9IGZ1bmN0aW9uKCBzZWxlY3RvciwgY29udGV4dCApIHtcclxuXHRcdHZhciBtYXRjaCwgZWxlbTtcclxuXHJcblx0XHQvLyBIQU5ETEU6ICQoXCJcIiksICQobnVsbCksICQodW5kZWZpbmVkKSwgJChmYWxzZSlcclxuXHRcdGlmICggIXNlbGVjdG9yICkge1xyXG5cdFx0XHRyZXR1cm4gdGhpcztcclxuXHRcdH1cclxuXHJcblx0XHQvLyBIYW5kbGUgSFRNTCBzdHJpbmdzXHJcblx0XHRpZiAoIHR5cGVvZiBzZWxlY3RvciA9PT0gXCJzdHJpbmdcIiApIHtcclxuXHRcdFx0aWYgKCBzZWxlY3RvclswXSA9PT0gXCI8XCIgJiYgc2VsZWN0b3JbIHNlbGVjdG9yLmxlbmd0aCAtIDEgXSA9PT0gXCI+XCIgJiYgc2VsZWN0b3IubGVuZ3RoID49IDMgKSB7XHJcblx0XHRcdFx0Ly8gQXNzdW1lIHRoYXQgc3RyaW5ncyB0aGF0IHN0YXJ0IGFuZCBlbmQgd2l0aCA8PiBhcmUgSFRNTCBhbmQgc2tpcCB0aGUgcmVnZXggY2hlY2tcclxuXHRcdFx0XHRtYXRjaCA9IFsgbnVsbCwgc2VsZWN0b3IsIG51bGwgXTtcclxuXHJcblx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0bWF0Y2ggPSBycXVpY2tFeHByLmV4ZWMoIHNlbGVjdG9yICk7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdC8vIE1hdGNoIGh0bWwgb3IgbWFrZSBzdXJlIG5vIGNvbnRleHQgaXMgc3BlY2lmaWVkIGZvciAjaWRcclxuXHRcdFx0aWYgKCBtYXRjaCAmJiAobWF0Y2hbMV0gfHwgIWNvbnRleHQpICkge1xyXG5cclxuXHRcdFx0XHQvLyBIQU5ETEU6ICQoaHRtbCkgLT4gJChhcnJheSlcclxuXHRcdFx0XHRpZiAoIG1hdGNoWzFdICkge1xyXG5cdFx0XHRcdFx0Y29udGV4dCA9IGNvbnRleHQgaW5zdGFuY2VvZiBqUXVlcnkgPyBjb250ZXh0WzBdIDogY29udGV4dDtcclxuXHJcblx0XHRcdFx0XHQvLyBPcHRpb24gdG8gcnVuIHNjcmlwdHMgaXMgdHJ1ZSBmb3IgYmFjay1jb21wYXRcclxuXHRcdFx0XHRcdC8vIEludGVudGlvbmFsbHkgbGV0IHRoZSBlcnJvciBiZSB0aHJvd24gaWYgcGFyc2VIVE1MIGlzIG5vdCBwcmVzZW50XHJcblx0XHRcdFx0XHRqUXVlcnkubWVyZ2UoIHRoaXMsIGpRdWVyeS5wYXJzZUhUTUwoXHJcblx0XHRcdFx0XHRcdG1hdGNoWzFdLFxyXG5cdFx0XHRcdFx0XHRjb250ZXh0ICYmIGNvbnRleHQubm9kZVR5cGUgPyBjb250ZXh0Lm93bmVyRG9jdW1lbnQgfHwgY29udGV4dCA6IGRvY3VtZW50LFxyXG5cdFx0XHRcdFx0XHR0cnVlXHJcblx0XHRcdFx0XHQpICk7XHJcblxyXG5cdFx0XHRcdFx0Ly8gSEFORExFOiAkKGh0bWwsIHByb3BzKVxyXG5cdFx0XHRcdFx0aWYgKCByc2luZ2xlVGFnLnRlc3QoIG1hdGNoWzFdICkgJiYgalF1ZXJ5LmlzUGxhaW5PYmplY3QoIGNvbnRleHQgKSApIHtcclxuXHRcdFx0XHRcdFx0Zm9yICggbWF0Y2ggaW4gY29udGV4dCApIHtcclxuXHRcdFx0XHRcdFx0XHQvLyBQcm9wZXJ0aWVzIG9mIGNvbnRleHQgYXJlIGNhbGxlZCBhcyBtZXRob2RzIGlmIHBvc3NpYmxlXHJcblx0XHRcdFx0XHRcdFx0aWYgKCBqUXVlcnkuaXNGdW5jdGlvbiggdGhpc1sgbWF0Y2ggXSApICkge1xyXG5cdFx0XHRcdFx0XHRcdFx0dGhpc1sgbWF0Y2ggXSggY29udGV4dFsgbWF0Y2ggXSApO1xyXG5cclxuXHRcdFx0XHRcdFx0XHQvLyAuLi5hbmQgb3RoZXJ3aXNlIHNldCBhcyBhdHRyaWJ1dGVzXHJcblx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdFx0XHRcdHRoaXMuYXR0ciggbWF0Y2gsIGNvbnRleHRbIG1hdGNoIF0gKTtcclxuXHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRyZXR1cm4gdGhpcztcclxuXHJcblx0XHRcdFx0Ly8gSEFORExFOiAkKCNpZClcclxuXHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0ZWxlbSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCBtYXRjaFsyXSApO1xyXG5cclxuXHRcdFx0XHRcdC8vIFN1cHBvcnQ6IEJsYWNrYmVycnkgNC42XHJcblx0XHRcdFx0XHQvLyBnRUJJRCByZXR1cm5zIG5vZGVzIG5vIGxvbmdlciBpbiB0aGUgZG9jdW1lbnQgKCM2OTYzKVxyXG5cdFx0XHRcdFx0aWYgKCBlbGVtICYmIGVsZW0ucGFyZW50Tm9kZSApIHtcclxuXHRcdFx0XHRcdFx0Ly8gSW5qZWN0IHRoZSBlbGVtZW50IGRpcmVjdGx5IGludG8gdGhlIGpRdWVyeSBvYmplY3RcclxuXHRcdFx0XHRcdFx0dGhpcy5sZW5ndGggPSAxO1xyXG5cdFx0XHRcdFx0XHR0aGlzWzBdID0gZWxlbTtcclxuXHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHR0aGlzLmNvbnRleHQgPSBkb2N1bWVudDtcclxuXHRcdFx0XHRcdHRoaXMuc2VsZWN0b3IgPSBzZWxlY3RvcjtcclxuXHRcdFx0XHRcdHJldHVybiB0aGlzO1xyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdC8vIEhBTkRMRTogJChleHByLCAkKC4uLikpXHJcblx0XHRcdH0gZWxzZSBpZiAoICFjb250ZXh0IHx8IGNvbnRleHQuanF1ZXJ5ICkge1xyXG5cdFx0XHRcdHJldHVybiAoIGNvbnRleHQgfHwgcm9vdGpRdWVyeSApLmZpbmQoIHNlbGVjdG9yICk7XHJcblxyXG5cdFx0XHQvLyBIQU5ETEU6ICQoZXhwciwgY29udGV4dClcclxuXHRcdFx0Ly8gKHdoaWNoIGlzIGp1c3QgZXF1aXZhbGVudCB0bzogJChjb250ZXh0KS5maW5kKGV4cHIpXHJcblx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0cmV0dXJuIHRoaXMuY29uc3RydWN0b3IoIGNvbnRleHQgKS5maW5kKCBzZWxlY3RvciApO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0Ly8gSEFORExFOiAkKERPTUVsZW1lbnQpXHJcblx0XHR9IGVsc2UgaWYgKCBzZWxlY3Rvci5ub2RlVHlwZSApIHtcclxuXHRcdFx0dGhpcy5jb250ZXh0ID0gdGhpc1swXSA9IHNlbGVjdG9yO1xyXG5cdFx0XHR0aGlzLmxlbmd0aCA9IDE7XHJcblx0XHRcdHJldHVybiB0aGlzO1xyXG5cclxuXHRcdC8vIEhBTkRMRTogJChmdW5jdGlvbilcclxuXHRcdC8vIFNob3J0Y3V0IGZvciBkb2N1bWVudCByZWFkeVxyXG5cdFx0fSBlbHNlIGlmICggalF1ZXJ5LmlzRnVuY3Rpb24oIHNlbGVjdG9yICkgKSB7XHJcblx0XHRcdHJldHVybiB0eXBlb2Ygcm9vdGpRdWVyeS5yZWFkeSAhPT0gXCJ1bmRlZmluZWRcIiA/XHJcblx0XHRcdFx0cm9vdGpRdWVyeS5yZWFkeSggc2VsZWN0b3IgKSA6XHJcblx0XHRcdFx0Ly8gRXhlY3V0ZSBpbW1lZGlhdGVseSBpZiByZWFkeSBpcyBub3QgcHJlc2VudFxyXG5cdFx0XHRcdHNlbGVjdG9yKCBqUXVlcnkgKTtcclxuXHRcdH1cclxuXHJcblx0XHRpZiAoIHNlbGVjdG9yLnNlbGVjdG9yICE9PSB1bmRlZmluZWQgKSB7XHJcblx0XHRcdHRoaXMuc2VsZWN0b3IgPSBzZWxlY3Rvci5zZWxlY3RvcjtcclxuXHRcdFx0dGhpcy5jb250ZXh0ID0gc2VsZWN0b3IuY29udGV4dDtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4galF1ZXJ5Lm1ha2VBcnJheSggc2VsZWN0b3IsIHRoaXMgKTtcclxuXHR9O1xyXG5cclxuLy8gR2l2ZSB0aGUgaW5pdCBmdW5jdGlvbiB0aGUgalF1ZXJ5IHByb3RvdHlwZSBmb3IgbGF0ZXIgaW5zdGFudGlhdGlvblxyXG5pbml0LnByb3RvdHlwZSA9IGpRdWVyeS5mbjtcclxuXHJcbi8vIEluaXRpYWxpemUgY2VudHJhbCByZWZlcmVuY2Vcclxucm9vdGpRdWVyeSA9IGpRdWVyeSggZG9jdW1lbnQgKTtcclxuXHJcblxyXG52YXIgcnBhcmVudHNwcmV2ID0gL14oPzpwYXJlbnRzfHByZXYoPzpVbnRpbHxBbGwpKS8sXHJcblx0Ly8gTWV0aG9kcyBndWFyYW50ZWVkIHRvIHByb2R1Y2UgYSB1bmlxdWUgc2V0IHdoZW4gc3RhcnRpbmcgZnJvbSBhIHVuaXF1ZSBzZXRcclxuXHRndWFyYW50ZWVkVW5pcXVlID0ge1xyXG5cdFx0Y2hpbGRyZW46IHRydWUsXHJcblx0XHRjb250ZW50czogdHJ1ZSxcclxuXHRcdG5leHQ6IHRydWUsXHJcblx0XHRwcmV2OiB0cnVlXHJcblx0fTtcclxuXHJcbmpRdWVyeS5leHRlbmQoe1xyXG5cdGRpcjogZnVuY3Rpb24oIGVsZW0sIGRpciwgdW50aWwgKSB7XHJcblx0XHR2YXIgbWF0Y2hlZCA9IFtdLFxyXG5cdFx0XHR0cnVuY2F0ZSA9IHVudGlsICE9PSB1bmRlZmluZWQ7XHJcblxyXG5cdFx0d2hpbGUgKCAoZWxlbSA9IGVsZW1bIGRpciBdKSAmJiBlbGVtLm5vZGVUeXBlICE9PSA5ICkge1xyXG5cdFx0XHRpZiAoIGVsZW0ubm9kZVR5cGUgPT09IDEgKSB7XHJcblx0XHRcdFx0aWYgKCB0cnVuY2F0ZSAmJiBqUXVlcnkoIGVsZW0gKS5pcyggdW50aWwgKSApIHtcclxuXHRcdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRtYXRjaGVkLnB1c2goIGVsZW0gKTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdFx0cmV0dXJuIG1hdGNoZWQ7XHJcblx0fSxcclxuXHJcblx0c2libGluZzogZnVuY3Rpb24oIG4sIGVsZW0gKSB7XHJcblx0XHR2YXIgbWF0Y2hlZCA9IFtdO1xyXG5cclxuXHRcdGZvciAoIDsgbjsgbiA9IG4ubmV4dFNpYmxpbmcgKSB7XHJcblx0XHRcdGlmICggbi5ub2RlVHlwZSA9PT0gMSAmJiBuICE9PSBlbGVtICkge1xyXG5cdFx0XHRcdG1hdGNoZWQucHVzaCggbiApO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIG1hdGNoZWQ7XHJcblx0fVxyXG59KTtcclxuXHJcbmpRdWVyeS5mbi5leHRlbmQoe1xyXG5cdGhhczogZnVuY3Rpb24oIHRhcmdldCApIHtcclxuXHRcdHZhciB0YXJnZXRzID0galF1ZXJ5KCB0YXJnZXQsIHRoaXMgKSxcclxuXHRcdFx0bCA9IHRhcmdldHMubGVuZ3RoO1xyXG5cclxuXHRcdHJldHVybiB0aGlzLmZpbHRlcihmdW5jdGlvbigpIHtcclxuXHRcdFx0dmFyIGkgPSAwO1xyXG5cdFx0XHRmb3IgKCA7IGkgPCBsOyBpKysgKSB7XHJcblx0XHRcdFx0aWYgKCBqUXVlcnkuY29udGFpbnMoIHRoaXMsIHRhcmdldHNbaV0gKSApIHtcclxuXHRcdFx0XHRcdHJldHVybiB0cnVlO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0fSk7XHJcblx0fSxcclxuXHJcblx0Y2xvc2VzdDogZnVuY3Rpb24oIHNlbGVjdG9ycywgY29udGV4dCApIHtcclxuXHRcdHZhciBjdXIsXHJcblx0XHRcdGkgPSAwLFxyXG5cdFx0XHRsID0gdGhpcy5sZW5ndGgsXHJcblx0XHRcdG1hdGNoZWQgPSBbXSxcclxuXHRcdFx0cG9zID0gcm5lZWRzQ29udGV4dC50ZXN0KCBzZWxlY3RvcnMgKSB8fCB0eXBlb2Ygc2VsZWN0b3JzICE9PSBcInN0cmluZ1wiID9cclxuXHRcdFx0XHRqUXVlcnkoIHNlbGVjdG9ycywgY29udGV4dCB8fCB0aGlzLmNvbnRleHQgKSA6XHJcblx0XHRcdFx0MDtcclxuXHJcblx0XHRmb3IgKCA7IGkgPCBsOyBpKysgKSB7XHJcblx0XHRcdGZvciAoIGN1ciA9IHRoaXNbaV07IGN1ciAmJiBjdXIgIT09IGNvbnRleHQ7IGN1ciA9IGN1ci5wYXJlbnROb2RlICkge1xyXG5cdFx0XHRcdC8vIEFsd2F5cyBza2lwIGRvY3VtZW50IGZyYWdtZW50c1xyXG5cdFx0XHRcdGlmICggY3VyLm5vZGVUeXBlIDwgMTEgJiYgKHBvcyA/XHJcblx0XHRcdFx0XHRwb3MuaW5kZXgoY3VyKSA+IC0xIDpcclxuXHJcblx0XHRcdFx0XHQvLyBEb24ndCBwYXNzIG5vbi1lbGVtZW50cyB0byBTaXp6bGVcclxuXHRcdFx0XHRcdGN1ci5ub2RlVHlwZSA9PT0gMSAmJlxyXG5cdFx0XHRcdFx0XHRqUXVlcnkuZmluZC5tYXRjaGVzU2VsZWN0b3IoY3VyLCBzZWxlY3RvcnMpKSApIHtcclxuXHJcblx0XHRcdFx0XHRtYXRjaGVkLnB1c2goIGN1ciApO1xyXG5cdFx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHRoaXMucHVzaFN0YWNrKCBtYXRjaGVkLmxlbmd0aCA+IDEgPyBqUXVlcnkudW5pcXVlKCBtYXRjaGVkICkgOiBtYXRjaGVkICk7XHJcblx0fSxcclxuXHJcblx0Ly8gRGV0ZXJtaW5lIHRoZSBwb3NpdGlvbiBvZiBhbiBlbGVtZW50IHdpdGhpbiB0aGUgc2V0XHJcblx0aW5kZXg6IGZ1bmN0aW9uKCBlbGVtICkge1xyXG5cclxuXHRcdC8vIE5vIGFyZ3VtZW50LCByZXR1cm4gaW5kZXggaW4gcGFyZW50XHJcblx0XHRpZiAoICFlbGVtICkge1xyXG5cdFx0XHRyZXR1cm4gKCB0aGlzWyAwIF0gJiYgdGhpc1sgMCBdLnBhcmVudE5vZGUgKSA/IHRoaXMuZmlyc3QoKS5wcmV2QWxsKCkubGVuZ3RoIDogLTE7XHJcblx0XHR9XHJcblxyXG5cdFx0Ly8gSW5kZXggaW4gc2VsZWN0b3JcclxuXHRcdGlmICggdHlwZW9mIGVsZW0gPT09IFwic3RyaW5nXCIgKSB7XHJcblx0XHRcdHJldHVybiBpbmRleE9mLmNhbGwoIGpRdWVyeSggZWxlbSApLCB0aGlzWyAwIF0gKTtcclxuXHRcdH1cclxuXHJcblx0XHQvLyBMb2NhdGUgdGhlIHBvc2l0aW9uIG9mIHRoZSBkZXNpcmVkIGVsZW1lbnRcclxuXHRcdHJldHVybiBpbmRleE9mLmNhbGwoIHRoaXMsXHJcblxyXG5cdFx0XHQvLyBJZiBpdCByZWNlaXZlcyBhIGpRdWVyeSBvYmplY3QsIHRoZSBmaXJzdCBlbGVtZW50IGlzIHVzZWRcclxuXHRcdFx0ZWxlbS5qcXVlcnkgPyBlbGVtWyAwIF0gOiBlbGVtXHJcblx0XHQpO1xyXG5cdH0sXHJcblxyXG5cdGFkZDogZnVuY3Rpb24oIHNlbGVjdG9yLCBjb250ZXh0ICkge1xyXG5cdFx0cmV0dXJuIHRoaXMucHVzaFN0YWNrKFxyXG5cdFx0XHRqUXVlcnkudW5pcXVlKFxyXG5cdFx0XHRcdGpRdWVyeS5tZXJnZSggdGhpcy5nZXQoKSwgalF1ZXJ5KCBzZWxlY3RvciwgY29udGV4dCApIClcclxuXHRcdFx0KVxyXG5cdFx0KTtcclxuXHR9LFxyXG5cclxuXHRhZGRCYWNrOiBmdW5jdGlvbiggc2VsZWN0b3IgKSB7XHJcblx0XHRyZXR1cm4gdGhpcy5hZGQoIHNlbGVjdG9yID09IG51bGwgP1xyXG5cdFx0XHR0aGlzLnByZXZPYmplY3QgOiB0aGlzLnByZXZPYmplY3QuZmlsdGVyKHNlbGVjdG9yKVxyXG5cdFx0KTtcclxuXHR9XHJcbn0pO1xyXG5cclxuZnVuY3Rpb24gc2libGluZyggY3VyLCBkaXIgKSB7XHJcblx0d2hpbGUgKCAoY3VyID0gY3VyW2Rpcl0pICYmIGN1ci5ub2RlVHlwZSAhPT0gMSApIHt9XHJcblx0cmV0dXJuIGN1cjtcclxufVxyXG5cclxualF1ZXJ5LmVhY2goe1xyXG5cdHBhcmVudDogZnVuY3Rpb24oIGVsZW0gKSB7XHJcblx0XHR2YXIgcGFyZW50ID0gZWxlbS5wYXJlbnROb2RlO1xyXG5cdFx0cmV0dXJuIHBhcmVudCAmJiBwYXJlbnQubm9kZVR5cGUgIT09IDExID8gcGFyZW50IDogbnVsbDtcclxuXHR9LFxyXG5cdHBhcmVudHM6IGZ1bmN0aW9uKCBlbGVtICkge1xyXG5cdFx0cmV0dXJuIGpRdWVyeS5kaXIoIGVsZW0sIFwicGFyZW50Tm9kZVwiICk7XHJcblx0fSxcclxuXHRwYXJlbnRzVW50aWw6IGZ1bmN0aW9uKCBlbGVtLCBpLCB1bnRpbCApIHtcclxuXHRcdHJldHVybiBqUXVlcnkuZGlyKCBlbGVtLCBcInBhcmVudE5vZGVcIiwgdW50aWwgKTtcclxuXHR9LFxyXG5cdG5leHQ6IGZ1bmN0aW9uKCBlbGVtICkge1xyXG5cdFx0cmV0dXJuIHNpYmxpbmcoIGVsZW0sIFwibmV4dFNpYmxpbmdcIiApO1xyXG5cdH0sXHJcblx0cHJldjogZnVuY3Rpb24oIGVsZW0gKSB7XHJcblx0XHRyZXR1cm4gc2libGluZyggZWxlbSwgXCJwcmV2aW91c1NpYmxpbmdcIiApO1xyXG5cdH0sXHJcblx0bmV4dEFsbDogZnVuY3Rpb24oIGVsZW0gKSB7XHJcblx0XHRyZXR1cm4galF1ZXJ5LmRpciggZWxlbSwgXCJuZXh0U2libGluZ1wiICk7XHJcblx0fSxcclxuXHRwcmV2QWxsOiBmdW5jdGlvbiggZWxlbSApIHtcclxuXHRcdHJldHVybiBqUXVlcnkuZGlyKCBlbGVtLCBcInByZXZpb3VzU2libGluZ1wiICk7XHJcblx0fSxcclxuXHRuZXh0VW50aWw6IGZ1bmN0aW9uKCBlbGVtLCBpLCB1bnRpbCApIHtcclxuXHRcdHJldHVybiBqUXVlcnkuZGlyKCBlbGVtLCBcIm5leHRTaWJsaW5nXCIsIHVudGlsICk7XHJcblx0fSxcclxuXHRwcmV2VW50aWw6IGZ1bmN0aW9uKCBlbGVtLCBpLCB1bnRpbCApIHtcclxuXHRcdHJldHVybiBqUXVlcnkuZGlyKCBlbGVtLCBcInByZXZpb3VzU2libGluZ1wiLCB1bnRpbCApO1xyXG5cdH0sXHJcblx0c2libGluZ3M6IGZ1bmN0aW9uKCBlbGVtICkge1xyXG5cdFx0cmV0dXJuIGpRdWVyeS5zaWJsaW5nKCAoIGVsZW0ucGFyZW50Tm9kZSB8fCB7fSApLmZpcnN0Q2hpbGQsIGVsZW0gKTtcclxuXHR9LFxyXG5cdGNoaWxkcmVuOiBmdW5jdGlvbiggZWxlbSApIHtcclxuXHRcdHJldHVybiBqUXVlcnkuc2libGluZyggZWxlbS5maXJzdENoaWxkICk7XHJcblx0fSxcclxuXHRjb250ZW50czogZnVuY3Rpb24oIGVsZW0gKSB7XHJcblx0XHRyZXR1cm4gZWxlbS5jb250ZW50RG9jdW1lbnQgfHwgalF1ZXJ5Lm1lcmdlKCBbXSwgZWxlbS5jaGlsZE5vZGVzICk7XHJcblx0fVxyXG59LCBmdW5jdGlvbiggbmFtZSwgZm4gKSB7XHJcblx0alF1ZXJ5LmZuWyBuYW1lIF0gPSBmdW5jdGlvbiggdW50aWwsIHNlbGVjdG9yICkge1xyXG5cdFx0dmFyIG1hdGNoZWQgPSBqUXVlcnkubWFwKCB0aGlzLCBmbiwgdW50aWwgKTtcclxuXHJcblx0XHRpZiAoIG5hbWUuc2xpY2UoIC01ICkgIT09IFwiVW50aWxcIiApIHtcclxuXHRcdFx0c2VsZWN0b3IgPSB1bnRpbDtcclxuXHRcdH1cclxuXHJcblx0XHRpZiAoIHNlbGVjdG9yICYmIHR5cGVvZiBzZWxlY3RvciA9PT0gXCJzdHJpbmdcIiApIHtcclxuXHRcdFx0bWF0Y2hlZCA9IGpRdWVyeS5maWx0ZXIoIHNlbGVjdG9yLCBtYXRjaGVkICk7XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKCB0aGlzLmxlbmd0aCA+IDEgKSB7XHJcblx0XHRcdC8vIFJlbW92ZSBkdXBsaWNhdGVzXHJcblx0XHRcdGlmICggIWd1YXJhbnRlZWRVbmlxdWVbIG5hbWUgXSApIHtcclxuXHRcdFx0XHRqUXVlcnkudW5pcXVlKCBtYXRjaGVkICk7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdC8vIFJldmVyc2Ugb3JkZXIgZm9yIHBhcmVudHMqIGFuZCBwcmV2LWRlcml2YXRpdmVzXHJcblx0XHRcdGlmICggcnBhcmVudHNwcmV2LnRlc3QoIG5hbWUgKSApIHtcclxuXHRcdFx0XHRtYXRjaGVkLnJldmVyc2UoKTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiB0aGlzLnB1c2hTdGFjayggbWF0Y2hlZCApO1xyXG5cdH07XHJcbn0pO1xyXG52YXIgcm5vdHdoaXRlID0gKC9cXFMrL2cpO1xyXG5cclxuXHJcblxyXG4vLyBTdHJpbmcgdG8gT2JqZWN0IG9wdGlvbnMgZm9ybWF0IGNhY2hlXHJcbnZhciBvcHRpb25zQ2FjaGUgPSB7fTtcclxuXHJcbi8vIENvbnZlcnQgU3RyaW5nLWZvcm1hdHRlZCBvcHRpb25zIGludG8gT2JqZWN0LWZvcm1hdHRlZCBvbmVzIGFuZCBzdG9yZSBpbiBjYWNoZVxyXG5mdW5jdGlvbiBjcmVhdGVPcHRpb25zKCBvcHRpb25zICkge1xyXG5cdHZhciBvYmplY3QgPSBvcHRpb25zQ2FjaGVbIG9wdGlvbnMgXSA9IHt9O1xyXG5cdGpRdWVyeS5lYWNoKCBvcHRpb25zLm1hdGNoKCBybm90d2hpdGUgKSB8fCBbXSwgZnVuY3Rpb24oIF8sIGZsYWcgKSB7XHJcblx0XHRvYmplY3RbIGZsYWcgXSA9IHRydWU7XHJcblx0fSk7XHJcblx0cmV0dXJuIG9iamVjdDtcclxufVxyXG5cclxuLypcclxuICogQ3JlYXRlIGEgY2FsbGJhY2sgbGlzdCB1c2luZyB0aGUgZm9sbG93aW5nIHBhcmFtZXRlcnM6XHJcbiAqXHJcbiAqXHRvcHRpb25zOiBhbiBvcHRpb25hbCBsaXN0IG9mIHNwYWNlLXNlcGFyYXRlZCBvcHRpb25zIHRoYXQgd2lsbCBjaGFuZ2UgaG93XHJcbiAqXHRcdFx0dGhlIGNhbGxiYWNrIGxpc3QgYmVoYXZlcyBvciBhIG1vcmUgdHJhZGl0aW9uYWwgb3B0aW9uIG9iamVjdFxyXG4gKlxyXG4gKiBCeSBkZWZhdWx0IGEgY2FsbGJhY2sgbGlzdCB3aWxsIGFjdCBsaWtlIGFuIGV2ZW50IGNhbGxiYWNrIGxpc3QgYW5kIGNhbiBiZVxyXG4gKiBcImZpcmVkXCIgbXVsdGlwbGUgdGltZXMuXHJcbiAqXHJcbiAqIFBvc3NpYmxlIG9wdGlvbnM6XHJcbiAqXHJcbiAqXHRvbmNlOlx0XHRcdHdpbGwgZW5zdXJlIHRoZSBjYWxsYmFjayBsaXN0IGNhbiBvbmx5IGJlIGZpcmVkIG9uY2UgKGxpa2UgYSBEZWZlcnJlZClcclxuICpcclxuICpcdG1lbW9yeTpcdFx0XHR3aWxsIGtlZXAgdHJhY2sgb2YgcHJldmlvdXMgdmFsdWVzIGFuZCB3aWxsIGNhbGwgYW55IGNhbGxiYWNrIGFkZGVkXHJcbiAqXHRcdFx0XHRcdGFmdGVyIHRoZSBsaXN0IGhhcyBiZWVuIGZpcmVkIHJpZ2h0IGF3YXkgd2l0aCB0aGUgbGF0ZXN0IFwibWVtb3JpemVkXCJcclxuICpcdFx0XHRcdFx0dmFsdWVzIChsaWtlIGEgRGVmZXJyZWQpXHJcbiAqXHJcbiAqXHR1bmlxdWU6XHRcdFx0d2lsbCBlbnN1cmUgYSBjYWxsYmFjayBjYW4gb25seSBiZSBhZGRlZCBvbmNlIChubyBkdXBsaWNhdGUgaW4gdGhlIGxpc3QpXHJcbiAqXHJcbiAqXHRzdG9wT25GYWxzZTpcdGludGVycnVwdCBjYWxsaW5ncyB3aGVuIGEgY2FsbGJhY2sgcmV0dXJucyBmYWxzZVxyXG4gKlxyXG4gKi9cclxualF1ZXJ5LkNhbGxiYWNrcyA9IGZ1bmN0aW9uKCBvcHRpb25zICkge1xyXG5cclxuXHQvLyBDb252ZXJ0IG9wdGlvbnMgZnJvbSBTdHJpbmctZm9ybWF0dGVkIHRvIE9iamVjdC1mb3JtYXR0ZWQgaWYgbmVlZGVkXHJcblx0Ly8gKHdlIGNoZWNrIGluIGNhY2hlIGZpcnN0KVxyXG5cdG9wdGlvbnMgPSB0eXBlb2Ygb3B0aW9ucyA9PT0gXCJzdHJpbmdcIiA/XHJcblx0XHQoIG9wdGlvbnNDYWNoZVsgb3B0aW9ucyBdIHx8IGNyZWF0ZU9wdGlvbnMoIG9wdGlvbnMgKSApIDpcclxuXHRcdGpRdWVyeS5leHRlbmQoIHt9LCBvcHRpb25zICk7XHJcblxyXG5cdHZhciAvLyBMYXN0IGZpcmUgdmFsdWUgKGZvciBub24tZm9yZ2V0dGFibGUgbGlzdHMpXHJcblx0XHRtZW1vcnksXHJcblx0XHQvLyBGbGFnIHRvIGtub3cgaWYgbGlzdCB3YXMgYWxyZWFkeSBmaXJlZFxyXG5cdFx0ZmlyZWQsXHJcblx0XHQvLyBGbGFnIHRvIGtub3cgaWYgbGlzdCBpcyBjdXJyZW50bHkgZmlyaW5nXHJcblx0XHRmaXJpbmcsXHJcblx0XHQvLyBGaXJzdCBjYWxsYmFjayB0byBmaXJlICh1c2VkIGludGVybmFsbHkgYnkgYWRkIGFuZCBmaXJlV2l0aClcclxuXHRcdGZpcmluZ1N0YXJ0LFxyXG5cdFx0Ly8gRW5kIG9mIHRoZSBsb29wIHdoZW4gZmlyaW5nXHJcblx0XHRmaXJpbmdMZW5ndGgsXHJcblx0XHQvLyBJbmRleCBvZiBjdXJyZW50bHkgZmlyaW5nIGNhbGxiYWNrIChtb2RpZmllZCBieSByZW1vdmUgaWYgbmVlZGVkKVxyXG5cdFx0ZmlyaW5nSW5kZXgsXHJcblx0XHQvLyBBY3R1YWwgY2FsbGJhY2sgbGlzdFxyXG5cdFx0bGlzdCA9IFtdLFxyXG5cdFx0Ly8gU3RhY2sgb2YgZmlyZSBjYWxscyBmb3IgcmVwZWF0YWJsZSBsaXN0c1xyXG5cdFx0c3RhY2sgPSAhb3B0aW9ucy5vbmNlICYmIFtdLFxyXG5cdFx0Ly8gRmlyZSBjYWxsYmFja3NcclxuXHRcdGZpcmUgPSBmdW5jdGlvbiggZGF0YSApIHtcclxuXHRcdFx0bWVtb3J5ID0gb3B0aW9ucy5tZW1vcnkgJiYgZGF0YTtcclxuXHRcdFx0ZmlyZWQgPSB0cnVlO1xyXG5cdFx0XHRmaXJpbmdJbmRleCA9IGZpcmluZ1N0YXJ0IHx8IDA7XHJcblx0XHRcdGZpcmluZ1N0YXJ0ID0gMDtcclxuXHRcdFx0ZmlyaW5nTGVuZ3RoID0gbGlzdC5sZW5ndGg7XHJcblx0XHRcdGZpcmluZyA9IHRydWU7XHJcblx0XHRcdGZvciAoIDsgbGlzdCAmJiBmaXJpbmdJbmRleCA8IGZpcmluZ0xlbmd0aDsgZmlyaW5nSW5kZXgrKyApIHtcclxuXHRcdFx0XHRpZiAoIGxpc3RbIGZpcmluZ0luZGV4IF0uYXBwbHkoIGRhdGFbIDAgXSwgZGF0YVsgMSBdICkgPT09IGZhbHNlICYmIG9wdGlvbnMuc3RvcE9uRmFsc2UgKSB7XHJcblx0XHRcdFx0XHRtZW1vcnkgPSBmYWxzZTsgLy8gVG8gcHJldmVudCBmdXJ0aGVyIGNhbGxzIHVzaW5nIGFkZFxyXG5cdFx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHRcdGZpcmluZyA9IGZhbHNlO1xyXG5cdFx0XHRpZiAoIGxpc3QgKSB7XHJcblx0XHRcdFx0aWYgKCBzdGFjayApIHtcclxuXHRcdFx0XHRcdGlmICggc3RhY2subGVuZ3RoICkge1xyXG5cdFx0XHRcdFx0XHRmaXJlKCBzdGFjay5zaGlmdCgpICk7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fSBlbHNlIGlmICggbWVtb3J5ICkge1xyXG5cdFx0XHRcdFx0bGlzdCA9IFtdO1xyXG5cdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRzZWxmLmRpc2FibGUoKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdH0sXHJcblx0XHQvLyBBY3R1YWwgQ2FsbGJhY2tzIG9iamVjdFxyXG5cdFx0c2VsZiA9IHtcclxuXHRcdFx0Ly8gQWRkIGEgY2FsbGJhY2sgb3IgYSBjb2xsZWN0aW9uIG9mIGNhbGxiYWNrcyB0byB0aGUgbGlzdFxyXG5cdFx0XHRhZGQ6IGZ1bmN0aW9uKCkge1xyXG5cdFx0XHRcdGlmICggbGlzdCApIHtcclxuXHRcdFx0XHRcdC8vIEZpcnN0LCB3ZSBzYXZlIHRoZSBjdXJyZW50IGxlbmd0aFxyXG5cdFx0XHRcdFx0dmFyIHN0YXJ0ID0gbGlzdC5sZW5ndGg7XHJcblx0XHRcdFx0XHQoZnVuY3Rpb24gYWRkKCBhcmdzICkge1xyXG5cdFx0XHRcdFx0XHRqUXVlcnkuZWFjaCggYXJncywgZnVuY3Rpb24oIF8sIGFyZyApIHtcclxuXHRcdFx0XHRcdFx0XHR2YXIgdHlwZSA9IGpRdWVyeS50eXBlKCBhcmcgKTtcclxuXHRcdFx0XHRcdFx0XHRpZiAoIHR5cGUgPT09IFwiZnVuY3Rpb25cIiApIHtcclxuXHRcdFx0XHRcdFx0XHRcdGlmICggIW9wdGlvbnMudW5pcXVlIHx8ICFzZWxmLmhhcyggYXJnICkgKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdGxpc3QucHVzaCggYXJnICk7XHJcblx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0fSBlbHNlIGlmICggYXJnICYmIGFyZy5sZW5ndGggJiYgdHlwZSAhPT0gXCJzdHJpbmdcIiApIHtcclxuXHRcdFx0XHRcdFx0XHRcdC8vIEluc3BlY3QgcmVjdXJzaXZlbHlcclxuXHRcdFx0XHRcdFx0XHRcdGFkZCggYXJnICk7XHJcblx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHR9KTtcclxuXHRcdFx0XHRcdH0pKCBhcmd1bWVudHMgKTtcclxuXHRcdFx0XHRcdC8vIERvIHdlIG5lZWQgdG8gYWRkIHRoZSBjYWxsYmFja3MgdG8gdGhlXHJcblx0XHRcdFx0XHQvLyBjdXJyZW50IGZpcmluZyBiYXRjaD9cclxuXHRcdFx0XHRcdGlmICggZmlyaW5nICkge1xyXG5cdFx0XHRcdFx0XHRmaXJpbmdMZW5ndGggPSBsaXN0Lmxlbmd0aDtcclxuXHRcdFx0XHRcdC8vIFdpdGggbWVtb3J5LCBpZiB3ZSdyZSBub3QgZmlyaW5nIHRoZW5cclxuXHRcdFx0XHRcdC8vIHdlIHNob3VsZCBjYWxsIHJpZ2h0IGF3YXlcclxuXHRcdFx0XHRcdH0gZWxzZSBpZiAoIG1lbW9yeSApIHtcclxuXHRcdFx0XHRcdFx0ZmlyaW5nU3RhcnQgPSBzdGFydDtcclxuXHRcdFx0XHRcdFx0ZmlyZSggbWVtb3J5ICk7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdHJldHVybiB0aGlzO1xyXG5cdFx0XHR9LFxyXG5cdFx0XHQvLyBSZW1vdmUgYSBjYWxsYmFjayBmcm9tIHRoZSBsaXN0XHJcblx0XHRcdHJlbW92ZTogZnVuY3Rpb24oKSB7XHJcblx0XHRcdFx0aWYgKCBsaXN0ICkge1xyXG5cdFx0XHRcdFx0alF1ZXJ5LmVhY2goIGFyZ3VtZW50cywgZnVuY3Rpb24oIF8sIGFyZyApIHtcclxuXHRcdFx0XHRcdFx0dmFyIGluZGV4O1xyXG5cdFx0XHRcdFx0XHR3aGlsZSAoICggaW5kZXggPSBqUXVlcnkuaW5BcnJheSggYXJnLCBsaXN0LCBpbmRleCApICkgPiAtMSApIHtcclxuXHRcdFx0XHRcdFx0XHRsaXN0LnNwbGljZSggaW5kZXgsIDEgKTtcclxuXHRcdFx0XHRcdFx0XHQvLyBIYW5kbGUgZmlyaW5nIGluZGV4ZXNcclxuXHRcdFx0XHRcdFx0XHRpZiAoIGZpcmluZyApIHtcclxuXHRcdFx0XHRcdFx0XHRcdGlmICggaW5kZXggPD0gZmlyaW5nTGVuZ3RoICkge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRmaXJpbmdMZW5ndGgtLTtcclxuXHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHRcdGlmICggaW5kZXggPD0gZmlyaW5nSW5kZXggKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdGZpcmluZ0luZGV4LS07XHJcblx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR9KTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0cmV0dXJuIHRoaXM7XHJcblx0XHRcdH0sXHJcblx0XHRcdC8vIENoZWNrIGlmIGEgZ2l2ZW4gY2FsbGJhY2sgaXMgaW4gdGhlIGxpc3QuXHJcblx0XHRcdC8vIElmIG5vIGFyZ3VtZW50IGlzIGdpdmVuLCByZXR1cm4gd2hldGhlciBvciBub3QgbGlzdCBoYXMgY2FsbGJhY2tzIGF0dGFjaGVkLlxyXG5cdFx0XHRoYXM6IGZ1bmN0aW9uKCBmbiApIHtcclxuXHRcdFx0XHRyZXR1cm4gZm4gPyBqUXVlcnkuaW5BcnJheSggZm4sIGxpc3QgKSA+IC0xIDogISEoIGxpc3QgJiYgbGlzdC5sZW5ndGggKTtcclxuXHRcdFx0fSxcclxuXHRcdFx0Ly8gUmVtb3ZlIGFsbCBjYWxsYmFja3MgZnJvbSB0aGUgbGlzdFxyXG5cdFx0XHRlbXB0eTogZnVuY3Rpb24oKSB7XHJcblx0XHRcdFx0bGlzdCA9IFtdO1xyXG5cdFx0XHRcdGZpcmluZ0xlbmd0aCA9IDA7XHJcblx0XHRcdFx0cmV0dXJuIHRoaXM7XHJcblx0XHRcdH0sXHJcblx0XHRcdC8vIEhhdmUgdGhlIGxpc3QgZG8gbm90aGluZyBhbnltb3JlXHJcblx0XHRcdGRpc2FibGU6IGZ1bmN0aW9uKCkge1xyXG5cdFx0XHRcdGxpc3QgPSBzdGFjayA9IG1lbW9yeSA9IHVuZGVmaW5lZDtcclxuXHRcdFx0XHRyZXR1cm4gdGhpcztcclxuXHRcdFx0fSxcclxuXHRcdFx0Ly8gSXMgaXQgZGlzYWJsZWQ/XHJcblx0XHRcdGRpc2FibGVkOiBmdW5jdGlvbigpIHtcclxuXHRcdFx0XHRyZXR1cm4gIWxpc3Q7XHJcblx0XHRcdH0sXHJcblx0XHRcdC8vIExvY2sgdGhlIGxpc3QgaW4gaXRzIGN1cnJlbnQgc3RhdGVcclxuXHRcdFx0bG9jazogZnVuY3Rpb24oKSB7XHJcblx0XHRcdFx0c3RhY2sgPSB1bmRlZmluZWQ7XHJcblx0XHRcdFx0aWYgKCAhbWVtb3J5ICkge1xyXG5cdFx0XHRcdFx0c2VsZi5kaXNhYmxlKCk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdHJldHVybiB0aGlzO1xyXG5cdFx0XHR9LFxyXG5cdFx0XHQvLyBJcyBpdCBsb2NrZWQ/XHJcblx0XHRcdGxvY2tlZDogZnVuY3Rpb24oKSB7XHJcblx0XHRcdFx0cmV0dXJuICFzdGFjaztcclxuXHRcdFx0fSxcclxuXHRcdFx0Ly8gQ2FsbCBhbGwgY2FsbGJhY2tzIHdpdGggdGhlIGdpdmVuIGNvbnRleHQgYW5kIGFyZ3VtZW50c1xyXG5cdFx0XHRmaXJlV2l0aDogZnVuY3Rpb24oIGNvbnRleHQsIGFyZ3MgKSB7XHJcblx0XHRcdFx0aWYgKCBsaXN0ICYmICggIWZpcmVkIHx8IHN0YWNrICkgKSB7XHJcblx0XHRcdFx0XHRhcmdzID0gYXJncyB8fCBbXTtcclxuXHRcdFx0XHRcdGFyZ3MgPSBbIGNvbnRleHQsIGFyZ3Muc2xpY2UgPyBhcmdzLnNsaWNlKCkgOiBhcmdzIF07XHJcblx0XHRcdFx0XHRpZiAoIGZpcmluZyApIHtcclxuXHRcdFx0XHRcdFx0c3RhY2sucHVzaCggYXJncyApO1xyXG5cdFx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdFx0ZmlyZSggYXJncyApO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRyZXR1cm4gdGhpcztcclxuXHRcdFx0fSxcclxuXHRcdFx0Ly8gQ2FsbCBhbGwgdGhlIGNhbGxiYWNrcyB3aXRoIHRoZSBnaXZlbiBhcmd1bWVudHNcclxuXHRcdFx0ZmlyZTogZnVuY3Rpb24oKSB7XHJcblx0XHRcdFx0c2VsZi5maXJlV2l0aCggdGhpcywgYXJndW1lbnRzICk7XHJcblx0XHRcdFx0cmV0dXJuIHRoaXM7XHJcblx0XHRcdH0sXHJcblx0XHRcdC8vIFRvIGtub3cgaWYgdGhlIGNhbGxiYWNrcyBoYXZlIGFscmVhZHkgYmVlbiBjYWxsZWQgYXQgbGVhc3Qgb25jZVxyXG5cdFx0XHRmaXJlZDogZnVuY3Rpb24oKSB7XHJcblx0XHRcdFx0cmV0dXJuICEhZmlyZWQ7XHJcblx0XHRcdH1cclxuXHRcdH07XHJcblxyXG5cdHJldHVybiBzZWxmO1xyXG59O1xyXG5cclxuXHJcbmpRdWVyeS5leHRlbmQoe1xyXG5cclxuXHREZWZlcnJlZDogZnVuY3Rpb24oIGZ1bmMgKSB7XHJcblx0XHR2YXIgdHVwbGVzID0gW1xyXG5cdFx0XHRcdC8vIGFjdGlvbiwgYWRkIGxpc3RlbmVyLCBsaXN0ZW5lciBsaXN0LCBmaW5hbCBzdGF0ZVxyXG5cdFx0XHRcdFsgXCJyZXNvbHZlXCIsIFwiZG9uZVwiLCBqUXVlcnkuQ2FsbGJhY2tzKFwib25jZSBtZW1vcnlcIiksIFwicmVzb2x2ZWRcIiBdLFxyXG5cdFx0XHRcdFsgXCJyZWplY3RcIiwgXCJmYWlsXCIsIGpRdWVyeS5DYWxsYmFja3MoXCJvbmNlIG1lbW9yeVwiKSwgXCJyZWplY3RlZFwiIF0sXHJcblx0XHRcdFx0WyBcIm5vdGlmeVwiLCBcInByb2dyZXNzXCIsIGpRdWVyeS5DYWxsYmFja3MoXCJtZW1vcnlcIikgXVxyXG5cdFx0XHRdLFxyXG5cdFx0XHRzdGF0ZSA9IFwicGVuZGluZ1wiLFxyXG5cdFx0XHRwcm9taXNlID0ge1xyXG5cdFx0XHRcdHN0YXRlOiBmdW5jdGlvbigpIHtcclxuXHRcdFx0XHRcdHJldHVybiBzdGF0ZTtcclxuXHRcdFx0XHR9LFxyXG5cdFx0XHRcdGFsd2F5czogZnVuY3Rpb24oKSB7XHJcblx0XHRcdFx0XHRkZWZlcnJlZC5kb25lKCBhcmd1bWVudHMgKS5mYWlsKCBhcmd1bWVudHMgKTtcclxuXHRcdFx0XHRcdHJldHVybiB0aGlzO1xyXG5cdFx0XHRcdH0sXHJcblx0XHRcdFx0dGhlbjogZnVuY3Rpb24oIC8qIGZuRG9uZSwgZm5GYWlsLCBmblByb2dyZXNzICovICkge1xyXG5cdFx0XHRcdFx0dmFyIGZucyA9IGFyZ3VtZW50cztcclxuXHRcdFx0XHRcdHJldHVybiBqUXVlcnkuRGVmZXJyZWQoZnVuY3Rpb24oIG5ld0RlZmVyICkge1xyXG5cdFx0XHRcdFx0XHRqUXVlcnkuZWFjaCggdHVwbGVzLCBmdW5jdGlvbiggaSwgdHVwbGUgKSB7XHJcblx0XHRcdFx0XHRcdFx0dmFyIGZuID0galF1ZXJ5LmlzRnVuY3Rpb24oIGZuc1sgaSBdICkgJiYgZm5zWyBpIF07XHJcblx0XHRcdFx0XHRcdFx0Ly8gZGVmZXJyZWRbIGRvbmUgfCBmYWlsIHwgcHJvZ3Jlc3MgXSBmb3IgZm9yd2FyZGluZyBhY3Rpb25zIHRvIG5ld0RlZmVyXHJcblx0XHRcdFx0XHRcdFx0ZGVmZXJyZWRbIHR1cGxlWzFdIF0oZnVuY3Rpb24oKSB7XHJcblx0XHRcdFx0XHRcdFx0XHR2YXIgcmV0dXJuZWQgPSBmbiAmJiBmbi5hcHBseSggdGhpcywgYXJndW1lbnRzICk7XHJcblx0XHRcdFx0XHRcdFx0XHRpZiAoIHJldHVybmVkICYmIGpRdWVyeS5pc0Z1bmN0aW9uKCByZXR1cm5lZC5wcm9taXNlICkgKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdHJldHVybmVkLnByb21pc2UoKVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdC5kb25lKCBuZXdEZWZlci5yZXNvbHZlIClcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQuZmFpbCggbmV3RGVmZXIucmVqZWN0IClcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQucHJvZ3Jlc3MoIG5ld0RlZmVyLm5vdGlmeSApO1xyXG5cdFx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0bmV3RGVmZXJbIHR1cGxlWyAwIF0gKyBcIldpdGhcIiBdKCB0aGlzID09PSBwcm9taXNlID8gbmV3RGVmZXIucHJvbWlzZSgpIDogdGhpcywgZm4gPyBbIHJldHVybmVkIF0gOiBhcmd1bWVudHMgKTtcclxuXHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHR9KTtcclxuXHRcdFx0XHRcdFx0fSk7XHJcblx0XHRcdFx0XHRcdGZucyA9IG51bGw7XHJcblx0XHRcdFx0XHR9KS5wcm9taXNlKCk7XHJcblx0XHRcdFx0fSxcclxuXHRcdFx0XHQvLyBHZXQgYSBwcm9taXNlIGZvciB0aGlzIGRlZmVycmVkXHJcblx0XHRcdFx0Ly8gSWYgb2JqIGlzIHByb3ZpZGVkLCB0aGUgcHJvbWlzZSBhc3BlY3QgaXMgYWRkZWQgdG8gdGhlIG9iamVjdFxyXG5cdFx0XHRcdHByb21pc2U6IGZ1bmN0aW9uKCBvYmogKSB7XHJcblx0XHRcdFx0XHRyZXR1cm4gb2JqICE9IG51bGwgPyBqUXVlcnkuZXh0ZW5kKCBvYmosIHByb21pc2UgKSA6IHByb21pc2U7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9LFxyXG5cdFx0XHRkZWZlcnJlZCA9IHt9O1xyXG5cclxuXHRcdC8vIEtlZXAgcGlwZSBmb3IgYmFjay1jb21wYXRcclxuXHRcdHByb21pc2UucGlwZSA9IHByb21pc2UudGhlbjtcclxuXHJcblx0XHQvLyBBZGQgbGlzdC1zcGVjaWZpYyBtZXRob2RzXHJcblx0XHRqUXVlcnkuZWFjaCggdHVwbGVzLCBmdW5jdGlvbiggaSwgdHVwbGUgKSB7XHJcblx0XHRcdHZhciBsaXN0ID0gdHVwbGVbIDIgXSxcclxuXHRcdFx0XHRzdGF0ZVN0cmluZyA9IHR1cGxlWyAzIF07XHJcblxyXG5cdFx0XHQvLyBwcm9taXNlWyBkb25lIHwgZmFpbCB8IHByb2dyZXNzIF0gPSBsaXN0LmFkZFxyXG5cdFx0XHRwcm9taXNlWyB0dXBsZVsxXSBdID0gbGlzdC5hZGQ7XHJcblxyXG5cdFx0XHQvLyBIYW5kbGUgc3RhdGVcclxuXHRcdFx0aWYgKCBzdGF0ZVN0cmluZyApIHtcclxuXHRcdFx0XHRsaXN0LmFkZChmdW5jdGlvbigpIHtcclxuXHRcdFx0XHRcdC8vIHN0YXRlID0gWyByZXNvbHZlZCB8IHJlamVjdGVkIF1cclxuXHRcdFx0XHRcdHN0YXRlID0gc3RhdGVTdHJpbmc7XHJcblxyXG5cdFx0XHRcdC8vIFsgcmVqZWN0X2xpc3QgfCByZXNvbHZlX2xpc3QgXS5kaXNhYmxlOyBwcm9ncmVzc19saXN0LmxvY2tcclxuXHRcdFx0XHR9LCB0dXBsZXNbIGkgXiAxIF1bIDIgXS5kaXNhYmxlLCB0dXBsZXNbIDIgXVsgMiBdLmxvY2sgKTtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0Ly8gZGVmZXJyZWRbIHJlc29sdmUgfCByZWplY3QgfCBub3RpZnkgXVxyXG5cdFx0XHRkZWZlcnJlZFsgdHVwbGVbMF0gXSA9IGZ1bmN0aW9uKCkge1xyXG5cdFx0XHRcdGRlZmVycmVkWyB0dXBsZVswXSArIFwiV2l0aFwiIF0oIHRoaXMgPT09IGRlZmVycmVkID8gcHJvbWlzZSA6IHRoaXMsIGFyZ3VtZW50cyApO1xyXG5cdFx0XHRcdHJldHVybiB0aGlzO1xyXG5cdFx0XHR9O1xyXG5cdFx0XHRkZWZlcnJlZFsgdHVwbGVbMF0gKyBcIldpdGhcIiBdID0gbGlzdC5maXJlV2l0aDtcclxuXHRcdH0pO1xyXG5cclxuXHRcdC8vIE1ha2UgdGhlIGRlZmVycmVkIGEgcHJvbWlzZVxyXG5cdFx0cHJvbWlzZS5wcm9taXNlKCBkZWZlcnJlZCApO1xyXG5cclxuXHRcdC8vIENhbGwgZ2l2ZW4gZnVuYyBpZiBhbnlcclxuXHRcdGlmICggZnVuYyApIHtcclxuXHRcdFx0ZnVuYy5jYWxsKCBkZWZlcnJlZCwgZGVmZXJyZWQgKTtcclxuXHRcdH1cclxuXHJcblx0XHQvLyBBbGwgZG9uZSFcclxuXHRcdHJldHVybiBkZWZlcnJlZDtcclxuXHR9LFxyXG5cclxuXHQvLyBEZWZlcnJlZCBoZWxwZXJcclxuXHR3aGVuOiBmdW5jdGlvbiggc3Vib3JkaW5hdGUgLyogLCAuLi4sIHN1Ym9yZGluYXRlTiAqLyApIHtcclxuXHRcdHZhciBpID0gMCxcclxuXHRcdFx0cmVzb2x2ZVZhbHVlcyA9IHNsaWNlLmNhbGwoIGFyZ3VtZW50cyApLFxyXG5cdFx0XHRsZW5ndGggPSByZXNvbHZlVmFsdWVzLmxlbmd0aCxcclxuXHJcblx0XHRcdC8vIHRoZSBjb3VudCBvZiB1bmNvbXBsZXRlZCBzdWJvcmRpbmF0ZXNcclxuXHRcdFx0cmVtYWluaW5nID0gbGVuZ3RoICE9PSAxIHx8ICggc3Vib3JkaW5hdGUgJiYgalF1ZXJ5LmlzRnVuY3Rpb24oIHN1Ym9yZGluYXRlLnByb21pc2UgKSApID8gbGVuZ3RoIDogMCxcclxuXHJcblx0XHRcdC8vIHRoZSBtYXN0ZXIgRGVmZXJyZWQuIElmIHJlc29sdmVWYWx1ZXMgY29uc2lzdCBvZiBvbmx5IGEgc2luZ2xlIERlZmVycmVkLCBqdXN0IHVzZSB0aGF0LlxyXG5cdFx0XHRkZWZlcnJlZCA9IHJlbWFpbmluZyA9PT0gMSA/IHN1Ym9yZGluYXRlIDogalF1ZXJ5LkRlZmVycmVkKCksXHJcblxyXG5cdFx0XHQvLyBVcGRhdGUgZnVuY3Rpb24gZm9yIGJvdGggcmVzb2x2ZSBhbmQgcHJvZ3Jlc3MgdmFsdWVzXHJcblx0XHRcdHVwZGF0ZUZ1bmMgPSBmdW5jdGlvbiggaSwgY29udGV4dHMsIHZhbHVlcyApIHtcclxuXHRcdFx0XHRyZXR1cm4gZnVuY3Rpb24oIHZhbHVlICkge1xyXG5cdFx0XHRcdFx0Y29udGV4dHNbIGkgXSA9IHRoaXM7XHJcblx0XHRcdFx0XHR2YWx1ZXNbIGkgXSA9IGFyZ3VtZW50cy5sZW5ndGggPiAxID8gc2xpY2UuY2FsbCggYXJndW1lbnRzICkgOiB2YWx1ZTtcclxuXHRcdFx0XHRcdGlmICggdmFsdWVzID09PSBwcm9ncmVzc1ZhbHVlcyApIHtcclxuXHRcdFx0XHRcdFx0ZGVmZXJyZWQubm90aWZ5V2l0aCggY29udGV4dHMsIHZhbHVlcyApO1xyXG5cdFx0XHRcdFx0fSBlbHNlIGlmICggISggLS1yZW1haW5pbmcgKSApIHtcclxuXHRcdFx0XHRcdFx0ZGVmZXJyZWQucmVzb2x2ZVdpdGgoIGNvbnRleHRzLCB2YWx1ZXMgKTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9O1xyXG5cdFx0XHR9LFxyXG5cclxuXHRcdFx0cHJvZ3Jlc3NWYWx1ZXMsIHByb2dyZXNzQ29udGV4dHMsIHJlc29sdmVDb250ZXh0cztcclxuXHJcblx0XHQvLyBBZGQgbGlzdGVuZXJzIHRvIERlZmVycmVkIHN1Ym9yZGluYXRlczsgdHJlYXQgb3RoZXJzIGFzIHJlc29sdmVkXHJcblx0XHRpZiAoIGxlbmd0aCA+IDEgKSB7XHJcblx0XHRcdHByb2dyZXNzVmFsdWVzID0gbmV3IEFycmF5KCBsZW5ndGggKTtcclxuXHRcdFx0cHJvZ3Jlc3NDb250ZXh0cyA9IG5ldyBBcnJheSggbGVuZ3RoICk7XHJcblx0XHRcdHJlc29sdmVDb250ZXh0cyA9IG5ldyBBcnJheSggbGVuZ3RoICk7XHJcblx0XHRcdGZvciAoIDsgaSA8IGxlbmd0aDsgaSsrICkge1xyXG5cdFx0XHRcdGlmICggcmVzb2x2ZVZhbHVlc1sgaSBdICYmIGpRdWVyeS5pc0Z1bmN0aW9uKCByZXNvbHZlVmFsdWVzWyBpIF0ucHJvbWlzZSApICkge1xyXG5cdFx0XHRcdFx0cmVzb2x2ZVZhbHVlc1sgaSBdLnByb21pc2UoKVxyXG5cdFx0XHRcdFx0XHQuZG9uZSggdXBkYXRlRnVuYyggaSwgcmVzb2x2ZUNvbnRleHRzLCByZXNvbHZlVmFsdWVzICkgKVxyXG5cdFx0XHRcdFx0XHQuZmFpbCggZGVmZXJyZWQucmVqZWN0IClcclxuXHRcdFx0XHRcdFx0LnByb2dyZXNzKCB1cGRhdGVGdW5jKCBpLCBwcm9ncmVzc0NvbnRleHRzLCBwcm9ncmVzc1ZhbHVlcyApICk7XHJcblx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdC0tcmVtYWluaW5nO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdC8vIElmIHdlJ3JlIG5vdCB3YWl0aW5nIG9uIGFueXRoaW5nLCByZXNvbHZlIHRoZSBtYXN0ZXJcclxuXHRcdGlmICggIXJlbWFpbmluZyApIHtcclxuXHRcdFx0ZGVmZXJyZWQucmVzb2x2ZVdpdGgoIHJlc29sdmVDb250ZXh0cywgcmVzb2x2ZVZhbHVlcyApO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiBkZWZlcnJlZC5wcm9taXNlKCk7XHJcblx0fVxyXG59KTtcclxuXHJcblxyXG4vLyBUaGUgZGVmZXJyZWQgdXNlZCBvbiBET00gcmVhZHlcclxudmFyIHJlYWR5TGlzdDtcclxuXHJcbmpRdWVyeS5mbi5yZWFkeSA9IGZ1bmN0aW9uKCBmbiApIHtcclxuXHQvLyBBZGQgdGhlIGNhbGxiYWNrXHJcblx0alF1ZXJ5LnJlYWR5LnByb21pc2UoKS5kb25lKCBmbiApO1xyXG5cclxuXHRyZXR1cm4gdGhpcztcclxufTtcclxuXHJcbmpRdWVyeS5leHRlbmQoe1xyXG5cdC8vIElzIHRoZSBET00gcmVhZHkgdG8gYmUgdXNlZD8gU2V0IHRvIHRydWUgb25jZSBpdCBvY2N1cnMuXHJcblx0aXNSZWFkeTogZmFsc2UsXHJcblxyXG5cdC8vIEEgY291bnRlciB0byB0cmFjayBob3cgbWFueSBpdGVtcyB0byB3YWl0IGZvciBiZWZvcmVcclxuXHQvLyB0aGUgcmVhZHkgZXZlbnQgZmlyZXMuIFNlZSAjNjc4MVxyXG5cdHJlYWR5V2FpdDogMSxcclxuXHJcblx0Ly8gSG9sZCAob3IgcmVsZWFzZSkgdGhlIHJlYWR5IGV2ZW50XHJcblx0aG9sZFJlYWR5OiBmdW5jdGlvbiggaG9sZCApIHtcclxuXHRcdGlmICggaG9sZCApIHtcclxuXHRcdFx0alF1ZXJ5LnJlYWR5V2FpdCsrO1xyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0alF1ZXJ5LnJlYWR5KCB0cnVlICk7XHJcblx0XHR9XHJcblx0fSxcclxuXHJcblx0Ly8gSGFuZGxlIHdoZW4gdGhlIERPTSBpcyByZWFkeVxyXG5cdHJlYWR5OiBmdW5jdGlvbiggd2FpdCApIHtcclxuXHJcblx0XHQvLyBBYm9ydCBpZiB0aGVyZSBhcmUgcGVuZGluZyBob2xkcyBvciB3ZSdyZSBhbHJlYWR5IHJlYWR5XHJcblx0XHRpZiAoIHdhaXQgPT09IHRydWUgPyAtLWpRdWVyeS5yZWFkeVdhaXQgOiBqUXVlcnkuaXNSZWFkeSApIHtcclxuXHRcdFx0cmV0dXJuO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8vIFJlbWVtYmVyIHRoYXQgdGhlIERPTSBpcyByZWFkeVxyXG5cdFx0alF1ZXJ5LmlzUmVhZHkgPSB0cnVlO1xyXG5cclxuXHRcdC8vIElmIGEgbm9ybWFsIERPTSBSZWFkeSBldmVudCBmaXJlZCwgZGVjcmVtZW50LCBhbmQgd2FpdCBpZiBuZWVkIGJlXHJcblx0XHRpZiAoIHdhaXQgIT09IHRydWUgJiYgLS1qUXVlcnkucmVhZHlXYWl0ID4gMCApIHtcclxuXHRcdFx0cmV0dXJuO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8vIElmIHRoZXJlIGFyZSBmdW5jdGlvbnMgYm91bmQsIHRvIGV4ZWN1dGVcclxuXHRcdHJlYWR5TGlzdC5yZXNvbHZlV2l0aCggZG9jdW1lbnQsIFsgalF1ZXJ5IF0gKTtcclxuXHJcblx0XHQvLyBUcmlnZ2VyIGFueSBib3VuZCByZWFkeSBldmVudHNcclxuXHRcdGlmICggalF1ZXJ5LmZuLnRyaWdnZXJIYW5kbGVyICkge1xyXG5cdFx0XHRqUXVlcnkoIGRvY3VtZW50ICkudHJpZ2dlckhhbmRsZXIoIFwicmVhZHlcIiApO1xyXG5cdFx0XHRqUXVlcnkoIGRvY3VtZW50ICkub2ZmKCBcInJlYWR5XCIgKTtcclxuXHRcdH1cclxuXHR9XHJcbn0pO1xyXG5cclxuLyoqXHJcbiAqIFRoZSByZWFkeSBldmVudCBoYW5kbGVyIGFuZCBzZWxmIGNsZWFudXAgbWV0aG9kXHJcbiAqL1xyXG5mdW5jdGlvbiBjb21wbGV0ZWQoKSB7XHJcblx0ZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lciggXCJET01Db250ZW50TG9hZGVkXCIsIGNvbXBsZXRlZCwgZmFsc2UgKTtcclxuXHR3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lciggXCJsb2FkXCIsIGNvbXBsZXRlZCwgZmFsc2UgKTtcclxuXHRqUXVlcnkucmVhZHkoKTtcclxufVxyXG5cclxualF1ZXJ5LnJlYWR5LnByb21pc2UgPSBmdW5jdGlvbiggb2JqICkge1xyXG5cdGlmICggIXJlYWR5TGlzdCApIHtcclxuXHJcblx0XHRyZWFkeUxpc3QgPSBqUXVlcnkuRGVmZXJyZWQoKTtcclxuXHJcblx0XHQvLyBDYXRjaCBjYXNlcyB3aGVyZSAkKGRvY3VtZW50KS5yZWFkeSgpIGlzIGNhbGxlZCBhZnRlciB0aGUgYnJvd3NlciBldmVudCBoYXMgYWxyZWFkeSBvY2N1cnJlZC5cclxuXHRcdC8vIFdlIG9uY2UgdHJpZWQgdG8gdXNlIHJlYWR5U3RhdGUgXCJpbnRlcmFjdGl2ZVwiIGhlcmUsIGJ1dCBpdCBjYXVzZWQgaXNzdWVzIGxpa2UgdGhlIG9uZVxyXG5cdFx0Ly8gZGlzY292ZXJlZCBieSBDaHJpc1MgaGVyZTogaHR0cDovL2J1Z3MuanF1ZXJ5LmNvbS90aWNrZXQvMTIyODIjY29tbWVudDoxNVxyXG5cdFx0aWYgKCBkb2N1bWVudC5yZWFkeVN0YXRlID09PSBcImNvbXBsZXRlXCIgKSB7XHJcblx0XHRcdC8vIEhhbmRsZSBpdCBhc3luY2hyb25vdXNseSB0byBhbGxvdyBzY3JpcHRzIHRoZSBvcHBvcnR1bml0eSB0byBkZWxheSByZWFkeVxyXG5cdFx0XHRzZXRUaW1lb3V0KCBqUXVlcnkucmVhZHkgKTtcclxuXHJcblx0XHR9IGVsc2Uge1xyXG5cclxuXHRcdFx0Ly8gVXNlIHRoZSBoYW5keSBldmVudCBjYWxsYmFja1xyXG5cdFx0XHRkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCBcIkRPTUNvbnRlbnRMb2FkZWRcIiwgY29tcGxldGVkLCBmYWxzZSApO1xyXG5cclxuXHRcdFx0Ly8gQSBmYWxsYmFjayB0byB3aW5kb3cub25sb2FkLCB0aGF0IHdpbGwgYWx3YXlzIHdvcmtcclxuXHRcdFx0d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoIFwibG9hZFwiLCBjb21wbGV0ZWQsIGZhbHNlICk7XHJcblx0XHR9XHJcblx0fVxyXG5cdHJldHVybiByZWFkeUxpc3QucHJvbWlzZSggb2JqICk7XHJcbn07XHJcblxyXG4vLyBLaWNrIG9mZiB0aGUgRE9NIHJlYWR5IGNoZWNrIGV2ZW4gaWYgdGhlIHVzZXIgZG9lcyBub3RcclxualF1ZXJ5LnJlYWR5LnByb21pc2UoKTtcclxuXHJcblxyXG5cclxuXHJcbi8vIE11bHRpZnVuY3Rpb25hbCBtZXRob2QgdG8gZ2V0IGFuZCBzZXQgdmFsdWVzIG9mIGEgY29sbGVjdGlvblxyXG4vLyBUaGUgdmFsdWUvcyBjYW4gb3B0aW9uYWxseSBiZSBleGVjdXRlZCBpZiBpdCdzIGEgZnVuY3Rpb25cclxudmFyIGFjY2VzcyA9IGpRdWVyeS5hY2Nlc3MgPSBmdW5jdGlvbiggZWxlbXMsIGZuLCBrZXksIHZhbHVlLCBjaGFpbmFibGUsIGVtcHR5R2V0LCByYXcgKSB7XHJcblx0dmFyIGkgPSAwLFxyXG5cdFx0bGVuID0gZWxlbXMubGVuZ3RoLFxyXG5cdFx0YnVsayA9IGtleSA9PSBudWxsO1xyXG5cclxuXHQvLyBTZXRzIG1hbnkgdmFsdWVzXHJcblx0aWYgKCBqUXVlcnkudHlwZSgga2V5ICkgPT09IFwib2JqZWN0XCIgKSB7XHJcblx0XHRjaGFpbmFibGUgPSB0cnVlO1xyXG5cdFx0Zm9yICggaSBpbiBrZXkgKSB7XHJcblx0XHRcdGpRdWVyeS5hY2Nlc3MoIGVsZW1zLCBmbiwgaSwga2V5W2ldLCB0cnVlLCBlbXB0eUdldCwgcmF3ICk7XHJcblx0XHR9XHJcblxyXG5cdC8vIFNldHMgb25lIHZhbHVlXHJcblx0fSBlbHNlIGlmICggdmFsdWUgIT09IHVuZGVmaW5lZCApIHtcclxuXHRcdGNoYWluYWJsZSA9IHRydWU7XHJcblxyXG5cdFx0aWYgKCAhalF1ZXJ5LmlzRnVuY3Rpb24oIHZhbHVlICkgKSB7XHJcblx0XHRcdHJhdyA9IHRydWU7XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKCBidWxrICkge1xyXG5cdFx0XHQvLyBCdWxrIG9wZXJhdGlvbnMgcnVuIGFnYWluc3QgdGhlIGVudGlyZSBzZXRcclxuXHRcdFx0aWYgKCByYXcgKSB7XHJcblx0XHRcdFx0Zm4uY2FsbCggZWxlbXMsIHZhbHVlICk7XHJcblx0XHRcdFx0Zm4gPSBudWxsO1xyXG5cclxuXHRcdFx0Ly8gLi4uZXhjZXB0IHdoZW4gZXhlY3V0aW5nIGZ1bmN0aW9uIHZhbHVlc1xyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdGJ1bGsgPSBmbjtcclxuXHRcdFx0XHRmbiA9IGZ1bmN0aW9uKCBlbGVtLCBrZXksIHZhbHVlICkge1xyXG5cdFx0XHRcdFx0cmV0dXJuIGJ1bGsuY2FsbCggalF1ZXJ5KCBlbGVtICksIHZhbHVlICk7XHJcblx0XHRcdFx0fTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdGlmICggZm4gKSB7XHJcblx0XHRcdGZvciAoIDsgaSA8IGxlbjsgaSsrICkge1xyXG5cdFx0XHRcdGZuKCBlbGVtc1tpXSwga2V5LCByYXcgPyB2YWx1ZSA6IHZhbHVlLmNhbGwoIGVsZW1zW2ldLCBpLCBmbiggZWxlbXNbaV0sIGtleSApICkgKTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0cmV0dXJuIGNoYWluYWJsZSA/XHJcblx0XHRlbGVtcyA6XHJcblxyXG5cdFx0Ly8gR2V0c1xyXG5cdFx0YnVsayA/XHJcblx0XHRcdGZuLmNhbGwoIGVsZW1zICkgOlxyXG5cdFx0XHRsZW4gPyBmbiggZWxlbXNbMF0sIGtleSApIDogZW1wdHlHZXQ7XHJcbn07XHJcblxyXG5cclxuLyoqXHJcbiAqIERldGVybWluZXMgd2hldGhlciBhbiBvYmplY3QgY2FuIGhhdmUgZGF0YVxyXG4gKi9cclxualF1ZXJ5LmFjY2VwdERhdGEgPSBmdW5jdGlvbiggb3duZXIgKSB7XHJcblx0Ly8gQWNjZXB0cyBvbmx5OlxyXG5cdC8vICAtIE5vZGVcclxuXHQvLyAgICAtIE5vZGUuRUxFTUVOVF9OT0RFXHJcblx0Ly8gICAgLSBOb2RlLkRPQ1VNRU5UX05PREVcclxuXHQvLyAgLSBPYmplY3RcclxuXHQvLyAgICAtIEFueVxyXG5cdC8qIGpzaGludCAtVzAxOCAqL1xyXG5cdHJldHVybiBvd25lci5ub2RlVHlwZSA9PT0gMSB8fCBvd25lci5ub2RlVHlwZSA9PT0gOSB8fCAhKCArb3duZXIubm9kZVR5cGUgKTtcclxufTtcclxuXHJcblxyXG5mdW5jdGlvbiBEYXRhKCkge1xyXG5cdC8vIFN1cHBvcnQ6IEFuZHJvaWQ8NCxcclxuXHQvLyBPbGQgV2ViS2l0IGRvZXMgbm90IGhhdmUgT2JqZWN0LnByZXZlbnRFeHRlbnNpb25zL2ZyZWV6ZSBtZXRob2QsXHJcblx0Ly8gcmV0dXJuIG5ldyBlbXB0eSBvYmplY3QgaW5zdGVhZCB3aXRoIG5vIFtbc2V0XV0gYWNjZXNzb3JcclxuXHRPYmplY3QuZGVmaW5lUHJvcGVydHkoIHRoaXMuY2FjaGUgPSB7fSwgMCwge1xyXG5cdFx0Z2V0OiBmdW5jdGlvbigpIHtcclxuXHRcdFx0cmV0dXJuIHt9O1xyXG5cdFx0fVxyXG5cdH0pO1xyXG5cclxuXHR0aGlzLmV4cGFuZG8gPSBqUXVlcnkuZXhwYW5kbyArIERhdGEudWlkKys7XHJcbn1cclxuXHJcbkRhdGEudWlkID0gMTtcclxuRGF0YS5hY2NlcHRzID0galF1ZXJ5LmFjY2VwdERhdGE7XHJcblxyXG5EYXRhLnByb3RvdHlwZSA9IHtcclxuXHRrZXk6IGZ1bmN0aW9uKCBvd25lciApIHtcclxuXHRcdC8vIFdlIGNhbiBhY2NlcHQgZGF0YSBmb3Igbm9uLWVsZW1lbnQgbm9kZXMgaW4gbW9kZXJuIGJyb3dzZXJzLFxyXG5cdFx0Ly8gYnV0IHdlIHNob3VsZCBub3QsIHNlZSAjODMzNS5cclxuXHRcdC8vIEFsd2F5cyByZXR1cm4gdGhlIGtleSBmb3IgYSBmcm96ZW4gb2JqZWN0LlxyXG5cdFx0aWYgKCAhRGF0YS5hY2NlcHRzKCBvd25lciApICkge1xyXG5cdFx0XHRyZXR1cm4gMDtcclxuXHRcdH1cclxuXHJcblx0XHR2YXIgZGVzY3JpcHRvciA9IHt9LFxyXG5cdFx0XHQvLyBDaGVjayBpZiB0aGUgb3duZXIgb2JqZWN0IGFscmVhZHkgaGFzIGEgY2FjaGUga2V5XHJcblx0XHRcdHVubG9jayA9IG93bmVyWyB0aGlzLmV4cGFuZG8gXTtcclxuXHJcblx0XHQvLyBJZiBub3QsIGNyZWF0ZSBvbmVcclxuXHRcdGlmICggIXVubG9jayApIHtcclxuXHRcdFx0dW5sb2NrID0gRGF0YS51aWQrKztcclxuXHJcblx0XHRcdC8vIFNlY3VyZSBpdCBpbiBhIG5vbi1lbnVtZXJhYmxlLCBub24td3JpdGFibGUgcHJvcGVydHlcclxuXHRcdFx0dHJ5IHtcclxuXHRcdFx0XHRkZXNjcmlwdG9yWyB0aGlzLmV4cGFuZG8gXSA9IHsgdmFsdWU6IHVubG9jayB9O1xyXG5cdFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKCBvd25lciwgZGVzY3JpcHRvciApO1xyXG5cclxuXHRcdFx0Ly8gU3VwcG9ydDogQW5kcm9pZDw0XHJcblx0XHRcdC8vIEZhbGxiYWNrIHRvIGEgbGVzcyBzZWN1cmUgZGVmaW5pdGlvblxyXG5cdFx0XHR9IGNhdGNoICggZSApIHtcclxuXHRcdFx0XHRkZXNjcmlwdG9yWyB0aGlzLmV4cGFuZG8gXSA9IHVubG9jaztcclxuXHRcdFx0XHRqUXVlcnkuZXh0ZW5kKCBvd25lciwgZGVzY3JpcHRvciApO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblxyXG5cdFx0Ly8gRW5zdXJlIHRoZSBjYWNoZSBvYmplY3RcclxuXHRcdGlmICggIXRoaXMuY2FjaGVbIHVubG9jayBdICkge1xyXG5cdFx0XHR0aGlzLmNhY2hlWyB1bmxvY2sgXSA9IHt9O1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiB1bmxvY2s7XHJcblx0fSxcclxuXHRzZXQ6IGZ1bmN0aW9uKCBvd25lciwgZGF0YSwgdmFsdWUgKSB7XHJcblx0XHR2YXIgcHJvcCxcclxuXHRcdFx0Ly8gVGhlcmUgbWF5IGJlIGFuIHVubG9jayBhc3NpZ25lZCB0byB0aGlzIG5vZGUsXHJcblx0XHRcdC8vIGlmIHRoZXJlIGlzIG5vIGVudHJ5IGZvciB0aGlzIFwib3duZXJcIiwgY3JlYXRlIG9uZSBpbmxpbmVcclxuXHRcdFx0Ly8gYW5kIHNldCB0aGUgdW5sb2NrIGFzIHRob3VnaCBhbiBvd25lciBlbnRyeSBoYWQgYWx3YXlzIGV4aXN0ZWRcclxuXHRcdFx0dW5sb2NrID0gdGhpcy5rZXkoIG93bmVyICksXHJcblx0XHRcdGNhY2hlID0gdGhpcy5jYWNoZVsgdW5sb2NrIF07XHJcblxyXG5cdFx0Ly8gSGFuZGxlOiBbIG93bmVyLCBrZXksIHZhbHVlIF0gYXJnc1xyXG5cdFx0aWYgKCB0eXBlb2YgZGF0YSA9PT0gXCJzdHJpbmdcIiApIHtcclxuXHRcdFx0Y2FjaGVbIGRhdGEgXSA9IHZhbHVlO1xyXG5cclxuXHRcdC8vIEhhbmRsZTogWyBvd25lciwgeyBwcm9wZXJ0aWVzIH0gXSBhcmdzXHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHQvLyBGcmVzaCBhc3NpZ25tZW50cyBieSBvYmplY3QgYXJlIHNoYWxsb3cgY29waWVkXHJcblx0XHRcdGlmICggalF1ZXJ5LmlzRW1wdHlPYmplY3QoIGNhY2hlICkgKSB7XHJcblx0XHRcdFx0alF1ZXJ5LmV4dGVuZCggdGhpcy5jYWNoZVsgdW5sb2NrIF0sIGRhdGEgKTtcclxuXHRcdFx0Ly8gT3RoZXJ3aXNlLCBjb3B5IHRoZSBwcm9wZXJ0aWVzIG9uZS1ieS1vbmUgdG8gdGhlIGNhY2hlIG9iamVjdFxyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdGZvciAoIHByb3AgaW4gZGF0YSApIHtcclxuXHRcdFx0XHRcdGNhY2hlWyBwcm9wIF0gPSBkYXRhWyBwcm9wIF07XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0XHRyZXR1cm4gY2FjaGU7XHJcblx0fSxcclxuXHRnZXQ6IGZ1bmN0aW9uKCBvd25lciwga2V5ICkge1xyXG5cdFx0Ly8gRWl0aGVyIGEgdmFsaWQgY2FjaGUgaXMgZm91bmQsIG9yIHdpbGwgYmUgY3JlYXRlZC5cclxuXHRcdC8vIE5ldyBjYWNoZXMgd2lsbCBiZSBjcmVhdGVkIGFuZCB0aGUgdW5sb2NrIHJldHVybmVkLFxyXG5cdFx0Ly8gYWxsb3dpbmcgZGlyZWN0IGFjY2VzcyB0byB0aGUgbmV3bHkgY3JlYXRlZFxyXG5cdFx0Ly8gZW1wdHkgZGF0YSBvYmplY3QuIEEgdmFsaWQgb3duZXIgb2JqZWN0IG11c3QgYmUgcHJvdmlkZWQuXHJcblx0XHR2YXIgY2FjaGUgPSB0aGlzLmNhY2hlWyB0aGlzLmtleSggb3duZXIgKSBdO1xyXG5cclxuXHRcdHJldHVybiBrZXkgPT09IHVuZGVmaW5lZCA/XHJcblx0XHRcdGNhY2hlIDogY2FjaGVbIGtleSBdO1xyXG5cdH0sXHJcblx0YWNjZXNzOiBmdW5jdGlvbiggb3duZXIsIGtleSwgdmFsdWUgKSB7XHJcblx0XHR2YXIgc3RvcmVkO1xyXG5cdFx0Ly8gSW4gY2FzZXMgd2hlcmUgZWl0aGVyOlxyXG5cdFx0Ly9cclxuXHRcdC8vICAgMS4gTm8ga2V5IHdhcyBzcGVjaWZpZWRcclxuXHRcdC8vICAgMi4gQSBzdHJpbmcga2V5IHdhcyBzcGVjaWZpZWQsIGJ1dCBubyB2YWx1ZSBwcm92aWRlZFxyXG5cdFx0Ly9cclxuXHRcdC8vIFRha2UgdGhlIFwicmVhZFwiIHBhdGggYW5kIGFsbG93IHRoZSBnZXQgbWV0aG9kIHRvIGRldGVybWluZVxyXG5cdFx0Ly8gd2hpY2ggdmFsdWUgdG8gcmV0dXJuLCByZXNwZWN0aXZlbHkgZWl0aGVyOlxyXG5cdFx0Ly9cclxuXHRcdC8vICAgMS4gVGhlIGVudGlyZSBjYWNoZSBvYmplY3RcclxuXHRcdC8vICAgMi4gVGhlIGRhdGEgc3RvcmVkIGF0IHRoZSBrZXlcclxuXHRcdC8vXHJcblx0XHRpZiAoIGtleSA9PT0gdW5kZWZpbmVkIHx8XHJcblx0XHRcdFx0KChrZXkgJiYgdHlwZW9mIGtleSA9PT0gXCJzdHJpbmdcIikgJiYgdmFsdWUgPT09IHVuZGVmaW5lZCkgKSB7XHJcblxyXG5cdFx0XHRzdG9yZWQgPSB0aGlzLmdldCggb3duZXIsIGtleSApO1xyXG5cclxuXHRcdFx0cmV0dXJuIHN0b3JlZCAhPT0gdW5kZWZpbmVkID9cclxuXHRcdFx0XHRzdG9yZWQgOiB0aGlzLmdldCggb3duZXIsIGpRdWVyeS5jYW1lbENhc2Uoa2V5KSApO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8vIFsqXVdoZW4gdGhlIGtleSBpcyBub3QgYSBzdHJpbmcsIG9yIGJvdGggYSBrZXkgYW5kIHZhbHVlXHJcblx0XHQvLyBhcmUgc3BlY2lmaWVkLCBzZXQgb3IgZXh0ZW5kIChleGlzdGluZyBvYmplY3RzKSB3aXRoIGVpdGhlcjpcclxuXHRcdC8vXHJcblx0XHQvLyAgIDEuIEFuIG9iamVjdCBvZiBwcm9wZXJ0aWVzXHJcblx0XHQvLyAgIDIuIEEga2V5IGFuZCB2YWx1ZVxyXG5cdFx0Ly9cclxuXHRcdHRoaXMuc2V0KCBvd25lciwga2V5LCB2YWx1ZSApO1xyXG5cclxuXHRcdC8vIFNpbmNlIHRoZSBcInNldFwiIHBhdGggY2FuIGhhdmUgdHdvIHBvc3NpYmxlIGVudHJ5IHBvaW50c1xyXG5cdFx0Ly8gcmV0dXJuIHRoZSBleHBlY3RlZCBkYXRhIGJhc2VkIG9uIHdoaWNoIHBhdGggd2FzIHRha2VuWypdXHJcblx0XHRyZXR1cm4gdmFsdWUgIT09IHVuZGVmaW5lZCA/IHZhbHVlIDoga2V5O1xyXG5cdH0sXHJcblx0cmVtb3ZlOiBmdW5jdGlvbiggb3duZXIsIGtleSApIHtcclxuXHRcdHZhciBpLCBuYW1lLCBjYW1lbCxcclxuXHRcdFx0dW5sb2NrID0gdGhpcy5rZXkoIG93bmVyICksXHJcblx0XHRcdGNhY2hlID0gdGhpcy5jYWNoZVsgdW5sb2NrIF07XHJcblxyXG5cdFx0aWYgKCBrZXkgPT09IHVuZGVmaW5lZCApIHtcclxuXHRcdFx0dGhpcy5jYWNoZVsgdW5sb2NrIF0gPSB7fTtcclxuXHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHQvLyBTdXBwb3J0IGFycmF5IG9yIHNwYWNlIHNlcGFyYXRlZCBzdHJpbmcgb2Yga2V5c1xyXG5cdFx0XHRpZiAoIGpRdWVyeS5pc0FycmF5KCBrZXkgKSApIHtcclxuXHRcdFx0XHQvLyBJZiBcIm5hbWVcIiBpcyBhbiBhcnJheSBvZiBrZXlzLi4uXHJcblx0XHRcdFx0Ly8gV2hlbiBkYXRhIGlzIGluaXRpYWxseSBjcmVhdGVkLCB2aWEgKFwia2V5XCIsIFwidmFsXCIpIHNpZ25hdHVyZSxcclxuXHRcdFx0XHQvLyBrZXlzIHdpbGwgYmUgY29udmVydGVkIHRvIGNhbWVsQ2FzZS5cclxuXHRcdFx0XHQvLyBTaW5jZSB0aGVyZSBpcyBubyB3YXkgdG8gdGVsbCBfaG93XyBhIGtleSB3YXMgYWRkZWQsIHJlbW92ZVxyXG5cdFx0XHRcdC8vIGJvdGggcGxhaW4ga2V5IGFuZCBjYW1lbENhc2Uga2V5LiAjMTI3ODZcclxuXHRcdFx0XHQvLyBUaGlzIHdpbGwgb25seSBwZW5hbGl6ZSB0aGUgYXJyYXkgYXJndW1lbnQgcGF0aC5cclxuXHRcdFx0XHRuYW1lID0ga2V5LmNvbmNhdCgga2V5Lm1hcCggalF1ZXJ5LmNhbWVsQ2FzZSApICk7XHJcblx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0Y2FtZWwgPSBqUXVlcnkuY2FtZWxDYXNlKCBrZXkgKTtcclxuXHRcdFx0XHQvLyBUcnkgdGhlIHN0cmluZyBhcyBhIGtleSBiZWZvcmUgYW55IG1hbmlwdWxhdGlvblxyXG5cdFx0XHRcdGlmICgga2V5IGluIGNhY2hlICkge1xyXG5cdFx0XHRcdFx0bmFtZSA9IFsga2V5LCBjYW1lbCBdO1xyXG5cdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHQvLyBJZiBhIGtleSB3aXRoIHRoZSBzcGFjZXMgZXhpc3RzLCB1c2UgaXQuXHJcblx0XHRcdFx0XHQvLyBPdGhlcndpc2UsIGNyZWF0ZSBhbiBhcnJheSBieSBtYXRjaGluZyBub24td2hpdGVzcGFjZVxyXG5cdFx0XHRcdFx0bmFtZSA9IGNhbWVsO1xyXG5cdFx0XHRcdFx0bmFtZSA9IG5hbWUgaW4gY2FjaGUgP1xyXG5cdFx0XHRcdFx0XHRbIG5hbWUgXSA6ICggbmFtZS5tYXRjaCggcm5vdHdoaXRlICkgfHwgW10gKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdGkgPSBuYW1lLmxlbmd0aDtcclxuXHRcdFx0d2hpbGUgKCBpLS0gKSB7XHJcblx0XHRcdFx0ZGVsZXRlIGNhY2hlWyBuYW1lWyBpIF0gXTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdH0sXHJcblx0aGFzRGF0YTogZnVuY3Rpb24oIG93bmVyICkge1xyXG5cdFx0cmV0dXJuICFqUXVlcnkuaXNFbXB0eU9iamVjdChcclxuXHRcdFx0dGhpcy5jYWNoZVsgb3duZXJbIHRoaXMuZXhwYW5kbyBdIF0gfHwge31cclxuXHRcdCk7XHJcblx0fSxcclxuXHRkaXNjYXJkOiBmdW5jdGlvbiggb3duZXIgKSB7XHJcblx0XHRpZiAoIG93bmVyWyB0aGlzLmV4cGFuZG8gXSApIHtcclxuXHRcdFx0ZGVsZXRlIHRoaXMuY2FjaGVbIG93bmVyWyB0aGlzLmV4cGFuZG8gXSBdO1xyXG5cdFx0fVxyXG5cdH1cclxufTtcclxudmFyIGRhdGFfcHJpdiA9IG5ldyBEYXRhKCk7XHJcblxyXG52YXIgZGF0YV91c2VyID0gbmV3IERhdGEoKTtcclxuXHJcblxyXG5cclxuLy9cdEltcGxlbWVudGF0aW9uIFN1bW1hcnlcclxuLy9cclxuLy9cdDEuIEVuZm9yY2UgQVBJIHN1cmZhY2UgYW5kIHNlbWFudGljIGNvbXBhdGliaWxpdHkgd2l0aCAxLjkueCBicmFuY2hcclxuLy9cdDIuIEltcHJvdmUgdGhlIG1vZHVsZSdzIG1haW50YWluYWJpbGl0eSBieSByZWR1Y2luZyB0aGUgc3RvcmFnZVxyXG4vL1x0XHRwYXRocyB0byBhIHNpbmdsZSBtZWNoYW5pc20uXHJcbi8vXHQzLiBVc2UgdGhlIHNhbWUgc2luZ2xlIG1lY2hhbmlzbSB0byBzdXBwb3J0IFwicHJpdmF0ZVwiIGFuZCBcInVzZXJcIiBkYXRhLlxyXG4vL1x0NC4gX05ldmVyXyBleHBvc2UgXCJwcml2YXRlXCIgZGF0YSB0byB1c2VyIGNvZGUgKFRPRE86IERyb3AgX2RhdGEsIF9yZW1vdmVEYXRhKVxyXG4vL1x0NS4gQXZvaWQgZXhwb3NpbmcgaW1wbGVtZW50YXRpb24gZGV0YWlscyBvbiB1c2VyIG9iamVjdHMgKGVnLiBleHBhbmRvIHByb3BlcnRpZXMpXHJcbi8vXHQ2LiBQcm92aWRlIGEgY2xlYXIgcGF0aCBmb3IgaW1wbGVtZW50YXRpb24gdXBncmFkZSB0byBXZWFrTWFwIGluIDIwMTRcclxuXHJcbnZhciByYnJhY2UgPSAvXig/Olxce1tcXHdcXFddKlxcfXxcXFtbXFx3XFxXXSpcXF0pJC8sXHJcblx0cm11bHRpRGFzaCA9IC8oW0EtWl0pL2c7XHJcblxyXG5mdW5jdGlvbiBkYXRhQXR0ciggZWxlbSwga2V5LCBkYXRhICkge1xyXG5cdHZhciBuYW1lO1xyXG5cclxuXHQvLyBJZiBub3RoaW5nIHdhcyBmb3VuZCBpbnRlcm5hbGx5LCB0cnkgdG8gZmV0Y2ggYW55XHJcblx0Ly8gZGF0YSBmcm9tIHRoZSBIVE1MNSBkYXRhLSogYXR0cmlidXRlXHJcblx0aWYgKCBkYXRhID09PSB1bmRlZmluZWQgJiYgZWxlbS5ub2RlVHlwZSA9PT0gMSApIHtcclxuXHRcdG5hbWUgPSBcImRhdGEtXCIgKyBrZXkucmVwbGFjZSggcm11bHRpRGFzaCwgXCItJDFcIiApLnRvTG93ZXJDYXNlKCk7XHJcblx0XHRkYXRhID0gZWxlbS5nZXRBdHRyaWJ1dGUoIG5hbWUgKTtcclxuXHJcblx0XHRpZiAoIHR5cGVvZiBkYXRhID09PSBcInN0cmluZ1wiICkge1xyXG5cdFx0XHR0cnkge1xyXG5cdFx0XHRcdGRhdGEgPSBkYXRhID09PSBcInRydWVcIiA/IHRydWUgOlxyXG5cdFx0XHRcdFx0ZGF0YSA9PT0gXCJmYWxzZVwiID8gZmFsc2UgOlxyXG5cdFx0XHRcdFx0ZGF0YSA9PT0gXCJudWxsXCIgPyBudWxsIDpcclxuXHRcdFx0XHRcdC8vIE9ubHkgY29udmVydCB0byBhIG51bWJlciBpZiBpdCBkb2Vzbid0IGNoYW5nZSB0aGUgc3RyaW5nXHJcblx0XHRcdFx0XHQrZGF0YSArIFwiXCIgPT09IGRhdGEgPyArZGF0YSA6XHJcblx0XHRcdFx0XHRyYnJhY2UudGVzdCggZGF0YSApID8galF1ZXJ5LnBhcnNlSlNPTiggZGF0YSApIDpcclxuXHRcdFx0XHRcdGRhdGE7XHJcblx0XHRcdH0gY2F0Y2goIGUgKSB7fVxyXG5cclxuXHRcdFx0Ly8gTWFrZSBzdXJlIHdlIHNldCB0aGUgZGF0YSBzbyBpdCBpc24ndCBjaGFuZ2VkIGxhdGVyXHJcblx0XHRcdGRhdGFfdXNlci5zZXQoIGVsZW0sIGtleSwgZGF0YSApO1xyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0ZGF0YSA9IHVuZGVmaW5lZDtcclxuXHRcdH1cclxuXHR9XHJcblx0cmV0dXJuIGRhdGE7XHJcbn1cclxuXHJcbmpRdWVyeS5leHRlbmQoe1xyXG5cdGhhc0RhdGE6IGZ1bmN0aW9uKCBlbGVtICkge1xyXG5cdFx0cmV0dXJuIGRhdGFfdXNlci5oYXNEYXRhKCBlbGVtICkgfHwgZGF0YV9wcml2Lmhhc0RhdGEoIGVsZW0gKTtcclxuXHR9LFxyXG5cclxuXHRkYXRhOiBmdW5jdGlvbiggZWxlbSwgbmFtZSwgZGF0YSApIHtcclxuXHRcdHJldHVybiBkYXRhX3VzZXIuYWNjZXNzKCBlbGVtLCBuYW1lLCBkYXRhICk7XHJcblx0fSxcclxuXHJcblx0cmVtb3ZlRGF0YTogZnVuY3Rpb24oIGVsZW0sIG5hbWUgKSB7XHJcblx0XHRkYXRhX3VzZXIucmVtb3ZlKCBlbGVtLCBuYW1lICk7XHJcblx0fSxcclxuXHJcblx0Ly8gVE9ETzogTm93IHRoYXQgYWxsIGNhbGxzIHRvIF9kYXRhIGFuZCBfcmVtb3ZlRGF0YSBoYXZlIGJlZW4gcmVwbGFjZWRcclxuXHQvLyB3aXRoIGRpcmVjdCBjYWxscyB0byBkYXRhX3ByaXYgbWV0aG9kcywgdGhlc2UgY2FuIGJlIGRlcHJlY2F0ZWQuXHJcblx0X2RhdGE6IGZ1bmN0aW9uKCBlbGVtLCBuYW1lLCBkYXRhICkge1xyXG5cdFx0cmV0dXJuIGRhdGFfcHJpdi5hY2Nlc3MoIGVsZW0sIG5hbWUsIGRhdGEgKTtcclxuXHR9LFxyXG5cclxuXHRfcmVtb3ZlRGF0YTogZnVuY3Rpb24oIGVsZW0sIG5hbWUgKSB7XHJcblx0XHRkYXRhX3ByaXYucmVtb3ZlKCBlbGVtLCBuYW1lICk7XHJcblx0fVxyXG59KTtcclxuXHJcbmpRdWVyeS5mbi5leHRlbmQoe1xyXG5cdGRhdGE6IGZ1bmN0aW9uKCBrZXksIHZhbHVlICkge1xyXG5cdFx0dmFyIGksIG5hbWUsIGRhdGEsXHJcblx0XHRcdGVsZW0gPSB0aGlzWyAwIF0sXHJcblx0XHRcdGF0dHJzID0gZWxlbSAmJiBlbGVtLmF0dHJpYnV0ZXM7XHJcblxyXG5cdFx0Ly8gR2V0cyBhbGwgdmFsdWVzXHJcblx0XHRpZiAoIGtleSA9PT0gdW5kZWZpbmVkICkge1xyXG5cdFx0XHRpZiAoIHRoaXMubGVuZ3RoICkge1xyXG5cdFx0XHRcdGRhdGEgPSBkYXRhX3VzZXIuZ2V0KCBlbGVtICk7XHJcblxyXG5cdFx0XHRcdGlmICggZWxlbS5ub2RlVHlwZSA9PT0gMSAmJiAhZGF0YV9wcml2LmdldCggZWxlbSwgXCJoYXNEYXRhQXR0cnNcIiApICkge1xyXG5cdFx0XHRcdFx0aSA9IGF0dHJzLmxlbmd0aDtcclxuXHRcdFx0XHRcdHdoaWxlICggaS0tICkge1xyXG5cclxuXHRcdFx0XHRcdFx0Ly8gU3VwcG9ydDogSUUxMStcclxuXHRcdFx0XHRcdFx0Ly8gVGhlIGF0dHJzIGVsZW1lbnRzIGNhbiBiZSBudWxsICgjMTQ4OTQpXHJcblx0XHRcdFx0XHRcdGlmICggYXR0cnNbIGkgXSApIHtcclxuXHRcdFx0XHRcdFx0XHRuYW1lID0gYXR0cnNbIGkgXS5uYW1lO1xyXG5cdFx0XHRcdFx0XHRcdGlmICggbmFtZS5pbmRleE9mKCBcImRhdGEtXCIgKSA9PT0gMCApIHtcclxuXHRcdFx0XHRcdFx0XHRcdG5hbWUgPSBqUXVlcnkuY2FtZWxDYXNlKCBuYW1lLnNsaWNlKDUpICk7XHJcblx0XHRcdFx0XHRcdFx0XHRkYXRhQXR0ciggZWxlbSwgbmFtZSwgZGF0YVsgbmFtZSBdICk7XHJcblx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRkYXRhX3ByaXYuc2V0KCBlbGVtLCBcImhhc0RhdGFBdHRyc1wiLCB0cnVlICk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRyZXR1cm4gZGF0YTtcclxuXHRcdH1cclxuXHJcblx0XHQvLyBTZXRzIG11bHRpcGxlIHZhbHVlc1xyXG5cdFx0aWYgKCB0eXBlb2Yga2V5ID09PSBcIm9iamVjdFwiICkge1xyXG5cdFx0XHRyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCkge1xyXG5cdFx0XHRcdGRhdGFfdXNlci5zZXQoIHRoaXMsIGtleSApO1xyXG5cdFx0XHR9KTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gYWNjZXNzKCB0aGlzLCBmdW5jdGlvbiggdmFsdWUgKSB7XHJcblx0XHRcdHZhciBkYXRhLFxyXG5cdFx0XHRcdGNhbWVsS2V5ID0galF1ZXJ5LmNhbWVsQ2FzZSgga2V5ICk7XHJcblxyXG5cdFx0XHQvLyBUaGUgY2FsbGluZyBqUXVlcnkgb2JqZWN0IChlbGVtZW50IG1hdGNoZXMpIGlzIG5vdCBlbXB0eVxyXG5cdFx0XHQvLyAoYW5kIHRoZXJlZm9yZSBoYXMgYW4gZWxlbWVudCBhcHBlYXJzIGF0IHRoaXNbIDAgXSkgYW5kIHRoZVxyXG5cdFx0XHQvLyBgdmFsdWVgIHBhcmFtZXRlciB3YXMgbm90IHVuZGVmaW5lZC4gQW4gZW1wdHkgalF1ZXJ5IG9iamVjdFxyXG5cdFx0XHQvLyB3aWxsIHJlc3VsdCBpbiBgdW5kZWZpbmVkYCBmb3IgZWxlbSA9IHRoaXNbIDAgXSB3aGljaCB3aWxsXHJcblx0XHRcdC8vIHRocm93IGFuIGV4Y2VwdGlvbiBpZiBhbiBhdHRlbXB0IHRvIHJlYWQgYSBkYXRhIGNhY2hlIGlzIG1hZGUuXHJcblx0XHRcdGlmICggZWxlbSAmJiB2YWx1ZSA9PT0gdW5kZWZpbmVkICkge1xyXG5cdFx0XHRcdC8vIEF0dGVtcHQgdG8gZ2V0IGRhdGEgZnJvbSB0aGUgY2FjaGVcclxuXHRcdFx0XHQvLyB3aXRoIHRoZSBrZXkgYXMtaXNcclxuXHRcdFx0XHRkYXRhID0gZGF0YV91c2VyLmdldCggZWxlbSwga2V5ICk7XHJcblx0XHRcdFx0aWYgKCBkYXRhICE9PSB1bmRlZmluZWQgKSB7XHJcblx0XHRcdFx0XHRyZXR1cm4gZGF0YTtcclxuXHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdC8vIEF0dGVtcHQgdG8gZ2V0IGRhdGEgZnJvbSB0aGUgY2FjaGVcclxuXHRcdFx0XHQvLyB3aXRoIHRoZSBrZXkgY2FtZWxpemVkXHJcblx0XHRcdFx0ZGF0YSA9IGRhdGFfdXNlci5nZXQoIGVsZW0sIGNhbWVsS2V5ICk7XHJcblx0XHRcdFx0aWYgKCBkYXRhICE9PSB1bmRlZmluZWQgKSB7XHJcblx0XHRcdFx0XHRyZXR1cm4gZGF0YTtcclxuXHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdC8vIEF0dGVtcHQgdG8gXCJkaXNjb3ZlclwiIHRoZSBkYXRhIGluXHJcblx0XHRcdFx0Ly8gSFRNTDUgY3VzdG9tIGRhdGEtKiBhdHRyc1xyXG5cdFx0XHRcdGRhdGEgPSBkYXRhQXR0ciggZWxlbSwgY2FtZWxLZXksIHVuZGVmaW5lZCApO1xyXG5cdFx0XHRcdGlmICggZGF0YSAhPT0gdW5kZWZpbmVkICkge1xyXG5cdFx0XHRcdFx0cmV0dXJuIGRhdGE7XHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHQvLyBXZSB0cmllZCByZWFsbHkgaGFyZCwgYnV0IHRoZSBkYXRhIGRvZXNuJ3QgZXhpc3QuXHJcblx0XHRcdFx0cmV0dXJuO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHQvLyBTZXQgdGhlIGRhdGEuLi5cclxuXHRcdFx0dGhpcy5lYWNoKGZ1bmN0aW9uKCkge1xyXG5cdFx0XHRcdC8vIEZpcnN0LCBhdHRlbXB0IHRvIHN0b3JlIGEgY29weSBvciByZWZlcmVuY2Ugb2YgYW55XHJcblx0XHRcdFx0Ly8gZGF0YSB0aGF0IG1pZ2h0J3ZlIGJlZW4gc3RvcmUgd2l0aCBhIGNhbWVsQ2FzZWQga2V5LlxyXG5cdFx0XHRcdHZhciBkYXRhID0gZGF0YV91c2VyLmdldCggdGhpcywgY2FtZWxLZXkgKTtcclxuXHJcblx0XHRcdFx0Ly8gRm9yIEhUTUw1IGRhdGEtKiBhdHRyaWJ1dGUgaW50ZXJvcCwgd2UgaGF2ZSB0b1xyXG5cdFx0XHRcdC8vIHN0b3JlIHByb3BlcnR5IG5hbWVzIHdpdGggZGFzaGVzIGluIGEgY2FtZWxDYXNlIGZvcm0uXHJcblx0XHRcdFx0Ly8gVGhpcyBtaWdodCBub3QgYXBwbHkgdG8gYWxsIHByb3BlcnRpZXMuLi4qXHJcblx0XHRcdFx0ZGF0YV91c2VyLnNldCggdGhpcywgY2FtZWxLZXksIHZhbHVlICk7XHJcblxyXG5cdFx0XHRcdC8vICouLi4gSW4gdGhlIGNhc2Ugb2YgcHJvcGVydGllcyB0aGF0IG1pZ2h0IF9hY3R1YWxseV9cclxuXHRcdFx0XHQvLyBoYXZlIGRhc2hlcywgd2UgbmVlZCB0byBhbHNvIHN0b3JlIGEgY29weSBvZiB0aGF0XHJcblx0XHRcdFx0Ly8gdW5jaGFuZ2VkIHByb3BlcnR5LlxyXG5cdFx0XHRcdGlmICgga2V5LmluZGV4T2YoXCItXCIpICE9PSAtMSAmJiBkYXRhICE9PSB1bmRlZmluZWQgKSB7XHJcblx0XHRcdFx0XHRkYXRhX3VzZXIuc2V0KCB0aGlzLCBrZXksIHZhbHVlICk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9KTtcclxuXHRcdH0sIG51bGwsIHZhbHVlLCBhcmd1bWVudHMubGVuZ3RoID4gMSwgbnVsbCwgdHJ1ZSApO1xyXG5cdH0sXHJcblxyXG5cdHJlbW92ZURhdGE6IGZ1bmN0aW9uKCBrZXkgKSB7XHJcblx0XHRyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCkge1xyXG5cdFx0XHRkYXRhX3VzZXIucmVtb3ZlKCB0aGlzLCBrZXkgKTtcclxuXHRcdH0pO1xyXG5cdH1cclxufSk7XHJcblxyXG5cclxualF1ZXJ5LmV4dGVuZCh7XHJcblx0cXVldWU6IGZ1bmN0aW9uKCBlbGVtLCB0eXBlLCBkYXRhICkge1xyXG5cdFx0dmFyIHF1ZXVlO1xyXG5cclxuXHRcdGlmICggZWxlbSApIHtcclxuXHRcdFx0dHlwZSA9ICggdHlwZSB8fCBcImZ4XCIgKSArIFwicXVldWVcIjtcclxuXHRcdFx0cXVldWUgPSBkYXRhX3ByaXYuZ2V0KCBlbGVtLCB0eXBlICk7XHJcblxyXG5cdFx0XHQvLyBTcGVlZCB1cCBkZXF1ZXVlIGJ5IGdldHRpbmcgb3V0IHF1aWNrbHkgaWYgdGhpcyBpcyBqdXN0IGEgbG9va3VwXHJcblx0XHRcdGlmICggZGF0YSApIHtcclxuXHRcdFx0XHRpZiAoICFxdWV1ZSB8fCBqUXVlcnkuaXNBcnJheSggZGF0YSApICkge1xyXG5cdFx0XHRcdFx0cXVldWUgPSBkYXRhX3ByaXYuYWNjZXNzKCBlbGVtLCB0eXBlLCBqUXVlcnkubWFrZUFycmF5KGRhdGEpICk7XHJcblx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdHF1ZXVlLnB1c2goIGRhdGEgKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdFx0cmV0dXJuIHF1ZXVlIHx8IFtdO1xyXG5cdFx0fVxyXG5cdH0sXHJcblxyXG5cdGRlcXVldWU6IGZ1bmN0aW9uKCBlbGVtLCB0eXBlICkge1xyXG5cdFx0dHlwZSA9IHR5cGUgfHwgXCJmeFwiO1xyXG5cclxuXHRcdHZhciBxdWV1ZSA9IGpRdWVyeS5xdWV1ZSggZWxlbSwgdHlwZSApLFxyXG5cdFx0XHRzdGFydExlbmd0aCA9IHF1ZXVlLmxlbmd0aCxcclxuXHRcdFx0Zm4gPSBxdWV1ZS5zaGlmdCgpLFxyXG5cdFx0XHRob29rcyA9IGpRdWVyeS5fcXVldWVIb29rcyggZWxlbSwgdHlwZSApLFxyXG5cdFx0XHRuZXh0ID0gZnVuY3Rpb24oKSB7XHJcblx0XHRcdFx0alF1ZXJ5LmRlcXVldWUoIGVsZW0sIHR5cGUgKTtcclxuXHRcdFx0fTtcclxuXHJcblx0XHQvLyBJZiB0aGUgZnggcXVldWUgaXMgZGVxdWV1ZWQsIGFsd2F5cyByZW1vdmUgdGhlIHByb2dyZXNzIHNlbnRpbmVsXHJcblx0XHRpZiAoIGZuID09PSBcImlucHJvZ3Jlc3NcIiApIHtcclxuXHRcdFx0Zm4gPSBxdWV1ZS5zaGlmdCgpO1xyXG5cdFx0XHRzdGFydExlbmd0aC0tO1xyXG5cdFx0fVxyXG5cclxuXHRcdGlmICggZm4gKSB7XHJcblxyXG5cdFx0XHQvLyBBZGQgYSBwcm9ncmVzcyBzZW50aW5lbCB0byBwcmV2ZW50IHRoZSBmeCBxdWV1ZSBmcm9tIGJlaW5nXHJcblx0XHRcdC8vIGF1dG9tYXRpY2FsbHkgZGVxdWV1ZWRcclxuXHRcdFx0aWYgKCB0eXBlID09PSBcImZ4XCIgKSB7XHJcblx0XHRcdFx0cXVldWUudW5zaGlmdCggXCJpbnByb2dyZXNzXCIgKTtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0Ly8gQ2xlYXIgdXAgdGhlIGxhc3QgcXVldWUgc3RvcCBmdW5jdGlvblxyXG5cdFx0XHRkZWxldGUgaG9va3Muc3RvcDtcclxuXHRcdFx0Zm4uY2FsbCggZWxlbSwgbmV4dCwgaG9va3MgKTtcclxuXHRcdH1cclxuXHJcblx0XHRpZiAoICFzdGFydExlbmd0aCAmJiBob29rcyApIHtcclxuXHRcdFx0aG9va3MuZW1wdHkuZmlyZSgpO1xyXG5cdFx0fVxyXG5cdH0sXHJcblxyXG5cdC8vIE5vdCBwdWJsaWMgLSBnZW5lcmF0ZSBhIHF1ZXVlSG9va3Mgb2JqZWN0LCBvciByZXR1cm4gdGhlIGN1cnJlbnQgb25lXHJcblx0X3F1ZXVlSG9va3M6IGZ1bmN0aW9uKCBlbGVtLCB0eXBlICkge1xyXG5cdFx0dmFyIGtleSA9IHR5cGUgKyBcInF1ZXVlSG9va3NcIjtcclxuXHRcdHJldHVybiBkYXRhX3ByaXYuZ2V0KCBlbGVtLCBrZXkgKSB8fCBkYXRhX3ByaXYuYWNjZXNzKCBlbGVtLCBrZXksIHtcclxuXHRcdFx0ZW1wdHk6IGpRdWVyeS5DYWxsYmFja3MoXCJvbmNlIG1lbW9yeVwiKS5hZGQoZnVuY3Rpb24oKSB7XHJcblx0XHRcdFx0ZGF0YV9wcml2LnJlbW92ZSggZWxlbSwgWyB0eXBlICsgXCJxdWV1ZVwiLCBrZXkgXSApO1xyXG5cdFx0XHR9KVxyXG5cdFx0fSk7XHJcblx0fVxyXG59KTtcclxuXHJcbmpRdWVyeS5mbi5leHRlbmQoe1xyXG5cdHF1ZXVlOiBmdW5jdGlvbiggdHlwZSwgZGF0YSApIHtcclxuXHRcdHZhciBzZXR0ZXIgPSAyO1xyXG5cclxuXHRcdGlmICggdHlwZW9mIHR5cGUgIT09IFwic3RyaW5nXCIgKSB7XHJcblx0XHRcdGRhdGEgPSB0eXBlO1xyXG5cdFx0XHR0eXBlID0gXCJmeFwiO1xyXG5cdFx0XHRzZXR0ZXItLTtcclxuXHRcdH1cclxuXHJcblx0XHRpZiAoIGFyZ3VtZW50cy5sZW5ndGggPCBzZXR0ZXIgKSB7XHJcblx0XHRcdHJldHVybiBqUXVlcnkucXVldWUoIHRoaXNbMF0sIHR5cGUgKTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gZGF0YSA9PT0gdW5kZWZpbmVkID9cclxuXHRcdFx0dGhpcyA6XHJcblx0XHRcdHRoaXMuZWFjaChmdW5jdGlvbigpIHtcclxuXHRcdFx0XHR2YXIgcXVldWUgPSBqUXVlcnkucXVldWUoIHRoaXMsIHR5cGUsIGRhdGEgKTtcclxuXHJcblx0XHRcdFx0Ly8gRW5zdXJlIGEgaG9va3MgZm9yIHRoaXMgcXVldWVcclxuXHRcdFx0XHRqUXVlcnkuX3F1ZXVlSG9va3MoIHRoaXMsIHR5cGUgKTtcclxuXHJcblx0XHRcdFx0aWYgKCB0eXBlID09PSBcImZ4XCIgJiYgcXVldWVbMF0gIT09IFwiaW5wcm9ncmVzc1wiICkge1xyXG5cdFx0XHRcdFx0alF1ZXJ5LmRlcXVldWUoIHRoaXMsIHR5cGUgKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH0pO1xyXG5cdH0sXHJcblx0ZGVxdWV1ZTogZnVuY3Rpb24oIHR5cGUgKSB7XHJcblx0XHRyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCkge1xyXG5cdFx0XHRqUXVlcnkuZGVxdWV1ZSggdGhpcywgdHlwZSApO1xyXG5cdFx0fSk7XHJcblx0fSxcclxuXHRjbGVhclF1ZXVlOiBmdW5jdGlvbiggdHlwZSApIHtcclxuXHRcdHJldHVybiB0aGlzLnF1ZXVlKCB0eXBlIHx8IFwiZnhcIiwgW10gKTtcclxuXHR9LFxyXG5cdC8vIEdldCBhIHByb21pc2UgcmVzb2x2ZWQgd2hlbiBxdWV1ZXMgb2YgYSBjZXJ0YWluIHR5cGVcclxuXHQvLyBhcmUgZW1wdGllZCAoZnggaXMgdGhlIHR5cGUgYnkgZGVmYXVsdClcclxuXHRwcm9taXNlOiBmdW5jdGlvbiggdHlwZSwgb2JqICkge1xyXG5cdFx0dmFyIHRtcCxcclxuXHRcdFx0Y291bnQgPSAxLFxyXG5cdFx0XHRkZWZlciA9IGpRdWVyeS5EZWZlcnJlZCgpLFxyXG5cdFx0XHRlbGVtZW50cyA9IHRoaXMsXHJcblx0XHRcdGkgPSB0aGlzLmxlbmd0aCxcclxuXHRcdFx0cmVzb2x2ZSA9IGZ1bmN0aW9uKCkge1xyXG5cdFx0XHRcdGlmICggISggLS1jb3VudCApICkge1xyXG5cdFx0XHRcdFx0ZGVmZXIucmVzb2x2ZVdpdGgoIGVsZW1lbnRzLCBbIGVsZW1lbnRzIF0gKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH07XHJcblxyXG5cdFx0aWYgKCB0eXBlb2YgdHlwZSAhPT0gXCJzdHJpbmdcIiApIHtcclxuXHRcdFx0b2JqID0gdHlwZTtcclxuXHRcdFx0dHlwZSA9IHVuZGVmaW5lZDtcclxuXHRcdH1cclxuXHRcdHR5cGUgPSB0eXBlIHx8IFwiZnhcIjtcclxuXHJcblx0XHR3aGlsZSAoIGktLSApIHtcclxuXHRcdFx0dG1wID0gZGF0YV9wcml2LmdldCggZWxlbWVudHNbIGkgXSwgdHlwZSArIFwicXVldWVIb29rc1wiICk7XHJcblx0XHRcdGlmICggdG1wICYmIHRtcC5lbXB0eSApIHtcclxuXHRcdFx0XHRjb3VudCsrO1xyXG5cdFx0XHRcdHRtcC5lbXB0eS5hZGQoIHJlc29sdmUgKTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdFx0cmVzb2x2ZSgpO1xyXG5cdFx0cmV0dXJuIGRlZmVyLnByb21pc2UoIG9iaiApO1xyXG5cdH1cclxufSk7XHJcbnZhciBwbnVtID0gKC9bKy1dPyg/OlxcZCpcXC58KVxcZCsoPzpbZUVdWystXT9cXGQrfCkvKS5zb3VyY2U7XHJcblxyXG52YXIgY3NzRXhwYW5kID0gWyBcIlRvcFwiLCBcIlJpZ2h0XCIsIFwiQm90dG9tXCIsIFwiTGVmdFwiIF07XHJcblxyXG52YXIgaXNIaWRkZW4gPSBmdW5jdGlvbiggZWxlbSwgZWwgKSB7XHJcblx0XHQvLyBpc0hpZGRlbiBtaWdodCBiZSBjYWxsZWQgZnJvbSBqUXVlcnkjZmlsdGVyIGZ1bmN0aW9uO1xyXG5cdFx0Ly8gaW4gdGhhdCBjYXNlLCBlbGVtZW50IHdpbGwgYmUgc2Vjb25kIGFyZ3VtZW50XHJcblx0XHRlbGVtID0gZWwgfHwgZWxlbTtcclxuXHRcdHJldHVybiBqUXVlcnkuY3NzKCBlbGVtLCBcImRpc3BsYXlcIiApID09PSBcIm5vbmVcIiB8fCAhalF1ZXJ5LmNvbnRhaW5zKCBlbGVtLm93bmVyRG9jdW1lbnQsIGVsZW0gKTtcclxuXHR9O1xyXG5cclxudmFyIHJjaGVja2FibGVUeXBlID0gKC9eKD86Y2hlY2tib3h8cmFkaW8pJC9pKTtcclxuXHJcblxyXG5cclxuKGZ1bmN0aW9uKCkge1xyXG5cdHZhciBmcmFnbWVudCA9IGRvY3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKSxcclxuXHRcdGRpdiA9IGZyYWdtZW50LmFwcGVuZENoaWxkKCBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCBcImRpdlwiICkgKSxcclxuXHRcdGlucHV0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggXCJpbnB1dFwiICk7XHJcblxyXG5cdC8vIFN1cHBvcnQ6IFNhZmFyaTw9NS4xXHJcblx0Ly8gQ2hlY2sgc3RhdGUgbG9zdCBpZiB0aGUgbmFtZSBpcyBzZXQgKCMxMTIxNylcclxuXHQvLyBTdXBwb3J0OiBXaW5kb3dzIFdlYiBBcHBzIChXV0EpXHJcblx0Ly8gYG5hbWVgIGFuZCBgdHlwZWAgbXVzdCB1c2UgLnNldEF0dHJpYnV0ZSBmb3IgV1dBICgjMTQ5MDEpXHJcblx0aW5wdXQuc2V0QXR0cmlidXRlKCBcInR5cGVcIiwgXCJyYWRpb1wiICk7XHJcblx0aW5wdXQuc2V0QXR0cmlidXRlKCBcImNoZWNrZWRcIiwgXCJjaGVja2VkXCIgKTtcclxuXHRpbnB1dC5zZXRBdHRyaWJ1dGUoIFwibmFtZVwiLCBcInRcIiApO1xyXG5cclxuXHRkaXYuYXBwZW5kQ2hpbGQoIGlucHV0ICk7XHJcblxyXG5cdC8vIFN1cHBvcnQ6IFNhZmFyaTw9NS4xLCBBbmRyb2lkPDQuMlxyXG5cdC8vIE9sZGVyIFdlYktpdCBkb2Vzbid0IGNsb25lIGNoZWNrZWQgc3RhdGUgY29ycmVjdGx5IGluIGZyYWdtZW50c1xyXG5cdHN1cHBvcnQuY2hlY2tDbG9uZSA9IGRpdi5jbG9uZU5vZGUoIHRydWUgKS5jbG9uZU5vZGUoIHRydWUgKS5sYXN0Q2hpbGQuY2hlY2tlZDtcclxuXHJcblx0Ly8gU3VwcG9ydDogSUU8PTExK1xyXG5cdC8vIE1ha2Ugc3VyZSB0ZXh0YXJlYSAoYW5kIGNoZWNrYm94KSBkZWZhdWx0VmFsdWUgaXMgcHJvcGVybHkgY2xvbmVkXHJcblx0ZGl2LmlubmVySFRNTCA9IFwiPHRleHRhcmVhPng8L3RleHRhcmVhPlwiO1xyXG5cdHN1cHBvcnQubm9DbG9uZUNoZWNrZWQgPSAhIWRpdi5jbG9uZU5vZGUoIHRydWUgKS5sYXN0Q2hpbGQuZGVmYXVsdFZhbHVlO1xyXG59KSgpO1xyXG52YXIgc3RydW5kZWZpbmVkID0gdHlwZW9mIHVuZGVmaW5lZDtcclxuXHJcblxyXG5cclxuc3VwcG9ydC5mb2N1c2luQnViYmxlcyA9IFwib25mb2N1c2luXCIgaW4gd2luZG93O1xyXG5cclxuXHJcbnZhclxyXG5cdHJrZXlFdmVudCA9IC9ea2V5LyxcclxuXHRybW91c2VFdmVudCA9IC9eKD86bW91c2V8cG9pbnRlcnxjb250ZXh0bWVudSl8Y2xpY2svLFxyXG5cdHJmb2N1c01vcnBoID0gL14oPzpmb2N1c2luZm9jdXN8Zm9jdXNvdXRibHVyKSQvLFxyXG5cdHJ0eXBlbmFtZXNwYWNlID0gL14oW14uXSopKD86XFwuKC4rKXwpJC87XHJcblxyXG5mdW5jdGlvbiByZXR1cm5UcnVlKCkge1xyXG5cdHJldHVybiB0cnVlO1xyXG59XHJcblxyXG5mdW5jdGlvbiByZXR1cm5GYWxzZSgpIHtcclxuXHRyZXR1cm4gZmFsc2U7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHNhZmVBY3RpdmVFbGVtZW50KCkge1xyXG5cdHRyeSB7XHJcblx0XHRyZXR1cm4gZG9jdW1lbnQuYWN0aXZlRWxlbWVudDtcclxuXHR9IGNhdGNoICggZXJyICkgeyB9XHJcbn1cclxuXHJcbi8qXHJcbiAqIEhlbHBlciBmdW5jdGlvbnMgZm9yIG1hbmFnaW5nIGV2ZW50cyAtLSBub3QgcGFydCBvZiB0aGUgcHVibGljIGludGVyZmFjZS5cclxuICogUHJvcHMgdG8gRGVhbiBFZHdhcmRzJyBhZGRFdmVudCBsaWJyYXJ5IGZvciBtYW55IG9mIHRoZSBpZGVhcy5cclxuICovXHJcbmpRdWVyeS5ldmVudCA9IHtcclxuXHJcblx0Z2xvYmFsOiB7fSxcclxuXHJcblx0YWRkOiBmdW5jdGlvbiggZWxlbSwgdHlwZXMsIGhhbmRsZXIsIGRhdGEsIHNlbGVjdG9yICkge1xyXG5cclxuXHRcdHZhciBoYW5kbGVPYmpJbiwgZXZlbnRIYW5kbGUsIHRtcCxcclxuXHRcdFx0ZXZlbnRzLCB0LCBoYW5kbGVPYmosXHJcblx0XHRcdHNwZWNpYWwsIGhhbmRsZXJzLCB0eXBlLCBuYW1lc3BhY2VzLCBvcmlnVHlwZSxcclxuXHRcdFx0ZWxlbURhdGEgPSBkYXRhX3ByaXYuZ2V0KCBlbGVtICk7XHJcblxyXG5cdFx0Ly8gRG9uJ3QgYXR0YWNoIGV2ZW50cyB0byBub0RhdGEgb3IgdGV4dC9jb21tZW50IG5vZGVzIChidXQgYWxsb3cgcGxhaW4gb2JqZWN0cylcclxuXHRcdGlmICggIWVsZW1EYXRhICkge1xyXG5cdFx0XHRyZXR1cm47XHJcblx0XHR9XHJcblxyXG5cdFx0Ly8gQ2FsbGVyIGNhbiBwYXNzIGluIGFuIG9iamVjdCBvZiBjdXN0b20gZGF0YSBpbiBsaWV1IG9mIHRoZSBoYW5kbGVyXHJcblx0XHRpZiAoIGhhbmRsZXIuaGFuZGxlciApIHtcclxuXHRcdFx0aGFuZGxlT2JqSW4gPSBoYW5kbGVyO1xyXG5cdFx0XHRoYW5kbGVyID0gaGFuZGxlT2JqSW4uaGFuZGxlcjtcclxuXHRcdFx0c2VsZWN0b3IgPSBoYW5kbGVPYmpJbi5zZWxlY3RvcjtcclxuXHRcdH1cclxuXHJcblx0XHQvLyBNYWtlIHN1cmUgdGhhdCB0aGUgaGFuZGxlciBoYXMgYSB1bmlxdWUgSUQsIHVzZWQgdG8gZmluZC9yZW1vdmUgaXQgbGF0ZXJcclxuXHRcdGlmICggIWhhbmRsZXIuZ3VpZCApIHtcclxuXHRcdFx0aGFuZGxlci5ndWlkID0galF1ZXJ5Lmd1aWQrKztcclxuXHRcdH1cclxuXHJcblx0XHQvLyBJbml0IHRoZSBlbGVtZW50J3MgZXZlbnQgc3RydWN0dXJlIGFuZCBtYWluIGhhbmRsZXIsIGlmIHRoaXMgaXMgdGhlIGZpcnN0XHJcblx0XHRpZiAoICEoZXZlbnRzID0gZWxlbURhdGEuZXZlbnRzKSApIHtcclxuXHRcdFx0ZXZlbnRzID0gZWxlbURhdGEuZXZlbnRzID0ge307XHJcblx0XHR9XHJcblx0XHRpZiAoICEoZXZlbnRIYW5kbGUgPSBlbGVtRGF0YS5oYW5kbGUpICkge1xyXG5cdFx0XHRldmVudEhhbmRsZSA9IGVsZW1EYXRhLmhhbmRsZSA9IGZ1bmN0aW9uKCBlICkge1xyXG5cdFx0XHRcdC8vIERpc2NhcmQgdGhlIHNlY29uZCBldmVudCBvZiBhIGpRdWVyeS5ldmVudC50cmlnZ2VyKCkgYW5kXHJcblx0XHRcdFx0Ly8gd2hlbiBhbiBldmVudCBpcyBjYWxsZWQgYWZ0ZXIgYSBwYWdlIGhhcyB1bmxvYWRlZFxyXG5cdFx0XHRcdHJldHVybiB0eXBlb2YgalF1ZXJ5ICE9PSBzdHJ1bmRlZmluZWQgJiYgalF1ZXJ5LmV2ZW50LnRyaWdnZXJlZCAhPT0gZS50eXBlID9cclxuXHRcdFx0XHRcdGpRdWVyeS5ldmVudC5kaXNwYXRjaC5hcHBseSggZWxlbSwgYXJndW1lbnRzICkgOiB1bmRlZmluZWQ7XHJcblx0XHRcdH07XHJcblx0XHR9XHJcblxyXG5cdFx0Ly8gSGFuZGxlIG11bHRpcGxlIGV2ZW50cyBzZXBhcmF0ZWQgYnkgYSBzcGFjZVxyXG5cdFx0dHlwZXMgPSAoIHR5cGVzIHx8IFwiXCIgKS5tYXRjaCggcm5vdHdoaXRlICkgfHwgWyBcIlwiIF07XHJcblx0XHR0ID0gdHlwZXMubGVuZ3RoO1xyXG5cdFx0d2hpbGUgKCB0LS0gKSB7XHJcblx0XHRcdHRtcCA9IHJ0eXBlbmFtZXNwYWNlLmV4ZWMoIHR5cGVzW3RdICkgfHwgW107XHJcblx0XHRcdHR5cGUgPSBvcmlnVHlwZSA9IHRtcFsxXTtcclxuXHRcdFx0bmFtZXNwYWNlcyA9ICggdG1wWzJdIHx8IFwiXCIgKS5zcGxpdCggXCIuXCIgKS5zb3J0KCk7XHJcblxyXG5cdFx0XHQvLyBUaGVyZSAqbXVzdCogYmUgYSB0eXBlLCBubyBhdHRhY2hpbmcgbmFtZXNwYWNlLW9ubHkgaGFuZGxlcnNcclxuXHRcdFx0aWYgKCAhdHlwZSApIHtcclxuXHRcdFx0XHRjb250aW51ZTtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0Ly8gSWYgZXZlbnQgY2hhbmdlcyBpdHMgdHlwZSwgdXNlIHRoZSBzcGVjaWFsIGV2ZW50IGhhbmRsZXJzIGZvciB0aGUgY2hhbmdlZCB0eXBlXHJcblx0XHRcdHNwZWNpYWwgPSBqUXVlcnkuZXZlbnQuc3BlY2lhbFsgdHlwZSBdIHx8IHt9O1xyXG5cclxuXHRcdFx0Ly8gSWYgc2VsZWN0b3IgZGVmaW5lZCwgZGV0ZXJtaW5lIHNwZWNpYWwgZXZlbnQgYXBpIHR5cGUsIG90aGVyd2lzZSBnaXZlbiB0eXBlXHJcblx0XHRcdHR5cGUgPSAoIHNlbGVjdG9yID8gc3BlY2lhbC5kZWxlZ2F0ZVR5cGUgOiBzcGVjaWFsLmJpbmRUeXBlICkgfHwgdHlwZTtcclxuXHJcblx0XHRcdC8vIFVwZGF0ZSBzcGVjaWFsIGJhc2VkIG9uIG5ld2x5IHJlc2V0IHR5cGVcclxuXHRcdFx0c3BlY2lhbCA9IGpRdWVyeS5ldmVudC5zcGVjaWFsWyB0eXBlIF0gfHwge307XHJcblxyXG5cdFx0XHQvLyBoYW5kbGVPYmogaXMgcGFzc2VkIHRvIGFsbCBldmVudCBoYW5kbGVyc1xyXG5cdFx0XHRoYW5kbGVPYmogPSBqUXVlcnkuZXh0ZW5kKHtcclxuXHRcdFx0XHR0eXBlOiB0eXBlLFxyXG5cdFx0XHRcdG9yaWdUeXBlOiBvcmlnVHlwZSxcclxuXHRcdFx0XHRkYXRhOiBkYXRhLFxyXG5cdFx0XHRcdGhhbmRsZXI6IGhhbmRsZXIsXHJcblx0XHRcdFx0Z3VpZDogaGFuZGxlci5ndWlkLFxyXG5cdFx0XHRcdHNlbGVjdG9yOiBzZWxlY3RvcixcclxuXHRcdFx0XHRuZWVkc0NvbnRleHQ6IHNlbGVjdG9yICYmIGpRdWVyeS5leHByLm1hdGNoLm5lZWRzQ29udGV4dC50ZXN0KCBzZWxlY3RvciApLFxyXG5cdFx0XHRcdG5hbWVzcGFjZTogbmFtZXNwYWNlcy5qb2luKFwiLlwiKVxyXG5cdFx0XHR9LCBoYW5kbGVPYmpJbiApO1xyXG5cclxuXHRcdFx0Ly8gSW5pdCB0aGUgZXZlbnQgaGFuZGxlciBxdWV1ZSBpZiB3ZSdyZSB0aGUgZmlyc3RcclxuXHRcdFx0aWYgKCAhKGhhbmRsZXJzID0gZXZlbnRzWyB0eXBlIF0pICkge1xyXG5cdFx0XHRcdGhhbmRsZXJzID0gZXZlbnRzWyB0eXBlIF0gPSBbXTtcclxuXHRcdFx0XHRoYW5kbGVycy5kZWxlZ2F0ZUNvdW50ID0gMDtcclxuXHJcblx0XHRcdFx0Ly8gT25seSB1c2UgYWRkRXZlbnRMaXN0ZW5lciBpZiB0aGUgc3BlY2lhbCBldmVudHMgaGFuZGxlciByZXR1cm5zIGZhbHNlXHJcblx0XHRcdFx0aWYgKCAhc3BlY2lhbC5zZXR1cCB8fCBzcGVjaWFsLnNldHVwLmNhbGwoIGVsZW0sIGRhdGEsIG5hbWVzcGFjZXMsIGV2ZW50SGFuZGxlICkgPT09IGZhbHNlICkge1xyXG5cdFx0XHRcdFx0aWYgKCBlbGVtLmFkZEV2ZW50TGlzdGVuZXIgKSB7XHJcblx0XHRcdFx0XHRcdGVsZW0uYWRkRXZlbnRMaXN0ZW5lciggdHlwZSwgZXZlbnRIYW5kbGUsIGZhbHNlICk7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRpZiAoIHNwZWNpYWwuYWRkICkge1xyXG5cdFx0XHRcdHNwZWNpYWwuYWRkLmNhbGwoIGVsZW0sIGhhbmRsZU9iaiApO1xyXG5cclxuXHRcdFx0XHRpZiAoICFoYW5kbGVPYmouaGFuZGxlci5ndWlkICkge1xyXG5cdFx0XHRcdFx0aGFuZGxlT2JqLmhhbmRsZXIuZ3VpZCA9IGhhbmRsZXIuZ3VpZDtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdC8vIEFkZCB0byB0aGUgZWxlbWVudCdzIGhhbmRsZXIgbGlzdCwgZGVsZWdhdGVzIGluIGZyb250XHJcblx0XHRcdGlmICggc2VsZWN0b3IgKSB7XHJcblx0XHRcdFx0aGFuZGxlcnMuc3BsaWNlKCBoYW5kbGVycy5kZWxlZ2F0ZUNvdW50KyssIDAsIGhhbmRsZU9iaiApO1xyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdGhhbmRsZXJzLnB1c2goIGhhbmRsZU9iaiApO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHQvLyBLZWVwIHRyYWNrIG9mIHdoaWNoIGV2ZW50cyBoYXZlIGV2ZXIgYmVlbiB1c2VkLCBmb3IgZXZlbnQgb3B0aW1pemF0aW9uXHJcblx0XHRcdGpRdWVyeS5ldmVudC5nbG9iYWxbIHR5cGUgXSA9IHRydWU7XHJcblx0XHR9XHJcblxyXG5cdH0sXHJcblxyXG5cdC8vIERldGFjaCBhbiBldmVudCBvciBzZXQgb2YgZXZlbnRzIGZyb20gYW4gZWxlbWVudFxyXG5cdHJlbW92ZTogZnVuY3Rpb24oIGVsZW0sIHR5cGVzLCBoYW5kbGVyLCBzZWxlY3RvciwgbWFwcGVkVHlwZXMgKSB7XHJcblxyXG5cdFx0dmFyIGosIG9yaWdDb3VudCwgdG1wLFxyXG5cdFx0XHRldmVudHMsIHQsIGhhbmRsZU9iaixcclxuXHRcdFx0c3BlY2lhbCwgaGFuZGxlcnMsIHR5cGUsIG5hbWVzcGFjZXMsIG9yaWdUeXBlLFxyXG5cdFx0XHRlbGVtRGF0YSA9IGRhdGFfcHJpdi5oYXNEYXRhKCBlbGVtICkgJiYgZGF0YV9wcml2LmdldCggZWxlbSApO1xyXG5cclxuXHRcdGlmICggIWVsZW1EYXRhIHx8ICEoZXZlbnRzID0gZWxlbURhdGEuZXZlbnRzKSApIHtcclxuXHRcdFx0cmV0dXJuO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8vIE9uY2UgZm9yIGVhY2ggdHlwZS5uYW1lc3BhY2UgaW4gdHlwZXM7IHR5cGUgbWF5IGJlIG9taXR0ZWRcclxuXHRcdHR5cGVzID0gKCB0eXBlcyB8fCBcIlwiICkubWF0Y2goIHJub3R3aGl0ZSApIHx8IFsgXCJcIiBdO1xyXG5cdFx0dCA9IHR5cGVzLmxlbmd0aDtcclxuXHRcdHdoaWxlICggdC0tICkge1xyXG5cdFx0XHR0bXAgPSBydHlwZW5hbWVzcGFjZS5leGVjKCB0eXBlc1t0XSApIHx8IFtdO1xyXG5cdFx0XHR0eXBlID0gb3JpZ1R5cGUgPSB0bXBbMV07XHJcblx0XHRcdG5hbWVzcGFjZXMgPSAoIHRtcFsyXSB8fCBcIlwiICkuc3BsaXQoIFwiLlwiICkuc29ydCgpO1xyXG5cclxuXHRcdFx0Ly8gVW5iaW5kIGFsbCBldmVudHMgKG9uIHRoaXMgbmFtZXNwYWNlLCBpZiBwcm92aWRlZCkgZm9yIHRoZSBlbGVtZW50XHJcblx0XHRcdGlmICggIXR5cGUgKSB7XHJcblx0XHRcdFx0Zm9yICggdHlwZSBpbiBldmVudHMgKSB7XHJcblx0XHRcdFx0XHRqUXVlcnkuZXZlbnQucmVtb3ZlKCBlbGVtLCB0eXBlICsgdHlwZXNbIHQgXSwgaGFuZGxlciwgc2VsZWN0b3IsIHRydWUgKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0Y29udGludWU7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdHNwZWNpYWwgPSBqUXVlcnkuZXZlbnQuc3BlY2lhbFsgdHlwZSBdIHx8IHt9O1xyXG5cdFx0XHR0eXBlID0gKCBzZWxlY3RvciA/IHNwZWNpYWwuZGVsZWdhdGVUeXBlIDogc3BlY2lhbC5iaW5kVHlwZSApIHx8IHR5cGU7XHJcblx0XHRcdGhhbmRsZXJzID0gZXZlbnRzWyB0eXBlIF0gfHwgW107XHJcblx0XHRcdHRtcCA9IHRtcFsyXSAmJiBuZXcgUmVnRXhwKCBcIihefFxcXFwuKVwiICsgbmFtZXNwYWNlcy5qb2luKFwiXFxcXC4oPzouKlxcXFwufClcIikgKyBcIihcXFxcLnwkKVwiICk7XHJcblxyXG5cdFx0XHQvLyBSZW1vdmUgbWF0Y2hpbmcgZXZlbnRzXHJcblx0XHRcdG9yaWdDb3VudCA9IGogPSBoYW5kbGVycy5sZW5ndGg7XHJcblx0XHRcdHdoaWxlICggai0tICkge1xyXG5cdFx0XHRcdGhhbmRsZU9iaiA9IGhhbmRsZXJzWyBqIF07XHJcblxyXG5cdFx0XHRcdGlmICggKCBtYXBwZWRUeXBlcyB8fCBvcmlnVHlwZSA9PT0gaGFuZGxlT2JqLm9yaWdUeXBlICkgJiZcclxuXHRcdFx0XHRcdCggIWhhbmRsZXIgfHwgaGFuZGxlci5ndWlkID09PSBoYW5kbGVPYmouZ3VpZCApICYmXHJcblx0XHRcdFx0XHQoICF0bXAgfHwgdG1wLnRlc3QoIGhhbmRsZU9iai5uYW1lc3BhY2UgKSApICYmXHJcblx0XHRcdFx0XHQoICFzZWxlY3RvciB8fCBzZWxlY3RvciA9PT0gaGFuZGxlT2JqLnNlbGVjdG9yIHx8IHNlbGVjdG9yID09PSBcIioqXCIgJiYgaGFuZGxlT2JqLnNlbGVjdG9yICkgKSB7XHJcblx0XHRcdFx0XHRoYW5kbGVycy5zcGxpY2UoIGosIDEgKTtcclxuXHJcblx0XHRcdFx0XHRpZiAoIGhhbmRsZU9iai5zZWxlY3RvciApIHtcclxuXHRcdFx0XHRcdFx0aGFuZGxlcnMuZGVsZWdhdGVDb3VudC0tO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0aWYgKCBzcGVjaWFsLnJlbW92ZSApIHtcclxuXHRcdFx0XHRcdFx0c3BlY2lhbC5yZW1vdmUuY2FsbCggZWxlbSwgaGFuZGxlT2JqICk7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHQvLyBSZW1vdmUgZ2VuZXJpYyBldmVudCBoYW5kbGVyIGlmIHdlIHJlbW92ZWQgc29tZXRoaW5nIGFuZCBubyBtb3JlIGhhbmRsZXJzIGV4aXN0XHJcblx0XHRcdC8vIChhdm9pZHMgcG90ZW50aWFsIGZvciBlbmRsZXNzIHJlY3Vyc2lvbiBkdXJpbmcgcmVtb3ZhbCBvZiBzcGVjaWFsIGV2ZW50IGhhbmRsZXJzKVxyXG5cdFx0XHRpZiAoIG9yaWdDb3VudCAmJiAhaGFuZGxlcnMubGVuZ3RoICkge1xyXG5cdFx0XHRcdGlmICggIXNwZWNpYWwudGVhcmRvd24gfHwgc3BlY2lhbC50ZWFyZG93bi5jYWxsKCBlbGVtLCBuYW1lc3BhY2VzLCBlbGVtRGF0YS5oYW5kbGUgKSA9PT0gZmFsc2UgKSB7XHJcblx0XHRcdFx0XHRqUXVlcnkucmVtb3ZlRXZlbnQoIGVsZW0sIHR5cGUsIGVsZW1EYXRhLmhhbmRsZSApO1xyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0ZGVsZXRlIGV2ZW50c1sgdHlwZSBdO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblxyXG5cdFx0Ly8gUmVtb3ZlIHRoZSBleHBhbmRvIGlmIGl0J3Mgbm8gbG9uZ2VyIHVzZWRcclxuXHRcdGlmICggalF1ZXJ5LmlzRW1wdHlPYmplY3QoIGV2ZW50cyApICkge1xyXG5cdFx0XHRkZWxldGUgZWxlbURhdGEuaGFuZGxlO1xyXG5cdFx0XHRkYXRhX3ByaXYucmVtb3ZlKCBlbGVtLCBcImV2ZW50c1wiICk7XHJcblx0XHR9XHJcblx0fSxcclxuXHJcblx0dHJpZ2dlcjogZnVuY3Rpb24oIGV2ZW50LCBkYXRhLCBlbGVtLCBvbmx5SGFuZGxlcnMgKSB7XHJcblxyXG5cdFx0dmFyIGksIGN1ciwgdG1wLCBidWJibGVUeXBlLCBvbnR5cGUsIGhhbmRsZSwgc3BlY2lhbCxcclxuXHRcdFx0ZXZlbnRQYXRoID0gWyBlbGVtIHx8IGRvY3VtZW50IF0sXHJcblx0XHRcdHR5cGUgPSBoYXNPd24uY2FsbCggZXZlbnQsIFwidHlwZVwiICkgPyBldmVudC50eXBlIDogZXZlbnQsXHJcblx0XHRcdG5hbWVzcGFjZXMgPSBoYXNPd24uY2FsbCggZXZlbnQsIFwibmFtZXNwYWNlXCIgKSA/IGV2ZW50Lm5hbWVzcGFjZS5zcGxpdChcIi5cIikgOiBbXTtcclxuXHJcblx0XHRjdXIgPSB0bXAgPSBlbGVtID0gZWxlbSB8fCBkb2N1bWVudDtcclxuXHJcblx0XHQvLyBEb24ndCBkbyBldmVudHMgb24gdGV4dCBhbmQgY29tbWVudCBub2Rlc1xyXG5cdFx0aWYgKCBlbGVtLm5vZGVUeXBlID09PSAzIHx8IGVsZW0ubm9kZVR5cGUgPT09IDggKSB7XHJcblx0XHRcdHJldHVybjtcclxuXHRcdH1cclxuXHJcblx0XHQvLyBmb2N1cy9ibHVyIG1vcnBocyB0byBmb2N1c2luL291dDsgZW5zdXJlIHdlJ3JlIG5vdCBmaXJpbmcgdGhlbSByaWdodCBub3dcclxuXHRcdGlmICggcmZvY3VzTW9ycGgudGVzdCggdHlwZSArIGpRdWVyeS5ldmVudC50cmlnZ2VyZWQgKSApIHtcclxuXHRcdFx0cmV0dXJuO1xyXG5cdFx0fVxyXG5cclxuXHRcdGlmICggdHlwZS5pbmRleE9mKFwiLlwiKSA+PSAwICkge1xyXG5cdFx0XHQvLyBOYW1lc3BhY2VkIHRyaWdnZXI7IGNyZWF0ZSBhIHJlZ2V4cCB0byBtYXRjaCBldmVudCB0eXBlIGluIGhhbmRsZSgpXHJcblx0XHRcdG5hbWVzcGFjZXMgPSB0eXBlLnNwbGl0KFwiLlwiKTtcclxuXHRcdFx0dHlwZSA9IG5hbWVzcGFjZXMuc2hpZnQoKTtcclxuXHRcdFx0bmFtZXNwYWNlcy5zb3J0KCk7XHJcblx0XHR9XHJcblx0XHRvbnR5cGUgPSB0eXBlLmluZGV4T2YoXCI6XCIpIDwgMCAmJiBcIm9uXCIgKyB0eXBlO1xyXG5cclxuXHRcdC8vIENhbGxlciBjYW4gcGFzcyBpbiBhIGpRdWVyeS5FdmVudCBvYmplY3QsIE9iamVjdCwgb3IganVzdCBhbiBldmVudCB0eXBlIHN0cmluZ1xyXG5cdFx0ZXZlbnQgPSBldmVudFsgalF1ZXJ5LmV4cGFuZG8gXSA/XHJcblx0XHRcdGV2ZW50IDpcclxuXHRcdFx0bmV3IGpRdWVyeS5FdmVudCggdHlwZSwgdHlwZW9mIGV2ZW50ID09PSBcIm9iamVjdFwiICYmIGV2ZW50ICk7XHJcblxyXG5cdFx0Ly8gVHJpZ2dlciBiaXRtYXNrOiAmIDEgZm9yIG5hdGl2ZSBoYW5kbGVyczsgJiAyIGZvciBqUXVlcnkgKGFsd2F5cyB0cnVlKVxyXG5cdFx0ZXZlbnQuaXNUcmlnZ2VyID0gb25seUhhbmRsZXJzID8gMiA6IDM7XHJcblx0XHRldmVudC5uYW1lc3BhY2UgPSBuYW1lc3BhY2VzLmpvaW4oXCIuXCIpO1xyXG5cdFx0ZXZlbnQubmFtZXNwYWNlX3JlID0gZXZlbnQubmFtZXNwYWNlID9cclxuXHRcdFx0bmV3IFJlZ0V4cCggXCIoXnxcXFxcLilcIiArIG5hbWVzcGFjZXMuam9pbihcIlxcXFwuKD86LipcXFxcLnwpXCIpICsgXCIoXFxcXC58JClcIiApIDpcclxuXHRcdFx0bnVsbDtcclxuXHJcblx0XHQvLyBDbGVhbiB1cCB0aGUgZXZlbnQgaW4gY2FzZSBpdCBpcyBiZWluZyByZXVzZWRcclxuXHRcdGV2ZW50LnJlc3VsdCA9IHVuZGVmaW5lZDtcclxuXHRcdGlmICggIWV2ZW50LnRhcmdldCApIHtcclxuXHRcdFx0ZXZlbnQudGFyZ2V0ID0gZWxlbTtcclxuXHRcdH1cclxuXHJcblx0XHQvLyBDbG9uZSBhbnkgaW5jb21pbmcgZGF0YSBhbmQgcHJlcGVuZCB0aGUgZXZlbnQsIGNyZWF0aW5nIHRoZSBoYW5kbGVyIGFyZyBsaXN0XHJcblx0XHRkYXRhID0gZGF0YSA9PSBudWxsID9cclxuXHRcdFx0WyBldmVudCBdIDpcclxuXHRcdFx0alF1ZXJ5Lm1ha2VBcnJheSggZGF0YSwgWyBldmVudCBdICk7XHJcblxyXG5cdFx0Ly8gQWxsb3cgc3BlY2lhbCBldmVudHMgdG8gZHJhdyBvdXRzaWRlIHRoZSBsaW5lc1xyXG5cdFx0c3BlY2lhbCA9IGpRdWVyeS5ldmVudC5zcGVjaWFsWyB0eXBlIF0gfHwge307XHJcblx0XHRpZiAoICFvbmx5SGFuZGxlcnMgJiYgc3BlY2lhbC50cmlnZ2VyICYmIHNwZWNpYWwudHJpZ2dlci5hcHBseSggZWxlbSwgZGF0YSApID09PSBmYWxzZSApIHtcclxuXHRcdFx0cmV0dXJuO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8vIERldGVybWluZSBldmVudCBwcm9wYWdhdGlvbiBwYXRoIGluIGFkdmFuY2UsIHBlciBXM0MgZXZlbnRzIHNwZWMgKCM5OTUxKVxyXG5cdFx0Ly8gQnViYmxlIHVwIHRvIGRvY3VtZW50LCB0aGVuIHRvIHdpbmRvdzsgd2F0Y2ggZm9yIGEgZ2xvYmFsIG93bmVyRG9jdW1lbnQgdmFyICgjOTcyNClcclxuXHRcdGlmICggIW9ubHlIYW5kbGVycyAmJiAhc3BlY2lhbC5ub0J1YmJsZSAmJiAhalF1ZXJ5LmlzV2luZG93KCBlbGVtICkgKSB7XHJcblxyXG5cdFx0XHRidWJibGVUeXBlID0gc3BlY2lhbC5kZWxlZ2F0ZVR5cGUgfHwgdHlwZTtcclxuXHRcdFx0aWYgKCAhcmZvY3VzTW9ycGgudGVzdCggYnViYmxlVHlwZSArIHR5cGUgKSApIHtcclxuXHRcdFx0XHRjdXIgPSBjdXIucGFyZW50Tm9kZTtcclxuXHRcdFx0fVxyXG5cdFx0XHRmb3IgKCA7IGN1cjsgY3VyID0gY3VyLnBhcmVudE5vZGUgKSB7XHJcblx0XHRcdFx0ZXZlbnRQYXRoLnB1c2goIGN1ciApO1xyXG5cdFx0XHRcdHRtcCA9IGN1cjtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0Ly8gT25seSBhZGQgd2luZG93IGlmIHdlIGdvdCB0byBkb2N1bWVudCAoZS5nLiwgbm90IHBsYWluIG9iaiBvciBkZXRhY2hlZCBET00pXHJcblx0XHRcdGlmICggdG1wID09PSAoZWxlbS5vd25lckRvY3VtZW50IHx8IGRvY3VtZW50KSApIHtcclxuXHRcdFx0XHRldmVudFBhdGgucHVzaCggdG1wLmRlZmF1bHRWaWV3IHx8IHRtcC5wYXJlbnRXaW5kb3cgfHwgd2luZG93ICk7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHJcblx0XHQvLyBGaXJlIGhhbmRsZXJzIG9uIHRoZSBldmVudCBwYXRoXHJcblx0XHRpID0gMDtcclxuXHRcdHdoaWxlICggKGN1ciA9IGV2ZW50UGF0aFtpKytdKSAmJiAhZXZlbnQuaXNQcm9wYWdhdGlvblN0b3BwZWQoKSApIHtcclxuXHJcblx0XHRcdGV2ZW50LnR5cGUgPSBpID4gMSA/XHJcblx0XHRcdFx0YnViYmxlVHlwZSA6XHJcblx0XHRcdFx0c3BlY2lhbC5iaW5kVHlwZSB8fCB0eXBlO1xyXG5cclxuXHRcdFx0Ly8galF1ZXJ5IGhhbmRsZXJcclxuXHRcdFx0aGFuZGxlID0gKCBkYXRhX3ByaXYuZ2V0KCBjdXIsIFwiZXZlbnRzXCIgKSB8fCB7fSApWyBldmVudC50eXBlIF0gJiYgZGF0YV9wcml2LmdldCggY3VyLCBcImhhbmRsZVwiICk7XHJcblx0XHRcdGlmICggaGFuZGxlICkge1xyXG5cdFx0XHRcdGhhbmRsZS5hcHBseSggY3VyLCBkYXRhICk7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdC8vIE5hdGl2ZSBoYW5kbGVyXHJcblx0XHRcdGhhbmRsZSA9IG9udHlwZSAmJiBjdXJbIG9udHlwZSBdO1xyXG5cdFx0XHRpZiAoIGhhbmRsZSAmJiBoYW5kbGUuYXBwbHkgJiYgalF1ZXJ5LmFjY2VwdERhdGEoIGN1ciApICkge1xyXG5cdFx0XHRcdGV2ZW50LnJlc3VsdCA9IGhhbmRsZS5hcHBseSggY3VyLCBkYXRhICk7XHJcblx0XHRcdFx0aWYgKCBldmVudC5yZXN1bHQgPT09IGZhbHNlICkge1xyXG5cdFx0XHRcdFx0ZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHRcdGV2ZW50LnR5cGUgPSB0eXBlO1xyXG5cclxuXHRcdC8vIElmIG5vYm9keSBwcmV2ZW50ZWQgdGhlIGRlZmF1bHQgYWN0aW9uLCBkbyBpdCBub3dcclxuXHRcdGlmICggIW9ubHlIYW5kbGVycyAmJiAhZXZlbnQuaXNEZWZhdWx0UHJldmVudGVkKCkgKSB7XHJcblxyXG5cdFx0XHRpZiAoICghc3BlY2lhbC5fZGVmYXVsdCB8fCBzcGVjaWFsLl9kZWZhdWx0LmFwcGx5KCBldmVudFBhdGgucG9wKCksIGRhdGEgKSA9PT0gZmFsc2UpICYmXHJcblx0XHRcdFx0alF1ZXJ5LmFjY2VwdERhdGEoIGVsZW0gKSApIHtcclxuXHJcblx0XHRcdFx0Ly8gQ2FsbCBhIG5hdGl2ZSBET00gbWV0aG9kIG9uIHRoZSB0YXJnZXQgd2l0aCB0aGUgc2FtZSBuYW1lIG5hbWUgYXMgdGhlIGV2ZW50LlxyXG5cdFx0XHRcdC8vIERvbid0IGRvIGRlZmF1bHQgYWN0aW9ucyBvbiB3aW5kb3csIHRoYXQncyB3aGVyZSBnbG9iYWwgdmFyaWFibGVzIGJlICgjNjE3MClcclxuXHRcdFx0XHRpZiAoIG9udHlwZSAmJiBqUXVlcnkuaXNGdW5jdGlvbiggZWxlbVsgdHlwZSBdICkgJiYgIWpRdWVyeS5pc1dpbmRvdyggZWxlbSApICkge1xyXG5cclxuXHRcdFx0XHRcdC8vIERvbid0IHJlLXRyaWdnZXIgYW4gb25GT08gZXZlbnQgd2hlbiB3ZSBjYWxsIGl0cyBGT08oKSBtZXRob2RcclxuXHRcdFx0XHRcdHRtcCA9IGVsZW1bIG9udHlwZSBdO1xyXG5cclxuXHRcdFx0XHRcdGlmICggdG1wICkge1xyXG5cdFx0XHRcdFx0XHRlbGVtWyBvbnR5cGUgXSA9IG51bGw7XHJcblx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0Ly8gUHJldmVudCByZS10cmlnZ2VyaW5nIG9mIHRoZSBzYW1lIGV2ZW50LCBzaW5jZSB3ZSBhbHJlYWR5IGJ1YmJsZWQgaXQgYWJvdmVcclxuXHRcdFx0XHRcdGpRdWVyeS5ldmVudC50cmlnZ2VyZWQgPSB0eXBlO1xyXG5cdFx0XHRcdFx0ZWxlbVsgdHlwZSBdKCk7XHJcblx0XHRcdFx0XHRqUXVlcnkuZXZlbnQudHJpZ2dlcmVkID0gdW5kZWZpbmVkO1xyXG5cclxuXHRcdFx0XHRcdGlmICggdG1wICkge1xyXG5cdFx0XHRcdFx0XHRlbGVtWyBvbnR5cGUgXSA9IHRtcDtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gZXZlbnQucmVzdWx0O1xyXG5cdH0sXHJcblxyXG5cdGRpc3BhdGNoOiBmdW5jdGlvbiggZXZlbnQgKSB7XHJcblxyXG5cdFx0Ly8gTWFrZSBhIHdyaXRhYmxlIGpRdWVyeS5FdmVudCBmcm9tIHRoZSBuYXRpdmUgZXZlbnQgb2JqZWN0XHJcblx0XHRldmVudCA9IGpRdWVyeS5ldmVudC5maXgoIGV2ZW50ICk7XHJcblxyXG5cdFx0dmFyIGksIGosIHJldCwgbWF0Y2hlZCwgaGFuZGxlT2JqLFxyXG5cdFx0XHRoYW5kbGVyUXVldWUgPSBbXSxcclxuXHRcdFx0YXJncyA9IHNsaWNlLmNhbGwoIGFyZ3VtZW50cyApLFxyXG5cdFx0XHRoYW5kbGVycyA9ICggZGF0YV9wcml2LmdldCggdGhpcywgXCJldmVudHNcIiApIHx8IHt9IClbIGV2ZW50LnR5cGUgXSB8fCBbXSxcclxuXHRcdFx0c3BlY2lhbCA9IGpRdWVyeS5ldmVudC5zcGVjaWFsWyBldmVudC50eXBlIF0gfHwge307XHJcblxyXG5cdFx0Ly8gVXNlIHRoZSBmaXgtZWQgalF1ZXJ5LkV2ZW50IHJhdGhlciB0aGFuIHRoZSAocmVhZC1vbmx5KSBuYXRpdmUgZXZlbnRcclxuXHRcdGFyZ3NbMF0gPSBldmVudDtcclxuXHRcdGV2ZW50LmRlbGVnYXRlVGFyZ2V0ID0gdGhpcztcclxuXHJcblx0XHQvLyBDYWxsIHRoZSBwcmVEaXNwYXRjaCBob29rIGZvciB0aGUgbWFwcGVkIHR5cGUsIGFuZCBsZXQgaXQgYmFpbCBpZiBkZXNpcmVkXHJcblx0XHRpZiAoIHNwZWNpYWwucHJlRGlzcGF0Y2ggJiYgc3BlY2lhbC5wcmVEaXNwYXRjaC5jYWxsKCB0aGlzLCBldmVudCApID09PSBmYWxzZSApIHtcclxuXHRcdFx0cmV0dXJuO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8vIERldGVybWluZSBoYW5kbGVyc1xyXG5cdFx0aGFuZGxlclF1ZXVlID0galF1ZXJ5LmV2ZW50LmhhbmRsZXJzLmNhbGwoIHRoaXMsIGV2ZW50LCBoYW5kbGVycyApO1xyXG5cclxuXHRcdC8vIFJ1biBkZWxlZ2F0ZXMgZmlyc3Q7IHRoZXkgbWF5IHdhbnQgdG8gc3RvcCBwcm9wYWdhdGlvbiBiZW5lYXRoIHVzXHJcblx0XHRpID0gMDtcclxuXHRcdHdoaWxlICggKG1hdGNoZWQgPSBoYW5kbGVyUXVldWVbIGkrKyBdKSAmJiAhZXZlbnQuaXNQcm9wYWdhdGlvblN0b3BwZWQoKSApIHtcclxuXHRcdFx0ZXZlbnQuY3VycmVudFRhcmdldCA9IG1hdGNoZWQuZWxlbTtcclxuXHJcblx0XHRcdGogPSAwO1xyXG5cdFx0XHR3aGlsZSAoIChoYW5kbGVPYmogPSBtYXRjaGVkLmhhbmRsZXJzWyBqKysgXSkgJiYgIWV2ZW50LmlzSW1tZWRpYXRlUHJvcGFnYXRpb25TdG9wcGVkKCkgKSB7XHJcblxyXG5cdFx0XHRcdC8vIFRyaWdnZXJlZCBldmVudCBtdXN0IGVpdGhlciAxKSBoYXZlIG5vIG5hbWVzcGFjZSwgb3IgMikgaGF2ZSBuYW1lc3BhY2UocylcclxuXHRcdFx0XHQvLyBhIHN1YnNldCBvciBlcXVhbCB0byB0aG9zZSBpbiB0aGUgYm91bmQgZXZlbnQgKGJvdGggY2FuIGhhdmUgbm8gbmFtZXNwYWNlKS5cclxuXHRcdFx0XHRpZiAoICFldmVudC5uYW1lc3BhY2VfcmUgfHwgZXZlbnQubmFtZXNwYWNlX3JlLnRlc3QoIGhhbmRsZU9iai5uYW1lc3BhY2UgKSApIHtcclxuXHJcblx0XHRcdFx0XHRldmVudC5oYW5kbGVPYmogPSBoYW5kbGVPYmo7XHJcblx0XHRcdFx0XHRldmVudC5kYXRhID0gaGFuZGxlT2JqLmRhdGE7XHJcblxyXG5cdFx0XHRcdFx0cmV0ID0gKCAoalF1ZXJ5LmV2ZW50LnNwZWNpYWxbIGhhbmRsZU9iai5vcmlnVHlwZSBdIHx8IHt9KS5oYW5kbGUgfHwgaGFuZGxlT2JqLmhhbmRsZXIgKVxyXG5cdFx0XHRcdFx0XHRcdC5hcHBseSggbWF0Y2hlZC5lbGVtLCBhcmdzICk7XHJcblxyXG5cdFx0XHRcdFx0aWYgKCByZXQgIT09IHVuZGVmaW5lZCApIHtcclxuXHRcdFx0XHRcdFx0aWYgKCAoZXZlbnQucmVzdWx0ID0gcmV0KSA9PT0gZmFsc2UgKSB7XHJcblx0XHRcdFx0XHRcdFx0ZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuXHRcdFx0XHRcdFx0XHRldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdC8vIENhbGwgdGhlIHBvc3REaXNwYXRjaCBob29rIGZvciB0aGUgbWFwcGVkIHR5cGVcclxuXHRcdGlmICggc3BlY2lhbC5wb3N0RGlzcGF0Y2ggKSB7XHJcblx0XHRcdHNwZWNpYWwucG9zdERpc3BhdGNoLmNhbGwoIHRoaXMsIGV2ZW50ICk7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIGV2ZW50LnJlc3VsdDtcclxuXHR9LFxyXG5cclxuXHRoYW5kbGVyczogZnVuY3Rpb24oIGV2ZW50LCBoYW5kbGVycyApIHtcclxuXHRcdHZhciBpLCBtYXRjaGVzLCBzZWwsIGhhbmRsZU9iaixcclxuXHRcdFx0aGFuZGxlclF1ZXVlID0gW10sXHJcblx0XHRcdGRlbGVnYXRlQ291bnQgPSBoYW5kbGVycy5kZWxlZ2F0ZUNvdW50LFxyXG5cdFx0XHRjdXIgPSBldmVudC50YXJnZXQ7XHJcblxyXG5cdFx0Ly8gRmluZCBkZWxlZ2F0ZSBoYW5kbGVyc1xyXG5cdFx0Ly8gQmxhY2staG9sZSBTVkcgPHVzZT4gaW5zdGFuY2UgdHJlZXMgKCMxMzE4MClcclxuXHRcdC8vIEF2b2lkIG5vbi1sZWZ0LWNsaWNrIGJ1YmJsaW5nIGluIEZpcmVmb3ggKCMzODYxKVxyXG5cdFx0aWYgKCBkZWxlZ2F0ZUNvdW50ICYmIGN1ci5ub2RlVHlwZSAmJiAoIWV2ZW50LmJ1dHRvbiB8fCBldmVudC50eXBlICE9PSBcImNsaWNrXCIpICkge1xyXG5cclxuXHRcdFx0Zm9yICggOyBjdXIgIT09IHRoaXM7IGN1ciA9IGN1ci5wYXJlbnROb2RlIHx8IHRoaXMgKSB7XHJcblxyXG5cdFx0XHRcdC8vIERvbid0IHByb2Nlc3MgY2xpY2tzIG9uIGRpc2FibGVkIGVsZW1lbnRzICgjNjkxMSwgIzgxNjUsICMxMTM4MiwgIzExNzY0KVxyXG5cdFx0XHRcdGlmICggY3VyLmRpc2FibGVkICE9PSB0cnVlIHx8IGV2ZW50LnR5cGUgIT09IFwiY2xpY2tcIiApIHtcclxuXHRcdFx0XHRcdG1hdGNoZXMgPSBbXTtcclxuXHRcdFx0XHRcdGZvciAoIGkgPSAwOyBpIDwgZGVsZWdhdGVDb3VudDsgaSsrICkge1xyXG5cdFx0XHRcdFx0XHRoYW5kbGVPYmogPSBoYW5kbGVyc1sgaSBdO1xyXG5cclxuXHRcdFx0XHRcdFx0Ly8gRG9uJ3QgY29uZmxpY3Qgd2l0aCBPYmplY3QucHJvdG90eXBlIHByb3BlcnRpZXMgKCMxMzIwMylcclxuXHRcdFx0XHRcdFx0c2VsID0gaGFuZGxlT2JqLnNlbGVjdG9yICsgXCIgXCI7XHJcblxyXG5cdFx0XHRcdFx0XHRpZiAoIG1hdGNoZXNbIHNlbCBdID09PSB1bmRlZmluZWQgKSB7XHJcblx0XHRcdFx0XHRcdFx0bWF0Y2hlc1sgc2VsIF0gPSBoYW5kbGVPYmoubmVlZHNDb250ZXh0ID9cclxuXHRcdFx0XHRcdFx0XHRcdGpRdWVyeSggc2VsLCB0aGlzICkuaW5kZXgoIGN1ciApID49IDAgOlxyXG5cdFx0XHRcdFx0XHRcdFx0alF1ZXJ5LmZpbmQoIHNlbCwgdGhpcywgbnVsbCwgWyBjdXIgXSApLmxlbmd0aDtcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRpZiAoIG1hdGNoZXNbIHNlbCBdICkge1xyXG5cdFx0XHRcdFx0XHRcdG1hdGNoZXMucHVzaCggaGFuZGxlT2JqICk7XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdGlmICggbWF0Y2hlcy5sZW5ndGggKSB7XHJcblx0XHRcdFx0XHRcdGhhbmRsZXJRdWV1ZS5wdXNoKHsgZWxlbTogY3VyLCBoYW5kbGVyczogbWF0Y2hlcyB9KTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHJcblx0XHQvLyBBZGQgdGhlIHJlbWFpbmluZyAoZGlyZWN0bHktYm91bmQpIGhhbmRsZXJzXHJcblx0XHRpZiAoIGRlbGVnYXRlQ291bnQgPCBoYW5kbGVycy5sZW5ndGggKSB7XHJcblx0XHRcdGhhbmRsZXJRdWV1ZS5wdXNoKHsgZWxlbTogdGhpcywgaGFuZGxlcnM6IGhhbmRsZXJzLnNsaWNlKCBkZWxlZ2F0ZUNvdW50ICkgfSk7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIGhhbmRsZXJRdWV1ZTtcclxuXHR9LFxyXG5cclxuXHQvLyBJbmNsdWRlcyBzb21lIGV2ZW50IHByb3BzIHNoYXJlZCBieSBLZXlFdmVudCBhbmQgTW91c2VFdmVudFxyXG5cdHByb3BzOiBcImFsdEtleSBidWJibGVzIGNhbmNlbGFibGUgY3RybEtleSBjdXJyZW50VGFyZ2V0IGV2ZW50UGhhc2UgbWV0YUtleSByZWxhdGVkVGFyZ2V0IHNoaWZ0S2V5IHRhcmdldCB0aW1lU3RhbXAgdmlldyB3aGljaFwiLnNwbGl0KFwiIFwiKSxcclxuXHJcblx0Zml4SG9va3M6IHt9LFxyXG5cclxuXHRrZXlIb29rczoge1xyXG5cdFx0cHJvcHM6IFwiY2hhciBjaGFyQ29kZSBrZXkga2V5Q29kZVwiLnNwbGl0KFwiIFwiKSxcclxuXHRcdGZpbHRlcjogZnVuY3Rpb24oIGV2ZW50LCBvcmlnaW5hbCApIHtcclxuXHJcblx0XHRcdC8vIEFkZCB3aGljaCBmb3Iga2V5IGV2ZW50c1xyXG5cdFx0XHRpZiAoIGV2ZW50LndoaWNoID09IG51bGwgKSB7XHJcblx0XHRcdFx0ZXZlbnQud2hpY2ggPSBvcmlnaW5hbC5jaGFyQ29kZSAhPSBudWxsID8gb3JpZ2luYWwuY2hhckNvZGUgOiBvcmlnaW5hbC5rZXlDb2RlO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRyZXR1cm4gZXZlbnQ7XHJcblx0XHR9XHJcblx0fSxcclxuXHJcblx0bW91c2VIb29rczoge1xyXG5cdFx0cHJvcHM6IFwiYnV0dG9uIGJ1dHRvbnMgY2xpZW50WCBjbGllbnRZIG9mZnNldFggb2Zmc2V0WSBwYWdlWCBwYWdlWSBzY3JlZW5YIHNjcmVlblkgdG9FbGVtZW50XCIuc3BsaXQoXCIgXCIpLFxyXG5cdFx0ZmlsdGVyOiBmdW5jdGlvbiggZXZlbnQsIG9yaWdpbmFsICkge1xyXG5cdFx0XHR2YXIgZXZlbnREb2MsIGRvYywgYm9keSxcclxuXHRcdFx0XHRidXR0b24gPSBvcmlnaW5hbC5idXR0b247XHJcblxyXG5cdFx0XHQvLyBDYWxjdWxhdGUgcGFnZVgvWSBpZiBtaXNzaW5nIGFuZCBjbGllbnRYL1kgYXZhaWxhYmxlXHJcblx0XHRcdGlmICggZXZlbnQucGFnZVggPT0gbnVsbCAmJiBvcmlnaW5hbC5jbGllbnRYICE9IG51bGwgKSB7XHJcblx0XHRcdFx0ZXZlbnREb2MgPSBldmVudC50YXJnZXQub3duZXJEb2N1bWVudCB8fCBkb2N1bWVudDtcclxuXHRcdFx0XHRkb2MgPSBldmVudERvYy5kb2N1bWVudEVsZW1lbnQ7XHJcblx0XHRcdFx0Ym9keSA9IGV2ZW50RG9jLmJvZHk7XHJcblxyXG5cdFx0XHRcdGV2ZW50LnBhZ2VYID0gb3JpZ2luYWwuY2xpZW50WCArICggZG9jICYmIGRvYy5zY3JvbGxMZWZ0IHx8IGJvZHkgJiYgYm9keS5zY3JvbGxMZWZ0IHx8IDAgKSAtICggZG9jICYmIGRvYy5jbGllbnRMZWZ0IHx8IGJvZHkgJiYgYm9keS5jbGllbnRMZWZ0IHx8IDAgKTtcclxuXHRcdFx0XHRldmVudC5wYWdlWSA9IG9yaWdpbmFsLmNsaWVudFkgKyAoIGRvYyAmJiBkb2Muc2Nyb2xsVG9wICB8fCBib2R5ICYmIGJvZHkuc2Nyb2xsVG9wICB8fCAwICkgLSAoIGRvYyAmJiBkb2MuY2xpZW50VG9wICB8fCBib2R5ICYmIGJvZHkuY2xpZW50VG9wICB8fCAwICk7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdC8vIEFkZCB3aGljaCBmb3IgY2xpY2s6IDEgPT09IGxlZnQ7IDIgPT09IG1pZGRsZTsgMyA9PT0gcmlnaHRcclxuXHRcdFx0Ly8gTm90ZTogYnV0dG9uIGlzIG5vdCBub3JtYWxpemVkLCBzbyBkb24ndCB1c2UgaXRcclxuXHRcdFx0aWYgKCAhZXZlbnQud2hpY2ggJiYgYnV0dG9uICE9PSB1bmRlZmluZWQgKSB7XHJcblx0XHRcdFx0ZXZlbnQud2hpY2ggPSAoIGJ1dHRvbiAmIDEgPyAxIDogKCBidXR0b24gJiAyID8gMyA6ICggYnV0dG9uICYgNCA/IDIgOiAwICkgKSApO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRyZXR1cm4gZXZlbnQ7XHJcblx0XHR9XHJcblx0fSxcclxuXHJcblx0Zml4OiBmdW5jdGlvbiggZXZlbnQgKSB7XHJcblx0XHRpZiAoIGV2ZW50WyBqUXVlcnkuZXhwYW5kbyBdICkge1xyXG5cdFx0XHRyZXR1cm4gZXZlbnQ7XHJcblx0XHR9XHJcblxyXG5cdFx0Ly8gQ3JlYXRlIGEgd3JpdGFibGUgY29weSBvZiB0aGUgZXZlbnQgb2JqZWN0IGFuZCBub3JtYWxpemUgc29tZSBwcm9wZXJ0aWVzXHJcblx0XHR2YXIgaSwgcHJvcCwgY29weSxcclxuXHRcdFx0dHlwZSA9IGV2ZW50LnR5cGUsXHJcblx0XHRcdG9yaWdpbmFsRXZlbnQgPSBldmVudCxcclxuXHRcdFx0Zml4SG9vayA9IHRoaXMuZml4SG9va3NbIHR5cGUgXTtcclxuXHJcblx0XHRpZiAoICFmaXhIb29rICkge1xyXG5cdFx0XHR0aGlzLmZpeEhvb2tzWyB0eXBlIF0gPSBmaXhIb29rID1cclxuXHRcdFx0XHRybW91c2VFdmVudC50ZXN0KCB0eXBlICkgPyB0aGlzLm1vdXNlSG9va3MgOlxyXG5cdFx0XHRcdHJrZXlFdmVudC50ZXN0KCB0eXBlICkgPyB0aGlzLmtleUhvb2tzIDpcclxuXHRcdFx0XHR7fTtcclxuXHRcdH1cclxuXHRcdGNvcHkgPSBmaXhIb29rLnByb3BzID8gdGhpcy5wcm9wcy5jb25jYXQoIGZpeEhvb2sucHJvcHMgKSA6IHRoaXMucHJvcHM7XHJcblxyXG5cdFx0ZXZlbnQgPSBuZXcgalF1ZXJ5LkV2ZW50KCBvcmlnaW5hbEV2ZW50ICk7XHJcblxyXG5cdFx0aSA9IGNvcHkubGVuZ3RoO1xyXG5cdFx0d2hpbGUgKCBpLS0gKSB7XHJcblx0XHRcdHByb3AgPSBjb3B5WyBpIF07XHJcblx0XHRcdGV2ZW50WyBwcm9wIF0gPSBvcmlnaW5hbEV2ZW50WyBwcm9wIF07XHJcblx0XHR9XHJcblxyXG5cdFx0Ly8gU3VwcG9ydDogQ29yZG92YSAyLjUgKFdlYktpdCkgKCMxMzI1NSlcclxuXHRcdC8vIEFsbCBldmVudHMgc2hvdWxkIGhhdmUgYSB0YXJnZXQ7IENvcmRvdmEgZGV2aWNlcmVhZHkgZG9lc24ndFxyXG5cdFx0aWYgKCAhZXZlbnQudGFyZ2V0ICkge1xyXG5cdFx0XHRldmVudC50YXJnZXQgPSBkb2N1bWVudDtcclxuXHRcdH1cclxuXHJcblx0XHQvLyBTdXBwb3J0OiBTYWZhcmkgNi4wKywgQ2hyb21lPDI4XHJcblx0XHQvLyBUYXJnZXQgc2hvdWxkIG5vdCBiZSBhIHRleHQgbm9kZSAoIzUwNCwgIzEzMTQzKVxyXG5cdFx0aWYgKCBldmVudC50YXJnZXQubm9kZVR5cGUgPT09IDMgKSB7XHJcblx0XHRcdGV2ZW50LnRhcmdldCA9IGV2ZW50LnRhcmdldC5wYXJlbnROb2RlO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiBmaXhIb29rLmZpbHRlciA/IGZpeEhvb2suZmlsdGVyKCBldmVudCwgb3JpZ2luYWxFdmVudCApIDogZXZlbnQ7XHJcblx0fSxcclxuXHJcblx0c3BlY2lhbDoge1xyXG5cdFx0bG9hZDoge1xyXG5cdFx0XHQvLyBQcmV2ZW50IHRyaWdnZXJlZCBpbWFnZS5sb2FkIGV2ZW50cyBmcm9tIGJ1YmJsaW5nIHRvIHdpbmRvdy5sb2FkXHJcblx0XHRcdG5vQnViYmxlOiB0cnVlXHJcblx0XHR9LFxyXG5cdFx0Zm9jdXM6IHtcclxuXHRcdFx0Ly8gRmlyZSBuYXRpdmUgZXZlbnQgaWYgcG9zc2libGUgc28gYmx1ci9mb2N1cyBzZXF1ZW5jZSBpcyBjb3JyZWN0XHJcblx0XHRcdHRyaWdnZXI6IGZ1bmN0aW9uKCkge1xyXG5cdFx0XHRcdGlmICggdGhpcyAhPT0gc2FmZUFjdGl2ZUVsZW1lbnQoKSAmJiB0aGlzLmZvY3VzICkge1xyXG5cdFx0XHRcdFx0dGhpcy5mb2N1cygpO1xyXG5cdFx0XHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fSxcclxuXHRcdFx0ZGVsZWdhdGVUeXBlOiBcImZvY3VzaW5cIlxyXG5cdFx0fSxcclxuXHRcdGJsdXI6IHtcclxuXHRcdFx0dHJpZ2dlcjogZnVuY3Rpb24oKSB7XHJcblx0XHRcdFx0aWYgKCB0aGlzID09PSBzYWZlQWN0aXZlRWxlbWVudCgpICYmIHRoaXMuYmx1ciApIHtcclxuXHRcdFx0XHRcdHRoaXMuYmx1cigpO1xyXG5cdFx0XHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fSxcclxuXHRcdFx0ZGVsZWdhdGVUeXBlOiBcImZvY3Vzb3V0XCJcclxuXHRcdH0sXHJcblx0XHRjbGljazoge1xyXG5cdFx0XHQvLyBGb3IgY2hlY2tib3gsIGZpcmUgbmF0aXZlIGV2ZW50IHNvIGNoZWNrZWQgc3RhdGUgd2lsbCBiZSByaWdodFxyXG5cdFx0XHR0cmlnZ2VyOiBmdW5jdGlvbigpIHtcclxuXHRcdFx0XHRpZiAoIHRoaXMudHlwZSA9PT0gXCJjaGVja2JveFwiICYmIHRoaXMuY2xpY2sgJiYgalF1ZXJ5Lm5vZGVOYW1lKCB0aGlzLCBcImlucHV0XCIgKSApIHtcclxuXHRcdFx0XHRcdHRoaXMuY2xpY2soKTtcclxuXHRcdFx0XHRcdHJldHVybiBmYWxzZTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH0sXHJcblxyXG5cdFx0XHQvLyBGb3IgY3Jvc3MtYnJvd3NlciBjb25zaXN0ZW5jeSwgZG9uJ3QgZmlyZSBuYXRpdmUgLmNsaWNrKCkgb24gbGlua3NcclxuXHRcdFx0X2RlZmF1bHQ6IGZ1bmN0aW9uKCBldmVudCApIHtcclxuXHRcdFx0XHRyZXR1cm4galF1ZXJ5Lm5vZGVOYW1lKCBldmVudC50YXJnZXQsIFwiYVwiICk7XHJcblx0XHRcdH1cclxuXHRcdH0sXHJcblxyXG5cdFx0YmVmb3JldW5sb2FkOiB7XHJcblx0XHRcdHBvc3REaXNwYXRjaDogZnVuY3Rpb24oIGV2ZW50ICkge1xyXG5cclxuXHRcdFx0XHQvLyBTdXBwb3J0OiBGaXJlZm94IDIwK1xyXG5cdFx0XHRcdC8vIEZpcmVmb3ggZG9lc24ndCBhbGVydCBpZiB0aGUgcmV0dXJuVmFsdWUgZmllbGQgaXMgbm90IHNldC5cclxuXHRcdFx0XHRpZiAoIGV2ZW50LnJlc3VsdCAhPT0gdW5kZWZpbmVkICYmIGV2ZW50Lm9yaWdpbmFsRXZlbnQgKSB7XHJcblx0XHRcdFx0XHRldmVudC5vcmlnaW5hbEV2ZW50LnJldHVyblZhbHVlID0gZXZlbnQucmVzdWx0O1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdH0sXHJcblxyXG5cdHNpbXVsYXRlOiBmdW5jdGlvbiggdHlwZSwgZWxlbSwgZXZlbnQsIGJ1YmJsZSApIHtcclxuXHRcdC8vIFBpZ2d5YmFjayBvbiBhIGRvbm9yIGV2ZW50IHRvIHNpbXVsYXRlIGEgZGlmZmVyZW50IG9uZS5cclxuXHRcdC8vIEZha2Ugb3JpZ2luYWxFdmVudCB0byBhdm9pZCBkb25vcidzIHN0b3BQcm9wYWdhdGlvbiwgYnV0IGlmIHRoZVxyXG5cdFx0Ly8gc2ltdWxhdGVkIGV2ZW50IHByZXZlbnRzIGRlZmF1bHQgdGhlbiB3ZSBkbyB0aGUgc2FtZSBvbiB0aGUgZG9ub3IuXHJcblx0XHR2YXIgZSA9IGpRdWVyeS5leHRlbmQoXHJcblx0XHRcdG5ldyBqUXVlcnkuRXZlbnQoKSxcclxuXHRcdFx0ZXZlbnQsXHJcblx0XHRcdHtcclxuXHRcdFx0XHR0eXBlOiB0eXBlLFxyXG5cdFx0XHRcdGlzU2ltdWxhdGVkOiB0cnVlLFxyXG5cdFx0XHRcdG9yaWdpbmFsRXZlbnQ6IHt9XHJcblx0XHRcdH1cclxuXHRcdCk7XHJcblx0XHRpZiAoIGJ1YmJsZSApIHtcclxuXHRcdFx0alF1ZXJ5LmV2ZW50LnRyaWdnZXIoIGUsIG51bGwsIGVsZW0gKTtcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdGpRdWVyeS5ldmVudC5kaXNwYXRjaC5jYWxsKCBlbGVtLCBlICk7XHJcblx0XHR9XHJcblx0XHRpZiAoIGUuaXNEZWZhdWx0UHJldmVudGVkKCkgKSB7XHJcblx0XHRcdGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcblx0XHR9XHJcblx0fVxyXG59O1xyXG5cclxualF1ZXJ5LnJlbW92ZUV2ZW50ID0gZnVuY3Rpb24oIGVsZW0sIHR5cGUsIGhhbmRsZSApIHtcclxuXHRpZiAoIGVsZW0ucmVtb3ZlRXZlbnRMaXN0ZW5lciApIHtcclxuXHRcdGVsZW0ucmVtb3ZlRXZlbnRMaXN0ZW5lciggdHlwZSwgaGFuZGxlLCBmYWxzZSApO1xyXG5cdH1cclxufTtcclxuXHJcbmpRdWVyeS5FdmVudCA9IGZ1bmN0aW9uKCBzcmMsIHByb3BzICkge1xyXG5cdC8vIEFsbG93IGluc3RhbnRpYXRpb24gd2l0aG91dCB0aGUgJ25ldycga2V5d29yZFxyXG5cdGlmICggISh0aGlzIGluc3RhbmNlb2YgalF1ZXJ5LkV2ZW50KSApIHtcclxuXHRcdHJldHVybiBuZXcgalF1ZXJ5LkV2ZW50KCBzcmMsIHByb3BzICk7XHJcblx0fVxyXG5cclxuXHQvLyBFdmVudCBvYmplY3RcclxuXHRpZiAoIHNyYyAmJiBzcmMudHlwZSApIHtcclxuXHRcdHRoaXMub3JpZ2luYWxFdmVudCA9IHNyYztcclxuXHRcdHRoaXMudHlwZSA9IHNyYy50eXBlO1xyXG5cclxuXHRcdC8vIEV2ZW50cyBidWJibGluZyB1cCB0aGUgZG9jdW1lbnQgbWF5IGhhdmUgYmVlbiBtYXJrZWQgYXMgcHJldmVudGVkXHJcblx0XHQvLyBieSBhIGhhbmRsZXIgbG93ZXIgZG93biB0aGUgdHJlZTsgcmVmbGVjdCB0aGUgY29ycmVjdCB2YWx1ZS5cclxuXHRcdHRoaXMuaXNEZWZhdWx0UHJldmVudGVkID0gc3JjLmRlZmF1bHRQcmV2ZW50ZWQgfHxcclxuXHRcdFx0XHRzcmMuZGVmYXVsdFByZXZlbnRlZCA9PT0gdW5kZWZpbmVkICYmXHJcblx0XHRcdFx0Ly8gU3VwcG9ydDogQW5kcm9pZDw0LjBcclxuXHRcdFx0XHRzcmMucmV0dXJuVmFsdWUgPT09IGZhbHNlID9cclxuXHRcdFx0cmV0dXJuVHJ1ZSA6XHJcblx0XHRcdHJldHVybkZhbHNlO1xyXG5cclxuXHQvLyBFdmVudCB0eXBlXHJcblx0fSBlbHNlIHtcclxuXHRcdHRoaXMudHlwZSA9IHNyYztcclxuXHR9XHJcblxyXG5cdC8vIFB1dCBleHBsaWNpdGx5IHByb3ZpZGVkIHByb3BlcnRpZXMgb250byB0aGUgZXZlbnQgb2JqZWN0XHJcblx0aWYgKCBwcm9wcyApIHtcclxuXHRcdGpRdWVyeS5leHRlbmQoIHRoaXMsIHByb3BzICk7XHJcblx0fVxyXG5cclxuXHQvLyBDcmVhdGUgYSB0aW1lc3RhbXAgaWYgaW5jb21pbmcgZXZlbnQgZG9lc24ndCBoYXZlIG9uZVxyXG5cdHRoaXMudGltZVN0YW1wID0gc3JjICYmIHNyYy50aW1lU3RhbXAgfHwgalF1ZXJ5Lm5vdygpO1xyXG5cclxuXHQvLyBNYXJrIGl0IGFzIGZpeGVkXHJcblx0dGhpc1sgalF1ZXJ5LmV4cGFuZG8gXSA9IHRydWU7XHJcbn07XHJcblxyXG4vLyBqUXVlcnkuRXZlbnQgaXMgYmFzZWQgb24gRE9NMyBFdmVudHMgYXMgc3BlY2lmaWVkIGJ5IHRoZSBFQ01BU2NyaXB0IExhbmd1YWdlIEJpbmRpbmdcclxuLy8gaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9XRC1ET00tTGV2ZWwtMy1FdmVudHMtMjAwMzAzMzEvZWNtYS1zY3JpcHQtYmluZGluZy5odG1sXHJcbmpRdWVyeS5FdmVudC5wcm90b3R5cGUgPSB7XHJcblx0aXNEZWZhdWx0UHJldmVudGVkOiByZXR1cm5GYWxzZSxcclxuXHRpc1Byb3BhZ2F0aW9uU3RvcHBlZDogcmV0dXJuRmFsc2UsXHJcblx0aXNJbW1lZGlhdGVQcm9wYWdhdGlvblN0b3BwZWQ6IHJldHVybkZhbHNlLFxyXG5cclxuXHRwcmV2ZW50RGVmYXVsdDogZnVuY3Rpb24oKSB7XHJcblx0XHR2YXIgZSA9IHRoaXMub3JpZ2luYWxFdmVudDtcclxuXHJcblx0XHR0aGlzLmlzRGVmYXVsdFByZXZlbnRlZCA9IHJldHVyblRydWU7XHJcblxyXG5cdFx0aWYgKCBlICYmIGUucHJldmVudERlZmF1bHQgKSB7XHJcblx0XHRcdGUucHJldmVudERlZmF1bHQoKTtcclxuXHRcdH1cclxuXHR9LFxyXG5cdHN0b3BQcm9wYWdhdGlvbjogZnVuY3Rpb24oKSB7XHJcblx0XHR2YXIgZSA9IHRoaXMub3JpZ2luYWxFdmVudDtcclxuXHJcblx0XHR0aGlzLmlzUHJvcGFnYXRpb25TdG9wcGVkID0gcmV0dXJuVHJ1ZTtcclxuXHJcblx0XHRpZiAoIGUgJiYgZS5zdG9wUHJvcGFnYXRpb24gKSB7XHJcblx0XHRcdGUuc3RvcFByb3BhZ2F0aW9uKCk7XHJcblx0XHR9XHJcblx0fSxcclxuXHRzdG9wSW1tZWRpYXRlUHJvcGFnYXRpb246IGZ1bmN0aW9uKCkge1xyXG5cdFx0dmFyIGUgPSB0aGlzLm9yaWdpbmFsRXZlbnQ7XHJcblxyXG5cdFx0dGhpcy5pc0ltbWVkaWF0ZVByb3BhZ2F0aW9uU3RvcHBlZCA9IHJldHVyblRydWU7XHJcblxyXG5cdFx0aWYgKCBlICYmIGUuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uICkge1xyXG5cdFx0XHRlLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpO1xyXG5cdFx0fVxyXG5cclxuXHRcdHRoaXMuc3RvcFByb3BhZ2F0aW9uKCk7XHJcblx0fVxyXG59O1xyXG5cclxuLy8gQ3JlYXRlIG1vdXNlZW50ZXIvbGVhdmUgZXZlbnRzIHVzaW5nIG1vdXNlb3Zlci9vdXQgYW5kIGV2ZW50LXRpbWUgY2hlY2tzXHJcbi8vIFN1cHBvcnQ6IENocm9tZSAxNStcclxualF1ZXJ5LmVhY2goe1xyXG5cdG1vdXNlZW50ZXI6IFwibW91c2VvdmVyXCIsXHJcblx0bW91c2VsZWF2ZTogXCJtb3VzZW91dFwiLFxyXG5cdHBvaW50ZXJlbnRlcjogXCJwb2ludGVyb3ZlclwiLFxyXG5cdHBvaW50ZXJsZWF2ZTogXCJwb2ludGVyb3V0XCJcclxufSwgZnVuY3Rpb24oIG9yaWcsIGZpeCApIHtcclxuXHRqUXVlcnkuZXZlbnQuc3BlY2lhbFsgb3JpZyBdID0ge1xyXG5cdFx0ZGVsZWdhdGVUeXBlOiBmaXgsXHJcblx0XHRiaW5kVHlwZTogZml4LFxyXG5cclxuXHRcdGhhbmRsZTogZnVuY3Rpb24oIGV2ZW50ICkge1xyXG5cdFx0XHR2YXIgcmV0LFxyXG5cdFx0XHRcdHRhcmdldCA9IHRoaXMsXHJcblx0XHRcdFx0cmVsYXRlZCA9IGV2ZW50LnJlbGF0ZWRUYXJnZXQsXHJcblx0XHRcdFx0aGFuZGxlT2JqID0gZXZlbnQuaGFuZGxlT2JqO1xyXG5cclxuXHRcdFx0Ly8gRm9yIG1vdXNlbnRlci9sZWF2ZSBjYWxsIHRoZSBoYW5kbGVyIGlmIHJlbGF0ZWQgaXMgb3V0c2lkZSB0aGUgdGFyZ2V0LlxyXG5cdFx0XHQvLyBOQjogTm8gcmVsYXRlZFRhcmdldCBpZiB0aGUgbW91c2UgbGVmdC9lbnRlcmVkIHRoZSBicm93c2VyIHdpbmRvd1xyXG5cdFx0XHRpZiAoICFyZWxhdGVkIHx8IChyZWxhdGVkICE9PSB0YXJnZXQgJiYgIWpRdWVyeS5jb250YWlucyggdGFyZ2V0LCByZWxhdGVkICkpICkge1xyXG5cdFx0XHRcdGV2ZW50LnR5cGUgPSBoYW5kbGVPYmoub3JpZ1R5cGU7XHJcblx0XHRcdFx0cmV0ID0gaGFuZGxlT2JqLmhhbmRsZXIuYXBwbHkoIHRoaXMsIGFyZ3VtZW50cyApO1xyXG5cdFx0XHRcdGV2ZW50LnR5cGUgPSBmaXg7XHJcblx0XHRcdH1cclxuXHRcdFx0cmV0dXJuIHJldDtcclxuXHRcdH1cclxuXHR9O1xyXG59KTtcclxuXHJcbi8vIFN1cHBvcnQ6IEZpcmVmb3gsIENocm9tZSwgU2FmYXJpXHJcbi8vIENyZWF0ZSBcImJ1YmJsaW5nXCIgZm9jdXMgYW5kIGJsdXIgZXZlbnRzXHJcbmlmICggIXN1cHBvcnQuZm9jdXNpbkJ1YmJsZXMgKSB7XHJcblx0alF1ZXJ5LmVhY2goeyBmb2N1czogXCJmb2N1c2luXCIsIGJsdXI6IFwiZm9jdXNvdXRcIiB9LCBmdW5jdGlvbiggb3JpZywgZml4ICkge1xyXG5cclxuXHRcdC8vIEF0dGFjaCBhIHNpbmdsZSBjYXB0dXJpbmcgaGFuZGxlciBvbiB0aGUgZG9jdW1lbnQgd2hpbGUgc29tZW9uZSB3YW50cyBmb2N1c2luL2ZvY3Vzb3V0XHJcblx0XHR2YXIgaGFuZGxlciA9IGZ1bmN0aW9uKCBldmVudCApIHtcclxuXHRcdFx0XHRqUXVlcnkuZXZlbnQuc2ltdWxhdGUoIGZpeCwgZXZlbnQudGFyZ2V0LCBqUXVlcnkuZXZlbnQuZml4KCBldmVudCApLCB0cnVlICk7XHJcblx0XHRcdH07XHJcblxyXG5cdFx0alF1ZXJ5LmV2ZW50LnNwZWNpYWxbIGZpeCBdID0ge1xyXG5cdFx0XHRzZXR1cDogZnVuY3Rpb24oKSB7XHJcblx0XHRcdFx0dmFyIGRvYyA9IHRoaXMub3duZXJEb2N1bWVudCB8fCB0aGlzLFxyXG5cdFx0XHRcdFx0YXR0YWNoZXMgPSBkYXRhX3ByaXYuYWNjZXNzKCBkb2MsIGZpeCApO1xyXG5cclxuXHRcdFx0XHRpZiAoICFhdHRhY2hlcyApIHtcclxuXHRcdFx0XHRcdGRvYy5hZGRFdmVudExpc3RlbmVyKCBvcmlnLCBoYW5kbGVyLCB0cnVlICk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdGRhdGFfcHJpdi5hY2Nlc3MoIGRvYywgZml4LCAoIGF0dGFjaGVzIHx8IDAgKSArIDEgKTtcclxuXHRcdFx0fSxcclxuXHRcdFx0dGVhcmRvd246IGZ1bmN0aW9uKCkge1xyXG5cdFx0XHRcdHZhciBkb2MgPSB0aGlzLm93bmVyRG9jdW1lbnQgfHwgdGhpcyxcclxuXHRcdFx0XHRcdGF0dGFjaGVzID0gZGF0YV9wcml2LmFjY2VzcyggZG9jLCBmaXggKSAtIDE7XHJcblxyXG5cdFx0XHRcdGlmICggIWF0dGFjaGVzICkge1xyXG5cdFx0XHRcdFx0ZG9jLnJlbW92ZUV2ZW50TGlzdGVuZXIoIG9yaWcsIGhhbmRsZXIsIHRydWUgKTtcclxuXHRcdFx0XHRcdGRhdGFfcHJpdi5yZW1vdmUoIGRvYywgZml4ICk7XHJcblxyXG5cdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRkYXRhX3ByaXYuYWNjZXNzKCBkb2MsIGZpeCwgYXR0YWNoZXMgKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdH07XHJcblx0fSk7XHJcbn1cclxuXHJcbmpRdWVyeS5mbi5leHRlbmQoe1xyXG5cclxuXHRvbjogZnVuY3Rpb24oIHR5cGVzLCBzZWxlY3RvciwgZGF0YSwgZm4sIC8qSU5URVJOQUwqLyBvbmUgKSB7XHJcblx0XHR2YXIgb3JpZ0ZuLCB0eXBlO1xyXG5cclxuXHRcdC8vIFR5cGVzIGNhbiBiZSBhIG1hcCBvZiB0eXBlcy9oYW5kbGVyc1xyXG5cdFx0aWYgKCB0eXBlb2YgdHlwZXMgPT09IFwib2JqZWN0XCIgKSB7XHJcblx0XHRcdC8vICggdHlwZXMtT2JqZWN0LCBzZWxlY3RvciwgZGF0YSApXHJcblx0XHRcdGlmICggdHlwZW9mIHNlbGVjdG9yICE9PSBcInN0cmluZ1wiICkge1xyXG5cdFx0XHRcdC8vICggdHlwZXMtT2JqZWN0LCBkYXRhIClcclxuXHRcdFx0XHRkYXRhID0gZGF0YSB8fCBzZWxlY3RvcjtcclxuXHRcdFx0XHRzZWxlY3RvciA9IHVuZGVmaW5lZDtcclxuXHRcdFx0fVxyXG5cdFx0XHRmb3IgKCB0eXBlIGluIHR5cGVzICkge1xyXG5cdFx0XHRcdHRoaXMub24oIHR5cGUsIHNlbGVjdG9yLCBkYXRhLCB0eXBlc1sgdHlwZSBdLCBvbmUgKTtcclxuXHRcdFx0fVxyXG5cdFx0XHRyZXR1cm4gdGhpcztcclxuXHRcdH1cclxuXHJcblx0XHRpZiAoIGRhdGEgPT0gbnVsbCAmJiBmbiA9PSBudWxsICkge1xyXG5cdFx0XHQvLyAoIHR5cGVzLCBmbiApXHJcblx0XHRcdGZuID0gc2VsZWN0b3I7XHJcblx0XHRcdGRhdGEgPSBzZWxlY3RvciA9IHVuZGVmaW5lZDtcclxuXHRcdH0gZWxzZSBpZiAoIGZuID09IG51bGwgKSB7XHJcblx0XHRcdGlmICggdHlwZW9mIHNlbGVjdG9yID09PSBcInN0cmluZ1wiICkge1xyXG5cdFx0XHRcdC8vICggdHlwZXMsIHNlbGVjdG9yLCBmbiApXHJcblx0XHRcdFx0Zm4gPSBkYXRhO1xyXG5cdFx0XHRcdGRhdGEgPSB1bmRlZmluZWQ7XHJcblx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0Ly8gKCB0eXBlcywgZGF0YSwgZm4gKVxyXG5cdFx0XHRcdGZuID0gZGF0YTtcclxuXHRcdFx0XHRkYXRhID0gc2VsZWN0b3I7XHJcblx0XHRcdFx0c2VsZWN0b3IgPSB1bmRlZmluZWQ7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHRcdGlmICggZm4gPT09IGZhbHNlICkge1xyXG5cdFx0XHRmbiA9IHJldHVybkZhbHNlO1xyXG5cdFx0fSBlbHNlIGlmICggIWZuICkge1xyXG5cdFx0XHRyZXR1cm4gdGhpcztcclxuXHRcdH1cclxuXHJcblx0XHRpZiAoIG9uZSA9PT0gMSApIHtcclxuXHRcdFx0b3JpZ0ZuID0gZm47XHJcblx0XHRcdGZuID0gZnVuY3Rpb24oIGV2ZW50ICkge1xyXG5cdFx0XHRcdC8vIENhbiB1c2UgYW4gZW1wdHkgc2V0LCBzaW5jZSBldmVudCBjb250YWlucyB0aGUgaW5mb1xyXG5cdFx0XHRcdGpRdWVyeSgpLm9mZiggZXZlbnQgKTtcclxuXHRcdFx0XHRyZXR1cm4gb3JpZ0ZuLmFwcGx5KCB0aGlzLCBhcmd1bWVudHMgKTtcclxuXHRcdFx0fTtcclxuXHRcdFx0Ly8gVXNlIHNhbWUgZ3VpZCBzbyBjYWxsZXIgY2FuIHJlbW92ZSB1c2luZyBvcmlnRm5cclxuXHRcdFx0Zm4uZ3VpZCA9IG9yaWdGbi5ndWlkIHx8ICggb3JpZ0ZuLmd1aWQgPSBqUXVlcnkuZ3VpZCsrICk7XHJcblx0XHR9XHJcblx0XHRyZXR1cm4gdGhpcy5lYWNoKCBmdW5jdGlvbigpIHtcclxuXHRcdFx0alF1ZXJ5LmV2ZW50LmFkZCggdGhpcywgdHlwZXMsIGZuLCBkYXRhLCBzZWxlY3RvciApO1xyXG5cdFx0fSk7XHJcblx0fSxcclxuXHRvbmU6IGZ1bmN0aW9uKCB0eXBlcywgc2VsZWN0b3IsIGRhdGEsIGZuICkge1xyXG5cdFx0cmV0dXJuIHRoaXMub24oIHR5cGVzLCBzZWxlY3RvciwgZGF0YSwgZm4sIDEgKTtcclxuXHR9LFxyXG5cdG9mZjogZnVuY3Rpb24oIHR5cGVzLCBzZWxlY3RvciwgZm4gKSB7XHJcblx0XHR2YXIgaGFuZGxlT2JqLCB0eXBlO1xyXG5cdFx0aWYgKCB0eXBlcyAmJiB0eXBlcy5wcmV2ZW50RGVmYXVsdCAmJiB0eXBlcy5oYW5kbGVPYmogKSB7XHJcblx0XHRcdC8vICggZXZlbnQgKSAgZGlzcGF0Y2hlZCBqUXVlcnkuRXZlbnRcclxuXHRcdFx0aGFuZGxlT2JqID0gdHlwZXMuaGFuZGxlT2JqO1xyXG5cdFx0XHRqUXVlcnkoIHR5cGVzLmRlbGVnYXRlVGFyZ2V0ICkub2ZmKFxyXG5cdFx0XHRcdGhhbmRsZU9iai5uYW1lc3BhY2UgPyBoYW5kbGVPYmoub3JpZ1R5cGUgKyBcIi5cIiArIGhhbmRsZU9iai5uYW1lc3BhY2UgOiBoYW5kbGVPYmoub3JpZ1R5cGUsXHJcblx0XHRcdFx0aGFuZGxlT2JqLnNlbGVjdG9yLFxyXG5cdFx0XHRcdGhhbmRsZU9iai5oYW5kbGVyXHJcblx0XHRcdCk7XHJcblx0XHRcdHJldHVybiB0aGlzO1xyXG5cdFx0fVxyXG5cdFx0aWYgKCB0eXBlb2YgdHlwZXMgPT09IFwib2JqZWN0XCIgKSB7XHJcblx0XHRcdC8vICggdHlwZXMtb2JqZWN0IFssIHNlbGVjdG9yXSApXHJcblx0XHRcdGZvciAoIHR5cGUgaW4gdHlwZXMgKSB7XHJcblx0XHRcdFx0dGhpcy5vZmYoIHR5cGUsIHNlbGVjdG9yLCB0eXBlc1sgdHlwZSBdICk7XHJcblx0XHRcdH1cclxuXHRcdFx0cmV0dXJuIHRoaXM7XHJcblx0XHR9XHJcblx0XHRpZiAoIHNlbGVjdG9yID09PSBmYWxzZSB8fCB0eXBlb2Ygc2VsZWN0b3IgPT09IFwiZnVuY3Rpb25cIiApIHtcclxuXHRcdFx0Ly8gKCB0eXBlcyBbLCBmbl0gKVxyXG5cdFx0XHRmbiA9IHNlbGVjdG9yO1xyXG5cdFx0XHRzZWxlY3RvciA9IHVuZGVmaW5lZDtcclxuXHRcdH1cclxuXHRcdGlmICggZm4gPT09IGZhbHNlICkge1xyXG5cdFx0XHRmbiA9IHJldHVybkZhbHNlO1xyXG5cdFx0fVxyXG5cdFx0cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpIHtcclxuXHRcdFx0alF1ZXJ5LmV2ZW50LnJlbW92ZSggdGhpcywgdHlwZXMsIGZuLCBzZWxlY3RvciApO1xyXG5cdFx0fSk7XHJcblx0fSxcclxuXHJcblx0dHJpZ2dlcjogZnVuY3Rpb24oIHR5cGUsIGRhdGEgKSB7XHJcblx0XHRyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCkge1xyXG5cdFx0XHRqUXVlcnkuZXZlbnQudHJpZ2dlciggdHlwZSwgZGF0YSwgdGhpcyApO1xyXG5cdFx0fSk7XHJcblx0fSxcclxuXHR0cmlnZ2VySGFuZGxlcjogZnVuY3Rpb24oIHR5cGUsIGRhdGEgKSB7XHJcblx0XHR2YXIgZWxlbSA9IHRoaXNbMF07XHJcblx0XHRpZiAoIGVsZW0gKSB7XHJcblx0XHRcdHJldHVybiBqUXVlcnkuZXZlbnQudHJpZ2dlciggdHlwZSwgZGF0YSwgZWxlbSwgdHJ1ZSApO1xyXG5cdFx0fVxyXG5cdH1cclxufSk7XHJcblxyXG5cclxudmFyXHJcblx0cnhodG1sVGFnID0gLzwoPyFhcmVhfGJyfGNvbHxlbWJlZHxocnxpbWd8aW5wdXR8bGlua3xtZXRhfHBhcmFtKSgoW1xcdzpdKylbXj5dKilcXC8+L2dpLFxyXG5cdHJ0YWdOYW1lID0gLzwoW1xcdzpdKykvLFxyXG5cdHJodG1sID0gLzx8JiM/XFx3KzsvLFxyXG5cdHJub0lubmVyaHRtbCA9IC88KD86c2NyaXB0fHN0eWxlfGxpbmspL2ksXHJcblx0Ly8gY2hlY2tlZD1cImNoZWNrZWRcIiBvciBjaGVja2VkXHJcblx0cmNoZWNrZWQgPSAvY2hlY2tlZFxccyooPzpbXj1dfD1cXHMqLmNoZWNrZWQuKS9pLFxyXG5cdHJzY3JpcHRUeXBlID0gL14kfFxcLyg/OmphdmF8ZWNtYSlzY3JpcHQvaSxcclxuXHRyc2NyaXB0VHlwZU1hc2tlZCA9IC9edHJ1ZVxcLyguKikvLFxyXG5cdHJjbGVhblNjcmlwdCA9IC9eXFxzKjwhKD86XFxbQ0RBVEFcXFt8LS0pfCg/OlxcXVxcXXwtLSk+XFxzKiQvZyxcclxuXHJcblx0Ly8gV2UgaGF2ZSB0byBjbG9zZSB0aGVzZSB0YWdzIHRvIHN1cHBvcnQgWEhUTUwgKCMxMzIwMClcclxuXHR3cmFwTWFwID0ge1xyXG5cclxuXHRcdC8vIFN1cHBvcnQ6IElFOVxyXG5cdFx0b3B0aW9uOiBbIDEsIFwiPHNlbGVjdCBtdWx0aXBsZT0nbXVsdGlwbGUnPlwiLCBcIjwvc2VsZWN0PlwiIF0sXHJcblxyXG5cdFx0dGhlYWQ6IFsgMSwgXCI8dGFibGU+XCIsIFwiPC90YWJsZT5cIiBdLFxyXG5cdFx0Y29sOiBbIDIsIFwiPHRhYmxlPjxjb2xncm91cD5cIiwgXCI8L2NvbGdyb3VwPjwvdGFibGU+XCIgXSxcclxuXHRcdHRyOiBbIDIsIFwiPHRhYmxlPjx0Ym9keT5cIiwgXCI8L3Rib2R5PjwvdGFibGU+XCIgXSxcclxuXHRcdHRkOiBbIDMsIFwiPHRhYmxlPjx0Ym9keT48dHI+XCIsIFwiPC90cj48L3Rib2R5PjwvdGFibGU+XCIgXSxcclxuXHJcblx0XHRfZGVmYXVsdDogWyAwLCBcIlwiLCBcIlwiIF1cclxuXHR9O1xyXG5cclxuLy8gU3VwcG9ydDogSUU5XHJcbndyYXBNYXAub3B0Z3JvdXAgPSB3cmFwTWFwLm9wdGlvbjtcclxuXHJcbndyYXBNYXAudGJvZHkgPSB3cmFwTWFwLnRmb290ID0gd3JhcE1hcC5jb2xncm91cCA9IHdyYXBNYXAuY2FwdGlvbiA9IHdyYXBNYXAudGhlYWQ7XHJcbndyYXBNYXAudGggPSB3cmFwTWFwLnRkO1xyXG5cclxuLy8gU3VwcG9ydDogMS54IGNvbXBhdGliaWxpdHlcclxuLy8gTWFuaXB1bGF0aW5nIHRhYmxlcyByZXF1aXJlcyBhIHRib2R5XHJcbmZ1bmN0aW9uIG1hbmlwdWxhdGlvblRhcmdldCggZWxlbSwgY29udGVudCApIHtcclxuXHRyZXR1cm4galF1ZXJ5Lm5vZGVOYW1lKCBlbGVtLCBcInRhYmxlXCIgKSAmJlxyXG5cdFx0alF1ZXJ5Lm5vZGVOYW1lKCBjb250ZW50Lm5vZGVUeXBlICE9PSAxMSA/IGNvbnRlbnQgOiBjb250ZW50LmZpcnN0Q2hpbGQsIFwidHJcIiApID9cclxuXHJcblx0XHRlbGVtLmdldEVsZW1lbnRzQnlUYWdOYW1lKFwidGJvZHlcIilbMF0gfHxcclxuXHRcdFx0ZWxlbS5hcHBlbmRDaGlsZCggZWxlbS5vd25lckRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJ0Ym9keVwiKSApIDpcclxuXHRcdGVsZW07XHJcbn1cclxuXHJcbi8vIFJlcGxhY2UvcmVzdG9yZSB0aGUgdHlwZSBhdHRyaWJ1dGUgb2Ygc2NyaXB0IGVsZW1lbnRzIGZvciBzYWZlIERPTSBtYW5pcHVsYXRpb25cclxuZnVuY3Rpb24gZGlzYWJsZVNjcmlwdCggZWxlbSApIHtcclxuXHRlbGVtLnR5cGUgPSAoZWxlbS5nZXRBdHRyaWJ1dGUoXCJ0eXBlXCIpICE9PSBudWxsKSArIFwiL1wiICsgZWxlbS50eXBlO1xyXG5cdHJldHVybiBlbGVtO1xyXG59XHJcbmZ1bmN0aW9uIHJlc3RvcmVTY3JpcHQoIGVsZW0gKSB7XHJcblx0dmFyIG1hdGNoID0gcnNjcmlwdFR5cGVNYXNrZWQuZXhlYyggZWxlbS50eXBlICk7XHJcblxyXG5cdGlmICggbWF0Y2ggKSB7XHJcblx0XHRlbGVtLnR5cGUgPSBtYXRjaFsgMSBdO1xyXG5cdH0gZWxzZSB7XHJcblx0XHRlbGVtLnJlbW92ZUF0dHJpYnV0ZShcInR5cGVcIik7XHJcblx0fVxyXG5cclxuXHRyZXR1cm4gZWxlbTtcclxufVxyXG5cclxuLy8gTWFyayBzY3JpcHRzIGFzIGhhdmluZyBhbHJlYWR5IGJlZW4gZXZhbHVhdGVkXHJcbmZ1bmN0aW9uIHNldEdsb2JhbEV2YWwoIGVsZW1zLCByZWZFbGVtZW50cyApIHtcclxuXHR2YXIgaSA9IDAsXHJcblx0XHRsID0gZWxlbXMubGVuZ3RoO1xyXG5cclxuXHRmb3IgKCA7IGkgPCBsOyBpKysgKSB7XHJcblx0XHRkYXRhX3ByaXYuc2V0KFxyXG5cdFx0XHRlbGVtc1sgaSBdLCBcImdsb2JhbEV2YWxcIiwgIXJlZkVsZW1lbnRzIHx8IGRhdGFfcHJpdi5nZXQoIHJlZkVsZW1lbnRzWyBpIF0sIFwiZ2xvYmFsRXZhbFwiIClcclxuXHRcdCk7XHJcblx0fVxyXG59XHJcblxyXG5mdW5jdGlvbiBjbG9uZUNvcHlFdmVudCggc3JjLCBkZXN0ICkge1xyXG5cdHZhciBpLCBsLCB0eXBlLCBwZGF0YU9sZCwgcGRhdGFDdXIsIHVkYXRhT2xkLCB1ZGF0YUN1ciwgZXZlbnRzO1xyXG5cclxuXHRpZiAoIGRlc3Qubm9kZVR5cGUgIT09IDEgKSB7XHJcblx0XHRyZXR1cm47XHJcblx0fVxyXG5cclxuXHQvLyAxLiBDb3B5IHByaXZhdGUgZGF0YTogZXZlbnRzLCBoYW5kbGVycywgZXRjLlxyXG5cdGlmICggZGF0YV9wcml2Lmhhc0RhdGEoIHNyYyApICkge1xyXG5cdFx0cGRhdGFPbGQgPSBkYXRhX3ByaXYuYWNjZXNzKCBzcmMgKTtcclxuXHRcdHBkYXRhQ3VyID0gZGF0YV9wcml2LnNldCggZGVzdCwgcGRhdGFPbGQgKTtcclxuXHRcdGV2ZW50cyA9IHBkYXRhT2xkLmV2ZW50cztcclxuXHJcblx0XHRpZiAoIGV2ZW50cyApIHtcclxuXHRcdFx0ZGVsZXRlIHBkYXRhQ3VyLmhhbmRsZTtcclxuXHRcdFx0cGRhdGFDdXIuZXZlbnRzID0ge307XHJcblxyXG5cdFx0XHRmb3IgKCB0eXBlIGluIGV2ZW50cyApIHtcclxuXHRcdFx0XHRmb3IgKCBpID0gMCwgbCA9IGV2ZW50c1sgdHlwZSBdLmxlbmd0aDsgaSA8IGw7IGkrKyApIHtcclxuXHRcdFx0XHRcdGpRdWVyeS5ldmVudC5hZGQoIGRlc3QsIHR5cGUsIGV2ZW50c1sgdHlwZSBdWyBpIF0gKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdC8vIDIuIENvcHkgdXNlciBkYXRhXHJcblx0aWYgKCBkYXRhX3VzZXIuaGFzRGF0YSggc3JjICkgKSB7XHJcblx0XHR1ZGF0YU9sZCA9IGRhdGFfdXNlci5hY2Nlc3MoIHNyYyApO1xyXG5cdFx0dWRhdGFDdXIgPSBqUXVlcnkuZXh0ZW5kKCB7fSwgdWRhdGFPbGQgKTtcclxuXHJcblx0XHRkYXRhX3VzZXIuc2V0KCBkZXN0LCB1ZGF0YUN1ciApO1xyXG5cdH1cclxufVxyXG5cclxuZnVuY3Rpb24gZ2V0QWxsKCBjb250ZXh0LCB0YWcgKSB7XHJcblx0dmFyIHJldCA9IGNvbnRleHQuZ2V0RWxlbWVudHNCeVRhZ05hbWUgPyBjb250ZXh0LmdldEVsZW1lbnRzQnlUYWdOYW1lKCB0YWcgfHwgXCIqXCIgKSA6XHJcblx0XHRcdGNvbnRleHQucXVlcnlTZWxlY3RvckFsbCA/IGNvbnRleHQucXVlcnlTZWxlY3RvckFsbCggdGFnIHx8IFwiKlwiICkgOlxyXG5cdFx0XHRbXTtcclxuXHJcblx0cmV0dXJuIHRhZyA9PT0gdW5kZWZpbmVkIHx8IHRhZyAmJiBqUXVlcnkubm9kZU5hbWUoIGNvbnRleHQsIHRhZyApID9cclxuXHRcdGpRdWVyeS5tZXJnZSggWyBjb250ZXh0IF0sIHJldCApIDpcclxuXHRcdHJldDtcclxufVxyXG5cclxuLy8gRml4IElFIGJ1Z3MsIHNlZSBzdXBwb3J0IHRlc3RzXHJcbmZ1bmN0aW9uIGZpeElucHV0KCBzcmMsIGRlc3QgKSB7XHJcblx0dmFyIG5vZGVOYW1lID0gZGVzdC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO1xyXG5cclxuXHQvLyBGYWlscyB0byBwZXJzaXN0IHRoZSBjaGVja2VkIHN0YXRlIG9mIGEgY2xvbmVkIGNoZWNrYm94IG9yIHJhZGlvIGJ1dHRvbi5cclxuXHRpZiAoIG5vZGVOYW1lID09PSBcImlucHV0XCIgJiYgcmNoZWNrYWJsZVR5cGUudGVzdCggc3JjLnR5cGUgKSApIHtcclxuXHRcdGRlc3QuY2hlY2tlZCA9IHNyYy5jaGVja2VkO1xyXG5cclxuXHQvLyBGYWlscyB0byByZXR1cm4gdGhlIHNlbGVjdGVkIG9wdGlvbiB0byB0aGUgZGVmYXVsdCBzZWxlY3RlZCBzdGF0ZSB3aGVuIGNsb25pbmcgb3B0aW9uc1xyXG5cdH0gZWxzZSBpZiAoIG5vZGVOYW1lID09PSBcImlucHV0XCIgfHwgbm9kZU5hbWUgPT09IFwidGV4dGFyZWFcIiApIHtcclxuXHRcdGRlc3QuZGVmYXVsdFZhbHVlID0gc3JjLmRlZmF1bHRWYWx1ZTtcclxuXHR9XHJcbn1cclxuXHJcbmpRdWVyeS5leHRlbmQoe1xyXG5cdGNsb25lOiBmdW5jdGlvbiggZWxlbSwgZGF0YUFuZEV2ZW50cywgZGVlcERhdGFBbmRFdmVudHMgKSB7XHJcblx0XHR2YXIgaSwgbCwgc3JjRWxlbWVudHMsIGRlc3RFbGVtZW50cyxcclxuXHRcdFx0Y2xvbmUgPSBlbGVtLmNsb25lTm9kZSggdHJ1ZSApLFxyXG5cdFx0XHRpblBhZ2UgPSBqUXVlcnkuY29udGFpbnMoIGVsZW0ub3duZXJEb2N1bWVudCwgZWxlbSApO1xyXG5cclxuXHRcdC8vIEZpeCBJRSBjbG9uaW5nIGlzc3Vlc1xyXG5cdFx0aWYgKCAhc3VwcG9ydC5ub0Nsb25lQ2hlY2tlZCAmJiAoIGVsZW0ubm9kZVR5cGUgPT09IDEgfHwgZWxlbS5ub2RlVHlwZSA9PT0gMTEgKSAmJlxyXG5cdFx0XHRcdCFqUXVlcnkuaXNYTUxEb2MoIGVsZW0gKSApIHtcclxuXHJcblx0XHRcdC8vIFdlIGVzY2hldyBTaXp6bGUgaGVyZSBmb3IgcGVyZm9ybWFuY2UgcmVhc29uczogaHR0cDovL2pzcGVyZi5jb20vZ2V0YWxsLXZzLXNpenpsZS8yXHJcblx0XHRcdGRlc3RFbGVtZW50cyA9IGdldEFsbCggY2xvbmUgKTtcclxuXHRcdFx0c3JjRWxlbWVudHMgPSBnZXRBbGwoIGVsZW0gKTtcclxuXHJcblx0XHRcdGZvciAoIGkgPSAwLCBsID0gc3JjRWxlbWVudHMubGVuZ3RoOyBpIDwgbDsgaSsrICkge1xyXG5cdFx0XHRcdGZpeElucHV0KCBzcmNFbGVtZW50c1sgaSBdLCBkZXN0RWxlbWVudHNbIGkgXSApO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblxyXG5cdFx0Ly8gQ29weSB0aGUgZXZlbnRzIGZyb20gdGhlIG9yaWdpbmFsIHRvIHRoZSBjbG9uZVxyXG5cdFx0aWYgKCBkYXRhQW5kRXZlbnRzICkge1xyXG5cdFx0XHRpZiAoIGRlZXBEYXRhQW5kRXZlbnRzICkge1xyXG5cdFx0XHRcdHNyY0VsZW1lbnRzID0gc3JjRWxlbWVudHMgfHwgZ2V0QWxsKCBlbGVtICk7XHJcblx0XHRcdFx0ZGVzdEVsZW1lbnRzID0gZGVzdEVsZW1lbnRzIHx8IGdldEFsbCggY2xvbmUgKTtcclxuXHJcblx0XHRcdFx0Zm9yICggaSA9IDAsIGwgPSBzcmNFbGVtZW50cy5sZW5ndGg7IGkgPCBsOyBpKysgKSB7XHJcblx0XHRcdFx0XHRjbG9uZUNvcHlFdmVudCggc3JjRWxlbWVudHNbIGkgXSwgZGVzdEVsZW1lbnRzWyBpIF0gKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0Y2xvbmVDb3B5RXZlbnQoIGVsZW0sIGNsb25lICk7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHJcblx0XHQvLyBQcmVzZXJ2ZSBzY3JpcHQgZXZhbHVhdGlvbiBoaXN0b3J5XHJcblx0XHRkZXN0RWxlbWVudHMgPSBnZXRBbGwoIGNsb25lLCBcInNjcmlwdFwiICk7XHJcblx0XHRpZiAoIGRlc3RFbGVtZW50cy5sZW5ndGggPiAwICkge1xyXG5cdFx0XHRzZXRHbG9iYWxFdmFsKCBkZXN0RWxlbWVudHMsICFpblBhZ2UgJiYgZ2V0QWxsKCBlbGVtLCBcInNjcmlwdFwiICkgKTtcclxuXHRcdH1cclxuXHJcblx0XHQvLyBSZXR1cm4gdGhlIGNsb25lZCBzZXRcclxuXHRcdHJldHVybiBjbG9uZTtcclxuXHR9LFxyXG5cclxuXHRidWlsZEZyYWdtZW50OiBmdW5jdGlvbiggZWxlbXMsIGNvbnRleHQsIHNjcmlwdHMsIHNlbGVjdGlvbiApIHtcclxuXHRcdHZhciBlbGVtLCB0bXAsIHRhZywgd3JhcCwgY29udGFpbnMsIGosXHJcblx0XHRcdGZyYWdtZW50ID0gY29udGV4dC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCksXHJcblx0XHRcdG5vZGVzID0gW10sXHJcblx0XHRcdGkgPSAwLFxyXG5cdFx0XHRsID0gZWxlbXMubGVuZ3RoO1xyXG5cclxuXHRcdGZvciAoIDsgaSA8IGw7IGkrKyApIHtcclxuXHRcdFx0ZWxlbSA9IGVsZW1zWyBpIF07XHJcblxyXG5cdFx0XHRpZiAoIGVsZW0gfHwgZWxlbSA9PT0gMCApIHtcclxuXHJcblx0XHRcdFx0Ly8gQWRkIG5vZGVzIGRpcmVjdGx5XHJcblx0XHRcdFx0aWYgKCBqUXVlcnkudHlwZSggZWxlbSApID09PSBcIm9iamVjdFwiICkge1xyXG5cdFx0XHRcdFx0Ly8gU3VwcG9ydDogUXRXZWJLaXQsIFBoYW50b21KU1xyXG5cdFx0XHRcdFx0Ly8gcHVzaC5hcHBseShfLCBhcnJheWxpa2UpIHRocm93cyBvbiBhbmNpZW50IFdlYktpdFxyXG5cdFx0XHRcdFx0alF1ZXJ5Lm1lcmdlKCBub2RlcywgZWxlbS5ub2RlVHlwZSA/IFsgZWxlbSBdIDogZWxlbSApO1xyXG5cclxuXHRcdFx0XHQvLyBDb252ZXJ0IG5vbi1odG1sIGludG8gYSB0ZXh0IG5vZGVcclxuXHRcdFx0XHR9IGVsc2UgaWYgKCAhcmh0bWwudGVzdCggZWxlbSApICkge1xyXG5cdFx0XHRcdFx0bm9kZXMucHVzaCggY29udGV4dC5jcmVhdGVUZXh0Tm9kZSggZWxlbSApICk7XHJcblxyXG5cdFx0XHRcdC8vIENvbnZlcnQgaHRtbCBpbnRvIERPTSBub2Rlc1xyXG5cdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHR0bXAgPSB0bXAgfHwgZnJhZ21lbnQuYXBwZW5kQ2hpbGQoIGNvbnRleHQuY3JlYXRlRWxlbWVudChcImRpdlwiKSApO1xyXG5cclxuXHRcdFx0XHRcdC8vIERlc2VyaWFsaXplIGEgc3RhbmRhcmQgcmVwcmVzZW50YXRpb25cclxuXHRcdFx0XHRcdHRhZyA9ICggcnRhZ05hbWUuZXhlYyggZWxlbSApIHx8IFsgXCJcIiwgXCJcIiBdIClbIDEgXS50b0xvd2VyQ2FzZSgpO1xyXG5cdFx0XHRcdFx0d3JhcCA9IHdyYXBNYXBbIHRhZyBdIHx8IHdyYXBNYXAuX2RlZmF1bHQ7XHJcblx0XHRcdFx0XHR0bXAuaW5uZXJIVE1MID0gd3JhcFsgMSBdICsgZWxlbS5yZXBsYWNlKCByeGh0bWxUYWcsIFwiPCQxPjwvJDI+XCIgKSArIHdyYXBbIDIgXTtcclxuXHJcblx0XHRcdFx0XHQvLyBEZXNjZW5kIHRocm91Z2ggd3JhcHBlcnMgdG8gdGhlIHJpZ2h0IGNvbnRlbnRcclxuXHRcdFx0XHRcdGogPSB3cmFwWyAwIF07XHJcblx0XHRcdFx0XHR3aGlsZSAoIGotLSApIHtcclxuXHRcdFx0XHRcdFx0dG1wID0gdG1wLmxhc3RDaGlsZDtcclxuXHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHQvLyBTdXBwb3J0OiBRdFdlYktpdCwgUGhhbnRvbUpTXHJcblx0XHRcdFx0XHQvLyBwdXNoLmFwcGx5KF8sIGFycmF5bGlrZSkgdGhyb3dzIG9uIGFuY2llbnQgV2ViS2l0XHJcblx0XHRcdFx0XHRqUXVlcnkubWVyZ2UoIG5vZGVzLCB0bXAuY2hpbGROb2RlcyApO1xyXG5cclxuXHRcdFx0XHRcdC8vIFJlbWVtYmVyIHRoZSB0b3AtbGV2ZWwgY29udGFpbmVyXHJcblx0XHRcdFx0XHR0bXAgPSBmcmFnbWVudC5maXJzdENoaWxkO1xyXG5cclxuXHRcdFx0XHRcdC8vIEVuc3VyZSB0aGUgY3JlYXRlZCBub2RlcyBhcmUgb3JwaGFuZWQgKCMxMjM5MilcclxuXHRcdFx0XHRcdHRtcC50ZXh0Q29udGVudCA9IFwiXCI7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHR9XHJcblxyXG5cdFx0Ly8gUmVtb3ZlIHdyYXBwZXIgZnJvbSBmcmFnbWVudFxyXG5cdFx0ZnJhZ21lbnQudGV4dENvbnRlbnQgPSBcIlwiO1xyXG5cclxuXHRcdGkgPSAwO1xyXG5cdFx0d2hpbGUgKCAoZWxlbSA9IG5vZGVzWyBpKysgXSkgKSB7XHJcblxyXG5cdFx0XHQvLyAjNDA4NyAtIElmIG9yaWdpbiBhbmQgZGVzdGluYXRpb24gZWxlbWVudHMgYXJlIHRoZSBzYW1lLCBhbmQgdGhpcyBpc1xyXG5cdFx0XHQvLyB0aGF0IGVsZW1lbnQsIGRvIG5vdCBkbyBhbnl0aGluZ1xyXG5cdFx0XHRpZiAoIHNlbGVjdGlvbiAmJiBqUXVlcnkuaW5BcnJheSggZWxlbSwgc2VsZWN0aW9uICkgIT09IC0xICkge1xyXG5cdFx0XHRcdGNvbnRpbnVlO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRjb250YWlucyA9IGpRdWVyeS5jb250YWlucyggZWxlbS5vd25lckRvY3VtZW50LCBlbGVtICk7XHJcblxyXG5cdFx0XHQvLyBBcHBlbmQgdG8gZnJhZ21lbnRcclxuXHRcdFx0dG1wID0gZ2V0QWxsKCBmcmFnbWVudC5hcHBlbmRDaGlsZCggZWxlbSApLCBcInNjcmlwdFwiICk7XHJcblxyXG5cdFx0XHQvLyBQcmVzZXJ2ZSBzY3JpcHQgZXZhbHVhdGlvbiBoaXN0b3J5XHJcblx0XHRcdGlmICggY29udGFpbnMgKSB7XHJcblx0XHRcdFx0c2V0R2xvYmFsRXZhbCggdG1wICk7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdC8vIENhcHR1cmUgZXhlY3V0YWJsZXNcclxuXHRcdFx0aWYgKCBzY3JpcHRzICkge1xyXG5cdFx0XHRcdGogPSAwO1xyXG5cdFx0XHRcdHdoaWxlICggKGVsZW0gPSB0bXBbIGorKyBdKSApIHtcclxuXHRcdFx0XHRcdGlmICggcnNjcmlwdFR5cGUudGVzdCggZWxlbS50eXBlIHx8IFwiXCIgKSApIHtcclxuXHRcdFx0XHRcdFx0c2NyaXB0cy5wdXNoKCBlbGVtICk7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIGZyYWdtZW50O1xyXG5cdH0sXHJcblxyXG5cdGNsZWFuRGF0YTogZnVuY3Rpb24oIGVsZW1zICkge1xyXG5cdFx0dmFyIGRhdGEsIGVsZW0sIHR5cGUsIGtleSxcclxuXHRcdFx0c3BlY2lhbCA9IGpRdWVyeS5ldmVudC5zcGVjaWFsLFxyXG5cdFx0XHRpID0gMDtcclxuXHJcblx0XHRmb3IgKCA7IChlbGVtID0gZWxlbXNbIGkgXSkgIT09IHVuZGVmaW5lZDsgaSsrICkge1xyXG5cdFx0XHRpZiAoIGpRdWVyeS5hY2NlcHREYXRhKCBlbGVtICkgKSB7XHJcblx0XHRcdFx0a2V5ID0gZWxlbVsgZGF0YV9wcml2LmV4cGFuZG8gXTtcclxuXHJcblx0XHRcdFx0aWYgKCBrZXkgJiYgKGRhdGEgPSBkYXRhX3ByaXYuY2FjaGVbIGtleSBdKSApIHtcclxuXHRcdFx0XHRcdGlmICggZGF0YS5ldmVudHMgKSB7XHJcblx0XHRcdFx0XHRcdGZvciAoIHR5cGUgaW4gZGF0YS5ldmVudHMgKSB7XHJcblx0XHRcdFx0XHRcdFx0aWYgKCBzcGVjaWFsWyB0eXBlIF0gKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRqUXVlcnkuZXZlbnQucmVtb3ZlKCBlbGVtLCB0eXBlICk7XHJcblxyXG5cdFx0XHRcdFx0XHRcdC8vIFRoaXMgaXMgYSBzaG9ydGN1dCB0byBhdm9pZCBqUXVlcnkuZXZlbnQucmVtb3ZlJ3Mgb3ZlcmhlYWRcclxuXHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0XHRcdFx0alF1ZXJ5LnJlbW92ZUV2ZW50KCBlbGVtLCB0eXBlLCBkYXRhLmhhbmRsZSApO1xyXG5cdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0aWYgKCBkYXRhX3ByaXYuY2FjaGVbIGtleSBdICkge1xyXG5cdFx0XHRcdFx0XHQvLyBEaXNjYXJkIGFueSByZW1haW5pbmcgYHByaXZhdGVgIGRhdGFcclxuXHRcdFx0XHRcdFx0ZGVsZXRlIGRhdGFfcHJpdi5jYWNoZVsga2V5IF07XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHRcdC8vIERpc2NhcmQgYW55IHJlbWFpbmluZyBgdXNlcmAgZGF0YVxyXG5cdFx0XHRkZWxldGUgZGF0YV91c2VyLmNhY2hlWyBlbGVtWyBkYXRhX3VzZXIuZXhwYW5kbyBdIF07XHJcblx0XHR9XHJcblx0fVxyXG59KTtcclxuXHJcbmpRdWVyeS5mbi5leHRlbmQoe1xyXG5cdHRleHQ6IGZ1bmN0aW9uKCB2YWx1ZSApIHtcclxuXHRcdHJldHVybiBhY2Nlc3MoIHRoaXMsIGZ1bmN0aW9uKCB2YWx1ZSApIHtcclxuXHRcdFx0cmV0dXJuIHZhbHVlID09PSB1bmRlZmluZWQgP1xyXG5cdFx0XHRcdGpRdWVyeS50ZXh0KCB0aGlzICkgOlxyXG5cdFx0XHRcdHRoaXMuZW1wdHkoKS5lYWNoKGZ1bmN0aW9uKCkge1xyXG5cdFx0XHRcdFx0aWYgKCB0aGlzLm5vZGVUeXBlID09PSAxIHx8IHRoaXMubm9kZVR5cGUgPT09IDExIHx8IHRoaXMubm9kZVR5cGUgPT09IDkgKSB7XHJcblx0XHRcdFx0XHRcdHRoaXMudGV4dENvbnRlbnQgPSB2YWx1ZTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9KTtcclxuXHRcdH0sIG51bGwsIHZhbHVlLCBhcmd1bWVudHMubGVuZ3RoICk7XHJcblx0fSxcclxuXHJcblx0YXBwZW5kOiBmdW5jdGlvbigpIHtcclxuXHRcdHJldHVybiB0aGlzLmRvbU1hbmlwKCBhcmd1bWVudHMsIGZ1bmN0aW9uKCBlbGVtICkge1xyXG5cdFx0XHRpZiAoIHRoaXMubm9kZVR5cGUgPT09IDEgfHwgdGhpcy5ub2RlVHlwZSA9PT0gMTEgfHwgdGhpcy5ub2RlVHlwZSA9PT0gOSApIHtcclxuXHRcdFx0XHR2YXIgdGFyZ2V0ID0gbWFuaXB1bGF0aW9uVGFyZ2V0KCB0aGlzLCBlbGVtICk7XHJcblx0XHRcdFx0dGFyZ2V0LmFwcGVuZENoaWxkKCBlbGVtICk7XHJcblx0XHRcdH1cclxuXHRcdH0pO1xyXG5cdH0sXHJcblxyXG5cdHByZXBlbmQ6IGZ1bmN0aW9uKCkge1xyXG5cdFx0cmV0dXJuIHRoaXMuZG9tTWFuaXAoIGFyZ3VtZW50cywgZnVuY3Rpb24oIGVsZW0gKSB7XHJcblx0XHRcdGlmICggdGhpcy5ub2RlVHlwZSA9PT0gMSB8fCB0aGlzLm5vZGVUeXBlID09PSAxMSB8fCB0aGlzLm5vZGVUeXBlID09PSA5ICkge1xyXG5cdFx0XHRcdHZhciB0YXJnZXQgPSBtYW5pcHVsYXRpb25UYXJnZXQoIHRoaXMsIGVsZW0gKTtcclxuXHRcdFx0XHR0YXJnZXQuaW5zZXJ0QmVmb3JlKCBlbGVtLCB0YXJnZXQuZmlyc3RDaGlsZCApO1xyXG5cdFx0XHR9XHJcblx0XHR9KTtcclxuXHR9LFxyXG5cclxuXHRiZWZvcmU6IGZ1bmN0aW9uKCkge1xyXG5cdFx0cmV0dXJuIHRoaXMuZG9tTWFuaXAoIGFyZ3VtZW50cywgZnVuY3Rpb24oIGVsZW0gKSB7XHJcblx0XHRcdGlmICggdGhpcy5wYXJlbnROb2RlICkge1xyXG5cdFx0XHRcdHRoaXMucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoIGVsZW0sIHRoaXMgKTtcclxuXHRcdFx0fVxyXG5cdFx0fSk7XHJcblx0fSxcclxuXHJcblx0YWZ0ZXI6IGZ1bmN0aW9uKCkge1xyXG5cdFx0cmV0dXJuIHRoaXMuZG9tTWFuaXAoIGFyZ3VtZW50cywgZnVuY3Rpb24oIGVsZW0gKSB7XHJcblx0XHRcdGlmICggdGhpcy5wYXJlbnROb2RlICkge1xyXG5cdFx0XHRcdHRoaXMucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoIGVsZW0sIHRoaXMubmV4dFNpYmxpbmcgKTtcclxuXHRcdFx0fVxyXG5cdFx0fSk7XHJcblx0fSxcclxuXHJcblx0cmVtb3ZlOiBmdW5jdGlvbiggc2VsZWN0b3IsIGtlZXBEYXRhIC8qIEludGVybmFsIFVzZSBPbmx5ICovICkge1xyXG5cdFx0dmFyIGVsZW0sXHJcblx0XHRcdGVsZW1zID0gc2VsZWN0b3IgPyBqUXVlcnkuZmlsdGVyKCBzZWxlY3RvciwgdGhpcyApIDogdGhpcyxcclxuXHRcdFx0aSA9IDA7XHJcblxyXG5cdFx0Zm9yICggOyAoZWxlbSA9IGVsZW1zW2ldKSAhPSBudWxsOyBpKysgKSB7XHJcblx0XHRcdGlmICggIWtlZXBEYXRhICYmIGVsZW0ubm9kZVR5cGUgPT09IDEgKSB7XHJcblx0XHRcdFx0alF1ZXJ5LmNsZWFuRGF0YSggZ2V0QWxsKCBlbGVtICkgKTtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0aWYgKCBlbGVtLnBhcmVudE5vZGUgKSB7XHJcblx0XHRcdFx0aWYgKCBrZWVwRGF0YSAmJiBqUXVlcnkuY29udGFpbnMoIGVsZW0ub3duZXJEb2N1bWVudCwgZWxlbSApICkge1xyXG5cdFx0XHRcdFx0c2V0R2xvYmFsRXZhbCggZ2V0QWxsKCBlbGVtLCBcInNjcmlwdFwiICkgKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0ZWxlbS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKCBlbGVtICk7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gdGhpcztcclxuXHR9LFxyXG5cclxuXHRlbXB0eTogZnVuY3Rpb24oKSB7XHJcblx0XHR2YXIgZWxlbSxcclxuXHRcdFx0aSA9IDA7XHJcblxyXG5cdFx0Zm9yICggOyAoZWxlbSA9IHRoaXNbaV0pICE9IG51bGw7IGkrKyApIHtcclxuXHRcdFx0aWYgKCBlbGVtLm5vZGVUeXBlID09PSAxICkge1xyXG5cclxuXHRcdFx0XHQvLyBQcmV2ZW50IG1lbW9yeSBsZWFrc1xyXG5cdFx0XHRcdGpRdWVyeS5jbGVhbkRhdGEoIGdldEFsbCggZWxlbSwgZmFsc2UgKSApO1xyXG5cclxuXHRcdFx0XHQvLyBSZW1vdmUgYW55IHJlbWFpbmluZyBub2Rlc1xyXG5cdFx0XHRcdGVsZW0udGV4dENvbnRlbnQgPSBcIlwiO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHRoaXM7XHJcblx0fSxcclxuXHJcblx0Y2xvbmU6IGZ1bmN0aW9uKCBkYXRhQW5kRXZlbnRzLCBkZWVwRGF0YUFuZEV2ZW50cyApIHtcclxuXHRcdGRhdGFBbmRFdmVudHMgPSBkYXRhQW5kRXZlbnRzID09IG51bGwgPyBmYWxzZSA6IGRhdGFBbmRFdmVudHM7XHJcblx0XHRkZWVwRGF0YUFuZEV2ZW50cyA9IGRlZXBEYXRhQW5kRXZlbnRzID09IG51bGwgPyBkYXRhQW5kRXZlbnRzIDogZGVlcERhdGFBbmRFdmVudHM7XHJcblxyXG5cdFx0cmV0dXJuIHRoaXMubWFwKGZ1bmN0aW9uKCkge1xyXG5cdFx0XHRyZXR1cm4galF1ZXJ5LmNsb25lKCB0aGlzLCBkYXRhQW5kRXZlbnRzLCBkZWVwRGF0YUFuZEV2ZW50cyApO1xyXG5cdFx0fSk7XHJcblx0fSxcclxuXHJcblx0aHRtbDogZnVuY3Rpb24oIHZhbHVlICkge1xyXG5cdFx0cmV0dXJuIGFjY2VzcyggdGhpcywgZnVuY3Rpb24oIHZhbHVlICkge1xyXG5cdFx0XHR2YXIgZWxlbSA9IHRoaXNbIDAgXSB8fCB7fSxcclxuXHRcdFx0XHRpID0gMCxcclxuXHRcdFx0XHRsID0gdGhpcy5sZW5ndGg7XHJcblxyXG5cdFx0XHRpZiAoIHZhbHVlID09PSB1bmRlZmluZWQgJiYgZWxlbS5ub2RlVHlwZSA9PT0gMSApIHtcclxuXHRcdFx0XHRyZXR1cm4gZWxlbS5pbm5lckhUTUw7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdC8vIFNlZSBpZiB3ZSBjYW4gdGFrZSBhIHNob3J0Y3V0IGFuZCBqdXN0IHVzZSBpbm5lckhUTUxcclxuXHRcdFx0aWYgKCB0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIgJiYgIXJub0lubmVyaHRtbC50ZXN0KCB2YWx1ZSApICYmXHJcblx0XHRcdFx0IXdyYXBNYXBbICggcnRhZ05hbWUuZXhlYyggdmFsdWUgKSB8fCBbIFwiXCIsIFwiXCIgXSApWyAxIF0udG9Mb3dlckNhc2UoKSBdICkge1xyXG5cclxuXHRcdFx0XHR2YWx1ZSA9IHZhbHVlLnJlcGxhY2UoIHJ4aHRtbFRhZywgXCI8JDE+PC8kMj5cIiApO1xyXG5cclxuXHRcdFx0XHR0cnkge1xyXG5cdFx0XHRcdFx0Zm9yICggOyBpIDwgbDsgaSsrICkge1xyXG5cdFx0XHRcdFx0XHRlbGVtID0gdGhpc1sgaSBdIHx8IHt9O1xyXG5cclxuXHRcdFx0XHRcdFx0Ly8gUmVtb3ZlIGVsZW1lbnQgbm9kZXMgYW5kIHByZXZlbnQgbWVtb3J5IGxlYWtzXHJcblx0XHRcdFx0XHRcdGlmICggZWxlbS5ub2RlVHlwZSA9PT0gMSApIHtcclxuXHRcdFx0XHRcdFx0XHRqUXVlcnkuY2xlYW5EYXRhKCBnZXRBbGwoIGVsZW0sIGZhbHNlICkgKTtcclxuXHRcdFx0XHRcdFx0XHRlbGVtLmlubmVySFRNTCA9IHZhbHVlO1xyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0ZWxlbSA9IDA7XHJcblxyXG5cdFx0XHRcdC8vIElmIHVzaW5nIGlubmVySFRNTCB0aHJvd3MgYW4gZXhjZXB0aW9uLCB1c2UgdGhlIGZhbGxiYWNrIG1ldGhvZFxyXG5cdFx0XHRcdH0gY2F0Y2goIGUgKSB7fVxyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRpZiAoIGVsZW0gKSB7XHJcblx0XHRcdFx0dGhpcy5lbXB0eSgpLmFwcGVuZCggdmFsdWUgKTtcclxuXHRcdFx0fVxyXG5cdFx0fSwgbnVsbCwgdmFsdWUsIGFyZ3VtZW50cy5sZW5ndGggKTtcclxuXHR9LFxyXG5cclxuXHRyZXBsYWNlV2l0aDogZnVuY3Rpb24oKSB7XHJcblx0XHR2YXIgYXJnID0gYXJndW1lbnRzWyAwIF07XHJcblxyXG5cdFx0Ly8gTWFrZSB0aGUgY2hhbmdlcywgcmVwbGFjaW5nIGVhY2ggY29udGV4dCBlbGVtZW50IHdpdGggdGhlIG5ldyBjb250ZW50XHJcblx0XHR0aGlzLmRvbU1hbmlwKCBhcmd1bWVudHMsIGZ1bmN0aW9uKCBlbGVtICkge1xyXG5cdFx0XHRhcmcgPSB0aGlzLnBhcmVudE5vZGU7XHJcblxyXG5cdFx0XHRqUXVlcnkuY2xlYW5EYXRhKCBnZXRBbGwoIHRoaXMgKSApO1xyXG5cclxuXHRcdFx0aWYgKCBhcmcgKSB7XHJcblx0XHRcdFx0YXJnLnJlcGxhY2VDaGlsZCggZWxlbSwgdGhpcyApO1xyXG5cdFx0XHR9XHJcblx0XHR9KTtcclxuXHJcblx0XHQvLyBGb3JjZSByZW1vdmFsIGlmIHRoZXJlIHdhcyBubyBuZXcgY29udGVudCAoZS5nLiwgZnJvbSBlbXB0eSBhcmd1bWVudHMpXHJcblx0XHRyZXR1cm4gYXJnICYmIChhcmcubGVuZ3RoIHx8IGFyZy5ub2RlVHlwZSkgPyB0aGlzIDogdGhpcy5yZW1vdmUoKTtcclxuXHR9LFxyXG5cclxuXHRkZXRhY2g6IGZ1bmN0aW9uKCBzZWxlY3RvciApIHtcclxuXHRcdHJldHVybiB0aGlzLnJlbW92ZSggc2VsZWN0b3IsIHRydWUgKTtcclxuXHR9LFxyXG5cclxuXHRkb21NYW5pcDogZnVuY3Rpb24oIGFyZ3MsIGNhbGxiYWNrICkge1xyXG5cclxuXHRcdC8vIEZsYXR0ZW4gYW55IG5lc3RlZCBhcnJheXNcclxuXHRcdGFyZ3MgPSBjb25jYXQuYXBwbHkoIFtdLCBhcmdzICk7XHJcblxyXG5cdFx0dmFyIGZyYWdtZW50LCBmaXJzdCwgc2NyaXB0cywgaGFzU2NyaXB0cywgbm9kZSwgZG9jLFxyXG5cdFx0XHRpID0gMCxcclxuXHRcdFx0bCA9IHRoaXMubGVuZ3RoLFxyXG5cdFx0XHRzZXQgPSB0aGlzLFxyXG5cdFx0XHRpTm9DbG9uZSA9IGwgLSAxLFxyXG5cdFx0XHR2YWx1ZSA9IGFyZ3NbIDAgXSxcclxuXHRcdFx0aXNGdW5jdGlvbiA9IGpRdWVyeS5pc0Z1bmN0aW9uKCB2YWx1ZSApO1xyXG5cclxuXHRcdC8vIFdlIGNhbid0IGNsb25lTm9kZSBmcmFnbWVudHMgdGhhdCBjb250YWluIGNoZWNrZWQsIGluIFdlYktpdFxyXG5cdFx0aWYgKCBpc0Z1bmN0aW9uIHx8XHJcblx0XHRcdFx0KCBsID4gMSAmJiB0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIgJiZcclxuXHRcdFx0XHRcdCFzdXBwb3J0LmNoZWNrQ2xvbmUgJiYgcmNoZWNrZWQudGVzdCggdmFsdWUgKSApICkge1xyXG5cdFx0XHRyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCBpbmRleCApIHtcclxuXHRcdFx0XHR2YXIgc2VsZiA9IHNldC5lcSggaW5kZXggKTtcclxuXHRcdFx0XHRpZiAoIGlzRnVuY3Rpb24gKSB7XHJcblx0XHRcdFx0XHRhcmdzWyAwIF0gPSB2YWx1ZS5jYWxsKCB0aGlzLCBpbmRleCwgc2VsZi5odG1sKCkgKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0c2VsZi5kb21NYW5pcCggYXJncywgY2FsbGJhY2sgKTtcclxuXHRcdFx0fSk7XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKCBsICkge1xyXG5cdFx0XHRmcmFnbWVudCA9IGpRdWVyeS5idWlsZEZyYWdtZW50KCBhcmdzLCB0aGlzWyAwIF0ub3duZXJEb2N1bWVudCwgZmFsc2UsIHRoaXMgKTtcclxuXHRcdFx0Zmlyc3QgPSBmcmFnbWVudC5maXJzdENoaWxkO1xyXG5cclxuXHRcdFx0aWYgKCBmcmFnbWVudC5jaGlsZE5vZGVzLmxlbmd0aCA9PT0gMSApIHtcclxuXHRcdFx0XHRmcmFnbWVudCA9IGZpcnN0O1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRpZiAoIGZpcnN0ICkge1xyXG5cdFx0XHRcdHNjcmlwdHMgPSBqUXVlcnkubWFwKCBnZXRBbGwoIGZyYWdtZW50LCBcInNjcmlwdFwiICksIGRpc2FibGVTY3JpcHQgKTtcclxuXHRcdFx0XHRoYXNTY3JpcHRzID0gc2NyaXB0cy5sZW5ndGg7XHJcblxyXG5cdFx0XHRcdC8vIFVzZSB0aGUgb3JpZ2luYWwgZnJhZ21lbnQgZm9yIHRoZSBsYXN0IGl0ZW0gaW5zdGVhZCBvZiB0aGUgZmlyc3QgYmVjYXVzZSBpdCBjYW4gZW5kIHVwXHJcblx0XHRcdFx0Ly8gYmVpbmcgZW1wdGllZCBpbmNvcnJlY3RseSBpbiBjZXJ0YWluIHNpdHVhdGlvbnMgKCM4MDcwKS5cclxuXHRcdFx0XHRmb3IgKCA7IGkgPCBsOyBpKysgKSB7XHJcblx0XHRcdFx0XHRub2RlID0gZnJhZ21lbnQ7XHJcblxyXG5cdFx0XHRcdFx0aWYgKCBpICE9PSBpTm9DbG9uZSApIHtcclxuXHRcdFx0XHRcdFx0bm9kZSA9IGpRdWVyeS5jbG9uZSggbm9kZSwgdHJ1ZSwgdHJ1ZSApO1xyXG5cclxuXHRcdFx0XHRcdFx0Ly8gS2VlcCByZWZlcmVuY2VzIHRvIGNsb25lZCBzY3JpcHRzIGZvciBsYXRlciByZXN0b3JhdGlvblxyXG5cdFx0XHRcdFx0XHRpZiAoIGhhc1NjcmlwdHMgKSB7XHJcblx0XHRcdFx0XHRcdFx0Ly8gU3VwcG9ydDogUXRXZWJLaXRcclxuXHRcdFx0XHRcdFx0XHQvLyBqUXVlcnkubWVyZ2UgYmVjYXVzZSBwdXNoLmFwcGx5KF8sIGFycmF5bGlrZSkgdGhyb3dzXHJcblx0XHRcdFx0XHRcdFx0alF1ZXJ5Lm1lcmdlKCBzY3JpcHRzLCBnZXRBbGwoIG5vZGUsIFwic2NyaXB0XCIgKSApO1xyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0Y2FsbGJhY2suY2FsbCggdGhpc1sgaSBdLCBub2RlLCBpICk7XHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRpZiAoIGhhc1NjcmlwdHMgKSB7XHJcblx0XHRcdFx0XHRkb2MgPSBzY3JpcHRzWyBzY3JpcHRzLmxlbmd0aCAtIDEgXS5vd25lckRvY3VtZW50O1xyXG5cclxuXHRcdFx0XHRcdC8vIFJlZW5hYmxlIHNjcmlwdHNcclxuXHRcdFx0XHRcdGpRdWVyeS5tYXAoIHNjcmlwdHMsIHJlc3RvcmVTY3JpcHQgKTtcclxuXHJcblx0XHRcdFx0XHQvLyBFdmFsdWF0ZSBleGVjdXRhYmxlIHNjcmlwdHMgb24gZmlyc3QgZG9jdW1lbnQgaW5zZXJ0aW9uXHJcblx0XHRcdFx0XHRmb3IgKCBpID0gMDsgaSA8IGhhc1NjcmlwdHM7IGkrKyApIHtcclxuXHRcdFx0XHRcdFx0bm9kZSA9IHNjcmlwdHNbIGkgXTtcclxuXHRcdFx0XHRcdFx0aWYgKCByc2NyaXB0VHlwZS50ZXN0KCBub2RlLnR5cGUgfHwgXCJcIiApICYmXHJcblx0XHRcdFx0XHRcdFx0IWRhdGFfcHJpdi5hY2Nlc3MoIG5vZGUsIFwiZ2xvYmFsRXZhbFwiICkgJiYgalF1ZXJ5LmNvbnRhaW5zKCBkb2MsIG5vZGUgKSApIHtcclxuXHJcblx0XHRcdFx0XHRcdFx0aWYgKCBub2RlLnNyYyApIHtcclxuXHRcdFx0XHRcdFx0XHRcdC8vIE9wdGlvbmFsIEFKQVggZGVwZW5kZW5jeSwgYnV0IHdvbid0IHJ1biBzY3JpcHRzIGlmIG5vdCBwcmVzZW50XHJcblx0XHRcdFx0XHRcdFx0XHRpZiAoIGpRdWVyeS5fZXZhbFVybCApIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0alF1ZXJ5Ll9ldmFsVXJsKCBub2RlLnNyYyApO1xyXG5cdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRcdFx0XHRqUXVlcnkuZ2xvYmFsRXZhbCggbm9kZS50ZXh0Q29udGVudC5yZXBsYWNlKCByY2xlYW5TY3JpcHQsIFwiXCIgKSApO1xyXG5cdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiB0aGlzO1xyXG5cdH1cclxufSk7XHJcblxyXG5qUXVlcnkuZWFjaCh7XHJcblx0YXBwZW5kVG86IFwiYXBwZW5kXCIsXHJcblx0cHJlcGVuZFRvOiBcInByZXBlbmRcIixcclxuXHRpbnNlcnRCZWZvcmU6IFwiYmVmb3JlXCIsXHJcblx0aW5zZXJ0QWZ0ZXI6IFwiYWZ0ZXJcIixcclxuXHRyZXBsYWNlQWxsOiBcInJlcGxhY2VXaXRoXCJcclxufSwgZnVuY3Rpb24oIG5hbWUsIG9yaWdpbmFsICkge1xyXG5cdGpRdWVyeS5mblsgbmFtZSBdID0gZnVuY3Rpb24oIHNlbGVjdG9yICkge1xyXG5cdFx0dmFyIGVsZW1zLFxyXG5cdFx0XHRyZXQgPSBbXSxcclxuXHRcdFx0aW5zZXJ0ID0galF1ZXJ5KCBzZWxlY3RvciApLFxyXG5cdFx0XHRsYXN0ID0gaW5zZXJ0Lmxlbmd0aCAtIDEsXHJcblx0XHRcdGkgPSAwO1xyXG5cclxuXHRcdGZvciAoIDsgaSA8PSBsYXN0OyBpKysgKSB7XHJcblx0XHRcdGVsZW1zID0gaSA9PT0gbGFzdCA/IHRoaXMgOiB0aGlzLmNsb25lKCB0cnVlICk7XHJcblx0XHRcdGpRdWVyeSggaW5zZXJ0WyBpIF0gKVsgb3JpZ2luYWwgXSggZWxlbXMgKTtcclxuXHJcblx0XHRcdC8vIFN1cHBvcnQ6IFF0V2ViS2l0XHJcblx0XHRcdC8vIC5nZXQoKSBiZWNhdXNlIHB1c2guYXBwbHkoXywgYXJyYXlsaWtlKSB0aHJvd3NcclxuXHRcdFx0cHVzaC5hcHBseSggcmV0LCBlbGVtcy5nZXQoKSApO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiB0aGlzLnB1c2hTdGFjayggcmV0ICk7XHJcblx0fTtcclxufSk7XHJcblxyXG5cclxudmFyIGlmcmFtZSxcclxuXHRlbGVtZGlzcGxheSA9IHt9O1xyXG5cclxuLyoqXHJcbiAqIFJldHJpZXZlIHRoZSBhY3R1YWwgZGlzcGxheSBvZiBhIGVsZW1lbnRcclxuICogQHBhcmFtIHtTdHJpbmd9IG5hbWUgbm9kZU5hbWUgb2YgdGhlIGVsZW1lbnRcclxuICogQHBhcmFtIHtPYmplY3R9IGRvYyBEb2N1bWVudCBvYmplY3RcclxuICovXHJcbi8vIENhbGxlZCBvbmx5IGZyb20gd2l0aGluIGRlZmF1bHREaXNwbGF5XHJcbmZ1bmN0aW9uIGFjdHVhbERpc3BsYXkoIG5hbWUsIGRvYyApIHtcclxuXHR2YXIgc3R5bGUsXHJcblx0XHRlbGVtID0galF1ZXJ5KCBkb2MuY3JlYXRlRWxlbWVudCggbmFtZSApICkuYXBwZW5kVG8oIGRvYy5ib2R5ICksXHJcblxyXG5cdFx0Ly8gZ2V0RGVmYXVsdENvbXB1dGVkU3R5bGUgbWlnaHQgYmUgcmVsaWFibHkgdXNlZCBvbmx5IG9uIGF0dGFjaGVkIGVsZW1lbnRcclxuXHRcdGRpc3BsYXkgPSB3aW5kb3cuZ2V0RGVmYXVsdENvbXB1dGVkU3R5bGUgJiYgKCBzdHlsZSA9IHdpbmRvdy5nZXREZWZhdWx0Q29tcHV0ZWRTdHlsZSggZWxlbVsgMCBdICkgKSA/XHJcblxyXG5cdFx0XHQvLyBVc2Ugb2YgdGhpcyBtZXRob2QgaXMgYSB0ZW1wb3JhcnkgZml4IChtb3JlIGxpa2Ugb3B0aW1pemF0aW9uKSB1bnRpbCBzb21ldGhpbmcgYmV0dGVyIGNvbWVzIGFsb25nLFxyXG5cdFx0XHQvLyBzaW5jZSBpdCB3YXMgcmVtb3ZlZCBmcm9tIHNwZWNpZmljYXRpb24gYW5kIHN1cHBvcnRlZCBvbmx5IGluIEZGXHJcblx0XHRcdHN0eWxlLmRpc3BsYXkgOiBqUXVlcnkuY3NzKCBlbGVtWyAwIF0sIFwiZGlzcGxheVwiICk7XHJcblxyXG5cdC8vIFdlIGRvbid0IGhhdmUgYW55IGRhdGEgc3RvcmVkIG9uIHRoZSBlbGVtZW50LFxyXG5cdC8vIHNvIHVzZSBcImRldGFjaFwiIG1ldGhvZCBhcyBmYXN0IHdheSB0byBnZXQgcmlkIG9mIHRoZSBlbGVtZW50XHJcblx0ZWxlbS5kZXRhY2goKTtcclxuXHJcblx0cmV0dXJuIGRpc3BsYXk7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBUcnkgdG8gZGV0ZXJtaW5lIHRoZSBkZWZhdWx0IGRpc3BsYXkgdmFsdWUgb2YgYW4gZWxlbWVudFxyXG4gKiBAcGFyYW0ge1N0cmluZ30gbm9kZU5hbWVcclxuICovXHJcbmZ1bmN0aW9uIGRlZmF1bHREaXNwbGF5KCBub2RlTmFtZSApIHtcclxuXHR2YXIgZG9jID0gZG9jdW1lbnQsXHJcblx0XHRkaXNwbGF5ID0gZWxlbWRpc3BsYXlbIG5vZGVOYW1lIF07XHJcblxyXG5cdGlmICggIWRpc3BsYXkgKSB7XHJcblx0XHRkaXNwbGF5ID0gYWN0dWFsRGlzcGxheSggbm9kZU5hbWUsIGRvYyApO1xyXG5cclxuXHRcdC8vIElmIHRoZSBzaW1wbGUgd2F5IGZhaWxzLCByZWFkIGZyb20gaW5zaWRlIGFuIGlmcmFtZVxyXG5cdFx0aWYgKCBkaXNwbGF5ID09PSBcIm5vbmVcIiB8fCAhZGlzcGxheSApIHtcclxuXHJcblx0XHRcdC8vIFVzZSB0aGUgYWxyZWFkeS1jcmVhdGVkIGlmcmFtZSBpZiBwb3NzaWJsZVxyXG5cdFx0XHRpZnJhbWUgPSAoaWZyYW1lIHx8IGpRdWVyeSggXCI8aWZyYW1lIGZyYW1lYm9yZGVyPScwJyB3aWR0aD0nMCcgaGVpZ2h0PScwJy8+XCIgKSkuYXBwZW5kVG8oIGRvYy5kb2N1bWVudEVsZW1lbnQgKTtcclxuXHJcblx0XHRcdC8vIEFsd2F5cyB3cml0ZSBhIG5ldyBIVE1MIHNrZWxldG9uIHNvIFdlYmtpdCBhbmQgRmlyZWZveCBkb24ndCBjaG9rZSBvbiByZXVzZVxyXG5cdFx0XHRkb2MgPSBpZnJhbWVbIDAgXS5jb250ZW50RG9jdW1lbnQ7XHJcblxyXG5cdFx0XHQvLyBTdXBwb3J0OiBJRVxyXG5cdFx0XHRkb2Mud3JpdGUoKTtcclxuXHRcdFx0ZG9jLmNsb3NlKCk7XHJcblxyXG5cdFx0XHRkaXNwbGF5ID0gYWN0dWFsRGlzcGxheSggbm9kZU5hbWUsIGRvYyApO1xyXG5cdFx0XHRpZnJhbWUuZGV0YWNoKCk7XHJcblx0XHR9XHJcblxyXG5cdFx0Ly8gU3RvcmUgdGhlIGNvcnJlY3QgZGVmYXVsdCBkaXNwbGF5XHJcblx0XHRlbGVtZGlzcGxheVsgbm9kZU5hbWUgXSA9IGRpc3BsYXk7XHJcblx0fVxyXG5cclxuXHRyZXR1cm4gZGlzcGxheTtcclxufVxyXG52YXIgcm1hcmdpbiA9ICgvXm1hcmdpbi8pO1xyXG5cclxudmFyIHJudW1ub25weCA9IG5ldyBSZWdFeHAoIFwiXihcIiArIHBudW0gKyBcIikoPyFweClbYS16JV0rJFwiLCBcImlcIiApO1xyXG5cclxudmFyIGdldFN0eWxlcyA9IGZ1bmN0aW9uKCBlbGVtICkge1xyXG5cdFx0Ly8gU3VwcG9ydDogSUU8PTExKywgRmlyZWZveDw9MzArICgjMTUwOTgsICMxNDE1MClcclxuXHRcdC8vIElFIHRocm93cyBvbiBlbGVtZW50cyBjcmVhdGVkIGluIHBvcHVwc1xyXG5cdFx0Ly8gRkYgbWVhbndoaWxlIHRocm93cyBvbiBmcmFtZSBlbGVtZW50cyB0aHJvdWdoIFwiZGVmYXVsdFZpZXcuZ2V0Q29tcHV0ZWRTdHlsZVwiXHJcblx0XHRpZiAoIGVsZW0ub3duZXJEb2N1bWVudC5kZWZhdWx0Vmlldy5vcGVuZXIgKSB7XHJcblx0XHRcdHJldHVybiBlbGVtLm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXcuZ2V0Q29tcHV0ZWRTdHlsZSggZWxlbSwgbnVsbCApO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSggZWxlbSwgbnVsbCApO1xyXG5cdH07XHJcblxyXG5cclxuXHJcbmZ1bmN0aW9uIGN1ckNTUyggZWxlbSwgbmFtZSwgY29tcHV0ZWQgKSB7XHJcblx0dmFyIHdpZHRoLCBtaW5XaWR0aCwgbWF4V2lkdGgsIHJldCxcclxuXHRcdHN0eWxlID0gZWxlbS5zdHlsZTtcclxuXHJcblx0Y29tcHV0ZWQgPSBjb21wdXRlZCB8fCBnZXRTdHlsZXMoIGVsZW0gKTtcclxuXHJcblx0Ly8gU3VwcG9ydDogSUU5XHJcblx0Ly8gZ2V0UHJvcGVydHlWYWx1ZSBpcyBvbmx5IG5lZWRlZCBmb3IgLmNzcygnZmlsdGVyJykgKCMxMjUzNylcclxuXHRpZiAoIGNvbXB1dGVkICkge1xyXG5cdFx0cmV0ID0gY29tcHV0ZWQuZ2V0UHJvcGVydHlWYWx1ZSggbmFtZSApIHx8IGNvbXB1dGVkWyBuYW1lIF07XHJcblx0fVxyXG5cclxuXHRpZiAoIGNvbXB1dGVkICkge1xyXG5cclxuXHRcdGlmICggcmV0ID09PSBcIlwiICYmICFqUXVlcnkuY29udGFpbnMoIGVsZW0ub3duZXJEb2N1bWVudCwgZWxlbSApICkge1xyXG5cdFx0XHRyZXQgPSBqUXVlcnkuc3R5bGUoIGVsZW0sIG5hbWUgKTtcclxuXHRcdH1cclxuXHJcblx0XHQvLyBTdXBwb3J0OiBpT1MgPCA2XHJcblx0XHQvLyBBIHRyaWJ1dGUgdG8gdGhlIFwiYXdlc29tZSBoYWNrIGJ5IERlYW4gRWR3YXJkc1wiXHJcblx0XHQvLyBpT1MgPCA2IChhdCBsZWFzdCkgcmV0dXJucyBwZXJjZW50YWdlIGZvciBhIGxhcmdlciBzZXQgb2YgdmFsdWVzLCBidXQgd2lkdGggc2VlbXMgdG8gYmUgcmVsaWFibHkgcGl4ZWxzXHJcblx0XHQvLyB0aGlzIGlzIGFnYWluc3QgdGhlIENTU09NIGRyYWZ0IHNwZWM6IGh0dHA6Ly9kZXYudzMub3JnL2Nzc3dnL2Nzc29tLyNyZXNvbHZlZC12YWx1ZXNcclxuXHRcdGlmICggcm51bW5vbnB4LnRlc3QoIHJldCApICYmIHJtYXJnaW4udGVzdCggbmFtZSApICkge1xyXG5cclxuXHRcdFx0Ly8gUmVtZW1iZXIgdGhlIG9yaWdpbmFsIHZhbHVlc1xyXG5cdFx0XHR3aWR0aCA9IHN0eWxlLndpZHRoO1xyXG5cdFx0XHRtaW5XaWR0aCA9IHN0eWxlLm1pbldpZHRoO1xyXG5cdFx0XHRtYXhXaWR0aCA9IHN0eWxlLm1heFdpZHRoO1xyXG5cclxuXHRcdFx0Ly8gUHV0IGluIHRoZSBuZXcgdmFsdWVzIHRvIGdldCBhIGNvbXB1dGVkIHZhbHVlIG91dFxyXG5cdFx0XHRzdHlsZS5taW5XaWR0aCA9IHN0eWxlLm1heFdpZHRoID0gc3R5bGUud2lkdGggPSByZXQ7XHJcblx0XHRcdHJldCA9IGNvbXB1dGVkLndpZHRoO1xyXG5cclxuXHRcdFx0Ly8gUmV2ZXJ0IHRoZSBjaGFuZ2VkIHZhbHVlc1xyXG5cdFx0XHRzdHlsZS53aWR0aCA9IHdpZHRoO1xyXG5cdFx0XHRzdHlsZS5taW5XaWR0aCA9IG1pbldpZHRoO1xyXG5cdFx0XHRzdHlsZS5tYXhXaWR0aCA9IG1heFdpZHRoO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0cmV0dXJuIHJldCAhPT0gdW5kZWZpbmVkID9cclxuXHRcdC8vIFN1cHBvcnQ6IElFXHJcblx0XHQvLyBJRSByZXR1cm5zIHpJbmRleCB2YWx1ZSBhcyBhbiBpbnRlZ2VyLlxyXG5cdFx0cmV0ICsgXCJcIiA6XHJcblx0XHRyZXQ7XHJcbn1cclxuXHJcblxyXG5mdW5jdGlvbiBhZGRHZXRIb29rSWYoIGNvbmRpdGlvbkZuLCBob29rRm4gKSB7XHJcblx0Ly8gRGVmaW5lIHRoZSBob29rLCB3ZSdsbCBjaGVjayBvbiB0aGUgZmlyc3QgcnVuIGlmIGl0J3MgcmVhbGx5IG5lZWRlZC5cclxuXHRyZXR1cm4ge1xyXG5cdFx0Z2V0OiBmdW5jdGlvbigpIHtcclxuXHRcdFx0aWYgKCBjb25kaXRpb25GbigpICkge1xyXG5cdFx0XHRcdC8vIEhvb2sgbm90IG5lZWRlZCAob3IgaXQncyBub3QgcG9zc2libGUgdG8gdXNlIGl0IGR1ZVxyXG5cdFx0XHRcdC8vIHRvIG1pc3NpbmcgZGVwZW5kZW5jeSksIHJlbW92ZSBpdC5cclxuXHRcdFx0XHRkZWxldGUgdGhpcy5nZXQ7XHJcblx0XHRcdFx0cmV0dXJuO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHQvLyBIb29rIG5lZWRlZDsgcmVkZWZpbmUgaXQgc28gdGhhdCB0aGUgc3VwcG9ydCB0ZXN0IGlzIG5vdCBleGVjdXRlZCBhZ2Fpbi5cclxuXHRcdFx0cmV0dXJuICh0aGlzLmdldCA9IGhvb2tGbikuYXBwbHkoIHRoaXMsIGFyZ3VtZW50cyApO1xyXG5cdFx0fVxyXG5cdH07XHJcbn1cclxuXHJcblxyXG4oZnVuY3Rpb24oKSB7XHJcblx0dmFyIHBpeGVsUG9zaXRpb25WYWwsIGJveFNpemluZ1JlbGlhYmxlVmFsLFxyXG5cdFx0ZG9jRWxlbSA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCxcclxuXHRcdGNvbnRhaW5lciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIFwiZGl2XCIgKSxcclxuXHRcdGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIFwiZGl2XCIgKTtcclxuXHJcblx0aWYgKCAhZGl2LnN0eWxlICkge1xyXG5cdFx0cmV0dXJuO1xyXG5cdH1cclxuXHJcblx0Ly8gU3VwcG9ydDogSUU5LTExK1xyXG5cdC8vIFN0eWxlIG9mIGNsb25lZCBlbGVtZW50IGFmZmVjdHMgc291cmNlIGVsZW1lbnQgY2xvbmVkICgjODkwOClcclxuXHRkaXYuc3R5bGUuYmFja2dyb3VuZENsaXAgPSBcImNvbnRlbnQtYm94XCI7XHJcblx0ZGl2LmNsb25lTm9kZSggdHJ1ZSApLnN0eWxlLmJhY2tncm91bmRDbGlwID0gXCJcIjtcclxuXHRzdXBwb3J0LmNsZWFyQ2xvbmVTdHlsZSA9IGRpdi5zdHlsZS5iYWNrZ3JvdW5kQ2xpcCA9PT0gXCJjb250ZW50LWJveFwiO1xyXG5cclxuXHRjb250YWluZXIuc3R5bGUuY3NzVGV4dCA9IFwiYm9yZGVyOjA7d2lkdGg6MDtoZWlnaHQ6MDt0b3A6MDtsZWZ0Oi05OTk5cHg7bWFyZ2luLXRvcDoxcHg7XCIgK1xyXG5cdFx0XCJwb3NpdGlvbjphYnNvbHV0ZVwiO1xyXG5cdGNvbnRhaW5lci5hcHBlbmRDaGlsZCggZGl2ICk7XHJcblxyXG5cdC8vIEV4ZWN1dGluZyBib3RoIHBpeGVsUG9zaXRpb24gJiBib3hTaXppbmdSZWxpYWJsZSB0ZXN0cyByZXF1aXJlIG9ubHkgb25lIGxheW91dFxyXG5cdC8vIHNvIHRoZXkncmUgZXhlY3V0ZWQgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHRoZSBzZWNvbmQgY29tcHV0YXRpb24uXHJcblx0ZnVuY3Rpb24gY29tcHV0ZVBpeGVsUG9zaXRpb25BbmRCb3hTaXppbmdSZWxpYWJsZSgpIHtcclxuXHRcdGRpdi5zdHlsZS5jc3NUZXh0ID1cclxuXHRcdFx0Ly8gU3VwcG9ydDogRmlyZWZveDwyOSwgQW5kcm9pZCAyLjNcclxuXHRcdFx0Ly8gVmVuZG9yLXByZWZpeCBib3gtc2l6aW5nXHJcblx0XHRcdFwiLXdlYmtpdC1ib3gtc2l6aW5nOmJvcmRlci1ib3g7LW1vei1ib3gtc2l6aW5nOmJvcmRlci1ib3g7XCIgK1xyXG5cdFx0XHRcImJveC1zaXppbmc6Ym9yZGVyLWJveDtkaXNwbGF5OmJsb2NrO21hcmdpbi10b3A6MSU7dG9wOjElO1wiICtcclxuXHRcdFx0XCJib3JkZXI6MXB4O3BhZGRpbmc6MXB4O3dpZHRoOjRweDtwb3NpdGlvbjphYnNvbHV0ZVwiO1xyXG5cdFx0ZGl2LmlubmVySFRNTCA9IFwiXCI7XHJcblx0XHRkb2NFbGVtLmFwcGVuZENoaWxkKCBjb250YWluZXIgKTtcclxuXHJcblx0XHR2YXIgZGl2U3R5bGUgPSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSggZGl2LCBudWxsICk7XHJcblx0XHRwaXhlbFBvc2l0aW9uVmFsID0gZGl2U3R5bGUudG9wICE9PSBcIjElXCI7XHJcblx0XHRib3hTaXppbmdSZWxpYWJsZVZhbCA9IGRpdlN0eWxlLndpZHRoID09PSBcIjRweFwiO1xyXG5cclxuXHRcdGRvY0VsZW0ucmVtb3ZlQ2hpbGQoIGNvbnRhaW5lciApO1xyXG5cdH1cclxuXHJcblx0Ly8gU3VwcG9ydDogbm9kZS5qcyBqc2RvbVxyXG5cdC8vIERvbid0IGFzc3VtZSB0aGF0IGdldENvbXB1dGVkU3R5bGUgaXMgYSBwcm9wZXJ0eSBvZiB0aGUgZ2xvYmFsIG9iamVjdFxyXG5cdGlmICggd2luZG93LmdldENvbXB1dGVkU3R5bGUgKSB7XHJcblx0XHRqUXVlcnkuZXh0ZW5kKCBzdXBwb3J0LCB7XHJcblx0XHRcdHBpeGVsUG9zaXRpb246IGZ1bmN0aW9uKCkge1xyXG5cclxuXHRcdFx0XHQvLyBUaGlzIHRlc3QgaXMgZXhlY3V0ZWQgb25seSBvbmNlIGJ1dCB3ZSBzdGlsbCBkbyBtZW1vaXppbmdcclxuXHRcdFx0XHQvLyBzaW5jZSB3ZSBjYW4gdXNlIHRoZSBib3hTaXppbmdSZWxpYWJsZSBwcmUtY29tcHV0aW5nLlxyXG5cdFx0XHRcdC8vIE5vIG5lZWQgdG8gY2hlY2sgaWYgdGhlIHRlc3Qgd2FzIGFscmVhZHkgcGVyZm9ybWVkLCB0aG91Z2guXHJcblx0XHRcdFx0Y29tcHV0ZVBpeGVsUG9zaXRpb25BbmRCb3hTaXppbmdSZWxpYWJsZSgpO1xyXG5cdFx0XHRcdHJldHVybiBwaXhlbFBvc2l0aW9uVmFsO1xyXG5cdFx0XHR9LFxyXG5cdFx0XHRib3hTaXppbmdSZWxpYWJsZTogZnVuY3Rpb24oKSB7XHJcblx0XHRcdFx0aWYgKCBib3hTaXppbmdSZWxpYWJsZVZhbCA9PSBudWxsICkge1xyXG5cdFx0XHRcdFx0Y29tcHV0ZVBpeGVsUG9zaXRpb25BbmRCb3hTaXppbmdSZWxpYWJsZSgpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRyZXR1cm4gYm94U2l6aW5nUmVsaWFibGVWYWw7XHJcblx0XHRcdH0sXHJcblx0XHRcdHJlbGlhYmxlTWFyZ2luUmlnaHQ6IGZ1bmN0aW9uKCkge1xyXG5cclxuXHRcdFx0XHQvLyBTdXBwb3J0OiBBbmRyb2lkIDIuM1xyXG5cdFx0XHRcdC8vIENoZWNrIGlmIGRpdiB3aXRoIGV4cGxpY2l0IHdpZHRoIGFuZCBubyBtYXJnaW4tcmlnaHQgaW5jb3JyZWN0bHlcclxuXHRcdFx0XHQvLyBnZXRzIGNvbXB1dGVkIG1hcmdpbi1yaWdodCBiYXNlZCBvbiB3aWR0aCBvZiBjb250YWluZXIuICgjMzMzMylcclxuXHRcdFx0XHQvLyBXZWJLaXQgQnVnIDEzMzQzIC0gZ2V0Q29tcHV0ZWRTdHlsZSByZXR1cm5zIHdyb25nIHZhbHVlIGZvciBtYXJnaW4tcmlnaHRcclxuXHRcdFx0XHQvLyBUaGlzIHN1cHBvcnQgZnVuY3Rpb24gaXMgb25seSBleGVjdXRlZCBvbmNlIHNvIG5vIG1lbW9pemluZyBpcyBuZWVkZWQuXHJcblx0XHRcdFx0dmFyIHJldCxcclxuXHRcdFx0XHRcdG1hcmdpbkRpdiA9IGRpdi5hcHBlbmRDaGlsZCggZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggXCJkaXZcIiApICk7XHJcblxyXG5cdFx0XHRcdC8vIFJlc2V0IENTUzogYm94LXNpemluZzsgZGlzcGxheTsgbWFyZ2luOyBib3JkZXI7IHBhZGRpbmdcclxuXHRcdFx0XHRtYXJnaW5EaXYuc3R5bGUuY3NzVGV4dCA9IGRpdi5zdHlsZS5jc3NUZXh0ID1cclxuXHRcdFx0XHRcdC8vIFN1cHBvcnQ6IEZpcmVmb3g8MjksIEFuZHJvaWQgMi4zXHJcblx0XHRcdFx0XHQvLyBWZW5kb3ItcHJlZml4IGJveC1zaXppbmdcclxuXHRcdFx0XHRcdFwiLXdlYmtpdC1ib3gtc2l6aW5nOmNvbnRlbnQtYm94Oy1tb3otYm94LXNpemluZzpjb250ZW50LWJveDtcIiArXHJcblx0XHRcdFx0XHRcImJveC1zaXppbmc6Y29udGVudC1ib3g7ZGlzcGxheTpibG9jazttYXJnaW46MDtib3JkZXI6MDtwYWRkaW5nOjBcIjtcclxuXHRcdFx0XHRtYXJnaW5EaXYuc3R5bGUubWFyZ2luUmlnaHQgPSBtYXJnaW5EaXYuc3R5bGUud2lkdGggPSBcIjBcIjtcclxuXHRcdFx0XHRkaXYuc3R5bGUud2lkdGggPSBcIjFweFwiO1xyXG5cdFx0XHRcdGRvY0VsZW0uYXBwZW5kQ2hpbGQoIGNvbnRhaW5lciApO1xyXG5cclxuXHRcdFx0XHRyZXQgPSAhcGFyc2VGbG9hdCggd2luZG93LmdldENvbXB1dGVkU3R5bGUoIG1hcmdpbkRpdiwgbnVsbCApLm1hcmdpblJpZ2h0ICk7XHJcblxyXG5cdFx0XHRcdGRvY0VsZW0ucmVtb3ZlQ2hpbGQoIGNvbnRhaW5lciApO1xyXG5cdFx0XHRcdGRpdi5yZW1vdmVDaGlsZCggbWFyZ2luRGl2ICk7XHJcblxyXG5cdFx0XHRcdHJldHVybiByZXQ7XHJcblx0XHRcdH1cclxuXHRcdH0pO1xyXG5cdH1cclxufSkoKTtcclxuXHJcblxyXG4vLyBBIG1ldGhvZCBmb3IgcXVpY2tseSBzd2FwcGluZyBpbi9vdXQgQ1NTIHByb3BlcnRpZXMgdG8gZ2V0IGNvcnJlY3QgY2FsY3VsYXRpb25zLlxyXG5qUXVlcnkuc3dhcCA9IGZ1bmN0aW9uKCBlbGVtLCBvcHRpb25zLCBjYWxsYmFjaywgYXJncyApIHtcclxuXHR2YXIgcmV0LCBuYW1lLFxyXG5cdFx0b2xkID0ge307XHJcblxyXG5cdC8vIFJlbWVtYmVyIHRoZSBvbGQgdmFsdWVzLCBhbmQgaW5zZXJ0IHRoZSBuZXcgb25lc1xyXG5cdGZvciAoIG5hbWUgaW4gb3B0aW9ucyApIHtcclxuXHRcdG9sZFsgbmFtZSBdID0gZWxlbS5zdHlsZVsgbmFtZSBdO1xyXG5cdFx0ZWxlbS5zdHlsZVsgbmFtZSBdID0gb3B0aW9uc1sgbmFtZSBdO1xyXG5cdH1cclxuXHJcblx0cmV0ID0gY2FsbGJhY2suYXBwbHkoIGVsZW0sIGFyZ3MgfHwgW10gKTtcclxuXHJcblx0Ly8gUmV2ZXJ0IHRoZSBvbGQgdmFsdWVzXHJcblx0Zm9yICggbmFtZSBpbiBvcHRpb25zICkge1xyXG5cdFx0ZWxlbS5zdHlsZVsgbmFtZSBdID0gb2xkWyBuYW1lIF07XHJcblx0fVxyXG5cclxuXHRyZXR1cm4gcmV0O1xyXG59O1xyXG5cclxuXHJcbnZhclxyXG5cdC8vIFN3YXBwYWJsZSBpZiBkaXNwbGF5IGlzIG5vbmUgb3Igc3RhcnRzIHdpdGggdGFibGUgZXhjZXB0IFwidGFibGVcIiwgXCJ0YWJsZS1jZWxsXCIsIG9yIFwidGFibGUtY2FwdGlvblwiXHJcblx0Ly8gU2VlIGhlcmUgZm9yIGRpc3BsYXkgdmFsdWVzOiBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL0NTUy9kaXNwbGF5XHJcblx0cmRpc3BsYXlzd2FwID0gL14obm9uZXx0YWJsZSg/IS1jW2VhXSkuKykvLFxyXG5cdHJudW1zcGxpdCA9IG5ldyBSZWdFeHAoIFwiXihcIiArIHBudW0gKyBcIikoLiopJFwiLCBcImlcIiApLFxyXG5cdHJyZWxOdW0gPSBuZXcgUmVnRXhwKCBcIl4oWystXSk9KFwiICsgcG51bSArIFwiKVwiLCBcImlcIiApLFxyXG5cclxuXHRjc3NTaG93ID0geyBwb3NpdGlvbjogXCJhYnNvbHV0ZVwiLCB2aXNpYmlsaXR5OiBcImhpZGRlblwiLCBkaXNwbGF5OiBcImJsb2NrXCIgfSxcclxuXHRjc3NOb3JtYWxUcmFuc2Zvcm0gPSB7XHJcblx0XHRsZXR0ZXJTcGFjaW5nOiBcIjBcIixcclxuXHRcdGZvbnRXZWlnaHQ6IFwiNDAwXCJcclxuXHR9LFxyXG5cclxuXHRjc3NQcmVmaXhlcyA9IFsgXCJXZWJraXRcIiwgXCJPXCIsIFwiTW96XCIsIFwibXNcIiBdO1xyXG5cclxuLy8gUmV0dXJuIGEgY3NzIHByb3BlcnR5IG1hcHBlZCB0byBhIHBvdGVudGlhbGx5IHZlbmRvciBwcmVmaXhlZCBwcm9wZXJ0eVxyXG5mdW5jdGlvbiB2ZW5kb3JQcm9wTmFtZSggc3R5bGUsIG5hbWUgKSB7XHJcblxyXG5cdC8vIFNob3J0Y3V0IGZvciBuYW1lcyB0aGF0IGFyZSBub3QgdmVuZG9yIHByZWZpeGVkXHJcblx0aWYgKCBuYW1lIGluIHN0eWxlICkge1xyXG5cdFx0cmV0dXJuIG5hbWU7XHJcblx0fVxyXG5cclxuXHQvLyBDaGVjayBmb3IgdmVuZG9yIHByZWZpeGVkIG5hbWVzXHJcblx0dmFyIGNhcE5hbWUgPSBuYW1lWzBdLnRvVXBwZXJDYXNlKCkgKyBuYW1lLnNsaWNlKDEpLFxyXG5cdFx0b3JpZ05hbWUgPSBuYW1lLFxyXG5cdFx0aSA9IGNzc1ByZWZpeGVzLmxlbmd0aDtcclxuXHJcblx0d2hpbGUgKCBpLS0gKSB7XHJcblx0XHRuYW1lID0gY3NzUHJlZml4ZXNbIGkgXSArIGNhcE5hbWU7XHJcblx0XHRpZiAoIG5hbWUgaW4gc3R5bGUgKSB7XHJcblx0XHRcdHJldHVybiBuYW1lO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0cmV0dXJuIG9yaWdOYW1lO1xyXG59XHJcblxyXG5mdW5jdGlvbiBzZXRQb3NpdGl2ZU51bWJlciggZWxlbSwgdmFsdWUsIHN1YnRyYWN0ICkge1xyXG5cdHZhciBtYXRjaGVzID0gcm51bXNwbGl0LmV4ZWMoIHZhbHVlICk7XHJcblx0cmV0dXJuIG1hdGNoZXMgP1xyXG5cdFx0Ly8gR3VhcmQgYWdhaW5zdCB1bmRlZmluZWQgXCJzdWJ0cmFjdFwiLCBlLmcuLCB3aGVuIHVzZWQgYXMgaW4gY3NzSG9va3NcclxuXHRcdE1hdGgubWF4KCAwLCBtYXRjaGVzWyAxIF0gLSAoIHN1YnRyYWN0IHx8IDAgKSApICsgKCBtYXRjaGVzWyAyIF0gfHwgXCJweFwiICkgOlxyXG5cdFx0dmFsdWU7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGF1Z21lbnRXaWR0aE9ySGVpZ2h0KCBlbGVtLCBuYW1lLCBleHRyYSwgaXNCb3JkZXJCb3gsIHN0eWxlcyApIHtcclxuXHR2YXIgaSA9IGV4dHJhID09PSAoIGlzQm9yZGVyQm94ID8gXCJib3JkZXJcIiA6IFwiY29udGVudFwiICkgP1xyXG5cdFx0Ly8gSWYgd2UgYWxyZWFkeSBoYXZlIHRoZSByaWdodCBtZWFzdXJlbWVudCwgYXZvaWQgYXVnbWVudGF0aW9uXHJcblx0XHQ0IDpcclxuXHRcdC8vIE90aGVyd2lzZSBpbml0aWFsaXplIGZvciBob3Jpem9udGFsIG9yIHZlcnRpY2FsIHByb3BlcnRpZXNcclxuXHRcdG5hbWUgPT09IFwid2lkdGhcIiA/IDEgOiAwLFxyXG5cclxuXHRcdHZhbCA9IDA7XHJcblxyXG5cdGZvciAoIDsgaSA8IDQ7IGkgKz0gMiApIHtcclxuXHRcdC8vIEJvdGggYm94IG1vZGVscyBleGNsdWRlIG1hcmdpbiwgc28gYWRkIGl0IGlmIHdlIHdhbnQgaXRcclxuXHRcdGlmICggZXh0cmEgPT09IFwibWFyZ2luXCIgKSB7XHJcblx0XHRcdHZhbCArPSBqUXVlcnkuY3NzKCBlbGVtLCBleHRyYSArIGNzc0V4cGFuZFsgaSBdLCB0cnVlLCBzdHlsZXMgKTtcclxuXHRcdH1cclxuXHJcblx0XHRpZiAoIGlzQm9yZGVyQm94ICkge1xyXG5cdFx0XHQvLyBib3JkZXItYm94IGluY2x1ZGVzIHBhZGRpbmcsIHNvIHJlbW92ZSBpdCBpZiB3ZSB3YW50IGNvbnRlbnRcclxuXHRcdFx0aWYgKCBleHRyYSA9PT0gXCJjb250ZW50XCIgKSB7XHJcblx0XHRcdFx0dmFsIC09IGpRdWVyeS5jc3MoIGVsZW0sIFwicGFkZGluZ1wiICsgY3NzRXhwYW5kWyBpIF0sIHRydWUsIHN0eWxlcyApO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHQvLyBBdCB0aGlzIHBvaW50LCBleHRyYSBpc24ndCBib3JkZXIgbm9yIG1hcmdpbiwgc28gcmVtb3ZlIGJvcmRlclxyXG5cdFx0XHRpZiAoIGV4dHJhICE9PSBcIm1hcmdpblwiICkge1xyXG5cdFx0XHRcdHZhbCAtPSBqUXVlcnkuY3NzKCBlbGVtLCBcImJvcmRlclwiICsgY3NzRXhwYW5kWyBpIF0gKyBcIldpZHRoXCIsIHRydWUsIHN0eWxlcyApO1xyXG5cdFx0XHR9XHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHQvLyBBdCB0aGlzIHBvaW50LCBleHRyYSBpc24ndCBjb250ZW50LCBzbyBhZGQgcGFkZGluZ1xyXG5cdFx0XHR2YWwgKz0galF1ZXJ5LmNzcyggZWxlbSwgXCJwYWRkaW5nXCIgKyBjc3NFeHBhbmRbIGkgXSwgdHJ1ZSwgc3R5bGVzICk7XHJcblxyXG5cdFx0XHQvLyBBdCB0aGlzIHBvaW50LCBleHRyYSBpc24ndCBjb250ZW50IG5vciBwYWRkaW5nLCBzbyBhZGQgYm9yZGVyXHJcblx0XHRcdGlmICggZXh0cmEgIT09IFwicGFkZGluZ1wiICkge1xyXG5cdFx0XHRcdHZhbCArPSBqUXVlcnkuY3NzKCBlbGVtLCBcImJvcmRlclwiICsgY3NzRXhwYW5kWyBpIF0gKyBcIldpZHRoXCIsIHRydWUsIHN0eWxlcyApO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRyZXR1cm4gdmFsO1xyXG59XHJcblxyXG5mdW5jdGlvbiBnZXRXaWR0aE9ySGVpZ2h0KCBlbGVtLCBuYW1lLCBleHRyYSApIHtcclxuXHJcblx0Ly8gU3RhcnQgd2l0aCBvZmZzZXQgcHJvcGVydHksIHdoaWNoIGlzIGVxdWl2YWxlbnQgdG8gdGhlIGJvcmRlci1ib3ggdmFsdWVcclxuXHR2YXIgdmFsdWVJc0JvcmRlckJveCA9IHRydWUsXHJcblx0XHR2YWwgPSBuYW1lID09PSBcIndpZHRoXCIgPyBlbGVtLm9mZnNldFdpZHRoIDogZWxlbS5vZmZzZXRIZWlnaHQsXHJcblx0XHRzdHlsZXMgPSBnZXRTdHlsZXMoIGVsZW0gKSxcclxuXHRcdGlzQm9yZGVyQm94ID0galF1ZXJ5LmNzcyggZWxlbSwgXCJib3hTaXppbmdcIiwgZmFsc2UsIHN0eWxlcyApID09PSBcImJvcmRlci1ib3hcIjtcclxuXHJcblx0Ly8gU29tZSBub24taHRtbCBlbGVtZW50cyByZXR1cm4gdW5kZWZpbmVkIGZvciBvZmZzZXRXaWR0aCwgc28gY2hlY2sgZm9yIG51bGwvdW5kZWZpbmVkXHJcblx0Ly8gc3ZnIC0gaHR0cHM6Ly9idWd6aWxsYS5tb3ppbGxhLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjQ5Mjg1XHJcblx0Ly8gTWF0aE1MIC0gaHR0cHM6Ly9idWd6aWxsYS5tb3ppbGxhLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDkxNjY4XHJcblx0aWYgKCB2YWwgPD0gMCB8fCB2YWwgPT0gbnVsbCApIHtcclxuXHRcdC8vIEZhbGwgYmFjayB0byBjb21wdXRlZCB0aGVuIHVuY29tcHV0ZWQgY3NzIGlmIG5lY2Vzc2FyeVxyXG5cdFx0dmFsID0gY3VyQ1NTKCBlbGVtLCBuYW1lLCBzdHlsZXMgKTtcclxuXHRcdGlmICggdmFsIDwgMCB8fCB2YWwgPT0gbnVsbCApIHtcclxuXHRcdFx0dmFsID0gZWxlbS5zdHlsZVsgbmFtZSBdO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8vIENvbXB1dGVkIHVuaXQgaXMgbm90IHBpeGVscy4gU3RvcCBoZXJlIGFuZCByZXR1cm4uXHJcblx0XHRpZiAoIHJudW1ub25weC50ZXN0KHZhbCkgKSB7XHJcblx0XHRcdHJldHVybiB2YWw7XHJcblx0XHR9XHJcblxyXG5cdFx0Ly8gQ2hlY2sgZm9yIHN0eWxlIGluIGNhc2UgYSBicm93c2VyIHdoaWNoIHJldHVybnMgdW5yZWxpYWJsZSB2YWx1ZXNcclxuXHRcdC8vIGZvciBnZXRDb21wdXRlZFN0eWxlIHNpbGVudGx5IGZhbGxzIGJhY2sgdG8gdGhlIHJlbGlhYmxlIGVsZW0uc3R5bGVcclxuXHRcdHZhbHVlSXNCb3JkZXJCb3ggPSBpc0JvcmRlckJveCAmJlxyXG5cdFx0XHQoIHN1cHBvcnQuYm94U2l6aW5nUmVsaWFibGUoKSB8fCB2YWwgPT09IGVsZW0uc3R5bGVbIG5hbWUgXSApO1xyXG5cclxuXHRcdC8vIE5vcm1hbGl6ZSBcIlwiLCBhdXRvLCBhbmQgcHJlcGFyZSBmb3IgZXh0cmFcclxuXHRcdHZhbCA9IHBhcnNlRmxvYXQoIHZhbCApIHx8IDA7XHJcblx0fVxyXG5cclxuXHQvLyBVc2UgdGhlIGFjdGl2ZSBib3gtc2l6aW5nIG1vZGVsIHRvIGFkZC9zdWJ0cmFjdCBpcnJlbGV2YW50IHN0eWxlc1xyXG5cdHJldHVybiAoIHZhbCArXHJcblx0XHRhdWdtZW50V2lkdGhPckhlaWdodChcclxuXHRcdFx0ZWxlbSxcclxuXHRcdFx0bmFtZSxcclxuXHRcdFx0ZXh0cmEgfHwgKCBpc0JvcmRlckJveCA/IFwiYm9yZGVyXCIgOiBcImNvbnRlbnRcIiApLFxyXG5cdFx0XHR2YWx1ZUlzQm9yZGVyQm94LFxyXG5cdFx0XHRzdHlsZXNcclxuXHRcdClcclxuXHQpICsgXCJweFwiO1xyXG59XHJcblxyXG5mdW5jdGlvbiBzaG93SGlkZSggZWxlbWVudHMsIHNob3cgKSB7XHJcblx0dmFyIGRpc3BsYXksIGVsZW0sIGhpZGRlbixcclxuXHRcdHZhbHVlcyA9IFtdLFxyXG5cdFx0aW5kZXggPSAwLFxyXG5cdFx0bGVuZ3RoID0gZWxlbWVudHMubGVuZ3RoO1xyXG5cclxuXHRmb3IgKCA7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrICkge1xyXG5cdFx0ZWxlbSA9IGVsZW1lbnRzWyBpbmRleCBdO1xyXG5cdFx0aWYgKCAhZWxlbS5zdHlsZSApIHtcclxuXHRcdFx0Y29udGludWU7XHJcblx0XHR9XHJcblxyXG5cdFx0dmFsdWVzWyBpbmRleCBdID0gZGF0YV9wcml2LmdldCggZWxlbSwgXCJvbGRkaXNwbGF5XCIgKTtcclxuXHRcdGRpc3BsYXkgPSBlbGVtLnN0eWxlLmRpc3BsYXk7XHJcblx0XHRpZiAoIHNob3cgKSB7XHJcblx0XHRcdC8vIFJlc2V0IHRoZSBpbmxpbmUgZGlzcGxheSBvZiB0aGlzIGVsZW1lbnQgdG8gbGVhcm4gaWYgaXQgaXNcclxuXHRcdFx0Ly8gYmVpbmcgaGlkZGVuIGJ5IGNhc2NhZGVkIHJ1bGVzIG9yIG5vdFxyXG5cdFx0XHRpZiAoICF2YWx1ZXNbIGluZGV4IF0gJiYgZGlzcGxheSA9PT0gXCJub25lXCIgKSB7XHJcblx0XHRcdFx0ZWxlbS5zdHlsZS5kaXNwbGF5ID0gXCJcIjtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0Ly8gU2V0IGVsZW1lbnRzIHdoaWNoIGhhdmUgYmVlbiBvdmVycmlkZGVuIHdpdGggZGlzcGxheTogbm9uZVxyXG5cdFx0XHQvLyBpbiBhIHN0eWxlc2hlZXQgdG8gd2hhdGV2ZXIgdGhlIGRlZmF1bHQgYnJvd3NlciBzdHlsZSBpc1xyXG5cdFx0XHQvLyBmb3Igc3VjaCBhbiBlbGVtZW50XHJcblx0XHRcdGlmICggZWxlbS5zdHlsZS5kaXNwbGF5ID09PSBcIlwiICYmIGlzSGlkZGVuKCBlbGVtICkgKSB7XHJcblx0XHRcdFx0dmFsdWVzWyBpbmRleCBdID0gZGF0YV9wcml2LmFjY2VzcyggZWxlbSwgXCJvbGRkaXNwbGF5XCIsIGRlZmF1bHREaXNwbGF5KGVsZW0ubm9kZU5hbWUpICk7XHJcblx0XHRcdH1cclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdGhpZGRlbiA9IGlzSGlkZGVuKCBlbGVtICk7XHJcblxyXG5cdFx0XHRpZiAoIGRpc3BsYXkgIT09IFwibm9uZVwiIHx8ICFoaWRkZW4gKSB7XHJcblx0XHRcdFx0ZGF0YV9wcml2LnNldCggZWxlbSwgXCJvbGRkaXNwbGF5XCIsIGhpZGRlbiA/IGRpc3BsYXkgOiBqUXVlcnkuY3NzKCBlbGVtLCBcImRpc3BsYXlcIiApICk7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdC8vIFNldCB0aGUgZGlzcGxheSBvZiBtb3N0IG9mIHRoZSBlbGVtZW50cyBpbiBhIHNlY29uZCBsb29wXHJcblx0Ly8gdG8gYXZvaWQgdGhlIGNvbnN0YW50IHJlZmxvd1xyXG5cdGZvciAoIGluZGV4ID0gMDsgaW5kZXggPCBsZW5ndGg7IGluZGV4KysgKSB7XHJcblx0XHRlbGVtID0gZWxlbWVudHNbIGluZGV4IF07XHJcblx0XHRpZiAoICFlbGVtLnN0eWxlICkge1xyXG5cdFx0XHRjb250aW51ZTtcclxuXHRcdH1cclxuXHRcdGlmICggIXNob3cgfHwgZWxlbS5zdHlsZS5kaXNwbGF5ID09PSBcIm5vbmVcIiB8fCBlbGVtLnN0eWxlLmRpc3BsYXkgPT09IFwiXCIgKSB7XHJcblx0XHRcdGVsZW0uc3R5bGUuZGlzcGxheSA9IHNob3cgPyB2YWx1ZXNbIGluZGV4IF0gfHwgXCJcIiA6IFwibm9uZVwiO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0cmV0dXJuIGVsZW1lbnRzO1xyXG59XHJcblxyXG5qUXVlcnkuZXh0ZW5kKHtcclxuXHJcblx0Ly8gQWRkIGluIHN0eWxlIHByb3BlcnR5IGhvb2tzIGZvciBvdmVycmlkaW5nIHRoZSBkZWZhdWx0XHJcblx0Ly8gYmVoYXZpb3Igb2YgZ2V0dGluZyBhbmQgc2V0dGluZyBhIHN0eWxlIHByb3BlcnR5XHJcblx0Y3NzSG9va3M6IHtcclxuXHRcdG9wYWNpdHk6IHtcclxuXHRcdFx0Z2V0OiBmdW5jdGlvbiggZWxlbSwgY29tcHV0ZWQgKSB7XHJcblx0XHRcdFx0aWYgKCBjb21wdXRlZCApIHtcclxuXHJcblx0XHRcdFx0XHQvLyBXZSBzaG91bGQgYWx3YXlzIGdldCBhIG51bWJlciBiYWNrIGZyb20gb3BhY2l0eVxyXG5cdFx0XHRcdFx0dmFyIHJldCA9IGN1ckNTUyggZWxlbSwgXCJvcGFjaXR5XCIgKTtcclxuXHRcdFx0XHRcdHJldHVybiByZXQgPT09IFwiXCIgPyBcIjFcIiA6IHJldDtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHR9LFxyXG5cclxuXHQvLyBEb24ndCBhdXRvbWF0aWNhbGx5IGFkZCBcInB4XCIgdG8gdGhlc2UgcG9zc2libHktdW5pdGxlc3MgcHJvcGVydGllc1xyXG5cdGNzc051bWJlcjoge1xyXG5cdFx0XCJjb2x1bW5Db3VudFwiOiB0cnVlLFxyXG5cdFx0XCJmaWxsT3BhY2l0eVwiOiB0cnVlLFxyXG5cdFx0XCJmbGV4R3Jvd1wiOiB0cnVlLFxyXG5cdFx0XCJmbGV4U2hyaW5rXCI6IHRydWUsXHJcblx0XHRcImZvbnRXZWlnaHRcIjogdHJ1ZSxcclxuXHRcdFwibGluZUhlaWdodFwiOiB0cnVlLFxyXG5cdFx0XCJvcGFjaXR5XCI6IHRydWUsXHJcblx0XHRcIm9yZGVyXCI6IHRydWUsXHJcblx0XHRcIm9ycGhhbnNcIjogdHJ1ZSxcclxuXHRcdFwid2lkb3dzXCI6IHRydWUsXHJcblx0XHRcInpJbmRleFwiOiB0cnVlLFxyXG5cdFx0XCJ6b29tXCI6IHRydWVcclxuXHR9LFxyXG5cclxuXHQvLyBBZGQgaW4gcHJvcGVydGllcyB3aG9zZSBuYW1lcyB5b3Ugd2lzaCB0byBmaXggYmVmb3JlXHJcblx0Ly8gc2V0dGluZyBvciBnZXR0aW5nIHRoZSB2YWx1ZVxyXG5cdGNzc1Byb3BzOiB7XHJcblx0XHRcImZsb2F0XCI6IFwiY3NzRmxvYXRcIlxyXG5cdH0sXHJcblxyXG5cdC8vIEdldCBhbmQgc2V0IHRoZSBzdHlsZSBwcm9wZXJ0eSBvbiBhIERPTSBOb2RlXHJcblx0c3R5bGU6IGZ1bmN0aW9uKCBlbGVtLCBuYW1lLCB2YWx1ZSwgZXh0cmEgKSB7XHJcblxyXG5cdFx0Ly8gRG9uJ3Qgc2V0IHN0eWxlcyBvbiB0ZXh0IGFuZCBjb21tZW50IG5vZGVzXHJcblx0XHRpZiAoICFlbGVtIHx8IGVsZW0ubm9kZVR5cGUgPT09IDMgfHwgZWxlbS5ub2RlVHlwZSA9PT0gOCB8fCAhZWxlbS5zdHlsZSApIHtcclxuXHRcdFx0cmV0dXJuO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8vIE1ha2Ugc3VyZSB0aGF0IHdlJ3JlIHdvcmtpbmcgd2l0aCB0aGUgcmlnaHQgbmFtZVxyXG5cdFx0dmFyIHJldCwgdHlwZSwgaG9va3MsXHJcblx0XHRcdG9yaWdOYW1lID0galF1ZXJ5LmNhbWVsQ2FzZSggbmFtZSApLFxyXG5cdFx0XHRzdHlsZSA9IGVsZW0uc3R5bGU7XHJcblxyXG5cdFx0bmFtZSA9IGpRdWVyeS5jc3NQcm9wc1sgb3JpZ05hbWUgXSB8fCAoIGpRdWVyeS5jc3NQcm9wc1sgb3JpZ05hbWUgXSA9IHZlbmRvclByb3BOYW1lKCBzdHlsZSwgb3JpZ05hbWUgKSApO1xyXG5cclxuXHRcdC8vIEdldHMgaG9vayBmb3IgdGhlIHByZWZpeGVkIHZlcnNpb24sIHRoZW4gdW5wcmVmaXhlZCB2ZXJzaW9uXHJcblx0XHRob29rcyA9IGpRdWVyeS5jc3NIb29rc1sgbmFtZSBdIHx8IGpRdWVyeS5jc3NIb29rc1sgb3JpZ05hbWUgXTtcclxuXHJcblx0XHQvLyBDaGVjayBpZiB3ZSdyZSBzZXR0aW5nIGEgdmFsdWVcclxuXHRcdGlmICggdmFsdWUgIT09IHVuZGVmaW5lZCApIHtcclxuXHRcdFx0dHlwZSA9IHR5cGVvZiB2YWx1ZTtcclxuXHJcblx0XHRcdC8vIENvbnZlcnQgXCIrPVwiIG9yIFwiLT1cIiB0byByZWxhdGl2ZSBudW1iZXJzICgjNzM0NSlcclxuXHRcdFx0aWYgKCB0eXBlID09PSBcInN0cmluZ1wiICYmIChyZXQgPSBycmVsTnVtLmV4ZWMoIHZhbHVlICkpICkge1xyXG5cdFx0XHRcdHZhbHVlID0gKCByZXRbMV0gKyAxICkgKiByZXRbMl0gKyBwYXJzZUZsb2F0KCBqUXVlcnkuY3NzKCBlbGVtLCBuYW1lICkgKTtcclxuXHRcdFx0XHQvLyBGaXhlcyBidWcgIzkyMzdcclxuXHRcdFx0XHR0eXBlID0gXCJudW1iZXJcIjtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0Ly8gTWFrZSBzdXJlIHRoYXQgbnVsbCBhbmQgTmFOIHZhbHVlcyBhcmVuJ3Qgc2V0ICgjNzExNilcclxuXHRcdFx0aWYgKCB2YWx1ZSA9PSBudWxsIHx8IHZhbHVlICE9PSB2YWx1ZSApIHtcclxuXHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdC8vIElmIGEgbnVtYmVyLCBhZGQgJ3B4JyB0byB0aGUgKGV4Y2VwdCBmb3IgY2VydGFpbiBDU1MgcHJvcGVydGllcylcclxuXHRcdFx0aWYgKCB0eXBlID09PSBcIm51bWJlclwiICYmICFqUXVlcnkuY3NzTnVtYmVyWyBvcmlnTmFtZSBdICkge1xyXG5cdFx0XHRcdHZhbHVlICs9IFwicHhcIjtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0Ly8gU3VwcG9ydDogSUU5LTExK1xyXG5cdFx0XHQvLyBiYWNrZ3JvdW5kLSogcHJvcHMgYWZmZWN0IG9yaWdpbmFsIGNsb25lJ3MgdmFsdWVzXHJcblx0XHRcdGlmICggIXN1cHBvcnQuY2xlYXJDbG9uZVN0eWxlICYmIHZhbHVlID09PSBcIlwiICYmIG5hbWUuaW5kZXhPZiggXCJiYWNrZ3JvdW5kXCIgKSA9PT0gMCApIHtcclxuXHRcdFx0XHRzdHlsZVsgbmFtZSBdID0gXCJpbmhlcml0XCI7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdC8vIElmIGEgaG9vayB3YXMgcHJvdmlkZWQsIHVzZSB0aGF0IHZhbHVlLCBvdGhlcndpc2UganVzdCBzZXQgdGhlIHNwZWNpZmllZCB2YWx1ZVxyXG5cdFx0XHRpZiAoICFob29rcyB8fCAhKFwic2V0XCIgaW4gaG9va3MpIHx8ICh2YWx1ZSA9IGhvb2tzLnNldCggZWxlbSwgdmFsdWUsIGV4dHJhICkpICE9PSB1bmRlZmluZWQgKSB7XHJcblx0XHRcdFx0c3R5bGVbIG5hbWUgXSA9IHZhbHVlO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0Ly8gSWYgYSBob29rIHdhcyBwcm92aWRlZCBnZXQgdGhlIG5vbi1jb21wdXRlZCB2YWx1ZSBmcm9tIHRoZXJlXHJcblx0XHRcdGlmICggaG9va3MgJiYgXCJnZXRcIiBpbiBob29rcyAmJiAocmV0ID0gaG9va3MuZ2V0KCBlbGVtLCBmYWxzZSwgZXh0cmEgKSkgIT09IHVuZGVmaW5lZCApIHtcclxuXHRcdFx0XHRyZXR1cm4gcmV0O1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHQvLyBPdGhlcndpc2UganVzdCBnZXQgdGhlIHZhbHVlIGZyb20gdGhlIHN0eWxlIG9iamVjdFxyXG5cdFx0XHRyZXR1cm4gc3R5bGVbIG5hbWUgXTtcclxuXHRcdH1cclxuXHR9LFxyXG5cclxuXHRjc3M6IGZ1bmN0aW9uKCBlbGVtLCBuYW1lLCBleHRyYSwgc3R5bGVzICkge1xyXG5cdFx0dmFyIHZhbCwgbnVtLCBob29rcyxcclxuXHRcdFx0b3JpZ05hbWUgPSBqUXVlcnkuY2FtZWxDYXNlKCBuYW1lICk7XHJcblxyXG5cdFx0Ly8gTWFrZSBzdXJlIHRoYXQgd2UncmUgd29ya2luZyB3aXRoIHRoZSByaWdodCBuYW1lXHJcblx0XHRuYW1lID0galF1ZXJ5LmNzc1Byb3BzWyBvcmlnTmFtZSBdIHx8ICggalF1ZXJ5LmNzc1Byb3BzWyBvcmlnTmFtZSBdID0gdmVuZG9yUHJvcE5hbWUoIGVsZW0uc3R5bGUsIG9yaWdOYW1lICkgKTtcclxuXHJcblx0XHQvLyBUcnkgcHJlZml4ZWQgbmFtZSBmb2xsb3dlZCBieSB0aGUgdW5wcmVmaXhlZCBuYW1lXHJcblx0XHRob29rcyA9IGpRdWVyeS5jc3NIb29rc1sgbmFtZSBdIHx8IGpRdWVyeS5jc3NIb29rc1sgb3JpZ05hbWUgXTtcclxuXHJcblx0XHQvLyBJZiBhIGhvb2sgd2FzIHByb3ZpZGVkIGdldCB0aGUgY29tcHV0ZWQgdmFsdWUgZnJvbSB0aGVyZVxyXG5cdFx0aWYgKCBob29rcyAmJiBcImdldFwiIGluIGhvb2tzICkge1xyXG5cdFx0XHR2YWwgPSBob29rcy5nZXQoIGVsZW0sIHRydWUsIGV4dHJhICk7XHJcblx0XHR9XHJcblxyXG5cdFx0Ly8gT3RoZXJ3aXNlLCBpZiBhIHdheSB0byBnZXQgdGhlIGNvbXB1dGVkIHZhbHVlIGV4aXN0cywgdXNlIHRoYXRcclxuXHRcdGlmICggdmFsID09PSB1bmRlZmluZWQgKSB7XHJcblx0XHRcdHZhbCA9IGN1ckNTUyggZWxlbSwgbmFtZSwgc3R5bGVzICk7XHJcblx0XHR9XHJcblxyXG5cdFx0Ly8gQ29udmVydCBcIm5vcm1hbFwiIHRvIGNvbXB1dGVkIHZhbHVlXHJcblx0XHRpZiAoIHZhbCA9PT0gXCJub3JtYWxcIiAmJiBuYW1lIGluIGNzc05vcm1hbFRyYW5zZm9ybSApIHtcclxuXHRcdFx0dmFsID0gY3NzTm9ybWFsVHJhbnNmb3JtWyBuYW1lIF07XHJcblx0XHR9XHJcblxyXG5cdFx0Ly8gTWFrZSBudW1lcmljIGlmIGZvcmNlZCBvciBhIHF1YWxpZmllciB3YXMgcHJvdmlkZWQgYW5kIHZhbCBsb29rcyBudW1lcmljXHJcblx0XHRpZiAoIGV4dHJhID09PSBcIlwiIHx8IGV4dHJhICkge1xyXG5cdFx0XHRudW0gPSBwYXJzZUZsb2F0KCB2YWwgKTtcclxuXHRcdFx0cmV0dXJuIGV4dHJhID09PSB0cnVlIHx8IGpRdWVyeS5pc051bWVyaWMoIG51bSApID8gbnVtIHx8IDAgOiB2YWw7XHJcblx0XHR9XHJcblx0XHRyZXR1cm4gdmFsO1xyXG5cdH1cclxufSk7XHJcblxyXG5qUXVlcnkuZWFjaChbIFwiaGVpZ2h0XCIsIFwid2lkdGhcIiBdLCBmdW5jdGlvbiggaSwgbmFtZSApIHtcclxuXHRqUXVlcnkuY3NzSG9va3NbIG5hbWUgXSA9IHtcclxuXHRcdGdldDogZnVuY3Rpb24oIGVsZW0sIGNvbXB1dGVkLCBleHRyYSApIHtcclxuXHRcdFx0aWYgKCBjb21wdXRlZCApIHtcclxuXHJcblx0XHRcdFx0Ly8gQ2VydGFpbiBlbGVtZW50cyBjYW4gaGF2ZSBkaW1lbnNpb24gaW5mbyBpZiB3ZSBpbnZpc2libHkgc2hvdyB0aGVtXHJcblx0XHRcdFx0Ly8gYnV0IGl0IG11c3QgaGF2ZSBhIGN1cnJlbnQgZGlzcGxheSBzdHlsZSB0aGF0IHdvdWxkIGJlbmVmaXRcclxuXHRcdFx0XHRyZXR1cm4gcmRpc3BsYXlzd2FwLnRlc3QoIGpRdWVyeS5jc3MoIGVsZW0sIFwiZGlzcGxheVwiICkgKSAmJiBlbGVtLm9mZnNldFdpZHRoID09PSAwID9cclxuXHRcdFx0XHRcdGpRdWVyeS5zd2FwKCBlbGVtLCBjc3NTaG93LCBmdW5jdGlvbigpIHtcclxuXHRcdFx0XHRcdFx0cmV0dXJuIGdldFdpZHRoT3JIZWlnaHQoIGVsZW0sIG5hbWUsIGV4dHJhICk7XHJcblx0XHRcdFx0XHR9KSA6XHJcblx0XHRcdFx0XHRnZXRXaWR0aE9ySGVpZ2h0KCBlbGVtLCBuYW1lLCBleHRyYSApO1xyXG5cdFx0XHR9XHJcblx0XHR9LFxyXG5cclxuXHRcdHNldDogZnVuY3Rpb24oIGVsZW0sIHZhbHVlLCBleHRyYSApIHtcclxuXHRcdFx0dmFyIHN0eWxlcyA9IGV4dHJhICYmIGdldFN0eWxlcyggZWxlbSApO1xyXG5cdFx0XHRyZXR1cm4gc2V0UG9zaXRpdmVOdW1iZXIoIGVsZW0sIHZhbHVlLCBleHRyYSA/XHJcblx0XHRcdFx0YXVnbWVudFdpZHRoT3JIZWlnaHQoXHJcblx0XHRcdFx0XHRlbGVtLFxyXG5cdFx0XHRcdFx0bmFtZSxcclxuXHRcdFx0XHRcdGV4dHJhLFxyXG5cdFx0XHRcdFx0alF1ZXJ5LmNzcyggZWxlbSwgXCJib3hTaXppbmdcIiwgZmFsc2UsIHN0eWxlcyApID09PSBcImJvcmRlci1ib3hcIixcclxuXHRcdFx0XHRcdHN0eWxlc1xyXG5cdFx0XHRcdCkgOiAwXHJcblx0XHRcdCk7XHJcblx0XHR9XHJcblx0fTtcclxufSk7XHJcblxyXG4vLyBTdXBwb3J0OiBBbmRyb2lkIDIuM1xyXG5qUXVlcnkuY3NzSG9va3MubWFyZ2luUmlnaHQgPSBhZGRHZXRIb29rSWYoIHN1cHBvcnQucmVsaWFibGVNYXJnaW5SaWdodCxcclxuXHRmdW5jdGlvbiggZWxlbSwgY29tcHV0ZWQgKSB7XHJcblx0XHRpZiAoIGNvbXB1dGVkICkge1xyXG5cdFx0XHRyZXR1cm4galF1ZXJ5LnN3YXAoIGVsZW0sIHsgXCJkaXNwbGF5XCI6IFwiaW5saW5lLWJsb2NrXCIgfSxcclxuXHRcdFx0XHRjdXJDU1MsIFsgZWxlbSwgXCJtYXJnaW5SaWdodFwiIF0gKTtcclxuXHRcdH1cclxuXHR9XHJcbik7XHJcblxyXG4vLyBUaGVzZSBob29rcyBhcmUgdXNlZCBieSBhbmltYXRlIHRvIGV4cGFuZCBwcm9wZXJ0aWVzXHJcbmpRdWVyeS5lYWNoKHtcclxuXHRtYXJnaW46IFwiXCIsXHJcblx0cGFkZGluZzogXCJcIixcclxuXHRib3JkZXI6IFwiV2lkdGhcIlxyXG59LCBmdW5jdGlvbiggcHJlZml4LCBzdWZmaXggKSB7XHJcblx0alF1ZXJ5LmNzc0hvb2tzWyBwcmVmaXggKyBzdWZmaXggXSA9IHtcclxuXHRcdGV4cGFuZDogZnVuY3Rpb24oIHZhbHVlICkge1xyXG5cdFx0XHR2YXIgaSA9IDAsXHJcblx0XHRcdFx0ZXhwYW5kZWQgPSB7fSxcclxuXHJcblx0XHRcdFx0Ly8gQXNzdW1lcyBhIHNpbmdsZSBudW1iZXIgaWYgbm90IGEgc3RyaW5nXHJcblx0XHRcdFx0cGFydHMgPSB0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIgPyB2YWx1ZS5zcGxpdChcIiBcIikgOiBbIHZhbHVlIF07XHJcblxyXG5cdFx0XHRmb3IgKCA7IGkgPCA0OyBpKysgKSB7XHJcblx0XHRcdFx0ZXhwYW5kZWRbIHByZWZpeCArIGNzc0V4cGFuZFsgaSBdICsgc3VmZml4IF0gPVxyXG5cdFx0XHRcdFx0cGFydHNbIGkgXSB8fCBwYXJ0c1sgaSAtIDIgXSB8fCBwYXJ0c1sgMCBdO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRyZXR1cm4gZXhwYW5kZWQ7XHJcblx0XHR9XHJcblx0fTtcclxuXHJcblx0aWYgKCAhcm1hcmdpbi50ZXN0KCBwcmVmaXggKSApIHtcclxuXHRcdGpRdWVyeS5jc3NIb29rc1sgcHJlZml4ICsgc3VmZml4IF0uc2V0ID0gc2V0UG9zaXRpdmVOdW1iZXI7XHJcblx0fVxyXG59KTtcclxuXHJcbmpRdWVyeS5mbi5leHRlbmQoe1xyXG5cdGNzczogZnVuY3Rpb24oIG5hbWUsIHZhbHVlICkge1xyXG5cdFx0cmV0dXJuIGFjY2VzcyggdGhpcywgZnVuY3Rpb24oIGVsZW0sIG5hbWUsIHZhbHVlICkge1xyXG5cdFx0XHR2YXIgc3R5bGVzLCBsZW4sXHJcblx0XHRcdFx0bWFwID0ge30sXHJcblx0XHRcdFx0aSA9IDA7XHJcblxyXG5cdFx0XHRpZiAoIGpRdWVyeS5pc0FycmF5KCBuYW1lICkgKSB7XHJcblx0XHRcdFx0c3R5bGVzID0gZ2V0U3R5bGVzKCBlbGVtICk7XHJcblx0XHRcdFx0bGVuID0gbmFtZS5sZW5ndGg7XHJcblxyXG5cdFx0XHRcdGZvciAoIDsgaSA8IGxlbjsgaSsrICkge1xyXG5cdFx0XHRcdFx0bWFwWyBuYW1lWyBpIF0gXSA9IGpRdWVyeS5jc3MoIGVsZW0sIG5hbWVbIGkgXSwgZmFsc2UsIHN0eWxlcyApO1xyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0cmV0dXJuIG1hcDtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0cmV0dXJuIHZhbHVlICE9PSB1bmRlZmluZWQgP1xyXG5cdFx0XHRcdGpRdWVyeS5zdHlsZSggZWxlbSwgbmFtZSwgdmFsdWUgKSA6XHJcblx0XHRcdFx0alF1ZXJ5LmNzcyggZWxlbSwgbmFtZSApO1xyXG5cdFx0fSwgbmFtZSwgdmFsdWUsIGFyZ3VtZW50cy5sZW5ndGggPiAxICk7XHJcblx0fSxcclxuXHRzaG93OiBmdW5jdGlvbigpIHtcclxuXHRcdHJldHVybiBzaG93SGlkZSggdGhpcywgdHJ1ZSApO1xyXG5cdH0sXHJcblx0aGlkZTogZnVuY3Rpb24oKSB7XHJcblx0XHRyZXR1cm4gc2hvd0hpZGUoIHRoaXMgKTtcclxuXHR9LFxyXG5cdHRvZ2dsZTogZnVuY3Rpb24oIHN0YXRlICkge1xyXG5cdFx0aWYgKCB0eXBlb2Ygc3RhdGUgPT09IFwiYm9vbGVhblwiICkge1xyXG5cdFx0XHRyZXR1cm4gc3RhdGUgPyB0aGlzLnNob3coKSA6IHRoaXMuaGlkZSgpO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKSB7XHJcblx0XHRcdGlmICggaXNIaWRkZW4oIHRoaXMgKSApIHtcclxuXHRcdFx0XHRqUXVlcnkoIHRoaXMgKS5zaG93KCk7XHJcblx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0alF1ZXJ5KCB0aGlzICkuaGlkZSgpO1xyXG5cdFx0XHR9XHJcblx0XHR9KTtcclxuXHR9XHJcbn0pO1xyXG5cclxuXHJcbmZ1bmN0aW9uIFR3ZWVuKCBlbGVtLCBvcHRpb25zLCBwcm9wLCBlbmQsIGVhc2luZyApIHtcclxuXHRyZXR1cm4gbmV3IFR3ZWVuLnByb3RvdHlwZS5pbml0KCBlbGVtLCBvcHRpb25zLCBwcm9wLCBlbmQsIGVhc2luZyApO1xyXG59XHJcbmpRdWVyeS5Ud2VlbiA9IFR3ZWVuO1xyXG5cclxuVHdlZW4ucHJvdG90eXBlID0ge1xyXG5cdGNvbnN0cnVjdG9yOiBUd2VlbixcclxuXHRpbml0OiBmdW5jdGlvbiggZWxlbSwgb3B0aW9ucywgcHJvcCwgZW5kLCBlYXNpbmcsIHVuaXQgKSB7XHJcblx0XHR0aGlzLmVsZW0gPSBlbGVtO1xyXG5cdFx0dGhpcy5wcm9wID0gcHJvcDtcclxuXHRcdHRoaXMuZWFzaW5nID0gZWFzaW5nIHx8IFwic3dpbmdcIjtcclxuXHRcdHRoaXMub3B0aW9ucyA9IG9wdGlvbnM7XHJcblx0XHR0aGlzLnN0YXJ0ID0gdGhpcy5ub3cgPSB0aGlzLmN1cigpO1xyXG5cdFx0dGhpcy5lbmQgPSBlbmQ7XHJcblx0XHR0aGlzLnVuaXQgPSB1bml0IHx8ICggalF1ZXJ5LmNzc051bWJlclsgcHJvcCBdID8gXCJcIiA6IFwicHhcIiApO1xyXG5cdH0sXHJcblx0Y3VyOiBmdW5jdGlvbigpIHtcclxuXHRcdHZhciBob29rcyA9IFR3ZWVuLnByb3BIb29rc1sgdGhpcy5wcm9wIF07XHJcblxyXG5cdFx0cmV0dXJuIGhvb2tzICYmIGhvb2tzLmdldCA/XHJcblx0XHRcdGhvb2tzLmdldCggdGhpcyApIDpcclxuXHRcdFx0VHdlZW4ucHJvcEhvb2tzLl9kZWZhdWx0LmdldCggdGhpcyApO1xyXG5cdH0sXHJcblx0cnVuOiBmdW5jdGlvbiggcGVyY2VudCApIHtcclxuXHRcdHZhciBlYXNlZCxcclxuXHRcdFx0aG9va3MgPSBUd2Vlbi5wcm9wSG9va3NbIHRoaXMucHJvcCBdO1xyXG5cclxuXHRcdGlmICggdGhpcy5vcHRpb25zLmR1cmF0aW9uICkge1xyXG5cdFx0XHR0aGlzLnBvcyA9IGVhc2VkID0galF1ZXJ5LmVhc2luZ1sgdGhpcy5lYXNpbmcgXShcclxuXHRcdFx0XHRwZXJjZW50LCB0aGlzLm9wdGlvbnMuZHVyYXRpb24gKiBwZXJjZW50LCAwLCAxLCB0aGlzLm9wdGlvbnMuZHVyYXRpb25cclxuXHRcdFx0KTtcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdHRoaXMucG9zID0gZWFzZWQgPSBwZXJjZW50O1xyXG5cdFx0fVxyXG5cdFx0dGhpcy5ub3cgPSAoIHRoaXMuZW5kIC0gdGhpcy5zdGFydCApICogZWFzZWQgKyB0aGlzLnN0YXJ0O1xyXG5cclxuXHRcdGlmICggdGhpcy5vcHRpb25zLnN0ZXAgKSB7XHJcblx0XHRcdHRoaXMub3B0aW9ucy5zdGVwLmNhbGwoIHRoaXMuZWxlbSwgdGhpcy5ub3csIHRoaXMgKTtcclxuXHRcdH1cclxuXHJcblx0XHRpZiAoIGhvb2tzICYmIGhvb2tzLnNldCApIHtcclxuXHRcdFx0aG9va3Muc2V0KCB0aGlzICk7XHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHRUd2Vlbi5wcm9wSG9va3MuX2RlZmF1bHQuc2V0KCB0aGlzICk7XHJcblx0XHR9XHJcblx0XHRyZXR1cm4gdGhpcztcclxuXHR9XHJcbn07XHJcblxyXG5Ud2Vlbi5wcm90b3R5cGUuaW5pdC5wcm90b3R5cGUgPSBUd2Vlbi5wcm90b3R5cGU7XHJcblxyXG5Ud2Vlbi5wcm9wSG9va3MgPSB7XHJcblx0X2RlZmF1bHQ6IHtcclxuXHRcdGdldDogZnVuY3Rpb24oIHR3ZWVuICkge1xyXG5cdFx0XHR2YXIgcmVzdWx0O1xyXG5cclxuXHRcdFx0aWYgKCB0d2Vlbi5lbGVtWyB0d2Vlbi5wcm9wIF0gIT0gbnVsbCAmJlxyXG5cdFx0XHRcdCghdHdlZW4uZWxlbS5zdHlsZSB8fCB0d2Vlbi5lbGVtLnN0eWxlWyB0d2Vlbi5wcm9wIF0gPT0gbnVsbCkgKSB7XHJcblx0XHRcdFx0cmV0dXJuIHR3ZWVuLmVsZW1bIHR3ZWVuLnByb3AgXTtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0Ly8gUGFzc2luZyBhbiBlbXB0eSBzdHJpbmcgYXMgYSAzcmQgcGFyYW1ldGVyIHRvIC5jc3Mgd2lsbCBhdXRvbWF0aWNhbGx5XHJcblx0XHRcdC8vIGF0dGVtcHQgYSBwYXJzZUZsb2F0IGFuZCBmYWxsYmFjayB0byBhIHN0cmluZyBpZiB0aGUgcGFyc2UgZmFpbHMuXHJcblx0XHRcdC8vIFNpbXBsZSB2YWx1ZXMgc3VjaCBhcyBcIjEwcHhcIiBhcmUgcGFyc2VkIHRvIEZsb2F0O1xyXG5cdFx0XHQvLyBjb21wbGV4IHZhbHVlcyBzdWNoIGFzIFwicm90YXRlKDFyYWQpXCIgYXJlIHJldHVybmVkIGFzLWlzLlxyXG5cdFx0XHRyZXN1bHQgPSBqUXVlcnkuY3NzKCB0d2Vlbi5lbGVtLCB0d2Vlbi5wcm9wLCBcIlwiICk7XHJcblx0XHRcdC8vIEVtcHR5IHN0cmluZ3MsIG51bGwsIHVuZGVmaW5lZCBhbmQgXCJhdXRvXCIgYXJlIGNvbnZlcnRlZCB0byAwLlxyXG5cdFx0XHRyZXR1cm4gIXJlc3VsdCB8fCByZXN1bHQgPT09IFwiYXV0b1wiID8gMCA6IHJlc3VsdDtcclxuXHRcdH0sXHJcblx0XHRzZXQ6IGZ1bmN0aW9uKCB0d2VlbiApIHtcclxuXHRcdFx0Ly8gVXNlIHN0ZXAgaG9vayBmb3IgYmFjayBjb21wYXQuXHJcblx0XHRcdC8vIFVzZSBjc3NIb29rIGlmIGl0cyB0aGVyZS5cclxuXHRcdFx0Ly8gVXNlIC5zdHlsZSBpZiBhdmFpbGFibGUgYW5kIHVzZSBwbGFpbiBwcm9wZXJ0aWVzIHdoZXJlIGF2YWlsYWJsZS5cclxuXHRcdFx0aWYgKCBqUXVlcnkuZnguc3RlcFsgdHdlZW4ucHJvcCBdICkge1xyXG5cdFx0XHRcdGpRdWVyeS5meC5zdGVwWyB0d2Vlbi5wcm9wIF0oIHR3ZWVuICk7XHJcblx0XHRcdH0gZWxzZSBpZiAoIHR3ZWVuLmVsZW0uc3R5bGUgJiYgKCB0d2Vlbi5lbGVtLnN0eWxlWyBqUXVlcnkuY3NzUHJvcHNbIHR3ZWVuLnByb3AgXSBdICE9IG51bGwgfHwgalF1ZXJ5LmNzc0hvb2tzWyB0d2Vlbi5wcm9wIF0gKSApIHtcclxuXHRcdFx0XHRqUXVlcnkuc3R5bGUoIHR3ZWVuLmVsZW0sIHR3ZWVuLnByb3AsIHR3ZWVuLm5vdyArIHR3ZWVuLnVuaXQgKTtcclxuXHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHR0d2Vlbi5lbGVtWyB0d2Vlbi5wcm9wIF0gPSB0d2Vlbi5ub3c7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHR9XHJcbn07XHJcblxyXG4vLyBTdXBwb3J0OiBJRTlcclxuLy8gUGFuaWMgYmFzZWQgYXBwcm9hY2ggdG8gc2V0dGluZyB0aGluZ3Mgb24gZGlzY29ubmVjdGVkIG5vZGVzXHJcblR3ZWVuLnByb3BIb29rcy5zY3JvbGxUb3AgPSBUd2Vlbi5wcm9wSG9va3Muc2Nyb2xsTGVmdCA9IHtcclxuXHRzZXQ6IGZ1bmN0aW9uKCB0d2VlbiApIHtcclxuXHRcdGlmICggdHdlZW4uZWxlbS5ub2RlVHlwZSAmJiB0d2Vlbi5lbGVtLnBhcmVudE5vZGUgKSB7XHJcblx0XHRcdHR3ZWVuLmVsZW1bIHR3ZWVuLnByb3AgXSA9IHR3ZWVuLm5vdztcclxuXHRcdH1cclxuXHR9XHJcbn07XHJcblxyXG5qUXVlcnkuZWFzaW5nID0ge1xyXG5cdGxpbmVhcjogZnVuY3Rpb24oIHAgKSB7XHJcblx0XHRyZXR1cm4gcDtcclxuXHR9LFxyXG5cdHN3aW5nOiBmdW5jdGlvbiggcCApIHtcclxuXHRcdHJldHVybiAwLjUgLSBNYXRoLmNvcyggcCAqIE1hdGguUEkgKSAvIDI7XHJcblx0fVxyXG59O1xyXG5cclxualF1ZXJ5LmZ4ID0gVHdlZW4ucHJvdG90eXBlLmluaXQ7XHJcblxyXG4vLyBCYWNrIENvbXBhdCA8MS44IGV4dGVuc2lvbiBwb2ludFxyXG5qUXVlcnkuZnguc3RlcCA9IHt9O1xyXG5cclxuXHJcblxyXG5cclxudmFyXHJcblx0ZnhOb3csIHRpbWVySWQsXHJcblx0cmZ4dHlwZXMgPSAvXig/OnRvZ2dsZXxzaG93fGhpZGUpJC8sXHJcblx0cmZ4bnVtID0gbmV3IFJlZ0V4cCggXCJeKD86KFsrLV0pPXwpKFwiICsgcG51bSArIFwiKShbYS16JV0qKSRcIiwgXCJpXCIgKSxcclxuXHRycnVuID0gL3F1ZXVlSG9va3MkLyxcclxuXHRhbmltYXRpb25QcmVmaWx0ZXJzID0gWyBkZWZhdWx0UHJlZmlsdGVyIF0sXHJcblx0dHdlZW5lcnMgPSB7XHJcblx0XHRcIipcIjogWyBmdW5jdGlvbiggcHJvcCwgdmFsdWUgKSB7XHJcblx0XHRcdHZhciB0d2VlbiA9IHRoaXMuY3JlYXRlVHdlZW4oIHByb3AsIHZhbHVlICksXHJcblx0XHRcdFx0dGFyZ2V0ID0gdHdlZW4uY3VyKCksXHJcblx0XHRcdFx0cGFydHMgPSByZnhudW0uZXhlYyggdmFsdWUgKSxcclxuXHRcdFx0XHR1bml0ID0gcGFydHMgJiYgcGFydHNbIDMgXSB8fCAoIGpRdWVyeS5jc3NOdW1iZXJbIHByb3AgXSA/IFwiXCIgOiBcInB4XCIgKSxcclxuXHJcblx0XHRcdFx0Ly8gU3RhcnRpbmcgdmFsdWUgY29tcHV0YXRpb24gaXMgcmVxdWlyZWQgZm9yIHBvdGVudGlhbCB1bml0IG1pc21hdGNoZXNcclxuXHRcdFx0XHRzdGFydCA9ICggalF1ZXJ5LmNzc051bWJlclsgcHJvcCBdIHx8IHVuaXQgIT09IFwicHhcIiAmJiArdGFyZ2V0ICkgJiZcclxuXHRcdFx0XHRcdHJmeG51bS5leGVjKCBqUXVlcnkuY3NzKCB0d2Vlbi5lbGVtLCBwcm9wICkgKSxcclxuXHRcdFx0XHRzY2FsZSA9IDEsXHJcblx0XHRcdFx0bWF4SXRlcmF0aW9ucyA9IDIwO1xyXG5cclxuXHRcdFx0aWYgKCBzdGFydCAmJiBzdGFydFsgMyBdICE9PSB1bml0ICkge1xyXG5cdFx0XHRcdC8vIFRydXN0IHVuaXRzIHJlcG9ydGVkIGJ5IGpRdWVyeS5jc3NcclxuXHRcdFx0XHR1bml0ID0gdW5pdCB8fCBzdGFydFsgMyBdO1xyXG5cclxuXHRcdFx0XHQvLyBNYWtlIHN1cmUgd2UgdXBkYXRlIHRoZSB0d2VlbiBwcm9wZXJ0aWVzIGxhdGVyIG9uXHJcblx0XHRcdFx0cGFydHMgPSBwYXJ0cyB8fCBbXTtcclxuXHJcblx0XHRcdFx0Ly8gSXRlcmF0aXZlbHkgYXBwcm94aW1hdGUgZnJvbSBhIG5vbnplcm8gc3RhcnRpbmcgcG9pbnRcclxuXHRcdFx0XHRzdGFydCA9ICt0YXJnZXQgfHwgMTtcclxuXHJcblx0XHRcdFx0ZG8ge1xyXG5cdFx0XHRcdFx0Ly8gSWYgcHJldmlvdXMgaXRlcmF0aW9uIHplcm9lZCBvdXQsIGRvdWJsZSB1bnRpbCB3ZSBnZXQgKnNvbWV0aGluZyouXHJcblx0XHRcdFx0XHQvLyBVc2Ugc3RyaW5nIGZvciBkb3VibGluZyBzbyB3ZSBkb24ndCBhY2NpZGVudGFsbHkgc2VlIHNjYWxlIGFzIHVuY2hhbmdlZCBiZWxvd1xyXG5cdFx0XHRcdFx0c2NhbGUgPSBzY2FsZSB8fCBcIi41XCI7XHJcblxyXG5cdFx0XHRcdFx0Ly8gQWRqdXN0IGFuZCBhcHBseVxyXG5cdFx0XHRcdFx0c3RhcnQgPSBzdGFydCAvIHNjYWxlO1xyXG5cdFx0XHRcdFx0alF1ZXJ5LnN0eWxlKCB0d2Vlbi5lbGVtLCBwcm9wLCBzdGFydCArIHVuaXQgKTtcclxuXHJcblx0XHRcdFx0Ly8gVXBkYXRlIHNjYWxlLCB0b2xlcmF0aW5nIHplcm8gb3IgTmFOIGZyb20gdHdlZW4uY3VyKCksXHJcblx0XHRcdFx0Ly8gYnJlYWsgdGhlIGxvb3AgaWYgc2NhbGUgaXMgdW5jaGFuZ2VkIG9yIHBlcmZlY3QsIG9yIGlmIHdlJ3ZlIGp1c3QgaGFkIGVub3VnaFxyXG5cdFx0XHRcdH0gd2hpbGUgKCBzY2FsZSAhPT0gKHNjYWxlID0gdHdlZW4uY3VyKCkgLyB0YXJnZXQpICYmIHNjYWxlICE9PSAxICYmIC0tbWF4SXRlcmF0aW9ucyApO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHQvLyBVcGRhdGUgdHdlZW4gcHJvcGVydGllc1xyXG5cdFx0XHRpZiAoIHBhcnRzICkge1xyXG5cdFx0XHRcdHN0YXJ0ID0gdHdlZW4uc3RhcnQgPSArc3RhcnQgfHwgK3RhcmdldCB8fCAwO1xyXG5cdFx0XHRcdHR3ZWVuLnVuaXQgPSB1bml0O1xyXG5cdFx0XHRcdC8vIElmIGEgKz0vLT0gdG9rZW4gd2FzIHByb3ZpZGVkLCB3ZSdyZSBkb2luZyBhIHJlbGF0aXZlIGFuaW1hdGlvblxyXG5cdFx0XHRcdHR3ZWVuLmVuZCA9IHBhcnRzWyAxIF0gP1xyXG5cdFx0XHRcdFx0c3RhcnQgKyAoIHBhcnRzWyAxIF0gKyAxICkgKiBwYXJ0c1sgMiBdIDpcclxuXHRcdFx0XHRcdCtwYXJ0c1sgMiBdO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRyZXR1cm4gdHdlZW47XHJcblx0XHR9IF1cclxuXHR9O1xyXG5cclxuLy8gQW5pbWF0aW9ucyBjcmVhdGVkIHN5bmNocm9ub3VzbHkgd2lsbCBydW4gc3luY2hyb25vdXNseVxyXG5mdW5jdGlvbiBjcmVhdGVGeE5vdygpIHtcclxuXHRzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xyXG5cdFx0ZnhOb3cgPSB1bmRlZmluZWQ7XHJcblx0fSk7XHJcblx0cmV0dXJuICggZnhOb3cgPSBqUXVlcnkubm93KCkgKTtcclxufVxyXG5cclxuLy8gR2VuZXJhdGUgcGFyYW1ldGVycyB0byBjcmVhdGUgYSBzdGFuZGFyZCBhbmltYXRpb25cclxuZnVuY3Rpb24gZ2VuRngoIHR5cGUsIGluY2x1ZGVXaWR0aCApIHtcclxuXHR2YXIgd2hpY2gsXHJcblx0XHRpID0gMCxcclxuXHRcdGF0dHJzID0geyBoZWlnaHQ6IHR5cGUgfTtcclxuXHJcblx0Ly8gSWYgd2UgaW5jbHVkZSB3aWR0aCwgc3RlcCB2YWx1ZSBpcyAxIHRvIGRvIGFsbCBjc3NFeHBhbmQgdmFsdWVzLFxyXG5cdC8vIG90aGVyd2lzZSBzdGVwIHZhbHVlIGlzIDIgdG8gc2tpcCBvdmVyIExlZnQgYW5kIFJpZ2h0XHJcblx0aW5jbHVkZVdpZHRoID0gaW5jbHVkZVdpZHRoID8gMSA6IDA7XHJcblx0Zm9yICggOyBpIDwgNCA7IGkgKz0gMiAtIGluY2x1ZGVXaWR0aCApIHtcclxuXHRcdHdoaWNoID0gY3NzRXhwYW5kWyBpIF07XHJcblx0XHRhdHRyc1sgXCJtYXJnaW5cIiArIHdoaWNoIF0gPSBhdHRyc1sgXCJwYWRkaW5nXCIgKyB3aGljaCBdID0gdHlwZTtcclxuXHR9XHJcblxyXG5cdGlmICggaW5jbHVkZVdpZHRoICkge1xyXG5cdFx0YXR0cnMub3BhY2l0eSA9IGF0dHJzLndpZHRoID0gdHlwZTtcclxuXHR9XHJcblxyXG5cdHJldHVybiBhdHRycztcclxufVxyXG5cclxuZnVuY3Rpb24gY3JlYXRlVHdlZW4oIHZhbHVlLCBwcm9wLCBhbmltYXRpb24gKSB7XHJcblx0dmFyIHR3ZWVuLFxyXG5cdFx0Y29sbGVjdGlvbiA9ICggdHdlZW5lcnNbIHByb3AgXSB8fCBbXSApLmNvbmNhdCggdHdlZW5lcnNbIFwiKlwiIF0gKSxcclxuXHRcdGluZGV4ID0gMCxcclxuXHRcdGxlbmd0aCA9IGNvbGxlY3Rpb24ubGVuZ3RoO1xyXG5cdGZvciAoIDsgaW5kZXggPCBsZW5ndGg7IGluZGV4KysgKSB7XHJcblx0XHRpZiAoICh0d2VlbiA9IGNvbGxlY3Rpb25bIGluZGV4IF0uY2FsbCggYW5pbWF0aW9uLCBwcm9wLCB2YWx1ZSApKSApIHtcclxuXHJcblx0XHRcdC8vIFdlJ3JlIGRvbmUgd2l0aCB0aGlzIHByb3BlcnR5XHJcblx0XHRcdHJldHVybiB0d2VlbjtcclxuXHRcdH1cclxuXHR9XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGRlZmF1bHRQcmVmaWx0ZXIoIGVsZW0sIHByb3BzLCBvcHRzICkge1xyXG5cdC8qIGpzaGludCB2YWxpZHRoaXM6IHRydWUgKi9cclxuXHR2YXIgcHJvcCwgdmFsdWUsIHRvZ2dsZSwgdHdlZW4sIGhvb2tzLCBvbGRmaXJlLCBkaXNwbGF5LCBjaGVja0Rpc3BsYXksXHJcblx0XHRhbmltID0gdGhpcyxcclxuXHRcdG9yaWcgPSB7fSxcclxuXHRcdHN0eWxlID0gZWxlbS5zdHlsZSxcclxuXHRcdGhpZGRlbiA9IGVsZW0ubm9kZVR5cGUgJiYgaXNIaWRkZW4oIGVsZW0gKSxcclxuXHRcdGRhdGFTaG93ID0gZGF0YV9wcml2LmdldCggZWxlbSwgXCJmeHNob3dcIiApO1xyXG5cclxuXHQvLyBIYW5kbGUgcXVldWU6IGZhbHNlIHByb21pc2VzXHJcblx0aWYgKCAhb3B0cy5xdWV1ZSApIHtcclxuXHRcdGhvb2tzID0galF1ZXJ5Ll9xdWV1ZUhvb2tzKCBlbGVtLCBcImZ4XCIgKTtcclxuXHRcdGlmICggaG9va3MudW5xdWV1ZWQgPT0gbnVsbCApIHtcclxuXHRcdFx0aG9va3MudW5xdWV1ZWQgPSAwO1xyXG5cdFx0XHRvbGRmaXJlID0gaG9va3MuZW1wdHkuZmlyZTtcclxuXHRcdFx0aG9va3MuZW1wdHkuZmlyZSA9IGZ1bmN0aW9uKCkge1xyXG5cdFx0XHRcdGlmICggIWhvb2tzLnVucXVldWVkICkge1xyXG5cdFx0XHRcdFx0b2xkZmlyZSgpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fTtcclxuXHRcdH1cclxuXHRcdGhvb2tzLnVucXVldWVkKys7XHJcblxyXG5cdFx0YW5pbS5hbHdheXMoZnVuY3Rpb24oKSB7XHJcblx0XHRcdC8vIEVuc3VyZSB0aGUgY29tcGxldGUgaGFuZGxlciBpcyBjYWxsZWQgYmVmb3JlIHRoaXMgY29tcGxldGVzXHJcblx0XHRcdGFuaW0uYWx3YXlzKGZ1bmN0aW9uKCkge1xyXG5cdFx0XHRcdGhvb2tzLnVucXVldWVkLS07XHJcblx0XHRcdFx0aWYgKCAhalF1ZXJ5LnF1ZXVlKCBlbGVtLCBcImZ4XCIgKS5sZW5ndGggKSB7XHJcblx0XHRcdFx0XHRob29rcy5lbXB0eS5maXJlKCk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9KTtcclxuXHRcdH0pO1xyXG5cdH1cclxuXHJcblx0Ly8gSGVpZ2h0L3dpZHRoIG92ZXJmbG93IHBhc3NcclxuXHRpZiAoIGVsZW0ubm9kZVR5cGUgPT09IDEgJiYgKCBcImhlaWdodFwiIGluIHByb3BzIHx8IFwid2lkdGhcIiBpbiBwcm9wcyApICkge1xyXG5cdFx0Ly8gTWFrZSBzdXJlIHRoYXQgbm90aGluZyBzbmVha3Mgb3V0XHJcblx0XHQvLyBSZWNvcmQgYWxsIDMgb3ZlcmZsb3cgYXR0cmlidXRlcyBiZWNhdXNlIElFOS0xMCBkbyBub3RcclxuXHRcdC8vIGNoYW5nZSB0aGUgb3ZlcmZsb3cgYXR0cmlidXRlIHdoZW4gb3ZlcmZsb3dYIGFuZFxyXG5cdFx0Ly8gb3ZlcmZsb3dZIGFyZSBzZXQgdG8gdGhlIHNhbWUgdmFsdWVcclxuXHRcdG9wdHMub3ZlcmZsb3cgPSBbIHN0eWxlLm92ZXJmbG93LCBzdHlsZS5vdmVyZmxvd1gsIHN0eWxlLm92ZXJmbG93WSBdO1xyXG5cclxuXHRcdC8vIFNldCBkaXNwbGF5IHByb3BlcnR5IHRvIGlubGluZS1ibG9jayBmb3IgaGVpZ2h0L3dpZHRoXHJcblx0XHQvLyBhbmltYXRpb25zIG9uIGlubGluZSBlbGVtZW50cyB0aGF0IGFyZSBoYXZpbmcgd2lkdGgvaGVpZ2h0IGFuaW1hdGVkXHJcblx0XHRkaXNwbGF5ID0galF1ZXJ5LmNzcyggZWxlbSwgXCJkaXNwbGF5XCIgKTtcclxuXHJcblx0XHQvLyBUZXN0IGRlZmF1bHQgZGlzcGxheSBpZiBkaXNwbGF5IGlzIGN1cnJlbnRseSBcIm5vbmVcIlxyXG5cdFx0Y2hlY2tEaXNwbGF5ID0gZGlzcGxheSA9PT0gXCJub25lXCIgP1xyXG5cdFx0XHRkYXRhX3ByaXYuZ2V0KCBlbGVtLCBcIm9sZGRpc3BsYXlcIiApIHx8IGRlZmF1bHREaXNwbGF5KCBlbGVtLm5vZGVOYW1lICkgOiBkaXNwbGF5O1xyXG5cclxuXHRcdGlmICggY2hlY2tEaXNwbGF5ID09PSBcImlubGluZVwiICYmIGpRdWVyeS5jc3MoIGVsZW0sIFwiZmxvYXRcIiApID09PSBcIm5vbmVcIiApIHtcclxuXHRcdFx0c3R5bGUuZGlzcGxheSA9IFwiaW5saW5lLWJsb2NrXCI7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRpZiAoIG9wdHMub3ZlcmZsb3cgKSB7XHJcblx0XHRzdHlsZS5vdmVyZmxvdyA9IFwiaGlkZGVuXCI7XHJcblx0XHRhbmltLmFsd2F5cyhmdW5jdGlvbigpIHtcclxuXHRcdFx0c3R5bGUub3ZlcmZsb3cgPSBvcHRzLm92ZXJmbG93WyAwIF07XHJcblx0XHRcdHN0eWxlLm92ZXJmbG93WCA9IG9wdHMub3ZlcmZsb3dbIDEgXTtcclxuXHRcdFx0c3R5bGUub3ZlcmZsb3dZID0gb3B0cy5vdmVyZmxvd1sgMiBdO1xyXG5cdFx0fSk7XHJcblx0fVxyXG5cclxuXHQvLyBzaG93L2hpZGUgcGFzc1xyXG5cdGZvciAoIHByb3AgaW4gcHJvcHMgKSB7XHJcblx0XHR2YWx1ZSA9IHByb3BzWyBwcm9wIF07XHJcblx0XHRpZiAoIHJmeHR5cGVzLmV4ZWMoIHZhbHVlICkgKSB7XHJcblx0XHRcdGRlbGV0ZSBwcm9wc1sgcHJvcCBdO1xyXG5cdFx0XHR0b2dnbGUgPSB0b2dnbGUgfHwgdmFsdWUgPT09IFwidG9nZ2xlXCI7XHJcblx0XHRcdGlmICggdmFsdWUgPT09ICggaGlkZGVuID8gXCJoaWRlXCIgOiBcInNob3dcIiApICkge1xyXG5cclxuXHRcdFx0XHQvLyBJZiB0aGVyZSBpcyBkYXRhU2hvdyBsZWZ0IG92ZXIgZnJvbSBhIHN0b3BwZWQgaGlkZSBvciBzaG93IGFuZCB3ZSBhcmUgZ29pbmcgdG8gcHJvY2VlZCB3aXRoIHNob3csIHdlIHNob3VsZCBwcmV0ZW5kIHRvIGJlIGhpZGRlblxyXG5cdFx0XHRcdGlmICggdmFsdWUgPT09IFwic2hvd1wiICYmIGRhdGFTaG93ICYmIGRhdGFTaG93WyBwcm9wIF0gIT09IHVuZGVmaW5lZCApIHtcclxuXHRcdFx0XHRcdGhpZGRlbiA9IHRydWU7XHJcblx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdGNvbnRpbnVlO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0XHRvcmlnWyBwcm9wIF0gPSBkYXRhU2hvdyAmJiBkYXRhU2hvd1sgcHJvcCBdIHx8IGpRdWVyeS5zdHlsZSggZWxlbSwgcHJvcCApO1xyXG5cclxuXHRcdC8vIEFueSBub24tZnggdmFsdWUgc3RvcHMgdXMgZnJvbSByZXN0b3JpbmcgdGhlIG9yaWdpbmFsIGRpc3BsYXkgdmFsdWVcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdGRpc3BsYXkgPSB1bmRlZmluZWQ7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRpZiAoICFqUXVlcnkuaXNFbXB0eU9iamVjdCggb3JpZyApICkge1xyXG5cdFx0aWYgKCBkYXRhU2hvdyApIHtcclxuXHRcdFx0aWYgKCBcImhpZGRlblwiIGluIGRhdGFTaG93ICkge1xyXG5cdFx0XHRcdGhpZGRlbiA9IGRhdGFTaG93LmhpZGRlbjtcclxuXHRcdFx0fVxyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0ZGF0YVNob3cgPSBkYXRhX3ByaXYuYWNjZXNzKCBlbGVtLCBcImZ4c2hvd1wiLCB7fSApO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8vIFN0b3JlIHN0YXRlIGlmIGl0cyB0b2dnbGUgLSBlbmFibGVzIC5zdG9wKCkudG9nZ2xlKCkgdG8gXCJyZXZlcnNlXCJcclxuXHRcdGlmICggdG9nZ2xlICkge1xyXG5cdFx0XHRkYXRhU2hvdy5oaWRkZW4gPSAhaGlkZGVuO1xyXG5cdFx0fVxyXG5cdFx0aWYgKCBoaWRkZW4gKSB7XHJcblx0XHRcdGpRdWVyeSggZWxlbSApLnNob3coKTtcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdGFuaW0uZG9uZShmdW5jdGlvbigpIHtcclxuXHRcdFx0XHRqUXVlcnkoIGVsZW0gKS5oaWRlKCk7XHJcblx0XHRcdH0pO1xyXG5cdFx0fVxyXG5cdFx0YW5pbS5kb25lKGZ1bmN0aW9uKCkge1xyXG5cdFx0XHR2YXIgcHJvcDtcclxuXHJcblx0XHRcdGRhdGFfcHJpdi5yZW1vdmUoIGVsZW0sIFwiZnhzaG93XCIgKTtcclxuXHRcdFx0Zm9yICggcHJvcCBpbiBvcmlnICkge1xyXG5cdFx0XHRcdGpRdWVyeS5zdHlsZSggZWxlbSwgcHJvcCwgb3JpZ1sgcHJvcCBdICk7XHJcblx0XHRcdH1cclxuXHRcdH0pO1xyXG5cdFx0Zm9yICggcHJvcCBpbiBvcmlnICkge1xyXG5cdFx0XHR0d2VlbiA9IGNyZWF0ZVR3ZWVuKCBoaWRkZW4gPyBkYXRhU2hvd1sgcHJvcCBdIDogMCwgcHJvcCwgYW5pbSApO1xyXG5cclxuXHRcdFx0aWYgKCAhKCBwcm9wIGluIGRhdGFTaG93ICkgKSB7XHJcblx0XHRcdFx0ZGF0YVNob3dbIHByb3AgXSA9IHR3ZWVuLnN0YXJ0O1xyXG5cdFx0XHRcdGlmICggaGlkZGVuICkge1xyXG5cdFx0XHRcdFx0dHdlZW4uZW5kID0gdHdlZW4uc3RhcnQ7XHJcblx0XHRcdFx0XHR0d2Vlbi5zdGFydCA9IHByb3AgPT09IFwid2lkdGhcIiB8fCBwcm9wID09PSBcImhlaWdodFwiID8gMSA6IDA7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHR9XHJcblxyXG5cdC8vIElmIHRoaXMgaXMgYSBub29wIGxpa2UgLmhpZGUoKS5oaWRlKCksIHJlc3RvcmUgYW4gb3ZlcndyaXR0ZW4gZGlzcGxheSB2YWx1ZVxyXG5cdH0gZWxzZSBpZiAoIChkaXNwbGF5ID09PSBcIm5vbmVcIiA/IGRlZmF1bHREaXNwbGF5KCBlbGVtLm5vZGVOYW1lICkgOiBkaXNwbGF5KSA9PT0gXCJpbmxpbmVcIiApIHtcclxuXHRcdHN0eWxlLmRpc3BsYXkgPSBkaXNwbGF5O1xyXG5cdH1cclxufVxyXG5cclxuZnVuY3Rpb24gcHJvcEZpbHRlciggcHJvcHMsIHNwZWNpYWxFYXNpbmcgKSB7XHJcblx0dmFyIGluZGV4LCBuYW1lLCBlYXNpbmcsIHZhbHVlLCBob29rcztcclxuXHJcblx0Ly8gY2FtZWxDYXNlLCBzcGVjaWFsRWFzaW5nIGFuZCBleHBhbmQgY3NzSG9vayBwYXNzXHJcblx0Zm9yICggaW5kZXggaW4gcHJvcHMgKSB7XHJcblx0XHRuYW1lID0galF1ZXJ5LmNhbWVsQ2FzZSggaW5kZXggKTtcclxuXHRcdGVhc2luZyA9IHNwZWNpYWxFYXNpbmdbIG5hbWUgXTtcclxuXHRcdHZhbHVlID0gcHJvcHNbIGluZGV4IF07XHJcblx0XHRpZiAoIGpRdWVyeS5pc0FycmF5KCB2YWx1ZSApICkge1xyXG5cdFx0XHRlYXNpbmcgPSB2YWx1ZVsgMSBdO1xyXG5cdFx0XHR2YWx1ZSA9IHByb3BzWyBpbmRleCBdID0gdmFsdWVbIDAgXTtcclxuXHRcdH1cclxuXHJcblx0XHRpZiAoIGluZGV4ICE9PSBuYW1lICkge1xyXG5cdFx0XHRwcm9wc1sgbmFtZSBdID0gdmFsdWU7XHJcblx0XHRcdGRlbGV0ZSBwcm9wc1sgaW5kZXggXTtcclxuXHRcdH1cclxuXHJcblx0XHRob29rcyA9IGpRdWVyeS5jc3NIb29rc1sgbmFtZSBdO1xyXG5cdFx0aWYgKCBob29rcyAmJiBcImV4cGFuZFwiIGluIGhvb2tzICkge1xyXG5cdFx0XHR2YWx1ZSA9IGhvb2tzLmV4cGFuZCggdmFsdWUgKTtcclxuXHRcdFx0ZGVsZXRlIHByb3BzWyBuYW1lIF07XHJcblxyXG5cdFx0XHQvLyBOb3QgcXVpdGUgJC5leHRlbmQsIHRoaXMgd29uJ3Qgb3ZlcndyaXRlIGV4aXN0aW5nIGtleXMuXHJcblx0XHRcdC8vIFJldXNpbmcgJ2luZGV4JyBiZWNhdXNlIHdlIGhhdmUgdGhlIGNvcnJlY3QgXCJuYW1lXCJcclxuXHRcdFx0Zm9yICggaW5kZXggaW4gdmFsdWUgKSB7XHJcblx0XHRcdFx0aWYgKCAhKCBpbmRleCBpbiBwcm9wcyApICkge1xyXG5cdFx0XHRcdFx0cHJvcHNbIGluZGV4IF0gPSB2YWx1ZVsgaW5kZXggXTtcclxuXHRcdFx0XHRcdHNwZWNpYWxFYXNpbmdbIGluZGV4IF0gPSBlYXNpbmc7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHRzcGVjaWFsRWFzaW5nWyBuYW1lIF0gPSBlYXNpbmc7XHJcblx0XHR9XHJcblx0fVxyXG59XHJcblxyXG5mdW5jdGlvbiBBbmltYXRpb24oIGVsZW0sIHByb3BlcnRpZXMsIG9wdGlvbnMgKSB7XHJcblx0dmFyIHJlc3VsdCxcclxuXHRcdHN0b3BwZWQsXHJcblx0XHRpbmRleCA9IDAsXHJcblx0XHRsZW5ndGggPSBhbmltYXRpb25QcmVmaWx0ZXJzLmxlbmd0aCxcclxuXHRcdGRlZmVycmVkID0galF1ZXJ5LkRlZmVycmVkKCkuYWx3YXlzKCBmdW5jdGlvbigpIHtcclxuXHRcdFx0Ly8gRG9uJ3QgbWF0Y2ggZWxlbSBpbiB0aGUgOmFuaW1hdGVkIHNlbGVjdG9yXHJcblx0XHRcdGRlbGV0ZSB0aWNrLmVsZW07XHJcblx0XHR9KSxcclxuXHRcdHRpY2sgPSBmdW5jdGlvbigpIHtcclxuXHRcdFx0aWYgKCBzdG9wcGVkICkge1xyXG5cdFx0XHRcdHJldHVybiBmYWxzZTtcclxuXHRcdFx0fVxyXG5cdFx0XHR2YXIgY3VycmVudFRpbWUgPSBmeE5vdyB8fCBjcmVhdGVGeE5vdygpLFxyXG5cdFx0XHRcdHJlbWFpbmluZyA9IE1hdGgubWF4KCAwLCBhbmltYXRpb24uc3RhcnRUaW1lICsgYW5pbWF0aW9uLmR1cmF0aW9uIC0gY3VycmVudFRpbWUgKSxcclxuXHRcdFx0XHQvLyBTdXBwb3J0OiBBbmRyb2lkIDIuM1xyXG5cdFx0XHRcdC8vIEFyY2hhaWMgY3Jhc2ggYnVnIHdvbid0IGFsbG93IHVzIHRvIHVzZSBgMSAtICggMC41IHx8IDAgKWAgKCMxMjQ5NylcclxuXHRcdFx0XHR0ZW1wID0gcmVtYWluaW5nIC8gYW5pbWF0aW9uLmR1cmF0aW9uIHx8IDAsXHJcblx0XHRcdFx0cGVyY2VudCA9IDEgLSB0ZW1wLFxyXG5cdFx0XHRcdGluZGV4ID0gMCxcclxuXHRcdFx0XHRsZW5ndGggPSBhbmltYXRpb24udHdlZW5zLmxlbmd0aDtcclxuXHJcblx0XHRcdGZvciAoIDsgaW5kZXggPCBsZW5ndGggOyBpbmRleCsrICkge1xyXG5cdFx0XHRcdGFuaW1hdGlvbi50d2VlbnNbIGluZGV4IF0ucnVuKCBwZXJjZW50ICk7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdGRlZmVycmVkLm5vdGlmeVdpdGgoIGVsZW0sIFsgYW5pbWF0aW9uLCBwZXJjZW50LCByZW1haW5pbmcgXSk7XHJcblxyXG5cdFx0XHRpZiAoIHBlcmNlbnQgPCAxICYmIGxlbmd0aCApIHtcclxuXHRcdFx0XHRyZXR1cm4gcmVtYWluaW5nO1xyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdGRlZmVycmVkLnJlc29sdmVXaXRoKCBlbGVtLCBbIGFuaW1hdGlvbiBdICk7XHJcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cdFx0XHR9XHJcblx0XHR9LFxyXG5cdFx0YW5pbWF0aW9uID0gZGVmZXJyZWQucHJvbWlzZSh7XHJcblx0XHRcdGVsZW06IGVsZW0sXHJcblx0XHRcdHByb3BzOiBqUXVlcnkuZXh0ZW5kKCB7fSwgcHJvcGVydGllcyApLFxyXG5cdFx0XHRvcHRzOiBqUXVlcnkuZXh0ZW5kKCB0cnVlLCB7IHNwZWNpYWxFYXNpbmc6IHt9IH0sIG9wdGlvbnMgKSxcclxuXHRcdFx0b3JpZ2luYWxQcm9wZXJ0aWVzOiBwcm9wZXJ0aWVzLFxyXG5cdFx0XHRvcmlnaW5hbE9wdGlvbnM6IG9wdGlvbnMsXHJcblx0XHRcdHN0YXJ0VGltZTogZnhOb3cgfHwgY3JlYXRlRnhOb3coKSxcclxuXHRcdFx0ZHVyYXRpb246IG9wdGlvbnMuZHVyYXRpb24sXHJcblx0XHRcdHR3ZWVuczogW10sXHJcblx0XHRcdGNyZWF0ZVR3ZWVuOiBmdW5jdGlvbiggcHJvcCwgZW5kICkge1xyXG5cdFx0XHRcdHZhciB0d2VlbiA9IGpRdWVyeS5Ud2VlbiggZWxlbSwgYW5pbWF0aW9uLm9wdHMsIHByb3AsIGVuZCxcclxuXHRcdFx0XHRcdFx0YW5pbWF0aW9uLm9wdHMuc3BlY2lhbEVhc2luZ1sgcHJvcCBdIHx8IGFuaW1hdGlvbi5vcHRzLmVhc2luZyApO1xyXG5cdFx0XHRcdGFuaW1hdGlvbi50d2VlbnMucHVzaCggdHdlZW4gKTtcclxuXHRcdFx0XHRyZXR1cm4gdHdlZW47XHJcblx0XHRcdH0sXHJcblx0XHRcdHN0b3A6IGZ1bmN0aW9uKCBnb3RvRW5kICkge1xyXG5cdFx0XHRcdHZhciBpbmRleCA9IDAsXHJcblx0XHRcdFx0XHQvLyBJZiB3ZSBhcmUgZ29pbmcgdG8gdGhlIGVuZCwgd2Ugd2FudCB0byBydW4gYWxsIHRoZSB0d2VlbnNcclxuXHRcdFx0XHRcdC8vIG90aGVyd2lzZSB3ZSBza2lwIHRoaXMgcGFydFxyXG5cdFx0XHRcdFx0bGVuZ3RoID0gZ290b0VuZCA/IGFuaW1hdGlvbi50d2VlbnMubGVuZ3RoIDogMDtcclxuXHRcdFx0XHRpZiAoIHN0b3BwZWQgKSB7XHJcblx0XHRcdFx0XHRyZXR1cm4gdGhpcztcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0c3RvcHBlZCA9IHRydWU7XHJcblx0XHRcdFx0Zm9yICggOyBpbmRleCA8IGxlbmd0aCA7IGluZGV4KysgKSB7XHJcblx0XHRcdFx0XHRhbmltYXRpb24udHdlZW5zWyBpbmRleCBdLnJ1biggMSApO1xyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0Ly8gUmVzb2x2ZSB3aGVuIHdlIHBsYXllZCB0aGUgbGFzdCBmcmFtZTsgb3RoZXJ3aXNlLCByZWplY3RcclxuXHRcdFx0XHRpZiAoIGdvdG9FbmQgKSB7XHJcblx0XHRcdFx0XHRkZWZlcnJlZC5yZXNvbHZlV2l0aCggZWxlbSwgWyBhbmltYXRpb24sIGdvdG9FbmQgXSApO1xyXG5cdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRkZWZlcnJlZC5yZWplY3RXaXRoKCBlbGVtLCBbIGFuaW1hdGlvbiwgZ290b0VuZCBdICk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdHJldHVybiB0aGlzO1xyXG5cdFx0XHR9XHJcblx0XHR9KSxcclxuXHRcdHByb3BzID0gYW5pbWF0aW9uLnByb3BzO1xyXG5cclxuXHRwcm9wRmlsdGVyKCBwcm9wcywgYW5pbWF0aW9uLm9wdHMuc3BlY2lhbEVhc2luZyApO1xyXG5cclxuXHRmb3IgKCA7IGluZGV4IDwgbGVuZ3RoIDsgaW5kZXgrKyApIHtcclxuXHRcdHJlc3VsdCA9IGFuaW1hdGlvblByZWZpbHRlcnNbIGluZGV4IF0uY2FsbCggYW5pbWF0aW9uLCBlbGVtLCBwcm9wcywgYW5pbWF0aW9uLm9wdHMgKTtcclxuXHRcdGlmICggcmVzdWx0ICkge1xyXG5cdFx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0alF1ZXJ5Lm1hcCggcHJvcHMsIGNyZWF0ZVR3ZWVuLCBhbmltYXRpb24gKTtcclxuXHJcblx0aWYgKCBqUXVlcnkuaXNGdW5jdGlvbiggYW5pbWF0aW9uLm9wdHMuc3RhcnQgKSApIHtcclxuXHRcdGFuaW1hdGlvbi5vcHRzLnN0YXJ0LmNhbGwoIGVsZW0sIGFuaW1hdGlvbiApO1xyXG5cdH1cclxuXHJcblx0alF1ZXJ5LmZ4LnRpbWVyKFxyXG5cdFx0alF1ZXJ5LmV4dGVuZCggdGljaywge1xyXG5cdFx0XHRlbGVtOiBlbGVtLFxyXG5cdFx0XHRhbmltOiBhbmltYXRpb24sXHJcblx0XHRcdHF1ZXVlOiBhbmltYXRpb24ub3B0cy5xdWV1ZVxyXG5cdFx0fSlcclxuXHQpO1xyXG5cclxuXHQvLyBhdHRhY2ggY2FsbGJhY2tzIGZyb20gb3B0aW9uc1xyXG5cdHJldHVybiBhbmltYXRpb24ucHJvZ3Jlc3MoIGFuaW1hdGlvbi5vcHRzLnByb2dyZXNzIClcclxuXHRcdC5kb25lKCBhbmltYXRpb24ub3B0cy5kb25lLCBhbmltYXRpb24ub3B0cy5jb21wbGV0ZSApXHJcblx0XHQuZmFpbCggYW5pbWF0aW9uLm9wdHMuZmFpbCApXHJcblx0XHQuYWx3YXlzKCBhbmltYXRpb24ub3B0cy5hbHdheXMgKTtcclxufVxyXG5cclxualF1ZXJ5LkFuaW1hdGlvbiA9IGpRdWVyeS5leHRlbmQoIEFuaW1hdGlvbiwge1xyXG5cclxuXHR0d2VlbmVyOiBmdW5jdGlvbiggcHJvcHMsIGNhbGxiYWNrICkge1xyXG5cdFx0aWYgKCBqUXVlcnkuaXNGdW5jdGlvbiggcHJvcHMgKSApIHtcclxuXHRcdFx0Y2FsbGJhY2sgPSBwcm9wcztcclxuXHRcdFx0cHJvcHMgPSBbIFwiKlwiIF07XHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHRwcm9wcyA9IHByb3BzLnNwbGl0KFwiIFwiKTtcclxuXHRcdH1cclxuXHJcblx0XHR2YXIgcHJvcCxcclxuXHRcdFx0aW5kZXggPSAwLFxyXG5cdFx0XHRsZW5ndGggPSBwcm9wcy5sZW5ndGg7XHJcblxyXG5cdFx0Zm9yICggOyBpbmRleCA8IGxlbmd0aCA7IGluZGV4KysgKSB7XHJcblx0XHRcdHByb3AgPSBwcm9wc1sgaW5kZXggXTtcclxuXHRcdFx0dHdlZW5lcnNbIHByb3AgXSA9IHR3ZWVuZXJzWyBwcm9wIF0gfHwgW107XHJcblx0XHRcdHR3ZWVuZXJzWyBwcm9wIF0udW5zaGlmdCggY2FsbGJhY2sgKTtcclxuXHRcdH1cclxuXHR9LFxyXG5cclxuXHRwcmVmaWx0ZXI6IGZ1bmN0aW9uKCBjYWxsYmFjaywgcHJlcGVuZCApIHtcclxuXHRcdGlmICggcHJlcGVuZCApIHtcclxuXHRcdFx0YW5pbWF0aW9uUHJlZmlsdGVycy51bnNoaWZ0KCBjYWxsYmFjayApO1xyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0YW5pbWF0aW9uUHJlZmlsdGVycy5wdXNoKCBjYWxsYmFjayApO1xyXG5cdFx0fVxyXG5cdH1cclxufSk7XHJcblxyXG5qUXVlcnkuc3BlZWQgPSBmdW5jdGlvbiggc3BlZWQsIGVhc2luZywgZm4gKSB7XHJcblx0dmFyIG9wdCA9IHNwZWVkICYmIHR5cGVvZiBzcGVlZCA9PT0gXCJvYmplY3RcIiA/IGpRdWVyeS5leHRlbmQoIHt9LCBzcGVlZCApIDoge1xyXG5cdFx0Y29tcGxldGU6IGZuIHx8ICFmbiAmJiBlYXNpbmcgfHxcclxuXHRcdFx0alF1ZXJ5LmlzRnVuY3Rpb24oIHNwZWVkICkgJiYgc3BlZWQsXHJcblx0XHRkdXJhdGlvbjogc3BlZWQsXHJcblx0XHRlYXNpbmc6IGZuICYmIGVhc2luZyB8fCBlYXNpbmcgJiYgIWpRdWVyeS5pc0Z1bmN0aW9uKCBlYXNpbmcgKSAmJiBlYXNpbmdcclxuXHR9O1xyXG5cclxuXHRvcHQuZHVyYXRpb24gPSBqUXVlcnkuZngub2ZmID8gMCA6IHR5cGVvZiBvcHQuZHVyYXRpb24gPT09IFwibnVtYmVyXCIgPyBvcHQuZHVyYXRpb24gOlxyXG5cdFx0b3B0LmR1cmF0aW9uIGluIGpRdWVyeS5meC5zcGVlZHMgPyBqUXVlcnkuZnguc3BlZWRzWyBvcHQuZHVyYXRpb24gXSA6IGpRdWVyeS5meC5zcGVlZHMuX2RlZmF1bHQ7XHJcblxyXG5cdC8vIE5vcm1hbGl6ZSBvcHQucXVldWUgLSB0cnVlL3VuZGVmaW5lZC9udWxsIC0+IFwiZnhcIlxyXG5cdGlmICggb3B0LnF1ZXVlID09IG51bGwgfHwgb3B0LnF1ZXVlID09PSB0cnVlICkge1xyXG5cdFx0b3B0LnF1ZXVlID0gXCJmeFwiO1xyXG5cdH1cclxuXHJcblx0Ly8gUXVldWVpbmdcclxuXHRvcHQub2xkID0gb3B0LmNvbXBsZXRlO1xyXG5cclxuXHRvcHQuY29tcGxldGUgPSBmdW5jdGlvbigpIHtcclxuXHRcdGlmICggalF1ZXJ5LmlzRnVuY3Rpb24oIG9wdC5vbGQgKSApIHtcclxuXHRcdFx0b3B0Lm9sZC5jYWxsKCB0aGlzICk7XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKCBvcHQucXVldWUgKSB7XHJcblx0XHRcdGpRdWVyeS5kZXF1ZXVlKCB0aGlzLCBvcHQucXVldWUgKTtcclxuXHRcdH1cclxuXHR9O1xyXG5cclxuXHRyZXR1cm4gb3B0O1xyXG59O1xyXG5cclxualF1ZXJ5LmZuLmV4dGVuZCh7XHJcblx0ZmFkZVRvOiBmdW5jdGlvbiggc3BlZWQsIHRvLCBlYXNpbmcsIGNhbGxiYWNrICkge1xyXG5cclxuXHRcdC8vIFNob3cgYW55IGhpZGRlbiBlbGVtZW50cyBhZnRlciBzZXR0aW5nIG9wYWNpdHkgdG8gMFxyXG5cdFx0cmV0dXJuIHRoaXMuZmlsdGVyKCBpc0hpZGRlbiApLmNzcyggXCJvcGFjaXR5XCIsIDAgKS5zaG93KClcclxuXHJcblx0XHRcdC8vIEFuaW1hdGUgdG8gdGhlIHZhbHVlIHNwZWNpZmllZFxyXG5cdFx0XHQuZW5kKCkuYW5pbWF0ZSh7IG9wYWNpdHk6IHRvIH0sIHNwZWVkLCBlYXNpbmcsIGNhbGxiYWNrICk7XHJcblx0fSxcclxuXHRhbmltYXRlOiBmdW5jdGlvbiggcHJvcCwgc3BlZWQsIGVhc2luZywgY2FsbGJhY2sgKSB7XHJcblx0XHR2YXIgZW1wdHkgPSBqUXVlcnkuaXNFbXB0eU9iamVjdCggcHJvcCApLFxyXG5cdFx0XHRvcHRhbGwgPSBqUXVlcnkuc3BlZWQoIHNwZWVkLCBlYXNpbmcsIGNhbGxiYWNrICksXHJcblx0XHRcdGRvQW5pbWF0aW9uID0gZnVuY3Rpb24oKSB7XHJcblx0XHRcdFx0Ly8gT3BlcmF0ZSBvbiBhIGNvcHkgb2YgcHJvcCBzbyBwZXItcHJvcGVydHkgZWFzaW5nIHdvbid0IGJlIGxvc3RcclxuXHRcdFx0XHR2YXIgYW5pbSA9IEFuaW1hdGlvbiggdGhpcywgalF1ZXJ5LmV4dGVuZCgge30sIHByb3AgKSwgb3B0YWxsICk7XHJcblxyXG5cdFx0XHRcdC8vIEVtcHR5IGFuaW1hdGlvbnMsIG9yIGZpbmlzaGluZyByZXNvbHZlcyBpbW1lZGlhdGVseVxyXG5cdFx0XHRcdGlmICggZW1wdHkgfHwgZGF0YV9wcml2LmdldCggdGhpcywgXCJmaW5pc2hcIiApICkge1xyXG5cdFx0XHRcdFx0YW5pbS5zdG9wKCB0cnVlICk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9O1xyXG5cdFx0XHRkb0FuaW1hdGlvbi5maW5pc2ggPSBkb0FuaW1hdGlvbjtcclxuXHJcblx0XHRyZXR1cm4gZW1wdHkgfHwgb3B0YWxsLnF1ZXVlID09PSBmYWxzZSA/XHJcblx0XHRcdHRoaXMuZWFjaCggZG9BbmltYXRpb24gKSA6XHJcblx0XHRcdHRoaXMucXVldWUoIG9wdGFsbC5xdWV1ZSwgZG9BbmltYXRpb24gKTtcclxuXHR9LFxyXG5cdHN0b3A6IGZ1bmN0aW9uKCB0eXBlLCBjbGVhclF1ZXVlLCBnb3RvRW5kICkge1xyXG5cdFx0dmFyIHN0b3BRdWV1ZSA9IGZ1bmN0aW9uKCBob29rcyApIHtcclxuXHRcdFx0dmFyIHN0b3AgPSBob29rcy5zdG9wO1xyXG5cdFx0XHRkZWxldGUgaG9va3Muc3RvcDtcclxuXHRcdFx0c3RvcCggZ290b0VuZCApO1xyXG5cdFx0fTtcclxuXHJcblx0XHRpZiAoIHR5cGVvZiB0eXBlICE9PSBcInN0cmluZ1wiICkge1xyXG5cdFx0XHRnb3RvRW5kID0gY2xlYXJRdWV1ZTtcclxuXHRcdFx0Y2xlYXJRdWV1ZSA9IHR5cGU7XHJcblx0XHRcdHR5cGUgPSB1bmRlZmluZWQ7XHJcblx0XHR9XHJcblx0XHRpZiAoIGNsZWFyUXVldWUgJiYgdHlwZSAhPT0gZmFsc2UgKSB7XHJcblx0XHRcdHRoaXMucXVldWUoIHR5cGUgfHwgXCJmeFwiLCBbXSApO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKSB7XHJcblx0XHRcdHZhciBkZXF1ZXVlID0gdHJ1ZSxcclxuXHRcdFx0XHRpbmRleCA9IHR5cGUgIT0gbnVsbCAmJiB0eXBlICsgXCJxdWV1ZUhvb2tzXCIsXHJcblx0XHRcdFx0dGltZXJzID0galF1ZXJ5LnRpbWVycyxcclxuXHRcdFx0XHRkYXRhID0gZGF0YV9wcml2LmdldCggdGhpcyApO1xyXG5cclxuXHRcdFx0aWYgKCBpbmRleCApIHtcclxuXHRcdFx0XHRpZiAoIGRhdGFbIGluZGV4IF0gJiYgZGF0YVsgaW5kZXggXS5zdG9wICkge1xyXG5cdFx0XHRcdFx0c3RvcFF1ZXVlKCBkYXRhWyBpbmRleCBdICk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdGZvciAoIGluZGV4IGluIGRhdGEgKSB7XHJcblx0XHRcdFx0XHRpZiAoIGRhdGFbIGluZGV4IF0gJiYgZGF0YVsgaW5kZXggXS5zdG9wICYmIHJydW4udGVzdCggaW5kZXggKSApIHtcclxuXHRcdFx0XHRcdFx0c3RvcFF1ZXVlKCBkYXRhWyBpbmRleCBdICk7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRmb3IgKCBpbmRleCA9IHRpbWVycy5sZW5ndGg7IGluZGV4LS07ICkge1xyXG5cdFx0XHRcdGlmICggdGltZXJzWyBpbmRleCBdLmVsZW0gPT09IHRoaXMgJiYgKHR5cGUgPT0gbnVsbCB8fCB0aW1lcnNbIGluZGV4IF0ucXVldWUgPT09IHR5cGUpICkge1xyXG5cdFx0XHRcdFx0dGltZXJzWyBpbmRleCBdLmFuaW0uc3RvcCggZ290b0VuZCApO1xyXG5cdFx0XHRcdFx0ZGVxdWV1ZSA9IGZhbHNlO1xyXG5cdFx0XHRcdFx0dGltZXJzLnNwbGljZSggaW5kZXgsIDEgKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdC8vIFN0YXJ0IHRoZSBuZXh0IGluIHRoZSBxdWV1ZSBpZiB0aGUgbGFzdCBzdGVwIHdhc24ndCBmb3JjZWQuXHJcblx0XHRcdC8vIFRpbWVycyBjdXJyZW50bHkgd2lsbCBjYWxsIHRoZWlyIGNvbXBsZXRlIGNhbGxiYWNrcywgd2hpY2hcclxuXHRcdFx0Ly8gd2lsbCBkZXF1ZXVlIGJ1dCBvbmx5IGlmIHRoZXkgd2VyZSBnb3RvRW5kLlxyXG5cdFx0XHRpZiAoIGRlcXVldWUgfHwgIWdvdG9FbmQgKSB7XHJcblx0XHRcdFx0alF1ZXJ5LmRlcXVldWUoIHRoaXMsIHR5cGUgKTtcclxuXHRcdFx0fVxyXG5cdFx0fSk7XHJcblx0fSxcclxuXHRmaW5pc2g6IGZ1bmN0aW9uKCB0eXBlICkge1xyXG5cdFx0aWYgKCB0eXBlICE9PSBmYWxzZSApIHtcclxuXHRcdFx0dHlwZSA9IHR5cGUgfHwgXCJmeFwiO1xyXG5cdFx0fVxyXG5cdFx0cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpIHtcclxuXHRcdFx0dmFyIGluZGV4LFxyXG5cdFx0XHRcdGRhdGEgPSBkYXRhX3ByaXYuZ2V0KCB0aGlzICksXHJcblx0XHRcdFx0cXVldWUgPSBkYXRhWyB0eXBlICsgXCJxdWV1ZVwiIF0sXHJcblx0XHRcdFx0aG9va3MgPSBkYXRhWyB0eXBlICsgXCJxdWV1ZUhvb2tzXCIgXSxcclxuXHRcdFx0XHR0aW1lcnMgPSBqUXVlcnkudGltZXJzLFxyXG5cdFx0XHRcdGxlbmd0aCA9IHF1ZXVlID8gcXVldWUubGVuZ3RoIDogMDtcclxuXHJcblx0XHRcdC8vIEVuYWJsZSBmaW5pc2hpbmcgZmxhZyBvbiBwcml2YXRlIGRhdGFcclxuXHRcdFx0ZGF0YS5maW5pc2ggPSB0cnVlO1xyXG5cclxuXHRcdFx0Ly8gRW1wdHkgdGhlIHF1ZXVlIGZpcnN0XHJcblx0XHRcdGpRdWVyeS5xdWV1ZSggdGhpcywgdHlwZSwgW10gKTtcclxuXHJcblx0XHRcdGlmICggaG9va3MgJiYgaG9va3Muc3RvcCApIHtcclxuXHRcdFx0XHRob29rcy5zdG9wLmNhbGwoIHRoaXMsIHRydWUgKTtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0Ly8gTG9vayBmb3IgYW55IGFjdGl2ZSBhbmltYXRpb25zLCBhbmQgZmluaXNoIHRoZW1cclxuXHRcdFx0Zm9yICggaW5kZXggPSB0aW1lcnMubGVuZ3RoOyBpbmRleC0tOyApIHtcclxuXHRcdFx0XHRpZiAoIHRpbWVyc1sgaW5kZXggXS5lbGVtID09PSB0aGlzICYmIHRpbWVyc1sgaW5kZXggXS5xdWV1ZSA9PT0gdHlwZSApIHtcclxuXHRcdFx0XHRcdHRpbWVyc1sgaW5kZXggXS5hbmltLnN0b3AoIHRydWUgKTtcclxuXHRcdFx0XHRcdHRpbWVycy5zcGxpY2UoIGluZGV4LCAxICk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHQvLyBMb29rIGZvciBhbnkgYW5pbWF0aW9ucyBpbiB0aGUgb2xkIHF1ZXVlIGFuZCBmaW5pc2ggdGhlbVxyXG5cdFx0XHRmb3IgKCBpbmRleCA9IDA7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrICkge1xyXG5cdFx0XHRcdGlmICggcXVldWVbIGluZGV4IF0gJiYgcXVldWVbIGluZGV4IF0uZmluaXNoICkge1xyXG5cdFx0XHRcdFx0cXVldWVbIGluZGV4IF0uZmluaXNoLmNhbGwoIHRoaXMgKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdC8vIFR1cm4gb2ZmIGZpbmlzaGluZyBmbGFnXHJcblx0XHRcdGRlbGV0ZSBkYXRhLmZpbmlzaDtcclxuXHRcdH0pO1xyXG5cdH1cclxufSk7XHJcblxyXG5qUXVlcnkuZWFjaChbIFwidG9nZ2xlXCIsIFwic2hvd1wiLCBcImhpZGVcIiBdLCBmdW5jdGlvbiggaSwgbmFtZSApIHtcclxuXHR2YXIgY3NzRm4gPSBqUXVlcnkuZm5bIG5hbWUgXTtcclxuXHRqUXVlcnkuZm5bIG5hbWUgXSA9IGZ1bmN0aW9uKCBzcGVlZCwgZWFzaW5nLCBjYWxsYmFjayApIHtcclxuXHRcdHJldHVybiBzcGVlZCA9PSBudWxsIHx8IHR5cGVvZiBzcGVlZCA9PT0gXCJib29sZWFuXCIgP1xyXG5cdFx0XHRjc3NGbi5hcHBseSggdGhpcywgYXJndW1lbnRzICkgOlxyXG5cdFx0XHR0aGlzLmFuaW1hdGUoIGdlbkZ4KCBuYW1lLCB0cnVlICksIHNwZWVkLCBlYXNpbmcsIGNhbGxiYWNrICk7XHJcblx0fTtcclxufSk7XHJcblxyXG4vLyBHZW5lcmF0ZSBzaG9ydGN1dHMgZm9yIGN1c3RvbSBhbmltYXRpb25zXHJcbmpRdWVyeS5lYWNoKHtcclxuXHRzbGlkZURvd246IGdlbkZ4KFwic2hvd1wiKSxcclxuXHRzbGlkZVVwOiBnZW5GeChcImhpZGVcIiksXHJcblx0c2xpZGVUb2dnbGU6IGdlbkZ4KFwidG9nZ2xlXCIpLFxyXG5cdGZhZGVJbjogeyBvcGFjaXR5OiBcInNob3dcIiB9LFxyXG5cdGZhZGVPdXQ6IHsgb3BhY2l0eTogXCJoaWRlXCIgfSxcclxuXHRmYWRlVG9nZ2xlOiB7IG9wYWNpdHk6IFwidG9nZ2xlXCIgfVxyXG59LCBmdW5jdGlvbiggbmFtZSwgcHJvcHMgKSB7XHJcblx0alF1ZXJ5LmZuWyBuYW1lIF0gPSBmdW5jdGlvbiggc3BlZWQsIGVhc2luZywgY2FsbGJhY2sgKSB7XHJcblx0XHRyZXR1cm4gdGhpcy5hbmltYXRlKCBwcm9wcywgc3BlZWQsIGVhc2luZywgY2FsbGJhY2sgKTtcclxuXHR9O1xyXG59KTtcclxuXHJcbmpRdWVyeS50aW1lcnMgPSBbXTtcclxualF1ZXJ5LmZ4LnRpY2sgPSBmdW5jdGlvbigpIHtcclxuXHR2YXIgdGltZXIsXHJcblx0XHRpID0gMCxcclxuXHRcdHRpbWVycyA9IGpRdWVyeS50aW1lcnM7XHJcblxyXG5cdGZ4Tm93ID0galF1ZXJ5Lm5vdygpO1xyXG5cclxuXHRmb3IgKCA7IGkgPCB0aW1lcnMubGVuZ3RoOyBpKysgKSB7XHJcblx0XHR0aW1lciA9IHRpbWVyc1sgaSBdO1xyXG5cdFx0Ly8gQ2hlY2tzIHRoZSB0aW1lciBoYXMgbm90IGFscmVhZHkgYmVlbiByZW1vdmVkXHJcblx0XHRpZiAoICF0aW1lcigpICYmIHRpbWVyc1sgaSBdID09PSB0aW1lciApIHtcclxuXHRcdFx0dGltZXJzLnNwbGljZSggaS0tLCAxICk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRpZiAoICF0aW1lcnMubGVuZ3RoICkge1xyXG5cdFx0alF1ZXJ5LmZ4LnN0b3AoKTtcclxuXHR9XHJcblx0ZnhOb3cgPSB1bmRlZmluZWQ7XHJcbn07XHJcblxyXG5qUXVlcnkuZngudGltZXIgPSBmdW5jdGlvbiggdGltZXIgKSB7XHJcblx0alF1ZXJ5LnRpbWVycy5wdXNoKCB0aW1lciApO1xyXG5cdGlmICggdGltZXIoKSApIHtcclxuXHRcdGpRdWVyeS5meC5zdGFydCgpO1xyXG5cdH0gZWxzZSB7XHJcblx0XHRqUXVlcnkudGltZXJzLnBvcCgpO1xyXG5cdH1cclxufTtcclxuXHJcbmpRdWVyeS5meC5pbnRlcnZhbCA9IDEzO1xyXG5cclxualF1ZXJ5LmZ4LnN0YXJ0ID0gZnVuY3Rpb24oKSB7XHJcblx0aWYgKCAhdGltZXJJZCApIHtcclxuXHRcdHRpbWVySWQgPSBzZXRJbnRlcnZhbCggalF1ZXJ5LmZ4LnRpY2ssIGpRdWVyeS5meC5pbnRlcnZhbCApO1xyXG5cdH1cclxufTtcclxuXHJcbmpRdWVyeS5meC5zdG9wID0gZnVuY3Rpb24oKSB7XHJcblx0Y2xlYXJJbnRlcnZhbCggdGltZXJJZCApO1xyXG5cdHRpbWVySWQgPSBudWxsO1xyXG59O1xyXG5cclxualF1ZXJ5LmZ4LnNwZWVkcyA9IHtcclxuXHRzbG93OiA2MDAsXHJcblx0ZmFzdDogMjAwLFxyXG5cdC8vIERlZmF1bHQgc3BlZWRcclxuXHRfZGVmYXVsdDogNDAwXHJcbn07XHJcblxyXG5cclxuLy8gQmFzZWQgb2ZmIG9mIHRoZSBwbHVnaW4gYnkgQ2xpbnQgSGVsZmVycywgd2l0aCBwZXJtaXNzaW9uLlxyXG4vLyBodHRwOi8vYmxpbmRzaWduYWxzLmNvbS9pbmRleC5waHAvMjAwOS8wNy9qcXVlcnktZGVsYXkvXHJcbmpRdWVyeS5mbi5kZWxheSA9IGZ1bmN0aW9uKCB0aW1lLCB0eXBlICkge1xyXG5cdHRpbWUgPSBqUXVlcnkuZnggPyBqUXVlcnkuZnguc3BlZWRzWyB0aW1lIF0gfHwgdGltZSA6IHRpbWU7XHJcblx0dHlwZSA9IHR5cGUgfHwgXCJmeFwiO1xyXG5cclxuXHRyZXR1cm4gdGhpcy5xdWV1ZSggdHlwZSwgZnVuY3Rpb24oIG5leHQsIGhvb2tzICkge1xyXG5cdFx0dmFyIHRpbWVvdXQgPSBzZXRUaW1lb3V0KCBuZXh0LCB0aW1lICk7XHJcblx0XHRob29rcy5zdG9wID0gZnVuY3Rpb24oKSB7XHJcblx0XHRcdGNsZWFyVGltZW91dCggdGltZW91dCApO1xyXG5cdFx0fTtcclxuXHR9KTtcclxufTtcclxuXHJcblxyXG4oZnVuY3Rpb24oKSB7XHJcblx0dmFyIGlucHV0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggXCJpbnB1dFwiICksXHJcblx0XHRzZWxlY3QgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCBcInNlbGVjdFwiICksXHJcblx0XHRvcHQgPSBzZWxlY3QuYXBwZW5kQ2hpbGQoIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIFwib3B0aW9uXCIgKSApO1xyXG5cclxuXHRpbnB1dC50eXBlID0gXCJjaGVja2JveFwiO1xyXG5cclxuXHQvLyBTdXBwb3J0OiBpT1M8PTUuMSwgQW5kcm9pZDw9NC4yK1xyXG5cdC8vIERlZmF1bHQgdmFsdWUgZm9yIGEgY2hlY2tib3ggc2hvdWxkIGJlIFwib25cIlxyXG5cdHN1cHBvcnQuY2hlY2tPbiA9IGlucHV0LnZhbHVlICE9PSBcIlwiO1xyXG5cclxuXHQvLyBTdXBwb3J0OiBJRTw9MTErXHJcblx0Ly8gTXVzdCBhY2Nlc3Mgc2VsZWN0ZWRJbmRleCB0byBtYWtlIGRlZmF1bHQgb3B0aW9ucyBzZWxlY3RcclxuXHRzdXBwb3J0Lm9wdFNlbGVjdGVkID0gb3B0LnNlbGVjdGVkO1xyXG5cclxuXHQvLyBTdXBwb3J0OiBBbmRyb2lkPD0yLjNcclxuXHQvLyBPcHRpb25zIGluc2lkZSBkaXNhYmxlZCBzZWxlY3RzIGFyZSBpbmNvcnJlY3RseSBtYXJrZWQgYXMgZGlzYWJsZWRcclxuXHRzZWxlY3QuZGlzYWJsZWQgPSB0cnVlO1xyXG5cdHN1cHBvcnQub3B0RGlzYWJsZWQgPSAhb3B0LmRpc2FibGVkO1xyXG5cclxuXHQvLyBTdXBwb3J0OiBJRTw9MTErXHJcblx0Ly8gQW4gaW5wdXQgbG9zZXMgaXRzIHZhbHVlIGFmdGVyIGJlY29taW5nIGEgcmFkaW9cclxuXHRpbnB1dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIFwiaW5wdXRcIiApO1xyXG5cdGlucHV0LnZhbHVlID0gXCJ0XCI7XHJcblx0aW5wdXQudHlwZSA9IFwicmFkaW9cIjtcclxuXHRzdXBwb3J0LnJhZGlvVmFsdWUgPSBpbnB1dC52YWx1ZSA9PT0gXCJ0XCI7XHJcbn0pKCk7XHJcblxyXG5cclxudmFyIG5vZGVIb29rLCBib29sSG9vayxcclxuXHRhdHRySGFuZGxlID0galF1ZXJ5LmV4cHIuYXR0ckhhbmRsZTtcclxuXHJcbmpRdWVyeS5mbi5leHRlbmQoe1xyXG5cdGF0dHI6IGZ1bmN0aW9uKCBuYW1lLCB2YWx1ZSApIHtcclxuXHRcdHJldHVybiBhY2Nlc3MoIHRoaXMsIGpRdWVyeS5hdHRyLCBuYW1lLCB2YWx1ZSwgYXJndW1lbnRzLmxlbmd0aCA+IDEgKTtcclxuXHR9LFxyXG5cclxuXHRyZW1vdmVBdHRyOiBmdW5jdGlvbiggbmFtZSApIHtcclxuXHRcdHJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKSB7XHJcblx0XHRcdGpRdWVyeS5yZW1vdmVBdHRyKCB0aGlzLCBuYW1lICk7XHJcblx0XHR9KTtcclxuXHR9XHJcbn0pO1xyXG5cclxualF1ZXJ5LmV4dGVuZCh7XHJcblx0YXR0cjogZnVuY3Rpb24oIGVsZW0sIG5hbWUsIHZhbHVlICkge1xyXG5cdFx0dmFyIGhvb2tzLCByZXQsXHJcblx0XHRcdG5UeXBlID0gZWxlbS5ub2RlVHlwZTtcclxuXHJcblx0XHQvLyBkb24ndCBnZXQvc2V0IGF0dHJpYnV0ZXMgb24gdGV4dCwgY29tbWVudCBhbmQgYXR0cmlidXRlIG5vZGVzXHJcblx0XHRpZiAoICFlbGVtIHx8IG5UeXBlID09PSAzIHx8IG5UeXBlID09PSA4IHx8IG5UeXBlID09PSAyICkge1xyXG5cdFx0XHRyZXR1cm47XHJcblx0XHR9XHJcblxyXG5cdFx0Ly8gRmFsbGJhY2sgdG8gcHJvcCB3aGVuIGF0dHJpYnV0ZXMgYXJlIG5vdCBzdXBwb3J0ZWRcclxuXHRcdGlmICggdHlwZW9mIGVsZW0uZ2V0QXR0cmlidXRlID09PSBzdHJ1bmRlZmluZWQgKSB7XHJcblx0XHRcdHJldHVybiBqUXVlcnkucHJvcCggZWxlbSwgbmFtZSwgdmFsdWUgKTtcclxuXHRcdH1cclxuXHJcblx0XHQvLyBBbGwgYXR0cmlidXRlcyBhcmUgbG93ZXJjYXNlXHJcblx0XHQvLyBHcmFiIG5lY2Vzc2FyeSBob29rIGlmIG9uZSBpcyBkZWZpbmVkXHJcblx0XHRpZiAoIG5UeXBlICE9PSAxIHx8ICFqUXVlcnkuaXNYTUxEb2MoIGVsZW0gKSApIHtcclxuXHRcdFx0bmFtZSA9IG5hbWUudG9Mb3dlckNhc2UoKTtcclxuXHRcdFx0aG9va3MgPSBqUXVlcnkuYXR0ckhvb2tzWyBuYW1lIF0gfHxcclxuXHRcdFx0XHQoIGpRdWVyeS5leHByLm1hdGNoLmJvb2wudGVzdCggbmFtZSApID8gYm9vbEhvb2sgOiBub2RlSG9vayApO1xyXG5cdFx0fVxyXG5cclxuXHRcdGlmICggdmFsdWUgIT09IHVuZGVmaW5lZCApIHtcclxuXHJcblx0XHRcdGlmICggdmFsdWUgPT09IG51bGwgKSB7XHJcblx0XHRcdFx0alF1ZXJ5LnJlbW92ZUF0dHIoIGVsZW0sIG5hbWUgKTtcclxuXHJcblx0XHRcdH0gZWxzZSBpZiAoIGhvb2tzICYmIFwic2V0XCIgaW4gaG9va3MgJiYgKHJldCA9IGhvb2tzLnNldCggZWxlbSwgdmFsdWUsIG5hbWUgKSkgIT09IHVuZGVmaW5lZCApIHtcclxuXHRcdFx0XHRyZXR1cm4gcmV0O1xyXG5cclxuXHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRlbGVtLnNldEF0dHJpYnV0ZSggbmFtZSwgdmFsdWUgKyBcIlwiICk7XHJcblx0XHRcdFx0cmV0dXJuIHZhbHVlO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0fSBlbHNlIGlmICggaG9va3MgJiYgXCJnZXRcIiBpbiBob29rcyAmJiAocmV0ID0gaG9va3MuZ2V0KCBlbGVtLCBuYW1lICkpICE9PSBudWxsICkge1xyXG5cdFx0XHRyZXR1cm4gcmV0O1xyXG5cclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdHJldCA9IGpRdWVyeS5maW5kLmF0dHIoIGVsZW0sIG5hbWUgKTtcclxuXHJcblx0XHRcdC8vIE5vbi1leGlzdGVudCBhdHRyaWJ1dGVzIHJldHVybiBudWxsLCB3ZSBub3JtYWxpemUgdG8gdW5kZWZpbmVkXHJcblx0XHRcdHJldHVybiByZXQgPT0gbnVsbCA/XHJcblx0XHRcdFx0dW5kZWZpbmVkIDpcclxuXHRcdFx0XHRyZXQ7XHJcblx0XHR9XHJcblx0fSxcclxuXHJcblx0cmVtb3ZlQXR0cjogZnVuY3Rpb24oIGVsZW0sIHZhbHVlICkge1xyXG5cdFx0dmFyIG5hbWUsIHByb3BOYW1lLFxyXG5cdFx0XHRpID0gMCxcclxuXHRcdFx0YXR0ck5hbWVzID0gdmFsdWUgJiYgdmFsdWUubWF0Y2goIHJub3R3aGl0ZSApO1xyXG5cclxuXHRcdGlmICggYXR0ck5hbWVzICYmIGVsZW0ubm9kZVR5cGUgPT09IDEgKSB7XHJcblx0XHRcdHdoaWxlICggKG5hbWUgPSBhdHRyTmFtZXNbaSsrXSkgKSB7XHJcblx0XHRcdFx0cHJvcE5hbWUgPSBqUXVlcnkucHJvcEZpeFsgbmFtZSBdIHx8IG5hbWU7XHJcblxyXG5cdFx0XHRcdC8vIEJvb2xlYW4gYXR0cmlidXRlcyBnZXQgc3BlY2lhbCB0cmVhdG1lbnQgKCMxMDg3MClcclxuXHRcdFx0XHRpZiAoIGpRdWVyeS5leHByLm1hdGNoLmJvb2wudGVzdCggbmFtZSApICkge1xyXG5cdFx0XHRcdFx0Ly8gU2V0IGNvcnJlc3BvbmRpbmcgcHJvcGVydHkgdG8gZmFsc2VcclxuXHRcdFx0XHRcdGVsZW1bIHByb3BOYW1lIF0gPSBmYWxzZTtcclxuXHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdGVsZW0ucmVtb3ZlQXR0cmlidXRlKCBuYW1lICk7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHR9LFxyXG5cclxuXHRhdHRySG9va3M6IHtcclxuXHRcdHR5cGU6IHtcclxuXHRcdFx0c2V0OiBmdW5jdGlvbiggZWxlbSwgdmFsdWUgKSB7XHJcblx0XHRcdFx0aWYgKCAhc3VwcG9ydC5yYWRpb1ZhbHVlICYmIHZhbHVlID09PSBcInJhZGlvXCIgJiZcclxuXHRcdFx0XHRcdGpRdWVyeS5ub2RlTmFtZSggZWxlbSwgXCJpbnB1dFwiICkgKSB7XHJcblx0XHRcdFx0XHR2YXIgdmFsID0gZWxlbS52YWx1ZTtcclxuXHRcdFx0XHRcdGVsZW0uc2V0QXR0cmlidXRlKCBcInR5cGVcIiwgdmFsdWUgKTtcclxuXHRcdFx0XHRcdGlmICggdmFsICkge1xyXG5cdFx0XHRcdFx0XHRlbGVtLnZhbHVlID0gdmFsO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0cmV0dXJuIHZhbHVlO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdH1cclxufSk7XHJcblxyXG4vLyBIb29rcyBmb3IgYm9vbGVhbiBhdHRyaWJ1dGVzXHJcbmJvb2xIb29rID0ge1xyXG5cdHNldDogZnVuY3Rpb24oIGVsZW0sIHZhbHVlLCBuYW1lICkge1xyXG5cdFx0aWYgKCB2YWx1ZSA9PT0gZmFsc2UgKSB7XHJcblx0XHRcdC8vIFJlbW92ZSBib29sZWFuIGF0dHJpYnV0ZXMgd2hlbiBzZXQgdG8gZmFsc2VcclxuXHRcdFx0alF1ZXJ5LnJlbW92ZUF0dHIoIGVsZW0sIG5hbWUgKTtcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdGVsZW0uc2V0QXR0cmlidXRlKCBuYW1lLCBuYW1lICk7XHJcblx0XHR9XHJcblx0XHRyZXR1cm4gbmFtZTtcclxuXHR9XHJcbn07XHJcbmpRdWVyeS5lYWNoKCBqUXVlcnkuZXhwci5tYXRjaC5ib29sLnNvdXJjZS5tYXRjaCggL1xcdysvZyApLCBmdW5jdGlvbiggaSwgbmFtZSApIHtcclxuXHR2YXIgZ2V0dGVyID0gYXR0ckhhbmRsZVsgbmFtZSBdIHx8IGpRdWVyeS5maW5kLmF0dHI7XHJcblxyXG5cdGF0dHJIYW5kbGVbIG5hbWUgXSA9IGZ1bmN0aW9uKCBlbGVtLCBuYW1lLCBpc1hNTCApIHtcclxuXHRcdHZhciByZXQsIGhhbmRsZTtcclxuXHRcdGlmICggIWlzWE1MICkge1xyXG5cdFx0XHQvLyBBdm9pZCBhbiBpbmZpbml0ZSBsb29wIGJ5IHRlbXBvcmFyaWx5IHJlbW92aW5nIHRoaXMgZnVuY3Rpb24gZnJvbSB0aGUgZ2V0dGVyXHJcblx0XHRcdGhhbmRsZSA9IGF0dHJIYW5kbGVbIG5hbWUgXTtcclxuXHRcdFx0YXR0ckhhbmRsZVsgbmFtZSBdID0gcmV0O1xyXG5cdFx0XHRyZXQgPSBnZXR0ZXIoIGVsZW0sIG5hbWUsIGlzWE1MICkgIT0gbnVsbCA/XHJcblx0XHRcdFx0bmFtZS50b0xvd2VyQ2FzZSgpIDpcclxuXHRcdFx0XHRudWxsO1xyXG5cdFx0XHRhdHRySGFuZGxlWyBuYW1lIF0gPSBoYW5kbGU7XHJcblx0XHR9XHJcblx0XHRyZXR1cm4gcmV0O1xyXG5cdH07XHJcbn0pO1xyXG5cclxuXHJcblxyXG5cclxudmFyIHJmb2N1c2FibGUgPSAvXig/OmlucHV0fHNlbGVjdHx0ZXh0YXJlYXxidXR0b24pJC9pO1xyXG5cclxualF1ZXJ5LmZuLmV4dGVuZCh7XHJcblx0cHJvcDogZnVuY3Rpb24oIG5hbWUsIHZhbHVlICkge1xyXG5cdFx0cmV0dXJuIGFjY2VzcyggdGhpcywgalF1ZXJ5LnByb3AsIG5hbWUsIHZhbHVlLCBhcmd1bWVudHMubGVuZ3RoID4gMSApO1xyXG5cdH0sXHJcblxyXG5cdHJlbW92ZVByb3A6IGZ1bmN0aW9uKCBuYW1lICkge1xyXG5cdFx0cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpIHtcclxuXHRcdFx0ZGVsZXRlIHRoaXNbIGpRdWVyeS5wcm9wRml4WyBuYW1lIF0gfHwgbmFtZSBdO1xyXG5cdFx0fSk7XHJcblx0fVxyXG59KTtcclxuXHJcbmpRdWVyeS5leHRlbmQoe1xyXG5cdHByb3BGaXg6IHtcclxuXHRcdFwiZm9yXCI6IFwiaHRtbEZvclwiLFxyXG5cdFx0XCJjbGFzc1wiOiBcImNsYXNzTmFtZVwiXHJcblx0fSxcclxuXHJcblx0cHJvcDogZnVuY3Rpb24oIGVsZW0sIG5hbWUsIHZhbHVlICkge1xyXG5cdFx0dmFyIHJldCwgaG9va3MsIG5vdHhtbCxcclxuXHRcdFx0blR5cGUgPSBlbGVtLm5vZGVUeXBlO1xyXG5cclxuXHRcdC8vIERvbid0IGdldC9zZXQgcHJvcGVydGllcyBvbiB0ZXh0LCBjb21tZW50IGFuZCBhdHRyaWJ1dGUgbm9kZXNcclxuXHRcdGlmICggIWVsZW0gfHwgblR5cGUgPT09IDMgfHwgblR5cGUgPT09IDggfHwgblR5cGUgPT09IDIgKSB7XHJcblx0XHRcdHJldHVybjtcclxuXHRcdH1cclxuXHJcblx0XHRub3R4bWwgPSBuVHlwZSAhPT0gMSB8fCAhalF1ZXJ5LmlzWE1MRG9jKCBlbGVtICk7XHJcblxyXG5cdFx0aWYgKCBub3R4bWwgKSB7XHJcblx0XHRcdC8vIEZpeCBuYW1lIGFuZCBhdHRhY2ggaG9va3NcclxuXHRcdFx0bmFtZSA9IGpRdWVyeS5wcm9wRml4WyBuYW1lIF0gfHwgbmFtZTtcclxuXHRcdFx0aG9va3MgPSBqUXVlcnkucHJvcEhvb2tzWyBuYW1lIF07XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKCB2YWx1ZSAhPT0gdW5kZWZpbmVkICkge1xyXG5cdFx0XHRyZXR1cm4gaG9va3MgJiYgXCJzZXRcIiBpbiBob29rcyAmJiAocmV0ID0gaG9va3Muc2V0KCBlbGVtLCB2YWx1ZSwgbmFtZSApKSAhPT0gdW5kZWZpbmVkID9cclxuXHRcdFx0XHRyZXQgOlxyXG5cdFx0XHRcdCggZWxlbVsgbmFtZSBdID0gdmFsdWUgKTtcclxuXHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHRyZXR1cm4gaG9va3MgJiYgXCJnZXRcIiBpbiBob29rcyAmJiAocmV0ID0gaG9va3MuZ2V0KCBlbGVtLCBuYW1lICkpICE9PSBudWxsID9cclxuXHRcdFx0XHRyZXQgOlxyXG5cdFx0XHRcdGVsZW1bIG5hbWUgXTtcclxuXHRcdH1cclxuXHR9LFxyXG5cclxuXHRwcm9wSG9va3M6IHtcclxuXHRcdHRhYkluZGV4OiB7XHJcblx0XHRcdGdldDogZnVuY3Rpb24oIGVsZW0gKSB7XHJcblx0XHRcdFx0cmV0dXJuIGVsZW0uaGFzQXR0cmlidXRlKCBcInRhYmluZGV4XCIgKSB8fCByZm9jdXNhYmxlLnRlc3QoIGVsZW0ubm9kZU5hbWUgKSB8fCBlbGVtLmhyZWYgP1xyXG5cdFx0XHRcdFx0ZWxlbS50YWJJbmRleCA6XHJcblx0XHRcdFx0XHQtMTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdH1cclxufSk7XHJcblxyXG5pZiAoICFzdXBwb3J0Lm9wdFNlbGVjdGVkICkge1xyXG5cdGpRdWVyeS5wcm9wSG9va3Muc2VsZWN0ZWQgPSB7XHJcblx0XHRnZXQ6IGZ1bmN0aW9uKCBlbGVtICkge1xyXG5cdFx0XHR2YXIgcGFyZW50ID0gZWxlbS5wYXJlbnROb2RlO1xyXG5cdFx0XHRpZiAoIHBhcmVudCAmJiBwYXJlbnQucGFyZW50Tm9kZSApIHtcclxuXHRcdFx0XHRwYXJlbnQucGFyZW50Tm9kZS5zZWxlY3RlZEluZGV4O1xyXG5cdFx0XHR9XHJcblx0XHRcdHJldHVybiBudWxsO1xyXG5cdFx0fVxyXG5cdH07XHJcbn1cclxuXHJcbmpRdWVyeS5lYWNoKFtcclxuXHRcInRhYkluZGV4XCIsXHJcblx0XCJyZWFkT25seVwiLFxyXG5cdFwibWF4TGVuZ3RoXCIsXHJcblx0XCJjZWxsU3BhY2luZ1wiLFxyXG5cdFwiY2VsbFBhZGRpbmdcIixcclxuXHRcInJvd1NwYW5cIixcclxuXHRcImNvbFNwYW5cIixcclxuXHRcInVzZU1hcFwiLFxyXG5cdFwiZnJhbWVCb3JkZXJcIixcclxuXHRcImNvbnRlbnRFZGl0YWJsZVwiXHJcbl0sIGZ1bmN0aW9uKCkge1xyXG5cdGpRdWVyeS5wcm9wRml4WyB0aGlzLnRvTG93ZXJDYXNlKCkgXSA9IHRoaXM7XHJcbn0pO1xyXG5cclxuXHJcblxyXG5cclxudmFyIHJjbGFzcyA9IC9bXFx0XFxyXFxuXFxmXS9nO1xyXG5cclxualF1ZXJ5LmZuLmV4dGVuZCh7XHJcblx0YWRkQ2xhc3M6IGZ1bmN0aW9uKCB2YWx1ZSApIHtcclxuXHRcdHZhciBjbGFzc2VzLCBlbGVtLCBjdXIsIGNsYXp6LCBqLCBmaW5hbFZhbHVlLFxyXG5cdFx0XHRwcm9jZWVkID0gdHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiICYmIHZhbHVlLFxyXG5cdFx0XHRpID0gMCxcclxuXHRcdFx0bGVuID0gdGhpcy5sZW5ndGg7XHJcblxyXG5cdFx0aWYgKCBqUXVlcnkuaXNGdW5jdGlvbiggdmFsdWUgKSApIHtcclxuXHRcdFx0cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbiggaiApIHtcclxuXHRcdFx0XHRqUXVlcnkoIHRoaXMgKS5hZGRDbGFzcyggdmFsdWUuY2FsbCggdGhpcywgaiwgdGhpcy5jbGFzc05hbWUgKSApO1xyXG5cdFx0XHR9KTtcclxuXHRcdH1cclxuXHJcblx0XHRpZiAoIHByb2NlZWQgKSB7XHJcblx0XHRcdC8vIFRoZSBkaXNqdW5jdGlvbiBoZXJlIGlzIGZvciBiZXR0ZXIgY29tcHJlc3NpYmlsaXR5IChzZWUgcmVtb3ZlQ2xhc3MpXHJcblx0XHRcdGNsYXNzZXMgPSAoIHZhbHVlIHx8IFwiXCIgKS5tYXRjaCggcm5vdHdoaXRlICkgfHwgW107XHJcblxyXG5cdFx0XHRmb3IgKCA7IGkgPCBsZW47IGkrKyApIHtcclxuXHRcdFx0XHRlbGVtID0gdGhpc1sgaSBdO1xyXG5cdFx0XHRcdGN1ciA9IGVsZW0ubm9kZVR5cGUgPT09IDEgJiYgKCBlbGVtLmNsYXNzTmFtZSA/XHJcblx0XHRcdFx0XHQoIFwiIFwiICsgZWxlbS5jbGFzc05hbWUgKyBcIiBcIiApLnJlcGxhY2UoIHJjbGFzcywgXCIgXCIgKSA6XHJcblx0XHRcdFx0XHRcIiBcIlxyXG5cdFx0XHRcdCk7XHJcblxyXG5cdFx0XHRcdGlmICggY3VyICkge1xyXG5cdFx0XHRcdFx0aiA9IDA7XHJcblx0XHRcdFx0XHR3aGlsZSAoIChjbGF6eiA9IGNsYXNzZXNbaisrXSkgKSB7XHJcblx0XHRcdFx0XHRcdGlmICggY3VyLmluZGV4T2YoIFwiIFwiICsgY2xhenogKyBcIiBcIiApIDwgMCApIHtcclxuXHRcdFx0XHRcdFx0XHRjdXIgKz0gY2xhenogKyBcIiBcIjtcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdC8vIG9ubHkgYXNzaWduIGlmIGRpZmZlcmVudCB0byBhdm9pZCB1bm5lZWRlZCByZW5kZXJpbmcuXHJcblx0XHRcdFx0XHRmaW5hbFZhbHVlID0galF1ZXJ5LnRyaW0oIGN1ciApO1xyXG5cdFx0XHRcdFx0aWYgKCBlbGVtLmNsYXNzTmFtZSAhPT0gZmluYWxWYWx1ZSApIHtcclxuXHRcdFx0XHRcdFx0ZWxlbS5jbGFzc05hbWUgPSBmaW5hbFZhbHVlO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiB0aGlzO1xyXG5cdH0sXHJcblxyXG5cdHJlbW92ZUNsYXNzOiBmdW5jdGlvbiggdmFsdWUgKSB7XHJcblx0XHR2YXIgY2xhc3NlcywgZWxlbSwgY3VyLCBjbGF6eiwgaiwgZmluYWxWYWx1ZSxcclxuXHRcdFx0cHJvY2VlZCA9IGFyZ3VtZW50cy5sZW5ndGggPT09IDAgfHwgdHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiICYmIHZhbHVlLFxyXG5cdFx0XHRpID0gMCxcclxuXHRcdFx0bGVuID0gdGhpcy5sZW5ndGg7XHJcblxyXG5cdFx0aWYgKCBqUXVlcnkuaXNGdW5jdGlvbiggdmFsdWUgKSApIHtcclxuXHRcdFx0cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbiggaiApIHtcclxuXHRcdFx0XHRqUXVlcnkoIHRoaXMgKS5yZW1vdmVDbGFzcyggdmFsdWUuY2FsbCggdGhpcywgaiwgdGhpcy5jbGFzc05hbWUgKSApO1xyXG5cdFx0XHR9KTtcclxuXHRcdH1cclxuXHRcdGlmICggcHJvY2VlZCApIHtcclxuXHRcdFx0Y2xhc3NlcyA9ICggdmFsdWUgfHwgXCJcIiApLm1hdGNoKCBybm90d2hpdGUgKSB8fCBbXTtcclxuXHJcblx0XHRcdGZvciAoIDsgaSA8IGxlbjsgaSsrICkge1xyXG5cdFx0XHRcdGVsZW0gPSB0aGlzWyBpIF07XHJcblx0XHRcdFx0Ly8gVGhpcyBleHByZXNzaW9uIGlzIGhlcmUgZm9yIGJldHRlciBjb21wcmVzc2liaWxpdHkgKHNlZSBhZGRDbGFzcylcclxuXHRcdFx0XHRjdXIgPSBlbGVtLm5vZGVUeXBlID09PSAxICYmICggZWxlbS5jbGFzc05hbWUgP1xyXG5cdFx0XHRcdFx0KCBcIiBcIiArIGVsZW0uY2xhc3NOYW1lICsgXCIgXCIgKS5yZXBsYWNlKCByY2xhc3MsIFwiIFwiICkgOlxyXG5cdFx0XHRcdFx0XCJcIlxyXG5cdFx0XHRcdCk7XHJcblxyXG5cdFx0XHRcdGlmICggY3VyICkge1xyXG5cdFx0XHRcdFx0aiA9IDA7XHJcblx0XHRcdFx0XHR3aGlsZSAoIChjbGF6eiA9IGNsYXNzZXNbaisrXSkgKSB7XHJcblx0XHRcdFx0XHRcdC8vIFJlbW92ZSAqYWxsKiBpbnN0YW5jZXNcclxuXHRcdFx0XHRcdFx0d2hpbGUgKCBjdXIuaW5kZXhPZiggXCIgXCIgKyBjbGF6eiArIFwiIFwiICkgPj0gMCApIHtcclxuXHRcdFx0XHRcdFx0XHRjdXIgPSBjdXIucmVwbGFjZSggXCIgXCIgKyBjbGF6eiArIFwiIFwiLCBcIiBcIiApO1xyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0Ly8gT25seSBhc3NpZ24gaWYgZGlmZmVyZW50IHRvIGF2b2lkIHVubmVlZGVkIHJlbmRlcmluZy5cclxuXHRcdFx0XHRcdGZpbmFsVmFsdWUgPSB2YWx1ZSA/IGpRdWVyeS50cmltKCBjdXIgKSA6IFwiXCI7XHJcblx0XHRcdFx0XHRpZiAoIGVsZW0uY2xhc3NOYW1lICE9PSBmaW5hbFZhbHVlICkge1xyXG5cdFx0XHRcdFx0XHRlbGVtLmNsYXNzTmFtZSA9IGZpbmFsVmFsdWU7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHRoaXM7XHJcblx0fSxcclxuXHJcblx0dG9nZ2xlQ2xhc3M6IGZ1bmN0aW9uKCB2YWx1ZSwgc3RhdGVWYWwgKSB7XHJcblx0XHR2YXIgdHlwZSA9IHR5cGVvZiB2YWx1ZTtcclxuXHJcblx0XHRpZiAoIHR5cGVvZiBzdGF0ZVZhbCA9PT0gXCJib29sZWFuXCIgJiYgdHlwZSA9PT0gXCJzdHJpbmdcIiApIHtcclxuXHRcdFx0cmV0dXJuIHN0YXRlVmFsID8gdGhpcy5hZGRDbGFzcyggdmFsdWUgKSA6IHRoaXMucmVtb3ZlQ2xhc3MoIHZhbHVlICk7XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKCBqUXVlcnkuaXNGdW5jdGlvbiggdmFsdWUgKSApIHtcclxuXHRcdFx0cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbiggaSApIHtcclxuXHRcdFx0XHRqUXVlcnkoIHRoaXMgKS50b2dnbGVDbGFzcyggdmFsdWUuY2FsbCh0aGlzLCBpLCB0aGlzLmNsYXNzTmFtZSwgc3RhdGVWYWwpLCBzdGF0ZVZhbCApO1xyXG5cdFx0XHR9KTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCkge1xyXG5cdFx0XHRpZiAoIHR5cGUgPT09IFwic3RyaW5nXCIgKSB7XHJcblx0XHRcdFx0Ly8gVG9nZ2xlIGluZGl2aWR1YWwgY2xhc3MgbmFtZXNcclxuXHRcdFx0XHR2YXIgY2xhc3NOYW1lLFxyXG5cdFx0XHRcdFx0aSA9IDAsXHJcblx0XHRcdFx0XHRzZWxmID0galF1ZXJ5KCB0aGlzICksXHJcblx0XHRcdFx0XHRjbGFzc05hbWVzID0gdmFsdWUubWF0Y2goIHJub3R3aGl0ZSApIHx8IFtdO1xyXG5cclxuXHRcdFx0XHR3aGlsZSAoIChjbGFzc05hbWUgPSBjbGFzc05hbWVzWyBpKysgXSkgKSB7XHJcblx0XHRcdFx0XHQvLyBDaGVjayBlYWNoIGNsYXNzTmFtZSBnaXZlbiwgc3BhY2Ugc2VwYXJhdGVkIGxpc3RcclxuXHRcdFx0XHRcdGlmICggc2VsZi5oYXNDbGFzcyggY2xhc3NOYW1lICkgKSB7XHJcblx0XHRcdFx0XHRcdHNlbGYucmVtb3ZlQ2xhc3MoIGNsYXNzTmFtZSApO1xyXG5cdFx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdFx0c2VsZi5hZGRDbGFzcyggY2xhc3NOYW1lICk7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0Ly8gVG9nZ2xlIHdob2xlIGNsYXNzIG5hbWVcclxuXHRcdFx0fSBlbHNlIGlmICggdHlwZSA9PT0gc3RydW5kZWZpbmVkIHx8IHR5cGUgPT09IFwiYm9vbGVhblwiICkge1xyXG5cdFx0XHRcdGlmICggdGhpcy5jbGFzc05hbWUgKSB7XHJcblx0XHRcdFx0XHQvLyBzdG9yZSBjbGFzc05hbWUgaWYgc2V0XHJcblx0XHRcdFx0XHRkYXRhX3ByaXYuc2V0KCB0aGlzLCBcIl9fY2xhc3NOYW1lX19cIiwgdGhpcy5jbGFzc05hbWUgKTtcclxuXHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdC8vIElmIHRoZSBlbGVtZW50IGhhcyBhIGNsYXNzIG5hbWUgb3IgaWYgd2UncmUgcGFzc2VkIGBmYWxzZWAsXHJcblx0XHRcdFx0Ly8gdGhlbiByZW1vdmUgdGhlIHdob2xlIGNsYXNzbmFtZSAoaWYgdGhlcmUgd2FzIG9uZSwgdGhlIGFib3ZlIHNhdmVkIGl0KS5cclxuXHRcdFx0XHQvLyBPdGhlcndpc2UgYnJpbmcgYmFjayB3aGF0ZXZlciB3YXMgcHJldmlvdXNseSBzYXZlZCAoaWYgYW55dGhpbmcpLFxyXG5cdFx0XHRcdC8vIGZhbGxpbmcgYmFjayB0byB0aGUgZW1wdHkgc3RyaW5nIGlmIG5vdGhpbmcgd2FzIHN0b3JlZC5cclxuXHRcdFx0XHR0aGlzLmNsYXNzTmFtZSA9IHRoaXMuY2xhc3NOYW1lIHx8IHZhbHVlID09PSBmYWxzZSA/IFwiXCIgOiBkYXRhX3ByaXYuZ2V0KCB0aGlzLCBcIl9fY2xhc3NOYW1lX19cIiApIHx8IFwiXCI7XHJcblx0XHRcdH1cclxuXHRcdH0pO1xyXG5cdH0sXHJcblxyXG5cdGhhc0NsYXNzOiBmdW5jdGlvbiggc2VsZWN0b3IgKSB7XHJcblx0XHR2YXIgY2xhc3NOYW1lID0gXCIgXCIgKyBzZWxlY3RvciArIFwiIFwiLFxyXG5cdFx0XHRpID0gMCxcclxuXHRcdFx0bCA9IHRoaXMubGVuZ3RoO1xyXG5cdFx0Zm9yICggOyBpIDwgbDsgaSsrICkge1xyXG5cdFx0XHRpZiAoIHRoaXNbaV0ubm9kZVR5cGUgPT09IDEgJiYgKFwiIFwiICsgdGhpc1tpXS5jbGFzc05hbWUgKyBcIiBcIikucmVwbGFjZShyY2xhc3MsIFwiIFwiKS5pbmRleE9mKCBjbGFzc05hbWUgKSA+PSAwICkge1xyXG5cdFx0XHRcdHJldHVybiB0cnVlO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIGZhbHNlO1xyXG5cdH1cclxufSk7XHJcblxyXG5cclxuXHJcblxyXG52YXIgcnJldHVybiA9IC9cXHIvZztcclxuXHJcbmpRdWVyeS5mbi5leHRlbmQoe1xyXG5cdHZhbDogZnVuY3Rpb24oIHZhbHVlICkge1xyXG5cdFx0dmFyIGhvb2tzLCByZXQsIGlzRnVuY3Rpb24sXHJcblx0XHRcdGVsZW0gPSB0aGlzWzBdO1xyXG5cclxuXHRcdGlmICggIWFyZ3VtZW50cy5sZW5ndGggKSB7XHJcblx0XHRcdGlmICggZWxlbSApIHtcclxuXHRcdFx0XHRob29rcyA9IGpRdWVyeS52YWxIb29rc1sgZWxlbS50eXBlIF0gfHwgalF1ZXJ5LnZhbEhvb2tzWyBlbGVtLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgXTtcclxuXHJcblx0XHRcdFx0aWYgKCBob29rcyAmJiBcImdldFwiIGluIGhvb2tzICYmIChyZXQgPSBob29rcy5nZXQoIGVsZW0sIFwidmFsdWVcIiApKSAhPT0gdW5kZWZpbmVkICkge1xyXG5cdFx0XHRcdFx0cmV0dXJuIHJldDtcclxuXHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdHJldCA9IGVsZW0udmFsdWU7XHJcblxyXG5cdFx0XHRcdHJldHVybiB0eXBlb2YgcmV0ID09PSBcInN0cmluZ1wiID9cclxuXHRcdFx0XHRcdC8vIEhhbmRsZSBtb3N0IGNvbW1vbiBzdHJpbmcgY2FzZXNcclxuXHRcdFx0XHRcdHJldC5yZXBsYWNlKHJyZXR1cm4sIFwiXCIpIDpcclxuXHRcdFx0XHRcdC8vIEhhbmRsZSBjYXNlcyB3aGVyZSB2YWx1ZSBpcyBudWxsL3VuZGVmIG9yIG51bWJlclxyXG5cdFx0XHRcdFx0cmV0ID09IG51bGwgPyBcIlwiIDogcmV0O1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRyZXR1cm47XHJcblx0XHR9XHJcblxyXG5cdFx0aXNGdW5jdGlvbiA9IGpRdWVyeS5pc0Z1bmN0aW9uKCB2YWx1ZSApO1xyXG5cclxuXHRcdHJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oIGkgKSB7XHJcblx0XHRcdHZhciB2YWw7XHJcblxyXG5cdFx0XHRpZiAoIHRoaXMubm9kZVR5cGUgIT09IDEgKSB7XHJcblx0XHRcdFx0cmV0dXJuO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRpZiAoIGlzRnVuY3Rpb24gKSB7XHJcblx0XHRcdFx0dmFsID0gdmFsdWUuY2FsbCggdGhpcywgaSwgalF1ZXJ5KCB0aGlzICkudmFsKCkgKTtcclxuXHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHR2YWwgPSB2YWx1ZTtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0Ly8gVHJlYXQgbnVsbC91bmRlZmluZWQgYXMgXCJcIjsgY29udmVydCBudW1iZXJzIHRvIHN0cmluZ1xyXG5cdFx0XHRpZiAoIHZhbCA9PSBudWxsICkge1xyXG5cdFx0XHRcdHZhbCA9IFwiXCI7XHJcblxyXG5cdFx0XHR9IGVsc2UgaWYgKCB0eXBlb2YgdmFsID09PSBcIm51bWJlclwiICkge1xyXG5cdFx0XHRcdHZhbCArPSBcIlwiO1xyXG5cclxuXHRcdFx0fSBlbHNlIGlmICggalF1ZXJ5LmlzQXJyYXkoIHZhbCApICkge1xyXG5cdFx0XHRcdHZhbCA9IGpRdWVyeS5tYXAoIHZhbCwgZnVuY3Rpb24oIHZhbHVlICkge1xyXG5cdFx0XHRcdFx0cmV0dXJuIHZhbHVlID09IG51bGwgPyBcIlwiIDogdmFsdWUgKyBcIlwiO1xyXG5cdFx0XHRcdH0pO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRob29rcyA9IGpRdWVyeS52YWxIb29rc1sgdGhpcy50eXBlIF0gfHwgalF1ZXJ5LnZhbEhvb2tzWyB0aGlzLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgXTtcclxuXHJcblx0XHRcdC8vIElmIHNldCByZXR1cm5zIHVuZGVmaW5lZCwgZmFsbCBiYWNrIHRvIG5vcm1hbCBzZXR0aW5nXHJcblx0XHRcdGlmICggIWhvb2tzIHx8ICEoXCJzZXRcIiBpbiBob29rcykgfHwgaG9va3Muc2V0KCB0aGlzLCB2YWwsIFwidmFsdWVcIiApID09PSB1bmRlZmluZWQgKSB7XHJcblx0XHRcdFx0dGhpcy52YWx1ZSA9IHZhbDtcclxuXHRcdFx0fVxyXG5cdFx0fSk7XHJcblx0fVxyXG59KTtcclxuXHJcbmpRdWVyeS5leHRlbmQoe1xyXG5cdHZhbEhvb2tzOiB7XHJcblx0XHRvcHRpb246IHtcclxuXHRcdFx0Z2V0OiBmdW5jdGlvbiggZWxlbSApIHtcclxuXHRcdFx0XHR2YXIgdmFsID0galF1ZXJ5LmZpbmQuYXR0ciggZWxlbSwgXCJ2YWx1ZVwiICk7XHJcblx0XHRcdFx0cmV0dXJuIHZhbCAhPSBudWxsID9cclxuXHRcdFx0XHRcdHZhbCA6XHJcblx0XHRcdFx0XHQvLyBTdXBwb3J0OiBJRTEwLTExK1xyXG5cdFx0XHRcdFx0Ly8gb3B0aW9uLnRleHQgdGhyb3dzIGV4Y2VwdGlvbnMgKCMxNDY4NiwgIzE0ODU4KVxyXG5cdFx0XHRcdFx0alF1ZXJ5LnRyaW0oIGpRdWVyeS50ZXh0KCBlbGVtICkgKTtcclxuXHRcdFx0fVxyXG5cdFx0fSxcclxuXHRcdHNlbGVjdDoge1xyXG5cdFx0XHRnZXQ6IGZ1bmN0aW9uKCBlbGVtICkge1xyXG5cdFx0XHRcdHZhciB2YWx1ZSwgb3B0aW9uLFxyXG5cdFx0XHRcdFx0b3B0aW9ucyA9IGVsZW0ub3B0aW9ucyxcclxuXHRcdFx0XHRcdGluZGV4ID0gZWxlbS5zZWxlY3RlZEluZGV4LFxyXG5cdFx0XHRcdFx0b25lID0gZWxlbS50eXBlID09PSBcInNlbGVjdC1vbmVcIiB8fCBpbmRleCA8IDAsXHJcblx0XHRcdFx0XHR2YWx1ZXMgPSBvbmUgPyBudWxsIDogW10sXHJcblx0XHRcdFx0XHRtYXggPSBvbmUgPyBpbmRleCArIDEgOiBvcHRpb25zLmxlbmd0aCxcclxuXHRcdFx0XHRcdGkgPSBpbmRleCA8IDAgP1xyXG5cdFx0XHRcdFx0XHRtYXggOlxyXG5cdFx0XHRcdFx0XHRvbmUgPyBpbmRleCA6IDA7XHJcblxyXG5cdFx0XHRcdC8vIExvb3AgdGhyb3VnaCBhbGwgdGhlIHNlbGVjdGVkIG9wdGlvbnNcclxuXHRcdFx0XHRmb3IgKCA7IGkgPCBtYXg7IGkrKyApIHtcclxuXHRcdFx0XHRcdG9wdGlvbiA9IG9wdGlvbnNbIGkgXTtcclxuXHJcblx0XHRcdFx0XHQvLyBJRTYtOSBkb2Vzbid0IHVwZGF0ZSBzZWxlY3RlZCBhZnRlciBmb3JtIHJlc2V0ICgjMjU1MSlcclxuXHRcdFx0XHRcdGlmICggKCBvcHRpb24uc2VsZWN0ZWQgfHwgaSA9PT0gaW5kZXggKSAmJlxyXG5cdFx0XHRcdFx0XHRcdC8vIERvbid0IHJldHVybiBvcHRpb25zIHRoYXQgYXJlIGRpc2FibGVkIG9yIGluIGEgZGlzYWJsZWQgb3B0Z3JvdXBcclxuXHRcdFx0XHRcdFx0XHQoIHN1cHBvcnQub3B0RGlzYWJsZWQgPyAhb3B0aW9uLmRpc2FibGVkIDogb3B0aW9uLmdldEF0dHJpYnV0ZSggXCJkaXNhYmxlZFwiICkgPT09IG51bGwgKSAmJlxyXG5cdFx0XHRcdFx0XHRcdCggIW9wdGlvbi5wYXJlbnROb2RlLmRpc2FibGVkIHx8ICFqUXVlcnkubm9kZU5hbWUoIG9wdGlvbi5wYXJlbnROb2RlLCBcIm9wdGdyb3VwXCIgKSApICkge1xyXG5cclxuXHRcdFx0XHRcdFx0Ly8gR2V0IHRoZSBzcGVjaWZpYyB2YWx1ZSBmb3IgdGhlIG9wdGlvblxyXG5cdFx0XHRcdFx0XHR2YWx1ZSA9IGpRdWVyeSggb3B0aW9uICkudmFsKCk7XHJcblxyXG5cdFx0XHRcdFx0XHQvLyBXZSBkb24ndCBuZWVkIGFuIGFycmF5IGZvciBvbmUgc2VsZWN0c1xyXG5cdFx0XHRcdFx0XHRpZiAoIG9uZSApIHtcclxuXHRcdFx0XHRcdFx0XHRyZXR1cm4gdmFsdWU7XHJcblx0XHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRcdC8vIE11bHRpLVNlbGVjdHMgcmV0dXJuIGFuIGFycmF5XHJcblx0XHRcdFx0XHRcdHZhbHVlcy5wdXNoKCB2YWx1ZSApO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0cmV0dXJuIHZhbHVlcztcclxuXHRcdFx0fSxcclxuXHJcblx0XHRcdHNldDogZnVuY3Rpb24oIGVsZW0sIHZhbHVlICkge1xyXG5cdFx0XHRcdHZhciBvcHRpb25TZXQsIG9wdGlvbixcclxuXHRcdFx0XHRcdG9wdGlvbnMgPSBlbGVtLm9wdGlvbnMsXHJcblx0XHRcdFx0XHR2YWx1ZXMgPSBqUXVlcnkubWFrZUFycmF5KCB2YWx1ZSApLFxyXG5cdFx0XHRcdFx0aSA9IG9wdGlvbnMubGVuZ3RoO1xyXG5cclxuXHRcdFx0XHR3aGlsZSAoIGktLSApIHtcclxuXHRcdFx0XHRcdG9wdGlvbiA9IG9wdGlvbnNbIGkgXTtcclxuXHRcdFx0XHRcdGlmICggKG9wdGlvbi5zZWxlY3RlZCA9IGpRdWVyeS5pbkFycmF5KCBvcHRpb24udmFsdWUsIHZhbHVlcyApID49IDApICkge1xyXG5cdFx0XHRcdFx0XHRvcHRpb25TZXQgPSB0cnVlO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0Ly8gRm9yY2UgYnJvd3NlcnMgdG8gYmVoYXZlIGNvbnNpc3RlbnRseSB3aGVuIG5vbi1tYXRjaGluZyB2YWx1ZSBpcyBzZXRcclxuXHRcdFx0XHRpZiAoICFvcHRpb25TZXQgKSB7XHJcblx0XHRcdFx0XHRlbGVtLnNlbGVjdGVkSW5kZXggPSAtMTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0cmV0dXJuIHZhbHVlcztcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdH1cclxufSk7XHJcblxyXG4vLyBSYWRpb3MgYW5kIGNoZWNrYm94ZXMgZ2V0dGVyL3NldHRlclxyXG5qUXVlcnkuZWFjaChbIFwicmFkaW9cIiwgXCJjaGVja2JveFwiIF0sIGZ1bmN0aW9uKCkge1xyXG5cdGpRdWVyeS52YWxIb29rc1sgdGhpcyBdID0ge1xyXG5cdFx0c2V0OiBmdW5jdGlvbiggZWxlbSwgdmFsdWUgKSB7XHJcblx0XHRcdGlmICggalF1ZXJ5LmlzQXJyYXkoIHZhbHVlICkgKSB7XHJcblx0XHRcdFx0cmV0dXJuICggZWxlbS5jaGVja2VkID0galF1ZXJ5LmluQXJyYXkoIGpRdWVyeShlbGVtKS52YWwoKSwgdmFsdWUgKSA+PSAwICk7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHR9O1xyXG5cdGlmICggIXN1cHBvcnQuY2hlY2tPbiApIHtcclxuXHRcdGpRdWVyeS52YWxIb29rc1sgdGhpcyBdLmdldCA9IGZ1bmN0aW9uKCBlbGVtICkge1xyXG5cdFx0XHRyZXR1cm4gZWxlbS5nZXRBdHRyaWJ1dGUoXCJ2YWx1ZVwiKSA9PT0gbnVsbCA/IFwib25cIiA6IGVsZW0udmFsdWU7XHJcblx0XHR9O1xyXG5cdH1cclxufSk7XHJcblxyXG5cclxuXHJcblxyXG4vLyBSZXR1cm4galF1ZXJ5IGZvciBhdHRyaWJ1dGVzLW9ubHkgaW5jbHVzaW9uXHJcblxyXG5cclxualF1ZXJ5LmVhY2goIChcImJsdXIgZm9jdXMgZm9jdXNpbiBmb2N1c291dCBsb2FkIHJlc2l6ZSBzY3JvbGwgdW5sb2FkIGNsaWNrIGRibGNsaWNrIFwiICtcclxuXHRcIm1vdXNlZG93biBtb3VzZXVwIG1vdXNlbW92ZSBtb3VzZW92ZXIgbW91c2VvdXQgbW91c2VlbnRlciBtb3VzZWxlYXZlIFwiICtcclxuXHRcImNoYW5nZSBzZWxlY3Qgc3VibWl0IGtleWRvd24ga2V5cHJlc3Mga2V5dXAgZXJyb3IgY29udGV4dG1lbnVcIikuc3BsaXQoXCIgXCIpLCBmdW5jdGlvbiggaSwgbmFtZSApIHtcclxuXHJcblx0Ly8gSGFuZGxlIGV2ZW50IGJpbmRpbmdcclxuXHRqUXVlcnkuZm5bIG5hbWUgXSA9IGZ1bmN0aW9uKCBkYXRhLCBmbiApIHtcclxuXHRcdHJldHVybiBhcmd1bWVudHMubGVuZ3RoID4gMCA/XHJcblx0XHRcdHRoaXMub24oIG5hbWUsIG51bGwsIGRhdGEsIGZuICkgOlxyXG5cdFx0XHR0aGlzLnRyaWdnZXIoIG5hbWUgKTtcclxuXHR9O1xyXG59KTtcclxuXHJcbmpRdWVyeS5mbi5leHRlbmQoe1xyXG5cdGhvdmVyOiBmdW5jdGlvbiggZm5PdmVyLCBmbk91dCApIHtcclxuXHRcdHJldHVybiB0aGlzLm1vdXNlZW50ZXIoIGZuT3ZlciApLm1vdXNlbGVhdmUoIGZuT3V0IHx8IGZuT3ZlciApO1xyXG5cdH0sXHJcblxyXG5cdGJpbmQ6IGZ1bmN0aW9uKCB0eXBlcywgZGF0YSwgZm4gKSB7XHJcblx0XHRyZXR1cm4gdGhpcy5vbiggdHlwZXMsIG51bGwsIGRhdGEsIGZuICk7XHJcblx0fSxcclxuXHR1bmJpbmQ6IGZ1bmN0aW9uKCB0eXBlcywgZm4gKSB7XHJcblx0XHRyZXR1cm4gdGhpcy5vZmYoIHR5cGVzLCBudWxsLCBmbiApO1xyXG5cdH0sXHJcblxyXG5cdGRlbGVnYXRlOiBmdW5jdGlvbiggc2VsZWN0b3IsIHR5cGVzLCBkYXRhLCBmbiApIHtcclxuXHRcdHJldHVybiB0aGlzLm9uKCB0eXBlcywgc2VsZWN0b3IsIGRhdGEsIGZuICk7XHJcblx0fSxcclxuXHR1bmRlbGVnYXRlOiBmdW5jdGlvbiggc2VsZWN0b3IsIHR5cGVzLCBmbiApIHtcclxuXHRcdC8vICggbmFtZXNwYWNlICkgb3IgKCBzZWxlY3RvciwgdHlwZXMgWywgZm5dIClcclxuXHRcdHJldHVybiBhcmd1bWVudHMubGVuZ3RoID09PSAxID8gdGhpcy5vZmYoIHNlbGVjdG9yLCBcIioqXCIgKSA6IHRoaXMub2ZmKCB0eXBlcywgc2VsZWN0b3IgfHwgXCIqKlwiLCBmbiApO1xyXG5cdH1cclxufSk7XHJcblxyXG5cclxudmFyIG5vbmNlID0galF1ZXJ5Lm5vdygpO1xyXG5cclxudmFyIHJxdWVyeSA9ICgvXFw/Lyk7XHJcblxyXG5cclxuXHJcbi8vIFN1cHBvcnQ6IEFuZHJvaWQgMi4zXHJcbi8vIFdvcmthcm91bmQgZmFpbHVyZSB0byBzdHJpbmctY2FzdCBudWxsIGlucHV0XHJcbmpRdWVyeS5wYXJzZUpTT04gPSBmdW5jdGlvbiggZGF0YSApIHtcclxuXHRyZXR1cm4gSlNPTi5wYXJzZSggZGF0YSArIFwiXCIgKTtcclxufTtcclxuXHJcblxyXG4vLyBDcm9zcy1icm93c2VyIHhtbCBwYXJzaW5nXHJcbmpRdWVyeS5wYXJzZVhNTCA9IGZ1bmN0aW9uKCBkYXRhICkge1xyXG5cdHZhciB4bWwsIHRtcDtcclxuXHRpZiAoICFkYXRhIHx8IHR5cGVvZiBkYXRhICE9PSBcInN0cmluZ1wiICkge1xyXG5cdFx0cmV0dXJuIG51bGw7XHJcblx0fVxyXG5cclxuXHQvLyBTdXBwb3J0OiBJRTlcclxuXHR0cnkge1xyXG5cdFx0dG1wID0gbmV3IERPTVBhcnNlcigpO1xyXG5cdFx0eG1sID0gdG1wLnBhcnNlRnJvbVN0cmluZyggZGF0YSwgXCJ0ZXh0L3htbFwiICk7XHJcblx0fSBjYXRjaCAoIGUgKSB7XHJcblx0XHR4bWwgPSB1bmRlZmluZWQ7XHJcblx0fVxyXG5cclxuXHRpZiAoICF4bWwgfHwgeG1sLmdldEVsZW1lbnRzQnlUYWdOYW1lKCBcInBhcnNlcmVycm9yXCIgKS5sZW5ndGggKSB7XHJcblx0XHRqUXVlcnkuZXJyb3IoIFwiSW52YWxpZCBYTUw6IFwiICsgZGF0YSApO1xyXG5cdH1cclxuXHRyZXR1cm4geG1sO1xyXG59O1xyXG5cclxuXHJcbnZhclxyXG5cdHJoYXNoID0gLyMuKiQvLFxyXG5cdHJ0cyA9IC8oWz8mXSlfPVteJl0qLyxcclxuXHRyaGVhZGVycyA9IC9eKC4qPyk6WyBcXHRdKihbXlxcclxcbl0qKSQvbWcsXHJcblx0Ly8gIzc2NTMsICM4MTI1LCAjODE1MjogbG9jYWwgcHJvdG9jb2wgZGV0ZWN0aW9uXHJcblx0cmxvY2FsUHJvdG9jb2wgPSAvXig/OmFib3V0fGFwcHxhcHAtc3RvcmFnZXwuKy1leHRlbnNpb258ZmlsZXxyZXN8d2lkZ2V0KTokLyxcclxuXHRybm9Db250ZW50ID0gL14oPzpHRVR8SEVBRCkkLyxcclxuXHRycHJvdG9jb2wgPSAvXlxcL1xcLy8sXHJcblx0cnVybCA9IC9eKFtcXHcuKy1dKzopKD86XFwvXFwvKD86W15cXC8/I10qQHwpKFteXFwvPyM6XSopKD86OihcXGQrKXwpfCkvLFxyXG5cclxuXHQvKiBQcmVmaWx0ZXJzXHJcblx0ICogMSkgVGhleSBhcmUgdXNlZnVsIHRvIGludHJvZHVjZSBjdXN0b20gZGF0YVR5cGVzIChzZWUgYWpheC9qc29ucC5qcyBmb3IgYW4gZXhhbXBsZSlcclxuXHQgKiAyKSBUaGVzZSBhcmUgY2FsbGVkOlxyXG5cdCAqICAgIC0gQkVGT1JFIGFza2luZyBmb3IgYSB0cmFuc3BvcnRcclxuXHQgKiAgICAtIEFGVEVSIHBhcmFtIHNlcmlhbGl6YXRpb24gKHMuZGF0YSBpcyBhIHN0cmluZyBpZiBzLnByb2Nlc3NEYXRhIGlzIHRydWUpXHJcblx0ICogMykga2V5IGlzIHRoZSBkYXRhVHlwZVxyXG5cdCAqIDQpIHRoZSBjYXRjaGFsbCBzeW1ib2wgXCIqXCIgY2FuIGJlIHVzZWRcclxuXHQgKiA1KSBleGVjdXRpb24gd2lsbCBzdGFydCB3aXRoIHRyYW5zcG9ydCBkYXRhVHlwZSBhbmQgVEhFTiBjb250aW51ZSBkb3duIHRvIFwiKlwiIGlmIG5lZWRlZFxyXG5cdCAqL1xyXG5cdHByZWZpbHRlcnMgPSB7fSxcclxuXHJcblx0LyogVHJhbnNwb3J0cyBiaW5kaW5nc1xyXG5cdCAqIDEpIGtleSBpcyB0aGUgZGF0YVR5cGVcclxuXHQgKiAyKSB0aGUgY2F0Y2hhbGwgc3ltYm9sIFwiKlwiIGNhbiBiZSB1c2VkXHJcblx0ICogMykgc2VsZWN0aW9uIHdpbGwgc3RhcnQgd2l0aCB0cmFuc3BvcnQgZGF0YVR5cGUgYW5kIFRIRU4gZ28gdG8gXCIqXCIgaWYgbmVlZGVkXHJcblx0ICovXHJcblx0dHJhbnNwb3J0cyA9IHt9LFxyXG5cclxuXHQvLyBBdm9pZCBjb21tZW50LXByb2xvZyBjaGFyIHNlcXVlbmNlICgjMTAwOTgpOyBtdXN0IGFwcGVhc2UgbGludCBhbmQgZXZhZGUgY29tcHJlc3Npb25cclxuXHRhbGxUeXBlcyA9IFwiKi9cIi5jb25jYXQoIFwiKlwiICksXHJcblxyXG5cdC8vIERvY3VtZW50IGxvY2F0aW9uXHJcblx0YWpheExvY2F0aW9uID0gd2luZG93LmxvY2F0aW9uLmhyZWYsXHJcblxyXG5cdC8vIFNlZ21lbnQgbG9jYXRpb24gaW50byBwYXJ0c1xyXG5cdGFqYXhMb2NQYXJ0cyA9IHJ1cmwuZXhlYyggYWpheExvY2F0aW9uLnRvTG93ZXJDYXNlKCkgKSB8fCBbXTtcclxuXHJcbi8vIEJhc2UgXCJjb25zdHJ1Y3RvclwiIGZvciBqUXVlcnkuYWpheFByZWZpbHRlciBhbmQgalF1ZXJ5LmFqYXhUcmFuc3BvcnRcclxuZnVuY3Rpb24gYWRkVG9QcmVmaWx0ZXJzT3JUcmFuc3BvcnRzKCBzdHJ1Y3R1cmUgKSB7XHJcblxyXG5cdC8vIGRhdGFUeXBlRXhwcmVzc2lvbiBpcyBvcHRpb25hbCBhbmQgZGVmYXVsdHMgdG8gXCIqXCJcclxuXHRyZXR1cm4gZnVuY3Rpb24oIGRhdGFUeXBlRXhwcmVzc2lvbiwgZnVuYyApIHtcclxuXHJcblx0XHRpZiAoIHR5cGVvZiBkYXRhVHlwZUV4cHJlc3Npb24gIT09IFwic3RyaW5nXCIgKSB7XHJcblx0XHRcdGZ1bmMgPSBkYXRhVHlwZUV4cHJlc3Npb247XHJcblx0XHRcdGRhdGFUeXBlRXhwcmVzc2lvbiA9IFwiKlwiO1xyXG5cdFx0fVxyXG5cclxuXHRcdHZhciBkYXRhVHlwZSxcclxuXHRcdFx0aSA9IDAsXHJcblx0XHRcdGRhdGFUeXBlcyA9IGRhdGFUeXBlRXhwcmVzc2lvbi50b0xvd2VyQ2FzZSgpLm1hdGNoKCBybm90d2hpdGUgKSB8fCBbXTtcclxuXHJcblx0XHRpZiAoIGpRdWVyeS5pc0Z1bmN0aW9uKCBmdW5jICkgKSB7XHJcblx0XHRcdC8vIEZvciBlYWNoIGRhdGFUeXBlIGluIHRoZSBkYXRhVHlwZUV4cHJlc3Npb25cclxuXHRcdFx0d2hpbGUgKCAoZGF0YVR5cGUgPSBkYXRhVHlwZXNbaSsrXSkgKSB7XHJcblx0XHRcdFx0Ly8gUHJlcGVuZCBpZiByZXF1ZXN0ZWRcclxuXHRcdFx0XHRpZiAoIGRhdGFUeXBlWzBdID09PSBcIitcIiApIHtcclxuXHRcdFx0XHRcdGRhdGFUeXBlID0gZGF0YVR5cGUuc2xpY2UoIDEgKSB8fCBcIipcIjtcclxuXHRcdFx0XHRcdChzdHJ1Y3R1cmVbIGRhdGFUeXBlIF0gPSBzdHJ1Y3R1cmVbIGRhdGFUeXBlIF0gfHwgW10pLnVuc2hpZnQoIGZ1bmMgKTtcclxuXHJcblx0XHRcdFx0Ly8gT3RoZXJ3aXNlIGFwcGVuZFxyXG5cdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHQoc3RydWN0dXJlWyBkYXRhVHlwZSBdID0gc3RydWN0dXJlWyBkYXRhVHlwZSBdIHx8IFtdKS5wdXNoKCBmdW5jICk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0fTtcclxufVxyXG5cclxuLy8gQmFzZSBpbnNwZWN0aW9uIGZ1bmN0aW9uIGZvciBwcmVmaWx0ZXJzIGFuZCB0cmFuc3BvcnRzXHJcbmZ1bmN0aW9uIGluc3BlY3RQcmVmaWx0ZXJzT3JUcmFuc3BvcnRzKCBzdHJ1Y3R1cmUsIG9wdGlvbnMsIG9yaWdpbmFsT3B0aW9ucywganFYSFIgKSB7XHJcblxyXG5cdHZhciBpbnNwZWN0ZWQgPSB7fSxcclxuXHRcdHNlZWtpbmdUcmFuc3BvcnQgPSAoIHN0cnVjdHVyZSA9PT0gdHJhbnNwb3J0cyApO1xyXG5cclxuXHRmdW5jdGlvbiBpbnNwZWN0KCBkYXRhVHlwZSApIHtcclxuXHRcdHZhciBzZWxlY3RlZDtcclxuXHRcdGluc3BlY3RlZFsgZGF0YVR5cGUgXSA9IHRydWU7XHJcblx0XHRqUXVlcnkuZWFjaCggc3RydWN0dXJlWyBkYXRhVHlwZSBdIHx8IFtdLCBmdW5jdGlvbiggXywgcHJlZmlsdGVyT3JGYWN0b3J5ICkge1xyXG5cdFx0XHR2YXIgZGF0YVR5cGVPclRyYW5zcG9ydCA9IHByZWZpbHRlck9yRmFjdG9yeSggb3B0aW9ucywgb3JpZ2luYWxPcHRpb25zLCBqcVhIUiApO1xyXG5cdFx0XHRpZiAoIHR5cGVvZiBkYXRhVHlwZU9yVHJhbnNwb3J0ID09PSBcInN0cmluZ1wiICYmICFzZWVraW5nVHJhbnNwb3J0ICYmICFpbnNwZWN0ZWRbIGRhdGFUeXBlT3JUcmFuc3BvcnQgXSApIHtcclxuXHRcdFx0XHRvcHRpb25zLmRhdGFUeXBlcy51bnNoaWZ0KCBkYXRhVHlwZU9yVHJhbnNwb3J0ICk7XHJcblx0XHRcdFx0aW5zcGVjdCggZGF0YVR5cGVPclRyYW5zcG9ydCApO1xyXG5cdFx0XHRcdHJldHVybiBmYWxzZTtcclxuXHRcdFx0fSBlbHNlIGlmICggc2Vla2luZ1RyYW5zcG9ydCApIHtcclxuXHRcdFx0XHRyZXR1cm4gISggc2VsZWN0ZWQgPSBkYXRhVHlwZU9yVHJhbnNwb3J0ICk7XHJcblx0XHRcdH1cclxuXHRcdH0pO1xyXG5cdFx0cmV0dXJuIHNlbGVjdGVkO1xyXG5cdH1cclxuXHJcblx0cmV0dXJuIGluc3BlY3QoIG9wdGlvbnMuZGF0YVR5cGVzWyAwIF0gKSB8fCAhaW5zcGVjdGVkWyBcIipcIiBdICYmIGluc3BlY3QoIFwiKlwiICk7XHJcbn1cclxuXHJcbi8vIEEgc3BlY2lhbCBleHRlbmQgZm9yIGFqYXggb3B0aW9uc1xyXG4vLyB0aGF0IHRha2VzIFwiZmxhdFwiIG9wdGlvbnMgKG5vdCB0byBiZSBkZWVwIGV4dGVuZGVkKVxyXG4vLyBGaXhlcyAjOTg4N1xyXG5mdW5jdGlvbiBhamF4RXh0ZW5kKCB0YXJnZXQsIHNyYyApIHtcclxuXHR2YXIga2V5LCBkZWVwLFxyXG5cdFx0ZmxhdE9wdGlvbnMgPSBqUXVlcnkuYWpheFNldHRpbmdzLmZsYXRPcHRpb25zIHx8IHt9O1xyXG5cclxuXHRmb3IgKCBrZXkgaW4gc3JjICkge1xyXG5cdFx0aWYgKCBzcmNbIGtleSBdICE9PSB1bmRlZmluZWQgKSB7XHJcblx0XHRcdCggZmxhdE9wdGlvbnNbIGtleSBdID8gdGFyZ2V0IDogKCBkZWVwIHx8IChkZWVwID0ge30pICkgKVsga2V5IF0gPSBzcmNbIGtleSBdO1xyXG5cdFx0fVxyXG5cdH1cclxuXHRpZiAoIGRlZXAgKSB7XHJcblx0XHRqUXVlcnkuZXh0ZW5kKCB0cnVlLCB0YXJnZXQsIGRlZXAgKTtcclxuXHR9XHJcblxyXG5cdHJldHVybiB0YXJnZXQ7XHJcbn1cclxuXHJcbi8qIEhhbmRsZXMgcmVzcG9uc2VzIHRvIGFuIGFqYXggcmVxdWVzdDpcclxuICogLSBmaW5kcyB0aGUgcmlnaHQgZGF0YVR5cGUgKG1lZGlhdGVzIGJldHdlZW4gY29udGVudC10eXBlIGFuZCBleHBlY3RlZCBkYXRhVHlwZSlcclxuICogLSByZXR1cm5zIHRoZSBjb3JyZXNwb25kaW5nIHJlc3BvbnNlXHJcbiAqL1xyXG5mdW5jdGlvbiBhamF4SGFuZGxlUmVzcG9uc2VzKCBzLCBqcVhIUiwgcmVzcG9uc2VzICkge1xyXG5cclxuXHR2YXIgY3QsIHR5cGUsIGZpbmFsRGF0YVR5cGUsIGZpcnN0RGF0YVR5cGUsXHJcblx0XHRjb250ZW50cyA9IHMuY29udGVudHMsXHJcblx0XHRkYXRhVHlwZXMgPSBzLmRhdGFUeXBlcztcclxuXHJcblx0Ly8gUmVtb3ZlIGF1dG8gZGF0YVR5cGUgYW5kIGdldCBjb250ZW50LXR5cGUgaW4gdGhlIHByb2Nlc3NcclxuXHR3aGlsZSAoIGRhdGFUeXBlc1sgMCBdID09PSBcIipcIiApIHtcclxuXHRcdGRhdGFUeXBlcy5zaGlmdCgpO1xyXG5cdFx0aWYgKCBjdCA9PT0gdW5kZWZpbmVkICkge1xyXG5cdFx0XHRjdCA9IHMubWltZVR5cGUgfHwganFYSFIuZ2V0UmVzcG9uc2VIZWFkZXIoXCJDb250ZW50LVR5cGVcIik7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHQvLyBDaGVjayBpZiB3ZSdyZSBkZWFsaW5nIHdpdGggYSBrbm93biBjb250ZW50LXR5cGVcclxuXHRpZiAoIGN0ICkge1xyXG5cdFx0Zm9yICggdHlwZSBpbiBjb250ZW50cyApIHtcclxuXHRcdFx0aWYgKCBjb250ZW50c1sgdHlwZSBdICYmIGNvbnRlbnRzWyB0eXBlIF0udGVzdCggY3QgKSApIHtcclxuXHRcdFx0XHRkYXRhVHlwZXMudW5zaGlmdCggdHlwZSApO1xyXG5cdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHQvLyBDaGVjayB0byBzZWUgaWYgd2UgaGF2ZSBhIHJlc3BvbnNlIGZvciB0aGUgZXhwZWN0ZWQgZGF0YVR5cGVcclxuXHRpZiAoIGRhdGFUeXBlc1sgMCBdIGluIHJlc3BvbnNlcyApIHtcclxuXHRcdGZpbmFsRGF0YVR5cGUgPSBkYXRhVHlwZXNbIDAgXTtcclxuXHR9IGVsc2Uge1xyXG5cdFx0Ly8gVHJ5IGNvbnZlcnRpYmxlIGRhdGFUeXBlc1xyXG5cdFx0Zm9yICggdHlwZSBpbiByZXNwb25zZXMgKSB7XHJcblx0XHRcdGlmICggIWRhdGFUeXBlc1sgMCBdIHx8IHMuY29udmVydGVyc1sgdHlwZSArIFwiIFwiICsgZGF0YVR5cGVzWzBdIF0gKSB7XHJcblx0XHRcdFx0ZmluYWxEYXRhVHlwZSA9IHR5cGU7XHJcblx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdH1cclxuXHRcdFx0aWYgKCAhZmlyc3REYXRhVHlwZSApIHtcclxuXHRcdFx0XHRmaXJzdERhdGFUeXBlID0gdHlwZTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdFx0Ly8gT3IganVzdCB1c2UgZmlyc3Qgb25lXHJcblx0XHRmaW5hbERhdGFUeXBlID0gZmluYWxEYXRhVHlwZSB8fCBmaXJzdERhdGFUeXBlO1xyXG5cdH1cclxuXHJcblx0Ly8gSWYgd2UgZm91bmQgYSBkYXRhVHlwZVxyXG5cdC8vIFdlIGFkZCB0aGUgZGF0YVR5cGUgdG8gdGhlIGxpc3QgaWYgbmVlZGVkXHJcblx0Ly8gYW5kIHJldHVybiB0aGUgY29ycmVzcG9uZGluZyByZXNwb25zZVxyXG5cdGlmICggZmluYWxEYXRhVHlwZSApIHtcclxuXHRcdGlmICggZmluYWxEYXRhVHlwZSAhPT0gZGF0YVR5cGVzWyAwIF0gKSB7XHJcblx0XHRcdGRhdGFUeXBlcy51bnNoaWZ0KCBmaW5hbERhdGFUeXBlICk7XHJcblx0XHR9XHJcblx0XHRyZXR1cm4gcmVzcG9uc2VzWyBmaW5hbERhdGFUeXBlIF07XHJcblx0fVxyXG59XHJcblxyXG4vKiBDaGFpbiBjb252ZXJzaW9ucyBnaXZlbiB0aGUgcmVxdWVzdCBhbmQgdGhlIG9yaWdpbmFsIHJlc3BvbnNlXHJcbiAqIEFsc28gc2V0cyB0aGUgcmVzcG9uc2VYWFggZmllbGRzIG9uIHRoZSBqcVhIUiBpbnN0YW5jZVxyXG4gKi9cclxuZnVuY3Rpb24gYWpheENvbnZlcnQoIHMsIHJlc3BvbnNlLCBqcVhIUiwgaXNTdWNjZXNzICkge1xyXG5cdHZhciBjb252MiwgY3VycmVudCwgY29udiwgdG1wLCBwcmV2LFxyXG5cdFx0Y29udmVydGVycyA9IHt9LFxyXG5cdFx0Ly8gV29yayB3aXRoIGEgY29weSBvZiBkYXRhVHlwZXMgaW4gY2FzZSB3ZSBuZWVkIHRvIG1vZGlmeSBpdCBmb3IgY29udmVyc2lvblxyXG5cdFx0ZGF0YVR5cGVzID0gcy5kYXRhVHlwZXMuc2xpY2UoKTtcclxuXHJcblx0Ly8gQ3JlYXRlIGNvbnZlcnRlcnMgbWFwIHdpdGggbG93ZXJjYXNlZCBrZXlzXHJcblx0aWYgKCBkYXRhVHlwZXNbIDEgXSApIHtcclxuXHRcdGZvciAoIGNvbnYgaW4gcy5jb252ZXJ0ZXJzICkge1xyXG5cdFx0XHRjb252ZXJ0ZXJzWyBjb252LnRvTG93ZXJDYXNlKCkgXSA9IHMuY29udmVydGVyc1sgY29udiBdO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0Y3VycmVudCA9IGRhdGFUeXBlcy5zaGlmdCgpO1xyXG5cclxuXHQvLyBDb252ZXJ0IHRvIGVhY2ggc2VxdWVudGlhbCBkYXRhVHlwZVxyXG5cdHdoaWxlICggY3VycmVudCApIHtcclxuXHJcblx0XHRpZiAoIHMucmVzcG9uc2VGaWVsZHNbIGN1cnJlbnQgXSApIHtcclxuXHRcdFx0anFYSFJbIHMucmVzcG9uc2VGaWVsZHNbIGN1cnJlbnQgXSBdID0gcmVzcG9uc2U7XHJcblx0XHR9XHJcblxyXG5cdFx0Ly8gQXBwbHkgdGhlIGRhdGFGaWx0ZXIgaWYgcHJvdmlkZWRcclxuXHRcdGlmICggIXByZXYgJiYgaXNTdWNjZXNzICYmIHMuZGF0YUZpbHRlciApIHtcclxuXHRcdFx0cmVzcG9uc2UgPSBzLmRhdGFGaWx0ZXIoIHJlc3BvbnNlLCBzLmRhdGFUeXBlICk7XHJcblx0XHR9XHJcblxyXG5cdFx0cHJldiA9IGN1cnJlbnQ7XHJcblx0XHRjdXJyZW50ID0gZGF0YVR5cGVzLnNoaWZ0KCk7XHJcblxyXG5cdFx0aWYgKCBjdXJyZW50ICkge1xyXG5cclxuXHRcdC8vIFRoZXJlJ3Mgb25seSB3b3JrIHRvIGRvIGlmIGN1cnJlbnQgZGF0YVR5cGUgaXMgbm9uLWF1dG9cclxuXHRcdFx0aWYgKCBjdXJyZW50ID09PSBcIipcIiApIHtcclxuXHJcblx0XHRcdFx0Y3VycmVudCA9IHByZXY7XHJcblxyXG5cdFx0XHQvLyBDb252ZXJ0IHJlc3BvbnNlIGlmIHByZXYgZGF0YVR5cGUgaXMgbm9uLWF1dG8gYW5kIGRpZmZlcnMgZnJvbSBjdXJyZW50XHJcblx0XHRcdH0gZWxzZSBpZiAoIHByZXYgIT09IFwiKlwiICYmIHByZXYgIT09IGN1cnJlbnQgKSB7XHJcblxyXG5cdFx0XHRcdC8vIFNlZWsgYSBkaXJlY3QgY29udmVydGVyXHJcblx0XHRcdFx0Y29udiA9IGNvbnZlcnRlcnNbIHByZXYgKyBcIiBcIiArIGN1cnJlbnQgXSB8fCBjb252ZXJ0ZXJzWyBcIiogXCIgKyBjdXJyZW50IF07XHJcblxyXG5cdFx0XHRcdC8vIElmIG5vbmUgZm91bmQsIHNlZWsgYSBwYWlyXHJcblx0XHRcdFx0aWYgKCAhY29udiApIHtcclxuXHRcdFx0XHRcdGZvciAoIGNvbnYyIGluIGNvbnZlcnRlcnMgKSB7XHJcblxyXG5cdFx0XHRcdFx0XHQvLyBJZiBjb252MiBvdXRwdXRzIGN1cnJlbnRcclxuXHRcdFx0XHRcdFx0dG1wID0gY29udjIuc3BsaXQoIFwiIFwiICk7XHJcblx0XHRcdFx0XHRcdGlmICggdG1wWyAxIF0gPT09IGN1cnJlbnQgKSB7XHJcblxyXG5cdFx0XHRcdFx0XHRcdC8vIElmIHByZXYgY2FuIGJlIGNvbnZlcnRlZCB0byBhY2NlcHRlZCBpbnB1dFxyXG5cdFx0XHRcdFx0XHRcdGNvbnYgPSBjb252ZXJ0ZXJzWyBwcmV2ICsgXCIgXCIgKyB0bXBbIDAgXSBdIHx8XHJcblx0XHRcdFx0XHRcdFx0XHRjb252ZXJ0ZXJzWyBcIiogXCIgKyB0bXBbIDAgXSBdO1xyXG5cdFx0XHRcdFx0XHRcdGlmICggY29udiApIHtcclxuXHRcdFx0XHRcdFx0XHRcdC8vIENvbmRlbnNlIGVxdWl2YWxlbmNlIGNvbnZlcnRlcnNcclxuXHRcdFx0XHRcdFx0XHRcdGlmICggY29udiA9PT0gdHJ1ZSApIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0Y29udiA9IGNvbnZlcnRlcnNbIGNvbnYyIF07XHJcblxyXG5cdFx0XHRcdFx0XHRcdFx0Ly8gT3RoZXJ3aXNlLCBpbnNlcnQgdGhlIGludGVybWVkaWF0ZSBkYXRhVHlwZVxyXG5cdFx0XHRcdFx0XHRcdFx0fSBlbHNlIGlmICggY29udmVydGVyc1sgY29udjIgXSAhPT0gdHJ1ZSApIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0Y3VycmVudCA9IHRtcFsgMCBdO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRkYXRhVHlwZXMudW5zaGlmdCggdG1wWyAxIF0gKTtcclxuXHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0Ly8gQXBwbHkgY29udmVydGVyIChpZiBub3QgYW4gZXF1aXZhbGVuY2UpXHJcblx0XHRcdFx0aWYgKCBjb252ICE9PSB0cnVlICkge1xyXG5cclxuXHRcdFx0XHRcdC8vIFVubGVzcyBlcnJvcnMgYXJlIGFsbG93ZWQgdG8gYnViYmxlLCBjYXRjaCBhbmQgcmV0dXJuIHRoZW1cclxuXHRcdFx0XHRcdGlmICggY29udiAmJiBzWyBcInRocm93c1wiIF0gKSB7XHJcblx0XHRcdFx0XHRcdHJlc3BvbnNlID0gY29udiggcmVzcG9uc2UgKTtcclxuXHRcdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRcdHRyeSB7XHJcblx0XHRcdFx0XHRcdFx0cmVzcG9uc2UgPSBjb252KCByZXNwb25zZSApO1xyXG5cdFx0XHRcdFx0XHR9IGNhdGNoICggZSApIHtcclxuXHRcdFx0XHRcdFx0XHRyZXR1cm4geyBzdGF0ZTogXCJwYXJzZXJlcnJvclwiLCBlcnJvcjogY29udiA/IGUgOiBcIk5vIGNvbnZlcnNpb24gZnJvbSBcIiArIHByZXYgKyBcIiB0byBcIiArIGN1cnJlbnQgfTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0cmV0dXJuIHsgc3RhdGU6IFwic3VjY2Vzc1wiLCBkYXRhOiByZXNwb25zZSB9O1xyXG59XHJcblxyXG5qUXVlcnkuZXh0ZW5kKHtcclxuXHJcblx0Ly8gQ291bnRlciBmb3IgaG9sZGluZyB0aGUgbnVtYmVyIG9mIGFjdGl2ZSBxdWVyaWVzXHJcblx0YWN0aXZlOiAwLFxyXG5cclxuXHQvLyBMYXN0LU1vZGlmaWVkIGhlYWRlciBjYWNoZSBmb3IgbmV4dCByZXF1ZXN0XHJcblx0bGFzdE1vZGlmaWVkOiB7fSxcclxuXHRldGFnOiB7fSxcclxuXHJcblx0YWpheFNldHRpbmdzOiB7XHJcblx0XHR1cmw6IGFqYXhMb2NhdGlvbixcclxuXHRcdHR5cGU6IFwiR0VUXCIsXHJcblx0XHRpc0xvY2FsOiBybG9jYWxQcm90b2NvbC50ZXN0KCBhamF4TG9jUGFydHNbIDEgXSApLFxyXG5cdFx0Z2xvYmFsOiB0cnVlLFxyXG5cdFx0cHJvY2Vzc0RhdGE6IHRydWUsXHJcblx0XHRhc3luYzogdHJ1ZSxcclxuXHRcdGNvbnRlbnRUeXBlOiBcImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZDsgY2hhcnNldD1VVEYtOFwiLFxyXG5cdFx0LypcclxuXHRcdHRpbWVvdXQ6IDAsXHJcblx0XHRkYXRhOiBudWxsLFxyXG5cdFx0ZGF0YVR5cGU6IG51bGwsXHJcblx0XHR1c2VybmFtZTogbnVsbCxcclxuXHRcdHBhc3N3b3JkOiBudWxsLFxyXG5cdFx0Y2FjaGU6IG51bGwsXHJcblx0XHR0aHJvd3M6IGZhbHNlLFxyXG5cdFx0dHJhZGl0aW9uYWw6IGZhbHNlLFxyXG5cdFx0aGVhZGVyczoge30sXHJcblx0XHQqL1xyXG5cclxuXHRcdGFjY2VwdHM6IHtcclxuXHRcdFx0XCIqXCI6IGFsbFR5cGVzLFxyXG5cdFx0XHR0ZXh0OiBcInRleHQvcGxhaW5cIixcclxuXHRcdFx0aHRtbDogXCJ0ZXh0L2h0bWxcIixcclxuXHRcdFx0eG1sOiBcImFwcGxpY2F0aW9uL3htbCwgdGV4dC94bWxcIixcclxuXHRcdFx0anNvbjogXCJhcHBsaWNhdGlvbi9qc29uLCB0ZXh0L2phdmFzY3JpcHRcIlxyXG5cdFx0fSxcclxuXHJcblx0XHRjb250ZW50czoge1xyXG5cdFx0XHR4bWw6IC94bWwvLFxyXG5cdFx0XHRodG1sOiAvaHRtbC8sXHJcblx0XHRcdGpzb246IC9qc29uL1xyXG5cdFx0fSxcclxuXHJcblx0XHRyZXNwb25zZUZpZWxkczoge1xyXG5cdFx0XHR4bWw6IFwicmVzcG9uc2VYTUxcIixcclxuXHRcdFx0dGV4dDogXCJyZXNwb25zZVRleHRcIixcclxuXHRcdFx0anNvbjogXCJyZXNwb25zZUpTT05cIlxyXG5cdFx0fSxcclxuXHJcblx0XHQvLyBEYXRhIGNvbnZlcnRlcnNcclxuXHRcdC8vIEtleXMgc2VwYXJhdGUgc291cmNlIChvciBjYXRjaGFsbCBcIipcIikgYW5kIGRlc3RpbmF0aW9uIHR5cGVzIHdpdGggYSBzaW5nbGUgc3BhY2VcclxuXHRcdGNvbnZlcnRlcnM6IHtcclxuXHJcblx0XHRcdC8vIENvbnZlcnQgYW55dGhpbmcgdG8gdGV4dFxyXG5cdFx0XHRcIiogdGV4dFwiOiBTdHJpbmcsXHJcblxyXG5cdFx0XHQvLyBUZXh0IHRvIGh0bWwgKHRydWUgPSBubyB0cmFuc2Zvcm1hdGlvbilcclxuXHRcdFx0XCJ0ZXh0IGh0bWxcIjogdHJ1ZSxcclxuXHJcblx0XHRcdC8vIEV2YWx1YXRlIHRleHQgYXMgYSBqc29uIGV4cHJlc3Npb25cclxuXHRcdFx0XCJ0ZXh0IGpzb25cIjogalF1ZXJ5LnBhcnNlSlNPTixcclxuXHJcblx0XHRcdC8vIFBhcnNlIHRleHQgYXMgeG1sXHJcblx0XHRcdFwidGV4dCB4bWxcIjogalF1ZXJ5LnBhcnNlWE1MXHJcblx0XHR9LFxyXG5cclxuXHRcdC8vIEZvciBvcHRpb25zIHRoYXQgc2hvdWxkbid0IGJlIGRlZXAgZXh0ZW5kZWQ6XHJcblx0XHQvLyB5b3UgY2FuIGFkZCB5b3VyIG93biBjdXN0b20gb3B0aW9ucyBoZXJlIGlmXHJcblx0XHQvLyBhbmQgd2hlbiB5b3UgY3JlYXRlIG9uZSB0aGF0IHNob3VsZG4ndCBiZVxyXG5cdFx0Ly8gZGVlcCBleHRlbmRlZCAoc2VlIGFqYXhFeHRlbmQpXHJcblx0XHRmbGF0T3B0aW9uczoge1xyXG5cdFx0XHR1cmw6IHRydWUsXHJcblx0XHRcdGNvbnRleHQ6IHRydWVcclxuXHRcdH1cclxuXHR9LFxyXG5cclxuXHQvLyBDcmVhdGVzIGEgZnVsbCBmbGVkZ2VkIHNldHRpbmdzIG9iamVjdCBpbnRvIHRhcmdldFxyXG5cdC8vIHdpdGggYm90aCBhamF4U2V0dGluZ3MgYW5kIHNldHRpbmdzIGZpZWxkcy5cclxuXHQvLyBJZiB0YXJnZXQgaXMgb21pdHRlZCwgd3JpdGVzIGludG8gYWpheFNldHRpbmdzLlxyXG5cdGFqYXhTZXR1cDogZnVuY3Rpb24oIHRhcmdldCwgc2V0dGluZ3MgKSB7XHJcblx0XHRyZXR1cm4gc2V0dGluZ3MgP1xyXG5cclxuXHRcdFx0Ly8gQnVpbGRpbmcgYSBzZXR0aW5ncyBvYmplY3RcclxuXHRcdFx0YWpheEV4dGVuZCggYWpheEV4dGVuZCggdGFyZ2V0LCBqUXVlcnkuYWpheFNldHRpbmdzICksIHNldHRpbmdzICkgOlxyXG5cclxuXHRcdFx0Ly8gRXh0ZW5kaW5nIGFqYXhTZXR0aW5nc1xyXG5cdFx0XHRhamF4RXh0ZW5kKCBqUXVlcnkuYWpheFNldHRpbmdzLCB0YXJnZXQgKTtcclxuXHR9LFxyXG5cclxuXHRhamF4UHJlZmlsdGVyOiBhZGRUb1ByZWZpbHRlcnNPclRyYW5zcG9ydHMoIHByZWZpbHRlcnMgKSxcclxuXHRhamF4VHJhbnNwb3J0OiBhZGRUb1ByZWZpbHRlcnNPclRyYW5zcG9ydHMoIHRyYW5zcG9ydHMgKSxcclxuXHJcblx0Ly8gTWFpbiBtZXRob2RcclxuXHRhamF4OiBmdW5jdGlvbiggdXJsLCBvcHRpb25zICkge1xyXG5cclxuXHRcdC8vIElmIHVybCBpcyBhbiBvYmplY3QsIHNpbXVsYXRlIHByZS0xLjUgc2lnbmF0dXJlXHJcblx0XHRpZiAoIHR5cGVvZiB1cmwgPT09IFwib2JqZWN0XCIgKSB7XHJcblx0XHRcdG9wdGlvbnMgPSB1cmw7XHJcblx0XHRcdHVybCA9IHVuZGVmaW5lZDtcclxuXHRcdH1cclxuXHJcblx0XHQvLyBGb3JjZSBvcHRpb25zIHRvIGJlIGFuIG9iamVjdFxyXG5cdFx0b3B0aW9ucyA9IG9wdGlvbnMgfHwge307XHJcblxyXG5cdFx0dmFyIHRyYW5zcG9ydCxcclxuXHRcdFx0Ly8gVVJMIHdpdGhvdXQgYW50aS1jYWNoZSBwYXJhbVxyXG5cdFx0XHRjYWNoZVVSTCxcclxuXHRcdFx0Ly8gUmVzcG9uc2UgaGVhZGVyc1xyXG5cdFx0XHRyZXNwb25zZUhlYWRlcnNTdHJpbmcsXHJcblx0XHRcdHJlc3BvbnNlSGVhZGVycyxcclxuXHRcdFx0Ly8gdGltZW91dCBoYW5kbGVcclxuXHRcdFx0dGltZW91dFRpbWVyLFxyXG5cdFx0XHQvLyBDcm9zcy1kb21haW4gZGV0ZWN0aW9uIHZhcnNcclxuXHRcdFx0cGFydHMsXHJcblx0XHRcdC8vIFRvIGtub3cgaWYgZ2xvYmFsIGV2ZW50cyBhcmUgdG8gYmUgZGlzcGF0Y2hlZFxyXG5cdFx0XHRmaXJlR2xvYmFscyxcclxuXHRcdFx0Ly8gTG9vcCB2YXJpYWJsZVxyXG5cdFx0XHRpLFxyXG5cdFx0XHQvLyBDcmVhdGUgdGhlIGZpbmFsIG9wdGlvbnMgb2JqZWN0XHJcblx0XHRcdHMgPSBqUXVlcnkuYWpheFNldHVwKCB7fSwgb3B0aW9ucyApLFxyXG5cdFx0XHQvLyBDYWxsYmFja3MgY29udGV4dFxyXG5cdFx0XHRjYWxsYmFja0NvbnRleHQgPSBzLmNvbnRleHQgfHwgcyxcclxuXHRcdFx0Ly8gQ29udGV4dCBmb3IgZ2xvYmFsIGV2ZW50cyBpcyBjYWxsYmFja0NvbnRleHQgaWYgaXQgaXMgYSBET00gbm9kZSBvciBqUXVlcnkgY29sbGVjdGlvblxyXG5cdFx0XHRnbG9iYWxFdmVudENvbnRleHQgPSBzLmNvbnRleHQgJiYgKCBjYWxsYmFja0NvbnRleHQubm9kZVR5cGUgfHwgY2FsbGJhY2tDb250ZXh0LmpxdWVyeSApID9cclxuXHRcdFx0XHRqUXVlcnkoIGNhbGxiYWNrQ29udGV4dCApIDpcclxuXHRcdFx0XHRqUXVlcnkuZXZlbnQsXHJcblx0XHRcdC8vIERlZmVycmVkc1xyXG5cdFx0XHRkZWZlcnJlZCA9IGpRdWVyeS5EZWZlcnJlZCgpLFxyXG5cdFx0XHRjb21wbGV0ZURlZmVycmVkID0galF1ZXJ5LkNhbGxiYWNrcyhcIm9uY2UgbWVtb3J5XCIpLFxyXG5cdFx0XHQvLyBTdGF0dXMtZGVwZW5kZW50IGNhbGxiYWNrc1xyXG5cdFx0XHRzdGF0dXNDb2RlID0gcy5zdGF0dXNDb2RlIHx8IHt9LFxyXG5cdFx0XHQvLyBIZWFkZXJzICh0aGV5IGFyZSBzZW50IGFsbCBhdCBvbmNlKVxyXG5cdFx0XHRyZXF1ZXN0SGVhZGVycyA9IHt9LFxyXG5cdFx0XHRyZXF1ZXN0SGVhZGVyc05hbWVzID0ge30sXHJcblx0XHRcdC8vIFRoZSBqcVhIUiBzdGF0ZVxyXG5cdFx0XHRzdGF0ZSA9IDAsXHJcblx0XHRcdC8vIERlZmF1bHQgYWJvcnQgbWVzc2FnZVxyXG5cdFx0XHRzdHJBYm9ydCA9IFwiY2FuY2VsZWRcIixcclxuXHRcdFx0Ly8gRmFrZSB4aHJcclxuXHRcdFx0anFYSFIgPSB7XHJcblx0XHRcdFx0cmVhZHlTdGF0ZTogMCxcclxuXHJcblx0XHRcdFx0Ly8gQnVpbGRzIGhlYWRlcnMgaGFzaHRhYmxlIGlmIG5lZWRlZFxyXG5cdFx0XHRcdGdldFJlc3BvbnNlSGVhZGVyOiBmdW5jdGlvbigga2V5ICkge1xyXG5cdFx0XHRcdFx0dmFyIG1hdGNoO1xyXG5cdFx0XHRcdFx0aWYgKCBzdGF0ZSA9PT0gMiApIHtcclxuXHRcdFx0XHRcdFx0aWYgKCAhcmVzcG9uc2VIZWFkZXJzICkge1xyXG5cdFx0XHRcdFx0XHRcdHJlc3BvbnNlSGVhZGVycyA9IHt9O1xyXG5cdFx0XHRcdFx0XHRcdHdoaWxlICggKG1hdGNoID0gcmhlYWRlcnMuZXhlYyggcmVzcG9uc2VIZWFkZXJzU3RyaW5nICkpICkge1xyXG5cdFx0XHRcdFx0XHRcdFx0cmVzcG9uc2VIZWFkZXJzWyBtYXRjaFsxXS50b0xvd2VyQ2FzZSgpIF0gPSBtYXRjaFsgMiBdO1xyXG5cdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRtYXRjaCA9IHJlc3BvbnNlSGVhZGVyc1sga2V5LnRvTG93ZXJDYXNlKCkgXTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdHJldHVybiBtYXRjaCA9PSBudWxsID8gbnVsbCA6IG1hdGNoO1xyXG5cdFx0XHRcdH0sXHJcblxyXG5cdFx0XHRcdC8vIFJhdyBzdHJpbmdcclxuXHRcdFx0XHRnZXRBbGxSZXNwb25zZUhlYWRlcnM6IGZ1bmN0aW9uKCkge1xyXG5cdFx0XHRcdFx0cmV0dXJuIHN0YXRlID09PSAyID8gcmVzcG9uc2VIZWFkZXJzU3RyaW5nIDogbnVsbDtcclxuXHRcdFx0XHR9LFxyXG5cclxuXHRcdFx0XHQvLyBDYWNoZXMgdGhlIGhlYWRlclxyXG5cdFx0XHRcdHNldFJlcXVlc3RIZWFkZXI6IGZ1bmN0aW9uKCBuYW1lLCB2YWx1ZSApIHtcclxuXHRcdFx0XHRcdHZhciBsbmFtZSA9IG5hbWUudG9Mb3dlckNhc2UoKTtcclxuXHRcdFx0XHRcdGlmICggIXN0YXRlICkge1xyXG5cdFx0XHRcdFx0XHRuYW1lID0gcmVxdWVzdEhlYWRlcnNOYW1lc1sgbG5hbWUgXSA9IHJlcXVlc3RIZWFkZXJzTmFtZXNbIGxuYW1lIF0gfHwgbmFtZTtcclxuXHRcdFx0XHRcdFx0cmVxdWVzdEhlYWRlcnNbIG5hbWUgXSA9IHZhbHVlO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0cmV0dXJuIHRoaXM7XHJcblx0XHRcdFx0fSxcclxuXHJcblx0XHRcdFx0Ly8gT3ZlcnJpZGVzIHJlc3BvbnNlIGNvbnRlbnQtdHlwZSBoZWFkZXJcclxuXHRcdFx0XHRvdmVycmlkZU1pbWVUeXBlOiBmdW5jdGlvbiggdHlwZSApIHtcclxuXHRcdFx0XHRcdGlmICggIXN0YXRlICkge1xyXG5cdFx0XHRcdFx0XHRzLm1pbWVUeXBlID0gdHlwZTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdHJldHVybiB0aGlzO1xyXG5cdFx0XHRcdH0sXHJcblxyXG5cdFx0XHRcdC8vIFN0YXR1cy1kZXBlbmRlbnQgY2FsbGJhY2tzXHJcblx0XHRcdFx0c3RhdHVzQ29kZTogZnVuY3Rpb24oIG1hcCApIHtcclxuXHRcdFx0XHRcdHZhciBjb2RlO1xyXG5cdFx0XHRcdFx0aWYgKCBtYXAgKSB7XHJcblx0XHRcdFx0XHRcdGlmICggc3RhdGUgPCAyICkge1xyXG5cdFx0XHRcdFx0XHRcdGZvciAoIGNvZGUgaW4gbWFwICkge1xyXG5cdFx0XHRcdFx0XHRcdFx0Ly8gTGF6eS1hZGQgdGhlIG5ldyBjYWxsYmFjayBpbiBhIHdheSB0aGF0IHByZXNlcnZlcyBvbGQgb25lc1xyXG5cdFx0XHRcdFx0XHRcdFx0c3RhdHVzQ29kZVsgY29kZSBdID0gWyBzdGF0dXNDb2RlWyBjb2RlIF0sIG1hcFsgY29kZSBdIF07XHJcblx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0XHRcdC8vIEV4ZWN1dGUgdGhlIGFwcHJvcHJpYXRlIGNhbGxiYWNrc1xyXG5cdFx0XHRcdFx0XHRcdGpxWEhSLmFsd2F5cyggbWFwWyBqcVhIUi5zdGF0dXMgXSApO1xyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRyZXR1cm4gdGhpcztcclxuXHRcdFx0XHR9LFxyXG5cclxuXHRcdFx0XHQvLyBDYW5jZWwgdGhlIHJlcXVlc3RcclxuXHRcdFx0XHRhYm9ydDogZnVuY3Rpb24oIHN0YXR1c1RleHQgKSB7XHJcblx0XHRcdFx0XHR2YXIgZmluYWxUZXh0ID0gc3RhdHVzVGV4dCB8fCBzdHJBYm9ydDtcclxuXHRcdFx0XHRcdGlmICggdHJhbnNwb3J0ICkge1xyXG5cdFx0XHRcdFx0XHR0cmFuc3BvcnQuYWJvcnQoIGZpbmFsVGV4dCApO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0ZG9uZSggMCwgZmluYWxUZXh0ICk7XHJcblx0XHRcdFx0XHRyZXR1cm4gdGhpcztcclxuXHRcdFx0XHR9XHJcblx0XHRcdH07XHJcblxyXG5cdFx0Ly8gQXR0YWNoIGRlZmVycmVkc1xyXG5cdFx0ZGVmZXJyZWQucHJvbWlzZSgganFYSFIgKS5jb21wbGV0ZSA9IGNvbXBsZXRlRGVmZXJyZWQuYWRkO1xyXG5cdFx0anFYSFIuc3VjY2VzcyA9IGpxWEhSLmRvbmU7XHJcblx0XHRqcVhIUi5lcnJvciA9IGpxWEhSLmZhaWw7XHJcblxyXG5cdFx0Ly8gUmVtb3ZlIGhhc2ggY2hhcmFjdGVyICgjNzUzMTogYW5kIHN0cmluZyBwcm9tb3Rpb24pXHJcblx0XHQvLyBBZGQgcHJvdG9jb2wgaWYgbm90IHByb3ZpZGVkIChwcmVmaWx0ZXJzIG1pZ2h0IGV4cGVjdCBpdClcclxuXHRcdC8vIEhhbmRsZSBmYWxzeSB1cmwgaW4gdGhlIHNldHRpbmdzIG9iamVjdCAoIzEwMDkzOiBjb25zaXN0ZW5jeSB3aXRoIG9sZCBzaWduYXR1cmUpXHJcblx0XHQvLyBXZSBhbHNvIHVzZSB0aGUgdXJsIHBhcmFtZXRlciBpZiBhdmFpbGFibGVcclxuXHRcdHMudXJsID0gKCAoIHVybCB8fCBzLnVybCB8fCBhamF4TG9jYXRpb24gKSArIFwiXCIgKS5yZXBsYWNlKCByaGFzaCwgXCJcIiApXHJcblx0XHRcdC5yZXBsYWNlKCBycHJvdG9jb2wsIGFqYXhMb2NQYXJ0c1sgMSBdICsgXCIvL1wiICk7XHJcblxyXG5cdFx0Ly8gQWxpYXMgbWV0aG9kIG9wdGlvbiB0byB0eXBlIGFzIHBlciB0aWNrZXQgIzEyMDA0XHJcblx0XHRzLnR5cGUgPSBvcHRpb25zLm1ldGhvZCB8fCBvcHRpb25zLnR5cGUgfHwgcy5tZXRob2QgfHwgcy50eXBlO1xyXG5cclxuXHRcdC8vIEV4dHJhY3QgZGF0YVR5cGVzIGxpc3RcclxuXHRcdHMuZGF0YVR5cGVzID0galF1ZXJ5LnRyaW0oIHMuZGF0YVR5cGUgfHwgXCIqXCIgKS50b0xvd2VyQ2FzZSgpLm1hdGNoKCBybm90d2hpdGUgKSB8fCBbIFwiXCIgXTtcclxuXHJcblx0XHQvLyBBIGNyb3NzLWRvbWFpbiByZXF1ZXN0IGlzIGluIG9yZGVyIHdoZW4gd2UgaGF2ZSBhIHByb3RvY29sOmhvc3Q6cG9ydCBtaXNtYXRjaFxyXG5cdFx0aWYgKCBzLmNyb3NzRG9tYWluID09IG51bGwgKSB7XHJcblx0XHRcdHBhcnRzID0gcnVybC5leGVjKCBzLnVybC50b0xvd2VyQ2FzZSgpICk7XHJcblx0XHRcdHMuY3Jvc3NEb21haW4gPSAhISggcGFydHMgJiZcclxuXHRcdFx0XHQoIHBhcnRzWyAxIF0gIT09IGFqYXhMb2NQYXJ0c1sgMSBdIHx8IHBhcnRzWyAyIF0gIT09IGFqYXhMb2NQYXJ0c1sgMiBdIHx8XHJcblx0XHRcdFx0XHQoIHBhcnRzWyAzIF0gfHwgKCBwYXJ0c1sgMSBdID09PSBcImh0dHA6XCIgPyBcIjgwXCIgOiBcIjQ0M1wiICkgKSAhPT1cclxuXHRcdFx0XHRcdFx0KCBhamF4TG9jUGFydHNbIDMgXSB8fCAoIGFqYXhMb2NQYXJ0c1sgMSBdID09PSBcImh0dHA6XCIgPyBcIjgwXCIgOiBcIjQ0M1wiICkgKSApXHJcblx0XHRcdCk7XHJcblx0XHR9XHJcblxyXG5cdFx0Ly8gQ29udmVydCBkYXRhIGlmIG5vdCBhbHJlYWR5IGEgc3RyaW5nXHJcblx0XHRpZiAoIHMuZGF0YSAmJiBzLnByb2Nlc3NEYXRhICYmIHR5cGVvZiBzLmRhdGEgIT09IFwic3RyaW5nXCIgKSB7XHJcblx0XHRcdHMuZGF0YSA9IGpRdWVyeS5wYXJhbSggcy5kYXRhLCBzLnRyYWRpdGlvbmFsICk7XHJcblx0XHR9XHJcblxyXG5cdFx0Ly8gQXBwbHkgcHJlZmlsdGVyc1xyXG5cdFx0aW5zcGVjdFByZWZpbHRlcnNPclRyYW5zcG9ydHMoIHByZWZpbHRlcnMsIHMsIG9wdGlvbnMsIGpxWEhSICk7XHJcblxyXG5cdFx0Ly8gSWYgcmVxdWVzdCB3YXMgYWJvcnRlZCBpbnNpZGUgYSBwcmVmaWx0ZXIsIHN0b3AgdGhlcmVcclxuXHRcdGlmICggc3RhdGUgPT09IDIgKSB7XHJcblx0XHRcdHJldHVybiBqcVhIUjtcclxuXHRcdH1cclxuXHJcblx0XHQvLyBXZSBjYW4gZmlyZSBnbG9iYWwgZXZlbnRzIGFzIG9mIG5vdyBpZiBhc2tlZCB0b1xyXG5cdFx0Ly8gRG9uJ3QgZmlyZSBldmVudHMgaWYgalF1ZXJ5LmV2ZW50IGlzIHVuZGVmaW5lZCBpbiBhbiBBTUQtdXNhZ2Ugc2NlbmFyaW8gKCMxNTExOClcclxuXHRcdGZpcmVHbG9iYWxzID0galF1ZXJ5LmV2ZW50ICYmIHMuZ2xvYmFsO1xyXG5cclxuXHRcdC8vIFdhdGNoIGZvciBhIG5ldyBzZXQgb2YgcmVxdWVzdHNcclxuXHRcdGlmICggZmlyZUdsb2JhbHMgJiYgalF1ZXJ5LmFjdGl2ZSsrID09PSAwICkge1xyXG5cdFx0XHRqUXVlcnkuZXZlbnQudHJpZ2dlcihcImFqYXhTdGFydFwiKTtcclxuXHRcdH1cclxuXHJcblx0XHQvLyBVcHBlcmNhc2UgdGhlIHR5cGVcclxuXHRcdHMudHlwZSA9IHMudHlwZS50b1VwcGVyQ2FzZSgpO1xyXG5cclxuXHRcdC8vIERldGVybWluZSBpZiByZXF1ZXN0IGhhcyBjb250ZW50XHJcblx0XHRzLmhhc0NvbnRlbnQgPSAhcm5vQ29udGVudC50ZXN0KCBzLnR5cGUgKTtcclxuXHJcblx0XHQvLyBTYXZlIHRoZSBVUkwgaW4gY2FzZSB3ZSdyZSB0b3lpbmcgd2l0aCB0aGUgSWYtTW9kaWZpZWQtU2luY2VcclxuXHRcdC8vIGFuZC9vciBJZi1Ob25lLU1hdGNoIGhlYWRlciBsYXRlciBvblxyXG5cdFx0Y2FjaGVVUkwgPSBzLnVybDtcclxuXHJcblx0XHQvLyBNb3JlIG9wdGlvbnMgaGFuZGxpbmcgZm9yIHJlcXVlc3RzIHdpdGggbm8gY29udGVudFxyXG5cdFx0aWYgKCAhcy5oYXNDb250ZW50ICkge1xyXG5cclxuXHRcdFx0Ly8gSWYgZGF0YSBpcyBhdmFpbGFibGUsIGFwcGVuZCBkYXRhIHRvIHVybFxyXG5cdFx0XHRpZiAoIHMuZGF0YSApIHtcclxuXHRcdFx0XHRjYWNoZVVSTCA9ICggcy51cmwgKz0gKCBycXVlcnkudGVzdCggY2FjaGVVUkwgKSA/IFwiJlwiIDogXCI/XCIgKSArIHMuZGF0YSApO1xyXG5cdFx0XHRcdC8vICM5NjgyOiByZW1vdmUgZGF0YSBzbyB0aGF0IGl0J3Mgbm90IHVzZWQgaW4gYW4gZXZlbnR1YWwgcmV0cnlcclxuXHRcdFx0XHRkZWxldGUgcy5kYXRhO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHQvLyBBZGQgYW50aS1jYWNoZSBpbiB1cmwgaWYgbmVlZGVkXHJcblx0XHRcdGlmICggcy5jYWNoZSA9PT0gZmFsc2UgKSB7XHJcblx0XHRcdFx0cy51cmwgPSBydHMudGVzdCggY2FjaGVVUkwgKSA/XHJcblxyXG5cdFx0XHRcdFx0Ly8gSWYgdGhlcmUgaXMgYWxyZWFkeSBhICdfJyBwYXJhbWV0ZXIsIHNldCBpdHMgdmFsdWVcclxuXHRcdFx0XHRcdGNhY2hlVVJMLnJlcGxhY2UoIHJ0cywgXCIkMV89XCIgKyBub25jZSsrICkgOlxyXG5cclxuXHRcdFx0XHRcdC8vIE90aGVyd2lzZSBhZGQgb25lIHRvIHRoZSBlbmRcclxuXHRcdFx0XHRcdGNhY2hlVVJMICsgKCBycXVlcnkudGVzdCggY2FjaGVVUkwgKSA/IFwiJlwiIDogXCI/XCIgKSArIFwiXz1cIiArIG5vbmNlKys7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHJcblx0XHQvLyBTZXQgdGhlIElmLU1vZGlmaWVkLVNpbmNlIGFuZC9vciBJZi1Ob25lLU1hdGNoIGhlYWRlciwgaWYgaW4gaWZNb2RpZmllZCBtb2RlLlxyXG5cdFx0aWYgKCBzLmlmTW9kaWZpZWQgKSB7XHJcblx0XHRcdGlmICggalF1ZXJ5Lmxhc3RNb2RpZmllZFsgY2FjaGVVUkwgXSApIHtcclxuXHRcdFx0XHRqcVhIUi5zZXRSZXF1ZXN0SGVhZGVyKCBcIklmLU1vZGlmaWVkLVNpbmNlXCIsIGpRdWVyeS5sYXN0TW9kaWZpZWRbIGNhY2hlVVJMIF0gKTtcclxuXHRcdFx0fVxyXG5cdFx0XHRpZiAoIGpRdWVyeS5ldGFnWyBjYWNoZVVSTCBdICkge1xyXG5cdFx0XHRcdGpxWEhSLnNldFJlcXVlc3RIZWFkZXIoIFwiSWYtTm9uZS1NYXRjaFwiLCBqUXVlcnkuZXRhZ1sgY2FjaGVVUkwgXSApO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblxyXG5cdFx0Ly8gU2V0IHRoZSBjb3JyZWN0IGhlYWRlciwgaWYgZGF0YSBpcyBiZWluZyBzZW50XHJcblx0XHRpZiAoIHMuZGF0YSAmJiBzLmhhc0NvbnRlbnQgJiYgcy5jb250ZW50VHlwZSAhPT0gZmFsc2UgfHwgb3B0aW9ucy5jb250ZW50VHlwZSApIHtcclxuXHRcdFx0anFYSFIuc2V0UmVxdWVzdEhlYWRlciggXCJDb250ZW50LVR5cGVcIiwgcy5jb250ZW50VHlwZSApO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8vIFNldCB0aGUgQWNjZXB0cyBoZWFkZXIgZm9yIHRoZSBzZXJ2ZXIsIGRlcGVuZGluZyBvbiB0aGUgZGF0YVR5cGVcclxuXHRcdGpxWEhSLnNldFJlcXVlc3RIZWFkZXIoXHJcblx0XHRcdFwiQWNjZXB0XCIsXHJcblx0XHRcdHMuZGF0YVR5cGVzWyAwIF0gJiYgcy5hY2NlcHRzWyBzLmRhdGFUeXBlc1swXSBdID9cclxuXHRcdFx0XHRzLmFjY2VwdHNbIHMuZGF0YVR5cGVzWzBdIF0gKyAoIHMuZGF0YVR5cGVzWyAwIF0gIT09IFwiKlwiID8gXCIsIFwiICsgYWxsVHlwZXMgKyBcIjsgcT0wLjAxXCIgOiBcIlwiICkgOlxyXG5cdFx0XHRcdHMuYWNjZXB0c1sgXCIqXCIgXVxyXG5cdFx0KTtcclxuXHJcblx0XHQvLyBDaGVjayBmb3IgaGVhZGVycyBvcHRpb25cclxuXHRcdGZvciAoIGkgaW4gcy5oZWFkZXJzICkge1xyXG5cdFx0XHRqcVhIUi5zZXRSZXF1ZXN0SGVhZGVyKCBpLCBzLmhlYWRlcnNbIGkgXSApO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8vIEFsbG93IGN1c3RvbSBoZWFkZXJzL21pbWV0eXBlcyBhbmQgZWFybHkgYWJvcnRcclxuXHRcdGlmICggcy5iZWZvcmVTZW5kICYmICggcy5iZWZvcmVTZW5kLmNhbGwoIGNhbGxiYWNrQ29udGV4dCwganFYSFIsIHMgKSA9PT0gZmFsc2UgfHwgc3RhdGUgPT09IDIgKSApIHtcclxuXHRcdFx0Ly8gQWJvcnQgaWYgbm90IGRvbmUgYWxyZWFkeSBhbmQgcmV0dXJuXHJcblx0XHRcdHJldHVybiBqcVhIUi5hYm9ydCgpO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8vIEFib3J0aW5nIGlzIG5vIGxvbmdlciBhIGNhbmNlbGxhdGlvblxyXG5cdFx0c3RyQWJvcnQgPSBcImFib3J0XCI7XHJcblxyXG5cdFx0Ly8gSW5zdGFsbCBjYWxsYmFja3Mgb24gZGVmZXJyZWRzXHJcblx0XHRmb3IgKCBpIGluIHsgc3VjY2VzczogMSwgZXJyb3I6IDEsIGNvbXBsZXRlOiAxIH0gKSB7XHJcblx0XHRcdGpxWEhSWyBpIF0oIHNbIGkgXSApO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8vIEdldCB0cmFuc3BvcnRcclxuXHRcdHRyYW5zcG9ydCA9IGluc3BlY3RQcmVmaWx0ZXJzT3JUcmFuc3BvcnRzKCB0cmFuc3BvcnRzLCBzLCBvcHRpb25zLCBqcVhIUiApO1xyXG5cclxuXHRcdC8vIElmIG5vIHRyYW5zcG9ydCwgd2UgYXV0by1hYm9ydFxyXG5cdFx0aWYgKCAhdHJhbnNwb3J0ICkge1xyXG5cdFx0XHRkb25lKCAtMSwgXCJObyBUcmFuc3BvcnRcIiApO1xyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0anFYSFIucmVhZHlTdGF0ZSA9IDE7XHJcblxyXG5cdFx0XHQvLyBTZW5kIGdsb2JhbCBldmVudFxyXG5cdFx0XHRpZiAoIGZpcmVHbG9iYWxzICkge1xyXG5cdFx0XHRcdGdsb2JhbEV2ZW50Q29udGV4dC50cmlnZ2VyKCBcImFqYXhTZW5kXCIsIFsganFYSFIsIHMgXSApO1xyXG5cdFx0XHR9XHJcblx0XHRcdC8vIFRpbWVvdXRcclxuXHRcdFx0aWYgKCBzLmFzeW5jICYmIHMudGltZW91dCA+IDAgKSB7XHJcblx0XHRcdFx0dGltZW91dFRpbWVyID0gc2V0VGltZW91dChmdW5jdGlvbigpIHtcclxuXHRcdFx0XHRcdGpxWEhSLmFib3J0KFwidGltZW91dFwiKTtcclxuXHRcdFx0XHR9LCBzLnRpbWVvdXQgKTtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0dHJ5IHtcclxuXHRcdFx0XHRzdGF0ZSA9IDE7XHJcblx0XHRcdFx0dHJhbnNwb3J0LnNlbmQoIHJlcXVlc3RIZWFkZXJzLCBkb25lICk7XHJcblx0XHRcdH0gY2F0Y2ggKCBlICkge1xyXG5cdFx0XHRcdC8vIFByb3BhZ2F0ZSBleGNlcHRpb24gYXMgZXJyb3IgaWYgbm90IGRvbmVcclxuXHRcdFx0XHRpZiAoIHN0YXRlIDwgMiApIHtcclxuXHRcdFx0XHRcdGRvbmUoIC0xLCBlICk7XHJcblx0XHRcdFx0Ly8gU2ltcGx5IHJldGhyb3cgb3RoZXJ3aXNlXHJcblx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdHRocm93IGU7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHR9XHJcblxyXG5cdFx0Ly8gQ2FsbGJhY2sgZm9yIHdoZW4gZXZlcnl0aGluZyBpcyBkb25lXHJcblx0XHRmdW5jdGlvbiBkb25lKCBzdGF0dXMsIG5hdGl2ZVN0YXR1c1RleHQsIHJlc3BvbnNlcywgaGVhZGVycyApIHtcclxuXHRcdFx0dmFyIGlzU3VjY2Vzcywgc3VjY2VzcywgZXJyb3IsIHJlc3BvbnNlLCBtb2RpZmllZCxcclxuXHRcdFx0XHRzdGF0dXNUZXh0ID0gbmF0aXZlU3RhdHVzVGV4dDtcclxuXHJcblx0XHRcdC8vIENhbGxlZCBvbmNlXHJcblx0XHRcdGlmICggc3RhdGUgPT09IDIgKSB7XHJcblx0XHRcdFx0cmV0dXJuO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHQvLyBTdGF0ZSBpcyBcImRvbmVcIiBub3dcclxuXHRcdFx0c3RhdGUgPSAyO1xyXG5cclxuXHRcdFx0Ly8gQ2xlYXIgdGltZW91dCBpZiBpdCBleGlzdHNcclxuXHRcdFx0aWYgKCB0aW1lb3V0VGltZXIgKSB7XHJcblx0XHRcdFx0Y2xlYXJUaW1lb3V0KCB0aW1lb3V0VGltZXIgKTtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0Ly8gRGVyZWZlcmVuY2UgdHJhbnNwb3J0IGZvciBlYXJseSBnYXJiYWdlIGNvbGxlY3Rpb25cclxuXHRcdFx0Ly8gKG5vIG1hdHRlciBob3cgbG9uZyB0aGUganFYSFIgb2JqZWN0IHdpbGwgYmUgdXNlZClcclxuXHRcdFx0dHJhbnNwb3J0ID0gdW5kZWZpbmVkO1xyXG5cclxuXHRcdFx0Ly8gQ2FjaGUgcmVzcG9uc2UgaGVhZGVyc1xyXG5cdFx0XHRyZXNwb25zZUhlYWRlcnNTdHJpbmcgPSBoZWFkZXJzIHx8IFwiXCI7XHJcblxyXG5cdFx0XHQvLyBTZXQgcmVhZHlTdGF0ZVxyXG5cdFx0XHRqcVhIUi5yZWFkeVN0YXRlID0gc3RhdHVzID4gMCA/IDQgOiAwO1xyXG5cclxuXHRcdFx0Ly8gRGV0ZXJtaW5lIGlmIHN1Y2Nlc3NmdWxcclxuXHRcdFx0aXNTdWNjZXNzID0gc3RhdHVzID49IDIwMCAmJiBzdGF0dXMgPCAzMDAgfHwgc3RhdHVzID09PSAzMDQ7XHJcblxyXG5cdFx0XHQvLyBHZXQgcmVzcG9uc2UgZGF0YVxyXG5cdFx0XHRpZiAoIHJlc3BvbnNlcyApIHtcclxuXHRcdFx0XHRyZXNwb25zZSA9IGFqYXhIYW5kbGVSZXNwb25zZXMoIHMsIGpxWEhSLCByZXNwb25zZXMgKTtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0Ly8gQ29udmVydCBubyBtYXR0ZXIgd2hhdCAodGhhdCB3YXkgcmVzcG9uc2VYWFggZmllbGRzIGFyZSBhbHdheXMgc2V0KVxyXG5cdFx0XHRyZXNwb25zZSA9IGFqYXhDb252ZXJ0KCBzLCByZXNwb25zZSwganFYSFIsIGlzU3VjY2VzcyApO1xyXG5cclxuXHRcdFx0Ly8gSWYgc3VjY2Vzc2Z1bCwgaGFuZGxlIHR5cGUgY2hhaW5pbmdcclxuXHRcdFx0aWYgKCBpc1N1Y2Nlc3MgKSB7XHJcblxyXG5cdFx0XHRcdC8vIFNldCB0aGUgSWYtTW9kaWZpZWQtU2luY2UgYW5kL29yIElmLU5vbmUtTWF0Y2ggaGVhZGVyLCBpZiBpbiBpZk1vZGlmaWVkIG1vZGUuXHJcblx0XHRcdFx0aWYgKCBzLmlmTW9kaWZpZWQgKSB7XHJcblx0XHRcdFx0XHRtb2RpZmllZCA9IGpxWEhSLmdldFJlc3BvbnNlSGVhZGVyKFwiTGFzdC1Nb2RpZmllZFwiKTtcclxuXHRcdFx0XHRcdGlmICggbW9kaWZpZWQgKSB7XHJcblx0XHRcdFx0XHRcdGpRdWVyeS5sYXN0TW9kaWZpZWRbIGNhY2hlVVJMIF0gPSBtb2RpZmllZDtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdG1vZGlmaWVkID0ganFYSFIuZ2V0UmVzcG9uc2VIZWFkZXIoXCJldGFnXCIpO1xyXG5cdFx0XHRcdFx0aWYgKCBtb2RpZmllZCApIHtcclxuXHRcdFx0XHRcdFx0alF1ZXJ5LmV0YWdbIGNhY2hlVVJMIF0gPSBtb2RpZmllZDtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdC8vIGlmIG5vIGNvbnRlbnRcclxuXHRcdFx0XHRpZiAoIHN0YXR1cyA9PT0gMjA0IHx8IHMudHlwZSA9PT0gXCJIRUFEXCIgKSB7XHJcblx0XHRcdFx0XHRzdGF0dXNUZXh0ID0gXCJub2NvbnRlbnRcIjtcclxuXHJcblx0XHRcdFx0Ly8gaWYgbm90IG1vZGlmaWVkXHJcblx0XHRcdFx0fSBlbHNlIGlmICggc3RhdHVzID09PSAzMDQgKSB7XHJcblx0XHRcdFx0XHRzdGF0dXNUZXh0ID0gXCJub3Rtb2RpZmllZFwiO1xyXG5cclxuXHRcdFx0XHQvLyBJZiB3ZSBoYXZlIGRhdGEsIGxldCdzIGNvbnZlcnQgaXRcclxuXHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0c3RhdHVzVGV4dCA9IHJlc3BvbnNlLnN0YXRlO1xyXG5cdFx0XHRcdFx0c3VjY2VzcyA9IHJlc3BvbnNlLmRhdGE7XHJcblx0XHRcdFx0XHRlcnJvciA9IHJlc3BvbnNlLmVycm9yO1xyXG5cdFx0XHRcdFx0aXNTdWNjZXNzID0gIWVycm9yO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHQvLyBFeHRyYWN0IGVycm9yIGZyb20gc3RhdHVzVGV4dCBhbmQgbm9ybWFsaXplIGZvciBub24tYWJvcnRzXHJcblx0XHRcdFx0ZXJyb3IgPSBzdGF0dXNUZXh0O1xyXG5cdFx0XHRcdGlmICggc3RhdHVzIHx8ICFzdGF0dXNUZXh0ICkge1xyXG5cdFx0XHRcdFx0c3RhdHVzVGV4dCA9IFwiZXJyb3JcIjtcclxuXHRcdFx0XHRcdGlmICggc3RhdHVzIDwgMCApIHtcclxuXHRcdFx0XHRcdFx0c3RhdHVzID0gMDtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdC8vIFNldCBkYXRhIGZvciB0aGUgZmFrZSB4aHIgb2JqZWN0XHJcblx0XHRcdGpxWEhSLnN0YXR1cyA9IHN0YXR1cztcclxuXHRcdFx0anFYSFIuc3RhdHVzVGV4dCA9ICggbmF0aXZlU3RhdHVzVGV4dCB8fCBzdGF0dXNUZXh0ICkgKyBcIlwiO1xyXG5cclxuXHRcdFx0Ly8gU3VjY2Vzcy9FcnJvclxyXG5cdFx0XHRpZiAoIGlzU3VjY2VzcyApIHtcclxuXHRcdFx0XHRkZWZlcnJlZC5yZXNvbHZlV2l0aCggY2FsbGJhY2tDb250ZXh0LCBbIHN1Y2Nlc3MsIHN0YXR1c1RleHQsIGpxWEhSIF0gKTtcclxuXHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRkZWZlcnJlZC5yZWplY3RXaXRoKCBjYWxsYmFja0NvbnRleHQsIFsganFYSFIsIHN0YXR1c1RleHQsIGVycm9yIF0gKTtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0Ly8gU3RhdHVzLWRlcGVuZGVudCBjYWxsYmFja3NcclxuXHRcdFx0anFYSFIuc3RhdHVzQ29kZSggc3RhdHVzQ29kZSApO1xyXG5cdFx0XHRzdGF0dXNDb2RlID0gdW5kZWZpbmVkO1xyXG5cclxuXHRcdFx0aWYgKCBmaXJlR2xvYmFscyApIHtcclxuXHRcdFx0XHRnbG9iYWxFdmVudENvbnRleHQudHJpZ2dlciggaXNTdWNjZXNzID8gXCJhamF4U3VjY2Vzc1wiIDogXCJhamF4RXJyb3JcIixcclxuXHRcdFx0XHRcdFsganFYSFIsIHMsIGlzU3VjY2VzcyA/IHN1Y2Nlc3MgOiBlcnJvciBdICk7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdC8vIENvbXBsZXRlXHJcblx0XHRcdGNvbXBsZXRlRGVmZXJyZWQuZmlyZVdpdGgoIGNhbGxiYWNrQ29udGV4dCwgWyBqcVhIUiwgc3RhdHVzVGV4dCBdICk7XHJcblxyXG5cdFx0XHRpZiAoIGZpcmVHbG9iYWxzICkge1xyXG5cdFx0XHRcdGdsb2JhbEV2ZW50Q29udGV4dC50cmlnZ2VyKCBcImFqYXhDb21wbGV0ZVwiLCBbIGpxWEhSLCBzIF0gKTtcclxuXHRcdFx0XHQvLyBIYW5kbGUgdGhlIGdsb2JhbCBBSkFYIGNvdW50ZXJcclxuXHRcdFx0XHRpZiAoICEoIC0talF1ZXJ5LmFjdGl2ZSApICkge1xyXG5cdFx0XHRcdFx0alF1ZXJ5LmV2ZW50LnRyaWdnZXIoXCJhamF4U3RvcFwiKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4ganFYSFI7XHJcblx0fSxcclxuXHJcblx0Z2V0SlNPTjogZnVuY3Rpb24oIHVybCwgZGF0YSwgY2FsbGJhY2sgKSB7XHJcblx0XHRyZXR1cm4galF1ZXJ5LmdldCggdXJsLCBkYXRhLCBjYWxsYmFjaywgXCJqc29uXCIgKTtcclxuXHR9LFxyXG5cclxuXHRnZXRTY3JpcHQ6IGZ1bmN0aW9uKCB1cmwsIGNhbGxiYWNrICkge1xyXG5cdFx0cmV0dXJuIGpRdWVyeS5nZXQoIHVybCwgdW5kZWZpbmVkLCBjYWxsYmFjaywgXCJzY3JpcHRcIiApO1xyXG5cdH1cclxufSk7XHJcblxyXG5qUXVlcnkuZWFjaCggWyBcImdldFwiLCBcInBvc3RcIiBdLCBmdW5jdGlvbiggaSwgbWV0aG9kICkge1xyXG5cdGpRdWVyeVsgbWV0aG9kIF0gPSBmdW5jdGlvbiggdXJsLCBkYXRhLCBjYWxsYmFjaywgdHlwZSApIHtcclxuXHRcdC8vIFNoaWZ0IGFyZ3VtZW50cyBpZiBkYXRhIGFyZ3VtZW50IHdhcyBvbWl0dGVkXHJcblx0XHRpZiAoIGpRdWVyeS5pc0Z1bmN0aW9uKCBkYXRhICkgKSB7XHJcblx0XHRcdHR5cGUgPSB0eXBlIHx8IGNhbGxiYWNrO1xyXG5cdFx0XHRjYWxsYmFjayA9IGRhdGE7XHJcblx0XHRcdGRhdGEgPSB1bmRlZmluZWQ7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIGpRdWVyeS5hamF4KHtcclxuXHRcdFx0dXJsOiB1cmwsXHJcblx0XHRcdHR5cGU6IG1ldGhvZCxcclxuXHRcdFx0ZGF0YVR5cGU6IHR5cGUsXHJcblx0XHRcdGRhdGE6IGRhdGEsXHJcblx0XHRcdHN1Y2Nlc3M6IGNhbGxiYWNrXHJcblx0XHR9KTtcclxuXHR9O1xyXG59KTtcclxuXHJcblxyXG5qUXVlcnkuX2V2YWxVcmwgPSBmdW5jdGlvbiggdXJsICkge1xyXG5cdHJldHVybiBqUXVlcnkuYWpheCh7XHJcblx0XHR1cmw6IHVybCxcclxuXHRcdHR5cGU6IFwiR0VUXCIsXHJcblx0XHRkYXRhVHlwZTogXCJzY3JpcHRcIixcclxuXHRcdGFzeW5jOiBmYWxzZSxcclxuXHRcdGdsb2JhbDogZmFsc2UsXHJcblx0XHRcInRocm93c1wiOiB0cnVlXHJcblx0fSk7XHJcbn07XHJcblxyXG5cclxualF1ZXJ5LmZuLmV4dGVuZCh7XHJcblx0d3JhcEFsbDogZnVuY3Rpb24oIGh0bWwgKSB7XHJcblx0XHR2YXIgd3JhcDtcclxuXHJcblx0XHRpZiAoIGpRdWVyeS5pc0Z1bmN0aW9uKCBodG1sICkgKSB7XHJcblx0XHRcdHJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oIGkgKSB7XHJcblx0XHRcdFx0alF1ZXJ5KCB0aGlzICkud3JhcEFsbCggaHRtbC5jYWxsKHRoaXMsIGkpICk7XHJcblx0XHRcdH0pO1xyXG5cdFx0fVxyXG5cclxuXHRcdGlmICggdGhpc1sgMCBdICkge1xyXG5cclxuXHRcdFx0Ly8gVGhlIGVsZW1lbnRzIHRvIHdyYXAgdGhlIHRhcmdldCBhcm91bmRcclxuXHRcdFx0d3JhcCA9IGpRdWVyeSggaHRtbCwgdGhpc1sgMCBdLm93bmVyRG9jdW1lbnQgKS5lcSggMCApLmNsb25lKCB0cnVlICk7XHJcblxyXG5cdFx0XHRpZiAoIHRoaXNbIDAgXS5wYXJlbnROb2RlICkge1xyXG5cdFx0XHRcdHdyYXAuaW5zZXJ0QmVmb3JlKCB0aGlzWyAwIF0gKTtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0d3JhcC5tYXAoZnVuY3Rpb24oKSB7XHJcblx0XHRcdFx0dmFyIGVsZW0gPSB0aGlzO1xyXG5cclxuXHRcdFx0XHR3aGlsZSAoIGVsZW0uZmlyc3RFbGVtZW50Q2hpbGQgKSB7XHJcblx0XHRcdFx0XHRlbGVtID0gZWxlbS5maXJzdEVsZW1lbnRDaGlsZDtcclxuXHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdHJldHVybiBlbGVtO1xyXG5cdFx0XHR9KS5hcHBlbmQoIHRoaXMgKTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gdGhpcztcclxuXHR9LFxyXG5cclxuXHR3cmFwSW5uZXI6IGZ1bmN0aW9uKCBodG1sICkge1xyXG5cdFx0aWYgKCBqUXVlcnkuaXNGdW5jdGlvbiggaHRtbCApICkge1xyXG5cdFx0XHRyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCBpICkge1xyXG5cdFx0XHRcdGpRdWVyeSggdGhpcyApLndyYXBJbm5lciggaHRtbC5jYWxsKHRoaXMsIGkpICk7XHJcblx0XHRcdH0pO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKSB7XHJcblx0XHRcdHZhciBzZWxmID0galF1ZXJ5KCB0aGlzICksXHJcblx0XHRcdFx0Y29udGVudHMgPSBzZWxmLmNvbnRlbnRzKCk7XHJcblxyXG5cdFx0XHRpZiAoIGNvbnRlbnRzLmxlbmd0aCApIHtcclxuXHRcdFx0XHRjb250ZW50cy53cmFwQWxsKCBodG1sICk7XHJcblxyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdHNlbGYuYXBwZW5kKCBodG1sICk7XHJcblx0XHRcdH1cclxuXHRcdH0pO1xyXG5cdH0sXHJcblxyXG5cdHdyYXA6IGZ1bmN0aW9uKCBodG1sICkge1xyXG5cdFx0dmFyIGlzRnVuY3Rpb24gPSBqUXVlcnkuaXNGdW5jdGlvbiggaHRtbCApO1xyXG5cclxuXHRcdHJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oIGkgKSB7XHJcblx0XHRcdGpRdWVyeSggdGhpcyApLndyYXBBbGwoIGlzRnVuY3Rpb24gPyBodG1sLmNhbGwodGhpcywgaSkgOiBodG1sICk7XHJcblx0XHR9KTtcclxuXHR9LFxyXG5cclxuXHR1bndyYXA6IGZ1bmN0aW9uKCkge1xyXG5cdFx0cmV0dXJuIHRoaXMucGFyZW50KCkuZWFjaChmdW5jdGlvbigpIHtcclxuXHRcdFx0aWYgKCAhalF1ZXJ5Lm5vZGVOYW1lKCB0aGlzLCBcImJvZHlcIiApICkge1xyXG5cdFx0XHRcdGpRdWVyeSggdGhpcyApLnJlcGxhY2VXaXRoKCB0aGlzLmNoaWxkTm9kZXMgKTtcclxuXHRcdFx0fVxyXG5cdFx0fSkuZW5kKCk7XHJcblx0fVxyXG59KTtcclxuXHJcblxyXG5qUXVlcnkuZXhwci5maWx0ZXJzLmhpZGRlbiA9IGZ1bmN0aW9uKCBlbGVtICkge1xyXG5cdC8vIFN1cHBvcnQ6IE9wZXJhIDw9IDEyLjEyXHJcblx0Ly8gT3BlcmEgcmVwb3J0cyBvZmZzZXRXaWR0aHMgYW5kIG9mZnNldEhlaWdodHMgbGVzcyB0aGFuIHplcm8gb24gc29tZSBlbGVtZW50c1xyXG5cdHJldHVybiBlbGVtLm9mZnNldFdpZHRoIDw9IDAgJiYgZWxlbS5vZmZzZXRIZWlnaHQgPD0gMDtcclxufTtcclxualF1ZXJ5LmV4cHIuZmlsdGVycy52aXNpYmxlID0gZnVuY3Rpb24oIGVsZW0gKSB7XHJcblx0cmV0dXJuICFqUXVlcnkuZXhwci5maWx0ZXJzLmhpZGRlbiggZWxlbSApO1xyXG59O1xyXG5cclxuXHJcblxyXG5cclxudmFyIHIyMCA9IC8lMjAvZyxcclxuXHRyYnJhY2tldCA9IC9cXFtcXF0kLyxcclxuXHRyQ1JMRiA9IC9cXHI/XFxuL2csXHJcblx0cnN1Ym1pdHRlclR5cGVzID0gL14oPzpzdWJtaXR8YnV0dG9ufGltYWdlfHJlc2V0fGZpbGUpJC9pLFxyXG5cdHJzdWJtaXR0YWJsZSA9IC9eKD86aW5wdXR8c2VsZWN0fHRleHRhcmVhfGtleWdlbikvaTtcclxuXHJcbmZ1bmN0aW9uIGJ1aWxkUGFyYW1zKCBwcmVmaXgsIG9iaiwgdHJhZGl0aW9uYWwsIGFkZCApIHtcclxuXHR2YXIgbmFtZTtcclxuXHJcblx0aWYgKCBqUXVlcnkuaXNBcnJheSggb2JqICkgKSB7XHJcblx0XHQvLyBTZXJpYWxpemUgYXJyYXkgaXRlbS5cclxuXHRcdGpRdWVyeS5lYWNoKCBvYmosIGZ1bmN0aW9uKCBpLCB2ICkge1xyXG5cdFx0XHRpZiAoIHRyYWRpdGlvbmFsIHx8IHJicmFja2V0LnRlc3QoIHByZWZpeCApICkge1xyXG5cdFx0XHRcdC8vIFRyZWF0IGVhY2ggYXJyYXkgaXRlbSBhcyBhIHNjYWxhci5cclxuXHRcdFx0XHRhZGQoIHByZWZpeCwgdiApO1xyXG5cclxuXHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHQvLyBJdGVtIGlzIG5vbi1zY2FsYXIgKGFycmF5IG9yIG9iamVjdCksIGVuY29kZSBpdHMgbnVtZXJpYyBpbmRleC5cclxuXHRcdFx0XHRidWlsZFBhcmFtcyggcHJlZml4ICsgXCJbXCIgKyAoIHR5cGVvZiB2ID09PSBcIm9iamVjdFwiID8gaSA6IFwiXCIgKSArIFwiXVwiLCB2LCB0cmFkaXRpb25hbCwgYWRkICk7XHJcblx0XHRcdH1cclxuXHRcdH0pO1xyXG5cclxuXHR9IGVsc2UgaWYgKCAhdHJhZGl0aW9uYWwgJiYgalF1ZXJ5LnR5cGUoIG9iaiApID09PSBcIm9iamVjdFwiICkge1xyXG5cdFx0Ly8gU2VyaWFsaXplIG9iamVjdCBpdGVtLlxyXG5cdFx0Zm9yICggbmFtZSBpbiBvYmogKSB7XHJcblx0XHRcdGJ1aWxkUGFyYW1zKCBwcmVmaXggKyBcIltcIiArIG5hbWUgKyBcIl1cIiwgb2JqWyBuYW1lIF0sIHRyYWRpdGlvbmFsLCBhZGQgKTtcclxuXHRcdH1cclxuXHJcblx0fSBlbHNlIHtcclxuXHRcdC8vIFNlcmlhbGl6ZSBzY2FsYXIgaXRlbS5cclxuXHRcdGFkZCggcHJlZml4LCBvYmogKTtcclxuXHR9XHJcbn1cclxuXHJcbi8vIFNlcmlhbGl6ZSBhbiBhcnJheSBvZiBmb3JtIGVsZW1lbnRzIG9yIGEgc2V0IG9mXHJcbi8vIGtleS92YWx1ZXMgaW50byBhIHF1ZXJ5IHN0cmluZ1xyXG5qUXVlcnkucGFyYW0gPSBmdW5jdGlvbiggYSwgdHJhZGl0aW9uYWwgKSB7XHJcblx0dmFyIHByZWZpeCxcclxuXHRcdHMgPSBbXSxcclxuXHRcdGFkZCA9IGZ1bmN0aW9uKCBrZXksIHZhbHVlICkge1xyXG5cdFx0XHQvLyBJZiB2YWx1ZSBpcyBhIGZ1bmN0aW9uLCBpbnZva2UgaXQgYW5kIHJldHVybiBpdHMgdmFsdWVcclxuXHRcdFx0dmFsdWUgPSBqUXVlcnkuaXNGdW5jdGlvbiggdmFsdWUgKSA/IHZhbHVlKCkgOiAoIHZhbHVlID09IG51bGwgPyBcIlwiIDogdmFsdWUgKTtcclxuXHRcdFx0c1sgcy5sZW5ndGggXSA9IGVuY29kZVVSSUNvbXBvbmVudCgga2V5ICkgKyBcIj1cIiArIGVuY29kZVVSSUNvbXBvbmVudCggdmFsdWUgKTtcclxuXHRcdH07XHJcblxyXG5cdC8vIFNldCB0cmFkaXRpb25hbCB0byB0cnVlIGZvciBqUXVlcnkgPD0gMS4zLjIgYmVoYXZpb3IuXHJcblx0aWYgKCB0cmFkaXRpb25hbCA9PT0gdW5kZWZpbmVkICkge1xyXG5cdFx0dHJhZGl0aW9uYWwgPSBqUXVlcnkuYWpheFNldHRpbmdzICYmIGpRdWVyeS5hamF4U2V0dGluZ3MudHJhZGl0aW9uYWw7XHJcblx0fVxyXG5cclxuXHQvLyBJZiBhbiBhcnJheSB3YXMgcGFzc2VkIGluLCBhc3N1bWUgdGhhdCBpdCBpcyBhbiBhcnJheSBvZiBmb3JtIGVsZW1lbnRzLlxyXG5cdGlmICggalF1ZXJ5LmlzQXJyYXkoIGEgKSB8fCAoIGEuanF1ZXJ5ICYmICFqUXVlcnkuaXNQbGFpbk9iamVjdCggYSApICkgKSB7XHJcblx0XHQvLyBTZXJpYWxpemUgdGhlIGZvcm0gZWxlbWVudHNcclxuXHRcdGpRdWVyeS5lYWNoKCBhLCBmdW5jdGlvbigpIHtcclxuXHRcdFx0YWRkKCB0aGlzLm5hbWUsIHRoaXMudmFsdWUgKTtcclxuXHRcdH0pO1xyXG5cclxuXHR9IGVsc2Uge1xyXG5cdFx0Ly8gSWYgdHJhZGl0aW9uYWwsIGVuY29kZSB0aGUgXCJvbGRcIiB3YXkgKHRoZSB3YXkgMS4zLjIgb3Igb2xkZXJcclxuXHRcdC8vIGRpZCBpdCksIG90aGVyd2lzZSBlbmNvZGUgcGFyYW1zIHJlY3Vyc2l2ZWx5LlxyXG5cdFx0Zm9yICggcHJlZml4IGluIGEgKSB7XHJcblx0XHRcdGJ1aWxkUGFyYW1zKCBwcmVmaXgsIGFbIHByZWZpeCBdLCB0cmFkaXRpb25hbCwgYWRkICk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHQvLyBSZXR1cm4gdGhlIHJlc3VsdGluZyBzZXJpYWxpemF0aW9uXHJcblx0cmV0dXJuIHMuam9pbiggXCImXCIgKS5yZXBsYWNlKCByMjAsIFwiK1wiICk7XHJcbn07XHJcblxyXG5qUXVlcnkuZm4uZXh0ZW5kKHtcclxuXHRzZXJpYWxpemU6IGZ1bmN0aW9uKCkge1xyXG5cdFx0cmV0dXJuIGpRdWVyeS5wYXJhbSggdGhpcy5zZXJpYWxpemVBcnJheSgpICk7XHJcblx0fSxcclxuXHRzZXJpYWxpemVBcnJheTogZnVuY3Rpb24oKSB7XHJcblx0XHRyZXR1cm4gdGhpcy5tYXAoZnVuY3Rpb24oKSB7XHJcblx0XHRcdC8vIENhbiBhZGQgcHJvcEhvb2sgZm9yIFwiZWxlbWVudHNcIiB0byBmaWx0ZXIgb3IgYWRkIGZvcm0gZWxlbWVudHNcclxuXHRcdFx0dmFyIGVsZW1lbnRzID0galF1ZXJ5LnByb3AoIHRoaXMsIFwiZWxlbWVudHNcIiApO1xyXG5cdFx0XHRyZXR1cm4gZWxlbWVudHMgPyBqUXVlcnkubWFrZUFycmF5KCBlbGVtZW50cyApIDogdGhpcztcclxuXHRcdH0pXHJcblx0XHQuZmlsdGVyKGZ1bmN0aW9uKCkge1xyXG5cdFx0XHR2YXIgdHlwZSA9IHRoaXMudHlwZTtcclxuXHJcblx0XHRcdC8vIFVzZSAuaXMoIFwiOmRpc2FibGVkXCIgKSBzbyB0aGF0IGZpZWxkc2V0W2Rpc2FibGVkXSB3b3Jrc1xyXG5cdFx0XHRyZXR1cm4gdGhpcy5uYW1lICYmICFqUXVlcnkoIHRoaXMgKS5pcyggXCI6ZGlzYWJsZWRcIiApICYmXHJcblx0XHRcdFx0cnN1Ym1pdHRhYmxlLnRlc3QoIHRoaXMubm9kZU5hbWUgKSAmJiAhcnN1Ym1pdHRlclR5cGVzLnRlc3QoIHR5cGUgKSAmJlxyXG5cdFx0XHRcdCggdGhpcy5jaGVja2VkIHx8ICFyY2hlY2thYmxlVHlwZS50ZXN0KCB0eXBlICkgKTtcclxuXHRcdH0pXHJcblx0XHQubWFwKGZ1bmN0aW9uKCBpLCBlbGVtICkge1xyXG5cdFx0XHR2YXIgdmFsID0galF1ZXJ5KCB0aGlzICkudmFsKCk7XHJcblxyXG5cdFx0XHRyZXR1cm4gdmFsID09IG51bGwgP1xyXG5cdFx0XHRcdG51bGwgOlxyXG5cdFx0XHRcdGpRdWVyeS5pc0FycmF5KCB2YWwgKSA/XHJcblx0XHRcdFx0XHRqUXVlcnkubWFwKCB2YWwsIGZ1bmN0aW9uKCB2YWwgKSB7XHJcblx0XHRcdFx0XHRcdHJldHVybiB7IG5hbWU6IGVsZW0ubmFtZSwgdmFsdWU6IHZhbC5yZXBsYWNlKCByQ1JMRiwgXCJcXHJcXG5cIiApIH07XHJcblx0XHRcdFx0XHR9KSA6XHJcblx0XHRcdFx0XHR7IG5hbWU6IGVsZW0ubmFtZSwgdmFsdWU6IHZhbC5yZXBsYWNlKCByQ1JMRiwgXCJcXHJcXG5cIiApIH07XHJcblx0XHR9KS5nZXQoKTtcclxuXHR9XHJcbn0pO1xyXG5cclxuXHJcbmpRdWVyeS5hamF4U2V0dGluZ3MueGhyID0gZnVuY3Rpb24oKSB7XHJcblx0dHJ5IHtcclxuXHRcdHJldHVybiBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcclxuXHR9IGNhdGNoKCBlICkge31cclxufTtcclxuXHJcbnZhciB4aHJJZCA9IDAsXHJcblx0eGhyQ2FsbGJhY2tzID0ge30sXHJcblx0eGhyU3VjY2Vzc1N0YXR1cyA9IHtcclxuXHRcdC8vIGZpbGUgcHJvdG9jb2wgYWx3YXlzIHlpZWxkcyBzdGF0dXMgY29kZSAwLCBhc3N1bWUgMjAwXHJcblx0XHQwOiAyMDAsXHJcblx0XHQvLyBTdXBwb3J0OiBJRTlcclxuXHRcdC8vICMxNDUwOiBzb21ldGltZXMgSUUgcmV0dXJucyAxMjIzIHdoZW4gaXQgc2hvdWxkIGJlIDIwNFxyXG5cdFx0MTIyMzogMjA0XHJcblx0fSxcclxuXHR4aHJTdXBwb3J0ZWQgPSBqUXVlcnkuYWpheFNldHRpbmdzLnhocigpO1xyXG5cclxuLy8gU3VwcG9ydDogSUU5XHJcbi8vIE9wZW4gcmVxdWVzdHMgbXVzdCBiZSBtYW51YWxseSBhYm9ydGVkIG9uIHVubG9hZCAoIzUyODApXHJcbi8vIFNlZSBodHRwczovL3N1cHBvcnQubWljcm9zb2Z0LmNvbS9rYi8yODU2NzQ2IGZvciBtb3JlIGluZm9cclxuaWYgKCB3aW5kb3cuYXR0YWNoRXZlbnQgKSB7XHJcblx0d2luZG93LmF0dGFjaEV2ZW50KCBcIm9udW5sb2FkXCIsIGZ1bmN0aW9uKCkge1xyXG5cdFx0Zm9yICggdmFyIGtleSBpbiB4aHJDYWxsYmFja3MgKSB7XHJcblx0XHRcdHhockNhbGxiYWNrc1sga2V5IF0oKTtcclxuXHRcdH1cclxuXHR9KTtcclxufVxyXG5cclxuc3VwcG9ydC5jb3JzID0gISF4aHJTdXBwb3J0ZWQgJiYgKCBcIndpdGhDcmVkZW50aWFsc1wiIGluIHhoclN1cHBvcnRlZCApO1xyXG5zdXBwb3J0LmFqYXggPSB4aHJTdXBwb3J0ZWQgPSAhIXhoclN1cHBvcnRlZDtcclxuXHJcbmpRdWVyeS5hamF4VHJhbnNwb3J0KGZ1bmN0aW9uKCBvcHRpb25zICkge1xyXG5cdHZhciBjYWxsYmFjaztcclxuXHJcblx0Ly8gQ3Jvc3MgZG9tYWluIG9ubHkgYWxsb3dlZCBpZiBzdXBwb3J0ZWQgdGhyb3VnaCBYTUxIdHRwUmVxdWVzdFxyXG5cdGlmICggc3VwcG9ydC5jb3JzIHx8IHhoclN1cHBvcnRlZCAmJiAhb3B0aW9ucy5jcm9zc0RvbWFpbiApIHtcclxuXHRcdHJldHVybiB7XHJcblx0XHRcdHNlbmQ6IGZ1bmN0aW9uKCBoZWFkZXJzLCBjb21wbGV0ZSApIHtcclxuXHRcdFx0XHR2YXIgaSxcclxuXHRcdFx0XHRcdHhociA9IG9wdGlvbnMueGhyKCksXHJcblx0XHRcdFx0XHRpZCA9ICsreGhySWQ7XHJcblxyXG5cdFx0XHRcdHhoci5vcGVuKCBvcHRpb25zLnR5cGUsIG9wdGlvbnMudXJsLCBvcHRpb25zLmFzeW5jLCBvcHRpb25zLnVzZXJuYW1lLCBvcHRpb25zLnBhc3N3b3JkICk7XHJcblxyXG5cdFx0XHRcdC8vIEFwcGx5IGN1c3RvbSBmaWVsZHMgaWYgcHJvdmlkZWRcclxuXHRcdFx0XHRpZiAoIG9wdGlvbnMueGhyRmllbGRzICkge1xyXG5cdFx0XHRcdFx0Zm9yICggaSBpbiBvcHRpb25zLnhockZpZWxkcyApIHtcclxuXHRcdFx0XHRcdFx0eGhyWyBpIF0gPSBvcHRpb25zLnhockZpZWxkc1sgaSBdO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0Ly8gT3ZlcnJpZGUgbWltZSB0eXBlIGlmIG5lZWRlZFxyXG5cdFx0XHRcdGlmICggb3B0aW9ucy5taW1lVHlwZSAmJiB4aHIub3ZlcnJpZGVNaW1lVHlwZSApIHtcclxuXHRcdFx0XHRcdHhoci5vdmVycmlkZU1pbWVUeXBlKCBvcHRpb25zLm1pbWVUeXBlICk7XHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHQvLyBYLVJlcXVlc3RlZC1XaXRoIGhlYWRlclxyXG5cdFx0XHRcdC8vIEZvciBjcm9zcy1kb21haW4gcmVxdWVzdHMsIHNlZWluZyBhcyBjb25kaXRpb25zIGZvciBhIHByZWZsaWdodCBhcmVcclxuXHRcdFx0XHQvLyBha2luIHRvIGEgamlnc2F3IHB1enpsZSwgd2Ugc2ltcGx5IG5ldmVyIHNldCBpdCB0byBiZSBzdXJlLlxyXG5cdFx0XHRcdC8vIChpdCBjYW4gYWx3YXlzIGJlIHNldCBvbiBhIHBlci1yZXF1ZXN0IGJhc2lzIG9yIGV2ZW4gdXNpbmcgYWpheFNldHVwKVxyXG5cdFx0XHRcdC8vIEZvciBzYW1lLWRvbWFpbiByZXF1ZXN0cywgd29uJ3QgY2hhbmdlIGhlYWRlciBpZiBhbHJlYWR5IHByb3ZpZGVkLlxyXG5cdFx0XHRcdGlmICggIW9wdGlvbnMuY3Jvc3NEb21haW4gJiYgIWhlYWRlcnNbXCJYLVJlcXVlc3RlZC1XaXRoXCJdICkge1xyXG5cdFx0XHRcdFx0aGVhZGVyc1tcIlgtUmVxdWVzdGVkLVdpdGhcIl0gPSBcIlhNTEh0dHBSZXF1ZXN0XCI7XHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHQvLyBTZXQgaGVhZGVyc1xyXG5cdFx0XHRcdGZvciAoIGkgaW4gaGVhZGVycyApIHtcclxuXHRcdFx0XHRcdHhoci5zZXRSZXF1ZXN0SGVhZGVyKCBpLCBoZWFkZXJzWyBpIF0gKTtcclxuXHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdC8vIENhbGxiYWNrXHJcblx0XHRcdFx0Y2FsbGJhY2sgPSBmdW5jdGlvbiggdHlwZSApIHtcclxuXHRcdFx0XHRcdHJldHVybiBmdW5jdGlvbigpIHtcclxuXHRcdFx0XHRcdFx0aWYgKCBjYWxsYmFjayApIHtcclxuXHRcdFx0XHRcdFx0XHRkZWxldGUgeGhyQ2FsbGJhY2tzWyBpZCBdO1xyXG5cdFx0XHRcdFx0XHRcdGNhbGxiYWNrID0geGhyLm9ubG9hZCA9IHhoci5vbmVycm9yID0gbnVsbDtcclxuXHJcblx0XHRcdFx0XHRcdFx0aWYgKCB0eXBlID09PSBcImFib3J0XCIgKSB7XHJcblx0XHRcdFx0XHRcdFx0XHR4aHIuYWJvcnQoKTtcclxuXHRcdFx0XHRcdFx0XHR9IGVsc2UgaWYgKCB0eXBlID09PSBcImVycm9yXCIgKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRjb21wbGV0ZShcclxuXHRcdFx0XHRcdFx0XHRcdFx0Ly8gZmlsZTogcHJvdG9jb2wgYWx3YXlzIHlpZWxkcyBzdGF0dXMgMDsgc2VlICM4NjA1LCAjMTQyMDdcclxuXHRcdFx0XHRcdFx0XHRcdFx0eGhyLnN0YXR1cyxcclxuXHRcdFx0XHRcdFx0XHRcdFx0eGhyLnN0YXR1c1RleHRcclxuXHRcdFx0XHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdFx0XHRcdGNvbXBsZXRlKFxyXG5cdFx0XHRcdFx0XHRcdFx0XHR4aHJTdWNjZXNzU3RhdHVzWyB4aHIuc3RhdHVzIF0gfHwgeGhyLnN0YXR1cyxcclxuXHRcdFx0XHRcdFx0XHRcdFx0eGhyLnN0YXR1c1RleHQsXHJcblx0XHRcdFx0XHRcdFx0XHRcdC8vIFN1cHBvcnQ6IElFOVxyXG5cdFx0XHRcdFx0XHRcdFx0XHQvLyBBY2Nlc3NpbmcgYmluYXJ5LWRhdGEgcmVzcG9uc2VUZXh0IHRocm93cyBhbiBleGNlcHRpb25cclxuXHRcdFx0XHRcdFx0XHRcdFx0Ly8gKCMxMTQyNilcclxuXHRcdFx0XHRcdFx0XHRcdFx0dHlwZW9mIHhoci5yZXNwb25zZVRleHQgPT09IFwic3RyaW5nXCIgPyB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0dGV4dDogeGhyLnJlc3BvbnNlVGV4dFxyXG5cdFx0XHRcdFx0XHRcdFx0XHR9IDogdW5kZWZpbmVkLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHR4aHIuZ2V0QWxsUmVzcG9uc2VIZWFkZXJzKClcclxuXHRcdFx0XHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR9O1xyXG5cdFx0XHRcdH07XHJcblxyXG5cdFx0XHRcdC8vIExpc3RlbiB0byBldmVudHNcclxuXHRcdFx0XHR4aHIub25sb2FkID0gY2FsbGJhY2soKTtcclxuXHRcdFx0XHR4aHIub25lcnJvciA9IGNhbGxiYWNrKFwiZXJyb3JcIik7XHJcblxyXG5cdFx0XHRcdC8vIENyZWF0ZSB0aGUgYWJvcnQgY2FsbGJhY2tcclxuXHRcdFx0XHRjYWxsYmFjayA9IHhockNhbGxiYWNrc1sgaWQgXSA9IGNhbGxiYWNrKFwiYWJvcnRcIik7XHJcblxyXG5cdFx0XHRcdHRyeSB7XHJcblx0XHRcdFx0XHQvLyBEbyBzZW5kIHRoZSByZXF1ZXN0ICh0aGlzIG1heSByYWlzZSBhbiBleGNlcHRpb24pXHJcblx0XHRcdFx0XHR4aHIuc2VuZCggb3B0aW9ucy5oYXNDb250ZW50ICYmIG9wdGlvbnMuZGF0YSB8fCBudWxsICk7XHJcblx0XHRcdFx0fSBjYXRjaCAoIGUgKSB7XHJcblx0XHRcdFx0XHQvLyAjMTQ2ODM6IE9ubHkgcmV0aHJvdyBpZiB0aGlzIGhhc24ndCBiZWVuIG5vdGlmaWVkIGFzIGFuIGVycm9yIHlldFxyXG5cdFx0XHRcdFx0aWYgKCBjYWxsYmFjayApIHtcclxuXHRcdFx0XHRcdFx0dGhyb3cgZTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9XHJcblx0XHRcdH0sXHJcblxyXG5cdFx0XHRhYm9ydDogZnVuY3Rpb24oKSB7XHJcblx0XHRcdFx0aWYgKCBjYWxsYmFjayApIHtcclxuXHRcdFx0XHRcdGNhbGxiYWNrKCk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHR9O1xyXG5cdH1cclxufSk7XHJcblxyXG5cclxuXHJcblxyXG4vLyBJbnN0YWxsIHNjcmlwdCBkYXRhVHlwZVxyXG5qUXVlcnkuYWpheFNldHVwKHtcclxuXHRhY2NlcHRzOiB7XHJcblx0XHRzY3JpcHQ6IFwidGV4dC9qYXZhc2NyaXB0LCBhcHBsaWNhdGlvbi9qYXZhc2NyaXB0LCBhcHBsaWNhdGlvbi9lY21hc2NyaXB0LCBhcHBsaWNhdGlvbi94LWVjbWFzY3JpcHRcIlxyXG5cdH0sXHJcblx0Y29udGVudHM6IHtcclxuXHRcdHNjcmlwdDogLyg/OmphdmF8ZWNtYSlzY3JpcHQvXHJcblx0fSxcclxuXHRjb252ZXJ0ZXJzOiB7XHJcblx0XHRcInRleHQgc2NyaXB0XCI6IGZ1bmN0aW9uKCB0ZXh0ICkge1xyXG5cdFx0XHRqUXVlcnkuZ2xvYmFsRXZhbCggdGV4dCApO1xyXG5cdFx0XHRyZXR1cm4gdGV4dDtcclxuXHRcdH1cclxuXHR9XHJcbn0pO1xyXG5cclxuLy8gSGFuZGxlIGNhY2hlJ3Mgc3BlY2lhbCBjYXNlIGFuZCBjcm9zc0RvbWFpblxyXG5qUXVlcnkuYWpheFByZWZpbHRlciggXCJzY3JpcHRcIiwgZnVuY3Rpb24oIHMgKSB7XHJcblx0aWYgKCBzLmNhY2hlID09PSB1bmRlZmluZWQgKSB7XHJcblx0XHRzLmNhY2hlID0gZmFsc2U7XHJcblx0fVxyXG5cdGlmICggcy5jcm9zc0RvbWFpbiApIHtcclxuXHRcdHMudHlwZSA9IFwiR0VUXCI7XHJcblx0fVxyXG59KTtcclxuXHJcbi8vIEJpbmQgc2NyaXB0IHRhZyBoYWNrIHRyYW5zcG9ydFxyXG5qUXVlcnkuYWpheFRyYW5zcG9ydCggXCJzY3JpcHRcIiwgZnVuY3Rpb24oIHMgKSB7XHJcblx0Ly8gVGhpcyB0cmFuc3BvcnQgb25seSBkZWFscyB3aXRoIGNyb3NzIGRvbWFpbiByZXF1ZXN0c1xyXG5cdGlmICggcy5jcm9zc0RvbWFpbiApIHtcclxuXHRcdHZhciBzY3JpcHQsIGNhbGxiYWNrO1xyXG5cdFx0cmV0dXJuIHtcclxuXHRcdFx0c2VuZDogZnVuY3Rpb24oIF8sIGNvbXBsZXRlICkge1xyXG5cdFx0XHRcdHNjcmlwdCA9IGpRdWVyeShcIjxzY3JpcHQ+XCIpLnByb3Aoe1xyXG5cdFx0XHRcdFx0YXN5bmM6IHRydWUsXHJcblx0XHRcdFx0XHRjaGFyc2V0OiBzLnNjcmlwdENoYXJzZXQsXHJcblx0XHRcdFx0XHRzcmM6IHMudXJsXHJcblx0XHRcdFx0fSkub24oXHJcblx0XHRcdFx0XHRcImxvYWQgZXJyb3JcIixcclxuXHRcdFx0XHRcdGNhbGxiYWNrID0gZnVuY3Rpb24oIGV2dCApIHtcclxuXHRcdFx0XHRcdFx0c2NyaXB0LnJlbW92ZSgpO1xyXG5cdFx0XHRcdFx0XHRjYWxsYmFjayA9IG51bGw7XHJcblx0XHRcdFx0XHRcdGlmICggZXZ0ICkge1xyXG5cdFx0XHRcdFx0XHRcdGNvbXBsZXRlKCBldnQudHlwZSA9PT0gXCJlcnJvclwiID8gNDA0IDogMjAwLCBldnQudHlwZSApO1xyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0KTtcclxuXHRcdFx0XHRkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKCBzY3JpcHRbIDAgXSApO1xyXG5cdFx0XHR9LFxyXG5cdFx0XHRhYm9ydDogZnVuY3Rpb24oKSB7XHJcblx0XHRcdFx0aWYgKCBjYWxsYmFjayApIHtcclxuXHRcdFx0XHRcdGNhbGxiYWNrKCk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHR9O1xyXG5cdH1cclxufSk7XHJcblxyXG5cclxuXHJcblxyXG52YXIgb2xkQ2FsbGJhY2tzID0gW10sXHJcblx0cmpzb25wID0gLyg9KVxcPyg/PSZ8JCl8XFw/XFw/LztcclxuXHJcbi8vIERlZmF1bHQganNvbnAgc2V0dGluZ3NcclxualF1ZXJ5LmFqYXhTZXR1cCh7XHJcblx0anNvbnA6IFwiY2FsbGJhY2tcIixcclxuXHRqc29ucENhbGxiYWNrOiBmdW5jdGlvbigpIHtcclxuXHRcdHZhciBjYWxsYmFjayA9IG9sZENhbGxiYWNrcy5wb3AoKSB8fCAoIGpRdWVyeS5leHBhbmRvICsgXCJfXCIgKyAoIG5vbmNlKysgKSApO1xyXG5cdFx0dGhpc1sgY2FsbGJhY2sgXSA9IHRydWU7XHJcblx0XHRyZXR1cm4gY2FsbGJhY2s7XHJcblx0fVxyXG59KTtcclxuXHJcbi8vIERldGVjdCwgbm9ybWFsaXplIG9wdGlvbnMgYW5kIGluc3RhbGwgY2FsbGJhY2tzIGZvciBqc29ucCByZXF1ZXN0c1xyXG5qUXVlcnkuYWpheFByZWZpbHRlciggXCJqc29uIGpzb25wXCIsIGZ1bmN0aW9uKCBzLCBvcmlnaW5hbFNldHRpbmdzLCBqcVhIUiApIHtcclxuXHJcblx0dmFyIGNhbGxiYWNrTmFtZSwgb3ZlcndyaXR0ZW4sIHJlc3BvbnNlQ29udGFpbmVyLFxyXG5cdFx0anNvblByb3AgPSBzLmpzb25wICE9PSBmYWxzZSAmJiAoIHJqc29ucC50ZXN0KCBzLnVybCApID9cclxuXHRcdFx0XCJ1cmxcIiA6XHJcblx0XHRcdHR5cGVvZiBzLmRhdGEgPT09IFwic3RyaW5nXCIgJiYgISggcy5jb250ZW50VHlwZSB8fCBcIlwiICkuaW5kZXhPZihcImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZFwiKSAmJiByanNvbnAudGVzdCggcy5kYXRhICkgJiYgXCJkYXRhXCJcclxuXHRcdCk7XHJcblxyXG5cdC8vIEhhbmRsZSBpZmYgdGhlIGV4cGVjdGVkIGRhdGEgdHlwZSBpcyBcImpzb25wXCIgb3Igd2UgaGF2ZSBhIHBhcmFtZXRlciB0byBzZXRcclxuXHRpZiAoIGpzb25Qcm9wIHx8IHMuZGF0YVR5cGVzWyAwIF0gPT09IFwianNvbnBcIiApIHtcclxuXHJcblx0XHQvLyBHZXQgY2FsbGJhY2sgbmFtZSwgcmVtZW1iZXJpbmcgcHJlZXhpc3RpbmcgdmFsdWUgYXNzb2NpYXRlZCB3aXRoIGl0XHJcblx0XHRjYWxsYmFja05hbWUgPSBzLmpzb25wQ2FsbGJhY2sgPSBqUXVlcnkuaXNGdW5jdGlvbiggcy5qc29ucENhbGxiYWNrICkgP1xyXG5cdFx0XHRzLmpzb25wQ2FsbGJhY2soKSA6XHJcblx0XHRcdHMuanNvbnBDYWxsYmFjaztcclxuXHJcblx0XHQvLyBJbnNlcnQgY2FsbGJhY2sgaW50byB1cmwgb3IgZm9ybSBkYXRhXHJcblx0XHRpZiAoIGpzb25Qcm9wICkge1xyXG5cdFx0XHRzWyBqc29uUHJvcCBdID0gc1sganNvblByb3AgXS5yZXBsYWNlKCByanNvbnAsIFwiJDFcIiArIGNhbGxiYWNrTmFtZSApO1xyXG5cdFx0fSBlbHNlIGlmICggcy5qc29ucCAhPT0gZmFsc2UgKSB7XHJcblx0XHRcdHMudXJsICs9ICggcnF1ZXJ5LnRlc3QoIHMudXJsICkgPyBcIiZcIiA6IFwiP1wiICkgKyBzLmpzb25wICsgXCI9XCIgKyBjYWxsYmFja05hbWU7XHJcblx0XHR9XHJcblxyXG5cdFx0Ly8gVXNlIGRhdGEgY29udmVydGVyIHRvIHJldHJpZXZlIGpzb24gYWZ0ZXIgc2NyaXB0IGV4ZWN1dGlvblxyXG5cdFx0cy5jb252ZXJ0ZXJzW1wic2NyaXB0IGpzb25cIl0gPSBmdW5jdGlvbigpIHtcclxuXHRcdFx0aWYgKCAhcmVzcG9uc2VDb250YWluZXIgKSB7XHJcblx0XHRcdFx0alF1ZXJ5LmVycm9yKCBjYWxsYmFja05hbWUgKyBcIiB3YXMgbm90IGNhbGxlZFwiICk7XHJcblx0XHRcdH1cclxuXHRcdFx0cmV0dXJuIHJlc3BvbnNlQ29udGFpbmVyWyAwIF07XHJcblx0XHR9O1xyXG5cclxuXHRcdC8vIGZvcmNlIGpzb24gZGF0YVR5cGVcclxuXHRcdHMuZGF0YVR5cGVzWyAwIF0gPSBcImpzb25cIjtcclxuXHJcblx0XHQvLyBJbnN0YWxsIGNhbGxiYWNrXHJcblx0XHRvdmVyd3JpdHRlbiA9IHdpbmRvd1sgY2FsbGJhY2tOYW1lIF07XHJcblx0XHR3aW5kb3dbIGNhbGxiYWNrTmFtZSBdID0gZnVuY3Rpb24oKSB7XHJcblx0XHRcdHJlc3BvbnNlQ29udGFpbmVyID0gYXJndW1lbnRzO1xyXG5cdFx0fTtcclxuXHJcblx0XHQvLyBDbGVhbi11cCBmdW5jdGlvbiAoZmlyZXMgYWZ0ZXIgY29udmVydGVycylcclxuXHRcdGpxWEhSLmFsd2F5cyhmdW5jdGlvbigpIHtcclxuXHRcdFx0Ly8gUmVzdG9yZSBwcmVleGlzdGluZyB2YWx1ZVxyXG5cdFx0XHR3aW5kb3dbIGNhbGxiYWNrTmFtZSBdID0gb3ZlcndyaXR0ZW47XHJcblxyXG5cdFx0XHQvLyBTYXZlIGJhY2sgYXMgZnJlZVxyXG5cdFx0XHRpZiAoIHNbIGNhbGxiYWNrTmFtZSBdICkge1xyXG5cdFx0XHRcdC8vIG1ha2Ugc3VyZSB0aGF0IHJlLXVzaW5nIHRoZSBvcHRpb25zIGRvZXNuJ3Qgc2NyZXcgdGhpbmdzIGFyb3VuZFxyXG5cdFx0XHRcdHMuanNvbnBDYWxsYmFjayA9IG9yaWdpbmFsU2V0dGluZ3MuanNvbnBDYWxsYmFjaztcclxuXHJcblx0XHRcdFx0Ly8gc2F2ZSB0aGUgY2FsbGJhY2sgbmFtZSBmb3IgZnV0dXJlIHVzZVxyXG5cdFx0XHRcdG9sZENhbGxiYWNrcy5wdXNoKCBjYWxsYmFja05hbWUgKTtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0Ly8gQ2FsbCBpZiBpdCB3YXMgYSBmdW5jdGlvbiBhbmQgd2UgaGF2ZSBhIHJlc3BvbnNlXHJcblx0XHRcdGlmICggcmVzcG9uc2VDb250YWluZXIgJiYgalF1ZXJ5LmlzRnVuY3Rpb24oIG92ZXJ3cml0dGVuICkgKSB7XHJcblx0XHRcdFx0b3ZlcndyaXR0ZW4oIHJlc3BvbnNlQ29udGFpbmVyWyAwIF0gKTtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0cmVzcG9uc2VDb250YWluZXIgPSBvdmVyd3JpdHRlbiA9IHVuZGVmaW5lZDtcclxuXHRcdH0pO1xyXG5cclxuXHRcdC8vIERlbGVnYXRlIHRvIHNjcmlwdFxyXG5cdFx0cmV0dXJuIFwic2NyaXB0XCI7XHJcblx0fVxyXG59KTtcclxuXHJcblxyXG5cclxuXHJcbi8vIGRhdGE6IHN0cmluZyBvZiBodG1sXHJcbi8vIGNvbnRleHQgKG9wdGlvbmFsKTogSWYgc3BlY2lmaWVkLCB0aGUgZnJhZ21lbnQgd2lsbCBiZSBjcmVhdGVkIGluIHRoaXMgY29udGV4dCwgZGVmYXVsdHMgdG8gZG9jdW1lbnRcclxuLy8ga2VlcFNjcmlwdHMgKG9wdGlvbmFsKTogSWYgdHJ1ZSwgd2lsbCBpbmNsdWRlIHNjcmlwdHMgcGFzc2VkIGluIHRoZSBodG1sIHN0cmluZ1xyXG5qUXVlcnkucGFyc2VIVE1MID0gZnVuY3Rpb24oIGRhdGEsIGNvbnRleHQsIGtlZXBTY3JpcHRzICkge1xyXG5cdGlmICggIWRhdGEgfHwgdHlwZW9mIGRhdGEgIT09IFwic3RyaW5nXCIgKSB7XHJcblx0XHRyZXR1cm4gbnVsbDtcclxuXHR9XHJcblx0aWYgKCB0eXBlb2YgY29udGV4dCA9PT0gXCJib29sZWFuXCIgKSB7XHJcblx0XHRrZWVwU2NyaXB0cyA9IGNvbnRleHQ7XHJcblx0XHRjb250ZXh0ID0gZmFsc2U7XHJcblx0fVxyXG5cdGNvbnRleHQgPSBjb250ZXh0IHx8IGRvY3VtZW50O1xyXG5cclxuXHR2YXIgcGFyc2VkID0gcnNpbmdsZVRhZy5leGVjKCBkYXRhICksXHJcblx0XHRzY3JpcHRzID0gIWtlZXBTY3JpcHRzICYmIFtdO1xyXG5cclxuXHQvLyBTaW5nbGUgdGFnXHJcblx0aWYgKCBwYXJzZWQgKSB7XHJcblx0XHRyZXR1cm4gWyBjb250ZXh0LmNyZWF0ZUVsZW1lbnQoIHBhcnNlZFsxXSApIF07XHJcblx0fVxyXG5cclxuXHRwYXJzZWQgPSBqUXVlcnkuYnVpbGRGcmFnbWVudCggWyBkYXRhIF0sIGNvbnRleHQsIHNjcmlwdHMgKTtcclxuXHJcblx0aWYgKCBzY3JpcHRzICYmIHNjcmlwdHMubGVuZ3RoICkge1xyXG5cdFx0alF1ZXJ5KCBzY3JpcHRzICkucmVtb3ZlKCk7XHJcblx0fVxyXG5cclxuXHRyZXR1cm4galF1ZXJ5Lm1lcmdlKCBbXSwgcGFyc2VkLmNoaWxkTm9kZXMgKTtcclxufTtcclxuXHJcblxyXG4vLyBLZWVwIGEgY29weSBvZiB0aGUgb2xkIGxvYWQgbWV0aG9kXHJcbnZhciBfbG9hZCA9IGpRdWVyeS5mbi5sb2FkO1xyXG5cclxuLyoqXHJcbiAqIExvYWQgYSB1cmwgaW50byBhIHBhZ2VcclxuICovXHJcbmpRdWVyeS5mbi5sb2FkID0gZnVuY3Rpb24oIHVybCwgcGFyYW1zLCBjYWxsYmFjayApIHtcclxuXHRpZiAoIHR5cGVvZiB1cmwgIT09IFwic3RyaW5nXCIgJiYgX2xvYWQgKSB7XHJcblx0XHRyZXR1cm4gX2xvYWQuYXBwbHkoIHRoaXMsIGFyZ3VtZW50cyApO1xyXG5cdH1cclxuXHJcblx0dmFyIHNlbGVjdG9yLCB0eXBlLCByZXNwb25zZSxcclxuXHRcdHNlbGYgPSB0aGlzLFxyXG5cdFx0b2ZmID0gdXJsLmluZGV4T2YoXCIgXCIpO1xyXG5cclxuXHRpZiAoIG9mZiA+PSAwICkge1xyXG5cdFx0c2VsZWN0b3IgPSBqUXVlcnkudHJpbSggdXJsLnNsaWNlKCBvZmYgKSApO1xyXG5cdFx0dXJsID0gdXJsLnNsaWNlKCAwLCBvZmYgKTtcclxuXHR9XHJcblxyXG5cdC8vIElmIGl0J3MgYSBmdW5jdGlvblxyXG5cdGlmICggalF1ZXJ5LmlzRnVuY3Rpb24oIHBhcmFtcyApICkge1xyXG5cclxuXHRcdC8vIFdlIGFzc3VtZSB0aGF0IGl0J3MgdGhlIGNhbGxiYWNrXHJcblx0XHRjYWxsYmFjayA9IHBhcmFtcztcclxuXHRcdHBhcmFtcyA9IHVuZGVmaW5lZDtcclxuXHJcblx0Ly8gT3RoZXJ3aXNlLCBidWlsZCBhIHBhcmFtIHN0cmluZ1xyXG5cdH0gZWxzZSBpZiAoIHBhcmFtcyAmJiB0eXBlb2YgcGFyYW1zID09PSBcIm9iamVjdFwiICkge1xyXG5cdFx0dHlwZSA9IFwiUE9TVFwiO1xyXG5cdH1cclxuXHJcblx0Ly8gSWYgd2UgaGF2ZSBlbGVtZW50cyB0byBtb2RpZnksIG1ha2UgdGhlIHJlcXVlc3RcclxuXHRpZiAoIHNlbGYubGVuZ3RoID4gMCApIHtcclxuXHRcdGpRdWVyeS5hamF4KHtcclxuXHRcdFx0dXJsOiB1cmwsXHJcblxyXG5cdFx0XHQvLyBpZiBcInR5cGVcIiB2YXJpYWJsZSBpcyB1bmRlZmluZWQsIHRoZW4gXCJHRVRcIiBtZXRob2Qgd2lsbCBiZSB1c2VkXHJcblx0XHRcdHR5cGU6IHR5cGUsXHJcblx0XHRcdGRhdGFUeXBlOiBcImh0bWxcIixcclxuXHRcdFx0ZGF0YTogcGFyYW1zXHJcblx0XHR9KS5kb25lKGZ1bmN0aW9uKCByZXNwb25zZVRleHQgKSB7XHJcblxyXG5cdFx0XHQvLyBTYXZlIHJlc3BvbnNlIGZvciB1c2UgaW4gY29tcGxldGUgY2FsbGJhY2tcclxuXHRcdFx0cmVzcG9uc2UgPSBhcmd1bWVudHM7XHJcblxyXG5cdFx0XHRzZWxmLmh0bWwoIHNlbGVjdG9yID9cclxuXHJcblx0XHRcdFx0Ly8gSWYgYSBzZWxlY3RvciB3YXMgc3BlY2lmaWVkLCBsb2NhdGUgdGhlIHJpZ2h0IGVsZW1lbnRzIGluIGEgZHVtbXkgZGl2XHJcblx0XHRcdFx0Ly8gRXhjbHVkZSBzY3JpcHRzIHRvIGF2b2lkIElFICdQZXJtaXNzaW9uIERlbmllZCcgZXJyb3JzXHJcblx0XHRcdFx0alF1ZXJ5KFwiPGRpdj5cIikuYXBwZW5kKCBqUXVlcnkucGFyc2VIVE1MKCByZXNwb25zZVRleHQgKSApLmZpbmQoIHNlbGVjdG9yICkgOlxyXG5cclxuXHRcdFx0XHQvLyBPdGhlcndpc2UgdXNlIHRoZSBmdWxsIHJlc3VsdFxyXG5cdFx0XHRcdHJlc3BvbnNlVGV4dCApO1xyXG5cclxuXHRcdH0pLmNvbXBsZXRlKCBjYWxsYmFjayAmJiBmdW5jdGlvbigganFYSFIsIHN0YXR1cyApIHtcclxuXHRcdFx0c2VsZi5lYWNoKCBjYWxsYmFjaywgcmVzcG9uc2UgfHwgWyBqcVhIUi5yZXNwb25zZVRleHQsIHN0YXR1cywganFYSFIgXSApO1xyXG5cdFx0fSk7XHJcblx0fVxyXG5cclxuXHRyZXR1cm4gdGhpcztcclxufTtcclxuXHJcblxyXG5cclxuXHJcbi8vIEF0dGFjaCBhIGJ1bmNoIG9mIGZ1bmN0aW9ucyBmb3IgaGFuZGxpbmcgY29tbW9uIEFKQVggZXZlbnRzXHJcbmpRdWVyeS5lYWNoKCBbIFwiYWpheFN0YXJ0XCIsIFwiYWpheFN0b3BcIiwgXCJhamF4Q29tcGxldGVcIiwgXCJhamF4RXJyb3JcIiwgXCJhamF4U3VjY2Vzc1wiLCBcImFqYXhTZW5kXCIgXSwgZnVuY3Rpb24oIGksIHR5cGUgKSB7XHJcblx0alF1ZXJ5LmZuWyB0eXBlIF0gPSBmdW5jdGlvbiggZm4gKSB7XHJcblx0XHRyZXR1cm4gdGhpcy5vbiggdHlwZSwgZm4gKTtcclxuXHR9O1xyXG59KTtcclxuXHJcblxyXG5cclxuXHJcbmpRdWVyeS5leHByLmZpbHRlcnMuYW5pbWF0ZWQgPSBmdW5jdGlvbiggZWxlbSApIHtcclxuXHRyZXR1cm4galF1ZXJ5LmdyZXAoalF1ZXJ5LnRpbWVycywgZnVuY3Rpb24oIGZuICkge1xyXG5cdFx0cmV0dXJuIGVsZW0gPT09IGZuLmVsZW07XHJcblx0fSkubGVuZ3RoO1xyXG59O1xyXG5cclxuXHJcblxyXG5cclxudmFyIGRvY0VsZW0gPSB3aW5kb3cuZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50O1xyXG5cclxuLyoqXHJcbiAqIEdldHMgYSB3aW5kb3cgZnJvbSBhbiBlbGVtZW50XHJcbiAqL1xyXG5mdW5jdGlvbiBnZXRXaW5kb3coIGVsZW0gKSB7XHJcblx0cmV0dXJuIGpRdWVyeS5pc1dpbmRvdyggZWxlbSApID8gZWxlbSA6IGVsZW0ubm9kZVR5cGUgPT09IDkgJiYgZWxlbS5kZWZhdWx0VmlldztcclxufVxyXG5cclxualF1ZXJ5Lm9mZnNldCA9IHtcclxuXHRzZXRPZmZzZXQ6IGZ1bmN0aW9uKCBlbGVtLCBvcHRpb25zLCBpICkge1xyXG5cdFx0dmFyIGN1clBvc2l0aW9uLCBjdXJMZWZ0LCBjdXJDU1NUb3AsIGN1clRvcCwgY3VyT2Zmc2V0LCBjdXJDU1NMZWZ0LCBjYWxjdWxhdGVQb3NpdGlvbixcclxuXHRcdFx0cG9zaXRpb24gPSBqUXVlcnkuY3NzKCBlbGVtLCBcInBvc2l0aW9uXCIgKSxcclxuXHRcdFx0Y3VyRWxlbSA9IGpRdWVyeSggZWxlbSApLFxyXG5cdFx0XHRwcm9wcyA9IHt9O1xyXG5cclxuXHRcdC8vIFNldCBwb3NpdGlvbiBmaXJzdCwgaW4tY2FzZSB0b3AvbGVmdCBhcmUgc2V0IGV2ZW4gb24gc3RhdGljIGVsZW1cclxuXHRcdGlmICggcG9zaXRpb24gPT09IFwic3RhdGljXCIgKSB7XHJcblx0XHRcdGVsZW0uc3R5bGUucG9zaXRpb24gPSBcInJlbGF0aXZlXCI7XHJcblx0XHR9XHJcblxyXG5cdFx0Y3VyT2Zmc2V0ID0gY3VyRWxlbS5vZmZzZXQoKTtcclxuXHRcdGN1ckNTU1RvcCA9IGpRdWVyeS5jc3MoIGVsZW0sIFwidG9wXCIgKTtcclxuXHRcdGN1ckNTU0xlZnQgPSBqUXVlcnkuY3NzKCBlbGVtLCBcImxlZnRcIiApO1xyXG5cdFx0Y2FsY3VsYXRlUG9zaXRpb24gPSAoIHBvc2l0aW9uID09PSBcImFic29sdXRlXCIgfHwgcG9zaXRpb24gPT09IFwiZml4ZWRcIiApICYmXHJcblx0XHRcdCggY3VyQ1NTVG9wICsgY3VyQ1NTTGVmdCApLmluZGV4T2YoXCJhdXRvXCIpID4gLTE7XHJcblxyXG5cdFx0Ly8gTmVlZCB0byBiZSBhYmxlIHRvIGNhbGN1bGF0ZSBwb3NpdGlvbiBpZiBlaXRoZXJcclxuXHRcdC8vIHRvcCBvciBsZWZ0IGlzIGF1dG8gYW5kIHBvc2l0aW9uIGlzIGVpdGhlciBhYnNvbHV0ZSBvciBmaXhlZFxyXG5cdFx0aWYgKCBjYWxjdWxhdGVQb3NpdGlvbiApIHtcclxuXHRcdFx0Y3VyUG9zaXRpb24gPSBjdXJFbGVtLnBvc2l0aW9uKCk7XHJcblx0XHRcdGN1clRvcCA9IGN1clBvc2l0aW9uLnRvcDtcclxuXHRcdFx0Y3VyTGVmdCA9IGN1clBvc2l0aW9uLmxlZnQ7XHJcblxyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0Y3VyVG9wID0gcGFyc2VGbG9hdCggY3VyQ1NTVG9wICkgfHwgMDtcclxuXHRcdFx0Y3VyTGVmdCA9IHBhcnNlRmxvYXQoIGN1ckNTU0xlZnQgKSB8fCAwO1xyXG5cdFx0fVxyXG5cclxuXHRcdGlmICggalF1ZXJ5LmlzRnVuY3Rpb24oIG9wdGlvbnMgKSApIHtcclxuXHRcdFx0b3B0aW9ucyA9IG9wdGlvbnMuY2FsbCggZWxlbSwgaSwgY3VyT2Zmc2V0ICk7XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKCBvcHRpb25zLnRvcCAhPSBudWxsICkge1xyXG5cdFx0XHRwcm9wcy50b3AgPSAoIG9wdGlvbnMudG9wIC0gY3VyT2Zmc2V0LnRvcCApICsgY3VyVG9wO1xyXG5cdFx0fVxyXG5cdFx0aWYgKCBvcHRpb25zLmxlZnQgIT0gbnVsbCApIHtcclxuXHRcdFx0cHJvcHMubGVmdCA9ICggb3B0aW9ucy5sZWZ0IC0gY3VyT2Zmc2V0LmxlZnQgKSArIGN1ckxlZnQ7XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKCBcInVzaW5nXCIgaW4gb3B0aW9ucyApIHtcclxuXHRcdFx0b3B0aW9ucy51c2luZy5jYWxsKCBlbGVtLCBwcm9wcyApO1xyXG5cclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdGN1ckVsZW0uY3NzKCBwcm9wcyApO1xyXG5cdFx0fVxyXG5cdH1cclxufTtcclxuXHJcbmpRdWVyeS5mbi5leHRlbmQoe1xyXG5cdG9mZnNldDogZnVuY3Rpb24oIG9wdGlvbnMgKSB7XHJcblx0XHRpZiAoIGFyZ3VtZW50cy5sZW5ndGggKSB7XHJcblx0XHRcdHJldHVybiBvcHRpb25zID09PSB1bmRlZmluZWQgP1xyXG5cdFx0XHRcdHRoaXMgOlxyXG5cdFx0XHRcdHRoaXMuZWFjaChmdW5jdGlvbiggaSApIHtcclxuXHRcdFx0XHRcdGpRdWVyeS5vZmZzZXQuc2V0T2Zmc2V0KCB0aGlzLCBvcHRpb25zLCBpICk7XHJcblx0XHRcdFx0fSk7XHJcblx0XHR9XHJcblxyXG5cdFx0dmFyIGRvY0VsZW0sIHdpbixcclxuXHRcdFx0ZWxlbSA9IHRoaXNbIDAgXSxcclxuXHRcdFx0Ym94ID0geyB0b3A6IDAsIGxlZnQ6IDAgfSxcclxuXHRcdFx0ZG9jID0gZWxlbSAmJiBlbGVtLm93bmVyRG9jdW1lbnQ7XHJcblxyXG5cdFx0aWYgKCAhZG9jICkge1xyXG5cdFx0XHRyZXR1cm47XHJcblx0XHR9XHJcblxyXG5cdFx0ZG9jRWxlbSA9IGRvYy5kb2N1bWVudEVsZW1lbnQ7XHJcblxyXG5cdFx0Ly8gTWFrZSBzdXJlIGl0J3Mgbm90IGEgZGlzY29ubmVjdGVkIERPTSBub2RlXHJcblx0XHRpZiAoICFqUXVlcnkuY29udGFpbnMoIGRvY0VsZW0sIGVsZW0gKSApIHtcclxuXHRcdFx0cmV0dXJuIGJveDtcclxuXHRcdH1cclxuXHJcblx0XHQvLyBTdXBwb3J0OiBCbGFja0JlcnJ5IDUsIGlPUyAzIChvcmlnaW5hbCBpUGhvbmUpXHJcblx0XHQvLyBJZiB3ZSBkb24ndCBoYXZlIGdCQ1IsIGp1c3QgdXNlIDAsMCByYXRoZXIgdGhhbiBlcnJvclxyXG5cdFx0aWYgKCB0eXBlb2YgZWxlbS5nZXRCb3VuZGluZ0NsaWVudFJlY3QgIT09IHN0cnVuZGVmaW5lZCApIHtcclxuXHRcdFx0Ym94ID0gZWxlbS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcclxuXHRcdH1cclxuXHRcdHdpbiA9IGdldFdpbmRvdyggZG9jICk7XHJcblx0XHRyZXR1cm4ge1xyXG5cdFx0XHR0b3A6IGJveC50b3AgKyB3aW4ucGFnZVlPZmZzZXQgLSBkb2NFbGVtLmNsaWVudFRvcCxcclxuXHRcdFx0bGVmdDogYm94LmxlZnQgKyB3aW4ucGFnZVhPZmZzZXQgLSBkb2NFbGVtLmNsaWVudExlZnRcclxuXHRcdH07XHJcblx0fSxcclxuXHJcblx0cG9zaXRpb246IGZ1bmN0aW9uKCkge1xyXG5cdFx0aWYgKCAhdGhpc1sgMCBdICkge1xyXG5cdFx0XHRyZXR1cm47XHJcblx0XHR9XHJcblxyXG5cdFx0dmFyIG9mZnNldFBhcmVudCwgb2Zmc2V0LFxyXG5cdFx0XHRlbGVtID0gdGhpc1sgMCBdLFxyXG5cdFx0XHRwYXJlbnRPZmZzZXQgPSB7IHRvcDogMCwgbGVmdDogMCB9O1xyXG5cclxuXHRcdC8vIEZpeGVkIGVsZW1lbnRzIGFyZSBvZmZzZXQgZnJvbSB3aW5kb3cgKHBhcmVudE9mZnNldCA9IHt0b3A6MCwgbGVmdDogMH0sIGJlY2F1c2UgaXQgaXMgaXRzIG9ubHkgb2Zmc2V0IHBhcmVudFxyXG5cdFx0aWYgKCBqUXVlcnkuY3NzKCBlbGVtLCBcInBvc2l0aW9uXCIgKSA9PT0gXCJmaXhlZFwiICkge1xyXG5cdFx0XHQvLyBBc3N1bWUgZ2V0Qm91bmRpbmdDbGllbnRSZWN0IGlzIHRoZXJlIHdoZW4gY29tcHV0ZWQgcG9zaXRpb24gaXMgZml4ZWRcclxuXHRcdFx0b2Zmc2V0ID0gZWxlbS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcclxuXHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHQvLyBHZXQgKnJlYWwqIG9mZnNldFBhcmVudFxyXG5cdFx0XHRvZmZzZXRQYXJlbnQgPSB0aGlzLm9mZnNldFBhcmVudCgpO1xyXG5cclxuXHRcdFx0Ly8gR2V0IGNvcnJlY3Qgb2Zmc2V0c1xyXG5cdFx0XHRvZmZzZXQgPSB0aGlzLm9mZnNldCgpO1xyXG5cdFx0XHRpZiAoICFqUXVlcnkubm9kZU5hbWUoIG9mZnNldFBhcmVudFsgMCBdLCBcImh0bWxcIiApICkge1xyXG5cdFx0XHRcdHBhcmVudE9mZnNldCA9IG9mZnNldFBhcmVudC5vZmZzZXQoKTtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0Ly8gQWRkIG9mZnNldFBhcmVudCBib3JkZXJzXHJcblx0XHRcdHBhcmVudE9mZnNldC50b3AgKz0galF1ZXJ5LmNzcyggb2Zmc2V0UGFyZW50WyAwIF0sIFwiYm9yZGVyVG9wV2lkdGhcIiwgdHJ1ZSApO1xyXG5cdFx0XHRwYXJlbnRPZmZzZXQubGVmdCArPSBqUXVlcnkuY3NzKCBvZmZzZXRQYXJlbnRbIDAgXSwgXCJib3JkZXJMZWZ0V2lkdGhcIiwgdHJ1ZSApO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8vIFN1YnRyYWN0IHBhcmVudCBvZmZzZXRzIGFuZCBlbGVtZW50IG1hcmdpbnNcclxuXHRcdHJldHVybiB7XHJcblx0XHRcdHRvcDogb2Zmc2V0LnRvcCAtIHBhcmVudE9mZnNldC50b3AgLSBqUXVlcnkuY3NzKCBlbGVtLCBcIm1hcmdpblRvcFwiLCB0cnVlICksXHJcblx0XHRcdGxlZnQ6IG9mZnNldC5sZWZ0IC0gcGFyZW50T2Zmc2V0LmxlZnQgLSBqUXVlcnkuY3NzKCBlbGVtLCBcIm1hcmdpbkxlZnRcIiwgdHJ1ZSApXHJcblx0XHR9O1xyXG5cdH0sXHJcblxyXG5cdG9mZnNldFBhcmVudDogZnVuY3Rpb24oKSB7XHJcblx0XHRyZXR1cm4gdGhpcy5tYXAoZnVuY3Rpb24oKSB7XHJcblx0XHRcdHZhciBvZmZzZXRQYXJlbnQgPSB0aGlzLm9mZnNldFBhcmVudCB8fCBkb2NFbGVtO1xyXG5cclxuXHRcdFx0d2hpbGUgKCBvZmZzZXRQYXJlbnQgJiYgKCAhalF1ZXJ5Lm5vZGVOYW1lKCBvZmZzZXRQYXJlbnQsIFwiaHRtbFwiICkgJiYgalF1ZXJ5LmNzcyggb2Zmc2V0UGFyZW50LCBcInBvc2l0aW9uXCIgKSA9PT0gXCJzdGF0aWNcIiApICkge1xyXG5cdFx0XHRcdG9mZnNldFBhcmVudCA9IG9mZnNldFBhcmVudC5vZmZzZXRQYXJlbnQ7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdHJldHVybiBvZmZzZXRQYXJlbnQgfHwgZG9jRWxlbTtcclxuXHRcdH0pO1xyXG5cdH1cclxufSk7XHJcblxyXG4vLyBDcmVhdGUgc2Nyb2xsTGVmdCBhbmQgc2Nyb2xsVG9wIG1ldGhvZHNcclxualF1ZXJ5LmVhY2goIHsgc2Nyb2xsTGVmdDogXCJwYWdlWE9mZnNldFwiLCBzY3JvbGxUb3A6IFwicGFnZVlPZmZzZXRcIiB9LCBmdW5jdGlvbiggbWV0aG9kLCBwcm9wICkge1xyXG5cdHZhciB0b3AgPSBcInBhZ2VZT2Zmc2V0XCIgPT09IHByb3A7XHJcblxyXG5cdGpRdWVyeS5mblsgbWV0aG9kIF0gPSBmdW5jdGlvbiggdmFsICkge1xyXG5cdFx0cmV0dXJuIGFjY2VzcyggdGhpcywgZnVuY3Rpb24oIGVsZW0sIG1ldGhvZCwgdmFsICkge1xyXG5cdFx0XHR2YXIgd2luID0gZ2V0V2luZG93KCBlbGVtICk7XHJcblxyXG5cdFx0XHRpZiAoIHZhbCA9PT0gdW5kZWZpbmVkICkge1xyXG5cdFx0XHRcdHJldHVybiB3aW4gPyB3aW5bIHByb3AgXSA6IGVsZW1bIG1ldGhvZCBdO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRpZiAoIHdpbiApIHtcclxuXHRcdFx0XHR3aW4uc2Nyb2xsVG8oXHJcblx0XHRcdFx0XHQhdG9wID8gdmFsIDogd2luZG93LnBhZ2VYT2Zmc2V0LFxyXG5cdFx0XHRcdFx0dG9wID8gdmFsIDogd2luZG93LnBhZ2VZT2Zmc2V0XHJcblx0XHRcdFx0KTtcclxuXHJcblx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0ZWxlbVsgbWV0aG9kIF0gPSB2YWw7XHJcblx0XHRcdH1cclxuXHRcdH0sIG1ldGhvZCwgdmFsLCBhcmd1bWVudHMubGVuZ3RoLCBudWxsICk7XHJcblx0fTtcclxufSk7XHJcblxyXG4vLyBTdXBwb3J0OiBTYWZhcmk8NyssIENocm9tZTwzNytcclxuLy8gQWRkIHRoZSB0b3AvbGVmdCBjc3NIb29rcyB1c2luZyBqUXVlcnkuZm4ucG9zaXRpb25cclxuLy8gV2Via2l0IGJ1ZzogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI5MDg0XHJcbi8vIEJsaW5rIGJ1ZzogaHR0cHM6Ly9jb2RlLmdvb2dsZS5jb20vcC9jaHJvbWl1bS9pc3N1ZXMvZGV0YWlsP2lkPTIyOTI4MFxyXG4vLyBnZXRDb21wdXRlZFN0eWxlIHJldHVybnMgcGVyY2VudCB3aGVuIHNwZWNpZmllZCBmb3IgdG9wL2xlZnQvYm90dG9tL3JpZ2h0O1xyXG4vLyByYXRoZXIgdGhhbiBtYWtlIHRoZSBjc3MgbW9kdWxlIGRlcGVuZCBvbiB0aGUgb2Zmc2V0IG1vZHVsZSwganVzdCBjaGVjayBmb3IgaXQgaGVyZVxyXG5qUXVlcnkuZWFjaCggWyBcInRvcFwiLCBcImxlZnRcIiBdLCBmdW5jdGlvbiggaSwgcHJvcCApIHtcclxuXHRqUXVlcnkuY3NzSG9va3NbIHByb3AgXSA9IGFkZEdldEhvb2tJZiggc3VwcG9ydC5waXhlbFBvc2l0aW9uLFxyXG5cdFx0ZnVuY3Rpb24oIGVsZW0sIGNvbXB1dGVkICkge1xyXG5cdFx0XHRpZiAoIGNvbXB1dGVkICkge1xyXG5cdFx0XHRcdGNvbXB1dGVkID0gY3VyQ1NTKCBlbGVtLCBwcm9wICk7XHJcblx0XHRcdFx0Ly8gSWYgY3VyQ1NTIHJldHVybnMgcGVyY2VudGFnZSwgZmFsbGJhY2sgdG8gb2Zmc2V0XHJcblx0XHRcdFx0cmV0dXJuIHJudW1ub25weC50ZXN0KCBjb21wdXRlZCApID9cclxuXHRcdFx0XHRcdGpRdWVyeSggZWxlbSApLnBvc2l0aW9uKClbIHByb3AgXSArIFwicHhcIiA6XHJcblx0XHRcdFx0XHRjb21wdXRlZDtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdCk7XHJcbn0pO1xyXG5cclxuXHJcbi8vIENyZWF0ZSBpbm5lckhlaWdodCwgaW5uZXJXaWR0aCwgaGVpZ2h0LCB3aWR0aCwgb3V0ZXJIZWlnaHQgYW5kIG91dGVyV2lkdGggbWV0aG9kc1xyXG5qUXVlcnkuZWFjaCggeyBIZWlnaHQ6IFwiaGVpZ2h0XCIsIFdpZHRoOiBcIndpZHRoXCIgfSwgZnVuY3Rpb24oIG5hbWUsIHR5cGUgKSB7XHJcblx0alF1ZXJ5LmVhY2goIHsgcGFkZGluZzogXCJpbm5lclwiICsgbmFtZSwgY29udGVudDogdHlwZSwgXCJcIjogXCJvdXRlclwiICsgbmFtZSB9LCBmdW5jdGlvbiggZGVmYXVsdEV4dHJhLCBmdW5jTmFtZSApIHtcclxuXHRcdC8vIE1hcmdpbiBpcyBvbmx5IGZvciBvdXRlckhlaWdodCwgb3V0ZXJXaWR0aFxyXG5cdFx0alF1ZXJ5LmZuWyBmdW5jTmFtZSBdID0gZnVuY3Rpb24oIG1hcmdpbiwgdmFsdWUgKSB7XHJcblx0XHRcdHZhciBjaGFpbmFibGUgPSBhcmd1bWVudHMubGVuZ3RoICYmICggZGVmYXVsdEV4dHJhIHx8IHR5cGVvZiBtYXJnaW4gIT09IFwiYm9vbGVhblwiICksXHJcblx0XHRcdFx0ZXh0cmEgPSBkZWZhdWx0RXh0cmEgfHwgKCBtYXJnaW4gPT09IHRydWUgfHwgdmFsdWUgPT09IHRydWUgPyBcIm1hcmdpblwiIDogXCJib3JkZXJcIiApO1xyXG5cclxuXHRcdFx0cmV0dXJuIGFjY2VzcyggdGhpcywgZnVuY3Rpb24oIGVsZW0sIHR5cGUsIHZhbHVlICkge1xyXG5cdFx0XHRcdHZhciBkb2M7XHJcblxyXG5cdFx0XHRcdGlmICggalF1ZXJ5LmlzV2luZG93KCBlbGVtICkgKSB7XHJcblx0XHRcdFx0XHQvLyBBcyBvZiA1LzgvMjAxMiB0aGlzIHdpbGwgeWllbGQgaW5jb3JyZWN0IHJlc3VsdHMgZm9yIE1vYmlsZSBTYWZhcmksIGJ1dCB0aGVyZVxyXG5cdFx0XHRcdFx0Ly8gaXNuJ3QgYSB3aG9sZSBsb3Qgd2UgY2FuIGRvLiBTZWUgcHVsbCByZXF1ZXN0IGF0IHRoaXMgVVJMIGZvciBkaXNjdXNzaW9uOlxyXG5cdFx0XHRcdFx0Ly8gaHR0cHM6Ly9naXRodWIuY29tL2pxdWVyeS9qcXVlcnkvcHVsbC83NjRcclxuXHRcdFx0XHRcdHJldHVybiBlbGVtLmRvY3VtZW50LmRvY3VtZW50RWxlbWVudFsgXCJjbGllbnRcIiArIG5hbWUgXTtcclxuXHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdC8vIEdldCBkb2N1bWVudCB3aWR0aCBvciBoZWlnaHRcclxuXHRcdFx0XHRpZiAoIGVsZW0ubm9kZVR5cGUgPT09IDkgKSB7XHJcblx0XHRcdFx0XHRkb2MgPSBlbGVtLmRvY3VtZW50RWxlbWVudDtcclxuXHJcblx0XHRcdFx0XHQvLyBFaXRoZXIgc2Nyb2xsW1dpZHRoL0hlaWdodF0gb3Igb2Zmc2V0W1dpZHRoL0hlaWdodF0gb3IgY2xpZW50W1dpZHRoL0hlaWdodF0sXHJcblx0XHRcdFx0XHQvLyB3aGljaGV2ZXIgaXMgZ3JlYXRlc3RcclxuXHRcdFx0XHRcdHJldHVybiBNYXRoLm1heChcclxuXHRcdFx0XHRcdFx0ZWxlbS5ib2R5WyBcInNjcm9sbFwiICsgbmFtZSBdLCBkb2NbIFwic2Nyb2xsXCIgKyBuYW1lIF0sXHJcblx0XHRcdFx0XHRcdGVsZW0uYm9keVsgXCJvZmZzZXRcIiArIG5hbWUgXSwgZG9jWyBcIm9mZnNldFwiICsgbmFtZSBdLFxyXG5cdFx0XHRcdFx0XHRkb2NbIFwiY2xpZW50XCIgKyBuYW1lIF1cclxuXHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRyZXR1cm4gdmFsdWUgPT09IHVuZGVmaW5lZCA/XHJcblx0XHRcdFx0XHQvLyBHZXQgd2lkdGggb3IgaGVpZ2h0IG9uIHRoZSBlbGVtZW50LCByZXF1ZXN0aW5nIGJ1dCBub3QgZm9yY2luZyBwYXJzZUZsb2F0XHJcblx0XHRcdFx0XHRqUXVlcnkuY3NzKCBlbGVtLCB0eXBlLCBleHRyYSApIDpcclxuXHJcblx0XHRcdFx0XHQvLyBTZXQgd2lkdGggb3IgaGVpZ2h0IG9uIHRoZSBlbGVtZW50XHJcblx0XHRcdFx0XHRqUXVlcnkuc3R5bGUoIGVsZW0sIHR5cGUsIHZhbHVlLCBleHRyYSApO1xyXG5cdFx0XHR9LCB0eXBlLCBjaGFpbmFibGUgPyBtYXJnaW4gOiB1bmRlZmluZWQsIGNoYWluYWJsZSwgbnVsbCApO1xyXG5cdFx0fTtcclxuXHR9KTtcclxufSk7XHJcblxyXG5cclxuLy8gVGhlIG51bWJlciBvZiBlbGVtZW50cyBjb250YWluZWQgaW4gdGhlIG1hdGNoZWQgZWxlbWVudCBzZXRcclxualF1ZXJ5LmZuLnNpemUgPSBmdW5jdGlvbigpIHtcclxuXHRyZXR1cm4gdGhpcy5sZW5ndGg7XHJcbn07XHJcblxyXG5qUXVlcnkuZm4uYW5kU2VsZiA9IGpRdWVyeS5mbi5hZGRCYWNrO1xyXG5cclxuXHJcblxyXG5cclxuLy8gUmVnaXN0ZXIgYXMgYSBuYW1lZCBBTUQgbW9kdWxlLCBzaW5jZSBqUXVlcnkgY2FuIGJlIGNvbmNhdGVuYXRlZCB3aXRoIG90aGVyXHJcbi8vIGZpbGVzIHRoYXQgbWF5IHVzZSBkZWZpbmUsIGJ1dCBub3QgdmlhIGEgcHJvcGVyIGNvbmNhdGVuYXRpb24gc2NyaXB0IHRoYXRcclxuLy8gdW5kZXJzdGFuZHMgYW5vbnltb3VzIEFNRCBtb2R1bGVzLiBBIG5hbWVkIEFNRCBpcyBzYWZlc3QgYW5kIG1vc3Qgcm9idXN0XHJcbi8vIHdheSB0byByZWdpc3Rlci4gTG93ZXJjYXNlIGpxdWVyeSBpcyB1c2VkIGJlY2F1c2UgQU1EIG1vZHVsZSBuYW1lcyBhcmVcclxuLy8gZGVyaXZlZCBmcm9tIGZpbGUgbmFtZXMsIGFuZCBqUXVlcnkgaXMgbm9ybWFsbHkgZGVsaXZlcmVkIGluIGEgbG93ZXJjYXNlXHJcbi8vIGZpbGUgbmFtZS4gRG8gdGhpcyBhZnRlciBjcmVhdGluZyB0aGUgZ2xvYmFsIHNvIHRoYXQgaWYgYW4gQU1EIG1vZHVsZSB3YW50c1xyXG4vLyB0byBjYWxsIG5vQ29uZmxpY3QgdG8gaGlkZSB0aGlzIHZlcnNpb24gb2YgalF1ZXJ5LCBpdCB3aWxsIHdvcmsuXHJcblxyXG4vLyBOb3RlIHRoYXQgZm9yIG1heGltdW0gcG9ydGFiaWxpdHksIGxpYnJhcmllcyB0aGF0IGFyZSBub3QgalF1ZXJ5IHNob3VsZFxyXG4vLyBkZWNsYXJlIHRoZW1zZWx2ZXMgYXMgYW5vbnltb3VzIG1vZHVsZXMsIGFuZCBhdm9pZCBzZXR0aW5nIGEgZ2xvYmFsIGlmIGFuXHJcbi8vIEFNRCBsb2FkZXIgaXMgcHJlc2VudC4galF1ZXJ5IGlzIGEgc3BlY2lhbCBjYXNlLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlXHJcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9qcmJ1cmtlL3JlcXVpcmVqcy93aWtpL1VwZGF0aW5nLWV4aXN0aW5nLWxpYnJhcmllcyN3aWtpLWFub25cclxuXHJcbmlmICggdHlwZW9mIGRlZmluZSA9PT0gXCJmdW5jdGlvblwiICYmIGRlZmluZS5hbWQgKSB7XHJcblx0ZGVmaW5lKCBcImpxdWVyeVwiLCBbXSwgZnVuY3Rpb24oKSB7XHJcblx0XHRyZXR1cm4galF1ZXJ5O1xyXG5cdH0pO1xyXG59XHJcblxyXG5cclxuXHJcblxyXG52YXJcclxuXHQvLyBNYXAgb3ZlciBqUXVlcnkgaW4gY2FzZSBvZiBvdmVyd3JpdGVcclxuXHRfalF1ZXJ5ID0gd2luZG93LmpRdWVyeSxcclxuXHJcblx0Ly8gTWFwIG92ZXIgdGhlICQgaW4gY2FzZSBvZiBvdmVyd3JpdGVcclxuXHRfJCA9IHdpbmRvdy4kO1xyXG5cclxualF1ZXJ5Lm5vQ29uZmxpY3QgPSBmdW5jdGlvbiggZGVlcCApIHtcclxuXHRpZiAoIHdpbmRvdy4kID09PSBqUXVlcnkgKSB7XHJcblx0XHR3aW5kb3cuJCA9IF8kO1xyXG5cdH1cclxuXHJcblx0aWYgKCBkZWVwICYmIHdpbmRvdy5qUXVlcnkgPT09IGpRdWVyeSApIHtcclxuXHRcdHdpbmRvdy5qUXVlcnkgPSBfalF1ZXJ5O1xyXG5cdH1cclxuXHJcblx0cmV0dXJuIGpRdWVyeTtcclxufTtcclxuXHJcbi8vIEV4cG9zZSBqUXVlcnkgYW5kICQgaWRlbnRpZmllcnMsIGV2ZW4gaW4gQU1EXHJcbi8vICgjNzEwMiNjb21tZW50OjEwLCBodHRwczovL2dpdGh1Yi5jb20vanF1ZXJ5L2pxdWVyeS9wdWxsLzU1NylcclxuLy8gYW5kIENvbW1vbkpTIGZvciBicm93c2VyIGVtdWxhdG9ycyAoIzEzNTY2KVxyXG5pZiAoIHR5cGVvZiBub0dsb2JhbCA9PT0gc3RydW5kZWZpbmVkICkge1xyXG5cdHdpbmRvdy5qUXVlcnkgPSB3aW5kb3cuJCA9IGpRdWVyeTtcclxufVxyXG5cclxuXHJcblxyXG5cclxucmV0dXJuIGpRdWVyeTtcclxuXHJcbn0pKTtcclxuIn0sICJoZWFkZXJzU2l6ZSI6IDAsICJib2R5U2l6ZSI6IDc2NzEwLCAicmVkaXJlY3RVUkwiOiAiIiwgIl90cmFuc2ZlclNpemUiOiA3NjcxMH0sICJjYWNoZSI6IHt9LCAidGltaW5ncyI6IHsiZG5zIjogLTEsICJjb25uZWN0IjogLTEsICJzc2wiOiAtMSwgInNlbmQiOiAwLCAid2FpdCI6IDY4NC4yNTEsICJyZWNlaXZlIjogMTEuOTU4fSwgInBhZ2VyZWYiOiAicGFnZUA4YzkzMmY4MzM3ZDlhYmI0YjlhYjk4ODlkZWM1MWI5OSIsICJzZXJ2ZXJJUEFkZHJlc3MiOiAiWzI2MDY6NDcwMDoyMDo6NjgxYTplY2ZdIiwgIl9zZXJ2ZXJQb3J0IjogNDQzLCAiX3NlY3VyaXR5RGV0YWlscyI6IHsicHJvdG9jb2wiOiAiVExTIDEuMyIsICJzdWJqZWN0TmFtZSI6ICJzdXBwbHljaGFpbmNhbmFkYS5jb20iLCAiaXNzdWVyIjogIldFMSIsICJ2YWxpZEZyb20iOiAxNzIzNDcwODQxLCAidmFsaWRUbyI6IDE3MzEyNDY4NDB9fSwgeyJzdGFydGVkRGF0ZVRpbWUiOiAiMjAyNC0wOS0wNVQxMTowNzoyMC4yOTBaIiwgInRpbWUiOiA0MTIuNTg1MDAwMDAwMDAwMDQsICJyZXF1ZXN0IjogeyJtZXRob2QiOiAiR0VUIiwgInVybCI6ICJodHRwczovL3BvcnRhbC5zdXBwbHljaGFpbmNhbmFkYS5jb20vY21zMi9qcy9ib290c3RyYXAuanMiLCAiaHR0cFZlcnNpb24iOiAiSFRUUC8yLjAiLCAiY29va2llcyI6IFt7Im5hbWUiOiAiSlNFU1NJT05JRCIsICJ2YWx1ZSI6ICIyNTdEOURDOTIwNDUyQTREOTMzQjhBM0NEQTlCNkJEMyJ9XSwgImhlYWRlcnMiOiBbeyJuYW1lIjogIjphdXRob3JpdHkiLCAidmFsdWUiOiAicG9ydGFsLnN1cHBseWNoYWluY2FuYWRhLmNvbSJ9LCB7Im5hbWUiOiAiOm1ldGhvZCIsICJ2YWx1ZSI6ICJHRVQifSwgeyJuYW1lIjogIjpwYXRoIiwgInZhbHVlIjogIi9jbXMyL2pzL2Jvb3RzdHJhcC5qcyJ9LCB7Im5hbWUiOiAiOnNjaGVtZSIsICJ2YWx1ZSI6ICJodHRwcyJ9LCB7Im5hbWUiOiAiYWNjZXB0IiwgInZhbHVlIjogIiovKiJ9LCB7Im5hbWUiOiAiYWNjZXB0LWVuY29kaW5nIiwgInZhbHVlIjogImd6aXAsIGRlZmxhdGUsIGJyLCB6c3RkIn0sIHsibmFtZSI6ICJhY2NlcHQtbGFuZ3VhZ2UiLCAidmFsdWUiOiAiZW4tVVMifSwgeyJuYW1lIjogImNvb2tpZSIsICJ2YWx1ZSI6ICJKU0VTU0lPTklEPTI1N0Q5REM5MjA0NTJBNEQ5MzNCOEEzQ0RBOUI2QkQzIn0sIHsibmFtZSI6ICJwcmlvcml0eSIsICJ2YWx1ZSI6ICJ1PTEifSwgeyJuYW1lIjogInJlZmVyZXIiLCAidmFsdWUiOiAiaHR0cHM6Ly9wb3J0YWwuc3VwcGx5Y2hhaW5jYW5hZGEuY29tL2VuL3BvcnRhbGxvZ2luIn0sIHsibmFtZSI6ICJzZWMtY2gtdWEiLCAidmFsdWUiOiAiXCJOb3Q7QT1CcmFuZFwiO3Y9XCIyNFwiLCBcIkNocm9taXVtXCI7dj1cIjEyOFwiIn0sIHsibmFtZSI6ICJzZWMtY2gtdWEtbW9iaWxlIiwgInZhbHVlIjogIj8wIn0sIHsibmFtZSI6ICJzZWMtY2gtdWEtcGxhdGZvcm0iLCAidmFsdWUiOiAiXCJXaW5kb3dzXCIifSwgeyJuYW1lIjogInNlYy1mZXRjaC1kZXN0IiwgInZhbHVlIjogInNjcmlwdCJ9LCB7Im5hbWUiOiAic2VjLWZldGNoLW1vZGUiLCAidmFsdWUiOiAibm8tY29ycyJ9LCB7Im5hbWUiOiAic2VjLWZldGNoLXNpdGUiLCAidmFsdWUiOiAic2FtZS1vcmlnaW4ifSwgeyJuYW1lIjogInVzZXItYWdlbnQiLCAidmFsdWUiOiAiTW96aWxsYS81LjAgKFdpbmRvd3MgTlQgMTAuMDsgV2luNjQ7IHg2NCkgQXBwbGVXZWJLaXQvNTM3LjM2IChLSFRNTCwgbGlrZSBHZWNrbykgQ2hyb21lLzEyOC4wLjY2MTMuMTggU2FmYXJpLzUzNy4zNiJ9XSwgInF1ZXJ5U3RyaW5nIjogW10sICJoZWFkZXJzU2l6ZSI6IDY2MCwgImJvZHlTaXplIjogMH0sICJyZXNwb25zZSI6IHsic3RhdHVzIjogMjAwLCAic3RhdHVzVGV4dCI6ICIiLCAiaHR0cFZlcnNpb24iOiAiSFRUUC8yLjAiLCAiY29va2llcyI6IFtdLCAiaGVhZGVycyI6IFt7Im5hbWUiOiAiY2FjaGUtY29udHJvbCIsICJ2YWx1ZSI6ICJtYXgtYWdlPTE0NDAwIn0sIHsibmFtZSI6ICJjZi1jYWNoZS1zdGF0dXMiLCAidmFsdWUiOiAiTUlTUyJ9LCB7Im5hbWUiOiAiY2YtcmF5IiwgInZhbHVlIjogIjhiZTVjMTRiZDg0YjcxYzQtRlJBIn0sIHsibmFtZSI6ICJjb250ZW50LWVuY29kaW5nIiwgInZhbHVlIjogImJyIn0sIHsibmFtZSI6ICJjb250ZW50LXR5cGUiLCAidmFsdWUiOiAiYXBwbGljYXRpb24vamF2YXNjcmlwdCJ9LCB7Im5hbWUiOiAiZGF0ZSIsICJ2YWx1ZSI6ICJUaHUsIDA1IFNlcCAyMDI0IDExOjA3OjIwIEdNVCJ9LCB7Im5hbWUiOiAiZXRhZyIsICJ2YWx1ZSI6ICJXL1wiMzE4MjQtMTY4MTMzMzQyMjAwMFwiIn0sIHsibmFtZSI6ICJsYXN0LW1vZGlmaWVkIiwgInZhbHVlIjogIldlZCwgMTIgQXByIDIwMjMgMjE6MDM6NDIgR01UIn0sIHsibmFtZSI6ICJuZWwiLCAidmFsdWUiOiAie1wic3VjY2Vzc19mcmFjdGlvblwiOjAsXCJyZXBvcnRfdG9cIjpcImNmLW5lbFwiLFwibWF4X2FnZVwiOjYwNDgwMH0ifSwgeyJuYW1lIjogInJlcG9ydC10byIsICJ2YWx1ZSI6ICJ7XCJlbmRwb2ludHNcIjpbe1widXJsXCI6XCJodHRwczpcXC9cXC9hLm5lbC5jbG91ZGZsYXJlLmNvbVxcL3JlcG9ydFxcL3Y0P3M9eVdKZTlObGd1V0QlMkZHUW5iSFplOFNEbE53OERRREYxTExsUTlDWVglMkJMWHpycWxiTXViRmF4bXRrTXJYU0wyRVVac0JlYXVudzJDdkRIRUVlQThJMUVOVm5UQkJKQWRrakFqcUVJYTVvd0ljTEJRaVVxekg5ZkJ4STY1RGg1Tm05WFhNNGNzQXEya0xzdmtwTEI0SzRqJTJGWkE5NCUyRkN3RVJTOE1zJTNEXCJ9XSxcImdyb3VwXCI6XCJjZi1uZWxcIixcIm1heF9hZ2VcIjo2MDQ4MDB9In0sIHsibmFtZSI6ICJzZXJ2ZXIiLCAidmFsdWUiOiAiY2xvdWRmbGFyZSJ9LCB7Im5hbWUiOiAic3RyaWN0LXRyYW5zcG9ydC1zZWN1cml0eSIsICJ2YWx1ZSI6ICJtYXgtYWdlPTYzMDcyMDAwOyBpbmNsdWRlU3ViZG9tYWluczsgcHJlbG9hZCJ9LCB7Im5hbWUiOiAidmFyeSIsICJ2YWx1ZSI6ICJBY2NlcHQtRW5jb2RpbmcifV0sICJjb250ZW50IjogeyJzaXplIjogMzE4MjQsICJtaW1lVHlwZSI6ICJhcHBsaWNhdGlvbi9qYXZhc2NyaXB0IiwgImNvbXByZXNzaW9uIjogMjI1NzIsICJ0ZXh0IjogIi8qIVxyXG4gKiBCb290c3RyYXAgdjMuMi4wIChodHRwOi8vZ2V0Ym9vdHN0cmFwLmNvbSlcclxuICogQ29weXJpZ2h0IDIwMTEtMjAxNCBUd2l0dGVyLCBJbmMuXHJcbiAqIExpY2Vuc2VkIHVuZGVyIE1JVCAoaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2Jsb2IvbWFzdGVyL0xJQ0VOU0UpXHJcbiAqL1xyXG5pZihcInVuZGVmaW5lZFwiPT10eXBlb2YgalF1ZXJ5KXRocm93IG5ldyBFcnJvcihcIkJvb3RzdHJhcCdzIEphdmFTY3JpcHQgcmVxdWlyZXMgalF1ZXJ5XCIpOytmdW5jdGlvbihhKXtcInVzZSBzdHJpY3RcIjtmdW5jdGlvbiBiKCl7dmFyIGE9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImJvb3RzdHJhcFwiKSxiPXtXZWJraXRUcmFuc2l0aW9uOlwid2Via2l0VHJhbnNpdGlvbkVuZFwiLE1velRyYW5zaXRpb246XCJ0cmFuc2l0aW9uZW5kXCIsT1RyYW5zaXRpb246XCJvVHJhbnNpdGlvbkVuZCBvdHJhbnNpdGlvbmVuZFwiLHRyYW5zaXRpb246XCJ0cmFuc2l0aW9uZW5kXCJ9O2Zvcih2YXIgYyBpbiBiKWlmKHZvaWQgMCE9PWEuc3R5bGVbY10pcmV0dXJue2VuZDpiW2NdfTtyZXR1cm4hMX1hLmZuLmVtdWxhdGVUcmFuc2l0aW9uRW5kPWZ1bmN0aW9uKGIpe3ZhciBjPSExLGQ9dGhpczthKHRoaXMpLm9uZShcImJzVHJhbnNpdGlvbkVuZFwiLGZ1bmN0aW9uKCl7Yz0hMH0pO3ZhciBlPWZ1bmN0aW9uKCl7Y3x8YShkKS50cmlnZ2VyKGEuc3VwcG9ydC50cmFuc2l0aW9uLmVuZCl9O3JldHVybiBzZXRUaW1lb3V0KGUsYiksdGhpc30sYShmdW5jdGlvbigpe2Euc3VwcG9ydC50cmFuc2l0aW9uPWIoKSxhLnN1cHBvcnQudHJhbnNpdGlvbiYmKGEuZXZlbnQuc3BlY2lhbC5ic1RyYW5zaXRpb25FbmQ9e2JpbmRUeXBlOmEuc3VwcG9ydC50cmFuc2l0aW9uLmVuZCxkZWxlZ2F0ZVR5cGU6YS5zdXBwb3J0LnRyYW5zaXRpb24uZW5kLGhhbmRsZTpmdW5jdGlvbihiKXtyZXR1cm4gYShiLnRhcmdldCkuaXModGhpcyk/Yi5oYW5kbGVPYmouaGFuZGxlci5hcHBseSh0aGlzLGFyZ3VtZW50cyk6dm9pZCAwfX0pfSl9KGpRdWVyeSksK2Z1bmN0aW9uKGEpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIGIoYil7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe3ZhciBjPWEodGhpcyksZT1jLmRhdGEoXCJicy5hbGVydFwiKTtlfHxjLmRhdGEoXCJicy5hbGVydFwiLGU9bmV3IGQodGhpcykpLFwic3RyaW5nXCI9PXR5cGVvZiBiJiZlW2JdLmNhbGwoYyl9KX12YXIgYz0nW2RhdGEtZGlzbWlzcz1cImFsZXJ0XCJdJyxkPWZ1bmN0aW9uKGIpe2EoYikub24oXCJjbGlja1wiLGMsdGhpcy5jbG9zZSl9O2QuVkVSU0lPTj1cIjMuMi4wXCIsZC5wcm90b3R5cGUuY2xvc2U9ZnVuY3Rpb24oYil7ZnVuY3Rpb24gYygpe2YuZGV0YWNoKCkudHJpZ2dlcihcImNsb3NlZC5icy5hbGVydFwiKS5yZW1vdmUoKX12YXIgZD1hKHRoaXMpLGU9ZC5hdHRyKFwiZGF0YS10YXJnZXRcIik7ZXx8KGU9ZC5hdHRyKFwiaHJlZlwiKSxlPWUmJmUucmVwbGFjZSgvLiooPz0jW15cXHNdKiQpLyxcIlwiKSk7dmFyIGY9YShlKTtiJiZiLnByZXZlbnREZWZhdWx0KCksZi5sZW5ndGh8fChmPWQuaGFzQ2xhc3MoXCJhbGVydFwiKT9kOmQucGFyZW50KCkpLGYudHJpZ2dlcihiPWEuRXZlbnQoXCJjbG9zZS5icy5hbGVydFwiKSksYi5pc0RlZmF1bHRQcmV2ZW50ZWQoKXx8KGYucmVtb3ZlQ2xhc3MoXCJpblwiKSxhLnN1cHBvcnQudHJhbnNpdGlvbiYmZi5oYXNDbGFzcyhcImZhZGVcIik/Zi5vbmUoXCJic1RyYW5zaXRpb25FbmRcIixjKS5lbXVsYXRlVHJhbnNpdGlvbkVuZCgxNTApOmMoKSl9O3ZhciBlPWEuZm4uYWxlcnQ7YS5mbi5hbGVydD1iLGEuZm4uYWxlcnQuQ29uc3RydWN0b3I9ZCxhLmZuLmFsZXJ0Lm5vQ29uZmxpY3Q9ZnVuY3Rpb24oKXtyZXR1cm4gYS5mbi5hbGVydD1lLHRoaXN9LGEoZG9jdW1lbnQpLm9uKFwiY2xpY2suYnMuYWxlcnQuZGF0YS1hcGlcIixjLGQucHJvdG90eXBlLmNsb3NlKX0oalF1ZXJ5KSwrZnVuY3Rpb24oYSl7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gYihiKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIGQ9YSh0aGlzKSxlPWQuZGF0YShcImJzLmJ1dHRvblwiKSxmPVwib2JqZWN0XCI9PXR5cGVvZiBiJiZiO2V8fGQuZGF0YShcImJzLmJ1dHRvblwiLGU9bmV3IGModGhpcyxmKSksXCJ0b2dnbGVcIj09Yj9lLnRvZ2dsZSgpOmImJmUuc2V0U3RhdGUoYil9KX12YXIgYz1mdW5jdGlvbihiLGQpe3RoaXMuJGVsZW1lbnQ9YShiKSx0aGlzLm9wdGlvbnM9YS5leHRlbmQoe30sYy5ERUZBVUxUUyxkKSx0aGlzLmlzTG9hZGluZz0hMX07Yy5WRVJTSU9OPVwiMy4yLjBcIixjLkRFRkFVTFRTPXtsb2FkaW5nVGV4dDpcImxvYWRpbmcuLi5cIn0sYy5wcm90b3R5cGUuc2V0U3RhdGU9ZnVuY3Rpb24oYil7dmFyIGM9XCJkaXNhYmxlZFwiLGQ9dGhpcy4kZWxlbWVudCxlPWQuaXMoXCJpbnB1dFwiKT9cInZhbFwiOlwiaHRtbFwiLGY9ZC5kYXRhKCk7Yis9XCJUZXh0XCIsbnVsbD09Zi5yZXNldFRleHQmJmQuZGF0YShcInJlc2V0VGV4dFwiLGRbZV0oKSksZFtlXShudWxsPT1mW2JdP3RoaXMub3B0aW9uc1tiXTpmW2JdKSxzZXRUaW1lb3V0KGEucHJveHkoZnVuY3Rpb24oKXtcImxvYWRpbmdUZXh0XCI9PWI/KHRoaXMuaXNMb2FkaW5nPSEwLGQuYWRkQ2xhc3MoYykuYXR0cihjLGMpKTp0aGlzLmlzTG9hZGluZyYmKHRoaXMuaXNMb2FkaW5nPSExLGQucmVtb3ZlQ2xhc3MoYykucmVtb3ZlQXR0cihjKSl9LHRoaXMpLDApfSxjLnByb3RvdHlwZS50b2dnbGU9ZnVuY3Rpb24oKXt2YXIgYT0hMCxiPXRoaXMuJGVsZW1lbnQuY2xvc2VzdCgnW2RhdGEtdG9nZ2xlPVwiYnV0dG9uc1wiXScpO2lmKGIubGVuZ3RoKXt2YXIgYz10aGlzLiRlbGVtZW50LmZpbmQoXCJpbnB1dFwiKTtcInJhZGlvXCI9PWMucHJvcChcInR5cGVcIikmJihjLnByb3AoXCJjaGVja2VkXCIpJiZ0aGlzLiRlbGVtZW50Lmhhc0NsYXNzKFwiYWN0aXZlXCIpP2E9ITE6Yi5maW5kKFwiLmFjdGl2ZVwiKS5yZW1vdmVDbGFzcyhcImFjdGl2ZVwiKSksYSYmYy5wcm9wKFwiY2hlY2tlZFwiLCF0aGlzLiRlbGVtZW50Lmhhc0NsYXNzKFwiYWN0aXZlXCIpKS50cmlnZ2VyKFwiY2hhbmdlXCIpfWEmJnRoaXMuJGVsZW1lbnQudG9nZ2xlQ2xhc3MoXCJhY3RpdmVcIil9O3ZhciBkPWEuZm4uYnV0dG9uO2EuZm4uYnV0dG9uPWIsYS5mbi5idXR0b24uQ29uc3RydWN0b3I9YyxhLmZuLmJ1dHRvbi5ub0NvbmZsaWN0PWZ1bmN0aW9uKCl7cmV0dXJuIGEuZm4uYnV0dG9uPWQsdGhpc30sYShkb2N1bWVudCkub24oXCJjbGljay5icy5idXR0b24uZGF0YS1hcGlcIiwnW2RhdGEtdG9nZ2xlXj1cImJ1dHRvblwiXScsZnVuY3Rpb24oYyl7dmFyIGQ9YShjLnRhcmdldCk7ZC5oYXNDbGFzcyhcImJ0blwiKXx8KGQ9ZC5jbG9zZXN0KFwiLmJ0blwiKSksYi5jYWxsKGQsXCJ0b2dnbGVcIiksYy5wcmV2ZW50RGVmYXVsdCgpfSl9KGpRdWVyeSksK2Z1bmN0aW9uKGEpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIGIoYil7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe3ZhciBkPWEodGhpcyksZT1kLmRhdGEoXCJicy5jYXJvdXNlbFwiKSxmPWEuZXh0ZW5kKHt9LGMuREVGQVVMVFMsZC5kYXRhKCksXCJvYmplY3RcIj09dHlwZW9mIGImJmIpLGc9XCJzdHJpbmdcIj09dHlwZW9mIGI/YjpmLnNsaWRlO2V8fGQuZGF0YShcImJzLmNhcm91c2VsXCIsZT1uZXcgYyh0aGlzLGYpKSxcIm51bWJlclwiPT10eXBlb2YgYj9lLnRvKGIpOmc/ZVtnXSgpOmYuaW50ZXJ2YWwmJmUucGF1c2UoKS5jeWNsZSgpfSl9dmFyIGM9ZnVuY3Rpb24oYixjKXt0aGlzLiRlbGVtZW50PWEoYikub24oXCJrZXlkb3duLmJzLmNhcm91c2VsXCIsYS5wcm94eSh0aGlzLmtleWRvd24sdGhpcykpLHRoaXMuJGluZGljYXRvcnM9dGhpcy4kZWxlbWVudC5maW5kKFwiLmNhcm91c2VsLWluZGljYXRvcnNcIiksdGhpcy5vcHRpb25zPWMsdGhpcy5wYXVzZWQ9dGhpcy5zbGlkaW5nPXRoaXMuaW50ZXJ2YWw9dGhpcy4kYWN0aXZlPXRoaXMuJGl0ZW1zPW51bGwsXCJob3ZlclwiPT10aGlzLm9wdGlvbnMucGF1c2UmJnRoaXMuJGVsZW1lbnQub24oXCJtb3VzZWVudGVyLmJzLmNhcm91c2VsXCIsYS5wcm94eSh0aGlzLnBhdXNlLHRoaXMpKS5vbihcIm1vdXNlbGVhdmUuYnMuY2Fyb3VzZWxcIixhLnByb3h5KHRoaXMuY3ljbGUsdGhpcykpfTtjLlZFUlNJT049XCIzLjIuMFwiLGMuREVGQVVMVFM9e2ludGVydmFsOjVlMyxwYXVzZTpcImhvdmVyXCIsd3JhcDohMH0sYy5wcm90b3R5cGUua2V5ZG93bj1mdW5jdGlvbihhKXtzd2l0Y2goYS53aGljaCl7Y2FzZSAzNzp0aGlzLnByZXYoKTticmVhaztjYXNlIDM5OnRoaXMubmV4dCgpO2JyZWFrO2RlZmF1bHQ6cmV0dXJufWEucHJldmVudERlZmF1bHQoKX0sYy5wcm90b3R5cGUuY3ljbGU9ZnVuY3Rpb24oYil7cmV0dXJuIGJ8fCh0aGlzLnBhdXNlZD0hMSksdGhpcy5pbnRlcnZhbCYmY2xlYXJJbnRlcnZhbCh0aGlzLmludGVydmFsKSx0aGlzLm9wdGlvbnMuaW50ZXJ2YWwmJiF0aGlzLnBhdXNlZCYmKHRoaXMuaW50ZXJ2YWw9c2V0SW50ZXJ2YWwoYS5wcm94eSh0aGlzLm5leHQsdGhpcyksdGhpcy5vcHRpb25zLmludGVydmFsKSksdGhpc30sYy5wcm90b3R5cGUuZ2V0SXRlbUluZGV4PWZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLiRpdGVtcz1hLnBhcmVudCgpLmNoaWxkcmVuKFwiLml0ZW1cIiksdGhpcy4kaXRlbXMuaW5kZXgoYXx8dGhpcy4kYWN0aXZlKX0sYy5wcm90b3R5cGUudG89ZnVuY3Rpb24oYil7dmFyIGM9dGhpcyxkPXRoaXMuZ2V0SXRlbUluZGV4KHRoaXMuJGFjdGl2ZT10aGlzLiRlbGVtZW50LmZpbmQoXCIuaXRlbS5hY3RpdmVcIikpO3JldHVybiBiPnRoaXMuJGl0ZW1zLmxlbmd0aC0xfHwwPmI/dm9pZCAwOnRoaXMuc2xpZGluZz90aGlzLiRlbGVtZW50Lm9uZShcInNsaWQuYnMuY2Fyb3VzZWxcIixmdW5jdGlvbigpe2MudG8oYil9KTpkPT1iP3RoaXMucGF1c2UoKS5jeWNsZSgpOnRoaXMuc2xpZGUoYj5kP1wibmV4dFwiOlwicHJldlwiLGEodGhpcy4kaXRlbXNbYl0pKX0sYy5wcm90b3R5cGUucGF1c2U9ZnVuY3Rpb24oYil7cmV0dXJuIGJ8fCh0aGlzLnBhdXNlZD0hMCksdGhpcy4kZWxlbWVudC5maW5kKFwiLm5leHQsIC5wcmV2XCIpLmxlbmd0aCYmYS5zdXBwb3J0LnRyYW5zaXRpb24mJih0aGlzLiRlbGVtZW50LnRyaWdnZXIoYS5zdXBwb3J0LnRyYW5zaXRpb24uZW5kKSx0aGlzLmN5Y2xlKCEwKSksdGhpcy5pbnRlcnZhbD1jbGVhckludGVydmFsKHRoaXMuaW50ZXJ2YWwpLHRoaXN9LGMucHJvdG90eXBlLm5leHQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zbGlkaW5nP3ZvaWQgMDp0aGlzLnNsaWRlKFwibmV4dFwiKX0sYy5wcm90b3R5cGUucHJldj1mdW5jdGlvbigpe3JldHVybiB0aGlzLnNsaWRpbmc/dm9pZCAwOnRoaXMuc2xpZGUoXCJwcmV2XCIpfSxjLnByb3RvdHlwZS5zbGlkZT1mdW5jdGlvbihiLGMpe3ZhciBkPXRoaXMuJGVsZW1lbnQuZmluZChcIi5pdGVtLmFjdGl2ZVwiKSxlPWN8fGRbYl0oKSxmPXRoaXMuaW50ZXJ2YWwsZz1cIm5leHRcIj09Yj9cImxlZnRcIjpcInJpZ2h0XCIsaD1cIm5leHRcIj09Yj9cImZpcnN0XCI6XCJsYXN0XCIsaT10aGlzO2lmKCFlLmxlbmd0aCl7aWYoIXRoaXMub3B0aW9ucy53cmFwKXJldHVybjtlPXRoaXMuJGVsZW1lbnQuZmluZChcIi5pdGVtXCIpW2hdKCl9aWYoZS5oYXNDbGFzcyhcImFjdGl2ZVwiKSlyZXR1cm4gdGhpcy5zbGlkaW5nPSExO3ZhciBqPWVbMF0saz1hLkV2ZW50KFwic2xpZGUuYnMuY2Fyb3VzZWxcIix7cmVsYXRlZFRhcmdldDpqLGRpcmVjdGlvbjpnfSk7aWYodGhpcy4kZWxlbWVudC50cmlnZ2VyKGspLCFrLmlzRGVmYXVsdFByZXZlbnRlZCgpKXtpZih0aGlzLnNsaWRpbmc9ITAsZiYmdGhpcy5wYXVzZSgpLHRoaXMuJGluZGljYXRvcnMubGVuZ3RoKXt0aGlzLiRpbmRpY2F0b3JzLmZpbmQoXCIuYWN0aXZlXCIpLnJlbW92ZUNsYXNzKFwiYWN0aXZlXCIpO3ZhciBsPWEodGhpcy4kaW5kaWNhdG9ycy5jaGlsZHJlbigpW3RoaXMuZ2V0SXRlbUluZGV4KGUpXSk7bCYmbC5hZGRDbGFzcyhcImFjdGl2ZVwiKX12YXIgbT1hLkV2ZW50KFwic2xpZC5icy5jYXJvdXNlbFwiLHtyZWxhdGVkVGFyZ2V0OmosZGlyZWN0aW9uOmd9KTtyZXR1cm4gYS5zdXBwb3J0LnRyYW5zaXRpb24mJnRoaXMuJGVsZW1lbnQuaGFzQ2xhc3MoXCJzbGlkZVwiKT8oZS5hZGRDbGFzcyhiKSxlWzBdLm9mZnNldFdpZHRoLGQuYWRkQ2xhc3MoZyksZS5hZGRDbGFzcyhnKSxkLm9uZShcImJzVHJhbnNpdGlvbkVuZFwiLGZ1bmN0aW9uKCl7ZS5yZW1vdmVDbGFzcyhbYixnXS5qb2luKFwiIFwiKSkuYWRkQ2xhc3MoXCJhY3RpdmVcIiksZC5yZW1vdmVDbGFzcyhbXCJhY3RpdmVcIixnXS5qb2luKFwiIFwiKSksaS5zbGlkaW5nPSExLHNldFRpbWVvdXQoZnVuY3Rpb24oKXtpLiRlbGVtZW50LnRyaWdnZXIobSl9LDApfSkuZW11bGF0ZVRyYW5zaXRpb25FbmQoMWUzKmQuY3NzKFwidHJhbnNpdGlvbi1kdXJhdGlvblwiKS5zbGljZSgwLC0xKSkpOihkLnJlbW92ZUNsYXNzKFwiYWN0aXZlXCIpLGUuYWRkQ2xhc3MoXCJhY3RpdmVcIiksdGhpcy5zbGlkaW5nPSExLHRoaXMuJGVsZW1lbnQudHJpZ2dlcihtKSksZiYmdGhpcy5jeWNsZSgpLHRoaXN9fTt2YXIgZD1hLmZuLmNhcm91c2VsO2EuZm4uY2Fyb3VzZWw9YixhLmZuLmNhcm91c2VsLkNvbnN0cnVjdG9yPWMsYS5mbi5jYXJvdXNlbC5ub0NvbmZsaWN0PWZ1bmN0aW9uKCl7cmV0dXJuIGEuZm4uY2Fyb3VzZWw9ZCx0aGlzfSxhKGRvY3VtZW50KS5vbihcImNsaWNrLmJzLmNhcm91c2VsLmRhdGEtYXBpXCIsXCJbZGF0YS1zbGlkZV0sIFtkYXRhLXNsaWRlLXRvXVwiLGZ1bmN0aW9uKGMpe3ZhciBkLGU9YSh0aGlzKSxmPWEoZS5hdHRyKFwiZGF0YS10YXJnZXRcIil8fChkPWUuYXR0cihcImhyZWZcIikpJiZkLnJlcGxhY2UoLy4qKD89I1teXFxzXSskKS8sXCJcIikpO2lmKGYuaGFzQ2xhc3MoXCJjYXJvdXNlbFwiKSl7dmFyIGc9YS5leHRlbmQoe30sZi5kYXRhKCksZS5kYXRhKCkpLGg9ZS5hdHRyKFwiZGF0YS1zbGlkZS10b1wiKTtoJiYoZy5pbnRlcnZhbD0hMSksYi5jYWxsKGYsZyksaCYmZi5kYXRhKFwiYnMuY2Fyb3VzZWxcIikudG8oaCksYy5wcmV2ZW50RGVmYXVsdCgpfX0pLGEod2luZG93KS5vbihcImxvYWRcIixmdW5jdGlvbigpe2EoJ1tkYXRhLXJpZGU9XCJjYXJvdXNlbFwiXScpLmVhY2goZnVuY3Rpb24oKXt2YXIgYz1hKHRoaXMpO2IuY2FsbChjLGMuZGF0YSgpKX0pfSl9KGpRdWVyeSksK2Z1bmN0aW9uKGEpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIGIoYil7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe3ZhciBkPWEodGhpcyksZT1kLmRhdGEoXCJicy5jb2xsYXBzZVwiKSxmPWEuZXh0ZW5kKHt9LGMuREVGQVVMVFMsZC5kYXRhKCksXCJvYmplY3RcIj09dHlwZW9mIGImJmIpOyFlJiZmLnRvZ2dsZSYmXCJzaG93XCI9PWImJihiPSFiKSxlfHxkLmRhdGEoXCJicy5jb2xsYXBzZVwiLGU9bmV3IGModGhpcyxmKSksXCJzdHJpbmdcIj09dHlwZW9mIGImJmVbYl0oKX0pfXZhciBjPWZ1bmN0aW9uKGIsZCl7dGhpcy4kZWxlbWVudD1hKGIpLHRoaXMub3B0aW9ucz1hLmV4dGVuZCh7fSxjLkRFRkFVTFRTLGQpLHRoaXMudHJhbnNpdGlvbmluZz1udWxsLHRoaXMub3B0aW9ucy5wYXJlbnQmJih0aGlzLiRwYXJlbnQ9YSh0aGlzLm9wdGlvbnMucGFyZW50KSksdGhpcy5vcHRpb25zLnRvZ2dsZSYmdGhpcy50b2dnbGUoKX07Yy5WRVJTSU9OPVwiMy4yLjBcIixjLkRFRkFVTFRTPXt0b2dnbGU6ITB9LGMucHJvdG90eXBlLmRpbWVuc2lvbj1mdW5jdGlvbigpe3ZhciBhPXRoaXMuJGVsZW1lbnQuaGFzQ2xhc3MoXCJ3aWR0aFwiKTtyZXR1cm4gYT9cIndpZHRoXCI6XCJoZWlnaHRcIn0sYy5wcm90b3R5cGUuc2hvdz1mdW5jdGlvbigpe2lmKCF0aGlzLnRyYW5zaXRpb25pbmcmJiF0aGlzLiRlbGVtZW50Lmhhc0NsYXNzKFwiaW5cIikpe3ZhciBjPWEuRXZlbnQoXCJzaG93LmJzLmNvbGxhcHNlXCIpO2lmKHRoaXMuJGVsZW1lbnQudHJpZ2dlcihjKSwhYy5pc0RlZmF1bHRQcmV2ZW50ZWQoKSl7dmFyIGQ9dGhpcy4kcGFyZW50JiZ0aGlzLiRwYXJlbnQuZmluZChcIj4gLnBhbmVsID4gLmluXCIpO2lmKGQmJmQubGVuZ3RoKXt2YXIgZT1kLmRhdGEoXCJicy5jb2xsYXBzZVwiKTtpZihlJiZlLnRyYW5zaXRpb25pbmcpcmV0dXJuO2IuY2FsbChkLFwiaGlkZVwiKSxlfHxkLmRhdGEoXCJicy5jb2xsYXBzZVwiLG51bGwpfXZhciBmPXRoaXMuZGltZW5zaW9uKCk7dGhpcy4kZWxlbWVudC5yZW1vdmVDbGFzcyhcImNvbGxhcHNlXCIpLmFkZENsYXNzKFwiY29sbGFwc2luZ1wiKVtmXSgwKSx0aGlzLnRyYW5zaXRpb25pbmc9MTt2YXIgZz1mdW5jdGlvbigpe3RoaXMuJGVsZW1lbnQucmVtb3ZlQ2xhc3MoXCJjb2xsYXBzaW5nXCIpLmFkZENsYXNzKFwiY29sbGFwc2UgaW5cIilbZl0oXCJcIiksdGhpcy50cmFuc2l0aW9uaW5nPTAsdGhpcy4kZWxlbWVudC50cmlnZ2VyKFwic2hvd24uYnMuY29sbGFwc2VcIil9O2lmKCFhLnN1cHBvcnQudHJhbnNpdGlvbilyZXR1cm4gZy5jYWxsKHRoaXMpO3ZhciBoPWEuY2FtZWxDYXNlKFtcInNjcm9sbFwiLGZdLmpvaW4oXCItXCIpKTt0aGlzLiRlbGVtZW50Lm9uZShcImJzVHJhbnNpdGlvbkVuZFwiLGEucHJveHkoZyx0aGlzKSkuZW11bGF0ZVRyYW5zaXRpb25FbmQoMzUwKVtmXSh0aGlzLiRlbGVtZW50WzBdW2hdKX19fSxjLnByb3RvdHlwZS5oaWRlPWZ1bmN0aW9uKCl7aWYoIXRoaXMudHJhbnNpdGlvbmluZyYmdGhpcy4kZWxlbWVudC5oYXNDbGFzcyhcImluXCIpKXt2YXIgYj1hLkV2ZW50KFwiaGlkZS5icy5jb2xsYXBzZVwiKTtpZih0aGlzLiRlbGVtZW50LnRyaWdnZXIoYiksIWIuaXNEZWZhdWx0UHJldmVudGVkKCkpe3ZhciBjPXRoaXMuZGltZW5zaW9uKCk7dGhpcy4kZWxlbWVudFtjXSh0aGlzLiRlbGVtZW50W2NdKCkpWzBdLm9mZnNldEhlaWdodCx0aGlzLiRlbGVtZW50LmFkZENsYXNzKFwiY29sbGFwc2luZ1wiKS5yZW1vdmVDbGFzcyhcImNvbGxhcHNlXCIpLnJlbW92ZUNsYXNzKFwiaW5cIiksdGhpcy50cmFuc2l0aW9uaW5nPTE7dmFyIGQ9ZnVuY3Rpb24oKXt0aGlzLnRyYW5zaXRpb25pbmc9MCx0aGlzLiRlbGVtZW50LnRyaWdnZXIoXCJoaWRkZW4uYnMuY29sbGFwc2VcIikucmVtb3ZlQ2xhc3MoXCJjb2xsYXBzaW5nXCIpLmFkZENsYXNzKFwiY29sbGFwc2VcIil9O3JldHVybiBhLnN1cHBvcnQudHJhbnNpdGlvbj92b2lkIHRoaXMuJGVsZW1lbnRbY10oMCkub25lKFwiYnNUcmFuc2l0aW9uRW5kXCIsYS5wcm94eShkLHRoaXMpKS5lbXVsYXRlVHJhbnNpdGlvbkVuZCgzNTApOmQuY2FsbCh0aGlzKX19fSxjLnByb3RvdHlwZS50b2dnbGU9ZnVuY3Rpb24oKXt0aGlzW3RoaXMuJGVsZW1lbnQuaGFzQ2xhc3MoXCJpblwiKT9cImhpZGVcIjpcInNob3dcIl0oKX07dmFyIGQ9YS5mbi5jb2xsYXBzZTthLmZuLmNvbGxhcHNlPWIsYS5mbi5jb2xsYXBzZS5Db25zdHJ1Y3Rvcj1jLGEuZm4uY29sbGFwc2Uubm9Db25mbGljdD1mdW5jdGlvbigpe3JldHVybiBhLmZuLmNvbGxhcHNlPWQsdGhpc30sYShkb2N1bWVudCkub24oXCJjbGljay5icy5jb2xsYXBzZS5kYXRhLWFwaVwiLCdbZGF0YS10b2dnbGU9XCJjb2xsYXBzZVwiXScsZnVuY3Rpb24oYyl7dmFyIGQsZT1hKHRoaXMpLGY9ZS5hdHRyKFwiZGF0YS10YXJnZXRcIil8fGMucHJldmVudERlZmF1bHQoKXx8KGQ9ZS5hdHRyKFwiaHJlZlwiKSkmJmQucmVwbGFjZSgvLiooPz0jW15cXHNdKyQpLyxcIlwiKSxnPWEoZiksaD1nLmRhdGEoXCJicy5jb2xsYXBzZVwiKSxpPWg/XCJ0b2dnbGVcIjplLmRhdGEoKSxqPWUuYXR0cihcImRhdGEtcGFyZW50XCIpLGs9aiYmYShqKTtoJiZoLnRyYW5zaXRpb25pbmd8fChrJiZrLmZpbmQoJ1tkYXRhLXRvZ2dsZT1cImNvbGxhcHNlXCJdW2RhdGEtcGFyZW50PVwiJytqKydcIl0nKS5ub3QoZSkuYWRkQ2xhc3MoXCJjb2xsYXBzZWRcIiksZVtnLmhhc0NsYXNzKFwiaW5cIik/XCJhZGRDbGFzc1wiOlwicmVtb3ZlQ2xhc3NcIl0oXCJjb2xsYXBzZWRcIikpLGIuY2FsbChnLGkpfSl9KGpRdWVyeSksK2Z1bmN0aW9uKGEpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIGIoYil7YiYmMz09PWIud2hpY2h8fChhKGUpLnJlbW92ZSgpLGEoZikuZWFjaChmdW5jdGlvbigpe3ZhciBkPWMoYSh0aGlzKSksZT17cmVsYXRlZFRhcmdldDp0aGlzfTtkLmhhc0NsYXNzKFwib3BlblwiKSYmKGQudHJpZ2dlcihiPWEuRXZlbnQoXCJoaWRlLmJzLmRyb3Bkb3duXCIsZSkpLGIuaXNEZWZhdWx0UHJldmVudGVkKCl8fGQucmVtb3ZlQ2xhc3MoXCJvcGVuXCIpLnRyaWdnZXIoXCJoaWRkZW4uYnMuZHJvcGRvd25cIixlKSl9KSl9ZnVuY3Rpb24gYyhiKXt2YXIgYz1iLmF0dHIoXCJkYXRhLXRhcmdldFwiKTtjfHwoYz1iLmF0dHIoXCJocmVmXCIpLGM9YyYmLyNbQS1aYS16XS8udGVzdChjKSYmYy5yZXBsYWNlKC8uKig/PSNbXlxcc10qJCkvLFwiXCIpKTt2YXIgZD1jJiZhKGMpO3JldHVybiBkJiZkLmxlbmd0aD9kOmIucGFyZW50KCl9ZnVuY3Rpb24gZChiKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIGM9YSh0aGlzKSxkPWMuZGF0YShcImJzLmRyb3Bkb3duXCIpO2R8fGMuZGF0YShcImJzLmRyb3Bkb3duXCIsZD1uZXcgZyh0aGlzKSksXCJzdHJpbmdcIj09dHlwZW9mIGImJmRbYl0uY2FsbChjKX0pfXZhciBlPVwiLmRyb3Bkb3duLWJhY2tkcm9wXCIsZj0nW2RhdGEtdG9nZ2xlPVwiZHJvcGRvd25cIl0nLGc9ZnVuY3Rpb24oYil7YShiKS5vbihcImNsaWNrLmJzLmRyb3Bkb3duXCIsdGhpcy50b2dnbGUpfTtnLlZFUlNJT049XCIzLjIuMFwiLGcucHJvdG90eXBlLnRvZ2dsZT1mdW5jdGlvbihkKXt2YXIgZT1hKHRoaXMpO2lmKCFlLmlzKFwiLmRpc2FibGVkLCA6ZGlzYWJsZWRcIikpe3ZhciBmPWMoZSksZz1mLmhhc0NsYXNzKFwib3BlblwiKTtpZihiKCksIWcpe1wib250b3VjaHN0YXJ0XCJpbiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQmJiFmLmNsb3Nlc3QoXCIubmF2YmFyLW5hdlwiKS5sZW5ndGgmJmEoJzxkaXYgY2xhc3M9XCJkcm9wZG93bi1iYWNrZHJvcFwiLz4nKS5pbnNlcnRBZnRlcihhKHRoaXMpKS5vbihcImNsaWNrXCIsYik7dmFyIGg9e3JlbGF0ZWRUYXJnZXQ6dGhpc307aWYoZi50cmlnZ2VyKGQ9YS5FdmVudChcInNob3cuYnMuZHJvcGRvd25cIixoKSksZC5pc0RlZmF1bHRQcmV2ZW50ZWQoKSlyZXR1cm47ZS50cmlnZ2VyKFwiZm9jdXNcIiksZi50b2dnbGVDbGFzcyhcIm9wZW5cIikudHJpZ2dlcihcInNob3duLmJzLmRyb3Bkb3duXCIsaCl9cmV0dXJuITF9fSxnLnByb3RvdHlwZS5rZXlkb3duPWZ1bmN0aW9uKGIpe2lmKC8oMzh8NDB8MjcpLy50ZXN0KGIua2V5Q29kZSkpe3ZhciBkPWEodGhpcyk7aWYoYi5wcmV2ZW50RGVmYXVsdCgpLGIuc3RvcFByb3BhZ2F0aW9uKCksIWQuaXMoXCIuZGlzYWJsZWQsIDpkaXNhYmxlZFwiKSl7dmFyIGU9YyhkKSxnPWUuaGFzQ2xhc3MoXCJvcGVuXCIpO2lmKCFnfHxnJiYyNz09Yi5rZXlDb2RlKXJldHVybiAyNz09Yi53aGljaCYmZS5maW5kKGYpLnRyaWdnZXIoXCJmb2N1c1wiKSxkLnRyaWdnZXIoXCJjbGlja1wiKTt2YXIgaD1cIiBsaTpub3QoLmRpdmlkZXIpOnZpc2libGUgYVwiLGk9ZS5maW5kKCdbcm9sZT1cIm1lbnVcIl0nK2grJywgW3JvbGU9XCJsaXN0Ym94XCJdJytoKTtpZihpLmxlbmd0aCl7dmFyIGo9aS5pbmRleChpLmZpbHRlcihcIjpmb2N1c1wiKSk7Mzg9PWIua2V5Q29kZSYmaj4wJiZqLS0sNDA9PWIua2V5Q29kZSYmajxpLmxlbmd0aC0xJiZqKyssfmp8fChqPTApLGkuZXEoaikudHJpZ2dlcihcImZvY3VzXCIpfX19fTt2YXIgaD1hLmZuLmRyb3Bkb3duO2EuZm4uZHJvcGRvd249ZCxhLmZuLmRyb3Bkb3duLkNvbnN0cnVjdG9yPWcsYS5mbi5kcm9wZG93bi5ub0NvbmZsaWN0PWZ1bmN0aW9uKCl7cmV0dXJuIGEuZm4uZHJvcGRvd249aCx0aGlzfSxhKGRvY3VtZW50KS5vbihcImNsaWNrLmJzLmRyb3Bkb3duLmRhdGEtYXBpXCIsYikub24oXCJjbGljay5icy5kcm9wZG93bi5kYXRhLWFwaVwiLFwiLmRyb3Bkb3duIGZvcm1cIixmdW5jdGlvbihhKXthLnN0b3BQcm9wYWdhdGlvbigpfSkub24oXCJjbGljay5icy5kcm9wZG93bi5kYXRhLWFwaVwiLGYsZy5wcm90b3R5cGUudG9nZ2xlKS5vbihcImtleWRvd24uYnMuZHJvcGRvd24uZGF0YS1hcGlcIixmKycsIFtyb2xlPVwibWVudVwiXSwgW3JvbGU9XCJsaXN0Ym94XCJdJyxnLnByb3RvdHlwZS5rZXlkb3duKX0oalF1ZXJ5KSwrZnVuY3Rpb24oYSl7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gYihiLGQpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgZT1hKHRoaXMpLGY9ZS5kYXRhKFwiYnMubW9kYWxcIiksZz1hLmV4dGVuZCh7fSxjLkRFRkFVTFRTLGUuZGF0YSgpLFwib2JqZWN0XCI9PXR5cGVvZiBiJiZiKTtmfHxlLmRhdGEoXCJicy5tb2RhbFwiLGY9bmV3IGModGhpcyxnKSksXCJzdHJpbmdcIj09dHlwZW9mIGI/ZltiXShkKTpnLnNob3cmJmYuc2hvdyhkKX0pfXZhciBjPWZ1bmN0aW9uKGIsYyl7dGhpcy5vcHRpb25zPWMsdGhpcy4kYm9keT1hKGRvY3VtZW50LmJvZHkpLHRoaXMuJGVsZW1lbnQ9YShiKSx0aGlzLiRiYWNrZHJvcD10aGlzLmlzU2hvd249bnVsbCx0aGlzLnNjcm9sbGJhcldpZHRoPTAsdGhpcy5vcHRpb25zLnJlbW90ZSYmdGhpcy4kZWxlbWVudC5maW5kKFwiLm1vZGFsLWNvbnRlbnRcIikubG9hZCh0aGlzLm9wdGlvbnMucmVtb3RlLGEucHJveHkoZnVuY3Rpb24oKXt0aGlzLiRlbGVtZW50LnRyaWdnZXIoXCJsb2FkZWQuYnMubW9kYWxcIil9LHRoaXMpKX07Yy5WRVJTSU9OPVwiMy4yLjBcIixjLkRFRkFVTFRTPXtiYWNrZHJvcDohMCxrZXlib2FyZDohMCxzaG93OiEwfSxjLnByb3RvdHlwZS50b2dnbGU9ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuaXNTaG93bj90aGlzLmhpZGUoKTp0aGlzLnNob3coYSl9LGMucHJvdG90eXBlLnNob3c9ZnVuY3Rpb24oYil7dmFyIGM9dGhpcyxkPWEuRXZlbnQoXCJzaG93LmJzLm1vZGFsXCIse3JlbGF0ZWRUYXJnZXQ6Yn0pO3RoaXMuJGVsZW1lbnQudHJpZ2dlcihkKSx0aGlzLmlzU2hvd258fGQuaXNEZWZhdWx0UHJldmVudGVkKCl8fCh0aGlzLmlzU2hvd249ITAsdGhpcy5jaGVja1Njcm9sbGJhcigpLHRoaXMuJGJvZHkuYWRkQ2xhc3MoXCJtb2RhbC1vcGVuXCIpLHRoaXMuc2V0U2Nyb2xsYmFyKCksdGhpcy5lc2NhcGUoKSx0aGlzLiRlbGVtZW50Lm9uKFwiY2xpY2suZGlzbWlzcy5icy5tb2RhbFwiLCdbZGF0YS1kaXNtaXNzPVwibW9kYWxcIl0nLGEucHJveHkodGhpcy5oaWRlLHRoaXMpKSx0aGlzLmJhY2tkcm9wKGZ1bmN0aW9uKCl7dmFyIGQ9YS5zdXBwb3J0LnRyYW5zaXRpb24mJmMuJGVsZW1lbnQuaGFzQ2xhc3MoXCJmYWRlXCIpO2MuJGVsZW1lbnQucGFyZW50KCkubGVuZ3RofHxjLiRlbGVtZW50LmFwcGVuZFRvKGMuJGJvZHkpLGMuJGVsZW1lbnQuc2hvdygpLnNjcm9sbFRvcCgwKSxkJiZjLiRlbGVtZW50WzBdLm9mZnNldFdpZHRoLGMuJGVsZW1lbnQuYWRkQ2xhc3MoXCJpblwiKS5hdHRyKFwiYXJpYS1oaWRkZW5cIiwhMSksYy5lbmZvcmNlRm9jdXMoKTt2YXIgZT1hLkV2ZW50KFwic2hvd24uYnMubW9kYWxcIix7cmVsYXRlZFRhcmdldDpifSk7ZD9jLiRlbGVtZW50LmZpbmQoXCIubW9kYWwtZGlhbG9nXCIpLm9uZShcImJzVHJhbnNpdGlvbkVuZFwiLGZ1bmN0aW9uKCl7Yy4kZWxlbWVudC50cmlnZ2VyKFwiZm9jdXNcIikudHJpZ2dlcihlKX0pLmVtdWxhdGVUcmFuc2l0aW9uRW5kKDMwMCk6Yy4kZWxlbWVudC50cmlnZ2VyKFwiZm9jdXNcIikudHJpZ2dlcihlKX0pKX0sYy5wcm90b3R5cGUuaGlkZT1mdW5jdGlvbihiKXtiJiZiLnByZXZlbnREZWZhdWx0KCksYj1hLkV2ZW50KFwiaGlkZS5icy5tb2RhbFwiKSx0aGlzLiRlbGVtZW50LnRyaWdnZXIoYiksdGhpcy5pc1Nob3duJiYhYi5pc0RlZmF1bHRQcmV2ZW50ZWQoKSYmKHRoaXMuaXNTaG93bj0hMSx0aGlzLiRib2R5LnJlbW92ZUNsYXNzKFwibW9kYWwtb3BlblwiKSx0aGlzLnJlc2V0U2Nyb2xsYmFyKCksdGhpcy5lc2NhcGUoKSxhKGRvY3VtZW50KS5vZmYoXCJmb2N1c2luLmJzLm1vZGFsXCIpLHRoaXMuJGVsZW1lbnQucmVtb3ZlQ2xhc3MoXCJpblwiKS5hdHRyKFwiYXJpYS1oaWRkZW5cIiwhMCkub2ZmKFwiY2xpY2suZGlzbWlzcy5icy5tb2RhbFwiKSxhLnN1cHBvcnQudHJhbnNpdGlvbiYmdGhpcy4kZWxlbWVudC5oYXNDbGFzcyhcImZhZGVcIik/dGhpcy4kZWxlbWVudC5vbmUoXCJic1RyYW5zaXRpb25FbmRcIixhLnByb3h5KHRoaXMuaGlkZU1vZGFsLHRoaXMpKS5lbXVsYXRlVHJhbnNpdGlvbkVuZCgzMDApOnRoaXMuaGlkZU1vZGFsKCkpfSxjLnByb3RvdHlwZS5lbmZvcmNlRm9jdXM9ZnVuY3Rpb24oKXthKGRvY3VtZW50KS5vZmYoXCJmb2N1c2luLmJzLm1vZGFsXCIpLm9uKFwiZm9jdXNpbi5icy5tb2RhbFwiLGEucHJveHkoZnVuY3Rpb24oYSl7dGhpcy4kZWxlbWVudFswXT09PWEudGFyZ2V0fHx0aGlzLiRlbGVtZW50LmhhcyhhLnRhcmdldCkubGVuZ3RofHx0aGlzLiRlbGVtZW50LnRyaWdnZXIoXCJmb2N1c1wiKX0sdGhpcykpfSxjLnByb3RvdHlwZS5lc2NhcGU9ZnVuY3Rpb24oKXt0aGlzLmlzU2hvd24mJnRoaXMub3B0aW9ucy5rZXlib2FyZD90aGlzLiRlbGVtZW50Lm9uKFwia2V5dXAuZGlzbWlzcy5icy5tb2RhbFwiLGEucHJveHkoZnVuY3Rpb24oYSl7Mjc9PWEud2hpY2gmJnRoaXMuaGlkZSgpfSx0aGlzKSk6dGhpcy5pc1Nob3dufHx0aGlzLiRlbGVtZW50Lm9mZihcImtleXVwLmRpc21pc3MuYnMubW9kYWxcIil9LGMucHJvdG90eXBlLmhpZGVNb2RhbD1mdW5jdGlvbigpe3ZhciBhPXRoaXM7dGhpcy4kZWxlbWVudC5oaWRlKCksdGhpcy5iYWNrZHJvcChmdW5jdGlvbigpe2EuJGVsZW1lbnQudHJpZ2dlcihcImhpZGRlbi5icy5tb2RhbFwiKX0pfSxjLnByb3RvdHlwZS5yZW1vdmVCYWNrZHJvcD1mdW5jdGlvbigpe3RoaXMuJGJhY2tkcm9wJiZ0aGlzLiRiYWNrZHJvcC5yZW1vdmUoKSx0aGlzLiRiYWNrZHJvcD1udWxsfSxjLnByb3RvdHlwZS5iYWNrZHJvcD1mdW5jdGlvbihiKXt2YXIgYz10aGlzLGQ9dGhpcy4kZWxlbWVudC5oYXNDbGFzcyhcImZhZGVcIik/XCJmYWRlXCI6XCJcIjtpZih0aGlzLmlzU2hvd24mJnRoaXMub3B0aW9ucy5iYWNrZHJvcCl7dmFyIGU9YS5zdXBwb3J0LnRyYW5zaXRpb24mJmQ7aWYodGhpcy4kYmFja2Ryb3A9YSgnPGRpdiBjbGFzcz1cIm1vZGFsLWJhY2tkcm9wICcrZCsnXCIgLz4nKS5hcHBlbmRUbyh0aGlzLiRib2R5KSx0aGlzLiRlbGVtZW50Lm9uKFwiY2xpY2suZGlzbWlzcy5icy5tb2RhbFwiLGEucHJveHkoZnVuY3Rpb24oYSl7YS50YXJnZXQ9PT1hLmN1cnJlbnRUYXJnZXQmJihcInN0YXRpY1wiPT10aGlzLm9wdGlvbnMuYmFja2Ryb3A/dGhpcy4kZWxlbWVudFswXS5mb2N1cy5jYWxsKHRoaXMuJGVsZW1lbnRbMF0pOnRoaXMuaGlkZS5jYWxsKHRoaXMpKX0sdGhpcykpLGUmJnRoaXMuJGJhY2tkcm9wWzBdLm9mZnNldFdpZHRoLHRoaXMuJGJhY2tkcm9wLmFkZENsYXNzKFwiaW5cIiksIWIpcmV0dXJuO2U/dGhpcy4kYmFja2Ryb3Aub25lKFwiYnNUcmFuc2l0aW9uRW5kXCIsYikuZW11bGF0ZVRyYW5zaXRpb25FbmQoMTUwKTpiKCl9ZWxzZSBpZighdGhpcy5pc1Nob3duJiZ0aGlzLiRiYWNrZHJvcCl7dGhpcy4kYmFja2Ryb3AucmVtb3ZlQ2xhc3MoXCJpblwiKTt2YXIgZj1mdW5jdGlvbigpe2MucmVtb3ZlQmFja2Ryb3AoKSxiJiZiKCl9O2Euc3VwcG9ydC50cmFuc2l0aW9uJiZ0aGlzLiRlbGVtZW50Lmhhc0NsYXNzKFwiZmFkZVwiKT90aGlzLiRiYWNrZHJvcC5vbmUoXCJic1RyYW5zaXRpb25FbmRcIixmKS5lbXVsYXRlVHJhbnNpdGlvbkVuZCgxNTApOmYoKX1lbHNlIGImJmIoKX0sYy5wcm90b3R5cGUuY2hlY2tTY3JvbGxiYXI9ZnVuY3Rpb24oKXtkb2N1bWVudC5ib2R5LmNsaWVudFdpZHRoPj13aW5kb3cuaW5uZXJXaWR0aHx8KHRoaXMuc2Nyb2xsYmFyV2lkdGg9dGhpcy5zY3JvbGxiYXJXaWR0aHx8dGhpcy5tZWFzdXJlU2Nyb2xsYmFyKCkpfSxjLnByb3RvdHlwZS5zZXRTY3JvbGxiYXI9ZnVuY3Rpb24oKXt2YXIgYT1wYXJzZUludCh0aGlzLiRib2R5LmNzcyhcInBhZGRpbmctcmlnaHRcIil8fDAsMTApO3RoaXMuc2Nyb2xsYmFyV2lkdGgmJnRoaXMuJGJvZHkuY3NzKFwicGFkZGluZy1yaWdodFwiLGErdGhpcy5zY3JvbGxiYXJXaWR0aCl9LGMucHJvdG90eXBlLnJlc2V0U2Nyb2xsYmFyPWZ1bmN0aW9uKCl7dGhpcy4kYm9keS5jc3MoXCJwYWRkaW5nLXJpZ2h0XCIsXCJcIil9LGMucHJvdG90eXBlLm1lYXN1cmVTY3JvbGxiYXI9ZnVuY3Rpb24oKXt2YXIgYT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO2EuY2xhc3NOYW1lPVwibW9kYWwtc2Nyb2xsYmFyLW1lYXN1cmVcIix0aGlzLiRib2R5LmFwcGVuZChhKTt2YXIgYj1hLm9mZnNldFdpZHRoLWEuY2xpZW50V2lkdGg7cmV0dXJuIHRoaXMuJGJvZHlbMF0ucmVtb3ZlQ2hpbGQoYSksYn07dmFyIGQ9YS5mbi5tb2RhbDthLmZuLm1vZGFsPWIsYS5mbi5tb2RhbC5Db25zdHJ1Y3Rvcj1jLGEuZm4ubW9kYWwubm9Db25mbGljdD1mdW5jdGlvbigpe3JldHVybiBhLmZuLm1vZGFsPWQsdGhpc30sYShkb2N1bWVudCkub24oXCJjbGljay5icy5tb2RhbC5kYXRhLWFwaVwiLCdbZGF0YS10b2dnbGU9XCJtb2RhbFwiXScsZnVuY3Rpb24oYyl7dmFyIGQ9YSh0aGlzKSxlPWQuYXR0cihcImhyZWZcIiksZj1hKGQuYXR0cihcImRhdGEtdGFyZ2V0XCIpfHxlJiZlLnJlcGxhY2UoLy4qKD89I1teXFxzXSskKS8sXCJcIikpLGc9Zi5kYXRhKFwiYnMubW9kYWxcIik/XCJ0b2dnbGVcIjphLmV4dGVuZCh7cmVtb3RlOiEvIy8udGVzdChlKSYmZX0sZi5kYXRhKCksZC5kYXRhKCkpO2QuaXMoXCJhXCIpJiZjLnByZXZlbnREZWZhdWx0KCksZi5vbmUoXCJzaG93LmJzLm1vZGFsXCIsZnVuY3Rpb24oYSl7YS5pc0RlZmF1bHRQcmV2ZW50ZWQoKXx8Zi5vbmUoXCJoaWRkZW4uYnMubW9kYWxcIixmdW5jdGlvbigpe2QuaXMoXCI6dmlzaWJsZVwiKSYmZC50cmlnZ2VyKFwiZm9jdXNcIil9KX0pLGIuY2FsbChmLGcsdGhpcyl9KX0oalF1ZXJ5KSwrZnVuY3Rpb24oYSl7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gYihiKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIGQ9YSh0aGlzKSxlPWQuZGF0YShcImJzLnRvb2x0aXBcIiksZj1cIm9iamVjdFwiPT10eXBlb2YgYiYmYjsoZXx8XCJkZXN0cm95XCIhPWIpJiYoZXx8ZC5kYXRhKFwiYnMudG9vbHRpcFwiLGU9bmV3IGModGhpcyxmKSksXCJzdHJpbmdcIj09dHlwZW9mIGImJmVbYl0oKSl9KX12YXIgYz1mdW5jdGlvbihhLGIpe3RoaXMudHlwZT10aGlzLm9wdGlvbnM9dGhpcy5lbmFibGVkPXRoaXMudGltZW91dD10aGlzLmhvdmVyU3RhdGU9dGhpcy4kZWxlbWVudD1udWxsLHRoaXMuaW5pdChcInRvb2x0aXBcIixhLGIpfTtjLlZFUlNJT049XCIzLjIuMFwiLGMuREVGQVVMVFM9e2FuaW1hdGlvbjohMCxwbGFjZW1lbnQ6XCJ0b3BcIixzZWxlY3RvcjohMSx0ZW1wbGF0ZTonPGRpdiBjbGFzcz1cInRvb2x0aXBcIiByb2xlPVwidG9vbHRpcFwiPjxkaXYgY2xhc3M9XCJ0b29sdGlwLWFycm93XCI+PC9kaXY+PGRpdiBjbGFzcz1cInRvb2x0aXAtaW5uZXJcIj48L2Rpdj48L2Rpdj4nLHRyaWdnZXI6XCJob3ZlciBmb2N1c1wiLHRpdGxlOlwiXCIsZGVsYXk6MCxodG1sOiExLGNvbnRhaW5lcjohMSx2aWV3cG9ydDp7c2VsZWN0b3I6XCJib2R5XCIscGFkZGluZzowfX0sYy5wcm90b3R5cGUuaW5pdD1mdW5jdGlvbihiLGMsZCl7dGhpcy5lbmFibGVkPSEwLHRoaXMudHlwZT1iLHRoaXMuJGVsZW1lbnQ9YShjKSx0aGlzLm9wdGlvbnM9dGhpcy5nZXRPcHRpb25zKGQpLHRoaXMuJHZpZXdwb3J0PXRoaXMub3B0aW9ucy52aWV3cG9ydCYmYSh0aGlzLm9wdGlvbnMudmlld3BvcnQuc2VsZWN0b3J8fHRoaXMub3B0aW9ucy52aWV3cG9ydCk7Zm9yKHZhciBlPXRoaXMub3B0aW9ucy50cmlnZ2VyLnNwbGl0KFwiIFwiKSxmPWUubGVuZ3RoO2YtLTspe3ZhciBnPWVbZl07aWYoXCJjbGlja1wiPT1nKXRoaXMuJGVsZW1lbnQub24oXCJjbGljay5cIit0aGlzLnR5cGUsdGhpcy5vcHRpb25zLnNlbGVjdG9yLGEucHJveHkodGhpcy50b2dnbGUsdGhpcykpO2Vsc2UgaWYoXCJtYW51YWxcIiE9Zyl7dmFyIGg9XCJob3ZlclwiPT1nP1wibW91c2VlbnRlclwiOlwiZm9jdXNpblwiLGk9XCJob3ZlclwiPT1nP1wibW91c2VsZWF2ZVwiOlwiZm9jdXNvdXRcIjt0aGlzLiRlbGVtZW50Lm9uKGgrXCIuXCIrdGhpcy50eXBlLHRoaXMub3B0aW9ucy5zZWxlY3RvcixhLnByb3h5KHRoaXMuZW50ZXIsdGhpcykpLHRoaXMuJGVsZW1lbnQub24oaStcIi5cIit0aGlzLnR5cGUsdGhpcy5vcHRpb25zLnNlbGVjdG9yLGEucHJveHkodGhpcy5sZWF2ZSx0aGlzKSl9fXRoaXMub3B0aW9ucy5zZWxlY3Rvcj90aGlzLl9vcHRpb25zPWEuZXh0ZW5kKHt9LHRoaXMub3B0aW9ucyx7dHJpZ2dlcjpcIm1hbnVhbFwiLHNlbGVjdG9yOlwiXCJ9KTp0aGlzLmZpeFRpdGxlKCl9LGMucHJvdG90eXBlLmdldERlZmF1bHRzPWZ1bmN0aW9uKCl7cmV0dXJuIGMuREVGQVVMVFN9LGMucHJvdG90eXBlLmdldE9wdGlvbnM9ZnVuY3Rpb24oYil7cmV0dXJuIGI9YS5leHRlbmQoe30sdGhpcy5nZXREZWZhdWx0cygpLHRoaXMuJGVsZW1lbnQuZGF0YSgpLGIpLGIuZGVsYXkmJlwibnVtYmVyXCI9PXR5cGVvZiBiLmRlbGF5JiYoYi5kZWxheT17c2hvdzpiLmRlbGF5LGhpZGU6Yi5kZWxheX0pLGJ9LGMucHJvdG90eXBlLmdldERlbGVnYXRlT3B0aW9ucz1mdW5jdGlvbigpe3ZhciBiPXt9LGM9dGhpcy5nZXREZWZhdWx0cygpO3JldHVybiB0aGlzLl9vcHRpb25zJiZhLmVhY2godGhpcy5fb3B0aW9ucyxmdW5jdGlvbihhLGQpe2NbYV0hPWQmJihiW2FdPWQpfSksYn0sYy5wcm90b3R5cGUuZW50ZXI9ZnVuY3Rpb24oYil7dmFyIGM9YiBpbnN0YW5jZW9mIHRoaXMuY29uc3RydWN0b3I/YjphKGIuY3VycmVudFRhcmdldCkuZGF0YShcImJzLlwiK3RoaXMudHlwZSk7cmV0dXJuIGN8fChjPW5ldyB0aGlzLmNvbnN0cnVjdG9yKGIuY3VycmVudFRhcmdldCx0aGlzLmdldERlbGVnYXRlT3B0aW9ucygpKSxhKGIuY3VycmVudFRhcmdldCkuZGF0YShcImJzLlwiK3RoaXMudHlwZSxjKSksY2xlYXJUaW1lb3V0KGMudGltZW91dCksYy5ob3ZlclN0YXRlPVwiaW5cIixjLm9wdGlvbnMuZGVsYXkmJmMub3B0aW9ucy5kZWxheS5zaG93P3ZvaWQoYy50aW1lb3V0PXNldFRpbWVvdXQoZnVuY3Rpb24oKXtcImluXCI9PWMuaG92ZXJTdGF0ZSYmYy5zaG93KCl9LGMub3B0aW9ucy5kZWxheS5zaG93KSk6Yy5zaG93KCl9LGMucHJvdG90eXBlLmxlYXZlPWZ1bmN0aW9uKGIpe3ZhciBjPWIgaW5zdGFuY2VvZiB0aGlzLmNvbnN0cnVjdG9yP2I6YShiLmN1cnJlbnRUYXJnZXQpLmRhdGEoXCJicy5cIit0aGlzLnR5cGUpO3JldHVybiBjfHwoYz1uZXcgdGhpcy5jb25zdHJ1Y3RvcihiLmN1cnJlbnRUYXJnZXQsdGhpcy5nZXREZWxlZ2F0ZU9wdGlvbnMoKSksYShiLmN1cnJlbnRUYXJnZXQpLmRhdGEoXCJicy5cIit0aGlzLnR5cGUsYykpLGNsZWFyVGltZW91dChjLnRpbWVvdXQpLGMuaG92ZXJTdGF0ZT1cIm91dFwiLGMub3B0aW9ucy5kZWxheSYmYy5vcHRpb25zLmRlbGF5LmhpZGU/dm9pZChjLnRpbWVvdXQ9c2V0VGltZW91dChmdW5jdGlvbigpe1wib3V0XCI9PWMuaG92ZXJTdGF0ZSYmYy5oaWRlKCl9LGMub3B0aW9ucy5kZWxheS5oaWRlKSk6Yy5oaWRlKCl9LGMucHJvdG90eXBlLnNob3c9ZnVuY3Rpb24oKXt2YXIgYj1hLkV2ZW50KFwic2hvdy5icy5cIit0aGlzLnR5cGUpO2lmKHRoaXMuaGFzQ29udGVudCgpJiZ0aGlzLmVuYWJsZWQpe3RoaXMuJGVsZW1lbnQudHJpZ2dlcihiKTt2YXIgYz1hLmNvbnRhaW5zKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCx0aGlzLiRlbGVtZW50WzBdKTtpZihiLmlzRGVmYXVsdFByZXZlbnRlZCgpfHwhYylyZXR1cm47dmFyIGQ9dGhpcyxlPXRoaXMudGlwKCksZj10aGlzLmdldFVJRCh0aGlzLnR5cGUpO3RoaXMuc2V0Q29udGVudCgpLGUuYXR0cihcImlkXCIsZiksdGhpcy4kZWxlbWVudC5hdHRyKFwiYXJpYS1kZXNjcmliZWRieVwiLGYpLHRoaXMub3B0aW9ucy5hbmltYXRpb24mJmUuYWRkQ2xhc3MoXCJmYWRlXCIpO3ZhciBnPVwiZnVuY3Rpb25cIj09dHlwZW9mIHRoaXMub3B0aW9ucy5wbGFjZW1lbnQ/dGhpcy5vcHRpb25zLnBsYWNlbWVudC5jYWxsKHRoaXMsZVswXSx0aGlzLiRlbGVtZW50WzBdKTp0aGlzLm9wdGlvbnMucGxhY2VtZW50LGg9L1xccz9hdXRvP1xccz8vaSxpPWgudGVzdChnKTtpJiYoZz1nLnJlcGxhY2UoaCxcIlwiKXx8XCJ0b3BcIiksZS5kZXRhY2goKS5jc3Moe3RvcDowLGxlZnQ6MCxkaXNwbGF5OlwiYmxvY2tcIn0pLmFkZENsYXNzKGcpLmRhdGEoXCJicy5cIit0aGlzLnR5cGUsdGhpcyksdGhpcy5vcHRpb25zLmNvbnRhaW5lcj9lLmFwcGVuZFRvKHRoaXMub3B0aW9ucy5jb250YWluZXIpOmUuaW5zZXJ0QWZ0ZXIodGhpcy4kZWxlbWVudCk7dmFyIGo9dGhpcy5nZXRQb3NpdGlvbigpLGs9ZVswXS5vZmZzZXRXaWR0aCxsPWVbMF0ub2Zmc2V0SGVpZ2h0O2lmKGkpe3ZhciBtPWcsbj10aGlzLiRlbGVtZW50LnBhcmVudCgpLG89dGhpcy5nZXRQb3NpdGlvbihuKTtnPVwiYm90dG9tXCI9PWcmJmoudG9wK2ouaGVpZ2h0K2wtby5zY3JvbGw+by5oZWlnaHQ/XCJ0b3BcIjpcInRvcFwiPT1nJiZqLnRvcC1vLnNjcm9sbC1sPDA/XCJib3R0b21cIjpcInJpZ2h0XCI9PWcmJmoucmlnaHQraz5vLndpZHRoP1wibGVmdFwiOlwibGVmdFwiPT1nJiZqLmxlZnQtazxvLmxlZnQ/XCJyaWdodFwiOmcsZS5yZW1vdmVDbGFzcyhtKS5hZGRDbGFzcyhnKX12YXIgcD10aGlzLmdldENhbGN1bGF0ZWRPZmZzZXQoZyxqLGssbCk7dGhpcy5hcHBseVBsYWNlbWVudChwLGcpO3ZhciBxPWZ1bmN0aW9uKCl7ZC4kZWxlbWVudC50cmlnZ2VyKFwic2hvd24uYnMuXCIrZC50eXBlKSxkLmhvdmVyU3RhdGU9bnVsbH07YS5zdXBwb3J0LnRyYW5zaXRpb24mJnRoaXMuJHRpcC5oYXNDbGFzcyhcImZhZGVcIik/ZS5vbmUoXCJic1RyYW5zaXRpb25FbmRcIixxKS5lbXVsYXRlVHJhbnNpdGlvbkVuZCgxNTApOnEoKX19LGMucHJvdG90eXBlLmFwcGx5UGxhY2VtZW50PWZ1bmN0aW9uKGIsYyl7dmFyIGQ9dGhpcy50aXAoKSxlPWRbMF0ub2Zmc2V0V2lkdGgsZj1kWzBdLm9mZnNldEhlaWdodCxnPXBhcnNlSW50KGQuY3NzKFwibWFyZ2luLXRvcFwiKSwxMCksaD1wYXJzZUludChkLmNzcyhcIm1hcmdpbi1sZWZ0XCIpLDEwKTtpc05hTihnKSYmKGc9MCksaXNOYU4oaCkmJihoPTApLGIudG9wPWIudG9wK2csYi5sZWZ0PWIubGVmdCtoLGEub2Zmc2V0LnNldE9mZnNldChkWzBdLGEuZXh0ZW5kKHt1c2luZzpmdW5jdGlvbihhKXtkLmNzcyh7dG9wOk1hdGgucm91bmQoYS50b3ApLGxlZnQ6TWF0aC5yb3VuZChhLmxlZnQpfSl9fSxiKSwwKSxkLmFkZENsYXNzKFwiaW5cIik7dmFyIGk9ZFswXS5vZmZzZXRXaWR0aCxqPWRbMF0ub2Zmc2V0SGVpZ2h0O1widG9wXCI9PWMmJmohPWYmJihiLnRvcD1iLnRvcCtmLWopO3ZhciBrPXRoaXMuZ2V0Vmlld3BvcnRBZGp1c3RlZERlbHRhKGMsYixpLGopO2subGVmdD9iLmxlZnQrPWsubGVmdDpiLnRvcCs9ay50b3A7dmFyIGw9ay5sZWZ0PzIqay5sZWZ0LWUraToyKmsudG9wLWYraixtPWsubGVmdD9cImxlZnRcIjpcInRvcFwiLG49ay5sZWZ0P1wib2Zmc2V0V2lkdGhcIjpcIm9mZnNldEhlaWdodFwiO2Qub2Zmc2V0KGIpLHRoaXMucmVwbGFjZUFycm93KGwsZFswXVtuXSxtKX0sYy5wcm90b3R5cGUucmVwbGFjZUFycm93PWZ1bmN0aW9uKGEsYixjKXt0aGlzLmFycm93KCkuY3NzKGMsYT81MCooMS1hL2IpK1wiJVwiOlwiXCIpfSxjLnByb3RvdHlwZS5zZXRDb250ZW50PWZ1bmN0aW9uKCl7dmFyIGE9dGhpcy50aXAoKSxiPXRoaXMuZ2V0VGl0bGUoKTthLmZpbmQoXCIudG9vbHRpcC1pbm5lclwiKVt0aGlzLm9wdGlvbnMuaHRtbD9cImh0bWxcIjpcInRleHRcIl0oYiksYS5yZW1vdmVDbGFzcyhcImZhZGUgaW4gdG9wIGJvdHRvbSBsZWZ0IHJpZ2h0XCIpfSxjLnByb3RvdHlwZS5oaWRlPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gYigpe1wiaW5cIiE9Yy5ob3ZlclN0YXRlJiZkLmRldGFjaCgpLGMuJGVsZW1lbnQudHJpZ2dlcihcImhpZGRlbi5icy5cIitjLnR5cGUpfXZhciBjPXRoaXMsZD10aGlzLnRpcCgpLGU9YS5FdmVudChcImhpZGUuYnMuXCIrdGhpcy50eXBlKTtyZXR1cm4gdGhpcy4kZWxlbWVudC5yZW1vdmVBdHRyKFwiYXJpYS1kZXNjcmliZWRieVwiKSx0aGlzLiRlbGVtZW50LnRyaWdnZXIoZSksZS5pc0RlZmF1bHRQcmV2ZW50ZWQoKT92b2lkIDA6KGQucmVtb3ZlQ2xhc3MoXCJpblwiKSxhLnN1cHBvcnQudHJhbnNpdGlvbiYmdGhpcy4kdGlwLmhhc0NsYXNzKFwiZmFkZVwiKT9kLm9uZShcImJzVHJhbnNpdGlvbkVuZFwiLGIpLmVtdWxhdGVUcmFuc2l0aW9uRW5kKDE1MCk6YigpLHRoaXMuaG92ZXJTdGF0ZT1udWxsLHRoaXMpfSxjLnByb3RvdHlwZS5maXhUaXRsZT1mdW5jdGlvbigpe3ZhciBhPXRoaXMuJGVsZW1lbnQ7KGEuYXR0cihcInRpdGxlXCIpfHxcInN0cmluZ1wiIT10eXBlb2YgYS5hdHRyKFwiZGF0YS1vcmlnaW5hbC10aXRsZVwiKSkmJmEuYXR0cihcImRhdGEtb3JpZ2luYWwtdGl0bGVcIixhLmF0dHIoXCJ0aXRsZVwiKXx8XCJcIikuYXR0cihcInRpdGxlXCIsXCJcIil9LGMucHJvdG90eXBlLmhhc0NvbnRlbnQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXRUaXRsZSgpfSxjLnByb3RvdHlwZS5nZXRQb3NpdGlvbj1mdW5jdGlvbihiKXtiPWJ8fHRoaXMuJGVsZW1lbnQ7dmFyIGM9YlswXSxkPVwiQk9EWVwiPT1jLnRhZ05hbWU7cmV0dXJuIGEuZXh0ZW5kKHt9LFwiZnVuY3Rpb25cIj09dHlwZW9mIGMuZ2V0Qm91bmRpbmdDbGllbnRSZWN0P2MuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk6bnVsbCx7c2Nyb2xsOmQ/ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNjcm9sbFRvcHx8ZG9jdW1lbnQuYm9keS5zY3JvbGxUb3A6Yi5zY3JvbGxUb3AoKSx3aWR0aDpkP2Eod2luZG93KS53aWR0aCgpOmIub3V0ZXJXaWR0aCgpLGhlaWdodDpkP2Eod2luZG93KS5oZWlnaHQoKTpiLm91dGVySGVpZ2h0KCl9LGQ/e3RvcDowLGxlZnQ6MH06Yi5vZmZzZXQoKSl9LGMucHJvdG90eXBlLmdldENhbGN1bGF0ZWRPZmZzZXQ9ZnVuY3Rpb24oYSxiLGMsZCl7cmV0dXJuXCJib3R0b21cIj09YT97dG9wOmIudG9wK2IuaGVpZ2h0LGxlZnQ6Yi5sZWZ0K2Iud2lkdGgvMi1jLzJ9OlwidG9wXCI9PWE/e3RvcDpiLnRvcC1kLGxlZnQ6Yi5sZWZ0K2Iud2lkdGgvMi1jLzJ9OlwibGVmdFwiPT1hP3t0b3A6Yi50b3ArYi5oZWlnaHQvMi1kLzIsbGVmdDpiLmxlZnQtY306e3RvcDpiLnRvcCtiLmhlaWdodC8yLWQvMixsZWZ0OmIubGVmdCtiLndpZHRofX0sYy5wcm90b3R5cGUuZ2V0Vmlld3BvcnRBZGp1c3RlZERlbHRhPWZ1bmN0aW9uKGEsYixjLGQpe3ZhciBlPXt0b3A6MCxsZWZ0OjB9O2lmKCF0aGlzLiR2aWV3cG9ydClyZXR1cm4gZTt2YXIgZj10aGlzLm9wdGlvbnMudmlld3BvcnQmJnRoaXMub3B0aW9ucy52aWV3cG9ydC5wYWRkaW5nfHwwLGc9dGhpcy5nZXRQb3NpdGlvbih0aGlzLiR2aWV3cG9ydCk7aWYoL3JpZ2h0fGxlZnQvLnRlc3QoYSkpe3ZhciBoPWIudG9wLWYtZy5zY3JvbGwsaT1iLnRvcCtmLWcuc2Nyb2xsK2Q7aDxnLnRvcD9lLnRvcD1nLnRvcC1oOmk+Zy50b3ArZy5oZWlnaHQmJihlLnRvcD1nLnRvcCtnLmhlaWdodC1pKX1lbHNle3ZhciBqPWIubGVmdC1mLGs9Yi5sZWZ0K2YrYztqPGcubGVmdD9lLmxlZnQ9Zy5sZWZ0LWo6az5nLndpZHRoJiYoZS5sZWZ0PWcubGVmdCtnLndpZHRoLWspfXJldHVybiBlfSxjLnByb3RvdHlwZS5nZXRUaXRsZT1mdW5jdGlvbigpe3ZhciBhLGI9dGhpcy4kZWxlbWVudCxjPXRoaXMub3B0aW9ucztyZXR1cm4gYT1iLmF0dHIoXCJkYXRhLW9yaWdpbmFsLXRpdGxlXCIpfHwoXCJmdW5jdGlvblwiPT10eXBlb2YgYy50aXRsZT9jLnRpdGxlLmNhbGwoYlswXSk6Yy50aXRsZSl9LGMucHJvdG90eXBlLmdldFVJRD1mdW5jdGlvbihhKXtkbyBhKz1+figxZTYqTWF0aC5yYW5kb20oKSk7d2hpbGUoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoYSkpO3JldHVybiBhfSxjLnByb3RvdHlwZS50aXA9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy4kdGlwPXRoaXMuJHRpcHx8YSh0aGlzLm9wdGlvbnMudGVtcGxhdGUpfSxjLnByb3RvdHlwZS5hcnJvdz1mdW5jdGlvbigpe3JldHVybiB0aGlzLiRhcnJvdz10aGlzLiRhcnJvd3x8dGhpcy50aXAoKS5maW5kKFwiLnRvb2x0aXAtYXJyb3dcIil9LGMucHJvdG90eXBlLnZhbGlkYXRlPWZ1bmN0aW9uKCl7dGhpcy4kZWxlbWVudFswXS5wYXJlbnROb2RlfHwodGhpcy5oaWRlKCksdGhpcy4kZWxlbWVudD1udWxsLHRoaXMub3B0aW9ucz1udWxsKX0sYy5wcm90b3R5cGUuZW5hYmxlPWZ1bmN0aW9uKCl7dGhpcy5lbmFibGVkPSEwfSxjLnByb3RvdHlwZS5kaXNhYmxlPWZ1bmN0aW9uKCl7dGhpcy5lbmFibGVkPSExfSxjLnByb3RvdHlwZS50b2dnbGVFbmFibGVkPWZ1bmN0aW9uKCl7dGhpcy5lbmFibGVkPSF0aGlzLmVuYWJsZWR9LGMucHJvdG90eXBlLnRvZ2dsZT1mdW5jdGlvbihiKXt2YXIgYz10aGlzO2ImJihjPWEoYi5jdXJyZW50VGFyZ2V0KS5kYXRhKFwiYnMuXCIrdGhpcy50eXBlKSxjfHwoYz1uZXcgdGhpcy5jb25zdHJ1Y3RvcihiLmN1cnJlbnRUYXJnZXQsdGhpcy5nZXREZWxlZ2F0ZU9wdGlvbnMoKSksYShiLmN1cnJlbnRUYXJnZXQpLmRhdGEoXCJicy5cIit0aGlzLnR5cGUsYykpKSxjLnRpcCgpLmhhc0NsYXNzKFwiaW5cIik/Yy5sZWF2ZShjKTpjLmVudGVyKGMpfSxjLnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKCl7Y2xlYXJUaW1lb3V0KHRoaXMudGltZW91dCksdGhpcy5oaWRlKCkuJGVsZW1lbnQub2ZmKFwiLlwiK3RoaXMudHlwZSkucmVtb3ZlRGF0YShcImJzLlwiK3RoaXMudHlwZSl9O3ZhciBkPWEuZm4udG9vbHRpcDthLmZuLnRvb2x0aXA9YixhLmZuLnRvb2x0aXAuQ29uc3RydWN0b3I9YyxhLmZuLnRvb2x0aXAubm9Db25mbGljdD1mdW5jdGlvbigpe3JldHVybiBhLmZuLnRvb2x0aXA9ZCx0aGlzfX0oalF1ZXJ5KSwrZnVuY3Rpb24oYSl7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gYihiKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIGQ9YSh0aGlzKSxlPWQuZGF0YShcImJzLnBvcG92ZXJcIiksZj1cIm9iamVjdFwiPT10eXBlb2YgYiYmYjsoZXx8XCJkZXN0cm95XCIhPWIpJiYoZXx8ZC5kYXRhKFwiYnMucG9wb3ZlclwiLGU9bmV3IGModGhpcyxmKSksXCJzdHJpbmdcIj09dHlwZW9mIGImJmVbYl0oKSl9KX12YXIgYz1mdW5jdGlvbihhLGIpe3RoaXMuaW5pdChcInBvcG92ZXJcIixhLGIpfTtpZighYS5mbi50b29sdGlwKXRocm93IG5ldyBFcnJvcihcIlBvcG92ZXIgcmVxdWlyZXMgdG9vbHRpcC5qc1wiKTtjLlZFUlNJT049XCIzLjIuMFwiLGMuREVGQVVMVFM9YS5leHRlbmQoe30sYS5mbi50b29sdGlwLkNvbnN0cnVjdG9yLkRFRkFVTFRTLHtwbGFjZW1lbnQ6XCJyaWdodFwiLHRyaWdnZXI6XCJjbGlja1wiLGNvbnRlbnQ6XCJcIix0ZW1wbGF0ZTonPGRpdiBjbGFzcz1cInBvcG92ZXJcIiByb2xlPVwidG9vbHRpcFwiPjxkaXYgY2xhc3M9XCJhcnJvd1wiPjwvZGl2PjxoMyBjbGFzcz1cInBvcG92ZXItdGl0bGVcIj48L2gzPjxkaXYgY2xhc3M9XCJwb3BvdmVyLWNvbnRlbnRcIj48L2Rpdj48L2Rpdj4nfSksYy5wcm90b3R5cGU9YS5leHRlbmQoe30sYS5mbi50b29sdGlwLkNvbnN0cnVjdG9yLnByb3RvdHlwZSksYy5wcm90b3R5cGUuY29uc3RydWN0b3I9YyxjLnByb3RvdHlwZS5nZXREZWZhdWx0cz1mdW5jdGlvbigpe3JldHVybiBjLkRFRkFVTFRTfSxjLnByb3RvdHlwZS5zZXRDb250ZW50PWZ1bmN0aW9uKCl7dmFyIGE9dGhpcy50aXAoKSxiPXRoaXMuZ2V0VGl0bGUoKSxjPXRoaXMuZ2V0Q29udGVudCgpO2EuZmluZChcIi5wb3BvdmVyLXRpdGxlXCIpW3RoaXMub3B0aW9ucy5odG1sP1wiaHRtbFwiOlwidGV4dFwiXShiKSxhLmZpbmQoXCIucG9wb3Zlci1jb250ZW50XCIpLmVtcHR5KClbdGhpcy5vcHRpb25zLmh0bWw/XCJzdHJpbmdcIj09dHlwZW9mIGM/XCJodG1sXCI6XCJhcHBlbmRcIjpcInRleHRcIl0oYyksYS5yZW1vdmVDbGFzcyhcImZhZGUgdG9wIGJvdHRvbSBsZWZ0IHJpZ2h0IGluXCIpLGEuZmluZChcIi5wb3BvdmVyLXRpdGxlXCIpLmh0bWwoKXx8YS5maW5kKFwiLnBvcG92ZXItdGl0bGVcIikuaGlkZSgpfSxjLnByb3RvdHlwZS5oYXNDb250ZW50PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ2V0VGl0bGUoKXx8dGhpcy5nZXRDb250ZW50KCl9LGMucHJvdG90eXBlLmdldENvbnRlbnQ9ZnVuY3Rpb24oKXt2YXIgYT10aGlzLiRlbGVtZW50LGI9dGhpcy5vcHRpb25zO3JldHVybiBhLmF0dHIoXCJkYXRhLWNvbnRlbnRcIil8fChcImZ1bmN0aW9uXCI9PXR5cGVvZiBiLmNvbnRlbnQ/Yi5jb250ZW50LmNhbGwoYVswXSk6Yi5jb250ZW50KX0sYy5wcm90b3R5cGUuYXJyb3c9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy4kYXJyb3c9dGhpcy4kYXJyb3d8fHRoaXMudGlwKCkuZmluZChcIi5hcnJvd1wiKX0sYy5wcm90b3R5cGUudGlwPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuJHRpcHx8KHRoaXMuJHRpcD1hKHRoaXMub3B0aW9ucy50ZW1wbGF0ZSkpLHRoaXMuJHRpcH07dmFyIGQ9YS5mbi5wb3BvdmVyO2EuZm4ucG9wb3Zlcj1iLGEuZm4ucG9wb3Zlci5Db25zdHJ1Y3Rvcj1jLGEuZm4ucG9wb3Zlci5ub0NvbmZsaWN0PWZ1bmN0aW9uKCl7cmV0dXJuIGEuZm4ucG9wb3Zlcj1kLHRoaXN9fShqUXVlcnkpLCtmdW5jdGlvbihhKXtcInVzZSBzdHJpY3RcIjtmdW5jdGlvbiBiKGMsZCl7dmFyIGU9YS5wcm94eSh0aGlzLnByb2Nlc3MsdGhpcyk7dGhpcy4kYm9keT1hKFwiYm9keVwiKSx0aGlzLiRzY3JvbGxFbGVtZW50PWEoYShjKS5pcyhcImJvZHlcIik/d2luZG93OmMpLHRoaXMub3B0aW9ucz1hLmV4dGVuZCh7fSxiLkRFRkFVTFRTLGQpLHRoaXMuc2VsZWN0b3I9KHRoaXMub3B0aW9ucy50YXJnZXR8fFwiXCIpK1wiIC5uYXYgbGkgPiBhXCIsdGhpcy5vZmZzZXRzPVtdLHRoaXMudGFyZ2V0cz1bXSx0aGlzLmFjdGl2ZVRhcmdldD1udWxsLHRoaXMuc2Nyb2xsSGVpZ2h0PTAsdGhpcy4kc2Nyb2xsRWxlbWVudC5vbihcInNjcm9sbC5icy5zY3JvbGxzcHlcIixlKSx0aGlzLnJlZnJlc2goKSx0aGlzLnByb2Nlc3MoKX1mdW5jdGlvbiBjKGMpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgZD1hKHRoaXMpLGU9ZC5kYXRhKFwiYnMuc2Nyb2xsc3B5XCIpLGY9XCJvYmplY3RcIj09dHlwZW9mIGMmJmM7ZXx8ZC5kYXRhKFwiYnMuc2Nyb2xsc3B5XCIsZT1uZXcgYih0aGlzLGYpKSxcInN0cmluZ1wiPT10eXBlb2YgYyYmZVtjXSgpfSl9Yi5WRVJTSU9OPVwiMy4yLjBcIixiLkRFRkFVTFRTPXtvZmZzZXQ6MTB9LGIucHJvdG90eXBlLmdldFNjcm9sbEhlaWdodD1mdW5jdGlvbigpe3JldHVybiB0aGlzLiRzY3JvbGxFbGVtZW50WzBdLnNjcm9sbEhlaWdodHx8TWF0aC5tYXgodGhpcy4kYm9keVswXS5zY3JvbGxIZWlnaHQsZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNjcm9sbEhlaWdodCl9LGIucHJvdG90eXBlLnJlZnJlc2g9ZnVuY3Rpb24oKXt2YXIgYj1cIm9mZnNldFwiLGM9MDthLmlzV2luZG93KHRoaXMuJHNjcm9sbEVsZW1lbnRbMF0pfHwoYj1cInBvc2l0aW9uXCIsYz10aGlzLiRzY3JvbGxFbGVtZW50LnNjcm9sbFRvcCgpKSx0aGlzLm9mZnNldHM9W10sdGhpcy50YXJnZXRzPVtdLHRoaXMuc2Nyb2xsSGVpZ2h0PXRoaXMuZ2V0U2Nyb2xsSGVpZ2h0KCk7dmFyIGQ9dGhpczt0aGlzLiRib2R5LmZpbmQodGhpcy5zZWxlY3RvcikubWFwKGZ1bmN0aW9uKCl7dmFyIGQ9YSh0aGlzKSxlPWQuZGF0YShcInRhcmdldFwiKXx8ZC5hdHRyKFwiaHJlZlwiKSxmPS9eIy4vLnRlc3QoZSkmJmEoZSk7cmV0dXJuIGYmJmYubGVuZ3RoJiZmLmlzKFwiOnZpc2libGVcIikmJltbZltiXSgpLnRvcCtjLGVdXXx8bnVsbH0pLnNvcnQoZnVuY3Rpb24oYSxiKXtyZXR1cm4gYVswXS1iWzBdfSkuZWFjaChmdW5jdGlvbigpe2Qub2Zmc2V0cy5wdXNoKHRoaXNbMF0pLGQudGFyZ2V0cy5wdXNoKHRoaXNbMV0pfSl9LGIucHJvdG90eXBlLnByb2Nlc3M9ZnVuY3Rpb24oKXt2YXIgYSxiPXRoaXMuJHNjcm9sbEVsZW1lbnQuc2Nyb2xsVG9wKCkrdGhpcy5vcHRpb25zLm9mZnNldCxjPXRoaXMuZ2V0U2Nyb2xsSGVpZ2h0KCksZD10aGlzLm9wdGlvbnMub2Zmc2V0K2MtdGhpcy4kc2Nyb2xsRWxlbWVudC5oZWlnaHQoKSxlPXRoaXMub2Zmc2V0cyxmPXRoaXMudGFyZ2V0cyxnPXRoaXMuYWN0aXZlVGFyZ2V0O2lmKHRoaXMuc2Nyb2xsSGVpZ2h0IT1jJiZ0aGlzLnJlZnJlc2goKSxiPj1kKXJldHVybiBnIT0oYT1mW2YubGVuZ3RoLTFdKSYmdGhpcy5hY3RpdmF0ZShhKTtpZihnJiZiPD1lWzBdKXJldHVybiBnIT0oYT1mWzBdKSYmdGhpcy5hY3RpdmF0ZShhKTtmb3IoYT1lLmxlbmd0aDthLS07KWchPWZbYV0mJmI+PWVbYV0mJighZVthKzFdfHxiPD1lW2ErMV0pJiZ0aGlzLmFjdGl2YXRlKGZbYV0pfSxiLnByb3RvdHlwZS5hY3RpdmF0ZT1mdW5jdGlvbihiKXt0aGlzLmFjdGl2ZVRhcmdldD1iLGEodGhpcy5zZWxlY3RvcikucGFyZW50c1VudGlsKHRoaXMub3B0aW9ucy50YXJnZXQsXCIuYWN0aXZlXCIpLnJlbW92ZUNsYXNzKFwiYWN0aXZlXCIpO3ZhciBjPXRoaXMuc2VsZWN0b3IrJ1tkYXRhLXRhcmdldD1cIicrYisnXCJdLCcrdGhpcy5zZWxlY3RvcisnW2hyZWY9XCInK2IrJ1wiXScsZD1hKGMpLnBhcmVudHMoXCJsaVwiKS5hZGRDbGFzcyhcImFjdGl2ZVwiKTtkLnBhcmVudChcIi5kcm9wZG93bi1tZW51XCIpLmxlbmd0aCYmKGQ9ZC5jbG9zZXN0KFwibGkuZHJvcGRvd25cIikuYWRkQ2xhc3MoXCJhY3RpdmVcIikpLGQudHJpZ2dlcihcImFjdGl2YXRlLmJzLnNjcm9sbHNweVwiKX07dmFyIGQ9YS5mbi5zY3JvbGxzcHk7YS5mbi5zY3JvbGxzcHk9YyxhLmZuLnNjcm9sbHNweS5Db25zdHJ1Y3Rvcj1iLGEuZm4uc2Nyb2xsc3B5Lm5vQ29uZmxpY3Q9ZnVuY3Rpb24oKXtyZXR1cm4gYS5mbi5zY3JvbGxzcHk9ZCx0aGlzfSxhKHdpbmRvdykub24oXCJsb2FkLmJzLnNjcm9sbHNweS5kYXRhLWFwaVwiLGZ1bmN0aW9uKCl7YSgnW2RhdGEtc3B5PVwic2Nyb2xsXCJdJykuZWFjaChmdW5jdGlvbigpe3ZhciBiPWEodGhpcyk7Yy5jYWxsKGIsYi5kYXRhKCkpfSl9KX0oalF1ZXJ5KSwrZnVuY3Rpb24oYSl7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gYihiKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIGQ9YSh0aGlzKSxlPWQuZGF0YShcImJzLnRhYlwiKTtlfHxkLmRhdGEoXCJicy50YWJcIixlPW5ldyBjKHRoaXMpKSxcInN0cmluZ1wiPT10eXBlb2YgYiYmZVtiXSgpfSl9dmFyIGM9ZnVuY3Rpb24oYil7dGhpcy5lbGVtZW50PWEoYil9O2MuVkVSU0lPTj1cIjMuMi4wXCIsYy5wcm90b3R5cGUuc2hvdz1mdW5jdGlvbigpe3ZhciBiPXRoaXMuZWxlbWVudCxjPWIuY2xvc2VzdChcInVsOm5vdCguZHJvcGRvd24tbWVudSlcIiksZD1iLmRhdGEoXCJ0YXJnZXRcIik7aWYoZHx8KGQ9Yi5hdHRyKFwiaHJlZlwiKSxkPWQmJmQucmVwbGFjZSgvLiooPz0jW15cXHNdKiQpLyxcIlwiKSksIWIucGFyZW50KFwibGlcIikuaGFzQ2xhc3MoXCJhY3RpdmVcIikpe3ZhciBlPWMuZmluZChcIi5hY3RpdmU6bGFzdCBhXCIpWzBdLGY9YS5FdmVudChcInNob3cuYnMudGFiXCIse3JlbGF0ZWRUYXJnZXQ6ZX0pO2lmKGIudHJpZ2dlcihmKSwhZi5pc0RlZmF1bHRQcmV2ZW50ZWQoKSl7dmFyIGc9YShkKTt0aGlzLmFjdGl2YXRlKGIuY2xvc2VzdChcImxpXCIpLGMpLHRoaXMuYWN0aXZhdGUoZyxnLnBhcmVudCgpLGZ1bmN0aW9uKCl7Yi50cmlnZ2VyKHt0eXBlOlwic2hvd24uYnMudGFiXCIscmVsYXRlZFRhcmdldDplfSl9KX19fSxjLnByb3RvdHlwZS5hY3RpdmF0ZT1mdW5jdGlvbihiLGMsZCl7ZnVuY3Rpb24gZSgpe2YucmVtb3ZlQ2xhc3MoXCJhY3RpdmVcIikuZmluZChcIj4gLmRyb3Bkb3duLW1lbnUgPiAuYWN0aXZlXCIpLnJlbW92ZUNsYXNzKFwiYWN0aXZlXCIpLGIuYWRkQ2xhc3MoXCJhY3RpdmVcIiksZz8oYlswXS5vZmZzZXRXaWR0aCxiLmFkZENsYXNzKFwiaW5cIikpOmIucmVtb3ZlQ2xhc3MoXCJmYWRlXCIpLGIucGFyZW50KFwiLmRyb3Bkb3duLW1lbnVcIikmJmIuY2xvc2VzdChcImxpLmRyb3Bkb3duXCIpLmFkZENsYXNzKFwiYWN0aXZlXCIpLGQmJmQoKX12YXIgZj1jLmZpbmQoXCI+IC5hY3RpdmVcIiksZz1kJiZhLnN1cHBvcnQudHJhbnNpdGlvbiYmZi5oYXNDbGFzcyhcImZhZGVcIik7Zz9mLm9uZShcImJzVHJhbnNpdGlvbkVuZFwiLGUpLmVtdWxhdGVUcmFuc2l0aW9uRW5kKDE1MCk6ZSgpLGYucmVtb3ZlQ2xhc3MoXCJpblwiKX07dmFyIGQ9YS5mbi50YWI7YS5mbi50YWI9YixhLmZuLnRhYi5Db25zdHJ1Y3Rvcj1jLGEuZm4udGFiLm5vQ29uZmxpY3Q9ZnVuY3Rpb24oKXtyZXR1cm4gYS5mbi50YWI9ZCx0aGlzfSxhKGRvY3VtZW50KS5vbihcImNsaWNrLmJzLnRhYi5kYXRhLWFwaVwiLCdbZGF0YS10b2dnbGU9XCJ0YWJcIl0sIFtkYXRhLXRvZ2dsZT1cInBpbGxcIl0nLGZ1bmN0aW9uKGMpe2MucHJldmVudERlZmF1bHQoKSxiLmNhbGwoYSh0aGlzKSxcInNob3dcIil9KX0oalF1ZXJ5KSwrZnVuY3Rpb24oYSl7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gYihiKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIGQ9YSh0aGlzKSxlPWQuZGF0YShcImJzLmFmZml4XCIpLGY9XCJvYmplY3RcIj09dHlwZW9mIGImJmI7ZXx8ZC5kYXRhKFwiYnMuYWZmaXhcIixlPW5ldyBjKHRoaXMsZikpLFwic3RyaW5nXCI9PXR5cGVvZiBiJiZlW2JdKCl9KX12YXIgYz1mdW5jdGlvbihiLGQpe3RoaXMub3B0aW9ucz1hLmV4dGVuZCh7fSxjLkRFRkFVTFRTLGQpLHRoaXMuJHRhcmdldD1hKHRoaXMub3B0aW9ucy50YXJnZXQpLm9uKFwic2Nyb2xsLmJzLmFmZml4LmRhdGEtYXBpXCIsYS5wcm94eSh0aGlzLmNoZWNrUG9zaXRpb24sdGhpcykpLm9uKFwiY2xpY2suYnMuYWZmaXguZGF0YS1hcGlcIixhLnByb3h5KHRoaXMuY2hlY2tQb3NpdGlvbldpdGhFdmVudExvb3AsdGhpcykpLHRoaXMuJGVsZW1lbnQ9YShiKSx0aGlzLmFmZml4ZWQ9dGhpcy51bnBpbj10aGlzLnBpbm5lZE9mZnNldD1udWxsLHRoaXMuY2hlY2tQb3NpdGlvbigpfTtjLlZFUlNJT049XCIzLjIuMFwiLGMuUkVTRVQ9XCJhZmZpeCBhZmZpeC10b3AgYWZmaXgtYm90dG9tXCIsYy5ERUZBVUxUUz17b2Zmc2V0OjAsdGFyZ2V0OndpbmRvd30sYy5wcm90b3R5cGUuZ2V0UGlubmVkT2Zmc2V0PWZ1bmN0aW9uKCl7aWYodGhpcy5waW5uZWRPZmZzZXQpcmV0dXJuIHRoaXMucGlubmVkT2Zmc2V0O3RoaXMuJGVsZW1lbnQucmVtb3ZlQ2xhc3MoYy5SRVNFVCkuYWRkQ2xhc3MoXCJhZmZpeFwiKTt2YXIgYT10aGlzLiR0YXJnZXQuc2Nyb2xsVG9wKCksYj10aGlzLiRlbGVtZW50Lm9mZnNldCgpO3JldHVybiB0aGlzLnBpbm5lZE9mZnNldD1iLnRvcC1hfSxjLnByb3RvdHlwZS5jaGVja1Bvc2l0aW9uV2l0aEV2ZW50TG9vcD1mdW5jdGlvbigpe3NldFRpbWVvdXQoYS5wcm94eSh0aGlzLmNoZWNrUG9zaXRpb24sdGhpcyksMSl9LGMucHJvdG90eXBlLmNoZWNrUG9zaXRpb249ZnVuY3Rpb24oKXtpZih0aGlzLiRlbGVtZW50LmlzKFwiOnZpc2libGVcIikpe3ZhciBiPWEoZG9jdW1lbnQpLmhlaWdodCgpLGQ9dGhpcy4kdGFyZ2V0LnNjcm9sbFRvcCgpLGU9dGhpcy4kZWxlbWVudC5vZmZzZXQoKSxmPXRoaXMub3B0aW9ucy5vZmZzZXQsZz1mLnRvcCxoPWYuYm90dG9tO1wib2JqZWN0XCIhPXR5cGVvZiBmJiYoaD1nPWYpLFwiZnVuY3Rpb25cIj09dHlwZW9mIGcmJihnPWYudG9wKHRoaXMuJGVsZW1lbnQpKSxcImZ1bmN0aW9uXCI9PXR5cGVvZiBoJiYoaD1mLmJvdHRvbSh0aGlzLiRlbGVtZW50KSk7dmFyIGk9bnVsbCE9dGhpcy51bnBpbiYmZCt0aGlzLnVucGluPD1lLnRvcD8hMTpudWxsIT1oJiZlLnRvcCt0aGlzLiRlbGVtZW50LmhlaWdodCgpPj1iLWg/XCJib3R0b21cIjpudWxsIT1nJiZnPj1kP1widG9wXCI6ITE7aWYodGhpcy5hZmZpeGVkIT09aSl7bnVsbCE9dGhpcy51bnBpbiYmdGhpcy4kZWxlbWVudC5jc3MoXCJ0b3BcIixcIlwiKTt2YXIgaj1cImFmZml4XCIrKGk/XCItXCIraTpcIlwiKSxrPWEuRXZlbnQoaitcIi5icy5hZmZpeFwiKTt0aGlzLiRlbGVtZW50LnRyaWdnZXIoayksay5pc0RlZmF1bHRQcmV2ZW50ZWQoKXx8KHRoaXMuYWZmaXhlZD1pLHRoaXMudW5waW49XCJib3R0b21cIj09aT90aGlzLmdldFBpbm5lZE9mZnNldCgpOm51bGwsdGhpcy4kZWxlbWVudC5yZW1vdmVDbGFzcyhjLlJFU0VUKS5hZGRDbGFzcyhqKS50cmlnZ2VyKGEuRXZlbnQoai5yZXBsYWNlKFwiYWZmaXhcIixcImFmZml4ZWRcIikpKSxcImJvdHRvbVwiPT1pJiZ0aGlzLiRlbGVtZW50Lm9mZnNldCh7dG9wOmItdGhpcy4kZWxlbWVudC5oZWlnaHQoKS1ofSkpfX19O3ZhciBkPWEuZm4uYWZmaXg7YS5mbi5hZmZpeD1iLGEuZm4uYWZmaXguQ29uc3RydWN0b3I9YyxhLmZuLmFmZml4Lm5vQ29uZmxpY3Q9ZnVuY3Rpb24oKXtyZXR1cm4gYS5mbi5hZmZpeD1kLHRoaXN9LGEod2luZG93KS5vbihcImxvYWRcIixmdW5jdGlvbigpe2EoJ1tkYXRhLXNweT1cImFmZml4XCJdJykuZWFjaChmdW5jdGlvbigpe3ZhciBjPWEodGhpcyksZD1jLmRhdGEoKTtkLm9mZnNldD1kLm9mZnNldHx8e30sZC5vZmZzZXRCb3R0b20mJihkLm9mZnNldC5ib3R0b209ZC5vZmZzZXRCb3R0b20pLGQub2Zmc2V0VG9wJiYoZC5vZmZzZXQudG9wPWQub2Zmc2V0VG9wKSxiLmNhbGwoYyxkKX0pfSl9KGpRdWVyeSk7In0sICJoZWFkZXJzU2l6ZSI6IDAsICJib2R5U2l6ZSI6IDkyNTIsICJyZWRpcmVjdFVSTCI6ICIiLCAiX3RyYW5zZmVyU2l6ZSI6IDkyNTJ9LCAiY2FjaGUiOiB7fSwgInRpbWluZ3MiOiB7ImRucyI6IC0xLCAiY29ubmVjdCI6IC0xLCAic3NsIjogLTEsICJzZW5kIjogMCwgIndhaXQiOiA0MDUuNTExLCAicmVjZWl2ZSI6IDcuMDc0fSwgInBhZ2VyZWYiOiAicGFnZUA4YzkzMmY4MzM3ZDlhYmI0YjlhYjk4ODlkZWM1MWI5OSIsICJzZXJ2ZXJJUEFkZHJlc3MiOiAiWzI2MDY6NDcwMDoyMDo6NjgxYTplY2ZdIiwgIl9zZXJ2ZXJQb3J0IjogNDQzLCAiX3NlY3VyaXR5RGV0YWlscyI6IHsicHJvdG9jb2wiOiAiVExTIDEuMyIsICJzdWJqZWN0TmFtZSI6ICJzdXBwbHljaGFpbmNhbmFkYS5jb20iLCAiaXNzdWVyIjogIldFMSIsICJ2YWxpZEZyb20iOiAxNzIzNDcwODQxLCAidmFsaWRUbyI6IDE3MzEyNDY4NDB9fSwgeyJzdGFydGVkRGF0ZVRpbWUiOiAiMjAyNC0wOS0wNVQxMTowNzoyMC4yOTBaIiwgInRpbWUiOiA2OC40MTYsICJyZXF1ZXN0IjogeyJtZXRob2QiOiAiR0VUIiwgInVybCI6ICJodHRwczovL2NvZGUuanF1ZXJ5LmNvbS91aS8xLjExLjQvdGhlbWVzL3Ntb290aG5lc3MvanF1ZXJ5LXVpLmNzcyIsICJodHRwVmVyc2lvbiI6ICJIVFRQLzIuMCIsICJjb29raWVzIjogW10sICJoZWFkZXJzIjogW3sibmFtZSI6ICI6YXV0aG9yaXR5IiwgInZhbHVlIjogImNvZGUuanF1ZXJ5LmNvbSJ9LCB7Im5hbWUiOiAiOm1ldGhvZCIsICJ2YWx1ZSI6ICJHRVQifSwgeyJuYW1lIjogIjpwYXRoIiwgInZhbHVlIjogIi91aS8xLjExLjQvdGhlbWVzL3Ntb290aG5lc3MvanF1ZXJ5LXVpLmNzcyJ9LCB7Im5hbWUiOiAiOnNjaGVtZSIsICJ2YWx1ZSI6ICJodHRwcyJ9LCB7Im5hbWUiOiAiYWNjZXB0IiwgInZhbHVlIjogInRleHQvY3NzLCovKjtxPTAuMSJ9LCB7Im5hbWUiOiAiYWNjZXB0LWVuY29kaW5nIiwgInZhbHVlIjogImd6aXAsIGRlZmxhdGUsIGJyLCB6c3RkIn0sIHsibmFtZSI6ICJhY2NlcHQtbGFuZ3VhZ2UiLCAidmFsdWUiOiAiZW4tVVMifSwgeyJuYW1lIjogInByaW9yaXR5IiwgInZhbHVlIjogInU9MCJ9LCB7Im5hbWUiOiAicmVmZXJlciIsICJ2YWx1ZSI6ICJodHRwczovL3BvcnRhbC5zdXBwbHljaGFpbmNhbmFkYS5jb20vIn0sIHsibmFtZSI6ICJzZWMtY2gtdWEiLCAidmFsdWUiOiAiXCJOb3Q7QT1CcmFuZFwiO3Y9XCIyNFwiLCBcIkNocm9taXVtXCI7dj1cIjEyOFwiIn0sIHsibmFtZSI6ICJzZWMtY2gtdWEtbW9iaWxlIiwgInZhbHVlIjogIj8wIn0sIHsibmFtZSI6ICJzZWMtY2gtdWEtcGxhdGZvcm0iLCAidmFsdWUiOiAiXCJXaW5kb3dzXCIifSwgeyJuYW1lIjogInNlYy1mZXRjaC1kZXN0IiwgInZhbHVlIjogInN0eWxlIn0sIHsibmFtZSI6ICJzZWMtZmV0Y2gtbW9kZSIsICJ2YWx1ZSI6ICJuby1jb3JzIn0sIHsibmFtZSI6ICJzZWMtZmV0Y2gtc2l0ZSIsICJ2YWx1ZSI6ICJjcm9zcy1zaXRlIn0sIHsibmFtZSI6ICJ1c2VyLWFnZW50IiwgInZhbHVlIjogIk1vemlsbGEvNS4wIChXaW5kb3dzIE5UIDEwLjA7IFdpbjY0OyB4NjQpIEFwcGxlV2ViS2l0LzUzNy4zNiAoS0hUTUwsIGxpa2UgR2Vja28pIENocm9tZS8xMjguMC42NjEzLjE4IFNhZmFyaS81MzcuMzYifV0sICJxdWVyeVN0cmluZyI6IFtdLCAiaGVhZGVyc1NpemUiOiA2MzUsICJib2R5U2l6ZSI6IDB9LCAicmVzcG9uc2UiOiB7InN0YXR1cyI6IDIwMCwgInN0YXR1c1RleHQiOiAiIiwgImh0dHBWZXJzaW9uIjogIkhUVFAvMi4wIiwgImNvb2tpZXMiOiBbXSwgImhlYWRlcnMiOiBbeyJuYW1lIjogImFjY2VwdC1yYW5nZXMiLCAidmFsdWUiOiAiYnl0ZXMifSwgeyJuYW1lIjogImFjY2Vzcy1jb250cm9sLWFsbG93LW9yaWdpbiIsICJ2YWx1ZSI6ICIqIn0sIHsibmFtZSI6ICJhZ2UiLCAidmFsdWUiOiAiMjY3Njg0MyJ9LCB7Im5hbWUiOiAiY2FjaGUtY29udHJvbCIsICJ2YWx1ZSI6ICJwdWJsaWMsIG1heC1hZ2U9MzE1MzYwMDAsIHN0YWxlLXdoaWxlLXJldmFsaWRhdGU9NjA0ODAwIn0sIHsibmFtZSI6ICJjb250ZW50LWVuY29kaW5nIiwgInZhbHVlIjogImd6aXAifSwgeyJuYW1lIjogImNvbnRlbnQtbGVuZ3RoIiwgInZhbHVlIjogIjgwNTYifSwgeyJuYW1lIjogImNvbnRlbnQtdHlwZSIsICJ2YWx1ZSI6ICJ0ZXh0L2NzcyJ9LCB7Im5hbWUiOiAiZGF0ZSIsICJ2YWx1ZSI6ICJUaHUsIDA1IFNlcCAyMDI0IDExOjA3OjIwIEdNVCJ9LCB7Im5hbWUiOiAiZXRhZyIsICJ2YWx1ZSI6ICJXL1wiMjhmZWNjYzAtODk4Y1wiIn0sIHsibmFtZSI6ICJsYXN0LW1vZGlmaWVkIiwgInZhbHVlIjogIkZyaSwgMTggT2N0IDE5OTEgMTI6MDA6MDAgR01UIn0sIHsibmFtZSI6ICJzZXJ2ZXIiLCAidmFsdWUiOiAibmdpbngifSwgeyJuYW1lIjogInZhcnkiLCAidmFsdWUiOiAiQWNjZXB0LUVuY29kaW5nIn0sIHsibmFtZSI6ICJ2aWEiLCAidmFsdWUiOiAiMS4xIHZhcm5pc2gsIDEuMSB2YXJuaXNoIn0sIHsibmFtZSI6ICJ4LWNhY2hlIiwgInZhbHVlIjogIkhJVCwgSElUIn0sIHsibmFtZSI6ICJ4LWNhY2hlLWhpdHMiLCAidmFsdWUiOiAiNjAsIDExODAyIn0sIHsibmFtZSI6ICJ4LXNlcnZlZC1ieSIsICJ2YWx1ZSI6ICJjYWNoZS1sZ2EyMTkyNi1MR0EsIGNhY2hlLWZyYS1lZGRmODIzMDA0My1GUkEifSwgeyJuYW1lIjogIngtdGltZXIiLCAidmFsdWUiOiAiUzE3MjU1MzQ0NDAuMzIwMzE4LFZTMCxWRTAifV0sICJjb250ZW50IjogeyJzaXplIjogMzUyMTIsICJtaW1lVHlwZSI6ICJ0ZXh0L2NzcyIsICJjb21wcmVzc2lvbiI6IDI2ODQ5LCAidGV4dCI6ICIvKiEgalF1ZXJ5IFVJIC0gdjEuMTEuNCAtIDIwMTUtMDMtMTFcbiogaHR0cDovL2pxdWVyeXVpLmNvbVxuKiBJbmNsdWRlczogY29yZS5jc3MsIGFjY29yZGlvbi5jc3MsIGF1dG9jb21wbGV0ZS5jc3MsIGJ1dHRvbi5jc3MsIGRhdGVwaWNrZXIuY3NzLCBkaWFsb2cuY3NzLCBkcmFnZ2FibGUuY3NzLCBtZW51LmNzcywgcHJvZ3Jlc3NiYXIuY3NzLCByZXNpemFibGUuY3NzLCBzZWxlY3RhYmxlLmNzcywgc2VsZWN0bWVudS5jc3MsIHNsaWRlci5jc3MsIHNvcnRhYmxlLmNzcywgc3Bpbm5lci5jc3MsIHRhYnMuY3NzLCB0b29sdGlwLmNzcywgdGhlbWUuY3NzXG4qIFRvIHZpZXcgYW5kIG1vZGlmeSB0aGlzIHRoZW1lLCB2aXNpdCBodHRwOi8vanF1ZXJ5dWkuY29tL3RoZW1lcm9sbGVyLz9mZkRlZmF1bHQ9VmVyZGFuYSUyQ0FyaWFsJTJDc2Fucy1zZXJpZiZmd0RlZmF1bHQ9bm9ybWFsJmZzRGVmYXVsdD0xLjFlbSZjb3JuZXJSYWRpdXM9NHB4JmJnQ29sb3JIZWFkZXI9Y2NjY2NjJmJnVGV4dHVyZUhlYWRlcj1oaWdobGlnaHRfc29mdCZiZ0ltZ09wYWNpdHlIZWFkZXI9NzUmYm9yZGVyQ29sb3JIZWFkZXI9YWFhYWFhJmZjSGVhZGVyPTIyMjIyMiZpY29uQ29sb3JIZWFkZXI9MjIyMjIyJmJnQ29sb3JDb250ZW50PWZmZmZmZiZiZ1RleHR1cmVDb250ZW50PWZsYXQmYmdJbWdPcGFjaXR5Q29udGVudD03NSZib3JkZXJDb2xvckNvbnRlbnQ9YWFhYWFhJmZjQ29udGVudD0yMjIyMjImaWNvbkNvbG9yQ29udGVudD0yMjIyMjImYmdDb2xvckRlZmF1bHQ9ZTZlNmU2JmJnVGV4dHVyZURlZmF1bHQ9Z2xhc3MmYmdJbWdPcGFjaXR5RGVmYXVsdD03NSZib3JkZXJDb2xvckRlZmF1bHQ9ZDNkM2QzJmZjRGVmYXVsdD01NTU1NTUmaWNvbkNvbG9yRGVmYXVsdD04ODg4ODgmYmdDb2xvckhvdmVyPWRhZGFkYSZiZ1RleHR1cmVIb3Zlcj1nbGFzcyZiZ0ltZ09wYWNpdHlIb3Zlcj03NSZib3JkZXJDb2xvckhvdmVyPTk5OTk5OSZmY0hvdmVyPTIxMjEyMSZpY29uQ29sb3JIb3Zlcj00NTQ1NDUmYmdDb2xvckFjdGl2ZT1mZmZmZmYmYmdUZXh0dXJlQWN0aXZlPWdsYXNzJmJnSW1nT3BhY2l0eUFjdGl2ZT02NSZib3JkZXJDb2xvckFjdGl2ZT1hYWFhYWEmZmNBY3RpdmU9MjEyMTIxJmljb25Db2xvckFjdGl2ZT00NTQ1NDUmYmdDb2xvckhpZ2hsaWdodD1mYmY5ZWUmYmdUZXh0dXJlSGlnaGxpZ2h0PWdsYXNzJmJnSW1nT3BhY2l0eUhpZ2hsaWdodD01NSZib3JkZXJDb2xvckhpZ2hsaWdodD1mY2VmYTEmZmNIaWdobGlnaHQ9MzYzNjM2Jmljb25Db2xvckhpZ2hsaWdodD0yZTgzZmYmYmdDb2xvckVycm9yPWZlZjFlYyZiZ1RleHR1cmVFcnJvcj1nbGFzcyZiZ0ltZ09wYWNpdHlFcnJvcj05NSZib3JkZXJDb2xvckVycm9yPWNkMGEwYSZmY0Vycm9yPWNkMGEwYSZpY29uQ29sb3JFcnJvcj1jZDBhMGEmYmdDb2xvck92ZXJsYXk9YWFhYWFhJmJnVGV4dHVyZU92ZXJsYXk9ZmxhdCZiZ0ltZ09wYWNpdHlPdmVybGF5PTAmb3BhY2l0eU92ZXJsYXk9MzAmYmdDb2xvclNoYWRvdz1hYWFhYWEmYmdUZXh0dXJlU2hhZG93PWZsYXQmYmdJbWdPcGFjaXR5U2hhZG93PTAmb3BhY2l0eVNoYWRvdz0zMCZ0aGlja25lc3NTaGFkb3c9OHB4Jm9mZnNldFRvcFNoYWRvdz0tOHB4Jm9mZnNldExlZnRTaGFkb3c9LThweCZjb3JuZXJSYWRpdXNTaGFkb3c9OHB4XG4qIENvcHlyaWdodCAyMDE1IGpRdWVyeSBGb3VuZGF0aW9uIGFuZCBvdGhlciBjb250cmlidXRvcnM7IExpY2Vuc2VkIE1JVCAqL1xuXG4vKiBMYXlvdXQgaGVscGVyc1xuLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG4udWktaGVscGVyLWhpZGRlbiB7XG5cdGRpc3BsYXk6IG5vbmU7XG59XG4udWktaGVscGVyLWhpZGRlbi1hY2Nlc3NpYmxlIHtcblx0Ym9yZGVyOiAwO1xuXHRjbGlwOiByZWN0KDAgMCAwIDApO1xuXHRoZWlnaHQ6IDFweDtcblx0bWFyZ2luOiAtMXB4O1xuXHRvdmVyZmxvdzogaGlkZGVuO1xuXHRwYWRkaW5nOiAwO1xuXHRwb3NpdGlvbjogYWJzb2x1dGU7XG5cdHdpZHRoOiAxcHg7XG59XG4udWktaGVscGVyLXJlc2V0IHtcblx0bWFyZ2luOiAwO1xuXHRwYWRkaW5nOiAwO1xuXHRib3JkZXI6IDA7XG5cdG91dGxpbmU6IDA7XG5cdGxpbmUtaGVpZ2h0OiAxLjM7XG5cdHRleHQtZGVjb3JhdGlvbjogbm9uZTtcblx0Zm9udC1zaXplOiAxMDAlO1xuXHRsaXN0LXN0eWxlOiBub25lO1xufVxuLnVpLWhlbHBlci1jbGVhcmZpeDpiZWZvcmUsXG4udWktaGVscGVyLWNsZWFyZml4OmFmdGVyIHtcblx0Y29udGVudDogXCJcIjtcblx0ZGlzcGxheTogdGFibGU7XG5cdGJvcmRlci1jb2xsYXBzZTogY29sbGFwc2U7XG59XG4udWktaGVscGVyLWNsZWFyZml4OmFmdGVyIHtcblx0Y2xlYXI6IGJvdGg7XG59XG4udWktaGVscGVyLWNsZWFyZml4IHtcblx0bWluLWhlaWdodDogMDsgLyogc3VwcG9ydDogSUU3ICovXG59XG4udWktaGVscGVyLXpmaXgge1xuXHR3aWR0aDogMTAwJTtcblx0aGVpZ2h0OiAxMDAlO1xuXHR0b3A6IDA7XG5cdGxlZnQ6IDA7XG5cdHBvc2l0aW9uOiBhYnNvbHV0ZTtcblx0b3BhY2l0eTogMDtcblx0ZmlsdGVyOkFscGhhKE9wYWNpdHk9MCk7IC8qIHN1cHBvcnQ6IElFOCAqL1xufVxuXG4udWktZnJvbnQge1xuXHR6LWluZGV4OiAxMDA7XG59XG5cblxuLyogSW50ZXJhY3Rpb24gQ3Vlc1xuLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG4udWktc3RhdGUtZGlzYWJsZWQge1xuXHRjdXJzb3I6IGRlZmF1bHQgIWltcG9ydGFudDtcbn1cblxuXG4vKiBJY29uc1xuLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5cbi8qIHN0YXRlcyBhbmQgaW1hZ2VzICovXG4udWktaWNvbiB7XG5cdGRpc3BsYXk6IGJsb2NrO1xuXHR0ZXh0LWluZGVudDogLTk5OTk5cHg7XG5cdG92ZXJmbG93OiBoaWRkZW47XG5cdGJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQ7XG59XG5cblxuLyogTWlzYyB2aXN1YWxzXG4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cblxuLyogT3ZlcmxheXMgKi9cbi51aS13aWRnZXQtb3ZlcmxheSB7XG5cdHBvc2l0aW9uOiBmaXhlZDtcblx0dG9wOiAwO1xuXHRsZWZ0OiAwO1xuXHR3aWR0aDogMTAwJTtcblx0aGVpZ2h0OiAxMDAlO1xufVxuLnVpLWFjY29yZGlvbiAudWktYWNjb3JkaW9uLWhlYWRlciB7XG5cdGRpc3BsYXk6IGJsb2NrO1xuXHRjdXJzb3I6IHBvaW50ZXI7XG5cdHBvc2l0aW9uOiByZWxhdGl2ZTtcblx0bWFyZ2luOiAycHggMCAwIDA7XG5cdHBhZGRpbmc6IC41ZW0gLjVlbSAuNWVtIC43ZW07XG5cdG1pbi1oZWlnaHQ6IDA7IC8qIHN1cHBvcnQ6IElFNyAqL1xuXHRmb250LXNpemU6IDEwMCU7XG59XG4udWktYWNjb3JkaW9uIC51aS1hY2NvcmRpb24taWNvbnMge1xuXHRwYWRkaW5nLWxlZnQ6IDIuMmVtO1xufVxuLnVpLWFjY29yZGlvbiAudWktYWNjb3JkaW9uLWljb25zIC51aS1hY2NvcmRpb24taWNvbnMge1xuXHRwYWRkaW5nLWxlZnQ6IDIuMmVtO1xufVxuLnVpLWFjY29yZGlvbiAudWktYWNjb3JkaW9uLWhlYWRlciAudWktYWNjb3JkaW9uLWhlYWRlci1pY29uIHtcblx0cG9zaXRpb246IGFic29sdXRlO1xuXHRsZWZ0OiAuNWVtO1xuXHR0b3A6IDUwJTtcblx0bWFyZ2luLXRvcDogLThweDtcbn1cbi51aS1hY2NvcmRpb24gLnVpLWFjY29yZGlvbi1jb250ZW50IHtcblx0cGFkZGluZzogMWVtIDIuMmVtO1xuXHRib3JkZXItdG9wOiAwO1xuXHRvdmVyZmxvdzogYXV0bztcbn1cbi51aS1hdXRvY29tcGxldGUge1xuXHRwb3NpdGlvbjogYWJzb2x1dGU7XG5cdHRvcDogMDtcblx0bGVmdDogMDtcblx0Y3Vyc29yOiBkZWZhdWx0O1xufVxuLnVpLWJ1dHRvbiB7XG5cdGRpc3BsYXk6IGlubGluZS1ibG9jaztcblx0cG9zaXRpb246IHJlbGF0aXZlO1xuXHRwYWRkaW5nOiAwO1xuXHRsaW5lLWhlaWdodDogbm9ybWFsO1xuXHRtYXJnaW4tcmlnaHQ6IC4xZW07XG5cdGN1cnNvcjogcG9pbnRlcjtcblx0dmVydGljYWwtYWxpZ246IG1pZGRsZTtcblx0dGV4dC1hbGlnbjogY2VudGVyO1xuXHRvdmVyZmxvdzogdmlzaWJsZTsgLyogcmVtb3ZlcyBleHRyYSB3aWR0aCBpbiBJRSAqL1xufVxuLnVpLWJ1dHRvbixcbi51aS1idXR0b246bGluayxcbi51aS1idXR0b246dmlzaXRlZCxcbi51aS1idXR0b246aG92ZXIsXG4udWktYnV0dG9uOmFjdGl2ZSB7XG5cdHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbn1cbi8qIHRvIG1ha2Ugcm9vbSBmb3IgdGhlIGljb24sIGEgd2lkdGggbmVlZHMgdG8gYmUgc2V0IGhlcmUgKi9cbi51aS1idXR0b24taWNvbi1vbmx5IHtcblx0d2lkdGg6IDIuMmVtO1xufVxuLyogYnV0dG9uIGVsZW1lbnRzIHNlZW0gdG8gbmVlZCBhIGxpdHRsZSBtb3JlIHdpZHRoICovXG5idXR0b24udWktYnV0dG9uLWljb24tb25seSB7XG5cdHdpZHRoOiAyLjRlbTtcbn1cbi51aS1idXR0b24taWNvbnMtb25seSB7XG5cdHdpZHRoOiAzLjRlbTtcbn1cbmJ1dHRvbi51aS1idXR0b24taWNvbnMtb25seSB7XG5cdHdpZHRoOiAzLjdlbTtcbn1cblxuLyogYnV0dG9uIHRleHQgZWxlbWVudCAqL1xuLnVpLWJ1dHRvbiAudWktYnV0dG9uLXRleHQge1xuXHRkaXNwbGF5OiBibG9jaztcblx0bGluZS1oZWlnaHQ6IG5vcm1hbDtcbn1cbi51aS1idXR0b24tdGV4dC1vbmx5IC51aS1idXR0b24tdGV4dCB7XG5cdHBhZGRpbmc6IC40ZW0gMWVtO1xufVxuLnVpLWJ1dHRvbi1pY29uLW9ubHkgLnVpLWJ1dHRvbi10ZXh0LFxuLnVpLWJ1dHRvbi1pY29ucy1vbmx5IC51aS1idXR0b24tdGV4dCB7XG5cdHBhZGRpbmc6IC40ZW07XG5cdHRleHQtaW5kZW50OiAtOTk5OTk5OXB4O1xufVxuLnVpLWJ1dHRvbi10ZXh0LWljb24tcHJpbWFyeSAudWktYnV0dG9uLXRleHQsXG4udWktYnV0dG9uLXRleHQtaWNvbnMgLnVpLWJ1dHRvbi10ZXh0IHtcblx0cGFkZGluZzogLjRlbSAxZW0gLjRlbSAyLjFlbTtcbn1cbi51aS1idXR0b24tdGV4dC1pY29uLXNlY29uZGFyeSAudWktYnV0dG9uLXRleHQsXG4udWktYnV0dG9uLXRleHQtaWNvbnMgLnVpLWJ1dHRvbi10ZXh0IHtcblx0cGFkZGluZzogLjRlbSAyLjFlbSAuNGVtIDFlbTtcbn1cbi51aS1idXR0b24tdGV4dC1pY29ucyAudWktYnV0dG9uLXRleHQge1xuXHRwYWRkaW5nLWxlZnQ6IDIuMWVtO1xuXHRwYWRkaW5nLXJpZ2h0OiAyLjFlbTtcbn1cbi8qIG5vIGljb24gc3VwcG9ydCBmb3IgaW5wdXQgZWxlbWVudHMsIHByb3ZpZGUgcGFkZGluZyBieSBkZWZhdWx0ICovXG5pbnB1dC51aS1idXR0b24ge1xuXHRwYWRkaW5nOiAuNGVtIDFlbTtcbn1cblxuLyogYnV0dG9uIGljb24gZWxlbWVudChzKSAqL1xuLnVpLWJ1dHRvbi1pY29uLW9ubHkgLnVpLWljb24sXG4udWktYnV0dG9uLXRleHQtaWNvbi1wcmltYXJ5IC51aS1pY29uLFxuLnVpLWJ1dHRvbi10ZXh0LWljb24tc2Vjb25kYXJ5IC51aS1pY29uLFxuLnVpLWJ1dHRvbi10ZXh0LWljb25zIC51aS1pY29uLFxuLnVpLWJ1dHRvbi1pY29ucy1vbmx5IC51aS1pY29uIHtcblx0cG9zaXRpb246IGFic29sdXRlO1xuXHR0b3A6IDUwJTtcblx0bWFyZ2luLXRvcDogLThweDtcbn1cbi51aS1idXR0b24taWNvbi1vbmx5IC51aS1pY29uIHtcblx0bGVmdDogNTAlO1xuXHRtYXJnaW4tbGVmdDogLThweDtcbn1cbi51aS1idXR0b24tdGV4dC1pY29uLXByaW1hcnkgLnVpLWJ1dHRvbi1pY29uLXByaW1hcnksXG4udWktYnV0dG9uLXRleHQtaWNvbnMgLnVpLWJ1dHRvbi1pY29uLXByaW1hcnksXG4udWktYnV0dG9uLWljb25zLW9ubHkgLnVpLWJ1dHRvbi1pY29uLXByaW1hcnkge1xuXHRsZWZ0OiAuNWVtO1xufVxuLnVpLWJ1dHRvbi10ZXh0LWljb24tc2Vjb25kYXJ5IC51aS1idXR0b24taWNvbi1zZWNvbmRhcnksXG4udWktYnV0dG9uLXRleHQtaWNvbnMgLnVpLWJ1dHRvbi1pY29uLXNlY29uZGFyeSxcbi51aS1idXR0b24taWNvbnMtb25seSAudWktYnV0dG9uLWljb24tc2Vjb25kYXJ5IHtcblx0cmlnaHQ6IC41ZW07XG59XG5cbi8qIGJ1dHRvbiBzZXRzICovXG4udWktYnV0dG9uc2V0IHtcblx0bWFyZ2luLXJpZ2h0OiA3cHg7XG59XG4udWktYnV0dG9uc2V0IC51aS1idXR0b24ge1xuXHRtYXJnaW4tbGVmdDogMDtcblx0bWFyZ2luLXJpZ2h0OiAtLjNlbTtcbn1cblxuLyogd29ya2Fyb3VuZHMgKi9cbi8qIHJlc2V0IGV4dHJhIHBhZGRpbmcgaW4gRmlyZWZveCwgc2VlIGg1YnAuY29tL2wgKi9cbmlucHV0LnVpLWJ1dHRvbjo6LW1vei1mb2N1cy1pbm5lcixcbmJ1dHRvbi51aS1idXR0b246Oi1tb3otZm9jdXMtaW5uZXIge1xuXHRib3JkZXI6IDA7XG5cdHBhZGRpbmc6IDA7XG59XG4udWktZGF0ZXBpY2tlciB7XG5cdHdpZHRoOiAxN2VtO1xuXHRwYWRkaW5nOiAuMmVtIC4yZW0gMDtcblx0ZGlzcGxheTogbm9uZTtcbn1cbi51aS1kYXRlcGlja2VyIC51aS1kYXRlcGlja2VyLWhlYWRlciB7XG5cdHBvc2l0aW9uOiByZWxhdGl2ZTtcblx0cGFkZGluZzogLjJlbSAwO1xufVxuLnVpLWRhdGVwaWNrZXIgLnVpLWRhdGVwaWNrZXItcHJldixcbi51aS1kYXRlcGlja2VyIC51aS1kYXRlcGlja2VyLW5leHQge1xuXHRwb3NpdGlvbjogYWJzb2x1dGU7XG5cdHRvcDogMnB4O1xuXHR3aWR0aDogMS44ZW07XG5cdGhlaWdodDogMS44ZW07XG59XG4udWktZGF0ZXBpY2tlciAudWktZGF0ZXBpY2tlci1wcmV2LWhvdmVyLFxuLnVpLWRhdGVwaWNrZXIgLnVpLWRhdGVwaWNrZXItbmV4dC1ob3ZlciB7XG5cdHRvcDogMXB4O1xufVxuLnVpLWRhdGVwaWNrZXIgLnVpLWRhdGVwaWNrZXItcHJldiB7XG5cdGxlZnQ6IDJweDtcbn1cbi51aS1kYXRlcGlja2VyIC51aS1kYXRlcGlja2VyLW5leHQge1xuXHRyaWdodDogMnB4O1xufVxuLnVpLWRhdGVwaWNrZXIgLnVpLWRhdGVwaWNrZXItcHJldi1ob3ZlciB7XG5cdGxlZnQ6IDFweDtcbn1cbi51aS1kYXRlcGlja2VyIC51aS1kYXRlcGlja2VyLW5leHQtaG92ZXIge1xuXHRyaWdodDogMXB4O1xufVxuLnVpLWRhdGVwaWNrZXIgLnVpLWRhdGVwaWNrZXItcHJldiBzcGFuLFxuLnVpLWRhdGVwaWNrZXIgLnVpLWRhdGVwaWNrZXItbmV4dCBzcGFuIHtcblx0ZGlzcGxheTogYmxvY2s7XG5cdHBvc2l0aW9uOiBhYnNvbHV0ZTtcblx0bGVmdDogNTAlO1xuXHRtYXJnaW4tbGVmdDogLThweDtcblx0dG9wOiA1MCU7XG5cdG1hcmdpbi10b3A6IC04cHg7XG59XG4udWktZGF0ZXBpY2tlciAudWktZGF0ZXBpY2tlci10aXRsZSB7XG5cdG1hcmdpbjogMCAyLjNlbTtcblx0bGluZS1oZWlnaHQ6IDEuOGVtO1xuXHR0ZXh0LWFsaWduOiBjZW50ZXI7XG59XG4udWktZGF0ZXBpY2tlciAudWktZGF0ZXBpY2tlci10aXRsZSBzZWxlY3Qge1xuXHRmb250LXNpemU6IDFlbTtcblx0bWFyZ2luOiAxcHggMDtcbn1cbi51aS1kYXRlcGlja2VyIHNlbGVjdC51aS1kYXRlcGlja2VyLW1vbnRoLFxuLnVpLWRhdGVwaWNrZXIgc2VsZWN0LnVpLWRhdGVwaWNrZXIteWVhciB7XG5cdHdpZHRoOiA0NSU7XG59XG4udWktZGF0ZXBpY2tlciB0YWJsZSB7XG5cdHdpZHRoOiAxMDAlO1xuXHRmb250LXNpemU6IC45ZW07XG5cdGJvcmRlci1jb2xsYXBzZTogY29sbGFwc2U7XG5cdG1hcmdpbjogMCAwIC40ZW07XG59XG4udWktZGF0ZXBpY2tlciB0aCB7XG5cdHBhZGRpbmc6IC43ZW0gLjNlbTtcblx0dGV4dC1hbGlnbjogY2VudGVyO1xuXHRmb250LXdlaWdodDogYm9sZDtcblx0Ym9yZGVyOiAwO1xufVxuLnVpLWRhdGVwaWNrZXIgdGQge1xuXHRib3JkZXI6IDA7XG5cdHBhZGRpbmc6IDFweDtcbn1cbi51aS1kYXRlcGlja2VyIHRkIHNwYW4sXG4udWktZGF0ZXBpY2tlciB0ZCBhIHtcblx0ZGlzcGxheTogYmxvY2s7XG5cdHBhZGRpbmc6IC4yZW07XG5cdHRleHQtYWxpZ246IHJpZ2h0O1xuXHR0ZXh0LWRlY29yYXRpb246IG5vbmU7XG59XG4udWktZGF0ZXBpY2tlciAudWktZGF0ZXBpY2tlci1idXR0b25wYW5lIHtcblx0YmFja2dyb3VuZC1pbWFnZTogbm9uZTtcblx0bWFyZ2luOiAuN2VtIDAgMCAwO1xuXHRwYWRkaW5nOiAwIC4yZW07XG5cdGJvcmRlci1sZWZ0OiAwO1xuXHRib3JkZXItcmlnaHQ6IDA7XG5cdGJvcmRlci1ib3R0b206IDA7XG59XG4udWktZGF0ZXBpY2tlciAudWktZGF0ZXBpY2tlci1idXR0b25wYW5lIGJ1dHRvbiB7XG5cdGZsb2F0OiByaWdodDtcblx0bWFyZ2luOiAuNWVtIC4yZW0gLjRlbTtcblx0Y3Vyc29yOiBwb2ludGVyO1xuXHRwYWRkaW5nOiAuMmVtIC42ZW0gLjNlbSAuNmVtO1xuXHR3aWR0aDogYXV0bztcblx0b3ZlcmZsb3c6IHZpc2libGU7XG59XG4udWktZGF0ZXBpY2tlciAudWktZGF0ZXBpY2tlci1idXR0b25wYW5lIGJ1dHRvbi51aS1kYXRlcGlja2VyLWN1cnJlbnQge1xuXHRmbG9hdDogbGVmdDtcbn1cblxuLyogd2l0aCBtdWx0aXBsZSBjYWxlbmRhcnMgKi9cbi51aS1kYXRlcGlja2VyLnVpLWRhdGVwaWNrZXItbXVsdGkge1xuXHR3aWR0aDogYXV0bztcbn1cbi51aS1kYXRlcGlja2VyLW11bHRpIC51aS1kYXRlcGlja2VyLWdyb3VwIHtcblx0ZmxvYXQ6IGxlZnQ7XG59XG4udWktZGF0ZXBpY2tlci1tdWx0aSAudWktZGF0ZXBpY2tlci1ncm91cCB0YWJsZSB7XG5cdHdpZHRoOiA5NSU7XG5cdG1hcmdpbjogMCBhdXRvIC40ZW07XG59XG4udWktZGF0ZXBpY2tlci1tdWx0aS0yIC51aS1kYXRlcGlja2VyLWdyb3VwIHtcblx0d2lkdGg6IDUwJTtcbn1cbi51aS1kYXRlcGlja2VyLW11bHRpLTMgLnVpLWRhdGVwaWNrZXItZ3JvdXAge1xuXHR3aWR0aDogMzMuMyU7XG59XG4udWktZGF0ZXBpY2tlci1tdWx0aS00IC51aS1kYXRlcGlja2VyLWdyb3VwIHtcblx0d2lkdGg6IDI1JTtcbn1cbi51aS1kYXRlcGlja2VyLW11bHRpIC51aS1kYXRlcGlja2VyLWdyb3VwLWxhc3QgLnVpLWRhdGVwaWNrZXItaGVhZGVyLFxuLnVpLWRhdGVwaWNrZXItbXVsdGkgLnVpLWRhdGVwaWNrZXItZ3JvdXAtbWlkZGxlIC51aS1kYXRlcGlja2VyLWhlYWRlciB7XG5cdGJvcmRlci1sZWZ0LXdpZHRoOiAwO1xufVxuLnVpLWRhdGVwaWNrZXItbXVsdGkgLnVpLWRhdGVwaWNrZXItYnV0dG9ucGFuZSB7XG5cdGNsZWFyOiBsZWZ0O1xufVxuLnVpLWRhdGVwaWNrZXItcm93LWJyZWFrIHtcblx0Y2xlYXI6IGJvdGg7XG5cdHdpZHRoOiAxMDAlO1xuXHRmb250LXNpemU6IDA7XG59XG5cbi8qIFJUTCBzdXBwb3J0ICovXG4udWktZGF0ZXBpY2tlci1ydGwge1xuXHRkaXJlY3Rpb246IHJ0bDtcbn1cbi51aS1kYXRlcGlja2VyLXJ0bCAudWktZGF0ZXBpY2tlci1wcmV2IHtcblx0cmlnaHQ6IDJweDtcblx0bGVmdDogYXV0bztcbn1cbi51aS1kYXRlcGlja2VyLXJ0bCAudWktZGF0ZXBpY2tlci1uZXh0IHtcblx0bGVmdDogMnB4O1xuXHRyaWdodDogYXV0bztcbn1cbi51aS1kYXRlcGlja2VyLXJ0bCAudWktZGF0ZXBpY2tlci1wcmV2OmhvdmVyIHtcblx0cmlnaHQ6IDFweDtcblx0bGVmdDogYXV0bztcbn1cbi51aS1kYXRlcGlja2VyLXJ0bCAudWktZGF0ZXBpY2tlci1uZXh0OmhvdmVyIHtcblx0bGVmdDogMXB4O1xuXHRyaWdodDogYXV0bztcbn1cbi51aS1kYXRlcGlja2VyLXJ0bCAudWktZGF0ZXBpY2tlci1idXR0b25wYW5lIHtcblx0Y2xlYXI6IHJpZ2h0O1xufVxuLnVpLWRhdGVwaWNrZXItcnRsIC51aS1kYXRlcGlja2VyLWJ1dHRvbnBhbmUgYnV0dG9uIHtcblx0ZmxvYXQ6IGxlZnQ7XG59XG4udWktZGF0ZXBpY2tlci1ydGwgLnVpLWRhdGVwaWNrZXItYnV0dG9ucGFuZSBidXR0b24udWktZGF0ZXBpY2tlci1jdXJyZW50LFxuLnVpLWRhdGVwaWNrZXItcnRsIC51aS1kYXRlcGlja2VyLWdyb3VwIHtcblx0ZmxvYXQ6IHJpZ2h0O1xufVxuLnVpLWRhdGVwaWNrZXItcnRsIC51aS1kYXRlcGlja2VyLWdyb3VwLWxhc3QgLnVpLWRhdGVwaWNrZXItaGVhZGVyLFxuLnVpLWRhdGVwaWNrZXItcnRsIC51aS1kYXRlcGlja2VyLWdyb3VwLW1pZGRsZSAudWktZGF0ZXBpY2tlci1oZWFkZXIge1xuXHRib3JkZXItcmlnaHQtd2lkdGg6IDA7XG5cdGJvcmRlci1sZWZ0LXdpZHRoOiAxcHg7XG59XG4udWktZGlhbG9nIHtcblx0b3ZlcmZsb3c6IGhpZGRlbjtcblx0cG9zaXRpb246IGFic29sdXRlO1xuXHR0b3A6IDA7XG5cdGxlZnQ6IDA7XG5cdHBhZGRpbmc6IC4yZW07XG5cdG91dGxpbmU6IDA7XG59XG4udWktZGlhbG9nIC51aS1kaWFsb2ctdGl0bGViYXIge1xuXHRwYWRkaW5nOiAuNGVtIDFlbTtcblx0cG9zaXRpb246IHJlbGF0aXZlO1xufVxuLnVpLWRpYWxvZyAudWktZGlhbG9nLXRpdGxlIHtcblx0ZmxvYXQ6IGxlZnQ7XG5cdG1hcmdpbjogLjFlbSAwO1xuXHR3aGl0ZS1zcGFjZTogbm93cmFwO1xuXHR3aWR0aDogOTAlO1xuXHRvdmVyZmxvdzogaGlkZGVuO1xuXHR0ZXh0LW92ZXJmbG93OiBlbGxpcHNpcztcbn1cbi51aS1kaWFsb2cgLnVpLWRpYWxvZy10aXRsZWJhci1jbG9zZSB7XG5cdHBvc2l0aW9uOiBhYnNvbHV0ZTtcblx0cmlnaHQ6IC4zZW07XG5cdHRvcDogNTAlO1xuXHR3aWR0aDogMjBweDtcblx0bWFyZ2luOiAtMTBweCAwIDAgMDtcblx0cGFkZGluZzogMXB4O1xuXHRoZWlnaHQ6IDIwcHg7XG59XG4udWktZGlhbG9nIC51aS1kaWFsb2ctY29udGVudCB7XG5cdHBvc2l0aW9uOiByZWxhdGl2ZTtcblx0Ym9yZGVyOiAwO1xuXHRwYWRkaW5nOiAuNWVtIDFlbTtcblx0YmFja2dyb3VuZDogbm9uZTtcblx0b3ZlcmZsb3c6IGF1dG87XG59XG4udWktZGlhbG9nIC51aS1kaWFsb2ctYnV0dG9ucGFuZSB7XG5cdHRleHQtYWxpZ246IGxlZnQ7XG5cdGJvcmRlci13aWR0aDogMXB4IDAgMCAwO1xuXHRiYWNrZ3JvdW5kLWltYWdlOiBub25lO1xuXHRtYXJnaW4tdG9wOiAuNWVtO1xuXHRwYWRkaW5nOiAuM2VtIDFlbSAuNWVtIC40ZW07XG59XG4udWktZGlhbG9nIC51aS1kaWFsb2ctYnV0dG9ucGFuZSAudWktZGlhbG9nLWJ1dHRvbnNldCB7XG5cdGZsb2F0OiByaWdodDtcbn1cbi51aS1kaWFsb2cgLnVpLWRpYWxvZy1idXR0b25wYW5lIGJ1dHRvbiB7XG5cdG1hcmdpbjogLjVlbSAuNGVtIC41ZW0gMDtcblx0Y3Vyc29yOiBwb2ludGVyO1xufVxuLnVpLWRpYWxvZyAudWktcmVzaXphYmxlLXNlIHtcblx0d2lkdGg6IDEycHg7XG5cdGhlaWdodDogMTJweDtcblx0cmlnaHQ6IC01cHg7XG5cdGJvdHRvbTogLTVweDtcblx0YmFja2dyb3VuZC1wb3NpdGlvbjogMTZweCAxNnB4O1xufVxuLnVpLWRyYWdnYWJsZSAudWktZGlhbG9nLXRpdGxlYmFyIHtcblx0Y3Vyc29yOiBtb3ZlO1xufVxuLnVpLWRyYWdnYWJsZS1oYW5kbGUge1xuXHQtbXMtdG91Y2gtYWN0aW9uOiBub25lO1xuXHR0b3VjaC1hY3Rpb246IG5vbmU7XG59XG4udWktbWVudSB7XG5cdGxpc3Qtc3R5bGU6IG5vbmU7XG5cdHBhZGRpbmc6IDA7XG5cdG1hcmdpbjogMDtcblx0ZGlzcGxheTogYmxvY2s7XG5cdG91dGxpbmU6IG5vbmU7XG59XG4udWktbWVudSAudWktbWVudSB7XG5cdHBvc2l0aW9uOiBhYnNvbHV0ZTtcbn1cbi51aS1tZW51IC51aS1tZW51LWl0ZW0ge1xuXHRwb3NpdGlvbjogcmVsYXRpdmU7XG5cdG1hcmdpbjogMDtcblx0cGFkZGluZzogM3B4IDFlbSAzcHggLjRlbTtcblx0Y3Vyc29yOiBwb2ludGVyO1xuXHRtaW4taGVpZ2h0OiAwOyAvKiBzdXBwb3J0OiBJRTcgKi9cblx0Lyogc3VwcG9ydDogSUUxMCwgc2VlICM4ODQ0ICovXG5cdGxpc3Qtc3R5bGUtaW1hZ2U6IHVybChcImRhdGE6aW1hZ2UvZ2lmO2Jhc2U2NCxSMGxHT0RsaEFRQUJBSUFBQUFBQUFQLy8veUg1QkFFQUFBQUFMQUFBQUFBQkFBRUFBQUlCUkFBN1wiKTtcbn1cbi51aS1tZW51IC51aS1tZW51LWRpdmlkZXIge1xuXHRtYXJnaW46IDVweCAwO1xuXHRoZWlnaHQ6IDA7XG5cdGZvbnQtc2l6ZTogMDtcblx0bGluZS1oZWlnaHQ6IDA7XG5cdGJvcmRlci13aWR0aDogMXB4IDAgMCAwO1xufVxuLnVpLW1lbnUgLnVpLXN0YXRlLWZvY3VzLFxuLnVpLW1lbnUgLnVpLXN0YXRlLWFjdGl2ZSB7XG5cdG1hcmdpbjogLTFweDtcbn1cblxuLyogaWNvbiBzdXBwb3J0ICovXG4udWktbWVudS1pY29ucyB7XG5cdHBvc2l0aW9uOiByZWxhdGl2ZTtcbn1cbi51aS1tZW51LWljb25zIC51aS1tZW51LWl0ZW0ge1xuXHRwYWRkaW5nLWxlZnQ6IDJlbTtcbn1cblxuLyogbGVmdC1hbGlnbmVkICovXG4udWktbWVudSAudWktaWNvbiB7XG5cdHBvc2l0aW9uOiBhYnNvbHV0ZTtcblx0dG9wOiAwO1xuXHRib3R0b206IDA7XG5cdGxlZnQ6IC4yZW07XG5cdG1hcmdpbjogYXV0byAwO1xufVxuXG4vKiByaWdodC1hbGlnbmVkICovXG4udWktbWVudSAudWktbWVudS1pY29uIHtcblx0bGVmdDogYXV0bztcblx0cmlnaHQ6IDA7XG59XG4udWktcHJvZ3Jlc3NiYXIge1xuXHRoZWlnaHQ6IDJlbTtcblx0dGV4dC1hbGlnbjogbGVmdDtcblx0b3ZlcmZsb3c6IGhpZGRlbjtcbn1cbi51aS1wcm9ncmVzc2JhciAudWktcHJvZ3Jlc3NiYXItdmFsdWUge1xuXHRtYXJnaW46IC0xcHg7XG5cdGhlaWdodDogMTAwJTtcbn1cbi51aS1wcm9ncmVzc2JhciAudWktcHJvZ3Jlc3NiYXItb3ZlcmxheSB7XG5cdGJhY2tncm91bmQ6IHVybChcImRhdGE6aW1hZ2UvZ2lmO2Jhc2U2NCxSMGxHT0RsaEtBQW9BSUFCQUFBQUFQLy8veUgvQzA1RlZGTkRRVkJGTWk0d0F3RUFBQUFoK1FRSkFRQUJBQ3dBQUFBQUtBQW9BQUFDa1l3TnFYcmRDNTJEUzA2YTdNRlpJKzRGSEJDS29EZVdLWHF5bVBxR3F4dkpyWFpiTXg3VHRjK3c5WGdVMkZCM2xPeVFSV0VUMklGR2lVOW0xZnJEVnB4WlpjNmJmSHd2NGMxWVhQNmsxVmR5MjkyRmI2VWt1dkZ0WHB2V1N6QStIeWNYSkhVWGlHWUlpTWcyUjZXNDU5Z25XR2ZITmRqSXFEV1ZxZW1IMmVrcE9ia3BPbHBwV1VxWmlxcjZlZHFxV1FBQUlma0VDUUVBQVFBc0FBQUFBQ2dBS0FBQUFwU01nWm5HZmFxY2cxRTJ1dXpEbW1IVUJSOFFpbDk1aGlQS3FXbjNhcXRMc1MxOHk3RzFTek5lb3dXQkVOdFFkK1QxSmt0UDA1bnpQVGRKWmxSNnZVeE5XV2pWK3ZVV2hXTmtXRnd4bDlWcFpSZWRZY2ZsSU9MYWZhYTI4WGRzSC95bmxjYzF1UFZEWnhRSVIwSzI1K2NJQ0Ntb3FDZTVtR2haT2ZlWVNVaDV5SmNKeXJrWldXcGFSOGRvSjJvNE5ZcTYybEFBQUNINUJBa0JBQUVBTEFBQUFBQW9BQ2dBQUFLVkRJNFl5MjJabklOUk5xb3N3MEJ2N2kxZ3lIVWtGajdvU2FXbHUzb3ZDOEd4TnNvNWZsdXozcUxWaEJWZVQvTHo3WlRIeXhMNWREYWxRV1BWT3NRV3RSbnV3WGFGVGo5alZWaDhwbWE5SmpaNHpZU2o1Wk95bWE3dXVvbGZmaCtJUjVhVzk3Y0h1QlVYS0dLWGxLam4rRGlIV01jWUphaDROMGxZQ01sSk9YaXBHUnI1cWRnb1NUcnFXU3E2V0ZsMnlwb2FVQUFBSWZrRUNRRUFBUUFzQUFBQUFDZ0FLQUFBQXBhRWI2SExnZC9pTzdGTld0Y0ZXZSt1Zk9ER2pSZm9pSjJha1NoYnVlYjB3dEk1MHptMDJwYnZ3ZldFTVdCUTF6S0dsTEloc2tpRVBtOVI2dlJYeFY0WnpXVDJ5SE9HcFdNeW9yYmxLbE5wOEhtSEViL2xDWGpjVzdibXRYUDhYdDIyOU9WV1IxZm9kMmVXcU5mSHVNalhDUGtJR05pbGVPaUltVm1DT0Vtb1NmbjN5WGxKV21vSEdocXA2aWxZdVdZcG1UcUtVZ0FBSWZrRUNRRUFBUUFzQUFBQUFDZ0FLQUFBQXBpRUg2a2I1OGJpUTNGTld0TUZXVzNlTlZjb2p1RkdmcW5acVNlYnVTMDZ3NVY4MC9YMDJwS2U4ekZ3UDZFRldPVDFsREZrOHJHRVJoMVRUTk9vY1E2MUhtNFhtMlZleFVIcHpqeW1WaUhyRmJpRUxzZWZWcm42WEtmbnQyUTlHLytYZGllNDk5WEhkMmc0aDdpb09HaFhHSmJvR0FuWFNCbm9Cd0tZeWZpb3ViWkoySG4wUnVSWmFmbFpPaWw1NlpwNmlpb0tTWHBVQUFBaCtRUUpBUUFCQUN3QUFBQUFLQUFvQUFBQ2tvUVJxUnZueHVJN2tVMWExVVU1YmQ1dG5TZU9aWGhtbjVsV0szcU5UV3ZSZFF4UDhxdmFDKy95YVlRelhPN0JNdmFVRW1KUmQzVHNpTUFnc3dtTllyU2daZFlyVFg2dFNIR1pPNzNlenVBdzJ1eHVRK0JiZVpmTXhzZXhZMzUrL1FlNEoxaW5WMGc0eDNXSHVNaElsMmpYT0tUMlErVlU1ZmdvU1VJNTJWZlp5ZmtKR2toYTZqbVkrYWFZZGlycStsUUFBQ0g1QkFrQkFBRUFMQUFBQUFBb0FDZ0FBQUtXQklLcFllMEwzWU5LVG9xc3dVbHZ6bmlnZDR3aVI0S2hackt0OVVwcWlwNjFpOUUzdk12eFJkSGxiRUZpRVhmazlZQVJZeE9aWkQ2VlEycFV1bkJtdFJYbzFMZjhoTVZWY05sOEphZlYzOGFNMi9GdTVWMTZCbjYzcjZ4dDk3ajA5K01YU0ZpNEJuaUdGYWUzaHpiSDkraFlCemtwdVVoNWFabUh1YW5aT1pnSXV2YkdpTmVvbUNuYXh4YXAydXBhQ1pzcSsxa0FBQ0g1QkFrQkFBRUFMQUFBQUFBb0FDZ0FBQUtYakk4Qnk1emY0a094VFZyWE5WbHYxWDBkOElHWkdLTG5OcFl0bThMcjljcVZldU9TdmZPVzc5RDlhREhpek5oREppZEZaaE55ZEVhaE9hREg2bm9tdEpqcDF0dXRLb05Xa3ZBNkpxZlJWTEhVL1FVZmF1OWwyeDdHNTRkMWZsOTk1eGNJR0FkWHFNZkJOYWRvWXJoSCtNZzJLQmxwVnBibHVDaVhtTW5aMlNoNEdCcUorY2tJT3FxSjZMbUtTbGxabXNvcTZ3cFFBQUFoK1FRSkFRQUJBQ3dBQUFBQUtBQW9BQUFDbFl4L29Mdm94dUpEa1UxYTFZVVpiSjU5blNkMlpYaFdxYlJhMi9nRjhHdTJEWTNpcXM3eXJxK3hCWUVrWXZGU004YVNTT2JFK1pnUmwxQkhGWk5yN3BSQ2F2WjVCVzIxNDJoWTNBTi96V3RzbWYxMnA5WHh4RmwybHBMbjFyc2V6dGZYWmpkSVdJZjJzNWRJdHdqWUtCZ285eWc1cEhnekpYVEVlR2xadWVucHlQbXBHUW9LT1drWW1TcGFTbnFLaWxlSTJGQUFBQ0g1QkFrQkFBRUFMQUFBQUFBb0FDZ0FBQUtWakIrZ3Urakc0a09SVFZyVmhSbHNubjJkSjNabGVGYXB0RnJiK0NYbU85T296ZUw1VmZQOTlIdkFXaHBpVWRjd2twQkgzODI1QXdZZFU4eFRxbExHaHRDb3NBcktNcHZmYTFtTVJhZTlWdldaZmVCMlhmUGtlTG1tMThsVWNCaitwNWRuTjhqWFozWUlHRWhZdU9VbjQ1YW9DRGtwMTZobDVJallKdmpXS2Nub0dRcHF5UGxwT2hyM2FFbGFxcnE1NkJxN1ZBQUFPdz09XCIpO1xuXHRoZWlnaHQ6IDEwMCU7XG5cdGZpbHRlcjogYWxwaGEob3BhY2l0eT0yNSk7IC8qIHN1cHBvcnQ6IElFOCAqL1xuXHRvcGFjaXR5OiAwLjI1O1xufVxuLnVpLXByb2dyZXNzYmFyLWluZGV0ZXJtaW5hdGUgLnVpLXByb2dyZXNzYmFyLXZhbHVlIHtcblx0YmFja2dyb3VuZC1pbWFnZTogbm9uZTtcbn1cbi51aS1yZXNpemFibGUge1xuXHRwb3NpdGlvbjogcmVsYXRpdmU7XG59XG4udWktcmVzaXphYmxlLWhhbmRsZSB7XG5cdHBvc2l0aW9uOiBhYnNvbHV0ZTtcblx0Zm9udC1zaXplOiAwLjFweDtcblx0ZGlzcGxheTogYmxvY2s7XG5cdC1tcy10b3VjaC1hY3Rpb246IG5vbmU7XG5cdHRvdWNoLWFjdGlvbjogbm9uZTtcbn1cbi51aS1yZXNpemFibGUtZGlzYWJsZWQgLnVpLXJlc2l6YWJsZS1oYW5kbGUsXG4udWktcmVzaXphYmxlLWF1dG9oaWRlIC51aS1yZXNpemFibGUtaGFuZGxlIHtcblx0ZGlzcGxheTogbm9uZTtcbn1cbi51aS1yZXNpemFibGUtbiB7XG5cdGN1cnNvcjogbi1yZXNpemU7XG5cdGhlaWdodDogN3B4O1xuXHR3aWR0aDogMTAwJTtcblx0dG9wOiAtNXB4O1xuXHRsZWZ0OiAwO1xufVxuLnVpLXJlc2l6YWJsZS1zIHtcblx0Y3Vyc29yOiBzLXJlc2l6ZTtcblx0aGVpZ2h0OiA3cHg7XG5cdHdpZHRoOiAxMDAlO1xuXHRib3R0b206IC01cHg7XG5cdGxlZnQ6IDA7XG59XG4udWktcmVzaXphYmxlLWUge1xuXHRjdXJzb3I6IGUtcmVzaXplO1xuXHR3aWR0aDogN3B4O1xuXHRyaWdodDogLTVweDtcblx0dG9wOiAwO1xuXHRoZWlnaHQ6IDEwMCU7XG59XG4udWktcmVzaXphYmxlLXcge1xuXHRjdXJzb3I6IHctcmVzaXplO1xuXHR3aWR0aDogN3B4O1xuXHRsZWZ0OiAtNXB4O1xuXHR0b3A6IDA7XG5cdGhlaWdodDogMTAwJTtcbn1cbi51aS1yZXNpemFibGUtc2Uge1xuXHRjdXJzb3I6IHNlLXJlc2l6ZTtcblx0d2lkdGg6IDEycHg7XG5cdGhlaWdodDogMTJweDtcblx0cmlnaHQ6IDFweDtcblx0Ym90dG9tOiAxcHg7XG59XG4udWktcmVzaXphYmxlLXN3IHtcblx0Y3Vyc29yOiBzdy1yZXNpemU7XG5cdHdpZHRoOiA5cHg7XG5cdGhlaWdodDogOXB4O1xuXHRsZWZ0OiAtNXB4O1xuXHRib3R0b206IC01cHg7XG59XG4udWktcmVzaXphYmxlLW53IHtcblx0Y3Vyc29yOiBudy1yZXNpemU7XG5cdHdpZHRoOiA5cHg7XG5cdGhlaWdodDogOXB4O1xuXHRsZWZ0OiAtNXB4O1xuXHR0b3A6IC01cHg7XG59XG4udWktcmVzaXphYmxlLW5lIHtcblx0Y3Vyc29yOiBuZS1yZXNpemU7XG5cdHdpZHRoOiA5cHg7XG5cdGhlaWdodDogOXB4O1xuXHRyaWdodDogLTVweDtcblx0dG9wOiAtNXB4O1xufVxuLnVpLXNlbGVjdGFibGUge1xuXHQtbXMtdG91Y2gtYWN0aW9uOiBub25lO1xuXHR0b3VjaC1hY3Rpb246IG5vbmU7XG59XG4udWktc2VsZWN0YWJsZS1oZWxwZXIge1xuXHRwb3NpdGlvbjogYWJzb2x1dGU7XG5cdHotaW5kZXg6IDEwMDtcblx0Ym9yZGVyOiAxcHggZG90dGVkIGJsYWNrO1xufVxuLnVpLXNlbGVjdG1lbnUtbWVudSB7XG5cdHBhZGRpbmc6IDA7XG5cdG1hcmdpbjogMDtcblx0cG9zaXRpb246IGFic29sdXRlO1xuXHR0b3A6IDA7XG5cdGxlZnQ6IDA7XG5cdGRpc3BsYXk6IG5vbmU7XG59XG4udWktc2VsZWN0bWVudS1tZW51IC51aS1tZW51IHtcblx0b3ZlcmZsb3c6IGF1dG87XG5cdC8qIFN1cHBvcnQ6IElFNyAqL1xuXHRvdmVyZmxvdy14OiBoaWRkZW47XG5cdHBhZGRpbmctYm90dG9tOiAxcHg7XG59XG4udWktc2VsZWN0bWVudS1tZW51IC51aS1tZW51IC51aS1zZWxlY3RtZW51LW9wdGdyb3VwIHtcblx0Zm9udC1zaXplOiAxZW07XG5cdGZvbnQtd2VpZ2h0OiBib2xkO1xuXHRsaW5lLWhlaWdodDogMS41O1xuXHRwYWRkaW5nOiAycHggMC40ZW07XG5cdG1hcmdpbjogMC41ZW0gMCAwIDA7XG5cdGhlaWdodDogYXV0bztcblx0Ym9yZGVyOiAwO1xufVxuLnVpLXNlbGVjdG1lbnUtb3BlbiB7XG5cdGRpc3BsYXk6IGJsb2NrO1xufVxuLnVpLXNlbGVjdG1lbnUtYnV0dG9uIHtcblx0ZGlzcGxheTogaW5saW5lLWJsb2NrO1xuXHRvdmVyZmxvdzogaGlkZGVuO1xuXHRwb3NpdGlvbjogcmVsYXRpdmU7XG5cdHRleHQtZGVjb3JhdGlvbjogbm9uZTtcblx0Y3Vyc29yOiBwb2ludGVyO1xufVxuLnVpLXNlbGVjdG1lbnUtYnV0dG9uIHNwYW4udWktaWNvbiB7XG5cdHJpZ2h0OiAwLjVlbTtcblx0bGVmdDogYXV0bztcblx0bWFyZ2luLXRvcDogLThweDtcblx0cG9zaXRpb246IGFic29sdXRlO1xuXHR0b3A6IDUwJTtcbn1cbi51aS1zZWxlY3RtZW51LWJ1dHRvbiBzcGFuLnVpLXNlbGVjdG1lbnUtdGV4dCB7XG5cdHRleHQtYWxpZ246IGxlZnQ7XG5cdHBhZGRpbmc6IDAuNGVtIDIuMWVtIDAuNGVtIDFlbTtcblx0ZGlzcGxheTogYmxvY2s7XG5cdGxpbmUtaGVpZ2h0OiAxLjQ7XG5cdG92ZXJmbG93OiBoaWRkZW47XG5cdHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzO1xuXHR3aGl0ZS1zcGFjZTogbm93cmFwO1xufVxuLnVpLXNsaWRlciB7XG5cdHBvc2l0aW9uOiByZWxhdGl2ZTtcblx0dGV4dC1hbGlnbjogbGVmdDtcbn1cbi51aS1zbGlkZXIgLnVpLXNsaWRlci1oYW5kbGUge1xuXHRwb3NpdGlvbjogYWJzb2x1dGU7XG5cdHotaW5kZXg6IDI7XG5cdHdpZHRoOiAxLjJlbTtcblx0aGVpZ2h0OiAxLjJlbTtcblx0Y3Vyc29yOiBkZWZhdWx0O1xuXHQtbXMtdG91Y2gtYWN0aW9uOiBub25lO1xuXHR0b3VjaC1hY3Rpb246IG5vbmU7XG59XG4udWktc2xpZGVyIC51aS1zbGlkZXItcmFuZ2Uge1xuXHRwb3NpdGlvbjogYWJzb2x1dGU7XG5cdHotaW5kZXg6IDE7XG5cdGZvbnQtc2l6ZTogLjdlbTtcblx0ZGlzcGxheTogYmxvY2s7XG5cdGJvcmRlcjogMDtcblx0YmFja2dyb3VuZC1wb3NpdGlvbjogMCAwO1xufVxuXG4vKiBzdXBwb3J0OiBJRTggLSBTZWUgIzY3MjcgKi9cbi51aS1zbGlkZXIudWktc3RhdGUtZGlzYWJsZWQgLnVpLXNsaWRlci1oYW5kbGUsXG4udWktc2xpZGVyLnVpLXN0YXRlLWRpc2FibGVkIC51aS1zbGlkZXItcmFuZ2Uge1xuXHRmaWx0ZXI6IGluaGVyaXQ7XG59XG5cbi51aS1zbGlkZXItaG9yaXpvbnRhbCB7XG5cdGhlaWdodDogLjhlbTtcbn1cbi51aS1zbGlkZXItaG9yaXpvbnRhbCAudWktc2xpZGVyLWhhbmRsZSB7XG5cdHRvcDogLS4zZW07XG5cdG1hcmdpbi1sZWZ0OiAtLjZlbTtcbn1cbi51aS1zbGlkZXItaG9yaXpvbnRhbCAudWktc2xpZGVyLXJhbmdlIHtcblx0dG9wOiAwO1xuXHRoZWlnaHQ6IDEwMCU7XG59XG4udWktc2xpZGVyLWhvcml6b250YWwgLnVpLXNsaWRlci1yYW5nZS1taW4ge1xuXHRsZWZ0OiAwO1xufVxuLnVpLXNsaWRlci1ob3Jpem9udGFsIC51aS1zbGlkZXItcmFuZ2UtbWF4IHtcblx0cmlnaHQ6IDA7XG59XG5cbi51aS1zbGlkZXItdmVydGljYWwge1xuXHR3aWR0aDogLjhlbTtcblx0aGVpZ2h0OiAxMDBweDtcbn1cbi51aS1zbGlkZXItdmVydGljYWwgLnVpLXNsaWRlci1oYW5kbGUge1xuXHRsZWZ0OiAtLjNlbTtcblx0bWFyZ2luLWxlZnQ6IDA7XG5cdG1hcmdpbi1ib3R0b206IC0uNmVtO1xufVxuLnVpLXNsaWRlci12ZXJ0aWNhbCAudWktc2xpZGVyLXJhbmdlIHtcblx0bGVmdDogMDtcblx0d2lkdGg6IDEwMCU7XG59XG4udWktc2xpZGVyLXZlcnRpY2FsIC51aS1zbGlkZXItcmFuZ2UtbWluIHtcblx0Ym90dG9tOiAwO1xufVxuLnVpLXNsaWRlci12ZXJ0aWNhbCAudWktc2xpZGVyLXJhbmdlLW1heCB7XG5cdHRvcDogMDtcbn1cbi51aS1zb3J0YWJsZS1oYW5kbGUge1xuXHQtbXMtdG91Y2gtYWN0aW9uOiBub25lO1xuXHR0b3VjaC1hY3Rpb246IG5vbmU7XG59XG4udWktc3Bpbm5lciB7XG5cdHBvc2l0aW9uOiByZWxhdGl2ZTtcblx0ZGlzcGxheTogaW5saW5lLWJsb2NrO1xuXHRvdmVyZmxvdzogaGlkZGVuO1xuXHRwYWRkaW5nOiAwO1xuXHR2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xufVxuLnVpLXNwaW5uZXItaW5wdXQge1xuXHRib3JkZXI6IG5vbmU7XG5cdGJhY2tncm91bmQ6IG5vbmU7XG5cdGNvbG9yOiBpbmhlcml0O1xuXHRwYWRkaW5nOiAwO1xuXHRtYXJnaW46IC4yZW0gMDtcblx0dmVydGljYWwtYWxpZ246IG1pZGRsZTtcblx0bWFyZ2luLWxlZnQ6IC40ZW07XG5cdG1hcmdpbi1yaWdodDogMjJweDtcbn1cbi51aS1zcGlubmVyLWJ1dHRvbiB7XG5cdHdpZHRoOiAxNnB4O1xuXHRoZWlnaHQ6IDUwJTtcblx0Zm9udC1zaXplOiAuNWVtO1xuXHRwYWRkaW5nOiAwO1xuXHRtYXJnaW46IDA7XG5cdHRleHQtYWxpZ246IGNlbnRlcjtcblx0cG9zaXRpb246IGFic29sdXRlO1xuXHRjdXJzb3I6IGRlZmF1bHQ7XG5cdGRpc3BsYXk6IGJsb2NrO1xuXHRvdmVyZmxvdzogaGlkZGVuO1xuXHRyaWdodDogMDtcbn1cbi8qIG1vcmUgc3BlY2lmaWNpdHkgcmVxdWlyZWQgaGVyZSB0byBvdmVycmlkZSBkZWZhdWx0IGJvcmRlcnMgKi9cbi51aS1zcGlubmVyIGEudWktc3Bpbm5lci1idXR0b24ge1xuXHRib3JkZXItdG9wOiBub25lO1xuXHRib3JkZXItYm90dG9tOiBub25lO1xuXHRib3JkZXItcmlnaHQ6IG5vbmU7XG59XG4vKiB2ZXJ0aWNhbGx5IGNlbnRlciBpY29uICovXG4udWktc3Bpbm5lciAudWktaWNvbiB7XG5cdHBvc2l0aW9uOiBhYnNvbHV0ZTtcblx0bWFyZ2luLXRvcDogLThweDtcblx0dG9wOiA1MCU7XG5cdGxlZnQ6IDA7XG59XG4udWktc3Bpbm5lci11cCB7XG5cdHRvcDogMDtcbn1cbi51aS1zcGlubmVyLWRvd24ge1xuXHRib3R0b206IDA7XG59XG5cbi8qIFRSIG92ZXJyaWRlcyAqL1xuLnVpLXNwaW5uZXIgLnVpLWljb24tdHJpYW5nbGUtMS1zIHtcblx0LyogbmVlZCB0byBmaXggaWNvbnMgc3ByaXRlICovXG5cdGJhY2tncm91bmQtcG9zaXRpb246IC02NXB4IC0xNnB4O1xufVxuLnVpLXRhYnMge1xuXHRwb3NpdGlvbjogcmVsYXRpdmU7LyogcG9zaXRpb246IHJlbGF0aXZlIHByZXZlbnRzIElFIHNjcm9sbCBidWcgKGVsZW1lbnQgd2l0aCBwb3NpdGlvbjogcmVsYXRpdmUgaW5zaWRlIGNvbnRhaW5lciB3aXRoIG92ZXJmbG93OiBhdXRvIGFwcGVhciBhcyBcImZpeGVkXCIpICovXG5cdHBhZGRpbmc6IC4yZW07XG59XG4udWktdGFicyAudWktdGFicy1uYXYge1xuXHRtYXJnaW46IDA7XG5cdHBhZGRpbmc6IC4yZW0gLjJlbSAwO1xufVxuLnVpLXRhYnMgLnVpLXRhYnMtbmF2IGxpIHtcblx0bGlzdC1zdHlsZTogbm9uZTtcblx0ZmxvYXQ6IGxlZnQ7XG5cdHBvc2l0aW9uOiByZWxhdGl2ZTtcblx0dG9wOiAwO1xuXHRtYXJnaW46IDFweCAuMmVtIDAgMDtcblx0Ym9yZGVyLWJvdHRvbS13aWR0aDogMDtcblx0cGFkZGluZzogMDtcblx0d2hpdGUtc3BhY2U6IG5vd3JhcDtcbn1cbi51aS10YWJzIC51aS10YWJzLW5hdiAudWktdGFicy1hbmNob3Ige1xuXHRmbG9hdDogbGVmdDtcblx0cGFkZGluZzogLjVlbSAxZW07XG5cdHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbn1cbi51aS10YWJzIC51aS10YWJzLW5hdiBsaS51aS10YWJzLWFjdGl2ZSB7XG5cdG1hcmdpbi1ib3R0b206IC0xcHg7XG5cdHBhZGRpbmctYm90dG9tOiAxcHg7XG59XG4udWktdGFicyAudWktdGFicy1uYXYgbGkudWktdGFicy1hY3RpdmUgLnVpLXRhYnMtYW5jaG9yLFxuLnVpLXRhYnMgLnVpLXRhYnMtbmF2IGxpLnVpLXN0YXRlLWRpc2FibGVkIC51aS10YWJzLWFuY2hvcixcbi51aS10YWJzIC51aS10YWJzLW5hdiBsaS51aS10YWJzLWxvYWRpbmcgLnVpLXRhYnMtYW5jaG9yIHtcblx0Y3Vyc29yOiB0ZXh0O1xufVxuLnVpLXRhYnMtY29sbGFwc2libGUgLnVpLXRhYnMtbmF2IGxpLnVpLXRhYnMtYWN0aXZlIC51aS10YWJzLWFuY2hvciB7XG5cdGN1cnNvcjogcG9pbnRlcjtcbn1cbi51aS10YWJzIC51aS10YWJzLXBhbmVsIHtcblx0ZGlzcGxheTogYmxvY2s7XG5cdGJvcmRlci13aWR0aDogMDtcblx0cGFkZGluZzogMWVtIDEuNGVtO1xuXHRiYWNrZ3JvdW5kOiBub25lO1xufVxuLnVpLXRvb2x0aXAge1xuXHRwYWRkaW5nOiA4cHg7XG5cdHBvc2l0aW9uOiBhYnNvbHV0ZTtcblx0ei1pbmRleDogOTk5OTtcblx0bWF4LXdpZHRoOiAzMDBweDtcblx0LXdlYmtpdC1ib3gtc2hhZG93OiAwIDAgNXB4ICNhYWE7XG5cdGJveC1zaGFkb3c6IDAgMCA1cHggI2FhYTtcbn1cbmJvZHkgLnVpLXRvb2x0aXAge1xuXHRib3JkZXItd2lkdGg6IDJweDtcbn1cblxuLyogQ29tcG9uZW50IGNvbnRhaW5lcnNcbi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuLnVpLXdpZGdldCB7XG5cdGZvbnQtZmFtaWx5OiBWZXJkYW5hLEFyaWFsLHNhbnMtc2VyaWY7XG5cdGZvbnQtc2l6ZTogMS4xZW07XG59XG4udWktd2lkZ2V0IC51aS13aWRnZXQge1xuXHRmb250LXNpemU6IDFlbTtcbn1cbi51aS13aWRnZXQgaW5wdXQsXG4udWktd2lkZ2V0IHNlbGVjdCxcbi51aS13aWRnZXQgdGV4dGFyZWEsXG4udWktd2lkZ2V0IGJ1dHRvbiB7XG5cdGZvbnQtZmFtaWx5OiBWZXJkYW5hLEFyaWFsLHNhbnMtc2VyaWY7XG5cdGZvbnQtc2l6ZTogMWVtO1xufVxuLnVpLXdpZGdldC1jb250ZW50IHtcblx0Ym9yZGVyOiAxcHggc29saWQgI2FhYWFhYTtcblx0YmFja2dyb3VuZDogI2ZmZmZmZiB1cmwoXCJpbWFnZXMvdWktYmdfZmxhdF83NV9mZmZmZmZfNDB4MTAwLnBuZ1wiKSA1MCUgNTAlIHJlcGVhdC14O1xuXHRjb2xvcjogIzIyMjIyMjtcbn1cbi51aS13aWRnZXQtY29udGVudCBhIHtcblx0Y29sb3I6ICMyMjIyMjI7XG59XG4udWktd2lkZ2V0LWhlYWRlciB7XG5cdGJvcmRlcjogMXB4IHNvbGlkICNhYWFhYWE7XG5cdGJhY2tncm91bmQ6ICNjY2NjY2MgdXJsKFwiaW1hZ2VzL3VpLWJnX2hpZ2hsaWdodC1zb2Z0Xzc1X2NjY2NjY18xeDEwMC5wbmdcIikgNTAlIDUwJSByZXBlYXQteDtcblx0Y29sb3I6ICMyMjIyMjI7XG5cdGZvbnQtd2VpZ2h0OiBib2xkO1xufVxuLnVpLXdpZGdldC1oZWFkZXIgYSB7XG5cdGNvbG9yOiAjMjIyMjIyO1xufVxuXG4vKiBJbnRlcmFjdGlvbiBzdGF0ZXNcbi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuLnVpLXN0YXRlLWRlZmF1bHQsXG4udWktd2lkZ2V0LWNvbnRlbnQgLnVpLXN0YXRlLWRlZmF1bHQsXG4udWktd2lkZ2V0LWhlYWRlciAudWktc3RhdGUtZGVmYXVsdCB7XG5cdGJvcmRlcjogMXB4IHNvbGlkICNkM2QzZDM7XG5cdGJhY2tncm91bmQ6ICNlNmU2ZTYgdXJsKFwiaW1hZ2VzL3VpLWJnX2dsYXNzXzc1X2U2ZTZlNl8xeDQwMC5wbmdcIikgNTAlIDUwJSByZXBlYXQteDtcblx0Zm9udC13ZWlnaHQ6IG5vcm1hbDtcblx0Y29sb3I6ICM1NTU1NTU7XG59XG4udWktc3RhdGUtZGVmYXVsdCBhLFxuLnVpLXN0YXRlLWRlZmF1bHQgYTpsaW5rLFxuLnVpLXN0YXRlLWRlZmF1bHQgYTp2aXNpdGVkIHtcblx0Y29sb3I6ICM1NTU1NTU7XG5cdHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbn1cbi51aS1zdGF0ZS1ob3Zlcixcbi51aS13aWRnZXQtY29udGVudCAudWktc3RhdGUtaG92ZXIsXG4udWktd2lkZ2V0LWhlYWRlciAudWktc3RhdGUtaG92ZXIsXG4udWktc3RhdGUtZm9jdXMsXG4udWktd2lkZ2V0LWNvbnRlbnQgLnVpLXN0YXRlLWZvY3VzLFxuLnVpLXdpZGdldC1oZWFkZXIgLnVpLXN0YXRlLWZvY3VzIHtcblx0Ym9yZGVyOiAxcHggc29saWQgIzk5OTk5OTtcblx0YmFja2dyb3VuZDogI2RhZGFkYSB1cmwoXCJpbWFnZXMvdWktYmdfZ2xhc3NfNzVfZGFkYWRhXzF4NDAwLnBuZ1wiKSA1MCUgNTAlIHJlcGVhdC14O1xuXHRmb250LXdlaWdodDogbm9ybWFsO1xuXHRjb2xvcjogIzIxMjEyMTtcbn1cbi51aS1zdGF0ZS1ob3ZlciBhLFxuLnVpLXN0YXRlLWhvdmVyIGE6aG92ZXIsXG4udWktc3RhdGUtaG92ZXIgYTpsaW5rLFxuLnVpLXN0YXRlLWhvdmVyIGE6dmlzaXRlZCxcbi51aS1zdGF0ZS1mb2N1cyBhLFxuLnVpLXN0YXRlLWZvY3VzIGE6aG92ZXIsXG4udWktc3RhdGUtZm9jdXMgYTpsaW5rLFxuLnVpLXN0YXRlLWZvY3VzIGE6dmlzaXRlZCB7XG5cdGNvbG9yOiAjMjEyMTIxO1xuXHR0ZXh0LWRlY29yYXRpb246IG5vbmU7XG59XG4udWktc3RhdGUtYWN0aXZlLFxuLnVpLXdpZGdldC1jb250ZW50IC51aS1zdGF0ZS1hY3RpdmUsXG4udWktd2lkZ2V0LWhlYWRlciAudWktc3RhdGUtYWN0aXZlIHtcblx0Ym9yZGVyOiAxcHggc29saWQgI2FhYWFhYTtcblx0YmFja2dyb3VuZDogI2ZmZmZmZiB1cmwoXCJpbWFnZXMvdWktYmdfZ2xhc3NfNjVfZmZmZmZmXzF4NDAwLnBuZ1wiKSA1MCUgNTAlIHJlcGVhdC14O1xuXHRmb250LXdlaWdodDogbm9ybWFsO1xuXHRjb2xvcjogIzIxMjEyMTtcbn1cbi51aS1zdGF0ZS1hY3RpdmUgYSxcbi51aS1zdGF0ZS1hY3RpdmUgYTpsaW5rLFxuLnVpLXN0YXRlLWFjdGl2ZSBhOnZpc2l0ZWQge1xuXHRjb2xvcjogIzIxMjEyMTtcblx0dGV4dC1kZWNvcmF0aW9uOiBub25lO1xufVxuXG4vKiBJbnRlcmFjdGlvbiBDdWVzXG4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cbi51aS1zdGF0ZS1oaWdobGlnaHQsXG4udWktd2lkZ2V0LWNvbnRlbnQgLnVpLXN0YXRlLWhpZ2hsaWdodCxcbi51aS13aWRnZXQtaGVhZGVyIC51aS1zdGF0ZS1oaWdobGlnaHQge1xuXHRib3JkZXI6IDFweCBzb2xpZCAjZmNlZmExO1xuXHRiYWNrZ3JvdW5kOiAjZmJmOWVlIHVybChcImltYWdlcy91aS1iZ19nbGFzc181NV9mYmY5ZWVfMXg0MDAucG5nXCIpIDUwJSA1MCUgcmVwZWF0LXg7XG5cdGNvbG9yOiAjMzYzNjM2O1xufVxuLnVpLXN0YXRlLWhpZ2hsaWdodCBhLFxuLnVpLXdpZGdldC1jb250ZW50IC51aS1zdGF0ZS1oaWdobGlnaHQgYSxcbi51aS13aWRnZXQtaGVhZGVyIC51aS1zdGF0ZS1oaWdobGlnaHQgYSB7XG5cdGNvbG9yOiAjMzYzNjM2O1xufVxuLnVpLXN0YXRlLWVycm9yLFxuLnVpLXdpZGdldC1jb250ZW50IC51aS1zdGF0ZS1lcnJvcixcbi51aS13aWRnZXQtaGVhZGVyIC51aS1zdGF0ZS1lcnJvciB7XG5cdGJvcmRlcjogMXB4IHNvbGlkICNjZDBhMGE7XG5cdGJhY2tncm91bmQ6ICNmZWYxZWMgdXJsKFwiaW1hZ2VzL3VpLWJnX2dsYXNzXzk1X2ZlZjFlY18xeDQwMC5wbmdcIikgNTAlIDUwJSByZXBlYXQteDtcblx0Y29sb3I6ICNjZDBhMGE7XG59XG4udWktc3RhdGUtZXJyb3IgYSxcbi51aS13aWRnZXQtY29udGVudCAudWktc3RhdGUtZXJyb3IgYSxcbi51aS13aWRnZXQtaGVhZGVyIC51aS1zdGF0ZS1lcnJvciBhIHtcblx0Y29sb3I6ICNjZDBhMGE7XG59XG4udWktc3RhdGUtZXJyb3ItdGV4dCxcbi51aS13aWRnZXQtY29udGVudCAudWktc3RhdGUtZXJyb3ItdGV4dCxcbi51aS13aWRnZXQtaGVhZGVyIC51aS1zdGF0ZS1lcnJvci10ZXh0IHtcblx0Y29sb3I6ICNjZDBhMGE7XG59XG4udWktcHJpb3JpdHktcHJpbWFyeSxcbi51aS13aWRnZXQtY29udGVudCAudWktcHJpb3JpdHktcHJpbWFyeSxcbi51aS13aWRnZXQtaGVhZGVyIC51aS1wcmlvcml0eS1wcmltYXJ5IHtcblx0Zm9udC13ZWlnaHQ6IGJvbGQ7XG59XG4udWktcHJpb3JpdHktc2Vjb25kYXJ5LFxuLnVpLXdpZGdldC1jb250ZW50IC51aS1wcmlvcml0eS1zZWNvbmRhcnksXG4udWktd2lkZ2V0LWhlYWRlciAudWktcHJpb3JpdHktc2Vjb25kYXJ5IHtcblx0b3BhY2l0eTogLjc7XG5cdGZpbHRlcjpBbHBoYShPcGFjaXR5PTcwKTsgLyogc3VwcG9ydDogSUU4ICovXG5cdGZvbnQtd2VpZ2h0OiBub3JtYWw7XG59XG4udWktc3RhdGUtZGlzYWJsZWQsXG4udWktd2lkZ2V0LWNvbnRlbnQgLnVpLXN0YXRlLWRpc2FibGVkLFxuLnVpLXdpZGdldC1oZWFkZXIgLnVpLXN0YXRlLWRpc2FibGVkIHtcblx0b3BhY2l0eTogLjM1O1xuXHRmaWx0ZXI6QWxwaGEoT3BhY2l0eT0zNSk7IC8qIHN1cHBvcnQ6IElFOCAqL1xuXHRiYWNrZ3JvdW5kLWltYWdlOiBub25lO1xufVxuLnVpLXN0YXRlLWRpc2FibGVkIC51aS1pY29uIHtcblx0ZmlsdGVyOkFscGhhKE9wYWNpdHk9MzUpOyAvKiBzdXBwb3J0OiBJRTggLSBTZWUgIzYwNTkgKi9cbn1cblxuLyogSWNvbnNcbi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG4vKiBzdGF0ZXMgYW5kIGltYWdlcyAqL1xuLnVpLWljb24ge1xuXHR3aWR0aDogMTZweDtcblx0aGVpZ2h0OiAxNnB4O1xufVxuLnVpLWljb24sXG4udWktd2lkZ2V0LWNvbnRlbnQgLnVpLWljb24ge1xuXHRiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXCJpbWFnZXMvdWktaWNvbnNfMjIyMjIyXzI1NngyNDAucG5nXCIpO1xufVxuLnVpLXdpZGdldC1oZWFkZXIgLnVpLWljb24ge1xuXHRiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXCJpbWFnZXMvdWktaWNvbnNfMjIyMjIyXzI1NngyNDAucG5nXCIpO1xufVxuLnVpLXN0YXRlLWRlZmF1bHQgLnVpLWljb24ge1xuXHRiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXCJpbWFnZXMvdWktaWNvbnNfODg4ODg4XzI1NngyNDAucG5nXCIpO1xufVxuLnVpLXN0YXRlLWhvdmVyIC51aS1pY29uLFxuLnVpLXN0YXRlLWZvY3VzIC51aS1pY29uIHtcblx0YmFja2dyb3VuZC1pbWFnZTogdXJsKFwiaW1hZ2VzL3VpLWljb25zXzQ1NDU0NV8yNTZ4MjQwLnBuZ1wiKTtcbn1cbi51aS1zdGF0ZS1hY3RpdmUgLnVpLWljb24ge1xuXHRiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXCJpbWFnZXMvdWktaWNvbnNfNDU0NTQ1XzI1NngyNDAucG5nXCIpO1xufVxuLnVpLXN0YXRlLWhpZ2hsaWdodCAudWktaWNvbiB7XG5cdGJhY2tncm91bmQtaW1hZ2U6IHVybChcImltYWdlcy91aS1pY29uc18yZTgzZmZfMjU2eDI0MC5wbmdcIik7XG59XG4udWktc3RhdGUtZXJyb3IgLnVpLWljb24sXG4udWktc3RhdGUtZXJyb3ItdGV4dCAudWktaWNvbiB7XG5cdGJhY2tncm91bmQtaW1hZ2U6IHVybChcImltYWdlcy91aS1pY29uc19jZDBhMGFfMjU2eDI0MC5wbmdcIik7XG59XG5cbi8qIHBvc2l0aW9uaW5nICovXG4udWktaWNvbi1ibGFuayB7IGJhY2tncm91bmQtcG9zaXRpb246IDE2cHggMTZweDsgfVxuLnVpLWljb24tY2FyYXQtMS1uIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogMCAwOyB9XG4udWktaWNvbi1jYXJhdC0xLW5lIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTE2cHggMDsgfVxuLnVpLWljb24tY2FyYXQtMS1lIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTMycHggMDsgfVxuLnVpLWljb24tY2FyYXQtMS1zZSB7IGJhY2tncm91bmQtcG9zaXRpb246IC00OHB4IDA7IH1cbi51aS1pY29uLWNhcmF0LTEtcyB7IGJhY2tncm91bmQtcG9zaXRpb246IC02NHB4IDA7IH1cbi51aS1pY29uLWNhcmF0LTEtc3cgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtODBweCAwOyB9XG4udWktaWNvbi1jYXJhdC0xLXcgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtOTZweCAwOyB9XG4udWktaWNvbi1jYXJhdC0xLW53IHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTExMnB4IDA7IH1cbi51aS1pY29uLWNhcmF0LTItbi1zIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTEyOHB4IDA7IH1cbi51aS1pY29uLWNhcmF0LTItZS13IHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTE0NHB4IDA7IH1cbi51aS1pY29uLXRyaWFuZ2xlLTEtbiB7IGJhY2tncm91bmQtcG9zaXRpb246IDAgLTE2cHg7IH1cbi51aS1pY29uLXRyaWFuZ2xlLTEtbmUgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTZweCAtMTZweDsgfVxuLnVpLWljb24tdHJpYW5nbGUtMS1lIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTMycHggLTE2cHg7IH1cbi51aS1pY29uLXRyaWFuZ2xlLTEtc2UgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtNDhweCAtMTZweDsgfVxuLnVpLWljb24tdHJpYW5nbGUtMS1zIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTY0cHggLTE2cHg7IH1cbi51aS1pY29uLXRyaWFuZ2xlLTEtc3cgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtODBweCAtMTZweDsgfVxuLnVpLWljb24tdHJpYW5nbGUtMS13IHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTk2cHggLTE2cHg7IH1cbi51aS1pY29uLXRyaWFuZ2xlLTEtbncgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTEycHggLTE2cHg7IH1cbi51aS1pY29uLXRyaWFuZ2xlLTItbi1zIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTEyOHB4IC0xNnB4OyB9XG4udWktaWNvbi10cmlhbmdsZS0yLWUtdyB7IGJhY2tncm91bmQtcG9zaXRpb246IC0xNDRweCAtMTZweDsgfVxuLnVpLWljb24tYXJyb3ctMS1uIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogMCAtMzJweDsgfVxuLnVpLWljb24tYXJyb3ctMS1uZSB7IGJhY2tncm91bmQtcG9zaXRpb246IC0xNnB4IC0zMnB4OyB9XG4udWktaWNvbi1hcnJvdy0xLWUgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMzJweCAtMzJweDsgfVxuLnVpLWljb24tYXJyb3ctMS1zZSB7IGJhY2tncm91bmQtcG9zaXRpb246IC00OHB4IC0zMnB4OyB9XG4udWktaWNvbi1hcnJvdy0xLXMgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtNjRweCAtMzJweDsgfVxuLnVpLWljb24tYXJyb3ctMS1zdyB7IGJhY2tncm91bmQtcG9zaXRpb246IC04MHB4IC0zMnB4OyB9XG4udWktaWNvbi1hcnJvdy0xLXcgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtOTZweCAtMzJweDsgfVxuLnVpLWljb24tYXJyb3ctMS1udyB7IGJhY2tncm91bmQtcG9zaXRpb246IC0xMTJweCAtMzJweDsgfVxuLnVpLWljb24tYXJyb3ctMi1uLXMgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTI4cHggLTMycHg7IH1cbi51aS1pY29uLWFycm93LTItbmUtc3cgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTQ0cHggLTMycHg7IH1cbi51aS1pY29uLWFycm93LTItZS13IHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTE2MHB4IC0zMnB4OyB9XG4udWktaWNvbi1hcnJvdy0yLXNlLW53IHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTE3NnB4IC0zMnB4OyB9XG4udWktaWNvbi1hcnJvd3N0b3AtMS1uIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTE5MnB4IC0zMnB4OyB9XG4udWktaWNvbi1hcnJvd3N0b3AtMS1lIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTIwOHB4IC0zMnB4OyB9XG4udWktaWNvbi1hcnJvd3N0b3AtMS1zIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTIyNHB4IC0zMnB4OyB9XG4udWktaWNvbi1hcnJvd3N0b3AtMS13IHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTI0MHB4IC0zMnB4OyB9XG4udWktaWNvbi1hcnJvd3RoaWNrLTEtbiB7IGJhY2tncm91bmQtcG9zaXRpb246IDAgLTQ4cHg7IH1cbi51aS1pY29uLWFycm93dGhpY2stMS1uZSB7IGJhY2tncm91bmQtcG9zaXRpb246IC0xNnB4IC00OHB4OyB9XG4udWktaWNvbi1hcnJvd3RoaWNrLTEtZSB7IGJhY2tncm91bmQtcG9zaXRpb246IC0zMnB4IC00OHB4OyB9XG4udWktaWNvbi1hcnJvd3RoaWNrLTEtc2UgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtNDhweCAtNDhweDsgfVxuLnVpLWljb24tYXJyb3d0aGljay0xLXMgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtNjRweCAtNDhweDsgfVxuLnVpLWljb24tYXJyb3d0aGljay0xLXN3IHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTgwcHggLTQ4cHg7IH1cbi51aS1pY29uLWFycm93dGhpY2stMS13IHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTk2cHggLTQ4cHg7IH1cbi51aS1pY29uLWFycm93dGhpY2stMS1udyB7IGJhY2tncm91bmQtcG9zaXRpb246IC0xMTJweCAtNDhweDsgfVxuLnVpLWljb24tYXJyb3d0aGljay0yLW4tcyB7IGJhY2tncm91bmQtcG9zaXRpb246IC0xMjhweCAtNDhweDsgfVxuLnVpLWljb24tYXJyb3d0aGljay0yLW5lLXN3IHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTE0NHB4IC00OHB4OyB9XG4udWktaWNvbi1hcnJvd3RoaWNrLTItZS13IHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTE2MHB4IC00OHB4OyB9XG4udWktaWNvbi1hcnJvd3RoaWNrLTItc2UtbncgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTc2cHggLTQ4cHg7IH1cbi51aS1pY29uLWFycm93dGhpY2tzdG9wLTEtbiB7IGJhY2tncm91bmQtcG9zaXRpb246IC0xOTJweCAtNDhweDsgfVxuLnVpLWljb24tYXJyb3d0aGlja3N0b3AtMS1lIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTIwOHB4IC00OHB4OyB9XG4udWktaWNvbi1hcnJvd3RoaWNrc3RvcC0xLXMgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMjI0cHggLTQ4cHg7IH1cbi51aS1pY29uLWFycm93dGhpY2tzdG9wLTEtdyB7IGJhY2tncm91bmQtcG9zaXRpb246IC0yNDBweCAtNDhweDsgfVxuLnVpLWljb24tYXJyb3dyZXR1cm50aGljay0xLXcgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAwIC02NHB4OyB9XG4udWktaWNvbi1hcnJvd3JldHVybnRoaWNrLTEtbiB7IGJhY2tncm91bmQtcG9zaXRpb246IC0xNnB4IC02NHB4OyB9XG4udWktaWNvbi1hcnJvd3JldHVybnRoaWNrLTEtZSB7IGJhY2tncm91bmQtcG9zaXRpb246IC0zMnB4IC02NHB4OyB9XG4udWktaWNvbi1hcnJvd3JldHVybnRoaWNrLTEtcyB7IGJhY2tncm91bmQtcG9zaXRpb246IC00OHB4IC02NHB4OyB9XG4udWktaWNvbi1hcnJvd3JldHVybi0xLXcgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtNjRweCAtNjRweDsgfVxuLnVpLWljb24tYXJyb3dyZXR1cm4tMS1uIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTgwcHggLTY0cHg7IH1cbi51aS1pY29uLWFycm93cmV0dXJuLTEtZSB7IGJhY2tncm91bmQtcG9zaXRpb246IC05NnB4IC02NHB4OyB9XG4udWktaWNvbi1hcnJvd3JldHVybi0xLXMgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTEycHggLTY0cHg7IH1cbi51aS1pY29uLWFycm93cmVmcmVzaC0xLXcgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTI4cHggLTY0cHg7IH1cbi51aS1pY29uLWFycm93cmVmcmVzaC0xLW4geyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTQ0cHggLTY0cHg7IH1cbi51aS1pY29uLWFycm93cmVmcmVzaC0xLWUgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTYwcHggLTY0cHg7IH1cbi51aS1pY29uLWFycm93cmVmcmVzaC0xLXMgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTc2cHggLTY0cHg7IH1cbi51aS1pY29uLWFycm93LTQgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAwIC04MHB4OyB9XG4udWktaWNvbi1hcnJvdy00LWRpYWcgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTZweCAtODBweDsgfVxuLnVpLWljb24tZXh0bGluayB7IGJhY2tncm91bmQtcG9zaXRpb246IC0zMnB4IC04MHB4OyB9XG4udWktaWNvbi1uZXd3aW4geyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtNDhweCAtODBweDsgfVxuLnVpLWljb24tcmVmcmVzaCB7IGJhY2tncm91bmQtcG9zaXRpb246IC02NHB4IC04MHB4OyB9XG4udWktaWNvbi1zaHVmZmxlIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTgwcHggLTgwcHg7IH1cbi51aS1pY29uLXRyYW5zZmVyLWUtdyB7IGJhY2tncm91bmQtcG9zaXRpb246IC05NnB4IC04MHB4OyB9XG4udWktaWNvbi10cmFuc2ZlcnRoaWNrLWUtdyB7IGJhY2tncm91bmQtcG9zaXRpb246IC0xMTJweCAtODBweDsgfVxuLnVpLWljb24tZm9sZGVyLWNvbGxhcHNlZCB7IGJhY2tncm91bmQtcG9zaXRpb246IDAgLTk2cHg7IH1cbi51aS1pY29uLWZvbGRlci1vcGVuIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTE2cHggLTk2cHg7IH1cbi51aS1pY29uLWRvY3VtZW50IHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTMycHggLTk2cHg7IH1cbi51aS1pY29uLWRvY3VtZW50LWIgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtNDhweCAtOTZweDsgfVxuLnVpLWljb24tbm90ZSB7IGJhY2tncm91bmQtcG9zaXRpb246IC02NHB4IC05NnB4OyB9XG4udWktaWNvbi1tYWlsLWNsb3NlZCB7IGJhY2tncm91bmQtcG9zaXRpb246IC04MHB4IC05NnB4OyB9XG4udWktaWNvbi1tYWlsLW9wZW4geyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtOTZweCAtOTZweDsgfVxuLnVpLWljb24tc3VpdGNhc2UgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTEycHggLTk2cHg7IH1cbi51aS1pY29uLWNvbW1lbnQgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTI4cHggLTk2cHg7IH1cbi51aS1pY29uLXBlcnNvbiB7IGJhY2tncm91bmQtcG9zaXRpb246IC0xNDRweCAtOTZweDsgfVxuLnVpLWljb24tcHJpbnQgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTYwcHggLTk2cHg7IH1cbi51aS1pY29uLXRyYXNoIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTE3NnB4IC05NnB4OyB9XG4udWktaWNvbi1sb2NrZWQgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTkycHggLTk2cHg7IH1cbi51aS1pY29uLXVubG9ja2VkIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTIwOHB4IC05NnB4OyB9XG4udWktaWNvbi1ib29rbWFyayB7IGJhY2tncm91bmQtcG9zaXRpb246IC0yMjRweCAtOTZweDsgfVxuLnVpLWljb24tdGFnIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTI0MHB4IC05NnB4OyB9XG4udWktaWNvbi1ob21lIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogMCAtMTEycHg7IH1cbi51aS1pY29uLWZsYWcgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTZweCAtMTEycHg7IH1cbi51aS1pY29uLWNhbGVuZGFyIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTMycHggLTExMnB4OyB9XG4udWktaWNvbi1jYXJ0IHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTQ4cHggLTExMnB4OyB9XG4udWktaWNvbi1wZW5jaWwgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtNjRweCAtMTEycHg7IH1cbi51aS1pY29uLWNsb2NrIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTgwcHggLTExMnB4OyB9XG4udWktaWNvbi1kaXNrIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTk2cHggLTExMnB4OyB9XG4udWktaWNvbi1jYWxjdWxhdG9yIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTExMnB4IC0xMTJweDsgfVxuLnVpLWljb24tem9vbWluIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTEyOHB4IC0xMTJweDsgfVxuLnVpLWljb24tem9vbW91dCB7IGJhY2tncm91bmQtcG9zaXRpb246IC0xNDRweCAtMTEycHg7IH1cbi51aS1pY29uLXNlYXJjaCB7IGJhY2tncm91bmQtcG9zaXRpb246IC0xNjBweCAtMTEycHg7IH1cbi51aS1pY29uLXdyZW5jaCB7IGJhY2tncm91bmQtcG9zaXRpb246IC0xNzZweCAtMTEycHg7IH1cbi51aS1pY29uLWdlYXIgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTkycHggLTExMnB4OyB9XG4udWktaWNvbi1oZWFydCB7IGJhY2tncm91bmQtcG9zaXRpb246IC0yMDhweCAtMTEycHg7IH1cbi51aS1pY29uLXN0YXIgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMjI0cHggLTExMnB4OyB9XG4udWktaWNvbi1saW5rIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTI0MHB4IC0xMTJweDsgfVxuLnVpLWljb24tY2FuY2VsIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogMCAtMTI4cHg7IH1cbi51aS1pY29uLXBsdXMgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTZweCAtMTI4cHg7IH1cbi51aS1pY29uLXBsdXN0aGljayB7IGJhY2tncm91bmQtcG9zaXRpb246IC0zMnB4IC0xMjhweDsgfVxuLnVpLWljb24tbWludXMgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtNDhweCAtMTI4cHg7IH1cbi51aS1pY29uLW1pbnVzdGhpY2sgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtNjRweCAtMTI4cHg7IH1cbi51aS1pY29uLWNsb3NlIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTgwcHggLTEyOHB4OyB9XG4udWktaWNvbi1jbG9zZXRoaWNrIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTk2cHggLTEyOHB4OyB9XG4udWktaWNvbi1rZXkgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTEycHggLTEyOHB4OyB9XG4udWktaWNvbi1saWdodGJ1bGIgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTI4cHggLTEyOHB4OyB9XG4udWktaWNvbi1zY2lzc29ycyB7IGJhY2tncm91bmQtcG9zaXRpb246IC0xNDRweCAtMTI4cHg7IH1cbi51aS1pY29uLWNsaXBib2FyZCB7IGJhY2tncm91bmQtcG9zaXRpb246IC0xNjBweCAtMTI4cHg7IH1cbi51aS1pY29uLWNvcHkgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTc2cHggLTEyOHB4OyB9XG4udWktaWNvbi1jb250YWN0IHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTE5MnB4IC0xMjhweDsgfVxuLnVpLWljb24taW1hZ2UgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMjA4cHggLTEyOHB4OyB9XG4udWktaWNvbi12aWRlbyB7IGJhY2tncm91bmQtcG9zaXRpb246IC0yMjRweCAtMTI4cHg7IH1cbi51aS1pY29uLXNjcmlwdCB7IGJhY2tncm91bmQtcG9zaXRpb246IC0yNDBweCAtMTI4cHg7IH1cbi51aS1pY29uLWFsZXJ0IHsgYmFja2dyb3VuZC1wb3NpdGlvbjogMCAtMTQ0cHg7IH1cbi51aS1pY29uLWluZm8geyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTZweCAtMTQ0cHg7IH1cbi51aS1pY29uLW5vdGljZSB7IGJhY2tncm91bmQtcG9zaXRpb246IC0zMnB4IC0xNDRweDsgfVxuLnVpLWljb24taGVscCB7IGJhY2tncm91bmQtcG9zaXRpb246IC00OHB4IC0xNDRweDsgfVxuLnVpLWljb24tY2hlY2sgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtNjRweCAtMTQ0cHg7IH1cbi51aS1pY29uLWJ1bGxldCB7IGJhY2tncm91bmQtcG9zaXRpb246IC04MHB4IC0xNDRweDsgfVxuLnVpLWljb24tcmFkaW8tb24geyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtOTZweCAtMTQ0cHg7IH1cbi51aS1pY29uLXJhZGlvLW9mZiB7IGJhY2tncm91bmQtcG9zaXRpb246IC0xMTJweCAtMTQ0cHg7IH1cbi51aS1pY29uLXBpbi13IHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTEyOHB4IC0xNDRweDsgfVxuLnVpLWljb24tcGluLXMgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTQ0cHggLTE0NHB4OyB9XG4udWktaWNvbi1wbGF5IHsgYmFja2dyb3VuZC1wb3NpdGlvbjogMCAtMTYwcHg7IH1cbi51aS1pY29uLXBhdXNlIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTE2cHggLTE2MHB4OyB9XG4udWktaWNvbi1zZWVrLW5leHQgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMzJweCAtMTYwcHg7IH1cbi51aS1pY29uLXNlZWstcHJldiB7IGJhY2tncm91bmQtcG9zaXRpb246IC00OHB4IC0xNjBweDsgfVxuLnVpLWljb24tc2Vlay1lbmQgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtNjRweCAtMTYwcHg7IH1cbi51aS1pY29uLXNlZWstc3RhcnQgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtODBweCAtMTYwcHg7IH1cbi8qIHVpLWljb24tc2Vlay1maXJzdCBpcyBkZXByZWNhdGVkLCB1c2UgdWktaWNvbi1zZWVrLXN0YXJ0IGluc3RlYWQgKi9cbi51aS1pY29uLXNlZWstZmlyc3QgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtODBweCAtMTYwcHg7IH1cbi51aS1pY29uLXN0b3AgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtOTZweCAtMTYwcHg7IH1cbi51aS1pY29uLWVqZWN0IHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTExMnB4IC0xNjBweDsgfVxuLnVpLWljb24tdm9sdW1lLW9mZiB7IGJhY2tncm91bmQtcG9zaXRpb246IC0xMjhweCAtMTYwcHg7IH1cbi51aS1pY29uLXZvbHVtZS1vbiB7IGJhY2tncm91bmQtcG9zaXRpb246IC0xNDRweCAtMTYwcHg7IH1cbi51aS1pY29uLXBvd2VyIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogMCAtMTc2cHg7IH1cbi51aS1pY29uLXNpZ25hbC1kaWFnIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTE2cHggLTE3NnB4OyB9XG4udWktaWNvbi1zaWduYWwgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMzJweCAtMTc2cHg7IH1cbi51aS1pY29uLWJhdHRlcnktMCB7IGJhY2tncm91bmQtcG9zaXRpb246IC00OHB4IC0xNzZweDsgfVxuLnVpLWljb24tYmF0dGVyeS0xIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTY0cHggLTE3NnB4OyB9XG4udWktaWNvbi1iYXR0ZXJ5LTIgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtODBweCAtMTc2cHg7IH1cbi51aS1pY29uLWJhdHRlcnktMyB7IGJhY2tncm91bmQtcG9zaXRpb246IC05NnB4IC0xNzZweDsgfVxuLnVpLWljb24tY2lyY2xlLXBsdXMgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAwIC0xOTJweDsgfVxuLnVpLWljb24tY2lyY2xlLW1pbnVzIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTE2cHggLTE5MnB4OyB9XG4udWktaWNvbi1jaXJjbGUtY2xvc2UgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMzJweCAtMTkycHg7IH1cbi51aS1pY29uLWNpcmNsZS10cmlhbmdsZS1lIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTQ4cHggLTE5MnB4OyB9XG4udWktaWNvbi1jaXJjbGUtdHJpYW5nbGUtcyB7IGJhY2tncm91bmQtcG9zaXRpb246IC02NHB4IC0xOTJweDsgfVxuLnVpLWljb24tY2lyY2xlLXRyaWFuZ2xlLXcgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtODBweCAtMTkycHg7IH1cbi51aS1pY29uLWNpcmNsZS10cmlhbmdsZS1uIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTk2cHggLTE5MnB4OyB9XG4udWktaWNvbi1jaXJjbGUtYXJyb3ctZSB7IGJhY2tncm91bmQtcG9zaXRpb246IC0xMTJweCAtMTkycHg7IH1cbi51aS1pY29uLWNpcmNsZS1hcnJvdy1zIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTEyOHB4IC0xOTJweDsgfVxuLnVpLWljb24tY2lyY2xlLWFycm93LXcgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTQ0cHggLTE5MnB4OyB9XG4udWktaWNvbi1jaXJjbGUtYXJyb3ctbiB7IGJhY2tncm91bmQtcG9zaXRpb246IC0xNjBweCAtMTkycHg7IH1cbi51aS1pY29uLWNpcmNsZS16b29taW4geyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTc2cHggLTE5MnB4OyB9XG4udWktaWNvbi1jaXJjbGUtem9vbW91dCB7IGJhY2tncm91bmQtcG9zaXRpb246IC0xOTJweCAtMTkycHg7IH1cbi51aS1pY29uLWNpcmNsZS1jaGVjayB7IGJhY2tncm91bmQtcG9zaXRpb246IC0yMDhweCAtMTkycHg7IH1cbi51aS1pY29uLWNpcmNsZXNtYWxsLXBsdXMgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAwIC0yMDhweDsgfVxuLnVpLWljb24tY2lyY2xlc21hbGwtbWludXMgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTZweCAtMjA4cHg7IH1cbi51aS1pY29uLWNpcmNsZXNtYWxsLWNsb3NlIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTMycHggLTIwOHB4OyB9XG4udWktaWNvbi1zcXVhcmVzbWFsbC1wbHVzIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTQ4cHggLTIwOHB4OyB9XG4udWktaWNvbi1zcXVhcmVzbWFsbC1taW51cyB7IGJhY2tncm91bmQtcG9zaXRpb246IC02NHB4IC0yMDhweDsgfVxuLnVpLWljb24tc3F1YXJlc21hbGwtY2xvc2UgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtODBweCAtMjA4cHg7IH1cbi51aS1pY29uLWdyaXAtZG90dGVkLXZlcnRpY2FsIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogMCAtMjI0cHg7IH1cbi51aS1pY29uLWdyaXAtZG90dGVkLWhvcml6b250YWwgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTZweCAtMjI0cHg7IH1cbi51aS1pY29uLWdyaXAtc29saWQtdmVydGljYWwgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMzJweCAtMjI0cHg7IH1cbi51aS1pY29uLWdyaXAtc29saWQtaG9yaXpvbnRhbCB7IGJhY2tncm91bmQtcG9zaXRpb246IC00OHB4IC0yMjRweDsgfVxuLnVpLWljb24tZ3JpcHNtYWxsLWRpYWdvbmFsLXNlIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTY0cHggLTIyNHB4OyB9XG4udWktaWNvbi1ncmlwLWRpYWdvbmFsLXNlIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTgwcHggLTIyNHB4OyB9XG5cblxuLyogTWlzYyB2aXN1YWxzXG4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cblxuLyogQ29ybmVyIHJhZGl1cyAqL1xuLnVpLWNvcm5lci1hbGwsXG4udWktY29ybmVyLXRvcCxcbi51aS1jb3JuZXItbGVmdCxcbi51aS1jb3JuZXItdGwge1xuXHRib3JkZXItdG9wLWxlZnQtcmFkaXVzOiA0cHg7XG59XG4udWktY29ybmVyLWFsbCxcbi51aS1jb3JuZXItdG9wLFxuLnVpLWNvcm5lci1yaWdodCxcbi51aS1jb3JuZXItdHIge1xuXHRib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogNHB4O1xufVxuLnVpLWNvcm5lci1hbGwsXG4udWktY29ybmVyLWJvdHRvbSxcbi51aS1jb3JuZXItbGVmdCxcbi51aS1jb3JuZXItYmwge1xuXHRib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOiA0cHg7XG59XG4udWktY29ybmVyLWFsbCxcbi51aS1jb3JuZXItYm90dG9tLFxuLnVpLWNvcm5lci1yaWdodCxcbi51aS1jb3JuZXItYnIge1xuXHRib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czogNHB4O1xufVxuXG4vKiBPdmVybGF5cyAqL1xuLnVpLXdpZGdldC1vdmVybGF5IHtcblx0YmFja2dyb3VuZDogI2FhYWFhYSB1cmwoXCJpbWFnZXMvdWktYmdfZmxhdF8wX2FhYWFhYV80MHgxMDAucG5nXCIpIDUwJSA1MCUgcmVwZWF0LXg7XG5cdG9wYWNpdHk6IC4zO1xuXHRmaWx0ZXI6IEFscGhhKE9wYWNpdHk9MzApOyAvKiBzdXBwb3J0OiBJRTggKi9cbn1cbi51aS13aWRnZXQtc2hhZG93IHtcblx0bWFyZ2luOiAtOHB4IDAgMCAtOHB4O1xuXHRwYWRkaW5nOiA4cHg7XG5cdGJhY2tncm91bmQ6ICNhYWFhYWEgdXJsKFwiaW1hZ2VzL3VpLWJnX2ZsYXRfMF9hYWFhYWFfNDB4MTAwLnBuZ1wiKSA1MCUgNTAlIHJlcGVhdC14O1xuXHRvcGFjaXR5OiAuMztcblx0ZmlsdGVyOiBBbHBoYShPcGFjaXR5PTMwKTsgLyogc3VwcG9ydDogSUU4ICovXG5cdGJvcmRlci1yYWRpdXM6IDhweDtcbn1cbiJ9LCAiaGVhZGVyc1NpemUiOiAwLCAiYm9keVNpemUiOiA4MzYzLCAicmVkaXJlY3RVUkwiOiAiIiwgIl90cmFuc2ZlclNpemUiOiA4MzYzfSwgImNhY2hlIjoge30sICJ0aW1pbmdzIjogeyJkbnMiOiAyNS40NDUsICJjb25uZWN0IjogMTcuMjk1LCAic3NsIjogMTIuMjE5LCAic2VuZCI6IDAsICJ3YWl0IjogNS44OTksICJyZWNlaXZlIjogNy41NTh9LCAicGFnZXJlZiI6ICJwYWdlQDhjOTMyZjgzMzdkOWFiYjRiOWFiOTg4OWRlYzUxYjk5IiwgInNlcnZlcklQQWRkcmVzcyI6ICJbMmEwNDo0ZTQyOjIwMDo6NjQ5XSIsICJfc2VydmVyUG9ydCI6IDQ0MywgIl9zZWN1cml0eURldGFpbHMiOiB7InByb3RvY29sIjogIlRMUyAxLjMiLCAic3ViamVjdE5hbWUiOiAiKi5qcXVlcnkuY29tIiwgImlzc3VlciI6ICJTZWN0aWdvIEVDQyBEb21haW4gVmFsaWRhdGlvbiBTZWN1cmUgU2VydmVyIENBIiwgInZhbGlkRnJvbSI6IDE3MTkyNzM2MDAsICJ2YWxpZFRvIjogMTc1MDg5NTk5OX19LCB7InN0YXJ0ZWREYXRlVGltZSI6ICIyMDI0LTA5LTA1VDExOjA3OjIwLjI5MFoiLCAidGltZSI6IDYwMC41MTEsICJyZXF1ZXN0IjogeyJtZXRob2QiOiAiR0VUIiwgInVybCI6ICJodHRwczovL3BvcnRhbC5zdXBwbHljaGFpbmNhbmFkYS5jb20vY29tbW9uL2Jvb3RzdHJhcC9jc3MvYm9vdHN0cmFwLmNzcyIsICJodHRwVmVyc2lvbiI6ICJIVFRQLzIuMCIsICJjb29raWVzIjogW3sibmFtZSI6ICJKU0VTU0lPTklEIiwgInZhbHVlIjogIjI1N0Q5REM5MjA0NTJBNEQ5MzNCOEEzQ0RBOUI2QkQzIn1dLCAiaGVhZGVycyI6IFt7Im5hbWUiOiAiOmF1dGhvcml0eSIsICJ2YWx1ZSI6ICJwb3J0YWwuc3VwcGx5Y2hhaW5jYW5hZGEuY29tIn0sIHsibmFtZSI6ICI6bWV0aG9kIiwgInZhbHVlIjogIkdFVCJ9LCB7Im5hbWUiOiAiOnBhdGgiLCAidmFsdWUiOiAiL2NvbW1vbi9ib290c3RyYXAvY3NzL2Jvb3RzdHJhcC5jc3MifSwgeyJuYW1lIjogIjpzY2hlbWUiLCAidmFsdWUiOiAiaHR0cHMifSwgeyJuYW1lIjogImFjY2VwdCIsICJ2YWx1ZSI6ICJ0ZXh0L2NzcywqLyo7cT0wLjEifSwgeyJuYW1lIjogImFjY2VwdC1lbmNvZGluZyIsICJ2YWx1ZSI6ICJnemlwLCBkZWZsYXRlLCBiciwgenN0ZCJ9LCB7Im5hbWUiOiAiYWNjZXB0LWxhbmd1YWdlIiwgInZhbHVlIjogImVuLVVTIn0sIHsibmFtZSI6ICJjb29raWUiLCAidmFsdWUiOiAiSlNFU1NJT05JRD0yNTdEOURDOTIwNDUyQTREOTMzQjhBM0NEQTlCNkJEMyJ9LCB7Im5hbWUiOiAicHJpb3JpdHkiLCAidmFsdWUiOiAidT0wIn0sIHsibmFtZSI6ICJyZWZlcmVyIiwgInZhbHVlIjogImh0dHBzOi8vcG9ydGFsLnN1cHBseWNoYWluY2FuYWRhLmNvbS9lbi9wb3J0YWxsb2dpbiJ9LCB7Im5hbWUiOiAic2VjLWNoLXVhIiwgInZhbHVlIjogIlwiTm90O0E9QnJhbmRcIjt2PVwiMjRcIiwgXCJDaHJvbWl1bVwiO3Y9XCIxMjhcIiJ9LCB7Im5hbWUiOiAic2VjLWNoLXVhLW1vYmlsZSIsICJ2YWx1ZSI6ICI/MCJ9LCB7Im5hbWUiOiAic2VjLWNoLXVhLXBsYXRmb3JtIiwgInZhbHVlIjogIlwiV2luZG93c1wiIn0sIHsibmFtZSI6ICJzZWMtZmV0Y2gtZGVzdCIsICJ2YWx1ZSI6ICJzdHlsZSJ9LCB7Im5hbWUiOiAic2VjLWZldGNoLW1vZGUiLCAidmFsdWUiOiAibm8tY29ycyJ9LCB7Im5hbWUiOiAic2VjLWZldGNoLXNpdGUiLCAidmFsdWUiOiAic2FtZS1vcmlnaW4ifSwgeyJuYW1lIjogInVzZXItYWdlbnQiLCAidmFsdWUiOiAiTW96aWxsYS81LjAgKFdpbmRvd3MgTlQgMTAuMDsgV2luNjQ7IHg2NCkgQXBwbGVXZWJLaXQvNTM3LjM2IChLSFRNTCwgbGlrZSBHZWNrbykgQ2hyb21lLzEyOC4wLjY2MTMuMTggU2FmYXJpLzUzNy4zNiJ9XSwgInF1ZXJ5U3RyaW5nIjogW10sICJoZWFkZXJzU2l6ZSI6IDcwMiwgImJvZHlTaXplIjogMH0sICJyZXNwb25zZSI6IHsic3RhdHVzIjogMjAwLCAic3RhdHVzVGV4dCI6ICIiLCAiaHR0cFZlcnNpb24iOiAiSFRUUC8yLjAiLCAiY29va2llcyI6IFtdLCAiaGVhZGVycyI6IFt7Im5hbWUiOiAiY2FjaGUtY29udHJvbCIsICJ2YWx1ZSI6ICJtYXgtYWdlPTE0NDAwIn0sIHsibmFtZSI6ICJjZi1jYWNoZS1zdGF0dXMiLCAidmFsdWUiOiAiTUlTUyJ9LCB7Im5hbWUiOiAiY2YtcmF5IiwgInZhbHVlIjogIjhiZTVjMTRiYzg0MDcxYzQtRlJBIn0sIHsibmFtZSI6ICJjb250ZW50LWVuY29kaW5nIiwgInZhbHVlIjogImJyIn0sIHsibmFtZSI6ICJjb250ZW50LXR5cGUiLCAidmFsdWUiOiAidGV4dC9jc3MifSwgeyJuYW1lIjogImRhdGUiLCAidmFsdWUiOiAiVGh1LCAwNSBTZXAgMjAyNCAxMTowNzoyMCBHTVQifSwgeyJuYW1lIjogImV0YWciLCAidmFsdWUiOiAiVy9cIjEyNDM2MS0xNjgxMzMzNDIyMDAwXCIifSwgeyJuYW1lIjogImxhc3QtbW9kaWZpZWQiLCAidmFsdWUiOiAiV2VkLCAxMiBBcHIgMjAyMyAyMTowMzo0MiBHTVQifSwgeyJuYW1lIjogIm5lbCIsICJ2YWx1ZSI6ICJ7XCJzdWNjZXNzX2ZyYWN0aW9uXCI6MCxcInJlcG9ydF90b1wiOlwiY2YtbmVsXCIsXCJtYXhfYWdlXCI6NjA0ODAwfSJ9LCB7Im5hbWUiOiAicmVwb3J0LXRvIiwgInZhbHVlIjogIntcImVuZHBvaW50c1wiOlt7XCJ1cmxcIjpcImh0dHBzOlxcL1xcL2EubmVsLmNsb3VkZmxhcmUuY29tXFwvcmVwb3J0XFwvdjQ/cz1pWDgzMDVhQWxGOEtMMSUyRlYyV3AxaTBnSHMwd1Ryd3BSaSUyQkYyV1NKbldNcTRhNkJveks4RnFxRXVzUHNKcnRnQno1aUFSTDNWNW53JTJGNEZaTUthJTJCQTRTOWRpOXpsUlAzRGRkWmNmQnM5dldkaERidlNDcmpiJTJCQ3hoSklkdmlvcmFNZCUyRk1OVDFCZTJHJTJGOXRWQiUyRnkwJTJGV3JIZGtXT3ZnYTU5STQ0JTNEXCJ9XSxcImdyb3VwXCI6XCJjZi1uZWxcIixcIm1heF9hZ2VcIjo2MDQ4MDB9In0sIHsibmFtZSI6ICJzZXJ2ZXIiLCAidmFsdWUiOiAiY2xvdWRmbGFyZSJ9LCB7Im5hbWUiOiAic3RyaWN0LXRyYW5zcG9ydC1zZWN1cml0eSIsICJ2YWx1ZSI6ICJtYXgtYWdlPTYzMDcyMDAwOyBpbmNsdWRlU3ViZG9tYWluczsgcHJlbG9hZCJ9LCB7Im5hbWUiOiAidmFyeSIsICJ2YWx1ZSI6ICJBY2NlcHQtRW5jb2RpbmcifV0sICJjb250ZW50IjogeyJzaXplIjogMTI0MzYxLCAibWltZVR5cGUiOiAidGV4dC9jc3MiLCAiY29tcHJlc3Npb24iOiAxMDQ4NDQsICJ0ZXh0IjogIi8qIVxuICogQm9vdHN0cmFwIHYyLjIuMlxuICpcbiAqIENvcHlyaWdodCAyMDEyIFR3aXR0ZXIsIEluY1xuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlIHYyLjBcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIERlc2lnbmVkIGFuZCBidWlsdCB3aXRoIGFsbCB0aGUgbG92ZSBpbiB0aGUgd29ybGQgQHR3aXR0ZXIgYnkgQG1kbyBhbmQgQGZhdC5cbiAqL1xuXG5hcnRpY2xlLFxuYXNpZGUsXG5kZXRhaWxzLFxuZmlnY2FwdGlvbixcbmZpZ3VyZSxcbmZvb3RlcixcbmhlYWRlcixcbmhncm91cCxcbm5hdixcbnNlY3Rpb24ge1xuICBkaXNwbGF5OiBibG9jaztcbn1cblxuYXVkaW8sXG5jYW52YXMsXG52aWRlbyB7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgKmRpc3BsYXk6IGlubGluZTtcbiAgKnpvb206IDE7XG59XG5cbmF1ZGlvOm5vdChbY29udHJvbHNdKSB7XG4gIGRpc3BsYXk6IG5vbmU7XG59XG5cbmh0bWwge1xuICBmb250LXNpemU6IDEwMCU7XG4gIC13ZWJraXQtdGV4dC1zaXplLWFkanVzdDogMTAwJTtcbiAgICAgIC1tcy10ZXh0LXNpemUtYWRqdXN0OiAxMDAlO1xufVxuXG5hOmZvY3VzIHtcbiAgb3V0bGluZTogdGhpbiBkb3R0ZWQgIzMzMztcbiAgb3V0bGluZTogNXB4IGF1dG8gLXdlYmtpdC1mb2N1cy1yaW5nLWNvbG9yO1xuICBvdXRsaW5lLW9mZnNldDogLTJweDtcbn1cblxuYTpob3ZlcixcbmE6YWN0aXZlIHtcbiAgb3V0bGluZTogMDtcbn1cblxuc3ViLFxuc3VwIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBmb250LXNpemU6IDc1JTtcbiAgbGluZS1oZWlnaHQ6IDA7XG4gIHZlcnRpY2FsLWFsaWduOiBiYXNlbGluZTtcbn1cblxuc3VwIHtcbiAgdG9wOiAtMC41ZW07XG59XG5cbnN1YiB7XG4gIGJvdHRvbTogLTAuMjVlbTtcbn1cblxuaW1nIHtcbiAgd2lkdGg6IGF1dG9cXDk7XG4gIGhlaWdodDogYXV0bztcbiAgbWF4LXdpZHRoOiAxMDAlO1xuICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xuICBib3JkZXI6IDA7XG4gIC1tcy1pbnRlcnBvbGF0aW9uLW1vZGU6IGJpY3ViaWM7XG59XG5cbiNtYXBfY2FudmFzIGltZyxcbi5nb29nbGUtbWFwcyBpbWcge1xuICBtYXgtd2lkdGg6IG5vbmU7XG59XG5cbmJ1dHRvbixcbmlucHV0LFxuc2VsZWN0LFxudGV4dGFyZWEge1xuICBtYXJnaW46IDA7XG4gIGZvbnQtc2l6ZTogMTAwJTtcbiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbn1cblxuYnV0dG9uLFxuaW5wdXQge1xuICAqb3ZlcmZsb3c6IHZpc2libGU7XG4gIGxpbmUtaGVpZ2h0OiBub3JtYWw7XG59XG5cbmJ1dHRvbjo6LW1vei1mb2N1cy1pbm5lcixcbmlucHV0OjotbW96LWZvY3VzLWlubmVyIHtcbiAgcGFkZGluZzogMDtcbiAgYm9yZGVyOiAwO1xufVxuXG5idXR0b24sXG5odG1sIGlucHV0W3R5cGU9XCJidXR0b25cIl0sXG5pbnB1dFt0eXBlPVwicmVzZXRcIl0sXG5pbnB1dFt0eXBlPVwic3VibWl0XCJdIHtcbiAgY3Vyc29yOiBwb2ludGVyO1xuICAtd2Via2l0LWFwcGVhcmFuY2U6IGJ1dHRvbjtcbn1cblxubGFiZWwsXG5zZWxlY3QsXG5idXR0b24sXG5pbnB1dFt0eXBlPVwiYnV0dG9uXCJdLFxuaW5wdXRbdHlwZT1cInJlc2V0XCJdLFxuaW5wdXRbdHlwZT1cInN1Ym1pdFwiXSxcbmlucHV0W3R5cGU9XCJyYWRpb1wiXSxcbmlucHV0W3R5cGU9XCJjaGVja2JveFwiXSB7XG4gIGN1cnNvcjogcG9pbnRlcjtcbn1cblxuaW5wdXRbdHlwZT1cInNlYXJjaFwiXSB7XG4gIC13ZWJraXQtYm94LXNpemluZzogY29udGVudC1ib3g7XG4gICAgIC1tb3otYm94LXNpemluZzogY29udGVudC1ib3g7XG4gICAgICAgICAgYm94LXNpemluZzogY29udGVudC1ib3g7XG4gIC13ZWJraXQtYXBwZWFyYW5jZTogdGV4dGZpZWxkO1xufVxuXG5pbnB1dFt0eXBlPVwic2VhcmNoXCJdOjotd2Via2l0LXNlYXJjaC1kZWNvcmF0aW9uLFxuaW5wdXRbdHlwZT1cInNlYXJjaFwiXTo6LXdlYmtpdC1zZWFyY2gtY2FuY2VsLWJ1dHRvbiB7XG4gIC13ZWJraXQtYXBwZWFyYW5jZTogbm9uZTtcbn1cblxudGV4dGFyZWEge1xuICBvdmVyZmxvdzogYXV0bztcbiAgdmVydGljYWwtYWxpZ246IHRvcDtcbn1cblxuQG1lZGlhIHByaW50IHtcbiAgKiB7XG4gICAgY29sb3I6ICMwMDAgIWltcG9ydGFudDtcbiAgICB0ZXh0LXNoYWRvdzogbm9uZSAhaW1wb3J0YW50O1xuICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50ICFpbXBvcnRhbnQ7XG4gICAgYm94LXNoYWRvdzogbm9uZSAhaW1wb3J0YW50O1xuICB9XG4gIGEsXG4gIGE6dmlzaXRlZCB7XG4gICAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XG4gIH1cbiAgYVtocmVmXTphZnRlciB7XG4gICAgY29udGVudDogXCIgKFwiIGF0dHIoaHJlZikgXCIpXCI7XG4gIH1cbiAgYWJiclt0aXRsZV06YWZ0ZXIge1xuICAgIGNvbnRlbnQ6IFwiIChcIiBhdHRyKHRpdGxlKSBcIilcIjtcbiAgfVxuICAuaXIgYTphZnRlcixcbiAgYVtocmVmXj1cImphdmFzY3JpcHQ6XCJdOmFmdGVyLFxuICBhW2hyZWZePVwiI1wiXTphZnRlciB7XG4gICAgY29udGVudDogXCJcIjtcbiAgfVxuICBwcmUsXG4gIGJsb2NrcXVvdGUge1xuICAgIGJvcmRlcjogMXB4IHNvbGlkICM5OTk7XG4gICAgcGFnZS1icmVhay1pbnNpZGU6IGF2b2lkO1xuICB9XG4gIHRoZWFkIHtcbiAgICBkaXNwbGF5OiB0YWJsZS1oZWFkZXItZ3JvdXA7XG4gIH1cbiAgdHIsXG4gIGltZyB7XG4gICAgcGFnZS1icmVhay1pbnNpZGU6IGF2b2lkO1xuICB9XG4gIGltZyB7XG4gICAgbWF4LXdpZHRoOiAxMDAlICFpbXBvcnRhbnQ7XG4gIH1cbiAgQHBhZ2UgIHtcbiAgICBtYXJnaW46IDAuNWNtO1xuICB9XG4gIHAsXG4gIGgyLFxuICBoMyB7XG4gICAgb3JwaGFuczogMztcbiAgICB3aWRvd3M6IDM7XG4gIH1cbiAgaDIsXG4gIGgzIHtcbiAgICBwYWdlLWJyZWFrLWFmdGVyOiBhdm9pZDtcbiAgfVxufVxuXG4uY2xlYXJmaXgge1xuICAqem9vbTogMTtcbn1cblxuLmNsZWFyZml4OmJlZm9yZSxcbi5jbGVhcmZpeDphZnRlciB7XG4gIGRpc3BsYXk6IHRhYmxlO1xuICBsaW5lLWhlaWdodDogMDtcbiAgY29udGVudDogXCJcIjtcbn1cblxuLmNsZWFyZml4OmFmdGVyIHtcbiAgY2xlYXI6IGJvdGg7XG59XG5cbi5oaWRlLXRleHQge1xuICBmb250OiAwLzAgYTtcbiAgY29sb3I6IHRyYW5zcGFyZW50O1xuICB0ZXh0LXNoYWRvdzogbm9uZTtcbiAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7XG4gIGJvcmRlcjogMDtcbn1cblxuLmlucHV0LWJsb2NrLWxldmVsIHtcbiAgZGlzcGxheTogYmxvY2s7XG4gIHdpZHRoOiAxMDAlO1xuICBtaW4taGVpZ2h0OiAzMHB4O1xuICAtd2Via2l0LWJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gICAgIC1tb3otYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xufVxuXG5ib2R5IHtcbiAgbWFyZ2luOiAwO1xuICBmb250LWZhbWlseTogXCJhYXV4LW5leHRcIiwgXCJIZWx2ZXRpY2EgTmV1ZSBMVCBXMDVfNTcgQ29uZFwiLCBcIkhlbHZldGljYSBOZXVlXCIsIEhlbHZldGljYSwgQXJpYWwsIHNhbnMtc2VyaWY7XG4gIGZvbnQtc2l6ZTogMTRweDtcbiAgbGluZS1oZWlnaHQ6IDIwcHg7XG4gIGNvbG9yOiAjMzMzMzMzO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmZmZmO1xufVxuXG5hIHtcbiAgY29sb3I6ICMwMDAwMDA7XG4gIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbn1cblxuYTpob3ZlciB7XG4gIGNvbG9yOiAjMDAwMDAwO1xuICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTtcbn1cblxuLmltZy1yb3VuZGVkIHtcbiAgLXdlYmtpdC1ib3JkZXItcmFkaXVzOiA2cHg7XG4gICAgIC1tb3otYm9yZGVyLXJhZGl1czogNnB4O1xuICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDZweDtcbn1cblxuLmltZy1wb2xhcm9pZCB7XG4gIHBhZGRpbmc6IDRweDtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjtcbiAgYm9yZGVyOiAxcHggc29saWQgI2NjYztcbiAgYm9yZGVyOiAxcHggc29saWQgcmdiYSgwLCAwLCAwLCAwLjIpO1xuICAtd2Via2l0LWJveC1zaGFkb3c6IDAgMXB4IDNweCByZ2JhKDAsIDAsIDAsIDAuMSk7XG4gICAgIC1tb3otYm94LXNoYWRvdzogMCAxcHggM3B4IHJnYmEoMCwgMCwgMCwgMC4xKTtcbiAgICAgICAgICBib3gtc2hhZG93OiAwIDFweCAzcHggcmdiYSgwLCAwLCAwLCAwLjEpO1xufVxuXG4uaW1nLWNpcmNsZSB7XG4gIC13ZWJraXQtYm9yZGVyLXJhZGl1czogNTAwcHg7XG4gICAgIC1tb3otYm9yZGVyLXJhZGl1czogNTAwcHg7XG4gICAgICAgICAgYm9yZGVyLXJhZGl1czogNTAwcHg7XG59XG5cbi5yb3cge1xuICBtYXJnaW4tbGVmdDogLTIwcHg7XG4gICp6b29tOiAxO1xufVxuXG4ucm93OmJlZm9yZSxcbi5yb3c6YWZ0ZXIge1xuICBkaXNwbGF5OiB0YWJsZTtcbiAgbGluZS1oZWlnaHQ6IDA7XG4gIGNvbnRlbnQ6IFwiXCI7XG59XG5cbi5yb3c6YWZ0ZXIge1xuICBjbGVhcjogYm90aDtcbn1cblxuW2NsYXNzKj1cInNwYW5cIl0ge1xuICBmbG9hdDogbGVmdDtcbiAgbWluLWhlaWdodDogMXB4O1xuICBtYXJnaW4tbGVmdDogMjBweDtcbn1cblxuLmNvbnRhaW5lcixcbi5uYXZiYXItc3RhdGljLXRvcCAuY29udGFpbmVyLFxuLm5hdmJhci1maXhlZC10b3AgLmNvbnRhaW5lcixcbi5uYXZiYXItZml4ZWQtYm90dG9tIC5jb250YWluZXIge1xuICB3aWR0aDogOTQwcHg7XG59XG5cbi5zcGFuMTIge1xuICB3aWR0aDogOTQwcHg7XG59XG5cbi5zcGFuMTEge1xuICB3aWR0aDogODYwcHg7XG59XG5cbi5zcGFuMTAge1xuICB3aWR0aDogNzgwcHg7XG59XG5cbi5zcGFuOSB7XG4gIHdpZHRoOiA3MDBweDtcbn1cblxuLnNwYW44IHtcbiAgd2lkdGg6IDYyMHB4O1xufVxuXG4uc3Bhbjcge1xuICB3aWR0aDogNTQwcHg7XG59XG5cbi5zcGFuNiB7XG4gIHdpZHRoOiA0NjBweDtcbn1cblxuLnNwYW41IHtcbiAgd2lkdGg6IDM4MHB4O1xufVxuXG4uc3BhbjQge1xuICB3aWR0aDogMzAwcHg7XG59XG5cbi5zcGFuMyB7XG4gIHdpZHRoOiAyMjBweDtcbn1cblxuLnNwYW4yIHtcbiAgd2lkdGg6IDE0MHB4O1xufVxuXG4uc3BhbjEge1xuICB3aWR0aDogNjBweDtcbn1cblxuLm9mZnNldDEyIHtcbiAgbWFyZ2luLWxlZnQ6IDk4MHB4O1xufVxuXG4ub2Zmc2V0MTEge1xuICBtYXJnaW4tbGVmdDogOTAwcHg7XG59XG5cbi5vZmZzZXQxMCB7XG4gIG1hcmdpbi1sZWZ0OiA4MjBweDtcbn1cblxuLm9mZnNldDkge1xuICBtYXJnaW4tbGVmdDogNzQwcHg7XG59XG5cbi5vZmZzZXQ4IHtcbiAgbWFyZ2luLWxlZnQ6IDY2MHB4O1xufVxuXG4ub2Zmc2V0NyB7XG4gIG1hcmdpbi1sZWZ0OiA1ODBweDtcbn1cblxuLm9mZnNldDYge1xuICBtYXJnaW4tbGVmdDogNTAwcHg7XG59XG5cbi5vZmZzZXQ1IHtcbiAgbWFyZ2luLWxlZnQ6IDQyMHB4O1xufVxuXG4ub2Zmc2V0NCB7XG4gIG1hcmdpbi1sZWZ0OiAzNDBweDtcbn1cblxuLm9mZnNldDMge1xuICBtYXJnaW4tbGVmdDogMjYwcHg7XG59XG5cbi5vZmZzZXQyIHtcbiAgbWFyZ2luLWxlZnQ6IDE4MHB4O1xufVxuXG4ub2Zmc2V0MSB7XG4gIG1hcmdpbi1sZWZ0OiAxMDBweDtcbn1cblxuLnJvdy1mbHVpZCB7XG4gIHdpZHRoOiAxMDAlO1xuICAqem9vbTogMTtcbn1cblxuLnJvdy1mbHVpZDpiZWZvcmUsXG4ucm93LWZsdWlkOmFmdGVyIHtcbiAgZGlzcGxheTogdGFibGU7XG4gIGxpbmUtaGVpZ2h0OiAwO1xuICBjb250ZW50OiBcIlwiO1xufVxuXG4ucm93LWZsdWlkOmFmdGVyIHtcbiAgY2xlYXI6IGJvdGg7XG59XG5cbi5yb3ctZmx1aWQgW2NsYXNzKj1cInNwYW5cIl0ge1xuICBkaXNwbGF5OiBibG9jaztcbiAgZmxvYXQ6IGxlZnQ7XG4gIHdpZHRoOiAxMDAlO1xuICBtaW4taGVpZ2h0OiAzMHB4O1xuICBtYXJnaW4tbGVmdDogMi4xMjc2NTk1NzQ0NjgwODUlO1xuICAqbWFyZ2luLWxlZnQ6IDIuMDc0NDY4MDg1MTA2MzgzJTtcbiAgLXdlYmtpdC1ib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAgICAtbW96LWJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gICAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbn1cblxuLnJvdy1mbHVpZCBbY2xhc3MqPVwic3BhblwiXTpmaXJzdC1jaGlsZCB7XG4gIG1hcmdpbi1sZWZ0OiAwO1xufVxuXG4ucm93LWZsdWlkIC5jb250cm9scy1yb3cgW2NsYXNzKj1cInNwYW5cIl0gKyBbY2xhc3MqPVwic3BhblwiXSB7XG4gIG1hcmdpbi1sZWZ0OiAyLjEyNzY1OTU3NDQ2ODA4NSU7XG59XG5cbi5yb3ctZmx1aWQgLnNwYW4xMiB7XG4gIHdpZHRoOiAxMDAlO1xuICAqd2lkdGg6IDk5Ljk0NjgwODUxMDYzODI5JTtcbn1cblxuLnJvdy1mbHVpZCAuc3BhbjExIHtcbiAgd2lkdGg6IDkxLjQ4OTM2MTcwMjEyNzY1JTtcbiAgKndpZHRoOiA5MS40MzYxNzAyMTI3NjU5NCU7XG59XG5cbi5yb3ctZmx1aWQgLnNwYW4xMCB7XG4gIHdpZHRoOiA4Mi45Nzg3MjM0MDQyNTUzMiU7XG4gICp3aWR0aDogODIuOTI1NTMxOTE0ODkzNjElO1xufVxuXG4ucm93LWZsdWlkIC5zcGFuOSB7XG4gIHdpZHRoOiA3NC40NjgwODUxMDYzODI5NyU7XG4gICp3aWR0aDogNzQuNDE0ODkzNjE3MDIxMjYlO1xufVxuXG4ucm93LWZsdWlkIC5zcGFuOCB7XG4gIHdpZHRoOiA2NS45NTc0NDY4MDg1MTA2NCU7XG4gICp3aWR0aDogNjUuOTA0MjU1MzE5MTQ4OTMlO1xufVxuXG4ucm93LWZsdWlkIC5zcGFuNyB7XG4gIHdpZHRoOiA1Ny40NDY4MDg1MTA2MzgyOSU7XG4gICp3aWR0aDogNTcuMzkzNjE3MDIxMjc2NTklO1xufVxuXG4ucm93LWZsdWlkIC5zcGFuNiB7XG4gIHdpZHRoOiA0OC45MzYxNzAyMTI3NjU5NSU7XG4gICp3aWR0aDogNDguODgyOTc4NzIzNDA0MjUlO1xufVxuXG4ucm93LWZsdWlkIC5zcGFuNSB7XG4gIHdpZHRoOiA0MC40MjU1MzE5MTQ4OTM2MiU7XG4gICp3aWR0aDogNDAuMzcyMzQwNDI1NTMxOTIlO1xufVxuXG4ucm93LWZsdWlkIC5zcGFuNCB7XG4gIHdpZHRoOiAzMS45MTQ4OTM2MTcwMjEyNzglO1xuICAqd2lkdGg6IDMxLjg2MTcwMjEyNzY1OTU3NiU7XG59XG5cbi5yb3ctZmx1aWQgLnNwYW4zIHtcbiAgd2lkdGg6IDIzLjQwNDI1NTMxOTE0ODkzNCU7XG4gICp3aWR0aDogMjMuMzUxMDYzODI5Nzg3MjMzJTtcbn1cblxuLnJvdy1mbHVpZCAuc3BhbjIge1xuICB3aWR0aDogMTQuODkzNjE3MDIxMjc2NTk1JTtcbiAgKndpZHRoOiAxNC44NDA0MjU1MzE5MTQ4OTQlO1xufVxuXG4ucm93LWZsdWlkIC5zcGFuMSB7XG4gIHdpZHRoOiA2LjM4Mjk3ODcyMzQwNDI1NSU7XG4gICp3aWR0aDogNi4zMjk3ODcyMzQwNDI1NTMlO1xufVxuXG4ucm93LWZsdWlkIC5vZmZzZXQxMiB7XG4gIG1hcmdpbi1sZWZ0OiAxMDQuMjU1MzE5MTQ4OTM2MTclO1xuICAqbWFyZ2luLWxlZnQ6IDEwNC4xNDg5MzYxNzAyMTI3NSU7XG59XG5cbi5yb3ctZmx1aWQgLm9mZnNldDEyOmZpcnN0LWNoaWxkIHtcbiAgbWFyZ2luLWxlZnQ6IDEwMi4xMjc2NTk1NzQ0NjgwOCU7XG4gICptYXJnaW4tbGVmdDogMTAyLjAyMTI3NjU5NTc0NDY3JTtcbn1cblxuLnJvdy1mbHVpZCAub2Zmc2V0MTEge1xuICBtYXJnaW4tbGVmdDogOTUuNzQ0NjgwODUxMDYzODIlO1xuICAqbWFyZ2luLWxlZnQ6IDk1LjYzODI5Nzg3MjM0MDQlO1xufVxuXG4ucm93LWZsdWlkIC5vZmZzZXQxMTpmaXJzdC1jaGlsZCB7XG4gIG1hcmdpbi1sZWZ0OiA5My42MTcwMjEyNzY1OTU3NCU7XG4gICptYXJnaW4tbGVmdDogOTMuNTEwNjM4Mjk3ODcyMzIlO1xufVxuXG4ucm93LWZsdWlkIC5vZmZzZXQxMCB7XG4gIG1hcmdpbi1sZWZ0OiA4Ny4yMzQwNDI1NTMxOTE0OSU7XG4gICptYXJnaW4tbGVmdDogODcuMTI3NjU5NTc0NDY4MDclO1xufVxuXG4ucm93LWZsdWlkIC5vZmZzZXQxMDpmaXJzdC1jaGlsZCB7XG4gIG1hcmdpbi1sZWZ0OiA4NS4xMDYzODI5Nzg3MjM0JTtcbiAgKm1hcmdpbi1sZWZ0OiA4NC45OTk5OTk5OTk5OTk5OSU7XG59XG5cbi5yb3ctZmx1aWQgLm9mZnNldDkge1xuICBtYXJnaW4tbGVmdDogNzguNzIzNDA0MjU1MzE5MTQlO1xuICAqbWFyZ2luLWxlZnQ6IDc4LjYxNzAyMTI3NjU5NTcyJTtcbn1cblxuLnJvdy1mbHVpZCAub2Zmc2V0OTpmaXJzdC1jaGlsZCB7XG4gIG1hcmdpbi1sZWZ0OiA3Ni41OTU3NDQ2ODA4NTEwNiU7XG4gICptYXJnaW4tbGVmdDogNzYuNDg5MzYxNzAyMTI3NjQlO1xufVxuXG4ucm93LWZsdWlkIC5vZmZzZXQ4IHtcbiAgbWFyZ2luLWxlZnQ6IDcwLjIxMjc2NTk1NzQ0NjglO1xuICAqbWFyZ2luLWxlZnQ6IDcwLjEwNjM4Mjk3ODcyMzM5JTtcbn1cblxuLnJvdy1mbHVpZCAub2Zmc2V0ODpmaXJzdC1jaGlsZCB7XG4gIG1hcmdpbi1sZWZ0OiA2OC4wODUxMDYzODI5Nzg3MiU7XG4gICptYXJnaW4tbGVmdDogNjcuOTc4NzIzNDA0MjU1MyU7XG59XG5cbi5yb3ctZmx1aWQgLm9mZnNldDcge1xuICBtYXJnaW4tbGVmdDogNjEuNzAyMTI3NjU5NTc0NDYlO1xuICAqbWFyZ2luLWxlZnQ6IDYxLjU5NTc0NDY4MDg1MTA2JTtcbn1cblxuLnJvdy1mbHVpZCAub2Zmc2V0NzpmaXJzdC1jaGlsZCB7XG4gIG1hcmdpbi1sZWZ0OiA1OS41NzQ0NjgwODUxMDYzNzUlO1xuICAqbWFyZ2luLWxlZnQ6IDU5LjQ2ODA4NTEwNjM4Mjk3JTtcbn1cblxuLnJvdy1mbHVpZCAub2Zmc2V0NiB7XG4gIG1hcmdpbi1sZWZ0OiA1My4xOTE0ODkzNjE3MDIxMjUlO1xuICAqbWFyZ2luLWxlZnQ6IDUzLjA4NTEwNjM4Mjk3ODcxNSU7XG59XG5cbi5yb3ctZmx1aWQgLm9mZnNldDY6Zmlyc3QtY2hpbGQge1xuICBtYXJnaW4tbGVmdDogNTEuMDYzODI5Nzg3MjM0MDM1JTtcbiAgKm1hcmdpbi1sZWZ0OiA1MC45NTc0NDY4MDg1MTA2MyU7XG59XG5cbi5yb3ctZmx1aWQgLm9mZnNldDUge1xuICBtYXJnaW4tbGVmdDogNDQuNjgwODUxMDYzODI5NzklO1xuICAqbWFyZ2luLWxlZnQ6IDQ0LjU3NDQ2ODA4NTEwNjM4JTtcbn1cblxuLnJvdy1mbHVpZCAub2Zmc2V0NTpmaXJzdC1jaGlsZCB7XG4gIG1hcmdpbi1sZWZ0OiA0Mi41NTMxOTE0ODkzNjE3JTtcbiAgKm1hcmdpbi1sZWZ0OiA0Mi40NDY4MDg1MTA2MzgzJTtcbn1cblxuLnJvdy1mbHVpZCAub2Zmc2V0NCB7XG4gIG1hcmdpbi1sZWZ0OiAzNi4xNzAyMTI3NjU5NTc0NDQlO1xuICAqbWFyZ2luLWxlZnQ6IDM2LjA2MzgyOTc4NzIzNDA1JTtcbn1cblxuLnJvdy1mbHVpZCAub2Zmc2V0NDpmaXJzdC1jaGlsZCB7XG4gIG1hcmdpbi1sZWZ0OiAzNC4wNDI1NTMxOTE0ODkzNiU7XG4gICptYXJnaW4tbGVmdDogMzMuOTM2MTcwMjEyNzY1OTYlO1xufVxuXG4ucm93LWZsdWlkIC5vZmZzZXQzIHtcbiAgbWFyZ2luLWxlZnQ6IDI3LjY1OTU3NDQ2ODA4NTEwNCU7XG4gICptYXJnaW4tbGVmdDogMjcuNTUzMTkxNDg5MzYxNyU7XG59XG5cbi5yb3ctZmx1aWQgLm9mZnNldDM6Zmlyc3QtY2hpbGQge1xuICBtYXJnaW4tbGVmdDogMjUuNTMxOTE0ODkzNjE3MDIlO1xuICAqbWFyZ2luLWxlZnQ6IDI1LjQyNTUzMTkxNDg5MzYxOCU7XG59XG5cbi5yb3ctZmx1aWQgLm9mZnNldDIge1xuICBtYXJnaW4tbGVmdDogMTkuMTQ4OTM2MTcwMjEyNzY0JTtcbiAgKm1hcmdpbi1sZWZ0OiAxOS4wNDI1NTMxOTE0ODkzNiU7XG59XG5cbi5yb3ctZmx1aWQgLm9mZnNldDI6Zmlyc3QtY2hpbGQge1xuICBtYXJnaW4tbGVmdDogMTcuMDIxMjc2NTk1NzQ0NjglO1xuICAqbWFyZ2luLWxlZnQ6IDE2LjkxNDg5MzYxNzAyMTI3OCU7XG59XG5cbi5yb3ctZmx1aWQgLm9mZnNldDEge1xuICBtYXJnaW4tbGVmdDogMTAuNjM4Mjk3ODcyMzQwNDI1JTtcbiAgKm1hcmdpbi1sZWZ0OiAxMC41MzE5MTQ4OTM2MTcwMiU7XG59XG5cbi5yb3ctZmx1aWQgLm9mZnNldDE6Zmlyc3QtY2hpbGQge1xuICBtYXJnaW4tbGVmdDogOC41MTA2MzgyOTc4NzIzNCU7XG4gICptYXJnaW4tbGVmdDogOC40MDQyNTUzMTkxNDg5MzglO1xufVxuXG5bY2xhc3MqPVwic3BhblwiXS5oaWRlLFxuLnJvdy1mbHVpZCBbY2xhc3MqPVwic3BhblwiXS5oaWRlIHtcbiAgZGlzcGxheTogbm9uZTtcbn1cblxuW2NsYXNzKj1cInNwYW5cIl0ucHVsbC1yaWdodCxcbi5yb3ctZmx1aWQgW2NsYXNzKj1cInNwYW5cIl0ucHVsbC1yaWdodCB7XG4gIGZsb2F0OiByaWdodDtcbn1cblxuLmNvbnRhaW5lciB7XG4gIG1hcmdpbi1yaWdodDogYXV0bztcbiAgbWFyZ2luLWxlZnQ6IGF1dG87XG4gICp6b29tOiAxO1xufVxuXG4uY29udGFpbmVyOmJlZm9yZSxcbi5jb250YWluZXI6YWZ0ZXIge1xuICBkaXNwbGF5OiB0YWJsZTtcbiAgbGluZS1oZWlnaHQ6IDA7XG4gIGNvbnRlbnQ6IFwiXCI7XG59XG5cbi5jb250YWluZXI6YWZ0ZXIge1xuICBjbGVhcjogYm90aDtcbn1cblxuLmNvbnRhaW5lci1mbHVpZCB7XG4gIHBhZGRpbmctcmlnaHQ6IDIwcHg7XG4gIHBhZGRpbmctbGVmdDogMjBweDtcbiAgKnpvb206IDE7XG59XG5cbi5jb250YWluZXItZmx1aWQ6YmVmb3JlLFxuLmNvbnRhaW5lci1mbHVpZDphZnRlciB7XG4gIGRpc3BsYXk6IHRhYmxlO1xuICBsaW5lLWhlaWdodDogMDtcbiAgY29udGVudDogXCJcIjtcbn1cblxuLmNvbnRhaW5lci1mbHVpZDphZnRlciB7XG4gIGNsZWFyOiBib3RoO1xufVxuXG5wIHtcbiAgbWFyZ2luOiAwIDAgMTBweDtcbn1cblxuLmxlYWQge1xuICBtYXJnaW4tYm90dG9tOiAyMHB4O1xuICBmb250LXNpemU6IDIxcHg7XG4gIGZvbnQtd2VpZ2h0OiAyMDA7XG4gIGxpbmUtaGVpZ2h0OiAzMHB4O1xufVxuXG5zbWFsbCB7XG4gIGZvbnQtc2l6ZTogODUlO1xufVxuXG5zdHJvbmcge1xuICBmb250LXdlaWdodDogYm9sZDtcbn1cblxuZW0ge1xuICBmb250LXN0eWxlOiBpdGFsaWM7XG59XG5cbmNpdGUge1xuICBmb250LXN0eWxlOiBub3JtYWw7XG59XG5cbi5tdXRlZCB7XG4gIGNvbG9yOiAjOTk5OTk5O1xufVxuXG5hLm11dGVkOmhvdmVyIHtcbiAgY29sb3I6ICM4MDgwODA7XG59XG5cbi50ZXh0LXdhcm5pbmcge1xuICBjb2xvcjogI2MwOTg1Mztcbn1cblxuYS50ZXh0LXdhcm5pbmc6aG92ZXIge1xuICBjb2xvcjogI2E0N2UzYztcbn1cblxuLnRleHQtZXJyb3Ige1xuICBjb2xvcjogI2I5NGE0ODtcbn1cblxuYS50ZXh0LWVycm9yOmhvdmVyIHtcbiAgY29sb3I6ICM5NTNiMzk7XG59XG5cbi50ZXh0LWluZm8ge1xuICBjb2xvcjogIzNhODdhZDtcbn1cblxuYS50ZXh0LWluZm86aG92ZXIge1xuICBjb2xvcjogIzJkNjk4Nztcbn1cblxuLnRleHQtc3VjY2VzcyB7XG4gIGNvbG9yOiAjNDY4ODQ3O1xufVxuXG5hLnRleHQtc3VjY2Vzczpob3ZlciB7XG4gIGNvbG9yOiAjMzU2NjM1O1xufVxuXG5oMSxcbmgyLFxuaDMsXG5oNCxcbmg1LFxuaDYge1xuICBtYXJnaW46IDEwcHggMDtcbiAgZm9udC1mYW1pbHk6IGluaGVyaXQ7XG4gIGZvbnQtd2VpZ2h0OiBib2xkO1xuICBsaW5lLWhlaWdodDogMjBweDtcbiAgY29sb3I6IGluaGVyaXQ7XG4gIHRleHQtcmVuZGVyaW5nOiBvcHRpbWl6ZWxlZ2liaWxpdHk7XG59XG5cbmgxIHNtYWxsLFxuaDIgc21hbGwsXG5oMyBzbWFsbCxcbmg0IHNtYWxsLFxuaDUgc21hbGwsXG5oNiBzbWFsbCB7XG4gIGZvbnQtd2VpZ2h0OiBub3JtYWw7XG4gIGxpbmUtaGVpZ2h0OiAxO1xuICBjb2xvcjogIzk5OTk5OTtcbn1cblxuaDEsXG5oMixcbmgzIHtcbiAgbGluZS1oZWlnaHQ6IDQwcHg7XG59XG5cbmgxIHtcbiAgZm9udC1zaXplOiAzOC41cHg7XG59XG5cbmgyIHtcbiAgZm9udC1zaXplOiAzMS41cHg7XG59XG5cbmgzIHtcbiAgZm9udC1zaXplOiAyNC41cHg7XG59XG5cbmg0IHtcbiAgZm9udC1zaXplOiAxNy41cHg7XG59XG5cbmg1IHtcbiAgZm9udC1zaXplOiAxNHB4O1xufVxuXG5oNiB7XG4gIGZvbnQtc2l6ZTogMTEuOXB4O1xufVxuXG5oMSBzbWFsbCB7XG4gIGZvbnQtc2l6ZTogMjQuNXB4O1xufVxuXG5oMiBzbWFsbCB7XG4gIGZvbnQtc2l6ZTogMTcuNXB4O1xufVxuXG5oMyBzbWFsbCB7XG4gIGZvbnQtc2l6ZTogMTRweDtcbn1cblxuaDQgc21hbGwge1xuICBmb250LXNpemU6IDE0cHg7XG59XG5cbi5wYWdlLWhlYWRlciB7XG4gIHBhZGRpbmctYm90dG9tOiA5cHg7XG4gIG1hcmdpbjogMjBweCAwIDMwcHg7XG4gIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjZWVlZWVlO1xufVxuXG51bCxcbm9sIHtcbiAgcGFkZGluZzogMDtcbiAgbWFyZ2luOiAwIDAgMTBweCAyNXB4O1xufVxuXG51bCB1bCxcbnVsIG9sLFxub2wgb2wsXG5vbCB1bCB7XG4gIG1hcmdpbi1ib3R0b206IDA7XG59XG5cbmxpIHtcbiAgbGluZS1oZWlnaHQ6IDIwcHg7XG59XG5cbnVsLnVuc3R5bGVkLFxub2wudW5zdHlsZWQge1xuICBtYXJnaW4tbGVmdDogMDtcbiAgbGlzdC1zdHlsZTogbm9uZTtcbn1cblxudWwuaW5saW5lLFxub2wuaW5saW5lIHtcbiAgbWFyZ2luLWxlZnQ6IDA7XG4gIGxpc3Qtc3R5bGU6IG5vbmU7XG59XG5cbnVsLmlubGluZSA+IGxpLFxub2wuaW5saW5lID4gbGkge1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIHBhZGRpbmctcmlnaHQ6IDVweDtcbiAgcGFkZGluZy1sZWZ0OiA1cHg7XG59XG5cbmRsIHtcbiAgbWFyZ2luLWJvdHRvbTogMjBweDtcbn1cblxuZHQsXG5kZCB7XG4gIGxpbmUtaGVpZ2h0OiAyMHB4O1xufVxuXG5kdCB7XG4gIGZvbnQtd2VpZ2h0OiBib2xkO1xufVxuXG5kZCB7XG4gIG1hcmdpbi1sZWZ0OiAxMHB4O1xufVxuXG4uZGwtaG9yaXpvbnRhbCB7XG4gICp6b29tOiAxO1xufVxuXG4uZGwtaG9yaXpvbnRhbDpiZWZvcmUsXG4uZGwtaG9yaXpvbnRhbDphZnRlciB7XG4gIGRpc3BsYXk6IHRhYmxlO1xuICBsaW5lLWhlaWdodDogMDtcbiAgY29udGVudDogXCJcIjtcbn1cblxuLmRsLWhvcml6b250YWw6YWZ0ZXIge1xuICBjbGVhcjogYm90aDtcbn1cblxuLmRsLWhvcml6b250YWwgZHQge1xuICBmbG9hdDogbGVmdDtcbiAgd2lkdGg6IDE2MHB4O1xuICBvdmVyZmxvdzogaGlkZGVuO1xuICBjbGVhcjogbGVmdDtcbiAgdGV4dC1hbGlnbjogcmlnaHQ7XG4gIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzO1xuICB3aGl0ZS1zcGFjZTogbm93cmFwO1xufVxuXG4uZGwtaG9yaXpvbnRhbCBkZCB7XG4gIG1hcmdpbi1sZWZ0OiAxODBweDtcbn1cblxuaHIge1xuICBtYXJnaW46IDIwcHggMDtcbiAgYm9yZGVyOiAwO1xuICBib3JkZXItdG9wOiAxcHggc29saWQgI2VlZWVlZTtcbiAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNmZmZmZmY7XG59XG5cbmFiYnJbdGl0bGVdLFxuYWJicltkYXRhLW9yaWdpbmFsLXRpdGxlXSB7XG4gIGN1cnNvcjogaGVscDtcbiAgYm9yZGVyLWJvdHRvbTogMXB4IGRvdHRlZCAjOTk5OTk5O1xufVxuXG5hYmJyLmluaXRpYWxpc20ge1xuICBmb250LXNpemU6IDkwJTtcbiAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcbn1cblxuYmxvY2txdW90ZSB7XG4gIHBhZGRpbmc6IDAgMCAwIDE1cHg7XG4gIG1hcmdpbjogMCAwIDIwcHg7XG4gIGJvcmRlci1sZWZ0OiA1cHggc29saWQgI2VlZWVlZTtcbn1cblxuYmxvY2txdW90ZSBwIHtcbiAgbWFyZ2luLWJvdHRvbTogMDtcbiAgZm9udC1zaXplOiAxNnB4O1xuICBmb250LXdlaWdodDogMzAwO1xuICBsaW5lLWhlaWdodDogMjVweDtcbn1cblxuYmxvY2txdW90ZSBzbWFsbCB7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICBsaW5lLWhlaWdodDogMjBweDtcbiAgY29sb3I6ICM5OTk5OTk7XG59XG5cbmJsb2NrcXVvdGUgc21hbGw6YmVmb3JlIHtcbiAgY29udGVudDogJ1xcMjAxNCBcXDAwQTAnO1xufVxuXG5ibG9ja3F1b3RlLnB1bGwtcmlnaHQge1xuICBmbG9hdDogcmlnaHQ7XG4gIHBhZGRpbmctcmlnaHQ6IDE1cHg7XG4gIHBhZGRpbmctbGVmdDogMDtcbiAgYm9yZGVyLXJpZ2h0OiA1cHggc29saWQgI2VlZWVlZTtcbiAgYm9yZGVyLWxlZnQ6IDA7XG59XG5cbmJsb2NrcXVvdGUucHVsbC1yaWdodCBwLFxuYmxvY2txdW90ZS5wdWxsLXJpZ2h0IHNtYWxsIHtcbiAgdGV4dC1hbGlnbjogcmlnaHQ7XG59XG5cbmJsb2NrcXVvdGUucHVsbC1yaWdodCBzbWFsbDpiZWZvcmUge1xuICBjb250ZW50OiAnJztcbn1cblxuYmxvY2txdW90ZS5wdWxsLXJpZ2h0IHNtYWxsOmFmdGVyIHtcbiAgY29udGVudDogJ1xcMDBBMCBcXDIwMTQnO1xufVxuXG5xOmJlZm9yZSxcbnE6YWZ0ZXIsXG5ibG9ja3F1b3RlOmJlZm9yZSxcbmJsb2NrcXVvdGU6YWZ0ZXIge1xuICBjb250ZW50OiBcIlwiO1xufVxuXG5hZGRyZXNzIHtcbiAgZGlzcGxheTogYmxvY2s7XG4gIG1hcmdpbi1ib3R0b206IDIwcHg7XG4gIGZvbnQtc3R5bGU6IG5vcm1hbDtcbiAgbGluZS1oZWlnaHQ6IDIwcHg7XG59XG5cbmNvZGUsXG5wcmUge1xuICBwYWRkaW5nOiAwIDNweCAycHg7XG4gIGZvbnQtZmFtaWx5OiBNb25hY28sIE1lbmxvLCBDb25zb2xhcywgXCJDb3VyaWVyIE5ld1wiLCBtb25vc3BhY2U7XG4gIGZvbnQtc2l6ZTogMTJweDtcbiAgY29sb3I6ICMzMzMzMzM7XG4gIC13ZWJraXQtYm9yZGVyLXJhZGl1czogM3B4O1xuICAgICAtbW96LWJvcmRlci1yYWRpdXM6IDNweDtcbiAgICAgICAgICBib3JkZXItcmFkaXVzOiAzcHg7XG59XG5cbmNvZGUge1xuICBwYWRkaW5nOiAycHggNHB4O1xuICBjb2xvcjogI2QxNDtcbiAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2Y3ZjdmOTtcbiAgYm9yZGVyOiAxcHggc29saWQgI2UxZTFlODtcbn1cblxucHJlIHtcbiAgZGlzcGxheTogYmxvY2s7XG4gIHBhZGRpbmc6IDkuNXB4O1xuICBtYXJnaW46IDAgMCAxMHB4O1xuICBmb250LXNpemU6IDEzcHg7XG4gIGxpbmUtaGVpZ2h0OiAyMHB4O1xuICB3b3JkLWJyZWFrOiBicmVhay1hbGw7XG4gIHdvcmQtd3JhcDogYnJlYWstd29yZDtcbiAgd2hpdGUtc3BhY2U6IHByZTtcbiAgd2hpdGUtc3BhY2U6IHByZS13cmFwO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjVmNWY1O1xuICBib3JkZXI6IDFweCBzb2xpZCAjY2NjO1xuICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDAsIDAsIDAsIDAuMTUpO1xuICAtd2Via2l0LWJvcmRlci1yYWRpdXM6IDRweDtcbiAgICAgLW1vei1ib3JkZXItcmFkaXVzOiA0cHg7XG4gICAgICAgICAgYm9yZGVyLXJhZGl1czogNHB4O1xufVxuXG5wcmUucHJldHR5cHJpbnQge1xuICBtYXJnaW4tYm90dG9tOiAyMHB4O1xufVxuXG5wcmUgY29kZSB7XG4gIHBhZGRpbmc6IDA7XG4gIGNvbG9yOiBpbmhlcml0O1xuICB3aGl0ZS1zcGFjZTogcHJlO1xuICB3aGl0ZS1zcGFjZTogcHJlLXdyYXA7XG4gIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xuICBib3JkZXI6IDA7XG59XG5cbi5wcmUtc2Nyb2xsYWJsZSB7XG4gIG1heC1oZWlnaHQ6IDM0MHB4O1xuICBvdmVyZmxvdy15OiBzY3JvbGw7XG59XG5cbmZvcm0ge1xuICBtYXJnaW46IDAgMCAyMHB4O1xufVxuXG5maWVsZHNldCB7XG4gIHBhZGRpbmc6IDA7XG4gIG1hcmdpbjogMDtcbiAgYm9yZGVyOiAwO1xufVxuXG5sZWdlbmQge1xuICBkaXNwbGF5OiBibG9jaztcbiAgd2lkdGg6IDEwMCU7XG4gIHBhZGRpbmc6IDA7XG4gIG1hcmdpbi1ib3R0b206IDIwcHg7XG4gIGZvbnQtc2l6ZTogMjFweDtcbiAgbGluZS1oZWlnaHQ6IDQwcHg7XG4gIGNvbG9yOiAjMzMzMzMzO1xuICBib3JkZXI6IDA7XG4gIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjZTVlNWU1O1xufVxuXG5sZWdlbmQgc21hbGwge1xuICBmb250LXNpemU6IDE1cHg7XG4gIGNvbG9yOiAjOTk5OTk5O1xufVxuXG5sYWJlbCxcbmlucHV0LFxuYnV0dG9uLFxuc2VsZWN0LFxudGV4dGFyZWEge1xuICBmb250LXNpemU6IDE0cHg7XG4gIGZvbnQtd2VpZ2h0OiBub3JtYWw7XG4gIGxpbmUtaGVpZ2h0OiAyMHB4O1xufVxuXG5pbnB1dCxcbmJ1dHRvbixcbnNlbGVjdCxcbnRleHRhcmVhIHtcbiAgZm9udC1mYW1pbHk6IFwiYWF1eC1uZXh0XCIsIFwiSGVsdmV0aWNhIE5ldWUgTFQgVzA1XzU3IENvbmRcIiwgXCJIZWx2ZXRpY2EgTmV1ZVwiLCBIZWx2ZXRpY2EsIEFyaWFsLCBzYW5zLXNlcmlmO1xufVxuXG5sYWJlbCB7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICBtYXJnaW4tYm90dG9tOiA1cHg7XG59XG5cbnNlbGVjdCxcbnRleHRhcmVhLFxuaW5wdXRbdHlwZT1cInRleHRcIl0sXG5pbnB1dFt0eXBlPVwicGFzc3dvcmRcIl0sXG5pbnB1dFt0eXBlPVwiZGF0ZXRpbWVcIl0sXG5pbnB1dFt0eXBlPVwiZGF0ZXRpbWUtbG9jYWxcIl0sXG5pbnB1dFt0eXBlPVwiZGF0ZVwiXSxcbmlucHV0W3R5cGU9XCJtb250aFwiXSxcbmlucHV0W3R5cGU9XCJ0aW1lXCJdLFxuaW5wdXRbdHlwZT1cIndlZWtcIl0sXG5pbnB1dFt0eXBlPVwibnVtYmVyXCJdLFxuaW5wdXRbdHlwZT1cImVtYWlsXCJdLFxuaW5wdXRbdHlwZT1cInVybFwiXSxcbmlucHV0W3R5cGU9XCJzZWFyY2hcIl0sXG5pbnB1dFt0eXBlPVwidGVsXCJdLFxuaW5wdXRbdHlwZT1cImNvbG9yXCJdLFxuLnVuZWRpdGFibGUtaW5wdXQge1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIGhlaWdodDogMjBweDtcbiAgcGFkZGluZzogNHB4IDZweDtcbiAgbWFyZ2luLWJvdHRvbTogMTBweDtcbiAgZm9udC1zaXplOiAxNHB4O1xuICBsaW5lLWhlaWdodDogMjBweDtcbiAgY29sb3I6ICM1NTU1NTU7XG4gIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG4gIC13ZWJraXQtYm9yZGVyLXJhZGl1czogNHB4O1xuICAgICAtbW96LWJvcmRlci1yYWRpdXM6IDRweDtcbiAgICAgICAgICBib3JkZXItcmFkaXVzOiA0cHg7XG59XG5cbmlucHV0LFxudGV4dGFyZWEsXG4udW5lZGl0YWJsZS1pbnB1dCB7XG4gIHdpZHRoOiAyMDZweDtcbn1cblxudGV4dGFyZWEge1xuICBoZWlnaHQ6IGF1dG87XG59XG5cbnRleHRhcmVhLFxuaW5wdXRbdHlwZT1cInRleHRcIl0sXG5pbnB1dFt0eXBlPVwicGFzc3dvcmRcIl0sXG5pbnB1dFt0eXBlPVwiZGF0ZXRpbWVcIl0sXG5pbnB1dFt0eXBlPVwiZGF0ZXRpbWUtbG9jYWxcIl0sXG5pbnB1dFt0eXBlPVwiZGF0ZVwiXSxcbmlucHV0W3R5cGU9XCJtb250aFwiXSxcbmlucHV0W3R5cGU9XCJ0aW1lXCJdLFxuaW5wdXRbdHlwZT1cIndlZWtcIl0sXG5pbnB1dFt0eXBlPVwibnVtYmVyXCJdLFxuaW5wdXRbdHlwZT1cImVtYWlsXCJdLFxuaW5wdXRbdHlwZT1cInVybFwiXSxcbmlucHV0W3R5cGU9XCJzZWFyY2hcIl0sXG5pbnB1dFt0eXBlPVwidGVsXCJdLFxuaW5wdXRbdHlwZT1cImNvbG9yXCJdLFxuLnVuZWRpdGFibGUtaW5wdXQge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmZmZmO1xuICBib3JkZXI6IDFweCBzb2xpZCAjY2NjY2NjO1xuICAtd2Via2l0LWJveC1zaGFkb3c6IGluc2V0IDAgMXB4IDFweCByZ2JhKDAsIDAsIDAsIDAuMDc1KTtcbiAgICAgLW1vei1ib3gtc2hhZG93OiBpbnNldCAwIDFweCAxcHggcmdiYSgwLCAwLCAwLCAwLjA3NSk7XG4gICAgICAgICAgYm94LXNoYWRvdzogaW5zZXQgMCAxcHggMXB4IHJnYmEoMCwgMCwgMCwgMC4wNzUpO1xuICAtd2Via2l0LXRyYW5zaXRpb246IGJvcmRlciBsaW5lYXIgMC4ycywgYm94LXNoYWRvdyBsaW5lYXIgMC4ycztcbiAgICAgLW1vei10cmFuc2l0aW9uOiBib3JkZXIgbGluZWFyIDAuMnMsIGJveC1zaGFkb3cgbGluZWFyIDAuMnM7XG4gICAgICAgLW8tdHJhbnNpdGlvbjogYm9yZGVyIGxpbmVhciAwLjJzLCBib3gtc2hhZG93IGxpbmVhciAwLjJzO1xuICAgICAgICAgIHRyYW5zaXRpb246IGJvcmRlciBsaW5lYXIgMC4ycywgYm94LXNoYWRvdyBsaW5lYXIgMC4ycztcbn1cblxudGV4dGFyZWE6Zm9jdXMsXG5pbnB1dFt0eXBlPVwidGV4dFwiXTpmb2N1cyxcbmlucHV0W3R5cGU9XCJwYXNzd29yZFwiXTpmb2N1cyxcbmlucHV0W3R5cGU9XCJkYXRldGltZVwiXTpmb2N1cyxcbmlucHV0W3R5cGU9XCJkYXRldGltZS1sb2NhbFwiXTpmb2N1cyxcbmlucHV0W3R5cGU9XCJkYXRlXCJdOmZvY3VzLFxuaW5wdXRbdHlwZT1cIm1vbnRoXCJdOmZvY3VzLFxuaW5wdXRbdHlwZT1cInRpbWVcIl06Zm9jdXMsXG5pbnB1dFt0eXBlPVwid2Vla1wiXTpmb2N1cyxcbmlucHV0W3R5cGU9XCJudW1iZXJcIl06Zm9jdXMsXG5pbnB1dFt0eXBlPVwiZW1haWxcIl06Zm9jdXMsXG5pbnB1dFt0eXBlPVwidXJsXCJdOmZvY3VzLFxuaW5wdXRbdHlwZT1cInNlYXJjaFwiXTpmb2N1cyxcbmlucHV0W3R5cGU9XCJ0ZWxcIl06Zm9jdXMsXG5pbnB1dFt0eXBlPVwiY29sb3JcIl06Zm9jdXMsXG4udW5lZGl0YWJsZS1pbnB1dDpmb2N1cyB7XG4gIGJvcmRlci1jb2xvcjogcmdiYSg4MiwgMTY4LCAyMzYsIDAuOCk7XG4gIG91dGxpbmU6IDA7XG4gIG91dGxpbmU6IHRoaW4gZG90dGVkIFxcOTtcbiAgLyogSUU2LTkgKi9cblxuICAtd2Via2l0LWJveC1zaGFkb3c6IGluc2V0IDAgMXB4IDFweCByZ2JhKDAsIDAsIDAsIDAuMDc1KSwgMCAwIDhweCByZ2JhKDgyLCAxNjgsIDIzNiwgMC42KTtcbiAgICAgLW1vei1ib3gtc2hhZG93OiBpbnNldCAwIDFweCAxcHggcmdiYSgwLCAwLCAwLCAwLjA3NSksIDAgMCA4cHggcmdiYSg4MiwgMTY4LCAyMzYsIDAuNik7XG4gICAgICAgICAgYm94LXNoYWRvdzogaW5zZXQgMCAxcHggMXB4IHJnYmEoMCwgMCwgMCwgMC4wNzUpLCAwIDAgOHB4IHJnYmEoODIsIDE2OCwgMjM2LCAwLjYpO1xufVxuXG5pbnB1dFt0eXBlPVwicmFkaW9cIl0sXG5pbnB1dFt0eXBlPVwiY2hlY2tib3hcIl0ge1xuICBtYXJnaW46IDRweCAwIDA7XG4gIG1hcmdpbi10b3A6IDFweCBcXDk7XG4gICptYXJnaW4tdG9wOiAwO1xuICBsaW5lLWhlaWdodDogbm9ybWFsO1xufVxuXG5pbnB1dFt0eXBlPVwiZmlsZVwiXSxcbmlucHV0W3R5cGU9XCJpbWFnZVwiXSxcbmlucHV0W3R5cGU9XCJzdWJtaXRcIl0sXG5pbnB1dFt0eXBlPVwicmVzZXRcIl0sXG5pbnB1dFt0eXBlPVwiYnV0dG9uXCJdLFxuaW5wdXRbdHlwZT1cInJhZGlvXCJdLFxuaW5wdXRbdHlwZT1cImNoZWNrYm94XCJdIHtcbiAgd2lkdGg6IGF1dG87XG59XG5cbnNlbGVjdCxcbmlucHV0W3R5cGU9XCJmaWxlXCJdIHtcbiAgaGVpZ2h0OiAzMHB4O1xuICAvKiBJbiBJRTcsIHRoZSBoZWlnaHQgb2YgdGhlIHNlbGVjdCBlbGVtZW50IGNhbm5vdCBiZSBjaGFuZ2VkIGJ5IGhlaWdodCwgb25seSBmb250LXNpemUgKi9cblxuICAqbWFyZ2luLXRvcDogNHB4O1xuICAvKiBGb3IgSUU3LCBhZGQgdG9wIG1hcmdpbiB0byBhbGlnbiBzZWxlY3Qgd2l0aCBsYWJlbHMgKi9cblxuICBsaW5lLWhlaWdodDogMzBweDtcbn1cblxuc2VsZWN0IHtcbiAgd2lkdGg6IDIyMHB4O1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmZmZmO1xuICBib3JkZXI6IDFweCBzb2xpZCAjY2NjY2NjO1xufVxuXG5zZWxlY3RbbXVsdGlwbGVdLFxuc2VsZWN0W3NpemVdIHtcbiAgaGVpZ2h0OiBhdXRvO1xufVxuXG5zZWxlY3Q6Zm9jdXMsXG5pbnB1dFt0eXBlPVwiZmlsZVwiXTpmb2N1cyxcbmlucHV0W3R5cGU9XCJyYWRpb1wiXTpmb2N1cyxcbmlucHV0W3R5cGU9XCJjaGVja2JveFwiXTpmb2N1cyB7XG4gIG91dGxpbmU6IHRoaW4gZG90dGVkICMzMzM7XG4gIG91dGxpbmU6IDVweCBhdXRvIC13ZWJraXQtZm9jdXMtcmluZy1jb2xvcjtcbiAgb3V0bGluZS1vZmZzZXQ6IC0ycHg7XG59XG5cbi51bmVkaXRhYmxlLWlucHV0LFxuLnVuZWRpdGFibGUtdGV4dGFyZWEge1xuICBjb2xvcjogIzk5OTk5OTtcbiAgY3Vyc29yOiBub3QtYWxsb3dlZDtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZjZmNmYztcbiAgYm9yZGVyLWNvbG9yOiAjY2NjY2NjO1xuICAtd2Via2l0LWJveC1zaGFkb3c6IGluc2V0IDAgMXB4IDJweCByZ2JhKDAsIDAsIDAsIDAuMDI1KTtcbiAgICAgLW1vei1ib3gtc2hhZG93OiBpbnNldCAwIDFweCAycHggcmdiYSgwLCAwLCAwLCAwLjAyNSk7XG4gICAgICAgICAgYm94LXNoYWRvdzogaW5zZXQgMCAxcHggMnB4IHJnYmEoMCwgMCwgMCwgMC4wMjUpO1xufVxuXG4udW5lZGl0YWJsZS1pbnB1dCB7XG4gIG92ZXJmbG93OiBoaWRkZW47XG4gIHdoaXRlLXNwYWNlOiBub3dyYXA7XG59XG5cbi51bmVkaXRhYmxlLXRleHRhcmVhIHtcbiAgd2lkdGg6IGF1dG87XG4gIGhlaWdodDogYXV0bztcbn1cblxuaW5wdXQ6LW1vei1wbGFjZWhvbGRlcixcbnRleHRhcmVhOi1tb3otcGxhY2Vob2xkZXIge1xuICBjb2xvcjogIzk5OTk5OTtcbn1cblxuaW5wdXQ6LW1zLWlucHV0LXBsYWNlaG9sZGVyLFxudGV4dGFyZWE6LW1zLWlucHV0LXBsYWNlaG9sZGVyIHtcbiAgY29sb3I6ICM5OTk5OTk7XG59XG5cbmlucHV0Ojotd2Via2l0LWlucHV0LXBsYWNlaG9sZGVyLFxudGV4dGFyZWE6Oi13ZWJraXQtaW5wdXQtcGxhY2Vob2xkZXIge1xuICBjb2xvcjogIzk5OTk5OTtcbn1cblxuLnJhZGlvLFxuLmNoZWNrYm94IHtcbiAgbWluLWhlaWdodDogMjBweDtcbiAgcGFkZGluZy1sZWZ0OiAyMHB4O1xufVxuXG4ucmFkaW8gaW5wdXRbdHlwZT1cInJhZGlvXCJdLFxuLmNoZWNrYm94IGlucHV0W3R5cGU9XCJjaGVja2JveFwiXSB7XG4gIGZsb2F0OiBsZWZ0O1xuICBtYXJnaW4tbGVmdDogLTIwcHg7XG59XG5cbi5jb250cm9scyA+IC5yYWRpbzpmaXJzdC1jaGlsZCxcbi5jb250cm9scyA+IC5jaGVja2JveDpmaXJzdC1jaGlsZCB7XG4gIHBhZGRpbmctdG9wOiA1cHg7XG59XG5cbi5yYWRpby5pbmxpbmUsXG4uY2hlY2tib3guaW5saW5lIHtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICBwYWRkaW5nLXRvcDogNXB4O1xuICBtYXJnaW4tYm90dG9tOiAwO1xuICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xufVxuXG4ucmFkaW8uaW5saW5lICsgLnJhZGlvLmlubGluZSxcbi5jaGVja2JveC5pbmxpbmUgKyAuY2hlY2tib3guaW5saW5lIHtcbiAgbWFyZ2luLWxlZnQ6IDEwcHg7XG59XG5cbi5pbnB1dC1taW5pIHtcbiAgd2lkdGg6IDYwcHg7XG59XG5cbi5pbnB1dC1zbWFsbCB7XG4gIHdpZHRoOiA5MHB4O1xufVxuXG4uaW5wdXQtbWVkaXVtIHtcbiAgd2lkdGg6IDE1MHB4O1xufVxuXG4uaW5wdXQtbGFyZ2Uge1xuICB3aWR0aDogMjEwcHg7XG59XG5cbi5pbnB1dC14bGFyZ2Uge1xuICB3aWR0aDogMjcwcHg7XG59XG5cbi5pbnB1dC14eGxhcmdlIHtcbiAgd2lkdGg6IDUzMHB4O1xufVxuXG5pbnB1dFtjbGFzcyo9XCJzcGFuXCJdLFxuc2VsZWN0W2NsYXNzKj1cInNwYW5cIl0sXG50ZXh0YXJlYVtjbGFzcyo9XCJzcGFuXCJdLFxuLnVuZWRpdGFibGUtaW5wdXRbY2xhc3MqPVwic3BhblwiXSxcbi5yb3ctZmx1aWQgaW5wdXRbY2xhc3MqPVwic3BhblwiXSxcbi5yb3ctZmx1aWQgc2VsZWN0W2NsYXNzKj1cInNwYW5cIl0sXG4ucm93LWZsdWlkIHRleHRhcmVhW2NsYXNzKj1cInNwYW5cIl0sXG4ucm93LWZsdWlkIC51bmVkaXRhYmxlLWlucHV0W2NsYXNzKj1cInNwYW5cIl0ge1xuICBmbG9hdDogbm9uZTtcbiAgbWFyZ2luLWxlZnQ6IDA7XG59XG5cbi5pbnB1dC1hcHBlbmQgaW5wdXRbY2xhc3MqPVwic3BhblwiXSxcbi5pbnB1dC1hcHBlbmQgLnVuZWRpdGFibGUtaW5wdXRbY2xhc3MqPVwic3BhblwiXSxcbi5pbnB1dC1wcmVwZW5kIGlucHV0W2NsYXNzKj1cInNwYW5cIl0sXG4uaW5wdXQtcHJlcGVuZCAudW5lZGl0YWJsZS1pbnB1dFtjbGFzcyo9XCJzcGFuXCJdLFxuLnJvdy1mbHVpZCBpbnB1dFtjbGFzcyo9XCJzcGFuXCJdLFxuLnJvdy1mbHVpZCBzZWxlY3RbY2xhc3MqPVwic3BhblwiXSxcbi5yb3ctZmx1aWQgdGV4dGFyZWFbY2xhc3MqPVwic3BhblwiXSxcbi5yb3ctZmx1aWQgLnVuZWRpdGFibGUtaW5wdXRbY2xhc3MqPVwic3BhblwiXSxcbi5yb3ctZmx1aWQgLmlucHV0LXByZXBlbmQgW2NsYXNzKj1cInNwYW5cIl0sXG4ucm93LWZsdWlkIC5pbnB1dC1hcHBlbmQgW2NsYXNzKj1cInNwYW5cIl0ge1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG59XG5cbmlucHV0LFxudGV4dGFyZWEsXG4udW5lZGl0YWJsZS1pbnB1dCB7XG4gIG1hcmdpbi1sZWZ0OiAwO1xufVxuXG4uY29udHJvbHMtcm93IFtjbGFzcyo9XCJzcGFuXCJdICsgW2NsYXNzKj1cInNwYW5cIl0ge1xuICBtYXJnaW4tbGVmdDogMjBweDtcbn1cblxuaW5wdXQuc3BhbjEyLFxudGV4dGFyZWEuc3BhbjEyLFxuLnVuZWRpdGFibGUtaW5wdXQuc3BhbjEyIHtcbiAgd2lkdGg6IDkyNnB4O1xufVxuXG5pbnB1dC5zcGFuMTEsXG50ZXh0YXJlYS5zcGFuMTEsXG4udW5lZGl0YWJsZS1pbnB1dC5zcGFuMTEge1xuICB3aWR0aDogODQ2cHg7XG59XG5cbmlucHV0LnNwYW4xMCxcbnRleHRhcmVhLnNwYW4xMCxcbi51bmVkaXRhYmxlLWlucHV0LnNwYW4xMCB7XG4gIHdpZHRoOiA3NjZweDtcbn1cblxuaW5wdXQuc3BhbjksXG50ZXh0YXJlYS5zcGFuOSxcbi51bmVkaXRhYmxlLWlucHV0LnNwYW45IHtcbiAgd2lkdGg6IDY4NnB4O1xufVxuXG5pbnB1dC5zcGFuOCxcbnRleHRhcmVhLnNwYW44LFxuLnVuZWRpdGFibGUtaW5wdXQuc3Bhbjgge1xuICB3aWR0aDogNjA2cHg7XG59XG5cbmlucHV0LnNwYW43LFxudGV4dGFyZWEuc3BhbjcsXG4udW5lZGl0YWJsZS1pbnB1dC5zcGFuNyB7XG4gIHdpZHRoOiA1MjZweDtcbn1cblxuaW5wdXQuc3BhbjYsXG50ZXh0YXJlYS5zcGFuNixcbi51bmVkaXRhYmxlLWlucHV0LnNwYW42IHtcbiAgd2lkdGg6IDQ0NnB4O1xufVxuXG5pbnB1dC5zcGFuNSxcbnRleHRhcmVhLnNwYW41LFxuLnVuZWRpdGFibGUtaW5wdXQuc3BhbjUge1xuICB3aWR0aDogMzY2cHg7XG59XG5cbmlucHV0LnNwYW40LFxudGV4dGFyZWEuc3BhbjQsXG4udW5lZGl0YWJsZS1pbnB1dC5zcGFuNCB7XG4gIHdpZHRoOiAyODZweDtcbn1cblxuaW5wdXQuc3BhbjMsXG50ZXh0YXJlYS5zcGFuMyxcbi51bmVkaXRhYmxlLWlucHV0LnNwYW4zIHtcbiAgd2lkdGg6IDIwNnB4O1xufVxuXG5pbnB1dC5zcGFuMixcbnRleHRhcmVhLnNwYW4yLFxuLnVuZWRpdGFibGUtaW5wdXQuc3BhbjIge1xuICB3aWR0aDogMTI2cHg7XG59XG5cbmlucHV0LnNwYW4xLFxudGV4dGFyZWEuc3BhbjEsXG4udW5lZGl0YWJsZS1pbnB1dC5zcGFuMSB7XG4gIHdpZHRoOiA0NnB4O1xufVxuXG4uY29udHJvbHMtcm93IHtcbiAgKnpvb206IDE7XG59XG5cbi5jb250cm9scy1yb3c6YmVmb3JlLFxuLmNvbnRyb2xzLXJvdzphZnRlciB7XG4gIGRpc3BsYXk6IHRhYmxlO1xuICBsaW5lLWhlaWdodDogMDtcbiAgY29udGVudDogXCJcIjtcbn1cblxuLmNvbnRyb2xzLXJvdzphZnRlciB7XG4gIGNsZWFyOiBib3RoO1xufVxuXG4uY29udHJvbHMtcm93IFtjbGFzcyo9XCJzcGFuXCJdLFxuLnJvdy1mbHVpZCAuY29udHJvbHMtcm93IFtjbGFzcyo9XCJzcGFuXCJdIHtcbiAgZmxvYXQ6IGxlZnQ7XG59XG5cbi5jb250cm9scy1yb3cgLmNoZWNrYm94W2NsYXNzKj1cInNwYW5cIl0sXG4uY29udHJvbHMtcm93IC5yYWRpb1tjbGFzcyo9XCJzcGFuXCJdIHtcbiAgcGFkZGluZy10b3A6IDVweDtcbn1cblxuaW5wdXRbZGlzYWJsZWRdLFxuc2VsZWN0W2Rpc2FibGVkXSxcbnRleHRhcmVhW2Rpc2FibGVkXSxcbmlucHV0W3JlYWRvbmx5XSxcbnNlbGVjdFtyZWFkb25seV0sXG50ZXh0YXJlYVtyZWFkb25seV0ge1xuICBjdXJzb3I6IG5vdC1hbGxvd2VkO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZWVlZWVlO1xufVxuXG5pbnB1dFt0eXBlPVwicmFkaW9cIl1bZGlzYWJsZWRdLFxuaW5wdXRbdHlwZT1cImNoZWNrYm94XCJdW2Rpc2FibGVkXSxcbmlucHV0W3R5cGU9XCJyYWRpb1wiXVtyZWFkb25seV0sXG5pbnB1dFt0eXBlPVwiY2hlY2tib3hcIl1bcmVhZG9ubHldIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7XG59XG5cbi5jb250cm9sLWdyb3VwLndhcm5pbmcgLmNvbnRyb2wtbGFiZWwsXG4uY29udHJvbC1ncm91cC53YXJuaW5nIC5oZWxwLWJsb2NrLFxuLmNvbnRyb2wtZ3JvdXAud2FybmluZyAuaGVscC1pbmxpbmUge1xuICBjb2xvcjogI2MwOTg1Mztcbn1cblxuLmNvbnRyb2wtZ3JvdXAud2FybmluZyAuY2hlY2tib3gsXG4uY29udHJvbC1ncm91cC53YXJuaW5nIC5yYWRpbyxcbi5jb250cm9sLWdyb3VwLndhcm5pbmcgaW5wdXQsXG4uY29udHJvbC1ncm91cC53YXJuaW5nIHNlbGVjdCxcbi5jb250cm9sLWdyb3VwLndhcm5pbmcgdGV4dGFyZWEge1xuICBjb2xvcjogI2MwOTg1Mztcbn1cblxuLmNvbnRyb2wtZ3JvdXAud2FybmluZyBpbnB1dCxcbi5jb250cm9sLWdyb3VwLndhcm5pbmcgc2VsZWN0LFxuLmNvbnRyb2wtZ3JvdXAud2FybmluZyB0ZXh0YXJlYSB7XG4gIGJvcmRlci1jb2xvcjogI2MwOTg1MztcbiAgLXdlYmtpdC1ib3gtc2hhZG93OiBpbnNldCAwIDFweCAxcHggcmdiYSgwLCAwLCAwLCAwLjA3NSk7XG4gICAgIC1tb3otYm94LXNoYWRvdzogaW5zZXQgMCAxcHggMXB4IHJnYmEoMCwgMCwgMCwgMC4wNzUpO1xuICAgICAgICAgIGJveC1zaGFkb3c6IGluc2V0IDAgMXB4IDFweCByZ2JhKDAsIDAsIDAsIDAuMDc1KTtcbn1cblxuLmNvbnRyb2wtZ3JvdXAud2FybmluZyBpbnB1dDpmb2N1cyxcbi5jb250cm9sLWdyb3VwLndhcm5pbmcgc2VsZWN0OmZvY3VzLFxuLmNvbnRyb2wtZ3JvdXAud2FybmluZyB0ZXh0YXJlYTpmb2N1cyB7XG4gIGJvcmRlci1jb2xvcjogI2E0N2UzYztcbiAgLXdlYmtpdC1ib3gtc2hhZG93OiBpbnNldCAwIDFweCAxcHggcmdiYSgwLCAwLCAwLCAwLjA3NSksIDAgMCA2cHggI2RiYzU5ZTtcbiAgICAgLW1vei1ib3gtc2hhZG93OiBpbnNldCAwIDFweCAxcHggcmdiYSgwLCAwLCAwLCAwLjA3NSksIDAgMCA2cHggI2RiYzU5ZTtcbiAgICAgICAgICBib3gtc2hhZG93OiBpbnNldCAwIDFweCAxcHggcmdiYSgwLCAwLCAwLCAwLjA3NSksIDAgMCA2cHggI2RiYzU5ZTtcbn1cblxuLmNvbnRyb2wtZ3JvdXAud2FybmluZyAuaW5wdXQtcHJlcGVuZCAuYWRkLW9uLFxuLmNvbnRyb2wtZ3JvdXAud2FybmluZyAuaW5wdXQtYXBwZW5kIC5hZGQtb24ge1xuICBjb2xvcjogI2MwOTg1MztcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZjZjhlMztcbiAgYm9yZGVyLWNvbG9yOiAjYzA5ODUzO1xufVxuXG4uY29udHJvbC1ncm91cC5lcnJvciAuY29udHJvbC1sYWJlbCxcbi5jb250cm9sLWdyb3VwLmVycm9yIC5oZWxwLWJsb2NrLFxuLmNvbnRyb2wtZ3JvdXAuZXJyb3IgLmhlbHAtaW5saW5lIHtcbiAgY29sb3I6ICNiOTRhNDg7XG59XG5cbi5jb250cm9sLWdyb3VwLmVycm9yIC5jaGVja2JveCxcbi5jb250cm9sLWdyb3VwLmVycm9yIC5yYWRpbyxcbi5jb250cm9sLWdyb3VwLmVycm9yIGlucHV0LFxuLmNvbnRyb2wtZ3JvdXAuZXJyb3Igc2VsZWN0LFxuLmNvbnRyb2wtZ3JvdXAuZXJyb3IgdGV4dGFyZWEge1xuICBjb2xvcjogI2I5NGE0ODtcbn1cblxuLmNvbnRyb2wtZ3JvdXAuZXJyb3IgaW5wdXQsXG4uY29udHJvbC1ncm91cC5lcnJvciBzZWxlY3QsXG4uY29udHJvbC1ncm91cC5lcnJvciB0ZXh0YXJlYSB7XG4gIGJvcmRlci1jb2xvcjogI2I5NGE0ODtcbiAgLXdlYmtpdC1ib3gtc2hhZG93OiBpbnNldCAwIDFweCAxcHggcmdiYSgwLCAwLCAwLCAwLjA3NSk7XG4gICAgIC1tb3otYm94LXNoYWRvdzogaW5zZXQgMCAxcHggMXB4IHJnYmEoMCwgMCwgMCwgMC4wNzUpO1xuICAgICAgICAgIGJveC1zaGFkb3c6IGluc2V0IDAgMXB4IDFweCByZ2JhKDAsIDAsIDAsIDAuMDc1KTtcbn1cblxuLmNvbnRyb2wtZ3JvdXAuZXJyb3IgaW5wdXQ6Zm9jdXMsXG4uY29udHJvbC1ncm91cC5lcnJvciBzZWxlY3Q6Zm9jdXMsXG4uY29udHJvbC1ncm91cC5lcnJvciB0ZXh0YXJlYTpmb2N1cyB7XG4gIGJvcmRlci1jb2xvcjogIzk1M2IzOTtcbiAgLXdlYmtpdC1ib3gtc2hhZG93OiBpbnNldCAwIDFweCAxcHggcmdiYSgwLCAwLCAwLCAwLjA3NSksIDAgMCA2cHggI2Q1OTM5MjtcbiAgICAgLW1vei1ib3gtc2hhZG93OiBpbnNldCAwIDFweCAxcHggcmdiYSgwLCAwLCAwLCAwLjA3NSksIDAgMCA2cHggI2Q1OTM5MjtcbiAgICAgICAgICBib3gtc2hhZG93OiBpbnNldCAwIDFweCAxcHggcmdiYSgwLCAwLCAwLCAwLjA3NSksIDAgMCA2cHggI2Q1OTM5Mjtcbn1cblxuLmNvbnRyb2wtZ3JvdXAuZXJyb3IgLmlucHV0LXByZXBlbmQgLmFkZC1vbixcbi5jb250cm9sLWdyb3VwLmVycm9yIC5pbnB1dC1hcHBlbmQgLmFkZC1vbiB7XG4gIGNvbG9yOiAjYjk0YTQ4O1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjJkZWRlO1xuICBib3JkZXItY29sb3I6ICNiOTRhNDg7XG59XG5cbi5jb250cm9sLWdyb3VwLnN1Y2Nlc3MgLmNvbnRyb2wtbGFiZWwsXG4uY29udHJvbC1ncm91cC5zdWNjZXNzIC5oZWxwLWJsb2NrLFxuLmNvbnRyb2wtZ3JvdXAuc3VjY2VzcyAuaGVscC1pbmxpbmUge1xuICBjb2xvcjogIzQ2ODg0Nztcbn1cblxuLmNvbnRyb2wtZ3JvdXAuc3VjY2VzcyAuY2hlY2tib3gsXG4uY29udHJvbC1ncm91cC5zdWNjZXNzIC5yYWRpbyxcbi5jb250cm9sLWdyb3VwLnN1Y2Nlc3MgaW5wdXQsXG4uY29udHJvbC1ncm91cC5zdWNjZXNzIHNlbGVjdCxcbi5jb250cm9sLWdyb3VwLnN1Y2Nlc3MgdGV4dGFyZWEge1xuICBjb2xvcjogIzQ2ODg0Nztcbn1cblxuLmNvbnRyb2wtZ3JvdXAuc3VjY2VzcyBpbnB1dCxcbi5jb250cm9sLWdyb3VwLnN1Y2Nlc3Mgc2VsZWN0LFxuLmNvbnRyb2wtZ3JvdXAuc3VjY2VzcyB0ZXh0YXJlYSB7XG4gIGJvcmRlci1jb2xvcjogIzQ2ODg0NztcbiAgLXdlYmtpdC1ib3gtc2hhZG93OiBpbnNldCAwIDFweCAxcHggcmdiYSgwLCAwLCAwLCAwLjA3NSk7XG4gICAgIC1tb3otYm94LXNoYWRvdzogaW5zZXQgMCAxcHggMXB4IHJnYmEoMCwgMCwgMCwgMC4wNzUpO1xuICAgICAgICAgIGJveC1zaGFkb3c6IGluc2V0IDAgMXB4IDFweCByZ2JhKDAsIDAsIDAsIDAuMDc1KTtcbn1cblxuLmNvbnRyb2wtZ3JvdXAuc3VjY2VzcyBpbnB1dDpmb2N1cyxcbi5jb250cm9sLWdyb3VwLnN1Y2Nlc3Mgc2VsZWN0OmZvY3VzLFxuLmNvbnRyb2wtZ3JvdXAuc3VjY2VzcyB0ZXh0YXJlYTpmb2N1cyB7XG4gIGJvcmRlci1jb2xvcjogIzM1NjYzNTtcbiAgLXdlYmtpdC1ib3gtc2hhZG93OiBpbnNldCAwIDFweCAxcHggcmdiYSgwLCAwLCAwLCAwLjA3NSksIDAgMCA2cHggIzdhYmE3YjtcbiAgICAgLW1vei1ib3gtc2hhZG93OiBpbnNldCAwIDFweCAxcHggcmdiYSgwLCAwLCAwLCAwLjA3NSksIDAgMCA2cHggIzdhYmE3YjtcbiAgICAgICAgICBib3gtc2hhZG93OiBpbnNldCAwIDFweCAxcHggcmdiYSgwLCAwLCAwLCAwLjA3NSksIDAgMCA2cHggIzdhYmE3Yjtcbn1cblxuLmNvbnRyb2wtZ3JvdXAuc3VjY2VzcyAuaW5wdXQtcHJlcGVuZCAuYWRkLW9uLFxuLmNvbnRyb2wtZ3JvdXAuc3VjY2VzcyAuaW5wdXQtYXBwZW5kIC5hZGQtb24ge1xuICBjb2xvcjogIzQ2ODg0NztcbiAgYmFja2dyb3VuZC1jb2xvcjogI2RmZjBkODtcbiAgYm9yZGVyLWNvbG9yOiAjNDY4ODQ3O1xufVxuXG4uY29udHJvbC1ncm91cC5pbmZvIC5jb250cm9sLWxhYmVsLFxuLmNvbnRyb2wtZ3JvdXAuaW5mbyAuaGVscC1ibG9jayxcbi5jb250cm9sLWdyb3VwLmluZm8gLmhlbHAtaW5saW5lIHtcbiAgY29sb3I6ICMzYTg3YWQ7XG59XG5cbi5jb250cm9sLWdyb3VwLmluZm8gLmNoZWNrYm94LFxuLmNvbnRyb2wtZ3JvdXAuaW5mbyAucmFkaW8sXG4uY29udHJvbC1ncm91cC5pbmZvIGlucHV0LFxuLmNvbnRyb2wtZ3JvdXAuaW5mbyBzZWxlY3QsXG4uY29udHJvbC1ncm91cC5pbmZvIHRleHRhcmVhIHtcbiAgY29sb3I6ICMzYTg3YWQ7XG59XG5cbi5jb250cm9sLWdyb3VwLmluZm8gaW5wdXQsXG4uY29udHJvbC1ncm91cC5pbmZvIHNlbGVjdCxcbi5jb250cm9sLWdyb3VwLmluZm8gdGV4dGFyZWEge1xuICBib3JkZXItY29sb3I6ICMzYTg3YWQ7XG4gIC13ZWJraXQtYm94LXNoYWRvdzogaW5zZXQgMCAxcHggMXB4IHJnYmEoMCwgMCwgMCwgMC4wNzUpO1xuICAgICAtbW96LWJveC1zaGFkb3c6IGluc2V0IDAgMXB4IDFweCByZ2JhKDAsIDAsIDAsIDAuMDc1KTtcbiAgICAgICAgICBib3gtc2hhZG93OiBpbnNldCAwIDFweCAxcHggcmdiYSgwLCAwLCAwLCAwLjA3NSk7XG59XG5cbi5jb250cm9sLWdyb3VwLmluZm8gaW5wdXQ6Zm9jdXMsXG4uY29udHJvbC1ncm91cC5pbmZvIHNlbGVjdDpmb2N1cyxcbi5jb250cm9sLWdyb3VwLmluZm8gdGV4dGFyZWE6Zm9jdXMge1xuICBib3JkZXItY29sb3I6ICMyZDY5ODc7XG4gIC13ZWJraXQtYm94LXNoYWRvdzogaW5zZXQgMCAxcHggMXB4IHJnYmEoMCwgMCwgMCwgMC4wNzUpLCAwIDAgNnB4ICM3YWI1ZDM7XG4gICAgIC1tb3otYm94LXNoYWRvdzogaW5zZXQgMCAxcHggMXB4IHJnYmEoMCwgMCwgMCwgMC4wNzUpLCAwIDAgNnB4ICM3YWI1ZDM7XG4gICAgICAgICAgYm94LXNoYWRvdzogaW5zZXQgMCAxcHggMXB4IHJnYmEoMCwgMCwgMCwgMC4wNzUpLCAwIDAgNnB4ICM3YWI1ZDM7XG59XG5cbi5jb250cm9sLWdyb3VwLmluZm8gLmlucHV0LXByZXBlbmQgLmFkZC1vbixcbi5jb250cm9sLWdyb3VwLmluZm8gLmlucHV0LWFwcGVuZCAuYWRkLW9uIHtcbiAgY29sb3I6ICMzYTg3YWQ7XG4gIGJhY2tncm91bmQtY29sb3I6ICNkOWVkZjc7XG4gIGJvcmRlci1jb2xvcjogIzNhODdhZDtcbn1cblxuaW5wdXQ6Zm9jdXM6aW52YWxpZCxcbnRleHRhcmVhOmZvY3VzOmludmFsaWQsXG5zZWxlY3Q6Zm9jdXM6aW52YWxpZCB7XG4gIGNvbG9yOiAjYjk0YTQ4O1xuICBib3JkZXItY29sb3I6ICNlZTVmNWI7XG59XG5cbmlucHV0OmZvY3VzOmludmFsaWQ6Zm9jdXMsXG50ZXh0YXJlYTpmb2N1czppbnZhbGlkOmZvY3VzLFxuc2VsZWN0OmZvY3VzOmludmFsaWQ6Zm9jdXMge1xuICBib3JkZXItY29sb3I6ICNlOTMyMmQ7XG4gIC13ZWJraXQtYm94LXNoYWRvdzogMCAwIDZweCAjZjhiOWI3O1xuICAgICAtbW96LWJveC1zaGFkb3c6IDAgMCA2cHggI2Y4YjliNztcbiAgICAgICAgICBib3gtc2hhZG93OiAwIDAgNnB4ICNmOGI5Yjc7XG59XG5cbi5mb3JtLWFjdGlvbnMge1xuICBwYWRkaW5nOiAxOXB4IDIwcHggMjBweDtcbiAgbWFyZ2luLXRvcDogMjBweDtcbiAgbWFyZ2luLWJvdHRvbTogMjBweDtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2Y1ZjVmNTtcbiAgYm9yZGVyLXRvcDogMXB4IHNvbGlkICNlNWU1ZTU7XG4gICp6b29tOiAxO1xufVxuXG4uZm9ybS1hY3Rpb25zOmJlZm9yZSxcbi5mb3JtLWFjdGlvbnM6YWZ0ZXIge1xuICBkaXNwbGF5OiB0YWJsZTtcbiAgbGluZS1oZWlnaHQ6IDA7XG4gIGNvbnRlbnQ6IFwiXCI7XG59XG5cbi5mb3JtLWFjdGlvbnM6YWZ0ZXIge1xuICBjbGVhcjogYm90aDtcbn1cblxuLmhlbHAtYmxvY2ssXG4uaGVscC1pbmxpbmUge1xuICBjb2xvcjogIzU5NTk1OTtcbn1cblxuLmhlbHAtYmxvY2sge1xuICBkaXNwbGF5OiBibG9jaztcbiAgbWFyZ2luLWJvdHRvbTogMTBweDtcbn1cblxuLmhlbHAtaW5saW5lIHtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAqZGlzcGxheTogaW5saW5lO1xuICBwYWRkaW5nLWxlZnQ6IDVweDtcbiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbiAgKnpvb206IDE7XG59XG5cbi5pbnB1dC1hcHBlbmQsXG4uaW5wdXQtcHJlcGVuZCB7XG4gIG1hcmdpbi1ib3R0b206IDVweDtcbiAgZm9udC1zaXplOiAwO1xuICB3aGl0ZS1zcGFjZTogbm93cmFwO1xufVxuXG4uaW5wdXQtYXBwZW5kIGlucHV0LFxuLmlucHV0LXByZXBlbmQgaW5wdXQsXG4uaW5wdXQtYXBwZW5kIHNlbGVjdCxcbi5pbnB1dC1wcmVwZW5kIHNlbGVjdCxcbi5pbnB1dC1hcHBlbmQgLnVuZWRpdGFibGUtaW5wdXQsXG4uaW5wdXQtcHJlcGVuZCAudW5lZGl0YWJsZS1pbnB1dCxcbi5pbnB1dC1hcHBlbmQgLmRyb3Bkb3duLW1lbnUsXG4uaW5wdXQtcHJlcGVuZCAuZHJvcGRvd24tbWVudSB7XG4gIGZvbnQtc2l6ZTogMTRweDtcbn1cblxuLmlucHV0LWFwcGVuZCBpbnB1dCxcbi5pbnB1dC1wcmVwZW5kIGlucHV0LFxuLmlucHV0LWFwcGVuZCBzZWxlY3QsXG4uaW5wdXQtcHJlcGVuZCBzZWxlY3QsXG4uaW5wdXQtYXBwZW5kIC51bmVkaXRhYmxlLWlucHV0LFxuLmlucHV0LXByZXBlbmQgLnVuZWRpdGFibGUtaW5wdXQge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIG1hcmdpbi1ib3R0b206IDA7XG4gICptYXJnaW4tbGVmdDogMDtcbiAgdmVydGljYWwtYWxpZ246IHRvcDtcbiAgLXdlYmtpdC1ib3JkZXItcmFkaXVzOiAwIDRweCA0cHggMDtcbiAgICAgLW1vei1ib3JkZXItcmFkaXVzOiAwIDRweCA0cHggMDtcbiAgICAgICAgICBib3JkZXItcmFkaXVzOiAwIDRweCA0cHggMDtcbn1cblxuLmlucHV0LWFwcGVuZCBpbnB1dDpmb2N1cyxcbi5pbnB1dC1wcmVwZW5kIGlucHV0OmZvY3VzLFxuLmlucHV0LWFwcGVuZCBzZWxlY3Q6Zm9jdXMsXG4uaW5wdXQtcHJlcGVuZCBzZWxlY3Q6Zm9jdXMsXG4uaW5wdXQtYXBwZW5kIC51bmVkaXRhYmxlLWlucHV0OmZvY3VzLFxuLmlucHV0LXByZXBlbmQgLnVuZWRpdGFibGUtaW5wdXQ6Zm9jdXMge1xuICB6LWluZGV4OiAyO1xufVxuXG4uaW5wdXQtYXBwZW5kIC5hZGQtb24sXG4uaW5wdXQtcHJlcGVuZCAuYWRkLW9uIHtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICB3aWR0aDogYXV0bztcbiAgaGVpZ2h0OiAyMHB4O1xuICBtaW4td2lkdGg6IDE2cHg7XG4gIHBhZGRpbmc6IDRweCA1cHg7XG4gIGZvbnQtc2l6ZTogMTRweDtcbiAgZm9udC13ZWlnaHQ6IG5vcm1hbDtcbiAgbGluZS1oZWlnaHQ6IDIwcHg7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgdGV4dC1zaGFkb3c6IDAgMXB4IDAgI2ZmZmZmZjtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2VlZWVlZTtcbiAgYm9yZGVyOiAxcHggc29saWQgI2NjYztcbn1cblxuLmlucHV0LWFwcGVuZCAuYWRkLW9uLFxuLmlucHV0LXByZXBlbmQgLmFkZC1vbixcbi5pbnB1dC1hcHBlbmQgLmJ0bixcbi5pbnB1dC1wcmVwZW5kIC5idG4sXG4uaW5wdXQtYXBwZW5kIC5idG4tZ3JvdXAgPiAuZHJvcGRvd24tdG9nZ2xlLFxuLmlucHV0LXByZXBlbmQgLmJ0bi1ncm91cCA+IC5kcm9wZG93bi10b2dnbGUge1xuICB2ZXJ0aWNhbC1hbGlnbjogdG9wO1xuICAtd2Via2l0LWJvcmRlci1yYWRpdXM6IDA7XG4gICAgIC1tb3otYm9yZGVyLXJhZGl1czogMDtcbiAgICAgICAgICBib3JkZXItcmFkaXVzOiAwO1xufVxuXG4uaW5wdXQtYXBwZW5kIC5hY3RpdmUsXG4uaW5wdXQtcHJlcGVuZCAuYWN0aXZlIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2E5ZGJhOTtcbiAgYm9yZGVyLWNvbG9yOiAjNDZhNTQ2O1xufVxuXG4uaW5wdXQtcHJlcGVuZCAuYWRkLW9uLFxuLmlucHV0LXByZXBlbmQgLmJ0biB7XG4gIG1hcmdpbi1yaWdodDogLTFweDtcbn1cblxuLmlucHV0LXByZXBlbmQgLmFkZC1vbjpmaXJzdC1jaGlsZCxcbi5pbnB1dC1wcmVwZW5kIC5idG46Zmlyc3QtY2hpbGQge1xuICAtd2Via2l0LWJvcmRlci1yYWRpdXM6IDRweCAwIDAgNHB4O1xuICAgICAtbW96LWJvcmRlci1yYWRpdXM6IDRweCAwIDAgNHB4O1xuICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDRweCAwIDAgNHB4O1xufVxuXG4uaW5wdXQtYXBwZW5kIGlucHV0LFxuLmlucHV0LWFwcGVuZCBzZWxlY3QsXG4uaW5wdXQtYXBwZW5kIC51bmVkaXRhYmxlLWlucHV0IHtcbiAgLXdlYmtpdC1ib3JkZXItcmFkaXVzOiA0cHggMCAwIDRweDtcbiAgICAgLW1vei1ib3JkZXItcmFkaXVzOiA0cHggMCAwIDRweDtcbiAgICAgICAgICBib3JkZXItcmFkaXVzOiA0cHggMCAwIDRweDtcbn1cblxuLmlucHV0LWFwcGVuZCBpbnB1dCArIC5idG4tZ3JvdXAgLmJ0bjpsYXN0LWNoaWxkLFxuLmlucHV0LWFwcGVuZCBzZWxlY3QgKyAuYnRuLWdyb3VwIC5idG46bGFzdC1jaGlsZCxcbi5pbnB1dC1hcHBlbmQgLnVuZWRpdGFibGUtaW5wdXQgKyAuYnRuLWdyb3VwIC5idG46bGFzdC1jaGlsZCB7XG4gIC13ZWJraXQtYm9yZGVyLXJhZGl1czogMCA0cHggNHB4IDA7XG4gICAgIC1tb3otYm9yZGVyLXJhZGl1czogMCA0cHggNHB4IDA7XG4gICAgICAgICAgYm9yZGVyLXJhZGl1czogMCA0cHggNHB4IDA7XG59XG5cbi5pbnB1dC1hcHBlbmQgLmFkZC1vbixcbi5pbnB1dC1hcHBlbmQgLmJ0bixcbi5pbnB1dC1hcHBlbmQgLmJ0bi1ncm91cCB7XG4gIG1hcmdpbi1sZWZ0OiAtMXB4O1xufVxuXG4uaW5wdXQtYXBwZW5kIC5hZGQtb246bGFzdC1jaGlsZCxcbi5pbnB1dC1hcHBlbmQgLmJ0bjpsYXN0LWNoaWxkLFxuLmlucHV0LWFwcGVuZCAuYnRuLWdyb3VwOmxhc3QtY2hpbGQgPiAuZHJvcGRvd24tdG9nZ2xlIHtcbiAgLXdlYmtpdC1ib3JkZXItcmFkaXVzOiAwIDRweCA0cHggMDtcbiAgICAgLW1vei1ib3JkZXItcmFkaXVzOiAwIDRweCA0cHggMDtcbiAgICAgICAgICBib3JkZXItcmFkaXVzOiAwIDRweCA0cHggMDtcbn1cblxuLmlucHV0LXByZXBlbmQuaW5wdXQtYXBwZW5kIGlucHV0LFxuLmlucHV0LXByZXBlbmQuaW5wdXQtYXBwZW5kIHNlbGVjdCxcbi5pbnB1dC1wcmVwZW5kLmlucHV0LWFwcGVuZCAudW5lZGl0YWJsZS1pbnB1dCB7XG4gIC13ZWJraXQtYm9yZGVyLXJhZGl1czogMDtcbiAgICAgLW1vei1ib3JkZXItcmFkaXVzOiAwO1xuICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDA7XG59XG5cbi5pbnB1dC1wcmVwZW5kLmlucHV0LWFwcGVuZCBpbnB1dCArIC5idG4tZ3JvdXAgLmJ0bixcbi5pbnB1dC1wcmVwZW5kLmlucHV0LWFwcGVuZCBzZWxlY3QgKyAuYnRuLWdyb3VwIC5idG4sXG4uaW5wdXQtcHJlcGVuZC5pbnB1dC1hcHBlbmQgLnVuZWRpdGFibGUtaW5wdXQgKyAuYnRuLWdyb3VwIC5idG4ge1xuICAtd2Via2l0LWJvcmRlci1yYWRpdXM6IDAgNHB4IDRweCAwO1xuICAgICAtbW96LWJvcmRlci1yYWRpdXM6IDAgNHB4IDRweCAwO1xuICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDAgNHB4IDRweCAwO1xufVxuXG4uaW5wdXQtcHJlcGVuZC5pbnB1dC1hcHBlbmQgLmFkZC1vbjpmaXJzdC1jaGlsZCxcbi5pbnB1dC1wcmVwZW5kLmlucHV0LWFwcGVuZCAuYnRuOmZpcnN0LWNoaWxkIHtcbiAgbWFyZ2luLXJpZ2h0OiAtMXB4O1xuICAtd2Via2l0LWJvcmRlci1yYWRpdXM6IDRweCAwIDAgNHB4O1xuICAgICAtbW96LWJvcmRlci1yYWRpdXM6IDRweCAwIDAgNHB4O1xuICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDRweCAwIDAgNHB4O1xufVxuXG4uaW5wdXQtcHJlcGVuZC5pbnB1dC1hcHBlbmQgLmFkZC1vbjpsYXN0LWNoaWxkLFxuLmlucHV0LXByZXBlbmQuaW5wdXQtYXBwZW5kIC5idG46bGFzdC1jaGlsZCB7XG4gIG1hcmdpbi1sZWZ0OiAtMXB4O1xuICAtd2Via2l0LWJvcmRlci1yYWRpdXM6IDAgNHB4IDRweCAwO1xuICAgICAtbW96LWJvcmRlci1yYWRpdXM6IDAgNHB4IDRweCAwO1xuICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDAgNHB4IDRweCAwO1xufVxuXG4uaW5wdXQtcHJlcGVuZC5pbnB1dC1hcHBlbmQgLmJ0bi1ncm91cDpmaXJzdC1jaGlsZCB7XG4gIG1hcmdpbi1sZWZ0OiAwO1xufVxuXG5pbnB1dC5zZWFyY2gtcXVlcnkge1xuICBwYWRkaW5nLXJpZ2h0OiAxNHB4O1xuICBwYWRkaW5nLXJpZ2h0OiA0cHggXFw5O1xuICBwYWRkaW5nLWxlZnQ6IDE0cHg7XG4gIHBhZGRpbmctbGVmdDogNHB4IFxcOTtcbiAgLyogSUU3LTggZG9lc24ndCBoYXZlIGJvcmRlci1yYWRpdXMsIHNvIGRvbid0IGluZGVudCB0aGUgcGFkZGluZyAqL1xuXG4gIG1hcmdpbi1ib3R0b206IDA7XG4gIC13ZWJraXQtYm9yZGVyLXJhZGl1czogMTVweDtcbiAgICAgLW1vei1ib3JkZXItcmFkaXVzOiAxNXB4O1xuICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDE1cHg7XG59XG5cbi8qIEFsbG93IGZvciBpbnB1dCBwcmVwZW5kL2FwcGVuZCBpbiBzZWFyY2ggZm9ybXMgKi9cblxuLmZvcm0tc2VhcmNoIC5pbnB1dC1hcHBlbmQgLnNlYXJjaC1xdWVyeSxcbi5mb3JtLXNlYXJjaCAuaW5wdXQtcHJlcGVuZCAuc2VhcmNoLXF1ZXJ5IHtcbiAgLXdlYmtpdC1ib3JkZXItcmFkaXVzOiAwO1xuICAgICAtbW96LWJvcmRlci1yYWRpdXM6IDA7XG4gICAgICAgICAgYm9yZGVyLXJhZGl1czogMDtcbn1cblxuLmZvcm0tc2VhcmNoIC5pbnB1dC1hcHBlbmQgLnNlYXJjaC1xdWVyeSB7XG4gIC13ZWJraXQtYm9yZGVyLXJhZGl1czogMTRweCAwIDAgMTRweDtcbiAgICAgLW1vei1ib3JkZXItcmFkaXVzOiAxNHB4IDAgMCAxNHB4O1xuICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDE0cHggMCAwIDE0cHg7XG59XG5cbi5mb3JtLXNlYXJjaCAuaW5wdXQtYXBwZW5kIC5idG4ge1xuICAtd2Via2l0LWJvcmRlci1yYWRpdXM6IDAgMTRweCAxNHB4IDA7XG4gICAgIC1tb3otYm9yZGVyLXJhZGl1czogMCAxNHB4IDE0cHggMDtcbiAgICAgICAgICBib3JkZXItcmFkaXVzOiAwIDE0cHggMTRweCAwO1xufVxuXG4uZm9ybS1zZWFyY2ggLmlucHV0LXByZXBlbmQgLnNlYXJjaC1xdWVyeSB7XG4gIC13ZWJraXQtYm9yZGVyLXJhZGl1czogMCAxNHB4IDE0cHggMDtcbiAgICAgLW1vei1ib3JkZXItcmFkaXVzOiAwIDE0cHggMTRweCAwO1xuICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDAgMTRweCAxNHB4IDA7XG59XG5cbi5mb3JtLXNlYXJjaCAuaW5wdXQtcHJlcGVuZCAuYnRuIHtcbiAgLXdlYmtpdC1ib3JkZXItcmFkaXVzOiAxNHB4IDAgMCAxNHB4O1xuICAgICAtbW96LWJvcmRlci1yYWRpdXM6IDE0cHggMCAwIDE0cHg7XG4gICAgICAgICAgYm9yZGVyLXJhZGl1czogMTRweCAwIDAgMTRweDtcbn1cblxuLmZvcm0tc2VhcmNoIGlucHV0LFxuLmZvcm0taW5saW5lIGlucHV0LFxuLmZvcm0taG9yaXpvbnRhbCBpbnB1dCxcbi5mb3JtLXNlYXJjaCB0ZXh0YXJlYSxcbi5mb3JtLWlubGluZSB0ZXh0YXJlYSxcbi5mb3JtLWhvcml6b250YWwgdGV4dGFyZWEsXG4uZm9ybS1zZWFyY2ggc2VsZWN0LFxuLmZvcm0taW5saW5lIHNlbGVjdCxcbi5mb3JtLWhvcml6b250YWwgc2VsZWN0LFxuLmZvcm0tc2VhcmNoIC5oZWxwLWlubGluZSxcbi5mb3JtLWlubGluZSAuaGVscC1pbmxpbmUsXG4uZm9ybS1ob3Jpem9udGFsIC5oZWxwLWlubGluZSxcbi5mb3JtLXNlYXJjaCAudW5lZGl0YWJsZS1pbnB1dCxcbi5mb3JtLWlubGluZSAudW5lZGl0YWJsZS1pbnB1dCxcbi5mb3JtLWhvcml6b250YWwgLnVuZWRpdGFibGUtaW5wdXQsXG4uZm9ybS1zZWFyY2ggLmlucHV0LXByZXBlbmQsXG4uZm9ybS1pbmxpbmUgLmlucHV0LXByZXBlbmQsXG4uZm9ybS1ob3Jpem9udGFsIC5pbnB1dC1wcmVwZW5kLFxuLmZvcm0tc2VhcmNoIC5pbnB1dC1hcHBlbmQsXG4uZm9ybS1pbmxpbmUgLmlucHV0LWFwcGVuZCxcbi5mb3JtLWhvcml6b250YWwgLmlucHV0LWFwcGVuZCB7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgKmRpc3BsYXk6IGlubGluZTtcbiAgbWFyZ2luLWJvdHRvbTogMDtcbiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbiAgKnpvb206IDE7XG59XG5cbi5mb3JtLXNlYXJjaCAuaGlkZSxcbi5mb3JtLWlubGluZSAuaGlkZSxcbi5mb3JtLWhvcml6b250YWwgLmhpZGUge1xuICBkaXNwbGF5OiBub25lO1xufVxuXG4uZm9ybS1zZWFyY2ggbGFiZWwsXG4uZm9ybS1pbmxpbmUgbGFiZWwsXG4uZm9ybS1zZWFyY2ggLmJ0bi1ncm91cCxcbi5mb3JtLWlubGluZSAuYnRuLWdyb3VwIHtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xufVxuXG4uZm9ybS1zZWFyY2ggLmlucHV0LWFwcGVuZCxcbi5mb3JtLWlubGluZSAuaW5wdXQtYXBwZW5kLFxuLmZvcm0tc2VhcmNoIC5pbnB1dC1wcmVwZW5kLFxuLmZvcm0taW5saW5lIC5pbnB1dC1wcmVwZW5kIHtcbiAgbWFyZ2luLWJvdHRvbTogMDtcbn1cblxuLmZvcm0tc2VhcmNoIC5yYWRpbyxcbi5mb3JtLXNlYXJjaCAuY2hlY2tib3gsXG4uZm9ybS1pbmxpbmUgLnJhZGlvLFxuLmZvcm0taW5saW5lIC5jaGVja2JveCB7XG4gIHBhZGRpbmctbGVmdDogMDtcbiAgbWFyZ2luLWJvdHRvbTogMDtcbiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbn1cblxuLmZvcm0tc2VhcmNoIC5yYWRpbyBpbnB1dFt0eXBlPVwicmFkaW9cIl0sXG4uZm9ybS1zZWFyY2ggLmNoZWNrYm94IGlucHV0W3R5cGU9XCJjaGVja2JveFwiXSxcbi5mb3JtLWlubGluZSAucmFkaW8gaW5wdXRbdHlwZT1cInJhZGlvXCJdLFxuLmZvcm0taW5saW5lIC5jaGVja2JveCBpbnB1dFt0eXBlPVwiY2hlY2tib3hcIl0ge1xuICBmbG9hdDogbGVmdDtcbiAgbWFyZ2luLXJpZ2h0OiAzcHg7XG4gIG1hcmdpbi1sZWZ0OiAwO1xufVxuXG4uY29udHJvbC1ncm91cCB7XG4gIG1hcmdpbi1ib3R0b206IDEwcHg7XG59XG5cbmxlZ2VuZCArIC5jb250cm9sLWdyb3VwIHtcbiAgbWFyZ2luLXRvcDogMjBweDtcbiAgLXdlYmtpdC1tYXJnaW4tdG9wLWNvbGxhcHNlOiBzZXBhcmF0ZTtcbn1cblxuLmZvcm0taG9yaXpvbnRhbCAuY29udHJvbC1ncm91cCB7XG4gIG1hcmdpbi1ib3R0b206IDIwcHg7XG4gICp6b29tOiAxO1xufVxuXG4uZm9ybS1ob3Jpem9udGFsIC5jb250cm9sLWdyb3VwOmJlZm9yZSxcbi5mb3JtLWhvcml6b250YWwgLmNvbnRyb2wtZ3JvdXA6YWZ0ZXIge1xuICBkaXNwbGF5OiB0YWJsZTtcbiAgbGluZS1oZWlnaHQ6IDA7XG4gIGNvbnRlbnQ6IFwiXCI7XG59XG5cbi5mb3JtLWhvcml6b250YWwgLmNvbnRyb2wtZ3JvdXA6YWZ0ZXIge1xuICBjbGVhcjogYm90aDtcbn1cblxuLmZvcm0taG9yaXpvbnRhbCAuY29udHJvbC1sYWJlbCB7XG4gIGZsb2F0OiBsZWZ0O1xuICB3aWR0aDogMTYwcHg7XG4gIHBhZGRpbmctdG9wOiA1cHg7XG4gIHRleHQtYWxpZ246IHJpZ2h0O1xufVxuXG4uZm9ybS1ob3Jpem9udGFsIC5jb250cm9scyB7XG4gICpkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICpwYWRkaW5nLWxlZnQ6IDIwcHg7XG4gIG1hcmdpbi1sZWZ0OiAxODBweDtcbiAgKm1hcmdpbi1sZWZ0OiAwO1xufVxuXG4uZm9ybS1ob3Jpem9udGFsIC5jb250cm9sczpmaXJzdC1jaGlsZCB7XG4gICpwYWRkaW5nLWxlZnQ6IDE4MHB4O1xufVxuXG4uZm9ybS1ob3Jpem9udGFsIC5oZWxwLWJsb2NrIHtcbiAgbWFyZ2luLWJvdHRvbTogMDtcbn1cblxuLmZvcm0taG9yaXpvbnRhbCBpbnB1dCArIC5oZWxwLWJsb2NrLFxuLmZvcm0taG9yaXpvbnRhbCBzZWxlY3QgKyAuaGVscC1ibG9jayxcbi5mb3JtLWhvcml6b250YWwgdGV4dGFyZWEgKyAuaGVscC1ibG9jayxcbi5mb3JtLWhvcml6b250YWwgLnVuZWRpdGFibGUtaW5wdXQgKyAuaGVscC1ibG9jayxcbi5mb3JtLWhvcml6b250YWwgLmlucHV0LXByZXBlbmQgKyAuaGVscC1ibG9jayxcbi5mb3JtLWhvcml6b250YWwgLmlucHV0LWFwcGVuZCArIC5oZWxwLWJsb2NrIHtcbiAgbWFyZ2luLXRvcDogMTBweDtcbn1cblxuLmZvcm0taG9yaXpvbnRhbCAuZm9ybS1hY3Rpb25zIHtcbiAgcGFkZGluZy1sZWZ0OiAxODBweDtcbn1cblxudGFibGUge1xuICBtYXgtd2lkdGg6IDEwMCU7XG4gIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xuICBib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlO1xuICBib3JkZXItc3BhY2luZzogMDtcbn1cblxuLnRhYmxlIHtcbiAgd2lkdGg6IDEwMCU7XG4gIG1hcmdpbi1ib3R0b206IDIwcHg7XG59XG5cbi50YWJsZSB0aCxcbi50YWJsZSB0ZCB7XG4gIHBhZGRpbmc6IDhweDtcbiAgbGluZS1oZWlnaHQ6IDIwcHg7XG4gIHRleHQtYWxpZ246IGxlZnQ7XG4gIHZlcnRpY2FsLWFsaWduOiB0b3A7XG4gIGJvcmRlci10b3A6IDFweCBzb2xpZCAjZGRkZGRkO1xufVxuXG4udGFibGUgdGgge1xuICBmb250LXdlaWdodDogYm9sZDtcbn1cblxuLnRhYmxlIHRoZWFkIHRoIHtcbiAgdmVydGljYWwtYWxpZ246IGJvdHRvbTtcbn1cblxuLnRhYmxlIGNhcHRpb24gKyB0aGVhZCB0cjpmaXJzdC1jaGlsZCB0aCxcbi50YWJsZSBjYXB0aW9uICsgdGhlYWQgdHI6Zmlyc3QtY2hpbGQgdGQsXG4udGFibGUgY29sZ3JvdXAgKyB0aGVhZCB0cjpmaXJzdC1jaGlsZCB0aCxcbi50YWJsZSBjb2xncm91cCArIHRoZWFkIHRyOmZpcnN0LWNoaWxkIHRkLFxuLnRhYmxlIHRoZWFkOmZpcnN0LWNoaWxkIHRyOmZpcnN0LWNoaWxkIHRoLFxuLnRhYmxlIHRoZWFkOmZpcnN0LWNoaWxkIHRyOmZpcnN0LWNoaWxkIHRkIHtcbiAgYm9yZGVyLXRvcDogMDtcbn1cblxuLnRhYmxlIHRib2R5ICsgdGJvZHkge1xuICBib3JkZXItdG9wOiAycHggc29saWQgI2RkZGRkZDtcbn1cblxuLnRhYmxlIC50YWJsZSB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmZmZmY7XG59XG5cbi50YWJsZS1jb25kZW5zZWQgdGgsXG4udGFibGUtY29uZGVuc2VkIHRkIHtcbiAgcGFkZGluZzogNHB4IDVweDtcbn1cblxuLnRhYmxlLWJvcmRlcmVkIHtcbiAgYm9yZGVyOiAxcHggc29saWQgI2RkZGRkZDtcbiAgYm9yZGVyLWNvbGxhcHNlOiBzZXBhcmF0ZTtcbiAgKmJvcmRlci1jb2xsYXBzZTogY29sbGFwc2U7XG4gIGJvcmRlci1sZWZ0OiAwO1xuICAtd2Via2l0LWJvcmRlci1yYWRpdXM6IDRweDtcbiAgICAgLW1vei1ib3JkZXItcmFkaXVzOiA0cHg7XG4gICAgICAgICAgYm9yZGVyLXJhZGl1czogNHB4O1xufVxuXG4udGFibGUtYm9yZGVyZWQgdGgsXG4udGFibGUtYm9yZGVyZWQgdGQge1xuICBib3JkZXItbGVmdDogMXB4IHNvbGlkICNkZGRkZGQ7XG59XG5cbi50YWJsZS1ib3JkZXJlZCBjYXB0aW9uICsgdGhlYWQgdHI6Zmlyc3QtY2hpbGQgdGgsXG4udGFibGUtYm9yZGVyZWQgY2FwdGlvbiArIHRib2R5IHRyOmZpcnN0LWNoaWxkIHRoLFxuLnRhYmxlLWJvcmRlcmVkIGNhcHRpb24gKyB0Ym9keSB0cjpmaXJzdC1jaGlsZCB0ZCxcbi50YWJsZS1ib3JkZXJlZCBjb2xncm91cCArIHRoZWFkIHRyOmZpcnN0LWNoaWxkIHRoLFxuLnRhYmxlLWJvcmRlcmVkIGNvbGdyb3VwICsgdGJvZHkgdHI6Zmlyc3QtY2hpbGQgdGgsXG4udGFibGUtYm9yZGVyZWQgY29sZ3JvdXAgKyB0Ym9keSB0cjpmaXJzdC1jaGlsZCB0ZCxcbi50YWJsZS1ib3JkZXJlZCB0aGVhZDpmaXJzdC1jaGlsZCB0cjpmaXJzdC1jaGlsZCB0aCxcbi50YWJsZS1ib3JkZXJlZCB0Ym9keTpmaXJzdC1jaGlsZCB0cjpmaXJzdC1jaGlsZCB0aCxcbi50YWJsZS1ib3JkZXJlZCB0Ym9keTpmaXJzdC1jaGlsZCB0cjpmaXJzdC1jaGlsZCB0ZCB7XG4gIGJvcmRlci10b3A6IDA7XG59XG5cbi50YWJsZS1ib3JkZXJlZCB0aGVhZDpmaXJzdC1jaGlsZCB0cjpmaXJzdC1jaGlsZCA+IHRoOmZpcnN0LWNoaWxkLFxuLnRhYmxlLWJvcmRlcmVkIHRib2R5OmZpcnN0LWNoaWxkIHRyOmZpcnN0LWNoaWxkID4gdGQ6Zmlyc3QtY2hpbGQge1xuICAtd2Via2l0LWJvcmRlci10b3AtbGVmdC1yYWRpdXM6IDRweDtcbiAgICAgICAgICBib3JkZXItdG9wLWxlZnQtcmFkaXVzOiA0cHg7XG4gIC1tb3otYm9yZGVyLXJhZGl1cy10b3BsZWZ0OiA0cHg7XG59XG5cbi50YWJsZS1ib3JkZXJlZCB0aGVhZDpmaXJzdC1jaGlsZCB0cjpmaXJzdC1jaGlsZCA+IHRoOmxhc3QtY2hpbGQsXG4udGFibGUtYm9yZGVyZWQgdGJvZHk6Zmlyc3QtY2hpbGQgdHI6Zmlyc3QtY2hpbGQgPiB0ZDpsYXN0LWNoaWxkIHtcbiAgLXdlYmtpdC1ib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogNHB4O1xuICAgICAgICAgIGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiA0cHg7XG4gIC1tb3otYm9yZGVyLXJhZGl1cy10b3ByaWdodDogNHB4O1xufVxuXG4udGFibGUtYm9yZGVyZWQgdGhlYWQ6bGFzdC1jaGlsZCB0cjpsYXN0LWNoaWxkID4gdGg6Zmlyc3QtY2hpbGQsXG4udGFibGUtYm9yZGVyZWQgdGJvZHk6bGFzdC1jaGlsZCB0cjpsYXN0LWNoaWxkID4gdGQ6Zmlyc3QtY2hpbGQsXG4udGFibGUtYm9yZGVyZWQgdGZvb3Q6bGFzdC1jaGlsZCB0cjpsYXN0LWNoaWxkID4gdGQ6Zmlyc3QtY2hpbGQge1xuICAtd2Via2l0LWJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6IDRweDtcbiAgICAgICAgICBib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOiA0cHg7XG4gIC1tb3otYm9yZGVyLXJhZGl1cy1ib3R0b21sZWZ0OiA0cHg7XG59XG5cbi50YWJsZS1ib3JkZXJlZCB0aGVhZDpsYXN0LWNoaWxkIHRyOmxhc3QtY2hpbGQgPiB0aDpsYXN0LWNoaWxkLFxuLnRhYmxlLWJvcmRlcmVkIHRib2R5Omxhc3QtY2hpbGQgdHI6bGFzdC1jaGlsZCA+IHRkOmxhc3QtY2hpbGQsXG4udGFibGUtYm9yZGVyZWQgdGZvb3Q6bGFzdC1jaGlsZCB0cjpsYXN0LWNoaWxkID4gdGQ6bGFzdC1jaGlsZCB7XG4gIC13ZWJraXQtYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6IDRweDtcbiAgICAgICAgICBib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czogNHB4O1xuICAtbW96LWJvcmRlci1yYWRpdXMtYm90dG9tcmlnaHQ6IDRweDtcbn1cblxuLnRhYmxlLWJvcmRlcmVkIHRmb290ICsgdGJvZHk6bGFzdC1jaGlsZCB0cjpsYXN0LWNoaWxkIHRkOmZpcnN0LWNoaWxkIHtcbiAgLXdlYmtpdC1ib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOiAwO1xuICAgICAgICAgIGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6IDA7XG4gIC1tb3otYm9yZGVyLXJhZGl1cy1ib3R0b21sZWZ0OiAwO1xufVxuXG4udGFibGUtYm9yZGVyZWQgdGZvb3QgKyB0Ym9keTpsYXN0LWNoaWxkIHRyOmxhc3QtY2hpbGQgdGQ6bGFzdC1jaGlsZCB7XG4gIC13ZWJraXQtYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6IDA7XG4gICAgICAgICAgYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6IDA7XG4gIC1tb3otYm9yZGVyLXJhZGl1cy1ib3R0b21yaWdodDogMDtcbn1cblxuLnRhYmxlLWJvcmRlcmVkIGNhcHRpb24gKyB0aGVhZCB0cjpmaXJzdC1jaGlsZCB0aDpmaXJzdC1jaGlsZCxcbi50YWJsZS1ib3JkZXJlZCBjYXB0aW9uICsgdGJvZHkgdHI6Zmlyc3QtY2hpbGQgdGQ6Zmlyc3QtY2hpbGQsXG4udGFibGUtYm9yZGVyZWQgY29sZ3JvdXAgKyB0aGVhZCB0cjpmaXJzdC1jaGlsZCB0aDpmaXJzdC1jaGlsZCxcbi50YWJsZS1ib3JkZXJlZCBjb2xncm91cCArIHRib2R5IHRyOmZpcnN0LWNoaWxkIHRkOmZpcnN0LWNoaWxkIHtcbiAgLXdlYmtpdC1ib3JkZXItdG9wLWxlZnQtcmFkaXVzOiA0cHg7XG4gICAgICAgICAgYm9yZGVyLXRvcC1sZWZ0LXJhZGl1czogNHB4O1xuICAtbW96LWJvcmRlci1yYWRpdXMtdG9wbGVmdDogNHB4O1xufVxuXG4udGFibGUtYm9yZGVyZWQgY2FwdGlvbiArIHRoZWFkIHRyOmZpcnN0LWNoaWxkIHRoOmxhc3QtY2hpbGQsXG4udGFibGUtYm9yZGVyZWQgY2FwdGlvbiArIHRib2R5IHRyOmZpcnN0LWNoaWxkIHRkOmxhc3QtY2hpbGQsXG4udGFibGUtYm9yZGVyZWQgY29sZ3JvdXAgKyB0aGVhZCB0cjpmaXJzdC1jaGlsZCB0aDpsYXN0LWNoaWxkLFxuLnRhYmxlLWJvcmRlcmVkIGNvbGdyb3VwICsgdGJvZHkgdHI6Zmlyc3QtY2hpbGQgdGQ6bGFzdC1jaGlsZCB7XG4gIC13ZWJraXQtYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6IDRweDtcbiAgICAgICAgICBib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogNHB4O1xuICAtbW96LWJvcmRlci1yYWRpdXMtdG9wcmlnaHQ6IDRweDtcbn1cblxuLnRhYmxlLXN0cmlwZWQgdGJvZHkgPiB0cjpudGgtY2hpbGQob2RkKSA+IHRkLFxuLnRhYmxlLXN0cmlwZWQgdGJvZHkgPiB0cjpudGgtY2hpbGQob2RkKSA+IHRoIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2Y5ZjlmOTtcbn1cblxuLnRhYmxlLWhvdmVyIHRib2R5IHRyOmhvdmVyIHRkLFxuLnRhYmxlLWhvdmVyIHRib2R5IHRyOmhvdmVyIHRoIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2Y1ZjVmNTtcbn1cblxudGFibGUgdGRbY2xhc3MqPVwic3BhblwiXSxcbnRhYmxlIHRoW2NsYXNzKj1cInNwYW5cIl0sXG4ucm93LWZsdWlkIHRhYmxlIHRkW2NsYXNzKj1cInNwYW5cIl0sXG4ucm93LWZsdWlkIHRhYmxlIHRoW2NsYXNzKj1cInNwYW5cIl0ge1xuICBkaXNwbGF5OiB0YWJsZS1jZWxsO1xuICBmbG9hdDogbm9uZTtcbiAgbWFyZ2luLWxlZnQ6IDA7XG59XG5cbi50YWJsZSB0ZC5zcGFuMSxcbi50YWJsZSB0aC5zcGFuMSB7XG4gIGZsb2F0OiBub25lO1xuICB3aWR0aDogNDRweDtcbiAgbWFyZ2luLWxlZnQ6IDA7XG59XG5cbi50YWJsZSB0ZC5zcGFuMixcbi50YWJsZSB0aC5zcGFuMiB7XG4gIGZsb2F0OiBub25lO1xuICB3aWR0aDogMTI0cHg7XG4gIG1hcmdpbi1sZWZ0OiAwO1xufVxuXG4udGFibGUgdGQuc3BhbjMsXG4udGFibGUgdGguc3BhbjMge1xuICBmbG9hdDogbm9uZTtcbiAgd2lkdGg6IDIwNHB4O1xuICBtYXJnaW4tbGVmdDogMDtcbn1cblxuLnRhYmxlIHRkLnNwYW40LFxuLnRhYmxlIHRoLnNwYW40IHtcbiAgZmxvYXQ6IG5vbmU7XG4gIHdpZHRoOiAyODRweDtcbiAgbWFyZ2luLWxlZnQ6IDA7XG59XG5cbi50YWJsZSB0ZC5zcGFuNSxcbi50YWJsZSB0aC5zcGFuNSB7XG4gIGZsb2F0OiBub25lO1xuICB3aWR0aDogMzY0cHg7XG4gIG1hcmdpbi1sZWZ0OiAwO1xufVxuXG4udGFibGUgdGQuc3BhbjYsXG4udGFibGUgdGguc3BhbjYge1xuICBmbG9hdDogbm9uZTtcbiAgd2lkdGg6IDQ0NHB4O1xuICBtYXJnaW4tbGVmdDogMDtcbn1cblxuLnRhYmxlIHRkLnNwYW43LFxuLnRhYmxlIHRoLnNwYW43IHtcbiAgZmxvYXQ6IG5vbmU7XG4gIHdpZHRoOiA1MjRweDtcbiAgbWFyZ2luLWxlZnQ6IDA7XG59XG5cbi50YWJsZSB0ZC5zcGFuOCxcbi50YWJsZSB0aC5zcGFuOCB7XG4gIGZsb2F0OiBub25lO1xuICB3aWR0aDogNjA0cHg7XG4gIG1hcmdpbi1sZWZ0OiAwO1xufVxuXG4udGFibGUgdGQuc3BhbjksXG4udGFibGUgdGguc3Bhbjkge1xuICBmbG9hdDogbm9uZTtcbiAgd2lkdGg6IDY4NHB4O1xuICBtYXJnaW4tbGVmdDogMDtcbn1cblxuLnRhYmxlIHRkLnNwYW4xMCxcbi50YWJsZSB0aC5zcGFuMTAge1xuICBmbG9hdDogbm9uZTtcbiAgd2lkdGg6IDc2NHB4O1xuICBtYXJnaW4tbGVmdDogMDtcbn1cblxuLnRhYmxlIHRkLnNwYW4xMSxcbi50YWJsZSB0aC5zcGFuMTEge1xuICBmbG9hdDogbm9uZTtcbiAgd2lkdGg6IDg0NHB4O1xuICBtYXJnaW4tbGVmdDogMDtcbn1cblxuLnRhYmxlIHRkLnNwYW4xMixcbi50YWJsZSB0aC5zcGFuMTIge1xuICBmbG9hdDogbm9uZTtcbiAgd2lkdGg6IDkyNHB4O1xuICBtYXJnaW4tbGVmdDogMDtcbn1cblxuLnRhYmxlIHRib2R5IHRyLnN1Y2Nlc3MgdGQge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZGZmMGQ4O1xufVxuXG4udGFibGUgdGJvZHkgdHIuZXJyb3IgdGQge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjJkZWRlO1xufVxuXG4udGFibGUgdGJvZHkgdHIud2FybmluZyB0ZCB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmY2Y4ZTM7XG59XG5cbi50YWJsZSB0Ym9keSB0ci5pbmZvIHRkIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2Q5ZWRmNztcbn1cblxuLnRhYmxlLWhvdmVyIHRib2R5IHRyLnN1Y2Nlc3M6aG92ZXIgdGQge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZDBlOWM2O1xufVxuXG4udGFibGUtaG92ZXIgdGJvZHkgdHIuZXJyb3I6aG92ZXIgdGQge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZWJjY2NjO1xufVxuXG4udGFibGUtaG92ZXIgdGJvZHkgdHIud2FybmluZzpob3ZlciB0ZCB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmYWYyY2M7XG59XG5cbi50YWJsZS1ob3ZlciB0Ym9keSB0ci5pbmZvOmhvdmVyIHRkIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2M0ZTNmMztcbn1cblxuW2NsYXNzXj1cImljb24tXCJdLFxuW2NsYXNzKj1cIiBpY29uLVwiXSB7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgd2lkdGg6IDE0cHg7XG4gIGhlaWdodDogMTRweDtcbiAgbWFyZ2luLXRvcDogMXB4O1xuICAqbWFyZ2luLXJpZ2h0OiAuM2VtO1xuICBsaW5lLWhlaWdodDogMTRweDtcbiAgdmVydGljYWwtYWxpZ246IHRleHQtdG9wO1xuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXCIuLi9pbWcvZ2x5cGhpY29ucy1oYWxmbGluZ3MucG5nXCIpO1xuICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAxNHB4IDE0cHg7XG4gIGJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQ7XG59XG5cbi8qIFdoaXRlIGljb25zIHdpdGggb3B0aW9uYWwgY2xhc3MsIG9yIG9uIGhvdmVyL2FjdGl2ZSBzdGF0ZXMgb2YgY2VydGFpbiBlbGVtZW50cyAqL1xuXG4uaWNvbi13aGl0ZSxcbi5uYXYtcGlsbHMgPiAuYWN0aXZlID4gYSA+IFtjbGFzc149XCJpY29uLVwiXSxcbi5uYXYtcGlsbHMgPiAuYWN0aXZlID4gYSA+IFtjbGFzcyo9XCIgaWNvbi1cIl0sXG4ubmF2LWxpc3QgPiAuYWN0aXZlID4gYSA+IFtjbGFzc149XCJpY29uLVwiXSxcbi5uYXYtbGlzdCA+IC5hY3RpdmUgPiBhID4gW2NsYXNzKj1cIiBpY29uLVwiXSxcbi5uYXZiYXItaW52ZXJzZSAubmF2ID4gLmFjdGl2ZSA+IGEgPiBbY2xhc3NePVwiaWNvbi1cIl0sXG4ubmF2YmFyLWludmVyc2UgLm5hdiA+IC5hY3RpdmUgPiBhID4gW2NsYXNzKj1cIiBpY29uLVwiXSxcbi5kcm9wZG93bi1tZW51ID4gbGkgPiBhOmhvdmVyID4gW2NsYXNzXj1cImljb24tXCJdLFxuLmRyb3Bkb3duLW1lbnUgPiBsaSA+IGE6aG92ZXIgPiBbY2xhc3MqPVwiIGljb24tXCJdLFxuLmRyb3Bkb3duLW1lbnUgPiAuYWN0aXZlID4gYSA+IFtjbGFzc149XCJpY29uLVwiXSxcbi5kcm9wZG93bi1tZW51ID4gLmFjdGl2ZSA+IGEgPiBbY2xhc3MqPVwiIGljb24tXCJdLFxuLmRyb3Bkb3duLXN1Ym1lbnU6aG92ZXIgPiBhID4gW2NsYXNzXj1cImljb24tXCJdLFxuLmRyb3Bkb3duLXN1Ym1lbnU6aG92ZXIgPiBhID4gW2NsYXNzKj1cIiBpY29uLVwiXSB7XG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChcIi4uL2ltZy9nbHlwaGljb25zLWhhbGZsaW5ncy13aGl0ZS5wbmdcIik7XG59XG5cbi5pY29uLWdsYXNzIHtcbiAgYmFja2dyb3VuZC1wb3NpdGlvbjogMCAgICAgIDA7XG59XG5cbi5pY29uLW11c2ljIHtcbiAgYmFja2dyb3VuZC1wb3NpdGlvbjogLTI0cHggMDtcbn1cblxuLmljb24tc2VhcmNoIHtcbiAgYmFja2dyb3VuZC1wb3NpdGlvbjogLTQ4cHggMDtcbn1cblxuLmljb24tZW52ZWxvcGUge1xuICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtNzJweCAwO1xufVxuXG4uaWNvbi1oZWFydCB7XG4gIGJhY2tncm91bmQtcG9zaXRpb246IC05NnB4IDA7XG59XG5cbi5pY29uLXN0YXIge1xuICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTIwcHggMDtcbn1cblxuLmljb24tc3Rhci1lbXB0eSB7XG4gIGJhY2tncm91bmQtcG9zaXRpb246IC0xNDRweCAwO1xufVxuXG4uaWNvbi11c2VyIHtcbiAgYmFja2dyb3VuZC1wb3NpdGlvbjogLTE2OHB4IDA7XG59XG5cbi5pY29uLWZpbG0ge1xuICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTkycHggMDtcbn1cblxuLmljb24tdGgtbGFyZ2Uge1xuICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMjE2cHggMDtcbn1cblxuLmljb24tdGgge1xuICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMjQwcHggMDtcbn1cblxuLmljb24tdGgtbGlzdCB7XG4gIGJhY2tncm91bmQtcG9zaXRpb246IC0yNjRweCAwO1xufVxuXG4uaWNvbi1vayB7XG4gIGJhY2tncm91bmQtcG9zaXRpb246IC0yODhweCAwO1xufVxuXG4uaWNvbi1yZW1vdmUge1xuICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMzEycHggMDtcbn1cblxuLmljb24tem9vbS1pbiB7XG4gIGJhY2tncm91bmQtcG9zaXRpb246IC0zMzZweCAwO1xufVxuXG4uaWNvbi16b29tLW91dCB7XG4gIGJhY2tncm91bmQtcG9zaXRpb246IC0zNjBweCAwO1xufVxuXG4uaWNvbi1vZmYge1xuICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMzg0cHggMDtcbn1cblxuLmljb24tc2lnbmFsIHtcbiAgYmFja2dyb3VuZC1wb3NpdGlvbjogLTQwOHB4IDA7XG59XG5cbi5pY29uLWNvZyB7XG4gIGJhY2tncm91bmQtcG9zaXRpb246IC00MzJweCAwO1xufVxuXG4uaWNvbi10cmFzaCB7XG4gIGJhY2tncm91bmQtcG9zaXRpb246IC00NTZweCAwO1xufVxuXG4uaWNvbi1ob21lIHtcbiAgYmFja2dyb3VuZC1wb3NpdGlvbjogMCAtMjRweDtcbn1cblxuLmljb24tZmlsZSB7XG4gIGJhY2tncm91bmQtcG9zaXRpb246IC0yNHB4IC0yNHB4O1xufVxuXG4uaWNvbi10aW1lIHtcbiAgYmFja2dyb3VuZC1wb3NpdGlvbjogLTQ4cHggLTI0cHg7XG59XG5cbi5pY29uLXJvYWQge1xuICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtNzJweCAtMjRweDtcbn1cblxuLmljb24tZG93bmxvYWQtYWx0IHtcbiAgYmFja2dyb3VuZC1wb3NpdGlvbjogLTk2cHggLTI0cHg7XG59XG5cbi5pY29uLWRvd25sb2FkIHtcbiAgYmFja2dyb3VuZC1wb3NpdGlvbjogLTEyMHB4IC0yNHB4O1xufVxuXG4uaWNvbi11cGxvYWQge1xuICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTQ0cHggLTI0cHg7XG59XG5cbi5pY29uLWluYm94IHtcbiAgYmFja2dyb3VuZC1wb3NpdGlvbjogLTE2OHB4IC0yNHB4O1xufVxuXG4uaWNvbi1wbGF5LWNpcmNsZSB7XG4gIGJhY2tncm91bmQtcG9zaXRpb246IC0xOTJweCAtMjRweDtcbn1cblxuLmljb24tcmVwZWF0IHtcbiAgYmFja2dyb3VuZC1wb3NpdGlvbjogLTIxNnB4IC0yNHB4O1xufVxuXG4uaWNvbi1yZWZyZXNoIHtcbiAgYmFja2dyb3VuZC1wb3NpdGlvbjogLTI0MHB4IC0yNHB4O1xufVxuXG4uaWNvbi1saXN0LWFsdCB7XG4gIGJhY2tncm91bmQtcG9zaXRpb246IC0yNjRweCAtMjRweDtcbn1cblxuLmljb24tbG9jayB7XG4gIGJhY2tncm91bmQtcG9zaXRpb246IC0yODdweCAtMjRweDtcbn1cblxuLmljb24tZmxhZyB7XG4gIGJhY2tncm91bmQtcG9zaXRpb246IC0zMTJweCAtMjRweDtcbn1cblxuLmljb24taGVhZHBob25lcyB7XG4gIGJhY2tncm91bmQtcG9zaXRpb246IC0zMzZweCAtMjRweDtcbn1cblxuLmljb24tdm9sdW1lLW9mZiB7XG4gIGJhY2tncm91bmQtcG9zaXRpb246IC0zNjBweCAtMjRweDtcbn1cblxuLmljb24tdm9sdW1lLWRvd24ge1xuICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMzg0cHggLTI0cHg7XG59XG5cbi5pY29uLXZvbHVtZS11cCB7XG4gIGJhY2tncm91bmQtcG9zaXRpb246IC00MDhweCAtMjRweDtcbn1cblxuLmljb24tcXJjb2RlIHtcbiAgYmFja2dyb3VuZC1wb3NpdGlvbjogLTQzMnB4IC0yNHB4O1xufVxuXG4uaWNvbi1iYXJjb2RlIHtcbiAgYmFja2dyb3VuZC1wb3NpdGlvbjogLTQ1NnB4IC0yNHB4O1xufVxuXG4uaWNvbi10YWcge1xuICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAwIC00OHB4O1xufVxuXG4uaWNvbi10YWdzIHtcbiAgYmFja2dyb3VuZC1wb3NpdGlvbjogLTI1cHggLTQ4cHg7XG59XG5cbi5pY29uLWJvb2sge1xuICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtNDhweCAtNDhweDtcbn1cblxuLmljb24tYm9va21hcmsge1xuICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtNzJweCAtNDhweDtcbn1cblxuLmljb24tcHJpbnQge1xuICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtOTZweCAtNDhweDtcbn1cblxuLmljb24tY2FtZXJhIHtcbiAgYmFja2dyb3VuZC1wb3NpdGlvbjogLTEyMHB4IC00OHB4O1xufVxuXG4uaWNvbi1mb250IHtcbiAgYmFja2dyb3VuZC1wb3NpdGlvbjogLTE0NHB4IC00OHB4O1xufVxuXG4uaWNvbi1ib2xkIHtcbiAgYmFja2dyb3VuZC1wb3NpdGlvbjogLTE2N3B4IC00OHB4O1xufVxuXG4uaWNvbi1pdGFsaWMge1xuICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTkycHggLTQ4cHg7XG59XG5cbi5pY29uLXRleHQtaGVpZ2h0IHtcbiAgYmFja2dyb3VuZC1wb3NpdGlvbjogLTIxNnB4IC00OHB4O1xufVxuXG4uaWNvbi10ZXh0LXdpZHRoIHtcbiAgYmFja2dyb3VuZC1wb3NpdGlvbjogLTI0MHB4IC00OHB4O1xufVxuXG4uaWNvbi1hbGlnbi1sZWZ0IHtcbiAgYmFja2dyb3VuZC1wb3NpdGlvbjogLTI2NHB4IC00OHB4O1xufVxuXG4uaWNvbi1hbGlnbi1jZW50ZXIge1xuICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMjg4cHggLTQ4cHg7XG59XG5cbi5pY29uLWFsaWduLXJpZ2h0IHtcbiAgYmFja2dyb3VuZC1wb3NpdGlvbjogLTMxMnB4IC00OHB4O1xufVxuXG4uaWNvbi1hbGlnbi1qdXN0aWZ5IHtcbiAgYmFja2dyb3VuZC1wb3NpdGlvbjogLTMzNnB4IC00OHB4O1xufVxuXG4uaWNvbi1saXN0IHtcbiAgYmFja2dyb3VuZC1wb3NpdGlvbjogLTM2MHB4IC00OHB4O1xufVxuXG4uaWNvbi1pbmRlbnQtbGVmdCB7XG4gIGJhY2tncm91bmQtcG9zaXRpb246IC0zODRweCAtNDhweDtcbn1cblxuLmljb24taW5kZW50LXJpZ2h0IHtcbiAgYmFja2dyb3VuZC1wb3NpdGlvbjogLTQwOHB4IC00OHB4O1xufVxuXG4uaWNvbi1mYWNldGltZS12aWRlbyB7XG4gIGJhY2tncm91bmQtcG9zaXRpb246IC00MzJweCAtNDhweDtcbn1cblxuLmljb24tcGljdHVyZSB7XG4gIGJhY2tncm91bmQtcG9zaXRpb246IC00NTZweCAtNDhweDtcbn1cblxuLmljb24tcGVuY2lsIHtcbiAgYmFja2dyb3VuZC1wb3NpdGlvbjogMCAtNzJweDtcbn1cblxuLmljb24tbWFwLW1hcmtlciB7XG4gIGJhY2tncm91bmQtcG9zaXRpb246IC0yNHB4IC03MnB4O1xufVxuXG4uaWNvbi1hZGp1c3Qge1xuICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtNDhweCAtNzJweDtcbn1cblxuLmljb24tdGludCB7XG4gIGJhY2tncm91bmQtcG9zaXRpb246IC03MnB4IC03MnB4O1xufVxuXG4uaWNvbi1lZGl0IHtcbiAgYmFja2dyb3VuZC1wb3NpdGlvbjogLTk2cHggLTcycHg7XG59XG5cbi5pY29uLXNoYXJlIHtcbiAgYmFja2dyb3VuZC1wb3NpdGlvbjogLTEyMHB4IC03MnB4O1xufVxuXG4uaWNvbi1jaGVjayB7XG4gIGJhY2tncm91bmQtcG9zaXRpb246IC0xNDRweCAtNzJweDtcbn1cblxuLmljb24tbW92ZSB7XG4gIGJhY2tncm91bmQtcG9zaXRpb246IC0xNjhweCAtNzJweDtcbn1cblxuLmljb24tc3RlcC1iYWNrd2FyZCB7XG4gIGJhY2tncm91bmQtcG9zaXRpb246IC0xOTJweCAtNzJweDtcbn1cblxuLmljb24tZmFzdC1iYWNrd2FyZCB7XG4gIGJhY2tncm91bmQtcG9zaXRpb246IC0yMTZweCAtNzJweDtcbn1cblxuLmljb24tYmFja3dhcmQge1xuICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMjQwcHggLTcycHg7XG59XG5cbi5pY29uLXBsYXkge1xuICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMjY0cHggLTcycHg7XG59XG5cbi5pY29uLXBhdXNlIHtcbiAgYmFja2dyb3VuZC1wb3NpdGlvbjogLTI4OHB4IC03MnB4O1xufVxuXG4uaWNvbi1zdG9wIHtcbiAgYmFja2dyb3VuZC1wb3NpdGlvbjogLTMxMnB4IC03MnB4O1xufVxuXG4uaWNvbi1mb3J3YXJkIHtcbiAgYmFja2dyb3VuZC1wb3NpdGlvbjogLTMzNnB4IC03MnB4O1xufVxuXG4uaWNvbi1mYXN0LWZvcndhcmQge1xuICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMzYwcHggLTcycHg7XG59XG5cbi5pY29uLXN0ZXAtZm9yd2FyZCB7XG4gIGJhY2tncm91bmQtcG9zaXRpb246IC0zODRweCAtNzJweDtcbn1cblxuLmljb24tZWplY3Qge1xuICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtNDA4cHggLTcycHg7XG59XG5cbi5pY29uLWNoZXZyb24tbGVmdCB7XG4gIGJhY2tncm91bmQtcG9zaXRpb246IC00MzJweCAtNzJweDtcbn1cblxuLmljb24tY2hldnJvbi1yaWdodCB7XG4gIGJhY2tncm91bmQtcG9zaXRpb246IC00NTZweCAtNzJweDtcbn1cblxuLmljb24tcGx1cy1zaWduIHtcbiAgYmFja2dyb3VuZC1wb3NpdGlvbjogMCAtOTZweDtcbn1cblxuLmljb24tbWludXMtc2lnbiB7XG4gIGJhY2tncm91bmQtcG9zaXRpb246IC0yNHB4IC05NnB4O1xufVxuXG4uaWNvbi1yZW1vdmUtc2lnbiB7XG4gIGJhY2tncm91bmQtcG9zaXRpb246IC00OHB4IC05NnB4O1xufVxuXG4uaWNvbi1vay1zaWduIHtcbiAgYmFja2dyb3VuZC1wb3NpdGlvbjogLTcycHggLTk2cHg7XG59XG5cbi5pY29uLXF1ZXN0aW9uLXNpZ24ge1xuICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtOTZweCAtOTZweDtcbn1cblxuLmljb24taW5mby1zaWduIHtcbiAgYmFja2dyb3VuZC1wb3NpdGlvbjogLTEyMHB4IC05NnB4O1xufVxuXG4uaWNvbi1zY3JlZW5zaG90IHtcbiAgYmFja2dyb3VuZC1wb3NpdGlvbjogLTE0NHB4IC05NnB4O1xufVxuXG4uaWNvbi1yZW1vdmUtY2lyY2xlIHtcbiAgYmFja2dyb3VuZC1wb3NpdGlvbjogLTE2OHB4IC05NnB4O1xufVxuXG4uaWNvbi1vay1jaXJjbGUge1xuICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTkycHggLTk2cHg7XG59XG5cbi5pY29uLWJhbi1jaXJjbGUge1xuICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMjE2cHggLTk2cHg7XG59XG5cbi5pY29uLWFycm93LWxlZnQge1xuICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMjQwcHggLTk2cHg7XG59XG5cbi5pY29uLWFycm93LXJpZ2h0IHtcbiAgYmFja2dyb3VuZC1wb3NpdGlvbjogLTI2NHB4IC05NnB4O1xufVxuXG4uaWNvbi1hcnJvdy11cCB7XG4gIGJhY2tncm91bmQtcG9zaXRpb246IC0yODlweCAtOTZweDtcbn1cblxuLmljb24tYXJyb3ctZG93biB7XG4gIGJhY2tncm91bmQtcG9zaXRpb246IC0zMTJweCAtOTZweDtcbn1cblxuLmljb24tc2hhcmUtYWx0IHtcbiAgYmFja2dyb3VuZC1wb3NpdGlvbjogLTMzNnB4IC05NnB4O1xufVxuXG4uaWNvbi1yZXNpemUtZnVsbCB7XG4gIGJhY2tncm91bmQtcG9zaXRpb246IC0zNjBweCAtOTZweDtcbn1cblxuLmljb24tcmVzaXplLXNtYWxsIHtcbiAgYmFja2dyb3VuZC1wb3NpdGlvbjogLTM4NHB4IC05NnB4O1xufVxuXG4uaWNvbi1wbHVzIHtcbiAgYmFja2dyb3VuZC1wb3NpdGlvbjogLTQwOHB4IC05NnB4O1xufVxuXG4uaWNvbi1taW51cyB7XG4gIGJhY2tncm91bmQtcG9zaXRpb246IC00MzNweCAtOTZweDtcbn1cblxuLmljb24tYXN0ZXJpc2sge1xuICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtNDU2cHggLTk2cHg7XG59XG5cbi5pY29uLWV4Y2xhbWF0aW9uLXNpZ24ge1xuICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAwIC0xMjBweDtcbn1cblxuLmljb24tZ2lmdCB7XG4gIGJhY2tncm91bmQtcG9zaXRpb246IC0yNHB4IC0xMjBweDtcbn1cblxuLmljb24tbGVhZiB7XG4gIGJhY2tncm91bmQtcG9zaXRpb246IC00OHB4IC0xMjBweDtcbn1cblxuLmljb24tZmlyZSB7XG4gIGJhY2tncm91bmQtcG9zaXRpb246IC03MnB4IC0xMjBweDtcbn1cblxuLmljb24tZXllLW9wZW4ge1xuICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtOTZweCAtMTIwcHg7XG59XG5cbi5pY29uLWV5ZS1jbG9zZSB7XG4gIGJhY2tncm91bmQtcG9zaXRpb246IC0xMjBweCAtMTIwcHg7XG59XG5cbi5pY29uLXdhcm5pbmctc2lnbiB7XG4gIGJhY2tncm91bmQtcG9zaXRpb246IC0xNDRweCAtMTIwcHg7XG59XG5cbi5pY29uLXBsYW5lIHtcbiAgYmFja2dyb3VuZC1wb3NpdGlvbjogLTE2OHB4IC0xMjBweDtcbn1cblxuLmljb24tY2FsZW5kYXIge1xuICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTkycHggLTEyMHB4O1xufVxuXG4uaWNvbi1yYW5kb20ge1xuICB3aWR0aDogMTZweDtcbiAgYmFja2dyb3VuZC1wb3NpdGlvbjogLTIxNnB4IC0xMjBweDtcbn1cblxuLmljb24tY29tbWVudCB7XG4gIGJhY2tncm91bmQtcG9zaXRpb246IC0yNDBweCAtMTIwcHg7XG59XG5cbi5pY29uLW1hZ25ldCB7XG4gIGJhY2tncm91bmQtcG9zaXRpb246IC0yNjRweCAtMTIwcHg7XG59XG5cbi5pY29uLWNoZXZyb24tdXAge1xuICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMjg4cHggLTEyMHB4O1xufVxuXG4uaWNvbi1jaGV2cm9uLWRvd24ge1xuICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMzEzcHggLTExOXB4O1xufVxuXG4uaWNvbi1yZXR3ZWV0IHtcbiAgYmFja2dyb3VuZC1wb3NpdGlvbjogLTMzNnB4IC0xMjBweDtcbn1cblxuLmljb24tc2hvcHBpbmctY2FydCB7XG4gIGJhY2tncm91bmQtcG9zaXRpb246IC0zNjBweCAtMTIwcHg7XG59XG5cbi5pY29uLWZvbGRlci1jbG9zZSB7XG4gIGJhY2tncm91bmQtcG9zaXRpb246IC0zODRweCAtMTIwcHg7XG59XG5cbi5pY29uLWZvbGRlci1vcGVuIHtcbiAgd2lkdGg6IDE2cHg7XG4gIGJhY2tncm91bmQtcG9zaXRpb246IC00MDhweCAtMTIwcHg7XG59XG5cbi5pY29uLXJlc2l6ZS12ZXJ0aWNhbCB7XG4gIGJhY2tncm91bmQtcG9zaXRpb246IC00MzJweCAtMTE5cHg7XG59XG5cbi5pY29uLXJlc2l6ZS1ob3Jpem9udGFsIHtcbiAgYmFja2dyb3VuZC1wb3NpdGlvbjogLTQ1NnB4IC0xMThweDtcbn1cblxuLmljb24taGRkIHtcbiAgYmFja2dyb3VuZC1wb3NpdGlvbjogMCAtMTQ0cHg7XG59XG5cbi5pY29uLWJ1bGxob3JuIHtcbiAgYmFja2dyb3VuZC1wb3NpdGlvbjogLTI0cHggLTE0NHB4O1xufVxuXG4uaWNvbi1iZWxsIHtcbiAgYmFja2dyb3VuZC1wb3NpdGlvbjogLTQ4cHggLTE0NHB4O1xufVxuXG4uaWNvbi1jZXJ0aWZpY2F0ZSB7XG4gIGJhY2tncm91bmQtcG9zaXRpb246IC03MnB4IC0xNDRweDtcbn1cblxuLmljb24tdGh1bWJzLXVwIHtcbiAgYmFja2dyb3VuZC1wb3NpdGlvbjogLTk2cHggLTE0NHB4O1xufVxuXG4uaWNvbi10aHVtYnMtZG93biB7XG4gIGJhY2tncm91bmQtcG9zaXRpb246IC0xMjBweCAtMTQ0cHg7XG59XG5cbi5pY29uLWhhbmQtcmlnaHQge1xuICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTQ0cHggLTE0NHB4O1xufVxuXG4uaWNvbi1oYW5kLWxlZnQge1xuICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTY4cHggLTE0NHB4O1xufVxuXG4uaWNvbi1oYW5kLXVwIHtcbiAgYmFja2dyb3VuZC1wb3NpdGlvbjogLTE5MnB4IC0xNDRweDtcbn1cblxuLmljb24taGFuZC1kb3duIHtcbiAgYmFja2dyb3VuZC1wb3NpdGlvbjogLTIxNnB4IC0xNDRweDtcbn1cblxuLmljb24tY2lyY2xlLWFycm93LXJpZ2h0IHtcbiAgYmFja2dyb3VuZC1wb3NpdGlvbjogLTI0MHB4IC0xNDRweDtcbn1cblxuLmljb24tY2lyY2xlLWFycm93LWxlZnQge1xuICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMjY0cHggLTE0NHB4O1xufVxuXG4uaWNvbi1jaXJjbGUtYXJyb3ctdXAge1xuICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMjg4cHggLTE0NHB4O1xufVxuXG4uaWNvbi1jaXJjbGUtYXJyb3ctZG93biB7XG4gIGJhY2tncm91bmQtcG9zaXRpb246IC0zMTJweCAtMTQ0cHg7XG59XG5cbi5pY29uLWdsb2JlIHtcbiAgYmFja2dyb3VuZC1wb3NpdGlvbjogLTMzNnB4IC0xNDRweDtcbn1cblxuLmljb24td3JlbmNoIHtcbiAgYmFja2dyb3VuZC1wb3NpdGlvbjogLTM2MHB4IC0xNDRweDtcbn1cblxuLmljb24tdGFza3Mge1xuICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMzg0cHggLTE0NHB4O1xufVxuXG4uaWNvbi1maWx0ZXIge1xuICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtNDA4cHggLTE0NHB4O1xufVxuXG4uaWNvbi1icmllZmNhc2Uge1xuICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtNDMycHggLTE0NHB4O1xufVxuXG4uaWNvbi1mdWxsc2NyZWVuIHtcbiAgYmFja2dyb3VuZC1wb3NpdGlvbjogLTQ1NnB4IC0xNDRweDtcbn1cblxuLmRyb3B1cCxcbi5kcm9wZG93biB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbn1cblxuLmRyb3Bkb3duLXRvZ2dsZSB7XG4gICptYXJnaW4tYm90dG9tOiAtM3B4O1xufVxuXG4uZHJvcGRvd24tdG9nZ2xlOmFjdGl2ZSxcbi5vcGVuIC5kcm9wZG93bi10b2dnbGUge1xuICBvdXRsaW5lOiAwO1xufVxuXG4uY2FyZXQge1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIHdpZHRoOiAwO1xuICBoZWlnaHQ6IDA7XG4gIHZlcnRpY2FsLWFsaWduOiB0b3A7XG4gIGJvcmRlci10b3A6IDRweCBzb2xpZCAjMDAwMDAwO1xuICBib3JkZXItcmlnaHQ6IDRweCBzb2xpZCB0cmFuc3BhcmVudDtcbiAgYm9yZGVyLWxlZnQ6IDRweCBzb2xpZCB0cmFuc3BhcmVudDtcbiAgY29udGVudDogXCJcIjtcbn1cblxuLmRyb3Bkb3duIC5jYXJldCB7XG4gIG1hcmdpbi10b3A6IDhweDtcbiAgbWFyZ2luLWxlZnQ6IDJweDtcbn1cblxuLmRyb3Bkb3duLW1lbnUge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHRvcDogMTAwJTtcbiAgbGVmdDogMDtcbiAgei1pbmRleDogMTAwMDtcbiAgZGlzcGxheTogbm9uZTtcbiAgZmxvYXQ6IGxlZnQ7XG4gIG1pbi13aWR0aDogMTYwcHg7XG4gIHBhZGRpbmc6IDVweCAwO1xuICBtYXJnaW46IDJweCAwIDA7XG4gIGxpc3Qtc3R5bGU6IG5vbmU7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmZmZmY7XG4gIGJvcmRlcjogMXB4IHNvbGlkICNjY2M7XG4gIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMCwgMCwgMCwgMC4yKTtcbiAgKmJvcmRlci1yaWdodC13aWR0aDogMnB4O1xuICAqYm9yZGVyLWJvdHRvbS13aWR0aDogMnB4O1xuICAtd2Via2l0LWJvcmRlci1yYWRpdXM6IDZweDtcbiAgICAgLW1vei1ib3JkZXItcmFkaXVzOiA2cHg7XG4gICAgICAgICAgYm9yZGVyLXJhZGl1czogNnB4O1xuICAtd2Via2l0LWJveC1zaGFkb3c6IDAgNXB4IDEwcHggcmdiYSgwLCAwLCAwLCAwLjIpO1xuICAgICAtbW96LWJveC1zaGFkb3c6IDAgNXB4IDEwcHggcmdiYSgwLCAwLCAwLCAwLjIpO1xuICAgICAgICAgIGJveC1zaGFkb3c6IDAgNXB4IDEwcHggcmdiYSgwLCAwLCAwLCAwLjIpO1xuICAtd2Via2l0LWJhY2tncm91bmQtY2xpcDogcGFkZGluZy1ib3g7XG4gICAgIC1tb3otYmFja2dyb3VuZC1jbGlwOiBwYWRkaW5nO1xuICAgICAgICAgIGJhY2tncm91bmQtY2xpcDogcGFkZGluZy1ib3g7XG59XG5cbi5kcm9wZG93bi1tZW51LnB1bGwtcmlnaHQge1xuICByaWdodDogMDtcbiAgbGVmdDogYXV0bztcbn1cblxuLmRyb3Bkb3duLW1lbnUgLmRpdmlkZXIge1xuICAqd2lkdGg6IDEwMCU7XG4gIGhlaWdodDogMXB4O1xuICBtYXJnaW46IDlweCAxcHg7XG4gICptYXJnaW46IC01cHggMCA1cHg7XG4gIG92ZXJmbG93OiBoaWRkZW47XG4gIGJhY2tncm91bmQtY29sb3I6ICNlNWU1ZTU7XG4gIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjZmZmZmZmO1xufVxuXG4uZHJvcGRvd24tbWVudSBsaSA+IGEge1xuICBkaXNwbGF5OiBibG9jaztcbiAgcGFkZGluZzogM3B4IDIwcHg7XG4gIGNsZWFyOiBib3RoO1xuICBmb250LXdlaWdodDogbm9ybWFsO1xuICBsaW5lLWhlaWdodDogMjBweDtcbiAgY29sb3I6ICMzMzMzMzM7XG4gIHdoaXRlLXNwYWNlOiBub3dyYXA7XG59XG5cbi5kcm9wZG93bi1tZW51IGxpID4gYTpob3Zlcixcbi5kcm9wZG93bi1tZW51IGxpID4gYTpmb2N1cyxcbi5kcm9wZG93bi1zdWJtZW51OmhvdmVyID4gYSB7XG4gIGNvbG9yOiAjZmZmZmZmO1xuICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG4gIGJhY2tncm91bmQtY29sb3I6ICMwMDgxYzI7XG4gIGJhY2tncm91bmQtaW1hZ2U6IC1tb3otbGluZWFyLWdyYWRpZW50KHRvcCwgIzAwMDAwMCwgIzAwMDAwMCk7XG4gIGJhY2tncm91bmQtaW1hZ2U6IC13ZWJraXQtZ3JhZGllbnQobGluZWFyLCAwIDAsIDAgMTAwJSwgZnJvbSgjMDAwMDAwKSwgdG8oIzAwMDAwMCkpO1xuICBiYWNrZ3JvdW5kLWltYWdlOiAtd2Via2l0LWxpbmVhci1ncmFkaWVudCh0b3AsICMwMDAwMDAsICMwMDAwMDApO1xuICBiYWNrZ3JvdW5kLWltYWdlOiAtby1saW5lYXItZ3JhZGllbnQodG9wLCAjMDAwMDAwLCAjMDAwMDAwKTtcbiAgYmFja2dyb3VuZC1pbWFnZTogbGluZWFyLWdyYWRpZW50KHRvIGJvdHRvbSwgIzAwMDAwMCwgIzAwMDAwMCk7XG4gIGJhY2tncm91bmQtcmVwZWF0OiByZXBlYXQteDtcbiAgZmlsdGVyOiBwcm9naWQ6RFhJbWFnZVRyYW5zZm9ybS5NaWNyb3NvZnQuZ3JhZGllbnQoc3RhcnRDb2xvcnN0cj0nI2ZmMDAwMDAwJywgZW5kQ29sb3JzdHI9JyNmZjAwMDAwMCcsIEdyYWRpZW50VHlwZT0wKTtcbn1cblxuLmRyb3Bkb3duLW1lbnUgLmFjdGl2ZSA+IGEsXG4uZHJvcGRvd24tbWVudSAuYWN0aXZlID4gYTpob3ZlciB7XG4gIGNvbG9yOiAjZmZmZmZmO1xuICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG4gIGJhY2tncm91bmQtY29sb3I6ICMwMDgxYzI7XG4gIGJhY2tncm91bmQtaW1hZ2U6IC1tb3otbGluZWFyLWdyYWRpZW50KHRvcCwgIzAwMDAwMCwgIzAwMDAwMCk7XG4gIGJhY2tncm91bmQtaW1hZ2U6IC13ZWJraXQtZ3JhZGllbnQobGluZWFyLCAwIDAsIDAgMTAwJSwgZnJvbSgjMDAwMDAwKSwgdG8oIzAwMDAwMCkpO1xuICBiYWNrZ3JvdW5kLWltYWdlOiAtd2Via2l0LWxpbmVhci1ncmFkaWVudCh0b3AsICMwMDAwMDAsICMwMDAwMDApO1xuICBiYWNrZ3JvdW5kLWltYWdlOiAtby1saW5lYXItZ3JhZGllbnQodG9wLCAjMDAwMDAwLCAjMDAwMDAwKTtcbiAgYmFja2dyb3VuZC1pbWFnZTogbGluZWFyLWdyYWRpZW50KHRvIGJvdHRvbSwgIzAwMDAwMCwgIzAwMDAwMCk7XG4gIGJhY2tncm91bmQtcmVwZWF0OiByZXBlYXQteDtcbiAgb3V0bGluZTogMDtcbiAgZmlsdGVyOiBwcm9naWQ6RFhJbWFnZVRyYW5zZm9ybS5NaWNyb3NvZnQuZ3JhZGllbnQoc3RhcnRDb2xvcnN0cj0nI2ZmMDAwMDAwJywgZW5kQ29sb3JzdHI9JyNmZjAwMDAwMCcsIEdyYWRpZW50VHlwZT0wKTtcbn1cblxuLmRyb3Bkb3duLW1lbnUgLmRpc2FibGVkID4gYSxcbi5kcm9wZG93bi1tZW51IC5kaXNhYmxlZCA+IGE6aG92ZXIge1xuICBjb2xvcjogIzk5OTk5OTtcbn1cblxuLmRyb3Bkb3duLW1lbnUgLmRpc2FibGVkID4gYTpob3ZlciB7XG4gIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbiAgY3Vyc29yOiBkZWZhdWx0O1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcbiAgYmFja2dyb3VuZC1pbWFnZTogbm9uZTtcbiAgZmlsdGVyOiBwcm9naWQ6RFhJbWFnZVRyYW5zZm9ybS5NaWNyb3NvZnQuZ3JhZGllbnQoZW5hYmxlZD1mYWxzZSk7XG59XG5cbi5vcGVuIHtcbiAgKnotaW5kZXg6IDEwMDA7XG59XG5cbi5vcGVuID4gLmRyb3Bkb3duLW1lbnUge1xuICBkaXNwbGF5OiBibG9jaztcbn1cblxuLnB1bGwtcmlnaHQgPiAuZHJvcGRvd24tbWVudSB7XG4gIHJpZ2h0OiAwO1xuICBsZWZ0OiBhdXRvO1xufVxuXG4uZHJvcHVwIC5jYXJldCxcbi5uYXZiYXItZml4ZWQtYm90dG9tIC5kcm9wZG93biAuY2FyZXQge1xuICBib3JkZXItdG9wOiAwO1xuICBib3JkZXItYm90dG9tOiA0cHggc29saWQgIzAwMDAwMDtcbiAgY29udGVudDogXCJcIjtcbn1cblxuLmRyb3B1cCAuZHJvcGRvd24tbWVudSxcbi5uYXZiYXItZml4ZWQtYm90dG9tIC5kcm9wZG93biAuZHJvcGRvd24tbWVudSB7XG4gIHRvcDogYXV0bztcbiAgYm90dG9tOiAxMDAlO1xuICBtYXJnaW4tYm90dG9tOiAxcHg7XG59XG5cbi5kcm9wZG93bi1zdWJtZW51IHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xufVxuXG4uZHJvcGRvd24tc3VibWVudSA+IC5kcm9wZG93bi1tZW51IHtcbiAgdG9wOiAwO1xuICBsZWZ0OiAxMDAlO1xuICBtYXJnaW4tdG9wOiAtNnB4O1xuICBtYXJnaW4tbGVmdDogLTFweDtcbiAgLXdlYmtpdC1ib3JkZXItcmFkaXVzOiAwIDZweCA2cHggNnB4O1xuICAgICAtbW96LWJvcmRlci1yYWRpdXM6IDAgNnB4IDZweCA2cHg7XG4gICAgICAgICAgYm9yZGVyLXJhZGl1czogMCA2cHggNnB4IDZweDtcbn1cblxuLmRyb3Bkb3duLXN1Ym1lbnU6aG92ZXIgPiAuZHJvcGRvd24tbWVudSB7XG4gIGRpc3BsYXk6IGJsb2NrO1xufVxuXG4uZHJvcHVwIC5kcm9wZG93bi1zdWJtZW51ID4gLmRyb3Bkb3duLW1lbnUge1xuICB0b3A6IGF1dG87XG4gIGJvdHRvbTogMDtcbiAgbWFyZ2luLXRvcDogMDtcbiAgbWFyZ2luLWJvdHRvbTogLTJweDtcbiAgLXdlYmtpdC1ib3JkZXItcmFkaXVzOiA1cHggNXB4IDVweCAwO1xuICAgICAtbW96LWJvcmRlci1yYWRpdXM6IDVweCA1cHggNXB4IDA7XG4gICAgICAgICAgYm9yZGVyLXJhZGl1czogNXB4IDVweCA1cHggMDtcbn1cblxuLmRyb3Bkb3duLXN1Ym1lbnUgPiBhOmFmdGVyIHtcbiAgZGlzcGxheTogYmxvY2s7XG4gIGZsb2F0OiByaWdodDtcbiAgd2lkdGg6IDA7XG4gIGhlaWdodDogMDtcbiAgbWFyZ2luLXRvcDogNXB4O1xuICBtYXJnaW4tcmlnaHQ6IC0xMHB4O1xuICBib3JkZXItY29sb3I6IHRyYW5zcGFyZW50O1xuICBib3JkZXItbGVmdC1jb2xvcjogI2NjY2NjYztcbiAgYm9yZGVyLXN0eWxlOiBzb2xpZDtcbiAgYm9yZGVyLXdpZHRoOiA1cHggMCA1cHggNXB4O1xuICBjb250ZW50OiBcIiBcIjtcbn1cblxuLmRyb3Bkb3duLXN1Ym1lbnU6aG92ZXIgPiBhOmFmdGVyIHtcbiAgYm9yZGVyLWxlZnQtY29sb3I6ICNmZmZmZmY7XG59XG5cbi5kcm9wZG93bi1zdWJtZW51LnB1bGwtbGVmdCB7XG4gIGZsb2F0OiBub25lO1xufVxuXG4uZHJvcGRvd24tc3VibWVudS5wdWxsLWxlZnQgPiAuZHJvcGRvd24tbWVudSB7XG4gIGxlZnQ6IC0xMDAlO1xuICBtYXJnaW4tbGVmdDogMTBweDtcbiAgLXdlYmtpdC1ib3JkZXItcmFkaXVzOiA2cHggMCA2cHggNnB4O1xuICAgICAtbW96LWJvcmRlci1yYWRpdXM6IDZweCAwIDZweCA2cHg7XG4gICAgICAgICAgYm9yZGVyLXJhZGl1czogNnB4IDAgNnB4IDZweDtcbn1cblxuLmRyb3Bkb3duIC5kcm9wZG93bi1tZW51IC5uYXYtaGVhZGVyIHtcbiAgcGFkZGluZy1yaWdodDogMjBweDtcbiAgcGFkZGluZy1sZWZ0OiAyMHB4O1xufVxuXG4udHlwZWFoZWFkIHtcbiAgei1pbmRleDogMTA1MTtcbiAgbWFyZ2luLXRvcDogMnB4O1xuICAtd2Via2l0LWJvcmRlci1yYWRpdXM6IDRweDtcbiAgICAgLW1vei1ib3JkZXItcmFkaXVzOiA0cHg7XG4gICAgICAgICAgYm9yZGVyLXJhZGl1czogNHB4O1xufVxuXG4ud2VsbCB7XG4gIG1pbi1oZWlnaHQ6IDIwcHg7XG4gIHBhZGRpbmc6IDE5cHg7XG4gIG1hcmdpbi1ib3R0b206IDIwcHg7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmNWY1ZjU7XG4gIGJvcmRlcjogMXB4IHNvbGlkICNlM2UzZTM7XG4gIC13ZWJraXQtYm9yZGVyLXJhZGl1czogNHB4O1xuICAgICAtbW96LWJvcmRlci1yYWRpdXM6IDRweDtcbiAgICAgICAgICBib3JkZXItcmFkaXVzOiA0cHg7XG4gIC13ZWJraXQtYm94LXNoYWRvdzogaW5zZXQgMCAxcHggMXB4IHJnYmEoMCwgMCwgMCwgMC4wNSk7XG4gICAgIC1tb3otYm94LXNoYWRvdzogaW5zZXQgMCAxcHggMXB4IHJnYmEoMCwgMCwgMCwgMC4wNSk7XG4gICAgICAgICAgYm94LXNoYWRvdzogaW5zZXQgMCAxcHggMXB4IHJnYmEoMCwgMCwgMCwgMC4wNSk7XG59XG5cbi53ZWxsIGJsb2NrcXVvdGUge1xuICBib3JkZXItY29sb3I6ICNkZGQ7XG4gIGJvcmRlci1jb2xvcjogcmdiYSgwLCAwLCAwLCAwLjE1KTtcbn1cblxuLndlbGwtbGFyZ2Uge1xuICBwYWRkaW5nOiAyNHB4O1xuICAtd2Via2l0LWJvcmRlci1yYWRpdXM6IDZweDtcbiAgICAgLW1vei1ib3JkZXItcmFkaXVzOiA2cHg7XG4gICAgICAgICAgYm9yZGVyLXJhZGl1czogNnB4O1xufVxuXG4ud2VsbC1zbWFsbCB7XG4gIHBhZGRpbmc6IDlweDtcbiAgLXdlYmtpdC1ib3JkZXItcmFkaXVzOiAzcHg7XG4gICAgIC1tb3otYm9yZGVyLXJhZGl1czogM3B4O1xuICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDNweDtcbn1cblxuLmZhZGUge1xuICBvcGFjaXR5OiAwO1xuICAtd2Via2l0LXRyYW5zaXRpb246IG9wYWNpdHkgMC4xNXMgbGluZWFyO1xuICAgICAtbW96LXRyYW5zaXRpb246IG9wYWNpdHkgMC4xNXMgbGluZWFyO1xuICAgICAgIC1vLXRyYW5zaXRpb246IG9wYWNpdHkgMC4xNXMgbGluZWFyO1xuICAgICAgICAgIHRyYW5zaXRpb246IG9wYWNpdHkgMC4xNXMgbGluZWFyO1xufVxuXG4uZmFkZS5pbiB7XG4gIG9wYWNpdHk6IDE7XG59XG5cbi5jb2xsYXBzZSB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgaGVpZ2h0OiAwO1xuICBvdmVyZmxvdzogaGlkZGVuO1xuICAtd2Via2l0LXRyYW5zaXRpb246IGhlaWdodCAwLjM1cyBlYXNlO1xuICAgICAtbW96LXRyYW5zaXRpb246IGhlaWdodCAwLjM1cyBlYXNlO1xuICAgICAgIC1vLXRyYW5zaXRpb246IGhlaWdodCAwLjM1cyBlYXNlO1xuICAgICAgICAgIHRyYW5zaXRpb246IGhlaWdodCAwLjM1cyBlYXNlO1xufVxuXG4uY29sbGFwc2UuaW4ge1xuICBoZWlnaHQ6IGF1dG87XG59XG5cbi5jbG9zZSB7XG4gIGZsb2F0OiByaWdodDtcbiAgZm9udC1zaXplOiAyMHB4O1xuICBmb250LXdlaWdodDogYm9sZDtcbiAgbGluZS1oZWlnaHQ6IDIwcHg7XG4gIGNvbG9yOiAjMDAwMDAwO1xuICB0ZXh0LXNoYWRvdzogMCAxcHggMCAjZmZmZmZmO1xuICBvcGFjaXR5OiAwLjI7XG4gIGZpbHRlcjogYWxwaGEob3BhY2l0eT0yMCk7XG59XG5cbi5jbG9zZTpob3ZlciB7XG4gIGNvbG9yOiAjMDAwMDAwO1xuICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG4gIGN1cnNvcjogcG9pbnRlcjtcbiAgb3BhY2l0eTogMC40O1xuICBmaWx0ZXI6IGFscGhhKG9wYWNpdHk9NDApO1xufVxuXG5idXR0b24uY2xvc2Uge1xuICBwYWRkaW5nOiAwO1xuICBjdXJzb3I6IHBvaW50ZXI7XG4gIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xuICBib3JkZXI6IDA7XG4gIC13ZWJraXQtYXBwZWFyYW5jZTogbm9uZTtcbn1cblxuLmJ0biB7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgKmRpc3BsYXk6IGlubGluZTtcbiAgcGFkZGluZzogNHB4IDEycHg7XG4gIG1hcmdpbi1ib3R0b206IDA7XG4gICptYXJnaW4tbGVmdDogLjNlbTtcbiAgZm9udC1zaXplOiAxNHB4O1xuICBsaW5lLWhlaWdodDogMjBweDtcbiAgY29sb3I6ICMzMzMzMzM7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgdGV4dC1zaGFkb3c6IDAgMXB4IDFweCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNzUpO1xuICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xuICBjdXJzb3I6IHBvaW50ZXI7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmNWY1ZjU7XG4gICpiYWNrZ3JvdW5kLWNvbG9yOiAjZTZlNmU2O1xuICBiYWNrZ3JvdW5kLWltYWdlOiAtbW96LWxpbmVhci1ncmFkaWVudCh0b3AsICNmZmZmZmYsICNlNmU2ZTYpO1xuICBiYWNrZ3JvdW5kLWltYWdlOiAtd2Via2l0LWdyYWRpZW50KGxpbmVhciwgMCAwLCAwIDEwMCUsIGZyb20oI2ZmZmZmZiksIHRvKCNlNmU2ZTYpKTtcbiAgYmFja2dyb3VuZC1pbWFnZTogLXdlYmtpdC1saW5lYXItZ3JhZGllbnQodG9wLCAjZmZmZmZmLCAjZTZlNmU2KTtcbiAgYmFja2dyb3VuZC1pbWFnZTogLW8tbGluZWFyLWdyYWRpZW50KHRvcCwgI2ZmZmZmZiwgI2U2ZTZlNik7XG4gIGJhY2tncm91bmQtaW1hZ2U6IGxpbmVhci1ncmFkaWVudCh0byBib3R0b20sICNmZmZmZmYsICNlNmU2ZTYpO1xuICBiYWNrZ3JvdW5kLXJlcGVhdDogcmVwZWF0LXg7XG4gIGJvcmRlcjogMXB4IHNvbGlkICNiYmJiYmI7XG4gICpib3JkZXI6IDA7XG4gIGJvcmRlci1jb2xvcjogI2U2ZTZlNiAjZTZlNmU2ICNiZmJmYmY7XG4gIGJvcmRlci1jb2xvcjogcmdiYSgwLCAwLCAwLCAwLjEpIHJnYmEoMCwgMCwgMCwgMC4xKSByZ2JhKDAsIDAsIDAsIDAuMjUpO1xuICBib3JkZXItYm90dG9tLWNvbG9yOiAjYTJhMmEyO1xuICAtd2Via2l0LWJvcmRlci1yYWRpdXM6IDRweDtcbiAgICAgLW1vei1ib3JkZXItcmFkaXVzOiA0cHg7XG4gICAgICAgICAgYm9yZGVyLXJhZGl1czogNHB4O1xuICBmaWx0ZXI6IHByb2dpZDpEWEltYWdlVHJhbnNmb3JtLk1pY3Jvc29mdC5ncmFkaWVudChzdGFydENvbG9yc3RyPScjZmZmZmZmZmYnLCBlbmRDb2xvcnN0cj0nI2ZmZTZlNmU2JywgR3JhZGllbnRUeXBlPTApO1xuICBmaWx0ZXI6IHByb2dpZDpEWEltYWdlVHJhbnNmb3JtLk1pY3Jvc29mdC5ncmFkaWVudChlbmFibGVkPWZhbHNlKTtcbiAgKnpvb206IDE7XG4gIC13ZWJraXQtYm94LXNoYWRvdzogaW5zZXQgMCAxcHggMCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMiksIDAgMXB4IDJweCByZ2JhKDAsIDAsIDAsIDAuMDUpO1xuICAgICAtbW96LWJveC1zaGFkb3c6IGluc2V0IDAgMXB4IDAgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjIpLCAwIDFweCAycHggcmdiYSgwLCAwLCAwLCAwLjA1KTtcbiAgICAgICAgICBib3gtc2hhZG93OiBpbnNldCAwIDFweCAwIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4yKSwgMCAxcHggMnB4IHJnYmEoMCwgMCwgMCwgMC4wNSk7XG59XG5cbi5idG46aG92ZXIsXG4uYnRuOmFjdGl2ZSxcbi5idG4uYWN0aXZlLFxuLmJ0bi5kaXNhYmxlZCxcbi5idG5bZGlzYWJsZWRdIHtcbiAgY29sb3I6ICMzMzMzMzM7XG4gIGJhY2tncm91bmQtY29sb3I6ICNlNmU2ZTY7XG4gICpiYWNrZ3JvdW5kLWNvbG9yOiAjZDlkOWQ5O1xufVxuXG4uYnRuOmFjdGl2ZSxcbi5idG4uYWN0aXZlIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2NjY2NjYyBcXDk7XG59XG5cbi5idG46Zmlyc3QtY2hpbGQge1xuICAqbWFyZ2luLWxlZnQ6IDA7XG59XG5cbi5idG46aG92ZXIge1xuICBjb2xvcjogIzMzMzMzMztcbiAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xuICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAwIC0xNXB4O1xuICAtd2Via2l0LXRyYW5zaXRpb246IGJhY2tncm91bmQtcG9zaXRpb24gMC4xcyBsaW5lYXI7XG4gICAgIC1tb3otdHJhbnNpdGlvbjogYmFja2dyb3VuZC1wb3NpdGlvbiAwLjFzIGxpbmVhcjtcbiAgICAgICAtby10cmFuc2l0aW9uOiBiYWNrZ3JvdW5kLXBvc2l0aW9uIDAuMXMgbGluZWFyO1xuICAgICAgICAgIHRyYW5zaXRpb246IGJhY2tncm91bmQtcG9zaXRpb24gMC4xcyBsaW5lYXI7XG59XG5cbi5idG46Zm9jdXMge1xuICBvdXRsaW5lOiB0aGluIGRvdHRlZCAjMzMzO1xuICBvdXRsaW5lOiA1cHggYXV0byAtd2Via2l0LWZvY3VzLXJpbmctY29sb3I7XG4gIG91dGxpbmUtb2Zmc2V0OiAtMnB4O1xufVxuXG4uYnRuLmFjdGl2ZSxcbi5idG46YWN0aXZlIHtcbiAgYmFja2dyb3VuZC1pbWFnZTogbm9uZTtcbiAgb3V0bGluZTogMDtcbiAgLXdlYmtpdC1ib3gtc2hhZG93OiBpbnNldCAwIDJweCA0cHggcmdiYSgwLCAwLCAwLCAwLjE1KSwgMCAxcHggMnB4IHJnYmEoMCwgMCwgMCwgMC4wNSk7XG4gICAgIC1tb3otYm94LXNoYWRvdzogaW5zZXQgMCAycHggNHB4IHJnYmEoMCwgMCwgMCwgMC4xNSksIDAgMXB4IDJweCByZ2JhKDAsIDAsIDAsIDAuMDUpO1xuICAgICAgICAgIGJveC1zaGFkb3c6IGluc2V0IDAgMnB4IDRweCByZ2JhKDAsIDAsIDAsIDAuMTUpLCAwIDFweCAycHggcmdiYSgwLCAwLCAwLCAwLjA1KTtcbn1cblxuLmJ0bi5kaXNhYmxlZCxcbi5idG5bZGlzYWJsZWRdIHtcbiAgY3Vyc29yOiBkZWZhdWx0O1xuICBiYWNrZ3JvdW5kLWltYWdlOiBub25lO1xuICBvcGFjaXR5OiAwLjY1O1xuICBmaWx0ZXI6IGFscGhhKG9wYWNpdHk9NjUpO1xuICAtd2Via2l0LWJveC1zaGFkb3c6IG5vbmU7XG4gICAgIC1tb3otYm94LXNoYWRvdzogbm9uZTtcbiAgICAgICAgICBib3gtc2hhZG93OiBub25lO1xufVxuXG4uYnRuLWxhcmdlIHtcbiAgcGFkZGluZzogMTFweCAxOXB4O1xuICBmb250LXNpemU6IDE3LjVweDtcbiAgLXdlYmtpdC1ib3JkZXItcmFkaXVzOiA2cHg7XG4gICAgIC1tb3otYm9yZGVyLXJhZGl1czogNnB4O1xuICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDZweDtcbn1cblxuLmJ0bi1sYXJnZSBbY2xhc3NePVwiaWNvbi1cIl0sXG4uYnRuLWxhcmdlIFtjbGFzcyo9XCIgaWNvbi1cIl0ge1xuICBtYXJnaW4tdG9wOiA0cHg7XG59XG5cbi5idG4tc21hbGwge1xuICBwYWRkaW5nOiAycHggMTBweDtcbiAgZm9udC1zaXplOiAxMS45cHg7XG4gIC13ZWJraXQtYm9yZGVyLXJhZGl1czogM3B4O1xuICAgICAtbW96LWJvcmRlci1yYWRpdXM6IDNweDtcbiAgICAgICAgICBib3JkZXItcmFkaXVzOiAzcHg7XG59XG5cbi5idG4tc21hbGwgW2NsYXNzXj1cImljb24tXCJdLFxuLmJ0bi1zbWFsbCBbY2xhc3MqPVwiIGljb24tXCJdIHtcbiAgbWFyZ2luLXRvcDogMDtcbn1cblxuLmJ0bi1taW5pIFtjbGFzc149XCJpY29uLVwiXSxcbi5idG4tbWluaSBbY2xhc3MqPVwiIGljb24tXCJdIHtcbiAgbWFyZ2luLXRvcDogLTFweDtcbn1cblxuLmJ0bi1taW5pIHtcbiAgcGFkZGluZzogMCA2cHg7XG4gIGZvbnQtc2l6ZTogMTAuNXB4O1xuICAtd2Via2l0LWJvcmRlci1yYWRpdXM6IDNweDtcbiAgICAgLW1vei1ib3JkZXItcmFkaXVzOiAzcHg7XG4gICAgICAgICAgYm9yZGVyLXJhZGl1czogM3B4O1xufVxuXG4uYnRuLWJsb2NrIHtcbiAgZGlzcGxheTogYmxvY2s7XG4gIHdpZHRoOiAxMDAlO1xuICBwYWRkaW5nLXJpZ2h0OiAwO1xuICBwYWRkaW5nLWxlZnQ6IDA7XG4gIC13ZWJraXQtYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgICAgLW1vei1ib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAgICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG59XG5cbi5idG4tYmxvY2sgKyAuYnRuLWJsb2NrIHtcbiAgbWFyZ2luLXRvcDogNXB4O1xufVxuXG5pbnB1dFt0eXBlPVwic3VibWl0XCJdLmJ0bi1ibG9jayxcbmlucHV0W3R5cGU9XCJyZXNldFwiXS5idG4tYmxvY2ssXG5pbnB1dFt0eXBlPVwiYnV0dG9uXCJdLmJ0bi1ibG9jayB7XG4gIHdpZHRoOiAxMDAlO1xufVxuXG4uYnRuLXByaW1hcnkuYWN0aXZlLFxuLmJ0bi13YXJuaW5nLmFjdGl2ZSxcbi5idG4tZGFuZ2VyLmFjdGl2ZSxcbi5idG4tc3VjY2Vzcy5hY3RpdmUsXG4uYnRuLWluZm8uYWN0aXZlLFxuLmJ0bi1pbnZlcnNlLmFjdGl2ZSB7XG4gIGNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNzUpO1xufVxuXG4uYnRuIHtcbiAgYm9yZGVyLWNvbG9yOiAjYzVjNWM1O1xuICBib3JkZXItY29sb3I6IHJnYmEoMCwgMCwgMCwgMC4xNSkgcmdiYSgwLCAwLCAwLCAwLjE1KSByZ2JhKDAsIDAsIDAsIDAuMjUpO1xufVxuXG4uYnRuLXByaW1hcnkge1xuICBjb2xvcjogI2ZmZmZmZjtcbiAgdGV4dC1zaGFkb3c6IDAgLTFweCAwIHJnYmEoMCwgMCwgMCwgMC4yNSk7XG4gIGJhY2tncm91bmQtY29sb3I6ICMwMDZkY2M7XG4gICpiYWNrZ3JvdW5kLWNvbG9yOiAjMDA0NGNjO1xuICBiYWNrZ3JvdW5kLWltYWdlOiAtbW96LWxpbmVhci1ncmFkaWVudCh0b3AsICMwMDAwMDAsICMwMDQ0Y2MpO1xuICBiYWNrZ3JvdW5kLWltYWdlOiAtd2Via2l0LWdyYWRpZW50KGxpbmVhciwgMCAwLCAwIDEwMCUsIGZyb20oIzAwMDAwMCksIHRvKCMwMDQ0Y2MpKTtcbiAgYmFja2dyb3VuZC1pbWFnZTogLXdlYmtpdC1saW5lYXItZ3JhZGllbnQodG9wLCAjMDAwMDAwLCAjMDA0NGNjKTtcbiAgYmFja2dyb3VuZC1pbWFnZTogLW8tbGluZWFyLWdyYWRpZW50KHRvcCwgIzAwMDAwMCwgIzAwNDRjYyk7XG4gIGJhY2tncm91bmQtaW1hZ2U6IGxpbmVhci1ncmFkaWVudCh0byBib3R0b20sICMwMDAwMDAsICMwMDQ0Y2MpO1xuICBiYWNrZ3JvdW5kLXJlcGVhdDogcmVwZWF0LXg7XG4gIGJvcmRlci1jb2xvcjogIzAwNDRjYyAjMDA0NGNjICMwMDJhODA7XG4gIGJvcmRlci1jb2xvcjogcmdiYSgwLCAwLCAwLCAwLjEpIHJnYmEoMCwgMCwgMCwgMC4xKSByZ2JhKDAsIDAsIDAsIDAuMjUpO1xuICBmaWx0ZXI6IHByb2dpZDpEWEltYWdlVHJhbnNmb3JtLk1pY3Jvc29mdC5ncmFkaWVudChzdGFydENvbG9yc3RyPScjZmYwMDAwMDAnLCBlbmRDb2xvcnN0cj0nI2ZmMDA0NGNjJywgR3JhZGllbnRUeXBlPTApO1xuICBmaWx0ZXI6IHByb2dpZDpEWEltYWdlVHJhbnNmb3JtLk1pY3Jvc29mdC5ncmFkaWVudChlbmFibGVkPWZhbHNlKTtcbn1cblxuLmJ0bi1wcmltYXJ5OmhvdmVyLFxuLmJ0bi1wcmltYXJ5OmFjdGl2ZSxcbi5idG4tcHJpbWFyeS5hY3RpdmUsXG4uYnRuLXByaW1hcnkuZGlzYWJsZWQsXG4uYnRuLXByaW1hcnlbZGlzYWJsZWRdIHtcbiAgY29sb3I6ICNmZmZmZmY7XG4gIGJhY2tncm91bmQtY29sb3I6ICMwMDQ0Y2M7XG4gICpiYWNrZ3JvdW5kLWNvbG9yOiAjMDAzYmIzO1xufVxuXG4uYnRuLXByaW1hcnk6YWN0aXZlLFxuLmJ0bi1wcmltYXJ5LmFjdGl2ZSB7XG4gIGJhY2tncm91bmQtY29sb3I6ICMwMDMzOTkgXFw5O1xufVxuXG4uYnRuLXdhcm5pbmcge1xuICBjb2xvcjogI2ZmZmZmZjtcbiAgdGV4dC1zaGFkb3c6IDAgLTFweCAwIHJnYmEoMCwgMCwgMCwgMC4yNSk7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmYWE3MzI7XG4gICpiYWNrZ3JvdW5kLWNvbG9yOiAjZjg5NDA2O1xuICBiYWNrZ3JvdW5kLWltYWdlOiAtbW96LWxpbmVhci1ncmFkaWVudCh0b3AsICNmYmI0NTAsICNmODk0MDYpO1xuICBiYWNrZ3JvdW5kLWltYWdlOiAtd2Via2l0LWdyYWRpZW50KGxpbmVhciwgMCAwLCAwIDEwMCUsIGZyb20oI2ZiYjQ1MCksIHRvKCNmODk0MDYpKTtcbiAgYmFja2dyb3VuZC1pbWFnZTogLXdlYmtpdC1saW5lYXItZ3JhZGllbnQodG9wLCAjZmJiNDUwLCAjZjg5NDA2KTtcbiAgYmFja2dyb3VuZC1pbWFnZTogLW8tbGluZWFyLWdyYWRpZW50KHRvcCwgI2ZiYjQ1MCwgI2Y4OTQwNik7XG4gIGJhY2tncm91bmQtaW1hZ2U6IGxpbmVhci1ncmFkaWVudCh0byBib3R0b20sICNmYmI0NTAsICNmODk0MDYpO1xuICBiYWNrZ3JvdW5kLXJlcGVhdDogcmVwZWF0LXg7XG4gIGJvcmRlci1jb2xvcjogI2Y4OTQwNiAjZjg5NDA2ICNhZDY3MDQ7XG4gIGJvcmRlci1jb2xvcjogcmdiYSgwLCAwLCAwLCAwLjEpIHJnYmEoMCwgMCwgMCwgMC4xKSByZ2JhKDAsIDAsIDAsIDAuMjUpO1xuICBmaWx0ZXI6IHByb2dpZDpEWEltYWdlVHJhbnNmb3JtLk1pY3Jvc29mdC5ncmFkaWVudChzdGFydENvbG9yc3RyPScjZmZmYmI0NTAnLCBlbmRDb2xvcnN0cj0nI2ZmZjg5NDA2JywgR3JhZGllbnRUeXBlPTApO1xuICBmaWx0ZXI6IHByb2dpZDpEWEltYWdlVHJhbnNmb3JtLk1pY3Jvc29mdC5ncmFkaWVudChlbmFibGVkPWZhbHNlKTtcbn1cblxuLmJ0bi13YXJuaW5nOmhvdmVyLFxuLmJ0bi13YXJuaW5nOmFjdGl2ZSxcbi5idG4td2FybmluZy5hY3RpdmUsXG4uYnRuLXdhcm5pbmcuZGlzYWJsZWQsXG4uYnRuLXdhcm5pbmdbZGlzYWJsZWRdIHtcbiAgY29sb3I6ICNmZmZmZmY7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmODk0MDY7XG4gICpiYWNrZ3JvdW5kLWNvbG9yOiAjZGY4NTA1O1xufVxuXG4uYnRuLXdhcm5pbmc6YWN0aXZlLFxuLmJ0bi13YXJuaW5nLmFjdGl2ZSB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNjNjc2MDUgXFw5O1xufVxuXG4uYnRuLWRhbmdlciB7XG4gIGNvbG9yOiAjZmZmZmZmO1xuICB0ZXh0LXNoYWRvdzogMCAtMXB4IDAgcmdiYSgwLCAwLCAwLCAwLjI1KTtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2RhNGY0OTtcbiAgKmJhY2tncm91bmQtY29sb3I6ICNiZDM2MmY7XG4gIGJhY2tncm91bmQtaW1hZ2U6IC1tb3otbGluZWFyLWdyYWRpZW50KHRvcCwgI2VlNWY1YiwgI2JkMzYyZik7XG4gIGJhY2tncm91bmQtaW1hZ2U6IC13ZWJraXQtZ3JhZGllbnQobGluZWFyLCAwIDAsIDAgMTAwJSwgZnJvbSgjZWU1ZjViKSwgdG8oI2JkMzYyZikpO1xuICBiYWNrZ3JvdW5kLWltYWdlOiAtd2Via2l0LWxpbmVhci1ncmFkaWVudCh0b3AsICNlZTVmNWIsICNiZDM2MmYpO1xuICBiYWNrZ3JvdW5kLWltYWdlOiAtby1saW5lYXItZ3JhZGllbnQodG9wLCAjZWU1ZjViLCAjYmQzNjJmKTtcbiAgYmFja2dyb3VuZC1pbWFnZTogbGluZWFyLWdyYWRpZW50KHRvIGJvdHRvbSwgI2VlNWY1YiwgI2JkMzYyZik7XG4gIGJhY2tncm91bmQtcmVwZWF0OiByZXBlYXQteDtcbiAgYm9yZGVyLWNvbG9yOiAjYmQzNjJmICNiZDM2MmYgIzgwMjQyMDtcbiAgYm9yZGVyLWNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuMSkgcmdiYSgwLCAwLCAwLCAwLjEpIHJnYmEoMCwgMCwgMCwgMC4yNSk7XG4gIGZpbHRlcjogcHJvZ2lkOkRYSW1hZ2VUcmFuc2Zvcm0uTWljcm9zb2Z0LmdyYWRpZW50KHN0YXJ0Q29sb3JzdHI9JyNmZmVlNWY1YicsIGVuZENvbG9yc3RyPScjZmZiZDM2MmYnLCBHcmFkaWVudFR5cGU9MCk7XG4gIGZpbHRlcjogcHJvZ2lkOkRYSW1hZ2VUcmFuc2Zvcm0uTWljcm9zb2Z0LmdyYWRpZW50KGVuYWJsZWQ9ZmFsc2UpO1xufVxuXG4uYnRuLWRhbmdlcjpob3Zlcixcbi5idG4tZGFuZ2VyOmFjdGl2ZSxcbi5idG4tZGFuZ2VyLmFjdGl2ZSxcbi5idG4tZGFuZ2VyLmRpc2FibGVkLFxuLmJ0bi1kYW5nZXJbZGlzYWJsZWRdIHtcbiAgY29sb3I6ICNmZmZmZmY7XG4gIGJhY2tncm91bmQtY29sb3I6ICNiZDM2MmY7XG4gICpiYWNrZ3JvdW5kLWNvbG9yOiAjYTkzMDJhO1xufVxuXG4uYnRuLWRhbmdlcjphY3RpdmUsXG4uYnRuLWRhbmdlci5hY3RpdmUge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjOTQyYTI1IFxcOTtcbn1cblxuLmJ0bi1zdWNjZXNzIHtcbiAgY29sb3I6ICNmZmZmZmY7XG4gIHRleHQtc2hhZG93OiAwIC0xcHggMCByZ2JhKDAsIDAsIDAsIDAuMjUpO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjNWJiNzViO1xuICAqYmFja2dyb3VuZC1jb2xvcjogIzUxYTM1MTtcbiAgYmFja2dyb3VuZC1pbWFnZTogLW1vei1saW5lYXItZ3JhZGllbnQodG9wLCAjNjJjNDYyLCAjNTFhMzUxKTtcbiAgYmFja2dyb3VuZC1pbWFnZTogLXdlYmtpdC1ncmFkaWVudChsaW5lYXIsIDAgMCwgMCAxMDAlLCBmcm9tKCM2MmM0NjIpLCB0bygjNTFhMzUxKSk7XG4gIGJhY2tncm91bmQtaW1hZ2U6IC13ZWJraXQtbGluZWFyLWdyYWRpZW50KHRvcCwgIzYyYzQ2MiwgIzUxYTM1MSk7XG4gIGJhY2tncm91bmQtaW1hZ2U6IC1vLWxpbmVhci1ncmFkaWVudCh0b3AsICM2MmM0NjIsICM1MWEzNTEpO1xuICBiYWNrZ3JvdW5kLWltYWdlOiBsaW5lYXItZ3JhZGllbnQodG8gYm90dG9tLCAjNjJjNDYyLCAjNTFhMzUxKTtcbiAgYmFja2dyb3VuZC1yZXBlYXQ6IHJlcGVhdC14O1xuICBib3JkZXItY29sb3I6ICM1MWEzNTEgIzUxYTM1MSAjMzg3MDM4O1xuICBib3JkZXItY29sb3I6IHJnYmEoMCwgMCwgMCwgMC4xKSByZ2JhKDAsIDAsIDAsIDAuMSkgcmdiYSgwLCAwLCAwLCAwLjI1KTtcbiAgZmlsdGVyOiBwcm9naWQ6RFhJbWFnZVRyYW5zZm9ybS5NaWNyb3NvZnQuZ3JhZGllbnQoc3RhcnRDb2xvcnN0cj0nI2ZmNjJjNDYyJywgZW5kQ29sb3JzdHI9JyNmZjUxYTM1MScsIEdyYWRpZW50VHlwZT0wKTtcbiAgZmlsdGVyOiBwcm9naWQ6RFhJbWFnZVRyYW5zZm9ybS5NaWNyb3NvZnQuZ3JhZGllbnQoZW5hYmxlZD1mYWxzZSk7XG59XG5cbi5idG4tc3VjY2Vzczpob3Zlcixcbi5idG4tc3VjY2VzczphY3RpdmUsXG4uYnRuLXN1Y2Nlc3MuYWN0aXZlLFxuLmJ0bi1zdWNjZXNzLmRpc2FibGVkLFxuLmJ0bi1zdWNjZXNzW2Rpc2FibGVkXSB7XG4gIGNvbG9yOiAjZmZmZmZmO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjNTFhMzUxO1xuICAqYmFja2dyb3VuZC1jb2xvcjogIzQ5OTI0OTtcbn1cblxuLmJ0bi1zdWNjZXNzOmFjdGl2ZSxcbi5idG4tc3VjY2Vzcy5hY3RpdmUge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjNDA4MTQwIFxcOTtcbn1cblxuLmJ0bi1pbmZvIHtcbiAgY29sb3I6ICNmZmZmZmY7XG4gIHRleHQtc2hhZG93OiAwIC0xcHggMCByZ2JhKDAsIDAsIDAsIDAuMjUpO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjNDlhZmNkO1xuICAqYmFja2dyb3VuZC1jb2xvcjogIzJmOTZiNDtcbiAgYmFja2dyb3VuZC1pbWFnZTogLW1vei1saW5lYXItZ3JhZGllbnQodG9wLCAjNWJjMGRlLCAjMmY5NmI0KTtcbiAgYmFja2dyb3VuZC1pbWFnZTogLXdlYmtpdC1ncmFkaWVudChsaW5lYXIsIDAgMCwgMCAxMDAlLCBmcm9tKCM1YmMwZGUpLCB0bygjMmY5NmI0KSk7XG4gIGJhY2tncm91bmQtaW1hZ2U6IC13ZWJraXQtbGluZWFyLWdyYWRpZW50KHRvcCwgIzViYzBkZSwgIzJmOTZiNCk7XG4gIGJhY2tncm91bmQtaW1hZ2U6IC1vLWxpbmVhci1ncmFkaWVudCh0b3AsICM1YmMwZGUsICMyZjk2YjQpO1xuICBiYWNrZ3JvdW5kLWltYWdlOiBsaW5lYXItZ3JhZGllbnQodG8gYm90dG9tLCAjNWJjMGRlLCAjMmY5NmI0KTtcbiAgYmFja2dyb3VuZC1yZXBlYXQ6IHJlcGVhdC14O1xuICBib3JkZXItY29sb3I6ICMyZjk2YjQgIzJmOTZiNCAjMWY2Mzc3O1xuICBib3JkZXItY29sb3I6IHJnYmEoMCwgMCwgMCwgMC4xKSByZ2JhKDAsIDAsIDAsIDAuMSkgcmdiYSgwLCAwLCAwLCAwLjI1KTtcbiAgZmlsdGVyOiBwcm9naWQ6RFhJbWFnZVRyYW5zZm9ybS5NaWNyb3NvZnQuZ3JhZGllbnQoc3RhcnRDb2xvcnN0cj0nI2ZmNWJjMGRlJywgZW5kQ29sb3JzdHI9JyNmZjJmOTZiNCcsIEdyYWRpZW50VHlwZT0wKTtcbiAgZmlsdGVyOiBwcm9naWQ6RFhJbWFnZVRyYW5zZm9ybS5NaWNyb3NvZnQuZ3JhZGllbnQoZW5hYmxlZD1mYWxzZSk7XG59XG5cbi5idG4taW5mbzpob3Zlcixcbi5idG4taW5mbzphY3RpdmUsXG4uYnRuLWluZm8uYWN0aXZlLFxuLmJ0bi1pbmZvLmRpc2FibGVkLFxuLmJ0bi1pbmZvW2Rpc2FibGVkXSB7XG4gIGNvbG9yOiAjZmZmZmZmO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMmY5NmI0O1xuICAqYmFja2dyb3VuZC1jb2xvcjogIzJhODVhMDtcbn1cblxuLmJ0bi1pbmZvOmFjdGl2ZSxcbi5idG4taW5mby5hY3RpdmUge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMjQ3NDhjIFxcOTtcbn1cblxuLmJ0bi1pbnZlcnNlIHtcbiAgY29sb3I6ICNmZmZmZmY7XG4gIHRleHQtc2hhZG93OiAwIC0xcHggMCByZ2JhKDAsIDAsIDAsIDAuMjUpO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMzYzNjM2O1xuICAqYmFja2dyb3VuZC1jb2xvcjogIzIyMjIyMjtcbiAgYmFja2dyb3VuZC1pbWFnZTogLW1vei1saW5lYXItZ3JhZGllbnQodG9wLCAjNDQ0NDQ0LCAjMjIyMjIyKTtcbiAgYmFja2dyb3VuZC1pbWFnZTogLXdlYmtpdC1ncmFkaWVudChsaW5lYXIsIDAgMCwgMCAxMDAlLCBmcm9tKCM0NDQ0NDQpLCB0bygjMjIyMjIyKSk7XG4gIGJhY2tncm91bmQtaW1hZ2U6IC13ZWJraXQtbGluZWFyLWdyYWRpZW50KHRvcCwgIzQ0NDQ0NCwgIzIyMjIyMik7XG4gIGJhY2tncm91bmQtaW1hZ2U6IC1vLWxpbmVhci1ncmFkaWVudCh0b3AsICM0NDQ0NDQsICMyMjIyMjIpO1xuICBiYWNrZ3JvdW5kLWltYWdlOiBsaW5lYXItZ3JhZGllbnQodG8gYm90dG9tLCAjNDQ0NDQ0LCAjMjIyMjIyKTtcbiAgYmFja2dyb3VuZC1yZXBlYXQ6IHJlcGVhdC14O1xuICBib3JkZXItY29sb3I6ICMyMjIyMjIgIzIyMjIyMiAjMDAwMDAwO1xuICBib3JkZXItY29sb3I6IHJnYmEoMCwgMCwgMCwgMC4xKSByZ2JhKDAsIDAsIDAsIDAuMSkgcmdiYSgwLCAwLCAwLCAwLjI1KTtcbiAgZmlsdGVyOiBwcm9naWQ6RFhJbWFnZVRyYW5zZm9ybS5NaWNyb3NvZnQuZ3JhZGllbnQoc3RhcnRDb2xvcnN0cj0nI2ZmNDQ0NDQ0JywgZW5kQ29sb3JzdHI9JyNmZjIyMjIyMicsIEdyYWRpZW50VHlwZT0wKTtcbiAgZmlsdGVyOiBwcm9naWQ6RFhJbWFnZVRyYW5zZm9ybS5NaWNyb3NvZnQuZ3JhZGllbnQoZW5hYmxlZD1mYWxzZSk7XG59XG5cbi5idG4taW52ZXJzZTpob3Zlcixcbi5idG4taW52ZXJzZTphY3RpdmUsXG4uYnRuLWludmVyc2UuYWN0aXZlLFxuLmJ0bi1pbnZlcnNlLmRpc2FibGVkLFxuLmJ0bi1pbnZlcnNlW2Rpc2FibGVkXSB7XG4gIGNvbG9yOiAjZmZmZmZmO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMjIyMjIyO1xuICAqYmFja2dyb3VuZC1jb2xvcjogIzE1MTUxNTtcbn1cblxuLmJ0bi1pbnZlcnNlOmFjdGl2ZSxcbi5idG4taW52ZXJzZS5hY3RpdmUge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMDgwODA4IFxcOTtcbn1cblxuYnV0dG9uLmJ0bixcbmlucHV0W3R5cGU9XCJzdWJtaXRcIl0uYnRuIHtcbiAgKnBhZGRpbmctdG9wOiAzcHg7XG4gICpwYWRkaW5nLWJvdHRvbTogM3B4O1xufVxuXG5idXR0b24uYnRuOjotbW96LWZvY3VzLWlubmVyLFxuaW5wdXRbdHlwZT1cInN1Ym1pdFwiXS5idG46Oi1tb3otZm9jdXMtaW5uZXIge1xuICBwYWRkaW5nOiAwO1xuICBib3JkZXI6IDA7XG59XG5cbmJ1dHRvbi5idG4uYnRuLWxhcmdlLFxuaW5wdXRbdHlwZT1cInN1Ym1pdFwiXS5idG4uYnRuLWxhcmdlIHtcbiAgKnBhZGRpbmctdG9wOiA3cHg7XG4gICpwYWRkaW5nLWJvdHRvbTogN3B4O1xufVxuXG5idXR0b24uYnRuLmJ0bi1zbWFsbCxcbmlucHV0W3R5cGU9XCJzdWJtaXRcIl0uYnRuLmJ0bi1zbWFsbCB7XG4gICpwYWRkaW5nLXRvcDogM3B4O1xuICAqcGFkZGluZy1ib3R0b206IDNweDtcbn1cblxuYnV0dG9uLmJ0bi5idG4tbWluaSxcbmlucHV0W3R5cGU9XCJzdWJtaXRcIl0uYnRuLmJ0bi1taW5pIHtcbiAgKnBhZGRpbmctdG9wOiAxcHg7XG4gICpwYWRkaW5nLWJvdHRvbTogMXB4O1xufVxuXG4uYnRuLWxpbmssXG4uYnRuLWxpbms6YWN0aXZlLFxuLmJ0bi1saW5rW2Rpc2FibGVkXSB7XG4gIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xuICBiYWNrZ3JvdW5kLWltYWdlOiBub25lO1xuICAtd2Via2l0LWJveC1zaGFkb3c6IG5vbmU7XG4gICAgIC1tb3otYm94LXNoYWRvdzogbm9uZTtcbiAgICAgICAgICBib3gtc2hhZG93OiBub25lO1xufVxuXG4uYnRuLWxpbmsge1xuICBjb2xvcjogIzAwMDAwMDtcbiAgY3Vyc29yOiBwb2ludGVyO1xuICBib3JkZXItY29sb3I6IHRyYW5zcGFyZW50O1xuICAtd2Via2l0LWJvcmRlci1yYWRpdXM6IDA7XG4gICAgIC1tb3otYm9yZGVyLXJhZGl1czogMDtcbiAgICAgICAgICBib3JkZXItcmFkaXVzOiAwO1xufVxuXG4uYnRuLWxpbms6aG92ZXIge1xuICBjb2xvcjogIzAwMDAwMDtcbiAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XG4gIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xufVxuXG4uYnRuLWxpbmtbZGlzYWJsZWRdOmhvdmVyIHtcbiAgY29sb3I6ICMzMzMzMzM7XG4gIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbn1cblxuLmJ0bi1ncm91cCB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAqZGlzcGxheTogaW5saW5lO1xuICAqbWFyZ2luLWxlZnQ6IC4zZW07XG4gIGZvbnQtc2l6ZTogMDtcbiAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbiAgKnpvb206IDE7XG59XG5cbi5idG4tZ3JvdXA6Zmlyc3QtY2hpbGQge1xuICAqbWFyZ2luLWxlZnQ6IDA7XG59XG5cbi5idG4tZ3JvdXAgKyAuYnRuLWdyb3VwIHtcbiAgbWFyZ2luLWxlZnQ6IDVweDtcbn1cblxuLmJ0bi10b29sYmFyIHtcbiAgbWFyZ2luLXRvcDogMTBweDtcbiAgbWFyZ2luLWJvdHRvbTogMTBweDtcbiAgZm9udC1zaXplOiAwO1xufVxuXG4uYnRuLXRvb2xiYXIgPiAuYnRuICsgLmJ0bixcbi5idG4tdG9vbGJhciA+IC5idG4tZ3JvdXAgKyAuYnRuLFxuLmJ0bi10b29sYmFyID4gLmJ0biArIC5idG4tZ3JvdXAge1xuICBtYXJnaW4tbGVmdDogNXB4O1xufVxuXG4uYnRuLWdyb3VwID4gLmJ0biB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgLXdlYmtpdC1ib3JkZXItcmFkaXVzOiAwO1xuICAgICAtbW96LWJvcmRlci1yYWRpdXM6IDA7XG4gICAgICAgICAgYm9yZGVyLXJhZGl1czogMDtcbn1cblxuLmJ0bi1ncm91cCA+IC5idG4gKyAuYnRuIHtcbiAgbWFyZ2luLWxlZnQ6IC0xcHg7XG59XG5cbi5idG4tZ3JvdXAgPiAuYnRuLFxuLmJ0bi1ncm91cCA+IC5kcm9wZG93bi1tZW51LFxuLmJ0bi1ncm91cCA+IC5wb3BvdmVyIHtcbiAgZm9udC1zaXplOiAxNHB4O1xufVxuXG4uYnRuLWdyb3VwID4gLmJ0bi1taW5pIHtcbiAgZm9udC1zaXplOiAxMC41cHg7XG59XG5cbi5idG4tZ3JvdXAgPiAuYnRuLXNtYWxsIHtcbiAgZm9udC1zaXplOiAxMS45cHg7XG59XG5cbi5idG4tZ3JvdXAgPiAuYnRuLWxhcmdlIHtcbiAgZm9udC1zaXplOiAxNy41cHg7XG59XG5cbi5idG4tZ3JvdXAgPiAuYnRuOmZpcnN0LWNoaWxkIHtcbiAgbWFyZ2luLWxlZnQ6IDA7XG4gIC13ZWJraXQtYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czogNHB4O1xuICAgICAgICAgIGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6IDRweDtcbiAgLXdlYmtpdC1ib3JkZXItdG9wLWxlZnQtcmFkaXVzOiA0cHg7XG4gICAgICAgICAgYm9yZGVyLXRvcC1sZWZ0LXJhZGl1czogNHB4O1xuICAtbW96LWJvcmRlci1yYWRpdXMtYm90dG9tbGVmdDogNHB4O1xuICAtbW96LWJvcmRlci1yYWRpdXMtdG9wbGVmdDogNHB4O1xufVxuXG4uYnRuLWdyb3VwID4gLmJ0bjpsYXN0LWNoaWxkLFxuLmJ0bi1ncm91cCA+IC5kcm9wZG93bi10b2dnbGUge1xuICAtd2Via2l0LWJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiA0cHg7XG4gICAgICAgICAgYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6IDRweDtcbiAgLXdlYmtpdC1ib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czogNHB4O1xuICAgICAgICAgIGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOiA0cHg7XG4gIC1tb3otYm9yZGVyLXJhZGl1cy10b3ByaWdodDogNHB4O1xuICAtbW96LWJvcmRlci1yYWRpdXMtYm90dG9tcmlnaHQ6IDRweDtcbn1cblxuLmJ0bi1ncm91cCA+IC5idG4ubGFyZ2U6Zmlyc3QtY2hpbGQge1xuICBtYXJnaW4tbGVmdDogMDtcbiAgLXdlYmtpdC1ib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOiA2cHg7XG4gICAgICAgICAgYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czogNnB4O1xuICAtd2Via2l0LWJvcmRlci10b3AtbGVmdC1yYWRpdXM6IDZweDtcbiAgICAgICAgICBib3JkZXItdG9wLWxlZnQtcmFkaXVzOiA2cHg7XG4gIC1tb3otYm9yZGVyLXJhZGl1cy1ib3R0b21sZWZ0OiA2cHg7XG4gIC1tb3otYm9yZGVyLXJhZGl1cy10b3BsZWZ0OiA2cHg7XG59XG5cbi5idG4tZ3JvdXAgPiAuYnRuLmxhcmdlOmxhc3QtY2hpbGQsXG4uYnRuLWdyb3VwID4gLmxhcmdlLmRyb3Bkb3duLXRvZ2dsZSB7XG4gIC13ZWJraXQtYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6IDZweDtcbiAgICAgICAgICBib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogNnB4O1xuICAtd2Via2l0LWJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOiA2cHg7XG4gICAgICAgICAgYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6IDZweDtcbiAgLW1vei1ib3JkZXItcmFkaXVzLXRvcHJpZ2h0OiA2cHg7XG4gIC1tb3otYm9yZGVyLXJhZGl1cy1ib3R0b21yaWdodDogNnB4O1xufVxuXG4uYnRuLWdyb3VwID4gLmJ0bjpob3Zlcixcbi5idG4tZ3JvdXAgPiAuYnRuOmZvY3VzLFxuLmJ0bi1ncm91cCA+IC5idG46YWN0aXZlLFxuLmJ0bi1ncm91cCA+IC5idG4uYWN0aXZlIHtcbiAgei1pbmRleDogMjtcbn1cblxuLmJ0bi1ncm91cCAuZHJvcGRvd24tdG9nZ2xlOmFjdGl2ZSxcbi5idG4tZ3JvdXAub3BlbiAuZHJvcGRvd24tdG9nZ2xlIHtcbiAgb3V0bGluZTogMDtcbn1cblxuLmJ0bi1ncm91cCA+IC5idG4gKyAuZHJvcGRvd24tdG9nZ2xlIHtcbiAgKnBhZGRpbmctdG9wOiA1cHg7XG4gIHBhZGRpbmctcmlnaHQ6IDhweDtcbiAgKnBhZGRpbmctYm90dG9tOiA1cHg7XG4gIHBhZGRpbmctbGVmdDogOHB4O1xuICAtd2Via2l0LWJveC1zaGFkb3c6IGluc2V0IDFweCAwIDAgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEyNSksIGluc2V0IDAgMXB4IDAgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjIpLCAwIDFweCAycHggcmdiYSgwLCAwLCAwLCAwLjA1KTtcbiAgICAgLW1vei1ib3gtc2hhZG93OiBpbnNldCAxcHggMCAwIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xMjUpLCBpbnNldCAwIDFweCAwIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4yKSwgMCAxcHggMnB4IHJnYmEoMCwgMCwgMCwgMC4wNSk7XG4gICAgICAgICAgYm94LXNoYWRvdzogaW5zZXQgMXB4IDAgMCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTI1KSwgaW5zZXQgMCAxcHggMCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMiksIDAgMXB4IDJweCByZ2JhKDAsIDAsIDAsIDAuMDUpO1xufVxuXG4uYnRuLWdyb3VwID4gLmJ0bi1taW5pICsgLmRyb3Bkb3duLXRvZ2dsZSB7XG4gICpwYWRkaW5nLXRvcDogMnB4O1xuICBwYWRkaW5nLXJpZ2h0OiA1cHg7XG4gICpwYWRkaW5nLWJvdHRvbTogMnB4O1xuICBwYWRkaW5nLWxlZnQ6IDVweDtcbn1cblxuLmJ0bi1ncm91cCA+IC5idG4tc21hbGwgKyAuZHJvcGRvd24tdG9nZ2xlIHtcbiAgKnBhZGRpbmctdG9wOiA1cHg7XG4gICpwYWRkaW5nLWJvdHRvbTogNHB4O1xufVxuXG4uYnRuLWdyb3VwID4gLmJ0bi1sYXJnZSArIC5kcm9wZG93bi10b2dnbGUge1xuICAqcGFkZGluZy10b3A6IDdweDtcbiAgcGFkZGluZy1yaWdodDogMTJweDtcbiAgKnBhZGRpbmctYm90dG9tOiA3cHg7XG4gIHBhZGRpbmctbGVmdDogMTJweDtcbn1cblxuLmJ0bi1ncm91cC5vcGVuIC5kcm9wZG93bi10b2dnbGUge1xuICBiYWNrZ3JvdW5kLWltYWdlOiBub25lO1xuICAtd2Via2l0LWJveC1zaGFkb3c6IGluc2V0IDAgMnB4IDRweCByZ2JhKDAsIDAsIDAsIDAuMTUpLCAwIDFweCAycHggcmdiYSgwLCAwLCAwLCAwLjA1KTtcbiAgICAgLW1vei1ib3gtc2hhZG93OiBpbnNldCAwIDJweCA0cHggcmdiYSgwLCAwLCAwLCAwLjE1KSwgMCAxcHggMnB4IHJnYmEoMCwgMCwgMCwgMC4wNSk7XG4gICAgICAgICAgYm94LXNoYWRvdzogaW5zZXQgMCAycHggNHB4IHJnYmEoMCwgMCwgMCwgMC4xNSksIDAgMXB4IDJweCByZ2JhKDAsIDAsIDAsIDAuMDUpO1xufVxuXG4uYnRuLWdyb3VwLm9wZW4gLmJ0bi5kcm9wZG93bi10b2dnbGUge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZTZlNmU2O1xufVxuXG4uYnRuLWdyb3VwLm9wZW4gLmJ0bi1wcmltYXJ5LmRyb3Bkb3duLXRvZ2dsZSB7XG4gIGJhY2tncm91bmQtY29sb3I6ICMwMDQ0Y2M7XG59XG5cbi5idG4tZ3JvdXAub3BlbiAuYnRuLXdhcm5pbmcuZHJvcGRvd24tdG9nZ2xlIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2Y4OTQwNjtcbn1cblxuLmJ0bi1ncm91cC5vcGVuIC5idG4tZGFuZ2VyLmRyb3Bkb3duLXRvZ2dsZSB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNiZDM2MmY7XG59XG5cbi5idG4tZ3JvdXAub3BlbiAuYnRuLXN1Y2Nlc3MuZHJvcGRvd24tdG9nZ2xlIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogIzUxYTM1MTtcbn1cblxuLmJ0bi1ncm91cC5vcGVuIC5idG4taW5mby5kcm9wZG93bi10b2dnbGUge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMmY5NmI0O1xufVxuXG4uYnRuLWdyb3VwLm9wZW4gLmJ0bi1pbnZlcnNlLmRyb3Bkb3duLXRvZ2dsZSB7XG4gIGJhY2tncm91bmQtY29sb3I6ICMyMjIyMjI7XG59XG5cbi5idG4gLmNhcmV0IHtcbiAgbWFyZ2luLXRvcDogOHB4O1xuICBtYXJnaW4tbGVmdDogMDtcbn1cblxuLmJ0bi1taW5pIC5jYXJldCxcbi5idG4tc21hbGwgLmNhcmV0LFxuLmJ0bi1sYXJnZSAuY2FyZXQge1xuICBtYXJnaW4tdG9wOiA2cHg7XG59XG5cbi5idG4tbGFyZ2UgLmNhcmV0IHtcbiAgYm9yZGVyLXRvcC13aWR0aDogNXB4O1xuICBib3JkZXItcmlnaHQtd2lkdGg6IDVweDtcbiAgYm9yZGVyLWxlZnQtd2lkdGg6IDVweDtcbn1cblxuLmRyb3B1cCAuYnRuLWxhcmdlIC5jYXJldCB7XG4gIGJvcmRlci1ib3R0b20td2lkdGg6IDVweDtcbn1cblxuLmJ0bi1wcmltYXJ5IC5jYXJldCxcbi5idG4td2FybmluZyAuY2FyZXQsXG4uYnRuLWRhbmdlciAuY2FyZXQsXG4uYnRuLWluZm8gLmNhcmV0LFxuLmJ0bi1zdWNjZXNzIC5jYXJldCxcbi5idG4taW52ZXJzZSAuY2FyZXQge1xuICBib3JkZXItdG9wLWNvbG9yOiAjZmZmZmZmO1xuICBib3JkZXItYm90dG9tLWNvbG9yOiAjZmZmZmZmO1xufVxuXG4uYnRuLWdyb3VwLXZlcnRpY2FsIHtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAqZGlzcGxheTogaW5saW5lO1xuICAvKiBJRTcgaW5saW5lLWJsb2NrIGhhY2sgKi9cblxuICAqem9vbTogMTtcbn1cblxuLmJ0bi1ncm91cC12ZXJ0aWNhbCA+IC5idG4ge1xuICBkaXNwbGF5OiBibG9jaztcbiAgZmxvYXQ6IG5vbmU7XG4gIG1heC13aWR0aDogMTAwJTtcbiAgLXdlYmtpdC1ib3JkZXItcmFkaXVzOiAwO1xuICAgICAtbW96LWJvcmRlci1yYWRpdXM6IDA7XG4gICAgICAgICAgYm9yZGVyLXJhZGl1czogMDtcbn1cblxuLmJ0bi1ncm91cC12ZXJ0aWNhbCA+IC5idG4gKyAuYnRuIHtcbiAgbWFyZ2luLXRvcDogLTFweDtcbiAgbWFyZ2luLWxlZnQ6IDA7XG59XG5cbi5idG4tZ3JvdXAtdmVydGljYWwgPiAuYnRuOmZpcnN0LWNoaWxkIHtcbiAgLXdlYmtpdC1ib3JkZXItcmFkaXVzOiA0cHggNHB4IDAgMDtcbiAgICAgLW1vei1ib3JkZXItcmFkaXVzOiA0cHggNHB4IDAgMDtcbiAgICAgICAgICBib3JkZXItcmFkaXVzOiA0cHggNHB4IDAgMDtcbn1cblxuLmJ0bi1ncm91cC12ZXJ0aWNhbCA+IC5idG46bGFzdC1jaGlsZCB7XG4gIC13ZWJraXQtYm9yZGVyLXJhZGl1czogMCAwIDRweCA0cHg7XG4gICAgIC1tb3otYm9yZGVyLXJhZGl1czogMCAwIDRweCA0cHg7XG4gICAgICAgICAgYm9yZGVyLXJhZGl1czogMCAwIDRweCA0cHg7XG59XG5cbi5idG4tZ3JvdXAtdmVydGljYWwgPiAuYnRuLWxhcmdlOmZpcnN0LWNoaWxkIHtcbiAgLXdlYmtpdC1ib3JkZXItcmFkaXVzOiA2cHggNnB4IDAgMDtcbiAgICAgLW1vei1ib3JkZXItcmFkaXVzOiA2cHggNnB4IDAgMDtcbiAgICAgICAgICBib3JkZXItcmFkaXVzOiA2cHggNnB4IDAgMDtcbn1cblxuLmJ0bi1ncm91cC12ZXJ0aWNhbCA+IC5idG4tbGFyZ2U6bGFzdC1jaGlsZCB7XG4gIC13ZWJraXQtYm9yZGVyLXJhZGl1czogMCAwIDZweCA2cHg7XG4gICAgIC1tb3otYm9yZGVyLXJhZGl1czogMCAwIDZweCA2cHg7XG4gICAgICAgICAgYm9yZGVyLXJhZGl1czogMCAwIDZweCA2cHg7XG59XG5cbi5hbGVydCB7XG4gIHBhZGRpbmc6IDhweCAzNXB4IDhweCAxNHB4O1xuICBtYXJnaW4tYm90dG9tOiAyMHB4O1xuICB0ZXh0LXNoYWRvdzogMCAxcHggMCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNSk7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmY2Y4ZTM7XG4gIGJvcmRlcjogMXB4IHNvbGlkICNmYmVlZDU7XG4gIC13ZWJraXQtYm9yZGVyLXJhZGl1czogNHB4O1xuICAgICAtbW96LWJvcmRlci1yYWRpdXM6IDRweDtcbiAgICAgICAgICBib3JkZXItcmFkaXVzOiA0cHg7XG59XG5cbi5hbGVydCxcbi5hbGVydCBoNCB7XG4gIGNvbG9yOiAjYzA5ODUzO1xufVxuXG4uYWxlcnQgaDQge1xuICBtYXJnaW46IDA7XG59XG5cbi5hbGVydCAuY2xvc2Uge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIHRvcDogLTJweDtcbiAgcmlnaHQ6IC0yMXB4O1xuICBsaW5lLWhlaWdodDogMjBweDtcbn1cblxuLmFsZXJ0LXN1Y2Nlc3Mge1xuICBjb2xvcjogIzQ2ODg0NztcbiAgYmFja2dyb3VuZC1jb2xvcjogI2RmZjBkODtcbiAgYm9yZGVyLWNvbG9yOiAjZDZlOWM2O1xufVxuXG4uYWxlcnQtc3VjY2VzcyBoNCB7XG4gIGNvbG9yOiAjNDY4ODQ3O1xufVxuXG4uYWxlcnQtZGFuZ2VyLFxuLmFsZXJ0LWVycm9yIHtcbiAgY29sb3I6ICNiOTRhNDg7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmMmRlZGU7XG4gIGJvcmRlci1jb2xvcjogI2VlZDNkNztcbn1cblxuLmFsZXJ0LWRhbmdlciBoNCxcbi5hbGVydC1lcnJvciBoNCB7XG4gIGNvbG9yOiAjYjk0YTQ4O1xufVxuXG4uYWxlcnQtaW5mbyB7XG4gIGNvbG9yOiAjM2E4N2FkO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZDllZGY3O1xuICBib3JkZXItY29sb3I6ICNiY2U4ZjE7XG59XG5cbi5hbGVydC1pbmZvIGg0IHtcbiAgY29sb3I6ICMzYTg3YWQ7XG59XG5cbi5hbGVydC1ibG9jayB7XG4gIHBhZGRpbmctdG9wOiAxNHB4O1xuICBwYWRkaW5nLWJvdHRvbTogMTRweDtcbn1cblxuLmFsZXJ0LWJsb2NrID4gcCxcbi5hbGVydC1ibG9jayA+IHVsIHtcbiAgbWFyZ2luLWJvdHRvbTogMDtcbn1cblxuLmFsZXJ0LWJsb2NrIHAgKyBwIHtcbiAgbWFyZ2luLXRvcDogNXB4O1xufVxuXG4ubmF2IHtcbiAgbWFyZ2luLWJvdHRvbTogMjBweDtcbiAgbWFyZ2luLWxlZnQ6IDA7XG4gIGxpc3Qtc3R5bGU6IG5vbmU7XG59XG5cbi5uYXYgPiBsaSA+IGEge1xuICBkaXNwbGF5OiBibG9jaztcbn1cblxuLm5hdiA+IGxpID4gYTpob3ZlciB7XG4gIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2VlZWVlZTtcbn1cblxuLm5hdiA+IGxpID4gYSA+IGltZyB7XG4gIG1heC13aWR0aDogbm9uZTtcbn1cblxuLm5hdiA+IC5wdWxsLXJpZ2h0IHtcbiAgZmxvYXQ6IHJpZ2h0O1xufVxuXG4ubmF2LWhlYWRlciB7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICBwYWRkaW5nOiAzcHggMTVweDtcbiAgZm9udC1zaXplOiAxMXB4O1xuICBmb250LXdlaWdodDogYm9sZDtcbiAgbGluZS1oZWlnaHQ6IDIwcHg7XG4gIGNvbG9yOiAjOTk5OTk5O1xuICB0ZXh0LXNoYWRvdzogMCAxcHggMCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNSk7XG4gIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7XG59XG5cbi5uYXYgbGkgKyAubmF2LWhlYWRlciB7XG4gIG1hcmdpbi10b3A6IDlweDtcbn1cblxuLm5hdi1saXN0IHtcbiAgcGFkZGluZy1yaWdodDogMTVweDtcbiAgcGFkZGluZy1sZWZ0OiAxNXB4O1xuICBtYXJnaW4tYm90dG9tOiAwO1xufVxuXG4ubmF2LWxpc3QgPiBsaSA+IGEsXG4ubmF2LWxpc3QgLm5hdi1oZWFkZXIge1xuICBtYXJnaW4tcmlnaHQ6IC0xNXB4O1xuICBtYXJnaW4tbGVmdDogLTE1cHg7XG4gIHRleHQtc2hhZG93OiAwIDFweCAwIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC41KTtcbn1cblxuLm5hdi1saXN0ID4gbGkgPiBhIHtcbiAgcGFkZGluZzogM3B4IDE1cHg7XG59XG5cbi5uYXYtbGlzdCA+IC5hY3RpdmUgPiBhLFxuLm5hdi1saXN0ID4gLmFjdGl2ZSA+IGE6aG92ZXIge1xuICBjb2xvcjogI2ZmZmZmZjtcbiAgdGV4dC1zaGFkb3c6IDAgLTFweCAwIHJnYmEoMCwgMCwgMCwgMC4yKTtcbiAgYmFja2dyb3VuZC1jb2xvcjogIzAwMDAwMDtcbn1cblxuLm5hdi1saXN0IFtjbGFzc149XCJpY29uLVwiXSxcbi5uYXYtbGlzdCBbY2xhc3MqPVwiIGljb24tXCJdIHtcbiAgbWFyZ2luLXJpZ2h0OiAycHg7XG59XG5cbi5uYXYtbGlzdCAuZGl2aWRlciB7XG4gICp3aWR0aDogMTAwJTtcbiAgaGVpZ2h0OiAxcHg7XG4gIG1hcmdpbjogOXB4IDFweDtcbiAgKm1hcmdpbjogLTVweCAwIDVweDtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2U1ZTVlNTtcbiAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNmZmZmZmY7XG59XG5cbi5uYXYtdGFicyxcbi5uYXYtcGlsbHMge1xuICAqem9vbTogMTtcbn1cblxuLm5hdi10YWJzOmJlZm9yZSxcbi5uYXYtcGlsbHM6YmVmb3JlLFxuLm5hdi10YWJzOmFmdGVyLFxuLm5hdi1waWxsczphZnRlciB7XG4gIGRpc3BsYXk6IHRhYmxlO1xuICBsaW5lLWhlaWdodDogMDtcbiAgY29udGVudDogXCJcIjtcbn1cblxuLm5hdi10YWJzOmFmdGVyLFxuLm5hdi1waWxsczphZnRlciB7XG4gIGNsZWFyOiBib3RoO1xufVxuXG4ubmF2LXRhYnMgPiBsaSxcbi5uYXYtcGlsbHMgPiBsaSB7XG4gIGZsb2F0OiBsZWZ0O1xufVxuXG4ubmF2LXRhYnMgPiBsaSA+IGEsXG4ubmF2LXBpbGxzID4gbGkgPiBhIHtcbiAgcGFkZGluZy1yaWdodDogMTJweDtcbiAgcGFkZGluZy1sZWZ0OiAxMnB4O1xuICBtYXJnaW4tcmlnaHQ6IDJweDtcbiAgbGluZS1oZWlnaHQ6IDE0cHg7XG59XG5cbi5uYXYtdGFicyB7XG4gIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjZGRkO1xufVxuXG4ubmF2LXRhYnMgPiBsaSB7XG4gIG1hcmdpbi1ib3R0b206IC0xcHg7XG59XG5cbi5uYXYtdGFicyA+IGxpID4gYSB7XG4gIHBhZGRpbmctdG9wOiA4cHg7XG4gIHBhZGRpbmctYm90dG9tOiA4cHg7XG4gIGxpbmUtaGVpZ2h0OiAyMHB4O1xuICBib3JkZXI6IDFweCBzb2xpZCB0cmFuc3BhcmVudDtcbiAgLXdlYmtpdC1ib3JkZXItcmFkaXVzOiA0cHggNHB4IDAgMDtcbiAgICAgLW1vei1ib3JkZXItcmFkaXVzOiA0cHggNHB4IDAgMDtcbiAgICAgICAgICBib3JkZXItcmFkaXVzOiA0cHggNHB4IDAgMDtcbn1cblxuLm5hdi10YWJzID4gbGkgPiBhOmhvdmVyIHtcbiAgYm9yZGVyLWNvbG9yOiAjZWVlZWVlICNlZWVlZWUgI2RkZGRkZDtcbn1cblxuLm5hdi10YWJzID4gLmFjdGl2ZSA+IGEsXG4ubmF2LXRhYnMgPiAuYWN0aXZlID4gYTpob3ZlciB7XG4gIGNvbG9yOiAjNTU1NTU1O1xuICBjdXJzb3I6IGRlZmF1bHQ7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmZmZmY7XG4gIGJvcmRlcjogMXB4IHNvbGlkICNkZGQ7XG4gIGJvcmRlci1ib3R0b20tY29sb3I6IHRyYW5zcGFyZW50O1xufVxuXG4ubmF2LXBpbGxzID4gbGkgPiBhIHtcbiAgcGFkZGluZy10b3A6IDhweDtcbiAgcGFkZGluZy1ib3R0b206IDhweDtcbiAgbWFyZ2luLXRvcDogMnB4O1xuICBtYXJnaW4tYm90dG9tOiAycHg7XG4gIC13ZWJraXQtYm9yZGVyLXJhZGl1czogNXB4O1xuICAgICAtbW96LWJvcmRlci1yYWRpdXM6IDVweDtcbiAgICAgICAgICBib3JkZXItcmFkaXVzOiA1cHg7XG59XG5cbi5uYXYtcGlsbHMgPiAuYWN0aXZlID4gYSxcbi5uYXYtcGlsbHMgPiAuYWN0aXZlID4gYTpob3ZlciB7XG4gIGNvbG9yOiAjZmZmZmZmO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMDAwMDAwO1xufVxuXG4ubmF2LXN0YWNrZWQgPiBsaSB7XG4gIGZsb2F0OiBub25lO1xufVxuXG4ubmF2LXN0YWNrZWQgPiBsaSA+IGEge1xuICBtYXJnaW4tcmlnaHQ6IDA7XG59XG5cbi5uYXYtdGFicy5uYXYtc3RhY2tlZCB7XG4gIGJvcmRlci1ib3R0b206IDA7XG59XG5cbi5uYXYtdGFicy5uYXYtc3RhY2tlZCA+IGxpID4gYSB7XG4gIGJvcmRlcjogMXB4IHNvbGlkICNkZGQ7XG4gIC13ZWJraXQtYm9yZGVyLXJhZGl1czogMDtcbiAgICAgLW1vei1ib3JkZXItcmFkaXVzOiAwO1xuICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDA7XG59XG5cbi5uYXYtdGFicy5uYXYtc3RhY2tlZCA+IGxpOmZpcnN0LWNoaWxkID4gYSB7XG4gIC13ZWJraXQtYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6IDRweDtcbiAgICAgICAgICBib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogNHB4O1xuICAtd2Via2l0LWJvcmRlci10b3AtbGVmdC1yYWRpdXM6IDRweDtcbiAgICAgICAgICBib3JkZXItdG9wLWxlZnQtcmFkaXVzOiA0cHg7XG4gIC1tb3otYm9yZGVyLXJhZGl1cy10b3ByaWdodDogNHB4O1xuICAtbW96LWJvcmRlci1yYWRpdXMtdG9wbGVmdDogNHB4O1xufVxuXG4ubmF2LXRhYnMubmF2LXN0YWNrZWQgPiBsaTpsYXN0LWNoaWxkID4gYSB7XG4gIC13ZWJraXQtYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6IDRweDtcbiAgICAgICAgICBib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czogNHB4O1xuICAtd2Via2l0LWJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6IDRweDtcbiAgICAgICAgICBib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOiA0cHg7XG4gIC1tb3otYm9yZGVyLXJhZGl1cy1ib3R0b21yaWdodDogNHB4O1xuICAtbW96LWJvcmRlci1yYWRpdXMtYm90dG9tbGVmdDogNHB4O1xufVxuXG4ubmF2LXRhYnMubmF2LXN0YWNrZWQgPiBsaSA+IGE6aG92ZXIge1xuICB6LWluZGV4OiAyO1xuICBib3JkZXItY29sb3I6ICNkZGQ7XG59XG5cbi5uYXYtcGlsbHMubmF2LXN0YWNrZWQgPiBsaSA+IGEge1xuICBtYXJnaW4tYm90dG9tOiAzcHg7XG59XG5cbi5uYXYtcGlsbHMubmF2LXN0YWNrZWQgPiBsaTpsYXN0LWNoaWxkID4gYSB7XG4gIG1hcmdpbi1ib3R0b206IDFweDtcbn1cblxuLm5hdi10YWJzIC5kcm9wZG93bi1tZW51IHtcbiAgLXdlYmtpdC1ib3JkZXItcmFkaXVzOiAwIDAgNnB4IDZweDtcbiAgICAgLW1vei1ib3JkZXItcmFkaXVzOiAwIDAgNnB4IDZweDtcbiAgICAgICAgICBib3JkZXItcmFkaXVzOiAwIDAgNnB4IDZweDtcbn1cblxuLm5hdi1waWxscyAuZHJvcGRvd24tbWVudSB7XG4gIC13ZWJraXQtYm9yZGVyLXJhZGl1czogNnB4O1xuICAgICAtbW96LWJvcmRlci1yYWRpdXM6IDZweDtcbiAgICAgICAgICBib3JkZXItcmFkaXVzOiA2cHg7XG59XG5cbi5uYXYgLmRyb3Bkb3duLXRvZ2dsZSAuY2FyZXQge1xuICBtYXJnaW4tdG9wOiA2cHg7XG4gIGJvcmRlci10b3AtY29sb3I6ICMwMDAwMDA7XG4gIGJvcmRlci1ib3R0b20tY29sb3I6ICMwMDAwMDA7XG59XG5cbi5uYXYgLmRyb3Bkb3duLXRvZ2dsZTpob3ZlciAuY2FyZXQge1xuICBib3JkZXItdG9wLWNvbG9yOiAjMDAwMDAwO1xuICBib3JkZXItYm90dG9tLWNvbG9yOiAjMDAwMDAwO1xufVxuXG4vKiBtb3ZlIGRvd24gY2FyZXRzIGZvciB0YWJzICovXG5cbi5uYXYtdGFicyAuZHJvcGRvd24tdG9nZ2xlIC5jYXJldCB7XG4gIG1hcmdpbi10b3A6IDhweDtcbn1cblxuLm5hdiAuYWN0aXZlIC5kcm9wZG93bi10b2dnbGUgLmNhcmV0IHtcbiAgYm9yZGVyLXRvcC1jb2xvcjogI2ZmZjtcbiAgYm9yZGVyLWJvdHRvbS1jb2xvcjogI2ZmZjtcbn1cblxuLm5hdi10YWJzIC5hY3RpdmUgLmRyb3Bkb3duLXRvZ2dsZSAuY2FyZXQge1xuICBib3JkZXItdG9wLWNvbG9yOiAjNTU1NTU1O1xuICBib3JkZXItYm90dG9tLWNvbG9yOiAjNTU1NTU1O1xufVxuXG4ubmF2ID4gLmRyb3Bkb3duLmFjdGl2ZSA+IGE6aG92ZXIge1xuICBjdXJzb3I6IHBvaW50ZXI7XG59XG5cbi5uYXYtdGFicyAub3BlbiAuZHJvcGRvd24tdG9nZ2xlLFxuLm5hdi1waWxscyAub3BlbiAuZHJvcGRvd24tdG9nZ2xlLFxuLm5hdiA+IGxpLmRyb3Bkb3duLm9wZW4uYWN0aXZlID4gYTpob3ZlciB7XG4gIGNvbG9yOiAjZmZmZmZmO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjOTk5OTk5O1xuICBib3JkZXItY29sb3I6ICM5OTk5OTk7XG59XG5cbi5uYXYgbGkuZHJvcGRvd24ub3BlbiAuY2FyZXQsXG4ubmF2IGxpLmRyb3Bkb3duLm9wZW4uYWN0aXZlIC5jYXJldCxcbi5uYXYgbGkuZHJvcGRvd24ub3BlbiBhOmhvdmVyIC5jYXJldCB7XG4gIGJvcmRlci10b3AtY29sb3I6ICNmZmZmZmY7XG4gIGJvcmRlci1ib3R0b20tY29sb3I6ICNmZmZmZmY7XG4gIG9wYWNpdHk6IDE7XG4gIGZpbHRlcjogYWxwaGEob3BhY2l0eT0xMDApO1xufVxuXG4udGFicy1zdGFja2VkIC5vcGVuID4gYTpob3ZlciB7XG4gIGJvcmRlci1jb2xvcjogIzk5OTk5OTtcbn1cblxuLnRhYmJhYmxlIHtcbiAgKnpvb206IDE7XG59XG5cbi50YWJiYWJsZTpiZWZvcmUsXG4udGFiYmFibGU6YWZ0ZXIge1xuICBkaXNwbGF5OiB0YWJsZTtcbiAgbGluZS1oZWlnaHQ6IDA7XG4gIGNvbnRlbnQ6IFwiXCI7XG59XG5cbi50YWJiYWJsZTphZnRlciB7XG4gIGNsZWFyOiBib3RoO1xufVxuXG4udGFiLWNvbnRlbnQge1xuICBvdmVyZmxvdzogYXV0bztcbn1cblxuLnRhYnMtYmVsb3cgPiAubmF2LXRhYnMsXG4udGFicy1yaWdodCA+IC5uYXYtdGFicyxcbi50YWJzLWxlZnQgPiAubmF2LXRhYnMge1xuICBib3JkZXItYm90dG9tOiAwO1xufVxuXG4udGFiLWNvbnRlbnQgPiAudGFiLXBhbmUsXG4ucGlsbC1jb250ZW50ID4gLnBpbGwtcGFuZSB7XG4gIGRpc3BsYXk6IG5vbmU7XG59XG5cbi50YWItY29udGVudCA+IC5hY3RpdmUsXG4ucGlsbC1jb250ZW50ID4gLmFjdGl2ZSB7XG4gIGRpc3BsYXk6IGJsb2NrO1xufVxuXG4udGFicy1iZWxvdyA+IC5uYXYtdGFicyB7XG4gIGJvcmRlci10b3A6IDFweCBzb2xpZCAjZGRkO1xufVxuXG4udGFicy1iZWxvdyA+IC5uYXYtdGFicyA+IGxpIHtcbiAgbWFyZ2luLXRvcDogLTFweDtcbiAgbWFyZ2luLWJvdHRvbTogMDtcbn1cblxuLnRhYnMtYmVsb3cgPiAubmF2LXRhYnMgPiBsaSA+IGEge1xuICAtd2Via2l0LWJvcmRlci1yYWRpdXM6IDAgMCA0cHggNHB4O1xuICAgICAtbW96LWJvcmRlci1yYWRpdXM6IDAgMCA0cHggNHB4O1xuICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDAgMCA0cHggNHB4O1xufVxuXG4udGFicy1iZWxvdyA+IC5uYXYtdGFicyA+IGxpID4gYTpob3ZlciB7XG4gIGJvcmRlci10b3AtY29sb3I6ICNkZGQ7XG4gIGJvcmRlci1ib3R0b20tY29sb3I6IHRyYW5zcGFyZW50O1xufVxuXG4udGFicy1iZWxvdyA+IC5uYXYtdGFicyA+IC5hY3RpdmUgPiBhLFxuLnRhYnMtYmVsb3cgPiAubmF2LXRhYnMgPiAuYWN0aXZlID4gYTpob3ZlciB7XG4gIGJvcmRlci1jb2xvcjogdHJhbnNwYXJlbnQgI2RkZCAjZGRkICNkZGQ7XG59XG5cbi50YWJzLWxlZnQgPiAubmF2LXRhYnMgPiBsaSxcbi50YWJzLXJpZ2h0ID4gLm5hdi10YWJzID4gbGkge1xuICBmbG9hdDogbm9uZTtcbn1cblxuLnRhYnMtbGVmdCA+IC5uYXYtdGFicyA+IGxpID4gYSxcbi50YWJzLXJpZ2h0ID4gLm5hdi10YWJzID4gbGkgPiBhIHtcbiAgbWluLXdpZHRoOiA3NHB4O1xuICBtYXJnaW4tcmlnaHQ6IDA7XG4gIG1hcmdpbi1ib3R0b206IDNweDtcbn1cblxuLnRhYnMtbGVmdCA+IC5uYXYtdGFicyB7XG4gIGZsb2F0OiBsZWZ0O1xuICBtYXJnaW4tcmlnaHQ6IDE5cHg7XG4gIGJvcmRlci1yaWdodDogMXB4IHNvbGlkICNkZGQ7XG59XG5cbi50YWJzLWxlZnQgPiAubmF2LXRhYnMgPiBsaSA+IGEge1xuICBtYXJnaW4tcmlnaHQ6IC0xcHg7XG4gIC13ZWJraXQtYm9yZGVyLXJhZGl1czogNHB4IDAgMCA0cHg7XG4gICAgIC1tb3otYm9yZGVyLXJhZGl1czogNHB4IDAgMCA0cHg7XG4gICAgICAgICAgYm9yZGVyLXJhZGl1czogNHB4IDAgMCA0cHg7XG59XG5cbi50YWJzLWxlZnQgPiAubmF2LXRhYnMgPiBsaSA+IGE6aG92ZXIge1xuICBib3JkZXItY29sb3I6ICNlZWVlZWUgI2RkZGRkZCAjZWVlZWVlICNlZWVlZWU7XG59XG5cbi50YWJzLWxlZnQgPiAubmF2LXRhYnMgLmFjdGl2ZSA+IGEsXG4udGFicy1sZWZ0ID4gLm5hdi10YWJzIC5hY3RpdmUgPiBhOmhvdmVyIHtcbiAgYm9yZGVyLWNvbG9yOiAjZGRkIHRyYW5zcGFyZW50ICNkZGQgI2RkZDtcbiAgKmJvcmRlci1yaWdodC1jb2xvcjogI2ZmZmZmZjtcbn1cblxuLnRhYnMtcmlnaHQgPiAubmF2LXRhYnMge1xuICBmbG9hdDogcmlnaHQ7XG4gIG1hcmdpbi1sZWZ0OiAxOXB4O1xuICBib3JkZXItbGVmdDogMXB4IHNvbGlkICNkZGQ7XG59XG5cbi50YWJzLXJpZ2h0ID4gLm5hdi10YWJzID4gbGkgPiBhIHtcbiAgbWFyZ2luLWxlZnQ6IC0xcHg7XG4gIC13ZWJraXQtYm9yZGVyLXJhZGl1czogMCA0cHggNHB4IDA7XG4gICAgIC1tb3otYm9yZGVyLXJhZGl1czogMCA0cHggNHB4IDA7XG4gICAgICAgICAgYm9yZGVyLXJhZGl1czogMCA0cHggNHB4IDA7XG59XG5cbi50YWJzLXJpZ2h0ID4gLm5hdi10YWJzID4gbGkgPiBhOmhvdmVyIHtcbiAgYm9yZGVyLWNvbG9yOiAjZWVlZWVlICNlZWVlZWUgI2VlZWVlZSAjZGRkZGRkO1xufVxuXG4udGFicy1yaWdodCA+IC5uYXYtdGFicyAuYWN0aXZlID4gYSxcbi50YWJzLXJpZ2h0ID4gLm5hdi10YWJzIC5hY3RpdmUgPiBhOmhvdmVyIHtcbiAgYm9yZGVyLWNvbG9yOiAjZGRkICNkZGQgI2RkZCB0cmFuc3BhcmVudDtcbiAgKmJvcmRlci1sZWZ0LWNvbG9yOiAjZmZmZmZmO1xufVxuXG4ubmF2ID4gLmRpc2FibGVkID4gYSB7XG4gIGNvbG9yOiAjOTk5OTk5O1xufVxuXG4ubmF2ID4gLmRpc2FibGVkID4gYTpob3ZlciB7XG4gIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbiAgY3Vyc29yOiBkZWZhdWx0O1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcbn1cblxuLm5hdmJhciB7XG4gICpwb3NpdGlvbjogcmVsYXRpdmU7XG4gICp6LWluZGV4OiAyO1xuICBtYXJnaW4tYm90dG9tOiAyMHB4O1xuICBvdmVyZmxvdzogdmlzaWJsZTtcbn1cblxuLm5hdmJhci1pbm5lciB7XG4gIG1pbi1oZWlnaHQ6IDQwcHg7XG4gIHBhZGRpbmctcmlnaHQ6IDIwcHg7XG4gIHBhZGRpbmctbGVmdDogMjBweDtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZhZmFmYTtcbiAgYmFja2dyb3VuZC1pbWFnZTogLW1vei1saW5lYXItZ3JhZGllbnQodG9wLCAjZmZmZmZmLCAjZjJmMmYyKTtcbiAgYmFja2dyb3VuZC1pbWFnZTogLXdlYmtpdC1ncmFkaWVudChsaW5lYXIsIDAgMCwgMCAxMDAlLCBmcm9tKCNmZmZmZmYpLCB0bygjZjJmMmYyKSk7XG4gIGJhY2tncm91bmQtaW1hZ2U6IC13ZWJraXQtbGluZWFyLWdyYWRpZW50KHRvcCwgI2ZmZmZmZiwgI2YyZjJmMik7XG4gIGJhY2tncm91bmQtaW1hZ2U6IC1vLWxpbmVhci1ncmFkaWVudCh0b3AsICNmZmZmZmYsICNmMmYyZjIpO1xuICBiYWNrZ3JvdW5kLWltYWdlOiBsaW5lYXItZ3JhZGllbnQodG8gYm90dG9tLCAjZmZmZmZmLCAjZjJmMmYyKTtcbiAgYmFja2dyb3VuZC1yZXBlYXQ6IHJlcGVhdC14O1xuICBib3JkZXI6IDFweCBzb2xpZCAjZDRkNGQ0O1xuICAtd2Via2l0LWJvcmRlci1yYWRpdXM6IDRweDtcbiAgICAgLW1vei1ib3JkZXItcmFkaXVzOiA0cHg7XG4gICAgICAgICAgYm9yZGVyLXJhZGl1czogNHB4O1xuICBmaWx0ZXI6IHByb2dpZDpEWEltYWdlVHJhbnNmb3JtLk1pY3Jvc29mdC5ncmFkaWVudChzdGFydENvbG9yc3RyPScjZmZmZmZmZmYnLCBlbmRDb2xvcnN0cj0nI2ZmZjJmMmYyJywgR3JhZGllbnRUeXBlPTApO1xuICAqem9vbTogMTtcbiAgLXdlYmtpdC1ib3gtc2hhZG93OiAwIDFweCA0cHggcmdiYSgwLCAwLCAwLCAwLjA2NSk7XG4gICAgIC1tb3otYm94LXNoYWRvdzogMCAxcHggNHB4IHJnYmEoMCwgMCwgMCwgMC4wNjUpO1xuICAgICAgICAgIGJveC1zaGFkb3c6IDAgMXB4IDRweCByZ2JhKDAsIDAsIDAsIDAuMDY1KTtcbn1cblxuLm5hdmJhci1pbm5lcjpiZWZvcmUsXG4ubmF2YmFyLWlubmVyOmFmdGVyIHtcbiAgZGlzcGxheTogdGFibGU7XG4gIGxpbmUtaGVpZ2h0OiAwO1xuICBjb250ZW50OiBcIlwiO1xufVxuXG4ubmF2YmFyLWlubmVyOmFmdGVyIHtcbiAgY2xlYXI6IGJvdGg7XG59XG5cbi5uYXZiYXIgLmNvbnRhaW5lciB7XG4gIHdpZHRoOiBhdXRvO1xufVxuXG4ubmF2LWNvbGxhcHNlLmNvbGxhcHNlIHtcbiAgaGVpZ2h0OiBhdXRvO1xuICBvdmVyZmxvdzogdmlzaWJsZTtcbn1cblxuLm5hdmJhciAuYnJhbmQge1xuICBkaXNwbGF5OiBibG9jaztcbiAgZmxvYXQ6IGxlZnQ7XG4gIHBhZGRpbmc6IDEwcHggMjBweCAxMHB4O1xuICBtYXJnaW4tbGVmdDogLTIwcHg7XG4gIGZvbnQtc2l6ZTogMjBweDtcbiAgZm9udC13ZWlnaHQ6IDIwMDtcbiAgY29sb3I6ICM3Nzc3Nzc7XG4gIHRleHQtc2hhZG93OiAwIDFweCAwICNmZmZmZmY7XG59XG5cbi5uYXZiYXIgLmJyYW5kOmhvdmVyIHtcbiAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xufVxuXG4ubmF2YmFyLXRleHQge1xuICBtYXJnaW4tYm90dG9tOiAwO1xuICBsaW5lLWhlaWdodDogNDBweDtcbiAgY29sb3I6ICM3Nzc3Nzc7XG59XG5cbi5uYXZiYXItbGluayB7XG4gIGNvbG9yOiAjNzc3Nzc3O1xufVxuXG4ubmF2YmFyLWxpbms6aG92ZXIge1xuICBjb2xvcjogIzMzMzMzMztcbn1cblxuLm5hdmJhciAuZGl2aWRlci12ZXJ0aWNhbCB7XG4gIGhlaWdodDogNDBweDtcbiAgbWFyZ2luOiAwIDlweDtcbiAgYm9yZGVyLXJpZ2h0OiAxcHggc29saWQgI2ZmZmZmZjtcbiAgYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjZjJmMmYyO1xufVxuXG4ubmF2YmFyIC5idG4sXG4ubmF2YmFyIC5idG4tZ3JvdXAge1xuICBtYXJnaW4tdG9wOiA1cHg7XG59XG5cbi5uYXZiYXIgLmJ0bi1ncm91cCAuYnRuLFxuLm5hdmJhciAuaW5wdXQtcHJlcGVuZCAuYnRuLFxuLm5hdmJhciAuaW5wdXQtYXBwZW5kIC5idG4ge1xuICBtYXJnaW4tdG9wOiAwO1xufVxuXG4ubmF2YmFyLWZvcm0ge1xuICBtYXJnaW4tYm90dG9tOiAwO1xuICAqem9vbTogMTtcbn1cblxuLm5hdmJhci1mb3JtOmJlZm9yZSxcbi5uYXZiYXItZm9ybTphZnRlciB7XG4gIGRpc3BsYXk6IHRhYmxlO1xuICBsaW5lLWhlaWdodDogMDtcbiAgY29udGVudDogXCJcIjtcbn1cblxuLm5hdmJhci1mb3JtOmFmdGVyIHtcbiAgY2xlYXI6IGJvdGg7XG59XG5cbi5uYXZiYXItZm9ybSBpbnB1dCxcbi5uYXZiYXItZm9ybSBzZWxlY3QsXG4ubmF2YmFyLWZvcm0gLnJhZGlvLFxuLm5hdmJhci1mb3JtIC5jaGVja2JveCB7XG4gIG1hcmdpbi10b3A6IDVweDtcbn1cblxuLm5hdmJhci1mb3JtIGlucHV0LFxuLm5hdmJhci1mb3JtIHNlbGVjdCxcbi5uYXZiYXItZm9ybSAuYnRuIHtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICBtYXJnaW4tYm90dG9tOiAwO1xufVxuXG4ubmF2YmFyLWZvcm0gaW5wdXRbdHlwZT1cImltYWdlXCJdLFxuLm5hdmJhci1mb3JtIGlucHV0W3R5cGU9XCJjaGVja2JveFwiXSxcbi5uYXZiYXItZm9ybSBpbnB1dFt0eXBlPVwicmFkaW9cIl0ge1xuICBtYXJnaW4tdG9wOiAzcHg7XG59XG5cbi5uYXZiYXItZm9ybSAuaW5wdXQtYXBwZW5kLFxuLm5hdmJhci1mb3JtIC5pbnB1dC1wcmVwZW5kIHtcbiAgbWFyZ2luLXRvcDogNXB4O1xuICB3aGl0ZS1zcGFjZTogbm93cmFwO1xufVxuXG4ubmF2YmFyLWZvcm0gLmlucHV0LWFwcGVuZCBpbnB1dCxcbi5uYXZiYXItZm9ybSAuaW5wdXQtcHJlcGVuZCBpbnB1dCB7XG4gIG1hcmdpbi10b3A6IDA7XG59XG5cbi5uYXZiYXItc2VhcmNoIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBmbG9hdDogbGVmdDtcbiAgbWFyZ2luLXRvcDogNXB4O1xuICBtYXJnaW4tYm90dG9tOiAwO1xufVxuXG4ubmF2YmFyLXNlYXJjaCAuc2VhcmNoLXF1ZXJ5IHtcbiAgcGFkZGluZzogNHB4IDE0cHg7XG4gIG1hcmdpbi1ib3R0b206IDA7XG4gIGZvbnQtZmFtaWx5OiBcImFhdXgtbmV4dFwiLCBcIkhlbHZldGljYSBOZXVlIExUIFcwNV81NyBDb25kXCIsIFwiSGVsdmV0aWNhIE5ldWVcIiwgSGVsdmV0aWNhLCBBcmlhbCwgc2Fucy1zZXJpZjtcbiAgZm9udC1zaXplOiAxM3B4O1xuICBmb250LXdlaWdodDogbm9ybWFsO1xuICBsaW5lLWhlaWdodDogMTtcbiAgLXdlYmtpdC1ib3JkZXItcmFkaXVzOiAxNXB4O1xuICAgICAtbW96LWJvcmRlci1yYWRpdXM6IDE1cHg7XG4gICAgICAgICAgYm9yZGVyLXJhZGl1czogMTVweDtcbn1cblxuLm5hdmJhci1zdGF0aWMtdG9wIHtcbiAgcG9zaXRpb246IHN0YXRpYztcbiAgbWFyZ2luLWJvdHRvbTogMDtcbn1cblxuLm5hdmJhci1zdGF0aWMtdG9wIC5uYXZiYXItaW5uZXIge1xuICAtd2Via2l0LWJvcmRlci1yYWRpdXM6IDA7XG4gICAgIC1tb3otYm9yZGVyLXJhZGl1czogMDtcbiAgICAgICAgICBib3JkZXItcmFkaXVzOiAwO1xufVxuXG4ubmF2YmFyLWZpeGVkLXRvcCxcbi5uYXZiYXItZml4ZWQtYm90dG9tIHtcbiAgcG9zaXRpb246IGZpeGVkO1xuICByaWdodDogMDtcbiAgbGVmdDogMDtcbiAgei1pbmRleDogMTAzMDtcbiAgbWFyZ2luLWJvdHRvbTogMDtcbn1cblxuLm5hdmJhci1maXhlZC10b3AgLm5hdmJhci1pbm5lcixcbi5uYXZiYXItc3RhdGljLXRvcCAubmF2YmFyLWlubmVyIHtcbiAgYm9yZGVyLXdpZHRoOiAwIDAgMXB4O1xufVxuXG4ubmF2YmFyLWZpeGVkLWJvdHRvbSAubmF2YmFyLWlubmVyIHtcbiAgYm9yZGVyLXdpZHRoOiAxcHggMCAwO1xufVxuXG4ubmF2YmFyLWZpeGVkLXRvcCAubmF2YmFyLWlubmVyLFxuLm5hdmJhci1maXhlZC1ib3R0b20gLm5hdmJhci1pbm5lciB7XG4gIHBhZGRpbmctcmlnaHQ6IDA7XG4gIHBhZGRpbmctbGVmdDogMDtcbiAgLXdlYmtpdC1ib3JkZXItcmFkaXVzOiAwO1xuICAgICAtbW96LWJvcmRlci1yYWRpdXM6IDA7XG4gICAgICAgICAgYm9yZGVyLXJhZGl1czogMDtcbn1cblxuLm5hdmJhci1zdGF0aWMtdG9wIC5jb250YWluZXIsXG4ubmF2YmFyLWZpeGVkLXRvcCAuY29udGFpbmVyLFxuLm5hdmJhci1maXhlZC1ib3R0b20gLmNvbnRhaW5lciB7XG4gIHdpZHRoOiA5NDBweDtcbn1cblxuLm5hdmJhci1maXhlZC10b3Age1xuICB0b3A6IDA7XG59XG5cbi5uYXZiYXItZml4ZWQtdG9wIC5uYXZiYXItaW5uZXIsXG4ubmF2YmFyLXN0YXRpYy10b3AgLm5hdmJhci1pbm5lciB7XG4gIC13ZWJraXQtYm94LXNoYWRvdzogMCAxcHggMTBweCByZ2JhKDAsIDAsIDAsIDAuMSk7XG4gICAgIC1tb3otYm94LXNoYWRvdzogMCAxcHggMTBweCByZ2JhKDAsIDAsIDAsIDAuMSk7XG4gICAgICAgICAgYm94LXNoYWRvdzogMCAxcHggMTBweCByZ2JhKDAsIDAsIDAsIDAuMSk7XG59XG5cbi5uYXZiYXItZml4ZWQtYm90dG9tIHtcbiAgYm90dG9tOiAwO1xufVxuXG4ubmF2YmFyLWZpeGVkLWJvdHRvbSAubmF2YmFyLWlubmVyIHtcbiAgLXdlYmtpdC1ib3gtc2hhZG93OiAwIC0xcHggMTBweCByZ2JhKDAsIDAsIDAsIDAuMSk7XG4gICAgIC1tb3otYm94LXNoYWRvdzogMCAtMXB4IDEwcHggcmdiYSgwLCAwLCAwLCAwLjEpO1xuICAgICAgICAgIGJveC1zaGFkb3c6IDAgLTFweCAxMHB4IHJnYmEoMCwgMCwgMCwgMC4xKTtcbn1cblxuLm5hdmJhciAubmF2IHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBsZWZ0OiAwO1xuICBkaXNwbGF5OiBibG9jaztcbiAgZmxvYXQ6IGxlZnQ7XG4gIG1hcmdpbjogMCAxMHB4IDAgMDtcbn1cblxuLm5hdmJhciAubmF2LnB1bGwtcmlnaHQge1xuICBmbG9hdDogcmlnaHQ7XG4gIG1hcmdpbi1yaWdodDogMDtcbn1cblxuLm5hdmJhciAubmF2ID4gbGkge1xuICBmbG9hdDogbGVmdDtcbn1cblxuLm5hdmJhciAubmF2ID4gbGkgPiBhIHtcbiAgZmxvYXQ6IG5vbmU7XG4gIHBhZGRpbmc6IDEwcHggMTVweCAxMHB4O1xuICBjb2xvcjogIzc3Nzc3NztcbiAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xuICB0ZXh0LXNoYWRvdzogMCAxcHggMCAjZmZmZmZmO1xufVxuXG4ubmF2YmFyIC5uYXYgLmRyb3Bkb3duLXRvZ2dsZSAuY2FyZXQge1xuICBtYXJnaW4tdG9wOiA4cHg7XG59XG5cbi5uYXZiYXIgLm5hdiA+IGxpID4gYTpmb2N1cyxcbi5uYXZiYXIgLm5hdiA+IGxpID4gYTpob3ZlciB7XG4gIGNvbG9yOiAjMzMzMzMzO1xuICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG4gIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xufVxuXG4ubmF2YmFyIC5uYXYgPiAuYWN0aXZlID4gYSxcbi5uYXZiYXIgLm5hdiA+IC5hY3RpdmUgPiBhOmhvdmVyLFxuLm5hdmJhciAubmF2ID4gLmFjdGl2ZSA+IGE6Zm9jdXMge1xuICBjb2xvcjogIzU1NTU1NTtcbiAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZTVlNWU1O1xuICAtd2Via2l0LWJveC1zaGFkb3c6IGluc2V0IDAgM3B4IDhweCByZ2JhKDAsIDAsIDAsIDAuMTI1KTtcbiAgICAgLW1vei1ib3gtc2hhZG93OiBpbnNldCAwIDNweCA4cHggcmdiYSgwLCAwLCAwLCAwLjEyNSk7XG4gICAgICAgICAgYm94LXNoYWRvdzogaW5zZXQgMCAzcHggOHB4IHJnYmEoMCwgMCwgMCwgMC4xMjUpO1xufVxuXG4ubmF2YmFyIC5idG4tbmF2YmFyIHtcbiAgZGlzcGxheTogbm9uZTtcbiAgZmxvYXQ6IHJpZ2h0O1xuICBwYWRkaW5nOiA3cHggMTBweDtcbiAgbWFyZ2luLXJpZ2h0OiA1cHg7XG4gIG1hcmdpbi1sZWZ0OiA1cHg7XG4gIGNvbG9yOiAjZmZmZmZmO1xuICB0ZXh0LXNoYWRvdzogMCAtMXB4IDAgcmdiYSgwLCAwLCAwLCAwLjI1KTtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2VkZWRlZDtcbiAgKmJhY2tncm91bmQtY29sb3I6ICNlNWU1ZTU7XG4gIGJhY2tncm91bmQtaW1hZ2U6IC1tb3otbGluZWFyLWdyYWRpZW50KHRvcCwgI2YyZjJmMiwgI2U1ZTVlNSk7XG4gIGJhY2tncm91bmQtaW1hZ2U6IC13ZWJraXQtZ3JhZGllbnQobGluZWFyLCAwIDAsIDAgMTAwJSwgZnJvbSgjZjJmMmYyKSwgdG8oI2U1ZTVlNSkpO1xuICBiYWNrZ3JvdW5kLWltYWdlOiAtd2Via2l0LWxpbmVhci1ncmFkaWVudCh0b3AsICNmMmYyZjIsICNlNWU1ZTUpO1xuICBiYWNrZ3JvdW5kLWltYWdlOiAtby1saW5lYXItZ3JhZGllbnQodG9wLCAjZjJmMmYyLCAjZTVlNWU1KTtcbiAgYmFja2dyb3VuZC1pbWFnZTogbGluZWFyLWdyYWRpZW50KHRvIGJvdHRvbSwgI2YyZjJmMiwgI2U1ZTVlNSk7XG4gIGJhY2tncm91bmQtcmVwZWF0OiByZXBlYXQteDtcbiAgYm9yZGVyLWNvbG9yOiAjZTVlNWU1ICNlNWU1ZTUgI2JmYmZiZjtcbiAgYm9yZGVyLWNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuMSkgcmdiYSgwLCAwLCAwLCAwLjEpIHJnYmEoMCwgMCwgMCwgMC4yNSk7XG4gIGZpbHRlcjogcHJvZ2lkOkRYSW1hZ2VUcmFuc2Zvcm0uTWljcm9zb2Z0LmdyYWRpZW50KHN0YXJ0Q29sb3JzdHI9JyNmZmYyZjJmMicsIGVuZENvbG9yc3RyPScjZmZlNWU1ZTUnLCBHcmFkaWVudFR5cGU9MCk7XG4gIGZpbHRlcjogcHJvZ2lkOkRYSW1hZ2VUcmFuc2Zvcm0uTWljcm9zb2Z0LmdyYWRpZW50KGVuYWJsZWQ9ZmFsc2UpO1xuICAtd2Via2l0LWJveC1zaGFkb3c6IGluc2V0IDAgMXB4IDAgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEpLCAwIDFweCAwIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wNzUpO1xuICAgICAtbW96LWJveC1zaGFkb3c6IGluc2V0IDAgMXB4IDAgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEpLCAwIDFweCAwIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wNzUpO1xuICAgICAgICAgIGJveC1zaGFkb3c6IGluc2V0IDAgMXB4IDAgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEpLCAwIDFweCAwIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wNzUpO1xufVxuXG4ubmF2YmFyIC5idG4tbmF2YmFyOmhvdmVyLFxuLm5hdmJhciAuYnRuLW5hdmJhcjphY3RpdmUsXG4ubmF2YmFyIC5idG4tbmF2YmFyLmFjdGl2ZSxcbi5uYXZiYXIgLmJ0bi1uYXZiYXIuZGlzYWJsZWQsXG4ubmF2YmFyIC5idG4tbmF2YmFyW2Rpc2FibGVkXSB7XG4gIGNvbG9yOiAjZmZmZmZmO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZTVlNWU1O1xuICAqYmFja2dyb3VuZC1jb2xvcjogI2Q5ZDlkOTtcbn1cblxuLm5hdmJhciAuYnRuLW5hdmJhcjphY3RpdmUsXG4ubmF2YmFyIC5idG4tbmF2YmFyLmFjdGl2ZSB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNjY2NjY2MgXFw5O1xufVxuXG4ubmF2YmFyIC5idG4tbmF2YmFyIC5pY29uLWJhciB7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICB3aWR0aDogMThweDtcbiAgaGVpZ2h0OiAycHg7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmNWY1ZjU7XG4gIC13ZWJraXQtYm9yZGVyLXJhZGl1czogMXB4O1xuICAgICAtbW96LWJvcmRlci1yYWRpdXM6IDFweDtcbiAgICAgICAgICBib3JkZXItcmFkaXVzOiAxcHg7XG4gIC13ZWJraXQtYm94LXNoYWRvdzogMCAxcHggMCByZ2JhKDAsIDAsIDAsIDAuMjUpO1xuICAgICAtbW96LWJveC1zaGFkb3c6IDAgMXB4IDAgcmdiYSgwLCAwLCAwLCAwLjI1KTtcbiAgICAgICAgICBib3gtc2hhZG93OiAwIDFweCAwIHJnYmEoMCwgMCwgMCwgMC4yNSk7XG59XG5cbi5idG4tbmF2YmFyIC5pY29uLWJhciArIC5pY29uLWJhciB7XG4gIG1hcmdpbi10b3A6IDNweDtcbn1cblxuLm5hdmJhciAubmF2ID4gbGkgPiAuZHJvcGRvd24tbWVudTpiZWZvcmUge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHRvcDogLTdweDtcbiAgbGVmdDogOXB4O1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIGJvcmRlci1yaWdodDogN3B4IHNvbGlkIHRyYW5zcGFyZW50O1xuICBib3JkZXItYm90dG9tOiA3cHggc29saWQgI2NjYztcbiAgYm9yZGVyLWxlZnQ6IDdweCBzb2xpZCB0cmFuc3BhcmVudDtcbiAgYm9yZGVyLWJvdHRvbS1jb2xvcjogcmdiYSgwLCAwLCAwLCAwLjIpO1xuICBjb250ZW50OiAnJztcbn1cblxuLm5hdmJhciAubmF2ID4gbGkgPiAuZHJvcGRvd24tbWVudTphZnRlciB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgdG9wOiAtNnB4O1xuICBsZWZ0OiAxMHB4O1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIGJvcmRlci1yaWdodDogNnB4IHNvbGlkIHRyYW5zcGFyZW50O1xuICBib3JkZXItYm90dG9tOiA2cHggc29saWQgI2ZmZmZmZjtcbiAgYm9yZGVyLWxlZnQ6IDZweCBzb2xpZCB0cmFuc3BhcmVudDtcbiAgY29udGVudDogJyc7XG59XG5cbi5uYXZiYXItZml4ZWQtYm90dG9tIC5uYXYgPiBsaSA+IC5kcm9wZG93bi1tZW51OmJlZm9yZSB7XG4gIHRvcDogYXV0bztcbiAgYm90dG9tOiAtN3B4O1xuICBib3JkZXItdG9wOiA3cHggc29saWQgI2NjYztcbiAgYm9yZGVyLWJvdHRvbTogMDtcbiAgYm9yZGVyLXRvcC1jb2xvcjogcmdiYSgwLCAwLCAwLCAwLjIpO1xufVxuXG4ubmF2YmFyLWZpeGVkLWJvdHRvbSAubmF2ID4gbGkgPiAuZHJvcGRvd24tbWVudTphZnRlciB7XG4gIHRvcDogYXV0bztcbiAgYm90dG9tOiAtNnB4O1xuICBib3JkZXItdG9wOiA2cHggc29saWQgI2ZmZmZmZjtcbiAgYm9yZGVyLWJvdHRvbTogMDtcbn1cblxuLm5hdmJhciAubmF2IGxpLmRyb3Bkb3duID4gYTpob3ZlciAuY2FyZXQge1xuICBib3JkZXItdG9wLWNvbG9yOiAjNTU1NTU1O1xuICBib3JkZXItYm90dG9tLWNvbG9yOiAjNTU1NTU1O1xufVxuXG4ubmF2YmFyIC5uYXYgbGkuZHJvcGRvd24ub3BlbiA+IC5kcm9wZG93bi10b2dnbGUsXG4ubmF2YmFyIC5uYXYgbGkuZHJvcGRvd24uYWN0aXZlID4gLmRyb3Bkb3duLXRvZ2dsZSxcbi5uYXZiYXIgLm5hdiBsaS5kcm9wZG93bi5vcGVuLmFjdGl2ZSA+IC5kcm9wZG93bi10b2dnbGUge1xuICBjb2xvcjogIzU1NTU1NTtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2U1ZTVlNTtcbn1cblxuLm5hdmJhciAubmF2IGxpLmRyb3Bkb3duID4gLmRyb3Bkb3duLXRvZ2dsZSAuY2FyZXQge1xuICBib3JkZXItdG9wLWNvbG9yOiAjNzc3Nzc3O1xuICBib3JkZXItYm90dG9tLWNvbG9yOiAjNzc3Nzc3O1xufVxuXG4ubmF2YmFyIC5uYXYgbGkuZHJvcGRvd24ub3BlbiA+IC5kcm9wZG93bi10b2dnbGUgLmNhcmV0LFxuLm5hdmJhciAubmF2IGxpLmRyb3Bkb3duLmFjdGl2ZSA+IC5kcm9wZG93bi10b2dnbGUgLmNhcmV0LFxuLm5hdmJhciAubmF2IGxpLmRyb3Bkb3duLm9wZW4uYWN0aXZlID4gLmRyb3Bkb3duLXRvZ2dsZSAuY2FyZXQge1xuICBib3JkZXItdG9wLWNvbG9yOiAjNTU1NTU1O1xuICBib3JkZXItYm90dG9tLWNvbG9yOiAjNTU1NTU1O1xufVxuXG4ubmF2YmFyIC5wdWxsLXJpZ2h0ID4gbGkgPiAuZHJvcGRvd24tbWVudSxcbi5uYXZiYXIgLm5hdiA+IGxpID4gLmRyb3Bkb3duLW1lbnUucHVsbC1yaWdodCB7XG4gIHJpZ2h0OiAwO1xuICBsZWZ0OiBhdXRvO1xufVxuXG4ubmF2YmFyIC5wdWxsLXJpZ2h0ID4gbGkgPiAuZHJvcGRvd24tbWVudTpiZWZvcmUsXG4ubmF2YmFyIC5uYXYgPiBsaSA+IC5kcm9wZG93bi1tZW51LnB1bGwtcmlnaHQ6YmVmb3JlIHtcbiAgcmlnaHQ6IDEycHg7XG4gIGxlZnQ6IGF1dG87XG59XG5cbi5uYXZiYXIgLnB1bGwtcmlnaHQgPiBsaSA+IC5kcm9wZG93bi1tZW51OmFmdGVyLFxuLm5hdmJhciAubmF2ID4gbGkgPiAuZHJvcGRvd24tbWVudS5wdWxsLXJpZ2h0OmFmdGVyIHtcbiAgcmlnaHQ6IDEzcHg7XG4gIGxlZnQ6IGF1dG87XG59XG5cbi5uYXZiYXIgLnB1bGwtcmlnaHQgPiBsaSA+IC5kcm9wZG93bi1tZW51IC5kcm9wZG93bi1tZW51LFxuLm5hdmJhciAubmF2ID4gbGkgPiAuZHJvcGRvd24tbWVudS5wdWxsLXJpZ2h0IC5kcm9wZG93bi1tZW51IHtcbiAgcmlnaHQ6IDEwMCU7XG4gIGxlZnQ6IGF1dG87XG4gIG1hcmdpbi1yaWdodDogLTFweDtcbiAgbWFyZ2luLWxlZnQ6IDA7XG4gIC13ZWJraXQtYm9yZGVyLXJhZGl1czogNnB4IDAgNnB4IDZweDtcbiAgICAgLW1vei1ib3JkZXItcmFkaXVzOiA2cHggMCA2cHggNnB4O1xuICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDZweCAwIDZweCA2cHg7XG59XG5cbi5uYXZiYXItaW52ZXJzZSAubmF2YmFyLWlubmVyIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogIzFiMWIxYjtcbiAgYmFja2dyb3VuZC1pbWFnZTogLW1vei1saW5lYXItZ3JhZGllbnQodG9wLCAjMjIyMjIyLCAjMTExMTExKTtcbiAgYmFja2dyb3VuZC1pbWFnZTogLXdlYmtpdC1ncmFkaWVudChsaW5lYXIsIDAgMCwgMCAxMDAlLCBmcm9tKCMyMjIyMjIpLCB0bygjMTExMTExKSk7XG4gIGJhY2tncm91bmQtaW1hZ2U6IC13ZWJraXQtbGluZWFyLWdyYWRpZW50KHRvcCwgIzIyMjIyMiwgIzExMTExMSk7XG4gIGJhY2tncm91bmQtaW1hZ2U6IC1vLWxpbmVhci1ncmFkaWVudCh0b3AsICMyMjIyMjIsICMxMTExMTEpO1xuICBiYWNrZ3JvdW5kLWltYWdlOiBsaW5lYXItZ3JhZGllbnQodG8gYm90dG9tLCAjMjIyMjIyLCAjMTExMTExKTtcbiAgYmFja2dyb3VuZC1yZXBlYXQ6IHJlcGVhdC14O1xuICBib3JkZXItY29sb3I6ICMyNTI1MjU7XG4gIGZpbHRlcjogcHJvZ2lkOkRYSW1hZ2VUcmFuc2Zvcm0uTWljcm9zb2Z0LmdyYWRpZW50KHN0YXJ0Q29sb3JzdHI9JyNmZjIyMjIyMicsIGVuZENvbG9yc3RyPScjZmYxMTExMTEnLCBHcmFkaWVudFR5cGU9MCk7XG59XG5cbi5uYXZiYXItaW52ZXJzZSAuYnJhbmQsXG4ubmF2YmFyLWludmVyc2UgLm5hdiA+IGxpID4gYSB7XG4gIGNvbG9yOiAjOTk5OTk5O1xuICB0ZXh0LXNoYWRvdzogMCAtMXB4IDAgcmdiYSgwLCAwLCAwLCAwLjI1KTtcbn1cblxuLm5hdmJhci1pbnZlcnNlIC5icmFuZDpob3Zlcixcbi5uYXZiYXItaW52ZXJzZSAubmF2ID4gbGkgPiBhOmhvdmVyIHtcbiAgY29sb3I6ICNmZmZmZmY7XG59XG5cbi5uYXZiYXItaW52ZXJzZSAuYnJhbmQge1xuICBjb2xvcjogIzk5OTk5OTtcbn1cblxuLm5hdmJhci1pbnZlcnNlIC5uYXZiYXItdGV4dCB7XG4gIGNvbG9yOiAjOTk5OTk5O1xufVxuXG4ubmF2YmFyLWludmVyc2UgLm5hdiA+IGxpID4gYTpmb2N1cyxcbi5uYXZiYXItaW52ZXJzZSAubmF2ID4gbGkgPiBhOmhvdmVyIHtcbiAgY29sb3I6ICNmZmZmZmY7XG4gIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xufVxuXG4ubmF2YmFyLWludmVyc2UgLm5hdiAuYWN0aXZlID4gYSxcbi5uYXZiYXItaW52ZXJzZSAubmF2IC5hY3RpdmUgPiBhOmhvdmVyLFxuLm5hdmJhci1pbnZlcnNlIC5uYXYgLmFjdGl2ZSA+IGE6Zm9jdXMge1xuICBjb2xvcjogI2ZmZmZmZjtcbiAgYmFja2dyb3VuZC1jb2xvcjogIzExMTExMTtcbn1cblxuLm5hdmJhci1pbnZlcnNlIC5uYXZiYXItbGluayB7XG4gIGNvbG9yOiAjOTk5OTk5O1xufVxuXG4ubmF2YmFyLWludmVyc2UgLm5hdmJhci1saW5rOmhvdmVyIHtcbiAgY29sb3I6ICNmZmZmZmY7XG59XG5cbi5uYXZiYXItaW52ZXJzZSAuZGl2aWRlci12ZXJ0aWNhbCB7XG4gIGJvcmRlci1yaWdodC1jb2xvcjogIzIyMjIyMjtcbiAgYm9yZGVyLWxlZnQtY29sb3I6ICMxMTExMTE7XG59XG5cbi5uYXZiYXItaW52ZXJzZSAubmF2IGxpLmRyb3Bkb3duLm9wZW4gPiAuZHJvcGRvd24tdG9nZ2xlLFxuLm5hdmJhci1pbnZlcnNlIC5uYXYgbGkuZHJvcGRvd24uYWN0aXZlID4gLmRyb3Bkb3duLXRvZ2dsZSxcbi5uYXZiYXItaW52ZXJzZSAubmF2IGxpLmRyb3Bkb3duLm9wZW4uYWN0aXZlID4gLmRyb3Bkb3duLXRvZ2dsZSB7XG4gIGNvbG9yOiAjZmZmZmZmO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMTExMTExO1xufVxuXG4ubmF2YmFyLWludmVyc2UgLm5hdiBsaS5kcm9wZG93biA+IGE6aG92ZXIgLmNhcmV0IHtcbiAgYm9yZGVyLXRvcC1jb2xvcjogI2ZmZmZmZjtcbiAgYm9yZGVyLWJvdHRvbS1jb2xvcjogI2ZmZmZmZjtcbn1cblxuLm5hdmJhci1pbnZlcnNlIC5uYXYgbGkuZHJvcGRvd24gPiAuZHJvcGRvd24tdG9nZ2xlIC5jYXJldCB7XG4gIGJvcmRlci10b3AtY29sb3I6ICM5OTk5OTk7XG4gIGJvcmRlci1ib3R0b20tY29sb3I6ICM5OTk5OTk7XG59XG5cbi5uYXZiYXItaW52ZXJzZSAubmF2IGxpLmRyb3Bkb3duLm9wZW4gPiAuZHJvcGRvd24tdG9nZ2xlIC5jYXJldCxcbi5uYXZiYXItaW52ZXJzZSAubmF2IGxpLmRyb3Bkb3duLmFjdGl2ZSA+IC5kcm9wZG93bi10b2dnbGUgLmNhcmV0LFxuLm5hdmJhci1pbnZlcnNlIC5uYXYgbGkuZHJvcGRvd24ub3Blbi5hY3RpdmUgPiAuZHJvcGRvd24tdG9nZ2xlIC5jYXJldCB7XG4gIGJvcmRlci10b3AtY29sb3I6ICNmZmZmZmY7XG4gIGJvcmRlci1ib3R0b20tY29sb3I6ICNmZmZmZmY7XG59XG5cbi5uYXZiYXItaW52ZXJzZSAubmF2YmFyLXNlYXJjaCAuc2VhcmNoLXF1ZXJ5IHtcbiAgY29sb3I6ICNmZmZmZmY7XG4gIGJhY2tncm91bmQtY29sb3I6ICM1MTUxNTE7XG4gIGJvcmRlci1jb2xvcjogIzExMTExMTtcbiAgLXdlYmtpdC1ib3gtc2hhZG93OiBpbnNldCAwIDFweCAycHggcmdiYSgwLCAwLCAwLCAwLjEpLCAwIDFweCAwIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xNSk7XG4gICAgIC1tb3otYm94LXNoYWRvdzogaW5zZXQgMCAxcHggMnB4IHJnYmEoMCwgMCwgMCwgMC4xKSwgMCAxcHggMCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTUpO1xuICAgICAgICAgIGJveC1zaGFkb3c6IGluc2V0IDAgMXB4IDJweCByZ2JhKDAsIDAsIDAsIDAuMSksIDAgMXB4IDAgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjE1KTtcbiAgLXdlYmtpdC10cmFuc2l0aW9uOiBub25lO1xuICAgICAtbW96LXRyYW5zaXRpb246IG5vbmU7XG4gICAgICAgLW8tdHJhbnNpdGlvbjogbm9uZTtcbiAgICAgICAgICB0cmFuc2l0aW9uOiBub25lO1xufVxuXG4ubmF2YmFyLWludmVyc2UgLm5hdmJhci1zZWFyY2ggLnNlYXJjaC1xdWVyeTotbW96LXBsYWNlaG9sZGVyIHtcbiAgY29sb3I6ICNjY2NjY2M7XG59XG5cbi5uYXZiYXItaW52ZXJzZSAubmF2YmFyLXNlYXJjaCAuc2VhcmNoLXF1ZXJ5Oi1tcy1pbnB1dC1wbGFjZWhvbGRlciB7XG4gIGNvbG9yOiAjY2NjY2NjO1xufVxuXG4ubmF2YmFyLWludmVyc2UgLm5hdmJhci1zZWFyY2ggLnNlYXJjaC1xdWVyeTo6LXdlYmtpdC1pbnB1dC1wbGFjZWhvbGRlciB7XG4gIGNvbG9yOiAjY2NjY2NjO1xufVxuXG4ubmF2YmFyLWludmVyc2UgLm5hdmJhci1zZWFyY2ggLnNlYXJjaC1xdWVyeTpmb2N1cyxcbi5uYXZiYXItaW52ZXJzZSAubmF2YmFyLXNlYXJjaCAuc2VhcmNoLXF1ZXJ5LmZvY3VzZWQge1xuICBwYWRkaW5nOiA1cHggMTVweDtcbiAgY29sb3I6ICMzMzMzMzM7XG4gIHRleHQtc2hhZG93OiAwIDFweCAwICNmZmZmZmY7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmZmZmY7XG4gIGJvcmRlcjogMDtcbiAgb3V0bGluZTogMDtcbiAgLXdlYmtpdC1ib3gtc2hhZG93OiAwIDAgM3B4IHJnYmEoMCwgMCwgMCwgMC4xNSk7XG4gICAgIC1tb3otYm94LXNoYWRvdzogMCAwIDNweCByZ2JhKDAsIDAsIDAsIDAuMTUpO1xuICAgICAgICAgIGJveC1zaGFkb3c6IDAgMCAzcHggcmdiYSgwLCAwLCAwLCAwLjE1KTtcbn1cblxuLm5hdmJhci1pbnZlcnNlIC5idG4tbmF2YmFyIHtcbiAgY29sb3I6ICNmZmZmZmY7XG4gIHRleHQtc2hhZG93OiAwIC0xcHggMCByZ2JhKDAsIDAsIDAsIDAuMjUpO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMGUwZTBlO1xuICAqYmFja2dyb3VuZC1jb2xvcjogIzA0MDQwNDtcbiAgYmFja2dyb3VuZC1pbWFnZTogLW1vei1saW5lYXItZ3JhZGllbnQodG9wLCAjMTUxNTE1LCAjMDQwNDA0KTtcbiAgYmFja2dyb3VuZC1pbWFnZTogLXdlYmtpdC1ncmFkaWVudChsaW5lYXIsIDAgMCwgMCAxMDAlLCBmcm9tKCMxNTE1MTUpLCB0bygjMDQwNDA0KSk7XG4gIGJhY2tncm91bmQtaW1hZ2U6IC13ZWJraXQtbGluZWFyLWdyYWRpZW50KHRvcCwgIzE1MTUxNSwgIzA0MDQwNCk7XG4gIGJhY2tncm91bmQtaW1hZ2U6IC1vLWxpbmVhci1ncmFkaWVudCh0b3AsICMxNTE1MTUsICMwNDA0MDQpO1xuICBiYWNrZ3JvdW5kLWltYWdlOiBsaW5lYXItZ3JhZGllbnQodG8gYm90dG9tLCAjMTUxNTE1LCAjMDQwNDA0KTtcbiAgYmFja2dyb3VuZC1yZXBlYXQ6IHJlcGVhdC14O1xuICBib3JkZXItY29sb3I6ICMwNDA0MDQgIzA0MDQwNCAjMDAwMDAwO1xuICBib3JkZXItY29sb3I6IHJnYmEoMCwgMCwgMCwgMC4xKSByZ2JhKDAsIDAsIDAsIDAuMSkgcmdiYSgwLCAwLCAwLCAwLjI1KTtcbiAgZmlsdGVyOiBwcm9naWQ6RFhJbWFnZVRyYW5zZm9ybS5NaWNyb3NvZnQuZ3JhZGllbnQoc3RhcnRDb2xvcnN0cj0nI2ZmMTUxNTE1JywgZW5kQ29sb3JzdHI9JyNmZjA0MDQwNCcsIEdyYWRpZW50VHlwZT0wKTtcbiAgZmlsdGVyOiBwcm9naWQ6RFhJbWFnZVRyYW5zZm9ybS5NaWNyb3NvZnQuZ3JhZGllbnQoZW5hYmxlZD1mYWxzZSk7XG59XG5cbi5uYXZiYXItaW52ZXJzZSAuYnRuLW5hdmJhcjpob3Zlcixcbi5uYXZiYXItaW52ZXJzZSAuYnRuLW5hdmJhcjphY3RpdmUsXG4ubmF2YmFyLWludmVyc2UgLmJ0bi1uYXZiYXIuYWN0aXZlLFxuLm5hdmJhci1pbnZlcnNlIC5idG4tbmF2YmFyLmRpc2FibGVkLFxuLm5hdmJhci1pbnZlcnNlIC5idG4tbmF2YmFyW2Rpc2FibGVkXSB7XG4gIGNvbG9yOiAjZmZmZmZmO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMDQwNDA0O1xuICAqYmFja2dyb3VuZC1jb2xvcjogIzAwMDAwMDtcbn1cblxuLm5hdmJhci1pbnZlcnNlIC5idG4tbmF2YmFyOmFjdGl2ZSxcbi5uYXZiYXItaW52ZXJzZSAuYnRuLW5hdmJhci5hY3RpdmUge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMDAwMDAwIFxcOTtcbn1cblxuLmJyZWFkY3J1bWIge1xuICBwYWRkaW5nOiA4cHggMTVweDtcbiAgbWFyZ2luOiAwIDAgMjBweDtcbiAgbGlzdC1zdHlsZTogbm9uZTtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2Y1ZjVmNTtcbiAgLXdlYmtpdC1ib3JkZXItcmFkaXVzOiA0cHg7XG4gICAgIC1tb3otYm9yZGVyLXJhZGl1czogNHB4O1xuICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDRweDtcbn1cblxuLmJyZWFkY3J1bWIgPiBsaSB7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgKmRpc3BsYXk6IGlubGluZTtcbiAgdGV4dC1zaGFkb3c6IDAgMXB4IDAgI2ZmZmZmZjtcbiAgKnpvb206IDE7XG59XG5cbi5icmVhZGNydW1iID4gbGkgPiAuZGl2aWRlciB7XG4gIHBhZGRpbmc6IDAgNXB4O1xuICBjb2xvcjogI2NjYztcbn1cblxuLmJyZWFkY3J1bWIgPiAuYWN0aXZlIHtcbiAgY29sb3I6ICM5OTk5OTk7XG59XG5cbi5wYWdpbmF0aW9uIHtcbiAgbWFyZ2luOiAyMHB4IDA7XG59XG5cbi5wYWdpbmF0aW9uIHVsIHtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAqZGlzcGxheTogaW5saW5lO1xuICBtYXJnaW4tYm90dG9tOiAwO1xuICBtYXJnaW4tbGVmdDogMDtcbiAgLXdlYmtpdC1ib3JkZXItcmFkaXVzOiA0cHg7XG4gICAgIC1tb3otYm9yZGVyLXJhZGl1czogNHB4O1xuICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDRweDtcbiAgKnpvb206IDE7XG4gIC13ZWJraXQtYm94LXNoYWRvdzogMCAxcHggMnB4IHJnYmEoMCwgMCwgMCwgMC4wNSk7XG4gICAgIC1tb3otYm94LXNoYWRvdzogMCAxcHggMnB4IHJnYmEoMCwgMCwgMCwgMC4wNSk7XG4gICAgICAgICAgYm94LXNoYWRvdzogMCAxcHggMnB4IHJnYmEoMCwgMCwgMCwgMC4wNSk7XG59XG5cbi5wYWdpbmF0aW9uIHVsID4gbGkge1xuICBkaXNwbGF5OiBpbmxpbmU7XG59XG5cbi5wYWdpbmF0aW9uIHVsID4gbGkgPiBhLFxuLnBhZ2luYXRpb24gdWwgPiBsaSA+IHNwYW4ge1xuICBmbG9hdDogbGVmdDtcbiAgcGFkZGluZzogNHB4IDEycHg7XG4gIGxpbmUtaGVpZ2h0OiAyMHB4O1xuICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmZmZmY7XG4gIGJvcmRlcjogMXB4IHNvbGlkICNkZGRkZGQ7XG4gIGJvcmRlci1sZWZ0LXdpZHRoOiAwO1xufVxuXG4ucGFnaW5hdGlvbiB1bCA+IGxpID4gYTpob3Zlcixcbi5wYWdpbmF0aW9uIHVsID4gLmFjdGl2ZSA+IGEsXG4ucGFnaW5hdGlvbiB1bCA+IC5hY3RpdmUgPiBzcGFuIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2Y1ZjVmNTtcbn1cblxuLnBhZ2luYXRpb24gdWwgPiAuYWN0aXZlID4gYSxcbi5wYWdpbmF0aW9uIHVsID4gLmFjdGl2ZSA+IHNwYW4ge1xuICBjb2xvcjogIzk5OTk5OTtcbiAgY3Vyc29yOiBkZWZhdWx0O1xufVxuXG4ucGFnaW5hdGlvbiB1bCA+IC5kaXNhYmxlZCA+IHNwYW4sXG4ucGFnaW5hdGlvbiB1bCA+IC5kaXNhYmxlZCA+IGEsXG4ucGFnaW5hdGlvbiB1bCA+IC5kaXNhYmxlZCA+IGE6aG92ZXIge1xuICBjb2xvcjogIzk5OTk5OTtcbiAgY3Vyc29yOiBkZWZhdWx0O1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcbn1cblxuLnBhZ2luYXRpb24gdWwgPiBsaTpmaXJzdC1jaGlsZCA+IGEsXG4ucGFnaW5hdGlvbiB1bCA+IGxpOmZpcnN0LWNoaWxkID4gc3BhbiB7XG4gIGJvcmRlci1sZWZ0LXdpZHRoOiAxcHg7XG4gIC13ZWJraXQtYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czogNHB4O1xuICAgICAgICAgIGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6IDRweDtcbiAgLXdlYmtpdC1ib3JkZXItdG9wLWxlZnQtcmFkaXVzOiA0cHg7XG4gICAgICAgICAgYm9yZGVyLXRvcC1sZWZ0LXJhZGl1czogNHB4O1xuICAtbW96LWJvcmRlci1yYWRpdXMtYm90dG9tbGVmdDogNHB4O1xuICAtbW96LWJvcmRlci1yYWRpdXMtdG9wbGVmdDogNHB4O1xufVxuXG4ucGFnaW5hdGlvbiB1bCA+IGxpOmxhc3QtY2hpbGQgPiBhLFxuLnBhZ2luYXRpb24gdWwgPiBsaTpsYXN0LWNoaWxkID4gc3BhbiB7XG4gIC13ZWJraXQtYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6IDRweDtcbiAgICAgICAgICBib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogNHB4O1xuICAtd2Via2l0LWJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOiA0cHg7XG4gICAgICAgICAgYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6IDRweDtcbiAgLW1vei1ib3JkZXItcmFkaXVzLXRvcHJpZ2h0OiA0cHg7XG4gIC1tb3otYm9yZGVyLXJhZGl1cy1ib3R0b21yaWdodDogNHB4O1xufVxuXG4ucGFnaW5hdGlvbi1jZW50ZXJlZCB7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbn1cblxuLnBhZ2luYXRpb24tcmlnaHQge1xuICB0ZXh0LWFsaWduOiByaWdodDtcbn1cblxuLnBhZ2luYXRpb24tbGFyZ2UgdWwgPiBsaSA+IGEsXG4ucGFnaW5hdGlvbi1sYXJnZSB1bCA+IGxpID4gc3BhbiB7XG4gIHBhZGRpbmc6IDExcHggMTlweDtcbiAgZm9udC1zaXplOiAxNy41cHg7XG59XG5cbi5wYWdpbmF0aW9uLWxhcmdlIHVsID4gbGk6Zmlyc3QtY2hpbGQgPiBhLFxuLnBhZ2luYXRpb24tbGFyZ2UgdWwgPiBsaTpmaXJzdC1jaGlsZCA+IHNwYW4ge1xuICAtd2Via2l0LWJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6IDZweDtcbiAgICAgICAgICBib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOiA2cHg7XG4gIC13ZWJraXQtYm9yZGVyLXRvcC1sZWZ0LXJhZGl1czogNnB4O1xuICAgICAgICAgIGJvcmRlci10b3AtbGVmdC1yYWRpdXM6IDZweDtcbiAgLW1vei1ib3JkZXItcmFkaXVzLWJvdHRvbWxlZnQ6IDZweDtcbiAgLW1vei1ib3JkZXItcmFkaXVzLXRvcGxlZnQ6IDZweDtcbn1cblxuLnBhZ2luYXRpb24tbGFyZ2UgdWwgPiBsaTpsYXN0LWNoaWxkID4gYSxcbi5wYWdpbmF0aW9uLWxhcmdlIHVsID4gbGk6bGFzdC1jaGlsZCA+IHNwYW4ge1xuICAtd2Via2l0LWJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiA2cHg7XG4gICAgICAgICAgYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6IDZweDtcbiAgLXdlYmtpdC1ib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czogNnB4O1xuICAgICAgICAgIGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOiA2cHg7XG4gIC1tb3otYm9yZGVyLXJhZGl1cy10b3ByaWdodDogNnB4O1xuICAtbW96LWJvcmRlci1yYWRpdXMtYm90dG9tcmlnaHQ6IDZweDtcbn1cblxuLnBhZ2luYXRpb24tbWluaSB1bCA+IGxpOmZpcnN0LWNoaWxkID4gYSxcbi5wYWdpbmF0aW9uLXNtYWxsIHVsID4gbGk6Zmlyc3QtY2hpbGQgPiBhLFxuLnBhZ2luYXRpb24tbWluaSB1bCA+IGxpOmZpcnN0LWNoaWxkID4gc3Bhbixcbi5wYWdpbmF0aW9uLXNtYWxsIHVsID4gbGk6Zmlyc3QtY2hpbGQgPiBzcGFuIHtcbiAgLXdlYmtpdC1ib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOiAzcHg7XG4gICAgICAgICAgYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czogM3B4O1xuICAtd2Via2l0LWJvcmRlci10b3AtbGVmdC1yYWRpdXM6IDNweDtcbiAgICAgICAgICBib3JkZXItdG9wLWxlZnQtcmFkaXVzOiAzcHg7XG4gIC1tb3otYm9yZGVyLXJhZGl1cy1ib3R0b21sZWZ0OiAzcHg7XG4gIC1tb3otYm9yZGVyLXJhZGl1cy10b3BsZWZ0OiAzcHg7XG59XG5cbi5wYWdpbmF0aW9uLW1pbmkgdWwgPiBsaTpsYXN0LWNoaWxkID4gYSxcbi5wYWdpbmF0aW9uLXNtYWxsIHVsID4gbGk6bGFzdC1jaGlsZCA+IGEsXG4ucGFnaW5hdGlvbi1taW5pIHVsID4gbGk6bGFzdC1jaGlsZCA+IHNwYW4sXG4ucGFnaW5hdGlvbi1zbWFsbCB1bCA+IGxpOmxhc3QtY2hpbGQgPiBzcGFuIHtcbiAgLXdlYmtpdC1ib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogM3B4O1xuICAgICAgICAgIGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiAzcHg7XG4gIC13ZWJraXQtYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6IDNweDtcbiAgICAgICAgICBib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czogM3B4O1xuICAtbW96LWJvcmRlci1yYWRpdXMtdG9wcmlnaHQ6IDNweDtcbiAgLW1vei1ib3JkZXItcmFkaXVzLWJvdHRvbXJpZ2h0OiAzcHg7XG59XG5cbi5wYWdpbmF0aW9uLXNtYWxsIHVsID4gbGkgPiBhLFxuLnBhZ2luYXRpb24tc21hbGwgdWwgPiBsaSA+IHNwYW4ge1xuICBwYWRkaW5nOiAycHggMTBweDtcbiAgZm9udC1zaXplOiAxMS45cHg7XG59XG5cbi5wYWdpbmF0aW9uLW1pbmkgdWwgPiBsaSA+IGEsXG4ucGFnaW5hdGlvbi1taW5pIHVsID4gbGkgPiBzcGFuIHtcbiAgcGFkZGluZzogMCA2cHg7XG4gIGZvbnQtc2l6ZTogMTAuNXB4O1xufVxuXG4ucGFnZXIge1xuICBtYXJnaW46IDIwcHggMDtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuICBsaXN0LXN0eWxlOiBub25lO1xuICAqem9vbTogMTtcbn1cblxuLnBhZ2VyOmJlZm9yZSxcbi5wYWdlcjphZnRlciB7XG4gIGRpc3BsYXk6IHRhYmxlO1xuICBsaW5lLWhlaWdodDogMDtcbiAgY29udGVudDogXCJcIjtcbn1cblxuLnBhZ2VyOmFmdGVyIHtcbiAgY2xlYXI6IGJvdGg7XG59XG5cbi5wYWdlciBsaSB7XG4gIGRpc3BsYXk6IGlubGluZTtcbn1cblxuLnBhZ2VyIGxpID4gYSxcbi5wYWdlciBsaSA+IHNwYW4ge1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIHBhZGRpbmc6IDVweCAxNHB4O1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xuICBib3JkZXI6IDFweCBzb2xpZCAjZGRkO1xuICAtd2Via2l0LWJvcmRlci1yYWRpdXM6IDE1cHg7XG4gICAgIC1tb3otYm9yZGVyLXJhZGl1czogMTVweDtcbiAgICAgICAgICBib3JkZXItcmFkaXVzOiAxNXB4O1xufVxuXG4ucGFnZXIgbGkgPiBhOmhvdmVyIHtcbiAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjVmNWY1O1xufVxuXG4ucGFnZXIgLm5leHQgPiBhLFxuLnBhZ2VyIC5uZXh0ID4gc3BhbiB7XG4gIGZsb2F0OiByaWdodDtcbn1cblxuLnBhZ2VyIC5wcmV2aW91cyA+IGEsXG4ucGFnZXIgLnByZXZpb3VzID4gc3BhbiB7XG4gIGZsb2F0OiBsZWZ0O1xufVxuXG4ucGFnZXIgLmRpc2FibGVkID4gYSxcbi5wYWdlciAuZGlzYWJsZWQgPiBhOmhvdmVyLFxuLnBhZ2VyIC5kaXNhYmxlZCA+IHNwYW4ge1xuICBjb2xvcjogIzk5OTk5OTtcbiAgY3Vyc29yOiBkZWZhdWx0O1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xufVxuXG4ubW9kYWwtYmFja2Ryb3Age1xuICBwb3NpdGlvbjogZml4ZWQ7XG4gIHRvcDogMDtcbiAgcmlnaHQ6IDA7XG4gIGJvdHRvbTogMDtcbiAgbGVmdDogMDtcbiAgei1pbmRleDogMTA0MDtcbiAgYmFja2dyb3VuZC1jb2xvcjogIzAwMDAwMDtcbn1cblxuLm1vZGFsLWJhY2tkcm9wLmZhZGUge1xuICBvcGFjaXR5OiAwO1xufVxuXG4ubW9kYWwtYmFja2Ryb3AsXG4ubW9kYWwtYmFja2Ryb3AuZmFkZS5pbiB7XG4gIG9wYWNpdHk6IDAuODtcbiAgZmlsdGVyOiBhbHBoYShvcGFjaXR5PTgwKTtcbn1cblxuLm1vZGFsIHtcbiAgcG9zaXRpb246IGZpeGVkO1xuICB0b3A6IDEwJTtcbiAgbGVmdDogNTAlO1xuICB6LWluZGV4OiAxMDUwO1xuICB3aWR0aDogNTYwcHg7XG4gIG1hcmdpbi1sZWZ0OiAtMjgwcHg7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmZmZmY7XG4gIGJvcmRlcjogMXB4IHNvbGlkICM5OTk7XG4gIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMCwgMCwgMCwgMC4zKTtcbiAgKmJvcmRlcjogMXB4IHNvbGlkICM5OTk7XG4gIC13ZWJraXQtYm9yZGVyLXJhZGl1czogNnB4O1xuICAgICAtbW96LWJvcmRlci1yYWRpdXM6IDZweDtcbiAgICAgICAgICBib3JkZXItcmFkaXVzOiA2cHg7XG4gIG91dGxpbmU6IG5vbmU7XG4gIC13ZWJraXQtYm94LXNoYWRvdzogMCAzcHggN3B4IHJnYmEoMCwgMCwgMCwgMC4zKTtcbiAgICAgLW1vei1ib3gtc2hhZG93OiAwIDNweCA3cHggcmdiYSgwLCAwLCAwLCAwLjMpO1xuICAgICAgICAgIGJveC1zaGFkb3c6IDAgM3B4IDdweCByZ2JhKDAsIDAsIDAsIDAuMyk7XG4gIC13ZWJraXQtYmFja2dyb3VuZC1jbGlwOiBwYWRkaW5nLWJveDtcbiAgICAgLW1vei1iYWNrZ3JvdW5kLWNsaXA6IHBhZGRpbmctYm94O1xuICAgICAgICAgIGJhY2tncm91bmQtY2xpcDogcGFkZGluZy1ib3g7XG59XG5cbi5tb2RhbC5mYWRlIHtcbiAgdG9wOiAtMjUlO1xuICAtd2Via2l0LXRyYW5zaXRpb246IG9wYWNpdHkgMC4zcyBsaW5lYXIsIHRvcCAwLjNzIGVhc2Utb3V0O1xuICAgICAtbW96LXRyYW5zaXRpb246IG9wYWNpdHkgMC4zcyBsaW5lYXIsIHRvcCAwLjNzIGVhc2Utb3V0O1xuICAgICAgIC1vLXRyYW5zaXRpb246IG9wYWNpdHkgMC4zcyBsaW5lYXIsIHRvcCAwLjNzIGVhc2Utb3V0O1xuICAgICAgICAgIHRyYW5zaXRpb246IG9wYWNpdHkgMC4zcyBsaW5lYXIsIHRvcCAwLjNzIGVhc2Utb3V0O1xufVxuXG4ubW9kYWwuZmFkZS5pbiB7XG4gIHRvcDogMTAlO1xufVxuXG4ubW9kYWwtaGVhZGVyIHtcbiAgcGFkZGluZzogOXB4IDE1cHg7XG4gIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjZWVlO1xufVxuXG4ubW9kYWwtaGVhZGVyIC5jbG9zZSB7XG4gIG1hcmdpbi10b3A6IDJweDtcbn1cblxuLm1vZGFsLWhlYWRlciBoMyB7XG4gIG1hcmdpbjogMDtcbiAgbGluZS1oZWlnaHQ6IDMwcHg7XG59XG5cbi5tb2RhbC1ib2R5IHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBtYXgtaGVpZ2h0OiA0MDBweDtcbiAgcGFkZGluZzogMTVweDtcbiAgb3ZlcmZsb3cteTogYXV0bztcbn1cblxuLm1vZGFsLWZvcm0ge1xuICBtYXJnaW4tYm90dG9tOiAwO1xufVxuXG4ubW9kYWwtZm9vdGVyIHtcbiAgcGFkZGluZzogMTRweCAxNXB4IDE1cHg7XG4gIG1hcmdpbi1ib3R0b206IDA7XG4gIHRleHQtYWxpZ246IHJpZ2h0O1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjVmNWY1O1xuICBib3JkZXItdG9wOiAxcHggc29saWQgI2RkZDtcbiAgLXdlYmtpdC1ib3JkZXItcmFkaXVzOiAwIDAgNnB4IDZweDtcbiAgICAgLW1vei1ib3JkZXItcmFkaXVzOiAwIDAgNnB4IDZweDtcbiAgICAgICAgICBib3JkZXItcmFkaXVzOiAwIDAgNnB4IDZweDtcbiAgKnpvb206IDE7XG4gIC13ZWJraXQtYm94LXNoYWRvdzogaW5zZXQgMCAxcHggMCAjZmZmZmZmO1xuICAgICAtbW96LWJveC1zaGFkb3c6IGluc2V0IDAgMXB4IDAgI2ZmZmZmZjtcbiAgICAgICAgICBib3gtc2hhZG93OiBpbnNldCAwIDFweCAwICNmZmZmZmY7XG59XG5cbi5tb2RhbC1mb290ZXI6YmVmb3JlLFxuLm1vZGFsLWZvb3RlcjphZnRlciB7XG4gIGRpc3BsYXk6IHRhYmxlO1xuICBsaW5lLWhlaWdodDogMDtcbiAgY29udGVudDogXCJcIjtcbn1cblxuLm1vZGFsLWZvb3RlcjphZnRlciB7XG4gIGNsZWFyOiBib3RoO1xufVxuXG4ubW9kYWwtZm9vdGVyIC5idG4gKyAuYnRuIHtcbiAgbWFyZ2luLWJvdHRvbTogMDtcbiAgbWFyZ2luLWxlZnQ6IDVweDtcbn1cblxuLm1vZGFsLWZvb3RlciAuYnRuLWdyb3VwIC5idG4gKyAuYnRuIHtcbiAgbWFyZ2luLWxlZnQ6IC0xcHg7XG59XG5cbi5tb2RhbC1mb290ZXIgLmJ0bi1ibG9jayArIC5idG4tYmxvY2sge1xuICBtYXJnaW4tbGVmdDogMDtcbn1cblxuLnRvb2x0aXAge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHotaW5kZXg6IDEwMzA7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICBwYWRkaW5nOiA1cHg7XG4gIGZvbnQtc2l6ZTogMTFweDtcbiAgb3BhY2l0eTogMDtcbiAgZmlsdGVyOiBhbHBoYShvcGFjaXR5PTApO1xuICB2aXNpYmlsaXR5OiB2aXNpYmxlO1xufVxuXG4udG9vbHRpcC5pbiB7XG4gIG9wYWNpdHk6IDAuODtcbiAgZmlsdGVyOiBhbHBoYShvcGFjaXR5PTgwKTtcbn1cblxuLnRvb2x0aXAudG9wIHtcbiAgbWFyZ2luLXRvcDogLTNweDtcbn1cblxuLnRvb2x0aXAucmlnaHQge1xuICBtYXJnaW4tbGVmdDogM3B4O1xufVxuXG4udG9vbHRpcC5ib3R0b20ge1xuICBtYXJnaW4tdG9wOiAzcHg7XG59XG5cbi50b29sdGlwLmxlZnQge1xuICBtYXJnaW4tbGVmdDogLTNweDtcbn1cblxuLnRvb2x0aXAtaW5uZXIge1xuICBtYXgtd2lkdGg6IDIwMHB4O1xuICBwYWRkaW5nOiAzcHggOHB4O1xuICBjb2xvcjogI2ZmZmZmZjtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG4gIGJhY2tncm91bmQtY29sb3I6ICMwMDAwMDA7XG4gIC13ZWJraXQtYm9yZGVyLXJhZGl1czogNHB4O1xuICAgICAtbW96LWJvcmRlci1yYWRpdXM6IDRweDtcbiAgICAgICAgICBib3JkZXItcmFkaXVzOiA0cHg7XG59XG5cbi50b29sdGlwLWFycm93IHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB3aWR0aDogMDtcbiAgaGVpZ2h0OiAwO1xuICBib3JkZXItY29sb3I6IHRyYW5zcGFyZW50O1xuICBib3JkZXItc3R5bGU6IHNvbGlkO1xufVxuXG4udG9vbHRpcC50b3AgLnRvb2x0aXAtYXJyb3cge1xuICBib3R0b206IDA7XG4gIGxlZnQ6IDUwJTtcbiAgbWFyZ2luLWxlZnQ6IC01cHg7XG4gIGJvcmRlci10b3AtY29sb3I6ICMwMDAwMDA7XG4gIGJvcmRlci13aWR0aDogNXB4IDVweCAwO1xufVxuXG4udG9vbHRpcC5yaWdodCAudG9vbHRpcC1hcnJvdyB7XG4gIHRvcDogNTAlO1xuICBsZWZ0OiAwO1xuICBtYXJnaW4tdG9wOiAtNXB4O1xuICBib3JkZXItcmlnaHQtY29sb3I6ICMwMDAwMDA7XG4gIGJvcmRlci13aWR0aDogNXB4IDVweCA1cHggMDtcbn1cblxuLnRvb2x0aXAubGVmdCAudG9vbHRpcC1hcnJvdyB7XG4gIHRvcDogNTAlO1xuICByaWdodDogMDtcbiAgbWFyZ2luLXRvcDogLTVweDtcbiAgYm9yZGVyLWxlZnQtY29sb3I6ICMwMDAwMDA7XG4gIGJvcmRlci13aWR0aDogNXB4IDAgNXB4IDVweDtcbn1cblxuLnRvb2x0aXAuYm90dG9tIC50b29sdGlwLWFycm93IHtcbiAgdG9wOiAwO1xuICBsZWZ0OiA1MCU7XG4gIG1hcmdpbi1sZWZ0OiAtNXB4O1xuICBib3JkZXItYm90dG9tLWNvbG9yOiAjMDAwMDAwO1xuICBib3JkZXItd2lkdGg6IDAgNXB4IDVweDtcbn1cblxuLnBvcG92ZXIge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHRvcDogMDtcbiAgbGVmdDogMDtcbiAgei1pbmRleDogMTAxMDtcbiAgZGlzcGxheTogbm9uZTtcbiAgd2lkdGg6IDIzNnB4O1xuICBwYWRkaW5nOiAxcHg7XG4gIHRleHQtYWxpZ246IGxlZnQ7XG4gIHdoaXRlLXNwYWNlOiBub3JtYWw7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmZmZmY7XG4gIGJvcmRlcjogMXB4IHNvbGlkICNjY2M7XG4gIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMCwgMCwgMCwgMC4yKTtcbiAgLXdlYmtpdC1ib3JkZXItcmFkaXVzOiA2cHg7XG4gICAgIC1tb3otYm9yZGVyLXJhZGl1czogNnB4O1xuICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDZweDtcbiAgLXdlYmtpdC1ib3gtc2hhZG93OiAwIDVweCAxMHB4IHJnYmEoMCwgMCwgMCwgMC4yKTtcbiAgICAgLW1vei1ib3gtc2hhZG93OiAwIDVweCAxMHB4IHJnYmEoMCwgMCwgMCwgMC4yKTtcbiAgICAgICAgICBib3gtc2hhZG93OiAwIDVweCAxMHB4IHJnYmEoMCwgMCwgMCwgMC4yKTtcbiAgLXdlYmtpdC1iYWNrZ3JvdW5kLWNsaXA6IHBhZGRpbmctYm94O1xuICAgICAtbW96LWJhY2tncm91bmQtY2xpcDogcGFkZGluZztcbiAgICAgICAgICBiYWNrZ3JvdW5kLWNsaXA6IHBhZGRpbmctYm94O1xufVxuXG4ucG9wb3Zlci50b3Age1xuICBtYXJnaW4tdG9wOiAtMTBweDtcbn1cblxuLnBvcG92ZXIucmlnaHQge1xuICBtYXJnaW4tbGVmdDogMTBweDtcbn1cblxuLnBvcG92ZXIuYm90dG9tIHtcbiAgbWFyZ2luLXRvcDogMTBweDtcbn1cblxuLnBvcG92ZXIubGVmdCB7XG4gIG1hcmdpbi1sZWZ0OiAtMTBweDtcbn1cblxuLnBvcG92ZXItdGl0bGUge1xuICBwYWRkaW5nOiA4cHggMTRweDtcbiAgbWFyZ2luOiAwO1xuICBmb250LXNpemU6IDE0cHg7XG4gIGZvbnQtd2VpZ2h0OiBub3JtYWw7XG4gIGxpbmUtaGVpZ2h0OiAxOHB4O1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjdmN2Y3O1xuICBib3JkZXItYm90dG9tOiAxcHggc29saWQgI2ViZWJlYjtcbiAgLXdlYmtpdC1ib3JkZXItcmFkaXVzOiA1cHggNXB4IDAgMDtcbiAgICAgLW1vei1ib3JkZXItcmFkaXVzOiA1cHggNXB4IDAgMDtcbiAgICAgICAgICBib3JkZXItcmFkaXVzOiA1cHggNXB4IDAgMDtcbn1cblxuLnBvcG92ZXItY29udGVudCB7XG4gIHBhZGRpbmc6IDlweCAxNHB4O1xufVxuXG4ucG9wb3ZlciAuYXJyb3csXG4ucG9wb3ZlciAuYXJyb3c6YWZ0ZXIge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICB3aWR0aDogMDtcbiAgaGVpZ2h0OiAwO1xuICBib3JkZXItY29sb3I6IHRyYW5zcGFyZW50O1xuICBib3JkZXItc3R5bGU6IHNvbGlkO1xufVxuXG4ucG9wb3ZlciAuYXJyb3cge1xuICBib3JkZXItd2lkdGg6IDExcHg7XG59XG5cbi5wb3BvdmVyIC5hcnJvdzphZnRlciB7XG4gIGJvcmRlci13aWR0aDogMTBweDtcbiAgY29udGVudDogXCJcIjtcbn1cblxuLnBvcG92ZXIudG9wIC5hcnJvdyB7XG4gIGJvdHRvbTogLTExcHg7XG4gIGxlZnQ6IDUwJTtcbiAgbWFyZ2luLWxlZnQ6IC0xMXB4O1xuICBib3JkZXItdG9wLWNvbG9yOiAjOTk5O1xuICBib3JkZXItdG9wLWNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuMjUpO1xuICBib3JkZXItYm90dG9tLXdpZHRoOiAwO1xufVxuXG4ucG9wb3Zlci50b3AgLmFycm93OmFmdGVyIHtcbiAgYm90dG9tOiAxcHg7XG4gIG1hcmdpbi1sZWZ0OiAtMTBweDtcbiAgYm9yZGVyLXRvcC1jb2xvcjogI2ZmZmZmZjtcbiAgYm9yZGVyLWJvdHRvbS13aWR0aDogMDtcbn1cblxuLnBvcG92ZXIucmlnaHQgLmFycm93IHtcbiAgdG9wOiA1MCU7XG4gIGxlZnQ6IC0xMXB4O1xuICBtYXJnaW4tdG9wOiAtMTFweDtcbiAgYm9yZGVyLXJpZ2h0LWNvbG9yOiAjOTk5O1xuICBib3JkZXItcmlnaHQtY29sb3I6IHJnYmEoMCwgMCwgMCwgMC4yNSk7XG4gIGJvcmRlci1sZWZ0LXdpZHRoOiAwO1xufVxuXG4ucG9wb3Zlci5yaWdodCAuYXJyb3c6YWZ0ZXIge1xuICBib3R0b206IC0xMHB4O1xuICBsZWZ0OiAxcHg7XG4gIGJvcmRlci1yaWdodC1jb2xvcjogI2ZmZmZmZjtcbiAgYm9yZGVyLWxlZnQtd2lkdGg6IDA7XG59XG5cbi5wb3BvdmVyLmJvdHRvbSAuYXJyb3cge1xuICB0b3A6IC0xMXB4O1xuICBsZWZ0OiA1MCU7XG4gIG1hcmdpbi1sZWZ0OiAtMTFweDtcbiAgYm9yZGVyLWJvdHRvbS1jb2xvcjogIzk5OTtcbiAgYm9yZGVyLWJvdHRvbS1jb2xvcjogcmdiYSgwLCAwLCAwLCAwLjI1KTtcbiAgYm9yZGVyLXRvcC13aWR0aDogMDtcbn1cblxuLnBvcG92ZXIuYm90dG9tIC5hcnJvdzphZnRlciB7XG4gIHRvcDogMXB4O1xuICBtYXJnaW4tbGVmdDogLTEwcHg7XG4gIGJvcmRlci1ib3R0b20tY29sb3I6ICNmZmZmZmY7XG4gIGJvcmRlci10b3Atd2lkdGg6IDA7XG59XG5cbi5wb3BvdmVyLmxlZnQgLmFycm93IHtcbiAgdG9wOiA1MCU7XG4gIHJpZ2h0OiAtMTFweDtcbiAgbWFyZ2luLXRvcDogLTExcHg7XG4gIGJvcmRlci1sZWZ0LWNvbG9yOiAjOTk5O1xuICBib3JkZXItbGVmdC1jb2xvcjogcmdiYSgwLCAwLCAwLCAwLjI1KTtcbiAgYm9yZGVyLXJpZ2h0LXdpZHRoOiAwO1xufVxuXG4ucG9wb3Zlci5sZWZ0IC5hcnJvdzphZnRlciB7XG4gIHJpZ2h0OiAxcHg7XG4gIGJvdHRvbTogLTEwcHg7XG4gIGJvcmRlci1sZWZ0LWNvbG9yOiAjZmZmZmZmO1xuICBib3JkZXItcmlnaHQtd2lkdGg6IDA7XG59XG5cbi50aHVtYm5haWxzIHtcbiAgbWFyZ2luLWxlZnQ6IC0yMHB4O1xuICBsaXN0LXN0eWxlOiBub25lO1xuICAqem9vbTogMTtcbn1cblxuLnRodW1ibmFpbHM6YmVmb3JlLFxuLnRodW1ibmFpbHM6YWZ0ZXIge1xuICBkaXNwbGF5OiB0YWJsZTtcbiAgbGluZS1oZWlnaHQ6IDA7XG4gIGNvbnRlbnQ6IFwiXCI7XG59XG5cbi50aHVtYm5haWxzOmFmdGVyIHtcbiAgY2xlYXI6IGJvdGg7XG59XG5cbi5yb3ctZmx1aWQgLnRodW1ibmFpbHMge1xuICBtYXJnaW4tbGVmdDogMDtcbn1cblxuLnRodW1ibmFpbHMgPiBsaSB7XG4gIGZsb2F0OiBsZWZ0O1xuICBtYXJnaW4tYm90dG9tOiAyMHB4O1xuICBtYXJnaW4tbGVmdDogMjBweDtcbn1cblxuLnRodW1ibmFpbCB7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICBwYWRkaW5nOiA0cHg7XG4gIGxpbmUtaGVpZ2h0OiAyMHB4O1xuICBib3JkZXI6IDFweCBzb2xpZCAjZGRkO1xuICAtd2Via2l0LWJvcmRlci1yYWRpdXM6IDRweDtcbiAgICAgLW1vei1ib3JkZXItcmFkaXVzOiA0cHg7XG4gICAgICAgICAgYm9yZGVyLXJhZGl1czogNHB4O1xuICAtd2Via2l0LWJveC1zaGFkb3c6IDAgMXB4IDNweCByZ2JhKDAsIDAsIDAsIDAuMDU1KTtcbiAgICAgLW1vei1ib3gtc2hhZG93OiAwIDFweCAzcHggcmdiYSgwLCAwLCAwLCAwLjA1NSk7XG4gICAgICAgICAgYm94LXNoYWRvdzogMCAxcHggM3B4IHJnYmEoMCwgMCwgMCwgMC4wNTUpO1xuICAtd2Via2l0LXRyYW5zaXRpb246IGFsbCAwLjJzIGVhc2UtaW4tb3V0O1xuICAgICAtbW96LXRyYW5zaXRpb246IGFsbCAwLjJzIGVhc2UtaW4tb3V0O1xuICAgICAgIC1vLXRyYW5zaXRpb246IGFsbCAwLjJzIGVhc2UtaW4tb3V0O1xuICAgICAgICAgIHRyYW5zaXRpb246IGFsbCAwLjJzIGVhc2UtaW4tb3V0O1xufVxuXG5hLnRodW1ibmFpbDpob3ZlciB7XG4gIGJvcmRlci1jb2xvcjogIzAwMDAwMDtcbiAgLXdlYmtpdC1ib3gtc2hhZG93OiAwIDFweCA0cHggcmdiYSgwLCAxMDUsIDIxNCwgMC4yNSk7XG4gICAgIC1tb3otYm94LXNoYWRvdzogMCAxcHggNHB4IHJnYmEoMCwgMTA1LCAyMTQsIDAuMjUpO1xuICAgICAgICAgIGJveC1zaGFkb3c6IDAgMXB4IDRweCByZ2JhKDAsIDEwNSwgMjE0LCAwLjI1KTtcbn1cblxuLnRodW1ibmFpbCA+IGltZyB7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICBtYXgtd2lkdGg6IDEwMCU7XG4gIG1hcmdpbi1yaWdodDogYXV0bztcbiAgbWFyZ2luLWxlZnQ6IGF1dG87XG59XG5cbi50aHVtYm5haWwgLmNhcHRpb24ge1xuICBwYWRkaW5nOiA5cHg7XG4gIGNvbG9yOiAjNTU1NTU1O1xufVxuXG4ubWVkaWEsXG4ubWVkaWEtYm9keSB7XG4gIG92ZXJmbG93OiBoaWRkZW47XG4gICpvdmVyZmxvdzogdmlzaWJsZTtcbiAgem9vbTogMTtcbn1cblxuLm1lZGlhLFxuLm1lZGlhIC5tZWRpYSB7XG4gIG1hcmdpbi10b3A6IDE1cHg7XG59XG5cbi5tZWRpYTpmaXJzdC1jaGlsZCB7XG4gIG1hcmdpbi10b3A6IDA7XG59XG5cbi5tZWRpYS1vYmplY3Qge1xuICBkaXNwbGF5OiBibG9jaztcbn1cblxuLm1lZGlhLWhlYWRpbmcge1xuICBtYXJnaW46IDAgMCA1cHg7XG59XG5cbi5tZWRpYSAucHVsbC1sZWZ0IHtcbiAgbWFyZ2luLXJpZ2h0OiAxMHB4O1xufVxuXG4ubWVkaWEgLnB1bGwtcmlnaHQge1xuICBtYXJnaW4tbGVmdDogMTBweDtcbn1cblxuLm1lZGlhLWxpc3Qge1xuICBtYXJnaW4tbGVmdDogMDtcbiAgbGlzdC1zdHlsZTogbm9uZTtcbn1cblxuLmxhYmVsLFxuLmJhZGdlIHtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICBwYWRkaW5nOiAycHggNHB4O1xuICBmb250LXNpemU6IDExLjg0NHB4O1xuICBmb250LXdlaWdodDogYm9sZDtcbiAgbGluZS1oZWlnaHQ6IDE0cHg7XG4gIGNvbG9yOiAjZmZmZmZmO1xuICB0ZXh0LXNoYWRvdzogMCAtMXB4IDAgcmdiYSgwLCAwLCAwLCAwLjI1KTtcbiAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgdmVydGljYWwtYWxpZ246IGJhc2VsaW5lO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjRkZGRkZGO1xufVxuXG4ubGFiZWwge1xuICAtd2Via2l0LWJvcmRlci1yYWRpdXM6IDNweDtcbiAgICAgLW1vei1ib3JkZXItcmFkaXVzOiAzcHg7XG4gICAgICAgICAgYm9yZGVyLXJhZGl1czogM3B4O1xufVxuXG4uYmFkZ2Uge1xuICBwYWRkaW5nLXJpZ2h0OiA5cHg7XG4gIHBhZGRpbmctbGVmdDogOXB4O1xuICAtd2Via2l0LWJvcmRlci1yYWRpdXM6IDlweDtcbiAgICAgLW1vei1ib3JkZXItcmFkaXVzOiA5cHg7XG4gICAgICAgICAgYm9yZGVyLXJhZGl1czogOXB4O1xufVxuXG4ubGFiZWw6ZW1wdHksXG4uYmFkZ2U6ZW1wdHkge1xuICBkaXNwbGF5OiBub25lO1xufVxuXG5hLmxhYmVsOmhvdmVyLFxuYS5iYWRnZTpob3ZlciB7XG4gIGNvbG9yOiAjZmZmZmZmO1xuICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG4gIGN1cnNvcjogcG9pbnRlcjtcbn1cblxuLmxhYmVsLWltcG9ydGFudCxcbi5iYWRnZS1pbXBvcnRhbnQge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjYjk0YTQ4O1xufVxuXG4ubGFiZWwtaW1wb3J0YW50W2hyZWZdLFxuLmJhZGdlLWltcG9ydGFudFtocmVmXSB7XG4gIGJhY2tncm91bmQtY29sb3I6ICM5NTNiMzk7XG59XG5cbi5sYWJlbC13YXJuaW5nLFxuLmJhZGdlLXdhcm5pbmcge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjg5NDA2O1xufVxuXG4ubGFiZWwtd2FybmluZ1tocmVmXSxcbi5iYWRnZS13YXJuaW5nW2hyZWZdIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2M2NzYwNTtcbn1cblxuLmxhYmVsLXN1Y2Nlc3MsXG4uYmFkZ2Utc3VjY2VzcyB7XG4gIGJhY2tncm91bmQtY29sb3I6ICM0Njg4NDc7XG59XG5cbi5sYWJlbC1zdWNjZXNzW2hyZWZdLFxuLmJhZGdlLXN1Y2Nlc3NbaHJlZl0ge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMzU2NjM1O1xufVxuXG4ubGFiZWwtaW5mbyxcbi5iYWRnZS1pbmZvIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogIzNhODdhZDtcbn1cblxuLmxhYmVsLWluZm9baHJlZl0sXG4uYmFkZ2UtaW5mb1tocmVmXSB7XG4gIGJhY2tncm91bmQtY29sb3I6ICMyZDY5ODc7XG59XG5cbi5sYWJlbC1pbnZlcnNlLFxuLmJhZGdlLWludmVyc2Uge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMzMzMzMzO1xufVxuXG4ubGFiZWwtaW52ZXJzZVtocmVmXSxcbi5iYWRnZS1pbnZlcnNlW2hyZWZdIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogIzFhMWExYTtcbn1cblxuLmJ0biAubGFiZWwsXG4uYnRuIC5iYWRnZSB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgdG9wOiAtMXB4O1xufVxuXG4uYnRuLW1pbmkgLmxhYmVsLFxuLmJ0bi1taW5pIC5iYWRnZSB7XG4gIHRvcDogMDtcbn1cblxuQC13ZWJraXQta2V5ZnJhbWVzIHByb2dyZXNzLWJhci1zdHJpcGVzIHtcbiAgZnJvbSB7XG4gICAgYmFja2dyb3VuZC1wb3NpdGlvbjogNDBweCAwO1xuICB9XG4gIHRvIHtcbiAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAwIDA7XG4gIH1cbn1cblxuQC1tb3ota2V5ZnJhbWVzIHByb2dyZXNzLWJhci1zdHJpcGVzIHtcbiAgZnJvbSB7XG4gICAgYmFja2dyb3VuZC1wb3NpdGlvbjogNDBweCAwO1xuICB9XG4gIHRvIHtcbiAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAwIDA7XG4gIH1cbn1cblxuQC1tcy1rZXlmcmFtZXMgcHJvZ3Jlc3MtYmFyLXN0cmlwZXMge1xuICBmcm9tIHtcbiAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiA0MHB4IDA7XG4gIH1cbiAgdG8ge1xuICAgIGJhY2tncm91bmQtcG9zaXRpb246IDAgMDtcbiAgfVxufVxuXG5ALW8ta2V5ZnJhbWVzIHByb2dyZXNzLWJhci1zdHJpcGVzIHtcbiAgZnJvbSB7XG4gICAgYmFja2dyb3VuZC1wb3NpdGlvbjogMCAwO1xuICB9XG4gIHRvIHtcbiAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiA0MHB4IDA7XG4gIH1cbn1cblxuQGtleWZyYW1lcyBwcm9ncmVzcy1iYXItc3RyaXBlcyB7XG4gIGZyb20ge1xuICAgIGJhY2tncm91bmQtcG9zaXRpb246IDQwcHggMDtcbiAgfVxuICB0byB7XG4gICAgYmFja2dyb3VuZC1wb3NpdGlvbjogMCAwO1xuICB9XG59XG5cbi5wcm9ncmVzcyB7XG4gIGhlaWdodDogMjBweDtcbiAgbWFyZ2luLWJvdHRvbTogMjBweDtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2Y3ZjdmNztcbiAgYmFja2dyb3VuZC1pbWFnZTogLW1vei1saW5lYXItZ3JhZGllbnQodG9wLCAjZjVmNWY1LCAjZjlmOWY5KTtcbiAgYmFja2dyb3VuZC1pbWFnZTogLXdlYmtpdC1ncmFkaWVudChsaW5lYXIsIDAgMCwgMCAxMDAlLCBmcm9tKCNmNWY1ZjUpLCB0bygjZjlmOWY5KSk7XG4gIGJhY2tncm91bmQtaW1hZ2U6IC13ZWJraXQtbGluZWFyLWdyYWRpZW50KHRvcCwgI2Y1ZjVmNSwgI2Y5ZjlmOSk7XG4gIGJhY2tncm91bmQtaW1hZ2U6IC1vLWxpbmVhci1ncmFkaWVudCh0b3AsICNmNWY1ZjUsICNmOWY5ZjkpO1xuICBiYWNrZ3JvdW5kLWltYWdlOiBsaW5lYXItZ3JhZGllbnQodG8gYm90dG9tLCAjZjVmNWY1LCAjZjlmOWY5KTtcbiAgYmFja2dyb3VuZC1yZXBlYXQ6IHJlcGVhdC14O1xuICAtd2Via2l0LWJvcmRlci1yYWRpdXM6IDRweDtcbiAgICAgLW1vei1ib3JkZXItcmFkaXVzOiA0cHg7XG4gICAgICAgICAgYm9yZGVyLXJhZGl1czogNHB4O1xuICBmaWx0ZXI6IHByb2dpZDpEWEltYWdlVHJhbnNmb3JtLk1pY3Jvc29mdC5ncmFkaWVudChzdGFydENvbG9yc3RyPScjZmZmNWY1ZjUnLCBlbmRDb2xvcnN0cj0nI2ZmZjlmOWY5JywgR3JhZGllbnRUeXBlPTApO1xuICAtd2Via2l0LWJveC1zaGFkb3c6IGluc2V0IDAgMXB4IDJweCByZ2JhKDAsIDAsIDAsIDAuMSk7XG4gICAgIC1tb3otYm94LXNoYWRvdzogaW5zZXQgMCAxcHggMnB4IHJnYmEoMCwgMCwgMCwgMC4xKTtcbiAgICAgICAgICBib3gtc2hhZG93OiBpbnNldCAwIDFweCAycHggcmdiYSgwLCAwLCAwLCAwLjEpO1xufVxuXG4ucHJvZ3Jlc3MgLmJhciB7XG4gIGZsb2F0OiBsZWZ0O1xuICB3aWR0aDogMDtcbiAgaGVpZ2h0OiAxMDAlO1xuICBmb250LXNpemU6IDEycHg7XG4gIGNvbG9yOiAjZmZmZmZmO1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIHRleHQtc2hhZG93OiAwIC0xcHggMCByZ2JhKDAsIDAsIDAsIDAuMjUpO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMGU5MGQyO1xuICBiYWNrZ3JvdW5kLWltYWdlOiAtbW96LWxpbmVhci1ncmFkaWVudCh0b3AsICMxNDliZGYsICMwNDgwYmUpO1xuICBiYWNrZ3JvdW5kLWltYWdlOiAtd2Via2l0LWdyYWRpZW50KGxpbmVhciwgMCAwLCAwIDEwMCUsIGZyb20oIzE0OWJkZiksIHRvKCMwNDgwYmUpKTtcbiAgYmFja2dyb3VuZC1pbWFnZTogLXdlYmtpdC1saW5lYXItZ3JhZGllbnQodG9wLCAjMTQ5YmRmLCAjMDQ4MGJlKTtcbiAgYmFja2dyb3VuZC1pbWFnZTogLW8tbGluZWFyLWdyYWRpZW50KHRvcCwgIzE0OWJkZiwgIzA0ODBiZSk7XG4gIGJhY2tncm91bmQtaW1hZ2U6IGxpbmVhci1ncmFkaWVudCh0byBib3R0b20sICMxNDliZGYsICMwNDgwYmUpO1xuICBiYWNrZ3JvdW5kLXJlcGVhdDogcmVwZWF0LXg7XG4gIGZpbHRlcjogcHJvZ2lkOkRYSW1hZ2VUcmFuc2Zvcm0uTWljcm9zb2Z0LmdyYWRpZW50KHN0YXJ0Q29sb3JzdHI9JyNmZjE0OWJkZicsIGVuZENvbG9yc3RyPScjZmYwNDgwYmUnLCBHcmFkaWVudFR5cGU9MCk7XG4gIC13ZWJraXQtYm94LXNoYWRvdzogaW5zZXQgMCAtMXB4IDAgcmdiYSgwLCAwLCAwLCAwLjE1KTtcbiAgICAgLW1vei1ib3gtc2hhZG93OiBpbnNldCAwIC0xcHggMCByZ2JhKDAsIDAsIDAsIDAuMTUpO1xuICAgICAgICAgIGJveC1zaGFkb3c6IGluc2V0IDAgLTFweCAwIHJnYmEoMCwgMCwgMCwgMC4xNSk7XG4gIC13ZWJraXQtYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgICAgLW1vei1ib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAgICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gIC13ZWJraXQtdHJhbnNpdGlvbjogd2lkdGggMC42cyBlYXNlO1xuICAgICAtbW96LXRyYW5zaXRpb246IHdpZHRoIDAuNnMgZWFzZTtcbiAgICAgICAtby10cmFuc2l0aW9uOiB3aWR0aCAwLjZzIGVhc2U7XG4gICAgICAgICAgdHJhbnNpdGlvbjogd2lkdGggMC42cyBlYXNlO1xufVxuXG4ucHJvZ3Jlc3MgLmJhciArIC5iYXIge1xuICAtd2Via2l0LWJveC1zaGFkb3c6IGluc2V0IDFweCAwIDAgcmdiYSgwLCAwLCAwLCAwLjE1KSwgaW5zZXQgMCAtMXB4IDAgcmdiYSgwLCAwLCAwLCAwLjE1KTtcbiAgICAgLW1vei1ib3gtc2hhZG93OiBpbnNldCAxcHggMCAwIHJnYmEoMCwgMCwgMCwgMC4xNSksIGluc2V0IDAgLTFweCAwIHJnYmEoMCwgMCwgMCwgMC4xNSk7XG4gICAgICAgICAgYm94LXNoYWRvdzogaW5zZXQgMXB4IDAgMCByZ2JhKDAsIDAsIDAsIDAuMTUpLCBpbnNldCAwIC0xcHggMCByZ2JhKDAsIDAsIDAsIDAuMTUpO1xufVxuXG4ucHJvZ3Jlc3Mtc3RyaXBlZCAuYmFyIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogIzE0OWJkZjtcbiAgYmFja2dyb3VuZC1pbWFnZTogLXdlYmtpdC1ncmFkaWVudChsaW5lYXIsIDAgMTAwJSwgMTAwJSAwLCBjb2xvci1zdG9wKDAuMjUsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xNSkpLCBjb2xvci1zdG9wKDAuMjUsIHRyYW5zcGFyZW50KSwgY29sb3Itc3RvcCgwLjUsIHRyYW5zcGFyZW50KSwgY29sb3Itc3RvcCgwLjUsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xNSkpLCBjb2xvci1zdG9wKDAuNzUsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xNSkpLCBjb2xvci1zdG9wKDAuNzUsIHRyYW5zcGFyZW50KSwgdG8odHJhbnNwYXJlbnQpKTtcbiAgYmFja2dyb3VuZC1pbWFnZTogLXdlYmtpdC1saW5lYXItZ3JhZGllbnQoNDVkZWcsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xNSkgMjUlLCB0cmFuc3BhcmVudCAyNSUsIHRyYW5zcGFyZW50IDUwJSwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjE1KSA1MCUsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xNSkgNzUlLCB0cmFuc3BhcmVudCA3NSUsIHRyYW5zcGFyZW50KTtcbiAgYmFja2dyb3VuZC1pbWFnZTogLW1vei1saW5lYXItZ3JhZGllbnQoNDVkZWcsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xNSkgMjUlLCB0cmFuc3BhcmVudCAyNSUsIHRyYW5zcGFyZW50IDUwJSwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjE1KSA1MCUsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xNSkgNzUlLCB0cmFuc3BhcmVudCA3NSUsIHRyYW5zcGFyZW50KTtcbiAgYmFja2dyb3VuZC1pbWFnZTogLW8tbGluZWFyLWdyYWRpZW50KDQ1ZGVnLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTUpIDI1JSwgdHJhbnNwYXJlbnQgMjUlLCB0cmFuc3BhcmVudCA1MCUsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xNSkgNTAlLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTUpIDc1JSwgdHJhbnNwYXJlbnQgNzUlLCB0cmFuc3BhcmVudCk7XG4gIGJhY2tncm91bmQtaW1hZ2U6IGxpbmVhci1ncmFkaWVudCg0NWRlZywgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjE1KSAyNSUsIHRyYW5zcGFyZW50IDI1JSwgdHJhbnNwYXJlbnQgNTAlLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTUpIDUwJSwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjE1KSA3NSUsIHRyYW5zcGFyZW50IDc1JSwgdHJhbnNwYXJlbnQpO1xuICAtd2Via2l0LWJhY2tncm91bmQtc2l6ZTogNDBweCA0MHB4O1xuICAgICAtbW96LWJhY2tncm91bmQtc2l6ZTogNDBweCA0MHB4O1xuICAgICAgIC1vLWJhY2tncm91bmQtc2l6ZTogNDBweCA0MHB4O1xuICAgICAgICAgIGJhY2tncm91bmQtc2l6ZTogNDBweCA0MHB4O1xufVxuXG4ucHJvZ3Jlc3MuYWN0aXZlIC5iYXIge1xuICAtd2Via2l0LWFuaW1hdGlvbjogcHJvZ3Jlc3MtYmFyLXN0cmlwZXMgMnMgbGluZWFyIGluZmluaXRlO1xuICAgICAtbW96LWFuaW1hdGlvbjogcHJvZ3Jlc3MtYmFyLXN0cmlwZXMgMnMgbGluZWFyIGluZmluaXRlO1xuICAgICAgLW1zLWFuaW1hdGlvbjogcHJvZ3Jlc3MtYmFyLXN0cmlwZXMgMnMgbGluZWFyIGluZmluaXRlO1xuICAgICAgIC1vLWFuaW1hdGlvbjogcHJvZ3Jlc3MtYmFyLXN0cmlwZXMgMnMgbGluZWFyIGluZmluaXRlO1xuICAgICAgICAgIGFuaW1hdGlvbjogcHJvZ3Jlc3MtYmFyLXN0cmlwZXMgMnMgbGluZWFyIGluZmluaXRlO1xufVxuXG4ucHJvZ3Jlc3MtZGFuZ2VyIC5iYXIsXG4ucHJvZ3Jlc3MgLmJhci1kYW5nZXIge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZGQ1MTRjO1xuICBiYWNrZ3JvdW5kLWltYWdlOiAtbW96LWxpbmVhci1ncmFkaWVudCh0b3AsICNlZTVmNWIsICNjNDNjMzUpO1xuICBiYWNrZ3JvdW5kLWltYWdlOiAtd2Via2l0LWdyYWRpZW50KGxpbmVhciwgMCAwLCAwIDEwMCUsIGZyb20oI2VlNWY1YiksIHRvKCNjNDNjMzUpKTtcbiAgYmFja2dyb3VuZC1pbWFnZTogLXdlYmtpdC1saW5lYXItZ3JhZGllbnQodG9wLCAjZWU1ZjViLCAjYzQzYzM1KTtcbiAgYmFja2dyb3VuZC1pbWFnZTogLW8tbGluZWFyLWdyYWRpZW50KHRvcCwgI2VlNWY1YiwgI2M0M2MzNSk7XG4gIGJhY2tncm91bmQtaW1hZ2U6IGxpbmVhci1ncmFkaWVudCh0byBib3R0b20sICNlZTVmNWIsICNjNDNjMzUpO1xuICBiYWNrZ3JvdW5kLXJlcGVhdDogcmVwZWF0LXg7XG4gIGZpbHRlcjogcHJvZ2lkOkRYSW1hZ2VUcmFuc2Zvcm0uTWljcm9zb2Z0LmdyYWRpZW50KHN0YXJ0Q29sb3JzdHI9JyNmZmVlNWY1YicsIGVuZENvbG9yc3RyPScjZmZjNDNjMzUnLCBHcmFkaWVudFR5cGU9MCk7XG59XG5cbi5wcm9ncmVzcy1kYW5nZXIucHJvZ3Jlc3Mtc3RyaXBlZCAuYmFyLFxuLnByb2dyZXNzLXN0cmlwZWQgLmJhci1kYW5nZXIge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZWU1ZjViO1xuICBiYWNrZ3JvdW5kLWltYWdlOiAtd2Via2l0LWdyYWRpZW50KGxpbmVhciwgMCAxMDAlLCAxMDAlIDAsIGNvbG9yLXN0b3AoMC4yNSwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjE1KSksIGNvbG9yLXN0b3AoMC4yNSwgdHJhbnNwYXJlbnQpLCBjb2xvci1zdG9wKDAuNSwgdHJhbnNwYXJlbnQpLCBjb2xvci1zdG9wKDAuNSwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjE1KSksIGNvbG9yLXN0b3AoMC43NSwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjE1KSksIGNvbG9yLXN0b3AoMC43NSwgdHJhbnNwYXJlbnQpLCB0byh0cmFuc3BhcmVudCkpO1xuICBiYWNrZ3JvdW5kLWltYWdlOiAtd2Via2l0LWxpbmVhci1ncmFkaWVudCg0NWRlZywgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjE1KSAyNSUsIHRyYW5zcGFyZW50IDI1JSwgdHJhbnNwYXJlbnQgNTAlLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTUpIDUwJSwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjE1KSA3NSUsIHRyYW5zcGFyZW50IDc1JSwgdHJhbnNwYXJlbnQpO1xuICBiYWNrZ3JvdW5kLWltYWdlOiAtbW96LWxpbmVhci1ncmFkaWVudCg0NWRlZywgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjE1KSAyNSUsIHRyYW5zcGFyZW50IDI1JSwgdHJhbnNwYXJlbnQgNTAlLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTUpIDUwJSwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjE1KSA3NSUsIHRyYW5zcGFyZW50IDc1JSwgdHJhbnNwYXJlbnQpO1xuICBiYWNrZ3JvdW5kLWltYWdlOiAtby1saW5lYXItZ3JhZGllbnQoNDVkZWcsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xNSkgMjUlLCB0cmFuc3BhcmVudCAyNSUsIHRyYW5zcGFyZW50IDUwJSwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjE1KSA1MCUsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xNSkgNzUlLCB0cmFuc3BhcmVudCA3NSUsIHRyYW5zcGFyZW50KTtcbiAgYmFja2dyb3VuZC1pbWFnZTogbGluZWFyLWdyYWRpZW50KDQ1ZGVnLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTUpIDI1JSwgdHJhbnNwYXJlbnQgMjUlLCB0cmFuc3BhcmVudCA1MCUsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xNSkgNTAlLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTUpIDc1JSwgdHJhbnNwYXJlbnQgNzUlLCB0cmFuc3BhcmVudCk7XG59XG5cbi5wcm9ncmVzcy1zdWNjZXNzIC5iYXIsXG4ucHJvZ3Jlc3MgLmJhci1zdWNjZXNzIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogIzVlYjk1ZTtcbiAgYmFja2dyb3VuZC1pbWFnZTogLW1vei1saW5lYXItZ3JhZGllbnQodG9wLCAjNjJjNDYyLCAjNTdhOTU3KTtcbiAgYmFja2dyb3VuZC1pbWFnZTogLXdlYmtpdC1ncmFkaWVudChsaW5lYXIsIDAgMCwgMCAxMDAlLCBmcm9tKCM2MmM0NjIpLCB0bygjNTdhOTU3KSk7XG4gIGJhY2tncm91bmQtaW1hZ2U6IC13ZWJraXQtbGluZWFyLWdyYWRpZW50KHRvcCwgIzYyYzQ2MiwgIzU3YTk1Nyk7XG4gIGJhY2tncm91bmQtaW1hZ2U6IC1vLWxpbmVhci1ncmFkaWVudCh0b3AsICM2MmM0NjIsICM1N2E5NTcpO1xuICBiYWNrZ3JvdW5kLWltYWdlOiBsaW5lYXItZ3JhZGllbnQodG8gYm90dG9tLCAjNjJjNDYyLCAjNTdhOTU3KTtcbiAgYmFja2dyb3VuZC1yZXBlYXQ6IHJlcGVhdC14O1xuICBmaWx0ZXI6IHByb2dpZDpEWEltYWdlVHJhbnNmb3JtLk1pY3Jvc29mdC5ncmFkaWVudChzdGFydENvbG9yc3RyPScjZmY2MmM0NjInLCBlbmRDb2xvcnN0cj0nI2ZmNTdhOTU3JywgR3JhZGllbnRUeXBlPTApO1xufVxuXG4ucHJvZ3Jlc3Mtc3VjY2Vzcy5wcm9ncmVzcy1zdHJpcGVkIC5iYXIsXG4ucHJvZ3Jlc3Mtc3RyaXBlZCAuYmFyLXN1Y2Nlc3Mge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjNjJjNDYyO1xuICBiYWNrZ3JvdW5kLWltYWdlOiAtd2Via2l0LWdyYWRpZW50KGxpbmVhciwgMCAxMDAlLCAxMDAlIDAsIGNvbG9yLXN0b3AoMC4yNSwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjE1KSksIGNvbG9yLXN0b3AoMC4yNSwgdHJhbnNwYXJlbnQpLCBjb2xvci1zdG9wKDAuNSwgdHJhbnNwYXJlbnQpLCBjb2xvci1zdG9wKDAuNSwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjE1KSksIGNvbG9yLXN0b3AoMC43NSwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjE1KSksIGNvbG9yLXN0b3AoMC43NSwgdHJhbnNwYXJlbnQpLCB0byh0cmFuc3BhcmVudCkpO1xuICBiYWNrZ3JvdW5kLWltYWdlOiAtd2Via2l0LWxpbmVhci1ncmFkaWVudCg0NWRlZywgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjE1KSAyNSUsIHRyYW5zcGFyZW50IDI1JSwgdHJhbnNwYXJlbnQgNTAlLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTUpIDUwJSwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjE1KSA3NSUsIHRyYW5zcGFyZW50IDc1JSwgdHJhbnNwYXJlbnQpO1xuICBiYWNrZ3JvdW5kLWltYWdlOiAtbW96LWxpbmVhci1ncmFkaWVudCg0NWRlZywgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjE1KSAyNSUsIHRyYW5zcGFyZW50IDI1JSwgdHJhbnNwYXJlbnQgNTAlLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTUpIDUwJSwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjE1KSA3NSUsIHRyYW5zcGFyZW50IDc1JSwgdHJhbnNwYXJlbnQpO1xuICBiYWNrZ3JvdW5kLWltYWdlOiAtby1saW5lYXItZ3JhZGllbnQoNDVkZWcsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xNSkgMjUlLCB0cmFuc3BhcmVudCAyNSUsIHRyYW5zcGFyZW50IDUwJSwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjE1KSA1MCUsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xNSkgNzUlLCB0cmFuc3BhcmVudCA3NSUsIHRyYW5zcGFyZW50KTtcbiAgYmFja2dyb3VuZC1pbWFnZTogbGluZWFyLWdyYWRpZW50KDQ1ZGVnLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTUpIDI1JSwgdHJhbnNwYXJlbnQgMjUlLCB0cmFuc3BhcmVudCA1MCUsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xNSkgNTAlLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTUpIDc1JSwgdHJhbnNwYXJlbnQgNzUlLCB0cmFuc3BhcmVudCk7XG59XG5cbi5wcm9ncmVzcy1pbmZvIC5iYXIsXG4ucHJvZ3Jlc3MgLmJhci1pbmZvIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogIzRiYjFjZjtcbiAgYmFja2dyb3VuZC1pbWFnZTogLW1vei1saW5lYXItZ3JhZGllbnQodG9wLCAjNWJjMGRlLCAjMzM5YmI5KTtcbiAgYmFja2dyb3VuZC1pbWFnZTogLXdlYmtpdC1ncmFkaWVudChsaW5lYXIsIDAgMCwgMCAxMDAlLCBmcm9tKCM1YmMwZGUpLCB0bygjMzM5YmI5KSk7XG4gIGJhY2tncm91bmQtaW1hZ2U6IC13ZWJraXQtbGluZWFyLWdyYWRpZW50KHRvcCwgIzViYzBkZSwgIzMzOWJiOSk7XG4gIGJhY2tncm91bmQtaW1hZ2U6IC1vLWxpbmVhci1ncmFkaWVudCh0b3AsICM1YmMwZGUsICMzMzliYjkpO1xuICBiYWNrZ3JvdW5kLWltYWdlOiBsaW5lYXItZ3JhZGllbnQodG8gYm90dG9tLCAjNWJjMGRlLCAjMzM5YmI5KTtcbiAgYmFja2dyb3VuZC1yZXBlYXQ6IHJlcGVhdC14O1xuICBmaWx0ZXI6IHByb2dpZDpEWEltYWdlVHJhbnNmb3JtLk1pY3Jvc29mdC5ncmFkaWVudChzdGFydENvbG9yc3RyPScjZmY1YmMwZGUnLCBlbmRDb2xvcnN0cj0nI2ZmMzM5YmI5JywgR3JhZGllbnRUeXBlPTApO1xufVxuXG4ucHJvZ3Jlc3MtaW5mby5wcm9ncmVzcy1zdHJpcGVkIC5iYXIsXG4ucHJvZ3Jlc3Mtc3RyaXBlZCAuYmFyLWluZm8ge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjNWJjMGRlO1xuICBiYWNrZ3JvdW5kLWltYWdlOiAtd2Via2l0LWdyYWRpZW50KGxpbmVhciwgMCAxMDAlLCAxMDAlIDAsIGNvbG9yLXN0b3AoMC4yNSwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjE1KSksIGNvbG9yLXN0b3AoMC4yNSwgdHJhbnNwYXJlbnQpLCBjb2xvci1zdG9wKDAuNSwgdHJhbnNwYXJlbnQpLCBjb2xvci1zdG9wKDAuNSwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjE1KSksIGNvbG9yLXN0b3AoMC43NSwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjE1KSksIGNvbG9yLXN0b3AoMC43NSwgdHJhbnNwYXJlbnQpLCB0byh0cmFuc3BhcmVudCkpO1xuICBiYWNrZ3JvdW5kLWltYWdlOiAtd2Via2l0LWxpbmVhci1ncmFkaWVudCg0NWRlZywgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjE1KSAyNSUsIHRyYW5zcGFyZW50IDI1JSwgdHJhbnNwYXJlbnQgNTAlLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTUpIDUwJSwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjE1KSA3NSUsIHRyYW5zcGFyZW50IDc1JSwgdHJhbnNwYXJlbnQpO1xuICBiYWNrZ3JvdW5kLWltYWdlOiAtbW96LWxpbmVhci1ncmFkaWVudCg0NWRlZywgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjE1KSAyNSUsIHRyYW5zcGFyZW50IDI1JSwgdHJhbnNwYXJlbnQgNTAlLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTUpIDUwJSwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjE1KSA3NSUsIHRyYW5zcGFyZW50IDc1JSwgdHJhbnNwYXJlbnQpO1xuICBiYWNrZ3JvdW5kLWltYWdlOiAtby1saW5lYXItZ3JhZGllbnQoNDVkZWcsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xNSkgMjUlLCB0cmFuc3BhcmVudCAyNSUsIHRyYW5zcGFyZW50IDUwJSwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjE1KSA1MCUsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xNSkgNzUlLCB0cmFuc3BhcmVudCA3NSUsIHRyYW5zcGFyZW50KTtcbiAgYmFja2dyb3VuZC1pbWFnZTogbGluZWFyLWdyYWRpZW50KDQ1ZGVnLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTUpIDI1JSwgdHJhbnNwYXJlbnQgMjUlLCB0cmFuc3BhcmVudCA1MCUsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xNSkgNTAlLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTUpIDc1JSwgdHJhbnNwYXJlbnQgNzUlLCB0cmFuc3BhcmVudCk7XG59XG5cbi5wcm9ncmVzcy13YXJuaW5nIC5iYXIsXG4ucHJvZ3Jlc3MgLmJhci13YXJuaW5nIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZhYTczMjtcbiAgYmFja2dyb3VuZC1pbWFnZTogLW1vei1saW5lYXItZ3JhZGllbnQodG9wLCAjZmJiNDUwLCAjZjg5NDA2KTtcbiAgYmFja2dyb3VuZC1pbWFnZTogLXdlYmtpdC1ncmFkaWVudChsaW5lYXIsIDAgMCwgMCAxMDAlLCBmcm9tKCNmYmI0NTApLCB0bygjZjg5NDA2KSk7XG4gIGJhY2tncm91bmQtaW1hZ2U6IC13ZWJraXQtbGluZWFyLWdyYWRpZW50KHRvcCwgI2ZiYjQ1MCwgI2Y4OTQwNik7XG4gIGJhY2tncm91bmQtaW1hZ2U6IC1vLWxpbmVhci1ncmFkaWVudCh0b3AsICNmYmI0NTAsICNmODk0MDYpO1xuICBiYWNrZ3JvdW5kLWltYWdlOiBsaW5lYXItZ3JhZGllbnQodG8gYm90dG9tLCAjZmJiNDUwLCAjZjg5NDA2KTtcbiAgYmFja2dyb3VuZC1yZXBlYXQ6IHJlcGVhdC14O1xuICBmaWx0ZXI6IHByb2dpZDpEWEltYWdlVHJhbnNmb3JtLk1pY3Jvc29mdC5ncmFkaWVudChzdGFydENvbG9yc3RyPScjZmZmYmI0NTAnLCBlbmRDb2xvcnN0cj0nI2ZmZjg5NDA2JywgR3JhZGllbnRUeXBlPTApO1xufVxuXG4ucHJvZ3Jlc3Mtd2FybmluZy5wcm9ncmVzcy1zdHJpcGVkIC5iYXIsXG4ucHJvZ3Jlc3Mtc3RyaXBlZCAuYmFyLXdhcm5pbmcge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmJiNDUwO1xuICBiYWNrZ3JvdW5kLWltYWdlOiAtd2Via2l0LWdyYWRpZW50KGxpbmVhciwgMCAxMDAlLCAxMDAlIDAsIGNvbG9yLXN0b3AoMC4yNSwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjE1KSksIGNvbG9yLXN0b3AoMC4yNSwgdHJhbnNwYXJlbnQpLCBjb2xvci1zdG9wKDAuNSwgdHJhbnNwYXJlbnQpLCBjb2xvci1zdG9wKDAuNSwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjE1KSksIGNvbG9yLXN0b3AoMC43NSwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjE1KSksIGNvbG9yLXN0b3AoMC43NSwgdHJhbnNwYXJlbnQpLCB0byh0cmFuc3BhcmVudCkpO1xuICBiYWNrZ3JvdW5kLWltYWdlOiAtd2Via2l0LWxpbmVhci1ncmFkaWVudCg0NWRlZywgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjE1KSAyNSUsIHRyYW5zcGFyZW50IDI1JSwgdHJhbnNwYXJlbnQgNTAlLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTUpIDUwJSwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjE1KSA3NSUsIHRyYW5zcGFyZW50IDc1JSwgdHJhbnNwYXJlbnQpO1xuICBiYWNrZ3JvdW5kLWltYWdlOiAtbW96LWxpbmVhci1ncmFkaWVudCg0NWRlZywgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjE1KSAyNSUsIHRyYW5zcGFyZW50IDI1JSwgdHJhbnNwYXJlbnQgNTAlLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTUpIDUwJSwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjE1KSA3NSUsIHRyYW5zcGFyZW50IDc1JSwgdHJhbnNwYXJlbnQpO1xuICBiYWNrZ3JvdW5kLWltYWdlOiAtby1saW5lYXItZ3JhZGllbnQoNDVkZWcsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xNSkgMjUlLCB0cmFuc3BhcmVudCAyNSUsIHRyYW5zcGFyZW50IDUwJSwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjE1KSA1MCUsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xNSkgNzUlLCB0cmFuc3BhcmVudCA3NSUsIHRyYW5zcGFyZW50KTtcbiAgYmFja2dyb3VuZC1pbWFnZTogbGluZWFyLWdyYWRpZW50KDQ1ZGVnLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTUpIDI1JSwgdHJhbnNwYXJlbnQgMjUlLCB0cmFuc3BhcmVudCA1MCUsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xNSkgNTAlLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTUpIDc1JSwgdHJhbnNwYXJlbnQgNzUlLCB0cmFuc3BhcmVudCk7XG59XG5cbi5hY2NvcmRpb24ge1xuICBtYXJnaW4tYm90dG9tOiAyMHB4O1xufVxuXG4uYWNjb3JkaW9uLWdyb3VwIHtcbiAgbWFyZ2luLWJvdHRvbTogMnB4O1xuICBib3JkZXI6IDFweCBzb2xpZCAjZTVlNWU1O1xuICAtd2Via2l0LWJvcmRlci1yYWRpdXM6IDRweDtcbiAgICAgLW1vei1ib3JkZXItcmFkaXVzOiA0cHg7XG4gICAgICAgICAgYm9yZGVyLXJhZGl1czogNHB4O1xufVxuXG4uYWNjb3JkaW9uLWhlYWRpbmcge1xuICBib3JkZXItYm90dG9tOiAwO1xufVxuXG4uYWNjb3JkaW9uLWhlYWRpbmcgLmFjY29yZGlvbi10b2dnbGUge1xuICBkaXNwbGF5OiBibG9jaztcbiAgcGFkZGluZzogOHB4IDE1cHg7XG59XG5cbi5hY2NvcmRpb24tdG9nZ2xlIHtcbiAgY3Vyc29yOiBwb2ludGVyO1xufVxuXG4uYWNjb3JkaW9uLWlubmVyIHtcbiAgcGFkZGluZzogOXB4IDE1cHg7XG4gIGJvcmRlci10b3A6IDFweCBzb2xpZCAjZTVlNWU1O1xufVxuXG4uY2Fyb3VzZWwge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIG1hcmdpbi1ib3R0b206IDIwcHg7XG4gIGxpbmUtaGVpZ2h0OiAxO1xufVxuXG4uY2Fyb3VzZWwtaW5uZXIge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIHdpZHRoOiAxMDAlO1xuICBvdmVyZmxvdzogaGlkZGVuO1xufVxuXG4uY2Fyb3VzZWwtaW5uZXIgPiAuaXRlbSB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgZGlzcGxheTogbm9uZTtcbiAgLXdlYmtpdC10cmFuc2l0aW9uOiAwLjZzIGVhc2UtaW4tb3V0IGxlZnQ7XG4gICAgIC1tb3otdHJhbnNpdGlvbjogMC42cyBlYXNlLWluLW91dCBsZWZ0O1xuICAgICAgIC1vLXRyYW5zaXRpb246IDAuNnMgZWFzZS1pbi1vdXQgbGVmdDtcbiAgICAgICAgICB0cmFuc2l0aW9uOiAwLjZzIGVhc2UtaW4tb3V0IGxlZnQ7XG59XG5cbi5jYXJvdXNlbC1pbm5lciA+IC5pdGVtID4gaW1nIHtcbiAgZGlzcGxheTogYmxvY2s7XG4gIGxpbmUtaGVpZ2h0OiAxO1xufVxuXG4uY2Fyb3VzZWwtaW5uZXIgPiAuYWN0aXZlLFxuLmNhcm91c2VsLWlubmVyID4gLm5leHQsXG4uY2Fyb3VzZWwtaW5uZXIgPiAucHJldiB7XG4gIGRpc3BsYXk6IGJsb2NrO1xufVxuXG4uY2Fyb3VzZWwtaW5uZXIgPiAuYWN0aXZlIHtcbiAgbGVmdDogMDtcbn1cblxuLmNhcm91c2VsLWlubmVyID4gLm5leHQsXG4uY2Fyb3VzZWwtaW5uZXIgPiAucHJldiB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgdG9wOiAwO1xuICB3aWR0aDogMTAwJTtcbn1cblxuLmNhcm91c2VsLWlubmVyID4gLm5leHQge1xuICBsZWZ0OiAxMDAlO1xufVxuXG4uY2Fyb3VzZWwtaW5uZXIgPiAucHJldiB7XG4gIGxlZnQ6IC0xMDAlO1xufVxuXG4uY2Fyb3VzZWwtaW5uZXIgPiAubmV4dC5sZWZ0LFxuLmNhcm91c2VsLWlubmVyID4gLnByZXYucmlnaHQge1xuICBsZWZ0OiAwO1xufVxuXG4uY2Fyb3VzZWwtaW5uZXIgPiAuYWN0aXZlLmxlZnQge1xuICBsZWZ0OiAtMTAwJTtcbn1cblxuLmNhcm91c2VsLWlubmVyID4gLmFjdGl2ZS5yaWdodCB7XG4gIGxlZnQ6IDEwMCU7XG59XG5cbi5jYXJvdXNlbC1jb250cm9sIHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB0b3A6IDQwJTtcbiAgbGVmdDogMTVweDtcbiAgd2lkdGg6IDQwcHg7XG4gIGhlaWdodDogNDBweDtcbiAgbWFyZ2luLXRvcDogLTIwcHg7XG4gIGZvbnQtc2l6ZTogNjBweDtcbiAgZm9udC13ZWlnaHQ6IDEwMDtcbiAgbGluZS1oZWlnaHQ6IDMwcHg7XG4gIGNvbG9yOiAjZmZmZmZmO1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIGJhY2tncm91bmQ6ICMyMjIyMjI7XG4gIGJvcmRlcjogM3B4IHNvbGlkICNmZmZmZmY7XG4gIC13ZWJraXQtYm9yZGVyLXJhZGl1czogMjNweDtcbiAgICAgLW1vei1ib3JkZXItcmFkaXVzOiAyM3B4O1xuICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDIzcHg7XG4gIG9wYWNpdHk6IDAuNTtcbiAgZmlsdGVyOiBhbHBoYShvcGFjaXR5PTUwKTtcbn1cblxuLmNhcm91c2VsLWNvbnRyb2wucmlnaHQge1xuICByaWdodDogMTVweDtcbiAgbGVmdDogYXV0bztcbn1cblxuLmNhcm91c2VsLWNvbnRyb2w6aG92ZXIge1xuICBjb2xvcjogI2ZmZmZmZjtcbiAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xuICBvcGFjaXR5OiAwLjk7XG4gIGZpbHRlcjogYWxwaGEob3BhY2l0eT05MCk7XG59XG5cbi5jYXJvdXNlbC1jYXB0aW9uIHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICByaWdodDogMDtcbiAgYm90dG9tOiAwO1xuICBsZWZ0OiAwO1xuICBwYWRkaW5nOiAxNXB4O1xuICBiYWNrZ3JvdW5kOiAjMzMzMzMzO1xuICBiYWNrZ3JvdW5kOiByZ2JhKDAsIDAsIDAsIDAuNzUpO1xufVxuXG4uY2Fyb3VzZWwtY2FwdGlvbiBoNCxcbi5jYXJvdXNlbC1jYXB0aW9uIHAge1xuICBsaW5lLWhlaWdodDogMjBweDtcbiAgY29sb3I6ICNmZmZmZmY7XG59XG5cbi5jYXJvdXNlbC1jYXB0aW9uIGg0IHtcbiAgbWFyZ2luOiAwIDAgNXB4O1xufVxuXG4uY2Fyb3VzZWwtY2FwdGlvbiBwIHtcbiAgbWFyZ2luLWJvdHRvbTogMDtcbn1cblxuLmhlcm8tdW5pdCB7XG4gIHBhZGRpbmc6IDMwcHg7XG4gIG1hcmdpbi1ib3R0b206IDMwcHg7XG4gIGZvbnQtc2l6ZTogMThweDtcbiAgZm9udC13ZWlnaHQ6IDIwMDtcbiAgbGluZS1oZWlnaHQ6IDIwcHg7XG4gIGNvbG9yOiBpbmhlcml0O1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZWVlZWVlO1xuICAtd2Via2l0LWJvcmRlci1yYWRpdXM6IDZweDtcbiAgICAgLW1vei1ib3JkZXItcmFkaXVzOiA2cHg7XG4gICAgICAgICAgYm9yZGVyLXJhZGl1czogNnB4O1xufVxuXG4uaGVyby11bml0IGgxIHtcbiAgbWFyZ2luLWJvdHRvbTogMDtcbiAgZm9udC1zaXplOiA2MHB4O1xuICBsaW5lLWhlaWdodDogMTtcbiAgbGV0dGVyLXNwYWNpbmc6IC0xcHg7XG4gIGNvbG9yOiBpbmhlcml0O1xufVxuXG4uaGVyby11bml0IGxpIHtcbiAgbGluZS1oZWlnaHQ6IDMwcHg7XG59XG5cbi5wdWxsLXJpZ2h0IHtcbiAgZmxvYXQ6IHJpZ2h0O1xufVxuXG4ucHVsbC1sZWZ0IHtcbiAgZmxvYXQ6IGxlZnQ7XG59XG5cbi5oaWRlIHtcbiAgZGlzcGxheTogbm9uZTtcbn1cblxuLnNob3cge1xuICBkaXNwbGF5OiBibG9jaztcbn1cblxuLmludmlzaWJsZSB7XG4gIHZpc2liaWxpdHk6IGhpZGRlbjtcbn1cblxuLmFmZml4IHtcbiAgcG9zaXRpb246IGZpeGVkO1xufVxuIn0sICJoZWFkZXJzU2l6ZSI6IDAsICJib2R5U2l6ZSI6IDE5NTE3LCAicmVkaXJlY3RVUkwiOiAiIiwgIl90cmFuc2ZlclNpemUiOiAxOTUxN30sICJjYWNoZSI6IHt9LCAidGltaW5ncyI6IHsiZG5zIjogLTEsICJjb25uZWN0IjogLTEsICJzc2wiOiAtMSwgInNlbmQiOiAwLCAid2FpdCI6IDU5MC45ODcsICJyZWNlaXZlIjogOS41MjR9LCAicGFnZXJlZiI6ICJwYWdlQDhjOTMyZjgzMzdkOWFiYjRiOWFiOTg4OWRlYzUxYjk5IiwgInNlcnZlcklQQWRkcmVzcyI6ICJbMjYwNjo0NzAwOjIwOjo2ODFhOmVjZl0iLCAiX3NlcnZlclBvcnQiOiA0NDMsICJfc2VjdXJpdHlEZXRhaWxzIjogeyJwcm90b2NvbCI6ICJUTFMgMS4zIiwgInN1YmplY3ROYW1lIjogInN1cHBseWNoYWluY2FuYWRhLmNvbSIsICJpc3N1ZXIiOiAiV0UxIiwgInZhbGlkRnJvbSI6IDE3MjM0NzA4NDEsICJ2YWxpZFRvIjogMTczMTI0Njg0MH19LCB7InN0YXJ0ZWREYXRlVGltZSI6ICIyMDI0LTA5LTA1VDExOjA3OjIwLjI5MVoiLCAidGltZSI6IDMyMi41NjgwMDAwMDAwMDAwNCwgInJlcXVlc3QiOiB7Im1ldGhvZCI6ICJHRVQiLCAidXJsIjogImh0dHBzOi8vcG9ydGFsLnN1cHBseWNoYWluY2FuYWRhLmNvbS9jb21tb24vY3NzL2NhbGVuZGFyLmNzcyIsICJodHRwVmVyc2lvbiI6ICJIVFRQLzIuMCIsICJjb29raWVzIjogW3sibmFtZSI6ICJKU0VTU0lPTklEIiwgInZhbHVlIjogIjI1N0Q5REM5MjA0NTJBNEQ5MzNCOEEzQ0RBOUI2QkQzIn1dLCAiaGVhZGVycyI6IFt7Im5hbWUiOiAiOmF1dGhvcml0eSIsICJ2YWx1ZSI6ICJwb3J0YWwuc3VwcGx5Y2hhaW5jYW5hZGEuY29tIn0sIHsibmFtZSI6ICI6bWV0aG9kIiwgInZhbHVlIjogIkdFVCJ9LCB7Im5hbWUiOiAiOnBhdGgiLCAidmFsdWUiOiAiL2NvbW1vbi9jc3MvY2FsZW5kYXIuY3NzIn0sIHsibmFtZSI6ICI6c2NoZW1lIiwgInZhbHVlIjogImh0dHBzIn0sIHsibmFtZSI6ICJhY2NlcHQiLCAidmFsdWUiOiAidGV4dC9jc3MsKi8qO3E9MC4xIn0sIHsibmFtZSI6ICJhY2NlcHQtZW5jb2RpbmciLCAidmFsdWUiOiAiZ3ppcCwgZGVmbGF0ZSwgYnIsIHpzdGQifSwgeyJuYW1lIjogImFjY2VwdC1sYW5ndWFnZSIsICJ2YWx1ZSI6ICJlbi1VUyJ9LCB7Im5hbWUiOiAiY29va2llIiwgInZhbHVlIjogIkpTRVNTSU9OSUQ9MjU3RDlEQzkyMDQ1MkE0RDkzM0I4QTNDREE5QjZCRDMifSwgeyJuYW1lIjogInByaW9yaXR5IiwgInZhbHVlIjogInU9MCJ9LCB7Im5hbWUiOiAicmVmZXJlciIsICJ2YWx1ZSI6ICJodHRwczovL3BvcnRhbC5zdXBwbHljaGFpbmNhbmFkYS5jb20vZW4vcG9ydGFsbG9naW4ifSwgeyJuYW1lIjogInNlYy1jaC11YSIsICJ2YWx1ZSI6ICJcIk5vdDtBPUJyYW5kXCI7dj1cIjI0XCIsIFwiQ2hyb21pdW1cIjt2PVwiMTI4XCIifSwgeyJuYW1lIjogInNlYy1jaC11YS1tb2JpbGUiLCAidmFsdWUiOiAiPzAifSwgeyJuYW1lIjogInNlYy1jaC11YS1wbGF0Zm9ybSIsICJ2YWx1ZSI6ICJcIldpbmRvd3NcIiJ9LCB7Im5hbWUiOiAic2VjLWZldGNoLWRlc3QiLCAidmFsdWUiOiAic3R5bGUifSwgeyJuYW1lIjogInNlYy1mZXRjaC1tb2RlIiwgInZhbHVlIjogIm5vLWNvcnMifSwgeyJuYW1lIjogInNlYy1mZXRjaC1zaXRlIiwgInZhbHVlIjogInNhbWUtb3JpZ2luIn0sIHsibmFtZSI6ICJ1c2VyLWFnZW50IiwgInZhbHVlIjogIk1vemlsbGEvNS4wIChXaW5kb3dzIE5UIDEwLjA7IFdpbjY0OyB4NjQpIEFwcGxlV2ViS2l0LzUzNy4zNiAoS0hUTUwsIGxpa2UgR2Vja28pIENocm9tZS8xMjguMC42NjEzLjE4IFNhZmFyaS81MzcuMzYifV0sICJxdWVyeVN0cmluZyI6IFtdLCAiaGVhZGVyc1NpemUiOiA2ODAsICJib2R5U2l6ZSI6IDB9LCAicmVzcG9uc2UiOiB7InN0YXR1cyI6IDIwMCwgInN0YXR1c1RleHQiOiAiIiwgImh0dHBWZXJzaW9uIjogIkhUVFAvMi4wIiwgImNvb2tpZXMiOiBbXSwgImhlYWRlcnMiOiBbeyJuYW1lIjogImNhY2hlLWNvbnRyb2wiLCAidmFsdWUiOiAibWF4LWFnZT0xNDQwMCJ9LCB7Im5hbWUiOiAiY2YtY2FjaGUtc3RhdHVzIiwgInZhbHVlIjogIk1JU1MifSwgeyJuYW1lIjogImNmLXJheSIsICJ2YWx1ZSI6ICI4YmU1YzE0YmQ4NDE3MWM0LUZSQSJ9LCB7Im5hbWUiOiAiY29udGVudC1lbmNvZGluZyIsICJ2YWx1ZSI6ICJiciJ9LCB7Im5hbWUiOiAiY29udGVudC10eXBlIiwgInZhbHVlIjogInRleHQvY3NzIn0sIHsibmFtZSI6ICJkYXRlIiwgInZhbHVlIjogIlRodSwgMDUgU2VwIDIwMjQgMTE6MDc6MjAgR01UIn0sIHsibmFtZSI6ICJldGFnIiwgInZhbHVlIjogIlcvXCIyODE1LTE2ODEzMzM0MjIwMDBcIiJ9LCB7Im5hbWUiOiAibGFzdC1tb2RpZmllZCIsICJ2YWx1ZSI6ICJXZWQsIDEyIEFwciAyMDIzIDIxOjAzOjQyIEdNVCJ9LCB7Im5hbWUiOiAibmVsIiwgInZhbHVlIjogIntcInN1Y2Nlc3NfZnJhY3Rpb25cIjowLFwicmVwb3J0X3RvXCI6XCJjZi1uZWxcIixcIm1heF9hZ2VcIjo2MDQ4MDB9In0sIHsibmFtZSI6ICJyZXBvcnQtdG8iLCAidmFsdWUiOiAie1wiZW5kcG9pbnRzXCI6W3tcInVybFwiOlwiaHR0cHM6XFwvXFwvYS5uZWwuY2xvdWRmbGFyZS5jb21cXC9yZXBvcnRcXC92ND9zPUljbCUyRjdtbEtyMWJuQlNvUnhvZ2NNNTRVUG0lMkZ4dGpsRXNvRnoyYmxaaGVRRUx4QnpoZG5Td2ZPQWJ4VGdDUUUyJTJCRkhIS1gwVjMwdDM1ekpMbkJjV2FQYVdYbGdqOVZQU0RwbWJuRmR4d0E0eVBuYUVPdnJETkRoc2tjMjd2ZnZQSGhQN1dGMHZzQnFvT1NHTXdOT1VBUVJVdVpITiUyQkpvOWF4RSUzRFwifV0sXCJncm91cFwiOlwiY2YtbmVsXCIsXCJtYXhfYWdlXCI6NjA0ODAwfSJ9LCB7Im5hbWUiOiAic2VydmVyIiwgInZhbHVlIjogImNsb3VkZmxhcmUifSwgeyJuYW1lIjogInN0cmljdC10cmFuc3BvcnQtc2VjdXJpdHkiLCAidmFsdWUiOiAibWF4LWFnZT02MzA3MjAwMDsgaW5jbHVkZVN1YmRvbWFpbnM7IHByZWxvYWQifSwgeyJuYW1lIjogInZhcnkiLCAidmFsdWUiOiAiQWNjZXB0LUVuY29kaW5nIn1dLCAiY29udGVudCI6IHsic2l6ZSI6IDI4MTUsICJtaW1lVHlwZSI6ICJ0ZXh0L2NzcyIsICJjb21wcmVzc2lvbiI6IDE2NDUsICJ0ZXh0IjogIi8qIENhbGVuZGFyOiBhIEphdmFzY3JpcHQgY2xhc3MgZm9yIE1vb3Rvb2xzIHRoYXQgYWRkcyBhY2Nlc3NpYmxlIGFuZCB1bm9idHJ1c2l2ZSBkYXRlIHBpY2tlcnMgdG8geW91ciBmb3JtIGVsZW1lbnRzIDxodHRwOi8vZWxlY3RyaWNwcmlzbS5jb20vYWVyb24vY2FsZW5kYXI+ICovXHJcbi8qIERlZmF1bHQgQ1NTIGZvciBDYWxlbmRhciAobmF2aWdhdGlvbjogMSksIENvcHlyaWdodCAoYykgMjAwNyBBZXJvbiBHbGVtYW5uIDxodHRwOi8vZWxlY3RyaWNwcmlzbS5jb20vYWVyb24+ICovXHJcblxyXG4uaGlkZGVuIHtcclxuXHRvcGFjaXR5OiAwO1xyXG5cdHBvc2l0aW9uOiBhYnNvbHV0ZTtcclxufVxyXG4udmlzaWJsZSB7XHJcblx0b3BhY2l0eTogMTtcclxufVxyXG5cclxuXHJcbmlucHV0LmNhbGVuZGFyLFxyXG5zZWxlY3QuY2FsZW5kYXIge1xyXG5cdHdpZHRoOiA5OXB4O1xyXG59XHJcblxyXG5idXR0b24uY2FsZW5kYXIge1xyXG5cdGJhY2tncm91bmQ6IHVybChpbWcvY2FsZW5kYXItaWNvbi5naWYpO1xyXG5cdGJvcmRlcjogMDtcclxuXHRjdXJzb3I6IHBvaW50ZXI7XHJcblx0ZmxvYXQ6IGxlZnQ7XHJcblx0aGVpZ2h0OiAyMHB4O1xyXG5cdG1hcmdpbi1yaWdodDogNnB4O1xyXG5cdHdpZHRoOiAyMHB4O1xyXG59XHJcbmJ1dHRvbi5jYWxlbmRhcjpob3ZlcixcclxuYnV0dG9uLmNhbGVuZGFyLmFjdGl2ZSB7XHJcblx0YmFja2dyb3VuZC1wb3NpdGlvbjogMCAyMHB4O1xyXG59XHJcblxyXG5kaXYuY2FsZW5kYXIge1xyXG5cdGJhY2tncm91bmQ6IHVybChpbWcvY2FsZW5kYXIucG5nKTtcclxuXHRoZWlnaHQ6IDE5NXB4O1xyXG5cdHBhZGRpbmc6IDAgNnB4O1xyXG5cdHRleHQtYWxpZ246IGNlbnRlcjtcclxuXHR3aWR0aDogMTQ3cHg7XHJcbn1cdFxyXG5cdGRpdi5jYWxlbmRhciAqIHtcclxuXHRcdG1hcmdpbjogMDtcclxuXHRcdHBhZGRpbmc6IDA7XHJcblx0fVx0XHJcblx0ZGl2LmNhbGVuZGFyIGRpdiB7XHJcblx0XHRiYWNrZ3JvdW5kOiBub25lICFpbXBvcnRhbnQ7XHJcblx0XHRjdXJzb3I6IG1vdmU7XHJcblx0XHRoZWlnaHQ6IDE4NXB4O1xyXG5cdFx0b3ZlcmZsb3c6IGhpZGRlbjtcclxuXHRcdHBhZGRpbmctdG9wOiAxMHB4O1xyXG5cdFx0cG9zaXRpb246IHJlbGF0aXZlO1xyXG5cdFx0d2lkdGg6IDE0N3B4O1xyXG5cdH1cdFxyXG5cdFxyXG5cdGRpdi5jYWxlbmRhciBjYXB0aW9uIHtcclxuXHRcdGNvbG9yOiAjMzMzO1xyXG5cdFx0Zm9udDogbm9ybWFsIDEycHgvMTZweCBBcmlhbCwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmO1xyXG5cdFx0cGFkZGluZy10b3A6IDZweDtcclxuXHRcdHRleHQtYWxpZ246IGNlbnRlcjtcclxuXHRcdHdpZHRoOiAxMDAlO1xyXG5cdH1cclxuXHRkaXYuY2FsZW5kYXIgY2FwdGlvbiBhIHtcclxuXHRcdGN1cnNvcjogcG9pbnRlcjtcclxuXHRcdGRpc3BsYXk6IGJsb2NrO1xyXG5cdFx0aGVpZ2h0OiAxMnB4O1xyXG5cdFx0b3ZlcmZsb3c6IGhpZGRlbjtcclxuXHRcdHBvc2l0aW9uOiBhYnNvbHV0ZTtcclxuXHRcdHRleHQtaW5kZW50OiAtMTAwcHg7XHJcblx0XHR0b3A6IDE3cHg7XHJcblx0XHR3aWR0aDogMTFweDtcclxuXHR9XHJcblx0ZGl2LmNhbGVuZGFyIGNhcHRpb24gYS5wcmV2IHtcclxuXHRcdGJhY2tncm91bmQtaW1hZ2U6IHVybChpbWcvY2FsZW5kYXItcHJldi5naWYpO1xyXG5cdFx0bGVmdDogMDtcclxuXHR9XHJcblx0ZGl2LmNhbGVuZGFyIGNhcHRpb24gYS5uZXh0IHtcclxuXHRcdGJhY2tncm91bmQtaW1hZ2U6IHVybChpbWcvY2FsZW5kYXItbmV4dC5naWYpO1xyXG5cdFx0cmlnaHQ6IDA7XHJcblx0fVxyXG5cdGRpdi5jYWxlbmRhciBjYXB0aW9uIGE6aG92ZXIge1xyXG5cdFx0YmFja2dyb3VuZC1wb3NpdGlvbjogMCAxMnB4O1xyXG5cdH1cclxuXHRkaXYuY2FsZW5kYXIgY2FwdGlvbiBzcGFuIHtcclxuXHRcdGhlaWdodDogMjVweDtcclxuXHRcdHBvc2l0aW9uOiByZWxhdGl2ZTtcclxuXHRcdHRleHQtYWxpZ246IGNlbnRlcjtcclxuXHR9XHJcblx0ZGl2LmNhbGVuZGFyIGNhcHRpb24gc3Bhbi5tb250aCB7XHJcblx0XHRwYWRkaW5nLXJpZ2h0OiA4cHg7XHJcblx0fVxyXG5cdGRpdi5jYWxlbmRhciBjYXB0aW9uIHNwYW4ubW9udGg6YWZ0ZXIge1xyXG5cdFx0Y29udGVudDogJywnO1xyXG5cdH1cclxuXHJcblx0ZGl2LmNhbGVuZGFyIHRhYmxlIHtcclxuXHRcdGJhY2tncm91bmQ6ICNGRkY7XHJcblx0XHRib3JkZXI6IDA7XHJcblx0XHRib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlO1xyXG5cdFx0Ym9yZGVyLXNwYWNpbmc6IDA7XHJcblx0XHRjdXJzb3I6IGRlZmF1bHQ7XHJcblx0XHRtYXJnaW46IDAgYXV0bztcclxuXHRcdG92ZXJmbG93OiBoaWRkZW47XHJcblx0XHR3aWR0aDogMTQ3cHg7XHJcblx0fVxyXG5cdGRpdi5jYWxlbmRhciB0ZCxcclxuXHRkaXYuY2FsZW5kYXIgdGgge1xyXG5cdFx0Ym9yZGVyOiAwO1xyXG5cdFx0Y29sb3I6ICMwNTk3REI7XHJcblx0XHRmb250OiBub3JtYWwgMTJweCBBcmlhbCwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmO1xyXG5cdFx0aGVpZ2h0OiAyMXB4O1xyXG5cdFx0dGV4dC1hbGlnbjogY2VudGVyO1xyXG5cdFx0d2lkdGg6IDIxcHg7XHJcblx0fVxyXG5cdGRpdi5jYWxlbmRhciB0ZCB7XHJcblx0XHRiYWNrZ3JvdW5kOiB1cmwoaW1nL2NhbGVuZGFyLXRkLmdpZik7XHJcblx0XHRjb2xvcjogI0ZGRjtcclxuXHRcdGZvbnQtc2l6ZTogMTFweDtcclxuXHR9XHJcblx0ZGl2LmNhbGVuZGFyIHRkLmludmFsaWQge1xyXG5cdFx0Y29sb3I6ICM5OTk7XHJcblx0fVxyXG5cdGRpdi5jYWxlbmRhciB0ZC52YWxpZCB7XHJcblx0XHRiYWNrZ3JvdW5kOiB1cmwoaW1nL2NhbGVuZGFyLXZhbGlkLmdpZik7XHJcblx0XHRjb2xvcjogIzA1OTdEQjtcclxuXHRcdGN1cnNvcjogcG9pbnRlcjtcclxuXHR9XHJcblx0ZGl2LmNhbGVuZGFyIHRkLmhpbGl0ZSB7XHJcblx0XHRiYWNrZ3JvdW5kOiB1cmwoaW1nL2NhbGVuZGFyLWhpbGl0ZS5naWYpO1xyXG5cdH1cclxuXHRkaXYuY2FsZW5kYXIgdGQuaW5hY3RpdmUge1xyXG5cdFx0YmFja2dyb3VuZDogdXJsKGltZy9jYWxlbmRhci10ZC5naWYpIDAgMTAwJTtcclxuXHRcdGNvbG9yOiAjRkZGO1xyXG5cdH1cclxuXHRkaXYuY2FsZW5kYXIgdGQuYWN0aXZlLFxyXG5cdGRpdi5jYWxlbmRhciB0ZC5ob3ZlciB7XHJcblx0XHRiYWNrZ3JvdW5kOiB1cmwoaW1nL2NhbGVuZGFyLXZhbGlkLmdpZikgMCAxMDAlO1xyXG5cdFx0Y29sb3I6ICNGRkY7XHJcblx0XHRjdXJzb3I6IHBvaW50ZXI7XHJcblx0fSJ9LCAiaGVhZGVyc1NpemUiOiAwLCAiYm9keVNpemUiOiAxMTcwLCAicmVkaXJlY3RVUkwiOiAiIiwgIl90cmFuc2ZlclNpemUiOiAxMTcwfSwgImNhY2hlIjoge30sICJ0aW1pbmdzIjogeyJkbnMiOiAtMSwgImNvbm5lY3QiOiAtMSwgInNzbCI6IC0xLCAic2VuZCI6IDAsICJ3YWl0IjogMzEzLjEyNCwgInJlY2VpdmUiOiA5LjQ0NH0sICJwYWdlcmVmIjogInBhZ2VAOGM5MzJmODMzN2Q5YWJiNGI5YWI5ODg5ZGVjNTFiOTkiLCAic2VydmVySVBBZGRyZXNzIjogIlsyNjA2OjQ3MDA6MjA6OjY4MWE6ZWNmXSIsICJfc2VydmVyUG9ydCI6IDQ0MywgIl9zZWN1cml0eURldGFpbHMiOiB7InByb3RvY29sIjogIlRMUyAxLjMiLCAic3ViamVjdE5hbWUiOiAic3VwcGx5Y2hhaW5jYW5hZGEuY29tIiwgImlzc3VlciI6ICJXRTEiLCAidmFsaWRGcm9tIjogMTcyMzQ3MDg0MSwgInZhbGlkVG8iOiAxNzMxMjQ2ODQwfX0sIHsic3RhcnRlZERhdGVUaW1lIjogIjIwMjQtMDktMDVUMTE6MDc6MjAuMjkxWiIsICJ0aW1lIjogMzE5LjI0OCwgInJlcXVlc3QiOiB7Im1ldGhvZCI6ICJHRVQiLCAidXJsIjogImh0dHBzOi8vcG9ydGFsLnN1cHBseWNoYWluY2FuYWRhLmNvbS9jbXMyL2Nzcy9tZW1iZXJfcG9ydGFsLmNzcyIsICJodHRwVmVyc2lvbiI6ICJIVFRQLzIuMCIsICJjb29raWVzIjogW3sibmFtZSI6ICJKU0VTU0lPTklEIiwgInZhbHVlIjogIjI1N0Q5REM5MjA0NTJBNEQ5MzNCOEEzQ0RBOUI2QkQzIn1dLCAiaGVhZGVycyI6IFt7Im5hbWUiOiAiOmF1dGhvcml0eSIsICJ2YWx1ZSI6ICJwb3J0YWwuc3VwcGx5Y2hhaW5jYW5hZGEuY29tIn0sIHsibmFtZSI6ICI6bWV0aG9kIiwgInZhbHVlIjogIkdFVCJ9LCB7Im5hbWUiOiAiOnBhdGgiLCAidmFsdWUiOiAiL2NtczIvY3NzL21lbWJlcl9wb3J0YWwuY3NzIn0sIHsibmFtZSI6ICI6c2NoZW1lIiwgInZhbHVlIjogImh0dHBzIn0sIHsibmFtZSI6ICJhY2NlcHQiLCAidmFsdWUiOiAidGV4dC9jc3MsKi8qO3E9MC4xIn0sIHsibmFtZSI6ICJhY2NlcHQtZW5jb2RpbmciLCAidmFsdWUiOiAiZ3ppcCwgZGVmbGF0ZSwgYnIsIHpzdGQifSwgeyJuYW1lIjogImFjY2VwdC1sYW5ndWFnZSIsICJ2YWx1ZSI6ICJlbi1VUyJ9LCB7Im5hbWUiOiAiY29va2llIiwgInZhbHVlIjogIkpTRVNTSU9OSUQ9MjU3RDlEQzkyMDQ1MkE0RDkzM0I4QTNDREE5QjZCRDMifSwgeyJuYW1lIjogInByaW9yaXR5IiwgInZhbHVlIjogInU9MCJ9LCB7Im5hbWUiOiAicmVmZXJlciIsICJ2YWx1ZSI6ICJodHRwczovL3BvcnRhbC5zdXBwbHljaGFpbmNhbmFkYS5jb20vZW4vcG9ydGFsbG9naW4ifSwgeyJuYW1lIjogInNlYy1jaC11YSIsICJ2YWx1ZSI6ICJcIk5vdDtBPUJyYW5kXCI7dj1cIjI0XCIsIFwiQ2hyb21pdW1cIjt2PVwiMTI4XCIifSwgeyJuYW1lIjogInNlYy1jaC11YS1tb2JpbGUiLCAidmFsdWUiOiAiPzAifSwgeyJuYW1lIjogInNlYy1jaC11YS1wbGF0Zm9ybSIsICJ2YWx1ZSI6ICJcIldpbmRvd3NcIiJ9LCB7Im5hbWUiOiAic2VjLWZldGNoLWRlc3QiLCAidmFsdWUiOiAic3R5bGUifSwgeyJuYW1lIjogInNlYy1mZXRjaC1tb2RlIiwgInZhbHVlIjogIm5vLWNvcnMifSwgeyJuYW1lIjogInNlYy1mZXRjaC1zaXRlIiwgInZhbHVlIjogInNhbWUtb3JpZ2luIn0sIHsibmFtZSI6ICJ1c2VyLWFnZW50IiwgInZhbHVlIjogIk1vemlsbGEvNS4wIChXaW5kb3dzIE5UIDEwLjA7IFdpbjY0OyB4NjQpIEFwcGxlV2ViS2l0LzUzNy4zNiAoS0hUTUwsIGxpa2UgR2Vja28pIENocm9tZS8xMjguMC42NjEzLjE4IFNhZmFyaS81MzcuMzYifV0sICJxdWVyeVN0cmluZyI6IFtdLCAiaGVhZGVyc1NpemUiOiA2ODYsICJib2R5U2l6ZSI6IDB9LCAicmVzcG9uc2UiOiB7InN0YXR1cyI6IDIwMCwgInN0YXR1c1RleHQiOiAiIiwgImh0dHBWZXJzaW9uIjogIkhUVFAvMi4wIiwgImNvb2tpZXMiOiBbXSwgImhlYWRlcnMiOiBbeyJuYW1lIjogImNhY2hlLWNvbnRyb2wiLCAidmFsdWUiOiAibWF4LWFnZT0xNDQwMCJ9LCB7Im5hbWUiOiAiY2YtY2FjaGUtc3RhdHVzIiwgInZhbHVlIjogIk1JU1MifSwgeyJuYW1lIjogImNmLXJheSIsICJ2YWx1ZSI6ICI4YmU1YzE0YmQ4NGY3MWM0LUZSQSJ9LCB7Im5hbWUiOiAiY29udGVudC1lbmNvZGluZyIsICJ2YWx1ZSI6ICJiciJ9LCB7Im5hbWUiOiAiY29udGVudC10eXBlIiwgInZhbHVlIjogInRleHQvY3NzIn0sIHsibmFtZSI6ICJkYXRlIiwgInZhbHVlIjogIlRodSwgMDUgU2VwIDIwMjQgMTE6MDc6MjAgR01UIn0sIHsibmFtZSI6ICJldGFnIiwgInZhbHVlIjogIlcvXCI0NjQzLTE2ODEzMzM0MjIwMDBcIiJ9LCB7Im5hbWUiOiAibGFzdC1tb2RpZmllZCIsICJ2YWx1ZSI6ICJXZWQsIDEyIEFwciAyMDIzIDIxOjAzOjQyIEdNVCJ9LCB7Im5hbWUiOiAibmVsIiwgInZhbHVlIjogIntcInN1Y2Nlc3NfZnJhY3Rpb25cIjowLFwicmVwb3J0X3RvXCI6XCJjZi1uZWxcIixcIm1heF9hZ2VcIjo2MDQ4MDB9In0sIHsibmFtZSI6ICJyZXBvcnQtdG8iLCAidmFsdWUiOiAie1wiZW5kcG9pbnRzXCI6W3tcInVybFwiOlwiaHR0cHM6XFwvXFwvYS5uZWwuY2xvdWRmbGFyZS5jb21cXC9yZXBvcnRcXC92ND9zPTRxJTJGMTlkRmVlQ3RNN2c1aXdGT21XQWRoeG85U0pnSmRhek5TMjZlVHdwcDNuVVdpQjM4cjJWTyUyQkZ3dWJTM1NJRFpobGowSEZmR0l0ME5ka0s2VndhS2RUNU9sTzE1eHQzQTVnVUJ1UVk2S1RTZEtGb3BjMFFTZUdxSHNWOEEzcTJXaGElMkIwYThKOEkzWm9kTU44U3FuTFVHMVJqdmtLNnpNb1klM0RcIn1dLFwiZ3JvdXBcIjpcImNmLW5lbFwiLFwibWF4X2FnZVwiOjYwNDgwMH0ifSwgeyJuYW1lIjogInNlcnZlciIsICJ2YWx1ZSI6ICJjbG91ZGZsYXJlIn0sIHsibmFtZSI6ICJzdHJpY3QtdHJhbnNwb3J0LXNlY3VyaXR5IiwgInZhbHVlIjogIm1heC1hZ2U9NjMwNzIwMDA7IGluY2x1ZGVTdWJkb21haW5zOyBwcmVsb2FkIn0sIHsibmFtZSI6ICJ2YXJ5IiwgInZhbHVlIjogIkFjY2VwdC1FbmNvZGluZyJ9XSwgImNvbnRlbnQiOiB7InNpemUiOiA0NjQzLCAibWltZVR5cGUiOiAidGV4dC9jc3MiLCAiY29tcHJlc3Npb24iOiAyOTA3LCAidGV4dCI6ICI6cm9vdHtcclxuXHQtLWNsci1ibGFjazojMzMzO1xyXG5cdC0tY2xyLXdoaXRlOiNmZmY7XHJcbiAgICAtLWNsci1ibHVlOiMxMTc0OGY7IC8qICMwMDcxOGYgKi9cclxuICAgIC0tY2xyLXRleHQtdGl0bGU6IzBENzg5NTtcclxuICAgIC0tY2xyLWxhYmVsLWJhY2tncm91bmQ6IzAwOUM2RDtcclxuICAgIC0tY2xyLXRleHQtc2t5OiMwRTlERDc7XHJcbiAgICAtLWNsci1idG46I0VEMUMyNDtcclxufSAgICBcclxuICAgIFxyXG5odG1sLCBib2R5LCAuY29udGFpbmVye1xyXG5cdGhlaWdodDogMTAwJTtcclxuXHRmb250LXNpemU6IDEwMCU7XHJcbn1cclxuYm9keSB7XHJcblx0bWluLXdpZHRoOiAwcHg7XHJcblx0YmFja2dyb3VuZC1jb2xvcjogI2ZmZmZmZjtcclxuXHRtYXJnaW46IDBweDtcclxufVxyXG4uY29udGFpbmVyIHtcclxuXHRkaXNwbGF5OiB0YWJsZTtcclxuICAgIHdpZHRoOiAxMDAlO1xyXG59XHJcbiAgICBcclxuI2Rpdi1sb2dpbi10b3Age1xyXG5cdGhlaWdodDogMTAwcHg7XHJcbn1cclxuXHJcbiNmb290ZXIge1xyXG5cdGJhY2tncm91bmQtY29sb3I6IHZhcigtLWNsci1ibHVlKTtcclxufVxyXG5cclxuXHJcblxyXG4uYm9sZCB7XHJcblx0Zm9udC13ZWlnaHQ6IGJvbGQ7XHRcclxufVxyXG5cclxuXHJcblxyXG4ucGFnZS1oZWFkaW5nLCAucGFnZS1jb250ZW50IHtcclxuXHRtYXgtd2lkdGg6IDEwMDBweDtcclxuXHRtYXJnaW46IGF1dG87XHJcbn1cclxuLnBhZ2UtaGVhZGluZyB7XHJcblx0aGVpZ2h0OiA1MHB4O1xyXG59XHJcblxyXG4uYnJlYWRjcnVtYnMtbGlzdCB7XHJcblx0ZGlzcGxheTogZmxleDtcclxuXHRwYWRkaW5nLWxlZnQ6IDE1cHg7XHJcblx0cGFkZGluZy1yaWdodDogMTVweDtcclxuXHRwYWRkaW5nLXRvcDogMjBweDtcclxuXHRtYXJnaW46IDBweDtcclxuXHQvKiBtYXJnaW4tdG9wOiAyMHB4O1xyXG5cdG1hcmdpbi1sZWZ0OiAxMHB4OyAqL1xyXG59XHJcbi5icmVhZGNydW1icy1saXN0ID4gbGkge1xyXG5cdHBhZGRpbmctcmlnaHQ6IDhweDtcclxufVxyXG5cclxuLmJyZWFkY3J1bWJzLWxpc3QgPiBsaTpub3QoOmZpcnN0LWNoaWxkKTpiZWZvcmUge1xyXG5cdGNvbnRlbnQ6IFwiPlwiOyAvKiBJbnNlcnQgY29udGVudCB0aGF0IGxvb2tzIGxpa2UgYnVsbGV0cyAqL1xyXG5cdHBhZGRpbmctcmlnaHQ6IDhweDtcclxufVxyXG4uYnJlYWRjcnVtYnMtbGlzdCBhIHtcclxuXHR0ZXh0LWRlY29yYXRpb246IG5vbmU7XHJcbn1cclxuLmJyZWFkY3J1bWJzLWxpc3QgYS5jdXJyZW50IHtcclxuXHR0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTtcclxufVxyXG5cclxuLyogcHVibGljLXNpZGViYXItYWN0aW9uLmpzcCAqL1xyXG4jZGl2LXNpZGViYXItYWN0aW9uIHtcclxuXHRtYXgtd2lkdGg6IDEwMDBweDtcclxuXHRtYXJnaW46IGF1dG87XHJcbn1cclxuI2Rpdi1zaWRlYmFyLWFjdGlvbiA+ICNkaXYtaG9tZSB7XHJcbn1cclxuI2Rpdi1zaWRlYmFyLWFjdGlvbiA+ICNkaXYtc2lkZWJhciB7XHJcbn1cclxuXHJcbiNkaXYtc2lkZWJhci1hY3Rpb24ge1xyXG5cdGJveC1zaXppbmc6IGJvcmRlci1ib3g7XHJcbiAgICBtYXgtd2lkdGg6IDEwMDBweDtcclxuICAgIG1hcmdpbjogYXV0bztcclxuICAgIC8qIHBhZGRpbmctbGVmdDogMTBweDtcclxuICAgIHBhZGRpbmctcmlnaHQ6IDEwcHg7ICovXHJcbiAgICBkaXNwbGF5OiBmbGV4O1xyXG4gICAgZmxleC1kaXJlY3Rpb246IHJvdztcclxufVxyXG4jZGl2LXNpZGViYXItYWN0aW9uICoge1xyXG5cdGJveC1zaXppbmc6IGJvcmRlci1ib3g7XHJcbn1cclxuXHJcbiNkaXYtaG9tZSB7XHJcblx0d2lkdGg6IDc1JTtcclxuXHRwYWRkaW5nLWxlZnQ6IDE1cHg7XHJcblx0cGFkZGluZy1yaWdodDogMTVweDsgXHJcblx0bWFyZ2luLXRvcDogMzBweDtcclxuXHRtYXJnaW4tYm90dG9tOiAxNXB4O1xyXG59XHJcbiNkaXYtc2lkZWJhciB7XHJcblx0d2lkdGg6IDI1JTtcclxuXHRwYWRkaW5nLWxlZnQ6IDE1cHg7XHJcblx0cGFkZGluZy1yaWdodDogMTVweDtcclxuXHRtYXJnaW4tdG9wOiAxNXB4O1xyXG59XHJcblxyXG5kaXZbaWQkPVwiLWNvbnRhaW5lclwiXSB7XHJcblx0Zm9udC1zaXplOiAxNHB4O1xyXG59XHJcblxyXG4vKiBkaXZbaWQkPVwiLWNvbnRhaW5lclwiXSBoMSB7XHJcblx0Y29sb3I6ICMwRDc4OTU7XHJcbiAgICBmb250LXdlaWdodDogbm9ybWFsO1xyXG4gICAgZm9udC1zaXplOiAzMnB4O1xyXG4gICAgbGV0dGVyLXNwYWNpbmc6IDFweDtcclxuICAgIG1hcmdpbjogMHB4O1xyXG4gICAgbWFyZ2luLWJvdHRvbTogMzBweDtcclxufSAqL1xyXG5cclxuLyogLmJ0bi1zdWJtaXQge1xyXG5cdGJhY2tncm91bmQ6IHZhcigtLWNsci1idG4pO1xyXG5cdGNvbG9yOiB2YXIoLS1jbHItd2hpdGUpO1xyXG5cdGJvcmRlcjogMHB4O1xyXG59ICovXHJcblxyXG4vKiAuc3ViVGl0bGUge1xyXG5cdGNvbG9yOiB2YXIoLS1jbHItdGV4dC1za3kpO1xyXG5cdGZvbnQtc2l6ZTogMThweDtcclxuXHRtYXJnaW4tdG9wOiAxMHB4O1xyXG59ICovXHJcblxyXG51bCB7XHJcbiAgbGlzdC1zdHlsZS10eXBlOiBub25lO1xyXG59XHJcblxyXG5cclxuLmRpdi1oZWFkZXIge1xyXG4gICAgaGVpZ2h0OiAxODVweDtcclxuICAgIHBhZGRpbmctdG9wOiA1cHg7XHJcbn1cclxuLmNvbnRlbnQge1xyXG5cdGhlaWdodDogY2FsYygxMDAlIC0gNDQ1cHgpO1xyXG5cdHBhZGRpbmctdG9wOiAxMHB4O1xyXG5cdHBhZGRpbmctYm90dG9tOiAxMHB4O1xyXG59XHJcbi5kaXYtZm9vdGVyIHtcclxuXHRiYWNrZ3JvdW5kLWNvbG9yOiAjMDAwO1xyXG4gICAgaGVpZ2h0OiAyNjBweDtcclxufVxyXG4vKiBFbmQgcHVibGljLXNpZGViYXItYWN0aW9uLmpzcCAqL1xyXG5cdFx0XHJcblx0XHJcbiNsb2dpbi1mYWlsIHtcclxuXHRjb2xvcjogcmVkO1xyXG5cdG1hcmdpbi10b3A6IDEwcHg7XHJcbn1cdFxyXG5cclxuLnJlcXVpcmVkIHtcclxuXHRjb2xvcjojOTkwMDAwO1xyXG59XHJcblxyXG5cclxuLmNoa2JveC1jZW50ZXIgcCB7XHJcbiAgICBwYWRkaW5nLWxlZnQ6IDEuNWVtO1xyXG4gICAgdGV4dC1pbmRlbnQ6LTEuNWVtO1xyXG59XHJcblxyXG4uY2hrYm94LWNlbnRlciBwIGlucHV0IHtcclxuXHRtYXJnaW46IDA7XHJcblx0bWFyZ2luLXJpZ2h0OiA1cHg7XHJcbn1cclxuXHJcbiNkaXYtbWVtYmVyLWluZm8tZGV0YWlsID4gZGl2IHtcclxuXHR3aWR0aDogMzQwcHg7XHJcblx0ZGlzcGxheTogdGFibGU7XHJcbn1cclxuXHJcbiNkaXYtbWVtYmVyLWluZm8tZGV0YWlsID4gZGl2ID4gcCB7XHJcblx0ZGlzcGxheTogdGFibGUtY2VsbDtcclxuXHR2ZXJ0aWNhbC1hbGlnbjogdG9wO1xyXG4gICAgbWFyZ2luOiAwO1xyXG59XHJcblxyXG5cclxuI2Rpdi1tZW1iZXItaW5mby1kZXRhaWwgPiBkaXYgPiBwOm50aC1jaGlsZCgxKSB7XHJcblx0d2lkdGg6IDE2MHB4O1xyXG5cdG1pbi13aWR0aDogMTYwcHg7XHJcbn1cclxuXHJcbkBtZWRpYSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6IDc2OHB4KSB7XHJcbiAgIFx0I2Rpdi1sb2dpbi10b3AsICNkaXYtbG9naW4tYm90dG9tIHtcclxuICAgXHRcdGhlaWdodDogMjBweDtcclxuICAgXHR9XHJcbiAgIFx0XHJcbiAgIFx0LyogcHVibGljLXNpZGViYXItYWN0aW9uLmpzcCAqL1xyXG4gICBcdCNkaXYtc2lkZWJhci1hY3Rpb24ge1xyXG5cdCAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xyXG5cdH1cclxuXHQjZGl2LWhvbWUge1xyXG5cdFx0d2lkdGg6IDEwMCU7XHJcblx0XHQvKiBtYXJnaW46IDBweDsgKi9cclxuXHR9XHJcblx0I2Rpdi1zaWRlYmFyIHtcclxuXHRcdHdpZHRoOiAxMDAlO1xyXG5cdH1cclxuXHQjZGl2LXNpZGViYXIgZGl2IHtcclxuXHRcdHdpZHRoOiAxMDAlO1xyXG5cdFx0bWFyZ2luOiAwcHg7XHJcblx0XHRtYXJnaW4tYm90dG9tOiAwcHg7XHJcblx0fVxyXG5cdC8qIEVuZCBwdWJsaWMtc2lkZWJhci1hY3Rpb24uanNwICovXHJcblx0XHJcblx0LyogcHVibGljLWhlYWRlci5qc3AgKi9cclxuXHQuZGl2LWhlYWRlciAudGl0bGVfX2JvdHRvbV9fc29jaWFsbGlua3Mge1xyXG5cdFx0ZGlzcGxheTogbm9uZTtcclxuXHR9XHJcblx0LnRpdGxlLWxvZ28tYm90dG9tIHtcclxuXHRcdGp1c3RpZnktY29udGVudDogY2VudGVyICFpbXBvcnRhbnQ7XHJcblx0fVxyXG5cdC5kaXYtaGVhZGVyIC5sb2dvLXRleHQtMSB7XHJcblx0XHRkaXNwbGF5OiBub25lO1xyXG5cdH1cclxuXHQuZGl2LWhlYWRlciAubG9nby10ZXh0LTIge1xyXG5cdFx0bGluZS1oZWlnaHQ6IDY0cHg7XHJcblx0XHRkaXNwbGF5OiBibG9jayAhaW1wb3J0YW50O1xyXG5cdH1cclxuXHQvKiBFTkQgcHVibGljLWhlYWRlci5qc3AgKi9cclxuXHRcclxuXHQvKiBwdWJsaWMtZm9vdGVyLmpzcCAqL1xyXG5cdC50aXRsZV9fYm90dG9tX19zb2NpYWxsaW5rcyB7XHJcblx0XHRqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlciAhaW1wb3J0YW50O1xyXG5cdH1cclxuXHQvKiBFTkQgcHVibGljLWZvb3Rlci5qc3AgKi8gXHJcblx0XHJcblx0XHJcblx0LmZsZXhib3gtY29sdW1uLTUtNSA+IGRpdiB7XHJcbiAgIFx0XHR3aWR0aDogMTAwJTtcclxuICAgXHR9XHJcblx0Lm1vZGFsIHtcclxuXHRcdHRvcDogNXB4ICFpbXBvcnRhbnQ7XHJcblx0XHRsZWZ0OiA1cHggIWltcG9ydGFudDtcclxuXHRcdHJpZ2h0OiA1cHggIWltcG9ydGFudDtcclxuXHRcdG1hcmdpbi1sZWZ0OiAwOyBcclxuXHRcdHdpZHRoOiBpbml0aWFsO1xyXG4gIFx0fVxyXG4gIFx0LmJ0bi10YmwtdG9nZ2xlIHtcclxuICAgXHRcdGRpc3BsYXk6IGZsZXg7XHJcbiAgIFx0fVxyXG4gICAgLmJ0bi10YmwtdG9nZ2xlIGJ1dHRvbjpudGgtY2hpbGQoMSkge1xyXG4gICAgXHRmb250LXdlaWdodDogYm9sZDtcclxuICAgIH1cclxuICAgIFxyXG4gICAgI2Rpdi1tZW1iZXItaW5mby1kZXRhaWwgPiBkaXYge1xyXG5cdFx0d2lkdGg6IDEwMCU7XHJcblx0XHRkaXNwbGF5OiB0YWJsZTtcclxuXHR9XHJcblx0XHJcblx0I2Rpdi1tZW1iZXItaW5mby1kZXRhaWwgPiBkaXYgPiBwIHtcclxuXHRcdGRpc3BsYXk6IHRhYmxlLWNlbGw7XHJcblx0XHR2ZXJ0aWNhbC1hbGlnbjogdG9wO1xyXG5cdCAgICBtYXJnaW46IDA7XHJcblx0fVxyXG5cdFxyXG5cdFxyXG5cdCNkaXYtbWVtYmVyLWluZm8tZGV0YWlsID4gZGl2ID4gcDpudGgtY2hpbGQoMSkge1xyXG5cdFx0d2lkdGg6IDUwJTtcclxuXHRcdG1pbi13aWR0aDogNTAlO1xyXG5cdH1cclxuXHJcblx0ICAgIFxyXG59XHJcblxyXG5AbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiAxMDAwcHgpIHtcclxuICAgXHQjZGl2LWJvdHRvbS13cmFwcGVyLWxlZnQsICNkaXYtYm90dG9tLXdyYXBwZXItcmlnaHQge1xyXG4gICBcdFx0ZGlzcGxheTogbm9uZTtcclxuICAgXHR9XHJcbn1cclxuXHRcdFxyXG4ifSwgImhlYWRlcnNTaXplIjogMCwgImJvZHlTaXplIjogMTczNiwgInJlZGlyZWN0VVJMIjogIiIsICJfdHJhbnNmZXJTaXplIjogMTczNn0sICJjYWNoZSI6IHt9LCAidGltaW5ncyI6IHsiZG5zIjogLTEsICJjb25uZWN0IjogLTEsICJzc2wiOiAtMSwgInNlbmQiOiAwLCAid2FpdCI6IDMwOS4wMjUsICJyZWNlaXZlIjogMTAuMjIzfSwgInBhZ2VyZWYiOiAicGFnZUA4YzkzMmY4MzM3ZDlhYmI0YjlhYjk4ODlkZWM1MWI5OSIsICJzZXJ2ZXJJUEFkZHJlc3MiOiAiWzI2MDY6NDcwMDoyMDo6NjgxYTplY2ZdIiwgIl9zZXJ2ZXJQb3J0IjogNDQzLCAiX3NlY3VyaXR5RGV0YWlscyI6IHsicHJvdG9jb2wiOiAiVExTIDEuMyIsICJzdWJqZWN0TmFtZSI6ICJzdXBwbHljaGFpbmNhbmFkYS5jb20iLCAiaXNzdWVyIjogIldFMSIsICJ2YWxpZEZyb20iOiAxNzIzNDcwODQxLCAidmFsaWRUbyI6IDE3MzEyNDY4NDB9fSwgeyJzdGFydGVkRGF0ZVRpbWUiOiAiMjAyNC0wOS0wNVQxMTowNzoyMC4yOTJaIiwgInRpbWUiOiA0MjEuODQyLCAicmVxdWVzdCI6IHsibWV0aG9kIjogIkdFVCIsICJ1cmwiOiAiaHR0cHM6Ly9wb3J0YWwuc3VwcGx5Y2hhaW5jYW5hZGEuY29tL2NvbW1vbi9ib290c3RyYXAvanMvYm9vdHN0cmFwLXNlbGVjdC5taW4uanMiLCAiaHR0cFZlcnNpb24iOiAiSFRUUC8yLjAiLCAiY29va2llcyI6IFt7Im5hbWUiOiAiSlNFU1NJT05JRCIsICJ2YWx1ZSI6ICIyNTdEOURDOTIwNDUyQTREOTMzQjhBM0NEQTlCNkJEMyJ9XSwgImhlYWRlcnMiOiBbeyJuYW1lIjogIjphdXRob3JpdHkiLCAidmFsdWUiOiAicG9ydGFsLnN1cHBseWNoYWluY2FuYWRhLmNvbSJ9LCB7Im5hbWUiOiAiOm1ldGhvZCIsICJ2YWx1ZSI6ICJHRVQifSwgeyJuYW1lIjogIjpwYXRoIiwgInZhbHVlIjogIi9jb21tb24vYm9vdHN0cmFwL2pzL2Jvb3RzdHJhcC1zZWxlY3QubWluLmpzIn0sIHsibmFtZSI6ICI6c2NoZW1lIiwgInZhbHVlIjogImh0dHBzIn0sIHsibmFtZSI6ICJhY2NlcHQiLCAidmFsdWUiOiAiKi8qIn0sIHsibmFtZSI6ICJhY2NlcHQtZW5jb2RpbmciLCAidmFsdWUiOiAiZ3ppcCwgZGVmbGF0ZSwgYnIsIHpzdGQifSwgeyJuYW1lIjogImFjY2VwdC1sYW5ndWFnZSIsICJ2YWx1ZSI6ICJlbi1VUyJ9LCB7Im5hbWUiOiAiY29va2llIiwgInZhbHVlIjogIkpTRVNTSU9OSUQ9MjU3RDlEQzkyMDQ1MkE0RDkzM0I4QTNDREE5QjZCRDMifSwgeyJuYW1lIjogInByaW9yaXR5IiwgInZhbHVlIjogInU9MSJ9LCB7Im5hbWUiOiAicmVmZXJlciIsICJ2YWx1ZSI6ICJodHRwczovL3BvcnRhbC5zdXBwbHljaGFpbmNhbmFkYS5jb20vZW4vcG9ydGFsbG9naW4ifSwgeyJuYW1lIjogInNlYy1jaC11YSIsICJ2YWx1ZSI6ICJcIk5vdDtBPUJyYW5kXCI7dj1cIjI0XCIsIFwiQ2hyb21pdW1cIjt2PVwiMTI4XCIifSwgeyJuYW1lIjogInNlYy1jaC11YS1tb2JpbGUiLCAidmFsdWUiOiAiPzAifSwgeyJuYW1lIjogInNlYy1jaC11YS1wbGF0Zm9ybSIsICJ2YWx1ZSI6ICJcIldpbmRvd3NcIiJ9LCB7Im5hbWUiOiAic2VjLWZldGNoLWRlc3QiLCAidmFsdWUiOiAic2NyaXB0In0sIHsibmFtZSI6ICJzZWMtZmV0Y2gtbW9kZSIsICJ2YWx1ZSI6ICJuby1jb3JzIn0sIHsibmFtZSI6ICJzZWMtZmV0Y2gtc2l0ZSIsICJ2YWx1ZSI6ICJzYW1lLW9yaWdpbiJ9LCB7Im5hbWUiOiAidXNlci1hZ2VudCIsICJ2YWx1ZSI6ICJNb3ppbGxhLzUuMCAoV2luZG93cyBOVCAxMC4wOyBXaW42NDsgeDY0KSBBcHBsZVdlYktpdC81MzcuMzYgKEtIVE1MLCBsaWtlIEdlY2tvKSBDaHJvbWUvMTI4LjAuNjYxMy4xOCBTYWZhcmkvNTM3LjM2In1dLCAicXVlcnlTdHJpbmciOiBbXSwgImhlYWRlcnNTaXplIjogNzA2LCAiYm9keVNpemUiOiAwfSwgInJlc3BvbnNlIjogeyJzdGF0dXMiOiAyMDAsICJzdGF0dXNUZXh0IjogIiIsICJodHRwVmVyc2lvbiI6ICJIVFRQLzIuMCIsICJjb29raWVzIjogW10sICJoZWFkZXJzIjogW3sibmFtZSI6ICJjYWNoZS1jb250cm9sIiwgInZhbHVlIjogIm1heC1hZ2U9MTQ0MDAifSwgeyJuYW1lIjogImNmLWNhY2hlLXN0YXR1cyIsICJ2YWx1ZSI6ICJNSVNTIn0sIHsibmFtZSI6ICJjZi1yYXkiLCAidmFsdWUiOiAiOGJlNWMxNGJlODYzNzFjNC1GUkEifSwgeyJuYW1lIjogImNvbnRlbnQtZW5jb2RpbmciLCAidmFsdWUiOiAiYnIifSwgeyJuYW1lIjogImNvbnRlbnQtdHlwZSIsICJ2YWx1ZSI6ICJhcHBsaWNhdGlvbi9qYXZhc2NyaXB0In0sIHsibmFtZSI6ICJkYXRlIiwgInZhbHVlIjogIlRodSwgMDUgU2VwIDIwMjQgMTE6MDc6MjAgR01UIn0sIHsibmFtZSI6ICJldGFnIiwgInZhbHVlIjogIlcvXCIzMzk0MS0xNjgxMzMzNDIyMDAwXCIifSwgeyJuYW1lIjogImxhc3QtbW9kaWZpZWQiLCAidmFsdWUiOiAiV2VkLCAxMiBBcHIgMjAyMyAyMTowMzo0MiBHTVQifSwgeyJuYW1lIjogIm5lbCIsICJ2YWx1ZSI6ICJ7XCJzdWNjZXNzX2ZyYWN0aW9uXCI6MCxcInJlcG9ydF90b1wiOlwiY2YtbmVsXCIsXCJtYXhfYWdlXCI6NjA0ODAwfSJ9LCB7Im5hbWUiOiAicmVwb3J0LXRvIiwgInZhbHVlIjogIntcImVuZHBvaW50c1wiOlt7XCJ1cmxcIjpcImh0dHBzOlxcL1xcL2EubmVsLmNsb3VkZmxhcmUuY29tXFwvcmVwb3J0XFwvdjQ/cz1GV001T1JYVjhGdEJJUkcweHVKQmZJMiUyRnF2OFhiT0JsbGJ2ZzdNOG00NVJBSFpJejlUNkowbU5HWWlkaU9RNm4wenZnTzc0OHVsbDU5M2lZM0c1SUw3SnZRN2FpOG5SJTJCa0N3alR5elZaRHJlSiUyQlNyJTJGS2MzYTZLUnFoUVppb2JXSCUyRk9iZUppV1d1djhaODUlMkZaRGc3MGdZRXlCcmkxVUIwQ2hFJTNEXCJ9XSxcImdyb3VwXCI6XCJjZi1uZWxcIixcIm1heF9hZ2VcIjo2MDQ4MDB9In0sIHsibmFtZSI6ICJzZXJ2ZXIiLCAidmFsdWUiOiAiY2xvdWRmbGFyZSJ9LCB7Im5hbWUiOiAic3RyaWN0LXRyYW5zcG9ydC1zZWN1cml0eSIsICJ2YWx1ZSI6ICJtYXgtYWdlPTYzMDcyMDAwOyBpbmNsdWRlU3ViZG9tYWluczsgcHJlbG9hZCJ9LCB7Im5hbWUiOiAidmFyeSIsICJ2YWx1ZSI6ICJBY2NlcHQtRW5jb2RpbmcifV0sICJjb250ZW50IjogeyJzaXplIjogMzM5NDEsICJtaW1lVHlwZSI6ICJhcHBsaWNhdGlvbi9qYXZhc2NyaXB0IiwgImNvbXByZXNzaW9uIjogMjMzMTEsICJ0ZXh0IjogIi8qIVxyXG4gKiBCb290c3RyYXAtc2VsZWN0IHYxLjEyLjEgKGh0dHA6Ly9zaWx2aW9tb3JldG8uZ2l0aHViLmlvL2Jvb3RzdHJhcC1zZWxlY3QpXHJcbiAqXHJcbiAqIENvcHlyaWdodCAyMDEzLTIwMTYgYm9vdHN0cmFwLXNlbGVjdFxyXG4gKiBMaWNlbnNlZCB1bmRlciBNSVQgKGh0dHBzOi8vZ2l0aHViLmNvbS9zaWx2aW9tb3JldG8vYm9vdHN0cmFwLXNlbGVjdC9ibG9iL21hc3Rlci9MSUNFTlNFKVxyXG4gKi9cclxuIWZ1bmN0aW9uKGEsYil7XCJmdW5jdGlvblwiPT10eXBlb2YgZGVmaW5lJiZkZWZpbmUuYW1kP2RlZmluZShbXCJqcXVlcnlcIl0sZnVuY3Rpb24oYSl7cmV0dXJuIGIoYSl9KTpcIm9iamVjdFwiPT10eXBlb2YgbW9kdWxlJiZtb2R1bGUuZXhwb3J0cz9tb2R1bGUuZXhwb3J0cz1iKHJlcXVpcmUoXCJqcXVlcnlcIikpOmIoYS5qUXVlcnkpfSh0aGlzLGZ1bmN0aW9uKGEpeyFmdW5jdGlvbihhKXtcInVzZSBzdHJpY3RcIjtmdW5jdGlvbiBiKGIpe3ZhciBjPVt7cmU6L1tcXHhDMC1cXHhDNl0vZyxjaDpcIkFcIn0se3JlOi9bXFx4RTAtXFx4RTZdL2csY2g6XCJhXCJ9LHtyZTovW1xceEM4LVxceENCXS9nLGNoOlwiRVwifSx7cmU6L1tcXHhFOC1cXHhFQl0vZyxjaDpcImVcIn0se3JlOi9bXFx4Q0MtXFx4Q0ZdL2csY2g6XCJJXCJ9LHtyZTovW1xceEVDLVxceEVGXS9nLGNoOlwiaVwifSx7cmU6L1tcXHhEMi1cXHhENl0vZyxjaDpcIk9cIn0se3JlOi9bXFx4RjItXFx4RjZdL2csY2g6XCJvXCJ9LHtyZTovW1xceEQ5LVxceERDXS9nLGNoOlwiVVwifSx7cmU6L1tcXHhGOS1cXHhGQ10vZyxjaDpcInVcIn0se3JlOi9bXFx4QzctXFx4RTddL2csY2g6XCJjXCJ9LHtyZTovW1xceEQxXS9nLGNoOlwiTlwifSx7cmU6L1tcXHhGMV0vZyxjaDpcIm5cIn1dO3JldHVybiBhLmVhY2goYyxmdW5jdGlvbigpe2I9Yj9iLnJlcGxhY2UodGhpcy5yZSx0aGlzLmNoKTpcIlwifSksYn1mdW5jdGlvbiBjKGIpe3ZhciBjPWFyZ3VtZW50cyxkPWI7W10uc2hpZnQuYXBwbHkoYyk7dmFyIGUsZj10aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgYj1hKHRoaXMpO2lmKGIuaXMoXCJzZWxlY3RcIikpe3ZhciBmPWIuZGF0YShcInNlbGVjdHBpY2tlclwiKSxnPVwib2JqZWN0XCI9PXR5cGVvZiBkJiZkO2lmKGYpe2lmKGcpZm9yKHZhciBoIGluIGcpZy5oYXNPd25Qcm9wZXJ0eShoKSYmKGYub3B0aW9uc1toXT1nW2hdKX1lbHNle3ZhciBpPWEuZXh0ZW5kKHt9LGsuREVGQVVMVFMsYS5mbi5zZWxlY3RwaWNrZXIuZGVmYXVsdHN8fHt9LGIuZGF0YSgpLGcpO2kudGVtcGxhdGU9YS5leHRlbmQoe30say5ERUZBVUxUUy50ZW1wbGF0ZSxhLmZuLnNlbGVjdHBpY2tlci5kZWZhdWx0cz9hLmZuLnNlbGVjdHBpY2tlci5kZWZhdWx0cy50ZW1wbGF0ZTp7fSxiLmRhdGEoKS50ZW1wbGF0ZSxnLnRlbXBsYXRlKSxiLmRhdGEoXCJzZWxlY3RwaWNrZXJcIixmPW5ldyBrKHRoaXMsaSkpfVwic3RyaW5nXCI9PXR5cGVvZiBkJiYoZT1mW2RdaW5zdGFuY2VvZiBGdW5jdGlvbj9mW2RdLmFwcGx5KGYsYyk6Zi5vcHRpb25zW2RdKX19KTtyZXR1cm5cInVuZGVmaW5lZFwiIT10eXBlb2YgZT9lOmZ9U3RyaW5nLnByb3RvdHlwZS5pbmNsdWRlc3x8IWZ1bmN0aW9uKCl7dmFyIGE9e30udG9TdHJpbmcsYj1mdW5jdGlvbigpe3RyeXt2YXIgYT17fSxiPU9iamVjdC5kZWZpbmVQcm9wZXJ0eSxjPWIoYSxhLGEpJiZifWNhdGNoKGEpe31yZXR1cm4gY30oKSxjPVwiXCIuaW5kZXhPZixkPWZ1bmN0aW9uKGIpe2lmKG51bGw9PXRoaXMpdGhyb3cgbmV3IFR5cGVFcnJvcjt2YXIgZD1TdHJpbmcodGhpcyk7aWYoYiYmXCJbb2JqZWN0IFJlZ0V4cF1cIj09YS5jYWxsKGIpKXRocm93IG5ldyBUeXBlRXJyb3I7dmFyIGU9ZC5sZW5ndGgsZj1TdHJpbmcoYiksZz1mLmxlbmd0aCxoPWFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dm9pZCAwLGk9aD9OdW1iZXIoaCk6MDtpIT1pJiYoaT0wKTt2YXIgaj1NYXRoLm1pbihNYXRoLm1heChpLDApLGUpO3JldHVybiEoZytqPmUpJiZjLmNhbGwoZCxmLGkpIT0tMX07Yj9iKFN0cmluZy5wcm90b3R5cGUsXCJpbmNsdWRlc1wiLHt2YWx1ZTpkLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOlN0cmluZy5wcm90b3R5cGUuaW5jbHVkZXM9ZH0oKSxTdHJpbmcucHJvdG90eXBlLnN0YXJ0c1dpdGh8fCFmdW5jdGlvbigpe3ZhciBhPWZ1bmN0aW9uKCl7dHJ5e3ZhciBhPXt9LGI9T2JqZWN0LmRlZmluZVByb3BlcnR5LGM9YihhLGEsYSkmJmJ9Y2F0Y2goYSl7fXJldHVybiBjfSgpLGI9e30udG9TdHJpbmcsYz1mdW5jdGlvbihhKXtpZihudWxsPT10aGlzKXRocm93IG5ldyBUeXBlRXJyb3I7dmFyIGM9U3RyaW5nKHRoaXMpO2lmKGEmJlwiW29iamVjdCBSZWdFeHBdXCI9PWIuY2FsbChhKSl0aHJvdyBuZXcgVHlwZUVycm9yO3ZhciBkPWMubGVuZ3RoLGU9U3RyaW5nKGEpLGY9ZS5sZW5ndGgsZz1hcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMCxoPWc/TnVtYmVyKGcpOjA7aCE9aCYmKGg9MCk7dmFyIGk9TWF0aC5taW4oTWF0aC5tYXgoaCwwKSxkKTtpZihmK2k+ZClyZXR1cm4hMTtmb3IodmFyIGo9LTE7KytqPGY7KWlmKGMuY2hhckNvZGVBdChpK2opIT1lLmNoYXJDb2RlQXQoaikpcmV0dXJuITE7cmV0dXJuITB9O2E/YShTdHJpbmcucHJvdG90eXBlLFwic3RhcnRzV2l0aFwiLHt2YWx1ZTpjLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOlN0cmluZy5wcm90b3R5cGUuc3RhcnRzV2l0aD1jfSgpLE9iamVjdC5rZXlzfHwoT2JqZWN0LmtleXM9ZnVuY3Rpb24oYSxiLGMpe2M9W107Zm9yKGIgaW4gYSljLmhhc093blByb3BlcnR5LmNhbGwoYSxiKSYmYy5wdXNoKGIpO3JldHVybiBjfSk7dmFyIGQ9e3VzZURlZmF1bHQ6ITEsX3NldDphLnZhbEhvb2tzLnNlbGVjdC5zZXR9O2EudmFsSG9va3Muc2VsZWN0LnNldD1mdW5jdGlvbihiLGMpe3JldHVybiBjJiYhZC51c2VEZWZhdWx0JiZhKGIpLmRhdGEoXCJzZWxlY3RlZFwiLCEwKSxkLl9zZXQuYXBwbHkodGhpcyxhcmd1bWVudHMpfTt2YXIgZT1udWxsO2EuZm4udHJpZ2dlck5hdGl2ZT1mdW5jdGlvbihhKXt2YXIgYixjPXRoaXNbMF07Yy5kaXNwYXRjaEV2ZW50PyhcImZ1bmN0aW9uXCI9PXR5cGVvZiBFdmVudD9iPW5ldyBFdmVudChhLHtidWJibGVzOiEwfSk6KGI9ZG9jdW1lbnQuY3JlYXRlRXZlbnQoXCJFdmVudFwiKSxiLmluaXRFdmVudChhLCEwLCExKSksYy5kaXNwYXRjaEV2ZW50KGIpKTpjLmZpcmVFdmVudD8oYj1kb2N1bWVudC5jcmVhdGVFdmVudE9iamVjdCgpLGIuZXZlbnRUeXBlPWEsYy5maXJlRXZlbnQoXCJvblwiK2EsYikpOnRoaXMudHJpZ2dlcihhKX0sYS5leHByLnBzZXVkb3MuaWNvbnRhaW5zPWZ1bmN0aW9uKGIsYyxkKXt2YXIgZT1hKGIpLGY9KGUuZGF0YShcInRva2Vuc1wiKXx8ZS50ZXh0KCkpLnRvU3RyaW5nKCkudG9VcHBlckNhc2UoKTtyZXR1cm4gZi5pbmNsdWRlcyhkWzNdLnRvVXBwZXJDYXNlKCkpfSxhLmV4cHIucHNldWRvcy5pYmVnaW5zPWZ1bmN0aW9uKGIsYyxkKXt2YXIgZT1hKGIpLGY9KGUuZGF0YShcInRva2Vuc1wiKXx8ZS50ZXh0KCkpLnRvU3RyaW5nKCkudG9VcHBlckNhc2UoKTtyZXR1cm4gZi5zdGFydHNXaXRoKGRbM10udG9VcHBlckNhc2UoKSl9LGEuZXhwci5wc2V1ZG9zLmFpY29udGFpbnM9ZnVuY3Rpb24oYixjLGQpe3ZhciBlPWEoYiksZj0oZS5kYXRhKFwidG9rZW5zXCIpfHxlLmRhdGEoXCJub3JtYWxpemVkVGV4dFwiKXx8ZS50ZXh0KCkpLnRvU3RyaW5nKCkudG9VcHBlckNhc2UoKTtyZXR1cm4gZi5pbmNsdWRlcyhkWzNdLnRvVXBwZXJDYXNlKCkpfSxhLmV4cHIucHNldWRvcy5haWJlZ2lucz1mdW5jdGlvbihiLGMsZCl7dmFyIGU9YShiKSxmPShlLmRhdGEoXCJ0b2tlbnNcIil8fGUuZGF0YShcIm5vcm1hbGl6ZWRUZXh0XCIpfHxlLnRleHQoKSkudG9TdHJpbmcoKS50b1VwcGVyQ2FzZSgpO3JldHVybiBmLnN0YXJ0c1dpdGgoZFszXS50b1VwcGVyQ2FzZSgpKX07dmFyIGY9e1wiJlwiOlwiJmFtcDtcIixcIjxcIjpcIiZsdDtcIixcIj5cIjpcIiZndDtcIiwnXCInOlwiJnF1b3Q7XCIsXCInXCI6XCImI3gyNztcIixcImBcIjpcIiYjeDYwO1wifSxnPXtcIiZhbXA7XCI6XCImXCIsXCImbHQ7XCI6XCI8XCIsXCImZ3Q7XCI6XCI+XCIsXCImcXVvdDtcIjonXCInLFwiJiN4Mjc7XCI6XCInXCIsXCImI3g2MDtcIjpcImBcIn0saD1mdW5jdGlvbihhKXt2YXIgYj1mdW5jdGlvbihiKXtyZXR1cm4gYVtiXX0sYz1cIig/OlwiK09iamVjdC5rZXlzKGEpLmpvaW4oXCJ8XCIpK1wiKVwiLGQ9UmVnRXhwKGMpLGU9UmVnRXhwKGMsXCJnXCIpO3JldHVybiBmdW5jdGlvbihhKXtyZXR1cm4gYT1udWxsPT1hP1wiXCI6XCJcIithLGQudGVzdChhKT9hLnJlcGxhY2UoZSxiKTphfX0saT1oKGYpLGo9aChnKSxrPWZ1bmN0aW9uKGIsYyl7ZC51c2VEZWZhdWx0fHwoYS52YWxIb29rcy5zZWxlY3Quc2V0PWQuX3NldCxkLnVzZURlZmF1bHQ9ITApLHRoaXMuJGVsZW1lbnQ9YShiKSx0aGlzLiRuZXdFbGVtZW50PW51bGwsdGhpcy4kYnV0dG9uPW51bGwsdGhpcy4kbWVudT1udWxsLHRoaXMuJGxpcz1udWxsLHRoaXMub3B0aW9ucz1jLG51bGw9PT10aGlzLm9wdGlvbnMudGl0bGUmJih0aGlzLm9wdGlvbnMudGl0bGU9dGhpcy4kZWxlbWVudC5hdHRyKFwidGl0bGVcIikpO3ZhciBlPXRoaXMub3B0aW9ucy53aW5kb3dQYWRkaW5nO1wibnVtYmVyXCI9PXR5cGVvZiBlJiYodGhpcy5vcHRpb25zLndpbmRvd1BhZGRpbmc9W2UsZSxlLGVdKSx0aGlzLnZhbD1rLnByb3RvdHlwZS52YWwsdGhpcy5yZW5kZXI9ay5wcm90b3R5cGUucmVuZGVyLHRoaXMucmVmcmVzaD1rLnByb3RvdHlwZS5yZWZyZXNoLHRoaXMuc2V0U3R5bGU9ay5wcm90b3R5cGUuc2V0U3R5bGUsdGhpcy5zZWxlY3RBbGw9ay5wcm90b3R5cGUuc2VsZWN0QWxsLHRoaXMuZGVzZWxlY3RBbGw9ay5wcm90b3R5cGUuZGVzZWxlY3RBbGwsdGhpcy5kZXN0cm95PWsucHJvdG90eXBlLmRlc3Ryb3ksdGhpcy5yZW1vdmU9ay5wcm90b3R5cGUucmVtb3ZlLHRoaXMuc2hvdz1rLnByb3RvdHlwZS5zaG93LHRoaXMuaGlkZT1rLnByb3RvdHlwZS5oaWRlLHRoaXMuaW5pdCgpfTtrLlZFUlNJT049XCIxLjEyLjFcIixrLkRFRkFVTFRTPXtub25lU2VsZWN0ZWRUZXh0OlwiTm90aGluZyBzZWxlY3RlZFwiLG5vbmVSZXN1bHRzVGV4dDpcIk5vIHJlc3VsdHMgbWF0Y2hlZCB7MH1cIixjb3VudFNlbGVjdGVkVGV4dDpmdW5jdGlvbihhLGIpe3JldHVybiAxPT1hP1wiezB9IGl0ZW0gc2VsZWN0ZWRcIjpcInswfSBpdGVtcyBzZWxlY3RlZFwifSxtYXhPcHRpb25zVGV4dDpmdW5jdGlvbihhLGIpe3JldHVyblsxPT1hP1wiTGltaXQgcmVhY2hlZCAoe259IGl0ZW0gbWF4KVwiOlwiTGltaXQgcmVhY2hlZCAoe259IGl0ZW1zIG1heClcIiwxPT1iP1wiR3JvdXAgbGltaXQgcmVhY2hlZCAoe259IGl0ZW0gbWF4KVwiOlwiR3JvdXAgbGltaXQgcmVhY2hlZCAoe259IGl0ZW1zIG1heClcIl19LHNlbGVjdEFsbFRleHQ6XCJTZWxlY3QgQWxsXCIsZGVzZWxlY3RBbGxUZXh0OlwiRGVzZWxlY3QgQWxsXCIsZG9uZUJ1dHRvbjohMSxkb25lQnV0dG9uVGV4dDpcIkNsb3NlXCIsbXVsdGlwbGVTZXBhcmF0b3I6XCIsIFwiLHN0eWxlQmFzZTpcImJ0blwiLHN0eWxlOlwiYnRuLWRlZmF1bHRcIixzaXplOlwiYXV0b1wiLHRpdGxlOm51bGwsc2VsZWN0ZWRUZXh0Rm9ybWF0OlwidmFsdWVzXCIsd2lkdGg6ITEsY29udGFpbmVyOiExLGhpZGVEaXNhYmxlZDohMSxzaG93U3VidGV4dDohMSxzaG93SWNvbjohMCxzaG93Q29udGVudDohMCxkcm9wdXBBdXRvOiEwLGhlYWRlcjohMSxsaXZlU2VhcmNoOiExLGxpdmVTZWFyY2hQbGFjZWhvbGRlcjpudWxsLGxpdmVTZWFyY2hOb3JtYWxpemU6ITEsbGl2ZVNlYXJjaFN0eWxlOlwiY29udGFpbnNcIixhY3Rpb25zQm94OiExLGljb25CYXNlOlwiZ2x5cGhpY29uXCIsdGlja0ljb246XCJnbHlwaGljb24tb2tcIixzaG93VGljazohMSx0ZW1wbGF0ZTp7Y2FyZXQ6JzxzcGFuIGNsYXNzPVwiY2FyZXRcIj48L3NwYW4+J30sbWF4T3B0aW9uczohMSxtb2JpbGU6ITEsc2VsZWN0T25UYWI6ITEsZHJvcGRvd25BbGlnblJpZ2h0OiExLHdpbmRvd1BhZGRpbmc6MH0say5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOmssaW5pdDpmdW5jdGlvbigpe3ZhciBiPXRoaXMsYz10aGlzLiRlbGVtZW50LmF0dHIoXCJpZFwiKTt0aGlzLiRlbGVtZW50LmFkZENsYXNzKFwiYnMtc2VsZWN0LWhpZGRlblwiKSx0aGlzLmxpT2JqPXt9LHRoaXMubXVsdGlwbGU9dGhpcy4kZWxlbWVudC5wcm9wKFwibXVsdGlwbGVcIiksdGhpcy5hdXRvZm9jdXM9dGhpcy4kZWxlbWVudC5wcm9wKFwiYXV0b2ZvY3VzXCIpLHRoaXMuJG5ld0VsZW1lbnQ9dGhpcy5jcmVhdGVWaWV3KCksdGhpcy4kZWxlbWVudC5hZnRlcih0aGlzLiRuZXdFbGVtZW50KS5hcHBlbmRUbyh0aGlzLiRuZXdFbGVtZW50KSx0aGlzLiRidXR0b249dGhpcy4kbmV3RWxlbWVudC5jaGlsZHJlbihcImJ1dHRvblwiKSx0aGlzLiRtZW51PXRoaXMuJG5ld0VsZW1lbnQuY2hpbGRyZW4oXCIuZHJvcGRvd24tbWVudVwiKSx0aGlzLiRtZW51SW5uZXI9dGhpcy4kbWVudS5jaGlsZHJlbihcIi5pbm5lclwiKSx0aGlzLiRzZWFyY2hib3g9dGhpcy4kbWVudS5maW5kKFwiaW5wdXRcIiksdGhpcy4kZWxlbWVudC5yZW1vdmVDbGFzcyhcImJzLXNlbGVjdC1oaWRkZW5cIiksdGhpcy5vcHRpb25zLmRyb3Bkb3duQWxpZ25SaWdodD09PSEwJiZ0aGlzLiRtZW51LmFkZENsYXNzKFwiZHJvcGRvd24tbWVudS1yaWdodFwiKSxcInVuZGVmaW5lZFwiIT10eXBlb2YgYyYmKHRoaXMuJGJ1dHRvbi5hdHRyKFwiZGF0YS1pZFwiLGMpLGEoJ2xhYmVsW2Zvcj1cIicrYysnXCJdJykuY2xpY2soZnVuY3Rpb24oYSl7YS5wcmV2ZW50RGVmYXVsdCgpLGIuJGJ1dHRvbi5mb2N1cygpfSkpLHRoaXMuY2hlY2tEaXNhYmxlZCgpLHRoaXMuY2xpY2tMaXN0ZW5lcigpLHRoaXMub3B0aW9ucy5saXZlU2VhcmNoJiZ0aGlzLmxpdmVTZWFyY2hMaXN0ZW5lcigpLHRoaXMucmVuZGVyKCksdGhpcy5zZXRTdHlsZSgpLHRoaXMuc2V0V2lkdGgoKSx0aGlzLm9wdGlvbnMuY29udGFpbmVyJiZ0aGlzLnNlbGVjdFBvc2l0aW9uKCksdGhpcy4kbWVudS5kYXRhKFwidGhpc1wiLHRoaXMpLHRoaXMuJG5ld0VsZW1lbnQuZGF0YShcInRoaXNcIix0aGlzKSx0aGlzLm9wdGlvbnMubW9iaWxlJiZ0aGlzLm1vYmlsZSgpLHRoaXMuJG5ld0VsZW1lbnQub24oe1wiaGlkZS5icy5kcm9wZG93blwiOmZ1bmN0aW9uKGEpe2IuJG1lbnVJbm5lci5hdHRyKFwiYXJpYS1leHBhbmRlZFwiLCExKSxiLiRlbGVtZW50LnRyaWdnZXIoXCJoaWRlLmJzLnNlbGVjdFwiLGEpfSxcImhpZGRlbi5icy5kcm9wZG93blwiOmZ1bmN0aW9uKGEpe2IuJGVsZW1lbnQudHJpZ2dlcihcImhpZGRlbi5icy5zZWxlY3RcIixhKX0sXCJzaG93LmJzLmRyb3Bkb3duXCI6ZnVuY3Rpb24oYSl7Yi4kbWVudUlubmVyLmF0dHIoXCJhcmlhLWV4cGFuZGVkXCIsITApLGIuJGVsZW1lbnQudHJpZ2dlcihcInNob3cuYnMuc2VsZWN0XCIsYSl9LFwic2hvd24uYnMuZHJvcGRvd25cIjpmdW5jdGlvbihhKXtiLiRlbGVtZW50LnRyaWdnZXIoXCJzaG93bi5icy5zZWxlY3RcIixhKX19KSxiLiRlbGVtZW50WzBdLmhhc0F0dHJpYnV0ZShcInJlcXVpcmVkXCIpJiZ0aGlzLiRlbGVtZW50Lm9uKFwiaW52YWxpZFwiLGZ1bmN0aW9uKCl7Yi4kYnV0dG9uLmFkZENsYXNzKFwiYnMtaW52YWxpZFwiKS5mb2N1cygpLGIuJGVsZW1lbnQub24oe1wiZm9jdXMuYnMuc2VsZWN0XCI6ZnVuY3Rpb24oKXtiLiRidXR0b24uZm9jdXMoKSxiLiRlbGVtZW50Lm9mZihcImZvY3VzLmJzLnNlbGVjdFwiKX0sXCJzaG93bi5icy5zZWxlY3RcIjpmdW5jdGlvbigpe2IuJGVsZW1lbnQudmFsKGIuJGVsZW1lbnQudmFsKCkpLm9mZihcInNob3duLmJzLnNlbGVjdFwiKX0sXCJyZW5kZXJlZC5icy5zZWxlY3RcIjpmdW5jdGlvbigpe3RoaXMudmFsaWRpdHkudmFsaWQmJmIuJGJ1dHRvbi5yZW1vdmVDbGFzcyhcImJzLWludmFsaWRcIiksYi4kZWxlbWVudC5vZmYoXCJyZW5kZXJlZC5icy5zZWxlY3RcIil9fSl9KSxzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7Yi4kZWxlbWVudC50cmlnZ2VyKFwibG9hZGVkLmJzLnNlbGVjdFwiKX0pfSxjcmVhdGVEcm9wZG93bjpmdW5jdGlvbigpe3ZhciBiPXRoaXMubXVsdGlwbGV8fHRoaXMub3B0aW9ucy5zaG93VGljaz9cIiBzaG93LXRpY2tcIjpcIlwiLGM9dGhpcy4kZWxlbWVudC5wYXJlbnQoKS5oYXNDbGFzcyhcImlucHV0LWdyb3VwXCIpP1wiIGlucHV0LWdyb3VwLWJ0blwiOlwiXCIsZD10aGlzLmF1dG9mb2N1cz9cIiBhdXRvZm9jdXNcIjpcIlwiLGU9dGhpcy5vcHRpb25zLmhlYWRlcj8nPGRpdiBjbGFzcz1cInBvcG92ZXItdGl0bGVcIj48YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImNsb3NlXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+JnRpbWVzOzwvYnV0dG9uPicrdGhpcy5vcHRpb25zLmhlYWRlcitcIjwvZGl2PlwiOlwiXCIsZj10aGlzLm9wdGlvbnMubGl2ZVNlYXJjaD8nPGRpdiBjbGFzcz1cImJzLXNlYXJjaGJveFwiPjxpbnB1dCB0eXBlPVwidGV4dFwiIGNsYXNzPVwiZm9ybS1jb250cm9sXCIgYXV0b2NvbXBsZXRlPVwib2ZmXCInKyhudWxsPT09dGhpcy5vcHRpb25zLmxpdmVTZWFyY2hQbGFjZWhvbGRlcj9cIlwiOicgcGxhY2Vob2xkZXI9XCInK2kodGhpcy5vcHRpb25zLmxpdmVTZWFyY2hQbGFjZWhvbGRlcikrJ1wiJykrJyByb2xlPVwidGV4dGJveFwiIGFyaWEtbGFiZWw9XCJTZWFyY2hcIj48L2Rpdj4nOlwiXCIsZz10aGlzLm11bHRpcGxlJiZ0aGlzLm9wdGlvbnMuYWN0aW9uc0JveD8nPGRpdiBjbGFzcz1cImJzLWFjdGlvbnNib3hcIj48ZGl2IGNsYXNzPVwiYnRuLWdyb3VwIGJ0bi1ncm91cC1zbSBidG4tYmxvY2tcIj48YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImFjdGlvbnMtYnRuIGJzLXNlbGVjdC1hbGwgYnRuIGJ0bi1kZWZhdWx0XCI+Jyt0aGlzLm9wdGlvbnMuc2VsZWN0QWxsVGV4dCsnPC9idXR0b24+PGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJhY3Rpb25zLWJ0biBicy1kZXNlbGVjdC1hbGwgYnRuIGJ0bi1kZWZhdWx0XCI+Jyt0aGlzLm9wdGlvbnMuZGVzZWxlY3RBbGxUZXh0K1wiPC9idXR0b24+PC9kaXY+PC9kaXY+XCI6XCJcIixoPXRoaXMubXVsdGlwbGUmJnRoaXMub3B0aW9ucy5kb25lQnV0dG9uPyc8ZGl2IGNsYXNzPVwiYnMtZG9uZWJ1dHRvblwiPjxkaXYgY2xhc3M9XCJidG4tZ3JvdXAgYnRuLWJsb2NrXCI+PGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLXNtIGJ0bi1kZWZhdWx0XCI+Jyt0aGlzLm9wdGlvbnMuZG9uZUJ1dHRvblRleHQrXCI8L2J1dHRvbj48L2Rpdj48L2Rpdj5cIjpcIlwiLGo9JzxkaXYgY2xhc3M9XCJidG4tZ3JvdXAgYm9vdHN0cmFwLXNlbGVjdCcrYitjKydcIj48YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cIicrdGhpcy5vcHRpb25zLnN0eWxlQmFzZSsnIGRyb3Bkb3duLXRvZ2dsZVwiIGRhdGEtdG9nZ2xlPVwiZHJvcGRvd25cIicrZCsnIHJvbGU9XCJidXR0b25cIj48c3BhbiBjbGFzcz1cImZpbHRlci1vcHRpb24gcHVsbC1sZWZ0XCI+PC9zcGFuPiZuYnNwOzxzcGFuIGNsYXNzPVwiYnMtY2FyZXRcIj4nK3RoaXMub3B0aW9ucy50ZW1wbGF0ZS5jYXJldCsnPC9zcGFuPjwvYnV0dG9uPjxkaXYgY2xhc3M9XCJkcm9wZG93bi1tZW51IG9wZW5cIiByb2xlPVwiY29tYm9ib3hcIj4nK2UrZitnKyc8dWwgY2xhc3M9XCJkcm9wZG93bi1tZW51IGlubmVyXCIgcm9sZT1cImxpc3Rib3hcIiBhcmlhLWV4cGFuZGVkPVwiZmFsc2VcIj48L3VsPicraCtcIjwvZGl2PjwvZGl2PlwiO3JldHVybiBhKGopfSxjcmVhdGVWaWV3OmZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5jcmVhdGVEcm9wZG93bigpLGI9dGhpcy5jcmVhdGVMaSgpO3JldHVybiBhLmZpbmQoXCJ1bFwiKVswXS5pbm5lckhUTUw9YixhfSxyZWxvYWRMaTpmdW5jdGlvbigpe3ZhciBhPXRoaXMuY3JlYXRlTGkoKTt0aGlzLiRtZW51SW5uZXJbMF0uaW5uZXJIVE1MPWF9LGNyZWF0ZUxpOmZ1bmN0aW9uKCl7dmFyIGM9dGhpcyxkPVtdLGU9MCxmPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJvcHRpb25cIiksZz0tMSxoPWZ1bmN0aW9uKGEsYixjLGQpe3JldHVyblwiPGxpXCIrKFwidW5kZWZpbmVkXCIhPXR5cGVvZiBjJlwiXCIhPT1jPycgY2xhc3M9XCInK2MrJ1wiJzpcIlwiKSsoXCJ1bmRlZmluZWRcIiE9dHlwZW9mIGImbnVsbCE9PWI/JyBkYXRhLW9yaWdpbmFsLWluZGV4PVwiJytiKydcIic6XCJcIikrKFwidW5kZWZpbmVkXCIhPXR5cGVvZiBkJm51bGwhPT1kPydkYXRhLW9wdGdyb3VwPVwiJytkKydcIic6XCJcIikrXCI+XCIrYStcIjwvbGk+XCJ9LGo9ZnVuY3Rpb24oZCxlLGYsZyl7cmV0dXJuJzxhIHRhYmluZGV4PVwiMFwiJysoXCJ1bmRlZmluZWRcIiE9dHlwZW9mIGU/JyBjbGFzcz1cIicrZSsnXCInOlwiXCIpKyhmPycgc3R5bGU9XCInK2YrJ1wiJzpcIlwiKSsoYy5vcHRpb25zLmxpdmVTZWFyY2hOb3JtYWxpemU/JyBkYXRhLW5vcm1hbGl6ZWQtdGV4dD1cIicrYihpKGEoZCkuaHRtbCgpKSkrJ1wiJzpcIlwiKSsoXCJ1bmRlZmluZWRcIiE9dHlwZW9mIGd8fG51bGwhPT1nPycgZGF0YS10b2tlbnM9XCInK2crJ1wiJzpcIlwiKSsnIHJvbGU9XCJvcHRpb25cIj4nK2QrJzxzcGFuIGNsYXNzPVwiJytjLm9wdGlvbnMuaWNvbkJhc2UrXCIgXCIrYy5vcHRpb25zLnRpY2tJY29uKycgY2hlY2stbWFya1wiPjwvc3Bhbj48L2E+J307aWYodGhpcy5vcHRpb25zLnRpdGxlJiYhdGhpcy5tdWx0aXBsZSYmKGctLSwhdGhpcy4kZWxlbWVudC5maW5kKFwiLmJzLXRpdGxlLW9wdGlvblwiKS5sZW5ndGgpKXt2YXIgaz10aGlzLiRlbGVtZW50WzBdO2YuY2xhc3NOYW1lPVwiYnMtdGl0bGUtb3B0aW9uXCIsZi5pbm5lckhUTUw9dGhpcy5vcHRpb25zLnRpdGxlLGYudmFsdWU9XCJcIixrLmluc2VydEJlZm9yZShmLGsuZmlyc3RDaGlsZCk7dmFyIGw9YShrLm9wdGlvbnNbay5zZWxlY3RlZEluZGV4XSk7dm9pZCAwPT09bC5hdHRyKFwic2VsZWN0ZWRcIikmJnZvaWQgMD09PXRoaXMuJGVsZW1lbnQuZGF0YShcInNlbGVjdGVkXCIpJiYoZi5zZWxlY3RlZD0hMCl9cmV0dXJuIHRoaXMuJGVsZW1lbnQuZmluZChcIm9wdGlvblwiKS5lYWNoKGZ1bmN0aW9uKGIpe3ZhciBmPWEodGhpcyk7aWYoZysrLCFmLmhhc0NsYXNzKFwiYnMtdGl0bGUtb3B0aW9uXCIpKXt2YXIgaz10aGlzLmNsYXNzTmFtZXx8XCJcIixsPXRoaXMuc3R5bGUuY3NzVGV4dCxtPWYuZGF0YShcImNvbnRlbnRcIik/Zi5kYXRhKFwiY29udGVudFwiKTpmLmh0bWwoKSxuPWYuZGF0YShcInRva2Vuc1wiKT9mLmRhdGEoXCJ0b2tlbnNcIik6bnVsbCxvPVwidW5kZWZpbmVkXCIhPXR5cGVvZiBmLmRhdGEoXCJzdWJ0ZXh0XCIpPyc8c21hbGwgY2xhc3M9XCJ0ZXh0LW11dGVkXCI+JytmLmRhdGEoXCJzdWJ0ZXh0XCIpK1wiPC9zbWFsbD5cIjpcIlwiLHA9XCJ1bmRlZmluZWRcIiE9dHlwZW9mIGYuZGF0YShcImljb25cIik/JzxzcGFuIGNsYXNzPVwiJytjLm9wdGlvbnMuaWNvbkJhc2UrXCIgXCIrZi5kYXRhKFwiaWNvblwiKSsnXCI+PC9zcGFuPiAnOlwiXCIscT1mLnBhcmVudCgpLHI9XCJPUFRHUk9VUFwiPT09cVswXS50YWdOYW1lLHM9ciYmcVswXS5kaXNhYmxlZCx0PXRoaXMuZGlzYWJsZWR8fHM7aWYoXCJcIiE9PXAmJnQmJihwPVwiPHNwYW4+XCIrcCtcIjwvc3Bhbj5cIiksYy5vcHRpb25zLmhpZGVEaXNhYmxlZCYmKHQmJiFyfHxzKSlyZXR1cm4gdm9pZCBnLS07aWYoZi5kYXRhKFwiY29udGVudFwiKXx8KG09cCsnPHNwYW4gY2xhc3M9XCJ0ZXh0XCI+JyttK28rXCI8L3NwYW4+XCIpLHImJmYuZGF0YShcImRpdmlkZXJcIikhPT0hMCl7aWYoYy5vcHRpb25zLmhpZGVEaXNhYmxlZCYmdCl7aWYodm9pZCAwPT09cS5kYXRhKFwiYWxsT3B0aW9uc0Rpc2FibGVkXCIpKXt2YXIgdT1xLmNoaWxkcmVuKCk7cS5kYXRhKFwiYWxsT3B0aW9uc0Rpc2FibGVkXCIsdS5maWx0ZXIoXCI6ZGlzYWJsZWRcIikubGVuZ3RoPT09dS5sZW5ndGgpfWlmKHEuZGF0YShcImFsbE9wdGlvbnNEaXNhYmxlZFwiKSlyZXR1cm4gdm9pZCBnLS19dmFyIHY9XCIgXCIrcVswXS5jbGFzc05hbWV8fFwiXCI7aWYoMD09PWYuaW5kZXgoKSl7ZSs9MTt2YXIgdz1xWzBdLmxhYmVsLHg9XCJ1bmRlZmluZWRcIiE9dHlwZW9mIHEuZGF0YShcInN1YnRleHRcIik/JzxzbWFsbCBjbGFzcz1cInRleHQtbXV0ZWRcIj4nK3EuZGF0YShcInN1YnRleHRcIikrXCI8L3NtYWxsPlwiOlwiXCIseT1xLmRhdGEoXCJpY29uXCIpPyc8c3BhbiBjbGFzcz1cIicrYy5vcHRpb25zLmljb25CYXNlK1wiIFwiK3EuZGF0YShcImljb25cIikrJ1wiPjwvc3Bhbj4gJzpcIlwiO3c9eSsnPHNwYW4gY2xhc3M9XCJ0ZXh0XCI+JytpKHcpK3grXCI8L3NwYW4+XCIsMCE9PWImJmQubGVuZ3RoPjAmJihnKyssZC5wdXNoKGgoXCJcIixudWxsLFwiZGl2aWRlclwiLGUrXCJkaXZcIikpKSxnKyssZC5wdXNoKGgodyxudWxsLFwiZHJvcGRvd24taGVhZGVyXCIrdixlKSl9aWYoYy5vcHRpb25zLmhpZGVEaXNhYmxlZCYmdClyZXR1cm4gdm9pZCBnLS07ZC5wdXNoKGgoaihtLFwib3B0IFwiK2srdixsLG4pLGIsXCJcIixlKSl9ZWxzZSBpZihmLmRhdGEoXCJkaXZpZGVyXCIpPT09ITApZC5wdXNoKGgoXCJcIixiLFwiZGl2aWRlclwiKSk7ZWxzZSBpZihmLmRhdGEoXCJoaWRkZW5cIik9PT0hMClkLnB1c2goaChqKG0sayxsLG4pLGIsXCJoaWRkZW4gaXMtaGlkZGVuXCIpKTtlbHNle3ZhciB6PXRoaXMucHJldmlvdXNFbGVtZW50U2libGluZyYmXCJPUFRHUk9VUFwiPT09dGhpcy5wcmV2aW91c0VsZW1lbnRTaWJsaW5nLnRhZ05hbWU7aWYoIXomJmMub3B0aW9ucy5oaWRlRGlzYWJsZWQpZm9yKHZhciBBPWEodGhpcykucHJldkFsbCgpLEI9MDtCPEEubGVuZ3RoO0IrKylpZihcIk9QVEdST1VQXCI9PT1BW0JdLnRhZ05hbWUpe2Zvcih2YXIgQz0wLEQ9MDtEPEI7RCsrKXt2YXIgRT1BW0RdOyhFLmRpc2FibGVkfHxhKEUpLmRhdGEoXCJoaWRkZW5cIik9PT0hMCkmJkMrK31DPT09QiYmKHo9ITApO2JyZWFrfXomJihnKyssZC5wdXNoKGgoXCJcIixudWxsLFwiZGl2aWRlclwiLGUrXCJkaXZcIikpKSxkLnB1c2goaChqKG0sayxsLG4pLGIpKX1jLmxpT2JqW2JdPWd9fSksdGhpcy5tdWx0aXBsZXx8MCE9PXRoaXMuJGVsZW1lbnQuZmluZChcIm9wdGlvbjpzZWxlY3RlZFwiKS5sZW5ndGh8fHRoaXMub3B0aW9ucy50aXRsZXx8dGhpcy4kZWxlbWVudC5maW5kKFwib3B0aW9uXCIpLmVxKDApLnByb3AoXCJzZWxlY3RlZFwiLCEwKS5hdHRyKFwic2VsZWN0ZWRcIixcInNlbGVjdGVkXCIpLGQuam9pbihcIlwiKX0sZmluZExpczpmdW5jdGlvbigpe3JldHVybiBudWxsPT10aGlzLiRsaXMmJih0aGlzLiRsaXM9dGhpcy4kbWVudS5maW5kKFwibGlcIikpLHRoaXMuJGxpc30scmVuZGVyOmZ1bmN0aW9uKGIpe3ZhciBjLGQ9dGhpcztiIT09ITEmJnRoaXMuJGVsZW1lbnQuZmluZChcIm9wdGlvblwiKS5lYWNoKGZ1bmN0aW9uKGEpe3ZhciBiPWQuZmluZExpcygpLmVxKGQubGlPYmpbYV0pO2Quc2V0RGlzYWJsZWQoYSx0aGlzLmRpc2FibGVkfHxcIk9QVEdST1VQXCI9PT10aGlzLnBhcmVudE5vZGUudGFnTmFtZSYmdGhpcy5wYXJlbnROb2RlLmRpc2FibGVkLGIpLGQuc2V0U2VsZWN0ZWQoYSx0aGlzLnNlbGVjdGVkLGIpfSksdGhpcy50b2dnbGVQbGFjZWhvbGRlcigpLHRoaXMudGFiSW5kZXgoKTt2YXIgZT10aGlzLiRlbGVtZW50LmZpbmQoXCJvcHRpb25cIikubWFwKGZ1bmN0aW9uKCl7aWYodGhpcy5zZWxlY3RlZCl7aWYoZC5vcHRpb25zLmhpZGVEaXNhYmxlZCYmKHRoaXMuZGlzYWJsZWR8fFwiT1BUR1JPVVBcIj09PXRoaXMucGFyZW50Tm9kZS50YWdOYW1lJiZ0aGlzLnBhcmVudE5vZGUuZGlzYWJsZWQpKXJldHVybjt2YXIgYixjPWEodGhpcyksZT1jLmRhdGEoXCJpY29uXCIpJiZkLm9wdGlvbnMuc2hvd0ljb24/JzxpIGNsYXNzPVwiJytkLm9wdGlvbnMuaWNvbkJhc2UrXCIgXCIrYy5kYXRhKFwiaWNvblwiKSsnXCI+PC9pPiAnOlwiXCI7cmV0dXJuIGI9ZC5vcHRpb25zLnNob3dTdWJ0ZXh0JiZjLmRhdGEoXCJzdWJ0ZXh0XCIpJiYhZC5tdWx0aXBsZT8nIDxzbWFsbCBjbGFzcz1cInRleHQtbXV0ZWRcIj4nK2MuZGF0YShcInN1YnRleHRcIikrXCI8L3NtYWxsPlwiOlwiXCIsXCJ1bmRlZmluZWRcIiE9dHlwZW9mIGMuYXR0cihcInRpdGxlXCIpP2MuYXR0cihcInRpdGxlXCIpOmMuZGF0YShcImNvbnRlbnRcIikmJmQub3B0aW9ucy5zaG93Q29udGVudD9jLmRhdGEoXCJjb250ZW50XCIpLnRvU3RyaW5nKCk6ZStjLmh0bWwoKStifX0pLnRvQXJyYXkoKSxmPXRoaXMubXVsdGlwbGU/ZS5qb2luKHRoaXMub3B0aW9ucy5tdWx0aXBsZVNlcGFyYXRvcik6ZVswXTtpZih0aGlzLm11bHRpcGxlJiZ0aGlzLm9wdGlvbnMuc2VsZWN0ZWRUZXh0Rm9ybWF0LmluZGV4T2YoXCJjb3VudFwiKT4tMSl7dmFyIGc9dGhpcy5vcHRpb25zLnNlbGVjdGVkVGV4dEZvcm1hdC5zcGxpdChcIj5cIik7aWYoZy5sZW5ndGg+MSYmZS5sZW5ndGg+Z1sxXXx8MT09Zy5sZW5ndGgmJmUubGVuZ3RoPj0yKXtjPXRoaXMub3B0aW9ucy5oaWRlRGlzYWJsZWQ/XCIsIFtkaXNhYmxlZF1cIjpcIlwiO3ZhciBoPXRoaXMuJGVsZW1lbnQuZmluZChcIm9wdGlvblwiKS5ub3QoJ1tkYXRhLWRpdmlkZXI9XCJ0cnVlXCJdLCBbZGF0YS1oaWRkZW49XCJ0cnVlXCJdJytjKS5sZW5ndGgsaT1cImZ1bmN0aW9uXCI9PXR5cGVvZiB0aGlzLm9wdGlvbnMuY291bnRTZWxlY3RlZFRleHQ/dGhpcy5vcHRpb25zLmNvdW50U2VsZWN0ZWRUZXh0KGUubGVuZ3RoLGgpOnRoaXMub3B0aW9ucy5jb3VudFNlbGVjdGVkVGV4dDtmPWkucmVwbGFjZShcInswfVwiLGUubGVuZ3RoLnRvU3RyaW5nKCkpLnJlcGxhY2UoXCJ7MX1cIixoLnRvU3RyaW5nKCkpfX12b2lkIDA9PXRoaXMub3B0aW9ucy50aXRsZSYmKHRoaXMub3B0aW9ucy50aXRsZT10aGlzLiRlbGVtZW50LmF0dHIoXCJ0aXRsZVwiKSksXCJzdGF0aWNcIj09dGhpcy5vcHRpb25zLnNlbGVjdGVkVGV4dEZvcm1hdCYmKGY9dGhpcy5vcHRpb25zLnRpdGxlKSxmfHwoZj1cInVuZGVmaW5lZFwiIT10eXBlb2YgdGhpcy5vcHRpb25zLnRpdGxlP3RoaXMub3B0aW9ucy50aXRsZTp0aGlzLm9wdGlvbnMubm9uZVNlbGVjdGVkVGV4dCksdGhpcy4kYnV0dG9uLmF0dHIoXCJ0aXRsZVwiLGooYS50cmltKGYucmVwbGFjZSgvPFtePl0qPj8vZyxcIlwiKSkpKSx0aGlzLiRidXR0b24uY2hpbGRyZW4oXCIuZmlsdGVyLW9wdGlvblwiKS5odG1sKGYpLHRoaXMuJGVsZW1lbnQudHJpZ2dlcihcInJlbmRlcmVkLmJzLnNlbGVjdFwiKX0sc2V0U3R5bGU6ZnVuY3Rpb24oYSxiKXt0aGlzLiRlbGVtZW50LmF0dHIoXCJjbGFzc1wiKSYmdGhpcy4kbmV3RWxlbWVudC5hZGRDbGFzcyh0aGlzLiRlbGVtZW50LmF0dHIoXCJjbGFzc1wiKS5yZXBsYWNlKC9zZWxlY3RwaWNrZXJ8bW9iaWxlLWRldmljZXxicy1zZWxlY3QtaGlkZGVufHZhbGlkYXRlXFxbLipcXF0vZ2ksXCJcIikpO3ZhciBjPWE/YTp0aGlzLm9wdGlvbnMuc3R5bGU7XCJhZGRcIj09Yj90aGlzLiRidXR0b24uYWRkQ2xhc3MoYyk6XCJyZW1vdmVcIj09Yj90aGlzLiRidXR0b24ucmVtb3ZlQ2xhc3MoYyk6KHRoaXMuJGJ1dHRvbi5yZW1vdmVDbGFzcyh0aGlzLm9wdGlvbnMuc3R5bGUpLHRoaXMuJGJ1dHRvbi5hZGRDbGFzcyhjKSl9LGxpSGVpZ2h0OmZ1bmN0aW9uKGIpe2lmKGJ8fHRoaXMub3B0aW9ucy5zaXplIT09ITEmJiF0aGlzLnNpemVJbmZvKXt2YXIgYz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpLGQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKSxlPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJ1bFwiKSxmPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJsaVwiKSxnPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJsaVwiKSxoPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJhXCIpLGk9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInNwYW5cIiksaj10aGlzLm9wdGlvbnMuaGVhZGVyJiZ0aGlzLiRtZW51LmZpbmQoXCIucG9wb3Zlci10aXRsZVwiKS5sZW5ndGg+MD90aGlzLiRtZW51LmZpbmQoXCIucG9wb3Zlci10aXRsZVwiKVswXS5jbG9uZU5vZGUoITApOm51bGwsaz10aGlzLm9wdGlvbnMubGl2ZVNlYXJjaD9kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpOm51bGwsbD10aGlzLm9wdGlvbnMuYWN0aW9uc0JveCYmdGhpcy5tdWx0aXBsZSYmdGhpcy4kbWVudS5maW5kKFwiLmJzLWFjdGlvbnNib3hcIikubGVuZ3RoPjA/dGhpcy4kbWVudS5maW5kKFwiLmJzLWFjdGlvbnNib3hcIilbMF0uY2xvbmVOb2RlKCEwKTpudWxsLG09dGhpcy5vcHRpb25zLmRvbmVCdXR0b24mJnRoaXMubXVsdGlwbGUmJnRoaXMuJG1lbnUuZmluZChcIi5icy1kb25lYnV0dG9uXCIpLmxlbmd0aD4wP3RoaXMuJG1lbnUuZmluZChcIi5icy1kb25lYnV0dG9uXCIpWzBdLmNsb25lTm9kZSghMCk6bnVsbDtpZihpLmNsYXNzTmFtZT1cInRleHRcIixjLmNsYXNzTmFtZT10aGlzLiRtZW51WzBdLnBhcmVudE5vZGUuY2xhc3NOYW1lK1wiIG9wZW5cIixkLmNsYXNzTmFtZT1cImRyb3Bkb3duLW1lbnUgb3BlblwiLGUuY2xhc3NOYW1lPVwiZHJvcGRvd24tbWVudSBpbm5lclwiLGYuY2xhc3NOYW1lPVwiZGl2aWRlclwiLGkuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoXCJJbm5lciB0ZXh0XCIpKSxoLmFwcGVuZENoaWxkKGkpLGcuYXBwZW5kQ2hpbGQoaCksZS5hcHBlbmRDaGlsZChnKSxlLmFwcGVuZENoaWxkKGYpLGomJmQuYXBwZW5kQ2hpbGQoaiksayl7dmFyIG49ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInNwYW5cIik7ay5jbGFzc05hbWU9XCJicy1zZWFyY2hib3hcIixuLmNsYXNzTmFtZT1cImZvcm0tY29udHJvbFwiLGsuYXBwZW5kQ2hpbGQobiksZC5hcHBlbmRDaGlsZChrKX1sJiZkLmFwcGVuZENoaWxkKGwpLGQuYXBwZW5kQ2hpbGQoZSksbSYmZC5hcHBlbmRDaGlsZChtKSxjLmFwcGVuZENoaWxkKGQpLGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoYyk7dmFyIG89aC5vZmZzZXRIZWlnaHQscD1qP2oub2Zmc2V0SGVpZ2h0OjAscT1rP2sub2Zmc2V0SGVpZ2h0OjAscj1sP2wub2Zmc2V0SGVpZ2h0OjAscz1tP20ub2Zmc2V0SGVpZ2h0OjAsdD1hKGYpLm91dGVySGVpZ2h0KCEwKSx1PVwiZnVuY3Rpb25cIj09dHlwZW9mIGdldENvbXB1dGVkU3R5bGUmJmdldENvbXB1dGVkU3R5bGUoZCksdj11P251bGw6YShkKSx3PXt2ZXJ0OnBhcnNlSW50KHU/dS5wYWRkaW5nVG9wOnYuY3NzKFwicGFkZGluZ1RvcFwiKSkrcGFyc2VJbnQodT91LnBhZGRpbmdCb3R0b206di5jc3MoXCJwYWRkaW5nQm90dG9tXCIpKStwYXJzZUludCh1P3UuYm9yZGVyVG9wV2lkdGg6di5jc3MoXCJib3JkZXJUb3BXaWR0aFwiKSkrcGFyc2VJbnQodT91LmJvcmRlckJvdHRvbVdpZHRoOnYuY3NzKFwiYm9yZGVyQm90dG9tV2lkdGhcIikpLGhvcml6OnBhcnNlSW50KHU/dS5wYWRkaW5nTGVmdDp2LmNzcyhcInBhZGRpbmdMZWZ0XCIpKStwYXJzZUludCh1P3UucGFkZGluZ1JpZ2h0OnYuY3NzKFwicGFkZGluZ1JpZ2h0XCIpKStwYXJzZUludCh1P3UuYm9yZGVyTGVmdFdpZHRoOnYuY3NzKFwiYm9yZGVyTGVmdFdpZHRoXCIpKStwYXJzZUludCh1P3UuYm9yZGVyUmlnaHRXaWR0aDp2LmNzcyhcImJvcmRlclJpZ2h0V2lkdGhcIikpfSx4PXt2ZXJ0OncudmVydCtwYXJzZUludCh1P3UubWFyZ2luVG9wOnYuY3NzKFwibWFyZ2luVG9wXCIpKStwYXJzZUludCh1P3UubWFyZ2luQm90dG9tOnYuY3NzKFwibWFyZ2luQm90dG9tXCIpKSsyLGhvcml6OncuaG9yaXorcGFyc2VJbnQodT91Lm1hcmdpbkxlZnQ6di5jc3MoXCJtYXJnaW5MZWZ0XCIpKStwYXJzZUludCh1P3UubWFyZ2luUmlnaHQ6di5jc3MoXCJtYXJnaW5SaWdodFwiKSkrMn07ZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChjKSx0aGlzLnNpemVJbmZvPXtsaUhlaWdodDpvLGhlYWRlckhlaWdodDpwLHNlYXJjaEhlaWdodDpxLGFjdGlvbnNIZWlnaHQ6cixkb25lQnV0dG9uSGVpZ2h0OnMsZGl2aWRlckhlaWdodDp0LG1lbnVQYWRkaW5nOncsbWVudUV4dHJhczp4fX19LHNldFNpemU6ZnVuY3Rpb24oKXtpZih0aGlzLmZpbmRMaXMoKSx0aGlzLmxpSGVpZ2h0KCksdGhpcy5vcHRpb25zLmhlYWRlciYmdGhpcy4kbWVudS5jc3MoXCJwYWRkaW5nLXRvcFwiLDApLHRoaXMub3B0aW9ucy5zaXplIT09ITEpe3ZhciBiLGMsZCxlLGYsZyxoLGksaj10aGlzLGs9dGhpcy4kbWVudSxsPXRoaXMuJG1lbnVJbm5lcixtPWEod2luZG93KSxuPXRoaXMuJG5ld0VsZW1lbnRbMF0ub2Zmc2V0SGVpZ2h0LG89dGhpcy4kbmV3RWxlbWVudFswXS5vZmZzZXRXaWR0aCxwPXRoaXMuc2l6ZUluZm8ubGlIZWlnaHQscT10aGlzLnNpemVJbmZvLmhlYWRlckhlaWdodCxyPXRoaXMuc2l6ZUluZm8uc2VhcmNoSGVpZ2h0LHM9dGhpcy5zaXplSW5mby5hY3Rpb25zSGVpZ2h0LHQ9dGhpcy5zaXplSW5mby5kb25lQnV0dG9uSGVpZ2h0LHU9dGhpcy5zaXplSW5mby5kaXZpZGVySGVpZ2h0LHY9dGhpcy5zaXplSW5mby5tZW51UGFkZGluZyx3PXRoaXMuc2l6ZUluZm8ubWVudUV4dHJhcyx4PXRoaXMub3B0aW9ucy5oaWRlRGlzYWJsZWQ/XCIuZGlzYWJsZWRcIjpcIlwiLHk9ZnVuY3Rpb24oKXt2YXIgYixjPWouJG5ld0VsZW1lbnQub2Zmc2V0KCksZD1hKGoub3B0aW9ucy5jb250YWluZXIpO2oub3B0aW9ucy5jb250YWluZXImJiFkLmlzKFwiYm9keVwiKT8oYj1kLm9mZnNldCgpLGIudG9wKz1wYXJzZUludChkLmNzcyhcImJvcmRlclRvcFdpZHRoXCIpKSxiLmxlZnQrPXBhcnNlSW50KGQuY3NzKFwiYm9yZGVyTGVmdFdpZHRoXCIpKSk6Yj17dG9wOjAsbGVmdDowfTt2YXIgZT1qLm9wdGlvbnMud2luZG93UGFkZGluZztmPWMudG9wLWIudG9wLW0uc2Nyb2xsVG9wKCksZz1tLmhlaWdodCgpLWYtbi1iLnRvcC1lWzJdLGg9Yy5sZWZ0LWIubGVmdC1tLnNjcm9sbExlZnQoKSxpPW0ud2lkdGgoKS1oLW8tYi5sZWZ0LWVbMV0sZi09ZVswXSxoLT1lWzNdfTtpZih5KCksXCJhdXRvXCI9PT10aGlzLm9wdGlvbnMuc2l6ZSl7dmFyIHo9ZnVuY3Rpb24oKXt2YXIgbSxuPWZ1bmN0aW9uKGIsYyl7cmV0dXJuIGZ1bmN0aW9uKGQpe3JldHVybiBjP2QuY2xhc3NMaXN0P2QuY2xhc3NMaXN0LmNvbnRhaW5zKGIpOmEoZCkuaGFzQ2xhc3MoYik6IShkLmNsYXNzTGlzdD9kLmNsYXNzTGlzdC5jb250YWlucyhiKTphKGQpLmhhc0NsYXNzKGIpKX19LHU9ai4kbWVudUlubmVyWzBdLmdldEVsZW1lbnRzQnlUYWdOYW1lKFwibGlcIikseD1BcnJheS5wcm90b3R5cGUuZmlsdGVyP0FycmF5LnByb3RvdHlwZS5maWx0ZXIuY2FsbCh1LG4oXCJoaWRkZW5cIiwhMSkpOmouJGxpcy5ub3QoXCIuaGlkZGVuXCIpLHo9QXJyYXkucHJvdG90eXBlLmZpbHRlcj9BcnJheS5wcm90b3R5cGUuZmlsdGVyLmNhbGwoeCxuKFwiZHJvcGRvd24taGVhZGVyXCIsITApKTp4LmZpbHRlcihcIi5kcm9wZG93bi1oZWFkZXJcIik7eSgpLGI9Zy13LnZlcnQsYz1pLXcuaG9yaXosai5vcHRpb25zLmNvbnRhaW5lcj8oay5kYXRhKFwiaGVpZ2h0XCIpfHxrLmRhdGEoXCJoZWlnaHRcIixrLmhlaWdodCgpKSxkPWsuZGF0YShcImhlaWdodFwiKSxrLmRhdGEoXCJ3aWR0aFwiKXx8ay5kYXRhKFwid2lkdGhcIixrLndpZHRoKCkpLGU9ay5kYXRhKFwid2lkdGhcIikpOihkPWsuaGVpZ2h0KCksZT1rLndpZHRoKCkpLGoub3B0aW9ucy5kcm9wdXBBdXRvJiZqLiRuZXdFbGVtZW50LnRvZ2dsZUNsYXNzKFwiZHJvcHVwXCIsZj5nJiZiLXcudmVydDxkKSxqLiRuZXdFbGVtZW50Lmhhc0NsYXNzKFwiZHJvcHVwXCIpJiYoYj1mLXcudmVydCksXCJhdXRvXCI9PT1qLm9wdGlvbnMuZHJvcGRvd25BbGlnblJpZ2h0JiZrLnRvZ2dsZUNsYXNzKFwiZHJvcGRvd24tbWVudS1yaWdodFwiLGg+aSYmYy13Lmhvcml6PGUtbyksbT14Lmxlbmd0aCt6Lmxlbmd0aD4zPzMqcCt3LnZlcnQtMjowLGsuY3NzKHtcIm1heC1oZWlnaHRcIjpiK1wicHhcIixvdmVyZmxvdzpcImhpZGRlblwiLFwibWluLWhlaWdodFwiOm0rcStyK3MrdCtcInB4XCJ9KSxsLmNzcyh7XCJtYXgtaGVpZ2h0XCI6Yi1xLXItcy10LXYudmVydCtcInB4XCIsXCJvdmVyZmxvdy15XCI6XCJhdXRvXCIsXCJtaW4taGVpZ2h0XCI6TWF0aC5tYXgobS12LnZlcnQsMCkrXCJweFwifSl9O3ooKSx0aGlzLiRzZWFyY2hib3gub2ZmKFwiaW5wdXQuZ2V0U2l6ZSBwcm9wZXJ0eWNoYW5nZS5nZXRTaXplXCIpLm9uKFwiaW5wdXQuZ2V0U2l6ZSBwcm9wZXJ0eWNoYW5nZS5nZXRTaXplXCIseiksbS5vZmYoXCJyZXNpemUuZ2V0U2l6ZSBzY3JvbGwuZ2V0U2l6ZVwiKS5vbihcInJlc2l6ZS5nZXRTaXplIHNjcm9sbC5nZXRTaXplXCIseil9ZWxzZSBpZih0aGlzLm9wdGlvbnMuc2l6ZSYmXCJhdXRvXCIhPXRoaXMub3B0aW9ucy5zaXplJiZ0aGlzLiRsaXMubm90KHgpLmxlbmd0aD50aGlzLm9wdGlvbnMuc2l6ZSl7dmFyIEE9dGhpcy4kbGlzLm5vdChcIi5kaXZpZGVyXCIpLm5vdCh4KS5jaGlsZHJlbigpLnNsaWNlKDAsdGhpcy5vcHRpb25zLnNpemUpLmxhc3QoKS5wYXJlbnQoKS5pbmRleCgpLEI9dGhpcy4kbGlzLnNsaWNlKDAsQSsxKS5maWx0ZXIoXCIuZGl2aWRlclwiKS5sZW5ndGg7Yj1wKnRoaXMub3B0aW9ucy5zaXplK0IqdSt2LnZlcnQsai5vcHRpb25zLmNvbnRhaW5lcj8oay5kYXRhKFwiaGVpZ2h0XCIpfHxrLmRhdGEoXCJoZWlnaHRcIixrLmhlaWdodCgpKSxkPWsuZGF0YShcImhlaWdodFwiKSk6ZD1rLmhlaWdodCgpLGoub3B0aW9ucy5kcm9wdXBBdXRvJiZ0aGlzLiRuZXdFbGVtZW50LnRvZ2dsZUNsYXNzKFwiZHJvcHVwXCIsZj5nJiZiLXcudmVydDxkKSxrLmNzcyh7XCJtYXgtaGVpZ2h0XCI6YitxK3Ircyt0K1wicHhcIixvdmVyZmxvdzpcImhpZGRlblwiLFwibWluLWhlaWdodFwiOlwiXCJ9KSxsLmNzcyh7XCJtYXgtaGVpZ2h0XCI6Yi12LnZlcnQrXCJweFwiLFwib3ZlcmZsb3cteVwiOlwiYXV0b1wiLFwibWluLWhlaWdodFwiOlwiXCJ9KX19fSxzZXRXaWR0aDpmdW5jdGlvbigpe2lmKFwiYXV0b1wiPT09dGhpcy5vcHRpb25zLndpZHRoKXt0aGlzLiRtZW51LmNzcyhcIm1pbi13aWR0aFwiLFwiMFwiKTt2YXIgYT10aGlzLiRtZW51LnBhcmVudCgpLmNsb25lKCkuYXBwZW5kVG8oXCJib2R5XCIpLGI9dGhpcy5vcHRpb25zLmNvbnRhaW5lcj90aGlzLiRuZXdFbGVtZW50LmNsb25lKCkuYXBwZW5kVG8oXCJib2R5XCIpOmEsYz1hLmNoaWxkcmVuKFwiLmRyb3Bkb3duLW1lbnVcIikub3V0ZXJXaWR0aCgpLGQ9Yi5jc3MoXCJ3aWR0aFwiLFwiYXV0b1wiKS5jaGlsZHJlbihcImJ1dHRvblwiKS5vdXRlcldpZHRoKCk7YS5yZW1vdmUoKSxiLnJlbW92ZSgpLHRoaXMuJG5ld0VsZW1lbnQuY3NzKFwid2lkdGhcIixNYXRoLm1heChjLGQpK1wicHhcIil9ZWxzZVwiZml0XCI9PT10aGlzLm9wdGlvbnMud2lkdGg/KHRoaXMuJG1lbnUuY3NzKFwibWluLXdpZHRoXCIsXCJcIiksdGhpcy4kbmV3RWxlbWVudC5jc3MoXCJ3aWR0aFwiLFwiXCIpLmFkZENsYXNzKFwiZml0LXdpZHRoXCIpKTp0aGlzLm9wdGlvbnMud2lkdGg/KHRoaXMuJG1lbnUuY3NzKFwibWluLXdpZHRoXCIsXCJcIiksdGhpcy4kbmV3RWxlbWVudC5jc3MoXCJ3aWR0aFwiLHRoaXMub3B0aW9ucy53aWR0aCkpOih0aGlzLiRtZW51LmNzcyhcIm1pbi13aWR0aFwiLFwiXCIpLHRoaXMuJG5ld0VsZW1lbnQuY3NzKFwid2lkdGhcIixcIlwiKSk7dGhpcy4kbmV3RWxlbWVudC5oYXNDbGFzcyhcImZpdC13aWR0aFwiKSYmXCJmaXRcIiE9PXRoaXMub3B0aW9ucy53aWR0aCYmdGhpcy4kbmV3RWxlbWVudC5yZW1vdmVDbGFzcyhcImZpdC13aWR0aFwiKX0sc2VsZWN0UG9zaXRpb246ZnVuY3Rpb24oKXt0aGlzLiRic0NvbnRhaW5lcj1hKCc8ZGl2IGNsYXNzPVwiYnMtY29udGFpbmVyXCIgLz4nKTt2YXIgYixjLGQsZT10aGlzLGY9YSh0aGlzLm9wdGlvbnMuY29udGFpbmVyKSxnPWZ1bmN0aW9uKGEpe2UuJGJzQ29udGFpbmVyLmFkZENsYXNzKGEuYXR0cihcImNsYXNzXCIpLnJlcGxhY2UoL2Zvcm0tY29udHJvbHxmaXQtd2lkdGgvZ2ksXCJcIikpLnRvZ2dsZUNsYXNzKFwiZHJvcHVwXCIsYS5oYXNDbGFzcyhcImRyb3B1cFwiKSksYj1hLm9mZnNldCgpLGYuaXMoXCJib2R5XCIpP2M9e3RvcDowLGxlZnQ6MH06KGM9Zi5vZmZzZXQoKSxjLnRvcCs9cGFyc2VJbnQoZi5jc3MoXCJib3JkZXJUb3BXaWR0aFwiKSktZi5zY3JvbGxUb3AoKSxjLmxlZnQrPXBhcnNlSW50KGYuY3NzKFwiYm9yZGVyTGVmdFdpZHRoXCIpKS1mLnNjcm9sbExlZnQoKSksZD1hLmhhc0NsYXNzKFwiZHJvcHVwXCIpPzA6YVswXS5vZmZzZXRIZWlnaHQsZS4kYnNDb250YWluZXIuY3NzKHt0b3A6Yi50b3AtYy50b3ArZCxsZWZ0OmIubGVmdC1jLmxlZnQsd2lkdGg6YVswXS5vZmZzZXRXaWR0aH0pfTt0aGlzLiRidXR0b24ub24oXCJjbGlja1wiLGZ1bmN0aW9uKCl7dmFyIGI9YSh0aGlzKTtlLmlzRGlzYWJsZWQoKXx8KGcoZS4kbmV3RWxlbWVudCksZS4kYnNDb250YWluZXIuYXBwZW5kVG8oZS5vcHRpb25zLmNvbnRhaW5lcikudG9nZ2xlQ2xhc3MoXCJvcGVuXCIsIWIuaGFzQ2xhc3MoXCJvcGVuXCIpKS5hcHBlbmQoZS4kbWVudSkpfSksYSh3aW5kb3cpLm9uKFwicmVzaXplIHNjcm9sbFwiLGZ1bmN0aW9uKCl7ZyhlLiRuZXdFbGVtZW50KX0pLHRoaXMuJGVsZW1lbnQub24oXCJoaWRlLmJzLnNlbGVjdFwiLGZ1bmN0aW9uKCl7ZS4kbWVudS5kYXRhKFwiaGVpZ2h0XCIsZS4kbWVudS5oZWlnaHQoKSksZS4kYnNDb250YWluZXIuZGV0YWNoKCl9KX0sc2V0U2VsZWN0ZWQ6ZnVuY3Rpb24oYSxiLGMpe2N8fCh0aGlzLnRvZ2dsZVBsYWNlaG9sZGVyKCksYz10aGlzLmZpbmRMaXMoKS5lcSh0aGlzLmxpT2JqW2FdKSksYy50b2dnbGVDbGFzcyhcInNlbGVjdGVkXCIsYikuZmluZChcImFcIikuYXR0cihcImFyaWEtc2VsZWN0ZWRcIixiKX0sc2V0RGlzYWJsZWQ6ZnVuY3Rpb24oYSxiLGMpe2N8fChjPXRoaXMuZmluZExpcygpLmVxKHRoaXMubGlPYmpbYV0pKSxiP2MuYWRkQ2xhc3MoXCJkaXNhYmxlZFwiKS5jaGlsZHJlbihcImFcIikuYXR0cihcImhyZWZcIixcIiNcIikuYXR0cihcInRhYmluZGV4XCIsLTEpLmF0dHIoXCJhcmlhLWRpc2FibGVkXCIsITApOmMucmVtb3ZlQ2xhc3MoXCJkaXNhYmxlZFwiKS5jaGlsZHJlbihcImFcIikucmVtb3ZlQXR0cihcImhyZWZcIikuYXR0cihcInRhYmluZGV4XCIsMCkuYXR0cihcImFyaWEtZGlzYWJsZWRcIiwhMSl9LGlzRGlzYWJsZWQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy4kZWxlbWVudFswXS5kaXNhYmxlZH0sY2hlY2tEaXNhYmxlZDpmdW5jdGlvbigpe3ZhciBhPXRoaXM7dGhpcy5pc0Rpc2FibGVkKCk/KHRoaXMuJG5ld0VsZW1lbnQuYWRkQ2xhc3MoXCJkaXNhYmxlZFwiKSx0aGlzLiRidXR0b24uYWRkQ2xhc3MoXCJkaXNhYmxlZFwiKS5hdHRyKFwidGFiaW5kZXhcIiwtMSkuYXR0cihcImFyaWEtZGlzYWJsZWRcIiwhMCkpOih0aGlzLiRidXR0b24uaGFzQ2xhc3MoXCJkaXNhYmxlZFwiKSYmKHRoaXMuJG5ld0VsZW1lbnQucmVtb3ZlQ2xhc3MoXCJkaXNhYmxlZFwiKSx0aGlzLiRidXR0b24ucmVtb3ZlQ2xhc3MoXCJkaXNhYmxlZFwiKS5hdHRyKFwiYXJpYS1kaXNhYmxlZFwiLCExKSksdGhpcy4kYnV0dG9uLmF0dHIoXCJ0YWJpbmRleFwiKSE9LTF8fHRoaXMuJGVsZW1lbnQuZGF0YShcInRhYmluZGV4XCIpfHx0aGlzLiRidXR0b24ucmVtb3ZlQXR0cihcInRhYmluZGV4XCIpKSx0aGlzLiRidXR0b24uY2xpY2soZnVuY3Rpb24oKXtyZXR1cm4hYS5pc0Rpc2FibGVkKCl9KX0sdG9nZ2xlUGxhY2Vob2xkZXI6ZnVuY3Rpb24oKXt2YXIgYT10aGlzLiRlbGVtZW50LnZhbCgpO3RoaXMuJGJ1dHRvbi50b2dnbGVDbGFzcyhcImJzLXBsYWNlaG9sZGVyXCIsbnVsbD09PWF8fFwiXCI9PT1hfHxhLmNvbnN0cnVjdG9yPT09QXJyYXkmJjA9PT1hLmxlbmd0aCl9LHRhYkluZGV4OmZ1bmN0aW9uKCl7dGhpcy4kZWxlbWVudC5kYXRhKFwidGFiaW5kZXhcIikhPT10aGlzLiRlbGVtZW50LmF0dHIoXCJ0YWJpbmRleFwiKSYmdGhpcy4kZWxlbWVudC5hdHRyKFwidGFiaW5kZXhcIikhPT0tOTgmJlwiLTk4XCIhPT10aGlzLiRlbGVtZW50LmF0dHIoXCJ0YWJpbmRleFwiKSYmKHRoaXMuJGVsZW1lbnQuZGF0YShcInRhYmluZGV4XCIsdGhpcy4kZWxlbWVudC5hdHRyKFwidGFiaW5kZXhcIikpLHRoaXMuJGJ1dHRvbi5hdHRyKFwidGFiaW5kZXhcIix0aGlzLiRlbGVtZW50LmRhdGEoXCJ0YWJpbmRleFwiKSkpLHRoaXMuJGVsZW1lbnQuYXR0cihcInRhYmluZGV4XCIsLTk4KX0sY2xpY2tMaXN0ZW5lcjpmdW5jdGlvbigpe3ZhciBiPXRoaXMsYz1hKGRvY3VtZW50KTtjLmRhdGEoXCJzcGFjZVNlbGVjdFwiLCExKSx0aGlzLiRidXR0b24ub24oXCJrZXl1cFwiLGZ1bmN0aW9uKGEpey8oMzIpLy50ZXN0KGEua2V5Q29kZS50b1N0cmluZygxMCkpJiZjLmRhdGEoXCJzcGFjZVNlbGVjdFwiKSYmKGEucHJldmVudERlZmF1bHQoKSxjLmRhdGEoXCJzcGFjZVNlbGVjdFwiLCExKSl9KSx0aGlzLiRidXR0b24ub24oXCJjbGlja1wiLGZ1bmN0aW9uKCl7Yi5zZXRTaXplKCl9KSx0aGlzLiRlbGVtZW50Lm9uKFwic2hvd24uYnMuc2VsZWN0XCIsZnVuY3Rpb24oKXtpZihiLm9wdGlvbnMubGl2ZVNlYXJjaHx8Yi5tdWx0aXBsZSl7aWYoIWIubXVsdGlwbGUpe3ZhciBhPWIubGlPYmpbYi4kZWxlbWVudFswXS5zZWxlY3RlZEluZGV4XTtpZihcIm51bWJlclwiIT10eXBlb2YgYXx8Yi5vcHRpb25zLnNpemU9PT0hMSlyZXR1cm47dmFyIGM9Yi4kbGlzLmVxKGEpWzBdLm9mZnNldFRvcC1iLiRtZW51SW5uZXJbMF0ub2Zmc2V0VG9wO2M9Yy1iLiRtZW51SW5uZXJbMF0ub2Zmc2V0SGVpZ2h0LzIrYi5zaXplSW5mby5saUhlaWdodC8yLGIuJG1lbnVJbm5lclswXS5zY3JvbGxUb3A9Y319ZWxzZSBiLiRtZW51SW5uZXIuZmluZChcIi5zZWxlY3RlZCBhXCIpLmZvY3VzKCl9KSx0aGlzLiRtZW51SW5uZXIub24oXCJjbGlja1wiLFwibGkgYVwiLGZ1bmN0aW9uKGMpe3ZhciBkPWEodGhpcyksZj1kLnBhcmVudCgpLmRhdGEoXCJvcmlnaW5hbEluZGV4XCIpLGc9Yi4kZWxlbWVudC52YWwoKSxoPWIuJGVsZW1lbnQucHJvcChcInNlbGVjdGVkSW5kZXhcIiksaT0hMDtpZihiLm11bHRpcGxlJiYxIT09Yi5vcHRpb25zLm1heE9wdGlvbnMmJmMuc3RvcFByb3BhZ2F0aW9uKCksYy5wcmV2ZW50RGVmYXVsdCgpLCFiLmlzRGlzYWJsZWQoKSYmIWQucGFyZW50KCkuaGFzQ2xhc3MoXCJkaXNhYmxlZFwiKSl7dmFyIGo9Yi4kZWxlbWVudC5maW5kKFwib3B0aW9uXCIpLGs9ai5lcShmKSxsPWsucHJvcChcInNlbGVjdGVkXCIpLG09ay5wYXJlbnQoXCJvcHRncm91cFwiKSxuPWIub3B0aW9ucy5tYXhPcHRpb25zLG89bS5kYXRhKFwibWF4T3B0aW9uc1wiKXx8ITE7aWYoYi5tdWx0aXBsZSl7aWYoay5wcm9wKFwic2VsZWN0ZWRcIiwhbCksYi5zZXRTZWxlY3RlZChmLCFsKSxkLmJsdXIoKSxuIT09ITF8fG8hPT0hMSl7dmFyIHA9bjxqLmZpbHRlcihcIjpzZWxlY3RlZFwiKS5sZW5ndGgscT1vPG0uZmluZChcIm9wdGlvbjpzZWxlY3RlZFwiKS5sZW5ndGg7aWYobiYmcHx8byYmcSlpZihuJiYxPT1uKWoucHJvcChcInNlbGVjdGVkXCIsITEpLGsucHJvcChcInNlbGVjdGVkXCIsITApLGIuJG1lbnVJbm5lci5maW5kKFwiLnNlbGVjdGVkXCIpLnJlbW92ZUNsYXNzKFwic2VsZWN0ZWRcIiksYi5zZXRTZWxlY3RlZChmLCEwKTtlbHNlIGlmKG8mJjE9PW8pe20uZmluZChcIm9wdGlvbjpzZWxlY3RlZFwiKS5wcm9wKFwic2VsZWN0ZWRcIiwhMSksay5wcm9wKFwic2VsZWN0ZWRcIiwhMCk7dmFyIHI9ZC5wYXJlbnQoKS5kYXRhKFwib3B0Z3JvdXBcIik7Yi4kbWVudUlubmVyLmZpbmQoJ1tkYXRhLW9wdGdyb3VwPVwiJytyKydcIl0nKS5yZW1vdmVDbGFzcyhcInNlbGVjdGVkXCIpLGIuc2V0U2VsZWN0ZWQoZiwhMCl9ZWxzZXt2YXIgcz1cInN0cmluZ1wiPT10eXBlb2YgYi5vcHRpb25zLm1heE9wdGlvbnNUZXh0P1tiLm9wdGlvbnMubWF4T3B0aW9uc1RleHQsYi5vcHRpb25zLm1heE9wdGlvbnNUZXh0XTpiLm9wdGlvbnMubWF4T3B0aW9uc1RleHQsdD1cImZ1bmN0aW9uXCI9PXR5cGVvZiBzP3MobixvKTpzLHU9dFswXS5yZXBsYWNlKFwie259XCIsbiksdj10WzFdLnJlcGxhY2UoXCJ7bn1cIixvKSx3PWEoJzxkaXYgY2xhc3M9XCJub3RpZnlcIj48L2Rpdj4nKTt0WzJdJiYodT11LnJlcGxhY2UoXCJ7dmFyfVwiLHRbMl1bbj4xPzA6MV0pLHY9di5yZXBsYWNlKFwie3Zhcn1cIix0WzJdW28+MT8wOjFdKSksay5wcm9wKFwic2VsZWN0ZWRcIiwhMSksYi4kbWVudS5hcHBlbmQodyksbiYmcCYmKHcuYXBwZW5kKGEoXCI8ZGl2PlwiK3UrXCI8L2Rpdj5cIikpLGk9ITEsYi4kZWxlbWVudC50cmlnZ2VyKFwibWF4UmVhY2hlZC5icy5zZWxlY3RcIikpLG8mJnEmJih3LmFwcGVuZChhKFwiPGRpdj5cIit2K1wiPC9kaXY+XCIpKSxpPSExLGIuJGVsZW1lbnQudHJpZ2dlcihcIm1heFJlYWNoZWRHcnAuYnMuc2VsZWN0XCIpKSxzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7Yi5zZXRTZWxlY3RlZChmLCExKX0sMTApLHcuZGVsYXkoNzUwKS5mYWRlT3V0KDMwMCxmdW5jdGlvbigpe2EodGhpcykucmVtb3ZlKCl9KX19fWVsc2Ugai5wcm9wKFwic2VsZWN0ZWRcIiwhMSksay5wcm9wKFwic2VsZWN0ZWRcIiwhMCksYi4kbWVudUlubmVyLmZpbmQoXCIuc2VsZWN0ZWRcIikucmVtb3ZlQ2xhc3MoXCJzZWxlY3RlZFwiKS5maW5kKFwiYVwiKS5hdHRyKFwiYXJpYS1zZWxlY3RlZFwiLCExKSxiLnNldFNlbGVjdGVkKGYsITApOyFiLm11bHRpcGxlfHxiLm11bHRpcGxlJiYxPT09Yi5vcHRpb25zLm1heE9wdGlvbnM/Yi4kYnV0dG9uLmZvY3VzKCk6Yi5vcHRpb25zLmxpdmVTZWFyY2gmJmIuJHNlYXJjaGJveC5mb2N1cygpLGkmJihnIT1iLiRlbGVtZW50LnZhbCgpJiZiLm11bHRpcGxlfHxoIT1iLiRlbGVtZW50LnByb3AoXCJzZWxlY3RlZEluZGV4XCIpJiYhYi5tdWx0aXBsZSkmJihlPVtmLGsucHJvcChcInNlbGVjdGVkXCIpLGxdLGIuJGVsZW1lbnQudHJpZ2dlck5hdGl2ZShcImNoYW5nZVwiKSl9fSksdGhpcy4kbWVudS5vbihcImNsaWNrXCIsXCJsaS5kaXNhYmxlZCBhLCAucG9wb3Zlci10aXRsZSwgLnBvcG92ZXItdGl0bGUgOm5vdCguY2xvc2UpXCIsZnVuY3Rpb24oYyl7Yy5jdXJyZW50VGFyZ2V0PT10aGlzJiYoYy5wcmV2ZW50RGVmYXVsdCgpLGMuc3RvcFByb3BhZ2F0aW9uKCksYi5vcHRpb25zLmxpdmVTZWFyY2gmJiFhKGMudGFyZ2V0KS5oYXNDbGFzcyhcImNsb3NlXCIpP2IuJHNlYXJjaGJveC5mb2N1cygpOmIuJGJ1dHRvbi5mb2N1cygpKX0pLHRoaXMuJG1lbnVJbm5lci5vbihcImNsaWNrXCIsXCIuZGl2aWRlciwgLmRyb3Bkb3duLWhlYWRlclwiLGZ1bmN0aW9uKGEpe2EucHJldmVudERlZmF1bHQoKSxhLnN0b3BQcm9wYWdhdGlvbigpLGIub3B0aW9ucy5saXZlU2VhcmNoP2IuJHNlYXJjaGJveC5mb2N1cygpOmIuJGJ1dHRvbi5mb2N1cygpfSksdGhpcy4kbWVudS5vbihcImNsaWNrXCIsXCIucG9wb3Zlci10aXRsZSAuY2xvc2VcIixmdW5jdGlvbigpe2IuJGJ1dHRvbi5jbGljaygpfSksdGhpcy4kc2VhcmNoYm94Lm9uKFwiY2xpY2tcIixmdW5jdGlvbihhKXthLnN0b3BQcm9wYWdhdGlvbigpfSksdGhpcy4kbWVudS5vbihcImNsaWNrXCIsXCIuYWN0aW9ucy1idG5cIixmdW5jdGlvbihjKXtiLm9wdGlvbnMubGl2ZVNlYXJjaD9iLiRzZWFyY2hib3guZm9jdXMoKTpiLiRidXR0b24uZm9jdXMoKSxjLnByZXZlbnREZWZhdWx0KCksYy5zdG9wUHJvcGFnYXRpb24oKSxhKHRoaXMpLmhhc0NsYXNzKFwiYnMtc2VsZWN0LWFsbFwiKT9iLnNlbGVjdEFsbCgpOmIuZGVzZWxlY3RBbGwoKX0pLHRoaXMuJGVsZW1lbnQuY2hhbmdlKGZ1bmN0aW9uKCl7Yi5yZW5kZXIoITEpLGIuJGVsZW1lbnQudHJpZ2dlcihcImNoYW5nZWQuYnMuc2VsZWN0XCIsZSksZT1udWxsfSl9LGxpdmVTZWFyY2hMaXN0ZW5lcjpmdW5jdGlvbigpe3ZhciBjPXRoaXMsZD1hKCc8bGkgY2xhc3M9XCJuby1yZXN1bHRzXCI+PC9saT4nKTt0aGlzLiRidXR0b24ub24oXCJjbGljay5kcm9wZG93bi5kYXRhLWFwaVwiLGZ1bmN0aW9uKCl7Yy4kbWVudUlubmVyLmZpbmQoXCIuYWN0aXZlXCIpLnJlbW92ZUNsYXNzKFwiYWN0aXZlXCIpLGMuJHNlYXJjaGJveC52YWwoKSYmKGMuJHNlYXJjaGJveC52YWwoXCJcIiksYy4kbGlzLm5vdChcIi5pcy1oaWRkZW5cIikucmVtb3ZlQ2xhc3MoXCJoaWRkZW5cIiksZC5wYXJlbnQoKS5sZW5ndGgmJmQucmVtb3ZlKCkpLGMubXVsdGlwbGV8fGMuJG1lbnVJbm5lci5maW5kKFwiLnNlbGVjdGVkXCIpLmFkZENsYXNzKFwiYWN0aXZlXCIpLHNldFRpbWVvdXQoZnVuY3Rpb24oKXtjLiRzZWFyY2hib3guZm9jdXMoKX0sMTApfSksdGhpcy4kc2VhcmNoYm94Lm9uKFwiY2xpY2suZHJvcGRvd24uZGF0YS1hcGkgZm9jdXMuZHJvcGRvd24uZGF0YS1hcGkgdG91Y2hlbmQuZHJvcGRvd24uZGF0YS1hcGlcIixmdW5jdGlvbihhKXthLnN0b3BQcm9wYWdhdGlvbigpfSksdGhpcy4kc2VhcmNoYm94Lm9uKFwiaW5wdXQgcHJvcGVydHljaGFuZ2VcIixmdW5jdGlvbigpe2lmKGMuJGxpcy5ub3QoXCIuaXMtaGlkZGVuXCIpLnJlbW92ZUNsYXNzKFwiaGlkZGVuXCIpLGMuJGxpcy5maWx0ZXIoXCIuYWN0aXZlXCIpLnJlbW92ZUNsYXNzKFwiYWN0aXZlXCIpLGQucmVtb3ZlKCksYy4kc2VhcmNoYm94LnZhbCgpKXt2YXIgZSxmPWMuJGxpcy5ub3QoXCIuaXMtaGlkZGVuLCAuZGl2aWRlciwgLmRyb3Bkb3duLWhlYWRlclwiKTtpZihlPWMub3B0aW9ucy5saXZlU2VhcmNoTm9ybWFsaXplP2Yubm90KFwiOmFcIitjLl9zZWFyY2hTdHlsZSgpKycoXCInK2IoYy4kc2VhcmNoYm94LnZhbCgpKSsnXCIpJyk6Zi5ub3QoXCI6XCIrYy5fc2VhcmNoU3R5bGUoKSsnKFwiJytjLiRzZWFyY2hib3gudmFsKCkrJ1wiKScpLGUubGVuZ3RoPT09Zi5sZW5ndGgpZC5odG1sKGMub3B0aW9ucy5ub25lUmVzdWx0c1RleHQucmVwbGFjZShcInswfVwiLCdcIicraShjLiRzZWFyY2hib3gudmFsKCkpKydcIicpKSxjLiRtZW51SW5uZXIuYXBwZW5kKGQpLGMuJGxpcy5hZGRDbGFzcyhcImhpZGRlblwiKTtlbHNle2UuYWRkQ2xhc3MoXCJoaWRkZW5cIik7dmFyIGcsaD1jLiRsaXMubm90KFwiLmhpZGRlblwiKTtoLmVhY2goZnVuY3Rpb24oYil7dmFyIGM9YSh0aGlzKTtjLmhhc0NsYXNzKFwiZGl2aWRlclwiKT92b2lkIDA9PT1nP2MuYWRkQ2xhc3MoXCJoaWRkZW5cIik6KGcmJmcuYWRkQ2xhc3MoXCJoaWRkZW5cIiksZz1jKTpjLmhhc0NsYXNzKFwiZHJvcGRvd24taGVhZGVyXCIpJiZoLmVxKGIrMSkuZGF0YShcIm9wdGdyb3VwXCIpIT09Yy5kYXRhKFwib3B0Z3JvdXBcIik/Yy5hZGRDbGFzcyhcImhpZGRlblwiKTpnPW51bGx9KSxnJiZnLmFkZENsYXNzKFwiaGlkZGVuXCIpLGYubm90KFwiLmhpZGRlblwiKS5maXJzdCgpLmFkZENsYXNzKFwiYWN0aXZlXCIpfX19KX0sX3NlYXJjaFN0eWxlOmZ1bmN0aW9uKCl7dmFyIGE9e2JlZ2luczpcImliZWdpbnNcIixzdGFydHNXaXRoOlwiaWJlZ2luc1wifTtyZXR1cm4gYVt0aGlzLm9wdGlvbnMubGl2ZVNlYXJjaFN0eWxlXXx8XCJpY29udGFpbnNcIn0sdmFsOmZ1bmN0aW9uKGEpe3JldHVyblwidW5kZWZpbmVkXCIhPXR5cGVvZiBhPyh0aGlzLiRlbGVtZW50LnZhbChhKSx0aGlzLnJlbmRlcigpLHRoaXMuJGVsZW1lbnQpOnRoaXMuJGVsZW1lbnQudmFsKCl9LGNoYW5nZUFsbDpmdW5jdGlvbihiKXtpZih0aGlzLm11bHRpcGxlKXtcInVuZGVmaW5lZFwiPT10eXBlb2YgYiYmKGI9ITApLHRoaXMuZmluZExpcygpO3ZhciBjPXRoaXMuJGVsZW1lbnQuZmluZChcIm9wdGlvblwiKSxkPXRoaXMuJGxpcy5ub3QoXCIuZGl2aWRlciwgLmRyb3Bkb3duLWhlYWRlciwgLmRpc2FibGVkLCAuaGlkZGVuXCIpLGU9ZC5sZW5ndGgsZj1bXTtpZihiKXtpZihkLmZpbHRlcihcIi5zZWxlY3RlZFwiKS5sZW5ndGg9PT1kLmxlbmd0aClyZXR1cm59ZWxzZSBpZigwPT09ZC5maWx0ZXIoXCIuc2VsZWN0ZWRcIikubGVuZ3RoKXJldHVybjtkLnRvZ2dsZUNsYXNzKFwic2VsZWN0ZWRcIixiKTtmb3IodmFyIGc9MDtnPGU7ZysrKXt2YXIgaD1kW2ddLmdldEF0dHJpYnV0ZShcImRhdGEtb3JpZ2luYWwtaW5kZXhcIik7ZltmLmxlbmd0aF09Yy5lcShoKVswXX1hKGYpLnByb3AoXCJzZWxlY3RlZFwiLGIpLHRoaXMucmVuZGVyKCExKSx0aGlzLnRvZ2dsZVBsYWNlaG9sZGVyKCksdGhpcy4kZWxlbWVudC50cmlnZ2VyTmF0aXZlKFwiY2hhbmdlXCIpfX0sc2VsZWN0QWxsOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2hhbmdlQWxsKCEwKX0sZGVzZWxlY3RBbGw6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jaGFuZ2VBbGwoITEpfSx0b2dnbGU6ZnVuY3Rpb24oYSl7YT1hfHx3aW5kb3cuZXZlbnQsYSYmYS5zdG9wUHJvcGFnYXRpb24oKSx0aGlzLiRidXR0b24udHJpZ2dlcihcImNsaWNrXCIpfSxrZXlkb3duOmZ1bmN0aW9uKGMpe3ZhciBkLGUsZixnLGgsaSxqLGssbCxtPWEodGhpcyksbj1tLmlzKFwiaW5wdXRcIik/bS5wYXJlbnQoKS5wYXJlbnQoKTptLnBhcmVudCgpLG89bi5kYXRhKFwidGhpc1wiKSxwPVwiOm5vdCguZGlzYWJsZWQsIC5oaWRkZW4sIC5kcm9wZG93bi1oZWFkZXIsIC5kaXZpZGVyKVwiLHE9ezMyOlwiIFwiLDQ4OlwiMFwiLDQ5OlwiMVwiLDUwOlwiMlwiLDUxOlwiM1wiLDUyOlwiNFwiLDUzOlwiNVwiLDU0OlwiNlwiLDU1OlwiN1wiLDU2OlwiOFwiLDU3OlwiOVwiLDU5OlwiO1wiLDY1OlwiYVwiLDY2OlwiYlwiLDY3OlwiY1wiLDY4OlwiZFwiLDY5OlwiZVwiLDcwOlwiZlwiLDcxOlwiZ1wiLDcyOlwiaFwiLDczOlwiaVwiLDc0OlwialwiLDc1Olwia1wiLDc2OlwibFwiLDc3OlwibVwiLDc4OlwiblwiLDc5Olwib1wiLDgwOlwicFwiLDgxOlwicVwiLDgyOlwiclwiLDgzOlwic1wiLDg0OlwidFwiLDg1OlwidVwiLDg2OlwidlwiLDg3Olwid1wiLDg4OlwieFwiLDg5OlwieVwiLDkwOlwielwiLDk2OlwiMFwiLDk3OlwiMVwiLDk4OlwiMlwiLDk5OlwiM1wiLDEwMDpcIjRcIiwxMDE6XCI1XCIsMTAyOlwiNlwiLDEwMzpcIjdcIiwxMDQ6XCI4XCIsMTA1OlwiOVwifTtpZihvLm9wdGlvbnMubGl2ZVNlYXJjaCYmKG49bS5wYXJlbnQoKS5wYXJlbnQoKSksby5vcHRpb25zLmNvbnRhaW5lciYmKG49by4kbWVudSksZD1hKCdbcm9sZT1cImxpc3Rib3hcIl0gbGknLG4pLGw9by4kbmV3RWxlbWVudC5oYXNDbGFzcyhcIm9wZW5cIiksIWwmJihjLmtleUNvZGU+PTQ4JiZjLmtleUNvZGU8PTU3fHxjLmtleUNvZGU+PTk2JiZjLmtleUNvZGU8PTEwNXx8Yy5rZXlDb2RlPj02NSYmYy5rZXlDb2RlPD05MCkpcmV0dXJuIG8ub3B0aW9ucy5jb250YWluZXI/by4kYnV0dG9uLnRyaWdnZXIoXCJjbGlja1wiKTooby5zZXRTaXplKCksby4kbWVudS5wYXJlbnQoKS5hZGRDbGFzcyhcIm9wZW5cIiksbD0hMCksdm9pZCBvLiRzZWFyY2hib3guZm9jdXMoKTtpZihvLm9wdGlvbnMubGl2ZVNlYXJjaCYmKC8oXjkkfDI3KS8udGVzdChjLmtleUNvZGUudG9TdHJpbmcoMTApKSYmbCYmKGMucHJldmVudERlZmF1bHQoKSxjLnN0b3BQcm9wYWdhdGlvbigpLG8uJG1lbnVJbm5lci5jbGljaygpLG8uJGJ1dHRvbi5mb2N1cygpKSxkPWEoJ1tyb2xlPVwibGlzdGJveFwiXSBsaScrcCxuKSxtLnZhbCgpfHwvKDM4fDQwKS8udGVzdChjLmtleUNvZGUudG9TdHJpbmcoMTApKXx8MD09PWQuZmlsdGVyKFwiLmFjdGl2ZVwiKS5sZW5ndGgmJihkPW8uJG1lbnVJbm5lci5maW5kKFwibGlcIiksZD1vLm9wdGlvbnMubGl2ZVNlYXJjaE5vcm1hbGl6ZT9kLmZpbHRlcihcIjphXCIrby5fc2VhcmNoU3R5bGUoKStcIihcIitiKHFbYy5rZXlDb2RlXSkrXCIpXCIpOmQuZmlsdGVyKFwiOlwiK28uX3NlYXJjaFN0eWxlKCkrXCIoXCIrcVtjLmtleUNvZGVdK1wiKVwiKSkpLGQubGVuZ3RoKXtpZigvKDM4fDQwKS8udGVzdChjLmtleUNvZGUudG9TdHJpbmcoMTApKSllPWQuaW5kZXgoZC5maW5kKFwiYVwiKS5maWx0ZXIoXCI6Zm9jdXNcIikucGFyZW50KCkpLGc9ZC5maWx0ZXIocCkuZmlyc3QoKS5pbmRleCgpLGg9ZC5maWx0ZXIocCkubGFzdCgpLmluZGV4KCksZj1kLmVxKGUpLm5leHRBbGwocCkuZXEoMCkuaW5kZXgoKSxpPWQuZXEoZSkucHJldkFsbChwKS5lcSgwKS5pbmRleCgpLGo9ZC5lcShmKS5wcmV2QWxsKHApLmVxKDApLmluZGV4KCksby5vcHRpb25zLmxpdmVTZWFyY2gmJihkLmVhY2goZnVuY3Rpb24oYil7YSh0aGlzKS5oYXNDbGFzcyhcImRpc2FibGVkXCIpfHxhKHRoaXMpLmRhdGEoXCJpbmRleFwiLGIpfSksZT1kLmluZGV4KGQuZmlsdGVyKFwiLmFjdGl2ZVwiKSksZz1kLmZpcnN0KCkuZGF0YShcImluZGV4XCIpLGg9ZC5sYXN0KCkuZGF0YShcImluZGV4XCIpLGY9ZC5lcShlKS5uZXh0QWxsKCkuZXEoMCkuZGF0YShcImluZGV4XCIpLGk9ZC5lcShlKS5wcmV2QWxsKCkuZXEoMCkuZGF0YShcImluZGV4XCIpLGo9ZC5lcShmKS5wcmV2QWxsKCkuZXEoMCkuZGF0YShcImluZGV4XCIpKSxrPW0uZGF0YShcInByZXZJbmRleFwiKSwzOD09Yy5rZXlDb2RlPyhvLm9wdGlvbnMubGl2ZVNlYXJjaCYmZS0tLGUhPWomJmU+aSYmKGU9aSksZTxnJiYoZT1nKSxlPT1rJiYoZT1oKSk6NDA9PWMua2V5Q29kZSYmKG8ub3B0aW9ucy5saXZlU2VhcmNoJiZlKyssZT09LTEmJihlPTApLGUhPWomJmU8ZiYmKGU9ZiksZT5oJiYoZT1oKSxlPT1rJiYoZT1nKSksbS5kYXRhKFwicHJldkluZGV4XCIsZSksby5vcHRpb25zLmxpdmVTZWFyY2g/KGMucHJldmVudERlZmF1bHQoKSxtLmhhc0NsYXNzKFwiZHJvcGRvd24tdG9nZ2xlXCIpfHwoZC5yZW1vdmVDbGFzcyhcImFjdGl2ZVwiKS5lcShlKS5hZGRDbGFzcyhcImFjdGl2ZVwiKS5jaGlsZHJlbihcImFcIikuZm9jdXMoKSxtLmZvY3VzKCkpKTpkLmVxKGUpLmNoaWxkcmVuKFwiYVwiKS5mb2N1cygpO2Vsc2UgaWYoIW0uaXMoXCJpbnB1dFwiKSl7dmFyIHIscyx0PVtdO2QuZWFjaChmdW5jdGlvbigpe2EodGhpcykuaGFzQ2xhc3MoXCJkaXNhYmxlZFwiKXx8YS50cmltKGEodGhpcykuY2hpbGRyZW4oXCJhXCIpLnRleHQoKS50b0xvd2VyQ2FzZSgpKS5zdWJzdHJpbmcoMCwxKT09cVtjLmtleUNvZGVdJiZ0LnB1c2goYSh0aGlzKS5pbmRleCgpKX0pLHI9YShkb2N1bWVudCkuZGF0YShcImtleWNvdW50XCIpLHIrKyxhKGRvY3VtZW50KS5kYXRhKFwia2V5Y291bnRcIixyKSxzPWEudHJpbShhKFwiOmZvY3VzXCIpLnRleHQoKS50b0xvd2VyQ2FzZSgpKS5zdWJzdHJpbmcoMCwxKSxzIT1xW2Mua2V5Q29kZV0/KHI9MSxhKGRvY3VtZW50KS5kYXRhKFwia2V5Y291bnRcIixyKSk6cj49dC5sZW5ndGgmJihhKGRvY3VtZW50KS5kYXRhKFwia2V5Y291bnRcIiwwKSxyPnQubGVuZ3RoJiYocj0xKSksZC5lcSh0W3ItMV0pLmNoaWxkcmVuKFwiYVwiKS5mb2N1cygpfWlmKCgvKDEzfDMyKS8udGVzdChjLmtleUNvZGUudG9TdHJpbmcoMTApKXx8LyheOSQpLy50ZXN0KGMua2V5Q29kZS50b1N0cmluZygxMCkpJiZvLm9wdGlvbnMuc2VsZWN0T25UYWIpJiZsKXtpZigvKDMyKS8udGVzdChjLmtleUNvZGUudG9TdHJpbmcoMTApKXx8Yy5wcmV2ZW50RGVmYXVsdCgpLG8ub3B0aW9ucy5saXZlU2VhcmNoKS8oMzIpLy50ZXN0KGMua2V5Q29kZS50b1N0cmluZygxMCkpfHwoby4kbWVudUlubmVyLmZpbmQoXCIuYWN0aXZlIGFcIikuY2xpY2soKSxtLmZvY3VzKCkpO2Vsc2V7XHJcbnZhciB1PWEoXCI6Zm9jdXNcIik7dS5jbGljaygpLHUuZm9jdXMoKSxjLnByZXZlbnREZWZhdWx0KCksYShkb2N1bWVudCkuZGF0YShcInNwYWNlU2VsZWN0XCIsITApfWEoZG9jdW1lbnQpLmRhdGEoXCJrZXljb3VudFwiLDApfSgvKF45JHwyNykvLnRlc3QoYy5rZXlDb2RlLnRvU3RyaW5nKDEwKSkmJmwmJihvLm11bHRpcGxlfHxvLm9wdGlvbnMubGl2ZVNlYXJjaCl8fC8oMjcpLy50ZXN0KGMua2V5Q29kZS50b1N0cmluZygxMCkpJiYhbCkmJihvLiRtZW51LnBhcmVudCgpLnJlbW92ZUNsYXNzKFwib3BlblwiKSxvLm9wdGlvbnMuY29udGFpbmVyJiZvLiRuZXdFbGVtZW50LnJlbW92ZUNsYXNzKFwib3BlblwiKSxvLiRidXR0b24uZm9jdXMoKSl9fSxtb2JpbGU6ZnVuY3Rpb24oKXt0aGlzLiRlbGVtZW50LmFkZENsYXNzKFwibW9iaWxlLWRldmljZVwiKX0scmVmcmVzaDpmdW5jdGlvbigpe3RoaXMuJGxpcz1udWxsLHRoaXMubGlPYmo9e30sdGhpcy5yZWxvYWRMaSgpLHRoaXMucmVuZGVyKCksdGhpcy5jaGVja0Rpc2FibGVkKCksdGhpcy5saUhlaWdodCghMCksdGhpcy5zZXRTdHlsZSgpLHRoaXMuc2V0V2lkdGgoKSx0aGlzLiRsaXMmJnRoaXMuJHNlYXJjaGJveC50cmlnZ2VyKFwicHJvcGVydHljaGFuZ2VcIiksdGhpcy4kZWxlbWVudC50cmlnZ2VyKFwicmVmcmVzaGVkLmJzLnNlbGVjdFwiKX0saGlkZTpmdW5jdGlvbigpe3RoaXMuJG5ld0VsZW1lbnQuaGlkZSgpfSxzaG93OmZ1bmN0aW9uKCl7dGhpcy4kbmV3RWxlbWVudC5zaG93KCl9LHJlbW92ZTpmdW5jdGlvbigpe3RoaXMuJG5ld0VsZW1lbnQucmVtb3ZlKCksdGhpcy4kZWxlbWVudC5yZW1vdmUoKX0sZGVzdHJveTpmdW5jdGlvbigpe3RoaXMuJG5ld0VsZW1lbnQuYmVmb3JlKHRoaXMuJGVsZW1lbnQpLnJlbW92ZSgpLHRoaXMuJGJzQ29udGFpbmVyP3RoaXMuJGJzQ29udGFpbmVyLnJlbW92ZSgpOnRoaXMuJG1lbnUucmVtb3ZlKCksdGhpcy4kZWxlbWVudC5vZmYoXCIuYnMuc2VsZWN0XCIpLnJlbW92ZURhdGEoXCJzZWxlY3RwaWNrZXJcIikucmVtb3ZlQ2xhc3MoXCJicy1zZWxlY3QtaGlkZGVuIHNlbGVjdHBpY2tlclwiKX19O3ZhciBsPWEuZm4uc2VsZWN0cGlja2VyO2EuZm4uc2VsZWN0cGlja2VyPWMsYS5mbi5zZWxlY3RwaWNrZXIuQ29uc3RydWN0b3I9ayxhLmZuLnNlbGVjdHBpY2tlci5ub0NvbmZsaWN0PWZ1bmN0aW9uKCl7cmV0dXJuIGEuZm4uc2VsZWN0cGlja2VyPWwsdGhpc30sYShkb2N1bWVudCkuZGF0YShcImtleWNvdW50XCIsMCkub24oXCJrZXlkb3duLmJzLnNlbGVjdFwiLCcuYm9vdHN0cmFwLXNlbGVjdCBbZGF0YS10b2dnbGU9ZHJvcGRvd25dLCAuYm9vdHN0cmFwLXNlbGVjdCBbcm9sZT1cImxpc3Rib3hcIl0sIC5icy1zZWFyY2hib3ggaW5wdXQnLGsucHJvdG90eXBlLmtleWRvd24pLm9uKFwiZm9jdXNpbi5tb2RhbFwiLCcuYm9vdHN0cmFwLXNlbGVjdCBbZGF0YS10b2dnbGU9ZHJvcGRvd25dLCAuYm9vdHN0cmFwLXNlbGVjdCBbcm9sZT1cImxpc3Rib3hcIl0sIC5icy1zZWFyY2hib3ggaW5wdXQnLGZ1bmN0aW9uKGEpe2Euc3RvcFByb3BhZ2F0aW9uKCl9KSxhKHdpbmRvdykub24oXCJsb2FkLmJzLnNlbGVjdC5kYXRhLWFwaVwiLGZ1bmN0aW9uKCl7YShcIi5zZWxlY3RwaWNrZXJcIikuZWFjaChmdW5jdGlvbigpe3ZhciBiPWEodGhpcyk7Yy5jYWxsKGIsYi5kYXRhKCkpfSl9KX0oYSl9KTtcclxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Ym9vdHN0cmFwLXNlbGVjdC5qcy5tYXAifSwgImhlYWRlcnNTaXplIjogMCwgImJvZHlTaXplIjogMTA2MzAsICJyZWRpcmVjdFVSTCI6ICIiLCAiX3RyYW5zZmVyU2l6ZSI6IDEwNjMwfSwgImNhY2hlIjoge30sICJ0aW1pbmdzIjogeyJkbnMiOiAtMSwgImNvbm5lY3QiOiAtMSwgInNzbCI6IC0xLCAic2VuZCI6IDAsICJ3YWl0IjogNDEwLjk3MywgInJlY2VpdmUiOiAxMC44Njl9LCAicGFnZXJlZiI6ICJwYWdlQDhjOTMyZjgzMzdkOWFiYjRiOWFiOTg4OWRlYzUxYjk5IiwgInNlcnZlcklQQWRkcmVzcyI6ICJbMjYwNjo0NzAwOjIwOjo2ODFhOmVjZl0iLCAiX3NlcnZlclBvcnQiOiA0NDMsICJfc2VjdXJpdHlEZXRhaWxzIjogeyJwcm90b2NvbCI6ICJUTFMgMS4zIiwgInN1YmplY3ROYW1lIjogInN1cHBseWNoYWluY2FuYWRhLmNvbSIsICJpc3N1ZXIiOiAiV0UxIiwgInZhbGlkRnJvbSI6IDE3MjM0NzA4NDEsICJ2YWxpZFRvIjogMTczMTI0Njg0MH19LCB7InN0YXJ0ZWREYXRlVGltZSI6ICIyMDI0LTA5LTA1VDExOjA3OjIwLjI5MloiLCAidGltZSI6IDMxNy40MTcsICJyZXF1ZXN0IjogeyJtZXRob2QiOiAiR0VUIiwgInVybCI6ICJodHRwczovL3BvcnRhbC5zdXBwbHljaGFpbmNhbmFkYS5jb20vY29tbW9uL2Jvb3RzdHJhcC9jc3MvYm9vdHN0cmFwLXNlbGVjdC5taW4uY3NzIiwgImh0dHBWZXJzaW9uIjogIkhUVFAvMi4wIiwgImNvb2tpZXMiOiBbeyJuYW1lIjogIkpTRVNTSU9OSUQiLCAidmFsdWUiOiAiMjU3RDlEQzkyMDQ1MkE0RDkzM0I4QTNDREE5QjZCRDMifV0sICJoZWFkZXJzIjogW3sibmFtZSI6ICI6YXV0aG9yaXR5IiwgInZhbHVlIjogInBvcnRhbC5zdXBwbHljaGFpbmNhbmFkYS5jb20ifSwgeyJuYW1lIjogIjptZXRob2QiLCAidmFsdWUiOiAiR0VUIn0sIHsibmFtZSI6ICI6cGF0aCIsICJ2YWx1ZSI6ICIvY29tbW9uL2Jvb3RzdHJhcC9jc3MvYm9vdHN0cmFwLXNlbGVjdC5taW4uY3NzIn0sIHsibmFtZSI6ICI6c2NoZW1lIiwgInZhbHVlIjogImh0dHBzIn0sIHsibmFtZSI6ICJhY2NlcHQiLCAidmFsdWUiOiAidGV4dC9jc3MsKi8qO3E9MC4xIn0sIHsibmFtZSI6ICJhY2NlcHQtZW5jb2RpbmciLCAidmFsdWUiOiAiZ3ppcCwgZGVmbGF0ZSwgYnIsIHpzdGQifSwgeyJuYW1lIjogImFjY2VwdC1sYW5ndWFnZSIsICJ2YWx1ZSI6ICJlbi1VUyJ9LCB7Im5hbWUiOiAiY29va2llIiwgInZhbHVlIjogIkpTRVNTSU9OSUQ9MjU3RDlEQzkyMDQ1MkE0RDkzM0I4QTNDREE5QjZCRDMifSwgeyJuYW1lIjogInByaW9yaXR5IiwgInZhbHVlIjogInU9MCJ9LCB7Im5hbWUiOiAicmVmZXJlciIsICJ2YWx1ZSI6ICJodHRwczovL3BvcnRhbC5zdXBwbHljaGFpbmNhbmFkYS5jb20vZW4vcG9ydGFsbG9naW4ifSwgeyJuYW1lIjogInNlYy1jaC11YSIsICJ2YWx1ZSI6ICJcIk5vdDtBPUJyYW5kXCI7dj1cIjI0XCIsIFwiQ2hyb21pdW1cIjt2PVwiMTI4XCIifSwgeyJuYW1lIjogInNlYy1jaC11YS1tb2JpbGUiLCAidmFsdWUiOiAiPzAifSwgeyJuYW1lIjogInNlYy1jaC11YS1wbGF0Zm9ybSIsICJ2YWx1ZSI6ICJcIldpbmRvd3NcIiJ9LCB7Im5hbWUiOiAic2VjLWZldGNoLWRlc3QiLCAidmFsdWUiOiAic3R5bGUifSwgeyJuYW1lIjogInNlYy1mZXRjaC1tb2RlIiwgInZhbHVlIjogIm5vLWNvcnMifSwgeyJuYW1lIjogInNlYy1mZXRjaC1zaXRlIiwgInZhbHVlIjogInNhbWUtb3JpZ2luIn0sIHsibmFtZSI6ICJ1c2VyLWFnZW50IiwgInZhbHVlIjogIk1vemlsbGEvNS4wIChXaW5kb3dzIE5UIDEwLjA7IFdpbjY0OyB4NjQpIEFwcGxlV2ViS2l0LzUzNy4zNiAoS0hUTUwsIGxpa2UgR2Vja28pIENocm9tZS8xMjguMC42NjEzLjE4IFNhZmFyaS81MzcuMzYifV0sICJxdWVyeVN0cmluZyI6IFtdLCAiaGVhZGVyc1NpemUiOiA3MjQsICJib2R5U2l6ZSI6IDB9LCAicmVzcG9uc2UiOiB7InN0YXR1cyI6IDIwMCwgInN0YXR1c1RleHQiOiAiIiwgImh0dHBWZXJzaW9uIjogIkhUVFAvMi4wIiwgImNvb2tpZXMiOiBbXSwgImhlYWRlcnMiOiBbeyJuYW1lIjogImNhY2hlLWNvbnRyb2wiLCAidmFsdWUiOiAibWF4LWFnZT0xNDQwMCJ9LCB7Im5hbWUiOiAiY2YtY2FjaGUtc3RhdHVzIiwgInZhbHVlIjogIk1JU1MifSwgeyJuYW1lIjogImNmLXJheSIsICJ2YWx1ZSI6ICI4YmU1YzE0YmQ4NTM3MWM0LUZSQSJ9LCB7Im5hbWUiOiAiY29udGVudC1lbmNvZGluZyIsICJ2YWx1ZSI6ICJiciJ9LCB7Im5hbWUiOiAiY29udGVudC10eXBlIiwgInZhbHVlIjogInRleHQvY3NzIn0sIHsibmFtZSI6ICJkYXRlIiwgInZhbHVlIjogIlRodSwgMDUgU2VwIDIwMjQgMTE6MDc6MjAgR01UIn0sIHsibmFtZSI6ICJldGFnIiwgInZhbHVlIjogIlcvXCI2NDM3LTE2ODEzMzM0MjIwMDBcIiJ9LCB7Im5hbWUiOiAibGFzdC1tb2RpZmllZCIsICJ2YWx1ZSI6ICJXZWQsIDEyIEFwciAyMDIzIDIxOjAzOjQyIEdNVCJ9LCB7Im5hbWUiOiAibmVsIiwgInZhbHVlIjogIntcInN1Y2Nlc3NfZnJhY3Rpb25cIjowLFwicmVwb3J0X3RvXCI6XCJjZi1uZWxcIixcIm1heF9hZ2VcIjo2MDQ4MDB9In0sIHsibmFtZSI6ICJyZXBvcnQtdG8iLCAidmFsdWUiOiAie1wiZW5kcG9pbnRzXCI6W3tcInVybFwiOlwiaHR0cHM6XFwvXFwvYS5uZWwuY2xvdWRmbGFyZS5jb21cXC9yZXBvcnRcXC92ND9zPTRQVnA2bkMlMkJSOVFaSGFtJTJGM3hLcGpteUIxJTJCQ2lOa0lWT0xrZGJ0TUl0dkVFdnhOTkZZNzdhZVpKUmdhT05nd0xIbnBRSjl6SldRMER3JTJCbFhldGdac0N1bURxM0Y3Y2hCc3lPTXRRRTl5NG9XZ2JDMVREOHdPdGx3a3JKOHF3USUyRmV6ZFlwdXZFQWslMkZFSFBsZGQlMkZuQlMwUTRhUm1sTzd5ZktycyUzRFwifV0sXCJncm91cFwiOlwiY2YtbmVsXCIsXCJtYXhfYWdlXCI6NjA0ODAwfSJ9LCB7Im5hbWUiOiAic2VydmVyIiwgInZhbHVlIjogImNsb3VkZmxhcmUifSwgeyJuYW1lIjogInN0cmljdC10cmFuc3BvcnQtc2VjdXJpdHkiLCAidmFsdWUiOiAibWF4LWFnZT02MzA3MjAwMDsgaW5jbHVkZVN1YmRvbWFpbnM7IHByZWxvYWQifSwgeyJuYW1lIjogInZhcnkiLCAidmFsdWUiOiAiQWNjZXB0LUVuY29kaW5nIn1dLCAiY29udGVudCI6IHsic2l6ZSI6IDY0MzcsICJtaW1lVHlwZSI6ICJ0ZXh0L2NzcyIsICJjb21wcmVzc2lvbiI6IDQ1NzIsICJ0ZXh0IjogIi8qIVxyXG4gKiBCb290c3RyYXAtc2VsZWN0IHYxLjEyLjEgKGh0dHA6Ly9zaWx2aW9tb3JldG8uZ2l0aHViLmlvL2Jvb3RzdHJhcC1zZWxlY3QpXHJcbiAqXHJcbiAqIENvcHlyaWdodCAyMDEzLTIwMTYgYm9vdHN0cmFwLXNlbGVjdFxyXG4gKiBMaWNlbnNlZCB1bmRlciBNSVQgKGh0dHBzOi8vZ2l0aHViLmNvbS9zaWx2aW9tb3JldG8vYm9vdHN0cmFwLXNlbGVjdC9ibG9iL21hc3Rlci9MSUNFTlNFKVxyXG4gKi9zZWxlY3QuYnMtc2VsZWN0LWhpZGRlbixzZWxlY3Quc2VsZWN0cGlja2Vye2Rpc3BsYXk6bm9uZSFpbXBvcnRhbnR9LmJvb3RzdHJhcC1zZWxlY3R7d2lkdGg6MjIwcHhcXDl9LmJvb3RzdHJhcC1zZWxlY3Q+LmRyb3Bkb3duLXRvZ2dsZXt3aWR0aDoxMDAlO3BhZGRpbmctcmlnaHQ6MjVweDt6LWluZGV4OjF9LmJvb3RzdHJhcC1zZWxlY3Q+LmRyb3Bkb3duLXRvZ2dsZS5icy1wbGFjZWhvbGRlciwuYm9vdHN0cmFwLXNlbGVjdD4uZHJvcGRvd24tdG9nZ2xlLmJzLXBsYWNlaG9sZGVyOmFjdGl2ZSwuYm9vdHN0cmFwLXNlbGVjdD4uZHJvcGRvd24tdG9nZ2xlLmJzLXBsYWNlaG9sZGVyOmZvY3VzLC5ib290c3RyYXAtc2VsZWN0Pi5kcm9wZG93bi10b2dnbGUuYnMtcGxhY2Vob2xkZXI6aG92ZXJ7Y29sb3I6Izk5OX0uYm9vdHN0cmFwLXNlbGVjdD5zZWxlY3R7cG9zaXRpb246YWJzb2x1dGUhaW1wb3J0YW50O2JvdHRvbTowO2xlZnQ6NTAlO2Rpc3BsYXk6YmxvY2shaW1wb3J0YW50O3dpZHRoOi41cHghaW1wb3J0YW50O2hlaWdodDoxMDAlIWltcG9ydGFudDtwYWRkaW5nOjAhaW1wb3J0YW50O29wYWNpdHk6MCFpbXBvcnRhbnQ7Ym9yZGVyOm5vbmV9LmJvb3RzdHJhcC1zZWxlY3Q+c2VsZWN0Lm1vYmlsZS1kZXZpY2V7dG9wOjA7bGVmdDowO2Rpc3BsYXk6YmxvY2shaW1wb3J0YW50O3dpZHRoOjEwMCUhaW1wb3J0YW50O3otaW5kZXg6Mn0uZXJyb3IgLmJvb3RzdHJhcC1zZWxlY3QgLmRyb3Bkb3duLXRvZ2dsZSwuaGFzLWVycm9yIC5ib290c3RyYXAtc2VsZWN0IC5kcm9wZG93bi10b2dnbGV7Ym9yZGVyLWNvbG9yOiNiOTRhNDh9LmJvb3RzdHJhcC1zZWxlY3QuZml0LXdpZHRoe3dpZHRoOmF1dG8haW1wb3J0YW50fS5ib290c3RyYXAtc2VsZWN0Om5vdChbY2xhc3MqPWNvbC1dKTpub3QoW2NsYXNzKj1mb3JtLWNvbnRyb2xdKTpub3QoLmlucHV0LWdyb3VwLWJ0bil7d2lkdGg6MjIwcHh9LmJvb3RzdHJhcC1zZWxlY3QgLmRyb3Bkb3duLXRvZ2dsZTpmb2N1c3tvdXRsaW5lOnRoaW4gZG90dGVkICMzMzMhaW1wb3J0YW50O291dGxpbmU6NXB4IGF1dG8gLXdlYmtpdC1mb2N1cy1yaW5nLWNvbG9yIWltcG9ydGFudDtvdXRsaW5lLW9mZnNldDotMnB4fS5ib290c3RyYXAtc2VsZWN0LmZvcm0tY29udHJvbHttYXJnaW4tYm90dG9tOjA7cGFkZGluZzowO2JvcmRlcjpub25lfS5ib290c3RyYXAtc2VsZWN0LmZvcm0tY29udHJvbDpub3QoW2NsYXNzKj1jb2wtXSl7d2lkdGg6MTAwJX0uYm9vdHN0cmFwLXNlbGVjdC5mb3JtLWNvbnRyb2wuaW5wdXQtZ3JvdXAtYnRue3otaW5kZXg6YXV0b30uYm9vdHN0cmFwLXNlbGVjdC5mb3JtLWNvbnRyb2wuaW5wdXQtZ3JvdXAtYnRuOm5vdCg6Zmlyc3QtY2hpbGQpOm5vdCg6bGFzdC1jaGlsZCk+LmJ0bntib3JkZXItcmFkaXVzOjB9LmJvb3RzdHJhcC1zZWxlY3QuYnRuLWdyb3VwOm5vdCguaW5wdXQtZ3JvdXAtYnRuKSwuYm9vdHN0cmFwLXNlbGVjdC5idG4tZ3JvdXBbY2xhc3MqPWNvbC1de2Zsb2F0Om5vbmU7ZGlzcGxheTppbmxpbmUtYmxvY2s7bWFyZ2luLWxlZnQ6MH0uYm9vdHN0cmFwLXNlbGVjdC5idG4tZ3JvdXAuZHJvcGRvd24tbWVudS1yaWdodCwuYm9vdHN0cmFwLXNlbGVjdC5idG4tZ3JvdXBbY2xhc3MqPWNvbC1dLmRyb3Bkb3duLW1lbnUtcmlnaHQsLnJvdyAuYm9vdHN0cmFwLXNlbGVjdC5idG4tZ3JvdXBbY2xhc3MqPWNvbC1dLmRyb3Bkb3duLW1lbnUtcmlnaHR7ZmxvYXQ6cmlnaHR9LmZvcm0tZ3JvdXAgLmJvb3RzdHJhcC1zZWxlY3QuYnRuLWdyb3VwLC5mb3JtLWhvcml6b250YWwgLmJvb3RzdHJhcC1zZWxlY3QuYnRuLWdyb3VwLC5mb3JtLWlubGluZSAuYm9vdHN0cmFwLXNlbGVjdC5idG4tZ3JvdXB7bWFyZ2luLWJvdHRvbTowfS5mb3JtLWdyb3VwLWxnIC5ib290c3RyYXAtc2VsZWN0LmJ0bi1ncm91cC5mb3JtLWNvbnRyb2wsLmZvcm0tZ3JvdXAtc20gLmJvb3RzdHJhcC1zZWxlY3QuYnRuLWdyb3VwLmZvcm0tY29udHJvbHtwYWRkaW5nOjB9LmZvcm0taW5saW5lIC5ib290c3RyYXAtc2VsZWN0LmJ0bi1ncm91cCAuZm9ybS1jb250cm9se3dpZHRoOjEwMCV9LmJvb3RzdHJhcC1zZWxlY3QuYnRuLWdyb3VwLmRpc2FibGVkLC5ib290c3RyYXAtc2VsZWN0LmJ0bi1ncm91cD4uZGlzYWJsZWR7Y3Vyc29yOm5vdC1hbGxvd2VkfS5ib290c3RyYXAtc2VsZWN0LmJ0bi1ncm91cC5kaXNhYmxlZDpmb2N1cywuYm9vdHN0cmFwLXNlbGVjdC5idG4tZ3JvdXA+LmRpc2FibGVkOmZvY3Vze291dGxpbmU6MCFpbXBvcnRhbnR9LmJvb3RzdHJhcC1zZWxlY3QuYnRuLWdyb3VwLmJzLWNvbnRhaW5lcntwb3NpdGlvbjphYnNvbHV0ZTtoZWlnaHQ6MCFpbXBvcnRhbnQ7cGFkZGluZzowIWltcG9ydGFudH0uYm9vdHN0cmFwLXNlbGVjdC5idG4tZ3JvdXAuYnMtY29udGFpbmVyIC5kcm9wZG93bi1tZW51e3otaW5kZXg6MTA2MH0uYm9vdHN0cmFwLXNlbGVjdC5idG4tZ3JvdXAgLmRyb3Bkb3duLXRvZ2dsZSAuZmlsdGVyLW9wdGlvbntkaXNwbGF5OmlubGluZS1ibG9jaztvdmVyZmxvdzpoaWRkZW47d2lkdGg6MTAwJTt0ZXh0LWFsaWduOmxlZnR9LmJvb3RzdHJhcC1zZWxlY3QuYnRuLWdyb3VwIC5kcm9wZG93bi10b2dnbGUgLmNhcmV0e3Bvc2l0aW9uOmFic29sdXRlO3RvcDo1MCU7cmlnaHQ6MTJweDttYXJnaW4tdG9wOi0ycHg7dmVydGljYWwtYWxpZ246bWlkZGxlfS5ib290c3RyYXAtc2VsZWN0LmJ0bi1ncm91cFtjbGFzcyo9Y29sLV0gLmRyb3Bkb3duLXRvZ2dsZXt3aWR0aDoxMDAlfS5ib290c3RyYXAtc2VsZWN0LmJ0bi1ncm91cCAuZHJvcGRvd24tbWVudXttaW4td2lkdGg6MTAwJTstd2Via2l0LWJveC1zaXppbmc6Ym9yZGVyLWJveDstbW96LWJveC1zaXppbmc6Ym9yZGVyLWJveDtib3gtc2l6aW5nOmJvcmRlci1ib3h9LmJvb3RzdHJhcC1zZWxlY3QuYnRuLWdyb3VwIC5kcm9wZG93bi1tZW51LmlubmVye3Bvc2l0aW9uOnN0YXRpYztmbG9hdDpub25lO2JvcmRlcjowO3BhZGRpbmc6MDttYXJnaW46MDtib3JkZXItcmFkaXVzOjA7LXdlYmtpdC1ib3gtc2hhZG93Om5vbmU7Ym94LXNoYWRvdzpub25lfS5ib290c3RyYXAtc2VsZWN0LmJ0bi1ncm91cCAuZHJvcGRvd24tbWVudSBsaXtwb3NpdGlvbjpyZWxhdGl2ZX0uYm9vdHN0cmFwLXNlbGVjdC5idG4tZ3JvdXAgLmRyb3Bkb3duLW1lbnUgbGkuYWN0aXZlIHNtYWxse2NvbG9yOiNmZmZ9LmJvb3RzdHJhcC1zZWxlY3QuYnRuLWdyb3VwIC5kcm9wZG93bi1tZW51IGxpLmRpc2FibGVkIGF7Y3Vyc29yOm5vdC1hbGxvd2VkfS5ib290c3RyYXAtc2VsZWN0LmJ0bi1ncm91cCAuZHJvcGRvd24tbWVudSBsaSBhe2N1cnNvcjpwb2ludGVyOy13ZWJraXQtdXNlci1zZWxlY3Q6bm9uZTstbW96LXVzZXItc2VsZWN0Om5vbmU7LW1zLXVzZXItc2VsZWN0Om5vbmU7dXNlci1zZWxlY3Q6bm9uZX0uYm9vdHN0cmFwLXNlbGVjdC5idG4tZ3JvdXAgLmRyb3Bkb3duLW1lbnUgbGkgYS5vcHR7cG9zaXRpb246cmVsYXRpdmU7cGFkZGluZy1sZWZ0OjIuMjVlbX0uYm9vdHN0cmFwLXNlbGVjdC5idG4tZ3JvdXAgLmRyb3Bkb3duLW1lbnUgbGkgYSBzcGFuLmNoZWNrLW1hcmt7ZGlzcGxheTpub25lfS5ib290c3RyYXAtc2VsZWN0LmJ0bi1ncm91cCAuZHJvcGRvd24tbWVudSBsaSBhIHNwYW4udGV4dHtkaXNwbGF5OmlubGluZS1ibG9ja30uYm9vdHN0cmFwLXNlbGVjdC5idG4tZ3JvdXAgLmRyb3Bkb3duLW1lbnUgbGkgc21hbGx7cGFkZGluZy1sZWZ0Oi41ZW19LmJvb3RzdHJhcC1zZWxlY3QuYnRuLWdyb3VwIC5kcm9wZG93bi1tZW51IC5ub3RpZnl7cG9zaXRpb246YWJzb2x1dGU7Ym90dG9tOjVweDt3aWR0aDo5NiU7bWFyZ2luOjAgMiU7bWluLWhlaWdodDoyNnB4O3BhZGRpbmc6M3B4IDVweDtiYWNrZ3JvdW5kOiNmNWY1ZjU7Ym9yZGVyOjFweCBzb2xpZCAjZTNlM2UzOy13ZWJraXQtYm94LXNoYWRvdzppbnNldCAwIDFweCAxcHggcmdiYSgwLDAsMCwuMDUpO2JveC1zaGFkb3c6aW5zZXQgMCAxcHggMXB4IHJnYmEoMCwwLDAsLjA1KTtwb2ludGVyLWV2ZW50czpub25lO29wYWNpdHk6Ljk7LXdlYmtpdC1ib3gtc2l6aW5nOmJvcmRlci1ib3g7LW1vei1ib3gtc2l6aW5nOmJvcmRlci1ib3g7Ym94LXNpemluZzpib3JkZXItYm94fS5ib290c3RyYXAtc2VsZWN0LmJ0bi1ncm91cCAubm8tcmVzdWx0c3twYWRkaW5nOjNweDtiYWNrZ3JvdW5kOiNmNWY1ZjU7bWFyZ2luOjAgNXB4O3doaXRlLXNwYWNlOm5vd3JhcH0uYm9vdHN0cmFwLXNlbGVjdC5idG4tZ3JvdXAuZml0LXdpZHRoIC5kcm9wZG93bi10b2dnbGUgLmZpbHRlci1vcHRpb257cG9zaXRpb246c3RhdGljfS5ib290c3RyYXAtc2VsZWN0LmJ0bi1ncm91cC5maXQtd2lkdGggLmRyb3Bkb3duLXRvZ2dsZSAuY2FyZXR7cG9zaXRpb246c3RhdGljO3RvcDphdXRvO21hcmdpbi10b3A6LTFweH0uYm9vdHN0cmFwLXNlbGVjdC5idG4tZ3JvdXAuc2hvdy10aWNrIC5kcm9wZG93bi1tZW51IGxpLnNlbGVjdGVkIGEgc3Bhbi5jaGVjay1tYXJre3Bvc2l0aW9uOmFic29sdXRlO2Rpc3BsYXk6aW5saW5lLWJsb2NrO3JpZ2h0OjE1cHg7bWFyZ2luLXRvcDo1cHh9LmJvb3RzdHJhcC1zZWxlY3QuYnRuLWdyb3VwLnNob3ctdGljayAuZHJvcGRvd24tbWVudSBsaSBhIHNwYW4udGV4dHttYXJnaW4tcmlnaHQ6MzRweH0uYm9vdHN0cmFwLXNlbGVjdC5zaG93LW1lbnUtYXJyb3cub3Blbj4uZHJvcGRvd24tdG9nZ2xle3otaW5kZXg6MTA2MX0uYm9vdHN0cmFwLXNlbGVjdC5zaG93LW1lbnUtYXJyb3cgLmRyb3Bkb3duLXRvZ2dsZTpiZWZvcmV7Y29udGVudDonJztib3JkZXItbGVmdDo3cHggc29saWQgdHJhbnNwYXJlbnQ7Ym9yZGVyLXJpZ2h0OjdweCBzb2xpZCB0cmFuc3BhcmVudDtib3JkZXItYm90dG9tOjdweCBzb2xpZCByZ2JhKDIwNCwyMDQsMjA0LC4yKTtwb3NpdGlvbjphYnNvbHV0ZTtib3R0b206LTRweDtsZWZ0OjlweDtkaXNwbGF5Om5vbmV9LmJvb3RzdHJhcC1zZWxlY3Quc2hvdy1tZW51LWFycm93IC5kcm9wZG93bi10b2dnbGU6YWZ0ZXJ7Y29udGVudDonJztib3JkZXItbGVmdDo2cHggc29saWQgdHJhbnNwYXJlbnQ7Ym9yZGVyLXJpZ2h0OjZweCBzb2xpZCB0cmFuc3BhcmVudDtib3JkZXItYm90dG9tOjZweCBzb2xpZCAjZmZmO3Bvc2l0aW9uOmFic29sdXRlO2JvdHRvbTotNHB4O2xlZnQ6MTBweDtkaXNwbGF5Om5vbmV9LmJvb3RzdHJhcC1zZWxlY3Quc2hvdy1tZW51LWFycm93LmRyb3B1cCAuZHJvcGRvd24tdG9nZ2xlOmJlZm9yZXtib3R0b206YXV0bzt0b3A6LTNweDtib3JkZXItdG9wOjdweCBzb2xpZCByZ2JhKDIwNCwyMDQsMjA0LC4yKTtib3JkZXItYm90dG9tOjB9LmJvb3RzdHJhcC1zZWxlY3Quc2hvdy1tZW51LWFycm93LmRyb3B1cCAuZHJvcGRvd24tdG9nZ2xlOmFmdGVye2JvdHRvbTphdXRvO3RvcDotM3B4O2JvcmRlci10b3A6NnB4IHNvbGlkICNmZmY7Ym9yZGVyLWJvdHRvbTowfS5ib290c3RyYXAtc2VsZWN0LnNob3ctbWVudS1hcnJvdy5wdWxsLXJpZ2h0IC5kcm9wZG93bi10b2dnbGU6YmVmb3Jle3JpZ2h0OjEycHg7bGVmdDphdXRvfS5ib290c3RyYXAtc2VsZWN0LnNob3ctbWVudS1hcnJvdy5wdWxsLXJpZ2h0IC5kcm9wZG93bi10b2dnbGU6YWZ0ZXJ7cmlnaHQ6MTNweDtsZWZ0OmF1dG99LmJvb3RzdHJhcC1zZWxlY3Quc2hvdy1tZW51LWFycm93Lm9wZW4+LmRyb3Bkb3duLXRvZ2dsZTphZnRlciwuYm9vdHN0cmFwLXNlbGVjdC5zaG93LW1lbnUtYXJyb3cub3Blbj4uZHJvcGRvd24tdG9nZ2xlOmJlZm9yZXtkaXNwbGF5OmJsb2NrfS5icy1hY3Rpb25zYm94LC5icy1kb25lYnV0dG9uLC5icy1zZWFyY2hib3h7cGFkZGluZzo0cHggOHB4fS5icy1hY3Rpb25zYm94e3dpZHRoOjEwMCU7LXdlYmtpdC1ib3gtc2l6aW5nOmJvcmRlci1ib3g7LW1vei1ib3gtc2l6aW5nOmJvcmRlci1ib3g7Ym94LXNpemluZzpib3JkZXItYm94fS5icy1hY3Rpb25zYm94IC5idG4tZ3JvdXAgYnV0dG9ue3dpZHRoOjUwJX0uYnMtZG9uZWJ1dHRvbntmbG9hdDpsZWZ0O3dpZHRoOjEwMCU7LXdlYmtpdC1ib3gtc2l6aW5nOmJvcmRlci1ib3g7LW1vei1ib3gtc2l6aW5nOmJvcmRlci1ib3g7Ym94LXNpemluZzpib3JkZXItYm94fS5icy1kb25lYnV0dG9uIC5idG4tZ3JvdXAgYnV0dG9ue3dpZHRoOjEwMCV9LmJzLXNlYXJjaGJveCsuYnMtYWN0aW9uc2JveHtwYWRkaW5nOjAgOHB4IDRweH0uYnMtc2VhcmNoYm94IC5mb3JtLWNvbnRyb2x7bWFyZ2luLWJvdHRvbTowO3dpZHRoOjEwMCU7ZmxvYXQ6bm9uZX0ifSwgImhlYWRlcnNTaXplIjogMCwgImJvZHlTaXplIjogMTg2NSwgInJlZGlyZWN0VVJMIjogIiIsICJfdHJhbnNmZXJTaXplIjogMTg2NX0sICJjYWNoZSI6IHt9LCAidGltaW5ncyI6IHsiZG5zIjogLTEsICJjb25uZWN0IjogLTEsICJzc2wiOiAtMSwgInNlbmQiOiAwLCAid2FpdCI6IDMwNS4xOTEsICJyZWNlaXZlIjogMTIuMjI2fSwgInBhZ2VyZWYiOiAicGFnZUA4YzkzMmY4MzM3ZDlhYmI0YjlhYjk4ODlkZWM1MWI5OSIsICJzZXJ2ZXJJUEFkZHJlc3MiOiAiWzI2MDY6NDcwMDoyMDo6NjgxYTplY2ZdIiwgIl9zZXJ2ZXJQb3J0IjogNDQzLCAiX3NlY3VyaXR5RGV0YWlscyI6IHsicHJvdG9jb2wiOiAiVExTIDEuMyIsICJzdWJqZWN0TmFtZSI6ICJzdXBwbHljaGFpbmNhbmFkYS5jb20iLCAiaXNzdWVyIjogIldFMSIsICJ2YWxpZEZyb20iOiAxNzIzNDcwODQxLCAidmFsaWRUbyI6IDE3MzEyNDY4NDB9fSwgeyJzdGFydGVkRGF0ZVRpbWUiOiAiMjAyNC0wOS0wNVQxMTowNzoyMC4yOTJaIiwgInRpbWUiOiA0MTMuMjMzLCAicmVxdWVzdCI6IHsibWV0aG9kIjogIkdFVCIsICJ1cmwiOiAiaHR0cHM6Ly9wb3J0YWwuc3VwcGx5Y2hhaW5jYW5hZGEuY29tL2NvbW1vbi9ib290c3RyYXAvY3NzL2Jvb3RzdHJhcC10aGVtZS5taW4uY3NzIiwgImh0dHBWZXJzaW9uIjogIkhUVFAvMi4wIiwgImNvb2tpZXMiOiBbeyJuYW1lIjogIkpTRVNTSU9OSUQiLCAidmFsdWUiOiAiMjU3RDlEQzkyMDQ1MkE0RDkzM0I4QTNDREE5QjZCRDMifV0sICJoZWFkZXJzIjogW3sibmFtZSI6ICI6YXV0aG9yaXR5IiwgInZhbHVlIjogInBvcnRhbC5zdXBwbHljaGFpbmNhbmFkYS5jb20ifSwgeyJuYW1lIjogIjptZXRob2QiLCAidmFsdWUiOiAiR0VUIn0sIHsibmFtZSI6ICI6cGF0aCIsICJ2YWx1ZSI6ICIvY29tbW9uL2Jvb3RzdHJhcC9jc3MvYm9vdHN0cmFwLXRoZW1lLm1pbi5jc3MifSwgeyJuYW1lIjogIjpzY2hlbWUiLCAidmFsdWUiOiAiaHR0cHMifSwgeyJuYW1lIjogImFjY2VwdCIsICJ2YWx1ZSI6ICJ0ZXh0L2NzcywqLyo7cT0wLjEifSwgeyJuYW1lIjogImFjY2VwdC1lbmNvZGluZyIsICJ2YWx1ZSI6ICJnemlwLCBkZWZsYXRlLCBiciwgenN0ZCJ9LCB7Im5hbWUiOiAiYWNjZXB0LWxhbmd1YWdlIiwgInZhbHVlIjogImVuLVVTIn0sIHsibmFtZSI6ICJjb29raWUiLCAidmFsdWUiOiAiSlNFU1NJT05JRD0yNTdEOURDOTIwNDUyQTREOTMzQjhBM0NEQTlCNkJEMyJ9LCB7Im5hbWUiOiAicHJpb3JpdHkiLCAidmFsdWUiOiAidT0wIn0sIHsibmFtZSI6ICJyZWZlcmVyIiwgInZhbHVlIjogImh0dHBzOi8vcG9ydGFsLnN1cHBseWNoYWluY2FuYWRhLmNvbS9lbi9wb3J0YWxsb2dpbiJ9LCB7Im5hbWUiOiAic2VjLWNoLXVhIiwgInZhbHVlIjogIlwiTm90O0E9QnJhbmRcIjt2PVwiMjRcIiwgXCJDaHJvbWl1bVwiO3Y9XCIxMjhcIiJ9LCB7Im5hbWUiOiAic2VjLWNoLXVhLW1vYmlsZSIsICJ2YWx1ZSI6ICI/MCJ9LCB7Im5hbWUiOiAic2VjLWNoLXVhLXBsYXRmb3JtIiwgInZhbHVlIjogIlwiV2luZG93c1wiIn0sIHsibmFtZSI6ICJzZWMtZmV0Y2gtZGVzdCIsICJ2YWx1ZSI6ICJzdHlsZSJ9LCB7Im5hbWUiOiAic2VjLWZldGNoLW1vZGUiLCAidmFsdWUiOiAibm8tY29ycyJ9LCB7Im5hbWUiOiAic2VjLWZldGNoLXNpdGUiLCAidmFsdWUiOiAic2FtZS1vcmlnaW4ifSwgeyJuYW1lIjogInVzZXItYWdlbnQiLCAidmFsdWUiOiAiTW96aWxsYS81LjAgKFdpbmRvd3MgTlQgMTAuMDsgV2luNjQ7IHg2NCkgQXBwbGVXZWJLaXQvNTM3LjM2IChLSFRNTCwgbGlrZSBHZWNrbykgQ2hyb21lLzEyOC4wLjY2MTMuMTggU2FmYXJpLzUzNy4zNiJ9XSwgInF1ZXJ5U3RyaW5nIjogW10sICJoZWFkZXJzU2l6ZSI6IDcyMiwgImJvZHlTaXplIjogMH0sICJyZXNwb25zZSI6IHsic3RhdHVzIjogMjAwLCAic3RhdHVzVGV4dCI6ICIiLCAiaHR0cFZlcnNpb24iOiAiSFRUUC8yLjAiLCAiY29va2llcyI6IFtdLCAiaGVhZGVycyI6IFt7Im5hbWUiOiAiY2FjaGUtY29udHJvbCIsICJ2YWx1ZSI6ICJtYXgtYWdlPTE0NDAwIn0sIHsibmFtZSI6ICJjZi1jYWNoZS1zdGF0dXMiLCAidmFsdWUiOiAiTUlTUyJ9LCB7Im5hbWUiOiAiY2YtcmF5IiwgInZhbHVlIjogIjhiZTVjMTRiZDg1NzcxYzQtRlJBIn0sIHsibmFtZSI6ICJjb250ZW50LWVuY29kaW5nIiwgInZhbHVlIjogImJyIn0sIHsibmFtZSI6ICJjb250ZW50LXR5cGUiLCAidmFsdWUiOiAidGV4dC9jc3MifSwgeyJuYW1lIjogImRhdGUiLCAidmFsdWUiOiAiVGh1LCAwNSBTZXAgMjAyNCAxMTowNzoyMCBHTVQifSwgeyJuYW1lIjogImV0YWciLCAidmFsdWUiOiAiVy9cIjI0NDIzLTE2ODEzMzM0MjIwMDBcIiJ9LCB7Im5hbWUiOiAibGFzdC1tb2RpZmllZCIsICJ2YWx1ZSI6ICJXZWQsIDEyIEFwciAyMDIzIDIxOjAzOjQyIEdNVCJ9LCB7Im5hbWUiOiAibmVsIiwgInZhbHVlIjogIntcInN1Y2Nlc3NfZnJhY3Rpb25cIjowLFwicmVwb3J0X3RvXCI6XCJjZi1uZWxcIixcIm1heF9hZ2VcIjo2MDQ4MDB9In0sIHsibmFtZSI6ICJyZXBvcnQtdG8iLCAidmFsdWUiOiAie1wiZW5kcG9pbnRzXCI6W3tcInVybFwiOlwiaHR0cHM6XFwvXFwvYS5uZWwuY2xvdWRmbGFyZS5jb21cXC9yZXBvcnRcXC92ND9zPU16JTJCUkhFR3RqSGxSZWQ5aVlabTQ4VG14SzVtTld0WWIyYmpBMXBNbVZDV09mMEZiY2liRUpET1BKczg4cnMlMkY0cXZlUktSJTJCUkIlMkZ3NEZBVVREVTNXNXR2eEYzdVBWNlFJcXVreXd6Wkt2N1I2ckVQMW55YVhqd3VuMnJMZiUyRjFGMTNNeDJyVTREN1RCa0FZem1uaWlwc2MzUHY0SU55YzdRaVBBJTNEXCJ9XSxcImdyb3VwXCI6XCJjZi1uZWxcIixcIm1heF9hZ2VcIjo2MDQ4MDB9In0sIHsibmFtZSI6ICJzZXJ2ZXIiLCAidmFsdWUiOiAiY2xvdWRmbGFyZSJ9LCB7Im5hbWUiOiAic3RyaWN0LXRyYW5zcG9ydC1zZWN1cml0eSIsICJ2YWx1ZSI6ICJtYXgtYWdlPTYzMDcyMDAwOyBpbmNsdWRlU3ViZG9tYWluczsgcHJlbG9hZCJ9LCB7Im5hbWUiOiAidmFyeSIsICJ2YWx1ZSI6ICJBY2NlcHQtRW5jb2RpbmcifV0sICJjb250ZW50IjogeyJzaXplIjogMjQ0MjMsICJtaW1lVHlwZSI6ICJ0ZXh0L2NzcyIsICJjb21wcmVzc2lvbiI6IDIxMDYzLCAidGV4dCI6ICIvKiFcclxuICogQm9vdHN0cmFwIHYzLjMuNyAoaHR0cDovL2dldGJvb3RzdHJhcC5jb20pXHJcbiAqIENvcHlyaWdodCAyMDExLTIwMTYgVHdpdHRlciwgSW5jLlxyXG4gKiBMaWNlbnNlZCB1bmRlciBNSVQgKGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9ibG9iL21hc3Rlci9MSUNFTlNFKVxyXG4gKi9cclxuXHJcbi8qIVxyXG4gKiBHZW5lcmF0ZWQgdXNpbmcgdGhlIEJvb3RzdHJhcCBDdXN0b21pemVyIChodHRwOi8vZ2V0Ym9vdHN0cmFwLmNvbS9jdXN0b21pemUvP2lkPTU5ZGY4ODE3NDFjMGRjNTU3YWIwMWNhNTMxMjllM2FhKVxyXG4gKiBDb25maWcgc2F2ZWQgdG8gY29uZmlnLmpzb24gYW5kIGh0dHBzOi8vZ2lzdC5naXRodWIuY29tLzU5ZGY4ODE3NDFjMGRjNTU3YWIwMWNhNTMxMjllM2FhXHJcbiAqLy8qIVxyXG4gKiBCb290c3RyYXAgdjMuMy43IChodHRwOi8vZ2V0Ym9vdHN0cmFwLmNvbSlcclxuICogQ29weXJpZ2h0IDIwMTEtMjAxNiBUd2l0dGVyLCBJbmMuXHJcbiAqIExpY2Vuc2VkIHVuZGVyIE1JVCAoaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2Jsb2IvbWFzdGVyL0xJQ0VOU0UpXHJcbiAqLy5idG4tZGVmYXVsdCwuYnRuLXByaW1hcnksLmJ0bi1zdWNjZXNzLC5idG4taW5mbywuYnRuLXdhcm5pbmcsLmJ0bi1kYW5nZXJ7dGV4dC1zaGFkb3c6MCAtMXB4IDAgcmdiYSgwLDAsMCwwLjIpOy13ZWJraXQtYm94LXNoYWRvdzppbnNldCAwIDFweCAwIHJnYmEoMjU1LDI1NSwyNTUsMC4xNSksMCAxcHggMXB4IHJnYmEoMCwwLDAsMC4wNzUpO2JveC1zaGFkb3c6aW5zZXQgMCAxcHggMCByZ2JhKDI1NSwyNTUsMjU1LDAuMTUpLDAgMXB4IDFweCByZ2JhKDAsMCwwLDAuMDc1KX0uYnRuLWRlZmF1bHQ6YWN0aXZlLC5idG4tcHJpbWFyeTphY3RpdmUsLmJ0bi1zdWNjZXNzOmFjdGl2ZSwuYnRuLWluZm86YWN0aXZlLC5idG4td2FybmluZzphY3RpdmUsLmJ0bi1kYW5nZXI6YWN0aXZlLC5idG4tZGVmYXVsdC5hY3RpdmUsLmJ0bi1wcmltYXJ5LmFjdGl2ZSwuYnRuLXN1Y2Nlc3MuYWN0aXZlLC5idG4taW5mby5hY3RpdmUsLmJ0bi13YXJuaW5nLmFjdGl2ZSwuYnRuLWRhbmdlci5hY3RpdmV7LXdlYmtpdC1ib3gtc2hhZG93Omluc2V0IDAgM3B4IDVweCByZ2JhKDAsMCwwLDAuMTI1KTtib3gtc2hhZG93Omluc2V0IDAgM3B4IDVweCByZ2JhKDAsMCwwLDAuMTI1KX0uYnRuLWRlZmF1bHQuZGlzYWJsZWQsLmJ0bi1wcmltYXJ5LmRpc2FibGVkLC5idG4tc3VjY2Vzcy5kaXNhYmxlZCwuYnRuLWluZm8uZGlzYWJsZWQsLmJ0bi13YXJuaW5nLmRpc2FibGVkLC5idG4tZGFuZ2VyLmRpc2FibGVkLC5idG4tZGVmYXVsdFtkaXNhYmxlZF0sLmJ0bi1wcmltYXJ5W2Rpc2FibGVkXSwuYnRuLXN1Y2Nlc3NbZGlzYWJsZWRdLC5idG4taW5mb1tkaXNhYmxlZF0sLmJ0bi13YXJuaW5nW2Rpc2FibGVkXSwuYnRuLWRhbmdlcltkaXNhYmxlZF0sZmllbGRzZXRbZGlzYWJsZWRdIC5idG4tZGVmYXVsdCxmaWVsZHNldFtkaXNhYmxlZF0gLmJ0bi1wcmltYXJ5LGZpZWxkc2V0W2Rpc2FibGVkXSAuYnRuLXN1Y2Nlc3MsZmllbGRzZXRbZGlzYWJsZWRdIC5idG4taW5mbyxmaWVsZHNldFtkaXNhYmxlZF0gLmJ0bi13YXJuaW5nLGZpZWxkc2V0W2Rpc2FibGVkXSAuYnRuLWRhbmdlcnstd2Via2l0LWJveC1zaGFkb3c6bm9uZTtib3gtc2hhZG93Om5vbmV9LmJ0bi1kZWZhdWx0IC5iYWRnZSwuYnRuLXByaW1hcnkgLmJhZGdlLC5idG4tc3VjY2VzcyAuYmFkZ2UsLmJ0bi1pbmZvIC5iYWRnZSwuYnRuLXdhcm5pbmcgLmJhZGdlLC5idG4tZGFuZ2VyIC5iYWRnZXt0ZXh0LXNoYWRvdzpub25lfS5idG46YWN0aXZlLC5idG4uYWN0aXZle2JhY2tncm91bmQtaW1hZ2U6bm9uZX0uYnRuLWRlZmF1bHR7YmFja2dyb3VuZC1pbWFnZTotd2Via2l0LWxpbmVhci1ncmFkaWVudCh0b3AsICNmZmYgMCwgI2UwZTBlMCAxMDAlKTtiYWNrZ3JvdW5kLWltYWdlOi1vLWxpbmVhci1ncmFkaWVudCh0b3AsICNmZmYgMCwgI2UwZTBlMCAxMDAlKTtiYWNrZ3JvdW5kLWltYWdlOi13ZWJraXQtZ3JhZGllbnQobGluZWFyLCBsZWZ0IHRvcCwgbGVmdCBib3R0b20sIGNvbG9yLXN0b3AoMCwgI2ZmZiksIHRvKCNlMGUwZTApKTtiYWNrZ3JvdW5kLWltYWdlOmxpbmVhci1ncmFkaWVudCh0byBib3R0b20sICNmZmYgMCwgI2UwZTBlMCAxMDAlKTtmaWx0ZXI6cHJvZ2lkOkRYSW1hZ2VUcmFuc2Zvcm0uTWljcm9zb2Z0LmdyYWRpZW50KHN0YXJ0Q29sb3JzdHI9JyNmZmZmZmZmZicsIGVuZENvbG9yc3RyPScjZmZlMGUwZTAnLCBHcmFkaWVudFR5cGU9MCk7ZmlsdGVyOnByb2dpZDpEWEltYWdlVHJhbnNmb3JtLk1pY3Jvc29mdC5ncmFkaWVudChlbmFibGVkID0gZmFsc2UpO2JhY2tncm91bmQtcmVwZWF0OnJlcGVhdC14O2JvcmRlci1jb2xvcjojZGJkYmRiO3RleHQtc2hhZG93OjAgMXB4IDAgI2ZmZjtib3JkZXItY29sb3I6I2NjY30uYnRuLWRlZmF1bHQ6aG92ZXIsLmJ0bi1kZWZhdWx0OmZvY3Vze2JhY2tncm91bmQtY29sb3I6I2UwZTBlMDtiYWNrZ3JvdW5kLXBvc2l0aW9uOjAgLTE1cHh9LmJ0bi1kZWZhdWx0OmFjdGl2ZSwuYnRuLWRlZmF1bHQuYWN0aXZle2JhY2tncm91bmQtY29sb3I6I2UwZTBlMDtib3JkZXItY29sb3I6I2RiZGJkYn0uYnRuLWRlZmF1bHQuZGlzYWJsZWQsLmJ0bi1kZWZhdWx0W2Rpc2FibGVkXSxmaWVsZHNldFtkaXNhYmxlZF0gLmJ0bi1kZWZhdWx0LC5idG4tZGVmYXVsdC5kaXNhYmxlZDpob3ZlciwuYnRuLWRlZmF1bHRbZGlzYWJsZWRdOmhvdmVyLGZpZWxkc2V0W2Rpc2FibGVkXSAuYnRuLWRlZmF1bHQ6aG92ZXIsLmJ0bi1kZWZhdWx0LmRpc2FibGVkOmZvY3VzLC5idG4tZGVmYXVsdFtkaXNhYmxlZF06Zm9jdXMsZmllbGRzZXRbZGlzYWJsZWRdIC5idG4tZGVmYXVsdDpmb2N1cywuYnRuLWRlZmF1bHQuZGlzYWJsZWQuZm9jdXMsLmJ0bi1kZWZhdWx0W2Rpc2FibGVkXS5mb2N1cyxmaWVsZHNldFtkaXNhYmxlZF0gLmJ0bi1kZWZhdWx0LmZvY3VzLC5idG4tZGVmYXVsdC5kaXNhYmxlZDphY3RpdmUsLmJ0bi1kZWZhdWx0W2Rpc2FibGVkXTphY3RpdmUsZmllbGRzZXRbZGlzYWJsZWRdIC5idG4tZGVmYXVsdDphY3RpdmUsLmJ0bi1kZWZhdWx0LmRpc2FibGVkLmFjdGl2ZSwuYnRuLWRlZmF1bHRbZGlzYWJsZWRdLmFjdGl2ZSxmaWVsZHNldFtkaXNhYmxlZF0gLmJ0bi1kZWZhdWx0LmFjdGl2ZXtiYWNrZ3JvdW5kLWNvbG9yOiNlMGUwZTA7YmFja2dyb3VuZC1pbWFnZTpub25lfS5idG4tcHJpbWFyeXtiYWNrZ3JvdW5kLWltYWdlOi13ZWJraXQtbGluZWFyLWdyYWRpZW50KHRvcCwgIzMzN2FiNyAwLCAjMjY1YTg4IDEwMCUpO2JhY2tncm91bmQtaW1hZ2U6LW8tbGluZWFyLWdyYWRpZW50KHRvcCwgIzMzN2FiNyAwLCAjMjY1YTg4IDEwMCUpO2JhY2tncm91bmQtaW1hZ2U6LXdlYmtpdC1ncmFkaWVudChsaW5lYXIsIGxlZnQgdG9wLCBsZWZ0IGJvdHRvbSwgY29sb3Itc3RvcCgwLCAjMzM3YWI3KSwgdG8oIzI2NWE4OCkpO2JhY2tncm91bmQtaW1hZ2U6bGluZWFyLWdyYWRpZW50KHRvIGJvdHRvbSwgIzMzN2FiNyAwLCAjMjY1YTg4IDEwMCUpO2ZpbHRlcjpwcm9naWQ6RFhJbWFnZVRyYW5zZm9ybS5NaWNyb3NvZnQuZ3JhZGllbnQoc3RhcnRDb2xvcnN0cj0nI2ZmMzM3YWI3JywgZW5kQ29sb3JzdHI9JyNmZjI2NWE4OCcsIEdyYWRpZW50VHlwZT0wKTtmaWx0ZXI6cHJvZ2lkOkRYSW1hZ2VUcmFuc2Zvcm0uTWljcm9zb2Z0LmdyYWRpZW50KGVuYWJsZWQgPSBmYWxzZSk7YmFja2dyb3VuZC1yZXBlYXQ6cmVwZWF0LXg7Ym9yZGVyLWNvbG9yOiMyNDU1ODB9LmJ0bi1wcmltYXJ5OmhvdmVyLC5idG4tcHJpbWFyeTpmb2N1c3tiYWNrZ3JvdW5kLWNvbG9yOiMyNjVhODg7YmFja2dyb3VuZC1wb3NpdGlvbjowIC0xNXB4fS5idG4tcHJpbWFyeTphY3RpdmUsLmJ0bi1wcmltYXJ5LmFjdGl2ZXtiYWNrZ3JvdW5kLWNvbG9yOiMyNjVhODg7Ym9yZGVyLWNvbG9yOiMyNDU1ODB9LmJ0bi1wcmltYXJ5LmRpc2FibGVkLC5idG4tcHJpbWFyeVtkaXNhYmxlZF0sZmllbGRzZXRbZGlzYWJsZWRdIC5idG4tcHJpbWFyeSwuYnRuLXByaW1hcnkuZGlzYWJsZWQ6aG92ZXIsLmJ0bi1wcmltYXJ5W2Rpc2FibGVkXTpob3ZlcixmaWVsZHNldFtkaXNhYmxlZF0gLmJ0bi1wcmltYXJ5OmhvdmVyLC5idG4tcHJpbWFyeS5kaXNhYmxlZDpmb2N1cywuYnRuLXByaW1hcnlbZGlzYWJsZWRdOmZvY3VzLGZpZWxkc2V0W2Rpc2FibGVkXSAuYnRuLXByaW1hcnk6Zm9jdXMsLmJ0bi1wcmltYXJ5LmRpc2FibGVkLmZvY3VzLC5idG4tcHJpbWFyeVtkaXNhYmxlZF0uZm9jdXMsZmllbGRzZXRbZGlzYWJsZWRdIC5idG4tcHJpbWFyeS5mb2N1cywuYnRuLXByaW1hcnkuZGlzYWJsZWQ6YWN0aXZlLC5idG4tcHJpbWFyeVtkaXNhYmxlZF06YWN0aXZlLGZpZWxkc2V0W2Rpc2FibGVkXSAuYnRuLXByaW1hcnk6YWN0aXZlLC5idG4tcHJpbWFyeS5kaXNhYmxlZC5hY3RpdmUsLmJ0bi1wcmltYXJ5W2Rpc2FibGVkXS5hY3RpdmUsZmllbGRzZXRbZGlzYWJsZWRdIC5idG4tcHJpbWFyeS5hY3RpdmV7YmFja2dyb3VuZC1jb2xvcjojMjY1YTg4O2JhY2tncm91bmQtaW1hZ2U6bm9uZX0uYnRuLXN1Y2Nlc3N7YmFja2dyb3VuZC1pbWFnZTotd2Via2l0LWxpbmVhci1ncmFkaWVudCh0b3AsICNFRDFDMjQgMCwgI0VEMUMyNCAxMDAlKTtiYWNrZ3JvdW5kLWltYWdlOi1vLWxpbmVhci1ncmFkaWVudCh0b3AsICNFRDFDMjQgMCwgI0VEMUMyNCAxMDAlKTtiYWNrZ3JvdW5kLWltYWdlOi13ZWJraXQtZ3JhZGllbnQobGluZWFyLCBsZWZ0IHRvcCwgbGVmdCBib3R0b20sIGNvbG9yLXN0b3AoMCwgI0VEMUMyNCksIHRvKCNFRDFDMjQpKTtiYWNrZ3JvdW5kLWltYWdlOmxpbmVhci1ncmFkaWVudCh0byBib3R0b20sICNFRDFDMjQgMCwgI0VEMUMyNCAxMDAlKTtmaWx0ZXI6cHJvZ2lkOkRYSW1hZ2VUcmFuc2Zvcm0uTWljcm9zb2Z0LmdyYWRpZW50KHN0YXJ0Q29sb3JzdHI9JyNmZkVEMUMyNCcsIGVuZENvbG9yc3RyPScjZmZFRDFDMjQnLCBHcmFkaWVudFR5cGU9MCk7ZmlsdGVyOnByb2dpZDpEWEltYWdlVHJhbnNmb3JtLk1pY3Jvc29mdC5ncmFkaWVudChlbmFibGVkID0gZmFsc2UpO2JhY2tncm91bmQtcmVwZWF0OnJlcGVhdC14O2JvcmRlci1jb2xvcjojRUQxQzI0fS5idG4tc3VjY2Vzczpob3ZlciwuYnRuLXN1Y2Nlc3M6Zm9jdXN7YmFja2dyb3VuZC1jb2xvcjojRUQxQzI0O2JhY2tncm91bmQtcG9zaXRpb246MCAtMTVweH0uYnRuLXN1Y2Nlc3M6YWN0aXZlLC5idG4tc3VjY2Vzcy5hY3RpdmV7YmFja2dyb3VuZC1jb2xvcjojRUQxQzI0O2JvcmRlci1jb2xvcjojRUQxQzI0fS5idG4tc3VjY2Vzcy5kaXNhYmxlZCwuYnRuLXN1Y2Nlc3NbZGlzYWJsZWRdLGZpZWxkc2V0W2Rpc2FibGVkXSAuYnRuLXN1Y2Nlc3MsLmJ0bi1zdWNjZXNzLmRpc2FibGVkOmhvdmVyLC5idG4tc3VjY2Vzc1tkaXNhYmxlZF06aG92ZXIsZmllbGRzZXRbZGlzYWJsZWRdIC5idG4tc3VjY2Vzczpob3ZlciwuYnRuLXN1Y2Nlc3MuZGlzYWJsZWQ6Zm9jdXMsLmJ0bi1zdWNjZXNzW2Rpc2FibGVkXTpmb2N1cyxmaWVsZHNldFtkaXNhYmxlZF0gLmJ0bi1zdWNjZXNzOmZvY3VzLC5idG4tc3VjY2Vzcy5kaXNhYmxlZC5mb2N1cywuYnRuLXN1Y2Nlc3NbZGlzYWJsZWRdLmZvY3VzLGZpZWxkc2V0W2Rpc2FibGVkXSAuYnRuLXN1Y2Nlc3MuZm9jdXMsLmJ0bi1zdWNjZXNzLmRpc2FibGVkOmFjdGl2ZSwuYnRuLXN1Y2Nlc3NbZGlzYWJsZWRdOmFjdGl2ZSxmaWVsZHNldFtkaXNhYmxlZF0gLmJ0bi1zdWNjZXNzOmFjdGl2ZSwuYnRuLXN1Y2Nlc3MuZGlzYWJsZWQuYWN0aXZlLC5idG4tc3VjY2Vzc1tkaXNhYmxlZF0uYWN0aXZlLGZpZWxkc2V0W2Rpc2FibGVkXSAuYnRuLXN1Y2Nlc3MuYWN0aXZle2JhY2tncm91bmQtY29sb3I6I0VEMUMyNDtiYWNrZ3JvdW5kLWltYWdlOm5vbmV9LmJ0bi1pbmZve2JhY2tncm91bmQtaW1hZ2U6LXdlYmtpdC1saW5lYXItZ3JhZGllbnQodG9wLCAjNWJjMGRlIDAsICMyYWFiZDIgMTAwJSk7YmFja2dyb3VuZC1pbWFnZTotby1saW5lYXItZ3JhZGllbnQodG9wLCAjNWJjMGRlIDAsICMyYWFiZDIgMTAwJSk7YmFja2dyb3VuZC1pbWFnZTotd2Via2l0LWdyYWRpZW50KGxpbmVhciwgbGVmdCB0b3AsIGxlZnQgYm90dG9tLCBjb2xvci1zdG9wKDAsICM1YmMwZGUpLCB0bygjMmFhYmQyKSk7YmFja2dyb3VuZC1pbWFnZTpsaW5lYXItZ3JhZGllbnQodG8gYm90dG9tLCAjNWJjMGRlIDAsICMyYWFiZDIgMTAwJSk7ZmlsdGVyOnByb2dpZDpEWEltYWdlVHJhbnNmb3JtLk1pY3Jvc29mdC5ncmFkaWVudChzdGFydENvbG9yc3RyPScjZmY1YmMwZGUnLCBlbmRDb2xvcnN0cj0nI2ZmMmFhYmQyJywgR3JhZGllbnRUeXBlPTApO2ZpbHRlcjpwcm9naWQ6RFhJbWFnZVRyYW5zZm9ybS5NaWNyb3NvZnQuZ3JhZGllbnQoZW5hYmxlZCA9IGZhbHNlKTtiYWNrZ3JvdW5kLXJlcGVhdDpyZXBlYXQteDtib3JkZXItY29sb3I6IzI4YTRjOX0uYnRuLWluZm86aG92ZXIsLmJ0bi1pbmZvOmZvY3Vze2JhY2tncm91bmQtY29sb3I6IzJhYWJkMjtiYWNrZ3JvdW5kLXBvc2l0aW9uOjAgLTE1cHh9LmJ0bi1pbmZvOmFjdGl2ZSwuYnRuLWluZm8uYWN0aXZle2JhY2tncm91bmQtY29sb3I6IzJhYWJkMjtib3JkZXItY29sb3I6IzI4YTRjOX0uYnRuLWluZm8uZGlzYWJsZWQsLmJ0bi1pbmZvW2Rpc2FibGVkXSxmaWVsZHNldFtkaXNhYmxlZF0gLmJ0bi1pbmZvLC5idG4taW5mby5kaXNhYmxlZDpob3ZlciwuYnRuLWluZm9bZGlzYWJsZWRdOmhvdmVyLGZpZWxkc2V0W2Rpc2FibGVkXSAuYnRuLWluZm86aG92ZXIsLmJ0bi1pbmZvLmRpc2FibGVkOmZvY3VzLC5idG4taW5mb1tkaXNhYmxlZF06Zm9jdXMsZmllbGRzZXRbZGlzYWJsZWRdIC5idG4taW5mbzpmb2N1cywuYnRuLWluZm8uZGlzYWJsZWQuZm9jdXMsLmJ0bi1pbmZvW2Rpc2FibGVkXS5mb2N1cyxmaWVsZHNldFtkaXNhYmxlZF0gLmJ0bi1pbmZvLmZvY3VzLC5idG4taW5mby5kaXNhYmxlZDphY3RpdmUsLmJ0bi1pbmZvW2Rpc2FibGVkXTphY3RpdmUsZmllbGRzZXRbZGlzYWJsZWRdIC5idG4taW5mbzphY3RpdmUsLmJ0bi1pbmZvLmRpc2FibGVkLmFjdGl2ZSwuYnRuLWluZm9bZGlzYWJsZWRdLmFjdGl2ZSxmaWVsZHNldFtkaXNhYmxlZF0gLmJ0bi1pbmZvLmFjdGl2ZXtiYWNrZ3JvdW5kLWNvbG9yOiMyYWFiZDI7YmFja2dyb3VuZC1pbWFnZTpub25lfS5idG4td2FybmluZ3tiYWNrZ3JvdW5kLWltYWdlOi13ZWJraXQtbGluZWFyLWdyYWRpZW50KHRvcCwgI2YwYWQ0ZSAwLCAjZWI5MzE2IDEwMCUpO2JhY2tncm91bmQtaW1hZ2U6LW8tbGluZWFyLWdyYWRpZW50KHRvcCwgI2YwYWQ0ZSAwLCAjZWI5MzE2IDEwMCUpO2JhY2tncm91bmQtaW1hZ2U6LXdlYmtpdC1ncmFkaWVudChsaW5lYXIsIGxlZnQgdG9wLCBsZWZ0IGJvdHRvbSwgY29sb3Itc3RvcCgwLCAjZjBhZDRlKSwgdG8oI2ViOTMxNikpO2JhY2tncm91bmQtaW1hZ2U6bGluZWFyLWdyYWRpZW50KHRvIGJvdHRvbSwgI2YwYWQ0ZSAwLCAjZWI5MzE2IDEwMCUpO2ZpbHRlcjpwcm9naWQ6RFhJbWFnZVRyYW5zZm9ybS5NaWNyb3NvZnQuZ3JhZGllbnQoc3RhcnRDb2xvcnN0cj0nI2ZmZjBhZDRlJywgZW5kQ29sb3JzdHI9JyNmZmViOTMxNicsIEdyYWRpZW50VHlwZT0wKTtmaWx0ZXI6cHJvZ2lkOkRYSW1hZ2VUcmFuc2Zvcm0uTWljcm9zb2Z0LmdyYWRpZW50KGVuYWJsZWQgPSBmYWxzZSk7YmFja2dyb3VuZC1yZXBlYXQ6cmVwZWF0LXg7Ym9yZGVyLWNvbG9yOiNlMzhkMTN9LmJ0bi13YXJuaW5nOmhvdmVyLC5idG4td2FybmluZzpmb2N1c3tiYWNrZ3JvdW5kLWNvbG9yOiNlYjkzMTY7YmFja2dyb3VuZC1wb3NpdGlvbjowIC0xNXB4fS5idG4td2FybmluZzphY3RpdmUsLmJ0bi13YXJuaW5nLmFjdGl2ZXtiYWNrZ3JvdW5kLWNvbG9yOiNlYjkzMTY7Ym9yZGVyLWNvbG9yOiNlMzhkMTN9LmJ0bi13YXJuaW5nLmRpc2FibGVkLC5idG4td2FybmluZ1tkaXNhYmxlZF0sZmllbGRzZXRbZGlzYWJsZWRdIC5idG4td2FybmluZywuYnRuLXdhcm5pbmcuZGlzYWJsZWQ6aG92ZXIsLmJ0bi13YXJuaW5nW2Rpc2FibGVkXTpob3ZlcixmaWVsZHNldFtkaXNhYmxlZF0gLmJ0bi13YXJuaW5nOmhvdmVyLC5idG4td2FybmluZy5kaXNhYmxlZDpmb2N1cywuYnRuLXdhcm5pbmdbZGlzYWJsZWRdOmZvY3VzLGZpZWxkc2V0W2Rpc2FibGVkXSAuYnRuLXdhcm5pbmc6Zm9jdXMsLmJ0bi13YXJuaW5nLmRpc2FibGVkLmZvY3VzLC5idG4td2FybmluZ1tkaXNhYmxlZF0uZm9jdXMsZmllbGRzZXRbZGlzYWJsZWRdIC5idG4td2FybmluZy5mb2N1cywuYnRuLXdhcm5pbmcuZGlzYWJsZWQ6YWN0aXZlLC5idG4td2FybmluZ1tkaXNhYmxlZF06YWN0aXZlLGZpZWxkc2V0W2Rpc2FibGVkXSAuYnRuLXdhcm5pbmc6YWN0aXZlLC5idG4td2FybmluZy5kaXNhYmxlZC5hY3RpdmUsLmJ0bi13YXJuaW5nW2Rpc2FibGVkXS5hY3RpdmUsZmllbGRzZXRbZGlzYWJsZWRdIC5idG4td2FybmluZy5hY3RpdmV7YmFja2dyb3VuZC1jb2xvcjojZWI5MzE2O2JhY2tncm91bmQtaW1hZ2U6bm9uZX0uYnRuLWRhbmdlcntiYWNrZ3JvdW5kLWltYWdlOi13ZWJraXQtbGluZWFyLWdyYWRpZW50KHRvcCwgI2Q5NTM0ZiAwLCAjYzEyZTJhIDEwMCUpO2JhY2tncm91bmQtaW1hZ2U6LW8tbGluZWFyLWdyYWRpZW50KHRvcCwgI2Q5NTM0ZiAwLCAjYzEyZTJhIDEwMCUpO2JhY2tncm91bmQtaW1hZ2U6LXdlYmtpdC1ncmFkaWVudChsaW5lYXIsIGxlZnQgdG9wLCBsZWZ0IGJvdHRvbSwgY29sb3Itc3RvcCgwLCAjZDk1MzRmKSwgdG8oI2MxMmUyYSkpO2JhY2tncm91bmQtaW1hZ2U6bGluZWFyLWdyYWRpZW50KHRvIGJvdHRvbSwgI2Q5NTM0ZiAwLCAjYzEyZTJhIDEwMCUpO2ZpbHRlcjpwcm9naWQ6RFhJbWFnZVRyYW5zZm9ybS5NaWNyb3NvZnQuZ3JhZGllbnQoc3RhcnRDb2xvcnN0cj0nI2ZmZDk1MzRmJywgZW5kQ29sb3JzdHI9JyNmZmMxMmUyYScsIEdyYWRpZW50VHlwZT0wKTtmaWx0ZXI6cHJvZ2lkOkRYSW1hZ2VUcmFuc2Zvcm0uTWljcm9zb2Z0LmdyYWRpZW50KGVuYWJsZWQgPSBmYWxzZSk7YmFja2dyb3VuZC1yZXBlYXQ6cmVwZWF0LXg7Ym9yZGVyLWNvbG9yOiNiOTJjMjh9LmJ0bi1kYW5nZXI6aG92ZXIsLmJ0bi1kYW5nZXI6Zm9jdXN7YmFja2dyb3VuZC1jb2xvcjojYzEyZTJhO2JhY2tncm91bmQtcG9zaXRpb246MCAtMTVweH0uYnRuLWRhbmdlcjphY3RpdmUsLmJ0bi1kYW5nZXIuYWN0aXZle2JhY2tncm91bmQtY29sb3I6I2MxMmUyYTtib3JkZXItY29sb3I6I2I5MmMyOH0uYnRuLWRhbmdlci5kaXNhYmxlZCwuYnRuLWRhbmdlcltkaXNhYmxlZF0sZmllbGRzZXRbZGlzYWJsZWRdIC5idG4tZGFuZ2VyLC5idG4tZGFuZ2VyLmRpc2FibGVkOmhvdmVyLC5idG4tZGFuZ2VyW2Rpc2FibGVkXTpob3ZlcixmaWVsZHNldFtkaXNhYmxlZF0gLmJ0bi1kYW5nZXI6aG92ZXIsLmJ0bi1kYW5nZXIuZGlzYWJsZWQ6Zm9jdXMsLmJ0bi1kYW5nZXJbZGlzYWJsZWRdOmZvY3VzLGZpZWxkc2V0W2Rpc2FibGVkXSAuYnRuLWRhbmdlcjpmb2N1cywuYnRuLWRhbmdlci5kaXNhYmxlZC5mb2N1cywuYnRuLWRhbmdlcltkaXNhYmxlZF0uZm9jdXMsZmllbGRzZXRbZGlzYWJsZWRdIC5idG4tZGFuZ2VyLmZvY3VzLC5idG4tZGFuZ2VyLmRpc2FibGVkOmFjdGl2ZSwuYnRuLWRhbmdlcltkaXNhYmxlZF06YWN0aXZlLGZpZWxkc2V0W2Rpc2FibGVkXSAuYnRuLWRhbmdlcjphY3RpdmUsLmJ0bi1kYW5nZXIuZGlzYWJsZWQuYWN0aXZlLC5idG4tZGFuZ2VyW2Rpc2FibGVkXS5hY3RpdmUsZmllbGRzZXRbZGlzYWJsZWRdIC5idG4tZGFuZ2VyLmFjdGl2ZXtiYWNrZ3JvdW5kLWNvbG9yOiNjMTJlMmE7YmFja2dyb3VuZC1pbWFnZTpub25lfS50aHVtYm5haWwsLmltZy10aHVtYm5haWx7LXdlYmtpdC1ib3gtc2hhZG93OjAgMXB4IDJweCByZ2JhKDAsMCwwLDAuMDc1KTtib3gtc2hhZG93OjAgMXB4IDJweCByZ2JhKDAsMCwwLDAuMDc1KX0uZHJvcGRvd24tbWVudT5saT5hOmhvdmVyLC5kcm9wZG93bi1tZW51PmxpPmE6Zm9jdXN7YmFja2dyb3VuZC1pbWFnZTotd2Via2l0LWxpbmVhci1ncmFkaWVudCh0b3AsICNmNWY1ZjUgMCwgI2U4ZThlOCAxMDAlKTtiYWNrZ3JvdW5kLWltYWdlOi1vLWxpbmVhci1ncmFkaWVudCh0b3AsICNmNWY1ZjUgMCwgI2U4ZThlOCAxMDAlKTtiYWNrZ3JvdW5kLWltYWdlOi13ZWJraXQtZ3JhZGllbnQobGluZWFyLCBsZWZ0IHRvcCwgbGVmdCBib3R0b20sIGNvbG9yLXN0b3AoMCwgI2Y1ZjVmNSksIHRvKCNlOGU4ZTgpKTtiYWNrZ3JvdW5kLWltYWdlOmxpbmVhci1ncmFkaWVudCh0byBib3R0b20sICNmNWY1ZjUgMCwgI2U4ZThlOCAxMDAlKTtiYWNrZ3JvdW5kLXJlcGVhdDpyZXBlYXQteDtmaWx0ZXI6cHJvZ2lkOkRYSW1hZ2VUcmFuc2Zvcm0uTWljcm9zb2Z0LmdyYWRpZW50KHN0YXJ0Q29sb3JzdHI9JyNmZmY1ZjVmNScsIGVuZENvbG9yc3RyPScjZmZlOGU4ZTgnLCBHcmFkaWVudFR5cGU9MCk7YmFja2dyb3VuZC1jb2xvcjojZThlOGU4fS5kcm9wZG93bi1tZW51Pi5hY3RpdmU+YSwuZHJvcGRvd24tbWVudT4uYWN0aXZlPmE6aG92ZXIsLmRyb3Bkb3duLW1lbnU+LmFjdGl2ZT5hOmZvY3Vze2JhY2tncm91bmQtaW1hZ2U6LXdlYmtpdC1saW5lYXItZ3JhZGllbnQodG9wLCAjMzM3YWI3IDAsICMyZTZkYTQgMTAwJSk7YmFja2dyb3VuZC1pbWFnZTotby1saW5lYXItZ3JhZGllbnQodG9wLCAjMzM3YWI3IDAsICMyZTZkYTQgMTAwJSk7YmFja2dyb3VuZC1pbWFnZTotd2Via2l0LWdyYWRpZW50KGxpbmVhciwgbGVmdCB0b3AsIGxlZnQgYm90dG9tLCBjb2xvci1zdG9wKDAsICMzMzdhYjcpLCB0bygjMmU2ZGE0KSk7YmFja2dyb3VuZC1pbWFnZTpsaW5lYXItZ3JhZGllbnQodG8gYm90dG9tLCAjMzM3YWI3IDAsICMyZTZkYTQgMTAwJSk7YmFja2dyb3VuZC1yZXBlYXQ6cmVwZWF0LXg7ZmlsdGVyOnByb2dpZDpEWEltYWdlVHJhbnNmb3JtLk1pY3Jvc29mdC5ncmFkaWVudChzdGFydENvbG9yc3RyPScjZmYzMzdhYjcnLCBlbmRDb2xvcnN0cj0nI2ZmMmU2ZGE0JywgR3JhZGllbnRUeXBlPTApO2JhY2tncm91bmQtY29sb3I6IzJlNmRhNH0ubmF2YmFyLWRlZmF1bHR7YmFja2dyb3VuZC1pbWFnZTotd2Via2l0LWxpbmVhci1ncmFkaWVudCh0b3AsICNmZmYgMCwgI2Y4ZjhmOCAxMDAlKTtiYWNrZ3JvdW5kLWltYWdlOi1vLWxpbmVhci1ncmFkaWVudCh0b3AsICNmZmYgMCwgI2Y4ZjhmOCAxMDAlKTtiYWNrZ3JvdW5kLWltYWdlOi13ZWJraXQtZ3JhZGllbnQobGluZWFyLCBsZWZ0IHRvcCwgbGVmdCBib3R0b20sIGNvbG9yLXN0b3AoMCwgI2ZmZiksIHRvKCNmOGY4ZjgpKTtiYWNrZ3JvdW5kLWltYWdlOmxpbmVhci1ncmFkaWVudCh0byBib3R0b20sICNmZmYgMCwgI2Y4ZjhmOCAxMDAlKTtiYWNrZ3JvdW5kLXJlcGVhdDpyZXBlYXQteDtmaWx0ZXI6cHJvZ2lkOkRYSW1hZ2VUcmFuc2Zvcm0uTWljcm9zb2Z0LmdyYWRpZW50KHN0YXJ0Q29sb3JzdHI9JyNmZmZmZmZmZicsIGVuZENvbG9yc3RyPScjZmZmOGY4ZjgnLCBHcmFkaWVudFR5cGU9MCk7ZmlsdGVyOnByb2dpZDpEWEltYWdlVHJhbnNmb3JtLk1pY3Jvc29mdC5ncmFkaWVudChlbmFibGVkID0gZmFsc2UpO2JvcmRlci1yYWRpdXM6NHB4Oy13ZWJraXQtYm94LXNoYWRvdzppbnNldCAwIDFweCAwIHJnYmEoMjU1LDI1NSwyNTUsMC4xNSksMCAxcHggNXB4IHJnYmEoMCwwLDAsMC4wNzUpO2JveC1zaGFkb3c6aW5zZXQgMCAxcHggMCByZ2JhKDI1NSwyNTUsMjU1LDAuMTUpLDAgMXB4IDVweCByZ2JhKDAsMCwwLDAuMDc1KX0ubmF2YmFyLWRlZmF1bHQgLm5hdmJhci1uYXY+Lm9wZW4+YSwubmF2YmFyLWRlZmF1bHQgLm5hdmJhci1uYXY+LmFjdGl2ZT5he2JhY2tncm91bmQtaW1hZ2U6LXdlYmtpdC1saW5lYXItZ3JhZGllbnQodG9wLCAjZGJkYmRiIDAsICNlMmUyZTIgMTAwJSk7YmFja2dyb3VuZC1pbWFnZTotby1saW5lYXItZ3JhZGllbnQodG9wLCAjZGJkYmRiIDAsICNlMmUyZTIgMTAwJSk7YmFja2dyb3VuZC1pbWFnZTotd2Via2l0LWdyYWRpZW50KGxpbmVhciwgbGVmdCB0b3AsIGxlZnQgYm90dG9tLCBjb2xvci1zdG9wKDAsICNkYmRiZGIpLCB0bygjZTJlMmUyKSk7YmFja2dyb3VuZC1pbWFnZTpsaW5lYXItZ3JhZGllbnQodG8gYm90dG9tLCAjZGJkYmRiIDAsICNlMmUyZTIgMTAwJSk7YmFja2dyb3VuZC1yZXBlYXQ6cmVwZWF0LXg7ZmlsdGVyOnByb2dpZDpEWEltYWdlVHJhbnNmb3JtLk1pY3Jvc29mdC5ncmFkaWVudChzdGFydENvbG9yc3RyPScjZmZkYmRiZGInLCBlbmRDb2xvcnN0cj0nI2ZmZTJlMmUyJywgR3JhZGllbnRUeXBlPTApOy13ZWJraXQtYm94LXNoYWRvdzppbnNldCAwIDNweCA5cHggcmdiYSgwLDAsMCwwLjA3NSk7Ym94LXNoYWRvdzppbnNldCAwIDNweCA5cHggcmdiYSgwLDAsMCwwLjA3NSl9Lm5hdmJhci1icmFuZCwubmF2YmFyLW5hdj5saT5he3RleHQtc2hhZG93OjAgMXB4IDAgcmdiYSgyNTUsMjU1LDI1NSwwLjI1KX0ubmF2YmFyLWludmVyc2V7YmFja2dyb3VuZC1pbWFnZTotd2Via2l0LWxpbmVhci1ncmFkaWVudCh0b3AsICMzYzNjM2MgMCwgIzIyMiAxMDAlKTtiYWNrZ3JvdW5kLWltYWdlOi1vLWxpbmVhci1ncmFkaWVudCh0b3AsICMzYzNjM2MgMCwgIzIyMiAxMDAlKTtiYWNrZ3JvdW5kLWltYWdlOi13ZWJraXQtZ3JhZGllbnQobGluZWFyLCBsZWZ0IHRvcCwgbGVmdCBib3R0b20sIGNvbG9yLXN0b3AoMCwgIzNjM2MzYyksIHRvKCMyMjIpKTtiYWNrZ3JvdW5kLWltYWdlOmxpbmVhci1ncmFkaWVudCh0byBib3R0b20sICMzYzNjM2MgMCwgIzIyMiAxMDAlKTtiYWNrZ3JvdW5kLXJlcGVhdDpyZXBlYXQteDtmaWx0ZXI6cHJvZ2lkOkRYSW1hZ2VUcmFuc2Zvcm0uTWljcm9zb2Z0LmdyYWRpZW50KHN0YXJ0Q29sb3JzdHI9JyNmZjNjM2MzYycsIGVuZENvbG9yc3RyPScjZmYyMjIyMjInLCBHcmFkaWVudFR5cGU9MCk7ZmlsdGVyOnByb2dpZDpEWEltYWdlVHJhbnNmb3JtLk1pY3Jvc29mdC5ncmFkaWVudChlbmFibGVkID0gZmFsc2UpO2JvcmRlci1yYWRpdXM6NHB4fS5uYXZiYXItaW52ZXJzZSAubmF2YmFyLW5hdj4ub3Blbj5hLC5uYXZiYXItaW52ZXJzZSAubmF2YmFyLW5hdj4uYWN0aXZlPmF7YmFja2dyb3VuZC1pbWFnZTotd2Via2l0LWxpbmVhci1ncmFkaWVudCh0b3AsICMwODA4MDggMCwgIzBmMGYwZiAxMDAlKTtiYWNrZ3JvdW5kLWltYWdlOi1vLWxpbmVhci1ncmFkaWVudCh0b3AsICMwODA4MDggMCwgIzBmMGYwZiAxMDAlKTtiYWNrZ3JvdW5kLWltYWdlOi13ZWJraXQtZ3JhZGllbnQobGluZWFyLCBsZWZ0IHRvcCwgbGVmdCBib3R0b20sIGNvbG9yLXN0b3AoMCwgIzA4MDgwOCksIHRvKCMwZjBmMGYpKTtiYWNrZ3JvdW5kLWltYWdlOmxpbmVhci1ncmFkaWVudCh0byBib3R0b20sICMwODA4MDggMCwgIzBmMGYwZiAxMDAlKTtiYWNrZ3JvdW5kLXJlcGVhdDpyZXBlYXQteDtmaWx0ZXI6cHJvZ2lkOkRYSW1hZ2VUcmFuc2Zvcm0uTWljcm9zb2Z0LmdyYWRpZW50KHN0YXJ0Q29sb3JzdHI9JyNmZjA4MDgwOCcsIGVuZENvbG9yc3RyPScjZmYwZjBmMGYnLCBHcmFkaWVudFR5cGU9MCk7LXdlYmtpdC1ib3gtc2hhZG93Omluc2V0IDAgM3B4IDlweCByZ2JhKDAsMCwwLDAuMjUpO2JveC1zaGFkb3c6aW5zZXQgMCAzcHggOXB4IHJnYmEoMCwwLDAsMC4yNSl9Lm5hdmJhci1pbnZlcnNlIC5uYXZiYXItYnJhbmQsLm5hdmJhci1pbnZlcnNlIC5uYXZiYXItbmF2PmxpPmF7dGV4dC1zaGFkb3c6MCAtMXB4IDAgcmdiYSgwLDAsMCwwLjI1KX0ubmF2YmFyLXN0YXRpYy10b3AsLm5hdmJhci1maXhlZC10b3AsLm5hdmJhci1maXhlZC1ib3R0b217Ym9yZGVyLXJhZGl1czowfUBtZWRpYSAobWF4LXdpZHRoOjc2N3B4KXsubmF2YmFyIC5uYXZiYXItbmF2IC5vcGVuIC5kcm9wZG93bi1tZW51Pi5hY3RpdmU+YSwubmF2YmFyIC5uYXZiYXItbmF2IC5vcGVuIC5kcm9wZG93bi1tZW51Pi5hY3RpdmU+YTpob3ZlciwubmF2YmFyIC5uYXZiYXItbmF2IC5vcGVuIC5kcm9wZG93bi1tZW51Pi5hY3RpdmU+YTpmb2N1c3tjb2xvcjojZmZmO2JhY2tncm91bmQtaW1hZ2U6LXdlYmtpdC1saW5lYXItZ3JhZGllbnQodG9wLCAjMzM3YWI3IDAsICMyZTZkYTQgMTAwJSk7YmFja2dyb3VuZC1pbWFnZTotby1saW5lYXItZ3JhZGllbnQodG9wLCAjMzM3YWI3IDAsICMyZTZkYTQgMTAwJSk7YmFja2dyb3VuZC1pbWFnZTotd2Via2l0LWdyYWRpZW50KGxpbmVhciwgbGVmdCB0b3AsIGxlZnQgYm90dG9tLCBjb2xvci1zdG9wKDAsICMzMzdhYjcpLCB0bygjMmU2ZGE0KSk7YmFja2dyb3VuZC1pbWFnZTpsaW5lYXItZ3JhZGllbnQodG8gYm90dG9tLCAjMzM3YWI3IDAsICMyZTZkYTQgMTAwJSk7YmFja2dyb3VuZC1yZXBlYXQ6cmVwZWF0LXg7ZmlsdGVyOnByb2dpZDpEWEltYWdlVHJhbnNmb3JtLk1pY3Jvc29mdC5ncmFkaWVudChzdGFydENvbG9yc3RyPScjZmYzMzdhYjcnLCBlbmRDb2xvcnN0cj0nI2ZmMmU2ZGE0JywgR3JhZGllbnRUeXBlPTApfX0uYWxlcnR7dGV4dC1zaGFkb3c6MCAxcHggMCByZ2JhKDI1NSwyNTUsMjU1LDAuMik7LXdlYmtpdC1ib3gtc2hhZG93Omluc2V0IDAgMXB4IDAgcmdiYSgyNTUsMjU1LDI1NSwwLjI1KSwwIDFweCAycHggcmdiYSgwLDAsMCwwLjA1KTtib3gtc2hhZG93Omluc2V0IDAgMXB4IDAgcmdiYSgyNTUsMjU1LDI1NSwwLjI1KSwwIDFweCAycHggcmdiYSgwLDAsMCwwLjA1KX0uYWxlcnQtc3VjY2Vzc3tiYWNrZ3JvdW5kLWltYWdlOi13ZWJraXQtbGluZWFyLWdyYWRpZW50KHRvcCwgI2RmZjBkOCAwLCAjYzhlNWJjIDEwMCUpO2JhY2tncm91bmQtaW1hZ2U6LW8tbGluZWFyLWdyYWRpZW50KHRvcCwgI2RmZjBkOCAwLCAjYzhlNWJjIDEwMCUpO2JhY2tncm91bmQtaW1hZ2U6LXdlYmtpdC1ncmFkaWVudChsaW5lYXIsIGxlZnQgdG9wLCBsZWZ0IGJvdHRvbSwgY29sb3Itc3RvcCgwLCAjZGZmMGQ4KSwgdG8oI2M4ZTViYykpO2JhY2tncm91bmQtaW1hZ2U6bGluZWFyLWdyYWRpZW50KHRvIGJvdHRvbSwgI2RmZjBkOCAwLCAjYzhlNWJjIDEwMCUpO2JhY2tncm91bmQtcmVwZWF0OnJlcGVhdC14O2ZpbHRlcjpwcm9naWQ6RFhJbWFnZVRyYW5zZm9ybS5NaWNyb3NvZnQuZ3JhZGllbnQoc3RhcnRDb2xvcnN0cj0nI2ZmZGZmMGQ4JywgZW5kQ29sb3JzdHI9JyNmZmM4ZTViYycsIEdyYWRpZW50VHlwZT0wKTtib3JkZXItY29sb3I6I2IyZGJhMX0uYWxlcnQtaW5mb3tiYWNrZ3JvdW5kLWltYWdlOi13ZWJraXQtbGluZWFyLWdyYWRpZW50KHRvcCwgI2Q5ZWRmNyAwLCAjYjlkZWYwIDEwMCUpO2JhY2tncm91bmQtaW1hZ2U6LW8tbGluZWFyLWdyYWRpZW50KHRvcCwgI2Q5ZWRmNyAwLCAjYjlkZWYwIDEwMCUpO2JhY2tncm91bmQtaW1hZ2U6LXdlYmtpdC1ncmFkaWVudChsaW5lYXIsIGxlZnQgdG9wLCBsZWZ0IGJvdHRvbSwgY29sb3Itc3RvcCgwLCAjZDllZGY3KSwgdG8oI2I5ZGVmMCkpO2JhY2tncm91bmQtaW1hZ2U6bGluZWFyLWdyYWRpZW50KHRvIGJvdHRvbSwgI2Q5ZWRmNyAwLCAjYjlkZWYwIDEwMCUpO2JhY2tncm91bmQtcmVwZWF0OnJlcGVhdC14O2ZpbHRlcjpwcm9naWQ6RFhJbWFnZVRyYW5zZm9ybS5NaWNyb3NvZnQuZ3JhZGllbnQoc3RhcnRDb2xvcnN0cj0nI2ZmZDllZGY3JywgZW5kQ29sb3JzdHI9JyNmZmI5ZGVmMCcsIEdyYWRpZW50VHlwZT0wKTtib3JkZXItY29sb3I6IzlhY2ZlYX0uYWxlcnQtd2FybmluZ3tiYWNrZ3JvdW5kLWltYWdlOi13ZWJraXQtbGluZWFyLWdyYWRpZW50KHRvcCwgI2ZjZjhlMyAwLCAjZjhlZmMwIDEwMCUpO2JhY2tncm91bmQtaW1hZ2U6LW8tbGluZWFyLWdyYWRpZW50KHRvcCwgI2ZjZjhlMyAwLCAjZjhlZmMwIDEwMCUpO2JhY2tncm91bmQtaW1hZ2U6LXdlYmtpdC1ncmFkaWVudChsaW5lYXIsIGxlZnQgdG9wLCBsZWZ0IGJvdHRvbSwgY29sb3Itc3RvcCgwLCAjZmNmOGUzKSwgdG8oI2Y4ZWZjMCkpO2JhY2tncm91bmQtaW1hZ2U6bGluZWFyLWdyYWRpZW50KHRvIGJvdHRvbSwgI2ZjZjhlMyAwLCAjZjhlZmMwIDEwMCUpO2JhY2tncm91bmQtcmVwZWF0OnJlcGVhdC14O2ZpbHRlcjpwcm9naWQ6RFhJbWFnZVRyYW5zZm9ybS5NaWNyb3NvZnQuZ3JhZGllbnQoc3RhcnRDb2xvcnN0cj0nI2ZmZmNmOGUzJywgZW5kQ29sb3JzdHI9JyNmZmY4ZWZjMCcsIEdyYWRpZW50VHlwZT0wKTtib3JkZXItY29sb3I6I2Y1ZTc5ZX0uYWxlcnQtZGFuZ2Vye2JhY2tncm91bmQtaW1hZ2U6LXdlYmtpdC1saW5lYXItZ3JhZGllbnQodG9wLCAjZjJkZWRlIDAsICNlN2MzYzMgMTAwJSk7YmFja2dyb3VuZC1pbWFnZTotby1saW5lYXItZ3JhZGllbnQodG9wLCAjZjJkZWRlIDAsICNlN2MzYzMgMTAwJSk7YmFja2dyb3VuZC1pbWFnZTotd2Via2l0LWdyYWRpZW50KGxpbmVhciwgbGVmdCB0b3AsIGxlZnQgYm90dG9tLCBjb2xvci1zdG9wKDAsICNmMmRlZGUpLCB0bygjZTdjM2MzKSk7YmFja2dyb3VuZC1pbWFnZTpsaW5lYXItZ3JhZGllbnQodG8gYm90dG9tLCAjZjJkZWRlIDAsICNlN2MzYzMgMTAwJSk7YmFja2dyb3VuZC1yZXBlYXQ6cmVwZWF0LXg7ZmlsdGVyOnByb2dpZDpEWEltYWdlVHJhbnNmb3JtLk1pY3Jvc29mdC5ncmFkaWVudChzdGFydENvbG9yc3RyPScjZmZmMmRlZGUnLCBlbmRDb2xvcnN0cj0nI2ZmZTdjM2MzJywgR3JhZGllbnRUeXBlPTApO2JvcmRlci1jb2xvcjojZGNhN2E3fS5wcm9ncmVzc3tiYWNrZ3JvdW5kLWltYWdlOi13ZWJraXQtbGluZWFyLWdyYWRpZW50KHRvcCwgI2ViZWJlYiAwLCAjZjVmNWY1IDEwMCUpO2JhY2tncm91bmQtaW1hZ2U6LW8tbGluZWFyLWdyYWRpZW50KHRvcCwgI2ViZWJlYiAwLCAjZjVmNWY1IDEwMCUpO2JhY2tncm91bmQtaW1hZ2U6LXdlYmtpdC1ncmFkaWVudChsaW5lYXIsIGxlZnQgdG9wLCBsZWZ0IGJvdHRvbSwgY29sb3Itc3RvcCgwLCAjZWJlYmViKSwgdG8oI2Y1ZjVmNSkpO2JhY2tncm91bmQtaW1hZ2U6bGluZWFyLWdyYWRpZW50KHRvIGJvdHRvbSwgI2ViZWJlYiAwLCAjZjVmNWY1IDEwMCUpO2JhY2tncm91bmQtcmVwZWF0OnJlcGVhdC14O2ZpbHRlcjpwcm9naWQ6RFhJbWFnZVRyYW5zZm9ybS5NaWNyb3NvZnQuZ3JhZGllbnQoc3RhcnRDb2xvcnN0cj0nI2ZmZWJlYmViJywgZW5kQ29sb3JzdHI9JyNmZmY1ZjVmNScsIEdyYWRpZW50VHlwZT0wKX0ucHJvZ3Jlc3MtYmFye2JhY2tncm91bmQtaW1hZ2U6LXdlYmtpdC1saW5lYXItZ3JhZGllbnQodG9wLCAjMzM3YWI3IDAsICMyODYwOTAgMTAwJSk7YmFja2dyb3VuZC1pbWFnZTotby1saW5lYXItZ3JhZGllbnQodG9wLCAjMzM3YWI3IDAsICMyODYwOTAgMTAwJSk7YmFja2dyb3VuZC1pbWFnZTotd2Via2l0LWdyYWRpZW50KGxpbmVhciwgbGVmdCB0b3AsIGxlZnQgYm90dG9tLCBjb2xvci1zdG9wKDAsICMzMzdhYjcpLCB0bygjMjg2MDkwKSk7YmFja2dyb3VuZC1pbWFnZTpsaW5lYXItZ3JhZGllbnQodG8gYm90dG9tLCAjMzM3YWI3IDAsICMyODYwOTAgMTAwJSk7YmFja2dyb3VuZC1yZXBlYXQ6cmVwZWF0LXg7ZmlsdGVyOnByb2dpZDpEWEltYWdlVHJhbnNmb3JtLk1pY3Jvc29mdC5ncmFkaWVudChzdGFydENvbG9yc3RyPScjZmYzMzdhYjcnLCBlbmRDb2xvcnN0cj0nI2ZmMjg2MDkwJywgR3JhZGllbnRUeXBlPTApfS5wcm9ncmVzcy1iYXItc3VjY2Vzc3tiYWNrZ3JvdW5kLWltYWdlOi13ZWJraXQtbGluZWFyLWdyYWRpZW50KHRvcCwgI0VEMUMyNCAwLCAjNDQ5ZDQ0IDEwMCUpO2JhY2tncm91bmQtaW1hZ2U6LW8tbGluZWFyLWdyYWRpZW50KHRvcCwgI0VEMUMyNCAwLCAjNDQ5ZDQ0IDEwMCUpO2JhY2tncm91bmQtaW1hZ2U6LXdlYmtpdC1ncmFkaWVudChsaW5lYXIsIGxlZnQgdG9wLCBsZWZ0IGJvdHRvbSwgY29sb3Itc3RvcCgwLCAjRUQxQzI0KSwgdG8oIzQ0OWQ0NCkpO2JhY2tncm91bmQtaW1hZ2U6bGluZWFyLWdyYWRpZW50KHRvIGJvdHRvbSwgI0VEMUMyNCAwLCAjNDQ5ZDQ0IDEwMCUpO2JhY2tncm91bmQtcmVwZWF0OnJlcGVhdC14O2ZpbHRlcjpwcm9naWQ6RFhJbWFnZVRyYW5zZm9ybS5NaWNyb3NvZnQuZ3JhZGllbnQoc3RhcnRDb2xvcnN0cj0nI2ZmRUQxQzI0JywgZW5kQ29sb3JzdHI9JyNmZjQ0OWQ0NCcsIEdyYWRpZW50VHlwZT0wKX0ucHJvZ3Jlc3MtYmFyLWluZm97YmFja2dyb3VuZC1pbWFnZTotd2Via2l0LWxpbmVhci1ncmFkaWVudCh0b3AsICM1YmMwZGUgMCwgIzMxYjBkNSAxMDAlKTtiYWNrZ3JvdW5kLWltYWdlOi1vLWxpbmVhci1ncmFkaWVudCh0b3AsICM1YmMwZGUgMCwgIzMxYjBkNSAxMDAlKTtiYWNrZ3JvdW5kLWltYWdlOi13ZWJraXQtZ3JhZGllbnQobGluZWFyLCBsZWZ0IHRvcCwgbGVmdCBib3R0b20sIGNvbG9yLXN0b3AoMCwgIzViYzBkZSksIHRvKCMzMWIwZDUpKTtiYWNrZ3JvdW5kLWltYWdlOmxpbmVhci1ncmFkaWVudCh0byBib3R0b20sICM1YmMwZGUgMCwgIzMxYjBkNSAxMDAlKTtiYWNrZ3JvdW5kLXJlcGVhdDpyZXBlYXQteDtmaWx0ZXI6cHJvZ2lkOkRYSW1hZ2VUcmFuc2Zvcm0uTWljcm9zb2Z0LmdyYWRpZW50KHN0YXJ0Q29sb3JzdHI9JyNmZjViYzBkZScsIGVuZENvbG9yc3RyPScjZmYzMWIwZDUnLCBHcmFkaWVudFR5cGU9MCl9LnByb2dyZXNzLWJhci13YXJuaW5ne2JhY2tncm91bmQtaW1hZ2U6LXdlYmtpdC1saW5lYXItZ3JhZGllbnQodG9wLCAjZjBhZDRlIDAsICNlYzk3MWYgMTAwJSk7YmFja2dyb3VuZC1pbWFnZTotby1saW5lYXItZ3JhZGllbnQodG9wLCAjZjBhZDRlIDAsICNlYzk3MWYgMTAwJSk7YmFja2dyb3VuZC1pbWFnZTotd2Via2l0LWdyYWRpZW50KGxpbmVhciwgbGVmdCB0b3AsIGxlZnQgYm90dG9tLCBjb2xvci1zdG9wKDAsICNmMGFkNGUpLCB0bygjZWM5NzFmKSk7YmFja2dyb3VuZC1pbWFnZTpsaW5lYXItZ3JhZGllbnQodG8gYm90dG9tLCAjZjBhZDRlIDAsICNlYzk3MWYgMTAwJSk7YmFja2dyb3VuZC1yZXBlYXQ6cmVwZWF0LXg7ZmlsdGVyOnByb2dpZDpEWEltYWdlVHJhbnNmb3JtLk1pY3Jvc29mdC5ncmFkaWVudChzdGFydENvbG9yc3RyPScjZmZmMGFkNGUnLCBlbmRDb2xvcnN0cj0nI2ZmZWM5NzFmJywgR3JhZGllbnRUeXBlPTApfS5wcm9ncmVzcy1iYXItZGFuZ2Vye2JhY2tncm91bmQtaW1hZ2U6LXdlYmtpdC1saW5lYXItZ3JhZGllbnQodG9wLCAjZDk1MzRmIDAsICNjOTMwMmMgMTAwJSk7YmFja2dyb3VuZC1pbWFnZTotby1saW5lYXItZ3JhZGllbnQodG9wLCAjZDk1MzRmIDAsICNjOTMwMmMgMTAwJSk7YmFja2dyb3VuZC1pbWFnZTotd2Via2l0LWdyYWRpZW50KGxpbmVhciwgbGVmdCB0b3AsIGxlZnQgYm90dG9tLCBjb2xvci1zdG9wKDAsICNkOTUzNGYpLCB0bygjYzkzMDJjKSk7YmFja2dyb3VuZC1pbWFnZTpsaW5lYXItZ3JhZGllbnQodG8gYm90dG9tLCAjZDk1MzRmIDAsICNjOTMwMmMgMTAwJSk7YmFja2dyb3VuZC1yZXBlYXQ6cmVwZWF0LXg7ZmlsdGVyOnByb2dpZDpEWEltYWdlVHJhbnNmb3JtLk1pY3Jvc29mdC5ncmFkaWVudChzdGFydENvbG9yc3RyPScjZmZkOTUzNGYnLCBlbmRDb2xvcnN0cj0nI2ZmYzkzMDJjJywgR3JhZGllbnRUeXBlPTApfS5wcm9ncmVzcy1iYXItc3RyaXBlZHtiYWNrZ3JvdW5kLWltYWdlOi13ZWJraXQtbGluZWFyLWdyYWRpZW50KDQ1ZGVnLCByZ2JhKDI1NSwyNTUsMjU1LDAuMTUpIDI1JSwgdHJhbnNwYXJlbnQgMjUlLCB0cmFuc3BhcmVudCA1MCUsIHJnYmEoMjU1LDI1NSwyNTUsMC4xNSkgNTAlLCByZ2JhKDI1NSwyNTUsMjU1LDAuMTUpIDc1JSwgdHJhbnNwYXJlbnQgNzUlLCB0cmFuc3BhcmVudCk7YmFja2dyb3VuZC1pbWFnZTotby1saW5lYXItZ3JhZGllbnQoNDVkZWcsIHJnYmEoMjU1LDI1NSwyNTUsMC4xNSkgMjUlLCB0cmFuc3BhcmVudCAyNSUsIHRyYW5zcGFyZW50IDUwJSwgcmdiYSgyNTUsMjU1LDI1NSwwLjE1KSA1MCUsIHJnYmEoMjU1LDI1NSwyNTUsMC4xNSkgNzUlLCB0cmFuc3BhcmVudCA3NSUsIHRyYW5zcGFyZW50KTtiYWNrZ3JvdW5kLWltYWdlOmxpbmVhci1ncmFkaWVudCg0NWRlZywgcmdiYSgyNTUsMjU1LDI1NSwwLjE1KSAyNSUsIHRyYW5zcGFyZW50IDI1JSwgdHJhbnNwYXJlbnQgNTAlLCByZ2JhKDI1NSwyNTUsMjU1LDAuMTUpIDUwJSwgcmdiYSgyNTUsMjU1LDI1NSwwLjE1KSA3NSUsIHRyYW5zcGFyZW50IDc1JSwgdHJhbnNwYXJlbnQpfS5saXN0LWdyb3Vwe2JvcmRlci1yYWRpdXM6NHB4Oy13ZWJraXQtYm94LXNoYWRvdzowIDFweCAycHggcmdiYSgwLDAsMCwwLjA3NSk7Ym94LXNoYWRvdzowIDFweCAycHggcmdiYSgwLDAsMCwwLjA3NSl9Lmxpc3QtZ3JvdXAtaXRlbS5hY3RpdmUsLmxpc3QtZ3JvdXAtaXRlbS5hY3RpdmU6aG92ZXIsLmxpc3QtZ3JvdXAtaXRlbS5hY3RpdmU6Zm9jdXN7dGV4dC1zaGFkb3c6MCAtMXB4IDAgIzI4NjA5MDtiYWNrZ3JvdW5kLWltYWdlOi13ZWJraXQtbGluZWFyLWdyYWRpZW50KHRvcCwgIzMzN2FiNyAwLCAjMmI2NjlhIDEwMCUpO2JhY2tncm91bmQtaW1hZ2U6LW8tbGluZWFyLWdyYWRpZW50KHRvcCwgIzMzN2FiNyAwLCAjMmI2NjlhIDEwMCUpO2JhY2tncm91bmQtaW1hZ2U6LXdlYmtpdC1ncmFkaWVudChsaW5lYXIsIGxlZnQgdG9wLCBsZWZ0IGJvdHRvbSwgY29sb3Itc3RvcCgwLCAjMzM3YWI3KSwgdG8oIzJiNjY5YSkpO2JhY2tncm91bmQtaW1hZ2U6bGluZWFyLWdyYWRpZW50KHRvIGJvdHRvbSwgIzMzN2FiNyAwLCAjMmI2NjlhIDEwMCUpO2JhY2tncm91bmQtcmVwZWF0OnJlcGVhdC14O2ZpbHRlcjpwcm9naWQ6RFhJbWFnZVRyYW5zZm9ybS5NaWNyb3NvZnQuZ3JhZGllbnQoc3RhcnRDb2xvcnN0cj0nI2ZmMzM3YWI3JywgZW5kQ29sb3JzdHI9JyNmZjJiNjY5YScsIEdyYWRpZW50VHlwZT0wKTtib3JkZXItY29sb3I6IzJiNjY5YX0ubGlzdC1ncm91cC1pdGVtLmFjdGl2ZSAuYmFkZ2UsLmxpc3QtZ3JvdXAtaXRlbS5hY3RpdmU6aG92ZXIgLmJhZGdlLC5saXN0LWdyb3VwLWl0ZW0uYWN0aXZlOmZvY3VzIC5iYWRnZXt0ZXh0LXNoYWRvdzpub25lfS5wYW5lbHstd2Via2l0LWJveC1zaGFkb3c6MCAxcHggMnB4IHJnYmEoMCwwLDAsMC4wNSk7Ym94LXNoYWRvdzowIDFweCAycHggcmdiYSgwLDAsMCwwLjA1KX0ucGFuZWwtZGVmYXVsdD4ucGFuZWwtaGVhZGluZ3tiYWNrZ3JvdW5kLWltYWdlOi13ZWJraXQtbGluZWFyLWdyYWRpZW50KHRvcCwgI2Y1ZjVmNSAwLCAjZThlOGU4IDEwMCUpO2JhY2tncm91bmQtaW1hZ2U6LW8tbGluZWFyLWdyYWRpZW50KHRvcCwgI2Y1ZjVmNSAwLCAjZThlOGU4IDEwMCUpO2JhY2tncm91bmQtaW1hZ2U6LXdlYmtpdC1ncmFkaWVudChsaW5lYXIsIGxlZnQgdG9wLCBsZWZ0IGJvdHRvbSwgY29sb3Itc3RvcCgwLCAjZjVmNWY1KSwgdG8oI2U4ZThlOCkpO2JhY2tncm91bmQtaW1hZ2U6bGluZWFyLWdyYWRpZW50KHRvIGJvdHRvbSwgI2Y1ZjVmNSAwLCAjZThlOGU4IDEwMCUpO2JhY2tncm91bmQtcmVwZWF0OnJlcGVhdC14O2ZpbHRlcjpwcm9naWQ6RFhJbWFnZVRyYW5zZm9ybS5NaWNyb3NvZnQuZ3JhZGllbnQoc3RhcnRDb2xvcnN0cj0nI2ZmZjVmNWY1JywgZW5kQ29sb3JzdHI9JyNmZmU4ZThlOCcsIEdyYWRpZW50VHlwZT0wKX0ucGFuZWwtcHJpbWFyeT4ucGFuZWwtaGVhZGluZ3tiYWNrZ3JvdW5kLWltYWdlOi13ZWJraXQtbGluZWFyLWdyYWRpZW50KHRvcCwgIzMzN2FiNyAwLCAjMmU2ZGE0IDEwMCUpO2JhY2tncm91bmQtaW1hZ2U6LW8tbGluZWFyLWdyYWRpZW50KHRvcCwgIzMzN2FiNyAwLCAjMmU2ZGE0IDEwMCUpO2JhY2tncm91bmQtaW1hZ2U6LXdlYmtpdC1ncmFkaWVudChsaW5lYXIsIGxlZnQgdG9wLCBsZWZ0IGJvdHRvbSwgY29sb3Itc3RvcCgwLCAjMzM3YWI3KSwgdG8oIzJlNmRhNCkpO2JhY2tncm91bmQtaW1hZ2U6bGluZWFyLWdyYWRpZW50KHRvIGJvdHRvbSwgIzMzN2FiNyAwLCAjMmU2ZGE0IDEwMCUpO2JhY2tncm91bmQtcmVwZWF0OnJlcGVhdC14O2ZpbHRlcjpwcm9naWQ6RFhJbWFnZVRyYW5zZm9ybS5NaWNyb3NvZnQuZ3JhZGllbnQoc3RhcnRDb2xvcnN0cj0nI2ZmMzM3YWI3JywgZW5kQ29sb3JzdHI9JyNmZjJlNmRhNCcsIEdyYWRpZW50VHlwZT0wKX0ucGFuZWwtc3VjY2Vzcz4ucGFuZWwtaGVhZGluZ3tiYWNrZ3JvdW5kLWltYWdlOi13ZWJraXQtbGluZWFyLWdyYWRpZW50KHRvcCwgI2RmZjBkOCAwLCAjZDBlOWM2IDEwMCUpO2JhY2tncm91bmQtaW1hZ2U6LW8tbGluZWFyLWdyYWRpZW50KHRvcCwgI2RmZjBkOCAwLCAjZDBlOWM2IDEwMCUpO2JhY2tncm91bmQtaW1hZ2U6LXdlYmtpdC1ncmFkaWVudChsaW5lYXIsIGxlZnQgdG9wLCBsZWZ0IGJvdHRvbSwgY29sb3Itc3RvcCgwLCAjZGZmMGQ4KSwgdG8oI2QwZTljNikpO2JhY2tncm91bmQtaW1hZ2U6bGluZWFyLWdyYWRpZW50KHRvIGJvdHRvbSwgI2RmZjBkOCAwLCAjZDBlOWM2IDEwMCUpO2JhY2tncm91bmQtcmVwZWF0OnJlcGVhdC14O2ZpbHRlcjpwcm9naWQ6RFhJbWFnZVRyYW5zZm9ybS5NaWNyb3NvZnQuZ3JhZGllbnQoc3RhcnRDb2xvcnN0cj0nI2ZmZGZmMGQ4JywgZW5kQ29sb3JzdHI9JyNmZmQwZTljNicsIEdyYWRpZW50VHlwZT0wKX0ucGFuZWwtaW5mbz4ucGFuZWwtaGVhZGluZ3tiYWNrZ3JvdW5kLWltYWdlOi13ZWJraXQtbGluZWFyLWdyYWRpZW50KHRvcCwgI2Q5ZWRmNyAwLCAjYzRlM2YzIDEwMCUpO2JhY2tncm91bmQtaW1hZ2U6LW8tbGluZWFyLWdyYWRpZW50KHRvcCwgI2Q5ZWRmNyAwLCAjYzRlM2YzIDEwMCUpO2JhY2tncm91bmQtaW1hZ2U6LXdlYmtpdC1ncmFkaWVudChsaW5lYXIsIGxlZnQgdG9wLCBsZWZ0IGJvdHRvbSwgY29sb3Itc3RvcCgwLCAjZDllZGY3KSwgdG8oI2M0ZTNmMykpO2JhY2tncm91bmQtaW1hZ2U6bGluZWFyLWdyYWRpZW50KHRvIGJvdHRvbSwgI2Q5ZWRmNyAwLCAjYzRlM2YzIDEwMCUpO2JhY2tncm91bmQtcmVwZWF0OnJlcGVhdC14O2ZpbHRlcjpwcm9naWQ6RFhJbWFnZVRyYW5zZm9ybS5NaWNyb3NvZnQuZ3JhZGllbnQoc3RhcnRDb2xvcnN0cj0nI2ZmZDllZGY3JywgZW5kQ29sb3JzdHI9JyNmZmM0ZTNmMycsIEdyYWRpZW50VHlwZT0wKX0ucGFuZWwtd2FybmluZz4ucGFuZWwtaGVhZGluZ3tiYWNrZ3JvdW5kLWltYWdlOi13ZWJraXQtbGluZWFyLWdyYWRpZW50KHRvcCwgI2ZjZjhlMyAwLCAjZmFmMmNjIDEwMCUpO2JhY2tncm91bmQtaW1hZ2U6LW8tbGluZWFyLWdyYWRpZW50KHRvcCwgI2ZjZjhlMyAwLCAjZmFmMmNjIDEwMCUpO2JhY2tncm91bmQtaW1hZ2U6LXdlYmtpdC1ncmFkaWVudChsaW5lYXIsIGxlZnQgdG9wLCBsZWZ0IGJvdHRvbSwgY29sb3Itc3RvcCgwLCAjZmNmOGUzKSwgdG8oI2ZhZjJjYykpO2JhY2tncm91bmQtaW1hZ2U6bGluZWFyLWdyYWRpZW50KHRvIGJvdHRvbSwgI2ZjZjhlMyAwLCAjZmFmMmNjIDEwMCUpO2JhY2tncm91bmQtcmVwZWF0OnJlcGVhdC14O2ZpbHRlcjpwcm9naWQ6RFhJbWFnZVRyYW5zZm9ybS5NaWNyb3NvZnQuZ3JhZGllbnQoc3RhcnRDb2xvcnN0cj0nI2ZmZmNmOGUzJywgZW5kQ29sb3JzdHI9JyNmZmZhZjJjYycsIEdyYWRpZW50VHlwZT0wKX0ucGFuZWwtZGFuZ2VyPi5wYW5lbC1oZWFkaW5ne2JhY2tncm91bmQtaW1hZ2U6LXdlYmtpdC1saW5lYXItZ3JhZGllbnQodG9wLCAjZjJkZWRlIDAsICNlYmNjY2MgMTAwJSk7YmFja2dyb3VuZC1pbWFnZTotby1saW5lYXItZ3JhZGllbnQodG9wLCAjZjJkZWRlIDAsICNlYmNjY2MgMTAwJSk7YmFja2dyb3VuZC1pbWFnZTotd2Via2l0LWdyYWRpZW50KGxpbmVhciwgbGVmdCB0b3AsIGxlZnQgYm90dG9tLCBjb2xvci1zdG9wKDAsICNmMmRlZGUpLCB0bygjZWJjY2NjKSk7YmFja2dyb3VuZC1pbWFnZTpsaW5lYXItZ3JhZGllbnQodG8gYm90dG9tLCAjZjJkZWRlIDAsICNlYmNjY2MgMTAwJSk7YmFja2dyb3VuZC1yZXBlYXQ6cmVwZWF0LXg7ZmlsdGVyOnByb2dpZDpEWEltYWdlVHJhbnNmb3JtLk1pY3Jvc29mdC5ncmFkaWVudChzdGFydENvbG9yc3RyPScjZmZmMmRlZGUnLCBlbmRDb2xvcnN0cj0nI2ZmZWJjY2NjJywgR3JhZGllbnRUeXBlPTApfS53ZWxse2JhY2tncm91bmQtaW1hZ2U6LXdlYmtpdC1saW5lYXItZ3JhZGllbnQodG9wLCAjZThlOGU4IDAsICNmNWY1ZjUgMTAwJSk7YmFja2dyb3VuZC1pbWFnZTotby1saW5lYXItZ3JhZGllbnQodG9wLCAjZThlOGU4IDAsICNmNWY1ZjUgMTAwJSk7YmFja2dyb3VuZC1pbWFnZTotd2Via2l0LWdyYWRpZW50KGxpbmVhciwgbGVmdCB0b3AsIGxlZnQgYm90dG9tLCBjb2xvci1zdG9wKDAsICNlOGU4ZTgpLCB0bygjZjVmNWY1KSk7YmFja2dyb3VuZC1pbWFnZTpsaW5lYXItZ3JhZGllbnQodG8gYm90dG9tLCAjZThlOGU4IDAsICNmNWY1ZjUgMTAwJSk7YmFja2dyb3VuZC1yZXBlYXQ6cmVwZWF0LXg7ZmlsdGVyOnByb2dpZDpEWEltYWdlVHJhbnNmb3JtLk1pY3Jvc29mdC5ncmFkaWVudChzdGFydENvbG9yc3RyPScjZmZlOGU4ZTgnLCBlbmRDb2xvcnN0cj0nI2ZmZjVmNWY1JywgR3JhZGllbnRUeXBlPTApO2JvcmRlci1jb2xvcjojZGNkY2RjOy13ZWJraXQtYm94LXNoYWRvdzppbnNldCAwIDFweCAzcHggcmdiYSgwLDAsMCwwLjA1KSwwIDFweCAwIHJnYmEoMjU1LDI1NSwyNTUsMC4xKTtib3gtc2hhZG93Omluc2V0IDAgMXB4IDNweCByZ2JhKDAsMCwwLDAuMDUpLDAgMXB4IDAgcmdiYSgyNTUsMjU1LDI1NSwwLjEpfSJ9LCAiaGVhZGVyc1NpemUiOiAwLCAiYm9keVNpemUiOiAzMzYwLCAicmVkaXJlY3RVUkwiOiAiIiwgIl90cmFuc2ZlclNpemUiOiAzMzYwfSwgImNhY2hlIjoge30sICJ0aW1pbmdzIjogeyJkbnMiOiAtMSwgImNvbm5lY3QiOiAtMSwgInNzbCI6IC0xLCAic2VuZCI6IDAsICJ3YWl0IjogMzk5Ljk4NiwgInJlY2VpdmUiOiAxMy4yNDd9LCAicGFnZXJlZiI6ICJwYWdlQDhjOTMyZjgzMzdkOWFiYjRiOWFiOTg4OWRlYzUxYjk5IiwgInNlcnZlcklQQWRkcmVzcyI6ICJbMjYwNjo0NzAwOjIwOjo2ODFhOmVjZl0iLCAiX3NlcnZlclBvcnQiOiA0NDMsICJfc2VjdXJpdHlEZXRhaWxzIjogeyJwcm90b2NvbCI6ICJUTFMgMS4zIiwgInN1YmplY3ROYW1lIjogInN1cHBseWNoYWluY2FuYWRhLmNvbSIsICJpc3N1ZXIiOiAiV0UxIiwgInZhbGlkRnJvbSI6IDE3MjM0NzA4NDEsICJ2YWxpZFRvIjogMTczMTI0Njg0MH19LCB7InN0YXJ0ZWREYXRlVGltZSI6ICIyMDI0LTA5LTA1VDExOjA3OjIwLjI5MloiLCAidGltZSI6IDQwNy41OTcsICJyZXF1ZXN0IjogeyJtZXRob2QiOiAiR0VUIiwgInVybCI6ICJodHRwczovL3BvcnRhbC5zdXBwbHljaGFpbmNhbmFkYS5jb20vY21zMi9qcy9zY21hL3NjbWEtdGVtcGxhdGUuanM/dj0xLjMuMSIsICJodHRwVmVyc2lvbiI6ICJIVFRQLzIuMCIsICJjb29raWVzIjogW3sibmFtZSI6ICJKU0VTU0lPTklEIiwgInZhbHVlIjogIjI1N0Q5REM5MjA0NTJBNEQ5MzNCOEEzQ0RBOUI2QkQzIn1dLCAiaGVhZGVycyI6IFt7Im5hbWUiOiAiOmF1dGhvcml0eSIsICJ2YWx1ZSI6ICJwb3J0YWwuc3VwcGx5Y2hhaW5jYW5hZGEuY29tIn0sIHsibmFtZSI6ICI6bWV0aG9kIiwgInZhbHVlIjogIkdFVCJ9LCB7Im5hbWUiOiAiOnBhdGgiLCAidmFsdWUiOiAiL2NtczIvanMvc2NtYS9zY21hLXRlbXBsYXRlLmpzP3Y9MS4zLjEifSwgeyJuYW1lIjogIjpzY2hlbWUiLCAidmFsdWUiOiAiaHR0cHMifSwgeyJuYW1lIjogImFjY2VwdCIsICJ2YWx1ZSI6ICIqLyoifSwgeyJuYW1lIjogImFjY2VwdC1lbmNvZGluZyIsICJ2YWx1ZSI6ICJnemlwLCBkZWZsYXRlLCBiciwgenN0ZCJ9LCB7Im5hbWUiOiAiYWNjZXB0LWxhbmd1YWdlIiwgInZhbHVlIjogImVuLVVTIn0sIHsibmFtZSI6ICJjb29raWUiLCAidmFsdWUiOiAiSlNFU1NJT05JRD0yNTdEOURDOTIwNDUyQTREOTMzQjhBM0NEQTlCNkJEMyJ9LCB7Im5hbWUiOiAicHJpb3JpdHkiLCAidmFsdWUiOiAidT0xIn0sIHsibmFtZSI6ICJyZWZlcmVyIiwgInZhbHVlIjogImh0dHBzOi8vcG9ydGFsLnN1cHBseWNoYWluY2FuYWRhLmNvbS9lbi9wb3J0YWxsb2dpbiJ9LCB7Im5hbWUiOiAic2VjLWNoLXVhIiwgInZhbHVlIjogIlwiTm90O0E9QnJhbmRcIjt2PVwiMjRcIiwgXCJDaHJvbWl1bVwiO3Y9XCIxMjhcIiJ9LCB7Im5hbWUiOiAic2VjLWNoLXVhLW1vYmlsZSIsICJ2YWx1ZSI6ICI/MCJ9LCB7Im5hbWUiOiAic2VjLWNoLXVhLXBsYXRmb3JtIiwgInZhbHVlIjogIlwiV2luZG93c1wiIn0sIHsibmFtZSI6ICJzZWMtZmV0Y2gtZGVzdCIsICJ2YWx1ZSI6ICJzY3JpcHQifSwgeyJuYW1lIjogInNlYy1mZXRjaC1tb2RlIiwgInZhbHVlIjogIm5vLWNvcnMifSwgeyJuYW1lIjogInNlYy1mZXRjaC1zaXRlIiwgInZhbHVlIjogInNhbWUtb3JpZ2luIn0sIHsibmFtZSI6ICJ1c2VyLWFnZW50IiwgInZhbHVlIjogIk1vemlsbGEvNS4wIChXaW5kb3dzIE5UIDEwLjA7IFdpbjY0OyB4NjQpIEFwcGxlV2ViS2l0LzUzNy4zNiAoS0hUTUwsIGxpa2UgR2Vja28pIENocm9tZS8xMjguMC42NjEzLjE4IFNhZmFyaS81MzcuMzYifV0sICJxdWVyeVN0cmluZyI6IFt7Im5hbWUiOiAidiIsICJ2YWx1ZSI6ICIxLjMuMSJ9XSwgImhlYWRlcnNTaXplIjogNjg2LCAiYm9keVNpemUiOiAwfSwgInJlc3BvbnNlIjogeyJzdGF0dXMiOiAyMDAsICJzdGF0dXNUZXh0IjogIiIsICJodHRwVmVyc2lvbiI6ICJIVFRQLzIuMCIsICJjb29raWVzIjogW10sICJoZWFkZXJzIjogW3sibmFtZSI6ICJjYWNoZS1jb250cm9sIiwgInZhbHVlIjogIm1heC1hZ2U9MTQ0MDAifSwgeyJuYW1lIjogImNmLWNhY2hlLXN0YXR1cyIsICJ2YWx1ZSI6ICJNSVNTIn0sIHsibmFtZSI6ICJjZi1yYXkiLCAidmFsdWUiOiAiOGJlNWMxNGJlODY0NzFjNC1GUkEifSwgeyJuYW1lIjogImNvbnRlbnQtZW5jb2RpbmciLCAidmFsdWUiOiAiYnIifSwgeyJuYW1lIjogImNvbnRlbnQtdHlwZSIsICJ2YWx1ZSI6ICJhcHBsaWNhdGlvbi9qYXZhc2NyaXB0In0sIHsibmFtZSI6ICJkYXRlIiwgInZhbHVlIjogIlRodSwgMDUgU2VwIDIwMjQgMTE6MDc6MjAgR01UIn0sIHsibmFtZSI6ICJldGFnIiwgInZhbHVlIjogIlcvXCIxNDU3MC0xNjgxMzMzNDIyMDAwXCIifSwgeyJuYW1lIjogImxhc3QtbW9kaWZpZWQiLCAidmFsdWUiOiAiV2VkLCAxMiBBcHIgMjAyMyAyMTowMzo0MiBHTVQifSwgeyJuYW1lIjogIm5lbCIsICJ2YWx1ZSI6ICJ7XCJzdWNjZXNzX2ZyYWN0aW9uXCI6MCxcInJlcG9ydF90b1wiOlwiY2YtbmVsXCIsXCJtYXhfYWdlXCI6NjA0ODAwfSJ9LCB7Im5hbWUiOiAicmVwb3J0LXRvIiwgInZhbHVlIjogIntcImVuZHBvaW50c1wiOlt7XCJ1cmxcIjpcImh0dHBzOlxcL1xcL2EubmVsLmNsb3VkZmxhcmUuY29tXFwvcmVwb3J0XFwvdjQ/cz01ajQyN2R2emJZSEE2MHFvY2JnbWJRejVLY29TTThOaTN2TEN4V1lHOExhM0lwbHI1T2FqUXVqWDJOS2JPWUVSbnd1Z1diSmFRRlJtNFN1TlpaSkZvJTJGVkdsSlEweU91dXJBZmF5WnU2S3BNSkZaUyUyRjNReklTQjN0WGltdFc3ZGkzTWd1c0ZrcmU5SSUyQjVIZHpvbDVEZlh2MXFONUs5U0F3cW5zJTNEXCJ9XSxcImdyb3VwXCI6XCJjZi1uZWxcIixcIm1heF9hZ2VcIjo2MDQ4MDB9In0sIHsibmFtZSI6ICJzZXJ2ZXIiLCAidmFsdWUiOiAiY2xvdWRmbGFyZSJ9LCB7Im5hbWUiOiAic3RyaWN0LXRyYW5zcG9ydC1zZWN1cml0eSIsICJ2YWx1ZSI6ICJtYXgtYWdlPTYzMDcyMDAwOyBpbmNsdWRlU3ViZG9tYWluczsgcHJlbG9hZCJ9LCB7Im5hbWUiOiAidmFyeSIsICJ2YWx1ZSI6ICJBY2NlcHQtRW5jb2RpbmcifV0sICJjb250ZW50IjogeyJzaXplIjogMTQ1NzAsICJtaW1lVHlwZSI6ICJhcHBsaWNhdGlvbi9qYXZhc2NyaXB0IiwgImNvbXByZXNzaW9uIjogMTA0NzQsICJ0ZXh0IjogImlmICghbG9jYXRpb24ub3JpZ2luKVxyXG5cdCAgIGxvY2F0aW9uLm9yaWdpbiA9IGxvY2F0aW9uLnByb3RvY29sICsgXCIvL1wiICsgbG9jYXRpb24uaG9zdDtcclxuXHJcbmZ1bmN0aW9uIGdldFBhcmFtZXRlckJ5TmFtZShuYW1lLCB1cmwpIHtcclxuICAgIGlmICghdXJsKSB1cmwgPSB3aW5kb3cubG9jYXRpb24uaHJlZjtcclxuICAgIG5hbWUgPSBuYW1lLnJlcGxhY2UoL1tcXFtcXF1dL2csIFwiXFxcXCQmXCIpO1xyXG4gICAgdmFyIHJlZ2V4ID0gbmV3IFJlZ0V4cChcIls/Jl1cIiArIG5hbWUgKyBcIig9KFteJiNdKil8JnwjfCQpXCIpLFxyXG4gICAgICAgIHJlc3VsdHMgPSByZWdleC5leGVjKHVybCk7XHJcbiAgICBpZiAoIXJlc3VsdHMpIHJldHVybiBudWxsO1xyXG4gICAgaWYgKCFyZXN1bHRzWzJdKSByZXR1cm4gJyc7XHJcbiAgICByZXR1cm4gZGVjb2RlVVJJQ29tcG9uZW50KHJlc3VsdHNbMl0ucmVwbGFjZSgvXFwrL2csIFwiIFwiKSk7XHJcbn1cclxuXHJcbnZhciBtcG93ZXJVcmw7XHJcblxyXG4oZnVuY3Rpb24oJCwgdW5kZWZpbmVkKSB7XHJcblx0dmFyIHRlbXBIZWlnaHQgPSAwO1xyXG5cdFxyXG5cdGlmIChsb2NhdGlvbi5vcmlnaW4gPT09IFwiaHR0cDovL2xvY2FsaG9zdDo4MDgwXCIpe1xyXG5cdFx0bXBvd2VyVXJsID0gXCIvbXBvd2VyOFBNQUNcIjtcclxuXHR9IGVsc2Uge1xyXG5cdFx0bXBvd2VyVXJsID0gXCIvbXBvd2VyXCI7XHJcblx0fVxyXG5cdFxyXG5cdHZhciBzY21hdGVtcGxhdGUgPSAkLnNjbWF0ZW1wbGF0ZSA9IFxyXG5cdFx0e1xyXG5cdFx0XHR1cmw6IG1wb3dlclVybCwgXHJcblx0XHRcdGJhc2V1cmw6IGxvY2F0aW9uLm9yaWdpbixcclxuXHRcdFx0aWZyYW1lSW5pdDpmdW5jdGlvbiBpZnJhbWVJbml0KCkge1xyXG5cdFx0XHRcdCB2YXIgaUZyYW1lSUQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnaWZyYW1lMScpO1xyXG5cdFx0XHRcdCBpRnJhbWVJRC5zdHlsZS5oZWlnaHQ9MDtcclxuXHRcdFx0XHQgc2V0VGltZW91dChmdW5jdGlvbigpeyBpRnJhbWVJRC5zdHlsZS5oZWlnaHQ9XCJcIjsgfSwgMTAwKTtcclxuXHRcdFx0fSxcclxuXHRcdFx0aWZyYW1lTG9hZGVkOmZ1bmN0aW9uIGlmcmFtZUxvYWRlZCgpIHtcdFx0XHQgIFx0XHJcblx0XHRcdFx0dmFyIGlGcmFtZUlEID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2lmcmFtZTEnKTtcclxuXHRcdFx0XHR2YXIgaUZyYW1lRGl2SGVpZ2h0ID0gMDtcclxuXHRcdFx0XHRpZiAoaUZyYW1lSUQuY29udGVudFdpbmRvdyYmaUZyYW1lSUQuY29udGVudFdpbmRvdy5kb2N1bWVudCYmaUZyYW1lSUQuY29udGVudFdpbmRvdy5kb2N1bWVudC5ib2R5JiZpRnJhbWVJRC5jb250ZW50V2luZG93LmRvY3VtZW50LmJvZHkuc2Nyb2xsSGVpZ2h0KSB7XHJcblx0XHRcdFx0XHRpRnJhbWVEaXZIZWlnaHQgPSBNYXRoLm1heChcclxuXHRcdFx0XHRcdFx0XHRcdGlGcmFtZUlELmNvbnRlbnRXaW5kb3cuZG9jdW1lbnQuYm9keS5zY3JvbGxIZWlnaHQsIFxyXG5cdFx0XHRcdFx0XHRcdFx0aUZyYW1lSUQuY29udGVudFdpbmRvdy5kb2N1bWVudC5ib2R5Lm9mZnNldEhlaWdodCxcclxuXHRcdFx0XHRcdFx0XHRcdGlGcmFtZUlELmNvbnRlbnRXaW5kb3cuZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNjcm9sbEhlaWdodCxcclxuXHRcdFx0XHRcdFx0XHRcdGlGcmFtZUlELmNvbnRlbnRXaW5kb3cuZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50Lm9mZnNldEhlaWdodFxyXG5cdFx0XHRcdFx0KTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0ZWxzZSB7XHJcblx0XHRcdFx0XHRpRnJhbWVEaXZIZWlnaHQgPSB0ZW1wSGVpZ2h0O1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRcclxuXHRcdFx0XHRpZihpRnJhbWVJRCYmaUZyYW1lRGl2SGVpZ2h0JiZ0ZW1wSGVpZ2h0IT1pRnJhbWVEaXZIZWlnaHQpIHtcclxuXHQgICAgICAgICAgICAgICAgICB2YXIgdGVtcFBvcyA9IGRvY3VtZW50LmJvZHkuc2Nyb2xsVG9wO1xyXG5cdCAgICAgICAgICAgICAgICAgIGlGcmFtZUlELmhlaWdodCA9IFwiXCI7XHJcblx0ICAgICAgICAgICAgICAgICAgaUZyYW1lSUQuaGVpZ2h0ID0gaUZyYW1lRGl2SGVpZ2h0ICsgXCJweFwiO1xyXG5cdCAgICAgICAgICAgICAgICAgIHRlbXBIZWlnaHQgPSBpRnJhbWVEaXZIZWlnaHQ7XHJcblx0ICAgICAgICAgICAgICAgICAgd2luZG93LnNjcm9sbFRvKDAsIHRlbXBQb3MpO1xyXG5cdCAgICAgICAgICAgIH1cclxuXHQgICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7IGlmcmFtZUxvYWRlZCgpOyB9LCA4MDApO1xyXG5cdFx0XHR9XHJcblx0XHR9O1xyXG59KShqUXVlcnkpO1xyXG5cclxuJC51cmxQYXJhbSA9IGZ1bmN0aW9uKG5hbWUpe1xyXG4gICAgdmFyIHJlc3VsdHMgPSBuZXcgUmVnRXhwKCdbXFw/Jl0nICsgbmFtZSArICc9KFteJiNdKiknKS5leGVjKHdpbmRvdy5sb2NhdGlvbi5ocmVmKTtcclxuICAgIGlmIChyZXN1bHRzPT1udWxsKXtcclxuICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gICAgZWxzZXtcclxuICAgICAgIHJldHVybiBkZWNvZGVVUkkocmVzdWx0c1sxXSkgfHwgMDtcclxuICAgIH1cclxufVxyXG5cclxuJChkb2N1bWVudCkucmVhZHkoZnVuY3Rpb24oKXtcclxuXHRpZiAoJChcIiNtZW1iZXItbG9naW5cIikubGVuZ3RoKXtcclxuXHRcdCQoXCIjbWVtYmVyLWxvZ2luXCIpLm9uKFwiY2xpY2tcIixmdW5jdGlvbigpe1xyXG5cdFx0XHQkKFwiI3NpZ25JbkVycm9yTWVzc2FnZVwiKS5odG1sKFwiXCIpO1xyXG5cdFx0XHRcclxuXHRcdFx0aWYoJCgnI21lbWJlci1sb2dpbi11c2VybmFtZScpLnZhbCgpLnRyaW0oKSAmJiAkKCcjbWVtYmVyLWxvZ2luLXBhc3N3b3JkJykudmFsKCkudHJpbSgpKXtcclxuXHRcdFx0XHQkKFwiI2xvZ2luQm94IGlucHV0XCIpLmF0dHIoXCJkaXNhYmxlZFwiLCBcImRpc2FibGVkXCIpO1xyXG5cdFx0XHRcdCQoXCIjbG9naW5CdXR0b25cIikuYXR0cihcImRpc2FibGVkXCIsIFwiZGlzYWJsZWRcIik7XHJcblx0XHRcdFx0dmFyIHVzZXJuYW1lID0gJCgnI21lbWJlci1sb2dpbi11c2VybmFtZScpLnZhbCgpO1xyXG5cdFx0XHRcdHZhciBwYXNzd29yZCA9ICQoJyNtZW1iZXItbG9naW4tcGFzc3dvcmQnKS52YWwoKTtcclxuXHJcblx0XHRcdFx0dmFyIG1wb3dlclVybDtcclxuXHRcdFx0XHRpZiAobG9jYXRpb24ub3JpZ2luID09PSBcImh0dHA6Ly9sb2NhbGhvc3Q6ODA4MFwiKXtcclxuXHRcdFx0XHRcdG1wb3dlclVybCA9IFwiL21wb3dlcjhQTUFDXCI7XHJcblx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdG1wb3dlclVybCA9IFwiL21wb3dlclwiO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRcclxuXHRcdFx0XHQkKFwiI21lbWJlci1sb2dpblwiKS5jc3MoXCJjdXJzb3JcIiwgXCJwcm9ncmVzc1wiKTtcclxuXHRcdFx0XHQkKFwiYm9keVwiKS5jc3MoXCJjdXJzb3JcIiwgXCJwcm9ncmVzc1wiKTtcclxuXHRcdFx0XHQkLmFqYXgoe1xyXG5cdFx0XHRcdFx0dHlwZTpcIlBPU1RcIixcclxuXHRcdFx0XHRcdHVybDptcG93ZXJVcmwgKyAnL21wcC93ZWJsb2dpbjMnLFxyXG5cdFx0XHRcdFx0Ly91cmw6JC5zY21hdGVtcGxhdGUudXJsKycvbXBwL3dlYmxvZ2luMycsXHQvLycvbXBwL3dlYmxvZ2luMidcclxuXHRcdFx0XHRcdGRhdGE6eyd1c2VybmFtZSc6dXNlcm5hbWUsICdwYXNzd29yZCc6cGFzc3dvcmR9LFxyXG5cdFx0XHRcdFx0Y2FjaGU6ZmFsc2UsXHJcblx0XHRcdFx0XHRzdWNjZXNzOiBmdW5jdGlvbihkYXRhKXtcclxuXHRcdFx0XHRcdFx0dmFyIGpzb24gPSBKU09OLnBhcnNlKGRhdGEpO1xyXG5cdFx0XHRcdFx0XHRpZihqc29uJiZqc29uLnJlc3VsdCYmanNvbi5yZXN1bHQ9PSdzdWNjZXNzJyl7XHJcblx0XHRcdFx0XHRcdFx0dmFyIHJlZGlyZWN0ID0gZ2V0UGFyYW1ldGVyQnlOYW1lKFwicmVkaXJlY3RcIiwgbnVsbCk7XHJcblx0XHRcdFx0XHRcdFx0aWYgKHJlZGlyZWN0KXtcclxuXHRcdFx0XHRcdFx0XHRcdHdpbmRvdy5sb2NhdGlvbi5ocmVmPVwiL1wiK3JlZGlyZWN0O1xyXG5cdFx0XHRcdFx0XHRcdH0gZWxzZSBpZiAoanNvbi5yZWRpcmVjdCAhPSBudWxsICYmIGpzb24ucmVkaXJlY3QubGVuZ3RoID4gMCAmJiBqc29uLnJlZGlyZWN0ICE9IFwiaG9tZVwiKXtcclxuXHRcdFx0XHRcdFx0XHRcdHdpbmRvdy5sb2NhdGlvbi5ocmVmPSBcIi9cIitqc29uLnJlZGlyZWN0O1xyXG5cdFx0XHRcdFx0XHRcdH0gXHJcblx0XHRcdFx0XHRcdFx0XHJcblx0XHRcdFx0XHRcdFx0dmFyIHJldFVSTCA9ICQudXJsUGFyYW0oJ3JldHVyblVSTCcpO1xyXG5cdFx0XHRcdFx0XHRcdFxyXG5cdFx0XHRcdFx0XHRcdGlmIChyZXRVUkwgIT0gbnVsbCAmJiByZXRVUkwubGVuZ3RoID4gMCkgeyBcclxuXHRcdFx0XHRcdFx0XHRcdHdpbmRvdy5sb2NhdGlvbi5ocmVmPW1wb3dlclVybCsnL29hdXRoMi9zaWduLWluP3JldHVyblVSTD0nK3JldFVSTDtcclxuXHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0XHRcdFx0d2luZG93LmxvY2F0aW9uLmhyZWY9Jy8nK2xvY2FsU3RvcmFnZS5nZXRJdGVtKFwic2NtYS1sYW5nLXNldHRpbmdcIikrJy9wb3J0YWxob21lJztcclxuXHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0XHJcblx0XHRcdFx0XHRcdFx0dmFyIHJlZ0lkID0ganNvbi5yZWdpc3RyYXRpb25JZDtcclxuXHRcdFx0XHRcdFx0XHQvL2dhKCdzZXQnLCAnJnVpZCcsIHJlZ0lkKTtcclxuXHRcdFx0XHRcdFx0XHRnYSgnc2V0JywgJ2RpbWVuc2lvbjEnLCByZWdJZCk7IFxyXG5cdFx0XHRcdFx0XHRcdGdhKCdzZW5kJywgJ2V2ZW50JywgJ0xvZ2luJywgJ0xvZ2luIFN1Y2Nlc3MnLCAnUG9ydGFsIExvZ2luJywge1xyXG5cdFx0XHRcdFx0XHRcdCdkaW1lbnNpb24xJzogcmVnSWQsIFxyXG5cdFx0XHRcdFx0XHRcdH0pO1xyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdGVsc2V7XHJcblx0XHRcclxuXHRcdFx0XHRcdFx0XHRjb25zb2xlLmxvZyhcImludmFsaWRcIik7XHJcblx0XHRcdFx0XHRcdFx0JChcIiNzaWduSW5FcnJvck1lc3NhZ2VcIikuaHRtbCgnSW5jb3JyZWN0IHVzZXJuYW1lIG9yIHBhc3N3b3JkLicpO2VsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImxvZ29cIik7XHJcblx0XHRcdFx0XHRcdFx0XHJcblx0XHRcdFx0XHRcdFx0Ly8gUmV0cmlnZ2VyIGFuaW1hdGlvblxyXG5cdFx0XHRcdFx0XHRcdHZhciBlbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJzaWduSW5FcnJvck1lc3NhZ2VcIik7XHJcblx0XHRcdFx0XHRcdFx0ZWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKFwicnVuLWFuaW1hdGlvblwiKTtcclxuXHRcdFx0XHRcdFx0XHRlbGVtZW50Lm9mZnNldFdpZHRoID0gZWxlbWVudC5vZmZzZXRXaWR0aDtcclxuXHRcdFx0XHRcdFx0XHRlbGVtZW50LmNsYXNzTGlzdC5hZGQoXCJydW4tYW5pbWF0aW9uXCIpO1xyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR9LCBcclxuXHRcdFx0XHRcdGVycm9yOiBmdW5jdGlvbihkYXRhKXtcclxuXHRcdFx0XHRcdFx0aWYoJChcIiNsb2dpbi1mYWlsXCIpLmxlbmd0aCA9PT0gMCkge1xyXG5cdFx0XHRcdFx0XHRcdCQoIFwiI2Rpdi1sb2dpbi1taWRkbGVcIiApLmFwcGVuZChcIjxwIGlkPSdsb2dpbi1mYWlsJz5JbnZhbGlkIHVzZXIgbmFtZSBvciBwYXNzd29yZC4gUGxlYXNlIHRyeSBhZ2Fpbi48L3A+XCIgKTtcclxuXHRcdFx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdFx0XHQkKFwiI2xvZ2luLWZhaWxcIikuaGlkZSgpO1xyXG5cdFx0XHRcdFx0XHRcdHNldFRpbWVvdXQoZnVuY3Rpb24gYWxlcnRGdW5jKCkgeyQoXCIjbG9naW4tZmFpbFwiKS5zaG93KCk7fSwgNTApO1xyXG5cdFx0XHRcdFx0XHRcdFxyXG5cdFx0XHRcdFx0XHR9XHRcdFx0XHJcblx0XHRcdFx0XHR9LFxyXG5cdFx0XHRcdFx0Y29tcGxldGU6ZnVuY3Rpb24oKSB7XHJcblx0XHRcdFx0XHRcdCQoXCIjbG9naW5Cb3ggaW5wdXRcIikucmVtb3ZlQXR0cihcImRpc2FibGVkXCIpO1xyXG5cdFx0XHRcdFx0XHQkKFwiI2xvZ2luQnV0dG9uXCIpLnJlbW92ZUF0dHIoXCJkaXNhYmxlZFwiKTtcclxuXHRcdFx0XHRcdFx0XHJcblx0XHRcdFx0XHRcdCQoXCIjbWVtYmVyLWxvZ2luXCIpLmNzcyhcImN1cnNvclwiLCBcImRhZmF1bHRcIik7XHJcblx0XHRcdFx0XHRcdCQoXCJib2R5XCIpLmNzcyhcImN1cnNvclwiLCBcImRhZmF1bHRcIik7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcclxuXHRcdFx0XHR9KTtcclxuXHRcdFx0fVxyXG5cdFx0XHRyZXR1cm4gZmFsc2U7XHJcblx0XHR9KTtcclxuXHR9XHJcblx0XHJcblx0XHJcblx0Ly9NZW1iZXIgRGlyZWN0b3J5IE1vZGFsXHJcblx0JGpxbW9kYWwoXCJbaWRePSdNZW1iZXJfRGlyZWN0b3InXVwiKS5vbignY2xpY2snLCBmdW5jdGlvbihlKSB7XHJcblx0XHRlLnByZXZlbnREZWZhdWx0KCk7XHJcblx0XHQkanFtb2RhbC5hamF4KHsgIFxyXG5cdFx0XHRjYWNoZTogZmFsc2UsXHJcblx0XHRcdGFzeW5jOiBmYWxzZSxcclxuXHRcdFx0dHlwZTogXCJHRVRcIixcclxuXHRcdFx0dXJsOiBcIi9cIit1cmxQcmVmaXgrXCIvbXBwL21lbWJlci1kaXJlY3Rvcnktc3RhdHVzLmFjdGlvblwiLFxyXG5cdFx0XHRzdWNjZXNzOiBmdW5jdGlvbihyZXNwb25zZSl7XHJcblx0XHRcdFx0aWYgKHJlc3BvbnNlICE9ICdBU0snICYmIHJlc3BvbnNlICE9ICdERUNMSU5FRCcpIHtcclxuXHRcdFx0XHRcdHdpbmRvdy5sb2NhdGlvbiA9IFwiL2VuL21lbWJlcmRpcmVjdG9yeVwiOy8vJy4uL21wcC9tZW1iZXItZGlyZWN0b3J5LmFjdGlvbic7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdGVsc2UgaWYgKHJlc3BvbnNlID09ICdERUNMSU5FRCcpIHtcclxuXHRcdFx0XHRcdCBpZiAobG9jYWxTdG9yYWdlLmdldEl0ZW0oXCJzY21hLWxhbmctc2V0dGluZ1wiKSA9PSBcImVuXCIpIHtcclxuXHRcdFx0XHRcdFx0ICRqcW1vZGFsKFwiI21lbURpck1vZGFsXCIpLm1vZGFsKFwic2hvd1wiKTtcclxuXHRcdFx0XHRcdCB9IGVsc2UgaWYgKGxvY2FsU3RvcmFnZS5nZXRJdGVtKFwic2NtYS1sYW5nLXNldHRpbmdcIikgPT0gXCJmclwiKSB7XHJcblx0XHRcdFx0XHRcdCAkanFtb2RhbChcIiNtZW1EaXJNb2RhbEZyXCIpLm1vZGFsKFwic2hvd1wiKTtcclxuXHRcdFx0XHRcdCB9XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdGVsc2Uge1xyXG5cdFx0XHRcdFx0aWYgKGxvY2FsU3RvcmFnZS5nZXRJdGVtKFwic2NtYS1sYW5nLXNldHRpbmdcIikgPT0gXCJlblwiKSB7XHJcblx0XHRcdFx0XHRcdCRqcW1vZGFsKFwiI21lbURpck1vZGFsXCIpLm1vZGFsKFwic2hvd1wiKTtcclxuXHRcdFx0XHRcdCB9IGVsc2UgaWYgKGxvY2FsU3RvcmFnZS5nZXRJdGVtKFwic2NtYS1sYW5nLXNldHRpbmdcIikgPT0gXCJmclwiKSB7XHJcblx0XHRcdFx0XHRcdCAkanFtb2RhbChcIiNtZW1EaXJNb2RhbEZyXCIpLm1vZGFsKFwic2hvd1wiKTtcclxuXHRcdFx0XHRcdCB9XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9LFxyXG5cdFx0XHRlcnJvcjogZnVuY3Rpb24oKSB7XHJcblx0XHRcdFx0d2luZG93LmxvY2F0aW9uPVwiL1wiK3VybFByZWZpeCtcIm1wcC92aWV3bG9naW4uYWN0aW9uXCI7XHJcblx0XHRcdH1cclxuXHRcdH0pO1xyXG5cdH0pO1xyXG5cdFxyXG5cdC8vU0NNUF9PbmxpbmVfTGVhcm5pbmcgTW9kYWxcclxuXHQkanFtb2RhbChcIltpZF49J1NDTVBfT25saW5lX0xlYXJuaW5nJ11cIikub24oJ2NsaWNrJywgZnVuY3Rpb24oZSkge1xyXG5cdFx0ZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG5cdFx0JGpxbW9kYWwuYWpheCh7ICBcclxuXHRcdFx0Y2FjaGU6IGZhbHNlLFxyXG5cdFx0XHRhc3luYzogZmFsc2UsXHJcblx0XHRcdHR5cGU6IFwiR0VUXCIsXHJcblx0XHRcdHVybDogXCIvXCIrdXJsUHJlZml4K1wiL21wcC9hamF4SXNCYXNlY29ycC5hY3Rpb25cIixcclxuXHRcdFx0c3VjY2VzczogZnVuY3Rpb24ocmVzcG9uc2Upe1xyXG5cdFx0XHRcdGlmIChyZXNwb25zZSkge1xyXG5cdFx0XHRcdFx0d2luZG93Lm9wZW4oZS50YXJnZXQuaHJlZik7XHJcblx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdGlmIChsb2NhbFN0b3JhZ2UuZ2V0SXRlbShcInNjbWEtbGFuZy1zZXR0aW5nXCIpID09IFwiZW5cIikge1xyXG5cdFx0XHRcdFx0XHQkanFtb2RhbChcIiNzY21hTGVhcm5pbmdNb2RhbFwiKS5tb2RhbChcInNob3dcIik7XHJcblx0XHRcdFx0XHQgfSBlbHNlIGlmIChsb2NhbFN0b3JhZ2UuZ2V0SXRlbShcInNjbWEtbGFuZy1zZXR0aW5nXCIpID09IFwiZnJcIikge1xyXG5cdFx0XHRcdFx0XHQkanFtb2RhbChcIiNzY21hTGVhcm5pbmdNb2RhbC1mclwiKS5tb2RhbChcInNob3dcIik7XHJcblx0XHRcdFx0XHQgfVxyXG5cdFx0XHRcdFx0XHJcblx0XHRcdFx0XHRcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0XHJcblx0XHRcdH0sXHJcblx0XHRcdGVycm9yOiBmdW5jdGlvbigpIHtcclxuXHRcdFx0XHR3aW5kb3cubG9jYXRpb249XCIvXCIrdXJsUHJlZml4K1wibXBwL3ZpZXdsb2dpbi5hY3Rpb25cIjtcclxuXHRcdFx0fVxyXG5cdFx0fSk7XHJcblx0fSk7XHJcblx0XHJcblx0Ly9FTkQgTWVtYmVyIERpcmVjdG9yeSBNb2RhbFx0XHJcbn0pO1xyXG5cclxuZnVuY3Rpb24gbWVtRGlyQWdyZWUoKSB7XHJcblx0JGpxbW9kYWwuYWpheCh7ICBcclxuXHRcdGNhY2hlOiBmYWxzZSxcclxuXHRcdGFzeW5jOiBmYWxzZSxcclxuXHRcdHR5cGU6IFwiR0VUXCIsXHJcblx0XHR1cmw6IFwiL1wiK3VybFByZWZpeCtcIi9tcHAvbWVtYmVyLWRpcmVjdG9yeS1hZ3JlZS5hY3Rpb25cIixcclxuXHRcdHN1Y2Nlc3M6IGZ1bmN0aW9uKHJlc3BvbnNlKXtcclxuXHRcdFx0d2luZG93LmxvY2F0aW9uID0gXCIvZW4vbWVtYmVyZGlyZWN0b3J5XCI7XHJcblx0XHR9LFxyXG5cdFx0ZXJyb3I6IGZ1bmN0aW9uKCkge1xyXG5cdFx0XHR3aW5kb3cubG9jYXRpb24gPSAnLycrdXJsUHJlZml4KycvbXBwL3ZpZXdsb2dpbi5hY3Rpb24nO1xyXG5cdFx0fVxyXG5cdH0pO1xyXG5cdHJldHVybiBmYWxzZTtcclxufVxyXG5cclxuZnVuY3Rpb24gbWVtRGlyRGlzYWdyZWUoKSB7XHJcblx0JGpxbW9kYWwuYWpheCh7ICBcclxuXHRcdGNhY2hlOiBmYWxzZSxcclxuXHRcdGFzeW5jOiBmYWxzZSxcclxuXHRcdHR5cGU6IFwiR0VUXCIsXHJcblx0XHR1cmw6IFwiL1wiK3VybFByZWZpeCtcIi9tcHAvbWVtYmVyLWRpcmVjdG9yeS1kaXNhZ3JlZS5hY3Rpb25cIixcclxuXHRcdHN1Y2Nlc3M6IGZ1bmN0aW9uKHJlc3BvbnNlKXsgXHJcblx0XHRcdGlmIChsb2NhbFN0b3JhZ2UuZ2V0SXRlbShcInNjbWEtbGFuZy1zZXR0aW5nXCIpID09IFwiZW5cIikge1xyXG5cdFx0XHRcdCRqcW1vZGFsKFwiI21lbURpckRlY2xpbmVkTW9kYWxcIikubW9kYWwoXCJzaG93XCIpO1xyXG5cdFx0XHQgfSBlbHNlIGlmIChsb2NhbFN0b3JhZ2UuZ2V0SXRlbShcInNjbWEtbGFuZy1zZXR0aW5nXCIpID09IFwiZnJcIikge1xyXG5cdFx0XHRcdCAkanFtb2RhbChcIiNtZW1EaXJEZWNsaW5lZE1vZGFsRnJcIikubW9kYWwoXCJzaG93XCIpO1xyXG5cdFx0XHQgfVxyXG5cdFx0XHRcclxuXHRcdFx0XHJcblx0XHR9LFxyXG5cdFx0ZXJyb3I6IGZ1bmN0aW9uKCkge1xyXG5cdFx0XHR3aW5kb3cubG9jYXRpb24gPSAnLycrIHVybFByZWZpeCArICcvbXBwL3ZpZXdsb2dpbi5hY3Rpb24nO1xyXG5cdFx0fVxyXG5cdH0pO1xyXG5cdHJldHVybiBmYWxzZTtcclxufVxyXG5cclxuXHJcbiQoIGRvY3VtZW50ICkucmVhZHkoZnVuY3Rpb24oKSB7XHJcblx0JChcIiNtZW1iZXItcHJvZmlsZS1zYXZlX2J1dHRvbl9zYXZlXCIpLm9uKFwiY2xpY2tcIiwgZnVuY3Rpb24oZSl7XHJcblx0XHR2YXIgc3RyID0gJCggXCIjbXlwcm9maWxlLWNvbnRhaW5lciBmb3JtXCIgKS5zZXJpYWxpemUoKTtcclxuXHRcdCAgICBcclxuXHRcdC8vdmFsaWRhdGlvblxyXG5cdFx0XHJcblx0XHR2YXIgb2JqID0ge307XHJcblx0XHRvYmouY29udGFjdFNhbHV0YXRpb24gPSAkKFwiI3NlbGVjdC1zYWx1XCIpLnZhbCgpO1xyXG5cdFx0b2JqLmNvbnRhY3RGaXJzdCA9ICQoXCIjaW5wdXQtY29udGFjdC1maXJzdFwiKS52YWwoKTtcclxuXHRcdG9iai5jb250YWN0TWlkZGxlID0gJChcIiNpbnB1dC1jb250YWN0LW1pZGRsZVwiKS52YWwoKTtcclxuXHRcdG9iai5jb250YWN0TGFzdCA9ICQoXCIjaW5wdXQtY29udGFjdC1sYXN0XCIpLnZhbCgpO1xyXG5cdFx0b2JqLmNvbnRhY3RKb2JUaXRsZSA9ICQoXCIjaW5wdXQtY29udGFjdC1qb2JUaXRsZVwiKS52YWwoKTtcclxuXHRcdG9iai5jb250YWN0Q29tcGFueU5hbWUgPSAkKFwiI2lucHV0LWNvbnRhY3QtY29tcGFueU5hbWVcIikudmFsKCk7XHJcblx0XHRvYmouY29udGFjdERlc2lnbmF0aW9uID0gJChcIiNpbnB1dC1jb250YWN0LWRlc2lnbmF0aW9uXCIpLnZhbCgpO1xyXG5cdFx0b2JqLmNvbnRhY3RMYW5ndWFnZSA9ICQoXCIjc2VsZWN0LXByZWYtbGFuZ1wiKS52YWwoKTtcclxuXHRcdFxyXG5cdFx0b2JqLmN1c3RvbURlc2lnbmF0aW9ucyA9IFtdO1xyXG5cdFx0JChcIiNzZWxlY3QtZGVzaWduYXRpb24gdWwgbGlcIikuZWFjaChmdW5jdGlvbiggaW5kZXggKSB7XHJcblx0ICAgXHRcdGlmICgkKHRoaXMpLmhhc0NsYXNzKFwic2VsZWN0ZWRcIikpIHtcclxuXHQgICBcdFx0XHRvYmouY3VzdG9tRGVzaWduYXRpb25zLnB1c2goJCh0aGlzKS50ZXh0KCkpO1x0XHRcclxuXHQgICBcdFx0fVxyXG5cdCAgIFx0fSk7XHJcblx0XHRcclxuXHRcdG9iai5jdXN0b21EaWV0YXJ5ID0gJChcIiNpbnB1dC1jdXN0b20tZGlldGFyeVwiKS52YWwoKTtcclxuXHRcdFxyXG5cdFx0b2JqLmNvbnRhY3RCaWxsaW5nQWRkcmVzc1R5cGUgPSAkKFwiI3NlbGVjdC1iaWxsaW5nLWFkZHJlc3MtdHlwZVwiKS52YWwoKTtcclxuXHRcdG9iai5jb250YWN0QmlsbGluZ0FkZHJlc3MgPSAkKFwiI2lucHV0LWJpbGxpbmctYWRkcmVzc1wiKS52YWwoKTtcclxuXHRcdG9iai5jb250YWN0QmlsbGluZ1N1aXRlID0gJChcIiNpbnB1dC1iaWxsaW5nLXN1aXRlXCIpLnZhbCgpO1xyXG5cdFx0b2JqLmNvbnRhY3RCaWxsaW5nQ2l0eSA9ICQoXCIjaW5wdXQtYmlsbGluZy1jaXR5XCIpLnZhbCgpO1xyXG5cdFx0b2JqLmNvbnRhY3RCaWxsaW5nUHJvdmluY2UgPSAkKFwiI3NlbGVjdC1iaWxsaW5nLXByb3ZpbmNlXCIpLnZhbCgpO1xyXG5cdFx0b2JqLmNvbnRhY3RCaWxsaW5nT3RoZXJQcm92aW5jZSA9IFwiXCI7XHJcblx0XHRvYmouY29udGFjdEJpbGxpbmdQb3N0YWxDb2RlID0gJChcIiNpbnB1dC1iaWxsaW5nLXBvc3RhbFwiKS52YWwoKTtcclxuXHRcdG9iai5jb250YWN0QmlsbGluZ0NvdW50cnkgPSAkKFwiI3NlbGVjdC1iaWxsaW5nLWNvdW50cnlcIikudmFsKCk7XHJcblx0XHRvYmouY29udGFjdEJpbGxpbmdQaG9uZSA9ICQoXCIjaW5wdXQtYmlsbGluZy1waG9uZVwiKS52YWwoKTtcclxuXHRcdG9iai5jb250YWN0QmlsbGluZ1Bob25lVHlwZSA9ICQoXCIjc2VsZWN0LXBob25lLXR5cGVcIikudmFsKCk7XHJcblx0XHRvYmouY29udGFjdEJpbGxpbmdBbHRQaG9uZSA9ICQoXCIjaW5wdXQtYmlsbGluZy1hbHQtcGhvbmVcIikudmFsKCk7XHJcblx0XHRvYmouY29udGFjdEJpbGxpbmdGYXggPSAkKFwiI2lucHV0LWJpbGxpbmctZmF4XCIpLnZhbCgpO1xyXG5cdFx0b2JqLmNvbnRhY3RNYWlsRW1haWwgPSAkKFwiI2lucHV0LW1haWwtZW1haWxcIikudmFsKCk7XHJcblx0XHRvYmouY29udGFjdE1haWxFbWFpbFR5cGUgPSAkKFwiI3NlbGVjdC1lbWFpbC10eXBlXCIpLnZhbCgpO1xyXG5cdFx0b2JqLmNvbnRhY3RIb21lRW1haWwgPSAkKFwiI2lucHV0LWhvbWUtZW1haWxcIikudmFsKCk7XHJcblx0XHRcclxuXHRcdG9iai5jb250YWN0TWFpbEFkZHJlc3NUeXBlID0gJChcIiNzZWxlY3QtYWRkcmVzcy10eXBlXCIpLnZhbCgpO1xyXG5cdFx0b2JqLmNvbnRhY3RNYWlsQWRkcmVzcyA9ICQoXCIjaW5wdXQtbWFpbGluZy1hZGRyZXNzXCIpLnZhbCgpO1xyXG5cdFx0b2JqLmNvbnRhY3RNYWlsU3VpdGUgPSAkKFwiI2lucHV0LW1haWxpbmctc3VpdGVcIikudmFsKCk7XHJcblx0XHRvYmouY29udGFjdE1haWxDaXR5ID0gJChcIiNpbnB1dC1tYWlsaW5nLWNpdHlcIikudmFsKCk7XHJcblx0XHRvYmouY29udGFjdE1haWxQcm92aW5jZSA9ICQoXCIjc2VsZWN0LW1haWwtcHJvdmluY2VcIikudmFsKCk7XHJcblx0XHRvYmouY29udGFjdE1haWxPdGhlclByb3ZpbmNlID0gXCJcIjtcclxuXHRcdG9iai5jb250YWN0TWFpbENvdW50cnkgPSAkKFwiI3NlbGVjdC1tYWlsLWNvdW50cnlcIikudmFsKCk7XHJcblx0XHRvYmouY29udGFjdE1haWxQb3N0YWxDb2RlID0gJChcIiNpbnB1dC1tYWlsaW5nLXBvc3RhbFwiKS52YWwoKTtcclxuXHRcdFxyXG5cdFx0b2JqLnByb2ZpbGVPbGRQYXNzd29yZCA9ICQoXCIjaW5wdXQtcHJvZmlsZS1vbGRQYXNzd29yZFwiKS52YWwoKTtcclxuXHRcdG9iai5wcm9maWxlTmV3UGFzc3dvcmQgPSAkKFwiI2lucHV0LXByb2ZpbGUtbmV3UGFzc3dvcmRcIikudmFsKCk7XHJcblx0XHRvYmoucHJvZmlsZUNvbmZpcm1QYXNzd29yZCA9ICQoXCIjaW5wdXQtcHJvZmlsZS1jb25maXJtUGFzc3dvcmRcIikudmFsKCk7XHJcblx0XHRcclxuXHRcdG9iai5vcHRpbk1hcE5hdGlvbmFsID0ge307XHJcblx0XHQkKFwiI2Rpdi1uYXRpb25hbC1jb21tID4gZGl2XCIpLmVhY2goZnVuY3Rpb24oIGluZGV4ICkge1xyXG5cdFx0XHR2YXIgb3B0SWQgPSAkKHRoaXMpLmZpbmQoXCJpbnB1dFwiKS5hdHRyKFwiaWRcIikuc3BsaXQoXCJvcHRpbk5hdFwiKVsxXTtcclxuXHRcdFx0b2JqLm9wdGluTWFwTmF0aW9uYWxbb3B0SWRdID0gJCh0aGlzKS5maW5kKFwiaW5wdXRcIikuaXMoJzpjaGVja2VkJyk7XHJcblx0XHR9KTtcclxuXHRcdFxyXG5cdFx0b2JqLm9wdGluTWFwID0ge307XHJcblx0XHQkKFwiI2Rpdi1jb21wYW55LWNvbW0gPiBkaXZcIikuZWFjaChmdW5jdGlvbiggaW5kZXggKSB7XHJcblx0XHRcdHZhciBvcHRJZCA9ICQodGhpcykuZmluZChcImlucHV0XCIpLmF0dHIoXCJpZFwiKS5zcGxpdChcIm9wdGluXCIpWzFdO1xyXG5cdFx0XHRvYmoub3B0aW5NYXBbb3B0SWRdID0gJCh0aGlzKS5maW5kKFwiaW5wdXRcIikuaXMoJzpjaGVja2VkJyk7XHJcblx0XHR9KTtcclxuXHRcdFxyXG5cdFx0Ly9vYmouY29udGFjdFJlY2VpdmVNYWdhemluZSA9ICQoXCIjY2hrLWNhbmFkYS1tYWdhemluZVwiKS5pcygnOmNoZWNrZWQnKTsgXHRcdC8vY29udGFjdC5yZWNlaXZlTWFnYXppbmUsIHRydWUgb3IgZmFsc2VcclxuXHRcdG9iai5jb250YWN0UmVjZWl2ZU1hZ2F6aW5lID0gJCgnaW5wdXRbbmFtZT1cIm1hZ2F6aW5lXCJdOmNoZWNrZWQnLCAnI21hZ2F6aW5lRm9ybScpLnZhbCgpOy8vJChcIiNjaGstY2FuYWRhLW1hZ2F6aW5lXCIpLmlzKCc6Y2hlY2tlZCcpO1xyXG5cdFx0XHJcblx0XHRcclxuXHRcdG9iai5jb250YWN0TWFpbGluZ0xpc3QgPSAkKFwiI2Noay11bnN1YnNjcmliZS1hbGxcIikuaXMoJzpjaGVja2VkJyk7XHRcdFx0Ly9jb250YWN0LnJlY2VpdmVNYWdhemluZSwgdHJ1ZSBvciBmYWxzZVxyXG5cdFx0b2JqLmNvbnRhY3RNYWlsaW5nUHJvbW90aW9ucyA9ICQoXCIjY2hrLXByb21vdGlvbnNcIikuaXMoJzpjaGVja2VkJyk7XHRcdFx0Ly9jb250YWN0Lm1haWxpbmdQcm9tb3Rpb25zLCB0cnVlIG9yIGZhbHNlXHJcblx0XHRvYmouY29udGFjdE1lbWJlcnNoaXBEaXJlY3RvcnkgPSAkKFwiI2Noay1tZW1iZXItZGlyZWN0b3J5XCIpLmlzKCc6Y2hlY2tlZCcpO1x0Ly9jb250YWN0Lm1lbWJlcnNoaXBEaXJlY3RvcnksIHRydWUgb3IgZmFsc2VcclxuXHRcdFxyXG5cdFx0Ly9yZXF1aXJlZCBmaWVsZCB2YWxpZGF0aW9uXHJcblx0XHRpZiAob2JqLmNvbnRhY3RTYWx1dGF0aW9uID09IG51bGwgfHwgb2JqLmNvbnRhY3RGaXJzdCA9PSBudWxsIHx8IG9iai5jb250YWN0TGFzdCA9PSBudWxsIHx8XHJcblx0XHRcdG9iai5jb250YWN0Sm9iVGl0bGUgPT0gbnVsbCB8fCBvYmouY29udGFjdEJpbGxpbmdBZGRyZXNzID09IG51bGwgfHwgb2JqLmNvbnRhY3RCaWxsaW5nQ2l0eSA9PSBudWxsIHx8XHJcblx0XHRcdG9iai5jb250YWN0QmlsbGluZ1Byb3ZpbmNlID09IG51bGwgfHwgb2JqLmNvbnRhY3RCaWxsaW5nQ291bnRyeSA9PSBudWxsIHx8IG9iai5jb250YWN0QmlsbGluZ1Bvc3RhbENvZGUgPT0gbnVsbCB8fFxyXG5cdFx0XHRvYmouY29udGFjdEJpbGxpbmdQaG9uZSA9PSBudWxsIHx8IG9iai5jb250YWN0TWFpbEVtYWlsID09IG51bGwgfHwgXHJcblx0XHRcdG9iai5jb250YWN0U2FsdXRhdGlvbi50cmltKCkgPT0gXCJcIiB8fCBvYmouY29udGFjdEZpcnN0LnRyaW0oKSA9PSBcIlwiIHx8IG9iai5jb250YWN0TGFzdC50cmltKCkgPT0gXCJcIiB8fFxyXG5cdFx0XHRvYmouY29udGFjdEpvYlRpdGxlLnRyaW0oKSA9PSBcIlwiIHx8IG9iai5jb250YWN0QmlsbGluZ0FkZHJlc3MudHJpbSgpID09IFwiXCIgfHwgb2JqLmNvbnRhY3RCaWxsaW5nQ2l0eS50cmltKCkgPT0gXCJcIiB8fFxyXG5cdFx0XHRvYmouY29udGFjdEJpbGxpbmdQcm92aW5jZS50cmltKCkgPT0gXCJcIiB8fCBvYmouY29udGFjdEJpbGxpbmdDb3VudHJ5LnRyaW0oKSA9PSBcIlwiIHx8IG9iai5jb250YWN0QmlsbGluZ1Bvc3RhbENvZGUudHJpbSgpID09IFwiXCIgfHxcclxuXHRcdFx0b2JqLmNvbnRhY3RCaWxsaW5nUGhvbmUudHJpbSgpID09IFwiXCIgfHwgb2JqLmNvbnRhY3RNYWlsRW1haWwudHJpbSgpID09IFwiXCJcclxuXHRcdCkge1xyXG5cdFx0XHQkKCcjYWxlcnQtZmlsbC1vdXQnKS5tb2RhbCh7IGJhY2tkcm9wOiAnc3RhdGljJywga2V5Ym9hcmQ6IGZhbHNlIH0pO1xyXG5cdFx0XHRyZXR1cm47XHJcblx0XHR9XHJcblx0XHRcclxuXHRcdCQoXCIjbWVtYmVyLXByb2ZpbGUtc2F2ZV9idXR0b25fc2F2ZVwiKS5jc3MoXCJjdXJzb3JcIiwgXCJwcm9ncmVzc1wiKTtcclxuXHRcdCQoXCJib2R5XCIpLmNzcyhcImN1cnNvclwiLCBcInByb2dyZXNzXCIpO1xyXG5cdFx0JChcIiNzYXZlLXJlc3VsdFwiKS5yZW1vdmUoKTtcclxuXHRcdCQuYWpheCh7XHJcblx0XHRcdHR5cGU6J1BPU1QnLFxyXG5cdFx0XHR1cmw6IG1wb3dlclVybCArICcvbXBwL21lbWJlci1wcm9maWxlLXNhdmUtYWpheC5hY3Rpb24nLFxyXG5cdFx0XHRkYXRhOnsnTXlJbmZvJzogSlNPTi5zdHJpbmdpZnkob2JqKX0sXHJcblx0XHQgXHRzdWNjZXNzOmZ1bmN0aW9uKGRhdGEpe1xyXG5cdFx0XHRcdC8vYWxlcnQoXCJZb3VyIGluZm9ybWF0aW9uIGhhcyBiZWVuIHN1Y2Nlc3NmdWxseSB1cGRhdGVkXCIpO1xyXG5cdFx0XHRcdC8vbG9jYXRpb24ucmVsb2FkKCk7XHJcblx0XHRcdFx0JChcIiNtZW1iZXItcHJvZmlsZS1zYXZlX2J1dHRvbl9zYXZlXCIpLmNzcyhcImN1cnNvclwiLCBcImRlZmF1bHRcIik7XHJcblx0XHRcdFx0JChcImJvZHlcIikuY3NzKFwiY3Vyc29yXCIsIFwiZGVmYXVsdFwiKTtcclxuXHRcdFx0XHQkKFwiI215cHJvZmlsZS1jb250YWluZXJcIikuYXBwZW5kKFwiPHAgaWQ9J3NhdmUtcmVzdWx0Jz5Zb3VyIGluZm9ybWF0aW9uIGhhcyBiZWVuIHN1Y2Nlc3NmdWxseSB1cGRhdGVkPC9wPlwiKTtcclxuXHRcdFx0XHQkKFwiI2lucHV0LXByb2ZpbGUtb2xkUGFzc3dvcmRcIikudmFsKFwiXCIpO1xyXG5cdFx0XHRcdCQoXCIjaW5wdXQtcHJvZmlsZS1uZXdQYXNzd29yZFwiKS52YWwoXCJcIik7XHJcblx0XHRcdFx0JChcIiNpbnB1dC1wcm9maWxlLWNvbmZpcm1QYXNzd29yZFwiKS52YWwoXCJcIik7XHJcblx0XHRcdH0sXHJcblx0XHRcdGVycm9yOmZ1bmN0aW9uKGRhdGEpe1xyXG5cdFx0XHRcdCQoXCIjbWVtYmVyLXByb2ZpbGUtc2F2ZV9idXR0b25fc2F2ZVwiKS5jc3MoXCJjdXJzb3JcIiwgXCJkZWZhdWx0XCIpO1xyXG5cdFx0XHRcdCQoXCJib2R5XCIpLmNzcyhcImN1cnNvclwiLCBcImRlZmF1bHRcIik7XHJcblx0XHRcdFx0JChcIiNteXByb2ZpbGUtY29udGFpbmVyXCIpLmFwcGVuZChcIjxwIGlkPSdzYXZlLXJlc3VsdCc+RmFpbGVkIHRvIHVwZGF0ZTwvcD5cIik7XHJcblx0XHRcdFx0Y29uc29sZS5sb2coZGF0YSk7XHJcblx0XHRcdFx0dmFyIHJlc3BvbnNlVGV4dCA9IEpTT04ucGFyc2UoZGF0YS5yZXNwb25zZVRleHQpO1xyXG5cdFx0XHRcdGNvbnNvbGUubG9nKFwiRXJyb3I6IFwiICsgcmVzcG9uc2VUZXh0Lm1lc3NhZ2UpO1xyXG5cdFx0XHRcdGlmIChyZXNwb25zZVRleHQucmVzdWx0ID09IFwiZmFpbFwiKSB7XHJcblx0XHRcdFx0XHR3aW5kb3cubG9jYXRpb24gPSBtcG93ZXJVcmwgKyBcIi9tcHAvbWVtYmVyLW5vc2Vzc2lvblwiO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRpZiAocmVzcG9uc2VUZXh0LnJlc3VsdCA9PSBcImlucHV0XCIpIHtcclxuXHRcdFx0XHRcdGFsZXJ0KHJlc3BvbnNlVGV4dC5tZXNzYWdlKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdH0pO1xyXG5cdH0pO1xyXG5cdFxyXG5cdGZ1bmN0aW9uIHdhaXRGb3JFbGVtZW50KCl7XHJcblx0XHRpZigkKFwiI2Noay11bnN1YnNjcmliZS1hbGxcIikubGVuZ3RoID4gMCAvKiYmIFxyXG5cdFx0XHRcdCQoXCIjZGl2LW5hdGlvbmFsLWNvbW0gaW5wdXRbaWRePSdvcHRpbk5hdCddXCIpLmxlbmd0aCA+IDAgJiZcclxuXHRcdFx0XHQkKFwiI2Rpdi1jb21wYW55LWNvbW0gaW5wdXRbaWRePSdvcHRpbiddXCIpLmxlbmd0aCA+IDAqLyl7XHJcblx0XHRcdFxyXG5cdFx0XHQkKFwiI2Noay11bnN1YnNjcmliZS1hbGxcIikuY2hhbmdlKGZ1bmN0aW9uKCl7XHJcblx0XHRcdFx0aWYgKCQodGhpcykucHJvcCgnY2hlY2tlZCcpKSB7XHJcblx0XHRcdFx0XHQkKFwiI2Rpdi1uYXRpb25hbC1jb21tIGlucHV0W2lkXj0nb3B0aW5OYXQnXVwiKS5wcm9wKCdjaGVja2VkJywgZmFsc2UpO1xyXG5cdFx0XHRcdFx0JChcIiNkaXYtY29tcGFueS1jb21tIGlucHV0W2lkXj0nb3B0aW4nXVwiKS5wcm9wKCdjaGVja2VkJywgZmFsc2UpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fSk7XHJcblx0XHR9IGVsc2V7XHJcblx0XHRcdHNldFRpbWVvdXQod2FpdEZvckVsZW1lbnQsIDUwMCk7XHJcblx0XHR9XHJcblx0fVx0IFxyXG5cdHdhaXRGb3JFbGVtZW50KCk7ICBcclxufSk7XHJcbiJ9LCAiaGVhZGVyc1NpemUiOiAwLCAiYm9keVNpemUiOiA0MDk2LCAicmVkaXJlY3RVUkwiOiAiIiwgIl90cmFuc2ZlclNpemUiOiA0MDk2fSwgImNhY2hlIjoge30sICJ0aW1pbmdzIjogeyJkbnMiOiAtMSwgImNvbm5lY3QiOiAtMSwgInNzbCI6IC0xLCAic2VuZCI6IDAsICJ3YWl0IjogMzk0LjAxMywgInJlY2VpdmUiOiAxMy41ODR9LCAicGFnZXJlZiI6ICJwYWdlQDhjOTMyZjgzMzdkOWFiYjRiOWFiOTg4OWRlYzUxYjk5IiwgInNlcnZlcklQQWRkcmVzcyI6ICJbMjYwNjo0NzAwOjIwOjo2ODFhOmVjZl0iLCAiX3NlcnZlclBvcnQiOiA0NDMsICJfc2VjdXJpdHlEZXRhaWxzIjogeyJwcm90b2NvbCI6ICJUTFMgMS4zIiwgInN1YmplY3ROYW1lIjogInN1cHBseWNoYWluY2FuYWRhLmNvbSIsICJpc3N1ZXIiOiAiV0UxIiwgInZhbGlkRnJvbSI6IDE3MjM0NzA4NDEsICJ2YWxpZFRvIjogMTczMTI0Njg0MH19LCB7InN0YXJ0ZWREYXRlVGltZSI6ICIyMDI0LTA5LTA1VDExOjA3OjIwLjI5M1oiLCAidGltZSI6IDE1MS4yNTc5OTk5OTk5OTk5OCwgInJlcXVlc3QiOiB7Im1ldGhvZCI6ICJHRVQiLCAidXJsIjogImh0dHBzOi8vd3d3LmdzdGF0aWMuY29tL2NoYXJ0cy9sb2FkZXIuanMiLCAiaHR0cFZlcnNpb24iOiAiSFRUUC8yLjAiLCAiY29va2llcyI6IFtdLCAiaGVhZGVycyI6IFt7Im5hbWUiOiAiOmF1dGhvcml0eSIsICJ2YWx1ZSI6ICJ3d3cuZ3N0YXRpYy5jb20ifSwgeyJuYW1lIjogIjptZXRob2QiLCAidmFsdWUiOiAiR0VUIn0sIHsibmFtZSI6ICI6cGF0aCIsICJ2YWx1ZSI6ICIvY2hhcnRzL2xvYWRlci5qcyJ9LCB7Im5hbWUiOiAiOnNjaGVtZSIsICJ2YWx1ZSI6ICJodHRwcyJ9LCB7Im5hbWUiOiAiYWNjZXB0IiwgInZhbHVlIjogIiovKiJ9LCB7Im5hbWUiOiAiYWNjZXB0LWVuY29kaW5nIiwgInZhbHVlIjogImd6aXAsIGRlZmxhdGUsIGJyLCB6c3RkIn0sIHsibmFtZSI6ICJhY2NlcHQtbGFuZ3VhZ2UiLCAidmFsdWUiOiAiZW4tVVMifSwgeyJuYW1lIjogInByaW9yaXR5IiwgInZhbHVlIjogInU9MSJ9LCB7Im5hbWUiOiAicmVmZXJlciIsICJ2YWx1ZSI6ICJodHRwczovL3BvcnRhbC5zdXBwbHljaGFpbmNhbmFkYS5jb20vIn0sIHsibmFtZSI6ICJzZWMtY2gtdWEiLCAidmFsdWUiOiAiXCJOb3Q7QT1CcmFuZFwiO3Y9XCIyNFwiLCBcIkNocm9taXVtXCI7dj1cIjEyOFwiIn0sIHsibmFtZSI6ICJzZWMtY2gtdWEtbW9iaWxlIiwgInZhbHVlIjogIj8wIn0sIHsibmFtZSI6ICJzZWMtY2gtdWEtcGxhdGZvcm0iLCAidmFsdWUiOiAiXCJXaW5kb3dzXCIifSwgeyJuYW1lIjogInNlYy1mZXRjaC1kZXN0IiwgInZhbHVlIjogInNjcmlwdCJ9LCB7Im5hbWUiOiAic2VjLWZldGNoLW1vZGUiLCAidmFsdWUiOiAibm8tY29ycyJ9LCB7Im5hbWUiOiAic2VjLWZldGNoLXNpdGUiLCAidmFsdWUiOiAiY3Jvc3Mtc2l0ZSJ9LCB7Im5hbWUiOiAidXNlci1hZ2VudCIsICJ2YWx1ZSI6ICJNb3ppbGxhLzUuMCAoV2luZG93cyBOVCAxMC4wOyBXaW42NDsgeDY0KSBBcHBsZVdlYktpdC81MzcuMzYgKEtIVE1MLCBsaWtlIEdlY2tvKSBDaHJvbWUvMTI4LjAuNjYxMy4xOCBTYWZhcmkvNTM3LjM2In1dLCAicXVlcnlTdHJpbmciOiBbXSwgImhlYWRlcnNTaXplIjogNTcxLCAiYm9keVNpemUiOiAwfSwgInJlc3BvbnNlIjogeyJzdGF0dXMiOiAyMDAsICJzdGF0dXNUZXh0IjogIiIsICJodHRwVmVyc2lvbiI6ICJIVFRQLzIuMCIsICJjb29raWVzIjogW10sICJoZWFkZXJzIjogW3sibmFtZSI6ICJhY2NlcHQtcmFuZ2VzIiwgInZhbHVlIjogImJ5dGVzIn0sIHsibmFtZSI6ICJhY2Nlc3MtY29udHJvbC1hbGxvdy1jcmVkZW50aWFscyIsICJ2YWx1ZSI6ICJ0cnVlIn0sIHsibmFtZSI6ICJhZ2UiLCAidmFsdWUiOiAiMTg1In0sIHsibmFtZSI6ICJhbHQtc3ZjIiwgInZhbHVlIjogImgzPVwiOjQ0M1wiOyBtYT0yNTkyMDAwLGgzLTI5PVwiOjQ0M1wiOyBtYT0yNTkyMDAwIn0sIHsibmFtZSI6ICJjYWNoZS1jb250cm9sIiwgInZhbHVlIjogInB1YmxpYywgbWF4LWFnZT0zNjAwIn0sIHsibmFtZSI6ICJjb250ZW50LWVuY29kaW5nIiwgInZhbHVlIjogImd6aXAifSwgeyJuYW1lIjogImNvbnRlbnQtbGVuZ3RoIiwgInZhbHVlIjogIjE4NTM0In0sIHsibmFtZSI6ICJjb250ZW50LXNlY3VyaXR5LXBvbGljeS1yZXBvcnQtb25seSIsICJ2YWx1ZSI6ICJyZXF1aXJlLXRydXN0ZWQtdHlwZXMtZm9yICdzY3JpcHQnOyByZXBvcnQtdXJpIGh0dHBzOi8vY3NwLndpdGhnb29nbGUuY29tL2NzcC9ndml6In0sIHsibmFtZSI6ICJjb250ZW50LXR5cGUiLCAidmFsdWUiOiAidGV4dC9qYXZhc2NyaXB0In0sIHsibmFtZSI6ICJjcm9zcy1vcmlnaW4tb3BlbmVyLXBvbGljeSIsICJ2YWx1ZSI6ICJzYW1lLW9yaWdpbjsgcmVwb3J0LXRvPVwiZ3ZpelwiIn0sIHsibmFtZSI6ICJjcm9zcy1vcmlnaW4tcmVzb3VyY2UtcG9saWN5IiwgInZhbHVlIjogImNyb3NzLW9yaWdpbiJ9LCB7Im5hbWUiOiAiZGF0ZSIsICJ2YWx1ZSI6ICJUaHUsIDA1IFNlcCAyMDI0IDExOjA0OjE1IEdNVCJ9LCB7Im5hbWUiOiAiZXhwaXJlcyIsICJ2YWx1ZSI6ICJUaHUsIDA1IFNlcCAyMDI0IDEyOjA0OjE1IEdNVCJ9LCB7Im5hbWUiOiAibGFzdC1tb2RpZmllZCIsICJ2YWx1ZSI6ICJUdWUsIDA0IEFwciAyMDIzIDE3OjUyOjMwIEdNVCJ9LCB7Im5hbWUiOiAicmVwb3J0LXRvIiwgInZhbHVlIjogIntcImdyb3VwXCI6XCJndml6XCIsXCJtYXhfYWdlXCI6MjU5MjAwMCxcImVuZHBvaW50c1wiOlt7XCJ1cmxcIjpcImh0dHBzOi8vY3NwLndpdGhnb29nbGUuY29tL2NzcC9yZXBvcnQtdG8vZ3ZpelwifV19In0sIHsibmFtZSI6ICJzZXJ2ZXIiLCAidmFsdWUiOiAic2ZmZSJ9LCB7Im5hbWUiOiAidmFyeSIsICJ2YWx1ZSI6ICJBY2NlcHQtRW5jb2RpbmcsIE9yaWdpbiJ9LCB7Im5hbWUiOiAieC1jb250ZW50LXR5cGUtb3B0aW9ucyIsICJ2YWx1ZSI6ICJub3NuaWZmIn0sIHsibmFtZSI6ICJ4LXhzcy1wcm90ZWN0aW9uIiwgInZhbHVlIjogIjAifV0sICJjb250ZW50IjogeyJzaXplIjogNjI0MjgsICJtaW1lVHlwZSI6ICJ0ZXh0L2phdmFzY3JpcHQiLCAiY29tcHJlc3Npb24iOiA0MzM0MSwgInRleHQiOiAiKGZ1bmN0aW9uKCl7LypcblxuIENvcHlyaWdodCBUaGUgQ2xvc3VyZSBMaWJyYXJ5IEF1dGhvcnMuXG4gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcbiovXG4ndXNlIHN0cmljdCc7ZnVuY3Rpb24gYWEoYSl7dmFyIGI9MDtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gYjxhLmxlbmd0aD97ZG9uZTohMSx2YWx1ZTphW2IrK119Ontkb25lOiEwfX19dmFyIGJhPVwiZnVuY3Rpb25cIj09dHlwZW9mIE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzP09iamVjdC5kZWZpbmVQcm9wZXJ0eTpmdW5jdGlvbihhLGIsYyl7aWYoYT09QXJyYXkucHJvdG90eXBlfHxhPT1PYmplY3QucHJvdG90eXBlKXJldHVybiBhO2FbYl09Yy52YWx1ZTtyZXR1cm4gYX07XG5mdW5jdGlvbiBjYShhKXthPVtcIm9iamVjdFwiPT10eXBlb2YgZ2xvYmFsVGhpcyYmZ2xvYmFsVGhpcyxhLFwib2JqZWN0XCI9PXR5cGVvZiB3aW5kb3cmJndpbmRvdyxcIm9iamVjdFwiPT10eXBlb2Ygc2VsZiYmc2VsZixcIm9iamVjdFwiPT10eXBlb2YgZ2xvYmFsJiZnbG9iYWxdO2Zvcih2YXIgYj0wO2I8YS5sZW5ndGg7KytiKXt2YXIgYz1hW2JdO2lmKGMmJmMuTWF0aD09TWF0aClyZXR1cm4gY310aHJvdyBFcnJvcihcIkNhbm5vdCBmaW5kIGdsb2JhbCBvYmplY3RcIik7fXZhciBsPWNhKHRoaXMpO2Z1bmN0aW9uIHAoYSxiKXtpZihiKWE6e3ZhciBjPWw7YT1hLnNwbGl0KFwiLlwiKTtmb3IodmFyIGQ9MDtkPGEubGVuZ3RoLTE7ZCsrKXt2YXIgZT1hW2RdO2lmKCEoZSBpbiBjKSlicmVhayBhO2M9Y1tlXX1hPWFbYS5sZW5ndGgtMV07ZD1jW2FdO2I9YihkKTtiIT1kJiZudWxsIT1iJiZiYShjLGEse2NvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCx2YWx1ZTpifSl9fVxucChcIlN5bWJvbFwiLGZ1bmN0aW9uKGEpe2Z1bmN0aW9uIGIoaCl7aWYodGhpcyBpbnN0YW5jZW9mIGIpdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN5bWJvbCBpcyBub3QgYSBjb25zdHJ1Y3RvclwiKTtyZXR1cm4gbmV3IGMoZCsoaHx8XCJcIikrXCJfXCIrZSsrLGgpfWZ1bmN0aW9uIGMoaCxmKXt0aGlzLmc9aDtiYSh0aGlzLFwiZGVzY3JpcHRpb25cIix7Y29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwLHZhbHVlOmZ9KX1pZihhKXJldHVybiBhO2MucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ307dmFyIGQ9XCJqc2NvbXBfc3ltYm9sX1wiKygxRTkqTWF0aC5yYW5kb20oKT4+PjApK1wiX1wiLGU9MDtyZXR1cm4gYn0pO1xucChcIlN5bWJvbC5pdGVyYXRvclwiLGZ1bmN0aW9uKGEpe2lmKGEpcmV0dXJuIGE7YT1TeW1ib2woXCJTeW1ib2wuaXRlcmF0b3JcIik7Zm9yKHZhciBiPVwiQXJyYXkgSW50OEFycmF5IFVpbnQ4QXJyYXkgVWludDhDbGFtcGVkQXJyYXkgSW50MTZBcnJheSBVaW50MTZBcnJheSBJbnQzMkFycmF5IFVpbnQzMkFycmF5IEZsb2F0MzJBcnJheSBGbG9hdDY0QXJyYXlcIi5zcGxpdChcIiBcIiksYz0wO2M8Yi5sZW5ndGg7YysrKXt2YXIgZD1sW2JbY11dO1wiZnVuY3Rpb25cIj09PXR5cGVvZiBkJiZcImZ1bmN0aW9uXCIhPXR5cGVvZiBkLnByb3RvdHlwZVthXSYmYmEoZC5wcm90b3R5cGUsYSx7Y29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIGRhKGFhKHRoaXMpKX19KX1yZXR1cm4gYX0pO3AoXCJTeW1ib2wuYXN5bmNJdGVyYXRvclwiLGZ1bmN0aW9uKGEpe3JldHVybiBhP2E6U3ltYm9sKFwiU3ltYm9sLmFzeW5jSXRlcmF0b3JcIil9KTtcbmZ1bmN0aW9uIGRhKGEpe2E9e25leHQ6YX07YVtTeW1ib2wuaXRlcmF0b3JdPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9O3JldHVybiBhfWZ1bmN0aW9uIHEoYSl7dmFyIGI9XCJ1bmRlZmluZWRcIiE9dHlwZW9mIFN5bWJvbCYmU3ltYm9sLml0ZXJhdG9yJiZhW1N5bWJvbC5pdGVyYXRvcl07aWYoYilyZXR1cm4gYi5jYWxsKGEpO2lmKFwibnVtYmVyXCI9PXR5cGVvZiBhLmxlbmd0aClyZXR1cm57bmV4dDphYShhKX07dGhyb3cgRXJyb3IoU3RyaW5nKGEpK1wiIGlzIG5vdCBhbiBpdGVyYWJsZSBvciBBcnJheUxpa2VcIik7fWZ1bmN0aW9uIGVhKGEpe2lmKCEoYSBpbnN0YW5jZW9mIEFycmF5KSl7YT1xKGEpO2Zvcih2YXIgYixjPVtdOyEoYj1hLm5leHQoKSkuZG9uZTspYy5wdXNoKGIudmFsdWUpO2E9Y31yZXR1cm4gYX1mdW5jdGlvbiByKGEsYil7cmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChhLGIpfVxudmFyIGZhPVwiZnVuY3Rpb25cIj09dHlwZW9mIE9iamVjdC5hc3NpZ24/T2JqZWN0LmFzc2lnbjpmdW5jdGlvbihhLGIpe2Zvcih2YXIgYz0xO2M8YXJndW1lbnRzLmxlbmd0aDtjKyspe3ZhciBkPWFyZ3VtZW50c1tjXTtpZihkKWZvcih2YXIgZSBpbiBkKXIoZCxlKSYmKGFbZV09ZFtlXSl9cmV0dXJuIGF9O3AoXCJPYmplY3QuYXNzaWduXCIsZnVuY3Rpb24oYSl7cmV0dXJuIGF8fGZhfSk7dmFyIGhhO2lmKFwiZnVuY3Rpb25cIj09dHlwZW9mIE9iamVjdC5zZXRQcm90b3R5cGVPZiloYT1PYmplY3Quc2V0UHJvdG90eXBlT2Y7ZWxzZXt2YXIgaWE7YTp7dmFyIGphPXthOiEwfSxrYT17fTt0cnl7a2EuX19wcm90b19fPWphO2lhPWthLmE7YnJlYWsgYX1jYXRjaChhKXt9aWE9ITF9aGE9aWE/ZnVuY3Rpb24oYSxiKXthLl9fcHJvdG9fXz1iO2lmKGEuX19wcm90b19fIT09Yil0aHJvdyBuZXcgVHlwZUVycm9yKGErXCIgaXMgbm90IGV4dGVuc2libGVcIik7cmV0dXJuIGF9Om51bGx9dmFyIHQ9aGE7XG5mdW5jdGlvbiBsYSgpe2Zvcih2YXIgYT1OdW1iZXIodGhpcyksYj1bXSxjPWE7Yzxhcmd1bWVudHMubGVuZ3RoO2MrKyliW2MtYV09YXJndW1lbnRzW2NdO3JldHVybiBifVxucChcIlByb21pc2VcIixmdW5jdGlvbihhKXtmdW5jdGlvbiBiKGYpe3RoaXMuZz0wO3RoaXMuaT12b2lkIDA7dGhpcy5oPVtdO3RoaXMubz0hMTt2YXIgZz10aGlzLmooKTt0cnl7ZihnLnJlc29sdmUsZy5yZWplY3QpfWNhdGNoKGspe2cucmVqZWN0KGspfX1mdW5jdGlvbiBjKCl7dGhpcy5nPW51bGx9ZnVuY3Rpb24gZChmKXtyZXR1cm4gZiBpbnN0YW5jZW9mIGI/ZjpuZXcgYihmdW5jdGlvbihnKXtnKGYpfSl9aWYoYSlyZXR1cm4gYTtjLnByb3RvdHlwZS5oPWZ1bmN0aW9uKGYpe2lmKG51bGw9PXRoaXMuZyl7dGhpcy5nPVtdO3ZhciBnPXRoaXM7dGhpcy5pKGZ1bmN0aW9uKCl7Zy5sKCl9KX10aGlzLmcucHVzaChmKX07dmFyIGU9bC5zZXRUaW1lb3V0O2MucHJvdG90eXBlLmk9ZnVuY3Rpb24oZil7ZShmLDApfTtjLnByb3RvdHlwZS5sPWZ1bmN0aW9uKCl7Zm9yKDt0aGlzLmcmJnRoaXMuZy5sZW5ndGg7KXt2YXIgZj10aGlzLmc7dGhpcy5nPVtdO2Zvcih2YXIgZz0wO2c8Zi5sZW5ndGg7KytnKXt2YXIgaz1cbmZbZ107ZltnXT1udWxsO3RyeXtrKCl9Y2F0Y2gobSl7dGhpcy5qKG0pfX19dGhpcy5nPW51bGx9O2MucHJvdG90eXBlLmo9ZnVuY3Rpb24oZil7dGhpcy5pKGZ1bmN0aW9uKCl7dGhyb3cgZjt9KX07Yi5wcm90b3R5cGUuaj1mdW5jdGlvbigpe2Z1bmN0aW9uIGYobSl7cmV0dXJuIGZ1bmN0aW9uKG4pe2t8fChrPSEwLG0uY2FsbChnLG4pKX19dmFyIGc9dGhpcyxrPSExO3JldHVybntyZXNvbHZlOmYodGhpcy5EKSxyZWplY3Q6Zih0aGlzLmwpfX07Yi5wcm90b3R5cGUuRD1mdW5jdGlvbihmKXtpZihmPT09dGhpcyl0aGlzLmwobmV3IFR5cGVFcnJvcihcIkEgUHJvbWlzZSBjYW5ub3QgcmVzb2x2ZSB0byBpdHNlbGZcIikpO2Vsc2UgaWYoZiBpbnN0YW5jZW9mIGIpdGhpcy5PKGYpO2Vsc2V7YTpzd2l0Y2godHlwZW9mIGYpe2Nhc2UgXCJvYmplY3RcIjp2YXIgZz1udWxsIT1mO2JyZWFrIGE7Y2FzZSBcImZ1bmN0aW9uXCI6Zz0hMDticmVhayBhO2RlZmF1bHQ6Zz0hMX1nP3RoaXMuQyhmKTp0aGlzLm0oZil9fTtcbmIucHJvdG90eXBlLkM9ZnVuY3Rpb24oZil7dmFyIGc9dm9pZCAwO3RyeXtnPWYudGhlbn1jYXRjaChrKXt0aGlzLmwoayk7cmV0dXJufVwiZnVuY3Rpb25cIj09dHlwZW9mIGc/dGhpcy5QKGcsZik6dGhpcy5tKGYpfTtiLnByb3RvdHlwZS5sPWZ1bmN0aW9uKGYpe3RoaXMudSgyLGYpfTtiLnByb3RvdHlwZS5tPWZ1bmN0aW9uKGYpe3RoaXMudSgxLGYpfTtiLnByb3RvdHlwZS51PWZ1bmN0aW9uKGYsZyl7aWYoMCE9dGhpcy5nKXRocm93IEVycm9yKFwiQ2Fubm90IHNldHRsZShcIitmK1wiLCBcIitnK1wiKTogUHJvbWlzZSBhbHJlYWR5IHNldHRsZWQgaW4gc3RhdGVcIit0aGlzLmcpO3RoaXMuZz1mO3RoaXMuaT1nOzI9PT10aGlzLmcmJnRoaXMuRygpO3RoaXMuQSgpfTtiLnByb3RvdHlwZS5HPWZ1bmN0aW9uKCl7dmFyIGY9dGhpcztlKGZ1bmN0aW9uKCl7aWYoZi5CKCkpe3ZhciBnPWwuY29uc29sZTtcInVuZGVmaW5lZFwiIT09dHlwZW9mIGcmJmcuZXJyb3IoZi5pKX19LDEpfTtiLnByb3RvdHlwZS5CPVxuZnVuY3Rpb24oKXtpZih0aGlzLm8pcmV0dXJuITE7dmFyIGY9bC5DdXN0b21FdmVudCxnPWwuRXZlbnQsaz1sLmRpc3BhdGNoRXZlbnQ7aWYoXCJ1bmRlZmluZWRcIj09PXR5cGVvZiBrKXJldHVybiEwO1wiZnVuY3Rpb25cIj09PXR5cGVvZiBmP2Y9bmV3IGYoXCJ1bmhhbmRsZWRyZWplY3Rpb25cIix7Y2FuY2VsYWJsZTohMH0pOlwiZnVuY3Rpb25cIj09PXR5cGVvZiBnP2Y9bmV3IGcoXCJ1bmhhbmRsZWRyZWplY3Rpb25cIix7Y2FuY2VsYWJsZTohMH0pOihmPWwuZG9jdW1lbnQuY3JlYXRlRXZlbnQoXCJDdXN0b21FdmVudFwiKSxmLmluaXRDdXN0b21FdmVudChcInVuaGFuZGxlZHJlamVjdGlvblwiLCExLCEwLGYpKTtmLnByb21pc2U9dGhpcztmLnJlYXNvbj10aGlzLmk7cmV0dXJuIGsoZil9O2IucHJvdG90eXBlLkE9ZnVuY3Rpb24oKXtpZihudWxsIT10aGlzLmgpe2Zvcih2YXIgZj0wO2Y8dGhpcy5oLmxlbmd0aDsrK2YpaC5oKHRoaXMuaFtmXSk7dGhpcy5oPW51bGx9fTt2YXIgaD1uZXcgYztiLnByb3RvdHlwZS5PPVxuZnVuY3Rpb24oZil7dmFyIGc9dGhpcy5qKCk7Zi5GKGcucmVzb2x2ZSxnLnJlamVjdCl9O2IucHJvdG90eXBlLlA9ZnVuY3Rpb24oZixnKXt2YXIgaz10aGlzLmooKTt0cnl7Zi5jYWxsKGcsay5yZXNvbHZlLGsucmVqZWN0KX1jYXRjaChtKXtrLnJlamVjdChtKX19O2IucHJvdG90eXBlLnRoZW49ZnVuY3Rpb24oZixnKXtmdW5jdGlvbiBrKHksRyl7cmV0dXJuXCJmdW5jdGlvblwiPT10eXBlb2YgeT9mdW5jdGlvbihyYSl7dHJ5e20oeShyYSkpfWNhdGNoKHNhKXtuKHNhKX19Okd9dmFyIG0sbix1PW5ldyBiKGZ1bmN0aW9uKHksRyl7bT15O249R30pO3RoaXMuRihrKGYsbSksayhnLG4pKTtyZXR1cm4gdX07Yi5wcm90b3R5cGUuY2F0Y2g9ZnVuY3Rpb24oZil7cmV0dXJuIHRoaXMudGhlbih2b2lkIDAsZil9O2IucHJvdG90eXBlLkY9ZnVuY3Rpb24oZixnKXtmdW5jdGlvbiBrKCl7c3dpdGNoKG0uZyl7Y2FzZSAxOmYobS5pKTticmVhaztjYXNlIDI6ZyhtLmkpO2JyZWFrO2RlZmF1bHQ6dGhyb3cgRXJyb3IoXCJVbmV4cGVjdGVkIHN0YXRlOiBcIitcbm0uZyk7fX12YXIgbT10aGlzO251bGw9PXRoaXMuaD9oLmgoayk6dGhpcy5oLnB1c2goayk7dGhpcy5vPSEwfTtiLnJlc29sdmU9ZDtiLnJlamVjdD1mdW5jdGlvbihmKXtyZXR1cm4gbmV3IGIoZnVuY3Rpb24oZyxrKXtrKGYpfSl9O2IucmFjZT1mdW5jdGlvbihmKXtyZXR1cm4gbmV3IGIoZnVuY3Rpb24oZyxrKXtmb3IodmFyIG09cShmKSxuPW0ubmV4dCgpOyFuLmRvbmU7bj1tLm5leHQoKSlkKG4udmFsdWUpLkYoZyxrKX0pfTtiLmFsbD1mdW5jdGlvbihmKXt2YXIgZz1xKGYpLGs9Zy5uZXh0KCk7cmV0dXJuIGsuZG9uZT9kKFtdKTpuZXcgYihmdW5jdGlvbihtLG4pe2Z1bmN0aW9uIHUocmEpe3JldHVybiBmdW5jdGlvbihzYSl7eVtyYV09c2E7Ry0tOzA9PUcmJm0oeSl9fXZhciB5PVtdLEc9MDtkbyB5LnB1c2godm9pZCAwKSxHKyssZChrLnZhbHVlKS5GKHUoeS5sZW5ndGgtMSksbiksaz1nLm5leHQoKTt3aGlsZSghay5kb25lKX0pfTtyZXR1cm4gYn0pO1xucChcIk9iamVjdC5zZXRQcm90b3R5cGVPZlwiLGZ1bmN0aW9uKGEpe3JldHVybiBhfHx0fSk7XG5wKFwiV2Vha01hcFwiLGZ1bmN0aW9uKGEpe2Z1bmN0aW9uIGIoayl7dGhpcy5nPShnKz1NYXRoLnJhbmRvbSgpKzEpLnRvU3RyaW5nKCk7aWYoayl7az1xKGspO2Zvcih2YXIgbTshKG09ay5uZXh0KCkpLmRvbmU7KW09bS52YWx1ZSx0aGlzLnNldChtWzBdLG1bMV0pfX1mdW5jdGlvbiBjKCl7fWZ1bmN0aW9uIGQoayl7dmFyIG09dHlwZW9mIGs7cmV0dXJuXCJvYmplY3RcIj09PW0mJm51bGwhPT1rfHxcImZ1bmN0aW9uXCI9PT1tfWZ1bmN0aW9uIGUoayl7aWYoIXIoayxmKSl7dmFyIG09bmV3IGM7YmEoayxmLHt2YWx1ZTptfSl9fWZ1bmN0aW9uIGgoayl7dmFyIG09T2JqZWN0W2tdO20mJihPYmplY3Rba109ZnVuY3Rpb24obil7aWYobiBpbnN0YW5jZW9mIGMpcmV0dXJuIG47T2JqZWN0LmlzRXh0ZW5zaWJsZShuKSYmZShuKTtyZXR1cm4gbShuKX0pfWlmKGZ1bmN0aW9uKCl7aWYoIWF8fCFPYmplY3Quc2VhbClyZXR1cm4hMTt0cnl7dmFyIGs9T2JqZWN0LnNlYWwoe30pLG09T2JqZWN0LnNlYWwoe30pLFxubj1uZXcgYShbW2ssMl0sW20sM11dKTtpZigyIT1uLmdldChrKXx8MyE9bi5nZXQobSkpcmV0dXJuITE7bi5kZWxldGUoayk7bi5zZXQobSw0KTtyZXR1cm4hbi5oYXMoaykmJjQ9PW4uZ2V0KG0pfWNhdGNoKHUpe3JldHVybiExfX0oKSlyZXR1cm4gYTt2YXIgZj1cIiRqc2NvbXBfaGlkZGVuX1wiK01hdGgucmFuZG9tKCk7aChcImZyZWV6ZVwiKTtoKFwicHJldmVudEV4dGVuc2lvbnNcIik7aChcInNlYWxcIik7dmFyIGc9MDtiLnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24oayxtKXtpZighZChrKSl0aHJvdyBFcnJvcihcIkludmFsaWQgV2Vha01hcCBrZXlcIik7ZShrKTtpZighcihrLGYpKXRocm93IEVycm9yKFwiV2Vha01hcCBrZXkgZmFpbDogXCIrayk7a1tmXVt0aGlzLmddPW07cmV0dXJuIHRoaXN9O2IucHJvdG90eXBlLmdldD1mdW5jdGlvbihrKXtyZXR1cm4gZChrKSYmcihrLGYpP2tbZl1bdGhpcy5nXTp2b2lkIDB9O2IucHJvdG90eXBlLmhhcz1mdW5jdGlvbihrKXtyZXR1cm4gZChrKSYmcihrLFxuZikmJnIoa1tmXSx0aGlzLmcpfTtiLnByb3RvdHlwZS5kZWxldGU9ZnVuY3Rpb24oayl7cmV0dXJuIGQoaykmJnIoayxmKSYmcihrW2ZdLHRoaXMuZyk/ZGVsZXRlIGtbZl1bdGhpcy5nXTohMX07cmV0dXJuIGJ9KTtcbnAoXCJNYXBcIixmdW5jdGlvbihhKXtmdW5jdGlvbiBiKCl7dmFyIGc9e307cmV0dXJuIGcudj1nLm5leHQ9Zy5oZWFkPWd9ZnVuY3Rpb24gYyhnLGspe3ZhciBtPWcuZztyZXR1cm4gZGEoZnVuY3Rpb24oKXtpZihtKXtmb3IoO20uaGVhZCE9Zy5nOyltPW0udjtmb3IoO20ubmV4dCE9bS5oZWFkOylyZXR1cm4gbT1tLm5leHQse2RvbmU6ITEsdmFsdWU6ayhtKX07bT1udWxsfXJldHVybntkb25lOiEwLHZhbHVlOnZvaWQgMH19KX1mdW5jdGlvbiBkKGcsayl7dmFyIG09ayYmdHlwZW9mIGs7XCJvYmplY3RcIj09bXx8XCJmdW5jdGlvblwiPT1tP2guaGFzKGspP209aC5nZXQoayk6KG09XCJcIisgKytmLGguc2V0KGssbSkpOm09XCJwX1wiK2s7dmFyIG49Zy5oW21dO2lmKG4mJnIoZy5oLG0pKWZvcihnPTA7ZzxuLmxlbmd0aDtnKyspe3ZhciB1PW5bZ107aWYoayE9PWsmJnUua2V5IT09dS5rZXl8fGs9PT11LmtleSlyZXR1cm57aWQ6bSxsaXN0Om4saW5kZXg6ZyxzOnV9fXJldHVybntpZDptLGxpc3Q6bixcbmluZGV4Oi0xLHM6dm9pZCAwfX1mdW5jdGlvbiBlKGcpe3RoaXMuaD17fTt0aGlzLmc9YigpO3RoaXMuc2l6ZT0wO2lmKGcpe2c9cShnKTtmb3IodmFyIGs7IShrPWcubmV4dCgpKS5kb25lOylrPWsudmFsdWUsdGhpcy5zZXQoa1swXSxrWzFdKX19aWYoZnVuY3Rpb24oKXtpZighYXx8XCJmdW5jdGlvblwiIT10eXBlb2YgYXx8IWEucHJvdG90eXBlLmVudHJpZXN8fFwiZnVuY3Rpb25cIiE9dHlwZW9mIE9iamVjdC5zZWFsKXJldHVybiExO3RyeXt2YXIgZz1PYmplY3Quc2VhbCh7eDo0fSksaz1uZXcgYShxKFtbZyxcInNcIl1dKSk7aWYoXCJzXCIhPWsuZ2V0KGcpfHwxIT1rLnNpemV8fGsuZ2V0KHt4OjR9KXx8ay5zZXQoe3g6NH0sXCJ0XCIpIT1rfHwyIT1rLnNpemUpcmV0dXJuITE7dmFyIG09ay5lbnRyaWVzKCksbj1tLm5leHQoKTtpZihuLmRvbmV8fG4udmFsdWVbMF0hPWd8fFwic1wiIT1uLnZhbHVlWzFdKXJldHVybiExO249bS5uZXh0KCk7cmV0dXJuIG4uZG9uZXx8NCE9bi52YWx1ZVswXS54fHxcblwidFwiIT1uLnZhbHVlWzFdfHwhbS5uZXh0KCkuZG9uZT8hMTohMH1jYXRjaCh1KXtyZXR1cm4hMX19KCkpcmV0dXJuIGE7dmFyIGg9bmV3IFdlYWtNYXA7ZS5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKGcsayl7Zz0wPT09Zz8wOmc7dmFyIG09ZCh0aGlzLGcpO20ubGlzdHx8KG0ubGlzdD10aGlzLmhbbS5pZF09W10pO20ucz9tLnMudmFsdWU9azoobS5zPXtuZXh0OnRoaXMuZyx2OnRoaXMuZy52LGhlYWQ6dGhpcy5nLGtleTpnLHZhbHVlOmt9LG0ubGlzdC5wdXNoKG0ucyksdGhpcy5nLnYubmV4dD1tLnMsdGhpcy5nLnY9bS5zLHRoaXMuc2l6ZSsrKTtyZXR1cm4gdGhpc307ZS5wcm90b3R5cGUuZGVsZXRlPWZ1bmN0aW9uKGcpe2c9ZCh0aGlzLGcpO3JldHVybiBnLnMmJmcubGlzdD8oZy5saXN0LnNwbGljZShnLmluZGV4LDEpLGcubGlzdC5sZW5ndGh8fGRlbGV0ZSB0aGlzLmhbZy5pZF0sZy5zLnYubmV4dD1nLnMubmV4dCxnLnMubmV4dC52PWcucy52LGcucy5oZWFkPW51bGwsdGhpcy5zaXplLS0sXG4hMCk6ITF9O2UucHJvdG90eXBlLmNsZWFyPWZ1bmN0aW9uKCl7dGhpcy5oPXt9O3RoaXMuZz10aGlzLmcudj1iKCk7dGhpcy5zaXplPTB9O2UucHJvdG90eXBlLmhhcz1mdW5jdGlvbihnKXtyZXR1cm4hIWQodGhpcyxnKS5zfTtlLnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24oZyl7cmV0dXJuKGc9ZCh0aGlzLGcpLnMpJiZnLnZhbHVlfTtlLnByb3RvdHlwZS5lbnRyaWVzPWZ1bmN0aW9uKCl7cmV0dXJuIGModGhpcyxmdW5jdGlvbihnKXtyZXR1cm5bZy5rZXksZy52YWx1ZV19KX07ZS5wcm90b3R5cGUua2V5cz1mdW5jdGlvbigpe3JldHVybiBjKHRoaXMsZnVuY3Rpb24oZyl7cmV0dXJuIGcua2V5fSl9O2UucHJvdG90eXBlLnZhbHVlcz1mdW5jdGlvbigpe3JldHVybiBjKHRoaXMsZnVuY3Rpb24oZyl7cmV0dXJuIGcudmFsdWV9KX07ZS5wcm90b3R5cGUuZm9yRWFjaD1mdW5jdGlvbihnLGspe2Zvcih2YXIgbT10aGlzLmVudHJpZXMoKSxuOyEobj1tLm5leHQoKSkuZG9uZTspbj1uLnZhbHVlLFxuZy5jYWxsKGssblsxXSxuWzBdLHRoaXMpfTtlLnByb3RvdHlwZVtTeW1ib2wuaXRlcmF0b3JdPWUucHJvdG90eXBlLmVudHJpZXM7dmFyIGY9MDtyZXR1cm4gZX0pO2Z1bmN0aW9uIG1hKGEsYil7YSBpbnN0YW5jZW9mIFN0cmluZyYmKGErPVwiXCIpO3ZhciBjPTAsZD0hMSxlPXtuZXh0OmZ1bmN0aW9uKCl7aWYoIWQmJmM8YS5sZW5ndGgpe3ZhciBoPWMrKztyZXR1cm57dmFsdWU6YihoLGFbaF0pLGRvbmU6ITF9fWQ9ITA7cmV0dXJue2RvbmU6ITAsdmFsdWU6dm9pZCAwfX19O2VbU3ltYm9sLml0ZXJhdG9yXT1mdW5jdGlvbigpe3JldHVybiBlfTtyZXR1cm4gZX1wKFwiQXJyYXkucHJvdG90eXBlLnZhbHVlc1wiLGZ1bmN0aW9uKGEpe3JldHVybiBhP2E6ZnVuY3Rpb24oKXtyZXR1cm4gbWEodGhpcyxmdW5jdGlvbihiLGMpe3JldHVybiBjfSl9fSk7cChcIkFycmF5LnByb3RvdHlwZS5rZXlzXCIsZnVuY3Rpb24oYSl7cmV0dXJuIGE/YTpmdW5jdGlvbigpe3JldHVybiBtYSh0aGlzLGZ1bmN0aW9uKGIpe3JldHVybiBifSl9fSk7XG5mdW5jdGlvbiB2KGEsYixjKXtpZihudWxsPT1hKXRocm93IG5ldyBUeXBlRXJyb3IoXCJUaGUgJ3RoaXMnIHZhbHVlIGZvciBTdHJpbmcucHJvdG90eXBlLlwiK2MrXCIgbXVzdCBub3QgYmUgbnVsbCBvciB1bmRlZmluZWRcIik7aWYoYiBpbnN0YW5jZW9mIFJlZ0V4cCl0aHJvdyBuZXcgVHlwZUVycm9yKFwiRmlyc3QgYXJndW1lbnQgdG8gU3RyaW5nLnByb3RvdHlwZS5cIitjK1wiIG11c3Qgbm90IGJlIGEgcmVndWxhciBleHByZXNzaW9uXCIpO3JldHVybiBhK1wiXCJ9cChcIlN0cmluZy5wcm90b3R5cGUuZW5kc1dpdGhcIixmdW5jdGlvbihhKXtyZXR1cm4gYT9hOmZ1bmN0aW9uKGIsYyl7dmFyIGQ9dih0aGlzLGIsXCJlbmRzV2l0aFwiKTt2b2lkIDA9PT1jJiYoYz1kLmxlbmd0aCk7Yz1NYXRoLm1heCgwLE1hdGgubWluKGN8MCxkLmxlbmd0aCkpO2Zvcih2YXIgZT1iLmxlbmd0aDswPGUmJjA8YzspaWYoZFstLWNdIT1iWy0tZV0pcmV0dXJuITE7cmV0dXJuIDA+PWV9fSk7XG5mdW5jdGlvbiBuYShhLGIsYyl7YSBpbnN0YW5jZW9mIFN0cmluZyYmKGE9U3RyaW5nKGEpKTtmb3IodmFyIGQ9YS5sZW5ndGgsZT0wO2U8ZDtlKyspe3ZhciBoPWFbZV07aWYoYi5jYWxsKGMsaCxlLGEpKXJldHVybntKOmUsTjpofX1yZXR1cm57SjotMSxOOnZvaWQgMH19cChcIkFycmF5LnByb3RvdHlwZS5maW5kXCIsZnVuY3Rpb24oYSl7cmV0dXJuIGE/YTpmdW5jdGlvbihiLGMpe3JldHVybiBuYSh0aGlzLGIsYykuTn19KTtwKFwiU3RyaW5nLnByb3RvdHlwZS5zdGFydHNXaXRoXCIsZnVuY3Rpb24oYSl7cmV0dXJuIGE/YTpmdW5jdGlvbihiLGMpe3ZhciBkPXYodGhpcyxiLFwic3RhcnRzV2l0aFwiKSxlPWQubGVuZ3RoLGg9Yi5sZW5ndGg7Yz1NYXRoLm1heCgwLE1hdGgubWluKGN8MCxkLmxlbmd0aCkpO2Zvcih2YXIgZj0wO2Y8aCYmYzxlOylpZihkW2MrK10hPWJbZisrXSlyZXR1cm4hMTtyZXR1cm4gZj49aH19KTtcbnAoXCJOdW1iZXIuaXNGaW5pdGVcIixmdW5jdGlvbihhKXtyZXR1cm4gYT9hOmZ1bmN0aW9uKGIpe3JldHVyblwibnVtYmVyXCIhPT10eXBlb2YgYj8hMTohaXNOYU4oYikmJkluZmluaXR5IT09YiYmLUluZmluaXR5IT09Yn19KTtwKFwiU3RyaW5nLnByb3RvdHlwZS5yZXBlYXRcIixmdW5jdGlvbihhKXtyZXR1cm4gYT9hOmZ1bmN0aW9uKGIpe3ZhciBjPXYodGhpcyxudWxsLFwicmVwZWF0XCIpO2lmKDA+Ynx8MTM0MjE3NzI3OTxiKXRocm93IG5ldyBSYW5nZUVycm9yKFwiSW52YWxpZCBjb3VudCB2YWx1ZVwiKTtifD0wO2Zvcih2YXIgZD1cIlwiO2I7KWlmKGImMSYmKGQrPWMpLGI+Pj49MSljKz1jO3JldHVybiBkfX0pO1xucChcIkFycmF5LmZyb21cIixmdW5jdGlvbihhKXtyZXR1cm4gYT9hOmZ1bmN0aW9uKGIsYyxkKXtjPW51bGwhPWM/YzpmdW5jdGlvbihnKXtyZXR1cm4gZ307dmFyIGU9W10saD1cInVuZGVmaW5lZFwiIT10eXBlb2YgU3ltYm9sJiZTeW1ib2wuaXRlcmF0b3ImJmJbU3ltYm9sLml0ZXJhdG9yXTtpZihcImZ1bmN0aW9uXCI9PXR5cGVvZiBoKXtiPWguY2FsbChiKTtmb3IodmFyIGY9MDshKGg9Yi5uZXh0KCkpLmRvbmU7KWUucHVzaChjLmNhbGwoZCxoLnZhbHVlLGYrKykpfWVsc2UgZm9yKGg9Yi5sZW5ndGgsZj0wO2Y8aDtmKyspZS5wdXNoKGMuY2FsbChkLGJbZl0sZikpO3JldHVybiBlfX0pO3AoXCJTdHJpbmcucHJvdG90eXBlLnRyaW1MZWZ0XCIsZnVuY3Rpb24oYSl7ZnVuY3Rpb24gYigpe3JldHVybiB0aGlzLnJlcGxhY2UoL15bXFxzXFx4YTBdKy8sXCJcIil9cmV0dXJuIGF8fGJ9KTtwKFwiU3RyaW5nLnByb3RvdHlwZS50cmltU3RhcnRcIixmdW5jdGlvbihhKXtyZXR1cm4gYXx8U3RyaW5nLnByb3RvdHlwZS50cmltTGVmdH0pO1xucChcIk9iamVjdC5pc1wiLGZ1bmN0aW9uKGEpe3JldHVybiBhP2E6ZnVuY3Rpb24oYixjKXtyZXR1cm4gYj09PWM/MCE9PWJ8fDEvYj09PTEvYzpiIT09YiYmYyE9PWN9fSk7cChcIkFycmF5LnByb3RvdHlwZS5pbmNsdWRlc1wiLGZ1bmN0aW9uKGEpe3JldHVybiBhP2E6ZnVuY3Rpb24oYixjKXt2YXIgZD10aGlzO2QgaW5zdGFuY2VvZiBTdHJpbmcmJihkPVN0cmluZyhkKSk7dmFyIGU9ZC5sZW5ndGg7Yz1jfHwwO2ZvcigwPmMmJihjPU1hdGgubWF4KGMrZSwwKSk7YzxlO2MrKyl7dmFyIGg9ZFtjXTtpZihoPT09Ynx8T2JqZWN0LmlzKGgsYikpcmV0dXJuITB9cmV0dXJuITF9fSk7cChcIlN0cmluZy5wcm90b3R5cGUuaW5jbHVkZXNcIixmdW5jdGlvbihhKXtyZXR1cm4gYT9hOmZ1bmN0aW9uKGIsYyl7cmV0dXJuLTEhPT12KHRoaXMsYixcImluY2x1ZGVzXCIpLmluZGV4T2YoYixjfHwwKX19KTtcbnAoXCJNYXRoLnRydW5jXCIsZnVuY3Rpb24oYSl7cmV0dXJuIGE/YTpmdW5jdGlvbihiKXtiPU51bWJlcihiKTtpZihpc05hTihiKXx8SW5maW5pdHk9PT1ifHwtSW5maW5pdHk9PT1ifHwwPT09YilyZXR1cm4gYjt2YXIgYz1NYXRoLmZsb29yKE1hdGguYWJzKGIpKTtyZXR1cm4gMD5iPy1jOmN9fSk7ZnVuY3Rpb24gb2EoYSl7YT1NYXRoLnRydW5jKGEpfHwwOzA+YSYmKGErPXRoaXMubGVuZ3RoKTtpZighKDA+YXx8YT49dGhpcy5sZW5ndGgpKXJldHVybiB0aGlzW2FdfXAoXCJBcnJheS5wcm90b3R5cGUuYXRcIixmdW5jdGlvbihhKXtyZXR1cm4gYT9hOm9hfSk7XG5wKFwiQXJyYXkucHJvdG90eXBlLmNvcHlXaXRoaW5cIixmdW5jdGlvbihhKXtmdW5jdGlvbiBiKGMpe2M9TnVtYmVyKGMpO3JldHVybiBJbmZpbml0eT09PWN8fC1JbmZpbml0eT09PWM/YzpjfDB9cmV0dXJuIGE/YTpmdW5jdGlvbihjLGQsZSl7dmFyIGg9dGhpcy5sZW5ndGg7Yz1iKGMpO2Q9YihkKTtlPXZvaWQgMD09PWU/aDpiKGUpO2M9MD5jP01hdGgubWF4KGgrYywwKTpNYXRoLm1pbihjLGgpO2Q9MD5kP01hdGgubWF4KGgrZCwwKTpNYXRoLm1pbihkLGgpO2U9MD5lP01hdGgubWF4KGgrZSwwKTpNYXRoLm1pbihlLGgpO2lmKGM8ZClmb3IoO2Q8ZTspZCBpbiB0aGlzP3RoaXNbYysrXT10aGlzW2QrK106KGRlbGV0ZSB0aGlzW2MrK10sZCsrKTtlbHNlIGZvcihlPU1hdGgubWluKGUsaCtkLWMpLGMrPWUtZDtlPmQ7KS0tZSBpbiB0aGlzP3RoaXNbLS1jXT10aGlzW2VdOmRlbGV0ZSB0aGlzWy0tY107cmV0dXJuIHRoaXN9fSk7XG5wKFwiQXJyYXkucHJvdG90eXBlLmVudHJpZXNcIixmdW5jdGlvbihhKXtyZXR1cm4gYT9hOmZ1bmN0aW9uKCl7cmV0dXJuIG1hKHRoaXMsZnVuY3Rpb24oYixjKXtyZXR1cm5bYixjXX0pfX0pO3AoXCJBcnJheS5wcm90b3R5cGUuZmlsbFwiLGZ1bmN0aW9uKGEpe3JldHVybiBhP2E6ZnVuY3Rpb24oYixjLGQpe3ZhciBlPXRoaXMubGVuZ3RofHwwOzA+YyYmKGM9TWF0aC5tYXgoMCxlK2MpKTtpZihudWxsPT1kfHxkPmUpZD1lO2Q9TnVtYmVyKGQpOzA+ZCYmKGQ9TWF0aC5tYXgoMCxlK2QpKTtmb3IoYz1OdW1iZXIoY3x8MCk7YzxkO2MrKyl0aGlzW2NdPWI7cmV0dXJuIHRoaXN9fSk7cChcIkFycmF5LnByb3RvdHlwZS5maW5kSW5kZXhcIixmdW5jdGlvbihhKXtyZXR1cm4gYT9hOmZ1bmN0aW9uKGIsYyl7cmV0dXJuIG5hKHRoaXMsYixjKS5KfX0pO1xucChcIkFycmF5LnByb3RvdHlwZS5mbGF0XCIsZnVuY3Rpb24oYSl7cmV0dXJuIGE/YTpmdW5jdGlvbihiKXtiPXZvaWQgMD09PWI/MTpiO3ZhciBjPVtdO0FycmF5LnByb3RvdHlwZS5mb3JFYWNoLmNhbGwodGhpcyxmdW5jdGlvbihkKXtBcnJheS5pc0FycmF5KGQpJiYwPGI/KGQ9QXJyYXkucHJvdG90eXBlLmZsYXQuY2FsbChkLGItMSksYy5wdXNoLmFwcGx5KGMsZCkpOmMucHVzaChkKX0pO3JldHVybiBjfX0pO3AoXCJBcnJheS5wcm90b3R5cGUuZmxhdE1hcFwiLGZ1bmN0aW9uKGEpe3JldHVybiBhP2E6ZnVuY3Rpb24oYixjKXt2YXIgZD1bXTtBcnJheS5wcm90b3R5cGUuZm9yRWFjaC5jYWxsKHRoaXMsZnVuY3Rpb24oZSxoKXtlPWIuY2FsbChjLGUsaCx0aGlzKTtBcnJheS5pc0FycmF5KGUpP2QucHVzaC5hcHBseShkLGUpOmQucHVzaChlKX0pO3JldHVybiBkfX0pO3AoXCJBcnJheS5vZlwiLGZ1bmN0aW9uKGEpe3JldHVybiBhP2E6ZnVuY3Rpb24oYil7cmV0dXJuIEFycmF5LmZyb20oYXJndW1lbnRzKX19KTtcbnAoXCJnbG9iYWxUaGlzXCIsZnVuY3Rpb24oYSl7cmV0dXJuIGF8fGx9KTtwKFwiTWF0aC5hY29zaFwiLGZ1bmN0aW9uKGEpe3JldHVybiBhP2E6ZnVuY3Rpb24oYil7Yj1OdW1iZXIoYik7cmV0dXJuIE1hdGgubG9nKGIrTWF0aC5zcXJ0KGIqYi0xKSl9fSk7cChcIk1hdGguYXNpbmhcIixmdW5jdGlvbihhKXtyZXR1cm4gYT9hOmZ1bmN0aW9uKGIpe2I9TnVtYmVyKGIpO2lmKDA9PT1iKXJldHVybiBiO3ZhciBjPU1hdGgubG9nKE1hdGguYWJzKGIpK01hdGguc3FydChiKmIrMSkpO3JldHVybiAwPmI/LWM6Y319KTtwKFwiTWF0aC5sb2cxcFwiLGZ1bmN0aW9uKGEpe3JldHVybiBhP2E6ZnVuY3Rpb24oYil7Yj1OdW1iZXIoYik7aWYoLjI1PmImJi0uMjU8Yil7Zm9yKHZhciBjPWIsZD0xLGU9YixoPTAsZj0xO2ghPWU7KWMqPWIsZio9LTEsZT0oaD1lKStmKmMvKytkO3JldHVybiBlfXJldHVybiBNYXRoLmxvZygxK2IpfX0pO1xucChcIk1hdGguYXRhbmhcIixmdW5jdGlvbihhKXtpZihhKXJldHVybiBhO3ZhciBiPU1hdGgubG9nMXA7cmV0dXJuIGZ1bmN0aW9uKGMpe2M9TnVtYmVyKGMpO3JldHVybihiKGMpLWIoLWMpKS8yfX0pO3AoXCJNYXRoLmNicnRcIixmdW5jdGlvbihhKXtyZXR1cm4gYT9hOmZ1bmN0aW9uKGIpe2lmKDA9PT1iKXJldHVybiBiO2I9TnVtYmVyKGIpO3ZhciBjPU1hdGgucG93KE1hdGguYWJzKGIpLDEvMyk7cmV0dXJuIDA+Yj8tYzpjfX0pO3AoXCJNYXRoLmNsejMyXCIsZnVuY3Rpb24oYSl7cmV0dXJuIGE/YTpmdW5jdGlvbihiKXtiPU51bWJlcihiKT4+PjA7aWYoMD09PWIpcmV0dXJuIDMyO3ZhciBjPTA7MD09PShiJjQyOTQ5MDE3NjApJiYoYjw8PTE2LGMrPTE2KTswPT09KGImNDI3ODE5MDA4MCkmJihiPDw9OCxjKz04KTswPT09KGImNDAyNjUzMTg0MCkmJihiPDw9NCxjKz00KTswPT09KGImMzIyMTIyNTQ3MikmJihiPDw9MixjKz0yKTswPT09KGImMjE0NzQ4MzY0OCkmJmMrKztyZXR1cm4gY319KTtcbnAoXCJNYXRoLmNvc2hcIixmdW5jdGlvbihhKXtpZihhKXJldHVybiBhO3ZhciBiPU1hdGguZXhwO3JldHVybiBmdW5jdGlvbihjKXtjPU51bWJlcihjKTtyZXR1cm4oYihjKStiKC1jKSkvMn19KTtwKFwiTWF0aC5leHBtMVwiLGZ1bmN0aW9uKGEpe3JldHVybiBhP2E6ZnVuY3Rpb24oYil7Yj1OdW1iZXIoYik7aWYoLjI1PmImJi0uMjU8Yil7Zm9yKHZhciBjPWIsZD0xLGU9YixoPTA7aCE9ZTspYyo9Yi8rK2QsZT0oaD1lKStjO3JldHVybiBlfXJldHVybiBNYXRoLmV4cChiKS0xfX0pO3AoXCJNYXRoLmZyb3VuZFwiLGZ1bmN0aW9uKGEpe2lmKGEpcmV0dXJuIGE7aWYoXCJmdW5jdGlvblwiIT09dHlwZW9mIEZsb2F0MzJBcnJheSlyZXR1cm4gZnVuY3Rpb24oYyl7cmV0dXJuIGN9O3ZhciBiPW5ldyBGbG9hdDMyQXJyYXkoMSk7cmV0dXJuIGZ1bmN0aW9uKGMpe2JbMF09YztyZXR1cm4gYlswXX19KTtcbnAoXCJNYXRoLmh5cG90XCIsZnVuY3Rpb24oYSl7cmV0dXJuIGE/YTpmdW5jdGlvbihiKXtpZigyPmFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/TWF0aC5hYnMoYXJndW1lbnRzWzBdKTowO3ZhciBjLGQsZTtmb3IoYz1lPTA7Yzxhcmd1bWVudHMubGVuZ3RoO2MrKyllPU1hdGgubWF4KGUsTWF0aC5hYnMoYXJndW1lbnRzW2NdKSk7aWYoMUUxMDA8ZXx8MUUtMTAwPmUpe2lmKCFlKXJldHVybiBlO2ZvcihjPWQ9MDtjPGFyZ3VtZW50cy5sZW5ndGg7YysrKXt2YXIgaD1OdW1iZXIoYXJndW1lbnRzW2NdKS9lO2QrPWgqaH1yZXR1cm4gTWF0aC5zcXJ0KGQpKmV9Zm9yKGM9ZD0wO2M8YXJndW1lbnRzLmxlbmd0aDtjKyspaD1OdW1iZXIoYXJndW1lbnRzW2NdKSxkKz1oKmg7cmV0dXJuIE1hdGguc3FydChkKX19KTtcbnAoXCJNYXRoLmltdWxcIixmdW5jdGlvbihhKXtyZXR1cm4gYT9hOmZ1bmN0aW9uKGIsYyl7Yj1OdW1iZXIoYik7Yz1OdW1iZXIoYyk7dmFyIGQ9YiY2NTUzNSxlPWMmNjU1MzU7cmV0dXJuIGQqZSsoKGI+Pj4xNiY2NTUzNSkqZStkKihjPj4+MTYmNjU1MzUpPDwxNj4+PjApfDB9fSk7cChcIk1hdGgubG9nMTBcIixmdW5jdGlvbihhKXtyZXR1cm4gYT9hOmZ1bmN0aW9uKGIpe3JldHVybiBNYXRoLmxvZyhiKS9NYXRoLkxOMTB9fSk7cChcIk1hdGgubG9nMlwiLGZ1bmN0aW9uKGEpe3JldHVybiBhP2E6ZnVuY3Rpb24oYil7cmV0dXJuIE1hdGgubG9nKGIpL01hdGguTE4yfX0pO3AoXCJNYXRoLnNpZ25cIixmdW5jdGlvbihhKXtyZXR1cm4gYT9hOmZ1bmN0aW9uKGIpe2I9TnVtYmVyKGIpO3JldHVybiAwPT09Ynx8aXNOYU4oYik/YjowPGI/MTotMX19KTtcbnAoXCJNYXRoLnNpbmhcIixmdW5jdGlvbihhKXtpZihhKXJldHVybiBhO3ZhciBiPU1hdGguZXhwO3JldHVybiBmdW5jdGlvbihjKXtjPU51bWJlcihjKTtyZXR1cm4gMD09PWM/YzooYihjKS1iKC1jKSkvMn19KTtwKFwiTWF0aC50YW5oXCIsZnVuY3Rpb24oYSl7cmV0dXJuIGE/YTpmdW5jdGlvbihiKXtiPU51bWJlcihiKTtpZigwPT09YilyZXR1cm4gYjt2YXIgYz1NYXRoLmV4cCgtMipNYXRoLmFicyhiKSk7Yz0oMS1jKS8oMStjKTtyZXR1cm4gMD5iPy1jOmN9fSk7cChcIk51bWJlci5FUFNJTE9OXCIsZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5wb3coMiwtNTIpfSk7cChcIk51bWJlci5NQVhfU0FGRV9JTlRFR0VSXCIsZnVuY3Rpb24oKXtyZXR1cm4gOTAwNzE5OTI1NDc0MDk5MX0pO3AoXCJOdW1iZXIuTUlOX1NBRkVfSU5URUdFUlwiLGZ1bmN0aW9uKCl7cmV0dXJuLTkwMDcxOTkyNTQ3NDA5OTF9KTtcbnAoXCJOdW1iZXIuaXNJbnRlZ2VyXCIsZnVuY3Rpb24oYSl7cmV0dXJuIGE/YTpmdW5jdGlvbihiKXtyZXR1cm4gTnVtYmVyLmlzRmluaXRlKGIpP2I9PT1NYXRoLmZsb29yKGIpOiExfX0pO3AoXCJOdW1iZXIuaXNOYU5cIixmdW5jdGlvbihhKXtyZXR1cm4gYT9hOmZ1bmN0aW9uKGIpe3JldHVyblwibnVtYmVyXCI9PT10eXBlb2YgYiYmaXNOYU4oYil9fSk7cChcIk51bWJlci5pc1NhZmVJbnRlZ2VyXCIsZnVuY3Rpb24oYSl7cmV0dXJuIGE/YTpmdW5jdGlvbihiKXtyZXR1cm4gTnVtYmVyLmlzSW50ZWdlcihiKSYmTWF0aC5hYnMoYik8PU51bWJlci5NQVhfU0FGRV9JTlRFR0VSfX0pO3AoXCJOdW1iZXIucGFyc2VGbG9hdFwiLGZ1bmN0aW9uKGEpe3JldHVybiBhfHxwYXJzZUZsb2F0fSk7cChcIk51bWJlci5wYXJzZUludFwiLGZ1bmN0aW9uKGEpe3JldHVybiBhfHxwYXJzZUludH0pO1xucChcIk9iamVjdC5lbnRyaWVzXCIsZnVuY3Rpb24oYSl7cmV0dXJuIGE/YTpmdW5jdGlvbihiKXt2YXIgYz1bXSxkO2ZvcihkIGluIGIpcihiLGQpJiZjLnB1c2goW2QsYltkXV0pO3JldHVybiBjfX0pO3AoXCJPYmplY3QuZnJvbUVudHJpZXNcIixmdW5jdGlvbihhKXtyZXR1cm4gYT9hOmZ1bmN0aW9uKGIpe3ZhciBjPXt9O2lmKCEoU3ltYm9sLml0ZXJhdG9yIGluIGIpKXRocm93IG5ldyBUeXBlRXJyb3IoXCJcIitiK1wiIGlzIG5vdCBpdGVyYWJsZVwiKTtiPWJbU3ltYm9sLml0ZXJhdG9yXS5jYWxsKGIpO2Zvcih2YXIgZD1iLm5leHQoKTshZC5kb25lO2Q9Yi5uZXh0KCkpe2Q9ZC52YWx1ZTtpZihPYmplY3QoZCkhPT1kKXRocm93IG5ldyBUeXBlRXJyb3IoXCJpdGVyYWJsZSBmb3IgZnJvbUVudHJpZXMgc2hvdWxkIHlpZWxkIG9iamVjdHNcIik7Y1tkWzBdXT1kWzFdfXJldHVybiBjfX0pO3AoXCJSZWZsZWN0XCIsZnVuY3Rpb24oYSl7cmV0dXJuIGE/YTp7fX0pO1xucChcIk9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHNcIixmdW5jdGlvbihhKXtyZXR1cm4gYT9hOmZ1bmN0aW9uKCl7cmV0dXJuW119fSk7cChcIlJlZmxlY3Qub3duS2V5c1wiLGZ1bmN0aW9uKGEpe3JldHVybiBhP2E6ZnVuY3Rpb24oYil7dmFyIGM9W10sZD1PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhiKTtiPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoYik7Zm9yKHZhciBlPTA7ZTxkLmxlbmd0aDtlKyspKFwianNjb21wX3N5bWJvbF9cIj09ZFtlXS5zdWJzdHJpbmcoMCwxNCk/YjpjKS5wdXNoKGRbZV0pO3JldHVybiBjLmNvbmNhdChiKX19KTtwKFwiT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnNcIixmdW5jdGlvbihhKXtyZXR1cm4gYT9hOmZ1bmN0aW9uKGIpe2Zvcih2YXIgYz17fSxkPVJlZmxlY3Qub3duS2V5cyhiKSxlPTA7ZTxkLmxlbmd0aDtlKyspY1tkW2VdXT1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGIsZFtlXSk7cmV0dXJuIGN9fSk7XG5wKFwiT2JqZWN0LnZhbHVlc1wiLGZ1bmN0aW9uKGEpe3JldHVybiBhP2E6ZnVuY3Rpb24oYil7dmFyIGM9W10sZDtmb3IoZCBpbiBiKXIoYixkKSYmYy5wdXNoKGJbZF0pO3JldHVybiBjfX0pO3AoXCJPYmplY3QuaGFzT3duXCIsZnVuY3Rpb24oYSl7cmV0dXJuIGE/YTpmdW5jdGlvbihiLGMpe3JldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYixjKX19KTtwKFwiUHJvbWlzZS5hbGxTZXR0bGVkXCIsZnVuY3Rpb24oYSl7ZnVuY3Rpb24gYihkKXtyZXR1cm57c3RhdHVzOlwiZnVsZmlsbGVkXCIsdmFsdWU6ZH19ZnVuY3Rpb24gYyhkKXtyZXR1cm57c3RhdHVzOlwicmVqZWN0ZWRcIixyZWFzb246ZH19cmV0dXJuIGE/YTpmdW5jdGlvbihkKXt2YXIgZT10aGlzO2Q9QXJyYXkuZnJvbShkLGZ1bmN0aW9uKGgpe3JldHVybiBlLnJlc29sdmUoaCkudGhlbihiLGMpfSk7cmV0dXJuIGUuYWxsKGQpfX0pO1xucChcIlByb21pc2UucHJvdG90eXBlLmZpbmFsbHlcIixmdW5jdGlvbihhKXtyZXR1cm4gYT9hOmZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLnRoZW4oZnVuY3Rpb24oYyl7cmV0dXJuIFByb21pc2UucmVzb2x2ZShiKCkpLnRoZW4oZnVuY3Rpb24oKXtyZXR1cm4gY30pfSxmdW5jdGlvbihjKXtyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGIoKSkudGhlbihmdW5jdGlvbigpe3Rocm93IGM7fSl9KX19KTt2YXIgcGE9XCJmdW5jdGlvblwiPT10eXBlb2YgT2JqZWN0LmNyZWF0ZT9PYmplY3QuY3JlYXRlOmZ1bmN0aW9uKGEpe2Z1bmN0aW9uIGIoKXt9Yi5wcm90b3R5cGU9YTtyZXR1cm4gbmV3IGJ9O1xuZnVuY3Rpb24gcWEoYSxiKXthLnByb3RvdHlwZT1wYShiLnByb3RvdHlwZSk7YS5wcm90b3R5cGUuY29uc3RydWN0b3I9YTtpZih0KXQoYSxiKTtlbHNlIGZvcih2YXIgYyBpbiBiKWlmKFwicHJvdG90eXBlXCIhPWMpaWYoT2JqZWN0LmRlZmluZVByb3BlcnRpZXMpe3ZhciBkPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoYixjKTtkJiZPYmplY3QuZGVmaW5lUHJvcGVydHkoYSxjLGQpfWVsc2UgYVtjXT1iW2NdO2EuVD1iLnByb3RvdHlwZX1wKFwiQWdncmVnYXRlRXJyb3JcIixmdW5jdGlvbihhKXtmdW5jdGlvbiBiKGMsZCl7ZD1FcnJvcihkKTtcInN0YWNrXCJpbiBkJiYodGhpcy5zdGFjaz1kLnN0YWNrKTt0aGlzLmVycm9ycz1jO3RoaXMubWVzc2FnZT1kLm1lc3NhZ2V9aWYoYSlyZXR1cm4gYTtxYShiLEVycm9yKTtiLnByb3RvdHlwZS5uYW1lPVwiQWdncmVnYXRlRXJyb3JcIjtyZXR1cm4gYn0pO1xucChcIlByb21pc2UuYW55XCIsZnVuY3Rpb24oYSl7cmV0dXJuIGE/YTpmdW5jdGlvbihiKXtiPWIgaW5zdGFuY2VvZiBBcnJheT9iOkFycmF5LmZyb20oYik7cmV0dXJuIFByb21pc2UuYWxsKGIubWFwKGZ1bmN0aW9uKGMpe3JldHVybiBQcm9taXNlLnJlc29sdmUoYykudGhlbihmdW5jdGlvbihkKXt0aHJvdyBkO30sZnVuY3Rpb24oZCl7cmV0dXJuIGR9KX0pKS50aGVuKGZ1bmN0aW9uKGMpe3Rocm93IG5ldyBBZ2dyZWdhdGVFcnJvcihjLFwiQWxsIHByb21pc2VzIHdlcmUgcmVqZWN0ZWRcIik7fSxmdW5jdGlvbihjKXtyZXR1cm4gY30pfX0pO3AoXCJSZWZsZWN0LmFwcGx5XCIsZnVuY3Rpb24oYSl7aWYoYSlyZXR1cm4gYTt2YXIgYj1GdW5jdGlvbi5wcm90b3R5cGUuYXBwbHk7cmV0dXJuIGZ1bmN0aW9uKGMsZCxlKXtyZXR1cm4gYi5jYWxsKGMsZCxlKX19KTtcbnZhciB0YT1mdW5jdGlvbigpe2Z1bmN0aW9uIGEoKXtmdW5jdGlvbiBjKCl7fW5ldyBjO1JlZmxlY3QuY29uc3RydWN0KGMsW10sZnVuY3Rpb24oKXt9KTtyZXR1cm4gbmV3IGMgaW5zdGFuY2VvZiBjfWlmKFwidW5kZWZpbmVkXCIhPXR5cGVvZiBSZWZsZWN0JiZSZWZsZWN0LmNvbnN0cnVjdCl7aWYoYSgpKXJldHVybiBSZWZsZWN0LmNvbnN0cnVjdDt2YXIgYj1SZWZsZWN0LmNvbnN0cnVjdDtyZXR1cm4gZnVuY3Rpb24oYyxkLGUpe2M9YihjLGQpO2UmJlJlZmxlY3Quc2V0UHJvdG90eXBlT2YoYyxlLnByb3RvdHlwZSk7cmV0dXJuIGN9fXJldHVybiBmdW5jdGlvbihjLGQsZSl7dm9pZCAwPT09ZSYmKGU9Yyk7ZT1wYShlLnByb3RvdHlwZXx8T2JqZWN0LnByb3RvdHlwZSk7cmV0dXJuIEZ1bmN0aW9uLnByb3RvdHlwZS5hcHBseS5jYWxsKGMsZSxkKXx8ZX19KCk7cChcIlJlZmxlY3QuY29uc3RydWN0XCIsZnVuY3Rpb24oKXtyZXR1cm4gdGF9KTtcbnAoXCJSZWZsZWN0LmRlZmluZVByb3BlcnR5XCIsZnVuY3Rpb24oYSl7cmV0dXJuIGE/YTpmdW5jdGlvbihiLGMsZCl7dHJ5e09iamVjdC5kZWZpbmVQcm9wZXJ0eShiLGMsZCk7dmFyIGU9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihiLGMpO3JldHVybiBlP2UuY29uZmlndXJhYmxlPT09KGQuY29uZmlndXJhYmxlfHwhMSkmJmUuZW51bWVyYWJsZT09PShkLmVudW1lcmFibGV8fCExKSYmKFwidmFsdWVcImluIGU/ZS52YWx1ZT09PWQudmFsdWUmJmUud3JpdGFibGU9PT0oZC53cml0YWJsZXx8ITEpOmUuZ2V0PT09ZC5nZXQmJmUuc2V0PT09ZC5zZXQpOiExfWNhdGNoKGgpe3JldHVybiExfX19KTtwKFwiUmVmbGVjdC5kZWxldGVQcm9wZXJ0eVwiLGZ1bmN0aW9uKGEpe3JldHVybiBhP2E6ZnVuY3Rpb24oYixjKXtpZighcihiLGMpKXJldHVybiEwO3RyeXtyZXR1cm4gZGVsZXRlIGJbY119Y2F0Y2goZCl7cmV0dXJuITF9fX0pO1xucChcIlJlZmxlY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yXCIsZnVuY3Rpb24oYSl7cmV0dXJuIGF8fE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3J9KTtwKFwiUmVmbGVjdC5nZXRQcm90b3R5cGVPZlwiLGZ1bmN0aW9uKGEpe3JldHVybiBhfHxPYmplY3QuZ2V0UHJvdG90eXBlT2Z9KTtmdW5jdGlvbiB1YShhLGIpe2Zvcig7YTspe3ZhciBjPVJlZmxlY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGEsYik7aWYoYylyZXR1cm4gYzthPVJlZmxlY3QuZ2V0UHJvdG90eXBlT2YoYSl9fXAoXCJSZWZsZWN0LmdldFwiLGZ1bmN0aW9uKGEpe3JldHVybiBhP2E6ZnVuY3Rpb24oYixjLGQpe2lmKDI+PWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIGJbY107dmFyIGU9dWEoYixjKTtpZihlKXJldHVybiBlLmdldD9lLmdldC5jYWxsKGQpOmUudmFsdWV9fSk7cChcIlJlZmxlY3QuaGFzXCIsZnVuY3Rpb24oYSl7cmV0dXJuIGE/YTpmdW5jdGlvbihiLGMpe3JldHVybiBjIGluIGJ9fSk7XG5wKFwiUmVmbGVjdC5pc0V4dGVuc2libGVcIixmdW5jdGlvbihhKXtyZXR1cm4gYT9hOlwiZnVuY3Rpb25cIj09dHlwZW9mIE9iamVjdC5pc0V4dGVuc2libGU/T2JqZWN0LmlzRXh0ZW5zaWJsZTpmdW5jdGlvbigpe3JldHVybiEwfX0pO3AoXCJSZWZsZWN0LnByZXZlbnRFeHRlbnNpb25zXCIsZnVuY3Rpb24oYSl7cmV0dXJuIGE/YTpcImZ1bmN0aW9uXCIhPXR5cGVvZiBPYmplY3QucHJldmVudEV4dGVuc2lvbnM/ZnVuY3Rpb24oKXtyZXR1cm4hMX06ZnVuY3Rpb24oYil7T2JqZWN0LnByZXZlbnRFeHRlbnNpb25zKGIpO3JldHVybiFPYmplY3QuaXNFeHRlbnNpYmxlKGIpfX0pO1xucChcIlJlZmxlY3Quc2V0XCIsZnVuY3Rpb24oYSl7cmV0dXJuIGE/YTpmdW5jdGlvbihiLGMsZCxlKXt2YXIgaD11YShiLGMpO3JldHVybiBoP2guc2V0PyhoLnNldC5jYWxsKDM8YXJndW1lbnRzLmxlbmd0aD9lOmIsZCksITApOmgud3JpdGFibGUmJiFPYmplY3QuaXNGcm96ZW4oYik/KGJbY109ZCwhMCk6ITE6UmVmbGVjdC5pc0V4dGVuc2libGUoYik/KGJbY109ZCwhMCk6ITF9fSk7cChcIlJlZmxlY3Quc2V0UHJvdG90eXBlT2ZcIixmdW5jdGlvbihhKXtyZXR1cm4gYT9hOnQ/ZnVuY3Rpb24oYixjKXt0cnl7cmV0dXJuIHQoYixjKSwhMH1jYXRjaChkKXtyZXR1cm4hMX19Om51bGx9KTtcbnAoXCJTZXRcIixmdW5jdGlvbihhKXtmdW5jdGlvbiBiKGMpe3RoaXMuZz1uZXcgTWFwO2lmKGMpe2M9cShjKTtmb3IodmFyIGQ7IShkPWMubmV4dCgpKS5kb25lOyl0aGlzLmFkZChkLnZhbHVlKX10aGlzLnNpemU9dGhpcy5nLnNpemV9aWYoZnVuY3Rpb24oKXtpZighYXx8XCJmdW5jdGlvblwiIT10eXBlb2YgYXx8IWEucHJvdG90eXBlLmVudHJpZXN8fFwiZnVuY3Rpb25cIiE9dHlwZW9mIE9iamVjdC5zZWFsKXJldHVybiExO3RyeXt2YXIgYz1PYmplY3Quc2VhbCh7eDo0fSksZD1uZXcgYShxKFtjXSkpO2lmKCFkLmhhcyhjKXx8MSE9ZC5zaXplfHxkLmFkZChjKSE9ZHx8MSE9ZC5zaXplfHxkLmFkZCh7eDo0fSkhPWR8fDIhPWQuc2l6ZSlyZXR1cm4hMTt2YXIgZT1kLmVudHJpZXMoKSxoPWUubmV4dCgpO2lmKGguZG9uZXx8aC52YWx1ZVswXSE9Y3x8aC52YWx1ZVsxXSE9YylyZXR1cm4hMTtoPWUubmV4dCgpO3JldHVybiBoLmRvbmV8fGgudmFsdWVbMF09PWN8fDQhPWgudmFsdWVbMF0ueHx8XG5oLnZhbHVlWzFdIT1oLnZhbHVlWzBdPyExOmUubmV4dCgpLmRvbmV9Y2F0Y2goZil7cmV0dXJuITF9fSgpKXJldHVybiBhO2IucHJvdG90eXBlLmFkZD1mdW5jdGlvbihjKXtjPTA9PT1jPzA6Yzt0aGlzLmcuc2V0KGMsYyk7dGhpcy5zaXplPXRoaXMuZy5zaXplO3JldHVybiB0aGlzfTtiLnByb3RvdHlwZS5kZWxldGU9ZnVuY3Rpb24oYyl7Yz10aGlzLmcuZGVsZXRlKGMpO3RoaXMuc2l6ZT10aGlzLmcuc2l6ZTtyZXR1cm4gY307Yi5wcm90b3R5cGUuY2xlYXI9ZnVuY3Rpb24oKXt0aGlzLmcuY2xlYXIoKTt0aGlzLnNpemU9MH07Yi5wcm90b3R5cGUuaGFzPWZ1bmN0aW9uKGMpe3JldHVybiB0aGlzLmcuaGFzKGMpfTtiLnByb3RvdHlwZS5lbnRyaWVzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZy5lbnRyaWVzKCl9O2IucHJvdG90eXBlLnZhbHVlcz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmcudmFsdWVzKCl9O2IucHJvdG90eXBlLmtleXM9Yi5wcm90b3R5cGUudmFsdWVzO2IucHJvdG90eXBlW1N5bWJvbC5pdGVyYXRvcl09XG5iLnByb3RvdHlwZS52YWx1ZXM7Yi5wcm90b3R5cGUuZm9yRWFjaD1mdW5jdGlvbihjLGQpe3ZhciBlPXRoaXM7dGhpcy5nLmZvckVhY2goZnVuY3Rpb24oaCl7cmV0dXJuIGMuY2FsbChkLGgsaCxlKX0pfTtyZXR1cm4gYn0pO3AoXCJTdHJpbmcucHJvdG90eXBlLmF0XCIsZnVuY3Rpb24oYSl7cmV0dXJuIGE/YTpvYX0pO3AoXCJTdHJpbmcucHJvdG90eXBlLmNvZGVQb2ludEF0XCIsZnVuY3Rpb24oYSl7cmV0dXJuIGE/YTpmdW5jdGlvbihiKXt2YXIgYz12KHRoaXMsbnVsbCxcImNvZGVQb2ludEF0XCIpLGQ9Yy5sZW5ndGg7Yj1OdW1iZXIoYil8fDA7aWYoMDw9YiYmYjxkKXtifD0wO3ZhciBlPWMuY2hhckNvZGVBdChiKTtpZig1NTI5Nj5lfHw1NjMxOTxlfHxiKzE9PT1kKXJldHVybiBlO2I9Yy5jaGFyQ29kZUF0KGIrMSk7cmV0dXJuIDU2MzIwPmJ8fDU3MzQzPGI/ZToxMDI0KihlLTU1Mjk2KStiKzkyMTZ9fX0pO1xucChcIlN0cmluZy5mcm9tQ29kZVBvaW50XCIsZnVuY3Rpb24oYSl7cmV0dXJuIGE/YTpmdW5jdGlvbihiKXtmb3IodmFyIGM9XCJcIixkPTA7ZDxhcmd1bWVudHMubGVuZ3RoO2QrKyl7dmFyIGU9TnVtYmVyKGFyZ3VtZW50c1tkXSk7aWYoMD5lfHwxMTE0MTExPGV8fGUhPT1NYXRoLmZsb29yKGUpKXRocm93IG5ldyBSYW5nZUVycm9yKFwiaW52YWxpZF9jb2RlX3BvaW50IFwiK2UpOzY1NTM1Pj1lP2MrPVN0cmluZy5mcm9tQ2hhckNvZGUoZSk6KGUtPTY1NTM2LGMrPVN0cmluZy5mcm9tQ2hhckNvZGUoZT4+PjEwJjEwMjN8NTUyOTYpLGMrPVN0cmluZy5mcm9tQ2hhckNvZGUoZSYxMDIzfDU2MzIwKSl9cmV0dXJuIGN9fSk7XG5wKFwiU3RyaW5nLnByb3RvdHlwZS5tYXRjaEFsbFwiLGZ1bmN0aW9uKGEpe3JldHVybiBhP2E6ZnVuY3Rpb24oYil7aWYoYiBpbnN0YW5jZW9mIFJlZ0V4cCYmIWIuZ2xvYmFsKXRocm93IG5ldyBUeXBlRXJyb3IoXCJSZWdFeHAgcGFzc2VkIGludG8gU3RyaW5nLnByb3RvdHlwZS5tYXRjaEFsbCgpIG11c3QgaGF2ZSBnbG9iYWwgdGFnLlwiKTt2YXIgYz1uZXcgUmVnRXhwKGIsYiBpbnN0YW5jZW9mIFJlZ0V4cD92b2lkIDA6XCJnXCIpLGQ9dGhpcyxlPSExLGg9e25leHQ6ZnVuY3Rpb24oKXtpZihlKXJldHVybnt2YWx1ZTp2b2lkIDAsZG9uZTohMH07dmFyIGY9Yy5leGVjKGQpO2lmKCFmKXJldHVybiBlPSEwLHt2YWx1ZTp2b2lkIDAsZG9uZTohMH07XCJcIj09PWZbMF0mJihjLmxhc3RJbmRleCs9MSk7cmV0dXJue3ZhbHVlOmYsZG9uZTohMX19fTtoW1N5bWJvbC5pdGVyYXRvcl09ZnVuY3Rpb24oKXtyZXR1cm4gaH07cmV0dXJuIGh9fSk7XG5mdW5jdGlvbiB2YShhLGIpe2E9dm9pZCAwIT09YT9TdHJpbmcoYSk6XCIgXCI7cmV0dXJuIDA8YiYmYT9hLnJlcGVhdChNYXRoLmNlaWwoYi9hLmxlbmd0aCkpLnN1YnN0cmluZygwLGIpOlwiXCJ9cChcIlN0cmluZy5wcm90b3R5cGUucGFkRW5kXCIsZnVuY3Rpb24oYSl7cmV0dXJuIGE/YTpmdW5jdGlvbihiLGMpe3ZhciBkPXYodGhpcyxudWxsLFwicGFkU3RhcnRcIik7cmV0dXJuIGQrdmEoYyxiLWQubGVuZ3RoKX19KTtwKFwiU3RyaW5nLnByb3RvdHlwZS5wYWRTdGFydFwiLGZ1bmN0aW9uKGEpe3JldHVybiBhP2E6ZnVuY3Rpb24oYixjKXt2YXIgZD12KHRoaXMsbnVsbCxcInBhZFN0YXJ0XCIpO3JldHVybiB2YShjLGItZC5sZW5ndGgpK2R9fSk7XG5wKFwiU3RyaW5nLnJhd1wiLGZ1bmN0aW9uKGEpe3JldHVybiBhP2E6ZnVuY3Rpb24oYixjKXtpZihudWxsPT1iKXRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY29udmVydCB1bmRlZmluZWQgb3IgbnVsbCB0byBvYmplY3RcIik7Zm9yKHZhciBkPWIucmF3LGU9ZC5sZW5ndGgsaD1cIlwiLGY9MDtmPGU7KytmKWgrPWRbZl0sZisxPGUmJmYrMTxhcmd1bWVudHMubGVuZ3RoJiYoaCs9U3RyaW5nKGFyZ3VtZW50c1tmKzFdKSk7cmV0dXJuIGh9fSk7XG5wKFwiU3RyaW5nLnByb3RvdHlwZS5yZXBsYWNlQWxsXCIsZnVuY3Rpb24oYSl7cmV0dXJuIGE/YTpmdW5jdGlvbihiLGMpe2lmKGIgaW5zdGFuY2VvZiBSZWdFeHAmJiFiLmdsb2JhbCl0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3RyaW5nLnByb3RvdHlwZS5yZXBsYWNlQWxsIGNhbGxlZCB3aXRoIGEgbm9uLWdsb2JhbCBSZWdFeHAgYXJndW1lbnQuXCIpO3JldHVybiBiIGluc3RhbmNlb2YgUmVnRXhwP3RoaXMucmVwbGFjZShiLGMpOnRoaXMucmVwbGFjZShuZXcgUmVnRXhwKFN0cmluZyhiKS5yZXBsYWNlKC8oWy0oKVxcW1xcXXt9Kz8qLiRcXF58LDojPCFcXFxcXSkvZyxcIlxcXFwkMVwiKS5yZXBsYWNlKC9cXHgwOC9nLFwiXFxcXHgwOFwiKSxcImdcIiksYyl9fSk7cChcIlN0cmluZy5wcm90b3R5cGUudHJpbVJpZ2h0XCIsZnVuY3Rpb24oYSl7ZnVuY3Rpb24gYigpe3JldHVybiB0aGlzLnJlcGxhY2UoL1tcXHNcXHhhMF0rJC8sXCJcIil9cmV0dXJuIGF8fGJ9KTtcbnAoXCJTdHJpbmcucHJvdG90eXBlLnRyaW1FbmRcIixmdW5jdGlvbihhKXtyZXR1cm4gYXx8U3RyaW5nLnByb3RvdHlwZS50cmltUmlnaHR9KTtmdW5jdGlvbiB3KGEpe3JldHVybiBhP2E6b2F9cChcIkludDhBcnJheS5wcm90b3R5cGUuYXRcIix3KTtwKFwiVWludDhBcnJheS5wcm90b3R5cGUuYXRcIix3KTtwKFwiVWludDhDbGFtcGVkQXJyYXkucHJvdG90eXBlLmF0XCIsdyk7cChcIkludDE2QXJyYXkucHJvdG90eXBlLmF0XCIsdyk7cChcIlVpbnQxNkFycmF5LnByb3RvdHlwZS5hdFwiLHcpO3AoXCJJbnQzMkFycmF5LnByb3RvdHlwZS5hdFwiLHcpO3AoXCJVaW50MzJBcnJheS5wcm90b3R5cGUuYXRcIix3KTtwKFwiRmxvYXQzMkFycmF5LnByb3RvdHlwZS5hdFwiLHcpO3AoXCJGbG9hdDY0QXJyYXkucHJvdG90eXBlLmF0XCIsdyk7ZnVuY3Rpb24geChhKXtyZXR1cm4gYT9hOkFycmF5LnByb3RvdHlwZS5jb3B5V2l0aGlufXAoXCJJbnQ4QXJyYXkucHJvdG90eXBlLmNvcHlXaXRoaW5cIix4KTtcbnAoXCJVaW50OEFycmF5LnByb3RvdHlwZS5jb3B5V2l0aGluXCIseCk7cChcIlVpbnQ4Q2xhbXBlZEFycmF5LnByb3RvdHlwZS5jb3B5V2l0aGluXCIseCk7cChcIkludDE2QXJyYXkucHJvdG90eXBlLmNvcHlXaXRoaW5cIix4KTtwKFwiVWludDE2QXJyYXkucHJvdG90eXBlLmNvcHlXaXRoaW5cIix4KTtwKFwiSW50MzJBcnJheS5wcm90b3R5cGUuY29weVdpdGhpblwiLHgpO3AoXCJVaW50MzJBcnJheS5wcm90b3R5cGUuY29weVdpdGhpblwiLHgpO3AoXCJGbG9hdDMyQXJyYXkucHJvdG90eXBlLmNvcHlXaXRoaW5cIix4KTtwKFwiRmxvYXQ2NEFycmF5LnByb3RvdHlwZS5jb3B5V2l0aGluXCIseCk7ZnVuY3Rpb24geihhKXtyZXR1cm4gYT9hOkFycmF5LnByb3RvdHlwZS5maWxsfXAoXCJJbnQ4QXJyYXkucHJvdG90eXBlLmZpbGxcIix6KTtwKFwiVWludDhBcnJheS5wcm90b3R5cGUuZmlsbFwiLHopO3AoXCJVaW50OENsYW1wZWRBcnJheS5wcm90b3R5cGUuZmlsbFwiLHopO1xucChcIkludDE2QXJyYXkucHJvdG90eXBlLmZpbGxcIix6KTtwKFwiVWludDE2QXJyYXkucHJvdG90eXBlLmZpbGxcIix6KTtwKFwiSW50MzJBcnJheS5wcm90b3R5cGUuZmlsbFwiLHopO3AoXCJVaW50MzJBcnJheS5wcm90b3R5cGUuZmlsbFwiLHopO3AoXCJGbG9hdDMyQXJyYXkucHJvdG90eXBlLmZpbGxcIix6KTtwKFwiRmxvYXQ2NEFycmF5LnByb3RvdHlwZS5maWxsXCIseik7XG5wKFwiV2Vha1NldFwiLGZ1bmN0aW9uKGEpe2Z1bmN0aW9uIGIoYyl7dGhpcy5nPW5ldyBXZWFrTWFwO2lmKGMpe2M9cShjKTtmb3IodmFyIGQ7IShkPWMubmV4dCgpKS5kb25lOyl0aGlzLmFkZChkLnZhbHVlKX19aWYoZnVuY3Rpb24oKXtpZighYXx8IU9iamVjdC5zZWFsKXJldHVybiExO3RyeXt2YXIgYz1PYmplY3Quc2VhbCh7fSksZD1PYmplY3Quc2VhbCh7fSksZT1uZXcgYShbY10pO2lmKCFlLmhhcyhjKXx8ZS5oYXMoZCkpcmV0dXJuITE7ZS5kZWxldGUoYyk7ZS5hZGQoZCk7cmV0dXJuIWUuaGFzKGMpJiZlLmhhcyhkKX1jYXRjaChoKXtyZXR1cm4hMX19KCkpcmV0dXJuIGE7Yi5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKGMpe3RoaXMuZy5zZXQoYywhMCk7cmV0dXJuIHRoaXN9O2IucHJvdG90eXBlLmhhcz1mdW5jdGlvbihjKXtyZXR1cm4gdGhpcy5nLmhhcyhjKX07Yi5wcm90b3R5cGUuZGVsZXRlPWZ1bmN0aW9uKGMpe3JldHVybiB0aGlzLmcuZGVsZXRlKGMpfTtyZXR1cm4gYn0pO1xudmFyIEE9dGhpc3x8c2VsZjtmdW5jdGlvbiBCKGEpe2E9YS5zcGxpdChcIi5cIik7Zm9yKHZhciBiPUEsYz0wO2M8YS5sZW5ndGg7YysrKWlmKGI9YlthW2NdXSxudWxsPT1iKXJldHVybiBudWxsO3JldHVybiBifWZ1bmN0aW9uIHdhKGEpe3ZhciBiPXR5cGVvZiBhO3JldHVyblwib2JqZWN0XCI9PWImJm51bGwhPWF8fFwiZnVuY3Rpb25cIj09Yn1mdW5jdGlvbiB4YShhLGIsYyl7cmV0dXJuIGEuY2FsbC5hcHBseShhLmJpbmQsYXJndW1lbnRzKX1cbmZ1bmN0aW9uIHlhKGEsYixjKXtpZighYSl0aHJvdyBFcnJvcigpO2lmKDI8YXJndW1lbnRzLmxlbmd0aCl7dmFyIGQ9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLDIpO3JldHVybiBmdW5jdGlvbigpe3ZhciBlPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7QXJyYXkucHJvdG90eXBlLnVuc2hpZnQuYXBwbHkoZSxkKTtyZXR1cm4gYS5hcHBseShiLGUpfX1yZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gYS5hcHBseShiLGFyZ3VtZW50cyl9fWZ1bmN0aW9uIEMoYSxiLGMpe0Z1bmN0aW9uLnByb3RvdHlwZS5iaW5kJiYtMSE9RnVuY3Rpb24ucHJvdG90eXBlLmJpbmQudG9TdHJpbmcoKS5pbmRleE9mKFwibmF0aXZlIGNvZGVcIik/Qz14YTpDPXlhO3JldHVybiBDLmFwcGx5KG51bGwsYXJndW1lbnRzKX1cbmZ1bmN0aW9uIEQoYSxiKXthPWEuc3BsaXQoXCIuXCIpO3ZhciBjPUE7YVswXWluIGN8fFwidW5kZWZpbmVkXCI9PXR5cGVvZiBjLmV4ZWNTY3JpcHR8fGMuZXhlY1NjcmlwdChcInZhciBcIithWzBdKTtmb3IodmFyIGQ7YS5sZW5ndGgmJihkPWEuc2hpZnQoKSk7KWEubGVuZ3RofHx2b2lkIDA9PT1iP2NbZF0mJmNbZF0hPT1PYmplY3QucHJvdG90eXBlW2RdP2M9Y1tkXTpjPWNbZF09e306Y1tkXT1ifWZ1bmN0aW9uIEUoYSxiKXtmdW5jdGlvbiBjKCl7fWMucHJvdG90eXBlPWIucHJvdG90eXBlO2EuVD1iLnByb3RvdHlwZTthLnByb3RvdHlwZT1uZXcgYzthLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1hO2EuVT1mdW5jdGlvbihkLGUsaCl7Zm9yKHZhciBmPUFycmF5KGFyZ3VtZW50cy5sZW5ndGgtMiksZz0yO2c8YXJndW1lbnRzLmxlbmd0aDtnKyspZltnLTJdPWFyZ3VtZW50c1tnXTtyZXR1cm4gYi5wcm90b3R5cGVbZV0uYXBwbHkoZCxmKX19ZnVuY3Rpb24gemEoYSl7cmV0dXJuIGF9O2Z1bmN0aW9uIEYoYSxiKXtpZihFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSlFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSh0aGlzLEYpO2Vsc2V7dmFyIGM9RXJyb3IoKS5zdGFjaztjJiYodGhpcy5zdGFjaz1jKX1hJiYodGhpcy5tZXNzYWdlPVN0cmluZyhhKSk7dm9pZCAwIT09YiYmKHRoaXMuY2F1c2U9Yil9RShGLEVycm9yKTtGLnByb3RvdHlwZS5uYW1lPVwiQ3VzdG9tRXJyb3JcIjtmdW5jdGlvbiBIKGEsYil7dGhpcy5nPWE9PT1BYSYmYnx8XCJcIjt0aGlzLmg9QmF9SC5wcm90b3R5cGUuSz0hMDtILnByb3RvdHlwZS5JPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ307ZnVuY3Rpb24gQ2EoYSl7cmV0dXJuIGEgaW5zdGFuY2VvZiBIJiZhLmNvbnN0cnVjdG9yPT09SCYmYS5oPT09QmE/YS5nOlwidHlwZV9lcnJvcjpDb25zdFwifWZ1bmN0aW9uIEkoYSl7cmV0dXJuIG5ldyBIKEFhLGEpfXZhciBCYT17fSxBYT17fTt2YXIgRGE9e1wiZ3N0YXRpYy5jb21cIjp7bG9hZGVyOkkoXCJodHRwczovL3d3dy5nc3RhdGljLmNvbS9jaGFydHMvJXt2ZXJzaW9ufS9sb2FkZXIuanNcIiksZGVidWc6SShcImh0dHBzOi8vd3d3LmdzdGF0aWMuY29tL2NoYXJ0cy9kZWJ1Zy8le3ZlcnNpb259L2pzL2pzYXBpX2RlYnVnXyV7cGFja2FnZX1fbW9kdWxlLmpzXCIpLGRlYnVnX2kxOG46SShcImh0dHBzOi8vd3d3LmdzdGF0aWMuY29tL2NoYXJ0cy9kZWJ1Zy8le3ZlcnNpb259L2kxOG4vanNhcGlfZGVidWdfaTE4bl8le3BhY2thZ2V9X21vZHVsZV9fJXtsYW5ndWFnZX0uanNcIiksY29tcGlsZWQ6SShcImh0dHBzOi8vd3d3LmdzdGF0aWMuY29tL2NoYXJ0cy8le3ZlcnNpb259L2pzL2pzYXBpX2NvbXBpbGVkXyV7cGFja2FnZX1fbW9kdWxlLmpzXCIpLGNvbXBpbGVkX2kxOG46SShcImh0dHBzOi8vd3d3LmdzdGF0aWMuY29tL2NoYXJ0cy8le3ZlcnNpb259L2kxOG4vanNhcGlfY29tcGlsZWRfaTE4bl8le3BhY2thZ2V9X21vZHVsZV9fJXtsYW5ndWFnZX0uanNcIiksXG5jc3M6SShcImh0dHBzOi8vd3d3LmdzdGF0aWMuY29tL2NoYXJ0cy8le3ZlcnNpb259L2Nzcy8le3N1YmRpcn0vJXtmaWxlbmFtZX1cIiksY3NzMjpJKFwiaHR0cHM6Ly93d3cuZ3N0YXRpYy5jb20vY2hhcnRzLyV7dmVyc2lvbn0vY3NzLyV7c3ViZGlyMX0vJXtzdWJkaXIyfS8le2ZpbGVuYW1lfVwiKSx0aGlyZF9wYXJ0eTpJKFwiaHR0cHM6Ly93d3cuZ3N0YXRpYy5jb20vY2hhcnRzLyV7dmVyc2lvbn0vdGhpcmRfcGFydHkvJXtzdWJkaXJ9LyV7ZmlsZW5hbWV9XCIpLHRoaXJkX3BhcnR5MjpJKFwiaHR0cHM6Ly93d3cuZ3N0YXRpYy5jb20vY2hhcnRzLyV7dmVyc2lvbn0vdGhpcmRfcGFydHkvJXtzdWJkaXIxfS8le3N1YmRpcjJ9LyV7ZmlsZW5hbWV9XCIpLHRoaXJkX3BhcnR5X2dlbjpJKFwiaHR0cHM6Ly93d3cuZ3N0YXRpYy5jb20vY2hhcnRzLyV7dmVyc2lvbn0vdGhpcmRfcGFydHkvJXtzdWJkaXJ9LyV7ZmlsZW5hbWV9XCIpfSxcImdzdGF0aWMuY25cIjp7bG9hZGVyOkkoXCJodHRwczovL3d3dy5nc3RhdGljLmNuL2NoYXJ0cy8le3ZlcnNpb259L2xvYWRlci5qc1wiKSxcbmRlYnVnOkkoXCJodHRwczovL3d3dy5nc3RhdGljLmNuL2NoYXJ0cy9kZWJ1Zy8le3ZlcnNpb259L2pzL2pzYXBpX2RlYnVnXyV7cGFja2FnZX1fbW9kdWxlLmpzXCIpLGRlYnVnX2kxOG46SShcImh0dHBzOi8vd3d3LmdzdGF0aWMuY24vY2hhcnRzL2RlYnVnLyV7dmVyc2lvbn0vaTE4bi9qc2FwaV9kZWJ1Z19pMThuXyV7cGFja2FnZX1fbW9kdWxlX18le2xhbmd1YWdlfS5qc1wiKSxjb21waWxlZDpJKFwiaHR0cHM6Ly93d3cuZ3N0YXRpYy5jbi9jaGFydHMvJXt2ZXJzaW9ufS9qcy9qc2FwaV9jb21waWxlZF8le3BhY2thZ2V9X21vZHVsZS5qc1wiKSxjb21waWxlZF9pMThuOkkoXCJodHRwczovL3d3dy5nc3RhdGljLmNuL2NoYXJ0cy8le3ZlcnNpb259L2kxOG4vanNhcGlfY29tcGlsZWRfaTE4bl8le3BhY2thZ2V9X21vZHVsZV9fJXtsYW5ndWFnZX0uanNcIiksY3NzOkkoXCJodHRwczovL3d3dy5nc3RhdGljLmNuL2NoYXJ0cy8le3ZlcnNpb259L2Nzcy8le3N1YmRpcn0vJXtmaWxlbmFtZX1cIiksXG5jc3MyOkkoXCJodHRwczovL3d3dy5nc3RhdGljLmNuL2NoYXJ0cy8le3ZlcnNpb259L2Nzcy8le3N1YmRpcjF9LyV7c3ViZGlyMn0vJXtmaWxlbmFtZX1cIiksdGhpcmRfcGFydHk6SShcImh0dHBzOi8vd3d3LmdzdGF0aWMuY24vY2hhcnRzLyV7dmVyc2lvbn0vdGhpcmRfcGFydHkvJXtzdWJkaXJ9LyV7ZmlsZW5hbWV9XCIpLHRoaXJkX3BhcnR5MjpJKFwiaHR0cHM6Ly93d3cuZ3N0YXRpYy5jbi9jaGFydHMvJXt2ZXJzaW9ufS90aGlyZF9wYXJ0eS8le3N1YmRpcjF9LyV7c3ViZGlyMn0vJXtmaWxlbmFtZX1cIiksdGhpcmRfcGFydHlfZ2VuOkkoXCJodHRwczovL3d3dy5nc3RhdGljLmNuL2NoYXJ0cy8le3ZlcnNpb259L3RoaXJkX3BhcnR5LyV7c3ViZGlyfS8le2ZpbGVuYW1lfVwiKX19LEVhPVtcImRlZmF1bHRcIl07dmFyIEZhPXtcImNocm9tZS1mcmFtZVwiOnt2ZXJzaW9uczp7XCIxLjAuMFwiOnt1bmNvbXByZXNzZWQ6XCJDRkluc3RhbGwuanNcIixjb21wcmVzc2VkOlwiQ0ZJbnN0YWxsLm1pbi5qc1wifSxcIjEuMC4xXCI6e3VuY29tcHJlc3NlZDpcIkNGSW5zdGFsbC5qc1wiLGNvbXByZXNzZWQ6XCJDRkluc3RhbGwubWluLmpzXCJ9LFwiMS4wLjJcIjp7dW5jb21wcmVzc2VkOlwiQ0ZJbnN0YWxsLmpzXCIsY29tcHJlc3NlZDpcIkNGSW5zdGFsbC5taW4uanNcIn19LGFsaWFzZXM6ezE6XCIxLjAuMlwiLFwiMS4wXCI6XCIxLjAuMlwifX0sc3dmb2JqZWN0Ont2ZXJzaW9uczp7XCIyLjFcIjp7dW5jb21wcmVzc2VkOlwic3dmb2JqZWN0X3NyYy5qc1wiLGNvbXByZXNzZWQ6XCJzd2ZvYmplY3QuanNcIn0sXCIyLjJcIjp7dW5jb21wcmVzc2VkOlwic3dmb2JqZWN0X3NyYy5qc1wiLGNvbXByZXNzZWQ6XCJzd2ZvYmplY3QuanNcIn19LGFsaWFzZXM6ezI6XCIyLjJcIn19LFwiZXh0LWNvcmVcIjp7dmVyc2lvbnM6e1wiMy4xLjBcIjp7dW5jb21wcmVzc2VkOlwiZXh0LWNvcmUtZGVidWcuanNcIixcbmNvbXByZXNzZWQ6XCJleHQtY29yZS5qc1wifSxcIjMuMC4wXCI6e3VuY29tcHJlc3NlZDpcImV4dC1jb3JlLWRlYnVnLmpzXCIsY29tcHJlc3NlZDpcImV4dC1jb3JlLmpzXCJ9fSxhbGlhc2VzOnszOlwiMy4xLjBcIixcIjMuMFwiOlwiMy4wLjBcIixcIjMuMVwiOlwiMy4xLjBcIn19LHNjcmlwdGFjdWxvdXM6e3ZlcnNpb25zOntcIjEuOC4zXCI6e3VuY29tcHJlc3NlZDpcInNjcmlwdGFjdWxvdXMuanNcIixjb21wcmVzc2VkOlwic2NyaXB0YWN1bG91cy5qc1wifSxcIjEuOS4wXCI6e3VuY29tcHJlc3NlZDpcInNjcmlwdGFjdWxvdXMuanNcIixjb21wcmVzc2VkOlwic2NyaXB0YWN1bG91cy5qc1wifSxcIjEuOC4xXCI6e3VuY29tcHJlc3NlZDpcInNjcmlwdGFjdWxvdXMuanNcIixjb21wcmVzc2VkOlwic2NyaXB0YWN1bG91cy5qc1wifSxcIjEuOC4yXCI6e3VuY29tcHJlc3NlZDpcInNjcmlwdGFjdWxvdXMuanNcIixjb21wcmVzc2VkOlwic2NyaXB0YWN1bG91cy5qc1wifX0sYWxpYXNlczp7MTpcIjEuOS4wXCIsXCIxLjhcIjpcIjEuOC4zXCIsXCIxLjlcIjpcIjEuOS4wXCJ9fSxcbndlYmZvbnQ6e3ZlcnNpb25zOntcIjEuMC4xMlwiOnt1bmNvbXByZXNzZWQ6XCJ3ZWJmb250X2RlYnVnLmpzXCIsY29tcHJlc3NlZDpcIndlYmZvbnQuanNcIn0sXCIxLjAuMTNcIjp7dW5jb21wcmVzc2VkOlwid2ViZm9udF9kZWJ1Zy5qc1wiLGNvbXByZXNzZWQ6XCJ3ZWJmb250LmpzXCJ9LFwiMS4wLjE0XCI6e3VuY29tcHJlc3NlZDpcIndlYmZvbnRfZGVidWcuanNcIixjb21wcmVzc2VkOlwid2ViZm9udC5qc1wifSxcIjEuMC4xNVwiOnt1bmNvbXByZXNzZWQ6XCJ3ZWJmb250X2RlYnVnLmpzXCIsY29tcHJlc3NlZDpcIndlYmZvbnQuanNcIn0sXCIxLjAuMTBcIjp7dW5jb21wcmVzc2VkOlwid2ViZm9udF9kZWJ1Zy5qc1wiLGNvbXByZXNzZWQ6XCJ3ZWJmb250LmpzXCJ9LFwiMS4wLjExXCI6e3VuY29tcHJlc3NlZDpcIndlYmZvbnRfZGVidWcuanNcIixjb21wcmVzc2VkOlwid2ViZm9udC5qc1wifSxcIjEuMC4yN1wiOnt1bmNvbXByZXNzZWQ6XCJ3ZWJmb250X2RlYnVnLmpzXCIsY29tcHJlc3NlZDpcIndlYmZvbnQuanNcIn0sXCIxLjAuMjhcIjp7dW5jb21wcmVzc2VkOlwid2ViZm9udF9kZWJ1Zy5qc1wiLFxuY29tcHJlc3NlZDpcIndlYmZvbnQuanNcIn0sXCIxLjAuMjlcIjp7dW5jb21wcmVzc2VkOlwid2ViZm9udF9kZWJ1Zy5qc1wiLGNvbXByZXNzZWQ6XCJ3ZWJmb250LmpzXCJ9LFwiMS4wLjIzXCI6e3VuY29tcHJlc3NlZDpcIndlYmZvbnRfZGVidWcuanNcIixjb21wcmVzc2VkOlwid2ViZm9udC5qc1wifSxcIjEuMC4yNFwiOnt1bmNvbXByZXNzZWQ6XCJ3ZWJmb250X2RlYnVnLmpzXCIsY29tcHJlc3NlZDpcIndlYmZvbnQuanNcIn0sXCIxLjAuMjVcIjp7dW5jb21wcmVzc2VkOlwid2ViZm9udF9kZWJ1Zy5qc1wiLGNvbXByZXNzZWQ6XCJ3ZWJmb250LmpzXCJ9LFwiMS4wLjI2XCI6e3VuY29tcHJlc3NlZDpcIndlYmZvbnRfZGVidWcuanNcIixjb21wcmVzc2VkOlwid2ViZm9udC5qc1wifSxcIjEuMC4yMVwiOnt1bmNvbXByZXNzZWQ6XCJ3ZWJmb250X2RlYnVnLmpzXCIsY29tcHJlc3NlZDpcIndlYmZvbnQuanNcIn0sXCIxLjAuMjJcIjp7dW5jb21wcmVzc2VkOlwid2ViZm9udF9kZWJ1Zy5qc1wiLGNvbXByZXNzZWQ6XCJ3ZWJmb250LmpzXCJ9LFwiMS4wLjNcIjp7dW5jb21wcmVzc2VkOlwid2ViZm9udF9kZWJ1Zy5qc1wiLFxuY29tcHJlc3NlZDpcIndlYmZvbnQuanNcIn0sXCIxLjAuNFwiOnt1bmNvbXByZXNzZWQ6XCJ3ZWJmb250X2RlYnVnLmpzXCIsY29tcHJlc3NlZDpcIndlYmZvbnQuanNcIn0sXCIxLjAuNVwiOnt1bmNvbXByZXNzZWQ6XCJ3ZWJmb250X2RlYnVnLmpzXCIsY29tcHJlc3NlZDpcIndlYmZvbnQuanNcIn0sXCIxLjAuNlwiOnt1bmNvbXByZXNzZWQ6XCJ3ZWJmb250X2RlYnVnLmpzXCIsY29tcHJlc3NlZDpcIndlYmZvbnQuanNcIn0sXCIxLjAuOVwiOnt1bmNvbXByZXNzZWQ6XCJ3ZWJmb250X2RlYnVnLmpzXCIsY29tcHJlc3NlZDpcIndlYmZvbnQuanNcIn0sXCIxLjAuMTZcIjp7dW5jb21wcmVzc2VkOlwid2ViZm9udF9kZWJ1Zy5qc1wiLGNvbXByZXNzZWQ6XCJ3ZWJmb250LmpzXCJ9LFwiMS4wLjE3XCI6e3VuY29tcHJlc3NlZDpcIndlYmZvbnRfZGVidWcuanNcIixjb21wcmVzc2VkOlwid2ViZm9udC5qc1wifSxcIjEuMC4wXCI6e3VuY29tcHJlc3NlZDpcIndlYmZvbnRfZGVidWcuanNcIixjb21wcmVzc2VkOlwid2ViZm9udC5qc1wifSxcIjEuMC4xOFwiOnt1bmNvbXByZXNzZWQ6XCJ3ZWJmb250X2RlYnVnLmpzXCIsXG5jb21wcmVzc2VkOlwid2ViZm9udC5qc1wifSxcIjEuMC4xXCI6e3VuY29tcHJlc3NlZDpcIndlYmZvbnRfZGVidWcuanNcIixjb21wcmVzc2VkOlwid2ViZm9udC5qc1wifSxcIjEuMC4xOVwiOnt1bmNvbXByZXNzZWQ6XCJ3ZWJmb250X2RlYnVnLmpzXCIsY29tcHJlc3NlZDpcIndlYmZvbnQuanNcIn0sXCIxLjAuMlwiOnt1bmNvbXByZXNzZWQ6XCJ3ZWJmb250X2RlYnVnLmpzXCIsY29tcHJlc3NlZDpcIndlYmZvbnQuanNcIn19LGFsaWFzZXM6ezE6XCIxLjAuMjlcIixcIjEuMFwiOlwiMS4wLjI5XCJ9fSxqcXVlcnl1aTp7dmVyc2lvbnM6e1wiMS44LjE3XCI6e3VuY29tcHJlc3NlZDpcImpxdWVyeS11aS5qc1wiLGNvbXByZXNzZWQ6XCJqcXVlcnktdWkubWluLmpzXCJ9LFwiMS44LjE2XCI6e3VuY29tcHJlc3NlZDpcImpxdWVyeS11aS5qc1wiLGNvbXByZXNzZWQ6XCJqcXVlcnktdWkubWluLmpzXCJ9LFwiMS44LjE1XCI6e3VuY29tcHJlc3NlZDpcImpxdWVyeS11aS5qc1wiLGNvbXByZXNzZWQ6XCJqcXVlcnktdWkubWluLmpzXCJ9LFwiMS44LjE0XCI6e3VuY29tcHJlc3NlZDpcImpxdWVyeS11aS5qc1wiLFxuY29tcHJlc3NlZDpcImpxdWVyeS11aS5taW4uanNcIn0sXCIxLjguNFwiOnt1bmNvbXByZXNzZWQ6XCJqcXVlcnktdWkuanNcIixjb21wcmVzc2VkOlwianF1ZXJ5LXVpLm1pbi5qc1wifSxcIjEuOC4xM1wiOnt1bmNvbXByZXNzZWQ6XCJqcXVlcnktdWkuanNcIixjb21wcmVzc2VkOlwianF1ZXJ5LXVpLm1pbi5qc1wifSxcIjEuOC41XCI6e3VuY29tcHJlc3NlZDpcImpxdWVyeS11aS5qc1wiLGNvbXByZXNzZWQ6XCJqcXVlcnktdWkubWluLmpzXCJ9LFwiMS44LjEyXCI6e3VuY29tcHJlc3NlZDpcImpxdWVyeS11aS5qc1wiLGNvbXByZXNzZWQ6XCJqcXVlcnktdWkubWluLmpzXCJ9LFwiMS44LjZcIjp7dW5jb21wcmVzc2VkOlwianF1ZXJ5LXVpLmpzXCIsY29tcHJlc3NlZDpcImpxdWVyeS11aS5taW4uanNcIn0sXCIxLjguMTFcIjp7dW5jb21wcmVzc2VkOlwianF1ZXJ5LXVpLmpzXCIsY29tcHJlc3NlZDpcImpxdWVyeS11aS5taW4uanNcIn0sXCIxLjguN1wiOnt1bmNvbXByZXNzZWQ6XCJqcXVlcnktdWkuanNcIixjb21wcmVzc2VkOlwianF1ZXJ5LXVpLm1pbi5qc1wifSxcblwiMS44LjEwXCI6e3VuY29tcHJlc3NlZDpcImpxdWVyeS11aS5qc1wiLGNvbXByZXNzZWQ6XCJqcXVlcnktdWkubWluLmpzXCJ9LFwiMS44LjhcIjp7dW5jb21wcmVzc2VkOlwianF1ZXJ5LXVpLmpzXCIsY29tcHJlc3NlZDpcImpxdWVyeS11aS5taW4uanNcIn0sXCIxLjguOVwiOnt1bmNvbXByZXNzZWQ6XCJqcXVlcnktdWkuanNcIixjb21wcmVzc2VkOlwianF1ZXJ5LXVpLm1pbi5qc1wifSxcIjEuNi4wXCI6e3VuY29tcHJlc3NlZDpcImpxdWVyeS11aS5qc1wiLGNvbXByZXNzZWQ6XCJqcXVlcnktdWkubWluLmpzXCJ9LFwiMS43LjBcIjp7dW5jb21wcmVzc2VkOlwianF1ZXJ5LXVpLmpzXCIsY29tcHJlc3NlZDpcImpxdWVyeS11aS5taW4uanNcIn0sXCIxLjUuMlwiOnt1bmNvbXByZXNzZWQ6XCJqcXVlcnktdWkuanNcIixjb21wcmVzc2VkOlwianF1ZXJ5LXVpLm1pbi5qc1wifSxcIjEuOC4wXCI6e3VuY29tcHJlc3NlZDpcImpxdWVyeS11aS5qc1wiLGNvbXByZXNzZWQ6XCJqcXVlcnktdWkubWluLmpzXCJ9LFwiMS43LjFcIjp7dW5jb21wcmVzc2VkOlwianF1ZXJ5LXVpLmpzXCIsXG5jb21wcmVzc2VkOlwianF1ZXJ5LXVpLm1pbi5qc1wifSxcIjEuNS4zXCI6e3VuY29tcHJlc3NlZDpcImpxdWVyeS11aS5qc1wiLGNvbXByZXNzZWQ6XCJqcXVlcnktdWkubWluLmpzXCJ9LFwiMS44LjFcIjp7dW5jb21wcmVzc2VkOlwianF1ZXJ5LXVpLmpzXCIsY29tcHJlc3NlZDpcImpxdWVyeS11aS5taW4uanNcIn0sXCIxLjcuMlwiOnt1bmNvbXByZXNzZWQ6XCJqcXVlcnktdWkuanNcIixjb21wcmVzc2VkOlwianF1ZXJ5LXVpLm1pbi5qc1wifSxcIjEuOC4yXCI6e3VuY29tcHJlc3NlZDpcImpxdWVyeS11aS5qc1wiLGNvbXByZXNzZWQ6XCJqcXVlcnktdWkubWluLmpzXCJ9LFwiMS43LjNcIjp7dW5jb21wcmVzc2VkOlwianF1ZXJ5LXVpLmpzXCIsY29tcHJlc3NlZDpcImpxdWVyeS11aS5taW4uanNcIn19LGFsaWFzZXM6ezE6XCIxLjguMTdcIixcIjEuNVwiOlwiMS41LjNcIixcIjEuNlwiOlwiMS42LjBcIixcIjEuN1wiOlwiMS43LjNcIixcIjEuOFwiOlwiMS44LjE3XCIsXCIxLjguM1wiOlwiMS44LjRcIn19LG1vb3Rvb2xzOnt2ZXJzaW9uczp7XCIxLjMuMFwiOnt1bmNvbXByZXNzZWQ6XCJtb290b29scy5qc1wiLFxuY29tcHJlc3NlZDpcIm1vb3Rvb2xzLXl1aS1jb21wcmVzc2VkLmpzXCJ9LFwiMS4yLjFcIjp7dW5jb21wcmVzc2VkOlwibW9vdG9vbHMuanNcIixjb21wcmVzc2VkOlwibW9vdG9vbHMteXVpLWNvbXByZXNzZWQuanNcIn0sXCIxLjEuMlwiOnt1bmNvbXByZXNzZWQ6XCJtb290b29scy5qc1wiLGNvbXByZXNzZWQ6XCJtb290b29scy15dWktY29tcHJlc3NlZC5qc1wifSxcIjEuNC4wXCI6e3VuY29tcHJlc3NlZDpcIm1vb3Rvb2xzLmpzXCIsY29tcHJlc3NlZDpcIm1vb3Rvb2xzLXl1aS1jb21wcmVzc2VkLmpzXCJ9LFwiMS4zLjFcIjp7dW5jb21wcmVzc2VkOlwibW9vdG9vbHMuanNcIixjb21wcmVzc2VkOlwibW9vdG9vbHMteXVpLWNvbXByZXNzZWQuanNcIn0sXCIxLjIuMlwiOnt1bmNvbXByZXNzZWQ6XCJtb290b29scy5qc1wiLGNvbXByZXNzZWQ6XCJtb290b29scy15dWktY29tcHJlc3NlZC5qc1wifSxcIjEuNC4xXCI6e3VuY29tcHJlc3NlZDpcIm1vb3Rvb2xzLmpzXCIsY29tcHJlc3NlZDpcIm1vb3Rvb2xzLXl1aS1jb21wcmVzc2VkLmpzXCJ9LFxuXCIxLjMuMlwiOnt1bmNvbXByZXNzZWQ6XCJtb290b29scy5qc1wiLGNvbXByZXNzZWQ6XCJtb290b29scy15dWktY29tcHJlc3NlZC5qc1wifSxcIjEuMi4zXCI6e3VuY29tcHJlc3NlZDpcIm1vb3Rvb2xzLmpzXCIsY29tcHJlc3NlZDpcIm1vb3Rvb2xzLXl1aS1jb21wcmVzc2VkLmpzXCJ9LFwiMS40LjJcIjp7dW5jb21wcmVzc2VkOlwibW9vdG9vbHMuanNcIixjb21wcmVzc2VkOlwibW9vdG9vbHMteXVpLWNvbXByZXNzZWQuanNcIn0sXCIxLjIuNFwiOnt1bmNvbXByZXNzZWQ6XCJtb290b29scy5qc1wiLGNvbXByZXNzZWQ6XCJtb290b29scy15dWktY29tcHJlc3NlZC5qc1wifSxcIjEuMi41XCI6e3VuY29tcHJlc3NlZDpcIm1vb3Rvb2xzLmpzXCIsY29tcHJlc3NlZDpcIm1vb3Rvb2xzLXl1aS1jb21wcmVzc2VkLmpzXCJ9LFwiMS4xLjFcIjp7dW5jb21wcmVzc2VkOlwibW9vdG9vbHMuanNcIixjb21wcmVzc2VkOlwibW9vdG9vbHMteXVpLWNvbXByZXNzZWQuanNcIn19LGFsaWFzZXM6ezE6XCIxLjEuMlwiLFwiMS4xXCI6XCIxLjEuMlwiLFwiMS4yXCI6XCIxLjIuNVwiLFxuXCIxLjNcIjpcIjEuMy4yXCIsXCIxLjRcIjpcIjEuNC4yXCIsXCIxLjExXCI6XCIxLjEuMVwifX0seXVpOnt2ZXJzaW9uczp7XCIyLjguMHI0XCI6e3VuY29tcHJlc3NlZDpcImJ1aWxkL3l1aWxvYWRlci95dWlsb2FkZXIuanNcIixjb21wcmVzc2VkOlwiYnVpbGQveXVpbG9hZGVyL3l1aWxvYWRlci1taW4uanNcIn0sXCIyLjkuMFwiOnt1bmNvbXByZXNzZWQ6XCJidWlsZC95dWlsb2FkZXIveXVpbG9hZGVyLmpzXCIsY29tcHJlc3NlZDpcImJ1aWxkL3l1aWxvYWRlci95dWlsb2FkZXItbWluLmpzXCJ9LFwiMi44LjFcIjp7dW5jb21wcmVzc2VkOlwiYnVpbGQveXVpbG9hZGVyL3l1aWxvYWRlci5qc1wiLGNvbXByZXNzZWQ6XCJidWlsZC95dWlsb2FkZXIveXVpbG9hZGVyLW1pbi5qc1wifSxcIjIuNi4wXCI6e3VuY29tcHJlc3NlZDpcImJ1aWxkL3l1aWxvYWRlci95dWlsb2FkZXIuanNcIixjb21wcmVzc2VkOlwiYnVpbGQveXVpbG9hZGVyL3l1aWxvYWRlci1taW4uanNcIn0sXCIyLjcuMFwiOnt1bmNvbXByZXNzZWQ6XCJidWlsZC95dWlsb2FkZXIveXVpbG9hZGVyLmpzXCIsXG5jb21wcmVzc2VkOlwiYnVpbGQveXVpbG9hZGVyL3l1aWxvYWRlci1taW4uanNcIn0sXCIzLjMuMFwiOnt1bmNvbXByZXNzZWQ6XCJidWlsZC95dWkveXVpLmpzXCIsY29tcHJlc3NlZDpcImJ1aWxkL3l1aS95dWktbWluLmpzXCJ9LFwiMi44LjJyMVwiOnt1bmNvbXByZXNzZWQ6XCJidWlsZC95dWlsb2FkZXIveXVpbG9hZGVyLmpzXCIsY29tcHJlc3NlZDpcImJ1aWxkL3l1aWxvYWRlci95dWlsb2FkZXItbWluLmpzXCJ9fSxhbGlhc2VzOnsyOlwiMi45LjBcIixcIjIuNlwiOlwiMi42LjBcIixcIjIuN1wiOlwiMi43LjBcIixcIjIuOFwiOlwiMi44LjJyMVwiLFwiMi44LjBcIjpcIjIuOC4wcjRcIixcIjIuOC4yXCI6XCIyLjguMnIxXCIsXCIyLjlcIjpcIjIuOS4wXCIsMzpcIjMuMy4wXCIsXCIzLjNcIjpcIjMuMy4wXCJ9fSxwcm90b3R5cGU6e3ZlcnNpb25zOntcIjEuNi4xLjBcIjp7dW5jb21wcmVzc2VkOlwicHJvdG90eXBlLmpzXCIsY29tcHJlc3NlZDpcInByb3RvdHlwZS5qc1wifSxcIjEuNi4wLjJcIjp7dW5jb21wcmVzc2VkOlwicHJvdG90eXBlLmpzXCIsY29tcHJlc3NlZDpcInByb3RvdHlwZS5qc1wifSxcblwiMS43LjAuMFwiOnt1bmNvbXByZXNzZWQ6XCJwcm90b3R5cGUuanNcIixjb21wcmVzc2VkOlwicHJvdG90eXBlLmpzXCJ9LFwiMS42LjAuM1wiOnt1bmNvbXByZXNzZWQ6XCJwcm90b3R5cGUuanNcIixjb21wcmVzc2VkOlwicHJvdG90eXBlLmpzXCJ9fSxhbGlhc2VzOnsxOlwiMS43LjAuMFwiLFwiMS42XCI6XCIxLjYuMS4wXCIsXCIxLjYuMFwiOlwiMS42LjAuM1wiLFwiMS42LjFcIjpcIjEuNi4xLjBcIixcIjEuN1wiOlwiMS43LjAuMFwiLFwiMS43LjBcIjpcIjEuNy4wLjBcIn19LGpxdWVyeTp7dmVyc2lvbnM6e1wiMS4yLjNcIjp7dW5jb21wcmVzc2VkOlwianF1ZXJ5LmpzXCIsY29tcHJlc3NlZDpcImpxdWVyeS5taW4uanNcIn0sXCIxLjIuNlwiOnt1bmNvbXByZXNzZWQ6XCJqcXVlcnkuanNcIixjb21wcmVzc2VkOlwianF1ZXJ5Lm1pbi5qc1wifSxcIjEuMy4wXCI6e3VuY29tcHJlc3NlZDpcImpxdWVyeS5qc1wiLGNvbXByZXNzZWQ6XCJqcXVlcnkubWluLmpzXCJ9LFwiMS4zLjFcIjp7dW5jb21wcmVzc2VkOlwianF1ZXJ5LmpzXCIsY29tcHJlc3NlZDpcImpxdWVyeS5taW4uanNcIn0sXG5cIjEuMy4yXCI6e3VuY29tcHJlc3NlZDpcImpxdWVyeS5qc1wiLGNvbXByZXNzZWQ6XCJqcXVlcnkubWluLmpzXCJ9LFwiMS40LjBcIjp7dW5jb21wcmVzc2VkOlwianF1ZXJ5LmpzXCIsY29tcHJlc3NlZDpcImpxdWVyeS5taW4uanNcIn0sXCIxLjQuMVwiOnt1bmNvbXByZXNzZWQ6XCJqcXVlcnkuanNcIixjb21wcmVzc2VkOlwianF1ZXJ5Lm1pbi5qc1wifSxcIjEuNC4yXCI6e3VuY29tcHJlc3NlZDpcImpxdWVyeS5qc1wiLGNvbXByZXNzZWQ6XCJqcXVlcnkubWluLmpzXCJ9LFwiMS40LjNcIjp7dW5jb21wcmVzc2VkOlwianF1ZXJ5LmpzXCIsY29tcHJlc3NlZDpcImpxdWVyeS5taW4uanNcIn0sXCIxLjQuNFwiOnt1bmNvbXByZXNzZWQ6XCJqcXVlcnkuanNcIixjb21wcmVzc2VkOlwianF1ZXJ5Lm1pbi5qc1wifSxcIjEuNS4wXCI6e3VuY29tcHJlc3NlZDpcImpxdWVyeS5qc1wiLGNvbXByZXNzZWQ6XCJqcXVlcnkubWluLmpzXCJ9LFwiMS41LjFcIjp7dW5jb21wcmVzc2VkOlwianF1ZXJ5LmpzXCIsY29tcHJlc3NlZDpcImpxdWVyeS5taW4uanNcIn0sXCIxLjUuMlwiOnt1bmNvbXByZXNzZWQ6XCJqcXVlcnkuanNcIixcbmNvbXByZXNzZWQ6XCJqcXVlcnkubWluLmpzXCJ9LFwiMS42LjBcIjp7dW5jb21wcmVzc2VkOlwianF1ZXJ5LmpzXCIsY29tcHJlc3NlZDpcImpxdWVyeS5taW4uanNcIn0sXCIxLjYuMVwiOnt1bmNvbXByZXNzZWQ6XCJqcXVlcnkuanNcIixjb21wcmVzc2VkOlwianF1ZXJ5Lm1pbi5qc1wifSxcIjEuNi4yXCI6e3VuY29tcHJlc3NlZDpcImpxdWVyeS5qc1wiLGNvbXByZXNzZWQ6XCJqcXVlcnkubWluLmpzXCJ9LFwiMS42LjNcIjp7dW5jb21wcmVzc2VkOlwianF1ZXJ5LmpzXCIsY29tcHJlc3NlZDpcImpxdWVyeS5taW4uanNcIn0sXCIxLjYuNFwiOnt1bmNvbXByZXNzZWQ6XCJqcXVlcnkuanNcIixjb21wcmVzc2VkOlwianF1ZXJ5Lm1pbi5qc1wifSxcIjEuNy4wXCI6e3VuY29tcHJlc3NlZDpcImpxdWVyeS5qc1wiLGNvbXByZXNzZWQ6XCJqcXVlcnkubWluLmpzXCJ9LFwiMS43LjFcIjp7dW5jb21wcmVzc2VkOlwianF1ZXJ5LmpzXCIsY29tcHJlc3NlZDpcImpxdWVyeS5taW4uanNcIn19LGFsaWFzZXM6ezE6XCIxLjcuMVwiLFwiMS4yXCI6XCIxLjIuNlwiLFwiMS4zXCI6XCIxLjMuMlwiLFxuXCIxLjRcIjpcIjEuNC40XCIsXCIxLjVcIjpcIjEuNS4yXCIsXCIxLjZcIjpcIjEuNi40XCIsXCIxLjdcIjpcIjEuNy4xXCJ9fSxkb2pvOnt2ZXJzaW9uczp7XCIxLjMuMFwiOnt1bmNvbXByZXNzZWQ6XCJkb2pvL2Rvam8ueGQuanMudW5jb21wcmVzc2VkLmpzXCIsY29tcHJlc3NlZDpcImRvam8vZG9qby54ZC5qc1wifSxcIjEuNC4wXCI6e3VuY29tcHJlc3NlZDpcImRvam8vZG9qby54ZC5qcy51bmNvbXByZXNzZWQuanNcIixjb21wcmVzc2VkOlwiZG9qby9kb2pvLnhkLmpzXCJ9LFwiMS4zLjFcIjp7dW5jb21wcmVzc2VkOlwiZG9qby9kb2pvLnhkLmpzLnVuY29tcHJlc3NlZC5qc1wiLGNvbXByZXNzZWQ6XCJkb2pvL2Rvam8ueGQuanNcIn0sXCIxLjUuMFwiOnt1bmNvbXByZXNzZWQ6XCJkb2pvL2Rvam8ueGQuanMudW5jb21wcmVzc2VkLmpzXCIsY29tcHJlc3NlZDpcImRvam8vZG9qby54ZC5qc1wifSxcIjEuNC4xXCI6e3VuY29tcHJlc3NlZDpcImRvam8vZG9qby54ZC5qcy51bmNvbXByZXNzZWQuanNcIixjb21wcmVzc2VkOlwiZG9qby9kb2pvLnhkLmpzXCJ9LFxuXCIxLjMuMlwiOnt1bmNvbXByZXNzZWQ6XCJkb2pvL2Rvam8ueGQuanMudW5jb21wcmVzc2VkLmpzXCIsY29tcHJlc3NlZDpcImRvam8vZG9qby54ZC5qc1wifSxcIjEuMi4zXCI6e3VuY29tcHJlc3NlZDpcImRvam8vZG9qby54ZC5qcy51bmNvbXByZXNzZWQuanNcIixjb21wcmVzc2VkOlwiZG9qby9kb2pvLnhkLmpzXCJ9LFwiMS42LjBcIjp7dW5jb21wcmVzc2VkOlwiZG9qby9kb2pvLnhkLmpzLnVuY29tcHJlc3NlZC5qc1wiLGNvbXByZXNzZWQ6XCJkb2pvL2Rvam8ueGQuanNcIn0sXCIxLjUuMVwiOnt1bmNvbXByZXNzZWQ6XCJkb2pvL2Rvam8ueGQuanMudW5jb21wcmVzc2VkLmpzXCIsY29tcHJlc3NlZDpcImRvam8vZG9qby54ZC5qc1wifSxcIjEuNy4wXCI6e3VuY29tcHJlc3NlZDpcImRvam8vZG9qby5qcy51bmNvbXByZXNzZWQuanNcIixjb21wcmVzc2VkOlwiZG9qby9kb2pvLmpzXCJ9LFwiMS42LjFcIjp7dW5jb21wcmVzc2VkOlwiZG9qby9kb2pvLnhkLmpzLnVuY29tcHJlc3NlZC5qc1wiLGNvbXByZXNzZWQ6XCJkb2pvL2Rvam8ueGQuanNcIn0sXG5cIjEuNC4zXCI6e3VuY29tcHJlc3NlZDpcImRvam8vZG9qby54ZC5qcy51bmNvbXByZXNzZWQuanNcIixjb21wcmVzc2VkOlwiZG9qby9kb2pvLnhkLmpzXCJ9LFwiMS43LjFcIjp7dW5jb21wcmVzc2VkOlwiZG9qby9kb2pvLmpzLnVuY29tcHJlc3NlZC5qc1wiLGNvbXByZXNzZWQ6XCJkb2pvL2Rvam8uanNcIn0sXCIxLjcuMlwiOnt1bmNvbXByZXNzZWQ6XCJkb2pvL2Rvam8uanMudW5jb21wcmVzc2VkLmpzXCIsY29tcHJlc3NlZDpcImRvam8vZG9qby5qc1wifSxcIjEuMi4wXCI6e3VuY29tcHJlc3NlZDpcImRvam8vZG9qby54ZC5qcy51bmNvbXByZXNzZWQuanNcIixjb21wcmVzc2VkOlwiZG9qby9kb2pvLnhkLmpzXCJ9LFwiMS4xLjFcIjp7dW5jb21wcmVzc2VkOlwiZG9qby9kb2pvLnhkLmpzLnVuY29tcHJlc3NlZC5qc1wiLGNvbXByZXNzZWQ6XCJkb2pvL2Rvam8ueGQuanNcIn19LGFsaWFzZXM6ezE6XCIxLjYuMVwiLFwiMS4xXCI6XCIxLjEuMVwiLFwiMS4yXCI6XCIxLjIuM1wiLFwiMS4zXCI6XCIxLjMuMlwiLFwiMS40XCI6XCIxLjQuM1wiLFwiMS41XCI6XCIxLjUuMVwiLFxuXCIxLjZcIjpcIjEuNi4xXCIsXCIxLjdcIjpcIjEuNy4yXCJ9fX07dmFyIEdhPXthZjohMCxhbTohMCxhejohMCxhcjohMCxhcmI6XCJhclwiLGJnOiEwLGJuOiEwLGNhOiEwLGNzOiEwLGNtbjpcInpoXCIsZGE6ITAsZGU6ITAsZWw6ITAsZW46ITAsZW5fZ2I6ITAsZXM6ITAsZXNfNDE5OiEwLGV0OiEwLGV1OiEwLGZhOiEwLGZpOiEwLGZpbDohMCxmcjohMCxmcl9jYTohMCxnbDohMCxrYTohMCxndTohMCxoZTpcIml3XCIsaGk6ITAsaHI6ITAsaHU6ITAsaHk6ITAsaWQ6ITAsXCJpblwiOlwiaWRcIixpczohMCxpdDohMCxpdzohMCxqYTohMCxqaTpcInlpXCIsanY6ITEsanc6XCJqdlwiLGttOiEwLGtuOiEwLGtvOiEwLGxvOiEwLGx0OiEwLGx2OiEwLG1sOiEwLG1uOiEwLG1vOlwicm9cIixtcjohMCxtczohMCxuYjpcIm5vXCIsbmU6ITAsbmw6ITAsbm86ITAscGw6ITAscHQ6XCJwdF9iclwiLHB0X2JyOiEwLHB0X3B0OiEwLHJvOiEwLHJ1OiEwLHNpOiEwLHNrOiEwLHNsOiEwLHNyOiEwLHN2OiEwLHN3OiEwLHN3aDpcInN3XCIsdGE6ITAsdGU6ITAsdGg6ITAsdGw6XCJmaWxcIix0cjohMCx1azohMCxcbnVyOiEwLHZpOiEwLHlpOiExLHpoOlwiemhfY25cIix6aF9jbjohMCx6aF9oazohMCx6aF90dzohMCx6c206XCJtc1wiLHp1OiEwfTt2YXIgSGE9ezE6XCIxLjBcIixcIjEuMFwiOlwiY3VycmVudFwiLFwiMS4xXCI6XCJ1cGNvbWluZ1wiLFwiMS4yXCI6XCJ0ZXN0aW5nXCIsNDE6XCJwcmUtNDVcIiw0MjpcInByZS00NVwiLDQzOlwicHJlLTQ1XCIsNDQ6XCJwcmUtNDVcIiw0NjpcIjQ2LjFcIixcIjQ2LjFcIjpcIjQ2LjJcIiw0ODpcIjQ4LjFcIixjdXJyZW50OlwiNTFcIix1cGNvbWluZzpcIjUyXCJ9O3ZhciBJYTtmdW5jdGlvbiBKKGEsYil7dGhpcy5nPWI9PT1KYT9hOlwiXCJ9Si5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nK1wiXCJ9O0oucHJvdG90eXBlLks9ITA7Si5wcm90b3R5cGUuST1mdW5jdGlvbigpe3JldHVybiB0aGlzLmcudG9TdHJpbmcoKX07ZnVuY3Rpb24gS2EoYSl7cmV0dXJuIGEgaW5zdGFuY2VvZiBKJiZhLmNvbnN0cnVjdG9yPT09Sj9hLmc6XCJ0eXBlX2Vycm9yOlRydXN0ZWRSZXNvdXJjZVVybFwifVxuZnVuY3Rpb24gTGEoYSxiKXt2YXIgYz1DYShhKTtpZighTWEudGVzdChjKSl0aHJvdyBFcnJvcihcIkludmFsaWQgVHJ1c3RlZFJlc291cmNlVXJsIGZvcm1hdDogXCIrYyk7YT1jLnJlcGxhY2UoTmEsZnVuY3Rpb24oZCxlKXtpZighT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGIsZSkpdGhyb3cgRXJyb3IoJ0ZvdW5kIG1hcmtlciwgXCInK2UrJ1wiLCBpbiBmb3JtYXQgc3RyaW5nLCBcIicrYysnXCIsIGJ1dCBubyB2YWxpZCBsYWJlbCBtYXBwaW5nIGZvdW5kIGluIGFyZ3M6ICcrSlNPTi5zdHJpbmdpZnkoYikpO2Q9YltlXTtyZXR1cm4gZCBpbnN0YW5jZW9mIEg/Q2EoZCk6ZW5jb2RlVVJJQ29tcG9uZW50KFN0cmluZyhkKSl9KTtyZXR1cm4gT2EoYSl9XG52YXIgTmE9LyV7KFxcdyspfS9nLE1hPVJlZ0V4cChcIl4oKGh0dHBzOik/Ly9bMC05YS16LjpbXFxcXF0tXSsvfC9bXi9cXFxcXFxcXF18W146L1xcXFxcXFxcJV0rL3xbXjovXFxcXFxcXFwlXSpbPyNdfGFib3V0OmJsYW5rIylcIixcImlcIiksUGE9L14oW14/I10qKShcXD9bXiNdKik/KCNbXFxzXFxTXSopPy87ZnVuY3Rpb24gUWEoYSxiLGMpe2E9TGEoYSxiKTthPVBhLmV4ZWMoS2EoYSkudG9TdHJpbmcoKSk7Yj1hWzNdfHxcIlwiO3JldHVybiBPYShhWzFdK1JhKFwiP1wiLGFbMl18fFwiXCIsYykrUmEoXCIjXCIsYikpfXZhciBKYT17fTtcbmZ1bmN0aW9uIE9hKGEpe2lmKHZvaWQgMD09PUlhKXt2YXIgYj1udWxsO3ZhciBjPUEudHJ1c3RlZFR5cGVzO2lmKGMmJmMuY3JlYXRlUG9saWN5KXt0cnl7Yj1jLmNyZWF0ZVBvbGljeShcImdvb2cjaHRtbFwiLHtjcmVhdGVIVE1MOnphLGNyZWF0ZVNjcmlwdDp6YSxjcmVhdGVTY3JpcHRVUkw6emF9KX1jYXRjaChkKXtBLmNvbnNvbGUmJkEuY29uc29sZS5lcnJvcihkLm1lc3NhZ2UpfUlhPWJ9ZWxzZSBJYT1ifWE9KGI9SWEpP2IuY3JlYXRlU2NyaXB0VVJMKGEpOmE7cmV0dXJuIG5ldyBKKGEsSmEpfVxuZnVuY3Rpb24gUmEoYSxiLGMpe2lmKG51bGw9PWMpcmV0dXJuIGI7aWYoXCJzdHJpbmdcIj09PXR5cGVvZiBjKXJldHVybiBjP2ErZW5jb2RlVVJJQ29tcG9uZW50KGMpOlwiXCI7Zm9yKHZhciBkIGluIGMpaWYoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGMsZCkpe3ZhciBlPWNbZF07ZT1BcnJheS5pc0FycmF5KGUpP2U6W2VdO2Zvcih2YXIgaD0wO2g8ZS5sZW5ndGg7aCsrKXt2YXIgZj1lW2hdO251bGwhPWYmJihifHwoYj1hKSxiKz0oYi5sZW5ndGg+YS5sZW5ndGg/XCImXCI6XCJcIikrZW5jb2RlVVJJQ29tcG9uZW50KGQpK1wiPVwiK2VuY29kZVVSSUNvbXBvbmVudChTdHJpbmcoZikpKX19cmV0dXJuIGJ9O3ZhciBTYT1BcnJheS5wcm90b3R5cGUuc29tZT9mdW5jdGlvbihhLGIpe3JldHVybiBBcnJheS5wcm90b3R5cGUuc29tZS5jYWxsKGEsYix2b2lkIDApfTpmdW5jdGlvbihhLGIpe2Zvcih2YXIgYz1hLmxlbmd0aCxkPVwic3RyaW5nXCI9PT10eXBlb2YgYT9hLnNwbGl0KFwiXCIpOmEsZT0wO2U8YztlKyspaWYoZSBpbiBkJiZiLmNhbGwodm9pZCAwLGRbZV0sZSxhKSlyZXR1cm4hMDtyZXR1cm4hMX07ZnVuY3Rpb24gVGEoKXt9O2Z1bmN0aW9uIFVhKGEsYil7Zm9yKHZhciBjIGluIGEpYi5jYWxsKHZvaWQgMCxhW2NdLGMsYSl9dmFyIFZhPVwiY29uc3RydWN0b3IgaGFzT3duUHJvcGVydHkgaXNQcm90b3R5cGVPZiBwcm9wZXJ0eUlzRW51bWVyYWJsZSB0b0xvY2FsZVN0cmluZyB0b1N0cmluZyB2YWx1ZU9mXCIuc3BsaXQoXCIgXCIpO2Z1bmN0aW9uIFdhKGEsYil7Zm9yKHZhciBjLGQsZT0xO2U8YXJndW1lbnRzLmxlbmd0aDtlKyspe2Q9YXJndW1lbnRzW2VdO2ZvcihjIGluIGQpYVtjXT1kW2NdO2Zvcih2YXIgaD0wO2g8VmEubGVuZ3RoO2grKyljPVZhW2hdLE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChkLGMpJiYoYVtjXT1kW2NdKX19O3ZhciBYYSxZYT1CKFwiQ0xPU1VSRV9GTEFHU1wiKSxaYT1ZYSYmWWFbNjEwNDAxMzAxXTtYYT1udWxsIT1aYT9aYTohMTtmdW5jdGlvbiAkYSgpe3ZhciBhPUEubmF2aWdhdG9yO3JldHVybiBhJiYoYT1hLnVzZXJBZ2VudCk/YTpcIlwifXZhciBLLGFiPUEubmF2aWdhdG9yO0s9YWI/YWIudXNlckFnZW50RGF0YXx8bnVsbDpudWxsO2Z1bmN0aW9uIGJiKGEsYil7YTp7dmFyIGM9KGEub3duZXJEb2N1bWVudCYmYS5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3fHxBKS5kb2N1bWVudDtpZihjLnF1ZXJ5U2VsZWN0b3ImJihjPWMucXVlcnlTZWxlY3RvcihcInNjcmlwdFtub25jZV1cIikpJiYoYz1jLm5vbmNlfHxjLmdldEF0dHJpYnV0ZShcIm5vbmNlXCIpKSYmY2IudGVzdChjKSlicmVhayBhO2M9XCJcIn1jJiZhLnNldEF0dHJpYnV0ZShcIm5vbmNlXCIsYyk7YS5zcmM9S2EoYil9dmFyIGNiPS9eW1xcdysvXy1dK1s9XXswLDJ9JC87dmFyIGRiPVJlZ0V4cChcIl4oPzooW146Lz8jLl0rKTopPyg/Oi8vKD86KFteXFxcXFxcXFwvPyNdKilAKT8oW15cXFxcXFxcXC8/I10qPykoPzo6KFswLTldKykpPyg/PVtcXFxcXFxcXC8/I118JCkpPyhbXj8jXSspPyg/OlxcXFw/KFteI10qKSk/KD86IyhbXFxcXHNcXFxcU10qKSk/JFwiKTtmdW5jdGlvbiBlYihhLGIpe2lmKGEpe2E9YS5zcGxpdChcIiZcIik7Zm9yKHZhciBjPTA7YzxhLmxlbmd0aDtjKyspe3ZhciBkPWFbY10uaW5kZXhPZihcIj1cIiksZT1udWxsO2lmKDA8PWQpe3ZhciBoPWFbY10uc3Vic3RyaW5nKDAsZCk7ZT1hW2NdLnN1YnN0cmluZyhkKzEpfWVsc2UgaD1hW2NdO2IoaCxlP2RlY29kZVVSSUNvbXBvbmVudChlLnJlcGxhY2UoL1xcKy9nLFwiIFwiKSk6XCJcIil9fX07ZnVuY3Rpb24gTChhKXt0aGlzLmc9dGhpcy5vPXRoaXMuaj1cIlwiO3RoaXMudT1udWxsO3RoaXMubT10aGlzLmg9XCJcIjt0aGlzLmw9ITE7dmFyIGI7YSBpbnN0YW5jZW9mIEw/KHRoaXMubD1hLmwsZmIodGhpcyxhLmopLHRoaXMubz1hLm8sdGhpcy5nPWEuZyxnYih0aGlzLGEudSksdGhpcy5oPWEuaCxoYih0aGlzLGliKGEuaSkpLHRoaXMubT1hLm0pOmEmJihiPVN0cmluZyhhKS5tYXRjaChkYikpPyh0aGlzLmw9ITEsZmIodGhpcyxiWzFdfHxcIlwiLCEwKSx0aGlzLm89TShiWzJdfHxcIlwiKSx0aGlzLmc9TShiWzNdfHxcIlwiLCEwKSxnYih0aGlzLGJbNF0pLHRoaXMuaD1NKGJbNV18fFwiXCIsITApLGhiKHRoaXMsYls2XXx8XCJcIiwhMCksdGhpcy5tPU0oYls3XXx8XCJcIikpOih0aGlzLmw9ITEsdGhpcy5pPW5ldyBOKG51bGwsdGhpcy5sKSl9XG5MLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3ZhciBhPVtdLGI9dGhpcy5qO2ImJmEucHVzaChPKGIsamIsITApLFwiOlwiKTt2YXIgYz10aGlzLmc7aWYoY3x8XCJmaWxlXCI9PWIpYS5wdXNoKFwiLy9cIiksKGI9dGhpcy5vKSYmYS5wdXNoKE8oYixqYiwhMCksXCJAXCIpLGEucHVzaChlbmNvZGVVUklDb21wb25lbnQoU3RyaW5nKGMpKS5yZXBsYWNlKC8lMjUoWzAtOWEtZkEtRl17Mn0pL2csXCIlJDFcIikpLGM9dGhpcy51LG51bGwhPWMmJmEucHVzaChcIjpcIixTdHJpbmcoYykpO2lmKGM9dGhpcy5oKXRoaXMuZyYmXCIvXCIhPWMuY2hhckF0KDApJiZhLnB1c2goXCIvXCIpLGEucHVzaChPKGMsXCIvXCI9PWMuY2hhckF0KDApP2tiOmxiLCEwKSk7KGM9dGhpcy5pLnRvU3RyaW5nKCkpJiZhLnB1c2goXCI/XCIsYyk7KGM9dGhpcy5tKSYmYS5wdXNoKFwiI1wiLE8oYyxtYikpO3JldHVybiBhLmpvaW4oXCJcIil9O1xuTC5wcm90b3R5cGUucmVzb2x2ZT1mdW5jdGlvbihhKXt2YXIgYj1uZXcgTCh0aGlzKSxjPSEhYS5qO2M/ZmIoYixhLmopOmM9ISFhLm87Yz9iLm89YS5vOmM9ISFhLmc7Yz9iLmc9YS5nOmM9bnVsbCE9YS51O3ZhciBkPWEuaDtpZihjKWdiKGIsYS51KTtlbHNlIGlmKGM9ISFhLmgpe2lmKFwiL1wiIT1kLmNoYXJBdCgwKSlpZih0aGlzLmcmJiF0aGlzLmgpZD1cIi9cIitkO2Vsc2V7dmFyIGU9Yi5oLmxhc3RJbmRleE9mKFwiL1wiKTstMSE9ZSYmKGQ9Yi5oLnNsaWNlKDAsZSsxKStkKX1lPWQ7aWYoXCIuLlwiPT1lfHxcIi5cIj09ZSlkPVwiXCI7ZWxzZSBpZigtMSE9ZS5pbmRleE9mKFwiLi9cIil8fC0xIT1lLmluZGV4T2YoXCIvLlwiKSl7ZD0wPT1lLmxhc3RJbmRleE9mKFwiL1wiLDApO2U9ZS5zcGxpdChcIi9cIik7Zm9yKHZhciBoPVtdLGY9MDtmPGUubGVuZ3RoOyl7dmFyIGc9ZVtmKytdO1wiLlwiPT1nP2QmJmY9PWUubGVuZ3RoJiZoLnB1c2goXCJcIik6XCIuLlwiPT1nPygoMTxoLmxlbmd0aHx8MT09aC5sZW5ndGgmJlwiXCIhPVxuaFswXSkmJmgucG9wKCksZCYmZj09ZS5sZW5ndGgmJmgucHVzaChcIlwiKSk6KGgucHVzaChnKSxkPSEwKX1kPWguam9pbihcIi9cIil9ZWxzZSBkPWV9Yz9iLmg9ZDpjPVwiXCIhPT1hLmkudG9TdHJpbmcoKTtjP2hiKGIsaWIoYS5pKSk6Yz0hIWEubTtjJiYoYi5tPWEubSk7cmV0dXJuIGJ9O2Z1bmN0aW9uIGZiKGEsYixjKXthLmo9Yz9NKGIsITApOmI7YS5qJiYoYS5qPWEuai5yZXBsYWNlKC86JC8sXCJcIikpfWZ1bmN0aW9uIGdiKGEsYil7aWYoYil7Yj1OdW1iZXIoYik7aWYoaXNOYU4oYil8fDA+Yil0aHJvdyBFcnJvcihcIkJhZCBwb3J0IG51bWJlciBcIitiKTthLnU9Yn1lbHNlIGEudT1udWxsfWZ1bmN0aW9uIGhiKGEsYixjKXtiIGluc3RhbmNlb2YgTj8oYS5pPWIsbmIoYS5pLGEubCkpOihjfHwoYj1PKGIsb2IpKSxhLmk9bmV3IE4oYixhLmwpKX1cbmZ1bmN0aW9uIE0oYSxiKXtyZXR1cm4gYT9iP2RlY29kZVVSSShhLnJlcGxhY2UoLyUyNS9nLFwiJTI1MjVcIikpOmRlY29kZVVSSUNvbXBvbmVudChhKTpcIlwifWZ1bmN0aW9uIE8oYSxiLGMpe3JldHVyblwic3RyaW5nXCI9PT10eXBlb2YgYT8oYT1lbmNvZGVVUkkoYSkucmVwbGFjZShiLHBiKSxjJiYoYT1hLnJlcGxhY2UoLyUyNShbMC05YS1mQS1GXXsyfSkvZyxcIiUkMVwiKSksYSk6bnVsbH1mdW5jdGlvbiBwYihhKXthPWEuY2hhckNvZGVBdCgwKTtyZXR1cm5cIiVcIisoYT4+NCYxNSkudG9TdHJpbmcoMTYpKyhhJjE1KS50b1N0cmluZygxNil9dmFyIGpiPS9bI1xcL1xcP0BdL2csbGI9L1sjXFw/Ol0vZyxrYj0vWyNcXD9dL2csb2I9L1sjXFw/QF0vZyxtYj0vIy9nO2Z1bmN0aW9uIE4oYSxiKXt0aGlzLmg9dGhpcy5nPW51bGw7dGhpcy5pPWF8fG51bGw7dGhpcy5qPSEhYn1cbmZ1bmN0aW9uIFAoYSl7YS5nfHwoYS5nPW5ldyBNYXAsYS5oPTAsYS5pJiZlYihhLmksZnVuY3Rpb24oYixjKXthLmFkZChkZWNvZGVVUklDb21wb25lbnQoYi5yZXBsYWNlKC9cXCsvZyxcIiBcIikpLGMpfSkpfU4ucHJvdG90eXBlLmFkZD1mdW5jdGlvbihhLGIpe1AodGhpcyk7dGhpcy5pPW51bGw7YT1RKHRoaXMsYSk7dmFyIGM9dGhpcy5nLmdldChhKTtjfHx0aGlzLmcuc2V0KGEsYz1bXSk7Yy5wdXNoKGIpO3RoaXMuaCs9MTtyZXR1cm4gdGhpc307ZnVuY3Rpb24gcWIoYSxiKXtQKGEpO2I9UShhLGIpO2EuZy5oYXMoYikmJihhLmk9bnVsbCxhLmgtPWEuZy5nZXQoYikubGVuZ3RoLGEuZy5kZWxldGUoYikpfWZ1bmN0aW9uIHJiKGEsYil7UChhKTtiPVEoYSxiKTtyZXR1cm4gYS5nLmhhcyhiKX1cbk4ucHJvdG90eXBlLmZvckVhY2g9ZnVuY3Rpb24oYSxiKXtQKHRoaXMpO3RoaXMuZy5mb3JFYWNoKGZ1bmN0aW9uKGMsZCl7Yy5mb3JFYWNoKGZ1bmN0aW9uKGUpe2EuY2FsbChiLGUsZCx0aGlzKX0sdGhpcyl9LHRoaXMpfTtmdW5jdGlvbiBzYihhLGIpe1AoYSk7dmFyIGM9W107aWYoXCJzdHJpbmdcIj09PXR5cGVvZiBiKXJiKGEsYikmJihjPWMuY29uY2F0KGEuZy5nZXQoUShhLGIpKSkpO2Vsc2UgZm9yKGE9QXJyYXkuZnJvbShhLmcudmFsdWVzKCkpLGI9MDtiPGEubGVuZ3RoO2IrKyljPWMuY29uY2F0KGFbYl0pO3JldHVybiBjfU4ucHJvdG90eXBlLnNldD1mdW5jdGlvbihhLGIpe1AodGhpcyk7dGhpcy5pPW51bGw7YT1RKHRoaXMsYSk7cmIodGhpcyxhKSYmKHRoaXMuaC09dGhpcy5nLmdldChhKS5sZW5ndGgpO3RoaXMuZy5zZXQoYSxbYl0pO3RoaXMuaCs9MTtyZXR1cm4gdGhpc307XG5OLnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24oYSxiKXtpZighYSlyZXR1cm4gYjthPXNiKHRoaXMsYSk7cmV0dXJuIDA8YS5sZW5ndGg/U3RyaW5nKGFbMF0pOmJ9O04ucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7aWYodGhpcy5pKXJldHVybiB0aGlzLmk7aWYoIXRoaXMuZylyZXR1cm5cIlwiO2Zvcih2YXIgYT1bXSxiPUFycmF5LmZyb20odGhpcy5nLmtleXMoKSksYz0wO2M8Yi5sZW5ndGg7YysrKXt2YXIgZD1iW2NdLGU9ZW5jb2RlVVJJQ29tcG9uZW50KFN0cmluZyhkKSk7ZD1zYih0aGlzLGQpO2Zvcih2YXIgaD0wO2g8ZC5sZW5ndGg7aCsrKXt2YXIgZj1lO1wiXCIhPT1kW2hdJiYoZis9XCI9XCIrZW5jb2RlVVJJQ29tcG9uZW50KFN0cmluZyhkW2hdKSkpO2EucHVzaChmKX19cmV0dXJuIHRoaXMuaT1hLmpvaW4oXCImXCIpfTtmdW5jdGlvbiBpYihhKXt2YXIgYj1uZXcgTjtiLmk9YS5pO2EuZyYmKGIuZz1uZXcgTWFwKGEuZyksYi5oPWEuaCk7cmV0dXJuIGJ9XG5mdW5jdGlvbiBRKGEsYil7Yj1TdHJpbmcoYik7YS5qJiYoYj1iLnRvTG93ZXJDYXNlKCkpO3JldHVybiBifWZ1bmN0aW9uIG5iKGEsYil7YiYmIWEuaiYmKFAoYSksYS5pPW51bGwsYS5nLmZvckVhY2goZnVuY3Rpb24oYyxkKXt2YXIgZT1kLnRvTG93ZXJDYXNlKCk7aWYoZCE9ZSYmKHFiKHRoaXMsZCkscWIodGhpcyxlKSwwPGMubGVuZ3RoKSl7dGhpcy5pPW51bGw7ZD10aGlzLmc7dmFyIGg9ZC5zZXQ7ZT1RKHRoaXMsZSk7dmFyIGY9Yy5sZW5ndGg7aWYoMDxmKXtmb3IodmFyIGc9QXJyYXkoZiksaz0wO2s8ZjtrKyspZ1trXT1jW2tdO2Y9Z31lbHNlIGY9W107aC5jYWxsKGQsZSxmKTt0aGlzLmgrPWMubGVuZ3RofX0sYSkpO2Euaj1ifTtmdW5jdGlvbiB0YihhLGIpe1VhKGIsZnVuY3Rpb24oYyxkKXtjJiZcIm9iamVjdFwiPT10eXBlb2YgYyYmYy5LJiYoYz1jLkkoKSk7XCJzdHlsZVwiPT1kP2Euc3R5bGUuY3NzVGV4dD1jOlwiY2xhc3NcIj09ZD9hLmNsYXNzTmFtZT1jOlwiZm9yXCI9PWQ/YS5odG1sRm9yPWM6dWIuaGFzT3duUHJvcGVydHkoZCk/YS5zZXRBdHRyaWJ1dGUodWJbZF0sYyk6MD09ZC5sYXN0SW5kZXhPZihcImFyaWEtXCIsMCl8fDA9PWQubGFzdEluZGV4T2YoXCJkYXRhLVwiLDApP2Euc2V0QXR0cmlidXRlKGQsYyk6YVtkXT1jfSl9XG52YXIgdWI9e2NlbGxwYWRkaW5nOlwiY2VsbFBhZGRpbmdcIixjZWxsc3BhY2luZzpcImNlbGxTcGFjaW5nXCIsY29sc3BhbjpcImNvbFNwYW5cIixmcmFtZWJvcmRlcjpcImZyYW1lQm9yZGVyXCIsaGVpZ2h0OlwiaGVpZ2h0XCIsbWF4bGVuZ3RoOlwibWF4TGVuZ3RoXCIsbm9uY2U6XCJub25jZVwiLHJvbGU6XCJyb2xlXCIscm93c3BhbjpcInJvd1NwYW5cIix0eXBlOlwidHlwZVwiLHVzZW1hcDpcInVzZU1hcFwiLHZhbGlnbjpcInZBbGlnblwiLHdpZHRoOlwid2lkdGhcIn07ZnVuY3Rpb24gdmIoYSxiKXtiPVN0cmluZyhiKTtcImFwcGxpY2F0aW9uL3hodG1sK3htbFwiPT09YS5jb250ZW50VHlwZSYmKGI9Yi50b0xvd2VyQ2FzZSgpKTtyZXR1cm4gYS5jcmVhdGVFbGVtZW50KGIpfWZ1bmN0aW9uIHdiKGEpe3RoaXMuZz1hfHxBLmRvY3VtZW50fHxkb2N1bWVudH07ZnVuY3Rpb24geGIoKXt9O2Z1bmN0aW9uIHliKGEsYil7dGhpcy5pPWE7dGhpcy5qPWI7dGhpcy5oPTA7dGhpcy5nPW51bGx9eWIucHJvdG90eXBlLmdldD1mdW5jdGlvbigpe2lmKDA8dGhpcy5oKXt0aGlzLmgtLTt2YXIgYT10aGlzLmc7dGhpcy5nPWEubmV4dDthLm5leHQ9bnVsbH1lbHNlIGE9dGhpcy5pKCk7cmV0dXJuIGF9O2Z1bmN0aW9uIHpiKGEsYil7YS5qKGIpOzEwMD5hLmgmJihhLmgrKyxiLm5leHQ9YS5nLGEuZz1iKX07dmFyIEFiO1xuZnVuY3Rpb24gQmIoKXt2YXIgYT1BLk1lc3NhZ2VDaGFubmVsO1widW5kZWZpbmVkXCI9PT10eXBlb2YgYSYmXCJ1bmRlZmluZWRcIiE9PXR5cGVvZiB3aW5kb3cmJndpbmRvdy5wb3N0TWVzc2FnZSYmd2luZG93LmFkZEV2ZW50TGlzdGVuZXImJi0xPT0kYSgpLmluZGV4T2YoXCJQcmVzdG9cIikmJihhPWZ1bmN0aW9uKCl7dmFyIGU9dmIoZG9jdW1lbnQsXCJJRlJBTUVcIik7ZS5zdHlsZS5kaXNwbGF5PVwibm9uZVwiO2RvY3VtZW50LmRvY3VtZW50RWxlbWVudC5hcHBlbmRDaGlsZChlKTt2YXIgaD1lLmNvbnRlbnRXaW5kb3c7ZT1oLmRvY3VtZW50O2Uub3BlbigpO2UuY2xvc2UoKTt2YXIgZj1cImNhbGxJbW1lZGlhdGVcIitNYXRoLnJhbmRvbSgpLGc9XCJmaWxlOlwiPT1oLmxvY2F0aW9uLnByb3RvY29sP1wiKlwiOmgubG9jYXRpb24ucHJvdG9jb2wrXCIvL1wiK2gubG9jYXRpb24uaG9zdDtlPUMoZnVuY3Rpb24oayl7aWYoKFwiKlwiPT1nfHxrLm9yaWdpbj09ZykmJmsuZGF0YT09Zil0aGlzLnBvcnQxLm9ubWVzc2FnZSgpfSx0aGlzKTtcbmguYWRkRXZlbnRMaXN0ZW5lcihcIm1lc3NhZ2VcIixlLCExKTt0aGlzLnBvcnQxPXt9O3RoaXMucG9ydDI9e3Bvc3RNZXNzYWdlOmZ1bmN0aW9uKCl7aC5wb3N0TWVzc2FnZShmLGcpfX19KTtpZihcInVuZGVmaW5lZFwiIT09dHlwZW9mIGEmJihYYSYmSyYmMDxLLmJyYW5kcy5sZW5ndGh8fC0xPT0kYSgpLmluZGV4T2YoXCJUcmlkZW50XCIpJiYtMT09JGEoKS5pbmRleE9mKFwiTVNJRVwiKSkpe3ZhciBiPW5ldyBhLGM9e30sZD1jO2IucG9ydDEub25tZXNzYWdlPWZ1bmN0aW9uKCl7aWYodm9pZCAwIT09Yy5uZXh0KXtjPWMubmV4dDt2YXIgZT1jLkg7Yy5IPW51bGw7ZSgpfX07cmV0dXJuIGZ1bmN0aW9uKGUpe2QubmV4dD17SDplfTtkPWQubmV4dDtiLnBvcnQyLnBvc3RNZXNzYWdlKDApfX1yZXR1cm4gZnVuY3Rpb24oZSl7QS5zZXRUaW1lb3V0KGUsMCl9fTtmdW5jdGlvbiBDYihhKXtBLnNldFRpbWVvdXQoZnVuY3Rpb24oKXt0aHJvdyBhO30sMCl9O2Z1bmN0aW9uIERiKCl7dGhpcy5oPXRoaXMuZz1udWxsfURiLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24oYSxiKXt2YXIgYz1FYi5nZXQoKTtjLnNldChhLGIpO3RoaXMuaD90aGlzLmgubmV4dD1jOnRoaXMuZz1jO3RoaXMuaD1jfTtmdW5jdGlvbiBGYigpe3ZhciBhPUdiLGI9bnVsbDthLmcmJihiPWEuZyxhLmc9YS5nLm5leHQsYS5nfHwoYS5oPW51bGwpLGIubmV4dD1udWxsKTtyZXR1cm4gYn12YXIgRWI9bmV3IHliKGZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBIYn0sZnVuY3Rpb24oYSl7cmV0dXJuIGEucmVzZXQoKX0pO2Z1bmN0aW9uIEhiKCl7dGhpcy5uZXh0PXRoaXMuZz10aGlzLmg9bnVsbH1IYi5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKGEsYil7dGhpcy5oPWE7dGhpcy5nPWI7dGhpcy5uZXh0PW51bGx9O0hiLnByb3RvdHlwZS5yZXNldD1mdW5jdGlvbigpe3RoaXMubmV4dD10aGlzLmc9dGhpcy5oPW51bGx9O3ZhciBJYixKYj0hMSxHYj1uZXcgRGI7ZnVuY3Rpb24gS2IoYSxiKXtJYnx8TGIoKTtKYnx8KEliKCksSmI9ITApO0diLmFkZChhLGIpfWZ1bmN0aW9uIExiKCl7aWYoQS5Qcm9taXNlJiZBLlByb21pc2UucmVzb2x2ZSl7dmFyIGE9QS5Qcm9taXNlLnJlc29sdmUodm9pZCAwKTtJYj1mdW5jdGlvbigpe2EudGhlbihNYil9fWVsc2UgSWI9ZnVuY3Rpb24oKXt2YXIgYj1NYjtcImZ1bmN0aW9uXCIhPT10eXBlb2YgQS5zZXRJbW1lZGlhdGV8fEEuV2luZG93JiZBLldpbmRvdy5wcm90b3R5cGUmJihYYSYmSyYmMDxLLmJyYW5kcy5sZW5ndGh8fC0xPT0kYSgpLmluZGV4T2YoXCJFZGdlXCIpKSYmQS5XaW5kb3cucHJvdG90eXBlLnNldEltbWVkaWF0ZT09QS5zZXRJbW1lZGlhdGU/KEFifHwoQWI9QmIoKSksQWIoYikpOkEuc2V0SW1tZWRpYXRlKGIpfX1cbmZ1bmN0aW9uIE1iKCl7Zm9yKHZhciBhO2E9RmIoKTspe3RyeXthLmguY2FsbChhLmcpfWNhdGNoKGIpe0NiKGIpfXpiKEViLGEpfUpiPSExfTtmdW5jdGlvbiBOYihhKXtpZighYSlyZXR1cm4hMTt0cnl7cmV0dXJuISFhLiRnb29nX1RoZW5hYmxlfWNhdGNoKGIpe3JldHVybiExfX07ZnVuY3Rpb24gUihhKXt0aGlzLmc9MDt0aGlzLm89dm9pZCAwO3RoaXMuaj10aGlzLmg9dGhpcy5pPW51bGw7dGhpcy5sPXRoaXMubT0hMTtpZihhIT1UYSl0cnl7dmFyIGI9dGhpczthLmNhbGwodm9pZCAwLGZ1bmN0aW9uKGMpe1MoYiwyLGMpfSxmdW5jdGlvbihjKXtTKGIsMyxjKX0pfWNhdGNoKGMpe1ModGhpcywzLGMpfX1mdW5jdGlvbiBPYigpe3RoaXMubmV4dD10aGlzLmk9dGhpcy5oPXRoaXMuaj10aGlzLmc9bnVsbDt0aGlzLmw9ITF9T2IucHJvdG90eXBlLnJlc2V0PWZ1bmN0aW9uKCl7dGhpcy5pPXRoaXMuaD10aGlzLmo9dGhpcy5nPW51bGw7dGhpcy5sPSExfTt2YXIgUGI9bmV3IHliKGZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBPYn0sZnVuY3Rpb24oYSl7YS5yZXNldCgpfSk7ZnVuY3Rpb24gUWIoYSxiLGMpe3ZhciBkPVBiLmdldCgpO2Quaj1hO2QuaD1iO2QuaT1jO3JldHVybiBkfVxuUi5wcm90b3R5cGUudGhlbj1mdW5jdGlvbihhLGIsYyl7cmV0dXJuIFJiKHRoaXMsXCJmdW5jdGlvblwiPT09dHlwZW9mIGE/YTpudWxsLFwiZnVuY3Rpb25cIj09PXR5cGVvZiBiP2I6bnVsbCxjKX07Ui5wcm90b3R5cGUuJGdvb2dfVGhlbmFibGU9ITA7Ui5wcm90b3R5cGUuY2FuY2VsPWZ1bmN0aW9uKGEpe2lmKDA9PXRoaXMuZyl7dmFyIGI9bmV3IFQoYSk7S2IoZnVuY3Rpb24oKXtTYih0aGlzLGIpfSx0aGlzKX19O2Z1bmN0aW9uIFNiKGEsYil7aWYoMD09YS5nKWlmKGEuaSl7dmFyIGM9YS5pO2lmKGMuaCl7Zm9yKHZhciBkPTAsZT1udWxsLGg9bnVsbCxmPWMuaDtmJiYoZi5sfHwoZCsrLGYuZz09YSYmKGU9ZiksIShlJiYxPGQpKSk7Zj1mLm5leHQpZXx8KGg9Zik7ZSYmKDA9PWMuZyYmMT09ZD9TYihjLGIpOihoPyhkPWgsZC5uZXh0PT1jLmomJihjLmo9ZCksZC5uZXh0PWQubmV4dC5uZXh0KTpUYihjKSxVYihjLGUsMyxiKSkpfWEuaT1udWxsfWVsc2UgUyhhLDMsYil9XG5mdW5jdGlvbiBWYihhLGIpe2EuaHx8MiE9YS5nJiYzIT1hLmd8fFdiKGEpO2Euaj9hLmoubmV4dD1iOmEuaD1iO2Euaj1ifWZ1bmN0aW9uIFJiKGEsYixjLGQpe3ZhciBlPVFiKG51bGwsbnVsbCxudWxsKTtlLmc9bmV3IFIoZnVuY3Rpb24oaCxmKXtlLmo9Yj9mdW5jdGlvbihnKXt0cnl7dmFyIGs9Yi5jYWxsKGQsZyk7aChrKX1jYXRjaChtKXtmKG0pfX06aDtlLmg9Yz9mdW5jdGlvbihnKXt0cnl7dmFyIGs9Yy5jYWxsKGQsZyk7dm9pZCAwPT09ayYmZyBpbnN0YW5jZW9mIFQ/ZihnKTpoKGspfWNhdGNoKG0pe2YobSl9fTpmfSk7ZS5nLmk9YTtWYihhLGUpO3JldHVybiBlLmd9Ui5wcm90b3R5cGUuQT1mdW5jdGlvbihhKXt0aGlzLmc9MDtTKHRoaXMsMixhKX07Ui5wcm90b3R5cGUuQj1mdW5jdGlvbihhKXt0aGlzLmc9MDtTKHRoaXMsMyxhKX07XG5mdW5jdGlvbiBTKGEsYixjKXtpZigwPT1hLmcpe2E9PT1jJiYoYj0zLGM9bmV3IFR5cGVFcnJvcihcIlByb21pc2UgY2Fubm90IHJlc29sdmUgdG8gaXRzZWxmXCIpKTthLmc9MTthOnt2YXIgZD1jLGU9YS5BLGg9YS5CO2lmKGQgaW5zdGFuY2VvZiBSKXtWYihkLFFiKGV8fFRhLGh8fG51bGwsYSkpO3ZhciBmPSEwfWVsc2UgaWYoTmIoZCkpZC50aGVuKGUsaCxhKSxmPSEwO2Vsc2V7aWYod2EoZCkpdHJ5e3ZhciBnPWQudGhlbjtpZihcImZ1bmN0aW9uXCI9PT10eXBlb2YgZyl7WGIoZCxnLGUsaCxhKTtmPSEwO2JyZWFrIGF9fWNhdGNoKGspe2guY2FsbChhLGspO2Y9ITA7YnJlYWsgYX1mPSExfX1mfHwoYS5vPWMsYS5nPWIsYS5pPW51bGwsV2IoYSksMyE9Ynx8YyBpbnN0YW5jZW9mIFR8fFliKGEsYykpfX1cbmZ1bmN0aW9uIFhiKGEsYixjLGQsZSl7ZnVuY3Rpb24gaChrKXtnfHwoZz0hMCxkLmNhbGwoZSxrKSl9ZnVuY3Rpb24gZihrKXtnfHwoZz0hMCxjLmNhbGwoZSxrKSl9dmFyIGc9ITE7dHJ5e2IuY2FsbChhLGYsaCl9Y2F0Y2goayl7aChrKX19ZnVuY3Rpb24gV2IoYSl7YS5tfHwoYS5tPSEwLEtiKGEudSxhKSl9ZnVuY3Rpb24gVGIoYSl7dmFyIGI9bnVsbDthLmgmJihiPWEuaCxhLmg9Yi5uZXh0LGIubmV4dD1udWxsKTthLmh8fChhLmo9bnVsbCk7cmV0dXJuIGJ9Ui5wcm90b3R5cGUudT1mdW5jdGlvbigpe2Zvcih2YXIgYTthPVRiKHRoaXMpOylVYih0aGlzLGEsdGhpcy5nLHRoaXMubyk7dGhpcy5tPSExfTtcbmZ1bmN0aW9uIFViKGEsYixjLGQpe2lmKDM9PWMmJmIuaCYmIWIubClmb3IoO2EmJmEubDthPWEuaSlhLmw9ITE7aWYoYi5nKWIuZy5pPW51bGwsWmIoYixjLGQpO2Vsc2UgdHJ5e2IubD9iLmouY2FsbChiLmkpOlpiKGIsYyxkKX1jYXRjaChlKXskYi5jYWxsKG51bGwsZSl9emIoUGIsYil9ZnVuY3Rpb24gWmIoYSxiLGMpezI9PWI/YS5qLmNhbGwoYS5pLGMpOmEuaCYmYS5oLmNhbGwoYS5pLGMpfWZ1bmN0aW9uIFliKGEsYil7YS5sPSEwO0tiKGZ1bmN0aW9uKCl7YS5sJiYkYi5jYWxsKG51bGwsYil9KX12YXIgJGI9Q2I7ZnVuY3Rpb24gVChhKXtGLmNhbGwodGhpcyxhKX1FKFQsRik7VC5wcm90b3R5cGUubmFtZT1cImNhbmNlbFwiOy8qXG5cbiBDb3B5cmlnaHQgMjAwNSwgMjAwNyBCb2IgSXBwb2xpdG8uIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gQ29weXJpZ2h0IFRoZSBDbG9zdXJlIExpYnJhcnkgQXV0aG9ycy5cbiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlUXG4qL1xuZnVuY3Rpb24gVShhLGIpe3RoaXMubD1bXTt0aGlzLkQ9YTt0aGlzLkM9Ynx8bnVsbDt0aGlzLmo9dGhpcy5pPSExO3RoaXMuaD12b2lkIDA7dGhpcy5BPXRoaXMuRz10aGlzLm89ITE7dGhpcy5tPTA7dGhpcy5nPW51bGw7dGhpcy51PTB9RShVLHhiKTtVLnByb3RvdHlwZS5jYW5jZWw9ZnVuY3Rpb24oYSl7aWYodGhpcy5pKXRoaXMuaCBpbnN0YW5jZW9mIFUmJnRoaXMuaC5jYW5jZWwoKTtlbHNle2lmKHRoaXMuZyl7dmFyIGI9dGhpcy5nO2RlbGV0ZSB0aGlzLmc7YT9iLmNhbmNlbChhKTooYi51LS0sMD49Yi51JiZiLmNhbmNlbCgpKX10aGlzLkQ/dGhpcy5ELmNhbGwodGhpcy5DLHRoaXMpOnRoaXMuQT0hMDt0aGlzLml8fChhPW5ldyBWKHRoaXMpLGFjKHRoaXMpLFcodGhpcywhMSxhKSl9fTtVLnByb3RvdHlwZS5CPWZ1bmN0aW9uKGEsYil7dGhpcy5vPSExO1codGhpcyxhLGIpfTtmdW5jdGlvbiBXKGEsYixjKXthLmk9ITA7YS5oPWM7YS5qPSFiO2JjKGEpfVxuZnVuY3Rpb24gYWMoYSl7aWYoYS5pKXtpZighYS5BKXRocm93IG5ldyBjYyhhKTthLkE9ITF9fWZ1bmN0aW9uIGRjKGEsYixjLGQpe2EubC5wdXNoKFtiLGMsZF0pO2EuaSYmYmMoYSl9VS5wcm90b3R5cGUudGhlbj1mdW5jdGlvbihhLGIsYyl7dmFyIGQsZSxoPW5ldyBSKGZ1bmN0aW9uKGYsZyl7ZT1mO2Q9Z30pO2RjKHRoaXMsZSxmdW5jdGlvbihmKXtmIGluc3RhbmNlb2YgVj9oLmNhbmNlbCgpOmQoZik7cmV0dXJuIGVjfSx0aGlzKTtyZXR1cm4gaC50aGVuKGEsYixjKX07VS5wcm90b3R5cGUuJGdvb2dfVGhlbmFibGU9ITA7ZnVuY3Rpb24gZmMoYSl7cmV0dXJuIFNhKGEubCxmdW5jdGlvbihiKXtyZXR1cm5cImZ1bmN0aW9uXCI9PT10eXBlb2YgYlsxXX0pfXZhciBlYz17fTtcbmZ1bmN0aW9uIGJjKGEpe2lmKGEubSYmYS5pJiZmYyhhKSl7dmFyIGI9YS5tLGM9Z2NbYl07YyYmKEEuY2xlYXJUaW1lb3V0KGMuZyksZGVsZXRlIGdjW2JdKTthLm09MH1hLmcmJihhLmcudS0tLGRlbGV0ZSBhLmcpO2I9YS5oO2Zvcih2YXIgZD1jPSExO2EubC5sZW5ndGgmJiFhLm87KXt2YXIgZT1hLmwuc2hpZnQoKSxoPWVbMF0sZj1lWzFdO2U9ZVsyXTtpZihoPWEuaj9mOmgpdHJ5e3ZhciBnPWguY2FsbChlfHxhLkMsYik7Zz09PWVjJiYoZz12b2lkIDApO3ZvaWQgMCE9PWcmJihhLmo9YS5qJiYoZz09Ynx8ZyBpbnN0YW5jZW9mIEVycm9yKSxhLmg9Yj1nKTtpZihOYihiKXx8XCJmdW5jdGlvblwiPT09dHlwZW9mIEEuUHJvbWlzZSYmYiBpbnN0YW5jZW9mIEEuUHJvbWlzZSlkPSEwLGEubz0hMH1jYXRjaChrKXtiPWssYS5qPSEwLGZjKGEpfHwoYz0hMCl9fWEuaD1iO2QmJihnPUMoYS5CLGEsITApLGQ9QyhhLkIsYSwhMSksYiBpbnN0YW5jZW9mIFU/KGRjKGIsZyxkKSxiLkc9ITApOlxuYi50aGVuKGcsZCkpO2MmJihiPW5ldyBoYyhiKSxnY1tiLmddPWIsYS5tPWIuZyl9ZnVuY3Rpb24gY2MoKXtGLmNhbGwodGhpcyl9RShjYyxGKTtjYy5wcm90b3R5cGUubWVzc2FnZT1cIkRlZmVycmVkIGhhcyBhbHJlYWR5IGZpcmVkXCI7Y2MucHJvdG90eXBlLm5hbWU9XCJBbHJlYWR5Q2FsbGVkRXJyb3JcIjtmdW5jdGlvbiBWKCl7Ri5jYWxsKHRoaXMpfUUoVixGKTtWLnByb3RvdHlwZS5tZXNzYWdlPVwiRGVmZXJyZWQgd2FzIGNhbmNlbGVkXCI7Vi5wcm90b3R5cGUubmFtZT1cIkNhbmNlbGVkRXJyb3JcIjtmdW5jdGlvbiBoYyhhKXt0aGlzLmc9QS5zZXRUaW1lb3V0KEModGhpcy5pLHRoaXMpLDApO3RoaXMuaD1hfWhjLnByb3RvdHlwZS5pPWZ1bmN0aW9uKCl7ZGVsZXRlIGdjW3RoaXMuZ107dGhyb3cgdGhpcy5oO307dmFyIGdjPXt9O2Z1bmN0aW9uIGljKGEpe3ZhciBiO3JldHVybihiPShhfHxkb2N1bWVudCkuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCJIRUFEXCIpKSYmMCE9PWIubGVuZ3RoP2JbMF06YS5kb2N1bWVudEVsZW1lbnR9ZnVuY3Rpb24gamMoKXtpZih0aGlzJiZ0aGlzLkwpe3ZhciBhPXRoaXMuTDthJiZcIlNDUklQVFwiPT1hLnRhZ05hbWUmJmtjKGEsITAsdGhpcy5NKX19ZnVuY3Rpb24ga2MoYSxiLGMpe251bGwhPWMmJkEuY2xlYXJUaW1lb3V0KGMpO2Eub25sb2FkPWZ1bmN0aW9uKCl7fTthLm9uZXJyb3I9ZnVuY3Rpb24oKXt9O2Eub25yZWFkeXN0YXRlY2hhbmdlPWZ1bmN0aW9uKCl7fTtiJiZ3aW5kb3cuc2V0VGltZW91dChmdW5jdGlvbigpe2EmJmEucGFyZW50Tm9kZSYmYS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGEpfSwwKX1mdW5jdGlvbiBsYyhhLGIpe3ZhciBjPVwiSnNsb2FkZXIgZXJyb3IgKGNvZGUgI1wiK2ErXCIpXCI7YiYmKGMrPVwiOiBcIitiKTtGLmNhbGwodGhpcyxjKTt0aGlzLmNvZGU9YX1cbkUobGMsRik7LypcblxuIENvcHlyaWdodCAyMDIxIEdvb2dsZSBMTENcbiBUaGlzIGNvZGUgaXMgcmVsZWFzZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlLlxuIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVRcbiovXG5mdW5jdGlvbiBtYyhhKXtyZXR1cm4gUWEoYS5mb3JtYXQsYS5SLGEuWHx8e30pfVxuZnVuY3Rpb24gbmMoYSl7dmFyIGI9e3RpbWVvdXQ6M0U0LGF0dHJpYnV0ZXM6e2FzeW5jOiExLGRlZmVyOiExfX0sYz1iLmRvY3VtZW50fHxkb2N1bWVudCxkPUthKGEpLnRvU3RyaW5nKCksZT12YigobmV3IHdiKGMpKS5nLFwiU0NSSVBUXCIpLGg9e0w6ZSxNOnZvaWQgMH0sZj1uZXcgVShqYyxoKSxnPW51bGwsaz1udWxsIT1iLnRpbWVvdXQ/Yi50aW1lb3V0OjVFMzswPGsmJihnPXdpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7a2MoZSwhMCk7dmFyIG09bmV3IGxjKDEsXCJUaW1lb3V0IHJlYWNoZWQgZm9yIGxvYWRpbmcgc2NyaXB0IFwiK2QpO2FjKGYpO1coZiwhMSxtKX0sayksaC5NPWcpO2Uub25sb2FkPWUub25yZWFkeXN0YXRlY2hhbmdlPWZ1bmN0aW9uKCl7ZS5yZWFkeVN0YXRlJiZcImxvYWRlZFwiIT1lLnJlYWR5U3RhdGUmJlwiY29tcGxldGVcIiE9ZS5yZWFkeVN0YXRlfHwoa2MoZSxiLlZ8fCExLGcpLGFjKGYpLFcoZiwhMCxudWxsKSl9O2Uub25lcnJvcj1mdW5jdGlvbigpe2tjKGUsXG4hMCxnKTt2YXIgbT1uZXcgbGMoMCxcIkVycm9yIHdoaWxlIGxvYWRpbmcgc2NyaXB0IFwiK2QpO2FjKGYpO1coZiwhMSxtKX07aD1iLmF0dHJpYnV0ZXN8fHt9O1dhKGgse3R5cGU6XCJ0ZXh0L2phdmFzY3JpcHRcIixjaGFyc2V0OlwiVVRGLThcIn0pO3RiKGUsaCk7YmIoZSxhKTtpYyhjKS5hcHBlbmRDaGlsZChlKTtyZXR1cm4gZn1mdW5jdGlvbiBvYyhhLGIsYyl7Yz1jfHx7fTthPVFhKGEsYixjKTt2YXIgZD1uYyhhKTtyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24oZSl7ZGMoZCxlLG51bGwpfSl9Oy8qXG5cbiBDb3B5cmlnaHQgMjAyMSBHb29nbGUgTExDXG4gVGhpcyBjb2RlIGlzIHJlbGVhc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZS5cbiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlUXG5cbiovXG5mdW5jdGlvbiBwYygpe3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihhKXtcInVuZGVmaW5lZFwiPT09dHlwZW9mIHdpbmRvd3x8XCJjb21wbGV0ZVwiPT09ZG9jdW1lbnQucmVhZHlTdGF0ZT9hKCk6d2luZG93LmFkZEV2ZW50TGlzdGVuZXI/KGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJET01Db250ZW50TG9hZGVkXCIsYSwhMCksd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJsb2FkXCIsYSwhMCkpOndpbmRvdy5hdHRhY2hFdmVudD93aW5kb3cuYXR0YWNoRXZlbnQoXCJvbmxvYWRcIixhKTpcImZ1bmN0aW9uXCIhPT10eXBlb2Ygd2luZG93Lm9ubG9hZD93aW5kb3cub25sb2FkPWE6d2luZG93Lm9ubG9hZD1mdW5jdGlvbihiKXtpZih3aW5kb3cub25sb2FkKXdpbmRvdy5vbmxvYWQoYik7YSgpfX0pfTt2YXIgWD1cIlwiLFk9XCJcIixxYyxaLHJjPW51bGwsc2M7ZnVuY3Rpb24gdGMoYSl7dmFyIGI9YSxjLGQ9YS5tYXRjaCgvXnRlc3RpbmctLyk7ZCYmKGI9Yi5yZXBsYWNlKC9edGVzdGluZy0vLFwiXCIpKTthPWI7ZG97aWYoYj09PUhhW2JdKXRocm93IEVycm9yKFwiSW5maW5pdGUgbG9vcCBpbiB2ZXJzaW9uIG1hcHBpbmc6IFwiK2IpOyhjPUhhW2JdKSYmKGI9Yyl9d2hpbGUoYyk7Yz0oZD9cInRlc3RpbmctXCI6XCJcIikrYjthPVwicHJlLTQ1XCI9PWI/YTpjO3JldHVybnt2ZXJzaW9uOmEsUzpjfX1cbmZ1bmN0aW9uIHVjKGEpe3ZhciBiPURhW3NjXS5sb2FkZXIsYz10YyhhKTtyZXR1cm4gb2MoYix7dmVyc2lvbjpjLlN9KS50aGVuKGZ1bmN0aW9uKCl7dmFyIGQ9QihcImdvb2dsZS5jaGFydHMubG9hZGVyLnZlcnNpb25TcGVjaWZpYy5sb2FkXCIpfHxCKFwiZ29vZ2xlLmNoYXJ0cy5sb2FkZXIuVmVyc2lvblNwZWNpZmljLmxvYWRcIil8fEIoXCJnb29nbGUuY2hhcnRzLmxvYWRlci5wdWJsaWNMb2FkXCIpfHxCKFwiZ29vZ2xlLmNoYXJ0cy52ZXJzaW9uU3BlY2lmaWMubG9hZFwiKTtpZighZCl0aHJvdyBFcnJvcihcIkJhZCB2ZXJzaW9uOiBcIithKTtyYz1mdW5jdGlvbihlKXtlPWQoYy52ZXJzaW9uLGUpO2lmKG51bGw9PWV8fG51bGw9PWUudGhlbil7dmFyIGg9QihcImdvb2dsZS5jaGFydHMubG9hZGVyLnB1YmxpY1NldE9uTG9hZENhbGxiYWNrXCIpfHxCKFwiZ29vZ2xlLmNoYXJ0cy52ZXJzaW9uU3BlY2lmaWMuc2V0T25Mb2FkQ2FsbGJhY2tcIik7ZT1uZXcgUHJvbWlzZShmdW5jdGlvbihmKXtoKGYpfSk7XG5lLnRoZW49aH1yZXR1cm4gZX19KX1mdW5jdGlvbiB2YyhhKXtcInN0cmluZ1wiPT09dHlwZW9mIGEmJihhPVthXSk7QXJyYXkuaXNBcnJheShhKSYmMCE9PWEubGVuZ3RofHwoYT1FYSk7dmFyIGI9W107YS5mb3JFYWNoKGZ1bmN0aW9uKGMpe2M9Yy50b0xvd2VyQ2FzZSgpO2I9Yi5jb25jYXQoYy5zcGxpdCgvW1xccyxdK1xccyovKSl9KTtyZXR1cm4gYn1mdW5jdGlvbiB3YyhhKXthPWF8fFwiXCI7Zm9yKHZhciBiPWEucmVwbGFjZSgvLS9nLFwiX1wiKS50b0xvd2VyQ2FzZSgpO1wic3RyaW5nXCI9PT10eXBlb2YgYjspYT1iLGI9R2FbYl0sYj09PWEmJihiPSExKTtifHwoYS5tYXRjaCgvX1teX10rJC8pPyhhPWEucmVwbGFjZSgvX1teX10rJC8sXCJcIiksYT13YyhhKSk6YT1cImVuXCIpO3JldHVybiBhfVxuZnVuY3Rpb24geGMoYSl7YT1hfHxcIlwiO1wiXCIhPT1YJiZYIT09YSYmKGNvbnNvbGUud2FybihcIiBBdHRlbXB0aW5nIHRvIGxvYWQgdmVyc2lvbiAnXCIrYStcIicgb2YgR29vZ2xlIENoYXJ0cywgYnV0IHRoZSBwcmV2aW91c2x5IGxvYWRlZCAnXCIrKFgrXCInIHdpbGwgYmUgdXNlZCBpbnN0ZWFkLlwiKSksYT1YKTtyZXR1cm4gWD1hfHxcIlwifWZ1bmN0aW9uIHljKGEpe2E9YXx8XCJcIjtcIlwiIT09WSYmWSE9PWEmJihjb25zb2xlLndhcm4oXCIgQXR0ZW1wdGluZyB0byBsb2FkIEdvb2dsZSBDaGFydHMgZm9yIGxhbmd1YWdlICdcIithK1wiJywgYnV0IHRoZSBwcmV2aW91c2x5IGxvYWRlZCAnXCIrKFkrXCInIHdpbGwgYmUgdXNlZCBpbnN0ZWFkLlwiKSksYT1ZKTtcImVuXCI9PT1hJiYoYT1cIlwiKTtyZXR1cm4gWT1hfHxcIlwifWZ1bmN0aW9uIHpjKGEpe3ZhciBiPXt9LGM7Zm9yKGMgaW4gYSliW2NdPWFbY107cmV0dXJuIGJ9XG5mdW5jdGlvbiBBYyhhLGIpe2I9emMoYik7Yi5kb21haW49c2M7Yi5jYWxsYmFjaz1CYyhiLmNhbGxiYWNrKTthPXhjKGEpO3ZhciBjPWIubGFuZ3VhZ2U7Yz15Yyh3YyhjKSk7Yi5sYW5ndWFnZT1jO2lmKCFxYyl7aWYoYi5lbmFibGVVcmxTZXR0aW5ncyYmd2luZG93LlVSTFNlYXJjaFBhcmFtcyl0cnl7YT0obmV3IFVSTFNlYXJjaFBhcmFtcyh0b3AubG9jYXRpb24uc2VhcmNoKSkuZ2V0KFwiY2hhcnRzLXZlcnNpb25cIil8fGF9Y2F0Y2goZCl7Y29uc29sZS5pbmZvKFwiRmFpbGVkIHRvIGdldCBjaGFydHMtdmVyc2lvbiBmcm9tIHRvcCBVUkxcIixkKX1xYz11YyhhKX1iLnBhY2thZ2VzPXZjKGIucGFja2FnZXMpO3JldHVybiBaPXFjLnRoZW4oZnVuY3Rpb24oKXtyZXR1cm4gcmMoYil9KX1cbmZ1bmN0aW9uIENjKGEpe2lmKCFaKXRocm93IEVycm9yKFwiTXVzdCBjYWxsIGdvb2dsZS5jaGFydHMubG9hZCBiZWZvcmUgZ29vZ2xlLmNoYXJ0cy5zZXRPbkxvYWRDYWxsYmFja1wiKTtyZXR1cm4gYT9aLnRoZW4oYSk6Wn1EKFwiZ29vZ2xlLmNoYXJ0cy5zYWZlTG9hZFwiLGZ1bmN0aW9uKGEpe3JldHVybiBEYyhPYmplY3QuYXNzaWduKHt9LGEse3NhZmVNb2RlOiEwfSkpfSk7ZnVuY3Rpb24gRGMoKXt2YXIgYT1sYS5hcHBseSgwLGFyZ3VtZW50cyksYj0wO1widmlzdWFsaXphdGlvblwiPT09YVtiXSYmYisrO3ZhciBjPVwiY3VycmVudFwiO2lmKFwic3RyaW5nXCI9PT10eXBlb2YgYVtiXXx8XCJudW1iZXJcIj09PXR5cGVvZiBhW2JdKWM9U3RyaW5nKGFbYl0pLGIrKzt2YXIgZD17fTt3YShhW2JdKSYmKGQ9YVtiXSk7cmV0dXJuIEFjKGMsZCl9RChcImdvb2dsZS5jaGFydHMubG9hZFwiLERjKTtEKFwiZ29vZ2xlLmNoYXJ0cy5zZXRPbkxvYWRDYWxsYmFja1wiLENjKTtcbnZhciBFYz1JKFwiaHR0cHM6Ly9tYXBzLmdvb2dsZWFwaXMuY29tL21hcHMvYXBpL2pzP2pzYXBpUmVkaXJlY3Q9dHJ1ZVwiKSxGYz1JKFwiaHR0cHM6Ly9tYXBzLWFwaS1zc2wuZ29vZ2xlLmNvbS9tYXBzP2pzYXBpUmVkaXJlY3Q9dHJ1ZSZmaWxlPWdvb2dsZWFwaVwiKTtcbmZ1bmN0aW9uIEdjKGEsYixjKXtjb25zb2xlLndhcm4oXCJMb2FkaW5nIE1hcHMgQVBJIHdpdGggdGhlIGpzYXBpIGxvYWRlciBpcyBkZXByZWNhdGVkLlwiKTtjPWN8fHt9O2E9Yy5rZXl8fGMuY2xpZW50O3ZhciBkPWMubGlicmFyaWVzLGU9ZnVuY3Rpb24oZyl7Zm9yKHZhciBrPXt9LG09MDttPGcubGVuZ3RoO20rKyl7dmFyIG49Z1ttXTtrW25bMF1dPW5bMV19cmV0dXJuIGt9KGMub3RoZXJfcGFyYW1zP2Mub3RoZXJfcGFyYW1zLnNwbGl0KFwiJlwiKS5tYXAoZnVuY3Rpb24oZyl7cmV0dXJuIGcuc3BsaXQoXCI9XCIpfSk6W10pLGg9T2JqZWN0LmFzc2lnbih7fSx7a2V5OmEsVzpkfSxlKSxmPVwiMlwiPT09Yj9GYzpFYztaPW5ldyBQcm9taXNlKGZ1bmN0aW9uKGcpe3ZhciBrPUJjKGMmJmMuY2FsbGJhY2spO29jKGYse30saCkudGhlbihrKS50aGVuKGcpfSl9dmFyIEhjPUkoXCJodHRwczovL3d3dy5nc3RhdGljLmNvbS9pbnB1dHRvb2xzL2pzL2l0YS9pbnB1dHRvb2xzXzMuanNcIik7XG5mdW5jdGlvbiBJYyhhLGIsYyl7d2EoYykmJmMucGFja2FnZXM/KEFycmF5LmlzQXJyYXkoYy5wYWNrYWdlcyk/Yy5wYWNrYWdlczpbYy5wYWNrYWdlc10pLmluY2x1ZGVzKFwiaW5wdXR0b29sc1wiKT8oY29uc29sZS53YXJuKCdMb2FkaW5nIFwiZWxlbWVudHNcIiB3aXRoIHRoZSBqc2FwaSBsb2FkZXIgaXMgZGVwcmVjYXRlZC5cXG5QbGVhc2UgbG9hZCAnKyhIYytcIiBkaXJlY3RseS5cIikpLFo9bmV3IFByb21pc2UoZnVuY3Rpb24oZCl7dmFyIGU9QmMoYyYmYy5jYWxsYmFjayk7b2MoSGMse30se30pLnRoZW4oZSkudGhlbihkKX0pKTpjb25zb2xlLmVycm9yKCdMb2FkaW5nIFwiZWxlbWVudHNcIiBvdGhlciB0aGFuIFwiaW5wdXR0b29sc1wiIGlzIHVuc3VwcG9ydGVkLicpOmNvbnNvbGUuZXJyb3IoXCJnb29nbGUubG9hZCBvZiBlbGVtZW50cyB3YXMgaW52b2tlZCB3aXRob3V0IHNwZWNpZnlpbmcgcGFja2FnZXNcIil9dmFyIEpjPUkoXCJodHRwczovL2FqYXguZ29vZ2xlYXBpcy5jb20vYWpheC9saWJzLyV7bW9kdWxlfS8le3ZlcnNpb259LyV7ZmlsZX1cIik7XG5mdW5jdGlvbiBLYyhhLGIpe3ZhciBjO2Rve2lmKGE9PT1iW2FdKXRocm93IEVycm9yKFwiSW5maW5pdGUgbG9vcCBpbiB2ZXJzaW9uIG1hcHBpbmcgZm9yIHZlcnNpb24gXCIrYSk7KGM9YlthXSkmJihhPWMpfXdoaWxlKGMpO3JldHVybiBhfVxuZnVuY3Rpb24gTGMoYSxiLGMpe3ZhciBkPUZhW2FdO2lmKGQpe2I9S2MoYixkLmFsaWFzZXMpO2Q9ZC52ZXJzaW9uc1tiXTtpZighZCl0aHJvdyBFcnJvcihcIlVua25vd24gdmVyc2lvbiwgXCIrYitcIiwgb2YgXCIrYStcIi5cIik7dmFyIGU9e21vZHVsZTphLHZlcnNpb246Ynx8XCJcIixmaWxlOmQuY29tcHJlc3NlZH07Yj1LYShtYyh7Zm9ybWF0OkpjLFI6ZX0pKS50b1N0cmluZygpO2NvbnNvbGUud2FybihcIkxvYWRpbmcgbW9kdWxlcyB3aXRoIHRoZSBqc2FwaSBsb2FkZXIgaXMgZGVwcmVjYXRlZC5cXG5QbGVhc2UgbG9hZCBcIisoYStcIiBkaXJlY3RseSBmcm9tIFwiK2IrXCIuXCIpKTtaPW5ldyBQcm9taXNlKGZ1bmN0aW9uKGgpe3ZhciBmPUJjKGMmJmMuY2FsbGJhY2spO29jKEpjLGUpLnRoZW4oZikudGhlbihoKX0pfWVsc2Ugc2V0VGltZW91dChmdW5jdGlvbigpe3Rocm93IEVycm9yKCdNb2R1bGUgXCInK2ErJ1wiIGlzIG5vdCBzdXBwb3J0ZWQuJyk7fSwwKX1cbmZ1bmN0aW9uIEJjKGEpe3JldHVybiBmdW5jdGlvbigpe2lmKFwiZnVuY3Rpb25cIj09PXR5cGVvZiBhKWEoKTtlbHNlIGlmKFwic3RyaW5nXCI9PT10eXBlb2YgYSYmXCJcIiE9PWEpdHJ5e3ZhciBiPUIoYSk7aWYoXCJmdW5jdGlvblwiIT09dHlwZW9mIGIpdGhyb3cgRXJyb3IoXCJUeXBlIG9mICdcIithK1wiJyBpcyBcIit0eXBlb2YgYitcIi5cIik7YigpfWNhdGNoKGMpe3Rocm93IEVycm9yKFwiQ2FsbGJhY2sgb2YgXCIrYStcIiBmYWlsZWQgd2l0aDogXCIrYyk7fX19ZnVuY3Rpb24gTWMoKXt2YXIgYT1sYS5hcHBseSgwLGFyZ3VtZW50cyk7c3dpdGNoKGFbMF0pe2Nhc2UgXCJtYXBzXCI6R2MuYXBwbHkobnVsbCxlYShhKSk7YnJlYWs7Y2FzZSBcImVsZW1lbnRzXCI6SWMuYXBwbHkobnVsbCxlYShhKSk7YnJlYWs7Y2FzZSBcInZpc3VhbGl6YXRpb25cIjpEYy5hcHBseShudWxsLGVhKGEpKTticmVhaztkZWZhdWx0OkxjLmFwcGx5KG51bGwsZWEoYSkpfX1EKFwiZ29vZ2xlLmxvYWRlci5Mb2FkRmFpbHVyZVwiLCExKTtcbmlmKHNjKWNvbnNvbGUud2FybihcIkdvb2dsZSBDaGFydHMgbG9hZGVyLmpzIHNob3VsZCBvbmx5IGJlIGxvYWRlZCBvbmNlLlwiKTtlbHNle1k9WD1cIlwiO3JjPVo9cWM9bnVsbDtCKFwiZ29vZ2xlLmxvYWRcIil8fChEKFwiZ29vZ2xlLmxvYWRcIixNYyksRChcImdvb2dsZS5zZXRPbkxvYWRDYWxsYmFja1wiLENjKSk7dmFyIE5jPWRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKFwic2NyaXB0XCIpLE9jPShkb2N1bWVudC5jdXJyZW50U2NyaXB0fHxOY1tOYy5sZW5ndGgtMV0pLmdldEF0dHJpYnV0ZShcInNyY1wiKSxQYz1uZXcgTChPYyksUWM9UGMuZztzYz1RYz1RYy5tYXRjaCgvXnd3d1xcLmdzdGF0aWNcXC5jbi8pP1wiZ3N0YXRpYy5jblwiOlwiZ3N0YXRpYy5jb21cIjt2YXIgUmM9bmV3IE4oUGMuaS50b1N0cmluZygpKSxTYz1SYy5nZXQoXCJjYWxsYmFja1wiKTtpZihcInN0cmluZ1wiPT09dHlwZW9mIFNjKXt2YXIgVGM9QmMoU2MpO3BjKCkudGhlbihUYyl9dmFyIFVjPVJjLmdldChcImF1dG9sb2FkXCIpO2lmKFwic3RyaW5nXCI9PT1cbnR5cGVvZiBVYyl0cnl7aWYoXCJcIiE9PVVjKWZvcih2YXIgVmM9SlNPTi5wYXJzZShVYykubW9kdWxlcyxXYz0wO1djPFZjLmxlbmd0aDtXYysrKXt2YXIgWGM9VmNbV2NdO01jKFhjLm5hbWUsWGMudmVyc2lvbixYYyl9fWNhdGNoKGEpe3Rocm93IEVycm9yKFwiQXV0b2xvYWQgZmFpbGVkIHdpdGg6IFwiK2EpO319O30pLmNhbGwodGhpcyk7XG4ifSwgImhlYWRlcnNTaXplIjogMCwgImJvZHlTaXplIjogMTkwODcsICJyZWRpcmVjdFVSTCI6ICIiLCAiX3RyYW5zZmVyU2l6ZSI6IDE5MDg3fSwgImNhY2hlIjoge30sICJ0aW1pbmdzIjogeyJkbnMiOiA0Mi45MzYsICJjb25uZWN0IjogNDMuNzk1LCAic3NsIjogMjguMTA2LCAic2VuZCI6IDAsICJ3YWl0IjogMTcuMzMzLCAicmVjZWl2ZSI6IDE5LjA4OH0sICJwYWdlcmVmIjogInBhZ2VAOGM5MzJmODMzN2Q5YWJiNGI5YWI5ODg5ZGVjNTFiOTkiLCAic2VydmVySVBBZGRyZXNzIjogIlsyYTAwOjE0NTA6NDAwMTo4MGU6OjIwMDNdIiwgIl9zZXJ2ZXJQb3J0IjogNDQzLCAiX3NlY3VyaXR5RGV0YWlscyI6IHsicHJvdG9jb2wiOiAiVExTIDEuMyIsICJzdWJqZWN0TmFtZSI6ICIqLmdzdGF0aWMuY29tIiwgImlzc3VlciI6ICJXUjIiLCAidmFsaWRGcm9tIjogMTcyMzQ0NzA3OCwgInZhbGlkVG8iOiAxNzMwNzA0Njc3fX0sIHsic3RhcnRlZERhdGVUaW1lIjogIjIwMjQtMDktMDVUMTE6MDc6MjAuMjkzWiIsICJ0aW1lIjogMzM4Ljg4NTk5OTk5OTk5OTk3LCAicmVxdWVzdCI6IHsibWV0aG9kIjogIkdFVCIsICJ1cmwiOiAiaHR0cHM6Ly9wb3J0YWwuc3VwcGx5Y2hhaW5jYW5hZGEuY29tL2NtczIvanMvYm9vdHN0cmFwLW1vZGFsLmpzIiwgImh0dHBWZXJzaW9uIjogIkhUVFAvMi4wIiwgImNvb2tpZXMiOiBbeyJuYW1lIjogIkpTRVNTSU9OSUQiLCAidmFsdWUiOiAiMjU3RDlEQzkyMDQ1MkE0RDkzM0I4QTNDREE5QjZCRDMifV0sICJoZWFkZXJzIjogW3sibmFtZSI6ICI6YXV0aG9yaXR5IiwgInZhbHVlIjogInBvcnRhbC5zdXBwbHljaGFpbmNhbmFkYS5jb20ifSwgeyJuYW1lIjogIjptZXRob2QiLCAidmFsdWUiOiAiR0VUIn0sIHsibmFtZSI6ICI6cGF0aCIsICJ2YWx1ZSI6ICIvY21zMi9qcy9ib290c3RyYXAtbW9kYWwuanMifSwgeyJuYW1lIjogIjpzY2hlbWUiLCAidmFsdWUiOiAiaHR0cHMifSwgeyJuYW1lIjogImFjY2VwdCIsICJ2YWx1ZSI6ICIqLyoifSwgeyJuYW1lIjogImFjY2VwdC1lbmNvZGluZyIsICJ2YWx1ZSI6ICJnemlwLCBkZWZsYXRlLCBiciwgenN0ZCJ9LCB7Im5hbWUiOiAiYWNjZXB0LWxhbmd1YWdlIiwgInZhbHVlIjogImVuLVVTIn0sIHsibmFtZSI6ICJjb29raWUiLCAidmFsdWUiOiAiSlNFU1NJT05JRD0yNTdEOURDOTIwNDUyQTREOTMzQjhBM0NEQTlCNkJEMyJ9LCB7Im5hbWUiOiAicHJpb3JpdHkiLCAidmFsdWUiOiAidT0xIn0sIHsibmFtZSI6ICJyZWZlcmVyIiwgInZhbHVlIjogImh0dHBzOi8vcG9ydGFsLnN1cHBseWNoYWluY2FuYWRhLmNvbS9lbi9wb3J0YWxsb2dpbiJ9LCB7Im5hbWUiOiAic2VjLWNoLXVhIiwgInZhbHVlIjogIlwiTm90O0E9QnJhbmRcIjt2PVwiMjRcIiwgXCJDaHJvbWl1bVwiO3Y9XCIxMjhcIiJ9LCB7Im5hbWUiOiAic2VjLWNoLXVhLW1vYmlsZSIsICJ2YWx1ZSI6ICI/MCJ9LCB7Im5hbWUiOiAic2VjLWNoLXVhLXBsYXRmb3JtIiwgInZhbHVlIjogIlwiV2luZG93c1wiIn0sIHsibmFtZSI6ICJzZWMtZmV0Y2gtZGVzdCIsICJ2YWx1ZSI6ICJzY3JpcHQifSwgeyJuYW1lIjogInNlYy1mZXRjaC1tb2RlIiwgInZhbHVlIjogIm5vLWNvcnMifSwgeyJuYW1lIjogInNlYy1mZXRjaC1zaXRlIiwgInZhbHVlIjogInNhbWUtb3JpZ2luIn0sIHsibmFtZSI6ICJ1c2VyLWFnZW50IiwgInZhbHVlIjogIk1vemlsbGEvNS4wIChXaW5kb3dzIE5UIDEwLjA7IFdpbjY0OyB4NjQpIEFwcGxlV2ViS2l0LzUzNy4zNiAoS0hUTUwsIGxpa2UgR2Vja28pIENocm9tZS8xMjguMC42NjEzLjE4IFNhZmFyaS81MzcuMzYifV0sICJxdWVyeVN0cmluZyI6IFtdLCAiaGVhZGVyc1NpemUiOiA2NzIsICJib2R5U2l6ZSI6IDB9LCAicmVzcG9uc2UiOiB7InN0YXR1cyI6IDIwMCwgInN0YXR1c1RleHQiOiAiIiwgImh0dHBWZXJzaW9uIjogIkhUVFAvMi4wIiwgImNvb2tpZXMiOiBbXSwgImhlYWRlcnMiOiBbeyJuYW1lIjogImNhY2hlLWNvbnRyb2wiLCAidmFsdWUiOiAibWF4LWFnZT0xNDQwMCJ9LCB7Im5hbWUiOiAiY2YtY2FjaGUtc3RhdHVzIiwgInZhbHVlIjogIk1JU1MifSwgeyJuYW1lIjogImNmLXJheSIsICJ2YWx1ZSI6ICI4YmU1YzE0YmU4Njg3MWM0LUZSQSJ9LCB7Im5hbWUiOiAiY29udGVudC1lbmNvZGluZyIsICJ2YWx1ZSI6ICJiciJ9LCB7Im5hbWUiOiAiY29udGVudC10eXBlIiwgInZhbHVlIjogImFwcGxpY2F0aW9uL2phdmFzY3JpcHQifSwgeyJuYW1lIjogImRhdGUiLCAidmFsdWUiOiAiVGh1LCAwNSBTZXAgMjAyNCAxMTowNzoyMCBHTVQifSwgeyJuYW1lIjogImV0YWciLCAidmFsdWUiOiAiVy9cIjg5NTYtMTY4MTMzMzQyMjAwMFwiIn0sIHsibmFtZSI6ICJsYXN0LW1vZGlmaWVkIiwgInZhbHVlIjogIldlZCwgMTIgQXByIDIwMjMgMjE6MDM6NDIgR01UIn0sIHsibmFtZSI6ICJuZWwiLCAidmFsdWUiOiAie1wic3VjY2Vzc19mcmFjdGlvblwiOjAsXCJyZXBvcnRfdG9cIjpcImNmLW5lbFwiLFwibWF4X2FnZVwiOjYwNDgwMH0ifSwgeyJuYW1lIjogInJlcG9ydC10byIsICJ2YWx1ZSI6ICJ7XCJlbmRwb2ludHNcIjpbe1widXJsXCI6XCJodHRwczpcXC9cXC9hLm5lbC5jbG91ZGZsYXJlLmNvbVxcL3JlcG9ydFxcL3Y0P3M9STNxd2Z4NVF4JTJGNkd3RlVsVkZQdmxBNTR2SkdWdUNYWHcxM29udmxwblc1eDclMkJ6Rk1mciUyRnhNbG9EV0FEa3NDRmdQazc2NWpmWkppR3NWd0pqNk9STnNUSE9la1d2Nnlrbk5JSjZjS2klMkJZOSUyRlUyakVhRG1CQkdYazFwZWZzME5CbiUyRlRjVDRqOGQ1NXkxTEJwQlc0MFVVaFVpYWhvZnJpNHV5ZyUzRFwifV0sXCJncm91cFwiOlwiY2YtbmVsXCIsXCJtYXhfYWdlXCI6NjA0ODAwfSJ9LCB7Im5hbWUiOiAic2VydmVyIiwgInZhbHVlIjogImNsb3VkZmxhcmUifSwgeyJuYW1lIjogInN0cmljdC10cmFuc3BvcnQtc2VjdXJpdHkiLCAidmFsdWUiOiAibWF4LWFnZT02MzA3MjAwMDsgaW5jbHVkZVN1YmRvbWFpbnM7IHByZWxvYWQifSwgeyJuYW1lIjogInZhcnkiLCAidmFsdWUiOiAiQWNjZXB0LUVuY29kaW5nIn1dLCAiY29udGVudCI6IHsic2l6ZSI6IDg5NTYsICJtaW1lVHlwZSI6ICJhcHBsaWNhdGlvbi9qYXZhc2NyaXB0IiwgImNvbXByZXNzaW9uIjogNjMzMCwgInRleHQiOiAiLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XHJcbiAqIGJvb3RzdHJhcC10cmFuc2l0aW9uLmpzIHYyLjMuMlxyXG4gKiBodHRwOi8vZ2V0Ym9vdHN0cmFwLmNvbS8yLjMuMi9qYXZhc2NyaXB0Lmh0bWwjdHJhbnNpdGlvbnNcclxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XHJcbiAqIENvcHlyaWdodCAyMDEzIFR3aXR0ZXIsIEluYy5cclxuICpcclxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcclxuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxyXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcclxuICpcclxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXHJcbiAqXHJcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcclxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxyXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cclxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxyXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cclxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqL1xyXG5cclxuXHJcbi8vIWZ1bmN0aW9uICgkKSB7XHJcblxyXG4gIFwidXNlIHN0cmljdFwiOyAvLyBqc2hpbnQgO187XHJcblxyXG5cclxuICAvKiBDU1MgVFJBTlNJVElPTiBTVVBQT1JUIChodHRwOi8vd3d3Lm1vZGVybml6ci5jb20vKVxyXG4gICAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi9cclxuXHJcbiAgJGpxbW9kYWwoZnVuY3Rpb24gKCkge1xyXG5cclxuICAgICRqcW1vZGFsLnN1cHBvcnQudHJhbnNpdGlvbiA9IChmdW5jdGlvbiAoKSB7XHJcblxyXG4gICAgICB2YXIgdHJhbnNpdGlvbkVuZCA9IChmdW5jdGlvbiAoKSB7XHJcblxyXG4gICAgICAgIHZhciBlbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2Jvb3RzdHJhcCcpXHJcbiAgICAgICAgICAsIHRyYW5zRW5kRXZlbnROYW1lcyA9IHtcclxuICAgICAgICAgICAgICAgJ1dlYmtpdFRyYW5zaXRpb24nIDogJ3dlYmtpdFRyYW5zaXRpb25FbmQnXHJcbiAgICAgICAgICAgICwgICdNb3pUcmFuc2l0aW9uJyAgICA6ICd0cmFuc2l0aW9uZW5kJ1xyXG4gICAgICAgICAgICAsICAnT1RyYW5zaXRpb24nICAgICAgOiAnb1RyYW5zaXRpb25FbmQgb3RyYW5zaXRpb25lbmQnXHJcbiAgICAgICAgICAgICwgICd0cmFuc2l0aW9uJyAgICAgICA6ICd0cmFuc2l0aW9uZW5kJ1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAsIG5hbWVcclxuXHJcbiAgICAgICAgZm9yIChuYW1lIGluIHRyYW5zRW5kRXZlbnROYW1lcyl7XHJcbiAgICAgICAgICBpZiAoZWwuc3R5bGVbbmFtZV0gIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICByZXR1cm4gdHJhbnNFbmRFdmVudE5hbWVzW25hbWVdXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgfSgpKVxyXG5cclxuICAgICAgcmV0dXJuIHRyYW5zaXRpb25FbmQgJiYge1xyXG4gICAgICAgIGVuZDogdHJhbnNpdGlvbkVuZFxyXG4gICAgICB9XHJcblxyXG4gICAgfSkoKVxyXG5cclxuICB9KTtcclxuXHJcbi8vfSh3aW5kb3cualF1ZXJ5KTtcclxuLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XHJcbiAqIGJvb3RzdHJhcC1tb2RhbC5qcyB2Mi4zLjJcclxuICogaHR0cDovL2dldGJvb3RzdHJhcC5jb20vMi4zLjIvamF2YXNjcmlwdC5odG1sI21vZGFsc1xyXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cclxuICogQ29weXJpZ2h0IDIwMTMgVHdpdHRlciwgSW5jLlxyXG4gKlxyXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xyXG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXHJcbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxyXG4gKlxyXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcclxuICpcclxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxyXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXHJcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxyXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXHJcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxyXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi9cclxuXHJcblxyXG4vLyFmdW5jdGlvbiAoJGpxbW9kYWwpIHtcclxuXHJcbiAgXCJ1c2Ugc3RyaWN0XCI7IC8vIGpzaGludCA7XztcclxuXHJcblxyXG4gLyogTU9EQUwgQ0xBU1MgREVGSU5JVElPTlxyXG4gICogPT09PT09PT09PT09PT09PT09PT09PSAqL1xyXG5cclxuICB2YXIgTW9kYWwgPSBmdW5jdGlvbiAoZWxlbWVudCwgb3B0aW9ucykge1xyXG4gICAgdGhpcy5vcHRpb25zID0gb3B0aW9uc1xyXG4gICAgdGhpcy4kZWxlbWVudCA9ICRqcW1vZGFsKGVsZW1lbnQpXHJcbiAgICAgIC5kZWxlZ2F0ZSgnW2RhdGEtZGlzbWlzcz1cIm1vZGFsXCJdJywgJ2NsaWNrLmRpc21pc3MubW9kYWwnLCAkanFtb2RhbC5wcm94eSh0aGlzLmhpZGUsIHRoaXMpKVxyXG4gICAgdGhpcy5vcHRpb25zLnJlbW90ZSAmJiB0aGlzLiRlbGVtZW50LmZpbmQoJy5tb2RhbC1ib2R5JykubG9hZCh0aGlzLm9wdGlvbnMucmVtb3RlKVxyXG4gIH1cclxuXHJcbiAgTW9kYWwucHJvdG90eXBlID0ge1xyXG5cclxuICAgICAgY29uc3RydWN0b3I6IE1vZGFsXHJcblxyXG4gICAgLCB0b2dnbGU6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICByZXR1cm4gdGhpc1shdGhpcy5pc1Nob3duID8gJ3Nob3cnIDogJ2hpZGUnXSgpXHJcbiAgICAgIH1cclxuXHJcbiAgICAsIHNob3c6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB2YXIgdGhhdCA9IHRoaXNcclxuICAgICAgICAgICwgZSA9ICRqcW1vZGFsLkV2ZW50KCdzaG93JylcclxuXHJcbiAgICAgICAgdGhpcy4kZWxlbWVudC50cmlnZ2VyKGUpXHJcblxyXG4gICAgICAgIGlmICh0aGlzLmlzU2hvd24gfHwgZS5pc0RlZmF1bHRQcmV2ZW50ZWQoKSkgcmV0dXJuXHJcblxyXG4gICAgICAgIHRoaXMuaXNTaG93biA9IHRydWVcclxuXHJcbiAgICAgICAgdGhpcy5lc2NhcGUoKVxyXG5cclxuICAgICAgICB0aGlzLmJhY2tkcm9wKGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgIHZhciB0cmFuc2l0aW9uID0gJGpxbW9kYWwuc3VwcG9ydC50cmFuc2l0aW9uICYmIHRoYXQuJGVsZW1lbnQuaGFzQ2xhc3MoJ2ZhZGUnKVxyXG5cclxuICAgICAgICAgIGlmICghdGhhdC4kZWxlbWVudC5wYXJlbnQoKS5sZW5ndGgpIHtcclxuICAgICAgICAgICAgdGhhdC4kZWxlbWVudC5hcHBlbmRUbyhkb2N1bWVudC5ib2R5KSAvL2Rvbid0IG1vdmUgbW9kYWxzIGRvbSBwb3NpdGlvblxyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIHRoYXQuJGVsZW1lbnQuc2hvdygpXHJcblxyXG4gICAgICAgICAgaWYgKHRyYW5zaXRpb24pIHtcclxuICAgICAgICAgICAgdGhhdC4kZWxlbWVudFswXS5vZmZzZXRXaWR0aCAvLyBmb3JjZSByZWZsb3dcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICB0aGF0LiRlbGVtZW50XHJcbiAgICAgICAgICAgIC5hZGRDbGFzcygnaW4nKVxyXG4gICAgICAgICAgICAuYXR0cignYXJpYS1oaWRkZW4nLCBmYWxzZSlcclxuXHJcbiAgICAgICAgICB0aGF0LmVuZm9yY2VGb2N1cygpXHJcblxyXG4gICAgICAgICAgdHJhbnNpdGlvbiA/XHJcbiAgICAgICAgICAgIHRoYXQuJGVsZW1lbnQub25lKCRqcW1vZGFsLnN1cHBvcnQudHJhbnNpdGlvbi5lbmQsIGZ1bmN0aW9uICgpIHsgdGhhdC4kZWxlbWVudC5mb2N1cygpLnRyaWdnZXIoJ3Nob3duJykgfSkgOlxyXG4gICAgICAgICAgICB0aGF0LiRlbGVtZW50LmZvY3VzKCkudHJpZ2dlcignc2hvd24nKVxyXG5cclxuICAgICAgICB9KVxyXG4gICAgICB9XHJcblxyXG4gICAgLCBoaWRlOiBmdW5jdGlvbiAoZSkge1xyXG4gICAgICAgIGUgJiYgZS5wcmV2ZW50RGVmYXVsdCgpXHJcblxyXG4gICAgICAgIHZhciB0aGF0ID0gdGhpc1xyXG5cclxuICAgICAgICBlID0gJGpxbW9kYWwuRXZlbnQoJ2hpZGUnKVxyXG5cclxuICAgICAgICB0aGlzLiRlbGVtZW50LnRyaWdnZXIoZSlcclxuXHJcbiAgICAgICAgaWYgKCF0aGlzLmlzU2hvd24gfHwgZS5pc0RlZmF1bHRQcmV2ZW50ZWQoKSkgcmV0dXJuXHJcblxyXG4gICAgICAgIHRoaXMuaXNTaG93biA9IGZhbHNlXHJcblxyXG4gICAgICAgIHRoaXMuZXNjYXBlKClcclxuXHJcbiAgICAgICAgJGpxbW9kYWwoZG9jdW1lbnQpLm9mZignZm9jdXNpbi5tb2RhbCcpXHJcblxyXG4gICAgICAgIHRoaXMuJGVsZW1lbnRcclxuICAgICAgICAgIC5yZW1vdmVDbGFzcygnaW4nKVxyXG4gICAgICAgICAgLmF0dHIoJ2FyaWEtaGlkZGVuJywgdHJ1ZSlcclxuXHJcbiAgICAgICAgJGpxbW9kYWwuc3VwcG9ydC50cmFuc2l0aW9uICYmIHRoaXMuJGVsZW1lbnQuaGFzQ2xhc3MoJ2ZhZGUnKSA/XHJcbiAgICAgICAgICB0aGlzLmhpZGVXaXRoVHJhbnNpdGlvbigpIDpcclxuICAgICAgICAgIHRoaXMuaGlkZU1vZGFsKClcclxuICAgICAgfVxyXG5cclxuICAgICwgZW5mb3JjZUZvY3VzOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdmFyIHRoYXQgPSB0aGlzXHJcbiAgICAgICAgJGpxbW9kYWwoZG9jdW1lbnQpLm9uKCdmb2N1c2luLm1vZGFsJywgZnVuY3Rpb24gKGUpIHtcclxuICAgICAgICAgIGlmICh0aGF0LiRlbGVtZW50WzBdICE9PSBlLnRhcmdldCAmJiAhdGhhdC4kZWxlbWVudC5oYXMoZS50YXJnZXQpLmxlbmd0aCkge1xyXG4gICAgICAgICAgICB0aGF0LiRlbGVtZW50LmZvY3VzKClcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KVxyXG4gICAgICB9XHJcblxyXG4gICAgLCBlc2NhcGU6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB2YXIgdGhhdCA9IHRoaXNcclxuICAgICAgICBpZiAodGhpcy5pc1Nob3duICYmIHRoaXMub3B0aW9ucy5rZXlib2FyZCkge1xyXG4gICAgICAgICAgdGhpcy4kZWxlbWVudC5vbigna2V5dXAuZGlzbWlzcy5tb2RhbCcsIGZ1bmN0aW9uICggZSApIHtcclxuICAgICAgICAgICAgZS53aGljaCA9PSAyNyAmJiB0aGF0LmhpZGUoKVxyXG4gICAgICAgICAgfSlcclxuICAgICAgICB9IGVsc2UgaWYgKCF0aGlzLmlzU2hvd24pIHtcclxuICAgICAgICAgIHRoaXMuJGVsZW1lbnQub2ZmKCdrZXl1cC5kaXNtaXNzLm1vZGFsJylcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAsIGhpZGVXaXRoVHJhbnNpdGlvbjogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHZhciB0aGF0ID0gdGhpc1xyXG4gICAgICAgICAgLCB0aW1lb3V0ID0gc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgdGhhdC4kZWxlbWVudC5vZmYoJGpxbW9kYWwuc3VwcG9ydC50cmFuc2l0aW9uLmVuZClcclxuICAgICAgICAgICAgICB0aGF0LmhpZGVNb2RhbCgpXHJcbiAgICAgICAgICAgIH0sIDUwMClcclxuXHJcbiAgICAgICAgdGhpcy4kZWxlbWVudC5vbmUoJGpxbW9kYWwuc3VwcG9ydC50cmFuc2l0aW9uLmVuZCwgZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXQpXHJcbiAgICAgICAgICB0aGF0LmhpZGVNb2RhbCgpXHJcbiAgICAgICAgfSlcclxuICAgICAgfVxyXG5cclxuICAgICwgaGlkZU1vZGFsOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdmFyIHRoYXQgPSB0aGlzXHJcbiAgICAgICAgdGhpcy4kZWxlbWVudC5oaWRlKClcclxuICAgICAgICB0aGlzLmJhY2tkcm9wKGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgIHRoYXQucmVtb3ZlQmFja2Ryb3AoKVxyXG4gICAgICAgICAgdGhhdC4kZWxlbWVudC50cmlnZ2VyKCdoaWRkZW4nKVxyXG4gICAgICAgIH0pXHJcbiAgICAgIH1cclxuXHJcbiAgICAsIHJlbW92ZUJhY2tkcm9wOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdGhpcy4kYmFja2Ryb3AgJiYgdGhpcy4kYmFja2Ryb3AucmVtb3ZlKClcclxuICAgICAgICB0aGlzLiRiYWNrZHJvcCA9IG51bGxcclxuICAgICAgfVxyXG5cclxuICAgICwgYmFja2Ryb3A6IGZ1bmN0aW9uIChjYWxsYmFjaykge1xyXG4gICAgICAgIHZhciB0aGF0ID0gdGhpc1xyXG4gICAgICAgICAgLCBhbmltYXRlID0gdGhpcy4kZWxlbWVudC5oYXNDbGFzcygnZmFkZScpID8gJ2ZhZGUnIDogJydcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuaXNTaG93biAmJiB0aGlzLm9wdGlvbnMuYmFja2Ryb3ApIHtcclxuICAgICAgICAgIHZhciBkb0FuaW1hdGUgPSAkanFtb2RhbC5zdXBwb3J0LnRyYW5zaXRpb24gJiYgYW5pbWF0ZVxyXG5cclxuICAgICAgICAgIHRoaXMuJGJhY2tkcm9wID0gJGpxbW9kYWwoJzxkaXYgY2xhc3M9XCJtb2RhbC1iYWNrZHJvcCAnICsgYW5pbWF0ZSArICdcIiAvPicpXHJcbiAgICAgICAgICAgIC5hcHBlbmRUbyhkb2N1bWVudC5ib2R5KVxyXG5cclxuICAgICAgICAgIHRoaXMuJGJhY2tkcm9wLmNsaWNrKFxyXG4gICAgICAgICAgICB0aGlzLm9wdGlvbnMuYmFja2Ryb3AgPT0gJ3N0YXRpYycgP1xyXG4gICAgICAgICAgICAgICRqcW1vZGFsLnByb3h5KHRoaXMuJGVsZW1lbnRbMF0uZm9jdXMsIHRoaXMuJGVsZW1lbnRbMF0pXHJcbiAgICAgICAgICAgIDogJGpxbW9kYWwucHJveHkodGhpcy5oaWRlLCB0aGlzKVxyXG4gICAgICAgICAgKVxyXG5cclxuICAgICAgICAgIGlmIChkb0FuaW1hdGUpIHRoaXMuJGJhY2tkcm9wWzBdLm9mZnNldFdpZHRoIC8vIGZvcmNlIHJlZmxvd1xyXG5cclxuICAgICAgICAgIHRoaXMuJGJhY2tkcm9wLmFkZENsYXNzKCdpbicpXHJcblxyXG4gICAgICAgICAgaWYgKCFjYWxsYmFjaykgcmV0dXJuXHJcblxyXG4gICAgICAgICAgZG9BbmltYXRlID9cclxuICAgICAgICAgICAgdGhpcy4kYmFja2Ryb3Aub25lKCRqcW1vZGFsLnN1cHBvcnQudHJhbnNpdGlvbi5lbmQsIGNhbGxiYWNrKSA6XHJcbiAgICAgICAgICAgIGNhbGxiYWNrKClcclxuXHJcbiAgICAgICAgfSBlbHNlIGlmICghdGhpcy5pc1Nob3duICYmIHRoaXMuJGJhY2tkcm9wKSB7XHJcbiAgICAgICAgICB0aGlzLiRiYWNrZHJvcC5yZW1vdmVDbGFzcygnaW4nKVxyXG5cclxuICAgICAgICAgICRqcW1vZGFsLnN1cHBvcnQudHJhbnNpdGlvbiAmJiB0aGlzLiRlbGVtZW50Lmhhc0NsYXNzKCdmYWRlJyk/XHJcbiAgICAgICAgICAgIHRoaXMuJGJhY2tkcm9wLm9uZSgkanFtb2RhbC5zdXBwb3J0LnRyYW5zaXRpb24uZW5kLCBjYWxsYmFjaykgOlxyXG4gICAgICAgICAgICBjYWxsYmFjaygpXHJcblxyXG4gICAgICAgIH0gZWxzZSBpZiAoY2FsbGJhY2spIHtcclxuICAgICAgICAgIGNhbGxiYWNrKClcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICB9XHJcblxyXG5cclxuIC8qIE1PREFMIFBMVUdJTiBERUZJTklUSU9OXHJcbiAgKiA9PT09PT09PT09PT09PT09PT09PT09PSAqL1xyXG5cclxuICB2YXIgb2xkID0gJGpxbW9kYWwuZm4ubW9kYWxcclxuXHJcbiAgJGpxbW9kYWwuZm4ubW9kYWwgPSBmdW5jdGlvbiAob3B0aW9uKSB7XHJcbiAgICByZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uICgpIHtcclxuICAgICAgdmFyICR0aGlzID0gJGpxbW9kYWwodGhpcylcclxuICAgICAgICAsIGRhdGEgPSAkdGhpcy5kYXRhKCdtb2RhbCcpXHJcbiAgICAgICAgLCBvcHRpb25zID0gJGpxbW9kYWwuZXh0ZW5kKHt9LCAkanFtb2RhbC5mbi5tb2RhbC5kZWZhdWx0cywgJHRoaXMuZGF0YSgpLCB0eXBlb2Ygb3B0aW9uID09ICdvYmplY3QnICYmIG9wdGlvbilcclxuICAgICAgaWYgKCFkYXRhKSAkdGhpcy5kYXRhKCdtb2RhbCcsIChkYXRhID0gbmV3IE1vZGFsKHRoaXMsIG9wdGlvbnMpKSlcclxuICAgICAgaWYgKHR5cGVvZiBvcHRpb24gPT0gJ3N0cmluZycpIGRhdGFbb3B0aW9uXSgpXHJcbiAgICAgIGVsc2UgaWYgKG9wdGlvbnMuc2hvdykgZGF0YS5zaG93KClcclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICAkanFtb2RhbC5mbi5tb2RhbC5kZWZhdWx0cyA9IHtcclxuICAgICAgYmFja2Ryb3A6IHRydWVcclxuICAgICwga2V5Ym9hcmQ6IHRydWVcclxuICAgICwgc2hvdzogdHJ1ZVxyXG4gIH1cclxuXHJcbiAgJGpxbW9kYWwuZm4ubW9kYWwuQ29uc3RydWN0b3IgPSBNb2RhbFxyXG5cclxuXHJcbiAvKiBNT0RBTCBOTyBDT05GTElDVFxyXG4gICogPT09PT09PT09PT09PT09PT0gKi9cclxuXHJcbiAgJGpxbW9kYWwuZm4ubW9kYWwubm9Db25mbGljdCA9IGZ1bmN0aW9uICgpIHtcclxuICAgICRqcW1vZGFsLmZuLm1vZGFsID0gb2xkXHJcbiAgICByZXR1cm4gdGhpc1xyXG4gIH1cclxuXHJcblxyXG4gLyogTU9EQUwgREFUQS1BUElcclxuICAqID09PT09PT09PT09PT09ICovXHJcblxyXG4gICRqcW1vZGFsKGRvY3VtZW50KS5vbignY2xpY2subW9kYWwuZGF0YS1hcGknLCAnW2RhdGEtdG9nZ2xlPVwibW9kYWxcIl0nLCBmdW5jdGlvbiAoZSkge1xyXG4gICAgdmFyICR0aGlzID0gJGpxbW9kYWwodGhpcylcclxuICAgICAgLCBocmVmID0gJHRoaXMuYXR0cignaHJlZicpXHJcbiAgICAgICwgJHRhcmdldCA9ICRqcW1vZGFsKCR0aGlzLmF0dHIoJ2RhdGEtdGFyZ2V0JykgfHwgKGhyZWYgJiYgaHJlZi5yZXBsYWNlKC8uKig/PSNbXlxcc10rJCkvLCAnJykpKSAvL3N0cmlwIGZvciBpZTdcclxuICAgICAgLCBvcHRpb24gPSAkdGFyZ2V0LmRhdGEoJ21vZGFsJykgPyAndG9nZ2xlJyA6ICRqcW1vZGFsLmV4dGVuZCh7IHJlbW90ZTohLyMvLnRlc3QoaHJlZikgJiYgaHJlZiB9LCAkdGFyZ2V0LmRhdGEoKSwgJHRoaXMuZGF0YSgpKVxyXG5cclxuICAgIGUucHJldmVudERlZmF1bHQoKVxyXG5cclxuICAgICR0YXJnZXRcclxuICAgICAgLm1vZGFsKG9wdGlvbilcclxuICAgICAgLm9uZSgnaGlkZScsIGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAkdGhpcy5mb2N1cygpXHJcbiAgICAgIH0pXHJcbiAgfSk7XHJcblxyXG4vL30od2luZG93LmpRdWVyeSk7XHJcbiJ9LCAiaGVhZGVyc1NpemUiOiAwLCAiYm9keVNpemUiOiAyNjI2LCAicmVkaXJlY3RVUkwiOiAiIiwgIl90cmFuc2ZlclNpemUiOiAyNjI2fSwgImNhY2hlIjoge30sICJ0aW1pbmdzIjogeyJkbnMiOiAtMSwgImNvbm5lY3QiOiAtMSwgInNzbCI6IC0xLCAic2VuZCI6IDAsICJ3YWl0IjogMzIzLjQ5NiwgInJlY2VpdmUiOiAxNS4zOX0sICJwYWdlcmVmIjogInBhZ2VAOGM5MzJmODMzN2Q5YWJiNGI5YWI5ODg5ZGVjNTFiOTkiLCAic2VydmVySVBBZGRyZXNzIjogIlsyNjA2OjQ3MDA6MjA6OjY4MWE6ZWNmXSIsICJfc2VydmVyUG9ydCI6IDQ0MywgIl9zZWN1cml0eURldGFpbHMiOiB7InByb3RvY29sIjogIlRMUyAxLjMiLCAic3ViamVjdE5hbWUiOiAic3VwcGx5Y2hhaW5jYW5hZGEuY29tIiwgImlzc3VlciI6ICJXRTEiLCAidmFsaWRGcm9tIjogMTcyMzQ3MDg0MSwgInZhbGlkVG8iOiAxNzMxMjQ2ODQwfX0sIHsic3RhcnRlZERhdGVUaW1lIjogIjIwMjQtMDktMDVUMTE6MDc6MjAuMzE5WiIsICJ0aW1lIjogMzkyLjkxMjAwMDAwMDAwMDAzLCAicmVxdWVzdCI6IHsibWV0aG9kIjogIkdFVCIsICJ1cmwiOiAiaHR0cHM6Ly9wb3J0YWwuc3VwcGx5Y2hhaW5jYW5hZGEuY29tL21wb3dlci9jbXMyL2ltZy9zY21hX2xvZ29fdGFnXzI1MC5wbmciLCAiaHR0cFZlcnNpb24iOiAiSFRUUC8yLjAiLCAiY29va2llcyI6IFt7Im5hbWUiOiAiSlNFU1NJT05JRCIsICJ2YWx1ZSI6ICIyNTdEOURDOTIwNDUyQTREOTMzQjhBM0NEQTlCNkJEMyJ9XSwgImhlYWRlcnMiOiBbeyJuYW1lIjogIjphdXRob3JpdHkiLCAidmFsdWUiOiAicG9ydGFsLnN1cHBseWNoYWluY2FuYWRhLmNvbSJ9LCB7Im5hbWUiOiAiOm1ldGhvZCIsICJ2YWx1ZSI6ICJHRVQifSwgeyJuYW1lIjogIjpwYXRoIiwgInZhbHVlIjogIi9tcG93ZXIvY21zMi9pbWcvc2NtYV9sb2dvX3RhZ18yNTAucG5nIn0sIHsibmFtZSI6ICI6c2NoZW1lIiwgInZhbHVlIjogImh0dHBzIn0sIHsibmFtZSI6ICJhY2NlcHQiLCAidmFsdWUiOiAiaW1hZ2UvYXZpZixpbWFnZS93ZWJwLGltYWdlL2FwbmcsaW1hZ2Uvc3ZnK3htbCxpbWFnZS8qLCovKjtxPTAuOCJ9LCB7Im5hbWUiOiAiYWNjZXB0LWVuY29kaW5nIiwgInZhbHVlIjogImd6aXAsIGRlZmxhdGUsIGJyLCB6c3RkIn0sIHsibmFtZSI6ICJhY2NlcHQtbGFuZ3VhZ2UiLCAidmFsdWUiOiAiZW4tVVMifSwgeyJuYW1lIjogImNvb2tpZSIsICJ2YWx1ZSI6ICJKU0VTU0lPTklEPTI1N0Q5REM5MjA0NTJBNEQ5MzNCOEEzQ0RBOUI2QkQzIn0sIHsibmFtZSI6ICJwcmlvcml0eSIsICJ2YWx1ZSI6ICJ1PTIsIGkifSwgeyJuYW1lIjogInJlZmVyZXIiLCAidmFsdWUiOiAiaHR0cHM6Ly9wb3J0YWwuc3VwcGx5Y2hhaW5jYW5hZGEuY29tL2VuL3BvcnRhbGxvZ2luIn0sIHsibmFtZSI6ICJzZWMtY2gtdWEiLCAidmFsdWUiOiAiXCJOb3Q7QT1CcmFuZFwiO3Y9XCIyNFwiLCBcIkNocm9taXVtXCI7dj1cIjEyOFwiIn0sIHsibmFtZSI6ICJzZWMtY2gtdWEtbW9iaWxlIiwgInZhbHVlIjogIj8wIn0sIHsibmFtZSI6ICJzZWMtY2gtdWEtcGxhdGZvcm0iLCAidmFsdWUiOiAiXCJXaW5kb3dzXCIifSwgeyJuYW1lIjogInNlYy1mZXRjaC1kZXN0IiwgInZhbHVlIjogImltYWdlIn0sIHsibmFtZSI6ICJzZWMtZmV0Y2gtbW9kZSIsICJ2YWx1ZSI6ICJuby1jb3JzIn0sIHsibmFtZSI6ICJzZWMtZmV0Y2gtc2l0ZSIsICJ2YWx1ZSI6ICJzYW1lLW9yaWdpbiJ9LCB7Im5hbWUiOiAidXNlci1hZ2VudCIsICJ2YWx1ZSI6ICJNb3ppbGxhLzUuMCAoV2luZG93cyBOVCAxMC4wOyBXaW42NDsgeDY0KSBBcHBsZVdlYktpdC81MzcuMzYgKEtIVE1MLCBsaWtlIEdlY2tvKSBDaHJvbWUvMTI4LjAuNjYxMy4xOCBTYWZhcmkvNTM3LjM2In1dLCAicXVlcnlTdHJpbmciOiBbXSwgImhlYWRlcnNTaXplIjogNzU3LCAiYm9keVNpemUiOiAwfSwgInJlc3BvbnNlIjogeyJzdGF0dXMiOiAyMDAsICJzdGF0dXNUZXh0IjogIiIsICJodHRwVmVyc2lvbiI6ICJIVFRQLzIuMCIsICJjb29raWVzIjogW10sICJoZWFkZXJzIjogW3sibmFtZSI6ICJhY2NlcHQtcmFuZ2VzIiwgInZhbHVlIjogImJ5dGVzIn0sIHsibmFtZSI6ICJjYWNoZS1jb250cm9sIiwgInZhbHVlIjogIm1heC1hZ2U9MTQ0MDAifSwgeyJuYW1lIjogImNmLWNhY2hlLXN0YXR1cyIsICJ2YWx1ZSI6ICJNSVNTIn0sIHsibmFtZSI6ICJjZi1yYXkiLCAidmFsdWUiOiAiOGJlNWMxNGMwODkxNzFjNC1GUkEifSwgeyJuYW1lIjogImNvbnRlbnQtbGVuZ3RoIiwgInZhbHVlIjogIjE5MDY1In0sIHsibmFtZSI6ICJjb250ZW50LXR5cGUiLCAidmFsdWUiOiAiaW1hZ2UvcG5nIn0sIHsibmFtZSI6ICJkYXRlIiwgInZhbHVlIjogIlRodSwgMDUgU2VwIDIwMjQgMTE6MDc6MjAgR01UIn0sIHsibmFtZSI6ICJldGFnIiwgInZhbHVlIjogIlcvXCIxOTA2NS0xNjgxMzMzNDIyMDAwXCIifSwgeyJuYW1lIjogImxhc3QtbW9kaWZpZWQiLCAidmFsdWUiOiAiV2VkLCAxMiBBcHIgMjAyMyAyMTowMzo0MiBHTVQifSwgeyJuYW1lIjogIm5lbCIsICJ2YWx1ZSI6ICJ7XCJzdWNjZXNzX2ZyYWN0aW9uXCI6MCxcInJlcG9ydF90b1wiOlwiY2YtbmVsXCIsXCJtYXhfYWdlXCI6NjA0ODAwfSJ9LCB7Im5hbWUiOiAicmVwb3J0LXRvIiwgInZhbHVlIjogIntcImVuZHBvaW50c1wiOlt7XCJ1cmxcIjpcImh0dHBzOlxcL1xcL2EubmVsLmNsb3VkZmxhcmUuY29tXFwvcmVwb3J0XFwvdjQ/cz01dmVJbUk4SVFzUzVQZnFWOHd6YSUyQmF3UElWT2piJTJGSkVqdkR0RmFXOElpMjRpbXlEUHFLQkhiNlhhTFVRdkpRTVo4bHd4MEtnV1lmRUVpSnJyaTlZazlIdEdUSnlzMXppSndVQiUyQk43amFMZkh0OXA0ZW0lMkJxQTNsY1RGWkFRUXpmWWo3blAxVlBlQVBiaDlxaUJUNXFMc2w3ZjZZY0tGVklQbmslM0RcIn1dLFwiZ3JvdXBcIjpcImNmLW5lbFwiLFwibWF4X2FnZVwiOjYwNDgwMH0ifSwgeyJuYW1lIjogInNlcnZlciIsICJ2YWx1ZSI6ICJjbG91ZGZsYXJlIn0sIHsibmFtZSI6ICJzdHJpY3QtdHJhbnNwb3J0LXNlY3VyaXR5IiwgInZhbHVlIjogIm1heC1hZ2U9NjMwNzIwMDA7IGluY2x1ZGVTdWJkb21haW5zOyBwcmVsb2FkIn0sIHsibmFtZSI6ICJ2YXJ5IiwgInZhbHVlIjogIkFjY2VwdC1FbmNvZGluZyJ9XSwgImNvbnRlbnQiOiB7InNpemUiOiAxOTA2NSwgIm1pbWVUeXBlIjogImltYWdlL3BuZyIsICJjb21wcmVzc2lvbiI6IDAsICJ0ZXh0IjogImlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFSZ0FBQUNhQ0FJQUFBRDk0OEM4QUFBQUNYQklXWE1BQUFzU0FBQUxFZ0hTM1g3OEFBQUtUMmxEUTFCUWFHOTBiM05vYjNBZ1NVTkRJSEJ5YjJacGJHVUFBSGphblZOblZGUHBGajMzM3ZSQ1M0aUFsRXR2VWhVSUlGSkNpNEFVa1NZcUlRa1FTb2dob2RrVlVjRVJSVVVFRzhpZ2lBT09qb0NNRlZFc0RJb0syQWZrSWFLT2c2T0lpc3I3NFh1amE5YTg5K2JOL3JYWFB1ZXM4NTJ6endmQUNBeVdTRE5STllBTXFVSWVFZUNEeDhURzRlUXVRSUVLSkhBQUVBaXpaQ0Z6L1NNQkFQaCtQRHdySXNBSHZnQUJlTk1MQ0FEQVRadkFNQnlIL3cvcVFwbGNBWUNFQWNCMGtUaExDSUFVQUVCNmprS21BRUJHQVlDZG1DWlRBS0FFQUdETFkyTGpBRkF0QUdBbmYrYlRBSUNkK0psN0FRQmJsQ0VWQWFDUkFDQVRaWWhFQUdnN0FLelBWb3BGQUZnd0FCUm1TOFE1QU5ndEFEQkpWMlpJQUxDM0FNRE9FQXV5QUFnTUFEQlJpSVVwQUFSN0FHRElJeU40QUlTWkFCUkc4bGM4OFN1dUVPY3FBQUI0bWJJOHVTUTVSWUZiQ0MxeEIxZFhMaDRvemtrWEt4UTJZUUpobWtBdXdubVpHVEtCTkEvZzg4d0FBS0NSRlJIZ2cvUDllTTRPcnM3T05vNjJEbDh0NnI4Ry95SmlZdVArNWMrcmNFQUFBT0YwZnRIK0xDK3pHb0E3Qm9CdC9xSWw3Z1JvWGd1Z2RmZUxacklQUUxVQW9PbmFWL053K0g0OFBFV2hrTG5aMmVYazVOaEt4RUpiWWNwWGZmNW53bC9BVi8xcytYNDgvUGYxNEw3aUpJRXlYWUZIQlBqZ3dzejBUS1VjejVJSmhHTGM1bzlIL0xjTC8vd2QweUxFU1dLNVdDb1U0MUVTY1k1RW1venpNcVVpaVVLU0tjVWwwdjlrNHQ4cyt3TSszelVBc0dvK0FYdVJMYWhkWXdQMlN5Y1FXSFRBNHZjQUFQSzdiOEhVS0FnRGdHaUQ0YzkzLys4Ly9VZWdKUUNBWmttU2NRQUFYa1FrTGxUS3N6L0hDQUFBUktDQktyQkJHL1RCR0N6QUJoekJCZHpCQy94Z05vUkNKTVRDUWhCQ0NtU0FISEpnS2F5Q1FpaUd6YkFkS21BdjFFQWROTUJSYUlhVGNBNHV3bFc0RGoxd0QvcGhDSjdCS0x5QkNRUkJ5QWdUWVNIYWlBRmlpbGdqamdnWG1ZWDRJY0ZJQkJLTEpDREppQlJSSWt1Uk5VZ3hVb3BVSUZWSUhmSTljZ0k1aDF4R3VwRTd5QUF5Z3Z5R3ZFY3hsSUd5VVQzVURMVkR1YWczR29SR29ndlFaSFF4bW84V29KdlFjclFhUFl3Mm9lZlFxMmdQMm84K1E4Y3d3T2dZQnpQRWJEQXV4c05Dc1Rnc0NaTmp5N0VpckF5cnhocXdWcXdEdTRuMVk4K3hkd1FTZ1VYQUNUWUVkMElnWVI1QlNGaE1XRTdZU0tnZ0hDUTBFZG9KTndrRGhGSENKeUtUcUV1MEpyb1IrY1FZWWpJeGgxaElMQ1BXRW84VEx4QjdpRVBFTnlRU2lVTXlKN21RQWtteHBGVFNFdEpHMG01U0kra3NxWnMwU0Jvams4bmFaR3V5QnptVUxDQXJ5SVhrbmVURDVEUGtHK1FoOGxzS25XSkFjYVQ0VStJb1VzcHFTaG5sRU9VMDVRWmxtREpCVmFPYVV0Mm9vVlFSTlk5YVFxMmh0bEt2VVllb0V6UjFtam5OZ3haSlM2V3RvcFhUR21nWGFQZHByK2gwdWhIZGxSNU9sOUJYMHN2cFIraVg2QVAwZHd3TmhoV0R4NGhuS0JtYkdBY1laeGwzR0srWVRLWVowNHNaeDFRd056SHJtT2VaRDVsdlZWZ3F0aXA4RlpIS0NwVktsU2FWR3lvdlZLbXFwcXJlcWd0VjgxWExWSStwWGxOOXJrWlZNMVBqcVFuVWxxdFZxcDFRNjFNYlUyZXBPNmlIcW1lb2IxUS9wSDVaL1lrR1djTk13MDlEcEZHZ3NWL2p2TVlnQzJNWnMzZ3NJV3NOcTRaMWdUWEVKckhOMlh4MktydVkvUjI3aXoycXFhRTVRek5LTTFlelV2T1VaajhINDVoeCtKeDBUZ25uS0tlWDgzNkszaFR2S2VJcEc2WTBUTGt4WlZ4cnFwYVhsbGlyU0t0UnEwZnJ2VGF1N2FlZHByMUZ1MW43Z1E1Qngwb25YQ2RIWjQvT0JaM25VOWxUM2FjS3B4Wk5QVHIxcmk2cWE2VWJvYnRFZDc5dXArNllucjVlZ0o1TWI2ZmVlYjNuK2h4OUwvMVUvVzM2cC9WSERGZ0dzd3drQnRzTXpoZzh4VFZ4Ynp3ZEw4ZmI4VkZEWGNOQVE2VmhsV0dYNFlTUnVkRThvOVZHalVZUGpHbkdYT01rNDIzR2JjYWpKZ1ltSVNaTFRlcE43cHBTVGJtbUthWTdURHRNeDgzTXphTE4xcGsxbXoweDF6TG5tK2ViMTV2ZnQyQmFlRm9zdHFpMnVHVkpzdVJhcGxudXRyeHVoVm81V2FWWVZWcGRzMGF0bmEwbDFydXR1NmNScDdsT2swNnJudFpudzdEeHRzbTJxYmNac09YWUJ0dXV0bTIyZldGblloZG50OFd1dys2VHZaTjl1bjJOL1QwSERZZlpEcXNkV2gxK2M3UnlGRHBXT3Q2YXpwenVQMzNGOUpicEwyZFl6eERQMkRQanRoUExLY1JwblZPYjAwZG5GMmU1YzRQemlJdUpTNExMTHBjK0xwc2J4dDNJdmVSS2RQVnhYZUY2MHZXZG03T2J3dTJvMjYvdU51NXA3b2Zjbjh3MG55bWVXVE56ME1QSVErQlI1ZEUvQzUrVk1HdmZySDVQUTArQlo3WG5JeTlqTDVGWHJkZXd0NlYzcXZkaDd4Yys5ajV5bitNKzR6dzMzakxlV1YvTU44QzN5TGZMVDhOdm5sK0YzME4vSS85ay8zci8wUUNuZ0NVQlp3T0pnVUdCV3dMNytIcDhJYitPUHpyYlpmYXkyZTFCaktDNVFSVkJqNEt0Z3VYQnJTRm95T3lRclNIMzU1ak9rYzVwRG9WUWZ1alcwQWRoNW1HTHczNE1KNFdIaFZlR1A0NXdpRmdhMFRHWE5YZlIzRU56MzBUNlJKWkUzcHRuTVU4NXJ5MUtOU28rcWk1cVBObzN1alM2UDhZdVpsbk0xVmlkV0Vsc1N4dzVMaXF1Tm01c3Z0Lzg3Zk9INHAzaUMrTjdGNWd2eUYxd2VhSE93dlNGcHhhcExoSXNPcFpBVEloT09KVHdRUkFxcUJhTUpmSVRkeVdPQ25uQ0hjSm5JaS9STnRHSTJFTmNLaDVPOGtncVRYcVM3Skc4Tlhra3hUT2xMT1c1aENlcGtMeE1EVXpkbXpxZUZwcDJJRzB5UFRxOU1ZT1NrWkJ4UXFvaFRaTzJaK3BuNW1aMnk2eGxoYkwreFc2THR5OGVsUWZKYTdPUXJBVlpMUXEyUXFib1ZGb28xeW9Ic21kbFYyYS96WW5LT1phcm5pdk43Y3l6eXR1UU41enZuLy90RXNJUzRaSzJwWVpMVnkwZFdPYTlyR281c2p4eGVkc0s0eFVGSzRaV0Jxdzh1SXEyS20zVlQ2dnRWNWV1ZnIwbWVrMXJnVjdCeW9MQnRRRnI2d3RWQ3VXRmZldmMxKzFkVDFndldkKzFZZnFHblJzK0ZZbUtyaFRiRjVjVmY5Z28zSGpsRzRkdnlyK1ozSlMwcWF2RXVXVFBadEptNmViZUxaNWJEcGFxbCthWERtNE4yZHEwRGQ5V3RPMzE5a1hiTDVmTktOdTdnN1pEdWFPL1BMaThaYWZKenMwN1AxU2tWUFJVK2xRMjd0TGR0V0hYK0c3UjdodDd2UFkwN05YYlc3ejMvVDdKdnR0VkFWVk4xV2JWWmZ0Sis3UDNQNjZKcXVuNGx2dHRYYTFPYlhIdHh3UFNBLzBISXc2MjE3blUxUjNTUFZSU2o5WXI2MGNPeHgrKy9wM3ZkeTBOTmcxVmpaekc0aU53UkhuazZmY0ozL2NlRFRyYWRveDdyT0VIMHg5MkhXY2RMMnBDbXZLYVJwdFRtdnRiWWx1NlQ4dyswZGJxM25yOFI5c2ZENXcwUEZsNVN2TlV5V25hNllMVGsyZnl6NHlkbFoxOWZpNzUzR0Rib3JaNzUyUE8zMm9QYisrNkVIVGgwa1gvaStjN3ZEdk9YUEs0ZFBLeTIrVVRWN2hYbXE4NlgyM3FkT284L3BQVFQ4ZTduTHVhcnJsY2E3bnVlcjIxZTJiMzZSdWVOODdkOUwxNThSYi8xdFdlT1QzZHZmTjZiL2ZGOS9YZkZ0MStjaWY5enN1NzJYY243cTI4VDd4ZjlFRHRRZGxEM1lmVlAxdiszTmp2M0g5cXdIZWc4OUhjUi9jR2hZUFAvcEgxanc5REJZK1pqOHVHRFlicm5qZytPVG5pUDNMOTZmeW5RODlrenlhZUYvNmkvc3V1RnhZdmZ2alY2OWZPMFpqUm9aZnlsNU8vYlh5bC9lckE2eG12MjhiQ3hoNit5WGd6TVY3MFZ2dnR3WGZjZHgzdm85OFBUK1I4SUg4by8yajVzZlZUMEtmN2t4bVRrLzhFQTVqei9HTXpMZHNBQUFBRVowRk5RUUFBc1k1OCsxR1RBQUFBSUdOSVVrMEFBSG9sQUFDQWd3QUErZjhBQUlEcEFBQjFNQUFBNm1BQUFEcVlBQUFYYjVKZnhVWUFBRCtVU1VSQlZIamE3RjFuZUJWRkZ6Nnp1N2ZzTGVrSklZVWtKQ0dCMEtRamd2UmVGRlM2RktXRDBsR1JUeEJRTERTUkRrcEo2TjFRVlhyb0VBZ0Jna2tnRU5KN2J0MDYzNC9GYTBnelRVVFk5OG1QemIwN3M3Tno1NTF6empzTllZeEJoZ3dabFFNaFY0RU1HVEtSWk1oNElVQ1Y5QVVmZlJlTVJySk9iV1NuZjNHS0t5WWxDd2tKcExjM1VjUDd4U2tWTnBtRjZEdEEwMVQ5dW5LVGtpM1NYN0FzWDVuZnRYZCs3M2NOdzBlSktha3ZTRm01cytmeis3eVgvM2IvL0Q3dmNXZlB2eWdzeXM4M1RwcWExN05mZnJjK2xxKy9BMUdVVzVWTUpBQUFJVGJldW1xZG1KbUZCWjQ5Rk03OWR1cUZhSzhzWjFuNkkzLzlPZ0RpYjBWWkZuNkxEY1lYb1dETXpyMU0ySFlRQkRFNzI3cHhreEQvVUc1Vk1wRUFBTUJzd2tZam90VklxMFdVZ2oxOEZCdE5Md0NUUkp5WEN3b0ZVcXNSVFdOQkFQTEZDUEFFQVpFa290V0lwakhEQW1PVlc1Vk1KQUFBTWpoSTJhY1hOaGpGMURTeVZvQ1luV01ZK0w1MS9VODROKzlmTENoU3FWU0QraFBPenRoaXdTd0xXQVRpeFNBU3p3RUd6TExBOGNxdW5Rai9tbktyZWdWQnpwMDd0NGdBUVNuZWFFbjYxeVRzOU5oazBxMWFEb0xBL0xTSlBYUVlFU1RwVXdPcDFmK09NTkxvTmFLYUd4OTVTelAxSXpFOWt6OFhvZWpRRmlrVS8yTDFzWHNQV0Zhc3BqOGFEenhQaGRUVy9iQUU2WFZ5cTNvVmdVdUJJT1IxN21sWjlpUEdXRWpQTUM5ZGtmTmFpNXpYMjFrM2g0b21NLzQzd0Q5NG1OdXh1NUNXTG1abTVUUnJrejk4dEdpMTRuOEp6Sjc5V2Q2MXJHRTdNTWJHU1ZQTkN4WmhHYThxU3ZXT0NJS2VQTW02YWFzWUYwKzR1dENUSjlyOXNsZjFYbC9MbXZWNW5icGIxMndBbG4zZXREY2FnZVBGOUhUazdHUzNjNHNZRzJmOGNCd0l3citnTVd6ZmJaenhtZmFyZWFwQi9RRUFtODNZS2tkSGNveFVBaFJkT3lFbkoydm85cWQzZTNyUUgwKzAyeG1xNnQyRDJiNHpyMnNmeTQ5cnNNbjAvTTBvQUJDK1BycWYxNHFQbnhpR2p3S2VmNjRzQ3QxaG5ydEFNK2NUMVpBQmY4WndTRzVNTXBGS2lmRVJQV0VNZSt4WDhXSENYMm04dmVoWjAvVjd0aW5lZklQWnRpTy8zOEIvUzRvZ0F3TjBHMWNMRHg4WlIwM0FGc3R6WXRHTzNlYjVYOVBUSjZ0SHZDODNJQmxsSXhLQXNtOGZ3c25KdW1aRDRaU3VycG92WnR1SDcxZTBibVZkdlM2LzN3Qm02L2JuVHljeXdOOXUyeWIrN2ozVHBHblliSDRPNm9MNXN5L29UNmFwUjQyUVc0K01jaEFKQUZUdkQySlBuaFpUMDRxeFdFNk9tdG16N0k2SEszdjFzQ3o5SWEvSDI4eVdNR3kyUE5kM3FPRnR0M2NIZi91T2NjSVV6REQvS0l1TVUyWnB2cHdqMnlJWkZTTFNPMitUM2w2V0pTdEt6T1hmbGlJSUw0OS9XbnY0UzEwWU1sQnVOeklxUWlTZ0tOWGdBZXlSWXpndHZiUzgvbFVwNGgvVkhvcFJGMlRJS0RlUkFCVGR1NUQrZnBiVjYvNCt4MzlQaXZpSHRBZFpYWkJSWlVSQ05FMlAvWkRadFU5OG5GaW1mUDhsS2FMS3RRZFpYWkJSbFVRQ0FFVzd0cVNYQi9Qbm1GS1o2UGR2U0JGVnFEM0k2b0tNcWljU3FGWDBsSStZUGZ1RjJManlQZU81U3hGVm9qM0k2b0tNZjRaSTBrUUhSMGNtYkVkRm52UjhwWWhLYWcreXVpRGpIeVJTc1JNZHl2ZTg1eWhGVkZoN2tOVUZHZjh3a1VxZTZGQk9aKzg1U1JFVjBCNWtkVUhHOHlBU2xEclJvWHptclZncHdsTEZjNmovMGg0bVRzRi9GNWpKNm9LTTUwaWtkOTRtdlR3dFMxZFVUUWtLU1JIdHUxalhySy9hRWRXbjJzUDlXT1BJTVZEeWhwak1qdDNHYVovSTZvS001MFFrb0NqVndQZllvOGR4Um1hVmxlTlBLVUxadnExMWMyaitXKzh4bTBPclVJb2dmSDEwNjFZS3NmSEdNUk9MMWZIWS9ZZk1jeGZTMHlmTDZvS001MFVrQUVYUDdxUzNsM1hkeGlvdWpiZVhadUU4dXdPN3FRYjFMY3RXR040ZHpPemE4OHh1UVJRRkpBa1ZXbDVPaHRUV2I5bkFYNDgwVHB5Q1dlNFpGdjF5eERSenRuckNHSHJpV0xsTnlIaCtSRUlhV2ozMlEyYkhIakh4U2RXWHFacWJadUZjdTZNSHFWWXR6UXNXNWZmdXgrNDlBQndIQUNDS1lMRlUyUEVqZzJycGQ0WHlsNithcDgzQ3ViazRMeCtiek96UkU4YVBwOVBUUHFZbmpaTWJoSXdLTXFMaW0raGJySGs5MzFaMjdralBtdmJQbFU5TWVNVHMzc3ZzM0V1NHVTcmZlWnM3RjhFZFBrcTFlbDM3L2Rka1JmZnJFZUlmbU1aL0xCcU1pS1lCWTV5ZFEwK1pxQm8ycERMbE5JNGFUN2hYMDh6L1FtNVNza1VxSjJnMS9mRkVadmMrOGNFL3VDVWk0ZXREejVpcTM3NlphdEhNc3VBYmR0ZGVJQ24yWUxoNTdzSUs3NUZBK3Rla21qVG1MMGJ3VjY5enA4NEFnUEx0M25KVGtQRXZFUWxBMmFNYjB1c3JOdEdoZkUwL01FRHp2OCtJbXI3QTg2QlVJbHJOMzd4VkdTbENTSGlFS0JWeXNFY09EcUxCSUtha3lVMUJ4cjlHSkNBSjlkaFJ6SkhqLzBTa1ZJekMwZm9OSUVoc01vRW9xdDdxVFRnNFZMd0w2TndCdEZwc01HS0xSZEcwRVZIZFhXNEtNdjQ5SWdHbyt2Y2pIT3dyT2RHaHJMN2t6S24wcDlPUlFrSFBta1ovTmhOSXN1TEZIalpFOThOaVpLOVhEWGhYdSt6N0YrckVEUm12SXBFQVFEVmtJSHZpTjV5ZThZOExJN1JhTldRZ0dSeWtHallZMFpYZDdWWDEvbUNxMFd2cS92MEk5MnB5TzVEeEFoRHBuYjVFZFhmTEQ2dWVRM0dsK1hMWVZBVXI5aVN0QWxzWnVSSEllQ0dJQkNxbGVzaEE1bUI0RlU1MEtMbjU0NmQvTDFSV01tUWlWWTBNMExNN1djUExzbmFEWEtFeVpDSlZJbnJSME9xeG81anR1OFJIaitVNmxTRVRxZUpRZG14UFZLdG0zYnBOcmxNWk1wRXFBVnBOVDVuSTd0a3Z4TWJMMVNwREpsSWxqRktQYnNqUmtaR05rZ3laU0pYTGpLREhqV0tQSGhNU0hzazFLME1tVWlXTTBudjlDR2RuYXhrMlpKVWhReVpTYVZDOVA1Zzc4YnVZa2lwWHJneVpTSlVnMGp0dkUxNmVsbVVyNU1xVklST3BNdTZkVXYzK1lQYVhvMkthdkRaQmhreWtTa0RSc3h2cFc4TzZTbzZVWk1oRXFnUVFUYXZIaldaMjc1TW5Pc2lRaVZRNS82NVRlOExkWFo3b0lFTW1VdVdndGsxMGlKTnJXWVpNcEVvWXBlNWRrWjBkczMyM1hNc3laQ0pWQWlTcEh2c2hHMzVFZkpKVWRlVWxBQ0VnaUJjckt3QkFDQkNTMjVOTXBIOEVxZ0h2RUc1dVZiaWpBNkpwQUl4b3VncXlVcWtBQVZLcHFvemhGZHIvVmNiTFRDVCtScVJ4L01lR29SOHdtMElybHoycDdOdUhDZHRoZVA4RHk1SWZudTZXV2xIZ2ZJTjE5WG9oTnM3NjR4cWNuMS9KTjdldVdzZEgzckp1RHEzOHpFQm0zMEh1M0FYdXhPLzhsYXVWeklyNzlYZmpCMk1OdzBlejRVZmwxdmtmQWxWTWU4M05NMzgranoxNkdBZ1ZlK3dFMERUVitEV29tTnVDTVgvemxwaWF4bXpmemV6ZUJ3Z3BlL2VvS0kzQXVtcXRkZVZhWktlMy9yZ1dBS25IajZxd044VWRPMkg2YkM2UUpMUHZJR1paN1pmL2c0cnRwb0pCdUhmUE5IVVd6czRXNHgrWVpuNnUrMkV4YURVVnl3cW5wNXVtZjhwSDNRYkEvS1VyWktBL0dWUkxicVAvQ1JTelpURi9QVEsvVnovTWNvaFdZNFloUFR4UWRYY1F4WXFFRGFJZzNMa0hvZ2hLSlRhWmtZWW02d1JMamFhY1dRR0lXTGdWaFRGR05JMHRGc0JBTmF3UEpGbnVUUmNRQUNEaHpsMXNOQ0U3UFhBY05sdW9laUdnMDRKWS92MGJDQ1ErZkNTbXBDSUhlK0I1WURreXVGWkZzeUp3ZnI0WUZ3OEtCV0FzNXVUcTE2OVVEWmFQeHZqUFdpVEMyNVB3cmNGZnZBeGFIZVk0MWVlZktMdDNyY2kycGdpQktGb1dMR0wyN2tkNlBUYVoxY09IcU40ZkJCWFliZ1FCaU5qeTNWSm0xMTVFRURnblY5WC9IWHJheHhVaEVnQWd4TzdhYS81K0dWSlFZcjZCYXRSUTg5V1h5TUd1WXEyZnYzTE5OR3MyVHMvQUhFZlZEZEVzK0FJNU9WWWdLMFNyaFQvaWpLUEdpeG1aZ0RIaDZrSUdCY29OOUw5TUpEYzM3WUs1NW9YZmd0a01PaDEzNm94NnlBQVVVTUVkNnpYenZ3Q0M0Ry9mVnJSdnAvbHNKbkp5ckhCWnRkOHNBSXBpd3crcityK2ovWFloNFZHOXdsbVJ0UUl3QUxOdW82SlZTKzAzQzZnbWpTcGVnL1ZDZ0dXc2EzOUNPaTA5ZTViaXpkWVZ6c3F5N0VleVRtMFNBQnNNOU1TeFZPTkdjZ1A5RDd0MlR6MTJzeG1iTFVpaE1IMDhYWWlMMTIxZVgrSFRINERueGRRMHdzdXo4c1hsWSs2YlJvN1ZibHhOMVE2dWJGNmlrTi9ySGZVSHc1VjkrMVMrWUdKbUZsSlF5TjYrZ2dHZ3dXZ2NOVjVNejlCdFdrYzRPZ0RIVjZiSGtmSDhVYUw4alRRYXdzVVoyZHZwMXY1SStOUXdEaHNsVlBqVUNZcXFFaFlCQUdBUnFrTDdCZ0FzaUVEVFFGRlZVNDh1emhWblVWNitjY3hFTVNsSkg3cVJyT0dOOUhxWlJTOFBrZjZDU3FuL2VTM2g1MnNZUE9MNWJKWmZxa2tTUUJDcTVvUlpucSt5ckNyRFo1UEpPR2FpbVBoRXZ5dU04UENRVytUTFN5UUFVQ3IxRzFaUnRRTHozeDM4NzNQcFpRTERHSWVQRmxQVDlEdTN5Q2RpdkFKRUFnQ1ZTcnQyQlJWVUsvKzlJYUs4dDBtVjJDS3IxVEJrcEppVnJkKzZVYlpGcnd5UkFKQmFyVjMzSXhuZ2J4Z3lVb2gvSU5kZHBWaGtNQnFIanhZek12U2IxeFBlWG5LRnZFSkVBZ0NrVXVrM3JxNnM5aUN6eUtZdWJOc3NzK2hWSk5MVGVPbkYwUjcraXl4NlJsMm9MbGZJcTBva1dYdVExUVVaVlVNa1dYdVExUVVaVlVNa1dYdVExUVVaVlVJa1dYdVExUVVaVlVNa1dYdVExUVVaVlVRa1dYdVExUVVaVmJabmc2dzl5T3FDVEtRcWdhdzl5T3FDVEtRcTRwS3NQY2pxZ2t5a3FvRk5leGd5OHBXTmw3REpaQnc3U1ZZWFpDSlZnZlpBK3RmTTd6ZFFUSDMxVG5ZUlJlUHcwZUtUSkZsZGtJbFVCZHFEYnRWeU1zRGZNR2k0K0RpeEtyMUhPejFRRkxMVFYwRldOQTBLQmRMcHF2TEZHY1l3WXJTWW5xSDdlYTJzTHJ4U29QNmhmSkZlcDl1NHhqaHNsR25HcDRwT0hYQkdKbGs3V05tblo2WDI5UlVFTnZ5WW1KREFIanBNang4REpGbVpFckxIVGdneDk5bGpKNmltalpCanBaWjI4OWR1Y0wrZlJub2RmeTlHZkpTbzI3U085UE9WMjlZcmhSSTNQNm1hYUlGaDhudjE0MzQ5Q1FvRjBtcDFhMzVROXVrSkFPWGZqQTRCeHRiVjY4M3pGZ0pGQWNkcjVzNVdqLzBRQ0tJaVdRRnd2NTQwanAyRXpXWmdHTlhRUWRwdkZvQ2FCbHpldmZzUUVFaUl1VzhjTm9xUGlnYUNJSDE5N0k0ZnF2Z3VNVEprSXBYUTdiUDVidy9nVHA5RlRvN1liQ2FjbmNtNmRTcTJFeDJJSW44OUVsc3NTS3ZGSmhOU3Fhakdyd0ZGVlN3M0lmcU9tSjZKN1BUQXNwZ1hxTWF2SWEyMi9FUUNJQWp4WVlJUS94RHBkZGhzSnR4YzdRN3RKV3NGeUExTGR1MnFXSGdBbFJLYnphQ2hjWjZCNnR4UjlXN2ZpbG8zYkRFWXVITVhrRm9OQmlOWnQ0NXE2Q0JVVWUrTzJYdUEyYjBQYVdoc01CTGVucXFCN3hKMmRoVXJGaDhaWlZuK0l6YWFzTVVDR0lPQ2tsdVZUS1FxQm5mK2dwaWNRZ1lGNHJ4OFJaZU9tb1Z6eVpwK0ZSZEdmSDFNMHo3aGI5NmttalRTZnZjMTFiUnh4Vis3UlROZ1dmYTNrNFN2ai9iTE9jcCtiMVc4citqVEN6TU1FN3FEY0hXaHAwOGhmWDNrVmlXN2RsVUovdnhGdzRmalZPOFBVZzE0RjZlbGsvVkNLaStSY1Zldm1jWk0wcTVhcG1qUnZMTHhXMjV1ZnQ4QjZtRkRWY01HVjhITDNycU5hRFZaUzk1a1dMWklWY3VpQzVjTUkwYXJoZ3pVZkRZVEFLQVNodWdabzJSdmo1eWNDR2VuS3VoQzdPeVFpd3ZoNGx3MTlkaWdudHlZWG1YOEkrTklmTVJGdzdCUnFxR0RORjk4VnJVNVk0WUJuc2RXcG1xeTRqak1NSElqa1BFaUVvazdjOTR3Y3F4cXlFRE4vejU5T2VxSVlaajgvSHorMzk2VDlSK0NXUDREZThxVkpEOC9QenM3bTZ2Y0dYT3ZuR3ZIblRsbkhETkpOZURkS3JkRnp4L1hybDNiczJkUGJHeHNTa3FLeFdLeHM3TnpkM2V2WGJ2MjRNR0RBd09maVlVTUJzTVhYM3lSbEpRRUFLKy8vdnJISDM5Y05MY1RKMDVzM0xoUnVwNCtmWHJUcGsxdHFkQ3pnOVFZWTRWQ29kZnJmWHg4ZXZUb1VhL2VNMDdqOHVYTEwxeTRVRFFKUlZGYXJkYmIyN3RMbHk3Tm1qVXIrRzFpWXVJWFgzeGhNcGtBb0V1WExpTkhqaXo0YlhSMDlMeDU4eFFLQmNiWXc4Tmo0Y0tGR2sweEI2VXRXYkxrOHVYTENDR080MGFQSHQybFM1ZlNhKytYWDM0NWV2Um9Ra0pDU2tvS3k3TE96czVlWGw2Tkd6Y2VNV0tFazlOZm5ubDJkdmJubjMrZWxaVlZTdFZ0M2JvMVBEd2NBT3pzN09iTm0rZFJ3cFNScUtpb3I3LytXaFJGaE5DNGNlUGVmUFBOWW04cjlvazNiOTVjdEdpUktJb2VIaDd6NTgvWDZ3dFBuVGw1OHVUYXRXc0JBQ0gweVNlZk5HellzSWlIVTNYZ3psM0lybFhmOU1WOC9JK0JpN3FkKzJabkx1cDI1Yk1TemVhOHQ5NWo5aDRvK2hYUDgxOS8vYldMaTB1eHY0U2ZuOStXTFZzSzNwK1dsdWJtNWlaOTI3MTc5MklmOTkxMzM5bHkyTGx6WjZGVUpjSFYxWFh1M0xsR285R1dUL2Z1M1V0UDR1RGdNRzNhdE56Y1hGdVNHemR1Mkw0ZE5teFlvWUtscDZjWDVPcm16WnVMRmo0cEtjbnh6OGtmQkVGRVIwZVhVckVwS1NtalI0K21Tamlkb0huejVyLysrcXZ0NWtlUEh0bDRXMUxWalJrejVtbFlpOUNkTzNkS2V1N1lzV050VC9uZ2d3OUt1cTNZSng0NGNNQ1c5dXV2dnk2YWFzV0tGYlliRGh3b3BzMVVtV3YzVkYwWTFGOHo5L1AvdWkxYXNHREJwNTkrbXBtWldleTNEeDgrSEQ1OCtFOC8vZlNYZjB3UXRuWld0RE9UUUJjNFJFT3BWQlpLVlJJeU1qTG16cDA3Wjg0YzJ5Y2w1VzlEYm03dTRzV0x4NDhmei93Wi9sRVU1ZURnSUYzcmlnaW5ycTZ1MzM3N3JlMWZxWThvZE0rYU5XdHljbktrNndrVEpvU0VoSlQwOUp5Y25JRURCNjVidDY0a1Qvank1Y3Q5Ky9iZHZuMjdJQWhTSmRnTVZFbXZwdFZxcFF0bloyZXloSkhEdUxpNFBYdjIyUDQ5ZS9hc1pIT0tDV2FLZTZMMGk5aHMvcDA3ZHdxbFVxdlZoWDYrZjhTMTR5TXVHb2FQVmcwZDlCTEVSYkd4c1V1WExyWDlXNzkrL1k0ZE96bzRPQ1FuSi8vKysrK3hzYkZTa0RCeDRzU0FnSUEyYmRwVXlVT2RuSnpxMXEwck9Xd1k0OXpjM0tTa0pGdFRXTGx5NWJ2dnZ0dXlaY3VDU1ZRcVZjT0dEV21hbG5wRWc4R1FrcEtTbXBvcWZidHQyN2FoUTRkMjdkcTFMRTl2MjdadHk1WXRMMTY4Q0FDblQ1OCtlUERnVzIrOVpmczJLU2xwM2JwMTByVzN0L2YwNmROTGlaMCsvL3p6MDZkUDJ6N3g4ZkZwMEtDQlVxbU1pNHVMaW9xU2dpdUR3YkJ5NWNwZXZYcnBxbTdHOEtsVHB3cDJmTEd4c2R1M2I1ODRjV0lGc2twTlRaMCtmZnJSbytVN0RMc0tpTVNkT1c4Y1BlR2xVUmVPSGoyYWw1Y25YWThlUGZycnI3KzJkV0RKeWNuejU4OWZzMllOQUFpQ2NQUG16YW9pVXJObXpYNzU1UmZidnlhVEtTVWw1ZnZ2djVmQ0twWmx0Mi9mWG9oSXJxNnVPM2JzOFBiMmxneUl4V0pKVDA5ZnNXTEY4dVhMcFJzT0hqeFlSaUtwMWVyLy9lOS92WHIxNG5sZUVJUWZmdmloSUpFT0hEaVFsdlowT1V6ZnZuMXIxS2hSU210ZXRXcVZkRTJTNU96WnN6LzQ0QVBwL3J5OHZMTm56ODZjT1RNbUppWTRPUGo3NzcrMzJaa3FRY0hhazdCbno1NEpFeWFnQ2syU1BuNzgrSll0Vzk1Ly8vM25wOXB4Wjg0WngweDhPZFFGbTVNZ1hXZzBtbG16WmhXTWpEMDhQSll2WC83ZWUrOU5uano1OU9uVEJaM3lTb0lrU2FvQTdPM3RnNE9ERnl4WTRPbjU5SUMybUppWVFra1FRbHF0MXBaUXI5ZjcrL3QvK2VXWFFVRkIwZzEzNzk2VjNLZXlvRXVYTHMyYlB4M2p2bmp4NHZuejU2WHJsSlNVWmN1V1NkZHVibTRmZnZoaEtaa2NQSGpRZGoxcDBxUjU4K2JaV0dkdmI5K3JWNjl0MjdZTkd6WXNMQ3lzUllzV3FETHJBSjdGMmJOblQ1dzRJVldqL1ovSHZVVkdSaGIxME1vSWpQRm5uMzJXbkp6OG5JakVuNzlvSEQxUk5lQWR6YnpQNFdXQnpkOWdXWGIvL3YyRnZsVXFsZHUzYjErNmRHbkxsaTJMOVpXclVJTjJjWEd4QlZGRjVXT01NVk5rRUV5U0ZtMnFmZG1KaEJDYU9uV3FRcUVBQUt2VnVtalJJdW1KNGVIaHRwNWwyTEJoZGV2V0xTbUhyS3lzNDhlUDJ5aFhyUDcyMm11dmJkcTBxVkdqUmlWRkwrWDZ2S0RObEtyQ3djRmh6cHc1WGw1ZWt1eStlZlBtQ3Y4aVNVbEo4K2ZQTC91OG40b1Q2V1ZTRndyQ0pwdnlQRDl6NXN3aFE0Yjg4c3N2TVRFeFZxdTFqTDlyUlVZaGl0TzRybCsvTGtucXhZb0VCRUhZRlpsb0d4MGRiYk5kZG5aMkVqSEtpTDU5KzdadDIxYTZQbmJzMkwxNzl3QmcwNlpOdHR5R0RoMWFTdkxJeUVncGdBU0FuajE3K3ZyNmxyY1NTckpScGRzdXM5bHNpOG9DQWdMR2pSdG5NNjA3ZHV4SVQwOHZWeGtLL3JocjFxeVJaUGQvTUVaNm1kU0ZRbWpYcmwzbnpwMGxWMEVVeGJDd3NMQ3dNR2RuNTFxMWFuWG8wS0ZidDI2dnZmWWFYVVhuMk5xUWw1ZDMvLzU5aEJER21DQUlpOFZ5NjlhdGhRc1gyclN5eG8wTHo5QmxXVFl5TXRMRHcwTWFPZUU0N3Q2OWU5OTg4NDB0bm1uY3VIRjUzYWVSSTBmKyt1dXZVZ1M0ZWZQbUJnMGFYTGh3UWZwcTdOaXhoVWEwQ3VIKy9mdTIvcnRWcTFZVnFJUno1ODROR0RDZ0tJc2lJeU5MU1hYbzBDSGJEZjM3OTlkb05JMGJOOTY3ZHk4QVBIbnk1TXFWS3oxNzlpeDdHUlFLUllzV0xTNWR1aVNadUhuejVyVnExY3JKeWVudlRWTUZSbURZMCtleWE5VTN6VjJJbnp1ZXp6alNvMGVQQ2tiYmhWVHM1czJicjEyN3R1RDlHUmtadHNpa2YvLyt4VDd1eHg5L3RHV3lmLy8rUXFtVVNxWExuM0IxZGJWLzlseG5GeGVYMk5oWUtaLysvZnNYbEhGZFhWMmxKRVdWOUFzWExraEpvcUtpYlBMM2hBa1RTcXRlanV2V3Jadk5CdHFHdVRRYXpkMjdkMHV2ejdsejU5b2VmZXpZc1RMK0NvbUppWkluVmhhNHVMakV4TVFVeXFGSGp4NDI5ZVhodzRjWTQzdjM3ams3UDUxQytkNTc3NVh5Uk51UGRlVElFUnR2TjIzYU5HM2FOTnREUC8zMFU0eHh3ZEdPSTBlT1ZNRTQwc3VuTGhSRmpSbzF3c0xDUWtOREJ3NGNXR2pNMUdLeFhMNThlY3lZTVNOSGpwVG1DbFFKV0piTi9CTVpHUmsyMlZEeStoWXVYQmdRRUZBMHJNck96czdJeUpDUzJHeVhoSG56NWhXYTMxQkdEM1BVcUZIU3RkRm90UGxGUTRjT3JWMjdkdWxwQzhaajVYSXBLNFBIang5ZnVYSkZ1bTdUcG8za1R3WUhCdzhaTXNTbTVoVWNqeTZMekdCdmIvL1paNS9acUxobXpacTdkKy9hZXFLcWNlMmVxZ3NEMzMzSjRxS2kwR2cwZ3djUEhqeDRjRXhNek5telo2T2pvKy9mdjMvcDBxWDgvSHpwaHA5Ly90bkZ4VVVheXBUNnBMSTQ5T1dDcTZ0cjgrYk4zMy8vL1hmZmZiZU1TUndjSEpvMmJmck9PKytNSGoyNllnL3QxS2xUNjlhdHo1MDdaL3ZFMGRGeHhvd1pmNXRRcFZJVmpGc3E4R2hQVDgrbVRac1dkZTF1Mzc1dEV6d0tZZWZPblJrWkdkSzFyNi92clZ1M2VKNm5LTXBHQTR2Rjh2dnZ2NWNrYjVTa21qZzVPYzJmUDMvOCtQRUFrSk9UODcvLy9hOXo1ODRFUVpReXliQWNSUHByWmNUTGE0dUtJamc0T0RnNFdHTEx0V3ZYVnExYXRXM2JOcFpsQVNBc0xHemF0R25WcWxValNkSVdwSlkwTzdNZ3dZbzYzSFhyMXJYSlhLSW9LcFZLWjJmbndNQkE2ZEhGd3RIUjhkTlBQNVhjZDFFVUtZcHljbkx5OS9ldlU2Y09XWWx0WVhRNjNZd1pNeUlpSW15TjVxMjMzdkwzOS8vYmhON2UzclpybStwUUxyUnAwMmJidG0xRlA1ODVjMmJCQ1ZZMkZOTGxObXpZc0c3ZE9veXhGR29XZEtRblRweFk5ckJXZXZHeFk4ZnUzcjM3MUtsVGtsbDc5T2dSU1pKVlFDUSs0cEpoK0tpWFVsMG9GaGFMUmFsVUZteVJDS0dtVFp2Ky9QUFBnaUJzM2JvVkFOTFQwLy80NDQ5cTFhcHB0VnBiVkpPV2xpWjFpa1dkdDRJYWVxRnYvZjM5U3graUtRcTlYajlod29SaUo1aFdFaDA2ZEtoZnYvN05temNCd01uSnFWZ2h1eWpxMXExTDA3VEZZZ0dBRXlkT1RKNDh1YXFNYzBtQi9xMWJ0KzdldlZ0UXNDbjJ0b3NYTHg0NWNxUmZ2MzdsRWc4UlF0OSsrMjNuenAxemNuSllscjEyN1ZvVnlOL2N1WWludHVobFoxRnFhdXBYWDMzMTdydnZ0bXZYempaWnV4QnNzUWZQOHdhRFFmSnFiQ09QY1hGeHhVN1NrOVJreVdtMERiTVdTN095ZDV5RjRxSXFkR3R0NXFWYXRXbzFhNVpwVTZTUWtKQW1UWnBJMTZkT25icDA2Vkt4dDUwNWM2WWt4NitrL3I2a3ovZnMyVlBHY1I2YmxsQXVOR25TcE94ajduOVBKUDdTRmRPRUtjcTNlNzhJSGgzU2FvQ2lVRlhNTGtFMERVb0ZlclpIejh2TG16MTc5cDQ5ZXk1ZnZyeHk1VXJiTUU1Qi9QNzc3N1lHVjcxNmRWdC9iTE5JUllkeGI5NjhlZWpRSVp1dldHZ1ZScFYzMVdXTVpFcjcwZitjY2lxS0lsTzJ0WThxbGNvMkk0bGhtQVVMRmhUdFVMWnUzZHE3ZCs5cDA2WlZMSWdxaUlTRWhGMjdka25YOWVyVk8zRGd3SkZuc1dmUEh0dFkxcGt6WjJ5aFZMa3dlZkxrTXNaWEpiaDJWaXQzUFJKNEhrVFJOUE56WmUvdW1nVnpYd1NMSWR5UHd4a1p3cjM3WktYWHJndnhEOFNrRk9HUFdFWFhUcllQQXdNRGh3MGJKbm5lVVZGUjc3MzNualRweHNIQmdlTzR4TVRFVFpzMjJTamg2K3RyRTlOc1pncGovTWtubndCQXUzYnRkRG9keTdKeGNYR3paOCsyVFNkOSsrMjNxM2FhV2JudzVNbVRrbFNzZ0lBQXV3cHVwZlFVZmZyMFdicDBxY1NmSTBlT0RCbzBhT2JNbVg1K2ZncUZJaU1qNCtEQmc5OTg4dzNMc212V3JHRVk1b2NmZnFqTXBOV1RKMC9hcXJSLy8vNTkrdlFwZXMvdDI3Zm56WnNIQVBIeDhkdTJiU3VqajFvUWJtNXVjK2ZPN2RPblQ0WEdrVVRSOU1YOFRJZnFXZFY4czF5OVRRdS94UzhHbUVPSHN3TkNNaDJyWi91SE1BZkRLelVlZFNzcXA4V2JtUTd1V2RYOXpFdFhZRjZ3ZlJVZkgxK3RXcldDaW5DTkdqVWFOMjRjRWhKU2FIaG42ZEtsdGxSV3E3WFEwSk8wbE0zZDNiM2dZTG1qbzZOdFJLamdPRkszYnQzS1dITGJPSktYbDFkaVltSlpraFFjUjFJb0ZMb1NjT0xFQ1ZzUzIyaFNVRkJRUmtaRzJTdDJ3NFlOenpnOEJGR3RXalVQRDQ5Q25PblFvWU8wWXFyWVVaMUNtRHAxcW5SRHdYRWtXOHlERURwNThtU3hDZS9kdTJkNzhUZmVlRU1RaEw4ZFJ3S0E5ZXZYRjhxbmtBUmE3RGhTTVJaSitDT1dDZDJPV1JZcEtNd0xRblMwNlpNNThPL3ViWUFRaUNMNzJ5a3hOUjA1MkF1UEhsdVcvS0JvMnhwVnRBZTFybHJQWDdwTWVIcUtPYm5XMWV0VmZYb1NmMjR5WExObXpiVnIxdzRmUGp3M04xZHljaDQvZnZ6NDhlTkNPVXlZTUdIU3BFa0ZIWnZ2di84K09qcmFKdFFXWFEralZDcFhyVnBWY0VUSTFzK1YzVW1yUUpLQ04zTWNWNUt1V05DRnE5aFRBR0RreUpFSkNRa0xGaXl3ZVlhMm1SWTJkT3pZOGVlZmY3YjFTbi83cktJM1hMeDQ4ZkRodzlKMXExYXRDczJMdHlFb0tLaGV2WHFTbEI4WkdYbjc5dTBHRFJvVUhLc280OXQ5L3Zubmh3NGRzaG5BTXNkSUlzWThqMGdDS0FwWUZsc1pwRkFnbmU3Zi9OTnFrVTRIQ0FDTFQzY1A1L25LYkNPT2RGcEVLVUFVQVFCekhINDJuTzNUcDgvZXZYdDc5ZXBWa2p5MWN1WEtKVXVXRkZLWi9mMzk5KzdkTzJqUW9HS0hJOTk0NDQyZE8zY1duQUlqclR1U3JpWFJvaXd3R28zU1JXNXViaG4zVGhBRW9TUkZxOUJ0dG10YmVTUzdVWjRlRDgyZlAzL3o1czAyNGFHUTBqaGx5cFJ0MjdiWmJJSW9pclpLc0wxYUlkZ0NLcHU0c25IalJ0dlV4eUZEaGhSY2RWZW9NRFkzd1dReUxWNjhHQUJJa2l6NnhJSmlqeTNuZ3NyK045OThVN295Vkl4Rkltc0ZxSWNOdFN6NVFjek1VclJxb1Z2Ky9RdHlWQmJWcklscCtxZGllaHJwN1VWUG1ZVDBGVCtUQXVmbmcwcUZqVVpFMC9TWUQ4Z2Ezb1Z1YU4rK2ZaczJiWTRkT3hZUkVaR2VubTZ4V0tSMXB2WHExZXZkdTNkQjM2OGc2dGV2SHhZV05tTEVpUFBuejZlbHBVbE4wOEhCb1hIanh0MjdkeSswQWxTcjFjNlpNMGN5WEVVbkxwU0VFU05HU1BHWW5aM2QzdzYzUy9EdzhGaTBhRkhSOWxGVWRyTmRqeHMzcmxPblRwS0RXb0dJN3YzMzMrL1JvMGQ0ZVBqTm16Y2x3cXZWYWs5UHowNmRPaFd5SGc0T0R2UG56NWVHdVV0YWVOdTNiMTlKMU5Gb05OSkVrM2J0Mm5sNWVTR0VTSklzYVRLWGhLRkRoMW9zRnA3bk1jYk96czZpS0RvNk9oWjlZa2hJaUcySzArdXZ2MTdzR3htTlJrbXhLTGFjSld3UXlRdnNzUk5pYXBxeVoxZkMvUVU2NUljOWVzSTBiYWIyNi9uS1ByMHFtSVVvbW1iTzVpOWZwYWRPd2tZVGNuZFhkbW9QTW1SVXNwY3Y0V05TMmJQYkMxaGNzbFlBNGVsRjFxdGJZY0hZTk9Nejl2aXYraDFicWJwMTVKOWZ4ajlNcEJjVjJHd0dqc01WblMxcW1qS1RQWFhHYm1jb0dWSzd2SzRnWmpta1ZLREtDY1F2UDFoV3pNZ0VnaUJjWEVCQkFjY0JTUUpCeUVSNmVXQ2FOSldMdUtqZnZLSHNMT0p2M0dUM0h4SWVKb2lwYVdDMWdscE51RmNqYS9xcDN1MUwxZ3NwTGVIbHE5YjFQd05DZ0JBOWFWeEpOK044Zy9uN1plS2p4MGlsVkkvNWtHcjhXbUUvTkMzZHNuZzV6c29DamxmMjZWblNadi9ZYkxaOHQxUkllQXlDb0dqemh2ckQ0U1cyODcwSDJJUGhvTk1DMktRYURBZ2hXbzEwZXJKV2dLSnRtNzg5OTVZN2RaYlpFZ29rQldvVlBmV2pnbU42bUdYWkU3OGhwUktwVk1qVmxZKzhxUjc5QWRMUU1wRmVGaFpObnNGRlhOUnRXRVUxckY4bUU4UXcxdFVickQrdUZoSVRFVWtCUlVtSG5RSFBZNTVuZHUvVHpKaXNHam1zcE9UTS9rT1dqYXNKdGFOb3pVTWFXcnZzdStLZllyR3dldzhJZDZNQXNKaVpaYmM3ck5BeGhEZ3ZqOW14VzB4OERNQWdqK29sRVVtNC80ZDF4V294T3djd3oxKzdydXphaWZEeUxKNERWNjlidDI1RXRHTVJ6Uk5oTENLRmdnd0tVZzhicFA1Z0JLaFZKZGtjeTQrcm1YMjdDSlVkWm94RU5UZk5uTDhtamlHZGpxemhqV2lhaTdqSWJkOUZPRHNCZWlVYTJNdHZjMEVVVGRNK1lVK2UwZjI4am1yMFdoa1RXUlorYTVvMVc4ektKbHhkZ1ZhREtFcnpQRUJERTI2dVluS0tjZklNODd5dmluVXljVjRlZi9rcW9YZERMczZFb3p0NzdJVHdSd216b1FrQ09kZ2plMmZDM1pzN2RjYTZPYXhJVUVnaVJ3Zms2SVEwenFqaythbmNzZCt3bFNFOHFoTWUzdUtqUkdiUC9wTHVSQm9OMGpnakp5Zms2QWhLRlZBVVVCUlFDbEFxa0ZhTGFJMFFjOTg0WlpacDloZFF3bkNURVBkQXVCbEZPRmRIcmk1STY4Q2RPUWZQNm9ISTJSbnM3YW5YV3lqYnRsRjBhQWYvNkVsMnNrVjZYa0hWbityQ3JsQ3FUbGs5T2lac3ArV0hWY2plRGlrVTJHQWtmTHlwMXhvU3JpNWlhaG9mZVV0OGtvUjBXakU5ZzlrU3Bob3lvT2hCbCt3dlIvbklXMGluQlFCRXE4V2taRDdpNHQrYytLSlFnTVZpK1c2SjRzM1dwSC81WmorSnlTbk12Z05Ba1lDUTFQMXp2NTZrSjQ0RmlpcWxXa0NoSUdzSElXa2V1aWhna3dYbjU0dFpXVWluUlNxVmRmM1BpZzV0bGQyN0Z1ZlhuUkV6TXFTeEI2VFZDREYvY0pldkt0NXMvVmVUcWw5WDZpTVVyVnFDS0FKQ01wSCsreDZkVFYwb000dXd3V0JkdXdGWUZ1bTAyR2hTRHgyay9uZzhHUmdndFQvaDNuM0xzaFhXOVQ4UmZuN2FaZDhWYzZ3WXhtejRFV0FaME91QVpVR2hBQXpzaWQ5VTd3OHU3ZlJvakpGZUx6NUt0Q3hlcGx1eHBGem5UUE1YTHd1eGNVaXJsV3dJMG1uNU8zZjVtMUZVa3hKblcyS3JsWEIyMHYyNGxQVHpBUUFzaW1DeGlobVp6TmJ0MXArM0lBME5SaU96ZGJ1eWM4ZENiTVJaMmN6dXZRQUlFQUtlQjZVU1oyVXpZVHNWYmQ3NGl6QUZwWVZYUUdaNCtZbFVBWFVCQUxqZlRnbDM3aUlIZTV5VHErallUcnRrRWRpV0R5RkUxZ25XL3JDRWNIT2ptalpXOWlwbUcyN2h3VU0rNmpiUUdoQkY1T29LSmhOb2FPNzBlZTdNZVVYN04wdC9OTkxybUcwN2xWMDZQVDJ5dW93RlBuVUdPQTVFRWRuYkEwbmczRHljbnNGczMxVUtrUUJqSUFqQ3ZacDBuTHZFQU1MTGs2cGJSOHpNWUEvOEFocWF2eDRweE1XVHdVSFBQT3ZLVmY3MkhhVFZBRUtnVWdIUEE2M216a1VJang2LzRrY1Z2clFkUm5uVkJWdEF4UjQ2ak0wV0VFVmtiMGQvTkI2S0xNSkRhcFZtd1JjbHRYVjIzMEh4OFJOQWlIQnhvVDhhajV5ZHNJaHhkamI3Nis5LzY0V0NVZ21pYUZtOFhFd3E2OWFFL08xbzl2aHZvRlpqcTFVMWRLQ3lhMmVjYndDVmt2M3RwSmljVXZyanNNVlMxTU5VZHVvQUNBRko0ZHc4SWVGUllkS2VPUWNXSzJZNXd0TkRQV29FcUZSQWttSktLbi8rQXJ6YWVCbUpWQ0YxNFduU3pFeis3ajFRS2JISlREVnVWTkQxTDVOYm1KUExIZ3dIZ2dDTGhheGZWelZzTUZrN0dDeG1VS3Y1aTVkeGJza1QzaVJKa09PUXZSMS82WXBseGVxeW1xUER4OFVuVDRBa2tWYXI2ditPb2xON0lBbFFLc1VueWZ6bHF4V29QS1RUZ2tJSmdMRW9ZS09wa0xGbGp4d0h0UXFzRmtXYk4raHBrNm02ZGNCcUJaNW5kdTdCWm90TXBKZFJYZGl4dVFMSFVlTHNYR3d3QWttQ0tKQTFmVXVMMTR1MUQxSFJRdndEUktzQmkxVDl1a2lsVXIzZEc5RTBVcXY0bTFIc0x5V3YwN1F5Wk8wZ3NxWWZObHZBd1o0SjI4R2RQbHVHNS9IY3BTdEFVbUMxa2pYOVNKOGFpamF0eVhwMXdjb0FZMlYyNzRNS0hPOUZVWWhBVW45VVNJNWpEeDhUNHg1SU01aVZuVHNndFVyUnZpMElJdEpxK0N2WEtzWmJtVWd2c0xydzIwbTduZVhRNko0aEVzUDhPYThjVmVEb2FQYkFJWnh2d0lKQWVIZ291blFFQUVYYk5tU0FQMllZWUZrMi9FaEpXakEybTZpUU92U2NUeEZOSTRSd1ZyWmwwV0lBUURwZEtmSXhkL29zZi9rSzBtaEFFQlU5dTRGU2liUWFaYmZPd0hPSXBybXo1L25ya1JVZzBsUFpBR040ZHNkai9zSWxBTUFNUzNnOW5hV2xhTjRVT1RvQXh0aGc1RjV0Nys2bElwSnAwbFR1N1BueXFndlBhZ1hDWDRwdE9mZmlFWk9TMlpPblFhRUFpMVg1ZG0rcWZqMEFRRTZPaW5adkFzY0JyZWFqYmd0eDhTVzVvOWhpVVhicnJIeXJwNWliaHh6c3VRdVhyQnMzZ2JTWXBRUXdldzdnbkZ6TTgyU2dQejNpNmRFSnltNWRrSk1USUlTemM3aUlpK1d1QVpJc1ZyRG1yMXpsTGw1R0dnM3d2S3JmVzBRMU53Q2dXalJUZHUyRXpSWlFLdGpEUjhWU1YreklSSHFwMVlWQ1VDcUFJaVVqZ011NUlRbC8rYXFZbUlUVUtsQ3JrTDBkZi9VNmYva3FmK1VhY25aQ09qMVNLc1hIVDBvY0trVUlXNndBUUUrZlF0VU94bVl6VUtSbCtVcnViQVJSd21vUk1TT1R2M1lkMUdyQUluSnhGdUxpK2N0WCtjdFh4YXdzd3FNNkZnU2dLUGJ3TVp5VFc3NGE0UGkvYkdBQlJqRTc5K0xVTkZCUXlNRWV1VHBMdmh4LzdRYmg3WTFVS2tUVHdwMjc3SkVUcnl5UlhncjVXeFJOTXo1alQ1N1JiOTFZZ2Jqb21mYXMwWUJTQ1NJR3dEZ3J1enhlSGNmczNnY01BMW9OVWlxWm43WllOMjRHd0FBSVVSU29WU0NLUUpMc29jUDBtQTlRZ2FOaW50RWJBRWhmSC9YNDBhYXBNNUdkSFU1THQvNndFdWZsSVlVU000Vlp6UjA3SWNRL1FCb2FDRUtJZTVBL2VJUkVBRVNTV0JRUlRZTks1RzlFc2lkK1UvVi9wM3cyV1NJU1FjQ2ZLeFJ4WGg1MzZRcW9sRUJTUUJHV2I1ZGludi96N1VqUWFpUS9rRHNYb1I3NS9xdEpwUCsrUmFxY3VsQzRPdHpjaUdyVmdPTkFxZVJ2UjR2cFpkMTZocjhSeVowN2ozUmF3QUFNSStibTR1d2NuSjJMczNQRXpFeHNzUURHU0tNUkh5VHdONk5LejBvMWJMQ3lUeStjbXd0S0pYODNSc3pJQkdYaEpiZllZbVYyN2dXT0E0b0NVY1JHSTg3S3h0azVPRHRIek1qRStRWVFSYUFvWUJqdXpMbnlWU2ZMWWtHVWlJMytYSG5LblQ0bi9oR0x0RnJBSWpaYnhJek1BbStYRFF3REdJTkd5MGRjRktMdnlrUjZGZFdGd2xaQnAxVzgzZ0o0SHRFYTRlNDlac2Z1NG1selBiTFE5RG51d2lXY2t3c0tCUWc4cUZUSTNoNDVPVHo5YzNCQUdnMElBaWdvYkRReSt3NytUUmxVS25yS0pPVHNqTTBXcEZJQlFSVFZHOFEvL3VCdlI0T1VMUURTNi85Nm5KTUQwdXVlMmhhTmhqOS9RWGlZVUo1SUwwbmFud01wbGNqSkVRQ0E0NWp0TzdISkxBV05TS05CamdXZTVXQVBhalZnakdpMW1QaUUyYmxiZHUzK1MxYm9LWXMrbXNhZHYxQXBkYUZvbE5TM2ozVkxHQmlNUUZIV05lc1ZMWnRUVFo4NVVvVzdkTVg0NFRqQ3dVRzNjVFVaVkFzQWNHNGVlK1FZVUJRMm1jaWdXdHF2NWhYZWVVOFVMWXVYczcrZVJMU2FPLzZyY09kZTZRV21talNpcDM1a252TWxxSlRGYWg3c3NWOXhWamJTNllEajZFOW5LRjV2VWRqeE94OWgrWFlwVWlxRitBZnNycjMwckdtRkt4Q2hvbXVyK01pYlRPaE9wRkppaGlGOGZhUnBEVUw4QS83cURkQm9jRjYrb21zbnpiU1BpNWhIaSttVE9jSWZzVUJSM0xrTDJHSkJOQzBUNmNXR1Vna0VnZXp0QWNBMGN6Yjc2MG45bGcyVlVoZUsxa2o5dW9yV3JaanR1NGpxN21KU2ltSDBCTTBuMDZrRzlaR0d4aVlUZnozUy9NMWlNZUdSd01ZWlIwL1FiLzJacU9IRi9uNkt2eDZKTkJxY2w2L3MzbFhSdm0zUmJCWGR1N0pIVDRCR0k2YWtjUmN2L1MzelZjT0hzUHNQOHBHM2tLTmpJWXNrcG1jdyt3OEJTV0tMaGFwZlZ6MzZBNlF0UERHY0RLckZiTnNsUEhnSUNIR256dEpUUDRLQ1c3SlFGSEFjZHk2QzlQU1FlSVV0Rmo3cU5yTmxteEFYait6c0lEMUQwYUdkSk0xeFo4K0xHWmxJcThFV2k3SlRlNnA1MDJMZXJubFQ0V1lVc3JjWC9vamxMMTc1MjhsUU1wSCtiVWdyWkRNeUxUdDJzK0ZIOUtFL0ZWME1WMm4zRG1rK21jN2Z2Q1hHeGlOWEYvRnhvdkdqYVlTTEMxSXBzWlVSTXpKQXhNalJFVEl5Y1Y0K0ZnU1FKczVZclppaUNFOFAxZHU5aTgxVjBhUVI0VjRONStVREFIZmlkOVd3SWFqVXMwOElSMGZORjdNTlEwWmlpd1U5dXowcWYrR1NjUDhQcEtGeGZyNmlXK2VpTEFJQTVHQlAxYThyM0kxQmVoMGZjNStQdkVVMWExTFFlOFQ1QnRQVVdYOE5HWEVjTmhoQlFTRTdPNXlkUTNoN3FZY01BQUNjbDgvdTJpZWRzMGtHK2lzN2RTakpqRE43RHdESDRkdzhadHNPUmR2V3I4NTAxZjllak1SZnUyR2EvcG53TU1Fd1lqUjdNRnkvYlhQVnMwanF6dXNFNjVaL1QvaldFRk5TRVVraVJJaXBxY0xEUjJKYU9xSW9SSkppU2lyWm9KNXU0eHJTejBkTWZNS2Zpd0NWQ293bU1paVFyQjFVZko3MVFoVHQyMktURWRFMGQvb3NkK3FzemV0NytsY2tFRkowYUtmczl6Yk95eTkwQTNmeURGaXNJQWlJMWlpYU5TblJlUGZ1Q1JvYUVNS3BhZGJRN1g4NWRWSnVnb2hOSm13d1lJTUJHNDJZWVVDcEJJNFhVOU1KaityYVpkK1JJWFVBZ0w5NGlidHhFOUZxc0ZnVVhUb1JKY3hNVmJScVNUVnJnZzFHVUNxNWN4SGxpc3BrSWoxZmNMeGw4WEx1NUNrUVJlSE9QZVRtV3JVZVhlR1cwZTVOL2JiTjZ1RkRRS0VROC9QQWFnV1dCYXNGNStZQlNhaEhEdE52V2lmUjJMb3BsTDhaQ1J5UEdhdWkzWnNsanA4aXBIeXJGeEFrTnBuRWpDUjIveUVBUUFTQnpXWnNNR0tyc1pncHBBQ2FUNlpSalJxS0thbllhcFRHdGZpYnQ1ZzkrN0FnaUJrWlpQMjZWTk1TaWFUbzNJR3FYMDlNVDhNY3h4NE1GK0lmQWdCbVdHdzFZcU1KbTB6QWNzRHh3SEhBOFFDQXRCcXFVVVBOcktuNkhadWZibjBqaW16NFVaeVRqbzBtd0ZBMEVpdm9LMUxObW1DTEVUaE8rQ09PUFh4TWR1MWVWSDFCRU1Ua0ZLUlVBa1VodFVwTVRzWTVPYWpJZVk5VldUV3ZOZEN0WDhXZGkrQXZYaGF6c2tFVWdDQUpCM3VxUlRORnU3OWlBS3BCWGUyeUpVaWxBcEpROWk1dCtZUGlqZGUxcTVaaGt4bDRudlN0QVFCSXA5TjhPa1BNeWdKQkpHc1ZzN1VkNGVXcFhmWWRmL2txSUNUNVpvaWk2Rm5URUszR1ZxdWlhUk5rWCtKbUxFaXIxY3o3bkkvc2hWUXFBSXhVU2dCUTl1NU91THNodGVxdlBSc3dCcEpFVG82a2x5Y1pHSUFjSFFwcUpOU2JyYlZCdFlBaWtWcXRlS05sYVVGZC8zY0llM3NnRUxZeWY3T0s4V1VFd3YrZGxjQ1d4VCtZNXk3QVpoTlMwNXE1cytucGsxK1IxWmN5WkNKVktVU1IyWHVBTzNkTzBieTVhc0M3VUlsejZXVEllSVdKSkVPR0xEYklrQ0VUU1lZTUdUS1JaTWlRaVNSRGhrd2tHVEprSXNtUUlVTW1rZ3daencyVVhBVUZ3WEZjY25LeXlXUkNDQVVFQkNnVUNvUEJrSmFXWnJWYUhSMGRQVDJmSHZHUW01djc0TUVEZDNkM0R3OFBBTWpLeXNyT3ptWlpGbVBzNWVXbDBXZ1NFeE90Vml2R1dLVlNCUVlHQXNEOSsvZE5KbFA5K3ZVcGlnSUFsbVdqbzZOMU9sMnRXcldrSEZpV2xRNTR6TXpNZlB6NHNaZVhsM1RNWTFwYW1rYWowZXYxZVhsNVpyTlp1a2NRaEpTVUZIZDNkeW0zckt3c1VSUmRYVjF0TDVLVmxmWGd3UU12THkvcC9rTHZtSldWNWY3blFZd1pHUm5aMmRtQ0lQajUrZEUwblptWnlUQ005S1paV1ZsV3E5WFQwMU1VeFpTVWxPclZxeE1FSVoydjdPYm1ScEprVmxZV3d6QlNKZVRrNUVnSHdudDdlL004bjVxYTZ1Ym14dk84d1dDb1ZxMmE5SW16c3pOTjB3QVFGUlZGa21UQk15UXh4Z2tKQ1JhTFJhVlNzU3hyWjJmbjV1YVducDd1NnVxcVZDcWxNeWRkWFYyVGs1UHo4L09sTTBXOXZMeHNKenFiVEtiVTFGU3B6cDJjbkZ4ZFhRdW1KUWhDcTlVK2VQQkFPdDZYWlZsdmIyOVJGQm1HcVZhdEdzdXlHUmtaMWF0WHQxZ3N5Y25KRE1NNE9EaElwOXdXL0dYZDNOeWtYNlI0WUJrRkVCc2JHeElTVXJObXpZQ0FnSGZlZWNkZ01PemV2ZHZUMHpNd01EQWtKT1NubjM3Q0dNZkV4THorK3VzK1BqN0J3Y0ZuenB6QkdIL3l5U2ZlM3Q1QlFVRzFhdFhhdjMvL3RXdlhQRDA5YTlXcUZSUVUxSzFiTjZ2VnVtYk5tdURnNE1EQXdDNWR1bVJuWitmbTV2YnYzNzkyN2RvK1BqNkxGeS9HR0gvNTVaZlNVZlhYcjE5djFLaVJqNDlQdlhyMUlpTWpNY1lqUm93WU1tUUl4bmpMbGkzOSt2VVRSUkZqZlBQbVRWOWYzME9IRGtuRi91eXp6eVpObW1SN2k2aW9xSll0V3dZSEI5ZXFWV3ZYcmwyRjN2SFlzV04xNnRTNWQrK2U5Ty9vMGFOcjFLZ1JFQkRRb2tXTDJOallQWHYydEd6WjBtUXlZWXlIREJreWJ0dzRqUEhCZ3dkOWZId3VYTGlBTVdZWXBrT0hEck5uejhZWUwxcTBxR2ZQbmhqajZPam9wazJiMXFoUnc5L2YvL1RwMHhrWkdhMWJ0NzUzNzk2RkN4Y2FObXdvY2JWVnExWlhybHpCR0UrYU5NbkR3OFBEdzJQS2xDa2N4MG5GNEhsKzRNQ0JOV3ZXOVBEdzhQUHptekZqUm14c2JNZU9IYU9qb3pIR0gzMzAwZmp4NDBWUjdOYXRtNStmbjFUVjRlSGh0cGZhdVhPbmg0ZUhWT2R6NXN5NWQrOWUyN1p0YjkrK0xUMXUxcXhaZCs3Y3FWT25qcGVYbDVlWFYwQkF3UEhqeDcvNzdyc1JJMFpnakcvZnZ0MmhRNGZzN096OSsvZDdlWGtGQmdiV3FWTW5MQ3hNcWxqYkw3dGl4WXBTV283czJqMkQvUHo4MU5UVUw3LzhjdGV1WFpjdlh6NXc0RUIyZHJhOXZmMitmZnM2ZGVvMGYvNzgzTnpjV2JObWFiWGFMVnUydEczYmRzS0VDUWFESVNrcHlkZlhOeXdzYk51MmJhKy8vbnBjWEJ3QXJGNjlPaXdzYk5HaVJSYUw1YXV2dnVyWXNlT3VYYnVhTldzbUNNTE9uVHZEdzhQWHJsMjdZc1VLdlY2UE1jN0t5c3JNekJRRVljcVVLZDdlM2x1M2JxMWZ2LzZFQ1JNWWh1RjVQalEwOU96WnN3aWhwS1FraEJBQW5EaHhJaUVoWWR1MmJUYXJrcGFXWm51TGpSczNKaVFraElhR1RwZ3dnZWY1UXUrNFo4K2V1M2Z2N3R5NVUvbzNMaTZ1WmN1VzY5YXRFMFh4KysrL2I5eTRjVUpDUW1Sa0pNZHhaODZjYWRHaWhaVGhvMGVQenB3NUF3QWtTU1luSnk5Y3VEQW1KZ1lobEo2ZXpuSGNSeDk5NU9Ua0ZCb2FPbm55WktWU2FiRllIajE2eExJc1FSQTNiOTVjdUhDaDFXcE5TVW1oS09yMDZkT2hvYUdyVnEzYXRHbFR6Wm8xaVQrWExSRUVNWFBtekxsejV6SU1NM0hpeEpFalI1ck41b1NFQk9uYnpNek0xTlJVanVNU0VoS0dEUnNXRmhZV0dob3FIVW90NGNtVEp3Q3dZY01HNlRCc2c4SHc0TUVEaG1Fa2t4NFhGMWVqUm8wMWE5YjQrL3Y3Ky90djJMQ2hVYU5HRHg0OFNFbEpBUUNHWVJJVEUzbWVUMHhNckY2OStyNTkrd1lPSERodDJyVDgvUHlDdjJ5ZlBuM2tHS21zVUNxVktwWHExS2xUdTNidHNsZ3NibTV1V3EzV2FEVHUzNy8vOGVQSGpSbzE0amd1SmlabTZOQ2hiZHEwR1RkdVhIWjI5cE1uVDZwVnE1YVVsTFJodzRaZHUzWTVPam82T0RoWXJkYlEwTkQxNjllbnA2ZnI5ZnJ1M2J1Zk9YTm01Y3FWcjczMm1vdUxTOE9HRFJzMGFQRHR0OStlUDMrK1hidDIwdW5jZG5aMnVibTV5Y25KdzRjUGI5MjY5Y1NKRXg4K2ZKaVVsQ1Q1WnYvNzMvOGVQWG9rT1crWm1abmg0ZUZ6NXN4NThPQkJSRVFFQUtoVUt2V2ZHNVVBUUtkT25mUjYvYUpGaTh4bXMzUTR1UTAzYnR5SWpvNmVNV1BHMGFOSE16TXpBWUNpcURwMTZyUnIxMjdRb0VGMzd0eng5ZlZ0Mzc3OXdZTUg5KzNiNStycU9tREFnRC8rK09QUm8wZmp4NDgvZmZxMDBXZ2tTVkp5WHhjdFdwU2VudTd1N3A2VmxSVWZILy9CQng5SXhXN1pzcVhGWXRGb05BUkJrQ1NwMCtuV3JGa1RHaHJxNWVWRkVNVGh3NGU3ZGV2V3AwK2Z4NDhmT3pzN0c0MUdxV0FJb1lZTkczYnAwc1hkM2YzTk45OE1EZzZtYVpyanVDbFRwZ3djT0RBaUlzTFYxWlVrU2ExV2UvYnMyUTBiTnB3K2ZkcloyZG4yWG5xOTNtcTFidDY4ZWNPR0RUazVPWFoyZGhxTmhpUkpBS0JwV2lwRzY5YXRBd01EQXdNRDMzenpUUmNYRndEUWFEUlMxNkRWYWhGQ09wMHVKeWRuLy83OTkrL2ZiOWl3b1ZLcDFPbDAwaSs3WmNzV1ZPb01hWmxJejFZSFFZaWlHQjBkZmZmdTNSa3pablR1M0ZseWNyWnUzWHI4K1BHbFM1YzZPRGd3RENQOVFnUkJTUGRMYVVWUjVEaE84bFVrcDF5djExTVVSUkRFdDk5Kys4VVhYeWdVaW9rVEoyN2R1clZaczJiYnQyOXYxNjVkWEZ4YzM3NTlIejkrYkdkbko3blpFcW1rOWswUWhDQUlScU94VjY5ZUxpNHVLMWFza0w2S2lJaTRmUGx5UmtaR1RFek1xVk9ucElUS0FwdjlkKzNhZGNlT0hTRWhJYnQzN3g0OWVqUmJZSU8rMDZkUDM3bHpKeVVsNWNhTkd6ZHUzTEM1OTFKN2ttS1A5OTU3THp3OGZNR0NCWjA3ZDFZcWxlSGg0Ykd4c1VhajhkeTVjOGVQSDVjaXRPblRweWNsSlczY3VGR24wMGswSUl1YlEyd3ltWUtDZ2dZTUdMQjQ4ZUxFeEVTMVdzM3pQRTNUTE1zZVBueDQ3Tml4TnBzaklTOHZUeEFFZzhGZ3F3MmRUbWR2YjY5VUttMlRRbW1hMXV2MWRISGJRZ2lDSUFnQ3ovTVlZNDdqdEZxdDlETnhmMjdkekxLc3JUWUVRWkM0SVVWbENDR0tva1JSM0w1OSs4NmRPMWV2WHExV3E4MW1zMEtoME92MUV0TmtJcFVWRm9zRlk3eGt5WktEQncvT25Ea1RBSktUazRPQ2drNmVQQmtVRkxSLy8zNkZRdUhqNDdONzkrNGJOMjVzMmJKRnE5VjZlbm9tSnljM2FkSms3ZHExUzVZczBXZzBHUmtaV3ExMnhJZ1I0OGVQOS9YMVRVcEttalJwa29PRHc2ZWZmcXBXcXg4K2ZIanc0RUVwS0JvM2J0ejkrL2VUazVNUlFrYWowZDdlM3NuSmFjZU9IVGR1M05pNGNXTzFhdFc4dkx4U1UxTnIxcXc1Zi83OHRMUzA5UFIwalBHQkF3ZjgvUHdVQ2tXelpzME9IVHBrdFZyVmFyWGtqOTI0Y2NOaXNTeGJ0bXp2M3IxanhvenAwS0ZEWkdTa3JlbVl6ZWFEQnc4MmFOREEyZGxaQ3ZsRVVVUUl4Y2ZIWDdseTVjQ0JBNUwxYTlHaVJWSlNVblIwZFBmdTNZMUc0NlpObTlxMmJldms1T1RsNWJWOSszWkJFSEp6YzBOQ1FxWlBuNTZibXl0SkNGNWVYbUZoWVpHUmtWdTJiSW1JaUZDcFZGYXJWUlJGbG1WTkp0TlhYMzNsNysvLzhPRkRsVXJWdVhQblgzNzU1ZEtsU3oxNjlPQjUzdFlOMlRvamk4VWk4ZGxzTmxNVTlmWFhYNjlaczZaRml4WlpXVm1DSUpqTjVyWnQyNDRmUDc1TGx5NzUrZm0yaERrNU9XNXViai8vL1BPNmRldWFOV3RtWjJlSEVOcXhZMGRrWk9UVnExZHRJZ0hETUpLL0J3QzFhOWUrZnYzNnRXdlh3c1BEYzNOek5ScE5lbnA2bzBhTlRwdzRVYnQyN2ZEd2NBQXdHbzNlM3Q3ang0Ly84TU1QYVpvV0JPSENoUXVTUXlpTERhWGgxcTFiOWV2WHYzVHBrdTJUeFlzWDkralJBMk84Y2VQR3dNREFyS3lzeU1qSXVuWHIrdmo0K1ByNlN2SHV5SkVqUjQ0Y2FVdHkvUGh4RnhjWGYzLy9nSUNBYnQyNjVlZm56NXc1czNyMTZnRUJBVTJiTm4zOCtIRjhmSHl6WnMzOC9QejgvUHcrL3Zoamp1UG16WnYzOXR0dlk0elBuRGtUSEJ6czQrUGo3Kzh2S1JsRGhneVpPSEVpeG5qY3VISDkrdldMalkxdDJMRGgwYU5ITWNhcHFhbDE2OWI5N2JmZjFxeFo0K2JtRmhBUUVCQVFjT1BHalV1WExubDdlL3Y3Ky92NStTMWJ0cXlnekJBY0hCd2JHNHN4am9pSXFGT256cDA3ZHo3KytHTjNkM2QvZi84NmRlcElUOFFZRHh3NHNIYnQyanpQSHpseUpEZzRPQzB0RFdPOGI5KytKazJheE1URTlPblRaL1BtemRKdEhUdDJ4Qmhmdm53NUpDVEV4OGZIMDlNelBEdzhQVDI5V2JObWQrL2VQWFBtVEpNbVRYaWVQM1hxbEsrdjc4MmJONlZVbnA2ZU5XdldyRmV2WGt4TVRNSDZqNHVMYTlxMDZibHo1ekRHZCs3Y2FkbXlaVlJVbFBUdW8wYU5Fa1d4ZmZ2MjN0N2V0V3JWQ2dnSUtDZzJyRnExcWxXclZwTDdJR0hEaGczdTd1Nit2cjdObXplL2UvZXU5T0hZc1dQSGpoMHJYV2RtWnJacjE2NUdqUnFlbnA1ejVzekJHQzlmdmx5U2ZIYnMyQkVZR1Bqa3laTzVjK2U2dWJsSmovdnBwNThNQmtQOSt2VzNidDFhdE9YSXl5Z0tXeVJKZXRiK3VaOVdSa2FHd1dDb1diTW16L1BSMGRFMWE5YTBzN05MVGs2T2k0dXJYcjI2SkcwL2Z2d1lBR3JVcUNFbE1ScU44Zkh4Rm90RkZFV05SdE93WVVNQXVIYnRXbjUrZnIxNjlhUTRKejgvLzhhTkd5cVZxbVhMbHBMZFl4akd6ODhQQUI0OWV2VG8wU052YjIvYnZ3UkJlSHQ3VzYzV3pNeE1qVWFUbXBwYXAwNGRtMVNnMFdob21uNzQ4S0hVMTlhcFU4ZmUzajR4TVRFMk50YlYxYlZldmI4MnpVeE9UallhalpMZ0RnRDM3dDF6YzNQak9DNHhNUkZqN09mblp4UFFNekl5VENhVHI2OXZTa3FLd1dDUWtvaWlHQk1UNCs3dWJqQVlkRHFkczdOelhsNWVabWFtdjc4L0FDUWxKY1hGeGJtNXVkV3VYWnZqdUljUEg5YW9VWVBuK2VUazVJQ0FBSUlnSGo1ODZPTGlvdGZyV1phVjN0M0Z4Y1hGeGFXZ2s4YXliRUpDZ3FlbnAxYXJ0VnF0aVltSlhsNWVORTAvZWZJRVkrenQ3UjBmSDUrZG5TMHBLTFZxMWJLRlNabVptVGs1T2Y3Ky9rU0JUVmR1Mzc2ZGs1TVRFaEppdTAzU0pDUnBXN0pqMGRIUldxMjJVYU5HQUpDZW5tNDJtMzE5ZlNXQjN0ZlhWOUloR0liQkdQdjYrbGF2WGowcUtzclQwMU1Lc1FwQ0pwSU1HZkxNQmhreVpDTEprUEhTNFA4REFBcjl5UjdWRTJ6cEFBQUFBRWxGVGtTdVFtQ0MiLCAiZW5jb2RpbmciOiAiYmFzZTY0In0sICJoZWFkZXJzU2l6ZSI6IDAsICJib2R5U2l6ZSI6IDE5NDA0LCAicmVkaXJlY3RVUkwiOiAiIiwgIl90cmFuc2ZlclNpemUiOiAxOTQwNH0sICJjYWNoZSI6IHt9LCAidGltaW5ncyI6IHsiZG5zIjogLTEsICJjb25uZWN0IjogLTEsICJzc2wiOiAtMSwgInNlbmQiOiAwLCAid2FpdCI6IDM4OS4xNzIsICJyZWNlaXZlIjogMy43NH0sICJwYWdlcmVmIjogInBhZ2VAOGM5MzJmODMzN2Q5YWJiNGI5YWI5ODg5ZGVjNTFiOTkiLCAic2VydmVySVBBZGRyZXNzIjogIlsyNjA2OjQ3MDA6MjA6OjY4MWE6ZWNmXSIsICJfc2VydmVyUG9ydCI6IDQ0MywgIl9zZWN1cml0eURldGFpbHMiOiB7InByb3RvY29sIjogIlRMUyAxLjMiLCAic3ViamVjdE5hbWUiOiAic3VwcGx5Y2hhaW5jYW5hZGEuY29tIiwgImlzc3VlciI6ICJXRTEiLCAidmFsaWRGcm9tIjogMTcyMzQ3MDg0MSwgInZhbGlkVG8iOiAxNzMxMjQ2ODQwfX0sIHsic3RhcnRlZERhdGVUaW1lIjogIjIwMjQtMDktMDVUMTE6MDc6MjAuMzIwWiIsICJ0aW1lIjogMjk5LjA0OCwgInJlcXVlc3QiOiB7Im1ldGhvZCI6ICJHRVQiLCAidXJsIjogImh0dHBzOi8vcG9ydGFsLnN1cHBseWNoYWluY2FuYWRhLmNvbS9tcG93ZXIvY21zMi9pbWcvaWNvbi1mYWNlYm9vay0zMl9ibGFjay5wbmciLCAiaHR0cFZlcnNpb24iOiAiSFRUUC8yLjAiLCAiY29va2llcyI6IFt7Im5hbWUiOiAiSlNFU1NJT05JRCIsICJ2YWx1ZSI6ICIyNTdEOURDOTIwNDUyQTREOTMzQjhBM0NEQTlCNkJEMyJ9XSwgImhlYWRlcnMiOiBbeyJuYW1lIjogIjphdXRob3JpdHkiLCAidmFsdWUiOiAicG9ydGFsLnN1cHBseWNoYWluY2FuYWRhLmNvbSJ9LCB7Im5hbWUiOiAiOm1ldGhvZCIsICJ2YWx1ZSI6ICJHRVQifSwgeyJuYW1lIjogIjpwYXRoIiwgInZhbHVlIjogIi9tcG93ZXIvY21zMi9pbWcvaWNvbi1mYWNlYm9vay0zMl9ibGFjay5wbmcifSwgeyJuYW1lIjogIjpzY2hlbWUiLCAidmFsdWUiOiAiaHR0cHMifSwgeyJuYW1lIjogImFjY2VwdCIsICJ2YWx1ZSI6ICJpbWFnZS9hdmlmLGltYWdlL3dlYnAsaW1hZ2UvYXBuZyxpbWFnZS9zdmcreG1sLGltYWdlLyosKi8qO3E9MC44In0sIHsibmFtZSI6ICJhY2NlcHQtZW5jb2RpbmciLCAidmFsdWUiOiAiZ3ppcCwgZGVmbGF0ZSwgYnIsIHpzdGQifSwgeyJuYW1lIjogImFjY2VwdC1sYW5ndWFnZSIsICJ2YWx1ZSI6ICJlbi1VUyJ9LCB7Im5hbWUiOiAiY29va2llIiwgInZhbHVlIjogIkpTRVNTSU9OSUQ9MjU3RDlEQzkyMDQ1MkE0RDkzM0I4QTNDREE5QjZCRDMifSwgeyJuYW1lIjogInByaW9yaXR5IiwgInZhbHVlIjogInU9MiwgaSJ9LCB7Im5hbWUiOiAicmVmZXJlciIsICJ2YWx1ZSI6ICJodHRwczovL3BvcnRhbC5zdXBwbHljaGFpbmNhbmFkYS5jb20vZW4vcG9ydGFsbG9naW4ifSwgeyJuYW1lIjogInNlYy1jaC11YSIsICJ2YWx1ZSI6ICJcIk5vdDtBPUJyYW5kXCI7dj1cIjI0XCIsIFwiQ2hyb21pdW1cIjt2PVwiMTI4XCIifSwgeyJuYW1lIjogInNlYy1jaC11YS1tb2JpbGUiLCAidmFsdWUiOiAiPzAifSwgeyJuYW1lIjogInNlYy1jaC11YS1wbGF0Zm9ybSIsICJ2YWx1ZSI6ICJcIldpbmRvd3NcIiJ9LCB7Im5hbWUiOiAic2VjLWZldGNoLWRlc3QiLCAidmFsdWUiOiAiaW1hZ2UifSwgeyJuYW1lIjogInNlYy1mZXRjaC1tb2RlIiwgInZhbHVlIjogIm5vLWNvcnMifSwgeyJuYW1lIjogInNlYy1mZXRjaC1zaXRlIiwgInZhbHVlIjogInNhbWUtb3JpZ2luIn0sIHsibmFtZSI6ICJ1c2VyLWFnZW50IiwgInZhbHVlIjogIk1vemlsbGEvNS4wIChXaW5kb3dzIE5UIDEwLjA7IFdpbjY0OyB4NjQpIEFwcGxlV2ViS2l0LzUzNy4zNiAoS0hUTUwsIGxpa2UgR2Vja28pIENocm9tZS8xMjguMC42NjEzLjE4IFNhZmFyaS81MzcuMzYifV0sICJxdWVyeVN0cmluZyI6IFtdLCAiaGVhZGVyc1NpemUiOiA3NjcsICJib2R5U2l6ZSI6IDB9LCAicmVzcG9uc2UiOiB7InN0YXR1cyI6IDIwMCwgInN0YXR1c1RleHQiOiAiIiwgImh0dHBWZXJzaW9uIjogIkhUVFAvMi4wIiwgImNvb2tpZXMiOiBbXSwgImhlYWRlcnMiOiBbeyJuYW1lIjogImFjY2VwdC1yYW5nZXMiLCAidmFsdWUiOiAiYnl0ZXMifSwgeyJuYW1lIjogImNhY2hlLWNvbnRyb2wiLCAidmFsdWUiOiAibWF4LWFnZT0xNDQwMCJ9LCB7Im5hbWUiOiAiY2YtY2FjaGUtc3RhdHVzIiwgInZhbHVlIjogIk1JU1MifSwgeyJuYW1lIjogImNmLXJheSIsICJ2YWx1ZSI6ICI4YmU1YzE0YzA4OTI3MWM0LUZSQSJ9LCB7Im5hbWUiOiAiY29udGVudC1sZW5ndGgiLCAidmFsdWUiOiAiMzI1MiJ9LCB7Im5hbWUiOiAiY29udGVudC10eXBlIiwgInZhbHVlIjogImltYWdlL3BuZyJ9LCB7Im5hbWUiOiAiZGF0ZSIsICJ2YWx1ZSI6ICJUaHUsIDA1IFNlcCAyMDI0IDExOjA3OjIwIEdNVCJ9LCB7Im5hbWUiOiAiZXRhZyIsICJ2YWx1ZSI6ICJXL1wiMzI1Mi0xNjgxMzMzNDIyMDAwXCIifSwgeyJuYW1lIjogImxhc3QtbW9kaWZpZWQiLCAidmFsdWUiOiAiV2VkLCAxMiBBcHIgMjAyMyAyMTowMzo0MiBHTVQifSwgeyJuYW1lIjogIm5lbCIsICJ2YWx1ZSI6ICJ7XCJzdWNjZXNzX2ZyYWN0aW9uXCI6MCxcInJlcG9ydF90b1wiOlwiY2YtbmVsXCIsXCJtYXhfYWdlXCI6NjA0ODAwfSJ9LCB7Im5hbWUiOiAicmVwb3J0LXRvIiwgInZhbHVlIjogIntcImVuZHBvaW50c1wiOlt7XCJ1cmxcIjpcImh0dHBzOlxcL1xcL2EubmVsLmNsb3VkZmxhcmUuY29tXFwvcmVwb3J0XFwvdjQ/cz05cmdGY0VxclpSM1ZDRzcyJTJGWDM1aTBVTnNNJTJCNUFqWVZlZzgwM2tzOXZPUnd2UUcyTGFCY2RQRmFiWTljOGhIVzY1andZUTRvejR0SEF1bGhPNDcyRWlDMDhRTWN5clptNVNSeXFOVHpMTDdlcGJvbDhkOWFrcU5tZ3ZEcFpTd1oySEdia3o0Vm94ZXE0eFhTODEyWiUyRkZ1ZnpjUEFiSyUyRnIwUEklM0RcIn1dLFwiZ3JvdXBcIjpcImNmLW5lbFwiLFwibWF4X2FnZVwiOjYwNDgwMH0ifSwgeyJuYW1lIjogInNlcnZlciIsICJ2YWx1ZSI6ICJjbG91ZGZsYXJlIn0sIHsibmFtZSI6ICJzdHJpY3QtdHJhbnNwb3J0LXNlY3VyaXR5IiwgInZhbHVlIjogIm1heC1hZ2U9NjMwNzIwMDA7IGluY2x1ZGVTdWJkb21haW5zOyBwcmVsb2FkIn0sIHsibmFtZSI6ICJ2YXJ5IiwgInZhbHVlIjogIkFjY2VwdC1FbmNvZGluZyJ9XSwgImNvbnRlbnQiOiB7InNpemUiOiAzMjUyLCAibWltZVR5cGUiOiAiaW1hZ2UvcG5nIiwgImNvbXByZXNzaW9uIjogMCwgInRleHQiOiAiaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUNBQUFBQWdDQVlBQUFCemVucjBBQUFBQ1hCSVdYTUFBQXNUQUFBTEV3RUFtcHdZQUFBS1QybERRMUJRYUc5MGIzTm9iM0FnU1VORElIQnliMlpwYkdVQUFIamFuVk5uVkZQcEZqMzMzdlJDUzRpQWxFdHZVaFVJSUZKQ2k0QVVrU1lxSVFrUVNvZ2hvZGtWVWNFUlJVVUVHOGlnaUFPT2pvQ01GVkVzRElvSzJBZmtJYUtPZzZPSWlzcjc0WHVqYTlhODkrYk4vclhYUHVlczg1Mnp6d2ZBQ0F5V1NETlJOWUFNcVVJZUVlQ0R4OFRHNGVRdVFJRUtKSEFBRUFpelpDRnovU01CQVBoK1BEd3JJc0FIdmdBQmVOTUxDQURBVFp2QU1CeUgvdy9xUXBsY0FZQ0VBY0Iwa1RoTENJQVVBRUI2amtLbUFFQkdBWUNkbUNaVEFLQUVBR0RMWTJMakFGQXRBR0FuZitiVEFJQ2QrSmw3QVFCYmxDRVZBYUNSQUNBVFpZaEVBR2c3QUt6UFZvcEZBRmd3QUJSbVM4UTVBTmd0QURCSlYyWklBTEMzQU1ET0VBdXlBQWdNQURCUmlJVXBBQVI3QUdESUl5TjRBSVNaQUJSRzhsYzg4U3V1RU9jcUFBQjRtYkk4dVNRNVJZRmJDQzF4QjFkWExoNG96a2tYS3hRMllRSmhta0F1d25tWkdUS0JOQS9nODh3QUFLQ1JGUkhnZy9QOWVNNE9yczdPTm82MkRsOHQ2cjhHL3lKaVl1UCs1YytyY0VBQUFPRjBmdEgrTEMrekdvQTdCb0J0L3FJbDdnUm9YZ3VnZGZlTFpySVBRTFVBb09uYVYvTncrSDQ4UEVXaGtMbloyZVhrNU5oS3hFSmJZY3BYZmY1bndsL0FWLzFzK1g0OC9QZjE0TDdpSklFeVhZRkhCUGpnd3N6MFRLVWN6NUlKaEdMYzVvOUgvTGNMLy93ZDB5TEVTV0s1V0NvVTQxRVNjWTVFbW96ek1xVWlpVUtTS2NVbDB2OWs0dDhzK3dNKzN6VUFzR28rQVh1UkxhaGRZd1AyU3ljUVdIVEE0dmNBQVBLN2I4SFVLQWdEZ0dpRDRjOTMvKzgvL1VlZ0pRQ0Faa21TY1FBQVhrUWtMbFRLc3ovSENBQUFSS0NCS3JCQkcvVEJHQ3pBQmh6QkJkekJDL3hnTm9SQ0pNVENRaEJDQ21TQUhISmdLYXlDUWlpR3piQWRLbUF2MUVBZE5NQlJhSWFUY0E0dXdsVzREajF3RC9waENKN0JLTHlCQ1FSQnlBZ1RZU0hhaUFGaWlsZ2pqZ2dYbVlYNEljRklCQktMSkNESmlCUlJJa3VSTlVneFVvcFVJRlZJSGZJOWNnSTVoMXhHdXBFN3lBQXlndnlHdkVjeGxJR3lVVDNVRExWRHVhZzNHb1JHb2d2UVpIUXhtbzhXb0p2UWNyUWFQWXcyb2VmUXEyZ1AybzgrUThjd3dPZ1lCelBFYkRBdXhzTkNzVGdzQ1pOank3RWlyQXlyeGhxd1Zxd0R1NG4xWTgreGR3UVNnVVhBQ1RZRWQwSWdZUjVCU0ZoTVdFN1lTS2dnSENRMEVkb0pOd2tEaEZIQ0p5S1RxRXUwSnJvUitjUVlZakl4aDFoSUxDUFdFbzhUTHhCN2lFUEVOeVFTaVVNeUo3bVFBa214cEZUU0V0SkcwbTVTSStrc3FaczBTQm9qazhuYVpHdXlCem1VTENBcnlJWGtuZVRENURQa0crUWg4bHNLbldKQWNhVDRVK0lvVXNwcVNobmxFT1UwNVFabG1ESkJWYU9hVXQyb29WUVJOWTlhUXEyaHRsS3ZVWWVvRXpSMW1qbk5neFpKUzZXdG9wWFRHbWdYYVBkcHIraDB1aEhkbFI1T2w5Qlgwc3ZwUitpWDZBUDBkd3dOaGhXRHg0aG5LQm1iR0FjWVp4bDNHSytZVEtZWjA0c1p4MVF3TnpIcm1PZVpENWx2VlZncXRpcDhGWkhLQ3BWS2xTYVZHeW92VkttcXBxcmVxZ3RWODFYTFZJK3BYbE45cmtaVk0xUGpxUW5VbHF0VnFwMVE2MU1iVTJlcE82aUhxbWVvYjFRL3BINVovWWtHV2NOTXcwOURwRkdnc1YvanZNWWdDMk1aczNnc0lXc05xNFoxZ1RYRUpySE4yWHgyS3J1WS9SMjdpejJxcWFFNVF6TktNMWV6VXZPVVpqOEg0NWh4K0p4MFRnbm5LS2VYODM2SzNoVHZLZUlwRzZZMFRMa3haVnhycXBhWGxsaXJTS3RScTBmcnZUYXU3YWVkcHIxRnUxbjdnUTVCeDBvblhDZEhaNC9PQlozblU5bFQzYWNLcHhaTlBUcjFyaTZxYTZVYm9idEVkNzl1cCs2WW5yNWVnSjVNYjZmZWViM24raHg5TC8xVS9XMzZwL1ZIREZnR3N3d2tCdHNNemhnOHhUVnhiendkTDhmYjhWRkRYY05BUTZWaGxXR1g0WVNSdWRFOG85VkdqVVlQakduR1hPTWs0MjNHYmNhakpnWW1JU1pMVGVwTjdwcFNUYm1tS2FZN1REdE14ODNNemFMTjFwazFtejB4MXpMbm0rZWIxNXZmdDJCYWVGb3N0cWkydUdWSnN1UmFwbG51dHJ4dWhWbzVXYVZZVlZwZHMwYXRuYTBsMXJ1dHU2Y1JwN2xPazA2cm50Wm53N0R4dHNtMnFiY1pzT1hZQnR1dXRtMjJmV0ZuWWhkbnQ4V3V3KzZUdlpOOXVuMk4vVDBIRFlmWkRxc2RXaDErYzdSeUZEcFdPdDZhenB6dVAzM0Y5SmJwTDJkWXp4RFAyRFBqdGhQTEtjUnBuVk9iMDBkbkYyZTVjNFB6aUl1SlM0TExMcGMrTHBzYnh0M0l2ZVJLZFBWeFhlRjYwdldkbTdPYnd1Mm8yNi91TnU1cDdvZmNuOHcwbnltZVdUTnowTVBJUStCUjVkRS9DNStWTUd2ZnJINVBRMCtCWjdYbkl5OWpMNUZYcmRld3Q2VjNxdmRoN3hjKzlqNXluK00rNHp3MzNqTGVXVi9NTjhDM3lMZkxUOE52bmwrRjMwTi9JLzlrLzNyLzBRQ25nQ1VCWndPSmdVR0JXd0w3K0hwOEliK09QenJiWmZheTJlMUJqS0M1UVJWQmo0S3RndVhCclNGb3lPeVFyU0gzNTVqT2tjNXBEb1ZRZnVqVzBBZGg1bUdMdzM0TUo0V0hoVmVHUDQ1d2lGZ2EwVEdYTlhmUjNFTnozMFQ2UkpaRTNwdG5NVTg1cnkxS05TbytxaTVxUE5vM3VqUzZQOFl1WmxuTTFWaWRXRWxzU3h3NUxpcXVObTVzdnQvODdmT0g0cDNpQytON0Y1Z3Z5RjF3ZWFIT3d2U0ZweGFwTGhJc09wWkFUSWhPT0pUd1FSQXFxQmFNSmZJVGR5V09Dbm5DSGNKbklpL1JOdEdJMkVOY0toNU84a2dxVFhxUzdKRzhOWGtreFRPbExPVzVoQ2Vwa0x4TURVemRtenFlRnBwMklHMHlQVHE5TVlPU2taQnhRcW9oVFpPMlorcG41bVoyeTZ4bGhiTCt4VzZMdHk4ZWxRZkphN09RckFWWkxRcTJRcWJvVkZvbzF5b0hzbWRsVjJhL3pZbktPWmFybml2TjdjeXp5dHVRTjV6dm4vL3RFc0lTNFpLMnBZWkxWeTBkV09hOXJHbzVzanh4ZWRzSzR4VUZLNFpXQnF3OHVJcTJLbTNWVDZ2dFY1ZXVmcjBtZWsxcmdWN0J5b0xCdFFGcjZ3dFZDdVdGZmV2YzErMWRUMWd2V2QrMVlmcUduUnMrRlltS3JoVGJGNWNWZjlnbzNIamxHNGR2eXIrWjNKUzBxYXZFdVdUUFp0Sm02ZWJlTFo1YkRwYXFsK2FYRG00TjJkcTBEZDlXdE8zMTlrWGJMNWZOS051N2c3WkR1YU8vUExpOFphZkp6czA3UDFTa1ZQUlUrbFEyN3RMZHRXSFgrRzdSN2h0N3ZQWTA3TlhiVzd6My9UN0p2dHRWQVZWTjFXYlZaZnRKKzdQM1A2NkpxdW40bHZ0dFhhMU9iWEh0eHdQU0EvMEhJdzYyMTduVTFSM1NQVlJTajlZcjYwY094eCsrL3AzdmR5ME5OZzFWalp6RzRpTndSSG5rNmZjSjMvY2VEVHJhZG94N3JPRUgweDkySFdjZEwycENtdkthUnB0VG12dGJZbHU2VDh3KzBkYnEzbnI4UjlzZkQ1dzBQRmw1U3ZOVXlXbmE2WUxUazJmeXo0eWRsWjE5Zmk3NTNHRGJvclo3NTJQTzMyb1BiKys2RUhUaDBrWC9pK2M3dkR2T1hQSzRkUEt5MitVVFY3aFhtcTg2WDIzcWRPbzgvcFBUVDhlN25MdWFycmxjYTdudWVyMjFlMmIzNlJ1ZU44N2Q5TDE1OFJiLzF0V2VPVDNkdmZONmIvZkY5L1hmRnQxK2NpZjl6c3U3MlhjbjdxMjhUN3hmOUVEdFFkbEQzWWZWUDF2KzNOanYzSDlxd0hlZzg5SGNSL2NHaFlQUC9wSDFqdzlEQlkrWmo4dUdEWWJybmpnK09UbmlQM0w5NmZ5blE4OWt6eWFlRi82aS9zdXVGeFl2ZnZqVjY5Zk8wWmpSb1pmeWw1Ty9iWHlsL2VyQTZ4bXYyOGJDeGg2K3lYZ3pNVjcwVnZ2dHdYZmNkeDN2bzk4UFQrUjhJSDhvLzJqNXNmVlQwS2Y3a3htVGsvOEVBNWp6L0dNekxkc0FBQUFFWjBGTlFRQUFzWTU4KzFHVEFBQUFJR05JVWswQUFIb2xBQUNBZ3dBQStmOEFBSURwQUFCMU1BQUE2bUFBQURxWUFBQVhiNUpmeFVZQUFBSFBTVVJCVkhqYTdKYy9heFJSRk1WLzU4NjY3QWorU3lSQ0RBcGJXZXczaUJiYmFHL3BON0ZSc0Jjcy9DUVdOaFpiUkN2OUFBbllKU29hWVF2QlhaT1pkeXpjd0RJUzNKM2Q3SURrd3VYeEh2TXVaKzQ1OXpBajIwaTZDVHlSdEExMGJGOEFNa2taRUlDbTFwUDhLMnduU1VqeW42M1RaQzBqb2t3cEhVc2FTZHBKS1QyMS9ZMDh6MjhCbndDdk1pVjlCRGF5b2loZUF0dXNQdGFBUzVKMGFQdDZBd0NRdE5zQ1dndlVTTUF1OEVYU3NlMXljbjRYdVBLdnk3WXZJbWxZazhOWG5VNm5hNXRxQWg5bXFSRVJuK3UrL1R2YkQwZWpVYkVJQlNtbExHcmVmV0c3V0ZRREVaSFY3Y0IrUlV3QlBBQ3VUVHhpYlpZaXRsVVh3S2l5dncrOHJ0V0VtZ0NPS3Z2THRXbFlCb0FzeThwRnpHRFdNWHdQYkFFM2dLaU1YWHR5dmdsc1NkcWJjWlNIODJqZ2wrMkRVOFIwQkh5ZFV2ZjZXVk53YXZSNnZiYnRxN00rUDA4SDFPLzNXd0NEd2FDbzBOZzVzZDUydTcwQlpHZWhnZW04VTlIQW81cDJQbHc2QmFzYXczTUE1d0QrRHdDMlU2TUFJc0tOQWtncGxVMTNvS3o3UmZSYzBvOHBPNzg5c2VSNW81Q2s3N2JYRzJyQ1hraDYweUFMYndHNmtnNGIrRG5kQnpabG16elB1K1B4K0Jsd1QxSnV1eVZKUzU1NVIwU1JVdm9aRVRzcHBjZTJEMzRQQVA2T095RS94UXhhQUFBQUFFbEZUa1N1UW1DQyIsICJlbmNvZGluZyI6ICJiYXNlNjQifSwgImhlYWRlcnNTaXplIjogMCwgImJvZHlTaXplIjogMzYwNiwgInJlZGlyZWN0VVJMIjogIiIsICJfdHJhbnNmZXJTaXplIjogMzYwNn0sICJjYWNoZSI6IHt9LCAidGltaW5ncyI6IHsiZG5zIjogLTEsICJjb25uZWN0IjogLTEsICJzc2wiOiAtMSwgInNlbmQiOiAwLCAid2FpdCI6IDI5NS45MDIsICJyZWNlaXZlIjogMy4xNDZ9LCAicGFnZXJlZiI6ICJwYWdlQDhjOTMyZjgzMzdkOWFiYjRiOWFiOTg4OWRlYzUxYjk5IiwgInNlcnZlcklQQWRkcmVzcyI6ICJbMjYwNjo0NzAwOjIwOjo2ODFhOmVjZl0iLCAiX3NlcnZlclBvcnQiOiA0NDMsICJfc2VjdXJpdHlEZXRhaWxzIjogeyJwcm90b2NvbCI6ICJUTFMgMS4zIiwgInN1YmplY3ROYW1lIjogInN1cHBseWNoYWluY2FuYWRhLmNvbSIsICJpc3N1ZXIiOiAiV0UxIiwgInZhbGlkRnJvbSI6IDE3MjM0NzA4NDEsICJ2YWxpZFRvIjogMTczMTI0Njg0MH19LCB7InN0YXJ0ZWREYXRlVGltZSI6ICIyMDI0LTA5LTA1VDExOjA3OjIwLjMyMFoiLCAidGltZSI6IDYxMC41MzcsICJyZXF1ZXN0IjogeyJtZXRob2QiOiAiR0VUIiwgInVybCI6ICJodHRwczovL3BvcnRhbC5zdXBwbHljaGFpbmNhbmFkYS5jb20vbXBvd2VyL2NtczIvaW1nL2ljb24tbGlua2VkaW4tMzJfYmxhY2sucG5nIiwgImh0dHBWZXJzaW9uIjogIkhUVFAvMi4wIiwgImNvb2tpZXMiOiBbeyJuYW1lIjogIkpTRVNTSU9OSUQiLCAidmFsdWUiOiAiMjU3RDlEQzkyMDQ1MkE0RDkzM0I4QTNDREE5QjZCRDMifV0sICJoZWFkZXJzIjogW3sibmFtZSI6ICI6YXV0aG9yaXR5IiwgInZhbHVlIjogInBvcnRhbC5zdXBwbHljaGFpbmNhbmFkYS5jb20ifSwgeyJuYW1lIjogIjptZXRob2QiLCAidmFsdWUiOiAiR0VUIn0sIHsibmFtZSI6ICI6cGF0aCIsICJ2YWx1ZSI6ICIvbXBvd2VyL2NtczIvaW1nL2ljb24tbGlua2VkaW4tMzJfYmxhY2sucG5nIn0sIHsibmFtZSI6ICI6c2NoZW1lIiwgInZhbHVlIjogImh0dHBzIn0sIHsibmFtZSI6ICJhY2NlcHQiLCAidmFsdWUiOiAiaW1hZ2UvYXZpZixpbWFnZS93ZWJwLGltYWdlL2FwbmcsaW1hZ2Uvc3ZnK3htbCxpbWFnZS8qLCovKjtxPTAuOCJ9LCB7Im5hbWUiOiAiYWNjZXB0LWVuY29kaW5nIiwgInZhbHVlIjogImd6aXAsIGRlZmxhdGUsIGJyLCB6c3RkIn0sIHsibmFtZSI6ICJhY2NlcHQtbGFuZ3VhZ2UiLCAidmFsdWUiOiAiZW4tVVMifSwgeyJuYW1lIjogImNvb2tpZSIsICJ2YWx1ZSI6ICJKU0VTU0lPTklEPTI1N0Q5REM5MjA0NTJBNEQ5MzNCOEEzQ0RBOUI2QkQzIn0sIHsibmFtZSI6ICJwcmlvcml0eSIsICJ2YWx1ZSI6ICJ1PTIsIGkifSwgeyJuYW1lIjogInJlZmVyZXIiLCAidmFsdWUiOiAiaHR0cHM6Ly9wb3J0YWwuc3VwcGx5Y2hhaW5jYW5hZGEuY29tL2VuL3BvcnRhbGxvZ2luIn0sIHsibmFtZSI6ICJzZWMtY2gtdWEiLCAidmFsdWUiOiAiXCJOb3Q7QT1CcmFuZFwiO3Y9XCIyNFwiLCBcIkNocm9taXVtXCI7dj1cIjEyOFwiIn0sIHsibmFtZSI6ICJzZWMtY2gtdWEtbW9iaWxlIiwgInZhbHVlIjogIj8wIn0sIHsibmFtZSI6ICJzZWMtY2gtdWEtcGxhdGZvcm0iLCAidmFsdWUiOiAiXCJXaW5kb3dzXCIifSwgeyJuYW1lIjogInNlYy1mZXRjaC1kZXN0IiwgInZhbHVlIjogImltYWdlIn0sIHsibmFtZSI6ICJzZWMtZmV0Y2gtbW9kZSIsICJ2YWx1ZSI6ICJuby1jb3JzIn0sIHsibmFtZSI6ICJzZWMtZmV0Y2gtc2l0ZSIsICJ2YWx1ZSI6ICJzYW1lLW9yaWdpbiJ9LCB7Im5hbWUiOiAidXNlci1hZ2VudCIsICJ2YWx1ZSI6ICJNb3ppbGxhLzUuMCAoV2luZG93cyBOVCAxMC4wOyBXaW42NDsgeDY0KSBBcHBsZVdlYktpdC81MzcuMzYgKEtIVE1MLCBsaWtlIEdlY2tvKSBDaHJvbWUvMTI4LjAuNjYxMy4xOCBTYWZhcmkvNTM3LjM2In1dLCAicXVlcnlTdHJpbmciOiBbXSwgImhlYWRlcnNTaXplIjogNzY3LCAiYm9keVNpemUiOiAwfSwgInJlc3BvbnNlIjogeyJzdGF0dXMiOiAyMDAsICJzdGF0dXNUZXh0IjogIiIsICJodHRwVmVyc2lvbiI6ICJIVFRQLzIuMCIsICJjb29raWVzIjogW10sICJoZWFkZXJzIjogW3sibmFtZSI6ICJhY2NlcHQtcmFuZ2VzIiwgInZhbHVlIjogImJ5dGVzIn0sIHsibmFtZSI6ICJjYWNoZS1jb250cm9sIiwgInZhbHVlIjogIm1heC1hZ2U9MTQ0MDAifSwgeyJuYW1lIjogImNmLWNhY2hlLXN0YXR1cyIsICJ2YWx1ZSI6ICJNSVNTIn0sIHsibmFtZSI6ICJjZi1yYXkiLCAidmFsdWUiOiAiOGJlNWMxNGRlYTgxNzFjNC1GUkEifSwgeyJuYW1lIjogImNvbnRlbnQtbGVuZ3RoIiwgInZhbHVlIjogIjMyOTAifSwgeyJuYW1lIjogImNvbnRlbnQtdHlwZSIsICJ2YWx1ZSI6ICJpbWFnZS9wbmcifSwgeyJuYW1lIjogImRhdGUiLCAidmFsdWUiOiAiVGh1LCAwNSBTZXAgMjAyNCAxMTowNzoyMCBHTVQifSwgeyJuYW1lIjogImV0YWciLCAidmFsdWUiOiAiVy9cIjMyOTAtMTY4MTMzMzQyMjAwMFwiIn0sIHsibmFtZSI6ICJsYXN0LW1vZGlmaWVkIiwgInZhbHVlIjogIldlZCwgMTIgQXByIDIwMjMgMjE6MDM6NDIgR01UIn0sIHsibmFtZSI6ICJuZWwiLCAidmFsdWUiOiAie1wic3VjY2Vzc19mcmFjdGlvblwiOjAsXCJyZXBvcnRfdG9cIjpcImNmLW5lbFwiLFwibWF4X2FnZVwiOjYwNDgwMH0ifSwgeyJuYW1lIjogInJlcG9ydC10byIsICJ2YWx1ZSI6ICJ7XCJlbmRwb2ludHNcIjpbe1widXJsXCI6XCJodHRwczpcXC9cXC9hLm5lbC5jbG91ZGZsYXJlLmNvbVxcL3JlcG9ydFxcL3Y0P3M9Y2lSRVowWTFMOWpmNHhlWVRyME1EbFJJeGhOWjdXNSUyRlJZSHkzNnpKb2htdUxJZ0d6aEFMVmVlVGF6bXZFYk02UmNZVUV2VURvOGw2NWRNd0ZtejJjbXVQQVhrc2Q4TGJmdiUyRkdOU3A2aWI2bXlDdkQ4bERYalZoR0s0UzAlMkJxSFJvbkhnZGdVM0wlMkZyMTdwUnFpYlA0eHREWGhmUEYzTUdoUkQ0JTNEXCJ9XSxcImdyb3VwXCI6XCJjZi1uZWxcIixcIm1heF9hZ2VcIjo2MDQ4MDB9In0sIHsibmFtZSI6ICJzZXJ2ZXIiLCAidmFsdWUiOiAiY2xvdWRmbGFyZSJ9LCB7Im5hbWUiOiAic3RyaWN0LXRyYW5zcG9ydC1zZWN1cml0eSIsICJ2YWx1ZSI6ICJtYXgtYWdlPTYzMDcyMDAwOyBpbmNsdWRlU3ViZG9tYWluczsgcHJlbG9hZCJ9LCB7Im5hbWUiOiAidmFyeSIsICJ2YWx1ZSI6ICJBY2NlcHQtRW5jb2RpbmcifV0sICJjb250ZW50IjogeyJzaXplIjogMzI5MCwgIm1pbWVUeXBlIjogImltYWdlL3BuZyIsICJjb21wcmVzc2lvbiI6IDAsICJ0ZXh0IjogImlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFDQUFBQUFnQ0FZQUFBQnplbnIwQUFBQUNYQklXWE1BQUFzVEFBQUxFd0VBbXB3WUFBQUtUMmxEUTFCUWFHOTBiM05vYjNBZ1NVTkRJSEJ5YjJacGJHVUFBSGphblZOblZGUHBGajMzM3ZSQ1M0aUFsRXR2VWhVSUlGSkNpNEFVa1NZcUlRa1FTb2dob2RrVlVjRVJSVVVFRzhpZ2lBT09qb0NNRlZFc0RJb0syQWZrSWFLT2c2T0lpc3I3NFh1amE5YTg5K2JOL3JYWFB1ZXM4NTJ6endmQUNBeVdTRE5STllBTXFVSWVFZUNEeDhURzRlUXVRSUVLSkhBQUVBaXpaQ0Z6L1NNQkFQaCtQRHdySXNBSHZnQUJlTk1MQ0FEQVRadkFNQnlIL3cvcVFwbGNBWUNFQWNCMGtUaExDSUFVQUVCNmprS21BRUJHQVlDZG1DWlRBS0FFQUdETFkyTGpBRkF0QUdBbmYrYlRBSUNkK0psN0FRQmJsQ0VWQWFDUkFDQVRaWWhFQUdnN0FLelBWb3BGQUZnd0FCUm1TOFE1QU5ndEFEQkpWMlpJQUxDM0FNRE9FQXV5QUFnTUFEQlJpSVVwQUFSN0FHRElJeU40QUlTWkFCUkc4bGM4OFN1dUVPY3FBQUI0bWJJOHVTUTVSWUZiQ0MxeEIxZFhMaDRvemtrWEt4UTJZUUpobWtBdXdubVpHVEtCTkEvZzg4d0FBS0NSRlJIZ2cvUDllTTRPcnM3T05vNjJEbDh0NnI4Ry95SmlZdVArNWMrcmNFQUFBT0YwZnRIK0xDK3pHb0E3Qm9CdC9xSWw3Z1JvWGd1Z2RmZUxacklQUUxVQW9PbmFWL053K0g0OFBFV2hrTG5aMmVYazVOaEt4RUpiWWNwWGZmNW53bC9BVi8xcytYNDgvUGYxNEw3aUpJRXlYWUZIQlBqZ3dzejBUS1VjejVJSmhHTGM1bzlIL0xjTC8vd2QweUxFU1dLNVdDb1U0MUVTY1k1RW1venpNcVVpaVVLU0tjVWwwdjlrNHQ4cyt3TSszelVBc0dvK0FYdVJMYWhkWXdQMlN5Y1FXSFRBNHZjQUFQSzdiOEhVS0FnRGdHaUQ0YzkzLys4Ly9VZWdKUUNBWmttU2NRQUFYa1FrTGxUS3N6L0hDQUFBUktDQktyQkJHL1RCR0N6QUJoekJCZHpCQy94Z05vUkNKTVRDUWhCQ0NtU0FISEpnS2F5Q1FpaUd6YkFkS21BdjFFQWROTUJSYUlhVGNBNHV3bFc0RGoxd0QvcGhDSjdCS0x5QkNRUkJ5QWdUWVNIYWlBRmlpbGdqamdnWG1ZWDRJY0ZJQkJLTEpDREppQlJSSWt1Uk5VZ3hVb3BVSUZWSUhmSTljZ0k1aDF4R3VwRTd5QUF5Z3Z5R3ZFY3hsSUd5VVQzVURMVkR1YWczR29SR29ndlFaSFF4bW84V29KdlFjclFhUFl3Mm9lZlFxMmdQMm84K1E4Y3d3T2dZQnpQRWJEQXV4c05Dc1Rnc0NaTmp5N0VpckF5cnhocXdWcXdEdTRuMVk4K3hkd1FTZ1VYQUNUWUVkMElnWVI1QlNGaE1XRTdZU0tnZ0hDUTBFZG9KTndrRGhGSENKeUtUcUV1MEpyb1IrY1FZWWpJeGgxaElMQ1BXRW84VEx4QjdpRVBFTnlRU2lVTXlKN21RQWtteHBGVFNFdEpHMG01U0kra3NxWnMwU0Jvams4bmFaR3V5QnptVUxDQXJ5SVhrbmVURDVEUGtHK1FoOGxzS25XSkFjYVQ0VStJb1VzcHFTaG5sRU9VMDVRWmxtREpCVmFPYVV0Mm9vVlFSTlk5YVFxMmh0bEt2VVllb0V6UjFtam5OZ3haSlM2V3RvcFhUR21nWGFQZHByK2gwdWhIZGxSNU9sOUJYMHN2cFIraVg2QVAwZHd3TmhoV0R4NGhuS0JtYkdBY1laeGwzR0srWVRLWVowNHNaeDFRd056SHJtT2VaRDVsdlZWZ3F0aXA4RlpIS0NwVktsU2FWR3lvdlZLbXFwcXJlcWd0VjgxWExWSStwWGxOOXJrWlZNMVBqcVFuVWxxdFZxcDFRNjFNYlUyZXBPNmlIcW1lb2IxUS9wSDVaL1lrR1djTk13MDlEcEZHZ3NWL2p2TVlnQzJNWnMzZ3NJV3NOcTRaMWdUWEVKckhOMlh4MktydVkvUjI3aXoycXFhRTVRek5LTTFlelV2T1VaajhINDVoeCtKeDBUZ25uS0tlWDgzNkszaFR2S2VJcEc2WTBUTGt4WlZ4cnFwYVhsbGlyU0t0UnEwZnJ2VGF1N2FlZHByMUZ1MW43Z1E1Qngwb25YQ2RIWjQvT0JaM25VOWxUM2FjS3B4Wk5QVHIxcmk2cWE2VWJvYnRFZDc5dXArNllucjVlZ0o1TWI2ZmVlYjNuK2h4OUwvMVUvVzM2cC9WSERGZ0dzd3drQnRzTXpoZzh4VFZ4Ynp3ZEw4ZmI4VkZEWGNOQVE2VmhsV0dYNFlTUnVkRThvOVZHalVZUGpHbkdYT01rNDIzR2JjYWpKZ1ltSVNaTFRlcE43cHBTVGJtbUthWTdURHRNeDgzTXphTE4xcGsxbXoweDF6TG5tK2ViMTV2ZnQyQmFlRm9zdHFpMnVHVkpzdVJhcGxudXRyeHVoVm81V2FWWVZWcGRzMGF0bmEwbDFydXR1NmNScDdsT2swNnJudFpudzdEeHRzbTJxYmNac09YWUJ0dXV0bTIyZldGblloZG50OFd1dys2VHZaTjl1bjJOL1QwSERZZlpEcXNkV2gxK2M3UnlGRHBXT3Q2YXpwenVQMzNGOUpicEwyZFl6eERQMkRQanRoUExLY1JwblZPYjAwZG5GMmU1YzRQemlJdUpTNExMTHBjK0xwc2J4dDNJdmVSS2RQVnhYZUY2MHZXZG03T2J3dTJvMjYvdU51NXA3b2Zjbjh3MG55bWVXVE56ME1QSVErQlI1ZEUvQzUrVk1HdmZySDVQUTArQlo3WG5JeTlqTDVGWHJkZXd0NlYzcXZkaDd4Yys5ajV5bitNKzR6dzMzakxlV1YvTU44QzN5TGZMVDhOdm5sK0YzME4vSS85ay8zci8wUUNuZ0NVQlp3T0pnVUdCV3dMNytIcDhJYitPUHpyYlpmYXkyZTFCaktDNVFSVkJqNEt0Z3VYQnJTRm95T3lRclNIMzU1ak9rYzVwRG9WUWZ1alcwQWRoNW1HTHczNE1KNFdIaFZlR1A0NXdpRmdhMFRHWE5YZlIzRU56MzBUNlJKWkUzcHRuTVU4NXJ5MUtOU28rcWk1cVBObzN1alM2UDhZdVpsbk0xVmlkV0Vsc1N4dzVMaXF1Tm01c3Z0Lzg3Zk9INHAzaUMrTjdGNWd2eUYxd2VhSE93dlNGcHhhcExoSXNPcFpBVEloT09KVHdRUkFxcUJhTUpmSVRkeVdPQ25uQ0hjSm5JaS9STnRHSTJFTmNLaDVPOGtncVRYcVM3Skc4Tlhra3hUT2xMT1c1aENlcGtMeE1EVXpkbXpxZUZwcDJJRzB5UFRxOU1ZT1NrWkJ4UXFvaFRaTzJaK3BuNW1aMnk2eGxoYkwreFc2THR5OGVsUWZKYTdPUXJBVlpMUXEyUXFib1ZGb28xeW9Ic21kbFYyYS96WW5LT1phcm5pdk43Y3l6eXR1UU41enZuLy90RXNJUzRaSzJwWVpMVnkwZFdPYTlyR281c2p4eGVkc0s0eFVGSzRaV0Jxdzh1SXEyS20zVlQ2dnRWNWV1ZnIwbWVrMXJnVjdCeW9MQnRRRnI2d3RWQ3VXRmZldmMxKzFkVDFndldkKzFZZnFHblJzK0ZZbUtyaFRiRjVjVmY5Z28zSGpsRzRkdnlyK1ozSlMwcWF2RXVXVFBadEptNmViZUxaNWJEcGFxbCthWERtNE4yZHEwRGQ5V3RPMzE5a1hiTDVmTktOdTdnN1pEdWFPL1BMaThaYWZKenMwN1AxU2tWUFJVK2xRMjd0TGR0V0hYK0c3UjdodDd2UFkwN05YYlc3ejMvVDdKdnR0VkFWVk4xV2JWWmZ0Sis3UDNQNjZKcXVuNGx2dHRYYTFPYlhIdHh3UFNBLzBISXc2MjE3blUxUjNTUFZSU2o5WXI2MGNPeHgrKy9wM3ZkeTBOTmcxVmpaekc0aU53UkhuazZmY0ozL2NlRFRyYWRveDdyT0VIMHg5MkhXY2RMMnBDbXZLYVJwdFRtdnRiWWx1NlQ4dyswZGJxM25yOFI5c2ZENXcwUEZsNVN2TlV5V25hNllMVGsyZnl6NHlkbFoxOWZpNzUzR0Rib3JaNzUyUE8zMm9QYisrNkVIVGgwa1gvaStjN3ZEdk9YUEs0ZFBLeTIrVVRWN2hYbXE4NlgyM3FkT284L3BQVFQ4ZTduTHVhcnJsY2E3bnVlcjIxZTJiMzZSdWVOODdkOUwxNThSYi8xdFdlT1QzZHZmTjZiL2ZGOS9YZkZ0MStjaWY5enN1NzJYY243cTI4VDd4ZjlFRHRRZGxEM1lmVlAxdiszTmp2M0g5cXdIZWc4OUhjUi9jR2hZUFAvcEgxanc5REJZK1pqOHVHRFlicm5qZytPVG5pUDNMOTZmeW5RODlrenlhZUYvNmkvc3V1RnhZdmZ2alY2OWZPMFpqUm9aZnlsNU8vYlh5bC9lckE2eG12MjhiQ3hoNit5WGd6TVY3MFZ2dnR3WGZjZHgzdm85OFBUK1I4SUg4by8yajVzZlZUMEtmN2t4bVRrLzhFQTVqei9HTXpMZHNBQUFBRVowRk5RUUFBc1k1OCsxR1RBQUFBSUdOSVVrMEFBSG9sQUFDQWd3QUErZjhBQUlEcEFBQjFNQUFBNm1BQUFEcVlBQUFYYjVKZnhVWUFBQUgxU1VSQlZIamF4SlkvYTFSQkZNVi81KzRzTHV3aVJCSk52b0J1WXlzaWdZQ3RZQ1hvRjlEV3l0YlBJSVkwV2lnSUZoYlcydmluRjJ3Q2loRU5wTEJRWkRWRTNGMW5yczNiZ011Kzl5UzgyYjB3eFp1Wk8zUGVQZmZjTzdnN3dDbmd2cVE5TTlzMXMzdkFtcnVUZXdBc1Mvb00rTlRZN1hhN3E5a0JtTm1kR1pjNzRHYTJsUnVBdWZ0RlNzemROOGhzNXU0cVc1UkVkZ0JtOXJKaS9RVnpzR1ZKTzlQOFMvclU2L1ZPWmsvQ1Fnb3J3SmFrajhBSFlCTlltWWNNTmRIaW9zeFlzQWxZQXRaTDF0KzQrNWZKUjZmVE9UMGNEcy9NMkxmdjdxOEs1WndBcmdPWGdiNmtZOEJYU1c5VFNrK0JKKzQrT3ZSc3Q5c1h5Z29SY09XZm9tRjJ1MlRmKzRMS2E4RDNpdk5jMGp2ZzdPR1pEV2s1aEJCdUFJK0xpRkpSM1BxU1hrdnFONVlEN3I0YVk5d3NLUDJmL1V1U0hnQ0VoZ0IwaitCelh0TEdvbFZ3MVJxdTY4OUNDT3ZBY1dDdDFXcmRCSDVWOUpwem9URTlTODlUU3BkaWpHa2lUZUJ1Q09GSGpQRmhDUTByalVYQTNXKzVlNXFlanpFK2tyUlg0dGF4aHY3K0FOZ3VBWllrYlplNGhxWWlzTzhWVFNXbDlMTUV1RFZWQjBZMUVScGxiVWFTWWczQW1CdEFxcEduWndXUVVrcDFMT1YrRDZTakFwd0xnT3dVMU9WQVNpa3ZBSzkvV0M2V2dvVW5ZUldBTUI2UC8wZ2FsSVIyUERYMVc5TEEzVjJTQTZsb1FOOXFBQnpNOHBNMCtEc0FYYzlvb2hMRk9MSUFBQUFBU1VWT1JLNUNZSUk9IiwgImVuY29kaW5nIjogImJhc2U2NCJ9LCAiaGVhZGVyc1NpemUiOiAwLCAiYm9keVNpemUiOiAzNzE3LCAicmVkaXJlY3RVUkwiOiAiIiwgIl90cmFuc2ZlclNpemUiOiAzNzE3fSwgImNhY2hlIjoge30sICJ0aW1pbmdzIjogeyJkbnMiOiAtMSwgImNvbm5lY3QiOiAtMSwgInNzbCI6IC0xLCAic2VuZCI6IDAsICJ3YWl0IjogMzA3LjM5MiwgInJlY2VpdmUiOiAzMDMuMTQ1fSwgInBhZ2VyZWYiOiAicGFnZUA4YzkzMmY4MzM3ZDlhYmI0YjlhYjk4ODlkZWM1MWI5OSIsICJzZXJ2ZXJJUEFkZHJlc3MiOiAiWzI2MDY6NDcwMDoyMDo6NjgxYTplY2ZdIiwgIl9zZXJ2ZXJQb3J0IjogNDQzLCAiX3NlY3VyaXR5RGV0YWlscyI6IHsicHJvdG9jb2wiOiAiVExTIDEuMyIsICJzdWJqZWN0TmFtZSI6ICJzdXBwbHljaGFpbmNhbmFkYS5jb20iLCAiaXNzdWVyIjogIldFMSIsICJ2YWxpZEZyb20iOiAxNzIzNDcwODQxLCAidmFsaWRUbyI6IDE3MzEyNDY4NDB9fSwgeyJzdGFydGVkRGF0ZVRpbWUiOiAiMjAyNC0wOS0wNVQxMTowNzoyMC4zMjBaIiwgInRpbWUiOiA4NzMuMDQ1MDAwMDAwMDAwMSwgInJlcXVlc3QiOiB7Im1ldGhvZCI6ICJHRVQiLCAidXJsIjogImh0dHBzOi8vcG9ydGFsLnN1cHBseWNoYWluY2FuYWRhLmNvbS9tcG93ZXIvY21zMi9pbWcvaWNvbi10d2l0dGVyLTMyX2JsYWNrLnBuZyIsICJodHRwVmVyc2lvbiI6ICJIVFRQLzIuMCIsICJjb29raWVzIjogW3sibmFtZSI6ICJKU0VTU0lPTklEIiwgInZhbHVlIjogIjI1N0Q5REM5MjA0NTJBNEQ5MzNCOEEzQ0RBOUI2QkQzIn1dLCAiaGVhZGVycyI6IFt7Im5hbWUiOiAiOmF1dGhvcml0eSIsICJ2YWx1ZSI6ICJwb3J0YWwuc3VwcGx5Y2hhaW5jYW5hZGEuY29tIn0sIHsibmFtZSI6ICI6bWV0aG9kIiwgInZhbHVlIjogIkdFVCJ9LCB7Im5hbWUiOiAiOnBhdGgiLCAidmFsdWUiOiAiL21wb3dlci9jbXMyL2ltZy9pY29uLXR3aXR0ZXItMzJfYmxhY2sucG5nIn0sIHsibmFtZSI6ICI6c2NoZW1lIiwgInZhbHVlIjogImh0dHBzIn0sIHsibmFtZSI6ICJhY2NlcHQiLCAidmFsdWUiOiAiaW1hZ2UvYXZpZixpbWFnZS93ZWJwLGltYWdlL2FwbmcsaW1hZ2Uvc3ZnK3htbCxpbWFnZS8qLCovKjtxPTAuOCJ9LCB7Im5hbWUiOiAiYWNjZXB0LWVuY29kaW5nIiwgInZhbHVlIjogImd6aXAsIGRlZmxhdGUsIGJyLCB6c3RkIn0sIHsibmFtZSI6ICJhY2NlcHQtbGFuZ3VhZ2UiLCAidmFsdWUiOiAiZW4tVVMifSwgeyJuYW1lIjogImNvb2tpZSIsICJ2YWx1ZSI6ICJKU0VTU0lPTklEPTI1N0Q5REM5MjA0NTJBNEQ5MzNCOEEzQ0RBOUI2QkQzIn0sIHsibmFtZSI6ICJwcmlvcml0eSIsICJ2YWx1ZSI6ICJ1PTIsIGkifSwgeyJuYW1lIjogInJlZmVyZXIiLCAidmFsdWUiOiAiaHR0cHM6Ly9wb3J0YWwuc3VwcGx5Y2hhaW5jYW5hZGEuY29tL2VuL3BvcnRhbGxvZ2luIn0sIHsibmFtZSI6ICJzZWMtY2gtdWEiLCAidmFsdWUiOiAiXCJOb3Q7QT1CcmFuZFwiO3Y9XCIyNFwiLCBcIkNocm9taXVtXCI7dj1cIjEyOFwiIn0sIHsibmFtZSI6ICJzZWMtY2gtdWEtbW9iaWxlIiwgInZhbHVlIjogIj8wIn0sIHsibmFtZSI6ICJzZWMtY2gtdWEtcGxhdGZvcm0iLCAidmFsdWUiOiAiXCJXaW5kb3dzXCIifSwgeyJuYW1lIjogInNlYy1mZXRjaC1kZXN0IiwgInZhbHVlIjogImltYWdlIn0sIHsibmFtZSI6ICJzZWMtZmV0Y2gtbW9kZSIsICJ2YWx1ZSI6ICJuby1jb3JzIn0sIHsibmFtZSI6ICJzZWMtZmV0Y2gtc2l0ZSIsICJ2YWx1ZSI6ICJzYW1lLW9yaWdpbiJ9LCB7Im5hbWUiOiAidXNlci1hZ2VudCIsICJ2YWx1ZSI6ICJNb3ppbGxhLzUuMCAoV2luZG93cyBOVCAxMC4wOyBXaW42NDsgeDY0KSBBcHBsZVdlYktpdC81MzcuMzYgKEtIVE1MLCBsaWtlIEdlY2tvKSBDaHJvbWUvMTI4LjAuNjYxMy4xOCBTYWZhcmkvNTM3LjM2In1dLCAicXVlcnlTdHJpbmciOiBbXSwgImhlYWRlcnNTaXplIjogNzY1LCAiYm9keVNpemUiOiAwfSwgInJlc3BvbnNlIjogeyJzdGF0dXMiOiAyMDAsICJzdGF0dXNUZXh0IjogIiIsICJodHRwVmVyc2lvbiI6ICJIVFRQLzIuMCIsICJjb29raWVzIjogW10sICJoZWFkZXJzIjogW3sibmFtZSI6ICJhY2NlcHQtcmFuZ2VzIiwgInZhbHVlIjogImJ5dGVzIn0sIHsibmFtZSI6ICJjYWNoZS1jb250cm9sIiwgInZhbHVlIjogIm1heC1hZ2U9MTQ0MDAifSwgeyJuYW1lIjogImNmLWNhY2hlLXN0YXR1cyIsICJ2YWx1ZSI6ICJNSVNTIn0sIHsibmFtZSI6ICJjZi1yYXkiLCAidmFsdWUiOiAiOGJlNWMxNGY4YzhiNzFjNC1GUkEifSwgeyJuYW1lIjogImNvbnRlbnQtbGVuZ3RoIiwgInZhbHVlIjogIjM0MTQifSwgeyJuYW1lIjogImNvbnRlbnQtdHlwZSIsICJ2YWx1ZSI6ICJpbWFnZS9wbmcifSwgeyJuYW1lIjogImRhdGUiLCAidmFsdWUiOiAiVGh1LCAwNSBTZXAgMjAyNCAxMTowNzoyMSBHTVQifSwgeyJuYW1lIjogImV0YWciLCAidmFsdWUiOiAiVy9cIjM0MTQtMTY4MTMzMzQyMjAwMFwiIn0sIHsibmFtZSI6ICJsYXN0LW1vZGlmaWVkIiwgInZhbHVlIjogIldlZCwgMTIgQXByIDIwMjMgMjE6MDM6NDIgR01UIn0sIHsibmFtZSI6ICJuZWwiLCAidmFsdWUiOiAie1wic3VjY2Vzc19mcmFjdGlvblwiOjAsXCJyZXBvcnRfdG9cIjpcImNmLW5lbFwiLFwibWF4X2FnZVwiOjYwNDgwMH0ifSwgeyJuYW1lIjogInJlcG9ydC10byIsICJ2YWx1ZSI6ICJ7XCJlbmRwb2ludHNcIjpbe1widXJsXCI6XCJodHRwczpcXC9cXC9hLm5lbC5jbG91ZGZsYXJlLmNvbVxcL3JlcG9ydFxcL3Y0P3M9eXZLbSUyQlpuJTJGU1FpWEFUd3ZhU00lMkJXQ3dUV3ZkelAyZnZwaVkwTERqdlBuUHNZSDF0bDlqSXgyWFQyWkZKRjVqemV1cjU0VXBkdVU5d3JDTVMwUkJEaGV0c0lwaXBVcFlzYU1HTnFkcyUyQlZhTTh3ZDdUTzBFbXpJM3FyMTk2SU9WUFdsWTltR2IxZnA0YkZ3T2oyRGpjNUpSQkh5N1N5SjhpdWZRJTNEXCJ9XSxcImdyb3VwXCI6XCJjZi1uZWxcIixcIm1heF9hZ2VcIjo2MDQ4MDB9In0sIHsibmFtZSI6ICJzZXJ2ZXIiLCAidmFsdWUiOiAiY2xvdWRmbGFyZSJ9LCB7Im5hbWUiOiAic3RyaWN0LXRyYW5zcG9ydC1zZWN1cml0eSIsICJ2YWx1ZSI6ICJtYXgtYWdlPTYzMDcyMDAwOyBpbmNsdWRlU3ViZG9tYWluczsgcHJlbG9hZCJ9LCB7Im5hbWUiOiAidmFyeSIsICJ2YWx1ZSI6ICJBY2NlcHQtRW5jb2RpbmcifV0sICJjb250ZW50IjogeyJzaXplIjogMzQxNCwgIm1pbWVUeXBlIjogImltYWdlL3BuZyIsICJjb21wcmVzc2lvbiI6IDAsICJ0ZXh0IjogImlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFDQUFBQUFnQ0FZQUFBQnplbnIwQUFBQUNYQklXWE1BQUFzVEFBQUxFd0VBbXB3WUFBQUtUMmxEUTFCUWFHOTBiM05vYjNBZ1NVTkRJSEJ5YjJacGJHVUFBSGphblZOblZGUHBGajMzM3ZSQ1M0aUFsRXR2VWhVSUlGSkNpNEFVa1NZcUlRa1FTb2dob2RrVlVjRVJSVVVFRzhpZ2lBT09qb0NNRlZFc0RJb0syQWZrSWFLT2c2T0lpc3I3NFh1amE5YTg5K2JOL3JYWFB1ZXM4NTJ6endmQUNBeVdTRE5STllBTXFVSWVFZUNEeDhURzRlUXVRSUVLSkhBQUVBaXpaQ0Z6L1NNQkFQaCtQRHdySXNBSHZnQUJlTk1MQ0FEQVRadkFNQnlIL3cvcVFwbGNBWUNFQWNCMGtUaExDSUFVQUVCNmprS21BRUJHQVlDZG1DWlRBS0FFQUdETFkyTGpBRkF0QUdBbmYrYlRBSUNkK0psN0FRQmJsQ0VWQWFDUkFDQVRaWWhFQUdnN0FLelBWb3BGQUZnd0FCUm1TOFE1QU5ndEFEQkpWMlpJQUxDM0FNRE9FQXV5QUFnTUFEQlJpSVVwQUFSN0FHRElJeU40QUlTWkFCUkc4bGM4OFN1dUVPY3FBQUI0bWJJOHVTUTVSWUZiQ0MxeEIxZFhMaDRvemtrWEt4UTJZUUpobWtBdXdubVpHVEtCTkEvZzg4d0FBS0NSRlJIZ2cvUDllTTRPcnM3T05vNjJEbDh0NnI4Ry95SmlZdVArNWMrcmNFQUFBT0YwZnRIK0xDK3pHb0E3Qm9CdC9xSWw3Z1JvWGd1Z2RmZUxacklQUUxVQW9PbmFWL053K0g0OFBFV2hrTG5aMmVYazVOaEt4RUpiWWNwWGZmNW53bC9BVi8xcytYNDgvUGYxNEw3aUpJRXlYWUZIQlBqZ3dzejBUS1VjejVJSmhHTGM1bzlIL0xjTC8vd2QweUxFU1dLNVdDb1U0MUVTY1k1RW1venpNcVVpaVVLU0tjVWwwdjlrNHQ4cyt3TSszelVBc0dvK0FYdVJMYWhkWXdQMlN5Y1FXSFRBNHZjQUFQSzdiOEhVS0FnRGdHaUQ0YzkzLys4Ly9VZWdKUUNBWmttU2NRQUFYa1FrTGxUS3N6L0hDQUFBUktDQktyQkJHL1RCR0N6QUJoekJCZHpCQy94Z05vUkNKTVRDUWhCQ0NtU0FISEpnS2F5Q1FpaUd6YkFkS21BdjFFQWROTUJSYUlhVGNBNHV3bFc0RGoxd0QvcGhDSjdCS0x5QkNRUkJ5QWdUWVNIYWlBRmlpbGdqamdnWG1ZWDRJY0ZJQkJLTEpDREppQlJSSWt1Uk5VZ3hVb3BVSUZWSUhmSTljZ0k1aDF4R3VwRTd5QUF5Z3Z5R3ZFY3hsSUd5VVQzVURMVkR1YWczR29SR29ndlFaSFF4bW84V29KdlFjclFhUFl3Mm9lZlFxMmdQMm84K1E4Y3d3T2dZQnpQRWJEQXV4c05Dc1Rnc0NaTmp5N0VpckF5cnhocXdWcXdEdTRuMVk4K3hkd1FTZ1VYQUNUWUVkMElnWVI1QlNGaE1XRTdZU0tnZ0hDUTBFZG9KTndrRGhGSENKeUtUcUV1MEpyb1IrY1FZWWpJeGgxaElMQ1BXRW84VEx4QjdpRVBFTnlRU2lVTXlKN21RQWtteHBGVFNFdEpHMG01U0kra3NxWnMwU0Jvams4bmFaR3V5QnptVUxDQXJ5SVhrbmVURDVEUGtHK1FoOGxzS25XSkFjYVQ0VStJb1VzcHFTaG5sRU9VMDVRWmxtREpCVmFPYVV0Mm9vVlFSTlk5YVFxMmh0bEt2VVllb0V6UjFtam5OZ3haSlM2V3RvcFhUR21nWGFQZHByK2gwdWhIZGxSNU9sOUJYMHN2cFIraVg2QVAwZHd3TmhoV0R4NGhuS0JtYkdBY1laeGwzR0srWVRLWVowNHNaeDFRd056SHJtT2VaRDVsdlZWZ3F0aXA4RlpIS0NwVktsU2FWR3lvdlZLbXFwcXJlcWd0VjgxWExWSStwWGxOOXJrWlZNMVBqcVFuVWxxdFZxcDFRNjFNYlUyZXBPNmlIcW1lb2IxUS9wSDVaL1lrR1djTk13MDlEcEZHZ3NWL2p2TVlnQzJNWnMzZ3NJV3NOcTRaMWdUWEVKckhOMlh4MktydVkvUjI3aXoycXFhRTVRek5LTTFlelV2T1VaajhINDVoeCtKeDBUZ25uS0tlWDgzNkszaFR2S2VJcEc2WTBUTGt4WlZ4cnFwYVhsbGlyU0t0UnEwZnJ2VGF1N2FlZHByMUZ1MW43Z1E1Qngwb25YQ2RIWjQvT0JaM25VOWxUM2FjS3B4Wk5QVHIxcmk2cWE2VWJvYnRFZDc5dXArNllucjVlZ0o1TWI2ZmVlYjNuK2h4OUwvMVUvVzM2cC9WSERGZ0dzd3drQnRzTXpoZzh4VFZ4Ynp3ZEw4ZmI4VkZEWGNOQVE2VmhsV0dYNFlTUnVkRThvOVZHalVZUGpHbkdYT01rNDIzR2JjYWpKZ1ltSVNaTFRlcE43cHBTVGJtbUthWTdURHRNeDgzTXphTE4xcGsxbXoweDF6TG5tK2ViMTV2ZnQyQmFlRm9zdHFpMnVHVkpzdVJhcGxudXRyeHVoVm81V2FWWVZWcGRzMGF0bmEwbDFydXR1NmNScDdsT2swNnJudFpudzdEeHRzbTJxYmNac09YWUJ0dXV0bTIyZldGblloZG50OFd1dys2VHZaTjl1bjJOL1QwSERZZlpEcXNkV2gxK2M3UnlGRHBXT3Q2YXpwenVQMzNGOUpicEwyZFl6eERQMkRQanRoUExLY1JwblZPYjAwZG5GMmU1YzRQemlJdUpTNExMTHBjK0xwc2J4dDNJdmVSS2RQVnhYZUY2MHZXZG03T2J3dTJvMjYvdU51NXA3b2Zjbjh3MG55bWVXVE56ME1QSVErQlI1ZEUvQzUrVk1HdmZySDVQUTArQlo3WG5JeTlqTDVGWHJkZXd0NlYzcXZkaDd4Yys5ajV5bitNKzR6dzMzakxlV1YvTU44QzN5TGZMVDhOdm5sK0YzME4vSS85ay8zci8wUUNuZ0NVQlp3T0pnVUdCV3dMNytIcDhJYitPUHpyYlpmYXkyZTFCaktDNVFSVkJqNEt0Z3VYQnJTRm95T3lRclNIMzU1ak9rYzVwRG9WUWZ1alcwQWRoNW1HTHczNE1KNFdIaFZlR1A0NXdpRmdhMFRHWE5YZlIzRU56MzBUNlJKWkUzcHRuTVU4NXJ5MUtOU28rcWk1cVBObzN1alM2UDhZdVpsbk0xVmlkV0Vsc1N4dzVMaXF1Tm01c3Z0Lzg3Zk9INHAzaUMrTjdGNWd2eUYxd2VhSE93dlNGcHhhcExoSXNPcFpBVEloT09KVHdRUkFxcUJhTUpmSVRkeVdPQ25uQ0hjSm5JaS9STnRHSTJFTmNLaDVPOGtncVRYcVM3Skc4Tlhra3hUT2xMT1c1aENlcGtMeE1EVXpkbXpxZUZwcDJJRzB5UFRxOU1ZT1NrWkJ4UXFvaFRaTzJaK3BuNW1aMnk2eGxoYkwreFc2THR5OGVsUWZKYTdPUXJBVlpMUXEyUXFib1ZGb28xeW9Ic21kbFYyYS96WW5LT1phcm5pdk43Y3l6eXR1UU41enZuLy90RXNJUzRaSzJwWVpMVnkwZFdPYTlyR281c2p4eGVkc0s0eFVGSzRaV0Jxdzh1SXEyS20zVlQ2dnRWNWV1ZnIwbWVrMXJnVjdCeW9MQnRRRnI2d3RWQ3VXRmZldmMxKzFkVDFndldkKzFZZnFHblJzK0ZZbUtyaFRiRjVjVmY5Z28zSGpsRzRkdnlyK1ozSlMwcWF2RXVXVFBadEptNmViZUxaNWJEcGFxbCthWERtNE4yZHEwRGQ5V3RPMzE5a1hiTDVmTktOdTdnN1pEdWFPL1BMaThaYWZKenMwN1AxU2tWUFJVK2xRMjd0TGR0V0hYK0c3UjdodDd2UFkwN05YYlc3ejMvVDdKdnR0VkFWVk4xV2JWWmZ0Sis3UDNQNjZKcXVuNGx2dHRYYTFPYlhIdHh3UFNBLzBISXc2MjE3blUxUjNTUFZSU2o5WXI2MGNPeHgrKy9wM3ZkeTBOTmcxVmpaekc0aU53UkhuazZmY0ozL2NlRFRyYWRveDdyT0VIMHg5MkhXY2RMMnBDbXZLYVJwdFRtdnRiWWx1NlQ4dyswZGJxM25yOFI5c2ZENXcwUEZsNVN2TlV5V25hNllMVGsyZnl6NHlkbFoxOWZpNzUzR0Rib3JaNzUyUE8zMm9QYisrNkVIVGgwa1gvaStjN3ZEdk9YUEs0ZFBLeTIrVVRWN2hYbXE4NlgyM3FkT284L3BQVFQ4ZTduTHVhcnJsY2E3bnVlcjIxZTJiMzZSdWVOODdkOUwxNThSYi8xdFdlT1QzZHZmTjZiL2ZGOS9YZkZ0MStjaWY5enN1NzJYY243cTI4VDd4ZjlFRHRRZGxEM1lmVlAxdiszTmp2M0g5cXdIZWc4OUhjUi9jR2hZUFAvcEgxanc5REJZK1pqOHVHRFlicm5qZytPVG5pUDNMOTZmeW5RODlrenlhZUYvNmkvc3V1RnhZdmZ2alY2OWZPMFpqUm9aZnlsNU8vYlh5bC9lckE2eG12MjhiQ3hoNit5WGd6TVY3MFZ2dnR3WGZjZHgzdm85OFBUK1I4SUg4by8yajVzZlZUMEtmN2t4bVRrLzhFQTVqei9HTXpMZHNBQUFBRVowRk5RUUFBc1k1OCsxR1RBQUFBSUdOSVVrMEFBSG9sQUFDQWd3QUErZjhBQUlEcEFBQjFNQUFBNm1BQUFEcVlBQUFYYjVKZnhVWUFBQUp4U1VSQlZIamE3SmM5YUJSQkZNZC8vemU3N2hHTXgwRkFvaFlCTDRXa0NTSnFaWlZHa0JDUklBU0MyR2tqZm9DVmFDV0lDSUsxblFvMlZoYWlJb1EwRm1wUUc0dW8rQUZxUkl4Y2tVREk3dGpzaGZPOHkrMXVjZ1RFZ1ZmczdqRC8zNXYzOXMwYmVlL1p5R0ZzOFBoM0FDUTVTWk5tOXRqTXZwclpkK2ZjYTBsWEpHMXZNWCtucEJKcERvVE91VW52UFVVTTJBWThCWHdyazFSenpoMEZTa0VRSERLemU4QVQ3ejMxQlVhQnhEbDNwb0Q0RmpONzAwNjh3UkpnQ2ZCbVZnT0dHZ0d1MWllWjJhV2NBRGN5aURmYVQrZmNHSERFT1hlcXZzak5wa2wzZ1hJbjhVcWxVZ1lXY2dJc0FESHdFZGhSQjdqV0ltNmZnSEh2dlZieGZpU25lTjArUkZFMHVCSUM1OXg0dThsbTlnS1lBS0ptZ0RTeDhvcC9BN2F1T0pGNlVwTDBwVlBzZ0Z2QU1XQm9ZR0NnQkl6bEJaQTA4OGN1Tm16bjRUUTJXUmRiVHJNNTd3NU1OUUlZUUJBRXA1MXptTmxGWURsajdYRkprdlRtcm54bWM0M1BBVUFjeDFYZ2VrclkxWkVreVd5clV2eW9YaUZUNitaNC9zZFRHbjhEWGhYOHBmTFlVcmxjcnJSTXdqQU1kMHVxZFJOQTBzTy9ha2xUWWRrRHZPOGl4RVFuZ00xUkZGWE43REl3djg3ZWZ3WTJkUUlZbExUY0plOVB0aXpuNjNDNlpmSCtKUkJrQXFoV3F4RndmeDBCRnNNd0hHNTdvTFU1NVp4ejdod3d0MGJ4QkRpK2FqL1JvZGtJZ1FQQXM0TGlGem8yTkt0OURNTndMekJkUUR3MnMvT1pPcXFtRndLcXdJbFVPQ21RY0QrQTBjd3RYUkFFSTJZMkxXbFcwcTgxeERzRzd2VDA5UFRuNmltOTkvVDE5ZlVDWjRGM0JUeGVOTFBid0hDUmxsNk5kME5KQXZZQkJ5WHRCM1o1Ny92cngzWXFPaS9wcmFRWlNWTnhIRC93M3RjS1gyaitYMDQzR3VEM0FJblpOa0FjYmNvaEFBQUFBRWxGVGtTdVFtQ0MiLCAiZW5jb2RpbmciOiAiYmFzZTY0In0sICJoZWFkZXJzU2l6ZSI6IDAsICJib2R5U2l6ZSI6IDM4MTgsICJyZWRpcmVjdFVSTCI6ICIiLCAiX3RyYW5zZmVyU2l6ZSI6IDM4MTh9LCAiY2FjaGUiOiB7fSwgInRpbWluZ3MiOiB7ImRucyI6IC0xLCAiY29ubmVjdCI6IC0xLCAic3NsIjogLTEsICJzZW5kIjogMCwgIndhaXQiOiAzMDcuNDk4LCAicmVjZWl2ZSI6IDU2NS41NDd9LCAicGFnZXJlZiI6ICJwYWdlQDhjOTMyZjgzMzdkOWFiYjRiOWFiOTg4OWRlYzUxYjk5IiwgInNlcnZlcklQQWRkcmVzcyI6ICJbMjYwNjo0NzAwOjIwOjo2ODFhOmVjZl0iLCAiX3NlcnZlclBvcnQiOiA0NDMsICJfc2VjdXJpdHlEZXRhaWxzIjogeyJwcm90b2NvbCI6ICJUTFMgMS4zIiwgInN1YmplY3ROYW1lIjogInN1cHBseWNoYWluY2FuYWRhLmNvbSIsICJpc3N1ZXIiOiAiV0UxIiwgInZhbGlkRnJvbSI6IDE3MjM0NzA4NDEsICJ2YWxpZFRvIjogMTczMTI0Njg0MH19LCB7InN0YXJ0ZWREYXRlVGltZSI6ICIyMDI0LTA5LTA1VDExOjA3OjIwLjMyMFoiLCAidGltZSI6IDkyMy44ODMsICJyZXF1ZXN0IjogeyJtZXRob2QiOiAiR0VUIiwgInVybCI6ICJodHRwczovL3BvcnRhbC5zdXBwbHljaGFpbmNhbmFkYS5jb20vbXBvd2VyL2NtczIvaW1nL2ljb24tZmFjZWJvb2stMzIucG5nIiwgImh0dHBWZXJzaW9uIjogIkhUVFAvMi4wIiwgImNvb2tpZXMiOiBbeyJuYW1lIjogIkpTRVNTSU9OSUQiLCAidmFsdWUiOiAiMjU3RDlEQzkyMDQ1MkE0RDkzM0I4QTNDREE5QjZCRDMifV0sICJoZWFkZXJzIjogW3sibmFtZSI6ICI6YXV0aG9yaXR5IiwgInZhbHVlIjogInBvcnRhbC5zdXBwbHljaGFpbmNhbmFkYS5jb20ifSwgeyJuYW1lIjogIjptZXRob2QiLCAidmFsdWUiOiAiR0VUIn0sIHsibmFtZSI6ICI6cGF0aCIsICJ2YWx1ZSI6ICIvbXBvd2VyL2NtczIvaW1nL2ljb24tZmFjZWJvb2stMzIucG5nIn0sIHsibmFtZSI6ICI6c2NoZW1lIiwgInZhbHVlIjogImh0dHBzIn0sIHsibmFtZSI6ICJhY2NlcHQiLCAidmFsdWUiOiAiaW1hZ2UvYXZpZixpbWFnZS93ZWJwLGltYWdlL2FwbmcsaW1hZ2Uvc3ZnK3htbCxpbWFnZS8qLCovKjtxPTAuOCJ9LCB7Im5hbWUiOiAiYWNjZXB0LWVuY29kaW5nIiwgInZhbHVlIjogImd6aXAsIGRlZmxhdGUsIGJyLCB6c3RkIn0sIHsibmFtZSI6ICJhY2NlcHQtbGFuZ3VhZ2UiLCAidmFsdWUiOiAiZW4tVVMifSwgeyJuYW1lIjogImNvb2tpZSIsICJ2YWx1ZSI6ICJKU0VTU0lPTklEPTI1N0Q5REM5MjA0NTJBNEQ5MzNCOEEzQ0RBOUI2QkQzIn0sIHsibmFtZSI6ICJwcmlvcml0eSIsICJ2YWx1ZSI6ICJ1PTIsIGkifSwgeyJuYW1lIjogInJlZmVyZXIiLCAidmFsdWUiOiAiaHR0cHM6Ly9wb3J0YWwuc3VwcGx5Y2hhaW5jYW5hZGEuY29tL2VuL3BvcnRhbGxvZ2luIn0sIHsibmFtZSI6ICJzZWMtY2gtdWEiLCAidmFsdWUiOiAiXCJOb3Q7QT1CcmFuZFwiO3Y9XCIyNFwiLCBcIkNocm9taXVtXCI7dj1cIjEyOFwiIn0sIHsibmFtZSI6ICJzZWMtY2gtdWEtbW9iaWxlIiwgInZhbHVlIjogIj8wIn0sIHsibmFtZSI6ICJzZWMtY2gtdWEtcGxhdGZvcm0iLCAidmFsdWUiOiAiXCJXaW5kb3dzXCIifSwgeyJuYW1lIjogInNlYy1mZXRjaC1kZXN0IiwgInZhbHVlIjogImltYWdlIn0sIHsibmFtZSI6ICJzZWMtZmV0Y2gtbW9kZSIsICJ2YWx1ZSI6ICJuby1jb3JzIn0sIHsibmFtZSI6ICJzZWMtZmV0Y2gtc2l0ZSIsICJ2YWx1ZSI6ICJzYW1lLW9yaWdpbiJ9LCB7Im5hbWUiOiAidXNlci1hZ2VudCIsICJ2YWx1ZSI6ICJNb3ppbGxhLzUuMCAoV2luZG93cyBOVCAxMC4wOyBXaW42NDsgeDY0KSBBcHBsZVdlYktpdC81MzcuMzYgKEtIVE1MLCBsaWtlIEdlY2tvKSBDaHJvbWUvMTI4LjAuNjYxMy4xOCBTYWZhcmkvNTM3LjM2In1dLCAicXVlcnlTdHJpbmciOiBbXSwgImhlYWRlcnNTaXplIjogNzU1LCAiYm9keVNpemUiOiAwfSwgInJlc3BvbnNlIjogeyJzdGF0dXMiOiAyMDAsICJzdGF0dXNUZXh0IjogIiIsICJodHRwVmVyc2lvbiI6ICJIVFRQLzIuMCIsICJjb29raWVzIjogW10sICJoZWFkZXJzIjogW3sibmFtZSI6ICJhY2NlcHQtcmFuZ2VzIiwgInZhbHVlIjogImJ5dGVzIn0sIHsibmFtZSI6ICJjYWNoZS1jb250cm9sIiwgInZhbHVlIjogIm1heC1hZ2U9MTQ0MDAifSwgeyJuYW1lIjogImNmLWNhY2hlLXN0YXR1cyIsICJ2YWx1ZSI6ICJNSVNTIn0sIHsibmFtZSI6ICJjZi1yYXkiLCAidmFsdWUiOiAiOGJlNWMxNGZkY2Y1NzFjNC1GUkEifSwgeyJuYW1lIjogImNvbnRlbnQtbGVuZ3RoIiwgInZhbHVlIjogIjQ0OCJ9LCB7Im5hbWUiOiAiY29udGVudC10eXBlIiwgInZhbHVlIjogImltYWdlL3BuZyJ9LCB7Im5hbWUiOiAiZGF0ZSIsICJ2YWx1ZSI6ICJUaHUsIDA1IFNlcCAyMDI0IDExOjA3OjIxIEdNVCJ9LCB7Im5hbWUiOiAiZXRhZyIsICJ2YWx1ZSI6ICJXL1wiNDQ4LTE2ODEzMzM0MjIwMDBcIiJ9LCB7Im5hbWUiOiAibGFzdC1tb2RpZmllZCIsICJ2YWx1ZSI6ICJXZWQsIDEyIEFwciAyMDIzIDIxOjAzOjQyIEdNVCJ9LCB7Im5hbWUiOiAibmVsIiwgInZhbHVlIjogIntcInN1Y2Nlc3NfZnJhY3Rpb25cIjowLFwicmVwb3J0X3RvXCI6XCJjZi1uZWxcIixcIm1heF9hZ2VcIjo2MDQ4MDB9In0sIHsibmFtZSI6ICJyZXBvcnQtdG8iLCAidmFsdWUiOiAie1wiZW5kcG9pbnRzXCI6W3tcInVybFwiOlwiaHR0cHM6XFwvXFwvYS5uZWwuY2xvdWRmbGFyZS5jb21cXC9yZXBvcnRcXC92ND9zPVR6NyUyRnZSazVacGtMTHJCcnU5QjJNUEdIdDBVSnpTTDBpWkh1QzRRZXlmVGgwVk1GZTRiZEhoWXlJaHZQQ0gxQ1pVWFQzcVJ1aEdZeGN5aFo1RW9RSzhEVDlhbEkyT2RsR2U3UUd3MURlbVU3MEtpRHhEYVRsUEoxV0p0c3Z0amxMcXREdnp1SWNXQUJ2SW9Td2REVHZMNFlOdkNsbm9lcXd2dyUzRFwifV0sXCJncm91cFwiOlwiY2YtbmVsXCIsXCJtYXhfYWdlXCI6NjA0ODAwfSJ9LCB7Im5hbWUiOiAic2VydmVyIiwgInZhbHVlIjogImNsb3VkZmxhcmUifSwgeyJuYW1lIjogInN0cmljdC10cmFuc3BvcnQtc2VjdXJpdHkiLCAidmFsdWUiOiAibWF4LWFnZT02MzA3MjAwMDsgaW5jbHVkZVN1YmRvbWFpbnM7IHByZWxvYWQifSwgeyJuYW1lIjogInZhcnkiLCAidmFsdWUiOiAiQWNjZXB0LUVuY29kaW5nIn1dLCAiY29udGVudCI6IHsic2l6ZSI6IDQ0OCwgIm1pbWVUeXBlIjogImltYWdlL3BuZyIsICJjb21wcmVzc2lvbiI6IDAsICJ0ZXh0IjogImlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFDQUFBQUFnQ0FZQUFBQnplbnIwQUFBQmgwbEVRVlI0MnUyWFBVdkRRQmpIRHluaUoyaEJpME1uRjEzN0ZYUldIT29ISzRLYmdzNmlkQkd5VkJ4MGpLaWdZdXRyYkdLZEVnSzVuUDlIenNHUXl2bG9ja3NlK0hHWGw3dm5sN3VFM0FtQlVFck5nYzAwVFYxd2pmb0FQS0QrRER6d0Nud1FnRGN3emdOdDZIb2dwZlRCU0xkOXdmbEhIQTlSM2xBTzFMdW8xeW0zQ01Od25tNVFKWWQrMERvOS9iYXlGMTBCazVHdDdNaDlJZlRjY1VPQ2MzQ0Vmbm9vRHpUdmh1MEhiQUcwMjQraXFDVnlBcGZQak95bGZPSUs5RUZOVEFoVEFZVEhGVmdUUDhRdlJzRG5DclF6Q2FmQUN1aUFEWEJyT0kwQlYyQXBJN0RNZkkvR1hJR0ZqTUI2MlFMZjN2NGtTVmJMRURnRlRkQ2dPYytNd0xRK1AwdjNvTStySWdUNndqRG94MlZOd0hWZEdvMmtDSUZqeDNGcVJNNTNQNk9ub0JISDhhS05yNkJqK3pPc0JDcUJTb0FsUU10NHF3Si9XWkQ4MXdoNHRrZUF2U2c5Qkh0Zm9JOFRwc0RRK05kWlVGd0tXT3hhRk5paStXdloySjRoNXoydG9ENWZJdHJoNEdDSHRrcTBGVWM1Y1F2T2hmckVhRlBmZHlocFE5eWszQi91OXpxNzd3MXIwZ0FBQUFCSlJVNUVya0pnZ2c9PSIsICJlbmNvZGluZyI6ICJiYXNlNjQifSwgImhlYWRlcnNTaXplIjogMCwgImJvZHlTaXplIjogNzYyLCAicmVkaXJlY3RVUkwiOiAiIiwgIl90cmFuc2ZlclNpemUiOiA3NjJ9LCAiY2FjaGUiOiB7fSwgInRpbWluZ3MiOiB7ImRucyI6IC0xLCAiY29ubmVjdCI6IC0xLCAic3NsIjogLTEsICJzZW5kIjogMCwgIndhaXQiOiAzMDkuNTE1LCAicmVjZWl2ZSI6IDYxNC4zNjh9LCAicGFnZXJlZiI6ICJwYWdlQDhjOTMyZjgzMzdkOWFiYjRiOWFiOTg4OWRlYzUxYjk5IiwgInNlcnZlcklQQWRkcmVzcyI6ICJbMjYwNjo0NzAwOjIwOjo2ODFhOmVjZl0iLCAiX3NlcnZlclBvcnQiOiA0NDMsICJfc2VjdXJpdHlEZXRhaWxzIjogeyJwcm90b2NvbCI6ICJUTFMgMS4zIiwgInN1YmplY3ROYW1lIjogInN1cHBseWNoYWluY2FuYWRhLmNvbSIsICJpc3N1ZXIiOiAiV0UxIiwgInZhbGlkRnJvbSI6IDE3MjM0NzA4NDEsICJ2YWxpZFRvIjogMTczMTI0Njg0MH19LCB7InN0YXJ0ZWREYXRlVGltZSI6ICIyMDI0LTA5LTA1VDExOjA3OjIwLjMyMFoiLCAidGltZSI6IDEwNjIuMjA2MDAwMDAwMDAwMSwgInJlcXVlc3QiOiB7Im1ldGhvZCI6ICJHRVQiLCAidXJsIjogImh0dHBzOi8vcG9ydGFsLnN1cHBseWNoYWluY2FuYWRhLmNvbS9tcG93ZXIvY21zMi9pbWcvaWNvbi1saW5rZWRpbi0zMi5wbmciLCAiaHR0cFZlcnNpb24iOiAiSFRUUC8yLjAiLCAiY29va2llcyI6IFt7Im5hbWUiOiAiSlNFU1NJT05JRCIsICJ2YWx1ZSI6ICIyNTdEOURDOTIwNDUyQTREOTMzQjhBM0NEQTlCNkJEMyJ9XSwgImhlYWRlcnMiOiBbeyJuYW1lIjogIjphdXRob3JpdHkiLCAidmFsdWUiOiAicG9ydGFsLnN1cHBseWNoYWluY2FuYWRhLmNvbSJ9LCB7Im5hbWUiOiAiOm1ldGhvZCIsICJ2YWx1ZSI6ICJHRVQifSwgeyJuYW1lIjogIjpwYXRoIiwgInZhbHVlIjogIi9tcG93ZXIvY21zMi9pbWcvaWNvbi1saW5rZWRpbi0zMi5wbmcifSwgeyJuYW1lIjogIjpzY2hlbWUiLCAidmFsdWUiOiAiaHR0cHMifSwgeyJuYW1lIjogImFjY2VwdCIsICJ2YWx1ZSI6ICJpbWFnZS9hdmlmLGltYWdlL3dlYnAsaW1hZ2UvYXBuZyxpbWFnZS9zdmcreG1sLGltYWdlLyosKi8qO3E9MC44In0sIHsibmFtZSI6ICJhY2NlcHQtZW5jb2RpbmciLCAidmFsdWUiOiAiZ3ppcCwgZGVmbGF0ZSwgYnIsIHpzdGQifSwgeyJuYW1lIjogImFjY2VwdC1sYW5ndWFnZSIsICJ2YWx1ZSI6ICJlbi1VUyJ9LCB7Im5hbWUiOiAiY29va2llIiwgInZhbHVlIjogIkpTRVNTSU9OSUQ9MjU3RDlEQzkyMDQ1MkE0RDkzM0I4QTNDREE5QjZCRDMifSwgeyJuYW1lIjogInByaW9yaXR5IiwgInZhbHVlIjogImkifSwgeyJuYW1lIjogInJlZmVyZXIiLCAidmFsdWUiOiAiaHR0cHM6Ly9wb3J0YWwuc3VwcGx5Y2hhaW5jYW5hZGEuY29tL2VuL3BvcnRhbGxvZ2luIn0sIHsibmFtZSI6ICJzZWMtY2gtdWEiLCAidmFsdWUiOiAiXCJOb3Q7QT1CcmFuZFwiO3Y9XCIyNFwiLCBcIkNocm9taXVtXCI7dj1cIjEyOFwiIn0sIHsibmFtZSI6ICJzZWMtY2gtdWEtbW9iaWxlIiwgInZhbHVlIjogIj8wIn0sIHsibmFtZSI6ICJzZWMtY2gtdWEtcGxhdGZvcm0iLCAidmFsdWUiOiAiXCJXaW5kb3dzXCIifSwgeyJuYW1lIjogInNlYy1mZXRjaC1kZXN0IiwgInZhbHVlIjogImltYWdlIn0sIHsibmFtZSI6ICJzZWMtZmV0Y2gtbW9kZSIsICJ2YWx1ZSI6ICJuby1jb3JzIn0sIHsibmFtZSI6ICJzZWMtZmV0Y2gtc2l0ZSIsICJ2YWx1ZSI6ICJzYW1lLW9yaWdpbiJ9LCB7Im5hbWUiOiAidXNlci1hZ2VudCIsICJ2YWx1ZSI6ICJNb3ppbGxhLzUuMCAoV2luZG93cyBOVCAxMC4wOyBXaW42NDsgeDY0KSBBcHBsZVdlYktpdC81MzcuMzYgKEtIVE1MLCBsaWtlIEdlY2tvKSBDaHJvbWUvMTI4LjAuNjYxMy4xOCBTYWZhcmkvNTM3LjM2In1dLCAicXVlcnlTdHJpbmciOiBbXSwgImhlYWRlcnNTaXplIjogNzUwLCAiYm9keVNpemUiOiAwfSwgInJlc3BvbnNlIjogeyJzdGF0dXMiOiAyMDAsICJzdGF0dXNUZXh0IjogIiIsICJodHRwVmVyc2lvbiI6ICJIVFRQLzIuMCIsICJjb29raWVzIjogW10sICJoZWFkZXJzIjogW3sibmFtZSI6ICJhY2NlcHQtcmFuZ2VzIiwgInZhbHVlIjogImJ5dGVzIn0sIHsibmFtZSI6ICJjYWNoZS1jb250cm9sIiwgInZhbHVlIjogIm1heC1hZ2U9MTQ0MDAifSwgeyJuYW1lIjogImNmLWNhY2hlLXN0YXR1cyIsICJ2YWx1ZSI6ICJNSVNTIn0sIHsibmFtZSI6ICJjZi1yYXkiLCAidmFsdWUiOiAiOGJlNWMxNTBiZThlNzFjNC1GUkEifSwgeyJuYW1lIjogImNvbnRlbnQtbGVuZ3RoIiwgInZhbHVlIjogIjQ5NyJ9LCB7Im5hbWUiOiAiY29udGVudC10eXBlIiwgInZhbHVlIjogImltYWdlL3BuZyJ9LCB7Im5hbWUiOiAiZGF0ZSIsICJ2YWx1ZSI6ICJUaHUsIDA1IFNlcCAyMDI0IDExOjA3OjIxIEdNVCJ9LCB7Im5hbWUiOiAiZXRhZyIsICJ2YWx1ZSI6ICJXL1wiNDk3LTE2ODEzMzM0MjIwMDBcIiJ9LCB7Im5hbWUiOiAibGFzdC1tb2RpZmllZCIsICJ2YWx1ZSI6ICJXZWQsIDEyIEFwciAyMDIzIDIxOjAzOjQyIEdNVCJ9LCB7Im5hbWUiOiAibmVsIiwgInZhbHVlIjogIntcInN1Y2Nlc3NfZnJhY3Rpb25cIjowLFwicmVwb3J0X3RvXCI6XCJjZi1uZWxcIixcIm1heF9hZ2VcIjo2MDQ4MDB9In0sIHsibmFtZSI6ICJyZXBvcnQtdG8iLCAidmFsdWUiOiAie1wiZW5kcG9pbnRzXCI6W3tcInVybFwiOlwiaHR0cHM6XFwvXFwvYS5uZWwuY2xvdWRmbGFyZS5jb21cXC9yZXBvcnRcXC92ND9zPU85dklnZmFyWXdlS05MWDV4NGIwRXVpNkxVUEhlUVlGQ0xyalRUWFY1cGlxM1ViVEMyRTV4WnVPNDhmaTMlMkZmUmhRUFhETndiVHlDYlJwSmM5OVZ6bTdub25IMFdtZ29mSGRZd3I0blV6eXlteDFLVmRCb2pWNEY3Nk5MZyUyQnZRUUlnY1Y4NGhrMThEV0lHWjhSajNFaXFjN0xpUVkyZkNPQTV3JTNEXCJ9XSxcImdyb3VwXCI6XCJjZi1uZWxcIixcIm1heF9hZ2VcIjo2MDQ4MDB9In0sIHsibmFtZSI6ICJzZXJ2ZXIiLCAidmFsdWUiOiAiY2xvdWRmbGFyZSJ9LCB7Im5hbWUiOiAic3RyaWN0LXRyYW5zcG9ydC1zZWN1cml0eSIsICJ2YWx1ZSI6ICJtYXgtYWdlPTYzMDcyMDAwOyBpbmNsdWRlU3ViZG9tYWluczsgcHJlbG9hZCJ9LCB7Im5hbWUiOiAidmFyeSIsICJ2YWx1ZSI6ICJBY2NlcHQtRW5jb2RpbmcifV0sICJjb250ZW50IjogeyJzaXplIjogNDk3LCAibWltZVR5cGUiOiAiaW1hZ2UvcG5nIiwgImNvbXByZXNzaW9uIjogMCwgInRleHQiOiAiaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUNBQUFBQWdDQVlBQUFCemVucjBBQUFCdUVsRVFWUjQydTJXdnk4RVFSVEgxeFU2QmZIai9BT2l1VlpCd1Q4Z0dvVkNvbE1xNmZ3QktqblpFM2RCb2xJcGthaEZJeEZ1dzkyNWNFY2hJbmVLWGNuWlgrTTd5UlZ1N2N4RFpsYmpKZCs4M1oyZE41OTliMloyREFQR0dCdUNDbUVZUGdaQlVJUHl1Qjgya2pBTTFJK0I3OWxYcXptT2s5WU9nSzlkWndKRG02a2RBRjkvSlFKQW01VkVDWXFTREZoSmxDQXJBY2dtTlFsdlk5Si9aOXYyWUZJcllRQXlNV2dWdmdKdDhHZkd2eVdVL2w1b1dxQ08zYkRWYW8wSTNwdjZGSzhQV29GT29RYks2dkNORGhQNkFQZnpVSGNIZ091NjQweHNzNUVWc3lwNHI5UWVmQTVxU3VMeHlYMERsMUVLZ09kVjMvY1hlWHoyRFFNRWh4eFZCc0RURFBmT2ZtRG9jNmF5QkwrMXliOEd5Q2tGUVB1UjUza1R1T3lCMHBnWFMvQnZraktjS3dOQXNHTzRWSFNaQTJKQkVyK3VNZ01ad1Q2VEF0eURvTSt6eWxYUUpmbmpIZ3JpTjFRQlBCRzc3YjZnMzZ1cUV0U0pVOWVlVmdCK2RpQXlzS3NWZ0cvRnhLbHJSM2NKS2dUQXRtNkFFbEdDZ202QWF5SURlZDJUMENJeXNLVTdBMFVDWUZNM3dDVUJrTk1OY0VFQW1FSUErREYrRVNlMHpVUUFsdHZQbS9EOHdQbkNmeWpRQ1FHd0Z0Y1A4Y29mQ0tYTmpQRjhpMklBQUFBQVNVVk9SSzVDWUlJPSIsICJlbmNvZGluZyI6ICJiYXNlNjQifSwgImhlYWRlcnNTaXplIjogMCwgImJvZHlTaXplIjogODEyLCAicmVkaXJlY3RVUkwiOiAiIiwgIl90cmFuc2ZlclNpemUiOiA4MTJ9LCAiY2FjaGUiOiB7fSwgInRpbWluZ3MiOiB7ImRucyI6IC0xLCAiY29ubmVjdCI6IC0xLCAic3NsIjogLTEsICJzZW5kIjogMCwgIndhaXQiOiAzMDYuMzcsICJyZWNlaXZlIjogNzU1LjgzNn0sICJwYWdlcmVmIjogInBhZ2VAOGM5MzJmODMzN2Q5YWJiNGI5YWI5ODg5ZGVjNTFiOTkiLCAic2VydmVySVBBZGRyZXNzIjogIlsyNjA2OjQ3MDA6MjA6OjY4MWE6ZWNmXSIsICJfc2VydmVyUG9ydCI6IDQ0MywgIl9zZWN1cml0eURldGFpbHMiOiB7InByb3RvY29sIjogIlRMUyAxLjMiLCAic3ViamVjdE5hbWUiOiAic3VwcGx5Y2hhaW5jYW5hZGEuY29tIiwgImlzc3VlciI6ICJXRTEiLCAidmFsaWRGcm9tIjogMTcyMzQ3MDg0MSwgInZhbGlkVG8iOiAxNzMxMjQ2ODQwfX0sIHsic3RhcnRlZERhdGVUaW1lIjogIjIwMjQtMDktMDVUMTE6MDc6MjAuMzIwWiIsICJ0aW1lIjogMTA1Ny42NTQsICJyZXF1ZXN0IjogeyJtZXRob2QiOiAiR0VUIiwgInVybCI6ICJodHRwczovL3BvcnRhbC5zdXBwbHljaGFpbmNhbmFkYS5jb20vbXBvd2VyL2NtczIvaW1nL2ljb24tdHdpdHRlci0zMi5wbmciLCAiaHR0cFZlcnNpb24iOiAiSFRUUC8yLjAiLCAiY29va2llcyI6IFt7Im5hbWUiOiAiSlNFU1NJT05JRCIsICJ2YWx1ZSI6ICIyNTdEOURDOTIwNDUyQTREOTMzQjhBM0NEQTlCNkJEMyJ9XSwgImhlYWRlcnMiOiBbeyJuYW1lIjogIjphdXRob3JpdHkiLCAidmFsdWUiOiAicG9ydGFsLnN1cHBseWNoYWluY2FuYWRhLmNvbSJ9LCB7Im5hbWUiOiAiOm1ldGhvZCIsICJ2YWx1ZSI6ICJHRVQifSwgeyJuYW1lIjogIjpwYXRoIiwgInZhbHVlIjogIi9tcG93ZXIvY21zMi9pbWcvaWNvbi10d2l0dGVyLTMyLnBuZyJ9LCB7Im5hbWUiOiAiOnNjaGVtZSIsICJ2YWx1ZSI6ICJodHRwcyJ9LCB7Im5hbWUiOiAiYWNjZXB0IiwgInZhbHVlIjogImltYWdlL2F2aWYsaW1hZ2Uvd2VicCxpbWFnZS9hcG5nLGltYWdlL3N2Zyt4bWwsaW1hZ2UvKiwqLyo7cT0wLjgifSwgeyJuYW1lIjogImFjY2VwdC1lbmNvZGluZyIsICJ2YWx1ZSI6ICJnemlwLCBkZWZsYXRlLCBiciwgenN0ZCJ9LCB7Im5hbWUiOiAiYWNjZXB0LWxhbmd1YWdlIiwgInZhbHVlIjogImVuLVVTIn0sIHsibmFtZSI6ICJjb29raWUiLCAidmFsdWUiOiAiSlNFU1NJT05JRD0yNTdEOURDOTIwNDUyQTREOTMzQjhBM0NEQTlCNkJEMyJ9LCB7Im5hbWUiOiAicHJpb3JpdHkiLCAidmFsdWUiOiAiaSJ9LCB7Im5hbWUiOiAicmVmZXJlciIsICJ2YWx1ZSI6ICJodHRwczovL3BvcnRhbC5zdXBwbHljaGFpbmNhbmFkYS5jb20vZW4vcG9ydGFsbG9naW4ifSwgeyJuYW1lIjogInNlYy1jaC11YSIsICJ2YWx1ZSI6ICJcIk5vdDtBPUJyYW5kXCI7dj1cIjI0XCIsIFwiQ2hyb21pdW1cIjt2PVwiMTI4XCIifSwgeyJuYW1lIjogInNlYy1jaC11YS1tb2JpbGUiLCAidmFsdWUiOiAiPzAifSwgeyJuYW1lIjogInNlYy1jaC11YS1wbGF0Zm9ybSIsICJ2YWx1ZSI6ICJcIldpbmRvd3NcIiJ9LCB7Im5hbWUiOiAic2VjLWZldGNoLWRlc3QiLCAidmFsdWUiOiAiaW1hZ2UifSwgeyJuYW1lIjogInNlYy1mZXRjaC1tb2RlIiwgInZhbHVlIjogIm5vLWNvcnMifSwgeyJuYW1lIjogInNlYy1mZXRjaC1zaXRlIiwgInZhbHVlIjogInNhbWUtb3JpZ2luIn0sIHsibmFtZSI6ICJ1c2VyLWFnZW50IiwgInZhbHVlIjogIk1vemlsbGEvNS4wIChXaW5kb3dzIE5UIDEwLjA7IFdpbjY0OyB4NjQpIEFwcGxlV2ViS2l0LzUzNy4zNiAoS0hUTUwsIGxpa2UgR2Vja28pIENocm9tZS8xMjguMC42NjEzLjE4IFNhZmFyaS81MzcuMzYifV0sICJxdWVyeVN0cmluZyI6IFtdLCAiaGVhZGVyc1NpemUiOiA3NDgsICJib2R5U2l6ZSI6IDB9LCAicmVzcG9uc2UiOiB7InN0YXR1cyI6IDIwMCwgInN0YXR1c1RleHQiOiAiIiwgImh0dHBWZXJzaW9uIjogIkhUVFAvMi4wIiwgImNvb2tpZXMiOiBbXSwgImhlYWRlcnMiOiBbeyJuYW1lIjogImFjY2VwdC1yYW5nZXMiLCAidmFsdWUiOiAiYnl0ZXMifSwgeyJuYW1lIjogImNhY2hlLWNvbnRyb2wiLCAidmFsdWUiOiAibWF4LWFnZT0xNDQwMCJ9LCB7Im5hbWUiOiAiY2YtY2FjaGUtc3RhdHVzIiwgInZhbHVlIjogIk1JU1MifSwgeyJuYW1lIjogImNmLXJheSIsICJ2YWx1ZSI6ICI4YmU1YzE1MGJlOTA3MWM0LUZSQSJ9LCB7Im5hbWUiOiAiY29udGVudC1sZW5ndGgiLCAidmFsdWUiOiAiNTk3In0sIHsibmFtZSI6ICJjb250ZW50LXR5cGUiLCAidmFsdWUiOiAiaW1hZ2UvcG5nIn0sIHsibmFtZSI6ICJkYXRlIiwgInZhbHVlIjogIlRodSwgMDUgU2VwIDIwMjQgMTE6MDc6MjEgR01UIn0sIHsibmFtZSI6ICJldGFnIiwgInZhbHVlIjogIlcvXCI1OTctMTY4MTMzMzQyMjAwMFwiIn0sIHsibmFtZSI6ICJsYXN0LW1vZGlmaWVkIiwgInZhbHVlIjogIldlZCwgMTIgQXByIDIwMjMgMjE6MDM6NDIgR01UIn0sIHsibmFtZSI6ICJuZWwiLCAidmFsdWUiOiAie1wic3VjY2Vzc19mcmFjdGlvblwiOjAsXCJyZXBvcnRfdG9cIjpcImNmLW5lbFwiLFwibWF4X2FnZVwiOjYwNDgwMH0ifSwgeyJuYW1lIjogInJlcG9ydC10byIsICJ2YWx1ZSI6ICJ7XCJlbmRwb2ludHNcIjpbe1widXJsXCI6XCJodHRwczpcXC9cXC9hLm5lbC5jbG91ZGZsYXJlLmNvbVxcL3JlcG9ydFxcL3Y0P3M9OTM1enhPOHViZWZDNCUyQm1md05WakRXZ2tBSml3T1VrbmpVaWpwWU5jSjVKdDMxZkZBcnVpQllhQ3A5VlVTcW1TM09QcTN0ViUyQmQ5bzZKcnlJWWJSdCUyQk1YQUp5MmUxTzVPd2htblFXeFRnME1SMGhBUkN6cjV3cFklMkIwQjh1MFRDMkdLdFFSYWRpcEZxSlJhcXduNDVTYjVFNXFqNXRrJTJCN1BvYnclM0RcIn1dLFwiZ3JvdXBcIjpcImNmLW5lbFwiLFwibWF4X2FnZVwiOjYwNDgwMH0ifSwgeyJuYW1lIjogInNlcnZlciIsICJ2YWx1ZSI6ICJjbG91ZGZsYXJlIn0sIHsibmFtZSI6ICJzdHJpY3QtdHJhbnNwb3J0LXNlY3VyaXR5IiwgInZhbHVlIjogIm1heC1hZ2U9NjMwNzIwMDA7IGluY2x1ZGVTdWJkb21haW5zOyBwcmVsb2FkIn0sIHsibmFtZSI6ICJ2YXJ5IiwgInZhbHVlIjogIkFjY2VwdC1FbmNvZGluZyJ9XSwgImNvbnRlbnQiOiB7InNpemUiOiA1OTcsICJtaW1lVHlwZSI6ICJpbWFnZS9wbmciLCAiY29tcHJlc3Npb24iOiAwLCAidGV4dCI6ICJpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQ0FBQUFBZ0NBWUFBQUJ6ZW5yMEFBQUNIRWxFUVZSNDJtTmdHQVhEQmZ6Ly81OFppR1AvL2Z1M0c0aWZBL0dydjMvL1hnS0tkUUN4TkJiMXlrRE1BZU93L3Zueko1WUN5NldBK1BoL0hBRG9tRTlBODhOQkZ2NysvZHNINkxDMVFQWmVaQVA4UU9xQWlnckpzSndQYU9EMS80VEJQeUQrQldJQTFYOENVdHJJaG5UQkZBRWw2MGwwd0tUL3BJRjNRSThHQU9sZ0lKMEhNMlFPbXFJVlFNeFB5UEozNzk3eEE5VjlJOUVCSVBWL2dmZ2hFTXZBSE5DREpkNGVBYWxRb0RRakh0KzcvQ2NQUFBqeDQ0Y3EzQ0JnVUlUaVVnbU1rck5BS2dxSTJkRWRBRTFZcElJWFFDeU83aE1Pb0krZkVZbzdJRjRNeFBHZ0JIVC8vbjBPSUIxQXF1MUFlODdoQ3M1QWFOd1FDLzVBVXpPcDRBQURscUFzQU9KQW9JSFZRQVcvLzlNUUFPMVlpYzMzVTVEeTZyLy90QVV0MkJ6Zzk1OStJQUNiQTVpQStDSWRMUC8xNGNNSFFheUo4TmV2WDBhZ01wdVd0Z1BOMzBtb1dEVUI0bnMwZEVNVUlRZndBRXNvRldCS2JRV3kzMVBaOTQrQkZCc2hCNmdDRmY2aGtlOHphVlc3RWVQN0MwQ0toU2dIM0w1OW14Mm9lRE1WN2Y4T1RPQUdKRGV2Z0NWak1aQitTYW5uZ1RpUmtuWWVLeERiQWZGcE1pMnZvYWloQ1F3Nk02QWhoOGdyOHYrV2tXTW5JMUN6Q2hCblFDMytSMGFDZXdNcTJvbTJFZGhLZFFHNjloQlE0MjBnL2tCSlJRZkVTNzkrL1NwSnNyZGZ2MzdOQzlSY0JNUjN5ZkR4ZDZBSGxnQ1pCdFRvWElDaXdBS0lHMEhsTnJSZCtCc3RZYjBGaXA4RVdqb2QyaVRqRysyV0RXa0FBRkZvbWNNaEk4cHFBQUFBQUVsRlRrU3VRbUNDIiwgImVuY29kaW5nIjogImJhc2U2NCJ9LCAiaGVhZGVyc1NpemUiOiAwLCAiYm9keVNpemUiOiA5MTUsICJyZWRpcmVjdFVSTCI6ICIiLCAiX3RyYW5zZmVyU2l6ZSI6IDkxNX0sICJjYWNoZSI6IHt9LCAidGltaW5ncyI6IHsiZG5zIjogLTEsICJjb25uZWN0IjogLTEsICJzc2wiOiAtMSwgInNlbmQiOiAwLCAid2FpdCI6IDMwMS4wMzMsICJyZWNlaXZlIjogNzU2LjYyMX0sICJwYWdlcmVmIjogInBhZ2VAOGM5MzJmODMzN2Q5YWJiNGI5YWI5ODg5ZGVjNTFiOTkiLCAic2VydmVySVBBZGRyZXNzIjogIlsyNjA2OjQ3MDA6MjA6OjY4MWE6ZWNmXSIsICJfc2VydmVyUG9ydCI6IDQ0MywgIl9zZWN1cml0eURldGFpbHMiOiB7InByb3RvY29sIjogIlRMUyAxLjMiLCAic3ViamVjdE5hbWUiOiAic3VwcGx5Y2hhaW5jYW5hZGEuY29tIiwgImlzc3VlciI6ICJXRTEiLCAidmFsaWRGcm9tIjogMTcyMzQ3MDg0MSwgInZhbGlkVG8iOiAxNzMxMjQ2ODQwfX0sIHsic3RhcnRlZERhdGVUaW1lIjogIjIwMjQtMDktMDVUMTE6MDc6MjEuMDg1WiIsICJ0aW1lIjogMTAxLjIyNSwgInJlcXVlc3QiOiB7Im1ldGhvZCI6ICJHRVQiLCAidXJsIjogImh0dHBzOi8vd3d3Lmdvb2dsZS1hbmFseXRpY3MuY29tL2FuYWx5dGljcy5qcyIsICJodHRwVmVyc2lvbiI6ICJIVFRQLzIuMCIsICJjb29raWVzIjogW10sICJoZWFkZXJzIjogW3sibmFtZSI6ICI6YXV0aG9yaXR5IiwgInZhbHVlIjogInd3dy5nb29nbGUtYW5hbHl0aWNzLmNvbSJ9LCB7Im5hbWUiOiAiOm1ldGhvZCIsICJ2YWx1ZSI6ICJHRVQifSwgeyJuYW1lIjogIjpwYXRoIiwgInZhbHVlIjogIi9hbmFseXRpY3MuanMifSwgeyJuYW1lIjogIjpzY2hlbWUiLCAidmFsdWUiOiAiaHR0cHMifSwgeyJuYW1lIjogImFjY2VwdCIsICJ2YWx1ZSI6ICIqLyoifSwgeyJuYW1lIjogImFjY2VwdC1lbmNvZGluZyIsICJ2YWx1ZSI6ICJnemlwLCBkZWZsYXRlLCBiciwgenN0ZCJ9LCB7Im5hbWUiOiAiYWNjZXB0LWxhbmd1YWdlIiwgInZhbHVlIjogImVuLVVTIn0sIHsibmFtZSI6ICJyZWZlcmVyIiwgInZhbHVlIjogImh0dHBzOi8vcG9ydGFsLnN1cHBseWNoYWluY2FuYWRhLmNvbS8ifSwgeyJuYW1lIjogInNlYy1jaC11YSIsICJ2YWx1ZSI6ICJcIk5vdDtBPUJyYW5kXCI7dj1cIjI0XCIsIFwiQ2hyb21pdW1cIjt2PVwiMTI4XCIifSwgeyJuYW1lIjogInNlYy1jaC11YS1tb2JpbGUiLCAidmFsdWUiOiAiPzAifSwgeyJuYW1lIjogInNlYy1jaC11YS1wbGF0Zm9ybSIsICJ2YWx1ZSI6ICJcIldpbmRvd3NcIiJ9LCB7Im5hbWUiOiAic2VjLWZldGNoLWRlc3QiLCAidmFsdWUiOiAic2NyaXB0In0sIHsibmFtZSI6ICJzZWMtZmV0Y2gtbW9kZSIsICJ2YWx1ZSI6ICJuby1jb3JzIn0sIHsibmFtZSI6ICJzZWMtZmV0Y2gtc2l0ZSIsICJ2YWx1ZSI6ICJjcm9zcy1zaXRlIn0sIHsibmFtZSI6ICJ1c2VyLWFnZW50IiwgInZhbHVlIjogIk1vemlsbGEvNS4wIChXaW5kb3dzIE5UIDEwLjA7IFdpbjY0OyB4NjQpIEFwcGxlV2ViS2l0LzUzNy4zNiAoS0hUTUwsIGxpa2UgR2Vja28pIENocm9tZS8xMjguMC42NjEzLjE4IFNhZmFyaS81MzcuMzYifV0sICJxdWVyeVN0cmluZyI6IFtdLCAiaGVhZGVyc1NpemUiOiA1NTcsICJib2R5U2l6ZSI6IDB9LCAicmVzcG9uc2UiOiB7InN0YXR1cyI6IDIwMCwgInN0YXR1c1RleHQiOiAiIiwgImh0dHBWZXJzaW9uIjogIkhUVFAvMi4wIiwgImNvb2tpZXMiOiBbXSwgImhlYWRlcnMiOiBbeyJuYW1lIjogImFnZSIsICJ2YWx1ZSI6ICIxNjAxIn0sIHsibmFtZSI6ICJhbHQtc3ZjIiwgInZhbHVlIjogImgzPVwiOjQ0M1wiOyBtYT0yNTkyMDAwLGgzLTI5PVwiOjQ0M1wiOyBtYT0yNTkyMDAwIn0sIHsibmFtZSI6ICJjYWNoZS1jb250cm9sIiwgInZhbHVlIjogInB1YmxpYywgbWF4LWFnZT03MjAwIn0sIHsibmFtZSI6ICJjb250ZW50LWVuY29kaW5nIiwgInZhbHVlIjogImd6aXAifSwgeyJuYW1lIjogImNvbnRlbnQtbGVuZ3RoIiwgInZhbHVlIjogIjIwOTk0In0sIHsibmFtZSI6ICJjb250ZW50LXR5cGUiLCAidmFsdWUiOiAidGV4dC9qYXZhc2NyaXB0In0sIHsibmFtZSI6ICJjcm9zcy1vcmlnaW4tcmVzb3VyY2UtcG9saWN5IiwgInZhbHVlIjogImNyb3NzLW9yaWdpbiJ9LCB7Im5hbWUiOiAiZGF0ZSIsICJ2YWx1ZSI6ICJUaHUsIDA1IFNlcCAyMDI0IDEwOjQwOjQwIEdNVCJ9LCB7Im5hbWUiOiAiZXhwaXJlcyIsICJ2YWx1ZSI6ICJUaHUsIDA1IFNlcCAyMDI0IDEyOjQwOjQwIEdNVCJ9LCB7Im5hbWUiOiAibGFzdC1tb2RpZmllZCIsICJ2YWx1ZSI6ICJUdWUsIDEyIERlYyAyMDIzIDE4OjA5OjA4IEdNVCJ9LCB7Im5hbWUiOiAic2VydmVyIiwgInZhbHVlIjogIkdvbGZlMiJ9LCB7Im5hbWUiOiAic3RyaWN0LXRyYW5zcG9ydC1zZWN1cml0eSIsICJ2YWx1ZSI6ICJtYXgtYWdlPTMxNTM2MDAwOyBpbmNsdWRlU3ViRG9tYWluczsgcHJlbG9hZCJ9LCB7Im5hbWUiOiAidmFyeSIsICJ2YWx1ZSI6ICJBY2NlcHQtRW5jb2RpbmcifSwgeyJuYW1lIjogIngtY29udGVudC10eXBlLW9wdGlvbnMiLCAidmFsdWUiOiAibm9zbmlmZiJ9XSwgImNvbnRlbnQiOiB7InNpemUiOiA1MjkxNiwgIm1pbWVUeXBlIjogInRleHQvamF2YXNjcmlwdCIsICJjb21wcmVzc2lvbiI6IDMxNjE4LCAidGV4dCI6ICIoZnVuY3Rpb24oKXsvKlxuXG4gQ29weXJpZ2h0IFRoZSBDbG9zdXJlIExpYnJhcnkgQXV0aG9ycy5cbiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuKi9cbnZhciBuPXRoaXN8fHNlbGYscD1mdW5jdGlvbihhLGIpe2E9YS5zcGxpdChcIi5cIik7dmFyIGM9bjthWzBdaW4gY3x8XCJ1bmRlZmluZWRcIj09dHlwZW9mIGMuZXhlY1NjcmlwdHx8Yy5leGVjU2NyaXB0KFwidmFyIFwiK2FbMF0pO2Zvcih2YXIgZDthLmxlbmd0aCYmKGQ9YS5zaGlmdCgpKTspYS5sZW5ndGh8fHZvaWQgMD09PWI/Yz1jW2RdJiZjW2RdIT09T2JqZWN0LnByb3RvdHlwZVtkXT9jW2RdOmNbZF09e306Y1tkXT1ifTtmdW5jdGlvbiBxKCl7Zm9yKHZhciBhPXIsYj17fSxjPTA7YzxhLmxlbmd0aDsrK2MpYlthW2NdXT1jO3JldHVybiBifWZ1bmN0aW9uIHUoKXt2YXIgYT1cIkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaXCI7YSs9YS50b0xvd2VyQ2FzZSgpK1wiMDEyMzQ1Njc4OS1fXCI7cmV0dXJuIGErXCIuXCJ9dmFyIHIsdjtcbmZ1bmN0aW9uIGFhKGEpe2Z1bmN0aW9uIGIoayl7Zm9yKDtkPGEubGVuZ3RoOyl7dmFyIG09YS5jaGFyQXQoZCsrKSxsPXZbbV07aWYobnVsbCE9bClyZXR1cm4gbDtpZighL15bXFxzXFx4YTBdKiQvLnRlc3QobSkpdGhyb3cgRXJyb3IoXCJVbmtub3duIGJhc2U2NCBlbmNvZGluZyBhdCBjaGFyOiBcIittKTt9cmV0dXJuIGt9cj1yfHx1KCk7dj12fHxxKCk7Zm9yKHZhciBjPVwiXCIsZD0wOzspe3ZhciBlPWIoLTEpLGY9YigwKSxoPWIoNjQpLGc9Yig2NCk7aWYoNjQ9PT1nJiYtMT09PWUpcmV0dXJuIGM7Yys9U3RyaW5nLmZyb21DaGFyQ29kZShlPDwyfGY+PjQpOzY0IT1oJiYoYys9U3RyaW5nLmZyb21DaGFyQ29kZShmPDw0JjI0MHxoPj4yKSw2NCE9ZyYmKGMrPVN0cmluZy5mcm9tQ2hhckNvZGUoaDw8NiYxOTJ8ZykpKX19O3ZhciB3PXt9LHk9ZnVuY3Rpb24oYSl7dy5UQUdHSU5HPXcuVEFHR0lOR3x8W107dy5UQUdHSU5HW2FdPSEwfTt2YXIgYmE9QXJyYXkuaXNBcnJheSxjYT1mdW5jdGlvbihhLGIpe2lmKGEmJmJhKGEpKWZvcih2YXIgYz0wO2M8YS5sZW5ndGg7YysrKWlmKGFbY10mJmIoYVtjXSkpcmV0dXJuIGFbY119LHo9ZnVuY3Rpb24oYSxiKXtmb3IodmFyIGMgaW4gYiliLmhhc093blByb3BlcnR5KGMpJiYoYVtjXT1iW2NdKX0sQT1mdW5jdGlvbihhKXtmb3IodmFyIGIgaW4gYSlpZihhLmhhc093blByb3BlcnR5KGIpKXJldHVybiEwO3JldHVybiExfTt2YXIgQj1mdW5jdGlvbihhKXt0aGlzLmo9YX07Qi5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5qLnRvU3RyaW5nKCl9O3ZhciBDPS9eKD86KD86aHR0cHM/fG1haWx0b3xmdHApOnxbXjovPyNdKig/OlsvPyNdfCQpKS9pO25ldyBCKFwiYWJvdXQ6aW52YWxpZCN6Q2xvc3VyZXpcIik7bmV3IEIoXCJhYm91dDpibGFua1wiKTt2YXIgRD1mdW5jdGlvbigpe3RoaXMuaT1cIlwifTtELnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmkudG9TdHJpbmcoKX07bmV3IEQ7dmFyIEU9ZnVuY3Rpb24oKXt0aGlzLmg9XCJcIn07RS5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5oLnRvU3RyaW5nKCl9O25ldyBFO3ZhciBGPWZ1bmN0aW9uKCl7dGhpcy5nPW4udHJ1c3RlZFR5cGVzJiZuLnRydXN0ZWRUeXBlcy5lbXB0eUhUTUx8fFwiXCJ9O0YucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZy50b1N0cmluZygpfTtuZXcgRjt2YXIgRz13aW5kb3csSD13aW5kb3cuaGlzdG9yeSxJPWRvY3VtZW50LEo9bmF2aWdhdG9yLEs9ZnVuY3Rpb24oKXt2YXIgYT17fSxiPUcuZ29vZ2xlX3RhZ19kYXRhO0cuZ29vZ2xlX3RhZ19kYXRhPXZvaWQgMD09PWI/YTpiO3JldHVybiBHLmdvb2dsZV90YWdfZGF0YX0sTD1mdW5jdGlvbihhLGIpe0kuYWRkRXZlbnRMaXN0ZW5lcj9JLmFkZEV2ZW50TGlzdGVuZXIoYSxiLCExKTpJLmF0dGFjaEV2ZW50JiZJLmF0dGFjaEV2ZW50KFwib25cIithLGIpfTt2YXIgZGE9ZnVuY3Rpb24oYSl7dmFyIGI9TSgpO2IucGVuZGluZ3x8KGIucGVuZGluZz1bXSk7Y2EoYi5wZW5kaW5nLGZ1bmN0aW9uKGMpe3JldHVybiBjLnRhcmdldC5jdGlkPT09YS5jdGlkJiZjLnRhcmdldC5pc0Rlc3RpbmF0aW9uPT09YS5pc0Rlc3RpbmF0aW9ufSl8fGIucGVuZGluZy5wdXNoKHt0YXJnZXQ6YSxvbkxvYWQ6dm9pZCAwfSl9LGVhPWZ1bmN0aW9uKCl7dGhpcy5jb250YWluZXI9e307dGhpcy5kZXN0aW5hdGlvbj17fTt0aGlzLmNhbm9uaWNhbD17fTt0aGlzLnBlbmRpbmc9W119LE09ZnVuY3Rpb24oKXt2YXIgYT1LKCksYj1hLnRpZHI7Ynx8KGI9bmV3IGVhLGEudGlkcj1iKTtyZXR1cm4gYn07dmFyIE49LzpbMC05XSskLyxRPWZ1bmN0aW9uKGEsYil7YiYmKGI9U3RyaW5nKGIpLnRvTG93ZXJDYXNlKCkpO2lmKFwicHJvdG9jb2xcIj09PWJ8fFwicG9ydFwiPT09YilhLnByb3RvY29sPU8oYS5wcm90b2NvbCl8fE8oRy5sb2NhdGlvbi5wcm90b2NvbCk7XCJwb3J0XCI9PT1iP2EucG9ydD1TdHJpbmcoTnVtYmVyKGEuaG9zdG5hbWU/YS5wb3J0OkcubG9jYXRpb24ucG9ydCl8fChcImh0dHBcIj09PWEucHJvdG9jb2w/ODA6XCJodHRwc1wiPT09YS5wcm90b2NvbD80NDM6XCJcIikpOlwiaG9zdFwiPT09YiYmKGEuaG9zdG5hbWU9KGEuaG9zdG5hbWV8fEcubG9jYXRpb24uaG9zdG5hbWUpLnJlcGxhY2UoTixcIlwiKS50b0xvd2VyQ2FzZSgpKTtyZXR1cm4gUChhLGIpfSxQPWZ1bmN0aW9uKGEsYixjKXt2YXIgZD1PKGEucHJvdG9jb2wpO2ImJihiPVN0cmluZyhiKS50b0xvd2VyQ2FzZSgpKTtzd2l0Y2goYil7Y2FzZSBcInVybF9ub19mcmFnbWVudFwiOmM9XCJcIjthJiZhLmhyZWYmJihjPWEuaHJlZi5pbmRleE9mKFwiI1wiKSxcbmM9MD5jP2EuaHJlZjphLmhyZWYuc3Vic3RyKDAsYykpO2E9YzticmVhaztjYXNlIFwicHJvdG9jb2xcIjphPWQ7YnJlYWs7Y2FzZSBcImhvc3RcIjphPWEuaG9zdG5hbWUucmVwbGFjZShOLFwiXCIpLnRvTG93ZXJDYXNlKCk7YyYmKGM9L153d3dcXGQqXFwuLy5leGVjKGEpKSYmY1swXSYmKGE9YS5zdWJzdHIoY1swXS5sZW5ndGgpKTticmVhaztjYXNlIFwicG9ydFwiOmE9U3RyaW5nKE51bWJlcihhLnBvcnQpfHwoXCJodHRwXCI9PT1kPzgwOlwiaHR0cHNcIj09PWQ/NDQzOlwiXCIpKTticmVhaztjYXNlIFwicGF0aFwiOmEucGF0aG5hbWV8fGEuaG9zdG5hbWV8fHkoMSk7YT1cIi9cIj09PWEucGF0aG5hbWUuc3Vic3RyKDAsMSk/YS5wYXRobmFtZTpcIi9cIithLnBhdGhuYW1lO2E9YS5zcGxpdChcIi9cIik7MDw9W10uaW5kZXhPZihhW2EubGVuZ3RoLTFdKSYmKGFbYS5sZW5ndGgtMV09XCJcIik7YT1hLmpvaW4oXCIvXCIpO2JyZWFrO2Nhc2UgXCJxdWVyeVwiOmE9YS5zZWFyY2gucmVwbGFjZShcIj9cIixcIlwiKTticmVhaztjYXNlIFwiZXh0ZW5zaW9uXCI6YT1cbmEucGF0aG5hbWUuc3BsaXQoXCIuXCIpO2E9MTxhLmxlbmd0aD9hW2EubGVuZ3RoLTFdOlwiXCI7YT1hLnNwbGl0KFwiL1wiKVswXTticmVhaztjYXNlIFwiZnJhZ21lbnRcIjphPWEuaGFzaC5yZXBsYWNlKFwiI1wiLFwiXCIpO2JyZWFrO2RlZmF1bHQ6YT1hJiZhLmhyZWZ9cmV0dXJuIGF9LE89ZnVuY3Rpb24oYSl7cmV0dXJuIGE/YS5yZXBsYWNlKFwiOlwiLFwiXCIpLnRvTG93ZXJDYXNlKCk6XCJcIn0sUj1mdW5jdGlvbihhKXt2YXIgYj1JLmNyZWF0ZUVsZW1lbnQoXCJhXCIpO2EmJihiLmhyZWY9YSk7dmFyIGM9Yi5wYXRobmFtZTtcIi9cIiE9PWNbMF0mJihhfHx5KDEpLGM9XCIvXCIrYyk7YT1iLmhvc3RuYW1lLnJlcGxhY2UoTixcIlwiKTtyZXR1cm57aHJlZjpiLmhyZWYscHJvdG9jb2w6Yi5wcm90b2NvbCxob3N0OmIuaG9zdCxob3N0bmFtZTphLHBhdGhuYW1lOmMsc2VhcmNoOmIuc2VhcmNoLGhhc2g6Yi5oYXNoLHBvcnQ6Yi5wb3J0fX07dmFyIFM7dmFyIFU9ZnVuY3Rpb24oKXt2YXIgYT1mYSxiPWhhLGM9VCgpLGQ9ZnVuY3Rpb24oaCl7YShoLnRhcmdldHx8aC5zcmNFbGVtZW50fHx7fSl9LGU9ZnVuY3Rpb24oaCl7YihoLnRhcmdldHx8aC5zcmNFbGVtZW50fHx7fSl9O2lmKCFjLmluaXQpe0woXCJtb3VzZWRvd25cIixkKTtMKFwia2V5dXBcIixkKTtMKFwic3VibWl0XCIsZSk7dmFyIGY9SFRNTEZvcm1FbGVtZW50LnByb3RvdHlwZS5zdWJtaXQ7SFRNTEZvcm1FbGVtZW50LnByb3RvdHlwZS5zdWJtaXQ9ZnVuY3Rpb24oKXtiKHRoaXMpO2YuY2FsbCh0aGlzKX07Yy5pbml0PSEwfX0saWE9ZnVuY3Rpb24oYSxiLGMsZCxlKXthPXtjYWxsYmFjazphLGRvbWFpbnM6YixmcmFnbWVudDoyPT09YyxwbGFjZW1lbnQ6Yyxmb3JtczpkLHNhbWVIb3N0OmV9O1QoKS5kZWNvcmF0b3JzLnB1c2goYSl9LFY9ZnVuY3Rpb24oYSxiLGMpe2Zvcih2YXIgZD1UKCkuZGVjb3JhdG9ycyxlPXt9LGY9MDtmPGQubGVuZ3RoOysrZil7dmFyIGg9ZFtmXSxnO2lmKGc9XG4hY3x8aC5mb3JtcylhOntnPWguZG9tYWluczt2YXIgaz1hLG09ISFoLnNhbWVIb3N0O2lmKGcmJihtfHxrIT09SS5sb2NhdGlvbi5ob3N0bmFtZSkpZm9yKHZhciBsPTA7bDxnLmxlbmd0aDtsKyspaWYoZ1tsXWluc3RhbmNlb2YgUmVnRXhwKXtpZihnW2xdLnRlc3Qoaykpe2c9ITA7YnJlYWsgYX19ZWxzZSBpZigwPD1rLmluZGV4T2YoZ1tsXSl8fG0mJjA8PWdbbF0uaW5kZXhPZihrKSl7Zz0hMDticmVhayBhfWc9ITF9ZyYmKGc9aC5wbGFjZW1lbnQsdm9pZCAwPT1nJiYoZz1oLmZyYWdtZW50PzI6MSksZz09PWImJnooZSxoLmNhbGxiYWNrKCkpKX1yZXR1cm4gZX07ZnVuY3Rpb24gVCgpe3ZhciBhPUsoKSxiPWEuZ2w7YiYmYi5kZWNvcmF0b3JzfHwoYj17ZGVjb3JhdG9yczpbXX0sYS5nbD1iKTtyZXR1cm4gYn07dmFyIGphPS8oLio/KVxcKiguKj8pXFwqKC4qKS8sa2E9LyhbXj8jXSspKFxcP1teI10qKT8oIy4qKT8vO2Z1bmN0aW9uIFcoYSl7cmV0dXJuIG5ldyBSZWdFeHAoXCIoLio/KShefCYpXCIrYStcIj0oW14mXSopJj8oLiopXCIpfVxudmFyIFg9ZnVuY3Rpb24oYSl7dmFyIGI9W10sYztmb3IoYyBpbiBhKWlmKGEuaGFzT3duUHJvcGVydHkoYykpe3ZhciBkPWFbY107aWYodm9pZCAwIT09ZCYmZD09PWQmJm51bGwhPT1kJiZcIltvYmplY3QgT2JqZWN0XVwiIT09ZC50b1N0cmluZygpKXtiLnB1c2goYyk7dmFyIGU9YixmPWUucHVzaDtkPVN0cmluZyhkKTtyPXJ8fHUoKTt2PXZ8fHEoKTtmb3IodmFyIGg9W10sZz0wO2c8ZC5sZW5ndGg7Zys9Myl7dmFyIGs9ZysxPGQubGVuZ3RoLG09ZysyPGQubGVuZ3RoLGw9ZC5jaGFyQ29kZUF0KGcpLHQ9az9kLmNoYXJDb2RlQXQoZysxKTowLHg9bT9kLmNoYXJDb2RlQXQoZysyKTowLHJhPWw+PjI7bD0obCYzKTw8NHx0Pj40O3Q9KHQmMTUpPDwyfHg+PjY7eCY9NjM7bXx8KHg9NjQsa3x8KHQ9NjQpKTtoLnB1c2gocltyYV0scltsXSxyW3RdLHJbeF0pfWYuY2FsbChlLGguam9pbihcIlwiKSl9fWE9Yi5qb2luKFwiKlwiKTtyZXR1cm5bXCIxXCIsbGEoYSksYV0uam9pbihcIipcIil9O1xuZnVuY3Rpb24gbGEoYSxiKXthPVtKLnVzZXJBZ2VudCwobmV3IERhdGUpLmdldFRpbWV6b25lT2Zmc2V0KCksSi51c2VyTGFuZ3VhZ2V8fEoubGFuZ3VhZ2UsTWF0aC5mbG9vcigobmV3IERhdGUoRGF0ZS5ub3coKSkpLmdldFRpbWUoKS82MC8xRTMpLSh2b2lkIDA9PT1iPzA6YiksYV0uam9pbihcIipcIik7aWYoIShiPVMpKXtiPUFycmF5KDI1Nik7Zm9yKHZhciBjPTA7MjU2PmM7YysrKXtmb3IodmFyIGQ9YyxlPTA7OD5lO2UrKylkPWQmMT9kPj4+MV4zOTg4MjkyMzg0OmQ+Pj4xO2JbY109ZH19Uz1iO2I9NDI5NDk2NzI5NTtmb3IoYz0wO2M8YS5sZW5ndGg7YysrKWI9Yj4+PjheU1soYl5hLmNoYXJDb2RlQXQoYykpJjI1NV07cmV0dXJuKChiXi0xKT4+PjApLnRvU3RyaW5nKDM2KX1cbmZ1bmN0aW9uIG1hKGEpe3JldHVybiBmdW5jdGlvbihiKXt2YXIgYz1SKEcubG9jYXRpb24uaHJlZiksZD1jLnNlYXJjaC5yZXBsYWNlKFwiP1wiLFwiXCIpO2E6e3ZhciBlPWQuc3BsaXQoXCImXCIpO2Zvcih2YXIgZj0wO2Y8ZS5sZW5ndGg7ZisrKXt2YXIgaD1lW2ZdLnNwbGl0KFwiPVwiKTtpZihcIl9nbFwiPT09ZGVjb2RlVVJJQ29tcG9uZW50KGhbMF0pLnJlcGxhY2UoL1xcKy9nLFwiIFwiKSl7ZT1oLnNsaWNlKDEpLmpvaW4oXCI9XCIpO2JyZWFrIGF9fWU9dm9pZCAwfWIucXVlcnk9bmEoZXx8XCJcIil8fHt9O2U9UShjLFwiZnJhZ21lbnRcIik7Zj1lLm1hdGNoKFcoXCJfZ2xcIikpO2IuZnJhZ21lbnQ9bmEoZiYmZlszXXx8XCJcIil8fHt9O2EmJm9hKGMsZCxlKX19ZnVuY3Rpb24gcGEoYSxiKXtpZihhPVcoYSkuZXhlYyhiKSl7dmFyIGM9YVsyXSxkPWFbNF07Yj1hWzFdO2QmJihiPWIrYytkKX1yZXR1cm4gYn1cbmZ1bmN0aW9uIG9hKGEsYixjKXtmdW5jdGlvbiBkKGYsaCl7Zj1wYShcIl9nbFwiLGYpO2YubGVuZ3RoJiYoZj1oK2YpO3JldHVybiBmfWlmKEgmJkgucmVwbGFjZVN0YXRlKXt2YXIgZT1XKFwiX2dsXCIpO2lmKGUudGVzdChiKXx8ZS50ZXN0KGMpKWE9UShhLFwicGF0aFwiKSxiPWQoYixcIj9cIiksYz1kKGMsXCIjXCIpLEgucmVwbGFjZVN0YXRlKHt9LHZvaWQgMCxcIlwiK2ErYitjKX19XG52YXIgbmE9ZnVuY3Rpb24oYSl7dHJ5e2E6e2lmKGEpe2I6e2Zvcih2YXIgYj0wOzM+YjsrK2Ipe3ZhciBjPWphLmV4ZWMoYSk7aWYoYyl7dmFyIGQ9YzticmVhayBifWE9ZGVjb2RlVVJJQ29tcG9uZW50KGEpfWQ9dm9pZCAwfWlmKGQmJlwiMVwiPT09ZFsxXSl7dmFyIGU9ZFsyXSxmPWRbM107Yjp7Zm9yKGQ9MDszPmQ7KytkKWlmKGU9PT1sYShmLGQpKXt2YXIgaD0hMDticmVhayBifWg9ITF9aWYoaCl7dmFyIGc9ZjticmVhayBhfXkoNyl9fWc9dm9pZCAwfWU9ZztpZih2b2lkIDAhPT1lKXtnPXt9O3ZhciBrPWU/ZS5zcGxpdChcIipcIik6W107Zm9yKGU9MDtlKzE8ay5sZW5ndGg7ZSs9Mil7dmFyIG09a1tlXSxsPWFhKGtbZSsxXSk7Z1ttXT1sfXkoNik7cmV0dXJuIGd9fWNhdGNoKHQpe3koOCl9fTtcbmZ1bmN0aW9uIFkoYSxiLGMsZCl7ZnVuY3Rpb24gZShrKXtrPXBhKGEsayk7dmFyIG09ay5jaGFyQXQoay5sZW5ndGgtMSk7ayYmXCImXCIhPT1tJiYoays9XCImXCIpO3JldHVybiBrK2d9ZD12b2lkIDA9PT1kPyExOmQ7dmFyIGY9a2EuZXhlYyhjKTtpZighZilyZXR1cm5cIlwiO2M9ZlsxXTt2YXIgaD1mWzJdfHxcIlwiO2Y9ZlszXXx8XCJcIjt2YXIgZz1hK1wiPVwiK2I7ZD9mPVwiI1wiK2UoZi5zdWJzdHJpbmcoMSkpOmg9XCI/XCIrZShoLnN1YnN0cmluZygxKSk7cmV0dXJuXCJcIitjK2grZn1mdW5jdGlvbiBxYShhLGIpe3ZhciBjPVwiRk9STVwiPT09KGEudGFnTmFtZXx8XCJcIikudG9VcHBlckNhc2UoKSxkPVYoYiwxLGMpLGU9VihiLDIsYyk7Yj1WKGIsMyxjKTtBKGQpJiYoZD1YKGQpLGM/c2EoXCJfZ2xcIixkLGEpOlooXCJfZ2xcIixkLGEsITEpKTshYyYmQShlKSYmKGM9WChlKSxaKFwiX2dsXCIsYyxhLCEwKSk7Zm9yKHZhciBmIGluIGIpYi5oYXNPd25Qcm9wZXJ0eShmKSYmdGEoZixiW2ZdLGEpfVxuZnVuY3Rpb24gdGEoYSxiLGMsZCl7aWYoYy50YWdOYW1lKXtpZihcImFcIj09PWMudGFnTmFtZS50b0xvd2VyQ2FzZSgpKXJldHVybiBaKGEsYixjLGQpO2lmKFwiZm9ybVwiPT09Yy50YWdOYW1lLnRvTG93ZXJDYXNlKCkpcmV0dXJuIHNhKGEsYixjKX1pZihcInN0cmluZ1wiPT10eXBlb2YgYylyZXR1cm4gWShhLGIsYyxkKX1mdW5jdGlvbiBaKGEsYixjLGQpe2MuaHJlZiYmKGE9WShhLGIsYy5ocmVmLHZvaWQgMD09PWQ/ITE6ZCksQy50ZXN0KGEpJiYoYy5ocmVmPWEpKX1cbmZ1bmN0aW9uIHNhKGEsYixjKXtpZihjJiZjLmFjdGlvbil7dmFyIGQ9KGMubWV0aG9kfHxcIlwiKS50b0xvd2VyQ2FzZSgpO2lmKFwiZ2V0XCI9PT1kKXtkPWMuY2hpbGROb2Rlc3x8W107Zm9yKHZhciBlPSExLGY9MDtmPGQubGVuZ3RoO2YrKyl7dmFyIGg9ZFtmXTtpZihoLm5hbWU9PT1hKXtoLnNldEF0dHJpYnV0ZShcInZhbHVlXCIsYik7ZT0hMDticmVha319ZXx8KGQ9SS5jcmVhdGVFbGVtZW50KFwiaW5wdXRcIiksZC5zZXRBdHRyaWJ1dGUoXCJ0eXBlXCIsXCJoaWRkZW5cIiksZC5zZXRBdHRyaWJ1dGUoXCJuYW1lXCIsYSksZC5zZXRBdHRyaWJ1dGUoXCJ2YWx1ZVwiLGIpLGMuYXBwZW5kQ2hpbGQoZCkpfWVsc2VcInBvc3RcIj09PWQmJihhPVkoYSxiLGMuYWN0aW9uKSxDLnRlc3QoYSkmJihjLmFjdGlvbj1hKSl9fVxuZnVuY3Rpb24gZmEoYSl7dHJ5e2E6e2Zvcih2YXIgYj0xMDA7YSYmMDxiOyl7aWYoYS5ocmVmJiZhLm5vZGVOYW1lLm1hdGNoKC9eYSg/OnJlYSk/JC9pKSl7dmFyIGM9YTticmVhayBhfWE9YS5wYXJlbnROb2RlO2ItLX1jPW51bGx9aWYoYyl7dmFyIGQ9Yy5wcm90b2NvbDtcImh0dHA6XCIhPT1kJiZcImh0dHBzOlwiIT09ZHx8cWEoYyxjLmhvc3RuYW1lKX19Y2F0Y2goZSl7fX1mdW5jdGlvbiBoYShhKXt0cnl7aWYoYS5hY3Rpb24pe3ZhciBiPVEoUihhLmFjdGlvbiksXCJob3N0XCIpO3FhKGEsYil9fWNhdGNoKGMpe319O3AoXCJnb29nbGVfdGFnX2RhdGEuZ2xCcmlkZ2UuYXV0b1wiLGZ1bmN0aW9uKGEsYixjLGQpe1UoKTtpYShhLGIsXCJmcmFnbWVudFwiPT09Yz8yOjEsISFkLCExKX0pO3AoXCJnb29nbGVfdGFnX2RhdGEuZ2xCcmlkZ2UucGFzc3Rocm91Z2hcIixmdW5jdGlvbihhLGIsYyl7VSgpO2lhKGEsW1AoRy5sb2NhdGlvbixcImhvc3RcIiwhMCldLGIsISFjLCEwKX0pO3AoXCJnb29nbGVfdGFnX2RhdGEuZ2xCcmlkZ2UuZGVjb3JhdGVcIixmdW5jdGlvbihhLGIsYyl7YT1YKGEpO3JldHVybiB0YShcIl9nbFwiLGEsYiwhIWMpfSk7cChcImdvb2dsZV90YWdfZGF0YS5nbEJyaWRnZS5nZW5lcmF0ZVwiLFgpO3AoXCJnb29nbGVfdGFnX2RhdGEuZ2xCcmlkZ2UuZ2V0XCIsZnVuY3Rpb24oYSxiKXt2YXIgYz1tYSghIWIpO2I9VCgpO2IuZGF0YXx8KGIuZGF0YT17cXVlcnk6e30sZnJhZ21lbnQ6e319LGMoYi5kYXRhKSk7Yz17fTtpZihiPWIuZGF0YSl6KGMsYi5xdWVyeSksYSYmeihjLGIuZnJhZ21lbnQpO3JldHVybiBjfSk7XG5wKFwiZ29vZ2xlX3RhZ19kYXRhLnRjQnJpZGdlLnJlZ2lzdGVyVWFcIixmdW5jdGlvbihhLGIpe2E9YStcIl9cIitiO3ZhciBjPU0oKSxkPWMuZGVzdGluYXRpb25bYV07ZD8oZC5zdGF0ZT0yLGQuY29udGFpbmVycz1bXSxkLmRlc3RpbmF0aW9ucz1bYl0pOmMuZGVzdGluYXRpb25bYV09e3N0YXRlOjIsY29udGFpbmVyczpbXSxkZXN0aW5hdGlvbnM6W2JdfX0pO3AoXCJnb29nbGVfdGFnX2RhdGEudGNCcmlkZ2Uuc2V0U2lkZWxvYWRcIixmdW5jdGlvbihhLGIsYyl7YT17Y3RpZDphK1wiX1wiK2MsaXNEZXN0aW5hdGlvbjohMH07TSgpLmNvbnRhaW5lcltiXT17c3RhdGU6MSxjb250ZXh0Ontzb3VyY2U6NSxmcm9tQ29udGFpbmVyRXhlY3V0aW9uOiEwfSxwYXJlbnQ6YX07ZGEoe2N0aWQ6Yixpc0Rlc3RpbmF0aW9uOiExfSl9KTt9KSh3aW5kb3cpO1xuKGZ1bmN0aW9uKCl7ZnVuY3Rpb24gTGEoYSl7dmFyIGI9MSxjO2lmKGEpZm9yKGI9MCxjPWEubGVuZ3RoLTE7MDw9YztjLS0pe3ZhciBkPWEuY2hhckNvZGVBdChjKTtiPShiPDw2JjI2ODQzNTQ1NSkrZCsoZDw8MTQpO2Q9YiYyNjYzMzgzMDQ7Yj0wIT1kP2JeZD4+MjE6Yn1yZXR1cm4gYn07dmFyICRjPWZ1bmN0aW9uKGEpe3RoaXMuQz1hfHxbXX07JGMucHJvdG90eXBlLnNldD1mdW5jdGlvbihhKXt0aGlzLkNbYV09ITB9OyRjLnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuQ1thXX07JGMucHJvdG90eXBlLmVuY29kZT1mdW5jdGlvbigpe2Zvcih2YXIgYT1bXSxiPTA7Yjx0aGlzLkMubGVuZ3RoO2IrKyl0aGlzLkNbYl0mJihhW01hdGguZmxvb3IoYi82KV1ePTE8PGIlNik7Zm9yKGI9MDtiPGEubGVuZ3RoO2IrKylhW2JdPVwiQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODktX1wiLmNoYXJBdChhW2JdfHwwKTtyZXR1cm4gYS5qb2luKFwiXCIpK1wiflwifTt2YXIgaGE9d2luZG93Lkdvb2dsZUFuYWx5dGljc09iamVjdCx3YTtpZih3YT12b2lkIDAhPWhhKXdhPS0xPChoYS5jb25zdHJ1Y3RvcitcIlwiKS5pbmRleE9mKFwiU3RyaW5nXCIpO3ZhciB5YTtpZih5YT13YSl7dmFyIGZjPXdpbmRvdy5Hb29nbGVBbmFseXRpY3NPYmplY3Q7eWE9ZmM/ZmMucmVwbGFjZSgvXltcXHNcXHhhMF0rfFtcXHNcXHhhMF0rJC9nLFwiXCIpOlwiXCJ9dmFyIGdiPXlhfHxcImdhXCIsamQ9L14oPzp1dG1hXFwuKT9cXGQrXFwuXFxkKyQvLGtkPS9eYW1wLVtcXHcuLV17MjIsNjR9JC8sQmE9ITE7dmFyIHZkPW5ldyAkYztmdW5jdGlvbiBKKGEpe3ZkLnNldChhKX12YXIgVGQ9ZnVuY3Rpb24oYSl7YT1EZChhKTthPW5ldyAkYyhhKTtmb3IodmFyIGI9dmQuQy5zbGljZSgpLGM9MDtjPGEuQy5sZW5ndGg7YysrKWJbY109YltjXXx8YS5DW2NdO3JldHVybihuZXcgJGMoYikpLmVuY29kZSgpfSxEZD1mdW5jdGlvbihhKXthPWEuZ2V0KEdkKTtrYShhKXx8KGE9W10pO3JldHVybiBhfTt2YXIgZWE9ZnVuY3Rpb24oYSl7cmV0dXJuXCJmdW5jdGlvblwiPT10eXBlb2YgYX0sa2E9ZnVuY3Rpb24oYSl7cmV0dXJuXCJbb2JqZWN0IEFycmF5XVwiPT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoT2JqZWN0KGEpKX0scWE9ZnVuY3Rpb24oYSl7cmV0dXJuIHZvaWQgMCE9YSYmLTE8KGEuY29uc3RydWN0b3IrXCJcIikuaW5kZXhPZihcIlN0cmluZ1wiKX0sRD1mdW5jdGlvbihhLGIpe3JldHVybiAwPT1hLmluZGV4T2YoYil9LHNhPWZ1bmN0aW9uKGEpe3JldHVybiBhP2EucmVwbGFjZSgvXltcXHNcXHhhMF0rfFtcXHNcXHhhMF0rJC9nLFwiXCIpOlwiXCJ9LHJhPWZ1bmN0aW9uKCl7Zm9yKHZhciBhPU8ubmF2aWdhdG9yLnVzZXJBZ2VudCsoTS5jb29raWU/TS5jb29raWU6XCJcIikrKE0ucmVmZXJyZXI/TS5yZWZlcnJlcjpcIlwiKSxiPWEubGVuZ3RoLGM9Ty5oaXN0b3J5Lmxlbmd0aDswPGM7KWErPWMtLV5iKys7cmV0dXJuW2hkKCleTGEoYSkmMjE0NzQ4MzY0NyxNYXRoLnJvdW5kKChuZXcgRGF0ZSkuZ2V0VGltZSgpL1xuMUUzKV0uam9pbihcIi5cIil9LHRhPWZ1bmN0aW9uKGEpe3ZhciBiPU0uY3JlYXRlRWxlbWVudChcImltZ1wiKTtiLndpZHRoPTE7Yi5oZWlnaHQ9MTtiLnNyYz1hO3JldHVybiBifSx1YT1mdW5jdGlvbigpe30sSz1mdW5jdGlvbihhKXtpZihlbmNvZGVVUklDb21wb25lbnQgaW5zdGFuY2VvZiBGdW5jdGlvbilyZXR1cm4gZW5jb2RlVVJJQ29tcG9uZW50KGEpO0ooMjgpO3JldHVybiBhfSxMPWZ1bmN0aW9uKGEsYixjLGQpe3RyeXthLmFkZEV2ZW50TGlzdGVuZXI/YS5hZGRFdmVudExpc3RlbmVyKGIsYywhIWQpOmEuYXR0YWNoRXZlbnQmJmEuYXR0YWNoRXZlbnQoXCJvblwiK2IsYyl9Y2F0Y2goZSl7SigyNyl9fSxmPS9eW1xcd1xcLTovLj89JiUhXFxbXFxdXSskLyxOZD0vXltcXHcrL18tXStbPV17MCwyfSQvLGZmPW51bGwsSWQ9ZnVuY3Rpb24oYSxiLGMsZCxlKXtpZighZmYpe2ZmPXtjcmVhdGVTY3JpcHRVUkw6ZnVuY3Rpb24oY2Epe3JldHVybiBjYX0sY3JlYXRlSFRNTDpmdW5jdGlvbihjYSl7cmV0dXJuIGNhfX07XG50cnl7ZmY9d2luZG93LnRydXN0ZWRUeXBlcy5jcmVhdGVQb2xpY3koXCJnb29nbGUtYW5hbHl0aWNzXCIsZmYpfWNhdGNoKGNhKXt9fWlmKGEpe3ZhciBnPU0ucXVlcnlTZWxlY3RvciYmTS5xdWVyeVNlbGVjdG9yKFwic2NyaXB0W25vbmNlXVwiKXx8bnVsbDtnPWc/Zy5ub25jZXx8Zy5nZXRBdHRyaWJ1dGUmJmcuZ2V0QXR0cmlidXRlKFwibm9uY2VcIil8fFwiXCI6XCJcIjtjPyhlPWQ9XCJcIixiJiZmLnRlc3QoYikmJihkPScgaWQ9XCInK2IrJ1wiJyksZyYmTmQudGVzdChnKSYmKGU9JyBub25jZT1cIicrZysnXCInKSxmLnRlc3QoYSkmJk0ud3JpdGUoZmYuY3JlYXRlSFRNTChcIjxzY3JpcHRcIitkK2UrJyBzcmM9XCInK2ErJ1wiPlxceDNjL3NjcmlwdD4nKSkpOihjPU0uY3JlYXRlRWxlbWVudChcInNjcmlwdFwiKSxjLnR5cGU9XCJ0ZXh0L2phdmFzY3JpcHRcIixjLmFzeW5jPSEwLGMuc3JjPWZmLmNyZWF0ZVNjcmlwdFVSTChhKSxkJiYoYy5vbmxvYWQ9ZCksZSYmKGMub25lcnJvcj1lKSxiJiYoYy5pZD1iKSxnJiZjLnNldEF0dHJpYnV0ZShcIm5vbmNlXCIsXG5nKSxhPU0uZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCJzY3JpcHRcIilbMF0sYS5wYXJlbnROb2RlLmluc2VydEJlZm9yZShjLGEpKX19LGJlPWZ1bmN0aW9uKGEsYil7cmV0dXJuIEUoTS5sb2NhdGlvbltiP1wiaHJlZlwiOlwic2VhcmNoXCJdLGEpfSxFPWZ1bmN0aW9uKGEsYil7cmV0dXJuKGE9YS5tYXRjaChcIig/OiZ8I3xcXFxcPylcIitLKGIpLnJlcGxhY2UoLyhbLiorP149IToke30oKXxcXFtcXF1cXC9cXFxcXSkvZyxcIlxcXFwkMVwiKStcIj0oW14mI10qKVwiKSkmJjI9PWEubGVuZ3RoP2FbMV06XCJcIn0seGE9ZnVuY3Rpb24oKXt2YXIgYT1cIlwiK00ubG9jYXRpb24uaG9zdG5hbWU7cmV0dXJuIDA9PWEuaW5kZXhPZihcInd3dy5cIik/YS5zdWJzdHJpbmcoNCk6YX0sZGU9ZnVuY3Rpb24oYSxiKXt2YXIgYz1hLmluZGV4T2YoYik7aWYoNT09Y3x8Nj09YylpZihhPWEuY2hhckF0KGMrYi5sZW5ndGgpLFwiL1wiPT1hfHxcIj9cIj09YXx8XCJcIj09YXx8XCI6XCI9PWEpcmV0dXJuITA7cmV0dXJuITF9LG9mPWZ1bmN0aW9uKGEsYil7dmFyIGM9XG5NLnJlZmVycmVyO2lmKC9eKGh0dHBzP3xhbmRyb2lkLWFwcCk6XFwvXFwvL2kudGVzdChjKSl7aWYoYSlyZXR1cm4gYzthPVwiLy9cIitNLmxvY2F0aW9uLmhvc3RuYW1lO2lmKCFkZShjLGEpKXJldHVybiBiJiYoYj1hLnJlcGxhY2UoL1xcLi9nLFwiLVwiKStcIi5jZG4uYW1wcHJvamVjdC5vcmdcIixkZShjLGIpKT92b2lkIDA6Y319LHphPWZ1bmN0aW9uKGEsYil7aWYoMT09Yi5sZW5ndGgmJm51bGwhPWJbMF0mJlwib2JqZWN0XCI9PT10eXBlb2YgYlswXSlyZXR1cm4gYlswXTtmb3IodmFyIGM9e30sZD1NYXRoLm1pbihhLmxlbmd0aCsxLGIubGVuZ3RoKSxlPTA7ZTxkO2UrKylpZihcIm9iamVjdFwiPT09dHlwZW9mIGJbZV0pe2Zvcih2YXIgZyBpbiBiW2VdKWJbZV0uaGFzT3duUHJvcGVydHkoZykmJihjW2ddPWJbZV1bZ10pO2JyZWFrfWVsc2UgZTxhLmxlbmd0aCYmKGNbYVtlXV09YltlXSk7cmV0dXJuIGN9LEVlPWZ1bmN0aW9uKGEsYil7Zm9yKHZhciBjPTA7YzxhLmxlbmd0aDtjKyspaWYoYj09XG5hW2NdKXJldHVybiEwO3JldHVybiExfTt2YXIgZWU9ZnVuY3Rpb24oKXt0aGlzLm9hPVtdO3RoaXMuZWE9e307dGhpcy5tPXt9fTtlZS5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKGEsYixjKXt0aGlzLm9hLnB1c2goYSk7Yz90aGlzLm1bXCI6XCIrYV09Yjp0aGlzLmVhW1wiOlwiK2FdPWJ9O2VlLnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMubS5oYXNPd25Qcm9wZXJ0eShcIjpcIithKT90aGlzLm1bXCI6XCIrYV06dGhpcy5lYVtcIjpcIithXX07ZWUucHJvdG90eXBlLm1hcD1mdW5jdGlvbihhKXtmb3IodmFyIGI9MDtiPHRoaXMub2EubGVuZ3RoO2IrKyl7dmFyIGM9dGhpcy5vYVtiXSxkPXRoaXMuZ2V0KGMpO2QmJmEoYyxkKX19O3ZhciBPPXdpbmRvdyxNPWRvY3VtZW50LGpmPWRvY3VtZW50LmN1cnJlbnRTY3JpcHQ/ZG9jdW1lbnQuY3VycmVudFNjcmlwdC5zcmM6XCJcIix2YT1mdW5jdGlvbihhLGIpe3JldHVybiBzZXRUaW1lb3V0KGEsYil9O3ZhciBRYT13aW5kb3csWmE9ZG9jdW1lbnQsRz1mdW5jdGlvbihhKXt2YXIgYj1RYS5fZ2FVc2VyUHJlZnM7aWYoYiYmYi5pb28mJmIuaW9vKCl8fFphLmRvY3VtZW50RWxlbWVudC5oYXNBdHRyaWJ1dGUoXCJkYXRhLWdvb2dsZS1hbmFseXRpY3Mtb3B0LW91dFwiKXx8YSYmITA9PT1RYVtcImdhLWRpc2FibGUtXCIrYV0pcmV0dXJuITA7dHJ5e3ZhciBjPVFhLmV4dGVybmFsO2lmKGMmJmMuX2dhVXNlclByZWZzJiZcIm9vXCI9PWMuX2dhVXNlclByZWZzKXJldHVybiEwfWNhdGNoKGcpe31hPVtdO2I9U3RyaW5nKFphLmNvb2tpZSkuc3BsaXQoXCI7XCIpO2ZvcihjPTA7YzxiLmxlbmd0aDtjKyspe3ZhciBkPWJbY10uc3BsaXQoXCI9XCIpLGU9ZFswXS5yZXBsYWNlKC9eXFxzKnxcXHMqJC9nLFwiXCIpO2UmJlwiQU1QX1RPS0VOXCI9PWUmJigoZD1kLnNsaWNlKDEpLmpvaW4oXCI9XCIpLnJlcGxhY2UoL15cXHMqfFxccyokL2csXCJcIikpJiYoZD1kZWNvZGVVUklDb21wb25lbnQoZCkpLGEucHVzaChkKSl9Zm9yKGI9MDtiPFxuYS5sZW5ndGg7YisrKWlmKFwiJE9QVF9PVVRcIj09YVtiXSlyZXR1cm4hMDtyZXR1cm4gWmEuZ2V0RWxlbWVudEJ5SWQoXCJfX2dhT3B0T3V0RXh0ZW5zaW9uXCIpPyEwOiExfTt2YXIgQ2E9ZnVuY3Rpb24oYSl7dmFyIGI9W10sYz1NLmNvb2tpZS5zcGxpdChcIjtcIik7YT1uZXcgUmVnRXhwKFwiXlxcXFxzKlwiK2ErXCI9XFxcXHMqKC4qPylcXFxccyokXCIpO2Zvcih2YXIgZD0wO2Q8Yy5sZW5ndGg7ZCsrKXt2YXIgZT1jW2RdLm1hdGNoKGEpO2UmJmIucHVzaChlWzFdKX1yZXR1cm4gYn0semM9ZnVuY3Rpb24oYSxiLGMsZCxlLGcsY2Epe2U9RyhlKT8hMTplYi50ZXN0KE0ubG9jYXRpb24uaG9zdG5hbWUpfHxcIi9cIj09YyYmdmMudGVzdChkKT8hMTohMDtpZighZSlyZXR1cm4hMTtiJiYxMjAwPGIubGVuZ3RoJiYoYj1iLnN1YnN0cmluZygwLDEyMDApKTtjPWErXCI9XCIrYitcIjsgcGF0aD1cIitjK1wiOyBcIjtnJiYoYys9XCJleHBpcmVzPVwiKyhuZXcgRGF0ZSgobmV3IERhdGUpLmdldFRpbWUoKStnKSkudG9HTVRTdHJpbmcoKStcIjsgXCIpO2QmJlwibm9uZVwiIT09ZCYmKGMrPVwiZG9tYWluPVwiK2QrXCI7XCIpO2NhJiYoYys9Y2ErXCI7XCIpO2Q9TS5jb29raWU7TS5jb29raWU9YztpZighKGQ9ZCE9TS5jb29raWUpKWE6e2E9XG5DYShhKTtmb3IoZD0wO2Q8YS5sZW5ndGg7ZCsrKWlmKGI9PWFbZF0pe2Q9ITA7YnJlYWsgYX1kPSExfXJldHVybiBkfSxDYz1mdW5jdGlvbihhKXtyZXR1cm4gZW5jb2RlVVJJQ29tcG9uZW50P2VuY29kZVVSSUNvbXBvbmVudChhKS5yZXBsYWNlKC9cXCgvZyxcIiUyOFwiKS5yZXBsYWNlKC9cXCkvZyxcIiUyOVwiKTphfSx2Yz0vXih3d3dcXC4pP2dvb2dsZShcXC5jb20/KT8oXFwuW2Etel17Mn0pPyQvLGViPS8oXnxcXC4pZG91YmxlY2xpY2tcXC5uZXQkL2k7dmFyIE9lPWZ1bmN0aW9uKGEpe3ZhciBiPVtdLGM9TS5jb29raWUuc3BsaXQoXCI7XCIpO2E9bmV3IFJlZ0V4cChcIl5cXFxccypcIisoYXx8XCJfZ2FjXCIpK1wiXyhVQS1cXFxcZCstXFxcXGQrKT1cXFxccyooLis/KVxcXFxzKiRcIik7Zm9yKHZhciBkPTA7ZDxjLmxlbmd0aDtkKyspe3ZhciBlPWNbZF0ubWF0Y2goYSk7ZSYmYi5wdXNoKHtqYTplWzFdLHZhbHVlOmVbMl0sdGltZXN0YW1wOk51bWJlcihlWzJdLnNwbGl0KFwiLlwiKVsxXSl8fDB9KX1iLnNvcnQoZnVuY3Rpb24oZyxjYSl7cmV0dXJuIGNhLnRpbWVzdGFtcC1nLnRpbWVzdGFtcH0pO3JldHVybiBifTtcbmZ1bmN0aW9uIGRmKGEsYixjKXtiPU9lKGIpO3ZhciBkPXt9O2lmKCFifHwhYi5sZW5ndGgpcmV0dXJuIGQ7Zm9yKHZhciBlPTA7ZTxiLmxlbmd0aDtlKyspe3ZhciBnPWJbZV0udmFsdWUuc3BsaXQoXCIuXCIpO2lmKFwiMVwiIT09Z1swXXx8YyYmMz5nLmxlbmd0aHx8IWMmJjMhPT1nLmxlbmd0aClhJiYoYS5uYT0hMCk7ZWxzZSBpZihOdW1iZXIoZ1sxXSkpe2RbYltlXS5qYV0/YSYmKGEucGE9ITApOmRbYltlXS5qYV09W107dmFyIGNhPXt2ZXJzaW9uOmdbMF0sdGltZXN0YW1wOjFFMypOdW1iZXIoZ1sxXSkscWE6Z1syXX07YyYmMzxnLmxlbmd0aCYmKGNhLmxhYmVscz1nLnNsaWNlKDMpKTtkW2JbZV0uamFdLnB1c2goY2EpfX1yZXR1cm4gZH07dmFyIEZhLEdhLGZiLEFiLGphPS9eaHR0cHM/OlxcL1xcL1teL10qY2RuXFwuYW1wcHJvamVjdFxcLm9yZ1xcLy8sVWU9L14oPzp3d3dcXC58bVxcLnxhbXBcXC4pKy8sVWI9W10sZGE9ZnVuY3Rpb24oYSl7aWYoeWUoYVtLZF0pKXtpZih2b2lkIDA9PT1BYil7dmFyIGI7aWYoYj0oYj1EZS5nZXQoKSkmJmIuX2dhfHx2b2lkIDApQWI9YixKKDgxKX1pZih2b2lkIDAhPT1BYilyZXR1cm4gYVtRXXx8KGFbUV09QWIpLCExfWlmKGFbS2RdKXtKKDY3KTtpZihhW2FjXSYmXCJjb29raWVcIiE9YVthY10pcmV0dXJuITE7aWYodm9pZCAwIT09QWIpYVtRXXx8KGFbUV09QWIpO2Vsc2V7YTp7Yj1TdHJpbmcoYVtXXXx8eGEoKSk7dmFyIGM9U3RyaW5nKGFbWWJdfHxcIi9cIiksZD1DYShTdHJpbmcoYVtVXXx8XCJfZ2FcIikpO2I9bmEoZCxiLGMpO2lmKCFifHxqZC50ZXN0KGIpKWI9ITA7ZWxzZSBpZihiPUNhKFwiQU1QX1RPS0VOXCIpLDA9PWIubGVuZ3RoKWI9ITA7ZWxzZXtpZigxPT1iLmxlbmd0aCYmKGI9ZGVjb2RlVVJJQ29tcG9uZW50KGJbMF0pLFxuXCIkUkVUUklFVklOR1wiPT1ifHxcIiRPUFRfT1VUXCI9PWJ8fFwiJEVSUk9SXCI9PWJ8fFwiJE5PVF9GT1VORFwiPT1iKSl7Yj0hMDticmVhayBhfWI9ITF9fWlmKGImJnRjKGljLFN0cmluZyhhW05hXSkpKXJldHVybiEwfX1yZXR1cm4hMX0saWM9ZnVuY3Rpb24oKXtaLkQoW3VhXSl9LHRjPWZ1bmN0aW9uKGEsYil7dmFyIGM9Q2EoXCJBTVBfVE9LRU5cIik7aWYoMTxjLmxlbmd0aClyZXR1cm4gSig1NSksITE7Yz1kZWNvZGVVUklDb21wb25lbnQoY1swXXx8XCJcIik7aWYoXCIkT1BUX09VVFwiPT1jfHxcIiRFUlJPUlwiPT1jfHxHKGIpKXJldHVybiBKKDYyKSwhMTtpZighamEudGVzdChNLnJlZmVycmVyKSYmXCIkTk9UX0ZPVU5EXCI9PWMpcmV0dXJuIEooNjgpLCExO2lmKHZvaWQgMCE9PUFiKXJldHVybiBKKDU2KSx2YShmdW5jdGlvbigpe2EoQWIpfSwwKSwhMDtpZihGYSlyZXR1cm4gVWIucHVzaChhKSwhMDtpZihcIiRSRVRSSUVWSU5HXCI9PWMpcmV0dXJuIEooNTcpLHZhKGZ1bmN0aW9uKCl7dGMoYSxiKX0sXG4xRTQpLCEwO0ZhPSEwO2MmJlwiJFwiIT1jWzBdfHwoeGMoXCIkUkVUUklFVklOR1wiLDNFNCksc2V0VGltZW91dChNYywzRTQpLGM9XCJcIik7cmV0dXJuIFBjKGMsYik/KFViLnB1c2goYSksITApOiExfSxQYz1mdW5jdGlvbihhLGIsYyl7aWYoIXdpbmRvdy5KU09OKXJldHVybiBKKDU4KSwhMTt2YXIgZD1PLlhNTEh0dHBSZXF1ZXN0O2lmKCFkKXJldHVybiBKKDU5KSwhMTt2YXIgZT1uZXcgZDtpZighKFwid2l0aENyZWRlbnRpYWxzXCJpbiBlKSlyZXR1cm4gSig2MCksITE7ZS5vcGVuKFwiUE9TVFwiLChjfHxcImh0dHBzOi8vYW1wY2lkLmdvb2dsZS5jb20vdjEvcHVibGlzaGVyOmdldENsaWVudElkXCIpK1wiP2tleT1BSXphU3lBNjVsRUhVRWl6SXNOdGxiTm8tbDJLMThkVDY4MG5zYU1cIiwhMCk7ZS53aXRoQ3JlZGVudGlhbHM9ITA7ZS5zZXRSZXF1ZXN0SGVhZGVyKFwiQ29udGVudC1UeXBlXCIsXCJ0ZXh0L3BsYWluXCIpO2Uub25sb2FkPWZ1bmN0aW9uKCl7RmE9ITE7aWYoND09ZS5yZWFkeVN0YXRlKXt0cnl7MjAwIT1cbmUuc3RhdHVzJiYoSig2MSksUWMoXCJcIixcIiRFUlJPUlwiLDNFNCkpO3ZhciBnPUpTT04ucGFyc2UoZS5yZXNwb25zZVRleHQpO2cub3B0T3V0PyhKKDYzKSxRYyhcIlwiLFwiJE9QVF9PVVRcIiwzMTUzNkU2KSk6Zy5jbGllbnRJZD9RYyhnLmNsaWVudElkLGcuc2VjdXJpdHlUb2tlbiwzMTUzNkU2KTohYyYmZy5hbHRlcm5hdGVVcmw/KEdhJiZjbGVhclRpbWVvdXQoR2EpLEZhPSEwLFBjKGEsYixnLmFsdGVybmF0ZVVybCkpOihKKDY0KSxRYyhcIlwiLFwiJE5PVF9GT1VORFwiLDM2RTUpKX1jYXRjaChjYSl7Sig2NSksUWMoXCJcIixcIiRFUlJPUlwiLDNFNCl9ZT1udWxsfX07ZD17b3JpZ2luU2NvcGU6XCJBTVBfRUNJRF9HT09HTEVcIn07YSYmKGQuc2VjdXJpdHlUb2tlbj1hKTtlLnNlbmQoSlNPTi5zdHJpbmdpZnkoZCkpO0dhPXZhKGZ1bmN0aW9uKCl7Sig2Nik7UWMoXCJcIixcIiRFUlJPUlwiLDNFNCl9LDFFNCk7cmV0dXJuITB9LE1jPWZ1bmN0aW9uKCl7RmE9ITF9LHhjPWZ1bmN0aW9uKGEsYil7aWYodm9pZCAwPT09XG5mYil7ZmI9XCJcIjtmb3IodmFyIGM9aWQoKSxkPTA7ZDxjLmxlbmd0aDtkKyspe3ZhciBlPWNbZF07aWYoemMoXCJBTVBfVE9LRU5cIixlbmNvZGVVUklDb21wb25lbnQoYSksXCIvXCIsZSxcIlwiLGIpKXtmYj1lO3JldHVybn19fXpjKFwiQU1QX1RPS0VOXCIsZW5jb2RlVVJJQ29tcG9uZW50KGEpLFwiL1wiLGZiLFwiXCIsYil9LFFjPWZ1bmN0aW9uKGEsYixjKXtHYSYmY2xlYXJUaW1lb3V0KEdhKTtiJiZ4YyhiLGMpO0FiPWE7Yj1VYjtVYj1bXTtmb3IoYz0wO2M8Yi5sZW5ndGg7YysrKWJbY10oYSl9LHllPWZ1bmN0aW9uKGEpe2E6e2lmKGphLnRlc3QoTS5yZWZlcnJlcikpe3ZhciBiPU0ubG9jYXRpb24uaG9zdG5hbWUucmVwbGFjZShVZSxcIlwiKTtiOnt2YXIgYz1NLnJlZmVycmVyO2M9Yy5yZXBsYWNlKC9eaHR0cHM/OlxcL1xcLy8sXCJcIik7dmFyIGQ9Yy5yZXBsYWNlKC9eW14vXSsvLFwiXCIpLnNwbGl0KFwiL1wiKSxlPWRbMl07ZD0oZD1cInNcIj09ZT9kWzNdOmUpP2RlY29kZVVSSUNvbXBvbmVudChkKTpkO2lmKCFkKXtpZigwPT1cbmMuaW5kZXhPZihcInhuLS1cIikpe2M9XCJcIjticmVhayBifShjPWMubWF0Y2goLyguKilcXC5jZG5cXC5hbXBwcm9qZWN0XFwub3JnXFwvPyQvKSkmJjI9PWMubGVuZ3RoJiYoZD1jWzFdLnJlcGxhY2UoLy0vZyxcIi5cIikucmVwbGFjZSgvXFwuXFwuL2csXCItXCIpKX1jPWQ/ZC5yZXBsYWNlKFVlLFwiXCIpOlwiXCJ9KGQ9Yj09PWMpfHwoYz1cIi5cIitjLGQ9Yi5zdWJzdHJpbmcoYi5sZW5ndGgtYy5sZW5ndGgsYi5sZW5ndGgpPT09Yyk7aWYoZCl7Yj0hMDticmVhayBhfWVsc2UgSig3OCl9Yj0hMX1yZXR1cm4gYiYmITEhPT1hfTt2YXIgYmQ9ZnVuY3Rpb24oYSl7cmV0dXJuKGE/XCJodHRwczpcIjpCYXx8XCJodHRwczpcIj09TS5sb2NhdGlvbi5wcm90b2NvbD9cImh0dHBzOlwiOlwiaHR0cDpcIikrXCIvL3d3dy5nb29nbGUtYW5hbHl0aWNzLmNvbVwifSxHZT1mdW5jdGlvbihhKXtzd2l0Y2goYSl7ZGVmYXVsdDpjYXNlIDE6cmV0dXJuXCJodHRwczovL3d3dy5nb29nbGUtYW5hbHl0aWNzLmNvbS9ndG0vanM/aWQ9XCI7Y2FzZSAyOnJldHVyblwiaHR0cHM6Ly93d3cuZ29vZ2xldGFnbWFuYWdlci5jb20vZ3RhZy9qcz9pZD1cIn19LERhPWZ1bmN0aW9uKGEpe3RoaXMubmFtZT1cImxlblwiO3RoaXMubWVzc2FnZT1hK1wiLTgxOTJcIn0sYmE9ZnVuY3Rpb24oYSxiLGMpe2M9Y3x8dWE7aWYoMjAzNj49Yi5sZW5ndGgpd2MoYSxiLGMpO2Vsc2UgaWYoODE5Mj49Yi5sZW5ndGgpeChhLGIsYyl8fHdkKGEsYixjKXx8d2MoYSxiLGMpO2Vsc2UgdGhyb3cgZ2UoXCJsZW5cIixiLmxlbmd0aCksbmV3IERhKGIubGVuZ3RoKTt9LHBlPWZ1bmN0aW9uKGEsYixcbmMsZCl7ZD1kfHx1YTt3ZChhK1wiP1wiK2IsXCJcIixkLGMpfSx3Yz1mdW5jdGlvbihhLGIsYyl7dmFyIGQ9dGEoYStcIj9cIitiKTtkLm9ubG9hZD1kLm9uZXJyb3I9ZnVuY3Rpb24oKXtkLm9ubG9hZD1udWxsO2Qub25lcnJvcj1udWxsO2MoKX19LHdkPWZ1bmN0aW9uKGEsYixjLGQpe3ZhciBlPU8uWE1MSHR0cFJlcXVlc3Q7aWYoIWUpcmV0dXJuITE7dmFyIGc9bmV3IGU7aWYoIShcIndpdGhDcmVkZW50aWFsc1wiaW4gZykpcmV0dXJuITE7YT1hLnJlcGxhY2UoL15odHRwOi8sXCJodHRwczpcIik7Zy5vcGVuKFwiUE9TVFwiLGEsITApO2cud2l0aENyZWRlbnRpYWxzPSEwO2cuc2V0UmVxdWVzdEhlYWRlcihcIkNvbnRlbnQtVHlwZVwiLFwidGV4dC9wbGFpblwiKTtnLm9ucmVhZHlzdGF0ZWNoYW5nZT1mdW5jdGlvbigpe2lmKDQ9PWcucmVhZHlTdGF0ZSl7aWYoZCYmXCJ0ZXh0L3BsYWluXCI9PT1nLmdldFJlc3BvbnNlSGVhZGVyKFwiQ29udGVudC1UeXBlXCIpKXRyeXtFYShkLGcucmVzcG9uc2VUZXh0LGMpfWNhdGNoKGNhKXtnZShcInhoclwiLFxuXCJyc3BcIiksYygpfWVsc2UgYygpO2c9bnVsbH19O2cuc2VuZChiKTtyZXR1cm4hMH0sRWE9ZnVuY3Rpb24oYSxiLGMpe2lmKDE+Yi5sZW5ndGgpZ2UoXCJ4aHJcIixcInZlclwiLFwiMFwiKSxjKCk7ZWxzZSBpZigzPGEuY291bnQrKylnZShcInhoclwiLFwidG1yXCIsXCJcIithLmNvdW50KSxjKCk7ZWxzZXt2YXIgZD1iLmNoYXJBdCgwKTtpZihcIjFcIj09PWQpb2MoYSxiLnN1YnN0cmluZygxKSxjKTtlbHNlIGlmKGEuViYmXCIyXCI9PT1kKXt2YXIgZT1iLnN1YnN0cmluZygxKS5zcGxpdChcIixcIiksZz0wO2I9ZnVuY3Rpb24oKXsrK2c9PT1lLmxlbmd0aCYmYygpfTtmb3IoZD0wO2Q8ZS5sZW5ndGg7ZCsrKW9jKGEsZVtkXSxiKX1lbHNlIGdlKFwieGhyXCIsXCJ2ZXJcIixTdHJpbmcoYi5sZW5ndGgpKSxjKCl9fSxvYz1mdW5jdGlvbihhLGIsYyl7aWYoMD09PWIubGVuZ3RoKWMoKTtlbHNle3ZhciBkPWIuY2hhckF0KDApO3N3aXRjaChkKXtjYXNlIFwiZFwiOnBlKFwiaHR0cHM6Ly9zdGF0cy5nLmRvdWJsZWNsaWNrLm5ldC9qL2NvbGxlY3RcIixcbmEuVSxhLGMpO2JyZWFrO2Nhc2UgXCJnXCI6d2MoXCJodHRwczovL3d3dy5nb29nbGUuY29tL2Fkcy9nYS1hdWRpZW5jZXNcIixhLmdvb2dsZSxjKTsoYj1iLnN1YnN0cmluZygxKSkmJigvXlthLXouXXsxLDZ9JC8udGVzdChiKT93YyhcImh0dHBzOi8vd3d3Lmdvb2dsZS4lL2Fkcy9nYS1hdWRpZW5jZXNcIi5yZXBsYWNlKFwiJVwiLGIpLGEuZ29vZ2xlLHVhKTpnZShcInRsZFwiLFwiYmNjXCIsYikpO2JyZWFrO2Nhc2UgXCJHXCI6aWYoYS5WKXthLlYoXCJHLVwiK2Iuc3Vic3RyaW5nKDEpKTtjKCk7YnJlYWt9Y2FzZSBcInhcIjppZihhLlYpe2EuVigpO2MoKTticmVha31jYXNlIFwiY1wiOmlmKGEuVil7YS5WKGIuc3Vic3RyaW5nKDEpKTtjKCk7YnJlYWt9ZGVmYXVsdDpnZShcInhoclwiLFwiYnJjXCIsZCksYygpfX19LHg9ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBPLm5hdmlnYXRvci5zZW5kQmVhY29uP08ubmF2aWdhdG9yLnNlbmRCZWFjb24oYSxiKT8oYygpLCEwKTohMTohMX0sZ2U9ZnVuY3Rpb24oYSxiLGMpezE8PVxuMTAwKk1hdGgucmFuZG9tKCl8fEcoXCI/XCIpfHwoYT1bXCJ0PWVycm9yXCIsXCJfZT1cIithLFwiX3Y9ajEwMVwiLFwic3I9MVwiXSxiJiZhLnB1c2goXCJfZj1cIitiKSxjJiZhLnB1c2goXCJfbT1cIitLKGMuc3Vic3RyaW5nKDAsMTAwKSkpLGEucHVzaChcImFpcD0xXCIpLGEucHVzaChcIno9XCIraGQoKSksd2MoYmQoITApK1wiL3UvZFwiLGEuam9pbihcIiZcIiksdWEpKX07dmFyIHFjPWZ1bmN0aW9uKCl7cmV0dXJuIE8uZ2FEYXRhPU8uZ2FEYXRhfHx7fX0saD1mdW5jdGlvbihhKXt2YXIgYj1xYygpO3JldHVybiBiW2FdPWJbYV18fHt9fTt2YXIgSGE9ZnVuY3Rpb24oKXt0aGlzLk09W119O0hhLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24oYSl7dGhpcy5NLnB1c2goYSl9O0hhLnByb3RvdHlwZS5EPWZ1bmN0aW9uKGEpe3RyeXtmb3IodmFyIGI9MDtiPHRoaXMuTS5sZW5ndGg7YisrKXt2YXIgYz1hLmdldCh0aGlzLk1bYl0pO2MmJmVhKGMpJiZjLmNhbGwoTyxhKX19Y2F0Y2goZCl7fWI9YS5nZXQoSWEpO2IhPXVhJiZlYShiKSYmKGEuc2V0KElhLHVhLCEwKSxzZXRUaW1lb3V0KGIsMTApKX07ZnVuY3Rpb24gSmEoYSl7aWYoMTAwIT1hLmdldChLYSkmJkxhKFAoYSxRKSklMUU0Pj0xMDAqUihhLEthKSl0aHJvd1wiYWJvcnRcIjt9ZnVuY3Rpb24gTWEoYSl7aWYoRyhQKGEsTmEpKSl0aHJvd1wiYWJvcnRcIjt9ZnVuY3Rpb24gT2EoKXt2YXIgYT1NLmxvY2F0aW9uLnByb3RvY29sO2lmKFwiaHR0cDpcIiE9YSYmXCJodHRwczpcIiE9YSl0aHJvd1wiYWJvcnRcIjt9XG5mdW5jdGlvbiBwZihhKXt2YXIgYj0hMSxjPSExO2lmKHZkLmdldCg4OSkpe2M9ITA7dmFyIGQ9YS5nZXQoa2IpLGU9TS5sb2NhdGlvbjtpZihlKXt2YXIgZz1lLnBhdGhuYW1lfHxcIlwiO1wiL1wiIT1nLmNoYXJBdCgwKSYmKGc9XCIvXCIrZyk7ZT1lLnByb3RvY29sK1wiLy9cIitlLmhvc3RuYW1lK2crZS5zZWFyY2g7ZCYmMD09PWQuaW5kZXhPZihlKXx8KGI9ITApfX0hYyYmdmQuZ2V0KDkwKSYmKGM9ITAsZD1hLmdldChsYiksZT1vZighIWEuZ2V0KGVjKSwhIWEuZ2V0KEtkKSksZCE9PWUmJihiPSEwKSk7IWMmJnZkLmdldCg5MSkmJihjPSEwLGEuZ2V0KHFmKSE9PU0udGl0bGUmJihiPSEwKSk7cmV0dXJuIGMmJiFifVxuZnVuY3Rpb24gUGEoYSl7dHJ5e08ubmF2aWdhdG9yLnNlbmRCZWFjb24/Sig0Mik6Ty5YTUxIdHRwUmVxdWVzdCYmXCJ3aXRoQ3JlZGVudGlhbHNcImluIG5ldyBPLlhNTEh0dHBSZXF1ZXN0JiZKKDQwKX1jYXRjaChjKXt9YS5zZXQobGQsVGQoYSksITApO2Euc2V0KEFjLFIoYSxBYykrMSk7dmFyIGI9W107dWUubWFwKGZ1bmN0aW9uKGMsZCl7ZC5GJiYoYz1hLmdldChjKSx2b2lkIDAhPWMmJmMhPWQuZGVmYXVsdFZhbHVlJiYoXCJib29sZWFuXCI9PXR5cGVvZiBjJiYoYyo9MSksYi5wdXNoKGQuRitcIj1cIitLKFwiXCIrYykpKSl9KTshMT09PWEuZ2V0KHhlKSYmYi5wdXNoKFwibnBhPTFcIik7Yi5wdXNoKFwiej1cIitCZCgpKTtwZihhKSYmSigxMDkpO2Euc2V0KFJhLGIuam9pbihcIiZcIiksITApfVxuZnVuY3Rpb24gU2EoYSl7dmFyIGI9UChhLGZhKTshYiYmYS5nZXQoVmQpJiYoYj1cImJlYWNvblwiKTt2YXIgYz1QKGEsZ2QpLGQ9UChhLG9lKSxlPWN8fChkfHxiZCghMSkrXCJcIikrXCIvY29sbGVjdFwiLGc9YS5aKElhKSxjYT1QKGEsUmEpLGw9UChhLE5hKTtzd2l0Y2goUChhLGFkKSl7Y2FzZSBcImRcIjplPWN8fChkfHxiZCghMSkrXCJcIikrXCIvai9jb2xsZWN0XCI7Yj1hLmdldChxZSl8fHZvaWQgMDtwZShlLGNhLGIsZyk7YnJlYWs7ZGVmYXVsdDpiPyhnPWd8fHVhLFwiaW1hZ2VcIj09Yj93YyhlLGNhLGcpOlwieGhyXCI9PWImJndkKGUsY2EsZyl8fFwiYmVhY29uXCI9PWImJngoZSxjYSxnKXx8YmEoZSxjYSxnKSk6YmEoZSxjYSxnKX1jYT1oKGwpO2c9Y2EuaGl0Y291bnQ7Y2EuaGl0Y291bnQ9Zz9nKzE6MTtjYS5maXJzdF9oaXR8fChjYS5maXJzdF9oaXQ9KG5ldyBEYXRlKS5nZXRUaW1lKCkpO2RlbGV0ZSBoKGwpLnBlbmRpbmdfZXhwZXJpbWVudHM7YS5zZXQoSWEsdWEsITApO2lmKHJmKGEpKWlmKGNhPVxuUChhLE5hKSxsPXNmW2NhXSlmb3IoY2E9MDtjYTxsLmxlbmd0aDsrK2NhKShnPXRmKGxbY2FdKS5xKSYmMzA+Zy5sZW5ndGgmJmcucHVzaCYmZy5wdXNoKHVmKGEpKTtlbHNlIHZmW2NhXT12ZltjYV18fFtdLDMwPnZmW2NhXS5sZW5ndGgmJnZmW2NhXS5wdXNoKHVmKGEpKX1mdW5jdGlvbiBIYyhhKXtxYygpLmV4cElkJiZhLnNldChOYyxxYygpLmV4cElkKTtxYygpLmV4cFZhciYmYS5zZXQoT2MscWMoKS5leHBWYXIpO3ZhciBiPVAoYSxOYSk7aWYoYj1oKGIpLnBlbmRpbmdfZXhwZXJpbWVudHMpe3ZhciBjPVtdO2ZvcihkIGluIGIpYi5oYXNPd25Qcm9wZXJ0eShkKSYmYltkXSYmYy5wdXNoKGVuY29kZVVSSUNvbXBvbmVudChkKStcIi5cIitlbmNvZGVVUklDb21wb25lbnQoYltkXSkpO3ZhciBkPWMuam9pbihcIiFcIil9ZWxzZSBkPXZvaWQgMDtkJiYoKGI9YS5nZXQobSkpJiYoZD1iK1wiIVwiK2QpLGEuc2V0KG0sZCwhMCkpfVxuZnVuY3Rpb24gY2QoKXtpZihPLm5hdmlnYXRvciYmXCJwcmV2aWV3XCI9PU8ubmF2aWdhdG9yLmxvYWRQdXJwb3NlKXRocm93XCJhYm9ydFwiO31mdW5jdGlvbiB5ZChhKXt2YXIgYj1PLmdhRGV2SWRzfHxbXTtpZihrYShiKSl7dmFyIGM9YS5nZXQoXCImZGlkXCIpO3FhKGMpJiYwPGMubGVuZ3RoJiYoYj1iLmNvbmNhdChjLnNwbGl0KFwiLFwiKSkpO2M9W107Zm9yKHZhciBkPTA7ZDxiLmxlbmd0aDtkKyspRWUoYyxiW2RdKXx8Yy5wdXNoKGJbZF0pOzAhPWMubGVuZ3RoJiZhLnNldChcIiZkaWRcIixjLmpvaW4oXCIsXCIpLCEwKX19ZnVuY3Rpb24gdmIoYSl7aWYoIWEuZ2V0KE5hKSl0aHJvd1wiYWJvcnRcIjt9XG5mdW5jdGlvbiBQZShhKXt0cnl7aWYoIWEuZ2V0KFFlKSYmKGEuc2V0KFFlLCEwKSwhYS5nZXQoXCImZ3RtXCIpKSl7dmFyIGI9dm9pZCAwLGM9dm9pZCAwO2xmKGJlKFwiZ3RtX2RlYnVnXCIpKSYmKGI9Mik7IWImJkQoTS5yZWZlcnJlcixcImh0dHBzOi8vdGFnYXNzaXN0YW50Lmdvb2dsZS5jb20vXCIpJiYoYj0zKTshYiYmRWUoTS5jb29raWUuc3BsaXQoXCI7IFwiKSxcIl9fVEFHX0FTU0lTVEFOVD14XCIpJiYoYj00KTtifHwoYz1NLmRvY3VtZW50RWxlbWVudC5nZXRBdHRyaWJ1dGUoXCJkYXRhLXRhZy1hc3Npc3RhbnQtcHJlc2VudFwiKSxsZihjKSYmKGI9NSkpO2lmKGIpe09bXCJnb29nbGUudGFnbWFuYWdlci5kZWJ1Z3VpMi5xdWV1ZVwiXXx8KE9bXCJnb29nbGUudGFnbWFuYWdlci5kZWJ1Z3VpMi5xdWV1ZVwiXT1bXSxJZChcImh0dHBzOi8vd3d3Lmdvb2dsZS1hbmFseXRpY3MuY29tL2RlYnVnL2Jvb3RzdHJhcD9pZD1cIithLmdldChOYSkrXCImc3JjPUxFR0FDWSZjb25kPVwiK2IpKTt2YXIgZD1NLmN1cnJlbnRTY3JpcHQ7XG5PW1wiZ29vZ2xlLnRhZ21hbmFnZXIuZGVidWd1aTIucXVldWVcIl0ucHVzaCh7bWVzc2FnZVR5cGU6XCJMRUdBQ1lfQ09OVEFJTkVSX1NUQVJUSU5HXCIsZGF0YTp7aWQ6YS5nZXQoTmEpLHNjcmlwdFNvdXJjZTpkJiZkLnNyY3x8XCJcIn19KX19fWNhdGNoKGUpe319ZnVuY3Rpb24gbGYoYSl7aWYobnVsbD09YXx8MD09PWEubGVuZ3RoKXJldHVybiExO2E9TnVtYmVyKGEpO3ZhciBiPURhdGUubm93KCk7cmV0dXJuIGE8YiszRTUmJmE+Yi05RTV9O3ZhciBoZD1mdW5jdGlvbigpe3JldHVybiBNYXRoLnJvdW5kKDIxNDc0ODM2NDcqTWF0aC5yYW5kb20oKSl9LEJkPWZ1bmN0aW9uKCl7dHJ5e3ZhciBhPW5ldyBVaW50MzJBcnJheSgxKTtPLmNyeXB0by5nZXRSYW5kb21WYWx1ZXMoYSk7cmV0dXJuIGFbMF0mMjE0NzQ4MzY0N31jYXRjaChiKXtyZXR1cm4gaGQoKX19O2Z1bmN0aW9uIFRhKGEpe3ZhciBiPVIoYSxVYSk7NTAwPD1iJiZKKDE1KTt2YXIgYz1QKGEsVmEpO2lmKFwidHJhbnNhY3Rpb25cIiE9YyYmXCJpdGVtXCIhPWMpe2M9UihhLFdhKTt2YXIgZD0obmV3IERhdGUpLmdldFRpbWUoKSxlPVIoYSxYYSk7MD09ZSYmYS5zZXQoWGEsZCk7ZT1NYXRoLnJvdW5kKDIqKGQtZSkvMUUzKTswPGUmJihjPU1hdGgubWluKGMrZSwyMCksYS5zZXQoWGEsZCkpO2lmKDA+PWMpdGhyb3dcImFib3J0XCI7YS5zZXQoV2EsLS1jKX1hLnNldChVYSwrK2IpfTt2YXIgWWE9ZnVuY3Rpb24oKXt0aGlzLmRhdGE9bmV3IGVlfTtZYS5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKGEpe3ZhciBiPSRhKGEpLGM9dGhpcy5kYXRhLmdldChhKTtiJiZ2b2lkIDA9PWMmJihjPWVhKGIuZGVmYXVsdFZhbHVlKT9iLmRlZmF1bHRWYWx1ZSgpOmIuZGVmYXVsdFZhbHVlKTtyZXR1cm4gYiYmYi5aP2IuWih0aGlzLGEsYyk6Y307dmFyIFA9ZnVuY3Rpb24oYSxiKXthPWEuZ2V0KGIpO3JldHVybiB2b2lkIDA9PWE/XCJcIjpcIlwiK2F9LFI9ZnVuY3Rpb24oYSxiKXthPWEuZ2V0KGIpO3JldHVybiB2b2lkIDA9PWF8fFwiXCI9PT1hPzA6TnVtYmVyKGEpfTtZYS5wcm90b3R5cGUuWj1mdW5jdGlvbihhKXtyZXR1cm4oYT10aGlzLmdldChhKSkmJmVhKGEpP2E6dWF9O1xuWWEucHJvdG90eXBlLnNldD1mdW5jdGlvbihhLGIsYyl7aWYoYSlpZihcIm9iamVjdFwiPT09dHlwZW9mIGEpZm9yKHZhciBkIGluIGEpYS5oYXNPd25Qcm9wZXJ0eShkKSYmYWIodGhpcyxkLGFbZF0sYyk7ZWxzZSBhYih0aGlzLGEsYixjKX07XG52YXIgYWI9ZnVuY3Rpb24oYSxiLGMsZCl7aWYodm9pZCAwIT1jKXN3aXRjaChiKXtjYXNlIE5hOndiLnRlc3QoYyl9dmFyIGU9JGEoYik7ZSYmZS5vP2UubyhhLGIsYyxkKTphLmRhdGEuc2V0KGIsYyxkKX0sZ2Y9e2hpdFBheWxvYWQ6ODgsbG9jYXRpb246ODkscmVmZXJyZXI6OTAsdGl0bGU6OTEsYnVpbGRIaXRUYXNrOjkzLHNlbmRIaXRUYXNrOjk0LGRpc3BsYXlGZWF0dXJlc1Rhc2s6OTUsY3VzdG9tVGFzazo5Nyxjb29raWVOYW1lOjk4LGNvb2tpZURvbWFpbjo5OSxjb29raWVQYXRoOjEwMCxjb29raWVFeHBpcmVzOjEwMSxjb29raWVVcGRhdGU6MTAyLGNvb2tpZUZsYWdzOjEwMyxzdG9yYWdlOjEwNCxfeF8xOToxMDUsdHJhbnNwb3J0VXJsOjEwNixhbGxvd0FkRmVhdHVyZXM6MTA3LHNhbXBsZVJhdGU6MTA4fTtcbmZ1bmN0aW9uIGhmKGEsYil7dmFyIGM9Z2ZbYV07YyYmSihjKTtcImRpc3BsYXlGZWF0dXJlc1Rhc2tcIj09PWEmJnZvaWQgMD09YiYmSig5Nik7Ly4qVGFzayQvLnRlc3QoYSkmJkooOTIpfWZ1bmN0aW9uIG1mKGEsYil7aWYoYSlpZihcIm9iamVjdFwiPT09dHlwZW9mIGEpZm9yKHZhciBjIGluIGEpYS5oYXNPd25Qcm9wZXJ0eShjKSYmaGYoYyxiKTtlbHNlIGhmKGEsYil9O3ZhciB1ZT1uZXcgZWUsdmU9W10sYmI9ZnVuY3Rpb24oYSxiLGMsZCxlKXt0aGlzLm5hbWU9YTt0aGlzLkY9Yjt0aGlzLlo9ZDt0aGlzLm89ZTt0aGlzLmRlZmF1bHRWYWx1ZT1jfTtmdW5jdGlvbiAkYShhKXt2YXIgYj11ZS5nZXQoYSk7aWYoIWIpZm9yKHZhciBjPTA7Yzx2ZS5sZW5ndGg7YysrKXt2YXIgZD12ZVtjXSxlPWRbMF0uZXhlYyhhKTtpZihlKXtiPWRbMV0oZSk7dWUuc2V0KGIubmFtZSxiKTticmVha319cmV0dXJuIGJ9ZnVuY3Rpb24geWMoYSl7dmFyIGI7dWUubWFwKGZ1bmN0aW9uKGMsZCl7ZC5GPT1hJiYoYj1kKX0pO3JldHVybiBiJiZiLm5hbWV9ZnVuY3Rpb24gUyhhLGIsYyxkLGUpe2E9bmV3IGJiKGEsYixjLGQsZSk7dWUuc2V0KGEubmFtZSxhKTtyZXR1cm4gYS5uYW1lfWZ1bmN0aW9uIGNiKGEsYil7dmUucHVzaChbbmV3IFJlZ0V4cChcIl5cIithK1wiJFwiKSxiXSl9ZnVuY3Rpb24gVChhLGIsYyl7cmV0dXJuIFMoYSxiLGMsdm9pZCAwLGRiKX1cbmZ1bmN0aW9uIGRiKCl7fTt2YXIgaGI9VChcImFwaVZlcnNpb25cIixcInZcIiksaWI9VChcImNsaWVudFZlcnNpb25cIixcIl92XCIpO1MoXCJhbm9ueW1pemVJcFwiLFwiYWlwXCIpO3ZhciBqYj1TKFwiYWRTZW5zZUlkXCIsXCJhXCIpLFZhPVMoXCJoaXRUeXBlXCIsXCJ0XCIpLElhPVMoXCJoaXRDYWxsYmFja1wiKSxSYT1TKFwiaGl0UGF5bG9hZFwiKTtTKFwibm9uSW50ZXJhY3Rpb25cIixcIm5pXCIpO1MoXCJjdXJyZW5jeUNvZGVcIixcImN1XCIpO1MoXCJkYXRhU291cmNlXCIsXCJkc1wiKTt2YXIgVmQ9UyhcInVzZUJlYWNvblwiLHZvaWQgMCwhMSksZmE9UyhcInRyYW5zcG9ydFwiKTtTKFwic2Vzc2lvbkNvbnRyb2xcIixcInNjXCIsXCJcIik7UyhcInNlc3Npb25Hcm91cFwiLFwic2dcIik7UyhcInF1ZXVlVGltZVwiLFwicXRcIik7dmFyIEFjPVMoXCJfc1wiLFwiX3NcIiksSWU9UyhcIl9ub19zbGNcIik7UyhcInNjcmVlbk5hbWVcIixcImNkXCIpO3ZhciBrYj1TKFwibG9jYXRpb25cIixcImRsXCIsXCJcIiksbGI9UyhcInJlZmVycmVyXCIsXCJkclwiKSxtYj1TKFwicGFnZVwiLFwiZHBcIixcIlwiKTtTKFwiaG9zdG5hbWVcIixcImRoXCIpO1xudmFyIG5iPVMoXCJsYW5ndWFnZVwiLFwidWxcIiksb2I9UyhcImVuY29kaW5nXCIsXCJkZVwiKSxxZj1TKFwidGl0bGVcIixcImR0XCIsZnVuY3Rpb24oKXtyZXR1cm4gTS50aXRsZXx8dm9pZCAwfSk7Y2IoXCJjb250ZW50R3JvdXAoWzAtOV0rKVwiLGZ1bmN0aW9uKGEpe3JldHVybiBuZXcgYmIoYVswXSxcImNnXCIrYVsxXSl9KTt2YXIgcGI9UyhcInNjcmVlbkNvbG9yc1wiLFwic2RcIikscWI9UyhcInNjcmVlblJlc29sdXRpb25cIixcInNyXCIpLHJiPVMoXCJ2aWV3cG9ydFNpemVcIixcInZwXCIpLHNiPVMoXCJqYXZhRW5hYmxlZFwiLFwiamVcIiksdGI9UyhcImZsYXNoVmVyc2lvblwiLFwiZmxcIik7UyhcImNhbXBhaWduSWRcIixcImNpXCIpO1MoXCJjYW1wYWlnbk5hbWVcIixcImNuXCIpO1MoXCJjYW1wYWlnblNvdXJjZVwiLFwiY3NcIik7UyhcImNhbXBhaWduTWVkaXVtXCIsXCJjbVwiKTtTKFwiY2FtcGFpZ25LZXl3b3JkXCIsXCJja1wiKTtTKFwiY2FtcGFpZ25Db250ZW50XCIsXCJjY1wiKTtcbnZhciB1Yj1TKFwiZXZlbnRDYXRlZ29yeVwiLFwiZWNcIikseGI9UyhcImV2ZW50QWN0aW9uXCIsXCJlYVwiKSx5Yj1TKFwiZXZlbnRMYWJlbFwiLFwiZWxcIiksemI9UyhcImV2ZW50VmFsdWVcIixcImV2XCIpLEJiPVMoXCJzb2NpYWxOZXR3b3JrXCIsXCJzblwiKSxDYj1TKFwic29jaWFsQWN0aW9uXCIsXCJzYVwiKSxEYj1TKFwic29jaWFsVGFyZ2V0XCIsXCJzdFwiKSxFYj1TKFwibDFcIixcInBsdFwiKSxGYj1TKFwibDJcIixcInBkdFwiKSxHYj1TKFwibDNcIixcImRuc1wiKSxIYj1TKFwibDRcIixcInJydFwiKSxJYj1TKFwibDVcIixcInNydFwiKSxKYj1TKFwibDZcIixcInRjcFwiKSxLYj1TKFwibDdcIixcImRpdFwiKSxMYj1TKFwibDhcIixcImNsdFwiKSxWZT1TKFwibDlcIixcIl9nc3RcIiksV2U9UyhcImwxMFwiLFwiX2didFwiKSxYZT1TKFwibDExXCIsXCJfY3N0XCIpLFllPVMoXCJsMTJcIixcIl9jYnRcIiksTWI9UyhcInRpbWluZ0NhdGVnb3J5XCIsXCJ1dGNcIiksTmI9UyhcInRpbWluZ1ZhclwiLFwidXR2XCIpLE9iPVMoXCJ0aW1pbmdMYWJlbFwiLFwidXRsXCIpLFBiPVMoXCJ0aW1pbmdWYWx1ZVwiLFwidXR0XCIpO1xuUyhcImFwcE5hbWVcIixcImFuXCIpO1MoXCJhcHBWZXJzaW9uXCIsXCJhdlwiLFwiXCIpO1MoXCJhcHBJZFwiLFwiYWlkXCIsXCJcIik7UyhcImFwcEluc3RhbGxlcklkXCIsXCJhaWlkXCIsXCJcIik7UyhcImV4RGVzY3JpcHRpb25cIixcImV4ZFwiKTtTKFwiZXhGYXRhbFwiLFwiZXhmXCIpO3ZhciBOYz1TKFwiZXhwSWRcIixcInhpZFwiKSxPYz1TKFwiZXhwVmFyXCIsXCJ4dmFyXCIpLG09UyhcImV4cFwiLFwiZXhwXCIpLFJjPVMoXCJfdXRtYVwiLFwiX3V0bWFcIiksU2M9UyhcIl91dG16XCIsXCJfdXRtelwiKSxUYz1TKFwiX3V0bWh0XCIsXCJfdXRtaHRcIiksVWE9UyhcIl9oY1wiLHZvaWQgMCwwKSxYYT1TKFwiX3RpXCIsdm9pZCAwLDApLFdhPVMoXCJfdG9cIix2b2lkIDAsMjApO2NiKFwiZGltZW5zaW9uKFswLTldKylcIixmdW5jdGlvbihhKXtyZXR1cm4gbmV3IGJiKGFbMF0sXCJjZFwiK2FbMV0pfSk7Y2IoXCJtZXRyaWMoWzAtOV0rKVwiLGZ1bmN0aW9uKGEpe3JldHVybiBuZXcgYmIoYVswXSxcImNtXCIrYVsxXSl9KTtTKFwibGlua2VyUGFyYW1cIix2b2lkIDAsdm9pZCAwLEJjLGRiKTtcbnZhciBaZT1UKFwiX2NkMmxcIix2b2lkIDAsITEpLGxkPVMoXCJ1c2FnZVwiLFwiX3VcIiksR2Q9UyhcIl91bVwiKTtTKFwiZm9yY2VTU0xcIix2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7cmV0dXJuIEJhfSxmdW5jdGlvbihhLGIsYyl7SigzNCk7QmE9ISFjfSk7dmFyIGVkPVMoXCJfajFcIixcImppZFwiKSxpYT1TKFwiX2oyXCIsXCJnamlkXCIpO2NiKFwiXFxcXCYoLiopXCIsZnVuY3Rpb24oYSl7dmFyIGI9bmV3IGJiKGFbMF0sYVsxXSksYz15YyhhWzBdLnN1YnN0cmluZygxKSk7YyYmKGIuWj1mdW5jdGlvbihkKXtyZXR1cm4gZC5nZXQoYyl9LGIubz1mdW5jdGlvbihkLGUsZyxjYSl7ZC5zZXQoYyxnLGNhKX0sYi5GPXZvaWQgMCk7cmV0dXJuIGJ9KTtcbnZhciBRYj1UKFwiX29vdFwiKSxkZD1TKFwicHJldmlld1Rhc2tcIiksUmI9UyhcImNoZWNrUHJvdG9jb2xUYXNrXCIpLG1kPVMoXCJ2YWxpZGF0aW9uVGFza1wiKSxTYj1TKFwiY2hlY2tTdG9yYWdlVGFza1wiKSxVYz1TKFwiaGlzdG9yeUltcG9ydFRhc2tcIiksVGI9UyhcInNhbXBsZXJUYXNrXCIpLFZiPVMoXCJfcmx0XCIpLFdiPVMoXCJidWlsZEhpdFRhc2tcIiksWGI9UyhcInNlbmRIaXRUYXNrXCIpLFZjPVMoXCJjZVRhc2tcIiksemQ9UyhcImRldklkVGFza1wiKSxDZD1TKFwidGltaW5nVGFza1wiKSxMZD1TKFwiZGlzcGxheUZlYXR1cmVzVGFza1wiKSxvYT1TKFwiY3VzdG9tVGFza1wiKSx6ZT1TKFwiZnBzQ3Jvc3NEb21haW5UYXNrXCIpLFJlPVQoXCJfY3RhXCIpLFY9VChcIm5hbWVcIiksUT1UKFwiY2xpZW50SWRcIixcImNpZFwiKSxuPVQoXCJjbGllbnRJZFRpbWVcIikseGQ9VChcInN0b3JlZENsaWVudElkXCIpLEFkPVMoXCJ1c2VySWRcIixcInVpZFwiKSxOYT1UKFwidHJhY2tpbmdJZFwiLFwidGlkXCIpLFU9VChcImNvb2tpZU5hbWVcIix2b2lkIDAsXCJfZ2FcIiksXG5XPVQoXCJjb29raWVEb21haW5cIiksWWI9VChcImNvb2tpZVBhdGhcIix2b2lkIDAsXCIvXCIpLFpiPVQoXCJjb29raWVFeHBpcmVzXCIsdm9pZCAwLDYzMDcyRTMpLEhkPVQoXCJjb29raWVVcGRhdGVcIix2b2lkIDAsITApLEJlPVQoXCJjb29raWVGbGFnc1wiLHZvaWQgMCxcIlwiKSwkYj1UKFwibGVnYWN5Q29va2llRG9tYWluXCIpLFdjPVQoXCJsZWdhY3lIaXN0b3J5SW1wb3J0XCIsdm9pZCAwLCEwKSxhYz1UKFwic3RvcmFnZVwiLHZvaWQgMCxcImNvb2tpZVwiKSxiYz1UKFwiYWxsb3dMaW5rZXJcIix2b2lkIDAsITEpLGNjPVQoXCJhbGxvd0FuY2hvclwiLHZvaWQgMCwhMCksS2E9VChcInNhbXBsZVJhdGVcIixcInNmXCIsMTAwKSxkYz1UKFwic2l0ZVNwZWVkU2FtcGxlUmF0ZVwiLHZvaWQgMCwxKSxlYz1UKFwiYWx3YXlzU2VuZFJlZmVycmVyXCIsdm9pZCAwLCExKSxJPVQoXCJfZ2lkXCIsXCJfZ2lkXCIpLGxhPVQoXCJfZ2NuXCIpLEtkPVQoXCJ1c2VBbXBDbGllbnRJZFwiKSxjZT1UKFwiX2djbGlkXCIpLGZlPVQoXCJfZ3RcIiksaGU9VChcIl9nZVwiLHZvaWQgMCxcbjc3NzZFNiksaWU9VChcIl9nY2xzcmNcIiksamU9VChcInN0b3JlR2FjXCIsdm9pZCAwLCEwKSxvZT1TKFwiX3hfMTlcIiksQWU9UyhcIl9mcGxjXCIsXCJfZnBsY1wiKSxGPVQoXCJfY3NcIiksSmU9VChcIl91c2VVcFwiLHZvaWQgMCwhMSksTGU9UyhcInVwXCIsXCJ1cFwiKSxRZT1TKFwiX3RhY1wiLHZvaWQgMCwhMSksU2U9VChcIl9nYnJhaWRcIiksVGU9VChcIl9nYnRcIiksYmY9VChcIl9nYmVcIix2b2lkIDAsNzc3NkU2KSxnZD1TKFwidHJhbnNwb3J0VXJsXCIpLE1kPVMoXCJfclwiLFwiX3JcIiksT2Q9UyhcIl9zbGNcIixcIl9zbGNcIikscWU9UyhcIl9kcFwiKSxhZD1TKFwiX2p0XCIsdm9pZCAwLFwiblwiKSxVZD1TKFwiYWxsb3dBZEZlYXR1cmVzXCIsdm9pZCAwLCEwKSx4ZT1TKFwiYWxsb3dBZFBlcnNvbmFsaXphdGlvblNpZ25hbHNcIix2b2lkIDAsITApO1xuZnVuY3Rpb24gWChhLGIsYyxkKXtiW2FdPWZ1bmN0aW9uKCl7dHJ5e3JldHVybiBkJiZKKGQpLGMuYXBwbHkodGhpcyxhcmd1bWVudHMpfWNhdGNoKGUpe3Rocm93IGdlKFwiZXhjXCIsYSxlJiZlLm5hbWUpLGU7fX19O3ZhciBFZD1mdW5jdGlvbihhKXtpZihcImNvb2tpZVwiPT1hLmdldChhYykpcmV0dXJuIGE9Q2EoXCJGUExDXCIpLDA8YS5sZW5ndGg/YVswXTp2b2lkIDB9LEZlPWZ1bmN0aW9uKGEpe3ZhciBiO2lmKGI9UChhLG9lKSYmYS5nZXQoWmUpKWI9RGUuZ2V0KGEuZ2V0KGNjKSksYj0hKGImJmIuX2ZwbGMpO2ImJiFFZChhKSYmYS5zZXQoQWUsXCIwXCIpfTt2YXIgYWE9ZnVuY3Rpb24oYSl7dmFyIGI9TWF0aC5taW4oUihhLGRjKSwxMDApO3JldHVybiBMYShQKGEsUSkpJTEwMD49Yj8hMTohMH0sZ2M9ZnVuY3Rpb24oYSl7dmFyIGI9e307aWYoRWMoYil8fEZjKGIpKXt2YXIgYz1iW0ViXTt2b2lkIDA9PWN8fEluZmluaXR5PT1jfHxpc05hTihjKXx8KDA8Yz8oWShiLEdiKSxZKGIsSmIpLFkoYixJYiksWShiLEZiKSxZKGIsSGIpLFkoYixLYiksWShiLExiKSxZKGIsVmUpLFkoYixXZSksWShiLFhlKSxZKGIsWWUpLHZhKGZ1bmN0aW9uKCl7YShiKX0sMTApKTpMKE8sXCJsb2FkXCIsZnVuY3Rpb24oKXtnYyhhKX0sITEpKX19LEVjPWZ1bmN0aW9uKGEpe3ZhciBiPU8ucGVyZm9ybWFuY2V8fE8ud2Via2l0UGVyZm9ybWFuY2U7Yj1iJiZiLnRpbWluZztpZighYilyZXR1cm4hMTt2YXIgYz1iLm5hdmlnYXRpb25TdGFydDtpZigwPT1jKXJldHVybiExO2FbRWJdPWIubG9hZEV2ZW50U3RhcnQtYzthW0diXT1iLmRvbWFpbkxvb2t1cEVuZC1iLmRvbWFpbkxvb2t1cFN0YXJ0O1xuYVtKYl09Yi5jb25uZWN0RW5kLWIuY29ubmVjdFN0YXJ0O2FbSWJdPWIucmVzcG9uc2VTdGFydC1iLnJlcXVlc3RTdGFydDthW0ZiXT1iLnJlc3BvbnNlRW5kLWIucmVzcG9uc2VTdGFydDthW0hiXT1iLmZldGNoU3RhcnQtYzthW0tiXT1iLmRvbUludGVyYWN0aXZlLWM7YVtMYl09Yi5kb21Db250ZW50TG9hZGVkRXZlbnRTdGFydC1jO2FbVmVdPU4uTC1jO2FbV2VdPU4ueWEtYztPLmdvb2dsZV90YWdfbWFuYWdlciYmTy5nb29nbGVfdGFnX21hbmFnZXIuX2xpJiYoYj1PLmdvb2dsZV90YWdfbWFuYWdlci5fbGksYVtYZV09Yi5jc3QsYVtZZV09Yi5jYnQpO3JldHVybiEwfSxGYz1mdW5jdGlvbihhKXtpZihPLnRvcCE9TylyZXR1cm4hMTt2YXIgYj1PLmV4dGVybmFsLGM9YiYmYi5vbmxvYWRUO2ImJiFiLmlzVmFsaWRMb2FkVGltZSYmKGM9dm9pZCAwKTsyMTQ3NDgzNjQ4PGMmJihjPXZvaWQgMCk7MDxjJiZiLnNldFBhZ2VSZWFkeVRpbWUoKTtpZih2b2lkIDA9PWMpcmV0dXJuITE7XG5hW0ViXT1jO3JldHVybiEwfSxZPWZ1bmN0aW9uKGEsYil7dmFyIGM9YVtiXTtpZihpc05hTihjKXx8SW5maW5pdHk9PWN8fDA+YylhW2JdPXZvaWQgMH0sRmQ9ZnVuY3Rpb24oYSl7cmV0dXJuIGZ1bmN0aW9uKGIpe2lmKFwicGFnZXZpZXdcIj09Yi5nZXQoVmEpJiYhYS5JKXthLkk9ITA7dmFyIGM9YWEoYiksZD0wPEUoUChiLGtiKSxcImdjbGlkXCIpLmxlbmd0aCxlPTA8RShQKGIsa2IpLFwid2JyYWlkXCIpLmxlbmd0aDsoY3x8ZHx8ZSkmJmdjKGZ1bmN0aW9uKGcpe2MmJmEuc2VuZChcInRpbWluZ1wiLGcpOyhkfHxlKSYmYS5zZW5kKFwiYWR0aW1pbmdcIixnKX0pfX19O3ZhciBoYz0hMSxtYz1mdW5jdGlvbihhKXtpZihcImNvb2tpZVwiPT1QKGEsYWMpKXtpZihhLmdldChIZCl8fFAoYSx4ZCkhPVAoYSxRKSl7dmFyIGI9MUUzKlIoYSxaYik7bWEoYSxRLFUsYik7YS5kYXRhLnNldCh4ZCxQKGEsUSkpfShhLmdldChIZCl8fHVjKGEpIT1QKGEsSSkpJiZtYShhLEksbGEsODY0RTUpO2lmKGEuZ2V0KGplKSl7aWYoYj1QKGEsY2UpKXt2YXIgYz1NYXRoLm1pbihSKGEsaGUpLDFFMypSKGEsWmIpKTtjPTA9PT1jPzA6TWF0aC5taW4oYywxRTMqUihhLGZlKStjLShuZXcgRGF0ZSkuZ2V0VGltZSgpKTthLmRhdGEuc2V0KGhlLGMpO3ZhciBkPXt9LGU9UChhLGZlKSxnPVAoYSxpZSksY2E9a2MoUChhLFliKSksbD1sYyhQKGEsVykpLGs9UChhLE5hKSx3PVAoYSxCZSk7ZyYmXCJhdy5kc1wiIT1nP2QmJihkLnVhPSEwKTooYj1bXCIxXCIsZSxDYyhiKV0uam9pbihcIi5cIiksMDw9YyYmKGQmJihkLnRhPSEwKSx6YyhcIl9nYWNfXCIrQ2MoayksYixjYSxsLGssYyx3KSkpO2xlKGQpfX1lbHNlIEooNzUpO1xuYS5nZXQoamUpJiYoYj1QKGEsU2UpKSYmKGM9TWF0aC5taW4oUihhLGJmKSwxRTMqUihhLFpiKSksYz0wPT09Yz8wOk1hdGgubWluKGMsMUUzKlIoYSxUZSkrYy0obmV3IERhdGUpLmdldFRpbWUoKSksYS5kYXRhLnNldChiZixjKSxkPXt9LHc9UChhLFRlKSxjYT1rYyhQKGEsWWIpKSxsPWxjKFAoYSxXKSksaz1QKGEsTmEpLGE9UChhLEJlKSxiPVtcIjFcIix3LENjKGIpXS5qb2luKFwiLlwiKSwwPD1jJiYoZCYmKGQudGE9ITApLHpjKFwiX2dhY19nYl9cIitDYyhrKSxiLGNhLGwsayxjLGEpKSxlZihkKSl9fSxtYT1mdW5jdGlvbihhLGIsYyxkKXt2YXIgZT1uZChhLGIpO2lmKGUpe2M9UChhLGMpO3ZhciBnPWtjKFAoYSxZYikpLGNhPWxjKFAoYSxXKSksbD1QKGEsQmUpLGs9UChhLE5hKTtpZihcImF1dG9cIiE9Y2EpemMoYyxlLGcsY2EsayxkLGwpJiYoaGM9ITApO2Vsc2V7SigzMik7Zm9yKHZhciB3PWlkKCksQ2U9MDtDZTx3Lmxlbmd0aDtDZSsrKWlmKGNhPXdbQ2VdLGEuZGF0YS5zZXQoVyxcbmNhKSxlPW5kKGEsYiksemMoYyxlLGcsY2EsayxkLGwpKXtoYz0hMDtyZXR1cm59YS5kYXRhLnNldChXLFwiYXV0b1wiKX19fSx1Yz1mdW5jdGlvbihhKXt2YXIgYj1DYShQKGEsbGEpKTtyZXR1cm4gWGQoYSxiKX0sbmM9ZnVuY3Rpb24oYSl7aWYoXCJjb29raWVcIj09UChhLGFjKSYmIWhjJiYobWMoYSksIWhjKSl0aHJvd1wiYWJvcnRcIjt9LFljPWZ1bmN0aW9uKGEpe2lmKGEuZ2V0KFdjKSl7dmFyIGI9UChhLFcpLGM9UChhLCRiKXx8eGEoKSxkPVhjKFwiX191dG1hXCIsYyxiKTtkJiYoSigxOSksYS5zZXQoVGMsKG5ldyBEYXRlKS5nZXRUaW1lKCksITApLGEuc2V0KFJjLGQuUiksKGI9WGMoXCJfX3V0bXpcIixjLGIpKSYmZC5oYXNoPT1iLmhhc2gmJmEuc2V0KFNjLGIuUikpfX0sbmQ9ZnVuY3Rpb24oYSxiKXtiPUNjKFAoYSxiKSk7dmFyIGM9bGMoUChhLFcpKS5zcGxpdChcIi5cIikubGVuZ3RoO2E9amMoUChhLFliKSk7MTxhJiYoYys9XCItXCIrYSk7cmV0dXJuIGI/W1wiR0ExXCIsYyxiXS5qb2luKFwiLlwiKTpcblwiXCJ9LFhkPWZ1bmN0aW9uKGEsYil7cmV0dXJuIG5hKGIsUChhLFcpLFAoYSxZYikpfSxuYT1mdW5jdGlvbihhLGIsYyl7aWYoIWF8fDE+YS5sZW5ndGgpSigxMik7ZWxzZXtmb3IodmFyIGQ9W10sZT0wO2U8YS5sZW5ndGg7ZSsrKXt2YXIgZz1hW2VdO3ZhciBjYT1nLnNwbGl0KFwiLlwiKTt2YXIgbD1jYS5zaGlmdCgpOyhcIkdBMVwiPT1sfHxcIjFcIj09bCkmJjE8Y2EubGVuZ3RoPyhnPWNhLnNoaWZ0KCkuc3BsaXQoXCItXCIpLDE9PWcubGVuZ3RoJiYoZ1sxXT1cIjFcIiksZ1swXSo9MSxnWzFdKj0xLGNhPXtIOmcsczpjYS5qb2luKFwiLlwiKX0pOmNhPWtkLnRlc3QoZyk/e0g6WzAsMF0sczpnfTp2b2lkIDA7Y2EmJmQucHVzaChjYSl9aWYoMT09ZC5sZW5ndGgpcmV0dXJuIEooMTMpLGRbMF0ucztpZigwPT1kLmxlbmd0aClKKDEyKTtlbHNle0ooMTQpO2Q9R2MoZCxsYyhiKS5zcGxpdChcIi5cIikubGVuZ3RoLDApO2lmKDE9PWQubGVuZ3RoKXJldHVybiBkWzBdLnM7ZD1HYyhkLGpjKGMpLDEpOzE8ZC5sZW5ndGgmJlxuSig0MSk7cmV0dXJuIGRbMF0mJmRbMF0uc319fSxHYz1mdW5jdGlvbihhLGIsYyl7Zm9yKHZhciBkPVtdLGU9W10sZyxjYT0wO2NhPGEubGVuZ3RoO2NhKyspe3ZhciBsPWFbY2FdO2wuSFtjXT09Yj9kLnB1c2gobCk6dm9pZCAwPT1nfHxsLkhbY108Zz8oZT1bbF0sZz1sLkhbY10pOmwuSFtjXT09ZyYmZS5wdXNoKGwpfXJldHVybiAwPGQubGVuZ3RoP2Q6ZX0sbGM9ZnVuY3Rpb24oYSl7cmV0dXJuIDA9PWEuaW5kZXhPZihcIi5cIik/YS5zdWJzdHIoMSk6YX0saWQ9ZnVuY3Rpb24oKXt2YXIgYT1bXSxiPXhhKCkuc3BsaXQoXCIuXCIpO2lmKDQ9PWIubGVuZ3RoKXt2YXIgYz1iW2IubGVuZ3RoLTFdO2lmKHBhcnNlSW50KGMsMTApPT1jKXJldHVybltcIm5vbmVcIl19Zm9yKGM9Yi5sZW5ndGgtMjswPD1jO2MtLSlhLnB1c2goYi5zbGljZShjKS5qb2luKFwiLlwiKSk7Yj1NLmxvY2F0aW9uLmhvc3RuYW1lO2ViLnRlc3QoYil8fHZjLnRlc3QoYil8fGEucHVzaChcIm5vbmVcIik7cmV0dXJuIGF9LGtjPVxuZnVuY3Rpb24oYSl7aWYoIWEpcmV0dXJuXCIvXCI7MTxhLmxlbmd0aCYmYS5sYXN0SW5kZXhPZihcIi9cIik9PWEubGVuZ3RoLTEmJihhPWEuc3Vic3RyKDAsYS5sZW5ndGgtMSkpOzAhPWEuaW5kZXhPZihcIi9cIikmJihhPVwiL1wiK2EpO3JldHVybiBhfSxqYz1mdW5jdGlvbihhKXthPWtjKGEpO3JldHVyblwiL1wiPT1hPzE6YS5zcGxpdChcIi9cIikubGVuZ3RofSxsZT1mdW5jdGlvbihhKXthLnRhJiZKKDc3KTthLm5hJiZKKDc0KTthLnBhJiZKKDczKTthLnVhJiZKKDY5KX0sZWY9ZnVuY3Rpb24oYSl7YS50YSYmSig4NSk7YS5uYSYmSig4Nik7YS5wYSYmSig4Nyl9O2Z1bmN0aW9uIFhjKGEsYixjKXtcIm5vbmVcIj09YiYmKGI9XCJcIik7dmFyIGQ9W10sZT1DYShhKTthPVwiX191dG1hXCI9PWE/NjoyO2Zvcih2YXIgZz0wO2c8ZS5sZW5ndGg7ZysrKXt2YXIgY2E9KFwiXCIrZVtnXSkuc3BsaXQoXCIuXCIpO2NhLmxlbmd0aD49YSYmZC5wdXNoKHtoYXNoOmNhWzBdLFI6ZVtnXSxPOmNhfSl9aWYoMCE9ZC5sZW5ndGgpcmV0dXJuIDE9PWQubGVuZ3RoP2RbMF06WmMoYixkKXx8WmMoYyxkKXx8WmMobnVsbCxkKXx8ZFswXX1mdW5jdGlvbiBaYyhhLGIpe2lmKG51bGw9PWEpdmFyIGM9YT0xO2Vsc2UgYz1MYShhKSxhPUxhKEQoYSxcIi5cIik/YS5zdWJzdHJpbmcoMSk6XCIuXCIrYSk7Zm9yKHZhciBkPTA7ZDxiLmxlbmd0aDtkKyspaWYoYltkXS5oYXNoPT1jfHxiW2RdLmhhc2g9PWEpcmV0dXJuIGJbZF19O3ZhciBKYz1uZXcgUmVnRXhwKC9eaHR0cHM/OlxcL1xcLyhbXlxcLzpdKykvKSxEZT1PLmdvb2dsZV90YWdfZGF0YS5nbEJyaWRnZSxLYz1SZWdFeHAoXCIoLiopKFs/JiNdKSg/Ol9nYT1bXiYjXSopKD86Jj8pKC4qKVwiKSxvZD1SZWdFeHAoXCIoLiopKFs/JiNdKSg/Ol9nYWM9W14mI10qKSg/OiY/KSguKilcIik7ZnVuY3Rpb24gQmMoYSl7aWYoYS5nZXQoWmUpKXJldHVybiBKKDM1KSxEZS5nZW5lcmF0ZSgkZShhKSk7dmFyIGI9UChhLFEpLGM9UChhLEkpfHxcIlwiO2I9XCJfZ2E9Mi5cIitLKHBhKGMrYiwwKStcIi5cIitjK1wiLVwiK2IpOyhhPWFmKGEpKT8oSig0NCksYT1cIiZfZ2FjPTEuXCIrSyhbcGEoYS5xYSwwKSxhLnRpbWVzdGFtcCxhLnFhXS5qb2luKFwiLlwiKSkpOmE9XCJcIjtyZXR1cm4gYithfVxuZnVuY3Rpb24gSWMoYSxiKXt2YXIgYz1uZXcgRGF0ZSxkPU8ubmF2aWdhdG9yLGU9ZC5wbHVnaW5zfHxbXTthPVthLGQudXNlckFnZW50LGMuZ2V0VGltZXpvbmVPZmZzZXQoKSxjLmdldFllYXIoKSxjLmdldERhdGUoKSxjLmdldEhvdXJzKCksYy5nZXRNaW51dGVzKCkrYl07Zm9yKGI9MDtiPGUubGVuZ3RoOysrYilhLnB1c2goZVtiXS5kZXNjcmlwdGlvbik7cmV0dXJuIExhKGEuam9pbihcIi5cIikpfWZ1bmN0aW9uIHBhKGEsYil7dmFyIGM9bmV3IERhdGUsZD1PLm5hdmlnYXRvcixlPWMuZ2V0SG91cnMoKStNYXRoLmZsb29yKChjLmdldE1pbnV0ZXMoKStiKS82MCk7cmV0dXJuIExhKFthLGQudXNlckFnZW50LGQubGFuZ3VhZ2V8fFwiXCIsYy5nZXRUaW1lem9uZU9mZnNldCgpLGMuZ2V0WWVhcigpLGMuZ2V0RGF0ZSgpK01hdGguZmxvb3IoZS8yNCksKDI0K2UpJTI0LCg2MCtjLmdldE1pbnV0ZXMoKStiKSU2MF0uam9pbihcIi5cIikpfVxudmFyIERjPWZ1bmN0aW9uKGEpe0ooNDgpO3RoaXMudGFyZ2V0PWE7dGhpcy5UPSExfTtEYy5wcm90b3R5cGUuY2E9ZnVuY3Rpb24oYSxiKXtpZihhKXtpZih0aGlzLnRhcmdldC5nZXQoWmUpKXJldHVybiBEZS5kZWNvcmF0ZSgkZSh0aGlzLnRhcmdldCksYSxiKTtpZihhLnRhZ05hbWUpe2lmKFwiYVwiPT1hLnRhZ05hbWUudG9Mb3dlckNhc2UoKSl7YS5ocmVmJiYoYS5ocmVmPXFkKHRoaXMsYS5ocmVmLGIpKTtyZXR1cm59aWYoXCJmb3JtXCI9PWEudGFnTmFtZS50b0xvd2VyQ2FzZSgpKXJldHVybiByZCh0aGlzLGEpfWlmKFwic3RyaW5nXCI9PXR5cGVvZiBhKXJldHVybiBxZCh0aGlzLGEsYil9fTtcbnZhciBxZD1mdW5jdGlvbihhLGIsYyl7dmFyIGQ9S2MuZXhlYyhiKTtkJiYzPD1kLmxlbmd0aCYmKGI9ZFsxXSsoZFszXT9kWzJdK2RbM106XCJcIikpOyhkPW9kLmV4ZWMoYikpJiYzPD1kLmxlbmd0aCYmKGI9ZFsxXSsoZFszXT9kWzJdK2RbM106XCJcIikpO2E9YS50YXJnZXQuZ2V0KFwibGlua2VyUGFyYW1cIik7ZD1iLmluZGV4T2YoXCI/XCIpO3ZhciBlPWIuaW5kZXhPZihcIiNcIik7Yj1jP2IrKCgtMT09ZT9cIiNcIjpcIiZcIikrYSk6LTE9PWU/YisoKC0xPT09ZD9cIj9cIjpcIiZcIikrYSk6Yi5zdWJzdHJpbmcoMCxlKSsoLTE9PT1kfHxkPmU/XCI/XCI6XCImXCIpK2ErYi5zdWJzdHJpbmcoZSk7Yj1iLnJlcGxhY2UoLyYrX2dhPS8sXCImX2dhPVwiKTtyZXR1cm4gYj1iLnJlcGxhY2UoUmVnRXhwKFwiJitfZ2FjPVwiKSxcIiZfZ2FjPVwiKX0scmQ9ZnVuY3Rpb24oYSxiKXtpZihiJiZiLmFjdGlvbilpZihcImdldFwiPT1iLm1ldGhvZC50b0xvd2VyQ2FzZSgpKXthPWEudGFyZ2V0LmdldChcImxpbmtlclBhcmFtXCIpLnNwbGl0KFwiJlwiKTtcbmZvcih2YXIgYz0wO2M8YS5sZW5ndGg7YysrKXt2YXIgZD1hW2NdLnNwbGl0KFwiPVwiKSxlPWRbMV07ZD1kWzBdO2Zvcih2YXIgZz1iLmNoaWxkTm9kZXN8fFtdLGNhPSExLGw9MDtsPGcubGVuZ3RoO2wrKylpZihnW2xdLm5hbWU9PWQpe2dbbF0uc2V0QXR0cmlidXRlKFwidmFsdWVcIixlKTtjYT0hMDticmVha31jYXx8KGc9TS5jcmVhdGVFbGVtZW50KFwiaW5wdXRcIiksZy5zZXRBdHRyaWJ1dGUoXCJ0eXBlXCIsXCJoaWRkZW5cIiksZy5zZXRBdHRyaWJ1dGUoXCJuYW1lXCIsZCksZy5zZXRBdHRyaWJ1dGUoXCJ2YWx1ZVwiLGUpLGIuYXBwZW5kQ2hpbGQoZykpfX1lbHNlXCJwb3N0XCI9PWIubWV0aG9kLnRvTG93ZXJDYXNlKCkmJihiLmFjdGlvbj1xZChhLGIuYWN0aW9uKSl9O1xuRGMucHJvdG90eXBlLlM9ZnVuY3Rpb24oYSxiLGMpe2Z1bmN0aW9uIGQoZyl7dHJ5e2c9Z3x8Ty5ldmVudDthOnt2YXIgY2E9Zy50YXJnZXR8fGcuc3JjRWxlbWVudDtmb3IoZz0xMDA7Y2EmJjA8Zzspe2lmKGNhLmhyZWYmJmNhLm5vZGVOYW1lLm1hdGNoKC9eYSg/OnJlYSk/JC9pKSl7dmFyIGw9Y2E7YnJlYWsgYX1jYT1jYS5wYXJlbnROb2RlO2ctLX1sPXt9fShcImh0dHA6XCI9PWwucHJvdG9jb2x8fFwiaHR0cHM6XCI9PWwucHJvdG9jb2wpJiZzZChhLGwuaG9zdG5hbWV8fFwiXCIpJiZsLmhyZWYmJihsLmhyZWY9cWQoZSxsLmhyZWYsYikpfWNhdGNoKGspe0ooMjYpfX12YXIgZT10aGlzO3RoaXMudGFyZ2V0LmdldChaZSk/RGUuYXV0byhmdW5jdGlvbigpe3JldHVybiAkZShlLnRhcmdldCl9LGEsYj9cImZyYWdtZW50XCI6XCJcIixjKToodGhpcy5UfHwodGhpcy5UPSEwLEwoTSxcIm1vdXNlZG93blwiLGQsITEpLEwoTSxcImtleXVwXCIsZCwhMSkpLGMmJkwoTSxcInN1Ym1pdFwiLGZ1bmN0aW9uKGcpe2c9XG5nfHxPLmV2ZW50O2lmKChnPWcudGFyZ2V0fHxnLnNyY0VsZW1lbnQpJiZnLmFjdGlvbil7dmFyIGNhPWcuYWN0aW9uLm1hdGNoKEpjKTtjYSYmc2QoYSxjYVsxXSkmJnJkKGUsZyl9fSkpfTtEYy5wcm90b3R5cGUuJD1mdW5jdGlvbihhKXtpZihhKXt2YXIgYj10aGlzLGM9Yi50YXJnZXQuZ2V0KEYpO3ZvaWQgMCE9PWMmJkRlLnBhc3N0aHJvdWdoKGZ1bmN0aW9uKCl7aWYoYyhcImFuYWx5dGljc19zdG9yYWdlXCIpKXJldHVybnt9O3ZhciBkPXt9O3JldHVybiBkLl9nYT1iLnRhcmdldC5nZXQoUSksZC5fdXA9XCIxXCIsZH0sMSwhMCl9fTtmdW5jdGlvbiBzZChhLGIpe2lmKGI9PU0ubG9jYXRpb24uaG9zdG5hbWUpcmV0dXJuITE7Zm9yKHZhciBjPTA7YzxhLmxlbmd0aDtjKyspaWYoYVtjXWluc3RhbmNlb2YgUmVnRXhwKXtpZihhW2NdLnRlc3QoYikpcmV0dXJuITB9ZWxzZSBpZigwPD1iLmluZGV4T2YoYVtjXSkpcmV0dXJuITA7cmV0dXJuITF9XG5mdW5jdGlvbiBrZShhLGIpe3JldHVybiBiIT1JYyhhLDApJiZiIT1JYyhhLC0xKSYmYiE9SWMoYSwtMikmJmIhPXBhKGEsMCkmJmIhPXBhKGEsLTEpJiZiIT1wYShhLC0yKX1mdW5jdGlvbiAkZShhKXt2YXIgYj1hZihhKSxjPXt9O2MuX2dhPWEuZ2V0KFEpO2MuX2dpZD1hLmdldChJKXx8dm9pZCAwO2MuX2dhYz1iP1tiLnFhLGIudGltZXN0YW1wXS5qb2luKFwiLlwiKTp2b2lkIDA7Yj1hLmdldChBZSk7YT1FZChhKTtyZXR1cm4gYy5fZnBsYz1iJiZcIjBcIiE9PWI/YjphLGN9ZnVuY3Rpb24gYWYoYSl7ZnVuY3Rpb24gYihlKXtyZXR1cm4gdm9pZCAwPT1lfHxcIlwiPT09ZT8wOk51bWJlcihlKX12YXIgYz1hLmdldChjZSk7aWYoYyYmYS5nZXQoamUpKXt2YXIgZD1iKGEuZ2V0KGZlKSk7aWYoMUUzKmQrYihhLmdldChoZSkpPD0obmV3IERhdGUpLmdldFRpbWUoKSlKKDc2KTtlbHNlIHJldHVybnt0aW1lc3RhbXA6ZCxxYTpjfX19O3ZhciBwPS9eKEdUTXxPUFQpLVtBLVowLTldKyQvLHE9LztfZ2FleHA9W147XSovZyxyPS87KChfX3V0bWE9KXwoW147PV0rPUdBWD9cXGQrXFwuKSlbXjtdKi9nLEFhPS9eaHR0cHM/OlxcL1xcL1tcXHdcXC0uXStcXC5nb29nbGUuY29tKDpcXGQrKT9cXC9vcHRpbWl6ZVxcL29wdC1sYXVuY2hcXC5odG1sXFw/LiokLyxuZj0wLHdmPXt9LHQ9ZnVuY3Rpb24oYSl7ZnVuY3Rpb24gYihkLGUpe2UmJihjKz1cIiZcIitkK1wiPVwiK0soZSkpfXZhciBjPUdlKGEudHlwZSkrSyhhLmlkKTtcImRhdGFMYXllclwiIT1hLkImJmIoXCJsXCIsYS5CKTtiKFwiY3hcIixhLmNvbnRleHQpO2IoXCJ0XCIsYS50YXJnZXQpO2IoXCJjaWRcIixhLmNsaWVudElkKTtiKFwiY2lkdFwiLGEua2EpO2IoXCJnYWNcIixhLmxhKTtiKFwiYWlwXCIsYS5pYSk7YS5zYSYmYihcIl9zbGNcIixcIjFcIik7YS5zeW5jJiZiKFwibVwiLFwic3luY1wiKTtiKFwiY3ljbGVcIixhLkcpO2EucWEmJmIoXCJnY2xpZFwiLGEucWEpO0FhLnRlc3QoTS5yZWZlcnJlcikmJmIoXCJjYlwiLFN0cmluZyhoZCgpKSk7XG5yZXR1cm4gY30sSGU9ZnVuY3Rpb24oYSxiKXt2YXIgYz0obmV3IERhdGUpLmdldFRpbWUoKTtPW2EuQl09T1thLkJdfHxbXTt3ZlthLkJdfHwod2ZbYS5CXT0hMCxjPXtcImd0bS5zdGFydFwiOmN9LGEuc3luY3x8KGMuZXZlbnQ9XCJndG0uanNcIiksT1thLkJdLnB1c2goYykpOzI9PT1hLnR5cGUmJmZ1bmN0aW9uKGQsZSxnKXtPW2EuQl0ucHVzaChhcmd1bWVudHMpfShcImNvbmZpZ1wiLGEuaWQsYil9LEtlPWZ1bmN0aW9uKGEsYixjLGQpe2M9Y3x8e307dmFyIGU9Ty5nb29nbGVfdGFnX2RhdGEudGNCcmlkZ2U7aWYocC50ZXN0KGIpKXZhciBnPTE7ZWxzZXt2YXIgY2E9Yi5zcGxpdChcIi1cIik7MTxjYS5sZW5ndGgmJlwiR1RNXCIhPT1jYVswXSYmXCJVQVwiIT09Y2FbMF0mJihnPTIpfWlmKGcpe2NhPXtpZDpiLHR5cGU6ZyxCOmMuZGF0YUxheWVyfHxcImRhdGFMYXllclwiLEc6ITF9O3ZhciBsPXZvaWQgMDthLmdldChcIiZndG1cIik9PWImJihjYS5HPSEwKTtzd2l0Y2goZyl7Y2FzZSAxOmNhLmlhPSEhYS5nZXQoXCJhbm9ueW1pemVJcFwiKTtcbmNhLnN5bmM9ZDtiPVN0cmluZyhhLmdldChcIm5hbWVcIikpO1widDBcIiE9YiYmKGNhLnRhcmdldD1iKTtHKFN0cmluZyhhLmdldChcInRyYWNraW5nSWRcIikpKXx8KGNhLmNsaWVudElkPVN0cmluZyhhLmdldChRKSksY2Eua2E9TnVtYmVyKGEuZ2V0KG4pKSxiPWMucGFsaW5kcm9tZT9yOnEsYj0oYj1NLmNvb2tpZS5yZXBsYWNlKC9efCg7ICspL2csXCI7XCIpLm1hdGNoKGIpKT9iLnNvcnQoKS5qb2luKFwiXCIpLnN1YnN0cmluZygxKTp2b2lkIDAsY2EubGE9YixjYS5xYT1FKFAoYSxrYiksXCJnY2xpZFwiKSk7YnJlYWs7Y2FzZSAyOmlmKDIwPD1uZilyZXR1cm47bmYrKztjYS5jb250ZXh0PVwiY1wiO2w9e307bD0obC5pc19sZWdhY3lfbG9hZGVkPSEwLGwpO2NhLnNhPSEwO2UucmVnaXN0ZXJVYShhLmdldChcIm5hbWVcIiksYS5nZXQoXCJ0cmFja2luZ0lkXCIpKTtlLnNldFNpZGVsb2FkKGEuZ2V0KFwibmFtZVwiKSxiLGEuZ2V0KFwidHJhY2tpbmdJZFwiKSl9SGUoY2EsbCk7cmV0dXJuIHQoY2EpfX07dmFyIEpkPWZ1bmN0aW9uKGEsYil7Ynx8KGI9KGI9UChhLFYpKSYmXCJ0MFwiIT1iP1dkLnRlc3QoYik/XCJfZ2F0X1wiK0NjKFAoYSxOYSkpOlwiX2dhdF9cIitDYyhiKTpcIl9nYXRcIik7dGhpcy5ZPWJ9LFJkPWZ1bmN0aW9uKGEsYil7dmFyIGM9Yi5nZXQoV2IpO2Iuc2V0KFdiLGZ1bmN0aW9uKGUpe1BkKGEsZSxlZCk7UGQoYSxlLGlhKTt2YXIgZz1jKGUpO1FkKGEsZSk7cmV0dXJuIGd9KTt2YXIgZD1iLmdldChYYik7Yi5zZXQoWGIsZnVuY3Rpb24oZSl7dmFyIGc9ZChlKTtpZihzZShlKSl7Sig4MCk7dmFyIGNhPXtVOnJlKGUsMSksZ29vZ2xlOnJlKGUsMiksY291bnQ6MH07cGUoXCJodHRwczovL3N0YXRzLmcuZG91YmxlY2xpY2submV0L2ovY29sbGVjdFwiLGNhLlUsY2EpO2Uuc2V0KGVkLFwiXCIsITApfXJldHVybiBnfSl9LFBkPWZ1bmN0aW9uKGEsYixjKXshMT09PWIuZ2V0KFVkKXx8Yi5nZXQoYyl8fChcIjFcIj09Q2EoYS5ZKVswXT9iLnNldChjLFwiXCIsITApOmIuc2V0KGMsXCJcIitoZCgpLCEwKSl9LFxuUWQ9ZnVuY3Rpb24oYSxiKXtzZShiKSYmemMoYS5ZLFwiMVwiLFAoYixZYiksUChiLFcpLFAoYixOYSksNkU0LFAoYixCZSkpfSxzZT1mdW5jdGlvbihhKXtyZXR1cm4hIWEuZ2V0KGVkKSYmITEhPT1hLmdldChVZCl9LE5lPWZ1bmN0aW9uKGEpe3JldHVybiFIW1AoYSxOYSldJiZyZihhKX0scmU9ZnVuY3Rpb24oYSxiKXt2YXIgYz1uZXcgZWUsZD1mdW5jdGlvbihnKXskYShnKS5GJiZjLnNldCgkYShnKS5GLGEuZ2V0KGcpKX07ZChoYik7ZChpYik7ZChOYSk7ZChRKTtkKGVkKTsxPT1iJiYoZChBZCksZChpYSksZChJKSk7ITE9PT1hLmdldCh4ZSkmJmMuc2V0KFwibnBhXCIsXCIxXCIpO2Muc2V0KCRhKGxkKS5GLFRkKGEpKTt2YXIgZT1cIlwiO2MubWFwKGZ1bmN0aW9uKGcsY2Epe2UrPUsoZykrXCI9XCI7ZSs9SyhcIlwiK2NhKStcIiZcIn0pO2UrPVwiej1cIitoZCgpOzE9PWI/ZT1cInQ9ZGMmYWlwPTEmX3I9MyZcIitlOjI9PWImJihlPVwidD1zciZhaXA9MSZfcj00JnNsZl9yZD0xJlwiK2UpO3JldHVybiBlfSxcbk1lPWZ1bmN0aW9uKGEpe2lmKE5lKGEpKXt2YXIgYj1QKGEsTmEpO0hbYl09ITA7cmV0dXJuIGZ1bmN0aW9uKGMpe2lmKGMmJiFIW2NdKXt2YXIgZD1LZShhLGMpO2lmKGQpe3ZhciBlPTA8ZC5pbmRleE9mKFwiJl9zbGM9MVwiKTtIW2NdPSEwO3NmW2JdfHwoc2ZbYl09W10pO2UmJihzZltiXS5wdXNoKGMpLHRmKGMsdmZbYl0pKTtJZChkKX19fX19LFdkPS9eZ3RtXFxkKyQvO3ZhciBmZD1mdW5jdGlvbihhLGIpe2E9YS5tb2RlbDtpZighYS5nZXQoXCJkY0xvYWRlZFwiKSl7dmFyIGM9bmV3ICRjKERkKGEpKTtjLnNldCgyOSk7YS5zZXQoR2QsYy5DKTtiPWJ8fHt9O3ZhciBkO2JbVV0mJihkPUNjKGJbVV0pKTtiPW5ldyBKZChhLGQpO1JkKGIsYSk7YS5zZXQoXCJkY0xvYWRlZFwiLCEwKX19O3ZhciBTZD1mdW5jdGlvbihhKXt2YXIgYj1cImNvb2tpZVwiIT1hLmdldChhYyk/ITE6ITA7aWYoYil7Yj1uZXcgSmQoYSk7dmFyIGM9YS5nZXQoXCJkY0xvYWRlZFwiKTtjfHwoUGQoYixhLGVkKSxQZChiLGEsaWEpLFFkKGIsYSkpO2I9IWMmJnNlKGEpO2M9TmUoYSk7YiYmYS5zZXQoTWQsMSwhMCk7YyYmYS5zZXQoT2QsMSwhMCk7aWYoYnx8YylhLnNldChhZCxcImRcIiwhMCksSig3OSksYS5zZXQocWUse1U6cmUoYSwxKSxnb29nbGU6cmUoYSwyKSxWOk1lKGEpLGNvdW50OjB9LCEwKX19O3ZhciBMYz1mdW5jdGlvbigpe3ZhciBhPU8uZ2FHbG9iYWw9Ty5nYUdsb2JhbHx8e307cmV0dXJuIGEuaGlkPWEuaGlkfHxoZCgpfTt2YXIgd2I9L14oVUF8WVR8TU98R1ApLShcXGQrKS0oXFxkKykkLyxwYz1mdW5jdGlvbihhKXtmdW5jdGlvbiBiKGUsZyl7ZC5tb2RlbC5kYXRhLnNldChlLGcpO2EuaGFzT3duUHJvcGVydHkoZSkmJmhmKGUsZyl9ZnVuY3Rpb24gYyhlLGcpe2QubW9kZWwuZGF0YS5zZXQoZSxnKTtkLmZpbHRlcnMuYWRkKGUpfXZhciBkPXRoaXM7dGhpcy5tb2RlbD1uZXcgWWE7dGhpcy5maWx0ZXJzPW5ldyBIYTtiKFYsYVtWXSk7YihOYSxzYShhW05hXSkpO2IoVSxhW1VdKTtiKFcsYVtXXXx8eGEoKSk7YihZYixhW1liXSk7YihaYixhW1piXSk7YihIZCxhW0hkXSk7YihCZSxhW0JlXSk7YigkYixhWyRiXSk7YihXYyxhW1djXSk7YihiYyxhW2JjXSk7YihjYyxhW2NjXSk7YihLYSxhW0thXSk7YihkYyxhW2RjXSk7YihlYyxhW2VjXSk7YihhYyxhW2FjXSk7YihBZCxhW0FkXSk7YihuLGFbbl0pO2IoS2QsYVtLZF0pO2IoamUsYVtqZV0pO2IoWmUsYVtaZV0pO2Iob2UsYVtvZV0pO2IoSmUsYVtKZV0pO1xuYihGLGFbRl0pO2IoaGIsMSk7YihpYixcImoxMDFcIik7YyhSZSxQZSk7YyhRYixNYSk7YyhvYSx1YSk7YyhkZCxjZCk7YyhSYixPYSk7YyhtZCx2Yik7YyhTYixuYyk7YyhVYyxZYyk7YyhUYixKYSk7YyhWYixUYSk7YyhWYyxIYyk7Yyh6ZCx5ZCk7YyhMZCxTZCk7Yyh6ZSxGZSk7YyhXYixQYSk7YyhYYixTYSk7YyhDZCxGZCh0aGlzKSk7cGQodGhpcy5tb2RlbCk7dGQodGhpcy5tb2RlbCxhW1FdKTt0aGlzLm1vZGVsLnNldChqYixMYygpKX07cGMucHJvdG90eXBlLmdldD1mdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5tb2RlbC5nZXQoYSl9O3BjLnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24oYSxiKXt0aGlzLm1vZGVsLnNldChhLGIpO21mKGEsYil9O1xucGMucHJvdG90eXBlLnNlbmQ9ZnVuY3Rpb24oYSl7aWYoISgxPmFyZ3VtZW50cy5sZW5ndGgpKXtpZihcInN0cmluZ1wiPT09dHlwZW9mIGFyZ3VtZW50c1swXSl7dmFyIGI9YXJndW1lbnRzWzBdO3ZhciBjPVtdLnNsaWNlLmNhbGwoYXJndW1lbnRzLDEpfWVsc2UgYj1hcmd1bWVudHNbMF0mJmFyZ3VtZW50c1swXVtWYV0sYz1hcmd1bWVudHM7YiYmKGM9emEobWVbYl18fFtdLGMpLGNbVmFdPWIsbWYoYyksdGhpcy5tb2RlbC5zZXQoYyx2b2lkIDAsITApLHRoaXMuZmlsdGVycy5EKHRoaXMubW9kZWwpLHRoaXMubW9kZWwuZGF0YS5tPXt9KX19O3BjLnByb3RvdHlwZS5tYT1mdW5jdGlvbihhLGIpe3ZhciBjPXRoaXM7dShhLGMsYil8fCh2KGEsZnVuY3Rpb24oKXt1KGEsYyxiKX0pLHkoU3RyaW5nKGMuZ2V0KFYpKSxhLHZvaWQgMCxiLCEwKSl9O1xuZnVuY3Rpb24gdGQoYSxiKXt2YXIgYz1QKGEsVSk7YS5kYXRhLnNldChsYSxcIl9nYVwiPT1jP1wiX2dpZFwiOmMrXCJfZ2lkXCIpO2lmKFwiY29va2llXCI9PVAoYSxhYykpe2hjPSExO2M9Q2EoUChhLFUpKTtjPVhkKGEsYyk7aWYoIWMpe2M9UChhLFcpO3ZhciBkPVAoYSwkYil8fHhhKCk7Yz1YYyhcIl9fdXRtYVwiLGQsYyk7dm9pZCAwIT1jPyhKKDEwKSxjPWMuT1sxXStcIi5cIitjLk9bMl0pOmM9dm9pZCAwfWMmJihoYz0hMCk7aWYoZD1jJiYhYS5nZXQoSGQpKWlmKGQ9Yy5zcGxpdChcIi5cIiksMiE9ZC5sZW5ndGgpZD0hMTtlbHNlIGlmKGQ9TnVtYmVyKGRbMV0pKXt2YXIgZT1SKGEsWmIpO2Q9ZCtlPChuZXcgRGF0ZSkuZ2V0VGltZSgpLzFFM31lbHNlIGQ9ITE7ZCYmKGM9dm9pZCAwKTtjJiYoYS5kYXRhLnNldCh4ZCxjKSxhLmRhdGEuc2V0KFEsYyksKGM9dWMoYSkpJiZhLmRhdGEuc2V0KEksYykpO2EuZ2V0KGplKSYmKGM9YS5nZXQoY2UpLGQ9YS5nZXQoaWUpLCFjfHxkJiZcImF3LmRzXCIhPWQpJiZcbihjPXt9LGQ9KE0/ZGYoYyk6e30pW1AoYSxOYSldLGxlKGMpLGQmJjAhPWQubGVuZ3RoJiYoYz1kWzBdLGEuZGF0YS5zZXQoZmUsYy50aW1lc3RhbXAvMUUzKSxhLmRhdGEuc2V0KGNlLGMucWEpKSk7YS5nZXQoamUpJiYoYz1hLmdldChTZSksZD17fSxlPShNP2RmKGQsXCJfZ2FjX2diXCIsITApOnt9KVtQKGEsTmEpXSxlZihkKSxlJiYwIT1lLmxlbmd0aCYmKGQ9ZVswXSxlPWQucWEsYyYmYyE9PWV8fChkLmxhYmVscyYmZC5sYWJlbHMubGVuZ3RoJiYoZSs9XCIuXCIrZC5sYWJlbHMuam9pbihcIi5cIikpLGEuZGF0YS5zZXQoVGUsZC50aW1lc3RhbXAvMUUzKSxhLmRhdGEuc2V0KFNlLGUpKSkpfWlmKGEuZ2V0KEhkKSl7Yz1iZShcIl9nYVwiLCEhYS5nZXQoY2MpKTt2YXIgZz1iZShcIl9nbFwiLCEhYS5nZXQoY2MpKTtkPURlLmdldChhLmdldChjYykpO2U9ZC5fZ2E7ZyYmMDxnLmluZGV4T2YoXCJfZ2EqXCIpJiYhZSYmSigzMCk7aWYoYnx8IWEuZ2V0KEplKSlnPSExO2Vsc2UgaWYoZz1hLmdldChGKSxcbnZvaWQgMD09PWd8fGcoXCJhbmFseXRpY3Nfc3RvcmFnZVwiKSlnPSExO2Vsc2V7Sig4NCk7YS5kYXRhLnNldChMZSwxKTtpZihnPWQuX3VwKWlmKGc9SmMuZXhlYyhNLnJlZmVycmVyKSl7Zz1nWzFdO3ZhciBjYT1NLmxvY2F0aW9uLmhvc3RuYW1lO2c9Y2E9PT1nfHwwPD1jYS5pbmRleE9mKFwiLlwiK2cpfHwwPD1nLmluZGV4T2YoXCIuXCIrY2EpPyEwOiExfWVsc2UgZz0hMTtnPWc/ITA6ITF9Y2E9ZC5nY2xpZDt2YXIgbD1kLl9nYWM7aWYoY3x8ZXx8Y2F8fGwpaWYoYyYmZSYmSigzNiksYS5nZXQoYmMpfHx5ZShhLmdldChLZCkpfHxnKXtpZihlJiYoSigzOCksYS5kYXRhLnNldChRLGUpLGQuX2dpZCYmKEooNTEpLGEuZGF0YS5zZXQoSSxkLl9naWQpKSksY2E/KEooODIpLGEuZGF0YS5zZXQoY2UsY2EpLGQuZ2Nsc3JjJiZhLmRhdGEuc2V0KGllLGQuZ2Nsc3JjKSk6bCYmKGU9bC5zcGxpdChcIi5cIikpJiYyPT09ZS5sZW5ndGgmJihKKDM3KSxhLmRhdGEuc2V0KGNlLGVbMF0pLGEuZGF0YS5zZXQoZmUsXG5lWzFdKSksKGQ9ZC5fZnBsYykmJlAoYSxvZSkmJihKKDgzKSxhLmRhdGEuc2V0KEFlLGQpKSxjKWI6aWYoZD1jLmluZGV4T2YoXCIuXCIpLC0xPT1kKUooMjIpO2Vsc2V7ZT1jLnN1YnN0cmluZygwLGQpO2c9Yy5zdWJzdHJpbmcoZCsxKTtkPWcuaW5kZXhPZihcIi5cIik7Yz1nLnN1YnN0cmluZygwLGQpO2c9Zy5zdWJzdHJpbmcoZCsxKTtpZihcIjFcIj09ZSl7aWYoZD1nLGtlKGQsYykpe0ooMjMpO2JyZWFrIGJ9fWVsc2UgaWYoXCIyXCI9PWUpe2Q9Zy5pbmRleE9mKFwiLVwiKTtlPVwiXCI7MDxkPyhlPWcuc3Vic3RyaW5nKDAsZCksZD1nLnN1YnN0cmluZyhkKzEpKTpkPWcuc3Vic3RyaW5nKDEpO2lmKGtlKGUrZCxjKSl7Sig1Myk7YnJlYWsgYn1lJiYoSigyKSxhLmRhdGEuc2V0KEksZSkpfWVsc2V7SigyMik7YnJlYWsgYn1KKDExKTthLmRhdGEuc2V0KFEsZCk7aWYoYz1iZShcIl9nYWNcIiwhIWEuZ2V0KGNjKSkpYz1jLnNwbGl0KFwiLlwiKSxcIjFcIiE9Y1swXXx8NCE9Yy5sZW5ndGg/Sig3Mik6a2UoY1szXSxcbmNbMV0pP0ooNzEpOihhLmRhdGEuc2V0KGNlLGNbM10pLGEuZGF0YS5zZXQoZmUsY1syXSksSig3MCkpfX1lbHNlIEooMjEpfWImJihKKDkpLGEuZGF0YS5zZXQoUSxLKGIpKSk7YS5nZXQoUSl8fChiPShiPU8uZ2FHbG9iYWwpJiZiLmZyb21fY29va2llJiZcImNvb2tpZVwiIT09UChhLGFjKT92b2lkIDA6KGI9YiYmYi52aWQpJiYtMSE9PWIuc2VhcmNoKGpkKT9iOnZvaWQgMCxiPyhKKDE3KSxhLmRhdGEuc2V0KFEsYikpOihKKDgpLGEuZGF0YS5zZXQoUSxyYSgpKSkpO2EuZ2V0KEkpfHwoSigzKSxhLmRhdGEuc2V0KEkscmEoKSkpO21jKGEpO2I9Ty5nYUdsb2JhbD1PLmdhR2xvYmFsfHx7fTtjPVAoYSxRKTthPWM9PT1QKGEseGQpO2lmKHZvaWQgMD09Yi52aWR8fGEmJiFiLmZyb21fY29va2llKWIudmlkPWMsYi5mcm9tX2Nvb2tpZT1hfVxuZnVuY3Rpb24gcGQoYSl7dmFyIGI9Ty5uYXZpZ2F0b3IsYz1PLnNjcmVlbixkPU0ubG9jYXRpb247YS5zZXQobGIsb2YoISFhLmdldChlYyksISFhLmdldChLZCkpKTtpZihkKXt2YXIgZT1kLnBhdGhuYW1lfHxcIlwiO1wiL1wiIT1lLmNoYXJBdCgwKSYmKEooMzEpLGU9XCIvXCIrZSk7YS5zZXQoa2IsZC5wcm90b2NvbCtcIi8vXCIrZC5ob3N0bmFtZStlK2Quc2VhcmNoKX1jJiZhLnNldChxYixjLndpZHRoK1wieFwiK2MuaGVpZ2h0KTtjJiZhLnNldChwYixjLmNvbG9yRGVwdGgrXCItYml0XCIpO2M9TS5kb2N1bWVudEVsZW1lbnQ7dmFyIGc9KGU9TS5ib2R5KSYmZS5jbGllbnRXaWR0aCYmZS5jbGllbnRIZWlnaHQsY2E9W107YyYmYy5jbGllbnRXaWR0aCYmYy5jbGllbnRIZWlnaHQmJihcIkNTUzFDb21wYXRcIj09PU0uY29tcGF0TW9kZXx8IWcpP2NhPVtjLmNsaWVudFdpZHRoLGMuY2xpZW50SGVpZ2h0XTpnJiYoY2E9W2UuY2xpZW50V2lkdGgsZS5jbGllbnRIZWlnaHRdKTtjPTA+PWNhWzBdfHwwPj1cbmNhWzFdP1wiXCI6Y2Euam9pbihcInhcIik7YS5zZXQocmIsYyk7Yz1hLnNldDt2YXIgbDtpZigoZT0oZT1PLm5hdmlnYXRvcik/ZS5wbHVnaW5zOm51bGwpJiZlLmxlbmd0aClmb3IoZz0wO2c8ZS5sZW5ndGgmJiFsO2crKyljYT1lW2ddLC0xPGNhLm5hbWUuaW5kZXhPZihcIlNob2Nrd2F2ZSBGbGFzaFwiKSYmKGw9Y2EuZGVzY3JpcHRpb24pO2lmKCFsKXRyeXt2YXIgaz1uZXcgQWN0aXZlWE9iamVjdChcIlNob2Nrd2F2ZUZsYXNoLlNob2Nrd2F2ZUZsYXNoLjdcIik7bD1rLkdldFZhcmlhYmxlKFwiJHZlcnNpb25cIil9Y2F0Y2godyl7fWlmKCFsKXRyeXtrPW5ldyBBY3RpdmVYT2JqZWN0KFwiU2hvY2t3YXZlRmxhc2guU2hvY2t3YXZlRmxhc2guNlwiKSxsPVwiV0lOIDYsMCwyMSwwXCIsay5BbGxvd1NjcmlwdEFjY2Vzcz1cImFsd2F5c1wiLGw9ay5HZXRWYXJpYWJsZShcIiR2ZXJzaW9uXCIpfWNhdGNoKHcpe31pZighbCl0cnl7az1uZXcgQWN0aXZlWE9iamVjdChcIlNob2Nrd2F2ZUZsYXNoLlNob2Nrd2F2ZUZsYXNoXCIpLFxubD1rLkdldFZhcmlhYmxlKFwiJHZlcnNpb25cIil9Y2F0Y2godyl7fWwmJihrPWwubWF0Y2goL1tcXGRdKy9nKSkmJjM8PWsubGVuZ3RoJiYobD1rWzBdK1wiLlwiK2tbMV0rXCIgclwiK2tbMl0pO2MuY2FsbChhLHRiLGx8fHZvaWQgMCk7YS5zZXQob2IsTS5jaGFyYWN0ZXJTZXR8fE0uY2hhcnNldCk7YS5zZXQoc2IsYiYmXCJmdW5jdGlvblwiPT09dHlwZW9mIGIuamF2YUVuYWJsZWQmJmIuamF2YUVuYWJsZWQoKXx8ITEpO2Euc2V0KG5iLChiJiYoYi5sYW5ndWFnZXx8Yi5icm93c2VyTGFuZ3VhZ2UpfHxcIlwiKS50b0xvd2VyQ2FzZSgpKTthLmRhdGEuc2V0KGNlLGJlKFwiZ2NsaWRcIiwhMCkpO2EuZGF0YS5zZXQoaWUsYmUoXCJnY2xzcmNcIiwhMCkpO2EuZGF0YS5zZXQoZmUsTWF0aC5yb3VuZCgobmV3IERhdGUpLmdldFRpbWUoKS8xRTMpKTthLmdldChjZSl8fChhLmRhdGEuc2V0KFNlLGJlKFwid2JyYWlkXCIsITApKSxhLmRhdGEuc2V0KFRlLE1hdGgucm91bmQoKG5ldyBEYXRlKS5nZXRUaW1lKCkvMUUzKSkpO1xuaWYoZCYmYS5nZXQoY2MpJiYoYj1NLmxvY2F0aW9uLmhhc2gpKXtiPWIuc3BsaXQoL1s/JiNdKy8pO2Q9W107Zm9yKGw9MDtsPGIubGVuZ3RoOysrbCkoRChiW2xdLFwidXRtX2lkXCIpfHxEKGJbbF0sXCJ1dG1fY2FtcGFpZ25cIil8fEQoYltsXSxcInV0bV9zb3VyY2VcIil8fEQoYltsXSxcInV0bV9tZWRpdW1cIil8fEQoYltsXSxcInV0bV90ZXJtXCIpfHxEKGJbbF0sXCJ1dG1fY29udGVudFwiKXx8RChiW2xdLFwiZ2NsaWRcIil8fEQoYltsXSxcImRjbGlkXCIpfHxEKGJbbF0sXCJnY2xzcmNcIil8fEQoYltsXSxcIndicmFpZFwiKSkmJmQucHVzaChiW2xdKTswPGQubGVuZ3RoJiYoYj1cIiNcIitkLmpvaW4oXCImXCIpLGEuc2V0KGtiLGEuZ2V0KGtiKStiKSl9fXZhciBtZT17cGFnZXZpZXc6W21iXSxldmVudDpbdWIseGIseWIsemJdLHNvY2lhbDpbQmIsQ2IsRGJdLHRpbWluZzpbTWIsTmIsUGIsT2JdfTt2YXIgcmM9ZnVuY3Rpb24oYSl7aWYoXCJwcmVyZW5kZXJcIj09TS52aXNpYmlsaXR5U3RhdGUpcmV0dXJuITE7YSgpO3JldHVybiEwfSx6PWZ1bmN0aW9uKGEpe2lmKCFyYyhhKSl7SigxNik7dmFyIGI9ITEsYz1mdW5jdGlvbigpe2lmKCFiJiZyYyhhKSl7Yj0hMDt2YXIgZD1NO2QucmVtb3ZlRXZlbnRMaXN0ZW5lcj9kLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJ2aXNpYmlsaXR5Y2hhbmdlXCIsYywhMSk6ZC5kZXRhY2hFdmVudCYmZC5kZXRhY2hFdmVudChcIm9udmlzaWJpbGl0eWNoYW5nZVwiLGMpfX07TChNLFwidmlzaWJpbGl0eWNoYW5nZVwiLGMpfX07dmFyIHRlPS9eKD86KFxcdyspXFwuKT8oPzooXFx3Kyk6KT8oXFx3KykkLyxzYz1mdW5jdGlvbihhKXtpZihlYShhWzBdKSl0aGlzLnU9YVswXTtlbHNle3ZhciBiPXRlLmV4ZWMoYVswXSk7bnVsbCE9YiYmND09Yi5sZW5ndGgmJih0aGlzLmRhPWJbMV18fFwidDBcIix0aGlzLks9YlsyXXx8XCJcIix0aGlzLm1ldGhvZE5hbWU9YlszXSx0aGlzLmFhPVtdLnNsaWNlLmNhbGwoYSwxKSx0aGlzLkt8fCh0aGlzLkE9XCJjcmVhdGVcIj09dGhpcy5tZXRob2ROYW1lLHRoaXMuaT1cInJlcXVpcmVcIj09dGhpcy5tZXRob2ROYW1lLHRoaXMuZz1cInByb3ZpZGVcIj09dGhpcy5tZXRob2ROYW1lLHRoaXMuYmE9XCJyZW1vdmVcIj09dGhpcy5tZXRob2ROYW1lKSx0aGlzLmkmJigzPD10aGlzLmFhLmxlbmd0aD8odGhpcy5YPXRoaXMuYWFbMV0sdGhpcy5XPXRoaXMuYWFbMl0pOnRoaXMuYWFbMV0mJihxYSh0aGlzLmFhWzFdKT90aGlzLlg9dGhpcy5hYVsxXTp0aGlzLlc9dGhpcy5hYVsxXSkpKTtiPWFbMV07YT1hWzJdO1xuaWYoIXRoaXMubWV0aG9kTmFtZSl0aHJvd1wiYWJvcnRcIjtpZih0aGlzLmkmJighcWEoYil8fFwiXCI9PWIpKXRocm93XCJhYm9ydFwiO2lmKHRoaXMuZyYmKCFxYShiKXx8XCJcIj09Ynx8IWVhKGEpKSl0aHJvd1wiYWJvcnRcIjtpZih1ZCh0aGlzLmRhKXx8dWQodGhpcy5LKSl0aHJvd1wiYWJvcnRcIjtpZih0aGlzLmcmJlwidDBcIiE9dGhpcy5kYSl0aHJvd1wiYWJvcnRcIjt9fTtmdW5jdGlvbiB1ZChhKXtyZXR1cm4gMDw9YS5pbmRleE9mKFwiLlwiKXx8MDw9YS5pbmRleE9mKFwiOlwiKX07dmFyIFlkLFpkLCRkLEE7WWQ9bmV3IGVlOyRkPW5ldyBlZTtBPW5ldyBlZTtaZD17ZWM6NDUsZWNvbW1lcmNlOjQ2LGxpbmtpZDo0N307XG52YXIgdT1mdW5jdGlvbihhLGIsYyl7Yj09Tnx8Yi5nZXQoVik7dmFyIGQ9WWQuZ2V0KGEpO2lmKCFlYShkKSlyZXR1cm4hMTtiLnBsdWdpbnNfPWIucGx1Z2luc198fG5ldyBlZTtpZihiLnBsdWdpbnNfLmdldChhKSlyZXR1cm4hMDtiLnBsdWdpbnNfLnNldChhLG5ldyBkKGIsY3x8e30pKTtyZXR1cm4hMH0seT1mdW5jdGlvbihhLGIsYyxkLGUpe2lmKCFlYShZZC5nZXQoYikpJiYhJGQuZ2V0KGIpKXtaZC5oYXNPd25Qcm9wZXJ0eShiKSYmSihaZFtiXSk7dmFyIGc9dm9pZCAwO2lmKHAudGVzdChiKSl7Sig1Mik7YT1OLmooYSk7aWYoIWEpcmV0dXJuITA7Yz1LZShhLm1vZGVsLGIsZCxlKTtnPWZ1bmN0aW9uKCl7Wi5EKFtcInByb3ZpZGVcIixiLGZ1bmN0aW9uKCl7fV0pO3ZhciBsPU9bZCYmZC5kYXRhTGF5ZXJ8fFwiZGF0YUxheWVyXCJdO2wmJmwuaGlkZSYmZWEobC5oaWRlLmVuZCkmJmwuaGlkZVtiXSYmKGwuaGlkZS5lbmQoKSxsLmhpZGUuZW5kPXZvaWQgMCl9fSFjJiZaZC5oYXNPd25Qcm9wZXJ0eShiKT9cbihKKDM5KSxjPWIrXCIuanNcIik6Sig0Myk7aWYoYyl7dmFyIGNhO2QmJihjYT1kW29lXSk7cWEoY2EpfHwoY2E9dm9pZCAwKTthPWFlKGNmKGMsY2EpKTshY2F8fG5lKGEucHJvdG9jb2wpJiZCKGEpfHwoYT1hZShjZihjKSkpO25lKGEucHJvdG9jb2wpJiZCKGEpJiYoSWQoYS51cmwsdm9pZCAwLGUsdm9pZCAwLGcpLCRkLnNldChiLCEwKSl9fX0sdj1mdW5jdGlvbihhLGIpe3ZhciBjPUEuZ2V0KGEpfHxbXTtjLnB1c2goYik7QS5zZXQoYSxjKX0sQz1mdW5jdGlvbihhLGIpe1lkLnNldChhLGIpO2I9QS5nZXQoYSl8fFtdO2Zvcih2YXIgYz0wO2M8Yi5sZW5ndGg7YysrKWJbY10oKTtBLnNldChhLFtdKX0sQj1mdW5jdGlvbihhKXt2YXIgYj1hZShNLmxvY2F0aW9uLmhyZWYpO2lmKEQoYS51cmwsR2UoMSkpfHxEKGEudXJsLEdlKDIpKSlyZXR1cm4hMDtpZihhLnF1ZXJ5fHwwPD1hLnVybC5pbmRleE9mKFwiP1wiKXx8MDw9YS5wYXRoLmluZGV4T2YoXCI6Ly9cIikpcmV0dXJuITE7aWYoYS5ob3N0PT1cbmIuaG9zdCYmYS5wb3J0PT1iLnBvcnR8fGpmJiYoYj1NLmNyZWF0ZUVsZW1lbnQoXCJhXCIpLGIuaHJlZj1qZixiPWtmKGIpLGEuaG9zdD09PWJbMF0mJmEucG9ydD09PWJbMV0pKXJldHVybiEwO2I9XCJodHRwOlwiPT1hLnByb3RvY29sPzgwOjQ0MztyZXR1cm5cInd3dy5nb29nbGUtYW5hbHl0aWNzLmNvbVwiPT1hLmhvc3QmJihhLnBvcnR8fGIpPT1iJiZEKGEucGF0aCxcIi9wbHVnaW5zL1wiKT8hMDohMX0sbmU9ZnVuY3Rpb24oYSl7dmFyIGI9TS5sb2NhdGlvbi5wcm90b2NvbDtyZXR1cm5cImh0dHBzOlwiPT1hfHxhPT1iPyEwOlwiaHR0cDpcIiE9YT8hMTpcImh0dHA6XCI9PWJ9LGtmPWZ1bmN0aW9uKGEpe3ZhciBiPWEuaG9zdG5hbWV8fFwiXCIsYz0wPD1iLmluZGV4T2YoXCJdXCIpO2I9Yi5zcGxpdChjP1wiXVwiOlwiOlwiKVswXS50b0xvd2VyQ2FzZSgpO2MmJihiKz1cIl1cIik7Yz0oYS5wcm90b2NvbHx8XCJcIikudG9Mb3dlckNhc2UoKTtjPTEqYS5wb3J0fHwoXCJodHRwOlwiPT1jPzgwOlwiaHR0cHM6XCI9PWM/NDQzOlxuXCJcIik7YT1hLnBhdGhuYW1lfHxcIlwiO0QoYSxcIi9cIil8fChhPVwiL1wiK2EpO3JldHVybltiLFwiXCIrYyxhXX0sYWU9ZnVuY3Rpb24oYSl7dmFyIGI9TS5jcmVhdGVFbGVtZW50KFwiYVwiKTtiLmhyZWY9TS5sb2NhdGlvbi5ocmVmO3ZhciBjPShiLnByb3RvY29sfHxcIlwiKS50b0xvd2VyQ2FzZSgpLGQ9a2YoYiksZT1iLnNlYXJjaHx8XCJcIixnPWMrXCIvL1wiK2RbMF0rKGRbMV0/XCI6XCIrZFsxXTpcIlwiKTtEKGEsXCIvL1wiKT9hPWMrYTpEKGEsXCIvXCIpP2E9ZythOiFhfHxEKGEsXCI/XCIpP2E9ZytkWzJdKyhhfHxlKTowPmEuc3BsaXQoXCIvXCIpWzBdLmluZGV4T2YoXCI6XCIpJiYoYT1nK2RbMl0uc3Vic3RyaW5nKDAsZFsyXS5sYXN0SW5kZXhPZihcIi9cIikpK1wiL1wiK2EpO2IuaHJlZj1hO2M9a2YoYik7cmV0dXJue3Byb3RvY29sOihiLnByb3RvY29sfHxcIlwiKS50b0xvd2VyQ2FzZSgpLGhvc3Q6Y1swXSxwb3J0OmNbMV0scGF0aDpjWzJdLHF1ZXJ5OmIuc2VhcmNofHxcIlwiLHVybDphfHxcIlwifX0sY2Y9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gYSYmXG4wPD1hLmluZGV4T2YoXCIvXCIpP2E6KGJ8fGJkKCExKSkrXCIvcGx1Z2lucy91YS9cIithfTt2YXIgWj17Z2E6ZnVuY3Rpb24oKXtaLmZhPVtdfX07Wi5nYSgpO1ouRD1mdW5jdGlvbihhKXt2YXIgYj1aLkouYXBwbHkoWixhcmd1bWVudHMpO2I9Wi5mYS5jb25jYXQoYik7Zm9yKFouZmE9W107MDxiLmxlbmd0aCYmIVoudihiWzBdKSYmIShiLnNoaWZ0KCksMDxaLmZhLmxlbmd0aCk7KTtaLmZhPVouZmEuY29uY2F0KGIpfTtaLnJhPWZ1bmN0aW9uKGEpe04ucSYmKDMwMD09PU4ucS5sZW5ndGgmJihOLnEuc2hpZnQoKSxOLnFkKyspLE4ucS5wdXNoKGEpKX07Wi5KPWZ1bmN0aW9uKGEpe2Zvcih2YXIgYj1bXSxjPTA7Yzxhcmd1bWVudHMubGVuZ3RoO2MrKyl7dmFyIGQ9dm9pZCAwO3RyeXtkPW5ldyBzYyhhcmd1bWVudHNbY10pLGQuZz9DKGQuYWFbMF0sZC5hYVsxXSk6KGQuaSYmKGQuaGE9eShkLmRhLGQuYWFbMF0sZC5YLGQuVykpLGIucHVzaChkKSksWi5yYShhcmd1bWVudHNbY10pfWNhdGNoKGUpe319cmV0dXJuIGJ9O1xuWi52PWZ1bmN0aW9uKGEpe3RyeXtpZihhLnUpYS51LmNhbGwoTyxOLmooXCJ0MFwiKSk7ZWxzZXt2YXIgYj1hLmRhPT1nYj9OOk4uaihhLmRhKTtpZihhLkEpe2lmKFwidDBcIj09YS5kYSYmKGI9Ti5jcmVhdGUuYXBwbHkoTixhLmFhKSxudWxsPT09YikpcmV0dXJuITB9ZWxzZSBpZihhLmJhKU4ucmVtb3ZlKGEuZGEpO2Vsc2UgaWYoYilpZihhLmkpe2lmKGEuaGEmJihhLmhhPXkoYS5kYSxhLmFhWzBdLGEuWCxhLlcpKSwhdShhLmFhWzBdLGIsYS5XKSlyZXR1cm4hMH1lbHNlIGlmKGEuSyl7dmFyIGM9YS5tZXRob2ROYW1lLGQ9YS5hYSxlPWIucGx1Z2luc18uZ2V0KGEuSyk7ZVtjXS5hcHBseShlLGQpfWVsc2UgYlthLm1ldGhvZE5hbWVdLmFwcGx5KGIsYS5hYSl9fWNhdGNoKGcpe319O3ZhciBIPXt9LHNmPXt9LHZmPXt9O2Z1bmN0aW9uIHRmKGEsYil7dmFyIGM9Ty5nb29nbGVfdGFnX2RhdGE7Y3x8KGM9Ty5nb29nbGVfdGFnX2RhdGE9e30pO3ZhciBkPWMuc2xxO2R8fChkPWMuc2xxPXt9KTtjPWRbYV07Y3x8KGM9e30sYz1kW2FdPShjLnE9Yj9iLnNsaWNlKCk6W10sYykpO3JldHVybiBjfWZ1bmN0aW9uIHVmKGEpe3JldHVybnthbGxvd0FkRmVhdHVyZXM6YS5nZXQoVWQpLGFsbG93QWRQZXJzb25hbGl6YXRpb25TaWduYWxzOmEuZ2V0KHhlKSxjb29raWVEb21haW46UChhLFcpLGNvb2tpZUV4cGlyZXM6YS5nZXQoWmIpLGNvb2tpZUZsYWdzOlAoYSxCZSksY29va2llTmFtZTpQKGEsVSksY29va2llUGF0aDpQKGEsWWIpLGNvb2tpZVVwZGF0ZTphLmdldChIZCksaGl0UGF5bG9hZDpQKGEsUmEpfX1cbmZ1bmN0aW9uIHJmKGEpe3JldHVybiB2b2lkIDA9PT1hLmdldChJZSkmJnZvaWQgMD09PWEuZ2V0KGZhKSYmdm9pZCAwPT09YS5nZXQoZ2QpJiZ2b2lkIDA9PT1hLmdldChvZSl9O3ZhciBOPWZ1bmN0aW9uKGEpe0ooMSk7Wi5ELmFwcGx5KFosW2FyZ3VtZW50c10pfTtOLmg9e307Ti5QPVtdO04uTD0wO04ueWE9MDtOLmFuc3dlcj00Mjt2YXIgd2U9W05hLFcsVl07Ti5jcmVhdGU9ZnVuY3Rpb24oYSl7dmFyIGI9emEod2UsW10uc2xpY2UuY2FsbChhcmd1bWVudHMpKTtiW1ZdfHwoYltWXT1cInQwXCIpO3ZhciBjPVwiXCIrYltWXTtpZihOLmhbY10pcmV0dXJuIE4uaFtjXTtpZihkYShiKSlyZXR1cm4gbnVsbDtiPW5ldyBwYyhiKTtOLmhbY109YjtOLlAucHVzaChiKTtjPXFjKCkudHJhY2tlcl9jcmVhdGVkO2lmKGVhKGMpKXRyeXtjKGIpfWNhdGNoKGQpe31yZXR1cm4gYn07Ti5yZW1vdmU9ZnVuY3Rpb24oYSl7Zm9yKHZhciBiPTA7YjxOLlAubGVuZ3RoO2IrKylpZihOLlBbYl0uZ2V0KFYpPT1hKXtOLlAuc3BsaWNlKGIsMSk7Ti5oW2FdPW51bGw7YnJlYWt9fTtOLmo9ZnVuY3Rpb24oYSl7cmV0dXJuIE4uaFthXX07Ti5nZXRBbGw9ZnVuY3Rpb24oKXtyZXR1cm4gTi5QLnNsaWNlKDApfTtcbk4uTj1mdW5jdGlvbigpe1wiZ2FcIiE9Z2ImJkooNDkpO3ZhciBhPU9bZ2JdO2lmKCFhfHw0MiE9YS5hbnN3ZXIpe04uTD1hJiZhLmw7Ti55YT0xKm5ldyBEYXRlO04ubG9hZGVkPSEwO3ZhciBiPWEmJmEucSxjPWthKGIpO2E9W107Yz9hPWIuc2xpY2UoMCk6Sig1MCk7Ti5xPWM/YjpbXTtOLnEuc3BsaWNlKDApO04ucWQ9MDtiPU9bZ2JdPU47WChcImNyZWF0ZVwiLGIsYi5jcmVhdGUpO1goXCJyZW1vdmVcIixiLGIucmVtb3ZlKTtYKFwiZ2V0QnlOYW1lXCIsYixiLmosNSk7WChcImdldEFsbFwiLGIsYi5nZXRBbGwsNik7Yj1wYy5wcm90b3R5cGU7WChcImdldFwiLGIsYi5nZXQsNyk7WChcInNldFwiLGIsYi5zZXQsNCk7WChcInNlbmRcIixiLGIuc2VuZCk7WChcInJlcXVpcmVTeW5jXCIsYixiLm1hKTtiPVlhLnByb3RvdHlwZTtYKFwiZ2V0XCIsYixiLmdldCk7WChcInNldFwiLGIsYi5zZXQpO2lmKFwiaHR0cHM6XCIhPU0ubG9jYXRpb24ucHJvdG9jb2wmJiFCYSl7YTp7Yj1NLmdldEVsZW1lbnRzQnlUYWdOYW1lKFwic2NyaXB0XCIpO1xuZm9yKGM9MDtjPGIubGVuZ3RoJiYxMDA+YztjKyspe3ZhciBkPWJbY10uc3JjO2lmKGQmJjA9PWQuaW5kZXhPZihiZCghMCkrXCIvYW5hbHl0aWNzXCIpKXtiPSEwO2JyZWFrIGF9fWI9ITF9YiYmKEJhPSEwKX0oTy5nYXBsdWdpbnM9Ty5nYXBsdWdpbnN8fHt9KS5MaW5rZXI9RGM7Yj1EYy5wcm90b3R5cGU7QyhcImxpbmtlclwiLERjKTtYKFwiZGVjb3JhdGVcIixiLGIuY2EsMjApO1goXCJhdXRvTGlua1wiLGIsYi5TLDI1KTtYKFwicGFzc3Rocm91Z2hcIixiLGIuJCwyNSk7QyhcImRpc3BsYXlmZWF0dXJlc1wiLGZkKTtDKFwiYWRmZWF0dXJlc1wiLGZkKTtaLkQuYXBwbHkoTixhKX19O3ZhciB4Zj1OLk4seWY9T1tnYl07eWYmJnlmLnI/eGYoKTp6KHhmKTt6KGZ1bmN0aW9uKCl7Wi5EKFtcInByb3ZpZGVcIixcInJlbmRlclwiLHVhXSl9KTt9KSh3aW5kb3cpO1xuIn0sICJoZWFkZXJzU2l6ZSI6IDAsICJib2R5U2l6ZSI6IDIxMjk4LCAicmVkaXJlY3RVUkwiOiAiIiwgIl90cmFuc2ZlclNpemUiOiAyMTI5OH0sICJjYWNoZSI6IHt9LCAidGltaW5ncyI6IHsiZG5zIjogNDkuOTcsICJjb25uZWN0IjogMjIuNjA3LCAic3NsIjogMTcuODUxLCAic2VuZCI6IDAsICJ3YWl0IjogNS45NjIsICJyZWNlaXZlIjogNC44MzV9LCAicGFnZXJlZiI6ICJwYWdlQDhjOTMyZjgzMzdkOWFiYjRiOWFiOTg4OWRlYzUxYjk5IiwgInNlcnZlcklQQWRkcmVzcyI6ICJbMmEwMDoxNDUwOjQwMDE6ODMxOjoyMDBlXSIsICJfc2VydmVyUG9ydCI6IDQ0MywgIl9zZWN1cml0eURldGFpbHMiOiB7InByb3RvY29sIjogIlRMUyAxLjMiLCAic3ViamVjdE5hbWUiOiAiKi5nb29nbGUtYW5hbHl0aWNzLmNvbSIsICJpc3N1ZXIiOiAiV1IyIiwgInZhbGlkRnJvbSI6IDE3MjM0NDQ0MjQsICJ2YWxpZFRvIjogMTczMDcwMjAyM319LCB7InN0YXJ0ZWREYXRlVGltZSI6ICIyMDI0LTA5LTA1VDExOjA3OjIxLjA4NloiLCAidGltZSI6IDE4Ni41NzQsICJyZXF1ZXN0IjogeyJtZXRob2QiOiAiR0VUIiwgInVybCI6ICJodHRwczovL3d3dy5nb29nbGV0YWdtYW5hZ2VyLmNvbS9ndG0uanM/aWQ9R1RNLU42QlZLUDkiLCAiaHR0cFZlcnNpb24iOiAiSFRUUC8yLjAiLCAiY29va2llcyI6IFtdLCAiaGVhZGVycyI6IFt7Im5hbWUiOiAiOmF1dGhvcml0eSIsICJ2YWx1ZSI6ICJ3d3cuZ29vZ2xldGFnbWFuYWdlci5jb20ifSwgeyJuYW1lIjogIjptZXRob2QiLCAidmFsdWUiOiAiR0VUIn0sIHsibmFtZSI6ICI6cGF0aCIsICJ2YWx1ZSI6ICIvZ3RtLmpzP2lkPUdUTS1ONkJWS1A5In0sIHsibmFtZSI6ICI6c2NoZW1lIiwgInZhbHVlIjogImh0dHBzIn0sIHsibmFtZSI6ICJhY2NlcHQiLCAidmFsdWUiOiAiKi8qIn0sIHsibmFtZSI6ICJhY2NlcHQtZW5jb2RpbmciLCAidmFsdWUiOiAiZ3ppcCwgZGVmbGF0ZSwgYnIsIHpzdGQifSwgeyJuYW1lIjogImFjY2VwdC1sYW5ndWFnZSIsICJ2YWx1ZSI6ICJlbi1VUyJ9LCB7Im5hbWUiOiAicmVmZXJlciIsICJ2YWx1ZSI6ICJodHRwczovL3BvcnRhbC5zdXBwbHljaGFpbmNhbmFkYS5jb20vIn0sIHsibmFtZSI6ICJzZWMtY2gtdWEiLCAidmFsdWUiOiAiXCJOb3Q7QT1CcmFuZFwiO3Y9XCIyNFwiLCBcIkNocm9taXVtXCI7dj1cIjEyOFwiIn0sIHsibmFtZSI6ICJzZWMtY2gtdWEtbW9iaWxlIiwgInZhbHVlIjogIj8wIn0sIHsibmFtZSI6ICJzZWMtY2gtdWEtcGxhdGZvcm0iLCAidmFsdWUiOiAiXCJXaW5kb3dzXCIifSwgeyJuYW1lIjogInNlYy1mZXRjaC1kZXN0IiwgInZhbHVlIjogInNjcmlwdCJ9LCB7Im5hbWUiOiAic2VjLWZldGNoLW1vZGUiLCAidmFsdWUiOiAibm8tY29ycyJ9LCB7Im5hbWUiOiAic2VjLWZldGNoLXNpdGUiLCAidmFsdWUiOiAiY3Jvc3Mtc2l0ZSJ9LCB7Im5hbWUiOiAidXNlci1hZ2VudCIsICJ2YWx1ZSI6ICJNb3ppbGxhLzUuMCAoV2luZG93cyBOVCAxMC4wOyBXaW42NDsgeDY0KSBBcHBsZVdlYktpdC81MzcuMzYgKEtIVE1MLCBsaWtlIEdlY2tvKSBDaHJvbWUvMTI4LjAuNjYxMy4xOCBTYWZhcmkvNTM3LjM2In1dLCAicXVlcnlTdHJpbmciOiBbeyJuYW1lIjogImlkIiwgInZhbHVlIjogIkdUTS1ONkJWS1A5In1dLCAiaGVhZGVyc1NpemUiOiA1NjAsICJib2R5U2l6ZSI6IDB9LCAicmVzcG9uc2UiOiB7InN0YXR1cyI6IDIwMCwgInN0YXR1c1RleHQiOiAiIiwgImh0dHBWZXJzaW9uIjogIkhUVFAvMi4wIiwgImNvb2tpZXMiOiBbXSwgImhlYWRlcnMiOiBbeyJuYW1lIjogImFjY2Vzcy1jb250cm9sLWFsbG93LWNyZWRlbnRpYWxzIiwgInZhbHVlIjogInRydWUifSwgeyJuYW1lIjogImFjY2Vzcy1jb250cm9sLWFsbG93LWhlYWRlcnMiLCAidmFsdWUiOiAiQ2FjaGUtQ29udHJvbCJ9LCB7Im5hbWUiOiAiYWNjZXNzLWNvbnRyb2wtYWxsb3ctb3JpZ2luIiwgInZhbHVlIjogIioifSwgeyJuYW1lIjogImFsdC1zdmMiLCAidmFsdWUiOiAiaDM9XCI6NDQzXCI7IG1hPTI1OTIwMDAsaDMtMjk9XCI6NDQzXCI7IG1hPTI1OTIwMDAifSwgeyJuYW1lIjogImNhY2hlLWNvbnRyb2wiLCAidmFsdWUiOiAicHJpdmF0ZSwgbWF4LWFnZT05MDAifSwgeyJuYW1lIjogImNvbnRlbnQtZW5jb2RpbmciLCAidmFsdWUiOiAiYnIifSwgeyJuYW1lIjogImNvbnRlbnQtbGVuZ3RoIiwgInZhbHVlIjogIjc0ODIzIn0sIHsibmFtZSI6ICJjb250ZW50LXR5cGUiLCAidmFsdWUiOiAiYXBwbGljYXRpb24vamF2YXNjcmlwdDsgY2hhcnNldD1VVEYtOCJ9LCB7Im5hbWUiOiAiY3Jvc3Mtb3JpZ2luLXJlc291cmNlLXBvbGljeSIsICJ2YWx1ZSI6ICJjcm9zcy1vcmlnaW4ifSwgeyJuYW1lIjogImRhdGUiLCAidmFsdWUiOiAiVGh1LCAwNSBTZXAgMjAyNCAxMTowNzoyMSBHTVQifSwgeyJuYW1lIjogImV4cGlyZXMiLCAidmFsdWUiOiAiVGh1LCAwNSBTZXAgMjAyNCAxMTowNzoyMSBHTVQifSwgeyJuYW1lIjogImxhc3QtbW9kaWZpZWQiLCAidmFsdWUiOiAiVGh1LCAwNSBTZXAgMjAyNCAwOTowMDowMCBHTVQifSwgeyJuYW1lIjogInNlcnZlciIsICJ2YWx1ZSI6ICJHb29nbGUgVGFnIE1hbmFnZXIifSwgeyJuYW1lIjogInN0cmljdC10cmFuc3BvcnQtc2VjdXJpdHkiLCAidmFsdWUiOiAibWF4LWFnZT0zMTUzNjAwMDsgaW5jbHVkZVN1YkRvbWFpbnMifSwgeyJuYW1lIjogInZhcnkiLCAidmFsdWUiOiAiQWNjZXB0LUVuY29kaW5nIn0sIHsibmFtZSI6ICJ4LXhzcy1wcm90ZWN0aW9uIiwgInZhbHVlIjogIjAifV0sICJjb250ZW50IjogeyJzaXplIjogMjA3MjQ0LCAibWltZVR5cGUiOiAiYXBwbGljYXRpb24vamF2YXNjcmlwdDsgY2hhcnNldD1VVEYtOCIsICJjb21wcmVzc2lvbiI6IDEzMjAxMywgInRleHQiOiAiXG4vLyBDb3B5cmlnaHQgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuIFxuKGZ1bmN0aW9uKCl7XG5cbnZhciBkYXRhID0ge1xuXCJyZXNvdXJjZVwiOiB7XG4gIFwidmVyc2lvblwiOlwiMVwiLFxuICBcbiAgXCJtYWNyb3NcIjpbe1wiZnVuY3Rpb25cIjpcIl9fZVwifSx7XCJmdW5jdGlvblwiOlwiX19jXCIsXCJ2dHBfdmFsdWVcIjpcIlVBLTcyOTI3OTAxLTFcIn0se1wiZnVuY3Rpb25cIjpcIl9fdVwiLFwidnRwX2NvbXBvbmVudFwiOlwiVVJMXCJ9LHtcImZ1bmN0aW9uXCI6XCJfX3VcIixcInZ0cF9jb21wb25lbnRcIjpcIkhPU1RcIn0se1wiZnVuY3Rpb25cIjpcIl9fdVwiLFwidnRwX2NvbXBvbmVudFwiOlwiUEFUSFwifSx7XCJmdW5jdGlvblwiOlwiX19mXCIsXCJ2dHBfY29tcG9uZW50XCI6XCJVUkxcIn0se1wiZnVuY3Rpb25cIjpcIl9fZVwifV0sXG4gIFwidGFnc1wiOlt7XCJmdW5jdGlvblwiOlwiX191YVwiLFwib25jZV9wZXJfZXZlbnRcIjp0cnVlLFwidnRwX292ZXJyaWRlR2FTZXR0aW5nc1wiOnRydWUsXCJ2dHBfZG91YmxlQ2xpY2tcIjp0cnVlLFwidnRwX3NldFRyYWNrZXJOYW1lXCI6ZmFsc2UsXCJ2dHBfdXNlRGVidWdWZXJzaW9uXCI6ZmFsc2UsXCJ2dHBfZmllbGRzVG9TZXRcIjpbXCJsaXN0XCIsW1wibWFwXCIsXCJmaWVsZE5hbWVcIixcImNvb2tpZURvbWFpblwiLFwidmFsdWVcIixcImF1dG9cIl1dLFwidnRwX3VzZUhhc2hBdXRvTGlua1wiOmZhbHNlLFwidnRwX3RyYWNrVHlwZVwiOlwiVFJBQ0tfUEFHRVZJRVdcIixcInZ0cF9kZWNvcmF0ZUZvcm1zQXV0b0xpbmtcIjpmYWxzZSxcInZ0cF9lbmFibGVMaW5rSWRcIjpmYWxzZSxcInZ0cF9lbmFibGVFY29tbWVyY2VcIjpmYWxzZSxcInZ0cF90cmFja2luZ0lkXCI6W1wibWFjcm9cIiwxXSxcInZ0cF9lbmFibGVVYVJsc2FcIjpmYWxzZSxcInZ0cF9lbmFibGVVc2VJbnRlcm5hbFZlcnNpb25cIjpmYWxzZSxcInZ0cF9lbmFibGVGaXJlYmFzZUNhbXBhaWduRGF0YVwiOnRydWUsXCJ0YWdfaWRcIjoxfV0sXG4gIFwicHJlZGljYXRlc1wiOlt7XCJmdW5jdGlvblwiOlwiX2VxXCIsXCJhcmcwXCI6W1wibWFjcm9cIiwwXSxcImFyZzFcIjpcImd0bS5qc1wifV0sXG4gIFwicnVsZXNcIjpbW1tcImlmXCIsMF0sW1wiYWRkXCIsMF1dXVxufSxcblwicnVudGltZVwiOlsgWzUwLFwiX19jXCIsWzQ2LFwiYVwiXSxbMzYsWzE3LFsxNSxcImFcIl0sXCJ2YWx1ZVwiXV1dXG4gLFs1MCxcIl9fZVwiLFs0NixcImFcIl0sWzM2LFsxMyxbNDEsXCIkMFwiXSxbMyxcIiQwXCIsW1wicmVxdWlyZVwiLFwiaW50ZXJuYWwuZ2V0RXZlbnREYXRhXCJdXSxbXCIkMFwiLFwiZXZlbnRcIl1dXV1cbiBcbl1cbixcImVudGl0aWVzXCI6e1xuXCJfX2NcIjp7XCIyXCI6dHJ1ZSxcIjRcIjp0cnVlfVxuLFxuXCJfX2VcIjp7XCIyXCI6dHJ1ZSxcIjRcIjp0cnVlfVxuXG5cbn1cbixcImJsb2JcIjp7XCIxXCI6XCIxXCJ9XG4sXCJwZXJtaXNzaW9uc1wiOntcblwiX19jXCI6e31cbixcblwiX19lXCI6e1wicmVhZF9ldmVudF9kYXRhXCI6e1wiZXZlbnREYXRhQWNjZXNzXCI6XCJzcGVjaWZpY1wiLFwia2V5UGF0dGVybnNcIjpbXCJldmVudFwiXX19XG5cblxufVxuXG5cblxuLFwic2VjdXJpdHlfZ3JvdXBzXCI6e1xuXCJnb29nbGVcIjpbXG5cIl9fY1wiXG4sXG5cIl9fZVwiXG5cbl1cblxuXG59XG5cblxuXG59O1xuXG5cblxuXG52YXIgYmEsY2E9ZnVuY3Rpb24oYSl7dmFyIGI9MDtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gYjxhLmxlbmd0aD97ZG9uZTohMSx2YWx1ZTphW2IrK119Ontkb25lOiEwfX19LGRhPXR5cGVvZiBPYmplY3QuZGVmaW5lUHJvcGVydGllcz09XCJmdW5jdGlvblwiP09iamVjdC5kZWZpbmVQcm9wZXJ0eTpmdW5jdGlvbihhLGIsYyl7aWYoYT09QXJyYXkucHJvdG90eXBlfHxhPT1PYmplY3QucHJvdG90eXBlKXJldHVybiBhO2FbYl09Yy52YWx1ZTtyZXR1cm4gYX0sZmE9ZnVuY3Rpb24oYSl7Zm9yKHZhciBiPVtcIm9iamVjdFwiPT10eXBlb2YgZ2xvYmFsVGhpcyYmZ2xvYmFsVGhpcyxhLFwib2JqZWN0XCI9PXR5cGVvZiB3aW5kb3cmJndpbmRvdyxcIm9iamVjdFwiPT10eXBlb2Ygc2VsZiYmc2VsZixcIm9iamVjdFwiPT10eXBlb2YgZ2xvYmFsJiZnbG9iYWxdLGM9MDtjPGIubGVuZ3RoOysrYyl7dmFyIGQ9YltjXTtpZihkJiZkLk1hdGg9PU1hdGgpcmV0dXJuIGR9dGhyb3cgRXJyb3IoXCJDYW5ub3QgZmluZCBnbG9iYWwgb2JqZWN0XCIpO1xufSxoYT1mYSh0aGlzKSxpYT1mdW5jdGlvbihhLGIpe2lmKGIpYTp7Zm9yKHZhciBjPWhhLGQ9YS5zcGxpdChcIi5cIiksZT0wO2U8ZC5sZW5ndGgtMTtlKyspe3ZhciBmPWRbZV07aWYoIShmIGluIGMpKWJyZWFrIGE7Yz1jW2ZdfXZhciBnPWRbZC5sZW5ndGgtMV0saz1jW2ddLG09YihrKTttIT1rJiZtIT1udWxsJiZkYShjLGcse2NvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCx2YWx1ZTptfSl9fTtcbmlhKFwiU3ltYm9sXCIsZnVuY3Rpb24oYSl7aWYoYSlyZXR1cm4gYTt2YXIgYj1mdW5jdGlvbihmLGcpe3RoaXMuaj1mO2RhKHRoaXMsXCJkZXNjcmlwdGlvblwiLHtjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITAsdmFsdWU6Z30pfTtiLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmp9O3ZhciBjPVwianNjb21wX3N5bWJvbF9cIisoTWF0aC5yYW5kb20oKSoxRTk+Pj4wKStcIl9cIixkPTAsZT1mdW5jdGlvbihmKXtpZih0aGlzIGluc3RhbmNlb2YgZSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3ltYm9sIGlzIG5vdCBhIGNvbnN0cnVjdG9yXCIpO3JldHVybiBuZXcgYihjKyhmfHxcIlwiKStcIl9cIitkKyssZil9O3JldHVybiBlfSk7XG52YXIga2E9ZnVuY3Rpb24oYSl7cmV0dXJuIGphKGEsYSl9LGphPWZ1bmN0aW9uKGEsYil7YS5yYXc9YjtPYmplY3QuZnJlZXplJiYoT2JqZWN0LmZyZWV6ZShhKSxPYmplY3QuZnJlZXplKGIpKTtyZXR1cm4gYX0sbmE9ZnVuY3Rpb24oYSl7dmFyIGI9dHlwZW9mIFN5bWJvbCE9XCJ1bmRlZmluZWRcIiYmU3ltYm9sLml0ZXJhdG9yJiZhW1N5bWJvbC5pdGVyYXRvcl07aWYoYilyZXR1cm4gYi5jYWxsKGEpO2lmKHR5cGVvZiBhLmxlbmd0aD09XCJudW1iZXJcIilyZXR1cm57bmV4dDpjYShhKX07dGhyb3cgRXJyb3IoU3RyaW5nKGEpK1wiIGlzIG5vdCBhbiBpdGVyYWJsZSBvciBBcnJheUxpa2VcIik7fSxvYT1mdW5jdGlvbihhKXtmb3IodmFyIGIsYz1bXTshKGI9YS5uZXh0KCkpLmRvbmU7KWMucHVzaChiLnZhbHVlKTtyZXR1cm4gY30scGE9ZnVuY3Rpb24oYSl7cmV0dXJuIGEgaW5zdGFuY2VvZiBBcnJheT9hOm9hKG5hKGEpKX0scWE9dHlwZW9mIE9iamVjdC5hc3NpZ249PVwiZnVuY3Rpb25cIj9cbk9iamVjdC5hc3NpZ246ZnVuY3Rpb24oYSxiKXtmb3IodmFyIGM9MTtjPGFyZ3VtZW50cy5sZW5ndGg7YysrKXt2YXIgZD1hcmd1bWVudHNbY107aWYoZClmb3IodmFyIGUgaW4gZClPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZCxlKSYmKGFbZV09ZFtlXSl9cmV0dXJuIGF9O2lhKFwiT2JqZWN0LmFzc2lnblwiLGZ1bmN0aW9uKGEpe3JldHVybiBhfHxxYX0pO3ZhciByYT10eXBlb2YgT2JqZWN0LmNyZWF0ZT09XCJmdW5jdGlvblwiP09iamVjdC5jcmVhdGU6ZnVuY3Rpb24oYSl7dmFyIGI9ZnVuY3Rpb24oKXt9O2IucHJvdG90eXBlPWE7cmV0dXJuIG5ldyBifSxzYTtcbmlmKHR5cGVvZiBPYmplY3Quc2V0UHJvdG90eXBlT2Y9PVwiZnVuY3Rpb25cIilzYT1PYmplY3Quc2V0UHJvdG90eXBlT2Y7ZWxzZXt2YXIgdGE7YTp7dmFyIHVhPXthOiEwfSx2YT17fTt0cnl7dmEuX19wcm90b19fPXVhO3RhPXZhLmE7YnJlYWsgYX1jYXRjaChhKXt9dGE9ITF9c2E9dGE/ZnVuY3Rpb24oYSxiKXthLl9fcHJvdG9fXz1iO2lmKGEuX19wcm90b19fIT09Yil0aHJvdyBuZXcgVHlwZUVycm9yKGErXCIgaXMgbm90IGV4dGVuc2libGVcIik7cmV0dXJuIGF9Om51bGx9XG52YXIgeGE9c2EseWE9ZnVuY3Rpb24oYSxiKXthLnByb3RvdHlwZT1yYShiLnByb3RvdHlwZSk7YS5wcm90b3R5cGUuY29uc3RydWN0b3I9YTtpZih4YSl4YShhLGIpO2Vsc2UgZm9yKHZhciBjIGluIGIpaWYoYyE9XCJwcm90b3R5cGVcIilpZihPYmplY3QuZGVmaW5lUHJvcGVydGllcyl7dmFyIGQ9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihiLGMpO2QmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShhLGMsZCl9ZWxzZSBhW2NdPWJbY107YS5Qbj1iLnByb3RvdHlwZX0semE9ZnVuY3Rpb24oKXtmb3IodmFyIGE9TnVtYmVyKHRoaXMpLGI9W10sYz1hO2M8YXJndW1lbnRzLmxlbmd0aDtjKyspYltjLWFdPWFyZ3VtZW50c1tjXTtyZXR1cm4gYn07LypcblxuIENvcHlyaWdodCBUaGUgQ2xvc3VyZSBMaWJyYXJ5IEF1dGhvcnMuXG4gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcbiovXG52YXIgQWE9dGhpc3x8c2VsZixCYT1mdW5jdGlvbihhKXtyZXR1cm4gYX07dmFyIENhPWZ1bmN0aW9uKGEsYil7dGhpcy50eXBlPWE7dGhpcy5kYXRhPWJ9O3ZhciBEYT1mdW5jdGlvbigpe3RoaXMuaj17fTt0aGlzLkg9e319O2JhPURhLnByb3RvdHlwZTtiYS5nZXQ9ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMualtcImR1c3QuXCIrYV19O2JhLnNldD1mdW5jdGlvbihhLGIpe2E9XCJkdXN0LlwiK2E7dGhpcy5ILmhhc093blByb3BlcnR5KGEpfHwodGhpcy5qW2FdPWIpfTtiYS5OaD1mdW5jdGlvbihhLGIpe3RoaXMuc2V0KGEsYik7dGhpcy5IW1wiZHVzdC5cIithXT0hMH07YmEuaGFzPWZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLmouaGFzT3duUHJvcGVydHkoXCJkdXN0LlwiK2EpfTtiYS5yZW1vdmU9ZnVuY3Rpb24oYSl7YT1cImR1c3QuXCIrYTt0aGlzLkguaGFzT3duUHJvcGVydHkoYSl8fGRlbGV0ZSB0aGlzLmpbYV19O3ZhciBGYT1mdW5jdGlvbigpe307RmEucHJvdG90eXBlLnJlc2V0PWZ1bmN0aW9uKCl7fTt2YXIgR2E9ZnVuY3Rpb24oYSxiKXt0aGlzLlI9YTt0aGlzLnBhcmVudD1iO3RoaXMuaj10aGlzLkQ9dm9pZCAwO3RoaXMuTT0hMTt0aGlzLkg9ZnVuY3Rpb24oYyxkLGUpe3JldHVybiBjLmFwcGx5KGQsZSl9O3RoaXMudmFsdWVzPW5ldyBEYX07R2EucHJvdG90eXBlLmFkZD1mdW5jdGlvbihhLGIpe0hhKHRoaXMsYSxiLCExKX07dmFyIEhhPWZ1bmN0aW9uKGEsYixjLGQpe2EuTXx8KGQ/YS52YWx1ZXMuTmgoYixjKTphLnZhbHVlcy5zZXQoYixjKSl9O0dhLnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24oYSxiKXt0aGlzLk18fCghdGhpcy52YWx1ZXMuaGFzKGEpJiZ0aGlzLnBhcmVudCYmdGhpcy5wYXJlbnQuaGFzKGEpP3RoaXMucGFyZW50LnNldChhLGIpOnRoaXMudmFsdWVzLnNldChhLGIpKX07R2EucHJvdG90eXBlLmdldD1mdW5jdGlvbihhKXtyZXR1cm4gdGhpcy52YWx1ZXMuaGFzKGEpP3RoaXMudmFsdWVzLmdldChhKTp0aGlzLnBhcmVudD90aGlzLnBhcmVudC5nZXQoYSk6dm9pZCAwfTtcbkdhLnByb3RvdHlwZS5oYXM9ZnVuY3Rpb24oYSl7cmV0dXJuISF0aGlzLnZhbHVlcy5oYXMoYSl8fCEoIXRoaXMucGFyZW50fHwhdGhpcy5wYXJlbnQuaGFzKGEpKX07dmFyIElhPWZ1bmN0aW9uKGEpe3ZhciBiPW5ldyBHYShhLlIsYSk7YS5EJiYoYi5EPWEuRCk7Yi5IPWEuSDtiLmo9YS5qO3JldHVybiBifTtHYS5wcm90b3R5cGUucmQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5SfTtHYS5wcm90b3R5cGUuS2E9ZnVuY3Rpb24oKXt0aGlzLk09ITB9O2Z1bmN0aW9uIEphKGEsYil7Zm9yKHZhciBjLGQ9MDtkPGIubGVuZ3RoJiYhKGM9S2EoYSxiW2RdKSxjIGluc3RhbmNlb2YgQ2EpO2QrKyk7cmV0dXJuIGN9ZnVuY3Rpb24gS2EoYSxiKXt0cnl7dmFyIGM9YS5nZXQoU3RyaW5nKGJbMF0pKTtpZighY3x8dHlwZW9mIGMuaW52b2tlIT09XCJmdW5jdGlvblwiKXRocm93IEVycm9yKFwiQXR0ZW1wdGluZyB0byBleGVjdXRlIG5vbi1mdW5jdGlvbiBcIitiWzBdK1wiLlwiKTtyZXR1cm4gYy5pbnZva2UuYXBwbHkoYyxbYV0uY29uY2F0KGIuc2xpY2UoMSkpKX1jYXRjaChlKXt2YXIgZD1hLkQ7ZCYmZChlLGIuY29udGV4dD97aWQ6YlswXSxsaW5lOmIuY29udGV4dC5saW5lfTpudWxsKTt0aHJvdyBlO319O3ZhciBMYT1mdW5jdGlvbigpe3RoaXMuRD1uZXcgRmE7dGhpcy5qPW5ldyBHYSh0aGlzLkQpfTtiYT1MYS5wcm90b3R5cGU7YmEucmQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5EfTtiYS5leGVjdXRlPWZ1bmN0aW9uKGEpe3ZhciBiPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywwKTtyZXR1cm4gdGhpcy5MaChiKX07YmEuTGg9ZnVuY3Rpb24oKXtmb3IodmFyIGEsYj0wO2I8YXJndW1lbnRzLmxlbmd0aDtiKyspYT1LYSh0aGlzLmosYXJndW1lbnRzW2JdKTtyZXR1cm4gYX07YmEuTWs9ZnVuY3Rpb24oYSl7dmFyIGI9SWEodGhpcy5qKTtiLmo9YTtmb3IodmFyIGMsZD0xO2Q8YXJndW1lbnRzLmxlbmd0aDtkKyspYz1LYShiLGFyZ3VtZW50c1tkXSk7cmV0dXJuIGN9O2JhLkthPWZ1bmN0aW9uKCl7dGhpcy5qLkthKCl9O3ZhciBNYT1mdW5jdGlvbigpe0RhLmNhbGwodGhpcyk7dGhpcy5EPSExfTt5YShNYSxEYSk7dmFyIE5hPWZ1bmN0aW9uKGEsYil7dmFyIGM9W10sZDtmb3IoZCBpbiBhLmopaWYoYS5qLmhhc093blByb3BlcnR5KGQpKXN3aXRjaChkPWQuc3Vic3RyKDUpLGIpe2Nhc2UgMTpjLnB1c2goZCk7YnJlYWs7Y2FzZSAyOmMucHVzaChhLmdldChkKSk7YnJlYWs7Y2FzZSAzOmMucHVzaChbZCxhLmdldChkKV0pfXJldHVybiBjfTtNYS5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKGEsYil7dGhpcy5EfHxEYS5wcm90b3R5cGUuc2V0LmNhbGwodGhpcyxhLGIpfTtNYS5wcm90b3R5cGUuTmg9ZnVuY3Rpb24oYSxiKXt0aGlzLkR8fERhLnByb3RvdHlwZS5OaC5jYWxsKHRoaXMsYSxiKX07TWEucHJvdG90eXBlLnJlbW92ZT1mdW5jdGlvbihhKXt0aGlzLkR8fERhLnByb3RvdHlwZS5yZW1vdmUuY2FsbCh0aGlzLGEpfTtNYS5wcm90b3R5cGUuS2E9ZnVuY3Rpb24oKXt0aGlzLkQ9ITB9Oy8qXG4galF1ZXJ5IChjKSAyMDA1LCAyMDEyIGpRdWVyeSBGb3VuZGF0aW9uLCBJbmMuIGpxdWVyeS5vcmcvbGljZW5zZS5cbiovXG52YXIgUGE9L1xcW29iamVjdCAoQm9vbGVhbnxOdW1iZXJ8U3RyaW5nfEZ1bmN0aW9ufEFycmF5fERhdGV8UmVnRXhwKVxcXS8sUWE9ZnVuY3Rpb24oYSl7aWYoYT09bnVsbClyZXR1cm4gU3RyaW5nKGEpO3ZhciBiPVBhLmV4ZWMoT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKE9iamVjdChhKSkpO3JldHVybiBiP2JbMV0udG9Mb3dlckNhc2UoKTpcIm9iamVjdFwifSxSYT1mdW5jdGlvbihhLGIpe3JldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoT2JqZWN0KGEpLGIpfSxTYT1mdW5jdGlvbihhKXtpZighYXx8UWEoYSkhPVwib2JqZWN0XCJ8fGEubm9kZVR5cGV8fGE9PWEud2luZG93KXJldHVybiExO3RyeXtpZihhLmNvbnN0cnVjdG9yJiYhUmEoYSxcImNvbnN0cnVjdG9yXCIpJiYhUmEoYS5jb25zdHJ1Y3Rvci5wcm90b3R5cGUsXCJpc1Byb3RvdHlwZU9mXCIpKXJldHVybiExfWNhdGNoKGMpe3JldHVybiExfWZvcih2YXIgYiBpbiBhKTtyZXR1cm4gYj09PXZvaWQgMHx8XG5SYShhLGIpfSxoPWZ1bmN0aW9uKGEsYil7dmFyIGM9Ynx8KFFhKGEpPT1cImFycmF5XCI/W106e30pLGQ7Zm9yKGQgaW4gYSlpZihSYShhLGQpKXt2YXIgZT1hW2RdO1FhKGUpPT1cImFycmF5XCI/KFFhKGNbZF0pIT1cImFycmF5XCImJihjW2RdPVtdKSxjW2RdPWgoZSxjW2RdKSk6U2EoZSk/KFNhKGNbZF0pfHwoY1tkXT17fSksY1tkXT1oKGUsY1tkXSkpOmNbZF09ZX1yZXR1cm4gY307ZnVuY3Rpb24gVWEoYSl7aWYoYT09dm9pZCAwfHxBcnJheS5pc0FycmF5KGEpfHxTYShhKSlyZXR1cm4hMDtzd2l0Y2godHlwZW9mIGEpe2Nhc2UgXCJib29sZWFuXCI6Y2FzZSBcIm51bWJlclwiOmNhc2UgXCJzdHJpbmdcIjpjYXNlIFwiZnVuY3Rpb25cIjpyZXR1cm4hMH1yZXR1cm4hMX1mdW5jdGlvbiBWYShhKXtyZXR1cm4gdHlwZW9mIGE9PT1cIm51bWJlclwiJiZhPj0wJiZpc0Zpbml0ZShhKSYmYSUxPT09MHx8dHlwZW9mIGE9PT1cInN0cmluZ1wiJiZhWzBdIT09XCItXCImJmE9PT1cIlwiK3BhcnNlSW50KGEpfTt2YXIgV2E9ZnVuY3Rpb24oYSl7dGhpcy5qPVtdO3RoaXMuSD0hMTt0aGlzLkQ9bmV3IE1hO2E9YXx8W107Zm9yKHZhciBiIGluIGEpYS5oYXNPd25Qcm9wZXJ0eShiKSYmKFZhKGIpP3RoaXMualtOdW1iZXIoYildPWFbTnVtYmVyKGIpXTp0aGlzLkQuc2V0KGIsYVtiXSkpfTtiYT1XYS5wcm90b3R5cGU7YmEudG9TdHJpbmc9ZnVuY3Rpb24oYSl7aWYoYSYmYS5pbmRleE9mKHRoaXMpPj0wKXJldHVyblwiXCI7Zm9yKHZhciBiPVtdLGM9MDtjPHRoaXMuai5sZW5ndGg7YysrKXt2YXIgZD10aGlzLmpbY107ZD09PW51bGx8fGQ9PT12b2lkIDA/Yi5wdXNoKFwiXCIpOmQgaW5zdGFuY2VvZiBXYT8oYT1hfHxbXSxhLnB1c2godGhpcyksYi5wdXNoKGQudG9TdHJpbmcoYSkpLGEucG9wKCkpOmIucHVzaChTdHJpbmcoZCkpfXJldHVybiBiLmpvaW4oXCIsXCIpfTtcbmJhLnNldD1mdW5jdGlvbihhLGIpe2lmKCF0aGlzLkgpaWYoYT09PVwibGVuZ3RoXCIpe2lmKCFWYShiKSl0aHJvdyBFcnJvcihcIlJhbmdlRXJyb3I6IExlbmd0aCBwcm9wZXJ0eSBtdXN0IGJlIGEgdmFsaWQgaW50ZWdlci5cIik7dGhpcy5qLmxlbmd0aD1OdW1iZXIoYil9ZWxzZSBWYShhKT90aGlzLmpbTnVtYmVyKGEpXT1iOnRoaXMuRC5zZXQoYSxiKX07YmEuZ2V0PWZ1bmN0aW9uKGEpe3JldHVybiBhPT09XCJsZW5ndGhcIj90aGlzLmxlbmd0aCgpOlZhKGEpP3RoaXMualtOdW1iZXIoYSldOnRoaXMuRC5nZXQoYSl9O2JhLmxlbmd0aD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmoubGVuZ3RofTtiYS5OYj1mdW5jdGlvbigpe2Zvcih2YXIgYT1OYSh0aGlzLkQsMSksYj0wO2I8dGhpcy5qLmxlbmd0aDtiKyspYS5wdXNoKGIrXCJcIik7cmV0dXJuIG5ldyBXYShhKX07YmEucmVtb3ZlPWZ1bmN0aW9uKGEpe1ZhKGEpP2RlbGV0ZSB0aGlzLmpbTnVtYmVyKGEpXTp0aGlzLkQucmVtb3ZlKGEpfTtcbmJhLnBvcD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmoucG9wKCl9O2JhLnB1c2g9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5qLnB1c2guYXBwbHkodGhpcy5qLEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cykpfTtiYS5zaGlmdD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmouc2hpZnQoKX07YmEuc3BsaWNlPWZ1bmN0aW9uKGEsYil7cmV0dXJuIG5ldyBXYSh0aGlzLmouc3BsaWNlLmFwcGx5KHRoaXMuaixhcmd1bWVudHMpKX07YmEudW5zaGlmdD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmoudW5zaGlmdC5hcHBseSh0aGlzLmosQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKSl9O2JhLmhhcz1mdW5jdGlvbihhKXtyZXR1cm4gVmEoYSkmJnRoaXMuai5oYXNPd25Qcm9wZXJ0eShhKXx8dGhpcy5ELmhhcyhhKX07YmEuS2E9ZnVuY3Rpb24oKXt0aGlzLkg9ITA7T2JqZWN0LmZyZWV6ZSh0aGlzLmopO3RoaXMuRC5LYSgpfTtcbmZ1bmN0aW9uIFhhKGEpe2Zvcih2YXIgYj1bXSxjPTA7YzxhLmxlbmd0aCgpO2MrKylhLmhhcyhjKSYmKGJbY109YS5nZXQoYykpO3JldHVybiBifTt2YXIgWWE9ZnVuY3Rpb24oKXtNYS5jYWxsKHRoaXMpfTt5YShZYSxNYSk7WWEucHJvdG90eXBlLk5iPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBXYShOYSh0aGlzLDEpKX07dmFyIFphPWZ1bmN0aW9uKGEpe2Zvcih2YXIgYj1OYShhLDMpLGM9bmV3IFdhLGQ9MDtkPGIubGVuZ3RoO2QrKyl7dmFyIGU9bmV3IFdhKGJbZF0pO2MucHVzaChlKX1yZXR1cm4gY307ZnVuY3Rpb24gYWIoKXtmb3IodmFyIGE9YmIsYj17fSxjPTA7YzxhLmxlbmd0aDsrK2MpYlthW2NdXT1jO3JldHVybiBifWZ1bmN0aW9uIGNiKCl7dmFyIGE9XCJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWlwiO2ErPWEudG9Mb3dlckNhc2UoKStcIjAxMjM0NTY3ODktX1wiO3JldHVybiBhK1wiLlwifXZhciBiYixkYjtmdW5jdGlvbiBlYihhKXtiYj1iYnx8Y2IoKTtkYj1kYnx8YWIoKTtmb3IodmFyIGI9W10sYz0wO2M8YS5sZW5ndGg7Yys9Myl7dmFyIGQ9YysxPGEubGVuZ3RoLGU9YysyPGEubGVuZ3RoLGY9YS5jaGFyQ29kZUF0KGMpLGc9ZD9hLmNoYXJDb2RlQXQoYysxKTowLGs9ZT9hLmNoYXJDb2RlQXQoYysyKTowLG09Zj4+MixuPShmJjMpPDw0fGc+PjQscD0oZyYxNSk8PDJ8az4+NixxPWsmNjM7ZXx8KHE9NjQsZHx8KHA9NjQpKTtiLnB1c2goYmJbbV0sYmJbbl0sYmJbcF0sYmJbcV0pfXJldHVybiBiLmpvaW4oXCJcIil9XG5mdW5jdGlvbiBmYihhKXtmdW5jdGlvbiBiKG0pe2Zvcig7ZDxhLmxlbmd0aDspe3ZhciBuPWEuY2hhckF0KGQrKykscD1kYltuXTtpZihwIT1udWxsKXJldHVybiBwO2lmKCEvXltcXHNcXHhhMF0qJC8udGVzdChuKSl0aHJvdyBFcnJvcihcIlVua25vd24gYmFzZTY0IGVuY29kaW5nIGF0IGNoYXI6IFwiK24pO31yZXR1cm4gbX1iYj1iYnx8Y2IoKTtkYj1kYnx8YWIoKTtmb3IodmFyIGM9XCJcIixkPTA7Oyl7dmFyIGU9YigtMSksZj1iKDApLGc9Yig2NCksaz1iKDY0KTtpZihrPT09NjQmJmU9PT0tMSlyZXR1cm4gYztjKz1TdHJpbmcuZnJvbUNoYXJDb2RlKGU8PDJ8Zj4+NCk7ZyE9PTY0JiYoYys9U3RyaW5nLmZyb21DaGFyQ29kZShmPDw0JjI0MHxnPj4yKSxrIT09NjQmJihjKz1TdHJpbmcuZnJvbUNoYXJDb2RlKGc8PDYmMTkyfGspKSl9fTt2YXIgZ2I9e307ZnVuY3Rpb24gaGIoYSxiKXtnYlthXT1nYlthXXx8W107Z2JbYV1bYl09ITB9ZnVuY3Rpb24gaWIoYSl7dmFyIGI9Z2JbYV07aWYoIWJ8fGIubGVuZ3RoPT09MClyZXR1cm5cIlwiO2Zvcih2YXIgYz1bXSxkPTAsZT0wO2U8Yi5sZW5ndGg7ZSsrKWUlOD09PTAmJmU+MCYmKGMucHVzaChTdHJpbmcuZnJvbUNoYXJDb2RlKGQpKSxkPTApLGJbZV0mJihkfD0xPDxlJTgpO2Q+MCYmYy5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUoZCkpO3JldHVybiBlYihjLmpvaW4oXCJcIikpLnJlcGxhY2UoL1xcLiskLyxcIlwiKX1mdW5jdGlvbiBqYigpe2Zvcih2YXIgYT1bXSxiPWdiLmZkcnx8W10sYz0wO2M8Yi5sZW5ndGg7YysrKWJbY10mJmEucHVzaChjKTtyZXR1cm4gYS5sZW5ndGg+MD9hOnZvaWQgMH07dmFyIGtiPVtdLGxiPXt9O2Z1bmN0aW9uIG1iKGEpe3JldHVybiBrYlthXT09PXZvaWQgMD8hMTprYlthXX07ZnVuY3Rpb24gbmIoKXt9ZnVuY3Rpb24gb2IoYSl7cmV0dXJuIHR5cGVvZiBhPT09XCJmdW5jdGlvblwifWZ1bmN0aW9uIGwoYSl7cmV0dXJuIHR5cGVvZiBhPT09XCJzdHJpbmdcIn1mdW5jdGlvbiBwYihhKXtyZXR1cm4gdHlwZW9mIGE9PT1cIm51bWJlclwiJiYhaXNOYU4oYSl9ZnVuY3Rpb24gcWIoYSl7cmV0dXJuIEFycmF5LmlzQXJyYXkoYSk/YTpbYV19ZnVuY3Rpb24gcmIoYSxiKXtpZihhJiZBcnJheS5pc0FycmF5KGEpKWZvcih2YXIgYz0wO2M8YS5sZW5ndGg7YysrKWlmKGFbY10mJmIoYVtjXSkpcmV0dXJuIGFbY119ZnVuY3Rpb24gc2IoYSxiKXtpZighcGIoYSl8fCFwYihiKXx8YT5iKWE9MCxiPTIxNDc0ODM2NDc7cmV0dXJuIE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSooYi1hKzEpK2EpfVxuZnVuY3Rpb24gdGIoYSxiKXtmb3IodmFyIGM9bmV3IHViLGQ9MDtkPGEubGVuZ3RoO2QrKyljLnNldChhW2RdLCEwKTtmb3IodmFyIGU9MDtlPGIubGVuZ3RoO2UrKylpZihjLmdldChiW2VdKSlyZXR1cm4hMDtyZXR1cm4hMX1mdW5jdGlvbiB6KGEsYil7Zm9yKHZhciBjIGluIGEpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGEsYykmJmIoYyxhW2NdKX1mdW5jdGlvbiB2YihhKXtyZXR1cm4hIWEmJihPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoYSk9PT1cIltvYmplY3QgQXJndW1lbnRzXVwifHxPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYSxcImNhbGxlZVwiKSl9ZnVuY3Rpb24gd2IoYSl7cmV0dXJuIE1hdGgucm91bmQoTnVtYmVyKGEpKXx8MH1mdW5jdGlvbiB4YihhKXtyZXR1cm5cImZhbHNlXCI9PT1TdHJpbmcoYSkudG9Mb3dlckNhc2UoKT8hMTohIWF9XG5mdW5jdGlvbiB5YihhKXt2YXIgYj1bXTtpZihBcnJheS5pc0FycmF5KGEpKWZvcih2YXIgYz0wO2M8YS5sZW5ndGg7YysrKWIucHVzaChTdHJpbmcoYVtjXSkpO3JldHVybiBifWZ1bmN0aW9uIHpiKGEpe3JldHVybiBhP2EucmVwbGFjZSgvXlxccyt8XFxzKyQvZyxcIlwiKTpcIlwifWZ1bmN0aW9uIEFiKCl7cmV0dXJuIG5ldyBEYXRlKERhdGUubm93KCkpfWZ1bmN0aW9uIEJiKCl7cmV0dXJuIEFiKCkuZ2V0VGltZSgpfXZhciB1Yj1mdW5jdGlvbigpe3RoaXMucHJlZml4PVwiZ3RtLlwiO3RoaXMudmFsdWVzPXt9fTt1Yi5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKGEsYil7dGhpcy52YWx1ZXNbdGhpcy5wcmVmaXgrYV09Yn07dWIucHJvdG90eXBlLmdldD1mdW5jdGlvbihhKXtyZXR1cm4gdGhpcy52YWx1ZXNbdGhpcy5wcmVmaXgrYV19O3ViLnByb3RvdHlwZS5jb250YWlucz1mdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5nZXQoYSkhPT12b2lkIDB9O1xuZnVuY3Rpb24gQ2IoYSxiLGMpe3JldHVybiBhJiZhLmhhc093blByb3BlcnR5KGIpP2FbYl06Y31mdW5jdGlvbiBEYihhKXt2YXIgYj1hO3JldHVybiBmdW5jdGlvbigpe2lmKGIpe3ZhciBjPWI7Yj12b2lkIDA7dHJ5e2MoKX1jYXRjaChkKXt9fX19ZnVuY3Rpb24gRWIoYSxiKXtmb3IodmFyIGMgaW4gYiliLmhhc093blByb3BlcnR5KGMpJiYoYVtjXT1iW2NdKX1mdW5jdGlvbiBGYihhLGIpe2Zvcih2YXIgYz1bXSxkPTA7ZDxhLmxlbmd0aDtkKyspYy5wdXNoKGFbZF0pLGMucHVzaC5hcHBseShjLGJbYVtkXV18fFtdKTtyZXR1cm4gY31mdW5jdGlvbiBHYihhLGIpe3JldHVybiBhLmxlbmd0aD49Yi5sZW5ndGgmJmEuc3Vic3RyaW5nKDAsYi5sZW5ndGgpPT09Yn1mdW5jdGlvbiBIYihhLGIpe3JldHVybiBhLmxlbmd0aD49Yi5sZW5ndGgmJmEuc3Vic3RyaW5nKGEubGVuZ3RoLWIubGVuZ3RoLGEubGVuZ3RoKT09PWJ9XG5mdW5jdGlvbiBJYihhLGIpe3ZhciBjPUQ7Yj1ifHxbXTtmb3IodmFyIGQ9YyxlPTA7ZTxhLmxlbmd0aC0xO2UrKyl7aWYoIWQuaGFzT3duUHJvcGVydHkoYVtlXSkpcmV0dXJuO2Q9ZFthW2VdXTtpZihiLmluZGV4T2YoZCk+PTApcmV0dXJufXJldHVybiBkfWZ1bmN0aW9uIEpiKGEsYil7Zm9yKHZhciBjPXt9LGQ9YyxlPWEuc3BsaXQoXCIuXCIpLGY9MDtmPGUubGVuZ3RoLTE7ZisrKWQ9ZFtlW2ZdXT17fTtkW2VbZS5sZW5ndGgtMV1dPWI7cmV0dXJuIGN9dmFyIEtiPS9eXFx3ezEsOX0kLztmdW5jdGlvbiBMYihhLGIpe2E9YXx8e307Yj1ifHxcIixcIjt2YXIgYz1bXTt6KGEsZnVuY3Rpb24oZCxlKXtLYi50ZXN0KGQpJiZlJiZjLnB1c2goZCl9KTtyZXR1cm4gYy5qb2luKGIpfWZ1bmN0aW9uIE1iKGEsYil7ZnVuY3Rpb24gYygpe2UmJisrZD09PWImJihlKCksZT1udWxsLGMuZG9uZT0hMCl9dmFyIGQ9MCxlPWE7Yy5kb25lPSExO3JldHVybiBjfVxuZnVuY3Rpb24gTmIoYSl7aWYoIWEpcmV0dXJuIGE7dmFyIGI9YTtpZihtYigzKSl0cnl7Yj1kZWNvZGVVUklDb21wb25lbnQoYSl9Y2F0Y2goZCl7fXZhciBjPWIuc3BsaXQoXCIsXCIpO3JldHVybiBjLmxlbmd0aD09PTImJmNbMF09PT1jWzFdP2NbMF06YX07dmFyIE9iLFBiPWZ1bmN0aW9uKCl7aWYoT2I9PT12b2lkIDApe3ZhciBhPW51bGwsYj1BYS50cnVzdGVkVHlwZXM7aWYoYiYmYi5jcmVhdGVQb2xpY3kpe3RyeXthPWIuY3JlYXRlUG9saWN5KFwiZ29vZyNodG1sXCIse2NyZWF0ZUhUTUw6QmEsY3JlYXRlU2NyaXB0OkJhLGNyZWF0ZVNjcmlwdFVSTDpCYX0pfWNhdGNoKGMpe0FhLmNvbnNvbGUmJkFhLmNvbnNvbGUuZXJyb3IoYy5tZXNzYWdlKX1PYj1hfWVsc2UgT2I9YX1yZXR1cm4gT2J9O3ZhciBRYj17fSxSYj1mdW5jdGlvbihhKXt0aGlzLmo9YX07UmIucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaitcIlwifTt2YXIgU2I9ZnVuY3Rpb24oYSl7cmV0dXJuIGEgaW5zdGFuY2VvZiBSYiYmYS5jb25zdHJ1Y3Rvcj09PVJiP2EuajpcInR5cGVfZXJyb3I6VHJ1c3RlZFJlc291cmNlVXJsXCJ9LFRiPWZ1bmN0aW9uKGEpe3ZhciBiPWEsYz1QYigpLGQ9Yz9jLmNyZWF0ZVNjcmlwdFVSTChiKTpiO3JldHVybiBuZXcgUmIoZCxRYil9Oy8qXG5cbiBDb3B5cmlnaHQgR29vZ2xlIExMQ1xuIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG4qL1xudmFyIFViPWthKFtcIlwiXSksVmI9amEoW1wiXFx4MDBcIl0sW1wiXFxcXDBcIl0pLFdiPWphKFtcIlxcblwiXSxbXCJcXFxcblwiXSksWGI9amEoW1wiXFx4MDBcIl0sW1wiXFxcXHUwMDAwXCJdKTtmdW5jdGlvbiBZYihhKXtyZXR1cm4gYS50b1N0cmluZygpLmluZGV4T2YoXCJgXCIpPT09LTF9WWIoZnVuY3Rpb24oYSl7cmV0dXJuIGEoVWIpfSl8fFliKGZ1bmN0aW9uKGEpe3JldHVybiBhKFZiKX0pfHxZYihmdW5jdGlvbihhKXtyZXR1cm4gYShXYil9KXx8WWIoZnVuY3Rpb24oYSl7cmV0dXJuIGEoWGIpfSk7dmFyIFpiPWZ1bmN0aW9uKGEpe3RoaXMuaj1hfTtaYi5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5qfTt2YXIgJGI9bmV3IFpiKFwiYWJvdXQ6aW52YWxpZCN6Q2xvc3VyZXpcIik7dmFyIGFjPWZ1bmN0aW9uKGEpe3RoaXMuaG09YX07ZnVuY3Rpb24gYmMoYSl7cmV0dXJuIG5ldyBhYyhmdW5jdGlvbihiKXtyZXR1cm4gYi5zdWJzdHIoMCxhLmxlbmd0aCsxKS50b0xvd2VyQ2FzZSgpPT09YStcIjpcIn0pfXZhciBjYz1bYmMoXCJkYXRhXCIpLGJjKFwiaHR0cFwiKSxiYyhcImh0dHBzXCIpLGJjKFwibWFpbHRvXCIpLGJjKFwiZnRwXCIpLG5ldyBhYyhmdW5jdGlvbihhKXtyZXR1cm4vXlteOl0qKFsvPyNdfCQpLy50ZXN0KGEpfSldO2Z1bmN0aW9uIGRjKGEsYil7Yj1iPT09dm9pZCAwP2NjOmI7aWYoYSBpbnN0YW5jZW9mIFpiKXJldHVybiBhO2Zvcih2YXIgYz0wO2M8Yi5sZW5ndGg7KytjKXt2YXIgZD1iW2NdO2lmKGQgaW5zdGFuY2VvZiBhYyYmZC5obShhKSlyZXR1cm4gbmV3IFpiKGEpfX1mdW5jdGlvbiBlYyhhKXt2YXIgYjtiPWI9PT12b2lkIDA/Y2M6YjtyZXR1cm4gZGMoYSxiKXx8JGJ9dmFyIGZjPS9eXFxzKig/IWphdmFzY3JpcHQ6KSg/OltcXHcrLi1dKzp8W146Lz8jXSooPzpbLz8jXXwkKSkvaTtcbmZ1bmN0aW9uIGdjKGEpe3ZhciBiO2lmKGEgaW5zdGFuY2VvZiBaYilpZihhIGluc3RhbmNlb2YgWmIpYj1hLmo7ZWxzZSB0aHJvdyBFcnJvcihcIlwiKTtlbHNlIGI9ZmMudGVzdChhKT9hOnZvaWQgMDtyZXR1cm4gYn07dmFyIGljPWZ1bmN0aW9uKCl7dGhpcy5qPWhjWzBdLnRvTG93ZXJDYXNlKCl9O2ljLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmp9O3ZhciBqYz1mdW5jdGlvbihhKXt0aGlzLmo9YX07amMucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaitcIlwifTtmdW5jdGlvbiBrYyhhLGIpe3ZhciBjPVtuZXcgaWNdO2lmKGMubGVuZ3RoPT09MCl0aHJvdyBFcnJvcihcIlwiKTt2YXIgZD1jLm1hcChmdW5jdGlvbihmKXt2YXIgZztpZihmIGluc3RhbmNlb2YgaWMpZz1mLmo7ZWxzZSB0aHJvdyBFcnJvcihcIlwiKTtyZXR1cm4gZ30pLGU9Yi50b0xvd2VyQ2FzZSgpO2lmKGQuZXZlcnkoZnVuY3Rpb24oZil7cmV0dXJuIGUuaW5kZXhPZihmKSE9PTB9KSl0aHJvdyBFcnJvcignQXR0cmlidXRlIFwiJytiKydcIiBkb2VzIG5vdCBtYXRjaCBhbnkgb2YgdGhlIGFsbG93ZWQgcHJlZml4ZXMuJyk7YS5zZXRBdHRyaWJ1dGUoYixcInRydWVcIil9O2Z1bmN0aW9uIGxjKGEsYil7dmFyIGM9Z2MoYik7YyE9PXZvaWQgMCYmKGEuYWN0aW9uPWMpfTt2YXIgbWM9QXJyYXkucHJvdG90eXBlLmluZGV4T2Y/ZnVuY3Rpb24oYSxiKXtyZXR1cm4gQXJyYXkucHJvdG90eXBlLmluZGV4T2YuY2FsbChhLGIsdm9pZCAwKX06ZnVuY3Rpb24oYSxiKXtpZih0eXBlb2YgYT09PVwic3RyaW5nXCIpcmV0dXJuIHR5cGVvZiBiIT09XCJzdHJpbmdcInx8Yi5sZW5ndGghPTE/LTE6YS5pbmRleE9mKGIsMCk7Zm9yKHZhciBjPTA7YzxhLmxlbmd0aDtjKyspaWYoYyBpbiBhJiZhW2NdPT09YilyZXR1cm4gYztyZXR1cm4tMX07XCJBUlRJQ0xFIFNFQ1RJT04gTkFWIEFTSURFIEgxIEgyIEgzIEg0IEg1IEg2IEhFQURFUiBGT09URVIgQUREUkVTUyBQIEhSIFBSRSBCTE9DS1FVT1RFIE9MIFVMIExIIExJIERMIERUIEREIEZJR1VSRSBGSUdDQVBUSU9OIE1BSU4gRElWIEVNIFNUUk9ORyBTTUFMTCBTIENJVEUgUSBERk4gQUJCUiBSVUJZIFJCIFJUIFJUQyBSUCBEQVRBIFRJTUUgQ09ERSBWQVIgU0FNUCBLQkQgU1VCIFNVUCBJIEIgVSBNQVJLIEJESSBCRE8gU1BBTiBCUiBXQlIgTk9CUiBJTlMgREVMIFBJQ1RVUkUgUEFSQU0gVFJBQ0sgTUFQIFRBQkxFIENBUFRJT04gQ09MR1JPVVAgQ09MIFRCT0RZIFRIRUFEIFRGT09UIFRSIFREIFRIIFNFTEVDVCBEQVRBTElTVCBPUFRHUk9VUCBPUFRJT04gT1VUUFVUIFBST0dSRVNTIE1FVEVSIEZJRUxEU0VUIExFR0VORCBERVRBSUxTIFNVTU1BUlkgTUVOVSBESUFMT0cgU0xPVCBDQU5WQVMgRk9OVCBDRU5URVIgQUNST05ZTSBCQVNFRk9OVCBCSUcgRElSIEhHUk9VUCBTVFJJS0UgVFRcIi5zcGxpdChcIiBcIikuY29uY2F0KFtcIkJVVFRPTlwiLFxuXCJJTlBVVFwiXSk7ZnVuY3Rpb24gbmMoYSl7cmV0dXJuIGE9PT1udWxsP1wibnVsbFwiOmE9PT12b2lkIDA/XCJ1bmRlZmluZWRcIjphfTt2YXIgRD13aW5kb3csRT1kb2N1bWVudCxvYz1uYXZpZ2F0b3IscGM9ZnVuY3Rpb24oKXt2YXIgYTt0cnl7YT1vYy5zZXJ2aWNlV29ya2VyfWNhdGNoKGIpe3JldHVybn1yZXR1cm4gYX0scWM9RS5jdXJyZW50U2NyaXB0LHJjPXFjJiZxYy5zcmMsc2M9ZnVuY3Rpb24oYSxiKXt2YXIgYz1EW2FdO0RbYV09Yz09PXZvaWQgMD9iOmM7cmV0dXJuIERbYV19O2Z1bmN0aW9uIHRjKGEpe3JldHVybihvYy51c2VyQWdlbnR8fFwiXCIpLmluZGV4T2YoYSkhPT0tMX12YXIgdWM9e2FzeW5jOjEsbm9uY2U6MSxvbmVycm9yOjEsb25sb2FkOjEsc3JjOjEsdHlwZToxfSx2Yz17b25sb2FkOjEsc3JjOjEsd2lkdGg6MSxoZWlnaHQ6MSxzdHlsZToxfTtmdW5jdGlvbiB3YyhhLGIsYyl7YiYmeihiLGZ1bmN0aW9uKGQsZSl7ZD1kLnRvTG93ZXJDYXNlKCk7Yy5oYXNPd25Qcm9wZXJ0eShkKXx8YS5zZXRBdHRyaWJ1dGUoZCxlKX0pfVxudmFyIHhjPWZ1bmN0aW9uKGEsYixjLGQsZSl7dmFyIGY9RS5jcmVhdGVFbGVtZW50KFwic2NyaXB0XCIpO3djKGYsZCx1Yyk7Zi50eXBlPVwidGV4dC9qYXZhc2NyaXB0XCI7Zi5hc3luYz1kJiZkLmFzeW5jPT09ITE/ITE6ITA7dmFyIGc7Zz1UYihuYyhhKSk7Zi5zcmM9U2IoZyk7dmFyIGssbSxuLHA9KG49KG09KGYub3duZXJEb2N1bWVudCYmZi5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3fHx3aW5kb3cpLmRvY3VtZW50KS5xdWVyeVNlbGVjdG9yKT09bnVsbD92b2lkIDA6bi5jYWxsKG0sXCJzY3JpcHRbbm9uY2VdXCIpOyhrPXA/cC5ub25jZXx8cC5nZXRBdHRyaWJ1dGUoXCJub25jZVwiKXx8XCJcIjpcIlwiKSYmZi5zZXRBdHRyaWJ1dGUoXCJub25jZVwiLGspO2ImJihmLm9ubG9hZD1iKTtjJiYoZi5vbmVycm9yPWMpO2lmKGUpZS5hcHBlbmRDaGlsZChmKTtlbHNle3ZhciBxPUUuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCJzY3JpcHRcIilbMF18fEUuYm9keXx8RS5oZWFkO3EucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoZixcbnEpfXJldHVybiBmfSx5Yz1mdW5jdGlvbigpe2lmKHJjKXt2YXIgYT1yYy50b0xvd2VyQ2FzZSgpO2lmKGEuaW5kZXhPZihcImh0dHBzOi8vXCIpPT09MClyZXR1cm4gMjtpZihhLmluZGV4T2YoXCJodHRwOi8vXCIpPT09MClyZXR1cm4gM31yZXR1cm4gMX0semM9ZnVuY3Rpb24oYSxiLGMsZCxlKXt2YXIgZjtmPWY9PT12b2lkIDA/ITA6Zjt2YXIgZz1lLGs9ITE7Z3x8KGc9RS5jcmVhdGVFbGVtZW50KFwiaWZyYW1lXCIpLGs9ITApO3djKGcsYyx2Yyk7ZCYmeihkLGZ1bmN0aW9uKG4scCl7Zy5kYXRhc2V0W25dPXB9KTtmJiYoZy5oZWlnaHQ9XCIwXCIsZy53aWR0aD1cIjBcIixnLnN0eWxlLmRpc3BsYXk9XCJub25lXCIsZy5zdHlsZS52aXNpYmlsaXR5PVwiaGlkZGVuXCIpO2EhPT12b2lkIDAmJihnLnNyYz1hKTtpZihrKXt2YXIgbT1FLmJvZHkmJkUuYm9keS5sYXN0Q2hpbGR8fEUuYm9keXx8RS5oZWFkO20ucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoZyxtKX1iJiYoZy5vbmxvYWQ9Yik7cmV0dXJuIGd9LFxuQWM9ZnVuY3Rpb24oYSxiLGMsZCl7dmFyIGU9bmV3IEltYWdlKDEsMSk7d2MoZSxkLHt9KTtlLm9ubG9hZD1mdW5jdGlvbigpe2Uub25sb2FkPW51bGw7YiYmYigpfTtlLm9uZXJyb3I9ZnVuY3Rpb24oKXtlLm9uZXJyb3I9bnVsbDtjJiZjKCl9O2Uuc3JjPWE7cmV0dXJuIGV9LEJjPWZ1bmN0aW9uKGEsYixjLGQpe0FjKGEsYixjLGQpfSxDYz1mdW5jdGlvbihhLGIsYyxkKXthLmFkZEV2ZW50TGlzdGVuZXI/YS5hZGRFdmVudExpc3RlbmVyKGIsYywhIWQpOmEuYXR0YWNoRXZlbnQmJmEuYXR0YWNoRXZlbnQoXCJvblwiK2IsYyl9LERjPWZ1bmN0aW9uKGEsYixjKXthLnJlbW92ZUV2ZW50TGlzdGVuZXI/YS5yZW1vdmVFdmVudExpc3RlbmVyKGIsYywhMSk6YS5kZXRhY2hFdmVudCYmYS5kZXRhY2hFdmVudChcIm9uXCIrYixjKX0sRz1mdW5jdGlvbihhKXtELnNldFRpbWVvdXQoYSwwKX0sRWM9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gYSYmYiYmYS5hdHRyaWJ1dGVzJiZhLmF0dHJpYnV0ZXNbYl0/XG5hLmF0dHJpYnV0ZXNbYl0udmFsdWU6bnVsbH0sRmM9ZnVuY3Rpb24oYSl7ZnVuY3Rpb24gYihlKXtlJiZlIT1cIiBcIiYmKGU9ZS5yZXBsYWNlKC9eW1xcc1xceGEwXSt8W1xcc1xceGEwXSskL2csXCJcIikpO2UmJmUhPVwiIFwiJiYoZT1lLnJlcGxhY2UoL15bXFxzXFx4YTBdK3xbXFxzXFx4YTBdKyQvZyxcIlwiKSk7ZSYmKGU9ZS5yZXBsYWNlKC8oXFx4YTArfFxcc3syLH18XFxufFxcclxcdCkvZyxcIiBcIikpO3JldHVybiBlfXZhciBjPWIoYS5pbm5lclRleHR8fGEudGV4dENvbnRlbnR8fFwiXCIpO2lmKG1iKDEwKSl7dmFyIGQ9YihhLnRleHRDb250ZW50fHxcIlwiKTtoYihcIlRBR0dJTkdcIiwyNik7ZCE9PWMmJmhiKFwiVEFHR0lOR1wiLDI1KX1yZXR1cm4gY30sR2M9ZnVuY3Rpb24oYSl7dmFyIGI9RS5jcmVhdGVFbGVtZW50KFwiZGl2XCIpLGM9YixkLGU9bmMoXCJBPGRpdj5cIithK1wiPC9kaXY+XCIpLGY9UGIoKTtkPW5ldyBqYyhmP2YuY3JlYXRlSFRNTChlKTplKTtpZihjLm5vZGVUeXBlPT09MSl7dmFyIGc9Yy50YWdOYW1lO2lmKGc9PT1cblwiU0NSSVBUXCJ8fGc9PT1cIlNUWUxFXCIpdGhyb3cgRXJyb3IoXCJcIik7fXZhciBrO2lmKGQgaW5zdGFuY2VvZiBqYylrPWQuajtlbHNlIHRocm93IEVycm9yKFwiXCIpO2MuaW5uZXJIVE1MPWs7Yj1iLmxhc3RDaGlsZDtmb3IodmFyIG09W107Yi5maXJzdENoaWxkOyltLnB1c2goYi5yZW1vdmVDaGlsZChiLmZpcnN0Q2hpbGQpKTtyZXR1cm4gbX0sSGM9ZnVuY3Rpb24oYSxiLGMpe2M9Y3x8MTAwO2Zvcih2YXIgZD17fSxlPTA7ZTxiLmxlbmd0aDtlKyspZFtiW2VdXT0hMDtmb3IodmFyIGY9YSxnPTA7ZiYmZzw9YztnKyspe2lmKGRbU3RyaW5nKGYudGFnTmFtZSkudG9Mb3dlckNhc2UoKV0pcmV0dXJuIGY7Zj1mLnBhcmVudEVsZW1lbnR9cmV0dXJuIG51bGx9LEljPWZ1bmN0aW9uKGEpe3ZhciBiO3RyeXtiPW9jLnNlbmRCZWFjb24mJm9jLnNlbmRCZWFjb24oYSl9Y2F0Y2goYyl7aGIoXCJUQUdHSU5HXCIsMTUpfWJ8fEFjKGEpfSxKYz1mdW5jdGlvbihhLGIpe3RyeXtyZXR1cm4gb2Muc2VuZEJlYWNvbihhLFxuYil9Y2F0Y2goYyl7aGIoXCJUQUdHSU5HXCIsMTUpfXJldHVybiExfSxLYz17Y2FjaGU6XCJuby1zdG9yZVwiLGNyZWRlbnRpYWxzOlwiaW5jbHVkZVwiLGtlZXBhbGl2ZTohMCxtZXRob2Q6XCJQT1NUXCIsbW9kZTpcIm5vLWNvcnNcIixyZWRpcmVjdDpcImZvbGxvd1wifSxNYz1mdW5jdGlvbihhLGIsYyl7aWYoTGMoKSl7dmFyIGQ9T2JqZWN0LmFzc2lnbih7fSxLYyk7YiYmKGQuYm9keT1iKTtjJiYoYy5hdHRyaWJ1dGlvblJlcG9ydGluZyYmKGQuYXR0cmlidXRpb25SZXBvcnRpbmc9Yy5hdHRyaWJ1dGlvblJlcG9ydGluZyksYy5icm93c2luZ1RvcGljcyYmKGQuYnJvd3NpbmdUb3BpY3M9Yy5icm93c2luZ1RvcGljcykpO3RyeXt2YXIgZT1ELmZldGNoKGEsZCk7ZSYmZS5jYXRjaChuYik7cmV0dXJuITB9Y2F0Y2goZil7fX1pZihjJiZjLm5vRmFsbGJhY2spcmV0dXJuITE7aWYoYilyZXR1cm4gSmMoYSxiKTtJYyhhKTtyZXR1cm4hMH0sTGM9ZnVuY3Rpb24oKXtyZXR1cm4gdHlwZW9mIEQuZmV0Y2g9PT1cblwiZnVuY3Rpb25cIn0sTmM9ZnVuY3Rpb24oYSxiKXt2YXIgYz1hW2JdO2MmJnR5cGVvZiBjLmFuaW1WYWw9PT1cInN0cmluZ1wiJiYoYz1jLmFuaW1WYWwpO3JldHVybiBjfSxPYz1mdW5jdGlvbigpe3ZhciBhPUQucGVyZm9ybWFuY2U7aWYoYSYmb2IoYS5ub3cpKXJldHVybiBhLm5vdygpfSxQYz1mdW5jdGlvbigpe3JldHVybiBELnBlcmZvcm1hbmNlfHx2b2lkIDB9O2Z1bmN0aW9uIFFjKGEsYil7cmV0dXJuIHRoaXMuZXZhbHVhdGUoYSkmJnRoaXMuZXZhbHVhdGUoYil9ZnVuY3Rpb24gUmMoYSxiKXtyZXR1cm4gdGhpcy5ldmFsdWF0ZShhKT09PXRoaXMuZXZhbHVhdGUoYil9ZnVuY3Rpb24gU2MoYSxiKXtyZXR1cm4gdGhpcy5ldmFsdWF0ZShhKXx8dGhpcy5ldmFsdWF0ZShiKX1mdW5jdGlvbiBUYyhhLGIpe2E9dGhpcy5ldmFsdWF0ZShhKTtiPXRoaXMuZXZhbHVhdGUoYik7cmV0dXJuIFN0cmluZyhhKS5pbmRleE9mKFN0cmluZyhiKSk+LTF9ZnVuY3Rpb24gVWMoYSxiKXt2YXIgYz1TdHJpbmcodGhpcy5ldmFsdWF0ZShhKSksZD1TdHJpbmcodGhpcy5ldmFsdWF0ZShiKSk7cmV0dXJuIGMuc3Vic3RyaW5nKDAsZC5sZW5ndGgpPT09ZH1cbmZ1bmN0aW9uIFZjKGEsYil7YT10aGlzLmV2YWx1YXRlKGEpO2I9dGhpcy5ldmFsdWF0ZShiKTtzd2l0Y2goYSl7Y2FzZSBcInBhZ2VMb2NhdGlvblwiOnZhciBjPUQubG9jYXRpb24uaHJlZjtiIGluc3RhbmNlb2YgWWEmJmIuZ2V0KFwic3RyaXBQcm90b2NvbFwiKSYmKGM9Yy5yZXBsYWNlKC9eaHR0cHM/OlxcL1xcLy8sXCJcIikpO3JldHVybiBjfX07dmFyIFdjPWZ1bmN0aW9uKGEsYil7TWEuY2FsbCh0aGlzKTt0aGlzLk9qPWE7dGhpcy5raD1ifTt5YShXYyxNYSk7YmE9V2MucHJvdG90eXBlO2JhLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuT2p9O2JhLmdldE5hbWU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5Pan07YmEuTmI9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IFdhKE5hKHRoaXMsMSkpfTtiYS5pbnZva2U9ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMua2guYXBwbHkobmV3IFhjKHRoaXMsYSksQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLDEpKX07YmEuZmI9ZnVuY3Rpb24oYSl7dHJ5e3JldHVybiB0aGlzLmludm9rZS5hcHBseSh0aGlzLEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywwKSl9Y2F0Y2goYil7fX07dmFyIFhjPWZ1bmN0aW9uKGEsYil7dGhpcy5raD1hO3RoaXMuRj1ifTtcblhjLnByb3RvdHlwZS5ldmFsdWF0ZT1mdW5jdGlvbihhKXt2YXIgYj10aGlzLkY7cmV0dXJuIEFycmF5LmlzQXJyYXkoYSk/S2EoYixhKTphfTtYYy5wcm90b3R5cGUuZ2V0TmFtZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmtoLmdldE5hbWUoKX07WGMucHJvdG90eXBlLnJkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuRi5yZCgpfTt2YXIgWWM9ZnVuY3Rpb24oKXt0aGlzLm1hcD1uZXcgTWFwfTtZYy5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKGEsYil7dGhpcy5tYXAuc2V0KGEsYil9O1ljLnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMubWFwLmdldChhKX07dmFyIFpjPWZ1bmN0aW9uKCl7dGhpcy5rZXlzPVtdO3RoaXMudmFsdWVzPVtdfTtaYy5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKGEsYil7dGhpcy5rZXlzLnB1c2goYSk7dGhpcy52YWx1ZXMucHVzaChiKX07WmMucHJvdG90eXBlLmdldD1mdW5jdGlvbihhKXt2YXIgYj10aGlzLmtleXMuaW5kZXhPZihhKTtpZihiPi0xKXJldHVybiB0aGlzLnZhbHVlc1tiXX07ZnVuY3Rpb24gJGMoKXt0cnl7cmV0dXJuIE1hcD9uZXcgWWM6bmV3IFpjfWNhdGNoKGEpe3JldHVybiBuZXcgWmN9fTt2YXIgYWQ9ZnVuY3Rpb24oYSl7aWYoYSBpbnN0YW5jZW9mIGFkKXJldHVybiBhO2lmKFVhKGEpKXRocm93IEVycm9yKFwiVHlwZSBvZiBnaXZlbiB2YWx1ZSBoYXMgYW4gZXF1aXZhbGVudCBQaXhpZSB0eXBlLlwiKTt0aGlzLnZhbHVlPWF9O2FkLnByb3RvdHlwZS5nZXRWYWx1ZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLnZhbHVlfTthZC5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gU3RyaW5nKHRoaXMudmFsdWUpfTt2YXIgY2Q9ZnVuY3Rpb24oYSl7TWEuY2FsbCh0aGlzKTt0aGlzLnByb21pc2U9YTt0aGlzLnNldChcInRoZW5cIixiZCh0aGlzKSk7dGhpcy5zZXQoXCJjYXRjaFwiLGJkKHRoaXMsITApKTt0aGlzLnNldChcImZpbmFsbHlcIixiZCh0aGlzLCExLCEwKSl9O3lhKGNkLFlhKTt2YXIgYmQ9ZnVuY3Rpb24oYSxiLGMpe2I9Yj09PXZvaWQgMD8hMTpiO2M9Yz09PXZvaWQgMD8hMTpjO3JldHVybiBuZXcgV2MoXCJcIixmdW5jdGlvbihkLGUpe2ImJihlPWQsZD12b2lkIDApO2MmJihlPWQpO2QgaW5zdGFuY2VvZiBXY3x8KGQ9dm9pZCAwKTtlIGluc3RhbmNlb2YgV2N8fChlPXZvaWQgMCk7dmFyIGY9SWEodGhpcy5GKSxnPWZ1bmN0aW9uKG0pe3JldHVybiBmdW5jdGlvbihuKXtyZXR1cm4gYz8obS5pbnZva2UoZiksYS5wcm9taXNlKTptLmludm9rZShmLG4pfX0saz1hLnByb21pc2UudGhlbihkJiZnKGQpLGUmJmcoZSkpO3JldHVybiBuZXcgY2Qoayl9KX07ZnVuY3Rpb24gSihhLGIsYyl7dmFyIGQ9JGMoKSxlPWZ1bmN0aW9uKGcsayl7Zm9yKHZhciBtPU5hKGcsMSksbj0wO248bS5sZW5ndGg7bisrKWtbbVtuXV09ZihnLmdldChtW25dKSl9LGY9ZnVuY3Rpb24oZyl7dmFyIGs9ZC5nZXQoZyk7aWYoaylyZXR1cm4gaztpZihnIGluc3RhbmNlb2YgV2Epe3ZhciBtPVtdO2Quc2V0KGcsbSk7Zm9yKHZhciBuPWcuTmIoKSxwPTA7cDxuLmxlbmd0aCgpO3ArKyltW24uZ2V0KHApXT1mKGcuZ2V0KG4uZ2V0KHApKSk7cmV0dXJuIG19aWYoZyBpbnN0YW5jZW9mIGNkKXJldHVybiBnLnByb21pc2U7aWYoZyBpbnN0YW5jZW9mIFlhKXt2YXIgcT17fTtkLnNldChnLHEpO2UoZyxxKTtyZXR1cm4gcX1pZihnIGluc3RhbmNlb2YgV2Mpe3ZhciByPWZ1bmN0aW9uKCl7Zm9yKHZhciB1PUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywwKSx2PTA7djx1Lmxlbmd0aDt2KyspdVt2XT1kZCh1W3ZdLGIsYyk7dmFyIHc9bmV3IEdhKGI/Yi5yZCgpOlxubmV3IEZhKTtiJiYody5qPWIuaik7cmV0dXJuIGYoZy5pbnZva2UuYXBwbHkoZyxbd10uY29uY2F0KHUpKSl9O2Quc2V0KGcscik7ZShnLHIpO3JldHVybiByfXZhciB0PSExO3N3aXRjaChjKXtjYXNlIDE6dD0hMDticmVhaztjYXNlIDI6dD0hMTticmVhaztjYXNlIDM6dD0hMTticmVhaztkZWZhdWx0On1pZihnIGluc3RhbmNlb2YgYWQmJnQpcmV0dXJuIGcuZ2V0VmFsdWUoKTtzd2l0Y2godHlwZW9mIGcpe2Nhc2UgXCJib29sZWFuXCI6Y2FzZSBcIm51bWJlclwiOmNhc2UgXCJzdHJpbmdcIjpjYXNlIFwidW5kZWZpbmVkXCI6cmV0dXJuIGc7Y2FzZSBcIm9iamVjdFwiOmlmKGc9PT1udWxsKXJldHVybiBudWxsfX07cmV0dXJuIGYoYSl9XG5mdW5jdGlvbiBkZChhLGIsYyl7dmFyIGQ9JGMoKSxlPWZ1bmN0aW9uKGcsayl7Zm9yKHZhciBtIGluIGcpZy5oYXNPd25Qcm9wZXJ0eShtKSYmay5zZXQobSxmKGdbbV0pKX0sZj1mdW5jdGlvbihnKXt2YXIgaz1kLmdldChnKTtpZihrKXJldHVybiBrO2lmKEFycmF5LmlzQXJyYXkoZyl8fHZiKGcpKXt2YXIgbT1uZXcgV2EoW10pO2Quc2V0KGcsbSk7Zm9yKHZhciBuIGluIGcpZy5oYXNPd25Qcm9wZXJ0eShuKSYmbS5zZXQobixmKGdbbl0pKTtyZXR1cm4gbX1pZihTYShnKSl7dmFyIHA9bmV3IFlhO2Quc2V0KGcscCk7ZShnLHApO3JldHVybiBwfWlmKHR5cGVvZiBnPT09XCJmdW5jdGlvblwiKXt2YXIgcT1uZXcgV2MoXCJcIixmdW5jdGlvbigpe2Zvcih2YXIgeD1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsMCkseT0wO3k8eC5sZW5ndGg7eSsrKXhbeV09Sih0aGlzLmV2YWx1YXRlKHhbeV0pLGIsYyk7cmV0dXJuIGYoKDAsdGhpcy5GLkgpKGcsZyx4KSl9KTtkLnNldChnLFxucSk7ZShnLHEpO3JldHVybiBxfXZhciB2PXR5cGVvZiBnO2lmKGc9PT1udWxsfHx2PT09XCJzdHJpbmdcInx8dj09PVwibnVtYmVyXCJ8fHY9PT1cImJvb2xlYW5cIilyZXR1cm4gZzt2YXIgdz0hMTtzd2l0Y2goYyl7Y2FzZSAxOnc9XG4hMDticmVhaztjYXNlIDI6dz0hMTticmVhaztkZWZhdWx0On1pZihnIT09dm9pZCAwJiZ3KXJldHVybiBuZXcgYWQoZyl9O3JldHVybiBmKGEpfTtmdW5jdGlvbiBlZCgpe3ZhciBhPSExO3JldHVybiBhfTt2YXIgZmQ9e3N1cHBvcnRlZE1ldGhvZHM6XCJjb25jYXQgZXZlcnkgZmlsdGVyIGZvckVhY2ggaGFzT3duUHJvcGVydHkgaW5kZXhPZiBqb2luIGxhc3RJbmRleE9mIG1hcCBwb3AgcHVzaCByZWR1Y2UgcmVkdWNlUmlnaHQgcmV2ZXJzZSBzaGlmdCBzbGljZSBzb21lIHNvcnQgc3BsaWNlIHVuc2hpZnQgdG9TdHJpbmdcIi5zcGxpdChcIiBcIiksY29uY2F0OmZ1bmN0aW9uKGEpe2Zvcih2YXIgYj1bXSxjPTA7Yzx0aGlzLmxlbmd0aCgpO2MrKyliLnB1c2godGhpcy5nZXQoYykpO2Zvcih2YXIgZD0xO2Q8YXJndW1lbnRzLmxlbmd0aDtkKyspaWYoYXJndW1lbnRzW2RdaW5zdGFuY2VvZiBXYSlmb3IodmFyIGU9YXJndW1lbnRzW2RdLGY9MDtmPGUubGVuZ3RoKCk7ZisrKWIucHVzaChlLmdldChmKSk7ZWxzZSBiLnB1c2goYXJndW1lbnRzW2RdKTtyZXR1cm4gbmV3IFdhKGIpfSxldmVyeTpmdW5jdGlvbihhLGIpe2Zvcih2YXIgYz10aGlzLmxlbmd0aCgpLGQ9MDtkPHRoaXMubGVuZ3RoKCkmJlxuZDxjO2QrKylpZih0aGlzLmhhcyhkKSYmIWIuaW52b2tlKGEsdGhpcy5nZXQoZCksZCx0aGlzKSlyZXR1cm4hMTtyZXR1cm4hMH0sZmlsdGVyOmZ1bmN0aW9uKGEsYil7Zm9yKHZhciBjPXRoaXMubGVuZ3RoKCksZD1bXSxlPTA7ZTx0aGlzLmxlbmd0aCgpJiZlPGM7ZSsrKXRoaXMuaGFzKGUpJiZiLmludm9rZShhLHRoaXMuZ2V0KGUpLGUsdGhpcykmJmQucHVzaCh0aGlzLmdldChlKSk7cmV0dXJuIG5ldyBXYShkKX0sZm9yRWFjaDpmdW5jdGlvbihhLGIpe2Zvcih2YXIgYz10aGlzLmxlbmd0aCgpLGQ9MDtkPHRoaXMubGVuZ3RoKCkmJmQ8YztkKyspdGhpcy5oYXMoZCkmJmIuaW52b2tlKGEsdGhpcy5nZXQoZCksZCx0aGlzKX0saGFzT3duUHJvcGVydHk6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gdGhpcy5oYXMoYil9LGluZGV4T2Y6ZnVuY3Rpb24oYSxiLGMpe3ZhciBkPXRoaXMubGVuZ3RoKCksZT1jPT09dm9pZCAwPzA6TnVtYmVyKGMpO2U8MCYmKGU9TWF0aC5tYXgoZCtlLDApKTtmb3IodmFyIGY9XG5lO2Y8ZDtmKyspaWYodGhpcy5oYXMoZikmJnRoaXMuZ2V0KGYpPT09YilyZXR1cm4gZjtyZXR1cm4tMX0sam9pbjpmdW5jdGlvbihhLGIpe2Zvcih2YXIgYz1bXSxkPTA7ZDx0aGlzLmxlbmd0aCgpO2QrKyljLnB1c2godGhpcy5nZXQoZCkpO3JldHVybiBjLmpvaW4oYil9LGxhc3RJbmRleE9mOmZ1bmN0aW9uKGEsYixjKXt2YXIgZD10aGlzLmxlbmd0aCgpLGU9ZC0xO2MhPT12b2lkIDAmJihlPWM8MD9kK2M6TWF0aC5taW4oYyxlKSk7Zm9yKHZhciBmPWU7Zj49MDtmLS0paWYodGhpcy5oYXMoZikmJnRoaXMuZ2V0KGYpPT09YilyZXR1cm4gZjtyZXR1cm4tMX0sbWFwOmZ1bmN0aW9uKGEsYil7Zm9yKHZhciBjPXRoaXMubGVuZ3RoKCksZD1bXSxlPTA7ZTx0aGlzLmxlbmd0aCgpJiZlPGM7ZSsrKXRoaXMuaGFzKGUpJiYoZFtlXT1iLmludm9rZShhLHRoaXMuZ2V0KGUpLGUsdGhpcykpO3JldHVybiBuZXcgV2EoZCl9LHBvcDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnBvcCgpfSxwdXNoOmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLnB1c2guYXBwbHkodGhpcyxcbkFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywxKSl9LHJlZHVjZTpmdW5jdGlvbihhLGIsYyl7dmFyIGQ9dGhpcy5sZW5ndGgoKSxlLGY9MDtpZihjIT09dm9pZCAwKWU9YztlbHNle2lmKGQ9PT0wKXRocm93IEVycm9yKFwiVHlwZUVycm9yOiBSZWR1Y2Ugb24gTGlzdCB3aXRoIG5vIGVsZW1lbnRzLlwiKTtmb3IodmFyIGc9MDtnPGQ7ZysrKWlmKHRoaXMuaGFzKGcpKXtlPXRoaXMuZ2V0KGcpO2Y9ZysxO2JyZWFrfWlmKGc9PT1kKXRocm93IEVycm9yKFwiVHlwZUVycm9yOiBSZWR1Y2Ugb24gTGlzdCB3aXRoIG5vIGVsZW1lbnRzLlwiKTt9Zm9yKHZhciBrPWY7azxkO2srKyl0aGlzLmhhcyhrKSYmKGU9Yi5pbnZva2UoYSxlLHRoaXMuZ2V0KGspLGssdGhpcykpO3JldHVybiBlfSxyZWR1Y2VSaWdodDpmdW5jdGlvbihhLGIsYyl7dmFyIGQ9dGhpcy5sZW5ndGgoKSxlLGY9ZC0xO2lmKGMhPT12b2lkIDApZT1jO2Vsc2V7aWYoZD09PTApdGhyb3cgRXJyb3IoXCJUeXBlRXJyb3I6IFJlZHVjZVJpZ2h0IG9uIExpc3Qgd2l0aCBubyBlbGVtZW50cy5cIik7XG5mb3IodmFyIGc9MTtnPD1kO2crKylpZih0aGlzLmhhcyhkLWcpKXtlPXRoaXMuZ2V0KGQtZyk7Zj1kLShnKzEpO2JyZWFrfWlmKGc+ZCl0aHJvdyBFcnJvcihcIlR5cGVFcnJvcjogUmVkdWNlUmlnaHQgb24gTGlzdCB3aXRoIG5vIGVsZW1lbnRzLlwiKTt9Zm9yKHZhciBrPWY7az49MDtrLS0pdGhpcy5oYXMoaykmJihlPWIuaW52b2tlKGEsZSx0aGlzLmdldChrKSxrLHRoaXMpKTtyZXR1cm4gZX0scmV2ZXJzZTpmdW5jdGlvbigpe2Zvcih2YXIgYT1YYSh0aGlzKSxiPWEubGVuZ3RoLTEsYz0wO2I+PTA7Yi0tLGMrKylhLmhhc093blByb3BlcnR5KGIpP3RoaXMuc2V0KGMsYVtiXSk6dGhpcy5yZW1vdmUoYyk7cmV0dXJuIHRoaXN9LHNoaWZ0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc2hpZnQoKX0sc2xpY2U6ZnVuY3Rpb24oYSxiLGMpe3ZhciBkPXRoaXMubGVuZ3RoKCk7Yj09PXZvaWQgMCYmKGI9MCk7Yj1iPDA/TWF0aC5tYXgoZCtiLDApOk1hdGgubWluKGIsZCk7Yz1jPT09dm9pZCAwP1xuZDpjPDA/TWF0aC5tYXgoZCtjLDApOk1hdGgubWluKGMsZCk7Yz1NYXRoLm1heChiLGMpO2Zvcih2YXIgZT1bXSxmPWI7ZjxjO2YrKyllLnB1c2godGhpcy5nZXQoZikpO3JldHVybiBuZXcgV2EoZSl9LHNvbWU6ZnVuY3Rpb24oYSxiKXtmb3IodmFyIGM9dGhpcy5sZW5ndGgoKSxkPTA7ZDx0aGlzLmxlbmd0aCgpJiZkPGM7ZCsrKWlmKHRoaXMuaGFzKGQpJiZiLmludm9rZShhLHRoaXMuZ2V0KGQpLGQsdGhpcykpcmV0dXJuITA7cmV0dXJuITF9LHNvcnQ6ZnVuY3Rpb24oYSxiKXt2YXIgYz1YYSh0aGlzKTtiPT09dm9pZCAwP2Muc29ydCgpOmMuc29ydChmdW5jdGlvbihlLGYpe3JldHVybiBOdW1iZXIoYi5pbnZva2UoYSxlLGYpKX0pO2Zvcih2YXIgZD0wO2Q8Yy5sZW5ndGg7ZCsrKWMuaGFzT3duUHJvcGVydHkoZCk/dGhpcy5zZXQoZCxjW2RdKTp0aGlzLnJlbW92ZShkKTtyZXR1cm4gdGhpc30sc3BsaWNlOmZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gdGhpcy5zcGxpY2UuYXBwbHkodGhpcyxcbkFycmF5LnByb3RvdHlwZS5zcGxpY2UuY2FsbChhcmd1bWVudHMsMSxhcmd1bWVudHMubGVuZ3RoLTEpKX0sdG9TdHJpbmc6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50b1N0cmluZygpfSx1bnNoaWZ0OmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLnVuc2hpZnQuYXBwbHkodGhpcyxBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsMSkpfX07dmFyIGdkPWZ1bmN0aW9uKGEpe3ZhciBiO2I9RXJyb3IuY2FsbCh0aGlzLGEpO3RoaXMubWVzc2FnZT1iLm1lc3NhZ2U7XCJzdGFja1wiaW4gYiYmKHRoaXMuc3RhY2s9Yi5zdGFjayl9O3lhKGdkLEVycm9yKTt2YXIgaGQ9e2NoYXJBdDoxLGNvbmNhdDoxLGluZGV4T2Y6MSxsYXN0SW5kZXhPZjoxLG1hdGNoOjEscmVwbGFjZToxLHNlYXJjaDoxLHNsaWNlOjEsc3BsaXQ6MSxzdWJzdHJpbmc6MSx0b0xvd2VyQ2FzZToxLHRvTG9jYWxlTG93ZXJDYXNlOjEsdG9TdHJpbmc6MSx0b1VwcGVyQ2FzZToxLHRvTG9jYWxlVXBwZXJDYXNlOjEsdHJpbToxfSxpZD1uZXcgQ2EoXCJicmVha1wiKSxqZD1uZXcgQ2EoXCJjb250aW51ZVwiKTtmdW5jdGlvbiBrZChhLGIpe3JldHVybiB0aGlzLmV2YWx1YXRlKGEpK3RoaXMuZXZhbHVhdGUoYil9ZnVuY3Rpb24gbGQoYSxiKXtyZXR1cm4gdGhpcy5ldmFsdWF0ZShhKSYmdGhpcy5ldmFsdWF0ZShiKX1cbmZ1bmN0aW9uIG1kKGEsYixjKXthPXRoaXMuZXZhbHVhdGUoYSk7Yj10aGlzLmV2YWx1YXRlKGIpO2M9dGhpcy5ldmFsdWF0ZShjKTtpZighKGMgaW5zdGFuY2VvZiBXYSkpdGhyb3cgRXJyb3IoXCJFcnJvcjogTm9uLUxpc3QgYXJndW1lbnQgZ2l2ZW4gdG8gQXBwbHkgaW5zdHJ1Y3Rpb24uXCIpO2lmKGE9PT1udWxsfHxhPT09dm9pZCAwKXt2YXIgZD1cIlR5cGVFcnJvcjogQ2FuJ3QgcmVhZCBwcm9wZXJ0eSBcIitiK1wiIG9mIFwiK2ErXCIuXCI7aWYoZWQoKSl0aHJvdyBuZXcgZ2QoZCk7dGhyb3cgRXJyb3IoZCk7fXZhciBlPXR5cGVvZiBhPT09XCJudW1iZXJcIjtpZih0eXBlb2YgYT09PVwiYm9vbGVhblwifHxlKXtpZihiPT09XCJ0b1N0cmluZ1wiKXtpZihlJiZjLmxlbmd0aCgpKXt2YXIgZj1KKGMuZ2V0KDApKTt0cnl7cmV0dXJuIGEudG9TdHJpbmcoZil9Y2F0Y2goeSl7fX1yZXR1cm4gYS50b1N0cmluZygpfXZhciBnPVwiVHlwZUVycm9yOiBcIithK1wiLlwiK2IrXCIgaXMgbm90IGEgZnVuY3Rpb24uXCI7XG5pZihlZCgpKXRocm93IG5ldyBnZChnKTt0aHJvdyBFcnJvcihnKTt9aWYodHlwZW9mIGE9PT1cInN0cmluZ1wiKXtpZihoZC5oYXNPd25Qcm9wZXJ0eShiKSl7dmFyIGs9MjtrPTE7dmFyIG09SihjLHZvaWQgMCxrKTtyZXR1cm4gZGQoYVtiXS5hcHBseShhLG0pLHRoaXMuRil9dmFyIG49XCJUeXBlRXJyb3I6IFwiK2IrXCIgaXMgbm90IGEgZnVuY3Rpb25cIjtpZihlZCgpKXRocm93IG5ldyBnZChuKTt0aHJvdyBFcnJvcihuKTt9aWYoYSBpbnN0YW5jZW9mIFdhKXtpZihhLmhhcyhiKSl7dmFyIHA9YS5nZXQoYik7aWYocCBpbnN0YW5jZW9mIFdjKXt2YXIgcT1YYShjKTtxLnVuc2hpZnQodGhpcy5GKTtyZXR1cm4gcC5pbnZva2UuYXBwbHkocCxxKX12YXIgcj1cblwiVHlwZUVycm9yOiBcIitiK1wiIGlzIG5vdCBhIGZ1bmN0aW9uXCI7aWYoZWQoKSl0aHJvdyBuZXcgZ2Qocik7dGhyb3cgRXJyb3Iocik7fWlmKGZkLnN1cHBvcnRlZE1ldGhvZHMuaW5kZXhPZihiKT49MCl7dmFyIHQ9WGEoYyk7dC51bnNoaWZ0KHRoaXMuRik7cmV0dXJuIGZkW2JdLmFwcGx5KGEsdCl9fWlmKGEgaW5zdGFuY2VvZiBXY3x8YSBpbnN0YW5jZW9mIFlhKXtpZihhLmhhcyhiKSl7dmFyIHU9YS5nZXQoYik7aWYodSBpbnN0YW5jZW9mIFdjKXt2YXIgdj1YYShjKTt2LnVuc2hpZnQodGhpcy5GKTtyZXR1cm4gdS5pbnZva2UuYXBwbHkodSx2KX12YXIgdz1cIlR5cGVFcnJvcjogXCIrYitcIiBpcyBub3QgYSBmdW5jdGlvblwiO2lmKGVkKCkpdGhyb3cgbmV3IGdkKHcpO3Rocm93IEVycm9yKHcpO31pZihiPT09XCJ0b1N0cmluZ1wiKXJldHVybiBhIGluc3RhbmNlb2YgV2M/YS5nZXROYW1lKCk6YS50b1N0cmluZygpO2lmKGI9PT1cImhhc093blByb3BlcnR5XCIpcmV0dXJuIGEuaGFzLmFwcGx5KGEsXG5YYShjKSl9aWYoYSBpbnN0YW5jZW9mIGFkJiZiPT09XCJ0b1N0cmluZ1wiKXJldHVybiBhLnRvU3RyaW5nKCk7dmFyIHg9XCJUeXBlRXJyb3I6IE9iamVjdCBoYXMgbm8gJ1wiK2IrXCInIHByb3BlcnR5LlwiO2lmKGVkKCkpdGhyb3cgbmV3IGdkKHgpO3Rocm93IEVycm9yKHgpO31mdW5jdGlvbiBuZChhLGIpe2E9dGhpcy5ldmFsdWF0ZShhKTtpZih0eXBlb2YgYSE9PVwic3RyaW5nXCIpdGhyb3cgRXJyb3IoXCJJbnZhbGlkIGtleSBuYW1lIGdpdmVuIGZvciBhc3NpZ25tZW50LlwiKTt2YXIgYz10aGlzLkY7aWYoIWMuaGFzKGEpKXRocm93IEVycm9yKFwiQXR0ZW1wdGluZyB0byBhc3NpZ24gdG8gdW5kZWZpbmVkIHZhbHVlIFwiK2IpO3ZhciBkPXRoaXMuZXZhbHVhdGUoYik7Yy5zZXQoYSxkKTtyZXR1cm4gZH1mdW5jdGlvbiBvZCgpe3ZhciBhPUlhKHRoaXMuRiksYj1KYShhLEFycmF5LnByb3RvdHlwZS5zbGljZS5hcHBseShhcmd1bWVudHMpKTtpZihiIGluc3RhbmNlb2YgQ2EpcmV0dXJuIGJ9XG5mdW5jdGlvbiBwZCgpe3JldHVybiBpZH1mdW5jdGlvbiBxZChhKXtmb3IodmFyIGI9dGhpcy5ldmFsdWF0ZShhKSxjPTA7YzxiLmxlbmd0aDtjKyspe3ZhciBkPXRoaXMuZXZhbHVhdGUoYltjXSk7aWYoZCBpbnN0YW5jZW9mIENhKXJldHVybiBkfX1mdW5jdGlvbiByZCgpe2Zvcih2YXIgYT10aGlzLkYsYj0wO2I8YXJndW1lbnRzLmxlbmd0aC0xO2IrPTIpe3ZhciBjPWFyZ3VtZW50c1tiXTtpZih0eXBlb2YgYz09PVwic3RyaW5nXCIpe3ZhciBkPXRoaXMuZXZhbHVhdGUoYXJndW1lbnRzW2IrMV0pO0hhKGEsYyxkLCEwKX19fWZ1bmN0aW9uIHNkKCl7cmV0dXJuIGpkfWZ1bmN0aW9uIHZkKGEsYil7cmV0dXJuIG5ldyBDYShhLHRoaXMuZXZhbHVhdGUoYikpfVxuZnVuY3Rpb24gd2QoYSxiKXt2YXIgYz1uZXcgV2E7Yj10aGlzLmV2YWx1YXRlKGIpO2Zvcih2YXIgZD0wO2Q8Yi5sZW5ndGg7ZCsrKWMucHVzaChiW2RdKTt2YXIgZT1bNTEsYSxjXS5jb25jYXQoQXJyYXkucHJvdG90eXBlLnNwbGljZS5jYWxsKGFyZ3VtZW50cywyLGFyZ3VtZW50cy5sZW5ndGgtMikpO3RoaXMuRi5hZGQoYSx0aGlzLmV2YWx1YXRlKGUpKX1mdW5jdGlvbiB4ZChhLGIpe3JldHVybiB0aGlzLmV2YWx1YXRlKGEpL3RoaXMuZXZhbHVhdGUoYil9ZnVuY3Rpb24geWQoYSxiKXthPXRoaXMuZXZhbHVhdGUoYSk7Yj10aGlzLmV2YWx1YXRlKGIpO3ZhciBjPWEgaW5zdGFuY2VvZiBhZCxkPWIgaW5zdGFuY2VvZiBhZDtyZXR1cm4gY3x8ZD9jJiZkP2EuZ2V0VmFsdWUoKT09PWIuZ2V0VmFsdWUoKTohMTphPT1ifWZ1bmN0aW9uIHpkKCl7Zm9yKHZhciBhLGI9MDtiPGFyZ3VtZW50cy5sZW5ndGg7YisrKWE9dGhpcy5ldmFsdWF0ZShhcmd1bWVudHNbYl0pO3JldHVybiBhfVxuZnVuY3Rpb24gQWQoYSxiLGMsZCl7Zm9yKHZhciBlPTA7ZTxiKCk7ZSsrKXt2YXIgZj1hKGMoZSkpLGc9SmEoZixkKTtpZihnIGluc3RhbmNlb2YgQ2Epe2lmKGcudHlwZT09PVwiYnJlYWtcIilicmVhaztpZihnLnR5cGU9PT1cInJldHVyblwiKXJldHVybiBnfX19ZnVuY3Rpb24gQmQoYSxiLGMpe2lmKHR5cGVvZiBiPT09XCJzdHJpbmdcIilyZXR1cm4gQWQoYSxmdW5jdGlvbigpe3JldHVybiBiLmxlbmd0aH0sZnVuY3Rpb24oZil7cmV0dXJuIGZ9LGMpO2lmKGIgaW5zdGFuY2VvZiBZYXx8YiBpbnN0YW5jZW9mIFdhfHxiIGluc3RhbmNlb2YgV2Mpe3ZhciBkPWIuTmIoKSxlPWQubGVuZ3RoKCk7cmV0dXJuIEFkKGEsZnVuY3Rpb24oKXtyZXR1cm4gZX0sZnVuY3Rpb24oZil7cmV0dXJuIGQuZ2V0KGYpfSxjKX19XG5mdW5jdGlvbiBDZChhLGIsYyl7YT10aGlzLmV2YWx1YXRlKGEpO2I9dGhpcy5ldmFsdWF0ZShiKTtjPXRoaXMuZXZhbHVhdGUoYyk7dmFyIGQ9dGhpcy5GO3JldHVybiBCZChmdW5jdGlvbihlKXtkLnNldChhLGUpO3JldHVybiBkfSxiLGMpfWZ1bmN0aW9uIERkKGEsYixjKXthPXRoaXMuZXZhbHVhdGUoYSk7Yj10aGlzLmV2YWx1YXRlKGIpO2M9dGhpcy5ldmFsdWF0ZShjKTt2YXIgZD10aGlzLkY7cmV0dXJuIEJkKGZ1bmN0aW9uKGUpe3ZhciBmPUlhKGQpO0hhKGYsYSxlLCEwKTtyZXR1cm4gZn0sYixjKX1mdW5jdGlvbiBFZChhLGIsYyl7YT10aGlzLmV2YWx1YXRlKGEpO2I9dGhpcy5ldmFsdWF0ZShiKTtjPXRoaXMuZXZhbHVhdGUoYyk7dmFyIGQ9dGhpcy5GO3JldHVybiBCZChmdW5jdGlvbihlKXt2YXIgZj1JYShkKTtmLmFkZChhLGUpO3JldHVybiBmfSxiLGMpfVxuZnVuY3Rpb24gRmQoYSxiLGMpe2E9dGhpcy5ldmFsdWF0ZShhKTtiPXRoaXMuZXZhbHVhdGUoYik7Yz10aGlzLmV2YWx1YXRlKGMpO3ZhciBkPXRoaXMuRjtyZXR1cm4gR2QoZnVuY3Rpb24oZSl7ZC5zZXQoYSxlKTtyZXR1cm4gZH0sYixjKX1mdW5jdGlvbiBIZChhLGIsYyl7YT10aGlzLmV2YWx1YXRlKGEpO2I9dGhpcy5ldmFsdWF0ZShiKTtjPXRoaXMuZXZhbHVhdGUoYyk7dmFyIGQ9dGhpcy5GO3JldHVybiBHZChmdW5jdGlvbihlKXt2YXIgZj1JYShkKTtIYShmLGEsZSwhMCk7cmV0dXJuIGZ9LGIsYyl9ZnVuY3Rpb24gSWQoYSxiLGMpe2E9dGhpcy5ldmFsdWF0ZShhKTtiPXRoaXMuZXZhbHVhdGUoYik7Yz10aGlzLmV2YWx1YXRlKGMpO3ZhciBkPXRoaXMuRjtyZXR1cm4gR2QoZnVuY3Rpb24oZSl7dmFyIGY9SWEoZCk7Zi5hZGQoYSxlKTtyZXR1cm4gZn0sYixjKX1cbmZ1bmN0aW9uIEdkKGEsYixjKXtpZih0eXBlb2YgYj09PVwic3RyaW5nXCIpcmV0dXJuIEFkKGEsZnVuY3Rpb24oKXtyZXR1cm4gYi5sZW5ndGh9LGZ1bmN0aW9uKGQpe3JldHVybiBiW2RdfSxjKTtpZihiIGluc3RhbmNlb2YgV2EpcmV0dXJuIEFkKGEsZnVuY3Rpb24oKXtyZXR1cm4gYi5sZW5ndGgoKX0sZnVuY3Rpb24oZCl7cmV0dXJuIGIuZ2V0KGQpfSxjKTtpZihlZCgpKXRocm93IG5ldyBnZChcIlRoZSB2YWx1ZSBpcyBub3QgaXRlcmFibGUuXCIpO3Rocm93IG5ldyBUeXBlRXJyb3IoXCJUaGUgdmFsdWUgaXMgbm90IGl0ZXJhYmxlLlwiKTt9XG5mdW5jdGlvbiBKZChhLGIsYyxkKXtmdW5jdGlvbiBlKHAscSl7Zm9yKHZhciByPTA7cjxmLmxlbmd0aCgpO3IrKyl7dmFyIHQ9Zi5nZXQocik7cS5hZGQodCxwLmdldCh0KSl9fXZhciBmPXRoaXMuZXZhbHVhdGUoYSk7aWYoIShmIGluc3RhbmNlb2YgV2EpKXRocm93IEVycm9yKFwiVHlwZUVycm9yOiBOb24tTGlzdCBhcmd1bWVudCBnaXZlbiB0byBGb3JMZXQgaW5zdHJ1Y3Rpb24uXCIpO3ZhciBnPXRoaXMuRjtkPXRoaXMuZXZhbHVhdGUoZCk7dmFyIGs9SWEoZyk7Zm9yKGUoZyxrKTtLYShrLGIpOyl7dmFyIG09SmEoayxkKTtpZihtIGluc3RhbmNlb2YgQ2Epe2lmKG0udHlwZT09PVwiYnJlYWtcIilicmVhaztpZihtLnR5cGU9PT1cInJldHVyblwiKXJldHVybiBtfXZhciBuPUlhKGcpO2UoayxuKTtLYShuLGMpO2s9bn19XG5mdW5jdGlvbiBLZChhLGIpe3ZhciBjPXRoaXMuRixkPXRoaXMuZXZhbHVhdGUoYik7aWYoIShkIGluc3RhbmNlb2YgV2EpKXRocm93IEVycm9yKFwiRXJyb3I6IG5vbi1MaXN0IHZhbHVlIGdpdmVuIGZvciBGbiBhcmd1bWVudCBuYW1lcy5cIik7dmFyIGU9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLDIpO3JldHVybiBuZXcgV2MoYSxmdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbihmKXt2YXIgZz1JYShjKTtnLmo9PT12b2lkIDAmJihnLmo9dGhpcy5GLmopO2Zvcih2YXIgaz1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsMCksbT0wO208ay5sZW5ndGg7bSsrKWlmKGtbbV09dGhpcy5ldmFsdWF0ZShrW21dKSxrW21daW5zdGFuY2VvZiBDYSlyZXR1cm4ga1ttXTtmb3IodmFyIG49ZC5nZXQoXCJsZW5ndGhcIikscD0wO3A8bjtwKyspcDxrLmxlbmd0aD9nLmFkZChkLmdldChwKSxrW3BdKTpnLmFkZChkLmdldChwKSx2b2lkIDApO2cuYWRkKFwiYXJndW1lbnRzXCIsXG5uZXcgV2EoaykpO3ZhciBxPUphKGcsZSk7aWYocSBpbnN0YW5jZW9mIENhKXJldHVybiBxLnR5cGU9PT1cInJldHVyblwiP3EuZGF0YTpxfX0oKSl9ZnVuY3Rpb24gTGQoYSl7YT10aGlzLmV2YWx1YXRlKGEpO3ZhciBiPXRoaXMuRjtpZihNZCYmIWIuaGFzKGEpKXRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihhK1wiIGlzIG5vdCBkZWZpbmVkLlwiKTtyZXR1cm4gYi5nZXQoYSl9XG5mdW5jdGlvbiBOZChhLGIpe3ZhciBjO2E9dGhpcy5ldmFsdWF0ZShhKTtiPXRoaXMuZXZhbHVhdGUoYik7aWYoYT09PXZvaWQgMHx8YT09PW51bGwpe3ZhciBkPVwiVHlwZUVycm9yOiBDYW5ub3QgcmVhZCBwcm9wZXJ0aWVzIG9mIFwiK2ErXCIgKHJlYWRpbmcgJ1wiK2IrXCInKVwiO2lmKGVkKCkpdGhyb3cgbmV3IGdkKGQpO3Rocm93IEVycm9yKGQpO31pZihhIGluc3RhbmNlb2YgWWF8fGEgaW5zdGFuY2VvZiBXYXx8YSBpbnN0YW5jZW9mIFdjKWM9YS5nZXQoYik7ZWxzZSBpZih0eXBlb2YgYT09PVwic3RyaW5nXCIpYj09PVwibGVuZ3RoXCI/Yz1hLmxlbmd0aDpWYShiKSYmKGM9YVtiXSk7ZWxzZSBpZihhIGluc3RhbmNlb2YgYWQpcmV0dXJuO3JldHVybiBjfWZ1bmN0aW9uIE9kKGEsYil7cmV0dXJuIHRoaXMuZXZhbHVhdGUoYSk+dGhpcy5ldmFsdWF0ZShiKX1mdW5jdGlvbiBQZChhLGIpe3JldHVybiB0aGlzLmV2YWx1YXRlKGEpPj10aGlzLmV2YWx1YXRlKGIpfVxuZnVuY3Rpb24gUWQoYSxiKXthPXRoaXMuZXZhbHVhdGUoYSk7Yj10aGlzLmV2YWx1YXRlKGIpO2EgaW5zdGFuY2VvZiBhZCYmKGE9YS5nZXRWYWx1ZSgpKTtiIGluc3RhbmNlb2YgYWQmJihiPWIuZ2V0VmFsdWUoKSk7cmV0dXJuIGE9PT1ifWZ1bmN0aW9uIFJkKGEsYil7cmV0dXJuIVFkLmNhbGwodGhpcyxhLGIpfWZ1bmN0aW9uIFNkKGEsYixjKXt2YXIgZD1bXTt0aGlzLmV2YWx1YXRlKGEpP2Q9dGhpcy5ldmFsdWF0ZShiKTpjJiYoZD10aGlzLmV2YWx1YXRlKGMpKTt2YXIgZT1KYSh0aGlzLkYsZCk7aWYoZSBpbnN0YW5jZW9mIENhKXJldHVybiBlfXZhciBNZD0hMTtcbmZ1bmN0aW9uIFRkKGEsYil7cmV0dXJuIHRoaXMuZXZhbHVhdGUoYSk8dGhpcy5ldmFsdWF0ZShiKX1mdW5jdGlvbiBVZChhLGIpe3JldHVybiB0aGlzLmV2YWx1YXRlKGEpPD10aGlzLmV2YWx1YXRlKGIpfWZ1bmN0aW9uIFZkKCl7Zm9yKHZhciBhPW5ldyBXYSxiPTA7Yjxhcmd1bWVudHMubGVuZ3RoO2IrKyl7dmFyIGM9dGhpcy5ldmFsdWF0ZShhcmd1bWVudHNbYl0pO2EucHVzaChjKX1yZXR1cm4gYX1mdW5jdGlvbiBXZCgpe2Zvcih2YXIgYT1uZXcgWWEsYj0wO2I8YXJndW1lbnRzLmxlbmd0aC0xO2IrPTIpe3ZhciBjPXRoaXMuZXZhbHVhdGUoYXJndW1lbnRzW2JdKStcIlwiLGQ9dGhpcy5ldmFsdWF0ZShhcmd1bWVudHNbYisxXSk7YS5zZXQoYyxkKX1yZXR1cm4gYX1mdW5jdGlvbiBYZChhLGIpe3JldHVybiB0aGlzLmV2YWx1YXRlKGEpJXRoaXMuZXZhbHVhdGUoYil9ZnVuY3Rpb24gWWQoYSxiKXtyZXR1cm4gdGhpcy5ldmFsdWF0ZShhKSp0aGlzLmV2YWx1YXRlKGIpfVxuZnVuY3Rpb24gWmQoYSl7cmV0dXJuLXRoaXMuZXZhbHVhdGUoYSl9ZnVuY3Rpb24gJGQoYSl7cmV0dXJuIXRoaXMuZXZhbHVhdGUoYSl9ZnVuY3Rpb24gYWUoYSxiKXtyZXR1cm4heWQuY2FsbCh0aGlzLGEsYil9ZnVuY3Rpb24gYmUoKXtyZXR1cm4gbnVsbH1mdW5jdGlvbiBjZShhLGIpe3JldHVybiB0aGlzLmV2YWx1YXRlKGEpfHx0aGlzLmV2YWx1YXRlKGIpfWZ1bmN0aW9uIGRlKGEsYil7dmFyIGM9dGhpcy5ldmFsdWF0ZShhKTt0aGlzLmV2YWx1YXRlKGIpO3JldHVybiBjfWZ1bmN0aW9uIGVlKGEpe3JldHVybiB0aGlzLmV2YWx1YXRlKGEpfWZ1bmN0aW9uIGZlKCl7cmV0dXJuIEFycmF5LnByb3RvdHlwZS5zbGljZS5hcHBseShhcmd1bWVudHMpfWZ1bmN0aW9uIGdlKGEpe3JldHVybiBuZXcgQ2EoXCJyZXR1cm5cIix0aGlzLmV2YWx1YXRlKGEpKX1cbmZ1bmN0aW9uIGhlKGEsYixjKXthPXRoaXMuZXZhbHVhdGUoYSk7Yj10aGlzLmV2YWx1YXRlKGIpO2M9dGhpcy5ldmFsdWF0ZShjKTtpZihhPT09bnVsbHx8YT09PXZvaWQgMCl7dmFyIGQ9XCJUeXBlRXJyb3I6IENhbid0IHNldCBwcm9wZXJ0eSBcIitiK1wiIG9mIFwiK2ErXCIuXCI7aWYoZWQoKSl0aHJvdyBuZXcgZ2QoZCk7dGhyb3cgRXJyb3IoZCk7fShhIGluc3RhbmNlb2YgV2N8fGEgaW5zdGFuY2VvZiBXYXx8YSBpbnN0YW5jZW9mIFlhKSYmYS5zZXQoYixjKTtyZXR1cm4gY31mdW5jdGlvbiBpZShhLGIpe3JldHVybiB0aGlzLmV2YWx1YXRlKGEpLXRoaXMuZXZhbHVhdGUoYil9XG5mdW5jdGlvbiBqZShhLGIsYyl7YT10aGlzLmV2YWx1YXRlKGEpO3ZhciBkPXRoaXMuZXZhbHVhdGUoYiksZT10aGlzLmV2YWx1YXRlKGMpO2lmKCFBcnJheS5pc0FycmF5KGQpfHwhQXJyYXkuaXNBcnJheShlKSl0aHJvdyBFcnJvcihcIkVycm9yOiBNYWxmb3JtZWQgc3dpdGNoIGluc3RydWN0aW9uLlwiKTtmb3IodmFyIGYsZz0hMSxrPTA7azxkLmxlbmd0aDtrKyspaWYoZ3x8YT09PXRoaXMuZXZhbHVhdGUoZFtrXSkpaWYoZj10aGlzLmV2YWx1YXRlKGVba10pLGYgaW5zdGFuY2VvZiBDYSl7dmFyIG09Zi50eXBlO2lmKG09PT1cImJyZWFrXCIpcmV0dXJuO2lmKG09PT1cInJldHVyblwifHxtPT09XCJjb250aW51ZVwiKXJldHVybiBmfWVsc2UgZz0hMDtpZihlLmxlbmd0aD09PWQubGVuZ3RoKzEmJihmPXRoaXMuZXZhbHVhdGUoZVtlLmxlbmd0aC0xXSksZiBpbnN0YW5jZW9mIENhJiYoZi50eXBlPT09XCJyZXR1cm5cInx8Zi50eXBlPT09XCJjb250aW51ZVwiKSkpcmV0dXJuIGZ9XG5mdW5jdGlvbiBrZShhLGIsYyl7cmV0dXJuIHRoaXMuZXZhbHVhdGUoYSk/dGhpcy5ldmFsdWF0ZShiKTp0aGlzLmV2YWx1YXRlKGMpfWZ1bmN0aW9uIGxlKGEpe2E9dGhpcy5ldmFsdWF0ZShhKTtyZXR1cm4gYSBpbnN0YW5jZW9mIFdjP1wiZnVuY3Rpb25cIjp0eXBlb2YgYX1mdW5jdGlvbiBtZSgpe2Zvcih2YXIgYT10aGlzLkYsYj0wO2I8YXJndW1lbnRzLmxlbmd0aDtiKyspe3ZhciBjPWFyZ3VtZW50c1tiXTt0eXBlb2YgYyE9PVwic3RyaW5nXCJ8fGEuYWRkKGMsdm9pZCAwKX19XG5mdW5jdGlvbiBuZShhLGIsYyxkKXt2YXIgZT10aGlzLmV2YWx1YXRlKGQpO2lmKHRoaXMuZXZhbHVhdGUoYykpe3ZhciBmPUphKHRoaXMuRixlKTtpZihmIGluc3RhbmNlb2YgQ2Epe2lmKGYudHlwZT09PVwiYnJlYWtcIilyZXR1cm47aWYoZi50eXBlPT09XCJyZXR1cm5cIilyZXR1cm4gZn19Zm9yKDt0aGlzLmV2YWx1YXRlKGEpOyl7dmFyIGc9SmEodGhpcy5GLGUpO2lmKGcgaW5zdGFuY2VvZiBDYSl7aWYoZy50eXBlPT09XCJicmVha1wiKWJyZWFrO2lmKGcudHlwZT09PVwicmV0dXJuXCIpcmV0dXJuIGd9dGhpcy5ldmFsdWF0ZShiKX19ZnVuY3Rpb24gb2UoYSl7cmV0dXJufk51bWJlcih0aGlzLmV2YWx1YXRlKGEpKX1mdW5jdGlvbiBwZShhLGIpe3JldHVybiBOdW1iZXIodGhpcy5ldmFsdWF0ZShhKSk8PE51bWJlcih0aGlzLmV2YWx1YXRlKGIpKX1mdW5jdGlvbiBxZShhLGIpe3JldHVybiBOdW1iZXIodGhpcy5ldmFsdWF0ZShhKSk+Pk51bWJlcih0aGlzLmV2YWx1YXRlKGIpKX1cbmZ1bmN0aW9uIHJlKGEsYil7cmV0dXJuIE51bWJlcih0aGlzLmV2YWx1YXRlKGEpKT4+Pk51bWJlcih0aGlzLmV2YWx1YXRlKGIpKX1mdW5jdGlvbiBzZShhLGIpe3JldHVybiBOdW1iZXIodGhpcy5ldmFsdWF0ZShhKSkmTnVtYmVyKHRoaXMuZXZhbHVhdGUoYikpfWZ1bmN0aW9uIHRlKGEsYil7cmV0dXJuIE51bWJlcih0aGlzLmV2YWx1YXRlKGEpKV5OdW1iZXIodGhpcy5ldmFsdWF0ZShiKSl9ZnVuY3Rpb24gdWUoYSxiKXtyZXR1cm4gTnVtYmVyKHRoaXMuZXZhbHVhdGUoYSkpfE51bWJlcih0aGlzLmV2YWx1YXRlKGIpKX1mdW5jdGlvbiB2ZSgpe31cbmZ1bmN0aW9uIHdlKGEsYixjLGQsZSl7dmFyIGY9ITA7dHJ5e3ZhciBnPXRoaXMuZXZhbHVhdGUoYyk7aWYoZyBpbnN0YW5jZW9mIENhKXJldHVybiBnfWNhdGNoKHIpe2lmKCEociBpbnN0YW5jZW9mIGdkJiZhKSl0aHJvdyBmPXIgaW5zdGFuY2VvZiBnZCxyO3ZhciBrPUlhKHRoaXMuRiksbT1uZXcgYWQocik7ay5hZGQoYixtKTt2YXIgbj10aGlzLmV2YWx1YXRlKGQpLHA9SmEoayxuKTtpZihwIGluc3RhbmNlb2YgQ2EpcmV0dXJuIHB9ZmluYWxseXtpZihmJiZlIT09dm9pZCAwKXt2YXIgcT10aGlzLmV2YWx1YXRlKGUpO2lmKHEgaW5zdGFuY2VvZiBDYSlyZXR1cm4gcX19fTt2YXIgeWU9ZnVuY3Rpb24oKXt0aGlzLmo9bmV3IExhO3hlKHRoaXMpfTt5ZS5wcm90b3R5cGUuZXhlY3V0ZT1mdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5qLkxoKGEpfTt2YXIgeGU9ZnVuY3Rpb24oYSl7dmFyIGI9ZnVuY3Rpb24oYyxkKXt2YXIgZT1uZXcgV2MoU3RyaW5nKGMpLGQpO2UuS2EoKTthLmouai5zZXQoU3RyaW5nKGMpLGUpfTtiKFwibWFwXCIsV2QpO2IoXCJhbmRcIixRYyk7YihcImNvbnRhaW5zXCIsVGMpO2IoXCJlcXVhbHNcIixSYyk7YihcIm9yXCIsU2MpO2IoXCJzdGFydHNXaXRoXCIsVWMpO2IoXCJ2YXJpYWJsZVwiLFZjKX07dmFyIEFlPWZ1bmN0aW9uKCl7dGhpcy5EPSExO3RoaXMuaj1uZXcgTGE7emUodGhpcyk7dGhpcy5EPSEwfTtBZS5wcm90b3R5cGUuZXhlY3V0ZT1mdW5jdGlvbihhKXtyZXR1cm4gQmUodGhpcy5qLkxoKGEpKX07dmFyIENlPWZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gQmUoYS5qLk1rKGIsYykpfTtBZS5wcm90b3R5cGUuS2E9ZnVuY3Rpb24oKXt0aGlzLmouS2EoKX07XG52YXIgemU9ZnVuY3Rpb24oYSl7dmFyIGI9ZnVuY3Rpb24oYyxkKXt2YXIgZT1TdHJpbmcoYyksZj1uZXcgV2MoZSxkKTtmLkthKCk7YS5qLmouc2V0KGUsZil9O2IoMCxrZCk7YigxLGxkKTtiKDIsbWQpO2IoMyxuZCk7Yig1NixzZSk7Yig1NyxwZSk7Yig1OCxvZSk7Yig1OSx1ZSk7Yig2MCxxZSk7Yig2MSxyZSk7Yig2Mix0ZSk7Yig1MyxvZCk7Yig0LHBkKTtiKDUscWQpO2IoNTIscmQpO2IoNixzZCk7Yig0OSx2ZCk7Yig3LFZkKTtiKDgsV2QpO2IoOSxxZCk7Yig1MCx3ZCk7YigxMCx4ZCk7YigxMix5ZCk7YigxMyx6ZCk7Yig1MSxLZCk7Yig0NyxDZCk7Yig1NCxEZCk7Yig1NSxFZCk7Yig2MyxKZCk7Yig2NCxGZCk7Yig2NSxIZCk7Yig2NixJZCk7YigxNSxMZCk7YigxNixOZCk7YigxNyxOZCk7YigxOCxPZCk7YigxOSxQZCk7YigyMCxRZCk7YigyMSxSZCk7YigyMixTZCk7YigyMyxUZCk7YigyNCxVZCk7YigyNSxYZCk7YigyNixZZCk7YigyNyxaZCk7YigyOCwkZCk7YigyOSxcbmFlKTtiKDQ1LGJlKTtiKDMwLGNlKTtiKDMyLGRlKTtiKDMzLGRlKTtiKDM0LGVlKTtiKDM1LGVlKTtiKDQ2LGZlKTtiKDM2LGdlKTtiKDQzLGhlKTtiKDM3LGllKTtiKDM4LGplKTtiKDM5LGtlKTtiKDY3LHdlKTtiKDQwLGxlKTtiKDQ0LHZlKTtiKDQxLG1lKTtiKDQyLG5lKX07QWUucHJvdG90eXBlLnJkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuai5yZCgpfTtmdW5jdGlvbiBCZShhKXtpZihhIGluc3RhbmNlb2YgQ2F8fGEgaW5zdGFuY2VvZiBXY3x8YSBpbnN0YW5jZW9mIFdhfHxhIGluc3RhbmNlb2YgWWF8fGEgaW5zdGFuY2VvZiBhZHx8YT09PW51bGx8fGE9PT12b2lkIDB8fHR5cGVvZiBhPT09XCJzdHJpbmdcInx8dHlwZW9mIGE9PT1cIm51bWJlclwifHx0eXBlb2YgYT09PVwiYm9vbGVhblwiKXJldHVybiBhfTt2YXIgRGU9ZnVuY3Rpb24oYSl7dGhpcy5tZXNzYWdlPWF9O2Z1bmN0aW9uIEVlKGEpe3ZhciBiPVwiMDEyMzQ1Njc4OWFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6QUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVotX1wiW2FdO3JldHVybiBiPT09dm9pZCAwP25ldyBEZShcIlZhbHVlIFwiK2ErXCIgY2FuIG5vdCBiZSBlbmNvZGVkIGluIHdlYi1zYWZlIGJhc2U2NCBkaWN0aW9uYXJ5LlwiKTpifTtmdW5jdGlvbiBGZShhKXtzd2l0Y2goYSl7Y2FzZSAxOnJldHVyblwiMVwiO2Nhc2UgMjpjYXNlIDQ6cmV0dXJuXCIwXCI7ZGVmYXVsdDpyZXR1cm5cIi1cIn19O3ZhciBHZT0vXlsxLTlhLXpBLVpfLV1bMS05YS1jXVsxLTlhLXZdXFxkJC87ZnVuY3Rpb24gSGUoYSxiKXtmb3IodmFyIGM9XCJcIixkPSEwO2E+Nzspe3ZhciBlPWEmMzE7YT4+PTU7ZD9kPSExOmV8PTMyO2M9XCJcIitFZShlKStjfWE8PD0yO2R8fChhfD0zMik7cmV0dXJuIGM9XCJcIitFZShhfGIpK2N9O3ZhciBJZT1mdW5jdGlvbigpe2Z1bmN0aW9uIGEoYil7cmV0dXJue3RvU3RyaW5nOmZ1bmN0aW9uKCl7cmV0dXJuIGJ9fX1yZXR1cm57cGs6YShcImNvbnNlbnRcIiksWGg6YShcImNvbnZlcnRfY2FzZV90b1wiKSxZaDphKFwiY29udmVydF9mYWxzZV90b1wiKSxaaDphKFwiY29udmVydF9udWxsX3RvXCIpLGFpOmEoXCJjb252ZXJ0X3RydWVfdG9cIiksYmk6YShcImNvbnZlcnRfdW5kZWZpbmVkX3RvXCIpLGxuOmEoXCJkZWJ1Z19tb2RlX21ldGFkYXRhXCIpLG1hOmEoXCJmdW5jdGlvblwiKSxQZzphKFwiaW5zdGFuY2VfbmFtZVwiKSxQazphKFwibGl2ZV9vbmx5XCIpLFFrOmEoXCJtYWx3YXJlX2Rpc2FibGVkXCIpLE1FVEFEQVRBOmEoXCJtZXRhZGF0YVwiKSxUazphKFwib3JpZ2luYWxfYWN0aXZpdHlfaWRcIiksdW46YShcIm9yaWdpbmFsX3ZlbmRvcl90ZW1wbGF0ZV9pZFwiKSx0bjphKFwib25jZV9vbl9sb2FkXCIpLFNrOmEoXCJvbmNlX3Blcl9ldmVudFwiKSxrajphKFwib25jZV9wZXJfbG9hZFwiKSx3bjphKFwicHJpb3JpdHlfb3ZlcnJpZGVcIiksXG54bjphKFwicmVzcGVjdGVkX2NvbnNlbnRfdHlwZXNcIiksc2o6YShcInNldHVwX3RhZ3NcIiksdGU6YShcInRhZ19pZFwiKSx4ajphKFwidGVhcmRvd25fdGFnc1wiKX19KCk7dmFyIGZmO3ZhciBnZj1bXSxoZj1bXSxqZj1bXSxrZj1bXSxsZj1bXSxtZj17fSxuZixvZjtmdW5jdGlvbiBwZihhKXtvZj1vZnx8YX1cbmZ1bmN0aW9uIHFmKGEpe312YXIgcmYsc2Y9W10sdGY9W107ZnVuY3Rpb24gdWYoYSxiKXt2YXIgYz17fTtjW0llLm1hXT1cIl9fXCIrYTtmb3IodmFyIGQgaW4gYiliLmhhc093blByb3BlcnR5KGQpJiYoY1tcInZ0cF9cIitkXT1iW2RdKTtyZXR1cm4gY31cbmZ1bmN0aW9uIHZmKGEsYixjKXt0cnl7cmV0dXJuIG5mKHdmKGEsYixjKSl9Y2F0Y2goZCl7SlNPTi5zdHJpbmdpZnkoYSl9cmV0dXJuIDJ9ZnVuY3Rpb24geGYoYSl7dmFyIGI9YVtJZS5tYV07aWYoIWIpdGhyb3cgRXJyb3IoXCJFcnJvcjogTm8gZnVuY3Rpb24gbmFtZSBnaXZlbiBmb3IgZnVuY3Rpb24gY2FsbC5cIik7cmV0dXJuISFtZltiXX1cbnZhciB3Zj1mdW5jdGlvbihhLGIsYyl7Yz1jfHxbXTt2YXIgZD17fSxlO2ZvcihlIGluIGEpYS5oYXNPd25Qcm9wZXJ0eShlKSYmKGRbZV09eWYoYVtlXSxiLGMpKTtyZXR1cm4gZH0seWY9ZnVuY3Rpb24oYSxiLGMpe2lmKEFycmF5LmlzQXJyYXkoYSkpe3ZhciBkO3N3aXRjaChhWzBdKXtjYXNlIFwiZnVuY3Rpb25faWRcIjpyZXR1cm4gYVsxXTtjYXNlIFwibGlzdFwiOmQ9W107Zm9yKHZhciBlPTE7ZTxhLmxlbmd0aDtlKyspZC5wdXNoKHlmKGFbZV0sYixjKSk7cmV0dXJuIGQ7Y2FzZSBcIm1hY3JvXCI6dmFyIGY9YVsxXTtpZihjW2ZdKXJldHVybjt2YXIgZz1nZltmXTtpZighZ3x8Yi5pc0Jsb2NrZWQoZykpcmV0dXJuO2NbZl09ITA7dmFyIGs9U3RyaW5nKGdbSWUuUGddKTt0cnl7dmFyIG09d2YoZyxiLGMpO20udnRwX2d0bUV2ZW50SWQ9Yi5pZDtiLnByaW9yaXR5SWQmJihtLnZ0cF9ndG1Qcmlvcml0eUlkPWIucHJpb3JpdHlJZCk7ZD16ZihtLHtldmVudDpiLGluZGV4OmYsdHlwZToyLFxubmFtZTprfSk7cmYmJihkPXJmLm9sKGQsbSkpfWNhdGNoKHkpe2IubG9nTWFjcm9FcnJvciYmYi5sb2dNYWNyb0Vycm9yKHksTnVtYmVyKGYpLGspLGQ9ITF9Y1tmXT0hMTtyZXR1cm4gZDtjYXNlIFwibWFwXCI6ZD17fTtmb3IodmFyIG49MTtuPGEubGVuZ3RoO24rPTIpZFt5ZihhW25dLGIsYyldPXlmKGFbbisxXSxiLGMpO3JldHVybiBkO2Nhc2UgXCJ0ZW1wbGF0ZVwiOmQ9W107Zm9yKHZhciBwPSExLHE9MTtxPGEubGVuZ3RoO3ErKyl7dmFyIHI9eWYoYVtxXSxiLGMpO29mJiYocD1wfHxvZi5kbShyKSk7ZC5wdXNoKHIpfXJldHVybiBvZiYmcD9vZi5ybChkKTpkLmpvaW4oXCJcIik7Y2FzZSBcImVzY2FwZVwiOmQ9eWYoYVsxXSxiLGMpO2lmKG9mJiZBcnJheS5pc0FycmF5KGFbMV0pJiZhWzFdWzBdPT09XCJtYWNyb1wiJiZvZi5mbShhKSlyZXR1cm4gb2YuRG0oZCk7ZD1TdHJpbmcoZCk7Zm9yKHZhciB0PTI7dDxhLmxlbmd0aDt0KyspSmVbYVt0XV0mJihkPUplW2FbdF1dKGQpKTtyZXR1cm4gZDtcbmNhc2UgXCJ0YWdcIjp2YXIgdT1hWzFdO2lmKCFrZlt1XSl0aHJvdyBFcnJvcihcIlVuYWJsZSB0byByZXNvbHZlIHRhZyByZWZlcmVuY2UgXCIrdStcIi5cIik7cmV0dXJue0RqOmFbMl0saW5kZXg6dX07Y2FzZSBcInpiXCI6dmFyIHY9e2FyZzA6YVsyXSxhcmcxOmFbM10saWdub3JlX2Nhc2U6YVs1XX07dltJZS5tYV09YVsxXTt2YXIgdz12Zih2LGIsYykseD0hIWFbNF07cmV0dXJuIHh8fHchPT0yP3ghPT0odz09PTEpOm51bGw7ZGVmYXVsdDp0aHJvdyBFcnJvcihcIkF0dGVtcHRpbmcgdG8gZXhwYW5kIHVua25vd24gVmFsdWUgdHlwZTogXCIrYVswXStcIi5cIik7fX1yZXR1cm4gYX0semY9ZnVuY3Rpb24oYSxiKXt2YXIgYz1hW0llLm1hXSxkPWImJmIuZXZlbnQ7aWYoIWMpdGhyb3cgRXJyb3IoXCJFcnJvcjogTm8gZnVuY3Rpb24gbmFtZSBnaXZlbiBmb3IgZnVuY3Rpb24gY2FsbC5cIik7dmFyIGU9bWZbY10sZj1iJiZiLnR5cGU9PT0yJiYoZD09bnVsbD92b2lkIDA6ZC5yZXBvcnRNYWNyb0Rpc2NyZXBhbmN5KSYmXG5lJiZzZi5pbmRleE9mKGMpIT09LTEsZz17fSxrPXt9LG07Zm9yKG0gaW4gYSlhLmhhc093blByb3BlcnR5KG0pJiZHYihtLFwidnRwX1wiKSYmKGUmJihnW21dPWFbbV0pLCFlfHxmKSYmKGtbbS5zdWJzdHJpbmcoNCldPWFbbV0pO2UmJmQmJmQuY2FjaGVkTW9kZWxWYWx1ZXMmJihnLnZ0cF9ndG1DYWNoZWRWYWx1ZXM9ZC5jYWNoZWRNb2RlbFZhbHVlcyk7aWYoYil7aWYoYi5uYW1lPT1udWxsKXt2YXIgbjthOnt2YXIgcD1iLnR5cGUscT1iLmluZGV4O2lmKHE9PW51bGwpbj1cIlwiO2Vsc2V7dmFyIHI7c3dpdGNoKHApe2Nhc2UgMjpyPWdmW3FdO2JyZWFrO2Nhc2UgMTpyPWtmW3FdO2JyZWFrO2RlZmF1bHQ6bj1cIlwiO2JyZWFrIGF9dmFyIHQ9ciYmcltJZS5QZ107bj10P1N0cmluZyh0KTpcIlwifX1iLm5hbWU9bn1lJiYoZy52dHBfZ3RtRW50aXR5SW5kZXg9Yi5pbmRleCxnLnZ0cF9ndG1FbnRpdHlOYW1lPWIubmFtZSl9dmFyIHUsdix3O2lmKGYmJnRmLmluZGV4T2YoYyk9PT0tMSl7dGYucHVzaChjKTtcbnZhciB4PUJiKCk7dT1lKGcpO3ZhciB5PUJiKCkteCxBPUJiKCk7dj1mZihjLGssYik7dz15LShCYigpLUEpfWVsc2UgaWYoZSYmKHU9ZShnKSksIWV8fGYpdj1mZihjLGssYik7ZiYmZCYmKGQucmVwb3J0TWFjcm9EaXNjcmVwYW5jeShkLmlkLGMsdm9pZCAwLCEwKSxVYSh1KT8oQXJyYXkuaXNBcnJheSh1KT9BcnJheS5pc0FycmF5KHYpOlNhKHUpP1NhKHYpOnR5cGVvZiB1PT09XCJmdW5jdGlvblwiP3R5cGVvZiB2PT09XCJmdW5jdGlvblwiOnU9PT12KXx8ZC5yZXBvcnRNYWNyb0Rpc2NyZXBhbmN5KGQuaWQsYyk6dSE9PXYmJmQucmVwb3J0TWFjcm9EaXNjcmVwYW5jeShkLmlkLGMpLHchPT12b2lkIDAmJmQucmVwb3J0TWFjcm9EaXNjcmVwYW5jeShkLmlkLGMsdykpO3JldHVybiBlP3U6dn07dmFyIEFmPWZ1bmN0aW9uKGEsYixjKXt2YXIgZDtkPUVycm9yLmNhbGwodGhpcyxjKTt0aGlzLm1lc3NhZ2U9ZC5tZXNzYWdlO1wic3RhY2tcImluIGQmJih0aGlzLnN0YWNrPWQuc3RhY2spO3RoaXMucGVybWlzc2lvbklkPWE7dGhpcy5wYXJhbWV0ZXJzPWI7dGhpcy5uYW1lPVwiUGVybWlzc2lvbkVycm9yXCJ9O3lhKEFmLEVycm9yKTtBZi5wcm90b3R5cGUuZ2V0TWVzc2FnZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLm1lc3NhZ2V9O2Z1bmN0aW9uIEJmKGEsYil7aWYoQXJyYXkuaXNBcnJheShhKSl7T2JqZWN0LmRlZmluZVByb3BlcnR5KGEsXCJjb250ZXh0XCIse3ZhbHVlOntsaW5lOmJbMF19fSk7Zm9yKHZhciBjPTE7YzxhLmxlbmd0aDtjKyspQmYoYVtjXSxiW2NdKX19O3ZhciBDZj1mdW5jdGlvbihhLGIpe3ZhciBjO2M9RXJyb3IuY2FsbCh0aGlzLFwiV3JhcHBlZCBlcnJvciBmb3IgRHVzdCBkZWJ1Z2dpbmcuIE9yaWdpbmFsIGVycm9yIG1lc3NhZ2U6IFwiK2EubWVzc2FnZSk7dGhpcy5tZXNzYWdlPWMubWVzc2FnZTtcInN0YWNrXCJpbiBjJiYodGhpcy5zdGFjaz1jLnN0YWNrKTt0aGlzLnhtPWE7dGhpcy5qPVtdO3RoaXMuRD1ifTt5YShDZixFcnJvcik7ZnVuY3Rpb24gRGYoKXtyZXR1cm4gZnVuY3Rpb24oYSxiKXthIGluc3RhbmNlb2YgQ2Z8fChhPW5ldyBDZihhLEVmKSk7YiYmYSBpbnN0YW5jZW9mIENmJiZhLmoucHVzaChiKTt0aHJvdyBhO319ZnVuY3Rpb24gRWYoYSl7aWYoIWEubGVuZ3RoKXJldHVybiBhO2EucHVzaCh7aWQ6XCJtYWluXCIsbGluZTowfSk7Zm9yKHZhciBiPWEubGVuZ3RoLTE7Yj4wO2ItLSlwYihhW2JdLmlkKSYmYS5zcGxpY2UoYisrLDEpO2Zvcih2YXIgYz1hLmxlbmd0aC0xO2M+MDtjLS0pYVtjXS5saW5lPWFbYy0xXS5saW5lO2Euc3BsaWNlKDAsMSk7cmV0dXJuIGF9O2Z1bmN0aW9uIEZmKGEpe2Z1bmN0aW9uIGIocil7Zm9yKHZhciB0PTA7dDxyLmxlbmd0aDt0KyspZFtyW3RdXT0hMH1mb3IodmFyIGM9W10sZD1bXSxlPUdmKGEpLGY9MDtmPGhmLmxlbmd0aDtmKyspe3ZhciBnPWhmW2ZdLGs9SGYoZyxlKTtpZihrKXtmb3IodmFyIG09Zy5hZGR8fFtdLG49MDtuPG0ubGVuZ3RoO24rKyljW21bbl1dPSEwO2IoZy5ibG9ja3x8W10pfWVsc2Ugaz09PW51bGwmJmIoZy5ibG9ja3x8W10pO31mb3IodmFyIHA9W10scT0wO3E8a2YubGVuZ3RoO3ErKyljW3FdJiYhZFtxXSYmKHBbcV09ITApO3JldHVybiBwfVxuZnVuY3Rpb24gSGYoYSxiKXtmb3IodmFyIGM9YVtcImlmXCJdfHxbXSxkPTA7ZDxjLmxlbmd0aDtkKyspe3ZhciBlPWIoY1tkXSk7aWYoZT09PTApcmV0dXJuITE7aWYoZT09PTIpcmV0dXJuIG51bGx9Zm9yKHZhciBmPWEudW5sZXNzfHxbXSxnPTA7ZzxmLmxlbmd0aDtnKyspe3ZhciBrPWIoZltnXSk7aWYoaz09PTIpcmV0dXJuIG51bGw7aWYoaz09PTEpcmV0dXJuITF9cmV0dXJuITB9ZnVuY3Rpb24gR2YoYSl7dmFyIGI9W107cmV0dXJuIGZ1bmN0aW9uKGMpe2JbY109PT12b2lkIDAmJihiW2NdPXZmKGpmW2NdLGEpKTtyZXR1cm4gYltjXX19O3ZhciBJZj17b2w6ZnVuY3Rpb24oYSxiKXtiW0llLlhoXSYmdHlwZW9mIGE9PT1cInN0cmluZ1wiJiYoYT1iW0llLlhoXT09PTE/YS50b0xvd2VyQ2FzZSgpOmEudG9VcHBlckNhc2UoKSk7Yi5oYXNPd25Qcm9wZXJ0eShJZS5aaCkmJmE9PT1udWxsJiYoYT1iW0llLlpoXSk7Yi5oYXNPd25Qcm9wZXJ0eShJZS5iaSkmJmE9PT12b2lkIDAmJihhPWJbSWUuYmldKTtiLmhhc093blByb3BlcnR5KEllLmFpKSYmYT09PSEwJiYoYT1iW0llLmFpXSk7Yi5oYXNPd25Qcm9wZXJ0eShJZS5ZaCkmJmE9PT0hMSYmKGE9YltJZS5ZaF0pO3JldHVybiBhfX07dmFyIEpmPWZ1bmN0aW9uKCl7dGhpcy5qPXt9fSxMZj1mdW5jdGlvbihhLGIpe3ZhciBjPUtmLmosZDsoZD1jLmopW2FdIT1udWxsfHwoZFthXT1bXSk7Yy5qW2FdLnB1c2goZnVuY3Rpb24oKXtyZXR1cm4gYi5hcHBseShudWxsLHBhKHphLmFwcGx5KDAsYXJndW1lbnRzKSkpfSl9O2Z1bmN0aW9uIE1mKGEsYixjLGQpe2lmKGEpZm9yKHZhciBlPTA7ZTxhLmxlbmd0aDtlKyspe3ZhciBmPXZvaWQgMCxnPVwiQSBwb2xpY3kgZnVuY3Rpb24gZGVuaWVkIHRoZSBwZXJtaXNzaW9uIHJlcXVlc3RcIjt0cnl7Zj1hW2VdKGIsYyxkKSxnKz1cIi5cIn1jYXRjaChrKXtnPXR5cGVvZiBrPT09XCJzdHJpbmdcIj9nKyhcIjogXCIrayk6ayBpbnN0YW5jZW9mIEVycm9yP2crKFwiOiBcIitrLm1lc3NhZ2UpOmcrXCIuXCJ9aWYoIWYpdGhyb3cgbmV3IEFmKGMsZCxnKTt9fVxuZnVuY3Rpb24gTmYoYSxiLGMpe3JldHVybiBmdW5jdGlvbigpe3ZhciBkPWFyZ3VtZW50c1swXTtpZihkKXt2YXIgZT1hLmpbZF0sZj1hLmouYWxsO2lmKGV8fGYpe3ZhciBnPWMuYXBwbHkodm9pZCAwLEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywwKSk7TWYoZSxiLGQsZyk7TWYoZixiLGQsZyl9fX19O3ZhciBSZj1mdW5jdGlvbigpe3ZhciBhPWRhdGEucGVybWlzc2lvbnN8fHt9LGI9T2YuY3RpZCxjPXRoaXM7dGhpcy5EPXt9O3RoaXMuaj1uZXcgSmY7dmFyIGQ9e30sZT17fSxmPU5mKHRoaXMuaixiLGZ1bmN0aW9uKCl7dmFyIGc9YXJndW1lbnRzWzBdO3JldHVybiBnJiZkW2ddP2RbZ10uYXBwbHkodm9pZCAwLEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywwKSk6e319KTt6KGEsZnVuY3Rpb24oZyxrKXtmdW5jdGlvbiBtKHApe3ZhciBxPXphLmFwcGx5KDEsYXJndW1lbnRzKTtpZighbltwXSl0aHJvdyBQZihwLHt9LFwiVGhlIHJlcXVlc3RlZCBhZGRpdGlvbmFsIHBlcm1pc3Npb24gXCIrcCtcIiBpcyBub3QgY29uZmlndXJlZC5cIik7Zi5hcHBseShudWxsLFtwXS5jb25jYXQocGEocSkpKX12YXIgbj17fTt6KGssZnVuY3Rpb24ocCxxKXt2YXIgcj1RZihwLHEpO25bcF09ci5hc3NlcnQ7ZFtwXXx8KGRbcF09ci5OKTtyLnpqJiYhZVtwXSYmKGVbcF09ci56ail9KTtcbmMuRFtnXT1mdW5jdGlvbihwLHEpe3ZhciByPW5bcF07aWYoIXIpdGhyb3cgUGYocCx7fSxcIlRoZSByZXF1ZXN0ZWQgcGVybWlzc2lvbiBcIitwK1wiIGlzIG5vdCBjb25maWd1cmVkLlwiKTt2YXIgdD1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsMCk7ci5hcHBseSh2b2lkIDAsdCk7Zi5hcHBseSh2b2lkIDAsdCk7dmFyIHU9ZVtwXTt1JiZ1LmFwcGx5KG51bGwsW21dLmNvbmNhdChwYSh0LnNsaWNlKDEpKSkpfX0pfSxTZj1mdW5jdGlvbihhKXtyZXR1cm4gS2YuRFthXXx8ZnVuY3Rpb24oKXt9fTtcbmZ1bmN0aW9uIFFmKGEsYil7dmFyIGM9dWYoYSxiKTtjLnZ0cF9wZXJtaXNzaW9uTmFtZT1hO2MudnRwX2NyZWF0ZVBlcm1pc3Npb25FcnJvcj1QZjt0cnl7cmV0dXJuIHpmKGMpfWNhdGNoKGQpe3JldHVybnthc3NlcnQ6ZnVuY3Rpb24oZSl7dGhyb3cgbmV3IEFmKGUse30sXCJQZXJtaXNzaW9uIFwiK2UrXCIgaXMgdW5rbm93bi5cIik7fSxOOmZ1bmN0aW9uKCl7dGhyb3cgbmV3IEFmKGEse30sXCJQZXJtaXNzaW9uIFwiK2ErXCIgaXMgdW5rbm93bi5cIik7fX19fWZ1bmN0aW9uIFBmKGEsYixjKXtyZXR1cm4gbmV3IEFmKGEsYixjKX07dmFyIFRmPSExO3ZhciBVZj17fTtVZi5naz14YignJyk7VWYueGw9eGIoJycpO3ZhciAkZj17fSxhZz0oJGYudWFhPSEwLCRmLnVhYj0hMCwkZi51YWZ2bD0hMCwkZi51YW1iPSEwLCRmLnVhbT0hMCwkZi51YXA9ITAsJGYudWFwdj0hMCwkZi51YXc9ITAsJGYpO1xudmFyIGlnPWZ1bmN0aW9uKGEsYil7Zm9yKHZhciBjPTA7YzxiLmxlbmd0aDtjKyspe3ZhciBkPWEsZT1iW2NdO2lmKCFnZy5leGVjKGUpKXRocm93IEVycm9yKFwiSW52YWxpZCBrZXkgd2lsZGNhcmRcIik7dmFyIGY9ZS5pbmRleE9mKFwiLipcIiksZz1mIT09LTEmJmY9PT1lLmxlbmd0aC0yLGs9Zz9lLnNsaWNlKDAsZS5sZW5ndGgtMik6ZSxtO2E6aWYoZC5sZW5ndGg9PT0wKW09ITE7ZWxzZXtmb3IodmFyIG49ZC5zcGxpdChcIi5cIikscD0wO3A8bi5sZW5ndGg7cCsrKWlmKCFoZy5leGVjKG5bcF0pKXttPSExO2JyZWFrIGF9bT0hMH1pZighbXx8ay5sZW5ndGg+ZC5sZW5ndGh8fCFnJiZkLmxlbmd0aCE9PWUubGVuZ3RoPzA6Zz9HYihkLGspJiYoZD09PWt8fGQuY2hhckF0KGsubGVuZ3RoKT09PVwiLlwiKTpkPT09aylyZXR1cm4hMH1yZXR1cm4hMX0saGc9L15bYS16JF9dW1xcdyRdKiQvaSxnZz0vXig/OlthLXpfJF1bYS16XyQwLTldKlxcLikqW2Etel8kXVthLXpfJDAtOV0qKD86XFwuXFwqKT8kL2k7XG52YXIgamc9W1wibWF0Y2hlc1wiLFwid2Via2l0TWF0Y2hlc1NlbGVjdG9yXCIsXCJtb3pNYXRjaGVzU2VsZWN0b3JcIixcIm1zTWF0Y2hlc1NlbGVjdG9yXCIsXCJvTWF0Y2hlc1NlbGVjdG9yXCJdO2Z1bmN0aW9uIGtnKGEsYil7dmFyIGM9U3RyaW5nKGEpLGQ9U3RyaW5nKGIpLGU9Yy5sZW5ndGgtZC5sZW5ndGg7cmV0dXJuIGU+PTAmJmMuaW5kZXhPZihkLGUpPT09ZX12YXIgbGc9bmV3IHViO2Z1bmN0aW9uIG1nKGEsYixjKXt2YXIgZD1jP1wiaVwiOnZvaWQgMDt0cnl7dmFyIGU9U3RyaW5nKGIpK1N0cmluZyhkKSxmPWxnLmdldChlKTtmfHwoZj1uZXcgUmVnRXhwKGIsZCksbGcuc2V0KGUsZikpO3JldHVybiBmLnRlc3QoYSl9Y2F0Y2goZyl7cmV0dXJuITF9fWZ1bmN0aW9uIG5nKGEsYil7cmV0dXJuIFN0cmluZyhhKS5pbmRleE9mKFN0cmluZyhiKSk+PTB9ZnVuY3Rpb24gb2coYSxiKXtyZXR1cm4gU3RyaW5nKGEpPT09U3RyaW5nKGIpfVxuZnVuY3Rpb24gcGcoYSxiKXtyZXR1cm4gTnVtYmVyKGEpPj1OdW1iZXIoYil9ZnVuY3Rpb24gcWcoYSxiKXtyZXR1cm4gTnVtYmVyKGEpPD1OdW1iZXIoYil9ZnVuY3Rpb24gcmcoYSxiKXtyZXR1cm4gTnVtYmVyKGEpPk51bWJlcihiKX1mdW5jdGlvbiBzZyhhLGIpe3JldHVybiBOdW1iZXIoYSk8TnVtYmVyKGIpfWZ1bmN0aW9uIHRnKGEsYil7cmV0dXJuIEdiKFN0cmluZyhhKSxTdHJpbmcoYikpfTt2YXIgQWc9L14oW2Etel1bYS16MC05XSopOighfFxcPykoXFwqfHN0cmluZ3xib29sZWFufG51bWJlcnxGbnxQaXhpZU1hcHxMaXN0fE9wYXF1ZVZhbHVlKSQvaSxCZz17Rm46XCJmdW5jdGlvblwiLFBpeGllTWFwOlwiT2JqZWN0XCIsTGlzdDpcIkFycmF5XCJ9O1xuZnVuY3Rpb24gSyhhLGIsYyl7Zm9yKHZhciBkPTA7ZDxiLmxlbmd0aDtkKyspe3ZhciBlPUFnLmV4ZWMoYltkXSk7aWYoIWUpdGhyb3cgRXJyb3IoXCJJbnRlcm5hbCBFcnJvciBpbiBcIithKTt2YXIgZj1lWzFdLGc9ZVsyXT09PVwiIVwiLGs9ZVszXSxtPWNbZF07aWYobT09bnVsbCl7aWYoZyl0aHJvdyBFcnJvcihcIkVycm9yIGluIFwiK2ErXCIuIFJlcXVpcmVkIGFyZ3VtZW50IFwiK2YrXCIgbm90IHN1cHBsaWVkLlwiKTt9ZWxzZSBpZihrIT09XCIqXCIpe3ZhciBuPXR5cGVvZiBtO20gaW5zdGFuY2VvZiBXYz9uPVwiRm5cIjptIGluc3RhbmNlb2YgV2E/bj1cIkxpc3RcIjptIGluc3RhbmNlb2YgWWE/bj1cIlBpeGllTWFwXCI6bSBpbnN0YW5jZW9mIGFkJiYobj1cIk9wYXF1ZVZhbHVlXCIpO2lmKG4hPT1rKXRocm93IEVycm9yKFwiRXJyb3IgaW4gXCIrYStcIi4gQXJndW1lbnQgXCIrZitcIiBoYXMgdHlwZSBcIisoKEJnW25dfHxuKStcIiwgd2hpY2ggZG9lcyBub3QgbWF0Y2ggcmVxdWlyZWQgdHlwZSBcIikrKChCZ1trXXx8XG5rKStcIi5cIikpO319fTtmdW5jdGlvbiBDZyhhKXtyZXR1cm5cIlwiK2F9XG5mdW5jdGlvbiBEZyhhLGIpe3ZhciBjPVtdO3JldHVybiBjfTtmdW5jdGlvbiBFZyhhLGIpe3ZhciBjPW5ldyBXYyhhLGZ1bmN0aW9uKCl7Zm9yKHZhciBkPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywwKSxlPTA7ZTxkLmxlbmd0aDtlKyspZFtlXT10aGlzLmV2YWx1YXRlKGRbZV0pO3RyeXtyZXR1cm4gYi5hcHBseSh0aGlzLGQpfWNhdGNoKGcpe2lmKGVkKCkpdGhyb3cgbmV3IGdkKGcubWVzc2FnZSk7dGhyb3cgZzt9fSk7Yy5LYSgpO3JldHVybiBjfVxuZnVuY3Rpb24gRmcoYSxiKXt2YXIgYz1uZXcgWWEsZDtmb3IoZCBpbiBiKWlmKGIuaGFzT3duUHJvcGVydHkoZCkpe3ZhciBlPWJbZF07b2IoZSk/Yy5zZXQoZCxFZyhhK1wiX1wiK2QsZSkpOlNhKGUpP2Muc2V0KGQsRmcoYStcIl9cIitkLGUpKToocGIoZSl8fGwoZSl8fHR5cGVvZiBlPT09XCJib29sZWFuXCIpJiZjLnNldChkLGUpfWMuS2EoKTtyZXR1cm4gY307ZnVuY3Rpb24gR2coYSxiKXtLKHRoaXMuZ2V0TmFtZSgpLFtcImFwaU5hbWU6IXN0cmluZ1wiLFwibWVzc2FnZTo/c3RyaW5nXCJdLGFyZ3VtZW50cyk7dmFyIGM9e30sZD1uZXcgWWE7cmV0dXJuIGQ9RmcoXCJBc3NlcnRBcGlTdWJqZWN0XCIsYyl9O2Z1bmN0aW9uIEhnKGEsYil7Syh0aGlzLmdldE5hbWUoKSxbXCJhY3R1YWw6PypcIixcIm1lc3NhZ2U6P3N0cmluZ1wiXSxhcmd1bWVudHMpO2lmKGEgaW5zdGFuY2VvZiBjZCl0aHJvdyBFcnJvcihcIkFyZ3VtZW50IGFjdHVhbCBjYW5ub3QgaGF2ZSB0eXBlIFByb21pc2UuIEFzc2VydGlvbnMgb24gYXN5bmNocm9ub3VzIGNvZGUgYXJlbid0IHN1cHBvcnRlZC5cIik7dmFyIGM9e30sZD1uZXcgWWE7cmV0dXJuIGQ9RmcoXCJBc3NlcnRUaGF0U3ViamVjdFwiLGMpfTtmdW5jdGlvbiBJZyhhKXtyZXR1cm4gZnVuY3Rpb24oKXtmb3IodmFyIGI9W10sYz10aGlzLkYsZD0wO2Q8YXJndW1lbnRzLmxlbmd0aDsrK2QpYi5wdXNoKEooYXJndW1lbnRzW2RdLGMpKTtyZXR1cm4gZGQoYS5hcHBseShudWxsLGIpKX19ZnVuY3Rpb24gSmcoKXtmb3IodmFyIGE9TWF0aCxiPUtnLGM9e30sZD0wO2Q8Yi5sZW5ndGg7ZCsrKXt2YXIgZT1iW2RdO2EuaGFzT3duUHJvcGVydHkoZSkmJihjW2VdPUlnKGFbZV0uYmluZChhKSkpfXJldHVybiBjfTtmdW5jdGlvbiBMZyhhKXt2YXIgYjtyZXR1cm4gYn07ZnVuY3Rpb24gTWcoYSl7dmFyIGI7cmV0dXJuIGJ9O2Z1bmN0aW9uIE5nKGEpe3RyeXtyZXR1cm4gZW5jb2RlVVJJKGEpfWNhdGNoKGIpe319O2Z1bmN0aW9uIE9nKGEpe3RyeXtyZXR1cm4gZW5jb2RlVVJJQ29tcG9uZW50KGEpfWNhdGNoKGIpe319O2Z1bmN0aW9uIFRnKGEpe0sodGhpcy5nZXROYW1lKCksW1wibWVzc2FnZTo/c3RyaW5nXCJdLGFyZ3VtZW50cyk7fTtmdW5jdGlvbiBVZyhhLGIpe0sodGhpcy5nZXROYW1lKCksW1wibWluOiFudW1iZXJcIixcIm1heDohbnVtYmVyXCJdLGFyZ3VtZW50cyk7cmV0dXJuIHNiKGEsYil9O2Z1bmN0aW9uIFZnKCl7cmV0dXJuKG5ldyBEYXRlKS5nZXRUaW1lKCl9O2Z1bmN0aW9uIFdnKGEpe2lmKGE9PT1udWxsKXJldHVyblwibnVsbFwiO2lmKGEgaW5zdGFuY2VvZiBXYSlyZXR1cm5cImFycmF5XCI7aWYoYSBpbnN0YW5jZW9mIFdjKXJldHVyblwiZnVuY3Rpb25cIjtpZihhIGluc3RhbmNlb2YgYWQpe3ZhciBiO2E9KGI9YSk9PW51bGw/dm9pZCAwOmIuZ2V0VmFsdWUoKTt2YXIgYztpZigoKGM9YSk9PW51bGw/dm9pZCAwOmMuY29uc3RydWN0b3IpPT09dm9pZCAwfHxhLmNvbnN0cnVjdG9yLm5hbWU9PT12b2lkIDApe3ZhciBkPVN0cmluZyhhKTtyZXR1cm4gZC5zdWJzdHJpbmcoOCxkLmxlbmd0aC0xKX1yZXR1cm4gU3RyaW5nKGEuY29uc3RydWN0b3IubmFtZSl9cmV0dXJuIHR5cGVvZiBhfTtmdW5jdGlvbiBYZyhhKXtmdW5jdGlvbiBiKGMpe3JldHVybiBmdW5jdGlvbihkKXt0cnl7cmV0dXJuIGMoZCl9Y2F0Y2goZSl7KFRmfHxVZi5naykmJmEuY2FsbCh0aGlzLGUubWVzc2FnZSl9fX1yZXR1cm57cGFyc2U6YihmdW5jdGlvbihjKXtyZXR1cm4gZGQoSlNPTi5wYXJzZShjKSl9KSxzdHJpbmdpZnk6YihmdW5jdGlvbihjKXtyZXR1cm4gSlNPTi5zdHJpbmdpZnkoSihjKSl9KX19O2Z1bmN0aW9uIFlnKGEpe3JldHVybiB3YihKKGEsdGhpcy5GKSl9O2Z1bmN0aW9uIFpnKGEpe3JldHVybiBOdW1iZXIoSihhLHRoaXMuRikpfTtmdW5jdGlvbiAkZyhhKXtyZXR1cm4gYT09PW51bGw/XCJudWxsXCI6YT09PXZvaWQgMD9cInVuZGVmaW5lZFwiOmEudG9TdHJpbmcoKX07ZnVuY3Rpb24gYWgoYSxiLGMpe3ZhciBkPW51bGwsZT0hMTtyZXR1cm4gZT9kOm51bGx9O3ZhciBLZz1cImZsb29yIGNlaWwgcm91bmQgbWF4IG1pbiBhYnMgcG93IHNxcnRcIi5zcGxpdChcIiBcIik7ZnVuY3Rpb24gYmgoKXt2YXIgYT17fTtyZXR1cm57SGw6ZnVuY3Rpb24oYil7cmV0dXJuIGEuaGFzT3duUHJvcGVydHkoYik/YVtiXTp2b2lkIDB9LGRrOmZ1bmN0aW9uKGIsYyl7YVtiXT1jfSxyZXNldDpmdW5jdGlvbigpe2E9e319fX1mdW5jdGlvbiBjaChhLGIpe3JldHVybiBmdW5jdGlvbigpe3ZhciBjPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHphLmFwcGx5KDAsYXJndW1lbnRzKSwwKTtjLnVuc2hpZnQoYik7cmV0dXJuIFdjLnByb3RvdHlwZS5pbnZva2UuYXBwbHkoYSxjKX19XG5mdW5jdGlvbiBkaChhLGIpe0sodGhpcy5nZXROYW1lKCksW1wiYXBpTmFtZTohc3RyaW5nXCIsXCJtb2NrOj8qXCJdLGFyZ3VtZW50cyk7fVxuZnVuY3Rpb24gZWgoYSxiKXtLKHRoaXMuZ2V0TmFtZSgpLFtcImFwaU5hbWU6IXN0cmluZ1wiLFwibW9jazohUGl4aWVNYXBcIl0sYXJndW1lbnRzKTt9O3ZhciBmaD17fTtcbmZoLmtleXM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyBXYX07XG5maC52YWx1ZXM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyBXYX07XG5maC5lbnRyaWVzPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcgV2F9O2ZoLmZyZWV6ZT1mdW5jdGlvbihhKXtyZXR1cm4gYX07XG5maC5kZWxldGU9ZnVuY3Rpb24oYSxiKXtyZXR1cm4hMX07ZnVuY3Rpb24gTChhLGIpe3ZhciBjPXphLmFwcGx5KDIsYXJndW1lbnRzKSxkPWEuRi5qO2lmKCFkKXRocm93IEVycm9yKFwiTWlzc2luZyBwcm9ncmFtIHN0YXRlLlwiKTtpZihkLkptKXt0cnl7ZC5Bai5hcHBseShudWxsLFtiXS5jb25jYXQocGEoYykpKX1jYXRjaChlKXt0aHJvdyBoYihcIlRBR0dJTkdcIiwyMSksZTt9cmV0dXJufWQuQWouYXBwbHkobnVsbCxbYl0uY29uY2F0KHBhKGMpKSl9O3ZhciBoaD1mdW5jdGlvbigpe3RoaXMuRD17fTt0aGlzLmo9e307dGhpcy5IPSEwO307aGgucHJvdG90eXBlLmdldD1mdW5jdGlvbihhLGIpe3ZhciBjPXRoaXMuY29udGFpbnMoYSk/dGhpcy5EW2FdOnZvaWQgMDtyZXR1cm4gY307aGgucHJvdG90eXBlLmNvbnRhaW5zPWZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLkQuaGFzT3duUHJvcGVydHkoYSl9O1xuaGgucHJvdG90eXBlLmFkZD1mdW5jdGlvbihhLGIsYyl7aWYodGhpcy5jb250YWlucyhhKSl0aHJvdyBFcnJvcihcIkF0dGVtcHRpbmcgdG8gYWRkIGEgZnVuY3Rpb24gd2hpY2ggYWxyZWFkeSBleGlzdHM6IFwiK2ErXCIuXCIpO2lmKHRoaXMuai5oYXNPd25Qcm9wZXJ0eShhKSl0aHJvdyBFcnJvcihcIkF0dGVtcHRpbmcgdG8gYWRkIGFuIEFQSSB3aXRoIGFuIGV4aXN0aW5nIHByaXZhdGUgQVBJIG5hbWU6IFwiK2ErXCIuXCIpO3RoaXMuRFthXT1jP3ZvaWQgMDpvYihiKT9FZyhhLGIpOkZnKGEsYil9O2Z1bmN0aW9uIGloKGEsYil7dmFyIGM9dm9pZCAwO3JldHVybiBjfTtmdW5jdGlvbiBqaCgpe3ZhciBhPXt9O1xucmV0dXJuIGF9O3ZhciBsaD1mdW5jdGlvbihhKXtyZXR1cm4ga2g/RS5xdWVyeVNlbGVjdG9yQWxsKGEpOm51bGx9O1xuZnVuY3Rpb24gbWgoYSxiKXtpZigha2gpcmV0dXJuIG51bGw7aWYoRWxlbWVudC5wcm90b3R5cGUuY2xvc2VzdCl0cnl7cmV0dXJuIGEuY2xvc2VzdChiKX1jYXRjaChlKXtyZXR1cm4gbnVsbH12YXIgYz1FbGVtZW50LnByb3RvdHlwZS5tYXRjaGVzfHxFbGVtZW50LnByb3RvdHlwZS53ZWJraXRNYXRjaGVzU2VsZWN0b3J8fEVsZW1lbnQucHJvdG90eXBlLm1vek1hdGNoZXNTZWxlY3Rvcnx8RWxlbWVudC5wcm90b3R5cGUubXNNYXRjaGVzU2VsZWN0b3J8fEVsZW1lbnQucHJvdG90eXBlLm9NYXRjaGVzU2VsZWN0b3IsZD1hO2lmKCFFLmRvY3VtZW50RWxlbWVudC5jb250YWlucyhkKSlyZXR1cm4gbnVsbDtkb3t0cnl7aWYoYy5jYWxsKGQsYikpcmV0dXJuIGR9Y2F0Y2goZSl7YnJlYWt9ZD1kLnBhcmVudEVsZW1lbnR8fGQucGFyZW50Tm9kZX13aGlsZShkIT09bnVsbCYmZC5ub2RlVHlwZT09PTEpO3JldHVybiBudWxsfXZhciBuaD0hMTtcbmlmKEUucXVlcnlTZWxlY3RvckFsbCl0cnl7dmFyIG9oPUUucXVlcnlTZWxlY3RvckFsbChcIjpyb290XCIpO29oJiZvaC5sZW5ndGg9PTEmJm9oWzBdPT1FLmRvY3VtZW50RWxlbWVudCYmKG5oPSEwKX1jYXRjaChhKXt9dmFyIGtoPW5oO3ZhciBwaD0vXlswLTlBLUZhLWZdezY0fSQvO2Z1bmN0aW9uIHFoKGEpe3RyeXtyZXR1cm4obmV3IFRleHRFbmNvZGVyKS5lbmNvZGUoYSl9Y2F0Y2goZSl7Zm9yKHZhciBiPVtdLGM9MDtjPGEubGVuZ3RoO2MrKyl7dmFyIGQ9YS5jaGFyQ29kZUF0KGMpO2Q8MTI4P2IucHVzaChkKTpkPDIwNDg/Yi5wdXNoKDE5MnxkPj42LDEyOHxkJjYzKTpkPDU1Mjk2fHxkPj01NzM0ND9iLnB1c2goMjI0fGQ+PjEyLDEyOHxkPj42JjYzLDEyOHxkJjYzKTooZD02NTUzNisoKGQmMTAyMyk8PDEwfGEuY2hhckNvZGVBdCgrK2MpJjEwMjMpLGIucHVzaCgyNDB8ZD4+MTgsMTI4fGQ+PjEyJjYzLDEyOHxkPj42JjYzLDEyOHxkJjYzKSl9cmV0dXJuIG5ldyBVaW50OEFycmF5KGIpfX1cbmZ1bmN0aW9uIHJoKGEpe2lmKGE9PT1cIlwifHxhPT09XCJlMFwiKXJldHVybiBQcm9taXNlLnJlc29sdmUoYSk7dmFyIGI7aWYoKGI9RC5jcnlwdG8pPT1udWxsPzA6Yi5zdWJ0bGUpe2lmKHBoLnRlc3QoYSkpcmV0dXJuIFByb21pc2UucmVzb2x2ZShhKTt0cnl7dmFyIGM9cWgoYSk7cmV0dXJuIEQuY3J5cHRvLnN1YnRsZS5kaWdlc3QoXCJTSEEtMjU2XCIsYykudGhlbihmdW5jdGlvbihkKXt2YXIgZT1BcnJheS5mcm9tKG5ldyBVaW50OEFycmF5KGQpKS5tYXAoZnVuY3Rpb24oZil7cmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUoZil9KS5qb2luKFwiXCIpO3JldHVybiBELmJ0b2EoZSkucmVwbGFjZSgvXFwrL2csXCItXCIpLnJlcGxhY2UoL1xcLy9nLFwiX1wiKS5yZXBsYWNlKC89KyQvLFwiXCIpfSkuY2F0Y2goZnVuY3Rpb24oKXtyZXR1cm5cImUyXCJ9KX1jYXRjaChkKXtyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKFwiZTJcIil9fWVsc2UgcmV0dXJuIFByb21pc2UucmVzb2x2ZShcImUxXCIpfTtmdW5jdGlvbiBNKGEpe2hiKFwiR1RNXCIsYSl9O2Z1bmN0aW9uIFBoKGEsYil7aWYoYT09PVwiXCIpcmV0dXJuIGI7dmFyIGM9TnVtYmVyKGEpO3JldHVybiBpc05hTihjKT9iOmN9O3ZhciBRaD1bXTtmdW5jdGlvbiBSaChhKXtzd2l0Y2goYSl7Y2FzZSAwOnJldHVybiAwO2Nhc2UgNDQ6cmV0dXJuIDE7Y2FzZSA0NTpyZXR1cm4gMjtjYXNlIDQ2OnJldHVybiAxMTtjYXNlIDUyOnJldHVybiAzO2Nhc2UgNTk6cmV0dXJuIDE0O2Nhc2UgNjI6cmV0dXJuIDQ7Y2FzZSA3MTpyZXR1cm4gNztjYXNlIDgxOnJldHVybiA1O2Nhc2UgOTQ6cmV0dXJuIDY7Y2FzZSA5NTpyZXR1cm4gMTM7Y2FzZSA5NjpyZXR1cm4gMTA7Y2FzZSA5ODpyZXR1cm4gODtjYXNlIDk5OnJldHVybiA5fX1mdW5jdGlvbiBQKGEpe1FoW2FdPSEwO3ZhciBiPVJoKGEpO2IhPT12b2lkIDAmJihrYltiXT0hMCl9UCgzMSk7XG5QKDI3KTtQKDI4KTtQKDI5KTtQKDMwKTtQKDQ3KTtQKDc1KTtQKDU2KTtQKDM0KTtQKDE2KTtcblAoMTA1KTtQKDE1KTtQKDExMCk7XG5QKDEwNCk7UCg2Myk7XG5QKDgzKTtQKDYpO1AoNDgpO1xuUCg0KTtQKDc4KTtcblAoMTAxKTtQKDcwKTtQKDY4KTtQKDY5KTtcblAoODIpO1AoODApO1xuUCgxMTQpO1AoMTExKTtQKDgxKTtcblAoNSk7UCg3MSk7XG5QKDk0KTtsYlsxXT1QaCgnMScsNkU0KTtcbmxiWzNdPVBoKCcxMCcsMSk7bGJbMl09UGgoJycsNTApO1AoMjQpO1AoMTIpO1xuUCg2Nyk7UCgxMDIpO1xuUCg4KTtcblAoNTMpO1xuUCgyMyk7UCg0Myk7XG5QKDg0KTtQKDk4KTtQKDk5KTtQKDk2KTtQKDg2KTtQKDUwKTtQKDUyKTtcblAoNjUpO1AoMTMpO1AoNzIpO1AoNzkpO1AoNDApO1AoNTkpO2Z1bmN0aW9uIFEoYSl7cmV0dXJuISFRaFthXX12YXIgVD17Zzp7d2E6XCJhZF9wZXJzb25hbGl6YXRpb25cIixQOlwiYWRfc3RvcmFnZVwiLE86XCJhZF91c2VyX2RhdGFcIixVOlwiYW5hbHl0aWNzX3N0b3JhZ2VcIixDYjpcInJlZ2lvblwiLFFiOlwiY29uc2VudF91cGRhdGVkXCIsWmU6XCJ3YWl0X2Zvcl91cGRhdGVcIixlaTpcImFwcF9yZW1vdmVcIixmaTpcImFwcF9zdG9yZV9yZWZ1bmRcIixnaTpcImFwcF9zdG9yZV9zdWJzY3JpcHRpb25fY2FuY2VsXCIsaGk6XCJhcHBfc3RvcmVfc3Vic2NyaXB0aW9uX2NvbnZlcnRcIixpaTpcImFwcF9zdG9yZV9zdWJzY3JpcHRpb25fcmVuZXdcIixzazpcImNvbnNlbnRfdXBkYXRlXCIsWWY6XCJhZGRfcGF5bWVudF9pbmZvXCIsWmY6XCJhZGRfc2hpcHBpbmdfaW5mb1wiLGpjOlwiYWRkX3RvX2NhcnRcIixrYzpcInJlbW92ZV9mcm9tX2NhcnRcIixjZzpcInZpZXdfY2FydFwiLFJiOlwiYmVnaW5fY2hlY2tvdXRcIixtYzpcInNlbGVjdF9pdGVtXCIsaWI6XCJ2aWV3X2l0ZW1fbGlzdFwiLERiOlwic2VsZWN0X3Byb21vdGlvblwiLGpiOlwidmlld19wcm9tb3Rpb25cIixcbkhhOlwicHVyY2hhc2VcIixuYzpcInJlZnVuZFwiLExhOlwidmlld19pdGVtXCIsZGc6XCJhZGRfdG9fd2lzaGxpc3RcIix0azpcImV4Y2VwdGlvblwiLGppOlwiZmlyc3Rfb3BlblwiLGtpOlwiZmlyc3RfdmlzaXRcIixiYTpcImd0YWcuY29uZmlnXCIsVGE6XCJndGFnLmdldFwiLGxpOlwiaW5fYXBwX3B1cmNoYXNlXCIsU2I6XCJwYWdlX3ZpZXdcIix1azpcInNjcmVlbl92aWV3XCIsbWk6XCJzZXNzaW9uX3N0YXJ0XCIsdms6XCJ0aW1pbmdfY29tcGxldGVcIix3azpcInRyYWNrX3NvY2lhbFwiLE1jOlwidXNlcl9lbmdhZ2VtZW50XCIseGs6XCJ1c2VyX2lkX3VwZGF0ZVwiLGtiOlwiZ2NsZ2JcIixVYTpcImdjbGlkXCIsbmk6XCJnY2xnc1wiLG9pOlwiZ2NsbHBcIixyaTpcImdjbHN0XCIsZmE6XCJhZHNfZGF0YV9yZWRhY3Rpb25cIixzaTpcImdhZF9zb3VyY2VcIix1aTpcImdhZF9zb3VyY2Vfc3JjXCIsRWQ6XCJnY2xpZF91cmxcIix2aTpcImdjbHNyY1wiLGVnOlwiZ2JyYWlkXCIsYWY6XCJ3YnJhaWRcIixqYTpcImFsbG93X2FkX3BlcnNvbmFsaXphdGlvbl9zaWduYWxzXCIsYmY6XCJhbGxvd19jdXN0b21fc2NyaXB0c1wiLFxuRmQ6XCJhbGxvd19kaXJlY3RfZ29vZ2xlX3JlcXVlc3RzXCIsY2Y6XCJhbGxvd19kaXNwbGF5X2ZlYXR1cmVzXCIsR2Q6XCJhbGxvd19lbmhhbmNlZF9jb252ZXJzaW9uc1wiLGxiOlwiYWxsb3dfZ29vZ2xlX3NpZ25hbHNcIixBYTpcImFsbG93X2ludGVyZXN0X2dyb3Vwc1wiLHlrOlwiYXBwX2lkXCIsems6XCJhcHBfaW5zdGFsbGVyX2lkXCIsQWs6XCJhcHBfbmFtZVwiLEJrOlwiYXBwX3ZlcnNpb25cIixFYjpcImF1aWRcIix3aTpcImF1dG9fZGV0ZWN0aW9uX2VuYWJsZWRcIixUYjpcImF3X3JlbWFya2V0aW5nXCIsZGY6XCJhd19yZW1hcmtldGluZ19vbmx5XCIsSGQ6XCJkaXNjb3VudFwiLElkOlwiYXdfZmVlZF9jb3VudHJ5XCIsSmQ6XCJhd19mZWVkX2xhbmd1YWdlXCIsZGE6XCJpdGVtc1wiLEtkOlwiYXdfbWVyY2hhbnRfaWRcIixmZzpcImF3X2Jhc2tldF90eXBlXCIsTmM6XCJjYW1wYWlnbl9jb250ZW50XCIsT2M6XCJjYW1wYWlnbl9pZFwiLFBjOlwiY2FtcGFpZ25fbWVkaXVtXCIsUWM6XCJjYW1wYWlnbl9uYW1lXCIsUmM6XCJjYW1wYWlnblwiLFNjOlwiY2FtcGFpZ25fc291cmNlXCIsXG5UYzpcImNhbXBhaWduX3Rlcm1cIixuYjpcImNsaWVudF9pZFwiLHhpOlwicm5kXCIsZ2c6XCJjb25zZW50X3VwZGF0ZV90eXBlXCIseWk6XCJjb250ZW50X2dyb3VwXCIsemk6XCJjb250ZW50X3R5cGVcIixYYTpcImNvbnZlcnNpb25fY29va2llX3ByZWZpeFwiLFVjOlwiY29udmVyc2lvbl9pZFwiLG9hOlwiY29udmVyc2lvbl9saW5rZXJcIixBaTpcImNvbnZlcnNpb25fbGlua2VyX2Rpc2FibGVkXCIsVWI6XCJjb252ZXJzaW9uX2FwaVwiLGVmOlwiY29va2llX2RlcHJlY2F0aW9uXCIsVmE6XCJjb29raWVfZG9tYWluXCIsTWE6XCJjb29raWVfZXhwaXJlc1wiLFlhOlwiY29va2llX2ZsYWdzXCIsb2M6XCJjb29raWVfbmFtZVwiLEZiOlwiY29va2llX3BhdGhcIixOYTpcImNvb2tpZV9wcmVmaXhcIixxYzpcImNvb2tpZV91cGRhdGVcIixyYzpcImNvdW50cnlcIix4YTpcImN1cnJlbmN5XCIsTGQ6XCJjdXN0b21lcl9saWZldGltZV92YWx1ZVwiLFZjOlwiY3VzdG9tX21hcFwiLGhnOlwiZ2NsZGNcIixNZDpcImRjbGlkXCIsQmk6XCJkZWJ1Z19tb2RlXCIsa2E6XCJkZXZlbG9wZXJfaWRcIixcbkNpOlwiZGlzYWJsZV9tZXJjaGFudF9yZXBvcnRlZF9wdXJjaGFzZXNcIixXYzpcImRjX2N1c3RvbV9wYXJhbXNcIixEaTpcImRjX25hdHVyYWxfc2VhcmNoXCIsaWc6XCJkeW5hbWljX2V2ZW50X3NldHRpbmdzXCIsamc6XCJhZmZpbGlhdGlvblwiLE5kOlwiY2hlY2tvdXRfb3B0aW9uXCIsZmY6XCJjaGVja291dF9zdGVwXCIsa2c6XCJjb3Vwb25cIixYYzpcIml0ZW1fbGlzdF9uYW1lXCIsaGY6XCJsaXN0X25hbWVcIixFaTpcInByb21vdGlvbnNcIixZYzpcInNoaXBwaW5nXCIsamY6XCJ0YXhcIixPZDpcImVuZ2FnZW1lbnRfdGltZV9tc2VjXCIsUGQ6XCJlbmhhbmNlZF9jbGllbnRfaWRcIixRZDpcImVuaGFuY2VkX2NvbnZlcnNpb25zXCIsbGc6XCJlbmhhbmNlZF9jb252ZXJzaW9uc19hdXRvbWF0aWNfc2V0dGluZ3NcIixSZDpcImVzdGltYXRlZF9kZWxpdmVyeV9kYXRlXCIsa2Y6XCJldWlkX2xvZ2dlZF9pbl9zdGF0ZVwiLFpjOlwiZXZlbnRfY2FsbGJhY2tcIixDazpcImV2ZW50X2NhdGVnb3J5XCIscGI6XCJldmVudF9kZXZlbG9wZXJfaWRfc3RyaW5nXCIsXG5EazpcImV2ZW50X2xhYmVsXCIsc2M6XCJldmVudFwiLFNkOlwiZXZlbnRfc2V0dGluZ3NcIixUZDpcImV2ZW50X3RpbWVvdXRcIixFazpcImRlc2NyaXB0aW9uXCIsRms6XCJmYXRhbFwiLEZpOlwiZXhwZXJpbWVudHNcIixsZjpcImZpcmViYXNlX2lkXCIsdWM6XCJmaXJzdF9wYXJ0eV9jb2xsZWN0aW9uXCIsVWQ6XCJfeF8yMFwiLHFiOlwiX3hfMTlcIixHaTpcImZsZWRnZV9kcm9wX3JlYXNvblwiLG1nOlwiZmxlZGdlXCIsbmc6XCJmbGlnaHRfZXJyb3JfY29kZVwiLG9nOlwiZmxpZ2h0X2Vycm9yX21lc3NhZ2VcIixIaTpcImZsX2FjdGl2aXR5X2NhdGVnb3J5XCIsSWk6XCJmbF9hY3Rpdml0eV9ncm91cFwiLHBnOlwiZmxfYWR2ZXJ0aXNlcl9pZFwiLEppOlwiZmxfYXJfZGVkdXBlXCIscWc6XCJtYXRjaF9pZFwiLEtpOlwiZmxfcmFuZG9tX251bWJlclwiLExpOlwidHJhblwiLE1pOlwidVwiLFZkOlwiZ2FjX2djbGlkXCIsdmM6XCJnYWNfd2JyYWlkXCIscmc6XCJnYWNfd2JyYWlkX211bHRpcGxlX2NvbnZlcnNpb25zXCIsc2c6XCJnYV9yZXN0cmljdF9kb21haW5cIix1ZzpcImdhX3RlbXBfY2xpZW50X2lkXCIsXG5HazpcImdhX3RlbXBfZWNpZFwiLHdjOlwiZ2Rwcl9hcHBsaWVzXCIsdmc6XCJnZW9fZ3JhbnVsYXJpdHlcIixHYjpcInZhbHVlX2NhbGxiYWNrXCIscmI6XCJ2YWx1ZV9rZXlcIix4YzpcIl9nb29nbGVfbmdcIix5YzpcImdvb2dsZV9zaWduYWxzXCIsd2c6XCJnb29nbGVfdGxkXCIsV2Q6XCJncm91cHNcIix4ZzpcImdzYV9leHBlcmltZW50X2lkXCIsTmk6XCJndG1fdXBcIixIYjpcImlmcmFtZV9zdGF0ZVwiLGJkOlwiaWdub3JlX3JlZmVycmVyXCIsbmY6XCJpbnRlcm5hbF90cmFmZmljX3Jlc3VsdHNcIixWYjpcImlzX2xlZ2FjeV9jb252ZXJ0ZWRcIixJYjpcImlzX2xlZ2FjeV9sb2FkZWRcIixYZDpcImlzX3Bhc3N0aHJvdWdoXCIsZGQ6XCJfbHBzXCIsT2E6XCJsYW5ndWFnZVwiLFlkOlwibGVnYWN5X2RldmVsb3Blcl9pZF9zdHJpbmdcIixxYTpcImxpbmtlclwiLHpjOlwiYWNjZXB0X2luY29taW5nXCIsdGI6XCJkZWNvcmF0ZV9mb3Jtc1wiLFc6XCJkb21haW5zXCIsSmI6XCJ1cmxfcG9zaXRpb25cIix5ZzpcIm1ldGhvZFwiLEhrOlwibmFtZVwiLGVkOlwibmV3X2N1c3RvbWVyXCIsXG56ZzpcIm5vbl9pbnRlcmFjdGlvblwiLE9pOlwib3B0aW1pemVfaWRcIixQaTpcInBhZ2VfaG9zdG5hbWVcIixmZDpcInBhZ2VfcGF0aFwiLEJhOlwicGFnZV9yZWZlcnJlclwiLFphOlwicGFnZV90aXRsZVwiLEFnOlwicGFzc2VuZ2Vyc1wiLEJnOlwicGhvbmVfY29udmVyc2lvbl9jYWxsYmFja1wiLFFpOlwicGhvbmVfY29udmVyc2lvbl9jb3VudHJ5X2NvZGVcIixDZzpcInBob25lX2NvbnZlcnNpb25fY3NzX2NsYXNzXCIsUmk6XCJwaG9uZV9jb252ZXJzaW9uX2lkc1wiLERnOlwicGhvbmVfY29udmVyc2lvbl9udW1iZXJcIixFZzpcInBob25lX2NvbnZlcnNpb25fb3B0aW9uc1wiLEZnOlwiX3Byb3RlY3RlZF9hdWRpZW5jZV9lbmFibGVkXCIsZ2Q6XCJxdWFudGl0eVwiLFpkOlwicmVkYWN0X2RldmljZV9pbmZvXCIscGY6XCJyZWZlcnJhbF9leGNsdXNpb25fZGVmaW5pdGlvblwiLFdiOlwicmVzdHJpY3RlZF9kYXRhX3Byb2Nlc3NpbmdcIixTaTpcInJldG9rZW5cIixJazpcInNhbXBsZV9yYXRlXCIscWY6XCJzY3JlZW5fbmFtZVwiLEtiOlwic2NyZWVuX3Jlc29sdXRpb25cIixcblRpOlwic2VhcmNoX3Rlcm1cIixJYTpcInNlbmRfcGFnZV92aWV3XCIsWGI6XCJzZW5kX3RvXCIsaGQ6XCJzZXJ2ZXJfY29udGFpbmVyX3VybFwiLGpkOlwic2Vzc2lvbl9kdXJhdGlvblwiLGFlOlwic2Vzc2lvbl9lbmdhZ2VkXCIscmY6XCJzZXNzaW9uX2VuZ2FnZWRfdGltZVwiLHViOlwic2Vzc2lvbl9pZFwiLGJlOlwic2Vzc2lvbl9udW1iZXJcIix0ZjpcIl9zaGFyZWRfdXNlcl9pZFwiLGtkOlwiZGVsaXZlcnlfcG9zdGFsX2NvZGVcIixKazpcInRlbXBvcmFyeV9jbGllbnRfaWRcIix1ZjpcInRvcG1vc3RfdXJsXCIsVWk6XCJ0cmFja2luZ19pZFwiLHZmOlwidHJhZmZpY190eXBlXCIseWE6XCJ0cmFuc2FjdGlvbl9pZFwiLExiOlwidHJhbnNwb3J0X3VybFwiLEdnOlwidHJpcF90eXBlXCIsWWI6XCJ1cGRhdGVcIixXYTpcInVybF9wYXNzdGhyb3VnaFwiLHdmOlwiX3VzZXJfYWdlbnRfYXJjaGl0ZWN0dXJlXCIseGY6XCJfdXNlcl9hZ2VudF9iaXRuZXNzXCIseWY6XCJfdXNlcl9hZ2VudF9mdWxsX3ZlcnNpb25fbGlzdFwiLHpmOlwiX3VzZXJfYWdlbnRfbW9iaWxlXCIsXG5BZjpcIl91c2VyX2FnZW50X21vZGVsXCIsQmY6XCJfdXNlcl9hZ2VudF9wbGF0Zm9ybVwiLENmOlwiX3VzZXJfYWdlbnRfcGxhdGZvcm1fdmVyc2lvblwiLERmOlwiX3VzZXJfYWdlbnRfd293NjRcIixDYTpcInVzZXJfZGF0YVwiLEhnOlwidXNlcl9kYXRhX2F1dG9fbGF0ZW5jeVwiLElnOlwidXNlcl9kYXRhX2F1dG9fbWV0YVwiLEpnOlwidXNlcl9kYXRhX2F1dG9fbXVsdGlcIixLZzpcInVzZXJfZGF0YV9hdXRvX3NlbGVjdG9yc1wiLExnOlwidXNlcl9kYXRhX2F1dG9fc3RhdHVzXCIsbGQ6XCJ1c2VyX2RhdGFfbW9kZVwiLGRlOlwidXNlcl9kYXRhX3NldHRpbmdzXCIsemE6XCJ1c2VyX2lkXCIsYWI6XCJ1c2VyX3Byb3BlcnRpZXNcIixWaTpcIl91c2VyX3JlZ2lvblwiLGVlOlwidXNfcHJpdmFjeV9zdHJpbmdcIixsYTpcInZhbHVlXCIsTWc6XCJ3YnJhaWRfbXVsdGlwbGVfY29udmVyc2lvbnNcIixpZTpcIl9mcG1fcGFyYW1ldGVyc1wiLGNqOlwiX2hvc3RfbmFtZVwiLGRqOlwiX2luX3BhZ2VfY29tbWFuZFwiLGVqOlwiX2lzX3Bhc3N0aHJvdWdoX2NpZFwiLFxuTWI6XCJub25fcGVyc29uYWxpemVkX2Fkc1wiLHFlOlwiX3NzdF9wYXJhbWV0ZXJzXCIsb2I6XCJjb252ZXJzaW9uX2xhYmVsXCIscmE6XCJwYWdlX2xvY2F0aW9uXCIsc2I6XCJnbG9iYWxfZGV2ZWxvcGVyX2lkX3N0cmluZ1wiLEFjOlwidGNfcHJpdmFjeV9zdHJpbmdcIn19LFNoPXt9LFRoPU9iamVjdC5mcmVlemUoKFNoW1QuZy5qYV09MSxTaFtULmcuY2ZdPTEsU2hbVC5nLkdkXT0xLFNoW1QuZy5sYl09MSxTaFtULmcuZGFdPTEsU2hbVC5nLlZhXT0xLFNoW1QuZy5NYV09MSxTaFtULmcuWWFdPTEsU2hbVC5nLm9jXT0xLFNoW1QuZy5GYl09MSxTaFtULmcuTmFdPTEsU2hbVC5nLnFjXT0xLFNoW1QuZy5WY109MSxTaFtULmcua2FdPTEsU2hbVC5nLmlnXT0xLFNoW1QuZy5aY109MSxTaFtULmcuU2RdPTEsU2hbVC5nLlRkXT0xLFNoW1QuZy51Y109MSxTaFtULmcuc2ddPTEsU2hbVC5nLnljXT0xLFNoW1QuZy53Z109MSxTaFtULmcuV2RdPTEsU2hbVC5nLm5mXT0xLFNoW1QuZy5WYl09MSxTaFtULmcuSWJdPVxuMSxTaFtULmcucWFdPTEsU2hbVC5nLnBmXT0xLFNoW1QuZy5XYl09MSxTaFtULmcuSWFdPTEsU2hbVC5nLlhiXT0xLFNoW1QuZy5oZF09MSxTaFtULmcuamRdPTEsU2hbVC5nLnJmXT0xLFNoW1QuZy5rZF09MSxTaFtULmcuTGJdPTEsU2hbVC5nLlliXT0xLFNoW1QuZy5kZV09MSxTaFtULmcuYWJdPTEsU2hbVC5nLnFlXT0xLFNoKSk7T2JqZWN0LmZyZWV6ZShbVC5nLnJhLFQuZy5CYSxULmcuWmEsVC5nLk9hLFQuZy5xZixULmcuemEsVC5nLmxmLFQuZy55aV0pO1xudmFyIFVoPXt9LFZoPU9iamVjdC5mcmVlemUoKFVoW1QuZy5laV09MSxVaFtULmcuZmldPTEsVWhbVC5nLmdpXT0xLFVoW1QuZy5oaV09MSxVaFtULmcuaWldPTEsVWhbVC5nLmppXT0xLFVoW1QuZy5raV09MSxVaFtULmcubGldPTEsVWhbVC5nLm1pXT0xLFVoW1QuZy5NY109MSxVaCkpLFdoPXt9LFhoPU9iamVjdC5mcmVlemUoKFdoW1QuZy5ZZl09MSxXaFtULmcuWmZdPTEsV2hbVC5nLmpjXT0xLFdoW1QuZy5rY109MSxXaFtULmcuY2ddPTEsV2hbVC5nLlJiXT0xLFdoW1QuZy5tY109MSxXaFtULmcuaWJdPTEsV2hbVC5nLkRiXT0xLFdoW1QuZy5qYl09MSxXaFtULmcuSGFdPTEsV2hbVC5nLm5jXT0xLFdoW1QuZy5MYV09MSxXaFtULmcuZGddPTEsV2gpKSxZaD1PYmplY3QuZnJlZXplKFtULmcuamEsVC5nLkZkLFQuZy5sYixULmcucWMsVC5nLnVjLFQuZy5iZCxULmcuSWEsVC5nLlliXSksWmg9T2JqZWN0LmZyZWV6ZShbXS5jb25jYXQocGEoWWgpKSksJGg9T2JqZWN0LmZyZWV6ZShbVC5nLk1hLFxuVC5nLlRkLFQuZy5qZCxULmcucmYsVC5nLk9kXSksYWk9T2JqZWN0LmZyZWV6ZShbXS5jb25jYXQocGEoJGgpKSksYmk9e30sY2k9KGJpW1QuZy5QXT1cIjFcIixiaVtULmcuVV09XCIyXCIsYmlbVC5nLk9dPVwiM1wiLGJpW1QuZy53YV09XCI0XCIsYmkpLGRpPXt9LGVpPU9iamVjdC5mcmVlemUoKGRpW1QuZy5qYV09MSxkaVtULmcuRmRdPTEsZGlbVC5nLkdkXT0xLGRpW1QuZy5BYV09MSxkaVtULmcuVGJdPTEsZGlbVC5nLmRmXT0xLGRpW1QuZy5IZF09MSxkaVtULmcuSWRdPTEsZGlbVC5nLkpkXT0xLGRpW1QuZy5kYV09MSxkaVtULmcuS2RdPTEsZGlbVC5nLlhhXT0xLGRpW1QuZy5vYV09MSxkaVtULmcuVmFdPTEsZGlbVC5nLk1hXT0xLGRpW1QuZy5ZYV09MSxkaVtULmcuTmFdPTEsZGlbVC5nLnhhXT0xLGRpW1QuZy5MZF09MSxkaVtULmcua2FdPTEsZGlbVC5nLkNpXT0xLGRpW1QuZy5RZF09MSxkaVtULmcuUmRdPTEsZGlbVC5nLmxmXT0xLGRpW1QuZy51Y109MSxkaVtULmcuVmJdPTEsZGlbVC5nLkliXT1cbjEsZGlbVC5nLk9hXT0xLGRpW1QuZy5lZF09MSxkaVtULmcucmFdPTEsZGlbVC5nLkJhXT0xLGRpW1QuZy5CZ109MSxkaVtULmcuQ2ddPTEsZGlbVC5nLkRnXT0xLGRpW1QuZy5FZ109MSxkaVtULmcuV2JdPTEsZGlbVC5nLklhXT0xLGRpW1QuZy5YYl09MSxkaVtULmcuaGRdPTEsZGlbVC5nLmtkXT0xLGRpW1QuZy55YV09MSxkaVtULmcuTGJdPTEsZGlbVC5nLlliXT0xLGRpW1QuZy5XYV09MSxkaVtULmcuQ2FdPTEsZGlbVC5nLnphXT0xLGRpW1QuZy5sYV09MSxkaSkpLGZpPXt9LGdpPU9iamVjdC5mcmVlemUoKGZpLnNlYXJjaD1cInNcIixmaS55b3V0dWJlPVwieVwiLGZpLnBsYXlzdG9yZT1cInBcIixmaS5zaG9wcGluZz1cImhcIixmaS5hZHM9XCJhXCIsZmkubWFwcz1cIm1cIixmaSkpO09iamVjdC5mcmVlemUoVC5nKTt2YXIgaGk9e30saWk9RC5nb29nbGVfdGFnX21hbmFnZXI9RC5nb29nbGVfdGFnX21hbmFnZXJ8fHt9O2hpLlJnPVwiNDkzMFwiO2hpLnBlPU51bWJlcihcIjBcIil8fDA7aGkuaGI9XCJkYXRhTGF5ZXJcIjtoaS5rbj1cIkNoQUk4SzNsdGdZUTMvV1huNHI1bXRkYkVpUUFWVVgvTG9DOUVZSTlOdm1ORDd2OEsvbURCYnMvbjZsSVZtV20rM2xqeEhXNElOVWFBcnRtXCI7dmFyIGppPXtfX2NsOjEsX19lY2w6MSxfX2VobDoxLF9fZXZsOjEsX19mYWw6MSxfX2ZpbDoxLF9fZnNsOjEsX19obDoxLF9famVsOjEsX19sY2w6MSxfX3NkbDoxLF9fdGw6MSxfX3l0bDoxfSxraT17X19wYXVzZWQ6MSxfX3RnOjF9LGxpO2ZvcihsaSBpbiBqaSlqaS5oYXNPd25Qcm9wZXJ0eShsaSkmJihraVtsaV09MSk7dmFyIG1pPXhiKFwiXCIpLG5pPSExLG9pLHBpPSExO1xub2k9cGk7dmFyIHFpLHJpPSExO3FpPXJpO3ZhciBzaSx0aT0hMTtzaT10aTtoaS5EZD1cInd3dy5nb29nbGV0YWdtYW5hZ2VyLmNvbVwiO3ZhciB1aT1cIlwiK2hpLkRkKyhvaT9cIi9ndGFnL2pzXCI6XCIvZ3RtLmpzXCIpLHZpPW51bGwsd2k9bnVsbCx4aT17fSx5aT17fTtmdW5jdGlvbiB6aSgpe3ZhciBhPWlpLnNlcXVlbmNlfHwxO2lpLnNlcXVlbmNlPWErMTtyZXR1cm4gYX1oaS5xaz1cIlwiO3ZhciBBaT1cIlwiO2hpLlNnPUFpO3ZhciBCaT1uZXcgZnVuY3Rpb24oKXt0aGlzLmo9XCJcIjt0aGlzLkg9ITE7dGhpcy5EPTA7dGhpcy5SPXRoaXMuWj10aGlzLlBhPXRoaXMuTT1cIlwifTtmdW5jdGlvbiBDaSgpe3ZhciBhPUJpLk0ubGVuZ3RoO3JldHVybiBCaS5NW2EtMV09PT1cIi9cIj9CaS5NLnN1YnN0cmluZygwLGEtMSk6QmkuTX1mdW5jdGlvbiBEaSgpe3JldHVybiBCaS5IJiZCaS5EIT09MX1mdW5jdGlvbiBFaShhKXtmb3IodmFyIGI9e30sYz1uYShhLnNwbGl0KFwifFwiKSksZD1jLm5leHQoKTshZC5kb25lO2Q9Yy5uZXh0KCkpYltkLnZhbHVlXT0hMDtyZXR1cm4gYn12YXIgRmk9bmV3IHViLEdpPXt9LEhpPXt9LEtpPXtuYW1lOmhpLmhiLHNldDpmdW5jdGlvbihhLGIpe2goSmIoYSxiKSxHaSk7SWkoKX0sZ2V0OmZ1bmN0aW9uKGEpe3JldHVybiBKaShhLDIpfSxyZXNldDpmdW5jdGlvbigpe0ZpPW5ldyB1YjtHaT17fTtJaSgpfX07ZnVuY3Rpb24gSmkoYSxiKXtyZXR1cm4gYiE9Mj9GaS5nZXQoYSk6TGkoYSl9ZnVuY3Rpb24gTGkoYSxiKXt2YXIgYz1hLnNwbGl0KFwiLlwiKTtiPWJ8fFtdO2Zvcih2YXIgZD1HaSxlPTA7ZTxjLmxlbmd0aDtlKyspe2lmKGQ9PT1udWxsKXJldHVybiExO2lmKGQ9PT12b2lkIDApYnJlYWs7ZD1kW2NbZV1dO2lmKGIuaW5kZXhPZihkKSE9PS0xKXJldHVybn1yZXR1cm4gZH1mdW5jdGlvbiBNaShhLGIpe0hpLmhhc093blByb3BlcnR5KGEpfHwoRmkuc2V0KGEsYiksaChKYihhLGIpLEdpKSxJaSgpKX1cbmZ1bmN0aW9uIE5pKCl7Zm9yKHZhciBhPVtcImd0bS5hbGxvd2xpc3RcIixcImd0bS5ibG9ja2xpc3RcIixcImd0bS53aGl0ZWxpc3RcIixcImd0bS5ibGFja2xpc3RcIixcInRhZ1R5cGVCbGFja2xpc3RcIl0sYj0wO2I8YS5sZW5ndGg7YisrKXt2YXIgYz1hW2JdLGQ9SmkoYywxKTtpZihBcnJheS5pc0FycmF5KGQpfHxTYShkKSlkPWgoZCk7SGlbY109ZH19ZnVuY3Rpb24gSWkoYSl7eihIaSxmdW5jdGlvbihiLGMpe0ZpLnNldChiLGMpO2goSmIoYiksR2kpO2goSmIoYixjKSxHaSk7YSYmZGVsZXRlIEhpW2JdfSl9ZnVuY3Rpb24gT2koYSxiKXt2YXIgYyxkPShiPT09dm9pZCAwPzI6YikhPT0xP0xpKGEpOkZpLmdldChhKTtRYShkKT09PVwiYXJyYXlcInx8UWEoZCk9PT1cIm9iamVjdFwiP2M9aChkKTpjPWQ7cmV0dXJuIGN9O3ZhciBTaT0vOlswLTldKyQvLFRpPS9eXFxkK1xcLmZsc1xcLmRvdWJsZWNsaWNrXFwubmV0JC87ZnVuY3Rpb24gVWkoYSxiLGMsZCl7Zm9yKHZhciBlPVtdLGY9bmEoYS5zcGxpdChcIiZcIikpLGc9Zi5uZXh0KCk7IWcuZG9uZTtnPWYubmV4dCgpKXt2YXIgaz1uYShnLnZhbHVlLnNwbGl0KFwiPVwiKSksbT1rLm5leHQoKS52YWx1ZSxuPW9hKGspO2lmKGRlY29kZVVSSUNvbXBvbmVudChtLnJlcGxhY2UoL1xcKy9nLFwiIFwiKSk9PT1iKXt2YXIgcD1uLmpvaW4oXCI9XCIpO2lmKCFjKXJldHVybiBkP3A6ZGVjb2RlVVJJQ29tcG9uZW50KHAucmVwbGFjZSgvXFwrL2csXCIgXCIpKTtlLnB1c2goZD9wOmRlY29kZVVSSUNvbXBvbmVudChwLnJlcGxhY2UoL1xcKy9nLFwiIFwiKSkpfX1yZXR1cm4gYz9lOnZvaWQgMH1cbmZ1bmN0aW9uIFZpKGEsYixjLGQsZSl7YiYmKGI9U3RyaW5nKGIpLnRvTG93ZXJDYXNlKCkpO2lmKGI9PT1cInByb3RvY29sXCJ8fGI9PT1cInBvcnRcIilhLnByb3RvY29sPVdpKGEucHJvdG9jb2wpfHxXaShELmxvY2F0aW9uLnByb3RvY29sKTtiPT09XCJwb3J0XCI/YS5wb3J0PVN0cmluZyhOdW1iZXIoYS5ob3N0bmFtZT9hLnBvcnQ6RC5sb2NhdGlvbi5wb3J0KXx8KGEucHJvdG9jb2w9PT1cImh0dHBcIj84MDphLnByb3RvY29sPT09XCJodHRwc1wiPzQ0MzpcIlwiKSk6Yj09PVwiaG9zdFwiJiYoYS5ob3N0bmFtZT0oYS5ob3N0bmFtZXx8RC5sb2NhdGlvbi5ob3N0bmFtZSkucmVwbGFjZShTaSxcIlwiKS50b0xvd2VyQ2FzZSgpKTtyZXR1cm4gWGkoYSxiLGMsZCxlKX1cbmZ1bmN0aW9uIFhpKGEsYixjLGQsZSl7dmFyIGYsZz1XaShhLnByb3RvY29sKTtiJiYoYj1TdHJpbmcoYikudG9Mb3dlckNhc2UoKSk7c3dpdGNoKGIpe2Nhc2UgXCJ1cmxfbm9fZnJhZ21lbnRcIjpmPVlpKGEpO2JyZWFrO2Nhc2UgXCJwcm90b2NvbFwiOmY9ZzticmVhaztjYXNlIFwiaG9zdFwiOmY9YS5ob3N0bmFtZS5yZXBsYWNlKFNpLFwiXCIpLnRvTG93ZXJDYXNlKCk7aWYoYyl7dmFyIGs9L153d3dcXGQqXFwuLy5leGVjKGYpO2smJmtbMF0mJihmPWYuc3Vic3RyaW5nKGtbMF0ubGVuZ3RoKSl9YnJlYWs7Y2FzZSBcInBvcnRcIjpmPVN0cmluZyhOdW1iZXIoYS5wb3J0KXx8KGc9PT1cImh0dHBcIj84MDpnPT09XCJodHRwc1wiPzQ0MzpcIlwiKSk7YnJlYWs7Y2FzZSBcInBhdGhcIjphLnBhdGhuYW1lfHxhLmhvc3RuYW1lfHxoYihcIlRBR0dJTkdcIiwxKTtmPWEucGF0aG5hbWUuc3Vic3RyaW5nKDAsMSk9PT1cIi9cIj9hLnBhdGhuYW1lOlwiL1wiK2EucGF0aG5hbWU7dmFyIG09Zi5zcGxpdChcIi9cIik7KGR8fFtdKS5pbmRleE9mKG1bbS5sZW5ndGgtXG4xXSk+PTAmJihtW20ubGVuZ3RoLTFdPVwiXCIpO2Y9bS5qb2luKFwiL1wiKTticmVhaztjYXNlIFwicXVlcnlcIjpmPWEuc2VhcmNoLnJlcGxhY2UoXCI/XCIsXCJcIik7ZSYmKGY9VWkoZixlLCExKSk7YnJlYWs7Y2FzZSBcImV4dGVuc2lvblwiOnZhciBuPWEucGF0aG5hbWUuc3BsaXQoXCIuXCIpO2Y9bi5sZW5ndGg+MT9uW24ubGVuZ3RoLTFdOlwiXCI7Zj1mLnNwbGl0KFwiL1wiKVswXTticmVhaztjYXNlIFwiZnJhZ21lbnRcIjpmPWEuaGFzaC5yZXBsYWNlKFwiI1wiLFwiXCIpO2JyZWFrO2RlZmF1bHQ6Zj1hJiZhLmhyZWZ9cmV0dXJuIGZ9ZnVuY3Rpb24gV2koYSl7cmV0dXJuIGE/YS5yZXBsYWNlKFwiOlwiLFwiXCIpLnRvTG93ZXJDYXNlKCk6XCJcIn1mdW5jdGlvbiBZaShhKXt2YXIgYj1cIlwiO2lmKGEmJmEuaHJlZil7dmFyIGM9YS5ocmVmLmluZGV4T2YoXCIjXCIpO2I9YzwwP2EuaHJlZjphLmhyZWYuc3Vic3RyaW5nKDAsYyl9cmV0dXJuIGJ9dmFyIFppPXt9LCRpPTA7XG5mdW5jdGlvbiBhaihhKXt2YXIgYj1aaVthXTtpZighYil7dmFyIGM9RS5jcmVhdGVFbGVtZW50KFwiYVwiKTthJiYoYy5ocmVmPWEpO3ZhciBkPWMucGF0aG5hbWU7ZFswXSE9PVwiL1wiJiYoYXx8aGIoXCJUQUdHSU5HXCIsMSksZD1cIi9cIitkKTt2YXIgZT1jLmhvc3RuYW1lLnJlcGxhY2UoU2ksXCJcIik7Yj17aHJlZjpjLmhyZWYscHJvdG9jb2w6Yy5wcm90b2NvbCxob3N0OmMuaG9zdCxob3N0bmFtZTplLHBhdGhuYW1lOmQsc2VhcmNoOmMuc2VhcmNoLGhhc2g6Yy5oYXNoLHBvcnQ6Yy5wb3J0fTskaTw1JiYoWmlbYV09YiwkaSsrKX1yZXR1cm4gYn1cbmZ1bmN0aW9uIGJqKGEpe2Z1bmN0aW9uIGIobil7dmFyIHA9bi5zcGxpdChcIj1cIilbMF07cmV0dXJuIGQuaW5kZXhPZihwKTwwP246cCtcIj0wXCJ9ZnVuY3Rpb24gYyhuKXtyZXR1cm4gbi5zcGxpdChcIiZcIikubWFwKGIpLmZpbHRlcihmdW5jdGlvbihwKXtyZXR1cm4gcCE9PXZvaWQgMH0pLmpvaW4oXCImXCIpfXZhciBkPVwiZ2NsaWQgZGNsaWQgZ2JyYWlkIHdicmFpZCBnY2xhdyBnY2xkYyBnY2xoYSBnY2xnZiBnY2xnYiBfZ2xcIi5zcGxpdChcIiBcIiksZT1haihhKSxmPWEuc3BsaXQoL1s/I10vKVswXSxnPWUuc2VhcmNoLGs9ZS5oYXNoO2dbMF09PT1cIj9cIiYmKGc9Zy5zdWJzdHJpbmcoMSkpO2tbMF09PT1cIiNcIiYmKGs9ay5zdWJzdHJpbmcoMSkpO2c9YyhnKTtrPWMoayk7ZyE9PVwiXCImJihnPVwiP1wiK2cpO2shPT1cIlwiJiYoaz1cIiNcIitrKTt2YXIgbT1cIlwiK2YrZytrO21bbS5sZW5ndGgtMV09PT1cIi9cIiYmKG09bS5zdWJzdHJpbmcoMCxtLmxlbmd0aC0xKSk7cmV0dXJuIG19XG5mdW5jdGlvbiBjaihhKXt2YXIgYj1haihELmxvY2F0aW9uLmhyZWYpLGM9VmkoYixcImhvc3RcIiwhMSk7aWYoYyYmYy5tYXRjaChUaSkpe3ZhciBkPVZpKGIsXCJwYXRoXCIpO2lmKGQpe3ZhciBlPWQuc3BsaXQoYStcIj1cIik7aWYoZS5sZW5ndGg+MSlyZXR1cm4gZVsxXS5zcGxpdChcIjtcIilbMF0uc3BsaXQoXCI/XCIpWzBdfX19ZnVuY3Rpb24gZGooYSl7Zm9yKHZhciBiPTA7YjwzOysrYil0cnl7dmFyIGM9ZGVjb2RlVVJJQ29tcG9uZW50KGEpLnJlcGxhY2UoL1xcKy9nLFwiIFwiKTtpZihjPT09YSlicmVhazthPWN9Y2F0Y2goZCl7cmV0dXJuXCJcIn1yZXR1cm4gYX07dmFyIGVqPXtcImh0dHBzOi8vd3d3Lmdvb2dsZS5jb21cIjpcIi9nXCIsXCJodHRwczovL3d3dy5nb29nbGVhZHNlcnZpY2VzLmNvbVwiOlwiL2FzXCIsXCJodHRwczovL3BhZ2VhZDIuZ29vZ2xlc3luZGljYXRpb24uY29tXCI6XCIvZ3NcIn07ZnVuY3Rpb24gZmooYSxiKXtpZihhKXt2YXIgYz1cIlwiK2E7Yy5pbmRleE9mKFwiaHR0cDovL1wiKSE9PTAmJmMuaW5kZXhPZihcImh0dHBzOi8vXCIpIT09MCYmKGM9XCJodHRwczovL1wiK2MpO2NbYy5sZW5ndGgtMV09PT1cIi9cIiYmKGM9Yy5zdWJzdHJpbmcoMCxjLmxlbmd0aC0xKSk7cmV0dXJuIGFqKFwiXCIrYytiKS5ocmVmfX1mdW5jdGlvbiBnaihhLGIpe2lmKERpKCl8fHFpKXJldHVybiBmaihhLGIpfWZ1bmN0aW9uIGhqKCl7cmV0dXJuISFoaS5TZyYmaGkuU2cuc3BsaXQoXCJAQFwiKS5qb2luKFwiXCIpIT09XCJTR1RNX1RPS0VOXCJ9XG5mdW5jdGlvbiBpaihhKXtmb3IodmFyIGI9bmEoW1QuZy5oZCxULmcuTGJdKSxjPWIubmV4dCgpOyFjLmRvbmU7Yz1iLm5leHQoKSl7dmFyIGQ9VShhLGMudmFsdWUpO2lmKGQpcmV0dXJuIGR9fWZ1bmN0aW9uIGpqKGEsYil7cmV0dXJuIERpKCk/XCJcIitDaSgpKyhiP2VqW2FdfHxcIlwiOlwiXCIpOmF9O2Z1bmN0aW9uIGtqKGEpe3ZhciBiPVN0cmluZyhhW0llLm1hXXx8XCJcIikucmVwbGFjZSgvXy9nLFwiXCIpO3JldHVybiBHYihiLFwiY3Z0XCIpP1wiY3Z0XCI6Yn12YXIgbGo9RC5sb2NhdGlvbi5zZWFyY2guaW5kZXhPZihcIj9ndG1fbGF0ZW5jeT1cIik+PTB8fEQubG9jYXRpb24uc2VhcmNoLmluZGV4T2YoXCImZ3RtX2xhdGVuY3k9XCIpPj0wO3ZhciBtaj17c2FtcGxlUmF0ZTpcIjAuMDA1MDAwXCIsbGs6XCJcIixobjpcIjAuMDFcIn0sbmo9TWF0aC5yYW5kb20oKSxvajtpZighKG9qPWxqKSl7dmFyIHBqPW1qLnNhbXBsZVJhdGU7b2o9bmo8TnVtYmVyKHBqKX12YXIgcWo9b2oscmo9KHJjPT1udWxsP3ZvaWQgMDpyYy5pbmNsdWRlcyhcImd0bV9kZWJ1Zz1kXCIpKXx8bGp8fG5qPj0xLU51bWJlcihtai5obik7dmFyIHNqPS9ndGFnWy5cXC9danMvLHRqPS9ndG1bLlxcL11qcy8sdWo9ITE7ZnVuY3Rpb24gdmooYSl7aWYodWopcmV0dXJuXCIxXCI7dmFyIGI9YS5zY3JpcHRTb3VyY2U7aWYoYil7aWYoc2oudGVzdChiKSlyZXR1cm5cIjNcIjtpZih0ai50ZXN0KGIpKXJldHVyblwiMlwifXJldHVyblwiMFwifWZ1bmN0aW9uIHdqKGEsYil7dmFyIGM9eGooKTtjLnBlbmRpbmd8fChjLnBlbmRpbmc9W10pO3JiKGMucGVuZGluZyxmdW5jdGlvbihkKXtyZXR1cm4gZC50YXJnZXQuY3RpZD09PWEuY3RpZCYmZC50YXJnZXQuaXNEZXN0aW5hdGlvbj09PWEuaXNEZXN0aW5hdGlvbn0pfHxjLnBlbmRpbmcucHVzaCh7dGFyZ2V0OmEsb25Mb2FkOmJ9KX1cbnZhciB5aj1mdW5jdGlvbigpe3RoaXMuY29udGFpbmVyPXt9O3RoaXMuZGVzdGluYXRpb249e307dGhpcy5jYW5vbmljYWw9e307dGhpcy5wZW5kaW5nPVtdO3RoaXMuc2lsb2VkPVtdO3RoaXMuaW5qZWN0ZWRGaXJzdFBhcnR5Q29udGFpbmVycz17fTt2YXIgYTt2YXIgYj1ELmdvb2dsZV90YWdzX2ZpcnN0X3BhcnR5fHxbXTtpZihBcnJheS5pc0FycmF5KGIpKXtmb3IodmFyIGM9e30sZD1uYShiKSxlPWQubmV4dCgpOyFlLmRvbmU7ZT1kLm5leHQoKSljW2UudmFsdWVdPSEwO2E9T2JqZWN0LmZyZWV6ZShjKX1lbHNlIGE9e307dGhpcy5pbmplY3RlZEZpcnN0UGFydHlDb250YWluZXJzPWF9O2Z1bmN0aW9uIHhqKCl7dmFyIGE9c2MoXCJnb29nbGVfdGFnX2RhdGFcIix7fSksYj1hLnRpZHI7Ynx8KGI9bmV3IHlqLGEudGlkcj1iKTtyZXR1cm4gYn07dmFyIHpqPXt9LEFqPSExLE9mPXtjdGlkOlwiR1RNLU42QlZLUDlcIixjYW5vbmljYWxDb250YWluZXJJZDpcIlwiLFJqOlwiR1RNLU42QlZLUDlcIixTajpcIkdUTS1ONkJWS1A5XCJ9O3pqLm1lPXhiKFwiXCIpO2Z1bmN0aW9uIEJqKCl7dmFyIGE9Q2ooKTtyZXR1cm4gQWo/YS5tYXAoRGopOmF9ZnVuY3Rpb24gRWooKXt2YXIgYT1GaigpO3JldHVybiBBaj9hLm1hcChEaik6YX1mdW5jdGlvbiBHaigpe3JldHVybiBIaihPZi5jdGlkKX1mdW5jdGlvbiBJaigpe3JldHVybiBIaihPZi5jYW5vbmljYWxDb250YWluZXJJZHx8XCJfXCIrT2YuY3RpZCl9ZnVuY3Rpb24gQ2ooKXtyZXR1cm4gT2YuUmo/T2YuUmouc3BsaXQoXCJ8XCIpOltPZi5jdGlkXX1mdW5jdGlvbiBGaigpe3JldHVybiBPZi5Taj9PZi5Tai5zcGxpdChcInxcIik6W119XG5mdW5jdGlvbiBKaigpe3ZhciBhPUtqKExqKCkpLGI9YSYmYS5wYXJlbnQ7aWYoYilyZXR1cm4gS2ooYil9ZnVuY3Rpb24gS2ooYSl7dmFyIGI9eGooKTtyZXR1cm4gYS5pc0Rlc3RpbmF0aW9uP2IuZGVzdGluYXRpb25bYS5jdGlkXTpiLmNvbnRhaW5lclthLmN0aWRdfWZ1bmN0aW9uIEhqKGEpe3JldHVybiBBaj9EaihhKTphfWZ1bmN0aW9uIERqKGEpe3JldHVyblwic2lsb2VkX1wiK2F9ZnVuY3Rpb24gTWooYSl7cmV0dXJuIEFqP1FqKGEpOmF9ZnVuY3Rpb24gUWooYSl7YT1TdHJpbmcoYSk7cmV0dXJuIEdiKGEsXCJzaWxvZWRfXCIpP2Euc3Vic3RyaW5nKDcpOmF9XG5mdW5jdGlvbiBSaigpe3ZhciBhPSExO2lmKGEpe3ZhciBiPXhqKCk7aWYoYi5zaWxvZWQpe2Zvcih2YXIgYz1bXSxkPUNqKCkubWFwKERqKSxlPUZqKCkubWFwKERqKSxmPXt9LGc9MDtnPGIuc2lsb2VkLmxlbmd0aDtmPXtKZjp2b2lkIDB9LGcrKylmLkpmPWIuc2lsb2VkW2ddLCFBaiYmcmIoZi5KZi5pc0Rlc3RpbmF0aW9uP2U6ZCxmdW5jdGlvbihrKXtyZXR1cm4gZnVuY3Rpb24obSl7cmV0dXJuIG09PT1rLkpmLmN0aWR9fShmKSk/QWo9ITA6Yy5wdXNoKGYuSmYpO2Iuc2lsb2VkPWN9fX1cbmZ1bmN0aW9uIFNqKCl7dmFyIGE9eGooKTtpZihhLnBlbmRpbmcpe2Zvcih2YXIgYixjPVtdLGQ9ITEsZT1CaigpLGY9RWooKSxnPXt9LGs9MDtrPGEucGVuZGluZy5sZW5ndGg7Zz17UmU6dm9pZCAwfSxrKyspZy5SZT1hLnBlbmRpbmdba10scmIoZy5SZS50YXJnZXQuaXNEZXN0aW5hdGlvbj9mOmUsZnVuY3Rpb24obSl7cmV0dXJuIGZ1bmN0aW9uKG4pe3JldHVybiBuPT09bS5SZS50YXJnZXQuY3RpZH19KGcpKT9kfHwoYj1nLlJlLm9uTG9hZCxkPSEwKTpjLnB1c2goZy5SZSk7YS5wZW5kaW5nPWM7aWYoYil0cnl7YihJaigpKX1jYXRjaChtKXt9fX1cbmZ1bmN0aW9uIFRqKCl7Zm9yKHZhciBhPU9mLmN0aWQsYj1CaigpLGM9RWooKSxkPWZ1bmN0aW9uKG4scCl7dmFyIHE9e2Nhbm9uaWNhbENvbnRhaW5lcklkOk9mLmNhbm9uaWNhbENvbnRhaW5lcklkLHNjcmlwdENvbnRhaW5lcklkOmEsc3RhdGU6Mixjb250YWluZXJzOmIuc2xpY2UoKSxkZXN0aW5hdGlvbnM6Yy5zbGljZSgpfTtxYyYmKHEuc2NyaXB0RWxlbWVudD1xYyk7cmMmJihxLnNjcmlwdFNvdXJjZT1yYyk7aWYoSmooKT09PXZvaWQgMCl7dmFyIHI7YTp7aWYoKHEuc2NyaXB0Q29udGFpbmVySWR8fFwiXCIpLmluZGV4T2YoXCJHVE0tXCIpPj0wKXt2YXIgdDtiOntpZihxLnNjcmlwdFNvdXJjZSl7Zm9yKHZhciB1PUJpLkgsdj1haihxLnNjcmlwdFNvdXJjZSksdz11P3YucGF0aG5hbWU6XCJcIit2Lmhvc3RuYW1lK3YucGF0aG5hbWUseD1FLnNjcmlwdHMseT1cIlwiLEE9MDtBPHgubGVuZ3RoOysrQSl7dmFyIEI9eFtBXTtpZighKEIuaW5uZXJIVE1MLmxlbmd0aD09PTB8fCF1JiZCLmlubmVySFRNTC5pbmRleE9mKHEuc2NyaXB0Q29udGFpbmVySWR8fFxuXCJTSE9VTERfTk9UX0JFX1NFVFwiKTwwfHxCLmlubmVySFRNTC5pbmRleE9mKHcpPDApKXtpZihCLmlubmVySFRNTC5pbmRleE9mKFwiKGZ1bmN0aW9uKHcsZCxzLGwsaSlcIik+PTApe3Q9U3RyaW5nKEEpO2JyZWFrIGJ9eT1TdHJpbmcoQSl9fWlmKHkpe3Q9eTticmVhayBifX10PXZvaWQgMH12YXIgQz10O2lmKEMpe3VqPSEwO3I9QzticmVhayBhfX12YXIgSD1bXS5zbGljZS5jYWxsKGRvY3VtZW50LnNjcmlwdHMpO3I9cS5zY3JpcHRFbGVtZW50P1N0cmluZyhILmluZGV4T2YocS5zY3JpcHRFbGVtZW50KSk6XCItMVwifXEuaHRtbExvYWRPcmRlcj1yO3EubG9hZFNjcmlwdFR5cGU9dmoocSl9dmFyIEk9cD9lLmRlc3RpbmF0aW9uOmUuY29udGFpbmVyLEY9SVtuXTtGPyhwJiZGLnN0YXRlPT09MCYmTSg5MyksT2JqZWN0LmFzc2lnbihGLHEpKTpJW25dPXF9LGU9eGooKSxmPW5hKGIpLGc9Zi5uZXh0KCk7IWcuZG9uZTtnPWYubmV4dCgpKWQoZy52YWx1ZSwhMSk7Zm9yKHZhciBrPW5hKGMpLFxubT1rLm5leHQoKTshbS5kb25lO209ay5uZXh0KCkpZChtLnZhbHVlLCEwKTtlLmNhbm9uaWNhbFtJaigpXT17fTtTaigpfWZ1bmN0aW9uIFVqKGEpe3JldHVybiEheGooKS5jb250YWluZXJbYV19ZnVuY3Rpb24gVmooYSl7dmFyIGI9eGooKS5kZXN0aW5hdGlvblthXTtyZXR1cm4hIWImJiEhYi5zdGF0ZX1mdW5jdGlvbiBMaigpe3JldHVybntjdGlkOkdqKCksaXNEZXN0aW5hdGlvbjp6ai5tZX19ZnVuY3Rpb24gV2ooYSl7dmFyIGI9eGooKTsoYi5zaWxvZWQ9Yi5zaWxvZWR8fFtdKS5wdXNoKGEpfWZ1bmN0aW9uIFhqKCl7dmFyIGE9eGooKS5jb250YWluZXIsYjtmb3IoYiBpbiBhKWlmKGEuaGFzT3duUHJvcGVydHkoYikmJmFbYl0uc3RhdGU9PT0xKXJldHVybiEwO3JldHVybiExfWZ1bmN0aW9uIFlqKCl7dmFyIGE9e307eih4aigpLmRlc3RpbmF0aW9uLGZ1bmN0aW9uKGIsYyl7Yy5zdGF0ZT09PTAmJihhW1FqKGIpXT1jKX0pO3JldHVybiBhfVxuZnVuY3Rpb24gWmooYSl7cmV0dXJuISEoYSYmYS5wYXJlbnQmJmEuY29udGV4dCYmYS5jb250ZXh0LnNvdXJjZT09PTEmJmEucGFyZW50LmN0aWQuaW5kZXhPZihcIkdUTS1cIikhPT0wKX12YXIgYWs9XCIvdGQ/aWQ9XCIrT2YuY3RpZCxiaz1bXCJ2XCIsXCJ0XCIsXCJwaWRcIixcImRsXCIsXCJ0ZHBcIl0sY2s9W1wibWNjXCJdLGRrPXt9LGVrPXt9O2Z1bmN0aW9uIGZrKGEsYixjKXtla1thXT1iOyhjPT09dm9pZCAwfHxjKSYmZ2soYSl9ZnVuY3Rpb24gZ2soYSxiKXtpZihka1thXT09PXZvaWQgMHx8KGI9PT12b2lkIDA/MDpiKSlka1thXT0hMH1mdW5jdGlvbiBoayhhKXthPWE9PT12b2lkIDA/ITE6YTt2YXIgYj1PYmplY3Qua2V5cyhkaykuZmlsdGVyKGZ1bmN0aW9uKGMpe3JldHVybiBka1tjXT09PSEwJiZla1tjXSE9PXZvaWQgMCYmKGF8fCFjay5pbmNsdWRlcyhjKSl9KS5tYXAoZnVuY3Rpb24oYyl7dmFyIGQ9ZWtbY107dHlwZW9mIGQ9PT1cImZ1bmN0aW9uXCImJihkPWQoKSk7cmV0dXJuIGQ/XCImXCIrYytcIj1cIitkOlwiXCJ9KS5qb2luKFwiXCIpO3JldHVyblwiXCIramooXCJodHRwczovL3d3dy5nb29nbGV0YWdtYW5hZ2VyLmNvbVwiKSthaysoXCJcIitiK1wiJno9MFwiKX1cbmZ1bmN0aW9uIGlrKCl7T2JqZWN0LmtleXMoZGspLmZvckVhY2goZnVuY3Rpb24oYSl7YmsuaW5kZXhPZihhKTwwJiYoZGtbYV09ITEpfSl9ZnVuY3Rpb24gamsoYSl7YT1hPT09dm9pZCAwPyExOmE7aWYocmomJk9mLmN0aWQpe3ZhciBiPWhrKGEpO2E/TWMoYik6QWMoYik7aWsoKX19ZnVuY3Rpb24ga2soKXtPYmplY3Qua2V5cyhkaykuZmlsdGVyKGZ1bmN0aW9uKGEpe3JldHVybiBka1thXSYmIWJrLmluY2x1ZGVzKGEpfSkubGVuZ3RoPjAmJmprKCEwKX12YXIgbGs9c2IoKTtmdW5jdGlvbiBtaygpe2xrPXNiKCl9ZnVuY3Rpb24gbmsoKXtmayhcInZcIixcIjNcIik7ZmsoXCJ0XCIsXCJ0XCIpO2ZrKFwicGlkXCIsZnVuY3Rpb24oKXtyZXR1cm4gU3RyaW5nKGxrKX0pO0NjKEQsXCJwYWdlaGlkZVwiLGtrKTtELnNldEludGVydmFsKG1rLDg2NEU1KX1mdW5jdGlvbiBvaygpe3ZhciBhPXNjKFwiZ29vZ2xlX3RhZ19kYXRhXCIse30pO3JldHVybiBhLmljcz1hLmljc3x8bmV3IHBrfXZhciBwaz1mdW5jdGlvbigpe3RoaXMuZW50cmllcz17fTt0aGlzLndhaXRQZXJpb2RUaW1lZE91dD10aGlzLndhc1NldExhdGU9dGhpcy5hY2Nlc3NlZEFueT10aGlzLmFjY2Vzc2VkRGVmYXVsdD10aGlzLnVzZWRJbXBsaWNpdD10aGlzLnVzZWRVcGRhdGU9dGhpcy51c2VkRGVmYXVsdD10aGlzLnVzZWREZWNsYXJlPXRoaXMuYWN0aXZlPSExO3RoaXMuaj1bXX07XG5way5wcm90b3R5cGUuZGVmYXVsdD1mdW5jdGlvbihhLGIsYyxkLGUsZixnKXt0aGlzLnVzZWREZWZhdWx0fHx0aGlzLnVzZWREZWNsYXJlfHwhdGhpcy5hY2Nlc3NlZERlZmF1bHQmJiF0aGlzLmFjY2Vzc2VkQW55fHwodGhpcy53YXNTZXRMYXRlPSEwKTt0aGlzLnVzZWREZWZhdWx0PXRoaXMuYWN0aXZlPSEwO2hiKFwiVEFHR0lOR1wiLDE5KTtiPT1udWxsP2hiKFwiVEFHR0lOR1wiLDE4KTpxayh0aGlzLGEsYj09PVwiZ3JhbnRlZFwiLGMsZCxlLGYsZyl9O3BrLnByb3RvdHlwZS53YWl0Rm9yVXBkYXRlPWZ1bmN0aW9uKGEsYixjKXtmb3IodmFyIGQ9MDtkPGEubGVuZ3RoO2QrKylxayh0aGlzLGFbZF0sdm9pZCAwLHZvaWQgMCxcIlwiLFwiXCIsYixjKX07XG52YXIgcWs9ZnVuY3Rpb24oYSxiLGMsZCxlLGYsZyxrKXt2YXIgbT1hLmVudHJpZXMsbj1tW2JdfHx7fSxwPW4ucmVnaW9uLHE9ZCYmbChkKT9kLnRvVXBwZXJDYXNlKCk6dm9pZCAwO2U9ZS50b1VwcGVyQ2FzZSgpO2Y9Zi50b1VwcGVyQ2FzZSgpO2lmKGU9PT1cIlwifHxxPT09Znx8KHE9PT1lP3AhPT1mOiFxJiYhcCkpe3ZhciByPSEhKGcmJmc+MCYmbi51cGRhdGU9PT12b2lkIDApLHQ9e3JlZ2lvbjpxLGRlY2xhcmVfcmVnaW9uOm4uZGVjbGFyZV9yZWdpb24saW1wbGljaXQ6bi5pbXBsaWNpdCxkZWZhdWx0OmMhPT12b2lkIDA/YzpuLmRlZmF1bHQsZGVjbGFyZTpuLmRlY2xhcmUsdXBkYXRlOm4udXBkYXRlLHF1aWV0OnJ9O2lmKGUhPT1cIlwifHxuLmRlZmF1bHQhPT0hMSltW2JdPXQ7ciYmRC5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7bVtiXT09PXQmJnQucXVpZXQmJihoYihcIlRBR0dJTkdcIiwyKSxhLndhaXRQZXJpb2RUaW1lZE91dD0hMCxhLmNsZWFyVGltZW91dChiLHZvaWQgMCxrKSxcbmEubm90aWZ5TGlzdGVuZXJzKCkpfSxnKX19O2JhPXBrLnByb3RvdHlwZTtiYS5jbGVhclRpbWVvdXQ9ZnVuY3Rpb24oYSxiLGMpe3ZhciBkPVthXSxlPWMuZGVsZWdhdGVkQ29uc2VudFR5cGVzLGY7Zm9yKGYgaW4gZSllLmhhc093blByb3BlcnR5KGYpJiZlW2ZdPT09YSYmZC5wdXNoKGYpO3ZhciBnPXRoaXMuZW50cmllc1thXXx8e30saz10aGlzLmdldENvbnNlbnRTdGF0ZShhLGMpO2lmKGcucXVpZXQpe2cucXVpZXQ9ITE7Zm9yKHZhciBtPW5hKGQpLG49bS5uZXh0KCk7IW4uZG9uZTtuPW0ubmV4dCgpKXJrKHRoaXMsbi52YWx1ZSl9ZWxzZSBpZihiIT09dm9pZCAwJiZrIT09Yilmb3IodmFyIHA9bmEoZCkscT1wLm5leHQoKTshcS5kb25lO3E9cC5uZXh0KCkpcmsodGhpcyxxLnZhbHVlKX07XG5iYS51cGRhdGU9ZnVuY3Rpb24oYSxiLGMpe3RoaXMudXNlZERlZmF1bHR8fHRoaXMudXNlZERlY2xhcmV8fHRoaXMudXNlZFVwZGF0ZXx8IXRoaXMuYWNjZXNzZWRBbnl8fCh0aGlzLndhc1NldExhdGU9ITApO3RoaXMudXNlZFVwZGF0ZT10aGlzLmFjdGl2ZT0hMDtpZihiIT1udWxsKXt2YXIgZD10aGlzLmdldENvbnNlbnRTdGF0ZShhLGMpLGU9dGhpcy5lbnRyaWVzOyhlW2FdPWVbYV18fHt9KS51cGRhdGU9Yj09PVwiZ3JhbnRlZFwiO3RoaXMuY2xlYXJUaW1lb3V0KGEsZCxjKX19O1xuYmEuZGVjbGFyZT1mdW5jdGlvbihhLGIsYyxkLGUpe3RoaXMudXNlZERlY2xhcmU9dGhpcy5hY3RpdmU9ITA7dmFyIGY9dGhpcy5lbnRyaWVzLGc9ZlthXXx8e30saz1nLmRlY2xhcmVfcmVnaW9uLG09YyYmbChjKT9jLnRvVXBwZXJDYXNlKCk6dm9pZCAwO2Q9ZC50b1VwcGVyQ2FzZSgpO2U9ZS50b1VwcGVyQ2FzZSgpO2lmKGQ9PT1cIlwifHxtPT09ZXx8KG09PT1kP2shPT1lOiFtJiYhaykpe3ZhciBuPXtyZWdpb246Zy5yZWdpb24sZGVjbGFyZV9yZWdpb246bSxkZWNsYXJlOmI9PT1cImdyYW50ZWRcIixpbXBsaWNpdDpnLmltcGxpY2l0LGRlZmF1bHQ6Zy5kZWZhdWx0LHVwZGF0ZTpnLnVwZGF0ZSxxdWlldDpnLnF1aWV0fTtpZihkIT09XCJcInx8Zy5kZWNsYXJlIT09ITEpZlthXT1ufX07XG5iYS5pbXBsaWNpdD1mdW5jdGlvbihhLGIpe3RoaXMudXNlZEltcGxpY2l0PSEwO3ZhciBjPXRoaXMuZW50cmllcyxkPWNbYV09Y1thXXx8e307ZC5pbXBsaWNpdCE9PSExJiYoZC5pbXBsaWNpdD1iPT09XCJncmFudGVkXCIpfTtcbmJhLmdldENvbnNlbnRTdGF0ZT1mdW5jdGlvbihhLGIpe3ZhciBjPXRoaXMuZW50cmllcyxkPWNbYV18fHt9LGU9ZC51cGRhdGU7aWYoZSE9PXZvaWQgMClyZXR1cm4gZT8xOjI7aWYobWIoOCkmJmIudXNlZENvbnRhaW5lclNjb3BlZERlZmF1bHRzKXt2YXIgZj1iLmNvbnRhaW5lclNjb3BlZERlZmF1bHRzW2FdO2lmKGY9PT0zKXJldHVybiAxO2lmKGY9PT0yKXJldHVybiAyfWVsc2UgaWYoZT1kLmRlZmF1bHQsZSE9PXZvaWQgMClyZXR1cm4gZT8xOjI7aWYoYj09bnVsbD8wOmIuZGVsZWdhdGVkQ29uc2VudFR5cGVzLmhhc093blByb3BlcnR5KGEpKXt2YXIgZz1iLmRlbGVnYXRlZENvbnNlbnRUeXBlc1thXSxrPWNbZ118fHt9O2U9ay51cGRhdGU7aWYoZSE9PXZvaWQgMClyZXR1cm4gZT8xOjI7aWYobWIoOCkmJmIudXNlZENvbnRhaW5lclNjb3BlZERlZmF1bHRzKXt2YXIgbT1iLmNvbnRhaW5lclNjb3BlZERlZmF1bHRzW2ddO2lmKG09PT0zKXJldHVybiAxO2lmKG09PT0yKXJldHVybiAyfWVsc2UgaWYoZT1cbmsuZGVmYXVsdCxlIT09dm9pZCAwKXJldHVybiBlPzE6Mn1lPWQuZGVjbGFyZTtpZihlIT09dm9pZCAwKXJldHVybiBlPzE6MjtlPWQuaW1wbGljaXQ7cmV0dXJuIGUhPT12b2lkIDA/ZT8zOjQ6MH07YmEuYWRkTGlzdGVuZXI9ZnVuY3Rpb24oYSxiKXt0aGlzLmoucHVzaCh7Y29uc2VudFR5cGVzOmEsQ2w6Yn0pfTt2YXIgcms9ZnVuY3Rpb24oYSxiKXtmb3IodmFyIGM9MDtjPGEuai5sZW5ndGg7KytjKXt2YXIgZD1hLmpbY107QXJyYXkuaXNBcnJheShkLmNvbnNlbnRUeXBlcykmJmQuY29uc2VudFR5cGVzLmluZGV4T2YoYikhPT0tMSYmKGQuVGo9ITApfX07cGsucHJvdG90eXBlLm5vdGlmeUxpc3RlbmVycz1mdW5jdGlvbihhLGIpe2Zvcih2YXIgYz0wO2M8dGhpcy5qLmxlbmd0aDsrK2Mpe3ZhciBkPXRoaXMualtjXTtpZihkLlRqKXtkLlRqPSExO3RyeXtkLkNsKHtjb25zZW50RXZlbnRJZDphLGNvbnNlbnRQcmlvcml0eUlkOmJ9KX1jYXRjaChlKXt9fX19O3ZhciBzaz0hMSx0az0hMSx1az17fSx2az17ZGVsZWdhdGVkQ29uc2VudFR5cGVzOnt9LGNvcmVQbGF0Zm9ybVNlcnZpY2VzOnt9LHVzZWRDb3JlUGxhdGZvcm1TZXJ2aWNlczohMSxzZWxlY3RlZEFsbENvcmVQbGF0Zm9ybVNlcnZpY2VzOiExLGNvbnRhaW5lclNjb3BlZERlZmF1bHRzOih1ay5hZF9zdG9yYWdlPTEsdWsuYW5hbHl0aWNzX3N0b3JhZ2U9MSx1ay5hZF91c2VyX2RhdGE9MSx1ay5hZF9wZXJzb25hbGl6YXRpb249MSx1ayksdXNlZENvbnRhaW5lclNjb3BlZERlZmF1bHRzOiExfTtmdW5jdGlvbiB3ayhhKXt2YXIgYj1vaygpO2IuYWNjZXNzZWRBbnk9ITA7cmV0dXJuKGwoYSk/W2FdOmEpLmV2ZXJ5KGZ1bmN0aW9uKGMpe3N3aXRjaChiLmdldENvbnNlbnRTdGF0ZShjLHZrKSl7Y2FzZSAxOmNhc2UgMzpyZXR1cm4hMDtjYXNlIDI6Y2FzZSA0OnJldHVybiExO2RlZmF1bHQ6cmV0dXJuITB9fSl9XG5mdW5jdGlvbiB4ayhhKXt2YXIgYj1vaygpO2IuYWNjZXNzZWRBbnk9ITA7cmV0dXJuIGIuZ2V0Q29uc2VudFN0YXRlKGEsdmspfWZ1bmN0aW9uIHlrKGEpe2Zvcih2YXIgYj17fSxjPW5hKGEpLGQ9Yy5uZXh0KCk7IWQuZG9uZTtkPWMubmV4dCgpKXt2YXIgZT1kLnZhbHVlO2JbZV09dmsuY29yZVBsYXRmb3JtU2VydmljZXNbZV0hPT0hMX1yZXR1cm4gYn1mdW5jdGlvbiB6ayhhKXt2YXIgYj1vaygpO2IuYWNjZXNzZWRBbnk9ITA7cmV0dXJuIShiLmVudHJpZXNbYV18fHt9KS5xdWlldH1cbmZ1bmN0aW9uIEFrKCl7aWYoIW1iKDEyKSlyZXR1cm4hMTt2YXIgYT1vaygpO2EuYWNjZXNzZWRBbnk9ITA7aWYoYS5hY3RpdmUpcmV0dXJuITA7aWYoIW1iKDgpfHwhdmsudXNlZENvbnRhaW5lclNjb3BlZERlZmF1bHRzKXJldHVybiExO2Zvcih2YXIgYj1uYShPYmplY3Qua2V5cyh2ay5jb250YWluZXJTY29wZWREZWZhdWx0cykpLGM9Yi5uZXh0KCk7IWMuZG9uZTtjPWIubmV4dCgpKWlmKHZrLmNvbnRhaW5lclNjb3BlZERlZmF1bHRzW2MudmFsdWVdIT09MSlyZXR1cm4hMDtyZXR1cm4hMX1mdW5jdGlvbiBCayhhLGIpe29rKCkuYWRkTGlzdGVuZXIoYSxiKX1mdW5jdGlvbiBDayhhLGIpe29rKCkubm90aWZ5TGlzdGVuZXJzKGEsYil9XG5mdW5jdGlvbiBEayhhLGIpe2Z1bmN0aW9uIGMoKXtmb3IodmFyIGU9MDtlPGIubGVuZ3RoO2UrKylpZighemsoYltlXSkpcmV0dXJuITA7cmV0dXJuITF9aWYoYygpKXt2YXIgZD0hMTtCayhiLGZ1bmN0aW9uKGUpe2R8fGMoKXx8KGQ9ITAsYShlKSl9KX1lbHNlIGEoe30pfVxuZnVuY3Rpb24gRWsoYSxiKXtmdW5jdGlvbiBjKCl7Zm9yKHZhciBrPVtdLG09MDttPGUubGVuZ3RoO20rKyl7dmFyIG49ZVttXTt3ayhuKSYmIWZbbl0mJmsucHVzaChuKX1yZXR1cm4ga31mdW5jdGlvbiBkKGspe2Zvcih2YXIgbT0wO208ay5sZW5ndGg7bSsrKWZba1ttXV09ITB9dmFyIGU9bChiKT9bYl06YixmPXt9LGc9YygpO2cubGVuZ3RoIT09ZS5sZW5ndGgmJihkKGcpLEJrKGUsZnVuY3Rpb24oayl7ZnVuY3Rpb24gbShxKXtxLmxlbmd0aCE9PTAmJihkKHEpLGsuY29uc2VudFR5cGVzPXEsYShrKSl9dmFyIG49YygpO2lmKG4ubGVuZ3RoIT09MCl7dmFyIHA9T2JqZWN0LmtleXMoZikubGVuZ3RoO24ubGVuZ3RoK3A+PWUubGVuZ3RoP20obik6RC5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7bShjKCkpfSw1MDApfX0pKX07dmFyIEZrPVtcImFkX3N0b3JhZ2VcIixcImFuYWx5dGljc19zdG9yYWdlXCIsXCJhZF91c2VyX2RhdGFcIixcImFkX3BlcnNvbmFsaXphdGlvblwiXSxHaz0hMSxIaz0hMTtmdW5jdGlvbiBJaygpe1EoNTApJiYhSGsmJkdrJiYoRmsuc29tZShmdW5jdGlvbihhKXtyZXR1cm4gdmsuY29udGFpbmVyU2NvcGVkRGVmYXVsdHNbYV0hPT0xfSl8fEprKFwibWJjXCIpKTtIaz0hMH1mdW5jdGlvbiBKayhhKXtyaiYmKGZrKGEsXCIxXCIpLGprKCkpfWZ1bmN0aW9uIEtrKGEpe2hiKFwiSEVBTFRIXCIsYSl9O3ZhciBMazt0cnl7TGs9SlNPTi5wYXJzZShmYihcImV5SXdJam9pVEZVaUxDSXhJam9pSWl3aU1pSTZabUZzYzJVc0lqTWlPaUpuYjI5bmJHVXViSFVpTENJMElqb2ljbVZuYVc5dU1TSXNJalVpT21aaGJITmxMQ0kySWpwMGNuVmxMQ0kzSWpvaVlXUmZjM1J2Y21GblpYeGhibUZzZVhScFkzTmZjM1J2Y21GblpYeGhaRjkxYzJWeVgyUmhkR0Y4WVdSZmNHVnljMjl1WVd4cGVtRjBhVzl1SW4wXCIpKX1jYXRjaChhKXtNKDEyMyksS2soMiksTGs9e319ZnVuY3Rpb24gTWsoKXtyZXR1cm4gTGtbXCIwXCJdfHxcIlwifWZ1bmN0aW9uIE5rKCl7cmV0dXJuIExrW1wiMVwiXXx8XCJcIn1mdW5jdGlvbiBPaygpe3ZhciBhPSExO3JldHVybiBhfWZ1bmN0aW9uIFBrKCl7cmV0dXJuIExrW1wiNlwiXSE9PSExfWZ1bmN0aW9uIFFrKCl7dmFyIGE9XCJcIjtyZXR1cm4gYX1cbmZ1bmN0aW9uIFJrKCl7dmFyIGE9ITE7cmV0dXJuIGF9ZnVuY3Rpb24gU2soKXt2YXIgYT1cIlwiO3JldHVybiBhfXZhciBUaz1bVC5nLlAsVC5nLlUsVC5nLk8sVC5nLndhXSxVayxWaztmdW5jdGlvbiBXayhhKXtmb3IodmFyIGI9YVtULmcuQ2JdLGM9QXJyYXkuaXNBcnJheShiKT9iOltiXSxkPXtIZTowfTtkLkhlPGMubGVuZ3RoO2Q9e0hlOmQuSGV9LCsrZC5IZSl6KGEsZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKGYsZyl7aWYoZiE9PVQuZy5DYil7dmFyIGs9Y1tlLkhlXSxtPU1rKCksbj1OaygpO3RrPSEwO3NrJiZoYihcIlRBR0dJTkdcIiwyMCk7b2soKS5kZWNsYXJlKGYsZyxrLG0sbil9fX0oZCkpfVxuZnVuY3Rpb24gWGsoYSl7SWsoKTshVmsmJlVrJiZKayhcImNyY1wiKTtWaz0hMDt2YXIgYj1hW1QuZy5DYl07YiYmTSg0MCk7dmFyIGM9YVtULmcuWmVdO2MmJk0oNDEpO2Zvcih2YXIgZD1BcnJheS5pc0FycmF5KGIpP2I6W2JdLGU9e0llOjB9O2UuSWU8ZC5sZW5ndGg7ZT17SWU6ZS5JZX0sKytlLkllKXooYSxmdW5jdGlvbihmKXtyZXR1cm4gZnVuY3Rpb24oZyxrKXtpZihnIT09VC5nLkNiJiZnIT09VC5nLlplKXt2YXIgbT1kW2YuSWVdLG49TnVtYmVyKGMpLHA9TWsoKSxxPU5rKCk7bj1uPT09dm9pZCAwPzA6bjtzaz0hMDt0ayYmaGIoXCJUQUdHSU5HXCIsMjApO29rKCkuZGVmYXVsdChnLGssbSxwLHEsbix2ayl9fX0oZSkpfVxuZnVuY3Rpb24gWWsoYSl7aWYoUSg5OSkpe21iKDkpJiYodmsudXNlZENvbnRhaW5lclNjb3BlZERlZmF1bHRzPSEwKTt2YXIgYj1hW1QuZy5DYl07aWYoYil7dmFyIGM9QXJyYXkuaXNBcnJheShiKT9iOltiXTtpZighYy5pbmNsdWRlcyhOaygpKSYmIWMuaW5jbHVkZXMoTWsoKSkpcmV0dXJufXooYSxmdW5jdGlvbihkLGUpe3N3aXRjaChkKXtjYXNlIFwiYWRfc3RvcmFnZVwiOmNhc2UgXCJhbmFseXRpY3Nfc3RvcmFnZVwiOmNhc2UgXCJhZF91c2VyX2RhdGFcIjpjYXNlIFwiYWRfcGVyc29uYWxpemF0aW9uXCI6YnJlYWs7ZGVmYXVsdDpyZXR1cm59bWIoOSkmJih2ay51c2VkQ29udGFpbmVyU2NvcGVkRGVmYXVsdHM9ITApO3ZrLmNvbnRhaW5lclNjb3BlZERlZmF1bHRzW2RdPWU9PT1cImdyYW50ZWRcIj8zOjJ9KX19XG5mdW5jdGlvbiBaayhhLGIpe0lrKCk7VWs9ITA7eihhLGZ1bmN0aW9uKGMsZCl7c2s9ITA7dGsmJmhiKFwiVEFHR0lOR1wiLDIwKTtvaygpLnVwZGF0ZShjLGQsdmspfSk7Q2soYi5ldmVudElkLGIucHJpb3JpdHlJZCl9ZnVuY3Rpb24gJGsoYSl7YS5oYXNPd25Qcm9wZXJ0eShcImFsbFwiKSYmKHZrLnNlbGVjdGVkQWxsQ29yZVBsYXRmb3JtU2VydmljZXM9ITAseihnaSxmdW5jdGlvbihiKXt2ay5jb3JlUGxhdGZvcm1TZXJ2aWNlc1tiXT1hLmFsbD09PVwiZ3JhbnRlZFwiO3ZrLnVzZWRDb3JlUGxhdGZvcm1TZXJ2aWNlcz0hMH0pKTt6KGEsZnVuY3Rpb24oYixjKXtiIT09XCJhbGxcIiYmKHZrLmNvcmVQbGF0Zm9ybVNlcnZpY2VzW2JdPWM9PT1cImdyYW50ZWRcIix2ay51c2VkQ29yZVBsYXRmb3JtU2VydmljZXM9ITApfSl9ZnVuY3Rpb24gVyhhKXtBcnJheS5pc0FycmF5KGEpfHwoYT1bYV0pO3JldHVybiBhLmV2ZXJ5KGZ1bmN0aW9uKGIpe3JldHVybiB3ayhiKX0pfVxuZnVuY3Rpb24gYWwoYSxiKXtCayhhLGIpfWZ1bmN0aW9uIGJsKGEsYil7RWsoYSxiKX1mdW5jdGlvbiBjbChhLGIpe0RrKGEsYil9ZnVuY3Rpb24gZGwoKXt2YXIgYT1bVC5nLlAsVC5nLndhLFQuZy5PXTtvaygpLndhaXRGb3JVcGRhdGUoYSw1MDAsdmspfWZ1bmN0aW9uIGVsKGEpe2Zvcih2YXIgYj1uYShhKSxjPWIubmV4dCgpOyFjLmRvbmU7Yz1iLm5leHQoKSl7dmFyIGQ9Yy52YWx1ZTtvaygpLmNsZWFyVGltZW91dChkLHZvaWQgMCx2ayl9Q2soKX1mdW5jdGlvbiBmbCgpe2lmKGlpLnBzY2RsPT09dm9pZCAwKXt2YXIgYT1mdW5jdGlvbihjKXtpaS5wc2NkbD1jfSxiPWZ1bmN0aW9uKCl7YShcImVycm9yXCIpfTt0cnl7b2MuY29va2llRGVwcmVjYXRpb25MYWJlbD8oYShcInBlbmRpbmdcIiksb2MuY29va2llRGVwcmVjYXRpb25MYWJlbC5nZXRWYWx1ZSgpLnRoZW4oYSkuY2F0Y2goYikpOmEoXCJub2FwaVwiKX1jYXRjaChjKXtiKGMpfX19O2Z1bmN0aW9uIGdsKGEsYil7USgxMykmJmImJnooYixmdW5jdGlvbihjLGQpe3R5cGVvZiBkIT09XCJvYmplY3RcIiYmZCE9PXZvaWQgMCYmKGFbXCIxcC5cIitjXT1TdHJpbmcoZCkpfSl9O3ZhciBobD0vW0EtWl0rLyxpbD0vXFxzLztmdW5jdGlvbiBqbChhLGIpe2lmKGwoYSkpe2E9emIoYSk7dmFyIGM9YS5pbmRleE9mKFwiLVwiKTtpZighKGM8MCkpe3ZhciBkPWEuc3Vic3RyaW5nKDAsYyk7aWYoaGwudGVzdChkKSl7dmFyIGU9YS5zdWJzdHJpbmcoYysxKSxmO2lmKGIpe3ZhciBnPWZ1bmN0aW9uKG4pe3ZhciBwPW4uaW5kZXhPZihcIi9cIik7cmV0dXJuIHA8MD9bbl06W24uc3Vic3RyaW5nKDAscCksbi5zdWJzdHJpbmcocCsxKV19O2Y9ZyhlKTtpZihkPT09XCJEQ1wiJiZmLmxlbmd0aD09PTIpe3ZhciBrPWcoZlsxXSk7ay5sZW5ndGg9PT0yJiYoZlsxXT1rWzBdLGYucHVzaChrWzFdKSl9fWVsc2V7Zj1lLnNwbGl0KFwiL1wiKTtmb3IodmFyIG09MDttPGYubGVuZ3RoO20rKylpZighZlttXXx8aWwudGVzdChmW21dKSYmKGQhPT1cIkFXXCJ8fG0hPT0xKSlyZXR1cm59cmV0dXJue2lkOmEscHJlZml4OmQsZGVzdGluYXRpb25JZDpkK1wiLVwiK2ZbMF0saWRzOmZ9fX19fVxuZnVuY3Rpb24ga2woYSxiKXtmb3IodmFyIGM9e30sZD0wO2Q8YS5sZW5ndGg7KytkKXt2YXIgZT1qbChhW2RdLGIpO2UmJihjW2UuaWRdPWUpfWxsKGMpO3ZhciBmPVtdO3ooYyxmdW5jdGlvbihnLGspe2YucHVzaChrKX0pO3JldHVybiBmfWZ1bmN0aW9uIGxsKGEpe3ZhciBiPVtdLGM7Zm9yKGMgaW4gYSlpZihhLmhhc093blByb3BlcnR5KGMpKXt2YXIgZD1hW2NdO2QucHJlZml4PT09XCJBV1wiJiZkLmlkc1ttbFsyXV0mJmIucHVzaChkLmRlc3RpbmF0aW9uSWQpfWZvcih2YXIgZT0wO2U8Yi5sZW5ndGg7KytlKWRlbGV0ZSBhW2JbZV1dfXZhciBubD17fSxtbD0obmxbMF09MCxubFsxXT0wLG5sWzJdPTEsbmxbM109MCxubFs0XT0xLG5sWzVdPTIsbmxbNl09MCxubFs3XT0wLG5sWzhdPTAsbmwpO3ZhciBvbD1OdW1iZXIoJycpfHw1MDAscGw9e30scWw9e30scmw9e2luaXRpYWxpemVkOjExLGNvbXBsZXRlOjEyLGludGVyYWN0aXZlOjEzfSxzbD17fSx0bD1PYmplY3QuZnJlZXplKChzbFtULmcuSWFdPSEwLHNsKSksdWw9RS5sb2NhdGlvbi5zZWFyY2guaW5kZXhPZihcIj9ndG1fZGlhZ25vc3RpY3M9XCIpPj0wfHxFLmxvY2F0aW9uLnNlYXJjaC5pbmRleE9mKFwiJmd0bV9kaWFnbm9zdGljcz1cIik+PTAsdmw9dm9pZCAwO1xuZnVuY3Rpb24gd2woYSxiKXtpZihiLmxlbmd0aCYmcmope3ZhciBjOyhjPXBsKVthXSE9bnVsbHx8KGNbYV09W10pO3FsW2FdIT1udWxsfHwocWxbYV09W10pO3ZhciBkPWIuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiFxbFthXS5pbmNsdWRlcyhlKX0pO3BsW2FdLnB1c2guYXBwbHkocGxbYV0scGEoZCkpO3FsW2FdLnB1c2guYXBwbHkocWxbYV0scGEoZCkpOyF2bCYmZC5sZW5ndGg+MCYmKGdrKFwidGRjXCIsITApLHZsPUQuc2V0VGltZW91dChmdW5jdGlvbigpe2prKCk7cGw9e307dmw9dm9pZCAwfSxvbCkpfX1cbmZ1bmN0aW9uIHhsKGEsYixjKXtpZihyaiYmYT09PVwiY29uZmlnXCIpe3ZhciBkLGU9KGQ9amwoYikpPT1udWxsP3ZvaWQgMDpkLmlkcztpZighKGUmJmUubGVuZ3RoPjEpKXt2YXIgZixnPXNjKFwiZ29vZ2xlX3RhZ19kYXRhXCIse30pO2cudGR8fChnLnRkPXt9KTtmPWcudGQ7dmFyIGs9aChjLk0pO2goYy5qLGspO3ZhciBtPVtdLG47Zm9yKG4gaW4gZilpZihmLmhhc093blByb3BlcnR5KG4pKXt2YXIgcD15bChmW25dLGspO3AubGVuZ3RoJiYodWwmJmNvbnNvbGUubG9nKHApLG0ucHVzaChuKSl9bS5sZW5ndGgmJih3bChiLG0pLGhiKFwiVEFHR0lOR1wiLHJsW0UucmVhZHlTdGF0ZV18fDE0KSk7ZltiXT1rfX19ZnVuY3Rpb24gemwoYSxiKXt2YXIgYz17fSxkO2ZvcihkIGluIGIpYi5oYXNPd25Qcm9wZXJ0eShkKSYmKGNbZF09ITApO2Zvcih2YXIgZSBpbiBhKWEuaGFzT3duUHJvcGVydHkoZSkmJihjW2VdPSEwKTtyZXR1cm4gY31cbmZ1bmN0aW9uIHlsKGEsYixjLGQpe2M9Yz09PXZvaWQgMD97fTpjO2Q9ZD09PXZvaWQgMD9cIlwiOmQ7aWYoYT09PWIpcmV0dXJuW107dmFyIGU9ZnVuY3Rpb24ocix0KXt2YXIgdTtRYSh0KT09PVwib2JqZWN0XCI/dT10W3JdOlFhKHQpPT09XCJhcnJheVwiJiYodT10W3JdKTtyZXR1cm4gdT09PXZvaWQgMD90bFtyXTp1fSxmPXpsKGEsYiksZztmb3IoZyBpbiBmKWlmKGYuaGFzT3duUHJvcGVydHkoZykpe3ZhciBrPShkP2QrXCIuXCI6XCJcIikrZyxtPWUoZyxhKSxuPWUoZyxiKSxwPVFhKG0pPT09XCJvYmplY3RcInx8UWEobSk9PT1cImFycmF5XCIscT1RYShuKT09PVwib2JqZWN0XCJ8fFFhKG4pPT09XCJhcnJheVwiO2lmKHAmJnEpeWwobSxuLGMsayk7ZWxzZSBpZihwfHxxfHxtIT09biljW2tdPSEwfXJldHVybiBPYmplY3Qua2V5cyhjKX1cbmZ1bmN0aW9uIEFsKCl7ZmsoXCJ0ZGNcIixmdW5jdGlvbigpe3ZsJiYoRC5jbGVhclRpbWVvdXQodmwpLHZsPXZvaWQgMCk7dmFyIGE9W10sYjtmb3IoYiBpbiBwbClwbC5oYXNPd25Qcm9wZXJ0eShiKSYmYS5wdXNoKGIrXCIqXCIrcGxbYl0uam9pbihcIi5cIikpO3JldHVybiBhLmxlbmd0aD9hLmpvaW4oXCIhXCIpOnZvaWQgMH0sITEpfTt2YXIgQmw9ZnVuY3Rpb24oYSxiLGMsZCxlLGYsZyxrLG0sbixwKXt0aGlzLmV2ZW50SWQ9YTt0aGlzLnByaW9yaXR5SWQ9Yjt0aGlzLmo9Yzt0aGlzLlI9ZDt0aGlzLkg9ZTt0aGlzLk09Zjt0aGlzLkQ9Zzt0aGlzLmV2ZW50TWV0YWRhdGE9azt0aGlzLm9uU3VjY2Vzcz1tO3RoaXMub25GYWlsdXJlPW47dGhpcy5pc0d0bUV2ZW50PXB9LENsPWZ1bmN0aW9uKGEsYil7dmFyIGM9W107c3dpdGNoKGIpe2Nhc2UgMzpjLnB1c2goYS5qKTtjLnB1c2goYS5SKTtjLnB1c2goYS5IKTtjLnB1c2goYS5NKTtjLnB1c2goYS5EKTticmVhaztjYXNlIDI6Yy5wdXNoKGEuaik7YnJlYWs7Y2FzZSAxOmMucHVzaChhLlIpO2MucHVzaChhLkgpO2MucHVzaChhLk0pO2MucHVzaChhLkQpO2JyZWFrO2Nhc2UgNDpjLnB1c2goYS5qKSxjLnB1c2goYS5SKSxjLnB1c2goYS5IKSxjLnB1c2goYS5NKX1yZXR1cm4gY30sVT1mdW5jdGlvbihhLGIsYyxkKXtmb3IodmFyIGU9bmEoQ2woYSxkPT09dm9pZCAwPzM6XG5kKSksZj1lLm5leHQoKTshZi5kb25lO2Y9ZS5uZXh0KCkpe3ZhciBnPWYudmFsdWU7aWYoZ1tiXSE9PXZvaWQgMClyZXR1cm4gZ1tiXX1yZXR1cm4gY30sRGw9ZnVuY3Rpb24oYSl7Zm9yKHZhciBiPXt9LGM9Q2woYSw0KSxkPW5hKGMpLGU9ZC5uZXh0KCk7IWUuZG9uZTtlPWQubmV4dCgpKWZvcih2YXIgZj1PYmplY3Qua2V5cyhlLnZhbHVlKSxnPW5hKGYpLGs9Zy5uZXh0KCk7IWsuZG9uZTtrPWcubmV4dCgpKWJbay52YWx1ZV09MTtyZXR1cm4gT2JqZWN0LmtleXMoYil9LEVsPWZ1bmN0aW9uKGEsYixjKXtmdW5jdGlvbiBkKG4pe1NhKG4pJiZ6KG4sZnVuY3Rpb24ocCxxKXtmPSEwO2VbcF09cX0pfXZhciBlPXt9LGY9ITEsZz1DbChhLGM9PT12b2lkIDA/MzpjKTtnLnJldmVyc2UoKTtmb3IodmFyIGs9bmEoZyksbT1rLm5leHQoKTshbS5kb25lO209ay5uZXh0KCkpZChtLnZhbHVlW2JdKTtyZXR1cm4gZj9lOnZvaWQgMH0sRmw9ZnVuY3Rpb24oYSl7Zm9yKHZhciBiPVtULmcuUmMsXG5ULmcuTmMsVC5nLk9jLFQuZy5QYyxULmcuUWMsVC5nLlNjLFQuZy5UY10sYz1DbChhLDMpLGQ9bmEoYyksZT1kLm5leHQoKTshZS5kb25lO2U9ZC5uZXh0KCkpe2Zvcih2YXIgZj1lLnZhbHVlLGc9e30saz0hMSxtPW5hKGIpLG49bS5uZXh0KCk7IW4uZG9uZTtuPW0ubmV4dCgpKXt2YXIgcD1uLnZhbHVlO2ZbcF0hPT12b2lkIDAmJihnW3BdPWZbcF0saz0hMCl9dmFyIHE9az9nOnZvaWQgMDtpZihxKXJldHVybiBxfXJldHVybnt9fSxHbD1mdW5jdGlvbihhLGIpe3RoaXMuZXZlbnRJZD1hO3RoaXMucHJpb3JpdHlJZD1iO3RoaXMuRD17fTt0aGlzLlI9e307dGhpcy5qPXt9O3RoaXMuSD17fTt0aGlzLlo9e307dGhpcy5NPXt9O3RoaXMuZXZlbnRNZXRhZGF0YT17fTt0aGlzLmlzR3RtRXZlbnQ9ITE7dGhpcy5vblN1Y2Nlc3M9ZnVuY3Rpb24oKXt9O3RoaXMub25GYWlsdXJlPWZ1bmN0aW9uKCl7fX0sSGw9ZnVuY3Rpb24oYSxiKXthLkQ9YjtyZXR1cm4gYX0sSWw9ZnVuY3Rpb24oYSxcbmIpe2EuUj1iO3JldHVybiBhfSxKbD1mdW5jdGlvbihhLGIpe2Euaj1iO3JldHVybiBhfSxLbD1mdW5jdGlvbihhLGIpe2EuSD1iO3JldHVybiBhfSxMbD1mdW5jdGlvbihhLGIpe2EuWj1iO3JldHVybiBhfSxNbD1mdW5jdGlvbihhLGIpe2EuTT1iO3JldHVybiBhfSxObD1mdW5jdGlvbihhLGIpe2EuZXZlbnRNZXRhZGF0YT1ifHx7fTtyZXR1cm4gYX0sT2w9ZnVuY3Rpb24oYSxiKXthLm9uU3VjY2Vzcz1iO3JldHVybiBhfSxQbD1mdW5jdGlvbihhLGIpe2Eub25GYWlsdXJlPWI7cmV0dXJuIGF9LFFsPWZ1bmN0aW9uKGEsYil7YS5pc0d0bUV2ZW50PWI7cmV0dXJuIGF9LFJsPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcgQmwoYS5ldmVudElkLGEucHJpb3JpdHlJZCxhLkQsYS5SLGEuaixhLkgsYS5NLGEuZXZlbnRNZXRhZGF0YSxhLm9uU3VjY2VzcyxhLm9uRmFpbHVyZSxhLmlzR3RtRXZlbnQpfTt2YXIgU2w9e2trOk51bWJlcihcIjVcIiksUW46TnVtYmVyKFwiXCIpfSxUbD1bXTtmdW5jdGlvbiBVbChhKXtUbC5wdXNoKGEpfXZhciBWbD1cIj9pZD1cIitPZi5jdGlkLFdsPXZvaWQgMCxYbD17fSxZbD12b2lkIDAsWmw9bmV3IGZ1bmN0aW9uKCl7dmFyIGE9NTtTbC5raz4wJiYoYT1TbC5rayk7dGhpcy5EPWE7dGhpcy5qPTA7dGhpcy5IPVtdfSwkbD0xRTM7XG5mdW5jdGlvbiBhbShhLGIpe3ZhciBjPVdsO2lmKGM9PT12b2lkIDApaWYoYiljPXppKCk7ZWxzZSByZXR1cm5cIlwiO2Zvcih2YXIgZD1bamooXCJodHRwczovL3d3dy5nb29nbGV0YWdtYW5hZ2VyLmNvbVwiKSxcIi9hXCIsVmxdLGU9bmEoVGwpLGY9ZS5uZXh0KCk7IWYuZG9uZTtmPWUubmV4dCgpKWZvcih2YXIgZz1mLnZhbHVlLGs9Zyh7ZXZlbnRJZDpjLGhjOiEhYX0pLG09bmEoayksbj1tLm5leHQoKTshbi5kb25lO249bS5uZXh0KCkpe3ZhciBwPW5hKG4udmFsdWUpLHE9cC5uZXh0KCkudmFsdWUscj1wLm5leHQoKS52YWx1ZTtkLnB1c2goXCImXCIrcStcIj1cIityKX1kLnB1c2goXCImej0wXCIpO3JldHVybiBkLmpvaW4oXCJcIil9XG5mdW5jdGlvbiBibSgpe1lsJiYoRC5jbGVhclRpbWVvdXQoWWwpLFlsPXZvaWQgMCk7aWYoV2whPT12b2lkIDAmJmNtKXt2YXIgYTsoYT1YbFtXbF0pfHwoYT1abC5qPFpsLkQ/ITE6QmIoKS1abC5IW1psLmolWmwuRF08MUUzKTtpZihhfHwkbC0tPD0wKU0oMSksWGxbV2xdPSEwO2Vsc2V7dmFyIGI9WmwuaisrJVpsLkQ7WmwuSFtiXT1CYigpO3ZhciBjPWFtKCEwKTtBYyhjKTtjbT0hMX19fXZhciBjbT0hMTtmdW5jdGlvbiBkbShhKXtYbFthXXx8KGEhPT1XbCYmKGJtKCksV2w9YSksY209ITAsWWx8fChZbD1ELnNldFRpbWVvdXQoYm0sNTAwKSksYW0oKS5sZW5ndGg+PTIwMjImJmJtKCkpfXZhciBlbT1zYigpO2Z1bmN0aW9uIGZtKCl7ZW09c2IoKX1mdW5jdGlvbiBnbSgpe3JldHVybltbXCJ2XCIsXCIzXCJdLFtcInRcIixcInRcIl0sW1wicGlkXCIsU3RyaW5nKGVtKV1dfXZhciBobT17fTtmdW5jdGlvbiBpbShhLGIsYyl7cWomJmEhPT12b2lkIDAmJihobVthXT1obVthXXx8W10saG1bYV0ucHVzaChjK2IpLGRtKGEpKX1mdW5jdGlvbiBqbShhKXt2YXIgYj1hLmV2ZW50SWQsYz1hLmhjLGQ9W10sZT1obVtiXXx8W107ZS5sZW5ndGgmJmQucHVzaChbXCJlcHJcIixlLmpvaW4oXCIuXCIpXSk7YyYmZGVsZXRlIGhtW2JdO3JldHVybiBkfTtmdW5jdGlvbiBrbShhLGIpe3ZhciBjPWpsKEhqKGEpLCEwKTtjJiZsbS5yZWdpc3RlcihjLGIpfWZ1bmN0aW9uIG1tKGEsYixjLGQpe3ZhciBlPWpsKGMsZC5pc0d0bUV2ZW50KTtlJiYoUSg0OSkmJlEoNDkpJiZuaSYmKGQuZGVmZXJyYWJsZT0hMCksbG0ucHVzaChcImV2ZW50XCIsW2IsYV0sZSxkKSl9ZnVuY3Rpb24gbm0oYSxiLGMsZCl7dmFyIGU9amwoYyxkLmlzR3RtRXZlbnQpO2UmJmxtLnB1c2goXCJnZXRcIixbYSxiXSxlLGQpfWZ1bmN0aW9uIG9tKGEpe3ZhciBiPWpsKEhqKGEpLCEwKSxjO2I/Yz1wbShsbSxiKS5qOmM9e307cmV0dXJuIGN9ZnVuY3Rpb24gcW0oYSxiKXt2YXIgYz1qbChIaihhKSwhMCk7aWYoYyl7dmFyIGQ9bG0sZT1oKGIsbnVsbCk7aChwbShkLGMpLmosZSk7cG0oZCxjKS5qPWV9fVxudmFyIHJtPWZ1bmN0aW9uKCl7dGhpcy5SPXt9O3RoaXMuaj17fTt0aGlzLkQ9e307dGhpcy5aPW51bGw7dGhpcy5NPXt9O3RoaXMuSD0hMTt0aGlzLnN0YXR1cz0xfSxzbT1mdW5jdGlvbihhLGIsYyxkKXt0aGlzLkQ9QmIoKTt0aGlzLmo9Yjt0aGlzLmFyZ3M9Yzt0aGlzLm1lc3NhZ2VDb250ZXh0PWQ7dGhpcy50eXBlPWF9LHRtPWZ1bmN0aW9uKCl7dGhpcy5kZXN0aW5hdGlvbnM9e307dGhpcy5qPXt9O3RoaXMuY29tbWFuZHM9W119LHBtPWZ1bmN0aW9uKGEsYil7dmFyIGM9Yi5kZXN0aW5hdGlvbklkO3JldHVybiBhLmRlc3RpbmF0aW9uc1tjXT1hLmRlc3RpbmF0aW9uc1tjXXx8bmV3IHJtfSx1bT1mdW5jdGlvbihhLGIsYyxkKXtpZihkLmope3ZhciBlPXBtKGEsZC5qKSxmPWUuWjtpZihmKXt2YXIgZz1oKGMsbnVsbCksaz1oKGUuUltkLmouaWRdLG51bGwpLG09aChlLk0sbnVsbCksbj1oKGUuaixudWxsKSxwPWgoYS5qLG51bGwpLHE9e307aWYocWopdHJ5e3E9aChHaSl9Y2F0Y2godil7TSg3Mil9dmFyIHI9XG5kLmoucHJlZml4LHQ9ZnVuY3Rpb24odil7aW0oZC5tZXNzYWdlQ29udGV4dC5ldmVudElkLHIsdil9LHU9UmwoUWwoUGwoT2woTmwoTGwoS2woTWwoSmwoSWwoSGwobmV3IEdsKGQubWVzc2FnZUNvbnRleHQuZXZlbnRJZCxkLm1lc3NhZ2VDb250ZXh0LnByaW9yaXR5SWQpLGcpLGspLG0pLG4pLHApLHEpLGQubWVzc2FnZUNvbnRleHQuZXZlbnRNZXRhZGF0YSksZnVuY3Rpb24oKXtpZih0KXt2YXIgdj10O3Q9dm9pZCAwO3YoXCIyXCIpO2lmKGQubWVzc2FnZUNvbnRleHQub25TdWNjZXNzKWQubWVzc2FnZUNvbnRleHQub25TdWNjZXNzKCl9fSksZnVuY3Rpb24oKXtpZih0KXt2YXIgdj10O3Q9dm9pZCAwO3YoXCIzXCIpO2lmKGQubWVzc2FnZUNvbnRleHQub25GYWlsdXJlKWQubWVzc2FnZUNvbnRleHQub25GYWlsdXJlKCl9fSksISFkLm1lc3NhZ2VDb250ZXh0LmlzR3RtRXZlbnQpKTt0cnl7aW0oZC5tZXNzYWdlQ29udGV4dC5ldmVudElkLHIsXCIxXCIpLHhsKGQudHlwZSxkLmouaWQsdSksXG5mKGQuai5pZCxiLGQuRCx1KX1jYXRjaCh2KXtpbShkLm1lc3NhZ2VDb250ZXh0LmV2ZW50SWQscixcIjRcIil9fX19O3RtLnByb3RvdHlwZS5yZWdpc3Rlcj1mdW5jdGlvbihhLGIsYyl7dmFyIGQ9cG0odGhpcyxhKTtkLnN0YXR1cyE9PTMmJihkLlo9YixkLnN0YXR1cz0zLGMmJihoKGQuaixjKSxkLmo9YyksdGhpcy5mbHVzaCgpKX07dG0ucHJvdG90eXBlLnB1c2g9ZnVuY3Rpb24oYSxiLGMsZCl7YyE9PXZvaWQgMCYmKHBtKHRoaXMsYykuc3RhdHVzPT09MSYmKHBtKHRoaXMsYykuc3RhdHVzPTIsdGhpcy5wdXNoKFwicmVxdWlyZVwiLFt7fV0sYyx7fSkpLHBtKHRoaXMsYykuSCYmKGQuZGVmZXJyYWJsZT0hMSkpO3RoaXMuY29tbWFuZHMucHVzaChuZXcgc20oYSxjLGIsZCkpO2QuZGVmZXJyYWJsZXx8dGhpcy5mbHVzaCgpfTtcbnRtLnByb3RvdHlwZS5mbHVzaD1mdW5jdGlvbihhKXtmb3IodmFyIGI9dGhpcyxjPVtdLGQ9ITEsZT17fTt0aGlzLmNvbW1hbmRzLmxlbmd0aDtlPXtDYzp2b2lkIDAsamg6dm9pZCAwfSl7dmFyIGY9dGhpcy5jb21tYW5kc1swXSxnPWYuajtpZihmLm1lc3NhZ2VDb250ZXh0LmRlZmVycmFibGUpIWd8fHBtKHRoaXMsZykuSD8oZi5tZXNzYWdlQ29udGV4dC5kZWZlcnJhYmxlPSExLHRoaXMuY29tbWFuZHMucHVzaChmKSk6Yy5wdXNoKGYpLHRoaXMuY29tbWFuZHMuc2hpZnQoKTtlbHNle3N3aXRjaChmLnR5cGUpe2Nhc2UgXCJyZXF1aXJlXCI6aWYocG0odGhpcyxnKS5zdGF0dXMhPT0zJiYhYSl7dGhpcy5jb21tYW5kcy5wdXNoLmFwcGx5KHRoaXMuY29tbWFuZHMsYyk7cmV0dXJufWJyZWFrO2Nhc2UgXCJzZXRcIjp6KGYuYXJnc1swXSxmdW5jdGlvbihyLHQpe2goSmIocix0KSxiLmopfSk7YnJlYWs7Y2FzZSBcImNvbmZpZ1wiOnZhciBrPXBtKHRoaXMsZyk7ZS5DYz17fTt6KGYuYXJnc1swXSxcbmZ1bmN0aW9uKHIpe3JldHVybiBmdW5jdGlvbih0LHUpe2goSmIodCx1KSxyLkNjKX19KGUpKTt2YXIgbT0hIWUuQ2NbVC5nLlliXTtkZWxldGUgZS5DY1tULmcuWWJdO3ZhciBuPWcuZGVzdGluYXRpb25JZD09PWcuaWQ7bXx8KG4/ay5NPXt9OmsuUltnLmlkXT17fSk7ay5IJiZtfHx1bSh0aGlzLFQuZy5iYSxlLkNjLGYpO2suSD0hMDtuP2goZS5DYyxrLk0pOihoKGUuQ2Msay5SW2cuaWRdKSxNKDcwKSk7ZD0hMDticmVhaztjYXNlIFwiZXZlbnRcIjplLmpoPXt9O3ooZi5hcmdzWzBdLGZ1bmN0aW9uKHIpe3JldHVybiBmdW5jdGlvbih0LHUpe2goSmIodCx1KSxyLmpoKX19KGUpKTt1bSh0aGlzLGYuYXJnc1sxXSxlLmpoLGYpO2JyZWFrO2Nhc2UgXCJnZXRcIjp2YXIgcD17fSxxPShwW1QuZy5yYl09Zi5hcmdzWzBdLHBbVC5nLkdiXT1mLmFyZ3NbMV0scCk7dW0odGhpcyxULmcuVGEscSxmKX10aGlzLmNvbW1hbmRzLnNoaWZ0KCk7dm0odGhpcyxmKX19dGhpcy5jb21tYW5kcy5wdXNoLmFwcGx5KHRoaXMuY29tbWFuZHMsXG5jKTtkJiZ0aGlzLmZsdXNoKCl9O3ZhciB2bT1mdW5jdGlvbihhLGIpe2lmKGIudHlwZSE9PVwicmVxdWlyZVwiKWlmKGIuailmb3IodmFyIGM9cG0oYSxiLmopLkRbYi50eXBlXXx8W10sZD0wO2Q8Yy5sZW5ndGg7ZCsrKWNbZF0oKTtlbHNlIGZvcih2YXIgZSBpbiBhLmRlc3RpbmF0aW9ucylpZihhLmRlc3RpbmF0aW9ucy5oYXNPd25Qcm9wZXJ0eShlKSl7dmFyIGY9YS5kZXN0aW5hdGlvbnNbZV07aWYoZiYmZi5EKWZvcih2YXIgZz1mLkRbYi50eXBlXXx8W10saz0wO2s8Zy5sZW5ndGg7aysrKWdba10oKX19LGxtPW5ldyB0bTt2YXIgd209ZnVuY3Rpb24oYSxiKXt2YXIgYz1mdW5jdGlvbigpe307Yy5wcm90b3R5cGU9YS5wcm90b3R5cGU7dmFyIGQ9bmV3IGM7YS5hcHBseShkLEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywxKSk7cmV0dXJuIGR9LHhtPWZ1bmN0aW9uKGEpe3ZhciBiPWE7cmV0dXJuIGZ1bmN0aW9uKCl7aWYoYil7dmFyIGM9YjtiPW51bGw7YygpfX19O3ZhciB5bT1mdW5jdGlvbihhLGIsYyl7YS5hZGRFdmVudExpc3RlbmVyJiZhLmFkZEV2ZW50TGlzdGVuZXIoYixjLCExKX0sem09ZnVuY3Rpb24oYSxiLGMpe2EucmVtb3ZlRXZlbnRMaXN0ZW5lciYmYS5yZW1vdmVFdmVudExpc3RlbmVyKGIsYywhMSl9O3ZhciBBbSxCbTthOntmb3IodmFyIENtPVtcIkNMT1NVUkVfRkxBR1NcIl0sRG09QWEsRW09MDtFbTxDbS5sZW5ndGg7RW0rKylpZihEbT1EbVtDbVtFbV1dLERtPT1udWxsKXtCbT1udWxsO2JyZWFrIGF9Qm09RG19dmFyIEZtPUJtJiZCbVs2MTA0MDEzMDFdO0FtPUZtIT1udWxsP0ZtOiExO2Z1bmN0aW9uIEdtKCl7dmFyIGE9QWEubmF2aWdhdG9yO2lmKGEpe3ZhciBiPWEudXNlckFnZW50O2lmKGIpcmV0dXJuIGJ9cmV0dXJuXCJcIn12YXIgSG0sSW09QWEubmF2aWdhdG9yO0htPUltP0ltLnVzZXJBZ2VudERhdGF8fG51bGw6bnVsbDtmdW5jdGlvbiBKbShhKXtyZXR1cm4gQW0/SG0/SG0uYnJhbmRzLnNvbWUoZnVuY3Rpb24oYil7dmFyIGM7cmV0dXJuKGM9Yi5icmFuZCkmJmMuaW5kZXhPZihhKSE9LTF9KTohMTohMX1mdW5jdGlvbiBLbShhKXtyZXR1cm4gR20oKS5pbmRleE9mKGEpIT0tMX07ZnVuY3Rpb24gTG0oKXtyZXR1cm4gQW0/ISFIbSYmSG0uYnJhbmRzLmxlbmd0aD4wOiExfWZ1bmN0aW9uIE1tKCl7cmV0dXJuIExtKCk/ITE6S20oXCJPcGVyYVwiKX1mdW5jdGlvbiBObSgpe3JldHVybiBLbShcIkZpcmVmb3hcIil8fEttKFwiRnhpT1NcIil9ZnVuY3Rpb24gT20oKXtyZXR1cm4gTG0oKT9KbShcIkNocm9taXVtXCIpOihLbShcIkNocm9tZVwiKXx8S20oXCJDcmlPU1wiKSkmJiEoTG0oKT8wOkttKFwiRWRnZVwiKSl8fEttKFwiU2lsa1wiKX07ZnVuY3Rpb24gUG0oKXtyZXR1cm4gQW0/ISFIbSYmISFIbS5wbGF0Zm9ybTohMX1mdW5jdGlvbiBRbSgpe3JldHVybiBLbShcImlQaG9uZVwiKSYmIUttKFwiaVBvZFwiKSYmIUttKFwiaVBhZFwiKX1mdW5jdGlvbiBSbSgpe1FtKCl8fEttKFwiaVBhZFwiKXx8S20oXCJpUG9kXCIpfTt2YXIgU209ZnVuY3Rpb24oYSl7U21bXCIgXCJdKGEpO3JldHVybiBhfTtTbVtcIiBcIl09ZnVuY3Rpb24oKXt9O01tKCk7TG0oKXx8S20oXCJUcmlkZW50XCIpfHxLbShcIk1TSUVcIik7S20oXCJFZGdlXCIpOyFLbShcIkdlY2tvXCIpfHxHbSgpLnRvTG93ZXJDYXNlKCkuaW5kZXhPZihcIndlYmtpdFwiKSE9LTEmJiFLbShcIkVkZ2VcIil8fEttKFwiVHJpZGVudFwiKXx8S20oXCJNU0lFXCIpfHxLbShcIkVkZ2VcIik7R20oKS50b0xvd2VyQ2FzZSgpLmluZGV4T2YoXCJ3ZWJraXRcIikhPS0xJiYhS20oXCJFZGdlXCIpJiZLbShcIk1vYmlsZVwiKTtQbSgpfHxLbShcIk1hY2ludG9zaFwiKTtQbSgpfHxLbShcIldpbmRvd3NcIik7KFBtKCk/SG0ucGxhdGZvcm09PT1cIkxpbnV4XCI6S20oXCJMaW51eFwiKSl8fFBtKCl8fEttKFwiQ3JPU1wiKTtQbSgpfHxLbShcIkFuZHJvaWRcIik7UW0oKTtLbShcImlQYWRcIik7S20oXCJpUG9kXCIpO1JtKCk7R20oKS50b0xvd2VyQ2FzZSgpLmluZGV4T2YoXCJrYWlvc1wiKTt2YXIgVG09ZnVuY3Rpb24oYSxiLGMsZCl7Zm9yKHZhciBlPWIsZj1jLmxlbmd0aDsoZT1hLmluZGV4T2YoYyxlKSk+PTAmJmU8ZDspe3ZhciBnPWEuY2hhckNvZGVBdChlLTEpO2lmKGc9PTM4fHxnPT02Myl7dmFyIGs9YS5jaGFyQ29kZUF0KGUrZik7aWYoIWt8fGs9PTYxfHxrPT0zOHx8az09MzUpcmV0dXJuIGV9ZSs9ZisxfXJldHVybi0xfSxVbT0vI3wkLyxWbT1mdW5jdGlvbihhLGIpe3ZhciBjPWEuc2VhcmNoKFVtKSxkPVRtKGEsMCxiLGMpO2lmKGQ8MClyZXR1cm4gbnVsbDt2YXIgZT1hLmluZGV4T2YoXCImXCIsZCk7aWYoZTwwfHxlPmMpZT1jO2QrPWIubGVuZ3RoKzE7cmV0dXJuIGRlY29kZVVSSUNvbXBvbmVudChhLnNsaWNlKGQsZSE9PS0xP2U6MCkucmVwbGFjZSgvXFwrL2csXCIgXCIpKX0sV209L1s/Jl0oJHwjKS8sWG09ZnVuY3Rpb24oYSxiLGMpe2Zvcih2YXIgZCxlPWEuc2VhcmNoKFVtKSxmPTAsZyxrPVtdOyhnPVRtKGEsZixiLGUpKT49MDspay5wdXNoKGEuc3Vic3RyaW5nKGYsXG5nKSksZj1NYXRoLm1pbihhLmluZGV4T2YoXCImXCIsZykrMXx8ZSxlKTtrLnB1c2goYS5zbGljZShmKSk7ZD1rLmpvaW4oXCJcIikucmVwbGFjZShXbSxcIiQxXCIpO3ZhciBtLG49YyE9bnVsbD9cIj1cIitlbmNvZGVVUklDb21wb25lbnQoU3RyaW5nKGMpKTpcIlwiO3ZhciBwPWIrbjtpZihwKXt2YXIgcSxyPWQuaW5kZXhPZihcIiNcIik7cjwwJiYocj1kLmxlbmd0aCk7dmFyIHQ9ZC5pbmRleE9mKFwiP1wiKSx1O3Q8MHx8dD5yPyh0PXIsdT1cIlwiKTp1PWQuc3Vic3RyaW5nKHQrMSxyKTtxPVtkLnNsaWNlKDAsdCksdSxkLnNsaWNlKHIpXTt2YXIgdj1xWzFdO3FbMV09cD92P3YrXCImXCIrcDpwOnY7bT1xWzBdKyhxWzFdP1wiP1wiK3FbMV06XCJcIikrcVsyXX1lbHNlIG09ZDtyZXR1cm4gbX07dmFyIFltPWZ1bmN0aW9uKGEpe3RyeXt2YXIgYjtpZihiPSEhYSYmYS5sb2NhdGlvbi5ocmVmIT1udWxsKWE6e3RyeXtTbShhLmZvbyk7Yj0hMDticmVhayBhfWNhdGNoKGMpe31iPSExfXJldHVybiBifWNhdGNoKGMpe3JldHVybiExfX0sWm09ZnVuY3Rpb24oYSxiKXtpZihhKWZvcih2YXIgYyBpbiBhKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChhLGMpJiZiKGFbY10sYyxhKX0sJG09ZnVuY3Rpb24oYSl7aWYoRC50b3A9PUQpcmV0dXJuIDA7aWYoYT09PXZvaWQgMD8wOmEpe3ZhciBiPUQubG9jYXRpb24uYW5jZXN0b3JPcmlnaW5zO2lmKGIpcmV0dXJuIGJbYi5sZW5ndGgtMV09PUQubG9jYXRpb24ub3JpZ2luPzE6Mn1yZXR1cm4gWW0oRC50b3ApPzE6Mn0sYW49ZnVuY3Rpb24oYSl7YT1hPT09dm9pZCAwP2RvY3VtZW50OmE7cmV0dXJuIGEuY3JlYXRlRWxlbWVudChcImltZ1wiKX07ZnVuY3Rpb24gYm4oYSxiLGMsZCl7ZD1kPT09dm9pZCAwPyExOmQ7YS5nb29nbGVfaW1hZ2VfcmVxdWVzdHN8fChhLmdvb2dsZV9pbWFnZV9yZXF1ZXN0cz1bXSk7dmFyIGU9YW4oYS5kb2N1bWVudCk7aWYoYyl7dmFyIGY9ZnVuY3Rpb24oKXtpZihjKXt2YXIgZz1hLmdvb2dsZV9pbWFnZV9yZXF1ZXN0cyxrPW1jKGcsZSk7az49MCYmQXJyYXkucHJvdG90eXBlLnNwbGljZS5jYWxsKGcsaywxKX16bShlLFwibG9hZFwiLGYpO3ptKGUsXCJlcnJvclwiLGYpfTt5bShlLFwibG9hZFwiLGYpO3ltKGUsXCJlcnJvclwiLGYpfWQmJihlLmF0dHJpYnV0aW9uU3JjPVwiXCIpO2Uuc3JjPWI7YS5nb29nbGVfaW1hZ2VfcmVxdWVzdHMucHVzaChlKX1cbnZhciBkbj1mdW5jdGlvbihhKXt2YXIgYjtiPWI9PT12b2lkIDA/ITE6Yjt2YXIgYz1cImh0dHBzOi8vcGFnZWFkMi5nb29nbGVzeW5kaWNhdGlvbi5jb20vcGFnZWFkL2dlbl8yMDQ/aWQ9dGNmZVwiO1ptKGEsZnVuY3Rpb24oZCxlKXtpZihkfHxkPT09MCljKz1cIiZcIitlK1wiPVwiK2VuY29kZVVSSUNvbXBvbmVudChcIlwiK2QpfSk7Y24oYyxiKX0sY249ZnVuY3Rpb24oYSxiKXt2YXIgYz13aW5kb3csZDtiPWI9PT12b2lkIDA/ITE6YjtkPWQ9PT12b2lkIDA/ITE6ZDtpZihjLmZldGNoKXt2YXIgZT17a2VlcGFsaXZlOiEwLGNyZWRlbnRpYWxzOlwiaW5jbHVkZVwiLHJlZGlyZWN0OlwiZm9sbG93XCIsbWV0aG9kOlwiZ2V0XCIsbW9kZTpcIm5vLWNvcnNcIn07ZCYmKGUubW9kZT1cImNvcnNcIixcInNldEF0dHJpYnV0aW9uUmVwb3J0aW5nXCJpbiBYTUxIdHRwUmVxdWVzdC5wcm90b3R5cGU/ZS5hdHRyaWJ1dGlvblJlcG9ydGluZz17ZXZlbnRTb3VyY2VFbGlnaWJsZTpcInRydWVcIix0cmlnZ2VyRWxpZ2libGU6XCJmYWxzZVwifTpcbmUuaGVhZGVycz17XCJBdHRyaWJ1dGlvbi1SZXBvcnRpbmctRWxpZ2libGVcIjpcImV2ZW50LXNvdXJjZVwifSk7Yy5mZXRjaChhLGUpfWVsc2UgYm4oYyxhLGI9PT12b2lkIDA/ITE6YixkPT09dm9pZCAwPyExOmQpfTt2YXIgZW49ZnVuY3Rpb24oKXt0aGlzLlI9dGhpcy5SO3RoaXMuRD10aGlzLkR9O2VuLnByb3RvdHlwZS5SPSExO2VuLnByb3RvdHlwZS5kaXNwb3NlPWZ1bmN0aW9uKCl7dGhpcy5SfHwodGhpcy5SPSEwLHRoaXMuUGEoKSl9O2VuLnByb3RvdHlwZVtTeW1ib2wuZGlzcG9zZV09ZnVuY3Rpb24oKXt0aGlzLmRpc3Bvc2UoKX07ZW4ucHJvdG90eXBlLmFkZE9uRGlzcG9zZUNhbGxiYWNrPWZ1bmN0aW9uKGEsYil7dGhpcy5SP2IhPT12b2lkIDA/YS5jYWxsKGIpOmEoKToodGhpcy5EfHwodGhpcy5EPVtdKSxiJiYoYT1hLmJpbmQoYikpLHRoaXMuRC5wdXNoKGEpKX07ZW4ucHJvdG90eXBlLlBhPWZ1bmN0aW9uKCl7aWYodGhpcy5EKWZvcig7dGhpcy5ELmxlbmd0aDspdGhpcy5ELnNoaWZ0KCkoKX07dmFyIGZuPWZ1bmN0aW9uKGEpe2EuYWRkdGxDb25zZW50IT09dm9pZCAwJiZ0eXBlb2YgYS5hZGR0bENvbnNlbnQhPT1cInN0cmluZ1wiJiYoYS5hZGR0bENvbnNlbnQ9dm9pZCAwKTthLmdkcHJBcHBsaWVzIT09dm9pZCAwJiZ0eXBlb2YgYS5nZHByQXBwbGllcyE9PVwiYm9vbGVhblwiJiYoYS5nZHByQXBwbGllcz12b2lkIDApO3JldHVybiBhLnRjU3RyaW5nIT09dm9pZCAwJiZ0eXBlb2YgYS50Y1N0cmluZyE9PVwic3RyaW5nXCJ8fGEubGlzdGVuZXJJZCE9PXZvaWQgMCYmdHlwZW9mIGEubGlzdGVuZXJJZCE9PVwibnVtYmVyXCI/MjphLmNtcFN0YXR1cyYmYS5jbXBTdGF0dXMhPT1cImVycm9yXCI/MDozfSxnbj1mdW5jdGlvbihhLGIpe2I9Yj09PXZvaWQgMD97fTpiO2VuLmNhbGwodGhpcyk7dGhpcy5IPWE7dGhpcy5qPW51bGw7dGhpcy5aPXt9O3RoaXMuRWY9MDt2YXIgYzt0aGlzLmplPShjPWIuWW0pIT1udWxsP2M6NTAwO3ZhciBkO3RoaXMuQmM9KGQ9Yi5FbikhPW51bGw/ZDohMTt0aGlzLk09XG5udWxsfTt5YShnbixlbik7Z24ucHJvdG90eXBlLlBhPWZ1bmN0aW9uKCl7dGhpcy5aPXt9O3RoaXMuTSYmKHptKHRoaXMuSCxcIm1lc3NhZ2VcIix0aGlzLk0pLGRlbGV0ZSB0aGlzLk0pO2RlbGV0ZSB0aGlzLlo7ZGVsZXRlIHRoaXMuSDtkZWxldGUgdGhpcy5qO2VuLnByb3RvdHlwZS5QYS5jYWxsKHRoaXMpfTt2YXIgam49ZnVuY3Rpb24oYSl7cmV0dXJuIHR5cGVvZiBhLkguX190Y2ZhcGk9PT1cImZ1bmN0aW9uXCJ8fGhuKGEpIT1udWxsfTtcbmduLnByb3RvdHlwZS5hZGRFdmVudExpc3RlbmVyPWZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMsYz17aW50ZXJuYWxCbG9ja09uRXJyb3JzOnRoaXMuQmN9LGQ9eG0oZnVuY3Rpb24oKXtyZXR1cm4gYShjKX0pLGU9MDt0aGlzLmplIT09LTEmJihlPXNldFRpbWVvdXQoZnVuY3Rpb24oKXtjLnRjU3RyaW5nPVwidGN1bmF2YWlsYWJsZVwiO2MuaW50ZXJuYWxFcnJvclN0YXRlPTE7ZCgpfSx0aGlzLmplKSk7dmFyIGY9ZnVuY3Rpb24oZyxrKXtjbGVhclRpbWVvdXQoZSk7Zz8oYz1nLGMuaW50ZXJuYWxFcnJvclN0YXRlPWZuKGMpLGMuaW50ZXJuYWxCbG9ja09uRXJyb3JzPWIuQmMsayYmYy5pbnRlcm5hbEVycm9yU3RhdGU9PT0wfHwoYy50Y1N0cmluZz1cInRjdW5hdmFpbGFibGVcIixrfHwoYy5pbnRlcm5hbEVycm9yU3RhdGU9MykpKTooYy50Y1N0cmluZz1cInRjdW5hdmFpbGFibGVcIixjLmludGVybmFsRXJyb3JTdGF0ZT0zKTthKGMpfTt0cnl7a24odGhpcyxcImFkZEV2ZW50TGlzdGVuZXJcIixmKX1jYXRjaChnKXtjLnRjU3RyaW5nPVxuXCJ0Y3VuYXZhaWxhYmxlXCIsYy5pbnRlcm5hbEVycm9yU3RhdGU9MyxlJiYoY2xlYXJUaW1lb3V0KGUpLGU9MCksZCgpfX07Z24ucHJvdG90eXBlLnJlbW92ZUV2ZW50TGlzdGVuZXI9ZnVuY3Rpb24oYSl7YSYmYS5saXN0ZW5lcklkJiZrbih0aGlzLFwicmVtb3ZlRXZlbnRMaXN0ZW5lclwiLG51bGwsYS5saXN0ZW5lcklkKX07XG52YXIgbW49ZnVuY3Rpb24oYSxiLGMpe3ZhciBkO2Q9ZD09PXZvaWQgMD9cIjc1NVwiOmQ7dmFyIGU7YTp7aWYoYS5wdWJsaXNoZXImJmEucHVibGlzaGVyLnJlc3RyaWN0aW9ucyl7dmFyIGY9YS5wdWJsaXNoZXIucmVzdHJpY3Rpb25zW2JdO2lmKGYhPT12b2lkIDApe2U9ZltkPT09dm9pZCAwP1wiNzU1XCI6ZF07YnJlYWsgYX19ZT12b2lkIDB9dmFyIGc9ZTtpZihnPT09MClyZXR1cm4hMTt2YXIgaz1jO2M9PT0yPyhrPTAsZz09PTImJihrPTEpKTpjPT09MyYmKGs9MSxnPT09MSYmKGs9MCkpO3ZhciBtO2lmKGs9PT0wKWlmKGEucHVycG9zZSYmYS52ZW5kb3Ipe3ZhciBuPWxuKGEudmVuZG9yLmNvbnNlbnRzLGQ9PT12b2lkIDA/XCI3NTVcIjpkKTttPW4mJmI9PT1cIjFcIiYmYS5wdXJwb3NlT25lVHJlYXRtZW50JiZhLnB1Ymxpc2hlckNDPT09XCJDSFwiPyEwOm4mJmxuKGEucHVycG9zZS5jb25zZW50cyxiKX1lbHNlIG09ITA7ZWxzZSBtPWs9PT0xP2EucHVycG9zZSYmYS52ZW5kb3I/bG4oYS5wdXJwb3NlLmxlZ2l0aW1hdGVJbnRlcmVzdHMsXG5iKSYmbG4oYS52ZW5kb3IubGVnaXRpbWF0ZUludGVyZXN0cyxkPT09dm9pZCAwP1wiNzU1XCI6ZCk6ITA6ITA7cmV0dXJuIG19LGxuPWZ1bmN0aW9uKGEsYil7cmV0dXJuISghYXx8IWFbYl0pfSxrbj1mdW5jdGlvbihhLGIsYyxkKXtjfHwoYz1mdW5jdGlvbigpe30pO2lmKHR5cGVvZiBhLkguX190Y2ZhcGk9PT1cImZ1bmN0aW9uXCIpe3ZhciBlPWEuSC5fX3RjZmFwaTtlKGIsMixjLGQpfWVsc2UgaWYoaG4oYSkpe25uKGEpO3ZhciBmPSsrYS5FZjthLlpbZl09YztpZihhLmope3ZhciBnPXt9O2Euai5wb3N0TWVzc2FnZSgoZy5fX3RjZmFwaUNhbGw9e2NvbW1hbmQ6Yix2ZXJzaW9uOjIsY2FsbElkOmYscGFyYW1ldGVyOmR9LGcpLFwiKlwiKX19ZWxzZSBjKHt9LCExKX0saG49ZnVuY3Rpb24oYSl7aWYoYS5qKXJldHVybiBhLmo7dmFyIGI7YTp7Zm9yKHZhciBjPWEuSCxkPTA7ZDw1MDsrK2Qpe3ZhciBlO3RyeXtlPSEoIWMuZnJhbWVzfHwhYy5mcmFtZXMuX190Y2ZhcGlMb2NhdG9yKX1jYXRjaChrKXtlPVxuITF9aWYoZSl7Yj1jO2JyZWFrIGF9dmFyIGY7Yjp7dHJ5e3ZhciBnPWMucGFyZW50O2lmKGcmJmchPWMpe2Y9ZzticmVhayBifX1jYXRjaChrKXt9Zj1udWxsfWlmKCEoYz1mKSlicmVha31iPW51bGx9YS5qPWI7cmV0dXJuIGEuan0sbm49ZnVuY3Rpb24oYSl7YS5NfHwoYS5NPWZ1bmN0aW9uKGIpe3RyeXt2YXIgYztjPSh0eXBlb2YgYi5kYXRhPT09XCJzdHJpbmdcIj9KU09OLnBhcnNlKGIuZGF0YSk6Yi5kYXRhKS5fX3RjZmFwaVJldHVybjthLlpbYy5jYWxsSWRdKGMucmV0dXJuVmFsdWUsYy5zdWNjZXNzKX1jYXRjaChkKXt9fSx5bShhLkgsXCJtZXNzYWdlXCIsYS5NKSl9LG9uPWZ1bmN0aW9uKGEpe2lmKGEuZ2RwckFwcGxpZXM9PT0hMSlyZXR1cm4hMDthLmludGVybmFsRXJyb3JTdGF0ZT09PXZvaWQgMCYmKGEuaW50ZXJuYWxFcnJvclN0YXRlPWZuKGEpKTtyZXR1cm4gYS5jbXBTdGF0dXM9PT1cImVycm9yXCJ8fGEuaW50ZXJuYWxFcnJvclN0YXRlIT09MD9hLmludGVybmFsQmxvY2tPbkVycm9ycz9cbihkbih7ZTpTdHJpbmcoYS5pbnRlcm5hbEVycm9yU3RhdGUpfSksITEpOiEwOmEuY21wU3RhdHVzIT09XCJsb2FkZWRcInx8YS5ldmVudFN0YXR1cyE9PVwidGNsb2FkZWRcIiYmYS5ldmVudFN0YXR1cyE9PVwidXNlcmFjdGlvbmNvbXBsZXRlXCI/ITE6ITB9O3ZhciBwbj17MTowLDM6MCw0OjAsNzozLDk6MywxMDozfTtmdW5jdGlvbiBxbigpe3ZhciBhPWlpLnRjZnx8e307cmV0dXJuIGlpLnRjZj1hfXZhciBybj1mdW5jdGlvbigpe3JldHVybiBuZXcgZ24oRCx7WW06LTF9KX07XG5mdW5jdGlvbiBzbigpe3ZhciBhPXFuKCksYj1ybigpO2puKGIpJiYhdG4oKSYmIXVuKCkmJk0oMTI0KTtpZighYS5hY3RpdmUmJmpuKGIpKXt0bigpJiYoYS5hY3RpdmU9ITAsYS5mYz17fSxhLmNtcElkPTAsYS50Y2ZQb2xpY3lWZXJzaW9uPTAsb2soKS5hY3RpdmU9ITAsYS50Y1N0cmluZz1cInRjdW5hdmFpbGFibGVcIik7ZGwoKTt0cnl7Yi5hZGRFdmVudExpc3RlbmVyKGZ1bmN0aW9uKGMpe2lmKGMuaW50ZXJuYWxFcnJvclN0YXRlIT09MCl2bihhKSxlbChbVC5nLlAsVC5nLndhLFQuZy5PXSksb2soKS5hY3RpdmU9ITA7ZWxzZSBpZihhLmdkcHJBcHBsaWVzPWMuZ2RwckFwcGxpZXMsYS5jbXBJZD1jLmNtcElkLGEuZW5hYmxlQWR2ZXJ0aXNlckNvbnNlbnRNb2RlPWMuZW5hYmxlQWR2ZXJ0aXNlckNvbnNlbnRNb2RlLHVuKCkmJihhLmFjdGl2ZT0hMCksIXduKGMpfHx0bigpfHx1bigpKXthLnRjZlBvbGljeVZlcnNpb249Yy50Y2ZQb2xpY3lWZXJzaW9uO3ZhciBkO2lmKGMuZ2RwckFwcGxpZXM9PT1cbiExKXt2YXIgZT17fSxmO2ZvcihmIGluIHBuKXBuLmhhc093blByb3BlcnR5KGYpJiYoZVtmXT0hMCk7ZD1lO2IucmVtb3ZlRXZlbnRMaXN0ZW5lcihjKX1lbHNlIGlmKHduKGMpKXt2YXIgZz17fSxrO2ZvcihrIGluIHBuKWlmKHBuLmhhc093blByb3BlcnR5KGspKWlmKGs9PT1cIjFcIil7dmFyIG0sbj1jLHA9e0dsOiEwfTtwPXA9PT12b2lkIDA/e306cDttPW9uKG4pP24uZ2RwckFwcGxpZXM9PT0hMT8hMDpuLnRjU3RyaW5nPT09XCJ0Y3VuYXZhaWxhYmxlXCI/IXAuS2o6KHAuS2p8fG4uZ2RwckFwcGxpZXMhPT12b2lkIDB8fHAuR2wpJiYocC5Lanx8dHlwZW9mIG4udGNTdHJpbmc9PT1cInN0cmluZ1wiJiZuLnRjU3RyaW5nLmxlbmd0aCk/bW4obixcIjFcIiwwKTohMDohMTtnW1wiMVwiXT1tfWVsc2UgZ1trXT1tbihjLGsscG5ba10pO2Q9Z31pZihkKXthLnRjU3RyaW5nPWMudGNTdHJpbmd8fFwidGNlbXB0eVwiO2EuZmM9ZDt2YXIgcT17fSxyPShxW1QuZy5QXT1hLmZjW1wiMVwiXT9cImdyYW50ZWRcIjpcblwiZGVuaWVkXCIscSk7YS5nZHByQXBwbGllcyE9PSEwPyhlbChbVC5nLlAsVC5nLndhLFQuZy5PXSksb2soKS5hY3RpdmU9ITApOihyW1QuZy53YV09YS5mY1tcIjNcIl0mJmEuZmNbXCI0XCJdP1wiZ3JhbnRlZFwiOlwiZGVuaWVkXCIsdHlwZW9mIGEudGNmUG9saWN5VmVyc2lvbj09PVwibnVtYmVyXCImJmEudGNmUG9saWN5VmVyc2lvbj49ND9yW1QuZy5PXT1hLmZjW1wiMVwiXSYmYS5mY1tcIjdcIl0/XCJncmFudGVkXCI6XCJkZW5pZWRcIjplbChbVC5nLk9dKSxaayhyLHtldmVudElkOjB9LHtnZHByQXBwbGllczphP2EuZ2RwckFwcGxpZXM6dm9pZCAwLHRjU3RyaW5nOnhuKCl8fFwiXCJ9KSl9fWVsc2UgZWwoW1QuZy5QLFQuZy53YSxULmcuT10pfSl9Y2F0Y2goYyl7dm4oYSksZWwoW1QuZy5QLFQuZy53YSxULmcuT10pLG9rKCkuYWN0aXZlPSEwfX19ZnVuY3Rpb24gdm4oYSl7YS50eXBlPVwiZVwiO2EudGNTdHJpbmc9XCJ0Y3VuYXZhaWxhYmxlXCJ9XG5mdW5jdGlvbiB3bihhKXtyZXR1cm4gYS5ldmVudFN0YXR1cz09PVwidGNsb2FkZWRcInx8YS5ldmVudFN0YXR1cz09PVwidXNlcmFjdGlvbmNvbXBsZXRlXCJ8fGEuZXZlbnRTdGF0dXM9PT1cImNtcHVpc2hvd25cIn1mdW5jdGlvbiB0bigpe3JldHVybiBELmd0YWdfZW5hYmxlX3RjZl9zdXBwb3J0PT09ITB9ZnVuY3Rpb24gdW4oKXtyZXR1cm4gcW4oKS5lbmFibGVBZHZlcnRpc2VyQ29uc2VudE1vZGU9PT0hMH1mdW5jdGlvbiB4bigpe3ZhciBhPXFuKCk7aWYoYS5hY3RpdmUpcmV0dXJuIGEudGNTdHJpbmd9ZnVuY3Rpb24geW4oKXt2YXIgYT1xbigpO2lmKGEuYWN0aXZlJiZhLmdkcHJBcHBsaWVzIT09dm9pZCAwKXJldHVybiBhLmdkcHJBcHBsaWVzP1wiMVwiOlwiMFwifWZ1bmN0aW9uIHpuKGEpe2lmKCFwbi5oYXNPd25Qcm9wZXJ0eShTdHJpbmcoYSkpKXJldHVybiEwO3ZhciBiPXFuKCk7cmV0dXJuIGIuYWN0aXZlJiZiLmZjPyEhYi5mY1tTdHJpbmcoYSldOiEwfXZhciBBbj1bVC5nLlAsVC5nLlUsVC5nLk8sVC5nLndhXSxCbj17fSxDbj0oQm5bVC5nLlBdPTEsQm5bVC5nLlVdPTIsQm4pO2Z1bmN0aW9uIERuKGEpe2lmKGE9PT12b2lkIDApcmV0dXJuIDA7c3dpdGNoKFUoYSxULmcuamEpKXtjYXNlIHZvaWQgMDpyZXR1cm4gMTtjYXNlICExOnJldHVybiAzO2RlZmF1bHQ6cmV0dXJuIDJ9fWZ1bmN0aW9uIEVuKGEpe2lmKE5rKCk9PT1cIlVTLUNPXCImJm9jLmdsb2JhbFByaXZhY3lDb250cm9sPT09ITApcmV0dXJuITE7dmFyIGI9RG4oYSk7aWYoYj09PTMpcmV0dXJuITE7c3dpdGNoKHhrKFQuZy53YSkpe2Nhc2UgMTpjYXNlIDM6cmV0dXJuITA7Y2FzZSAyOnJldHVybiExO2Nhc2UgNDpyZXR1cm4gYj09PTI7Y2FzZSAwOnJldHVybiEwO2RlZmF1bHQ6cmV0dXJuITF9fWZ1bmN0aW9uIEZuKCl7cmV0dXJuIEFrKCl8fCF3ayhULmcuUCl8fCF3ayhULmcuVSl9XG5mdW5jdGlvbiBHbigpe3ZhciBhPXt9LGI7Zm9yKGIgaW4gQ24pQ24uaGFzT3duUHJvcGVydHkoYikmJihhW0NuW2JdXT14ayhiKSk7cmV0dXJuXCJHMVwiK0ZlKGFbMV18fDApK0ZlKGFbMl18fDApfXZhciBIbj17fSxJbj0oSG5bVC5nLlBdPTAsSG5bVC5nLlVdPTEsSG5bVC5nLk9dPTIsSG5bVC5nLndhXT0zLEhuKTtmdW5jdGlvbiBKbihhKXtzd2l0Y2goYSl7Y2FzZSB2b2lkIDA6cmV0dXJuIDE7Y2FzZSAhMDpyZXR1cm4gMztjYXNlICExOnJldHVybiAyO2RlZmF1bHQ6cmV0dXJuIDB9fVxuZnVuY3Rpb24gS24oYSl7Zm9yKHZhciBiPVwiMVwiLGM9MDtjPEFuLmxlbmd0aDtjKyspe3ZhciBkPWIsZSxmPUFuW2NdLGc9dmsuZGVsZWdhdGVkQ29uc2VudFR5cGVzW2ZdO2U9Zz09PXZvaWQgMD8wOkluLmhhc093blByb3BlcnR5KGcpPzEyfEluW2ddOjg7dmFyIGs9b2soKTtrLmFjY2Vzc2VkQW55PSEwO3ZhciBtPWsuZW50cmllc1tmXXx8e307ZT1lPDwyfEpuKG0uaW1wbGljaXQpO2I9ZCsoXCJcIitcIjAxMjM0NTY3ODlhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ekFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaLV9cIltlXStcIjAxMjM0NTY3ODlhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ekFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaLV9cIltKbihtLmRlY2xhcmUpPDw0fEpuKG0uZGVmYXVsdCk8PDJ8Sm4obS51cGRhdGUpXSl9dmFyIG49YixwPShOaygpPT09XCJVUy1DT1wiJiZvYy5nbG9iYWxQcml2YWN5Q29udHJvbD09PSEwPzE6MCk8PDMscT0oQWsoKT8xOjApPDwyLHI9RG4oYSk7Yj1cbm4rXCIwMTIzNDU2Nzg5YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXpBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWi1fXCJbcHxxfHJdO1EoOTkpJiYoYis9XCJcIitcIjAxMjM0NTY3ODlhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ekFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaLV9cIlt2ay5jb250YWluZXJTY29wZWREZWZhdWx0cy5hZF9zdG9yYWdlPDw0fHZrLmNvbnRhaW5lclNjb3BlZERlZmF1bHRzLmFuYWx5dGljc19zdG9yYWdlPDwyfHZrLmNvbnRhaW5lclNjb3BlZERlZmF1bHRzLmFkX3VzZXJfZGF0YV0rXCIwMTIzNDU2Nzg5YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXpBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWi1fXCJbKG1iKDgpJiZ2ay51c2VkQ29udGFpbmVyU2NvcGVkRGVmYXVsdHM/MTowKTw8Mnx2ay5jb250YWluZXJTY29wZWREZWZhdWx0cy5hZF9wZXJzb25hbGl6YXRpb25dKTtyZXR1cm4gYn1cbmZ1bmN0aW9uIExuKCl7aWYoIXdrKFQuZy5PKSlyZXR1cm5cIi1cIjtmb3IodmFyIGE9T2JqZWN0LmtleXMoZ2kpLGI9eWsoYSksYz1cIlwiLGQ9bmEoYSksZT1kLm5leHQoKTshZS5kb25lO2U9ZC5uZXh0KCkpe3ZhciBmPWUudmFsdWU7YltmXSYmKGMrPWdpW2ZdKX0odmsudXNlZENvcmVQbGF0Zm9ybVNlcnZpY2VzP3ZrLnNlbGVjdGVkQWxsQ29yZVBsYXRmb3JtU2VydmljZXM6MSkmJihjKz1cIm9cIik7cmV0dXJuIGN8fFwiLVwifWZ1bmN0aW9uIE1uKCl7cmV0dXJuIFBrKCl8fCh0bigpfHx1bigpKSYmeW4oKT09PVwiMVwiP1wiMVwiOlwiMFwifWZ1bmN0aW9uIE5uKCl7cmV0dXJuKFBrKCk/ITA6ISghdG4oKSYmIXVuKCkpJiZ5bigpPT09XCIxXCIpfHwhd2soVC5nLk8pfVxuZnVuY3Rpb24gVW4oKXt2YXIgYT1cIjBcIixiPVwiMFwiLGM7dmFyIGQ9cW4oKTtjPWQuYWN0aXZlP2QuY21wSWQ6dm9pZCAwO3R5cGVvZiBjPT09XCJudW1iZXJcIiYmYz49MCYmYzw9NDA5NSYmKGE9XCIwMTIzNDU2Nzg5YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXpBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWi1fXCJbYz4+NiY2M10sYj1cIjAxMjM0NTY3ODlhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ekFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaLV9cIltjJjYzXSk7dmFyIGU9XCIwXCIsZjt2YXIgZz1xbigpO2Y9Zy5hY3RpdmU/Zy50Y2ZQb2xpY3lWZXJzaW9uOnZvaWQgMDt0eXBlb2YgZj09PVwibnVtYmVyXCImJmY+PTAmJmY8PTYzJiYoZT1cIjAxMjM0NTY3ODlhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ekFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaLV9cIltmXSk7dmFyIGs9MDtQaygpJiYoa3w9MSk7eW4oKT09PVwiMVwiJiYoa3w9Mik7dG4oKSYmKGt8PTQpO3ZhciBtO3ZhciBuPXFuKCk7bT1uLmVuYWJsZUFkdmVydGlzZXJDb25zZW50TW9kZSE9PVxudm9pZCAwP24uZW5hYmxlQWR2ZXJ0aXNlckNvbnNlbnRNb2RlP1wiMVwiOlwiMFwiOnZvaWQgMDttPT09XCIxXCImJihrfD04KTtvaygpLndhaXRQZXJpb2RUaW1lZE91dCYmKGt8PTE2KTtyZXR1cm5cIjFcIithK2IrZStcIjAxMjM0NTY3ODlhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ekFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaLV9cIltrXX1mdW5jdGlvbiBWbigpe3JldHVybiBOaygpPT09XCJVUy1DT1wifTtmdW5jdGlvbiBXbigpe3ZhciBhPSExO3JldHVybiBhfTt2YXIgWG49e1VBOjEsQVc6MixEQzozLEc6NCxHRjo1LEdUOjEyLEdUTToxNCxIQTo2LE1DOjd9O1xuZnVuY3Rpb24gWW4oYSl7YT1hPT09dm9pZCAwP3t9OmE7dmFyIGI9T2YuY3RpZC5zcGxpdChcIi1cIilbMF0udG9VcHBlckNhc2UoKSxjPXt9O2MuY3RpZD1PZi5jdGlkO2MuSW09aGkucGU7Yy5NbT1oaS5SZztjLmltPXpqLm1lPzI6MTtjLlNtPWEuYms7Yy54ZT1PZi5jYW5vbmljYWxDb250YWluZXJJZDtjLnhlIT09YS5zYSYmKGMuc2E9YS5zYSk7dmFyIGQ9SmooKTtjLnltPWQ/ZC5jYW5vbmljYWxDb250YWluZXJJZDp2b2lkIDA7b2k/KGMuUmY9WG5bYl0sYy5SZnx8KGMuUmY9MCkpOmMuUmY9c2k/MTM6MTA7QmkuSD8oYy5QZj0wLGMuamw9Mik6cWk/Yy5QZj0xOlduKCk/Yy5QZj0yOmMuUGY9Mzt2YXIgZT17fTtlWzZdPUFqO0JpLkQ9PT0yP2VbN109ITA6QmkuRD09PTEmJihlWzJdPSEwKTtjLm5sPWU7dmFyIGY9YS5IZixnO3ZhciBrPWMuUmYsbT1jLlBmO2s9PT12b2lkIDA/Zz1cIlwiOihtfHwobT0wKSxnPVwiXCIrSGUoMSwxKStFZShrPDwyfG0pKTt2YXIgbj1jLmpsLHA9XCI0XCIrZytcbihuP1wiXCIrSGUoMiwxKStFZShuKTpcIlwiKSxxLHI9Yy5NbTtxPXImJkdlLnRlc3Qocik/XCJcIitIZSgzLDIpK3I6XCJcIjt2YXIgdCx1PWMuSW07dD11P1wiXCIrSGUoNCwxKStFZSh1KTpcIlwiO3ZhciB2O3ZhciB3PWMuY3RpZDtpZih3JiZmKXt2YXIgeD13LnNwbGl0KFwiLVwiKSx5PXhbMF0udG9VcHBlckNhc2UoKTtpZih5IT09XCJHVE1cIiYmeSE9PVwiT1BUXCIpdj1cIlwiO2Vsc2V7dmFyIEE9eFsxXTt2PVwiXCIrSGUoNSwzKStFZSgxK0EubGVuZ3RoKSsoYy5pbXx8MCkrQX19ZWxzZSB2PVwiXCI7dmFyIEI9Yy5TbSxDPWMueGUsSD1jLnNhLEk9Yy5PbixGPXArcSt0K3YrKEI/XCJcIitIZSg2LDEpK0VlKEIpOlwiXCIpKyhDP1wiXCIrSGUoNywzKStFZShDLmxlbmd0aCkrQzpcIlwiKSsoSD9cIlwiK0hlKDgsMykrRWUoSC5sZW5ndGgpK0g6XCJcIikrKEk/XCJcIitIZSg5LDMpK0VlKEkubGVuZ3RoKStJOlwiXCIpLE87dmFyIE49Yy5ubDtOPU49PT12b2lkIDA/e306Tjtmb3IodmFyIFM9W10sVj1uYShPYmplY3Qua2V5cyhOKSksYWE9Vi5uZXh0KCk7IWFhLmRvbmU7YWE9XG5WLm5leHQoKSl7dmFyIFg9YWEudmFsdWU7U1tOdW1iZXIoWCldPU5bWF19aWYoUy5sZW5ndGgpe3ZhciBSPUhlKDEwLDMpLG1hO2lmKFMubGVuZ3RoPT09MCltYT1FZSgwKTtlbHNle2Zvcih2YXIgbGE9W10sZWE9MCx3YT0hMSxPYT0wO09hPFMubGVuZ3RoO09hKyspe3dhPSEwO3ZhciBFYT1PYSU2O1NbT2FdJiYoZWF8PTE8PEVhKTtFYT09PTUmJihsYS5wdXNoKEVlKGVhKSksZWE9MCx3YT0hMSl9d2EmJmxhLnB1c2goRWUoZWEpKTttYT1sYS5qb2luKFwiXCIpfXZhciBUYT1tYTtPPVwiXCIrUitFZShUYS5sZW5ndGgpK1RhfWVsc2UgTz1cIlwiO3ZhciAkYT1jLnltO3JldHVybiBGK08rKCRhP1wiXCIrSGUoMTEsMykrRWUoJGEubGVuZ3RoKSskYTpcIlwiKX07dmFyIFpuPXtyajpcInNlcnZpY2Vfd29ya2VyX2VuZHBvaW50XCIsVGc6XCJzaGFyZWRfdXNlcl9pZFwiLFVnOlwic2hhcmVkX3VzZXJfaWRfcmVxdWVzdGVkXCIsc2U6XCJzaGFyZWRfdXNlcl9pZF9zb3VyY2VcIn0sJG47ZnVuY3Rpb24gYW8oYSl7aWYoISRuKXskbj17fTtmb3IodmFyIGI9bmEoT2JqZWN0LmtleXMoWm4pKSxjPWIubmV4dCgpOyFjLmRvbmU7Yz1iLm5leHQoKSkkbltabltjLnZhbHVlXV09ITB9cmV0dXJuISEkblthXX1cbmZ1bmN0aW9uIGJvKGEsYil7Yj1iPT09dm9pZCAwPyExOmI7aWYoYW8oYSkpe3ZhciBjLGQsZT0oZD0oYz1zYyhcImdvb2dsZV90YWdfZGF0YVwiLHt9KSkueGNkKSE9bnVsbD9kOmMueGNkPXt9O2lmKGVbYV0pcmV0dXJuIGVbYV07aWYoYil7dmFyIGY9dm9pZCAwLGc9MSxrPXt9LG09e3NldDpmdW5jdGlvbihuKXtmPW47bS5ub3RpZnkoKX0sZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGZ9LHN1YnNjcmliZTpmdW5jdGlvbihuKXtrW1N0cmluZyhnKV09bjtyZXR1cm4gZysrfSx1bnN1YnNjcmliZTpmdW5jdGlvbihuKXt2YXIgcD1TdHJpbmcobik7cmV0dXJuIGsuaGFzT3duUHJvcGVydHkocCk/KGRlbGV0ZSBrW3BdLCEwKTohMX0sbm90aWZ5OmZ1bmN0aW9uKCl7Zm9yKHZhciBuPW5hKE9iamVjdC5rZXlzKGspKSxwPW4ubmV4dCgpOyFwLmRvbmU7cD1uLm5leHQoKSl7dmFyIHE9cC52YWx1ZTt0cnl7a1txXShhLGYpfWNhdGNoKHIpe319fX07cmV0dXJuIGVbYV09bX19fVxuZnVuY3Rpb24gY28oYSxiKXt2YXIgYz1ibyhhLCEwKTtjJiZjLnNldChiKX1mdW5jdGlvbiBlbyhhKXt2YXIgYjtyZXR1cm4oYj1ibyhhKSk9PW51bGw/dm9pZCAwOmIuZ2V0KCl9ZnVuY3Rpb24gZm8oYSxiKXtpZih0eXBlb2YgYj09PVwiZnVuY3Rpb25cIil7dmFyIGM7cmV0dXJuKGM9Ym8oYSwhMCkpPT1udWxsP3ZvaWQgMDpjLnN1YnNjcmliZShiKX19ZnVuY3Rpb24gZ28oYSxiKXt2YXIgYz1ibyhhKTtyZXR1cm4gYz9jLnVuc3Vic2NyaWJlKGIpOiExfTtmdW5jdGlvbiBobyhhKXt2YXIgYj0xLGMsZCxlO2lmKGEpZm9yKGI9MCxkPWEubGVuZ3RoLTE7ZD49MDtkLS0pZT1hLmNoYXJDb2RlQXQoZCksYj0oYjw8NiYyNjg0MzU0NTUpK2UrKGU8PDE0KSxjPWImMjY2MzM4MzA0LGI9YyE9PTA/Yl5jPj4yMTpiO3JldHVybiBifTtmdW5jdGlvbiBpbyhhKXtyZXR1cm4gYS5vcmlnaW4hPT1cIm51bGxcIn07ZnVuY3Rpb24gam8oYSxiLGMsZCl7dmFyIGU7aWYoa28oZCkpe2Zvcih2YXIgZj1bXSxnPVN0cmluZyhifHxsbygpKS5zcGxpdChcIjtcIiksaz0wO2s8Zy5sZW5ndGg7aysrKXt2YXIgbT1nW2tdLnNwbGl0KFwiPVwiKSxuPW1bMF0ucmVwbGFjZSgvXlxccyp8XFxzKiQvZyxcIlwiKTtpZihuJiZuPT09YSl7dmFyIHA9bS5zbGljZSgxKS5qb2luKFwiPVwiKS5yZXBsYWNlKC9eXFxzKnxcXHMqJC9nLFwiXCIpO3AmJmMmJihwPWRlY29kZVVSSUNvbXBvbmVudChwKSk7Zi5wdXNoKHApfX1lPWZ9ZWxzZSBlPVtdO3JldHVybiBlfVxuZnVuY3Rpb24gbW8oYSxiLGMsZCxlKXtpZihrbyhlKSl7dmFyIGY9bm8oYSxkLGUpO2lmKGYubGVuZ3RoPT09MSlyZXR1cm4gZlswXS5pZDtpZihmLmxlbmd0aCE9PTApe2Y9b28oZixmdW5jdGlvbihnKXtyZXR1cm4gZy53bH0sYik7aWYoZi5sZW5ndGg9PT0xKXJldHVybiBmWzBdLmlkO2Y9b28oZixmdW5jdGlvbihnKXtyZXR1cm4gZy5BbX0sYyk7cmV0dXJuIGZbMF0/ZlswXS5pZDp2b2lkIDB9fX1mdW5jdGlvbiBwbyhhLGIsYyxkKXt2YXIgZT1sbygpLGY9d2luZG93O2lvKGYpJiYoZi5kb2N1bWVudC5jb29raWU9YSk7dmFyIGc9bG8oKTtyZXR1cm4gZSE9PWd8fGMhPT12b2lkIDAmJmpvKGIsZywhMSxkKS5pbmRleE9mKGMpPj0wfVxuZnVuY3Rpb24gcW8oYSxiLGMsZCl7ZnVuY3Rpb24gZSh3LHgseSl7aWYoeT09bnVsbClyZXR1cm4gZGVsZXRlIGtbeF0sdztrW3hdPXk7cmV0dXJuIHcrXCI7IFwiK3grXCI9XCIreX1mdW5jdGlvbiBmKHcseCl7aWYoeD09bnVsbClyZXR1cm4gdztrW3hdPSEwO3JldHVybiB3K1wiOyBcIit4fWlmKCFrbyhjLkFiKSlyZXR1cm4gMjt2YXIgZztiPT1udWxsP2c9YStcIj1kZWxldGVkOyBleHBpcmVzPVwiKyhuZXcgRGF0ZSgwKSkudG9VVENTdHJpbmcoKTooYy5lbmNvZGUmJihiPWVuY29kZVVSSUNvbXBvbmVudChiKSksYj1ybyhiKSxnPWErXCI9XCIrYik7dmFyIGs9e307Zz1lKGcsXCJwYXRoXCIsYy5wYXRoKTt2YXIgbTtjLmV4cGlyZXMgaW5zdGFuY2VvZiBEYXRlP209Yy5leHBpcmVzLnRvVVRDU3RyaW5nKCk6Yy5leHBpcmVzIT1udWxsJiYobT1cIlwiK2MuZXhwaXJlcyk7Zz1lKGcsXCJleHBpcmVzXCIsbSk7Zz1lKGcsXCJtYXgtYWdlXCIsYy5tbSk7Zz1lKGcsXCJzYW1lc2l0ZVwiLGMuTm0pO2Muc2VjdXJlJiZcbihnPWYoZyxcInNlY3VyZVwiKSk7dmFyIG49Yy5kb21haW47aWYobiYmbi50b0xvd2VyQ2FzZSgpPT09XCJhdXRvXCIpe2Zvcih2YXIgcD1zbygpLHE9dm9pZCAwLHI9ITEsdD0wO3Q8cC5sZW5ndGg7Kyt0KXt2YXIgdT1wW3RdIT09XCJub25lXCI/cFt0XTp2b2lkIDAsdj1lKGcsXCJkb21haW5cIix1KTt2PWYodixjLmZsYWdzKTt0cnl7ZCYmZChhLGspfWNhdGNoKHcpe3E9dztjb250aW51ZX1yPSEwO2lmKCF0byh1LGMucGF0aCkmJnBvKHYsYSxiLGMuQWIpKXJldHVybiAwfWlmKHEmJiFyKXRocm93IHE7cmV0dXJuIDF9biYmbi50b0xvd2VyQ2FzZSgpIT09XCJub25lXCImJihnPWUoZyxcImRvbWFpblwiLG4pKTtnPWYoZyxjLmZsYWdzKTtkJiZkKGEsayk7cmV0dXJuIHRvKG4sYy5wYXRoKT8xOnBvKGcsYSxiLGMuQWIpPzA6MX1mdW5jdGlvbiB1byhhLGIsYyl7Yy5wYXRoPT1udWxsJiYoYy5wYXRoPVwiL1wiKTtjLmRvbWFpbnx8KGMuZG9tYWluPVwiYXV0b1wiKTtyZXR1cm4gcW8oYSxiLGMpfVxuZnVuY3Rpb24gb28oYSxiLGMpe2Zvcih2YXIgZD1bXSxlPVtdLGYsZz0wO2c8YS5sZW5ndGg7ZysrKXt2YXIgaz1hW2ddLG09YihrKTttPT09Yz9kLnB1c2goayk6Zj09PXZvaWQgMHx8bTxmPyhlPVtrXSxmPW0pOm09PT1mJiZlLnB1c2goayl9cmV0dXJuIGQubGVuZ3RoPjA/ZDplfWZ1bmN0aW9uIG5vKGEsYixjKXtmb3IodmFyIGQ9W10sZT1qbyhhLHZvaWQgMCx2b2lkIDAsYyksZj0wO2Y8ZS5sZW5ndGg7ZisrKXt2YXIgZz1lW2ZdLnNwbGl0KFwiLlwiKSxrPWcuc2hpZnQoKTtpZighYnx8IWt8fGIuaW5kZXhPZihrKSE9PS0xKXt2YXIgbT1nLnNoaWZ0KCk7aWYobSl7dmFyIG49bS5zcGxpdChcIi1cIik7ZC5wdXNoKHtpZDpnLmpvaW4oXCIuXCIpLHdsOk51bWJlcihuWzBdKXx8MSxBbTpOdW1iZXIoblsxXSl8fDF9KX19fXJldHVybiBkfWZ1bmN0aW9uIHJvKGEpe2EmJmEubGVuZ3RoPjEyMDAmJihhPWEuc3Vic3RyaW5nKDAsMTIwMCkpO3JldHVybiBhfVxudmFyIHZvPS9eKHd3d1xcLik/Z29vZ2xlKFxcLmNvbT8pPyhcXC5bYS16XXsyfSk/JC8sd289LyhefFxcLilkb3VibGVjbGlja1xcLm5ldCQvaTtmdW5jdGlvbiB0byhhLGIpe3JldHVybiBhIT09dm9pZCAwJiYod28udGVzdCh3aW5kb3cuZG9jdW1lbnQubG9jYXRpb24uaG9zdG5hbWUpfHxiPT09XCIvXCImJnZvLnRlc3QoYSkpfWZ1bmN0aW9uIHhvKGEpe2lmKCFhKXJldHVybiAxO3ZhciBiPWE7bWIoMTEpJiZhPT09XCJub25lXCImJihiPXdpbmRvdy5kb2N1bWVudC5sb2NhdGlvbi5ob3N0bmFtZSk7Yj1iLmluZGV4T2YoXCIuXCIpPT09MD9iLnN1YnN0cmluZygxKTpiO3JldHVybiBiLnNwbGl0KFwiLlwiKS5sZW5ndGh9ZnVuY3Rpb24geW8oYSl7aWYoIWF8fGE9PT1cIi9cIilyZXR1cm4gMTthWzBdIT09XCIvXCImJihhPVwiL1wiK2EpO2FbYS5sZW5ndGgtMV0hPT1cIi9cIiYmKGErPVwiL1wiKTtyZXR1cm4gYS5zcGxpdChcIi9cIikubGVuZ3RoLTF9XG5mdW5jdGlvbiB6byhhLGIpe3ZhciBjPVwiXCIreG8oYSksZD15byhiKTtkPjEmJihjKz1cIi1cIitkKTtyZXR1cm4gY31cbnZhciBsbz1mdW5jdGlvbigpe3JldHVybiBpbyh3aW5kb3cpP3dpbmRvdy5kb2N1bWVudC5jb29raWU6XCJcIn0sa289ZnVuY3Rpb24oYSl7cmV0dXJuIGEmJm1iKDEyKT8oQXJyYXkuaXNBcnJheShhKT9hOlthXSkuZXZlcnkoZnVuY3Rpb24oYil7cmV0dXJuIHprKGIpJiZ3ayhiKX0pOiEwfSxzbz1mdW5jdGlvbigpe3ZhciBhPVtdLGI9d2luZG93LmRvY3VtZW50LmxvY2F0aW9uLmhvc3RuYW1lLnNwbGl0KFwiLlwiKTtpZihiLmxlbmd0aD09PTQpe3ZhciBjPWJbYi5sZW5ndGgtMV07aWYoTnVtYmVyKGMpLnRvU3RyaW5nKCk9PT1jKXJldHVybltcIm5vbmVcIl19Zm9yKHZhciBkPWIubGVuZ3RoLTI7ZD49MDtkLS0pYS5wdXNoKGIuc2xpY2UoZCkuam9pbihcIi5cIikpO3ZhciBlPXdpbmRvdy5kb2N1bWVudC5sb2NhdGlvbi5ob3N0bmFtZTt3by50ZXN0KGUpfHx2by50ZXN0KGUpfHxhLnB1c2goXCJub25lXCIpO3JldHVybiBhfTtmdW5jdGlvbiBBbyhhKXt2YXIgYj1NYXRoLnJvdW5kKE1hdGgucmFuZG9tKCkqMjE0NzQ4MzY0Nyk7cmV0dXJuIGE/U3RyaW5nKGJeaG8oYSkmMjE0NzQ4MzY0Nyk6U3RyaW5nKGIpfWZ1bmN0aW9uIEJvKGEpe3JldHVybltBbyhhKSxNYXRoLnJvdW5kKEJiKCkvMUUzKV0uam9pbihcIi5cIil9ZnVuY3Rpb24gQ28oYSxiLGMsZCxlKXt2YXIgZj14byhiKTtyZXR1cm4gbW8oYSxmLHlvKGMpLGQsZSl9ZnVuY3Rpb24gRG8oYSxiLGMsZCl7cmV0dXJuW2Isem8oYyxkKSxhXS5qb2luKFwiLlwiKX07ZnVuY3Rpb24gRW8oYSxiLGMsZCl7dmFyIGUsZj1OdW1iZXIoYS56YiE9bnVsbD9hLnpiOnZvaWQgMCk7ZiE9PTAmJihlPW5ldyBEYXRlKChifHxCYigpKSsxRTMqKGZ8fDc3NzZFMykpKTtyZXR1cm57cGF0aDphLnBhdGgsZG9tYWluOmEuZG9tYWluLGZsYWdzOmEuZmxhZ3MsZW5jb2RlOiEhYyxleHBpcmVzOmUsQWI6ZH19O3ZhciBGbztmdW5jdGlvbiBHbygpe2Z1bmN0aW9uIGEoZyl7YyhnLnRhcmdldHx8Zy5zcmNFbGVtZW50fHx7fSl9ZnVuY3Rpb24gYihnKXtkKGcudGFyZ2V0fHxnLnNyY0VsZW1lbnR8fHt9KX12YXIgYz1IbyxkPUlvLGU9Sm8oKTtpZighZS5pbml0KXtDYyhFLFwibW91c2Vkb3duXCIsYSk7Q2MoRSxcImtleXVwXCIsYSk7Q2MoRSxcInN1Ym1pdFwiLGIpO3ZhciBmPUhUTUxGb3JtRWxlbWVudC5wcm90b3R5cGUuc3VibWl0O0hUTUxGb3JtRWxlbWVudC5wcm90b3R5cGUuc3VibWl0PWZ1bmN0aW9uKCl7ZCh0aGlzKTtmLmNhbGwodGhpcyl9O2UuaW5pdD0hMH19ZnVuY3Rpb24gS28oYSxiLGMsZCxlKXt2YXIgZj17Y2FsbGJhY2s6YSxkb21haW5zOmIsZnJhZ21lbnQ6Yz09PTIscGxhY2VtZW50OmMsZm9ybXM6ZCxzYW1lSG9zdDplfTtKbygpLmRlY29yYXRvcnMucHVzaChmKX1cbmZ1bmN0aW9uIExvKGEsYixjKXtmb3IodmFyIGQ9Sm8oKS5kZWNvcmF0b3JzLGU9e30sZj0wO2Y8ZC5sZW5ndGg7KytmKXt2YXIgZz1kW2ZdLGs7aWYoaz0hY3x8Zy5mb3JtcylhOnt2YXIgbT1nLmRvbWFpbnMsbj1hLHA9ISFnLnNhbWVIb3N0O2lmKG0mJihwfHxuIT09RS5sb2NhdGlvbi5ob3N0bmFtZSkpZm9yKHZhciBxPTA7cTxtLmxlbmd0aDtxKyspaWYobVtxXWluc3RhbmNlb2YgUmVnRXhwKXtpZihtW3FdLnRlc3Qobikpe2s9ITA7YnJlYWsgYX19ZWxzZSBpZihuLmluZGV4T2YobVtxXSk+PTB8fHAmJm1bcV0uaW5kZXhPZihuKT49MCl7az0hMDticmVhayBhfWs9ITF9aWYoayl7dmFyIHI9Zy5wbGFjZW1lbnQ7cj09PXZvaWQgMCYmKHI9Zy5mcmFnbWVudD8yOjEpO3I9PT1iJiZFYihlLGcuY2FsbGJhY2soKSl9fXJldHVybiBlfVxuZnVuY3Rpb24gSm8oKXt2YXIgYT1zYyhcImdvb2dsZV90YWdfZGF0YVwiLHt9KSxiPWEuZ2w7YiYmYi5kZWNvcmF0b3JzfHwoYj17ZGVjb3JhdG9yczpbXX0sYS5nbD1iKTtyZXR1cm4gYn07dmFyIE1vPS8oLio/KVxcKiguKj8pXFwqKC4qKS8sTm89L15odHRwcz86XFwvXFwvKFteXFwvXSo/KVxcLj9jZG5cXC5hbXBwcm9qZWN0XFwub3JnXFwvPyguKikvLE9vPS9eKD86d3d3XFwufG1cXC58YW1wXFwuKSsvLFBvPS8oW14/I10rKShcXD9bXiNdKik/KCMuKik/LztmdW5jdGlvbiBRbyhhKXt2YXIgYj1Qby5leGVjKGEpO2lmKGIpcmV0dXJue0NoOmJbMV0scXVlcnk6YlsyXSxmcmFnbWVudDpiWzNdfX1cbmZ1bmN0aW9uIFJvKGEsYil7dmFyIGM9W29jLnVzZXJBZ2VudCwobmV3IERhdGUpLmdldFRpbWV6b25lT2Zmc2V0KCksb2MudXNlckxhbmd1YWdlfHxvYy5sYW5ndWFnZSxNYXRoLmZsb29yKEJiKCkvNjAvMUUzKS0oYj09PXZvaWQgMD8wOmIpLGFdLmpvaW4oXCIqXCIpLGQ7aWYoIShkPUZvKSl7Zm9yKHZhciBlPUFycmF5KDI1NiksZj0wO2Y8MjU2O2YrKyl7Zm9yKHZhciBnPWYsaz0wO2s8ODtrKyspZz1nJjE/Zz4+PjFeMzk4ODI5MjM4NDpnPj4+MTtlW2ZdPWd9ZD1lfUZvPWQ7Zm9yKHZhciBtPTQyOTQ5NjcyOTUsbj0wO248Yy5sZW5ndGg7bisrKW09bT4+PjheRm9bKG1eYy5jaGFyQ29kZUF0KG4pKSYyNTVdO3JldHVybigobV4tMSk+Pj4wKS50b1N0cmluZygzNil9XG5mdW5jdGlvbiBTbygpe3JldHVybiBmdW5jdGlvbihhKXt2YXIgYj1haihELmxvY2F0aW9uLmhyZWYpLGM9Yi5zZWFyY2gucmVwbGFjZShcIj9cIixcIlwiKSxkPVVpKGMsXCJfZ2xcIiwhMSwhMCl8fFwiXCI7YS5xdWVyeT1UbyhkKXx8e307dmFyIGU9VmkoYixcImZyYWdtZW50XCIpLGY7dmFyIGc9LTE7aWYoR2IoZSxcIl9nbD1cIikpZz00O2Vsc2V7dmFyIGs9ZS5pbmRleE9mKFwiJl9nbD1cIik7az4wJiYoZz1rKzMrMil9aWYoZzwwKWY9dm9pZCAwO2Vsc2V7dmFyIG09ZS5pbmRleE9mKFwiJlwiLGcpO2Y9bTwwP2Uuc3Vic3RyaW5nKGcpOmUuc3Vic3RyaW5nKGcsbSl9YS5mcmFnbWVudD1UbyhmfHxcIlwiKXx8e319fWZ1bmN0aW9uIFVvKGEpe3ZhciBiPVNvKCksYz1KbygpO2MuZGF0YXx8KGMuZGF0YT17cXVlcnk6e30sZnJhZ21lbnQ6e319LGIoYy5kYXRhKSk7dmFyIGQ9e30sZT1jLmRhdGE7ZSYmKEViKGQsZS5xdWVyeSksYSYmRWIoZCxlLmZyYWdtZW50KSk7cmV0dXJuIGR9XG52YXIgVG89ZnVuY3Rpb24oYSl7dHJ5e3ZhciBiPVZvKGEsMyk7aWYoYiE9PXZvaWQgMCl7Zm9yKHZhciBjPXt9LGQ9Yj9iLnNwbGl0KFwiKlwiKTpbXSxlPTA7ZSsxPGQubGVuZ3RoO2UrPTIpe3ZhciBmPWRbZV0sZz1mYihkW2UrMV0pO2NbZl09Z31oYihcIlRBR0dJTkdcIiw2KTtyZXR1cm4gY319Y2F0Y2goayl7aGIoXCJUQUdHSU5HXCIsOCl9fTtmdW5jdGlvbiBWbyhhLGIpe2lmKGEpe3ZhciBjO2E6e2Zvcih2YXIgZD1hLGU9MDtlPDM7KytlKXt2YXIgZj1Nby5leGVjKGQpO2lmKGYpe2M9ZjticmVhayBhfWQ9ZGVjb2RlVVJJQ29tcG9uZW50KGQpfWM9dm9pZCAwfXZhciBnPWM7aWYoZyYmZ1sxXT09PVwiMVwiKXt2YXIgaz1nWzNdLG07YTp7Zm9yKHZhciBuPWdbMl0scD0wO3A8YjsrK3ApaWYobj09PVJvKGsscCkpe209ITA7YnJlYWsgYX1tPSExfWlmKG0pcmV0dXJuIGs7aGIoXCJUQUdHSU5HXCIsNyl9fX1cbmZ1bmN0aW9uIFdvKGEsYixjLGQsZSl7ZnVuY3Rpb24gZihwKXt2YXIgcT1wLHI9KG5ldyBSZWdFeHAoXCIoLio/KShefCYpXCIrYStcIj0oW14mXSopJj8oLiopXCIpKS5leGVjKHEpLHQ9cTtpZihyKXt2YXIgdT1yWzJdLHY9cls0XTt0PXJbMV07diYmKHQ9dCt1K3YpfXA9dDt2YXIgdz1wLmNoYXJBdChwLmxlbmd0aC0xKTtwJiZ3IT09XCImXCImJihwKz1cIiZcIik7cmV0dXJuIHArbn1kPWQ9PT12b2lkIDA/ITE6ZDtlPWU9PT12b2lkIDA/ITE6ZTt2YXIgZz1RbyhjKTtpZighZylyZXR1cm5cIlwiO3ZhciBrPWcucXVlcnl8fFwiXCIsbT1nLmZyYWdtZW50fHxcIlwiLG49YStcIj1cIitiO2Q/bS5zdWJzdHJpbmcoMSkubGVuZ3RoIT09MCYmZXx8KG09XCIjXCIrZihtLnN1YnN0cmluZygxKSkpOms9XCI/XCIrZihrLnN1YnN0cmluZygxKSk7cmV0dXJuXCJcIitnLkNoK2srbX1cbmZ1bmN0aW9uIFhvKGEsYil7ZnVuY3Rpb24gYyhuLHAscSl7dmFyIHI7YTp7Zm9yKHZhciB0IGluIG4paWYobi5oYXNPd25Qcm9wZXJ0eSh0KSl7cj0hMDticmVhayBhfXI9ITF9aWYocil7dmFyIHUsdj1bXSx3O2Zvcih3IGluIG4paWYobi5oYXNPd25Qcm9wZXJ0eSh3KSl7dmFyIHg9blt3XTt4IT09dm9pZCAwJiZ4PT09eCYmeCE9PW51bGwmJngudG9TdHJpbmcoKSE9PVwiW29iamVjdCBPYmplY3RdXCImJih2LnB1c2godyksdi5wdXNoKGViKFN0cmluZyh4KSkpKX12YXIgeT12LmpvaW4oXCIqXCIpO3U9W1wiMVwiLFJvKHkpLHldLmpvaW4oXCIqXCIpO2Q/KG1iKDQpfHxtYigxKXx8IXApJiZZbyhcIl9nbFwiLHUsYSxwLHEpOlpvKFwiX2dsXCIsdSxhLHAscSl9fXZhciBkPShhLnRhZ05hbWV8fFwiXCIpLnRvVXBwZXJDYXNlKCk9PT1cIkZPUk1cIixlPUxvKGIsMSxkKSxmPUxvKGIsMixkKSxnPUxvKGIsNCxkKSxrPUxvKGIsMyxkKTtjKGUsITEsITEpO2MoZiwhMCwhMSk7bWIoMSkmJmMoZywhMCwhMCk7Zm9yKHZhciBtIGluIGspay5oYXNPd25Qcm9wZXJ0eShtKSYmXG4kbyhtLGtbbV0sYSl9ZnVuY3Rpb24gJG8oYSxiLGMpe2MudGFnTmFtZS50b0xvd2VyQ2FzZSgpPT09XCJhXCI/Wm8oYSxiLGMpOmMudGFnTmFtZS50b0xvd2VyQ2FzZSgpPT09XCJmb3JtXCImJllvKGEsYixjKX1mdW5jdGlvbiBabyhhLGIsYyxkLGUpe2Q9ZD09PXZvaWQgMD8hMTpkO2U9ZT09PXZvaWQgMD8hMTplO3ZhciBmO2lmKGY9Yy5ocmVmKXt2YXIgZztpZighKGc9IW1iKDUpfHxkKSl7dmFyIGs9RC5sb2NhdGlvbi5ocmVmLG09UW8oYy5ocmVmKSxuPVFvKGspO2c9IShtJiZuJiZtLkNoPT09bi5DaCYmbS5xdWVyeT09PW4ucXVlcnkmJm0uZnJhZ21lbnQpfWY9Z31pZihmKXt2YXIgcD1XbyhhLGIsYy5ocmVmLGQsZSk7ZmMudGVzdChwKSYmKGMuaHJlZj1wKX19XG5mdW5jdGlvbiBZbyhhLGIsYyxkLGUpe2Q9ZD09PXZvaWQgMD8hMTpkO2U9ZT09PXZvaWQgMD8hMTplO2lmKGMmJmMuYWN0aW9uKXt2YXIgZj0oYy5tZXRob2R8fFwiXCIpLnRvTG93ZXJDYXNlKCk7aWYoZiE9PVwiZ2V0XCJ8fGQpe2lmKGY9PT1cImdldFwifHxmPT09XCJwb3N0XCIpe3ZhciBnPVdvKGEsYixjLmFjdGlvbixkLGUpO2ZjLnRlc3QoZykmJihjLmFjdGlvbj1nKX19ZWxzZXtmb3IodmFyIGs9Yy5jaGlsZE5vZGVzfHxbXSxtPSExLG49MDtuPGsubGVuZ3RoO24rKyl7dmFyIHA9a1tuXTtpZihwLm5hbWU9PT1hKXtwLnNldEF0dHJpYnV0ZShcInZhbHVlXCIsYik7bT0hMDticmVha319aWYoIW0pe3ZhciBxPUUuY3JlYXRlRWxlbWVudChcImlucHV0XCIpO3Euc2V0QXR0cmlidXRlKFwidHlwZVwiLFwiaGlkZGVuXCIpO3Euc2V0QXR0cmlidXRlKFwibmFtZVwiLGEpO3Euc2V0QXR0cmlidXRlKFwidmFsdWVcIixiKTtjLmFwcGVuZENoaWxkKHEpfX19fVxuZnVuY3Rpb24gSG8oYSl7dHJ5e3ZhciBiO2E6e2Zvcih2YXIgYz1hLGQ9MTAwO2MmJmQ+MDspe2lmKGMuaHJlZiYmYy5ub2RlTmFtZS5tYXRjaCgvXmEoPzpyZWEpPyQvaSkpe2I9YzticmVhayBhfWM9Yy5wYXJlbnROb2RlO2QtLX1iPW51bGx9dmFyIGU9YjtpZihlKXt2YXIgZj1lLnByb3RvY29sO2YhPT1cImh0dHA6XCImJmYhPT1cImh0dHBzOlwifHxYbyhlLGUuaG9zdG5hbWUpfX1jYXRjaChnKXt9fWZ1bmN0aW9uIElvKGEpe3RyeXtpZihhLmFjdGlvbil7dmFyIGI9VmkoYWooYS5hY3Rpb24pLFwiaG9zdFwiKTtYbyhhLGIpfX1jYXRjaChjKXt9fWZ1bmN0aW9uIGFwKGEsYixjLGQpe0dvKCk7dmFyIGU9Yz09PVwiZnJhZ21lbnRcIj8yOjE7ZD0hIWQ7S28oYSxiLGUsZCwhMSk7ZT09PTImJmhiKFwiVEFHR0lOR1wiLDIzKTtkJiZoYihcIlRBR0dJTkdcIiwyNCl9ZnVuY3Rpb24gYnAoYSxiKXtHbygpO0tvKGEsW1hpKEQubG9jYXRpb24sXCJob3N0XCIsITApXSxiLCEwLCEwKX1cbmZ1bmN0aW9uIGNwKCl7dmFyIGE9RS5sb2NhdGlvbi5ob3N0bmFtZSxiPU5vLmV4ZWMoRS5yZWZlcnJlcik7aWYoIWIpcmV0dXJuITE7dmFyIGM9YlsyXSxkPWJbMV0sZT1cIlwiO2lmKGMpe3ZhciBmPWMuc3BsaXQoXCIvXCIpLGc9ZlsxXTtlPWc9PT1cInNcIj9kZWNvZGVVUklDb21wb25lbnQoZlsyXSk6ZGVjb2RlVVJJQ29tcG9uZW50KGcpfWVsc2UgaWYoZCl7aWYoZC5pbmRleE9mKFwieG4tLVwiKT09PTApcmV0dXJuITE7ZT1kLnJlcGxhY2UoLy0vZyxcIi5cIikucmVwbGFjZSgvXFwuXFwuL2csXCItXCIpfXZhciBrPWEucmVwbGFjZShPbyxcIlwiKSxtPWUucmVwbGFjZShPbyxcIlwiKTtyZXR1cm4gaz09PW18fEhiKGssXCIuXCIrbSl9ZnVuY3Rpb24gZHAoYSxiKXtyZXR1cm4gYT09PSExPyExOmF8fGJ8fGNwKCl9O3ZhciBlcD1bXCIxXCJdLGZwPXt9LGdwPXt9O2Z1bmN0aW9uIGhwKGEsYil7Yj1iPT09dm9pZCAwPyEwOmI7dmFyIGM9aXAoYS5wcmVmaXgpO2lmKCFmcFtjXSlpZihqcChjLGEucGF0aCxhLmRvbWFpbikpe3ZhciBkPWdwW2lwKGEucHJlZml4KV07a3AoYSxkP2QuaWQ6dm9pZCAwLGQ/ZC54aDp2b2lkIDApfWVsc2V7dmFyIGU9Y2ooXCJhdWlkZGNcIik7aWYoZSloYihcIlRBR0dJTkdcIiwxNyksZnBbY109ZTtlbHNlIGlmKGIpe3ZhciBmPWlwKGEucHJlZml4KSxnPUJvKCk7bHAoZixnLGEpO2pwKGMsYS5wYXRoLGEuZG9tYWluKX19fWZ1bmN0aW9uIGtwKGEsYixjKXt2YXIgZD1pcChhLnByZWZpeCksZT1mcFtkXTtpZihlKXt2YXIgZj1lLnNwbGl0KFwiLlwiKTtpZihmLmxlbmd0aD09PTIpe3ZhciBnPU51bWJlcihmWzFdKXx8MDtpZihnKXt2YXIgaz1lO2ImJihrPWUrXCIuXCIrYitcIi5cIisoYz9jOk1hdGguZmxvb3IoQmIoKS8xRTMpKSk7bHAoZCxrLGEsZyoxRTMpfX19fVxuZnVuY3Rpb24gbHAoYSxiLGMsZCl7dmFyIGU9RG8oYixcIjFcIixjLmRvbWFpbixjLnBhdGgpLGY9RW8oYyxkKTtmLkFiPW1wKCk7dW8oYSxlLGYpfWZ1bmN0aW9uIGpwKGEsYixjKXt2YXIgZD1DbyhhLGIsYyxlcCxtcCgpKTtpZighZClyZXR1cm4hMTtucChhLGQpO3JldHVybiEwfWZ1bmN0aW9uIG5wKGEsYil7dmFyIGM9Yi5zcGxpdChcIi5cIik7Yy5sZW5ndGg9PT01PyhmcFthXT1jLnNsaWNlKDAsMikuam9pbihcIi5cIiksZ3BbYV09e2lkOmMuc2xpY2UoMiw0KS5qb2luKFwiLlwiKSx4aDpOdW1iZXIoY1s0XSl8fDB9KTpjLmxlbmd0aD09PTM/Z3BbYV09e2lkOmMuc2xpY2UoMCwyKS5qb2luKFwiLlwiKSx4aDpOdW1iZXIoY1syXSl8fDB9OmZwW2FdPWJ9ZnVuY3Rpb24gaXAoYSl7cmV0dXJuKGF8fFwiX2djbFwiKStcIl9hdVwifWZ1bmN0aW9uIG9wKGEpe2Z1bmN0aW9uIGIoKXt3ayhjKSYmYSgpfXZhciBjPW1wKCk7RGsoZnVuY3Rpb24oKXtiKCk7d2soYyl8fEVrKGIsYyl9LGMpfVxuZnVuY3Rpb24gcHAoYSl7dmFyIGI9VW8oITApLGM9aXAoYS5wcmVmaXgpO29wKGZ1bmN0aW9uKCl7dmFyIGQ9YltjXTtpZihkKXtucChjLGQpO3ZhciBlPU51bWJlcihmcFtjXS5zcGxpdChcIi5cIilbMV0pKjFFMztpZihlKXtoYihcIlRBR0dJTkdcIiwxNik7dmFyIGY9RW8oYSxlKTtmLkFiPW1wKCk7dmFyIGc9RG8oZCxcIjFcIixhLmRvbWFpbixhLnBhdGgpO3VvKGMsZyxmKX19fSl9ZnVuY3Rpb24gcXAoYSxiLGMsZCxlKXtlPWV8fHt9O3ZhciBmPWZ1bmN0aW9uKCl7dmFyIGc9e30saz1DbyhhLGUucGF0aCxlLmRvbWFpbixlcCxtcCgpKTtrJiYoZ1thXT1rKTtyZXR1cm4gZ307b3AoZnVuY3Rpb24oKXthcChmLGIsYyxkKX0pfWZ1bmN0aW9uIG1wKCl7cmV0dXJuW1wiYWRfc3RvcmFnZVwiLFwiYWRfdXNlcl9kYXRhXCJdfTtmdW5jdGlvbiBycChhKXtmb3IodmFyIGI9W10sYz1FLmNvb2tpZS5zcGxpdChcIjtcIiksZD1uZXcgUmVnRXhwKFwiXlxcXFxzKlwiKyhhfHxcIl9nYWNcIikrXCJfKFVBLVxcXFxkKy1cXFxcZCspPVxcXFxzKiguKz8pXFxcXHMqJFwiKSxlPTA7ZTxjLmxlbmd0aDtlKyspe3ZhciBmPWNbZV0ubWF0Y2goZCk7ZiYmYi5wdXNoKHtRaDpmWzFdLHZhbHVlOmZbMl0sdGltZXN0YW1wOk51bWJlcihmWzJdLnNwbGl0KFwiLlwiKVsxXSl8fDB9KX1iLnNvcnQoZnVuY3Rpb24oZyxrKXtyZXR1cm4gay50aW1lc3RhbXAtZy50aW1lc3RhbXB9KTtyZXR1cm4gYn1cbmZ1bmN0aW9uIHNwKGEsYil7dmFyIGM9cnAoYSksZD17fTtpZighY3x8IWMubGVuZ3RoKXJldHVybiBkO2Zvcih2YXIgZT0wO2U8Yy5sZW5ndGg7ZSsrKXt2YXIgZj1jW2VdLnZhbHVlLnNwbGl0KFwiLlwiKTtpZighKGZbMF0hPT1cIjFcInx8YiYmZi5sZW5ndGg8M3x8IWImJmYubGVuZ3RoIT09MykmJk51bWJlcihmWzFdKSl7ZFtjW2VdLlFoXXx8KGRbY1tlXS5RaF09W10pO3ZhciBnPXt2ZXJzaW9uOmZbMF0sdGltZXN0YW1wOk51bWJlcihmWzFdKSoxRTMsYWE6ZlsyXX07YiYmZi5sZW5ndGg+MyYmKGcubGFiZWxzPWYuc2xpY2UoMykpO2RbY1tlXS5RaF0ucHVzaChnKX19cmV0dXJuIGR9O3ZhciB0cD17fSx1cD0odHAuaz17R2E6L15bXFx3LV0rJC99LHRwLmI9e0dhOi9eW1xcdy1dKyQvLEpoOiEwfSx0cC5pPXtHYTovXlsxLTldXFxkKiQvfSx0cC51PXtHYTovXlsxLTldXFxkKiQvfSx0cCk7dmFyIHZwPXt9LHlwPSh2cFs1XT17bWs6ezI6d3B9LGFoOltcImtcIixcImlcIixcImJcIixcInVcIl19LHZwWzRdPXttazp7Mjp3cCxHQ0w6eHB9LGFoOltcImtcIixcImlcIixcImJcIl19LHZwKTtmdW5jdGlvbiB6cChhKXt2YXIgYj15cFs1XTtpZihiKXt2YXIgYz1hLnNwbGl0KFwiLlwiKVswXTtpZihjKXt2YXIgZD1iLm1rW2NdO2lmKGQpcmV0dXJuIGQoYSw1KX19fVxuZnVuY3Rpb24gd3AoYSxiKXt2YXIgYz1hLnNwbGl0KFwiLlwiKTtpZihjLmxlbmd0aD09PTMpe3ZhciBkPXt9LGU9eXBbYl07aWYoZSl7Zm9yKHZhciBmPWUuYWgsZz1uYShjWzJdLnNwbGl0KFwiJFwiKSksaz1nLm5leHQoKTshay5kb25lO2s9Zy5uZXh0KCkpe3ZhciBtPWsudmFsdWUsbj1tWzBdO2lmKGYuaW5kZXhPZihuKSE9PS0xKXRyeXt2YXIgcD1kZWNvZGVVUklDb21wb25lbnQobS5zdWJzdHJpbmcoMSkpLHE9dXBbbl07cSYmKHEuSmg/KGRbbl09ZFtuXXx8W10sZFtuXS5wdXNoKHApKTpkW25dPXApfWNhdGNoKHIpe319cmV0dXJuIGR9fX1cbmZ1bmN0aW9uIEFwKGEsYil7dmFyIGM9eXBbNV07aWYoYyl7Zm9yKHZhciBkPVtdLGU9bmEoYy5haCksZj1lLm5leHQoKTshZi5kb25lO2Y9ZS5uZXh0KCkpe3ZhciBnPWYudmFsdWUsaz11cFtnXTtpZihrKXt2YXIgbT1hW2ddO2lmKG0hPT12b2lkIDApaWYoay5KaCYmQXJyYXkuaXNBcnJheShtKSlmb3IodmFyIG49bmEobSkscD1uLm5leHQoKTshcC5kb25lO3A9bi5uZXh0KCkpZC5wdXNoKGVuY29kZVVSSUNvbXBvbmVudChcIlwiK2crcC52YWx1ZSkpO2Vsc2UgZC5wdXNoKGVuY29kZVVSSUNvbXBvbmVudChcIlwiK2crbSkpfX1yZXR1cm5bXCIyXCIsYnx8XCIxXCIsZC5qb2luKFwiJFwiKV0uam9pbihcIi5cIil9fWZ1bmN0aW9uIHhwKGEpe3ZhciBiPWEuc3BsaXQoXCIuXCIpO2Iuc2hpZnQoKTt2YXIgYz1iLnNoaWZ0KCksZD1iLnNoaWZ0KCksZT17fTtyZXR1cm4gZS5rPWQsZS5pPWMsZS5iPWIsZX07dmFyIEJwPW5ldyBNYXAoW1s1LFwiYWRfc3RvcmFnZVwiXSxbNCxbXCJhZF9zdG9yYWdlXCIsXCJhZF91c2VyX2RhdGFcIl1dXSk7ZnVuY3Rpb24gQ3AoYSl7aWYoeXBbNV0pe2Zvcih2YXIgYj1bXSxjPWpvKGEsdm9pZCAwLHZvaWQgMCxCcC5nZXQoNSkpLGQ9bmEoYyksZT1kLm5leHQoKTshZS5kb25lO2U9ZC5uZXh0KCkpe3ZhciBmPXpwKGUudmFsdWUpO2YmJihEcChmKSxiLnB1c2goZikpfXJldHVybiBifX1mdW5jdGlvbiBFcChhLGIsYyxkKXtjPWN8fHt9O3ZhciBlPXpvKGMuZG9tYWluLGMucGF0aCksZj1BcChiLGUpO2lmKGYpe3ZhciBnPUVvKGMsZCx2b2lkIDAsQnAuZ2V0KDUpKTt1byhhLGYsZyl9fWZ1bmN0aW9uIEZwKGEsYil7dmFyIGM9Yi5HYTtyZXR1cm4gdHlwZW9mIGM9PT1cImZ1bmN0aW9uXCI/YyhhKTpjLnRlc3QoYSl9XG5mdW5jdGlvbiBEcChhKXtmb3IodmFyIGI9bmEoT2JqZWN0LmtleXMoYSkpLGM9Yi5uZXh0KCksZD17fTshYy5kb25lO2Q9e3plOnZvaWQgMH0sYz1iLm5leHQoKSl7dmFyIGU9Yy52YWx1ZSxmPWFbZV07ZC56ZT11cFtlXTtkLnplP2QuemUuSmg/YVtlXT1BcnJheS5pc0FycmF5KGYpP2YuZmlsdGVyKGZ1bmN0aW9uKGcpe3JldHVybiBmdW5jdGlvbihrKXtyZXR1cm4gRnAoayxnLnplKX19KGQpKTp2b2lkIDA6dHlwZW9mIGY9PT1cInN0cmluZ1wiJiZGcChmLGQuemUpfHwoYVtlXT12b2lkIDApOmFbZV09dm9pZCAwfX07dmFyIEdwPS9eXFx3KyQvLEhwPS9eW1xcdy1dKyQvLElwPXt9LEpwPShJcC5hdz1cIl9hd1wiLElwLmRjPVwiX2RjXCIsSXAuZ2Y9XCJfZ2ZcIixJcC5ncD1cIl9ncFwiLElwLmdzPVwiX2dzXCIsSXAuaGE9XCJfaGFcIixJcC5hZz1cIl9hZ1wiLElwLmdiPVwiX2diXCIsSXApO2Z1bmN0aW9uIEtwKCl7cmV0dXJuW1wiYWRfc3RvcmFnZVwiLFwiYWRfdXNlcl9kYXRhXCJdfWZ1bmN0aW9uIExwKGEpe3JldHVybiFtYigxMil8fHdrKGEpfWZ1bmN0aW9uIE1wKGEsYil7ZnVuY3Rpb24gYygpe3ZhciBkPUxwKGIpO2QmJmEoKTtyZXR1cm4gZH1EayhmdW5jdGlvbigpe2MoKXx8RWsoYyxiKX0sYil9ZnVuY3Rpb24gTnAoYSl7cmV0dXJuIE9wKGEpLm1hcChmdW5jdGlvbihiKXtyZXR1cm4gYi5hYX0pfWZ1bmN0aW9uIFBwKGEpe3JldHVybiBRcChhKS5maWx0ZXIoZnVuY3Rpb24oYil7cmV0dXJuIGIuYWF9KS5tYXAoZnVuY3Rpb24oYil7cmV0dXJuIGIuYWF9KX1cbmZ1bmN0aW9uIFFwKGEpe3ZhciBiPVJwKGEucHJlZml4KSxjPVNwKFwiZ2JcIixiKSxkPVNwKFwiYWdcIixiKTtpZighZHx8IWMpcmV0dXJuW107dmFyIGU9ZnVuY3Rpb24oayl7cmV0dXJuIGZ1bmN0aW9uKG0pe20udHlwZT1rO3JldHVybiBtfX0sZj1PcChjKS5tYXAoZShcImdiXCIpKSxnPShtYig3KT9UcChkKTpbXSkubWFwKGUoXCJhZ1wiKSk7cmV0dXJuIGYuY29uY2F0KGcpLnNvcnQoZnVuY3Rpb24oayxtKXtyZXR1cm4gbS50aW1lc3RhbXAtay50aW1lc3RhbXB9KX1mdW5jdGlvbiBVcChhLGIsYyxkLGUsZil7dmFyIGc9cmIoYSxmdW5jdGlvbihrKXtyZXR1cm4gay5hYT09PWN9KTtnPyhnLnRpbWVzdGFtcDxkJiYoZy50aW1lc3RhbXA9ZCxnLk1qPWYpLGcubGFiZWxzPVZwKGcubGFiZWxzfHxbXSxlfHxbXSkpOmEucHVzaCh7dmVyc2lvbjpiLGFhOmMsdGltZXN0YW1wOmQsbGFiZWxzOmUsTWo6Zn0pfVxuZnVuY3Rpb24gVHAoYSl7Zm9yKHZhciBiPUNwKGEpfHxbXSxjPVtdLGQ9bmEoYiksZT1kLm5leHQoKTshZS5kb25lO2U9ZC5uZXh0KCkpe3ZhciBmPWUudmFsdWUsZz1mLGs9Zy5rLG09Zy5iLG49V3AoZik7aWYobil7dmFyIHA9dm9pZCAwO21iKDEzKSYmKHA9Zi51KTtVcChjLFwiMlwiLGssbixtfHxbXSxwKX19cmV0dXJuIGMuc29ydChmdW5jdGlvbihxLHIpe3JldHVybiByLnRpbWVzdGFtcC1xLnRpbWVzdGFtcH0pfWZ1bmN0aW9uIE9wKGEpe2Zvcih2YXIgYj1bXSxjPWpvKGEsRS5jb29raWUsdm9pZCAwLEtwKCkpLGQ9bmEoYyksZT1kLm5leHQoKTshZS5kb25lO2U9ZC5uZXh0KCkpe3ZhciBmPVhwKGUudmFsdWUpO2lmKGYhPW51bGwpe3ZhciBnPWY7VXAoYixnLnZlcnNpb24sZy5hYSxnLnRpbWVzdGFtcCxnLmxhYmVscyl9fWIuc29ydChmdW5jdGlvbihrLG0pe3JldHVybiBtLnRpbWVzdGFtcC1rLnRpbWVzdGFtcH0pO3JldHVybiBZcChiKX1cbmZ1bmN0aW9uIFZwKGEsYil7aWYoIWEubGVuZ3RoKXJldHVybiBiO2lmKCFiLmxlbmd0aClyZXR1cm4gYTt2YXIgYz17fTtyZXR1cm4gYS5jb25jYXQoYikuZmlsdGVyKGZ1bmN0aW9uKGQpe3JldHVybiBjLmhhc093blByb3BlcnR5KGQpPyExOmNbZF09ITB9KX1mdW5jdGlvbiBScChhKXtyZXR1cm4gYSYmdHlwZW9mIGE9PT1cInN0cmluZ1wiJiZhLm1hdGNoKEdwKT9hOlwiX2djbFwifVxuZnVuY3Rpb24gWnAoYSxiKXt2YXIgYz1tYig3KSxkPWFqKGEpLGU9VmkoZCxcInF1ZXJ5XCIsITEsdm9pZCAwLFwiZ2NsaWRcIiksZj1WaShkLFwicXVlcnlcIiwhMSx2b2lkIDAsXCJnY2xzcmNcIiksZz1WaShkLFwicXVlcnlcIiwhMSx2b2lkIDAsXCJ3YnJhaWRcIik7Zz1OYihnKTt2YXIgaztjJiYoaz1WaShkLFwicXVlcnlcIiwhMSx2b2lkIDAsXCJnYnJhaWRcIikpO3ZhciBtPVZpKGQsXCJxdWVyeVwiLCExLHZvaWQgMCxcImdhZF9zb3VyY2VcIiksbj1WaShkLFwicXVlcnlcIiwhMSx2b2lkIDAsXCJkY2xpZFwiKTtpZihiJiYoIWV8fCFmfHwhZ3x8YyYmIWspKXt2YXIgcD1kLmhhc2gucmVwbGFjZShcIiNcIixcIlwiKTtlPWV8fFVpKHAsXCJnY2xpZFwiLCExKTtmPWZ8fFVpKHAsXCJnY2xzcmNcIiwhMSk7Zz1nfHxVaShwLFwid2JyYWlkXCIsITEpO2MmJihrPWt8fFVpKHAsXCJnYnJhaWRcIiwhMSkpO209bXx8VWkocCxcImdhZF9zb3VyY2VcIiwhMSl9cmV0dXJuICRwKGUsZixuLGcsayxtKX1cbmZ1bmN0aW9uIGFxKCl7cmV0dXJuIFpwKEQubG9jYXRpb24uaHJlZiwhMCl9XG5mdW5jdGlvbiAkcChhLGIsYyxkLGUsZil7dmFyIGc9e30saz1mdW5jdGlvbihtLG4pe2dbbl18fChnW25dPVtdKTtnW25dLnB1c2gobSl9O2cuZ2NsaWQ9YTtnLmdjbHNyYz1iO2cuZGNsaWQ9YztpZihhIT09dm9pZCAwJiZhLm1hdGNoKEhwKSlzd2l0Y2goYil7Y2FzZSB2b2lkIDA6ayhhLFwiYXdcIik7YnJlYWs7Y2FzZSBcImF3LmRzXCI6ayhhLFwiYXdcIik7ayhhLFwiZGNcIik7YnJlYWs7Y2FzZSBcImRzXCI6ayhhLFwiZGNcIik7YnJlYWs7Y2FzZSBcIjNwLmRzXCI6ayhhLFwiZGNcIik7YnJlYWs7Y2FzZSBcImdmXCI6ayhhLFwiZ2ZcIik7YnJlYWs7Y2FzZSBcImhhXCI6ayhhLFwiaGFcIil9YyYmayhjLFwiZGNcIik7ZCE9PXZvaWQgMCYmSHAudGVzdChkKSYmKGcud2JyYWlkPWQsayhkLFwiZ2JcIikpO21iKDcpJiZlIT09dm9pZCAwJiZIcC50ZXN0KGUpJiYoZy5nYnJhaWQ9ZSxrKGUsXCJhZ1wiKSk7ZiE9PXZvaWQgMCYmSHAudGVzdChmKSYmKGcuZ2FkX3NvdXJjZT1mLGsoZixcImdzXCIpKTtyZXR1cm4gZ31cbmZ1bmN0aW9uIGJxKGEpe3ZhciBiPWFxKCk7aWYobWIoNikpe2Zvcih2YXIgYz0hMCxkPW5hKE9iamVjdC5rZXlzKGIpKSxlPWQubmV4dCgpOyFlLmRvbmU7ZT1kLm5leHQoKSlpZihiW2UudmFsdWVdIT09dm9pZCAwKXtjPSExO2JyZWFrfWMmJihiPVpwKEQuZG9jdW1lbnQucmVmZXJyZXIsITEpLG1iKDE0KSYmKGIuZ2FkX3NvdXJjZT12b2lkIDApKX1jcShiLCExLGEpfVxuZnVuY3Rpb24gY3EoYSxiLGMsZCxlKXtjPWN8fHt9O2U9ZXx8W107dmFyIGY9UnAoYy5wcmVmaXgpLGc9ZHx8QmIoKSxrPU1hdGgucm91bmQoZy8xRTMpLG09S3AoKSxuPSExLHA9ITEscT1mdW5jdGlvbigpe2lmKExwKG0pKXt2YXIgcj1FbyhjLGcsITApO3IuQWI9bTtmb3IodmFyIHQ9ZnVuY3Rpb24oRixPKXt2YXIgTj1TcChGLGYpO04mJih1byhOLE8sciksRiE9PVwiZ2JcIiYmKG49ITApKX0sdT1mdW5jdGlvbihGKXt2YXIgTz1bXCJHQ0xcIixrLEZdO2UubGVuZ3RoPjAmJk8ucHVzaChlLmpvaW4oXCIuXCIpKTtyZXR1cm4gTy5qb2luKFwiLlwiKX0sdj1uYShbXCJhd1wiLFwiZGNcIixcImdmXCIsXCJoYVwiLFwiZ3BcIl0pLHc9di5uZXh0KCk7IXcuZG9uZTt3PXYubmV4dCgpKXt2YXIgeD13LnZhbHVlO2FbeF0mJnQoeCx1KGFbeF1bMF0pKX1pZighbiYmYS5nYil7dmFyIHk9YS5nYlswXSxBPVNwKFwiZ2JcIixmKTshYiYmT3AoQSkuc29tZShmdW5jdGlvbihGKXtyZXR1cm4gRi5hYT09PXkmJkYubGFiZWxzJiZcbkYubGFiZWxzLmxlbmd0aD4wfSl8fHQoXCJnYlwiLHUoeSkpfX1pZighcCYmbWIoNykmJmEuZ2JyYWlkJiZMcChcImFkX3N0b3JhZ2VcIikmJihwPSEwLCFuKSl7dmFyIEI9YS5nYnJhaWQsQz1TcChcImFnXCIsZik7aWYoYnx8IShtYig3KT9UcChDKTpbXSkuc29tZShmdW5jdGlvbihGKXtyZXR1cm4gRi5hYT09PUImJkYubGFiZWxzJiZGLmxhYmVscy5sZW5ndGg+MH0pKXt2YXIgSD17fSxJPShILms9QixILmk9XCJcIitrLEguYj1lLEgpO0VwKEMsSSxjLGcpfX1kcShhLGYsZyxjKX07RGsoZnVuY3Rpb24oKXtxKCk7THAobSl8fEVrKHEsbSl9LG0pfVxuZnVuY3Rpb24gZHEoYSxiLGMsZCl7aWYoYS5nYWRfc291cmNlIT09dm9pZCAwJiZMcChcImFkX3N0b3JhZ2VcIikpe3ZhciBlPWEuZ2FkX3NvdXJjZSxmPVNwKFwiZ3NcIixiKTtpZihmKXt2YXIgZz1NYXRoLnJvdW5kKChCYigpLShPYygpfHwwKSkvMUUzKSxrO2lmKG1iKDEzKSl7dmFyIG0sbj1TdHJpbmcscD1ELmxvY2F0aW9uLmhvc3RuYW1lLHE9RC5sb2NhdGlvbi5wYXRobmFtZSxyPXA9ZGoocCk7ci5zcGxpdChcIi5cIikubGVuZ3RoPjImJihyPXIucmVwbGFjZSgvXih3d3dbMC05XSp8d2VifGZ0cHx3YXB8aG9tZXxtfHd8YW1wfG1vYmlsZSlcXC4vLFwiXCIpKTtwPXI7cT1kaihxKTt2YXIgdD1xLnNwbGl0KFwiO1wiKVswXTt0PXQucmVwbGFjZSgvXFwvKGFyfHNscHx3ZWJ8aW5kZXgpP1xcLz8kLyxcIlwiKTttPW4oaG8oKFwiXCIrcCt0KS50b0xvd2VyQ2FzZSgpKSk7dmFyIHU9e307az0odS5rPWUsdS5pPVwiXCIrZyx1LnU9bSx1KX1lbHNle3ZhciB2PXt9O2s9KHYuaz1lLHYuaT1cIlwiK2csdil9RXAoZixrLFxuZCxjKX19fWZ1bmN0aW9uIGVxKGEsYil7dmFyIGM9VW8oITApO01wKGZ1bmN0aW9uKCl7Zm9yKHZhciBkPVJwKGIucHJlZml4KSxlPTA7ZTxhLmxlbmd0aDsrK2Upe3ZhciBmPWFbZV07aWYoSnBbZl0hPT12b2lkIDApe3ZhciBnPVNwKGYsZCksaz1jW2ddO2lmKGspe3ZhciBtPU1hdGgubWluKGZxKGspLEJiKCkpLG47Yjp7Zm9yKHZhciBwPW0scT1qbyhnLEUuY29va2llLHZvaWQgMCxLcCgpKSxyPTA7cjxxLmxlbmd0aDsrK3IpaWYoZnEocVtyXSk+cCl7bj0hMDticmVhayBifW49ITF9aWYoIW4pe3ZhciB0PUVvKGIsbSwhMCk7dC5BYj1LcCgpO3VvKGcsayx0KX19fX1jcSgkcChjLmdjbGlkLGMuZ2Nsc3JjKSwhMSxiKX0sS3AoKSl9XG5mdW5jdGlvbiBncShhKXt2YXIgYj1bXTttYig3KSYmYi5wdXNoKFwiYWdcIik7aWYoYi5sZW5ndGghPT0wKXt2YXIgYz1VbyghMCksZD1ScChhLnByZWZpeCk7TXAoZnVuY3Rpb24oKXtmb3IodmFyIGU9MDtlPGIubGVuZ3RoOysrZSl7dmFyIGY9U3AoYltlXSxkKTtpZihmKXt2YXIgZz1jW2ZdO2lmKGcpe3ZhciBrPXpwKGcpO2lmKGspe3ZhciBtPVdwKGspO218fChtPUJiKCkpO3ZhciBuO2E6e2Zvcih2YXIgcD1tLHE9Q3AoZikscj0wO3I8cS5sZW5ndGg7KytyKWlmKFdwKHFbcl0pPnApe249ITA7YnJlYWsgYX1uPSExfWlmKG4pYnJlYWs7ay5pPVwiXCIrTWF0aC5yb3VuZChtLzFFMyk7RXAoZixrLGEsbSl9fX19fSxbXCJhZF9zdG9yYWdlXCJdKX19ZnVuY3Rpb24gU3AoYSxiKXt2YXIgYz1KcFthXTtpZihjIT09dm9pZCAwKXJldHVybiBiK2N9XG5mdW5jdGlvbiBmcShhKXtyZXR1cm4gaHEoYS5zcGxpdChcIi5cIikpLmxlbmd0aCE9PTA/KE51bWJlcihhLnNwbGl0KFwiLlwiKVsxXSl8fDApKjFFMzowfWZ1bmN0aW9uIFdwKGEpe3JldHVybiBhPyhOdW1iZXIoYS5pKXx8MCkqMUUzOjB9ZnVuY3Rpb24gWHAoYSl7dmFyIGI9aHEoYS5zcGxpdChcIi5cIikpO3JldHVybiBiLmxlbmd0aD09PTA/bnVsbDp7dmVyc2lvbjpiWzBdLGFhOmJbMl0sdGltZXN0YW1wOihOdW1iZXIoYlsxXSl8fDApKjFFMyxsYWJlbHM6Yi5zbGljZSgzKX19ZnVuY3Rpb24gaHEoYSl7cmV0dXJuIGEubGVuZ3RoPDN8fGFbMF0hPT1cIkdDTFwiJiZhWzBdIT09XCIxXCJ8fCEvXlxcZCskLy50ZXN0KGFbMV0pfHwhSHAudGVzdChhWzJdKT9bXTphfVxuZnVuY3Rpb24gaXEoYSxiLGMsZCxlKXtpZihBcnJheS5pc0FycmF5KGIpJiZpbyhEKSl7dmFyIGY9UnAoZSksZz1mdW5jdGlvbigpe2Zvcih2YXIgaz17fSxtPTA7bTxhLmxlbmd0aDsrK20pe3ZhciBuPVNwKGFbbV0sZik7aWYobil7dmFyIHA9am8obixFLmNvb2tpZSx2b2lkIDAsS3AoKSk7cC5sZW5ndGgmJihrW25dPXAuc29ydCgpW3AubGVuZ3RoLTFdKX19cmV0dXJuIGt9O01wKGZ1bmN0aW9uKCl7YXAoZyxiLGMsZCl9LEtwKCkpfX1cbmZ1bmN0aW9uIGpxKGEsYixjLGQpe2lmKEFycmF5LmlzQXJyYXkoYSkmJmlvKEQpKXt2YXIgZT1bXTttYig3KSYmZS5wdXNoKFwiYWdcIik7aWYoZS5sZW5ndGghPT0wKXt2YXIgZj1ScChkKSxnPWZ1bmN0aW9uKCl7Zm9yKHZhciBrPXt9LG09MDttPGUubGVuZ3RoOysrbSl7dmFyIG49U3AoZVttXSxmKTtpZighbilyZXR1cm57fTt2YXIgcD1DcChuKTtpZihwLmxlbmd0aCl7dmFyIHE9cC5zb3J0KGZ1bmN0aW9uKHIsdCl7cmV0dXJuIFdwKHQpLVdwKHIpfSlbMF07a1tuXT1BcChxKX19cmV0dXJuIGt9O01wKGZ1bmN0aW9uKCl7YXAoZyxhLGIsYyl9LFtcImFkX3N0b3JhZ2VcIl0pfX19ZnVuY3Rpb24gWXAoYSl7cmV0dXJuIGEuZmlsdGVyKGZ1bmN0aW9uKGIpe3JldHVybiBIcC50ZXN0KGIuYWEpfSl9XG5mdW5jdGlvbiBrcShhLGIpe2lmKGlvKEQpKXtmb3IodmFyIGM9UnAoYi5wcmVmaXgpLGQ9e30sZT0wO2U8YS5sZW5ndGg7ZSsrKUpwW2FbZV1dJiYoZFthW2VdXT1KcFthW2VdXSk7TXAoZnVuY3Rpb24oKXt6KGQsZnVuY3Rpb24oZixnKXt2YXIgaz1qbyhjK2csRS5jb29raWUsdm9pZCAwLEtwKCkpO2suc29ydChmdW5jdGlvbih0LHUpe3JldHVybiBmcSh1KS1mcSh0KX0pO2lmKGsubGVuZ3RoKXt2YXIgbT1rWzBdLG49ZnEobSkscD1ocShtLnNwbGl0KFwiLlwiKSkubGVuZ3RoIT09MD9tLnNwbGl0KFwiLlwiKS5zbGljZSgzKTpbXSxxPXt9LHI7cj1ocShtLnNwbGl0KFwiLlwiKSkubGVuZ3RoIT09MD9tLnNwbGl0KFwiLlwiKVsyXTp2b2lkIDA7cVtmXT1bcl07Y3EocSwhMCxiLG4scCl9fSl9LEtwKCkpfX1cbmZ1bmN0aW9uIGxxKGEpe3ZhciBiPVtdLGM9W107bWIoNykmJihiLnB1c2goXCJhZ1wiKSxjLnB1c2goXCJnYnJhaWRcIikpO2IubGVuZ3RoIT09MCYmTXAoZnVuY3Rpb24oKXtmb3IodmFyIGQ9UnAoYS5wcmVmaXgpLGU9MDtlPGIubGVuZ3RoOysrZSl7dmFyIGY9U3AoYltlXSxkKTtpZighZilicmVhazt2YXIgZz1DcChmKTtpZihnLmxlbmd0aCl7dmFyIGs9Zy5zb3J0KGZ1bmN0aW9uKHEscil7cmV0dXJuIFdwKHIpLVdwKHEpfSlbMF0sbT1XcChrKSxuPWsuYixwPXt9O3BbY1tlXV09ay5rO2NxKHAsITAsYSxtLG4pfX19LFtcImFkX3N0b3JhZ2VcIl0pfWZ1bmN0aW9uIG1xKGEsYil7Zm9yKHZhciBjPTA7YzxiLmxlbmd0aDsrK2MpaWYoYVtiW2NdXSlyZXR1cm4hMDtyZXR1cm4hMX1cbmZ1bmN0aW9uIG5xKGEpe2Z1bmN0aW9uIGIoZSxmLGcpe2cmJihlW2ZdPWcpfWlmKEFrKCkpe3ZhciBjPWFxKCk7aWYobXEoYyxhKSl7dmFyIGQ9e307YihkLFwiZ2NsaWRcIixjLmdjbGlkKTtiKGQsXCJkY2xpZFwiLGMuZGNsaWQpO2IoZCxcImdjbHNyY1wiLGMuZ2Nsc3JjKTtiKGQsXCJ3YnJhaWRcIixjLndicmFpZCk7bWIoNykmJmIoZCxcImdicmFpZFwiLGMuZ2JyYWlkKTticChmdW5jdGlvbigpe3JldHVybiBkfSwzKTticChmdW5jdGlvbigpe3ZhciBlPXt9O3JldHVybiBlLl91cD1cIjFcIixlfSwxKX19fVxuZnVuY3Rpb24gb3EoYSl7aWYoIW1iKDEpKXJldHVybiBudWxsO3ZhciBiPVVvKCEwKS5nYWRfc291cmNlO2lmKGIhPW51bGwpcmV0dXJuIEQubG9jYXRpb24uaGFzaD1cIlwiLGI7aWYobWIoMikpe3ZhciBjPWFqKEQubG9jYXRpb24uaHJlZik7Yj1WaShjLFwicXVlcnlcIiwhMSx2b2lkIDAsXCJnYWRfc291cmNlXCIpO2lmKGIhPW51bGwpcmV0dXJuIGI7dmFyIGQ9YXEoKTtpZihtcShkLGEpKXJldHVyblwiMFwifXJldHVybiBudWxsfWZ1bmN0aW9uIHBxKGEpe3ZhciBiPW9xKGEpO2IhPW51bGwmJmJwKGZ1bmN0aW9uKCl7dmFyIGM9e307cmV0dXJuIGMuZ2FkX3NvdXJjZT1iLGN9LDQpfVxuZnVuY3Rpb24gcXEoYSxiLGMpe3ZhciBkPVtdO2lmKGIubGVuZ3RoPT09MClyZXR1cm4gZDtmb3IodmFyIGU9e30sZj0wO2Y8Yi5sZW5ndGg7ZisrKXt2YXIgZz1iW2ZdLGs9Zy50eXBlP2cudHlwZTpcImdjbFwiOyhnLmxhYmVsc3x8W10pLmluZGV4T2YoYyk9PT0tMT8oYS5wdXNoKDApLGVba118fGQucHVzaChnKSk6YS5wdXNoKDEpO2Vba109ITB9cmV0dXJuIGR9ZnVuY3Rpb24gcnEoYSxiLGMsZCl7dmFyIGU9W107Yz1jfHx7fTtpZighTHAoS3AoKSkpcmV0dXJuIGU7dmFyIGY9T3AoYSksZz1xcShlLGYsYik7aWYoZy5sZW5ndGgmJiFkKWZvcih2YXIgaz1uYShnKSxtPWsubmV4dCgpOyFtLmRvbmU7bT1rLm5leHQoKSl7dmFyIG49bS52YWx1ZSxwPW4udGltZXN0YW1wLHE9W24udmVyc2lvbixNYXRoLnJvdW5kKHAvMUUzKSxuLmFhXS5jb25jYXQobi5sYWJlbHN8fFtdLFtiXSkuam9pbihcIi5cIikscj1FbyhjLHAsITApO3IuQWI9S3AoKTt1byhhLHEscil9cmV0dXJuIGV9XG5mdW5jdGlvbiBzcShhLGIpe3ZhciBjPVtdO2I9Ynx8e307dmFyIGQ9UXAoYiksZT1xcShjLGQsYSk7aWYoZS5sZW5ndGgpZm9yKHZhciBmPW5hKGUpLGc9Zi5uZXh0KCk7IWcuZG9uZTtnPWYubmV4dCgpKXt2YXIgaz1nLnZhbHVlLG09UnAoYi5wcmVmaXgpLG49U3Aoay50eXBlLG0pO2lmKCFuKWJyZWFrO3ZhciBwPWsscT1wLnZlcnNpb24scj1wLmFhLHQ9cC5sYWJlbHMsdT1wLnRpbWVzdGFtcCx2PU1hdGgucm91bmQodS8xRTMpO2lmKGsudHlwZT09PVwiYWdcIil7dmFyIHc9e30seD0ody5rPXIsdy5pPVwiXCIrdix3LmI9KHR8fFtdKS5jb25jYXQoW2FdKSx3KTtFcChuLHgsYix1KX1lbHNlIGlmKGsudHlwZT09PVwiZ2JcIil7dmFyIHk9W3EsdixyXS5jb25jYXQodHx8W10sW2FdKS5qb2luKFwiLlwiKSxBPUVvKGIsdSwhMCk7QS5BYj1LcCgpO3VvKG4seSxBKX19cmV0dXJuIGN9XG5mdW5jdGlvbiB0cShhLGIpe3ZhciBjPVJwKGIpLGQ9U3AoYSxjKTtpZighZClyZXR1cm4gMDt2YXIgZTtlPWE9PT1cImFnXCI/bWIoNyk/VHAoZCk6W106T3AoZCk7Zm9yKHZhciBmPTAsZz0wO2c8ZS5sZW5ndGg7ZysrKWY9TWF0aC5tYXgoZixlW2ddLnRpbWVzdGFtcCk7cmV0dXJuIGZ9ZnVuY3Rpb24gdXEoYSl7Zm9yKHZhciBiPTAsYz1uYShPYmplY3Qua2V5cyhhKSksZD1jLm5leHQoKTshZC5kb25lO2Q9Yy5uZXh0KCkpZm9yKHZhciBlPWFbZC52YWx1ZV0sZj0wO2Y8ZS5sZW5ndGg7ZisrKWI9TWF0aC5tYXgoYixOdW1iZXIoZVtmXS50aW1lc3RhbXApKTtyZXR1cm4gYn1mdW5jdGlvbiB2cShhLGIpe3ZhciBjPU1hdGgubWF4KHRxKFwiYXdcIixhKSx1cShMcChLcCgpKT9zcCgpOnt9KSksZD1NYXRoLm1heCh0cShcImdiXCIsYSksdXEoTHAoS3AoKSk/c3AoXCJfZ2FjX2diXCIsITApOnt9KSk7bWIoNykmJmImJihkPU1hdGgubWF4KGQsdHEoXCJhZ1wiLGEpKSk7cmV0dXJuIGQ+Y307ZnVuY3Rpb24gTnEoKXtpaS5kZWR1cGVfZ2NsaWR8fChpaS5kZWR1cGVfZ2NsaWQ9Qm8oKSk7cmV0dXJuIGlpLmRlZHVwZV9nY2xpZH07dmFyIE9xPS9eKHd3d1xcLik/Z29vZ2xlKFxcLmNvbT8pPyhcXC5bYS16XXsyfXQ/KT8kLyxQcT0vXnd3dy5nb29nbGVhZHNlcnZpY2VzLmNvbSQvO2Z1bmN0aW9uIFFxKGEpe2F8fChhPVJxKCkpO3JldHVybiBhLmZuPyExOmEuUmx8fGEuU2x8fGEuVmx8fGEuVGx8fGEub2h8fGEuRGN8fGEuRmx8fGEuVWx8fGEuSmw/ITA6ITF9XG5mdW5jdGlvbiBScSgpe3ZhciBhPXt9LGI9VW8oITApO2EuZm49ISFiLl91cDt2YXIgYz1hcSgpO2EuUmw9Yy5hdyE9PXZvaWQgMDthLlNsPWMuZGMhPT12b2lkIDA7YS5WbD1jLndicmFpZCE9PXZvaWQgMDthLlRsPWMuZ2JyYWlkIT09dm9pZCAwO2EuVWw9USg3OSk/Yy5nY2xzcmM9PT1cImF3LmRzXCI6ITE7dmFyIGQ9YWooRC5sb2NhdGlvbi5ocmVmKSxlPVZpKGQsXCJxdWVyeVwiLCExLHZvaWQgMCxcImdhZFwiKTthLm9oPWUhPT12b2lkIDA7aWYoIWEub2gpe3ZhciBmPWQuaGFzaC5yZXBsYWNlKFwiI1wiLFwiXCIpLGc9VWkoZixcImdhZFwiLCExKTthLm9oPWchPT12b2lkIDB9aWYoUSg4MikpYS5EYz1BcSgpO2Vsc2UgaWYoYS5EYz1WaShkLFwicXVlcnlcIiwhMSx2b2lkIDAsXCJnYWRfc291cmNlXCIpLGEuRGM9PT12b2lkIDApe3ZhciBrPWQuaGFzaC5yZXBsYWNlKFwiI1wiLFwiXCIpLG09VWkoayxcImdhZF9zb3VyY2VcIiwhMSk7YS5EYz1tfXZhciBuPUUucmVmZXJyZXI/VmkoYWooRS5yZWZlcnJlciksXCJob3N0XCIpOlxuXCJcIjthLkpsPU9xLnRlc3Qobik7YS5GbD1QcS50ZXN0KG4pO3JldHVybiBhfTt2YXIgU3E9UmVnRXhwKFwiXlVBLVxcXFxkKy1cXFxcZCslM0FbXFxcXHctXSsoPzolMkNbXFxcXHctXSspKig/OiUzQlVBLVxcXFxkKy1cXFxcZCslM0FbXFxcXHctXSsoPzolMkNbXFxcXHctXSspKikqJFwiKSxUcT0vXn4/W1xcdy1dKyg/OlxcLn4/W1xcdy1dKykqJC8sVXE9L15cXGQrXFwuZmxzXFwuZG91YmxlY2xpY2tcXC5uZXQkLyxWcT0vO2dhYz0oW147P10rKS8sV3E9LztnYWNnYj0oW147P10rKS87XG5mdW5jdGlvbiBYcShhLGIpe2lmKFVxLnRlc3QoRS5sb2NhdGlvbi5ob3N0KSl7dmFyIGM9RS5sb2NhdGlvbi5ocmVmLm1hdGNoKGIpO3JldHVybiBjJiZjLmxlbmd0aD09PTImJmNbMV0ubWF0Y2goU3EpP2RlY29kZVVSSUNvbXBvbmVudChjWzFdKTpcIlwifWZvcih2YXIgZD1bXSxlPW5hKE9iamVjdC5rZXlzKGEpKSxmPWUubmV4dCgpOyFmLmRvbmU7Zj1lLm5leHQoKSl7Zm9yKHZhciBnPWYudmFsdWUsaz1bXSxtPWFbZ10sbj0wO248bS5sZW5ndGg7bisrKWsucHVzaChtW25dLmFhKTtkLnB1c2goZytcIjpcIitrLmpvaW4oXCIsXCIpKX1yZXR1cm4gZC5sZW5ndGg+MD9kLmpvaW4oXCI7XCIpOlwiXCJ9XG5mdW5jdGlvbiBZcShhLGIsYyl7Zm9yKHZhciBkPUxwKEtwKCkpP3NwKFwiX2dhY19nYlwiLCEwKTp7fSxlPVtdLGY9ITEsZz1uYShPYmplY3Qua2V5cyhkKSksaz1nLm5leHQoKTshay5kb25lO2s9Zy5uZXh0KCkpe3ZhciBtPWsudmFsdWUsbj1ycShcIl9nYWNfZ2JfXCIrbSxhLGIsYyk7Zj1mfHxuLmxlbmd0aCE9PTAmJm4uc29tZShmdW5jdGlvbihwKXtyZXR1cm4gcD09PTF9KTtlLnB1c2gobStcIjpcIituLmpvaW4oXCIsXCIpKX1yZXR1cm57RWw6Zj9lLmpvaW4oXCI7XCIpOlwiXCIsRGw6WHEoZCxXcSl9fWZ1bmN0aW9uIFpxKGEpe3ZhciBiPUUubG9jYXRpb24uaHJlZi5tYXRjaChuZXcgUmVnRXhwKFwiO1wiK2ErXCI9KFteOz9dKylcIikpO3JldHVybiBiJiZiLmxlbmd0aD09PTImJmJbMV0ubWF0Y2goVHEpP2JbMV06dm9pZCAwfVxuZnVuY3Rpb24gJHEoYSl7dmFyIGI9bWIoMTMpLGM9e30sZCxlLGY7VXEudGVzdChFLmxvY2F0aW9uLmhvc3QpJiYoZD1acShcImdjbGdzXCIpLGU9WnEoXCJnY2xzdFwiKSxiJiYoZj1acShcImdjbGxwXCIpKSk7aWYoZCYmZSYmKCFifHxmKSljLkZqPWQsYy5Iaj1lLGMuR2o9ZjtlbHNle3ZhciBnPUJiKCksaz1UcCgoYXx8XCJfZ2NsXCIpK1wiX2dzXCIpLG09ay5tYXAoZnVuY3Rpb24ocSl7cmV0dXJuIHEuYWF9KSxuPWsubWFwKGZ1bmN0aW9uKHEpe3JldHVybiBnLXEudGltZXN0YW1wfSkscD1bXTtiJiYocD1rLm1hcChmdW5jdGlvbihxKXtyZXR1cm4gcS5Nan0pKTttLmxlbmd0aD4wJiZuLmxlbmd0aD4wJiYoIWJ8fHAubGVuZ3RoPjApJiYoYy5Gaj1tLmpvaW4oXCIuXCIpLGMuSGo9bi5qb2luKFwiLlwiKSxiJiZwLmxlbmd0aD4wJiYoYy5Haj1wLmpvaW4oXCIuXCIpKSl9cmV0dXJuIGN9XG5mdW5jdGlvbiBhcihhLGIsYyl7aWYoVXEudGVzdChFLmxvY2F0aW9uLmhvc3QpKXt2YXIgZD1acShjKTtpZihkKXJldHVyblt7YWE6ZH1dfWVsc2V7aWYoYj09PVwiZ2NsaWRcIilyZXR1cm4gT3AoKGF8fFwiX2djbFwiKStcIl9hd1wiKTtpZihiPT09XCJ3YnJhaWRcIilyZXR1cm4gT3AoKGF8fFwiX2djbFwiKStcIl9nYlwiKTtpZihiPT09XCJicmFpZHNcIilyZXR1cm4gUXAoe3ByZWZpeDphfSl9cmV0dXJuW119ZnVuY3Rpb24gYnIoYSl7cmV0dXJuIGFyKGEsXCJnY2xpZFwiLFwiZ2NsYXdcIikubWFwKGZ1bmN0aW9uKGIpe3JldHVybiBiLmFhfSkuam9pbihcIi5cIil9ZnVuY3Rpb24gY3IoYSl7cmV0dXJuIGFyKGEsXCJ3YnJhaWRcIixcImdjbGdiXCIpLm1hcChmdW5jdGlvbihiKXtyZXR1cm4gYi5hYX0pLmpvaW4oXCIuXCIpfWZ1bmN0aW9uIGRyKGEpe3JldHVybiBhcihhLFwiYnJhaWRzXCIsXCJnY2xnYlwiKS5tYXAoZnVuY3Rpb24oYil7cmV0dXJuIGIuYWF9KS5qb2luKFwiLlwiKX1cbmZ1bmN0aW9uIGVyKGEsYil7cmV0dXJuIFVxLnRlc3QoRS5sb2NhdGlvbi5ob3N0KT8hKFpxKFwiZ2NsYXdcIil8fFpxKFwiZ2FjXCIpKTp2cShhLGIpfWZ1bmN0aW9uIGZyKGEsYixjKXt2YXIgZDtkPWM/c3EoYSxiKTpycSgoYiYmYi5wcmVmaXh8fFwiX2djbFwiKStcIl9nYlwiLGEsYik7cmV0dXJuIGQubGVuZ3RoPT09MHx8ZC5ldmVyeShmdW5jdGlvbihlKXtyZXR1cm4gZT09PTB9KT9cIlwiOmQuam9pbihcIi5cIil9O2Z1bmN0aW9uIGdyKCl7dmFyIGE9RC5fX3VzcGFwaTtpZihvYihhKSl7dmFyIGI9XCJcIjt0cnl7YShcImdldFVTUERhdGFcIiwxLGZ1bmN0aW9uKGMsZCl7aWYoZCYmYyl7dmFyIGU9Yy51c3BTdHJpbmc7ZSYmUmVnRXhwKFwiXltcXFxcZGEtekEtWi1dezEsMjB9JFwiKS50ZXN0KGUpJiYoYj1lKX19KX1jYXRjaChjKXt9cmV0dXJuIGJ9fTtmdW5jdGlvbiBwcihhKXt2YXIgYj1VKGEubSxULmcuSWIpLGM9VShhLm0sVC5nLlZiKTtiJiYhYz8oYS5ldmVudE5hbWUhPT1ULmcuYmEmJmEuZXZlbnROYW1lIT09VC5nLk1jJiZNKDEzMSksYS5pc0Fib3J0ZWQ9ITApOiFiJiZjJiYoTSgxMzIpLGEuaXNBYm9ydGVkPSEwKX1mdW5jdGlvbiBxcihhKXt2YXIgYj1XKFQuZy5QKT9paS5wc2NkbDpcImRlbmllZFwiO2IhPW51bGwmJihhLm9bVC5nLmVmXT1iKX1mdW5jdGlvbiBycihhKXt2YXIgYj0kbSghMCk7YS5vW1QuZy5IYl09Yn1mdW5jdGlvbiBzcihhKXtWbigpJiYoYS5vW1QuZy54Y109MSl9XG5mdW5jdGlvbiBqcigpe3ZhciBhPUUudGl0bGU7aWYoYT09PXZvaWQgMHx8YT09PVwiXCIpcmV0dXJuXCJcIjt2YXIgYj1mdW5jdGlvbihkKXt0cnl7cmV0dXJuIGRlY29kZVVSSUNvbXBvbmVudChkKSwhMH1jYXRjaChlKXtyZXR1cm4hMX19O2E9ZW5jb2RlVVJJQ29tcG9uZW50KGEpO2Zvcih2YXIgYz0yNTY7Yz4wJiYhYihhLnN1YnN0cmluZygwLGMpKTspYy0tO3JldHVybiBkZWNvZGVVUklDb21wb25lbnQoYS5zdWJzdHJpbmcoMCxjKSl9ZnVuY3Rpb24gdHIoYSl7aWYoUSgxMykpe3ZhciBiPVUoYS5tLFQuZy5NYSk7YS5vW1QuZy5pZV18fChhLm9bVC5nLmllXT17fSk7YS5vW1QuZy5pZV0uY2U9Yn19O2Z1bmN0aW9uIEFyKGEsYixjLGQpe3ZhciBlPXljKCksZjtpZihlPT09MSlhOnt2YXIgZz11aTtnPWcudG9Mb3dlckNhc2UoKTtmb3IodmFyIGs9XCJodHRwczovL1wiK2csbT1cImh0dHA6Ly9cIitnLG49MSxwPUUuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCJzY3JpcHRcIikscT0wO3E8cC5sZW5ndGgmJnE8MTAwO3ErKyl7dmFyIHI9cFtxXS5zcmM7aWYocil7cj1yLnRvTG93ZXJDYXNlKCk7aWYoci5pbmRleE9mKG0pPT09MCl7Zj0zO2JyZWFrIGF9bj09PTEmJnIuaW5kZXhPZihrKT09PTAmJihuPTIpfX1mPW59ZWxzZSBmPWU7cmV0dXJuKGY9PT0yfHxkfHxcImh0dHA6XCIhPUQubG9jYXRpb24ucHJvdG9jb2w/YTpiKStjfTtcbnZhciBCcj1mdW5jdGlvbihhLGIpe1EoNSkmJihhLmRtYT1NbigpLE5uKCkmJihhLmRtYUNwcz1MbigpKSxFbihiKT9hLm5wYT1cIjBcIjphLm5wYT1cIjFcIil9LERyPWZ1bmN0aW9uKGEsYixjKXtpZihEW2EuZnVuY3Rpb25OYW1lXSlyZXR1cm4gYi5CaCYmRyhiLkJoKSxEW2EuZnVuY3Rpb25OYW1lXTt2YXIgZD1DcigpO0RbYS5mdW5jdGlvbk5hbWVdPWQ7aWYoYS5HZilmb3IodmFyIGU9MDtlPGEuR2YubGVuZ3RoO2UrKylEW2EuR2ZbZV1dPURbYS5HZltlXV18fENyKCk7YS5MZiYmRFthLkxmXT09PXZvaWQgMCYmKERbYS5MZl09Yyk7eGMoQXIoXCJodHRwczovL1wiLFwiaHR0cDovL1wiLGEuTWgpLGIuQmgsYi53bSk7cmV0dXJuIGR9LENyPWZ1bmN0aW9uKCl7dmFyIGE9ZnVuY3Rpb24oKXthLnE9YS5xfHxbXTthLnEucHVzaChhcmd1bWVudHMpfTtyZXR1cm4gYX0sRXI9e2Z1bmN0aW9uTmFtZTpcIl9nb29nV2NtSW1wbFwiLExmOlwiX2dvb2dXY21Ba1wiLE1oOlwid3d3LmdzdGF0aWMuY29tL3djbS9sb2FkZXIuanNcIn0sXG5Gcj17ZnVuY3Rpb25OYW1lOlwiX2dhUGhvbmVJbXBsXCIsTGY6XCJnYV93cGlkXCIsTWg6XCJ3d3cuZ3N0YXRpYy5jb20vZ2FwaG9uZS9sb2FkZXIuanNcIn0sR3I9e25rOlwiOVwiLFZrOlwiNVwifSxIcj17ZnVuY3Rpb25OYW1lOlwiX2dvb2dDYWxsVHJhY2tpbmdJbXBsXCIsR2Y6W0ZyLmZ1bmN0aW9uTmFtZSxFci5mdW5jdGlvbk5hbWVdLE1oOlwid3d3LmdzdGF0aWMuY29tL2NhbGwtdHJhY2tpbmcvY2FsbC10cmFja2luZ19cIisoR3Iubmt8fEdyLlZrKStcIi5qc1wifSxJcj17fSxKcj1mdW5jdGlvbihhLGIsYyxkLGUpe00oMjIpO2lmKGMpe2U9ZXx8e307dmFyIGY9RHIoRXIsZSxhKSxnPXthazphLGNsOmJ9O2UuT2I9PT12b2lkIDAmJihnLmF1dG9yZXBsYWNlPWMpO0JyKGcsZCk7ZigyLGUuT2IsZyxjLDAsQWIoKSxlLm9wdGlvbnMpfX0sS3I9ZnVuY3Rpb24oYSxiLGMsZCxlKXtNKDIxKTtpZihiJiZjKXtlPWV8fHt9O2Zvcih2YXIgZj17Y291bnRyeU5hbWVDb2RlOmMsXG5kZXN0aW5hdGlvbk51bWJlcjpiLHJldHJpZXZhbFRpbWU6QWIoKX0sZz0wO2c8YS5sZW5ndGg7ZysrKXt2YXIgaz1hW2ddO0lyW2suaWRdfHwoayYmay5wcmVmaXg9PT1cIkFXXCImJiFmLmFkRGF0YSYmay5pZHMubGVuZ3RoPj0yPyhmLmFkRGF0YT17YWs6ay5pZHNbbWxbMV1dLGNsOmsuaWRzW21sWzJdXX0sQnIoZi5hZERhdGEsZCksSXJbay5pZF09ITApOmsmJmsucHJlZml4PT09XCJVQVwiJiYhZi5nYURhdGEmJihmLmdhRGF0YT17Z2FXcGlkOmsuZGVzdGluYXRpb25JZH0sSXJbay5pZF09ITApKX0oZi5nYURhdGF8fGYuYWREYXRhKSYmRHIoSHIsZSkoZS5PYixmLGUub3B0aW9ucyl9fSxMcj1mdW5jdGlvbigpe3ZhciBhPSExO3JldHVybiBhfSxNcj1mdW5jdGlvbihhLFxuYil7aWYoYSlpZihXbigpKXt9ZWxzZSBpZihhPWwoYSk/amwoTWooYSkpOmpsKE1qKGEuaWQpKSl7dmFyIGM9dm9pZCAwLGQ9ITEsZT1VKGIsVC5nLlJpKTtpZihlJiZBcnJheS5pc0FycmF5KGUpKXtjPVtdO2Zvcih2YXIgZj0wO2Y8ZS5sZW5ndGg7ZisrKXt2YXIgZz1qbChlW2ZdKTtnJiYoYy5wdXNoKGcpLChhLmlkPT09Zy5pZHx8YS5pZD09PWEuZGVzdGluYXRpb25JZCYmYS5kZXN0aW5hdGlvbklkPT09Zy5kZXN0aW5hdGlvbklkKSYmKGQ9ITApKX19aWYoIWN8fGQpe3ZhciBrPVUoYixULmcuRGcpLG07aWYoayl7QXJyYXkuaXNBcnJheShrKT9tPWs6bT1ba107dmFyIG49VShiLFQuZy5CZykscD1VKGIsVC5nLkNnKSxxPVUoYixULmcuRWcpLHI9VShiLFQuZy5RaSksdD1ufHxwLHU9MTthLnByZWZpeCE9PVwiVUFcInx8Y3x8KHU9NSk7Zm9yKHZhciB2PVxuMDt2PG0ubGVuZ3RoO3YrKylpZih2PHUpaWYoYylLcihjLG1bdl0scixiLHtPYjp0LG9wdGlvbnM6cX0pO2Vsc2UgaWYoYS5wcmVmaXg9PT1cIkFXXCImJmEuaWRzW21sWzJdXSlMcigpP0tyKFthXSxtW3ZdLHJ8fFwiVVNcIixiLHtPYjp0LG9wdGlvbnM6cX0pOkpyKGEuaWRzW21sWzFdXSxhLmlkc1ttbFsyXV0sbVt2XSxiLHtPYjp0LG9wdGlvbnM6cX0pO2Vsc2UgaWYoYS5wcmVmaXg9PT1cIlVBXCIpaWYoTHIoKSlLcihbYV0sbVt2XSxyfHxcIlVTXCIsYix7T2I6dH0pO2Vsc2V7dmFyIHc9YS5kZXN0aW5hdGlvbklkLHg9bVt2XSx5PXtPYjp0fTtNKDIzKTtpZih4KXt5PXl8fHt9O3ZhciBBPURyKEZyLHksdyksQj17fTt5Lk9iIT09dm9pZCAwP0IucmVjZWl2ZXI9eS5PYjpCLnJlcGxhY2U9eDtCLmdhX3dwaWQ9dztCLmRlc3RpbmF0aW9uPXg7QSgyLEFiKCksQil9fX19fX07XG5mdW5jdGlvbiBOcihhKXtyZXR1cm57Z2V0RGVzdGluYXRpb25JZDpmdW5jdGlvbigpe3JldHVybiBhLnRhcmdldC5kZXN0aW5hdGlvbklkfSxnZXRFdmVudE5hbWU6ZnVuY3Rpb24oKXtyZXR1cm4gYS5ldmVudE5hbWV9LHNldEV2ZW50TmFtZTpmdW5jdGlvbihiKXthLmV2ZW50TmFtZT1ifSxnZXRIaXREYXRhOmZ1bmN0aW9uKGIpe3JldHVybiBhLm9bYl19LHNldEhpdERhdGE6ZnVuY3Rpb24oYixjKXthLm9bYl09Y30sc2V0SGl0RGF0YUlmTm90RGVmaW5lZDpmdW5jdGlvbihiLGMpe2Eub1tiXT09PXZvaWQgMCYmKGEub1tiXT1jKX0sY29weVRvSGl0RGF0YTpmdW5jdGlvbihiLGMpe2EuY29weVRvSGl0RGF0YShiLGMpfSxnZXRNZXRhZGF0YTpmdW5jdGlvbihiKXtyZXR1cm4gYS5tZXRhZGF0YVtiXX0sc2V0TWV0YWRhdGE6ZnVuY3Rpb24oYixjKXthLm1ldGFkYXRhW2JdPWN9LGlzQWJvcnRlZDpmdW5jdGlvbigpe3JldHVybiBhLmlzQWJvcnRlZH0sYWJvcnQ6ZnVuY3Rpb24oKXthLmlzQWJvcnRlZD1cbiEwfSxnZXRGcm9tRXZlbnRDb250ZXh0OmZ1bmN0aW9uKGIpe3JldHVybiBVKGEubSxiKX0sSWo6ZnVuY3Rpb24oKXtyZXR1cm4gYX0sZ2V0SGl0S2V5czpmdW5jdGlvbigpe3JldHVybiBPYmplY3Qua2V5cyhhLm8pfX19O3ZhciBVcixWcj0hMTtmdW5jdGlvbiBXcigpe1ZyPSEwO1VyPVVyfHx7fX1mdW5jdGlvbiBYcihhKXtWcnx8V3IoKTtyZXR1cm4gVXJbYV19ZnVuY3Rpb24gWXIoKXt2YXIgYT1ELnNjcmVlbjtyZXR1cm57d2lkdGg6YT9hLndpZHRoOjAsaGVpZ2h0OmE/YS5oZWlnaHQ6MH19XG5mdW5jdGlvbiBacihhKXtpZihFLmhpZGRlbilyZXR1cm4hMDt2YXIgYj1hLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO2lmKGIudG9wPT09Yi5ib3R0b218fGIubGVmdD09PWIucmlnaHR8fCFELmdldENvbXB1dGVkU3R5bGUpcmV0dXJuITA7dmFyIGM9RC5nZXRDb21wdXRlZFN0eWxlKGEsbnVsbCk7aWYoYy52aXNpYmlsaXR5PT09XCJoaWRkZW5cIilyZXR1cm4hMDtmb3IodmFyIGQ9YSxlPWM7ZDspe2lmKGUuZGlzcGxheT09PVwibm9uZVwiKXJldHVybiEwO3ZhciBmPWUub3BhY2l0eSxnPWUuZmlsdGVyO2lmKGcpe3ZhciBrPWcuaW5kZXhPZihcIm9wYWNpdHkoXCIpO2s+PTAmJihnPWcuc3Vic3RyaW5nKGsrOCxnLmluZGV4T2YoXCIpXCIsaykpLGcuY2hhckF0KGcubGVuZ3RoLTEpPT09XCIlXCImJihnPWcuc3Vic3RyaW5nKDAsZy5sZW5ndGgtMSkpLGY9U3RyaW5nKE1hdGgubWluKE51bWJlcihnKSxOdW1iZXIoZikpKSl9aWYoZiE9PXZvaWQgMCYmTnVtYmVyKGYpPD0wKXJldHVybiEwOyhkPWQucGFyZW50RWxlbWVudCkmJlxuKGU9RC5nZXRDb21wdXRlZFN0eWxlKGQsbnVsbCkpfXJldHVybiExfXZhciBLZjt2YXIgWnM9TnVtYmVyKCcnKXx8NSwkcz1OdW1iZXIoJycpfHw1MCxhdD1zYigpO3ZhciBmdD17WWs6TnVtYmVyKCcnKXx8NTAwLExrOk51bWJlcignJyl8fDVFMyxnajpOdW1iZXIoJzIwJyl8fDEwLHJrOk51bWJlcignJyl8fDVFM307ZnVuY3Rpb24gZ3QoYSl7cmV0dXJuIGEucGVyZm9ybWFuY2UmJmEucGVyZm9ybWFuY2Uubm93KCl8fERhdGUubm93KCl9XG52YXIgaHQ9ZnVuY3Rpb24oYSxiKXt2YXIgYztyZXR1cm4gY307dmFyIGl0O2Z1bmN0aW9uIG90KCl7dmFyIGE9TmYoS2YuaixcIlwiLGZ1bmN0aW9uKCl7cmV0dXJue319KTt0cnl7cmV0dXJuIGEoXCJpbnRlcm5hbF9zd19hbGxvd2VkXCIpLCEwfWNhdGNoKGIpe3JldHVybiExfX1cbmZ1bmN0aW9uIHB0KGEsYil7fVxudmFyIHF0PWZ1bmN0aW9uKGEsYixjLGQpe307XG5mdW5jdGlvbiBydChhLGIsYyxkKXt9XG5mdW5jdGlvbiBzdChhLGIsYyxkKXt9dmFyIHR0PXZvaWQgMDtmdW5jdGlvbiB1dChhKXt2YXIgYj1bXTtyZXR1cm4gYn07dmFyIHZ0PWZ1bmN0aW9uKGEpe2Zvcih2YXIgYj1bXSxjPTAsZD0wO2Q8YS5sZW5ndGg7ZCsrKXt2YXIgZT1hLmNoYXJDb2RlQXQoZCk7ZTwxMjg/YltjKytdPWU6KGU8MjA0OD9iW2MrK109ZT4+NnwxOTI6KChlJjY0NTEyKT09NTUyOTYmJmQrMTxhLmxlbmd0aCYmKGEuY2hhckNvZGVBdChkKzEpJjY0NTEyKT09NTYzMjA/KGU9NjU1MzYrKChlJjEwMjMpPDwxMCkrKGEuY2hhckNvZGVBdCgrK2QpJjEwMjMpLGJbYysrXT1lPj4xOHwyNDAsYltjKytdPWU+PjEyJjYzfDEyOCk6YltjKytdPWU+PjEyfDIyNCxiW2MrK109ZT4+NiY2M3wxMjgpLGJbYysrXT1lJjYzfDEyOCl9cmV0dXJuIGJ9O05tKCk7UW0oKXx8S20oXCJpUG9kXCIpO0ttKFwiaVBhZFwiKTshS20oXCJBbmRyb2lkXCIpfHxPbSgpfHxObSgpfHxNbSgpfHxLbShcIlNpbGtcIik7T20oKTshS20oXCJTYWZhcmlcIil8fE9tKCl8fChMbSgpPzA6S20oXCJDb2FzdFwiKSl8fE1tKCl8fChMbSgpPzA6S20oXCJFZGdlXCIpKXx8KExtKCk/Sm0oXCJNaWNyb3NvZnQgRWRnZVwiKTpLbShcIkVkZy9cIikpfHwoTG0oKT9KbShcIk9wZXJhXCIpOkttKFwiT1BSXCIpKXx8Tm0oKXx8S20oXCJTaWxrXCIpfHxLbShcIkFuZHJvaWRcIil8fFJtKCk7dmFyIHd0PXt9LHh0PW51bGwsenQ9ZnVuY3Rpb24oYSl7Zm9yKHZhciBiPVtdLGM9MCxkPTA7ZDxhLmxlbmd0aDtkKyspe3ZhciBlPWEuY2hhckNvZGVBdChkKTtlPjI1NSYmKGJbYysrXT1lJjI1NSxlPj49OCk7YltjKytdPWV9dmFyIGY9NDtmPT09dm9pZCAwJiYoZj0wKTtpZigheHQpe3h0PXt9O2Zvcih2YXIgZz1cIkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5XCIuc3BsaXQoXCJcIiksaz1bXCIrLz1cIixcIisvXCIsXCItXz1cIixcIi1fLlwiLFwiLV9cIl0sbT0wO208NTttKyspe3ZhciBuPWcuY29uY2F0KGtbbV0uc3BsaXQoXCJcIikpO3d0W21dPW47Zm9yKHZhciBwPTA7cDxuLmxlbmd0aDtwKyspe3ZhciBxPW5bcF07eHRbcV09PT12b2lkIDAmJih4dFtxXT1wKX19fWZvcih2YXIgcj13dFtmXSx0PUFycmF5KE1hdGguZmxvb3IoYi5sZW5ndGgvMykpLHU9cls2NF18fFwiXCIsdj0wLHc9MDt2PGIubGVuZ3RoLTI7dis9Myl7dmFyIHg9Ylt2XSxcbnk9Ylt2KzFdLEE9Ylt2KzJdLEI9clt4Pj4yXSxDPXJbKHgmMyk8PDR8eT4+NF0sSD1yWyh5JjE1KTw8MnxBPj42XSxJPXJbQSY2M107dFt3KytdPVwiXCIrQitDK0grSX12YXIgRj0wLE89dTtzd2l0Y2goYi5sZW5ndGgtdil7Y2FzZSAyOkY9Ylt2KzFdLE89clsoRiYxNSk8PDJdfHx1O2Nhc2UgMTp2YXIgTj1iW3ZdO3Rbd109XCJcIityW04+PjJdK3JbKE4mMyk8PDR8Rj4+NF0rTyt1fXJldHVybiB0LmpvaW4oXCJcIil9O3ZhciBBdD1cInBsYXRmb3JtIHBsYXRmb3JtVmVyc2lvbiBhcmNoaXRlY3R1cmUgbW9kZWwgdWFGdWxsVmVyc2lvbiBiaXRuZXNzIGZ1bGxWZXJzaW9uTGlzdCB3b3c2NFwiLnNwbGl0KFwiIFwiKTtmdW5jdGlvbiBCdChhKXt2YXIgYjtyZXR1cm4oYj1hLmdvb2dsZV90YWdfZGF0YSkhPW51bGw/YjphLmdvb2dsZV90YWdfZGF0YT17fX1mdW5jdGlvbiBDdCgpe3ZhciBhPUQuZ29vZ2xlX3RhZ19kYXRhLGI7aWYoYSE9bnVsbCYmYS51YWNoKXt2YXIgYz1hLnVhY2gsZD1PYmplY3QuYXNzaWduKHt9LGMpO2MuZnVsbFZlcnNpb25MaXN0JiYoZC5mdWxsVmVyc2lvbkxpc3Q9Yy5mdWxsVmVyc2lvbkxpc3Quc2xpY2UoMCkpO2I9ZH1lbHNlIGI9bnVsbDtyZXR1cm4gYn1mdW5jdGlvbiBEdCgpe3ZhciBhLGI7cmV0dXJuKGI9KGE9RC5nb29nbGVfdGFnX2RhdGEpPT1udWxsP3ZvaWQgMDphLnVhY2hfcHJvbWlzZSkhPW51bGw/YjpudWxsfVxuZnVuY3Rpb24gRXQoYSl7dmFyIGIsYztyZXR1cm4gdHlwZW9mKChiPWEubmF2aWdhdG9yKT09bnVsbD92b2lkIDA6KGM9Yi51c2VyQWdlbnREYXRhKT09bnVsbD92b2lkIDA6Yy5nZXRIaWdoRW50cm9weVZhbHVlcyk9PT1cImZ1bmN0aW9uXCJ9ZnVuY3Rpb24gRnQoKXt2YXIgYT1EO2lmKCFFdChhKSlyZXR1cm4gbnVsbDt2YXIgYj1CdChhKTtpZihiLnVhY2hfcHJvbWlzZSlyZXR1cm4gYi51YWNoX3Byb21pc2U7dmFyIGM9YS5uYXZpZ2F0b3IudXNlckFnZW50RGF0YS5nZXRIaWdoRW50cm9weVZhbHVlcyhBdCkudGhlbihmdW5jdGlvbihkKXtiLnVhY2ghPW51bGx8fChiLnVhY2g9ZCk7cmV0dXJuIGR9KTtyZXR1cm4gYi51YWNoX3Byb21pc2U9Y307ZnVuY3Rpb24gTHQoYSl7dmFyIGI7Yj1iPT09dm9pZCAwP2RvY3VtZW50OmI7dmFyIGM7cmV0dXJuISgoYz1iLmZlYXR1cmVQb2xpY3kpPT1udWxsfHwhYy5hbGxvd2VkRmVhdHVyZXMoKS5pbmNsdWRlcyhhKSl9O2Z1bmN0aW9uIE10KCl7cmV0dXJuIEx0KFwiam9pbi1hZC1pbnRlcmVzdC1ncm91cFwiKSYmb2Iob2Muam9pbkFkSW50ZXJlc3RHcm91cCl9XG5mdW5jdGlvbiBOdChhLGIpe3ZhciBjPWxiWzNdPT09dm9pZCAwPzE6bGJbM10sZD0naWZyYW1lW2RhdGEtdGFnZ2luZy1pZD1cIicrYisnXCJdJyxlPVtdO3RyeXtpZihjPT09MSl7dmFyIGY9RS5xdWVyeVNlbGVjdG9yKGQpO2YmJihlPVtmXSl9ZWxzZSBlPUFycmF5LmZyb20oRS5xdWVyeVNlbGVjdG9yQWxsKGQpKX1jYXRjaChxKXt9dmFyIGc7YTp7dHJ5e2c9RS5xdWVyeVNlbGVjdG9yQWxsKCdpZnJhbWVbYWxsb3c9XCJqb2luLWFkLWludGVyZXN0LWdyb3VwXCJdW2RhdGEtdGFnZ2luZy1pZCo9XCItXCJdJyk7YnJlYWsgYX1jYXRjaChxKXt9Zz12b2lkIDB9dmFyIGs9ZyxtPSgoaz09bnVsbD92b2lkIDA6ay5sZW5ndGgpfHwwKT49KGxiWzJdPT09dm9pZCAwPzUwOmxiWzJdKSxuO2lmKG49ZS5sZW5ndGg+PTEpe3ZhciBwPU51bWJlcihlW2UubGVuZ3RoLTFdLmRhdGFzZXQubG9hZFRpbWUpO3AhPT12b2lkIDAmJkJiKCktcDwobGJbMV09PT12b2lkIDA/NkU0OmxiWzFdKT8oaGIoXCJUQUdHSU5HXCIsXG45KSxuPSEwKTpuPSExfWlmKCFuKXtpZihjPT09MSlpZihlLmxlbmd0aD49MSlPdChlWzBdKTtlbHNle2lmKG0pe2hiKFwiVEFHR0lOR1wiLDEwKTtyZXR1cm59fWVsc2UgZS5sZW5ndGg+PWM/T3QoZVswXSk6bSYmT3Qoa1swXSk7emMoYSx2b2lkIDAse2FsbG93Olwiam9pbi1hZC1pbnRlcmVzdC1ncm91cFwifSx7dGFnZ2luZ0lkOmIsbG9hZFRpbWU6QmIoKX0pfX1mdW5jdGlvbiBPdChhKXt0cnl7YS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGEpfWNhdGNoKGIpe319ZnVuY3Rpb24gUHQoKXtyZXR1cm5cImh0dHBzOi8vdGQuZG91YmxlY2xpY2submV0XCJ9O3ZhciBJdT17Szp7U2g6XCJhZHNfY29udmVyc2lvbl9oaXRcIixDZDpcImNvbnRhaW5lcl9leGVjdXRlX3N0YXJ0XCIsVmg6XCJjb250YWluZXJfc2V0dXBfZW5kXCIsVWY6XCJjb250YWluZXJfc2V0dXBfc3RhcnRcIixUaDpcImNvbnRhaW5lcl9ibG9ja2luZ19lbmRcIixVaDpcImNvbnRhaW5lcl9leGVjdXRlX2VuZFwiLFdoOlwiY29udGFpbmVyX3lpZWxkX2VuZFwiLFZmOlwiY29udGFpbmVyX3lpZWxkX3N0YXJ0XCIsWGk6XCJldmVudF9leGVjdXRlX2VuZFwiLFdpOlwiZXZlbnRfZXZhbHVhdGlvbl9lbmRcIixOZzpcImV2ZW50X2V2YWx1YXRpb25fc3RhcnRcIixZaTpcImV2ZW50X3NldHVwX2VuZFwiLGZlOlwiZXZlbnRfc2V0dXBfc3RhcnRcIixhajpcImdhNF9jb252ZXJzaW9uX2hpdFwiLG5lOlwicGFnZV9sb2FkXCIsdm46XCJwYWdldmlld1wiLFpiOlwic25pcHBldF9sb2FkXCIsdGo6XCJ0YWdfY2FsbGJhY2tfZXJyb3JcIix1ajpcInRhZ19jYWxsYmFja19mYWlsdXJlXCIsdmo6XCJ0YWdfY2FsbGJhY2tfc3VjY2Vzc1wiLHdqOlwidGFnX2V4ZWN1dGVfZW5kXCIsXG5tZDpcInRhZ19leGVjdXRlX3N0YXJ0XCJ9fTtmdW5jdGlvbiBKdSgpe2Z1bmN0aW9uIGEoYyxkKXt2YXIgZT1pYihkKTtlJiZiLnB1c2goW2MsZV0pfXZhciBiPVtdO2EoXCJ1XCIsXCJHVE1cIik7YShcInV0XCIsXCJUQUdHSU5HXCIpO2EoXCJoXCIsXCJIRUFMVEhcIik7cmV0dXJuIGJ9O3ZhciBLdT0hMTtmdW5jdGlvbiBzdihhLGIpe31cbmZ1bmN0aW9uIHR2KGEsYil7fWZ1bmN0aW9uIHV2KGEsYil7fVxuZnVuY3Rpb24gdnYoYSxiKXt9ZnVuY3Rpb24gd3YoKXt2YXIgYT17fTtyZXR1cm4gYX1cbmZ1bmN0aW9uIGt2KGEpe2E9YT09PXZvaWQgMD8hMDphO3ZhciBiPXt9O3JldHVybiBifVxuZnVuY3Rpb24geHYoKXt9ZnVuY3Rpb24geXYoYSxiKXt9XG5mdW5jdGlvbiB6dihhLGIsYyl7fVxuZnVuY3Rpb24gQXYoKXt9ZnVuY3Rpb24gQnYoYSxiKXt2YXIgYz1ELGQsZT1jLkdvb2dsZWJRaENzTztlfHwoZT17fSxjLkdvb2dsZWJRaENzTz1lKTtkPWU7aWYoZFthXSlyZXR1cm4hMTtkW2FdPVtdO2RbYV1bMF09YjtyZXR1cm4hMH07ZnVuY3Rpb24gQ3YoYSxiLGMsZCl7dmFyIGU9Vm0oYSxcImZtdFwiKTtpZihiKXt2YXIgZj1WbShhLFwicmFuZG9tXCIpLGc9Vm0oYSxcImxhYmVsXCIpfHxcIlwiO2lmKCFmKXJldHVybiExO3ZhciBrPXp0KGRlY29kZVVSSUNvbXBvbmVudChnLnJlcGxhY2UoL1xcKy9nLFwiIFwiKSkrXCI6XCIrZGVjb2RlVVJJQ29tcG9uZW50KGYucmVwbGFjZSgvXFwrL2csXCIgXCIpKSk7aWYoIUJ2KGssYikpcmV0dXJuITF9ZSYmTnVtYmVyKGUpIT09NCYmKGE9WG0oYSxcInJmbXRcIixlKSk7dmFyIG09WG0oYSxcImZtdFwiLDQpO3hjKG0sZnVuY3Rpb24oKXtELmdvb2dsZV9ub0Z1cnRoZXJSZWRpcmVjdHMmJmImJihELmdvb2dsZV9ub0Z1cnRoZXJSZWRpcmVjdHM9bnVsbCxiKCkpfSxjLGQsRS5nZXRFbGVtZW50c0J5VGFnTmFtZShcInNjcmlwdFwiKVswXS5wYXJlbnRFbGVtZW50fHx2b2lkIDApO3JldHVybiEwfTtmdW5jdGlvbiBVdihhLGIpe2lmKGRhdGEuZW50aXRpZXMpe3ZhciBjPWRhdGEuZW50aXRpZXNbYV07aWYoYylyZXR1cm4gY1tiXX19O2Z1bmN0aW9uIFZ2KGEsYixjKXtjPWM9PT12b2lkIDA/ITE6YztXdigpLmFkZFJlc3RyaWN0aW9uKDAsYSxiLGMpfWZ1bmN0aW9uIFh2KGEsYixjKXtjPWM9PT12b2lkIDA/ITE6YztXdigpLmFkZFJlc3RyaWN0aW9uKDEsYSxiLGMpfWZ1bmN0aW9uIFl2KCl7dmFyIGE9SWooKTtyZXR1cm4gV3YoKS5nZXRSZXN0cmljdGlvbnMoMSxhKX12YXIgWnY9ZnVuY3Rpb24oKXt0aGlzLmo9e307dGhpcy5EPXt9fSwkdj1mdW5jdGlvbihhLGIpe3ZhciBjPWEualtiXTtjfHwoYz17X2VudGl0eTp7aW50ZXJuYWw6W10sZXh0ZXJuYWw6W119LF9ldmVudDp7aW50ZXJuYWw6W10sZXh0ZXJuYWw6W119fSxhLmpbYl09Yyk7cmV0dXJuIGN9O1xuWnYucHJvdG90eXBlLmFkZFJlc3RyaWN0aW9uPWZ1bmN0aW9uKGEsYixjLGQpe2Q9ZD09PXZvaWQgMD8hMTpkO2lmKCFkfHwhdGhpcy5EW2JdKXt2YXIgZT0kdih0aGlzLGIpO2E9PT0wP2Q/ZS5fZW50aXR5LmV4dGVybmFsLnB1c2goYyk6ZS5fZW50aXR5LmludGVybmFsLnB1c2goYyk6YT09PTEmJihkP2UuX2V2ZW50LmV4dGVybmFsLnB1c2goYyk6ZS5fZXZlbnQuaW50ZXJuYWwucHVzaChjKSl9fTtcblp2LnByb3RvdHlwZS5nZXRSZXN0cmljdGlvbnM9ZnVuY3Rpb24oYSxiKXt2YXIgYz0kdih0aGlzLGIpO2lmKGE9PT0wKXt2YXIgZCxlO3JldHVybltdLmNvbmNhdChwYSgoYz09bnVsbD92b2lkIDA6KGQ9Yy5fZW50aXR5KT09bnVsbD92b2lkIDA6ZC5pbnRlcm5hbCl8fFtdKSxwYSgoYz09bnVsbD92b2lkIDA6KGU9Yy5fZW50aXR5KT09bnVsbD92b2lkIDA6ZS5leHRlcm5hbCl8fFtdKSl9aWYoYT09PTEpe3ZhciBmLGc7cmV0dXJuW10uY29uY2F0KHBhKChjPT1udWxsP3ZvaWQgMDooZj1jLl9ldmVudCk9PW51bGw/dm9pZCAwOmYuaW50ZXJuYWwpfHxbXSkscGEoKGM9PW51bGw/dm9pZCAwOihnPWMuX2V2ZW50KT09bnVsbD92b2lkIDA6Zy5leHRlcm5hbCl8fFtdKSl9cmV0dXJuW119O1xuWnYucHJvdG90eXBlLmdldEV4dGVybmFsUmVzdHJpY3Rpb25zPWZ1bmN0aW9uKGEsYil7dmFyIGM9JHYodGhpcyxiKSxkLGU7cmV0dXJuIGE9PT0wPyhjPT1udWxsP3ZvaWQgMDooZD1jLl9lbnRpdHkpPT1udWxsP3ZvaWQgMDpkLmV4dGVybmFsKXx8W106KGM9PW51bGw/dm9pZCAwOihlPWMuX2V2ZW50KT09bnVsbD92b2lkIDA6ZS5leHRlcm5hbCl8fFtdfTtadi5wcm90b3R5cGUucmVtb3ZlRXh0ZXJuYWxSZXN0cmljdGlvbnM9ZnVuY3Rpb24oYSl7dmFyIGI9JHYodGhpcyxhKTtiLl9ldmVudCYmKGIuX2V2ZW50LmV4dGVybmFsPVtdKTtiLl9lbnRpdHkmJihiLl9lbnRpdHkuZXh0ZXJuYWw9W10pO3RoaXMuRFthXT0hMH07ZnVuY3Rpb24gV3YoKXt2YXIgYT1paS5yO2F8fChhPW5ldyBadixpaS5yPWEpO3JldHVybiBhfTt2YXIgYXc9bmV3IFJlZ0V4cCgvXiguKlxcLik/KGdvb2dsZXx5b3V0dWJlfGJsb2dnZXJ8d2l0aGdvb2dsZSkoXFwuY29tPyk/KFxcLlthLXpdezJ9KT9cXC4/JC8pLGJ3PXtjbDpbXCJlY2xcIl0sY3VzdG9tUGl4ZWxzOltcIm5vbkdvb2dsZVBpeGVsc1wiXSxlY2w6W1wiY2xcIl0sZWhsOltcImhsXCJdLGdhYXdjOltcImdvb2d0YWdcIl0saGw6W1wiZWhsXCJdLGh0bWw6W1wiY3VzdG9tU2NyaXB0c1wiLFwiY3VzdG9tUGl4ZWxzXCIsXCJub25Hb29nbGVQaXhlbHNcIixcIm5vbkdvb2dsZVNjcmlwdHNcIixcIm5vbkdvb2dsZUlmcmFtZXNcIl0sY3VzdG9tU2NyaXB0czpbXCJodG1sXCIsXCJjdXN0b21QaXhlbHNcIixcIm5vbkdvb2dsZVBpeGVsc1wiLFwibm9uR29vZ2xlU2NyaXB0c1wiLFwibm9uR29vZ2xlSWZyYW1lc1wiXSxub25Hb29nbGVQaXhlbHM6W10sbm9uR29vZ2xlU2NyaXB0czpbXCJub25Hb29nbGVQaXhlbHNcIl0sbm9uR29vZ2xlSWZyYW1lczpbXCJub25Hb29nbGVQaXhlbHNcIl19LGN3PXtjbDpbXCJlY2xcIl0sY3VzdG9tUGl4ZWxzOltcImN1c3RvbVNjcmlwdHNcIixcblwiaHRtbFwiXSxlY2w6W1wiY2xcIl0sZWhsOltcImhsXCJdLGdhYXdjOltcImdvb2d0YWdcIl0saGw6W1wiZWhsXCJdLGh0bWw6W1wiY3VzdG9tU2NyaXB0c1wiXSxjdXN0b21TY3JpcHRzOltcImh0bWxcIl0sbm9uR29vZ2xlUGl4ZWxzOltcImN1c3RvbVBpeGVsc1wiLFwiY3VzdG9tU2NyaXB0c1wiLFwiaHRtbFwiLFwibm9uR29vZ2xlU2NyaXB0c1wiLFwibm9uR29vZ2xlSWZyYW1lc1wiXSxub25Hb29nbGVTY3JpcHRzOltcImN1c3RvbVNjcmlwdHNcIixcImh0bWxcIl0sbm9uR29vZ2xlSWZyYW1lczpbXCJjdXN0b21TY3JpcHRzXCIsXCJodG1sXCIsXCJub25Hb29nbGVTY3JpcHRzXCJdfSxkdz1cImdvb2dsZSBjdXN0b21QaXhlbHMgY3VzdG9tU2NyaXB0cyBodG1sIG5vbkdvb2dsZVBpeGVscyBub25Hb29nbGVTY3JpcHRzIG5vbkdvb2dsZUlmcmFtZXNcIi5zcGxpdChcIiBcIik7XG5mdW5jdGlvbiBldygpe3ZhciBhPUppKFwiZ3RtLmFsbG93bGlzdFwiKXx8SmkoXCJndG0ud2hpdGVsaXN0XCIpO2EmJk0oOSk7b2kmJihhPVtcImdvb2dsZVwiLFwiZ3RhZ2ZsXCIsXCJsY2xcIixcInpvbmVcIl0pO2F3LnRlc3QoRC5sb2NhdGlvbiYmRC5sb2NhdGlvbi5ob3N0bmFtZSkmJihvaT9NKDExNik6KE0oMTE3KSxmdyYmKGE9W10sd2luZG93LmNvbnNvbGUmJndpbmRvdy5jb25zb2xlLmxvZyYmd2luZG93LmNvbnNvbGUubG9nKFwiR1RNIGJsb2NrZWQuIFNlZSBnby8xMzY4NzcyOC5cIikpKSk7dmFyIGI9YSYmRmIoeWIoYSksYncpLGM9SmkoXCJndG0uYmxvY2tsaXN0XCIpfHxKaShcImd0bS5ibGFja2xpc3RcIik7Y3x8KGM9SmkoXCJ0YWdUeXBlQmxhY2tsaXN0XCIpKSYmTSgzKTtjP00oOCk6Yz1bXTthdy50ZXN0KEQubG9jYXRpb24mJkQubG9jYXRpb24uaG9zdG5hbWUpJiYoYz15YihjKSxjLnB1c2goXCJub25Hb29nbGVQaXhlbHNcIixcIm5vbkdvb2dsZVNjcmlwdHNcIixcInNhbmRib3hlZFNjcmlwdHNcIikpO1xueWIoYykuaW5kZXhPZihcImdvb2dsZVwiKT49MCYmTSgyKTt2YXIgZD1jJiZGYih5YihjKSxjdyksZT17fTtyZXR1cm4gZnVuY3Rpb24oZil7dmFyIGc9ZiYmZltJZS5tYV07aWYoIWd8fHR5cGVvZiBnIT09XCJzdHJpbmdcIilyZXR1cm4hMDtnPWcucmVwbGFjZSgvXl8qLyxcIlwiKTtpZihlW2ddIT09dm9pZCAwKXJldHVybiBlW2ddO3ZhciBrPXlpW2ddfHxbXSxtPSEwO2lmKGEpe3ZhciBuO2lmKG49bSlhOntpZihiLmluZGV4T2YoZyk8MClpZihrJiZrLmxlbmd0aD4wKWZvcih2YXIgcD0wO3A8ay5sZW5ndGg7cCsrKXtpZihiLmluZGV4T2Yoa1twXSk8MCl7TSgxMSk7bj0hMTticmVhayBhfX1lbHNle249ITE7YnJlYWsgYX1uPSEwfW09bn12YXIgcT0hMTtpZihjKXt2YXIgcj1kLmluZGV4T2YoZyk+PTA7aWYocilxPXI7ZWxzZXt2YXIgdD10YihkLGt8fFtdKTt0JiZNKDEwKTtxPXR9fXZhciB1PSFtfHxxO3V8fCEoay5pbmRleE9mKFwic2FuZGJveGVkU2NyaXB0c1wiKT49MCl8fGImJmIuaW5kZXhPZihcInNhbmRib3hlZFNjcmlwdHNcIikhPT1cbi0xfHwodT10YihkLGR3KSk7cmV0dXJuIGVbZ109dX19dmFyIGZ3PSExO2Z3PSEwO2Z1bmN0aW9uIGd3KCl7QWomJlZ2KElqKCksZnVuY3Rpb24oYSl7dmFyIGI9dWYoYS5lbnRpdHlJZCksYztpZih4ZihiKSl7dmFyIGQ9YltJZS5tYV07aWYoIWQpdGhyb3cgRXJyb3IoXCJFcnJvcjogTm8gZnVuY3Rpb24gbmFtZSBnaXZlbiBmb3IgZnVuY3Rpb24gY2FsbC5cIik7dmFyIGU9bWZbZF07Yz0hIWUmJiEhZS5ydW5JblNpbG9lZE1vZGV9ZWxzZSBjPSEhVXYoYltJZS5tYV0sNCk7cmV0dXJuIGN9KX1mdW5jdGlvbiBodyhhLGIsYyxkLGUpe2lmKCFpdygpKXt2YXIgZj1kLnNpbG9lZD9EaihhKTphO2lmKCFVaihmKSl7dmFyIGc9ancoYSksaz1HYihhLFwiR1RNLVwiKSxtPWhqKCksbj1jP1wiL2d0YWcvanNcIjpcIi9ndG0uanNcIixwPWdqKGIsbitnKTtpZighcCl7dmFyIHE9aGkuRGQrbjtpZihtJiZyYyYmaylxPXJjLnJlcGxhY2UoL14oPzpodHRwcz86XFwvXFwvKT8vaSxcIlwiKS5zcGxpdCgvWz8jXS8pWzBdLHA9QXIoXCJodHRwczovL1wiLFwiaHR0cDovL1wiLHErZyk7ZWxzZSBpZihEaSgpKXt2YXIgcj1uO1EoNjQpJiYocj1cIi9cIik7cD1DaSgpK3IrZ31lbHNlIHA9QXIoXCJodHRwczovL1wiLFwiaHR0cDovL1wiLHErZyl9ZC5zaWxvZWQmJldqKHtjdGlkOmYsaXNEZXN0aW5hdGlvbjohMX0pO3ZhciB0PUxqKCk7eGooKS5jb250YWluZXJbZl09e3N0YXRlOjEsY29udGV4dDpkLHBhcmVudDp0fTt3aih7Y3RpZDpmLGlzRGVzdGluYXRpb246ITF9LGUpO3hjKHApfX19XG5mdW5jdGlvbiBrdyhhLGIsYyxkKXtpZighaXcoKSl7dmFyIGU9Yy5zaWxvZWQ/RGooYSk6YTtpZighVmooZSkpaWYoIWMuc2lsb2VkJiZYaigpKXhqKCkuZGVzdGluYXRpb25bZV09e3N0YXRlOjAsdHJhbnNwb3J0VXJsOmIsY29udGV4dDpjLHBhcmVudDpMaigpfSx3aih7Y3RpZDplLGlzRGVzdGluYXRpb246ITB9LGQpLE0oOTEpO2Vsc2V7dmFyIGY9XCIvZ3RhZy9kZXN0aW5hdGlvblwiK2p3KGEsITApLGc9Z2ooYixmKTtnfHwoRGkoKT8oUSg2NCkmJihmPVwiL2d0ZFwiK2p3KGEsITApKSxnPUNpKCkrZik6Zz1BcihcImh0dHBzOi8vXCIsXCJodHRwOi8vXCIsaGkuRGQrZikpO2Muc2lsb2VkJiZXaih7Y3RpZDplLGlzRGVzdGluYXRpb246ITB9KTt4aigpLmRlc3RpbmF0aW9uW2VdPXtzdGF0ZToxLGNvbnRleHQ6YyxwYXJlbnQ6TGooKX07d2ooe2N0aWQ6ZSxpc0Rlc3RpbmF0aW9uOiEwfSxkKTt4YyhnKX19fVxuZnVuY3Rpb24gancoYSxiKXtiPWI9PT12b2lkIDA/ITE6Yjt2YXIgYz1cIj9pZD1cIitlbmNvZGVVUklDb21wb25lbnQoYSkrXCImbD1cIitoaS5oYjtpZighR2IoYSxcIkdUTS1cIil8fGIpYys9XCImY3g9Y1wiO1EoNzMpJiYoYys9XCImZ3RtPVwiK1luKCkpO2hqKCkmJihjKz1cIiZzaWduPVwiK2hpLlNnKTt2YXIgZD1CaS5EO2Q9PT0xP2MrPVwiJmZwcz1mY1wiOmQ9PT0yJiYoYys9XCImZnBzPWZlXCIpO3JldHVybiBjfWZ1bmN0aW9uIGl3KCl7aWYoV24oKSl7cmV0dXJuITB9cmV0dXJuITF9O3ZhciBsdz1bXTtmdW5jdGlvbiBtdygpe3ZhciBhPU9mLmN0aWQ7aWYoYSl7dmFyIGI9emoubWU/MTowLGMsZD1LaihMaigpKTtjPWQmJmQuY29udGV4dDtyZXR1cm4gYStcIjtcIitPZi5jYW5vbmljYWxDb250YWluZXJJZCtcIjtcIisoYyYmYy5mcm9tQ29udGFpbmVyRXhlY3V0aW9uPzE6MCkrXCI7XCIrKGMmJmMuc291cmNlfHwwKStcIjtcIitifX1mdW5jdGlvbiBudygpe3ZhciBhPWFqKEQubG9jYXRpb24uaHJlZik7cmV0dXJuIGEuaG9zdG5hbWUrYS5wYXRobmFtZX1mdW5jdGlvbiBvdygpe3ZhciBhPW53KCk7YSYmZmsoXCJkbFwiLGVuY29kZVVSSUNvbXBvbmVudChhKSk7aWYoUSg5Mykpe3ZhciBiPW13KCk7YiYmZmsoXCJ0ZHBcIixiKX1lbHNlIGZrKFwidGRwXCIsZnVuY3Rpb24oKXtyZXR1cm4gbHcubGVuZ3RoPjA/bHcuam9pbihcIi5cIik6dm9pZCAwfSk7dmFyIGM9JG0oITApO2MhPT12b2lkIDAmJmZrKFwiZnJtXCIsU3RyaW5nKGMpKX07dmFyIHB3PSExLHF3PTAscnc9W107ZnVuY3Rpb24gc3coYSl7aWYoIXB3KXt2YXIgYj1FLmNyZWF0ZUV2ZW50T2JqZWN0LGM9RS5yZWFkeVN0YXRlPT09XCJjb21wbGV0ZVwiLGQ9RS5yZWFkeVN0YXRlPT09XCJpbnRlcmFjdGl2ZVwiO2lmKCFhfHxhLnR5cGUhPT1cInJlYWR5c3RhdGVjaGFuZ2VcInx8Y3x8IWImJmQpe3B3PSEwO2Zvcih2YXIgZT0wO2U8cncubGVuZ3RoO2UrKylHKHJ3W2VdKX1ydy5wdXNoPWZ1bmN0aW9uKCl7Zm9yKHZhciBmPXphLmFwcGx5KDAsYXJndW1lbnRzKSxnPTA7ZzxmLmxlbmd0aDtnKyspRyhmW2ddKTtyZXR1cm4gMH19fWZ1bmN0aW9uIHR3KCl7aWYoIXB3JiZxdzwxNDApe3F3Kys7dHJ5e3ZhciBhLGI7KGI9KGE9RS5kb2N1bWVudEVsZW1lbnQpLmRvU2Nyb2xsKT09bnVsbHx8Yi5jYWxsKGEsXCJsZWZ0XCIpO3N3KCl9Y2F0Y2goYyl7RC5zZXRUaW1lb3V0KHR3LDUwKX19fWZ1bmN0aW9uIHV3KGEpe3B3P2EoKTpydy5wdXNoKGEpfTtmdW5jdGlvbiB3dyhhLGIsYyl7cmV0dXJue2VudGl0eVR5cGU6YSxpbmRleEluT3JpZ2luQ29udGFpbmVyOmIsbmFtZUluT3JpZ2luQ29udGFpbmVyOmMsb3JpZ2luQ29udGFpbmVySWQ6R2ooKX19O3ZhciB5dz1mdW5jdGlvbihhLGIpe3RoaXMuaj0hMTt0aGlzLk09W107dGhpcy5ldmVudERhdGE9e3RhZ3M6W119O3RoaXMuUj0hMTt0aGlzLkQ9dGhpcy5IPTA7eHcodGhpcyxhLGIpfSx6dz1mdW5jdGlvbihhLGIsYyxkKXtpZihraS5oYXNPd25Qcm9wZXJ0eShiKXx8Yj09PVwiX196b25lXCIpcmV0dXJuLTE7dmFyIGU9e307U2EoZCkmJihlPWgoZCxlKSk7ZS5pZD1jO2Uuc3RhdHVzPVwidGltZW91dFwiO3JldHVybiBhLmV2ZW50RGF0YS50YWdzLnB1c2goZSktMX0sQXc9ZnVuY3Rpb24oYSxiLGMsZCl7dmFyIGU9YS5ldmVudERhdGEudGFnc1tiXTtlJiYoZS5zdGF0dXM9YyxlLmV4ZWN1dGlvblRpbWU9ZCl9LEJ3PWZ1bmN0aW9uKGEpe2lmKCFhLmope2Zvcih2YXIgYj1hLk0sYz0wO2M8Yi5sZW5ndGg7YysrKWJbY10oKTthLmo9ITA7YS5NLmxlbmd0aD0wfX0seHc9ZnVuY3Rpb24oYSxiLGMpe2IhPT12b2lkIDAmJmEudWUoYik7YyYmRC5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7QncoYSl9LFxuTnVtYmVyKGMpKX07eXcucHJvdG90eXBlLnVlPWZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMsYz1EYihmdW5jdGlvbigpe0coZnVuY3Rpb24oKXthKEdqKCksYi5ldmVudERhdGEpfSl9KTt0aGlzLmo/YygpOnRoaXMuTS5wdXNoKGMpfTt2YXIgQ3c9ZnVuY3Rpb24oYSl7YS5IKys7cmV0dXJuIERiKGZ1bmN0aW9uKCl7YS5EKys7YS5SJiZhLkQ+PWEuSCYmQncoYSl9KX0sRHc9ZnVuY3Rpb24oYSl7YS5SPSEwO2EuRD49YS5IJiZCdyhhKX07dmFyIEV3PXt9LEd3PWZ1bmN0aW9uKCl7cmV0dXJuIERbRncoKV19O3ZhciBIdz1mdW5jdGlvbihhKXtELkdvb2dsZUFuYWx5dGljc09iamVjdHx8KEQuR29vZ2xlQW5hbHl0aWNzT2JqZWN0PWF8fFwiZ2FcIik7dmFyIGI9RC5Hb29nbGVBbmFseXRpY3NPYmplY3Q7aWYoRFtiXSlELmhhc093blByb3BlcnR5KGIpO2Vsc2V7dmFyIGM9ZnVuY3Rpb24oKXtjLnE9Yy5xfHxbXTtjLnEucHVzaChhcmd1bWVudHMpfTtjLmw9TnVtYmVyKEFiKCkpO0RbYl09Y31yZXR1cm4gRFtiXX0sSXc9ZnVuY3Rpb24oYSl7aWYoQWsoKSl7dmFyIGI9R3coKTtiKGErXCJyZXF1aXJlXCIsXCJsaW5rZXJcIik7YihhK1wibGlua2VyOnBhc3N0aHJvdWdoXCIsITApfX07XG5mdW5jdGlvbiBGdygpe3JldHVybiBELkdvb2dsZUFuYWx5dGljc09iamVjdHx8XCJnYVwifVxudmFyIEp3PWZ1bmN0aW9uKCl7dmFyIGE9R2ooKTt9LEt3PWZ1bmN0aW9uKGEsYil7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGM9R3coKSxkPWMmJmMuZ2V0QnlOYW1lJiZjLmdldEJ5TmFtZShhKTtpZihkKXt2YXIgZT1kLmdldChcInNlbmRIaXRUYXNrXCIpO2Quc2V0KFwic2VuZEhpdFRhc2tcIixmdW5jdGlvbihmKXt2YXIgZz1mLmdldChcImhpdFBheWxvYWRcIiksaz1mLmdldChcImhpdENhbGxiYWNrXCIpLG09Zy5pbmRleE9mKFwiJnRpZD1cIitiKTwwO20mJihmLnNldChcImhpdFBheWxvYWRcIixnLnJlcGxhY2UoLyZ0aWQ9VUEtWzAtOV0rLVswLTldKy8sXCImdGlkPVwiK2IpLCEwKSxmLnNldChcImhpdENhbGxiYWNrXCIsdm9pZCAwLCEwKSk7ZShmKTtcbm0mJihmLnNldChcImhpdFBheWxvYWRcIixnLCEwKSxmLnNldChcImhpdENhbGxiYWNrXCIsaywhMCksZi5zZXQoXCJfeF8xOVwiLHZvaWQgMCwhMCksZShmKSl9KX19fTt2YXIgUHc9W1wiZXNcIixcIjFcIl0sUXc9e30sUnc9e307ZnVuY3Rpb24gU3coYSxiKXtpZihxail7dmFyIGM7Yz1iLm1hdGNoKC9eKGd0bXxndGFnKVxcLi8pP2VuY29kZVVSSUNvbXBvbmVudChiKTpcIipcIjtRd1thXT1bW1wiZVwiLGNdLFtcImVpZFwiLGFdXTtkbShhKX19ZnVuY3Rpb24gVHcoYSl7dmFyIGI9YS5ldmVudElkLGM9YS5oYztpZighUXdbYl0pcmV0dXJuW107dmFyIGQ9W107UndbYl18fGQucHVzaChQdyk7ZC5wdXNoLmFwcGx5KGQscGEoUXdbYl0pKTtjJiYoUndbYl09ITApO3JldHVybiBkfTt2YXIgVXc9e30sVnc9e30sV3c9e307ZnVuY3Rpb24gWHcoYSxiLGMsZCl7cWomJlEoODMpJiYoKGQ9PT12b2lkIDA/MDpkKT8oV3dbYl09V3dbYl18fDAsKytXd1tiXSk6YyE9PXZvaWQgMD8oVndbYV09VndbYV18fHt9LFZ3W2FdW2JdPU1hdGgucm91bmQoYykpOihVd1thXT1Vd1thXXx8e30sVXdbYV1bYl09KFV3W2FdW2JdfHwwKSsxKSl9ZnVuY3Rpb24gWXcoYSl7dmFyIGI9YS5ldmVudElkLGM9YS5oYyxkPVV3W2JdfHx7fSxlPVtdLGY7Zm9yKGYgaW4gZClkLmhhc093blByb3BlcnR5KGYpJiZlLnB1c2goXCJcIitmK2RbZl0pO2MmJmRlbGV0ZSBVd1tiXTtyZXR1cm4gZS5sZW5ndGg/W1tcIm1kXCIsZS5qb2luKFwiLlwiKV1dOltdfVxuZnVuY3Rpb24gWncoYSl7dmFyIGI9YS5ldmVudElkLGM9YS5oYyxkPVZ3W2JdfHx7fSxlPVtdLGY7Zm9yKGYgaW4gZClkLmhhc093blByb3BlcnR5KGYpJiZlLnB1c2goXCJcIitmK2RbZl0pO2MmJmRlbGV0ZSBWd1tiXTtyZXR1cm4gZS5sZW5ndGg/W1tcIm10ZFwiLGUuam9pbihcIi5cIildXTpbXX1mdW5jdGlvbiAkdygpe2Zvcih2YXIgYT1bXSxiPW5hKE9iamVjdC5rZXlzKFd3KSksYz1iLm5leHQoKTshYy5kb25lO2M9Yi5uZXh0KCkpe3ZhciBkPWMudmFsdWU7YS5wdXNoKFwiXCIrZCtXd1tkXSl9cmV0dXJuIGEubGVuZ3RoP1tbXCJtZWNcIixhLmpvaW4oXCIuXCIpXV06W119O3ZhciBheD17fSxieD17fTtmdW5jdGlvbiBjeChhLGIsYyl7aWYocWomJmIpe3ZhciBkPWtqKGIpO2F4W2FdPWF4W2FdfHxbXTtheFthXS5wdXNoKGMrZCk7dmFyIGU9KHhmKGIpP1wiMVwiOlwiMlwiKStkO2J4W2FdPWJ4W2FdfHxbXTtieFthXS5wdXNoKGUpO2RtKGEpfX1mdW5jdGlvbiBkeChhKXt2YXIgYj1hLmV2ZW50SWQsYz1hLmhjLGQ9W10sZT1heFtiXXx8W107ZS5sZW5ndGgmJmQucHVzaChbXCJ0clwiLGUuam9pbihcIi5cIildKTt2YXIgZj1ieFtiXXx8W107Zi5sZW5ndGgmJmQucHVzaChbXCJ0aVwiLGYuam9pbihcIi5cIildKTtjJiYoZGVsZXRlIGF4W2JdLGRlbGV0ZSBieFtiXSk7cmV0dXJuIGR9O2Z1bmN0aW9uIGV4KGEsYixjLGQpe3ZhciBlPWtmW2FdLGY9ZngoYSxiLGMsZCk7aWYoIWYpcmV0dXJuIG51bGw7dmFyIGc9eWYoZVtJZS5zal0sYyxbXSk7aWYoZyYmZy5sZW5ndGgpe3ZhciBrPWdbMF07Zj1leChrLmluZGV4LHtvblN1Y2Nlc3M6ZixvbkZhaWx1cmU6ay5Eaj09PTE/Yi50ZXJtaW5hdGU6Zix0ZXJtaW5hdGU6Yi50ZXJtaW5hdGV9LGMsZCl9cmV0dXJuIGZ9XG5mdW5jdGlvbiBmeChhLGIsYyxkKXtmdW5jdGlvbiBlKCl7ZnVuY3Rpb24gdygpe0trKDMpO3ZhciBJPUJiKCktSDtjeChjLmlkLGYsXCI3XCIpO0F3KGMuYWMsQixcImV4Y2VwdGlvblwiLEkpO1EoNzQpJiZ6dihjLGYsSXUuSy50aik7Q3x8KEM9ITAsaygpKX1pZihmW0llLlFrXSlrKCk7ZWxzZXt2YXIgeD13ZihmLGMsW10pLHk9eFtJZS5wa107aWYoeSE9bnVsbClmb3IodmFyIEE9MDtBPHkubGVuZ3RoO0ErKylpZighVyh5W0FdKSl7aygpO3JldHVybn12YXIgQj16dyhjLmFjLFN0cmluZyhmW0llLm1hXSksTnVtYmVyKGZbSWUudGVdKSx4W0llLk1FVEFEQVRBXSksQz0hMTt4LnZ0cF9ndG1PblN1Y2Nlc3M9ZnVuY3Rpb24oKXtpZighQyl7Qz0hMDt2YXIgST1CYigpLUg7Y3goYy5pZCxrZlthXSxcIjVcIik7QXcoYy5hYyxCLFwic3VjY2Vzc1wiLEkpO1EoNzQpJiZ6dihjLGYsSXUuSy52aik7ZygpfX07eC52dHBfZ3RtT25GYWlsdXJlPWZ1bmN0aW9uKCl7aWYoIUMpe0M9ITA7dmFyIEk9QmIoKS1cbkg7Y3goYy5pZCxrZlthXSxcIjZcIik7QXcoYy5hYyxCLFwiZmFpbHVyZVwiLEkpO1EoNzQpJiZ6dihjLGYsSXUuSy51aik7aygpfX07eC52dHBfZ3RtVGFnSWQ9Zi50YWdfaWQ7eC52dHBfZ3RtRXZlbnRJZD1jLmlkO2MucHJpb3JpdHlJZCYmKHgudnRwX2d0bVByaW9yaXR5SWQ9Yy5wcmlvcml0eUlkKTtjeChjLmlkLGYsXCIxXCIpO1EoNzQpJiZ5dihjLGYpO3ZhciBIPUJiKCk7dHJ5e3pmKHgse2V2ZW50OmMsaW5kZXg6YSx0eXBlOjF9KX1jYXRjaChJKXt3KEkpfVEoNzQpJiZ6dihjLGYsSXUuSy53ail9fXZhciBmPWtmW2FdLGc9Yi5vblN1Y2Nlc3Msaz1iLm9uRmFpbHVyZSxtPWIudGVybWluYXRlO2lmKGMuaXNCbG9ja2VkKGYpKXJldHVybiBudWxsO3ZhciBuPXlmKGZbSWUueGpdLGMsW10pO2lmKG4mJm4ubGVuZ3RoKXt2YXIgcD1uWzBdLHE9ZXgocC5pbmRleCx7b25TdWNjZXNzOmcsb25GYWlsdXJlOmssdGVybWluYXRlOm19LGMsZCk7aWYoIXEpcmV0dXJuIG51bGw7Zz1xO2s9cC5Eaj09PVxuMj9tOnF9aWYoZltJZS5ral18fGZbSWUuU2tdKXt2YXIgcj1mW0llLmtqXT9sZjpjLlRtLHQ9Zyx1PWs7aWYoIXJbYV0pe3ZhciB2PWd4KGEscixEYihlKSk7Zz12Lm9uU3VjY2VzcztrPXYub25GYWlsdXJlfXJldHVybiBmdW5jdGlvbigpe3JbYV0odCx1KX19cmV0dXJuIGV9ZnVuY3Rpb24gZ3goYSxiLGMpe3ZhciBkPVtdLGU9W107YlthXT1oeChkLGUsYyk7cmV0dXJue29uU3VjY2VzczpmdW5jdGlvbigpe2JbYV09aXg7Zm9yKHZhciBmPTA7ZjxkLmxlbmd0aDtmKyspZFtmXSgpfSxvbkZhaWx1cmU6ZnVuY3Rpb24oKXtiW2FdPWp4O2Zvcih2YXIgZj0wO2Y8ZS5sZW5ndGg7ZisrKWVbZl0oKX19fWZ1bmN0aW9uIGh4KGEsYixjKXtyZXR1cm4gZnVuY3Rpb24oZCxlKXthLnB1c2goZCk7Yi5wdXNoKGUpO2MoKX19ZnVuY3Rpb24gaXgoYSl7YSgpfWZ1bmN0aW9uIGp4KGEsYil7YigpfTt2YXIgbXg9ZnVuY3Rpb24oYSxiKXtmb3IodmFyIGM9W10sZD0wO2Q8a2YubGVuZ3RoO2QrKylpZihhW2RdKXt2YXIgZT1rZltkXTt2YXIgZj1DdyhiLmFjKTt0cnl7dmFyIGc9ZXgoZCx7b25TdWNjZXNzOmYsb25GYWlsdXJlOmYsdGVybWluYXRlOmZ9LGIsZCk7aWYoZyl7dmFyIGs9ZVtJZS5tYV07aWYoIWspdGhyb3cgRXJyb3IoXCJFcnJvcjogTm8gZnVuY3Rpb24gbmFtZSBnaXZlbiBmb3IgZnVuY3Rpb24gY2FsbC5cIik7dmFyIG09bWZba107Yy5wdXNoKHtmazpkLFVqOihtP20ucHJpb3JpdHlPdmVycmlkZXx8MDowKXx8VXYoZVtJZS5tYV0sMSl8fDAsZXhlY3V0ZTpnfSl9ZWxzZSBreChkLGIpLGYoKX1jYXRjaChwKXtmKCl9fWMuc29ydChseCk7Zm9yKHZhciBuPTA7bjxjLmxlbmd0aDtuKyspY1tuXS5leGVjdXRlKCk7cmV0dXJuIGMubGVuZ3RoPlxuMH07ZnVuY3Rpb24gbHgoYSxiKXt2YXIgYyxkPWIuVWosZT1hLlVqO2M9ZD5lPzE6ZDxlPy0xOjA7dmFyIGY7aWYoYyE9PTApZj1jO2Vsc2V7dmFyIGc9YS5mayxrPWIuZms7Zj1nPms/MTpnPGs/LTE6MH1yZXR1cm4gZn1cbmZ1bmN0aW9uIGt4KGEsYil7aWYocWope3ZhciBjPWZ1bmN0aW9uKGQpe3ZhciBlPWIuaXNCbG9ja2VkKGtmW2RdKT9cIjNcIjpcIjRcIixmPXlmKGtmW2RdW0llLnNqXSxiLFtdKTtmJiZmLmxlbmd0aCYmYyhmWzBdLmluZGV4KTtjeChiLmlkLGtmW2RdLGUpO3ZhciBnPXlmKGtmW2RdW0llLnhqXSxiLFtdKTtnJiZnLmxlbmd0aCYmYyhnWzBdLmluZGV4KX07YyhhKX19dmFyIHB4PSExLG54O1xudmFyIHZ4PWZ1bmN0aW9uKGEpe3ZhciBiPWFbXCJndG0udW5pcXVlRXZlbnRJZFwiXSxjPWFbXCJndG0ucHJpb3JpdHlJZFwiXSxkPWEuZXZlbnQ7aWYoUSg3NCkpe31pZihkPT09XCJndG0uanNcIil7aWYocHgpcmV0dXJuITE7cHg9ITB9dmFyIGU9ITEsZj1ZdigpLGc9aChhKTtpZighZi5ldmVyeShmdW5jdGlvbih0KXtyZXR1cm4gdCh7b3JpZ2luYWxFdmVudERhdGE6Z30pfSkpe2lmKGQhPT1cImd0bS5qc1wiJiZkIT09XCJndG0uaW5pdFwiJiZkIT09XCJndG0uaW5pdF9jb25zZW50XCIpcmV0dXJuITE7ZT0hMH1TdyhiLGQpO3ZhciBrPWEuZXZlbnRDYWxsYmFjayxtPWEuZXZlbnRUaW1lb3V0LG49e2lkOmIsXG5wcmlvcml0eUlkOmMsbmFtZTpkLGlzQmxvY2tlZDpyeChnLGUpLFRtOltdLGxvZ01hY3JvRXJyb3I6ZnVuY3Rpb24oKXtNKDYpO0trKDApfSxjYWNoZWRNb2RlbFZhbHVlczpzeCgpLGFjOm5ldyB5dyhmdW5jdGlvbigpe2lmKFEoNzQpKXt9ayYmXG5rLmFwcGx5KGssW10uc2xpY2UuY2FsbChhcmd1bWVudHMsMCkpfSxtKSxvcmlnaW5hbEV2ZW50RGF0YTpnfTtRKDgzKSYmcWomJihuLnJlcG9ydE1hY3JvRGlzY3JlcGFuY3k9WHcpO1EoNzQpJiZ1dihuLmlkLG4ubmFtZSk7dmFyIHA9RmYobik7USg3NCkmJnZ2KG4uaWQsbi5uYW1lKTtlJiYocD10eChwKSk7aWYoUSg3NCkpe312YXIgcT1teChwLG4pLHI9ITE7RHcobi5hYyk7ZCE9PVwiZ3RtLmpzXCImJmQhPT1cImd0bS5zeW5jXCJ8fEp3KCk7cmV0dXJuIHV4KHAscSl8fHJ9O2Z1bmN0aW9uIHN4KCl7dmFyIGE9e307YS5ldmVudD1PaShcImV2ZW50XCIsMSk7YS5lY29tbWVyY2U9T2koXCJlY29tbWVyY2VcIiwxKTthLmd0bT1PaShcImd0bVwiKTthLmV2ZW50TW9kZWw9T2koXCJldmVudE1vZGVsXCIpO3JldHVybiBhfVxuZnVuY3Rpb24gcngoYSxiKXt2YXIgYz1ldygpO3JldHVybiBmdW5jdGlvbihkKXtpZihjKGQpKXJldHVybiEwO3ZhciBlPWQmJmRbSWUubWFdO2lmKCFlfHx0eXBlb2YgZSE9XCJzdHJpbmdcIilyZXR1cm4hMDtlPWUucmVwbGFjZSgvXl8qLyxcIlwiKTt2YXIgZixnPUlqKCk7Zj1XdigpLmdldFJlc3RyaWN0aW9ucygwLGcpO3ZhciBrPWE7YiYmKGs9aChhKSxrW1wiZ3RtLnVuaXF1ZUV2ZW50SWRcIl09TnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIpO2Zvcih2YXIgbT15aVtlXXx8W10sbj1uYShmKSxwPW4ubmV4dCgpOyFwLmRvbmU7cD1uLm5leHQoKSl7dmFyIHE9cC52YWx1ZTt0cnl7aWYoIXEoe2VudGl0eUlkOmUsc2VjdXJpdHlHcm91cHM6bSxvcmlnaW5hbEV2ZW50RGF0YTprfSkpcmV0dXJuITB9Y2F0Y2gocil7cmV0dXJuITB9fXJldHVybiExfX1cbmZ1bmN0aW9uIHR4KGEpe2Zvcih2YXIgYj1bXSxjPTA7YzxhLmxlbmd0aDtjKyspaWYoYVtjXSl7dmFyIGQ9U3RyaW5nKGtmW2NdW0llLm1hXSk7aWYoamlbZF18fGtmW2NdW0llLlRrXSE9PXZvaWQgMHx8VXYoZCwyKSliW2NdPSEwfXJldHVybiBifWZ1bmN0aW9uIHV4KGEsYil7aWYoIWIpcmV0dXJuIGI7Zm9yKHZhciBjPTA7YzxhLmxlbmd0aDtjKyspaWYoYVtjXSYma2ZbY10mJiFraVtTdHJpbmcoa2ZbY11bSWUubWFdKV0pcmV0dXJuITA7cmV0dXJuITF9dmFyIHd4PTA7ZnVuY3Rpb24geHgoYSxiKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD09PTE/eXgoXCJzZXRcIixhKTp5eChcInNldFwiLGEsYil9ZnVuY3Rpb24gengoYSxiKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD09PTE/eXgoXCJjb25maWdcIixhKTp5eChcImNvbmZpZ1wiLGEsYil9ZnVuY3Rpb24gQXgoYSxiLGMpe2M9Y3x8e307Y1tULmcuWGJdPWE7cmV0dXJuIHl4KFwiZXZlbnRcIixiLGMpfWZ1bmN0aW9uIHl4KCl7cmV0dXJuIGFyZ3VtZW50c307dmFyIEd4PWZ1bmN0aW9uKCl7dGhpcy5tZXNzYWdlcz1bXTt0aGlzLmo9W119O0d4LnByb3RvdHlwZS5lbnF1ZXVlPWZ1bmN0aW9uKGEsYixjKXt2YXIgZD10aGlzLm1lc3NhZ2VzLmxlbmd0aCsxO2FbXCJndG0udW5pcXVlRXZlbnRJZFwiXT1iO2FbXCJndG0ucHJpb3JpdHlJZFwiXT1kO3ZhciBlPU9iamVjdC5hc3NpZ24oe30sYyx7ZXZlbnRJZDpiLHByaW9yaXR5SWQ6ZCxmcm9tQ29udGFpbmVyRXhlY3V0aW9uOiEwfSksZj17bWVzc2FnZTphLG5vdEJlZm9yZUV2ZW50SWQ6Yixwcmlvcml0eUlkOmQsbWVzc2FnZUNvbnRleHQ6ZX07dGhpcy5tZXNzYWdlcy5wdXNoKGYpO2Zvcih2YXIgZz0wO2c8dGhpcy5qLmxlbmd0aDtnKyspdHJ5e3RoaXMualtnXShmKX1jYXRjaChrKXt9fTtHeC5wcm90b3R5cGUubGlzdGVuPWZ1bmN0aW9uKGEpe3RoaXMuai5wdXNoKGEpfTtcbkd4LnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24oKXtmb3IodmFyIGE9e30sYj0wO2I8dGhpcy5tZXNzYWdlcy5sZW5ndGg7YisrKXt2YXIgYz10aGlzLm1lc3NhZ2VzW2JdLGQ9YVtjLm5vdEJlZm9yZUV2ZW50SWRdO2R8fChkPVtdLGFbYy5ub3RCZWZvcmVFdmVudElkXT1kKTtkLnB1c2goYyl9cmV0dXJuIGF9O0d4LnByb3RvdHlwZS5wcnVuZT1mdW5jdGlvbihhKXtmb3IodmFyIGI9W10sYz1bXSxkPTA7ZDx0aGlzLm1lc3NhZ2VzLmxlbmd0aDtkKyspe3ZhciBlPXRoaXMubWVzc2FnZXNbZF07ZS5ub3RCZWZvcmVFdmVudElkPT09YT9iLnB1c2goZSk6Yy5wdXNoKGUpfXRoaXMubWVzc2FnZXM9YztyZXR1cm4gYn07ZnVuY3Rpb24gSHgoYSxiLGMpe2MuZXZlbnRNZXRhZGF0YT1jLmV2ZW50TWV0YWRhdGF8fHt9O2MuZXZlbnRNZXRhZGF0YS5zb3VyY2VfY2Fub25pY2FsX2lkPU9mLmNhbm9uaWNhbENvbnRhaW5lcklkO0l4KCkuZW5xdWV1ZShhLGIsYyl9XG5mdW5jdGlvbiBKeCgpe3ZhciBhPUt4O0l4KCkubGlzdGVuKGEpfWZ1bmN0aW9uIEl4KCl7dmFyIGE9aWkubWI7YXx8KGE9bmV3IEd4LGlpLm1iPWEpO3JldHVybiBhfTt2YXIgTHg9e30sTXg9e307ZnVuY3Rpb24gTngoYSxiKXtmb3IodmFyIGM9W10sZD1bXSxlPXt9LGY9MDtmPGEubGVuZ3RoO2U9e0VoOnZvaWQgMCxuaDp2b2lkIDB9LGYrKyl7dmFyIGc9YVtmXTtpZihnLmluZGV4T2YoXCItXCIpPj0wKXtpZihlLkVoPWpsKGcsYiksZS5FaCl7dmFyIGs9RWooKTtyYihrLGZ1bmN0aW9uKHIpe3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gci5FaC5kZXN0aW5hdGlvbklkPT09dH19KGUpKT9jLnB1c2goZyk6ZC5wdXNoKGcpfX1lbHNle3ZhciBtPUx4W2ddfHxbXTtlLm5oPXt9O20uZm9yRWFjaChmdW5jdGlvbihyKXtyZXR1cm4gZnVuY3Rpb24odCl7ci5uaFt0XT0hMH19KGUpKTtmb3IodmFyIG49QmooKSxwPTA7cDxuLmxlbmd0aDtwKyspaWYoZS5uaFtuW3BdXSl7Yz1jLmNvbmNhdChFaigpKTticmVha312YXIgcT1NeFtnXXx8W107cS5sZW5ndGgmJihjPWMuY29uY2F0KHEpKX19cmV0dXJue2ttOmMsb206ZH19XG5mdW5jdGlvbiBPeChhKXt6KEx4LGZ1bmN0aW9uKGIsYyl7dmFyIGQ9Yy5pbmRleE9mKGEpO2Q+PTAmJmMuc3BsaWNlKGQsMSl9KX1mdW5jdGlvbiBQeChhKXt6KE14LGZ1bmN0aW9uKGIsYyl7dmFyIGQ9Yy5pbmRleE9mKGEpO2Q+PTAmJmMuc3BsaWNlKGQsMSl9KX12YXIgUXg9XCJIQSBHRiBHIFVBIEFXIERDIE1DXCIuc3BsaXQoXCIgXCIpLFJ4PSExLFN4PSExLFR4PSExLFV4PSExO2Z1bmN0aW9uIFZ4KGEsYil7YS5oYXNPd25Qcm9wZXJ0eShcImd0bS51bmlxdWVFdmVudElkXCIpfHxPYmplY3QuZGVmaW5lUHJvcGVydHkoYSxcImd0bS51bmlxdWVFdmVudElkXCIse3ZhbHVlOnppKCl9KTtiLmV2ZW50SWQ9YVtcImd0bS51bmlxdWVFdmVudElkXCJdO2IucHJpb3JpdHlJZD1hW1wiZ3RtLnByaW9yaXR5SWRcIl07cmV0dXJue2V2ZW50SWQ6Yi5ldmVudElkLHByaW9yaXR5SWQ6Yi5wcmlvcml0eUlkfX12YXIgV3g9dm9pZCAwLFh4PXZvaWQgMDtcbmZ1bmN0aW9uIFl4KGEsYixjKXt2YXIgZD1oKGEsbnVsbCk7ZC5ldmVudElkPXZvaWQgMDtkLmluaGVyaXRQYXJlbnRDb25maWc9dm9pZCAwO09iamVjdC5rZXlzKGIpLnNvbWUoZnVuY3Rpb24oZil7cmV0dXJuIGJbZl0hPT12b2lkIDB9KSYmTSgxMzYpO3ZhciBlPWgoYixudWxsKTtoKGMsZSk7SHgoengoQmooKVswXSxlKSxhLmV2ZW50SWQsZCl9ZnVuY3Rpb24gWngoYSl7Zm9yKHZhciBiPW5hKFtULmcuaGQsVC5nLkxiXSksYz1iLm5leHQoKTshYy5kb25lO2M9Yi5uZXh0KCkpe3ZhciBkPWMudmFsdWUsZT1hJiZhW2RdfHxsbS5qW2RdO2lmKGUpcmV0dXJuIGV9fVxudmFyICR4PVtULmcuaGQsVC5nLkxiLFQuZy51YyxULmcubmIsVC5nLnViLFQuZy56YSxULmcucWEsVC5nLk5hLFQuZy5WYSxULmcuRmJdLGF5PXtjb25maWc6ZnVuY3Rpb24oYSxiKXt2YXIgYz1WeChhLGIpO2lmKCEoYS5sZW5ndGg8MikmJmwoYVsxXSkpe3ZhciBkPXt9O2lmKGEubGVuZ3RoPjIpe2lmKGFbMl0hPT12b2lkIDAmJiFTYShhWzJdKXx8YS5sZW5ndGg+MylyZXR1cm47ZD1hWzJdfXZhciBlPWpsKGFbMV0sYi5pc0d0bUV2ZW50KTtpZihlKXt2YXIgZixnLGs7YTp7aWYoIXpqLm1lKXt2YXIgbT1LaihMaigpKTtpZihaaihtKSl7dmFyIG49bS5wYXJlbnQscD1uLmlzRGVzdGluYXRpb247az17em06S2oobiksam06cH07YnJlYWsgYX19az12b2lkIDB9dmFyIHE9aztxJiYoZj1xLnptLGc9cS5qbSk7U3coYy5ldmVudElkLFwiZ3RhZy5jb25maWdcIik7dmFyIHI9ZS5kZXN0aW5hdGlvbklkLHQ9ZS5pZCE9PXI7aWYodD9FaigpLmluZGV4T2Yocik9PT0tMTpCaigpLmluZGV4T2Yocik9PT1cbi0xKXtpZighYi5pbmhlcml0UGFyZW50Q29uZmlnJiYhZFtULmcuSWJdKXt2YXIgdT1aeChkKTtpZih0KWt3KHIsdSx7c291cmNlOjIsZnJvbUNvbnRhaW5lckV4ZWN1dGlvbjpiLmZyb21Db250YWluZXJFeGVjdXRpb259KTtlbHNlIGlmKGYhPT12b2lkIDAmJmYuY29udGFpbmVycy5pbmRleE9mKHIpIT09LTEpe3ZhciB2PWQ7V3g/WXgoYix2LFd4KTpYeHx8KFh4PWgodixudWxsKSl9ZWxzZSBodyhyLHUsITAse3NvdXJjZToyLGZyb21Db250YWluZXJFeGVjdXRpb246Yi5mcm9tQ29udGFpbmVyRXhlY3V0aW9ufSl9fWVsc2V7aWYoZiYmKE0oMTI4KSxnJiZNKDEzMCksYi5pbmhlcml0UGFyZW50Q29uZmlnKSl7dmFyIHc7dmFyIHg9ZDtYeD8oWXgoYixYeCx4KSx3PSExKTooIXhbVC5nLlliXSYmbWkmJld4fHwoV3g9aCh4LG51bGwpKSx3PSEwKTt3JiZmLmNvbnRhaW5lcnMmJmYuY29udGFpbmVycy5qb2luKFwiLFwiKTtyZXR1cm59dmFyIHk9ZDtpZighVHgmJihUeD0hMCxTeCkpZm9yKHZhciBBPVxubmEoJHgpLEI9QS5uZXh0KCk7IUIuZG9uZTtCPUEubmV4dCgpKWlmKHkuaGFzT3duUHJvcGVydHkoQi52YWx1ZSkpe0prKFwiZXJjXCIpO2JyZWFrfXJqJiYhQWomJih3eD09PTEmJihkay5tY2M9ITEpLHd4PTIpO0drPSEwO2lmKG1pJiYhdCYmIWRbVC5nLlliXSl7dmFyIEM9VXg7VXg9ITA7aWYoQylyZXR1cm59Unh8fE0oNDMpO2lmKCFiLm5vVGFyZ2V0R3JvdXApaWYodCl7UHgoZS5pZCk7dmFyIEg9ZS5pZCxJPWRbVC5nLldkXXx8XCJkZWZhdWx0XCI7ST1TdHJpbmcoSSkuc3BsaXQoXCIsXCIpO2Zvcih2YXIgRj0wO0Y8SS5sZW5ndGg7RisrKXt2YXIgTz1NeFtJW0ZdXXx8W107TXhbSVtGXV09TztPLmluZGV4T2YoSCk8MCYmTy5wdXNoKEgpfX1lbHNle094KGUuaWQpO3ZhciBOPWUuaWQsUz1kW1QuZy5XZF18fFwiZGVmYXVsdFwiO1M9Uy50b1N0cmluZygpLnNwbGl0KFwiLFwiKTtmb3IodmFyIFY9MDtWPFMubGVuZ3RoO1YrKyl7dmFyIGFhPUx4W1NbVl1dfHxbXTtMeFtTW1ZdXT1hYTthYS5pbmRleE9mKE4pPFxuMCYmYWEucHVzaChOKX19ZGVsZXRlIGRbVC5nLldkXTt2YXIgWD1iLmV2ZW50TWV0YWRhdGF8fHt9O1guaGFzT3duUHJvcGVydHkoXCJpc19leHRlcm5hbF9ldmVudFwiKXx8KFguaXNfZXh0ZXJuYWxfZXZlbnQ9IWIuZnJvbUNvbnRhaW5lckV4ZWN1dGlvbik7Yi5ldmVudE1ldGFkYXRhPVg7ZGVsZXRlIGRbVC5nLlpjXTtmb3IodmFyIFI9dD9bZS5pZF06RWooKSxtYT0wO21hPFIubGVuZ3RoO21hKyspe3ZhciBsYT1kLGVhPVJbbWFdLHdhPWgoYixudWxsKSxPYT1qbChlYSx3YS5pc0d0bUV2ZW50KTtPYSYmbG0ucHVzaChcImNvbmZpZ1wiLFtsYV0sT2Esd2EpfX19fX0sY29uc2VudDpmdW5jdGlvbihhLGIpe2lmKGEubGVuZ3RoPT09Myl7TSgzOSk7dmFyIGM9VngoYSxiKSxkPWFbMV0sZT1hWzJdO2IuZnJvbUNvbnRhaW5lckV4ZWN1dGlvbnx8KGVbVC5nLk9dJiZNKDEzOSksZVtULmcud2FdJiZNKDE0MCkpO2Q9PT1cImRlZmF1bHRcIj9YayhlKTpkPT09XCJ1cGRhdGVcIj9aayhlLGMpOmQ9PT1cblwiZGVjbGFyZVwiJiZiLmZyb21Db250YWluZXJFeGVjdXRpb24mJldrKGUpfX0sZXZlbnQ6ZnVuY3Rpb24oYSxiKXt2YXIgYz1hWzFdO2lmKCEoYS5sZW5ndGg8MikmJmwoYykpe3ZhciBkPXZvaWQgMDtpZihhLmxlbmd0aD4yKXtpZighU2EoYVsyXSkmJmFbMl0hPT12b2lkIDB8fGEubGVuZ3RoPjMpcmV0dXJuO2Q9YVsyXX12YXIgZT1kLGY9e30sZz0oZi5ldmVudD1jLGYpO2UmJihnLmV2ZW50TW9kZWw9aChlLG51bGwpLGVbVC5nLlpjXSYmKGcuZXZlbnRDYWxsYmFjaz1lW1QuZy5aY10pLGVbVC5nLlRkXSYmKGcuZXZlbnRUaW1lb3V0PWVbVC5nLlRkXSkpO3ZhciBrPVZ4KGEsYiksbT1rLmV2ZW50SWQsbj1rLnByaW9yaXR5SWQ7Z1tcImd0bS51bmlxdWVFdmVudElkXCJdPW07biYmKGdbXCJndG0ucHJpb3JpdHlJZFwiXT1uKTtpZihjPT09XCJvcHRpbWl6ZS5jYWxsYmFja1wiKXJldHVybiBnLmV2ZW50TW9kZWw9Zy5ldmVudE1vZGVsfHx7fSxnO3ZhciBwO3ZhciBxPWQscj1xJiZxW1QuZy5YYl07XG5yPT09dm9pZCAwJiYocj1KaShULmcuWGIsMikscj09PXZvaWQgMCYmKHI9XCJkZWZhdWx0XCIpKTtpZihsKHIpfHxBcnJheS5pc0FycmF5KHIpKXt2YXIgdDt0PWIuaXNHdG1FdmVudD9sKHIpP1tyXTpyOnIudG9TdHJpbmcoKS5yZXBsYWNlKC9cXHMrL2csXCJcIikuc3BsaXQoXCIsXCIpO3ZhciB1PU54KHQsYi5pc0d0bUV2ZW50KSx2PXUua20sdz11Lm9tO2lmKHcubGVuZ3RoKWZvcih2YXIgeD1aeChxKSx5PTA7eTx3Lmxlbmd0aDt5Kyspe3ZhciBBPWpsKHdbeV0sYi5pc0d0bUV2ZW50KTtBJiZrdyhBLmRlc3RpbmF0aW9uSWQseCx7c291cmNlOjMsZnJvbUNvbnRhaW5lckV4ZWN1dGlvbjpiLmZyb21Db250YWluZXJFeGVjdXRpb259KX1wPWtsKHYsYi5pc0d0bUV2ZW50KX1lbHNlIHA9dm9pZCAwO3ZhciBCPXA7aWYoQil7dmFyIEM7IUIubGVuZ3RofHwoKEM9Yi5ldmVudE1ldGFkYXRhKT09bnVsbD8wOkMuZW1fZXZlbnQpfHwoU3g9ITApO1N3KG0sYyk7Zm9yKHZhciBIPVtdLEk9MDtJPEIubGVuZ3RoO0krKyl7dmFyIEY9XG5CW0ldLE89aChiLG51bGwpO2lmKFF4LmluZGV4T2YoTWooRi5wcmVmaXgpKSE9PS0xKXt2YXIgTj1oKGQsbnVsbCksUz1PLmV2ZW50TWV0YWRhdGF8fHt9O1MuaGFzT3duUHJvcGVydHkoXCJpc19leHRlcm5hbF9ldmVudFwiKXx8KFMuaXNfZXh0ZXJuYWxfZXZlbnQ9IU8uZnJvbUNvbnRhaW5lckV4ZWN1dGlvbik7Ty5ldmVudE1ldGFkYXRhPVM7ZGVsZXRlIE5bVC5nLlpjXTttbShjLE4sRi5pZCxPKTtyaiYmIUFqJiZ3eD09PTAmJihmayhcIm1jY1wiLFwiMVwiKSx3eD0xKTtHaz0hMH1ILnB1c2goRi5pZCl9Zy5ldmVudE1vZGVsPWcuZXZlbnRNb2RlbHx8e307Qi5sZW5ndGg+MD9nLmV2ZW50TW9kZWxbVC5nLlhiXT1ILmpvaW4oKTpkZWxldGUgZy5ldmVudE1vZGVsW1QuZy5YYl07Unh8fE0oNDMpO2Iubm9HdG1FdmVudD09PXZvaWQgMCYmYi5ldmVudE1ldGFkYXRhJiZiLmV2ZW50TWV0YWRhdGEuc3luX29yX21vZCYmKGIubm9HdG1FdmVudD0hMCk7Zy5ldmVudE1vZGVsW1QuZy5WYl0mJihiLm5vR3RtRXZlbnQ9XG4hMCk7cmV0dXJuIGIubm9HdG1FdmVudD92b2lkIDA6Z319fSxnZXQ6ZnVuY3Rpb24oYSxiKXtNKDUzKTtpZihhLmxlbmd0aD09PTQmJmwoYVsxXSkmJmwoYVsyXSkmJm9iKGFbM10pKXt2YXIgYz1qbChhWzFdLGIuaXNHdG1FdmVudCksZD1TdHJpbmcoYVsyXSksZT1hWzNdO2lmKGMpe1J4fHxNKDQzKTt2YXIgZj1aeCgpO2lmKCFyYihFaigpLGZ1bmN0aW9uKGspe3JldHVybiBjLmRlc3RpbmF0aW9uSWQ9PT1rfSkpa3coYy5kZXN0aW5hdGlvbklkLGYse3NvdXJjZTo0LGZyb21Db250YWluZXJFeGVjdXRpb246Yi5mcm9tQ29udGFpbmVyRXhlY3V0aW9ufSk7ZWxzZSBpZihReC5pbmRleE9mKE1qKGMucHJlZml4KSkhPT0tMSl7R2s9ITA7VngoYSxiKTt2YXIgZz17fTtoKChnW1QuZy5yYl09ZCxnW1QuZy5HYl09ZSxnKSxudWxsKTtubShkLGZ1bmN0aW9uKGspe0coZnVuY3Rpb24oKXtlKGspfSl9LGMuaWQsYil9fX19LGpzOmZ1bmN0aW9uKGEsYil7aWYoYS5sZW5ndGg9PT0yJiZhWzFdLmdldFRpbWUpe1J4PVxuITA7dmFyIGM9VngoYSxiKSxkPWMuZXZlbnRJZCxlPWMucHJpb3JpdHlJZCxmPXt9O3JldHVybiBmLmV2ZW50PVwiZ3RtLmpzXCIsZltcImd0bS5zdGFydFwiXT1hWzFdLmdldFRpbWUoKSxmW1wiZ3RtLnVuaXF1ZUV2ZW50SWRcIl09ZCxmW1wiZ3RtLnByaW9yaXR5SWRcIl09ZSxmfX0scG9saWN5OmZ1bmN0aW9uKGEpe2lmKGEubGVuZ3RoPT09MyYmbChhWzFdKSYmb2IoYVsyXSkpe2lmKExmKGFbMV0sYVsyXSksTSg3NCksYVsxXT09PVwiYWxsXCIpe00oNzUpO3ZhciBiPSExO3RyeXtiPWFbMl0oR2ooKSxcInVua25vd25cIix7fSl9Y2F0Y2goYyl7fWJ8fE0oNzYpfX1lbHNlIE0oNzMpfSxzZXQ6ZnVuY3Rpb24oYSxiKXt2YXIgYz12b2lkIDA7YS5sZW5ndGg9PT0yJiZTYShhWzFdKT9jPWgoYVsxXSxudWxsKTphLmxlbmd0aD09PTMmJmwoYVsxXSkmJihjPXt9LFNhKGFbMl0pfHxBcnJheS5pc0FycmF5KGFbMl0pP2NbYVsxXV09aChhWzJdLG51bGwpOmNbYVsxXV09YVsyXSk7aWYoYyl7dmFyIGQ9VngoYSxcbmIpLGU9ZC5ldmVudElkLGY9ZC5wcmlvcml0eUlkO2goYyxudWxsKTt2YXIgZz1oKGMsbnVsbCk7bG0ucHVzaChcInNldFwiLFtnXSx2b2lkIDAsYik7Y1tcImd0bS51bmlxdWVFdmVudElkXCJdPWU7ZiYmKGNbXCJndG0ucHJpb3JpdHlJZFwiXT1mKTtkZWxldGUgYy5ldmVudDtiLm92ZXJ3cml0ZU1vZGVsRmllbGRzPSEwO3JldHVybiBjfX19LGJ5PXtwb2xpY3k6ITB9O3ZhciBkeT1mdW5jdGlvbihhKXtpZihjeShhKSlyZXR1cm4gYTt0aGlzLnZhbHVlPWF9O2R5LnByb3RvdHlwZS5nZXRVbnRydXN0ZWRNZXNzYWdlVmFsdWU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy52YWx1ZX07dmFyIGN5PWZ1bmN0aW9uKGEpe3JldHVybiFhfHxRYShhKSE9PVwib2JqZWN0XCJ8fFNhKGEpPyExOlwiZ2V0VW50cnVzdGVkTWVzc2FnZVZhbHVlXCJpbiBhfTtkeS5wcm90b3R5cGUuZ2V0VW50cnVzdGVkTWVzc2FnZVZhbHVlPWR5LnByb3RvdHlwZS5nZXRVbnRydXN0ZWRNZXNzYWdlVmFsdWU7dmFyIGV5PSExLGZ5PVtdO2Z1bmN0aW9uIGd5KCl7aWYoIWV5KXtleT0hMDtmb3IodmFyIGE9MDthPGZ5Lmxlbmd0aDthKyspRyhmeVthXSl9fWZ1bmN0aW9uIGh5KGEpe2V5P0coYSk6ZnkucHVzaChhKX07dmFyIGl5PTAsank9e30sa3k9W10sbHk9W10sbXk9ITEsbnk9ITE7ZnVuY3Rpb24gb3koYSxiKXtyZXR1cm4gYS5tZXNzYWdlQ29udGV4dC5ldmVudElkLWIubWVzc2FnZUNvbnRleHQuZXZlbnRJZHx8YS5tZXNzYWdlQ29udGV4dC5wcmlvcml0eUlkLWIubWVzc2FnZUNvbnRleHQucHJpb3JpdHlJZH1cbnZhciBweT1mdW5jdGlvbihhKXtyZXR1cm4gRFtoaS5oYl0ucHVzaChhKX0scXk9ZnVuY3Rpb24oYSxiLGMpe2EuZXZlbnRDYWxsYmFjaz1iO2MmJihhLmV2ZW50VGltZW91dD1jKTtyZXR1cm4gcHkoYSl9LHJ5PWZ1bmN0aW9uKGEsYil7aWYoIXBiKGIpfHxiPDApYj0wO3ZhciBjPWlpW2hpLmhiXSxkPTAsZT0hMSxmPXZvaWQgMDtmPUQuc2V0VGltZW91dChmdW5jdGlvbigpe2V8fChlPSEwLGEoKSk7Zj12b2lkIDB9LGIpO3JldHVybiBmdW5jdGlvbigpe3ZhciBnPWM/Yy5zdWJzY3JpYmVyczoxOysrZD09PWcmJihmJiYoRC5jbGVhclRpbWVvdXQoZiksZj12b2lkIDApLGV8fChhKCksZT0hMCkpfX07XG5mdW5jdGlvbiBzeShhLGIpe3ZhciBjPWEuX2NsZWFyfHxiLm92ZXJ3cml0ZU1vZGVsRmllbGRzO3ooYSxmdW5jdGlvbihlLGYpe2UhPT1cIl9jbGVhclwiJiYoYyYmTWkoZSksTWkoZSxmKSl9KTt2aXx8KHZpPWFbXCJndG0uc3RhcnRcIl0pO3ZhciBkPWFbXCJndG0udW5pcXVlRXZlbnRJZFwiXTtpZighYS5ldmVudClyZXR1cm4hMTt0eXBlb2YgZCE9PVwibnVtYmVyXCImJihkPXppKCksYVtcImd0bS51bmlxdWVFdmVudElkXCJdPWQsTWkoXCJndG0udW5pcXVlRXZlbnRJZFwiLGQpKTtyZXR1cm4gdngoYSl9ZnVuY3Rpb24gdHkoYSl7aWYoYT09bnVsbHx8dHlwZW9mIGEhPT1cIm9iamVjdFwiKXJldHVybiExO2lmKGEuZXZlbnQpcmV0dXJuITA7aWYodmIoYSkpe3ZhciBiPWFbMF07aWYoYj09PVwiY29uZmlnXCJ8fGI9PT1cImV2ZW50XCJ8fGI9PT1cImpzXCJ8fGI9PT1cImdldFwiKXJldHVybiEwfXJldHVybiExfVxuZnVuY3Rpb24gdXkoKXt2YXIgYTtpZihseS5sZW5ndGgpYT1seS5zaGlmdCgpO2Vsc2UgaWYoa3kubGVuZ3RoKWE9a3kuc2hpZnQoKTtlbHNlIHJldHVybjt2YXIgYjt2YXIgYz1hO2lmKG15fHwhdHkoYy5tZXNzYWdlKSliPWM7ZWxzZXtteT0hMDt2YXIgZD1jLm1lc3NhZ2VbXCJndG0udW5pcXVlRXZlbnRJZFwiXTt0eXBlb2YgZCE9PVwibnVtYmVyXCImJihkPWMubWVzc2FnZVtcImd0bS51bmlxdWVFdmVudElkXCJdPXppKCkpO3ZhciBlPXt9LGY9e21lc3NhZ2U6KGUuZXZlbnQ9XCJndG0uaW5pdF9jb25zZW50XCIsZVtcImd0bS51bmlxdWVFdmVudElkXCJdPWQtMixlKSxtZXNzYWdlQ29udGV4dDp7ZXZlbnRJZDpkLTJ9fSxnPXt9LGs9e21lc3NhZ2U6KGcuZXZlbnQ9XCJndG0uaW5pdFwiLGdbXCJndG0udW5pcXVlRXZlbnRJZFwiXT1kLTEsZyksbWVzc2FnZUNvbnRleHQ6e2V2ZW50SWQ6ZC0xfX07a3kudW5zaGlmdChrLGMpO2lmKHJqKXtpZighUSg5Mykpe3ZhciBtPW13KCk7bSYmbHcucHVzaChtKX1qaygpfWI9XG5mfXJldHVybiBifVxuZnVuY3Rpb24gdnkoKXtmb3IodmFyIGE9ITEsYjshbnkmJihiPXV5KCkpOyl7bnk9ITA7ZGVsZXRlIEdpLmV2ZW50TW9kZWw7SWkoKTt2YXIgYz1iLGQ9Yy5tZXNzYWdlLGU9Yy5tZXNzYWdlQ29udGV4dDtpZihkPT1udWxsKW55PSExO2Vsc2V7ZS5mcm9tQ29udGFpbmVyRXhlY3V0aW9uJiZOaSgpO3RyeXtpZihvYihkKSl0cnl7ZC5jYWxsKEtpKX1jYXRjaCh2KXt9ZWxzZSBpZihBcnJheS5pc0FycmF5KGQpKXt2YXIgZj1kO2lmKGwoZlswXSkpe3ZhciBnPWZbMF0uc3BsaXQoXCIuXCIpLGs9Zy5wb3AoKSxtPWYuc2xpY2UoMSksbj1KaShnLmpvaW4oXCIuXCIpLDIpO2lmKG4hPW51bGwpdHJ5e25ba10uYXBwbHkobixtKX1jYXRjaCh2KXt9fX1lbHNle3ZhciBwPXZvaWQgMDtpZih2YihkKSlhOntpZihkLmxlbmd0aCYmbChkWzBdKSl7dmFyIHE9YXlbZFswXV07aWYocSYmKCFlLmZyb21Db250YWluZXJFeGVjdXRpb258fCFieVtkWzBdXSkpe3A9cShkLGUpO2JyZWFrIGF9fXA9dm9pZCAwfWVsc2UgcD1cbmQ7cCYmKGE9c3kocCxlKXx8YSl9fWZpbmFsbHl7ZS5mcm9tQ29udGFpbmVyRXhlY3V0aW9uJiZJaSghMCk7dmFyIHI9ZFtcImd0bS51bmlxdWVFdmVudElkXCJdO2lmKHR5cGVvZiByPT09XCJudW1iZXJcIil7Zm9yKHZhciB0PWp5W1N0cmluZyhyKV18fFtdLHU9MDt1PHQubGVuZ3RoO3UrKylseS5wdXNoKHd5KHRbdV0pKTt0Lmxlbmd0aCYmbHkuc29ydChveSk7ZGVsZXRlIGp5W1N0cmluZyhyKV07cj5peSYmKGl5PXIpfW55PSExfX19cmV0dXJuIWF9XG5mdW5jdGlvbiB4eSgpe2lmKFEoNzQpKXt2YXIgYT15eSgpO312YXIgYj12eSgpO2lmKFEoNzQpKXt9dHJ5e3ZhciBjPUdqKCksZD1EW2hpLmhiXS5oaWRlO2lmKGQmJmRbY10hPT12b2lkIDAmJmQuZW5kKXtkW2NdPSExO3ZhciBlPSEwLGY7Zm9yKGYgaW4gZClpZihkLmhhc093blByb3BlcnR5KGYpJiZkW2ZdPT09XG4hMCl7ZT0hMTticmVha31lJiYoZC5lbmQoKSxkLmVuZD1udWxsKX19Y2F0Y2goZyl7fXJldHVybiBifWZ1bmN0aW9uIEt4KGEpe2lmKGl5PGEubm90QmVmb3JlRXZlbnRJZCl7dmFyIGI9U3RyaW5nKGEubm90QmVmb3JlRXZlbnRJZCk7anlbYl09anlbYl18fFtdO2p5W2JdLnB1c2goYSl9ZWxzZSBseS5wdXNoKHd5KGEpKSxseS5zb3J0KG95KSxHKGZ1bmN0aW9uKCl7bnl8fHZ5KCl9KX1mdW5jdGlvbiB3eShhKXtyZXR1cm57bWVzc2FnZTphLm1lc3NhZ2UsbWVzc2FnZUNvbnRleHQ6YS5tZXNzYWdlQ29udGV4dH19XG52YXIgenk9ZnVuY3Rpb24oKXtmdW5jdGlvbiBhKGYpe3ZhciBnPXt9O2lmKGN5KGYpKXt2YXIgaz1mO2Y9Y3koayk/ay5nZXRVbnRydXN0ZWRNZXNzYWdlVmFsdWUoKTp2b2lkIDA7Zy5mcm9tQ29udGFpbmVyRXhlY3V0aW9uPSEwfXJldHVybnttZXNzYWdlOmYsbWVzc2FnZUNvbnRleHQ6Z319dmFyIGI9c2MoaGkuaGIsW10pLGM9aWlbaGkuaGJdPWlpW2hpLmhiXXx8e307Yy5wcnVuZWQ9PT0hMCYmTSg4Myk7ank9SXgoKS5nZXQoKTtKeCgpO3V3KGZ1bmN0aW9uKCl7aWYoIWMuZ3RtRG9tKXtjLmd0bURvbT0hMDt2YXIgZj17fTtiLnB1c2goKGYuZXZlbnQ9XCJndG0uZG9tXCIsZikpfX0pO2h5KGZ1bmN0aW9uKCl7aWYoIWMuZ3RtTG9hZCl7Yy5ndG1Mb2FkPSEwO3ZhciBmPXt9O2IucHVzaCgoZi5ldmVudD1cImd0bS5sb2FkXCIsZikpfX0pO2Muc3Vic2NyaWJlcnM9KGMuc3Vic2NyaWJlcnN8fDApKzE7dmFyIGQ9Yi5wdXNoO2IucHVzaD1mdW5jdGlvbigpe3ZhciBmO2lmKGlpLlNBTkRCT1hFRF9KU19TRU1BUEhPUkU+XG4wKXtmPVtdO2Zvcih2YXIgZz0wO2c8YXJndW1lbnRzLmxlbmd0aDtnKyspZltnXT1uZXcgZHkoYXJndW1lbnRzW2ddKX1lbHNlIGY9W10uc2xpY2UuY2FsbChhcmd1bWVudHMsMCk7dmFyIGs9Zi5tYXAoZnVuY3Rpb24ocSl7cmV0dXJuIGEocSl9KTtreS5wdXNoLmFwcGx5KGt5LGspO3ZhciBtPWQuYXBwbHkoYixmKSxuPU1hdGgubWF4KDEwMCxOdW1iZXIoXCIxMDAwXCIpfHwzMDApO2lmKHRoaXMubGVuZ3RoPm4pZm9yKE0oNCksYy5wcnVuZWQ9ITA7dGhpcy5sZW5ndGg+bjspdGhpcy5zaGlmdCgpO3ZhciBwPXR5cGVvZiBtIT09XCJib29sZWFuXCJ8fG07cmV0dXJuIHZ5KCkmJnB9O3ZhciBlPWIuc2xpY2UoMCkubWFwKGZ1bmN0aW9uKGYpe3JldHVybiBhKGYpfSk7a3kucHVzaC5hcHBseShreSxlKTtpZih5eSgpKXtpZihRKDc0KSl7fUcoeHkpfX0seXk9ZnVuY3Rpb24oKXt2YXIgYT0hMDtyZXR1cm4gYX07ZnVuY3Rpb24gQXkoYSl7aWYoYT09bnVsbHx8YS5sZW5ndGg9PT0wKXJldHVybiExO3ZhciBiPU51bWJlcihhKSxjPUJiKCk7cmV0dXJuIGI8YyszRTUmJmI+Yy05RTV9ZnVuY3Rpb24gQnkoYSl7cmV0dXJuIGEmJmEuaW5kZXhPZihcInBlbmRpbmc6XCIpPT09MD9BeShhLnN1YnN0cig4KSk6ITF9O1xudmFyIFd5PWZ1bmN0aW9uKCl7fTt2YXIgWHk9ZnVuY3Rpb24oKXt9O1h5LnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVyblwidW5kZWZpbmVkXCJ9O3ZhciBZeT1uZXcgWHk7ZnVuY3Rpb24gZXooYSxiKXtmdW5jdGlvbiBjKGcpe3ZhciBrPWFqKGcpLG09VmkoayxcInByb3RvY29sXCIpLG49VmkoayxcImhvc3RcIiwhMCkscD1WaShrLFwicG9ydFwiKSxxPVZpKGssXCJwYXRoXCIpLnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvXFwvJC8sXCJcIik7aWYobT09PXZvaWQgMHx8bT09PVwiaHR0cFwiJiZwPT09XCI4MFwifHxtPT09XCJodHRwc1wiJiZwPT09XCI0NDNcIiltPVwid2ViXCIscD1cImRlZmF1bHRcIjtyZXR1cm5bbSxuLHAscV19Zm9yKHZhciBkPWMoU3RyaW5nKGEpKSxlPWMoU3RyaW5nKGIpKSxmPTA7ZjxkLmxlbmd0aDtmKyspaWYoZFtmXSE9PWVbZl0pcmV0dXJuITE7cmV0dXJuITB9XG5mdW5jdGlvbiBmeihhKXtyZXR1cm4gZ3ooYSk/MTowfVxuZnVuY3Rpb24gZ3ooYSl7dmFyIGI9YS5hcmcwLGM9YS5hcmcxO2lmKGEuYW55X29mJiZBcnJheS5pc0FycmF5KGMpKXtmb3IodmFyIGQ9MDtkPGMubGVuZ3RoO2QrKyl7dmFyIGU9aChhLHt9KTtoKHthcmcxOmNbZF0sYW55X29mOnZvaWQgMH0sZSk7aWYoZnooZSkpcmV0dXJuITB9cmV0dXJuITF9c3dpdGNoKGFbXCJmdW5jdGlvblwiXSl7Y2FzZSBcIl9jblwiOnJldHVybiBuZyhiLGMpO2Nhc2UgXCJfY3NzXCI6dmFyIGY7YTp7aWYoYil0cnl7Zm9yKHZhciBnPTA7ZzxqZy5sZW5ndGg7ZysrKXt2YXIgaz1qZ1tnXTtpZihiW2tdIT1udWxsKXtmPWJba10oYyk7YnJlYWsgYX19fWNhdGNoKG0pe31mPSExfXJldHVybiBmO2Nhc2UgXCJfZXdcIjpyZXR1cm4ga2coYixjKTtjYXNlIFwiX2VxXCI6cmV0dXJuIG9nKGIsYyk7Y2FzZSBcIl9nZVwiOnJldHVybiBwZyhiLGMpO2Nhc2UgXCJfZ3RcIjpyZXR1cm4gcmcoYixjKTtjYXNlIFwiX2xjXCI6cmV0dXJuIFN0cmluZyhiKS5zcGxpdChcIixcIikuaW5kZXhPZihTdHJpbmcoYykpPj1cbjA7Y2FzZSBcIl9sZVwiOnJldHVybiBxZyhiLGMpO2Nhc2UgXCJfbHRcIjpyZXR1cm4gc2coYixjKTtjYXNlIFwiX3JlXCI6cmV0dXJuIG1nKGIsYyxhLmlnbm9yZV9jYXNlKTtjYXNlIFwiX3N3XCI6cmV0dXJuIHRnKGIsYyk7Y2FzZSBcIl91bVwiOnJldHVybiBleihiLGMpfXJldHVybiExfTtmdW5jdGlvbiBoeigpe3ZhciBhO2E9YT09PXZvaWQgMD9cIlwiOmE7dmFyIGIsYztyZXR1cm4oKGI9ZGF0YSk9PW51bGw/MDooYz1iLmJsb2IpPT1udWxsPzA6Yy5oYXNPd25Qcm9wZXJ0eSgxKSk/U3RyaW5nKGRhdGEuYmxvYlsxXSk6YX07ZnVuY3Rpb24gaXooKXt2YXIgYT1bW1wiY3ZcIixRKDEwMik/aHooKTpcIjFcIl0sW1wicnZcIixoaS5SZ10sW1widGNcIixrZi5maWx0ZXIoZnVuY3Rpb24oYil7cmV0dXJuIGJ9KS5sZW5ndGhdXTtoaS5wZSYmYS5wdXNoKFtcInhcIixoaS5wZV0pO0JpLmomJmEucHVzaChbXCJ0YWdfZXhwXCIsQmkual0pO3JldHVybiBhfTt2YXIgano9e30sa3o9e307ZnVuY3Rpb24gbHooKXt2YXIgYT0wO3JldHVybiBmdW5jdGlvbihiKXtzd2l0Y2goYil7Y2FzZSAxOmF8PTE7YnJlYWs7Y2FzZSAyOmF8PTI7YnJlYWs7Y2FzZSAzOmF8PTR9cmV0dXJuIGF9fWZ1bmN0aW9uIG16KGEsYixjLGQpe2lmKHFqKXt2YXIgZT1TdHJpbmcoYykrYjtqelthXT1qelthXXx8W107anpbYV0ucHVzaChlKTtrelthXT1relthXXx8W107a3pbYV0ucHVzaChkK2IpfX1mdW5jdGlvbiBueihhKXt2YXIgYj1hLmV2ZW50SWQsYz1hLmhjLGQ9W10sZT1qeltiXXx8W107ZS5sZW5ndGgmJmQucHVzaChbXCJoZlwiLGUuam9pbihcIi5cIildKTt2YXIgZj1reltiXXx8W107Zi5sZW5ndGgmJmQucHVzaChbXCJodFwiLGYuam9pbihcIi5cIildKTtjJiYoZGVsZXRlIGp6W2JdLGRlbGV0ZSBreltiXSk7cmV0dXJuIGR9O2Z1bmN0aW9uIG96KCl7cmV0dXJuITF9ZnVuY3Rpb24gcHooKXt2YXIgYT17fTtyZXR1cm4gZnVuY3Rpb24oYixjLGQpe319O2Z1bmN0aW9uIHF6KCl7dmFyIGE9cno7cmV0dXJuIGZ1bmN0aW9uKGIsYyxkKXt2YXIgZT1kJiZkLmV2ZW50O3N6KGMpO3ZhciBmPUdiKGIsXCJfX2N2dF9cIik/dm9pZCAwOjEsZz1uZXcgWWE7eihjLGZ1bmN0aW9uKHIsdCl7dmFyIHU9ZGQodCx2b2lkIDAsZik7dT09PXZvaWQgMCYmdCE9PXZvaWQgMCYmTSg0NCk7Zy5zZXQocix1KX0pO2Euai5qLkQ9RGYoKTt2YXIgaz17QWo6U2YoYiksZXZlbnRJZDplPT1udWxsP3ZvaWQgMDplLmlkLHByaW9yaXR5SWQ6ZSE9PXZvaWQgMD9lLnByaW9yaXR5SWQ6dm9pZCAwLHVlOmUhPT12b2lkIDA/ZnVuY3Rpb24ocil7ZS5hYy51ZShyKX06dm9pZCAwLGNiOmZ1bmN0aW9uKCl7cmV0dXJuIGJ9LGxvZzpmdW5jdGlvbigpe30sQmw6e2luZGV4OmQ9PW51bGw/dm9pZCAwOmQuaW5kZXgsdHlwZTpkPT1udWxsP3ZvaWQgMDpkLnR5cGUsbmFtZTpkPT1udWxsP3ZvaWQgMDpkLm5hbWV9LEptOiEhVXYoYiwzKSxvcmlnaW5hbEV2ZW50RGF0YTplPT1udWxsP1xudm9pZCAwOmUub3JpZ2luYWxFdmVudERhdGF9O2UmJmUuY2FjaGVkTW9kZWxWYWx1ZXMmJihrLmNhY2hlZE1vZGVsVmFsdWVzPXtndG06ZS5jYWNoZWRNb2RlbFZhbHVlcy5ndG0sZWNvbW1lcmNlOmUuY2FjaGVkTW9kZWxWYWx1ZXMuZWNvbW1lcmNlfSk7aWYob3ooKSl7dmFyIG09cHooKSxuLHA7ay5TYT17UGg6W10sdmU6e30seGI6ZnVuY3Rpb24ocix0LHUpe3Q9PT0xJiYobj1yKTt0PT09NyYmKHA9dSk7bShyLHQsdSl9LFFmOmJoKCl9O2subG9nPWZ1bmN0aW9uKHIpe3ZhciB0PXphLmFwcGx5KDEsYXJndW1lbnRzKTtuJiZtKG4sNCx7bGV2ZWw6cixzb3VyY2U6cCxtZXNzYWdlOnR9KX19dmFyIHE9Q2UoYSxrLFtiLGddKTthLmouai5EPXZvaWQgMDtxIGluc3RhbmNlb2YgQ2EmJnEudHlwZT09PVwicmV0dXJuXCImJihxPXEuZGF0YSk7cmV0dXJuIEoocSx2b2lkIDAsZil9fVxuZnVuY3Rpb24gc3ooYSl7dmFyIGI9YS5ndG1PblN1Y2Nlc3MsYz1hLmd0bU9uRmFpbHVyZTtvYihiKSYmKGEuZ3RtT25TdWNjZXNzPWZ1bmN0aW9uKCl7RyhiKX0pO29iKGMpJiYoYS5ndG1PbkZhaWx1cmU9ZnVuY3Rpb24oKXtHKGMpfSl9O2Z1bmN0aW9uIHR6KGEsYil7dmFyIGM9dGhpczt9dHouVD1cImFkZENvbnNlbnRMaXN0ZW5lclwiO3ZhciB1ej0hMTtmdW5jdGlvbiB2eihhKXtmb3IodmFyIGI9MDtiPGEubGVuZ3RoOysrYilpZih1eil0cnl7YVtiXSgpfWNhdGNoKGMpe00oNzcpfWVsc2UgYVtiXSgpfWZ1bmN0aW9uIHd6KGEsYixjKXt2YXIgZD10aGlzLGU7cmV0dXJuIGV9d3ouSj1cImludGVybmFsLmFkZERhdGFMYXllckV2ZW50TGlzdGVuZXJcIjtmdW5jdGlvbiB4eihhLGIsYyl7fXh6LlQ9XCJhZGREb2N1bWVudEV2ZW50TGlzdGVuZXJcIjtmdW5jdGlvbiB5eihhLGIsYyxkKXt9eXouVD1cImFkZEVsZW1lbnRFdmVudExpc3RlbmVyXCI7ZnVuY3Rpb24genooYSl7cmV0dXJuIGEuRi5qfTtmdW5jdGlvbiBBeihhKXt9QXouVD1cImFkZEV2ZW50Q2FsbGJhY2tcIjtcbmZ1bmN0aW9uIFF6KGEpe31Rei5KPVwiaW50ZXJuYWwuYWRkRm9ybUFiYW5kb25tZW50TGlzdGVuZXJcIjtmdW5jdGlvbiBSeihhLGIsYyxkKXt9XG5Sei5KPVwiaW50ZXJuYWwuYWRkRm9ybURhdGFcIjt2YXIgU3o9e30sVHo9W10sVXo9e30sVno9MCxXej0wO1xuZnVuY3Rpb24gY0EoYSxiKXt9Y0EuSj1cImludGVybmFsLmFkZEZvcm1JbnRlcmFjdGlvbkxpc3RlbmVyXCI7XG5mdW5jdGlvbiBqQShhLGIpe31qQS5KPVwiaW50ZXJuYWwuYWRkRm9ybVN1Ym1pdExpc3RlbmVyXCI7XG5mdW5jdGlvbiBvQShhKXt9b0EuSj1cImludGVybmFsLmFkZEdhU2VuZExpc3RlbmVyXCI7ZnVuY3Rpb24gcEEoYSl7aWYoIWEpcmV0dXJue307dmFyIGI9YS5CbDtyZXR1cm4gd3coYi50eXBlLGIuaW5kZXgsYi5uYW1lKX1mdW5jdGlvbiBxQShhKXtyZXR1cm4gYT97b3JpZ2luYXRpbmdFbnRpdHk6cEEoYSl9Ont9fTtmdW5jdGlvbiB5QShhKXt2YXIgYj1paS56b25lcztyZXR1cm4gYj9iLmdldElzQWxsb3dlZEZuKEJqKCksYSk6ZnVuY3Rpb24oKXtyZXR1cm4hMH19XG5mdW5jdGlvbiB6QSgpe1h2KElqKCksZnVuY3Rpb24oYSl7dmFyIGI9YS5vcmlnaW5hbEV2ZW50RGF0YVtcImd0bS51bmlxdWVFdmVudElkXCJdLGM9aWkuem9uZXM7cmV0dXJuIGM/Yy5pc0FjdGl2ZShCaigpLGIpOiEwfSk7VnYoSWooKSxmdW5jdGlvbihhKXt2YXIgYixjO2I9YS5lbnRpdHlJZDtjPWEuc2VjdXJpdHlHcm91cHM7cmV0dXJuIHlBKE51bWJlcihhLm9yaWdpbmFsRXZlbnREYXRhW1wiZ3RtLnVuaXF1ZUV2ZW50SWRcIl0pKShiLGMpfSl9O3ZhciBBQT1mdW5jdGlvbihhLGIpe3RoaXMudGFnSWQ9YTt0aGlzLnhlPWJ9O1xuZnVuY3Rpb24gQkEoYSxiKXt2YXIgYz10aGlzLGQ7cmV0dXJuIGR9XG5CQS5KPVwiaW50ZXJuYWwubG9hZEdvb2dsZVRhZ1wiO2Z1bmN0aW9uIENBKGEpe3JldHVybiBuZXcgV2MoXCJcIixmdW5jdGlvbihiKXt2YXIgYz10aGlzLmV2YWx1YXRlKGIpO2lmKGMgaW5zdGFuY2VvZiBXYylyZXR1cm4gbmV3IFdjKFwiXCIsZnVuY3Rpb24oKXt2YXIgZD16YS5hcHBseSgwLGFyZ3VtZW50cyksZT10aGlzLGY9aCh6eih0aGlzKSxudWxsKTtmLmV2ZW50SWQ9YS5ldmVudElkO2YucHJpb3JpdHlJZD1hLnByaW9yaXR5SWQ7Zi5vcmlnaW5hbEV2ZW50RGF0YT1hLm9yaWdpbmFsRXZlbnREYXRhO3ZhciBnPWQubWFwKGZ1bmN0aW9uKG0pe3JldHVybiBlLmV2YWx1YXRlKG0pfSksaz1JYSh0aGlzLkYpO2suaj1mO3JldHVybiBjLmZiLmFwcGx5KGMsW2tdLmNvbmNhdChwYShnKSkpfSl9KX07ZnVuY3Rpb24gREEoYSxiLGMpe3ZhciBkPXRoaXM7fURBLko9XCJpbnRlcm5hbC5hZGRHb29nbGVUYWdSZXN0cmljdGlvblwiO3ZhciBFQT17fSxGQT1bXTtcbmZ1bmN0aW9uIE1BKGEsYil7fVxuTUEuSj1cImludGVybmFsLmFkZEhpc3RvcnlDaGFuZ2VMaXN0ZW5lclwiO2Z1bmN0aW9uIE5BKGEsYixjKXt9TkEuVD1cImFkZFdpbmRvd0V2ZW50TGlzdGVuZXJcIjtmdW5jdGlvbiBPQShhLGIpe3JldHVybiEwfU9BLlQ9XCJhbGlhc0luV2luZG93XCI7ZnVuY3Rpb24gUEEoYSxiLGMpe31QQS5KPVwiaW50ZXJuYWwuYXBwZW5kUmVtb3RlQ29uZmlnUGFyYW1ldGVyXCI7ZnVuY3Rpb24gUUEoYSl7dmFyIGI7cmV0dXJuIGJ9UUEuVD1cImNhbGxJbldpbmRvd1wiO2Z1bmN0aW9uIFJBKGEpe31SQS5UPVwiY2FsbExhdGVyXCI7ZnVuY3Rpb24gU0EoYSl7fVNBLko9XCJjYWxsT25Eb21SZWFkeVwiO2Z1bmN0aW9uIFRBKGEpe31UQS5KPVwiY2FsbE9uV2luZG93TG9hZFwiO2Z1bmN0aW9uIFVBKGEsYil7dmFyIGM7cmV0dXJuIGN9VUEuSj1cImludGVybmFsLmNvbXB1dGVHdG1QYXJhbWV0ZXJcIjtmdW5jdGlvbiBWQShhKXt2YXIgYjtyZXR1cm4gYn1WQS5KPVwiaW50ZXJuYWwuY29weUZyb21Dcm9zc0NvbnRhaW5lckRhdGFcIjtmdW5jdGlvbiBXQShhLGIpe3ZhciBjO3ZhciBkPWRkKGMsdGhpcy5GLEdiKHp6KHRoaXMpLmNiKCksXCJfX2N2dF9cIik/MjoxKTtkPT09dm9pZCAwJiZjIT09dm9pZCAwJiZNKDQ1KTtyZXR1cm4gZH1XQS5UPVwiY29weUZyb21EYXRhTGF5ZXJcIjtcbmZ1bmN0aW9uIFhBKGEpe3ZhciBiPXZvaWQgMDtyZXR1cm4gYn1YQS5KPVwiaW50ZXJuYWwuY29weUZyb21EYXRhTGF5ZXJDYWNoZVwiO2Z1bmN0aW9uIFlBKGEpe3ZhciBiO3JldHVybiBifVlBLlQ9XCJjb3B5RnJvbVdpbmRvd1wiO2Z1bmN0aW9uIFpBKGEpe3ZhciBiPXZvaWQgMDtyZXR1cm4gZGQoYix0aGlzLkYsMSl9WkEuSj1cImludGVybmFsLmNvcHlLZXlGcm9tV2luZG93XCI7dmFyICRBPWZ1bmN0aW9uKGEsYixjKXt0aGlzLmV2ZW50TmFtZT1iO3RoaXMubT1jO3RoaXMubz17fTt0aGlzLmlzQWJvcnRlZD0hMTt0aGlzLnRhcmdldD1hO3RoaXMubWV0YWRhdGE9aChjLmV2ZW50TWV0YWRhdGF8fHt9LHt9KX07JEEucHJvdG90eXBlLmNvcHlUb0hpdERhdGE9ZnVuY3Rpb24oYSxiLGMpe3ZhciBkPVUodGhpcy5tLGEpO2Q9PT12b2lkIDAmJihkPWIpO2lmKGQhPT12b2lkIDAmJmMhPT12b2lkIDAmJmwoZCkmJlEoNjgpKXRyeXtkPWMoZCl9Y2F0Y2goZSl7fWQhPT12b2lkIDAmJih0aGlzLm9bYV09ZCl9O3ZhciBVcz1mdW5jdGlvbihhLGIsYyl7dmFyIGQ9WHIoYS50YXJnZXQuZGVzdGluYXRpb25JZCk7cmV0dXJuIGQmJmRbYl0hPT12b2lkIDA/ZFtiXTpjfTtmdW5jdGlvbiBhQihhLGIpe3ZhciBjO3JldHVybiBjfWFCLko9XCJpbnRlcm5hbC5jb3B5UHJlSGl0XCI7ZnVuY3Rpb24gYkIoYSxiKXt2YXIgYz1udWxsO3JldHVybiBkZChjLHRoaXMuRiwyKX1iQi5UPVwiY3JlYXRlQXJndW1lbnRzUXVldWVcIjtmdW5jdGlvbiBjQihhKXtyZXR1cm4gZGQoZnVuY3Rpb24oYyl7dmFyIGQ9R3coKTtpZih0eXBlb2YgYz09PVwiZnVuY3Rpb25cIilkKGZ1bmN0aW9uKCl7YyhmdW5jdGlvbihmLGcsayl7dmFyIG09R3coKSxuPW0mJm0uZ2V0QnlOYW1lJiZcbm0uZ2V0QnlOYW1lKGYpO3JldHVybiB3bShELmdhcGx1Z2lucy5MaW5rZXIsbikuZGVjb3JhdGUoZyxrKX0pfSk7ZWxzZSBpZihBcnJheS5pc0FycmF5KGMpKXt2YXIgZT1TdHJpbmcoY1swXSkuc3BsaXQoXCIuXCIpO2JbZS5sZW5ndGg9PT0xP2VbMF06ZVsxXV0mJmQuYXBwbHkobnVsbCxjKX1lbHNlIGlmKGM9PT1cImlzTG9hZGVkXCIpcmV0dXJuISFkLmxvYWRlZH0sdGhpcy5GLDEpfWNCLko9XCJpbnRlcm5hbC5jcmVhdGVHYUNvbW1hbmRRdWV1ZVwiO2Z1bmN0aW9uIGRCKGEpe3JldHVybiBkZChmdW5jdGlvbigpe2lmKCFvYihlLnB1c2gpKXRocm93IEVycm9yKFwiT2JqZWN0IGF0IFwiK2ErXCIgaW4gd2luZG93IGlzIG5vdCBhbiBhcnJheS5cIik7ZS5wdXNoLmFwcGx5KGUsQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLDApKX0sdGhpcy5GLEdiKHp6KHRoaXMpLmNiKCksXG5cIl9fY3Z0X1wiKT8yOjEpfWRCLlQ9XCJjcmVhdGVRdWV1ZVwiO2Z1bmN0aW9uIGVCKGEsYil7dmFyIGM9bnVsbDtyZXR1cm4gY31lQi5KPVwiaW50ZXJuYWwuY3JlYXRlUmVnZXhcIjtmdW5jdGlvbiBmQigpe3ZhciBhPXt9O3JldHVybiBhfTtmdW5jdGlvbiBnQihhKXt9Z0IuSj1cImludGVybmFsLmRlY2xhcmVDb25zZW50U3RhdGVcIjtmdW5jdGlvbiBoQihhKXt2YXIgYj1cIlwiO3JldHVybiBifWhCLko9XCJpbnRlcm5hbC5kZWNvZGVVcmxIdG1sRW50aXRpZXNcIjtmdW5jdGlvbiBpQihhLGIsYyl7dmFyIGQ7cmV0dXJuIGR9aUIuSj1cImludGVybmFsLmRlY29yYXRlVXJsV2l0aEdhQ29va2llc1wiO2Z1bmN0aW9uIGpCKCl7fWpCLko9XCJpbnRlcm5hbC5kZWZlckN1c3RvbUV2ZW50c1wiO2Z1bmN0aW9uIGtCKGEpe3ZhciBiO1xucmV0dXJuIGJ9a0IuSj1cImludGVybmFsLmRldGVjdFVzZXJQcm92aWRlZERhdGFcIjtcbmZ1bmN0aW9uIG9CKGEsYil7cmV0dXJuIGJ9b0IuSj1cImludGVybmFsLmVuYWJsZUF1dG9FdmVudE9uQ2xpY2tcIjtcbmZ1bmN0aW9uIHdCKGEsYil7cmV0dXJuIGJ9d0IuSj1cImludGVybmFsLmVuYWJsZUF1dG9FdmVudE9uRWxlbWVudFZpc2liaWxpdHlcIjtmdW5jdGlvbiB4Qigpe314Qi5KPVwiaW50ZXJuYWwuZW5hYmxlQXV0b0V2ZW50T25FcnJvclwiO3ZhciB5Qj17fSx6Qj1bXSxBQj17fSxCQj0wLENCPTA7XG5mdW5jdGlvbiBJQihhLGIpe3ZhciBjPXRoaXM7cmV0dXJuIGJ9SUIuSj1cImludGVybmFsLmVuYWJsZUF1dG9FdmVudE9uRm9ybUludGVyYWN0aW9uXCI7XG5mdW5jdGlvbiBOQihhLGIpe3ZhciBjPXRoaXM7cmV0dXJuIGJ9TkIuSj1cImludGVybmFsLmVuYWJsZUF1dG9FdmVudE9uRm9ybVN1Ym1pdFwiO1xuZnVuY3Rpb24gU0IoKXt2YXIgYT10aGlzO31TQi5KPVwiaW50ZXJuYWwuZW5hYmxlQXV0b0V2ZW50T25HYVNlbmRcIjt2YXIgVEI9e30sVUI9W107XG5mdW5jdGlvbiBhQyhhLGIpe3ZhciBjPXRoaXM7cmV0dXJuIGJ9YUMuSj1cImludGVybmFsLmVuYWJsZUF1dG9FdmVudE9uSGlzdG9yeUNoYW5nZVwiO3ZhciBiQz1bXCJodHRwOi8vXCIsXCJodHRwczovL1wiLFwiamF2YXNjcmlwdDpcIixcImZpbGU6Ly9cIl07XG5mdW5jdGlvbiBmQyhhLGIpe3ZhciBjPXRoaXM7cmV0dXJuIGJ9ZkMuSj1cImludGVybmFsLmVuYWJsZUF1dG9FdmVudE9uTGlua0NsaWNrXCI7dmFyIGdDLGhDO1xuZnVuY3Rpb24gc0MoYSxiKXt2YXIgYz10aGlzO3JldHVybiBifXNDLko9XCJpbnRlcm5hbC5lbmFibGVBdXRvRXZlbnRPblNjcm9sbFwiO2Z1bmN0aW9uIHRDKGEpe3JldHVybiBmdW5jdGlvbigpe2lmKGEubGltaXQmJmEuemg+PWEubGltaXQpYS5PZiYmRC5jbGVhckludGVydmFsKGEuT2YpO2Vsc2V7YS56aCsrO3ZhciBiPUJiKCk7cHkoe2V2ZW50OmEuZXZlbnROYW1lLFwiZ3RtLnRpbWVySWRcIjphLk9mLFwiZ3RtLnRpbWVyRXZlbnROdW1iZXJcIjphLnpoLFwiZ3RtLnRpbWVySW50ZXJ2YWxcIjphLmludGVydmFsLFwiZ3RtLnRpbWVyTGltaXRcIjphLmxpbWl0LFwiZ3RtLnRpbWVyU3RhcnRUaW1lXCI6YS5layxcImd0bS50aW1lckN1cnJlbnRUaW1lXCI6YixcImd0bS50aW1lckVsYXBzZWRUaW1lXCI6Yi1hLmVrLFwiZ3RtLnRyaWdnZXJzXCI6YS5ibn0pfX19XG5mdW5jdGlvbiB1QyhhLGIpe1xucmV0dXJuIGJ9dUMuSj1cImludGVybmFsLmVuYWJsZUF1dG9FdmVudE9uVGltZXJcIjt2YXIgaGM9a2EoW1wiZGF0YS1ndG0teXQtaW5zcGVjdGVkLVwiXSksd0M9W1wid3d3LnlvdXR1YmUuY29tXCIsXCJ3d3cueW91dHViZS1ub2Nvb2tpZS5jb21cIl0seEMseUM9ITE7XG5mdW5jdGlvbiBJQyhhLGIpe3ZhciBjPXRoaXM7cmV0dXJuIGJ9SUMuSj1cImludGVybmFsLmVuYWJsZUF1dG9FdmVudE9uWW91VHViZUFjdGl2aXR5XCI7ZnVuY3Rpb24gSkMoYSxiKXtLKHRoaXMuZ2V0TmFtZSgpLFtcImJvb2xlYW5FeHByZXNzaW9uOiFzdHJpbmdcIixcImNvbnRleHQ6P1BpeGllTWFwXCJdLGFyZ3VtZW50cyk7dmFyIGM9Yj9KKGIpOnt9LGQ9YSxlPSExO3JldHVybiBlfUpDLko9XCJpbnRlcm5hbC5ldmFsdWF0ZUJvb2xlYW5FeHByZXNzaW9uXCI7dmFyIEtDO2Z1bmN0aW9uIExDKGEpe3ZhciBiPSExO3JldHVybiBifUxDLko9XCJpbnRlcm5hbC5ldmFsdWF0ZU1hdGNoaW5nUnVsZXNcIjtmdW5jdGlvbiBzRCgpe3JldHVybiB6big3KSYmem4oOSkmJnpuKDEwKX07XG52YXIgd0Q9ZnVuY3Rpb24oYSxiKXtpZighYi5pc0d0bUV2ZW50KXt2YXIgYz1VKGIsVC5nLnJiKSxkPVUoYixULmcuR2IpLGU9VShiLGMpO2lmKGU9PT12b2lkIDApe3ZhciBmPXZvaWQgMDt0RC5oYXNPd25Qcm9wZXJ0eShjKT9mPXREW2NdOnVELmhhc093blByb3BlcnR5KGMpJiYoZj11RFtjXSk7Zj09PTEmJihmPXZEKGMpKTtsKGYpP0d3KCkoZnVuY3Rpb24oKXt2YXIgZz1HdygpLmdldEJ5TmFtZShhKS5nZXQoZik7ZChnKX0pOmQodm9pZCAwKX1lbHNlIGQoZSl9fSx4RD1mdW5jdGlvbihhLGIpe3ZhciBjPWFbVC5nLkpiXSxkPWIrXCIuXCIsZT1hW1QuZy5XXXx8XCJcIixmPWM9PT12b2lkIDA/ISFhLnVzZV9hbmNob3I6Yz09PVwiZnJhZ21lbnRcIixnPSEhYVtULmcudGJdO2U9U3RyaW5nKGUpLnJlcGxhY2UoL1xccysvZyxcIlwiKS5zcGxpdChcIixcIik7dmFyIGs9R3coKTtrKGQrXCJyZXF1aXJlXCIsXCJsaW5rZXJcIik7ayhkK1wibGlua2VyOmF1dG9MaW5rXCIsZSxmLGcpfSxCRD1mdW5jdGlvbihhLFxuYixjKXtpZighYy5pc0d0bUV2ZW50fHwheURbYV0pe3ZhciBkPSFXKFQuZy5VKSxlPWZ1bmN0aW9uKGYpe3ZhciBnLGssbT1HdygpLG49ekQoYixcIlwiLGMpLHAscT1uLmNyZWF0ZU9ubHlGaWVsZHMuX3VzZVVwO2lmKGMuaXNHdG1FdmVudHx8QUQoYixuLmNyZWF0ZU9ubHlGaWVsZHMpKXtjLmlzR3RtRXZlbnQmJihnPVwiZ3RtXCIremkoKSxrPW4uY3JlYXRlT25seUZpZWxkcyxuLmd0bVRyYWNrZXJOYW1lJiYoay5uYW1lPWcpKTttKGZ1bmN0aW9uKCl7dmFyIHQ9bS5nZXRCeU5hbWUoYik7dCYmKHA9dC5nZXQoXCJjbGllbnRJZFwiKSk7Yy5pc0d0bUV2ZW50fHxtLnJlbW92ZShiKX0pO20oXCJjcmVhdGVcIixhLGMuaXNHdG1FdmVudD9rOm4uY3JlYXRlT25seUZpZWxkcyk7XG5kJiZXKFQuZy5VKSYmKGQ9ITEsbShmdW5jdGlvbigpe3ZhciB0PUd3KCkuZ2V0QnlOYW1lKGMuaXNHdG1FdmVudD9nOmIpOyF0fHx0LmdldChcImNsaWVudElkXCIpPT1wJiZxfHwoYy5pc0d0bUV2ZW50PyhuLmZpZWxkc1RvU2V0W1wiJmdjdVwiXT1cIjFcIixuLmZpZWxkc1RvU2V0W1wiJnNzdC5nY3V0XCJdPWNpW2ZdKToobi5maWVsZHNUb1NlbmRbXCImZ2N1XCJdPVwiMVwiLG4uZmllbGRzVG9TZW5kW1wiJnNzdC5nY3V0XCJdPWNpW2ZdKSx0LnNldChuLmZpZWxkc1RvU2V0KSxjLmlzR3RtRXZlbnQ/dC5zZW5kKFwicGFnZXZpZXdcIik6dC5zZW5kKFwicGFnZXZpZXdcIixuLmZpZWxkc1RvU2VuZCkpfSkpO2MuaXNHdG1FdmVudCYmbShmdW5jdGlvbigpe20ucmVtb3ZlKGcpfSl9fTtibChmdW5jdGlvbigpe3JldHVybiBlKFQuZy5VKX0sVC5nLlUpO2JsKGZ1bmN0aW9uKCl7cmV0dXJuIGUoVC5nLlApfSxULmcuUCk7YmwoZnVuY3Rpb24oKXtyZXR1cm4gZShULmcuTyl9LFQuZy5PKTtjLmlzR3RtRXZlbnQmJih5RFthXT1cbiEwKX19LENEPWZ1bmN0aW9uKGEsYil7aGooKSYmYiYmKGFbVC5nLnFiXT1iKX0sTEQ9ZnVuY3Rpb24oYSxiLGMpe2Z1bmN0aW9uIGQoKXt2YXIgTj1VKGMsVC5nLlZjKTtrKGZ1bmN0aW9uKCl7aWYoIWMuaXNHdG1FdmVudCYmU2EoTikpe3ZhciBTPXUuZmllbGRzVG9TZW5kLFY9bSgpLmdldEJ5TmFtZShuKSxhYTtmb3IoYWEgaW4gTilpZihOW2FhXSE9dm9pZCAwJiYvXihkaW1lbnNpb258bWV0cmljKVxcZCskLy50ZXN0KGFhKSl7dmFyIFg9Vi5nZXQodkQoTlthYV0pKTtERChTLGFhLFgpfX19KX1mdW5jdGlvbiBlKCl7aWYodS5kaXNwbGF5ZmVhdHVyZXMpe3ZhciBOPVwiX2RjX2d0bV9cIitmLnJlcGxhY2UoL1teQS1aYS16MC05LV0vZyxcIlwiKTtwKFwicmVxdWlyZVwiLFwiZGlzcGxheWZlYXR1cmVzXCIsdm9pZCAwLHtjb29raWVOYW1lOk59KX19dmFyIGY9YSxnLGs9Yy5pc0d0bUV2ZW50P0h3KFUoYyxcImdhRnVuY3Rpb25OYW1lXCIpKTpIdygpO2lmKG9iKGspKXt2YXIgbT1HdyxuO2MuaXNHdG1FdmVudD9cbm49VShjLFwibmFtZVwiKXx8VShjLFwiZ3RtVHJhY2tlck5hbWVcIik6bj1cImd0YWdfXCIrZi5zcGxpdChcIi1cIikuam9pbihcIl9cIik7dmFyIHA9ZnVuY3Rpb24oTil7dmFyIFM9W10uc2xpY2UuY2FsbChhcmd1bWVudHMsMCk7U1swXT1uP24rXCIuXCIrU1swXTpcIlwiK1NbMF07ay5hcHBseSh3aW5kb3csUyl9LHE9ZnVuY3Rpb24oTil7dmFyIFM9ZnVuY3Rpb24obGEsZWEpe2Zvcih2YXIgd2E9MDtlYSYmd2E8ZWEubGVuZ3RoO3dhKyspcChsYSxlYVt3YV0pfSxWPWMuaXNHdG1FdmVudCxhYT1WP0VEKHUpOkZEKGIsYyk7aWYoYWEpe3ZhciBYPXt9O0NEKFgsTik7cChcInJlcXVpcmVcIixcImVjXCIsXCJlYy5qc1wiLFgpO1YmJmFhLmVoJiZwKFwic2V0XCIsXCImY3VcIixhYS5laCk7dmFyIFI9YWEuYWN0aW9uO2lmKFZ8fFI9PT1cImltcHJlc3Npb25zXCIpaWYoUyhcImVjOmFkZEltcHJlc3Npb25cIixhYS5MaiksIVYpcmV0dXJuO2lmKFI9PT1cInByb21vX2NsaWNrXCJ8fFI9PT1cInByb21vX3ZpZXdcInx8ViYmYWEuVWUpe3ZhciBtYT1cbmFhLlVlO1MoXCJlYzphZGRQcm9tb1wiLG1hKTtpZihtYSYmbWEubGVuZ3RoPjAmJlI9PT1cInByb21vX2NsaWNrXCIpe1Y/cChcImVjOnNldEFjdGlvblwiLFIsYWEudmIpOnAoXCJlYzpzZXRBY3Rpb25cIixSKTtyZXR1cm59aWYoIVYpcmV0dXJufVIhPT1cInByb21vX3ZpZXdcIiYmUiE9PVwiaW1wcmVzc2lvbnNcIiYmKFMoXCJlYzphZGRQcm9kdWN0XCIsYWEuSmMpLHAoXCJlYzpzZXRBY3Rpb25cIixSLGFhLnZiKSl9fSxyPWZ1bmN0aW9uKE4pe2lmKE4pe3ZhciBTPXt9O2lmKFNhKE4pKWZvcih2YXIgViBpbiBHRClHRC5oYXNPd25Qcm9wZXJ0eShWKSYmSEQoR0RbVl0sVixOW1ZdLFMpO0NEKFMseSk7cChcInJlcXVpcmVcIixcImxpbmtpZFwiLFMpfX0sdD1mdW5jdGlvbigpe2lmKFduKCkpe31lbHNle3ZhciBOPVUoYyxULmcuT2kpO04mJihwKFwicmVxdWlyZVwiLE4se2RhdGFMYXllcjpoaS5oYn0pLFxucChcInJlcXVpcmVcIixcInJlbmRlclwiKSl9fSx1PXpEKG4sYixjKSx2PWZ1bmN0aW9uKE4sUyxWKXtWJiYoUz1cIlwiK1MpO3UuZmllbGRzVG9TZW5kW05dPVN9OyFjLmlzR3RtRXZlbnQmJkFEKG4sdS5jcmVhdGVPbmx5RmllbGRzKSYmKGsoZnVuY3Rpb24oKXttKCkmJm0oKS5yZW1vdmUobil9KSxJRFtuXT0hMSk7ayhcImNyZWF0ZVwiLGYsdS5jcmVhdGVPbmx5RmllbGRzKTt2YXIgdz1jLmlzR3RtRXZlbnQmJnUuZmllbGRzVG9TZXRbVC5nLnFiXTtpZighYy5pc0d0bUV2ZW50JiZ1LmNyZWF0ZU9ubHlGaWVsZHNbVC5nLnFiXXx8dyl7dmFyIHg9Z2ooYy5pc0d0bUV2ZW50P3UuZmllbGRzVG9TZXRbVC5nLnFiXTp1LmNyZWF0ZU9ubHlGaWVsZHNbVC5nLnFiXSxcIi9hbmFseXRpY3MuanNcIik7eCYmKGc9eCl9dmFyIHk9Yy5pc0d0bUV2ZW50P3UuZmllbGRzVG9TZXRbVC5nLnFiXTp1LmNyZWF0ZU9ubHlGaWVsZHNbVC5nLnFiXTtpZih5KXt2YXIgQT1jLmlzR3RtRXZlbnQ/dS5maWVsZHNUb1NldFtULmcuVWRdOlxudS5jcmVhdGVPbmx5RmllbGRzW1QuZy5VZF07QSYmIUlEW25dJiYoSURbbl09ITAsayhLdyhuLEEpKSl9Yy5pc0d0bUV2ZW50P3UuZW5hYmxlUmVjYXB0Y2hhJiZwKFwicmVxdWlyZVwiLFwicmVjYXB0Y2hhXCIsXCJyZWNhcHRjaGEuanNcIik6KGQoKSxyKHUubGlua0F0dHJpYnV0aW9uKSk7dmFyIEI9dVtULmcucWFdO0ImJkJbVC5nLlddJiZ4RChCLG4pO3AoXCJzZXRcIix1LmZpZWxkc1RvU2V0KTtpZihjLmlzR3RtRXZlbnQpe2lmKHUuZW5hYmxlTGlua0lkKXt2YXIgQz17fTtDRChDLHkpO3AoXCJyZXF1aXJlXCIsXCJsaW5raWRcIixcImxpbmtpZC5qc1wiLEMpfUJEKGYsbixjKX1pZihiPT09VC5nLlNiKWlmKGMuaXNHdG1FdmVudCl7ZSgpO2lmKHUucmVtYXJrZXRpbmdMaXN0cyl7dmFyIEg9XCJfZGNfZ3RtX1wiK2YucmVwbGFjZSgvW15BLVphLXowLTktXS9nLFwiXCIpO3AoXCJyZXF1aXJlXCIsXCJhZGZlYXR1cmVzXCIse2Nvb2tpZU5hbWU6SH0pfXEoeSk7cChcInNlbmRcIixcInBhZ2V2aWV3XCIpO3UuY3JlYXRlT25seUZpZWxkcy5fdXNlVXAmJlxuSXcobitcIi5cIil9ZWxzZSB0KCkscChcInNlbmRcIixcInBhZ2V2aWV3XCIsdS5maWVsZHNUb1NlbmQpO2Vsc2UgYj09PVQuZy5iYT8odCgpLE1yKGYsYyksVShjLFQuZy5XYSkmJihucShbXCJhd1wiLFwiZGNcIl0pLEl3KG4rXCIuXCIpKSxwcShbXCJhd1wiLFwiZGNcIl0pLHUuc2VuZFBhZ2VWaWV3IT0wJiZwKFwic2VuZFwiLFwicGFnZXZpZXdcIix1LmZpZWxkc1RvU2VuZCksQkQoZixuLGMpKTpiPT09VC5nLlRhP3dEKG4sYyk6Yj09PVwic2NyZWVuX3ZpZXdcIj9wKFwic2VuZFwiLFwic2NyZWVudmlld1wiLHUuZmllbGRzVG9TZW5kKTpiPT09XCJ0aW1pbmdfY29tcGxldGVcIj8odS5maWVsZHNUb1NlbmQuaGl0VHlwZT1cInRpbWluZ1wiLHYoXCJ0aW1pbmdDYXRlZ29yeVwiLHUuZXZlbnRDYXRlZ29yeSwhMCksYy5pc0d0bUV2ZW50P3YoXCJ0aW1pbmdWYXJcIix1LnRpbWluZ1ZhciwhMCk6dihcInRpbWluZ1ZhclwiLHUubmFtZSwhMCksdihcInRpbWluZ1ZhbHVlXCIsd2IodS52YWx1ZSkpLHUuZXZlbnRMYWJlbCE9PXZvaWQgMCYmdihcInRpbWluZ0xhYmVsXCIsXG51LmV2ZW50TGFiZWwsITApLHAoXCJzZW5kXCIsdS5maWVsZHNUb1NlbmQpKTpiPT09XCJleGNlcHRpb25cIj9wKFwic2VuZFwiLFwiZXhjZXB0aW9uXCIsdS5maWVsZHNUb1NlbmQpOmI9PT1cIlwiJiZjLmlzR3RtRXZlbnR8fChiPT09XCJ0cmFja19zb2NpYWxcIiYmYy5pc0d0bUV2ZW50Pyh1LmZpZWxkc1RvU2VuZC5oaXRUeXBlPVwic29jaWFsXCIsdihcInNvY2lhbE5ldHdvcmtcIix1LnNvY2lhbE5ldHdvcmssITApLHYoXCJzb2NpYWxBY3Rpb25cIix1LnNvY2lhbEFjdGlvbiwhMCksdihcInNvY2lhbFRhcmdldFwiLHUuc29jaWFsVGFyZ2V0LCEwKSk6KChjLmlzR3RtRXZlbnR8fEpEW2JdKSYmcSh5KSxjLmlzR3RtRXZlbnQmJmUoKSx1LmZpZWxkc1RvU2VuZC5oaXRUeXBlPVwiZXZlbnRcIix2KFwiZXZlbnRDYXRlZ29yeVwiLHUuZXZlbnRDYXRlZ29yeSwhMCksdihcImV2ZW50QWN0aW9uXCIsdS5ldmVudEFjdGlvbnx8YiwhMCksdS5ldmVudExhYmVsIT09dm9pZCAwJiZ2KFwiZXZlbnRMYWJlbFwiLHUuZXZlbnRMYWJlbCwhMCksXG51LnZhbHVlIT09dm9pZCAwJiZ2KFwiZXZlbnRWYWx1ZVwiLHdiKHUudmFsdWUpKSkscChcInNlbmRcIix1LmZpZWxkc1RvU2VuZCkpO3ZhciBJPWcmJiFjLmV2ZW50TWV0YWRhdGEuc3VwcHJlc3Nfc2NyaXB0X2xvYWQ7aWYoIUtEJiYoIWMuaXNHdG1FdmVudHx8SSkpe2c9Z3x8XCJodHRwczovL3d3dy5nb29nbGUtYW5hbHl0aWNzLmNvbS9hbmFseXRpY3MuanNcIjtLRD0hMDt2YXIgRj1mdW5jdGlvbigpe2Mub25GYWlsdXJlKCl9LE89ZnVuY3Rpb24oKXttKCkubG9hZGVkfHxGKCl9O1duKCk/RyhPKTp4YyhnLE8sRil9fWVsc2UgRyhjLm9uRmFpbHVyZSl9LE1EPWZ1bmN0aW9uKGEsYixjLGQpe2NsKGZ1bmN0aW9uKCl7TEQoYSxiLGQpfSxbVC5nLlUsVC5nLlBdKX0sT0Q9ZnVuY3Rpb24oYSl7ZnVuY3Rpb24gYihlKXtmdW5jdGlvbiBmKGssbSl7Zm9yKHZhciBuPTA7bjxtLmxlbmd0aDtuKyspe3ZhciBwPW1bbl07aWYoZVtwXSl7Z1trXT1lW3BdO2JyZWFrfX19dmFyIGc9aChlKTtmKFwiaWRcIixcbltcImlkXCIsXCJpdGVtX2lkXCIsXCJwcm9tb3Rpb25faWRcIl0pO2YoXCJuYW1lXCIsW1wibmFtZVwiLFwiaXRlbV9uYW1lXCIsXCJwcm9tb3Rpb25fbmFtZVwiXSk7ZihcImJyYW5kXCIsW1wiYnJhbmRcIixcIml0ZW1fYnJhbmRcIl0pO2YoXCJ2YXJpYW50XCIsW1widmFyaWFudFwiLFwiaXRlbV92YXJpYW50XCJdKTtmKFwibGlzdFwiLFtcImxpc3RfbmFtZVwiLFwiaXRlbV9saXN0X25hbWVcIl0pO2YoXCJwb3NpdGlvblwiLFtcImxpc3RfcG9zaXRpb25cIixcImNyZWF0aXZlX3Nsb3RcIixcImluZGV4XCJdKTsoZnVuY3Rpb24oKXtpZihlLmNhdGVnb3J5KWcuY2F0ZWdvcnk9ZS5jYXRlZ29yeTtlbHNle2Zvcih2YXIgaz1cIlwiLG09MDttPE5ELmxlbmd0aDttKyspZVtORFttXV0hPT12b2lkIDAmJihrJiYoays9XCIvXCIpLGsrPWVbTkRbbV1dKTtrJiYoZy5jYXRlZ29yeT1rKX19KSgpO2YoXCJsaXN0UG9zaXRpb25cIixbXCJsaXN0X3Bvc2l0aW9uXCJdKTtmKFwiY3JlYXRpdmVcIixbXCJjcmVhdGl2ZV9uYW1lXCJdKTtmKFwibGlzdFwiLFtcImxpc3RfbmFtZVwiXSk7ZihcInBvc2l0aW9uXCIsXG5bXCJsaXN0X3Bvc2l0aW9uXCIsXCJjcmVhdGl2ZV9zbG90XCJdKTtyZXR1cm4gZ31mb3IodmFyIGM9W10sZD0wO2EmJmQ8YS5sZW5ndGg7ZCsrKWFbZF0mJlNhKGFbZF0pJiZjLnB1c2goYihhW2RdKSk7cmV0dXJuIGMubGVuZ3RoP2M6dm9pZCAwfSxQRD1mdW5jdGlvbihhKXtyZXR1cm4gVyhhKX0sUUQ9ITE7dmFyIEtELElEPXt9LHlEPXt9LFJEPXt9LFNEPU9iamVjdC5mcmVlemUoKFJELnBhZ2VfaG9zdG5hbWU9MSxSRFtULmcuamFdPTEsUkRbVC5nLmxiXT0xLFJEW1QuZy5WYV09MSxSRFtULmcuTWFdPTEsUkRbVC5nLllhXT0xLFJEW1QuZy5vY109MSxSRFtULmcuRmJdPTEsUkRbVC5nLk5hXT0xLFJEW1QuZy5xY109MSxSRFtULmcucmFdPTEsUkRbVC5nLmZkXT0xLFJEW1QuZy5CYV09MSxSRFtULmcuWmFdPVxuMSxSRCkpLFREPXt9LHREPU9iamVjdC5mcmVlemUoKFRELmNsaWVudF9zdG9yYWdlPVwic3RvcmFnZVwiLFRELnNhbXBsZV9yYXRlPTEsVEQuc2l0ZV9zcGVlZF9zYW1wbGVfcmF0ZT0xLFRELnN0b3JlX2dhYz0xLFRELnVzZV9hbXBfY2xpZW50X2lkPTEsVERbVC5nLm5iXT0xLFREW1QuZy5vYV09XCJzdG9yZUdhY1wiLFREW1QuZy5WYV09MSxURFtULmcuTWFdPTEsVERbVC5nLllhXT0xLFREW1QuZy5vY109MSxURFtULmcuRmJdPTEsVERbVC5nLnFjXT0xLFREKSksVUQ9e30sVkQ9T2JqZWN0LmZyZWV6ZSgoVUQuX2NzPTEsVUQuX3VzZVVwPTEsVUQuYWxsb3dBbmNob3I9MSxVRC5hbGxvd0xpbmtlcj0xLFVELmFsd2F5c1NlbmRSZWZlcnJlcj0xLFVELmNsaWVudElkPTEsVUQuY29va2llRG9tYWluPTEsVUQuY29va2llRXhwaXJlcz0xLFVELmNvb2tpZUZsYWdzPTEsVUQuY29va2llTmFtZT0xLFVELmNvb2tpZVBhdGg9MSxVRC5jb29raWVVcGRhdGU9MSxVRC5sZWdhY3lDb29raWVEb21haW49XG4xLFVELmxlZ2FjeUhpc3RvcnlJbXBvcnQ9MSxVRC5uYW1lPTEsVUQuc2FtcGxlUmF0ZT0xLFVELnNpdGVTcGVlZFNhbXBsZVJhdGU9MSxVRC5zdG9yYWdlPTEsVUQuc3RvcmVHYWM9MSxVRC51c2VBbXBDbGllbnRJZD0xLFVELl9jZDJsPTEsVUQpKSxXRD1PYmplY3QuZnJlZXplKHthbm9ueW1pemVfaXA6MX0pLFhEPXt9LHVEPU9iamVjdC5mcmVlemUoKFhELmNhbXBhaWduPXtjb250ZW50OlwiY2FtcGFpZ25Db250ZW50XCIsaWQ6XCJjYW1wYWlnbklkXCIsbWVkaXVtOlwiY2FtcGFpZ25NZWRpdW1cIixuYW1lOlwiY2FtcGFpZ25OYW1lXCIsc291cmNlOlwiY2FtcGFpZ25Tb3VyY2VcIix0ZXJtOlwiY2FtcGFpZ25LZXl3b3JkXCJ9LFhELmFwcF9pZD0xLFhELmFwcF9pbnN0YWxsZXJfaWQ9MSxYRC5hcHBfbmFtZT0xLFhELmFwcF92ZXJzaW9uPTEsWEQuZGVzY3JpcHRpb249XCJleERlc2NyaXB0aW9uXCIsWEQuZmF0YWw9XCJleEZhdGFsXCIsWEQubGFuZ3VhZ2U9MSxYRC5wYWdlX2hvc3RuYW1lPVwiaG9zdG5hbWVcIixcblhELnRyYW5zcG9ydF90eXBlPVwidHJhbnNwb3J0XCIsWERbVC5nLnhhXT1cImN1cnJlbmN5Q29kZVwiLFhEW1QuZy56Z109MSxYRFtULmcucmFdPVwibG9jYXRpb25cIixYRFtULmcuZmRdPVwicGFnZVwiLFhEW1QuZy5CYV09XCJyZWZlcnJlclwiLFhEW1QuZy5aYV09XCJ0aXRsZVwiLFhEW1QuZy5xZl09MSxYRFtULmcuemFdPTEsWEQpKSxZRD17fSxaRD1PYmplY3QuZnJlZXplKChZRC5jb250ZW50X2lkPTEsWUQuZXZlbnRfYWN0aW9uPTEsWUQuZXZlbnRfY2F0ZWdvcnk9MSxZRC5ldmVudF9sYWJlbD0xLFlELmxpbmtfYXR0cmlidXRpb249MSxZRC5uYW1lPTEsWURbVC5nLnFhXT0xLFlEW1QuZy55Z109MSxZRFtULmcuSWFdPTEsWURbVC5nLmxhXT0xLFlEKSksJEQ9T2JqZWN0LmZyZWV6ZSh7ZGlzcGxheWZlYXR1cmVzOjEsZW5hYmxlTGlua0lkOjEsZW5hYmxlUmVjYXB0Y2hhOjEsZXZlbnRBY3Rpb246MSxldmVudENhdGVnb3J5OjEsZXZlbnRMYWJlbDoxLGdhRnVuY3Rpb25OYW1lOjEsZ3RtRWNvbW1lcmNlRGF0YToxLFxuZ3RtVHJhY2tlck5hbWU6MSxsaW5rZXI6MSxyZW1hcmtldGluZ0xpc3RzOjEsc29jaWFsQWN0aW9uOjEsc29jaWFsTmV0d29yazoxLHNvY2lhbFRhcmdldDoxLHRpbWluZ1ZhcjoxLHZhbHVlOjF9KSxORD1PYmplY3QuZnJlZXplKFtcIml0ZW1fY2F0ZWdvcnlcIixcIml0ZW1fY2F0ZWdvcnkyXCIsXCJpdGVtX2NhdGVnb3J5M1wiLFwiaXRlbV9jYXRlZ29yeTRcIixcIml0ZW1fY2F0ZWdvcnk1XCJdKSxhRT17fSxHRD1PYmplY3QuZnJlZXplKChhRS5sZXZlbHM9MSxhRVtULmcuTWFdPVwiZHVyYXRpb25cIixhRVtULmcub2NdPTEsYUUpKSxiRT17fSxjRT1PYmplY3QuZnJlZXplKChiRS5hbm9ueW1pemVfaXA9MSxiRS5mYXRhbD0xLGJFLnNlbmRfcGFnZV92aWV3PTEsYkUuc3RvcmVfZ2FjPTEsYkUudXNlX2FtcF9jbGllbnRfaWQ9MSxiRVtULmcub2FdPTEsYkVbVC5nLnpnXT0xLGJFKSksSEQ9ZnVuY3Rpb24oYSxiLGMsZCl7aWYoYyE9PXZvaWQgMClpZihjRVtiXSYmKGM9eGIoYykpLGIhPT1cImFub255bWl6ZV9pcFwifHxcbmN8fChjPXZvaWQgMCksYT09PTEpZFt2RChiKV09YztlbHNlIGlmKGwoYSkpZFthXT1jO2Vsc2UgZm9yKHZhciBlIGluIGEpYS5oYXNPd25Qcm9wZXJ0eShlKSYmY1tlXSE9PXZvaWQgMCYmKGRbYVtlXV09Y1tlXSl9LHZEPWZ1bmN0aW9uKGEpe3JldHVybiBhJiZsKGEpP2EucmVwbGFjZSgvKF9bYS16XSkvZyxmdW5jdGlvbihiKXtyZXR1cm4gYlsxXS50b1VwcGVyQ2FzZSgpfSk6YX0sZEU9e30sSkQ9T2JqZWN0LmZyZWV6ZSgoZEUuY2hlY2tvdXRfcHJvZ3Jlc3M9MSxkRS5zZWxlY3RfY29udGVudD0xLGRFLnNldF9jaGVja291dF9vcHRpb249MSxkRVtULmcuamNdPTEsZEVbVC5nLmtjXT0xLGRFW1QuZy5SYl09MSxkRVtULmcubWNdPTEsZEVbVC5nLmliXT0xLGRFW1QuZy5EYl09MSxkRVtULmcuamJdPTEsZEVbVC5nLkhhXT0xLGRFW1QuZy5uY109MSxkRVtULmcuTGFdPTEsZEUpKSxlRT17fSxmRT1PYmplY3QuZnJlZXplKChlRS5jaGVja291dF9wcm9ncmVzcz0xLGVFLnNldF9jaGVja291dF9vcHRpb249XG4xLGVFW1QuZy5ZZl09MSxlRVtULmcuWmZdPTEsZUVbVC5nLmpjXT0xLGVFW1QuZy5rY109MSxlRVtULmcuY2ddPTEsZUVbVC5nLlJiXT0xLGVFW1QuZy5IYV09MSxlRVtULmcubmNdPTEsZUVbVC5nLmRnXT0xLGVFKSksZ0U9e30saEU9T2JqZWN0LmZyZWV6ZSgoZ0UuZ2VuZXJhdGVfbGVhZD0xLGdFLmxvZ2luPTEsZ0Uuc2VhcmNoPTEsZ0Uuc2VsZWN0X2NvbnRlbnQ9MSxnRS5zaGFyZT0xLGdFLnNpZ25fdXA9MSxnRS52aWV3X3NlYXJjaF9yZXN1bHRzPTEsZ0VbVC5nLm1jXT0xLGdFW1QuZy5pYl09MSxnRVtULmcuRGJdPTEsZ0VbVC5nLmpiXT0xLGdFW1QuZy5MYV09MSxnRSkpLGlFPWZ1bmN0aW9uKGEpe3ZhciBiPVwiZ2VuZXJhbFwiO2ZFW2FdP2I9XCJlY29tbWVyY2VcIjpoRVthXT9iPVwiZW5nYWdlbWVudFwiOmE9PT1cImV4Y2VwdGlvblwiJiYoYj1cImVycm9yXCIpO3JldHVybiBifSxqRT17fSxrRT1PYmplY3QuZnJlZXplKChqRS52aWV3X3NlYXJjaF9yZXN1bHRzPTEsakVbVC5nLmliXT0xLFxuakVbVC5nLmpiXT0xLGpFW1QuZy5MYV09MSxqRSkpLEREPWZ1bmN0aW9uKGEsYixjKXthLmhhc093blByb3BlcnR5KGIpfHwoYVtiXT1jKX0sbEU9ZnVuY3Rpb24oYSl7aWYoQXJyYXkuaXNBcnJheShhKSl7Zm9yKHZhciBiPVtdLGM9MDtjPGEubGVuZ3RoO2MrKyl7dmFyIGQ9YVtjXTtpZihkIT12b2lkIDApe3ZhciBlPWQuaWQsZj1kLnZhcmlhbnQ7ZSE9dm9pZCAwJiZmIT12b2lkIDAmJmIucHVzaChTdHJpbmcoZSkrXCIuXCIrU3RyaW5nKGYpKX19cmV0dXJuIGIubGVuZ3RoPjA/Yi5qb2luKFwiIVwiKTp2b2lkIDB9fSx6RD1mdW5jdGlvbihhLGIsYyl7dmFyIGQ9ZnVuY3Rpb24oTil7cmV0dXJuIFUoYyxOKX0sZT17fSxmPXt9LGc9e30saz17fSxtPWxFKGQoVC5nLkZpKSk7IWMuaXNHdG1FdmVudCYmbSYmREQoZixcImV4cFwiLG0pO2dbXCImZ3RtXCJdPVluKHtzYTpjLmV2ZW50TWV0YWRhdGEuc291cmNlX2Nhbm9uaWNhbF9pZCxIZjohMH0pO2MuaXNHdG1FdmVudHx8KGcuX25vX3NsYz0hMCk7XG5BaygpJiYoay5fY3M9UEQpO3ZhciBuPWQoVC5nLlZjKTtpZighYy5pc0d0bUV2ZW50JiZTYShuKSlmb3IodmFyIHAgaW4gbilpZihuLmhhc093blByb3BlcnR5KHApJiYvXihkaW1lbnNpb258bWV0cmljKVxcZCskLy50ZXN0KHApJiZuW3BdIT12b2lkIDApe3ZhciBxPWQoU3RyaW5nKG5bcF0pKTtxIT09dm9pZCAwJiZERChmLHAscSl9Zm9yKHZhciByPSFjLmlzR3RtRXZlbnQsdD1EbChjKSx1PTA7dTx0Lmxlbmd0aDsrK3Upe3ZhciB2PXRbdV07aWYoYy5pc0d0bUV2ZW50KXt2YXIgdz1kKHYpOyRELmhhc093blByb3BlcnR5KHYpP2Vbdl09dzpWRC5oYXNPd25Qcm9wZXJ0eSh2KT9rW3ZdPXc6Z1t2XT13fWVsc2V7dmFyIHg9dm9pZCAwO3g9diE9PVQuZy5rYT9kKHYpOkVsKGMsdik7aWYoWkQuaGFzT3duUHJvcGVydHkodikpSEQoWkRbdl0sdix4LGUpO2Vsc2UgaWYoV0QuaGFzT3duUHJvcGVydHkodikpSEQoV0Rbdl0sdix4LGcpO2Vsc2UgaWYodUQuaGFzT3duUHJvcGVydHkodikpSEQodURbdl0sXG52LHgsZik7ZWxzZSBpZih0RC5oYXNPd25Qcm9wZXJ0eSh2KSlIRCh0RFt2XSx2LHgsayk7ZWxzZSBpZigvXihkaW1lbnNpb258bWV0cmljfGNvbnRlbnRfZ3JvdXApXFxkKyQvLnRlc3QodikpSEQoMSx2LHgsZik7ZWxzZSBpZih2PT09VC5nLmthKXtpZighUUQpe3ZhciB5PUxiKHgpO3kmJihmW1wiJmRpZFwiXT15KX12YXIgQT12b2lkIDAsQj12b2lkIDA7Yj09PVQuZy5iYT9BPUxiKEVsKGMsdiksXCIuXCIpOihBPUxiKEVsKGMsdiwxKSxcIi5cIiksQj1MYihFbChjLHYsMiksXCIuXCIpKTtBJiYoZltcIiZnZGlkXCJdPUEpO0ImJihmW1wiJmVkaWRcIl09Qil9ZWxzZSB2PT09VC5nLk5hJiZ0LmluZGV4T2YoVC5nLm9jKTwwJiYoay5jb29raWVOYW1lPXgrXCJfZ2FcIik7USgxMTApJiZTRFt2XSYmKGMuSC5oYXNPd25Qcm9wZXJ0eSh2KXx8Yj09PVQuZy5iYSYmYy5qLmhhc093blByb3BlcnR5KHYpKSYmKHI9ITEpfX1RKDExMCkmJnImJihmW1wiJmpzc2N1dFwiXT1cIjFcIik7ZChULmcuY2YpIT09ITEmJmQoVC5nLmxiKSE9PVxuITEmJnNEKCl8fChnLmFsbG93QWRGZWF0dXJlcz0hMSk7Zy5hbGxvd0FkUGVyc29uYWxpemF0aW9uU2lnbmFscz1FbihjKTshYy5pc0d0bUV2ZW50JiZkKFQuZy5XYSkmJihrLl91c2VVcD0hMCk7aWYoYy5pc0d0bUV2ZW50KXtrLm5hbWU9ay5uYW1lfHxlLmd0bVRyYWNrZXJOYW1lO3ZhciBDPWcuaGl0Q2FsbGJhY2s7Zy5oaXRDYWxsYmFjaz1mdW5jdGlvbigpe29iKEMpJiZDKCk7Yy5vblN1Y2Nlc3MoKX19ZWxzZXtERChrLFwiY29va2llRG9tYWluXCIsXCJhdXRvXCIpO0REKGcsXCJmb3JjZVNTTFwiLCEwKTtERChlLFwiZXZlbnRDYXRlZ29yeVwiLGlFKGIpKTtrRVtiXSYmREQoZixcIm5vbkludGVyYWN0aW9uXCIsITApO2I9PT1cImxvZ2luXCJ8fGI9PT1cInNpZ25fdXBcInx8Yj09PVwic2hhcmVcIj9ERChlLFwiZXZlbnRMYWJlbFwiLGQoVC5nLnlnKSk6Yj09PVwic2VhcmNoXCJ8fGI9PT1cInZpZXdfc2VhcmNoX3Jlc3VsdHNcIj9ERChlLFwiZXZlbnRMYWJlbFwiLGQoVC5nLlRpKSk6Yj09PVwic2VsZWN0X2NvbnRlbnRcIiYmXG5ERChlLFwiZXZlbnRMYWJlbFwiLGQoVC5nLnppKSk7dmFyIEg9ZVtULmcucWFdfHx7fSxJPUhbVC5nLnpjXTtJfHxJIT0wJiZIW1QuZy5XXT9rLmFsbG93TGlua2VyPSEwOkk9PT0hMSYmREQoayxcInVzZUFtcENsaWVudElkXCIsITEpO2YuaGl0Q2FsbGJhY2s9Yy5vblN1Y2Nlc3M7ay5uYW1lPWF9Rm4oKSYmKGdbXCImZ2NzXCJdPUduKCkpO2dbXCImZ2NkXCJdPUtuKGMpO0FrKCkmJihXKFQuZy5VKXx8KGsuc3RvcmFnZT1cIm5vbmVcIiksVyhbVC5nLlAsVC5nLk9dKXx8KGcuYWxsb3dBZEZlYXR1cmVzPSExLGsuc3RvcmVHYWM9ITEpKTtObigpJiYoZ1tcIiZkbWFfY3BzXCJdPUxuKCkpO2dbXCImZG1hXCJdPU1uKCk7am4ocm4oKSkmJihnW1wiJnRjZmRcIl09VW4oKSk7QmkuaiYmKGdbXCImdGFnX2V4cFwiXT1CaS5qKTt2YXIgRj1paihjKXx8ZChULmcucWIpLE89ZChULmcuVWQpO0YmJihjLmlzR3RtRXZlbnR8fChrW1QuZy5xYl09Riksay5fY2QybD0hMCk7TyYmIWMuaXNHdG1FdmVudCYmKGtbVC5nLlVkXT1cbk8pO2UuZmllbGRzVG9TZW5kPWY7ZS5maWVsZHNUb1NldD1nO2UuY3JlYXRlT25seUZpZWxkcz1rO3JldHVybiBlfSxFRD1mdW5jdGlvbihhKXt2YXIgYj1hLmd0bUVjb21tZXJjZURhdGE7aWYoIWIpcmV0dXJuIG51bGw7dmFyIGM9e307Yi5jdXJyZW5jeUNvZGUmJihjLmVoPWIuY3VycmVuY3lDb2RlKTtpZihiLmltcHJlc3Npb25zKXtjLmFjdGlvbj1cImltcHJlc3Npb25zXCI7dmFyIGQ9Yi5pbXByZXNzaW9ucztjLkxqPWIudHJhbnNsYXRlSWZLZXlFcXVhbHM9PT1cImltcHJlc3Npb25zXCI/T0QoZCk6ZH1pZihiLnByb21vVmlldyl7Yy5hY3Rpb249XCJwcm9tb192aWV3XCI7dmFyIGU9Yi5wcm9tb1ZpZXcucHJvbW90aW9ucztjLlVlPWIudHJhbnNsYXRlSWZLZXlFcXVhbHM9PT1cInByb21vVmlld1wiP09EKGUpOmV9aWYoYi5wcm9tb0NsaWNrKXtjLmFjdGlvbj1cInByb21vX2NsaWNrXCI7dmFyIGY9Yi5wcm9tb0NsaWNrLnByb21vdGlvbnM7Yy5VZT1iLnRyYW5zbGF0ZUlmS2V5RXF1YWxzPT09XG5cInByb21vQ2xpY2tcIj9PRChmKTpmO2MudmI9Yi5wcm9tb0NsaWNrLmFjdGlvbkZpZWxkO3JldHVybiBjfWZvcih2YXIgZyBpbiBiKWlmKGJbZ10hPT12b2lkIDAmJmchPT1cInRyYW5zbGF0ZUlmS2V5RXF1YWxzXCImJmchPT1cImltcHJlc3Npb25zXCImJmchPT1cInByb21vVmlld1wiJiZnIT09XCJwcm9tb0NsaWNrXCImJmchPT1cImN1cnJlbmN5Q29kZVwiKXtjLmFjdGlvbj1nO3ZhciBrPWJbZ10ucHJvZHVjdHM7Yy5KYz1iLnRyYW5zbGF0ZUlmS2V5RXF1YWxzPT09XCJwcm9kdWN0c1wiP09EKGspOms7Yy52Yj1iW2ddLmFjdGlvbkZpZWxkO2JyZWFrfXJldHVybiBPYmplY3Qua2V5cyhjKS5sZW5ndGg/YzpudWxsfSxGRD1mdW5jdGlvbihhLGIpe2Z1bmN0aW9uIGModSl7cmV0dXJue2lkOmQoVC5nLnlhKSxhZmZpbGlhdGlvbjpkKFQuZy5qZykscmV2ZW51ZTpkKFQuZy5sYSksdGF4OmQoVC5nLmpmKSxzaGlwcGluZzpkKFQuZy5ZYyksY291cG9uOmQoVC5nLmtnKSxsaXN0OmQoVC5nLmhmKXx8ZChULmcuWGMpfHxcbnV9fWZvcih2YXIgZD1mdW5jdGlvbih1KXtyZXR1cm4gVShiLHUpfSxlPWQoVC5nLmRhKSxmLGc9MDtlJiZnPGUubGVuZ3RoJiYhKGY9ZVtnXVtULmcuaGZdfHxlW2ddW1QuZy5YY10pO2crKyk7dmFyIGs9ZChULmcuVmMpO2lmKFNhKGspKWZvcih2YXIgbT0wO2UmJm08ZS5sZW5ndGg7KyttKXt2YXIgbj1lW21dLHA7Zm9yKHAgaW4gaylrLmhhc093blByb3BlcnR5KHApJiYvXihkaW1lbnNpb258bWV0cmljKVxcZCskLy50ZXN0KHApJiZrW3BdIT12b2lkIDAmJkREKG4scCxuW2tbcF1dKX12YXIgcT1udWxsLHI9ZChULmcuRWkpO2lmKGE9PT1ULmcuSGF8fGE9PT1ULmcubmMpcT17YWN0aW9uOmEsdmI6YygpLEpjOk9EKGUpfTtlbHNlIGlmKGE9PT1ULmcuamMpcT17YWN0aW9uOlwiYWRkXCIsdmI6YygpLEpjOk9EKGUpfTtlbHNlIGlmKGE9PT1ULmcua2MpcT17YWN0aW9uOlwicmVtb3ZlXCIsdmI6YygpLEpjOk9EKGUpfTtlbHNlIGlmKGE9PT1ULmcuTGEpcT17YWN0aW9uOlwiZGV0YWlsXCIsdmI6YyhmKSxcbkpjOk9EKGUpfTtlbHNlIGlmKGE9PT1ULmcuaWIpcT17YWN0aW9uOlwiaW1wcmVzc2lvbnNcIixMajpPRChlKX07ZWxzZSBpZihhPT09VC5nLmpiKXE9e2FjdGlvbjpcInByb21vX3ZpZXdcIixVZTpPRChyKXx8T0QoZSl9O2Vsc2UgaWYoYT09PVwic2VsZWN0X2NvbnRlbnRcIiYmciYmci5sZW5ndGg+MHx8YT09PVQuZy5EYilxPXthY3Rpb246XCJwcm9tb19jbGlja1wiLFVlOk9EKHIpfHxPRChlKX07ZWxzZSBpZihhPT09XCJzZWxlY3RfY29udGVudFwifHxhPT09VC5nLm1jKXE9e2FjdGlvbjpcImNsaWNrXCIsdmI6e2xpc3Q6ZChULmcuaGYpfHxkKFQuZy5YYyl8fGZ9LEpjOk9EKGUpfTtlbHNlIGlmKGE9PT1ULmcuUmJ8fGE9PT1cImNoZWNrb3V0X3Byb2dyZXNzXCIpe3ZhciB0PXtzdGVwOmE9PT1ULmcuUmI/MTpkKFQuZy5mZiksb3B0aW9uOmQoVC5nLk5kKX07cT17YWN0aW9uOlwiY2hlY2tvdXRcIixKYzpPRChlKSx2YjpoKGMoKSx0KX19ZWxzZSBhPT09XCJzZXRfY2hlY2tvdXRfb3B0aW9uXCImJihxPXthY3Rpb246XCJjaGVja291dF9vcHRpb25cIixcbnZiOntzdGVwOmQoVC5nLmZmKSxvcHRpb246ZChULmcuTmQpfX0pO3EmJihxLmVoPWQoVC5nLnhhKSk7cmV0dXJuIHF9LG1FPXt9LEFEPWZ1bmN0aW9uKGEsYil7dmFyIGM9bUVbYV07bUVbYV09aChiKTtpZighYylyZXR1cm4hMTtmb3IodmFyIGQgaW4gYilpZihiLmhhc093blByb3BlcnR5KGQpJiZiW2RdIT09Y1tkXSlyZXR1cm4hMDtmb3IodmFyIGUgaW4gYylpZihjLmhhc093blByb3BlcnR5KGUpJiZjW2VdIT09YltlXSlyZXR1cm4hMDtyZXR1cm4hMX07ZnVuY3Rpb24gbkUoYSxiLGMsZCl7fW5FLko9XCJpbnRlcm5hbC5leGVjdXRlRXZlbnRQcm9jZXNzb3JcIjtmdW5jdGlvbiBvRShhKXt2YXIgYjtyZXR1cm4gZGQoYix0aGlzLkYsMSl9b0UuSj1cImludGVybmFsLmV4ZWN1dGVKYXZhc2NyaXB0U3RyaW5nXCI7ZnVuY3Rpb24gcEUoYSl7dmFyIGI7cmV0dXJuIGJ9O3ZhciBxRT1udWxsO1xuZnVuY3Rpb24gckUoKXt2YXIgYT1uZXcgWWE7cmV0dXJuIGF9XG5yRS5UPVwiZ2V0Q29udGFpbmVyVmVyc2lvblwiO2Z1bmN0aW9uIHNFKGEsYil7Yj1iPT09dm9pZCAwPyEwOmI7dmFyIGM7cmV0dXJuIGN9c0UuVD1cImdldENvb2tpZVZhbHVlc1wiO2Z1bmN0aW9uIHRFKCl7cmV0dXJuIE1rKCl9dEUuSj1cImludGVybmFsLmdldENvdW50cnlDb2RlXCI7ZnVuY3Rpb24gdUUoKXt2YXIgYT1bXTtyZXR1cm4gZGQoYSl9dUUuSj1cImludGVybmFsLmdldERlc3RpbmF0aW9uSWRzXCI7ZnVuY3Rpb24gdkUoYSxiKXt2YXIgYz1udWxsO3JldHVybiBjfXZFLko9XCJpbnRlcm5hbC5nZXRFbGVtZW50QXR0cmlidXRlXCI7ZnVuY3Rpb24gd0UoYSl7dmFyIGI9bnVsbDtyZXR1cm4gYn13RS5KPVwiaW50ZXJuYWwuZ2V0RWxlbWVudEJ5SWRcIjtmdW5jdGlvbiB4RShhKXt2YXIgYj1cIlwiO3JldHVybiBifXhFLko9XCJpbnRlcm5hbC5nZXRFbGVtZW50SW5uZXJUZXh0XCI7ZnVuY3Rpb24geUUoYSxiKXt2YXIgYz1udWxsO3JldHVybiBjfXlFLko9XCJpbnRlcm5hbC5nZXRFbGVtZW50UHJvcGVydHlcIjtmdW5jdGlvbiB6RShhKXt2YXIgYjtyZXR1cm4gYn16RS5KPVwiaW50ZXJuYWwuZ2V0RWxlbWVudFZhbHVlXCI7ZnVuY3Rpb24gQUUoYSl7dmFyIGI9MDtyZXR1cm4gYn1BRS5KPVwiaW50ZXJuYWwuZ2V0RWxlbWVudFZpc2liaWxpdHlSYXRpb1wiO2Z1bmN0aW9uIEJFKGEpe3ZhciBiPW51bGw7cmV0dXJuIGJ9QkUuSj1cImludGVybmFsLmdldEVsZW1lbnRzQnlDc3NTZWxlY3RvclwiO1xuZnVuY3Rpb24gQ0UoYSl7dmFyIGI7Syh0aGlzLmdldE5hbWUoKSxbXCJrZXlQYXRoOiFzdHJpbmdcIl0sYXJndW1lbnRzKTtMKHRoaXMsXCJyZWFkX2V2ZW50X2RhdGFcIixhKTt2YXIgYzthOnt2YXIgZD1hLGU9enoodGhpcykub3JpZ2luYWxFdmVudERhdGE7aWYoZSl7Zm9yKHZhciBmPWUsZz17fSxrPXt9LG09e30sbj1bXSxwPWQuc3BsaXQoXCJcXFxcXFxcXFwiKSxxPTA7cTxwLmxlbmd0aDtxKyspe2Zvcih2YXIgcj1wW3FdLnNwbGl0KFwiXFxcXC5cIiksdD0wO3Q8ci5sZW5ndGg7dCsrKXtmb3IodmFyIHU9clt0XS5zcGxpdChcIi5cIiksdj0wO3Y8dS5sZW5ndGg7disrKW4ucHVzaCh1W3ZdKSx2IT09dS5sZW5ndGgtMSYmbi5wdXNoKG0pO3QhPT1yLmxlbmd0aC0xJiZuLnB1c2goayl9cSE9PXAubGVuZ3RoLTEmJm4ucHVzaChnKX1mb3IodmFyIHc9W10seD1cIlwiLHk9bmEobiksQT15Lm5leHQoKTshQS5kb25lO0E9XG55Lm5leHQoKSl7dmFyIEI9QS52YWx1ZTtCPT09bT8ody5wdXNoKHgpLHg9XCJcIik6eD1CPT09Zz94K1wiXFxcXFwiOkI9PT1rP3grXCIuXCI6eCtCfXgmJncucHVzaCh4KTtmb3IodmFyIEM9bmEodyksSD1DLm5leHQoKTshSC5kb25lO0g9Qy5uZXh0KCkpe2lmKGY9PW51bGwpe2M9dm9pZCAwO2JyZWFrIGF9Zj1mW0gudmFsdWVdfWM9Zn1lbHNlIGM9dm9pZCAwfWI9ZGQoYyx0aGlzLkYsMSk7cmV0dXJuIGJ9Q0UuSj1cImludGVybmFsLmdldEV2ZW50RGF0YVwiO3ZhciBERT17fTtERS5lbmFibGVBV0ZsZWRnZT1RKDI3KTtERS5lbmFibGVBZHNDb252ZXJzaW9uVmFsaWRhdGlvbj1RKDE1KTtERS5lbmFibGVBdXRvUGlpT25QaG9uZUFuZEFkZHJlc3M9USgyNik7REUuZW5hYmxlQ2FjaGVkRWNvbW1lcmNlRGF0YT1RKDMzKTtERS5lbmFibGVDY2RQcmVBdXRvUGlpRGV0ZWN0aW9uPVEoMzQpO0RFLmVuYWJsZUNsb3VkUmVjb21tZW50YXRpb25zRXJyb3JMb2dnaW5nPVEoMzUpO0RFLmVuYWJsZUNsb3VkUmVjb21tZW50YXRpb25zU2NoZW1hSW5nZXN0aW9uPVEoMzYpO0RFLmVuYWJsZUNsb3VkUmV0YWlsSW5qZWN0UHVyY2hhc2VNZXRhZGF0YT1RKDM4KTtERS5lbmFibGVDbG91ZFJldGFpbExvZ2dpbmc9USgzNyk7REUuZW5hYmxlQ2xvdWRSZXRhaWxQYWdlQ2F0ZWdvcmllcz1RKDM5KTtERS5lbmFibGVDb25zZW50RGlzY2xvc3VyZUFjdGl2aXR5PVEoNDEpO0RFLmVuYWJsZUNvbnZlcnNpb25NYXJrZXJQYWdlVmlld1JlbmFtZT1RKDQzKTtcbkRFLmVuYWJsZURDRmxlZGdlPVEoNDcpO0RFLmVuYWJsZURlY29kZVVyaT1RKDY4KTtERS5lbmFibGVEZWZlckFsbEVuaGFuY2VkTWVhc3VyZW1lbnQ9USg0OCk7REUuZW5hYmxlRG1hQmxvY2tEaXNjbG9zdXJlPVEoNTEpO0RFLmVuYWJsZUV1aWRBdXRvTW9kZT1RKDU2KTtERS5lbmFibGVGb3JtU2tpcFZhbGlkYXRpb249USg2Myk7REUuZW5hYmxlR3RtRWNNb2RlRml4PVEoNzIpO0RFLmVuYWJsZVVybERlY29kZUV2ZW50VXNhZ2U9USgxMDEpO0RFLmVuYWJsZVpvbmVDb25maWdJbkNoaWxkQ29udGFpbmVycz1RKDEwMyk7REUudXNlRW5hYmxlQXV0b0V2ZW50T25Gb3JtQXBpcz1RKDExMik7REUuYXV0b1BpaUVsaWdpYmxlPVJrKCk7ZnVuY3Rpb24gRUUoKXtyZXR1cm4gZGQoREUpfUVFLko9XCJpbnRlcm5hbC5nZXRGbGFnc1wiO2Z1bmN0aW9uIEZFKCl7cmV0dXJuIG5ldyBhZChZeSl9RkUuSj1cImludGVybmFsLmdldEh0bWxJZFwiO2Z1bmN0aW9uIEdFKGEsYil7dmFyIGM7cmV0dXJuIGN9R0UuSj1cImludGVybmFsLmdldFByb2R1Y3RTZXR0aW5nc1BhcmFtZXRlclwiO2Z1bmN0aW9uIEhFKGEsYil7dmFyIGM7cmV0dXJuIGN9SEUuVD1cImdldFF1ZXJ5UGFyYW1ldGVyc1wiO2Z1bmN0aW9uIElFKGEsYil7dmFyIGM7cmV0dXJuIGN9SUUuVD1cImdldFJlZmVycmVyUXVlcnlQYXJhbWV0ZXJzXCI7ZnVuY3Rpb24gSkUoYSl7dmFyIGI9XCJcIjtyZXR1cm4gYn1KRS5UPVwiZ2V0UmVmZXJyZXJVcmxcIjtmdW5jdGlvbiBLRSgpe3JldHVybiBOaygpfUtFLko9XCJpbnRlcm5hbC5nZXRSZWdpb25Db2RlXCI7ZnVuY3Rpb24gTEUoYSxiKXt2YXIgYztyZXR1cm4gY31MRS5KPVwiaW50ZXJuYWwuZ2V0UmVtb3RlQ29uZmlnUGFyYW1ldGVyXCI7ZnVuY3Rpb24gTUUoYSl7dmFyIGI9XCJcIjtyZXR1cm4gYn1NRS5UPVwiZ2V0VXJsXCI7ZnVuY3Rpb24gTkUoKXtMKHRoaXMsXCJnZXRfdXNlcl9hZ2VudFwiKTtyZXR1cm4gb2MudXNlckFnZW50fU5FLko9XCJpbnRlcm5hbC5nZXRVc2VyQWdlbnRcIjtmdW5jdGlvbiBWRSgpe3JldHVybiBELmdhR2xvYmFsPUQuZ2FHbG9iYWx8fHt9fWZ1bmN0aW9uIFdFKCl7dmFyIGE9VkUoKTthLmhpZD1hLmhpZHx8c2IoKTtyZXR1cm4gYS5oaWR9ZnVuY3Rpb24gWEUoYSxiKXt2YXIgYz1WRSgpO2lmKGMudmlkPT09dm9pZCAwfHxiJiYhYy5mcm9tX2Nvb2tpZSljLnZpZD1hLGMuZnJvbV9jb29raWU9Yn07ZnVuY3Rpb24gc0YoYSl7dmFyIGI9USg2NSkmJkRpKCk7aWYoWHMoYSl8fGIpYS5vW1QuZy5WaV09TmsoKXx8TWsoKX07dmFyIElGPWZ1bmN0aW9uKGEpe3RoaXMuSD1hO3RoaXMuaj1cIlwifSxKRj1mdW5jdGlvbihhLGIpe2EuRD1iO3JldHVybiBhfSxLRj1mdW5jdGlvbihhLGIpe2I9YS5qK2I7Zm9yKHZhciBjPWIuaW5kZXhPZihcIlxcblxcblwiKTtjIT09LTE7KXt2YXIgZD1hLGU7YTp7dmFyIGY9bmEoYi5zdWJzdHJpbmcoMCxjKS5zcGxpdChcIlxcblwiKSksZz1mLm5leHQoKS52YWx1ZSxrPWYubmV4dCgpLnZhbHVlO2lmKGcuaW5kZXhPZihcImV2ZW50OiBtZXNzYWdlXCIpPT09MCYmay5pbmRleE9mKFwiZGF0YTogXCIpPT09MCl0cnl7ZT1KU09OLnBhcnNlKGsuc3Vic3RyaW5nKGsuaW5kZXhPZihcIjpcIikrMSkpO2JyZWFrIGF9Y2F0Y2goRil7fWU9dm9pZCAwfXZhciBtPWQsbj1lO2lmKG4pe3ZhciBwPW4uc2VuZF9waXhlbCxxPW4ub3B0aW9ucyxyPW0uSDtpZihwKXt2YXIgdD1wfHxbXTtpZihBcnJheS5pc0FycmF5KHQpKWZvcih2YXIgdT1TYShxKT9xOnt9LHY9bmEodCksdz12Lm5leHQoKTshdy5kb25lO3c9di5uZXh0KCkpcih3LnZhbHVlLFxudSl9dmFyIHg9bi5jcmVhdGVfaWZyYW1lLHk9bi5vcHRpb25zLEE9bS5EO2lmKHgmJkEpe3ZhciBCPXh8fFtdO2lmKEFycmF5LmlzQXJyYXkoQikpZm9yKHZhciBDPVNhKHkpP3k6e30sSD1uYShCKSxJPUgubmV4dCgpOyFJLmRvbmU7ST1ILm5leHQoKSlBKEkudmFsdWUsQyl9fWI9Yi5zdWJzdHJpbmcoYysyKTtjPWIuaW5kZXhPZihcIlxcblxcblwiKX1hLmo9Yn07ZnVuY3Rpb24gTEYoYSl7dmFyIGI9YS5zZWFyY2g7cmV0dXJuIGEucHJvdG9jb2wrXCIvL1wiK2EuaG9zdG5hbWUrYS5wYXRobmFtZSsoYj9iK1wiJnJpY2hzc3Rzc2VcIjpcIj9yaWNoc3N0c3NlXCIpfTt2YXIgd0c9d2luZG93LHhHPWRvY3VtZW50LHlHPWZ1bmN0aW9uKGEpe3ZhciBiPXdHLl9nYVVzZXJQcmVmcztpZihiJiZiLmlvbyYmYi5pb28oKXx8eEcuZG9jdW1lbnRFbGVtZW50Lmhhc0F0dHJpYnV0ZShcImRhdGEtZ29vZ2xlLWFuYWx5dGljcy1vcHQtb3V0XCIpfHxhJiZ3R1tcImdhLWRpc2FibGUtXCIrYV09PT0hMClyZXR1cm4hMDt0cnl7dmFyIGM9d0cuZXh0ZXJuYWw7aWYoYyYmYy5fZ2FVc2VyUHJlZnMmJmMuX2dhVXNlclByZWZzPT1cIm9vXCIpcmV0dXJuITB9Y2F0Y2gocCl7fWZvcih2YXIgZD1bXSxlPVN0cmluZyh4Ry5jb29raWUpLnNwbGl0KFwiO1wiKSxmPTA7ZjxlLmxlbmd0aDtmKyspe3ZhciBnPWVbZl0uc3BsaXQoXCI9XCIpLGs9Z1swXS5yZXBsYWNlKC9eXFxzKnxcXHMqJC9nLFwiXCIpO2lmKGsmJms9PVwiQU1QX1RPS0VOXCIpe3ZhciBtPWcuc2xpY2UoMSkuam9pbihcIj1cIikucmVwbGFjZSgvXlxccyp8XFxzKiQvZyxcIlwiKTttJiYobT1kZWNvZGVVUklDb21wb25lbnQobSkpO2QucHVzaChtKX19Zm9yKHZhciBuPVxuMDtuPGQubGVuZ3RoO24rKylpZihkW25dPT1cIiRPUFRfT1VUXCIpcmV0dXJuITA7cmV0dXJuIHhHLmdldEVsZW1lbnRCeUlkKFwiX19nYU9wdE91dEV4dGVuc2lvblwiKT8hMDohMX07ZnVuY3Rpb24gSkcoYSl7eihhLGZ1bmN0aW9uKGMpe2MuY2hhckF0KDApPT09XCJfXCImJmRlbGV0ZSBhW2NdfSk7dmFyIGI9YVtULmcuYWJdfHx7fTt6KGIsZnVuY3Rpb24oYyl7Yy5jaGFyQXQoMCk9PT1cIl9cIiYmZGVsZXRlIGJbY119KX12YXIgbUg9ZnVuY3Rpb24oYSxiKXt9O2Z1bmN0aW9uIGxIKGEsYil7dmFyIGM9ZnVuY3Rpb24oKXt9O3JldHVybiBjfVxuZnVuY3Rpb24gbkgoYSxiLGMpe307dmFyIG9IPWxIO2Z1bmN0aW9uIHFIKGEsYixjKXt2YXIgZD10aGlzO31xSC5KPVwiaW50ZXJuYWwuZ3RhZ0NvbmZpZ1wiO2Z1bmN0aW9uIHJIKCl7dmFyIGE9e307cmV0dXJuIGF9O1xuZnVuY3Rpb24gdEgoYSxiKXt9dEguVD1cImd0YWdTZXRcIjtmdW5jdGlvbiB1SChhLGIpe311SC5UPVwiaW5qZWN0SGlkZGVuSWZyYW1lXCI7dmFyIHZIPWx6KCk7XG5mdW5jdGlvbiB3SChhLGIsYyxkLGUpe313SC5KPVwiaW50ZXJuYWwuaW5qZWN0SHRtbFwiO3ZhciBBSD17fTtcbmZ1bmN0aW9uIENIKGEsYixjLGQpe312YXIgREg9e2RsOjEsaWQ6MX0sRUg9e307XG5mdW5jdGlvbiBGSChhLGIsYyxkKXt9Q0guVD1cImluamVjdFNjcmlwdFwiO0ZILko9XCJpbnRlcm5hbC5pbmplY3RTY3JpcHRcIjtmdW5jdGlvbiBHSChhKXt2YXIgYj0hMDtyZXR1cm4gYn1HSC5UPVwiaXNDb25zZW50R3JhbnRlZFwiO2Z1bmN0aW9uIEhIKCl7cmV0dXJuIFBrKCl9SEguSj1cImludGVybmFsLmlzRG1hUmVnaW9uXCI7ZnVuY3Rpb24gSUgoYSl7dmFyIGI9ITE7cmV0dXJuIGJ9SUguSj1cImludGVybmFsLmlzRW50aXR5SW5mcmFzdHJ1Y3R1cmVcIjtmdW5jdGlvbiBKSCgpe3ZhciBhPVhnKGZ1bmN0aW9uKGIpe3p6KHRoaXMpLmxvZyhcImVycm9yXCIsYil9KTthLlQ9XCJKU09OXCI7cmV0dXJuIGF9O2Z1bmN0aW9uIEtIKGEpe3ZhciBiPXZvaWQgMDtyZXR1cm4gZGQoYil9S0guSj1cImludGVybmFsLmxlZ2FjeVBhcnNlVXJsXCI7ZnVuY3Rpb24gTEgoKXtyZXR1cm4hMX1cbnZhciBNSD17Z2V0SXRlbTpmdW5jdGlvbihhKXt2YXIgYj1udWxsO3JldHVybiBifSxzZXRJdGVtOmZ1bmN0aW9uKGEsYil7cmV0dXJuITF9LHJlbW92ZUl0ZW06ZnVuY3Rpb24oYSl7fX07ZnVuY3Rpb24gTkgoKXt9TkguVD1cImxvZ1RvQ29uc29sZVwiO2Z1bmN0aW9uIE9IKGEsYil7fU9ILko9XCJpbnRlcm5hbC5tZXJnZVJlbW90ZUNvbmZpZ1wiO2Z1bmN0aW9uIFBIKGEsYixjKXtjPWM9PT12b2lkIDA/ITA6Yzt2YXIgZD1bXTtyZXR1cm4gZGQoZCl9UEguSj1cImludGVybmFsLnBhcnNlQ29va2llVmFsdWVzRnJvbVN0cmluZ1wiO2Z1bmN0aW9uIFFIKGEpe3ZhciBiPXZvaWQgMDtyZXR1cm4gYn1RSC5UPVwicGFyc2VVcmxcIjtmdW5jdGlvbiBSSChhKXt9UkguSj1cImludGVybmFsLnByb2Nlc3NBc05ld0V2ZW50XCI7ZnVuY3Rpb24gU0goYSxiLGMpe3ZhciBkO3JldHVybiBkfVNILko9XCJpbnRlcm5hbC5wdXNoVG9EYXRhTGF5ZXJcIjtmdW5jdGlvbiBUSChhKXt2YXIgYj0hMTtyZXR1cm4gYn1USC5UPVwicXVlcnlQZXJtaXNzaW9uXCI7ZnVuY3Rpb24gVUgoKXt2YXIgYT1cIlwiO3JldHVybiBhfVVILlQ9XCJyZWFkQ2hhcmFjdGVyU2V0XCI7ZnVuY3Rpb24gVkgoKXtyZXR1cm4gaGkuaGJ9VkguSj1cImludGVybmFsLnJlYWREYXRhTGF5ZXJOYW1lXCI7ZnVuY3Rpb24gV0goKXt2YXIgYT1cIlwiO3JldHVybiBhfVdILlQ9XCJyZWFkVGl0bGVcIjtmdW5jdGlvbiBYSChhLGIpe3ZhciBjPXRoaXM7fVhILko9XCJpbnRlcm5hbC5yZWdpc3RlckNjZENhbGxiYWNrXCI7ZnVuY3Rpb24gWUgoYSl7cmV0dXJuITB9XG5ZSC5KPVwiaW50ZXJuYWwucmVnaXN0ZXJEZXN0aW5hdGlvblwiO3ZhciBaSD1bXCJjb25maWdcIixcImV2ZW50XCIsXCJnZXRcIixcInNldFwiXTtmdW5jdGlvbiAkSChhLGIsYyl7fSRILko9XCJpbnRlcm5hbC5yZWdpc3Rlckd0YWdDb21tYW5kTGlzdGVuZXJcIjtmdW5jdGlvbiBhSShhLGIpe3ZhciBjPSExO3JldHVybiBjfWFJLko9XCJpbnRlcm5hbC5yZW1vdmVEYXRhTGF5ZXJFdmVudExpc3RlbmVyXCI7ZnVuY3Rpb24gYkkoYSxiKXt9XG5iSS5KPVwiaW50ZXJuYWwucmVtb3ZlRm9ybURhdGFcIjtmdW5jdGlvbiBjSSgpe31jSS5UPVwicmVzZXREYXRhTGF5ZXJcIjtmdW5jdGlvbiBkSShhLGIsYyxkKXt9ZEkuSj1cImludGVybmFsLnNlbmRHdGFnRXZlbnRcIjtmdW5jdGlvbiBlSShhLGIsYyl7fWVJLlQ9XCJzZW5kUGl4ZWxcIjtmdW5jdGlvbiBmSShhLGIpe31mSS5KPVwiaW50ZXJuYWwuc2V0QW5jaG9ySHJlZlwiO2Z1bmN0aW9uIGdJKGEpe31nSS5KPVwiaW50ZXJuYWwuc2V0Q29udGFpbmVyQ29uc2VudERlZmF1bHRzXCI7ZnVuY3Rpb24gaEkoYSxiLGMsZCl7dmFyIGU9dGhpcztkPWQ9PT12b2lkIDA/ITA6ZDt2YXIgZj0hMTtyZXR1cm4gZn1oSS5UPVwic2V0Q29va2llXCI7ZnVuY3Rpb24gaUkoYSl7fWlJLko9XCJpbnRlcm5hbC5zZXRDb3JlUGxhdGZvcm1TZXJ2aWNlc1wiO2Z1bmN0aW9uIGpJKGEsYil7fWpJLko9XCJpbnRlcm5hbC5zZXREYXRhTGF5ZXJWYWx1ZVwiO2Z1bmN0aW9uIGtJKGEpe31rSS5UPVwic2V0RGVmYXVsdENvbnNlbnRTdGF0ZVwiO2Z1bmN0aW9uIGxJKGEsYil7fWxJLko9XCJpbnRlcm5hbC5zZXREZWxlZ2F0ZWRDb25zZW50VHlwZVwiO2Z1bmN0aW9uIG1JKGEsYil7fW1JLko9XCJpbnRlcm5hbC5zZXRGb3JtQWN0aW9uXCI7ZnVuY3Rpb24gbkkoYSxiLGMpe31uSS5KPVwiaW50ZXJuYWwuc2V0SW5Dcm9zc0NvbnRhaW5lckRhdGFcIjtmdW5jdGlvbiBvSShhLGIsYyl7cmV0dXJuITF9b0kuVD1cInNldEluV2luZG93XCI7ZnVuY3Rpb24gcEkoYSxiLGMpe31wSS5KPVwiaW50ZXJuYWwuc2V0UHJvZHVjdFNldHRpbmdzUGFyYW1ldGVyXCI7ZnVuY3Rpb24gcUkoYSxiLGMpe31xSS5KPVwiaW50ZXJuYWwuc2V0UmVtb3RlQ29uZmlnUGFyYW1ldGVyXCI7ZnVuY3Rpb24gckkoYSxiLGMsZCl7dmFyIGU9dGhpczt9ckkuVD1cInNoYTI1NlwiO2Z1bmN0aW9uIHNJKGEsYixjKXt9XG5zSS5KPVwiaW50ZXJuYWwuc29ydFJlbW90ZUNvbmZpZ1BhcmFtZXRlcnNcIjtmdW5jdGlvbiB0SShhLGIpe3ZhciBjPXZvaWQgMDtyZXR1cm4gY310SS5KPVwiaW50ZXJuYWwuc3Vic2NyaWJlVG9Dcm9zc0NvbnRhaW5lckRhdGFcIjt2YXIgdUk9e30sdkk9e307dUkuZ2V0SXRlbT1mdW5jdGlvbihhKXt2YXIgYj1udWxsO3JldHVybiBifTt1SS5zZXRJdGVtPWZ1bmN0aW9uKGEsYil7fTtcbnVJLnJlbW92ZUl0ZW09ZnVuY3Rpb24oYSl7fTt1SS5jbGVhcj1mdW5jdGlvbigpe307dUkuVD1cInRlbXBsYXRlU3RvcmFnZVwiO2Z1bmN0aW9uIHdJKGEsYil7dmFyIGM9ITE7cmV0dXJuIGN9d0kuSj1cImludGVybmFsLnRlc3RSZWdleFwiO2Z1bmN0aW9uIHhJKGEpe3ZhciBiO3JldHVybiBifTtmdW5jdGlvbiB5SShhKXt2YXIgYjtyZXR1cm4gYn15SS5KPVwiaW50ZXJuYWwudW5zaWxvSWRcIjtmdW5jdGlvbiB6SShhLGIpe3ZhciBjO3JldHVybiBjfXpJLko9XCJpbnRlcm5hbC51bnN1YnNjcmliZUZyb21Dcm9zc0NvbnRhaW5lckRhdGFcIjtmdW5jdGlvbiBBSShhKXt9QUkuVD1cInVwZGF0ZUNvbnNlbnRTdGF0ZVwiO3ZhciBCSTtmdW5jdGlvbiBDSShhLGIsYyl7Qkk9Qkl8fG5ldyBoaDtCSS5hZGQoYSxiLGMpfWZ1bmN0aW9uIERJKGEsYil7dmFyIGM9Qkk9Qkl8fG5ldyBoaDtpZihjLmouaGFzT3duUHJvcGVydHkoYSkpdGhyb3cgRXJyb3IoXCJBdHRlbXB0aW5nIHRvIGFkZCBhIHByaXZhdGUgZnVuY3Rpb24gd2hpY2ggYWxyZWFkeSBleGlzdHM6IFwiK2ErXCIuXCIpO2lmKGMuY29udGFpbnMoYSkpdGhyb3cgRXJyb3IoXCJBdHRlbXB0aW5nIHRvIGFkZCBhIHByaXZhdGUgZnVuY3Rpb24gd2l0aCBhbiBleGlzdGluZyBBUEkgbmFtZTogXCIrYStcIi5cIik7Yy5qW2FdPW9iKGIpP0VnKGEsYik6RmcoYSxiKX1cbmZ1bmN0aW9uIEVJKCl7cmV0dXJuIGZ1bmN0aW9uKGEpe3ZhciBiO3ZhciBjPUJJO2lmKGMuY29udGFpbnMoYSkpYj1jLmdldChhLHRoaXMpO2Vsc2V7dmFyIGQ7aWYoZD1jLmouaGFzT3duUHJvcGVydHkoYSkpe3ZhciBlPSExLGY9dGhpcy5GLmo7aWYoZil7dmFyIGc9Zi5jYigpO2lmKGcpe2cuaW5kZXhPZihcIl9fY3Z0X1wiKSE9PTAmJihlPSEwKTt9fWVsc2UgZT0hMDtkPWV9aWYoZCl7dmFyIGs9Yy5qLmhhc093blByb3BlcnR5KGEpP2MualthXTp2b2lkIDA7XG5iPWt9ZWxzZSB0aHJvdyBFcnJvcihhK1wiIGlzIG5vdCBhIHZhbGlkIEFQSSBuYW1lLlwiKTt9cmV0dXJuIGJ9fTt2YXIgRkk9ZnVuY3Rpb24oKXt2YXIgYT1mdW5jdGlvbihjKXtyZXR1cm4gREkoYy5KLGMpfSxiPWZ1bmN0aW9uKGMpe3JldHVybiBDSShjLlQsYyl9O2IodHopO2IoQXopO2IoT0EpO2IoUUEpO2IoUkEpO2IoV0EpO2IoWUEpO2IoYkIpO2IoZEIpO2IockUpO2Ioc0UpO2IoSEUpO2IoSUUpO2IoSkUpO2IoTUUpO2IodEgpO2IodUgpO2IoQ0gpO2IoR0gpO2IoTkgpO2IoUUgpO2IoVEgpO2IoVUgpO2IoV0gpO2IoZUkpO2IoaEkpO2Ioa0kpO2Iob0kpO2IockkpO2IodUkpO2IoQUkpO2IoSkgoKSk7Q0koXCJNYXRoXCIsSmcoKSk7Q0koXCJPYmplY3RcIixmaCk7Q0koXCJUZXN0SGVscGVyXCIsamgoKSk7Q0koXCJhc3NlcnRBcGlcIixHZyk7Q0koXCJhc3NlcnRUaGF0XCIsSGcpO0NJKFwiZGVjb2RlVXJpXCIsTGcpO0NJKFwiZGVjb2RlVXJpQ29tcG9uZW50XCIsTWcpO0NJKFwiZW5jb2RlVXJpXCIsTmcpO0NJKFwiZW5jb2RlVXJpQ29tcG9uZW50XCIsT2cpO0NJKFwiZmFpbFwiLFRnKTtDSShcImdlbmVyYXRlUmFuZG9tXCIsXG5VZyk7Q0koXCJnZXRUaW1lc3RhbXBcIixWZyk7Q0koXCJnZXRUaW1lc3RhbXBNaWxsaXNcIixWZyk7Q0koXCJnZXRUeXBlXCIsV2cpO0NJKFwibWFrZUludGVnZXJcIixZZyk7Q0koXCJtYWtlTnVtYmVyXCIsWmcpO0NJKFwibWFrZVN0cmluZ1wiLCRnKTtDSShcIm1ha2VUYWJsZU1hcFwiLGFoKTtDSShcIm1vY2tcIixkaCk7Q0koXCJmcm9tQmFzZTY0XCIscEUsIShcImF0b2JcImluIEQpKTtDSShcImxvY2FsU3RvcmFnZVwiLE1ILCFMSCgpKTtDSShcInRvQmFzZTY0XCIseEksIShcImJ0b2FcImluIEQpKTthKHd6KTthKFJ6KTthKGNBKTthKGpBKTthKG9BKTthKERBKTthKE1BKTthKFBBKTthKFNBKTthKFRBKTthKFVBKTthKFZBKTthKFhBKTthKFpBKTthKGFCKTthKGNCKTthKGVCKTthKGdCKTthKGhCKTthKGlCKTthKGpCKTthKGtCKTthKG9CKTthKHdCKTthKHhCKTthKElCKTthKE5CKTthKFNCKTthKGFDKTthKGZDKTthKHNDKTthKHVDKTthKElDKTthKEpDKTthKExDKTthKG5FKTthKG9FKTthKHRFKTthKHVFKTthKHZFKTtcbmEod0UpO2EoeEUpO2EoeUUpO2EoekUpO2EoQUUpO2EoQkUpO2EoQ0UpO2EoRUUpO2EoRkUpO2EoR0UpO2EoS0UpO2EoTEUpO2EocUgpO2Eod0gpO2EoRkgpO2EoSEgpO2EoSUgpO2EoS0gpO2EoQkEpO2EoT0gpO2EoUEgpO2EoUkgpO2EoU0gpO2EoVkgpO2EoWEgpO2EoWUgpO2EoJEgpO2EoYUkpO2EoYkkpO2EoZEkpO2EoZkkpO2EoZ0kpO2EoaUkpO2EoakkpO2EobEkpO2EobUkpO2EobkkpO2EocEkpO2EocUkpO2Eoc0kpO2EodEkpO2Eod0kpO2EoeUkpO2EoekkpO0RJKFwiaW50ZXJuYWwuQ3Jvc3NDb250YWluZXJTY2hlbWFcIixmQigpKTtESShcImludGVybmFsLkd0YWdTY2hlbWFcIixySCgpKTtDSShcIm1vY2tPYmplY3RcIixlaCk7cmV0dXJuIEVJKCl9O3ZhciByejtmdW5jdGlvbiBHSSgpe3J6Lmouai5IPWZ1bmN0aW9uKGEsYixjKXtpaS5TQU5EQk9YRURfSlNfU0VNQVBIT1JFPWlpLlNBTkRCT1hFRF9KU19TRU1BUEhPUkV8fDA7aWkuU0FOREJPWEVEX0pTX1NFTUFQSE9SRSsrO3RyeXtyZXR1cm4gYS5hcHBseShiLGMpfWZpbmFsbHl7aWkuU0FOREJPWEVEX0pTX1NFTUFQSE9SRS0tfX19ZnVuY3Rpb24gSEkoYSl7YSYmeihhLGZ1bmN0aW9uKGIsYyl7Zm9yKHZhciBkPTA7ZDxjLmxlbmd0aDtkKyspe3ZhciBlPWNbZF0ucmVwbGFjZSgvXl8qLyxcIlwiKTt5aVtlXT15aVtlXXx8W107eWlbZV0ucHVzaChiKX19KX07dmFyIElJPWVuY29kZVVSSSxZPWVuY29kZVVSSUNvbXBvbmVudCxKST1BcnJheS5pc0FycmF5LEtJPWZ1bmN0aW9uKGEsYixjKXtBYyhhLGIsYyl9LExJPWZ1bmN0aW9uKGEsYil7aWYoIWEpcmV0dXJuITE7dmFyIGM9VmkoYWooYSksXCJob3N0XCIpO2lmKCFjKXJldHVybiExO2Zvcih2YXIgZD0wO2ImJmQ8Yi5sZW5ndGg7ZCsrKXt2YXIgZT1iW2RdJiZiW2RdLnRvTG93ZXJDYXNlKCk7aWYoZSl7dmFyIGY9Yy5sZW5ndGgtZS5sZW5ndGg7Zj4wJiZlLmNoYXJBdCgwKSE9XCIuXCImJihmLS0sZT1cIi5cIitlKTtpZihmPj0wJiZjLmluZGV4T2YoZSxmKT09ZilyZXR1cm4hMH19cmV0dXJuITF9LE1JPWZ1bmN0aW9uKGEsYixjKXtmb3IodmFyIGQ9e30sZT0hMSxmPTA7YSYmZjxhLmxlbmd0aDtmKyspYVtmXSYmXG5hW2ZdLmhhc093blByb3BlcnR5KGIpJiZhW2ZdLmhhc093blByb3BlcnR5KGMpJiYoZFthW2ZdW2JdXT1hW2ZdW2NdLGU9ITApO3JldHVybiBlP2Q6bnVsbH07dmFyIFZJPUQuY2xlYXJUaW1lb3V0LFdJPUQuc2V0VGltZW91dDtmdW5jdGlvbiBYSShhLGIsYyl7aWYoV24oKSl7YiYmRyhiKX1lbHNlIHJldHVybiB4YyhhLGIsYyl9ZnVuY3Rpb24gWUkoKXtyZXR1cm4gRC5sb2NhdGlvbi5ocmVmfWZ1bmN0aW9uIFpJKGEsYil7cmV0dXJuIEppKGEsYnx8Mil9ZnVuY3Rpb24gJEkoYSxiKXtEW2FdPWJ9ZnVuY3Rpb24gYUooYSxiLGMpe2ImJihEW2FdPT09dm9pZCAwfHxjJiYhRFthXSkmJihEW2FdPWIpO3JldHVybiBEW2FdfWZ1bmN0aW9uIGJKKGEsYil7aWYoV24oKSl7YiYmRyhiKX1lbHNlIHpjKGEsYil9XG52YXIgY0o9e307dmFyIFo9e3NlY3VyaXR5R3JvdXBzOnt9fTtcblouc2VjdXJpdHlHcm91cHMuZj1bXCJnb29nbGVcIl0sWi5fX2Y9ZnVuY3Rpb24oYSl7dmFyIGI9WkkoXCJndG0ucmVmZXJyZXJcIiwxKXx8RS5yZWZlcnJlcjtyZXR1cm4gYj9hLnZ0cF9jb21wb25lbnQmJmEudnRwX2NvbXBvbmVudCE9XCJVUkxcIj9WaShhaihTdHJpbmcoYikpLGEudnRwX2NvbXBvbmVudCxhLnZ0cF9zdHJpcFd3dyxhLnZ0cF9kZWZhdWx0UGFnZXMsYS52dHBfcXVlcnlLZXkpOllpKGFqKFN0cmluZyhiKSkpOlN0cmluZyhiKX0sWi5fX2YuQz1cImZcIixaLl9fZi5pc1ZlbmRvclRlbXBsYXRlPSEwLFouX19mLnByaW9yaXR5T3ZlcnJpZGU9MCxaLl9fZi5pc0luZnJhc3RydWN0dXJlPSEwLFouX19mLnJ1bkluU2lsb2VkTW9kZT0hMTtcblxuWi5zZWN1cml0eUdyb3Vwcy51PVtcImdvb2dsZVwiXSxmdW5jdGlvbigpe3ZhciBhPWZ1bmN0aW9uKGIpe3JldHVybnt0b1N0cmluZzpmdW5jdGlvbigpe3JldHVybiBifX19OyhmdW5jdGlvbihiKXtaLl9fdT1iO1ouX191LkM9XCJ1XCI7Wi5fX3UuaXNWZW5kb3JUZW1wbGF0ZT0hMDtaLl9fdS5wcmlvcml0eU92ZXJyaWRlPTA7Wi5fX3UuaXNJbmZyYXN0cnVjdHVyZT0hMDtaLl9fdS5ydW5JblNpbG9lZE1vZGU9ITF9KShmdW5jdGlvbihiKXt2YXIgYztjPShjPWIudnRwX2N1c3RvbVVybFNvdXJjZT9iLnZ0cF9jdXN0b21VcmxTb3VyY2U6WkkoXCJndG0udXJsXCIsMSkpfHxZSSgpO3ZhciBkPWJbYShcInZ0cF9jb21wb25lbnRcIildO2lmKCFkfHxkPT1cIlVSTFwiKXJldHVybiBZaShhaihTdHJpbmcoYykpKTt2YXIgZT1haihTdHJpbmcoYykpLGY7aWYoZD09PVwiUVVFUllcIilhOnt2YXIgZz1iW2EoXCJ2dHBfbXVsdGlRdWVyeUtleXNcIikudG9TdHJpbmcoKV0saz1iW2EoXCJ2dHBfcXVlcnlLZXlcIikudG9TdHJpbmcoKV18fFxuXCJcIixtPWJbYShcInZ0cF9pZ25vcmVFbXB0eVF1ZXJ5UGFyYW1cIikudG9TdHJpbmcoKV0sbjtuPWc/QXJyYXkuaXNBcnJheShrKT9rOlN0cmluZyhrKS5yZXBsYWNlKC9cXHMrL2csXCJcIikuc3BsaXQoXCIsXCIpOltTdHJpbmcoayldO2Zvcih2YXIgcD0wO3A8bi5sZW5ndGg7cCsrKXt2YXIgcT1WaShlLFwiUVVFUllcIix2b2lkIDAsdm9pZCAwLG5bcF0pO2lmKHEhPXZvaWQgMCYmKCFtfHxxIT09XCJcIikpe2Y9cTticmVhayBhfX1mPXZvaWQgMH1lbHNlIGY9VmkoZSxkLGQ9PVwiSE9TVFwiP2JbYShcInZ0cF9zdHJpcFd3d1wiKV06dm9pZCAwLGQ9PVwiUEFUSFwiP2JbYShcInZ0cF9kZWZhdWx0UGFnZXNcIildOnZvaWQgMCk7cmV0dXJuIGZ9KX0oKTtcblxuWi5zZWN1cml0eUdyb3Vwcy5yZWFkX2V2ZW50X2RhdGE9W1wiZ29vZ2xlXCJdLGZ1bmN0aW9uKCl7ZnVuY3Rpb24gYShiLGMpe3JldHVybntrZXk6Y319KGZ1bmN0aW9uKGIpe1ouX19yZWFkX2V2ZW50X2RhdGE9YjtaLl9fcmVhZF9ldmVudF9kYXRhLkM9XCJyZWFkX2V2ZW50X2RhdGFcIjtaLl9fcmVhZF9ldmVudF9kYXRhLmlzVmVuZG9yVGVtcGxhdGU9ITA7Wi5fX3JlYWRfZXZlbnRfZGF0YS5wcmlvcml0eU92ZXJyaWRlPTA7Wi5fX3JlYWRfZXZlbnRfZGF0YS5pc0luZnJhc3RydWN0dXJlPSExO1ouX19yZWFkX2V2ZW50X2RhdGEucnVuSW5TaWxvZWRNb2RlPSExfSkoZnVuY3Rpb24oYil7dmFyIGM9Yi52dHBfZXZlbnREYXRhQWNjZXNzLGQ9Yi52dHBfa2V5UGF0dGVybnN8fFtdLGU9Yi52dHBfY3JlYXRlUGVybWlzc2lvbkVycm9yO3JldHVybnthc3NlcnQ6ZnVuY3Rpb24oZixnKXtpZihnIT1udWxsJiYhbChnKSl0aHJvdyBlKGYse2tleTpnfSxcIktleSBtdXN0IGJlIGEgc3RyaW5nLlwiKTtcbmlmKGMhPT1cImFueVwiKXt0cnl7aWYoYz09PVwic3BlY2lmaWNcIiYmZyE9bnVsbCYmaWcoZyxkKSlyZXR1cm59Y2F0Y2goayl7dGhyb3cgZShmLHtrZXk6Z30sXCJJbnZhbGlkIGtleSBmaWx0ZXIuXCIpO310aHJvdyBlKGYse2tleTpnfSxcIlByb2hpYml0ZWQgcmVhZCBmcm9tIGV2ZW50IGRhdGEuXCIpO319LE46YX19KX0oKTtcblxuXG5cblxuXG5cblxuXG5aLnNlY3VyaXR5R3JvdXBzLnVhPVtcImdvb2dsZVwiXSxmdW5jdGlvbigpe2Z1bmN0aW9uIGEobixwKXtmb3IodmFyIHEgaW4gbilpZigha1txXSYmbi5oYXNPd25Qcm9wZXJ0eShxKSl7dmFyIHI9Z1txXT94YihuW3FdKTpuW3FdO3EhPVwiYW5vbnltaXplSXBcInx8cnx8KHI9dm9pZCAwKTtwW3FdPXJ9fWZ1bmN0aW9uIGIobil7dmFyIHA9e307bi52dHBfZ2FTZXR0aW5ncyYmaChNSShuLnZ0cF9nYVNldHRpbmdzLnZ0cF9maWVsZHNUb1NldCxcImZpZWxkTmFtZVwiLFwidmFsdWVcIikscCk7aChNSShuLnZ0cF9maWVsZHNUb1NldCxcImZpZWxkTmFtZVwiLFwidmFsdWVcIikscCk7eGIocC51cmxQYXNzdGhyb3VnaCkmJihwLl91c2VVcD0hMCk7bi52dHBfdHJhbnNwb3J0VXJsJiYocC5feF8xOT1uLnZ0cF90cmFuc3BvcnRVcmwpO3JldHVybiBwfWZ1bmN0aW9uIGMobixwKXtyZXR1cm4gcD09PXZvaWQgMD9wOm4ocCl9ZnVuY3Rpb24gZChuLHAscSl7fWZ1bmN0aW9uIGUobixwKXtpZighZiYmKCFEaSgpJiYhcWl8fCFwLl94XzE5fHxuLnZ0cF91c2VEZWJ1Z1ZlcnNpb258fG4udnRwX3VzZUludGVybmFsVmVyc2lvbikpe3ZhciBxPW4udnRwX3VzZURlYnVnVmVyc2lvbj9cInUvYW5hbHl0aWNzX2RlYnVnLmpzXCI6XCJhbmFseXRpY3MuanNcIjtuLnZ0cF91c2VJbnRlcm5hbFZlcnNpb24mJiFuLnZ0cF91c2VEZWJ1Z1ZlcnNpb24mJihxPVwiaW50ZXJuYWwvXCIrcSk7Zj0hMDt2YXIgcj1uLnZ0cF9ndG1PbkZhaWx1cmUsdD1naihwLl94XzE5LFwiL2FuYWx5dGljcy5qc1wiKSx1PUFyKFwiaHR0cHM6XCIsXCJodHRwOlwiLFwiLy93d3cuZ29vZ2xlLWFuYWx5dGljcy5jb20vXCIrcSxwJiYhIXAuZm9yY2VTU0wpO1hJKHE9PT1cImFuYWx5dGljcy5qc1wiJiZ0P3Q6dSxmdW5jdGlvbigpe3ZhciB2PUd3KCk7diYmdi5sb2FkZWR8fFxucigpO30scil9fXZhciBmLGc9e2FsbG93QW5jaG9yOiEwLGFsbG93TGlua2VyOiEwLGFsd2F5c1NlbmRSZWZlcnJlcjohMCxhbm9ueW1pemVJcDohMCxjb29raWVVcGRhdGU6ITAsZXhGYXRhbDohMCxmb3JjZVNTTDohMCxqYXZhRW5hYmxlZDohMCxsZWdhY3lIaXN0b3J5SW1wb3J0OiEwLG5vbkludGVyYWN0aW9uOiEwLHVzZUFtcENsaWVudElkOiEwLHVzZUJlYWNvbjohMCxzdG9yZUdhYzohMCxhbGxvd0FkRmVhdHVyZXM6ITAsYWxsb3dBZFBlcnNvbmFsaXphdGlvblNpZ25hbHM6ITAsX2NkMmw6ITB9LGs9e3VybFBhc3N0aHJvdWdoOiEwfSxtPWZ1bmN0aW9uKG4pe2Z1bmN0aW9uIHAoKXtpZihuLnZ0cF9kb3VibGVDbGlja3x8bi52dHBfYWR2ZXJ0aXNpbmdGZWF0dXJlc1R5cGU9PVwiRElTUExBWV9GRUFUVVJFU1wiKXcuZGlzcGxheWZlYXR1cmVzPSEwfVxudmFyIHE9e30scj17fSx0PXt9O2lmKG4udnRwX2dhU2V0dGluZ3Mpe3ZhciB1PW4udnRwX2dhU2V0dGluZ3M7aChNSSh1LnZ0cF9jb250ZW50R3JvdXAsXCJpbmRleFwiLFwiZ3JvdXBcIikscSk7aChNSSh1LnZ0cF9kaW1lbnNpb24sXCJpbmRleFwiLFwiZGltZW5zaW9uXCIpLHIpO2goTUkodS52dHBfbWV0cmljLFwiaW5kZXhcIixcIm1ldHJpY1wiKSx0KTt2YXIgdj1oKHUpO3YudnRwX2ZpZWxkc1RvU2V0PXZvaWQgMDt2LnZ0cF9jb250ZW50R3JvdXA9dm9pZCAwO3YudnRwX2RpbWVuc2lvbj12b2lkIDA7di52dHBfbWV0cmljPXZvaWQgMDtuPWgobix2KX1oKE1JKG4udnRwX2NvbnRlbnRHcm91cCxcImluZGV4XCIsXCJncm91cFwiKSxxKTtoKE1JKG4udnRwX2RpbWVuc2lvbixcImluZGV4XCIsXCJkaW1lbnNpb25cIikscik7aChNSShuLnZ0cF9tZXRyaWMsXCJpbmRleFwiLFwibWV0cmljXCIpLHQpO3ZhciB3PWIobikseD1TdHJpbmcobi52dHBfdHJhY2tpbmdJZHx8XCJcIikseT1cIlwiLEE9XCJcIixCPVwiXCI7bi52dHBfc2V0VHJhY2tlck5hbWUmJlxudHlwZW9mIG4udnRwX3RyYWNrZXJOYW1lPT1cInN0cmluZ1wiP24udnRwX3RyYWNrZXJOYW1lIT09XCJcIiYmKEI9bi52dHBfdHJhY2tlck5hbWUsQT1CK1wiLlwiKTooQj1cImd0bVwiK3ppKCksQT1CK1wiLlwiKTt2YXIgQz1mdW5jdGlvbihsYSxlYSl7Zm9yKHZhciB3YSBpbiBlYSllYS5oYXNPd25Qcm9wZXJ0eSh3YSkmJih3W2xhK3dhXT1lYVt3YV0pfTtDKFwiY29udGVudEdyb3VwXCIscSk7QyhcImRpbWVuc2lvblwiLHIpO0MoXCJtZXRyaWNcIix0KTtuLnZ0cF9lbmFibGVFY29tbWVyY2UmJih5PW4udnRwX2d0bUNhY2hlZFZhbHVlcy5ldmVudCx3Lmd0bUVjb21tZXJjZURhdGE9ZChuLHcseSkpO2lmKG4udnRwX3RyYWNrVHlwZT09PVwiVFJBQ0tfRVZFTlRcIil5PVwidHJhY2tfZXZlbnRcIixwKCksdy5ldmVudENhdGVnb3J5PVN0cmluZyhuLnZ0cF9ldmVudENhdGVnb3J5KSx3LmV2ZW50QWN0aW9uPVN0cmluZyhuLnZ0cF9ldmVudEFjdGlvbiksdy5ldmVudExhYmVsPWMoU3RyaW5nLG4udnRwX2V2ZW50TGFiZWwpLFxudy52YWx1ZT1jKHdiLG4udnRwX2V2ZW50VmFsdWUpO2Vsc2UgaWYobi52dHBfdHJhY2tUeXBlPT1cIlRSQUNLX1BBR0VWSUVXXCIpe2lmKHk9VC5nLlNiLHAoKSxuLnZ0cF9hZHZlcnRpc2luZ0ZlYXR1cmVzVHlwZT09XCJESVNQTEFZX0ZFQVRVUkVTX1dJVEhfUkVNQVJLRVRJTkdfTElTVFNcIiYmKHcucmVtYXJrZXRpbmdMaXN0cz0hMCksbi52dHBfYXV0b0xpbmtEb21haW5zKXt2YXIgSD17fTtIW1QuZy5XXT1uLnZ0cF9hdXRvTGlua0RvbWFpbnM7SC51c2VfYW5jaG9yPW4udnRwX3VzZUhhc2hBdXRvTGluaztIW1QuZy50Yl09bi52dHBfZGVjb3JhdGVGb3Jtc0F1dG9MaW5rO3dbVC5nLnFhXT1IfX1lbHNlIG4udnRwX3RyYWNrVHlwZT09PVwiVFJBQ0tfU09DSUFMXCI/KHk9XCJ0cmFja19zb2NpYWxcIix3LnNvY2lhbE5ldHdvcms9U3RyaW5nKG4udnRwX3NvY2lhbE5ldHdvcmspLHcuc29jaWFsQWN0aW9uPVN0cmluZyhuLnZ0cF9zb2NpYWxBY3Rpb24pLHcuc29jaWFsVGFyZ2V0PVN0cmluZyhuLnZ0cF9zb2NpYWxBY3Rpb25UYXJnZXQpKTpcbm4udnRwX3RyYWNrVHlwZT09XCJUUkFDS19USU1JTkdcIiYmKHk9XCJ0aW1pbmdfY29tcGxldGVcIix3LmV2ZW50Q2F0ZWdvcnk9U3RyaW5nKG4udnRwX3RpbWluZ0NhdGVnb3J5KSx3LnRpbWluZ1Zhcj1TdHJpbmcobi52dHBfdGltaW5nVmFyKSx3LnZhbHVlPXdiKG4udnRwX3RpbWluZ1ZhbHVlKSx3LmV2ZW50TGFiZWw9YyhTdHJpbmcsbi52dHBfdGltaW5nTGFiZWwpKTtuLnZ0cF9lbmFibGVSZWNhcHRjaGEmJih3LmVuYWJsZVJlY2FwdGNoYT0hMCk7bi52dHBfZW5hYmxlTGlua0lkJiYody5lbmFibGVMaW5rSWQ9ITApO3ZhciBJPXt9O2EodyxJKTt3Lm5hbWV8fChJLmd0bVRyYWNrZXJOYW1lPUIpO0kuZ2FGdW5jdGlvbk5hbWU9bi52dHBfZnVuY3Rpb25OYW1lO24udnRwX25vbkludGVyYWN0aW9uIT09dm9pZCAwJiYoSS5ub25JbnRlcmFjdGlvbj1uLnZ0cF9ub25JbnRlcmFjdGlvbik7dmFyIEY9UmwoUWwoUGwoT2woSGwobmV3IEdsKG4udnRwX2d0bUV2ZW50SWQsbi52dHBfZ3RtUHJpb3JpdHlJZCksXG5JKSxuLnZ0cF9ndG1PblN1Y2Nlc3MpLG4udnRwX2d0bU9uRmFpbHVyZSksITApKTtuLnZ0cF91c2VEZWJ1Z1ZlcnNpb24mJm4udnRwX3VzZUludGVybmFsVmVyc2lvbiYmKEYuZXZlbnRNZXRhZGF0YS5zdXBwcmVzc19zY3JpcHRfbG9hZD0hMCk7TUQoeCx5LERhdGUubm93KCksRik7dmFyIE89SHcobi52dHBfZnVuY3Rpb25OYW1lKTtpZihvYihPKSl7dmFyIE49ZnVuY3Rpb24obGEpe3ZhciBlYT1bXS5zbGljZS5jYWxsKGFyZ3VtZW50cywwKTtlYVswXT1BK2VhWzBdO08uYXBwbHkod2luZG93LGVhKX07aWYobi52dHBfdHJhY2tUeXBlPT1cIlRSQUNLX1RSQU5TQUNUSU9OXCIpe31lbHNlIGlmKG4udnRwX3RyYWNrVHlwZT09XCJERUNPUkFURV9MSU5LXCIpe31lbHNlIGlmKG4udnRwX3RyYWNrVHlwZT09XCJERUNPUkFURV9GT1JNXCIpe31lbHNlIGlmKG4udnRwX3RyYWNrVHlwZT09XCJUUkFDS19EQVRBXCIpe31lKG4sdyl9ZWxzZSBHKG4udnRwX2d0bU9uRmFpbHVyZSl9O1xuWi5fX3VhPW07Wi5fX3VhLkM9XCJ1YVwiO1ouX191YS5pc1ZlbmRvclRlbXBsYXRlPSEwO1ouX191YS5wcmlvcml0eU92ZXJyaWRlPTA7Wi5fX3VhLmlzSW5mcmFzdHJ1Y3R1cmU9ITE7Wi5fX3VhLnJ1bkluU2lsb2VkTW9kZT0hMX0oKTtcblxuXG5cblxuXG5cblxuXG52YXIgZEo9e307ZEouZGF0YUxheWVyPUtpO2RKLmNhbGxiYWNrPWZ1bmN0aW9uKGEpe3hpLmhhc093blByb3BlcnR5KGEpJiZvYih4aVthXSkmJnhpW2FdKCk7ZGVsZXRlIHhpW2FdfTtkSi5ib290c3RyYXA9MDtkSi5fc3B4PSExO1xuZnVuY3Rpb24gZUooKXtpaVtHaigpXT1paVtHaigpXXx8ZEo7VGooKTtYaigpfHx6KFlqKCksZnVuY3Rpb24oZCxlKXtrdyhkLGUudHJhbnNwb3J0VXJsLGUuY29udGV4dCk7TSg5Mil9KTtFYih5aSxaLnNlY3VyaXR5R3JvdXBzKTt2YXIgYT1LaihMaigpKSxiLGM9YT09bnVsbD92b2lkIDA6KGI9YS5jb250ZXh0KT09bnVsbD92b2lkIDA6Yi5zb3VyY2U7YyE9PTImJmMhPT00JiZjIT09M3x8TSgxNDIpO3JmPUlmfXZhciBmSj0hMTtcbihmdW5jdGlvbihhKXtmdW5jdGlvbiBiKCl7bj1FLmRvY3VtZW50RWxlbWVudC5nZXRBdHRyaWJ1dGUoXCJkYXRhLXRhZy1hc3Npc3RhbnQtcHJlc2VudFwiKTtBeShuKSYmKG09ay5aaSl9ZnVuY3Rpb24gYygpe20mJnJjP2cobSk6YSgpfWlmKCFEW1wiX19UQUdHWV9JTlNUQUxMRURcIl0pe3ZhciBkPSExO2lmKEUucmVmZXJyZXIpe3ZhciBlPWFqKEUucmVmZXJyZXIpO2Q9WGkoZSxcImhvc3RcIik9PT1cImNjdC5nb29nbGVcIn1pZighZCl7dmFyIGY9am8oXCJnb29nVGFnZ3lSZWZlcnJlclwiKTtkPSEoIWYubGVuZ3RofHwhZlswXS5sZW5ndGgpfWQmJihEW1wiX19UQUdHWV9JTlNUQUxMRURcIl09ITAseGMoXCJodHRwczovL2NjdC5nb29nbGUvdGFnZ3kvYWdlbnQuanNcIikpfXZhciBnPWZ1bmN0aW9uKHUpe3ZhciB2PVwiR1RNXCIsdz1cIkdUTVwiO29pJiYodj1cIk9HVFwiLHc9XCJHVEFHXCIpO3ZhciB4PURbXCJnb29nbGUudGFnbWFuYWdlci5kZWJ1Z3VpMi5xdWV1ZVwiXTt4fHwoeD1cbltdLERbXCJnb29nbGUudGFnbWFuYWdlci5kZWJ1Z3VpMi5xdWV1ZVwiXT14LHhjKFwiaHR0cHM6Ly9cIitoaS5EZCtcIi9kZWJ1Zy9ib290c3RyYXA/aWQ9XCIrT2YuY3RpZCtcIiZzcmM9XCIrdytcIiZjb25kPVwiK3UrXCImZ3RtPVwiK1luKCkpKTt2YXIgeT17bWVzc2FnZVR5cGU6XCJDT05UQUlORVJfU1RBUlRJTkdcIixkYXRhOntzY3JpcHRTb3VyY2U6cmMsY29udGFpbmVyUHJvZHVjdDp2LGRlYnVnOiExLGlkOk9mLmN0aWQsdGFyZ2V0UmVmOntjdGlkOk9mLmN0aWQsaXNEZXN0aW5hdGlvbjp6ai5tZX0sYWxpYXNlczpDaigpLGRlc3RpbmF0aW9uczpGaigpfX07eS5kYXRhLnJlc3VtZT1mdW5jdGlvbigpe2EoKX07aGkucWsmJih5LmRhdGEuaW5pdGlhbFB1Ymxpc2g9ITApO3gucHVzaCh5KX0saz17S2s6MSxiajoyLHBqOjMsZGk6NCxaaTo1fTtrW2suS2tdPVwiR1RNX0RFQlVHX0xFR0FDWV9QQVJBTVwiO2tbay5ial09XCJHVE1fREVCVUdfUEFSQU1cIjtrW2sucGpdPVwiUkVGRVJSRVJcIjtrW2suZGldPVwiQ09PS0lFXCI7a1trLlppXT1cIkVYVEVOU0lPTl9QQVJBTVwiO1xudmFyIG09dm9pZCAwLG49dm9pZCAwLHA9VmkoRC5sb2NhdGlvbixcInF1ZXJ5XCIsITEsdm9pZCAwLFwiZ3RtX2RlYnVnXCIpO0F5KHApJiYobT1rLmJqKTtpZighbSYmRS5yZWZlcnJlcil7dmFyIHE9YWooRS5yZWZlcnJlcik7WGkocSxcImhvc3RcIik9PT1cInRhZ2Fzc2lzdGFudC5nb29nbGUuY29tXCImJihtPWsucGopfWlmKCFtKXt2YXIgcj1qbyhcIl9fVEFHX0FTU0lTVEFOVFwiKTtyLmxlbmd0aCYmclswXS5sZW5ndGgmJihtPWsuZGkpfW18fGIoKTtpZighbSYmQnkobikpe3ZhciB0PSExO0NjKEUsXCJUQURlYnVnU2lnbmFsXCIsZnVuY3Rpb24oKXt0fHwodD0hMCxiKCksYygpKX0sITEpO0Quc2V0VGltZW91dChmdW5jdGlvbigpe3R8fCh0PSEwLGIoKSxjKCkpfSwyMDApfWVsc2UgYygpfSkoZnVuY3Rpb24oKXt0cnl7dmFyIGE7aWYoIShhPSFRKDU4KSkpe3ZhciBiO2lmKCEoYj1mSikpe3ZhciBjO2E6e2Zvcih2YXIgZD14aigpLmluamVjdGVkRmlyc3RQYXJ0eUNvbnRhaW5lcnMsZT1uYShCaigpKSxcbmY9ZS5uZXh0KCk7IWYuZG9uZTtmPWUubmV4dCgpKWlmKGRbZi52YWx1ZV0pe2M9ITA7YnJlYWsgYX1jPSExfWI9IWN9YT1ifWlmKGEpe1JqKCk7aWYoUSg3NCkpe31rYlsxMl09ITA7c24oKTtmbCgpO3ZhciBnPUlqKCk7aWYoeGooKS5jYW5vbmljYWxbZ10pe3ZhciBrPWlpLnpvbmVzO2smJmsudW5yZWdpc3RlckNoaWxkKEJqKCkpO1d2KCkucmVtb3ZlRXh0ZXJuYWxSZXN0cmljdGlvbnMoSWooKSk7fWVsc2V7YTp7fUJpLmo9XCIwXCI7QmkuTT1cIlwiO0JpLlBhPVwiYWRfc3RvcmFnZXxhbmFseXRpY3Nfc3RvcmFnZXxhZF91c2VyX2RhdGF8YWRfcGVyc29uYWxpemF0aW9uXCI7QmkuWj1cImFkX3N0b3JhZ2V8YW5hbHl0aWNzX3N0b3JhZ2V8YWRfdXNlcl9kYXRhXCI7QmkuUj1cIjQ5MzBcIjtcbkJpLlI9XCI0OTMwXCI7Z3coKTtmb3IodmFyIG09ZGF0YS5yZXNvdXJjZXx8e30sbj1tLm1hY3Jvc3x8W10scD0wO3A8bi5sZW5ndGg7cCsrKWdmLnB1c2gobltwXSk7Zm9yKHZhciBxPW0udGFnc3x8W10scj0wO3I8cS5sZW5ndGg7cisrKWtmLnB1c2gocVtyXSk7Zm9yKHZhciB0PW0ucHJlZGljYXRlc3x8W10sdT0wO3U8dC5sZW5ndGg7dSsrKWpmLnB1c2godFt1XSk7Zm9yKHZhciB2PW0ucnVsZXN8fFtdLHc9MDt3PHYubGVuZ3RoO3crKyl7Zm9yKHZhciB4PXZbd10seT17fSxBPTA7QTx4Lmxlbmd0aDtBKyspe3ZhciBCPXhbQV1bMF07eVtCXT1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbCh4W0FdLDEpO0IhPT1cImlmXCImJkIhPT1cInVubGVzc1wifHxxZih5W0JdKX1oZi5wdXNoKHkpfW1mPVo7bmY9Zno7S2Y9bmV3IFJmO1xudmFyIEM9ZGF0YS5zYW5kYm94ZWRfc2NyaXB0cyxIPWRhdGEuc2VjdXJpdHlfZ3JvdXBzO2E6e3ZhciBJPWRhdGEucnVudGltZXx8W10sRj1kYXRhLnJ1bnRpbWVfbGluZXM7cno9bmV3IEFlO0dJKCk7ZmY9cXooKTt2YXIgTz1yeixOPUZJKCksUz1uZXcgV2MoXCJyZXF1aXJlXCIsTik7Uy5LYSgpO08uai5qLnNldChcInJlcXVpcmVcIixTKTtmb3IodmFyIFY9W10sYWE9MDthYTxJLmxlbmd0aDthYSsrKXt2YXIgWD1JW2FhXTtpZighQXJyYXkuaXNBcnJheShYKXx8WC5sZW5ndGg8Myl7aWYoWC5sZW5ndGg9PT0wKWNvbnRpbnVlO2JyZWFrIGF9RiYmRlthYV0mJkZbYWFdLmxlbmd0aCYmQmYoWCxGW2FhXSk7dHJ5e3J6LmV4ZWN1dGUoWCksUSg4MykmJnFqJiZYWzBdPT09NTAmJlYucHVzaChYWzFdKX1jYXRjaChPbil7fX1RKDgzKSYmKHNmPVYpfWlmKEMmJkMubGVuZ3RoKWZvcih2YXIgUj1bXCJzYW5kYm94ZWRTY3JpcHRzXCJdLG1hPTA7bWE8Qy5sZW5ndGg7bWErKyl7dmFyIGxhPUNbbWFdLnJlcGxhY2UoL15fKi8sXG5cIlwiKTt5aVtsYV09Un1ISShIKTtlSigpO2lmKCFzaSlmb3IodmFyIGVhPVBrKCk/RWkoQmkuWik6RWkoQmkuUGEpLHdhPTA7d2E8VGsubGVuZ3RoO3dhKyspe3ZhciBPYT1Ua1t3YV0sRWE9T2EsVGE9ZWFbT2FdP1wiZ3JhbnRlZFwiOlwiZGVuaWVkXCI7b2soKS5pbXBsaWNpdChFYSxUYSl9enkoKTtwdz0hMTtxdz0wO2lmKEUucmVhZHlTdGF0ZT09PVwiaW50ZXJhY3RpdmVcIiYmIUUuY3JlYXRlRXZlbnRPYmplY3R8fEUucmVhZHlTdGF0ZT09PVwiY29tcGxldGVcIilzdygpO2Vsc2V7Q2MoRSxcIkRPTUNvbnRlbnRMb2FkZWRcIixzdyk7Q2MoRSxcInJlYWR5c3RhdGVjaGFuZ2VcIixzdyk7aWYoRS5jcmVhdGVFdmVudE9iamVjdCYmRS5kb2N1bWVudEVsZW1lbnQuZG9TY3JvbGwpe3ZhciAkYT0hMDt0cnl7JGE9IUQuZnJhbWVFbGVtZW50fWNhdGNoKE9uKXt9JGEmJnR3KCl9Q2MoRCxcImxvYWRcIixzdyl9ZXk9ITE7RS5yZWFkeVN0YXRlPT09XCJjb21wbGV0ZVwiP2d5KCk6Q2MoRCxcImxvYWRcIixneSk7cWomJihVbChnbSksRC5zZXRJbnRlcnZhbChmbSw4NjRFNSksVWwoaXopLFVsKFR3KSxVbChKdSksVWwoam0pLFVsKG56KSxVbChkeCksVWwodXQpLFEoODMpJiYoVWwoWXcpLFVsKFp3KSxVbCgkdykpKTtpZihyail7bmsoKTtBbCgpO293KCk7dmFyIHRkO3ZhciB1ZD1LaihMaigpKTtpZih1ZCl7Zm9yKDt1ZC5wYXJlbnQ7KXt2YXIgQng9S2oodWQucGFyZW50KTtpZighQngpYnJlYWs7dWQ9Qnh9dGQ9dWR9ZWxzZSB0ZD12b2lkIDA7dmFyIFBlPXRkO2lmKCFQZSlNKDE0NCk7ZWxzZSBpZihQZS5jYW5vbmljYWxDb250YWluZXJJZCl7dmFyIFBuO2E6e2lmKFBlLnNjcmlwdFNvdXJjZSl7dmFyIE5qO3RyeXt2YXIgQ3g7Tmo9KEN4PVBjKCkpPT1udWxsP3ZvaWQgMDpDeC5nZXRFbnRyaWVzQnlUeXBlKFwicmVzb3VyY2VcIil9Y2F0Y2goT24pe31pZihOail7Zm9yKHZhciBRbj1cbnt9LE9qPTA7T2o8TmoubGVuZ3RoOysrT2ope3ZhciBEeD1OaltPal0sUm49RHguaW5pdGlhdG9yVHlwZTtpZihSbj09PVwic2NyaXB0XCImJkR4Lm5hbWU9PT1QZS5zY3JpcHRTb3VyY2Upe1BuPXtLbTpPaixMbTpRbn07YnJlYWsgYX1RbltSbl09MSsoUW5bUm5dfHwwKX1NKDE0Nil9ZWxzZSBNKDE0NSl9UG49dm9pZCAwfXZhciBTbj1QbjtTbiYmKGZrKFwicnRnXCIsU3RyaW5nKFBlLmNhbm9uaWNhbENvbnRhaW5lcklkKSksZmsoXCJybG9cIixTdHJpbmcoU24uS20pKSxmayhcInNsb1wiLFN0cmluZyhTbi5MbS5zY3JpcHR8fFwiMFwiKSksZmsoXCJobG9cIixQZS5odG1sTG9hZE9yZGVyfHxcIi0xXCIpLGZrKFwibHN0XCIsU3RyaW5nKFBlLmxvYWRTY3JpcHRUeXBlfHxcIjBcIikpKX12YXIgVG47dmFyIFBqPUpqKCk7aWYoUGope3ZhciBFeDtUbj1Qai5jYW5vbmljYWxDb250YWluZXJJZHx8XCJfXCIrKFBqLnNjcmlwdENvbnRhaW5lcklkfHwoKEV4PVBqLmRlc3RpbmF0aW9ucyk9PW51bGw/dm9pZCAwOkV4WzBdKSl9ZWxzZSBUbj1cbnZvaWQgMDt2YXIgRng9VG47RngmJmZrKFwicGNpZFwiLEZ4KTtRKDMyKSYmKGZrKFwiYnRcIixTdHJpbmcoQmkuSD8yOnFpPzE6MCkpLGZrKFwiY3RcIixTdHJpbmcoQmkuSD8wOnFpPzE6V24oKT8yOjMpKSl9V3koKTtLaygxKTt6QSgpO3dpPUJiKCk7ZEouYm9vdHN0cmFwPXdpO2lmKFEoNzQpKXt9fX19Y2F0Y2goT24pe2lmKEtrKDQpLFxucWope3ZhciBnSj1hbSghMCwhMCk7QWMoZ0opfX19KTtcblxufSkoKVxuXG4ifSwgImhlYWRlcnNTaXplIjogMCwgImJvZHlTaXplIjogNzUyMzEsICJyZWRpcmVjdFVSTCI6ICIiLCAiX3RyYW5zZmVyU2l6ZSI6IDc1MjMxfSwgImNhY2hlIjoge30sICJ0aW1pbmdzIjogeyJkbnMiOiA0Ny40MywgImNvbm5lY3QiOiA0NC41OTUsICJzc2wiOiAyOC45MzMsICJzZW5kIjogMCwgIndhaXQiOiAzMy4zMDksICJyZWNlaXZlIjogMzIuMzA3fSwgInBhZ2VyZWYiOiAicGFnZUA4YzkzMmY4MzM3ZDlhYmI0YjlhYjk4ODlkZWM1MWI5OSIsICJzZXJ2ZXJJUEFkZHJlc3MiOiAiWzJhMDA6MTQ1MDo0MDAxOjgxMzo6MjAwOF0iLCAiX3NlcnZlclBvcnQiOiA0NDMsICJfc2VjdXJpdHlEZXRhaWxzIjogeyJwcm90b2NvbCI6ICJUTFMgMS4zIiwgInN1YmplY3ROYW1lIjogIiouZ29vZ2xlLWFuYWx5dGljcy5jb20iLCAiaXNzdWVyIjogIldSMiIsICJ2YWxpZEZyb20iOiAxNzIzNDQ0NDI0LCAidmFsaWRUbyI6IDE3MzA3MDIwMjN9fSwgeyJzdGFydGVkRGF0ZVRpbWUiOiAiMjAyNC0wOS0wNVQxMTowNzoyMS4yMTRaIiwgInRpbWUiOiAyMC42NDIsICJyZXF1ZXN0IjogeyJtZXRob2QiOiAiUE9TVCIsICJ1cmwiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlLWFuYWx5dGljcy5jb20vai9jb2xsZWN0P3Y9MSZfdj1qMTAxJmE9MTUxNTQwMjc3OCZ0PXBhZ2V2aWV3Jl9zPTEmZGw9aHR0cHMlM0ElMkYlMkZwb3J0YWwuc3VwcGx5Y2hhaW5jYW5hZGEuY29tJTJGZW4lMkZwb3J0YWxsb2dpbiZ1bD1lbi11cyZkZT1VVEYtOCZkdD1TdXBwbHklMjBDaGFpbiUyMENhbmFkYSUyMFBvcnRhbCZzZD0yNC1iaXQmc3I9MTI4MHg3MjAmdnA9MTI4MHg3MjAmamU9MCZfdT1JRUJBQUVBQkFBQUFBQ0FBSX4mamlkPTEwMDgxMjgxNzkmZ2ppZD0xMTc1MzY4MDAwJmNpZD0xNzQ3NTc2NDg5LjE3MjU1MzQ0NDEmdGlkPVVBLTEwMTQwNzc4MS0xJl9naWQ9MTA2MTk3NzkzNi4xNzI1NTM0NDQxJl9yPTEmX3NsYz0xJno9MTk0MDgwNTM4MiIsICJodHRwVmVyc2lvbiI6ICJIVFRQLzIuMCIsICJjb29raWVzIjogW10sICJoZWFkZXJzIjogW3sibmFtZSI6ICI6YXV0aG9yaXR5IiwgInZhbHVlIjogInd3dy5nb29nbGUtYW5hbHl0aWNzLmNvbSJ9LCB7Im5hbWUiOiAiOm1ldGhvZCIsICJ2YWx1ZSI6ICJQT1NUIn0sIHsibmFtZSI6ICI6cGF0aCIsICJ2YWx1ZSI6ICIvai9jb2xsZWN0P3Y9MSZfdj1qMTAxJmE9MTUxNTQwMjc3OCZ0PXBhZ2V2aWV3Jl9zPTEmZGw9aHR0cHMlM0ElMkYlMkZwb3J0YWwuc3VwcGx5Y2hhaW5jYW5hZGEuY29tJTJGZW4lMkZwb3J0YWxsb2dpbiZ1bD1lbi11cyZkZT1VVEYtOCZkdD1TdXBwbHklMjBDaGFpbiUyMENhbmFkYSUyMFBvcnRhbCZzZD0yNC1iaXQmc3I9MTI4MHg3MjAmdnA9MTI4MHg3MjAmamU9MCZfdT1JRUJBQUVBQkFBQUFBQ0FBSX4mamlkPTEwMDgxMjgxNzkmZ2ppZD0xMTc1MzY4MDAwJmNpZD0xNzQ3NTc2NDg5LjE3MjU1MzQ0NDEmdGlkPVVBLTEwMTQwNzc4MS0xJl9naWQ9MTA2MTk3NzkzNi4xNzI1NTM0NDQxJl9yPTEmX3NsYz0xJno9MTk0MDgwNTM4MiJ9LCB7Im5hbWUiOiAiOnNjaGVtZSIsICJ2YWx1ZSI6ICJodHRwcyJ9LCB7Im5hbWUiOiAiYWNjZXB0IiwgInZhbHVlIjogIiovKiJ9LCB7Im5hbWUiOiAiYWNjZXB0LWVuY29kaW5nIiwgInZhbHVlIjogImd6aXAsIGRlZmxhdGUsIGJyLCB6c3RkIn0sIHsibmFtZSI6ICJhY2NlcHQtbGFuZ3VhZ2UiLCAidmFsdWUiOiAiZW4tVVMifSwgeyJuYW1lIjogImNvbnRlbnQtbGVuZ3RoIiwgInZhbHVlIjogIjAifSwgeyJuYW1lIjogImNvbnRlbnQtdHlwZSIsICJ2YWx1ZSI6ICJ0ZXh0L3BsYWluIn0sIHsibmFtZSI6ICJvcmlnaW4iLCAidmFsdWUiOiAiaHR0cHM6Ly9wb3J0YWwuc3VwcGx5Y2hhaW5jYW5hZGEuY29tIn0sIHsibmFtZSI6ICJwcmlvcml0eSIsICJ2YWx1ZSI6ICJ1PTEsIGkifSwgeyJuYW1lIjogInJlZmVyZXIiLCAidmFsdWUiOiAiaHR0cHM6Ly9wb3J0YWwuc3VwcGx5Y2hhaW5jYW5hZGEuY29tLyJ9LCB7Im5hbWUiOiAic2VjLWNoLXVhIiwgInZhbHVlIjogIlwiTm90O0E9QnJhbmRcIjt2PVwiMjRcIiwgXCJDaHJvbWl1bVwiO3Y9XCIxMjhcIiJ9LCB7Im5hbWUiOiAic2VjLWNoLXVhLW1vYmlsZSIsICJ2YWx1ZSI6ICI/MCJ9LCB7Im5hbWUiOiAic2VjLWNoLXVhLXBsYXRmb3JtIiwgInZhbHVlIjogIlwiV2luZG93c1wiIn0sIHsibmFtZSI6ICJzZWMtZmV0Y2gtZGVzdCIsICJ2YWx1ZSI6ICJlbXB0eSJ9LCB7Im5hbWUiOiAic2VjLWZldGNoLW1vZGUiLCAidmFsdWUiOiAiY29ycyJ9LCB7Im5hbWUiOiAic2VjLWZldGNoLXNpdGUiLCAidmFsdWUiOiAiY3Jvc3Mtc2l0ZSJ9LCB7Im5hbWUiOiAidXNlci1hZ2VudCIsICJ2YWx1ZSI6ICJNb3ppbGxhLzUuMCAoV2luZG93cyBOVCAxMC4wOyBXaW42NDsgeDY0KSBBcHBsZVdlYktpdC81MzcuMzYgKEtIVE1MLCBsaWtlIEdlY2tvKSBDaHJvbWUvMTI4LjAuNjYxMy4xOCBTYWZhcmkvNTM3LjM2In1dLCAicXVlcnlTdHJpbmciOiBbeyJuYW1lIjogInYiLCAidmFsdWUiOiAiMSJ9LCB7Im5hbWUiOiAiX3YiLCAidmFsdWUiOiAiajEwMSJ9LCB7Im5hbWUiOiAiYSIsICJ2YWx1ZSI6ICIxNTE1NDAyNzc4In0sIHsibmFtZSI6ICJ0IiwgInZhbHVlIjogInBhZ2V2aWV3In0sIHsibmFtZSI6ICJfcyIsICJ2YWx1ZSI6ICIxIn0sIHsibmFtZSI6ICJkbCIsICJ2YWx1ZSI6ICJodHRwczovL3BvcnRhbC5zdXBwbHljaGFpbmNhbmFkYS5jb20vZW4vcG9ydGFsbG9naW4ifSwgeyJuYW1lIjogInVsIiwgInZhbHVlIjogImVuLXVzIn0sIHsibmFtZSI6ICJkZSIsICJ2YWx1ZSI6ICJVVEYtOCJ9LCB7Im5hbWUiOiAiZHQiLCAidmFsdWUiOiAiU3VwcGx5IENoYWluIENhbmFkYSBQb3J0YWwifSwgeyJuYW1lIjogInNkIiwgInZhbHVlIjogIjI0LWJpdCJ9LCB7Im5hbWUiOiAic3IiLCAidmFsdWUiOiAiMTI4MHg3MjAifSwgeyJuYW1lIjogInZwIiwgInZhbHVlIjogIjEyODB4NzIwIn0sIHsibmFtZSI6ICJqZSIsICJ2YWx1ZSI6ICIwIn0sIHsibmFtZSI6ICJfdSIsICJ2YWx1ZSI6ICJJRUJBQUVBQkFBQUFBQ0FBSX4ifSwgeyJuYW1lIjogImppZCIsICJ2YWx1ZSI6ICIxMDA4MTI4MTc5In0sIHsibmFtZSI6ICJnamlkIiwgInZhbHVlIjogIjExNzUzNjgwMDAifSwgeyJuYW1lIjogImNpZCIsICJ2YWx1ZSI6ICIxNzQ3NTc2NDg5LjE3MjU1MzQ0NDEifSwgeyJuYW1lIjogInRpZCIsICJ2YWx1ZSI6ICJVQS0xMDE0MDc3ODEtMSJ9LCB7Im5hbWUiOiAiX2dpZCIsICJ2YWx1ZSI6ICIxMDYxOTc3OTM2LjE3MjU1MzQ0NDEifSwgeyJuYW1lIjogIl9yIiwgInZhbHVlIjogIjEifSwgeyJuYW1lIjogIl9zbGMiLCAidmFsdWUiOiAiMSJ9LCB7Im5hbWUiOiAieiIsICJ2YWx1ZSI6ICIxOTQwODA1MzgyIn1dLCAiaGVhZGVyc1NpemUiOiAxMDA3LCAiYm9keVNpemUiOiAwfSwgInJlc3BvbnNlIjogeyJzdGF0dXMiOiAyMDAsICJzdGF0dXNUZXh0IjogIiIsICJodHRwVmVyc2lvbiI6ICJIVFRQLzIuMCIsICJjb29raWVzIjogW10sICJoZWFkZXJzIjogW3sibmFtZSI6ICJhY2Nlc3MtY29udHJvbC1hbGxvdy1jcmVkZW50aWFscyIsICJ2YWx1ZSI6ICJ0cnVlIn0sIHsibmFtZSI6ICJhY2Nlc3MtY29udHJvbC1hbGxvdy1vcmlnaW4iLCAidmFsdWUiOiAiaHR0cHM6Ly9wb3J0YWwuc3VwcGx5Y2hhaW5jYW5hZGEuY29tIn0sIHsibmFtZSI6ICJhbHQtc3ZjIiwgInZhbHVlIjogImgzPVwiOjQ0M1wiOyBtYT0yNTkyMDAwLGgzLTI5PVwiOjQ0M1wiOyBtYT0yNTkyMDAwIn0sIHsibmFtZSI6ICJjYWNoZS1jb250cm9sIiwgInZhbHVlIjogIm5vLWNhY2hlLCBuby1zdG9yZSwgbXVzdC1yZXZhbGlkYXRlIn0sIHsibmFtZSI6ICJjb250ZW50LWxlbmd0aCIsICJ2YWx1ZSI6ICIxNSJ9LCB7Im5hbWUiOiAiY29udGVudC10eXBlIiwgInZhbHVlIjogInRleHQvcGxhaW4ifSwgeyJuYW1lIjogImNyb3NzLW9yaWdpbi1yZXNvdXJjZS1wb2xpY3kiLCAidmFsdWUiOiAiY3Jvc3Mtb3JpZ2luIn0sIHsibmFtZSI6ICJkYXRlIiwgInZhbHVlIjogIlRodSwgMDUgU2VwIDIwMjQgMTE6MDc6MjEgR01UIn0sIHsibmFtZSI6ICJleHBpcmVzIiwgInZhbHVlIjogIkZyaSwgMDEgSmFuIDE5OTAgMDA6MDA6MDAgR01UIn0sIHsibmFtZSI6ICJsYXN0LW1vZGlmaWVkIiwgInZhbHVlIjogIlN1biwgMTcgTWF5IDE5OTggMDM6MDA6MDAgR01UIn0sIHsibmFtZSI6ICJwcmFnbWEiLCAidmFsdWUiOiAibm8tY2FjaGUifSwgeyJuYW1lIjogInNlcnZlciIsICJ2YWx1ZSI6ICJHb2xmZTIifSwgeyJuYW1lIjogIngtY29udGVudC10eXBlLW9wdGlvbnMiLCAidmFsdWUiOiAibm9zbmlmZiJ9XSwgImNvbnRlbnQiOiB7InNpemUiOiAxNSwgIm1pbWVUeXBlIjogInRleHQvcGxhaW4iLCAiY29tcHJlc3Npb24iOiAwLCAidGV4dCI6ICIyLGNHLUtRNUVEVkJKMU4ifSwgImhlYWRlcnNTaXplIjogMCwgImJvZHlTaXplIjogMjMwLCAicmVkaXJlY3RVUkwiOiAiIiwgIl90cmFuc2ZlclNpemUiOiAyMzB9LCAiY2FjaGUiOiB7fSwgInRpbWluZ3MiOiB7ImRucyI6IC0xLCAiY29ubmVjdCI6IC0xLCAic3NsIjogLTEsICJzZW5kIjogMCwgIndhaXQiOiAxNi4zODYsICJyZWNlaXZlIjogNC4yNTZ9LCAicGFnZXJlZiI6ICJwYWdlQDhjOTMyZjgzMzdkOWFiYjRiOWFiOTg4OWRlYzUxYjk5IiwgInNlcnZlcklQQWRkcmVzcyI6ICJbMmEwMDoxNDUwOjQwMDE6ODMxOjoyMDBlXSIsICJfc2VydmVyUG9ydCI6IDQ0MywgIl9zZWN1cml0eURldGFpbHMiOiB7InByb3RvY29sIjogIlRMUyAxLjMiLCAic3ViamVjdE5hbWUiOiAiKi5nb29nbGUtYW5hbHl0aWNzLmNvbSIsICJpc3N1ZXIiOiAiV1IyIiwgInZhbGlkRnJvbSI6IDE3MjM0NDQ0MjQsICJ2YWxpZFRvIjogMTczMDcwMjAyM319LCB7InN0YXJ0ZWREYXRlVGltZSI6ICIyMDI0LTA5LTA1VDExOjA3OjIxLjIzOVoiLCAidGltZSI6IDU2LjY3OCwgInJlcXVlc3QiOiB7Im1ldGhvZCI6ICJHRVQiLCAidXJsIjogImh0dHBzOi8vd3d3Lmdvb2dsZXRhZ21hbmFnZXIuY29tL2d0YWcvanM/aWQ9Ry1LUTVFRFZCSjFOJmN4PWMmX3NsYz0xIiwgImh0dHBWZXJzaW9uIjogIkhUVFAvMi4wIiwgImNvb2tpZXMiOiBbXSwgImhlYWRlcnMiOiBbeyJuYW1lIjogIjphdXRob3JpdHkiLCAidmFsdWUiOiAid3d3Lmdvb2dsZXRhZ21hbmFnZXIuY29tIn0sIHsibmFtZSI6ICI6bWV0aG9kIiwgInZhbHVlIjogIkdFVCJ9LCB7Im5hbWUiOiAiOnBhdGgiLCAidmFsdWUiOiAiL2d0YWcvanM/aWQ9Ry1LUTVFRFZCSjFOJmN4PWMmX3NsYz0xIn0sIHsibmFtZSI6ICI6c2NoZW1lIiwgInZhbHVlIjogImh0dHBzIn0sIHsibmFtZSI6ICJhY2NlcHQiLCAidmFsdWUiOiAiKi8qIn0sIHsibmFtZSI6ICJhY2NlcHQtZW5jb2RpbmciLCAidmFsdWUiOiAiZ3ppcCwgZGVmbGF0ZSwgYnIsIHpzdGQifSwgeyJuYW1lIjogImFjY2VwdC1sYW5ndWFnZSIsICJ2YWx1ZSI6ICJlbi1VUyJ9LCB7Im5hbWUiOiAicmVmZXJlciIsICJ2YWx1ZSI6ICJodHRwczovL3BvcnRhbC5zdXBwbHljaGFpbmNhbmFkYS5jb20vIn0sIHsibmFtZSI6ICJzZWMtY2gtdWEiLCAidmFsdWUiOiAiXCJOb3Q7QT1CcmFuZFwiO3Y9XCIyNFwiLCBcIkNocm9taXVtXCI7dj1cIjEyOFwiIn0sIHsibmFtZSI6ICJzZWMtY2gtdWEtbW9iaWxlIiwgInZhbHVlIjogIj8wIn0sIHsibmFtZSI6ICJzZWMtY2gtdWEtcGxhdGZvcm0iLCAidmFsdWUiOiAiXCJXaW5kb3dzXCIifSwgeyJuYW1lIjogInNlYy1mZXRjaC1kZXN0IiwgInZhbHVlIjogInNjcmlwdCJ9LCB7Im5hbWUiOiAic2VjLWZldGNoLW1vZGUiLCAidmFsdWUiOiAibm8tY29ycyJ9LCB7Im5hbWUiOiAic2VjLWZldGNoLXNpdGUiLCAidmFsdWUiOiAiY3Jvc3Mtc2l0ZSJ9LCB7Im5hbWUiOiAidXNlci1hZ2VudCIsICJ2YWx1ZSI6ICJNb3ppbGxhLzUuMCAoV2luZG93cyBOVCAxMC4wOyBXaW42NDsgeDY0KSBBcHBsZVdlYktpdC81MzcuMzYgKEtIVE1MLCBsaWtlIEdlY2tvKSBDaHJvbWUvMTI4LjAuNjYxMy4xOCBTYWZhcmkvNTM3LjM2In1dLCAicXVlcnlTdHJpbmciOiBbeyJuYW1lIjogImlkIiwgInZhbHVlIjogIkctS1E1RURWQkoxTiJ9LCB7Im5hbWUiOiAiY3giLCAidmFsdWUiOiAiYyJ9LCB7Im5hbWUiOiAiX3NsYyIsICJ2YWx1ZSI6ICIxIn1dLCAiaGVhZGVyc1NpemUiOiA1NzUsICJib2R5U2l6ZSI6IDB9LCAicmVzcG9uc2UiOiB7InN0YXR1cyI6IDIwMCwgInN0YXR1c1RleHQiOiAiIiwgImh0dHBWZXJzaW9uIjogIkhUVFAvMi4wIiwgImNvb2tpZXMiOiBbXSwgImhlYWRlcnMiOiBbeyJuYW1lIjogImFjY2Vzcy1jb250cm9sLWFsbG93LWNyZWRlbnRpYWxzIiwgInZhbHVlIjogInRydWUifSwgeyJuYW1lIjogImFjY2Vzcy1jb250cm9sLWFsbG93LWhlYWRlcnMiLCAidmFsdWUiOiAiQ2FjaGUtQ29udHJvbCJ9LCB7Im5hbWUiOiAiYWNjZXNzLWNvbnRyb2wtYWxsb3ctb3JpZ2luIiwgInZhbHVlIjogIioifSwgeyJuYW1lIjogImFsdC1zdmMiLCAidmFsdWUiOiAiaDM9XCI6NDQzXCI7IG1hPTI1OTIwMDAsaDMtMjk9XCI6NDQzXCI7IG1hPTI1OTIwMDAifSwgeyJuYW1lIjogImNhY2hlLWNvbnRyb2wiLCAidmFsdWUiOiAicHJpdmF0ZSwgbWF4LWFnZT05MDAifSwgeyJuYW1lIjogImNvbnRlbnQtZW5jb2RpbmciLCAidmFsdWUiOiAiYnIifSwgeyJuYW1lIjogImNvbnRlbnQtbGVuZ3RoIiwgInZhbHVlIjogIjkzMjg0In0sIHsibmFtZSI6ICJjb250ZW50LXR5cGUiLCAidmFsdWUiOiAiYXBwbGljYXRpb24vamF2YXNjcmlwdDsgY2hhcnNldD1VVEYtOCJ9LCB7Im5hbWUiOiAiY3Jvc3Mtb3JpZ2luLXJlc291cmNlLXBvbGljeSIsICJ2YWx1ZSI6ICJjcm9zcy1vcmlnaW4ifSwgeyJuYW1lIjogImRhdGUiLCAidmFsdWUiOiAiVGh1LCAwNSBTZXAgMjAyNCAxMTowNzoyMSBHTVQifSwgeyJuYW1lIjogImV4cGlyZXMiLCAidmFsdWUiOiAiVGh1LCAwNSBTZXAgMjAyNCAxMTowNzoyMSBHTVQifSwgeyJuYW1lIjogInNlcnZlciIsICJ2YWx1ZSI6ICJHb29nbGUgVGFnIE1hbmFnZXIifSwgeyJuYW1lIjogInN0cmljdC10cmFuc3BvcnQtc2VjdXJpdHkiLCAidmFsdWUiOiAibWF4LWFnZT0zMTUzNjAwMDsgaW5jbHVkZVN1YkRvbWFpbnMifSwgeyJuYW1lIjogInZhcnkiLCAidmFsdWUiOiAiQWNjZXB0LUVuY29kaW5nIn0sIHsibmFtZSI6ICJ4LXhzcy1wcm90ZWN0aW9uIiwgInZhbHVlIjogIjAifV0sICJjb250ZW50IjogeyJzaXplIjogMjYzMzI0LCAibWltZVR5cGUiOiAiYXBwbGljYXRpb24vamF2YXNjcmlwdDsgY2hhcnNldD1VVEYtOCIsICJjb21wcmVzc2lvbiI6IDE2OTkyMywgInRleHQiOiAiXG4vLyBDb3B5cmlnaHQgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuIFxuKGZ1bmN0aW9uKCl7XG5cbnZhciBkYXRhID0ge1xuXCJyZXNvdXJjZVwiOiB7XG4gIFwidmVyc2lvblwiOlwiMlwiLFxuICBcbiAgXCJtYWNyb3NcIjpbe1wiZnVuY3Rpb25cIjpcIl9fZVwifSx7XCJ2dHBfc2lnbmFsXCI6MCxcImZ1bmN0aW9uXCI6XCJfX2NcIixcInZ0cF92YWx1ZVwiOjB9LHtcImZ1bmN0aW9uXCI6XCJfX2NcIixcInZ0cF92YWx1ZVwiOlwiZ29vZ2xlLmx1XCJ9LHtcImZ1bmN0aW9uXCI6XCJfX2NcIixcInZ0cF92YWx1ZVwiOjB9LHtcInZ0cF9zaWduYWxcIjowLFwiZnVuY3Rpb25cIjpcIl9fY1wiLFwidnRwX3ZhbHVlXCI6MH0se1wiZnVuY3Rpb25cIjpcIl9fY1wiLFwidnRwX3ZhbHVlXCI6XCJnb29nbGUubHVcIn0se1wiZnVuY3Rpb25cIjpcIl9fY1wiLFwidnRwX3ZhbHVlXCI6MH1dLFxuICBcInRhZ3NcIjpbe1wiZnVuY3Rpb25cIjpcIl9fb2d0X2dhX3NlbmRcIixcInByaW9yaXR5XCI6NixcInZ0cF92YWx1ZVwiOnRydWUsXCJ0YWdfaWRcIjoxNn0se1wiZnVuY3Rpb25cIjpcIl9fb2d0X3JlZmVycmFsX2V4Y2x1c2lvblwiLFwicHJpb3JpdHlcIjo2LFwidnRwX2luY2x1ZGVDb25kaXRpb25zXCI6W1wibGlzdFwiLFwic2NtYVxcXFwuY29tXCJdLFwidGFnX2lkXCI6MTh9LHtcImZ1bmN0aW9uXCI6XCJfX29ndF9zZXNzaW9uX3RpbWVvdXRcIixcInByaW9yaXR5XCI6NixcInZ0cF9zZXNzaW9uTWludXRlc1wiOjMwLFwidnRwX3Nlc3Npb25Ib3Vyc1wiOjAsXCJ0YWdfaWRcIjoxOX0se1wiZnVuY3Rpb25cIjpcIl9fb2d0XzFwX2RhdGFfdjJcIixcInByaW9yaXR5XCI6NixcInZ0cF9jaXR5VHlwZVwiOlwiQ1NTX1NFTEVDVE9SXCIsXCJ2dHBfbWFudWFsRW1haWxFbmFibGVkXCI6ZmFsc2UsXCJ2dHBfZmlyc3ROYW1lVHlwZVwiOlwiQ1NTX1NFTEVDVE9SXCIsXCJ2dHBfY291bnRyeVR5cGVcIjpcIkNTU19TRUxFQ1RPUlwiLFwidnRwX2NpdHlWYWx1ZVwiOlwiXCIsXCJ2dHBfaXNBdXRvRW5hYmxlZFwiOnRydWUsXCJ2dHBfYXV0b0NvbGxlY3RFeGNsdXNpb25TZWxlY3RvcnNcIjpbXCJsaXN0XCIsW1wibWFwXCIsXCJleGNsdXNpb25TZWxlY3RvclwiLFwiXCJdXSxcInZ0cF9lbWFpbFR5cGVcIjpcIkNTU19TRUxFQ1RPUlwiLFwidnRwX3JlZ2lvblR5cGVcIjpcIkNTU19TRUxFQ1RPUlwiLFwidnRwX2F1dG9FbWFpbEVuYWJsZWRcIjp0cnVlLFwidnRwX3Bvc3RhbENvZGVWYWx1ZVwiOlwiXCIsXCJ2dHBfbGFzdE5hbWVWYWx1ZVwiOlwiXCIsXCJ2dHBfcGhvbmVUeXBlXCI6XCJDU1NfU0VMRUNUT1JcIixcInZ0cF9waG9uZVZhbHVlXCI6XCJcIixcInZ0cF9zdHJlZXRUeXBlXCI6XCJDU1NfU0VMRUNUT1JcIixcInZ0cF9hdXRvUGhvbmVFbmFibGVkXCI6dHJ1ZSxcInZ0cF9wb3N0YWxDb2RlVHlwZVwiOlwiQ1NTX1NFTEVDVE9SXCIsXCJ2dHBfZW1haWxWYWx1ZVwiOlwiXCIsXCJ2dHBfZmlyc3ROYW1lVmFsdWVcIjpcIlwiLFwidnRwX3N0cmVldFZhbHVlXCI6XCJcIixcInZ0cF9sYXN0TmFtZVR5cGVcIjpcIkNTU19TRUxFQ1RPUlwiLFwidnRwX2lzRW5hYmxlZFwiOnRydWUsXCJ2dHBfYXV0b0FkZHJlc3NFbmFibGVkXCI6dHJ1ZSxcInZ0cF9yZWdpb25WYWx1ZVwiOlwiXCIsXCJ2dHBfY291bnRyeVZhbHVlXCI6XCJcIixcInZ0cF9pc0F1dG9Db2xsZWN0UGlpRW5hYmxlZEZsYWdcIjpmYWxzZSxcInRhZ19pZFwiOjIwfSx7XCJmdW5jdGlvblwiOlwiX19jY2RfZ2FfZmlyc3RcIixcInByaW9yaXR5XCI6NSxcInZ0cF9pbnN0YW5jZURlc3RpbmF0aW9uSWRcIjpcIkctS1E1RURWQkoxTlwiLFwidGFnX2lkXCI6MjZ9LHtcImZ1bmN0aW9uXCI6XCJfX3NldF9wcm9kdWN0X3NldHRpbmdzXCIsXCJwcmlvcml0eVwiOjQsXCJ2dHBfaW5zdGFuY2VEZXN0aW5hdGlvbklkXCI6XCJHLUtRNUVEVkJKMU5cIixcInZ0cF9mb3JlaWduVGxkTWFjcm9SZXN1bHRcIjpbXCJtYWNyb1wiLDVdLFwidnRwX2lzQ2hpbmFWaXBSZWdpb25NYWNyb1Jlc3VsdFwiOltcIm1hY3JvXCIsNl0sXCJ0YWdfaWRcIjoyNX0se1wiZnVuY3Rpb25cIjpcIl9fb2d0X2dvb2dsZV9zaWduYWxzXCIsXCJwcmlvcml0eVwiOjMsXCJ2dHBfZ29vZ2xlU2lnbmFsc1wiOlwiRElTQUJMRURcIixcInZ0cF9pbnN0YW5jZURlc3RpbmF0aW9uSWRcIjpcIkctS1E1RURWQkoxTlwiLFwidnRwX3NlcnZlck1hY3JvUmVzdWx0XCI6W1wibWFjcm9cIiw0XSxcInRhZ19pZFwiOjI0fSx7XCJmdW5jdGlvblwiOlwiX19jY2RfZ2FfcmVnc2NvcGVcIixcInByaW9yaXR5XCI6MixcInZ0cF9zZXR0aW5nc1RhYmxlXCI6W1wibGlzdFwiLFtcIm1hcFwiLFwicmVkYWN0RmllbGRHcm91cFwiLFwiREVWSUNFX0FORF9HRU9cIixcImRpc2FsbG93QWxsUmVnaW9uc1wiLGZhbHNlLFwiZGlzYWxsb3dlZFJlZ2lvbnNcIixcIlwiXSxbXCJtYXBcIixcInJlZGFjdEZpZWxkR3JvdXBcIixcIkdPT0dMRV9TSUdOQUxTXCIsXCJkaXNhbGxvd0FsbFJlZ2lvbnNcIix0cnVlLFwiZGlzYWxsb3dlZFJlZ2lvbnNcIixcIlwiXV0sXCJ2dHBfaW5zdGFuY2VEZXN0aW5hdGlvbklkXCI6XCJHLUtRNUVEVkJKMU5cIixcInRhZ19pZFwiOjIzfSx7XCJmdW5jdGlvblwiOlwiX19jY2RfY29udmVyc2lvbl9tYXJraW5nXCIsXCJwcmlvcml0eVwiOjEsXCJ2dHBfY29udmVyc2lvblJ1bGVzXCI6W1wibGlzdFwiLFtcIm1hcFwiLFwibWF0Y2hpbmdSdWxlc1wiLFwie1xcXCJ0eXBlXFxcIjo1LFxcXCJhcmdzXFxcIjpbe1xcXCJzdHJpbmdWYWx1ZVxcXCI6XFxcInB1cmNoYXNlXFxcIn0se1xcXCJjb250ZXh0VmFsdWVcXFwiOntcXFwibmFtZXNwYWNlVHlwZVxcXCI6MSxcXFwia2V5UGFydHNcXFwiOltcXFwiZXZlbnROYW1lXFxcIl19fV19XCJdXSxcInZ0cF9pbnN0YW5jZURlc3RpbmF0aW9uSWRcIjpcIkctS1E1RURWQkoxTlwiLFwidGFnX2lkXCI6MjJ9LHtcImZ1bmN0aW9uXCI6XCJfX2djdFwiLFwidnRwX3RyYWNraW5nSWRcIjpcIkctS1E1RURWQkoxTlwiLFwidnRwX3Nlc3Npb25EdXJhdGlvblwiOjAsXCJ2dHBfZ29vZ2xlU2lnbmFsc1wiOltcIm1hY3JvXCIsMV0sXCJ2dHBfZm9yZWlnblRsZFwiOltcIm1hY3JvXCIsMl0sXCJ2dHBfcmVzdHJpY3REb21haW5cIjpbXCJtYWNyb1wiLDNdLFwidnRwX2V2ZW50U2V0dGluZ3NcIjpbXCJtYXBcIl0sXCJ0YWdfaWRcIjoxM30se1wiZnVuY3Rpb25cIjpcIl9fY2NkX2dhX2xhc3RcIixcInByaW9yaXR5XCI6MCxcInZ0cF9pbnN0YW5jZURlc3RpbmF0aW9uSWRcIjpcIkctS1E1RURWQkoxTlwiLFwidGFnX2lkXCI6MjF9XSxcbiAgXCJwcmVkaWNhdGVzXCI6W3tcImZ1bmN0aW9uXCI6XCJfZXFcIixcImFyZzBcIjpbXCJtYWNyb1wiLDBdLFwiYXJnMVwiOlwiZ3RtLmpzXCJ9LHtcImZ1bmN0aW9uXCI6XCJfZXFcIixcImFyZzBcIjpbXCJtYWNyb1wiLDBdLFwiYXJnMVwiOlwiZ3RtLmluaXRcIn1dLFxuICBcInJ1bGVzXCI6W1tbXCJpZlwiLDBdLFtcImFkZFwiLDldXSxbW1wiaWZcIiwxXSxbXCJhZGRcIiwwLDEsMiwzLDEwLDgsNyw2LDUsNF1dXVxufSxcblwicnVudGltZVwiOlsgWzUwLFwiX19jXCIsWzQ2LFwiYVwiXSxbMzYsWzE3LFsxNSxcImFcIl0sXCJ2YWx1ZVwiXV1dXG4gLFs1MCxcIl9fY2NkX2NvbnZlcnNpb25fbWFya2luZ1wiLFs0NixcImFcIl0sWzIyLFszMCxbMjgsWzE3LFsxNSxcImFcIl0sXCJjb252ZXJzaW9uUnVsZXNcIl1dLFsyMCxbMTcsWzE3LFsxNSxcImFcIl0sXCJjb252ZXJzaW9uUnVsZXNcIl0sXCJsZW5ndGhcIl0sMF1dLFs0NixbMixbMTUsXCJhXCJdLFwiZ3RtT25TdWNjZXNzXCIsWzddXSxbMzZdXV0sWzUyLFwiYlwiLFtcInJlcXVpcmVcIixcImludGVybmFsLmNvcHlQcmVIaXRcIl1dLFs1MixcImNcIixbXCJyZXF1aXJlXCIsXCJpbnRlcm5hbC5ldmFsdWF0ZUJvb2xlYW5FeHByZXNzaW9uXCJdXSxbNTIsXCJkXCIsW1wicmVxdWlyZVwiLFwiaW50ZXJuYWwucmVnaXN0ZXJDY2RDYWxsYmFja1wiXV0sWzUyLFwiZVwiLFwiaXNfY29udmVyc2lvblwiXSxbNTIsXCJmXCIsXCJpc19maXJzdF92aXNpdFwiXSxbNTIsXCJnXCIsXCJpc19maXJzdF92aXNpdF9jb252ZXJzaW9uXCJdLFs1MixcImhcIixcImlzX3Nlc3Npb25fc3RhcnRcIl0sWzUyLFwiaVwiLFwiaXNfc2Vzc2lvbl9zdGFydF9jb252ZXJzaW9uXCJdLFs1MixcImpcIixcImZpcnN0X3Zpc2l0XCJdLFs1MixcImtcIixcInNlc3Npb25fc3RhcnRcIl0sWzQxLFwibFwiXSxbNDEsXCJtXCJdLFtcImRcIixbMTcsWzE1LFwiYVwiXSxcImluc3RhbmNlRGVzdGluYXRpb25JZFwiXSxbNTEsXCJcIixbNyxcIm5cIl0sWzUyLFwib1wiLFs4LFwicHJlSGl0XCIsWzE1LFwiblwiXV1dLFs2NSxcInBcIixbMTcsWzE1LFwiYVwiXSxcImNvbnZlcnNpb25SdWxlc1wiXSxbNDYsWzIyLFtcImNcIixbMTcsWzE1LFwicFwiXSxcIm1hdGNoaW5nUnVsZXNcIl0sWzE1LFwib1wiXV0sWzQ2LFsyLFsxNSxcIm5cIl0sXCJzZXRNZXRhZGF0YVwiLFs3LFsxNSxcImVcIl0sdHJ1ZV1dLFs0XV1dXV0sWzIyLFsyLFsxNSxcIm5cIl0sXCJnZXRNZXRhZGF0YVwiLFs3LFsxNSxcImZcIl1dXSxbNDYsWzIyLFsyOCxbMTUsXCJsXCJdXSxbNDYsWzUzLFs1MixcInBcIixbXCJiXCIsWzE1LFwiblwiXSxbOCxcIm9taXRIaXREYXRhXCIsdHJ1ZSxcIm9taXRNZXRhZGF0YVwiLHRydWVdXV0sWzIsWzE1LFwicFwiXSxcInNldEV2ZW50TmFtZVwiLFs3LFsxNSxcImpcIl1dXSxbMyxcImxcIixbOCxcInByZUhpdFwiLFsxNSxcInBcIl1dXV1dXSxbNjUsXCJwXCIsWzE3LFsxNSxcImFcIl0sXCJjb252ZXJzaW9uUnVsZXNcIl0sWzQ2LFsyMixbXCJjXCIsWzE3LFsxNSxcInBcIl0sXCJtYXRjaGluZ1J1bGVzXCJdLFsxNSxcImxcIl1dLFs0NixbMixbMTUsXCJuXCJdLFwic2V0TWV0YWRhdGFcIixbNyxbMTUsXCJnXCJdLHRydWVdXSxbNF1dXV1dXV0sWzIyLFsyLFsxNSxcIm5cIl0sXCJnZXRNZXRhZGF0YVwiLFs3LFsxNSxcImhcIl1dXSxbNDYsWzIyLFsyOCxbMTUsXCJtXCJdXSxbNDYsWzUzLFs1MixcInBcIixbXCJiXCIsWzE1LFwiblwiXSxbOCxcIm9taXRIaXREYXRhXCIsdHJ1ZSxcIm9taXRNZXRhZGF0YVwiLHRydWVdXV0sWzIsWzE1LFwicFwiXSxcInNldEV2ZW50TmFtZVwiLFs3LFsxNSxcImtcIl1dXSxbMyxcIm1cIixbOCxcInByZUhpdFwiLFsxNSxcInBcIl1dXV1dXSxbNjUsXCJwXCIsWzE3LFsxNSxcImFcIl0sXCJjb252ZXJzaW9uUnVsZXNcIl0sWzQ2LFsyMixbXCJjXCIsWzE3LFsxNSxcInBcIl0sXCJtYXRjaGluZ1J1bGVzXCJdLFsxNSxcIm1cIl1dLFs0NixbMixbMTUsXCJuXCJdLFwic2V0TWV0YWRhdGFcIixbNyxbMTUsXCJpXCJdLHRydWVdXSxbNF1dXV1dXV1dXSxbMixbMTUsXCJhXCJdLFwiZ3RtT25TdWNjZXNzXCIsWzddXSxbMzZdXVxuICxbNTAsXCJfX2NjZF9nYV9maXJzdFwiLFs0NixcImFcIl0sWzIsWzE1LFwiYVwiXSxcImd0bU9uU3VjY2Vzc1wiLFs3XV1dXG4gLFs1MCxcIl9fY2NkX2dhX2xhc3RcIixbNDYsXCJhXCJdLFsyLFsxNSxcImFcIl0sXCJndG1PblN1Y2Nlc3NcIixbN11dXVxuICxbNTAsXCJfX2NjZF9nYV9yZWdzY29wZVwiLFs0NixcImFcIl0sWzUyLFwiYlwiLFsxNSxcIl9fbW9kdWxlX2NjZEdhUmVnaW9uU2NvcGVkU2V0dGluZ3NcIl1dLFs1MixcImNcIixbMixbMTUsXCJiXCJdLFwiZXh0cmFjdFJlZGFjdGVkTG9jYXRpb25zXCIsWzcsWzE1LFwiYVwiXV1dXSxbMixbMTUsXCJiXCJdLFwiYXBwbHlSZWdpb25TY29wZWRTZXR0aW5nc1wiLFs3LFsxNSxcImFcIl0sWzE1LFwiY1wiXV1dLFsyLFsxNSxcImFcIl0sXCJndG1PblN1Y2Nlc3NcIixbN11dXVxuICxbNTAsXCJfX2VcIixbNDYsXCJhXCJdLFszNixbMTMsWzQxLFwiJDBcIl0sWzMsXCIkMFwiLFtcInJlcXVpcmVcIixcImludGVybmFsLmdldEV2ZW50RGF0YVwiXV0sW1wiJDBcIixcImV2ZW50XCJdXV1dXG4gLFs1MCxcIl9fb2d0XzFwX2RhdGFfdjJcIixbNDYsXCJhXCJdLFs1MCxcImpcIixbNDYsXCJtXCIsXCJuXCIsXCJvXCJdLFsyMixbMjAsWzE2LFsxNSxcIm5cIl0sXCJ0eXBlXCJdLFsxNSxcIm9cIl1dLFs0NixbMjIsWzI4LFsxNSxcIm1cIl1dLFs0NixbMyxcIm1cIixbOF1dXV0sWzIyLFsyOCxbMTYsWzE1LFwibVwiXSxbMTUsXCJvXCJdXV0sWzQ2LFs0MyxbMTUsXCJtXCJdLFsxNSxcIm9cIl0sWzE2LFsxNSxcIm5cIl0sXCJ1c2VyRGF0YVwiXV1dXV1dLFszNixbMTUsXCJtXCJdXV0sWzUwLFwia1wiLFs0NixcIm1cIixcIm5cIl0sWzUyLFwib1wiLFsxNixbMTUsXCJhXCJdLFsxNSxcIm1cIl1dXSxbNDEsXCJwXCJdLFsyMixbMjAsWzE1LFwib1wiXSxcIkNTU19TRUxFQ1RPUlwiXSxbNDYsWzMsXCJwXCIsXCJjc3Nfc2VsZWN0b3JcIl1dLFs0NixbMjIsWzIwLFsxNSxcIm9cIl0sXCJKU19WQVJcIl0sWzQ2LFszLFwicFwiLFwianNfdmFyaWFibGVcIl1dXV1dLFszNixbOCxcInNlbGVjdG9yX3R5cGVcIixbMTUsXCJwXCJdLFwidmFsdWVcIixbMTYsWzE1LFwiYVwiXSxbMTUsXCJuXCJdXV1dXSxbNTAsXCJsXCIsWzQ2LFwibVwiLFwiblwiLFwib1wiLFwicFwiXSxbMjIsWzI4LFsxNixbMTUsXCJhXCJdLFsxNSxcInBcIl1dXSxbNDYsWzM2XV1dLFs0MyxbMTUsXCJtXCJdLFsxNSxcIm5cIl0sW1wia1wiLFsxNSxcIm9cIl0sWzE1LFwicFwiXV1dXSxbMjIsWzI4LFsxNyxbMTUsXCJhXCJdLFwiaXNFbmFibGVkXCJdXSxbNDYsWzIsWzE1LFwiYVwiXSxcImd0bU9uU3VjY2Vzc1wiLFs3XV0sWzM2XV1dLFs1MixcImJcIixbMTMsWzQxLFwiJDBcIl0sWzMsXCIkMFwiLFtcInJlcXVpcmVcIixcImludGVybmFsLmdldEZsYWdzXCJdXSxbXCIkMFwiXV1dLFs1MixcImNcIixbXCJyZXF1aXJlXCIsXCJpbnRlcm5hbC5nZXREZXN0aW5hdGlvbklkc1wiXV0sWzUyLFwiZFwiLFtcInJlcXVpcmVcIixcImludGVybmFsLmdldFByb2R1Y3RTZXR0aW5nc1BhcmFtZXRlclwiXV0sWzUyLFwiZVwiLFtcInJlcXVpcmVcIixcImludGVybmFsLmRldGVjdFVzZXJQcm92aWRlZERhdGFcIl1dLFs1MixcImZcIixbXCJyZXF1aXJlXCIsXCJpbnRlcm5hbC5zZXRSZW1vdGVDb25maWdQYXJhbWV0ZXJcIl1dLFs1MixcImdcIixbXCJyZXF1aXJlXCIsXCJpbnRlcm5hbC5yZWdpc3RlckNjZENhbGxiYWNrXCJdXSxbNTIsXCJoXCIsWzMwLFtcImNcIl0sWzddXV0sWzUyLFwiaVwiLFs4LFwiZW5hYmxlX2NvZGVcIix0cnVlXV0sWzIyLFsxNyxbMTUsXCJhXCJdLFwiaXNBdXRvRW5hYmxlZFwiXSxbNDYsWzUzLFs1MixcIm1cIixbN11dLFsyMixbMSxbMTcsWzE1LFwiYVwiXSxcImF1dG9Db2xsZWN0RXhjbHVzaW9uU2VsZWN0b3JzXCJdLFsxNyxbMTcsWzE1LFwiYVwiXSxcImF1dG9Db2xsZWN0RXhjbHVzaW9uU2VsZWN0b3JzXCJdLFwibGVuZ3RoXCJdXSxbNDYsWzUzLFs0MSxcIm9cIl0sWzMsXCJvXCIsMF0sWzYzLFs3LFwib1wiXSxbMjMsWzE1LFwib1wiXSxbMTcsWzE3LFsxNSxcImFcIl0sXCJhdXRvQ29sbGVjdEV4Y2x1c2lvblNlbGVjdG9yc1wiXSxcImxlbmd0aFwiXV0sWzMzLFsxNSxcIm9cIl0sWzMsXCJvXCIsWzAsWzE1LFwib1wiXSwxXV1dLFs0NixbNTMsWzUyLFwicFwiLFsxNyxbMTYsWzE3LFsxNSxcImFcIl0sXCJhdXRvQ29sbGVjdEV4Y2x1c2lvblNlbGVjdG9yc1wiXSxbMTUsXCJvXCJdXSxcImV4Y2x1c2lvblNlbGVjdG9yXCJdXSxbMjIsWzE1LFwicFwiXSxbNDYsWzIsWzE1LFwibVwiXSxcInB1c2hcIixbNyxbMTUsXCJwXCJdXV1dXV1dXV1dXSxbNTIsXCJuXCIsWzM5LFsxNyxbMTUsXCJhXCJdLFwiaXNBdXRvQ29sbGVjdFBpaUVuYWJsZWRGbGFnXCJdLFsxNyxbMTUsXCJhXCJdLFwiYXV0b0VtYWlsRW5hYmxlZFwiXSx0cnVlXV0sWzQzLFsxNSxcImlcIl0sXCJhdXRvX2RldGVjdFwiLFs4LFwiZW1haWxcIixbMTUsXCJuXCJdLFwicGhvbmVcIixbMTcsWzE1LFwiYVwiXSxcImF1dG9QaG9uZUVuYWJsZWRcIl0sXCJhZGRyZXNzXCIsWzE3LFsxNSxcImFcIl0sXCJhdXRvQWRkcmVzc0VuYWJsZWRcIl0sXCJleGNsdWRlX2VsZW1lbnRfc2VsZWN0b3JzXCIsWzE1LFwibVwiXV1dXV1dLFsyMixbMTcsWzE1LFwiYVwiXSxcImlzTWFudWFsRW5hYmxlZFwiXSxbNDYsWzUzLFs1MixcIm1cIixbOF1dLFsyMixbMTcsWzE1LFwiYVwiXSxcIm1hbnVhbEVtYWlsRW5hYmxlZFwiXSxbNDYsW1wibFwiLFsxNSxcIm1cIl0sXCJlbWFpbFwiLFwiZW1haWxUeXBlXCIsXCJlbWFpbFZhbHVlXCJdXV0sWzIyLFsxNyxbMTUsXCJhXCJdLFwibWFudWFsUGhvbmVFbmFibGVkXCJdLFs0NixbXCJsXCIsWzE1LFwibVwiXSxcInBob25lXCIsXCJwaG9uZVR5cGVcIixcInBob25lVmFsdWVcIl1dXSxbMjIsWzE3LFsxNSxcImFcIl0sXCJtYW51YWxBZGRyZXNzRW5hYmxlZFwiXSxbNDYsWzUzLFs1MixcIm5cIixbOF1dLFtcImxcIixbMTUsXCJuXCJdLFwiZmlyc3RfbmFtZVwiLFwiZmlyc3ROYW1lVHlwZVwiLFwiZmlyc3ROYW1lVmFsdWVcIl0sW1wibFwiLFsxNSxcIm5cIl0sXCJsYXN0X25hbWVcIixcImxhc3ROYW1lVHlwZVwiLFwibGFzdE5hbWVWYWx1ZVwiXSxbXCJsXCIsWzE1LFwiblwiXSxcInN0cmVldFwiLFwic3RyZWV0VHlwZVwiLFwic3RyZWV0VmFsdWVcIl0sW1wibFwiLFsxNSxcIm5cIl0sXCJjaXR5XCIsXCJjaXR5VHlwZVwiLFwiY2l0eVZhbHVlXCJdLFtcImxcIixbMTUsXCJuXCJdLFwicmVnaW9uXCIsXCJyZWdpb25UeXBlXCIsXCJyZWdpb25WYWx1ZVwiXSxbXCJsXCIsWzE1LFwiblwiXSxcImNvdW50cnlcIixcImNvdW50cnlUeXBlXCIsXCJjb3VudHJ5VmFsdWVcIl0sW1wibFwiLFsxNSxcIm5cIl0sXCJwb3N0YWxfY29kZVwiLFwicG9zdGFsQ29kZVR5cGVcIixcInBvc3RhbENvZGVWYWx1ZVwiXSxbNDMsWzE1LFwibVwiXSxcIm5hbWVfYW5kX2FkZHJlc3NcIixbNyxbMTUsXCJuXCJdXV1dXV0sWzQzLFsxNSxcImlcIl0sXCJzZWxlY3RvcnNcIixbMTUsXCJtXCJdXV1dXSxbNjUsXCJtXCIsWzE1LFwiaFwiXSxbNDYsWzUzLFs0MSxcIm5cIl0sWzMsXCJuXCIsWzE1LFwiaVwiXV0sWzIyLFsxLFsyMCxbMixbMTUsXCJtXCJdLFwiaW5kZXhPZlwiLFs3LFwiRy1cIl1dLDBdLFsyOCxbMTYsWzE1LFwiYlwiXSxcImVuYWJsZUV1aWRBdXRvTW9kZVwiXV1dLFs0NixbNTMsWzUyLFwicVwiLFs4LFwiZW5hYmxlX2NvZGVcIix0cnVlLFwic2VsZWN0b3JzXCIsWzE2LFsxNSxcImlcIl0sXCJzZWxlY3RvcnNcIl1dXSxbMyxcIm5cIixbMTUsXCJxXCJdXV1dXSxbXCJmXCIsWzE1LFwibVwiXSxcInVzZXJfZGF0YV9zZXR0aW5nc1wiLFsxNSxcIm5cIl1dLFs1MixcIm9cIixbMTYsWzE1LFwiblwiXSxcImF1dG9fZGV0ZWN0XCJdXSxbMjIsWzI4LFsxNSxcIm9cIl1dLFs0NixbNl1dXSxbNTIsXCJwXCIsWzUxLFwiXCIsWzcsXCJxXCJdLFs1MixcInJcIixbMixbMTUsXCJxXCJdLFwiZ2V0TWV0YWRhdGFcIixbNyxcInVzZXJfZGF0YV9mcm9tX2F1dG9tYXRpY1wiXV1dLFsyMixbMTUsXCJyXCJdLFs0NixbMzYsWzE1LFwiclwiXV1dXSxbNTIsXCJzXCIsW1wiZVwiLFs4LFwiZXhjbHVkZUVsZW1lbnRTZWxlY3RvcnNcIixbMTYsWzE1LFwib1wiXSxcImV4Y2x1ZGVfZWxlbWVudF9zZWxlY3RvcnNcIl0sXCJmaWVsZEZpbHRlcnNcIixbOCxcImVtYWlsXCIsWzE2LFsxNSxcIm9cIl0sXCJlbWFpbFwiXSxcInBob25lXCIsWzE2LFsxNSxcIm9cIl0sXCJwaG9uZVwiXSxcImFkZHJlc3NcIixbMTYsWzE1LFwib1wiXSxcImFkZHJlc3NcIl1dXV1dLFs1MixcInRcIixbMSxbMTUsXCJzXCJdLFsxNixbMTUsXCJzXCJdLFwiZWxlbWVudHNcIl1dXSxbNTIsXCJ1XCIsWzhdXSxbMjIsWzEsWzE1LFwidFwiXSxbMTgsWzE3LFsxNSxcInRcIl0sXCJsZW5ndGhcIl0sMF1dLFs0NixbNTMsWzQxLFwidlwiXSxbNTMsWzQxLFwid1wiXSxbMyxcIndcIiwwXSxbNjMsWzcsXCJ3XCJdLFsyMyxbMTUsXCJ3XCJdLFsxNyxbMTUsXCJ0XCJdLFwibGVuZ3RoXCJdXSxbMzMsWzE1LFwid1wiXSxbMyxcIndcIixbMCxbMTUsXCJ3XCJdLDFdXV0sWzQ2LFs1MyxbNTIsXCJ4XCIsWzE2LFsxNSxcInRcIl0sWzE1LFwid1wiXV1dLFtcImpcIixbMTUsXCJ1XCJdLFsxNSxcInhcIl0sXCJlbWFpbFwiXSxbMjIsWzE2LFsxNSxcImJcIl0sXCJlbmFibGVBdXRvUGlpT25QaG9uZUFuZEFkZHJlc3NcIl0sWzQ2LFtcImpcIixbMTUsXCJ1XCJdLFsxNSxcInhcIl0sXCJwaG9uZV9udW1iZXJcIl0sWzMsXCJ2XCIsW1wialwiLFsxNSxcInZcIl0sWzE1LFwieFwiXSxcImZpcnN0X25hbWVcIl1dLFszLFwidlwiLFtcImpcIixbMTUsXCJ2XCJdLFsxNSxcInhcIl0sXCJsYXN0X25hbWVcIl1dLFszLFwidlwiLFtcImpcIixbMTUsXCJ2XCJdLFsxNSxcInhcIl0sXCJjb3VudHJ5XCJdXSxbMyxcInZcIixbXCJqXCIsWzE1LFwidlwiXSxbMTUsXCJ4XCJdLFwicG9zdGFsX2NvZGVcIl1dXV1dXV1dLFsyMixbMSxbMTUsXCJ2XCJdLFsyOCxbMTYsWzE1LFwidVwiXSxcImFkZHJlc3NcIl1dXSxbNDYsWzQzLFsxNSxcInVcIl0sXCJhZGRyZXNzXCIsWzE1LFwidlwiXV1dXV1dXSxbMixbMTUsXCJxXCJdLFwic2V0TWV0YWRhdGFcIixbNyxcInVzZXJfZGF0YV9mcm9tX2F1dG9tYXRpY1wiLFsxNSxcInVcIl1dXSxbMzYsWzE1LFwidVwiXV1dXSxbXCJnXCIsWzE1LFwibVwiXSxbNTEsXCJcIixbNyxcInFcIl0sWzIsWzE1LFwicVwiXSxcInNldE1ldGFkYXRhXCIsWzcsXCJ1c2VyX2RhdGFfZnJvbV9hdXRvbWF0aWNfZ2V0dGVyXCIsWzE1LFwicFwiXV1dXV1dXV0sWzIsWzE1LFwiYVwiXSxcImd0bU9uU3VjY2Vzc1wiLFs3XV1dXG4gLFs1MCxcIl9fb2d0X2dhX3NlbmRcIixbNDYsXCJhXCJdLFs1MCxcImdcIixbNDYsXCJoXCIsXCJpXCIsXCJqXCIsXCJrXCJdLFsyMixbMjEsWzE2LFsxNSxcImhcIl0sWzE1LFwiaVwiXV0sWzQ0XV0sWzQ2LFs0MyxbMTUsXCJqXCJdLFsxNSxcImtcIl0sWzE2LFsxNSxcImhcIl0sWzE1LFwiaVwiXV1dXV1dLFsyMixbMjgsWzE3LFsxNSxcImFcIl0sXCJ2YWx1ZVwiXV0sWzQ2LFsyLFsxNSxcImFcIl0sXCJndG1PblN1Y2Nlc3NcIixbN11dLFszNl1dXSxbNTIsXCJiXCIsW1wicmVxdWlyZVwiLFwiZ2V0Q29udGFpbmVyVmVyc2lvblwiXV0sWzUyLFwiY1wiLFtcInJlcXVpcmVcIixcImludGVybmFsLmdldERlc3RpbmF0aW9uSWRzXCJdXSxbNTIsXCJkXCIsW1wicmVxdWlyZVwiLFwiaW50ZXJuYWwuc2VuZEd0YWdFdmVudFwiXV0sWzUyLFwiZVwiLFtcInJlcXVpcmVcIixcImludGVybmFsLmFkZEdhU2VuZExpc3RlbmVyXCJdXSxbNDEsXCJmXCJdLFszLFwiZlwiLFtcImNcIl1dLFsyMixbMzAsWzI4LFsxNSxcImZcIl1dLFsyMCxbMTcsWzE1LFwiZlwiXSxcImxlbmd0aFwiXSwwXV0sWzQ2LFszLFwiZlwiLFs3LFsxNyxbXCJiXCJdLFwiY29udGFpbmVySWRcIl1dXV1dLFtcImVcIixbNTEsXCJcIixbNyxcImhcIixcImlcIl0sWzQxLFwialwiXSxbNDEsXCJrXCJdLFszLFwia1wiLFs4XV0sWzIyLFsyMCxbMTUsXCJoXCJdLFwiZXZlbnRcIl0sWzQ2LFszLFwialwiLFsxNixbMTUsXCJpXCJdLFwiZXZlbnRBY3Rpb25cIl1dLFtcImdcIixbMTUsXCJpXCJdLFwiZXZlbnRDYXRlZ29yeVwiLFsxNSxcImtcIl0sXCJldmVudF9jYXRlZ29yeVwiXSxbXCJnXCIsWzE1LFwiaVwiXSxcImV2ZW50TGFiZWxcIixbMTUsXCJrXCJdLFwiZXZlbnRfbGFiZWxcIl0sW1wiZ1wiLFsxNSxcImlcIl0sXCJldmVudFZhbHVlXCIsWzE1LFwia1wiXSxcInZhbHVlXCJdXSxbNDYsWzIyLFsyMCxbMTUsXCJoXCJdLFwiZXhjZXB0aW9uXCJdLFs0NixbMyxcImpcIixcImV4Y2VwdGlvblwiXSxbXCJnXCIsWzE1LFwiaVwiXSxcImV4RGVzY3JpcHRpb25cIixbMTUsXCJrXCJdLFwiZGVzY3JpcHRpb25cIl0sW1wiZ1wiLFsxNSxcImlcIl0sXCJleEZhdGFsXCIsWzE1LFwia1wiXSxcImZhdGFsXCJdXSxbNDYsWzIyLFsyMCxbMTUsXCJoXCJdLFwidGltaW5nXCJdLFs0NixbMjIsWzMwLFszMCxbMjAsWzE2LFsxNSxcImlcIl0sXCJ0aW1pbmdDYXRlZ29yeVwiXSxbNDRdXSxbMjAsWzE2LFsxNSxcImlcIl0sXCJ0aW1pbmdWYXJcIl0sWzQ0XV1dLFsyMCxbMTYsWzE1LFwiaVwiXSxcInRpbWluZ1ZhbHVlXCJdLFs0NF1dXSxbNDYsWzM2XV1dLFszLFwialwiLFwidGltaW5nX2NvbXBsZXRlXCJdLFtcImdcIixbMTUsXCJpXCJdLFwidGltaW5nQ2F0ZWdvcnlcIixbMTUsXCJrXCJdLFwiZXZlbnRfY2F0ZWdvcnlcIl0sW1wiZ1wiLFsxNSxcImlcIl0sXCJ0aW1pbmdWYXJcIixbMTUsXCJrXCJdLFwibmFtZVwiXSxbXCJnXCIsWzE1LFwiaVwiXSxcInRpbWluZ1ZhbHVlXCIsWzE1LFwia1wiXSxcInZhbHVlXCJdLFtcImdcIixbMTUsXCJpXCJdLFwidGltaW5nTGFiZWxcIixbMTUsXCJrXCJdLFwiZXZlbnRfbGFiZWxcIl1dXV1dXV0sWzIyLFsyMSxbMTUsXCJqXCJdLFs0NF1dLFs0NixbNTMsWzUyLFwibFwiLFs4LFwiZXZlbnRNZXRhZGF0YVwiLFs4LFwiZXZlbnRfdXNhZ2VcIixbNyw3XV0sXCJldmVudElkXCIsWzE3LFsxNSxcImFcIl0sXCJndG1FdmVudElkXCJdLFwibm9HdG1FdmVudFwiLHRydWVdXSxbNjUsXCJtXCIsWzE1LFwiZlwiXSxbNDYsWzIyLFsyMCxbMixbMTUsXCJtXCJdLFwiaW5kZXhPZlwiLFs3LFwiRy1cIl1dLDBdLFs0NixbXCJkXCIsWzE1LFwibVwiXSxbMTUsXCJqXCJdLFsxNSxcImtcIl0sWzE1LFwibFwiXV1dXV1dXV1dXV0sWzIsWzE1LFwiYVwiXSxcImd0bU9uU3VjY2Vzc1wiLFs3XV1dXG4gLFs1MCxcIl9fb2d0X2dvb2dsZV9zaWduYWxzXCIsWzQ2LFwiYVwiXSxbNTIsXCJiXCIsW1wicmVxdWlyZVwiLFwiaW50ZXJuYWwuc2V0UHJvZHVjdFNldHRpbmdzUGFyYW1ldGVyXCJdXSxbNTIsXCJjXCIsW1wicmVxdWlyZVwiLFwiZ2V0Q29udGFpbmVyVmVyc2lvblwiXV0sWzUyLFwiZFwiLFszMCxbMTcsWzE1LFwiYVwiXSxcImluc3RhbmNlRGVzdGluYXRpb25JZFwiXSxbMTcsW1wiY1wiXSxcImNvbnRhaW5lcklkXCJdXV0sW1wiYlwiLFsxNSxcImRcIl0sXCJnb29nbGVfc2lnbmFsc1wiLFsyMCxbMTcsWzE1LFwiYVwiXSxcImdvb2dsZVNpZ25hbHNcIl0sXCJFTkFCTEVEXCJdXSxbXCJiXCIsWzE1LFwiZFwiXSxcImdvb2dsZV9uZ1wiLFsyMCxbMTcsWzE1LFwiYVwiXSxcImdvb2dsZVNpZ25hbHNcIl0sXCJOT05fR0FJQV9SRU1BUktFVElOR1wiXV0sWzIsWzE1LFwiYVwiXSxcImd0bU9uU3VjY2Vzc1wiLFs3XV1dXG4gLFs1MCxcIl9fb2d0X3JlZmVycmFsX2V4Y2x1c2lvblwiLFs0NixcImFcIl0sWzUyLFwiYlwiLFsxNSxcIl9fbW9kdWxlX2NvbnZlcnREb21haW5Db25kaXRpb25zXCJdXSxbNTIsXCJjXCIsW1wicmVxdWlyZVwiLFwiaW50ZXJuYWwuZ2V0RGVzdGluYXRpb25JZHNcIl1dLFs1MixcImRcIixbXCJyZXF1aXJlXCIsXCJpbnRlcm5hbC5zZXRSZW1vdGVDb25maWdQYXJhbWV0ZXJcIl1dLFs1MixcImVcIixbMTMsWzQxLFwiJDBcIl0sWzMsXCIkMFwiLFtcInJlcXVpcmVcIixcImludGVybmFsLmdldEZsYWdzXCJdXSxbXCIkMFwiXV1dLFsyMixbMTcsWzE1LFwiYVwiXSxcImluY2x1ZGVDb25kaXRpb25zXCJdLFs0NixbNTMsWzQxLFwiZlwiXSxbMyxcImZcIixbMzAsW1wiY1wiXSxbN11dXSxbNjUsXCJnXCIsWzE1LFwiZlwiXSxbNDYsWzUzLFs0MSxcImhcIl0sWzMsXCJoXCIsWzE3LFsxNSxcImFcIl0sXCJpbmNsdWRlQ29uZGl0aW9uc1wiXV0sWzIyLFsxNyxbMTUsXCJoXCJdLFwibGVuZ3RoXCJdLFs0NixbMyxcImhcIixbMixbMTUsXCJiXCJdLFwiY29udmVydERvbWFpbkNvbmRpdGlvbnNcIixbNyxbMTUsXCJoXCJdXV1dLFtcImRcIixbMTUsXCJnXCJdLFwicmVmZXJyYWxfZXhjbHVzaW9uX2RlZmluaXRpb25cIixbOCxcImluY2x1ZGVfY29uZGl0aW9uc1wiLFsxNSxcImhcIl1dXV1dXV1dXV1dLFsyLFsxNSxcImFcIl0sXCJndG1PblN1Y2Nlc3NcIixbN11dXVxuICxbNTAsXCJfX29ndF9zZXNzaW9uX3RpbWVvdXRcIixbNDYsXCJhXCJdLFs1MixcImJcIixbXCJyZXF1aXJlXCIsXCJpbnRlcm5hbC5nZXREZXN0aW5hdGlvbklkc1wiXV0sWzUyLFwiY1wiLFtcInJlcXVpcmVcIixcIm1ha2VOdW1iZXJcIl1dLFs1MixcImRcIixbXCJyZXF1aXJlXCIsXCJpbnRlcm5hbC5zZXRSZW1vdGVDb25maWdQYXJhbWV0ZXJcIl1dLFs0MSxcImVcIl0sWzMsXCJlXCIsWzMwLFtcImJcIl0sWzddXV0sWzUyLFwiZlwiLFszMCxbXCJjXCIsWzE3LFsxNSxcImFcIl0sXCJzZXNzaW9uSG91cnNcIl1dLDBdXSxbNTIsXCJnXCIsWzMwLFtcImNcIixbMTcsWzE1LFwiYVwiXSxcInNlc3Npb25NaW51dGVzXCJdXSwwXV0sWzIyLFszMCxbMTUsXCJmXCJdLFsxNSxcImdcIl1dLFs0NixbNTMsWzUyLFwiaVwiLFswLFsyNixbMTUsXCJmXCJdLDYwXSxbMTUsXCJnXCJdXV0sWzY1LFwialwiLFsxNSxcImVcIl0sWzQ2LFtcImRcIixbMTUsXCJqXCJdLFwic2Vzc2lvbl9kdXJhdGlvblwiLFsxNSxcImlcIl1dXV1dXV0sWzUyLFwiaFwiLFszMCxbXCJjXCIsWzE3LFsxNSxcImFcIl0sXCJlbmdhZ2VtZW50U2Vjb25kc1wiXV0sMF1dLFsyMixbMTUsXCJoXCJdLFs0NixbNTMsWzUyLFwiaVwiLFsyNixbMTUsXCJoXCJdLDEwMDBdXSxbNjUsXCJqXCIsWzE1LFwiZVwiXSxbNDYsW1wiZFwiLFsxNSxcImpcIl0sXCJzZXNzaW9uX2VuZ2FnZWRfdGltZVwiLFsxNSxcImlcIl1dXV1dXV0sWzIsWzE1LFwiYVwiXSxcImd0bU9uU3VjY2Vzc1wiLFs3XV1dXG4gLFs1MCxcIl9fc2V0X3Byb2R1Y3Rfc2V0dGluZ3NcIixbNDYsXCJhXCJdLFsyLFsxNSxcImFcIl0sXCJndG1PblN1Y2Nlc3NcIixbN11dXVxuICxbNTIsXCJfX21vZHVsZV9jb252ZXJ0RG9tYWluQ29uZGl0aW9uc1wiLFsxMyxbNDEsXCIkMFwiXSxbMyxcIiQwXCIsWzUxLFwiXCIsWzddLFs1MCxcImFcIixbNDZdLFs1MCxcImVcIixbNDYsXCJnXCJdLFszNixbMixbMTUsXCJnXCJdLFwicmVwbGFjZVwiLFs3LFsxNSxcImRcIl0sXCJcXFxcJCZcIl1dXV0sWzUwLFwiZlwiLFs0NixcImdcIl0sWzUyLFwiaFwiLFs3XV0sWzUzLFs0MSxcImlcIl0sWzMsXCJpXCIsMF0sWzYzLFs3LFwiaVwiXSxbMjMsWzE1LFwiaVwiXSxbMTcsWzE1LFwiZ1wiXSxcImxlbmd0aFwiXV0sWzMzLFsxNSxcImlcIl0sWzMsXCJpXCIsWzAsWzE1LFwiaVwiXSwxXV1dLFs0NixbNTMsWzQxLFwialwiXSxbMjIsWzIwLFtcImNcIixbMTYsWzE1LFwiZ1wiXSxbMTUsXCJpXCJdXV0sXCJvYmplY3RcIl0sWzQ2LFs1MyxbNTIsXCJsXCIsWzE2LFsxNixbMTUsXCJnXCJdLFsxNSxcImlcIl1dLFwibWF0Y2hUeXBlXCJdXSxbNTIsXCJtXCIsWzE2LFsxNixbMTUsXCJnXCJdLFsxNSxcImlcIl1dLFwibWF0Y2hWYWx1ZVwiXV0sWzM4LFsxNSxcImxcIl0sWzQ2LFwiQkVHSU5TX1dJVEhcIixcIkVORFNfV0lUSFwiLFwiRVFVQUxTXCIsXCJSRUdFWFwiLFwiQ09OVEFJTlNcIl0sWzQ2LFs1LFs0NixbMyxcImpcIixbMCxcIl5cIixbXCJlXCIsWzE1LFwibVwiXV1dXSxbNF1dXSxbNSxbNDYsWzMsXCJqXCIsWzAsW1wiZVwiLFsxNSxcIm1cIl1dLFwiJFwiXV0sWzRdXV0sWzUsWzQ2LFszLFwialwiLFswLFswLFwiXlwiLFtcImVcIixbMTUsXCJtXCJdXV0sXCIkXCJdXSxbNF1dXSxbNSxbNDYsWzMsXCJqXCIsWzE1LFwibVwiXV0sWzRdXV0sWzUsWzQ2XV0sWzksWzQ2LFszLFwialwiLFtcImVcIixbMTUsXCJtXCJdXV0sWzRdXV1dXV1dLFs0NixbMyxcImpcIixbMTYsWzE1LFwiZ1wiXSxbMTUsXCJpXCJdXV1dXSxbNDEsXCJrXCJdLFsyMixbMTUsXCJqXCJdLFs0NixbMyxcImtcIixbXCJiXCIsWzE1LFwialwiXV1dXV0sWzIyLFsxNSxcImtcIl0sWzQ2LFsyLFsxNSxcImhcIl0sXCJwdXNoXCIsWzcsWzE1LFwia1wiXV1dXV1dXV1dLFszNixbMTUsXCJoXCJdXV0sWzUyLFwiYlwiLFtcInJlcXVpcmVcIixcImludGVybmFsLmNyZWF0ZVJlZ2V4XCJdXSxbNTIsXCJjXCIsW1wicmVxdWlyZVwiLFwiZ2V0VHlwZVwiXV0sWzUyLFwiZFwiLFtcImJcIixcIlsuKitcXFxcLT9eJHt9KCl8W1xcXFxdXFxcXFxcXFxdXCIsXCJnXCJdXSxbMzYsWzgsXCJjb252ZXJ0RG9tYWluQ29uZGl0aW9uc1wiLFsxNSxcImZcIl1dXV0sWzM2LFtcImFcIl1dXV0sW1wiJDBcIl1dXVxuICxbNTIsXCJfX21vZHVsZV9hY3Rpdml0aWVzXCIsWzEzLFs0MSxcIiQwXCJdLFszLFwiJDBcIixbNTEsXCJcIixbN10sWzUwLFwiYVwiLFs0Nl0sWzUwLFwiYlwiLFs0NixcImNcIixcImRcIl0sWzM2LFszOSxbMTUsXCJkXCJdLFtcImRcIixbMTUsXCJjXCJdXSxbMTUsXCJjXCJdXV1dLFszNixbOCxcIndpdGhSZXF1ZXN0Q29udGV4dFwiLFsxNSxcImJcIl1dXV0sWzM2LFtcImFcIl1dXV0sW1wiJDBcIl1dXVxuICxbNTIsXCJfX21vZHVsZV9jY2RHYVJlZ2lvblNjb3BlZFNldHRpbmdzXCIsWzEzLFs0MSxcIiQwXCJdLFszLFwiJDBcIixbNTEsXCJcIixbN10sWzUwLFwiYVwiLFs0Nl0sWzUwLFwiblwiLFs0NixcInFcIixcInJcIixcInNcIl0sWzUwLFwieFwiLFs0NixcInpcIl0sWzUyLFwiYmFcIixbMTYsWzE1LFwibVwiXSxbMTUsXCJ6XCJdXV0sWzIyLFsyOCxbMTUsXCJiYVwiXV0sWzQ2LFszNl1dXSxbNTMsWzQxLFwiYmJcIl0sWzMsXCJiYlwiLDBdLFs2MyxbNyxcImJiXCJdLFsyMyxbMTUsXCJiYlwiXSxbMTcsWzE1LFwiYmFcIl0sXCJsZW5ndGhcIl1dLFszMyxbMTUsXCJiYlwiXSxbMyxcImJiXCIsWzAsWzE1LFwiYmJcIl0sMV1dXSxbNDYsWzUzLFs1MixcImJjXCIsWzE2LFsxNSxcImJhXCJdLFsxNSxcImJiXCJdXV0sW1widVwiLFsxNSxcInRcIl0sWzE3LFsxNSxcImJjXCJdLFwibmFtZVwiXSxbMTcsWzE1LFwiYmNcIl0sXCJ2YWx1ZVwiXV1dXV1dXSxbNTAsXCJ5XCIsWzQ2LFwielwiXSxbMjIsWzMwLFsyOCxbMTUsXCJ2XCJdXSxbMjEsWzE3LFsxNSxcInZcIl0sXCJsZW5ndGhcIl0sMl1dLFs0NixbMzYsZmFsc2VdXV0sWzQxLFwiYmFcIl0sWzMsXCJiYVwiLFsxNixbMTUsXCJ6XCJdLFsxNSxcIndcIl1dXSxbMjIsWzIwLFsxNSxcImJhXCJdLFs0NF1dLFs0NixbMyxcImJhXCIsWzE2LFsxNSxcInpcIl0sWzE1LFwidlwiXV1dXV0sWzM2LFsyOCxbMjgsWzE1LFwiYmFcIl1dXV1dLFsyMixbMjgsWzE1LFwiclwiXV0sWzQ2LFszNl1dXSxbNTIsXCJ0XCIsWzMwLFsxNyxbMTUsXCJxXCJdLFwiaW5zdGFuY2VEZXN0aW5hdGlvbklkXCJdLFsxNyxbXCJkXCJdLFwiY29udGFpbmVySWRcIl1dXSxbNTIsXCJ1XCIsW1wiaVwiLFsxNSxcImdcIl0sWzE1LFwic1wiXV1dLFs1MixcInZcIixbMTMsWzQxLFwiJDBcIl0sWzMsXCIkMFwiLFtcImlcIixbMTUsXCJlXCJdLFsxNSxcInNcIl1dXSxbXCIkMFwiXV1dLFs1MixcIndcIixbMTMsWzQxLFwiJDBcIl0sWzMsXCIkMFwiLFtcImlcIixbMTUsXCJmXCJdLFsxNSxcInNcIl1dXSxbXCIkMFwiXV1dLFs1MyxbNDEsXCJ6XCJdLFszLFwielwiLDBdLFs2MyxbNyxcInpcIl0sWzIzLFsxNSxcInpcIl0sWzE3LFsxNSxcInJcIl0sXCJsZW5ndGhcIl1dLFszMyxbMTUsXCJ6XCJdLFszLFwielwiLFswLFsxNSxcInpcIl0sMV1dXSxbNDYsWzUzLFs1MixcImJhXCIsWzE2LFsxNSxcInJcIl0sWzE1LFwielwiXV1dLFsyMixbMzAsWzE3LFsxNSxcImJhXCJdLFwiZGlzYWxsb3dBbGxSZWdpb25zXCJdLFtcInlcIixbMTcsWzE1LFwiYmFcIl0sXCJkaXNhbGxvd2VkUmVnaW9uc1wiXV1dLFs0NixbXCJ4XCIsWzE3LFsxNSxcImJhXCJdLFwicmVkYWN0RmllbGRHcm91cFwiXV1dXV1dXV1dLFs1MCxcIm9cIixbNDYsXCJxXCJdLFs1MixcInJcIixbOF1dLFsyMixbMjgsWzE1LFwicVwiXV0sWzQ2LFszNixbMTUsXCJyXCJdXV1dLFs1MixcInNcIixbMixbMTUsXCJxXCJdLFwic3BsaXRcIixbNyxcIixcIl1dXSxbNTMsWzQxLFwidFwiXSxbMyxcInRcIiwwXSxbNjMsWzcsXCJ0XCJdLFsyMyxbMTUsXCJ0XCJdLFsxNyxbMTUsXCJzXCJdLFwibGVuZ3RoXCJdXSxbMzMsWzE1LFwidFwiXSxbMyxcInRcIixbMCxbMTUsXCJ0XCJdLDFdXV0sWzQ2LFs1MyxbNTIsXCJ1XCIsWzIsWzE2LFsxNSxcInNcIl0sWzE1LFwidFwiXV0sXCJ0cmltXCIsWzddXV0sWzIyLFsyOCxbMTUsXCJ1XCJdXSxbNDYsWzZdXV0sWzUyLFwidlwiLFsyLFsxNSxcInVcIl0sXCJzcGxpdFwiLFs3LFwiLVwiXV1dLFs1MixcIndcIixbMTYsWzE1LFwidlwiXSwwXV0sWzUyLFwieFwiLFszOSxbMjAsWzE3LFsxNSxcInZcIl0sXCJsZW5ndGhcIl0sMl0sWzE1LFwidVwiXSxbNDRdXV0sWzIyLFszMCxbMjgsWzE1LFwid1wiXV0sWzIxLFsxNyxbMTUsXCJ3XCJdLFwibGVuZ3RoXCJdLDJdXSxbNDYsWzZdXV0sWzIyLFsxLFsyMSxbMTUsXCJ4XCJdLFs0NF1dLFszMCxbMjMsWzE3LFsxNSxcInhcIl0sXCJsZW5ndGhcIl0sNF0sWzE4LFsxNyxbMTUsXCJ4XCJdLFwibGVuZ3RoXCJdLDZdXV0sWzQ2LFs2XV1dLFs0MyxbMTUsXCJyXCJdLFsxNSxcInVcIl0sdHJ1ZV1dXV1dLFszNixbMTUsXCJyXCJdXV0sWzUwLFwicFwiLFs0NixcInFcIl0sWzIyLFsyOCxbMTcsWzE1LFwicVwiXSxcInNldHRpbmdzVGFibGVcIl1dLFs0NixbMzYsWzddXV1dLFs1MixcInJcIixbOF1dLFs1MyxbNDEsXCJzXCJdLFszLFwic1wiLDBdLFs2MyxbNyxcInNcIl0sWzIzLFsxNSxcInNcIl0sWzE3LFsxNyxbMTUsXCJxXCJdLFwic2V0dGluZ3NUYWJsZVwiXSxcImxlbmd0aFwiXV0sWzMzLFsxNSxcInNcIl0sWzMsXCJzXCIsWzAsWzE1LFwic1wiXSwxXV1dLFs0NixbNTMsWzUyLFwidFwiLFsxNixbMTcsWzE1LFwicVwiXSxcInNldHRpbmdzVGFibGVcIl0sWzE1LFwic1wiXV1dLFs1MixcInVcIixbMTcsWzE1LFwidFwiXSxcInJlZGFjdEZpZWxkR3JvdXBcIl1dLFsyMixbMjgsWzE2LFsxNSxcIm1cIl0sWzE1LFwidVwiXV1dLFs0NixbNl1dXSxbNDMsWzE1LFwiclwiXSxbMTUsXCJ1XCJdLFs4LFwicmVkYWN0RmllbGRHcm91cFwiLFsxNSxcInVcIl0sXCJkaXNhbGxvd0FsbFJlZ2lvbnNcIixmYWxzZSxcImRpc2FsbG93ZWRSZWdpb25zXCIsWzhdXV0sWzUyLFwidlwiLFsxNixbMTUsXCJyXCJdLFsxNSxcInVcIl1dXSxbMjIsWzE3LFsxNSxcInRcIl0sXCJkaXNhbGxvd0FsbFJlZ2lvbnNcIl0sWzQ2LFs0MyxbMTUsXCJ2XCJdLFwiZGlzYWxsb3dBbGxSZWdpb25zXCIsdHJ1ZV0sWzZdXV0sWzQzLFsxNSxcInZcIl0sXCJkaXNhbGxvd2VkUmVnaW9uc1wiLFtcIm9cIixbMTcsWzE1LFwidFwiXSxcImRpc2FsbG93ZWRSZWdpb25zXCJdXV1dXV1dLFszNixbMixbMTUsXCJiXCJdLFwidmFsdWVzXCIsWzcsWzE1LFwiclwiXV1dXV0sWzUyLFwiYlwiLFtcInJlcXVpcmVcIixcIk9iamVjdFwiXV0sWzUyLFwiY1wiLFsxMyxbNDEsXCIkMFwiXSxbMyxcIiQwXCIsW1wicmVxdWlyZVwiLFwiaW50ZXJuYWwuZ2V0RmxhZ3NcIl1dLFtcIiQwXCJdXV0sWzUyLFwiZFwiLFtcInJlcXVpcmVcIixcImdldENvbnRhaW5lclZlcnNpb25cIl1dLFs1MixcImVcIixbXCJyZXF1aXJlXCIsXCJpbnRlcm5hbC5nZXRDb3VudHJ5Q29kZVwiXV0sWzUyLFwiZlwiLFtcInJlcXVpcmVcIixcImludGVybmFsLmdldFJlZ2lvbkNvZGVcIl1dLFs1MixcImdcIixbXCJyZXF1aXJlXCIsXCJpbnRlcm5hbC5zZXRSZW1vdGVDb25maWdQYXJhbWV0ZXJcIl1dLFs1MixcImhcIixbMTUsXCJfX21vZHVsZV9hY3Rpdml0aWVzXCJdXSxbNTIsXCJpXCIsWzE3LFsxNSxcImhcIl0sXCJ3aXRoUmVxdWVzdENvbnRleHRcIl1dLFs0MSxcImpcIl0sWzQxLFwia1wiXSxbNDEsXCJsXCJdLFs1MixcIm1cIixbOCxcIkdPT0dMRV9TSUdOQUxTXCIsWzcsWzgsXCJuYW1lXCIsXCJhbGxvd19nb29nbGVfc2lnbmFsc1wiLFwidmFsdWVcIixmYWxzZV1dLFwiREVWSUNFX0FORF9HRU9cIixbNyxbOCxcIm5hbWVcIixcImdlb19ncmFudWxhcml0eVwiLFwidmFsdWVcIix0cnVlXSxbOCxcIm5hbWVcIixcInJlZGFjdF9kZXZpY2VfaW5mb1wiLFwidmFsdWVcIix0cnVlXV1dXSxbMzYsWzgsXCJhcHBseVJlZ2lvblNjb3BlZFNldHRpbmdzXCIsWzE1LFwiblwiXSxcImV4dHJhY3RSZWRhY3RlZExvY2F0aW9uc1wiLFsxNSxcInBcIl1dXV0sWzM2LFtcImFcIl1dXV0sW1wiJDBcIl1dXVxuIFxuXVxuLFwiZW50aXRpZXNcIjp7XG5cIl9fY1wiOntcIjJcIjp0cnVlLFwiNFwiOnRydWV9XG4sXG5cIl9fY2NkX2NvbnZlcnNpb25fbWFya2luZ1wiOntcIjJcIjp0cnVlLFwiNFwiOnRydWV9XG4sXG5cIl9fY2NkX2dhX2ZpcnN0XCI6e1wiMlwiOnRydWUsXCI0XCI6dHJ1ZX1cbixcblwiX19jY2RfZ2FfbGFzdFwiOntcIjJcIjp0cnVlLFwiNFwiOnRydWV9XG4sXG5cIl9fY2NkX2dhX3JlZ3Njb3BlXCI6e1wiMlwiOnRydWUsXCI0XCI6dHJ1ZX1cbixcblwiX19lXCI6e1wiMlwiOnRydWUsXCI0XCI6dHJ1ZX1cbixcblwiX19vZ3RfMXBfZGF0YV92MlwiOntcIjJcIjp0cnVlfVxuLFxuXCJfX29ndF9nYV9zZW5kXCI6e1wiMlwiOnRydWV9XG4sXG5cIl9fb2d0X2dvb2dsZV9zaWduYWxzXCI6e1wiMlwiOnRydWUsXCI0XCI6dHJ1ZX1cbixcblwiX19vZ3RfcmVmZXJyYWxfZXhjbHVzaW9uXCI6e1wiMlwiOnRydWV9XG4sXG5cIl9fb2d0X3Nlc3Npb25fdGltZW91dFwiOntcIjJcIjp0cnVlfVxuLFxuXCJfX3NldF9wcm9kdWN0X3NldHRpbmdzXCI6e1wiMlwiOnRydWUsXCI0XCI6dHJ1ZX1cblxuXG59XG4sXCJibG9iXCI6e1wiMVwiOlwiMlwifVxuLFwicGVybWlzc2lvbnNcIjp7XG5cIl9fY1wiOnt9XG4sXG5cIl9fY2NkX2NvbnZlcnNpb25fbWFya2luZ1wiOnt9XG4sXG5cIl9fY2NkX2dhX2ZpcnN0XCI6e31cbixcblwiX19jY2RfZ2FfbGFzdFwiOnt9XG4sXG5cIl9fY2NkX2dhX3JlZ3Njb3BlXCI6e1wicmVhZF9jb250YWluZXJfZGF0YVwiOnt9fVxuLFxuXCJfX2VcIjp7XCJyZWFkX2V2ZW50X2RhdGFcIjp7XCJldmVudERhdGFBY2Nlc3NcIjpcInNwZWNpZmljXCIsXCJrZXlQYXR0ZXJuc1wiOltcImV2ZW50XCJdfX1cbixcblwiX19vZ3RfMXBfZGF0YV92MlwiOntcImRldGVjdF91c2VyX3Byb3ZpZGVkX2RhdGFcIjp7XCJsaW1pdERhdGFTb3VyY2VzXCI6dHJ1ZSxcImFsbG93QXV0b0RhdGFTb3VyY2VzXCI6dHJ1ZSxcImFsbG93TWFudWFsRGF0YVNvdXJjZXNcIjpmYWxzZSxcImFsbG93Q29kZURhdGFTb3VyY2VzXCI6ZmFsc2V9fVxuLFxuXCJfX29ndF9nYV9zZW5kXCI6e1wiYWNjZXNzX2dsb2JhbHNcIjp7XCJrZXlzXCI6W3tcImtleVwiOlwiZ2EucVwiLFwicmVhZFwiOnRydWUsXCJ3cml0ZVwiOnRydWUsXCJleGVjdXRlXCI6dHJ1ZX0se1wia2V5XCI6XCJHb29nbGVBbmFseXRpY3NPYmplY3RcIixcInJlYWRcIjp0cnVlLFwid3JpdGVcIjpmYWxzZSxcImV4ZWN1dGVcIjpmYWxzZX1dfSxcInJlYWRfY29udGFpbmVyX2RhdGFcIjp7fX1cbixcblwiX19vZ3RfZ29vZ2xlX3NpZ25hbHNcIjp7XCJyZWFkX2NvbnRhaW5lcl9kYXRhXCI6e319XG4sXG5cIl9fb2d0X3JlZmVycmFsX2V4Y2x1c2lvblwiOnt9XG4sXG5cIl9fb2d0X3Nlc3Npb25fdGltZW91dFwiOnt9XG4sXG5cIl9fc2V0X3Byb2R1Y3Rfc2V0dGluZ3NcIjp7fVxuXG5cbn1cblxuXG5cbixcInNlY3VyaXR5X2dyb3Vwc1wiOntcblwiZ29vZ2xlXCI6W1xuXCJfX2NcIlxuLFxuXCJfX2NjZF9jb252ZXJzaW9uX21hcmtpbmdcIlxuLFxuXCJfX2NjZF9nYV9maXJzdFwiXG4sXG5cIl9fY2NkX2dhX2xhc3RcIlxuLFxuXCJfX2NjZF9nYV9yZWdzY29wZVwiXG4sXG5cIl9fZVwiXG4sXG5cIl9fb2d0XzFwX2RhdGFfdjJcIlxuLFxuXCJfX29ndF9nYV9zZW5kXCJcbixcblwiX19vZ3RfZ29vZ2xlX3NpZ25hbHNcIlxuLFxuXCJfX29ndF9yZWZlcnJhbF9leGNsdXNpb25cIlxuLFxuXCJfX29ndF9zZXNzaW9uX3RpbWVvdXRcIlxuLFxuXCJfX3NldF9wcm9kdWN0X3NldHRpbmdzXCJcblxuXVxuXG5cbn1cblxuXG5cbn07XG5cblxuXG5cbnZhciBiYSxjYT1mdW5jdGlvbihhKXt2YXIgYj0wO3JldHVybiBmdW5jdGlvbigpe3JldHVybiBiPGEubGVuZ3RoP3tkb25lOiExLHZhbHVlOmFbYisrXX06e2RvbmU6ITB9fX0sZGE9dHlwZW9mIE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzPT1cImZ1bmN0aW9uXCI/T2JqZWN0LmRlZmluZVByb3BlcnR5OmZ1bmN0aW9uKGEsYixjKXtpZihhPT1BcnJheS5wcm90b3R5cGV8fGE9PU9iamVjdC5wcm90b3R5cGUpcmV0dXJuIGE7YVtiXT1jLnZhbHVlO3JldHVybiBhfSxmYT1mdW5jdGlvbihhKXtmb3IodmFyIGI9W1wib2JqZWN0XCI9PXR5cGVvZiBnbG9iYWxUaGlzJiZnbG9iYWxUaGlzLGEsXCJvYmplY3RcIj09dHlwZW9mIHdpbmRvdyYmd2luZG93LFwib2JqZWN0XCI9PXR5cGVvZiBzZWxmJiZzZWxmLFwib2JqZWN0XCI9PXR5cGVvZiBnbG9iYWwmJmdsb2JhbF0sYz0wO2M8Yi5sZW5ndGg7KytjKXt2YXIgZD1iW2NdO2lmKGQmJmQuTWF0aD09TWF0aClyZXR1cm4gZH10aHJvdyBFcnJvcihcIkNhbm5vdCBmaW5kIGdsb2JhbCBvYmplY3RcIik7XG59LGhhPWZhKHRoaXMpLGlhPWZ1bmN0aW9uKGEsYil7aWYoYilhOntmb3IodmFyIGM9aGEsZD1hLnNwbGl0KFwiLlwiKSxlPTA7ZTxkLmxlbmd0aC0xO2UrKyl7dmFyIGY9ZFtlXTtpZighKGYgaW4gYykpYnJlYWsgYTtjPWNbZl19dmFyIGc9ZFtkLmxlbmd0aC0xXSxrPWNbZ10sbT1iKGspO20hPWsmJm0hPW51bGwmJmRhKGMsZyx7Y29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwLHZhbHVlOm19KX19O1xuaWEoXCJTeW1ib2xcIixmdW5jdGlvbihhKXtpZihhKXJldHVybiBhO3ZhciBiPWZ1bmN0aW9uKGYsZyl7dGhpcy5qPWY7ZGEodGhpcyxcImRlc2NyaXB0aW9uXCIse2NvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCx2YWx1ZTpnfSl9O2IucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuan07dmFyIGM9XCJqc2NvbXBfc3ltYm9sX1wiKyhNYXRoLnJhbmRvbSgpKjFFOT4+PjApK1wiX1wiLGQ9MCxlPWZ1bmN0aW9uKGYpe2lmKHRoaXMgaW5zdGFuY2VvZiBlKXRocm93IG5ldyBUeXBlRXJyb3IoXCJTeW1ib2wgaXMgbm90IGEgY29uc3RydWN0b3JcIik7cmV0dXJuIG5ldyBiKGMrKGZ8fFwiXCIpK1wiX1wiK2QrKyxmKX07cmV0dXJuIGV9KTtcbnZhciBrYT1mdW5jdGlvbihhKXtyZXR1cm4gamEoYSxhKX0samE9ZnVuY3Rpb24oYSxiKXthLnJhdz1iO09iamVjdC5mcmVlemUmJihPYmplY3QuZnJlZXplKGEpLE9iamVjdC5mcmVlemUoYikpO3JldHVybiBhfSxuYT1mdW5jdGlvbihhKXt2YXIgYj10eXBlb2YgU3ltYm9sIT1cInVuZGVmaW5lZFwiJiZTeW1ib2wuaXRlcmF0b3ImJmFbU3ltYm9sLml0ZXJhdG9yXTtpZihiKXJldHVybiBiLmNhbGwoYSk7aWYodHlwZW9mIGEubGVuZ3RoPT1cIm51bWJlclwiKXJldHVybntuZXh0OmNhKGEpfTt0aHJvdyBFcnJvcihTdHJpbmcoYSkrXCIgaXMgbm90IGFuIGl0ZXJhYmxlIG9yIEFycmF5TGlrZVwiKTt9LG9hPWZ1bmN0aW9uKGEpe2Zvcih2YXIgYixjPVtdOyEoYj1hLm5leHQoKSkuZG9uZTspYy5wdXNoKGIudmFsdWUpO3JldHVybiBjfSxwYT1mdW5jdGlvbihhKXtyZXR1cm4gYSBpbnN0YW5jZW9mIEFycmF5P2E6b2EobmEoYSkpfSxxYT10eXBlb2YgT2JqZWN0LmFzc2lnbj09XCJmdW5jdGlvblwiP1xuT2JqZWN0LmFzc2lnbjpmdW5jdGlvbihhLGIpe2Zvcih2YXIgYz0xO2M8YXJndW1lbnRzLmxlbmd0aDtjKyspe3ZhciBkPWFyZ3VtZW50c1tjXTtpZihkKWZvcih2YXIgZSBpbiBkKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChkLGUpJiYoYVtlXT1kW2VdKX1yZXR1cm4gYX07aWEoXCJPYmplY3QuYXNzaWduXCIsZnVuY3Rpb24oYSl7cmV0dXJuIGF8fHFhfSk7dmFyIHJhPXR5cGVvZiBPYmplY3QuY3JlYXRlPT1cImZ1bmN0aW9uXCI/T2JqZWN0LmNyZWF0ZTpmdW5jdGlvbihhKXt2YXIgYj1mdW5jdGlvbigpe307Yi5wcm90b3R5cGU9YTtyZXR1cm4gbmV3IGJ9LHNhO1xuaWYodHlwZW9mIE9iamVjdC5zZXRQcm90b3R5cGVPZj09XCJmdW5jdGlvblwiKXNhPU9iamVjdC5zZXRQcm90b3R5cGVPZjtlbHNle3ZhciB0YTthOnt2YXIgdWE9e2E6ITB9LHZhPXt9O3RyeXt2YS5fX3Byb3RvX189dWE7dGE9dmEuYTticmVhayBhfWNhdGNoKGEpe310YT0hMX1zYT10YT9mdW5jdGlvbihhLGIpe2EuX19wcm90b19fPWI7aWYoYS5fX3Byb3RvX18hPT1iKXRocm93IG5ldyBUeXBlRXJyb3IoYStcIiBpcyBub3QgZXh0ZW5zaWJsZVwiKTtyZXR1cm4gYX06bnVsbH1cbnZhciB4YT1zYSx5YT1mdW5jdGlvbihhLGIpe2EucHJvdG90eXBlPXJhKGIucHJvdG90eXBlKTthLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1hO2lmKHhhKXhhKGEsYik7ZWxzZSBmb3IodmFyIGMgaW4gYilpZihjIT1cInByb3RvdHlwZVwiKWlmKE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKXt2YXIgZD1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGIsYyk7ZCYmT2JqZWN0LmRlZmluZVByb3BlcnR5KGEsYyxkKX1lbHNlIGFbY109YltjXTthLlBuPWIucHJvdG90eXBlfSx6YT1mdW5jdGlvbigpe2Zvcih2YXIgYT1OdW1iZXIodGhpcyksYj1bXSxjPWE7Yzxhcmd1bWVudHMubGVuZ3RoO2MrKyliW2MtYV09YXJndW1lbnRzW2NdO3JldHVybiBifTsvKlxuXG4gQ29weXJpZ2h0IFRoZSBDbG9zdXJlIExpYnJhcnkgQXV0aG9ycy5cbiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuKi9cbnZhciBBYT10aGlzfHxzZWxmLEJhPWZ1bmN0aW9uKGEpe3JldHVybiBhfTt2YXIgQ2E9ZnVuY3Rpb24oYSxiKXt0aGlzLnR5cGU9YTt0aGlzLmRhdGE9Yn07dmFyIERhPWZ1bmN0aW9uKCl7dGhpcy5qPXt9O3RoaXMuSD17fX07YmE9RGEucHJvdG90eXBlO2JhLmdldD1mdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5qW1wiZHVzdC5cIithXX07YmEuc2V0PWZ1bmN0aW9uKGEsYil7YT1cImR1c3QuXCIrYTt0aGlzLkguaGFzT3duUHJvcGVydHkoYSl8fCh0aGlzLmpbYV09Yil9O2JhLk5oPWZ1bmN0aW9uKGEsYil7dGhpcy5zZXQoYSxiKTt0aGlzLkhbXCJkdXN0LlwiK2FdPSEwfTtiYS5oYXM9ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuai5oYXNPd25Qcm9wZXJ0eShcImR1c3QuXCIrYSl9O2JhLnJlbW92ZT1mdW5jdGlvbihhKXthPVwiZHVzdC5cIithO3RoaXMuSC5oYXNPd25Qcm9wZXJ0eShhKXx8ZGVsZXRlIHRoaXMualthXX07dmFyIEZhPWZ1bmN0aW9uKCl7fTtGYS5wcm90b3R5cGUucmVzZXQ9ZnVuY3Rpb24oKXt9O3ZhciBHYT1mdW5jdGlvbihhLGIpe3RoaXMuUj1hO3RoaXMucGFyZW50PWI7dGhpcy5qPXRoaXMuRD12b2lkIDA7dGhpcy5NPSExO3RoaXMuSD1mdW5jdGlvbihjLGQsZSl7cmV0dXJuIGMuYXBwbHkoZCxlKX07dGhpcy52YWx1ZXM9bmV3IERhfTtHYS5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKGEsYil7SGEodGhpcyxhLGIsITEpfTt2YXIgSGE9ZnVuY3Rpb24oYSxiLGMsZCl7YS5NfHwoZD9hLnZhbHVlcy5OaChiLGMpOmEudmFsdWVzLnNldChiLGMpKX07R2EucHJvdG90eXBlLnNldD1mdW5jdGlvbihhLGIpe3RoaXMuTXx8KCF0aGlzLnZhbHVlcy5oYXMoYSkmJnRoaXMucGFyZW50JiZ0aGlzLnBhcmVudC5oYXMoYSk/dGhpcy5wYXJlbnQuc2V0KGEsYik6dGhpcy52YWx1ZXMuc2V0KGEsYikpfTtHYS5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLnZhbHVlcy5oYXMoYSk/dGhpcy52YWx1ZXMuZ2V0KGEpOnRoaXMucGFyZW50P3RoaXMucGFyZW50LmdldChhKTp2b2lkIDB9O1xuR2EucHJvdG90eXBlLmhhcz1mdW5jdGlvbihhKXtyZXR1cm4hIXRoaXMudmFsdWVzLmhhcyhhKXx8ISghdGhpcy5wYXJlbnR8fCF0aGlzLnBhcmVudC5oYXMoYSkpfTt2YXIgSWE9ZnVuY3Rpb24oYSl7dmFyIGI9bmV3IEdhKGEuUixhKTthLkQmJihiLkQ9YS5EKTtiLkg9YS5IO2Iuaj1hLmo7cmV0dXJuIGJ9O0dhLnByb3RvdHlwZS5yZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLlJ9O0dhLnByb3RvdHlwZS5LYT1mdW5jdGlvbigpe3RoaXMuTT0hMH07ZnVuY3Rpb24gSmEoYSxiKXtmb3IodmFyIGMsZD0wO2Q8Yi5sZW5ndGgmJiEoYz1LYShhLGJbZF0pLGMgaW5zdGFuY2VvZiBDYSk7ZCsrKTtyZXR1cm4gY31mdW5jdGlvbiBLYShhLGIpe3RyeXt2YXIgYz1hLmdldChTdHJpbmcoYlswXSkpO2lmKCFjfHx0eXBlb2YgYy5pbnZva2UhPT1cImZ1bmN0aW9uXCIpdGhyb3cgRXJyb3IoXCJBdHRlbXB0aW5nIHRvIGV4ZWN1dGUgbm9uLWZ1bmN0aW9uIFwiK2JbMF0rXCIuXCIpO3JldHVybiBjLmludm9rZS5hcHBseShjLFthXS5jb25jYXQoYi5zbGljZSgxKSkpfWNhdGNoKGUpe3ZhciBkPWEuRDtkJiZkKGUsYi5jb250ZXh0P3tpZDpiWzBdLGxpbmU6Yi5jb250ZXh0LmxpbmV9Om51bGwpO3Rocm93IGU7fX07dmFyIExhPWZ1bmN0aW9uKCl7dGhpcy5EPW5ldyBGYTt0aGlzLmo9bmV3IEdhKHRoaXMuRCl9O2JhPUxhLnByb3RvdHlwZTtiYS5yZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLkR9O2JhLmV4ZWN1dGU9ZnVuY3Rpb24oYSl7dmFyIGI9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLDApO3JldHVybiB0aGlzLkxoKGIpfTtiYS5MaD1mdW5jdGlvbigpe2Zvcih2YXIgYSxiPTA7Yjxhcmd1bWVudHMubGVuZ3RoO2IrKylhPUthKHRoaXMuaixhcmd1bWVudHNbYl0pO3JldHVybiBhfTtiYS5Naz1mdW5jdGlvbihhKXt2YXIgYj1JYSh0aGlzLmopO2Iuaj1hO2Zvcih2YXIgYyxkPTE7ZDxhcmd1bWVudHMubGVuZ3RoO2QrKyljPUthKGIsYXJndW1lbnRzW2RdKTtyZXR1cm4gY307YmEuS2E9ZnVuY3Rpb24oKXt0aGlzLmouS2EoKX07dmFyIE1hPWZ1bmN0aW9uKCl7RGEuY2FsbCh0aGlzKTt0aGlzLkQ9ITF9O3lhKE1hLERhKTt2YXIgTmE9ZnVuY3Rpb24oYSxiKXt2YXIgYz1bXSxkO2ZvcihkIGluIGEuailpZihhLmouaGFzT3duUHJvcGVydHkoZCkpc3dpdGNoKGQ9ZC5zdWJzdHIoNSksYil7Y2FzZSAxOmMucHVzaChkKTticmVhaztjYXNlIDI6Yy5wdXNoKGEuZ2V0KGQpKTticmVhaztjYXNlIDM6Yy5wdXNoKFtkLGEuZ2V0KGQpXSl9cmV0dXJuIGN9O01hLnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24oYSxiKXt0aGlzLkR8fERhLnByb3RvdHlwZS5zZXQuY2FsbCh0aGlzLGEsYil9O01hLnByb3RvdHlwZS5OaD1mdW5jdGlvbihhLGIpe3RoaXMuRHx8RGEucHJvdG90eXBlLk5oLmNhbGwodGhpcyxhLGIpfTtNYS5wcm90b3R5cGUucmVtb3ZlPWZ1bmN0aW9uKGEpe3RoaXMuRHx8RGEucHJvdG90eXBlLnJlbW92ZS5jYWxsKHRoaXMsYSl9O01hLnByb3RvdHlwZS5LYT1mdW5jdGlvbigpe3RoaXMuRD0hMH07LypcbiBqUXVlcnkgKGMpIDIwMDUsIDIwMTIgalF1ZXJ5IEZvdW5kYXRpb24sIEluYy4ganF1ZXJ5Lm9yZy9saWNlbnNlLlxuKi9cbnZhciBQYT0vXFxbb2JqZWN0IChCb29sZWFufE51bWJlcnxTdHJpbmd8RnVuY3Rpb258QXJyYXl8RGF0ZXxSZWdFeHApXFxdLyxRYT1mdW5jdGlvbihhKXtpZihhPT1udWxsKXJldHVybiBTdHJpbmcoYSk7dmFyIGI9UGEuZXhlYyhPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoT2JqZWN0KGEpKSk7cmV0dXJuIGI/YlsxXS50b0xvd2VyQ2FzZSgpOlwib2JqZWN0XCJ9LFJhPWZ1bmN0aW9uKGEsYil7cmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChPYmplY3QoYSksYil9LFNhPWZ1bmN0aW9uKGEpe2lmKCFhfHxRYShhKSE9XCJvYmplY3RcInx8YS5ub2RlVHlwZXx8YT09YS53aW5kb3cpcmV0dXJuITE7dHJ5e2lmKGEuY29uc3RydWN0b3ImJiFSYShhLFwiY29uc3RydWN0b3JcIikmJiFSYShhLmNvbnN0cnVjdG9yLnByb3RvdHlwZSxcImlzUHJvdG90eXBlT2ZcIikpcmV0dXJuITF9Y2F0Y2goYyl7cmV0dXJuITF9Zm9yKHZhciBiIGluIGEpO3JldHVybiBiPT09dm9pZCAwfHxcblJhKGEsYil9LGg9ZnVuY3Rpb24oYSxiKXt2YXIgYz1ifHwoUWEoYSk9PVwiYXJyYXlcIj9bXTp7fSksZDtmb3IoZCBpbiBhKWlmKFJhKGEsZCkpe3ZhciBlPWFbZF07UWEoZSk9PVwiYXJyYXlcIj8oUWEoY1tkXSkhPVwiYXJyYXlcIiYmKGNbZF09W10pLGNbZF09aChlLGNbZF0pKTpTYShlKT8oU2EoY1tkXSl8fChjW2RdPXt9KSxjW2RdPWgoZSxjW2RdKSk6Y1tkXT1lfXJldHVybiBjfTtmdW5jdGlvbiBVYShhKXtpZihhPT12b2lkIDB8fEFycmF5LmlzQXJyYXkoYSl8fFNhKGEpKXJldHVybiEwO3N3aXRjaCh0eXBlb2YgYSl7Y2FzZSBcImJvb2xlYW5cIjpjYXNlIFwibnVtYmVyXCI6Y2FzZSBcInN0cmluZ1wiOmNhc2UgXCJmdW5jdGlvblwiOnJldHVybiEwfXJldHVybiExfWZ1bmN0aW9uIFZhKGEpe3JldHVybiB0eXBlb2YgYT09PVwibnVtYmVyXCImJmE+PTAmJmlzRmluaXRlKGEpJiZhJTE9PT0wfHx0eXBlb2YgYT09PVwic3RyaW5nXCImJmFbMF0hPT1cIi1cIiYmYT09PVwiXCIrcGFyc2VJbnQoYSl9O3ZhciBXYT1mdW5jdGlvbihhKXt0aGlzLmo9W107dGhpcy5IPSExO3RoaXMuRD1uZXcgTWE7YT1hfHxbXTtmb3IodmFyIGIgaW4gYSlhLmhhc093blByb3BlcnR5KGIpJiYoVmEoYik/dGhpcy5qW051bWJlcihiKV09YVtOdW1iZXIoYildOnRoaXMuRC5zZXQoYixhW2JdKSl9O2JhPVdhLnByb3RvdHlwZTtiYS50b1N0cmluZz1mdW5jdGlvbihhKXtpZihhJiZhLmluZGV4T2YodGhpcyk+PTApcmV0dXJuXCJcIjtmb3IodmFyIGI9W10sYz0wO2M8dGhpcy5qLmxlbmd0aDtjKyspe3ZhciBkPXRoaXMualtjXTtkPT09bnVsbHx8ZD09PXZvaWQgMD9iLnB1c2goXCJcIik6ZCBpbnN0YW5jZW9mIFdhPyhhPWF8fFtdLGEucHVzaCh0aGlzKSxiLnB1c2goZC50b1N0cmluZyhhKSksYS5wb3AoKSk6Yi5wdXNoKFN0cmluZyhkKSl9cmV0dXJuIGIuam9pbihcIixcIil9O1xuYmEuc2V0PWZ1bmN0aW9uKGEsYil7aWYoIXRoaXMuSClpZihhPT09XCJsZW5ndGhcIil7aWYoIVZhKGIpKXRocm93IEVycm9yKFwiUmFuZ2VFcnJvcjogTGVuZ3RoIHByb3BlcnR5IG11c3QgYmUgYSB2YWxpZCBpbnRlZ2VyLlwiKTt0aGlzLmoubGVuZ3RoPU51bWJlcihiKX1lbHNlIFZhKGEpP3RoaXMualtOdW1iZXIoYSldPWI6dGhpcy5ELnNldChhLGIpfTtiYS5nZXQ9ZnVuY3Rpb24oYSl7cmV0dXJuIGE9PT1cImxlbmd0aFwiP3RoaXMubGVuZ3RoKCk6VmEoYSk/dGhpcy5qW051bWJlcihhKV06dGhpcy5ELmdldChhKX07YmEubGVuZ3RoPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuai5sZW5ndGh9O2JhLk5iPWZ1bmN0aW9uKCl7Zm9yKHZhciBhPU5hKHRoaXMuRCwxKSxiPTA7Yjx0aGlzLmoubGVuZ3RoO2IrKylhLnB1c2goYitcIlwiKTtyZXR1cm4gbmV3IFdhKGEpfTtiYS5yZW1vdmU9ZnVuY3Rpb24oYSl7VmEoYSk/ZGVsZXRlIHRoaXMualtOdW1iZXIoYSldOnRoaXMuRC5yZW1vdmUoYSl9O1xuYmEucG9wPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuai5wb3AoKX07YmEucHVzaD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmoucHVzaC5hcHBseSh0aGlzLmosQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKSl9O2JhLnNoaWZ0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuai5zaGlmdCgpfTtiYS5zcGxpY2U9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gbmV3IFdhKHRoaXMuai5zcGxpY2UuYXBwbHkodGhpcy5qLGFyZ3VtZW50cykpfTtiYS51bnNoaWZ0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuai51bnNoaWZ0LmFwcGx5KHRoaXMuaixBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpKX07YmEuaGFzPWZ1bmN0aW9uKGEpe3JldHVybiBWYShhKSYmdGhpcy5qLmhhc093blByb3BlcnR5KGEpfHx0aGlzLkQuaGFzKGEpfTtiYS5LYT1mdW5jdGlvbigpe3RoaXMuSD0hMDtPYmplY3QuZnJlZXplKHRoaXMuaik7dGhpcy5ELkthKCl9O1xuZnVuY3Rpb24gWGEoYSl7Zm9yKHZhciBiPVtdLGM9MDtjPGEubGVuZ3RoKCk7YysrKWEuaGFzKGMpJiYoYltjXT1hLmdldChjKSk7cmV0dXJuIGJ9O3ZhciBZYT1mdW5jdGlvbigpe01hLmNhbGwodGhpcyl9O3lhKFlhLE1hKTtZYS5wcm90b3R5cGUuTmI9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IFdhKE5hKHRoaXMsMSkpfTt2YXIgWmE9ZnVuY3Rpb24oYSl7Zm9yKHZhciBiPU5hKGEsMyksYz1uZXcgV2EsZD0wO2Q8Yi5sZW5ndGg7ZCsrKXt2YXIgZT1uZXcgV2EoYltkXSk7Yy5wdXNoKGUpfXJldHVybiBjfTtmdW5jdGlvbiBhYigpe2Zvcih2YXIgYT1iYixiPXt9LGM9MDtjPGEubGVuZ3RoOysrYyliW2FbY11dPWM7cmV0dXJuIGJ9ZnVuY3Rpb24gY2IoKXt2YXIgYT1cIkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaXCI7YSs9YS50b0xvd2VyQ2FzZSgpK1wiMDEyMzQ1Njc4OS1fXCI7cmV0dXJuIGErXCIuXCJ9dmFyIGJiLGRiO2Z1bmN0aW9uIGViKGEpe2JiPWJifHxjYigpO2RiPWRifHxhYigpO2Zvcih2YXIgYj1bXSxjPTA7YzxhLmxlbmd0aDtjKz0zKXt2YXIgZD1jKzE8YS5sZW5ndGgsZT1jKzI8YS5sZW5ndGgsZj1hLmNoYXJDb2RlQXQoYyksZz1kP2EuY2hhckNvZGVBdChjKzEpOjAsaz1lP2EuY2hhckNvZGVBdChjKzIpOjAsbT1mPj4yLG49KGYmMyk8PDR8Zz4+NCxwPShnJjE1KTw8MnxrPj42LHE9ayY2MztlfHwocT02NCxkfHwocD02NCkpO2IucHVzaChiYlttXSxiYltuXSxiYltwXSxiYltxXSl9cmV0dXJuIGIuam9pbihcIlwiKX1cbmZ1bmN0aW9uIGZiKGEpe2Z1bmN0aW9uIGIobSl7Zm9yKDtkPGEubGVuZ3RoOyl7dmFyIG49YS5jaGFyQXQoZCsrKSxwPWRiW25dO2lmKHAhPW51bGwpcmV0dXJuIHA7aWYoIS9eW1xcc1xceGEwXSokLy50ZXN0KG4pKXRocm93IEVycm9yKFwiVW5rbm93biBiYXNlNjQgZW5jb2RpbmcgYXQgY2hhcjogXCIrbik7fXJldHVybiBtfWJiPWJifHxjYigpO2RiPWRifHxhYigpO2Zvcih2YXIgYz1cIlwiLGQ9MDs7KXt2YXIgZT1iKC0xKSxmPWIoMCksZz1iKDY0KSxrPWIoNjQpO2lmKGs9PT02NCYmZT09PS0xKXJldHVybiBjO2MrPVN0cmluZy5mcm9tQ2hhckNvZGUoZTw8MnxmPj40KTtnIT09NjQmJihjKz1TdHJpbmcuZnJvbUNoYXJDb2RlKGY8PDQmMjQwfGc+PjIpLGshPT02NCYmKGMrPVN0cmluZy5mcm9tQ2hhckNvZGUoZzw8NiYxOTJ8aykpKX19O3ZhciBnYj17fTtmdW5jdGlvbiBoYihhLGIpe2diW2FdPWdiW2FdfHxbXTtnYlthXVtiXT0hMH1mdW5jdGlvbiBpYihhKXt2YXIgYj1nYlthXTtpZighYnx8Yi5sZW5ndGg9PT0wKXJldHVyblwiXCI7Zm9yKHZhciBjPVtdLGQ9MCxlPTA7ZTxiLmxlbmd0aDtlKyspZSU4PT09MCYmZT4wJiYoYy5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUoZCkpLGQ9MCksYltlXSYmKGR8PTE8PGUlOCk7ZD4wJiZjLnB1c2goU3RyaW5nLmZyb21DaGFyQ29kZShkKSk7cmV0dXJuIGViKGMuam9pbihcIlwiKSkucmVwbGFjZSgvXFwuKyQvLFwiXCIpfWZ1bmN0aW9uIGpiKCl7Zm9yKHZhciBhPVtdLGI9Z2IuZmRyfHxbXSxjPTA7YzxiLmxlbmd0aDtjKyspYltjXSYmYS5wdXNoKGMpO3JldHVybiBhLmxlbmd0aD4wP2E6dm9pZCAwfTt2YXIga2I9W10sbGI9e307ZnVuY3Rpb24gbWIoYSl7cmV0dXJuIGtiW2FdPT09dm9pZCAwPyExOmtiW2FdfTtmdW5jdGlvbiBuYigpe31mdW5jdGlvbiBvYihhKXtyZXR1cm4gdHlwZW9mIGE9PT1cImZ1bmN0aW9uXCJ9ZnVuY3Rpb24gbChhKXtyZXR1cm4gdHlwZW9mIGE9PT1cInN0cmluZ1wifWZ1bmN0aW9uIHBiKGEpe3JldHVybiB0eXBlb2YgYT09PVwibnVtYmVyXCImJiFpc05hTihhKX1mdW5jdGlvbiBxYihhKXtyZXR1cm4gQXJyYXkuaXNBcnJheShhKT9hOlthXX1mdW5jdGlvbiByYihhLGIpe2lmKGEmJkFycmF5LmlzQXJyYXkoYSkpZm9yKHZhciBjPTA7YzxhLmxlbmd0aDtjKyspaWYoYVtjXSYmYihhW2NdKSlyZXR1cm4gYVtjXX1mdW5jdGlvbiBzYihhLGIpe2lmKCFwYihhKXx8IXBiKGIpfHxhPmIpYT0wLGI9MjE0NzQ4MzY0NztyZXR1cm4gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKihiLWErMSkrYSl9XG5mdW5jdGlvbiB0YihhLGIpe2Zvcih2YXIgYz1uZXcgdWIsZD0wO2Q8YS5sZW5ndGg7ZCsrKWMuc2V0KGFbZF0sITApO2Zvcih2YXIgZT0wO2U8Yi5sZW5ndGg7ZSsrKWlmKGMuZ2V0KGJbZV0pKXJldHVybiEwO3JldHVybiExfWZ1bmN0aW9uIHooYSxiKXtmb3IodmFyIGMgaW4gYSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYSxjKSYmYihjLGFbY10pfWZ1bmN0aW9uIHZiKGEpe3JldHVybiEhYSYmKE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChhKT09PVwiW29iamVjdCBBcmd1bWVudHNdXCJ8fE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChhLFwiY2FsbGVlXCIpKX1mdW5jdGlvbiB3YihhKXtyZXR1cm4gTWF0aC5yb3VuZChOdW1iZXIoYSkpfHwwfWZ1bmN0aW9uIHhiKGEpe3JldHVyblwiZmFsc2VcIj09PVN0cmluZyhhKS50b0xvd2VyQ2FzZSgpPyExOiEhYX1cbmZ1bmN0aW9uIHliKGEpe3ZhciBiPVtdO2lmKEFycmF5LmlzQXJyYXkoYSkpZm9yKHZhciBjPTA7YzxhLmxlbmd0aDtjKyspYi5wdXNoKFN0cmluZyhhW2NdKSk7cmV0dXJuIGJ9ZnVuY3Rpb24gemIoYSl7cmV0dXJuIGE/YS5yZXBsYWNlKC9eXFxzK3xcXHMrJC9nLFwiXCIpOlwiXCJ9ZnVuY3Rpb24gQWIoKXtyZXR1cm4gbmV3IERhdGUoRGF0ZS5ub3coKSl9ZnVuY3Rpb24gQmIoKXtyZXR1cm4gQWIoKS5nZXRUaW1lKCl9dmFyIHViPWZ1bmN0aW9uKCl7dGhpcy5wcmVmaXg9XCJndG0uXCI7dGhpcy52YWx1ZXM9e319O3ViLnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24oYSxiKXt0aGlzLnZhbHVlc1t0aGlzLnByZWZpeCthXT1ifTt1Yi5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLnZhbHVlc1t0aGlzLnByZWZpeCthXX07dWIucHJvdG90eXBlLmNvbnRhaW5zPWZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLmdldChhKSE9PXZvaWQgMH07XG5mdW5jdGlvbiBDYihhLGIsYyl7cmV0dXJuIGEmJmEuaGFzT3duUHJvcGVydHkoYik/YVtiXTpjfWZ1bmN0aW9uIERiKGEpe3ZhciBiPWE7cmV0dXJuIGZ1bmN0aW9uKCl7aWYoYil7dmFyIGM9YjtiPXZvaWQgMDt0cnl7YygpfWNhdGNoKGQpe319fX1mdW5jdGlvbiBFYihhLGIpe2Zvcih2YXIgYyBpbiBiKWIuaGFzT3duUHJvcGVydHkoYykmJihhW2NdPWJbY10pfWZ1bmN0aW9uIEZiKGEsYil7Zm9yKHZhciBjPVtdLGQ9MDtkPGEubGVuZ3RoO2QrKyljLnB1c2goYVtkXSksYy5wdXNoLmFwcGx5KGMsYlthW2RdXXx8W10pO3JldHVybiBjfWZ1bmN0aW9uIEdiKGEsYil7cmV0dXJuIGEubGVuZ3RoPj1iLmxlbmd0aCYmYS5zdWJzdHJpbmcoMCxiLmxlbmd0aCk9PT1ifWZ1bmN0aW9uIEhiKGEsYil7cmV0dXJuIGEubGVuZ3RoPj1iLmxlbmd0aCYmYS5zdWJzdHJpbmcoYS5sZW5ndGgtYi5sZW5ndGgsYS5sZW5ndGgpPT09Yn1cbmZ1bmN0aW9uIEliKGEsYil7dmFyIGM9RDtiPWJ8fFtdO2Zvcih2YXIgZD1jLGU9MDtlPGEubGVuZ3RoLTE7ZSsrKXtpZighZC5oYXNPd25Qcm9wZXJ0eShhW2VdKSlyZXR1cm47ZD1kW2FbZV1dO2lmKGIuaW5kZXhPZihkKT49MClyZXR1cm59cmV0dXJuIGR9ZnVuY3Rpb24gSmIoYSxiKXtmb3IodmFyIGM9e30sZD1jLGU9YS5zcGxpdChcIi5cIiksZj0wO2Y8ZS5sZW5ndGgtMTtmKyspZD1kW2VbZl1dPXt9O2RbZVtlLmxlbmd0aC0xXV09YjtyZXR1cm4gY312YXIgS2I9L15cXHd7MSw5fSQvO2Z1bmN0aW9uIExiKGEsYil7YT1hfHx7fTtiPWJ8fFwiLFwiO3ZhciBjPVtdO3ooYSxmdW5jdGlvbihkLGUpe0tiLnRlc3QoZCkmJmUmJmMucHVzaChkKX0pO3JldHVybiBjLmpvaW4oYil9ZnVuY3Rpb24gTWIoYSxiKXtmdW5jdGlvbiBjKCl7ZSYmKytkPT09YiYmKGUoKSxlPW51bGwsYy5kb25lPSEwKX12YXIgZD0wLGU9YTtjLmRvbmU9ITE7cmV0dXJuIGN9XG5mdW5jdGlvbiBOYihhKXtpZighYSlyZXR1cm4gYTt2YXIgYj1hO2lmKG1iKDMpKXRyeXtiPWRlY29kZVVSSUNvbXBvbmVudChhKX1jYXRjaChkKXt9dmFyIGM9Yi5zcGxpdChcIixcIik7cmV0dXJuIGMubGVuZ3RoPT09MiYmY1swXT09PWNbMV0/Y1swXTphfTt2YXIgT2IsUGI9ZnVuY3Rpb24oKXtpZihPYj09PXZvaWQgMCl7dmFyIGE9bnVsbCxiPUFhLnRydXN0ZWRUeXBlcztpZihiJiZiLmNyZWF0ZVBvbGljeSl7dHJ5e2E9Yi5jcmVhdGVQb2xpY3koXCJnb29nI2h0bWxcIix7Y3JlYXRlSFRNTDpCYSxjcmVhdGVTY3JpcHQ6QmEsY3JlYXRlU2NyaXB0VVJMOkJhfSl9Y2F0Y2goYyl7QWEuY29uc29sZSYmQWEuY29uc29sZS5lcnJvcihjLm1lc3NhZ2UpfU9iPWF9ZWxzZSBPYj1hfXJldHVybiBPYn07dmFyIFFiPXt9LFJiPWZ1bmN0aW9uKGEpe3RoaXMuaj1hfTtSYi5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5qK1wiXCJ9O3ZhciBTYj1mdW5jdGlvbihhKXtyZXR1cm4gYSBpbnN0YW5jZW9mIFJiJiZhLmNvbnN0cnVjdG9yPT09UmI/YS5qOlwidHlwZV9lcnJvcjpUcnVzdGVkUmVzb3VyY2VVcmxcIn0sVGI9ZnVuY3Rpb24oYSl7dmFyIGI9YSxjPVBiKCksZD1jP2MuY3JlYXRlU2NyaXB0VVJMKGIpOmI7cmV0dXJuIG5ldyBSYihkLFFiKX07LypcblxuIENvcHlyaWdodCBHb29nbGUgTExDXG4gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcbiovXG52YXIgVWI9a2EoW1wiXCJdKSxWYj1qYShbXCJcXHgwMFwiXSxbXCJcXFxcMFwiXSksV2I9amEoW1wiXFxuXCJdLFtcIlxcXFxuXCJdKSxYYj1qYShbXCJcXHgwMFwiXSxbXCJcXFxcdTAwMDBcIl0pO2Z1bmN0aW9uIFliKGEpe3JldHVybiBhLnRvU3RyaW5nKCkuaW5kZXhPZihcImBcIik9PT0tMX1ZYihmdW5jdGlvbihhKXtyZXR1cm4gYShVYil9KXx8WWIoZnVuY3Rpb24oYSl7cmV0dXJuIGEoVmIpfSl8fFliKGZ1bmN0aW9uKGEpe3JldHVybiBhKFdiKX0pfHxZYihmdW5jdGlvbihhKXtyZXR1cm4gYShYYil9KTt2YXIgWmI9ZnVuY3Rpb24oYSl7dGhpcy5qPWF9O1piLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmp9O3ZhciAkYj1uZXcgWmIoXCJhYm91dDppbnZhbGlkI3pDbG9zdXJlelwiKTt2YXIgYWM9ZnVuY3Rpb24oYSl7dGhpcy5obT1hfTtmdW5jdGlvbiBiYyhhKXtyZXR1cm4gbmV3IGFjKGZ1bmN0aW9uKGIpe3JldHVybiBiLnN1YnN0cigwLGEubGVuZ3RoKzEpLnRvTG93ZXJDYXNlKCk9PT1hK1wiOlwifSl9dmFyIGNjPVtiYyhcImRhdGFcIiksYmMoXCJodHRwXCIpLGJjKFwiaHR0cHNcIiksYmMoXCJtYWlsdG9cIiksYmMoXCJmdHBcIiksbmV3IGFjKGZ1bmN0aW9uKGEpe3JldHVybi9eW146XSooWy8/I118JCkvLnRlc3QoYSl9KV07ZnVuY3Rpb24gZGMoYSxiKXtiPWI9PT12b2lkIDA/Y2M6YjtpZihhIGluc3RhbmNlb2YgWmIpcmV0dXJuIGE7Zm9yKHZhciBjPTA7YzxiLmxlbmd0aDsrK2Mpe3ZhciBkPWJbY107aWYoZCBpbnN0YW5jZW9mIGFjJiZkLmhtKGEpKXJldHVybiBuZXcgWmIoYSl9fWZ1bmN0aW9uIGVjKGEpe3ZhciBiO2I9Yj09PXZvaWQgMD9jYzpiO3JldHVybiBkYyhhLGIpfHwkYn12YXIgZmM9L15cXHMqKD8hamF2YXNjcmlwdDopKD86W1xcdysuLV0rOnxbXjovPyNdKig/OlsvPyNdfCQpKS9pO1xuZnVuY3Rpb24gZ2MoYSl7dmFyIGI7aWYoYSBpbnN0YW5jZW9mIFpiKWlmKGEgaW5zdGFuY2VvZiBaYiliPWEuajtlbHNlIHRocm93IEVycm9yKFwiXCIpO2Vsc2UgYj1mYy50ZXN0KGEpP2E6dm9pZCAwO3JldHVybiBifTt2YXIgaWM9ZnVuY3Rpb24oKXt0aGlzLmo9aGNbMF0udG9Mb3dlckNhc2UoKX07aWMucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuan07dmFyIGpjPWZ1bmN0aW9uKGEpe3RoaXMuaj1hfTtqYy5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5qK1wiXCJ9O2Z1bmN0aW9uIGtjKGEsYil7dmFyIGM9W25ldyBpY107aWYoYy5sZW5ndGg9PT0wKXRocm93IEVycm9yKFwiXCIpO3ZhciBkPWMubWFwKGZ1bmN0aW9uKGYpe3ZhciBnO2lmKGYgaW5zdGFuY2VvZiBpYylnPWYuajtlbHNlIHRocm93IEVycm9yKFwiXCIpO3JldHVybiBnfSksZT1iLnRvTG93ZXJDYXNlKCk7aWYoZC5ldmVyeShmdW5jdGlvbihmKXtyZXR1cm4gZS5pbmRleE9mKGYpIT09MH0pKXRocm93IEVycm9yKCdBdHRyaWJ1dGUgXCInK2IrJ1wiIGRvZXMgbm90IG1hdGNoIGFueSBvZiB0aGUgYWxsb3dlZCBwcmVmaXhlcy4nKTthLnNldEF0dHJpYnV0ZShiLFwidHJ1ZVwiKX07ZnVuY3Rpb24gbGMoYSxiKXt2YXIgYz1nYyhiKTtjIT09dm9pZCAwJiYoYS5hY3Rpb249Yyl9O3ZhciBtYz1BcnJheS5wcm90b3R5cGUuaW5kZXhPZj9mdW5jdGlvbihhLGIpe3JldHVybiBBcnJheS5wcm90b3R5cGUuaW5kZXhPZi5jYWxsKGEsYix2b2lkIDApfTpmdW5jdGlvbihhLGIpe2lmKHR5cGVvZiBhPT09XCJzdHJpbmdcIilyZXR1cm4gdHlwZW9mIGIhPT1cInN0cmluZ1wifHxiLmxlbmd0aCE9MT8tMTphLmluZGV4T2YoYiwwKTtmb3IodmFyIGM9MDtjPGEubGVuZ3RoO2MrKylpZihjIGluIGEmJmFbY109PT1iKXJldHVybiBjO3JldHVybi0xfTtcIkFSVElDTEUgU0VDVElPTiBOQVYgQVNJREUgSDEgSDIgSDMgSDQgSDUgSDYgSEVBREVSIEZPT1RFUiBBRERSRVNTIFAgSFIgUFJFIEJMT0NLUVVPVEUgT0wgVUwgTEggTEkgREwgRFQgREQgRklHVVJFIEZJR0NBUFRJT04gTUFJTiBESVYgRU0gU1RST05HIFNNQUxMIFMgQ0lURSBRIERGTiBBQkJSIFJVQlkgUkIgUlQgUlRDIFJQIERBVEEgVElNRSBDT0RFIFZBUiBTQU1QIEtCRCBTVUIgU1VQIEkgQiBVIE1BUksgQkRJIEJETyBTUEFOIEJSIFdCUiBOT0JSIElOUyBERUwgUElDVFVSRSBQQVJBTSBUUkFDSyBNQVAgVEFCTEUgQ0FQVElPTiBDT0xHUk9VUCBDT0wgVEJPRFkgVEhFQUQgVEZPT1QgVFIgVEQgVEggU0VMRUNUIERBVEFMSVNUIE9QVEdST1VQIE9QVElPTiBPVVRQVVQgUFJPR1JFU1MgTUVURVIgRklFTERTRVQgTEVHRU5EIERFVEFJTFMgU1VNTUFSWSBNRU5VIERJQUxPRyBTTE9UIENBTlZBUyBGT05UIENFTlRFUiBBQ1JPTllNIEJBU0VGT05UIEJJRyBESVIgSEdST1VQIFNUUklLRSBUVFwiLnNwbGl0KFwiIFwiKS5jb25jYXQoW1wiQlVUVE9OXCIsXG5cIklOUFVUXCJdKTtmdW5jdGlvbiBuYyhhKXtyZXR1cm4gYT09PW51bGw/XCJudWxsXCI6YT09PXZvaWQgMD9cInVuZGVmaW5lZFwiOmF9O3ZhciBEPXdpbmRvdyxFPWRvY3VtZW50LG9jPW5hdmlnYXRvcixwYz1mdW5jdGlvbigpe3ZhciBhO3RyeXthPW9jLnNlcnZpY2VXb3JrZXJ9Y2F0Y2goYil7cmV0dXJufXJldHVybiBhfSxxYz1FLmN1cnJlbnRTY3JpcHQscmM9cWMmJnFjLnNyYyxzYz1mdW5jdGlvbihhLGIpe3ZhciBjPURbYV07RFthXT1jPT09dm9pZCAwP2I6YztyZXR1cm4gRFthXX07ZnVuY3Rpb24gdGMoYSl7cmV0dXJuKG9jLnVzZXJBZ2VudHx8XCJcIikuaW5kZXhPZihhKSE9PS0xfXZhciB1Yz17YXN5bmM6MSxub25jZToxLG9uZXJyb3I6MSxvbmxvYWQ6MSxzcmM6MSx0eXBlOjF9LHZjPXtvbmxvYWQ6MSxzcmM6MSx3aWR0aDoxLGhlaWdodDoxLHN0eWxlOjF9O2Z1bmN0aW9uIHdjKGEsYixjKXtiJiZ6KGIsZnVuY3Rpb24oZCxlKXtkPWQudG9Mb3dlckNhc2UoKTtjLmhhc093blByb3BlcnR5KGQpfHxhLnNldEF0dHJpYnV0ZShkLGUpfSl9XG52YXIgeGM9ZnVuY3Rpb24oYSxiLGMsZCxlKXt2YXIgZj1FLmNyZWF0ZUVsZW1lbnQoXCJzY3JpcHRcIik7d2MoZixkLHVjKTtmLnR5cGU9XCJ0ZXh0L2phdmFzY3JpcHRcIjtmLmFzeW5jPWQmJmQuYXN5bmM9PT0hMT8hMTohMDt2YXIgZztnPVRiKG5jKGEpKTtmLnNyYz1TYihnKTt2YXIgayxtLG4scD0obj0obT0oZi5vd25lckRvY3VtZW50JiZmLm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXd8fHdpbmRvdykuZG9jdW1lbnQpLnF1ZXJ5U2VsZWN0b3IpPT1udWxsP3ZvaWQgMDpuLmNhbGwobSxcInNjcmlwdFtub25jZV1cIik7KGs9cD9wLm5vbmNlfHxwLmdldEF0dHJpYnV0ZShcIm5vbmNlXCIpfHxcIlwiOlwiXCIpJiZmLnNldEF0dHJpYnV0ZShcIm5vbmNlXCIsayk7YiYmKGYub25sb2FkPWIpO2MmJihmLm9uZXJyb3I9Yyk7aWYoZSllLmFwcGVuZENoaWxkKGYpO2Vsc2V7dmFyIHE9RS5nZXRFbGVtZW50c0J5VGFnTmFtZShcInNjcmlwdFwiKVswXXx8RS5ib2R5fHxFLmhlYWQ7cS5wYXJlbnROb2RlLmluc2VydEJlZm9yZShmLFxucSl9cmV0dXJuIGZ9LHljPWZ1bmN0aW9uKCl7aWYocmMpe3ZhciBhPXJjLnRvTG93ZXJDYXNlKCk7aWYoYS5pbmRleE9mKFwiaHR0cHM6Ly9cIik9PT0wKXJldHVybiAyO2lmKGEuaW5kZXhPZihcImh0dHA6Ly9cIik9PT0wKXJldHVybiAzfXJldHVybiAxfSx6Yz1mdW5jdGlvbihhLGIsYyxkLGUpe3ZhciBmO2Y9Zj09PXZvaWQgMD8hMDpmO3ZhciBnPWUsaz0hMTtnfHwoZz1FLmNyZWF0ZUVsZW1lbnQoXCJpZnJhbWVcIiksaz0hMCk7d2MoZyxjLHZjKTtkJiZ6KGQsZnVuY3Rpb24obixwKXtnLmRhdGFzZXRbbl09cH0pO2YmJihnLmhlaWdodD1cIjBcIixnLndpZHRoPVwiMFwiLGcuc3R5bGUuZGlzcGxheT1cIm5vbmVcIixnLnN0eWxlLnZpc2liaWxpdHk9XCJoaWRkZW5cIik7YSE9PXZvaWQgMCYmKGcuc3JjPWEpO2lmKGspe3ZhciBtPUUuYm9keSYmRS5ib2R5Lmxhc3RDaGlsZHx8RS5ib2R5fHxFLmhlYWQ7bS5wYXJlbnROb2RlLmluc2VydEJlZm9yZShnLG0pfWImJihnLm9ubG9hZD1iKTtyZXR1cm4gZ30sXG5BYz1mdW5jdGlvbihhLGIsYyxkKXt2YXIgZT1uZXcgSW1hZ2UoMSwxKTt3YyhlLGQse30pO2Uub25sb2FkPWZ1bmN0aW9uKCl7ZS5vbmxvYWQ9bnVsbDtiJiZiKCl9O2Uub25lcnJvcj1mdW5jdGlvbigpe2Uub25lcnJvcj1udWxsO2MmJmMoKX07ZS5zcmM9YTtyZXR1cm4gZX0sQmM9ZnVuY3Rpb24oYSxiLGMsZCl7QWMoYSxiLGMsZCl9LENjPWZ1bmN0aW9uKGEsYixjLGQpe2EuYWRkRXZlbnRMaXN0ZW5lcj9hLmFkZEV2ZW50TGlzdGVuZXIoYixjLCEhZCk6YS5hdHRhY2hFdmVudCYmYS5hdHRhY2hFdmVudChcIm9uXCIrYixjKX0sRGM9ZnVuY3Rpb24oYSxiLGMpe2EucmVtb3ZlRXZlbnRMaXN0ZW5lcj9hLnJlbW92ZUV2ZW50TGlzdGVuZXIoYixjLCExKTphLmRldGFjaEV2ZW50JiZhLmRldGFjaEV2ZW50KFwib25cIitiLGMpfSxHPWZ1bmN0aW9uKGEpe0Quc2V0VGltZW91dChhLDApfSxFYz1mdW5jdGlvbihhLGIpe3JldHVybiBhJiZiJiZhLmF0dHJpYnV0ZXMmJmEuYXR0cmlidXRlc1tiXT9cbmEuYXR0cmlidXRlc1tiXS52YWx1ZTpudWxsfSxGYz1mdW5jdGlvbihhKXtmdW5jdGlvbiBiKGUpe2UmJmUhPVwiIFwiJiYoZT1lLnJlcGxhY2UoL15bXFxzXFx4YTBdK3xbXFxzXFx4YTBdKyQvZyxcIlwiKSk7ZSYmZSE9XCIgXCImJihlPWUucmVwbGFjZSgvXltcXHNcXHhhMF0rfFtcXHNcXHhhMF0rJC9nLFwiXCIpKTtlJiYoZT1lLnJlcGxhY2UoLyhcXHhhMCt8XFxzezIsfXxcXG58XFxyXFx0KS9nLFwiIFwiKSk7cmV0dXJuIGV9dmFyIGM9YihhLmlubmVyVGV4dHx8YS50ZXh0Q29udGVudHx8XCJcIik7aWYobWIoMTApKXt2YXIgZD1iKGEudGV4dENvbnRlbnR8fFwiXCIpO2hiKFwiVEFHR0lOR1wiLDI2KTtkIT09YyYmaGIoXCJUQUdHSU5HXCIsMjUpfXJldHVybiBjfSxHYz1mdW5jdGlvbihhKXt2YXIgYj1FLmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiksYz1iLGQsZT1uYyhcIkE8ZGl2PlwiK2ErXCI8L2Rpdj5cIiksZj1QYigpO2Q9bmV3IGpjKGY/Zi5jcmVhdGVIVE1MKGUpOmUpO2lmKGMubm9kZVR5cGU9PT0xKXt2YXIgZz1jLnRhZ05hbWU7aWYoZz09PVxuXCJTQ1JJUFRcInx8Zz09PVwiU1RZTEVcIil0aHJvdyBFcnJvcihcIlwiKTt9dmFyIGs7aWYoZCBpbnN0YW5jZW9mIGpjKWs9ZC5qO2Vsc2UgdGhyb3cgRXJyb3IoXCJcIik7Yy5pbm5lckhUTUw9aztiPWIubGFzdENoaWxkO2Zvcih2YXIgbT1bXTtiLmZpcnN0Q2hpbGQ7KW0ucHVzaChiLnJlbW92ZUNoaWxkKGIuZmlyc3RDaGlsZCkpO3JldHVybiBtfSxIYz1mdW5jdGlvbihhLGIsYyl7Yz1jfHwxMDA7Zm9yKHZhciBkPXt9LGU9MDtlPGIubGVuZ3RoO2UrKylkW2JbZV1dPSEwO2Zvcih2YXIgZj1hLGc9MDtmJiZnPD1jO2crKyl7aWYoZFtTdHJpbmcoZi50YWdOYW1lKS50b0xvd2VyQ2FzZSgpXSlyZXR1cm4gZjtmPWYucGFyZW50RWxlbWVudH1yZXR1cm4gbnVsbH0sSWM9ZnVuY3Rpb24oYSl7dmFyIGI7dHJ5e2I9b2Muc2VuZEJlYWNvbiYmb2Muc2VuZEJlYWNvbihhKX1jYXRjaChjKXtoYihcIlRBR0dJTkdcIiwxNSl9Ynx8QWMoYSl9LEpjPWZ1bmN0aW9uKGEsYil7dHJ5e3JldHVybiBvYy5zZW5kQmVhY29uKGEsXG5iKX1jYXRjaChjKXtoYihcIlRBR0dJTkdcIiwxNSl9cmV0dXJuITF9LEtjPXtjYWNoZTpcIm5vLXN0b3JlXCIsY3JlZGVudGlhbHM6XCJpbmNsdWRlXCIsa2VlcGFsaXZlOiEwLG1ldGhvZDpcIlBPU1RcIixtb2RlOlwibm8tY29yc1wiLHJlZGlyZWN0OlwiZm9sbG93XCJ9LE1jPWZ1bmN0aW9uKGEsYixjKXtpZihMYygpKXt2YXIgZD1PYmplY3QuYXNzaWduKHt9LEtjKTtiJiYoZC5ib2R5PWIpO2MmJihjLmF0dHJpYnV0aW9uUmVwb3J0aW5nJiYoZC5hdHRyaWJ1dGlvblJlcG9ydGluZz1jLmF0dHJpYnV0aW9uUmVwb3J0aW5nKSxjLmJyb3dzaW5nVG9waWNzJiYoZC5icm93c2luZ1RvcGljcz1jLmJyb3dzaW5nVG9waWNzKSk7dHJ5e3ZhciBlPUQuZmV0Y2goYSxkKTtlJiZlLmNhdGNoKG5iKTtyZXR1cm4hMH1jYXRjaChmKXt9fWlmKGMmJmMubm9GYWxsYmFjaylyZXR1cm4hMTtpZihiKXJldHVybiBKYyhhLGIpO0ljKGEpO3JldHVybiEwfSxMYz1mdW5jdGlvbigpe3JldHVybiB0eXBlb2YgRC5mZXRjaD09PVxuXCJmdW5jdGlvblwifSxOYz1mdW5jdGlvbihhLGIpe3ZhciBjPWFbYl07YyYmdHlwZW9mIGMuYW5pbVZhbD09PVwic3RyaW5nXCImJihjPWMuYW5pbVZhbCk7cmV0dXJuIGN9LE9jPWZ1bmN0aW9uKCl7dmFyIGE9RC5wZXJmb3JtYW5jZTtpZihhJiZvYihhLm5vdykpcmV0dXJuIGEubm93KCl9LFBjPWZ1bmN0aW9uKCl7cmV0dXJuIEQucGVyZm9ybWFuY2V8fHZvaWQgMH07ZnVuY3Rpb24gUWMoYSxiKXtyZXR1cm4gdGhpcy5ldmFsdWF0ZShhKSYmdGhpcy5ldmFsdWF0ZShiKX1mdW5jdGlvbiBSYyhhLGIpe3JldHVybiB0aGlzLmV2YWx1YXRlKGEpPT09dGhpcy5ldmFsdWF0ZShiKX1mdW5jdGlvbiBTYyhhLGIpe3JldHVybiB0aGlzLmV2YWx1YXRlKGEpfHx0aGlzLmV2YWx1YXRlKGIpfWZ1bmN0aW9uIFRjKGEsYil7YT10aGlzLmV2YWx1YXRlKGEpO2I9dGhpcy5ldmFsdWF0ZShiKTtyZXR1cm4gU3RyaW5nKGEpLmluZGV4T2YoU3RyaW5nKGIpKT4tMX1mdW5jdGlvbiBVYyhhLGIpe3ZhciBjPVN0cmluZyh0aGlzLmV2YWx1YXRlKGEpKSxkPVN0cmluZyh0aGlzLmV2YWx1YXRlKGIpKTtyZXR1cm4gYy5zdWJzdHJpbmcoMCxkLmxlbmd0aCk9PT1kfVxuZnVuY3Rpb24gVmMoYSxiKXthPXRoaXMuZXZhbHVhdGUoYSk7Yj10aGlzLmV2YWx1YXRlKGIpO3N3aXRjaChhKXtjYXNlIFwicGFnZUxvY2F0aW9uXCI6dmFyIGM9RC5sb2NhdGlvbi5ocmVmO2IgaW5zdGFuY2VvZiBZYSYmYi5nZXQoXCJzdHJpcFByb3RvY29sXCIpJiYoYz1jLnJlcGxhY2UoL15odHRwcz86XFwvXFwvLyxcIlwiKSk7cmV0dXJuIGN9fTt2YXIgV2M9ZnVuY3Rpb24oYSxiKXtNYS5jYWxsKHRoaXMpO3RoaXMuT2o9YTt0aGlzLmtoPWJ9O3lhKFdjLE1hKTtiYT1XYy5wcm90b3R5cGU7YmEudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5Pan07YmEuZ2V0TmFtZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLk9qfTtiYS5OYj1mdW5jdGlvbigpe3JldHVybiBuZXcgV2EoTmEodGhpcywxKSl9O2JhLmludm9rZT1mdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5raC5hcHBseShuZXcgWGModGhpcyxhKSxBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsMSkpfTtiYS5mYj1mdW5jdGlvbihhKXt0cnl7cmV0dXJuIHRoaXMuaW52b2tlLmFwcGx5KHRoaXMsQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLDApKX1jYXRjaChiKXt9fTt2YXIgWGM9ZnVuY3Rpb24oYSxiKXt0aGlzLmtoPWE7dGhpcy5GPWJ9O1xuWGMucHJvdG90eXBlLmV2YWx1YXRlPWZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMuRjtyZXR1cm4gQXJyYXkuaXNBcnJheShhKT9LYShiLGEpOmF9O1hjLnByb3RvdHlwZS5nZXROYW1lPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMua2guZ2V0TmFtZSgpfTtYYy5wcm90b3R5cGUucmQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5GLnJkKCl9O3ZhciBZYz1mdW5jdGlvbigpe3RoaXMubWFwPW5ldyBNYXB9O1ljLnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24oYSxiKXt0aGlzLm1hcC5zZXQoYSxiKX07WWMucHJvdG90eXBlLmdldD1mdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5tYXAuZ2V0KGEpfTt2YXIgWmM9ZnVuY3Rpb24oKXt0aGlzLmtleXM9W107dGhpcy52YWx1ZXM9W119O1pjLnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24oYSxiKXt0aGlzLmtleXMucHVzaChhKTt0aGlzLnZhbHVlcy5wdXNoKGIpfTtaYy5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMua2V5cy5pbmRleE9mKGEpO2lmKGI+LTEpcmV0dXJuIHRoaXMudmFsdWVzW2JdfTtmdW5jdGlvbiAkYygpe3RyeXtyZXR1cm4gTWFwP25ldyBZYzpuZXcgWmN9Y2F0Y2goYSl7cmV0dXJuIG5ldyBaY319O3ZhciBhZD1mdW5jdGlvbihhKXtpZihhIGluc3RhbmNlb2YgYWQpcmV0dXJuIGE7aWYoVWEoYSkpdGhyb3cgRXJyb3IoXCJUeXBlIG9mIGdpdmVuIHZhbHVlIGhhcyBhbiBlcXVpdmFsZW50IFBpeGllIHR5cGUuXCIpO3RoaXMudmFsdWU9YX07YWQucHJvdG90eXBlLmdldFZhbHVlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudmFsdWV9O2FkLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiBTdHJpbmcodGhpcy52YWx1ZSl9O3ZhciBjZD1mdW5jdGlvbihhKXtNYS5jYWxsKHRoaXMpO3RoaXMucHJvbWlzZT1hO3RoaXMuc2V0KFwidGhlblwiLGJkKHRoaXMpKTt0aGlzLnNldChcImNhdGNoXCIsYmQodGhpcywhMCkpO3RoaXMuc2V0KFwiZmluYWxseVwiLGJkKHRoaXMsITEsITApKX07eWEoY2QsWWEpO3ZhciBiZD1mdW5jdGlvbihhLGIsYyl7Yj1iPT09dm9pZCAwPyExOmI7Yz1jPT09dm9pZCAwPyExOmM7cmV0dXJuIG5ldyBXYyhcIlwiLGZ1bmN0aW9uKGQsZSl7YiYmKGU9ZCxkPXZvaWQgMCk7YyYmKGU9ZCk7ZCBpbnN0YW5jZW9mIFdjfHwoZD12b2lkIDApO2UgaW5zdGFuY2VvZiBXY3x8KGU9dm9pZCAwKTt2YXIgZj1JYSh0aGlzLkYpLGc9ZnVuY3Rpb24obSl7cmV0dXJuIGZ1bmN0aW9uKG4pe3JldHVybiBjPyhtLmludm9rZShmKSxhLnByb21pc2UpOm0uaW52b2tlKGYsbil9fSxrPWEucHJvbWlzZS50aGVuKGQmJmcoZCksZSYmZyhlKSk7cmV0dXJuIG5ldyBjZChrKX0pfTtmdW5jdGlvbiBKKGEsYixjKXt2YXIgZD0kYygpLGU9ZnVuY3Rpb24oZyxrKXtmb3IodmFyIG09TmEoZywxKSxuPTA7bjxtLmxlbmd0aDtuKyspa1ttW25dXT1mKGcuZ2V0KG1bbl0pKX0sZj1mdW5jdGlvbihnKXt2YXIgaz1kLmdldChnKTtpZihrKXJldHVybiBrO2lmKGcgaW5zdGFuY2VvZiBXYSl7dmFyIG09W107ZC5zZXQoZyxtKTtmb3IodmFyIG49Zy5OYigpLHA9MDtwPG4ubGVuZ3RoKCk7cCsrKW1bbi5nZXQocCldPWYoZy5nZXQobi5nZXQocCkpKTtyZXR1cm4gbX1pZihnIGluc3RhbmNlb2YgY2QpcmV0dXJuIGcucHJvbWlzZTtpZihnIGluc3RhbmNlb2YgWWEpe3ZhciBxPXt9O2Quc2V0KGcscSk7ZShnLHEpO3JldHVybiBxfWlmKGcgaW5zdGFuY2VvZiBXYyl7dmFyIHI9ZnVuY3Rpb24oKXtmb3IodmFyIHU9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLDApLHY9MDt2PHUubGVuZ3RoO3YrKyl1W3ZdPWRkKHVbdl0sYixjKTt2YXIgdz1uZXcgR2EoYj9iLnJkKCk6XG5uZXcgRmEpO2ImJih3Lmo9Yi5qKTtyZXR1cm4gZihnLmludm9rZS5hcHBseShnLFt3XS5jb25jYXQodSkpKX07ZC5zZXQoZyxyKTtlKGcscik7cmV0dXJuIHJ9dmFyIHQ9ITE7c3dpdGNoKGMpe2Nhc2UgMTp0PSEwO2JyZWFrO2Nhc2UgMjp0PSExO2JyZWFrO2Nhc2UgMzp0PSExO2JyZWFrO2RlZmF1bHQ6fWlmKGcgaW5zdGFuY2VvZiBhZCYmdClyZXR1cm4gZy5nZXRWYWx1ZSgpO3N3aXRjaCh0eXBlb2YgZyl7Y2FzZSBcImJvb2xlYW5cIjpjYXNlIFwibnVtYmVyXCI6Y2FzZSBcInN0cmluZ1wiOmNhc2UgXCJ1bmRlZmluZWRcIjpyZXR1cm4gZztjYXNlIFwib2JqZWN0XCI6aWYoZz09PW51bGwpcmV0dXJuIG51bGx9fTtyZXR1cm4gZihhKX1cbmZ1bmN0aW9uIGRkKGEsYixjKXt2YXIgZD0kYygpLGU9ZnVuY3Rpb24oZyxrKXtmb3IodmFyIG0gaW4gZylnLmhhc093blByb3BlcnR5KG0pJiZrLnNldChtLGYoZ1ttXSkpfSxmPWZ1bmN0aW9uKGcpe3ZhciBrPWQuZ2V0KGcpO2lmKGspcmV0dXJuIGs7aWYoQXJyYXkuaXNBcnJheShnKXx8dmIoZykpe3ZhciBtPW5ldyBXYShbXSk7ZC5zZXQoZyxtKTtmb3IodmFyIG4gaW4gZylnLmhhc093blByb3BlcnR5KG4pJiZtLnNldChuLGYoZ1tuXSkpO3JldHVybiBtfWlmKFNhKGcpKXt2YXIgcD1uZXcgWWE7ZC5zZXQoZyxwKTtlKGcscCk7cmV0dXJuIHB9aWYodHlwZW9mIGc9PT1cImZ1bmN0aW9uXCIpe3ZhciBxPW5ldyBXYyhcIlwiLGZ1bmN0aW9uKCl7Zm9yKHZhciB4PUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywwKSx5PTA7eTx4Lmxlbmd0aDt5KyspeFt5XT1KKHRoaXMuZXZhbHVhdGUoeFt5XSksYixjKTtyZXR1cm4gZigoMCx0aGlzLkYuSCkoZyxnLHgpKX0pO2Quc2V0KGcsXG5xKTtlKGcscSk7cmV0dXJuIHF9dmFyIHY9dHlwZW9mIGc7aWYoZz09PW51bGx8fHY9PT1cInN0cmluZ1wifHx2PT09XCJudW1iZXJcInx8dj09PVwiYm9vbGVhblwiKXJldHVybiBnO3ZhciB3PSExO3N3aXRjaChjKXtjYXNlIDE6dz1cbiEwO2JyZWFrO2Nhc2UgMjp3PSExO2JyZWFrO2RlZmF1bHQ6fWlmKGchPT12b2lkIDAmJncpcmV0dXJuIG5ldyBhZChnKX07cmV0dXJuIGYoYSl9O2Z1bmN0aW9uIGVkKCl7dmFyIGE9ITE7cmV0dXJuIGF9O3ZhciBmZD17c3VwcG9ydGVkTWV0aG9kczpcImNvbmNhdCBldmVyeSBmaWx0ZXIgZm9yRWFjaCBoYXNPd25Qcm9wZXJ0eSBpbmRleE9mIGpvaW4gbGFzdEluZGV4T2YgbWFwIHBvcCBwdXNoIHJlZHVjZSByZWR1Y2VSaWdodCByZXZlcnNlIHNoaWZ0IHNsaWNlIHNvbWUgc29ydCBzcGxpY2UgdW5zaGlmdCB0b1N0cmluZ1wiLnNwbGl0KFwiIFwiKSxjb25jYXQ6ZnVuY3Rpb24oYSl7Zm9yKHZhciBiPVtdLGM9MDtjPHRoaXMubGVuZ3RoKCk7YysrKWIucHVzaCh0aGlzLmdldChjKSk7Zm9yKHZhciBkPTE7ZDxhcmd1bWVudHMubGVuZ3RoO2QrKylpZihhcmd1bWVudHNbZF1pbnN0YW5jZW9mIFdhKWZvcih2YXIgZT1hcmd1bWVudHNbZF0sZj0wO2Y8ZS5sZW5ndGgoKTtmKyspYi5wdXNoKGUuZ2V0KGYpKTtlbHNlIGIucHVzaChhcmd1bWVudHNbZF0pO3JldHVybiBuZXcgV2EoYil9LGV2ZXJ5OmZ1bmN0aW9uKGEsYil7Zm9yKHZhciBjPXRoaXMubGVuZ3RoKCksZD0wO2Q8dGhpcy5sZW5ndGgoKSYmXG5kPGM7ZCsrKWlmKHRoaXMuaGFzKGQpJiYhYi5pbnZva2UoYSx0aGlzLmdldChkKSxkLHRoaXMpKXJldHVybiExO3JldHVybiEwfSxmaWx0ZXI6ZnVuY3Rpb24oYSxiKXtmb3IodmFyIGM9dGhpcy5sZW5ndGgoKSxkPVtdLGU9MDtlPHRoaXMubGVuZ3RoKCkmJmU8YztlKyspdGhpcy5oYXMoZSkmJmIuaW52b2tlKGEsdGhpcy5nZXQoZSksZSx0aGlzKSYmZC5wdXNoKHRoaXMuZ2V0KGUpKTtyZXR1cm4gbmV3IFdhKGQpfSxmb3JFYWNoOmZ1bmN0aW9uKGEsYil7Zm9yKHZhciBjPXRoaXMubGVuZ3RoKCksZD0wO2Q8dGhpcy5sZW5ndGgoKSYmZDxjO2QrKyl0aGlzLmhhcyhkKSYmYi5pbnZva2UoYSx0aGlzLmdldChkKSxkLHRoaXMpfSxoYXNPd25Qcm9wZXJ0eTpmdW5jdGlvbihhLGIpe3JldHVybiB0aGlzLmhhcyhiKX0saW5kZXhPZjpmdW5jdGlvbihhLGIsYyl7dmFyIGQ9dGhpcy5sZW5ndGgoKSxlPWM9PT12b2lkIDA/MDpOdW1iZXIoYyk7ZTwwJiYoZT1NYXRoLm1heChkK2UsMCkpO2Zvcih2YXIgZj1cbmU7ZjxkO2YrKylpZih0aGlzLmhhcyhmKSYmdGhpcy5nZXQoZik9PT1iKXJldHVybiBmO3JldHVybi0xfSxqb2luOmZ1bmN0aW9uKGEsYil7Zm9yKHZhciBjPVtdLGQ9MDtkPHRoaXMubGVuZ3RoKCk7ZCsrKWMucHVzaCh0aGlzLmdldChkKSk7cmV0dXJuIGMuam9pbihiKX0sbGFzdEluZGV4T2Y6ZnVuY3Rpb24oYSxiLGMpe3ZhciBkPXRoaXMubGVuZ3RoKCksZT1kLTE7YyE9PXZvaWQgMCYmKGU9YzwwP2QrYzpNYXRoLm1pbihjLGUpKTtmb3IodmFyIGY9ZTtmPj0wO2YtLSlpZih0aGlzLmhhcyhmKSYmdGhpcy5nZXQoZik9PT1iKXJldHVybiBmO3JldHVybi0xfSxtYXA6ZnVuY3Rpb24oYSxiKXtmb3IodmFyIGM9dGhpcy5sZW5ndGgoKSxkPVtdLGU9MDtlPHRoaXMubGVuZ3RoKCkmJmU8YztlKyspdGhpcy5oYXMoZSkmJihkW2VdPWIuaW52b2tlKGEsdGhpcy5nZXQoZSksZSx0aGlzKSk7cmV0dXJuIG5ldyBXYShkKX0scG9wOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucG9wKCl9LHB1c2g6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMucHVzaC5hcHBseSh0aGlzLFxuQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLDEpKX0scmVkdWNlOmZ1bmN0aW9uKGEsYixjKXt2YXIgZD10aGlzLmxlbmd0aCgpLGUsZj0wO2lmKGMhPT12b2lkIDApZT1jO2Vsc2V7aWYoZD09PTApdGhyb3cgRXJyb3IoXCJUeXBlRXJyb3I6IFJlZHVjZSBvbiBMaXN0IHdpdGggbm8gZWxlbWVudHMuXCIpO2Zvcih2YXIgZz0wO2c8ZDtnKyspaWYodGhpcy5oYXMoZykpe2U9dGhpcy5nZXQoZyk7Zj1nKzE7YnJlYWt9aWYoZz09PWQpdGhyb3cgRXJyb3IoXCJUeXBlRXJyb3I6IFJlZHVjZSBvbiBMaXN0IHdpdGggbm8gZWxlbWVudHMuXCIpO31mb3IodmFyIGs9ZjtrPGQ7aysrKXRoaXMuaGFzKGspJiYoZT1iLmludm9rZShhLGUsdGhpcy5nZXQoayksayx0aGlzKSk7cmV0dXJuIGV9LHJlZHVjZVJpZ2h0OmZ1bmN0aW9uKGEsYixjKXt2YXIgZD10aGlzLmxlbmd0aCgpLGUsZj1kLTE7aWYoYyE9PXZvaWQgMCllPWM7ZWxzZXtpZihkPT09MCl0aHJvdyBFcnJvcihcIlR5cGVFcnJvcjogUmVkdWNlUmlnaHQgb24gTGlzdCB3aXRoIG5vIGVsZW1lbnRzLlwiKTtcbmZvcih2YXIgZz0xO2c8PWQ7ZysrKWlmKHRoaXMuaGFzKGQtZykpe2U9dGhpcy5nZXQoZC1nKTtmPWQtKGcrMSk7YnJlYWt9aWYoZz5kKXRocm93IEVycm9yKFwiVHlwZUVycm9yOiBSZWR1Y2VSaWdodCBvbiBMaXN0IHdpdGggbm8gZWxlbWVudHMuXCIpO31mb3IodmFyIGs9ZjtrPj0wO2stLSl0aGlzLmhhcyhrKSYmKGU9Yi5pbnZva2UoYSxlLHRoaXMuZ2V0KGspLGssdGhpcykpO3JldHVybiBlfSxyZXZlcnNlOmZ1bmN0aW9uKCl7Zm9yKHZhciBhPVhhKHRoaXMpLGI9YS5sZW5ndGgtMSxjPTA7Yj49MDtiLS0sYysrKWEuaGFzT3duUHJvcGVydHkoYik/dGhpcy5zZXQoYyxhW2JdKTp0aGlzLnJlbW92ZShjKTtyZXR1cm4gdGhpc30sc2hpZnQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zaGlmdCgpfSxzbGljZTpmdW5jdGlvbihhLGIsYyl7dmFyIGQ9dGhpcy5sZW5ndGgoKTtiPT09dm9pZCAwJiYoYj0wKTtiPWI8MD9NYXRoLm1heChkK2IsMCk6TWF0aC5taW4oYixkKTtjPWM9PT12b2lkIDA/XG5kOmM8MD9NYXRoLm1heChkK2MsMCk6TWF0aC5taW4oYyxkKTtjPU1hdGgubWF4KGIsYyk7Zm9yKHZhciBlPVtdLGY9YjtmPGM7ZisrKWUucHVzaCh0aGlzLmdldChmKSk7cmV0dXJuIG5ldyBXYShlKX0sc29tZTpmdW5jdGlvbihhLGIpe2Zvcih2YXIgYz10aGlzLmxlbmd0aCgpLGQ9MDtkPHRoaXMubGVuZ3RoKCkmJmQ8YztkKyspaWYodGhpcy5oYXMoZCkmJmIuaW52b2tlKGEsdGhpcy5nZXQoZCksZCx0aGlzKSlyZXR1cm4hMDtyZXR1cm4hMX0sc29ydDpmdW5jdGlvbihhLGIpe3ZhciBjPVhhKHRoaXMpO2I9PT12b2lkIDA/Yy5zb3J0KCk6Yy5zb3J0KGZ1bmN0aW9uKGUsZil7cmV0dXJuIE51bWJlcihiLmludm9rZShhLGUsZikpfSk7Zm9yKHZhciBkPTA7ZDxjLmxlbmd0aDtkKyspYy5oYXNPd25Qcm9wZXJ0eShkKT90aGlzLnNldChkLGNbZF0pOnRoaXMucmVtb3ZlKGQpO3JldHVybiB0aGlzfSxzcGxpY2U6ZnVuY3Rpb24oYSxiLGMpe3JldHVybiB0aGlzLnNwbGljZS5hcHBseSh0aGlzLFxuQXJyYXkucHJvdG90eXBlLnNwbGljZS5jYWxsKGFyZ3VtZW50cywxLGFyZ3VtZW50cy5sZW5ndGgtMSkpfSx0b1N0cmluZzpmdW5jdGlvbigpe3JldHVybiB0aGlzLnRvU3RyaW5nKCl9LHVuc2hpZnQ6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMudW5zaGlmdC5hcHBseSh0aGlzLEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywxKSl9fTt2YXIgZ2Q9ZnVuY3Rpb24oYSl7dmFyIGI7Yj1FcnJvci5jYWxsKHRoaXMsYSk7dGhpcy5tZXNzYWdlPWIubWVzc2FnZTtcInN0YWNrXCJpbiBiJiYodGhpcy5zdGFjaz1iLnN0YWNrKX07eWEoZ2QsRXJyb3IpO3ZhciBoZD17Y2hhckF0OjEsY29uY2F0OjEsaW5kZXhPZjoxLGxhc3RJbmRleE9mOjEsbWF0Y2g6MSxyZXBsYWNlOjEsc2VhcmNoOjEsc2xpY2U6MSxzcGxpdDoxLHN1YnN0cmluZzoxLHRvTG93ZXJDYXNlOjEsdG9Mb2NhbGVMb3dlckNhc2U6MSx0b1N0cmluZzoxLHRvVXBwZXJDYXNlOjEsdG9Mb2NhbGVVcHBlckNhc2U6MSx0cmltOjF9LGlkPW5ldyBDYShcImJyZWFrXCIpLGpkPW5ldyBDYShcImNvbnRpbnVlXCIpO2Z1bmN0aW9uIGtkKGEsYil7cmV0dXJuIHRoaXMuZXZhbHVhdGUoYSkrdGhpcy5ldmFsdWF0ZShiKX1mdW5jdGlvbiBsZChhLGIpe3JldHVybiB0aGlzLmV2YWx1YXRlKGEpJiZ0aGlzLmV2YWx1YXRlKGIpfVxuZnVuY3Rpb24gbWQoYSxiLGMpe2E9dGhpcy5ldmFsdWF0ZShhKTtiPXRoaXMuZXZhbHVhdGUoYik7Yz10aGlzLmV2YWx1YXRlKGMpO2lmKCEoYyBpbnN0YW5jZW9mIFdhKSl0aHJvdyBFcnJvcihcIkVycm9yOiBOb24tTGlzdCBhcmd1bWVudCBnaXZlbiB0byBBcHBseSBpbnN0cnVjdGlvbi5cIik7aWYoYT09PW51bGx8fGE9PT12b2lkIDApe3ZhciBkPVwiVHlwZUVycm9yOiBDYW4ndCByZWFkIHByb3BlcnR5IFwiK2IrXCIgb2YgXCIrYStcIi5cIjtpZihlZCgpKXRocm93IG5ldyBnZChkKTt0aHJvdyBFcnJvcihkKTt9dmFyIGU9dHlwZW9mIGE9PT1cIm51bWJlclwiO2lmKHR5cGVvZiBhPT09XCJib29sZWFuXCJ8fGUpe2lmKGI9PT1cInRvU3RyaW5nXCIpe2lmKGUmJmMubGVuZ3RoKCkpe3ZhciBmPUooYy5nZXQoMCkpO3RyeXtyZXR1cm4gYS50b1N0cmluZyhmKX1jYXRjaCh5KXt9fXJldHVybiBhLnRvU3RyaW5nKCl9dmFyIGc9XCJUeXBlRXJyb3I6IFwiK2ErXCIuXCIrYitcIiBpcyBub3QgYSBmdW5jdGlvbi5cIjtcbmlmKGVkKCkpdGhyb3cgbmV3IGdkKGcpO3Rocm93IEVycm9yKGcpO31pZih0eXBlb2YgYT09PVwic3RyaW5nXCIpe2lmKGhkLmhhc093blByb3BlcnR5KGIpKXt2YXIgaz0yO2s9MTt2YXIgbT1KKGMsdm9pZCAwLGspO3JldHVybiBkZChhW2JdLmFwcGx5KGEsbSksdGhpcy5GKX12YXIgbj1cIlR5cGVFcnJvcjogXCIrYitcIiBpcyBub3QgYSBmdW5jdGlvblwiO2lmKGVkKCkpdGhyb3cgbmV3IGdkKG4pO3Rocm93IEVycm9yKG4pO31pZihhIGluc3RhbmNlb2YgV2Epe2lmKGEuaGFzKGIpKXt2YXIgcD1hLmdldChiKTtpZihwIGluc3RhbmNlb2YgV2Mpe3ZhciBxPVhhKGMpO3EudW5zaGlmdCh0aGlzLkYpO3JldHVybiBwLmludm9rZS5hcHBseShwLHEpfXZhciByPVxuXCJUeXBlRXJyb3I6IFwiK2IrXCIgaXMgbm90IGEgZnVuY3Rpb25cIjtpZihlZCgpKXRocm93IG5ldyBnZChyKTt0aHJvdyBFcnJvcihyKTt9aWYoZmQuc3VwcG9ydGVkTWV0aG9kcy5pbmRleE9mKGIpPj0wKXt2YXIgdD1YYShjKTt0LnVuc2hpZnQodGhpcy5GKTtyZXR1cm4gZmRbYl0uYXBwbHkoYSx0KX19aWYoYSBpbnN0YW5jZW9mIFdjfHxhIGluc3RhbmNlb2YgWWEpe2lmKGEuaGFzKGIpKXt2YXIgdT1hLmdldChiKTtpZih1IGluc3RhbmNlb2YgV2Mpe3ZhciB2PVhhKGMpO3YudW5zaGlmdCh0aGlzLkYpO3JldHVybiB1Lmludm9rZS5hcHBseSh1LHYpfXZhciB3PVwiVHlwZUVycm9yOiBcIitiK1wiIGlzIG5vdCBhIGZ1bmN0aW9uXCI7aWYoZWQoKSl0aHJvdyBuZXcgZ2Qodyk7dGhyb3cgRXJyb3Iodyk7fWlmKGI9PT1cInRvU3RyaW5nXCIpcmV0dXJuIGEgaW5zdGFuY2VvZiBXYz9hLmdldE5hbWUoKTphLnRvU3RyaW5nKCk7aWYoYj09PVwiaGFzT3duUHJvcGVydHlcIilyZXR1cm4gYS5oYXMuYXBwbHkoYSxcblhhKGMpKX1pZihhIGluc3RhbmNlb2YgYWQmJmI9PT1cInRvU3RyaW5nXCIpcmV0dXJuIGEudG9TdHJpbmcoKTt2YXIgeD1cIlR5cGVFcnJvcjogT2JqZWN0IGhhcyBubyAnXCIrYitcIicgcHJvcGVydHkuXCI7aWYoZWQoKSl0aHJvdyBuZXcgZ2QoeCk7dGhyb3cgRXJyb3IoeCk7fWZ1bmN0aW9uIG5kKGEsYil7YT10aGlzLmV2YWx1YXRlKGEpO2lmKHR5cGVvZiBhIT09XCJzdHJpbmdcIil0aHJvdyBFcnJvcihcIkludmFsaWQga2V5IG5hbWUgZ2l2ZW4gZm9yIGFzc2lnbm1lbnQuXCIpO3ZhciBjPXRoaXMuRjtpZighYy5oYXMoYSkpdGhyb3cgRXJyb3IoXCJBdHRlbXB0aW5nIHRvIGFzc2lnbiB0byB1bmRlZmluZWQgdmFsdWUgXCIrYik7dmFyIGQ9dGhpcy5ldmFsdWF0ZShiKTtjLnNldChhLGQpO3JldHVybiBkfWZ1bmN0aW9uIG9kKCl7dmFyIGE9SWEodGhpcy5GKSxiPUphKGEsQXJyYXkucHJvdG90eXBlLnNsaWNlLmFwcGx5KGFyZ3VtZW50cykpO2lmKGIgaW5zdGFuY2VvZiBDYSlyZXR1cm4gYn1cbmZ1bmN0aW9uIHBkKCl7cmV0dXJuIGlkfWZ1bmN0aW9uIHFkKGEpe2Zvcih2YXIgYj10aGlzLmV2YWx1YXRlKGEpLGM9MDtjPGIubGVuZ3RoO2MrKyl7dmFyIGQ9dGhpcy5ldmFsdWF0ZShiW2NdKTtpZihkIGluc3RhbmNlb2YgQ2EpcmV0dXJuIGR9fWZ1bmN0aW9uIHJkKCl7Zm9yKHZhciBhPXRoaXMuRixiPTA7Yjxhcmd1bWVudHMubGVuZ3RoLTE7Yis9Mil7dmFyIGM9YXJndW1lbnRzW2JdO2lmKHR5cGVvZiBjPT09XCJzdHJpbmdcIil7dmFyIGQ9dGhpcy5ldmFsdWF0ZShhcmd1bWVudHNbYisxXSk7SGEoYSxjLGQsITApfX19ZnVuY3Rpb24gc2QoKXtyZXR1cm4gamR9ZnVuY3Rpb24gdmQoYSxiKXtyZXR1cm4gbmV3IENhKGEsdGhpcy5ldmFsdWF0ZShiKSl9XG5mdW5jdGlvbiB3ZChhLGIpe3ZhciBjPW5ldyBXYTtiPXRoaXMuZXZhbHVhdGUoYik7Zm9yKHZhciBkPTA7ZDxiLmxlbmd0aDtkKyspYy5wdXNoKGJbZF0pO3ZhciBlPVs1MSxhLGNdLmNvbmNhdChBcnJheS5wcm90b3R5cGUuc3BsaWNlLmNhbGwoYXJndW1lbnRzLDIsYXJndW1lbnRzLmxlbmd0aC0yKSk7dGhpcy5GLmFkZChhLHRoaXMuZXZhbHVhdGUoZSkpfWZ1bmN0aW9uIHhkKGEsYil7cmV0dXJuIHRoaXMuZXZhbHVhdGUoYSkvdGhpcy5ldmFsdWF0ZShiKX1mdW5jdGlvbiB5ZChhLGIpe2E9dGhpcy5ldmFsdWF0ZShhKTtiPXRoaXMuZXZhbHVhdGUoYik7dmFyIGM9YSBpbnN0YW5jZW9mIGFkLGQ9YiBpbnN0YW5jZW9mIGFkO3JldHVybiBjfHxkP2MmJmQ/YS5nZXRWYWx1ZSgpPT09Yi5nZXRWYWx1ZSgpOiExOmE9PWJ9ZnVuY3Rpb24gemQoKXtmb3IodmFyIGEsYj0wO2I8YXJndW1lbnRzLmxlbmd0aDtiKyspYT10aGlzLmV2YWx1YXRlKGFyZ3VtZW50c1tiXSk7cmV0dXJuIGF9XG5mdW5jdGlvbiBBZChhLGIsYyxkKXtmb3IodmFyIGU9MDtlPGIoKTtlKyspe3ZhciBmPWEoYyhlKSksZz1KYShmLGQpO2lmKGcgaW5zdGFuY2VvZiBDYSl7aWYoZy50eXBlPT09XCJicmVha1wiKWJyZWFrO2lmKGcudHlwZT09PVwicmV0dXJuXCIpcmV0dXJuIGd9fX1mdW5jdGlvbiBCZChhLGIsYyl7aWYodHlwZW9mIGI9PT1cInN0cmluZ1wiKXJldHVybiBBZChhLGZ1bmN0aW9uKCl7cmV0dXJuIGIubGVuZ3RofSxmdW5jdGlvbihmKXtyZXR1cm4gZn0sYyk7aWYoYiBpbnN0YW5jZW9mIFlhfHxiIGluc3RhbmNlb2YgV2F8fGIgaW5zdGFuY2VvZiBXYyl7dmFyIGQ9Yi5OYigpLGU9ZC5sZW5ndGgoKTtyZXR1cm4gQWQoYSxmdW5jdGlvbigpe3JldHVybiBlfSxmdW5jdGlvbihmKXtyZXR1cm4gZC5nZXQoZil9LGMpfX1cbmZ1bmN0aW9uIENkKGEsYixjKXthPXRoaXMuZXZhbHVhdGUoYSk7Yj10aGlzLmV2YWx1YXRlKGIpO2M9dGhpcy5ldmFsdWF0ZShjKTt2YXIgZD10aGlzLkY7cmV0dXJuIEJkKGZ1bmN0aW9uKGUpe2Quc2V0KGEsZSk7cmV0dXJuIGR9LGIsYyl9ZnVuY3Rpb24gRGQoYSxiLGMpe2E9dGhpcy5ldmFsdWF0ZShhKTtiPXRoaXMuZXZhbHVhdGUoYik7Yz10aGlzLmV2YWx1YXRlKGMpO3ZhciBkPXRoaXMuRjtyZXR1cm4gQmQoZnVuY3Rpb24oZSl7dmFyIGY9SWEoZCk7SGEoZixhLGUsITApO3JldHVybiBmfSxiLGMpfWZ1bmN0aW9uIEVkKGEsYixjKXthPXRoaXMuZXZhbHVhdGUoYSk7Yj10aGlzLmV2YWx1YXRlKGIpO2M9dGhpcy5ldmFsdWF0ZShjKTt2YXIgZD10aGlzLkY7cmV0dXJuIEJkKGZ1bmN0aW9uKGUpe3ZhciBmPUlhKGQpO2YuYWRkKGEsZSk7cmV0dXJuIGZ9LGIsYyl9XG5mdW5jdGlvbiBGZChhLGIsYyl7YT10aGlzLmV2YWx1YXRlKGEpO2I9dGhpcy5ldmFsdWF0ZShiKTtjPXRoaXMuZXZhbHVhdGUoYyk7dmFyIGQ9dGhpcy5GO3JldHVybiBHZChmdW5jdGlvbihlKXtkLnNldChhLGUpO3JldHVybiBkfSxiLGMpfWZ1bmN0aW9uIEhkKGEsYixjKXthPXRoaXMuZXZhbHVhdGUoYSk7Yj10aGlzLmV2YWx1YXRlKGIpO2M9dGhpcy5ldmFsdWF0ZShjKTt2YXIgZD10aGlzLkY7cmV0dXJuIEdkKGZ1bmN0aW9uKGUpe3ZhciBmPUlhKGQpO0hhKGYsYSxlLCEwKTtyZXR1cm4gZn0sYixjKX1mdW5jdGlvbiBJZChhLGIsYyl7YT10aGlzLmV2YWx1YXRlKGEpO2I9dGhpcy5ldmFsdWF0ZShiKTtjPXRoaXMuZXZhbHVhdGUoYyk7dmFyIGQ9dGhpcy5GO3JldHVybiBHZChmdW5jdGlvbihlKXt2YXIgZj1JYShkKTtmLmFkZChhLGUpO3JldHVybiBmfSxiLGMpfVxuZnVuY3Rpb24gR2QoYSxiLGMpe2lmKHR5cGVvZiBiPT09XCJzdHJpbmdcIilyZXR1cm4gQWQoYSxmdW5jdGlvbigpe3JldHVybiBiLmxlbmd0aH0sZnVuY3Rpb24oZCl7cmV0dXJuIGJbZF19LGMpO2lmKGIgaW5zdGFuY2VvZiBXYSlyZXR1cm4gQWQoYSxmdW5jdGlvbigpe3JldHVybiBiLmxlbmd0aCgpfSxmdW5jdGlvbihkKXtyZXR1cm4gYi5nZXQoZCl9LGMpO2lmKGVkKCkpdGhyb3cgbmV3IGdkKFwiVGhlIHZhbHVlIGlzIG5vdCBpdGVyYWJsZS5cIik7dGhyb3cgbmV3IFR5cGVFcnJvcihcIlRoZSB2YWx1ZSBpcyBub3QgaXRlcmFibGUuXCIpO31cbmZ1bmN0aW9uIEpkKGEsYixjLGQpe2Z1bmN0aW9uIGUocCxxKXtmb3IodmFyIHI9MDtyPGYubGVuZ3RoKCk7cisrKXt2YXIgdD1mLmdldChyKTtxLmFkZCh0LHAuZ2V0KHQpKX19dmFyIGY9dGhpcy5ldmFsdWF0ZShhKTtpZighKGYgaW5zdGFuY2VvZiBXYSkpdGhyb3cgRXJyb3IoXCJUeXBlRXJyb3I6IE5vbi1MaXN0IGFyZ3VtZW50IGdpdmVuIHRvIEZvckxldCBpbnN0cnVjdGlvbi5cIik7dmFyIGc9dGhpcy5GO2Q9dGhpcy5ldmFsdWF0ZShkKTt2YXIgaz1JYShnKTtmb3IoZShnLGspO0thKGssYik7KXt2YXIgbT1KYShrLGQpO2lmKG0gaW5zdGFuY2VvZiBDYSl7aWYobS50eXBlPT09XCJicmVha1wiKWJyZWFrO2lmKG0udHlwZT09PVwicmV0dXJuXCIpcmV0dXJuIG19dmFyIG49SWEoZyk7ZShrLG4pO0thKG4sYyk7az1ufX1cbmZ1bmN0aW9uIEtkKGEsYil7dmFyIGM9dGhpcy5GLGQ9dGhpcy5ldmFsdWF0ZShiKTtpZighKGQgaW5zdGFuY2VvZiBXYSkpdGhyb3cgRXJyb3IoXCJFcnJvcjogbm9uLUxpc3QgdmFsdWUgZ2l2ZW4gZm9yIEZuIGFyZ3VtZW50IG5hbWVzLlwiKTt2YXIgZT1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsMik7cmV0dXJuIG5ldyBXYyhhLGZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKGYpe3ZhciBnPUlhKGMpO2cuaj09PXZvaWQgMCYmKGcuaj10aGlzLkYuaik7Zm9yKHZhciBrPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywwKSxtPTA7bTxrLmxlbmd0aDttKyspaWYoa1ttXT10aGlzLmV2YWx1YXRlKGtbbV0pLGtbbV1pbnN0YW5jZW9mIENhKXJldHVybiBrW21dO2Zvcih2YXIgbj1kLmdldChcImxlbmd0aFwiKSxwPTA7cDxuO3ArKylwPGsubGVuZ3RoP2cuYWRkKGQuZ2V0KHApLGtbcF0pOmcuYWRkKGQuZ2V0KHApLHZvaWQgMCk7Zy5hZGQoXCJhcmd1bWVudHNcIixcbm5ldyBXYShrKSk7dmFyIHE9SmEoZyxlKTtpZihxIGluc3RhbmNlb2YgQ2EpcmV0dXJuIHEudHlwZT09PVwicmV0dXJuXCI/cS5kYXRhOnF9fSgpKX1mdW5jdGlvbiBMZChhKXthPXRoaXMuZXZhbHVhdGUoYSk7dmFyIGI9dGhpcy5GO2lmKE1kJiYhYi5oYXMoYSkpdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKGErXCIgaXMgbm90IGRlZmluZWQuXCIpO3JldHVybiBiLmdldChhKX1cbmZ1bmN0aW9uIE5kKGEsYil7dmFyIGM7YT10aGlzLmV2YWx1YXRlKGEpO2I9dGhpcy5ldmFsdWF0ZShiKTtpZihhPT09dm9pZCAwfHxhPT09bnVsbCl7dmFyIGQ9XCJUeXBlRXJyb3I6IENhbm5vdCByZWFkIHByb3BlcnRpZXMgb2YgXCIrYStcIiAocmVhZGluZyAnXCIrYitcIicpXCI7aWYoZWQoKSl0aHJvdyBuZXcgZ2QoZCk7dGhyb3cgRXJyb3IoZCk7fWlmKGEgaW5zdGFuY2VvZiBZYXx8YSBpbnN0YW5jZW9mIFdhfHxhIGluc3RhbmNlb2YgV2MpYz1hLmdldChiKTtlbHNlIGlmKHR5cGVvZiBhPT09XCJzdHJpbmdcIiliPT09XCJsZW5ndGhcIj9jPWEubGVuZ3RoOlZhKGIpJiYoYz1hW2JdKTtlbHNlIGlmKGEgaW5zdGFuY2VvZiBhZClyZXR1cm47cmV0dXJuIGN9ZnVuY3Rpb24gT2QoYSxiKXtyZXR1cm4gdGhpcy5ldmFsdWF0ZShhKT50aGlzLmV2YWx1YXRlKGIpfWZ1bmN0aW9uIFBkKGEsYil7cmV0dXJuIHRoaXMuZXZhbHVhdGUoYSk+PXRoaXMuZXZhbHVhdGUoYil9XG5mdW5jdGlvbiBRZChhLGIpe2E9dGhpcy5ldmFsdWF0ZShhKTtiPXRoaXMuZXZhbHVhdGUoYik7YSBpbnN0YW5jZW9mIGFkJiYoYT1hLmdldFZhbHVlKCkpO2IgaW5zdGFuY2VvZiBhZCYmKGI9Yi5nZXRWYWx1ZSgpKTtyZXR1cm4gYT09PWJ9ZnVuY3Rpb24gUmQoYSxiKXtyZXR1cm4hUWQuY2FsbCh0aGlzLGEsYil9ZnVuY3Rpb24gU2QoYSxiLGMpe3ZhciBkPVtdO3RoaXMuZXZhbHVhdGUoYSk/ZD10aGlzLmV2YWx1YXRlKGIpOmMmJihkPXRoaXMuZXZhbHVhdGUoYykpO3ZhciBlPUphKHRoaXMuRixkKTtpZihlIGluc3RhbmNlb2YgQ2EpcmV0dXJuIGV9dmFyIE1kPSExO1xuZnVuY3Rpb24gVGQoYSxiKXtyZXR1cm4gdGhpcy5ldmFsdWF0ZShhKTx0aGlzLmV2YWx1YXRlKGIpfWZ1bmN0aW9uIFVkKGEsYil7cmV0dXJuIHRoaXMuZXZhbHVhdGUoYSk8PXRoaXMuZXZhbHVhdGUoYil9ZnVuY3Rpb24gVmQoKXtmb3IodmFyIGE9bmV3IFdhLGI9MDtiPGFyZ3VtZW50cy5sZW5ndGg7YisrKXt2YXIgYz10aGlzLmV2YWx1YXRlKGFyZ3VtZW50c1tiXSk7YS5wdXNoKGMpfXJldHVybiBhfWZ1bmN0aW9uIFdkKCl7Zm9yKHZhciBhPW5ldyBZYSxiPTA7Yjxhcmd1bWVudHMubGVuZ3RoLTE7Yis9Mil7dmFyIGM9dGhpcy5ldmFsdWF0ZShhcmd1bWVudHNbYl0pK1wiXCIsZD10aGlzLmV2YWx1YXRlKGFyZ3VtZW50c1tiKzFdKTthLnNldChjLGQpfXJldHVybiBhfWZ1bmN0aW9uIFhkKGEsYil7cmV0dXJuIHRoaXMuZXZhbHVhdGUoYSkldGhpcy5ldmFsdWF0ZShiKX1mdW5jdGlvbiBZZChhLGIpe3JldHVybiB0aGlzLmV2YWx1YXRlKGEpKnRoaXMuZXZhbHVhdGUoYil9XG5mdW5jdGlvbiBaZChhKXtyZXR1cm4tdGhpcy5ldmFsdWF0ZShhKX1mdW5jdGlvbiAkZChhKXtyZXR1cm4hdGhpcy5ldmFsdWF0ZShhKX1mdW5jdGlvbiBhZShhLGIpe3JldHVybiF5ZC5jYWxsKHRoaXMsYSxiKX1mdW5jdGlvbiBiZSgpe3JldHVybiBudWxsfWZ1bmN0aW9uIGNlKGEsYil7cmV0dXJuIHRoaXMuZXZhbHVhdGUoYSl8fHRoaXMuZXZhbHVhdGUoYil9ZnVuY3Rpb24gZGUoYSxiKXt2YXIgYz10aGlzLmV2YWx1YXRlKGEpO3RoaXMuZXZhbHVhdGUoYik7cmV0dXJuIGN9ZnVuY3Rpb24gZWUoYSl7cmV0dXJuIHRoaXMuZXZhbHVhdGUoYSl9ZnVuY3Rpb24gZmUoKXtyZXR1cm4gQXJyYXkucHJvdG90eXBlLnNsaWNlLmFwcGx5KGFyZ3VtZW50cyl9ZnVuY3Rpb24gZ2UoYSl7cmV0dXJuIG5ldyBDYShcInJldHVyblwiLHRoaXMuZXZhbHVhdGUoYSkpfVxuZnVuY3Rpb24gaGUoYSxiLGMpe2E9dGhpcy5ldmFsdWF0ZShhKTtiPXRoaXMuZXZhbHVhdGUoYik7Yz10aGlzLmV2YWx1YXRlKGMpO2lmKGE9PT1udWxsfHxhPT09dm9pZCAwKXt2YXIgZD1cIlR5cGVFcnJvcjogQ2FuJ3Qgc2V0IHByb3BlcnR5IFwiK2IrXCIgb2YgXCIrYStcIi5cIjtpZihlZCgpKXRocm93IG5ldyBnZChkKTt0aHJvdyBFcnJvcihkKTt9KGEgaW5zdGFuY2VvZiBXY3x8YSBpbnN0YW5jZW9mIFdhfHxhIGluc3RhbmNlb2YgWWEpJiZhLnNldChiLGMpO3JldHVybiBjfWZ1bmN0aW9uIGllKGEsYil7cmV0dXJuIHRoaXMuZXZhbHVhdGUoYSktdGhpcy5ldmFsdWF0ZShiKX1cbmZ1bmN0aW9uIGplKGEsYixjKXthPXRoaXMuZXZhbHVhdGUoYSk7dmFyIGQ9dGhpcy5ldmFsdWF0ZShiKSxlPXRoaXMuZXZhbHVhdGUoYyk7aWYoIUFycmF5LmlzQXJyYXkoZCl8fCFBcnJheS5pc0FycmF5KGUpKXRocm93IEVycm9yKFwiRXJyb3I6IE1hbGZvcm1lZCBzd2l0Y2ggaW5zdHJ1Y3Rpb24uXCIpO2Zvcih2YXIgZixnPSExLGs9MDtrPGQubGVuZ3RoO2srKylpZihnfHxhPT09dGhpcy5ldmFsdWF0ZShkW2tdKSlpZihmPXRoaXMuZXZhbHVhdGUoZVtrXSksZiBpbnN0YW5jZW9mIENhKXt2YXIgbT1mLnR5cGU7aWYobT09PVwiYnJlYWtcIilyZXR1cm47aWYobT09PVwicmV0dXJuXCJ8fG09PT1cImNvbnRpbnVlXCIpcmV0dXJuIGZ9ZWxzZSBnPSEwO2lmKGUubGVuZ3RoPT09ZC5sZW5ndGgrMSYmKGY9dGhpcy5ldmFsdWF0ZShlW2UubGVuZ3RoLTFdKSxmIGluc3RhbmNlb2YgQ2EmJihmLnR5cGU9PT1cInJldHVyblwifHxmLnR5cGU9PT1cImNvbnRpbnVlXCIpKSlyZXR1cm4gZn1cbmZ1bmN0aW9uIGtlKGEsYixjKXtyZXR1cm4gdGhpcy5ldmFsdWF0ZShhKT90aGlzLmV2YWx1YXRlKGIpOnRoaXMuZXZhbHVhdGUoYyl9ZnVuY3Rpb24gbGUoYSl7YT10aGlzLmV2YWx1YXRlKGEpO3JldHVybiBhIGluc3RhbmNlb2YgV2M/XCJmdW5jdGlvblwiOnR5cGVvZiBhfWZ1bmN0aW9uIG1lKCl7Zm9yKHZhciBhPXRoaXMuRixiPTA7Yjxhcmd1bWVudHMubGVuZ3RoO2IrKyl7dmFyIGM9YXJndW1lbnRzW2JdO3R5cGVvZiBjIT09XCJzdHJpbmdcInx8YS5hZGQoYyx2b2lkIDApfX1cbmZ1bmN0aW9uIG5lKGEsYixjLGQpe3ZhciBlPXRoaXMuZXZhbHVhdGUoZCk7aWYodGhpcy5ldmFsdWF0ZShjKSl7dmFyIGY9SmEodGhpcy5GLGUpO2lmKGYgaW5zdGFuY2VvZiBDYSl7aWYoZi50eXBlPT09XCJicmVha1wiKXJldHVybjtpZihmLnR5cGU9PT1cInJldHVyblwiKXJldHVybiBmfX1mb3IoO3RoaXMuZXZhbHVhdGUoYSk7KXt2YXIgZz1KYSh0aGlzLkYsZSk7aWYoZyBpbnN0YW5jZW9mIENhKXtpZihnLnR5cGU9PT1cImJyZWFrXCIpYnJlYWs7aWYoZy50eXBlPT09XCJyZXR1cm5cIilyZXR1cm4gZ310aGlzLmV2YWx1YXRlKGIpfX1mdW5jdGlvbiBvZShhKXtyZXR1cm5+TnVtYmVyKHRoaXMuZXZhbHVhdGUoYSkpfWZ1bmN0aW9uIHBlKGEsYil7cmV0dXJuIE51bWJlcih0aGlzLmV2YWx1YXRlKGEpKTw8TnVtYmVyKHRoaXMuZXZhbHVhdGUoYikpfWZ1bmN0aW9uIHFlKGEsYil7cmV0dXJuIE51bWJlcih0aGlzLmV2YWx1YXRlKGEpKT4+TnVtYmVyKHRoaXMuZXZhbHVhdGUoYikpfVxuZnVuY3Rpb24gcmUoYSxiKXtyZXR1cm4gTnVtYmVyKHRoaXMuZXZhbHVhdGUoYSkpPj4+TnVtYmVyKHRoaXMuZXZhbHVhdGUoYikpfWZ1bmN0aW9uIHNlKGEsYil7cmV0dXJuIE51bWJlcih0aGlzLmV2YWx1YXRlKGEpKSZOdW1iZXIodGhpcy5ldmFsdWF0ZShiKSl9ZnVuY3Rpb24gdGUoYSxiKXtyZXR1cm4gTnVtYmVyKHRoaXMuZXZhbHVhdGUoYSkpXk51bWJlcih0aGlzLmV2YWx1YXRlKGIpKX1mdW5jdGlvbiB1ZShhLGIpe3JldHVybiBOdW1iZXIodGhpcy5ldmFsdWF0ZShhKSl8TnVtYmVyKHRoaXMuZXZhbHVhdGUoYikpfWZ1bmN0aW9uIHZlKCl7fVxuZnVuY3Rpb24gd2UoYSxiLGMsZCxlKXt2YXIgZj0hMDt0cnl7dmFyIGc9dGhpcy5ldmFsdWF0ZShjKTtpZihnIGluc3RhbmNlb2YgQ2EpcmV0dXJuIGd9Y2F0Y2gocil7aWYoIShyIGluc3RhbmNlb2YgZ2QmJmEpKXRocm93IGY9ciBpbnN0YW5jZW9mIGdkLHI7dmFyIGs9SWEodGhpcy5GKSxtPW5ldyBhZChyKTtrLmFkZChiLG0pO3ZhciBuPXRoaXMuZXZhbHVhdGUoZCkscD1KYShrLG4pO2lmKHAgaW5zdGFuY2VvZiBDYSlyZXR1cm4gcH1maW5hbGx5e2lmKGYmJmUhPT12b2lkIDApe3ZhciBxPXRoaXMuZXZhbHVhdGUoZSk7aWYocSBpbnN0YW5jZW9mIENhKXJldHVybiBxfX19O3ZhciB5ZT1mdW5jdGlvbigpe3RoaXMuaj1uZXcgTGE7eGUodGhpcyl9O3llLnByb3RvdHlwZS5leGVjdXRlPWZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLmouTGgoYSl9O3ZhciB4ZT1mdW5jdGlvbihhKXt2YXIgYj1mdW5jdGlvbihjLGQpe3ZhciBlPW5ldyBXYyhTdHJpbmcoYyksZCk7ZS5LYSgpO2Euai5qLnNldChTdHJpbmcoYyksZSl9O2IoXCJtYXBcIixXZCk7YihcImFuZFwiLFFjKTtiKFwiY29udGFpbnNcIixUYyk7YihcImVxdWFsc1wiLFJjKTtiKFwib3JcIixTYyk7YihcInN0YXJ0c1dpdGhcIixVYyk7YihcInZhcmlhYmxlXCIsVmMpfTt2YXIgQWU9ZnVuY3Rpb24oKXt0aGlzLkQ9ITE7dGhpcy5qPW5ldyBMYTt6ZSh0aGlzKTt0aGlzLkQ9ITB9O0FlLnByb3RvdHlwZS5leGVjdXRlPWZ1bmN0aW9uKGEpe3JldHVybiBCZSh0aGlzLmouTGgoYSkpfTt2YXIgQ2U9ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBCZShhLmouTWsoYixjKSl9O0FlLnByb3RvdHlwZS5LYT1mdW5jdGlvbigpe3RoaXMuai5LYSgpfTtcbnZhciB6ZT1mdW5jdGlvbihhKXt2YXIgYj1mdW5jdGlvbihjLGQpe3ZhciBlPVN0cmluZyhjKSxmPW5ldyBXYyhlLGQpO2YuS2EoKTthLmouai5zZXQoZSxmKX07YigwLGtkKTtiKDEsbGQpO2IoMixtZCk7YigzLG5kKTtiKDU2LHNlKTtiKDU3LHBlKTtiKDU4LG9lKTtiKDU5LHVlKTtiKDYwLHFlKTtiKDYxLHJlKTtiKDYyLHRlKTtiKDUzLG9kKTtiKDQscGQpO2IoNSxxZCk7Yig1MixyZCk7Yig2LHNkKTtiKDQ5LHZkKTtiKDcsVmQpO2IoOCxXZCk7Yig5LHFkKTtiKDUwLHdkKTtiKDEwLHhkKTtiKDEyLHlkKTtiKDEzLHpkKTtiKDUxLEtkKTtiKDQ3LENkKTtiKDU0LERkKTtiKDU1LEVkKTtiKDYzLEpkKTtiKDY0LEZkKTtiKDY1LEhkKTtiKDY2LElkKTtiKDE1LExkKTtiKDE2LE5kKTtiKDE3LE5kKTtiKDE4LE9kKTtiKDE5LFBkKTtiKDIwLFFkKTtiKDIxLFJkKTtiKDIyLFNkKTtiKDIzLFRkKTtiKDI0LFVkKTtiKDI1LFhkKTtiKDI2LFlkKTtiKDI3LFpkKTtiKDI4LCRkKTtiKDI5LFxuYWUpO2IoNDUsYmUpO2IoMzAsY2UpO2IoMzIsZGUpO2IoMzMsZGUpO2IoMzQsZWUpO2IoMzUsZWUpO2IoNDYsZmUpO2IoMzYsZ2UpO2IoNDMsaGUpO2IoMzcsaWUpO2IoMzgsamUpO2IoMzksa2UpO2IoNjcsd2UpO2IoNDAsbGUpO2IoNDQsdmUpO2IoNDEsbWUpO2IoNDIsbmUpfTtBZS5wcm90b3R5cGUucmQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5qLnJkKCl9O2Z1bmN0aW9uIEJlKGEpe2lmKGEgaW5zdGFuY2VvZiBDYXx8YSBpbnN0YW5jZW9mIFdjfHxhIGluc3RhbmNlb2YgV2F8fGEgaW5zdGFuY2VvZiBZYXx8YSBpbnN0YW5jZW9mIGFkfHxhPT09bnVsbHx8YT09PXZvaWQgMHx8dHlwZW9mIGE9PT1cInN0cmluZ1wifHx0eXBlb2YgYT09PVwibnVtYmVyXCJ8fHR5cGVvZiBhPT09XCJib29sZWFuXCIpcmV0dXJuIGF9O3ZhciBEZT1mdW5jdGlvbihhKXt0aGlzLm1lc3NhZ2U9YX07ZnVuY3Rpb24gRWUoYSl7dmFyIGI9XCIwMTIzNDU2Nzg5YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXpBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWi1fXCJbYV07cmV0dXJuIGI9PT12b2lkIDA/bmV3IERlKFwiVmFsdWUgXCIrYStcIiBjYW4gbm90IGJlIGVuY29kZWQgaW4gd2ViLXNhZmUgYmFzZTY0IGRpY3Rpb25hcnkuXCIpOmJ9O2Z1bmN0aW9uIEZlKGEpe3N3aXRjaChhKXtjYXNlIDE6cmV0dXJuXCIxXCI7Y2FzZSAyOmNhc2UgNDpyZXR1cm5cIjBcIjtkZWZhdWx0OnJldHVyblwiLVwifX07dmFyIEdlPS9eWzEtOWEtekEtWl8tXVsxLTlhLWNdWzEtOWEtdl1cXGQkLztmdW5jdGlvbiBIZShhLGIpe2Zvcih2YXIgYz1cIlwiLGQ9ITA7YT43Oyl7dmFyIGU9YSYzMTthPj49NTtkP2Q9ITE6ZXw9MzI7Yz1cIlwiK0VlKGUpK2N9YTw8PTI7ZHx8KGF8PTMyKTtyZXR1cm4gYz1cIlwiK0VlKGF8YikrY307dmFyIEllPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gYShiKXtyZXR1cm57dG9TdHJpbmc6ZnVuY3Rpb24oKXtyZXR1cm4gYn19fXJldHVybntwazphKFwiY29uc2VudFwiKSxYaDphKFwiY29udmVydF9jYXNlX3RvXCIpLFloOmEoXCJjb252ZXJ0X2ZhbHNlX3RvXCIpLFpoOmEoXCJjb252ZXJ0X251bGxfdG9cIiksYWk6YShcImNvbnZlcnRfdHJ1ZV90b1wiKSxiaTphKFwiY29udmVydF91bmRlZmluZWRfdG9cIiksbG46YShcImRlYnVnX21vZGVfbWV0YWRhdGFcIiksbWE6YShcImZ1bmN0aW9uXCIpLFBnOmEoXCJpbnN0YW5jZV9uYW1lXCIpLFBrOmEoXCJsaXZlX29ubHlcIiksUWs6YShcIm1hbHdhcmVfZGlzYWJsZWRcIiksTUVUQURBVEE6YShcIm1ldGFkYXRhXCIpLFRrOmEoXCJvcmlnaW5hbF9hY3Rpdml0eV9pZFwiKSx1bjphKFwib3JpZ2luYWxfdmVuZG9yX3RlbXBsYXRlX2lkXCIpLHRuOmEoXCJvbmNlX29uX2xvYWRcIiksU2s6YShcIm9uY2VfcGVyX2V2ZW50XCIpLGtqOmEoXCJvbmNlX3Blcl9sb2FkXCIpLHduOmEoXCJwcmlvcml0eV9vdmVycmlkZVwiKSxcbnhuOmEoXCJyZXNwZWN0ZWRfY29uc2VudF90eXBlc1wiKSxzajphKFwic2V0dXBfdGFnc1wiKSx0ZTphKFwidGFnX2lkXCIpLHhqOmEoXCJ0ZWFyZG93bl90YWdzXCIpfX0oKTt2YXIgZmY7dmFyIGdmPVtdLGhmPVtdLGpmPVtdLGtmPVtdLGxmPVtdLG1mPXt9LG5mLG9mO2Z1bmN0aW9uIHBmKGEpe29mPW9mfHxhfVxuZnVuY3Rpb24gcWYoYSl7fXZhciByZixzZj1bXSx0Zj1bXTtmdW5jdGlvbiB1ZihhLGIpe3ZhciBjPXt9O2NbSWUubWFdPVwiX19cIithO2Zvcih2YXIgZCBpbiBiKWIuaGFzT3duUHJvcGVydHkoZCkmJihjW1widnRwX1wiK2RdPWJbZF0pO3JldHVybiBjfVxuZnVuY3Rpb24gdmYoYSxiLGMpe3RyeXtyZXR1cm4gbmYod2YoYSxiLGMpKX1jYXRjaChkKXtKU09OLnN0cmluZ2lmeShhKX1yZXR1cm4gMn1mdW5jdGlvbiB4ZihhKXt2YXIgYj1hW0llLm1hXTtpZighYil0aHJvdyBFcnJvcihcIkVycm9yOiBObyBmdW5jdGlvbiBuYW1lIGdpdmVuIGZvciBmdW5jdGlvbiBjYWxsLlwiKTtyZXR1cm4hIW1mW2JdfVxudmFyIHdmPWZ1bmN0aW9uKGEsYixjKXtjPWN8fFtdO3ZhciBkPXt9LGU7Zm9yKGUgaW4gYSlhLmhhc093blByb3BlcnR5KGUpJiYoZFtlXT15ZihhW2VdLGIsYykpO3JldHVybiBkfSx5Zj1mdW5jdGlvbihhLGIsYyl7aWYoQXJyYXkuaXNBcnJheShhKSl7dmFyIGQ7c3dpdGNoKGFbMF0pe2Nhc2UgXCJmdW5jdGlvbl9pZFwiOnJldHVybiBhWzFdO2Nhc2UgXCJsaXN0XCI6ZD1bXTtmb3IodmFyIGU9MTtlPGEubGVuZ3RoO2UrKylkLnB1c2goeWYoYVtlXSxiLGMpKTtyZXR1cm4gZDtjYXNlIFwibWFjcm9cIjp2YXIgZj1hWzFdO2lmKGNbZl0pcmV0dXJuO3ZhciBnPWdmW2ZdO2lmKCFnfHxiLmlzQmxvY2tlZChnKSlyZXR1cm47Y1tmXT0hMDt2YXIgaz1TdHJpbmcoZ1tJZS5QZ10pO3RyeXt2YXIgbT13ZihnLGIsYyk7bS52dHBfZ3RtRXZlbnRJZD1iLmlkO2IucHJpb3JpdHlJZCYmKG0udnRwX2d0bVByaW9yaXR5SWQ9Yi5wcmlvcml0eUlkKTtkPXpmKG0se2V2ZW50OmIsaW5kZXg6Zix0eXBlOjIsXG5uYW1lOmt9KTtyZiYmKGQ9cmYub2woZCxtKSl9Y2F0Y2goeSl7Yi5sb2dNYWNyb0Vycm9yJiZiLmxvZ01hY3JvRXJyb3IoeSxOdW1iZXIoZiksayksZD0hMX1jW2ZdPSExO3JldHVybiBkO2Nhc2UgXCJtYXBcIjpkPXt9O2Zvcih2YXIgbj0xO248YS5sZW5ndGg7bis9MilkW3lmKGFbbl0sYixjKV09eWYoYVtuKzFdLGIsYyk7cmV0dXJuIGQ7Y2FzZSBcInRlbXBsYXRlXCI6ZD1bXTtmb3IodmFyIHA9ITEscT0xO3E8YS5sZW5ndGg7cSsrKXt2YXIgcj15ZihhW3FdLGIsYyk7b2YmJihwPXB8fG9mLmRtKHIpKTtkLnB1c2gocil9cmV0dXJuIG9mJiZwP29mLnJsKGQpOmQuam9pbihcIlwiKTtjYXNlIFwiZXNjYXBlXCI6ZD15ZihhWzFdLGIsYyk7aWYob2YmJkFycmF5LmlzQXJyYXkoYVsxXSkmJmFbMV1bMF09PT1cIm1hY3JvXCImJm9mLmZtKGEpKXJldHVybiBvZi5EbShkKTtkPVN0cmluZyhkKTtmb3IodmFyIHQ9Mjt0PGEubGVuZ3RoO3QrKylKZVthW3RdXSYmKGQ9SmVbYVt0XV0oZCkpO3JldHVybiBkO1xuY2FzZSBcInRhZ1wiOnZhciB1PWFbMV07aWYoIWtmW3VdKXRocm93IEVycm9yKFwiVW5hYmxlIHRvIHJlc29sdmUgdGFnIHJlZmVyZW5jZSBcIit1K1wiLlwiKTtyZXR1cm57RGo6YVsyXSxpbmRleDp1fTtjYXNlIFwiemJcIjp2YXIgdj17YXJnMDphWzJdLGFyZzE6YVszXSxpZ25vcmVfY2FzZTphWzVdfTt2W0llLm1hXT1hWzFdO3ZhciB3PXZmKHYsYixjKSx4PSEhYVs0XTtyZXR1cm4geHx8dyE9PTI/eCE9PSh3PT09MSk6bnVsbDtkZWZhdWx0OnRocm93IEVycm9yKFwiQXR0ZW1wdGluZyB0byBleHBhbmQgdW5rbm93biBWYWx1ZSB0eXBlOiBcIithWzBdK1wiLlwiKTt9fXJldHVybiBhfSx6Zj1mdW5jdGlvbihhLGIpe3ZhciBjPWFbSWUubWFdLGQ9YiYmYi5ldmVudDtpZighYyl0aHJvdyBFcnJvcihcIkVycm9yOiBObyBmdW5jdGlvbiBuYW1lIGdpdmVuIGZvciBmdW5jdGlvbiBjYWxsLlwiKTt2YXIgZT1tZltjXSxmPWImJmIudHlwZT09PTImJihkPT1udWxsP3ZvaWQgMDpkLnJlcG9ydE1hY3JvRGlzY3JlcGFuY3kpJiZcbmUmJnNmLmluZGV4T2YoYykhPT0tMSxnPXt9LGs9e30sbTtmb3IobSBpbiBhKWEuaGFzT3duUHJvcGVydHkobSkmJkdiKG0sXCJ2dHBfXCIpJiYoZSYmKGdbbV09YVttXSksIWV8fGYpJiYoa1ttLnN1YnN0cmluZyg0KV09YVttXSk7ZSYmZCYmZC5jYWNoZWRNb2RlbFZhbHVlcyYmKGcudnRwX2d0bUNhY2hlZFZhbHVlcz1kLmNhY2hlZE1vZGVsVmFsdWVzKTtpZihiKXtpZihiLm5hbWU9PW51bGwpe3ZhciBuO2E6e3ZhciBwPWIudHlwZSxxPWIuaW5kZXg7aWYocT09bnVsbCluPVwiXCI7ZWxzZXt2YXIgcjtzd2l0Y2gocCl7Y2FzZSAyOnI9Z2ZbcV07YnJlYWs7Y2FzZSAxOnI9a2ZbcV07YnJlYWs7ZGVmYXVsdDpuPVwiXCI7YnJlYWsgYX12YXIgdD1yJiZyW0llLlBnXTtuPXQ/U3RyaW5nKHQpOlwiXCJ9fWIubmFtZT1ufWUmJihnLnZ0cF9ndG1FbnRpdHlJbmRleD1iLmluZGV4LGcudnRwX2d0bUVudGl0eU5hbWU9Yi5uYW1lKX12YXIgdSx2LHc7aWYoZiYmdGYuaW5kZXhPZihjKT09PS0xKXt0Zi5wdXNoKGMpO1xudmFyIHg9QmIoKTt1PWUoZyk7dmFyIHk9QmIoKS14LEE9QmIoKTt2PWZmKGMsayxiKTt3PXktKEJiKCktQSl9ZWxzZSBpZihlJiYodT1lKGcpKSwhZXx8Zil2PWZmKGMsayxiKTtmJiZkJiYoZC5yZXBvcnRNYWNyb0Rpc2NyZXBhbmN5KGQuaWQsYyx2b2lkIDAsITApLFVhKHUpPyhBcnJheS5pc0FycmF5KHUpP0FycmF5LmlzQXJyYXkodik6U2EodSk/U2Eodik6dHlwZW9mIHU9PT1cImZ1bmN0aW9uXCI/dHlwZW9mIHY9PT1cImZ1bmN0aW9uXCI6dT09PXYpfHxkLnJlcG9ydE1hY3JvRGlzY3JlcGFuY3koZC5pZCxjKTp1IT09diYmZC5yZXBvcnRNYWNyb0Rpc2NyZXBhbmN5KGQuaWQsYyksdyE9PXZvaWQgMCYmZC5yZXBvcnRNYWNyb0Rpc2NyZXBhbmN5KGQuaWQsYyx3KSk7cmV0dXJuIGU/dTp2fTt2YXIgQWY9ZnVuY3Rpb24oYSxiLGMpe3ZhciBkO2Q9RXJyb3IuY2FsbCh0aGlzLGMpO3RoaXMubWVzc2FnZT1kLm1lc3NhZ2U7XCJzdGFja1wiaW4gZCYmKHRoaXMuc3RhY2s9ZC5zdGFjayk7dGhpcy5wZXJtaXNzaW9uSWQ9YTt0aGlzLnBhcmFtZXRlcnM9Yjt0aGlzLm5hbWU9XCJQZXJtaXNzaW9uRXJyb3JcIn07eWEoQWYsRXJyb3IpO0FmLnByb3RvdHlwZS5nZXRNZXNzYWdlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubWVzc2FnZX07ZnVuY3Rpb24gQmYoYSxiKXtpZihBcnJheS5pc0FycmF5KGEpKXtPYmplY3QuZGVmaW5lUHJvcGVydHkoYSxcImNvbnRleHRcIix7dmFsdWU6e2xpbmU6YlswXX19KTtmb3IodmFyIGM9MTtjPGEubGVuZ3RoO2MrKylCZihhW2NdLGJbY10pfX07dmFyIENmPWZ1bmN0aW9uKGEsYil7dmFyIGM7Yz1FcnJvci5jYWxsKHRoaXMsXCJXcmFwcGVkIGVycm9yIGZvciBEdXN0IGRlYnVnZ2luZy4gT3JpZ2luYWwgZXJyb3IgbWVzc2FnZTogXCIrYS5tZXNzYWdlKTt0aGlzLm1lc3NhZ2U9Yy5tZXNzYWdlO1wic3RhY2tcImluIGMmJih0aGlzLnN0YWNrPWMuc3RhY2spO3RoaXMueG09YTt0aGlzLmo9W107dGhpcy5EPWJ9O3lhKENmLEVycm9yKTtmdW5jdGlvbiBEZigpe3JldHVybiBmdW5jdGlvbihhLGIpe2EgaW5zdGFuY2VvZiBDZnx8KGE9bmV3IENmKGEsRWYpKTtiJiZhIGluc3RhbmNlb2YgQ2YmJmEuai5wdXNoKGIpO3Rocm93IGE7fX1mdW5jdGlvbiBFZihhKXtpZighYS5sZW5ndGgpcmV0dXJuIGE7YS5wdXNoKHtpZDpcIm1haW5cIixsaW5lOjB9KTtmb3IodmFyIGI9YS5sZW5ndGgtMTtiPjA7Yi0tKXBiKGFbYl0uaWQpJiZhLnNwbGljZShiKyssMSk7Zm9yKHZhciBjPWEubGVuZ3RoLTE7Yz4wO2MtLSlhW2NdLmxpbmU9YVtjLTFdLmxpbmU7YS5zcGxpY2UoMCwxKTtyZXR1cm4gYX07ZnVuY3Rpb24gRmYoYSl7ZnVuY3Rpb24gYihyKXtmb3IodmFyIHQ9MDt0PHIubGVuZ3RoO3QrKylkW3JbdF1dPSEwfWZvcih2YXIgYz1bXSxkPVtdLGU9R2YoYSksZj0wO2Y8aGYubGVuZ3RoO2YrKyl7dmFyIGc9aGZbZl0saz1IZihnLGUpO2lmKGspe2Zvcih2YXIgbT1nLmFkZHx8W10sbj0wO248bS5sZW5ndGg7bisrKWNbbVtuXV09ITA7YihnLmJsb2NrfHxbXSl9ZWxzZSBrPT09bnVsbCYmYihnLmJsb2NrfHxbXSk7fWZvcih2YXIgcD1bXSxxPTA7cTxrZi5sZW5ndGg7cSsrKWNbcV0mJiFkW3FdJiYocFtxXT0hMCk7cmV0dXJuIHB9XG5mdW5jdGlvbiBIZihhLGIpe2Zvcih2YXIgYz1hW1wiaWZcIl18fFtdLGQ9MDtkPGMubGVuZ3RoO2QrKyl7dmFyIGU9YihjW2RdKTtpZihlPT09MClyZXR1cm4hMTtpZihlPT09MilyZXR1cm4gbnVsbH1mb3IodmFyIGY9YS51bmxlc3N8fFtdLGc9MDtnPGYubGVuZ3RoO2crKyl7dmFyIGs9YihmW2ddKTtpZihrPT09MilyZXR1cm4gbnVsbDtpZihrPT09MSlyZXR1cm4hMX1yZXR1cm4hMH1mdW5jdGlvbiBHZihhKXt2YXIgYj1bXTtyZXR1cm4gZnVuY3Rpb24oYyl7YltjXT09PXZvaWQgMCYmKGJbY109dmYoamZbY10sYSkpO3JldHVybiBiW2NdfX07dmFyIElmPXtvbDpmdW5jdGlvbihhLGIpe2JbSWUuWGhdJiZ0eXBlb2YgYT09PVwic3RyaW5nXCImJihhPWJbSWUuWGhdPT09MT9hLnRvTG93ZXJDYXNlKCk6YS50b1VwcGVyQ2FzZSgpKTtiLmhhc093blByb3BlcnR5KEllLlpoKSYmYT09PW51bGwmJihhPWJbSWUuWmhdKTtiLmhhc093blByb3BlcnR5KEllLmJpKSYmYT09PXZvaWQgMCYmKGE9YltJZS5iaV0pO2IuaGFzT3duUHJvcGVydHkoSWUuYWkpJiZhPT09ITAmJihhPWJbSWUuYWldKTtiLmhhc093blByb3BlcnR5KEllLlloKSYmYT09PSExJiYoYT1iW0llLlloXSk7cmV0dXJuIGF9fTt2YXIgSmY9ZnVuY3Rpb24oKXt0aGlzLmo9e319LExmPWZ1bmN0aW9uKGEsYil7dmFyIGM9S2YuaixkOyhkPWMuailbYV0hPW51bGx8fChkW2FdPVtdKTtjLmpbYV0ucHVzaChmdW5jdGlvbigpe3JldHVybiBiLmFwcGx5KG51bGwscGEoemEuYXBwbHkoMCxhcmd1bWVudHMpKSl9KX07ZnVuY3Rpb24gTWYoYSxiLGMsZCl7aWYoYSlmb3IodmFyIGU9MDtlPGEubGVuZ3RoO2UrKyl7dmFyIGY9dm9pZCAwLGc9XCJBIHBvbGljeSBmdW5jdGlvbiBkZW5pZWQgdGhlIHBlcm1pc3Npb24gcmVxdWVzdFwiO3RyeXtmPWFbZV0oYixjLGQpLGcrPVwiLlwifWNhdGNoKGspe2c9dHlwZW9mIGs9PT1cInN0cmluZ1wiP2crKFwiOiBcIitrKTprIGluc3RhbmNlb2YgRXJyb3I/ZysoXCI6IFwiK2subWVzc2FnZSk6ZytcIi5cIn1pZighZil0aHJvdyBuZXcgQWYoYyxkLGcpO319XG5mdW5jdGlvbiBOZihhLGIsYyl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGQ9YXJndW1lbnRzWzBdO2lmKGQpe3ZhciBlPWEualtkXSxmPWEuai5hbGw7aWYoZXx8Zil7dmFyIGc9Yy5hcHBseSh2b2lkIDAsQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLDApKTtNZihlLGIsZCxnKTtNZihmLGIsZCxnKX19fX07dmFyIFJmPWZ1bmN0aW9uKCl7dmFyIGE9ZGF0YS5wZXJtaXNzaW9uc3x8e30sYj1PZi5jdGlkLGM9dGhpczt0aGlzLkQ9e307dGhpcy5qPW5ldyBKZjt2YXIgZD17fSxlPXt9LGY9TmYodGhpcy5qLGIsZnVuY3Rpb24oKXt2YXIgZz1hcmd1bWVudHNbMF07cmV0dXJuIGcmJmRbZ10/ZFtnXS5hcHBseSh2b2lkIDAsQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLDApKTp7fX0pO3ooYSxmdW5jdGlvbihnLGspe2Z1bmN0aW9uIG0ocCl7dmFyIHE9emEuYXBwbHkoMSxhcmd1bWVudHMpO2lmKCFuW3BdKXRocm93IFBmKHAse30sXCJUaGUgcmVxdWVzdGVkIGFkZGl0aW9uYWwgcGVybWlzc2lvbiBcIitwK1wiIGlzIG5vdCBjb25maWd1cmVkLlwiKTtmLmFwcGx5KG51bGwsW3BdLmNvbmNhdChwYShxKSkpfXZhciBuPXt9O3ooayxmdW5jdGlvbihwLHEpe3ZhciByPVFmKHAscSk7bltwXT1yLmFzc2VydDtkW3BdfHwoZFtwXT1yLk4pO3IuemomJiFlW3BdJiYoZVtwXT1yLnpqKX0pO1xuYy5EW2ddPWZ1bmN0aW9uKHAscSl7dmFyIHI9bltwXTtpZighcil0aHJvdyBQZihwLHt9LFwiVGhlIHJlcXVlc3RlZCBwZXJtaXNzaW9uIFwiK3ArXCIgaXMgbm90IGNvbmZpZ3VyZWQuXCIpO3ZhciB0PUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywwKTtyLmFwcGx5KHZvaWQgMCx0KTtmLmFwcGx5KHZvaWQgMCx0KTt2YXIgdT1lW3BdO3UmJnUuYXBwbHkobnVsbCxbbV0uY29uY2F0KHBhKHQuc2xpY2UoMSkpKSl9fSl9LFNmPWZ1bmN0aW9uKGEpe3JldHVybiBLZi5EW2FdfHxmdW5jdGlvbigpe319O1xuZnVuY3Rpb24gUWYoYSxiKXt2YXIgYz11ZihhLGIpO2MudnRwX3Blcm1pc3Npb25OYW1lPWE7Yy52dHBfY3JlYXRlUGVybWlzc2lvbkVycm9yPVBmO3RyeXtyZXR1cm4gemYoYyl9Y2F0Y2goZCl7cmV0dXJue2Fzc2VydDpmdW5jdGlvbihlKXt0aHJvdyBuZXcgQWYoZSx7fSxcIlBlcm1pc3Npb24gXCIrZStcIiBpcyB1bmtub3duLlwiKTt9LE46ZnVuY3Rpb24oKXt0aHJvdyBuZXcgQWYoYSx7fSxcIlBlcm1pc3Npb24gXCIrYStcIiBpcyB1bmtub3duLlwiKTt9fX19ZnVuY3Rpb24gUGYoYSxiLGMpe3JldHVybiBuZXcgQWYoYSxiLGMpfTt2YXIgVGY9ITE7dmFyIFVmPXt9O1VmLmdrPXhiKCcnKTtVZi54bD14YignJyk7XG52YXIgWWY9ZnVuY3Rpb24oYSl7dmFyIGI9e30sYz0wO3ooYSxmdW5jdGlvbihlLGYpe2lmKGYhPW51bGwpe3ZhciBnPShcIlwiK2YpLnJlcGxhY2UoL34vZyxcIn5+XCIpO2lmKFZmLmhhc093blByb3BlcnR5KGUpKWJbVmZbZV1dPWc7ZWxzZSBpZihXZi5oYXNPd25Qcm9wZXJ0eShlKSl7dmFyIGs9V2ZbZV07Yi5oYXNPd25Qcm9wZXJ0eShrKXx8KGJba109Zyl9ZWxzZSBpZihlPT09XCJjYXRlZ29yeVwiKWZvcih2YXIgbT1nLnNwbGl0KFwiL1wiLDUpLG49MDtuPG0ubGVuZ3RoO24rKyl7dmFyIHA9YixxPVhmW25dLHI9bVtuXTtwLmhhc093blByb3BlcnR5KHEpfHwocFtxXT1yKX1lbHNlIGlmKGM8Mjcpe3ZhciB0PVN0cmluZy5mcm9tQ2hhckNvZGUoYzwxMD80OCtjOjY1K2MtMTApO2JbXCJrXCIrdF09KFwiXCIrU3RyaW5nKGUpKS5yZXBsYWNlKC9+L2csXCJ+flwiKTtiW1widlwiK3RdPWc7YysrfX19KTt2YXIgZD1bXTt6KGIsZnVuY3Rpb24oZSxmKXtkLnB1c2goXCJcIitlK2YpfSk7cmV0dXJuIGQuam9pbihcIn5cIil9LFxuVmY9e2l0ZW1faWQ6XCJpZFwiLGl0ZW1fbmFtZTpcIm5tXCIsaXRlbV9icmFuZDpcImJyXCIsaXRlbV9jYXRlZ29yeTpcImNhXCIsaXRlbV9jYXRlZ29yeTI6XCJjMlwiLGl0ZW1fY2F0ZWdvcnkzOlwiYzNcIixpdGVtX2NhdGVnb3J5NDpcImM0XCIsaXRlbV9jYXRlZ29yeTU6XCJjNVwiLGl0ZW1fdmFyaWFudDpcInZhXCIscHJpY2U6XCJwclwiLHF1YW50aXR5OlwicXRcIixjb3Vwb246XCJjcFwiLGl0ZW1fbGlzdF9uYW1lOlwibG5cIixpbmRleDpcImxwXCIsaXRlbV9saXN0X2lkOlwibGlcIixkaXNjb3VudDpcImRzXCIsYWZmaWxpYXRpb246XCJhZlwiLHByb21vdGlvbl9pZDpcInBpXCIscHJvbW90aW9uX25hbWU6XCJwblwiLGNyZWF0aXZlX25hbWU6XCJjblwiLGNyZWF0aXZlX3Nsb3Q6XCJjc1wiLGxvY2F0aW9uX2lkOlwibG9cIn0sV2Y9e2lkOlwiaWRcIixuYW1lOlwibm1cIixicmFuZDpcImJyXCIsdmFyaWFudDpcInZhXCIsbGlzdF9uYW1lOlwibG5cIixsaXN0X3Bvc2l0aW9uOlwibHBcIixsaXN0OlwibG5cIixwb3NpdGlvbjpcImxwXCIsY3JlYXRpdmU6XCJjblwifSxYZj1bXCJjYVwiLFxuXCJjMlwiLFwiYzNcIixcImM0XCIsXCJjNVwiXTtcbnZhciBaZj1mdW5jdGlvbigpe3RoaXMuZXZlbnRzPVtdO3RoaXMuaj1cIlwiO3RoaXMuaWE9e307dGhpcy5iYXNlVXJsPVwiXCI7dGhpcy5IPTA7dGhpcy5NPXRoaXMuRD0hMTt9O1pmLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuUihhKT8odGhpcy5ldmVudHMucHVzaChhKSx0aGlzLmo9YS5ELHRoaXMuaWE9YS5pYSx0aGlzLmJhc2VVcmw9YS5iYXNlVXJsLHRoaXMuSCs9YS5NLHRoaXMuRD1hLkgsITApOiExfTtaZi5wcm90b3R5cGUuUj1mdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5ldmVudHMubGVuZ3RoP3RoaXMuZXZlbnRzLmxlbmd0aD49MjB8fGEuTSt0aGlzLkg+PTE2Mzg0PyExOnRoaXMuYmFzZVVybD09PVxuYS5iYXNlVXJsJiZ0aGlzLkQ9PT1hLkgmJnRoaXMuWihhKTohMH07WmYucHJvdG90eXBlLlo9ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcztpZighdGhpcy5NKXJldHVybiB0aGlzLmo9PT1hLkQ7dmFyIGM9T2JqZWN0LmtleXModGhpcy5pYSk7cmV0dXJuIGMubGVuZ3RoPT09T2JqZWN0LmtleXMoYS5pYSkubGVuZ3RoJiZjLmV2ZXJ5KGZ1bmN0aW9uKGQpe3JldHVybiBhLmlhLmhhc093blByb3BlcnR5KGQpJiZTdHJpbmcoYi5pYVtkXSk9PT1TdHJpbmcoYS5pYVtkXSl9KX07dmFyICRmPXt9LGFnPSgkZi51YWE9ITAsJGYudWFiPSEwLCRmLnVhZnZsPSEwLCRmLnVhbWI9ITAsJGYudWFtPSEwLCRmLnVhcD0hMCwkZi51YXB2PSEwLCRmLnVhdz0hMCwkZik7XG52YXIgZGc9ZnVuY3Rpb24oYSxiKXt2YXIgYz1hLmV2ZW50cztpZihjLmxlbmd0aD09PTEpcmV0dXJuIGJnKGNbMF0sYik7dmFyIGQ9W107YS5qJiZkLnB1c2goYS5qKTtmb3IodmFyIGU9e30sZj0wO2Y8Yy5sZW5ndGg7ZisrKXooY1tmXS5MYyxmdW5jdGlvbih0LHUpe3UhPW51bGwmJihlW3RdPWVbdF18fHt9LGVbdF1bU3RyaW5nKHUpXT1lW3RdW1N0cmluZyh1KV0rMXx8MSl9KTt2YXIgZz17fTt6KGUsZnVuY3Rpb24odCx1KXt2YXIgdix3PS0xLHg9MDt6KHUsZnVuY3Rpb24oeSxBKXt4Kz1BO3ZhciBCPSh5Lmxlbmd0aCt0Lmxlbmd0aCsyKSooQS0xKTtCPncmJih2PXksdz1CKX0pO3g9PT1jLmxlbmd0aCYmKGdbdF09dil9KTtjZyhnLGQpO2ImJmQucHVzaChcIl9zPVwiK2IpO2Zvcih2YXIgaz1kLmpvaW4oXCImXCIpLG09W10sbj17fSxwPTA7cDxjLmxlbmd0aDtuPXt5aDp2b2lkIDB9LHArKyl7dmFyIHE9W107bi55aD17fTt6KGNbcF0uTGMsZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKHUsXG52KXtnW3VdIT09XCJcIit2JiYodC55aFt1XT12KX19KG4pKTtjW3BdLmomJnEucHVzaChjW3BdLmopO2NnKG4ueWgscSk7bS5wdXNoKHEuam9pbihcIiZcIikpfXZhciByPW0uam9pbihcIlxcclxcblwiKTtyZXR1cm57cGFyYW1zOmssYm9keTpyfX0sYmc9ZnVuY3Rpb24oYSxiKXt2YXIgYz1bXTthLkQmJmMucHVzaChhLkQpO2ImJmMucHVzaChcIl9zPVwiK2IpO2NnKGEuTGMsYyk7dmFyIGQ9ITE7YS5qJiYoYy5wdXNoKGEuaiksZD0hMCk7dmFyIGU9Yy5qb2luKFwiJlwiKSxmPVwiXCIsZz1lLmxlbmd0aCthLmJhc2VVcmwubGVuZ3RoKzE7ZCYmZz4yMDQ4JiYoZj1jLnBvcCgpLGU9Yy5qb2luKFwiJlwiKSk7cmV0dXJue3BhcmFtczplLGJvZHk6Zn19LGNnPWZ1bmN0aW9uKGEsYil7eihhLGZ1bmN0aW9uKGMsZCl7ZCE9bnVsbCYmYi5wdXNoKGVuY29kZVVSSUNvbXBvbmVudChjKStcIj1cIitlbmNvZGVVUklDb21wb25lbnQoZCkpfSl9O3ZhciBlZz1mdW5jdGlvbihhKXt2YXIgYj1bXTt6KGEsZnVuY3Rpb24oYyxkKXtkIT1udWxsJiZiLnB1c2goZW5jb2RlVVJJQ29tcG9uZW50KGMpK1wiPVwiK2VuY29kZVVSSUNvbXBvbmVudChTdHJpbmcoZCkpKX0pO3JldHVybiBiLmpvaW4oXCImXCIpfSxmZz1mdW5jdGlvbihhLGIsYyxkLGUpe3RoaXMuYmFzZVVybD1iO3RoaXMuZW5kcG9pbnQ9Yzt0aGlzLmlhPWEuaWE7dGhpcy5MYz1hLkxjO3RoaXMuaWg9YS5paDt0aGlzLkg9ZDt0aGlzLkQ9ZWcoYS5pYSk7dGhpcy5qPWVnKGEuaWgpO3RoaXMuTT10aGlzLmoubGVuZ3RoO2lmKGUmJnRoaXMuTT4xNjM4NCl0aHJvdyBFcnJvcihcIkVWRU5UX1RPT19MQVJHRVwiKTt9O1xudmFyIGlnPWZ1bmN0aW9uKGEsYil7Zm9yKHZhciBjPTA7YzxiLmxlbmd0aDtjKyspe3ZhciBkPWEsZT1iW2NdO2lmKCFnZy5leGVjKGUpKXRocm93IEVycm9yKFwiSW52YWxpZCBrZXkgd2lsZGNhcmRcIik7dmFyIGY9ZS5pbmRleE9mKFwiLipcIiksZz1mIT09LTEmJmY9PT1lLmxlbmd0aC0yLGs9Zz9lLnNsaWNlKDAsZS5sZW5ndGgtMik6ZSxtO2E6aWYoZC5sZW5ndGg9PT0wKW09ITE7ZWxzZXtmb3IodmFyIG49ZC5zcGxpdChcIi5cIikscD0wO3A8bi5sZW5ndGg7cCsrKWlmKCFoZy5leGVjKG5bcF0pKXttPSExO2JyZWFrIGF9bT0hMH1pZighbXx8ay5sZW5ndGg+ZC5sZW5ndGh8fCFnJiZkLmxlbmd0aCE9PWUubGVuZ3RoPzA6Zz9HYihkLGspJiYoZD09PWt8fGQuY2hhckF0KGsubGVuZ3RoKT09PVwiLlwiKTpkPT09aylyZXR1cm4hMH1yZXR1cm4hMX0saGc9L15bYS16JF9dW1xcdyRdKiQvaSxnZz0vXig/OlthLXpfJF1bYS16XyQwLTldKlxcLikqW2Etel8kXVthLXpfJDAtOV0qKD86XFwuXFwqKT8kL2k7XG52YXIgamc9W1wibWF0Y2hlc1wiLFwid2Via2l0TWF0Y2hlc1NlbGVjdG9yXCIsXCJtb3pNYXRjaGVzU2VsZWN0b3JcIixcIm1zTWF0Y2hlc1NlbGVjdG9yXCIsXCJvTWF0Y2hlc1NlbGVjdG9yXCJdO2Z1bmN0aW9uIGtnKGEsYil7dmFyIGM9U3RyaW5nKGEpLGQ9U3RyaW5nKGIpLGU9Yy5sZW5ndGgtZC5sZW5ndGg7cmV0dXJuIGU+PTAmJmMuaW5kZXhPZihkLGUpPT09ZX12YXIgbGc9bmV3IHViO2Z1bmN0aW9uIG1nKGEsYixjKXt2YXIgZD1jP1wiaVwiOnZvaWQgMDt0cnl7dmFyIGU9U3RyaW5nKGIpK1N0cmluZyhkKSxmPWxnLmdldChlKTtmfHwoZj1uZXcgUmVnRXhwKGIsZCksbGcuc2V0KGUsZikpO3JldHVybiBmLnRlc3QoYSl9Y2F0Y2goZyl7cmV0dXJuITF9fWZ1bmN0aW9uIG5nKGEsYil7cmV0dXJuIFN0cmluZyhhKS5pbmRleE9mKFN0cmluZyhiKSk+PTB9ZnVuY3Rpb24gb2coYSxiKXtyZXR1cm4gU3RyaW5nKGEpPT09U3RyaW5nKGIpfVxuZnVuY3Rpb24gcGcoYSxiKXtyZXR1cm4gTnVtYmVyKGEpPj1OdW1iZXIoYil9ZnVuY3Rpb24gcWcoYSxiKXtyZXR1cm4gTnVtYmVyKGEpPD1OdW1iZXIoYil9ZnVuY3Rpb24gcmcoYSxiKXtyZXR1cm4gTnVtYmVyKGEpPk51bWJlcihiKX1mdW5jdGlvbiBzZyhhLGIpe3JldHVybiBOdW1iZXIoYSk8TnVtYmVyKGIpfWZ1bmN0aW9uIHRnKGEsYil7cmV0dXJuIEdiKFN0cmluZyhhKSxTdHJpbmcoYikpfTt2YXIgQWc9L14oW2Etel1bYS16MC05XSopOighfFxcPykoXFwqfHN0cmluZ3xib29sZWFufG51bWJlcnxGbnxQaXhpZU1hcHxMaXN0fE9wYXF1ZVZhbHVlKSQvaSxCZz17Rm46XCJmdW5jdGlvblwiLFBpeGllTWFwOlwiT2JqZWN0XCIsTGlzdDpcIkFycmF5XCJ9O1xuZnVuY3Rpb24gSyhhLGIsYyl7Zm9yKHZhciBkPTA7ZDxiLmxlbmd0aDtkKyspe3ZhciBlPUFnLmV4ZWMoYltkXSk7aWYoIWUpdGhyb3cgRXJyb3IoXCJJbnRlcm5hbCBFcnJvciBpbiBcIithKTt2YXIgZj1lWzFdLGc9ZVsyXT09PVwiIVwiLGs9ZVszXSxtPWNbZF07aWYobT09bnVsbCl7aWYoZyl0aHJvdyBFcnJvcihcIkVycm9yIGluIFwiK2ErXCIuIFJlcXVpcmVkIGFyZ3VtZW50IFwiK2YrXCIgbm90IHN1cHBsaWVkLlwiKTt9ZWxzZSBpZihrIT09XCIqXCIpe3ZhciBuPXR5cGVvZiBtO20gaW5zdGFuY2VvZiBXYz9uPVwiRm5cIjptIGluc3RhbmNlb2YgV2E/bj1cIkxpc3RcIjptIGluc3RhbmNlb2YgWWE/bj1cIlBpeGllTWFwXCI6bSBpbnN0YW5jZW9mIGFkJiYobj1cIk9wYXF1ZVZhbHVlXCIpO2lmKG4hPT1rKXRocm93IEVycm9yKFwiRXJyb3IgaW4gXCIrYStcIi4gQXJndW1lbnQgXCIrZitcIiBoYXMgdHlwZSBcIisoKEJnW25dfHxuKStcIiwgd2hpY2ggZG9lcyBub3QgbWF0Y2ggcmVxdWlyZWQgdHlwZSBcIikrKChCZ1trXXx8XG5rKStcIi5cIikpO319fTtmdW5jdGlvbiBDZyhhKXtyZXR1cm5cIlwiK2F9XG5mdW5jdGlvbiBEZyhhLGIpe3ZhciBjPVtdO3JldHVybiBjfTtmdW5jdGlvbiBFZyhhLGIpe3ZhciBjPW5ldyBXYyhhLGZ1bmN0aW9uKCl7Zm9yKHZhciBkPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywwKSxlPTA7ZTxkLmxlbmd0aDtlKyspZFtlXT10aGlzLmV2YWx1YXRlKGRbZV0pO3RyeXtyZXR1cm4gYi5hcHBseSh0aGlzLGQpfWNhdGNoKGcpe2lmKGVkKCkpdGhyb3cgbmV3IGdkKGcubWVzc2FnZSk7dGhyb3cgZzt9fSk7Yy5LYSgpO3JldHVybiBjfVxuZnVuY3Rpb24gRmcoYSxiKXt2YXIgYz1uZXcgWWEsZDtmb3IoZCBpbiBiKWlmKGIuaGFzT3duUHJvcGVydHkoZCkpe3ZhciBlPWJbZF07b2IoZSk/Yy5zZXQoZCxFZyhhK1wiX1wiK2QsZSkpOlNhKGUpP2Muc2V0KGQsRmcoYStcIl9cIitkLGUpKToocGIoZSl8fGwoZSl8fHR5cGVvZiBlPT09XCJib29sZWFuXCIpJiZjLnNldChkLGUpfWMuS2EoKTtyZXR1cm4gY307ZnVuY3Rpb24gR2coYSxiKXtLKHRoaXMuZ2V0TmFtZSgpLFtcImFwaU5hbWU6IXN0cmluZ1wiLFwibWVzc2FnZTo/c3RyaW5nXCJdLGFyZ3VtZW50cyk7dmFyIGM9e30sZD1uZXcgWWE7cmV0dXJuIGQ9RmcoXCJBc3NlcnRBcGlTdWJqZWN0XCIsYyl9O2Z1bmN0aW9uIEhnKGEsYil7Syh0aGlzLmdldE5hbWUoKSxbXCJhY3R1YWw6PypcIixcIm1lc3NhZ2U6P3N0cmluZ1wiXSxhcmd1bWVudHMpO2lmKGEgaW5zdGFuY2VvZiBjZCl0aHJvdyBFcnJvcihcIkFyZ3VtZW50IGFjdHVhbCBjYW5ub3QgaGF2ZSB0eXBlIFByb21pc2UuIEFzc2VydGlvbnMgb24gYXN5bmNocm9ub3VzIGNvZGUgYXJlbid0IHN1cHBvcnRlZC5cIik7dmFyIGM9e30sZD1uZXcgWWE7cmV0dXJuIGQ9RmcoXCJBc3NlcnRUaGF0U3ViamVjdFwiLGMpfTtmdW5jdGlvbiBJZyhhKXtyZXR1cm4gZnVuY3Rpb24oKXtmb3IodmFyIGI9W10sYz10aGlzLkYsZD0wO2Q8YXJndW1lbnRzLmxlbmd0aDsrK2QpYi5wdXNoKEooYXJndW1lbnRzW2RdLGMpKTtyZXR1cm4gZGQoYS5hcHBseShudWxsLGIpKX19ZnVuY3Rpb24gSmcoKXtmb3IodmFyIGE9TWF0aCxiPUtnLGM9e30sZD0wO2Q8Yi5sZW5ndGg7ZCsrKXt2YXIgZT1iW2RdO2EuaGFzT3duUHJvcGVydHkoZSkmJihjW2VdPUlnKGFbZV0uYmluZChhKSkpfXJldHVybiBjfTtmdW5jdGlvbiBMZyhhKXt2YXIgYjtyZXR1cm4gYn07ZnVuY3Rpb24gTWcoYSl7dmFyIGI7cmV0dXJuIGJ9O2Z1bmN0aW9uIE5nKGEpe3RyeXtyZXR1cm4gZW5jb2RlVVJJKGEpfWNhdGNoKGIpe319O2Z1bmN0aW9uIE9nKGEpe3RyeXtyZXR1cm4gZW5jb2RlVVJJQ29tcG9uZW50KGEpfWNhdGNoKGIpe319O1xudmFyIFBnPWZ1bmN0aW9uKGEsYil7Zm9yKHZhciBjPTA7YzxiLmxlbmd0aDtjKyspe2lmKGE9PT12b2lkIDApcmV0dXJuO2E9YVtiW2NdXX1yZXR1cm4gYX0sUWc9ZnVuY3Rpb24oYSxiKXt2YXIgYz1iLnByZUhpdDtpZihjKXt2YXIgZD1hWzBdO3N3aXRjaChkKXtjYXNlIFwiaGl0RGF0YVwiOnJldHVybiBhLmxlbmd0aDwyP3ZvaWQgMDpQZyhjLmdldEhpdERhdGEoYVsxXSksYS5zbGljZSgyKSk7Y2FzZSBcIm1ldGFkYXRhXCI6cmV0dXJuIGEubGVuZ3RoPDI/dm9pZCAwOlBnKGMuZ2V0TWV0YWRhdGEoYVsxXSksYS5zbGljZSgyKSk7Y2FzZSBcImV2ZW50TmFtZVwiOnJldHVybiBjLmdldEV2ZW50TmFtZSgpO2Nhc2UgXCJkZXN0aW5hdGlvbklkXCI6cmV0dXJuIGMuZ2V0RGVzdGluYXRpb25JZCgpO2RlZmF1bHQ6dGhyb3cgRXJyb3IoZCtcIiBpcyBub3QgYSB2YWxpZCBmaWVsZCB0aGF0IGNhbiBiZSBhY2Nlc3NlZFxcbiAgICAgICAgICAgICAgICAgICAgICBmcm9tIFByZUhpdCBkYXRhLlwiKTt9fX0sXG5TZz1mdW5jdGlvbihhLGIpe2lmKGEpe2lmKGEuY29udGV4dFZhbHVlIT09dm9pZCAwKXt2YXIgYzthOnt2YXIgZD1hLmNvbnRleHRWYWx1ZSxlPWQua2V5UGFydHM7aWYoZSYmZS5sZW5ndGghPT0wKXt2YXIgZj1kLm5hbWVzcGFjZVR5cGU7c3dpdGNoKGYpe2Nhc2UgMTpjPVFnKGUsYik7YnJlYWsgYTtjYXNlIDI6dmFyIGc9Yi5tYWNybztjPWc/Z1tlWzBdXTp2b2lkIDA7YnJlYWsgYTtkZWZhdWx0OnRocm93IEVycm9yKFwiVW5rbm93biBOYW1lc3BhY2UgVHlwZSB1c2VkOiBcIitmKTt9fWM9dm9pZCAwfXJldHVybiBjfWlmKGEuYm9vbGVhbkV4cHJlc3Npb25WYWx1ZSE9PXZvaWQgMClyZXR1cm4gUmcoYS5ib29sZWFuRXhwcmVzc2lvblZhbHVlLGIpO2lmKGEuYm9vbGVhblZhbHVlIT09dm9pZCAwKXJldHVybiEhYS5ib29sZWFuVmFsdWU7aWYoYS5zdHJpbmdWYWx1ZSE9PXZvaWQgMClyZXR1cm4gU3RyaW5nKGEuc3RyaW5nVmFsdWUpO2lmKGEuaW50ZWdlclZhbHVlIT09dm9pZCAwKXJldHVybiBOdW1iZXIoYS5pbnRlZ2VyVmFsdWUpO1xuaWYoYS5kb3VibGVWYWx1ZSE9PXZvaWQgMClyZXR1cm4gTnVtYmVyKGEuZG91YmxlVmFsdWUpO3Rocm93IEVycm9yKFwiVW5rbm93biBmaWVsZCB1c2VkIGZvciB2YXJpYWJsZSBvZiB0eXBlIEV4cHJlc3Npb25WYWx1ZTpcIithKTt9fSxSZz1mdW5jdGlvbihhLGIpe3ZhciBjPWEuYXJncztpZighQXJyYXkuaXNBcnJheShjKXx8Yy5sZW5ndGg9PT0wKXRocm93IEVycm9yKCdJbnZhbGlkIGJvb2xlYW4gZXhwcmVzc2lvbiBmb3JtYXQuIEV4cGVjdGVkIFwiYXJnc1wiOicrYytcIiBwcm9wZXJ0eSB0b1xcbiAgICAgICAgIGJlIG5vbi1lbXB0eSBhcnJheS5cIik7dmFyIGQ9ZnVuY3Rpb24oZyl7cmV0dXJuIFNnKGcsYil9O3N3aXRjaChhLnR5cGUpe2Nhc2UgMTpmb3IodmFyIGU9MDtlPGMubGVuZ3RoO2UrKylpZihkKGNbZV0pKXJldHVybiEwO3JldHVybiExO2Nhc2UgMjpmb3IodmFyIGY9MDtmPGMubGVuZ3RoO2YrKylpZighZChjW2ZdKSlyZXR1cm4hMTtyZXR1cm4gYy5sZW5ndGg+MDtjYXNlIDM6cmV0dXJuIWQoY1swXSk7XG5jYXNlIDQ6cmV0dXJuIG1nKGQoY1swXSksZChjWzFdKSwhMSk7Y2FzZSA1OnJldHVybiBvZyhkKGNbMF0pLGQoY1sxXSkpO2Nhc2UgNjpyZXR1cm4gdGcoZChjWzBdKSxkKGNbMV0pKTtjYXNlIDc6cmV0dXJuIGtnKGQoY1swXSksZChjWzFdKSk7Y2FzZSA4OnJldHVybiBuZyhkKGNbMF0pLGQoY1sxXSkpO2Nhc2UgOTpyZXR1cm4gc2coZChjWzBdKSxkKGNbMV0pKTtjYXNlIDEwOnJldHVybiBxZyhkKGNbMF0pLGQoY1sxXSkpO2Nhc2UgMTE6cmV0dXJuIHJnKGQoY1swXSksZChjWzFdKSk7Y2FzZSAxMjpyZXR1cm4gcGcoZChjWzBdKSxkKGNbMV0pKTtkZWZhdWx0OnRocm93IEVycm9yKCdJbnZhbGlkIGJvb2xlYW4gZXhwcmVzc2lvbiBmb3JtYXQuIEV4cGVjdGVkIFwidHlwZVwiIHByb3BlcnR5IHRvYmUgYSBwb3NpdGl2ZSBpbnRlZ2VyIHdoaWNoIGlzIGxlc3MgdGhhbiAxMy4nKTt9fTtmdW5jdGlvbiBUZyhhKXtLKHRoaXMuZ2V0TmFtZSgpLFtcIm1lc3NhZ2U6P3N0cmluZ1wiXSxhcmd1bWVudHMpO307ZnVuY3Rpb24gVWcoYSxiKXtLKHRoaXMuZ2V0TmFtZSgpLFtcIm1pbjohbnVtYmVyXCIsXCJtYXg6IW51bWJlclwiXSxhcmd1bWVudHMpO3JldHVybiBzYihhLGIpfTtmdW5jdGlvbiBWZygpe3JldHVybihuZXcgRGF0ZSkuZ2V0VGltZSgpfTtmdW5jdGlvbiBXZyhhKXtpZihhPT09bnVsbClyZXR1cm5cIm51bGxcIjtpZihhIGluc3RhbmNlb2YgV2EpcmV0dXJuXCJhcnJheVwiO2lmKGEgaW5zdGFuY2VvZiBXYylyZXR1cm5cImZ1bmN0aW9uXCI7aWYoYSBpbnN0YW5jZW9mIGFkKXt2YXIgYjthPShiPWEpPT1udWxsP3ZvaWQgMDpiLmdldFZhbHVlKCk7dmFyIGM7aWYoKChjPWEpPT1udWxsP3ZvaWQgMDpjLmNvbnN0cnVjdG9yKT09PXZvaWQgMHx8YS5jb25zdHJ1Y3Rvci5uYW1lPT09dm9pZCAwKXt2YXIgZD1TdHJpbmcoYSk7cmV0dXJuIGQuc3Vic3RyaW5nKDgsZC5sZW5ndGgtMSl9cmV0dXJuIFN0cmluZyhhLmNvbnN0cnVjdG9yLm5hbWUpfXJldHVybiB0eXBlb2YgYX07ZnVuY3Rpb24gWGcoYSl7ZnVuY3Rpb24gYihjKXtyZXR1cm4gZnVuY3Rpb24oZCl7dHJ5e3JldHVybiBjKGQpfWNhdGNoKGUpeyhUZnx8VWYuZ2spJiZhLmNhbGwodGhpcyxlLm1lc3NhZ2UpfX19cmV0dXJue3BhcnNlOmIoZnVuY3Rpb24oYyl7cmV0dXJuIGRkKEpTT04ucGFyc2UoYykpfSksc3RyaW5naWZ5OmIoZnVuY3Rpb24oYyl7cmV0dXJuIEpTT04uc3RyaW5naWZ5KEooYykpfSl9fTtmdW5jdGlvbiBZZyhhKXtyZXR1cm4gd2IoSihhLHRoaXMuRikpfTtmdW5jdGlvbiBaZyhhKXtyZXR1cm4gTnVtYmVyKEooYSx0aGlzLkYpKX07ZnVuY3Rpb24gJGcoYSl7cmV0dXJuIGE9PT1udWxsP1wibnVsbFwiOmE9PT12b2lkIDA/XCJ1bmRlZmluZWRcIjphLnRvU3RyaW5nKCl9O2Z1bmN0aW9uIGFoKGEsYixjKXt2YXIgZD1udWxsLGU9ITE7cmV0dXJuIGU/ZDpudWxsfTt2YXIgS2c9XCJmbG9vciBjZWlsIHJvdW5kIG1heCBtaW4gYWJzIHBvdyBzcXJ0XCIuc3BsaXQoXCIgXCIpO2Z1bmN0aW9uIGJoKCl7dmFyIGE9e307cmV0dXJue0hsOmZ1bmN0aW9uKGIpe3JldHVybiBhLmhhc093blByb3BlcnR5KGIpP2FbYl06dm9pZCAwfSxkazpmdW5jdGlvbihiLGMpe2FbYl09Y30scmVzZXQ6ZnVuY3Rpb24oKXthPXt9fX19ZnVuY3Rpb24gY2goYSxiKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgYz1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbCh6YS5hcHBseSgwLGFyZ3VtZW50cyksMCk7Yy51bnNoaWZ0KGIpO3JldHVybiBXYy5wcm90b3R5cGUuaW52b2tlLmFwcGx5KGEsYyl9fVxuZnVuY3Rpb24gZGgoYSxiKXtLKHRoaXMuZ2V0TmFtZSgpLFtcImFwaU5hbWU6IXN0cmluZ1wiLFwibW9jazo/KlwiXSxhcmd1bWVudHMpO31cbmZ1bmN0aW9uIGVoKGEsYil7Syh0aGlzLmdldE5hbWUoKSxbXCJhcGlOYW1lOiFzdHJpbmdcIixcIm1vY2s6IVBpeGllTWFwXCJdLGFyZ3VtZW50cyk7fTt2YXIgZmg9e307dmFyIGdoPWZ1bmN0aW9uKGEpe3ZhciBiPW5ldyBZYTtpZihhIGluc3RhbmNlb2YgV2EpZm9yKHZhciBjPWEuTmIoKSxkPTA7ZDxjLmxlbmd0aCgpO2QrKyl7dmFyIGU9Yy5nZXQoZCk7YS5oYXMoZSkmJmIuc2V0KGUsYS5nZXQoZSkpfWVsc2UgaWYoYSBpbnN0YW5jZW9mIFdjKWZvcih2YXIgZj1OYShhLDEpLGc9MDtnPGYubGVuZ3RoO2crKyl7dmFyIGs9ZltnXTtiLnNldChrLGEuZ2V0KGspKX1lbHNlIGZvcih2YXIgbT0wO208YS5sZW5ndGg7bSsrKWIuc2V0KG0sYVttXSk7cmV0dXJuIGJ9O1xuZmgua2V5cz1mdW5jdGlvbihhKXtLKHRoaXMuZ2V0TmFtZSgpLFtcImlucHV0OiEqXCJdLGFyZ3VtZW50cyk7aWYoYSBpbnN0YW5jZW9mIFdhfHxhIGluc3RhbmNlb2YgV2N8fHR5cGVvZiBhPT09XCJzdHJpbmdcIilhPWdoKGEpO2lmKGEgaW5zdGFuY2VvZiBZYSlyZXR1cm4gYS5OYigpO3JldHVybiBuZXcgV2F9O1xuZmgudmFsdWVzPWZ1bmN0aW9uKGEpe0sodGhpcy5nZXROYW1lKCksW1wiaW5wdXQ6ISpcIl0sYXJndW1lbnRzKTtpZihhIGluc3RhbmNlb2YgV2F8fGEgaW5zdGFuY2VvZiBXY3x8dHlwZW9mIGE9PT1cInN0cmluZ1wiKWE9Z2goYSk7aWYoYSBpbnN0YW5jZW9mIFlhKXJldHVybiBuZXcgV2EoTmEoYSwyKSk7cmV0dXJuIG5ldyBXYX07XG5maC5lbnRyaWVzPWZ1bmN0aW9uKGEpe0sodGhpcy5nZXROYW1lKCksW1wiaW5wdXQ6ISpcIl0sYXJndW1lbnRzKTtpZihhIGluc3RhbmNlb2YgV2F8fGEgaW5zdGFuY2VvZiBXY3x8dHlwZW9mIGE9PT1cInN0cmluZ1wiKWE9Z2goYSk7aWYoYSBpbnN0YW5jZW9mIFlhKXJldHVybiBaYShhKTtyZXR1cm4gbmV3IFdhfTtmaC5mcmVlemU9ZnVuY3Rpb24oYSl7KGEgaW5zdGFuY2VvZiBZYXx8YSBpbnN0YW5jZW9mIFdhfHxhIGluc3RhbmNlb2YgV2MpJiZhLkthKCk7cmV0dXJuIGF9O1xuZmguZGVsZXRlPWZ1bmN0aW9uKGEsYil7aWYoYSBpbnN0YW5jZW9mIFlhJiYhYS5EKXJldHVybiBhLnJlbW92ZShiKSwhMDtyZXR1cm4hMX07ZnVuY3Rpb24gTChhLGIpe3ZhciBjPXphLmFwcGx5KDIsYXJndW1lbnRzKSxkPWEuRi5qO2lmKCFkKXRocm93IEVycm9yKFwiTWlzc2luZyBwcm9ncmFtIHN0YXRlLlwiKTtpZihkLkptKXt0cnl7ZC5Bai5hcHBseShudWxsLFtiXS5jb25jYXQocGEoYykpKX1jYXRjaChlKXt0aHJvdyBoYihcIlRBR0dJTkdcIiwyMSksZTt9cmV0dXJufWQuQWouYXBwbHkobnVsbCxbYl0uY29uY2F0KHBhKGMpKSl9O3ZhciBoaD1mdW5jdGlvbigpe3RoaXMuRD17fTt0aGlzLmo9e307dGhpcy5IPSEwO307aGgucHJvdG90eXBlLmdldD1mdW5jdGlvbihhLGIpe3ZhciBjPXRoaXMuY29udGFpbnMoYSk/dGhpcy5EW2FdOnZvaWQgMDtyZXR1cm4gY307aGgucHJvdG90eXBlLmNvbnRhaW5zPWZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLkQuaGFzT3duUHJvcGVydHkoYSl9O1xuaGgucHJvdG90eXBlLmFkZD1mdW5jdGlvbihhLGIsYyl7aWYodGhpcy5jb250YWlucyhhKSl0aHJvdyBFcnJvcihcIkF0dGVtcHRpbmcgdG8gYWRkIGEgZnVuY3Rpb24gd2hpY2ggYWxyZWFkeSBleGlzdHM6IFwiK2ErXCIuXCIpO2lmKHRoaXMuai5oYXNPd25Qcm9wZXJ0eShhKSl0aHJvdyBFcnJvcihcIkF0dGVtcHRpbmcgdG8gYWRkIGFuIEFQSSB3aXRoIGFuIGV4aXN0aW5nIHByaXZhdGUgQVBJIG5hbWU6IFwiK2ErXCIuXCIpO3RoaXMuRFthXT1jP3ZvaWQgMDpvYihiKT9FZyhhLGIpOkZnKGEsYil9O2Z1bmN0aW9uIGloKGEsYil7dmFyIGM9dm9pZCAwO3JldHVybiBjfTtmdW5jdGlvbiBqaCgpe3ZhciBhPXt9O1xucmV0dXJuIGF9O3ZhciBsaD1mdW5jdGlvbihhKXtyZXR1cm4ga2g/RS5xdWVyeVNlbGVjdG9yQWxsKGEpOm51bGx9O1xuZnVuY3Rpb24gbWgoYSxiKXtpZigha2gpcmV0dXJuIG51bGw7aWYoRWxlbWVudC5wcm90b3R5cGUuY2xvc2VzdCl0cnl7cmV0dXJuIGEuY2xvc2VzdChiKX1jYXRjaChlKXtyZXR1cm4gbnVsbH12YXIgYz1FbGVtZW50LnByb3RvdHlwZS5tYXRjaGVzfHxFbGVtZW50LnByb3RvdHlwZS53ZWJraXRNYXRjaGVzU2VsZWN0b3J8fEVsZW1lbnQucHJvdG90eXBlLm1vek1hdGNoZXNTZWxlY3Rvcnx8RWxlbWVudC5wcm90b3R5cGUubXNNYXRjaGVzU2VsZWN0b3J8fEVsZW1lbnQucHJvdG90eXBlLm9NYXRjaGVzU2VsZWN0b3IsZD1hO2lmKCFFLmRvY3VtZW50RWxlbWVudC5jb250YWlucyhkKSlyZXR1cm4gbnVsbDtkb3t0cnl7aWYoYy5jYWxsKGQsYikpcmV0dXJuIGR9Y2F0Y2goZSl7YnJlYWt9ZD1kLnBhcmVudEVsZW1lbnR8fGQucGFyZW50Tm9kZX13aGlsZShkIT09bnVsbCYmZC5ub2RlVHlwZT09PTEpO3JldHVybiBudWxsfXZhciBuaD0hMTtcbmlmKEUucXVlcnlTZWxlY3RvckFsbCl0cnl7dmFyIG9oPUUucXVlcnlTZWxlY3RvckFsbChcIjpyb290XCIpO29oJiZvaC5sZW5ndGg9PTEmJm9oWzBdPT1FLmRvY3VtZW50RWxlbWVudCYmKG5oPSEwKX1jYXRjaChhKXt9dmFyIGtoPW5oO3ZhciBwaD0vXlswLTlBLUZhLWZdezY0fSQvO2Z1bmN0aW9uIHFoKGEpe3RyeXtyZXR1cm4obmV3IFRleHRFbmNvZGVyKS5lbmNvZGUoYSl9Y2F0Y2goZSl7Zm9yKHZhciBiPVtdLGM9MDtjPGEubGVuZ3RoO2MrKyl7dmFyIGQ9YS5jaGFyQ29kZUF0KGMpO2Q8MTI4P2IucHVzaChkKTpkPDIwNDg/Yi5wdXNoKDE5MnxkPj42LDEyOHxkJjYzKTpkPDU1Mjk2fHxkPj01NzM0ND9iLnB1c2goMjI0fGQ+PjEyLDEyOHxkPj42JjYzLDEyOHxkJjYzKTooZD02NTUzNisoKGQmMTAyMyk8PDEwfGEuY2hhckNvZGVBdCgrK2MpJjEwMjMpLGIucHVzaCgyNDB8ZD4+MTgsMTI4fGQ+PjEyJjYzLDEyOHxkPj42JjYzLDEyOHxkJjYzKSl9cmV0dXJuIG5ldyBVaW50OEFycmF5KGIpfX1cbmZ1bmN0aW9uIHJoKGEpe2lmKGE9PT1cIlwifHxhPT09XCJlMFwiKXJldHVybiBQcm9taXNlLnJlc29sdmUoYSk7dmFyIGI7aWYoKGI9RC5jcnlwdG8pPT1udWxsPzA6Yi5zdWJ0bGUpe2lmKHBoLnRlc3QoYSkpcmV0dXJuIFByb21pc2UucmVzb2x2ZShhKTt0cnl7dmFyIGM9cWgoYSk7cmV0dXJuIEQuY3J5cHRvLnN1YnRsZS5kaWdlc3QoXCJTSEEtMjU2XCIsYykudGhlbihmdW5jdGlvbihkKXt2YXIgZT1BcnJheS5mcm9tKG5ldyBVaW50OEFycmF5KGQpKS5tYXAoZnVuY3Rpb24oZil7cmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUoZil9KS5qb2luKFwiXCIpO3JldHVybiBELmJ0b2EoZSkucmVwbGFjZSgvXFwrL2csXCItXCIpLnJlcGxhY2UoL1xcLy9nLFwiX1wiKS5yZXBsYWNlKC89KyQvLFwiXCIpfSkuY2F0Y2goZnVuY3Rpb24oKXtyZXR1cm5cImUyXCJ9KX1jYXRjaChkKXtyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKFwiZTJcIil9fWVsc2UgcmV0dXJuIFByb21pc2UucmVzb2x2ZShcImUxXCIpfTtmdW5jdGlvbiBNKGEpe2hiKFwiR1RNXCIsYSl9O1xudmFyIHZoPWZ1bmN0aW9uKGEpe3ZhciBiPXt9LGM9W1widHYuMVwiXSxkPTA7dmFyIHU9Yy5qb2luKFwiflwiKTtyZXR1cm57T2g6e3VzZXJEYXRhOmJ9LFxuVm06dSxnbjpkfX0seGg9ZnVuY3Rpb24oYSl7aWYoRC5Qcm9taXNlKXRyeXtyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24oYil7d2goYSxmdW5jdGlvbihjLGQpe2Ioe1BqOmMsVGU6ZH0pfSl9KX1jYXRjaChiKXt9fSx5aD1mdW5jdGlvbihhKXtmb3IodmFyIGI9W1widHYuMVwiXSxjPTAsZD0wO2Q8YS5sZW5ndGg7KytkKXt2YXIgZT1hW2RdLm5hbWUsZj1hW2RdLnZhbHVlLGc9YVtkXS5pbmRleCxrPXNoW2VdO2smJmYmJih0aC5pbmRleE9mKGUpPT09LTF8fC9eZVxcZCskLy50ZXN0KGYpfHx1aC50ZXN0KGYpfHxwaC50ZXN0KGYpKSYmKGchPT12b2lkIDAmJihrKz1nKSxiLnB1c2goaytcIi5cIitmKSxjKyspfWEubGVuZ3RoPT09MSYmYVswXS5uYW1lPT09XCJlcnJvcl9jb2RlXCImJihjPTApO3JldHVybntRajplbmNvZGVVUklDb21wb25lbnQoYi5qb2luKFwiflwiKSksVGU6Y319LHdoPWZ1bmN0aW9uKGEsYil7emgoYSxmdW5jdGlvbihjKXt2YXIgZD15aChjKTtiKGQuUWosZC5UZSl9KX0sXG5IaD1mdW5jdGlvbihhKXtmdW5jdGlvbiBiKHIsdCx1LHYpe3ZhciB3PUFoKHIpO3chPT1cIlwiJiYocGgudGVzdCh3KT9rLnB1c2goe25hbWU6dCx2YWx1ZTp3LGluZGV4OnZ9KTprLnB1c2goe25hbWU6dCx2YWx1ZTp1KHcpLGluZGV4OnZ9KSl9ZnVuY3Rpb24gYyhyLHQpe3ZhciB1PXI7aWYobCh1KXx8QXJyYXkuaXNBcnJheSh1KSl7dT1xYihyKTtmb3IodmFyIHY9MDt2PHUubGVuZ3RoOysrdil7dmFyIHc9QWgodVt2XSkseD1waC50ZXN0KHcpO3QmJiF4JiZNKDg5KTshdCYmeCYmTSg4OCl9fX1mdW5jdGlvbiBkKHIsdCl7dmFyIHU9clt0XTtjKHUsITEpO3ZhciB2PUJoW3RdO3Jbdl0mJihyW3RdJiZNKDkwKSx1PXJbdl0sYyh1LCEwKSk7cmV0dXJuIHV9ZnVuY3Rpb24gZShyLHQsdSl7Zm9yKHZhciB2PXFiKGQocix0KSksdz0wO3c8di5sZW5ndGg7Kyt3KWIodlt3XSx0LHUpfWZ1bmN0aW9uIGYocix0LHUsdil7dmFyIHc9ZChyLHQpO2Iodyx0LHUsdil9ZnVuY3Rpb24gZyhyKXtyZXR1cm4gZnVuY3Rpb24odCl7TSg2NCk7XG5yZXR1cm4gcih0KX19dmFyIGs9W107aWYoRC5sb2NhdGlvbi5wcm90b2NvbCE9PVwiaHR0cHM6XCIpcmV0dXJuIGsucHVzaCh7bmFtZTpcImVycm9yX2NvZGVcIix2YWx1ZTpcImUzXCIsaW5kZXg6dm9pZCAwfSksaztlKGEsXCJlbWFpbFwiLENoKTtlKGEsXCJwaG9uZV9udW1iZXJcIixEaCk7ZShhLFwiZmlyc3RfbmFtZVwiLGcoRWgpKTtlKGEsXCJsYXN0X25hbWVcIixnKEVoKSk7dmFyIG09YS5ob21lX2FkZHJlc3N8fHt9O2UobSxcInN0cmVldFwiLGcoRmgpKTtlKG0sXCJjaXR5XCIsZyhGaCkpO2UobSxcInBvc3RhbF9jb2RlXCIsZyhHaCkpO2UobSxcInJlZ2lvblwiLGcoRmgpKTtlKG0sXCJjb3VudHJ5XCIsZyhHaCkpO2Zvcih2YXIgbj1xYihhLmFkZHJlc3N8fHt9KSxwPTA7cDxuLmxlbmd0aDtwKyspe3ZhciBxPW5bcF07ZihxLFwiZmlyc3RfbmFtZVwiLEVoLHApO2YocSxcImxhc3RfbmFtZVwiLEVoLHApO2YocSxcInN0cmVldFwiLEZoLHApO2YocSxcImNpdHlcIixGaCxwKTtmKHEsXCJwb3N0YWxfY29kZVwiLEdoLHApO2YocSxcInJlZ2lvblwiLFxuRmgscCk7ZihxLFwiY291bnRyeVwiLEdoLHApfXJldHVybiBrfSx6aD1mdW5jdGlvbihhLGIpe3ZhciBjPUhoKGEpO0loKGMsYil9LEFoPWZ1bmN0aW9uKGEpe3JldHVybiBhPT1udWxsP1wiXCI6bChhKT96YihTdHJpbmcoYSkpOlwiZTBcIn0sR2g9ZnVuY3Rpb24oYSl7cmV0dXJuIGEucmVwbGFjZShKaCxcIlwiKX0sRWg9ZnVuY3Rpb24oYSl7cmV0dXJuIEZoKGEucmVwbGFjZSgvXFxzL2csXCJcIikpfSxGaD1mdW5jdGlvbihhKXtyZXR1cm4gemIoYS5yZXBsYWNlKEtoLFwiXCIpLnRvTG93ZXJDYXNlKCkpfSxEaD1mdW5jdGlvbihhKXthPWEucmVwbGFjZSgvW1xccy0oKS8uXS9nLFwiXCIpO2EuY2hhckF0KDApIT09XCIrXCImJihhPVwiK1wiK2EpO3JldHVybiBMaC50ZXN0KGEpP2E6XCJlMFwifSxDaD1mdW5jdGlvbihhKXt2YXIgYj1hLnRvTG93ZXJDYXNlKCkuc3BsaXQoXCJAXCIpO2lmKGIubGVuZ3RoPT09Mil7dmFyIGM9YlswXTsvXihnbWFpbHxnb29nbGVtYWlsKVxcLi8udGVzdChiWzFdKSYmKGM9Yy5yZXBsYWNlKC9cXC4vZyxcblwiXCIpKTtjPWMrXCJAXCIrYlsxXTtpZihNaC50ZXN0KGMpKXJldHVybiBjfXJldHVyblwiZTBcIn0sSWg9ZnVuY3Rpb24oYSxiKXthLnNvbWUoZnVuY3Rpb24oYyl7Yy52YWx1ZSYmdGguaW5kZXhPZihjLm5hbWUpfSk/YihhKTpELlByb21pc2U/UHJvbWlzZS5hbGwoYS5tYXAoZnVuY3Rpb24oYyl7cmV0dXJuIGMudmFsdWUmJnRoLmluZGV4T2YoYy5uYW1lKSE9PS0xP3JoKGMudmFsdWUpLnRoZW4oZnVuY3Rpb24oZCl7Yy52YWx1ZT1kfSk6UHJvbWlzZS5yZXNvbHZlKCl9KSkudGhlbihmdW5jdGlvbigpe2IoYSl9KS5jYXRjaChmdW5jdGlvbigpe2IoW10pfSk6YihbXSl9LEtoPS9bMC05YH4hQCMkJV4mKigpX1xcLSs9Ojs8PiwuP3wvXFxcXFtcXF1dL2csTWg9L15cXFMrQFxcUytcXC5cXFMrJC8sTGg9L15cXCtcXGR7MTAsMTV9JC8sSmg9L1sufl0vZyx1aD0vXlswLTlBLVphLXpfLV17NDN9JC8sTmg9e30sc2g9KE5oLmVtYWlsPVwiZW1cIixOaC5waG9uZV9udW1iZXI9XCJwblwiLE5oLmZpcnN0X25hbWU9XCJmblwiLFxuTmgubGFzdF9uYW1lPVwibG5cIixOaC5zdHJlZXQ9XCJzYVwiLE5oLmNpdHk9XCJjdFwiLE5oLnJlZ2lvbj1cInJnXCIsTmguY291bnRyeT1cImNvXCIsTmgucG9zdGFsX2NvZGU9XCJwY1wiLE5oLmVycm9yX2NvZGU9XCJlY1wiLE5oKSxPaD17fSxCaD0oT2guZW1haWw9XCJzaGEyNTZfZW1haWxfYWRkcmVzc1wiLE9oLnBob25lX251bWJlcj1cInNoYTI1Nl9waG9uZV9udW1iZXJcIixPaC5maXJzdF9uYW1lPVwic2hhMjU2X2ZpcnN0X25hbWVcIixPaC5sYXN0X25hbWU9XCJzaGEyNTZfbGFzdF9uYW1lXCIsT2guc3RyZWV0PVwic2hhMjU2X3N0cmVldFwiLE9oKSx0aD1PYmplY3QuZnJlZXplKFtcImVtYWlsXCIsXCJwaG9uZV9udW1iZXJcIixcImZpcnN0X25hbWVcIixcImxhc3RfbmFtZVwiLFwic3RyZWV0XCJdKTtmdW5jdGlvbiBQaChhLGIpe2lmKGE9PT1cIlwiKXJldHVybiBiO3ZhciBjPU51bWJlcihhKTtyZXR1cm4gaXNOYU4oYyk/YjpjfTt2YXIgUWg9W107ZnVuY3Rpb24gUmgoYSl7c3dpdGNoKGEpe2Nhc2UgMDpyZXR1cm4gMDtjYXNlIDQ0OnJldHVybiAxO2Nhc2UgNDU6cmV0dXJuIDI7Y2FzZSA0NjpyZXR1cm4gMTE7Y2FzZSA1MjpyZXR1cm4gMztjYXNlIDU5OnJldHVybiAxNDtjYXNlIDYyOnJldHVybiA0O2Nhc2UgNzE6cmV0dXJuIDc7Y2FzZSA4MTpyZXR1cm4gNTtjYXNlIDk0OnJldHVybiA2O2Nhc2UgOTU6cmV0dXJuIDEzO2Nhc2UgOTY6cmV0dXJuIDEwO2Nhc2UgOTg6cmV0dXJuIDg7Y2FzZSA5OTpyZXR1cm4gOX19ZnVuY3Rpb24gUChhKXtRaFthXT0hMDt2YXIgYj1SaChhKTtiIT09dm9pZCAwJiYoa2JbYl09ITApfVAoMzEpO1xuUCgyNyk7UCgyOCk7UCgyOSk7UCgzMCk7UCg0Nyk7UCg3NSk7UCg1Nik7UCgzNCk7UCgxNik7XG5QKDEwNSk7UCgxNSk7UCgxMTApO1xuUCgxMDQpO1AoNjMpO1xuUCg4Myk7UCg2KTtQKDQ4KTtcblAoNCk7UCg3OCk7XG5QKDEwMSk7UCg3MCk7UCg2OCk7UCg2OSk7XG5QKDgyKTtQKDgwKTtcblAoMTE0KTtQKDExMSk7UCg4MSk7XG5QKDUpO1AoNzEpO1AoMTgpO1xuUCg5NCk7bGJbMV09UGgoJzEnLDZFNCk7XG5sYlszXT1QaCgnMTAnLDEpO2xiWzJdPVBoKCcnLDUwKTtQKDI0KTtQKDEyKTtcblAoNjcpO1AoMTAyKTtcblAoOCk7XG5QKDUzKTtcblAoMjMpO1AoNDMpO1xuUCg4NCk7UCg5OCk7UCg5OSk7UCg5Nik7UCg4Nik7UCg1MCk7UCg1Mik7XG5QKDY1KTtQKDEzKTtQKDcyKTtQKDc5KTtQKDQwKTtQKDU5KTtmdW5jdGlvbiBRKGEpe3JldHVybiEhUWhbYV19dmFyIFQ9e2c6e3dhOlwiYWRfcGVyc29uYWxpemF0aW9uXCIsUDpcImFkX3N0b3JhZ2VcIixPOlwiYWRfdXNlcl9kYXRhXCIsVTpcImFuYWx5dGljc19zdG9yYWdlXCIsQ2I6XCJyZWdpb25cIixRYjpcImNvbnNlbnRfdXBkYXRlZFwiLFplOlwid2FpdF9mb3JfdXBkYXRlXCIsZWk6XCJhcHBfcmVtb3ZlXCIsZmk6XCJhcHBfc3RvcmVfcmVmdW5kXCIsZ2k6XCJhcHBfc3RvcmVfc3Vic2NyaXB0aW9uX2NhbmNlbFwiLGhpOlwiYXBwX3N0b3JlX3N1YnNjcmlwdGlvbl9jb252ZXJ0XCIsaWk6XCJhcHBfc3RvcmVfc3Vic2NyaXB0aW9uX3JlbmV3XCIsc2s6XCJjb25zZW50X3VwZGF0ZVwiLFlmOlwiYWRkX3BheW1lbnRfaW5mb1wiLFpmOlwiYWRkX3NoaXBwaW5nX2luZm9cIixqYzpcImFkZF90b19jYXJ0XCIsa2M6XCJyZW1vdmVfZnJvbV9jYXJ0XCIsY2c6XCJ2aWV3X2NhcnRcIixSYjpcImJlZ2luX2NoZWNrb3V0XCIsbWM6XCJzZWxlY3RfaXRlbVwiLGliOlwidmlld19pdGVtX2xpc3RcIixEYjpcInNlbGVjdF9wcm9tb3Rpb25cIixqYjpcInZpZXdfcHJvbW90aW9uXCIsXG5IYTpcInB1cmNoYXNlXCIsbmM6XCJyZWZ1bmRcIixMYTpcInZpZXdfaXRlbVwiLGRnOlwiYWRkX3RvX3dpc2hsaXN0XCIsdGs6XCJleGNlcHRpb25cIixqaTpcImZpcnN0X29wZW5cIixraTpcImZpcnN0X3Zpc2l0XCIsYmE6XCJndGFnLmNvbmZpZ1wiLFRhOlwiZ3RhZy5nZXRcIixsaTpcImluX2FwcF9wdXJjaGFzZVwiLFNiOlwicGFnZV92aWV3XCIsdWs6XCJzY3JlZW5fdmlld1wiLG1pOlwic2Vzc2lvbl9zdGFydFwiLHZrOlwidGltaW5nX2NvbXBsZXRlXCIsd2s6XCJ0cmFja19zb2NpYWxcIixNYzpcInVzZXJfZW5nYWdlbWVudFwiLHhrOlwidXNlcl9pZF91cGRhdGVcIixrYjpcImdjbGdiXCIsVWE6XCJnY2xpZFwiLG5pOlwiZ2NsZ3NcIixvaTpcImdjbGxwXCIscmk6XCJnY2xzdFwiLGZhOlwiYWRzX2RhdGFfcmVkYWN0aW9uXCIsc2k6XCJnYWRfc291cmNlXCIsdWk6XCJnYWRfc291cmNlX3NyY1wiLEVkOlwiZ2NsaWRfdXJsXCIsdmk6XCJnY2xzcmNcIixlZzpcImdicmFpZFwiLGFmOlwid2JyYWlkXCIsamE6XCJhbGxvd19hZF9wZXJzb25hbGl6YXRpb25fc2lnbmFsc1wiLGJmOlwiYWxsb3dfY3VzdG9tX3NjcmlwdHNcIixcbkZkOlwiYWxsb3dfZGlyZWN0X2dvb2dsZV9yZXF1ZXN0c1wiLGNmOlwiYWxsb3dfZGlzcGxheV9mZWF0dXJlc1wiLEdkOlwiYWxsb3dfZW5oYW5jZWRfY29udmVyc2lvbnNcIixsYjpcImFsbG93X2dvb2dsZV9zaWduYWxzXCIsQWE6XCJhbGxvd19pbnRlcmVzdF9ncm91cHNcIix5azpcImFwcF9pZFwiLHprOlwiYXBwX2luc3RhbGxlcl9pZFwiLEFrOlwiYXBwX25hbWVcIixCazpcImFwcF92ZXJzaW9uXCIsRWI6XCJhdWlkXCIsd2k6XCJhdXRvX2RldGVjdGlvbl9lbmFibGVkXCIsVGI6XCJhd19yZW1hcmtldGluZ1wiLGRmOlwiYXdfcmVtYXJrZXRpbmdfb25seVwiLEhkOlwiZGlzY291bnRcIixJZDpcImF3X2ZlZWRfY291bnRyeVwiLEpkOlwiYXdfZmVlZF9sYW5ndWFnZVwiLGRhOlwiaXRlbXNcIixLZDpcImF3X21lcmNoYW50X2lkXCIsZmc6XCJhd19iYXNrZXRfdHlwZVwiLE5jOlwiY2FtcGFpZ25fY29udGVudFwiLE9jOlwiY2FtcGFpZ25faWRcIixQYzpcImNhbXBhaWduX21lZGl1bVwiLFFjOlwiY2FtcGFpZ25fbmFtZVwiLFJjOlwiY2FtcGFpZ25cIixTYzpcImNhbXBhaWduX3NvdXJjZVwiLFxuVGM6XCJjYW1wYWlnbl90ZXJtXCIsbmI6XCJjbGllbnRfaWRcIix4aTpcInJuZFwiLGdnOlwiY29uc2VudF91cGRhdGVfdHlwZVwiLHlpOlwiY29udGVudF9ncm91cFwiLHppOlwiY29udGVudF90eXBlXCIsWGE6XCJjb252ZXJzaW9uX2Nvb2tpZV9wcmVmaXhcIixVYzpcImNvbnZlcnNpb25faWRcIixvYTpcImNvbnZlcnNpb25fbGlua2VyXCIsQWk6XCJjb252ZXJzaW9uX2xpbmtlcl9kaXNhYmxlZFwiLFViOlwiY29udmVyc2lvbl9hcGlcIixlZjpcImNvb2tpZV9kZXByZWNhdGlvblwiLFZhOlwiY29va2llX2RvbWFpblwiLE1hOlwiY29va2llX2V4cGlyZXNcIixZYTpcImNvb2tpZV9mbGFnc1wiLG9jOlwiY29va2llX25hbWVcIixGYjpcImNvb2tpZV9wYXRoXCIsTmE6XCJjb29raWVfcHJlZml4XCIscWM6XCJjb29raWVfdXBkYXRlXCIscmM6XCJjb3VudHJ5XCIseGE6XCJjdXJyZW5jeVwiLExkOlwiY3VzdG9tZXJfbGlmZXRpbWVfdmFsdWVcIixWYzpcImN1c3RvbV9tYXBcIixoZzpcImdjbGRjXCIsTWQ6XCJkY2xpZFwiLEJpOlwiZGVidWdfbW9kZVwiLGthOlwiZGV2ZWxvcGVyX2lkXCIsXG5DaTpcImRpc2FibGVfbWVyY2hhbnRfcmVwb3J0ZWRfcHVyY2hhc2VzXCIsV2M6XCJkY19jdXN0b21fcGFyYW1zXCIsRGk6XCJkY19uYXR1cmFsX3NlYXJjaFwiLGlnOlwiZHluYW1pY19ldmVudF9zZXR0aW5nc1wiLGpnOlwiYWZmaWxpYXRpb25cIixOZDpcImNoZWNrb3V0X29wdGlvblwiLGZmOlwiY2hlY2tvdXRfc3RlcFwiLGtnOlwiY291cG9uXCIsWGM6XCJpdGVtX2xpc3RfbmFtZVwiLGhmOlwibGlzdF9uYW1lXCIsRWk6XCJwcm9tb3Rpb25zXCIsWWM6XCJzaGlwcGluZ1wiLGpmOlwidGF4XCIsT2Q6XCJlbmdhZ2VtZW50X3RpbWVfbXNlY1wiLFBkOlwiZW5oYW5jZWRfY2xpZW50X2lkXCIsUWQ6XCJlbmhhbmNlZF9jb252ZXJzaW9uc1wiLGxnOlwiZW5oYW5jZWRfY29udmVyc2lvbnNfYXV0b21hdGljX3NldHRpbmdzXCIsUmQ6XCJlc3RpbWF0ZWRfZGVsaXZlcnlfZGF0ZVwiLGtmOlwiZXVpZF9sb2dnZWRfaW5fc3RhdGVcIixaYzpcImV2ZW50X2NhbGxiYWNrXCIsQ2s6XCJldmVudF9jYXRlZ29yeVwiLHBiOlwiZXZlbnRfZGV2ZWxvcGVyX2lkX3N0cmluZ1wiLFxuRGs6XCJldmVudF9sYWJlbFwiLHNjOlwiZXZlbnRcIixTZDpcImV2ZW50X3NldHRpbmdzXCIsVGQ6XCJldmVudF90aW1lb3V0XCIsRWs6XCJkZXNjcmlwdGlvblwiLEZrOlwiZmF0YWxcIixGaTpcImV4cGVyaW1lbnRzXCIsbGY6XCJmaXJlYmFzZV9pZFwiLHVjOlwiZmlyc3RfcGFydHlfY29sbGVjdGlvblwiLFVkOlwiX3hfMjBcIixxYjpcIl94XzE5XCIsR2k6XCJmbGVkZ2VfZHJvcF9yZWFzb25cIixtZzpcImZsZWRnZVwiLG5nOlwiZmxpZ2h0X2Vycm9yX2NvZGVcIixvZzpcImZsaWdodF9lcnJvcl9tZXNzYWdlXCIsSGk6XCJmbF9hY3Rpdml0eV9jYXRlZ29yeVwiLElpOlwiZmxfYWN0aXZpdHlfZ3JvdXBcIixwZzpcImZsX2FkdmVydGlzZXJfaWRcIixKaTpcImZsX2FyX2RlZHVwZVwiLHFnOlwibWF0Y2hfaWRcIixLaTpcImZsX3JhbmRvbV9udW1iZXJcIixMaTpcInRyYW5cIixNaTpcInVcIixWZDpcImdhY19nY2xpZFwiLHZjOlwiZ2FjX3dicmFpZFwiLHJnOlwiZ2FjX3dicmFpZF9tdWx0aXBsZV9jb252ZXJzaW9uc1wiLHNnOlwiZ2FfcmVzdHJpY3RfZG9tYWluXCIsdWc6XCJnYV90ZW1wX2NsaWVudF9pZFwiLFxuR2s6XCJnYV90ZW1wX2VjaWRcIix3YzpcImdkcHJfYXBwbGllc1wiLHZnOlwiZ2VvX2dyYW51bGFyaXR5XCIsR2I6XCJ2YWx1ZV9jYWxsYmFja1wiLHJiOlwidmFsdWVfa2V5XCIseGM6XCJfZ29vZ2xlX25nXCIseWM6XCJnb29nbGVfc2lnbmFsc1wiLHdnOlwiZ29vZ2xlX3RsZFwiLFdkOlwiZ3JvdXBzXCIseGc6XCJnc2FfZXhwZXJpbWVudF9pZFwiLE5pOlwiZ3RtX3VwXCIsSGI6XCJpZnJhbWVfc3RhdGVcIixiZDpcImlnbm9yZV9yZWZlcnJlclwiLG5mOlwiaW50ZXJuYWxfdHJhZmZpY19yZXN1bHRzXCIsVmI6XCJpc19sZWdhY3lfY29udmVydGVkXCIsSWI6XCJpc19sZWdhY3lfbG9hZGVkXCIsWGQ6XCJpc19wYXNzdGhyb3VnaFwiLGRkOlwiX2xwc1wiLE9hOlwibGFuZ3VhZ2VcIixZZDpcImxlZ2FjeV9kZXZlbG9wZXJfaWRfc3RyaW5nXCIscWE6XCJsaW5rZXJcIix6YzpcImFjY2VwdF9pbmNvbWluZ1wiLHRiOlwiZGVjb3JhdGVfZm9ybXNcIixXOlwiZG9tYWluc1wiLEpiOlwidXJsX3Bvc2l0aW9uXCIseWc6XCJtZXRob2RcIixIazpcIm5hbWVcIixlZDpcIm5ld19jdXN0b21lclwiLFxuemc6XCJub25faW50ZXJhY3Rpb25cIixPaTpcIm9wdGltaXplX2lkXCIsUGk6XCJwYWdlX2hvc3RuYW1lXCIsZmQ6XCJwYWdlX3BhdGhcIixCYTpcInBhZ2VfcmVmZXJyZXJcIixaYTpcInBhZ2VfdGl0bGVcIixBZzpcInBhc3NlbmdlcnNcIixCZzpcInBob25lX2NvbnZlcnNpb25fY2FsbGJhY2tcIixRaTpcInBob25lX2NvbnZlcnNpb25fY291bnRyeV9jb2RlXCIsQ2c6XCJwaG9uZV9jb252ZXJzaW9uX2Nzc19jbGFzc1wiLFJpOlwicGhvbmVfY29udmVyc2lvbl9pZHNcIixEZzpcInBob25lX2NvbnZlcnNpb25fbnVtYmVyXCIsRWc6XCJwaG9uZV9jb252ZXJzaW9uX29wdGlvbnNcIixGZzpcIl9wcm90ZWN0ZWRfYXVkaWVuY2VfZW5hYmxlZFwiLGdkOlwicXVhbnRpdHlcIixaZDpcInJlZGFjdF9kZXZpY2VfaW5mb1wiLHBmOlwicmVmZXJyYWxfZXhjbHVzaW9uX2RlZmluaXRpb25cIixXYjpcInJlc3RyaWN0ZWRfZGF0YV9wcm9jZXNzaW5nXCIsU2k6XCJyZXRva2VuXCIsSWs6XCJzYW1wbGVfcmF0ZVwiLHFmOlwic2NyZWVuX25hbWVcIixLYjpcInNjcmVlbl9yZXNvbHV0aW9uXCIsXG5UaTpcInNlYXJjaF90ZXJtXCIsSWE6XCJzZW5kX3BhZ2Vfdmlld1wiLFhiOlwic2VuZF90b1wiLGhkOlwic2VydmVyX2NvbnRhaW5lcl91cmxcIixqZDpcInNlc3Npb25fZHVyYXRpb25cIixhZTpcInNlc3Npb25fZW5nYWdlZFwiLHJmOlwic2Vzc2lvbl9lbmdhZ2VkX3RpbWVcIix1YjpcInNlc3Npb25faWRcIixiZTpcInNlc3Npb25fbnVtYmVyXCIsdGY6XCJfc2hhcmVkX3VzZXJfaWRcIixrZDpcImRlbGl2ZXJ5X3Bvc3RhbF9jb2RlXCIsSms6XCJ0ZW1wb3JhcnlfY2xpZW50X2lkXCIsdWY6XCJ0b3Btb3N0X3VybFwiLFVpOlwidHJhY2tpbmdfaWRcIix2ZjpcInRyYWZmaWNfdHlwZVwiLHlhOlwidHJhbnNhY3Rpb25faWRcIixMYjpcInRyYW5zcG9ydF91cmxcIixHZzpcInRyaXBfdHlwZVwiLFliOlwidXBkYXRlXCIsV2E6XCJ1cmxfcGFzc3Rocm91Z2hcIix3ZjpcIl91c2VyX2FnZW50X2FyY2hpdGVjdHVyZVwiLHhmOlwiX3VzZXJfYWdlbnRfYml0bmVzc1wiLHlmOlwiX3VzZXJfYWdlbnRfZnVsbF92ZXJzaW9uX2xpc3RcIix6ZjpcIl91c2VyX2FnZW50X21vYmlsZVwiLFxuQWY6XCJfdXNlcl9hZ2VudF9tb2RlbFwiLEJmOlwiX3VzZXJfYWdlbnRfcGxhdGZvcm1cIixDZjpcIl91c2VyX2FnZW50X3BsYXRmb3JtX3ZlcnNpb25cIixEZjpcIl91c2VyX2FnZW50X3dvdzY0XCIsQ2E6XCJ1c2VyX2RhdGFcIixIZzpcInVzZXJfZGF0YV9hdXRvX2xhdGVuY3lcIixJZzpcInVzZXJfZGF0YV9hdXRvX21ldGFcIixKZzpcInVzZXJfZGF0YV9hdXRvX211bHRpXCIsS2c6XCJ1c2VyX2RhdGFfYXV0b19zZWxlY3RvcnNcIixMZzpcInVzZXJfZGF0YV9hdXRvX3N0YXR1c1wiLGxkOlwidXNlcl9kYXRhX21vZGVcIixkZTpcInVzZXJfZGF0YV9zZXR0aW5nc1wiLHphOlwidXNlcl9pZFwiLGFiOlwidXNlcl9wcm9wZXJ0aWVzXCIsVmk6XCJfdXNlcl9yZWdpb25cIixlZTpcInVzX3ByaXZhY3lfc3RyaW5nXCIsbGE6XCJ2YWx1ZVwiLE1nOlwid2JyYWlkX211bHRpcGxlX2NvbnZlcnNpb25zXCIsaWU6XCJfZnBtX3BhcmFtZXRlcnNcIixjajpcIl9ob3N0X25hbWVcIixkajpcIl9pbl9wYWdlX2NvbW1hbmRcIixlajpcIl9pc19wYXNzdGhyb3VnaF9jaWRcIixcbk1iOlwibm9uX3BlcnNvbmFsaXplZF9hZHNcIixxZTpcIl9zc3RfcGFyYW1ldGVyc1wiLG9iOlwiY29udmVyc2lvbl9sYWJlbFwiLHJhOlwicGFnZV9sb2NhdGlvblwiLHNiOlwiZ2xvYmFsX2RldmVsb3Blcl9pZF9zdHJpbmdcIixBYzpcInRjX3ByaXZhY3lfc3RyaW5nXCJ9fSxTaD17fSxUaD1PYmplY3QuZnJlZXplKChTaFtULmcuamFdPTEsU2hbVC5nLmNmXT0xLFNoW1QuZy5HZF09MSxTaFtULmcubGJdPTEsU2hbVC5nLmRhXT0xLFNoW1QuZy5WYV09MSxTaFtULmcuTWFdPTEsU2hbVC5nLllhXT0xLFNoW1QuZy5vY109MSxTaFtULmcuRmJdPTEsU2hbVC5nLk5hXT0xLFNoW1QuZy5xY109MSxTaFtULmcuVmNdPTEsU2hbVC5nLmthXT0xLFNoW1QuZy5pZ109MSxTaFtULmcuWmNdPTEsU2hbVC5nLlNkXT0xLFNoW1QuZy5UZF09MSxTaFtULmcudWNdPTEsU2hbVC5nLnNnXT0xLFNoW1QuZy55Y109MSxTaFtULmcud2ddPTEsU2hbVC5nLldkXT0xLFNoW1QuZy5uZl09MSxTaFtULmcuVmJdPTEsU2hbVC5nLkliXT1cbjEsU2hbVC5nLnFhXT0xLFNoW1QuZy5wZl09MSxTaFtULmcuV2JdPTEsU2hbVC5nLklhXT0xLFNoW1QuZy5YYl09MSxTaFtULmcuaGRdPTEsU2hbVC5nLmpkXT0xLFNoW1QuZy5yZl09MSxTaFtULmcua2RdPTEsU2hbVC5nLkxiXT0xLFNoW1QuZy5ZYl09MSxTaFtULmcuZGVdPTEsU2hbVC5nLmFiXT0xLFNoW1QuZy5xZV09MSxTaCkpO09iamVjdC5mcmVlemUoW1QuZy5yYSxULmcuQmEsVC5nLlphLFQuZy5PYSxULmcucWYsVC5nLnphLFQuZy5sZixULmcueWldKTtcbnZhciBVaD17fSxWaD1PYmplY3QuZnJlZXplKChVaFtULmcuZWldPTEsVWhbVC5nLmZpXT0xLFVoW1QuZy5naV09MSxVaFtULmcuaGldPTEsVWhbVC5nLmlpXT0xLFVoW1QuZy5qaV09MSxVaFtULmcua2ldPTEsVWhbVC5nLmxpXT0xLFVoW1QuZy5taV09MSxVaFtULmcuTWNdPTEsVWgpKSxXaD17fSxYaD1PYmplY3QuZnJlZXplKChXaFtULmcuWWZdPTEsV2hbVC5nLlpmXT0xLFdoW1QuZy5qY109MSxXaFtULmcua2NdPTEsV2hbVC5nLmNnXT0xLFdoW1QuZy5SYl09MSxXaFtULmcubWNdPTEsV2hbVC5nLmliXT0xLFdoW1QuZy5EYl09MSxXaFtULmcuamJdPTEsV2hbVC5nLkhhXT0xLFdoW1QuZy5uY109MSxXaFtULmcuTGFdPTEsV2hbVC5nLmRnXT0xLFdoKSksWWg9T2JqZWN0LmZyZWV6ZShbVC5nLmphLFQuZy5GZCxULmcubGIsVC5nLnFjLFQuZy51YyxULmcuYmQsVC5nLklhLFQuZy5ZYl0pLFpoPU9iamVjdC5mcmVlemUoW10uY29uY2F0KHBhKFloKSkpLCRoPU9iamVjdC5mcmVlemUoW1QuZy5NYSxcblQuZy5UZCxULmcuamQsVC5nLnJmLFQuZy5PZF0pLGFpPU9iamVjdC5mcmVlemUoW10uY29uY2F0KHBhKCRoKSkpLGJpPXt9LGNpPShiaVtULmcuUF09XCIxXCIsYmlbVC5nLlVdPVwiMlwiLGJpW1QuZy5PXT1cIjNcIixiaVtULmcud2FdPVwiNFwiLGJpKSxkaT17fSxlaT1PYmplY3QuZnJlZXplKChkaVtULmcuamFdPTEsZGlbVC5nLkZkXT0xLGRpW1QuZy5HZF09MSxkaVtULmcuQWFdPTEsZGlbVC5nLlRiXT0xLGRpW1QuZy5kZl09MSxkaVtULmcuSGRdPTEsZGlbVC5nLklkXT0xLGRpW1QuZy5KZF09MSxkaVtULmcuZGFdPTEsZGlbVC5nLktkXT0xLGRpW1QuZy5YYV09MSxkaVtULmcub2FdPTEsZGlbVC5nLlZhXT0xLGRpW1QuZy5NYV09MSxkaVtULmcuWWFdPTEsZGlbVC5nLk5hXT0xLGRpW1QuZy54YV09MSxkaVtULmcuTGRdPTEsZGlbVC5nLmthXT0xLGRpW1QuZy5DaV09MSxkaVtULmcuUWRdPTEsZGlbVC5nLlJkXT0xLGRpW1QuZy5sZl09MSxkaVtULmcudWNdPTEsZGlbVC5nLlZiXT0xLGRpW1QuZy5JYl09XG4xLGRpW1QuZy5PYV09MSxkaVtULmcuZWRdPTEsZGlbVC5nLnJhXT0xLGRpW1QuZy5CYV09MSxkaVtULmcuQmddPTEsZGlbVC5nLkNnXT0xLGRpW1QuZy5EZ109MSxkaVtULmcuRWddPTEsZGlbVC5nLldiXT0xLGRpW1QuZy5JYV09MSxkaVtULmcuWGJdPTEsZGlbVC5nLmhkXT0xLGRpW1QuZy5rZF09MSxkaVtULmcueWFdPTEsZGlbVC5nLkxiXT0xLGRpW1QuZy5ZYl09MSxkaVtULmcuV2FdPTEsZGlbVC5nLkNhXT0xLGRpW1QuZy56YV09MSxkaVtULmcubGFdPTEsZGkpKSxmaT17fSxnaT1PYmplY3QuZnJlZXplKChmaS5zZWFyY2g9XCJzXCIsZmkueW91dHViZT1cInlcIixmaS5wbGF5c3RvcmU9XCJwXCIsZmkuc2hvcHBpbmc9XCJoXCIsZmkuYWRzPVwiYVwiLGZpLm1hcHM9XCJtXCIsZmkpKTtPYmplY3QuZnJlZXplKFQuZyk7dmFyIGhpPXt9LGlpPUQuZ29vZ2xlX3RhZ19tYW5hZ2VyPUQuZ29vZ2xlX3RhZ19tYW5hZ2VyfHx7fTtoaS5SZz1cIjQ5MzBcIjtoaS5wZT1OdW1iZXIoXCIwXCIpfHwwO2hpLmhiPVwiZGF0YUxheWVyXCI7aGkua249XCJDaEFJOEszbHRnWVEzL1dYbjRyNW10ZGJFaVVBVlVYL0xraVBWNm9RQk1CdldkbXZZcWhXNy8xZ1VQRVhkTk9IcFhWWlFjb1NBbjlqR2dLS1pRXFx4M2RcXHgzZFwiO3ZhciBqaT17X19jbDoxLF9fZWNsOjEsX19laGw6MSxfX2V2bDoxLF9fZmFsOjEsX19maWw6MSxfX2ZzbDoxLF9faGw6MSxfX2plbDoxLF9fbGNsOjEsX19zZGw6MSxfX3RsOjEsX195dGw6MX0sa2k9e19fcGF1c2VkOjEsX190ZzoxfSxsaTtmb3IobGkgaW4gamkpamkuaGFzT3duUHJvcGVydHkobGkpJiYoa2lbbGldPTEpO3ZhciBtaT14YihcInRydWVcIiksbmk9ITEsb2kscGk9ITE7cGk9ITA7XG5vaT1waTt2YXIgcWkscmk9ITE7cWk9cmk7dmFyIHNpLHRpPSExO3NpPXRpO2hpLkRkPVwid3d3Lmdvb2dsZXRhZ21hbmFnZXIuY29tXCI7dmFyIHVpPVwiXCIraGkuRGQrKG9pP1wiL2d0YWcvanNcIjpcIi9ndG0uanNcIiksdmk9bnVsbCx3aT1udWxsLHhpPXt9LHlpPXt9O2Z1bmN0aW9uIHppKCl7dmFyIGE9aWkuc2VxdWVuY2V8fDE7aWkuc2VxdWVuY2U9YSsxO3JldHVybiBhfWhpLnFrPVwiXCI7dmFyIEFpPVwiXCI7aGkuU2c9QWk7dmFyIEJpPW5ldyBmdW5jdGlvbigpe3RoaXMuaj1cIlwiO3RoaXMuSD0hMTt0aGlzLkQ9MDt0aGlzLlI9dGhpcy5aPXRoaXMuUGE9dGhpcy5NPVwiXCJ9O2Z1bmN0aW9uIENpKCl7dmFyIGE9QmkuTS5sZW5ndGg7cmV0dXJuIEJpLk1bYS0xXT09PVwiL1wiP0JpLk0uc3Vic3RyaW5nKDAsYS0xKTpCaS5NfWZ1bmN0aW9uIERpKCl7cmV0dXJuIEJpLkgmJkJpLkQhPT0xfWZ1bmN0aW9uIEVpKGEpe2Zvcih2YXIgYj17fSxjPW5hKGEuc3BsaXQoXCJ8XCIpKSxkPWMubmV4dCgpOyFkLmRvbmU7ZD1jLm5leHQoKSliW2QudmFsdWVdPSEwO3JldHVybiBifXZhciBGaT1uZXcgdWIsR2k9e30sSGk9e30sS2k9e25hbWU6aGkuaGIsc2V0OmZ1bmN0aW9uKGEsYil7aChKYihhLGIpLEdpKTtJaSgpfSxnZXQ6ZnVuY3Rpb24oYSl7cmV0dXJuIEppKGEsMil9LHJlc2V0OmZ1bmN0aW9uKCl7Rmk9bmV3IHViO0dpPXt9O0lpKCl9fTtmdW5jdGlvbiBKaShhLGIpe3JldHVybiBiIT0yP0ZpLmdldChhKTpMaShhKX1mdW5jdGlvbiBMaShhLGIpe3ZhciBjPWEuc3BsaXQoXCIuXCIpO2I9Ynx8W107Zm9yKHZhciBkPUdpLGU9MDtlPGMubGVuZ3RoO2UrKyl7aWYoZD09PW51bGwpcmV0dXJuITE7aWYoZD09PXZvaWQgMClicmVhaztkPWRbY1tlXV07aWYoYi5pbmRleE9mKGQpIT09LTEpcmV0dXJufXJldHVybiBkfWZ1bmN0aW9uIE1pKGEsYil7SGkuaGFzT3duUHJvcGVydHkoYSl8fChGaS5zZXQoYSxiKSxoKEpiKGEsYiksR2kpLElpKCkpfVxuZnVuY3Rpb24gTmkoKXtmb3IodmFyIGE9W1wiZ3RtLmFsbG93bGlzdFwiLFwiZ3RtLmJsb2NrbGlzdFwiLFwiZ3RtLndoaXRlbGlzdFwiLFwiZ3RtLmJsYWNrbGlzdFwiLFwidGFnVHlwZUJsYWNrbGlzdFwiXSxiPTA7YjxhLmxlbmd0aDtiKyspe3ZhciBjPWFbYl0sZD1KaShjLDEpO2lmKEFycmF5LmlzQXJyYXkoZCl8fFNhKGQpKWQ9aChkKTtIaVtjXT1kfX1mdW5jdGlvbiBJaShhKXt6KEhpLGZ1bmN0aW9uKGIsYyl7Rmkuc2V0KGIsYyk7aChKYihiKSxHaSk7aChKYihiLGMpLEdpKTthJiZkZWxldGUgSGlbYl19KX1mdW5jdGlvbiBPaShhLGIpe3ZhciBjLGQ9KGI9PT12b2lkIDA/MjpiKSE9PTE/TGkoYSk6RmkuZ2V0KGEpO1FhKGQpPT09XCJhcnJheVwifHxRYShkKT09PVwib2JqZWN0XCI/Yz1oKGQpOmM9ZDtyZXR1cm4gY307XG52YXIgUGk9ZnVuY3Rpb24oYSxiLGMpe2lmKCFjKXJldHVybiExO3ZhciBkPWMuc2VsZWN0b3JfdHlwZSxlPVN0cmluZyhjLnZhbHVlKSxmO2lmKFEoMTAwKXx8ZD09PVwianNfdmFyaWFibGVcIilmb3IodmFyIGc9ZS5yZXBsYWNlKC9cXFtcIj8nPy9nLFwiLlwiKS5yZXBsYWNlKC9cIj8nP1xcXS9nLFwiXCIpLnNwbGl0KFwiLFwiKSxrPTA7azxnLmxlbmd0aDtrKyspe3ZhciBtPWdba10udHJpbSgpO2lmKG0mJiFHYihtLFwiI1wiKSYmIUdiKG0sXCIuXCIpKXtpZihHYihtLFwiZGF0YUxheWVyLlwiKSlmPUppKG0uc3Vic3RyaW5nKDEwKSk7ZWxzZXt2YXIgbj1tLnNwbGl0KFwiLlwiKTtmPURbbi5zaGlmdCgpXTtmb3IodmFyIHA9MDtwPG4ubGVuZ3RoO3ArKylmPWYmJmZbbltwXV19aWYoZiE9PXZvaWQgMClicmVha319aWYoKFEoMTAwKSYmZj09PXZvaWQgMHx8ZD09PVwiY3NzX3NlbGVjdG9yXCIpJiZraCl0cnl7dmFyIHE9bGgoZSk7aWYocSYmcS5sZW5ndGg+MCl7Zj1bXTtmb3IodmFyIHI9MDtyPHEubGVuZ3RoJiZyPFxuKGI9PT1cImVtYWlsXCJ8fGI9PT1cInBob25lX251bWJlclwiPzU6MSk7cisrKWYucHVzaChGYyhxW3JdKXx8emIocVtyXS52YWx1ZSkpO2Y9Zi5sZW5ndGg9PT0xP2ZbMF06Zn19Y2F0Y2godCl7TSgxNDkpfXJldHVybiBmPyhhW2JdPWYsITApOiExfSxRaT1mdW5jdGlvbihhKXtpZihhKXt2YXIgYj17fSxjPSExO2M9UGkoYixcImVtYWlsXCIsYS5lbWFpbCl8fGM7Yz1QaShiLFwicGhvbmVfbnVtYmVyXCIsYS5waG9uZSl8fGM7Yi5hZGRyZXNzPVtdO2Zvcih2YXIgZD1hLm5hbWVfYW5kX2FkZHJlc3N8fFtdLGU9MDtlPGQubGVuZ3RoO2UrKyl7dmFyIGY9e307Yz1QaShmLFwiZmlyc3RfbmFtZVwiLGRbZV0uZmlyc3RfbmFtZSl8fGM7Yz1QaShmLFwibGFzdF9uYW1lXCIsZFtlXS5sYXN0X25hbWUpfHxjO2M9UGkoZixcInN0cmVldFwiLGRbZV0uc3RyZWV0KXx8YztjPVBpKGYsXCJjaXR5XCIsZFtlXS5jaXR5KXx8YztjPVBpKGYsXCJyZWdpb25cIixkW2VdLnJlZ2lvbil8fGM7Yz1QaShmLFwiY291bnRyeVwiLGRbZV0uY291bnRyeSl8fFxuYztjPVBpKGYsXCJwb3N0YWxfY29kZVwiLGRbZV0ucG9zdGFsX2NvZGUpfHxjO2IuYWRkcmVzcy5wdXNoKGYpfXJldHVybiBjP2I6dm9pZCAwfX0sUmk9ZnVuY3Rpb24oYSl7cmV0dXJuIFNhKGEpPyEhYS5lbmFibGVfY29kZTohMX07dmFyIFNpPS86WzAtOV0rJC8sVGk9L15cXGQrXFwuZmxzXFwuZG91YmxlY2xpY2tcXC5uZXQkLztmdW5jdGlvbiBVaShhLGIsYyxkKXtmb3IodmFyIGU9W10sZj1uYShhLnNwbGl0KFwiJlwiKSksZz1mLm5leHQoKTshZy5kb25lO2c9Zi5uZXh0KCkpe3ZhciBrPW5hKGcudmFsdWUuc3BsaXQoXCI9XCIpKSxtPWsubmV4dCgpLnZhbHVlLG49b2Eoayk7aWYoZGVjb2RlVVJJQ29tcG9uZW50KG0ucmVwbGFjZSgvXFwrL2csXCIgXCIpKT09PWIpe3ZhciBwPW4uam9pbihcIj1cIik7aWYoIWMpcmV0dXJuIGQ/cDpkZWNvZGVVUklDb21wb25lbnQocC5yZXBsYWNlKC9cXCsvZyxcIiBcIikpO2UucHVzaChkP3A6ZGVjb2RlVVJJQ29tcG9uZW50KHAucmVwbGFjZSgvXFwrL2csXCIgXCIpKSl9fXJldHVybiBjP2U6dm9pZCAwfVxuZnVuY3Rpb24gVmkoYSxiLGMsZCxlKXtiJiYoYj1TdHJpbmcoYikudG9Mb3dlckNhc2UoKSk7aWYoYj09PVwicHJvdG9jb2xcInx8Yj09PVwicG9ydFwiKWEucHJvdG9jb2w9V2koYS5wcm90b2NvbCl8fFdpKEQubG9jYXRpb24ucHJvdG9jb2wpO2I9PT1cInBvcnRcIj9hLnBvcnQ9U3RyaW5nKE51bWJlcihhLmhvc3RuYW1lP2EucG9ydDpELmxvY2F0aW9uLnBvcnQpfHwoYS5wcm90b2NvbD09PVwiaHR0cFwiPzgwOmEucHJvdG9jb2w9PT1cImh0dHBzXCI/NDQzOlwiXCIpKTpiPT09XCJob3N0XCImJihhLmhvc3RuYW1lPShhLmhvc3RuYW1lfHxELmxvY2F0aW9uLmhvc3RuYW1lKS5yZXBsYWNlKFNpLFwiXCIpLnRvTG93ZXJDYXNlKCkpO3JldHVybiBYaShhLGIsYyxkLGUpfVxuZnVuY3Rpb24gWGkoYSxiLGMsZCxlKXt2YXIgZixnPVdpKGEucHJvdG9jb2wpO2ImJihiPVN0cmluZyhiKS50b0xvd2VyQ2FzZSgpKTtzd2l0Y2goYil7Y2FzZSBcInVybF9ub19mcmFnbWVudFwiOmY9WWkoYSk7YnJlYWs7Y2FzZSBcInByb3RvY29sXCI6Zj1nO2JyZWFrO2Nhc2UgXCJob3N0XCI6Zj1hLmhvc3RuYW1lLnJlcGxhY2UoU2ksXCJcIikudG9Mb3dlckNhc2UoKTtpZihjKXt2YXIgaz0vXnd3d1xcZCpcXC4vLmV4ZWMoZik7ayYma1swXSYmKGY9Zi5zdWJzdHJpbmcoa1swXS5sZW5ndGgpKX1icmVhaztjYXNlIFwicG9ydFwiOmY9U3RyaW5nKE51bWJlcihhLnBvcnQpfHwoZz09PVwiaHR0cFwiPzgwOmc9PT1cImh0dHBzXCI/NDQzOlwiXCIpKTticmVhaztjYXNlIFwicGF0aFwiOmEucGF0aG5hbWV8fGEuaG9zdG5hbWV8fGhiKFwiVEFHR0lOR1wiLDEpO2Y9YS5wYXRobmFtZS5zdWJzdHJpbmcoMCwxKT09PVwiL1wiP2EucGF0aG5hbWU6XCIvXCIrYS5wYXRobmFtZTt2YXIgbT1mLnNwbGl0KFwiL1wiKTsoZHx8W10pLmluZGV4T2YobVttLmxlbmd0aC1cbjFdKT49MCYmKG1bbS5sZW5ndGgtMV09XCJcIik7Zj1tLmpvaW4oXCIvXCIpO2JyZWFrO2Nhc2UgXCJxdWVyeVwiOmY9YS5zZWFyY2gucmVwbGFjZShcIj9cIixcIlwiKTtlJiYoZj1VaShmLGUsITEpKTticmVhaztjYXNlIFwiZXh0ZW5zaW9uXCI6dmFyIG49YS5wYXRobmFtZS5zcGxpdChcIi5cIik7Zj1uLmxlbmd0aD4xP25bbi5sZW5ndGgtMV06XCJcIjtmPWYuc3BsaXQoXCIvXCIpWzBdO2JyZWFrO2Nhc2UgXCJmcmFnbWVudFwiOmY9YS5oYXNoLnJlcGxhY2UoXCIjXCIsXCJcIik7YnJlYWs7ZGVmYXVsdDpmPWEmJmEuaHJlZn1yZXR1cm4gZn1mdW5jdGlvbiBXaShhKXtyZXR1cm4gYT9hLnJlcGxhY2UoXCI6XCIsXCJcIikudG9Mb3dlckNhc2UoKTpcIlwifWZ1bmN0aW9uIFlpKGEpe3ZhciBiPVwiXCI7aWYoYSYmYS5ocmVmKXt2YXIgYz1hLmhyZWYuaW5kZXhPZihcIiNcIik7Yj1jPDA/YS5ocmVmOmEuaHJlZi5zdWJzdHJpbmcoMCxjKX1yZXR1cm4gYn12YXIgWmk9e30sJGk9MDtcbmZ1bmN0aW9uIGFqKGEpe3ZhciBiPVppW2FdO2lmKCFiKXt2YXIgYz1FLmNyZWF0ZUVsZW1lbnQoXCJhXCIpO2EmJihjLmhyZWY9YSk7dmFyIGQ9Yy5wYXRobmFtZTtkWzBdIT09XCIvXCImJihhfHxoYihcIlRBR0dJTkdcIiwxKSxkPVwiL1wiK2QpO3ZhciBlPWMuaG9zdG5hbWUucmVwbGFjZShTaSxcIlwiKTtiPXtocmVmOmMuaHJlZixwcm90b2NvbDpjLnByb3RvY29sLGhvc3Q6Yy5ob3N0LGhvc3RuYW1lOmUscGF0aG5hbWU6ZCxzZWFyY2g6Yy5zZWFyY2gsaGFzaDpjLmhhc2gscG9ydDpjLnBvcnR9OyRpPDUmJihaaVthXT1iLCRpKyspfXJldHVybiBifVxuZnVuY3Rpb24gYmooYSl7ZnVuY3Rpb24gYihuKXt2YXIgcD1uLnNwbGl0KFwiPVwiKVswXTtyZXR1cm4gZC5pbmRleE9mKHApPDA/bjpwK1wiPTBcIn1mdW5jdGlvbiBjKG4pe3JldHVybiBuLnNwbGl0KFwiJlwiKS5tYXAoYikuZmlsdGVyKGZ1bmN0aW9uKHApe3JldHVybiBwIT09dm9pZCAwfSkuam9pbihcIiZcIil9dmFyIGQ9XCJnY2xpZCBkY2xpZCBnYnJhaWQgd2JyYWlkIGdjbGF3IGdjbGRjIGdjbGhhIGdjbGdmIGdjbGdiIF9nbFwiLnNwbGl0KFwiIFwiKSxlPWFqKGEpLGY9YS5zcGxpdCgvWz8jXS8pWzBdLGc9ZS5zZWFyY2gsaz1lLmhhc2g7Z1swXT09PVwiP1wiJiYoZz1nLnN1YnN0cmluZygxKSk7a1swXT09PVwiI1wiJiYoaz1rLnN1YnN0cmluZygxKSk7Zz1jKGcpO2s9YyhrKTtnIT09XCJcIiYmKGc9XCI/XCIrZyk7ayE9PVwiXCImJihrPVwiI1wiK2spO3ZhciBtPVwiXCIrZitnK2s7bVttLmxlbmd0aC0xXT09PVwiL1wiJiYobT1tLnN1YnN0cmluZygwLG0ubGVuZ3RoLTEpKTtyZXR1cm4gbX1cbmZ1bmN0aW9uIGNqKGEpe3ZhciBiPWFqKEQubG9jYXRpb24uaHJlZiksYz1WaShiLFwiaG9zdFwiLCExKTtpZihjJiZjLm1hdGNoKFRpKSl7dmFyIGQ9VmkoYixcInBhdGhcIik7aWYoZCl7dmFyIGU9ZC5zcGxpdChhK1wiPVwiKTtpZihlLmxlbmd0aD4xKXJldHVybiBlWzFdLnNwbGl0KFwiO1wiKVswXS5zcGxpdChcIj9cIilbMF19fX1mdW5jdGlvbiBkaihhKXtmb3IodmFyIGI9MDtiPDM7KytiKXRyeXt2YXIgYz1kZWNvZGVVUklDb21wb25lbnQoYSkucmVwbGFjZSgvXFwrL2csXCIgXCIpO2lmKGM9PT1hKWJyZWFrO2E9Y31jYXRjaChkKXtyZXR1cm5cIlwifXJldHVybiBhfTt2YXIgZWo9e1wiaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbVwiOlwiL2dcIixcImh0dHBzOi8vd3d3Lmdvb2dsZWFkc2VydmljZXMuY29tXCI6XCIvYXNcIixcImh0dHBzOi8vcGFnZWFkMi5nb29nbGVzeW5kaWNhdGlvbi5jb21cIjpcIi9nc1wifTtmdW5jdGlvbiBmaihhLGIpe2lmKGEpe3ZhciBjPVwiXCIrYTtjLmluZGV4T2YoXCJodHRwOi8vXCIpIT09MCYmYy5pbmRleE9mKFwiaHR0cHM6Ly9cIikhPT0wJiYoYz1cImh0dHBzOi8vXCIrYyk7Y1tjLmxlbmd0aC0xXT09PVwiL1wiJiYoYz1jLnN1YnN0cmluZygwLGMubGVuZ3RoLTEpKTtyZXR1cm4gYWooXCJcIitjK2IpLmhyZWZ9fWZ1bmN0aW9uIGdqKGEsYil7aWYoRGkoKXx8cWkpcmV0dXJuIGZqKGEsYil9ZnVuY3Rpb24gaGooKXtyZXR1cm4hIWhpLlNnJiZoaS5TZy5zcGxpdChcIkBAXCIpLmpvaW4oXCJcIikhPT1cIlNHVE1fVE9LRU5cIn1cbmZ1bmN0aW9uIGlqKGEpe2Zvcih2YXIgYj1uYShbVC5nLmhkLFQuZy5MYl0pLGM9Yi5uZXh0KCk7IWMuZG9uZTtjPWIubmV4dCgpKXt2YXIgZD1VKGEsYy52YWx1ZSk7aWYoZClyZXR1cm4gZH19ZnVuY3Rpb24gamooYSxiKXtyZXR1cm4gRGkoKT9cIlwiK0NpKCkrKGI/ZWpbYV18fFwiXCI6XCJcIik6YX07ZnVuY3Rpb24ga2ooYSl7dmFyIGI9U3RyaW5nKGFbSWUubWFdfHxcIlwiKS5yZXBsYWNlKC9fL2csXCJcIik7cmV0dXJuIEdiKGIsXCJjdnRcIik/XCJjdnRcIjpifXZhciBsaj1ELmxvY2F0aW9uLnNlYXJjaC5pbmRleE9mKFwiP2d0bV9sYXRlbmN5PVwiKT49MHx8RC5sb2NhdGlvbi5zZWFyY2guaW5kZXhPZihcIiZndG1fbGF0ZW5jeT1cIik+PTA7dmFyIG1qPXtzYW1wbGVSYXRlOlwiMC4wMDUwMDBcIixsazpcIlwiLGhuOlwiMC4wMVwifSxuaj1NYXRoLnJhbmRvbSgpLG9qO2lmKCEob2o9bGopKXt2YXIgcGo9bWouc2FtcGxlUmF0ZTtvaj1uajxOdW1iZXIocGopfXZhciBxaj1vaixyaj0ocmM9PW51bGw/dm9pZCAwOnJjLmluY2x1ZGVzKFwiZ3RtX2RlYnVnPWRcIikpfHxsanx8bmo+PTEtTnVtYmVyKG1qLmhuKTt2YXIgc2o9L2d0YWdbLlxcL11qcy8sdGo9L2d0bVsuXFwvXWpzLyx1aj0hMTtmdW5jdGlvbiB2aihhKXtpZih1ailyZXR1cm5cIjFcIjt2YXIgYj1hLnNjcmlwdFNvdXJjZTtpZihiKXtpZihzai50ZXN0KGIpKXJldHVyblwiM1wiO2lmKHRqLnRlc3QoYikpcmV0dXJuXCIyXCJ9cmV0dXJuXCIwXCJ9ZnVuY3Rpb24gd2ooYSxiKXt2YXIgYz14aigpO2MucGVuZGluZ3x8KGMucGVuZGluZz1bXSk7cmIoYy5wZW5kaW5nLGZ1bmN0aW9uKGQpe3JldHVybiBkLnRhcmdldC5jdGlkPT09YS5jdGlkJiZkLnRhcmdldC5pc0Rlc3RpbmF0aW9uPT09YS5pc0Rlc3RpbmF0aW9ufSl8fGMucGVuZGluZy5wdXNoKHt0YXJnZXQ6YSxvbkxvYWQ6Yn0pfVxudmFyIHlqPWZ1bmN0aW9uKCl7dGhpcy5jb250YWluZXI9e307dGhpcy5kZXN0aW5hdGlvbj17fTt0aGlzLmNhbm9uaWNhbD17fTt0aGlzLnBlbmRpbmc9W107dGhpcy5zaWxvZWQ9W107dGhpcy5pbmplY3RlZEZpcnN0UGFydHlDb250YWluZXJzPXt9O3ZhciBhO3ZhciBiPUQuZ29vZ2xlX3RhZ3NfZmlyc3RfcGFydHl8fFtdO2lmKEFycmF5LmlzQXJyYXkoYikpe2Zvcih2YXIgYz17fSxkPW5hKGIpLGU9ZC5uZXh0KCk7IWUuZG9uZTtlPWQubmV4dCgpKWNbZS52YWx1ZV09ITA7YT1PYmplY3QuZnJlZXplKGMpfWVsc2UgYT17fTt0aGlzLmluamVjdGVkRmlyc3RQYXJ0eUNvbnRhaW5lcnM9YX07ZnVuY3Rpb24geGooKXt2YXIgYT1zYyhcImdvb2dsZV90YWdfZGF0YVwiLHt9KSxiPWEudGlkcjtifHwoYj1uZXcgeWosYS50aWRyPWIpO3JldHVybiBifTt2YXIgemo9e30sQWo9ITEsT2Y9e2N0aWQ6XCJHLUtRNUVEVkJKMU5cIixjYW5vbmljYWxDb250YWluZXJJZDpcIjEwNzAwNzI4MFwiLFJqOlwiRy1LUTVFRFZCSjFOfEdULU5GWDNIMkdcIixTajpcIkctS1E1RURWQkoxTlwifTt6ai5tZT14YihcIlwiKTtmdW5jdGlvbiBCaigpe3ZhciBhPUNqKCk7cmV0dXJuIEFqP2EubWFwKERqKTphfWZ1bmN0aW9uIEVqKCl7dmFyIGE9RmooKTtyZXR1cm4gQWo/YS5tYXAoRGopOmF9ZnVuY3Rpb24gR2ooKXtyZXR1cm4gSGooT2YuY3RpZCl9ZnVuY3Rpb24gSWooKXtyZXR1cm4gSGooT2YuY2Fub25pY2FsQ29udGFpbmVySWR8fFwiX1wiK09mLmN0aWQpfWZ1bmN0aW9uIENqKCl7cmV0dXJuIE9mLlJqP09mLlJqLnNwbGl0KFwifFwiKTpbT2YuY3RpZF19ZnVuY3Rpb24gRmooKXtyZXR1cm4gT2YuU2o/T2YuU2ouc3BsaXQoXCJ8XCIpOltdfVxuZnVuY3Rpb24gSmooKXt2YXIgYT1LaihMaigpKSxiPWEmJmEucGFyZW50O2lmKGIpcmV0dXJuIEtqKGIpfWZ1bmN0aW9uIEtqKGEpe3ZhciBiPXhqKCk7cmV0dXJuIGEuaXNEZXN0aW5hdGlvbj9iLmRlc3RpbmF0aW9uW2EuY3RpZF06Yi5jb250YWluZXJbYS5jdGlkXX1mdW5jdGlvbiBIaihhKXtyZXR1cm4gQWo/RGooYSk6YX1mdW5jdGlvbiBEaihhKXtyZXR1cm5cInNpbG9lZF9cIithfWZ1bmN0aW9uIE1qKGEpe3JldHVybiBBaj9RaihhKTphfWZ1bmN0aW9uIFFqKGEpe2E9U3RyaW5nKGEpO3JldHVybiBHYihhLFwic2lsb2VkX1wiKT9hLnN1YnN0cmluZyg3KTphfVxuZnVuY3Rpb24gUmooKXt2YXIgYT0hMTthPSEwO2lmKGEpe3ZhciBiPXhqKCk7aWYoYi5zaWxvZWQpe2Zvcih2YXIgYz1bXSxkPUNqKCkubWFwKERqKSxlPUZqKCkubWFwKERqKSxmPXt9LGc9MDtnPGIuc2lsb2VkLmxlbmd0aDtmPXtKZjp2b2lkIDB9LGcrKylmLkpmPWIuc2lsb2VkW2ddLCFBaiYmcmIoZi5KZi5pc0Rlc3RpbmF0aW9uP2U6ZCxmdW5jdGlvbihrKXtyZXR1cm4gZnVuY3Rpb24obSl7cmV0dXJuIG09PT1rLkpmLmN0aWR9fShmKSk/QWo9ITA6Yy5wdXNoKGYuSmYpO2Iuc2lsb2VkPWN9fX1cbmZ1bmN0aW9uIFNqKCl7dmFyIGE9eGooKTtpZihhLnBlbmRpbmcpe2Zvcih2YXIgYixjPVtdLGQ9ITEsZT1CaigpLGY9RWooKSxnPXt9LGs9MDtrPGEucGVuZGluZy5sZW5ndGg7Zz17UmU6dm9pZCAwfSxrKyspZy5SZT1hLnBlbmRpbmdba10scmIoZy5SZS50YXJnZXQuaXNEZXN0aW5hdGlvbj9mOmUsZnVuY3Rpb24obSl7cmV0dXJuIGZ1bmN0aW9uKG4pe3JldHVybiBuPT09bS5SZS50YXJnZXQuY3RpZH19KGcpKT9kfHwoYj1nLlJlLm9uTG9hZCxkPSEwKTpjLnB1c2goZy5SZSk7YS5wZW5kaW5nPWM7aWYoYil0cnl7YihJaigpKX1jYXRjaChtKXt9fX1cbmZ1bmN0aW9uIFRqKCl7Zm9yKHZhciBhPU9mLmN0aWQsYj1CaigpLGM9RWooKSxkPWZ1bmN0aW9uKG4scCl7dmFyIHE9e2Nhbm9uaWNhbENvbnRhaW5lcklkOk9mLmNhbm9uaWNhbENvbnRhaW5lcklkLHNjcmlwdENvbnRhaW5lcklkOmEsc3RhdGU6Mixjb250YWluZXJzOmIuc2xpY2UoKSxkZXN0aW5hdGlvbnM6Yy5zbGljZSgpfTtxYyYmKHEuc2NyaXB0RWxlbWVudD1xYyk7cmMmJihxLnNjcmlwdFNvdXJjZT1yYyk7aWYoSmooKT09PXZvaWQgMCl7dmFyIHI7YTp7aWYoKHEuc2NyaXB0Q29udGFpbmVySWR8fFwiXCIpLmluZGV4T2YoXCJHVE0tXCIpPj0wKXt2YXIgdDtiOntpZihxLnNjcmlwdFNvdXJjZSl7Zm9yKHZhciB1PUJpLkgsdj1haihxLnNjcmlwdFNvdXJjZSksdz11P3YucGF0aG5hbWU6XCJcIit2Lmhvc3RuYW1lK3YucGF0aG5hbWUseD1FLnNjcmlwdHMseT1cIlwiLEE9MDtBPHgubGVuZ3RoOysrQSl7dmFyIEI9eFtBXTtpZighKEIuaW5uZXJIVE1MLmxlbmd0aD09PTB8fCF1JiZCLmlubmVySFRNTC5pbmRleE9mKHEuc2NyaXB0Q29udGFpbmVySWR8fFxuXCJTSE9VTERfTk9UX0JFX1NFVFwiKTwwfHxCLmlubmVySFRNTC5pbmRleE9mKHcpPDApKXtpZihCLmlubmVySFRNTC5pbmRleE9mKFwiKGZ1bmN0aW9uKHcsZCxzLGwsaSlcIik+PTApe3Q9U3RyaW5nKEEpO2JyZWFrIGJ9eT1TdHJpbmcoQSl9fWlmKHkpe3Q9eTticmVhayBifX10PXZvaWQgMH12YXIgQz10O2lmKEMpe3VqPSEwO3I9QzticmVhayBhfX12YXIgSD1bXS5zbGljZS5jYWxsKGRvY3VtZW50LnNjcmlwdHMpO3I9cS5zY3JpcHRFbGVtZW50P1N0cmluZyhILmluZGV4T2YocS5zY3JpcHRFbGVtZW50KSk6XCItMVwifXEuaHRtbExvYWRPcmRlcj1yO3EubG9hZFNjcmlwdFR5cGU9dmoocSl9dmFyIEk9cD9lLmRlc3RpbmF0aW9uOmUuY29udGFpbmVyLEY9SVtuXTtGPyhwJiZGLnN0YXRlPT09MCYmTSg5MyksT2JqZWN0LmFzc2lnbihGLHEpKTpJW25dPXF9LGU9eGooKSxmPW5hKGIpLGc9Zi5uZXh0KCk7IWcuZG9uZTtnPWYubmV4dCgpKWQoZy52YWx1ZSwhMSk7Zm9yKHZhciBrPW5hKGMpLFxubT1rLm5leHQoKTshbS5kb25lO209ay5uZXh0KCkpZChtLnZhbHVlLCEwKTtlLmNhbm9uaWNhbFtJaigpXT17fTtTaigpfWZ1bmN0aW9uIFVqKGEpe3JldHVybiEheGooKS5jb250YWluZXJbYV19ZnVuY3Rpb24gVmooYSl7dmFyIGI9eGooKS5kZXN0aW5hdGlvblthXTtyZXR1cm4hIWImJiEhYi5zdGF0ZX1mdW5jdGlvbiBMaigpe3JldHVybntjdGlkOkdqKCksaXNEZXN0aW5hdGlvbjp6ai5tZX19ZnVuY3Rpb24gV2ooYSl7dmFyIGI9eGooKTsoYi5zaWxvZWQ9Yi5zaWxvZWR8fFtdKS5wdXNoKGEpfWZ1bmN0aW9uIFhqKCl7dmFyIGE9eGooKS5jb250YWluZXIsYjtmb3IoYiBpbiBhKWlmKGEuaGFzT3duUHJvcGVydHkoYikmJmFbYl0uc3RhdGU9PT0xKXJldHVybiEwO3JldHVybiExfWZ1bmN0aW9uIFlqKCl7dmFyIGE9e307eih4aigpLmRlc3RpbmF0aW9uLGZ1bmN0aW9uKGIsYyl7Yy5zdGF0ZT09PTAmJihhW1FqKGIpXT1jKX0pO3JldHVybiBhfVxuZnVuY3Rpb24gWmooYSl7cmV0dXJuISEoYSYmYS5wYXJlbnQmJmEuY29udGV4dCYmYS5jb250ZXh0LnNvdXJjZT09PTEmJmEucGFyZW50LmN0aWQuaW5kZXhPZihcIkdUTS1cIikhPT0wKX12YXIgYWs9XCIvdGQ/aWQ9XCIrT2YuY3RpZCxiaz1bXCJ2XCIsXCJ0XCIsXCJwaWRcIixcImRsXCIsXCJ0ZHBcIl0sY2s9W1wibWNjXCJdLGRrPXt9LGVrPXt9O2Z1bmN0aW9uIGZrKGEsYixjKXtla1thXT1iOyhjPT09dm9pZCAwfHxjKSYmZ2soYSl9ZnVuY3Rpb24gZ2soYSxiKXtpZihka1thXT09PXZvaWQgMHx8KGI9PT12b2lkIDA/MDpiKSlka1thXT0hMH1mdW5jdGlvbiBoayhhKXthPWE9PT12b2lkIDA/ITE6YTt2YXIgYj1PYmplY3Qua2V5cyhkaykuZmlsdGVyKGZ1bmN0aW9uKGMpe3JldHVybiBka1tjXT09PSEwJiZla1tjXSE9PXZvaWQgMCYmKGF8fCFjay5pbmNsdWRlcyhjKSl9KS5tYXAoZnVuY3Rpb24oYyl7dmFyIGQ9ZWtbY107dHlwZW9mIGQ9PT1cImZ1bmN0aW9uXCImJihkPWQoKSk7cmV0dXJuIGQ/XCImXCIrYytcIj1cIitkOlwiXCJ9KS5qb2luKFwiXCIpO3JldHVyblwiXCIramooXCJodHRwczovL3d3dy5nb29nbGV0YWdtYW5hZ2VyLmNvbVwiKSthaysoXCJcIitiK1wiJno9MFwiKX1cbmZ1bmN0aW9uIGlrKCl7T2JqZWN0LmtleXMoZGspLmZvckVhY2goZnVuY3Rpb24oYSl7YmsuaW5kZXhPZihhKTwwJiYoZGtbYV09ITEpfSl9ZnVuY3Rpb24gamsoYSl7YT1hPT09dm9pZCAwPyExOmE7aWYocmomJk9mLmN0aWQpe3ZhciBiPWhrKGEpO2E/TWMoYik6QWMoYik7aWsoKX19ZnVuY3Rpb24ga2soKXtPYmplY3Qua2V5cyhkaykuZmlsdGVyKGZ1bmN0aW9uKGEpe3JldHVybiBka1thXSYmIWJrLmluY2x1ZGVzKGEpfSkubGVuZ3RoPjAmJmprKCEwKX12YXIgbGs9c2IoKTtmdW5jdGlvbiBtaygpe2xrPXNiKCl9ZnVuY3Rpb24gbmsoKXtmayhcInZcIixcIjNcIik7ZmsoXCJ0XCIsXCJ0XCIpO2ZrKFwicGlkXCIsZnVuY3Rpb24oKXtyZXR1cm4gU3RyaW5nKGxrKX0pO0NjKEQsXCJwYWdlaGlkZVwiLGtrKTtELnNldEludGVydmFsKG1rLDg2NEU1KX1mdW5jdGlvbiBvaygpe3ZhciBhPXNjKFwiZ29vZ2xlX3RhZ19kYXRhXCIse30pO3JldHVybiBhLmljcz1hLmljc3x8bmV3IHBrfXZhciBwaz1mdW5jdGlvbigpe3RoaXMuZW50cmllcz17fTt0aGlzLndhaXRQZXJpb2RUaW1lZE91dD10aGlzLndhc1NldExhdGU9dGhpcy5hY2Nlc3NlZEFueT10aGlzLmFjY2Vzc2VkRGVmYXVsdD10aGlzLnVzZWRJbXBsaWNpdD10aGlzLnVzZWRVcGRhdGU9dGhpcy51c2VkRGVmYXVsdD10aGlzLnVzZWREZWNsYXJlPXRoaXMuYWN0aXZlPSExO3RoaXMuaj1bXX07XG5way5wcm90b3R5cGUuZGVmYXVsdD1mdW5jdGlvbihhLGIsYyxkLGUsZixnKXt0aGlzLnVzZWREZWZhdWx0fHx0aGlzLnVzZWREZWNsYXJlfHwhdGhpcy5hY2Nlc3NlZERlZmF1bHQmJiF0aGlzLmFjY2Vzc2VkQW55fHwodGhpcy53YXNTZXRMYXRlPSEwKTt0aGlzLnVzZWREZWZhdWx0PXRoaXMuYWN0aXZlPSEwO2hiKFwiVEFHR0lOR1wiLDE5KTtiPT1udWxsP2hiKFwiVEFHR0lOR1wiLDE4KTpxayh0aGlzLGEsYj09PVwiZ3JhbnRlZFwiLGMsZCxlLGYsZyl9O3BrLnByb3RvdHlwZS53YWl0Rm9yVXBkYXRlPWZ1bmN0aW9uKGEsYixjKXtmb3IodmFyIGQ9MDtkPGEubGVuZ3RoO2QrKylxayh0aGlzLGFbZF0sdm9pZCAwLHZvaWQgMCxcIlwiLFwiXCIsYixjKX07XG52YXIgcWs9ZnVuY3Rpb24oYSxiLGMsZCxlLGYsZyxrKXt2YXIgbT1hLmVudHJpZXMsbj1tW2JdfHx7fSxwPW4ucmVnaW9uLHE9ZCYmbChkKT9kLnRvVXBwZXJDYXNlKCk6dm9pZCAwO2U9ZS50b1VwcGVyQ2FzZSgpO2Y9Zi50b1VwcGVyQ2FzZSgpO2lmKGU9PT1cIlwifHxxPT09Znx8KHE9PT1lP3AhPT1mOiFxJiYhcCkpe3ZhciByPSEhKGcmJmc+MCYmbi51cGRhdGU9PT12b2lkIDApLHQ9e3JlZ2lvbjpxLGRlY2xhcmVfcmVnaW9uOm4uZGVjbGFyZV9yZWdpb24saW1wbGljaXQ6bi5pbXBsaWNpdCxkZWZhdWx0OmMhPT12b2lkIDA/YzpuLmRlZmF1bHQsZGVjbGFyZTpuLmRlY2xhcmUsdXBkYXRlOm4udXBkYXRlLHF1aWV0OnJ9O2lmKGUhPT1cIlwifHxuLmRlZmF1bHQhPT0hMSltW2JdPXQ7ciYmRC5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7bVtiXT09PXQmJnQucXVpZXQmJihoYihcIlRBR0dJTkdcIiwyKSxhLndhaXRQZXJpb2RUaW1lZE91dD0hMCxhLmNsZWFyVGltZW91dChiLHZvaWQgMCxrKSxcbmEubm90aWZ5TGlzdGVuZXJzKCkpfSxnKX19O2JhPXBrLnByb3RvdHlwZTtiYS5jbGVhclRpbWVvdXQ9ZnVuY3Rpb24oYSxiLGMpe3ZhciBkPVthXSxlPWMuZGVsZWdhdGVkQ29uc2VudFR5cGVzLGY7Zm9yKGYgaW4gZSllLmhhc093blByb3BlcnR5KGYpJiZlW2ZdPT09YSYmZC5wdXNoKGYpO3ZhciBnPXRoaXMuZW50cmllc1thXXx8e30saz10aGlzLmdldENvbnNlbnRTdGF0ZShhLGMpO2lmKGcucXVpZXQpe2cucXVpZXQ9ITE7Zm9yKHZhciBtPW5hKGQpLG49bS5uZXh0KCk7IW4uZG9uZTtuPW0ubmV4dCgpKXJrKHRoaXMsbi52YWx1ZSl9ZWxzZSBpZihiIT09dm9pZCAwJiZrIT09Yilmb3IodmFyIHA9bmEoZCkscT1wLm5leHQoKTshcS5kb25lO3E9cC5uZXh0KCkpcmsodGhpcyxxLnZhbHVlKX07XG5iYS51cGRhdGU9ZnVuY3Rpb24oYSxiLGMpe3RoaXMudXNlZERlZmF1bHR8fHRoaXMudXNlZERlY2xhcmV8fHRoaXMudXNlZFVwZGF0ZXx8IXRoaXMuYWNjZXNzZWRBbnl8fCh0aGlzLndhc1NldExhdGU9ITApO3RoaXMudXNlZFVwZGF0ZT10aGlzLmFjdGl2ZT0hMDtpZihiIT1udWxsKXt2YXIgZD10aGlzLmdldENvbnNlbnRTdGF0ZShhLGMpLGU9dGhpcy5lbnRyaWVzOyhlW2FdPWVbYV18fHt9KS51cGRhdGU9Yj09PVwiZ3JhbnRlZFwiO3RoaXMuY2xlYXJUaW1lb3V0KGEsZCxjKX19O1xuYmEuZGVjbGFyZT1mdW5jdGlvbihhLGIsYyxkLGUpe3RoaXMudXNlZERlY2xhcmU9dGhpcy5hY3RpdmU9ITA7dmFyIGY9dGhpcy5lbnRyaWVzLGc9ZlthXXx8e30saz1nLmRlY2xhcmVfcmVnaW9uLG09YyYmbChjKT9jLnRvVXBwZXJDYXNlKCk6dm9pZCAwO2Q9ZC50b1VwcGVyQ2FzZSgpO2U9ZS50b1VwcGVyQ2FzZSgpO2lmKGQ9PT1cIlwifHxtPT09ZXx8KG09PT1kP2shPT1lOiFtJiYhaykpe3ZhciBuPXtyZWdpb246Zy5yZWdpb24sZGVjbGFyZV9yZWdpb246bSxkZWNsYXJlOmI9PT1cImdyYW50ZWRcIixpbXBsaWNpdDpnLmltcGxpY2l0LGRlZmF1bHQ6Zy5kZWZhdWx0LHVwZGF0ZTpnLnVwZGF0ZSxxdWlldDpnLnF1aWV0fTtpZihkIT09XCJcInx8Zy5kZWNsYXJlIT09ITEpZlthXT1ufX07XG5iYS5pbXBsaWNpdD1mdW5jdGlvbihhLGIpe3RoaXMudXNlZEltcGxpY2l0PSEwO3ZhciBjPXRoaXMuZW50cmllcyxkPWNbYV09Y1thXXx8e307ZC5pbXBsaWNpdCE9PSExJiYoZC5pbXBsaWNpdD1iPT09XCJncmFudGVkXCIpfTtcbmJhLmdldENvbnNlbnRTdGF0ZT1mdW5jdGlvbihhLGIpe3ZhciBjPXRoaXMuZW50cmllcyxkPWNbYV18fHt9LGU9ZC51cGRhdGU7aWYoZSE9PXZvaWQgMClyZXR1cm4gZT8xOjI7aWYobWIoOCkmJmIudXNlZENvbnRhaW5lclNjb3BlZERlZmF1bHRzKXt2YXIgZj1iLmNvbnRhaW5lclNjb3BlZERlZmF1bHRzW2FdO2lmKGY9PT0zKXJldHVybiAxO2lmKGY9PT0yKXJldHVybiAyfWVsc2UgaWYoZT1kLmRlZmF1bHQsZSE9PXZvaWQgMClyZXR1cm4gZT8xOjI7aWYoYj09bnVsbD8wOmIuZGVsZWdhdGVkQ29uc2VudFR5cGVzLmhhc093blByb3BlcnR5KGEpKXt2YXIgZz1iLmRlbGVnYXRlZENvbnNlbnRUeXBlc1thXSxrPWNbZ118fHt9O2U9ay51cGRhdGU7aWYoZSE9PXZvaWQgMClyZXR1cm4gZT8xOjI7aWYobWIoOCkmJmIudXNlZENvbnRhaW5lclNjb3BlZERlZmF1bHRzKXt2YXIgbT1iLmNvbnRhaW5lclNjb3BlZERlZmF1bHRzW2ddO2lmKG09PT0zKXJldHVybiAxO2lmKG09PT0yKXJldHVybiAyfWVsc2UgaWYoZT1cbmsuZGVmYXVsdCxlIT09dm9pZCAwKXJldHVybiBlPzE6Mn1lPWQuZGVjbGFyZTtpZihlIT09dm9pZCAwKXJldHVybiBlPzE6MjtlPWQuaW1wbGljaXQ7cmV0dXJuIGUhPT12b2lkIDA/ZT8zOjQ6MH07YmEuYWRkTGlzdGVuZXI9ZnVuY3Rpb24oYSxiKXt0aGlzLmoucHVzaCh7Y29uc2VudFR5cGVzOmEsQ2w6Yn0pfTt2YXIgcms9ZnVuY3Rpb24oYSxiKXtmb3IodmFyIGM9MDtjPGEuai5sZW5ndGg7KytjKXt2YXIgZD1hLmpbY107QXJyYXkuaXNBcnJheShkLmNvbnNlbnRUeXBlcykmJmQuY29uc2VudFR5cGVzLmluZGV4T2YoYikhPT0tMSYmKGQuVGo9ITApfX07cGsucHJvdG90eXBlLm5vdGlmeUxpc3RlbmVycz1mdW5jdGlvbihhLGIpe2Zvcih2YXIgYz0wO2M8dGhpcy5qLmxlbmd0aDsrK2Mpe3ZhciBkPXRoaXMualtjXTtpZihkLlRqKXtkLlRqPSExO3RyeXtkLkNsKHtjb25zZW50RXZlbnRJZDphLGNvbnNlbnRQcmlvcml0eUlkOmJ9KX1jYXRjaChlKXt9fX19O3ZhciBzaz0hMSx0az0hMSx1az17fSx2az17ZGVsZWdhdGVkQ29uc2VudFR5cGVzOnt9LGNvcmVQbGF0Zm9ybVNlcnZpY2VzOnt9LHVzZWRDb3JlUGxhdGZvcm1TZXJ2aWNlczohMSxzZWxlY3RlZEFsbENvcmVQbGF0Zm9ybVNlcnZpY2VzOiExLGNvbnRhaW5lclNjb3BlZERlZmF1bHRzOih1ay5hZF9zdG9yYWdlPTEsdWsuYW5hbHl0aWNzX3N0b3JhZ2U9MSx1ay5hZF91c2VyX2RhdGE9MSx1ay5hZF9wZXJzb25hbGl6YXRpb249MSx1ayksdXNlZENvbnRhaW5lclNjb3BlZERlZmF1bHRzOiExfTtmdW5jdGlvbiB3ayhhKXt2YXIgYj1vaygpO2IuYWNjZXNzZWRBbnk9ITA7cmV0dXJuKGwoYSk/W2FdOmEpLmV2ZXJ5KGZ1bmN0aW9uKGMpe3N3aXRjaChiLmdldENvbnNlbnRTdGF0ZShjLHZrKSl7Y2FzZSAxOmNhc2UgMzpyZXR1cm4hMDtjYXNlIDI6Y2FzZSA0OnJldHVybiExO2RlZmF1bHQ6cmV0dXJuITB9fSl9XG5mdW5jdGlvbiB4ayhhKXt2YXIgYj1vaygpO2IuYWNjZXNzZWRBbnk9ITA7cmV0dXJuIGIuZ2V0Q29uc2VudFN0YXRlKGEsdmspfWZ1bmN0aW9uIHlrKGEpe2Zvcih2YXIgYj17fSxjPW5hKGEpLGQ9Yy5uZXh0KCk7IWQuZG9uZTtkPWMubmV4dCgpKXt2YXIgZT1kLnZhbHVlO2JbZV09dmsuY29yZVBsYXRmb3JtU2VydmljZXNbZV0hPT0hMX1yZXR1cm4gYn1mdW5jdGlvbiB6ayhhKXt2YXIgYj1vaygpO2IuYWNjZXNzZWRBbnk9ITA7cmV0dXJuIShiLmVudHJpZXNbYV18fHt9KS5xdWlldH1cbmZ1bmN0aW9uIEFrKCl7aWYoIW1iKDEyKSlyZXR1cm4hMTt2YXIgYT1vaygpO2EuYWNjZXNzZWRBbnk9ITA7aWYoYS5hY3RpdmUpcmV0dXJuITA7aWYoIW1iKDgpfHwhdmsudXNlZENvbnRhaW5lclNjb3BlZERlZmF1bHRzKXJldHVybiExO2Zvcih2YXIgYj1uYShPYmplY3Qua2V5cyh2ay5jb250YWluZXJTY29wZWREZWZhdWx0cykpLGM9Yi5uZXh0KCk7IWMuZG9uZTtjPWIubmV4dCgpKWlmKHZrLmNvbnRhaW5lclNjb3BlZERlZmF1bHRzW2MudmFsdWVdIT09MSlyZXR1cm4hMDtyZXR1cm4hMX1mdW5jdGlvbiBCayhhLGIpe29rKCkuYWRkTGlzdGVuZXIoYSxiKX1mdW5jdGlvbiBDayhhLGIpe29rKCkubm90aWZ5TGlzdGVuZXJzKGEsYil9XG5mdW5jdGlvbiBEayhhLGIpe2Z1bmN0aW9uIGMoKXtmb3IodmFyIGU9MDtlPGIubGVuZ3RoO2UrKylpZighemsoYltlXSkpcmV0dXJuITA7cmV0dXJuITF9aWYoYygpKXt2YXIgZD0hMTtCayhiLGZ1bmN0aW9uKGUpe2R8fGMoKXx8KGQ9ITAsYShlKSl9KX1lbHNlIGEoe30pfVxuZnVuY3Rpb24gRWsoYSxiKXtmdW5jdGlvbiBjKCl7Zm9yKHZhciBrPVtdLG09MDttPGUubGVuZ3RoO20rKyl7dmFyIG49ZVttXTt3ayhuKSYmIWZbbl0mJmsucHVzaChuKX1yZXR1cm4ga31mdW5jdGlvbiBkKGspe2Zvcih2YXIgbT0wO208ay5sZW5ndGg7bSsrKWZba1ttXV09ITB9dmFyIGU9bChiKT9bYl06YixmPXt9LGc9YygpO2cubGVuZ3RoIT09ZS5sZW5ndGgmJihkKGcpLEJrKGUsZnVuY3Rpb24oayl7ZnVuY3Rpb24gbShxKXtxLmxlbmd0aCE9PTAmJihkKHEpLGsuY29uc2VudFR5cGVzPXEsYShrKSl9dmFyIG49YygpO2lmKG4ubGVuZ3RoIT09MCl7dmFyIHA9T2JqZWN0LmtleXMoZikubGVuZ3RoO24ubGVuZ3RoK3A+PWUubGVuZ3RoP20obik6RC5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7bShjKCkpfSw1MDApfX0pKX07dmFyIEZrPVtcImFkX3N0b3JhZ2VcIixcImFuYWx5dGljc19zdG9yYWdlXCIsXCJhZF91c2VyX2RhdGFcIixcImFkX3BlcnNvbmFsaXphdGlvblwiXSxHaz0hMSxIaz0hMTtmdW5jdGlvbiBJaygpe1EoNTApJiYhSGsmJkdrJiYoRmsuc29tZShmdW5jdGlvbihhKXtyZXR1cm4gdmsuY29udGFpbmVyU2NvcGVkRGVmYXVsdHNbYV0hPT0xfSl8fEprKFwibWJjXCIpKTtIaz0hMH1mdW5jdGlvbiBKayhhKXtyaiYmKGZrKGEsXCIxXCIpLGprKCkpfWZ1bmN0aW9uIEtrKGEpe2hiKFwiSEVBTFRIXCIsYSl9O3ZhciBMazt0cnl7TGs9SlNPTi5wYXJzZShmYihcImV5SXdJam9pVEZVaUxDSXhJam9pSWl3aU1pSTZabUZzYzJVc0lqTWlPaUpuYjI5bmJHVXViSFVpTENJMElqb2ljbVZuYVc5dU1TSXNJalVpT21aaGJITmxMQ0kySWpwMGNuVmxMQ0kzSWpvaVlXUmZjM1J2Y21GblpYeGhibUZzZVhScFkzTmZjM1J2Y21GblpYeGhaRjkxYzJWeVgyUmhkR0Y4WVdSZmNHVnljMjl1WVd4cGVtRjBhVzl1SW4wXCIpKX1jYXRjaChhKXtNKDEyMyksS2soMiksTGs9e319ZnVuY3Rpb24gTWsoKXtyZXR1cm4gTGtbXCIwXCJdfHxcIlwifWZ1bmN0aW9uIE5rKCl7cmV0dXJuIExrW1wiMVwiXXx8XCJcIn1mdW5jdGlvbiBPaygpe3ZhciBhPSExO2E9ISFMa1tcIjJcIl07cmV0dXJuIGF9ZnVuY3Rpb24gUGsoKXtyZXR1cm4gTGtbXCI2XCJdIT09ITF9ZnVuY3Rpb24gUWsoKXt2YXIgYT1cIlwiO2E9TGtbXCI0XCJdfHxcIlwiO3JldHVybiBhfVxuZnVuY3Rpb24gUmsoKXt2YXIgYT0hMTthPSEhTGtbXCI1XCJdO3JldHVybiBhfWZ1bmN0aW9uIFNrKCl7dmFyIGE9XCJcIjthPUxrW1wiM1wiXXx8XCJcIjtyZXR1cm4gYX12YXIgVGs9W1QuZy5QLFQuZy5VLFQuZy5PLFQuZy53YV0sVWssVms7ZnVuY3Rpb24gV2soYSl7Zm9yKHZhciBiPWFbVC5nLkNiXSxjPUFycmF5LmlzQXJyYXkoYik/YjpbYl0sZD17SGU6MH07ZC5IZTxjLmxlbmd0aDtkPXtIZTpkLkhlfSwrK2QuSGUpeihhLGZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbihmLGcpe2lmKGYhPT1ULmcuQ2Ipe3ZhciBrPWNbZS5IZV0sbT1NaygpLG49TmsoKTt0az0hMDtzayYmaGIoXCJUQUdHSU5HXCIsMjApO29rKCkuZGVjbGFyZShmLGcsayxtLG4pfX19KGQpKX1cbmZ1bmN0aW9uIFhrKGEpe0lrKCk7IVZrJiZVayYmSmsoXCJjcmNcIik7Vms9ITA7dmFyIGI9YVtULmcuQ2JdO2ImJk0oNDApO3ZhciBjPWFbVC5nLlplXTtjJiZNKDQxKTtmb3IodmFyIGQ9QXJyYXkuaXNBcnJheShiKT9iOltiXSxlPXtJZTowfTtlLkllPGQubGVuZ3RoO2U9e0llOmUuSWV9LCsrZS5JZSl6KGEsZnVuY3Rpb24oZil7cmV0dXJuIGZ1bmN0aW9uKGcsayl7aWYoZyE9PVQuZy5DYiYmZyE9PVQuZy5aZSl7dmFyIG09ZFtmLkllXSxuPU51bWJlcihjKSxwPU1rKCkscT1OaygpO249bj09PXZvaWQgMD8wOm47c2s9ITA7dGsmJmhiKFwiVEFHR0lOR1wiLDIwKTtvaygpLmRlZmF1bHQoZyxrLG0scCxxLG4sdmspfX19KGUpKX1cbmZ1bmN0aW9uIFlrKGEpe2lmKFEoOTkpKXttYig5KSYmKHZrLnVzZWRDb250YWluZXJTY29wZWREZWZhdWx0cz0hMCk7dmFyIGI9YVtULmcuQ2JdO2lmKGIpe3ZhciBjPUFycmF5LmlzQXJyYXkoYik/YjpbYl07aWYoIWMuaW5jbHVkZXMoTmsoKSkmJiFjLmluY2x1ZGVzKE1rKCkpKXJldHVybn16KGEsZnVuY3Rpb24oZCxlKXtzd2l0Y2goZCl7Y2FzZSBcImFkX3N0b3JhZ2VcIjpjYXNlIFwiYW5hbHl0aWNzX3N0b3JhZ2VcIjpjYXNlIFwiYWRfdXNlcl9kYXRhXCI6Y2FzZSBcImFkX3BlcnNvbmFsaXphdGlvblwiOmJyZWFrO2RlZmF1bHQ6cmV0dXJufW1iKDkpJiYodmsudXNlZENvbnRhaW5lclNjb3BlZERlZmF1bHRzPSEwKTt2ay5jb250YWluZXJTY29wZWREZWZhdWx0c1tkXT1lPT09XCJncmFudGVkXCI/MzoyfSl9fVxuZnVuY3Rpb24gWmsoYSxiKXtJaygpO1VrPSEwO3ooYSxmdW5jdGlvbihjLGQpe3NrPSEwO3RrJiZoYihcIlRBR0dJTkdcIiwyMCk7b2soKS51cGRhdGUoYyxkLHZrKX0pO0NrKGIuZXZlbnRJZCxiLnByaW9yaXR5SWQpfWZ1bmN0aW9uICRrKGEpe2EuaGFzT3duUHJvcGVydHkoXCJhbGxcIikmJih2ay5zZWxlY3RlZEFsbENvcmVQbGF0Zm9ybVNlcnZpY2VzPSEwLHooZ2ksZnVuY3Rpb24oYil7dmsuY29yZVBsYXRmb3JtU2VydmljZXNbYl09YS5hbGw9PT1cImdyYW50ZWRcIjt2ay51c2VkQ29yZVBsYXRmb3JtU2VydmljZXM9ITB9KSk7eihhLGZ1bmN0aW9uKGIsYyl7YiE9PVwiYWxsXCImJih2ay5jb3JlUGxhdGZvcm1TZXJ2aWNlc1tiXT1jPT09XCJncmFudGVkXCIsdmsudXNlZENvcmVQbGF0Zm9ybVNlcnZpY2VzPSEwKX0pfWZ1bmN0aW9uIFcoYSl7QXJyYXkuaXNBcnJheShhKXx8KGE9W2FdKTtyZXR1cm4gYS5ldmVyeShmdW5jdGlvbihiKXtyZXR1cm4gd2soYil9KX1cbmZ1bmN0aW9uIGFsKGEsYil7QmsoYSxiKX1mdW5jdGlvbiBibChhLGIpe0VrKGEsYil9ZnVuY3Rpb24gY2woYSxiKXtEayhhLGIpfWZ1bmN0aW9uIGRsKCl7dmFyIGE9W1QuZy5QLFQuZy53YSxULmcuT107b2soKS53YWl0Rm9yVXBkYXRlKGEsNTAwLHZrKX1mdW5jdGlvbiBlbChhKXtmb3IodmFyIGI9bmEoYSksYz1iLm5leHQoKTshYy5kb25lO2M9Yi5uZXh0KCkpe3ZhciBkPWMudmFsdWU7b2soKS5jbGVhclRpbWVvdXQoZCx2b2lkIDAsdmspfUNrKCl9ZnVuY3Rpb24gZmwoKXtpZihpaS5wc2NkbD09PXZvaWQgMCl7dmFyIGE9ZnVuY3Rpb24oYyl7aWkucHNjZGw9Y30sYj1mdW5jdGlvbigpe2EoXCJlcnJvclwiKX07dHJ5e29jLmNvb2tpZURlcHJlY2F0aW9uTGFiZWw/KGEoXCJwZW5kaW5nXCIpLG9jLmNvb2tpZURlcHJlY2F0aW9uTGFiZWwuZ2V0VmFsdWUoKS50aGVuKGEpLmNhdGNoKGIpKTphKFwibm9hcGlcIil9Y2F0Y2goYyl7YihjKX19fTtmdW5jdGlvbiBnbChhLGIpe1EoMTMpJiZiJiZ6KGIsZnVuY3Rpb24oYyxkKXt0eXBlb2YgZCE9PVwib2JqZWN0XCImJmQhPT12b2lkIDAmJihhW1wiMXAuXCIrY109U3RyaW5nKGQpKX0pfTt2YXIgaGw9L1tBLVpdKy8saWw9L1xccy87ZnVuY3Rpb24gamwoYSxiKXtpZihsKGEpKXthPXpiKGEpO3ZhciBjPWEuaW5kZXhPZihcIi1cIik7aWYoIShjPDApKXt2YXIgZD1hLnN1YnN0cmluZygwLGMpO2lmKGhsLnRlc3QoZCkpe3ZhciBlPWEuc3Vic3RyaW5nKGMrMSksZjtpZihiKXt2YXIgZz1mdW5jdGlvbihuKXt2YXIgcD1uLmluZGV4T2YoXCIvXCIpO3JldHVybiBwPDA/W25dOltuLnN1YnN0cmluZygwLHApLG4uc3Vic3RyaW5nKHArMSldfTtmPWcoZSk7aWYoZD09PVwiRENcIiYmZi5sZW5ndGg9PT0yKXt2YXIgaz1nKGZbMV0pO2subGVuZ3RoPT09MiYmKGZbMV09a1swXSxmLnB1c2goa1sxXSkpfX1lbHNle2Y9ZS5zcGxpdChcIi9cIik7Zm9yKHZhciBtPTA7bTxmLmxlbmd0aDttKyspaWYoIWZbbV18fGlsLnRlc3QoZlttXSkmJihkIT09XCJBV1wifHxtIT09MSkpcmV0dXJufXJldHVybntpZDphLHByZWZpeDpkLGRlc3RpbmF0aW9uSWQ6ZCtcIi1cIitmWzBdLGlkczpmfX19fX1cbmZ1bmN0aW9uIGtsKGEsYil7Zm9yKHZhciBjPXt9LGQ9MDtkPGEubGVuZ3RoOysrZCl7dmFyIGU9amwoYVtkXSxiKTtlJiYoY1tlLmlkXT1lKX1sbChjKTt2YXIgZj1bXTt6KGMsZnVuY3Rpb24oZyxrKXtmLnB1c2goayl9KTtyZXR1cm4gZn1mdW5jdGlvbiBsbChhKXt2YXIgYj1bXSxjO2ZvcihjIGluIGEpaWYoYS5oYXNPd25Qcm9wZXJ0eShjKSl7dmFyIGQ9YVtjXTtkLnByZWZpeD09PVwiQVdcIiYmZC5pZHNbbWxbMl1dJiZiLnB1c2goZC5kZXN0aW5hdGlvbklkKX1mb3IodmFyIGU9MDtlPGIubGVuZ3RoOysrZSlkZWxldGUgYVtiW2VdXX12YXIgbmw9e30sbWw9KG5sWzBdPTAsbmxbMV09MCxubFsyXT0xLG5sWzNdPTAsbmxbNF09MSxubFs1XT0yLG5sWzZdPTAsbmxbN109MCxubFs4XT0wLG5sKTt2YXIgb2w9TnVtYmVyKCcnKXx8NTAwLHBsPXt9LHFsPXt9LHJsPXtpbml0aWFsaXplZDoxMSxjb21wbGV0ZToxMixpbnRlcmFjdGl2ZToxM30sc2w9e30sdGw9T2JqZWN0LmZyZWV6ZSgoc2xbVC5nLklhXT0hMCxzbCkpLHVsPUUubG9jYXRpb24uc2VhcmNoLmluZGV4T2YoXCI/Z3RtX2RpYWdub3N0aWNzPVwiKT49MHx8RS5sb2NhdGlvbi5zZWFyY2guaW5kZXhPZihcIiZndG1fZGlhZ25vc3RpY3M9XCIpPj0wLHZsPXZvaWQgMDtcbmZ1bmN0aW9uIHdsKGEsYil7aWYoYi5sZW5ndGgmJnJqKXt2YXIgYzsoYz1wbClbYV0hPW51bGx8fChjW2FdPVtdKTtxbFthXSE9bnVsbHx8KHFsW2FdPVtdKTt2YXIgZD1iLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4hcWxbYV0uaW5jbHVkZXMoZSl9KTtwbFthXS5wdXNoLmFwcGx5KHBsW2FdLHBhKGQpKTtxbFthXS5wdXNoLmFwcGx5KHFsW2FdLHBhKGQpKTshdmwmJmQubGVuZ3RoPjAmJihnayhcInRkY1wiLCEwKSx2bD1ELnNldFRpbWVvdXQoZnVuY3Rpb24oKXtqaygpO3BsPXt9O3ZsPXZvaWQgMH0sb2wpKX19XG5mdW5jdGlvbiB4bChhLGIsYyl7aWYocmomJmE9PT1cImNvbmZpZ1wiKXt2YXIgZCxlPShkPWpsKGIpKT09bnVsbD92b2lkIDA6ZC5pZHM7aWYoIShlJiZlLmxlbmd0aD4xKSl7dmFyIGYsZz1zYyhcImdvb2dsZV90YWdfZGF0YVwiLHt9KTtnLnRkfHwoZy50ZD17fSk7Zj1nLnRkO3ZhciBrPWgoYy5NKTtoKGMuaixrKTt2YXIgbT1bXSxuO2ZvcihuIGluIGYpaWYoZi5oYXNPd25Qcm9wZXJ0eShuKSl7dmFyIHA9eWwoZltuXSxrKTtwLmxlbmd0aCYmKHVsJiZjb25zb2xlLmxvZyhwKSxtLnB1c2gobikpfW0ubGVuZ3RoJiYod2woYixtKSxoYihcIlRBR0dJTkdcIixybFtFLnJlYWR5U3RhdGVdfHwxNCkpO2ZbYl09a319fWZ1bmN0aW9uIHpsKGEsYil7dmFyIGM9e30sZDtmb3IoZCBpbiBiKWIuaGFzT3duUHJvcGVydHkoZCkmJihjW2RdPSEwKTtmb3IodmFyIGUgaW4gYSlhLmhhc093blByb3BlcnR5KGUpJiYoY1tlXT0hMCk7cmV0dXJuIGN9XG5mdW5jdGlvbiB5bChhLGIsYyxkKXtjPWM9PT12b2lkIDA/e306YztkPWQ9PT12b2lkIDA/XCJcIjpkO2lmKGE9PT1iKXJldHVybltdO3ZhciBlPWZ1bmN0aW9uKHIsdCl7dmFyIHU7UWEodCk9PT1cIm9iamVjdFwiP3U9dFtyXTpRYSh0KT09PVwiYXJyYXlcIiYmKHU9dFtyXSk7cmV0dXJuIHU9PT12b2lkIDA/dGxbcl06dX0sZj16bChhLGIpLGc7Zm9yKGcgaW4gZilpZihmLmhhc093blByb3BlcnR5KGcpKXt2YXIgaz0oZD9kK1wiLlwiOlwiXCIpK2csbT1lKGcsYSksbj1lKGcsYikscD1RYShtKT09PVwib2JqZWN0XCJ8fFFhKG0pPT09XCJhcnJheVwiLHE9UWEobik9PT1cIm9iamVjdFwifHxRYShuKT09PVwiYXJyYXlcIjtpZihwJiZxKXlsKG0sbixjLGspO2Vsc2UgaWYocHx8cXx8bSE9PW4pY1trXT0hMH1yZXR1cm4gT2JqZWN0LmtleXMoYyl9XG5mdW5jdGlvbiBBbCgpe2ZrKFwidGRjXCIsZnVuY3Rpb24oKXt2bCYmKEQuY2xlYXJUaW1lb3V0KHZsKSx2bD12b2lkIDApO3ZhciBhPVtdLGI7Zm9yKGIgaW4gcGwpcGwuaGFzT3duUHJvcGVydHkoYikmJmEucHVzaChiK1wiKlwiK3BsW2JdLmpvaW4oXCIuXCIpKTtyZXR1cm4gYS5sZW5ndGg/YS5qb2luKFwiIVwiKTp2b2lkIDB9LCExKX07dmFyIEJsPWZ1bmN0aW9uKGEsYixjLGQsZSxmLGcsayxtLG4scCl7dGhpcy5ldmVudElkPWE7dGhpcy5wcmlvcml0eUlkPWI7dGhpcy5qPWM7dGhpcy5SPWQ7dGhpcy5IPWU7dGhpcy5NPWY7dGhpcy5EPWc7dGhpcy5ldmVudE1ldGFkYXRhPWs7dGhpcy5vblN1Y2Nlc3M9bTt0aGlzLm9uRmFpbHVyZT1uO3RoaXMuaXNHdG1FdmVudD1wfSxDbD1mdW5jdGlvbihhLGIpe3ZhciBjPVtdO3N3aXRjaChiKXtjYXNlIDM6Yy5wdXNoKGEuaik7Yy5wdXNoKGEuUik7Yy5wdXNoKGEuSCk7Yy5wdXNoKGEuTSk7Yy5wdXNoKGEuRCk7YnJlYWs7Y2FzZSAyOmMucHVzaChhLmopO2JyZWFrO2Nhc2UgMTpjLnB1c2goYS5SKTtjLnB1c2goYS5IKTtjLnB1c2goYS5NKTtjLnB1c2goYS5EKTticmVhaztjYXNlIDQ6Yy5wdXNoKGEuaiksYy5wdXNoKGEuUiksYy5wdXNoKGEuSCksYy5wdXNoKGEuTSl9cmV0dXJuIGN9LFU9ZnVuY3Rpb24oYSxiLGMsZCl7Zm9yKHZhciBlPW5hKENsKGEsZD09PXZvaWQgMD8zOlxuZCkpLGY9ZS5uZXh0KCk7IWYuZG9uZTtmPWUubmV4dCgpKXt2YXIgZz1mLnZhbHVlO2lmKGdbYl0hPT12b2lkIDApcmV0dXJuIGdbYl19cmV0dXJuIGN9LERsPWZ1bmN0aW9uKGEpe2Zvcih2YXIgYj17fSxjPUNsKGEsNCksZD1uYShjKSxlPWQubmV4dCgpOyFlLmRvbmU7ZT1kLm5leHQoKSlmb3IodmFyIGY9T2JqZWN0LmtleXMoZS52YWx1ZSksZz1uYShmKSxrPWcubmV4dCgpOyFrLmRvbmU7az1nLm5leHQoKSliW2sudmFsdWVdPTE7cmV0dXJuIE9iamVjdC5rZXlzKGIpfSxFbD1mdW5jdGlvbihhLGIsYyl7ZnVuY3Rpb24gZChuKXtTYShuKSYmeihuLGZ1bmN0aW9uKHAscSl7Zj0hMDtlW3BdPXF9KX12YXIgZT17fSxmPSExLGc9Q2woYSxjPT09dm9pZCAwPzM6Yyk7Zy5yZXZlcnNlKCk7Zm9yKHZhciBrPW5hKGcpLG09ay5uZXh0KCk7IW0uZG9uZTttPWsubmV4dCgpKWQobS52YWx1ZVtiXSk7cmV0dXJuIGY/ZTp2b2lkIDB9LEZsPWZ1bmN0aW9uKGEpe2Zvcih2YXIgYj1bVC5nLlJjLFxuVC5nLk5jLFQuZy5PYyxULmcuUGMsVC5nLlFjLFQuZy5TYyxULmcuVGNdLGM9Q2woYSwzKSxkPW5hKGMpLGU9ZC5uZXh0KCk7IWUuZG9uZTtlPWQubmV4dCgpKXtmb3IodmFyIGY9ZS52YWx1ZSxnPXt9LGs9ITEsbT1uYShiKSxuPW0ubmV4dCgpOyFuLmRvbmU7bj1tLm5leHQoKSl7dmFyIHA9bi52YWx1ZTtmW3BdIT09dm9pZCAwJiYoZ1twXT1mW3BdLGs9ITApfXZhciBxPWs/Zzp2b2lkIDA7aWYocSlyZXR1cm4gcX1yZXR1cm57fX0sR2w9ZnVuY3Rpb24oYSxiKXt0aGlzLmV2ZW50SWQ9YTt0aGlzLnByaW9yaXR5SWQ9Yjt0aGlzLkQ9e307dGhpcy5SPXt9O3RoaXMuaj17fTt0aGlzLkg9e307dGhpcy5aPXt9O3RoaXMuTT17fTt0aGlzLmV2ZW50TWV0YWRhdGE9e307dGhpcy5pc0d0bUV2ZW50PSExO3RoaXMub25TdWNjZXNzPWZ1bmN0aW9uKCl7fTt0aGlzLm9uRmFpbHVyZT1mdW5jdGlvbigpe319LEhsPWZ1bmN0aW9uKGEsYil7YS5EPWI7cmV0dXJuIGF9LElsPWZ1bmN0aW9uKGEsXG5iKXthLlI9YjtyZXR1cm4gYX0sSmw9ZnVuY3Rpb24oYSxiKXthLmo9YjtyZXR1cm4gYX0sS2w9ZnVuY3Rpb24oYSxiKXthLkg9YjtyZXR1cm4gYX0sTGw9ZnVuY3Rpb24oYSxiKXthLlo9YjtyZXR1cm4gYX0sTWw9ZnVuY3Rpb24oYSxiKXthLk09YjtyZXR1cm4gYX0sTmw9ZnVuY3Rpb24oYSxiKXthLmV2ZW50TWV0YWRhdGE9Ynx8e307cmV0dXJuIGF9LE9sPWZ1bmN0aW9uKGEsYil7YS5vblN1Y2Nlc3M9YjtyZXR1cm4gYX0sUGw9ZnVuY3Rpb24oYSxiKXthLm9uRmFpbHVyZT1iO3JldHVybiBhfSxRbD1mdW5jdGlvbihhLGIpe2EuaXNHdG1FdmVudD1iO3JldHVybiBhfSxSbD1mdW5jdGlvbihhKXtyZXR1cm4gbmV3IEJsKGEuZXZlbnRJZCxhLnByaW9yaXR5SWQsYS5ELGEuUixhLmosYS5ILGEuTSxhLmV2ZW50TWV0YWRhdGEsYS5vblN1Y2Nlc3MsYS5vbkZhaWx1cmUsYS5pc0d0bUV2ZW50KX07dmFyIFNsPXtrazpOdW1iZXIoXCI1XCIpLFFuOk51bWJlcihcIlwiKX0sVGw9W107ZnVuY3Rpb24gVWwoYSl7VGwucHVzaChhKX12YXIgVmw9XCI/aWQ9XCIrT2YuY3RpZCxXbD12b2lkIDAsWGw9e30sWWw9dm9pZCAwLFpsPW5ldyBmdW5jdGlvbigpe3ZhciBhPTU7U2wua2s+MCYmKGE9U2wua2spO3RoaXMuRD1hO3RoaXMuaj0wO3RoaXMuSD1bXX0sJGw9MUUzO1xuZnVuY3Rpb24gYW0oYSxiKXt2YXIgYz1XbDtpZihjPT09dm9pZCAwKWlmKGIpYz16aSgpO2Vsc2UgcmV0dXJuXCJcIjtmb3IodmFyIGQ9W2pqKFwiaHR0cHM6Ly93d3cuZ29vZ2xldGFnbWFuYWdlci5jb21cIiksXCIvYVwiLFZsXSxlPW5hKFRsKSxmPWUubmV4dCgpOyFmLmRvbmU7Zj1lLm5leHQoKSlmb3IodmFyIGc9Zi52YWx1ZSxrPWcoe2V2ZW50SWQ6YyxoYzohIWF9KSxtPW5hKGspLG49bS5uZXh0KCk7IW4uZG9uZTtuPW0ubmV4dCgpKXt2YXIgcD1uYShuLnZhbHVlKSxxPXAubmV4dCgpLnZhbHVlLHI9cC5uZXh0KCkudmFsdWU7ZC5wdXNoKFwiJlwiK3ErXCI9XCIrcil9ZC5wdXNoKFwiJno9MFwiKTtyZXR1cm4gZC5qb2luKFwiXCIpfVxuZnVuY3Rpb24gYm0oKXtZbCYmKEQuY2xlYXJUaW1lb3V0KFlsKSxZbD12b2lkIDApO2lmKFdsIT09dm9pZCAwJiZjbSl7dmFyIGE7KGE9WGxbV2xdKXx8KGE9WmwuajxabC5EPyExOkJiKCktWmwuSFtabC5qJVpsLkRdPDFFMyk7aWYoYXx8JGwtLTw9MClNKDEpLFhsW1dsXT0hMDtlbHNle3ZhciBiPVpsLmorKyVabC5EO1psLkhbYl09QmIoKTt2YXIgYz1hbSghMCk7QWMoYyk7Y209ITF9fX12YXIgY209ITE7ZnVuY3Rpb24gZG0oYSl7WGxbYV18fChhIT09V2wmJihibSgpLFdsPWEpLGNtPSEwLFlsfHwoWWw9RC5zZXRUaW1lb3V0KGJtLDUwMCkpLGFtKCkubGVuZ3RoPj0yMDIyJiZibSgpKX12YXIgZW09c2IoKTtmdW5jdGlvbiBmbSgpe2VtPXNiKCl9ZnVuY3Rpb24gZ20oKXtyZXR1cm5bW1widlwiLFwiM1wiXSxbXCJ0XCIsXCJ0XCJdLFtcInBpZFwiLFN0cmluZyhlbSldXX12YXIgaG09e307ZnVuY3Rpb24gaW0oYSxiLGMpe3FqJiZhIT09dm9pZCAwJiYoaG1bYV09aG1bYV18fFtdLGhtW2FdLnB1c2goYytiKSxkbShhKSl9ZnVuY3Rpb24gam0oYSl7dmFyIGI9YS5ldmVudElkLGM9YS5oYyxkPVtdLGU9aG1bYl18fFtdO2UubGVuZ3RoJiZkLnB1c2goW1wiZXByXCIsZS5qb2luKFwiLlwiKV0pO2MmJmRlbGV0ZSBobVtiXTtyZXR1cm4gZH07ZnVuY3Rpb24ga20oYSxiKXt2YXIgYz1qbChIaihhKSwhMCk7YyYmbG0ucmVnaXN0ZXIoYyxiKX1mdW5jdGlvbiBtbShhLGIsYyxkKXt2YXIgZT1qbChjLGQuaXNHdG1FdmVudCk7ZSYmKFEoNDkpJiZRKDQ5KSYmbmkmJihkLmRlZmVycmFibGU9ITApLGxtLnB1c2goXCJldmVudFwiLFtiLGFdLGUsZCkpfWZ1bmN0aW9uIG5tKGEsYixjLGQpe3ZhciBlPWpsKGMsZC5pc0d0bUV2ZW50KTtlJiZsbS5wdXNoKFwiZ2V0XCIsW2EsYl0sZSxkKX1mdW5jdGlvbiBvbShhKXt2YXIgYj1qbChIaihhKSwhMCksYztiP2M9cG0obG0sYikuajpjPXt9O3JldHVybiBjfWZ1bmN0aW9uIHFtKGEsYil7dmFyIGM9amwoSGooYSksITApO2lmKGMpe3ZhciBkPWxtLGU9aChiLG51bGwpO2gocG0oZCxjKS5qLGUpO3BtKGQsYykuaj1lfX1cbnZhciBybT1mdW5jdGlvbigpe3RoaXMuUj17fTt0aGlzLmo9e307dGhpcy5EPXt9O3RoaXMuWj1udWxsO3RoaXMuTT17fTt0aGlzLkg9ITE7dGhpcy5zdGF0dXM9MX0sc209ZnVuY3Rpb24oYSxiLGMsZCl7dGhpcy5EPUJiKCk7dGhpcy5qPWI7dGhpcy5hcmdzPWM7dGhpcy5tZXNzYWdlQ29udGV4dD1kO3RoaXMudHlwZT1hfSx0bT1mdW5jdGlvbigpe3RoaXMuZGVzdGluYXRpb25zPXt9O3RoaXMuaj17fTt0aGlzLmNvbW1hbmRzPVtdfSxwbT1mdW5jdGlvbihhLGIpe3ZhciBjPWIuZGVzdGluYXRpb25JZDtyZXR1cm4gYS5kZXN0aW5hdGlvbnNbY109YS5kZXN0aW5hdGlvbnNbY118fG5ldyBybX0sdW09ZnVuY3Rpb24oYSxiLGMsZCl7aWYoZC5qKXt2YXIgZT1wbShhLGQuaiksZj1lLlo7aWYoZil7dmFyIGc9aChjLG51bGwpLGs9aChlLlJbZC5qLmlkXSxudWxsKSxtPWgoZS5NLG51bGwpLG49aChlLmosbnVsbCkscD1oKGEuaixudWxsKSxxPXt9O2lmKHFqKXRyeXtxPWgoR2kpfWNhdGNoKHYpe00oNzIpfXZhciByPVxuZC5qLnByZWZpeCx0PWZ1bmN0aW9uKHYpe2ltKGQubWVzc2FnZUNvbnRleHQuZXZlbnRJZCxyLHYpfSx1PVJsKFFsKFBsKE9sKE5sKExsKEtsKE1sKEpsKElsKEhsKG5ldyBHbChkLm1lc3NhZ2VDb250ZXh0LmV2ZW50SWQsZC5tZXNzYWdlQ29udGV4dC5wcmlvcml0eUlkKSxnKSxrKSxtKSxuKSxwKSxxKSxkLm1lc3NhZ2VDb250ZXh0LmV2ZW50TWV0YWRhdGEpLGZ1bmN0aW9uKCl7aWYodCl7dmFyIHY9dDt0PXZvaWQgMDt2KFwiMlwiKTtpZihkLm1lc3NhZ2VDb250ZXh0Lm9uU3VjY2VzcylkLm1lc3NhZ2VDb250ZXh0Lm9uU3VjY2VzcygpfX0pLGZ1bmN0aW9uKCl7aWYodCl7dmFyIHY9dDt0PXZvaWQgMDt2KFwiM1wiKTtpZihkLm1lc3NhZ2VDb250ZXh0Lm9uRmFpbHVyZSlkLm1lc3NhZ2VDb250ZXh0Lm9uRmFpbHVyZSgpfX0pLCEhZC5tZXNzYWdlQ29udGV4dC5pc0d0bUV2ZW50KSk7dHJ5e2ltKGQubWVzc2FnZUNvbnRleHQuZXZlbnRJZCxyLFwiMVwiKSx4bChkLnR5cGUsZC5qLmlkLHUpLFxuZihkLmouaWQsYixkLkQsdSl9Y2F0Y2godil7aW0oZC5tZXNzYWdlQ29udGV4dC5ldmVudElkLHIsXCI0XCIpfX19fTt0bS5wcm90b3R5cGUucmVnaXN0ZXI9ZnVuY3Rpb24oYSxiLGMpe3ZhciBkPXBtKHRoaXMsYSk7ZC5zdGF0dXMhPT0zJiYoZC5aPWIsZC5zdGF0dXM9MyxjJiYoaChkLmosYyksZC5qPWMpLHRoaXMuZmx1c2goKSl9O3RtLnByb3RvdHlwZS5wdXNoPWZ1bmN0aW9uKGEsYixjLGQpe2MhPT12b2lkIDAmJihwbSh0aGlzLGMpLnN0YXR1cz09PTEmJihwbSh0aGlzLGMpLnN0YXR1cz0yLHRoaXMucHVzaChcInJlcXVpcmVcIixbe31dLGMse30pKSxwbSh0aGlzLGMpLkgmJihkLmRlZmVycmFibGU9ITEpKTt0aGlzLmNvbW1hbmRzLnB1c2gobmV3IHNtKGEsYyxiLGQpKTtkLmRlZmVycmFibGV8fHRoaXMuZmx1c2goKX07XG50bS5wcm90b3R5cGUuZmx1c2g9ZnVuY3Rpb24oYSl7Zm9yKHZhciBiPXRoaXMsYz1bXSxkPSExLGU9e307dGhpcy5jb21tYW5kcy5sZW5ndGg7ZT17Q2M6dm9pZCAwLGpoOnZvaWQgMH0pe3ZhciBmPXRoaXMuY29tbWFuZHNbMF0sZz1mLmo7aWYoZi5tZXNzYWdlQ29udGV4dC5kZWZlcnJhYmxlKSFnfHxwbSh0aGlzLGcpLkg/KGYubWVzc2FnZUNvbnRleHQuZGVmZXJyYWJsZT0hMSx0aGlzLmNvbW1hbmRzLnB1c2goZikpOmMucHVzaChmKSx0aGlzLmNvbW1hbmRzLnNoaWZ0KCk7ZWxzZXtzd2l0Y2goZi50eXBlKXtjYXNlIFwicmVxdWlyZVwiOmlmKHBtKHRoaXMsZykuc3RhdHVzIT09MyYmIWEpe3RoaXMuY29tbWFuZHMucHVzaC5hcHBseSh0aGlzLmNvbW1hbmRzLGMpO3JldHVybn1icmVhaztjYXNlIFwic2V0XCI6eihmLmFyZ3NbMF0sZnVuY3Rpb24ocix0KXtoKEpiKHIsdCksYi5qKX0pO2JyZWFrO2Nhc2UgXCJjb25maWdcIjp2YXIgaz1wbSh0aGlzLGcpO2UuQ2M9e307eihmLmFyZ3NbMF0sXG5mdW5jdGlvbihyKXtyZXR1cm4gZnVuY3Rpb24odCx1KXtoKEpiKHQsdSksci5DYyl9fShlKSk7dmFyIG09ISFlLkNjW1QuZy5ZYl07ZGVsZXRlIGUuQ2NbVC5nLlliXTt2YXIgbj1nLmRlc3RpbmF0aW9uSWQ9PT1nLmlkO218fChuP2suTT17fTprLlJbZy5pZF09e30pO2suSCYmbXx8dW0odGhpcyxULmcuYmEsZS5DYyxmKTtrLkg9ITA7bj9oKGUuQ2Msay5NKTooaChlLkNjLGsuUltnLmlkXSksTSg3MCkpO2Q9ITA7YnJlYWs7Y2FzZSBcImV2ZW50XCI6ZS5qaD17fTt6KGYuYXJnc1swXSxmdW5jdGlvbihyKXtyZXR1cm4gZnVuY3Rpb24odCx1KXtoKEpiKHQsdSksci5qaCl9fShlKSk7dW0odGhpcyxmLmFyZ3NbMV0sZS5qaCxmKTticmVhaztjYXNlIFwiZ2V0XCI6dmFyIHA9e30scT0ocFtULmcucmJdPWYuYXJnc1swXSxwW1QuZy5HYl09Zi5hcmdzWzFdLHApO3VtKHRoaXMsVC5nLlRhLHEsZil9dGhpcy5jb21tYW5kcy5zaGlmdCgpO3ZtKHRoaXMsZil9fXRoaXMuY29tbWFuZHMucHVzaC5hcHBseSh0aGlzLmNvbW1hbmRzLFxuYyk7ZCYmdGhpcy5mbHVzaCgpfTt2YXIgdm09ZnVuY3Rpb24oYSxiKXtpZihiLnR5cGUhPT1cInJlcXVpcmVcIilpZihiLmopZm9yKHZhciBjPXBtKGEsYi5qKS5EW2IudHlwZV18fFtdLGQ9MDtkPGMubGVuZ3RoO2QrKyljW2RdKCk7ZWxzZSBmb3IodmFyIGUgaW4gYS5kZXN0aW5hdGlvbnMpaWYoYS5kZXN0aW5hdGlvbnMuaGFzT3duUHJvcGVydHkoZSkpe3ZhciBmPWEuZGVzdGluYXRpb25zW2VdO2lmKGYmJmYuRClmb3IodmFyIGc9Zi5EW2IudHlwZV18fFtdLGs9MDtrPGcubGVuZ3RoO2srKylnW2tdKCl9fSxsbT1uZXcgdG07dmFyIHdtPWZ1bmN0aW9uKGEsYil7dmFyIGM9ZnVuY3Rpb24oKXt9O2MucHJvdG90eXBlPWEucHJvdG90eXBlO3ZhciBkPW5ldyBjO2EuYXBwbHkoZCxBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsMSkpO3JldHVybiBkfSx4bT1mdW5jdGlvbihhKXt2YXIgYj1hO3JldHVybiBmdW5jdGlvbigpe2lmKGIpe3ZhciBjPWI7Yj1udWxsO2MoKX19fTt2YXIgeW09ZnVuY3Rpb24oYSxiLGMpe2EuYWRkRXZlbnRMaXN0ZW5lciYmYS5hZGRFdmVudExpc3RlbmVyKGIsYywhMSl9LHptPWZ1bmN0aW9uKGEsYixjKXthLnJlbW92ZUV2ZW50TGlzdGVuZXImJmEucmVtb3ZlRXZlbnRMaXN0ZW5lcihiLGMsITEpfTt2YXIgQW0sQm07YTp7Zm9yKHZhciBDbT1bXCJDTE9TVVJFX0ZMQUdTXCJdLERtPUFhLEVtPTA7RW08Q20ubGVuZ3RoO0VtKyspaWYoRG09RG1bQ21bRW1dXSxEbT09bnVsbCl7Qm09bnVsbDticmVhayBhfUJtPURtfXZhciBGbT1CbSYmQm1bNjEwNDAxMzAxXTtBbT1GbSE9bnVsbD9GbTohMTtmdW5jdGlvbiBHbSgpe3ZhciBhPUFhLm5hdmlnYXRvcjtpZihhKXt2YXIgYj1hLnVzZXJBZ2VudDtpZihiKXJldHVybiBifXJldHVyblwiXCJ9dmFyIEhtLEltPUFhLm5hdmlnYXRvcjtIbT1JbT9JbS51c2VyQWdlbnREYXRhfHxudWxsOm51bGw7ZnVuY3Rpb24gSm0oYSl7cmV0dXJuIEFtP0htP0htLmJyYW5kcy5zb21lKGZ1bmN0aW9uKGIpe3ZhciBjO3JldHVybihjPWIuYnJhbmQpJiZjLmluZGV4T2YoYSkhPS0xfSk6ITE6ITF9ZnVuY3Rpb24gS20oYSl7cmV0dXJuIEdtKCkuaW5kZXhPZihhKSE9LTF9O2Z1bmN0aW9uIExtKCl7cmV0dXJuIEFtPyEhSG0mJkhtLmJyYW5kcy5sZW5ndGg+MDohMX1mdW5jdGlvbiBNbSgpe3JldHVybiBMbSgpPyExOkttKFwiT3BlcmFcIil9ZnVuY3Rpb24gTm0oKXtyZXR1cm4gS20oXCJGaXJlZm94XCIpfHxLbShcIkZ4aU9TXCIpfWZ1bmN0aW9uIE9tKCl7cmV0dXJuIExtKCk/Sm0oXCJDaHJvbWl1bVwiKTooS20oXCJDaHJvbWVcIil8fEttKFwiQ3JpT1NcIikpJiYhKExtKCk/MDpLbShcIkVkZ2VcIikpfHxLbShcIlNpbGtcIil9O2Z1bmN0aW9uIFBtKCl7cmV0dXJuIEFtPyEhSG0mJiEhSG0ucGxhdGZvcm06ITF9ZnVuY3Rpb24gUW0oKXtyZXR1cm4gS20oXCJpUGhvbmVcIikmJiFLbShcImlQb2RcIikmJiFLbShcImlQYWRcIil9ZnVuY3Rpb24gUm0oKXtRbSgpfHxLbShcImlQYWRcIil8fEttKFwiaVBvZFwiKX07dmFyIFNtPWZ1bmN0aW9uKGEpe1NtW1wiIFwiXShhKTtyZXR1cm4gYX07U21bXCIgXCJdPWZ1bmN0aW9uKCl7fTtNbSgpO0xtKCl8fEttKFwiVHJpZGVudFwiKXx8S20oXCJNU0lFXCIpO0ttKFwiRWRnZVwiKTshS20oXCJHZWNrb1wiKXx8R20oKS50b0xvd2VyQ2FzZSgpLmluZGV4T2YoXCJ3ZWJraXRcIikhPS0xJiYhS20oXCJFZGdlXCIpfHxLbShcIlRyaWRlbnRcIil8fEttKFwiTVNJRVwiKXx8S20oXCJFZGdlXCIpO0dtKCkudG9Mb3dlckNhc2UoKS5pbmRleE9mKFwid2Via2l0XCIpIT0tMSYmIUttKFwiRWRnZVwiKSYmS20oXCJNb2JpbGVcIik7UG0oKXx8S20oXCJNYWNpbnRvc2hcIik7UG0oKXx8S20oXCJXaW5kb3dzXCIpOyhQbSgpP0htLnBsYXRmb3JtPT09XCJMaW51eFwiOkttKFwiTGludXhcIikpfHxQbSgpfHxLbShcIkNyT1NcIik7UG0oKXx8S20oXCJBbmRyb2lkXCIpO1FtKCk7S20oXCJpUGFkXCIpO0ttKFwiaVBvZFwiKTtSbSgpO0dtKCkudG9Mb3dlckNhc2UoKS5pbmRleE9mKFwia2Fpb3NcIik7dmFyIFRtPWZ1bmN0aW9uKGEsYixjLGQpe2Zvcih2YXIgZT1iLGY9Yy5sZW5ndGg7KGU9YS5pbmRleE9mKGMsZSkpPj0wJiZlPGQ7KXt2YXIgZz1hLmNoYXJDb2RlQXQoZS0xKTtpZihnPT0zOHx8Zz09NjMpe3ZhciBrPWEuY2hhckNvZGVBdChlK2YpO2lmKCFrfHxrPT02MXx8az09Mzh8fGs9PTM1KXJldHVybiBlfWUrPWYrMX1yZXR1cm4tMX0sVW09LyN8JC8sVm09ZnVuY3Rpb24oYSxiKXt2YXIgYz1hLnNlYXJjaChVbSksZD1UbShhLDAsYixjKTtpZihkPDApcmV0dXJuIG51bGw7dmFyIGU9YS5pbmRleE9mKFwiJlwiLGQpO2lmKGU8MHx8ZT5jKWU9YztkKz1iLmxlbmd0aCsxO3JldHVybiBkZWNvZGVVUklDb21wb25lbnQoYS5zbGljZShkLGUhPT0tMT9lOjApLnJlcGxhY2UoL1xcKy9nLFwiIFwiKSl9LFdtPS9bPyZdKCR8IykvLFhtPWZ1bmN0aW9uKGEsYixjKXtmb3IodmFyIGQsZT1hLnNlYXJjaChVbSksZj0wLGcsaz1bXTsoZz1UbShhLGYsYixlKSk+PTA7KWsucHVzaChhLnN1YnN0cmluZyhmLFxuZykpLGY9TWF0aC5taW4oYS5pbmRleE9mKFwiJlwiLGcpKzF8fGUsZSk7ay5wdXNoKGEuc2xpY2UoZikpO2Q9ay5qb2luKFwiXCIpLnJlcGxhY2UoV20sXCIkMVwiKTt2YXIgbSxuPWMhPW51bGw/XCI9XCIrZW5jb2RlVVJJQ29tcG9uZW50KFN0cmluZyhjKSk6XCJcIjt2YXIgcD1iK247aWYocCl7dmFyIHEscj1kLmluZGV4T2YoXCIjXCIpO3I8MCYmKHI9ZC5sZW5ndGgpO3ZhciB0PWQuaW5kZXhPZihcIj9cIiksdTt0PDB8fHQ+cj8odD1yLHU9XCJcIik6dT1kLnN1YnN0cmluZyh0KzEscik7cT1bZC5zbGljZSgwLHQpLHUsZC5zbGljZShyKV07dmFyIHY9cVsxXTtxWzFdPXA/dj92K1wiJlwiK3A6cDp2O209cVswXSsocVsxXT9cIj9cIitxWzFdOlwiXCIpK3FbMl19ZWxzZSBtPWQ7cmV0dXJuIG19O3ZhciBZbT1mdW5jdGlvbihhKXt0cnl7dmFyIGI7aWYoYj0hIWEmJmEubG9jYXRpb24uaHJlZiE9bnVsbClhOnt0cnl7U20oYS5mb28pO2I9ITA7YnJlYWsgYX1jYXRjaChjKXt9Yj0hMX1yZXR1cm4gYn1jYXRjaChjKXtyZXR1cm4hMX19LFptPWZ1bmN0aW9uKGEsYil7aWYoYSlmb3IodmFyIGMgaW4gYSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYSxjKSYmYihhW2NdLGMsYSl9LCRtPWZ1bmN0aW9uKGEpe2lmKEQudG9wPT1EKXJldHVybiAwO2lmKGE9PT12b2lkIDA/MDphKXt2YXIgYj1ELmxvY2F0aW9uLmFuY2VzdG9yT3JpZ2lucztpZihiKXJldHVybiBiW2IubGVuZ3RoLTFdPT1ELmxvY2F0aW9uLm9yaWdpbj8xOjJ9cmV0dXJuIFltKEQudG9wKT8xOjJ9LGFuPWZ1bmN0aW9uKGEpe2E9YT09PXZvaWQgMD9kb2N1bWVudDphO3JldHVybiBhLmNyZWF0ZUVsZW1lbnQoXCJpbWdcIil9O2Z1bmN0aW9uIGJuKGEsYixjLGQpe2Q9ZD09PXZvaWQgMD8hMTpkO2EuZ29vZ2xlX2ltYWdlX3JlcXVlc3RzfHwoYS5nb29nbGVfaW1hZ2VfcmVxdWVzdHM9W10pO3ZhciBlPWFuKGEuZG9jdW1lbnQpO2lmKGMpe3ZhciBmPWZ1bmN0aW9uKCl7aWYoYyl7dmFyIGc9YS5nb29nbGVfaW1hZ2VfcmVxdWVzdHMsaz1tYyhnLGUpO2s+PTAmJkFycmF5LnByb3RvdHlwZS5zcGxpY2UuY2FsbChnLGssMSl9em0oZSxcImxvYWRcIixmKTt6bShlLFwiZXJyb3JcIixmKX07eW0oZSxcImxvYWRcIixmKTt5bShlLFwiZXJyb3JcIixmKX1kJiYoZS5hdHRyaWJ1dGlvblNyYz1cIlwiKTtlLnNyYz1iO2EuZ29vZ2xlX2ltYWdlX3JlcXVlc3RzLnB1c2goZSl9XG52YXIgZG49ZnVuY3Rpb24oYSl7dmFyIGI7Yj1iPT09dm9pZCAwPyExOmI7dmFyIGM9XCJodHRwczovL3BhZ2VhZDIuZ29vZ2xlc3luZGljYXRpb24uY29tL3BhZ2VhZC9nZW5fMjA0P2lkPXRjZmVcIjtabShhLGZ1bmN0aW9uKGQsZSl7aWYoZHx8ZD09PTApYys9XCImXCIrZStcIj1cIitlbmNvZGVVUklDb21wb25lbnQoXCJcIitkKX0pO2NuKGMsYil9LGNuPWZ1bmN0aW9uKGEsYil7dmFyIGM9d2luZG93LGQ7Yj1iPT09dm9pZCAwPyExOmI7ZD1kPT09dm9pZCAwPyExOmQ7aWYoYy5mZXRjaCl7dmFyIGU9e2tlZXBhbGl2ZTohMCxjcmVkZW50aWFsczpcImluY2x1ZGVcIixyZWRpcmVjdDpcImZvbGxvd1wiLG1ldGhvZDpcImdldFwiLG1vZGU6XCJuby1jb3JzXCJ9O2QmJihlLm1vZGU9XCJjb3JzXCIsXCJzZXRBdHRyaWJ1dGlvblJlcG9ydGluZ1wiaW4gWE1MSHR0cFJlcXVlc3QucHJvdG90eXBlP2UuYXR0cmlidXRpb25SZXBvcnRpbmc9e2V2ZW50U291cmNlRWxpZ2libGU6XCJ0cnVlXCIsdHJpZ2dlckVsaWdpYmxlOlwiZmFsc2VcIn06XG5lLmhlYWRlcnM9e1wiQXR0cmlidXRpb24tUmVwb3J0aW5nLUVsaWdpYmxlXCI6XCJldmVudC1zb3VyY2VcIn0pO2MuZmV0Y2goYSxlKX1lbHNlIGJuKGMsYSxiPT09dm9pZCAwPyExOmIsZD09PXZvaWQgMD8hMTpkKX07dmFyIGVuPWZ1bmN0aW9uKCl7dGhpcy5SPXRoaXMuUjt0aGlzLkQ9dGhpcy5EfTtlbi5wcm90b3R5cGUuUj0hMTtlbi5wcm90b3R5cGUuZGlzcG9zZT1mdW5jdGlvbigpe3RoaXMuUnx8KHRoaXMuUj0hMCx0aGlzLlBhKCkpfTtlbi5wcm90b3R5cGVbU3ltYm9sLmRpc3Bvc2VdPWZ1bmN0aW9uKCl7dGhpcy5kaXNwb3NlKCl9O2VuLnByb3RvdHlwZS5hZGRPbkRpc3Bvc2VDYWxsYmFjaz1mdW5jdGlvbihhLGIpe3RoaXMuUj9iIT09dm9pZCAwP2EuY2FsbChiKTphKCk6KHRoaXMuRHx8KHRoaXMuRD1bXSksYiYmKGE9YS5iaW5kKGIpKSx0aGlzLkQucHVzaChhKSl9O2VuLnByb3RvdHlwZS5QYT1mdW5jdGlvbigpe2lmKHRoaXMuRClmb3IoO3RoaXMuRC5sZW5ndGg7KXRoaXMuRC5zaGlmdCgpKCl9O3ZhciBmbj1mdW5jdGlvbihhKXthLmFkZHRsQ29uc2VudCE9PXZvaWQgMCYmdHlwZW9mIGEuYWRkdGxDb25zZW50IT09XCJzdHJpbmdcIiYmKGEuYWRkdGxDb25zZW50PXZvaWQgMCk7YS5nZHByQXBwbGllcyE9PXZvaWQgMCYmdHlwZW9mIGEuZ2RwckFwcGxpZXMhPT1cImJvb2xlYW5cIiYmKGEuZ2RwckFwcGxpZXM9dm9pZCAwKTtyZXR1cm4gYS50Y1N0cmluZyE9PXZvaWQgMCYmdHlwZW9mIGEudGNTdHJpbmchPT1cInN0cmluZ1wifHxhLmxpc3RlbmVySWQhPT12b2lkIDAmJnR5cGVvZiBhLmxpc3RlbmVySWQhPT1cIm51bWJlclwiPzI6YS5jbXBTdGF0dXMmJmEuY21wU3RhdHVzIT09XCJlcnJvclwiPzA6M30sZ249ZnVuY3Rpb24oYSxiKXtiPWI9PT12b2lkIDA/e306Yjtlbi5jYWxsKHRoaXMpO3RoaXMuSD1hO3RoaXMuaj1udWxsO3RoaXMuWj17fTt0aGlzLkVmPTA7dmFyIGM7dGhpcy5qZT0oYz1iLlltKSE9bnVsbD9jOjUwMDt2YXIgZDt0aGlzLkJjPShkPWIuRW4pIT1udWxsP2Q6ITE7dGhpcy5NPVxubnVsbH07eWEoZ24sZW4pO2duLnByb3RvdHlwZS5QYT1mdW5jdGlvbigpe3RoaXMuWj17fTt0aGlzLk0mJih6bSh0aGlzLkgsXCJtZXNzYWdlXCIsdGhpcy5NKSxkZWxldGUgdGhpcy5NKTtkZWxldGUgdGhpcy5aO2RlbGV0ZSB0aGlzLkg7ZGVsZXRlIHRoaXMuajtlbi5wcm90b3R5cGUuUGEuY2FsbCh0aGlzKX07dmFyIGpuPWZ1bmN0aW9uKGEpe3JldHVybiB0eXBlb2YgYS5ILl9fdGNmYXBpPT09XCJmdW5jdGlvblwifHxobihhKSE9bnVsbH07XG5nbi5wcm90b3R5cGUuYWRkRXZlbnRMaXN0ZW5lcj1mdW5jdGlvbihhKXt2YXIgYj10aGlzLGM9e2ludGVybmFsQmxvY2tPbkVycm9yczp0aGlzLkJjfSxkPXhtKGZ1bmN0aW9uKCl7cmV0dXJuIGEoYyl9KSxlPTA7dGhpcy5qZSE9PS0xJiYoZT1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7Yy50Y1N0cmluZz1cInRjdW5hdmFpbGFibGVcIjtjLmludGVybmFsRXJyb3JTdGF0ZT0xO2QoKX0sdGhpcy5qZSkpO3ZhciBmPWZ1bmN0aW9uKGcsayl7Y2xlYXJUaW1lb3V0KGUpO2c/KGM9ZyxjLmludGVybmFsRXJyb3JTdGF0ZT1mbihjKSxjLmludGVybmFsQmxvY2tPbkVycm9ycz1iLkJjLGsmJmMuaW50ZXJuYWxFcnJvclN0YXRlPT09MHx8KGMudGNTdHJpbmc9XCJ0Y3VuYXZhaWxhYmxlXCIsa3x8KGMuaW50ZXJuYWxFcnJvclN0YXRlPTMpKSk6KGMudGNTdHJpbmc9XCJ0Y3VuYXZhaWxhYmxlXCIsYy5pbnRlcm5hbEVycm9yU3RhdGU9Myk7YShjKX07dHJ5e2tuKHRoaXMsXCJhZGRFdmVudExpc3RlbmVyXCIsZil9Y2F0Y2goZyl7Yy50Y1N0cmluZz1cblwidGN1bmF2YWlsYWJsZVwiLGMuaW50ZXJuYWxFcnJvclN0YXRlPTMsZSYmKGNsZWFyVGltZW91dChlKSxlPTApLGQoKX19O2duLnByb3RvdHlwZS5yZW1vdmVFdmVudExpc3RlbmVyPWZ1bmN0aW9uKGEpe2EmJmEubGlzdGVuZXJJZCYma24odGhpcyxcInJlbW92ZUV2ZW50TGlzdGVuZXJcIixudWxsLGEubGlzdGVuZXJJZCl9O1xudmFyIG1uPWZ1bmN0aW9uKGEsYixjKXt2YXIgZDtkPWQ9PT12b2lkIDA/XCI3NTVcIjpkO3ZhciBlO2E6e2lmKGEucHVibGlzaGVyJiZhLnB1Ymxpc2hlci5yZXN0cmljdGlvbnMpe3ZhciBmPWEucHVibGlzaGVyLnJlc3RyaWN0aW9uc1tiXTtpZihmIT09dm9pZCAwKXtlPWZbZD09PXZvaWQgMD9cIjc1NVwiOmRdO2JyZWFrIGF9fWU9dm9pZCAwfXZhciBnPWU7aWYoZz09PTApcmV0dXJuITE7dmFyIGs9YztjPT09Mj8oaz0wLGc9PT0yJiYoaz0xKSk6Yz09PTMmJihrPTEsZz09PTEmJihrPTApKTt2YXIgbTtpZihrPT09MClpZihhLnB1cnBvc2UmJmEudmVuZG9yKXt2YXIgbj1sbihhLnZlbmRvci5jb25zZW50cyxkPT09dm9pZCAwP1wiNzU1XCI6ZCk7bT1uJiZiPT09XCIxXCImJmEucHVycG9zZU9uZVRyZWF0bWVudCYmYS5wdWJsaXNoZXJDQz09PVwiQ0hcIj8hMDpuJiZsbihhLnB1cnBvc2UuY29uc2VudHMsYil9ZWxzZSBtPSEwO2Vsc2UgbT1rPT09MT9hLnB1cnBvc2UmJmEudmVuZG9yP2xuKGEucHVycG9zZS5sZWdpdGltYXRlSW50ZXJlc3RzLFxuYikmJmxuKGEudmVuZG9yLmxlZ2l0aW1hdGVJbnRlcmVzdHMsZD09PXZvaWQgMD9cIjc1NVwiOmQpOiEwOiEwO3JldHVybiBtfSxsbj1mdW5jdGlvbihhLGIpe3JldHVybiEoIWF8fCFhW2JdKX0sa249ZnVuY3Rpb24oYSxiLGMsZCl7Y3x8KGM9ZnVuY3Rpb24oKXt9KTtpZih0eXBlb2YgYS5ILl9fdGNmYXBpPT09XCJmdW5jdGlvblwiKXt2YXIgZT1hLkguX190Y2ZhcGk7ZShiLDIsYyxkKX1lbHNlIGlmKGhuKGEpKXtubihhKTt2YXIgZj0rK2EuRWY7YS5aW2ZdPWM7aWYoYS5qKXt2YXIgZz17fTthLmoucG9zdE1lc3NhZ2UoKGcuX190Y2ZhcGlDYWxsPXtjb21tYW5kOmIsdmVyc2lvbjoyLGNhbGxJZDpmLHBhcmFtZXRlcjpkfSxnKSxcIipcIil9fWVsc2UgYyh7fSwhMSl9LGhuPWZ1bmN0aW9uKGEpe2lmKGEuailyZXR1cm4gYS5qO3ZhciBiO2E6e2Zvcih2YXIgYz1hLkgsZD0wO2Q8NTA7KytkKXt2YXIgZTt0cnl7ZT0hKCFjLmZyYW1lc3x8IWMuZnJhbWVzLl9fdGNmYXBpTG9jYXRvcil9Y2F0Y2goayl7ZT1cbiExfWlmKGUpe2I9YzticmVhayBhfXZhciBmO2I6e3RyeXt2YXIgZz1jLnBhcmVudDtpZihnJiZnIT1jKXtmPWc7YnJlYWsgYn19Y2F0Y2goayl7fWY9bnVsbH1pZighKGM9ZikpYnJlYWt9Yj1udWxsfWEuaj1iO3JldHVybiBhLmp9LG5uPWZ1bmN0aW9uKGEpe2EuTXx8KGEuTT1mdW5jdGlvbihiKXt0cnl7dmFyIGM7Yz0odHlwZW9mIGIuZGF0YT09PVwic3RyaW5nXCI/SlNPTi5wYXJzZShiLmRhdGEpOmIuZGF0YSkuX190Y2ZhcGlSZXR1cm47YS5aW2MuY2FsbElkXShjLnJldHVyblZhbHVlLGMuc3VjY2Vzcyl9Y2F0Y2goZCl7fX0seW0oYS5ILFwibWVzc2FnZVwiLGEuTSkpfSxvbj1mdW5jdGlvbihhKXtpZihhLmdkcHJBcHBsaWVzPT09ITEpcmV0dXJuITA7YS5pbnRlcm5hbEVycm9yU3RhdGU9PT12b2lkIDAmJihhLmludGVybmFsRXJyb3JTdGF0ZT1mbihhKSk7cmV0dXJuIGEuY21wU3RhdHVzPT09XCJlcnJvclwifHxhLmludGVybmFsRXJyb3JTdGF0ZSE9PTA/YS5pbnRlcm5hbEJsb2NrT25FcnJvcnM/XG4oZG4oe2U6U3RyaW5nKGEuaW50ZXJuYWxFcnJvclN0YXRlKX0pLCExKTohMDphLmNtcFN0YXR1cyE9PVwibG9hZGVkXCJ8fGEuZXZlbnRTdGF0dXMhPT1cInRjbG9hZGVkXCImJmEuZXZlbnRTdGF0dXMhPT1cInVzZXJhY3Rpb25jb21wbGV0ZVwiPyExOiEwfTt2YXIgcG49ezE6MCwzOjAsNDowLDc6Myw5OjMsMTA6M307ZnVuY3Rpb24gcW4oKXt2YXIgYT1paS50Y2Z8fHt9O3JldHVybiBpaS50Y2Y9YX12YXIgcm49ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGduKEQse1ltOi0xfSl9O1xuZnVuY3Rpb24gc24oKXt2YXIgYT1xbigpLGI9cm4oKTtqbihiKSYmIXRuKCkmJiF1bigpJiZNKDEyNCk7aWYoIWEuYWN0aXZlJiZqbihiKSl7dG4oKSYmKGEuYWN0aXZlPSEwLGEuZmM9e30sYS5jbXBJZD0wLGEudGNmUG9saWN5VmVyc2lvbj0wLG9rKCkuYWN0aXZlPSEwLGEudGNTdHJpbmc9XCJ0Y3VuYXZhaWxhYmxlXCIpO2RsKCk7dHJ5e2IuYWRkRXZlbnRMaXN0ZW5lcihmdW5jdGlvbihjKXtpZihjLmludGVybmFsRXJyb3JTdGF0ZSE9PTApdm4oYSksZWwoW1QuZy5QLFQuZy53YSxULmcuT10pLG9rKCkuYWN0aXZlPSEwO2Vsc2UgaWYoYS5nZHByQXBwbGllcz1jLmdkcHJBcHBsaWVzLGEuY21wSWQ9Yy5jbXBJZCxhLmVuYWJsZUFkdmVydGlzZXJDb25zZW50TW9kZT1jLmVuYWJsZUFkdmVydGlzZXJDb25zZW50TW9kZSx1bigpJiYoYS5hY3RpdmU9ITApLCF3bihjKXx8dG4oKXx8dW4oKSl7YS50Y2ZQb2xpY3lWZXJzaW9uPWMudGNmUG9saWN5VmVyc2lvbjt2YXIgZDtpZihjLmdkcHJBcHBsaWVzPT09XG4hMSl7dmFyIGU9e30sZjtmb3IoZiBpbiBwbilwbi5oYXNPd25Qcm9wZXJ0eShmKSYmKGVbZl09ITApO2Q9ZTtiLnJlbW92ZUV2ZW50TGlzdGVuZXIoYyl9ZWxzZSBpZih3bihjKSl7dmFyIGc9e30saztmb3IoayBpbiBwbilpZihwbi5oYXNPd25Qcm9wZXJ0eShrKSlpZihrPT09XCIxXCIpe3ZhciBtLG49YyxwPXtHbDohMH07cD1wPT09dm9pZCAwP3t9OnA7bT1vbihuKT9uLmdkcHJBcHBsaWVzPT09ITE/ITA6bi50Y1N0cmluZz09PVwidGN1bmF2YWlsYWJsZVwiPyFwLktqOihwLktqfHxuLmdkcHJBcHBsaWVzIT09dm9pZCAwfHxwLkdsKSYmKHAuS2p8fHR5cGVvZiBuLnRjU3RyaW5nPT09XCJzdHJpbmdcIiYmbi50Y1N0cmluZy5sZW5ndGgpP21uKG4sXCIxXCIsMCk6ITA6ITE7Z1tcIjFcIl09bX1lbHNlIGdba109bW4oYyxrLHBuW2tdKTtkPWd9aWYoZCl7YS50Y1N0cmluZz1jLnRjU3RyaW5nfHxcInRjZW1wdHlcIjthLmZjPWQ7dmFyIHE9e30scj0ocVtULmcuUF09YS5mY1tcIjFcIl0/XCJncmFudGVkXCI6XG5cImRlbmllZFwiLHEpO2EuZ2RwckFwcGxpZXMhPT0hMD8oZWwoW1QuZy5QLFQuZy53YSxULmcuT10pLG9rKCkuYWN0aXZlPSEwKToocltULmcud2FdPWEuZmNbXCIzXCJdJiZhLmZjW1wiNFwiXT9cImdyYW50ZWRcIjpcImRlbmllZFwiLHR5cGVvZiBhLnRjZlBvbGljeVZlcnNpb249PT1cIm51bWJlclwiJiZhLnRjZlBvbGljeVZlcnNpb24+PTQ/cltULmcuT109YS5mY1tcIjFcIl0mJmEuZmNbXCI3XCJdP1wiZ3JhbnRlZFwiOlwiZGVuaWVkXCI6ZWwoW1QuZy5PXSksWmsocix7ZXZlbnRJZDowfSx7Z2RwckFwcGxpZXM6YT9hLmdkcHJBcHBsaWVzOnZvaWQgMCx0Y1N0cmluZzp4bigpfHxcIlwifSkpfX1lbHNlIGVsKFtULmcuUCxULmcud2EsVC5nLk9dKX0pfWNhdGNoKGMpe3ZuKGEpLGVsKFtULmcuUCxULmcud2EsVC5nLk9dKSxvaygpLmFjdGl2ZT0hMH19fWZ1bmN0aW9uIHZuKGEpe2EudHlwZT1cImVcIjthLnRjU3RyaW5nPVwidGN1bmF2YWlsYWJsZVwifVxuZnVuY3Rpb24gd24oYSl7cmV0dXJuIGEuZXZlbnRTdGF0dXM9PT1cInRjbG9hZGVkXCJ8fGEuZXZlbnRTdGF0dXM9PT1cInVzZXJhY3Rpb25jb21wbGV0ZVwifHxhLmV2ZW50U3RhdHVzPT09XCJjbXB1aXNob3duXCJ9ZnVuY3Rpb24gdG4oKXtyZXR1cm4gRC5ndGFnX2VuYWJsZV90Y2Zfc3VwcG9ydD09PSEwfWZ1bmN0aW9uIHVuKCl7cmV0dXJuIHFuKCkuZW5hYmxlQWR2ZXJ0aXNlckNvbnNlbnRNb2RlPT09ITB9ZnVuY3Rpb24geG4oKXt2YXIgYT1xbigpO2lmKGEuYWN0aXZlKXJldHVybiBhLnRjU3RyaW5nfWZ1bmN0aW9uIHluKCl7dmFyIGE9cW4oKTtpZihhLmFjdGl2ZSYmYS5nZHByQXBwbGllcyE9PXZvaWQgMClyZXR1cm4gYS5nZHByQXBwbGllcz9cIjFcIjpcIjBcIn1mdW5jdGlvbiB6bihhKXtpZighcG4uaGFzT3duUHJvcGVydHkoU3RyaW5nKGEpKSlyZXR1cm4hMDt2YXIgYj1xbigpO3JldHVybiBiLmFjdGl2ZSYmYi5mYz8hIWIuZmNbU3RyaW5nKGEpXTohMH12YXIgQW49W1QuZy5QLFQuZy5VLFQuZy5PLFQuZy53YV0sQm49e30sQ249KEJuW1QuZy5QXT0xLEJuW1QuZy5VXT0yLEJuKTtmdW5jdGlvbiBEbihhKXtpZihhPT09dm9pZCAwKXJldHVybiAwO3N3aXRjaChVKGEsVC5nLmphKSl7Y2FzZSB2b2lkIDA6cmV0dXJuIDE7Y2FzZSAhMTpyZXR1cm4gMztkZWZhdWx0OnJldHVybiAyfX1mdW5jdGlvbiBFbihhKXtpZihOaygpPT09XCJVUy1DT1wiJiZvYy5nbG9iYWxQcml2YWN5Q29udHJvbD09PSEwKXJldHVybiExO3ZhciBiPURuKGEpO2lmKGI9PT0zKXJldHVybiExO3N3aXRjaCh4ayhULmcud2EpKXtjYXNlIDE6Y2FzZSAzOnJldHVybiEwO2Nhc2UgMjpyZXR1cm4hMTtjYXNlIDQ6cmV0dXJuIGI9PT0yO2Nhc2UgMDpyZXR1cm4hMDtkZWZhdWx0OnJldHVybiExfX1mdW5jdGlvbiBGbigpe3JldHVybiBBaygpfHwhd2soVC5nLlApfHwhd2soVC5nLlUpfVxuZnVuY3Rpb24gR24oKXt2YXIgYT17fSxiO2ZvcihiIGluIENuKUNuLmhhc093blByb3BlcnR5KGIpJiYoYVtDbltiXV09eGsoYikpO3JldHVyblwiRzFcIitGZShhWzFdfHwwKStGZShhWzJdfHwwKX12YXIgSG49e30sSW49KEhuW1QuZy5QXT0wLEhuW1QuZy5VXT0xLEhuW1QuZy5PXT0yLEhuW1QuZy53YV09MyxIbik7ZnVuY3Rpb24gSm4oYSl7c3dpdGNoKGEpe2Nhc2Ugdm9pZCAwOnJldHVybiAxO2Nhc2UgITA6cmV0dXJuIDM7Y2FzZSAhMTpyZXR1cm4gMjtkZWZhdWx0OnJldHVybiAwfX1cbmZ1bmN0aW9uIEtuKGEpe2Zvcih2YXIgYj1cIjFcIixjPTA7YzxBbi5sZW5ndGg7YysrKXt2YXIgZD1iLGUsZj1BbltjXSxnPXZrLmRlbGVnYXRlZENvbnNlbnRUeXBlc1tmXTtlPWc9PT12b2lkIDA/MDpJbi5oYXNPd25Qcm9wZXJ0eShnKT8xMnxJbltnXTo4O3ZhciBrPW9rKCk7ay5hY2Nlc3NlZEFueT0hMDt2YXIgbT1rLmVudHJpZXNbZl18fHt9O2U9ZTw8MnxKbihtLmltcGxpY2l0KTtiPWQrKFwiXCIrXCIwMTIzNDU2Nzg5YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXpBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWi1fXCJbZV0rXCIwMTIzNDU2Nzg5YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXpBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWi1fXCJbSm4obS5kZWNsYXJlKTw8NHxKbihtLmRlZmF1bHQpPDwyfEpuKG0udXBkYXRlKV0pfXZhciBuPWIscD0oTmsoKT09PVwiVVMtQ09cIiYmb2MuZ2xvYmFsUHJpdmFjeUNvbnRyb2w9PT0hMD8xOjApPDwzLHE9KEFrKCk/MTowKTw8MixyPURuKGEpO2I9XG5uK1wiMDEyMzQ1Njc4OWFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6QUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVotX1wiW3B8cXxyXTtRKDk5KSYmKGIrPVwiXCIrXCIwMTIzNDU2Nzg5YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXpBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWi1fXCJbdmsuY29udGFpbmVyU2NvcGVkRGVmYXVsdHMuYWRfc3RvcmFnZTw8NHx2ay5jb250YWluZXJTY29wZWREZWZhdWx0cy5hbmFseXRpY3Nfc3RvcmFnZTw8Mnx2ay5jb250YWluZXJTY29wZWREZWZhdWx0cy5hZF91c2VyX2RhdGFdK1wiMDEyMzQ1Njc4OWFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6QUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVotX1wiWyhtYig4KSYmdmsudXNlZENvbnRhaW5lclNjb3BlZERlZmF1bHRzPzE6MCk8PDJ8dmsuY29udGFpbmVyU2NvcGVkRGVmYXVsdHMuYWRfcGVyc29uYWxpemF0aW9uXSk7cmV0dXJuIGJ9XG5mdW5jdGlvbiBMbigpe2lmKCF3ayhULmcuTykpcmV0dXJuXCItXCI7Zm9yKHZhciBhPU9iamVjdC5rZXlzKGdpKSxiPXlrKGEpLGM9XCJcIixkPW5hKGEpLGU9ZC5uZXh0KCk7IWUuZG9uZTtlPWQubmV4dCgpKXt2YXIgZj1lLnZhbHVlO2JbZl0mJihjKz1naVtmXSl9KHZrLnVzZWRDb3JlUGxhdGZvcm1TZXJ2aWNlcz92ay5zZWxlY3RlZEFsbENvcmVQbGF0Zm9ybVNlcnZpY2VzOjEpJiYoYys9XCJvXCIpO3JldHVybiBjfHxcIi1cIn1mdW5jdGlvbiBNbigpe3JldHVybiBQaygpfHwodG4oKXx8dW4oKSkmJnluKCk9PT1cIjFcIj9cIjFcIjpcIjBcIn1mdW5jdGlvbiBObigpe3JldHVybihQaygpPyEwOiEoIXRuKCkmJiF1bigpKSYmeW4oKT09PVwiMVwiKXx8IXdrKFQuZy5PKX1cbmZ1bmN0aW9uIFVuKCl7dmFyIGE9XCIwXCIsYj1cIjBcIixjO3ZhciBkPXFuKCk7Yz1kLmFjdGl2ZT9kLmNtcElkOnZvaWQgMDt0eXBlb2YgYz09PVwibnVtYmVyXCImJmM+PTAmJmM8PTQwOTUmJihhPVwiMDEyMzQ1Njc4OWFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6QUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVotX1wiW2M+PjYmNjNdLGI9XCIwMTIzNDU2Nzg5YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXpBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWi1fXCJbYyY2M10pO3ZhciBlPVwiMFwiLGY7dmFyIGc9cW4oKTtmPWcuYWN0aXZlP2cudGNmUG9saWN5VmVyc2lvbjp2b2lkIDA7dHlwZW9mIGY9PT1cIm51bWJlclwiJiZmPj0wJiZmPD02MyYmKGU9XCIwMTIzNDU2Nzg5YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXpBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWi1fXCJbZl0pO3ZhciBrPTA7UGsoKSYmKGt8PTEpO3luKCk9PT1cIjFcIiYmKGt8PTIpO3RuKCkmJihrfD00KTt2YXIgbTt2YXIgbj1xbigpO209bi5lbmFibGVBZHZlcnRpc2VyQ29uc2VudE1vZGUhPT1cbnZvaWQgMD9uLmVuYWJsZUFkdmVydGlzZXJDb25zZW50TW9kZT9cIjFcIjpcIjBcIjp2b2lkIDA7bT09PVwiMVwiJiYoa3w9OCk7b2soKS53YWl0UGVyaW9kVGltZWRPdXQmJihrfD0xNik7cmV0dXJuXCIxXCIrYStiK2UrXCIwMTIzNDU2Nzg5YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXpBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWi1fXCJba119ZnVuY3Rpb24gVm4oKXtyZXR1cm4gTmsoKT09PVwiVVMtQ09cIn07ZnVuY3Rpb24gV24oKXt2YXIgYT0hMTtyZXR1cm4gYX07dmFyIFhuPXtVQToxLEFXOjIsREM6MyxHOjQsR0Y6NSxHVDoxMixHVE06MTQsSEE6NixNQzo3fTtcbmZ1bmN0aW9uIFluKGEpe2E9YT09PXZvaWQgMD97fTphO3ZhciBiPU9mLmN0aWQuc3BsaXQoXCItXCIpWzBdLnRvVXBwZXJDYXNlKCksYz17fTtjLmN0aWQ9T2YuY3RpZDtjLkltPWhpLnBlO2MuTW09aGkuUmc7Yy5pbT16ai5tZT8yOjE7Yy5TbT1hLmJrO2MueGU9T2YuY2Fub25pY2FsQ29udGFpbmVySWQ7Yy54ZSE9PWEuc2EmJihjLnNhPWEuc2EpO3ZhciBkPUpqKCk7Yy55bT1kP2QuY2Fub25pY2FsQ29udGFpbmVySWQ6dm9pZCAwO29pPyhjLlJmPVhuW2JdLGMuUmZ8fChjLlJmPTApKTpjLlJmPXNpPzEzOjEwO0JpLkg/KGMuUGY9MCxjLmpsPTIpOnFpP2MuUGY9MTpXbigpP2MuUGY9MjpjLlBmPTM7dmFyIGU9e307ZVs2XT1BajtCaS5EPT09Mj9lWzddPSEwOkJpLkQ9PT0xJiYoZVsyXT0hMCk7Yy5ubD1lO3ZhciBmPWEuSGYsZzt2YXIgaz1jLlJmLG09Yy5QZjtrPT09dm9pZCAwP2c9XCJcIjoobXx8KG09MCksZz1cIlwiK0hlKDEsMSkrRWUoazw8MnxtKSk7dmFyIG49Yy5qbCxwPVwiNFwiK2crXG4obj9cIlwiK0hlKDIsMSkrRWUobik6XCJcIikscSxyPWMuTW07cT1yJiZHZS50ZXN0KHIpP1wiXCIrSGUoMywyKStyOlwiXCI7dmFyIHQsdT1jLkltO3Q9dT9cIlwiK0hlKDQsMSkrRWUodSk6XCJcIjt2YXIgdjt2YXIgdz1jLmN0aWQ7aWYodyYmZil7dmFyIHg9dy5zcGxpdChcIi1cIikseT14WzBdLnRvVXBwZXJDYXNlKCk7aWYoeSE9PVwiR1RNXCImJnkhPT1cIk9QVFwiKXY9XCJcIjtlbHNle3ZhciBBPXhbMV07dj1cIlwiK0hlKDUsMykrRWUoMStBLmxlbmd0aCkrKGMuaW18fDApK0F9fWVsc2Ugdj1cIlwiO3ZhciBCPWMuU20sQz1jLnhlLEg9Yy5zYSxJPWMuT24sRj1wK3ErdCt2KyhCP1wiXCIrSGUoNiwxKStFZShCKTpcIlwiKSsoQz9cIlwiK0hlKDcsMykrRWUoQy5sZW5ndGgpK0M6XCJcIikrKEg/XCJcIitIZSg4LDMpK0VlKEgubGVuZ3RoKStIOlwiXCIpKyhJP1wiXCIrSGUoOSwzKStFZShJLmxlbmd0aCkrSTpcIlwiKSxPO3ZhciBOPWMubmw7Tj1OPT09dm9pZCAwP3t9Ok47Zm9yKHZhciBTPVtdLFY9bmEoT2JqZWN0LmtleXMoTikpLGFhPVYubmV4dCgpOyFhYS5kb25lO2FhPVxuVi5uZXh0KCkpe3ZhciBYPWFhLnZhbHVlO1NbTnVtYmVyKFgpXT1OW1hdfWlmKFMubGVuZ3RoKXt2YXIgUj1IZSgxMCwzKSxtYTtpZihTLmxlbmd0aD09PTApbWE9RWUoMCk7ZWxzZXtmb3IodmFyIGxhPVtdLGVhPTAsd2E9ITEsT2E9MDtPYTxTLmxlbmd0aDtPYSsrKXt3YT0hMDt2YXIgRWE9T2ElNjtTW09hXSYmKGVhfD0xPDxFYSk7RWE9PT01JiYobGEucHVzaChFZShlYSkpLGVhPTAsd2E9ITEpfXdhJiZsYS5wdXNoKEVlKGVhKSk7bWE9bGEuam9pbihcIlwiKX12YXIgVGE9bWE7Tz1cIlwiK1IrRWUoVGEubGVuZ3RoKStUYX1lbHNlIE89XCJcIjt2YXIgJGE9Yy55bTtyZXR1cm4gRitPKygkYT9cIlwiK0hlKDExLDMpK0VlKCRhLmxlbmd0aCkrJGE6XCJcIil9O3ZhciBabj17cmo6XCJzZXJ2aWNlX3dvcmtlcl9lbmRwb2ludFwiLFRnOlwic2hhcmVkX3VzZXJfaWRcIixVZzpcInNoYXJlZF91c2VyX2lkX3JlcXVlc3RlZFwiLHNlOlwic2hhcmVkX3VzZXJfaWRfc291cmNlXCJ9LCRuO2Z1bmN0aW9uIGFvKGEpe2lmKCEkbil7JG49e307Zm9yKHZhciBiPW5hKE9iamVjdC5rZXlzKFpuKSksYz1iLm5leHQoKTshYy5kb25lO2M9Yi5uZXh0KCkpJG5bWm5bYy52YWx1ZV1dPSEwfXJldHVybiEhJG5bYV19XG5mdW5jdGlvbiBibyhhLGIpe2I9Yj09PXZvaWQgMD8hMTpiO2lmKGFvKGEpKXt2YXIgYyxkLGU9KGQ9KGM9c2MoXCJnb29nbGVfdGFnX2RhdGFcIix7fSkpLnhjZCkhPW51bGw/ZDpjLnhjZD17fTtpZihlW2FdKXJldHVybiBlW2FdO2lmKGIpe3ZhciBmPXZvaWQgMCxnPTEsaz17fSxtPXtzZXQ6ZnVuY3Rpb24obil7Zj1uO20ubm90aWZ5KCl9LGdldDpmdW5jdGlvbigpe3JldHVybiBmfSxzdWJzY3JpYmU6ZnVuY3Rpb24obil7a1tTdHJpbmcoZyldPW47cmV0dXJuIGcrK30sdW5zdWJzY3JpYmU6ZnVuY3Rpb24obil7dmFyIHA9U3RyaW5nKG4pO3JldHVybiBrLmhhc093blByb3BlcnR5KHApPyhkZWxldGUga1twXSwhMCk6ITF9LG5vdGlmeTpmdW5jdGlvbigpe2Zvcih2YXIgbj1uYShPYmplY3Qua2V5cyhrKSkscD1uLm5leHQoKTshcC5kb25lO3A9bi5uZXh0KCkpe3ZhciBxPXAudmFsdWU7dHJ5e2tbcV0oYSxmKX1jYXRjaChyKXt9fX19O3JldHVybiBlW2FdPW19fX1cbmZ1bmN0aW9uIGNvKGEsYil7dmFyIGM9Ym8oYSwhMCk7YyYmYy5zZXQoYil9ZnVuY3Rpb24gZW8oYSl7dmFyIGI7cmV0dXJuKGI9Ym8oYSkpPT1udWxsP3ZvaWQgMDpiLmdldCgpfWZ1bmN0aW9uIGZvKGEsYil7aWYodHlwZW9mIGI9PT1cImZ1bmN0aW9uXCIpe3ZhciBjO3JldHVybihjPWJvKGEsITApKT09bnVsbD92b2lkIDA6Yy5zdWJzY3JpYmUoYil9fWZ1bmN0aW9uIGdvKGEsYil7dmFyIGM9Ym8oYSk7cmV0dXJuIGM/Yy51bnN1YnNjcmliZShiKTohMX07ZnVuY3Rpb24gaG8oYSl7dmFyIGI9MSxjLGQsZTtpZihhKWZvcihiPTAsZD1hLmxlbmd0aC0xO2Q+PTA7ZC0tKWU9YS5jaGFyQ29kZUF0KGQpLGI9KGI8PDYmMjY4NDM1NDU1KStlKyhlPDwxNCksYz1iJjI2NjMzODMwNCxiPWMhPT0wP2JeYz4+MjE6YjtyZXR1cm4gYn07ZnVuY3Rpb24gaW8oYSl7cmV0dXJuIGEub3JpZ2luIT09XCJudWxsXCJ9O2Z1bmN0aW9uIGpvKGEsYixjLGQpe3ZhciBlO2lmKGtvKGQpKXtmb3IodmFyIGY9W10sZz1TdHJpbmcoYnx8bG8oKSkuc3BsaXQoXCI7XCIpLGs9MDtrPGcubGVuZ3RoO2srKyl7dmFyIG09Z1trXS5zcGxpdChcIj1cIiksbj1tWzBdLnJlcGxhY2UoL15cXHMqfFxccyokL2csXCJcIik7aWYobiYmbj09PWEpe3ZhciBwPW0uc2xpY2UoMSkuam9pbihcIj1cIikucmVwbGFjZSgvXlxccyp8XFxzKiQvZyxcIlwiKTtwJiZjJiYocD1kZWNvZGVVUklDb21wb25lbnQocCkpO2YucHVzaChwKX19ZT1mfWVsc2UgZT1bXTtyZXR1cm4gZX1cbmZ1bmN0aW9uIG1vKGEsYixjLGQsZSl7aWYoa28oZSkpe3ZhciBmPW5vKGEsZCxlKTtpZihmLmxlbmd0aD09PTEpcmV0dXJuIGZbMF0uaWQ7aWYoZi5sZW5ndGghPT0wKXtmPW9vKGYsZnVuY3Rpb24oZyl7cmV0dXJuIGcud2x9LGIpO2lmKGYubGVuZ3RoPT09MSlyZXR1cm4gZlswXS5pZDtmPW9vKGYsZnVuY3Rpb24oZyl7cmV0dXJuIGcuQW19LGMpO3JldHVybiBmWzBdP2ZbMF0uaWQ6dm9pZCAwfX19ZnVuY3Rpb24gcG8oYSxiLGMsZCl7dmFyIGU9bG8oKSxmPXdpbmRvdztpbyhmKSYmKGYuZG9jdW1lbnQuY29va2llPWEpO3ZhciBnPWxvKCk7cmV0dXJuIGUhPT1nfHxjIT09dm9pZCAwJiZqbyhiLGcsITEsZCkuaW5kZXhPZihjKT49MH1cbmZ1bmN0aW9uIHFvKGEsYixjLGQpe2Z1bmN0aW9uIGUodyx4LHkpe2lmKHk9PW51bGwpcmV0dXJuIGRlbGV0ZSBrW3hdLHc7a1t4XT15O3JldHVybiB3K1wiOyBcIit4K1wiPVwiK3l9ZnVuY3Rpb24gZih3LHgpe2lmKHg9PW51bGwpcmV0dXJuIHc7a1t4XT0hMDtyZXR1cm4gdytcIjsgXCIreH1pZigha28oYy5BYikpcmV0dXJuIDI7dmFyIGc7Yj09bnVsbD9nPWErXCI9ZGVsZXRlZDsgZXhwaXJlcz1cIisobmV3IERhdGUoMCkpLnRvVVRDU3RyaW5nKCk6KGMuZW5jb2RlJiYoYj1lbmNvZGVVUklDb21wb25lbnQoYikpLGI9cm8oYiksZz1hK1wiPVwiK2IpO3ZhciBrPXt9O2c9ZShnLFwicGF0aFwiLGMucGF0aCk7dmFyIG07Yy5leHBpcmVzIGluc3RhbmNlb2YgRGF0ZT9tPWMuZXhwaXJlcy50b1VUQ1N0cmluZygpOmMuZXhwaXJlcyE9bnVsbCYmKG09XCJcIitjLmV4cGlyZXMpO2c9ZShnLFwiZXhwaXJlc1wiLG0pO2c9ZShnLFwibWF4LWFnZVwiLGMubW0pO2c9ZShnLFwic2FtZXNpdGVcIixjLk5tKTtjLnNlY3VyZSYmXG4oZz1mKGcsXCJzZWN1cmVcIikpO3ZhciBuPWMuZG9tYWluO2lmKG4mJm4udG9Mb3dlckNhc2UoKT09PVwiYXV0b1wiKXtmb3IodmFyIHA9c28oKSxxPXZvaWQgMCxyPSExLHQ9MDt0PHAubGVuZ3RoOysrdCl7dmFyIHU9cFt0XSE9PVwibm9uZVwiP3BbdF06dm9pZCAwLHY9ZShnLFwiZG9tYWluXCIsdSk7dj1mKHYsYy5mbGFncyk7dHJ5e2QmJmQoYSxrKX1jYXRjaCh3KXtxPXc7Y29udGludWV9cj0hMDtpZighdG8odSxjLnBhdGgpJiZwbyh2LGEsYixjLkFiKSlyZXR1cm4gMH1pZihxJiYhcil0aHJvdyBxO3JldHVybiAxfW4mJm4udG9Mb3dlckNhc2UoKSE9PVwibm9uZVwiJiYoZz1lKGcsXCJkb21haW5cIixuKSk7Zz1mKGcsYy5mbGFncyk7ZCYmZChhLGspO3JldHVybiB0byhuLGMucGF0aCk/MTpwbyhnLGEsYixjLkFiKT8wOjF9ZnVuY3Rpb24gdW8oYSxiLGMpe2MucGF0aD09bnVsbCYmKGMucGF0aD1cIi9cIik7Yy5kb21haW58fChjLmRvbWFpbj1cImF1dG9cIik7cmV0dXJuIHFvKGEsYixjKX1cbmZ1bmN0aW9uIG9vKGEsYixjKXtmb3IodmFyIGQ9W10sZT1bXSxmLGc9MDtnPGEubGVuZ3RoO2crKyl7dmFyIGs9YVtnXSxtPWIoayk7bT09PWM/ZC5wdXNoKGspOmY9PT12b2lkIDB8fG08Zj8oZT1ba10sZj1tKTptPT09ZiYmZS5wdXNoKGspfXJldHVybiBkLmxlbmd0aD4wP2Q6ZX1mdW5jdGlvbiBubyhhLGIsYyl7Zm9yKHZhciBkPVtdLGU9am8oYSx2b2lkIDAsdm9pZCAwLGMpLGY9MDtmPGUubGVuZ3RoO2YrKyl7dmFyIGc9ZVtmXS5zcGxpdChcIi5cIiksaz1nLnNoaWZ0KCk7aWYoIWJ8fCFrfHxiLmluZGV4T2YoaykhPT0tMSl7dmFyIG09Zy5zaGlmdCgpO2lmKG0pe3ZhciBuPW0uc3BsaXQoXCItXCIpO2QucHVzaCh7aWQ6Zy5qb2luKFwiLlwiKSx3bDpOdW1iZXIoblswXSl8fDEsQW06TnVtYmVyKG5bMV0pfHwxfSl9fX1yZXR1cm4gZH1mdW5jdGlvbiBybyhhKXthJiZhLmxlbmd0aD4xMjAwJiYoYT1hLnN1YnN0cmluZygwLDEyMDApKTtyZXR1cm4gYX1cbnZhciB2bz0vXih3d3dcXC4pP2dvb2dsZShcXC5jb20/KT8oXFwuW2Etel17Mn0pPyQvLHdvPS8oXnxcXC4pZG91YmxlY2xpY2tcXC5uZXQkL2k7ZnVuY3Rpb24gdG8oYSxiKXtyZXR1cm4gYSE9PXZvaWQgMCYmKHdvLnRlc3Qod2luZG93LmRvY3VtZW50LmxvY2F0aW9uLmhvc3RuYW1lKXx8Yj09PVwiL1wiJiZ2by50ZXN0KGEpKX1mdW5jdGlvbiB4byhhKXtpZighYSlyZXR1cm4gMTt2YXIgYj1hO21iKDExKSYmYT09PVwibm9uZVwiJiYoYj13aW5kb3cuZG9jdW1lbnQubG9jYXRpb24uaG9zdG5hbWUpO2I9Yi5pbmRleE9mKFwiLlwiKT09PTA/Yi5zdWJzdHJpbmcoMSk6YjtyZXR1cm4gYi5zcGxpdChcIi5cIikubGVuZ3RofWZ1bmN0aW9uIHlvKGEpe2lmKCFhfHxhPT09XCIvXCIpcmV0dXJuIDE7YVswXSE9PVwiL1wiJiYoYT1cIi9cIithKTthW2EubGVuZ3RoLTFdIT09XCIvXCImJihhKz1cIi9cIik7cmV0dXJuIGEuc3BsaXQoXCIvXCIpLmxlbmd0aC0xfVxuZnVuY3Rpb24gem8oYSxiKXt2YXIgYz1cIlwiK3hvKGEpLGQ9eW8oYik7ZD4xJiYoYys9XCItXCIrZCk7cmV0dXJuIGN9XG52YXIgbG89ZnVuY3Rpb24oKXtyZXR1cm4gaW8od2luZG93KT93aW5kb3cuZG9jdW1lbnQuY29va2llOlwiXCJ9LGtvPWZ1bmN0aW9uKGEpe3JldHVybiBhJiZtYigxMik/KEFycmF5LmlzQXJyYXkoYSk/YTpbYV0pLmV2ZXJ5KGZ1bmN0aW9uKGIpe3JldHVybiB6ayhiKSYmd2soYil9KTohMH0sc289ZnVuY3Rpb24oKXt2YXIgYT1bXSxiPXdpbmRvdy5kb2N1bWVudC5sb2NhdGlvbi5ob3N0bmFtZS5zcGxpdChcIi5cIik7aWYoYi5sZW5ndGg9PT00KXt2YXIgYz1iW2IubGVuZ3RoLTFdO2lmKE51bWJlcihjKS50b1N0cmluZygpPT09YylyZXR1cm5bXCJub25lXCJdfWZvcih2YXIgZD1iLmxlbmd0aC0yO2Q+PTA7ZC0tKWEucHVzaChiLnNsaWNlKGQpLmpvaW4oXCIuXCIpKTt2YXIgZT13aW5kb3cuZG9jdW1lbnQubG9jYXRpb24uaG9zdG5hbWU7d28udGVzdChlKXx8dm8udGVzdChlKXx8YS5wdXNoKFwibm9uZVwiKTtyZXR1cm4gYX07ZnVuY3Rpb24gQW8oYSl7dmFyIGI9TWF0aC5yb3VuZChNYXRoLnJhbmRvbSgpKjIxNDc0ODM2NDcpO3JldHVybiBhP1N0cmluZyhiXmhvKGEpJjIxNDc0ODM2NDcpOlN0cmluZyhiKX1mdW5jdGlvbiBCbyhhKXtyZXR1cm5bQW8oYSksTWF0aC5yb3VuZChCYigpLzFFMyldLmpvaW4oXCIuXCIpfWZ1bmN0aW9uIENvKGEsYixjLGQsZSl7dmFyIGY9eG8oYik7cmV0dXJuIG1vKGEsZix5byhjKSxkLGUpfWZ1bmN0aW9uIERvKGEsYixjLGQpe3JldHVybltiLHpvKGMsZCksYV0uam9pbihcIi5cIil9O2Z1bmN0aW9uIEVvKGEsYixjLGQpe3ZhciBlLGY9TnVtYmVyKGEuemIhPW51bGw/YS56Yjp2b2lkIDApO2YhPT0wJiYoZT1uZXcgRGF0ZSgoYnx8QmIoKSkrMUUzKihmfHw3Nzc2RTMpKSk7cmV0dXJue3BhdGg6YS5wYXRoLGRvbWFpbjphLmRvbWFpbixmbGFnczphLmZsYWdzLGVuY29kZTohIWMsZXhwaXJlczplLEFiOmR9fTt2YXIgRm87ZnVuY3Rpb24gR28oKXtmdW5jdGlvbiBhKGcpe2MoZy50YXJnZXR8fGcuc3JjRWxlbWVudHx8e30pfWZ1bmN0aW9uIGIoZyl7ZChnLnRhcmdldHx8Zy5zcmNFbGVtZW50fHx7fSl9dmFyIGM9SG8sZD1JbyxlPUpvKCk7aWYoIWUuaW5pdCl7Q2MoRSxcIm1vdXNlZG93blwiLGEpO0NjKEUsXCJrZXl1cFwiLGEpO0NjKEUsXCJzdWJtaXRcIixiKTt2YXIgZj1IVE1MRm9ybUVsZW1lbnQucHJvdG90eXBlLnN1Ym1pdDtIVE1MRm9ybUVsZW1lbnQucHJvdG90eXBlLnN1Ym1pdD1mdW5jdGlvbigpe2QodGhpcyk7Zi5jYWxsKHRoaXMpfTtlLmluaXQ9ITB9fWZ1bmN0aW9uIEtvKGEsYixjLGQsZSl7dmFyIGY9e2NhbGxiYWNrOmEsZG9tYWluczpiLGZyYWdtZW50OmM9PT0yLHBsYWNlbWVudDpjLGZvcm1zOmQsc2FtZUhvc3Q6ZX07Sm8oKS5kZWNvcmF0b3JzLnB1c2goZil9XG5mdW5jdGlvbiBMbyhhLGIsYyl7Zm9yKHZhciBkPUpvKCkuZGVjb3JhdG9ycyxlPXt9LGY9MDtmPGQubGVuZ3RoOysrZil7dmFyIGc9ZFtmXSxrO2lmKGs9IWN8fGcuZm9ybXMpYTp7dmFyIG09Zy5kb21haW5zLG49YSxwPSEhZy5zYW1lSG9zdDtpZihtJiYocHx8biE9PUUubG9jYXRpb24uaG9zdG5hbWUpKWZvcih2YXIgcT0wO3E8bS5sZW5ndGg7cSsrKWlmKG1bcV1pbnN0YW5jZW9mIFJlZ0V4cCl7aWYobVtxXS50ZXN0KG4pKXtrPSEwO2JyZWFrIGF9fWVsc2UgaWYobi5pbmRleE9mKG1bcV0pPj0wfHxwJiZtW3FdLmluZGV4T2Yobik+PTApe2s9ITA7YnJlYWsgYX1rPSExfWlmKGspe3ZhciByPWcucGxhY2VtZW50O3I9PT12b2lkIDAmJihyPWcuZnJhZ21lbnQ/MjoxKTtyPT09YiYmRWIoZSxnLmNhbGxiYWNrKCkpfX1yZXR1cm4gZX1cbmZ1bmN0aW9uIEpvKCl7dmFyIGE9c2MoXCJnb29nbGVfdGFnX2RhdGFcIix7fSksYj1hLmdsO2ImJmIuZGVjb3JhdG9yc3x8KGI9e2RlY29yYXRvcnM6W119LGEuZ2w9Yik7cmV0dXJuIGJ9O3ZhciBNbz0vKC4qPylcXCooLio/KVxcKiguKikvLE5vPS9eaHR0cHM/OlxcL1xcLyhbXlxcL10qPylcXC4/Y2RuXFwuYW1wcHJvamVjdFxcLm9yZ1xcLz8oLiopLyxPbz0vXig/Ond3d1xcLnxtXFwufGFtcFxcLikrLyxQbz0vKFtePyNdKykoXFw/W14jXSopPygjLiopPy87ZnVuY3Rpb24gUW8oYSl7dmFyIGI9UG8uZXhlYyhhKTtpZihiKXJldHVybntDaDpiWzFdLHF1ZXJ5OmJbMl0sZnJhZ21lbnQ6YlszXX19XG5mdW5jdGlvbiBSbyhhLGIpe3ZhciBjPVtvYy51c2VyQWdlbnQsKG5ldyBEYXRlKS5nZXRUaW1lem9uZU9mZnNldCgpLG9jLnVzZXJMYW5ndWFnZXx8b2MubGFuZ3VhZ2UsTWF0aC5mbG9vcihCYigpLzYwLzFFMyktKGI9PT12b2lkIDA/MDpiKSxhXS5qb2luKFwiKlwiKSxkO2lmKCEoZD1Gbykpe2Zvcih2YXIgZT1BcnJheSgyNTYpLGY9MDtmPDI1NjtmKyspe2Zvcih2YXIgZz1mLGs9MDtrPDg7aysrKWc9ZyYxP2c+Pj4xXjM5ODgyOTIzODQ6Zz4+PjE7ZVtmXT1nfWQ9ZX1Gbz1kO2Zvcih2YXIgbT00Mjk0OTY3Mjk1LG49MDtuPGMubGVuZ3RoO24rKyltPW0+Pj44XkZvWyhtXmMuY2hhckNvZGVBdChuKSkmMjU1XTtyZXR1cm4oKG1eLTEpPj4+MCkudG9TdHJpbmcoMzYpfVxuZnVuY3Rpb24gU28oKXtyZXR1cm4gZnVuY3Rpb24oYSl7dmFyIGI9YWooRC5sb2NhdGlvbi5ocmVmKSxjPWIuc2VhcmNoLnJlcGxhY2UoXCI/XCIsXCJcIiksZD1VaShjLFwiX2dsXCIsITEsITApfHxcIlwiO2EucXVlcnk9VG8oZCl8fHt9O3ZhciBlPVZpKGIsXCJmcmFnbWVudFwiKSxmO3ZhciBnPS0xO2lmKEdiKGUsXCJfZ2w9XCIpKWc9NDtlbHNle3ZhciBrPWUuaW5kZXhPZihcIiZfZ2w9XCIpO2s+MCYmKGc9ayszKzIpfWlmKGc8MClmPXZvaWQgMDtlbHNle3ZhciBtPWUuaW5kZXhPZihcIiZcIixnKTtmPW08MD9lLnN1YnN0cmluZyhnKTplLnN1YnN0cmluZyhnLG0pfWEuZnJhZ21lbnQ9VG8oZnx8XCJcIil8fHt9fX1mdW5jdGlvbiBVbyhhKXt2YXIgYj1TbygpLGM9Sm8oKTtjLmRhdGF8fChjLmRhdGE9e3F1ZXJ5Ont9LGZyYWdtZW50Ont9fSxiKGMuZGF0YSkpO3ZhciBkPXt9LGU9Yy5kYXRhO2UmJihFYihkLGUucXVlcnkpLGEmJkViKGQsZS5mcmFnbWVudCkpO3JldHVybiBkfVxudmFyIFRvPWZ1bmN0aW9uKGEpe3RyeXt2YXIgYj1WbyhhLDMpO2lmKGIhPT12b2lkIDApe2Zvcih2YXIgYz17fSxkPWI/Yi5zcGxpdChcIipcIik6W10sZT0wO2UrMTxkLmxlbmd0aDtlKz0yKXt2YXIgZj1kW2VdLGc9ZmIoZFtlKzFdKTtjW2ZdPWd9aGIoXCJUQUdHSU5HXCIsNik7cmV0dXJuIGN9fWNhdGNoKGspe2hiKFwiVEFHR0lOR1wiLDgpfX07ZnVuY3Rpb24gVm8oYSxiKXtpZihhKXt2YXIgYzthOntmb3IodmFyIGQ9YSxlPTA7ZTwzOysrZSl7dmFyIGY9TW8uZXhlYyhkKTtpZihmKXtjPWY7YnJlYWsgYX1kPWRlY29kZVVSSUNvbXBvbmVudChkKX1jPXZvaWQgMH12YXIgZz1jO2lmKGcmJmdbMV09PT1cIjFcIil7dmFyIGs9Z1szXSxtO2E6e2Zvcih2YXIgbj1nWzJdLHA9MDtwPGI7KytwKWlmKG49PT1SbyhrLHApKXttPSEwO2JyZWFrIGF9bT0hMX1pZihtKXJldHVybiBrO2hiKFwiVEFHR0lOR1wiLDcpfX19XG5mdW5jdGlvbiBXbyhhLGIsYyxkLGUpe2Z1bmN0aW9uIGYocCl7dmFyIHE9cCxyPShuZXcgUmVnRXhwKFwiKC4qPykoXnwmKVwiK2ErXCI9KFteJl0qKSY/KC4qKVwiKSkuZXhlYyhxKSx0PXE7aWYocil7dmFyIHU9clsyXSx2PXJbNF07dD1yWzFdO3YmJih0PXQrdSt2KX1wPXQ7dmFyIHc9cC5jaGFyQXQocC5sZW5ndGgtMSk7cCYmdyE9PVwiJlwiJiYocCs9XCImXCIpO3JldHVybiBwK259ZD1kPT09dm9pZCAwPyExOmQ7ZT1lPT09dm9pZCAwPyExOmU7dmFyIGc9UW8oYyk7aWYoIWcpcmV0dXJuXCJcIjt2YXIgaz1nLnF1ZXJ5fHxcIlwiLG09Zy5mcmFnbWVudHx8XCJcIixuPWErXCI9XCIrYjtkP20uc3Vic3RyaW5nKDEpLmxlbmd0aCE9PTAmJmV8fChtPVwiI1wiK2YobS5zdWJzdHJpbmcoMSkpKTprPVwiP1wiK2Yoay5zdWJzdHJpbmcoMSkpO3JldHVyblwiXCIrZy5DaCtrK219XG5mdW5jdGlvbiBYbyhhLGIpe2Z1bmN0aW9uIGMobixwLHEpe3ZhciByO2E6e2Zvcih2YXIgdCBpbiBuKWlmKG4uaGFzT3duUHJvcGVydHkodCkpe3I9ITA7YnJlYWsgYX1yPSExfWlmKHIpe3ZhciB1LHY9W10sdztmb3IodyBpbiBuKWlmKG4uaGFzT3duUHJvcGVydHkodykpe3ZhciB4PW5bd107eCE9PXZvaWQgMCYmeD09PXgmJnghPT1udWxsJiZ4LnRvU3RyaW5nKCkhPT1cIltvYmplY3QgT2JqZWN0XVwiJiYodi5wdXNoKHcpLHYucHVzaChlYihTdHJpbmcoeCkpKSl9dmFyIHk9di5qb2luKFwiKlwiKTt1PVtcIjFcIixSbyh5KSx5XS5qb2luKFwiKlwiKTtkPyhtYig0KXx8bWIoMSl8fCFwKSYmWW8oXCJfZ2xcIix1LGEscCxxKTpabyhcIl9nbFwiLHUsYSxwLHEpfX12YXIgZD0oYS50YWdOYW1lfHxcIlwiKS50b1VwcGVyQ2FzZSgpPT09XCJGT1JNXCIsZT1MbyhiLDEsZCksZj1MbyhiLDIsZCksZz1MbyhiLDQsZCksaz1MbyhiLDMsZCk7YyhlLCExLCExKTtjKGYsITAsITEpO21iKDEpJiZjKGcsITAsITApO2Zvcih2YXIgbSBpbiBrKWsuaGFzT3duUHJvcGVydHkobSkmJlxuJG8obSxrW21dLGEpfWZ1bmN0aW9uICRvKGEsYixjKXtjLnRhZ05hbWUudG9Mb3dlckNhc2UoKT09PVwiYVwiP1pvKGEsYixjKTpjLnRhZ05hbWUudG9Mb3dlckNhc2UoKT09PVwiZm9ybVwiJiZZbyhhLGIsYyl9ZnVuY3Rpb24gWm8oYSxiLGMsZCxlKXtkPWQ9PT12b2lkIDA/ITE6ZDtlPWU9PT12b2lkIDA/ITE6ZTt2YXIgZjtpZihmPWMuaHJlZil7dmFyIGc7aWYoIShnPSFtYig1KXx8ZCkpe3ZhciBrPUQubG9jYXRpb24uaHJlZixtPVFvKGMuaHJlZiksbj1RbyhrKTtnPSEobSYmbiYmbS5DaD09PW4uQ2gmJm0ucXVlcnk9PT1uLnF1ZXJ5JiZtLmZyYWdtZW50KX1mPWd9aWYoZil7dmFyIHA9V28oYSxiLGMuaHJlZixkLGUpO2ZjLnRlc3QocCkmJihjLmhyZWY9cCl9fVxuZnVuY3Rpb24gWW8oYSxiLGMsZCxlKXtkPWQ9PT12b2lkIDA/ITE6ZDtlPWU9PT12b2lkIDA/ITE6ZTtpZihjJiZjLmFjdGlvbil7dmFyIGY9KGMubWV0aG9kfHxcIlwiKS50b0xvd2VyQ2FzZSgpO2lmKGYhPT1cImdldFwifHxkKXtpZihmPT09XCJnZXRcInx8Zj09PVwicG9zdFwiKXt2YXIgZz1XbyhhLGIsYy5hY3Rpb24sZCxlKTtmYy50ZXN0KGcpJiYoYy5hY3Rpb249Zyl9fWVsc2V7Zm9yKHZhciBrPWMuY2hpbGROb2Rlc3x8W10sbT0hMSxuPTA7bjxrLmxlbmd0aDtuKyspe3ZhciBwPWtbbl07aWYocC5uYW1lPT09YSl7cC5zZXRBdHRyaWJ1dGUoXCJ2YWx1ZVwiLGIpO209ITA7YnJlYWt9fWlmKCFtKXt2YXIgcT1FLmNyZWF0ZUVsZW1lbnQoXCJpbnB1dFwiKTtxLnNldEF0dHJpYnV0ZShcInR5cGVcIixcImhpZGRlblwiKTtxLnNldEF0dHJpYnV0ZShcIm5hbWVcIixhKTtxLnNldEF0dHJpYnV0ZShcInZhbHVlXCIsYik7Yy5hcHBlbmRDaGlsZChxKX19fX1cbmZ1bmN0aW9uIEhvKGEpe3RyeXt2YXIgYjthOntmb3IodmFyIGM9YSxkPTEwMDtjJiZkPjA7KXtpZihjLmhyZWYmJmMubm9kZU5hbWUubWF0Y2goL15hKD86cmVhKT8kL2kpKXtiPWM7YnJlYWsgYX1jPWMucGFyZW50Tm9kZTtkLS19Yj1udWxsfXZhciBlPWI7aWYoZSl7dmFyIGY9ZS5wcm90b2NvbDtmIT09XCJodHRwOlwiJiZmIT09XCJodHRwczpcInx8WG8oZSxlLmhvc3RuYW1lKX19Y2F0Y2goZyl7fX1mdW5jdGlvbiBJbyhhKXt0cnl7aWYoYS5hY3Rpb24pe3ZhciBiPVZpKGFqKGEuYWN0aW9uKSxcImhvc3RcIik7WG8oYSxiKX19Y2F0Y2goYyl7fX1mdW5jdGlvbiBhcChhLGIsYyxkKXtHbygpO3ZhciBlPWM9PT1cImZyYWdtZW50XCI/MjoxO2Q9ISFkO0tvKGEsYixlLGQsITEpO2U9PT0yJiZoYihcIlRBR0dJTkdcIiwyMyk7ZCYmaGIoXCJUQUdHSU5HXCIsMjQpfWZ1bmN0aW9uIGJwKGEsYil7R28oKTtLbyhhLFtYaShELmxvY2F0aW9uLFwiaG9zdFwiLCEwKV0sYiwhMCwhMCl9XG5mdW5jdGlvbiBjcCgpe3ZhciBhPUUubG9jYXRpb24uaG9zdG5hbWUsYj1Oby5leGVjKEUucmVmZXJyZXIpO2lmKCFiKXJldHVybiExO3ZhciBjPWJbMl0sZD1iWzFdLGU9XCJcIjtpZihjKXt2YXIgZj1jLnNwbGl0KFwiL1wiKSxnPWZbMV07ZT1nPT09XCJzXCI/ZGVjb2RlVVJJQ29tcG9uZW50KGZbMl0pOmRlY29kZVVSSUNvbXBvbmVudChnKX1lbHNlIGlmKGQpe2lmKGQuaW5kZXhPZihcInhuLS1cIik9PT0wKXJldHVybiExO2U9ZC5yZXBsYWNlKC8tL2csXCIuXCIpLnJlcGxhY2UoL1xcLlxcLi9nLFwiLVwiKX12YXIgaz1hLnJlcGxhY2UoT28sXCJcIiksbT1lLnJlcGxhY2UoT28sXCJcIik7cmV0dXJuIGs9PT1tfHxIYihrLFwiLlwiK20pfWZ1bmN0aW9uIGRwKGEsYil7cmV0dXJuIGE9PT0hMT8hMTphfHxifHxjcCgpfTt2YXIgZXA9W1wiMVwiXSxmcD17fSxncD17fTtmdW5jdGlvbiBocChhLGIpe2I9Yj09PXZvaWQgMD8hMDpiO3ZhciBjPWlwKGEucHJlZml4KTtpZighZnBbY10paWYoanAoYyxhLnBhdGgsYS5kb21haW4pKXt2YXIgZD1ncFtpcChhLnByZWZpeCldO2twKGEsZD9kLmlkOnZvaWQgMCxkP2QueGg6dm9pZCAwKX1lbHNle3ZhciBlPWNqKFwiYXVpZGRjXCIpO2lmKGUpaGIoXCJUQUdHSU5HXCIsMTcpLGZwW2NdPWU7ZWxzZSBpZihiKXt2YXIgZj1pcChhLnByZWZpeCksZz1CbygpO2xwKGYsZyxhKTtqcChjLGEucGF0aCxhLmRvbWFpbil9fX1mdW5jdGlvbiBrcChhLGIsYyl7dmFyIGQ9aXAoYS5wcmVmaXgpLGU9ZnBbZF07aWYoZSl7dmFyIGY9ZS5zcGxpdChcIi5cIik7aWYoZi5sZW5ndGg9PT0yKXt2YXIgZz1OdW1iZXIoZlsxXSl8fDA7aWYoZyl7dmFyIGs9ZTtiJiYoaz1lK1wiLlwiK2IrXCIuXCIrKGM/YzpNYXRoLmZsb29yKEJiKCkvMUUzKSkpO2xwKGQsayxhLGcqMUUzKX19fX1cbmZ1bmN0aW9uIGxwKGEsYixjLGQpe3ZhciBlPURvKGIsXCIxXCIsYy5kb21haW4sYy5wYXRoKSxmPUVvKGMsZCk7Zi5BYj1tcCgpO3VvKGEsZSxmKX1mdW5jdGlvbiBqcChhLGIsYyl7dmFyIGQ9Q28oYSxiLGMsZXAsbXAoKSk7aWYoIWQpcmV0dXJuITE7bnAoYSxkKTtyZXR1cm4hMH1mdW5jdGlvbiBucChhLGIpe3ZhciBjPWIuc3BsaXQoXCIuXCIpO2MubGVuZ3RoPT09NT8oZnBbYV09Yy5zbGljZSgwLDIpLmpvaW4oXCIuXCIpLGdwW2FdPXtpZDpjLnNsaWNlKDIsNCkuam9pbihcIi5cIikseGg6TnVtYmVyKGNbNF0pfHwwfSk6Yy5sZW5ndGg9PT0zP2dwW2FdPXtpZDpjLnNsaWNlKDAsMikuam9pbihcIi5cIikseGg6TnVtYmVyKGNbMl0pfHwwfTpmcFthXT1ifWZ1bmN0aW9uIGlwKGEpe3JldHVybihhfHxcIl9nY2xcIikrXCJfYXVcIn1mdW5jdGlvbiBvcChhKXtmdW5jdGlvbiBiKCl7d2soYykmJmEoKX12YXIgYz1tcCgpO0RrKGZ1bmN0aW9uKCl7YigpO3drKGMpfHxFayhiLGMpfSxjKX1cbmZ1bmN0aW9uIHBwKGEpe3ZhciBiPVVvKCEwKSxjPWlwKGEucHJlZml4KTtvcChmdW5jdGlvbigpe3ZhciBkPWJbY107aWYoZCl7bnAoYyxkKTt2YXIgZT1OdW1iZXIoZnBbY10uc3BsaXQoXCIuXCIpWzFdKSoxRTM7aWYoZSl7aGIoXCJUQUdHSU5HXCIsMTYpO3ZhciBmPUVvKGEsZSk7Zi5BYj1tcCgpO3ZhciBnPURvKGQsXCIxXCIsYS5kb21haW4sYS5wYXRoKTt1byhjLGcsZil9fX0pfWZ1bmN0aW9uIHFwKGEsYixjLGQsZSl7ZT1lfHx7fTt2YXIgZj1mdW5jdGlvbigpe3ZhciBnPXt9LGs9Q28oYSxlLnBhdGgsZS5kb21haW4sZXAsbXAoKSk7ayYmKGdbYV09ayk7cmV0dXJuIGd9O29wKGZ1bmN0aW9uKCl7YXAoZixiLGMsZCl9KX1mdW5jdGlvbiBtcCgpe3JldHVybltcImFkX3N0b3JhZ2VcIixcImFkX3VzZXJfZGF0YVwiXX07ZnVuY3Rpb24gcnAoYSl7Zm9yKHZhciBiPVtdLGM9RS5jb29raWUuc3BsaXQoXCI7XCIpLGQ9bmV3IFJlZ0V4cChcIl5cXFxccypcIisoYXx8XCJfZ2FjXCIpK1wiXyhVQS1cXFxcZCstXFxcXGQrKT1cXFxccyooLis/KVxcXFxzKiRcIiksZT0wO2U8Yy5sZW5ndGg7ZSsrKXt2YXIgZj1jW2VdLm1hdGNoKGQpO2YmJmIucHVzaCh7UWg6ZlsxXSx2YWx1ZTpmWzJdLHRpbWVzdGFtcDpOdW1iZXIoZlsyXS5zcGxpdChcIi5cIilbMV0pfHwwfSl9Yi5zb3J0KGZ1bmN0aW9uKGcsayl7cmV0dXJuIGsudGltZXN0YW1wLWcudGltZXN0YW1wfSk7cmV0dXJuIGJ9XG5mdW5jdGlvbiBzcChhLGIpe3ZhciBjPXJwKGEpLGQ9e307aWYoIWN8fCFjLmxlbmd0aClyZXR1cm4gZDtmb3IodmFyIGU9MDtlPGMubGVuZ3RoO2UrKyl7dmFyIGY9Y1tlXS52YWx1ZS5zcGxpdChcIi5cIik7aWYoIShmWzBdIT09XCIxXCJ8fGImJmYubGVuZ3RoPDN8fCFiJiZmLmxlbmd0aCE9PTMpJiZOdW1iZXIoZlsxXSkpe2RbY1tlXS5RaF18fChkW2NbZV0uUWhdPVtdKTt2YXIgZz17dmVyc2lvbjpmWzBdLHRpbWVzdGFtcDpOdW1iZXIoZlsxXSkqMUUzLGFhOmZbMl19O2ImJmYubGVuZ3RoPjMmJihnLmxhYmVscz1mLnNsaWNlKDMpKTtkW2NbZV0uUWhdLnB1c2goZyl9fXJldHVybiBkfTt2YXIgdHA9e30sdXA9KHRwLms9e0dhOi9eW1xcdy1dKyQvfSx0cC5iPXtHYTovXltcXHctXSskLyxKaDohMH0sdHAuaT17R2E6L15bMS05XVxcZCokL30sdHAudT17R2E6L15bMS05XVxcZCokL30sdHApO3ZhciB2cD17fSx5cD0odnBbNV09e21rOnsyOndwfSxhaDpbXCJrXCIsXCJpXCIsXCJiXCIsXCJ1XCJdfSx2cFs0XT17bWs6ezI6d3AsR0NMOnhwfSxhaDpbXCJrXCIsXCJpXCIsXCJiXCJdfSx2cCk7ZnVuY3Rpb24genAoYSl7dmFyIGI9eXBbNV07aWYoYil7dmFyIGM9YS5zcGxpdChcIi5cIilbMF07aWYoYyl7dmFyIGQ9Yi5ta1tjXTtpZihkKXJldHVybiBkKGEsNSl9fX1cbmZ1bmN0aW9uIHdwKGEsYil7dmFyIGM9YS5zcGxpdChcIi5cIik7aWYoYy5sZW5ndGg9PT0zKXt2YXIgZD17fSxlPXlwW2JdO2lmKGUpe2Zvcih2YXIgZj1lLmFoLGc9bmEoY1syXS5zcGxpdChcIiRcIikpLGs9Zy5uZXh0KCk7IWsuZG9uZTtrPWcubmV4dCgpKXt2YXIgbT1rLnZhbHVlLG49bVswXTtpZihmLmluZGV4T2YobikhPT0tMSl0cnl7dmFyIHA9ZGVjb2RlVVJJQ29tcG9uZW50KG0uc3Vic3RyaW5nKDEpKSxxPXVwW25dO3EmJihxLkpoPyhkW25dPWRbbl18fFtdLGRbbl0ucHVzaChwKSk6ZFtuXT1wKX1jYXRjaChyKXt9fXJldHVybiBkfX19XG5mdW5jdGlvbiBBcChhLGIpe3ZhciBjPXlwWzVdO2lmKGMpe2Zvcih2YXIgZD1bXSxlPW5hKGMuYWgpLGY9ZS5uZXh0KCk7IWYuZG9uZTtmPWUubmV4dCgpKXt2YXIgZz1mLnZhbHVlLGs9dXBbZ107aWYoayl7dmFyIG09YVtnXTtpZihtIT09dm9pZCAwKWlmKGsuSmgmJkFycmF5LmlzQXJyYXkobSkpZm9yKHZhciBuPW5hKG0pLHA9bi5uZXh0KCk7IXAuZG9uZTtwPW4ubmV4dCgpKWQucHVzaChlbmNvZGVVUklDb21wb25lbnQoXCJcIitnK3AudmFsdWUpKTtlbHNlIGQucHVzaChlbmNvZGVVUklDb21wb25lbnQoXCJcIitnK20pKX19cmV0dXJuW1wiMlwiLGJ8fFwiMVwiLGQuam9pbihcIiRcIildLmpvaW4oXCIuXCIpfX1mdW5jdGlvbiB4cChhKXt2YXIgYj1hLnNwbGl0KFwiLlwiKTtiLnNoaWZ0KCk7dmFyIGM9Yi5zaGlmdCgpLGQ9Yi5zaGlmdCgpLGU9e307cmV0dXJuIGUuaz1kLGUuaT1jLGUuYj1iLGV9O3ZhciBCcD1uZXcgTWFwKFtbNSxcImFkX3N0b3JhZ2VcIl0sWzQsW1wiYWRfc3RvcmFnZVwiLFwiYWRfdXNlcl9kYXRhXCJdXV0pO2Z1bmN0aW9uIENwKGEpe2lmKHlwWzVdKXtmb3IodmFyIGI9W10sYz1qbyhhLHZvaWQgMCx2b2lkIDAsQnAuZ2V0KDUpKSxkPW5hKGMpLGU9ZC5uZXh0KCk7IWUuZG9uZTtlPWQubmV4dCgpKXt2YXIgZj16cChlLnZhbHVlKTtmJiYoRHAoZiksYi5wdXNoKGYpKX1yZXR1cm4gYn19ZnVuY3Rpb24gRXAoYSxiLGMsZCl7Yz1jfHx7fTt2YXIgZT16byhjLmRvbWFpbixjLnBhdGgpLGY9QXAoYixlKTtpZihmKXt2YXIgZz1FbyhjLGQsdm9pZCAwLEJwLmdldCg1KSk7dW8oYSxmLGcpfX1mdW5jdGlvbiBGcChhLGIpe3ZhciBjPWIuR2E7cmV0dXJuIHR5cGVvZiBjPT09XCJmdW5jdGlvblwiP2MoYSk6Yy50ZXN0KGEpfVxuZnVuY3Rpb24gRHAoYSl7Zm9yKHZhciBiPW5hKE9iamVjdC5rZXlzKGEpKSxjPWIubmV4dCgpLGQ9e307IWMuZG9uZTtkPXt6ZTp2b2lkIDB9LGM9Yi5uZXh0KCkpe3ZhciBlPWMudmFsdWUsZj1hW2VdO2QuemU9dXBbZV07ZC56ZT9kLnplLkpoP2FbZV09QXJyYXkuaXNBcnJheShmKT9mLmZpbHRlcihmdW5jdGlvbihnKXtyZXR1cm4gZnVuY3Rpb24oayl7cmV0dXJuIEZwKGssZy56ZSl9fShkKSk6dm9pZCAwOnR5cGVvZiBmPT09XCJzdHJpbmdcIiYmRnAoZixkLnplKXx8KGFbZV09dm9pZCAwKTphW2VdPXZvaWQgMH19O3ZhciBHcD0vXlxcdyskLyxIcD0vXltcXHctXSskLyxJcD17fSxKcD0oSXAuYXc9XCJfYXdcIixJcC5kYz1cIl9kY1wiLElwLmdmPVwiX2dmXCIsSXAuZ3A9XCJfZ3BcIixJcC5ncz1cIl9nc1wiLElwLmhhPVwiX2hhXCIsSXAuYWc9XCJfYWdcIixJcC5nYj1cIl9nYlwiLElwKTtmdW5jdGlvbiBLcCgpe3JldHVybltcImFkX3N0b3JhZ2VcIixcImFkX3VzZXJfZGF0YVwiXX1mdW5jdGlvbiBMcChhKXtyZXR1cm4hbWIoMTIpfHx3ayhhKX1mdW5jdGlvbiBNcChhLGIpe2Z1bmN0aW9uIGMoKXt2YXIgZD1McChiKTtkJiZhKCk7cmV0dXJuIGR9RGsoZnVuY3Rpb24oKXtjKCl8fEVrKGMsYil9LGIpfWZ1bmN0aW9uIE5wKGEpe3JldHVybiBPcChhKS5tYXAoZnVuY3Rpb24oYil7cmV0dXJuIGIuYWF9KX1mdW5jdGlvbiBQcChhKXtyZXR1cm4gUXAoYSkuZmlsdGVyKGZ1bmN0aW9uKGIpe3JldHVybiBiLmFhfSkubWFwKGZ1bmN0aW9uKGIpe3JldHVybiBiLmFhfSl9XG5mdW5jdGlvbiBRcChhKXt2YXIgYj1ScChhLnByZWZpeCksYz1TcChcImdiXCIsYiksZD1TcChcImFnXCIsYik7aWYoIWR8fCFjKXJldHVybltdO3ZhciBlPWZ1bmN0aW9uKGspe3JldHVybiBmdW5jdGlvbihtKXttLnR5cGU9aztyZXR1cm4gbX19LGY9T3AoYykubWFwKGUoXCJnYlwiKSksZz0obWIoNyk/VHAoZCk6W10pLm1hcChlKFwiYWdcIikpO3JldHVybiBmLmNvbmNhdChnKS5zb3J0KGZ1bmN0aW9uKGssbSl7cmV0dXJuIG0udGltZXN0YW1wLWsudGltZXN0YW1wfSl9ZnVuY3Rpb24gVXAoYSxiLGMsZCxlLGYpe3ZhciBnPXJiKGEsZnVuY3Rpb24oayl7cmV0dXJuIGsuYWE9PT1jfSk7Zz8oZy50aW1lc3RhbXA8ZCYmKGcudGltZXN0YW1wPWQsZy5Naj1mKSxnLmxhYmVscz1WcChnLmxhYmVsc3x8W10sZXx8W10pKTphLnB1c2goe3ZlcnNpb246YixhYTpjLHRpbWVzdGFtcDpkLGxhYmVsczplLE1qOmZ9KX1cbmZ1bmN0aW9uIFRwKGEpe2Zvcih2YXIgYj1DcChhKXx8W10sYz1bXSxkPW5hKGIpLGU9ZC5uZXh0KCk7IWUuZG9uZTtlPWQubmV4dCgpKXt2YXIgZj1lLnZhbHVlLGc9ZixrPWcuayxtPWcuYixuPVdwKGYpO2lmKG4pe3ZhciBwPXZvaWQgMDttYigxMykmJihwPWYudSk7VXAoYyxcIjJcIixrLG4sbXx8W10scCl9fXJldHVybiBjLnNvcnQoZnVuY3Rpb24ocSxyKXtyZXR1cm4gci50aW1lc3RhbXAtcS50aW1lc3RhbXB9KX1mdW5jdGlvbiBPcChhKXtmb3IodmFyIGI9W10sYz1qbyhhLEUuY29va2llLHZvaWQgMCxLcCgpKSxkPW5hKGMpLGU9ZC5uZXh0KCk7IWUuZG9uZTtlPWQubmV4dCgpKXt2YXIgZj1YcChlLnZhbHVlKTtpZihmIT1udWxsKXt2YXIgZz1mO1VwKGIsZy52ZXJzaW9uLGcuYWEsZy50aW1lc3RhbXAsZy5sYWJlbHMpfX1iLnNvcnQoZnVuY3Rpb24oayxtKXtyZXR1cm4gbS50aW1lc3RhbXAtay50aW1lc3RhbXB9KTtyZXR1cm4gWXAoYil9XG5mdW5jdGlvbiBWcChhLGIpe2lmKCFhLmxlbmd0aClyZXR1cm4gYjtpZighYi5sZW5ndGgpcmV0dXJuIGE7dmFyIGM9e307cmV0dXJuIGEuY29uY2F0KGIpLmZpbHRlcihmdW5jdGlvbihkKXtyZXR1cm4gYy5oYXNPd25Qcm9wZXJ0eShkKT8hMTpjW2RdPSEwfSl9ZnVuY3Rpb24gUnAoYSl7cmV0dXJuIGEmJnR5cGVvZiBhPT09XCJzdHJpbmdcIiYmYS5tYXRjaChHcCk/YTpcIl9nY2xcIn1cbmZ1bmN0aW9uIFpwKGEsYil7dmFyIGM9bWIoNyksZD1haihhKSxlPVZpKGQsXCJxdWVyeVwiLCExLHZvaWQgMCxcImdjbGlkXCIpLGY9VmkoZCxcInF1ZXJ5XCIsITEsdm9pZCAwLFwiZ2Nsc3JjXCIpLGc9VmkoZCxcInF1ZXJ5XCIsITEsdm9pZCAwLFwid2JyYWlkXCIpO2c9TmIoZyk7dmFyIGs7YyYmKGs9VmkoZCxcInF1ZXJ5XCIsITEsdm9pZCAwLFwiZ2JyYWlkXCIpKTt2YXIgbT1WaShkLFwicXVlcnlcIiwhMSx2b2lkIDAsXCJnYWRfc291cmNlXCIpLG49VmkoZCxcInF1ZXJ5XCIsITEsdm9pZCAwLFwiZGNsaWRcIik7aWYoYiYmKCFlfHwhZnx8IWd8fGMmJiFrKSl7dmFyIHA9ZC5oYXNoLnJlcGxhY2UoXCIjXCIsXCJcIik7ZT1lfHxVaShwLFwiZ2NsaWRcIiwhMSk7Zj1mfHxVaShwLFwiZ2Nsc3JjXCIsITEpO2c9Z3x8VWkocCxcIndicmFpZFwiLCExKTtjJiYoaz1rfHxVaShwLFwiZ2JyYWlkXCIsITEpKTttPW18fFVpKHAsXCJnYWRfc291cmNlXCIsITEpfXJldHVybiAkcChlLGYsbixnLGssbSl9XG5mdW5jdGlvbiBhcSgpe3JldHVybiBacChELmxvY2F0aW9uLmhyZWYsITApfVxuZnVuY3Rpb24gJHAoYSxiLGMsZCxlLGYpe3ZhciBnPXt9LGs9ZnVuY3Rpb24obSxuKXtnW25dfHwoZ1tuXT1bXSk7Z1tuXS5wdXNoKG0pfTtnLmdjbGlkPWE7Zy5nY2xzcmM9YjtnLmRjbGlkPWM7aWYoYSE9PXZvaWQgMCYmYS5tYXRjaChIcCkpc3dpdGNoKGIpe2Nhc2Ugdm9pZCAwOmsoYSxcImF3XCIpO2JyZWFrO2Nhc2UgXCJhdy5kc1wiOmsoYSxcImF3XCIpO2soYSxcImRjXCIpO2JyZWFrO2Nhc2UgXCJkc1wiOmsoYSxcImRjXCIpO2JyZWFrO2Nhc2UgXCIzcC5kc1wiOmsoYSxcImRjXCIpO2JyZWFrO2Nhc2UgXCJnZlwiOmsoYSxcImdmXCIpO2JyZWFrO2Nhc2UgXCJoYVwiOmsoYSxcImhhXCIpfWMmJmsoYyxcImRjXCIpO2QhPT12b2lkIDAmJkhwLnRlc3QoZCkmJihnLndicmFpZD1kLGsoZCxcImdiXCIpKTttYig3KSYmZSE9PXZvaWQgMCYmSHAudGVzdChlKSYmKGcuZ2JyYWlkPWUsayhlLFwiYWdcIikpO2YhPT12b2lkIDAmJkhwLnRlc3QoZikmJihnLmdhZF9zb3VyY2U9ZixrKGYsXCJnc1wiKSk7cmV0dXJuIGd9XG5mdW5jdGlvbiBicShhKXt2YXIgYj1hcSgpO2lmKG1iKDYpKXtmb3IodmFyIGM9ITAsZD1uYShPYmplY3Qua2V5cyhiKSksZT1kLm5leHQoKTshZS5kb25lO2U9ZC5uZXh0KCkpaWYoYltlLnZhbHVlXSE9PXZvaWQgMCl7Yz0hMTticmVha31jJiYoYj1acChELmRvY3VtZW50LnJlZmVycmVyLCExKSxtYigxNCkmJihiLmdhZF9zb3VyY2U9dm9pZCAwKSl9Y3EoYiwhMSxhKX1cbmZ1bmN0aW9uIGNxKGEsYixjLGQsZSl7Yz1jfHx7fTtlPWV8fFtdO3ZhciBmPVJwKGMucHJlZml4KSxnPWR8fEJiKCksaz1NYXRoLnJvdW5kKGcvMUUzKSxtPUtwKCksbj0hMSxwPSExLHE9ZnVuY3Rpb24oKXtpZihMcChtKSl7dmFyIHI9RW8oYyxnLCEwKTtyLkFiPW07Zm9yKHZhciB0PWZ1bmN0aW9uKEYsTyl7dmFyIE49U3AoRixmKTtOJiYodW8oTixPLHIpLEYhPT1cImdiXCImJihuPSEwKSl9LHU9ZnVuY3Rpb24oRil7dmFyIE89W1wiR0NMXCIsayxGXTtlLmxlbmd0aD4wJiZPLnB1c2goZS5qb2luKFwiLlwiKSk7cmV0dXJuIE8uam9pbihcIi5cIil9LHY9bmEoW1wiYXdcIixcImRjXCIsXCJnZlwiLFwiaGFcIixcImdwXCJdKSx3PXYubmV4dCgpOyF3LmRvbmU7dz12Lm5leHQoKSl7dmFyIHg9dy52YWx1ZTthW3hdJiZ0KHgsdShhW3hdWzBdKSl9aWYoIW4mJmEuZ2Ipe3ZhciB5PWEuZ2JbMF0sQT1TcChcImdiXCIsZik7IWImJk9wKEEpLnNvbWUoZnVuY3Rpb24oRil7cmV0dXJuIEYuYWE9PT15JiZGLmxhYmVscyYmXG5GLmxhYmVscy5sZW5ndGg+MH0pfHx0KFwiZ2JcIix1KHkpKX19aWYoIXAmJm1iKDcpJiZhLmdicmFpZCYmTHAoXCJhZF9zdG9yYWdlXCIpJiYocD0hMCwhbikpe3ZhciBCPWEuZ2JyYWlkLEM9U3AoXCJhZ1wiLGYpO2lmKGJ8fCEobWIoNyk/VHAoQyk6W10pLnNvbWUoZnVuY3Rpb24oRil7cmV0dXJuIEYuYWE9PT1CJiZGLmxhYmVscyYmRi5sYWJlbHMubGVuZ3RoPjB9KSl7dmFyIEg9e30sST0oSC5rPUIsSC5pPVwiXCIrayxILmI9ZSxIKTtFcChDLEksYyxnKX19ZHEoYSxmLGcsYyl9O0RrKGZ1bmN0aW9uKCl7cSgpO0xwKG0pfHxFayhxLG0pfSxtKX1cbmZ1bmN0aW9uIGRxKGEsYixjLGQpe2lmKGEuZ2FkX3NvdXJjZSE9PXZvaWQgMCYmTHAoXCJhZF9zdG9yYWdlXCIpKXt2YXIgZT1hLmdhZF9zb3VyY2UsZj1TcChcImdzXCIsYik7aWYoZil7dmFyIGc9TWF0aC5yb3VuZCgoQmIoKS0oT2MoKXx8MCkpLzFFMyksaztpZihtYigxMykpe3ZhciBtLG49U3RyaW5nLHA9RC5sb2NhdGlvbi5ob3N0bmFtZSxxPUQubG9jYXRpb24ucGF0aG5hbWUscj1wPWRqKHApO3Iuc3BsaXQoXCIuXCIpLmxlbmd0aD4yJiYocj1yLnJlcGxhY2UoL14od3d3WzAtOV0qfHdlYnxmdHB8d2FwfGhvbWV8bXx3fGFtcHxtb2JpbGUpXFwuLyxcIlwiKSk7cD1yO3E9ZGoocSk7dmFyIHQ9cS5zcGxpdChcIjtcIilbMF07dD10LnJlcGxhY2UoL1xcLyhhcnxzbHB8d2VifGluZGV4KT9cXC8/JC8sXCJcIik7bT1uKGhvKChcIlwiK3ArdCkudG9Mb3dlckNhc2UoKSkpO3ZhciB1PXt9O2s9KHUuaz1lLHUuaT1cIlwiK2csdS51PW0sdSl9ZWxzZXt2YXIgdj17fTtrPSh2Lms9ZSx2Lmk9XCJcIitnLHYpfUVwKGYsayxcbmQsYyl9fX1mdW5jdGlvbiBlcShhLGIpe3ZhciBjPVVvKCEwKTtNcChmdW5jdGlvbigpe2Zvcih2YXIgZD1ScChiLnByZWZpeCksZT0wO2U8YS5sZW5ndGg7KytlKXt2YXIgZj1hW2VdO2lmKEpwW2ZdIT09dm9pZCAwKXt2YXIgZz1TcChmLGQpLGs9Y1tnXTtpZihrKXt2YXIgbT1NYXRoLm1pbihmcShrKSxCYigpKSxuO2I6e2Zvcih2YXIgcD1tLHE9am8oZyxFLmNvb2tpZSx2b2lkIDAsS3AoKSkscj0wO3I8cS5sZW5ndGg7KytyKWlmKGZxKHFbcl0pPnApe249ITA7YnJlYWsgYn1uPSExfWlmKCFuKXt2YXIgdD1FbyhiLG0sITApO3QuQWI9S3AoKTt1byhnLGssdCl9fX19Y3EoJHAoYy5nY2xpZCxjLmdjbHNyYyksITEsYil9LEtwKCkpfVxuZnVuY3Rpb24gZ3EoYSl7dmFyIGI9W107bWIoNykmJmIucHVzaChcImFnXCIpO2lmKGIubGVuZ3RoIT09MCl7dmFyIGM9VW8oITApLGQ9UnAoYS5wcmVmaXgpO01wKGZ1bmN0aW9uKCl7Zm9yKHZhciBlPTA7ZTxiLmxlbmd0aDsrK2Upe3ZhciBmPVNwKGJbZV0sZCk7aWYoZil7dmFyIGc9Y1tmXTtpZihnKXt2YXIgaz16cChnKTtpZihrKXt2YXIgbT1XcChrKTttfHwobT1CYigpKTt2YXIgbjthOntmb3IodmFyIHA9bSxxPUNwKGYpLHI9MDtyPHEubGVuZ3RoOysrcilpZihXcChxW3JdKT5wKXtuPSEwO2JyZWFrIGF9bj0hMX1pZihuKWJyZWFrO2suaT1cIlwiK01hdGgucm91bmQobS8xRTMpO0VwKGYsayxhLG0pfX19fX0sW1wiYWRfc3RvcmFnZVwiXSl9fWZ1bmN0aW9uIFNwKGEsYil7dmFyIGM9SnBbYV07aWYoYyE9PXZvaWQgMClyZXR1cm4gYitjfVxuZnVuY3Rpb24gZnEoYSl7cmV0dXJuIGhxKGEuc3BsaXQoXCIuXCIpKS5sZW5ndGghPT0wPyhOdW1iZXIoYS5zcGxpdChcIi5cIilbMV0pfHwwKSoxRTM6MH1mdW5jdGlvbiBXcChhKXtyZXR1cm4gYT8oTnVtYmVyKGEuaSl8fDApKjFFMzowfWZ1bmN0aW9uIFhwKGEpe3ZhciBiPWhxKGEuc3BsaXQoXCIuXCIpKTtyZXR1cm4gYi5sZW5ndGg9PT0wP251bGw6e3ZlcnNpb246YlswXSxhYTpiWzJdLHRpbWVzdGFtcDooTnVtYmVyKGJbMV0pfHwwKSoxRTMsbGFiZWxzOmIuc2xpY2UoMyl9fWZ1bmN0aW9uIGhxKGEpe3JldHVybiBhLmxlbmd0aDwzfHxhWzBdIT09XCJHQ0xcIiYmYVswXSE9PVwiMVwifHwhL15cXGQrJC8udGVzdChhWzFdKXx8IUhwLnRlc3QoYVsyXSk/W106YX1cbmZ1bmN0aW9uIGlxKGEsYixjLGQsZSl7aWYoQXJyYXkuaXNBcnJheShiKSYmaW8oRCkpe3ZhciBmPVJwKGUpLGc9ZnVuY3Rpb24oKXtmb3IodmFyIGs9e30sbT0wO208YS5sZW5ndGg7KyttKXt2YXIgbj1TcChhW21dLGYpO2lmKG4pe3ZhciBwPWpvKG4sRS5jb29raWUsdm9pZCAwLEtwKCkpO3AubGVuZ3RoJiYoa1tuXT1wLnNvcnQoKVtwLmxlbmd0aC0xXSl9fXJldHVybiBrfTtNcChmdW5jdGlvbigpe2FwKGcsYixjLGQpfSxLcCgpKX19XG5mdW5jdGlvbiBqcShhLGIsYyxkKXtpZihBcnJheS5pc0FycmF5KGEpJiZpbyhEKSl7dmFyIGU9W107bWIoNykmJmUucHVzaChcImFnXCIpO2lmKGUubGVuZ3RoIT09MCl7dmFyIGY9UnAoZCksZz1mdW5jdGlvbigpe2Zvcih2YXIgaz17fSxtPTA7bTxlLmxlbmd0aDsrK20pe3ZhciBuPVNwKGVbbV0sZik7aWYoIW4pcmV0dXJue307dmFyIHA9Q3Aobik7aWYocC5sZW5ndGgpe3ZhciBxPXAuc29ydChmdW5jdGlvbihyLHQpe3JldHVybiBXcCh0KS1XcChyKX0pWzBdO2tbbl09QXAocSl9fXJldHVybiBrfTtNcChmdW5jdGlvbigpe2FwKGcsYSxiLGMpfSxbXCJhZF9zdG9yYWdlXCJdKX19fWZ1bmN0aW9uIFlwKGEpe3JldHVybiBhLmZpbHRlcihmdW5jdGlvbihiKXtyZXR1cm4gSHAudGVzdChiLmFhKX0pfVxuZnVuY3Rpb24ga3EoYSxiKXtpZihpbyhEKSl7Zm9yKHZhciBjPVJwKGIucHJlZml4KSxkPXt9LGU9MDtlPGEubGVuZ3RoO2UrKylKcFthW2VdXSYmKGRbYVtlXV09SnBbYVtlXV0pO01wKGZ1bmN0aW9uKCl7eihkLGZ1bmN0aW9uKGYsZyl7dmFyIGs9am8oYytnLEUuY29va2llLHZvaWQgMCxLcCgpKTtrLnNvcnQoZnVuY3Rpb24odCx1KXtyZXR1cm4gZnEodSktZnEodCl9KTtpZihrLmxlbmd0aCl7dmFyIG09a1swXSxuPWZxKG0pLHA9aHEobS5zcGxpdChcIi5cIikpLmxlbmd0aCE9PTA/bS5zcGxpdChcIi5cIikuc2xpY2UoMyk6W10scT17fSxyO3I9aHEobS5zcGxpdChcIi5cIikpLmxlbmd0aCE9PTA/bS5zcGxpdChcIi5cIilbMl06dm9pZCAwO3FbZl09W3JdO2NxKHEsITAsYixuLHApfX0pfSxLcCgpKX19XG5mdW5jdGlvbiBscShhKXt2YXIgYj1bXSxjPVtdO21iKDcpJiYoYi5wdXNoKFwiYWdcIiksYy5wdXNoKFwiZ2JyYWlkXCIpKTtiLmxlbmd0aCE9PTAmJk1wKGZ1bmN0aW9uKCl7Zm9yKHZhciBkPVJwKGEucHJlZml4KSxlPTA7ZTxiLmxlbmd0aDsrK2Upe3ZhciBmPVNwKGJbZV0sZCk7aWYoIWYpYnJlYWs7dmFyIGc9Q3AoZik7aWYoZy5sZW5ndGgpe3ZhciBrPWcuc29ydChmdW5jdGlvbihxLHIpe3JldHVybiBXcChyKS1XcChxKX0pWzBdLG09V3Aoayksbj1rLmIscD17fTtwW2NbZV1dPWsuaztjcShwLCEwLGEsbSxuKX19fSxbXCJhZF9zdG9yYWdlXCJdKX1mdW5jdGlvbiBtcShhLGIpe2Zvcih2YXIgYz0wO2M8Yi5sZW5ndGg7KytjKWlmKGFbYltjXV0pcmV0dXJuITA7cmV0dXJuITF9XG5mdW5jdGlvbiBucShhKXtmdW5jdGlvbiBiKGUsZixnKXtnJiYoZVtmXT1nKX1pZihBaygpKXt2YXIgYz1hcSgpO2lmKG1xKGMsYSkpe3ZhciBkPXt9O2IoZCxcImdjbGlkXCIsYy5nY2xpZCk7YihkLFwiZGNsaWRcIixjLmRjbGlkKTtiKGQsXCJnY2xzcmNcIixjLmdjbHNyYyk7YihkLFwid2JyYWlkXCIsYy53YnJhaWQpO21iKDcpJiZiKGQsXCJnYnJhaWRcIixjLmdicmFpZCk7YnAoZnVuY3Rpb24oKXtyZXR1cm4gZH0sMyk7YnAoZnVuY3Rpb24oKXt2YXIgZT17fTtyZXR1cm4gZS5fdXA9XCIxXCIsZX0sMSl9fX1cbmZ1bmN0aW9uIG9xKGEpe2lmKCFtYigxKSlyZXR1cm4gbnVsbDt2YXIgYj1VbyghMCkuZ2FkX3NvdXJjZTtpZihiIT1udWxsKXJldHVybiBELmxvY2F0aW9uLmhhc2g9XCJcIixiO2lmKG1iKDIpKXt2YXIgYz1haihELmxvY2F0aW9uLmhyZWYpO2I9VmkoYyxcInF1ZXJ5XCIsITEsdm9pZCAwLFwiZ2FkX3NvdXJjZVwiKTtpZihiIT1udWxsKXJldHVybiBiO3ZhciBkPWFxKCk7aWYobXEoZCxhKSlyZXR1cm5cIjBcIn1yZXR1cm4gbnVsbH1mdW5jdGlvbiBwcShhKXt2YXIgYj1vcShhKTtiIT1udWxsJiZicChmdW5jdGlvbigpe3ZhciBjPXt9O3JldHVybiBjLmdhZF9zb3VyY2U9YixjfSw0KX1cbmZ1bmN0aW9uIHFxKGEsYixjKXt2YXIgZD1bXTtpZihiLmxlbmd0aD09PTApcmV0dXJuIGQ7Zm9yKHZhciBlPXt9LGY9MDtmPGIubGVuZ3RoO2YrKyl7dmFyIGc9YltmXSxrPWcudHlwZT9nLnR5cGU6XCJnY2xcIjsoZy5sYWJlbHN8fFtdKS5pbmRleE9mKGMpPT09LTE/KGEucHVzaCgwKSxlW2tdfHxkLnB1c2goZykpOmEucHVzaCgxKTtlW2tdPSEwfXJldHVybiBkfWZ1bmN0aW9uIHJxKGEsYixjLGQpe3ZhciBlPVtdO2M9Y3x8e307aWYoIUxwKEtwKCkpKXJldHVybiBlO3ZhciBmPU9wKGEpLGc9cXEoZSxmLGIpO2lmKGcubGVuZ3RoJiYhZClmb3IodmFyIGs9bmEoZyksbT1rLm5leHQoKTshbS5kb25lO209ay5uZXh0KCkpe3ZhciBuPW0udmFsdWUscD1uLnRpbWVzdGFtcCxxPVtuLnZlcnNpb24sTWF0aC5yb3VuZChwLzFFMyksbi5hYV0uY29uY2F0KG4ubGFiZWxzfHxbXSxbYl0pLmpvaW4oXCIuXCIpLHI9RW8oYyxwLCEwKTtyLkFiPUtwKCk7dW8oYSxxLHIpfXJldHVybiBlfVxuZnVuY3Rpb24gc3EoYSxiKXt2YXIgYz1bXTtiPWJ8fHt9O3ZhciBkPVFwKGIpLGU9cXEoYyxkLGEpO2lmKGUubGVuZ3RoKWZvcih2YXIgZj1uYShlKSxnPWYubmV4dCgpOyFnLmRvbmU7Zz1mLm5leHQoKSl7dmFyIGs9Zy52YWx1ZSxtPVJwKGIucHJlZml4KSxuPVNwKGsudHlwZSxtKTtpZighbilicmVhazt2YXIgcD1rLHE9cC52ZXJzaW9uLHI9cC5hYSx0PXAubGFiZWxzLHU9cC50aW1lc3RhbXAsdj1NYXRoLnJvdW5kKHUvMUUzKTtpZihrLnR5cGU9PT1cImFnXCIpe3ZhciB3PXt9LHg9KHcuaz1yLHcuaT1cIlwiK3Ysdy5iPSh0fHxbXSkuY29uY2F0KFthXSksdyk7RXAobix4LGIsdSl9ZWxzZSBpZihrLnR5cGU9PT1cImdiXCIpe3ZhciB5PVtxLHYscl0uY29uY2F0KHR8fFtdLFthXSkuam9pbihcIi5cIiksQT1FbyhiLHUsITApO0EuQWI9S3AoKTt1byhuLHksQSl9fXJldHVybiBjfVxuZnVuY3Rpb24gdHEoYSxiKXt2YXIgYz1ScChiKSxkPVNwKGEsYyk7aWYoIWQpcmV0dXJuIDA7dmFyIGU7ZT1hPT09XCJhZ1wiP21iKDcpP1RwKGQpOltdOk9wKGQpO2Zvcih2YXIgZj0wLGc9MDtnPGUubGVuZ3RoO2crKylmPU1hdGgubWF4KGYsZVtnXS50aW1lc3RhbXApO3JldHVybiBmfWZ1bmN0aW9uIHVxKGEpe2Zvcih2YXIgYj0wLGM9bmEoT2JqZWN0LmtleXMoYSkpLGQ9Yy5uZXh0KCk7IWQuZG9uZTtkPWMubmV4dCgpKWZvcih2YXIgZT1hW2QudmFsdWVdLGY9MDtmPGUubGVuZ3RoO2YrKyliPU1hdGgubWF4KGIsTnVtYmVyKGVbZl0udGltZXN0YW1wKSk7cmV0dXJuIGJ9ZnVuY3Rpb24gdnEoYSxiKXt2YXIgYz1NYXRoLm1heCh0cShcImF3XCIsYSksdXEoTHAoS3AoKSk/c3AoKTp7fSkpLGQ9TWF0aC5tYXgodHEoXCJnYlwiLGEpLHVxKExwKEtwKCkpP3NwKFwiX2dhY19nYlwiLCEwKTp7fSkpO21iKDcpJiZiJiYoZD1NYXRoLm1heChkLHRxKFwiYWdcIixhKSkpO3JldHVybiBkPmN9O1xudmFyIHdxPWZ1bmN0aW9uKGEsYixjKXt2YXIgZD1paS5qb2luZWRfYXVpZD1paS5qb2luZWRfYXVpZHx8e30sZT0oYz9hfHxcIl9nY2xcIjpcIlwiKStcIi5cIitiO2lmKGRbZV0pcmV0dXJuITA7ZFtlXT0hMDtyZXR1cm4hMX0seXE9ZnVuY3Rpb24oKXt2YXIgYT1haihELmxvY2F0aW9uLmhyZWYpLGI9dm9pZCAwLGM9dm9pZCAwLGQ9VmkoYSxcInF1ZXJ5XCIsITEsdm9pZCAwLFwiZ2FkX3NvdXJjZVwiKSxlPXhxKGEpO2QmJmU/KGI9ZCxjPTEpOmQ/KGI9ZCxjPTIpOmUmJihiPWUsYz0zKTtyZXR1cm57RGM6YixFajpjfX0seHE9ZnVuY3Rpb24oYSl7dmFyIGI9YS5oYXNoLnJlcGxhY2UoXCIjXCIsXCJcIiksYz12b2lkIDA7aWYoUSg4Mikpe3ZhciBkPWIubWF0Y2goenEpO2M9ZD9kWzFdOnZvaWQgMH1jPT09dm9pZCAwJiYoYz1VaShiLFwiZ2FkX3NvdXJjZVwiLCExKSk7cmV0dXJuIGN9LEFxPWZ1bmN0aW9uKCl7dmFyIGE9YWooRC5sb2NhdGlvbi5ocmVmKSxiPVZpKGEsXCJxdWVyeVwiLCExLHZvaWQgMCxcImdhZF9zb3VyY2VcIik7XG5iPT09dm9pZCAwJiYoYj14cShhKSk7cmV0dXJuIGJ9LEJxPWZ1bmN0aW9uKCl7dmFyIGE9YWooRC5sb2NhdGlvbi5ocmVmKS5zZWFyY2gucmVwbGFjZShcIj9cIixcIlwiKTtyZXR1cm4gVWkoYSxcImdhZFwiLCExLCEwKT09PVwiMVwifSxDcT1mdW5jdGlvbigpe3ZhciBhPSRtKCExKT09PTE/RC50b3AubG9jYXRpb24uaHJlZjpELmxvY2F0aW9uLmhyZWY7cmV0dXJuIGE9YS5yZXBsYWNlKC9bXFw/I10uKiQvLFwiXCIpfSxEcT1mdW5jdGlvbihhKXt2YXIgYj1bXTt6KGEsZnVuY3Rpb24oYyxkKXtkPVlwKGQpO2Zvcih2YXIgZT1bXSxmPTA7ZjxkLmxlbmd0aDtmKyspZS5wdXNoKGRbZl0uYWEpO2UubGVuZ3RoJiZiLnB1c2goYytcIjpcIitlLmpvaW4oXCIsXCIpKX0pO3JldHVybiBiLmpvaW4oXCI7XCIpfSxGcT1mdW5jdGlvbihhLGIsYyl7aWYoYT09PVwiYXdcInx8YT09PVwiZGNcInx8YT09PVwiZ2JcIil7dmFyIGQ9Y2ooXCJnY2xcIithKTtpZihkKXJldHVybiBkLnNwbGl0KFwiLlwiKX12YXIgZT1ScChiKTtpZihlPT09XCJfZ2NsXCIpe3ZhciBmPVxuIVcoRXEoKSkmJmMsZztnPWFxKClbYV18fFtdO2lmKGcubGVuZ3RoPjApcmV0dXJuIGY/W1wiMFwiXTpnfXZhciBrPVNwKGEsZSk7cmV0dXJuIGs/TnAoayk6W119LEdxPWZ1bmN0aW9uKGEpe3ZhciBiPUVxKCk7Y2woZnVuY3Rpb24oKXthKCk7VyhiKXx8RWsoYSxiKX0sYil9LEVxPWZ1bmN0aW9uKCl7cmV0dXJuW1QuZy5QLFQuZy5PXX0sSHE9L14od3d3XFwuKT9nb29nbGUoXFwuY29tPyk/KFxcLlthLXpdezJ9dD8pPyQvLElxPS9ed3d3Lmdvb2dsZWFkc2VydmljZXMuY29tJC8senE9L15nYWRfc291cmNlW189XShcXGQrKSQvLEpxPWZ1bmN0aW9uKGEsYil7cmV0dXJuIEZxKFwiYXdcIixhLGIpfSxLcT1mdW5jdGlvbihhLGIpe3JldHVybiBGcShcImRjXCIsYSxiKX0sTXE9ZnVuY3Rpb24oYSxiLGMsZCxlKXt2YXIgZj1ScChhLnByZWZpeCk7aWYoIVEoNDApfHxMcShmLCEwKSl7dmFyIGc9YXEoKSxrPVtdLG09YyYmRW4oYyksbj1nLmdjbGlkLHA9Zy5kY2xpZCxxPWcuZ2Nsc3JjfHxcImF3XCIscj1CcSgpLFxudCx1O2lmKFEoNjkpKXt2YXIgdj15cSgpO3Q9di5EYzt1PXYuRWp9ZWxzZSB0PUFxKCk7IW58fHEhPT1cImF3LmRzXCImJnEhPT1cImF3XCImJnEhPT1cImRzXCImJnEhPT1cIjNwLmRzXCJ8fGsucHVzaCh7YWE6bixGZTpxfSk7cCYmay5wdXNoKHthYTpwLEZlOlwiZHNcIn0pO2subGVuZ3RoPT09MiYmTSgxNDcpO2subGVuZ3RoPT09MCYmZy53YnJhaWQmJmsucHVzaCh7YWE6Zy53YnJhaWQsRmU6XCJnYlwifSk7ay5sZW5ndGg9PT0wJiZxPT09XCJhdy5kc1wiJiZrLnB1c2goe2FhOlwiXCIsRmU6XCJhdy5kc1wifSk7R3EoZnVuY3Rpb24oKXt2YXIgdz1XKEVxKCkpO2lmKHcpe2hwKGEpO3ZhciB4PVtdLHk9dz9mcFtpcChhLnByZWZpeCldOnZvaWQgMDt5JiZ4LnB1c2goXCJhdWlkPVwiK3kpO2lmKFcoVC5nLk8pKXtlJiZ4LnB1c2goXCJ1c2VySWQ9XCIrZSk7dmFyIEE9ZW8oWm4uVGcpO2lmKEE9PT12b2lkIDApY28oWm4uVWcsITApO2Vsc2V7dmFyIEI9ZW8oWm4uc2UpO3gucHVzaChcImdhX3VpZD1cIitCK1wiLlwiK0EpfX12YXIgQz1cbkUucmVmZXJyZXI/VmkoYWooRS5yZWZlcnJlciksXCJob3N0XCIpOlwiXCIsSD13fHwhZD9rOltdO0gubGVuZ3RoPT09MCYmKEhxLnRlc3QoQyl8fElxLnRlc3QoQykpJiZILnB1c2goe2FhOlwiXCIsRmU6XCJcIn0pO2lmKEgubGVuZ3RoIT09MHx8cnx8dCE9PXZvaWQgMCl7QyYmeC5wdXNoKFwicmVmPVwiK2VuY29kZVVSSUNvbXBvbmVudChDKSk7dmFyIEk9Q3EoKTt4LnB1c2goXCJ1cmw9XCIrZW5jb2RlVVJJQ29tcG9uZW50KEkpKTt4LnB1c2goXCJ0ZnQ9XCIrQmIoKSk7dmFyIEY9T2MoKTtGIT09dm9pZCAwJiZ4LnB1c2goXCJ0ZmQ9XCIrTWF0aC5yb3VuZChGKSk7dmFyIE89JG0oITApO3gucHVzaChcImZybT1cIitPKTtyJiZ4LnB1c2goXCJnYWQ9MVwiKTt0IT09dm9pZCAwJiZ4LnB1c2goXCJnYWRfc291cmNlPVwiK2VuY29kZVVSSUNvbXBvbmVudCh0KSk7dSE9PXZvaWQgMCYmeC5wdXNoKFwiZ2FkX3NvdXJjZV9zcmM9XCIrZW5jb2RlVVJJQ29tcG9uZW50KHUudG9TdHJpbmcoKSkpO2lmKCFjKXt2YXIgTj17fTtjPVxuUmwoSGwobmV3IEdsKDApLChOW1QuZy5qYV09bG0ualtULmcuamFdLE4pKSl9ZWxzZSBpZighUSg4NCkpe3ZhciBTPXt9O2M9UmwoSGwobmV3IEdsKDApLChTW1QuZy5qYV09bSxTKSkpfXgucHVzaChcImd0bT1cIitZbih7c2E6Yn0pKTtGbigpJiZ4LnB1c2goXCJnY3M9XCIrR24oKSk7eC5wdXNoKFwiZ2NkPVwiK0tuKGMpKTtObigpJiZ4LnB1c2goXCJkbWFfY3BzPVwiK0xuKCkpO3gucHVzaChcImRtYT1cIitNbigpKTtFbihjKT94LnB1c2goXCJucGE9MFwiKTp4LnB1c2goXCJucGE9MVwiKTtWbigpJiZ4LnB1c2goXCJfbmc9MVwiKTtqbihybigpKSYmeC5wdXNoKFwidGNmZD1cIitVbigpKTt2YXIgVj15bigpO1YmJngucHVzaChcImdkcHI9XCIrVik7dmFyIGFhPXhuKCk7YWEmJngucHVzaChcImdkcHJfY29uc2VudD1cIithYSk7USgxOCkmJngucHVzaChcImFwdmU9XCIrKFEoMTkpPzE6MCkpO0JpLmomJngucHVzaChcInRhZ19leHA9XCIrQmkuaik7aWYoSC5sZW5ndGg+MClmb3IodmFyIFg9MDtYPEgubGVuZ3RoO1grKyl7dmFyIFI9XG5IW1hdLG1hPVIuYWEsbGE9Ui5GZTtpZighd3EoYS5wcmVmaXgsbGErXCIuXCIrbWEseSE9PXZvaWQgMCkpe3ZhciBlYT0naHR0cHM6Ly9hZHNlcnZpY2UuZ29vZ2xlLmNvbS9wYWdlYWQvcmVnY2xrPycreC5qb2luKFwiJlwiKTttYSE9PVwiXCI/ZWE9bGE9PT1cImdiXCI/ZWErXCImd2JyYWlkPVwiK21hOmVhK1wiJmdjbGlkPVwiK21hK1wiJmdjbHNyYz1cIitsYTpsYT09PVwiYXcuZHNcIiYmKGVhKz1cIiZnY2xzcmM9YXcuZHNcIik7SWMoZWEpfX1lbHNlIGlmKChyfHx0IT09dm9pZCAwKSYmIXdxKGEucHJlZml4LFwiZ2FkXCIseSE9PXZvaWQgMCkpe3ZhciB3YT0naHR0cHM6Ly9hZHNlcnZpY2UuZ29vZ2xlLmNvbS9wYWdlYWQvcmVnY2xrPycreC5qb2luKFwiJlwiKTtJYyh3YSl9fX19KX19LExxPWZ1bmN0aW9uKGEsYil7dmFyIGM9aWkuYWRzX3BhZ2V2aWV3PWlpLmFkc19wYWdldmlld3x8e307aWYoY1thXSlyZXR1cm4hMTsoYj09PXZvaWQgMD8wOmIpfHwoY1thXT0hMCk7cmV0dXJuITB9O2Z1bmN0aW9uIE5xKCl7aWkuZGVkdXBlX2djbGlkfHwoaWkuZGVkdXBlX2djbGlkPUJvKCkpO3JldHVybiBpaS5kZWR1cGVfZ2NsaWR9O3ZhciBPcT0vXih3d3dcXC4pP2dvb2dsZShcXC5jb20/KT8oXFwuW2Etel17Mn10Pyk/JC8sUHE9L153d3cuZ29vZ2xlYWRzZXJ2aWNlcy5jb20kLztmdW5jdGlvbiBRcShhKXthfHwoYT1ScSgpKTtyZXR1cm4gYS5mbj8hMTphLlJsfHxhLlNsfHxhLlZsfHxhLlRsfHxhLm9ofHxhLkRjfHxhLkZsfHxhLlVsfHxhLkpsPyEwOiExfVxuZnVuY3Rpb24gUnEoKXt2YXIgYT17fSxiPVVvKCEwKTthLmZuPSEhYi5fdXA7dmFyIGM9YXEoKTthLlJsPWMuYXchPT12b2lkIDA7YS5TbD1jLmRjIT09dm9pZCAwO2EuVmw9Yy53YnJhaWQhPT12b2lkIDA7YS5UbD1jLmdicmFpZCE9PXZvaWQgMDthLlVsPVEoNzkpP2MuZ2Nsc3JjPT09XCJhdy5kc1wiOiExO3ZhciBkPWFqKEQubG9jYXRpb24uaHJlZiksZT1WaShkLFwicXVlcnlcIiwhMSx2b2lkIDAsXCJnYWRcIik7YS5vaD1lIT09dm9pZCAwO2lmKCFhLm9oKXt2YXIgZj1kLmhhc2gucmVwbGFjZShcIiNcIixcIlwiKSxnPVVpKGYsXCJnYWRcIiwhMSk7YS5vaD1nIT09dm9pZCAwfWlmKFEoODIpKWEuRGM9QXEoKTtlbHNlIGlmKGEuRGM9VmkoZCxcInF1ZXJ5XCIsITEsdm9pZCAwLFwiZ2FkX3NvdXJjZVwiKSxhLkRjPT09dm9pZCAwKXt2YXIgaz1kLmhhc2gucmVwbGFjZShcIiNcIixcIlwiKSxtPVVpKGssXCJnYWRfc291cmNlXCIsITEpO2EuRGM9bX12YXIgbj1FLnJlZmVycmVyP1ZpKGFqKEUucmVmZXJyZXIpLFwiaG9zdFwiKTpcblwiXCI7YS5KbD1PcS50ZXN0KG4pO2EuRmw9UHEudGVzdChuKTtyZXR1cm4gYX07dmFyIFNxPVJlZ0V4cChcIl5VQS1cXFxcZCstXFxcXGQrJTNBW1xcXFx3LV0rKD86JTJDW1xcXFx3LV0rKSooPzolM0JVQS1cXFxcZCstXFxcXGQrJTNBW1xcXFx3LV0rKD86JTJDW1xcXFx3LV0rKSopKiRcIiksVHE9L15+P1tcXHctXSsoPzpcXC5+P1tcXHctXSspKiQvLFVxPS9eXFxkK1xcLmZsc1xcLmRvdWJsZWNsaWNrXFwubmV0JC8sVnE9LztnYWM9KFteOz9dKykvLFdxPS87Z2FjZ2I9KFteOz9dKykvO1xuZnVuY3Rpb24gWHEoYSxiKXtpZihVcS50ZXN0KEUubG9jYXRpb24uaG9zdCkpe3ZhciBjPUUubG9jYXRpb24uaHJlZi5tYXRjaChiKTtyZXR1cm4gYyYmYy5sZW5ndGg9PT0yJiZjWzFdLm1hdGNoKFNxKT9kZWNvZGVVUklDb21wb25lbnQoY1sxXSk6XCJcIn1mb3IodmFyIGQ9W10sZT1uYShPYmplY3Qua2V5cyhhKSksZj1lLm5leHQoKTshZi5kb25lO2Y9ZS5uZXh0KCkpe2Zvcih2YXIgZz1mLnZhbHVlLGs9W10sbT1hW2ddLG49MDtuPG0ubGVuZ3RoO24rKylrLnB1c2gobVtuXS5hYSk7ZC5wdXNoKGcrXCI6XCIray5qb2luKFwiLFwiKSl9cmV0dXJuIGQubGVuZ3RoPjA/ZC5qb2luKFwiO1wiKTpcIlwifVxuZnVuY3Rpb24gWXEoYSxiLGMpe2Zvcih2YXIgZD1McChLcCgpKT9zcChcIl9nYWNfZ2JcIiwhMCk6e30sZT1bXSxmPSExLGc9bmEoT2JqZWN0LmtleXMoZCkpLGs9Zy5uZXh0KCk7IWsuZG9uZTtrPWcubmV4dCgpKXt2YXIgbT1rLnZhbHVlLG49cnEoXCJfZ2FjX2diX1wiK20sYSxiLGMpO2Y9Znx8bi5sZW5ndGghPT0wJiZuLnNvbWUoZnVuY3Rpb24ocCl7cmV0dXJuIHA9PT0xfSk7ZS5wdXNoKG0rXCI6XCIrbi5qb2luKFwiLFwiKSl9cmV0dXJue0VsOmY/ZS5qb2luKFwiO1wiKTpcIlwiLERsOlhxKGQsV3EpfX1mdW5jdGlvbiBacShhKXt2YXIgYj1FLmxvY2F0aW9uLmhyZWYubWF0Y2gobmV3IFJlZ0V4cChcIjtcIithK1wiPShbXjs/XSspXCIpKTtyZXR1cm4gYiYmYi5sZW5ndGg9PT0yJiZiWzFdLm1hdGNoKFRxKT9iWzFdOnZvaWQgMH1cbmZ1bmN0aW9uICRxKGEpe3ZhciBiPW1iKDEzKSxjPXt9LGQsZSxmO1VxLnRlc3QoRS5sb2NhdGlvbi5ob3N0KSYmKGQ9WnEoXCJnY2xnc1wiKSxlPVpxKFwiZ2Nsc3RcIiksYiYmKGY9WnEoXCJnY2xscFwiKSkpO2lmKGQmJmUmJighYnx8ZikpYy5Gaj1kLGMuSGo9ZSxjLkdqPWY7ZWxzZXt2YXIgZz1CYigpLGs9VHAoKGF8fFwiX2djbFwiKStcIl9nc1wiKSxtPWsubWFwKGZ1bmN0aW9uKHEpe3JldHVybiBxLmFhfSksbj1rLm1hcChmdW5jdGlvbihxKXtyZXR1cm4gZy1xLnRpbWVzdGFtcH0pLHA9W107YiYmKHA9ay5tYXAoZnVuY3Rpb24ocSl7cmV0dXJuIHEuTWp9KSk7bS5sZW5ndGg+MCYmbi5sZW5ndGg+MCYmKCFifHxwLmxlbmd0aD4wKSYmKGMuRmo9bS5qb2luKFwiLlwiKSxjLkhqPW4uam9pbihcIi5cIiksYiYmcC5sZW5ndGg+MCYmKGMuR2o9cC5qb2luKFwiLlwiKSkpfXJldHVybiBjfVxuZnVuY3Rpb24gYXIoYSxiLGMpe2lmKFVxLnRlc3QoRS5sb2NhdGlvbi5ob3N0KSl7dmFyIGQ9WnEoYyk7aWYoZClyZXR1cm5be2FhOmR9XX1lbHNle2lmKGI9PT1cImdjbGlkXCIpcmV0dXJuIE9wKChhfHxcIl9nY2xcIikrXCJfYXdcIik7aWYoYj09PVwid2JyYWlkXCIpcmV0dXJuIE9wKChhfHxcIl9nY2xcIikrXCJfZ2JcIik7aWYoYj09PVwiYnJhaWRzXCIpcmV0dXJuIFFwKHtwcmVmaXg6YX0pfXJldHVybltdfWZ1bmN0aW9uIGJyKGEpe3JldHVybiBhcihhLFwiZ2NsaWRcIixcImdjbGF3XCIpLm1hcChmdW5jdGlvbihiKXtyZXR1cm4gYi5hYX0pLmpvaW4oXCIuXCIpfWZ1bmN0aW9uIGNyKGEpe3JldHVybiBhcihhLFwid2JyYWlkXCIsXCJnY2xnYlwiKS5tYXAoZnVuY3Rpb24oYil7cmV0dXJuIGIuYWF9KS5qb2luKFwiLlwiKX1mdW5jdGlvbiBkcihhKXtyZXR1cm4gYXIoYSxcImJyYWlkc1wiLFwiZ2NsZ2JcIikubWFwKGZ1bmN0aW9uKGIpe3JldHVybiBiLmFhfSkuam9pbihcIi5cIil9XG5mdW5jdGlvbiBlcihhLGIpe3JldHVybiBVcS50ZXN0KEUubG9jYXRpb24uaG9zdCk/IShacShcImdjbGF3XCIpfHxacShcImdhY1wiKSk6dnEoYSxiKX1mdW5jdGlvbiBmcihhLGIsYyl7dmFyIGQ7ZD1jP3NxKGEsYik6cnEoKGImJmIucHJlZml4fHxcIl9nY2xcIikrXCJfZ2JcIixhLGIpO3JldHVybiBkLmxlbmd0aD09PTB8fGQuZXZlcnkoZnVuY3Rpb24oZSl7cmV0dXJuIGU9PT0wfSk/XCJcIjpkLmpvaW4oXCIuXCIpfTtmdW5jdGlvbiBncigpe3ZhciBhPUQuX191c3BhcGk7aWYob2IoYSkpe3ZhciBiPVwiXCI7dHJ5e2EoXCJnZXRVU1BEYXRhXCIsMSxmdW5jdGlvbihjLGQpe2lmKGQmJmMpe3ZhciBlPWMudXNwU3RyaW5nO2UmJlJlZ0V4cChcIl5bXFxcXGRhLXpBLVotXXsxLDIwfSRcIikudGVzdChlKSYmKGI9ZSl9fSl9Y2F0Y2goYyl7fXJldHVybiBifX07XG52YXIga3I9ZnVuY3Rpb24oYSl7aWYoYS5ldmVudE5hbWU9PT1ULmcuYmEmJmEubWV0YWRhdGEuaGl0X3R5cGU9PT1cInBhZ2Vfdmlld1wiKWlmKFEoMTkpKXthLm1ldGFkYXRhLnJlZGFjdF9jbGlja19pZHM9VShhLm0sVC5nLmZhKSE9bnVsbCYmVShhLm0sVC5nLmZhKSE9PSExJiYhVyhbVC5nLlAsVC5nLk9dKTt2YXIgYj1ocihhKSxjPVUoYS5tLFQuZy5vYSkhPT0hMTtjfHwoYS5vW1QuZy5BaV09XCIxXCIpO3ZhciBkPVJwKGIucHJlZml4KSxlPWEubWV0YWRhdGEuaXNfc2VydmVyX3NpZGVfZGVzdGluYXRpb247aWYoIWEubWV0YWRhdGEuY29uc2VudF91cGRhdGVkJiYhYS5tZXRhZGF0YS51c2VyX2lkX3VwZGF0ZWQpe3ZhciBmPVUoYS5tLFQuZy5XYSksZz1VKGEubSxULmcucWEpfHx7fTtpcih7b2Q6Yyx3ZDpnLEJkOmYsYmM6Yn0pO2lmKCFlJiYhTHEoZCkpe2EuaXNBYm9ydGVkPSEwO3JldHVybn19aWYoZSlhLmlzQWJvcnRlZD0hMDtlbHNle2Eub1tULmcuc2NdPVQuZy5TYjtpZihhLm1ldGFkYXRhLmNvbnNlbnRfdXBkYXRlZClhLm9bVC5nLnNjXT1cblQuZy5zayxhLm9bVC5nLlFiXT1cIjFcIjtlbHNlIGlmKGEubWV0YWRhdGEudXNlcl9pZF91cGRhdGVkKWEub1tULmcuc2NdPVQuZy54aztlbHNle3ZhciBrPWFxKCk7YS5vW1QuZy5FZF09ay5nY2xpZDthLm9bVC5nLk1kXT1rLmRjbGlkO2Eub1tULmcudmldPWsuZ2Nsc3JjO2Eub1tULmcuRWRdfHxhLm9bVC5nLk1kXXx8KGEub1tULmcuYWZdPWsud2JyYWlkLGEub1tULmcuZWddPWsuZ2JyYWlkKTthLm9bVC5nLkJhXT1FLnJlZmVycmVyP1ZpKGFqKEUucmVmZXJyZXIpLFwiaG9zdFwiKTpcIlwiO2Eub1tULmcucmFdPUNxKCk7USgyMikmJihhLm9bVC5nLlphXT1qcigpKTt2YXIgbTtpZihRKDY5KSl7dmFyIG49eXEoKTttPW4uRGM7YS5vW1QuZy51aV09bi5Fan1lbHNlIG09QXEoKTthLm9bVC5nLnNpXT1tO2Eub1tULmcuSGJdPSRtKCEwKTt2YXIgcD1ScSgpO1FxKHApJiYoYS5vW1QuZy5kZF09XCIxXCIpO2Eub1tULmcueGldPU5xKCk7VW8oITEpLl91cD09PVwiMVwiJiYoYS5vW1QuZy5OaV09XCIxXCIpfUdrPVxuITA7dmFyIHE9VyhbVC5nLlAsVC5nLk9dKTtjJiZxJiYoaHAoYiksYS5vW1QuZy5FYl09ZnBbaXAoYi5wcmVmaXgpXSk7YS5vW1QuZy5rYl09dm9pZCAwO2Eub1tULmcuVWFdPXZvaWQgMDt2YXIgcj1RKDcxKTtpZighYS5vW1QuZy5FZF0mJiFhLm9bVC5nLk1kXSYmZXIoZCxyKSl7dmFyIHQ9cj9QcChiKTpOcChkK1wiX2diXCIpO3QubGVuZ3RoPjAmJihhLm9bVC5nLmtiXT10LmpvaW4oXCIuXCIpKX1lbHNlIGlmKCFhLm9bVC5nLmFmXSYmcSl7dmFyIHU9TnAoZCtcIl9hd1wiKTt1Lmxlbmd0aD4wJiYoYS5vW1QuZy5VYV09dS5qb2luKFwiLlwiKSl9YS5tLmlzR3RtRXZlbnQmJihhLm0ualtULmcuamFdPWxtLmpbVC5nLmphXSk7RW4oYS5tKT9hLm9bVC5nLk1iXT0hMTphLm9bVC5nLk1iXT0hMDthLm1ldGFkYXRhLmFkZF90YWdfdGltaW5nPSEwO3ZhciB2PWdyKCk7diE9PXZvaWQgMCYmKGEub1tULmcuZWVdPXZ8fFwiZXJyb3JcIik7dmFyIHc9eW4oKTt3JiYoYS5vW1QuZy53Y109dyk7dmFyIHg9eG4oKTtcbngmJihhLm9bVC5nLkFjXT14KTthLm1ldGFkYXRhLnNwZWN1bGF0aXZlPSExfX1lbHNlIGEuaXNBYm9ydGVkPSEwfSxocj1mdW5jdGlvbihhKXt2YXIgYj17cHJlZml4OlUoYS5tLFQuZy5YYSl8fFUoYS5tLFQuZy5OYSksZG9tYWluOlUoYS5tLFQuZy5WYSksemI6VShhLm0sVC5nLk1hKSxmbGFnczpVKGEubSxULmcuWWEpfTthLm0uaXNHdG1FdmVudCYmKGIucGF0aD1VKGEubSxULmcuRmIpKTtyZXR1cm4gYn0sbHI9ZnVuY3Rpb24oYSxiKXt2YXIgYyxkLGUsZixnLGssbSxuO2M9YS5vZDtkPWEud2Q7ZT1hLkJkO2Y9YS5zYTtnPWEubTtrPWEueGQ7bT1hLkhuO249YS5paztpcih7b2Q6Yyx3ZDpkLEJkOmUsYmM6Yn0pO2MmJm0hPT0hMCYmKG4hPW51bGw/bj1TdHJpbmcobik6bj12b2lkIDAsTXEoYixmLGcsayxuKSl9LGlyPWZ1bmN0aW9uKGEpe3ZhciBiLGMsZCxlO2I9YS5vZDtjPWEud2Q7ZD1hLkJkO2U9YS5iYztiJiYoZHAoY1tULmcuemNdLCEhY1tULmcuV10pJiYoZXEobXIsZSksXG5ncShlKSxwcChlKSksYnEoZSksa3EobXIsZSksbHEoZSkpO2NbVC5nLlddJiYoaXEobXIsY1tULmcuV10sY1tULmcuSmJdLCEhY1tULmcudGJdLGUucHJlZml4KSxqcShjW1QuZy5XXSxjW1QuZy5KYl0sISFjW1QuZy50Yl0sZS5wcmVmaXgpLHFwKGlwKGUucHJlZml4KSxjW1QuZy5XXSxjW1QuZy5KYl0sISFjW1QuZy50Yl0sZSkscXAoXCJGUEFVXCIsY1tULmcuV10sY1tULmcuSmJdLCEhY1tULmcudGJdLGUpKTtkJiZucShucik7cHEobnIpfSxvcj1mdW5jdGlvbihhLGIsYyxkKXt2YXIgZSxmLGc7ZT1hLmprO2Y9YS5jYWxsYmFjaztnPWEuTmo7aWYodHlwZW9mIGY9PT1cImZ1bmN0aW9uXCIpaWYoZT09PVQuZy5VYSYmZz09PXZvaWQgMCl7dmFyIGs9ZChiLnByZWZpeCxjKTtrLmxlbmd0aD09PTA/Zih2b2lkIDApOmsubGVuZ3RoPT09MT9mKGtbMF0pOmYoayl9ZWxzZSBlPT09VC5nLkViPyhNKDY1KSxocChiLCExKSxmKGZwW2lwKGIucHJlZml4KV0pKTpmKGcpfSxtcj1bXCJhd1wiLFwiZGNcIixcblwiZ2JcIl0sbnI9W1wiYXdcIixcImRjXCIsXCJnYlwiLFwiYWdcIl07ZnVuY3Rpb24gcHIoYSl7dmFyIGI9VShhLm0sVC5nLkliKSxjPVUoYS5tLFQuZy5WYik7YiYmIWM/KGEuZXZlbnROYW1lIT09VC5nLmJhJiZhLmV2ZW50TmFtZSE9PVQuZy5NYyYmTSgxMzEpLGEuaXNBYm9ydGVkPSEwKTohYiYmYyYmKE0oMTMyKSxhLmlzQWJvcnRlZD0hMCl9ZnVuY3Rpb24gcXIoYSl7dmFyIGI9VyhULmcuUCk/aWkucHNjZGw6XCJkZW5pZWRcIjtiIT1udWxsJiYoYS5vW1QuZy5lZl09Yil9ZnVuY3Rpb24gcnIoYSl7dmFyIGI9JG0oITApO2Eub1tULmcuSGJdPWJ9ZnVuY3Rpb24gc3IoYSl7Vm4oKSYmKGEub1tULmcueGNdPTEpfVxuZnVuY3Rpb24ganIoKXt2YXIgYT1FLnRpdGxlO2lmKGE9PT12b2lkIDB8fGE9PT1cIlwiKXJldHVyblwiXCI7dmFyIGI9ZnVuY3Rpb24oZCl7dHJ5e3JldHVybiBkZWNvZGVVUklDb21wb25lbnQoZCksITB9Y2F0Y2goZSl7cmV0dXJuITF9fTthPWVuY29kZVVSSUNvbXBvbmVudChhKTtmb3IodmFyIGM9MjU2O2M+MCYmIWIoYS5zdWJzdHJpbmcoMCxjKSk7KWMtLTtyZXR1cm4gZGVjb2RlVVJJQ29tcG9uZW50KGEuc3Vic3RyaW5nKDAsYykpfWZ1bmN0aW9uIHRyKGEpe2lmKFEoMTMpKXt2YXIgYj1VKGEubSxULmcuTWEpO2Eub1tULmcuaWVdfHwoYS5vW1QuZy5pZV09e30pO2Eub1tULmcuaWVdLmNlPWJ9fTtmdW5jdGlvbiBBcihhLGIsYyxkKXt2YXIgZT15YygpLGY7aWYoZT09PTEpYTp7dmFyIGc9dWk7Zz1nLnRvTG93ZXJDYXNlKCk7Zm9yKHZhciBrPVwiaHR0cHM6Ly9cIitnLG09XCJodHRwOi8vXCIrZyxuPTEscD1FLmdldEVsZW1lbnRzQnlUYWdOYW1lKFwic2NyaXB0XCIpLHE9MDtxPHAubGVuZ3RoJiZxPDEwMDtxKyspe3ZhciByPXBbcV0uc3JjO2lmKHIpe3I9ci50b0xvd2VyQ2FzZSgpO2lmKHIuaW5kZXhPZihtKT09PTApe2Y9MzticmVhayBhfW49PT0xJiZyLmluZGV4T2Yoayk9PT0wJiYobj0yKX19Zj1ufWVsc2UgZj1lO3JldHVybihmPT09Mnx8ZHx8XCJodHRwOlwiIT1ELmxvY2F0aW9uLnByb3RvY29sP2E6YikrY307ZnVuY3Rpb24gTnIoYSl7cmV0dXJue2dldERlc3RpbmF0aW9uSWQ6ZnVuY3Rpb24oKXtyZXR1cm4gYS50YXJnZXQuZGVzdGluYXRpb25JZH0sZ2V0RXZlbnROYW1lOmZ1bmN0aW9uKCl7cmV0dXJuIGEuZXZlbnROYW1lfSxzZXRFdmVudE5hbWU6ZnVuY3Rpb24oYil7YS5ldmVudE5hbWU9Yn0sZ2V0SGl0RGF0YTpmdW5jdGlvbihiKXtyZXR1cm4gYS5vW2JdfSxzZXRIaXREYXRhOmZ1bmN0aW9uKGIsYyl7YS5vW2JdPWN9LHNldEhpdERhdGFJZk5vdERlZmluZWQ6ZnVuY3Rpb24oYixjKXthLm9bYl09PT12b2lkIDAmJihhLm9bYl09Yyl9LGNvcHlUb0hpdERhdGE6ZnVuY3Rpb24oYixjKXthLmNvcHlUb0hpdERhdGEoYixjKX0sZ2V0TWV0YWRhdGE6ZnVuY3Rpb24oYil7cmV0dXJuIGEubWV0YWRhdGFbYl19LHNldE1ldGFkYXRhOmZ1bmN0aW9uKGIsYyl7YS5tZXRhZGF0YVtiXT1jfSxpc0Fib3J0ZWQ6ZnVuY3Rpb24oKXtyZXR1cm4gYS5pc0Fib3J0ZWR9LGFib3J0OmZ1bmN0aW9uKCl7YS5pc0Fib3J0ZWQ9XG4hMH0sZ2V0RnJvbUV2ZW50Q29udGV4dDpmdW5jdGlvbihiKXtyZXR1cm4gVShhLm0sYil9LElqOmZ1bmN0aW9uKCl7cmV0dXJuIGF9LGdldEhpdEtleXM6ZnVuY3Rpb24oKXtyZXR1cm4gT2JqZWN0LmtleXMoYS5vKX19fTt2YXIgUHI9ZnVuY3Rpb24oYSl7dmFyIGI9T3JbYS50YXJnZXQuZGVzdGluYXRpb25JZF07aWYoIWEuaXNBYm9ydGVkJiZiKWZvcih2YXIgYz1OcihhKSxkPTA7ZDxiLmxlbmd0aDsrK2Qpe3RyeXtiW2RdKGMpfWNhdGNoKGUpe2EuaXNBYm9ydGVkPSEwfWlmKGEuaXNBYm9ydGVkKWJyZWFrfX0sUXI9ZnVuY3Rpb24oYSxiKXt2YXIgYz1PclthXTtjfHwoYz1PclthXT1bXSk7Yy5wdXNoKGIpfSxPcj17fTt2YXIgVXIsVnI9ITE7ZnVuY3Rpb24gV3IoKXtWcj0hMDtVcj1Vcnx8e319ZnVuY3Rpb24gWHIoYSl7VnJ8fFdyKCk7cmV0dXJuIFVyW2FdfWZ1bmN0aW9uIFlyKCl7dmFyIGE9RC5zY3JlZW47cmV0dXJue3dpZHRoOmE/YS53aWR0aDowLGhlaWdodDphP2EuaGVpZ2h0OjB9fVxuZnVuY3Rpb24gWnIoYSl7aWYoRS5oaWRkZW4pcmV0dXJuITA7dmFyIGI9YS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtpZihiLnRvcD09PWIuYm90dG9tfHxiLmxlZnQ9PT1iLnJpZ2h0fHwhRC5nZXRDb21wdXRlZFN0eWxlKXJldHVybiEwO3ZhciBjPUQuZ2V0Q29tcHV0ZWRTdHlsZShhLG51bGwpO2lmKGMudmlzaWJpbGl0eT09PVwiaGlkZGVuXCIpcmV0dXJuITA7Zm9yKHZhciBkPWEsZT1jO2Q7KXtpZihlLmRpc3BsYXk9PT1cIm5vbmVcIilyZXR1cm4hMDt2YXIgZj1lLm9wYWNpdHksZz1lLmZpbHRlcjtpZihnKXt2YXIgaz1nLmluZGV4T2YoXCJvcGFjaXR5KFwiKTtrPj0wJiYoZz1nLnN1YnN0cmluZyhrKzgsZy5pbmRleE9mKFwiKVwiLGspKSxnLmNoYXJBdChnLmxlbmd0aC0xKT09PVwiJVwiJiYoZz1nLnN1YnN0cmluZygwLGcubGVuZ3RoLTEpKSxmPVN0cmluZyhNYXRoLm1pbihOdW1iZXIoZyksTnVtYmVyKGYpKSkpfWlmKGYhPT12b2lkIDAmJk51bWJlcihmKTw9MClyZXR1cm4hMDsoZD1kLnBhcmVudEVsZW1lbnQpJiZcbihlPUQuZ2V0Q29tcHV0ZWRTdHlsZShkLG51bGwpKX1yZXR1cm4hMX1cbnZhciBpcz1mdW5jdGlvbihhKXtyZXR1cm4gYS50YWdOYW1lK1wiOlwiK2EuaXNWaXNpYmxlK1wiOlwiK2EuWC5sZW5ndGgrXCI6XCIraHMudGVzdChhLlgpfSx3cz1mdW5jdGlvbihhKXthPWF8fHt1ZDohMCx2ZDohMCxTZjp2b2lkIDB9O2Eud2I9YS53Ynx8e2VtYWlsOiEwLHBob25lOiExLGFkZHJlc3M6ITF9O3ZhciBiPWpzKGEpLGM9a3NbYl07aWYoYyYmQmIoKS1jLnRpbWVzdGFtcDwyMDApcmV0dXJuIGMucmVzdWx0O3ZhciBkPWxzKCksZT1kLnN0YXR1cyxmPVtdLGcsayxtPVtdO2lmKCFRKDI2KSl7aWYoYS53YiYmYS53Yi5lbWFpbCl7dmFyIG49bXMoZC5lbGVtZW50cyk7Zj1ucyhuLGEmJmEuQWUpO2c9b3MoZik7bi5sZW5ndGg+MTAmJihlPVwiM1wiKX0hYS5TZiYmZyYmKGY9W2ddKTtmb3IodmFyIHA9MDtwPGYubGVuZ3RoO3ArKyltLnB1c2gocHMoZltwXSwhIWEudWQsISFhLnZkKSk7bT1tLnNsaWNlKDAsMTApfWVsc2UgaWYoYS53Yil7fWcmJihrPXBzKGcsISFhLnVkLCEhYS52ZCkpO3ZhciBDPXtlbGVtZW50czptLFxuRmg6ayxzdGF0dXM6ZX07a3NbYl09e3RpbWVzdGFtcDpCYigpLHJlc3VsdDpDfTtyZXR1cm4gQ30sdnM9ZnVuY3Rpb24oYSxiLGMpe3ZhciBkPWEuZWxlbWVudCxlPXtYOmEuWCx0eXBlOmEubmEsdGFnTmFtZTpkLnRhZ05hbWV9O2ImJihlLnF1ZXJ5U2VsZWN0b3I9eHMoZCkpO2MmJihlLmlzVmlzaWJsZT0hWnIoZCkpO3JldHVybiBlfSxwcz1mdW5jdGlvbihhLGIsYyl7cmV0dXJuIHZzKHtlbGVtZW50OmEuZWxlbWVudCxYOmEuWCxuYTp1cy5pY30sYixjKX0sanM9ZnVuY3Rpb24oYSl7dmFyIGI9IShhPT1udWxsfHwhYS51ZCkrXCIuXCIrIShhPT1udWxsfHwhYS52ZCk7YSYmYS5BZSYmYS5BZS5sZW5ndGgmJihiKz1cIi5cIithLkFlLmpvaW4oXCIuXCIpKTthJiZhLndiJiYoYis9XCIuXCIrYS53Yi5lbWFpbCtcIi5cIithLndiLnBob25lK1wiLlwiK2Eud2IuYWRkcmVzcyk7cmV0dXJuIGJ9LG9zPWZ1bmN0aW9uKGEpe2lmKGEubGVuZ3RoIT09MCl7dmFyIGI7Yj15cyhhLGZ1bmN0aW9uKGMpe3JldHVybiF6cy50ZXN0KGMuWCl9KTtcbmI9eXMoYixmdW5jdGlvbihjKXtyZXR1cm4gYy5lbGVtZW50LnRhZ05hbWUudG9VcHBlckNhc2UoKT09PVwiSU5QVVRcIn0pO2I9eXMoYixmdW5jdGlvbihjKXtyZXR1cm4hWnIoYy5lbGVtZW50KX0pO3JldHVybiBiWzBdfX0sbnM9ZnVuY3Rpb24oYSxiKXtpZighYnx8Yi5sZW5ndGg9PT0wKXJldHVybiBhO2Zvcih2YXIgYz1bXSxkPTA7ZDxhLmxlbmd0aDtkKyspe2Zvcih2YXIgZT0hMCxmPTA7ZjxiLmxlbmd0aDtmKyspe3ZhciBnPWJbZl07aWYoZyYmbWgoYVtkXS5lbGVtZW50LGcpKXtlPSExO2JyZWFrfX1lJiZjLnB1c2goYVtkXSl9cmV0dXJuIGN9LHlzPWZ1bmN0aW9uKGEsYil7aWYoYS5sZW5ndGg8PTEpcmV0dXJuIGE7dmFyIGM9YS5maWx0ZXIoYik7cmV0dXJuIGMubGVuZ3RoPT09MD9hOmN9LHhzPWZ1bmN0aW9uKGEpe3ZhciBiO2lmKGE9PT1FLmJvZHkpYj1cImJvZHlcIjtlbHNle3ZhciBjO2lmKGEuaWQpYz1cIiNcIithLmlkO2Vsc2V7dmFyIGQ7aWYoYS5wYXJlbnRFbGVtZW50KXt2YXIgZTtcbmE6e3ZhciBmPWEucGFyZW50RWxlbWVudDtpZihmKXtmb3IodmFyIGc9MDtnPGYuY2hpbGRFbGVtZW50Q291bnQ7ZysrKWlmKGYuY2hpbGRyZW5bZ109PT1hKXtlPWcrMTticmVhayBhfWU9LTF9ZWxzZSBlPTF9ZD14cyhhLnBhcmVudEVsZW1lbnQpK1wiPjpudGgtY2hpbGQoXCIrZS50b1N0cmluZygpK1wiKVwifWVsc2UgZD1cIlwiO2M9ZH1iPWN9cmV0dXJuIGJ9LG1zPWZ1bmN0aW9uKGEpe2Zvcih2YXIgYj1bXSxjPTA7YzxhLmxlbmd0aDtjKyspe3ZhciBkPWFbY10sZT1kLnRleHRDb250ZW50O2QudGFnTmFtZS50b1VwcGVyQ2FzZSgpPT09XCJJTlBVVFwiJiZkLnZhbHVlJiYoZT1kLnZhbHVlKTtpZihlKXt2YXIgZj1lLm1hdGNoKEFzKTtpZihmKXt2YXIgZz1mWzBdLGs7aWYoRC5sb2NhdGlvbil7dmFyIG09WGkoRC5sb2NhdGlvbixcImhvc3RcIiwhMCk7az1nLnRvTG93ZXJDYXNlKCkuaW5kZXhPZihtKT49MH1lbHNlIGs9ITE7a3x8Yi5wdXNoKHtlbGVtZW50OmQsWDpnfSl9fX1yZXR1cm4gYn0sXG5scz1mdW5jdGlvbigpe3ZhciBhPVtdLGI9RS5ib2R5O2lmKCFiKXJldHVybntlbGVtZW50czphLHN0YXR1czpcIjRcIn07Zm9yKHZhciBjPWIucXVlcnlTZWxlY3RvckFsbChcIipcIiksZD0wO2Q8Yy5sZW5ndGgmJmQ8MUU0O2QrKyl7dmFyIGU9Y1tkXTtpZighKEJzLmluZGV4T2YoZS50YWdOYW1lLnRvVXBwZXJDYXNlKCkpPj0wKSYmZS5jaGlsZHJlbiBpbnN0YW5jZW9mIEhUTUxDb2xsZWN0aW9uKXtmb3IodmFyIGY9ITEsZz0wO2c8ZS5jaGlsZEVsZW1lbnRDb3VudCYmZzwxRTQ7ZysrKWlmKCEoQ3MuaW5kZXhPZihlLmNoaWxkcmVuW2ddLnRhZ05hbWUudG9VcHBlckNhc2UoKSk+PTApKXtmPSEwO2JyZWFrfSghZnx8USgyNikmJkRzLmluZGV4T2YoZS50YWdOYW1lKSE9PS0xKSYmYS5wdXNoKGUpfX1yZXR1cm57ZWxlbWVudHM6YSxzdGF0dXM6Yy5sZW5ndGg+MUU0P1wiMlwiOlwiMVwifX0sRXM9ITE7dmFyIEFzPS9bQS1aMC05Ll8lKy1dK0BbQS1aMC05Li1dK1xcLltBLVpdezIsfS9pLGhzPS9AKGdtYWlsfGdvb2dsZW1haWwpXFwuL2ksenM9L3N1cHBvcnR8bm9yZXBseS9pLEJzPVwiU0NSSVBUIFNUWUxFIElNRyBTVkcgUEFUSCBCUiBOT1NDUklQVCBURVhUQVJFQVwiLnNwbGl0KFwiIFwiKSxDcz1bXCJCUlwiXSx1cz17aWM6XCIxXCIsb2U6XCIyXCIsaGU6XCIzXCIsa2U6XCI0XCIsV2Y6XCI1XCIsUWc6XCI2XCIsRmY6XCI3XCJ9LGtzPXt9LERzPVtcIklOUFVUXCIsXCJTRUxFQ1RcIl07dmFyIFRzPWZ1bmN0aW9uKGEsYixjKXthLm9bVC5nLnFlXXx8KGEub1tULmcucWVdPXt9KTthLm9bVC5nLnFlXVtiXT1jfSxWcz1mdW5jdGlvbihhLGIpe3ZhciBjPVVzKGEsVC5nLlNkLGEubS5EW1QuZy5TZF0pO2lmKGMmJmNbYnx8YS5ldmVudE5hbWVdIT09dm9pZCAwKXJldHVybiBjW2J8fGEuZXZlbnROYW1lXX0sV3M9ZnVuY3Rpb24oYSl7dmFyIGI9YS5tZXRhZGF0YS51c2VyX2RhdGE7aWYoU2EoYikpcmV0dXJuIGJ9LFhzPWZ1bmN0aW9uKGEpe2lmKGEubWV0YWRhdGEuaXNfbWVyY2hhbnRfY2VudGVyfHwhaWooYS5tKSlyZXR1cm4hMTtpZighVShhLm0sVC5nLmhkKSl7dmFyIGI9VShhLm0sVC5nLnVjKTtyZXR1cm4gYj09PSEwfHxiPT09XCJ0cnVlXCJ9cmV0dXJuITB9LFlzPWZ1bmN0aW9uKGEpe3JldHVybiBVcyhhLFQuZy55YyxVKGEubSxULmcueWMpKXx8ISFVcyhhLFwiZ29vZ2xlX25nXCIsITEpfTt2YXIgS2Y7dmFyIFpzPU51bWJlcignJyl8fDUsJHM9TnVtYmVyKCcnKXx8NTAsYXQ9c2IoKTt2YXIgZnQ9e1lrOk51bWJlcignJyl8fDUwMCxMazpOdW1iZXIoJycpfHw1RTMsZ2o6TnVtYmVyKCcyMCcpfHwxMCxyazpOdW1iZXIoJycpfHw1RTN9O2Z1bmN0aW9uIGd0KGEpe3JldHVybiBhLnBlcmZvcm1hbmNlJiZhLnBlcmZvcm1hbmNlLm5vdygpfHxEYXRlLm5vdygpfVxudmFyIGh0PWZ1bmN0aW9uKGEsYil7dmFyIGM7cmV0dXJuIGN9O3ZhciBpdDtmdW5jdGlvbiBvdCgpe3ZhciBhPU5mKEtmLmosXCJcIixmdW5jdGlvbigpe3JldHVybnt9fSk7dHJ5e3JldHVybiBhKFwiaW50ZXJuYWxfc3dfYWxsb3dlZFwiKSwhMH1jYXRjaChiKXtyZXR1cm4hMX19XG5mdW5jdGlvbiBwdChhLGIpe31cbnZhciBxdD1mdW5jdGlvbihhLGIsYyxkKXt9O1xuZnVuY3Rpb24gcnQoYSxiLGMsZCl7fVxuZnVuY3Rpb24gc3QoYSxiLGMsZCl7fXZhciB0dD12b2lkIDA7ZnVuY3Rpb24gdXQoYSl7dmFyIGI9W107cmV0dXJuIGJ9O3ZhciB2dD1mdW5jdGlvbihhKXtmb3IodmFyIGI9W10sYz0wLGQ9MDtkPGEubGVuZ3RoO2QrKyl7dmFyIGU9YS5jaGFyQ29kZUF0KGQpO2U8MTI4P2JbYysrXT1lOihlPDIwNDg/YltjKytdPWU+PjZ8MTkyOigoZSY2NDUxMik9PTU1Mjk2JiZkKzE8YS5sZW5ndGgmJihhLmNoYXJDb2RlQXQoZCsxKSY2NDUxMik9PTU2MzIwPyhlPTY1NTM2KygoZSYxMDIzKTw8MTApKyhhLmNoYXJDb2RlQXQoKytkKSYxMDIzKSxiW2MrK109ZT4+MTh8MjQwLGJbYysrXT1lPj4xMiY2M3wxMjgpOmJbYysrXT1lPj4xMnwyMjQsYltjKytdPWU+PjYmNjN8MTI4KSxiW2MrK109ZSY2M3wxMjgpfXJldHVybiBifTtObSgpO1FtKCl8fEttKFwiaVBvZFwiKTtLbShcImlQYWRcIik7IUttKFwiQW5kcm9pZFwiKXx8T20oKXx8Tm0oKXx8TW0oKXx8S20oXCJTaWxrXCIpO09tKCk7IUttKFwiU2FmYXJpXCIpfHxPbSgpfHwoTG0oKT8wOkttKFwiQ29hc3RcIikpfHxNbSgpfHwoTG0oKT8wOkttKFwiRWRnZVwiKSl8fChMbSgpP0ptKFwiTWljcm9zb2Z0IEVkZ2VcIik6S20oXCJFZGcvXCIpKXx8KExtKCk/Sm0oXCJPcGVyYVwiKTpLbShcIk9QUlwiKSl8fE5tKCl8fEttKFwiU2lsa1wiKXx8S20oXCJBbmRyb2lkXCIpfHxSbSgpO3ZhciB3dD17fSx4dD1udWxsLHp0PWZ1bmN0aW9uKGEpe2Zvcih2YXIgYj1bXSxjPTAsZD0wO2Q8YS5sZW5ndGg7ZCsrKXt2YXIgZT1hLmNoYXJDb2RlQXQoZCk7ZT4yNTUmJihiW2MrK109ZSYyNTUsZT4+PTgpO2JbYysrXT1lfXZhciBmPTQ7Zj09PXZvaWQgMCYmKGY9MCk7aWYoIXh0KXt4dD17fTtmb3IodmFyIGc9XCJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OVwiLnNwbGl0KFwiXCIpLGs9W1wiKy89XCIsXCIrL1wiLFwiLV89XCIsXCItXy5cIixcIi1fXCJdLG09MDttPDU7bSsrKXt2YXIgbj1nLmNvbmNhdChrW21dLnNwbGl0KFwiXCIpKTt3dFttXT1uO2Zvcih2YXIgcD0wO3A8bi5sZW5ndGg7cCsrKXt2YXIgcT1uW3BdO3h0W3FdPT09dm9pZCAwJiYoeHRbcV09cCl9fX1mb3IodmFyIHI9d3RbZl0sdD1BcnJheShNYXRoLmZsb29yKGIubGVuZ3RoLzMpKSx1PXJbNjRdfHxcIlwiLHY9MCx3PTA7djxiLmxlbmd0aC0yO3YrPTMpe3ZhciB4PWJbdl0sXG55PWJbdisxXSxBPWJbdisyXSxCPXJbeD4+Ml0sQz1yWyh4JjMpPDw0fHk+PjRdLEg9clsoeSYxNSk8PDJ8QT4+Nl0sST1yW0EmNjNdO3RbdysrXT1cIlwiK0IrQytIK0l9dmFyIEY9MCxPPXU7c3dpdGNoKGIubGVuZ3RoLXYpe2Nhc2UgMjpGPWJbdisxXSxPPXJbKEYmMTUpPDwyXXx8dTtjYXNlIDE6dmFyIE49Ylt2XTt0W3ddPVwiXCIrcltOPj4yXStyWyhOJjMpPDw0fEY+PjRdK08rdX1yZXR1cm4gdC5qb2luKFwiXCIpfTt2YXIgQXQ9XCJwbGF0Zm9ybSBwbGF0Zm9ybVZlcnNpb24gYXJjaGl0ZWN0dXJlIG1vZGVsIHVhRnVsbFZlcnNpb24gYml0bmVzcyBmdWxsVmVyc2lvbkxpc3Qgd293NjRcIi5zcGxpdChcIiBcIik7ZnVuY3Rpb24gQnQoYSl7dmFyIGI7cmV0dXJuKGI9YS5nb29nbGVfdGFnX2RhdGEpIT1udWxsP2I6YS5nb29nbGVfdGFnX2RhdGE9e319ZnVuY3Rpb24gQ3QoKXt2YXIgYT1ELmdvb2dsZV90YWdfZGF0YSxiO2lmKGEhPW51bGwmJmEudWFjaCl7dmFyIGM9YS51YWNoLGQ9T2JqZWN0LmFzc2lnbih7fSxjKTtjLmZ1bGxWZXJzaW9uTGlzdCYmKGQuZnVsbFZlcnNpb25MaXN0PWMuZnVsbFZlcnNpb25MaXN0LnNsaWNlKDApKTtiPWR9ZWxzZSBiPW51bGw7cmV0dXJuIGJ9ZnVuY3Rpb24gRHQoKXt2YXIgYSxiO3JldHVybihiPShhPUQuZ29vZ2xlX3RhZ19kYXRhKT09bnVsbD92b2lkIDA6YS51YWNoX3Byb21pc2UpIT1udWxsP2I6bnVsbH1cbmZ1bmN0aW9uIEV0KGEpe3ZhciBiLGM7cmV0dXJuIHR5cGVvZigoYj1hLm5hdmlnYXRvcik9PW51bGw/dm9pZCAwOihjPWIudXNlckFnZW50RGF0YSk9PW51bGw/dm9pZCAwOmMuZ2V0SGlnaEVudHJvcHlWYWx1ZXMpPT09XCJmdW5jdGlvblwifWZ1bmN0aW9uIEZ0KCl7dmFyIGE9RDtpZighRXQoYSkpcmV0dXJuIG51bGw7dmFyIGI9QnQoYSk7aWYoYi51YWNoX3Byb21pc2UpcmV0dXJuIGIudWFjaF9wcm9taXNlO3ZhciBjPWEubmF2aWdhdG9yLnVzZXJBZ2VudERhdGEuZ2V0SGlnaEVudHJvcHlWYWx1ZXMoQXQpLnRoZW4oZnVuY3Rpb24oZCl7Yi51YWNoIT1udWxsfHwoYi51YWNoPWQpO3JldHVybiBkfSk7cmV0dXJuIGIudWFjaF9wcm9taXNlPWN9O1xudmFyIEd0LEh0PWZ1bmN0aW9uKCl7aWYoRXQoRCkmJihHdD1CYigpLCFEdCgpKSl7dmFyIGE9RnQoKTthJiYoYS50aGVuKGZ1bmN0aW9uKCl7TSg5NSk7fSksYS5jYXRjaChmdW5jdGlvbigpe00oOTYpfSkpfX0sSnQ9ZnVuY3Rpb24oYSl7dmFyIGI9SXQuZG4sYz1mdW5jdGlvbihnLGspe3RyeXthKGcsayl9Y2F0Y2gobSl7fX0sZD1DdCgpO2lmKGQpYyhkKTtlbHNle3ZhciBlPUR0KCk7aWYoZSl7Yj1cbk1hdGgubWluKE1hdGgubWF4KGlzRmluaXRlKGIpP2I6MCwwKSwxRTMpO3ZhciBmPUQuc2V0VGltZW91dChmdW5jdGlvbigpe2MuTGV8fChjLkxlPSEwLE0oMTA2KSxjKG51bGwsRXJyb3IoXCJUaW1lb3V0XCIpKSl9LGIpO2UudGhlbihmdW5jdGlvbihnKXtjLkxlfHwoYy5MZT0hMCxNKDEwNCksRC5jbGVhclRpbWVvdXQoZiksYyhnKSl9KS5jYXRjaChmdW5jdGlvbihnKXtjLkxlfHwoYy5MZT0hMCxNKDEwNSksRC5jbGVhclRpbWVvdXQoZiksYyhudWxsLGcpKX0pfWVsc2UgYyhudWxsKX19LEt0PWZ1bmN0aW9uKGEsYil7YSYmKGIub1tULmcud2ZdPWEuYXJjaGl0ZWN0dXJlLGIub1tULmcueGZdPWEuYml0bmVzcyxhLmZ1bGxWZXJzaW9uTGlzdCYmKGIub1tULmcueWZdPWEuZnVsbFZlcnNpb25MaXN0Lm1hcChmdW5jdGlvbihjKXtyZXR1cm4gZW5jb2RlVVJJQ29tcG9uZW50KGMuYnJhbmR8fFwiXCIpK1wiO1wiK2VuY29kZVVSSUNvbXBvbmVudChjLnZlcnNpb258fFwiXCIpfSkuam9pbihcInxcIikpLFxuYi5vW1QuZy56Zl09YS5tb2JpbGU/XCIxXCI6XCIwXCIsYi5vW1QuZy5BZl09YS5tb2RlbCxiLm9bVC5nLkJmXT1hLnBsYXRmb3JtLGIub1tULmcuQ2ZdPWEucGxhdGZvcm1WZXJzaW9uLGIub1tULmcuRGZdPWEud293NjQ/XCIxXCI6XCIwXCIpfTtmdW5jdGlvbiBMdChhKXt2YXIgYjtiPWI9PT12b2lkIDA/ZG9jdW1lbnQ6Yjt2YXIgYztyZXR1cm4hKChjPWIuZmVhdHVyZVBvbGljeSk9PW51bGx8fCFjLmFsbG93ZWRGZWF0dXJlcygpLmluY2x1ZGVzKGEpKX07ZnVuY3Rpb24gTXQoKXtyZXR1cm4gTHQoXCJqb2luLWFkLWludGVyZXN0LWdyb3VwXCIpJiZvYihvYy5qb2luQWRJbnRlcmVzdEdyb3VwKX1cbmZ1bmN0aW9uIE50KGEsYil7dmFyIGM9bGJbM109PT12b2lkIDA/MTpsYlszXSxkPSdpZnJhbWVbZGF0YS10YWdnaW5nLWlkPVwiJytiKydcIl0nLGU9W107dHJ5e2lmKGM9PT0xKXt2YXIgZj1FLnF1ZXJ5U2VsZWN0b3IoZCk7ZiYmKGU9W2ZdKX1lbHNlIGU9QXJyYXkuZnJvbShFLnF1ZXJ5U2VsZWN0b3JBbGwoZCkpfWNhdGNoKHEpe312YXIgZzthOnt0cnl7Zz1FLnF1ZXJ5U2VsZWN0b3JBbGwoJ2lmcmFtZVthbGxvdz1cImpvaW4tYWQtaW50ZXJlc3QtZ3JvdXBcIl1bZGF0YS10YWdnaW5nLWlkKj1cIi1cIl0nKTticmVhayBhfWNhdGNoKHEpe31nPXZvaWQgMH12YXIgaz1nLG09KChrPT1udWxsP3ZvaWQgMDprLmxlbmd0aCl8fDApPj0obGJbMl09PT12b2lkIDA/NTA6bGJbMl0pLG47aWYobj1lLmxlbmd0aD49MSl7dmFyIHA9TnVtYmVyKGVbZS5sZW5ndGgtMV0uZGF0YXNldC5sb2FkVGltZSk7cCE9PXZvaWQgMCYmQmIoKS1wPChsYlsxXT09PXZvaWQgMD82RTQ6bGJbMV0pPyhoYihcIlRBR0dJTkdcIixcbjkpLG49ITApOm49ITF9aWYoIW4pe2lmKGM9PT0xKWlmKGUubGVuZ3RoPj0xKU90KGVbMF0pO2Vsc2V7aWYobSl7aGIoXCJUQUdHSU5HXCIsMTApO3JldHVybn19ZWxzZSBlLmxlbmd0aD49Yz9PdChlWzBdKTptJiZPdChrWzBdKTt6YyhhLHZvaWQgMCx7YWxsb3c6XCJqb2luLWFkLWludGVyZXN0LWdyb3VwXCJ9LHt0YWdnaW5nSWQ6Yixsb2FkVGltZTpCYigpfSl9fWZ1bmN0aW9uIE90KGEpe3RyeXthLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoYSl9Y2F0Y2goYil7fX1mdW5jdGlvbiBQdCgpe3JldHVyblwiaHR0cHM6Ly90ZC5kb3VibGVjbGljay5uZXRcIn07XG52YXIgRnU9ZnVuY3Rpb24oYSxiKXt2YXIgYz17fSxkPWZ1bmN0aW9uKGYsZyl7dmFyIGs7az1nPT09ITA/XCIxXCI6Zz09PSExP1wiMFwiOmVuY29kZVVSSUNvbXBvbmVudChTdHJpbmcoZykpO2NbZl09a307eihhLm8sZnVuY3Rpb24oZixnKXt2YXIgaz1FdVtmXTtrJiZnIT09dm9pZCAwJiZnIT09XCJcIiYmKCFhLm1ldGFkYXRhLnJlZGFjdF9jbGlja19pZHN8fGYhPT1ULmcuRWQmJmYhPT1ULmcuTWQmJmYhPT1ULmcuYWYmJmYhPT1ULmcuZWd8fChnPVwiMFwiKSxkKGssZykpfSk7ZChcImd0bVwiLFluKHtzYTphLm1ldGFkYXRhLnNvdXJjZV9jYW5vbmljYWxfaWR9KSk7Rm4oKSYmZChcImdjc1wiLEduKCkpO2QoXCJnY2RcIixLbihhLm0pKTtObigpJiZkKFwiZG1hX2Nwc1wiLExuKCkpO2QoXCJkbWFcIixNbigpKTtqbihybigpKSYmZChcInRjZmRcIixVbigpKTtCaS5qJiZkKFwidGFnX2V4cFwiLEJpLmopO2lmKGEubWV0YWRhdGEuYWRkX3RhZ190aW1pbmcpe2QoXCJ0ZnRcIixCYigpKTt2YXIgZT1PYygpO2UhPT12b2lkIDAmJlxuZChcInRmZFwiLE1hdGgucm91bmQoZSkpfVEoMTgpJiZkKFwiYXB2ZVwiLFEoMTkpP1wiMVwiOlwiMFwiKTtRKDIwKSYmZChcImFwdmZcIixMYygpP1EoMjEpP1wiZlwiOlwic2JcIjpcIm5mXCIpO2IoYyl9LEd1PWZ1bmN0aW9uKGEpe0Z1KGEsZnVuY3Rpb24oYil7aWYoYS5tZXRhZGF0YS5oaXRfdHlwZT09PVwicGFnZV92aWV3XCIpe3ZhciBjPVtdO3ooYixmdW5jdGlvbihlLGYpe2MucHVzaChlK1wiPVwiK2YpfSk7dmFyIGQ9amooVyhbVC5nLlAsVC5nLk9dKT9cImh0dHBzOi8vd3d3Lmdvb2dsZS5jb21cIjpcImh0dHBzOi8vcGFnZWFkMi5nb29nbGVzeW5kaWNhdGlvbi5jb21cIiwhMCkrXCIvY2NtL2NvbGxlY3Q/XCIrYy5qb2luKFwiJlwiKTtRKDIwKSYmUSgyMSkmJkxjKCk/TWMoZCx2b2lkIDAse25vRmFsbGJhY2s6ITB9KTpJYyhkKTtpZihvYihhLm0ub25TdWNjZXNzKSlhLm0ub25TdWNjZXNzKCl9fSl9LEh1PXt9LEV1PShIdVtULmcuUWJdPVwiZ2N1XCIsSHVbVC5nLmtiXT1cImdjbGdiXCIsSHVbVC5nLlVhXT1cImdjbGF3XCIsSHVbVC5nLnNpXT1cblwiZ2FkX3NvdXJjZVwiLEh1W1QuZy51aV09XCJnYWRfc291cmNlX3NyY1wiLEh1W1QuZy5FZF09XCJnY2xpZFwiLEh1W1QuZy52aV09XCJnY2xzcmNcIixIdVtULmcuZWddPVwiZ2JyYWlkXCIsSHVbVC5nLmFmXT1cIndicmFpZFwiLEh1W1QuZy5FYl09XCJhdWlkXCIsSHVbVC5nLnhpXT1cInJuZFwiLEh1W1QuZy5BaV09XCJuY2xcIixIdVtULmcuaGddPVwiZ2NsZGNcIixIdVtULmcuTWRdPVwiZGNsaWRcIixIdVtULmcucGJdPVwiZWRpZFwiLEh1W1QuZy5zY109XCJlblwiLEh1W1QuZy53Y109XCJnZHByXCIsSHVbVC5nLnNiXT1cImdkaWRcIixIdVtULmcueGNdPVwiX25nXCIsSHVbVC5nLk5pXT1cImd0bV91cFwiLEh1W1QuZy5IYl09XCJmcm1cIixIdVtULmcuZGRdPVwibHBzXCIsSHVbVC5nLllkXT1cImRpZFwiLEh1W1QuZy5yYV09XCJkbFwiLEh1W1QuZy5CYV09XCJkclwiLEh1W1QuZy5aYV09XCJkdFwiLEh1W1QuZy50Zl09XCJnYV91aWRcIixIdVtULmcuQWNdPVwiZ2Rwcl9jb25zZW50XCIsSHVbVC5nLnphXT1cInVpZFwiLEh1W1QuZy5lZV09XCJ1c19wcml2YWN5XCIsXG5IdVtULmcuTWJdPVwibnBhXCIsSHUpO3ZhciBJdT17Szp7U2g6XCJhZHNfY29udmVyc2lvbl9oaXRcIixDZDpcImNvbnRhaW5lcl9leGVjdXRlX3N0YXJ0XCIsVmg6XCJjb250YWluZXJfc2V0dXBfZW5kXCIsVWY6XCJjb250YWluZXJfc2V0dXBfc3RhcnRcIixUaDpcImNvbnRhaW5lcl9ibG9ja2luZ19lbmRcIixVaDpcImNvbnRhaW5lcl9leGVjdXRlX2VuZFwiLFdoOlwiY29udGFpbmVyX3lpZWxkX2VuZFwiLFZmOlwiY29udGFpbmVyX3lpZWxkX3N0YXJ0XCIsWGk6XCJldmVudF9leGVjdXRlX2VuZFwiLFdpOlwiZXZlbnRfZXZhbHVhdGlvbl9lbmRcIixOZzpcImV2ZW50X2V2YWx1YXRpb25fc3RhcnRcIixZaTpcImV2ZW50X3NldHVwX2VuZFwiLGZlOlwiZXZlbnRfc2V0dXBfc3RhcnRcIixhajpcImdhNF9jb252ZXJzaW9uX2hpdFwiLG5lOlwicGFnZV9sb2FkXCIsdm46XCJwYWdldmlld1wiLFpiOlwic25pcHBldF9sb2FkXCIsdGo6XCJ0YWdfY2FsbGJhY2tfZXJyb3JcIix1ajpcInRhZ19jYWxsYmFja19mYWlsdXJlXCIsdmo6XCJ0YWdfY2FsbGJhY2tfc3VjY2Vzc1wiLHdqOlwidGFnX2V4ZWN1dGVfZW5kXCIsXG5tZDpcInRhZ19leGVjdXRlX3N0YXJ0XCJ9fTtmdW5jdGlvbiBKdSgpe2Z1bmN0aW9uIGEoYyxkKXt2YXIgZT1pYihkKTtlJiZiLnB1c2goW2MsZV0pfXZhciBiPVtdO2EoXCJ1XCIsXCJHVE1cIik7YShcInV0XCIsXCJUQUdHSU5HXCIpO2EoXCJoXCIsXCJIRUFMVEhcIik7cmV0dXJuIGJ9O3ZhciBLdT0hMTtmdW5jdGlvbiBzdihhLGIpe31cbmZ1bmN0aW9uIHR2KGEsYil7fWZ1bmN0aW9uIHV2KGEsYil7fVxuZnVuY3Rpb24gdnYoYSxiKXt9ZnVuY3Rpb24gd3YoKXt2YXIgYT17fTtyZXR1cm4gYX1cbmZ1bmN0aW9uIGt2KGEpe2E9YT09PXZvaWQgMD8hMDphO3ZhciBiPXt9O3JldHVybiBifVxuZnVuY3Rpb24geHYoKXt9ZnVuY3Rpb24geXYoYSxiKXt9XG5mdW5jdGlvbiB6dihhLGIsYyl7fVxuZnVuY3Rpb24gQXYoKXt9ZnVuY3Rpb24gQnYoYSxiKXt2YXIgYz1ELGQsZT1jLkdvb2dsZWJRaENzTztlfHwoZT17fSxjLkdvb2dsZWJRaENzTz1lKTtkPWU7aWYoZFthXSlyZXR1cm4hMTtkW2FdPVtdO2RbYV1bMF09YjtyZXR1cm4hMH07ZnVuY3Rpb24gQ3YoYSxiLGMsZCl7dmFyIGU9Vm0oYSxcImZtdFwiKTtpZihiKXt2YXIgZj1WbShhLFwicmFuZG9tXCIpLGc9Vm0oYSxcImxhYmVsXCIpfHxcIlwiO2lmKCFmKXJldHVybiExO3ZhciBrPXp0KGRlY29kZVVSSUNvbXBvbmVudChnLnJlcGxhY2UoL1xcKy9nLFwiIFwiKSkrXCI6XCIrZGVjb2RlVVJJQ29tcG9uZW50KGYucmVwbGFjZSgvXFwrL2csXCIgXCIpKSk7aWYoIUJ2KGssYikpcmV0dXJuITF9ZSYmTnVtYmVyKGUpIT09NCYmKGE9WG0oYSxcInJmbXRcIixlKSk7dmFyIG09WG0oYSxcImZtdFwiLDQpO3hjKG0sZnVuY3Rpb24oKXtELmdvb2dsZV9ub0Z1cnRoZXJSZWRpcmVjdHMmJmImJihELmdvb2dsZV9ub0Z1cnRoZXJSZWRpcmVjdHM9bnVsbCxiKCkpfSxjLGQsRS5nZXRFbGVtZW50c0J5VGFnTmFtZShcInNjcmlwdFwiKVswXS5wYXJlbnRFbGVtZW50fHx2b2lkIDApO3JldHVybiEwfTtmdW5jdGlvbiBVdihhLGIpe2lmKGRhdGEuZW50aXRpZXMpe3ZhciBjPWRhdGEuZW50aXRpZXNbYV07aWYoYylyZXR1cm4gY1tiXX19O2Z1bmN0aW9uIFZ2KGEsYixjKXtjPWM9PT12b2lkIDA/ITE6YztXdigpLmFkZFJlc3RyaWN0aW9uKDAsYSxiLGMpfWZ1bmN0aW9uIFh2KGEsYixjKXtjPWM9PT12b2lkIDA/ITE6YztXdigpLmFkZFJlc3RyaWN0aW9uKDEsYSxiLGMpfWZ1bmN0aW9uIFl2KCl7dmFyIGE9SWooKTtyZXR1cm4gV3YoKS5nZXRSZXN0cmljdGlvbnMoMSxhKX12YXIgWnY9ZnVuY3Rpb24oKXt0aGlzLmo9e307dGhpcy5EPXt9fSwkdj1mdW5jdGlvbihhLGIpe3ZhciBjPWEualtiXTtjfHwoYz17X2VudGl0eTp7aW50ZXJuYWw6W10sZXh0ZXJuYWw6W119LF9ldmVudDp7aW50ZXJuYWw6W10sZXh0ZXJuYWw6W119fSxhLmpbYl09Yyk7cmV0dXJuIGN9O1xuWnYucHJvdG90eXBlLmFkZFJlc3RyaWN0aW9uPWZ1bmN0aW9uKGEsYixjLGQpe2Q9ZD09PXZvaWQgMD8hMTpkO2lmKCFkfHwhdGhpcy5EW2JdKXt2YXIgZT0kdih0aGlzLGIpO2E9PT0wP2Q/ZS5fZW50aXR5LmV4dGVybmFsLnB1c2goYyk6ZS5fZW50aXR5LmludGVybmFsLnB1c2goYyk6YT09PTEmJihkP2UuX2V2ZW50LmV4dGVybmFsLnB1c2goYyk6ZS5fZXZlbnQuaW50ZXJuYWwucHVzaChjKSl9fTtcblp2LnByb3RvdHlwZS5nZXRSZXN0cmljdGlvbnM9ZnVuY3Rpb24oYSxiKXt2YXIgYz0kdih0aGlzLGIpO2lmKGE9PT0wKXt2YXIgZCxlO3JldHVybltdLmNvbmNhdChwYSgoYz09bnVsbD92b2lkIDA6KGQ9Yy5fZW50aXR5KT09bnVsbD92b2lkIDA6ZC5pbnRlcm5hbCl8fFtdKSxwYSgoYz09bnVsbD92b2lkIDA6KGU9Yy5fZW50aXR5KT09bnVsbD92b2lkIDA6ZS5leHRlcm5hbCl8fFtdKSl9aWYoYT09PTEpe3ZhciBmLGc7cmV0dXJuW10uY29uY2F0KHBhKChjPT1udWxsP3ZvaWQgMDooZj1jLl9ldmVudCk9PW51bGw/dm9pZCAwOmYuaW50ZXJuYWwpfHxbXSkscGEoKGM9PW51bGw/dm9pZCAwOihnPWMuX2V2ZW50KT09bnVsbD92b2lkIDA6Zy5leHRlcm5hbCl8fFtdKSl9cmV0dXJuW119O1xuWnYucHJvdG90eXBlLmdldEV4dGVybmFsUmVzdHJpY3Rpb25zPWZ1bmN0aW9uKGEsYil7dmFyIGM9JHYodGhpcyxiKSxkLGU7cmV0dXJuIGE9PT0wPyhjPT1udWxsP3ZvaWQgMDooZD1jLl9lbnRpdHkpPT1udWxsP3ZvaWQgMDpkLmV4dGVybmFsKXx8W106KGM9PW51bGw/dm9pZCAwOihlPWMuX2V2ZW50KT09bnVsbD92b2lkIDA6ZS5leHRlcm5hbCl8fFtdfTtadi5wcm90b3R5cGUucmVtb3ZlRXh0ZXJuYWxSZXN0cmljdGlvbnM9ZnVuY3Rpb24oYSl7dmFyIGI9JHYodGhpcyxhKTtiLl9ldmVudCYmKGIuX2V2ZW50LmV4dGVybmFsPVtdKTtiLl9lbnRpdHkmJihiLl9lbnRpdHkuZXh0ZXJuYWw9W10pO3RoaXMuRFthXT0hMH07ZnVuY3Rpb24gV3YoKXt2YXIgYT1paS5yO2F8fChhPW5ldyBadixpaS5yPWEpO3JldHVybiBhfTt2YXIgYXc9bmV3IFJlZ0V4cCgvXiguKlxcLik/KGdvb2dsZXx5b3V0dWJlfGJsb2dnZXJ8d2l0aGdvb2dsZSkoXFwuY29tPyk/KFxcLlthLXpdezJ9KT9cXC4/JC8pLGJ3PXtjbDpbXCJlY2xcIl0sY3VzdG9tUGl4ZWxzOltcIm5vbkdvb2dsZVBpeGVsc1wiXSxlY2w6W1wiY2xcIl0sZWhsOltcImhsXCJdLGdhYXdjOltcImdvb2d0YWdcIl0saGw6W1wiZWhsXCJdLGh0bWw6W1wiY3VzdG9tU2NyaXB0c1wiLFwiY3VzdG9tUGl4ZWxzXCIsXCJub25Hb29nbGVQaXhlbHNcIixcIm5vbkdvb2dsZVNjcmlwdHNcIixcIm5vbkdvb2dsZUlmcmFtZXNcIl0sY3VzdG9tU2NyaXB0czpbXCJodG1sXCIsXCJjdXN0b21QaXhlbHNcIixcIm5vbkdvb2dsZVBpeGVsc1wiLFwibm9uR29vZ2xlU2NyaXB0c1wiLFwibm9uR29vZ2xlSWZyYW1lc1wiXSxub25Hb29nbGVQaXhlbHM6W10sbm9uR29vZ2xlU2NyaXB0czpbXCJub25Hb29nbGVQaXhlbHNcIl0sbm9uR29vZ2xlSWZyYW1lczpbXCJub25Hb29nbGVQaXhlbHNcIl19LGN3PXtjbDpbXCJlY2xcIl0sY3VzdG9tUGl4ZWxzOltcImN1c3RvbVNjcmlwdHNcIixcblwiaHRtbFwiXSxlY2w6W1wiY2xcIl0sZWhsOltcImhsXCJdLGdhYXdjOltcImdvb2d0YWdcIl0saGw6W1wiZWhsXCJdLGh0bWw6W1wiY3VzdG9tU2NyaXB0c1wiXSxjdXN0b21TY3JpcHRzOltcImh0bWxcIl0sbm9uR29vZ2xlUGl4ZWxzOltcImN1c3RvbVBpeGVsc1wiLFwiY3VzdG9tU2NyaXB0c1wiLFwiaHRtbFwiLFwibm9uR29vZ2xlU2NyaXB0c1wiLFwibm9uR29vZ2xlSWZyYW1lc1wiXSxub25Hb29nbGVTY3JpcHRzOltcImN1c3RvbVNjcmlwdHNcIixcImh0bWxcIl0sbm9uR29vZ2xlSWZyYW1lczpbXCJjdXN0b21TY3JpcHRzXCIsXCJodG1sXCIsXCJub25Hb29nbGVTY3JpcHRzXCJdfSxkdz1cImdvb2dsZSBjdXN0b21QaXhlbHMgY3VzdG9tU2NyaXB0cyBodG1sIG5vbkdvb2dsZVBpeGVscyBub25Hb29nbGVTY3JpcHRzIG5vbkdvb2dsZUlmcmFtZXNcIi5zcGxpdChcIiBcIik7XG5mdW5jdGlvbiBldygpe3ZhciBhPUppKFwiZ3RtLmFsbG93bGlzdFwiKXx8SmkoXCJndG0ud2hpdGVsaXN0XCIpO2EmJk0oOSk7b2kmJihhPVtcImdvb2dsZVwiLFwiZ3RhZ2ZsXCIsXCJsY2xcIixcInpvbmVcIl0pO2F3LnRlc3QoRC5sb2NhdGlvbiYmRC5sb2NhdGlvbi5ob3N0bmFtZSkmJihvaT9NKDExNik6KE0oMTE3KSxmdyYmKGE9W10sd2luZG93LmNvbnNvbGUmJndpbmRvdy5jb25zb2xlLmxvZyYmd2luZG93LmNvbnNvbGUubG9nKFwiR1RNIGJsb2NrZWQuIFNlZSBnby8xMzY4NzcyOC5cIikpKSk7dmFyIGI9YSYmRmIoeWIoYSksYncpLGM9SmkoXCJndG0uYmxvY2tsaXN0XCIpfHxKaShcImd0bS5ibGFja2xpc3RcIik7Y3x8KGM9SmkoXCJ0YWdUeXBlQmxhY2tsaXN0XCIpKSYmTSgzKTtjP00oOCk6Yz1bXTthdy50ZXN0KEQubG9jYXRpb24mJkQubG9jYXRpb24uaG9zdG5hbWUpJiYoYz15YihjKSxjLnB1c2goXCJub25Hb29nbGVQaXhlbHNcIixcIm5vbkdvb2dsZVNjcmlwdHNcIixcInNhbmRib3hlZFNjcmlwdHNcIikpO1xueWIoYykuaW5kZXhPZihcImdvb2dsZVwiKT49MCYmTSgyKTt2YXIgZD1jJiZGYih5YihjKSxjdyksZT17fTtyZXR1cm4gZnVuY3Rpb24oZil7dmFyIGc9ZiYmZltJZS5tYV07aWYoIWd8fHR5cGVvZiBnIT09XCJzdHJpbmdcIilyZXR1cm4hMDtnPWcucmVwbGFjZSgvXl8qLyxcIlwiKTtpZihlW2ddIT09dm9pZCAwKXJldHVybiBlW2ddO3ZhciBrPXlpW2ddfHxbXSxtPSEwO2lmKGEpe3ZhciBuO2lmKG49bSlhOntpZihiLmluZGV4T2YoZyk8MClpZihrJiZrLmxlbmd0aD4wKWZvcih2YXIgcD0wO3A8ay5sZW5ndGg7cCsrKXtpZihiLmluZGV4T2Yoa1twXSk8MCl7TSgxMSk7bj0hMTticmVhayBhfX1lbHNle249ITE7YnJlYWsgYX1uPSEwfW09bn12YXIgcT0hMTtpZihjKXt2YXIgcj1kLmluZGV4T2YoZyk+PTA7aWYocilxPXI7ZWxzZXt2YXIgdD10YihkLGt8fFtdKTt0JiZNKDEwKTtxPXR9fXZhciB1PSFtfHxxO3V8fCEoay5pbmRleE9mKFwic2FuZGJveGVkU2NyaXB0c1wiKT49MCl8fGImJmIuaW5kZXhPZihcInNhbmRib3hlZFNjcmlwdHNcIikhPT1cbi0xfHwodT10YihkLGR3KSk7cmV0dXJuIGVbZ109dX19dmFyIGZ3PSExO2Z3PSEwO2Z1bmN0aW9uIGd3KCl7QWomJlZ2KElqKCksZnVuY3Rpb24oYSl7dmFyIGI9dWYoYS5lbnRpdHlJZCksYztpZih4ZihiKSl7dmFyIGQ9YltJZS5tYV07aWYoIWQpdGhyb3cgRXJyb3IoXCJFcnJvcjogTm8gZnVuY3Rpb24gbmFtZSBnaXZlbiBmb3IgZnVuY3Rpb24gY2FsbC5cIik7dmFyIGU9bWZbZF07Yz0hIWUmJiEhZS5ydW5JblNpbG9lZE1vZGV9ZWxzZSBjPSEhVXYoYltJZS5tYV0sNCk7cmV0dXJuIGN9KX1mdW5jdGlvbiBodyhhLGIsYyxkLGUpe2lmKCFpdygpKXt2YXIgZj1kLnNpbG9lZD9EaihhKTphO2lmKCFVaihmKSl7dmFyIGc9ancoYSksaz1HYihhLFwiR1RNLVwiKSxtPWhqKCksbj1jP1wiL2d0YWcvanNcIjpcIi9ndG0uanNcIixwPWdqKGIsbitnKTtpZighcCl7dmFyIHE9aGkuRGQrbjtpZihtJiZyYyYmaylxPXJjLnJlcGxhY2UoL14oPzpodHRwcz86XFwvXFwvKT8vaSxcIlwiKS5zcGxpdCgvWz8jXS8pWzBdLHA9QXIoXCJodHRwczovL1wiLFwiaHR0cDovL1wiLHErZyk7ZWxzZSBpZihEaSgpKXt2YXIgcj1uO1EoNjQpJiYocj1cIi9cIik7cD1DaSgpK3IrZ31lbHNlIHA9QXIoXCJodHRwczovL1wiLFwiaHR0cDovL1wiLHErZyl9ZC5zaWxvZWQmJldqKHtjdGlkOmYsaXNEZXN0aW5hdGlvbjohMX0pO3ZhciB0PUxqKCk7eGooKS5jb250YWluZXJbZl09e3N0YXRlOjEsY29udGV4dDpkLHBhcmVudDp0fTt3aih7Y3RpZDpmLGlzRGVzdGluYXRpb246ITF9LGUpO3hjKHApfX19XG5mdW5jdGlvbiBrdyhhLGIsYyxkKXtpZighaXcoKSl7dmFyIGU9Yy5zaWxvZWQ/RGooYSk6YTtpZighVmooZSkpaWYoIWMuc2lsb2VkJiZYaigpKXhqKCkuZGVzdGluYXRpb25bZV09e3N0YXRlOjAsdHJhbnNwb3J0VXJsOmIsY29udGV4dDpjLHBhcmVudDpMaigpfSx3aih7Y3RpZDplLGlzRGVzdGluYXRpb246ITB9LGQpLE0oOTEpO2Vsc2V7dmFyIGY9XCIvZ3RhZy9kZXN0aW5hdGlvblwiK2p3KGEsITApLGc9Z2ooYixmKTtnfHwoRGkoKT8oUSg2NCkmJihmPVwiL2d0ZFwiK2p3KGEsITApKSxnPUNpKCkrZik6Zz1BcihcImh0dHBzOi8vXCIsXCJodHRwOi8vXCIsaGkuRGQrZikpO2Muc2lsb2VkJiZXaih7Y3RpZDplLGlzRGVzdGluYXRpb246ITB9KTt4aigpLmRlc3RpbmF0aW9uW2VdPXtzdGF0ZToxLGNvbnRleHQ6YyxwYXJlbnQ6TGooKX07d2ooe2N0aWQ6ZSxpc0Rlc3RpbmF0aW9uOiEwfSxkKTt4YyhnKX19fVxuZnVuY3Rpb24gancoYSxiKXtiPWI9PT12b2lkIDA/ITE6Yjt2YXIgYz1cIj9pZD1cIitlbmNvZGVVUklDb21wb25lbnQoYSkrXCImbD1cIitoaS5oYjtpZighR2IoYSxcIkdUTS1cIil8fGIpYys9XCImY3g9Y1wiO1EoNzMpJiYoYys9XCImZ3RtPVwiK1luKCkpO2hqKCkmJihjKz1cIiZzaWduPVwiK2hpLlNnKTt2YXIgZD1CaS5EO2Q9PT0xP2MrPVwiJmZwcz1mY1wiOmQ9PT0yJiYoYys9XCImZnBzPWZlXCIpO3JldHVybiBjfWZ1bmN0aW9uIGl3KCl7aWYoV24oKSl7cmV0dXJuITB9cmV0dXJuITF9O3ZhciBsdz1bXTtmdW5jdGlvbiBtdygpe3ZhciBhPU9mLmN0aWQ7aWYoYSl7dmFyIGI9emoubWU/MTowLGMsZD1LaihMaigpKTtjPWQmJmQuY29udGV4dDtyZXR1cm4gYStcIjtcIitPZi5jYW5vbmljYWxDb250YWluZXJJZCtcIjtcIisoYyYmYy5mcm9tQ29udGFpbmVyRXhlY3V0aW9uPzE6MCkrXCI7XCIrKGMmJmMuc291cmNlfHwwKStcIjtcIitifX1mdW5jdGlvbiBudygpe3ZhciBhPWFqKEQubG9jYXRpb24uaHJlZik7cmV0dXJuIGEuaG9zdG5hbWUrYS5wYXRobmFtZX1mdW5jdGlvbiBvdygpe3ZhciBhPW53KCk7YSYmZmsoXCJkbFwiLGVuY29kZVVSSUNvbXBvbmVudChhKSk7aWYoUSg5Mykpe3ZhciBiPW13KCk7YiYmZmsoXCJ0ZHBcIixiKX1lbHNlIGZrKFwidGRwXCIsZnVuY3Rpb24oKXtyZXR1cm4gbHcubGVuZ3RoPjA/bHcuam9pbihcIi5cIik6dm9pZCAwfSk7dmFyIGM9JG0oITApO2MhPT12b2lkIDAmJmZrKFwiZnJtXCIsU3RyaW5nKGMpKX07dmFyIHB3PSExLHF3PTAscnc9W107ZnVuY3Rpb24gc3coYSl7aWYoIXB3KXt2YXIgYj1FLmNyZWF0ZUV2ZW50T2JqZWN0LGM9RS5yZWFkeVN0YXRlPT09XCJjb21wbGV0ZVwiLGQ9RS5yZWFkeVN0YXRlPT09XCJpbnRlcmFjdGl2ZVwiO2lmKCFhfHxhLnR5cGUhPT1cInJlYWR5c3RhdGVjaGFuZ2VcInx8Y3x8IWImJmQpe3B3PSEwO2Zvcih2YXIgZT0wO2U8cncubGVuZ3RoO2UrKylHKHJ3W2VdKX1ydy5wdXNoPWZ1bmN0aW9uKCl7Zm9yKHZhciBmPXphLmFwcGx5KDAsYXJndW1lbnRzKSxnPTA7ZzxmLmxlbmd0aDtnKyspRyhmW2ddKTtyZXR1cm4gMH19fWZ1bmN0aW9uIHR3KCl7aWYoIXB3JiZxdzwxNDApe3F3Kys7dHJ5e3ZhciBhLGI7KGI9KGE9RS5kb2N1bWVudEVsZW1lbnQpLmRvU2Nyb2xsKT09bnVsbHx8Yi5jYWxsKGEsXCJsZWZ0XCIpO3N3KCl9Y2F0Y2goYyl7RC5zZXRUaW1lb3V0KHR3LDUwKX19fWZ1bmN0aW9uIHV3KGEpe3B3P2EoKTpydy5wdXNoKGEpfTtmdW5jdGlvbiB3dyhhLGIsYyl7cmV0dXJue2VudGl0eVR5cGU6YSxpbmRleEluT3JpZ2luQ29udGFpbmVyOmIsbmFtZUluT3JpZ2luQ29udGFpbmVyOmMsb3JpZ2luQ29udGFpbmVySWQ6R2ooKX19O3ZhciB5dz1mdW5jdGlvbihhLGIpe3RoaXMuaj0hMTt0aGlzLk09W107dGhpcy5ldmVudERhdGE9e3RhZ3M6W119O3RoaXMuUj0hMTt0aGlzLkQ9dGhpcy5IPTA7eHcodGhpcyxhLGIpfSx6dz1mdW5jdGlvbihhLGIsYyxkKXtpZihraS5oYXNPd25Qcm9wZXJ0eShiKXx8Yj09PVwiX196b25lXCIpcmV0dXJuLTE7dmFyIGU9e307U2EoZCkmJihlPWgoZCxlKSk7ZS5pZD1jO2Uuc3RhdHVzPVwidGltZW91dFwiO3JldHVybiBhLmV2ZW50RGF0YS50YWdzLnB1c2goZSktMX0sQXc9ZnVuY3Rpb24oYSxiLGMsZCl7dmFyIGU9YS5ldmVudERhdGEudGFnc1tiXTtlJiYoZS5zdGF0dXM9YyxlLmV4ZWN1dGlvblRpbWU9ZCl9LEJ3PWZ1bmN0aW9uKGEpe2lmKCFhLmope2Zvcih2YXIgYj1hLk0sYz0wO2M8Yi5sZW5ndGg7YysrKWJbY10oKTthLmo9ITA7YS5NLmxlbmd0aD0wfX0seHc9ZnVuY3Rpb24oYSxiLGMpe2IhPT12b2lkIDAmJmEudWUoYik7YyYmRC5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7QncoYSl9LFxuTnVtYmVyKGMpKX07eXcucHJvdG90eXBlLnVlPWZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMsYz1EYihmdW5jdGlvbigpe0coZnVuY3Rpb24oKXthKEdqKCksYi5ldmVudERhdGEpfSl9KTt0aGlzLmo/YygpOnRoaXMuTS5wdXNoKGMpfTt2YXIgQ3c9ZnVuY3Rpb24oYSl7YS5IKys7cmV0dXJuIERiKGZ1bmN0aW9uKCl7YS5EKys7YS5SJiZhLkQ+PWEuSCYmQncoYSl9KX0sRHc9ZnVuY3Rpb24oYSl7YS5SPSEwO2EuRD49YS5IJiZCdyhhKX07dmFyIEV3PXt9LEd3PWZ1bmN0aW9uKCl7cmV0dXJuIERbRncoKV19O1xuZnVuY3Rpb24gRncoKXtyZXR1cm4gRC5Hb29nbGVBbmFseXRpY3NPYmplY3R8fFwiZ2FcIn1cbnZhciBKdz1mdW5jdGlvbigpe3ZhciBhPUdqKCk7fSxLdz1mdW5jdGlvbihhLGIpe3JldHVybiBmdW5jdGlvbigpe3ZhciBjPUd3KCksZD1jJiZjLmdldEJ5TmFtZSYmYy5nZXRCeU5hbWUoYSk7aWYoZCl7dmFyIGU9ZC5nZXQoXCJzZW5kSGl0VGFza1wiKTtkLnNldChcInNlbmRIaXRUYXNrXCIsZnVuY3Rpb24oZil7dmFyIGc9Zi5nZXQoXCJoaXRQYXlsb2FkXCIpLGs9Zi5nZXQoXCJoaXRDYWxsYmFja1wiKSxtPWcuaW5kZXhPZihcIiZ0aWQ9XCIrYik8MDttJiYoZi5zZXQoXCJoaXRQYXlsb2FkXCIsZy5yZXBsYWNlKC8mdGlkPVVBLVswLTldKy1bMC05XSsvLFwiJnRpZD1cIitiKSwhMCksZi5zZXQoXCJoaXRDYWxsYmFja1wiLHZvaWQgMCwhMCkpO2UoZik7XG5tJiYoZi5zZXQoXCJoaXRQYXlsb2FkXCIsZywhMCksZi5zZXQoXCJoaXRDYWxsYmFja1wiLGssITApLGYuc2V0KFwiX3hfMTlcIix2b2lkIDAsITApLGUoZikpfSl9fX07dmFyIFB3PVtcImVzXCIsXCIxXCJdLFF3PXt9LFJ3PXt9O2Z1bmN0aW9uIFN3KGEsYil7aWYocWope3ZhciBjO2M9Yi5tYXRjaCgvXihndG18Z3RhZylcXC4vKT9lbmNvZGVVUklDb21wb25lbnQoYik6XCIqXCI7UXdbYV09W1tcImVcIixjXSxbXCJlaWRcIixhXV07ZG0oYSl9fWZ1bmN0aW9uIFR3KGEpe3ZhciBiPWEuZXZlbnRJZCxjPWEuaGM7aWYoIVF3W2JdKXJldHVybltdO3ZhciBkPVtdO1J3W2JdfHxkLnB1c2goUHcpO2QucHVzaC5hcHBseShkLHBhKFF3W2JdKSk7YyYmKFJ3W2JdPSEwKTtyZXR1cm4gZH07dmFyIFV3PXt9LFZ3PXt9LFd3PXt9O2Z1bmN0aW9uIFh3KGEsYixjLGQpe3FqJiZRKDgzKSYmKChkPT09dm9pZCAwPzA6ZCk/KFd3W2JdPVd3W2JdfHwwLCsrV3dbYl0pOmMhPT12b2lkIDA/KFZ3W2FdPVZ3W2FdfHx7fSxWd1thXVtiXT1NYXRoLnJvdW5kKGMpKTooVXdbYV09VXdbYV18fHt9LFV3W2FdW2JdPShVd1thXVtiXXx8MCkrMSkpfWZ1bmN0aW9uIFl3KGEpe3ZhciBiPWEuZXZlbnRJZCxjPWEuaGMsZD1Vd1tiXXx8e30sZT1bXSxmO2ZvcihmIGluIGQpZC5oYXNPd25Qcm9wZXJ0eShmKSYmZS5wdXNoKFwiXCIrZitkW2ZdKTtjJiZkZWxldGUgVXdbYl07cmV0dXJuIGUubGVuZ3RoP1tbXCJtZFwiLGUuam9pbihcIi5cIildXTpbXX1cbmZ1bmN0aW9uIFp3KGEpe3ZhciBiPWEuZXZlbnRJZCxjPWEuaGMsZD1Wd1tiXXx8e30sZT1bXSxmO2ZvcihmIGluIGQpZC5oYXNPd25Qcm9wZXJ0eShmKSYmZS5wdXNoKFwiXCIrZitkW2ZdKTtjJiZkZWxldGUgVndbYl07cmV0dXJuIGUubGVuZ3RoP1tbXCJtdGRcIixlLmpvaW4oXCIuXCIpXV06W119ZnVuY3Rpb24gJHcoKXtmb3IodmFyIGE9W10sYj1uYShPYmplY3Qua2V5cyhXdykpLGM9Yi5uZXh0KCk7IWMuZG9uZTtjPWIubmV4dCgpKXt2YXIgZD1jLnZhbHVlO2EucHVzaChcIlwiK2QrV3dbZF0pfXJldHVybiBhLmxlbmd0aD9bW1wibWVjXCIsYS5qb2luKFwiLlwiKV1dOltdfTt2YXIgYXg9e30sYng9e307ZnVuY3Rpb24gY3goYSxiLGMpe2lmKHFqJiZiKXt2YXIgZD1raihiKTtheFthXT1heFthXXx8W107YXhbYV0ucHVzaChjK2QpO3ZhciBlPSh4ZihiKT9cIjFcIjpcIjJcIikrZDtieFthXT1ieFthXXx8W107YnhbYV0ucHVzaChlKTtkbShhKX19ZnVuY3Rpb24gZHgoYSl7dmFyIGI9YS5ldmVudElkLGM9YS5oYyxkPVtdLGU9YXhbYl18fFtdO2UubGVuZ3RoJiZkLnB1c2goW1widHJcIixlLmpvaW4oXCIuXCIpXSk7dmFyIGY9YnhbYl18fFtdO2YubGVuZ3RoJiZkLnB1c2goW1widGlcIixmLmpvaW4oXCIuXCIpXSk7YyYmKGRlbGV0ZSBheFtiXSxkZWxldGUgYnhbYl0pO3JldHVybiBkfTtmdW5jdGlvbiBleChhLGIsYyxkKXt2YXIgZT1rZlthXSxmPWZ4KGEsYixjLGQpO2lmKCFmKXJldHVybiBudWxsO3ZhciBnPXlmKGVbSWUuc2pdLGMsW10pO2lmKGcmJmcubGVuZ3RoKXt2YXIgaz1nWzBdO2Y9ZXgoay5pbmRleCx7b25TdWNjZXNzOmYsb25GYWlsdXJlOmsuRGo9PT0xP2IudGVybWluYXRlOmYsdGVybWluYXRlOmIudGVybWluYXRlfSxjLGQpfXJldHVybiBmfVxuZnVuY3Rpb24gZngoYSxiLGMsZCl7ZnVuY3Rpb24gZSgpe2Z1bmN0aW9uIHcoKXtLaygzKTt2YXIgST1CYigpLUg7Y3goYy5pZCxmLFwiN1wiKTtBdyhjLmFjLEIsXCJleGNlcHRpb25cIixJKTtRKDc0KSYmenYoYyxmLEl1LksudGopO0N8fChDPSEwLGsoKSl9aWYoZltJZS5Ra10paygpO2Vsc2V7dmFyIHg9d2YoZixjLFtdKSx5PXhbSWUucGtdO2lmKHkhPW51bGwpZm9yKHZhciBBPTA7QTx5Lmxlbmd0aDtBKyspaWYoIVcoeVtBXSkpe2soKTtyZXR1cm59dmFyIEI9encoYy5hYyxTdHJpbmcoZltJZS5tYV0pLE51bWJlcihmW0llLnRlXSkseFtJZS5NRVRBREFUQV0pLEM9ITE7eC52dHBfZ3RtT25TdWNjZXNzPWZ1bmN0aW9uKCl7aWYoIUMpe0M9ITA7dmFyIEk9QmIoKS1IO2N4KGMuaWQsa2ZbYV0sXCI1XCIpO0F3KGMuYWMsQixcInN1Y2Nlc3NcIixJKTtRKDc0KSYmenYoYyxmLEl1LksudmopO2coKX19O3gudnRwX2d0bU9uRmFpbHVyZT1mdW5jdGlvbigpe2lmKCFDKXtDPSEwO3ZhciBJPUJiKCktXG5IO2N4KGMuaWQsa2ZbYV0sXCI2XCIpO0F3KGMuYWMsQixcImZhaWx1cmVcIixJKTtRKDc0KSYmenYoYyxmLEl1LksudWopO2soKX19O3gudnRwX2d0bVRhZ0lkPWYudGFnX2lkO3gudnRwX2d0bUV2ZW50SWQ9Yy5pZDtjLnByaW9yaXR5SWQmJih4LnZ0cF9ndG1Qcmlvcml0eUlkPWMucHJpb3JpdHlJZCk7Y3goYy5pZCxmLFwiMVwiKTtRKDc0KSYmeXYoYyxmKTt2YXIgSD1CYigpO3RyeXt6Zih4LHtldmVudDpjLGluZGV4OmEsdHlwZToxfSl9Y2F0Y2goSSl7dyhJKX1RKDc0KSYmenYoYyxmLEl1Lksud2opfX12YXIgZj1rZlthXSxnPWIub25TdWNjZXNzLGs9Yi5vbkZhaWx1cmUsbT1iLnRlcm1pbmF0ZTtpZihjLmlzQmxvY2tlZChmKSlyZXR1cm4gbnVsbDt2YXIgbj15ZihmW0llLnhqXSxjLFtdKTtpZihuJiZuLmxlbmd0aCl7dmFyIHA9blswXSxxPWV4KHAuaW5kZXgse29uU3VjY2VzczpnLG9uRmFpbHVyZTprLHRlcm1pbmF0ZTptfSxjLGQpO2lmKCFxKXJldHVybiBudWxsO2c9cTtrPXAuRGo9PT1cbjI/bTpxfWlmKGZbSWUua2pdfHxmW0llLlNrXSl7dmFyIHI9ZltJZS5ral0/bGY6Yy5UbSx0PWcsdT1rO2lmKCFyW2FdKXt2YXIgdj1neChhLHIsRGIoZSkpO2c9di5vblN1Y2Nlc3M7az12Lm9uRmFpbHVyZX1yZXR1cm4gZnVuY3Rpb24oKXtyW2FdKHQsdSl9fXJldHVybiBlfWZ1bmN0aW9uIGd4KGEsYixjKXt2YXIgZD1bXSxlPVtdO2JbYV09aHgoZCxlLGMpO3JldHVybntvblN1Y2Nlc3M6ZnVuY3Rpb24oKXtiW2FdPWl4O2Zvcih2YXIgZj0wO2Y8ZC5sZW5ndGg7ZisrKWRbZl0oKX0sb25GYWlsdXJlOmZ1bmN0aW9uKCl7YlthXT1qeDtmb3IodmFyIGY9MDtmPGUubGVuZ3RoO2YrKyllW2ZdKCl9fX1mdW5jdGlvbiBoeChhLGIsYyl7cmV0dXJuIGZ1bmN0aW9uKGQsZSl7YS5wdXNoKGQpO2IucHVzaChlKTtjKCl9fWZ1bmN0aW9uIGl4KGEpe2EoKX1mdW5jdGlvbiBqeChhLGIpe2IoKX07dmFyIG14PWZ1bmN0aW9uKGEsYil7Zm9yKHZhciBjPVtdLGQ9MDtkPGtmLmxlbmd0aDtkKyspaWYoYVtkXSl7dmFyIGU9a2ZbZF07dmFyIGY9Q3coYi5hYyk7dHJ5e3ZhciBnPWV4KGQse29uU3VjY2VzczpmLG9uRmFpbHVyZTpmLHRlcm1pbmF0ZTpmfSxiLGQpO2lmKGcpe3ZhciBrPWVbSWUubWFdO2lmKCFrKXRocm93IEVycm9yKFwiRXJyb3I6IE5vIGZ1bmN0aW9uIG5hbWUgZ2l2ZW4gZm9yIGZ1bmN0aW9uIGNhbGwuXCIpO3ZhciBtPW1mW2tdO2MucHVzaCh7Zms6ZCxVajoobT9tLnByaW9yaXR5T3ZlcnJpZGV8fDA6MCl8fFV2KGVbSWUubWFdLDEpfHwwLGV4ZWN1dGU6Z30pfWVsc2Uga3goZCxiKSxmKCl9Y2F0Y2gocCl7ZigpfX1jLnNvcnQobHgpO2Zvcih2YXIgbj0wO248Yy5sZW5ndGg7bisrKWNbbl0uZXhlY3V0ZSgpO3JldHVybiBjLmxlbmd0aD5cbjB9O2Z1bmN0aW9uIGx4KGEsYil7dmFyIGMsZD1iLlVqLGU9YS5VajtjPWQ+ZT8xOmQ8ZT8tMTowO3ZhciBmO2lmKGMhPT0wKWY9YztlbHNle3ZhciBnPWEuZmssaz1iLmZrO2Y9Zz5rPzE6ZzxrPy0xOjB9cmV0dXJuIGZ9XG5mdW5jdGlvbiBreChhLGIpe2lmKHFqKXt2YXIgYz1mdW5jdGlvbihkKXt2YXIgZT1iLmlzQmxvY2tlZChrZltkXSk/XCIzXCI6XCI0XCIsZj15ZihrZltkXVtJZS5zal0sYixbXSk7ZiYmZi5sZW5ndGgmJmMoZlswXS5pbmRleCk7Y3goYi5pZCxrZltkXSxlKTt2YXIgZz15ZihrZltkXVtJZS54al0sYixbXSk7ZyYmZy5sZW5ndGgmJmMoZ1swXS5pbmRleCl9O2MoYSl9fXZhciBweD0hMSxueDtcbnZhciB2eD1mdW5jdGlvbihhKXt2YXIgYj1hW1wiZ3RtLnVuaXF1ZUV2ZW50SWRcIl0sYz1hW1wiZ3RtLnByaW9yaXR5SWRcIl0sZD1hLmV2ZW50O2lmKFEoNzQpKXt9aWYoZD09PVwiZ3RtLmpzXCIpe2lmKHB4KXJldHVybiExO3B4PSEwfXZhciBlPSExLGY9WXYoKSxnPWgoYSk7aWYoIWYuZXZlcnkoZnVuY3Rpb24odCl7cmV0dXJuIHQoe29yaWdpbmFsRXZlbnREYXRhOmd9KX0pKXtpZihkIT09XCJndG0uanNcIiYmZCE9PVwiZ3RtLmluaXRcIiYmZCE9PVwiZ3RtLmluaXRfY29uc2VudFwiKXJldHVybiExO2U9ITB9U3coYixkKTt2YXIgaz1hLmV2ZW50Q2FsbGJhY2ssbT1hLmV2ZW50VGltZW91dCxuPXtpZDpiLFxucHJpb3JpdHlJZDpjLG5hbWU6ZCxpc0Jsb2NrZWQ6cngoZyxlKSxUbTpbXSxsb2dNYWNyb0Vycm9yOmZ1bmN0aW9uKCl7TSg2KTtLaygwKX0sY2FjaGVkTW9kZWxWYWx1ZXM6c3goKSxhYzpuZXcgeXcoZnVuY3Rpb24oKXtpZihRKDc0KSl7fWsmJlxuay5hcHBseShrLFtdLnNsaWNlLmNhbGwoYXJndW1lbnRzLDApKX0sbSksb3JpZ2luYWxFdmVudERhdGE6Z307USg4MykmJnFqJiYobi5yZXBvcnRNYWNyb0Rpc2NyZXBhbmN5PVh3KTtRKDc0KSYmdXYobi5pZCxuLm5hbWUpO3ZhciBwPUZmKG4pO1EoNzQpJiZ2dihuLmlkLG4ubmFtZSk7ZSYmKHA9dHgocCkpO2lmKFEoNzQpKXt9dmFyIHE9bXgocCxuKSxyPSExO0R3KG4uYWMpO2QhPT1cImd0bS5qc1wiJiZkIT09XCJndG0uc3luY1wifHxKdygpO3JldHVybiB1eChwLHEpfHxyfTtmdW5jdGlvbiBzeCgpe3ZhciBhPXt9O2EuZXZlbnQ9T2koXCJldmVudFwiLDEpO2EuZWNvbW1lcmNlPU9pKFwiZWNvbW1lcmNlXCIsMSk7YS5ndG09T2koXCJndG1cIik7YS5ldmVudE1vZGVsPU9pKFwiZXZlbnRNb2RlbFwiKTtyZXR1cm4gYX1cbmZ1bmN0aW9uIHJ4KGEsYil7dmFyIGM9ZXcoKTtyZXR1cm4gZnVuY3Rpb24oZCl7aWYoYyhkKSlyZXR1cm4hMDt2YXIgZT1kJiZkW0llLm1hXTtpZighZXx8dHlwZW9mIGUhPVwic3RyaW5nXCIpcmV0dXJuITA7ZT1lLnJlcGxhY2UoL15fKi8sXCJcIik7dmFyIGYsZz1JaigpO2Y9V3YoKS5nZXRSZXN0cmljdGlvbnMoMCxnKTt2YXIgaz1hO2ImJihrPWgoYSksa1tcImd0bS51bmlxdWVFdmVudElkXCJdPU51bWJlci5NQVhfU0FGRV9JTlRFR0VSKTtmb3IodmFyIG09eWlbZV18fFtdLG49bmEoZikscD1uLm5leHQoKTshcC5kb25lO3A9bi5uZXh0KCkpe3ZhciBxPXAudmFsdWU7dHJ5e2lmKCFxKHtlbnRpdHlJZDplLHNlY3VyaXR5R3JvdXBzOm0sb3JpZ2luYWxFdmVudERhdGE6a30pKXJldHVybiEwfWNhdGNoKHIpe3JldHVybiEwfX1yZXR1cm4hMX19XG5mdW5jdGlvbiB0eChhKXtmb3IodmFyIGI9W10sYz0wO2M8YS5sZW5ndGg7YysrKWlmKGFbY10pe3ZhciBkPVN0cmluZyhrZltjXVtJZS5tYV0pO2lmKGppW2RdfHxrZltjXVtJZS5Ua10hPT12b2lkIDB8fFV2KGQsMikpYltjXT0hMH1yZXR1cm4gYn1mdW5jdGlvbiB1eChhLGIpe2lmKCFiKXJldHVybiBiO2Zvcih2YXIgYz0wO2M8YS5sZW5ndGg7YysrKWlmKGFbY10mJmtmW2NdJiYha2lbU3RyaW5nKGtmW2NdW0llLm1hXSldKXJldHVybiEwO3JldHVybiExfXZhciB3eD0wO2Z1bmN0aW9uIHh4KGEsYil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg9PT0xP3l4KFwic2V0XCIsYSk6eXgoXCJzZXRcIixhLGIpfWZ1bmN0aW9uIHp4KGEsYil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg9PT0xP3l4KFwiY29uZmlnXCIsYSk6eXgoXCJjb25maWdcIixhLGIpfWZ1bmN0aW9uIEF4KGEsYixjKXtjPWN8fHt9O2NbVC5nLlhiXT1hO3JldHVybiB5eChcImV2ZW50XCIsYixjKX1mdW5jdGlvbiB5eCgpe3JldHVybiBhcmd1bWVudHN9O3ZhciBHeD1mdW5jdGlvbigpe3RoaXMubWVzc2FnZXM9W107dGhpcy5qPVtdfTtHeC5wcm90b3R5cGUuZW5xdWV1ZT1mdW5jdGlvbihhLGIsYyl7dmFyIGQ9dGhpcy5tZXNzYWdlcy5sZW5ndGgrMTthW1wiZ3RtLnVuaXF1ZUV2ZW50SWRcIl09YjthW1wiZ3RtLnByaW9yaXR5SWRcIl09ZDt2YXIgZT1PYmplY3QuYXNzaWduKHt9LGMse2V2ZW50SWQ6Yixwcmlvcml0eUlkOmQsZnJvbUNvbnRhaW5lckV4ZWN1dGlvbjohMH0pLGY9e21lc3NhZ2U6YSxub3RCZWZvcmVFdmVudElkOmIscHJpb3JpdHlJZDpkLG1lc3NhZ2VDb250ZXh0OmV9O3RoaXMubWVzc2FnZXMucHVzaChmKTtmb3IodmFyIGc9MDtnPHRoaXMuai5sZW5ndGg7ZysrKXRyeXt0aGlzLmpbZ10oZil9Y2F0Y2goayl7fX07R3gucHJvdG90eXBlLmxpc3Rlbj1mdW5jdGlvbihhKXt0aGlzLmoucHVzaChhKX07XG5HeC5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKCl7Zm9yKHZhciBhPXt9LGI9MDtiPHRoaXMubWVzc2FnZXMubGVuZ3RoO2IrKyl7dmFyIGM9dGhpcy5tZXNzYWdlc1tiXSxkPWFbYy5ub3RCZWZvcmVFdmVudElkXTtkfHwoZD1bXSxhW2Mubm90QmVmb3JlRXZlbnRJZF09ZCk7ZC5wdXNoKGMpfXJldHVybiBhfTtHeC5wcm90b3R5cGUucHJ1bmU9ZnVuY3Rpb24oYSl7Zm9yKHZhciBiPVtdLGM9W10sZD0wO2Q8dGhpcy5tZXNzYWdlcy5sZW5ndGg7ZCsrKXt2YXIgZT10aGlzLm1lc3NhZ2VzW2RdO2Uubm90QmVmb3JlRXZlbnRJZD09PWE/Yi5wdXNoKGUpOmMucHVzaChlKX10aGlzLm1lc3NhZ2VzPWM7cmV0dXJuIGJ9O2Z1bmN0aW9uIEh4KGEsYixjKXtjLmV2ZW50TWV0YWRhdGE9Yy5ldmVudE1ldGFkYXRhfHx7fTtjLmV2ZW50TWV0YWRhdGEuc291cmNlX2Nhbm9uaWNhbF9pZD1PZi5jYW5vbmljYWxDb250YWluZXJJZDtJeCgpLmVucXVldWUoYSxiLGMpfVxuZnVuY3Rpb24gSngoKXt2YXIgYT1LeDtJeCgpLmxpc3RlbihhKX1mdW5jdGlvbiBJeCgpe3ZhciBhPWlpLm1iO2F8fChhPW5ldyBHeCxpaS5tYj1hKTtyZXR1cm4gYX07dmFyIEx4PXt9LE14PXt9O2Z1bmN0aW9uIE54KGEsYil7Zm9yKHZhciBjPVtdLGQ9W10sZT17fSxmPTA7ZjxhLmxlbmd0aDtlPXtFaDp2b2lkIDAsbmg6dm9pZCAwfSxmKyspe3ZhciBnPWFbZl07aWYoZy5pbmRleE9mKFwiLVwiKT49MCl7aWYoZS5FaD1qbChnLGIpLGUuRWgpe3ZhciBrPUVqKCk7cmIoayxmdW5jdGlvbihyKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIHIuRWguZGVzdGluYXRpb25JZD09PXR9fShlKSk/Yy5wdXNoKGcpOmQucHVzaChnKX19ZWxzZXt2YXIgbT1MeFtnXXx8W107ZS5uaD17fTttLmZvckVhY2goZnVuY3Rpb24ocil7cmV0dXJuIGZ1bmN0aW9uKHQpe3IubmhbdF09ITB9fShlKSk7Zm9yKHZhciBuPUJqKCkscD0wO3A8bi5sZW5ndGg7cCsrKWlmKGUubmhbbltwXV0pe2M9Yy5jb25jYXQoRWooKSk7YnJlYWt9dmFyIHE9TXhbZ118fFtdO3EubGVuZ3RoJiYoYz1jLmNvbmNhdChxKSl9fXJldHVybntrbTpjLG9tOmR9fVxuZnVuY3Rpb24gT3goYSl7eihMeCxmdW5jdGlvbihiLGMpe3ZhciBkPWMuaW5kZXhPZihhKTtkPj0wJiZjLnNwbGljZShkLDEpfSl9ZnVuY3Rpb24gUHgoYSl7eihNeCxmdW5jdGlvbihiLGMpe3ZhciBkPWMuaW5kZXhPZihhKTtkPj0wJiZjLnNwbGljZShkLDEpfSl9dmFyIFF4PVwiSEEgR0YgRyBVQSBBVyBEQyBNQ1wiLnNwbGl0KFwiIFwiKSxSeD0hMSxTeD0hMSxUeD0hMSxVeD0hMTtmdW5jdGlvbiBWeChhLGIpe2EuaGFzT3duUHJvcGVydHkoXCJndG0udW5pcXVlRXZlbnRJZFwiKXx8T2JqZWN0LmRlZmluZVByb3BlcnR5KGEsXCJndG0udW5pcXVlRXZlbnRJZFwiLHt2YWx1ZTp6aSgpfSk7Yi5ldmVudElkPWFbXCJndG0udW5pcXVlRXZlbnRJZFwiXTtiLnByaW9yaXR5SWQ9YVtcImd0bS5wcmlvcml0eUlkXCJdO3JldHVybntldmVudElkOmIuZXZlbnRJZCxwcmlvcml0eUlkOmIucHJpb3JpdHlJZH19dmFyIFd4PXZvaWQgMCxYeD12b2lkIDA7XG5mdW5jdGlvbiBZeChhLGIsYyl7dmFyIGQ9aChhLG51bGwpO2QuZXZlbnRJZD12b2lkIDA7ZC5pbmhlcml0UGFyZW50Q29uZmlnPXZvaWQgMDtPYmplY3Qua2V5cyhiKS5zb21lKGZ1bmN0aW9uKGYpe3JldHVybiBiW2ZdIT09dm9pZCAwfSkmJk0oMTM2KTt2YXIgZT1oKGIsbnVsbCk7aChjLGUpO0h4KHp4KEJqKClbMF0sZSksYS5ldmVudElkLGQpfWZ1bmN0aW9uIFp4KGEpe2Zvcih2YXIgYj1uYShbVC5nLmhkLFQuZy5MYl0pLGM9Yi5uZXh0KCk7IWMuZG9uZTtjPWIubmV4dCgpKXt2YXIgZD1jLnZhbHVlLGU9YSYmYVtkXXx8bG0ualtkXTtpZihlKXJldHVybiBlfX1cbnZhciAkeD1bVC5nLmhkLFQuZy5MYixULmcudWMsVC5nLm5iLFQuZy51YixULmcuemEsVC5nLnFhLFQuZy5OYSxULmcuVmEsVC5nLkZiXSxheT17Y29uZmlnOmZ1bmN0aW9uKGEsYil7dmFyIGM9VngoYSxiKTtpZighKGEubGVuZ3RoPDIpJiZsKGFbMV0pKXt2YXIgZD17fTtpZihhLmxlbmd0aD4yKXtpZihhWzJdIT09dm9pZCAwJiYhU2EoYVsyXSl8fGEubGVuZ3RoPjMpcmV0dXJuO2Q9YVsyXX12YXIgZT1qbChhWzFdLGIuaXNHdG1FdmVudCk7aWYoZSl7dmFyIGYsZyxrO2E6e2lmKCF6ai5tZSl7dmFyIG09S2ooTGooKSk7aWYoWmoobSkpe3ZhciBuPW0ucGFyZW50LHA9bi5pc0Rlc3RpbmF0aW9uO2s9e3ptOktqKG4pLGptOnB9O2JyZWFrIGF9fWs9dm9pZCAwfXZhciBxPWs7cSYmKGY9cS56bSxnPXEuam0pO1N3KGMuZXZlbnRJZCxcImd0YWcuY29uZmlnXCIpO3ZhciByPWUuZGVzdGluYXRpb25JZCx0PWUuaWQhPT1yO2lmKHQ/RWooKS5pbmRleE9mKHIpPT09LTE6QmooKS5pbmRleE9mKHIpPT09XG4tMSl7aWYoIWIuaW5oZXJpdFBhcmVudENvbmZpZyYmIWRbVC5nLkliXSl7dmFyIHU9WngoZCk7aWYodClrdyhyLHUse3NvdXJjZToyLGZyb21Db250YWluZXJFeGVjdXRpb246Yi5mcm9tQ29udGFpbmVyRXhlY3V0aW9ufSk7ZWxzZSBpZihmIT09dm9pZCAwJiZmLmNvbnRhaW5lcnMuaW5kZXhPZihyKSE9PS0xKXt2YXIgdj1kO1d4P1l4KGIsdixXeCk6WHh8fChYeD1oKHYsbnVsbCkpfWVsc2UgaHcocix1LCEwLHtzb3VyY2U6Mixmcm9tQ29udGFpbmVyRXhlY3V0aW9uOmIuZnJvbUNvbnRhaW5lckV4ZWN1dGlvbn0pfX1lbHNle2lmKGYmJihNKDEyOCksZyYmTSgxMzApLGIuaW5oZXJpdFBhcmVudENvbmZpZykpe3ZhciB3O3ZhciB4PWQ7WHg/KFl4KGIsWHgseCksdz0hMSk6KCF4W1QuZy5ZYl0mJm1pJiZXeHx8KFd4PWgoeCxudWxsKSksdz0hMCk7dyYmZi5jb250YWluZXJzJiZmLmNvbnRhaW5lcnMuam9pbihcIixcIik7cmV0dXJufXZhciB5PWQ7aWYoIVR4JiYoVHg9ITAsU3gpKWZvcih2YXIgQT1cbm5hKCR4KSxCPUEubmV4dCgpOyFCLmRvbmU7Qj1BLm5leHQoKSlpZih5Lmhhc093blByb3BlcnR5KEIudmFsdWUpKXtKayhcImVyY1wiKTticmVha31yaiYmIUFqJiYod3g9PT0xJiYoZGsubWNjPSExKSx3eD0yKTtHaz0hMDtpZihtaSYmIXQmJiFkW1QuZy5ZYl0pe3ZhciBDPVV4O1V4PSEwO2lmKEMpcmV0dXJufVJ4fHxNKDQzKTtpZighYi5ub1RhcmdldEdyb3VwKWlmKHQpe1B4KGUuaWQpO3ZhciBIPWUuaWQsST1kW1QuZy5XZF18fFwiZGVmYXVsdFwiO0k9U3RyaW5nKEkpLnNwbGl0KFwiLFwiKTtmb3IodmFyIEY9MDtGPEkubGVuZ3RoO0YrKyl7dmFyIE89TXhbSVtGXV18fFtdO014W0lbRl1dPU87Ty5pbmRleE9mKEgpPDAmJk8ucHVzaChIKX19ZWxzZXtPeChlLmlkKTt2YXIgTj1lLmlkLFM9ZFtULmcuV2RdfHxcImRlZmF1bHRcIjtTPVMudG9TdHJpbmcoKS5zcGxpdChcIixcIik7Zm9yKHZhciBWPTA7VjxTLmxlbmd0aDtWKyspe3ZhciBhYT1MeFtTW1ZdXXx8W107THhbU1tWXV09YWE7YWEuaW5kZXhPZihOKTxcbjAmJmFhLnB1c2goTil9fWRlbGV0ZSBkW1QuZy5XZF07dmFyIFg9Yi5ldmVudE1ldGFkYXRhfHx7fTtYLmhhc093blByb3BlcnR5KFwiaXNfZXh0ZXJuYWxfZXZlbnRcIil8fChYLmlzX2V4dGVybmFsX2V2ZW50PSFiLmZyb21Db250YWluZXJFeGVjdXRpb24pO2IuZXZlbnRNZXRhZGF0YT1YO2RlbGV0ZSBkW1QuZy5aY107Zm9yKHZhciBSPXQ/W2UuaWRdOkVqKCksbWE9MDttYTxSLmxlbmd0aDttYSsrKXt2YXIgbGE9ZCxlYT1SW21hXSx3YT1oKGIsbnVsbCksT2E9amwoZWEsd2EuaXNHdG1FdmVudCk7T2EmJmxtLnB1c2goXCJjb25maWdcIixbbGFdLE9hLHdhKX19fX19LGNvbnNlbnQ6ZnVuY3Rpb24oYSxiKXtpZihhLmxlbmd0aD09PTMpe00oMzkpO3ZhciBjPVZ4KGEsYiksZD1hWzFdLGU9YVsyXTtiLmZyb21Db250YWluZXJFeGVjdXRpb258fChlW1QuZy5PXSYmTSgxMzkpLGVbVC5nLndhXSYmTSgxNDApKTtkPT09XCJkZWZhdWx0XCI/WGsoZSk6ZD09PVwidXBkYXRlXCI/WmsoZSxjKTpkPT09XG5cImRlY2xhcmVcIiYmYi5mcm9tQ29udGFpbmVyRXhlY3V0aW9uJiZXayhlKX19LGV2ZW50OmZ1bmN0aW9uKGEsYil7dmFyIGM9YVsxXTtpZighKGEubGVuZ3RoPDIpJiZsKGMpKXt2YXIgZD12b2lkIDA7aWYoYS5sZW5ndGg+Mil7aWYoIVNhKGFbMl0pJiZhWzJdIT09dm9pZCAwfHxhLmxlbmd0aD4zKXJldHVybjtkPWFbMl19dmFyIGU9ZCxmPXt9LGc9KGYuZXZlbnQ9YyxmKTtlJiYoZy5ldmVudE1vZGVsPWgoZSxudWxsKSxlW1QuZy5aY10mJihnLmV2ZW50Q2FsbGJhY2s9ZVtULmcuWmNdKSxlW1QuZy5UZF0mJihnLmV2ZW50VGltZW91dD1lW1QuZy5UZF0pKTt2YXIgaz1WeChhLGIpLG09ay5ldmVudElkLG49ay5wcmlvcml0eUlkO2dbXCJndG0udW5pcXVlRXZlbnRJZFwiXT1tO24mJihnW1wiZ3RtLnByaW9yaXR5SWRcIl09bik7aWYoYz09PVwib3B0aW1pemUuY2FsbGJhY2tcIilyZXR1cm4gZy5ldmVudE1vZGVsPWcuZXZlbnRNb2RlbHx8e30sZzt2YXIgcDt2YXIgcT1kLHI9cSYmcVtULmcuWGJdO1xucj09PXZvaWQgMCYmKHI9SmkoVC5nLlhiLDIpLHI9PT12b2lkIDAmJihyPVwiZGVmYXVsdFwiKSk7aWYobChyKXx8QXJyYXkuaXNBcnJheShyKSl7dmFyIHQ7dD1iLmlzR3RtRXZlbnQ/bChyKT9bcl06cjpyLnRvU3RyaW5nKCkucmVwbGFjZSgvXFxzKy9nLFwiXCIpLnNwbGl0KFwiLFwiKTt2YXIgdT1OeCh0LGIuaXNHdG1FdmVudCksdj11LmttLHc9dS5vbTtpZih3Lmxlbmd0aClmb3IodmFyIHg9WngocSkseT0wO3k8dy5sZW5ndGg7eSsrKXt2YXIgQT1qbCh3W3ldLGIuaXNHdG1FdmVudCk7QSYma3coQS5kZXN0aW5hdGlvbklkLHgse3NvdXJjZTozLGZyb21Db250YWluZXJFeGVjdXRpb246Yi5mcm9tQ29udGFpbmVyRXhlY3V0aW9ufSl9cD1rbCh2LGIuaXNHdG1FdmVudCl9ZWxzZSBwPXZvaWQgMDt2YXIgQj1wO2lmKEIpe3ZhciBDOyFCLmxlbmd0aHx8KChDPWIuZXZlbnRNZXRhZGF0YSk9PW51bGw/MDpDLmVtX2V2ZW50KXx8KFN4PSEwKTtTdyhtLGMpO2Zvcih2YXIgSD1bXSxJPTA7STxCLmxlbmd0aDtJKyspe3ZhciBGPVxuQltJXSxPPWgoYixudWxsKTtpZihReC5pbmRleE9mKE1qKEYucHJlZml4KSkhPT0tMSl7dmFyIE49aChkLG51bGwpLFM9Ty5ldmVudE1ldGFkYXRhfHx7fTtTLmhhc093blByb3BlcnR5KFwiaXNfZXh0ZXJuYWxfZXZlbnRcIil8fChTLmlzX2V4dGVybmFsX2V2ZW50PSFPLmZyb21Db250YWluZXJFeGVjdXRpb24pO08uZXZlbnRNZXRhZGF0YT1TO2RlbGV0ZSBOW1QuZy5aY107bW0oYyxOLEYuaWQsTyk7cmomJiFBaiYmd3g9PT0wJiYoZmsoXCJtY2NcIixcIjFcIiksd3g9MSk7R2s9ITB9SC5wdXNoKEYuaWQpfWcuZXZlbnRNb2RlbD1nLmV2ZW50TW9kZWx8fHt9O0IubGVuZ3RoPjA/Zy5ldmVudE1vZGVsW1QuZy5YYl09SC5qb2luKCk6ZGVsZXRlIGcuZXZlbnRNb2RlbFtULmcuWGJdO1J4fHxNKDQzKTtiLm5vR3RtRXZlbnQ9PT12b2lkIDAmJmIuZXZlbnRNZXRhZGF0YSYmYi5ldmVudE1ldGFkYXRhLnN5bl9vcl9tb2QmJihiLm5vR3RtRXZlbnQ9ITApO2cuZXZlbnRNb2RlbFtULmcuVmJdJiYoYi5ub0d0bUV2ZW50PVxuITApO3JldHVybiBiLm5vR3RtRXZlbnQ/dm9pZCAwOmd9fX0sZ2V0OmZ1bmN0aW9uKGEsYil7TSg1Myk7aWYoYS5sZW5ndGg9PT00JiZsKGFbMV0pJiZsKGFbMl0pJiZvYihhWzNdKSl7dmFyIGM9amwoYVsxXSxiLmlzR3RtRXZlbnQpLGQ9U3RyaW5nKGFbMl0pLGU9YVszXTtpZihjKXtSeHx8TSg0Myk7dmFyIGY9WngoKTtpZighcmIoRWooKSxmdW5jdGlvbihrKXtyZXR1cm4gYy5kZXN0aW5hdGlvbklkPT09a30pKWt3KGMuZGVzdGluYXRpb25JZCxmLHtzb3VyY2U6NCxmcm9tQ29udGFpbmVyRXhlY3V0aW9uOmIuZnJvbUNvbnRhaW5lckV4ZWN1dGlvbn0pO2Vsc2UgaWYoUXguaW5kZXhPZihNaihjLnByZWZpeCkpIT09LTEpe0drPSEwO1Z4KGEsYik7dmFyIGc9e307aCgoZ1tULmcucmJdPWQsZ1tULmcuR2JdPWUsZyksbnVsbCk7bm0oZCxmdW5jdGlvbihrKXtHKGZ1bmN0aW9uKCl7ZShrKX0pfSxjLmlkLGIpfX19fSxqczpmdW5jdGlvbihhLGIpe2lmKGEubGVuZ3RoPT09MiYmYVsxXS5nZXRUaW1lKXtSeD1cbiEwO3ZhciBjPVZ4KGEsYiksZD1jLmV2ZW50SWQsZT1jLnByaW9yaXR5SWQsZj17fTtyZXR1cm4gZi5ldmVudD1cImd0bS5qc1wiLGZbXCJndG0uc3RhcnRcIl09YVsxXS5nZXRUaW1lKCksZltcImd0bS51bmlxdWVFdmVudElkXCJdPWQsZltcImd0bS5wcmlvcml0eUlkXCJdPWUsZn19LHBvbGljeTpmdW5jdGlvbihhKXtpZihhLmxlbmd0aD09PTMmJmwoYVsxXSkmJm9iKGFbMl0pKXtpZihMZihhWzFdLGFbMl0pLE0oNzQpLGFbMV09PT1cImFsbFwiKXtNKDc1KTt2YXIgYj0hMTt0cnl7Yj1hWzJdKEdqKCksXCJ1bmtub3duXCIse30pfWNhdGNoKGMpe31ifHxNKDc2KX19ZWxzZSBNKDczKX0sc2V0OmZ1bmN0aW9uKGEsYil7dmFyIGM9dm9pZCAwO2EubGVuZ3RoPT09MiYmU2EoYVsxXSk/Yz1oKGFbMV0sbnVsbCk6YS5sZW5ndGg9PT0zJiZsKGFbMV0pJiYoYz17fSxTYShhWzJdKXx8QXJyYXkuaXNBcnJheShhWzJdKT9jW2FbMV1dPWgoYVsyXSxudWxsKTpjW2FbMV1dPWFbMl0pO2lmKGMpe3ZhciBkPVZ4KGEsXG5iKSxlPWQuZXZlbnRJZCxmPWQucHJpb3JpdHlJZDtoKGMsbnVsbCk7dmFyIGc9aChjLG51bGwpO2xtLnB1c2goXCJzZXRcIixbZ10sdm9pZCAwLGIpO2NbXCJndG0udW5pcXVlRXZlbnRJZFwiXT1lO2YmJihjW1wiZ3RtLnByaW9yaXR5SWRcIl09Zik7ZGVsZXRlIGMuZXZlbnQ7Yi5vdmVyd3JpdGVNb2RlbEZpZWxkcz0hMDtyZXR1cm4gY319fSxieT17cG9saWN5OiEwfTt2YXIgZHk9ZnVuY3Rpb24oYSl7aWYoY3koYSkpcmV0dXJuIGE7dGhpcy52YWx1ZT1hfTtkeS5wcm90b3R5cGUuZ2V0VW50cnVzdGVkTWVzc2FnZVZhbHVlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudmFsdWV9O3ZhciBjeT1mdW5jdGlvbihhKXtyZXR1cm4hYXx8UWEoYSkhPT1cIm9iamVjdFwifHxTYShhKT8hMTpcImdldFVudHJ1c3RlZE1lc3NhZ2VWYWx1ZVwiaW4gYX07ZHkucHJvdG90eXBlLmdldFVudHJ1c3RlZE1lc3NhZ2VWYWx1ZT1keS5wcm90b3R5cGUuZ2V0VW50cnVzdGVkTWVzc2FnZVZhbHVlO3ZhciBleT0hMSxmeT1bXTtmdW5jdGlvbiBneSgpe2lmKCFleSl7ZXk9ITA7Zm9yKHZhciBhPTA7YTxmeS5sZW5ndGg7YSsrKUcoZnlbYV0pfX1mdW5jdGlvbiBoeShhKXtleT9HKGEpOmZ5LnB1c2goYSl9O3ZhciBpeT0wLGp5PXt9LGt5PVtdLGx5PVtdLG15PSExLG55PSExO2Z1bmN0aW9uIG95KGEsYil7cmV0dXJuIGEubWVzc2FnZUNvbnRleHQuZXZlbnRJZC1iLm1lc3NhZ2VDb250ZXh0LmV2ZW50SWR8fGEubWVzc2FnZUNvbnRleHQucHJpb3JpdHlJZC1iLm1lc3NhZ2VDb250ZXh0LnByaW9yaXR5SWR9XG52YXIgcHk9ZnVuY3Rpb24oYSl7cmV0dXJuIERbaGkuaGJdLnB1c2goYSl9LHF5PWZ1bmN0aW9uKGEsYixjKXthLmV2ZW50Q2FsbGJhY2s9YjtjJiYoYS5ldmVudFRpbWVvdXQ9Yyk7cmV0dXJuIHB5KGEpfSxyeT1mdW5jdGlvbihhLGIpe2lmKCFwYihiKXx8YjwwKWI9MDt2YXIgYz1paVtoaS5oYl0sZD0wLGU9ITEsZj12b2lkIDA7Zj1ELnNldFRpbWVvdXQoZnVuY3Rpb24oKXtlfHwoZT0hMCxhKCkpO2Y9dm9pZCAwfSxiKTtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgZz1jP2Muc3Vic2NyaWJlcnM6MTsrK2Q9PT1nJiYoZiYmKEQuY2xlYXJUaW1lb3V0KGYpLGY9dm9pZCAwKSxlfHwoYSgpLGU9ITApKX19O1xuZnVuY3Rpb24gc3koYSxiKXt2YXIgYz1hLl9jbGVhcnx8Yi5vdmVyd3JpdGVNb2RlbEZpZWxkczt6KGEsZnVuY3Rpb24oZSxmKXtlIT09XCJfY2xlYXJcIiYmKGMmJk1pKGUpLE1pKGUsZikpfSk7dml8fCh2aT1hW1wiZ3RtLnN0YXJ0XCJdKTt2YXIgZD1hW1wiZ3RtLnVuaXF1ZUV2ZW50SWRcIl07aWYoIWEuZXZlbnQpcmV0dXJuITE7dHlwZW9mIGQhPT1cIm51bWJlclwiJiYoZD16aSgpLGFbXCJndG0udW5pcXVlRXZlbnRJZFwiXT1kLE1pKFwiZ3RtLnVuaXF1ZUV2ZW50SWRcIixkKSk7cmV0dXJuIHZ4KGEpfWZ1bmN0aW9uIHR5KGEpe2lmKGE9PW51bGx8fHR5cGVvZiBhIT09XCJvYmplY3RcIilyZXR1cm4hMTtpZihhLmV2ZW50KXJldHVybiEwO2lmKHZiKGEpKXt2YXIgYj1hWzBdO2lmKGI9PT1cImNvbmZpZ1wifHxiPT09XCJldmVudFwifHxiPT09XCJqc1wifHxiPT09XCJnZXRcIilyZXR1cm4hMH1yZXR1cm4hMX1cbmZ1bmN0aW9uIHV5KCl7dmFyIGE7aWYobHkubGVuZ3RoKWE9bHkuc2hpZnQoKTtlbHNlIGlmKGt5Lmxlbmd0aClhPWt5LnNoaWZ0KCk7ZWxzZSByZXR1cm47dmFyIGI7dmFyIGM9YTtpZihteXx8IXR5KGMubWVzc2FnZSkpYj1jO2Vsc2V7bXk9ITA7dmFyIGQ9Yy5tZXNzYWdlW1wiZ3RtLnVuaXF1ZUV2ZW50SWRcIl07dHlwZW9mIGQhPT1cIm51bWJlclwiJiYoZD1jLm1lc3NhZ2VbXCJndG0udW5pcXVlRXZlbnRJZFwiXT16aSgpKTt2YXIgZT17fSxmPXttZXNzYWdlOihlLmV2ZW50PVwiZ3RtLmluaXRfY29uc2VudFwiLGVbXCJndG0udW5pcXVlRXZlbnRJZFwiXT1kLTIsZSksbWVzc2FnZUNvbnRleHQ6e2V2ZW50SWQ6ZC0yfX0sZz17fSxrPXttZXNzYWdlOihnLmV2ZW50PVwiZ3RtLmluaXRcIixnW1wiZ3RtLnVuaXF1ZUV2ZW50SWRcIl09ZC0xLGcpLG1lc3NhZ2VDb250ZXh0OntldmVudElkOmQtMX19O2t5LnVuc2hpZnQoayxjKTtpZihyail7aWYoIVEoOTMpKXt2YXIgbT1tdygpO20mJmx3LnB1c2gobSl9amsoKX1iPVxuZn1yZXR1cm4gYn1cbmZ1bmN0aW9uIHZ5KCl7Zm9yKHZhciBhPSExLGI7IW55JiYoYj11eSgpKTspe255PSEwO2RlbGV0ZSBHaS5ldmVudE1vZGVsO0lpKCk7dmFyIGM9YixkPWMubWVzc2FnZSxlPWMubWVzc2FnZUNvbnRleHQ7aWYoZD09bnVsbClueT0hMTtlbHNle2UuZnJvbUNvbnRhaW5lckV4ZWN1dGlvbiYmTmkoKTt0cnl7aWYob2IoZCkpdHJ5e2QuY2FsbChLaSl9Y2F0Y2godil7fWVsc2UgaWYoQXJyYXkuaXNBcnJheShkKSl7dmFyIGY9ZDtpZihsKGZbMF0pKXt2YXIgZz1mWzBdLnNwbGl0KFwiLlwiKSxrPWcucG9wKCksbT1mLnNsaWNlKDEpLG49SmkoZy5qb2luKFwiLlwiKSwyKTtpZihuIT1udWxsKXRyeXtuW2tdLmFwcGx5KG4sbSl9Y2F0Y2godil7fX19ZWxzZXt2YXIgcD12b2lkIDA7aWYodmIoZCkpYTp7aWYoZC5sZW5ndGgmJmwoZFswXSkpe3ZhciBxPWF5W2RbMF1dO2lmKHEmJighZS5mcm9tQ29udGFpbmVyRXhlY3V0aW9ufHwhYnlbZFswXV0pKXtwPXEoZCxlKTticmVhayBhfX1wPXZvaWQgMH1lbHNlIHA9XG5kO3AmJihhPXN5KHAsZSl8fGEpfX1maW5hbGx5e2UuZnJvbUNvbnRhaW5lckV4ZWN1dGlvbiYmSWkoITApO3ZhciByPWRbXCJndG0udW5pcXVlRXZlbnRJZFwiXTtpZih0eXBlb2Ygcj09PVwibnVtYmVyXCIpe2Zvcih2YXIgdD1qeVtTdHJpbmcocildfHxbXSx1PTA7dTx0Lmxlbmd0aDt1KyspbHkucHVzaCh3eSh0W3VdKSk7dC5sZW5ndGgmJmx5LnNvcnQob3kpO2RlbGV0ZSBqeVtTdHJpbmcocildO3I+aXkmJihpeT1yKX1ueT0hMX19fXJldHVybiFhfVxuZnVuY3Rpb24geHkoKXtpZihRKDc0KSl7dmFyIGE9eXkoKTt9dmFyIGI9dnkoKTtpZihRKDc0KSl7fXRyeXt2YXIgYz1HaigpLGQ9RFtoaS5oYl0uaGlkZTtpZihkJiZkW2NdIT09dm9pZCAwJiZkLmVuZCl7ZFtjXT0hMTt2YXIgZT0hMCxmO2ZvcihmIGluIGQpaWYoZC5oYXNPd25Qcm9wZXJ0eShmKSYmZFtmXT09PVxuITApe2U9ITE7YnJlYWt9ZSYmKGQuZW5kKCksZC5lbmQ9bnVsbCl9fWNhdGNoKGcpe31yZXR1cm4gYn1mdW5jdGlvbiBLeChhKXtpZihpeTxhLm5vdEJlZm9yZUV2ZW50SWQpe3ZhciBiPVN0cmluZyhhLm5vdEJlZm9yZUV2ZW50SWQpO2p5W2JdPWp5W2JdfHxbXTtqeVtiXS5wdXNoKGEpfWVsc2UgbHkucHVzaCh3eShhKSksbHkuc29ydChveSksRyhmdW5jdGlvbigpe255fHx2eSgpfSl9ZnVuY3Rpb24gd3koYSl7cmV0dXJue21lc3NhZ2U6YS5tZXNzYWdlLG1lc3NhZ2VDb250ZXh0OmEubWVzc2FnZUNvbnRleHR9fVxudmFyIHp5PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gYShmKXt2YXIgZz17fTtpZihjeShmKSl7dmFyIGs9ZjtmPWN5KGspP2suZ2V0VW50cnVzdGVkTWVzc2FnZVZhbHVlKCk6dm9pZCAwO2cuZnJvbUNvbnRhaW5lckV4ZWN1dGlvbj0hMH1yZXR1cm57bWVzc2FnZTpmLG1lc3NhZ2VDb250ZXh0Omd9fXZhciBiPXNjKGhpLmhiLFtdKSxjPWlpW2hpLmhiXT1paVtoaS5oYl18fHt9O2MucHJ1bmVkPT09ITAmJk0oODMpO2p5PUl4KCkuZ2V0KCk7SngoKTt1dyhmdW5jdGlvbigpe2lmKCFjLmd0bURvbSl7Yy5ndG1Eb209ITA7dmFyIGY9e307Yi5wdXNoKChmLmV2ZW50PVwiZ3RtLmRvbVwiLGYpKX19KTtoeShmdW5jdGlvbigpe2lmKCFjLmd0bUxvYWQpe2MuZ3RtTG9hZD0hMDt2YXIgZj17fTtiLnB1c2goKGYuZXZlbnQ9XCJndG0ubG9hZFwiLGYpKX19KTtjLnN1YnNjcmliZXJzPShjLnN1YnNjcmliZXJzfHwwKSsxO3ZhciBkPWIucHVzaDtiLnB1c2g9ZnVuY3Rpb24oKXt2YXIgZjtpZihpaS5TQU5EQk9YRURfSlNfU0VNQVBIT1JFPlxuMCl7Zj1bXTtmb3IodmFyIGc9MDtnPGFyZ3VtZW50cy5sZW5ndGg7ZysrKWZbZ109bmV3IGR5KGFyZ3VtZW50c1tnXSl9ZWxzZSBmPVtdLnNsaWNlLmNhbGwoYXJndW1lbnRzLDApO3ZhciBrPWYubWFwKGZ1bmN0aW9uKHEpe3JldHVybiBhKHEpfSk7a3kucHVzaC5hcHBseShreSxrKTt2YXIgbT1kLmFwcGx5KGIsZiksbj1NYXRoLm1heCgxMDAsTnVtYmVyKFwiMTAwMFwiKXx8MzAwKTtpZih0aGlzLmxlbmd0aD5uKWZvcihNKDQpLGMucHJ1bmVkPSEwO3RoaXMubGVuZ3RoPm47KXRoaXMuc2hpZnQoKTt2YXIgcD10eXBlb2YgbSE9PVwiYm9vbGVhblwifHxtO3JldHVybiB2eSgpJiZwfTt2YXIgZT1iLnNsaWNlKDApLm1hcChmdW5jdGlvbihmKXtyZXR1cm4gYShmKX0pO2t5LnB1c2guYXBwbHkoa3ksZSk7aWYoeXkoKSl7aWYoUSg3NCkpe31HKHh5KX19LHl5PWZ1bmN0aW9uKCl7dmFyIGE9ITA7YT0hMTtyZXR1cm4gYX07ZnVuY3Rpb24gQXkoYSl7aWYoYT09bnVsbHx8YS5sZW5ndGg9PT0wKXJldHVybiExO3ZhciBiPU51bWJlcihhKSxjPUJiKCk7cmV0dXJuIGI8YyszRTUmJmI+Yy05RTV9ZnVuY3Rpb24gQnkoYSl7cmV0dXJuIGEmJmEuaW5kZXhPZihcInBlbmRpbmc6XCIpPT09MD9BeShhLnN1YnN0cig4KSk6ITF9O1xudmFyIEN5PWZ1bmN0aW9uKGEsYil7Zm9yKHZhciBjPTA7YzxhLmxlbmd0aDsrK2Mpe3ZhciBkPWJbY107aWYoZClmb3IodmFyIGU9MDtlPGFbY10ubGVuZ3RoOysrZSlhW2NdW2VdJiYoYVtjXVtlXVtULmcuWGNdPWQpfX0sRXk9ZnVuY3Rpb24oYSxiLGMpe3ZhciBkPUR5W2EucGFdO2R8fChRKDc4KSYmYS50PT09XCJ0cmFuc2FjdGlvblwiP2Q9VC5nLkhhOmEucHJvbW9hPT09XCJjbGlja1wiP2Q9VC5nLkRiOmIubGVuZ3RoP2Q9VC5nLmpiOmMubGVuZ3RoJiYoZD1ULmcuaWIpKTtyZXR1cm4gZH0sRnk9ZnVuY3Rpb24oYSl7dmFyIGIsYyxkLGU7c3dpdGNoKGEudCl7Y2FzZSBcImV2ZW50XCI6Yj1hLmVhO2M9YS5lYztkPWEuZWw7ZT1hLmV2O2JyZWFrO2Nhc2UgXCJwYWdldmlld1wiOmI9VC5nLlNiO2JyZWFrO2Nhc2UgXCJzY3JlZW52aWV3XCI6Yj1ULmcudWs7YnJlYWs7Y2FzZSBcInRpbWluZ1wiOmI9VC5nLnZrO2M9YS51dGM7XG5kPWEudXRsO2U9YS51dHQ7YnJlYWs7Y2FzZSBcImV4Y2VwdGlvblwiOmI9VC5nLnRrO2JyZWFrO2Nhc2UgXCJzb2NpYWxcIjpiPVQuZy53a31yZXR1cm57Tmw6YixMbDpjLE1sOmQsT2w6ZX19LE15PWZ1bmN0aW9uKGEpe3ZhciBiLGMsZCxlPWEubWF0Y2goR3kpO2lmKGUpcmV0dXJuIGI9TnVtYmVyKGVbMV0pLTEsYz1IeVtlWzJdXSx7dGg6Yix1aDpjLHZoOlwicHJvbW90aW9uXCJ9O3ZhciBmPWEubWF0Y2goSXkpO2lmKGYpcmV0dXJuIGQ9XCJwcm9kdWN0XCIsYj1OdW1iZXIoZlsxXSktMSxKeVtmWzJdXT9jPUp5W2ZbMl1dOmM9S3koZlsyXSkse3RoOmIsdWg6Yyx2aDpkfTt2YXIgZz1hLm1hdGNoKEx5KTtpZihnKXtkPVwiaW1wcmVzc2lvblwiO3ZhciBrPU51bWJlcihnWzFdKS0xO2I9TnVtYmVyKGdbMl0pLTE7dmFyIG09Z1szXTtKeVttXT9jPUp5W21dOmM9S3kobSk7cmV0dXJue3RoOmIsdWg6Yyx2aDpkLFhsOmt9fXJldHVybnt9fSxOeT1mdW5jdGlvbihhLGIsYyxkLGUpe3ZhciBmPU15KGEpLFxuZz1mLnRoLGs9Zi51aCxtPWYudmgsbj1mLlhsO2lmKCEoIWt8fCFtfHxnPT09dm9pZCAwfHxnPDB8fGc+PTIwMCkpe3ZhciBwO3N3aXRjaChtKXtjYXNlIFwicHJvbW90aW9uXCI6cD1jO2JyZWFrO2Nhc2UgXCJwcm9kdWN0XCI6cD1kO2JyZWFrO2Nhc2UgXCJpbXByZXNzaW9uXCI6aWYobjwwfHxuPj0yMDApcmV0dXJuO3A9ZX1wJiYobSE9PVwiaW1wcmVzc2lvblwiPyhwW2ddfHwocFtnXT17fSkscFtnXVtrXXx8KHBbZ11ba109YikpOm4hPT12b2lkIDAmJihwW25dfHwocFtuXT1bXSkscFtuXVtnXXx8KHBbbl1bZ109e30pLHBbbl1bZ11ba118fChwW25dW2ddW2tdPWIpKSl9fSxReT1mdW5jdGlvbihhKXtpZihPeVthXSlyZXR1cm4gT3lbYV07dmFyIGI9S3koYSk7aWYoYilyZXR1cm4gYjt2YXIgYz1hLm1hdGNoKFB5KTtpZihjKXJldHVyblwidWFfY29udGVudF9ncm91cF9cIitOdW1iZXIoY1sxXSl9LEt5PWZ1bmN0aW9uKGEpe3ZhciBiPWEubWF0Y2goUnkpLGM7aWYoYil7aWYoYlsxXT09PVwiY2RcIiljPVxuXCJ1YV9kaW1lbnNpb25cIjtlbHNlIGlmKGJbMV09PT1cImNtXCIpYz1cInVhX21ldHJpY1wiO2Vsc2UgcmV0dXJuO3ZhciBkPU51bWJlcihiWzJdKTtpZihkPj0xJiZkPD0yMDApcmV0dXJuIGMrXCJfXCIrZH19LE95PXthaWQ6VC5nLnlrLGFpaWQ6VC5nLnprLGFuOlQuZy5BayxhdjpULmcuQmssY2M6VC5nLk5jLGNkOlQuZy5xZixjaTpULmcuT2MsY2lkOlQuZy5uYixjazpULmcuVGMsY206VC5nLlBjLGNuOlQuZy5RYyxjczpULmcuU2MsY3U6VC5nLnhhLGRoOlQuZy5QaSxkbDpULmcucmEsZHA6VC5nLmZkLGRyOlQuZy5CYSxkdDpULmcuWmEsZXhkOlQuZy5FayxleGY6VC5nLkZrLHNmOlQuZy5JayxzcjpULmcuS2IsdWlkOlQuZy56YSx1bDpULmcuT2EsdXR2OlQuZy5Ia30sU3k9e2NvbDpULmcuTmQsY29zOlQuZy5mZixwYWw6VC5nLlhjLHRhOlQuZy5qZyx0Y2M6VC5nLmtnLHRpOlQuZy55YSx0czpULmcuWWMsdHQ6VC5nLmpmfSxEeT17YWRkOlQuZy5qYyxjaGVja291dDpULmcuUmIsY2hlY2tvdXRfb3B0aW9uOlQuZy5OZCxcbmNsaWNrOlQuZy5tYyxkZXRhaWw6VC5nLkxhLHB1cmNoYXNlOlQuZy5IYSxyZWZ1bmQ6VC5nLm5jLHJlbW92ZTpULmcua2N9LEh5PXtjcjpcImNyZWF0aXZlX25hbWVcIixpZDpcInByb21vdGlvbl9pZFwiLG5tOlwicHJvbW90aW9uX25hbWVcIixwczpcImNyZWF0aXZlX3Nsb3RcIn0sSnk9e2JyOlwiaXRlbV9icmFuZFwiLGNhOlwiaXRlbV9jYXRlZ29yeVwiLGNjOlwiY291cG9uXCIsaWQ6XCJpdGVtX2lkXCIsbm06XCJpdGVtX25hbWVcIixwcjpcInByaWNlXCIscHM6XCJpbmRleFwiLHF0OlwicXVhbnRpdHlcIix2YTpcIml0ZW1fdmFyaWFudFwifSxUeT17ZWE6MSxlYzoxLGVsOjEsZXY6MSxwYToxLHByb21vYToxLHQ6MSx0cjoxLHV0YzoxLHV0bDoxLHV0dDoxfSxSeT0vXihjZHxjbSkoWzEtOV1bMC05XXswLDJ9KSQvLFB5PS9eY2coWzEtNV0pJC8sR3k9L15wcm9tbyhbMS05XVswLTldezAsMn0pKGlkfGNyfG5tfHBzKSQvLEl5PS9ecHIoWzAtOV17MCwzfSkoW2Etel17Mn1bMC05XXswLDN9KSQvLEx5PS9eaWwoWzAtOV17MCwzfSlwaShbMC05XXswLDN9KShbYS16XXsyfVswLTldezAsM30pJC8sXG5VeT0vXmlsKFsxLTldWzAtOV17MCwyfSlubSQvLFZ5PWZ1bmN0aW9uKGEpe3ZhciBiPUVqKCkuZmlsdGVyKGZ1bmN0aW9uKFYpe3JldHVybiBHYihWLFwiRy1cIil9KTtpZihiLmxlbmd0aCl7dmFyIGM9e30sZD1mdW5jdGlvbihWLGFhKXthYSE9PXZvaWQgMCYmY1tWXT09PXZvaWQgMCYmKGNbVl09YWEpfSxlPXt9LGY9ZnVuY3Rpb24oVixhYSl7YWEhPT12b2lkIDAmJmVbVl09PT12b2lkIDAmJihlW1ZdPWFhKX0sZz1hLmhpdFBheWxvYWQ7aWYodHlwZW9mIGchPT1cInN0cmluZ1wiKU0oMTI2KTtlbHNle2Zvcih2YXIgaz17fSxtPVtdLG49W10scD1bXSxxPVtdLHI9Zy5zcGxpdChcIiZcIiksdD0wO3Q8ci5sZW5ndGg7Kyt0KXt2YXIgdT1yW3RdLnNwbGl0KFwiPVwiKSx2PXVbMF18fFwiXCIsdz1kZWNvZGVVUklDb21wb25lbnQodVsxXXx8XCJcIik7aWYodiE9PVwiXCImJnchPT1cIlwiKWlmKFR5W3ZdJiYha1t2XSlrW3ZdPXc7ZWxzZSBpZihTeVt2XSlmKFN5W3ZdLHcpO2Vsc2V7dmFyIHg9UXkodik7aWYoeClkKHgsXG53KTtlbHNle3ZhciB5PXYubWF0Y2goVXkpO2lmKHkpe3ZhciBBPU51bWJlcih5WzFdKS0xO0E+PTAmJkE8MjAwJiYhcVtBXSYmKHFbQV09dyl9ZWxzZSBOeSh2LHcsbSxuLHApfX19dmFyIEI9RnkoayksQz1CLk5sLEg9Qi5MbCxJPUIuTWwsRj1CLk9sLE87aWYoay5wYXx8ay5wcm9tb2F8fG0ubGVuZ3RofHxwLmxlbmd0aHx8IUMpTz1FeShrLG0scCk7TyYmay50ciYmZihULmcubGEsay50cik7dmFyIE47Tz09PVQuZy5EYnx8Tz09PVQuZy5qYj9OPW06Tz09PVQuZy5pYj8oQ3kocCxxKSxOPUFycmF5LnByb3RvdHlwZS5jb25jYXQuYXBwbHkoW10scCkpOk8mJihOPW4pO04mJk4ubGVuZ3RoJiZmKFQuZy5kYSxOLmZpbHRlcihmdW5jdGlvbihWKXtyZXR1cm4hIVZ9KSk7aWYoQ3x8Tyl7ZChULmcuQ2ssSCk7ZChULmcuRGssSSk7ZChULmcubGEsRik7ZChULmcuY2YsYS5hbGxvd0FkRmVhdHVyZXMpO2QoVC5nLmphLGEuYWxsb3dBZFBlcnNvbmFsaXphdGlvblNpZ25hbHMpO2QoVC5nLlZhLFxuYS5jb29raWVEb21haW4pO2QoVC5nLk1hLGEuY29va2llRXhwaXJlcyk7ZChULmcuWWEsYS5jb29raWVGbGFncyk7ZChULmcuRmIsYS5jb29raWVQYXRoKTtkKFQuZy5OYSxhLmNvb2tpZU5hbWU9PT1cIl9nYVwiP3ZvaWQgMDphLmNvb2tpZU5hbWUpO2QoVC5nLnFjLGEuY29va2llVXBkYXRlKTtkKFQuZy5WYiwhMCk7QyYmQyE9PU8mJnB5KEF4KGIsQyxjKSk7dmFyIFM9aChjKTtoKGUsUyk7TyYmcHkoQXgoYixPLFMpKX1lbHNlIE0oMTI2KX19fTtcbnZhciBXeT1mdW5jdGlvbigpe2lmKFEoOTcpKXJldHVybjt2YXIgYT1zYyhcImdvb2dsZV90YWdfZGF0YVwiLHt9KSxiPWEuc2xxJiZhLnNscVtHaigpXSYmYS5zbHFbR2ooKV0ucTtpZighQXJyYXkuaXNBcnJheShiKSlyZXR1cm47Zm9yKHZhciBjPTA7YzxiLmxlbmd0aDtjKyspe3ZhciBkPWJbY107U2EoZCkmJlZ5KGQpfWIubGVuZ3RoPTA7Yi5wdXNoPWZ1bmN0aW9uKCl7Zm9yKHZhciBlPTA7ZTxhcmd1bWVudHMubGVuZ3RoO2UrKyl7dmFyIGY9YXJndW1lbnRzW2VdO1NhKGYpJiZWeShmKX1yZXR1cm4gMH07fTt2YXIgWHk9ZnVuY3Rpb24oKXt9O1h5LnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVyblwidW5kZWZpbmVkXCJ9O3ZhciBZeT1uZXcgWHk7ZnVuY3Rpb24gZXooYSxiKXtmdW5jdGlvbiBjKGcpe3ZhciBrPWFqKGcpLG09VmkoayxcInByb3RvY29sXCIpLG49VmkoayxcImhvc3RcIiwhMCkscD1WaShrLFwicG9ydFwiKSxxPVZpKGssXCJwYXRoXCIpLnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvXFwvJC8sXCJcIik7aWYobT09PXZvaWQgMHx8bT09PVwiaHR0cFwiJiZwPT09XCI4MFwifHxtPT09XCJodHRwc1wiJiZwPT09XCI0NDNcIiltPVwid2ViXCIscD1cImRlZmF1bHRcIjtyZXR1cm5bbSxuLHAscV19Zm9yKHZhciBkPWMoU3RyaW5nKGEpKSxlPWMoU3RyaW5nKGIpKSxmPTA7ZjxkLmxlbmd0aDtmKyspaWYoZFtmXSE9PWVbZl0pcmV0dXJuITE7cmV0dXJuITB9XG5mdW5jdGlvbiBmeihhKXtyZXR1cm4gZ3ooYSk/MTowfVxuZnVuY3Rpb24gZ3ooYSl7dmFyIGI9YS5hcmcwLGM9YS5hcmcxO2lmKGEuYW55X29mJiZBcnJheS5pc0FycmF5KGMpKXtmb3IodmFyIGQ9MDtkPGMubGVuZ3RoO2QrKyl7dmFyIGU9aChhLHt9KTtoKHthcmcxOmNbZF0sYW55X29mOnZvaWQgMH0sZSk7aWYoZnooZSkpcmV0dXJuITB9cmV0dXJuITF9c3dpdGNoKGFbXCJmdW5jdGlvblwiXSl7Y2FzZSBcIl9jblwiOnJldHVybiBuZyhiLGMpO2Nhc2UgXCJfY3NzXCI6dmFyIGY7YTp7aWYoYil0cnl7Zm9yKHZhciBnPTA7ZzxqZy5sZW5ndGg7ZysrKXt2YXIgaz1qZ1tnXTtpZihiW2tdIT1udWxsKXtmPWJba10oYyk7YnJlYWsgYX19fWNhdGNoKG0pe31mPSExfXJldHVybiBmO2Nhc2UgXCJfZXdcIjpyZXR1cm4ga2coYixjKTtjYXNlIFwiX2VxXCI6cmV0dXJuIG9nKGIsYyk7Y2FzZSBcIl9nZVwiOnJldHVybiBwZyhiLGMpO2Nhc2UgXCJfZ3RcIjpyZXR1cm4gcmcoYixjKTtjYXNlIFwiX2xjXCI6cmV0dXJuIFN0cmluZyhiKS5zcGxpdChcIixcIikuaW5kZXhPZihTdHJpbmcoYykpPj1cbjA7Y2FzZSBcIl9sZVwiOnJldHVybiBxZyhiLGMpO2Nhc2UgXCJfbHRcIjpyZXR1cm4gc2coYixjKTtjYXNlIFwiX3JlXCI6cmV0dXJuIG1nKGIsYyxhLmlnbm9yZV9jYXNlKTtjYXNlIFwiX3N3XCI6cmV0dXJuIHRnKGIsYyk7Y2FzZSBcIl91bVwiOnJldHVybiBleihiLGMpfXJldHVybiExfTtmdW5jdGlvbiBoeigpe3ZhciBhO2E9YT09PXZvaWQgMD9cIlwiOmE7dmFyIGIsYztyZXR1cm4oKGI9ZGF0YSk9PW51bGw/MDooYz1iLmJsb2IpPT1udWxsPzA6Yy5oYXNPd25Qcm9wZXJ0eSgxKSk/U3RyaW5nKGRhdGEuYmxvYlsxXSk6YX07ZnVuY3Rpb24gaXooKXt2YXIgYT1bW1wiY3ZcIixRKDEwMik/aHooKTpcIjJcIl0sW1wicnZcIixoaS5SZ10sW1widGNcIixrZi5maWx0ZXIoZnVuY3Rpb24oYil7cmV0dXJuIGJ9KS5sZW5ndGhdXTtoaS5wZSYmYS5wdXNoKFtcInhcIixoaS5wZV0pO0JpLmomJmEucHVzaChbXCJ0YWdfZXhwXCIsQmkual0pO3JldHVybiBhfTt2YXIgano9e30sa3o9e307ZnVuY3Rpb24gbHooKXt2YXIgYT0wO3JldHVybiBmdW5jdGlvbihiKXtzd2l0Y2goYil7Y2FzZSAxOmF8PTE7YnJlYWs7Y2FzZSAyOmF8PTI7YnJlYWs7Y2FzZSAzOmF8PTR9cmV0dXJuIGF9fWZ1bmN0aW9uIG16KGEsYixjLGQpe2lmKHFqKXt2YXIgZT1TdHJpbmcoYykrYjtqelthXT1qelthXXx8W107anpbYV0ucHVzaChlKTtrelthXT1relthXXx8W107a3pbYV0ucHVzaChkK2IpfX1mdW5jdGlvbiBueihhKXt2YXIgYj1hLmV2ZW50SWQsYz1hLmhjLGQ9W10sZT1qeltiXXx8W107ZS5sZW5ndGgmJmQucHVzaChbXCJoZlwiLGUuam9pbihcIi5cIildKTt2YXIgZj1reltiXXx8W107Zi5sZW5ndGgmJmQucHVzaChbXCJodFwiLGYuam9pbihcIi5cIildKTtjJiYoZGVsZXRlIGp6W2JdLGRlbGV0ZSBreltiXSk7cmV0dXJuIGR9O2Z1bmN0aW9uIG96KCl7cmV0dXJuITF9ZnVuY3Rpb24gcHooKXt2YXIgYT17fTtyZXR1cm4gZnVuY3Rpb24oYixjLGQpe319O2Z1bmN0aW9uIHF6KCl7dmFyIGE9cno7cmV0dXJuIGZ1bmN0aW9uKGIsYyxkKXt2YXIgZT1kJiZkLmV2ZW50O3N6KGMpO3ZhciBmPUdiKGIsXCJfX2N2dF9cIik/dm9pZCAwOjEsZz1uZXcgWWE7eihjLGZ1bmN0aW9uKHIsdCl7dmFyIHU9ZGQodCx2b2lkIDAsZik7dT09PXZvaWQgMCYmdCE9PXZvaWQgMCYmTSg0NCk7Zy5zZXQocix1KX0pO2Euai5qLkQ9RGYoKTt2YXIgaz17QWo6U2YoYiksZXZlbnRJZDplPT1udWxsP3ZvaWQgMDplLmlkLHByaW9yaXR5SWQ6ZSE9PXZvaWQgMD9lLnByaW9yaXR5SWQ6dm9pZCAwLHVlOmUhPT12b2lkIDA/ZnVuY3Rpb24ocil7ZS5hYy51ZShyKX06dm9pZCAwLGNiOmZ1bmN0aW9uKCl7cmV0dXJuIGJ9LGxvZzpmdW5jdGlvbigpe30sQmw6e2luZGV4OmQ9PW51bGw/dm9pZCAwOmQuaW5kZXgsdHlwZTpkPT1udWxsP3ZvaWQgMDpkLnR5cGUsbmFtZTpkPT1udWxsP3ZvaWQgMDpkLm5hbWV9LEptOiEhVXYoYiwzKSxvcmlnaW5hbEV2ZW50RGF0YTplPT1udWxsP1xudm9pZCAwOmUub3JpZ2luYWxFdmVudERhdGF9O2UmJmUuY2FjaGVkTW9kZWxWYWx1ZXMmJihrLmNhY2hlZE1vZGVsVmFsdWVzPXtndG06ZS5jYWNoZWRNb2RlbFZhbHVlcy5ndG0sZWNvbW1lcmNlOmUuY2FjaGVkTW9kZWxWYWx1ZXMuZWNvbW1lcmNlfSk7aWYob3ooKSl7dmFyIG09cHooKSxuLHA7ay5TYT17UGg6W10sdmU6e30seGI6ZnVuY3Rpb24ocix0LHUpe3Q9PT0xJiYobj1yKTt0PT09NyYmKHA9dSk7bShyLHQsdSl9LFFmOmJoKCl9O2subG9nPWZ1bmN0aW9uKHIpe3ZhciB0PXphLmFwcGx5KDEsYXJndW1lbnRzKTtuJiZtKG4sNCx7bGV2ZWw6cixzb3VyY2U6cCxtZXNzYWdlOnR9KX19dmFyIHE9Q2UoYSxrLFtiLGddKTthLmouai5EPXZvaWQgMDtxIGluc3RhbmNlb2YgQ2EmJnEudHlwZT09PVwicmV0dXJuXCImJihxPXEuZGF0YSk7cmV0dXJuIEoocSx2b2lkIDAsZil9fVxuZnVuY3Rpb24gc3ooYSl7dmFyIGI9YS5ndG1PblN1Y2Nlc3MsYz1hLmd0bU9uRmFpbHVyZTtvYihiKSYmKGEuZ3RtT25TdWNjZXNzPWZ1bmN0aW9uKCl7RyhiKX0pO29iKGMpJiYoYS5ndG1PbkZhaWx1cmU9ZnVuY3Rpb24oKXtHKGMpfSl9O2Z1bmN0aW9uIHR6KGEsYil7dmFyIGM9dGhpczt9dHouVD1cImFkZENvbnNlbnRMaXN0ZW5lclwiO3ZhciB1ej0hMTtmdW5jdGlvbiB2eihhKXtmb3IodmFyIGI9MDtiPGEubGVuZ3RoOysrYilpZih1eil0cnl7YVtiXSgpfWNhdGNoKGMpe00oNzcpfWVsc2UgYVtiXSgpfWZ1bmN0aW9uIHd6KGEsYixjKXt2YXIgZD10aGlzLGU7cmV0dXJuIGV9d3ouSj1cImludGVybmFsLmFkZERhdGFMYXllckV2ZW50TGlzdGVuZXJcIjtmdW5jdGlvbiB4eihhLGIsYyl7fXh6LlQ9XCJhZGREb2N1bWVudEV2ZW50TGlzdGVuZXJcIjtmdW5jdGlvbiB5eihhLGIsYyxkKXt9eXouVD1cImFkZEVsZW1lbnRFdmVudExpc3RlbmVyXCI7ZnVuY3Rpb24genooYSl7cmV0dXJuIGEuRi5qfTtmdW5jdGlvbiBBeihhKXt9QXouVD1cImFkZEV2ZW50Q2FsbGJhY2tcIjtcbmZ1bmN0aW9uIFF6KGEpe31Rei5KPVwiaW50ZXJuYWwuYWRkRm9ybUFiYW5kb25tZW50TGlzdGVuZXJcIjtmdW5jdGlvbiBSeihhLGIsYyxkKXt9XG5Sei5KPVwiaW50ZXJuYWwuYWRkRm9ybURhdGFcIjt2YXIgU3o9e30sVHo9W10sVXo9e30sVno9MCxXej0wO1xuZnVuY3Rpb24gY0EoYSxiKXt9Y0EuSj1cImludGVybmFsLmFkZEZvcm1JbnRlcmFjdGlvbkxpc3RlbmVyXCI7XG5mdW5jdGlvbiBqQShhLGIpe31qQS5KPVwiaW50ZXJuYWwuYWRkRm9ybVN1Ym1pdExpc3RlbmVyXCI7XG52YXIga0E9ZnVuY3Rpb24oYSl7cmV0dXJuIGEhPW51bGwmJmEubGVuZ3RoIT09dm9pZCAwJiZvYihhLnB1c2gpfSxuQT1mdW5jdGlvbihhKXt2YXIgYj1sQS5leGVjKGFbMF0pO2lmKCFiKXJldHVybiBudWxsO3ZhciBjPWJbMl07aWYoYyE9PXZvaWQgMCYmYy5tYXRjaCgvXihndG1cXGQrfGd0YWdfLispJC8pKXJldHVybiBudWxsO3ZhciBkLGU7bChhWzFdKT8oZD1hWzFdLGU9W10uc2xpY2UuY2FsbChhLDIpKTooZD1hWzFdJiZhWzFdLmhpdFR5cGUsZT1bXS5zbGljZS5jYWxsKGEsMSkpO2lmKCFkKXJldHVybiBudWxsO3ZhciBmO3ZhciBnPW1BW2RdLGs9ZTtpZihrLmxlbmd0aD09PTEmJmtbMF0hPW51bGwmJnR5cGVvZiBrWzBdPT09XCJvYmplY3RcIilmPWtbMF07ZWxzZXtmb3IodmFyIG09e30sbj1NYXRoLm1pbihnP2cubGVuZ3RoKzE6MSxrLmxlbmd0aCkscD0wO3A8bjtwKyspaWYodHlwZW9mIGtbcF09PT1cIm9iamVjdFwiKXtmb3IodmFyIHEgaW4ga1twXSlrW3BdLmhhc093blByb3BlcnR5KHEpJiZcbihtW3FdPWtbcF1bcV0pO2JyZWFrfWVsc2UgZyYmcDxnLmxlbmd0aCYmKG1bZ1twXV09a1twXSk7Zj1tfXZhciByPWY7ci5oaXRUeXBlPWQ7cmV0dXJue0dlOmQsRGU6cn19LGxBPS9eKCguKylcXC4pP3NlbmQkLyxtQT17cGFnZXZpZXc6W1wicGFnZVwiXSxldmVudDpbXCJldmVudENhdGVnb3J5XCIsXCJldmVudEFjdGlvblwiLFwiZXZlbnRMYWJlbFwiLFwiZXZlbnRWYWx1ZVwiXSxzb2NpYWw6W1wic29jaWFsTmV0d29ya1wiLFwic29jaWFsQWN0aW9uXCIsXCJzb2NpYWxUYXJnZXRcIl0sdGltaW5nOltcInRpbWluZ0NhdGVnb3J5XCIsXCJ0aW1pbmdWYXJcIixcInRpbWluZ1ZhbHVlXCIsXCJ0aW1pbmdMYWJlbFwiXX07XG5mdW5jdGlvbiBvQShhKXtLKHRoaXMuZ2V0TmFtZSgpLFtcImR1c3RDYWxsYmFjazohRm5cIl0sYXJndW1lbnRzKTtMKHRoaXMsXCJhY2Nlc3NfZ2xvYmFsc1wiLFwicmVhZFwiLFwiR29vZ2xlQW5hbHl0aWNzT2JqZWN0XCIpO0wodGhpcyxcImFjY2Vzc19nbG9iYWxzXCIsXCJyZWFkd3JpdGVcIixcImdhLnFcIik7TCh0aGlzLFwiYWNjZXNzX2dsb2JhbHNcIixcImV4ZWN1dGVcIixcImdhLnFcIik7dmFyIGI9MCxjPUooYSk7RyhmdW5jdGlvbigpe3ZhciBkPUd3KCk7aWYoZCYma0EoZC5xKSl7Zm9yKHZhciBlPWQucSxmPTA7ZjxlLmxlbmd0aDtmKyspe3ZhciBnPW5BKGVbZl0pO2IrKztnIT09bnVsbCYmYyhnLkdlLGcuRGUpfXZhciBrPWUucHVzaDtlLnB1c2g9ZnVuY3Rpb24oKXt2YXIgbT1HdygpLG49W10uc2xpY2UuY2FsbChhcmd1bWVudHMsMCk7ay5hcHBseShlLG4pO2lmKG0mJmI+PW0ucS5sZW5ndGgrXG4obS5xZHx8MCkpcmV0dXJuIDA7dmFyIHA9bkEuYXBwbHkodGhpcyxuKTtiKys7aWYocD09PW51bGwpcmV0dXJuIDA7YyhwLkdlLHAuRGUpO3JldHVybiAwfX19KTt9b0EuSj1cImludGVybmFsLmFkZEdhU2VuZExpc3RlbmVyXCI7ZnVuY3Rpb24gcEEoYSl7aWYoIWEpcmV0dXJue307dmFyIGI9YS5CbDtyZXR1cm4gd3coYi50eXBlLGIuaW5kZXgsYi5uYW1lKX1mdW5jdGlvbiBxQShhKXtyZXR1cm4gYT97b3JpZ2luYXRpbmdFbnRpdHk6cEEoYSl9Ont9fTtmdW5jdGlvbiB5QShhKXt2YXIgYj1paS56b25lcztyZXR1cm4gYj9iLmdldElzQWxsb3dlZEZuKEJqKCksYSk6ZnVuY3Rpb24oKXtyZXR1cm4hMH19XG5mdW5jdGlvbiB6QSgpe1h2KElqKCksZnVuY3Rpb24oYSl7dmFyIGI9YS5vcmlnaW5hbEV2ZW50RGF0YVtcImd0bS51bmlxdWVFdmVudElkXCJdLGM9aWkuem9uZXM7cmV0dXJuIGM/Yy5pc0FjdGl2ZShCaigpLGIpOiEwfSk7VnYoSWooKSxmdW5jdGlvbihhKXt2YXIgYixjO2I9YS5lbnRpdHlJZDtjPWEuc2VjdXJpdHlHcm91cHM7cmV0dXJuIHlBKE51bWJlcihhLm9yaWdpbmFsRXZlbnREYXRhW1wiZ3RtLnVuaXF1ZUV2ZW50SWRcIl0pKShiLGMpfSl9O3ZhciBBQT1mdW5jdGlvbihhLGIpe3RoaXMudGFnSWQ9YTt0aGlzLnhlPWJ9O1xuZnVuY3Rpb24gQkEoYSxiKXt2YXIgYz10aGlzLGQ7cmV0dXJuIGR9XG5CQS5KPVwiaW50ZXJuYWwubG9hZEdvb2dsZVRhZ1wiO2Z1bmN0aW9uIENBKGEpe3JldHVybiBuZXcgV2MoXCJcIixmdW5jdGlvbihiKXt2YXIgYz10aGlzLmV2YWx1YXRlKGIpO2lmKGMgaW5zdGFuY2VvZiBXYylyZXR1cm4gbmV3IFdjKFwiXCIsZnVuY3Rpb24oKXt2YXIgZD16YS5hcHBseSgwLGFyZ3VtZW50cyksZT10aGlzLGY9aCh6eih0aGlzKSxudWxsKTtmLmV2ZW50SWQ9YS5ldmVudElkO2YucHJpb3JpdHlJZD1hLnByaW9yaXR5SWQ7Zi5vcmlnaW5hbEV2ZW50RGF0YT1hLm9yaWdpbmFsRXZlbnREYXRhO3ZhciBnPWQubWFwKGZ1bmN0aW9uKG0pe3JldHVybiBlLmV2YWx1YXRlKG0pfSksaz1JYSh0aGlzLkYpO2suaj1mO3JldHVybiBjLmZiLmFwcGx5KGMsW2tdLmNvbmNhdChwYShnKSkpfSl9KX07ZnVuY3Rpb24gREEoYSxiLGMpe3ZhciBkPXRoaXM7fURBLko9XCJpbnRlcm5hbC5hZGRHb29nbGVUYWdSZXN0cmljdGlvblwiO3ZhciBFQT17fSxGQT1bXTtcbmZ1bmN0aW9uIE1BKGEsYil7fVxuTUEuSj1cImludGVybmFsLmFkZEhpc3RvcnlDaGFuZ2VMaXN0ZW5lclwiO2Z1bmN0aW9uIE5BKGEsYixjKXt9TkEuVD1cImFkZFdpbmRvd0V2ZW50TGlzdGVuZXJcIjtmdW5jdGlvbiBPQShhLGIpe3JldHVybiEwfU9BLlQ9XCJhbGlhc0luV2luZG93XCI7ZnVuY3Rpb24gUEEoYSxiLGMpe31QQS5KPVwiaW50ZXJuYWwuYXBwZW5kUmVtb3RlQ29uZmlnUGFyYW1ldGVyXCI7ZnVuY3Rpb24gUUEoYSl7dmFyIGI7cmV0dXJuIGJ9UUEuVD1cImNhbGxJbldpbmRvd1wiO2Z1bmN0aW9uIFJBKGEpe31SQS5UPVwiY2FsbExhdGVyXCI7ZnVuY3Rpb24gU0EoYSl7fVNBLko9XCJjYWxsT25Eb21SZWFkeVwiO2Z1bmN0aW9uIFRBKGEpe31UQS5KPVwiY2FsbE9uV2luZG93TG9hZFwiO2Z1bmN0aW9uIFVBKGEsYil7dmFyIGM7cmV0dXJuIGN9VUEuSj1cImludGVybmFsLmNvbXB1dGVHdG1QYXJhbWV0ZXJcIjtmdW5jdGlvbiBWQShhKXt2YXIgYjtyZXR1cm4gYn1WQS5KPVwiaW50ZXJuYWwuY29weUZyb21Dcm9zc0NvbnRhaW5lckRhdGFcIjtmdW5jdGlvbiBXQShhLGIpe3ZhciBjO3ZhciBkPWRkKGMsdGhpcy5GLEdiKHp6KHRoaXMpLmNiKCksXCJfX2N2dF9cIik/MjoxKTtkPT09dm9pZCAwJiZjIT09dm9pZCAwJiZNKDQ1KTtyZXR1cm4gZH1XQS5UPVwiY29weUZyb21EYXRhTGF5ZXJcIjtcbmZ1bmN0aW9uIFhBKGEpe3ZhciBiPXZvaWQgMDtyZXR1cm4gYn1YQS5KPVwiaW50ZXJuYWwuY29weUZyb21EYXRhTGF5ZXJDYWNoZVwiO2Z1bmN0aW9uIFlBKGEpe3ZhciBiO3JldHVybiBifVlBLlQ9XCJjb3B5RnJvbVdpbmRvd1wiO2Z1bmN0aW9uIFpBKGEpe3ZhciBiPXZvaWQgMDtyZXR1cm4gZGQoYix0aGlzLkYsMSl9WkEuSj1cImludGVybmFsLmNvcHlLZXlGcm9tV2luZG93XCI7dmFyICRBPWZ1bmN0aW9uKGEsYixjKXt0aGlzLmV2ZW50TmFtZT1iO3RoaXMubT1jO3RoaXMubz17fTt0aGlzLmlzQWJvcnRlZD0hMTt0aGlzLnRhcmdldD1hO3RoaXMubWV0YWRhdGE9aChjLmV2ZW50TWV0YWRhdGF8fHt9LHt9KX07JEEucHJvdG90eXBlLmNvcHlUb0hpdERhdGE9ZnVuY3Rpb24oYSxiLGMpe3ZhciBkPVUodGhpcy5tLGEpO2Q9PT12b2lkIDAmJihkPWIpO2lmKGQhPT12b2lkIDAmJmMhPT12b2lkIDAmJmwoZCkmJlEoNjgpKXRyeXtkPWMoZCl9Y2F0Y2goZSl7fWQhPT12b2lkIDAmJih0aGlzLm9bYV09ZCl9O3ZhciBVcz1mdW5jdGlvbihhLGIsYyl7dmFyIGQ9WHIoYS50YXJnZXQuZGVzdGluYXRpb25JZCk7cmV0dXJuIGQmJmRbYl0hPT12b2lkIDA/ZFtiXTpjfTtmdW5jdGlvbiBhQihhLGIpe3ZhciBjO0sodGhpcy5nZXROYW1lKCksW1wicHJlSGl0OiFQaXhpZU1hcFwiLFwiZHVzdE9wdGlvbnM6P1BpeGllTWFwXCJdLGFyZ3VtZW50cyk7dmFyIGQ9SihiKXx8e30sZT1KKGEsdGhpcy5GLDEpLklqKCksZj1lLm07ZC5vbWl0RXZlbnRDb250ZXh0JiYoZj1SbChuZXcgR2woZS5tLmV2ZW50SWQsZS5tLnByaW9yaXR5SWQpKSk7dmFyIGc9bmV3ICRBKGUudGFyZ2V0LGUuZXZlbnROYW1lLGYpO2Qub21pdEhpdERhdGF8fGgoZS5vLGcubyk7ZC5vbWl0TWV0YWRhdGE/Zy5tZXRhZGF0YT17fTpoKGUubWV0YWRhdGEsZy5tZXRhZGF0YSk7Zy5pc0Fib3J0ZWQ9ZS5pc0Fib3J0ZWQ7Yz1kZChOcihnKSx0aGlzLkYsMSk7cmV0dXJuIGN9YUIuSj1cImludGVybmFsLmNvcHlQcmVIaXRcIjtmdW5jdGlvbiBiQihhLGIpe3ZhciBjPW51bGw7cmV0dXJuIGRkKGMsdGhpcy5GLDIpfWJCLlQ9XCJjcmVhdGVBcmd1bWVudHNRdWV1ZVwiO2Z1bmN0aW9uIGNCKGEpe3JldHVybiBkZChmdW5jdGlvbihjKXt2YXIgZD1HdygpO2lmKHR5cGVvZiBjPT09XCJmdW5jdGlvblwiKWQoZnVuY3Rpb24oKXtjKGZ1bmN0aW9uKGYsZyxrKXt2YXIgbT1HdygpLG49bSYmbS5nZXRCeU5hbWUmJlxubS5nZXRCeU5hbWUoZik7cmV0dXJuIHdtKEQuZ2FwbHVnaW5zLkxpbmtlcixuKS5kZWNvcmF0ZShnLGspfSl9KTtlbHNlIGlmKEFycmF5LmlzQXJyYXkoYykpe3ZhciBlPVN0cmluZyhjWzBdKS5zcGxpdChcIi5cIik7YltlLmxlbmd0aD09PTE/ZVswXTplWzFdXSYmZC5hcHBseShudWxsLGMpfWVsc2UgaWYoYz09PVwiaXNMb2FkZWRcIilyZXR1cm4hIWQubG9hZGVkfSx0aGlzLkYsMSl9Y0IuSj1cImludGVybmFsLmNyZWF0ZUdhQ29tbWFuZFF1ZXVlXCI7ZnVuY3Rpb24gZEIoYSl7cmV0dXJuIGRkKGZ1bmN0aW9uKCl7aWYoIW9iKGUucHVzaCkpdGhyb3cgRXJyb3IoXCJPYmplY3QgYXQgXCIrYStcIiBpbiB3aW5kb3cgaXMgbm90IGFuIGFycmF5LlwiKTtlLnB1c2guYXBwbHkoZSxBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsMCkpfSx0aGlzLkYsR2IoenoodGhpcykuY2IoKSxcblwiX19jdnRfXCIpPzI6MSl9ZEIuVD1cImNyZWF0ZVF1ZXVlXCI7ZnVuY3Rpb24gZUIoYSxiKXt2YXIgYz1udWxsO0sodGhpcy5nZXROYW1lKCksW1wicGF0dGVybjohc3RyaW5nXCIsXCJmbGFnczo/c3RyaW5nXCJdLGFyZ3VtZW50cyk7dHJ5e3ZhciBkPShifHxcIlwiKS5zcGxpdChcIlwiKS5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuXCJpZ1wiLmluZGV4T2YoZSk+PTB9KS5qb2luKFwiXCIpO2M9bmV3IGFkKG5ldyBSZWdFeHAoYSxkKSl9Y2F0Y2goZSl7fXJldHVybiBjfWVCLko9XCJpbnRlcm5hbC5jcmVhdGVSZWdleFwiO2Z1bmN0aW9uIGZCKCl7dmFyIGE9e307cmV0dXJuIGF9O2Z1bmN0aW9uIGdCKGEpe31nQi5KPVwiaW50ZXJuYWwuZGVjbGFyZUNvbnNlbnRTdGF0ZVwiO2Z1bmN0aW9uIGhCKGEpe3ZhciBiPVwiXCI7cmV0dXJuIGJ9aEIuSj1cImludGVybmFsLmRlY29kZVVybEh0bWxFbnRpdGllc1wiO2Z1bmN0aW9uIGlCKGEsYixjKXt2YXIgZDtyZXR1cm4gZH1pQi5KPVwiaW50ZXJuYWwuZGVjb3JhdGVVcmxXaXRoR2FDb29raWVzXCI7ZnVuY3Rpb24gakIoKXt9akIuSj1cImludGVybmFsLmRlZmVyQ3VzdG9tRXZlbnRzXCI7ZnVuY3Rpb24ga0IoYSl7dmFyIGI7TCh0aGlzLFwiZGV0ZWN0X3VzZXJfcHJvdmlkZWRfZGF0YVwiLFwiYXV0b1wiKTt2YXIgYz1KKGEpfHx7fSxkPXdzKHt1ZDohIWMuaW5jbHVkZVNlbGVjdG9yLHZkOiEhYy5pbmNsdWRlVmlzaWJpbGl0eSxBZTpjLmV4Y2x1ZGVFbGVtZW50U2VsZWN0b3JzLHdiOmMuZmllbGRGaWx0ZXJzLFNmOiEhYy5zZWxlY3RNdWx0aXBsZUVsZW1lbnRzfSk7Yj1uZXcgWWE7dmFyIGU9bmV3IFdhO2Iuc2V0KFwiZWxlbWVudHNcIixlKTtmb3IodmFyIGY9ZC5lbGVtZW50cyxnPTA7ZzxmLmxlbmd0aDtnKyspZS5wdXNoKGxCKGZbZ10pKTtkLkZoIT09dm9pZCAwJiZiLnNldChcInByZWZlcnJlZEVtYWlsRWxlbWVudFwiLGxCKGQuRmgpKTtiLnNldChcInN0YXR1c1wiLGQuc3RhdHVzKTtcbnJldHVybiBifVxudmFyIGxCPWZ1bmN0aW9uKGEpe3ZhciBiPW5ldyBZYTtiLnNldChcInVzZXJEYXRhXCIsYS5YKTtiLnNldChcInRhZ05hbWVcIixhLnRhZ05hbWUpO2EucXVlcnlTZWxlY3RvciE9PXZvaWQgMCYmYi5zZXQoXCJxdWVyeVNlbGVjdG9yXCIsYS5xdWVyeVNlbGVjdG9yKTthLmlzVmlzaWJsZSE9PXZvaWQgMCYmYi5zZXQoXCJpc1Zpc2libGVcIixhLmlzVmlzaWJsZSk7aWYoUSgyNikpe31lbHNlIHN3aXRjaChhLnR5cGUpe2Nhc2UgdXMuaWM6Yi5zZXQoXCJ0eXBlXCIsXCJlbWFpbFwiKX1yZXR1cm4gYn07a0IuSj1cImludGVybmFsLmRldGVjdFVzZXJQcm92aWRlZERhdGFcIjtcbmZ1bmN0aW9uIG9CKGEsYil7cmV0dXJuIGJ9b0IuSj1cImludGVybmFsLmVuYWJsZUF1dG9FdmVudE9uQ2xpY2tcIjtcbmZ1bmN0aW9uIHdCKGEsYil7cmV0dXJuIGJ9d0IuSj1cImludGVybmFsLmVuYWJsZUF1dG9FdmVudE9uRWxlbWVudFZpc2liaWxpdHlcIjtmdW5jdGlvbiB4Qigpe314Qi5KPVwiaW50ZXJuYWwuZW5hYmxlQXV0b0V2ZW50T25FcnJvclwiO3ZhciB5Qj17fSx6Qj1bXSxBQj17fSxCQj0wLENCPTA7XG5mdW5jdGlvbiBJQihhLGIpe3ZhciBjPXRoaXM7cmV0dXJuIGJ9SUIuSj1cImludGVybmFsLmVuYWJsZUF1dG9FdmVudE9uRm9ybUludGVyYWN0aW9uXCI7XG5mdW5jdGlvbiBOQihhLGIpe3ZhciBjPXRoaXM7cmV0dXJuIGJ9TkIuSj1cImludGVybmFsLmVuYWJsZUF1dG9FdmVudE9uRm9ybVN1Ym1pdFwiO1xuZnVuY3Rpb24gU0IoKXt2YXIgYT10aGlzO31TQi5KPVwiaW50ZXJuYWwuZW5hYmxlQXV0b0V2ZW50T25HYVNlbmRcIjt2YXIgVEI9e30sVUI9W107XG5mdW5jdGlvbiBhQyhhLGIpe3ZhciBjPXRoaXM7cmV0dXJuIGJ9YUMuSj1cImludGVybmFsLmVuYWJsZUF1dG9FdmVudE9uSGlzdG9yeUNoYW5nZVwiO3ZhciBiQz1bXCJodHRwOi8vXCIsXCJodHRwczovL1wiLFwiamF2YXNjcmlwdDpcIixcImZpbGU6Ly9cIl07XG5mdW5jdGlvbiBmQyhhLGIpe3ZhciBjPXRoaXM7cmV0dXJuIGJ9ZkMuSj1cImludGVybmFsLmVuYWJsZUF1dG9FdmVudE9uTGlua0NsaWNrXCI7dmFyIGdDLGhDO1xuZnVuY3Rpb24gc0MoYSxiKXt2YXIgYz10aGlzO3JldHVybiBifXNDLko9XCJpbnRlcm5hbC5lbmFibGVBdXRvRXZlbnRPblNjcm9sbFwiO2Z1bmN0aW9uIHRDKGEpe3JldHVybiBmdW5jdGlvbigpe2lmKGEubGltaXQmJmEuemg+PWEubGltaXQpYS5PZiYmRC5jbGVhckludGVydmFsKGEuT2YpO2Vsc2V7YS56aCsrO3ZhciBiPUJiKCk7cHkoe2V2ZW50OmEuZXZlbnROYW1lLFwiZ3RtLnRpbWVySWRcIjphLk9mLFwiZ3RtLnRpbWVyRXZlbnROdW1iZXJcIjphLnpoLFwiZ3RtLnRpbWVySW50ZXJ2YWxcIjphLmludGVydmFsLFwiZ3RtLnRpbWVyTGltaXRcIjphLmxpbWl0LFwiZ3RtLnRpbWVyU3RhcnRUaW1lXCI6YS5layxcImd0bS50aW1lckN1cnJlbnRUaW1lXCI6YixcImd0bS50aW1lckVsYXBzZWRUaW1lXCI6Yi1hLmVrLFwiZ3RtLnRyaWdnZXJzXCI6YS5ibn0pfX19XG5mdW5jdGlvbiB1QyhhLGIpe1xucmV0dXJuIGJ9dUMuSj1cImludGVybmFsLmVuYWJsZUF1dG9FdmVudE9uVGltZXJcIjt2YXIgaGM9a2EoW1wiZGF0YS1ndG0teXQtaW5zcGVjdGVkLVwiXSksd0M9W1wid3d3LnlvdXR1YmUuY29tXCIsXCJ3d3cueW91dHViZS1ub2Nvb2tpZS5jb21cIl0seEMseUM9ITE7XG5mdW5jdGlvbiBJQyhhLGIpe3ZhciBjPXRoaXM7cmV0dXJuIGJ9SUMuSj1cImludGVybmFsLmVuYWJsZUF1dG9FdmVudE9uWW91VHViZUFjdGl2aXR5XCI7ZnVuY3Rpb24gSkMoYSxiKXtLKHRoaXMuZ2V0TmFtZSgpLFtcImJvb2xlYW5FeHByZXNzaW9uOiFzdHJpbmdcIixcImNvbnRleHQ6P1BpeGllTWFwXCJdLGFyZ3VtZW50cyk7dmFyIGM9Yj9KKGIpOnt9LGQ9YSxlPSExO3ZhciBmPUpTT04ucGFyc2UoZCk7aWYoIWYpdGhyb3cgRXJyb3IoXCJJbnZhbGlkIGJvb2xlYW4gZXhwcmVzc2lvbiBzdHJpbmcgd2FzIGdpdmVuLlwiKTtlPVJnKGYsYyk7cmV0dXJuIGV9SkMuSj1cImludGVybmFsLmV2YWx1YXRlQm9vbGVhbkV4cHJlc3Npb25cIjt2YXIgS0M7ZnVuY3Rpb24gTEMoYSl7dmFyIGI9ITE7cmV0dXJuIGJ9TEMuSj1cImludGVybmFsLmV2YWx1YXRlTWF0Y2hpbmdSdWxlc1wiO2Z1bmN0aW9uIHNEKCl7cmV0dXJuIHpuKDcpJiZ6big5KSYmem4oMTApfTtmdW5jdGlvbiBuRShhLGIsYyxkKXt9bkUuSj1cImludGVybmFsLmV4ZWN1dGVFdmVudFByb2Nlc3NvclwiO2Z1bmN0aW9uIG9FKGEpe3ZhciBiO3JldHVybiBkZChiLHRoaXMuRiwxKX1vRS5KPVwiaW50ZXJuYWwuZXhlY3V0ZUphdmFzY3JpcHRTdHJpbmdcIjtmdW5jdGlvbiBwRShhKXt2YXIgYjtyZXR1cm4gYn07dmFyIHFFPW51bGw7XG5mdW5jdGlvbiByRSgpe3ZhciBhPW5ldyBZYTtMKHRoaXMsXCJyZWFkX2NvbnRhaW5lcl9kYXRhXCIpLFEoNDIpJiZxRT9hPXFFOihhLnNldChcImNvbnRhaW5lcklkXCIsJ0ctS1E1RURWQkoxTicpLGEuc2V0KFwidmVyc2lvblwiLCcyJyksYS5zZXQoXCJlbnZpcm9ubWVudE5hbWVcIiwnJyksYS5zZXQoXCJkZWJ1Z01vZGVcIixUZiksYS5zZXQoXCJwcmV2aWV3TW9kZVwiLFVmLmdrKSxhLnNldChcImVudmlyb25tZW50TW9kZVwiLFVmLnhsKSxhLnNldChcImZpcnN0UGFydHlTZXJ2aW5nXCIsRGkoKXx8cWkpLGEuc2V0KFwiY29udGFpbmVyVXJsXCIscmMpLGEuS2EoKSxRKDQyKSYmKHFFPWEpKTtyZXR1cm4gYX1cbnJFLlQ9XCJnZXRDb250YWluZXJWZXJzaW9uXCI7ZnVuY3Rpb24gc0UoYSxiKXtiPWI9PT12b2lkIDA/ITA6Yjt2YXIgYztyZXR1cm4gY31zRS5UPVwiZ2V0Q29va2llVmFsdWVzXCI7ZnVuY3Rpb24gdEUoKXtyZXR1cm4gTWsoKX10RS5KPVwiaW50ZXJuYWwuZ2V0Q291bnRyeUNvZGVcIjtmdW5jdGlvbiB1RSgpe3ZhciBhPVtdO2E9RWooKTtyZXR1cm4gZGQoYSl9dUUuSj1cImludGVybmFsLmdldERlc3RpbmF0aW9uSWRzXCI7ZnVuY3Rpb24gdkUoYSxiKXt2YXIgYz1udWxsO3JldHVybiBjfXZFLko9XCJpbnRlcm5hbC5nZXRFbGVtZW50QXR0cmlidXRlXCI7ZnVuY3Rpb24gd0UoYSl7dmFyIGI9bnVsbDtyZXR1cm4gYn13RS5KPVwiaW50ZXJuYWwuZ2V0RWxlbWVudEJ5SWRcIjtmdW5jdGlvbiB4RShhKXt2YXIgYj1cIlwiO3JldHVybiBifXhFLko9XCJpbnRlcm5hbC5nZXRFbGVtZW50SW5uZXJUZXh0XCI7ZnVuY3Rpb24geUUoYSxiKXt2YXIgYz1udWxsO3JldHVybiBjfXlFLko9XCJpbnRlcm5hbC5nZXRFbGVtZW50UHJvcGVydHlcIjtmdW5jdGlvbiB6RShhKXt2YXIgYjtyZXR1cm4gYn16RS5KPVwiaW50ZXJuYWwuZ2V0RWxlbWVudFZhbHVlXCI7ZnVuY3Rpb24gQUUoYSl7dmFyIGI9MDtyZXR1cm4gYn1BRS5KPVwiaW50ZXJuYWwuZ2V0RWxlbWVudFZpc2liaWxpdHlSYXRpb1wiO2Z1bmN0aW9uIEJFKGEpe3ZhciBiPW51bGw7cmV0dXJuIGJ9QkUuSj1cImludGVybmFsLmdldEVsZW1lbnRzQnlDc3NTZWxlY3RvclwiO1xuZnVuY3Rpb24gQ0UoYSl7dmFyIGI7Syh0aGlzLmdldE5hbWUoKSxbXCJrZXlQYXRoOiFzdHJpbmdcIl0sYXJndW1lbnRzKTtMKHRoaXMsXCJyZWFkX2V2ZW50X2RhdGFcIixhKTt2YXIgYzthOnt2YXIgZD1hLGU9enoodGhpcykub3JpZ2luYWxFdmVudERhdGE7aWYoZSl7Zm9yKHZhciBmPWUsZz17fSxrPXt9LG09e30sbj1bXSxwPWQuc3BsaXQoXCJcXFxcXFxcXFwiKSxxPTA7cTxwLmxlbmd0aDtxKyspe2Zvcih2YXIgcj1wW3FdLnNwbGl0KFwiXFxcXC5cIiksdD0wO3Q8ci5sZW5ndGg7dCsrKXtmb3IodmFyIHU9clt0XS5zcGxpdChcIi5cIiksdj0wO3Y8dS5sZW5ndGg7disrKW4ucHVzaCh1W3ZdKSx2IT09dS5sZW5ndGgtMSYmbi5wdXNoKG0pO3QhPT1yLmxlbmd0aC0xJiZuLnB1c2goayl9cSE9PXAubGVuZ3RoLTEmJm4ucHVzaChnKX1mb3IodmFyIHc9W10seD1cIlwiLHk9bmEobiksQT15Lm5leHQoKTshQS5kb25lO0E9XG55Lm5leHQoKSl7dmFyIEI9QS52YWx1ZTtCPT09bT8ody5wdXNoKHgpLHg9XCJcIik6eD1CPT09Zz94K1wiXFxcXFwiOkI9PT1rP3grXCIuXCI6eCtCfXgmJncucHVzaCh4KTtmb3IodmFyIEM9bmEodyksSD1DLm5leHQoKTshSC5kb25lO0g9Qy5uZXh0KCkpe2lmKGY9PW51bGwpe2M9dm9pZCAwO2JyZWFrIGF9Zj1mW0gudmFsdWVdfWM9Zn1lbHNlIGM9dm9pZCAwfWI9ZGQoYyx0aGlzLkYsMSk7cmV0dXJuIGJ9Q0UuSj1cImludGVybmFsLmdldEV2ZW50RGF0YVwiO3ZhciBERT17fTtERS5lbmFibGVBV0ZsZWRnZT1RKDI3KTtERS5lbmFibGVBZHNDb252ZXJzaW9uVmFsaWRhdGlvbj1RKDE1KTtERS5lbmFibGVBdXRvUGlpT25QaG9uZUFuZEFkZHJlc3M9USgyNik7REUuZW5hYmxlQ2FjaGVkRWNvbW1lcmNlRGF0YT1RKDMzKTtERS5lbmFibGVDY2RQcmVBdXRvUGlpRGV0ZWN0aW9uPVEoMzQpO0RFLmVuYWJsZUNsb3VkUmVjb21tZW50YXRpb25zRXJyb3JMb2dnaW5nPVEoMzUpO0RFLmVuYWJsZUNsb3VkUmVjb21tZW50YXRpb25zU2NoZW1hSW5nZXN0aW9uPVEoMzYpO0RFLmVuYWJsZUNsb3VkUmV0YWlsSW5qZWN0UHVyY2hhc2VNZXRhZGF0YT1RKDM4KTtERS5lbmFibGVDbG91ZFJldGFpbExvZ2dpbmc9USgzNyk7REUuZW5hYmxlQ2xvdWRSZXRhaWxQYWdlQ2F0ZWdvcmllcz1RKDM5KTtERS5lbmFibGVDb25zZW50RGlzY2xvc3VyZUFjdGl2aXR5PVEoNDEpO0RFLmVuYWJsZUNvbnZlcnNpb25NYXJrZXJQYWdlVmlld1JlbmFtZT1RKDQzKTtcbkRFLmVuYWJsZURDRmxlZGdlPVEoNDcpO0RFLmVuYWJsZURlY29kZVVyaT1RKDY4KTtERS5lbmFibGVEZWZlckFsbEVuaGFuY2VkTWVhc3VyZW1lbnQ9USg0OCk7REUuZW5hYmxlRG1hQmxvY2tEaXNjbG9zdXJlPVEoNTEpO0RFLmVuYWJsZUV1aWRBdXRvTW9kZT1RKDU2KTtERS5lbmFibGVGb3JtU2tpcFZhbGlkYXRpb249USg2Myk7REUuZW5hYmxlR3RtRWNNb2RlRml4PVEoNzIpO0RFLmVuYWJsZVVybERlY29kZUV2ZW50VXNhZ2U9USgxMDEpO0RFLmVuYWJsZVpvbmVDb25maWdJbkNoaWxkQ29udGFpbmVycz1RKDEwMyk7REUudXNlRW5hYmxlQXV0b0V2ZW50T25Gb3JtQXBpcz1RKDExMik7REUuYXV0b1BpaUVsaWdpYmxlPVJrKCk7ZnVuY3Rpb24gRUUoKXtyZXR1cm4gZGQoREUpfUVFLko9XCJpbnRlcm5hbC5nZXRGbGFnc1wiO2Z1bmN0aW9uIEZFKCl7cmV0dXJuIG5ldyBhZChZeSl9RkUuSj1cImludGVybmFsLmdldEh0bWxJZFwiO2Z1bmN0aW9uIEdFKGEsYil7dmFyIGM7Syh0aGlzLmdldE5hbWUoKSxbXCJ0YXJnZXRJZDohc3RyaW5nXCIsXCJuYW1lOiFzdHJpbmdcIl0sYXJndW1lbnRzKTt2YXIgZD1YcihhKXx8e307Yz1kZChkW2JdLHRoaXMuRik7cmV0dXJuIGN9R0UuSj1cImludGVybmFsLmdldFByb2R1Y3RTZXR0aW5nc1BhcmFtZXRlclwiO2Z1bmN0aW9uIEhFKGEsYil7dmFyIGM7cmV0dXJuIGN9SEUuVD1cImdldFF1ZXJ5UGFyYW1ldGVyc1wiO2Z1bmN0aW9uIElFKGEsYil7dmFyIGM7cmV0dXJuIGN9SUUuVD1cImdldFJlZmVycmVyUXVlcnlQYXJhbWV0ZXJzXCI7ZnVuY3Rpb24gSkUoYSl7dmFyIGI9XCJcIjtyZXR1cm4gYn1KRS5UPVwiZ2V0UmVmZXJyZXJVcmxcIjtmdW5jdGlvbiBLRSgpe3JldHVybiBOaygpfUtFLko9XCJpbnRlcm5hbC5nZXRSZWdpb25Db2RlXCI7ZnVuY3Rpb24gTEUoYSxiKXt2YXIgYztyZXR1cm4gY31MRS5KPVwiaW50ZXJuYWwuZ2V0UmVtb3RlQ29uZmlnUGFyYW1ldGVyXCI7ZnVuY3Rpb24gTUUoYSl7dmFyIGI9XCJcIjtyZXR1cm4gYn1NRS5UPVwiZ2V0VXJsXCI7ZnVuY3Rpb24gTkUoKXtMKHRoaXMsXCJnZXRfdXNlcl9hZ2VudFwiKTtyZXR1cm4gb2MudXNlckFnZW50fU5FLko9XCJpbnRlcm5hbC5nZXRVc2VyQWdlbnRcIjt2YXIgT0U9ITEsUEU9ZnVuY3Rpb24oYSl7dmFyIGI9YS5ldmVudE5hbWU9PT1ULmcuU2ImJkFrKCkmJlhzKGEpLGM9YS5tZXRhZGF0YS5pc19zZ3RtX3NlcnZpY2Vfd29ya2VyLGQ9YS5tZXRhZGF0YS5iYXRjaF9vbl9uYXZpZ2F0aW9uLGU9YS5tZXRhZGF0YS5pc19jb252ZXJzaW9uLGY9YS5tZXRhZGF0YS5pc19zZXNzaW9uX3N0YXJ0LGc9YS5tZXRhZGF0YS5jcmVhdGVfZGNfam9pbixrPWEubWV0YWRhdGEuY3JlYXRlX2dvb2dsZV9qb2luLG09YS5tZXRhZGF0YS5ldWlkX21vZGVfZW5hYmxlZCYmISFXcyhhKTtyZXR1cm4hKCFMYygpJiYhb2Muc2VuZEJlYWNvbnx8ZXx8bXx8Znx8Z3x8a3x8Ynx8Y3x8IWQmJk9FKX07XG52YXIgUUU9ZnVuY3Rpb24oYSl7dmFyIGI9MCxjPTA7cmV0dXJue3N0YXJ0OmZ1bmN0aW9uKCl7Yj1CYigpfSxzdG9wOmZ1bmN0aW9uKCl7Yz10aGlzLmdldCgpfSxnZXQ6ZnVuY3Rpb24oKXt2YXIgZD0wO2Euc2goKSYmKGQ9QmIoKS1iKTtyZXR1cm4gZCtjfX19LFJFPWZ1bmN0aW9uKCl7dGhpcy5qPXZvaWQgMDt0aGlzLkQ9MDt0aGlzLmlzQWN0aXZlPXRoaXMuaXNWaXNpYmxlPXRoaXMuSD0hMTt0aGlzLlI9dGhpcy5NPXZvaWQgMH07YmE9UkUucHJvdG90eXBlO2JhLk5rPWZ1bmN0aW9uKGEpe3ZhciBiPXRoaXM7aWYoIXRoaXMuail7dGhpcy5IPUUuaGFzRm9jdXMoKTt0aGlzLmlzVmlzaWJsZT0hRS5oaWRkZW47dGhpcy5pc0FjdGl2ZT0hMDt2YXIgYz1mdW5jdGlvbihkLGUsZil7Q2MoZCxlLGZ1bmN0aW9uKGcpe2Iuai5zdG9wKCk7ZihnKTtiLnNoKCkmJmIuai5zdGFydCgpfSl9O2MoRCxcImZvY3VzXCIsZnVuY3Rpb24oKXtiLkg9ITB9KTtjKEQsXCJibHVyXCIsZnVuY3Rpb24oKXtiLkg9XG4hMX0pO2MoRCxcInBhZ2VzaG93XCIsZnVuY3Rpb24oZCl7Yi5pc0FjdGl2ZT0hMDtkLnBlcnNpc3RlZCYmTSg1Nik7Yi5SJiZiLlIoKX0pO2MoRCxcInBhZ2VoaWRlXCIsZnVuY3Rpb24oKXtiLmlzQWN0aXZlPSExO2IuTSYmYi5NKCl9KTtjKEUsXCJ2aXNpYmlsaXR5Y2hhbmdlXCIsZnVuY3Rpb24oKXtiLmlzVmlzaWJsZT0hRS5oaWRkZW59KTtYcyhhKSYmIXRjKFwiRmlyZWZveFwiKSYmIXRjKFwiRnhpT1NcIikmJmMoRCxcImJlZm9yZXVubG9hZFwiLGZ1bmN0aW9uKCl7T0U9ITB9KTt0aGlzLktoKCk7dGhpcy5EPTB9fTtiYS5LaD1mdW5jdGlvbigpe3RoaXMuRCs9dGhpcy5LZigpO3RoaXMuaj1RRSh0aGlzKTt0aGlzLnNoKCkmJnRoaXMuai5zdGFydCgpfTtiYS5abT1mdW5jdGlvbihhKXt2YXIgYj10aGlzLktmKCk7Yj4wJiYoYS5vW1QuZy5PZF09Yil9O2JhLlFsPWZ1bmN0aW9uKGEpe2Eub1tULmcuT2RdPXZvaWQgMDt0aGlzLktoKCk7dGhpcy5EPTB9O2JhLnNoPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuSCYmXG50aGlzLmlzVmlzaWJsZSYmdGhpcy5pc0FjdGl2ZX07YmEuSWw9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5EK3RoaXMuS2YoKX07YmEuS2Y9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5qJiZ0aGlzLmouZ2V0KCl8fDB9O2JhLkhtPWZ1bmN0aW9uKGEpe3RoaXMuTT1hfTtiYS5Yaj1mdW5jdGlvbihhKXt0aGlzLlI9YX07dmFyIFRFPWZ1bmN0aW9uKGEpe3ZhciBiPWEubWV0YWRhdGEuZXZlbnRfdXNhZ2U7aWYoQXJyYXkuaXNBcnJheShiKSlmb3IodmFyIGM9MDtjPGIubGVuZ3RoO2MrKylTRShiW2NdKTt2YXIgZD1pYihcIkdBNF9FVkVOVFwiKTtkJiYoYS5vLl9ldT1kKX0sVUU9ZnVuY3Rpb24oKXtkZWxldGUgZ2IuR0E0X0VWRU5UfSxTRT1mdW5jdGlvbihhKXtoYihcIkdBNF9FVkVOVFwiLGEpfTtmdW5jdGlvbiBWRSgpe3JldHVybiBELmdhR2xvYmFsPUQuZ2FHbG9iYWx8fHt9fWZ1bmN0aW9uIFdFKCl7dmFyIGE9VkUoKTthLmhpZD1hLmhpZHx8c2IoKTtyZXR1cm4gYS5oaWR9ZnVuY3Rpb24gWEUoYSxiKXt2YXIgYz1WRSgpO2lmKGMudmlkPT09dm9pZCAwfHxiJiYhYy5mcm9tX2Nvb2tpZSljLnZpZD1hLGMuZnJvbV9jb29raWU9Yn07XG52YXIgWUU9ZnVuY3Rpb24oYSxiLGMpe3ZhciBkPWEubWV0YWRhdGEuY2xpZW50X2lkX3NvdXJjZTtpZihkPT09dm9pZCAwfHxjPD1kKWEub1tULmcubmJdPWIsYS5tZXRhZGF0YS5jbGllbnRfaWRfc291cmNlPWN9LCRFPWZ1bmN0aW9uKGEsYil7dmFyIGM9YS5vW1QuZy5uYl07aWYoVShhLm0sVC5nLkliKSYmVShhLm0sVC5nLlZiKXx8YiYmYz09PWIpcmV0dXJuIGM7aWYoYyl7Yz1cIlwiK2M7aWYoIVpFKGMsYSkpcmV0dXJuIE0oMzEpLGEuaXNBYm9ydGVkPSEwLFwiXCI7WEUoYyxXKFQuZy5VKSk7cmV0dXJuIGN9TSgzMik7YS5pc0Fib3J0ZWQ9ITA7cmV0dXJuXCJcIn0sYUY9W1wiR0ExXCJdLGJGPWZ1bmN0aW9uKGEpe3ZhciBiPWEubWV0YWRhdGEuY29va2llX29wdGlvbnMsYz1iLnByZWZpeCtcIl9nYVwiLGQ9Q28oYyxiLmRvbWFpbixiLnBhdGgsYUYsVC5nLlUpO2lmKCFkKXt2YXIgZT1TdHJpbmcoVShhLm0sVC5nLm9jLFwiXCIpKTtlJiZlIT09YyYmKGQ9Q28oZSxiLmRvbWFpbixiLnBhdGgsYUYsXG5ULmcuVSkpfXJldHVybiBkfSxaRT1mdW5jdGlvbihhLGIpe3ZhciBjO3ZhciBkPWIubWV0YWRhdGEuY29va2llX29wdGlvbnMsZT1kLnByZWZpeCtcIl9nYVwiLGY9RW8oZCx2b2lkIDAsdm9pZCAwLFQuZy5VKTtpZihVKGIubSxULmcucWMpPT09ITEmJmJGKGIpPT09YSljPSEwO2Vsc2V7dmFyIGc9RG8oYSxhRlswXSxkLmRvbWFpbixkLnBhdGgpO2M9dW8oZSxnLGYpIT09MX1yZXR1cm4gY307XG52YXIgZUY9ZnVuY3Rpb24oYSxiLGMpe2lmKCFiKXJldHVybiBhO2lmKCFhKXJldHVybiBiO3ZhciBkPWNGKGEpO2lmKCFkKXJldHVybiBiO3ZhciBlLGY9d2IoKGU9VShjLm0sVC5nLmpkKSkhPW51bGw/ZTozMCk7aWYoIShNYXRoLmZsb29yKGMubWV0YWRhdGEuZXZlbnRfc3RhcnRfdGltZXN0YW1wX21zLzFFMyk+ZC5PZStmKjYwKSlyZXR1cm4gYTt2YXIgZz1jRihiKTtpZighZylyZXR1cm4gYTtnLktjPWQuS2MrMTt2YXIgaztyZXR1cm4oaz1kRihnLnNlc3Npb25JZCxnLktjLGcueWQsZy5PZSxnLndoLGcuR2MsZy5wZCkpIT1udWxsP2s6Yn0saEY9ZnVuY3Rpb24oYSxiKXt2YXIgYz1iLm1ldGFkYXRhLmNvb2tpZV9vcHRpb25zLGQ9ZkYoYixjKSxlPURvKGEsZ0ZbMF0sYy5kb21haW4sYy5wYXRoKSxmPXtBYjpULmcuVSxkb21haW46Yy5kb21haW4scGF0aDpjLnBhdGgsZXhwaXJlczpjLnpiP25ldyBEYXRlKEJiKCkrTnVtYmVyKGMuemIpKjFFMyk6dm9pZCAwLGZsYWdzOmMuZmxhZ3N9O1xudW8oZCx2b2lkIDAsZik7cmV0dXJuIHVvKGQsZSxmKSE9PTF9LGlGPWZ1bmN0aW9uKGEpe3ZhciBiPWEubWV0YWRhdGEuY29va2llX29wdGlvbnMsYz1mRihhLGIpLGQ9Q28oYyxiLmRvbWFpbixiLnBhdGgsZ0YsVC5nLlUpO2lmKCFkKXJldHVybiBkO3ZhciBlPWpvKGMsdm9pZCAwLHZvaWQgMCxULmcuVSk7aWYoZCYmZS5sZW5ndGg+MSl7TSgxMTQpO2Zvcih2YXIgZj12b2lkIDAsZz12b2lkIDAsaz0wO2s8ZS5sZW5ndGg7aysrKXt2YXIgbT1lW2tdLnNwbGl0KFwiLlwiKTtpZighKG0ubGVuZ3RoPDcpKXt2YXIgbj1OdW1iZXIobVs1XSk7biYmKCFnfHxuPmcpJiYoZz1uLGY9ZVtrXSl9fWYmJiFIYihmLGQpJiYoTSgxMTUpLGQ9Zi5zcGxpdChcIi5cIikuc2xpY2UoMikuam9pbihcIi5cIikpfXJldHVybiBkfSxqRj1mdW5jdGlvbihhKXtyZXR1cm4gZEYoYS5vW1QuZy51Yl0sYS5vW1QuZy5iZV0sYS5vW1QuZy5hZV0sTWF0aC5mbG9vcihhLm1ldGFkYXRhLmV2ZW50X3N0YXJ0X3RpbWVzdGFtcF9tcy9cbjFFMyksYS5tZXRhZGF0YS5qb2luX3RpbWVyX3NlY3x8MCwhIWEubWV0YWRhdGFbVC5nLmtmXSxhLm9bVC5nLlBkXSl9LGRGPWZ1bmN0aW9uKGEsYixjLGQsZSxmLGcpe2lmKGEmJmIpe3ZhciBrPVthLGIsd2IoYyksZCxlXTtrLnB1c2goZj9cIjFcIjpcIjBcIik7ay5wdXNoKGd8fFwiMFwiKTtyZXR1cm4gay5qb2luKFwiLlwiKX19LGZGPWZ1bmN0aW9uKGEsYil7cmV0dXJuIGIucHJlZml4K1wiX2dhX1wiK2EudGFyZ2V0Lmlkc1ttbFswXV19LGdGPVtcIkdTMVwiXSxjRj1mdW5jdGlvbihhKXtpZihhKXt2YXIgYj1hLnNwbGl0KFwiLlwiKTtpZighKGIubGVuZ3RoPDV8fGIubGVuZ3RoPjcpKXtiLmxlbmd0aDw3JiZNKDY3KTt2YXIgYz1OdW1iZXIoYlsxXSksZD1OdW1iZXIoYlszXSksZT1OdW1iZXIoYls0XXx8MCk7Y3x8TSgxMTgpO2R8fE0oMTE5KTtpc05hTihlKSYmTSgxMjApO2lmKGMmJmQmJiFpc05hTihlKSlyZXR1cm57c2Vzc2lvbklkOmJbMF0sS2M6Yyx5ZDohIU51bWJlcihiWzJdKSxPZTpkLHdoOmUsXG5HYzpiWzVdPT09XCIxXCIscGQ6Yls2XSE9PVwiMFwiP2JbNl06dm9pZCAwfX19fTtcbnZhciBrRj1mdW5jdGlvbihhKXt2YXIgYj1VKGEubSxULmcucWEpLGM9YS5tLkRbVC5nLnFhXTtpZihjPT09YilyZXR1cm4gYzt2YXIgZD1oKGIpO2MmJmNbVC5nLlddJiYoZFtULmcuV109KGRbVC5nLlddfHxbXSkuY29uY2F0KGNbVC5nLlddKSk7cmV0dXJuIGR9LGxGPWZ1bmN0aW9uKGEsYil7dmFyIGM9VW8oITApO3JldHVybiBjLl91cCE9PVwiMVwiP3t9OntjbGllbnRJZDpjW2FdLFJhOmNbYl19fSxtRj1mdW5jdGlvbihhLGIsYyl7dmFyIGQ9VW8oITApLGU9ZFtiXTtlJiYoWUUoYSxlLDIpLFpFKGUsYSkpO3ZhciBmPWRbY107ZiYmaEYoZixhKTtyZXR1cm57Y2xpZW50SWQ6ZSxSYTpmfX0sbkY9ITEsb0Y9ZnVuY3Rpb24oYSl7dmFyIGI9a0YoYSl8fHt9LGM9YS5tZXRhZGF0YS5jb29raWVfb3B0aW9ucyxkPWMucHJlZml4K1wiX2dhXCIsZT1mRihhLGMpLGY9e307ZHAoYltULmcuemNdLCEhYltULmcuV10pJiYoZj1tRihhLGQsZSksZi5jbGllbnRJZCYmZi5SYSYmKG5GPSEwKSk7YltULmcuV10mJlxuYXAoZnVuY3Rpb24oKXt2YXIgZz17fSxrPWJGKGEpO2smJihnW2RdPWspO3ZhciBtPWlGKGEpO20mJihnW2VdPW0pO3ZhciBuPWpvKFwiRlBMQ1wiLHZvaWQgMCx2b2lkIDAsVC5nLlUpO24ubGVuZ3RoJiYoZy5fZnBsYz1uWzBdKTtyZXR1cm4gZ30sYltULmcuV10sYltULmcuSmJdLCEhYltULmcudGJdKTtyZXR1cm4gZn0scUY9ZnVuY3Rpb24oYSl7aWYoIVUoYS5tLFQuZy5XYSkpcmV0dXJue307dmFyIGI9YS5tZXRhZGF0YS5jb29raWVfb3B0aW9ucyxjPWIucHJlZml4K1wiX2dhXCIsZD1mRihhLGIpO2JwKGZ1bmN0aW9uKCl7dmFyIGU7aWYoVyhcImFuYWx5dGljc19zdG9yYWdlXCIpKWU9e307ZWxzZXt2YXIgZj17fTtlPShmLl91cD1cIjFcIixmW2NdPWEub1tULmcubmJdLGZbZF09akYoYSksZil9cmV0dXJuIGV9LDEpO3JldHVybiFXKFwiYW5hbHl0aWNzX3N0b3JhZ2VcIikmJnBGKCk/bEYoYyxkKTp7fX0scEY9ZnVuY3Rpb24oKXt2YXIgYT1YaShELmxvY2F0aW9uLFwiaG9zdFwiKSxiPVhpKGFqKEUucmVmZXJyZXIpLFxuXCJob3N0XCIpO3JldHVybiBhJiZiP2E9PT1ifHxhLmluZGV4T2YoXCIuXCIrYik+PTB8fGIuaW5kZXhPZihcIi5cIithKT49MD8hMDohMTohMX07dmFyIHJGPWZ1bmN0aW9uKGEpe2lmKCFhLm1ldGFkYXRhLmlzX21lcmNoYW50X2NlbnRlciYmaWooYS5tKSl7dmFyIGI9a0YoYSl8fHt9LGM9KGRwKGJbVC5nLnpjXSwhIWJbVC5nLlddKT9VbyghMCkuX2ZwbGM6dm9pZCAwKXx8KGpvKFwiRlBMQ1wiLHZvaWQgMCx2b2lkIDAsVC5nLlUpLmxlbmd0aD4wP3ZvaWQgMDpcIjBcIik7YS5vLl9mcGxjPWN9fTtmdW5jdGlvbiBzRihhKXt2YXIgYj1RKDY1KSYmRGkoKTtpZihYcyhhKXx8YilhLm9bVC5nLlZpXT1OaygpfHxNaygpfTt2YXIgdUY9ZnVuY3Rpb24oYSxiKXt2YXIgYz1paS5ncmw7Y3x8KGM9dEYoKSxpaS5ncmw9Yyk7YyhiKXx8KE0oMzUpLGEuaXNBYm9ydGVkPSEwKX0sdEY9ZnVuY3Rpb24oKXt2YXIgYT1CYigpLGI9YSs4NjRFNSxjPTIwLGQ9NUUzO3JldHVybiBmdW5jdGlvbihlKXt2YXIgZj1CYigpO2Y+PWImJihiPWYrODY0RTUsZD01RTMpO2M9TWF0aC5taW4oYysoZi1hKS8xRTMqNSwyMCk7YT1mO3ZhciBnPSExO2Q8MXx8YzwxfHwoZz0hMCxkLS0sYy0tKTtlJiYoZS5zbD1kLGUubWw9Yyk7cmV0dXJuIGd9fTtcbnZhciB2Rj1mdW5jdGlvbihhKXtpZihVKGEubSxULmcuYmQpIT09dm9pZCAwKWEuY29weVRvSGl0RGF0YShULmcuYmQpO2Vsc2V7dmFyIGI9VShhLm0sVC5nLnBmKSxjLGQ7YTp7aWYobkYpe3ZhciBlPWtGKGEpfHx7fTtpZihlJiZlW1QuZy5XXSlmb3IodmFyIGY9VmkoYWooYS5vW1QuZy5CYV0pLFwiaG9zdFwiLCEwKSxnPWVbVC5nLlddLGs9MDtrPGcubGVuZ3RoO2srKylpZihnW2tdaW5zdGFuY2VvZiBSZWdFeHApe2lmKGdba10udGVzdChmKSl7ZD0hMDticmVhayBhfX1lbHNlIGlmKGYuaW5kZXhPZihnW2tdKT49MCl7ZD0hMDticmVhayBhfX1kPSExfWlmKCEoYz1kKSl7dmFyIG07aWYobT1iKWE6e2Zvcih2YXIgbj1iLmluY2x1ZGVfY29uZGl0aW9uc3x8W10scD1WaShhaihhLm9bVC5nLkJhXSksXCJob3N0XCIsITApLHE9MDtxPG4ubGVuZ3RoO3ErKylpZihuW3FdLnRlc3QocCkpe209ITA7YnJlYWsgYX1tPSExfWM9bX1jJiYoYS5vW1QuZy5iZF09XCIxXCIsU0UoNCkpfX07XG52YXIgd0Y9ZnVuY3Rpb24oYSxiKXtGbigpJiYoYS5nY3M9R24oKSxiLm1ldGFkYXRhLmlzX2NvbnNlbnRfdXBkYXRlJiYoYS5nY3U9XCIxXCIpKTthLmdjZD1LbihiLm0pO0VuKGIubSk/YS5ucGE9XCIwXCI6YS5ucGE9XCIxXCI7Vm4oKSYmKGEuX25nPVwiMVwiKX0sekY9ZnVuY3Rpb24oYSl7aWYoYS5tZXRhZGF0YS5pc19tZXJjaGFudF9jZW50ZXIpcmV0dXJue3VybDpqaihcImh0dHBzOi8vd3d3Lm1lcmNoYW50LWNlbnRlci1hbmFseXRpY3MuZ29vZ1wiKStcIi9tYy9jb2xsZWN0XCIsZW5kcG9pbnQ6MjB9O3ZhciBiPWZqKGlqKGEubSksXCIvZy9jb2xsZWN0XCIpO2lmKGIpcmV0dXJue3VybDpiLGVuZHBvaW50OjE2fTtpZihEaSgpKXJldHVybnt1cmw6XCJcIitDaSgpK1wiL2cvY29sbGVjdFwiLGVuZHBvaW50OjE2fTt2YXIgYz1ZcyhhKSxkPVUoYS5tLFQuZy5sYik7cmV0dXJuIGMmJiFPaygpJiZkIT09ITEmJnNEKCkmJlcoVC5nLlApJiZXKFQuZy5VKT97dXJsOnhGKCksZW5kcG9pbnQ6MTd9Ont1cmw6eUYoKSxcbmVuZHBvaW50OjE2fX0sQUY9ITE7QUY9ITA7dmFyIEJGPXt9O0JGW1QuZy5uYl09XCJjaWRcIjtCRltULmcuZ2ddPVwiZ2N1dFwiO0JGW1QuZy5VYl09XCJhcmVcIjtCRltULmcuZWZdPVwicHNjZGxcIjtCRltULmcubGZdPVwiX2ZpZFwiO0JGW1QuZy52Z109XCJfZ2VvXCI7QkZbVC5nLnNiXT1cImdkaWRcIjtCRltULmcueGNdPVwiX25nXCI7QkZbVC5nLkhiXT1cImZybVwiO0JGW1QuZy5iZF09XCJpclwiO0JGW1QuZy5PYV09XCJ1bFwiO0JGW1QuZy5GZ109XCJwYWVcIjtCRltULmcuWmRdPVwiX3JkaVwiO0JGW1QuZy5LYl09XCJzclwiO0JGW1QuZy5VaV09XCJ0aWRcIjtCRltULmcudmZdPVwidHRcIjtCRltULmcubGRdPVwiZWNfbW9kZVwiO0JGW1QuZy5lal09XCJndG1fdXBcIjtCRltULmcud2ZdPVwidWFhXCI7QkZbVC5nLnhmXT1cInVhYlwiO0JGW1QuZy55Zl09XCJ1YWZ2bFwiO0JGW1QuZy56Zl09XCJ1YW1iXCI7QkZbVC5nLkFmXT1cInVhbVwiO0JGW1QuZy5CZl09XCJ1YXBcIjtCRltULmcuQ2ZdPVwidWFwdlwiO0JGW1QuZy5EZl09XCJ1YXdcIjtCRltULmcuVmldPVwidXJcIjtCRltULmcuZGRdPVwibHBzXCI7dmFyIENGPXt9O0NGW1QuZy5OY109XCJjY1wiO0NGW1QuZy5PY109XCJjaVwiO0NGW1QuZy5QY109XCJjbVwiO0NGW1QuZy5RY109XCJjblwiO0NGW1QuZy5TY109XCJjc1wiO0NGW1QuZy5UY109XCJja1wiO0NGW1QuZy54YV09XCJjdVwiO0NGW1QuZy5yYV09XG5cImRsXCI7Q0ZbVC5nLkJhXT1cImRyXCI7Q0ZbVC5nLlphXT1cImR0XCI7Q0ZbVC5nLmFlXT1cInNlZ1wiO0NGW1QuZy51Yl09XCJzaWRcIjtDRltULmcuYmVdPVwic2N0XCI7Q0ZbVC5nLnphXT1cInVpZFwiO1EoMTA1KSYmKENGW1QuZy5mZF09XCJkcFwiKTt2YXIgREY9e307REZbVC5nLk9kXT1cIl9ldFwiO0RGW1QuZy5wYl09XCJlZGlkXCI7dmFyIEVGPXt9O0VGW1QuZy5OY109XCJjY1wiO0VGW1QuZy5PY109XG5cImNpXCI7RUZbVC5nLlBjXT1cImNtXCI7RUZbVC5nLlFjXT1cImNuXCI7RUZbVC5nLlNjXT1cImNzXCI7RUZbVC5nLlRjXT1cImNrXCI7dmFyIEZGPXt9LEdGPU9iamVjdC5mcmVlemUoKEZGW1QuZy5DYV09MSxGRikpLHlGPWZ1bmN0aW9uKCl7dmFyIGE9XCJ3d3dcIjtBRiYmUWsoKSYmKGE9UWsoKSk7cmV0dXJuXCJodHRwczovL1wiK2ErXCIuZ29vZ2xlLWFuYWx5dGljcy5jb20vZy9jb2xsZWN0XCJ9LHhGPWZ1bmN0aW9uKCl7dmFyIGE7QUYmJlFrKCkhPT1cIlwiJiYoYT1RaygpKTtyZXR1cm5cImh0dHBzOi8vXCIrKGE/YStcIi5cIjpcIlwiKStcImFuYWx5dGljcy5nb29nbGUuY29tL2cvY29sbGVjdFwifSxIRj1mdW5jdGlvbihhLGIsYyl7dmFyIGQ9e30sZT17fSxmPXt9O2Qudj1cIjJcIjtkLnRpZD1hLnRhcmdldC5kZXN0aW5hdGlvbklkO2QuZ3RtPVluKHtzYTphLm1ldGFkYXRhLnNvdXJjZV9jYW5vbmljYWxfaWR9KTtkLl9wPVEoMTE0KT92aTpXRSgpO2MmJihkLmVtPWMpO2EubWV0YWRhdGEuY3JlYXRlX2dvb2dsZV9qb2luJiZcbihkLl9nYXo9MSk7d0YoZCxhKTtObigpJiYoZC5kbWFfY3BzPUxuKCkpO2QuZG1hPU1uKCk7am4ocm4oKSkmJihkLnRjZmQ9VW4oKSk7QmkuaiYmKGQudGFnX2V4cD1CaS5qKTt2YXIgZz1hLm9bVC5nLnNiXTtnJiYoZC5nZGlkPWcpO2UuZW49U3RyaW5nKGEuZXZlbnROYW1lKTthLm1ldGFkYXRhLmlzX2ZpcnN0X3Zpc2l0JiYoZS5fZnY9YS5tZXRhZGF0YS5pc19maXJzdF92aXNpdF9jb252ZXJzaW9uPzI6MSk7YS5tZXRhZGF0YS5pc19uZXdfdG9fc2l0ZSYmKGUuX25zaT0xKTthLm1ldGFkYXRhLmlzX3Nlc3Npb25fc3RhcnQmJihlLl9zcz1hLm1ldGFkYXRhLmlzX3Nlc3Npb25fc3RhcnRfY29udmVyc2lvbj8yOjEpO2EubWV0YWRhdGEuaXNfY29udmVyc2lvbiYmKGUuX2M9MSk7YS5tZXRhZGF0YS5pc19leHRlcm5hbF9ldmVudCYmKGUuX2VlPTEpO2lmKGEubWV0YWRhdGEuaXNfZWNvbW1lcmNlKXt2YXIgaz1hLm9bVC5nLmRhXXx8VShhLm0sVC5nLmRhKTtpZihBcnJheS5pc0FycmF5KGspKWZvcih2YXIgbT1cbjA7bTxrLmxlbmd0aCYmbTwyMDA7bSsrKWVbXCJwclwiKyhtKzEpXT1ZZihrW21dKX12YXIgbj1hLm9bVC5nLnBiXTtuJiYoZS5lZGlkPW4pO3ZhciBwPWZ1bmN0aW9uKHQsdSl7aWYodHlwZW9mIHUhPT1cIm9iamVjdFwifHwhR0ZbdF0pe3ZhciB2PVwiZXAuXCIrdCx3PVwiZXBuLlwiK3Q7dD1wYih1KT93OnY7dmFyIHg9cGIodSk/djp3O2UuaGFzT3duUHJvcGVydHkoeCkmJmRlbGV0ZSBlW3hdO2VbdF09U3RyaW5nKHUpfX07eihhLm8sZnVuY3Rpb24odCx1KXtpZih1IT09dm9pZCAwJiYhVGguaGFzT3duUHJvcGVydHkodCkpe3U9PT1udWxsJiYodT1cIlwiKTt2YXIgdjt2YXIgdz11O3QhPT1ULmcuUGQ/dj0hMTphLm1ldGFkYXRhLmV1aWRfbW9kZV9lbmFibGVkfHxYcyhhKT8oZC5lY2lkPXcsdj0hMCk6dj12b2lkIDA7aWYoIXYmJnQhPT1ULmcua2Ype3ZhciB4PXU7dT09PSEwJiYoeD1cIjFcIik7dT09PSExJiYoeD1cIjBcIik7eD1TdHJpbmcoeCk7dmFyIHk7aWYoQkZbdF0peT1CRlt0XSxkW3ldPXg7XG5lbHNlIGlmKENGW3RdKXk9Q0ZbdF0sZlt5XT14O2Vsc2UgaWYoREZbdF0peT1ERlt0XSxlW3ldPXg7ZWxzZSBpZih0LmNoYXJBdCgwKT09PVwiX1wiKWRbdF09eDtlbHNle3ZhciBBO0VGW3RdP0E9ITA6dCE9PVQuZy5SYz9BPSExOih0eXBlb2YgdSE9PVwib2JqZWN0XCImJnAodCx1KSxBPSEwKTtBfHxwKHQsdSl9fX19KTsoZnVuY3Rpb24odCl7WHMoYSkmJnR5cGVvZiB0PT09XCJvYmplY3RcIiYmeih0fHx7fSxmdW5jdGlvbih1LHYpe3R5cGVvZiB2IT09XCJvYmplY3RcIiYmKGRbXCJzc3QuXCIrdV09U3RyaW5nKHYpKX0pfSkoYS5vW1QuZy5xZV0pO3ZhciBxPWEub1tULmcuYWJdfHx7fTtRKDc1KSYmVShhLm0sVC5nLmxiLHZvaWQgMCw0KT09PSExJiYoZC5uZ3M9XCIxXCIpO3oocSxmdW5jdGlvbih0LHUpe3UhPT12b2lkIDAmJigodT09PW51bGwmJih1PVwiXCIpLHQhPT1ULmcuemF8fGYudWlkKT9iW3RdIT09dSYmKGVbKHBiKHUpP1widXBuLlwiOlwidXAuXCIpK1N0cmluZyh0KV09U3RyaW5nKHUpLGJbdF09XG51KTpmLnVpZD1TdHJpbmcodSkpfSk7dmFyIHI9ekYoYSk7ZmcuY2FsbCh0aGlzLHtpYTpkLExjOmYsaWg6ZX0sci51cmwsci5lbmRwb2ludCxYcyhhKSx2b2lkIDApfTt5YShIRixmZyk7dmFyIElGPWZ1bmN0aW9uKGEpe3RoaXMuSD1hO3RoaXMuaj1cIlwifSxKRj1mdW5jdGlvbihhLGIpe2EuRD1iO3JldHVybiBhfSxLRj1mdW5jdGlvbihhLGIpe2I9YS5qK2I7Zm9yKHZhciBjPWIuaW5kZXhPZihcIlxcblxcblwiKTtjIT09LTE7KXt2YXIgZD1hLGU7YTp7dmFyIGY9bmEoYi5zdWJzdHJpbmcoMCxjKS5zcGxpdChcIlxcblwiKSksZz1mLm5leHQoKS52YWx1ZSxrPWYubmV4dCgpLnZhbHVlO2lmKGcuaW5kZXhPZihcImV2ZW50OiBtZXNzYWdlXCIpPT09MCYmay5pbmRleE9mKFwiZGF0YTogXCIpPT09MCl0cnl7ZT1KU09OLnBhcnNlKGsuc3Vic3RyaW5nKGsuaW5kZXhPZihcIjpcIikrMSkpO2JyZWFrIGF9Y2F0Y2goRil7fWU9dm9pZCAwfXZhciBtPWQsbj1lO2lmKG4pe3ZhciBwPW4uc2VuZF9waXhlbCxxPW4ub3B0aW9ucyxyPW0uSDtpZihwKXt2YXIgdD1wfHxbXTtpZihBcnJheS5pc0FycmF5KHQpKWZvcih2YXIgdT1TYShxKT9xOnt9LHY9bmEodCksdz12Lm5leHQoKTshdy5kb25lO3c9di5uZXh0KCkpcih3LnZhbHVlLFxudSl9dmFyIHg9bi5jcmVhdGVfaWZyYW1lLHk9bi5vcHRpb25zLEE9bS5EO2lmKHgmJkEpe3ZhciBCPXh8fFtdO2lmKEFycmF5LmlzQXJyYXkoQikpZm9yKHZhciBDPVNhKHkpP3k6e30sSD1uYShCKSxJPUgubmV4dCgpOyFJLmRvbmU7ST1ILm5leHQoKSlBKEkudmFsdWUsQyl9fWI9Yi5zdWJzdHJpbmcoYysyKTtjPWIuaW5kZXhPZihcIlxcblxcblwiKX1hLmo9Yn07ZnVuY3Rpb24gTEYoYSl7dmFyIGI9YS5zZWFyY2g7cmV0dXJuIGEucHJvdG9jb2wrXCIvL1wiK2EuaG9zdG5hbWUrYS5wYXRobmFtZSsoYj9iK1wiJnJpY2hzc3Rzc2VcIjpcIj9yaWNoc3N0c3NlXCIpfTtcbnZhciBNRj1mdW5jdGlvbihhLGIpe3JldHVybiBhLnJlcGxhY2UoL1xcJFxceyhbXlxcfV0rKVxcfS9nLGZ1bmN0aW9uKGMsZCl7cmV0dXJuIGJbZF18fGN9KX0sTkY9ZnVuY3Rpb24oYSl7dmFyIGI9e30sYz1cIlwiLGQ9YS5wYXRobmFtZS5pbmRleE9mKFwiL2cvY29sbGVjdFwiKTtkPj0wJiYoYz1hLnBhdGhuYW1lLnN1YnN0cmluZygwLGQpKTtiLnRyYW5zcG9ydF91cmw9YS5wcm90b2NvbCtcIi8vXCIrYS5ob3N0bmFtZStjO3JldHVybiBifSxPRj1mdW5jdGlvbihhLGIsYyl7dmFyIGQ9MCxlPW5ldyBELlhNTEh0dHBSZXF1ZXN0O2Uud2l0aENyZWRlbnRpYWxzPSEwO2Uub25wcm9ncmVzcz1mdW5jdGlvbihmKXtpZihlLnN0YXR1cz09PTIwMCl7dmFyIGc9ZS5yZXNwb25zZVRleHQuc3Vic3RyaW5nKGQpO2Q9Zi5sb2FkZWQ7S0YoYyxnKX19O2Uub3BlbihiP1wiUE9TVFwiOlwiR0VUXCIsYSk7ZS5zZXRBdHRyaWJ1dGlvblJlcG9ydGluZyYmZS5zZXRBdHRyaWJ1dGlvblJlcG9ydGluZyh7ZXZlbnRTb3VyY2VFbGlnaWJsZTohMSx0cmlnZ2VyRWxpZ2libGU6ITB9KTtcbmUuc2VuZChiKX0sUUY9ZnVuY3Rpb24oYSxiLGMpe3ZhciBkPU9iamVjdC5hc3NpZ24oe30sUEYpO2ImJihkLmJvZHk9YixkLm1ldGhvZD1cIlBPU1RcIik7RC5mZXRjaChhLGQpLnRoZW4oZnVuY3Rpb24oZSl7aWYoZS5vayYmZS5ib2R5KXt2YXIgZj1lLmJvZHkuZ2V0UmVhZGVyKCk7cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKGcpe2Z1bmN0aW9uIGsoKXtmLnJlYWQoKS50aGVuKGZ1bmN0aW9uKG0pe3ZhciBuLHA7bj1tLmRvbmU7cD1tLnZhbHVlO2lmKG4pZygpO2Vsc2V7dmFyIHE9KG5ldyBUZXh0RGVjb2RlcikuZGVjb2RlKHApO0tGKGMscSk7aygpfX0pLmNhdGNoKGZ1bmN0aW9uKCl7ZygpfSl9aygpfSl9fSkuY2F0Y2goZnVuY3Rpb24oKXtRKDg4KSYmKGErPVwiJl96PXJldHJ5RmV0Y2hcIixiP0pjKGEsYik6SWMoYSkpfSl9LFJGPWZ1bmN0aW9uKGEsYil7cmV0dXJuIEpGKG5ldyBJRihmdW5jdGlvbihjLGQpe3ZhciBlPU1GKGMsYSk7YiYmKGU9ZS5yZXBsYWNlKFwiX2lzX3N3PTBcIixcbmIpKTt2YXIgZj17fTtkLmF0dHJpYnV0aW9uX3JlcG9ydGluZyYmKGYuYXR0cmlidXRpb25zcmM9XCJcIik7QWMoZSx2b2lkIDAsdm9pZCAwLGYpfSksZnVuY3Rpb24oYyxkKXt2YXIgZT1NRihjLGEpLGY9ZC5kZWR1cGVfa2V5O2YmJk50KGUsZil9KX0sU0Y9ZnVuY3Rpb24oYSxiLGMsZCl7dmFyIGU9UkYoYyxkKTtRKDg3KSYmTGMoKT9RRihhLGIsZSk6T0YoYSxiLGUpfSxURj1mdW5jdGlvbihhLGIpe3ZhciBjPWFqKGEpLGQ9TkYoYyksZT1MRihjKTtRKDkxKT9zdChlLGIsZCxmdW5jdGlvbihmKXtTRihlLGIsZCxmKX0pOlNGKGUsYixkKX0sUEY9T2JqZWN0LmZyZWV6ZSh7Y2FjaGU6XCJuby1zdG9yZVwiLGNyZWRlbnRpYWxzOlwiaW5jbHVkZVwiLG1ldGhvZDpcIkdFVFwiLGtlZXBhbGl2ZTohMCxyZWRpcmVjdDpcImZvbGxvd1wifSk7XG52YXIgVUY9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gYT9bYSxiXS5qb2luKFwiJlwiKTpifSxWRj1mdW5jdGlvbihhLGIsYyl7dmFyIGQ9YStcIj9cIitiO2M/SmMoZCxjKTpJYyhkKX0sWEY9ZnVuY3Rpb24oYSxiLGMsZCl7dmFyIGU9YixmPU9jKCk7ZiE9PXZvaWQgMCYmKGUrPVwiJnRmZD1cIitNYXRoLnJvdW5kKGYpKTtiPWU7dmFyIGc9YStcIj9cIitiO1dGJiYoZD0hR2IoZyx5RigpKSYmIUdiKGcseEYoKSkpO2lmKGQmJiFPRSlURihnLGMpO2Vsc2V7dmFyIGs9YjtMYygpP01jKGErXCI/XCIrayxjLHtub0ZhbGxiYWNrOiEwfSl8fFZGKGEsVUYoayxcIl96PWZhaWxlZGZldGNoXCIpLGMpOlZGKGEsVUYoayxcIl96PW5vZmV0Y2hcIiksYyl9fSxZRj1mdW5jdGlvbihhLGIpe2Z1bmN0aW9uIGModSl7bi5wdXNoKHUrXCI9XCIrZW5jb2RlVVJJQ29tcG9uZW50KFwiXCIrYS5pYVt1XSkpfXZhciBkPWIuUG0sZT1iLlFtLGY9Yi5LbCxnPWIuYm0saz1iLmFtLG09Yi5HbTtpZihkfHxlKXt2YXIgbj1bXTthLmlhLl9uZyYmXG5jKFwiX25nXCIpO2MoXCJ0aWRcIik7YyhcImNpZFwiKTtjKFwiZ3RtXCIpO24ucHVzaChcImFpcD0xXCIpO2EuTGMudWlkJiYhayYmbi5wdXNoKFwidWlkPVwiK2VuY29kZVVSSUNvbXBvbmVudChcIlwiK2EuTGMudWlkKSk7dmFyIHA9ZnVuY3Rpb24oKXtjKFwiZG1hXCIpO2EuaWEuZG1hX2NwcyE9bnVsbCYmYyhcImRtYV9jcHNcIik7YS5pYS5nY3MhPW51bGwmJmMoXCJnY3NcIik7YyhcImdjZFwiKTthLmlhLm5wYSE9bnVsbCYmYyhcIm5wYVwiKX07cCgpO2EuaWEuZnJtIT1udWxsJiZjKFwiZnJtXCIpO2QmJihCaS5qJiZuLnB1c2goXCJ0YWdfZXhwPVwiK0JpLmopLFZGKFwiaHR0cHM6Ly9zdGF0cy5nLmRvdWJsZWNsaWNrLm5ldC9nL2NvbGxlY3RcIixcInY9MiZcIituLmpvaW4oXCImXCIpKSxuLmpvaW4oXCImXCIpKTtpZihlKXt2YXIgcT1mdW5jdGlvbigpe3ZhciB1PVB0KCkrXCIvdGQvZ2EvcnVsP1wiO249W107YyhcInRpZFwiKTtuLnB1c2goXCJnYWNpZD1cIitlbmNvZGVVUklDb21wb25lbnQoU3RyaW5nKGEuaWEuY2lkKSkpO2MoXCJndG1cIik7cCgpO1xuYyhcInBzY2RsXCIpO2EuaWEuX25nIT1udWxsJiZjKFwiX25nXCIpO24ucHVzaChcImFpcD0xXCIpO24ucHVzaChcImZsZWRnZT0xXCIpO2EuaWEuZnJtIT1udWxsJiZjKFwiZnJtXCIpO0JpLmomJm4ucHVzaChcInRhZ19leHA9XCIrQmkuaik7bi5wdXNoKFwiej1cIitzYigpKTt2YXIgdj11K24uam9pbihcIiZcIik7TnQodixhLmlhLnRpZCl9O0JpLmomJm4ucHVzaChcInRhZ19leHA9XCIrQmkuaik7bi5wdXNoKFwiej1cIitzYigpKTtpZighZyl7dmFyIHI9ZiYmR2IoZixcImdvb2dsZS5cIikmJmYhPT1cImdvb2dsZS5jb21cIj9cImh0dHBzOi8vd3d3LiUvYWRzL2dhLWF1ZGllbmNlcz92PTEmdD1zciZzbGZfcmQ9MSZfcj00JlwiLnJlcGxhY2UoXCIlXCIsZik6dm9pZCAwO2lmKHIpe3ZhciB0PXIrbi5qb2luKFwiJlwiKTtBYyh0KX19USg3NSkmJm0mJiFPRSYmcSgpfX19LFdGPSExO1xudmFyIFpGPWZ1bmN0aW9uKCl7dGhpcy5NPTE7dGhpcy5SPXt9O3RoaXMuRD0tMTt0aGlzLmo9bmV3IFpmfTtaRi5wcm90b3R5cGUuSD1mdW5jdGlvbihhLGIpe3ZhciBjPXRoaXMsZD1uZXcgSEYoYSx0aGlzLlIsYiksZT1QRShhKTtlJiZ0aGlzLmouUihkKXx8dGhpcy5mbHVzaCgpO2lmKGUmJnRoaXMuai5hZGQoZCkpe2lmKHRoaXMuRDwwKXt2YXIgZj1ELnNldFRpbWVvdXQsZztYcyhhKT8kRj8oJEY9ITEsZz1hRyk6Zz1iRzpnPTVFMzt0aGlzLkQ9Zi5jYWxsKEQsZnVuY3Rpb24oKXtjLmZsdXNoKCl9LGcpfX1lbHNle3ZhciBrPWJnKGQsdGhpcy5NKyspO1hGKGQuYmFzZVVybCxrLnBhcmFtcyxrLmJvZHksZC5IKTt2YXIgbT1hLm1ldGFkYXRhLmNyZWF0ZV9kY19qb2luLG49YS5tZXRhZGF0YS5jcmVhdGVfZ29vZ2xlX2pvaW4scD1VKGEubSxULmcuQWEpIT09ITEscT1FbihhLm0pLHI9e2V2ZW50SWQ6YS5tLmV2ZW50SWQscHJpb3JpdHlJZDphLm0ucHJpb3JpdHlJZH0sdD1hLm9bVC5nLkZnXSxcbnU9e1BtOm0sUW06bixLbDpTaygpLERuOnAsQ246cSxibTpPaygpLGFtOmEubWV0YWRhdGEuZXVpZF9tb2RlX2VuYWJsZWQsSm46cixHbTp0LG06YS5tfTtZRihkLHUpfXN2KGEubS5ldmVudElkLGEuZXZlbnROYW1lKX07WkYucHJvdG90eXBlLmFkZD1mdW5jdGlvbihhKXthLm1ldGFkYXRhLmV1aWRfbW9kZV9lbmFibGVkJiYhT0U/dGhpcy5aKGEpOnRoaXMuSChhKX07WkYucHJvdG90eXBlLmZsdXNoPWZ1bmN0aW9uKCl7aWYodGhpcy5qLmV2ZW50cy5sZW5ndGgpe3ZhciBhPWRnKHRoaXMuaix0aGlzLk0rKyk7WEYodGhpcy5qLmJhc2VVcmwsYS5wYXJhbXMsYS5ib2R5LHRoaXMuai5EKTt0aGlzLmo9bmV3IFpmO3RoaXMuRD49MCYmKEQuY2xlYXJUaW1lb3V0KHRoaXMuRCksdGhpcy5EPS0xKX19O1pGLnByb3RvdHlwZS5aPWZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMsYz1XcyhhKTtjP3doKGMsZnVuY3Rpb24oZCl7Yi5IKGEsZC5zcGxpdChcIn5cIikubGVuZ3RoPT09MT92b2lkIDA6ZCl9KTpcbnRoaXMuSChhKX07dmFyIGFHPVBoKCcnLDUwMCksYkc9UGgoJycsNUUzKSwkRj0hMDtcbnZhciBjRz1mdW5jdGlvbihhLGIsYyl7Yz09PXZvaWQgMCYmKGM9e30pO2lmKHR5cGVvZiBiPT09XCJvYmplY3RcIilmb3IodmFyIGQgaW4gYiljRyhhK1wiLlwiK2QsYltkXSxjKTtlbHNlIGNbYV09YjtyZXR1cm4gY30sZEc9ZnVuY3Rpb24oYSl7Zm9yKHZhciBiPXt9LGM9bmEoYSksZD1jLm5leHQoKTshZC5kb25lO2Q9Yy5uZXh0KCkpe3ZhciBlPWQudmFsdWU7YltlXT0hIVcoZSl9cmV0dXJuIGJ9LGZHPWZ1bmN0aW9uKGEsYil7dmFyIGM9ZUcuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiFXKGUpfSk7aWYoYy5sZW5ndGgpe3ZhciBkPWRHKGMpO2FsKGMsZnVuY3Rpb24oKXtmb3IodmFyIGU9ZEcoYyksZj1bXSxnPW5hKGMpLGs9Zy5uZXh0KCk7IWsuZG9uZTtrPWcubmV4dCgpKXt2YXIgbT1rLnZhbHVlOyFkW21dJiZlW21dJiZmLnB1c2gobSk7ZVttXSYmKGRbbV09ITApfWlmKGYubGVuZ3RoKXtiLm1ldGFkYXRhLmlzX2NvbnNlbnRfdXBkYXRlPSEwO3ZhciBuPWYubWFwKGZ1bmN0aW9uKHApe3JldHVybiBjaVtwXX0pLmpvaW4oXCIuXCIpO1xubiYmVHMoYixcImdjdXRcIixuKTthKGIpfX0pfX0sZUc9W1QuZy5QLFQuZy5PXSxnRz1mdW5jdGlvbihhKXtYcyhhKSYmQWsoKSYmVHMoYSxcInJuZFwiLE5xKCkpfSxoRz1mdW5jdGlvbihhKXt9LGlHPWZ1bmN0aW9uKGEpe2lmKFhzKGEpKXtVKGEubSxULmcubGIsdm9pZCAwLDQpPT09ITEmJlRzKGEsXCJuZ3NcIiwxKTtPaygpJiZUcyhhLFwiZ2FfcmRcIiwxKTtzRCgpfHxUcyhhLFwibmdzdFwiLDEpO3ZhciBiPVNrKCk7YiYmVHMoYSxcImV0bGRcIixiKX19LGpHPWZ1bmN0aW9uKGEpe2lmKFhzKGEpKXt2YXIgYj1BRj9RaygpOlwiXCI7YiYmVHMoYSxcImdjc3ViXCIsYil9fSxrRz1mdW5jdGlvbihhKXtYcyhhKSYmQWsoKSYmXG5VKGEubSxULmcuZmEpJiZUcyhhLFwiYWRyXCIsMSl9LGxHPWZ1bmN0aW9uKGEpe2lmKFhzKGEpKXt2YXIgYj1ncigpO2ImJlRzKGEsXCJ1c19wcml2YWN5XCIsYik7dmFyIGM9eW4oKTtjJiZUcyhhLFwiZ2RwclwiLGMpO3ZhciBkPXhuKCk7ZCYmVHMoYSxcImdkcHJfY29uc2VudFwiLGQpfX0sbUc9ZnVuY3Rpb24oYSl7aWYoWHMoYSkpe3ZhciBiPVVzKGEsXCJjY2RfYWRkXzFwX2RhdGFcIiwhMSk/MTowO1RzKGEsXCJ1ZGVcIixiKTt2YXIgYz1mdW5jdGlvbihlKXt2YXIgZj1jRyhULmcuQ2EsZSk7eihmLGZ1bmN0aW9uKGcsayl7YS5vW2ddPWt9KX0sZD1VKGEubSxULmcuQ2EpO2QhPT12b2lkIDA/KGMoZCksYS5vW1QuZy5sZF09XCJjXCIpOmMoYS5tZXRhZGF0YS51c2VyX2RhdGEpO2EubWV0YWRhdGEudXNlcl9kYXRhPXZvaWQgMH19LG5HPWZ1bmN0aW9uKGEpe2lmKFhzKGEpKXt2YXIgYj12aTtiJiZUcyhhLFwidGZ0XCIsTnVtYmVyKGIpKX19LG9HPWZ1bmN0aW9uKGEpe1hzKGEpJiYoYS5tZXRhZGF0YS5zcGVjdWxhdGl2ZSYmXG5UcyhhLFwic3BcIiwxKSxhLm1ldGFkYXRhLmlzX3N5biYmVHMoYSxcInN5blwiLDEpLGEubWV0YWRhdGEuZW1fZXZlbnQmJihUcyhhLFwiZW1fZXZlbnRcIiwxKSxUcyhhLFwic3BcIiwxKSkpfSxwRz1mdW5jdGlvbihhKXtYcyhhKSYmKGEubWV0YWRhdGEuc3BlY3VsYXRpdmU9ITEpfSxxRz1mdW5jdGlvbihhKXtRKDEwOSkmJlhzKGEpJiZVKGEubSxULmcuQWEpIT09ITEmJkx0KFwiam9pbi1hZC1pbnRlcmVzdC1ncm91cFwiKSYmb2Iob2Muam9pbkFkSW50ZXJlc3RHcm91cCkmJlRzKGEsXCJmbGdcIiwxKX0sckc9ZnVuY3Rpb24oYSl7aWYoWHMoYSkmJmEuZXZlbnROYW1lPT09VC5nLk1jJiZhLm1ldGFkYXRhLmlzX2NvbnNlbnRfdXBkYXRlKXt2YXIgYj1hLm9bVC5nLmdnXTtiJiYoVHMoYSxcImdjdXRcIixiKSxUcyhhLFwic3luXCIsMSkpfX0sc0c9ZnVuY3Rpb24oYSxiKXtpZihYcyhiKSl7dmFyIGM9Yi5tZXRhZGF0YS5pc19jb252ZXJzaW9uOyhiLmV2ZW50TmFtZT09PVwicGFnZV92aWV3XCJ8fGMpJiZmRyhhLFxuYil9fSx0Rz1mdW5jdGlvbihhKXtRKDEwOCkmJlhzKGEpJiZVKGEubSxULmcuRmQsITApPT09ITEmJihhLm9bVC5nLkZkXT0wKX07XG52YXIgdUc9ZnVuY3Rpb24oYSxiKXt2YXIgYzthOnt2YXIgZD1qRihhKTtpZihkKXtpZihoRihkLGEpKXtjPWQ7YnJlYWsgYX1NKDI1KTthLmlzQWJvcnRlZD0hMH1jPXZvaWQgMH12YXIgZT1jO3JldHVybntjbGllbnRJZDokRShhLGIpLFJhOmV9fSx2Rz1mdW5jdGlvbihhLGIsYyxkLGUpe3ZhciBmPVUoYS5tLFQuZy5uYik7aWYoVShhLm0sVC5nLkliKSYmVShhLm0sVC5nLlZiKSlmP1lFKGEsZiwxKTooTSgxMjcpLGEuaXNBYm9ydGVkPSEwKTtlbHNle3ZhciBnPWY/MTo4O2EubWV0YWRhdGEuaXNfbmV3X3RvX3NpdGU9ITE7Znx8KGY9YkYoYSksZz0zKTtmfHwoZj1iLGc9NSk7aWYoIWYpe3ZhciBrPVcoVC5nLlUpLG09VkUoKTtmPSFtLmZyb21fY29va2llfHxrP20udmlkOnZvaWQgMDtnPTZ9Zj9mPVwiXCIrZjooZj1CbygpLGc9NyxhLm1ldGFkYXRhLmlzX2ZpcnN0X3Zpc2l0PWEubWV0YWRhdGEuaXNfbmV3X3RvX3NpdGU9ITApO1lFKGEsZixnKX12YXIgbj1NYXRoLmZsb29yKGEubWV0YWRhdGEuZXZlbnRfc3RhcnRfdGltZXN0YW1wX21zL1xuMUUzKSxwPXZvaWQgMDthLm1ldGFkYXRhLmlzX25ld190b19zaXRlfHwocD1pRihhKXx8Yyk7dmFyIHE9d2IoVShhLm0sVC5nLmpkLDMwKSk7cT1NYXRoLm1pbig0NzUscSk7cT1NYXRoLm1heCg1LHEpO3ZhciByPXdiKFUoYS5tLFQuZy5yZiwxRTQpKSx0PWNGKHApO2EubWV0YWRhdGEuaXNfZmlyc3RfdmlzaXQ9ITE7YS5tZXRhZGF0YS5pc19zZXNzaW9uX3N0YXJ0PSExO2EubWV0YWRhdGEuam9pbl90aW1lcl9zZWM9MDt0JiZ0LndoJiYoYS5tZXRhZGF0YS5qb2luX3RpbWVyX3NlYz1NYXRoLm1heCgwLHQud2gtTWF0aC5tYXgoMCxuLXQuT2UpKSk7dmFyIHU9ITE7dHx8KHU9YS5tZXRhZGF0YS5pc19maXJzdF92aXNpdD0hMCx0PXtzZXNzaW9uSWQ6U3RyaW5nKG4pLEtjOjEseWQ6ITEsT2U6bixHYzohMSxwZDp2b2lkIDB9KTtuPnQuT2UrcSo2MCYmKHU9ITAsdC5zZXNzaW9uSWQ9U3RyaW5nKG4pLHQuS2MrKyx0LnlkPSExLHQucGQ9dm9pZCAwKTtpZih1KWEubWV0YWRhdGEuaXNfc2Vzc2lvbl9zdGFydD1cbiEwLGQuUWwoYSk7ZWxzZSBpZihkLklsKCk+cnx8YS5ldmVudE5hbWU9PT1ULmcuU2IpdC55ZD0hMDthLm1ldGFkYXRhLmV1aWRfbW9kZV9lbmFibGVkP1UoYS5tLFQuZy56YSk/dC5HYz0hMDoodC5HYyYmIVEoMTIpJiYodC5wZD12b2lkIDApLHQuR2M9ITEpOnQuR2M9ITE7dmFyIHY9dC5wZDtpZihhLm1ldGFkYXRhLmV1aWRfbW9kZV9lbmFibGVkfHxYcyhhKSl7dmFyIHc9VShhLm0sVC5nLlBkKSx4PXc/MTo4O3d8fCh3PXYseD00KTt3fHwodz1BbygpLHg9Nyk7dmFyIHk9dy50b1N0cmluZygpLEE9eCxCPWEubWV0YWRhdGEuZW5oYW5jZWRfY2xpZW50X2lkX3NvdXJjZTtpZihCPT09dm9pZCAwfHxBPD1CKWEub1tULmcuUGRdPXksYS5tZXRhZGF0YS5lbmhhbmNlZF9jbGllbnRfaWRfc291cmNlPUF9ZT8oYS5jb3B5VG9IaXREYXRhKFQuZy51Yix0LnNlc3Npb25JZCksYS5jb3B5VG9IaXREYXRhKFQuZy5iZSx0LktjKSxhLmNvcHlUb0hpdERhdGEoVC5nLmFlLHQueWQ/MTowKSk6KGEub1tULmcudWJdPVxudC5zZXNzaW9uSWQsYS5vW1QuZy5iZV09dC5LYyxhLm9bVC5nLmFlXT10LnlkPzE6MCk7YS5tZXRhZGF0YVtULmcua2ZdPXQuR2M/MTowfTt2YXIgd0c9d2luZG93LHhHPWRvY3VtZW50LHlHPWZ1bmN0aW9uKGEpe3ZhciBiPXdHLl9nYVVzZXJQcmVmcztpZihiJiZiLmlvbyYmYi5pb28oKXx8eEcuZG9jdW1lbnRFbGVtZW50Lmhhc0F0dHJpYnV0ZShcImRhdGEtZ29vZ2xlLWFuYWx5dGljcy1vcHQtb3V0XCIpfHxhJiZ3R1tcImdhLWRpc2FibGUtXCIrYV09PT0hMClyZXR1cm4hMDt0cnl7dmFyIGM9d0cuZXh0ZXJuYWw7aWYoYyYmYy5fZ2FVc2VyUHJlZnMmJmMuX2dhVXNlclByZWZzPT1cIm9vXCIpcmV0dXJuITB9Y2F0Y2gocCl7fWZvcih2YXIgZD1bXSxlPVN0cmluZyh4Ry5jb29raWUpLnNwbGl0KFwiO1wiKSxmPTA7ZjxlLmxlbmd0aDtmKyspe3ZhciBnPWVbZl0uc3BsaXQoXCI9XCIpLGs9Z1swXS5yZXBsYWNlKC9eXFxzKnxcXHMqJC9nLFwiXCIpO2lmKGsmJms9PVwiQU1QX1RPS0VOXCIpe3ZhciBtPWcuc2xpY2UoMSkuam9pbihcIj1cIikucmVwbGFjZSgvXlxccyp8XFxzKiQvZyxcIlwiKTttJiYobT1kZWNvZGVVUklDb21wb25lbnQobSkpO2QucHVzaChtKX19Zm9yKHZhciBuPVxuMDtuPGQubGVuZ3RoO24rKylpZihkW25dPT1cIiRPUFRfT1VUXCIpcmV0dXJuITA7cmV0dXJuIHhHLmdldEVsZW1lbnRCeUlkKFwiX19nYU9wdE91dEV4dGVuc2lvblwiKT8hMDohMX07XG52YXIgQUc9ZnVuY3Rpb24oYSl7cmV0dXJuIWF8fHpHLnRlc3QoYSl8fFZoLmhhc093blByb3BlcnR5KGEpfSxCRz1mdW5jdGlvbihhKXt2YXIgYj1ULmcuS2IsYztjfHwoYz1mdW5jdGlvbigpe30pO2Eub1tiXSE9PXZvaWQgMCYmKGEub1tiXT1jKGEub1tiXSkpfSxDRz1mdW5jdGlvbihhKXt2YXIgYj1hLmluZGV4T2YoXCI/XCIpLGM9Yj09PS0xP2E6YS5zdWJzdHJpbmcoMCxiKTt0cnl7Yz1kZWNvZGVVUklDb21wb25lbnQoYyl9Y2F0Y2goZCl7fXJldHVybiBiPT09LTE/YzpcIlwiK2MrYS5zdWJzdHJpbmcoYil9LERHPWZ1bmN0aW9uKGEpe1UoYS5tLFQuZy5XYSkmJihXKFQuZy5VKXx8VShhLm0sVC5nLm5iKXx8KGEub1tULmcuZWpdPSEwKSk7dmFyIGI7dmFyIGM7Yz1jPT09dm9pZCAwPzM6Yzt2YXIgZD1ELmxvY2F0aW9uLmhyZWY7aWYoZCl7dmFyIGU9YWooZCkuc2VhcmNoLnJlcGxhY2UoXCI/XCIsXCJcIiksZj1VaShlLFwiX2dsXCIsITEsITApfHxcIlwiO2I9Zj9WbyhmLGMpIT09dm9pZCAwOiExfWVsc2UgYj1cbiExO2ImJlhzKGEpJiZUcyhhLFwiZ2x2XCIsMSk7aWYoYS5ldmVudE5hbWUhPT1ULmcuYmEpcmV0dXJue307VShhLm0sVC5nLldhKSYmbnEoW1wiYXdcIixcImRjXCJdKTtwcShbXCJhd1wiLFwiZGNcIl0pO3ZhciBnPW9GKGEpLGs9cUYoYSk7cmV0dXJuIE9iamVjdC5rZXlzKGcpLmxlbmd0aD9nOmt9LEVHPWZ1bmN0aW9uKGEpe3ZhciBiPUxiKEVsKGEubSxULmcua2EsMSksXCIuXCIpO2ImJihhLm9bVC5nLnNiXT1iKTt2YXIgYz1MYihFbChhLm0sVC5nLmthLDIpLFwiLlwiKTtjJiYoYS5vW1QuZy5wYl09Yyl9LEl0PXt6bDpcIlwiLGRuOk51bWJlcihcIlwiKX0sRkc9e30sR0c9KEZHW1QuZy5OY109MSxGR1tULmcuT2NdPTEsRkdbVC5nLlBjXT0xLEZHW1QuZy5RY109MSxGR1tULmcuU2NdPTEsRkdbVC5nLlRjXT0xLEZHKSx6Rz0vXihffGdhX3xnb29nbGVffGd0YWdcXC58ZmlyZWJhc2VfKS4qJC8sSEc9W2tyLFxuRUcsUHJdLElHPWZ1bmN0aW9uKGEpe3RoaXMuSD1hO3RoaXMuaj10aGlzLlJhPXRoaXMuY2xpZW50SWQ9dm9pZCAwO3RoaXMuUGE9dGhpcy5SPSExO3RoaXMuQmM9MDt0aGlzLk09ITE7dGhpcy5aPW5ldyBaRjt0aGlzLkQ9bmV3IFJFfTtiYT1JRy5wcm90b3R5cGU7YmEuRW09ZnVuY3Rpb24oYSxiLGMpe3ZhciBkPXRoaXMsZT1qbCh0aGlzLkgpO2lmKGUpaWYoYy5ldmVudE1ldGFkYXRhLmlzX2V4dGVybmFsX2V2ZW50JiZhLmNoYXJBdCgwKT09PVwiX1wiKWMub25GYWlsdXJlKCk7ZWxzZXthIT09VC5nLmJhJiZhIT09VC5nLlRhJiZBRyhhKSYmTSg1OCk7SkcoYy5qKTt2YXIgZj1uZXcgJEEoZSxhLGMpO2YubWV0YWRhdGEuZXZlbnRfc3RhcnRfdGltZXN0YW1wX21zPWI7dmFyIGc9W1QuZy5VXTtpZihVcyhmLFQuZy55YyxVKGYubSxULmcueWMpKXx8WHMoZikpZy5wdXNoKFQuZy5QKSxnLnB1c2goVC5nLk8pO0p0KGZ1bmN0aW9uKCl7Y2woZnVuY3Rpb24oKXtkLkZtKGYpfSxnKX0pO3RoaXMuQ20oYSxcbmMsZil9ZWxzZSBjLm9uRmFpbHVyZSgpfTtiYS5DbT1mdW5jdGlvbihhLGIsYyl7dmFyIGQ9amwodGhpcy5IKTtpZihRKDY2KSYmYT09PVQuZy5iYSYmVXMoYyxcImdhNF9hZHNfbGlua2VkXCIsITEpKXt2YXIgZT1mdW5jdGlvbigpe2Zvcih2YXIgaz1uYShIRyksbT1rLm5leHQoKTshbS5kb25lO209ay5uZXh0KCkpe3ZhciBuPW0udmFsdWU7bihmKTtpZihmLmlzQWJvcnRlZClicmVha31mLm1ldGFkYXRhLnNwZWN1bGF0aXZlfHxmLmlzQWJvcnRlZHx8R3UoZil9LGY9bmV3ICRBKGQsYSxiKTtmLm1ldGFkYXRhLmhpdF90eXBlPVwicGFnZV92aWV3XCI7Zi5tZXRhZGF0YS5zcGVjdWxhdGl2ZT0hMDtmLm1ldGFkYXRhLmlzX3NlcnZlcl9zaWRlX2Rlc3RpbmF0aW9uPVhzKGMpO3ZhciBnPVtULmcuUCxULmcuT107Y2woZnVuY3Rpb24oKXtlKCk7VyhnKXx8YmwoZnVuY3Rpb24oayl7dmFyIG0sbjttPWsuY29uc2VudEV2ZW50SWQ7bj1rLmNvbnNlbnRQcmlvcml0eUlkO2YubWV0YWRhdGEuY29uc2VudF91cGRhdGVkPVxuITA7Zi5tZXRhZGF0YS5jb25zZW50X2V2ZW50X2lkPW07Zi5tZXRhZGF0YS5jb25zZW50X3ByaW9yaXR5X2lkPW47ZSgpfSxnKX0sZyl9fTtiYS5GbT1mdW5jdGlvbihhKXt2YXIgYj10aGlzO3RoaXMuaj1hO3RyeXtLRyhhKTtMRyhhKTtNRyhhKTtORyhhKTtRKDk3KSYmKGEuaXNBYm9ydGVkPSEwKTtwcihhKTt2YXIgYz17fTt1RihhLGMpO2lmKGEuaXNBYm9ydGVkKXthLm0ub25GYWlsdXJlKCk7VUUoKTtyZXR1cm59dmFyIGQ9Yy5tbDtjLnNsPT09MCYmU0UoMjUpO2Q9PT0wJiZTRSgyNik7T0coYSk7UEcoYSk7dGhpcy5PayhhKTt0aGlzLkQuWm0oYSk7UUcoYSk7UkcoYSk7U0coYSk7dGhpcy5XaihERyhhKSk7dmFyIGU9YS5ldmVudE5hbWU9PT1ULmcuYmE7ZSYmKHRoaXMuTT0hMCk7VEcoYSk7ZSYmIWEuaXNBYm9ydGVkJiZ0aGlzLkJjKys+MCYmU0UoMTcpO1VHKGEpO3ZHKGEsdGhpcy5jbGllbnRJZCx0aGlzLlJhLHRoaXMuRCwhdGhpcy5QYSk7VkcoYSk7V0coYSk7WEcoYSk7XG5ZRyhhKTtaRyhhKTskRyhhKTthSChhKTtyRihhKTt2RihhKTtnRyhhKTtoRyhhKTtpRyhhKTtqRyhhKTtrRyhhKTtsRyhhKTtuRyhhKTtvRyhhKTtxRyhhKTtyRyhhKTt0RyhhKTtzRihhKTtiSChhKTtjSChhKTtkSChhKTtycihhKTtxcihhKTtlSChhKTtmSChhKTtQcihhKTttRyhhKTtwRyhhKTtnSChhKTshdGhpcy5NJiZhLm1ldGFkYXRhLmVtX2V2ZW50JiZTRSgxOCk7VEUoYSk7aWYoYS5tZXRhZGF0YS5zcGVjdWxhdGl2ZXx8YS5pc0Fib3J0ZWQpe2EubS5vbkZhaWx1cmUoKTtVRSgpO3JldHVybn10aGlzLldqKHVHKGEsdGhpcy5jbGllbnRJZCkpO3RoaXMuUGE9ITA7dGhpcy5VbShhKTtoSChhKTtzRyhmdW5jdGlvbihmKXtiLnlqKGYpfSxhKTt0aGlzLkQuS2goKTtpSChhKTtpZihhLmlzQWJvcnRlZCl7YS5tLm9uRmFpbHVyZSgpO1VFKCk7cmV0dXJufXRoaXMueWooYSk7YS5tLm9uU3VjY2VzcygpfWNhdGNoKGYpe2EubS5vbkZhaWx1cmUoKX1VRSgpfTtiYS55aj1mdW5jdGlvbihhKXt0aGlzLlouYWRkKGEpfTtcbmJhLldqPWZ1bmN0aW9uKGEpe3ZhciBiPWEuY2xpZW50SWQsYz1hLlJhO2ImJmMmJih0aGlzLmNsaWVudElkPWIsdGhpcy5SYT1jKX07YmEuZmx1c2g9ZnVuY3Rpb24oKXt0aGlzLlouZmx1c2goKX07YmEuVW09ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcztpZighdGhpcy5SKXt2YXIgYz1XKFQuZy5PKSxkPVcoVC5nLlUpO2FsKFtULmcuTyxULmcuVV0sZnVuY3Rpb24oKXt2YXIgZT1XKFQuZy5PKSxmPVcoVC5nLlUpLGc9ITEsaz17fSxtPXt9O2lmKGQhPT1mJiZiLmomJmIuUmEmJmIuY2xpZW50SWQpe3ZhciBuPWIuY2xpZW50SWQscDt2YXIgcT1jRihiLlJhKTtwPXE/cS5wZDp2b2lkIDA7aWYoZil7dmFyIHI9YkYoYi5qKTtpZihyKXtiLmNsaWVudElkPXI7dmFyIHQ9aUYoYi5qKTt0JiYoYi5SYT1lRih0LGIuUmEsYi5qKSl9ZWxzZSBaRShiLmNsaWVudElkLGIuaiksWEUoYi5jbGllbnRJZCwhMCk7aEYoYi5SYSxiLmopO2c9ITA7a1tULmcudWddPW47USg1NykmJnAmJihrW1QuZy5Ha109XG5wKX1lbHNlIGIuUmE9dm9pZCAwLGIuY2xpZW50SWQ9dm9pZCAwLEQuZ2FHbG9iYWw9e319ZSYmIWMmJihnPSEwLG0uaXNfY29uc2VudF91cGRhdGU9ITAsa1tULmcuZ2ddPWNpW1QuZy5PXSk7aWYoZyl7dmFyIHU9QXgoYi5ILFQuZy5NYyxrKTtIeCh1LGEubS5ldmVudElkLHtldmVudE1ldGFkYXRhOm19KX1kPWY7Yz1lfSk7dGhpcy5SPSEwfX07YmEuT2s9ZnVuY3Rpb24oYSl7YS5ldmVudE5hbWUhPT1ULmcuVGEmJnRoaXMuRC5OayhhKX07dmFyIE1HPWZ1bmN0aW9uKGEpe3ZhciBiPUUubG9jYXRpb24ucHJvdG9jb2w7YiE9PVwiaHR0cDpcIiYmYiE9PVwiaHR0cHM6XCImJihNKDI5KSxhLmlzQWJvcnRlZD0hMCl9LE5HPWZ1bmN0aW9uKGEpe29jJiZvYy5sb2FkUHVycG9zZT09PVwicHJldmlld1wiJiYoTSgzMCksYS5pc0Fib3J0ZWQ9ITApfSxPRz1mdW5jdGlvbihhKXt2YXIgYj17cHJlZml4OlN0cmluZyhVKGEubSxULmcuTmEsXCJcIikpLHBhdGg6U3RyaW5nKFUoYS5tLFQuZy5GYixcIi9cIikpLFxuZmxhZ3M6U3RyaW5nKFUoYS5tLFQuZy5ZYSxcIlwiKSksZG9tYWluOlN0cmluZyhVKGEubSxULmcuVmEsXCJhdXRvXCIpKSx6YjpOdW1iZXIoVShhLm0sVC5nLk1hLDYzMDcyRTMpKX07YS5tZXRhZGF0YS5jb29raWVfb3B0aW9ucz1ifSxRRz1mdW5jdGlvbihhKXtpZihhLm1ldGFkYXRhLmlzX21lcmNoYW50X2NlbnRlcilhLm1ldGFkYXRhLmV1aWRfbW9kZV9lbmFibGVkPSExO2Vsc2UgaWYoVXMoYSxcImNjZF9hZGRfMXBfZGF0YVwiLCExKXx8VXMoYSxcImNjZF9hZGRfZWNfc3RpdGNoaW5nXCIsITEpKWEubWV0YWRhdGEuZXVpZF9tb2RlX2VuYWJsZWQ9ITB9LFJHPWZ1bmN0aW9uKGEpe2lmKGEubWV0YWRhdGEuZXVpZF9tb2RlX2VuYWJsZWQmJlVzKGEsXCJjY2RfYWRkXzFwX2RhdGFcIiwhMSkpe3ZhciBiPWEubS5EW1QuZy5kZV07aWYoUmkoYikpe3ZhciBjPVUoYS5tLFQuZy5DYSk7Yz09PW51bGw/YS5tZXRhZGF0YS51c2VyX2RhdGFfZnJvbV9jb2RlPW51bGw6KGIuZW5hYmxlX2NvZGUmJlNhKGMpJiZcbihhLm1ldGFkYXRhLnVzZXJfZGF0YV9mcm9tX2NvZGU9YyksU2EoYi5zZWxlY3RvcnMpJiYhYS5tZXRhZGF0YS51c2VyX2RhdGFfZnJvbV9tYW51YWwmJihhLm1ldGFkYXRhLnVzZXJfZGF0YV9mcm9tX21hbnVhbD1RaShiLnNlbGVjdG9ycykpKX19fSxTRz1mdW5jdGlvbihhKXtpZihRKDY3KSYmIVEoNjYpJiZVcyhhLFwiZ2E0X2Fkc19saW5rZWRcIiwhMSkmJmEuZXZlbnROYW1lPT09VC5nLmJhKXt2YXIgYj1VKGEubSxULmcub2EpIT09ITE7aWYoYil7dmFyIGM9aHIoYSk7Yy56YiYmKGMuemI9TWF0aC5taW4oYy56Yiw3Nzc2RTMpKTtpcih7b2Q6Yix3ZDpVKGEubSxULmcucWEpfHx7fSxCZDpVKGEubSxULmcuV2EpLGJjOmN9KX19fSxiSD1mdW5jdGlvbihhKXtpZighRXQoRCkpTSg4Nyk7ZWxzZSBpZihHdCE9PXZvaWQgMCl7TSg4NSk7dmFyIGI9Q3QoKTtiP1UoYS5tLFQuZy5aZCkmJiFYcyhhKXx8S3QoYixhKTpNKDg2KX19LFRHPWZ1bmN0aW9uKGEpe2EuZXZlbnROYW1lPT09VC5nLmJhJiZcbihVKGEubSxULmcuSWEsITApPyhhLm0ualtULmcua2FdJiYoYS5tLkhbVC5nLmthXT1hLm0ualtULmcua2FdLGEubS5qW1QuZy5rYV09dm9pZCAwLGEub1tULmcua2FdPXZvaWQgMCksYS5ldmVudE5hbWU9VC5nLlNiKTphLmlzQWJvcnRlZD0hMCl9LFBHPWZ1bmN0aW9uKGEpe2Z1bmN0aW9uIGIoYyxkKXtUaFtjXXx8ZD09PXZvaWQgMHx8KGEub1tjXT1kKX16KGEubS5ILGIpO3ooYS5tLmosYil9LFZHPWZ1bmN0aW9uKGEpe3ZhciBiPUZsKGEubSksYz1mdW5jdGlvbihkLGUpe0dHW2RdJiYoYS5vW2RdPWUpfTtTYShiW1QuZy5SY10pP3ooYltULmcuUmNdLGZ1bmN0aW9uKGQsZSl7YygoVC5nLlJjK1wiX1wiK2QpLnRvTG93ZXJDYXNlKCksZSl9KTp6KGIsYyl9LFVHPUVHLGhIPWZ1bmN0aW9uKGEpe2lmKFEoOTEpJiZXKFQuZy5VKSl7WHMoYSkmJihhLm1ldGFkYXRhLmlzX3NndG1fc2VydmljZV93b3JrZXI9ITAsWHMoYSkmJlRzKGEsXCJzd19leHBcIiwxKSk7YTp7fX19LGVIPWZ1bmN0aW9uKGEpe2lmKGEuZXZlbnROYW1lPT09VC5nLlRhKXt2YXIgYj1VKGEubSxULmcucmIpO1UoYS5tLFQuZy5HYikoYS5vW2JdfHxVKGEubSxiKSk7YS5pc0Fib3J0ZWQ9ITB9fSxXRz1mdW5jdGlvbihhKXtpZighVShhLm0sVC5nLlZiKXx8IVUoYS5tLFQuZy5JYikpe3ZhciBiPWEuY29weVRvSGl0RGF0YSxjPVQuZy5yYSxkPVwiXCIsZT1FLmxvY2F0aW9uO2lmKGUpe3ZhciBmPWUucGF0aG5hbWV8fFwiXCI7Zi5jaGFyQXQoMCkhPT1cIi9cIiYmKGY9XCIvXCIrZik7dmFyIGc9ZS5zZWFyY2h8fFwiXCI7aWYoZyYmZ1swXT09PVwiP1wiKWZvcih2YXIgaz1cbmcuc3Vic3RyaW5nKDEpLnNwbGl0KFwiJlwiKSxtPTA7bTxrLmxlbmd0aDsrK20pe3ZhciBuPWtbbV0uc3BsaXQoXCI9XCIpO24mJm4ubGVuZ3RoPT09MiYmblswXT09PVwid2JyYWlkXCImJihnPWcucmVwbGFjZSgvKFs/Jl0pd2JyYWlkPVteJl0rLyxcIiQxd2JyYWlkPVwiK05iKG5bMV0pKSl9ZD1lLnByb3RvY29sK1wiLy9cIitlLmhvc3RuYW1lK2YrZ31iLmNhbGwoYSxjLGQsQ0cpO3ZhciBwPWEuY29weVRvSGl0RGF0YSxxPVQuZy5CYSxyO2E6e3ZhciB0PWpvKFwiX29wdF9leHBpZFwiLHZvaWQgMCx2b2lkIDAsVC5nLlUpWzBdO2lmKHQpe3ZhciB1PWRlY29kZVVSSUNvbXBvbmVudCh0KS5zcGxpdChcIiRcIik7aWYodS5sZW5ndGg9PT0zKXtyPXVbMl07YnJlYWsgYX19aWYoaWkuZ2E0X3JlZmVycmVyX292ZXJyaWRlIT09dm9pZCAwKXI9aWkuZ2E0X3JlZmVycmVyX292ZXJyaWRlO2Vsc2V7dmFyIHY9SmkoXCJndG0uZ3RhZ1JlZmVycmVyLlwiK2EudGFyZ2V0LmRlc3RpbmF0aW9uSWQpLHc9RS5yZWZlcnJlcjtcbnI9dj9cIlwiK3Y6d319cC5jYWxsKGEscSxyfHx2b2lkIDAsQ0cpO2EuY29weVRvSGl0RGF0YShULmcuWmEsRS50aXRsZSk7YS5jb3B5VG9IaXREYXRhKFQuZy5PYSwob2MubGFuZ3VhZ2V8fFwiXCIpLnRvTG93ZXJDYXNlKCkpO3ZhciB4PVlyKCk7YS5jb3B5VG9IaXREYXRhKFQuZy5LYix4LndpZHRoK1wieFwiK3guaGVpZ2h0KTtRKDEwNSkmJmEuY29weVRvSGl0RGF0YShULmcuZmQsdm9pZCAwLENHKTtRKDcwKSYmUXEoKSYmYS5jb3B5VG9IaXREYXRhKFQuZy5kZCxcIjFcIil9fSxZRz1mdW5jdGlvbihhKXthLm1ldGFkYXRhLmNyZWF0ZV9kY19qb2luPSExO2EubWV0YWRhdGEuY3JlYXRlX2dvb2dsZV9qb2luPSExO2lmKCEoRGkoKXx8USg2KSYmWHMoYSl8fGEubWV0YWRhdGEuaXNfbWVyY2hhbnRfY2VudGVyfHxVKGEubSxULmcubGIpPT09ITEpJiZzRCgpJiZXKFQuZy5QKSl7dmFyIGI9WXMoYSk7KGEubWV0YWRhdGEuaXNfc2Vzc2lvbl9zdGFydHx8VShhLm0sVC5nLnVnKSkmJihhLm1ldGFkYXRhLmNyZWF0ZV9kY19qb2luPVxuISFiKTt2YXIgYz1hLm1ldGFkYXRhLmpvaW5fdGltZXJfc2VjO2ImJihjfHwwKT09PTAmJihhLm1ldGFkYXRhLmpvaW5fdGltZXJfc2VjPTYwLGEubWV0YWRhdGEuY3JlYXRlX2dvb2dsZV9qb2luPSEwKX19LGFIPWZ1bmN0aW9uKGEpe2EuY29weVRvSGl0RGF0YShULmcudmYpO2Zvcih2YXIgYj1VKGEubSxULmcubmYpfHxbXSxjPTA7YzxiLmxlbmd0aDtjKyspe3ZhciBkPWJbY107aWYoZC5ydWxlX3Jlc3VsdCl7YS5jb3B5VG9IaXREYXRhKFQuZy52ZixkLnRyYWZmaWNfdHlwZSk7U0UoMyk7YnJlYWt9fX0saUg9ZnVuY3Rpb24oYSl7YS5jb3B5VG9IaXREYXRhKFQuZy52Zyk7VShhLm0sVC5nLlpkKSYmKGEub1tULmcuWmRdPSEwLFhzKGEpfHxCRyhhKSl9LGZIPWZ1bmN0aW9uKGEpe2EuY29weVRvSGl0RGF0YShULmcuemEpO2EuY29weVRvSGl0RGF0YShULmcuYWIpfSxYRz1mdW5jdGlvbihhKXtVcyhhLFwiZ29vZ2xlX25nXCIpJiYhT2soKT9hLmNvcHlUb0hpdERhdGEoVC5nLnhjLDEpOlxuc3IoYSl9LGRIPWZ1bmN0aW9uKGEpe2lmKFUoYS5tLFQuZy5BYSkhPT0hMSYmRW4oYS5tKSl7dmFyIGI9WXMoYSksYz1VKGEubSxULmcubGIpO2ImJmMhPT0hMSYmc0QoKSYmVyhULmcuUCkmJndrKFQuZy5PKSYmeWsoW1wiYWRzXCJdKS5hZHMmJk10KCkmJihhLm9bVC5nLkZnXT0hMCl9fSxnSD1mdW5jdGlvbihhKXt2YXIgYj1VKGEubSxULmcuSWIpO2ImJlNFKDEyKTthLm1ldGFkYXRhLmVtX2V2ZW50JiZTRSgxNCk7dmFyIGM9S2ooTGooKSk7KGJ8fFpqKGMpfHxjJiZjLnBhcmVudCYmYy5jb250ZXh0JiZjLmNvbnRleHQuc291cmNlPT09NSkmJlNFKDE5KX0sS0c9ZnVuY3Rpb24oYSl7aWYoeUcoYS50YXJnZXQuZGVzdGluYXRpb25JZCkpTSgyOCksYS5pc0Fib3J0ZWQ9ITA7ZWxzZSBpZihRKDEwNCkpe3ZhciBiPUpqKCk7aWYoYiYmQXJyYXkuaXNBcnJheShiLmRlc3RpbmF0aW9ucykpZm9yKHZhciBjPTA7YzxiLmRlc3RpbmF0aW9ucy5sZW5ndGg7YysrKWlmKHlHKGIuZGVzdGluYXRpb25zW2NdKSl7TSgxMjUpO1xuYS5pc0Fib3J0ZWQ9ITA7YnJlYWt9fX0sY0g9ZnVuY3Rpb24oYSl7THQoXCJhdHRyaWJ1dGlvbi1yZXBvcnRpbmdcIikmJihhLm9bVC5nLlViXT1cIjFcIil9LExHPWZ1bmN0aW9uKGEpe2lmKEl0LnpsLnJlcGxhY2UoL1xccysvZyxcIlwiKS5zcGxpdChcIixcIikuaW5kZXhPZihhLmV2ZW50TmFtZSk+PTApYS5pc0Fib3J0ZWQ9ITA7ZWxzZXt2YXIgYj1WcyhhKTtiJiZiLmJsYWNrbGlzdGVkJiYoYS5pc0Fib3J0ZWQ9ITApfX0sWkc9ZnVuY3Rpb24oYSl7dmFyIGI9ZnVuY3Rpb24oYyl7cmV0dXJuISFjJiZjLmNvbnZlcnNpb259O2EubWV0YWRhdGEuaXNfY29udmVyc2lvbj1iKFZzKGEpKTthLm1ldGFkYXRhLmlzX2ZpcnN0X3Zpc2l0JiYoYS5tZXRhZGF0YS5pc19maXJzdF92aXNpdF9jb252ZXJzaW9uPWIoVnMoYSxcImZpcnN0X3Zpc2l0XCIpKSk7YS5tZXRhZGF0YS5pc19zZXNzaW9uX3N0YXJ0JiYoYS5tZXRhZGF0YS5pc19zZXNzaW9uX3N0YXJ0X2NvbnZlcnNpb249YihWcyhhLFwic2Vzc2lvbl9zdGFydFwiKSkpfSxcbiRHPWZ1bmN0aW9uKGEpe1hoLmhhc093blByb3BlcnR5KGEuZXZlbnROYW1lKSYmKGEubWV0YWRhdGEuaXNfZWNvbW1lcmNlPSEwLGEuY29weVRvSGl0RGF0YShULmcuZGEpLGEuY29weVRvSGl0RGF0YShULmcueGEpKX07ZnVuY3Rpb24gSkcoYSl7eihhLGZ1bmN0aW9uKGMpe2MuY2hhckF0KDApPT09XCJfXCImJmRlbGV0ZSBhW2NdfSk7dmFyIGI9YVtULmcuYWJdfHx7fTt6KGIsZnVuY3Rpb24oYyl7Yy5jaGFyQXQoMCk9PT1cIl9cIiYmZGVsZXRlIGJbY119KX12YXIga0g9ZnVuY3Rpb24oYSl7aWYoIWpIKGEpKXt2YXIgYj0hMSxjPWZ1bmN0aW9uKCl7IWImJmpIKGEpJiYoYj0hMCxEYyhFLFwidmlzaWJpbGl0eWNoYW5nZVwiLGMpLFEoNCkmJkRjKEUsXCJwcmVyZW5kZXJpbmdjaGFuZ2VcIixjKSxNKDU1KSl9O0NjKEUsXCJ2aXNpYmlsaXR5Y2hhbmdlXCIsYyk7USg0KSYmQ2MoRSxcInByZXJlbmRlcmluZ2NoYW5nZVwiLGMpO00oNTQpfX0sakg9ZnVuY3Rpb24oYSl7aWYoUSg0KSYmXCJwcmVyZW5kZXJpbmdcImluIEU/RS5wcmVyZW5kZXJpbmc6RS52aXNpYmlsaXR5U3RhdGU9PT1cInByZXJlbmRlclwiKXJldHVybiExO2EoKTtyZXR1cm4hMH07dmFyIG1IPWZ1bmN0aW9uKGEsYil7a0goZnVuY3Rpb24oKXt2YXIgYz1qbChhKTtpZihjKXt2YXIgZD1sSChjLGIpO2ttKGEsZCl9fSk7fTtmdW5jdGlvbiBsSChhLGIpe3ZhciBjPWZ1bmN0aW9uKCl7fTt2YXIgZD1uZXcgSUcoYS5pZCksZT1hLnByZWZpeD09PVwiTUNcIjtjPWZ1bmN0aW9uKGYsZyxrLG0pe2UmJihtLmV2ZW50TWV0YWRhdGEuaXNfbWVyY2hhbnRfY2VudGVyPSEwKTtkLkVtKGcsayxtKX07QWp8fG5IKGEsZCxiKTtyZXR1cm4gY31cbmZ1bmN0aW9uIG5IKGEsYixjKXt2YXIgZD1iLkQsZT17fSxmPXtldmVudElkOmMsZXZlbnRNZXRhZGF0YTooZS5iYXRjaF9vbl9uYXZpZ2F0aW9uPSEwLGUpfTtRKDQ4KSYmKGYuZGVmZXJyYWJsZT0hMCk7ZC5IbShmdW5jdGlvbigpe09FPSEwO2xtLmZsdXNoKCk7ZC5LZigpPj0xRTMmJm9jLnNlbmRCZWFjb24mJm1tKFQuZy5NYyx7fSxhLmlkLGYpO2IuZmx1c2goKTtkLlhqKGZ1bmN0aW9uKCl7T0U9ITE7ZC5YaigpfSl9KTt9O3ZhciBvSD1sSDtmdW5jdGlvbiBxSChhLGIsYyl7dmFyIGQ9dGhpczt9cUguSj1cImludGVybmFsLmd0YWdDb25maWdcIjtmdW5jdGlvbiBySCgpe3ZhciBhPXt9O3JldHVybiBhfTtcbmZ1bmN0aW9uIHRIKGEsYil7fXRILlQ9XCJndGFnU2V0XCI7ZnVuY3Rpb24gdUgoYSxiKXt9dUguVD1cImluamVjdEhpZGRlbklmcmFtZVwiO3ZhciB2SD1seigpO1xuZnVuY3Rpb24gd0goYSxiLGMsZCxlKXt9d0guSj1cImludGVybmFsLmluamVjdEh0bWxcIjt2YXIgQUg9e307XG5mdW5jdGlvbiBDSChhLGIsYyxkKXt9dmFyIERIPXtkbDoxLGlkOjF9LEVIPXt9O1xuZnVuY3Rpb24gRkgoYSxiLGMsZCl7fUNILlQ9XCJpbmplY3RTY3JpcHRcIjtGSC5KPVwiaW50ZXJuYWwuaW5qZWN0U2NyaXB0XCI7ZnVuY3Rpb24gR0goYSl7dmFyIGI9ITA7cmV0dXJuIGJ9R0guVD1cImlzQ29uc2VudEdyYW50ZWRcIjtmdW5jdGlvbiBISCgpe3JldHVybiBQaygpfUhILko9XCJpbnRlcm5hbC5pc0RtYVJlZ2lvblwiO2Z1bmN0aW9uIElIKGEpe3ZhciBiPSExO3JldHVybiBifUlILko9XCJpbnRlcm5hbC5pc0VudGl0eUluZnJhc3RydWN0dXJlXCI7ZnVuY3Rpb24gSkgoKXt2YXIgYT1YZyhmdW5jdGlvbihiKXt6eih0aGlzKS5sb2coXCJlcnJvclwiLGIpfSk7YS5UPVwiSlNPTlwiO3JldHVybiBhfTtmdW5jdGlvbiBLSChhKXt2YXIgYj12b2lkIDA7cmV0dXJuIGRkKGIpfUtILko9XCJpbnRlcm5hbC5sZWdhY3lQYXJzZVVybFwiO2Z1bmN0aW9uIExIKCl7cmV0dXJuITF9XG52YXIgTUg9e2dldEl0ZW06ZnVuY3Rpb24oYSl7dmFyIGI9bnVsbDtyZXR1cm4gYn0sc2V0SXRlbTpmdW5jdGlvbihhLGIpe3JldHVybiExfSxyZW1vdmVJdGVtOmZ1bmN0aW9uKGEpe319O2Z1bmN0aW9uIE5IKCl7fU5ILlQ9XCJsb2dUb0NvbnNvbGVcIjtmdW5jdGlvbiBPSChhLGIpe31PSC5KPVwiaW50ZXJuYWwubWVyZ2VSZW1vdGVDb25maWdcIjtmdW5jdGlvbiBQSChhLGIsYyl7Yz1jPT09dm9pZCAwPyEwOmM7dmFyIGQ9W107cmV0dXJuIGRkKGQpfVBILko9XCJpbnRlcm5hbC5wYXJzZUNvb2tpZVZhbHVlc0Zyb21TdHJpbmdcIjtmdW5jdGlvbiBRSChhKXt2YXIgYj12b2lkIDA7cmV0dXJuIGJ9UUguVD1cInBhcnNlVXJsXCI7ZnVuY3Rpb24gUkgoYSl7fVJILko9XCJpbnRlcm5hbC5wcm9jZXNzQXNOZXdFdmVudFwiO2Z1bmN0aW9uIFNIKGEsYixjKXt2YXIgZDtyZXR1cm4gZH1TSC5KPVwiaW50ZXJuYWwucHVzaFRvRGF0YUxheWVyXCI7ZnVuY3Rpb24gVEgoYSl7dmFyIGI9ITE7cmV0dXJuIGJ9VEguVD1cInF1ZXJ5UGVybWlzc2lvblwiO2Z1bmN0aW9uIFVIKCl7dmFyIGE9XCJcIjtyZXR1cm4gYX1VSC5UPVwicmVhZENoYXJhY3RlclNldFwiO2Z1bmN0aW9uIFZIKCl7cmV0dXJuIGhpLmhifVZILko9XCJpbnRlcm5hbC5yZWFkRGF0YUxheWVyTmFtZVwiO2Z1bmN0aW9uIFdIKCl7dmFyIGE9XCJcIjtyZXR1cm4gYX1XSC5UPVwicmVhZFRpdGxlXCI7ZnVuY3Rpb24gWEgoYSxiKXt2YXIgYz10aGlzO0sodGhpcy5nZXROYW1lKCksW1wiZGVzdGluYXRpb25JZDohc3RyaW5nXCIsXCJjYWxsYmFjazohRm5cIl0sYXJndW1lbnRzKSxRcihhLGZ1bmN0aW9uKGQpe2IuaW52b2tlKGMuRixkZChkLGMuRiwxKSl9KTt9WEguSj1cImludGVybmFsLnJlZ2lzdGVyQ2NkQ2FsbGJhY2tcIjtmdW5jdGlvbiBZSChhKXtyZXR1cm4hMH1cbllILko9XCJpbnRlcm5hbC5yZWdpc3RlckRlc3RpbmF0aW9uXCI7dmFyIFpIPVtcImNvbmZpZ1wiLFwiZXZlbnRcIixcImdldFwiLFwic2V0XCJdO2Z1bmN0aW9uICRIKGEsYixjKXt9JEguSj1cImludGVybmFsLnJlZ2lzdGVyR3RhZ0NvbW1hbmRMaXN0ZW5lclwiO2Z1bmN0aW9uIGFJKGEsYil7dmFyIGM9ITE7cmV0dXJuIGN9YUkuSj1cImludGVybmFsLnJlbW92ZURhdGFMYXllckV2ZW50TGlzdGVuZXJcIjtmdW5jdGlvbiBiSShhLGIpe31cbmJJLko9XCJpbnRlcm5hbC5yZW1vdmVGb3JtRGF0YVwiO2Z1bmN0aW9uIGNJKCl7fWNJLlQ9XCJyZXNldERhdGFMYXllclwiO2Z1bmN0aW9uIGRJKGEsYixjLGQpe0sodGhpcy5nZXROYW1lKCksW1wiZGVzdGluYXRpb25JZHM6ISpcIixcImV2ZW50TmFtZTohKlwiLFwiZXZlbnRQYXJhbWV0ZXJzOj9QaXhpZU1hcFwiLFwibWVzc2FnZUNvbnRleHQ6P1BpeGllTWFwXCJdLGFyZ3VtZW50cyk7dmFyIGU9Yz9KKGMpOnt9LGY9SihhKTtBcnJheS5pc0FycmF5KGYpfHwoZj1bZl0pO2I9U3RyaW5nKGIpO3ZhciBnPWQ/SihkKTp7fSxrPXp6KHRoaXMpO2cub3JpZ2luYXRpbmdFbnRpdHk9cEEoayk7dmFyIG09Zjtmb3IodmFyIG49MDtuPG0ubGVuZ3RoO24rKyl7dmFyIHA9bVtuXTtpZih0eXBlb2YgcD09PVwic3RyaW5nXCIpe3ZhciBxPVxue307aChlLHEpO3ZhciByPXt9O2goZyxyKTt2YXIgdD1BeChwLGIscSk7SHgodCxnLmV2ZW50SWR8fGsuZXZlbnRJZCxyKX19fWRJLko9XCJpbnRlcm5hbC5zZW5kR3RhZ0V2ZW50XCI7ZnVuY3Rpb24gZUkoYSxiLGMpe31lSS5UPVwic2VuZFBpeGVsXCI7ZnVuY3Rpb24gZkkoYSxiKXt9ZkkuSj1cImludGVybmFsLnNldEFuY2hvckhyZWZcIjtmdW5jdGlvbiBnSShhKXt9Z0kuSj1cImludGVybmFsLnNldENvbnRhaW5lckNvbnNlbnREZWZhdWx0c1wiO2Z1bmN0aW9uIGhJKGEsYixjLGQpe3ZhciBlPXRoaXM7ZD1kPT09dm9pZCAwPyEwOmQ7dmFyIGY9ITE7cmV0dXJuIGZ9aEkuVD1cInNldENvb2tpZVwiO2Z1bmN0aW9uIGlJKGEpe31pSS5KPVwiaW50ZXJuYWwuc2V0Q29yZVBsYXRmb3JtU2VydmljZXNcIjtmdW5jdGlvbiBqSShhLGIpe31qSS5KPVwiaW50ZXJuYWwuc2V0RGF0YUxheWVyVmFsdWVcIjtmdW5jdGlvbiBrSShhKXt9a0kuVD1cInNldERlZmF1bHRDb25zZW50U3RhdGVcIjtmdW5jdGlvbiBsSShhLGIpe31sSS5KPVwiaW50ZXJuYWwuc2V0RGVsZWdhdGVkQ29uc2VudFR5cGVcIjtmdW5jdGlvbiBtSShhLGIpe31tSS5KPVwiaW50ZXJuYWwuc2V0Rm9ybUFjdGlvblwiO2Z1bmN0aW9uIG5JKGEsYixjKXt9bkkuSj1cImludGVybmFsLnNldEluQ3Jvc3NDb250YWluZXJEYXRhXCI7ZnVuY3Rpb24gb0koYSxiLGMpe3JldHVybiExfW9JLlQ9XCJzZXRJbldpbmRvd1wiO2Z1bmN0aW9uIHBJKGEsYixjKXtLKHRoaXMuZ2V0TmFtZSgpLFtcInRhcmdldElkOiFzdHJpbmdcIixcIm5hbWU6IXN0cmluZ1wiLFwidmFsdWU6ISpcIl0sYXJndW1lbnRzKTt2YXIgZD1YcihhKXx8e307ZFtiXT1KKGMsdGhpcy5GKTt2YXIgZT1hO1ZyfHxXcigpO1VyW2VdPWQ7fXBJLko9XCJpbnRlcm5hbC5zZXRQcm9kdWN0U2V0dGluZ3NQYXJhbWV0ZXJcIjtmdW5jdGlvbiBxSShhLGIsYyl7Syh0aGlzLmdldE5hbWUoKSxbXCJ0YXJnZXRJZDohc3RyaW5nXCIsXCJuYW1lOiFzdHJpbmdcIixcInZhbHVlOiEqXCJdLGFyZ3VtZW50cyk7Zm9yKHZhciBkPWIuc3BsaXQoXCIuXCIpLGU9b20oYSksZj0wO2Y8ZC5sZW5ndGgtMTtmKyspe2lmKGVbZFtmXV09PT12b2lkIDApZVtkW2ZdXT17fTtlbHNlIGlmKCFTYShlW2RbZl1dKSl0aHJvdyBFcnJvcihcInNldFJlbW90ZUNvbmZpZ1BhcmFtZXRlciBmYWlsZWQsIHBhdGggY29udGFpbnMgYSBub24tb2JqZWN0IHR5cGU6IFwiK2RbZl0pO2U9ZVtkW2ZdXX1lW2RbZl1dPUooYyx0aGlzLkYsMSk7fXFJLko9XCJpbnRlcm5hbC5zZXRSZW1vdGVDb25maWdQYXJhbWV0ZXJcIjtmdW5jdGlvbiBySShhLGIsYyxkKXt2YXIgZT10aGlzO31ySS5UPVwic2hhMjU2XCI7ZnVuY3Rpb24gc0koYSxiLGMpe31cbnNJLko9XCJpbnRlcm5hbC5zb3J0UmVtb3RlQ29uZmlnUGFyYW1ldGVyc1wiO2Z1bmN0aW9uIHRJKGEsYil7dmFyIGM9dm9pZCAwO3JldHVybiBjfXRJLko9XCJpbnRlcm5hbC5zdWJzY3JpYmVUb0Nyb3NzQ29udGFpbmVyRGF0YVwiO3ZhciB1ST17fSx2ST17fTt1SS5nZXRJdGVtPWZ1bmN0aW9uKGEpe3ZhciBiPW51bGw7cmV0dXJuIGJ9O3VJLnNldEl0ZW09ZnVuY3Rpb24oYSxiKXt9O1xudUkucmVtb3ZlSXRlbT1mdW5jdGlvbihhKXt9O3VJLmNsZWFyPWZ1bmN0aW9uKCl7fTt1SS5UPVwidGVtcGxhdGVTdG9yYWdlXCI7ZnVuY3Rpb24gd0koYSxiKXt2YXIgYz0hMTtyZXR1cm4gY313SS5KPVwiaW50ZXJuYWwudGVzdFJlZ2V4XCI7ZnVuY3Rpb24geEkoYSl7dmFyIGI7cmV0dXJuIGJ9O2Z1bmN0aW9uIHlJKGEpe3ZhciBiO3JldHVybiBifXlJLko9XCJpbnRlcm5hbC51bnNpbG9JZFwiO2Z1bmN0aW9uIHpJKGEsYil7dmFyIGM7cmV0dXJuIGN9ekkuSj1cImludGVybmFsLnVuc3Vic2NyaWJlRnJvbUNyb3NzQ29udGFpbmVyRGF0YVwiO2Z1bmN0aW9uIEFJKGEpe31BSS5UPVwidXBkYXRlQ29uc2VudFN0YXRlXCI7dmFyIEJJO2Z1bmN0aW9uIENJKGEsYixjKXtCST1CSXx8bmV3IGhoO0JJLmFkZChhLGIsYyl9ZnVuY3Rpb24gREkoYSxiKXt2YXIgYz1CST1CSXx8bmV3IGhoO2lmKGMuai5oYXNPd25Qcm9wZXJ0eShhKSl0aHJvdyBFcnJvcihcIkF0dGVtcHRpbmcgdG8gYWRkIGEgcHJpdmF0ZSBmdW5jdGlvbiB3aGljaCBhbHJlYWR5IGV4aXN0czogXCIrYStcIi5cIik7aWYoYy5jb250YWlucyhhKSl0aHJvdyBFcnJvcihcIkF0dGVtcHRpbmcgdG8gYWRkIGEgcHJpdmF0ZSBmdW5jdGlvbiB3aXRoIGFuIGV4aXN0aW5nIEFQSSBuYW1lOiBcIithK1wiLlwiKTtjLmpbYV09b2IoYik/RWcoYSxiKTpGZyhhLGIpfVxuZnVuY3Rpb24gRUkoKXtyZXR1cm4gZnVuY3Rpb24oYSl7dmFyIGI7dmFyIGM9Qkk7aWYoYy5jb250YWlucyhhKSliPWMuZ2V0KGEsdGhpcyk7ZWxzZXt2YXIgZDtpZihkPWMuai5oYXNPd25Qcm9wZXJ0eShhKSl7dmFyIGU9ITEsZj10aGlzLkYuajtpZihmKXt2YXIgZz1mLmNiKCk7aWYoZyl7Zy5pbmRleE9mKFwiX19jdnRfXCIpIT09MCYmKGU9ITApO319ZWxzZSBlPSEwO2Q9ZX1pZihkKXt2YXIgaz1jLmouaGFzT3duUHJvcGVydHkoYSk/Yy5qW2FdOnZvaWQgMDtcbmI9a31lbHNlIHRocm93IEVycm9yKGErXCIgaXMgbm90IGEgdmFsaWQgQVBJIG5hbWUuXCIpO31yZXR1cm4gYn19O3ZhciBGST1mdW5jdGlvbigpe3ZhciBhPWZ1bmN0aW9uKGMpe3JldHVybiBESShjLkosYyl9LGI9ZnVuY3Rpb24oYyl7cmV0dXJuIENJKGMuVCxjKX07Yih0eik7YihBeik7YihPQSk7YihRQSk7YihSQSk7YihXQSk7YihZQSk7YihiQik7YihkQik7YihyRSk7YihzRSk7YihIRSk7YihJRSk7YihKRSk7YihNRSk7Yih0SCk7Yih1SCk7YihDSCk7YihHSCk7YihOSCk7YihRSCk7YihUSCk7YihVSCk7YihXSCk7YihlSSk7YihoSSk7YihrSSk7YihvSSk7YihySSk7Yih1SSk7YihBSSk7YihKSCgpKTtDSShcIk1hdGhcIixKZygpKTtDSShcIk9iamVjdFwiLGZoKTtDSShcIlRlc3RIZWxwZXJcIixqaCgpKTtDSShcImFzc2VydEFwaVwiLEdnKTtDSShcImFzc2VydFRoYXRcIixIZyk7Q0koXCJkZWNvZGVVcmlcIixMZyk7Q0koXCJkZWNvZGVVcmlDb21wb25lbnRcIixNZyk7Q0koXCJlbmNvZGVVcmlcIixOZyk7Q0koXCJlbmNvZGVVcmlDb21wb25lbnRcIixPZyk7Q0koXCJmYWlsXCIsVGcpO0NJKFwiZ2VuZXJhdGVSYW5kb21cIixcblVnKTtDSShcImdldFRpbWVzdGFtcFwiLFZnKTtDSShcImdldFRpbWVzdGFtcE1pbGxpc1wiLFZnKTtDSShcImdldFR5cGVcIixXZyk7Q0koXCJtYWtlSW50ZWdlclwiLFlnKTtDSShcIm1ha2VOdW1iZXJcIixaZyk7Q0koXCJtYWtlU3RyaW5nXCIsJGcpO0NJKFwibWFrZVRhYmxlTWFwXCIsYWgpO0NJKFwibW9ja1wiLGRoKTtDSShcImZyb21CYXNlNjRcIixwRSwhKFwiYXRvYlwiaW4gRCkpO0NJKFwibG9jYWxTdG9yYWdlXCIsTUgsIUxIKCkpO0NJKFwidG9CYXNlNjRcIix4SSwhKFwiYnRvYVwiaW4gRCkpO2Eod3opO2EoUnopO2EoY0EpO2EoakEpO2Eob0EpO2EoREEpO2EoTUEpO2EoUEEpO2EoU0EpO2EoVEEpO2EoVUEpO2EoVkEpO2EoWEEpO2EoWkEpO2EoYUIpO2EoY0IpO2EoZUIpO2EoZ0IpO2EoaEIpO2EoaUIpO2EoakIpO2Eoa0IpO2Eob0IpO2Eod0IpO2EoeEIpO2EoSUIpO2EoTkIpO2EoU0IpO2EoYUMpO2EoZkMpO2Eoc0MpO2EodUMpO2EoSUMpO2EoSkMpO2EoTEMpO2EobkUpO2Eob0UpO2EodEUpO2EodUUpO2EodkUpO1xuYSh3RSk7YSh4RSk7YSh5RSk7YSh6RSk7YShBRSk7YShCRSk7YShDRSk7YShFRSk7YShGRSk7YShHRSk7YShLRSk7YShMRSk7YShxSCk7YSh3SCk7YShGSCk7YShISCk7YShJSCk7YShLSCk7YShCQSk7YShPSCk7YShQSCk7YShSSCk7YShTSCk7YShWSCk7YShYSCk7YShZSCk7YSgkSCk7YShhSSk7YShiSSk7YShkSSk7YShmSSk7YShnSSk7YShpSSk7YShqSSk7YShsSSk7YShtSSk7YShuSSk7YShwSSk7YShxSSk7YShzSSk7YSh0SSk7YSh3SSk7YSh5SSk7YSh6SSk7REkoXCJpbnRlcm5hbC5Dcm9zc0NvbnRhaW5lclNjaGVtYVwiLGZCKCkpO0RJKFwiaW50ZXJuYWwuR3RhZ1NjaGVtYVwiLHJIKCkpO0NJKFwibW9ja09iamVjdFwiLGVoKTtyZXR1cm4gRUkoKX07dmFyIHJ6O2Z1bmN0aW9uIEdJKCl7cnouai5qLkg9ZnVuY3Rpb24oYSxiLGMpe2lpLlNBTkRCT1hFRF9KU19TRU1BUEhPUkU9aWkuU0FOREJPWEVEX0pTX1NFTUFQSE9SRXx8MDtpaS5TQU5EQk9YRURfSlNfU0VNQVBIT1JFKys7dHJ5e3JldHVybiBhLmFwcGx5KGIsYyl9ZmluYWxseXtpaS5TQU5EQk9YRURfSlNfU0VNQVBIT1JFLS19fX1mdW5jdGlvbiBISShhKXthJiZ6KGEsZnVuY3Rpb24oYixjKXtmb3IodmFyIGQ9MDtkPGMubGVuZ3RoO2QrKyl7dmFyIGU9Y1tkXS5yZXBsYWNlKC9eXyovLFwiXCIpO3lpW2VdPXlpW2VdfHxbXTt5aVtlXS5wdXNoKGIpfX0pfTt2YXIgSUk9ZW5jb2RlVVJJLFk9ZW5jb2RlVVJJQ29tcG9uZW50LEpJPUFycmF5LmlzQXJyYXksS0k9ZnVuY3Rpb24oYSxiLGMpe0FjKGEsYixjKX0sTEk9ZnVuY3Rpb24oYSxiKXtpZighYSlyZXR1cm4hMTt2YXIgYz1WaShhaihhKSxcImhvc3RcIik7aWYoIWMpcmV0dXJuITE7Zm9yKHZhciBkPTA7YiYmZDxiLmxlbmd0aDtkKyspe3ZhciBlPWJbZF0mJmJbZF0udG9Mb3dlckNhc2UoKTtpZihlKXt2YXIgZj1jLmxlbmd0aC1lLmxlbmd0aDtmPjAmJmUuY2hhckF0KDApIT1cIi5cIiYmKGYtLSxlPVwiLlwiK2UpO2lmKGY+PTAmJmMuaW5kZXhPZihlLGYpPT1mKXJldHVybiEwfX1yZXR1cm4hMX0sTUk9ZnVuY3Rpb24oYSxiLGMpe2Zvcih2YXIgZD17fSxlPSExLGY9MDthJiZmPGEubGVuZ3RoO2YrKylhW2ZdJiZcbmFbZl0uaGFzT3duUHJvcGVydHkoYikmJmFbZl0uaGFzT3duUHJvcGVydHkoYykmJihkW2FbZl1bYl1dPWFbZl1bY10sZT0hMCk7cmV0dXJuIGU/ZDpudWxsfTt2YXIgVkk9RC5jbGVhclRpbWVvdXQsV0k9RC5zZXRUaW1lb3V0O2Z1bmN0aW9uIFhJKGEsYixjKXtpZihXbigpKXtiJiZHKGIpfWVsc2UgcmV0dXJuIHhjKGEsYixjKX1mdW5jdGlvbiBZSSgpe3JldHVybiBELmxvY2F0aW9uLmhyZWZ9ZnVuY3Rpb24gWkkoYSxiKXtyZXR1cm4gSmkoYSxifHwyKX1mdW5jdGlvbiAkSShhLGIpe0RbYV09Yn1mdW5jdGlvbiBhSihhLGIsYyl7YiYmKERbYV09PT12b2lkIDB8fGMmJiFEW2FdKSYmKERbYV09Yik7cmV0dXJuIERbYV19ZnVuY3Rpb24gYkooYSxiKXtpZihXbigpKXtiJiZHKGIpfWVsc2UgemMoYSxiKX1cbnZhciBjSj17fTt2YXIgWj17c2VjdXJpdHlHcm91cHM6e319O1xuXG5cblouc2VjdXJpdHlHcm91cHMuYWNjZXNzX2dsb2JhbHM9W1wiZ29vZ2xlXCJdLGZ1bmN0aW9uKCl7ZnVuY3Rpb24gYShiLGMsZCl7dmFyIGU9e2tleTpkLHJlYWQ6ITEsd3JpdGU6ITEsZXhlY3V0ZTohMX07c3dpdGNoKGMpe2Nhc2UgXCJyZWFkXCI6ZS5yZWFkPSEwO2JyZWFrO2Nhc2UgXCJ3cml0ZVwiOmUud3JpdGU9ITA7YnJlYWs7Y2FzZSBcInJlYWR3cml0ZVwiOmUucmVhZD1lLndyaXRlPSEwO2JyZWFrO2Nhc2UgXCJleGVjdXRlXCI6ZS5leGVjdXRlPSEwO2JyZWFrO2RlZmF1bHQ6dGhyb3cgRXJyb3IoXCJJbnZhbGlkIFwiK2IrXCIgcmVxdWVzdCBcIitjKTt9cmV0dXJuIGV9KGZ1bmN0aW9uKGIpe1ouX19hY2Nlc3NfZ2xvYmFscz1iO1ouX19hY2Nlc3NfZ2xvYmFscy5DPVwiYWNjZXNzX2dsb2JhbHNcIjtaLl9fYWNjZXNzX2dsb2JhbHMuaXNWZW5kb3JUZW1wbGF0ZT0hMDtaLl9fYWNjZXNzX2dsb2JhbHMucHJpb3JpdHlPdmVycmlkZT0wO1ouX19hY2Nlc3NfZ2xvYmFscy5pc0luZnJhc3RydWN0dXJlPSExO1xuWi5fX2FjY2Vzc19nbG9iYWxzLnJ1bkluU2lsb2VkTW9kZT0hMX0pKGZ1bmN0aW9uKGIpe2Zvcih2YXIgYz1iLnZ0cF9rZXlzfHxbXSxkPWIudnRwX2NyZWF0ZVBlcm1pc3Npb25FcnJvcixlPVtdLGY9W10sZz1bXSxrPTA7azxjLmxlbmd0aDtrKyspe3ZhciBtPWNba10sbj1tLmtleTttLnJlYWQmJmUucHVzaChuKTttLndyaXRlJiZmLnB1c2gobik7bS5leGVjdXRlJiZnLnB1c2gobil9cmV0dXJue2Fzc2VydDpmdW5jdGlvbihwLHEscil7aWYoIWwocikpdGhyb3cgZChwLHt9LFwiS2V5IG11c3QgYmUgYSBzdHJpbmcuXCIpO2lmKHE9PT1cInJlYWRcIil7aWYoZS5pbmRleE9mKHIpPi0xKXJldHVybn1lbHNlIGlmKHE9PT1cIndyaXRlXCIpe2lmKGYuaW5kZXhPZihyKT4tMSlyZXR1cm59ZWxzZSBpZihxPT09XCJyZWFkd3JpdGVcIil7aWYoZi5pbmRleE9mKHIpPi0xJiZlLmluZGV4T2Yocik+LTEpcmV0dXJufWVsc2UgaWYocT09PVwiZXhlY3V0ZVwiKXtpZihnLmluZGV4T2Yocik+LTEpcmV0dXJufWVsc2UgdGhyb3cgZChwLFxue30sXCJPcGVyYXRpb24gbXVzdCBiZSBlaXRoZXIgJ3JlYWQnLCAnd3JpdGUnLCBvciAnZXhlY3V0ZScsIHdhcyBcIitxKTt0aHJvdyBkKHAse30sXCJQcm9oaWJpdGVkIFwiK3ErXCIgb24gZ2xvYmFsIHZhcmlhYmxlOiBcIityK1wiLlwiKTt9LE46YX19KX0oKTtaLnNlY3VyaXR5R3JvdXBzLnY9W1wiZ29vZ2xlXCJdLFouX192PWZ1bmN0aW9uKGEpe3ZhciBiPWEudnRwX25hbWU7aWYoIWJ8fCFiLnJlcGxhY2UpcmV0dXJuITE7dmFyIGM9WkkoYi5yZXBsYWNlKC9cXFxcXFwuL2csXCIuXCIpLGEudnRwX2RhdGFMYXllclZlcnNpb258fDEpO3JldHVybiBjIT09dm9pZCAwP2M6YS52dHBfZGVmYXVsdFZhbHVlfSxaLl9fdi5DPVwidlwiLFouX192LmlzVmVuZG9yVGVtcGxhdGU9ITAsWi5fX3YucHJpb3JpdHlPdmVycmlkZT0wLFouX192LmlzSW5mcmFzdHJ1Y3R1cmU9ITAsWi5fX3YucnVuSW5TaWxvZWRNb2RlPSExO1xuXG5aLnNlY3VyaXR5R3JvdXBzLnJlYWRfZXZlbnRfZGF0YT1bXCJnb29nbGVcIl0sZnVuY3Rpb24oKXtmdW5jdGlvbiBhKGIsYyl7cmV0dXJue2tleTpjfX0oZnVuY3Rpb24oYil7Wi5fX3JlYWRfZXZlbnRfZGF0YT1iO1ouX19yZWFkX2V2ZW50X2RhdGEuQz1cInJlYWRfZXZlbnRfZGF0YVwiO1ouX19yZWFkX2V2ZW50X2RhdGEuaXNWZW5kb3JUZW1wbGF0ZT0hMDtaLl9fcmVhZF9ldmVudF9kYXRhLnByaW9yaXR5T3ZlcnJpZGU9MDtaLl9fcmVhZF9ldmVudF9kYXRhLmlzSW5mcmFzdHJ1Y3R1cmU9ITE7Wi5fX3JlYWRfZXZlbnRfZGF0YS5ydW5JblNpbG9lZE1vZGU9ITF9KShmdW5jdGlvbihiKXt2YXIgYz1iLnZ0cF9ldmVudERhdGFBY2Nlc3MsZD1iLnZ0cF9rZXlQYXR0ZXJuc3x8W10sZT1iLnZ0cF9jcmVhdGVQZXJtaXNzaW9uRXJyb3I7cmV0dXJue2Fzc2VydDpmdW5jdGlvbihmLGcpe2lmKGchPW51bGwmJiFsKGcpKXRocm93IGUoZix7a2V5Omd9LFwiS2V5IG11c3QgYmUgYSBzdHJpbmcuXCIpO1xuaWYoYyE9PVwiYW55XCIpe3RyeXtpZihjPT09XCJzcGVjaWZpY1wiJiZnIT1udWxsJiZpZyhnLGQpKXJldHVybn1jYXRjaChrKXt0aHJvdyBlKGYse2tleTpnfSxcIkludmFsaWQga2V5IGZpbHRlci5cIik7fXRocm93IGUoZix7a2V5Omd9LFwiUHJvaGliaXRlZCByZWFkIGZyb20gZXZlbnQgZGF0YS5cIik7fX0sTjphfX0pfSgpO1xuXG5cblxuXG5aLnNlY3VyaXR5R3JvdXBzLnJlYWRfY29udGFpbmVyX2RhdGE9W1wiZ29vZ2xlXCJdLFouX19yZWFkX2NvbnRhaW5lcl9kYXRhPWZ1bmN0aW9uKCl7cmV0dXJue2Fzc2VydDpmdW5jdGlvbigpe30sTjpmdW5jdGlvbigpe3JldHVybnt9fX19LFouX19yZWFkX2NvbnRhaW5lcl9kYXRhLkM9XCJyZWFkX2NvbnRhaW5lcl9kYXRhXCIsWi5fX3JlYWRfY29udGFpbmVyX2RhdGEuaXNWZW5kb3JUZW1wbGF0ZT0hMCxaLl9fcmVhZF9jb250YWluZXJfZGF0YS5wcmlvcml0eU92ZXJyaWRlPTAsWi5fX3JlYWRfY29udGFpbmVyX2RhdGEuaXNJbmZyYXN0cnVjdHVyZT0hMSxaLl9fcmVhZF9jb250YWluZXJfZGF0YS5ydW5JblNpbG9lZE1vZGU9ITE7XG5cblouc2VjdXJpdHlHcm91cHMuZGV0ZWN0X3VzZXJfcHJvdmlkZWRfZGF0YT1bXCJnb29nbGVcIl0sZnVuY3Rpb24oKXtmdW5jdGlvbiBhKGIsYyl7cmV0dXJue2RhdGFTb3VyY2U6Y319KGZ1bmN0aW9uKGIpe1ouX19kZXRlY3RfdXNlcl9wcm92aWRlZF9kYXRhPWI7Wi5fX2RldGVjdF91c2VyX3Byb3ZpZGVkX2RhdGEuQz1cImRldGVjdF91c2VyX3Byb3ZpZGVkX2RhdGFcIjtaLl9fZGV0ZWN0X3VzZXJfcHJvdmlkZWRfZGF0YS5pc1ZlbmRvclRlbXBsYXRlPSEwO1ouX19kZXRlY3RfdXNlcl9wcm92aWRlZF9kYXRhLnByaW9yaXR5T3ZlcnJpZGU9MDtaLl9fZGV0ZWN0X3VzZXJfcHJvdmlkZWRfZGF0YS5pc0luZnJhc3RydWN0dXJlPSExO1ouX19kZXRlY3RfdXNlcl9wcm92aWRlZF9kYXRhLnJ1bkluU2lsb2VkTW9kZT0hMX0pKGZ1bmN0aW9uKGIpe3ZhciBjPWIudnRwX2NyZWF0ZVBlcm1pc3Npb25FcnJvcjtyZXR1cm57YXNzZXJ0OmZ1bmN0aW9uKGQsZSl7aWYoZSE9PVwiYXV0b1wiJiZlIT09XCJtYW51YWxcIiYmXG5lIT09XCJjb2RlXCIpdGhyb3cgYyhkLHt9LFwiVW5rbm93biB1c2VyIHByb3ZpZGVkIGRhdGEgc291cmNlLlwiKTtpZihiLnZ0cF9saW1pdERhdGFTb3VyY2VzKWlmKGUhPT1cImF1dG9cInx8Yi52dHBfYWxsb3dBdXRvRGF0YVNvdXJjZXMpe2lmKGU9PT1cIm1hbnVhbFwiJiYhYi52dHBfYWxsb3dNYW51YWxEYXRhU291cmNlcyl0aHJvdyBjKGQse30sXCJEZXRlY3Rpb24gb2YgdXNlciBwcm92aWRlZCBkYXRhIHZpYSBtYW51YWxseSBzcGVjaWZpZWQgQ1NTIHNlbGVjdG9ycyBpcyBub3QgYWxsb3dlZC5cIik7aWYoZT09PVwiY29kZVwiJiYhYi52dHBfYWxsb3dDb2RlRGF0YVNvdXJjZXMpdGhyb3cgYyhkLHt9LFwiRGV0ZWN0aW9uIG9mIHVzZXIgcHJvdmlkZWQgZGF0YSBmcm9tIGFuIGluLXBhZ2UgdmFyaWFibGUgaXMgbm90IGFsbG93ZWQuXCIpO31lbHNlIHRocm93IGMoZCx7fSxcIkF1dG9tYXRpYyBkZXRlY3Rpb24gb2YgdXNlciBwcm92aWRlZCBkYXRhIGlzIG5vdCBhbGxvd2VkLlwiKTt9LE46YX19KX0oKTtcblxuXG5cblxuXG5cblouc2VjdXJpdHlHcm91cHMuZ2N0PVtcImdvb2dsZVwiXSxmdW5jdGlvbigpe2Z1bmN0aW9uIGEoYil7Zm9yKHZhciBjPVtdLGQ9MDtkPGIubGVuZ3RoO2QrKyl0cnl7Yy5wdXNoKG5ldyBSZWdFeHAoYltkXSkpfWNhdGNoKGUpe31yZXR1cm4gY30oZnVuY3Rpb24oYil7Wi5fX2djdD1iO1ouX19nY3QuQz1cImdjdFwiO1ouX19nY3QuaXNWZW5kb3JUZW1wbGF0ZT0hMDtaLl9fZ2N0LnByaW9yaXR5T3ZlcnJpZGU9MDtaLl9fZ2N0LmlzSW5mcmFzdHJ1Y3R1cmU9ITE7Wi5fX2djdC5ydW5JblNpbG9lZE1vZGU9ITB9KShmdW5jdGlvbihiKXt2YXIgYz17fSxkPWIudnRwX3Nlc3Npb25EdXJhdGlvbjtkPjAmJihjW1QuZy5qZF09ZCk7Y1tULmcuU2RdPWIudnRwX2V2ZW50U2V0dGluZ3M7Y1tULmcuaWddPWIudnRwX2R5bmFtaWNFdmVudFNldHRpbmdzO2NbVC5nLnljXT1iLnZ0cF9nb29nbGVTaWduYWxzPT09MTtjW1QuZy53Z109Yi52dHBfZm9yZWlnblRsZDtjW1QuZy5zZ109Yi52dHBfcmVzdHJpY3REb21haW49PT1cbjE7Y1tULmcubmZdPWIudnRwX2ludGVybmFsVHJhZmZpY1Jlc3VsdHM7dmFyIGU9VC5nLnFhLGY9Yi52dHBfbGlua2VyO2YmJmZbVC5nLlddJiYoZltULmcuV109YShmW1QuZy5XXSkpO2NbZV09Zjt2YXIgZz1ULmcucGYsaz1iLnZ0cF9yZWZlcnJhbEV4Y2x1c2lvbkRlZmluaXRpb247ayYmay5pbmNsdWRlX2NvbmRpdGlvbnMmJihrLmluY2x1ZGVfY29uZGl0aW9ucz1hKGsuaW5jbHVkZV9jb25kaXRpb25zKSk7Y1tnXT1rO3ZhciBtPU1qKGIudnRwX3RyYWNraW5nSWQpO3FtKG0sYyk7bUgobSxiLnZ0cF9ndG1FdmVudElkKTtHKGIudnRwX2d0bU9uU3VjY2Vzcyl9KX0oKTtcblxuXG5cblouc2VjdXJpdHlHcm91cHMuZ2V0PVtcImdvb2dsZVwiXSxaLl9fZ2V0PWZ1bmN0aW9uKGEpe3ZhciBiPWEudnRwX3NldHRpbmdzLGM9Yi5ldmVudFBhcmFtZXRlcnN8fHt9LGQ9U3RyaW5nKGEudnRwX2V2ZW50TmFtZSksZT17fTtlLmV2ZW50SWQ9YS52dHBfZ3RtRXZlbnRJZDtlLnByaW9yaXR5SWQ9YS52dHBfZ3RtUHJpb3JpdHlJZDthLnZ0cF9kZWZlcnJhYmxlJiYoZS5kZWZlcnJhYmxlPSEwKTt2YXIgZj1BeChTdHJpbmcoYi5zdHJlYW1JZCksZCxjKTtIeChmLGUuZXZlbnRJZCxlKTthLnZ0cF9ndG1PblN1Y2Nlc3MoKX0sWi5fX2dldC5DPVwiZ2V0XCIsWi5fX2dldC5pc1ZlbmRvclRlbXBsYXRlPSEwLFouX19nZXQucHJpb3JpdHlPdmVycmlkZT0wLFouX19nZXQuaXNJbmZyYXN0cnVjdHVyZT0hMSxaLl9fZ2V0LnJ1bkluU2lsb2VkTW9kZT0hMTtcblxuXG52YXIgZEo9e307ZEouZGF0YUxheWVyPUtpO2RKLmNhbGxiYWNrPWZ1bmN0aW9uKGEpe3hpLmhhc093blByb3BlcnR5KGEpJiZvYih4aVthXSkmJnhpW2FdKCk7ZGVsZXRlIHhpW2FdfTtkSi5ib290c3RyYXA9MDtkSi5fc3B4PSExO1xuZnVuY3Rpb24gZUooKXtpaVtHaigpXT1paVtHaigpXXx8ZEo7VGooKTtYaigpfHx6KFlqKCksZnVuY3Rpb24oZCxlKXtrdyhkLGUudHJhbnNwb3J0VXJsLGUuY29udGV4dCk7TSg5Mil9KTtFYih5aSxaLnNlY3VyaXR5R3JvdXBzKTt2YXIgYT1LaihMaigpKSxiLGM9YT09bnVsbD92b2lkIDA6KGI9YS5jb250ZXh0KT09bnVsbD92b2lkIDA6Yi5zb3VyY2U7YyE9PTImJmMhPT00JiZjIT09M3x8TSgxNDIpO3JmPUlmfXZhciBmSj0hMTtcbihmdW5jdGlvbihhKXtmdW5jdGlvbiBiKCl7bj1FLmRvY3VtZW50RWxlbWVudC5nZXRBdHRyaWJ1dGUoXCJkYXRhLXRhZy1hc3Npc3RhbnQtcHJlc2VudFwiKTtBeShuKSYmKG09ay5aaSl9ZnVuY3Rpb24gYygpe20mJnJjP2cobSk6YSgpfWlmKCFEW1wiX19UQUdHWV9JTlNUQUxMRURcIl0pe3ZhciBkPSExO2lmKEUucmVmZXJyZXIpe3ZhciBlPWFqKEUucmVmZXJyZXIpO2Q9WGkoZSxcImhvc3RcIik9PT1cImNjdC5nb29nbGVcIn1pZighZCl7dmFyIGY9am8oXCJnb29nVGFnZ3lSZWZlcnJlclwiKTtkPSEoIWYubGVuZ3RofHwhZlswXS5sZW5ndGgpfWQmJihEW1wiX19UQUdHWV9JTlNUQUxMRURcIl09ITAseGMoXCJodHRwczovL2NjdC5nb29nbGUvdGFnZ3kvYWdlbnQuanNcIikpfXZhciBnPWZ1bmN0aW9uKHUpe3ZhciB2PVwiR1RNXCIsdz1cIkdUTVwiO29pJiYodj1cIk9HVFwiLHc9XCJHVEFHXCIpO3ZhciB4PURbXCJnb29nbGUudGFnbWFuYWdlci5kZWJ1Z3VpMi5xdWV1ZVwiXTt4fHwoeD1cbltdLERbXCJnb29nbGUudGFnbWFuYWdlci5kZWJ1Z3VpMi5xdWV1ZVwiXT14LHhjKFwiaHR0cHM6Ly9cIitoaS5EZCtcIi9kZWJ1Zy9ib290c3RyYXA/aWQ9XCIrT2YuY3RpZCtcIiZzcmM9XCIrdytcIiZjb25kPVwiK3UrXCImZ3RtPVwiK1luKCkpKTt2YXIgeT17bWVzc2FnZVR5cGU6XCJDT05UQUlORVJfU1RBUlRJTkdcIixkYXRhOntzY3JpcHRTb3VyY2U6cmMsY29udGFpbmVyUHJvZHVjdDp2LGRlYnVnOiExLGlkOk9mLmN0aWQsdGFyZ2V0UmVmOntjdGlkOk9mLmN0aWQsaXNEZXN0aW5hdGlvbjp6ai5tZX0sYWxpYXNlczpDaigpLGRlc3RpbmF0aW9uczpGaigpfX07eS5kYXRhLnJlc3VtZT1mdW5jdGlvbigpe2EoKX07aGkucWsmJih5LmRhdGEuaW5pdGlhbFB1Ymxpc2g9ITApO3gucHVzaCh5KX0saz17S2s6MSxiajoyLHBqOjMsZGk6NCxaaTo1fTtrW2suS2tdPVwiR1RNX0RFQlVHX0xFR0FDWV9QQVJBTVwiO2tbay5ial09XCJHVE1fREVCVUdfUEFSQU1cIjtrW2sucGpdPVwiUkVGRVJSRVJcIjtrW2suZGldPVwiQ09PS0lFXCI7a1trLlppXT1cIkVYVEVOU0lPTl9QQVJBTVwiO1xudmFyIG09dm9pZCAwLG49dm9pZCAwLHA9VmkoRC5sb2NhdGlvbixcInF1ZXJ5XCIsITEsdm9pZCAwLFwiZ3RtX2RlYnVnXCIpO0F5KHApJiYobT1rLmJqKTtpZighbSYmRS5yZWZlcnJlcil7dmFyIHE9YWooRS5yZWZlcnJlcik7WGkocSxcImhvc3RcIik9PT1cInRhZ2Fzc2lzdGFudC5nb29nbGUuY29tXCImJihtPWsucGopfWlmKCFtKXt2YXIgcj1qbyhcIl9fVEFHX0FTU0lTVEFOVFwiKTtyLmxlbmd0aCYmclswXS5sZW5ndGgmJihtPWsuZGkpfW18fGIoKTtpZighbSYmQnkobikpe3ZhciB0PSExO0NjKEUsXCJUQURlYnVnU2lnbmFsXCIsZnVuY3Rpb24oKXt0fHwodD0hMCxiKCksYygpKX0sITEpO0Quc2V0VGltZW91dChmdW5jdGlvbigpe3R8fCh0PSEwLGIoKSxjKCkpfSwyMDApfWVsc2UgYygpfSkoZnVuY3Rpb24oKXt0cnl7dmFyIGE7aWYoIShhPSFRKDU4KSkpe3ZhciBiO2lmKCEoYj1mSikpe3ZhciBjO2E6e2Zvcih2YXIgZD14aigpLmluamVjdGVkRmlyc3RQYXJ0eUNvbnRhaW5lcnMsZT1uYShCaigpKSxcbmY9ZS5uZXh0KCk7IWYuZG9uZTtmPWUubmV4dCgpKWlmKGRbZi52YWx1ZV0pe2M9ITA7YnJlYWsgYX1jPSExfWI9IWN9YT1ifWlmKGEpe1JqKCk7aWYoUSg3NCkpe31rYlsxMl09ITA7c24oKTtmbCgpO3ZhciBnPUlqKCk7aWYoeGooKS5jYW5vbmljYWxbZ10pe3ZhciBrPWlpLnpvbmVzO2smJmsudW5yZWdpc3RlckNoaWxkKEJqKCkpO1d2KCkucmVtb3ZlRXh0ZXJuYWxSZXN0cmljdGlvbnMoSWooKSk7fWVsc2V7XG5IdCgpO2E6e31CaS5qPVwiMFwiO0JpLk09XCJcIjtCaS5QYT1cImFkX3N0b3JhZ2V8YW5hbHl0aWNzX3N0b3JhZ2V8YWRfdXNlcl9kYXRhfGFkX3BlcnNvbmFsaXphdGlvblwiO0JpLlo9XCJhZF9zdG9yYWdlfGFuYWx5dGljc19zdG9yYWdlfGFkX3VzZXJfZGF0YVwiO0JpLlI9XCI0OTMwXCI7XG5CaS5SPVwiNDkzMFwiO2d3KCk7Zm9yKHZhciBtPWRhdGEucmVzb3VyY2V8fHt9LG49bS5tYWNyb3N8fFtdLHA9MDtwPG4ubGVuZ3RoO3ArKylnZi5wdXNoKG5bcF0pO2Zvcih2YXIgcT1tLnRhZ3N8fFtdLHI9MDtyPHEubGVuZ3RoO3IrKylrZi5wdXNoKHFbcl0pO2Zvcih2YXIgdD1tLnByZWRpY2F0ZXN8fFtdLHU9MDt1PHQubGVuZ3RoO3UrKylqZi5wdXNoKHRbdV0pO2Zvcih2YXIgdj1tLnJ1bGVzfHxbXSx3PTA7dzx2Lmxlbmd0aDt3Kyspe2Zvcih2YXIgeD12W3ddLHk9e30sQT0wO0E8eC5sZW5ndGg7QSsrKXt2YXIgQj14W0FdWzBdO3lbQl09QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoeFtBXSwxKTtCIT09XCJpZlwiJiZCIT09XCJ1bmxlc3NcInx8cWYoeVtCXSl9aGYucHVzaCh5KX1tZj1aO25mPWZ6O0tmPW5ldyBSZjtcbnZhciBDPWRhdGEuc2FuZGJveGVkX3NjcmlwdHMsSD1kYXRhLnNlY3VyaXR5X2dyb3VwczthOnt2YXIgST1kYXRhLnJ1bnRpbWV8fFtdLEY9ZGF0YS5ydW50aW1lX2xpbmVzO3J6PW5ldyBBZTtHSSgpO2ZmPXF6KCk7dmFyIE89cnosTj1GSSgpLFM9bmV3IFdjKFwicmVxdWlyZVwiLE4pO1MuS2EoKTtPLmouai5zZXQoXCJyZXF1aXJlXCIsUyk7Zm9yKHZhciBWPVtdLGFhPTA7YWE8SS5sZW5ndGg7YWErKyl7dmFyIFg9SVthYV07aWYoIUFycmF5LmlzQXJyYXkoWCl8fFgubGVuZ3RoPDMpe2lmKFgubGVuZ3RoPT09MCljb250aW51ZTticmVhayBhfUYmJkZbYWFdJiZGW2FhXS5sZW5ndGgmJkJmKFgsRlthYV0pO3RyeXtyei5leGVjdXRlKFgpLFEoODMpJiZxaiYmWFswXT09PTUwJiZWLnB1c2goWFsxXSl9Y2F0Y2goT24pe319USg4MykmJihzZj1WKX1pZihDJiZDLmxlbmd0aClmb3IodmFyIFI9W1wic2FuZGJveGVkU2NyaXB0c1wiXSxtYT0wO21hPEMubGVuZ3RoO21hKyspe3ZhciBsYT1DW21hXS5yZXBsYWNlKC9eXyovLFxuXCJcIik7eWlbbGFdPVJ9SEkoSCk7ZUooKTtpZighc2kpZm9yKHZhciBlYT1QaygpP0VpKEJpLlopOkVpKEJpLlBhKSx3YT0wO3dhPFRrLmxlbmd0aDt3YSsrKXt2YXIgT2E9VGtbd2FdLEVhPU9hLFRhPWVhW09hXT9cImdyYW50ZWRcIjpcImRlbmllZFwiO29rKCkuaW1wbGljaXQoRWEsVGEpfXp5KCk7cHc9ITE7cXc9MDtpZihFLnJlYWR5U3RhdGU9PT1cImludGVyYWN0aXZlXCImJiFFLmNyZWF0ZUV2ZW50T2JqZWN0fHxFLnJlYWR5U3RhdGU9PT1cImNvbXBsZXRlXCIpc3coKTtlbHNle0NjKEUsXCJET01Db250ZW50TG9hZGVkXCIsc3cpO0NjKEUsXCJyZWFkeXN0YXRlY2hhbmdlXCIsc3cpO2lmKEUuY3JlYXRlRXZlbnRPYmplY3QmJkUuZG9jdW1lbnRFbGVtZW50LmRvU2Nyb2xsKXt2YXIgJGE9ITA7dHJ5eyRhPSFELmZyYW1lRWxlbWVudH1jYXRjaChPbil7fSRhJiZ0dygpfUNjKEQsXCJsb2FkXCIsc3cpfWV5PSExO0UucmVhZHlTdGF0ZT09PVwiY29tcGxldGVcIj9neSgpOkNjKEQsXCJsb2FkXCIsZ3kpO3FqJiYoVWwoZ20pLEQuc2V0SW50ZXJ2YWwoZm0sODY0RTUpLFVsKGl6KSxVbChUdyksVWwoSnUpLFVsKGptKSxVbChueiksVWwoZHgpLFVsKHV0KSxRKDgzKSYmKFVsKFl3KSxVbChadyksVWwoJHcpKSk7aWYocmope25rKCk7QWwoKTtvdygpO3ZhciB0ZDt2YXIgdWQ9S2ooTGooKSk7aWYodWQpe2Zvcig7dWQucGFyZW50Oyl7dmFyIEJ4PUtqKHVkLnBhcmVudCk7aWYoIUJ4KWJyZWFrO3VkPUJ4fXRkPXVkfWVsc2UgdGQ9dm9pZCAwO3ZhciBQZT10ZDtpZighUGUpTSgxNDQpO2Vsc2UgaWYoUGUuY2Fub25pY2FsQ29udGFpbmVySWQpe3ZhciBQbjthOntpZihQZS5zY3JpcHRTb3VyY2Upe3ZhciBOajt0cnl7dmFyIEN4O05qPShDeD1QYygpKT09bnVsbD92b2lkIDA6Q3guZ2V0RW50cmllc0J5VHlwZShcInJlc291cmNlXCIpfWNhdGNoKE9uKXt9aWYoTmope2Zvcih2YXIgUW49XG57fSxPaj0wO09qPE5qLmxlbmd0aDsrK09qKXt2YXIgRHg9TmpbT2pdLFJuPUR4LmluaXRpYXRvclR5cGU7aWYoUm49PT1cInNjcmlwdFwiJiZEeC5uYW1lPT09UGUuc2NyaXB0U291cmNlKXtQbj17S206T2osTG06UW59O2JyZWFrIGF9UW5bUm5dPTErKFFuW1JuXXx8MCl9TSgxNDYpfWVsc2UgTSgxNDUpfVBuPXZvaWQgMH12YXIgU249UG47U24mJihmayhcInJ0Z1wiLFN0cmluZyhQZS5jYW5vbmljYWxDb250YWluZXJJZCkpLGZrKFwicmxvXCIsU3RyaW5nKFNuLkttKSksZmsoXCJzbG9cIixTdHJpbmcoU24uTG0uc2NyaXB0fHxcIjBcIikpLGZrKFwiaGxvXCIsUGUuaHRtbExvYWRPcmRlcnx8XCItMVwiKSxmayhcImxzdFwiLFN0cmluZyhQZS5sb2FkU2NyaXB0VHlwZXx8XCIwXCIpKSl9dmFyIFRuO3ZhciBQaj1KaigpO2lmKFBqKXt2YXIgRXg7VG49UGouY2Fub25pY2FsQ29udGFpbmVySWR8fFwiX1wiKyhQai5zY3JpcHRDb250YWluZXJJZHx8KChFeD1Qai5kZXN0aW5hdGlvbnMpPT1udWxsP3ZvaWQgMDpFeFswXSkpfWVsc2UgVG49XG52b2lkIDA7dmFyIEZ4PVRuO0Z4JiZmayhcInBjaWRcIixGeCk7USgzMikmJihmayhcImJ0XCIsU3RyaW5nKEJpLkg/MjpxaT8xOjApKSxmayhcImN0XCIsU3RyaW5nKEJpLkg/MDpxaT8xOlduKCk/MjozKSkpfVd5KCk7S2soMSk7ekEoKTt3aT1CYigpO2RKLmJvb3RzdHJhcD13aTtkSi5fc3B4PSEwLHh5KCk7aWYoUSg3NCkpe319fX1jYXRjaChPbil7aWYoS2soNCksXG5xail7dmFyIGdKPWFtKCEwLCEwKTtBYyhnSil9fX0pO1xuXG59KSgpXG5cbiJ9LCAiaGVhZGVyc1NpemUiOiAwLCAiYm9keVNpemUiOiA5MzQwMSwgInJlZGlyZWN0VVJMIjogIiIsICJfdHJhbnNmZXJTaXplIjogOTM0MDF9LCAiY2FjaGUiOiB7fSwgInRpbWluZ3MiOiB7ImRucyI6IC0xLCAiY29ubmVjdCI6IC0xLCAic3NsIjogLTEsICJzZW5kIjogMCwgIndhaXQiOiAzNC40MTIsICJyZWNlaXZlIjogMjIuMjY2fSwgInBhZ2VyZWYiOiAicGFnZUA4YzkzMmY4MzM3ZDlhYmI0YjlhYjk4ODlkZWM1MWI5OSIsICJzZXJ2ZXJJUEFkZHJlc3MiOiAiWzJhMDA6MTQ1MDo0MDAxOjgxMzo6MjAwOF0iLCAiX3NlcnZlclBvcnQiOiA0NDMsICJfc2VjdXJpdHlEZXRhaWxzIjogeyJwcm90b2NvbCI6ICJUTFMgMS4zIiwgInN1YmplY3ROYW1lIjogIiouZ29vZ2xlLWFuYWx5dGljcy5jb20iLCAiaXNzdWVyIjogIldSMiIsICJ2YWxpZEZyb20iOiAxNzIzNDQ0NDI0LCAidmFsaWRUbyI6IDE3MzA3MDIwMjN9fSwgeyJzdGFydGVkRGF0ZVRpbWUiOiAiMjAyNC0wOS0wNVQxMTowNzoyMS4zMjJaIiwgInRpbWUiOiAxNy42NjEsICJyZXF1ZXN0IjogeyJtZXRob2QiOiAiUE9TVCIsICJ1cmwiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlLWFuYWx5dGljcy5jb20vai9jb2xsZWN0P3Y9MSZfdj1qMTAxJmE9MTUxNTQwMjc3OCZ0PXBhZ2V2aWV3Jl9zPTEmZGw9aHR0cHMlM0ElMkYlMkZwb3J0YWwuc3VwcGx5Y2hhaW5jYW5hZGEuY29tJTJGZW4lMkZwb3J0YWxsb2dpbiZ1bD1lbi11cyZkZT1VVEYtOCZkdD1TdXBwbHklMjBDaGFpbiUyMENhbmFkYSUyMFBvcnRhbCZzZD0yNC1iaXQmc3I9MTI4MHg3MjAmdnA9MTI4MHg3MjAmamU9MCZfdT1hR0RBZ0VBQkFBQUFBQ0FBSX4mamlkPTI3NDMzMzY0OSZnamlkPTEzOTY1MDQ3MjUmY2lkPTE3NDc1NzY0ODkuMTcyNTUzNDQ0MSZ0aWQ9VUEtNzI5Mjc5MDEtMSZfZ2lkPTEwNjE5Nzc5MzYuMTcyNTUzNDQ0MSZfc2xjPTEmZ3RtPTQ1SGU0OTMwbjgxTjZCVktQOXphMjAwJmdjZD0xM2wzbDNsMmwxbDEmZG1hX2Nwcz1zeXBoYW1vJmRtYT0xJnRhZ19leHA9MCZucGE9MSZ6PTExMjUzODkzMDYiLCAiaHR0cFZlcnNpb24iOiAiaDMiLCAiY29va2llcyI6IFtdLCAiaGVhZGVycyI6IFt7Im5hbWUiOiAiOmF1dGhvcml0eSIsICJ2YWx1ZSI6ICJ3d3cuZ29vZ2xlLWFuYWx5dGljcy5jb20ifSwgeyJuYW1lIjogIjptZXRob2QiLCAidmFsdWUiOiAiUE9TVCJ9LCB7Im5hbWUiOiAiOnBhdGgiLCAidmFsdWUiOiAiL2ovY29sbGVjdD92PTEmX3Y9ajEwMSZhPTE1MTU0MDI3NzgmdD1wYWdldmlldyZfcz0xJmRsPWh0dHBzJTNBJTJGJTJGcG9ydGFsLnN1cHBseWNoYWluY2FuYWRhLmNvbSUyRmVuJTJGcG9ydGFsbG9naW4mdWw9ZW4tdXMmZGU9VVRGLTgmZHQ9U3VwcGx5JTIwQ2hhaW4lMjBDYW5hZGElMjBQb3J0YWwmc2Q9MjQtYml0JnNyPTEyODB4NzIwJnZwPTEyODB4NzIwJmplPTAmX3U9YUdEQWdFQUJBQUFBQUNBQUl+JmppZD0yNzQzMzM2NDkmZ2ppZD0xMzk2NTA0NzI1JmNpZD0xNzQ3NTc2NDg5LjE3MjU1MzQ0NDEmdGlkPVVBLTcyOTI3OTAxLTEmX2dpZD0xMDYxOTc3OTM2LjE3MjU1MzQ0NDEmX3NsYz0xJmd0bT00NUhlNDkzMG44MU42QlZLUDl6YTIwMCZnY2Q9MTNsM2wzbDJsMWwxJmRtYV9jcHM9c3lwaGFtbyZkbWE9MSZ0YWdfZXhwPTAmbnBhPTEmej0xMTI1Mzg5MzA2In0sIHsibmFtZSI6ICI6c2NoZW1lIiwgInZhbHVlIjogImh0dHBzIn0sIHsibmFtZSI6ICJhY2NlcHQiLCAidmFsdWUiOiAiKi8qIn0sIHsibmFtZSI6ICJhY2NlcHQtZW5jb2RpbmciLCAidmFsdWUiOiAiZ3ppcCwgZGVmbGF0ZSwgYnIsIHpzdGQifSwgeyJuYW1lIjogImFjY2VwdC1sYW5ndWFnZSIsICJ2YWx1ZSI6ICJlbi1VUyJ9LCB7Im5hbWUiOiAiY29udGVudC1sZW5ndGgiLCAidmFsdWUiOiAiMCJ9LCB7Im5hbWUiOiAiY29udGVudC10eXBlIiwgInZhbHVlIjogInRleHQvcGxhaW4ifSwgeyJuYW1lIjogIm9yaWdpbiIsICJ2YWx1ZSI6ICJodHRwczovL3BvcnRhbC5zdXBwbHljaGFpbmNhbmFkYS5jb20ifSwgeyJuYW1lIjogInByaW9yaXR5IiwgInZhbHVlIjogInU9MSwgaSJ9LCB7Im5hbWUiOiAicmVmZXJlciIsICJ2YWx1ZSI6ICJodHRwczovL3BvcnRhbC5zdXBwbHljaGFpbmNhbmFkYS5jb20vIn0sIHsibmFtZSI6ICJzZWMtY2gtdWEiLCAidmFsdWUiOiAiXCJOb3Q7QT1CcmFuZFwiO3Y9XCIyNFwiLCBcIkNocm9taXVtXCI7dj1cIjEyOFwiIn0sIHsibmFtZSI6ICJzZWMtY2gtdWEtbW9iaWxlIiwgInZhbHVlIjogIj8wIn0sIHsibmFtZSI6ICJzZWMtY2gtdWEtcGxhdGZvcm0iLCAidmFsdWUiOiAiXCJXaW5kb3dzXCIifSwgeyJuYW1lIjogInNlYy1mZXRjaC1kZXN0IiwgInZhbHVlIjogImVtcHR5In0sIHsibmFtZSI6ICJzZWMtZmV0Y2gtbW9kZSIsICJ2YWx1ZSI6ICJjb3JzIn0sIHsibmFtZSI6ICJzZWMtZmV0Y2gtc2l0ZSIsICJ2YWx1ZSI6ICJjcm9zcy1zaXRlIn0sIHsibmFtZSI6ICJ1c2VyLWFnZW50IiwgInZhbHVlIjogIk1vemlsbGEvNS4wIChXaW5kb3dzIE5UIDEwLjA7IFdpbjY0OyB4NjQpIEFwcGxlV2ViS2l0LzUzNy4zNiAoS0hUTUwsIGxpa2UgR2Vja28pIENocm9tZS8xMjguMC42NjEzLjE4IFNhZmFyaS81MzcuMzYifV0sICJxdWVyeVN0cmluZyI6IFt7Im5hbWUiOiAidiIsICJ2YWx1ZSI6ICIxIn0sIHsibmFtZSI6ICJfdiIsICJ2YWx1ZSI6ICJqMTAxIn0sIHsibmFtZSI6ICJhIiwgInZhbHVlIjogIjE1MTU0MDI3NzgifSwgeyJuYW1lIjogInQiLCAidmFsdWUiOiAicGFnZXZpZXcifSwgeyJuYW1lIjogIl9zIiwgInZhbHVlIjogIjEifSwgeyJuYW1lIjogImRsIiwgInZhbHVlIjogImh0dHBzOi8vcG9ydGFsLnN1cHBseWNoYWluY2FuYWRhLmNvbS9lbi9wb3J0YWxsb2dpbiJ9LCB7Im5hbWUiOiAidWwiLCAidmFsdWUiOiAiZW4tdXMifSwgeyJuYW1lIjogImRlIiwgInZhbHVlIjogIlVURi04In0sIHsibmFtZSI6ICJkdCIsICJ2YWx1ZSI6ICJTdXBwbHkgQ2hhaW4gQ2FuYWRhIFBvcnRhbCJ9LCB7Im5hbWUiOiAic2QiLCAidmFsdWUiOiAiMjQtYml0In0sIHsibmFtZSI6ICJzciIsICJ2YWx1ZSI6ICIxMjgweDcyMCJ9LCB7Im5hbWUiOiAidnAiLCAidmFsdWUiOiAiMTI4MHg3MjAifSwgeyJuYW1lIjogImplIiwgInZhbHVlIjogIjAifSwgeyJuYW1lIjogIl91IiwgInZhbHVlIjogImFHREFnRUFCQUFBQUFDQUFJfiJ9LCB7Im5hbWUiOiAiamlkIiwgInZhbHVlIjogIjI3NDMzMzY0OSJ9LCB7Im5hbWUiOiAiZ2ppZCIsICJ2YWx1ZSI6ICIxMzk2NTA0NzI1In0sIHsibmFtZSI6ICJjaWQiLCAidmFsdWUiOiAiMTc0NzU3NjQ4OS4xNzI1NTM0NDQxIn0sIHsibmFtZSI6ICJ0aWQiLCAidmFsdWUiOiAiVUEtNzI5Mjc5MDEtMSJ9LCB7Im5hbWUiOiAiX2dpZCIsICJ2YWx1ZSI6ICIxMDYxOTc3OTM2LjE3MjU1MzQ0NDEifSwgeyJuYW1lIjogIl9zbGMiLCAidmFsdWUiOiAiMSJ9LCB7Im5hbWUiOiAiZ3RtIiwgInZhbHVlIjogIjQ1SGU0OTMwbjgxTjZCVktQOXphMjAwIn0sIHsibmFtZSI6ICJnY2QiLCAidmFsdWUiOiAiMTNsM2wzbDJsMWwxIn0sIHsibmFtZSI6ICJkbWFfY3BzIiwgInZhbHVlIjogInN5cGhhbW8ifSwgeyJuYW1lIjogImRtYSIsICJ2YWx1ZSI6ICIxIn0sIHsibmFtZSI6ICJ0YWdfZXhwIiwgInZhbHVlIjogIjAifSwgeyJuYW1lIjogIm5wYSIsICJ2YWx1ZSI6ICIxIn0sIHsibmFtZSI6ICJ6IiwgInZhbHVlIjogIjExMjUzODkzMDYifV0sICJoZWFkZXJzU2l6ZSI6IDEwODMsICJib2R5U2l6ZSI6IDB9LCAicmVzcG9uc2UiOiB7InN0YXR1cyI6IDIwMCwgInN0YXR1c1RleHQiOiAiIiwgImh0dHBWZXJzaW9uIjogImgzIiwgImNvb2tpZXMiOiBbXSwgImhlYWRlcnMiOiBbeyJuYW1lIjogImFjY2Vzcy1jb250cm9sLWFsbG93LWNyZWRlbnRpYWxzIiwgInZhbHVlIjogInRydWUifSwgeyJuYW1lIjogImFjY2Vzcy1jb250cm9sLWFsbG93LW9yaWdpbiIsICJ2YWx1ZSI6ICJodHRwczovL3BvcnRhbC5zdXBwbHljaGFpbmNhbmFkYS5jb20ifSwgeyJuYW1lIjogImFsdC1zdmMiLCAidmFsdWUiOiAiaDM9XCI6NDQzXCI7IG1hPTI1OTIwMDAsaDMtMjk9XCI6NDQzXCI7IG1hPTI1OTIwMDAifSwgeyJuYW1lIjogImNhY2hlLWNvbnRyb2wiLCAidmFsdWUiOiAibm8tY2FjaGUsIG5vLXN0b3JlLCBtdXN0LXJldmFsaWRhdGUifSwgeyJuYW1lIjogImNvbnRlbnQtbGVuZ3RoIiwgInZhbHVlIjogIjE1In0sIHsibmFtZSI6ICJjb250ZW50LXR5cGUiLCAidmFsdWUiOiAidGV4dC9wbGFpbiJ9LCB7Im5hbWUiOiAiY3Jvc3Mtb3JpZ2luLXJlc291cmNlLXBvbGljeSIsICJ2YWx1ZSI6ICJjcm9zcy1vcmlnaW4ifSwgeyJuYW1lIjogImRhdGUiLCAidmFsdWUiOiAiVGh1LCAwNSBTZXAgMjAyNCAxMTowNzoyMSBHTVQifSwgeyJuYW1lIjogImV4cGlyZXMiLCAidmFsdWUiOiAiRnJpLCAwMSBKYW4gMTk5MCAwMDowMDowMCBHTVQifSwgeyJuYW1lIjogImxhc3QtbW9kaWZpZWQiLCAidmFsdWUiOiAiU3VuLCAxNyBNYXkgMTk5OCAwMzowMDowMCBHTVQifSwgeyJuYW1lIjogInByYWdtYSIsICJ2YWx1ZSI6ICJuby1jYWNoZSJ9LCB7Im5hbWUiOiAic2VydmVyIiwgInZhbHVlIjogIkdvbGZlMiJ9LCB7Im5hbWUiOiAieC1jb250ZW50LXR5cGUtb3B0aW9ucyIsICJ2YWx1ZSI6ICJub3NuaWZmIn1dLCAiY29udGVudCI6IHsic2l6ZSI6IDE1LCAibWltZVR5cGUiOiAidGV4dC9wbGFpbiIsICJjb21wcmVzc2lvbiI6IDAsICJ0ZXh0IjogIjIsY0ctUEtNOEVGSk0zTiJ9LCAiaGVhZGVyc1NpemUiOiAwLCAiYm9keVNpemUiOiAzNSwgInJlZGlyZWN0VVJMIjogIiIsICJfdHJhbnNmZXJTaXplIjogMzV9LCAiY2FjaGUiOiB7fSwgInRpbWluZ3MiOiB7ImRucyI6IDAsICJjb25uZWN0IjogMCwgInNzbCI6IDAsICJzZW5kIjogMCwgIndhaXQiOiAxMy4zMTUsICJyZWNlaXZlIjogNC4zNDZ9LCAicGFnZXJlZiI6ICJwYWdlQDhjOTMyZjgzMzdkOWFiYjRiOWFiOTg4OWRlYzUxYjk5IiwgInNlcnZlcklQQWRkcmVzcyI6ICJbMmEwMDoxNDUwOjQwMDE6ODMxOjoyMDBlXSIsICJfc2VydmVyUG9ydCI6IDQ0MywgIl9zZWN1cml0eURldGFpbHMiOiB7InByb3RvY29sIjogIlFVSUMiLCAic3ViamVjdE5hbWUiOiAiKi5nb29nbGUtYW5hbHl0aWNzLmNvbSIsICJpc3N1ZXIiOiAiV1IyIiwgInZhbGlkRnJvbSI6IDE3MjM0NDQ0MjQsICJ2YWxpZFRvIjogMTczMDcwMjAyM319LCB7InN0YXJ0ZWREYXRlVGltZSI6ICIyMDI0LTA5LTA1VDExOjA3OjIxLjMyMloiLCAidGltZSI6IDEzNy4xOTksICJyZXF1ZXN0IjogeyJtZXRob2QiOiAiUE9TVCIsICJ1cmwiOiAiaHR0cHM6Ly9zdGF0cy5nLmRvdWJsZWNsaWNrLm5ldC9qL2NvbGxlY3Q/dD1kYyZhaXA9MSZfcj0zJnY9MSZfdj1qMTAxJnRpZD1VQS03MjkyNzkwMS0xJmNpZD0xNzQ3NTc2NDg5LjE3MjU1MzQ0NDEmamlkPTI3NDMzMzY0OSZnamlkPTEzOTY1MDQ3MjUmX2dpZD0xMDYxOTc3OTM2LjE3MjU1MzQ0NDEmbnBhPTEmX3U9YUdEQWdFQUJBQUFBQUdBQUl+Jno9MTU2NjA5NTQyMCIsICJodHRwVmVyc2lvbiI6ICJIVFRQLzIuMCIsICJjb29raWVzIjogW10sICJoZWFkZXJzIjogW3sibmFtZSI6ICI6YXV0aG9yaXR5IiwgInZhbHVlIjogInN0YXRzLmcuZG91YmxlY2xpY2submV0In0sIHsibmFtZSI6ICI6bWV0aG9kIiwgInZhbHVlIjogIlBPU1QifSwgeyJuYW1lIjogIjpwYXRoIiwgInZhbHVlIjogIi9qL2NvbGxlY3Q/dD1kYyZhaXA9MSZfcj0zJnY9MSZfdj1qMTAxJnRpZD1VQS03MjkyNzkwMS0xJmNpZD0xNzQ3NTc2NDg5LjE3MjU1MzQ0NDEmamlkPTI3NDMzMzY0OSZnamlkPTEzOTY1MDQ3MjUmX2dpZD0xMDYxOTc3OTM2LjE3MjU1MzQ0NDEmbnBhPTEmX3U9YUdEQWdFQUJBQUFBQUdBQUl+Jno9MTU2NjA5NTQyMCJ9LCB7Im5hbWUiOiAiOnNjaGVtZSIsICJ2YWx1ZSI6ICJodHRwcyJ9LCB7Im5hbWUiOiAiYWNjZXB0IiwgInZhbHVlIjogIiovKiJ9LCB7Im5hbWUiOiAiYWNjZXB0LWVuY29kaW5nIiwgInZhbHVlIjogImd6aXAsIGRlZmxhdGUsIGJyLCB6c3RkIn0sIHsibmFtZSI6ICJhY2NlcHQtbGFuZ3VhZ2UiLCAidmFsdWUiOiAiZW4tVVMifSwgeyJuYW1lIjogImNvbnRlbnQtbGVuZ3RoIiwgInZhbHVlIjogIjAifSwgeyJuYW1lIjogImNvbnRlbnQtdHlwZSIsICJ2YWx1ZSI6ICJ0ZXh0L3BsYWluIn0sIHsibmFtZSI6ICJvcmlnaW4iLCAidmFsdWUiOiAiaHR0cHM6Ly9wb3J0YWwuc3VwcGx5Y2hhaW5jYW5hZGEuY29tIn0sIHsibmFtZSI6ICJwcmlvcml0eSIsICJ2YWx1ZSI6ICJ1PTEsIGkifSwgeyJuYW1lIjogInJlZmVyZXIiLCAidmFsdWUiOiAiaHR0cHM6Ly9wb3J0YWwuc3VwcGx5Y2hhaW5jYW5hZGEuY29tLyJ9LCB7Im5hbWUiOiAic2VjLWNoLXVhIiwgInZhbHVlIjogIlwiTm90O0E9QnJhbmRcIjt2PVwiMjRcIiwgXCJDaHJvbWl1bVwiO3Y9XCIxMjhcIiJ9LCB7Im5hbWUiOiAic2VjLWNoLXVhLW1vYmlsZSIsICJ2YWx1ZSI6ICI/MCJ9LCB7Im5hbWUiOiAic2VjLWNoLXVhLXBsYXRmb3JtIiwgInZhbHVlIjogIlwiV2luZG93c1wiIn0sIHsibmFtZSI6ICJzZWMtZmV0Y2gtZGVzdCIsICJ2YWx1ZSI6ICJlbXB0eSJ9LCB7Im5hbWUiOiAic2VjLWZldGNoLW1vZGUiLCAidmFsdWUiOiAiY29ycyJ9LCB7Im5hbWUiOiAic2VjLWZldGNoLXNpdGUiLCAidmFsdWUiOiAiY3Jvc3Mtc2l0ZSJ9LCB7Im5hbWUiOiAidXNlci1hZ2VudCIsICJ2YWx1ZSI6ICJNb3ppbGxhLzUuMCAoV2luZG93cyBOVCAxMC4wOyBXaW42NDsgeDY0KSBBcHBsZVdlYktpdC81MzcuMzYgKEtIVE1MLCBsaWtlIEdlY2tvKSBDaHJvbWUvMTI4LjAuNjYxMy4xOCBTYWZhcmkvNTM3LjM2In1dLCAicXVlcnlTdHJpbmciOiBbeyJuYW1lIjogInQiLCAidmFsdWUiOiAiZGMifSwgeyJuYW1lIjogImFpcCIsICJ2YWx1ZSI6ICIxIn0sIHsibmFtZSI6ICJfciIsICJ2YWx1ZSI6ICIzIn0sIHsibmFtZSI6ICJ2IiwgInZhbHVlIjogIjEifSwgeyJuYW1lIjogIl92IiwgInZhbHVlIjogImoxMDEifSwgeyJuYW1lIjogInRpZCIsICJ2YWx1ZSI6ICJVQS03MjkyNzkwMS0xIn0sIHsibmFtZSI6ICJjaWQiLCAidmFsdWUiOiAiMTc0NzU3NjQ4OS4xNzI1NTM0NDQxIn0sIHsibmFtZSI6ICJqaWQiLCAidmFsdWUiOiAiMjc0MzMzNjQ5In0sIHsibmFtZSI6ICJnamlkIiwgInZhbHVlIjogIjEzOTY1MDQ3MjUifSwgeyJuYW1lIjogIl9naWQiLCAidmFsdWUiOiAiMTA2MTk3NzkzNi4xNzI1NTM0NDQxIn0sIHsibmFtZSI6ICJucGEiLCAidmFsdWUiOiAiMSJ9LCB7Im5hbWUiOiAiX3UiLCAidmFsdWUiOiAiYUdEQWdFQUJBQUFBQUdBQUl+In0sIHsibmFtZSI6ICJ6IiwgInZhbHVlIjogIjE1NjYwOTU0MjAifV0sICJoZWFkZXJzU2l6ZSI6IDgyNywgImJvZHlTaXplIjogMH0sICJyZXNwb25zZSI6IHsic3RhdHVzIjogMjAwLCAic3RhdHVzVGV4dCI6ICIiLCAiaHR0cFZlcnNpb24iOiAiSFRUUC8yLjAiLCAiY29va2llcyI6IFtdLCAiaGVhZGVycyI6IFt7Im5hbWUiOiAiYWNjZXNzLWNvbnRyb2wtYWxsb3ctY3JlZGVudGlhbHMiLCAidmFsdWUiOiAidHJ1ZSJ9LCB7Im5hbWUiOiAiYWNjZXNzLWNvbnRyb2wtYWxsb3ctb3JpZ2luIiwgInZhbHVlIjogImh0dHBzOi8vcG9ydGFsLnN1cHBseWNoYWluY2FuYWRhLmNvbSJ9LCB7Im5hbWUiOiAiYWx0LXN2YyIsICJ2YWx1ZSI6ICJoMz1cIjo0NDNcIjsgbWE9MjU5MjAwMCxoMy0yOT1cIjo0NDNcIjsgbWE9MjU5MjAwMCJ9LCB7Im5hbWUiOiAiY2FjaGUtY29udHJvbCIsICJ2YWx1ZSI6ICJuby1jYWNoZSwgbm8tc3RvcmUsIG11c3QtcmV2YWxpZGF0ZSJ9LCB7Im5hbWUiOiAiY29udGVudC1sZW5ndGgiLCAidmFsdWUiOiAiMSJ9LCB7Im5hbWUiOiAiY29udGVudC10eXBlIiwgInZhbHVlIjogInRleHQvcGxhaW4ifSwgeyJuYW1lIjogImNyb3NzLW9yaWdpbi1yZXNvdXJjZS1wb2xpY3kiLCAidmFsdWUiOiAiY3Jvc3Mtb3JpZ2luIn0sIHsibmFtZSI6ICJkYXRlIiwgInZhbHVlIjogIlRodSwgMDUgU2VwIDIwMjQgMTE6MDc6MjEgR01UIn0sIHsibmFtZSI6ICJleHBpcmVzIiwgInZhbHVlIjogIkZyaSwgMDEgSmFuIDE5OTAgMDA6MDA6MDAgR01UIn0sIHsibmFtZSI6ICJsYXN0LW1vZGlmaWVkIiwgInZhbHVlIjogIlN1biwgMTcgTWF5IDE5OTggMDM6MDA6MDAgR01UIn0sIHsibmFtZSI6ICJwcmFnbWEiLCAidmFsdWUiOiAibm8tY2FjaGUifSwgeyJuYW1lIjogInNlcnZlciIsICJ2YWx1ZSI6ICJHb2xmZTIifSwgeyJuYW1lIjogInN0cmljdC10cmFuc3BvcnQtc2VjdXJpdHkiLCAidmFsdWUiOiAibWF4LWFnZT0zMTUzNjAwMDsgaW5jbHVkZVN1YkRvbWFpbnM7IHByZWxvYWQifSwgeyJuYW1lIjogIngtY29udGVudC10eXBlLW9wdGlvbnMiLCAidmFsdWUiOiAibm9zbmlmZiJ9XSwgImNvbnRlbnQiOiB7InNpemUiOiAxLCAibWltZVR5cGUiOiAidGV4dC9wbGFpbiIsICJjb21wcmVzc2lvbiI6IDAsICJ0ZXh0IjogIjEifSwgImhlYWRlcnNTaXplIjogMCwgImJvZHlTaXplIjogMzU1LCAicmVkaXJlY3RVUkwiOiAiIiwgIl90cmFuc2ZlclNpemUiOiAzNTV9LCAiY2FjaGUiOiB7fSwgInRpbWluZ3MiOiB7ImRucyI6IDU5Ljg2MSwgImNvbm5lY3QiOiAzNi4zMjcsICJzc2wiOiAyMS4zNjcsICJzZW5kIjogMCwgIndhaXQiOiAxNi4zMzIsICJyZWNlaXZlIjogMy4zMTJ9LCAicGFnZXJlZiI6ICJwYWdlQDhjOTMyZjgzMzdkOWFiYjRiOWFiOTg4OWRlYzUxYjk5IiwgInNlcnZlcklQQWRkcmVzcyI6ICJbMmEwMDoxNDUwOjQwMGM6YzFkOjo5Yl0iLCAiX3NlcnZlclBvcnQiOiA0NDMsICJfc2VjdXJpdHlEZXRhaWxzIjogeyJwcm90b2NvbCI6ICJUTFMgMS4zIiwgInN1YmplY3ROYW1lIjogIiouZy5kb3VibGVjbGljay5uZXQiLCAiaXNzdWVyIjogIldSMiIsICJ2YWxpZEZyb20iOiAxNzIyODM5ODM2LCAidmFsaWRUbyI6IDE3MzAwOTc0MzV9fSwgeyJzdGFydGVkRGF0ZVRpbWUiOiAiMjAyNC0wOS0wNVQxMTowNzoyMS4zMzdaIiwgInRpbWUiOiAxMTEuNDA1LCAicmVxdWVzdCI6IHsibWV0aG9kIjogIkdFVCIsICJ1cmwiOiAiaHR0cHM6Ly93d3cuZ29vZ2xldGFnbWFuYWdlci5jb20vZ3RhZy9qcz9pZD1HLVBLTThFRkpNM04mY3g9YyZfc2xjPTEiLCAiaHR0cFZlcnNpb24iOiAiaDMiLCAiY29va2llcyI6IFtdLCAiaGVhZGVycyI6IFt7Im5hbWUiOiAiOmF1dGhvcml0eSIsICJ2YWx1ZSI6ICJ3d3cuZ29vZ2xldGFnbWFuYWdlci5jb20ifSwgeyJuYW1lIjogIjptZXRob2QiLCAidmFsdWUiOiAiR0VUIn0sIHsibmFtZSI6ICI6cGF0aCIsICJ2YWx1ZSI6ICIvZ3RhZy9qcz9pZD1HLVBLTThFRkpNM04mY3g9YyZfc2xjPTEifSwgeyJuYW1lIjogIjpzY2hlbWUiLCAidmFsdWUiOiAiaHR0cHMifSwgeyJuYW1lIjogImFjY2VwdCIsICJ2YWx1ZSI6ICIqLyoifSwgeyJuYW1lIjogImFjY2VwdC1lbmNvZGluZyIsICJ2YWx1ZSI6ICJnemlwLCBkZWZsYXRlLCBiciwgenN0ZCJ9LCB7Im5hbWUiOiAiYWNjZXB0LWxhbmd1YWdlIiwgInZhbHVlIjogImVuLVVTIn0sIHsibmFtZSI6ICJyZWZlcmVyIiwgInZhbHVlIjogImh0dHBzOi8vcG9ydGFsLnN1cHBseWNoYWluY2FuYWRhLmNvbS8ifSwgeyJuYW1lIjogInNlYy1jaC11YSIsICJ2YWx1ZSI6ICJcIk5vdDtBPUJyYW5kXCI7dj1cIjI0XCIsIFwiQ2hyb21pdW1cIjt2PVwiMTI4XCIifSwgeyJuYW1lIjogInNlYy1jaC11YS1tb2JpbGUiLCAidmFsdWUiOiAiPzAifSwgeyJuYW1lIjogInNlYy1jaC11YS1wbGF0Zm9ybSIsICJ2YWx1ZSI6ICJcIldpbmRvd3NcIiJ9LCB7Im5hbWUiOiAic2VjLWZldGNoLWRlc3QiLCAidmFsdWUiOiAic2NyaXB0In0sIHsibmFtZSI6ICJzZWMtZmV0Y2gtbW9kZSIsICJ2YWx1ZSI6ICJuby1jb3JzIn0sIHsibmFtZSI6ICJzZWMtZmV0Y2gtc2l0ZSIsICJ2YWx1ZSI6ICJjcm9zcy1zaXRlIn0sIHsibmFtZSI6ICJ1c2VyLWFnZW50IiwgInZhbHVlIjogIk1vemlsbGEvNS4wIChXaW5kb3dzIE5UIDEwLjA7IFdpbjY0OyB4NjQpIEFwcGxlV2ViS2l0LzUzNy4zNiAoS0hUTUwsIGxpa2UgR2Vja28pIENocm9tZS8xMjguMC42NjEzLjE4IFNhZmFyaS81MzcuMzYifV0sICJxdWVyeVN0cmluZyI6IFt7Im5hbWUiOiAiaWQiLCAidmFsdWUiOiAiRy1QS004RUZKTTNOIn0sIHsibmFtZSI6ICJjeCIsICJ2YWx1ZSI6ICJjIn0sIHsibmFtZSI6ICJfc2xjIiwgInZhbHVlIjogIjEifV0sICJoZWFkZXJzU2l6ZSI6IDU3NSwgImJvZHlTaXplIjogMH0sICJyZXNwb25zZSI6IHsic3RhdHVzIjogMjAwLCAic3RhdHVzVGV4dCI6ICIiLCAiaHR0cFZlcnNpb24iOiAiaDMiLCAiY29va2llcyI6IFtdLCAiaGVhZGVycyI6IFt7Im5hbWUiOiAiYWNjZXNzLWNvbnRyb2wtYWxsb3ctY3JlZGVudGlhbHMiLCAidmFsdWUiOiAidHJ1ZSJ9LCB7Im5hbWUiOiAiYWNjZXNzLWNvbnRyb2wtYWxsb3ctaGVhZGVycyIsICJ2YWx1ZSI6ICJDYWNoZS1Db250cm9sIn0sIHsibmFtZSI6ICJhY2Nlc3MtY29udHJvbC1hbGxvdy1vcmlnaW4iLCAidmFsdWUiOiAiKiJ9LCB7Im5hbWUiOiAiYWx0LXN2YyIsICJ2YWx1ZSI6ICJoMz1cIjo0NDNcIjsgbWE9MjU5MjAwMCxoMy0yOT1cIjo0NDNcIjsgbWE9MjU5MjAwMCJ9LCB7Im5hbWUiOiAiY2FjaGUtY29udHJvbCIsICJ2YWx1ZSI6ICJwcml2YXRlLCBtYXgtYWdlPTkwMCJ9LCB7Im5hbWUiOiAiY29udGVudC1lbmNvZGluZyIsICJ2YWx1ZSI6ICJiciJ9LCB7Im5hbWUiOiAiY29udGVudC1sZW5ndGgiLCAidmFsdWUiOiAiMTAxMTQ3In0sIHsibmFtZSI6ICJjb250ZW50LXR5cGUiLCAidmFsdWUiOiAiYXBwbGljYXRpb24vamF2YXNjcmlwdDsgY2hhcnNldD1VVEYtOCJ9LCB7Im5hbWUiOiAiY3Jvc3Mtb3JpZ2luLXJlc291cmNlLXBvbGljeSIsICJ2YWx1ZSI6ICJjcm9zcy1vcmlnaW4ifSwgeyJuYW1lIjogImRhdGUiLCAidmFsdWUiOiAiVGh1LCAwNSBTZXAgMjAyNCAxMTowNzoyMSBHTVQifSwgeyJuYW1lIjogImV4cGlyZXMiLCAidmFsdWUiOiAiVGh1LCAwNSBTZXAgMjAyNCAxMTowNzoyMSBHTVQifSwgeyJuYW1lIjogInNlcnZlciIsICJ2YWx1ZSI6ICJHb29nbGUgVGFnIE1hbmFnZXIifSwgeyJuYW1lIjogInN0cmljdC10cmFuc3BvcnQtc2VjdXJpdHkiLCAidmFsdWUiOiAibWF4LWFnZT0zMTUzNjAwMDsgaW5jbHVkZVN1YkRvbWFpbnMifSwgeyJuYW1lIjogInZhcnkiLCAidmFsdWUiOiAiQWNjZXB0LUVuY29kaW5nIn0sIHsibmFtZSI6ICJ4LXhzcy1wcm90ZWN0aW9uIiwgInZhbHVlIjogIjAifV0sICJjb250ZW50IjogeyJzaXplIjogMjk1ODQ0LCAibWltZVR5cGUiOiAiYXBwbGljYXRpb24vamF2YXNjcmlwdDsgY2hhcnNldD1VVEYtOCIsICJjb21wcmVzc2lvbiI6IDE5NDY1MSwgInRleHQiOiAiXG4vLyBDb3B5cmlnaHQgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuIFxuKGZ1bmN0aW9uKCl7XG5cbnZhciBkYXRhID0ge1xuXCJyZXNvdXJjZVwiOiB7XG4gIFwidmVyc2lvblwiOlwiMlwiLFxuICBcbiAgXCJtYWNyb3NcIjpbe1wiZnVuY3Rpb25cIjpcIl9fZVwifSx7XCJ2dHBfc2lnbmFsXCI6MixcImZ1bmN0aW9uXCI6XCJfX2NcIixcInZ0cF92YWx1ZVwiOjJ9LHtcImZ1bmN0aW9uXCI6XCJfX2NcIixcInZ0cF92YWx1ZVwiOlwiZ29vZ2xlLmx1XCJ9LHtcImZ1bmN0aW9uXCI6XCJfX2NcIixcInZ0cF92YWx1ZVwiOjB9LHtcInZ0cF9zaWduYWxcIjoyLFwiZnVuY3Rpb25cIjpcIl9fY1wiLFwidnRwX3ZhbHVlXCI6Mn0se1wiZnVuY3Rpb25cIjpcIl9fY1wiLFwidnRwX3ZhbHVlXCI6XCJnb29nbGUubHVcIn0se1wiZnVuY3Rpb25cIjpcIl9fY1wiLFwidnRwX3ZhbHVlXCI6MH1dLFxuICBcInRhZ3NcIjpbe1wiZnVuY3Rpb25cIjpcIl9fb2d0X2dhX3NlbmRcIixcInByaW9yaXR5XCI6MTUsXCJ2dHBfdmFsdWVcIjp0cnVlLFwidGFnX2lkXCI6MTZ9LHtcImZ1bmN0aW9uXCI6XCJfX29ndF9yZWZlcnJhbF9leGNsdXNpb25cIixcInByaW9yaXR5XCI6MTUsXCJ2dHBfaW5jbHVkZUNvbmRpdGlvbnNcIjpbXCJsaXN0XCIsXCJzY21hXFxcXC5jb21cIl0sXCJ0YWdfaWRcIjoxOH0se1wiZnVuY3Rpb25cIjpcIl9fb2d0X3Nlc3Npb25fdGltZW91dFwiLFwicHJpb3JpdHlcIjoxNSxcInZ0cF9zZXNzaW9uTWludXRlc1wiOjMwLFwidnRwX3Nlc3Npb25Ib3Vyc1wiOjAsXCJ0YWdfaWRcIjoxOX0se1wiZnVuY3Rpb25cIjpcIl9fb2d0XzFwX2RhdGFfdjJcIixcInByaW9yaXR5XCI6MTUsXCJ2dHBfaXNBdXRvRW5hYmxlZFwiOnRydWUsXCJ2dHBfYXV0b0NvbGxlY3RFeGNsdXNpb25TZWxlY3RvcnNcIjpbXCJsaXN0XCIsW1wibWFwXCIsXCJleGNsdXNpb25TZWxlY3RvclwiLFwiXCJdXSxcInZ0cF9pc0VuYWJsZWRcIjp0cnVlLFwidnRwX2NpdHlUeXBlXCI6XCJDU1NfU0VMRUNUT1JcIixcInZ0cF9tYW51YWxFbWFpbEVuYWJsZWRcIjpmYWxzZSxcInZ0cF9maXJzdE5hbWVUeXBlXCI6XCJDU1NfU0VMRUNUT1JcIixcInZ0cF9jb3VudHJ5VHlwZVwiOlwiQ1NTX1NFTEVDVE9SXCIsXCJ2dHBfY2l0eVZhbHVlXCI6XCJcIixcInZ0cF9lbWFpbFR5cGVcIjpcIkNTU19TRUxFQ1RPUlwiLFwidnRwX3JlZ2lvblR5cGVcIjpcIkNTU19TRUxFQ1RPUlwiLFwidnRwX2F1dG9FbWFpbEVuYWJsZWRcIjp0cnVlLFwidnRwX3Bvc3RhbENvZGVWYWx1ZVwiOlwiXCIsXCJ2dHBfbGFzdE5hbWVWYWx1ZVwiOlwiXCIsXCJ2dHBfcGhvbmVUeXBlXCI6XCJDU1NfU0VMRUNUT1JcIixcInZ0cF9waG9uZVZhbHVlXCI6XCJcIixcInZ0cF9zdHJlZXRUeXBlXCI6XCJDU1NfU0VMRUNUT1JcIixcInZ0cF9hdXRvUGhvbmVFbmFibGVkXCI6ZmFsc2UsXCJ2dHBfcG9zdGFsQ29kZVR5cGVcIjpcIkNTU19TRUxFQ1RPUlwiLFwidnRwX2VtYWlsVmFsdWVcIjpcIlwiLFwidnRwX2ZpcnN0TmFtZVZhbHVlXCI6XCJcIixcInZ0cF9zdHJlZXRWYWx1ZVwiOlwiXCIsXCJ2dHBfbGFzdE5hbWVUeXBlXCI6XCJDU1NfU0VMRUNUT1JcIixcInZ0cF9hdXRvQWRkcmVzc0VuYWJsZWRcIjpmYWxzZSxcInZ0cF9yZWdpb25WYWx1ZVwiOlwiXCIsXCJ2dHBfY291bnRyeVZhbHVlXCI6XCJcIixcInZ0cF9pc0F1dG9Db2xsZWN0UGlpRW5hYmxlZEZsYWdcIjpmYWxzZSxcInRhZ19pZFwiOjIwfSx7XCJmdW5jdGlvblwiOlwiX19jY2RfZ2FfZmlyc3RcIixcInByaW9yaXR5XCI6MTQsXCJ2dHBfaW5zdGFuY2VEZXN0aW5hdGlvbklkXCI6XCJHLVBLTThFRkpNM05cIixcInRhZ19pZFwiOjM1fSx7XCJmdW5jdGlvblwiOlwiX19zZXRfcHJvZHVjdF9zZXR0aW5nc1wiLFwicHJpb3JpdHlcIjoxMyxcInZ0cF9pbnN0YW5jZURlc3RpbmF0aW9uSWRcIjpcIkctUEtNOEVGSk0zTlwiLFwidnRwX2ZvcmVpZ25UbGRNYWNyb1Jlc3VsdFwiOltcIm1hY3JvXCIsNV0sXCJ2dHBfaXNDaGluYVZpcFJlZ2lvbk1hY3JvUmVzdWx0XCI6W1wibWFjcm9cIiw2XSxcInRhZ19pZFwiOjM0fSx7XCJmdW5jdGlvblwiOlwiX19jY2RfZ2FfYWRzX2xpbmtcIixcInByaW9yaXR5XCI6MTIsXCJ2dHBfaW5zdGFuY2VEZXN0aW5hdGlvbklkXCI6XCJHLVBLTThFRkpNM05cIixcInRhZ19pZFwiOjMzfSx7XCJmdW5jdGlvblwiOlwiX19vZ3RfZ29vZ2xlX3NpZ25hbHNcIixcInByaW9yaXR5XCI6MTEsXCJ2dHBfZ29vZ2xlU2lnbmFsc1wiOlwiTk9OX0dBSUFfUkVNQVJLRVRJTkdcIixcInZ0cF9pbnN0YW5jZURlc3RpbmF0aW9uSWRcIjpcIkctUEtNOEVGSk0zTlwiLFwidnRwX3NlcnZlck1hY3JvUmVzdWx0XCI6W1wibWFjcm9cIiw0XSxcInRhZ19pZFwiOjMyfSx7XCJmdW5jdGlvblwiOlwiX19jY2RfZ2FfcmVnc2NvcGVcIixcInByaW9yaXR5XCI6MTAsXCJ2dHBfc2V0dGluZ3NUYWJsZVwiOltcImxpc3RcIixbXCJtYXBcIixcInJlZGFjdEZpZWxkR3JvdXBcIixcIkRFVklDRV9BTkRfR0VPXCIsXCJkaXNhbGxvd0FsbFJlZ2lvbnNcIixmYWxzZSxcImRpc2FsbG93ZWRSZWdpb25zXCIsXCJcIl0sW1wibWFwXCIsXCJyZWRhY3RGaWVsZEdyb3VwXCIsXCJHT09HTEVfU0lHTkFMU1wiLFwiZGlzYWxsb3dBbGxSZWdpb25zXCIsZmFsc2UsXCJkaXNhbGxvd2VkUmVnaW9uc1wiLFwiXCJdXSxcInZ0cF9pbnN0YW5jZURlc3RpbmF0aW9uSWRcIjpcIkctUEtNOEVGSk0zTlwiLFwidGFnX2lkXCI6MzF9LHtcImZ1bmN0aW9uXCI6XCJfX2NjZF9lbV9zaXRlX3NlYXJjaFwiLFwicHJpb3JpdHlcIjo5LFwidnRwX3NlYXJjaFF1ZXJ5UGFyYW1zXCI6XCJxXCIsXCJ2dHBfaW5jbHVkZVBhcmFtc1wiOnRydWUsXCJ2dHBfaW5zdGFuY2VEZXN0aW5hdGlvbklkXCI6XCJHLVBLTThFRkpNM05cIixcInRhZ19pZFwiOjMwfSx7XCJmdW5jdGlvblwiOlwiX19jY2RfY29udmVyc2lvbl9tYXJraW5nXCIsXCJwcmlvcml0eVwiOjgsXCJ2dHBfY29udmVyc2lvblJ1bGVzXCI6W1wibGlzdFwiLFtcIm1hcFwiLFwibWF0Y2hpbmdSdWxlc1wiLFwie1xcXCJ0eXBlXFxcIjo1LFxcXCJhcmdzXFxcIjpbe1xcXCJzdHJpbmdWYWx1ZVxcXCI6XFxcInB1cmNoYXNlXFxcIn0se1xcXCJjb250ZXh0VmFsdWVcXFwiOntcXFwibmFtZXNwYWNlVHlwZVxcXCI6MSxcXFwia2V5UGFydHNcXFwiOltcXFwiZXZlbnROYW1lXFxcIl19fV19XCJdLFtcIm1hcFwiLFwibWF0Y2hpbmdSdWxlc1wiLFwie1xcXCJ0eXBlXFxcIjo1LFxcXCJhcmdzXFxcIjpbe1xcXCJzdHJpbmdWYWx1ZVxcXCI6XFxcImVtYWlsX2xpbmtfY2xpY2tzXFxcIn0se1xcXCJjb250ZXh0VmFsdWVcXFwiOntcXFwibmFtZXNwYWNlVHlwZVxcXCI6MSxcXFwia2V5UGFydHNcXFwiOltcXFwiZXZlbnROYW1lXFxcIl19fV19XCJdLFtcIm1hcFwiLFwibWF0Y2hpbmdSdWxlc1wiLFwie1xcXCJ0eXBlXFxcIjo1LFxcXCJhcmdzXFxcIjpbe1xcXCJzdHJpbmdWYWx1ZVxcXCI6XFxcInBkZl9vcGVuc1xcXCJ9LHtcXFwiY29udGV4dFZhbHVlXFxcIjp7XFxcIm5hbWVzcGFjZVR5cGVcXFwiOjEsXFxcImtleVBhcnRzXFxcIjpbXFxcImV2ZW50TmFtZVxcXCJdfX1dfVwiXSxbXCJtYXBcIixcIm1hdGNoaW5nUnVsZXNcIixcIntcXFwidHlwZVxcXCI6NSxcXFwiYXJnc1xcXCI6W3tcXFwic3RyaW5nVmFsdWVcXFwiOlxcXCJzY21hX2VzdWJzY3JpcHRpb25zXFxcIn0se1xcXCJjb250ZXh0VmFsdWVcXFwiOntcXFwibmFtZXNwYWNlVHlwZVxcXCI6MSxcXFwia2V5UGFydHNcXFwiOltcXFwiZXZlbnROYW1lXFxcIl19fV19XCJdLFtcIm1hcFwiLFwibWF0Y2hpbmdSdWxlc1wiLFwie1xcXCJ0eXBlXFxcIjo1LFxcXCJhcmdzXFxcIjpbe1xcXCJzdHJpbmdWYWx1ZVxcXCI6XFxcIm5ld3NsZXR0ZXJfc3Vic2NyaXB0aW9uXFxcIn0se1xcXCJjb250ZXh0VmFsdWVcXFwiOntcXFwibmFtZXNwYWNlVHlwZVxcXCI6MSxcXFwia2V5UGFydHNcXFwiOltcXFwiZXZlbnROYW1lXFxcIl19fV19XCJdLFtcIm1hcFwiLFwibWF0Y2hpbmdSdWxlc1wiLFwie1xcXCJ0eXBlXFxcIjo1LFxcXCJhcmdzXFxcIjpbe1xcXCJzdHJpbmdWYWx1ZVxcXCI6XFxcIm1lbWJlcl9wb3J0YWxfY2xpY2tcXFwifSx7XFxcImNvbnRleHRWYWx1ZVxcXCI6e1xcXCJuYW1lc3BhY2VUeXBlXFxcIjoxLFxcXCJrZXlQYXJ0c1xcXCI6W1xcXCJldmVudE5hbWVcXFwiXX19XX1cIl0sW1wibWFwXCIsXCJtYXRjaGluZ1J1bGVzXCIsXCJ7XFxcInR5cGVcXFwiOjUsXFxcImFyZ3NcXFwiOlt7XFxcInN0cmluZ1ZhbHVlXFxcIjpcXFwiZXZlbnRfcmVnaXN0cmF0aW9uX2NsaWNrXFxcIn0se1xcXCJjb250ZXh0VmFsdWVcXFwiOntcXFwibmFtZXNwYWNlVHlwZVxcXCI6MSxcXFwia2V5UGFydHNcXFwiOltcXFwiZXZlbnROYW1lXFxcIl19fV19XCJdXSxcInZ0cF9pbnN0YW5jZURlc3RpbmF0aW9uSWRcIjpcIkctUEtNOEVGSk0zTlwiLFwidGFnX2lkXCI6Mjl9LHtcImZ1bmN0aW9uXCI6XCJfX29ndF9ldmVudF9jcmVhdGVcIixcInByaW9yaXR5XCI6NyxcInZ0cF9ldmVudE5hbWVcIjpcImV2ZW50X3JlZ2lzdHJhdGlvbl9jbGlja1wiLFwidnRwX2lzQ29weVwiOnRydWUsXCJ2dHBfaW5zdGFuY2VEZXN0aW5hdGlvbklkXCI6XCJHLVBLTThFRkpNM05cIixcInZ0cF9wcmVjb21waWxlZFJ1bGVcIjpbXCJtYXBcIixcIm5ld19ldmVudF9uYW1lXCIsXCJldmVudF9yZWdpc3RyYXRpb25fY2xpY2tcIixcIm1lcmdlX3NvdXJjZV9ldmVudF9wYXJhbXNcIix0cnVlLFwiZXZlbnRfbmFtZV9wcmVkaWNhdGVcIixbXCJtYXBcIixcInZhbHVlc1wiLFtcImxpc3RcIixbXCJtYXBcIixcInR5cGVcIixcImV2ZW50X25hbWVcIl0sW1wibWFwXCIsXCJ0eXBlXCIsXCJjb25zdFwiLFwiY29uc3RfdmFsdWVcIixcIkV2ZW50IFJlZ2lzdHJhdGlvbiBDbGlja1wiXV0sXCJ0eXBlXCIsXCJlcWlcIl0sXCJjb25kaXRpb25zXCIsW1wibGlzdFwiLFtcIm1hcFwiLFwicHJlZGljYXRlc1wiLFtcImxpc3RcIixbXCJtYXBcIixcInZhbHVlc1wiLFtcImxpc3RcIixbXCJtYXBcIixcInR5cGVcIixcImV2ZW50X3BhcmFtXCIsXCJldmVudF9wYXJhbVwiLFtcIm1hcFwiLFwicGFyYW1fbmFtZVwiLFwiZXZlbnRfY2F0ZWdvcnlcIl1dLFtcIm1hcFwiLFwidHlwZVwiLFwiY29uc3RcIixcImNvbnN0X3ZhbHVlXCIsXCJDb252ZXJzaW9uXCJdXSxcInR5cGVcIixcImVxaVwiXV1dXV0sXCJ0YWdfaWRcIjoyOH0se1wiZnVuY3Rpb25cIjpcIl9fb2d0X2V2ZW50X2NyZWF0ZVwiLFwicHJpb3JpdHlcIjo2LFwidnRwX2V2ZW50TmFtZVwiOlwibmV3c2xldHRlcl9zdWJzY3JpcHRpb25cIixcInZ0cF9pc0NvcHlcIjp0cnVlLFwidnRwX2luc3RhbmNlRGVzdGluYXRpb25JZFwiOlwiRy1QS004RUZKTTNOXCIsXCJ2dHBfcHJlY29tcGlsZWRSdWxlXCI6W1wibWFwXCIsXCJuZXdfZXZlbnRfbmFtZVwiLFwibmV3c2xldHRlcl9zdWJzY3JpcHRpb25cIixcIm1lcmdlX3NvdXJjZV9ldmVudF9wYXJhbXNcIix0cnVlLFwiZXZlbnRfbmFtZV9wcmVkaWNhdGVcIixbXCJtYXBcIixcInZhbHVlc1wiLFtcImxpc3RcIixbXCJtYXBcIixcInR5cGVcIixcImV2ZW50X25hbWVcIl0sW1wibWFwXCIsXCJ0eXBlXCIsXCJjb25zdFwiLFwiY29uc3RfdmFsdWVcIixcIk5ld3NsZXR0ZXIgU3Vic2NyaXB0aW9uXCJdXSxcInR5cGVcIixcImVxaVwiXSxcImNvbmRpdGlvbnNcIixbXCJsaXN0XCIsW1wibWFwXCIsXCJwcmVkaWNhdGVzXCIsW1wibGlzdFwiLFtcIm1hcFwiLFwidmFsdWVzXCIsW1wibGlzdFwiLFtcIm1hcFwiLFwidHlwZVwiLFwiZXZlbnRfcGFyYW1cIixcImV2ZW50X3BhcmFtXCIsW1wibWFwXCIsXCJwYXJhbV9uYW1lXCIsXCJldmVudF9jYXRlZ29yeVwiXV0sW1wibWFwXCIsXCJ0eXBlXCIsXCJjb25zdFwiLFwiY29uc3RfdmFsdWVcIixcIkNvbnZlcnNpb25cIl1dLFwidHlwZVwiLFwiZXFpXCJdXV1dXSxcInRhZ19pZFwiOjI3fSx7XCJmdW5jdGlvblwiOlwiX19vZ3RfZXZlbnRfY3JlYXRlXCIsXCJwcmlvcml0eVwiOjUsXCJ2dHBfZXZlbnROYW1lXCI6XCJzY21hX2VzdWJzY3JpcHRpb25zXCIsXCJ2dHBfaXNDb3B5XCI6dHJ1ZSxcInZ0cF9pbnN0YW5jZURlc3RpbmF0aW9uSWRcIjpcIkctUEtNOEVGSk0zTlwiLFwidnRwX3ByZWNvbXBpbGVkUnVsZVwiOltcIm1hcFwiLFwibmV3X2V2ZW50X25hbWVcIixcInNjbWFfZXN1YnNjcmlwdGlvbnNcIixcIm1lcmdlX3NvdXJjZV9ldmVudF9wYXJhbXNcIix0cnVlLFwiZXZlbnRfbmFtZV9wcmVkaWNhdGVcIixbXCJtYXBcIixcInZhbHVlc1wiLFtcImxpc3RcIixbXCJtYXBcIixcInR5cGVcIixcImV2ZW50X25hbWVcIl0sW1wibWFwXCIsXCJ0eXBlXCIsXCJjb25zdFwiLFwiY29uc3RfdmFsdWVcIixcIlNDTUEgZVN1YnNjcmlwdGlvblwiXV0sXCJ0eXBlXCIsXCJlcWlcIl0sXCJjb25kaXRpb25zXCIsW1wibGlzdFwiLFtcIm1hcFwiLFwicHJlZGljYXRlc1wiLFtcImxpc3RcIixbXCJtYXBcIixcInZhbHVlc1wiLFtcImxpc3RcIixbXCJtYXBcIixcInR5cGVcIixcImV2ZW50X3BhcmFtXCIsXCJldmVudF9wYXJhbVwiLFtcIm1hcFwiLFwicGFyYW1fbmFtZVwiLFwiZXZlbnRfY2F0ZWdvcnlcIl1dLFtcIm1hcFwiLFwidHlwZVwiLFwiY29uc3RcIixcImNvbnN0X3ZhbHVlXCIsXCJDb252ZXJzaW9uXCJdXSxcInR5cGVcIixcImVxaVwiXV1dXV0sXCJ0YWdfaWRcIjoyNn0se1wiZnVuY3Rpb25cIjpcIl9fb2d0X2V2ZW50X2NyZWF0ZVwiLFwicHJpb3JpdHlcIjo0LFwidnRwX2V2ZW50TmFtZVwiOlwiZW1haWxfbGlua19jbGlja3NcIixcInZ0cF9pc0NvcHlcIjp0cnVlLFwidnRwX2luc3RhbmNlRGVzdGluYXRpb25JZFwiOlwiRy1QS004RUZKTTNOXCIsXCJ2dHBfcHJlY29tcGlsZWRSdWxlXCI6W1wibWFwXCIsXCJuZXdfZXZlbnRfbmFtZVwiLFwiZW1haWxfbGlua19jbGlja3NcIixcIm1lcmdlX3NvdXJjZV9ldmVudF9wYXJhbXNcIix0cnVlLFwiZXZlbnRfbmFtZV9wcmVkaWNhdGVcIixbXCJtYXBcIixcInZhbHVlc1wiLFtcImxpc3RcIixbXCJtYXBcIixcInR5cGVcIixcImV2ZW50X25hbWVcIl0sW1wibWFwXCIsXCJ0eXBlXCIsXCJjb25zdFwiLFwiY29uc3RfdmFsdWVcIixcIkVtYWlsIExpbmsgQ2xpY2tcIl1dLFwidHlwZVwiLFwiZXFpXCJdLFwiY29uZGl0aW9uc1wiLFtcImxpc3RcIixbXCJtYXBcIixcInByZWRpY2F0ZXNcIixbXCJsaXN0XCIsW1wibWFwXCIsXCJ2YWx1ZXNcIixbXCJsaXN0XCIsW1wibWFwXCIsXCJ0eXBlXCIsXCJldmVudF9wYXJhbVwiLFwiZXZlbnRfcGFyYW1cIixbXCJtYXBcIixcInBhcmFtX25hbWVcIixcImV2ZW50X2NhdGVnb3J5XCJdXSxbXCJtYXBcIixcInR5cGVcIixcImNvbnN0XCIsXCJjb25zdF92YWx1ZVwiLFwiQ29udmVyc2lvblwiXV0sXCJ0eXBlXCIsXCJlcWlcIl1dXV1dLFwidGFnX2lkXCI6MjV9LHtcImZ1bmN0aW9uXCI6XCJfX29ndF9ldmVudF9jcmVhdGVcIixcInByaW9yaXR5XCI6MyxcInZ0cF9ldmVudE5hbWVcIjpcInBkZl9vcGVuc1wiLFwidnRwX2lzQ29weVwiOnRydWUsXCJ2dHBfaW5zdGFuY2VEZXN0aW5hdGlvbklkXCI6XCJHLVBLTThFRkpNM05cIixcInZ0cF9wcmVjb21waWxlZFJ1bGVcIjpbXCJtYXBcIixcIm5ld19ldmVudF9uYW1lXCIsXCJwZGZfb3BlbnNcIixcIm1lcmdlX3NvdXJjZV9ldmVudF9wYXJhbXNcIix0cnVlLFwiZXZlbnRfbmFtZV9wcmVkaWNhdGVcIixbXCJtYXBcIixcInZhbHVlc1wiLFtcImxpc3RcIixbXCJtYXBcIixcInR5cGVcIixcImV2ZW50X25hbWVcIl0sW1wibWFwXCIsXCJ0eXBlXCIsXCJjb25zdFwiLFwiY29uc3RfdmFsdWVcIixcIlBERiBDbGlja1wiXV0sXCJ0eXBlXCIsXCJlcWlcIl0sXCJjb25kaXRpb25zXCIsW1wibGlzdFwiLFtcIm1hcFwiLFwicHJlZGljYXRlc1wiLFtcImxpc3RcIixbXCJtYXBcIixcInZhbHVlc1wiLFtcImxpc3RcIixbXCJtYXBcIixcInR5cGVcIixcImV2ZW50X3BhcmFtXCIsXCJldmVudF9wYXJhbVwiLFtcIm1hcFwiLFwicGFyYW1fbmFtZVwiLFwiZXZlbnRfY2F0ZWdvcnlcIl1dLFtcIm1hcFwiLFwidHlwZVwiLFwiY29uc3RcIixcImNvbnN0X3ZhbHVlXCIsXCJDb252ZXJzaW9uXCJdXSxcInR5cGVcIixcImVxaVwiXV1dXV0sXCJ0YWdfaWRcIjoyNH0se1wiZnVuY3Rpb25cIjpcIl9fb2d0X2V2ZW50X2NyZWF0ZVwiLFwicHJpb3JpdHlcIjoyLFwidnRwX2V2ZW50TmFtZVwiOlwibWVtYmVyX3BvcnRhbF9jbGlja1wiLFwidnRwX2lzQ29weVwiOnRydWUsXCJ2dHBfaW5zdGFuY2VEZXN0aW5hdGlvbklkXCI6XCJHLVBLTThFRkpNM05cIixcInZ0cF9wcmVjb21waWxlZFJ1bGVcIjpbXCJtYXBcIixcIm5ld19ldmVudF9uYW1lXCIsXCJtZW1iZXJfcG9ydGFsX2NsaWNrXCIsXCJtZXJnZV9zb3VyY2VfZXZlbnRfcGFyYW1zXCIsdHJ1ZSxcImV2ZW50X25hbWVfcHJlZGljYXRlXCIsW1wibWFwXCIsXCJ2YWx1ZXNcIixbXCJsaXN0XCIsW1wibWFwXCIsXCJ0eXBlXCIsXCJldmVudF9uYW1lXCJdLFtcIm1hcFwiLFwidHlwZVwiLFwiY29uc3RcIixcImNvbnN0X3ZhbHVlXCIsXCJNZW1iZXIgUG9ydGFsIENsaWNrXCJdXSxcInR5cGVcIixcImVxaVwiXSxcImNvbmRpdGlvbnNcIixbXCJsaXN0XCIsW1wibWFwXCIsXCJwcmVkaWNhdGVzXCIsW1wibGlzdFwiLFtcIm1hcFwiLFwidmFsdWVzXCIsW1wibGlzdFwiLFtcIm1hcFwiLFwidHlwZVwiLFwiZXZlbnRfcGFyYW1cIixcImV2ZW50X3BhcmFtXCIsW1wibWFwXCIsXCJwYXJhbV9uYW1lXCIsXCJldmVudF9jYXRlZ29yeVwiXV0sW1wibWFwXCIsXCJ0eXBlXCIsXCJjb25zdFwiLFwiY29uc3RfdmFsdWVcIixcIkNvbnZlcnNpb25cIl1dLFwidHlwZVwiLFwiZXFpXCJdXV1dXSxcInRhZ19pZFwiOjIzfSx7XCJmdW5jdGlvblwiOlwiX19jY2RfYXV0b19yZWRhY3RcIixcInByaW9yaXR5XCI6MSxcInZ0cF9yZWRhY3RFbWFpbFwiOmZhbHNlLFwidnRwX2luc3RhbmNlRGVzdGluYXRpb25JZFwiOlwiRy1QS004RUZKTTNOXCIsXCJ0YWdfaWRcIjoyMn0se1wiZnVuY3Rpb25cIjpcIl9fZ2N0XCIsXCJ2dHBfdHJhY2tpbmdJZFwiOlwiRy1QS004RUZKTTNOXCIsXCJ2dHBfc2Vzc2lvbkR1cmF0aW9uXCI6MCxcInZ0cF9nb29nbGVTaWduYWxzXCI6W1wibWFjcm9cIiwxXSxcInZ0cF9mb3JlaWduVGxkXCI6W1wibWFjcm9cIiwyXSxcInZ0cF9yZXN0cmljdERvbWFpblwiOltcIm1hY3JvXCIsM10sXCJ0YWdfaWRcIjoxM30se1wiZnVuY3Rpb25cIjpcIl9fY2NkX2dhX2xhc3RcIixcInByaW9yaXR5XCI6MCxcInZ0cF9pbnN0YW5jZURlc3RpbmF0aW9uSWRcIjpcIkctUEtNOEVGSk0zTlwiLFwidGFnX2lkXCI6MjF9XSxcbiAgXCJwcmVkaWNhdGVzXCI6W3tcImZ1bmN0aW9uXCI6XCJfZXFcIixcImFyZzBcIjpbXCJtYWNyb1wiLDBdLFwiYXJnMVwiOlwiZ3RtLmpzXCJ9LHtcImZ1bmN0aW9uXCI6XCJfZXFcIixcImFyZzBcIjpbXCJtYWNyb1wiLDBdLFwiYXJnMVwiOlwiZ3RtLmluaXRcIn1dLFxuICBcInJ1bGVzXCI6W1tbXCJpZlwiLDBdLFtcImFkZFwiLDE4XV0sW1tcImlmXCIsMV0sW1wiYWRkXCIsMCwxLDIsMywxOSwxNywxNiwxNSwxNCwxMywxMiwxMSwxMCw5LDgsNyw2LDUsNF1dXVxufSxcblwicnVudGltZVwiOlsgWzUwLFwiX19jXCIsWzQ2LFwiYVwiXSxbMzYsWzE3LFsxNSxcImFcIl0sXCJ2YWx1ZVwiXV1dXG4gLFs1MCxcIl9fY2NkX2F1dG9fcmVkYWN0XCIsWzQ2LFwiYVwiXSxbNTAsXCJ2XCIsWzQ2LFwiYmtcIl0sWzM2LFsyLFsxNSxcImJrXCJdLFwicmVwbGFjZVwiLFs3LFsxNSxcInVcIl0sXCJcXFxcJDFcIl1dXV0sWzUwLFwid1wiLFs0NixcImJrXCJdLFs1MixcImJsXCIsW1wiY1wiLFsxNSxcImJrXCJdXV0sWzUyLFwiYm1cIixbN11dLFs2NSxcImJuXCIsWzIsWzE1LFwiYmxcIl0sXCJzcGxpdFwiLFs3LFwiXCJdXSxbNDYsWzUzLFs1MixcImJvXCIsWzcsW1widlwiLFsxNSxcImJuXCJdXV1dLFs1MixcImJwXCIsW1wiZFwiLFsxNSxcImJuXCJdXV0sWzIyLFsxMixbMTUsXCJicFwiXSxbNDVdXSxbNDYsWzM2LFtcImRcIixbXCJ2XCIsWzE1LFwiYmtcIl1dXV1dXSxbMjIsWzIxLFsxNSxcImJwXCJdLFsxNSxcImJuXCJdXSxbNDYsWzIsWzE1LFwiYm9cIl0sXCJwdXNoXCIsWzcsWzE1LFwiYnBcIl1dXSxbMjIsWzIxLFsxNSxcImJuXCJdLFsyLFsxNSxcImJuXCJdLFwidG9Mb3dlckNhc2VcIixbN11dXSxbNDYsWzIsWzE1LFwiYm9cIl0sXCJwdXNoXCIsWzcsW1wiZFwiLFsyLFsxNSxcImJuXCJdLFwidG9Mb3dlckNhc2VcIixbN11dXV1dXSxbNDYsWzIyLFsyMSxbMTUsXCJiblwiXSxbMixbMTUsXCJiblwiXSxcInRvVXBwZXJDYXNlXCIsWzddXV0sWzQ2LFsyLFsxNSxcImJvXCJdLFwicHVzaFwiLFs3LFtcImRcIixbMixbMTUsXCJiblwiXSxcInRvVXBwZXJDYXNlXCIsWzddXV1dXV1dXV1dXSxbMjIsWzE4LFsxNyxbMTUsXCJib1wiXSxcImxlbmd0aFwiXSwxXSxbNDYsWzIsWzE1LFwiYm1cIl0sXCJwdXNoXCIsWzcsWzAsWzAsXCIoPzpcIixbMixbMTUsXCJib1wiXSxcImpvaW5cIixbNyxcInxcIl1dXSxcIilcIl1dXV0sWzQ2LFsyLFsxNSxcImJtXCJdLFwicHVzaFwiLFs3LFsxNixbMTUsXCJib1wiXSwwXV1dXV1dXV0sWzM2LFsyLFsxNSxcImJtXCJdLFwiam9pblwiLFs3LFwiXCJdXV1dLFs1MCxcInhcIixbNDYsXCJia1wiLFwiYmxcIixcImJtXCJdLFs1MixcImJuXCIsW1wielwiLFsxNSxcImJrXCJdLFsxNSxcImJtXCJdXV0sWzIyLFsyOCxbMTUsXCJiblwiXV0sWzQ2LFszNixbMTUsXCJia1wiXV1dXSxbMjIsWzI4LFsxNyxbMTUsXCJiblwiXSxcInNlYXJjaFwiXV0sWzQ2LFszNixbMTUsXCJia1wiXV1dXSxbNDEsXCJib1wiXSxbMyxcImJvXCIsWzE3LFsxNSxcImJuXCJdLFwic2VhcmNoXCJdXSxbNjUsXCJicFwiLFsxNSxcImJsXCJdLFs0NixbNTMsWzUyLFwiYnFcIixbNyxbXCJ2XCIsWzE1LFwiYnBcIl1dLFtcIndcIixbMTUsXCJicFwiXV1dXSxbNjUsXCJiclwiLFsxNSxcImJxXCJdLFs0NixbNTMsWzUyLFwiYnNcIixbMzAsWzE2LFsxNSxcInRcIl0sWzE1LFwiYnJcIl1dLFs0MyxbMTUsXCJ0XCJdLFsxNSxcImJyXCJdLFtcImJcIixbMCxbMCxcIihbPyZdXCIsWzE1LFwiYnJcIl1dLFwiPSkoW14mXSopXCJdLFwiZ2lcIl1dXV0sWzMsXCJib1wiLFsyLFsxNSxcImJvXCJdLFwicmVwbGFjZVwiLFs3LFsxNSxcImJzXCJdLFswLFwiJDFcIixbMTUsXCJyXCJdXV1dXV1dXV1dXSxbMjIsWzIwLFsxNSxcImJvXCJdLFsxNyxbMTUsXCJiblwiXSxcInNlYXJjaFwiXV0sWzQ2LFszNixbMTUsXCJia1wiXV1dXSxbMjIsWzIwLFsxNixbMTUsXCJib1wiXSwwXSxcIiZcIl0sWzQ2LFszLFwiYm9cIixbMixbMTUsXCJib1wiXSxcInN1YnN0cmluZ1wiLFs3LDFdXV1dXSxbMjIsWzIxLFsxNixbMTUsXCJib1wiXSwwXSxcIj9cIl0sWzQ2LFszLFwiYm9cIixbMCxcIj9cIixbMTUsXCJib1wiXV1dXV0sWzIyLFsyMCxbMTUsXCJib1wiXSxcIj9cIl0sWzQ2LFszLFwiYm9cIixcIlwiXV1dLFs0MyxbMTUsXCJiblwiXSxcInNlYXJjaFwiLFsxNSxcImJvXCJdXSxbMzYsW1wiYmFcIixbMTUsXCJiblwiXSxbMTUsXCJibVwiXV1dXSxbNTAsXCJ6XCIsWzQ2LFwiYmtcIixcImJsXCJdLFsyMixbMjAsWzE1LFwiYmxcIl0sWzE3LFsxNSxcInNcIl0sXCJQQVRIXCJdXSxbNDYsWzMsXCJia1wiLFswLFsxNSxcInlcIl0sWzE1LFwiYmtcIl1dXV1dLFszNixbXCJnXCIsWzE1LFwiYmtcIl1dXV0sWzUwLFwiYmFcIixbNDYsXCJia1wiLFwiYmxcIl0sWzQxLFwiYm1cIl0sWzMsXCJibVwiLFwiXCJdLFsyMixbMjAsWzE1LFwiYmxcIl0sWzE3LFsxNSxcInNcIl0sXCJVUkxcIl1dLFs0NixbNTMsWzQxLFwiYm5cIl0sWzMsXCJiblwiLFwiXCJdLFsyMixbMzAsWzE3LFsxNSxcImJrXCJdLFwidXNlcm5hbWVcIl0sWzE3LFsxNSxcImJrXCJdLFwicGFzc3dvcmRcIl1dLFs0NixbMyxcImJuXCIsWzAsWzE1LFwiYm5cIl0sWzAsWzAsWzAsWzE3LFsxNSxcImJrXCJdLFwidXNlcm5hbWVcIl0sWzM5LFsxNyxbMTUsXCJia1wiXSxcInBhc3N3b3JkXCJdLFwiOlwiLFwiXCJdXSxbMTcsWzE1LFwiYmtcIl0sXCJwYXNzd29yZFwiXV0sXCJAXCJdXV1dXSxbMyxcImJtXCIsWzAsWzAsWzAsWzE3LFsxNSxcImJrXCJdLFwicHJvdG9jb2xcIl0sXCIvL1wiXSxbMTUsXCJiblwiXV0sWzE3LFsxNSxcImJrXCJdLFwiaG9zdFwiXV1dXV1dLFszNixbMCxbMCxbMCxbMTUsXCJibVwiXSxbMTcsWzE1LFwiYmtcIl0sXCJwYXRobmFtZVwiXV0sWzE3LFsxNSxcImJrXCJdLFwic2VhcmNoXCJdXSxbMTcsWzE1LFwiYmtcIl0sXCJoYXNoXCJdXV1dLFs1MCxcImJiXCIsWzQ2LFwiYmtcIixcImJsXCJdLFs0MSxcImJtXCJdLFszLFwiYm1cIixbMixbMTUsXCJia1wiXSxcInJlcGxhY2VcIixbNyxbMTUsXCJuXCJdLFsxNSxcInJcIl1dXV0sWzIyLFszMCxbMjAsWzE1LFwiYmxcIl0sWzE3LFsxNSxcInNcIl0sXCJVUkxcIl1dLFsyMCxbMTUsXCJibFwiXSxbMTcsWzE1LFwic1wiXSxcIlBBVEhcIl1dXSxbNDYsWzUzLFs1MixcImJuXCIsW1wielwiLFsxNSxcImJtXCJdLFsxNSxcImJsXCJdXV0sWzIyLFsyMCxbMTUsXCJiblwiXSxbNDRdXSxbNDYsWzM2LFsxNSxcImJtXCJdXV1dLFs1MixcImJvXCIsWzE3LFsxNSxcImJuXCJdLFwic2VhcmNoXCJdXSxbNTIsXCJicFwiLFsyLFsxNSxcImJvXCJdLFwicmVwbGFjZVwiLFs3LFsxNSxcIm9cIl0sWzE1LFwiclwiXV1dXSxbMjIsWzIwLFsxNSxcImJvXCJdLFsxNSxcImJwXCJdXSxbNDYsWzM2LFsxNSxcImJtXCJdXV1dLFs0MyxbMTUsXCJiblwiXSxcInNlYXJjaFwiLFsxNSxcImJwXCJdXSxbMyxcImJtXCIsW1wiYmFcIixbMTUsXCJiblwiXSxbMTUsXCJibFwiXV1dXV1dLFszNixbMTUsXCJibVwiXV1dLFs1MCxcImJjXCIsWzQ2LFwiYmtcIl0sWzIyLFsyMCxbMTUsXCJia1wiXSxbMTUsXCJxXCJdXSxbNDYsWzM2LFsxNyxbMTUsXCJzXCJdLFwiUEFUSFwiXV1dLFs0NixbMjIsWzIxLFsyLFsxNSxcInBcIl0sXCJpbmRleE9mXCIsWzcsWzE1LFwiYmtcIl1dXSxbMjcsMV1dLFs0NixbMzYsWzE3LFsxNSxcInNcIl0sXCJVUkxcIl1dXSxbNDYsWzM2LFsxNyxbMTUsXCJzXCJdLFwiVEVYVFwiXV1dXV1dXSxbNTAsXCJiZFwiLFs0NixcImJrXCIsXCJibFwiXSxbNDEsXCJibVwiXSxbMyxcImJtXCIsZmFsc2VdLFs1MixcImJuXCIsW1wiZlwiLFsxNSxcImJrXCJdXV0sWzM4LFsxNSxcImJuXCJdLFs0NixcInN0cmluZ1wiLFwiYXJyYXlcIixcIm9iamVjdFwiXSxbNDYsWzUsWzQ2LFs1MixcImJvXCIsW1wiYmJcIixbMTUsXCJia1wiXSxbMTUsXCJibFwiXV1dLFsyMixbMjEsWzE1LFwiYmtcIl0sWzE1LFwiYm9cIl1dLFs0NixbMzYsWzE1LFwiYm9cIl1dXV0sWzRdXV0sWzUsWzQ2LFs1MyxbNDEsXCJicFwiXSxbMyxcImJwXCIsMF0sWzYzLFs3LFwiYnBcIl0sWzIzLFsxNSxcImJwXCJdLFsxNyxbMTUsXCJia1wiXSxcImxlbmd0aFwiXV0sWzMzLFsxNSxcImJwXCJdLFszLFwiYnBcIixbMCxbMTUsXCJicFwiXSwxXV1dLFs0NixbNTMsWzUyLFwiYnFcIixbXCJiZFwiLFsxNixbMTUsXCJia1wiXSxbMTUsXCJicFwiXV0sWzE3LFsxNSxcInNcIl0sXCJURVhUXCJdXV0sWzIyLFsyMSxbMTUsXCJicVwiXSxbNDRdXSxbNDYsWzQzLFsxNSxcImJrXCJdLFsxNSxcImJwXCJdLFsxNSxcImJxXCJdXSxbMyxcImJtXCIsdHJ1ZV1dXV1dXV0sWzRdXV0sWzUsWzQ2LFs1NCxcImJwXCIsWzE1LFwiYmtcIl0sWzQ2LFs1MyxbNTIsXCJicVwiLFtcImJkXCIsWzE2LFsxNSxcImJrXCJdLFsxNSxcImJwXCJdXSxbMTcsWzE1LFwic1wiXSxcIlRFWFRcIl1dXSxbMjIsWzIxLFsxNSxcImJxXCJdLFs0NF1dLFs0NixbNDMsWzE1LFwiYmtcIl0sWzE1LFwiYnBcIl0sWzE1LFwiYnFcIl1dLFszLFwiYm1cIix0cnVlXV1dXV1dLFs0XV1dXV0sWzM2LFszOSxbMTUsXCJibVwiXSxbMTUsXCJia1wiXSxbNDRdXV1dLFs1MCxcImJqXCIsWzQ2LFwiYmtcIixcImJsXCJdLFs1MixcImJtXCIsWzMwLFsyLFsxNSxcImJrXCJdLFwiZ2V0TWV0YWRhdGFcIixbNyxbMTUsXCJiaVwiXV1dLFs3XV1dLFsyMixbMjAsWzIsWzE1LFwiYm1cIl0sXCJpbmRleE9mXCIsWzcsWzE1LFwiYmxcIl1dXSxbMjcsMV1dLFs0NixbMixbMTUsXCJibVwiXSxcInB1c2hcIixbNyxbMTUsXCJibFwiXV1dXV0sWzIsWzE1LFwiYmtcIl0sXCJzZXRNZXRhZGF0YVwiLFs3LFsxNSxcImJpXCJdLFsxNSxcImJtXCJdXV1dLFs1MixcImJcIixbXCJyZXF1aXJlXCIsXCJpbnRlcm5hbC5jcmVhdGVSZWdleFwiXV0sWzUyLFwiY1wiLFtcInJlcXVpcmVcIixcImRlY29kZVVyaUNvbXBvbmVudFwiXV0sWzUyLFwiZFwiLFtcInJlcXVpcmVcIixcImVuY29kZVVyaUNvbXBvbmVudFwiXV0sWzUyLFwiZVwiLFsxMyxbNDEsXCIkMFwiXSxbMyxcIiQwXCIsW1wicmVxdWlyZVwiLFwiaW50ZXJuYWwuZ2V0RmxhZ3NcIl1dLFtcIiQwXCJdXV0sWzUyLFwiZlwiLFtcInJlcXVpcmVcIixcImdldFR5cGVcIl1dLFs1MixcImdcIixbXCJyZXF1aXJlXCIsXCJwYXJzZVVybFwiXV0sWzUyLFwiaFwiLFtcInJlcXVpcmVcIixcImludGVybmFsLnJlZ2lzdGVyQ2NkQ2FsbGJhY2tcIl1dLFs1MixcImlcIixbMTcsWzE1LFwiYVwiXSxcImluc3RhbmNlRGVzdGluYXRpb25JZFwiXV0sWzUyLFwialwiLFsxNyxbMTUsXCJhXCJdLFwicmVkYWN0RW1haWxcIl1dLFs1MixcImtcIixbMTcsWzE1LFwiYVwiXSxcInJlZGFjdFF1ZXJ5UGFyYW1zXCJdXSxbNTIsXCJsXCIsWzM5LFsxNSxcImtcIl0sWzIsWzE1LFwia1wiXSxcInNwbGl0XCIsWzcsXCIsXCJdXSxbN11dXSxbNTIsXCJtXCIsXCJpc19zZ3RtX3ByZWhpdFwiXSxbMjIsWzEsWzI4LFsxNyxbMTUsXCJsXCJdLFwibGVuZ3RoXCJdXSxbMjgsWzE1LFwialwiXV1dLFs0NixbMixbMTUsXCJhXCJdLFwiZ3RtT25TdWNjZXNzXCIsWzddXSxbMzZdXV0sWzUyLFwiblwiLFtcImJcIixcIltBLVowLTkuXyUrLV0rQFtBLVowLTkuLV0rXFxcXC5bQS1aXXsyLH1cIixcImdpXCJdXSxbNTIsXCJvXCIsW1wiYlwiLFswLFwiKFtBLVowLTkuXy1dfCUyNXwlMkIpKyU0MFtBLVowLTkuLV1cIixcIitcXFxcLltBLVpdezIsfVwiXSxcImdpXCJdXSxbNTIsXCJwXCIsWzcsXCJwYWdlX2xvY2F0aW9uXCIsXCJwYWdlX3JlZmVycmVyXCIsXCJwYWdlX3BhdGhcIixcImxpbmtfdXJsXCIsXCJ2aWRlb191cmxcIixcImZvcm1fZGVzdGluYXRpb25cIl1dLFs1MixcInFcIixcInBhZ2VfcGF0aFwiXSxbNTIsXCJyXCIsXCIocmVkYWN0ZWQpXCJdLFs1MixcInNcIixbOCxcIlRFWFRcIiwwLFwiVVJMXCIsMSxcIlBBVEhcIiwyXV0sWzUyLFwidFwiLFs4XV0sWzUyLFwidVwiLFtcImJcIixcIihbXFxcXFxcXFxeJC58PyorKCl7fV18XFxcXFt8XFxcXFspXCIsXCJnXCJdXSxbNTIsXCJ5XCIsXCJodHRwOi8vLlwiXSxbNTIsXCJiZVwiLDE1XSxbNTIsXCJiZlwiLDE2XSxbNTIsXCJiZ1wiLDIzXSxbNTIsXCJiaFwiLDI0XSxbNTIsXCJiaVwiLFwiZXZlbnRfdXNhZ2VcIl0sW1wiaFwiLFsxNSxcImlcIl0sWzUxLFwiXCIsWzcsXCJia1wiXSxbMjIsWzE1LFwialwiXSxbNDYsWzUzLFs1MixcImJsXCIsWzIsWzE1LFwiYmtcIl0sXCJnZXRIaXRLZXlzXCIsWzddXV0sWzY1LFwiYm1cIixbMTUsXCJibFwiXSxbNDYsWzUzLFsyMixbMjAsWzE1LFwiYm1cIl0sXCJfc3N0X3BhcmFtZXRlcnNcIl0sWzQ2LFs2XV1dLFs1MixcImJuXCIsWzIsWzE1LFwiYmtcIl0sXCJnZXRIaXREYXRhXCIsWzcsWzE1LFwiYm1cIl1dXV0sWzIyLFsyOCxbMTUsXCJiblwiXV0sWzQ2LFs2XV1dLFs1MixcImJvXCIsW1wiYmNcIixbMTUsXCJibVwiXV1dLFs1MixcImJwXCIsW1wiYmRcIixbMTUsXCJiblwiXSxbMTUsXCJib1wiXV1dLFsyMixbMjEsWzE1LFwiYnBcIl0sWzQ0XV0sWzQ2LFsyLFsxNSxcImJrXCJdLFwic2V0SGl0RGF0YVwiLFs3LFsxNSxcImJtXCJdLFsxNSxcImJwXCJdXV0sW1wiYmpcIixbMTUsXCJia1wiXSxbMzksWzIsWzE1LFwiYmtcIl0sXCJnZXRNZXRhZGF0YVwiLFs3LFsxNSxcIm1cIl1dXSxbMTUsXCJiZ1wiXSxbMTUsXCJiZVwiXV1dXV1dXV1dXV0sWzIyLFsxNyxbMTUsXCJsXCJdLFwibGVuZ3RoXCJdLFs0NixbNjUsXCJibFwiLFsxNSxcInBcIl0sWzQ2LFs1MyxbNTIsXCJibVwiLFsyLFsxNSxcImJrXCJdLFwiZ2V0SGl0RGF0YVwiLFs3LFsxNSxcImJsXCJdXV1dLFsyMixbMjgsWzE1LFwiYm1cIl1dLFs0NixbNl1dXSxbNTIsXCJiblwiLFszOSxbMjAsWzE1LFwiYmxcIl0sWzE1LFwicVwiXV0sWzE3LFsxNSxcInNcIl0sXCJQQVRIXCJdLFsxNyxbMTUsXCJzXCJdLFwiVVJMXCJdXV0sWzUyLFwiYm9cIixbXCJ4XCIsWzE1LFwiYm1cIl0sWzE1LFwibFwiXSxbMTUsXCJiblwiXV1dLFsyMixbMjEsWzE1LFwiYm9cIl0sWzE1LFwiYm1cIl1dLFs0NixbMixbMTUsXCJia1wiXSxcInNldEhpdERhdGFcIixbNyxbMTUsXCJibFwiXSxbMTUsXCJib1wiXV1dLFtcImJqXCIsWzE1LFwiYmtcIl0sWzM5LFsyLFsxNSxcImJrXCJdLFwiZ2V0TWV0YWRhdGFcIixbNyxbMTUsXCJtXCJdXV0sWzE1LFwiYmhcIl0sWzE1LFwiYmZcIl1dXV1dXV1dXV1dXSxbMixbMTUsXCJhXCJdLFwiZ3RtT25TdWNjZXNzXCIsWzddXV1cbiAsWzUwLFwiX19jY2RfY29udmVyc2lvbl9tYXJraW5nXCIsWzQ2LFwiYVwiXSxbMjIsWzMwLFsyOCxbMTcsWzE1LFwiYVwiXSxcImNvbnZlcnNpb25SdWxlc1wiXV0sWzIwLFsxNyxbMTcsWzE1LFwiYVwiXSxcImNvbnZlcnNpb25SdWxlc1wiXSxcImxlbmd0aFwiXSwwXV0sWzQ2LFsyLFsxNSxcImFcIl0sXCJndG1PblN1Y2Nlc3NcIixbN11dLFszNl1dXSxbNTIsXCJiXCIsW1wicmVxdWlyZVwiLFwiaW50ZXJuYWwuY29weVByZUhpdFwiXV0sWzUyLFwiY1wiLFtcInJlcXVpcmVcIixcImludGVybmFsLmV2YWx1YXRlQm9vbGVhbkV4cHJlc3Npb25cIl1dLFs1MixcImRcIixbXCJyZXF1aXJlXCIsXCJpbnRlcm5hbC5yZWdpc3RlckNjZENhbGxiYWNrXCJdXSxbNTIsXCJlXCIsXCJpc19jb252ZXJzaW9uXCJdLFs1MixcImZcIixcImlzX2ZpcnN0X3Zpc2l0XCJdLFs1MixcImdcIixcImlzX2ZpcnN0X3Zpc2l0X2NvbnZlcnNpb25cIl0sWzUyLFwiaFwiLFwiaXNfc2Vzc2lvbl9zdGFydFwiXSxbNTIsXCJpXCIsXCJpc19zZXNzaW9uX3N0YXJ0X2NvbnZlcnNpb25cIl0sWzUyLFwialwiLFwiZmlyc3RfdmlzaXRcIl0sWzUyLFwia1wiLFwic2Vzc2lvbl9zdGFydFwiXSxbNDEsXCJsXCJdLFs0MSxcIm1cIl0sW1wiZFwiLFsxNyxbMTUsXCJhXCJdLFwiaW5zdGFuY2VEZXN0aW5hdGlvbklkXCJdLFs1MSxcIlwiLFs3LFwiblwiXSxbNTIsXCJvXCIsWzgsXCJwcmVIaXRcIixbMTUsXCJuXCJdXV0sWzY1LFwicFwiLFsxNyxbMTUsXCJhXCJdLFwiY29udmVyc2lvblJ1bGVzXCJdLFs0NixbMjIsW1wiY1wiLFsxNyxbMTUsXCJwXCJdLFwibWF0Y2hpbmdSdWxlc1wiXSxbMTUsXCJvXCJdXSxbNDYsWzIsWzE1LFwiblwiXSxcInNldE1ldGFkYXRhXCIsWzcsWzE1LFwiZVwiXSx0cnVlXV0sWzRdXV1dXSxbMjIsWzIsWzE1LFwiblwiXSxcImdldE1ldGFkYXRhXCIsWzcsWzE1LFwiZlwiXV1dLFs0NixbMjIsWzI4LFsxNSxcImxcIl1dLFs0NixbNTMsWzUyLFwicFwiLFtcImJcIixbMTUsXCJuXCJdLFs4LFwib21pdEhpdERhdGFcIix0cnVlLFwib21pdE1ldGFkYXRhXCIsdHJ1ZV1dXSxbMixbMTUsXCJwXCJdLFwic2V0RXZlbnROYW1lXCIsWzcsWzE1LFwialwiXV1dLFszLFwibFwiLFs4LFwicHJlSGl0XCIsWzE1LFwicFwiXV1dXV1dLFs2NSxcInBcIixbMTcsWzE1LFwiYVwiXSxcImNvbnZlcnNpb25SdWxlc1wiXSxbNDYsWzIyLFtcImNcIixbMTcsWzE1LFwicFwiXSxcIm1hdGNoaW5nUnVsZXNcIl0sWzE1LFwibFwiXV0sWzQ2LFsyLFsxNSxcIm5cIl0sXCJzZXRNZXRhZGF0YVwiLFs3LFsxNSxcImdcIl0sdHJ1ZV1dLFs0XV1dXV1dXSxbMjIsWzIsWzE1LFwiblwiXSxcImdldE1ldGFkYXRhXCIsWzcsWzE1LFwiaFwiXV1dLFs0NixbMjIsWzI4LFsxNSxcIm1cIl1dLFs0NixbNTMsWzUyLFwicFwiLFtcImJcIixbMTUsXCJuXCJdLFs4LFwib21pdEhpdERhdGFcIix0cnVlLFwib21pdE1ldGFkYXRhXCIsdHJ1ZV1dXSxbMixbMTUsXCJwXCJdLFwic2V0RXZlbnROYW1lXCIsWzcsWzE1LFwia1wiXV1dLFszLFwibVwiLFs4LFwicHJlSGl0XCIsWzE1LFwicFwiXV1dXV1dLFs2NSxcInBcIixbMTcsWzE1LFwiYVwiXSxcImNvbnZlcnNpb25SdWxlc1wiXSxbNDYsWzIyLFtcImNcIixbMTcsWzE1LFwicFwiXSxcIm1hdGNoaW5nUnVsZXNcIl0sWzE1LFwibVwiXV0sWzQ2LFsyLFsxNSxcIm5cIl0sXCJzZXRNZXRhZGF0YVwiLFs3LFsxNSxcImlcIl0sdHJ1ZV1dLFs0XV1dXV1dXV1dLFsyLFsxNSxcImFcIl0sXCJndG1PblN1Y2Nlc3NcIixbN11dLFszNl1dXG4gLFs1MCxcIl9fY2NkX2VtX3NpdGVfc2VhcmNoXCIsWzQ2LFwiYVwiXSxbNTIsXCJiXCIsW1wicmVxdWlyZVwiLFwiZ2V0UXVlcnlQYXJhbWV0ZXJzXCJdXSxbNTIsXCJjXCIsW1wicmVxdWlyZVwiLFwiaW50ZXJuYWwuc2VuZEd0YWdFdmVudFwiXV0sWzUyLFwiZFwiLFtcInJlcXVpcmVcIixcImdldENvbnRhaW5lclZlcnNpb25cIl1dLFs1MixcImVcIixbMTUsXCJfX21vZHVsZV9jY2RFbVNpdGVTZWFyY2hBY3Rpdml0eVwiXV0sWzUyLFwiZlwiLFsyLFsxNSxcImVcIl0sXCJnZXRTZWFyY2hUZXJtXCIsWzcsWzE3LFsxNSxcImFcIl0sXCJzZWFyY2hRdWVyeVBhcmFtc1wiXSxbMTUsXCJiXCJdXV1dLFs1MixcImdcIixbMzAsWzE3LFsxNSxcImFcIl0sXCJpbnN0YW5jZURlc3RpbmF0aW9uSWRcIl0sWzE3LFtcImRcIl0sXCJjb250YWluZXJJZFwiXV1dLFs1MixcImhcIixbOCxcImRlZmVycmFibGVcIix0cnVlLFwiZXZlbnRJZFwiLFsxNyxbMTUsXCJhXCJdLFwiZ3RtRXZlbnRJZFwiXSxcImV2ZW50TWV0YWRhdGFcIixbOCxcImVtX2V2ZW50XCIsdHJ1ZV1dXSxbMjIsWzE1LFwiZlwiXSxbNDYsWzUzLFs1MixcImlcIixbMzksWzI4LFsyOCxbMTcsWzE1LFwiYVwiXSxcImluY2x1ZGVQYXJhbXNcIl1dXSxbMixbMTUsXCJlXCJdLFwiYnVpbGRFdmVudFBhcmFtc1wiLFs3LFsxNSxcImZcIl0sWzE3LFsxNSxcImFcIl0sXCJhZGRpdGlvbmFsUXVlcnlQYXJhbXNcIl0sWzE1LFwiYlwiXV1dLFs4XV1dLFtcImNcIixbMTUsXCJnXCJdLFwidmlld19zZWFyY2hfcmVzdWx0c1wiLFsxNSxcImlcIl0sWzE1LFwiaFwiXV1dXV0sWzIsWzE1LFwiYVwiXSxcImd0bU9uU3VjY2Vzc1wiLFs3XV1dXG4gLFs1MCxcIl9fY2NkX2dhX2Fkc19saW5rXCIsWzQ2LFwiYVwiXSxbNTIsXCJiXCIsW1wicmVxdWlyZVwiLFwiaW50ZXJuYWwuQ3Jvc3NDb250YWluZXJTY2hlbWFcIl1dLFs1MixcImNcIixbXCJyZXF1aXJlXCIsXCJpbnRlcm5hbC5HdGFnU2NoZW1hXCJdXSxbNTIsXCJkXCIsW1wicmVxdWlyZVwiLFwiaW50ZXJuYWwuY29weUZyb21Dcm9zc0NvbnRhaW5lckRhdGFcIl1dLFs1MixcImVcIixbXCJyZXF1aXJlXCIsXCJpbnRlcm5hbC5yZWdpc3RlckNjZENhbGxiYWNrXCJdXSxbNTIsXCJmXCIsW1wicmVxdWlyZVwiLFwiaW50ZXJuYWwuc2V0SW5Dcm9zc0NvbnRhaW5lckRhdGFcIl1dLFs1MixcImdcIixbXCJyZXF1aXJlXCIsXCJpbnRlcm5hbC5zZXRQcm9kdWN0U2V0dGluZ3NQYXJhbWV0ZXJcIl1dLFs1MixcImhcIixcImV2ZW50X3VzYWdlXCJdLFs1MixcImlcIiwyN10sW1wiZ1wiLFsxNyxbMTUsXCJhXCJdLFwiaW5zdGFuY2VEZXN0aW5hdGlvbklkXCJdLFwiZ2E0X2Fkc19saW5rZWRcIix0cnVlXSxbXCJlXCIsWzE3LFsxNSxcImFcIl0sXCJpbnN0YW5jZURlc3RpbmF0aW9uSWRcIl0sWzUxLFwiXCIsWzcsXCJqXCJdLFs0MSxcImtcIl0sWzMsXCJrXCIsWzIsWzE1LFwialwiXSxcImdldEhpdERhdGFcIixbNyxbMTcsWzE3LFsxNSxcImNcIl0sXCJFdmVudFBhcmFtZXRlcnNcIl0sXCJVU0VSX0lEXCJdXV1dLFsyMixbMjgsWzE1LFwia1wiXV0sWzQ2LFs1MyxbNTIsXCJuXCIsWzMwLFsyLFsxNSxcImpcIl0sXCJnZXRIaXREYXRhXCIsWzcsWzE3LFsxNyxbMTUsXCJjXCJdLFwiRXZlbnRQYXJhbWV0ZXJzXCJdLFwiVVNFUl9QUk9QRVJUSUVTXCJdXV0sWzhdXV0sWzMsXCJrXCIsWzE2LFsxNSxcIm5cIl0sWzE3LFsxNyxbMTUsXCJjXCJdLFwiRXZlbnRQYXJhbWV0ZXJzXCJdLFwiVVNFUl9JRFwiXV1dXV1dLFsyMixbMjgsWzE1LFwia1wiXV0sWzQ2LFszNl1dXSxbNTIsXCJsXCIsW1wiZFwiLFsxNyxbMTUsXCJiXCJdLFwiU0hBUkVEX1VTRVJfSURcIl1dXSxbMjIsWzE1LFwibFwiXSxbNDYsWzM2XV1dLFtcImZcIixbMTcsWzE1LFwiYlwiXSxcIlNIQVJFRF9VU0VSX0lEXCJdLFsxNSxcImtcIl1dLFtcImZcIixbMTcsWzE1LFwiYlwiXSxcIlNIQVJFRF9VU0VSX0lEX1NPVVJDRVwiXSxbMTcsWzE1LFwiYVwiXSxcImluc3RhbmNlRGVzdGluYXRpb25JZFwiXV0sWzUyLFwibVwiLFtcImRcIixbMTcsWzE1LFwiYlwiXSxcIlNIQVJFRF9VU0VSX0lEX1JFUVVFU1RFRFwiXV1dLFsyMixbMTUsXCJtXCJdLFs0NixbNTMsWzUyLFwiblwiLFszMCxbMixbMTUsXCJqXCJdLFwiZ2V0TWV0YWRhdGFcIixbNyxbMTUsXCJoXCJdXV0sWzddXV0sWzIyLFsyMyxbMixbMTUsXCJuXCJdLFwiaW5kZXhPZlwiLFs3LFsxNSxcImlcIl1dXSwwXSxbNDYsWzIsWzE1LFwiblwiXSxcInB1c2hcIixbNyxbMTUsXCJpXCJdXV0sWzIsWzE1LFwialwiXSxcInNldE1ldGFkYXRhXCIsWzcsWzE1LFwiaFwiXSxbMTUsXCJuXCJdXV1dXV1dXV1dLFsyLFsxNSxcImFcIl0sXCJndG1PblN1Y2Nlc3NcIixbN11dXVxuICxbNTAsXCJfX2NjZF9nYV9maXJzdFwiLFs0NixcImFcIl0sWzIsWzE1LFwiYVwiXSxcImd0bU9uU3VjY2Vzc1wiLFs3XV1dXG4gLFs1MCxcIl9fY2NkX2dhX2xhc3RcIixbNDYsXCJhXCJdLFsyLFsxNSxcImFcIl0sXCJndG1PblN1Y2Nlc3NcIixbN11dXVxuICxbNTAsXCJfX2NjZF9nYV9yZWdzY29wZVwiLFs0NixcImFcIl0sWzUyLFwiYlwiLFsxNSxcIl9fbW9kdWxlX2NjZEdhUmVnaW9uU2NvcGVkU2V0dGluZ3NcIl1dLFs1MixcImNcIixbMixbMTUsXCJiXCJdLFwiZXh0cmFjdFJlZGFjdGVkTG9jYXRpb25zXCIsWzcsWzE1LFwiYVwiXV1dXSxbMixbMTUsXCJiXCJdLFwiYXBwbHlSZWdpb25TY29wZWRTZXR0aW5nc1wiLFs3LFsxNSxcImFcIl0sWzE1LFwiY1wiXV1dLFsyLFsxNSxcImFcIl0sXCJndG1PblN1Y2Nlc3NcIixbN11dXVxuICxbNTAsXCJfX2VcIixbNDYsXCJhXCJdLFszNixbMTMsWzQxLFwiJDBcIl0sWzMsXCIkMFwiLFtcInJlcXVpcmVcIixcImludGVybmFsLmdldEV2ZW50RGF0YVwiXV0sW1wiJDBcIixcImV2ZW50XCJdXV1dXG4gLFs1MCxcIl9fb2d0XzFwX2RhdGFfdjJcIixbNDYsXCJhXCJdLFs1MCxcImpcIixbNDYsXCJtXCIsXCJuXCIsXCJvXCJdLFsyMixbMjAsWzE2LFsxNSxcIm5cIl0sXCJ0eXBlXCJdLFsxNSxcIm9cIl1dLFs0NixbMjIsWzI4LFsxNSxcIm1cIl1dLFs0NixbMyxcIm1cIixbOF1dXV0sWzIyLFsyOCxbMTYsWzE1LFwibVwiXSxbMTUsXCJvXCJdXV0sWzQ2LFs0MyxbMTUsXCJtXCJdLFsxNSxcIm9cIl0sWzE2LFsxNSxcIm5cIl0sXCJ1c2VyRGF0YVwiXV1dXV1dLFszNixbMTUsXCJtXCJdXV0sWzUwLFwia1wiLFs0NixcIm1cIixcIm5cIl0sWzUyLFwib1wiLFsxNixbMTUsXCJhXCJdLFsxNSxcIm1cIl1dXSxbNDEsXCJwXCJdLFsyMixbMjAsWzE1LFwib1wiXSxcIkNTU19TRUxFQ1RPUlwiXSxbNDYsWzMsXCJwXCIsXCJjc3Nfc2VsZWN0b3JcIl1dLFs0NixbMjIsWzIwLFsxNSxcIm9cIl0sXCJKU19WQVJcIl0sWzQ2LFszLFwicFwiLFwianNfdmFyaWFibGVcIl1dXV1dLFszNixbOCxcInNlbGVjdG9yX3R5cGVcIixbMTUsXCJwXCJdLFwidmFsdWVcIixbMTYsWzE1LFwiYVwiXSxbMTUsXCJuXCJdXV1dXSxbNTAsXCJsXCIsWzQ2LFwibVwiLFwiblwiLFwib1wiLFwicFwiXSxbMjIsWzI4LFsxNixbMTUsXCJhXCJdLFsxNSxcInBcIl1dXSxbNDYsWzM2XV1dLFs0MyxbMTUsXCJtXCJdLFsxNSxcIm5cIl0sW1wia1wiLFsxNSxcIm9cIl0sWzE1LFwicFwiXV1dXSxbMjIsWzI4LFsxNyxbMTUsXCJhXCJdLFwiaXNFbmFibGVkXCJdXSxbNDYsWzIsWzE1LFwiYVwiXSxcImd0bU9uU3VjY2Vzc1wiLFs3XV0sWzM2XV1dLFs1MixcImJcIixbMTMsWzQxLFwiJDBcIl0sWzMsXCIkMFwiLFtcInJlcXVpcmVcIixcImludGVybmFsLmdldEZsYWdzXCJdXSxbXCIkMFwiXV1dLFs1MixcImNcIixbXCJyZXF1aXJlXCIsXCJpbnRlcm5hbC5nZXREZXN0aW5hdGlvbklkc1wiXV0sWzUyLFwiZFwiLFtcInJlcXVpcmVcIixcImludGVybmFsLmdldFByb2R1Y3RTZXR0aW5nc1BhcmFtZXRlclwiXV0sWzUyLFwiZVwiLFtcInJlcXVpcmVcIixcImludGVybmFsLmRldGVjdFVzZXJQcm92aWRlZERhdGFcIl1dLFs1MixcImZcIixbXCJyZXF1aXJlXCIsXCJpbnRlcm5hbC5zZXRSZW1vdGVDb25maWdQYXJhbWV0ZXJcIl1dLFs1MixcImdcIixbXCJyZXF1aXJlXCIsXCJpbnRlcm5hbC5yZWdpc3RlckNjZENhbGxiYWNrXCJdXSxbNTIsXCJoXCIsWzMwLFtcImNcIl0sWzddXV0sWzUyLFwiaVwiLFs4LFwiZW5hYmxlX2NvZGVcIix0cnVlXV0sWzIyLFsxNyxbMTUsXCJhXCJdLFwiaXNBdXRvRW5hYmxlZFwiXSxbNDYsWzUzLFs1MixcIm1cIixbN11dLFsyMixbMSxbMTcsWzE1LFwiYVwiXSxcImF1dG9Db2xsZWN0RXhjbHVzaW9uU2VsZWN0b3JzXCJdLFsxNyxbMTcsWzE1LFwiYVwiXSxcImF1dG9Db2xsZWN0RXhjbHVzaW9uU2VsZWN0b3JzXCJdLFwibGVuZ3RoXCJdXSxbNDYsWzUzLFs0MSxcIm9cIl0sWzMsXCJvXCIsMF0sWzYzLFs3LFwib1wiXSxbMjMsWzE1LFwib1wiXSxbMTcsWzE3LFsxNSxcImFcIl0sXCJhdXRvQ29sbGVjdEV4Y2x1c2lvblNlbGVjdG9yc1wiXSxcImxlbmd0aFwiXV0sWzMzLFsxNSxcIm9cIl0sWzMsXCJvXCIsWzAsWzE1LFwib1wiXSwxXV1dLFs0NixbNTMsWzUyLFwicFwiLFsxNyxbMTYsWzE3LFsxNSxcImFcIl0sXCJhdXRvQ29sbGVjdEV4Y2x1c2lvblNlbGVjdG9yc1wiXSxbMTUsXCJvXCJdXSxcImV4Y2x1c2lvblNlbGVjdG9yXCJdXSxbMjIsWzE1LFwicFwiXSxbNDYsWzIsWzE1LFwibVwiXSxcInB1c2hcIixbNyxbMTUsXCJwXCJdXV1dXV1dXV1dXSxbNTIsXCJuXCIsWzM5LFsxNyxbMTUsXCJhXCJdLFwiaXNBdXRvQ29sbGVjdFBpaUVuYWJsZWRGbGFnXCJdLFsxNyxbMTUsXCJhXCJdLFwiYXV0b0VtYWlsRW5hYmxlZFwiXSx0cnVlXV0sWzQzLFsxNSxcImlcIl0sXCJhdXRvX2RldGVjdFwiLFs4LFwiZW1haWxcIixbMTUsXCJuXCJdLFwicGhvbmVcIixbMTcsWzE1LFwiYVwiXSxcImF1dG9QaG9uZUVuYWJsZWRcIl0sXCJhZGRyZXNzXCIsWzE3LFsxNSxcImFcIl0sXCJhdXRvQWRkcmVzc0VuYWJsZWRcIl0sXCJleGNsdWRlX2VsZW1lbnRfc2VsZWN0b3JzXCIsWzE1LFwibVwiXV1dXV1dLFsyMixbMTcsWzE1LFwiYVwiXSxcImlzTWFudWFsRW5hYmxlZFwiXSxbNDYsWzUzLFs1MixcIm1cIixbOF1dLFsyMixbMTcsWzE1LFwiYVwiXSxcIm1hbnVhbEVtYWlsRW5hYmxlZFwiXSxbNDYsW1wibFwiLFsxNSxcIm1cIl0sXCJlbWFpbFwiLFwiZW1haWxUeXBlXCIsXCJlbWFpbFZhbHVlXCJdXV0sWzIyLFsxNyxbMTUsXCJhXCJdLFwibWFudWFsUGhvbmVFbmFibGVkXCJdLFs0NixbXCJsXCIsWzE1LFwibVwiXSxcInBob25lXCIsXCJwaG9uZVR5cGVcIixcInBob25lVmFsdWVcIl1dXSxbMjIsWzE3LFsxNSxcImFcIl0sXCJtYW51YWxBZGRyZXNzRW5hYmxlZFwiXSxbNDYsWzUzLFs1MixcIm5cIixbOF1dLFtcImxcIixbMTUsXCJuXCJdLFwiZmlyc3RfbmFtZVwiLFwiZmlyc3ROYW1lVHlwZVwiLFwiZmlyc3ROYW1lVmFsdWVcIl0sW1wibFwiLFsxNSxcIm5cIl0sXCJsYXN0X25hbWVcIixcImxhc3ROYW1lVHlwZVwiLFwibGFzdE5hbWVWYWx1ZVwiXSxbXCJsXCIsWzE1LFwiblwiXSxcInN0cmVldFwiLFwic3RyZWV0VHlwZVwiLFwic3RyZWV0VmFsdWVcIl0sW1wibFwiLFsxNSxcIm5cIl0sXCJjaXR5XCIsXCJjaXR5VHlwZVwiLFwiY2l0eVZhbHVlXCJdLFtcImxcIixbMTUsXCJuXCJdLFwicmVnaW9uXCIsXCJyZWdpb25UeXBlXCIsXCJyZWdpb25WYWx1ZVwiXSxbXCJsXCIsWzE1LFwiblwiXSxcImNvdW50cnlcIixcImNvdW50cnlUeXBlXCIsXCJjb3VudHJ5VmFsdWVcIl0sW1wibFwiLFsxNSxcIm5cIl0sXCJwb3N0YWxfY29kZVwiLFwicG9zdGFsQ29kZVR5cGVcIixcInBvc3RhbENvZGVWYWx1ZVwiXSxbNDMsWzE1LFwibVwiXSxcIm5hbWVfYW5kX2FkZHJlc3NcIixbNyxbMTUsXCJuXCJdXV1dXV0sWzQzLFsxNSxcImlcIl0sXCJzZWxlY3RvcnNcIixbMTUsXCJtXCJdXV1dXSxbNjUsXCJtXCIsWzE1LFwiaFwiXSxbNDYsWzUzLFs0MSxcIm5cIl0sWzMsXCJuXCIsWzE1LFwiaVwiXV0sWzIyLFsxLFsyMCxbMixbMTUsXCJtXCJdLFwiaW5kZXhPZlwiLFs3LFwiRy1cIl1dLDBdLFsyOCxbMTYsWzE1LFwiYlwiXSxcImVuYWJsZUV1aWRBdXRvTW9kZVwiXV1dLFs0NixbNTMsWzUyLFwicVwiLFs4LFwiZW5hYmxlX2NvZGVcIix0cnVlLFwic2VsZWN0b3JzXCIsWzE2LFsxNSxcImlcIl0sXCJzZWxlY3RvcnNcIl1dXSxbMyxcIm5cIixbMTUsXCJxXCJdXV1dXSxbXCJmXCIsWzE1LFwibVwiXSxcInVzZXJfZGF0YV9zZXR0aW5nc1wiLFsxNSxcIm5cIl1dLFs1MixcIm9cIixbMTYsWzE1LFwiblwiXSxcImF1dG9fZGV0ZWN0XCJdXSxbMjIsWzI4LFsxNSxcIm9cIl1dLFs0NixbNl1dXSxbNTIsXCJwXCIsWzUxLFwiXCIsWzcsXCJxXCJdLFs1MixcInJcIixbMixbMTUsXCJxXCJdLFwiZ2V0TWV0YWRhdGFcIixbNyxcInVzZXJfZGF0YV9mcm9tX2F1dG9tYXRpY1wiXV1dLFsyMixbMTUsXCJyXCJdLFs0NixbMzYsWzE1LFwiclwiXV1dXSxbNTIsXCJzXCIsW1wiZVwiLFs4LFwiZXhjbHVkZUVsZW1lbnRTZWxlY3RvcnNcIixbMTYsWzE1LFwib1wiXSxcImV4Y2x1ZGVfZWxlbWVudF9zZWxlY3RvcnNcIl0sXCJmaWVsZEZpbHRlcnNcIixbOCxcImVtYWlsXCIsWzE2LFsxNSxcIm9cIl0sXCJlbWFpbFwiXSxcInBob25lXCIsWzE2LFsxNSxcIm9cIl0sXCJwaG9uZVwiXSxcImFkZHJlc3NcIixbMTYsWzE1LFwib1wiXSxcImFkZHJlc3NcIl1dXV1dLFs1MixcInRcIixbMSxbMTUsXCJzXCJdLFsxNixbMTUsXCJzXCJdLFwiZWxlbWVudHNcIl1dXSxbNTIsXCJ1XCIsWzhdXSxbMjIsWzEsWzE1LFwidFwiXSxbMTgsWzE3LFsxNSxcInRcIl0sXCJsZW5ndGhcIl0sMF1dLFs0NixbNTMsWzQxLFwidlwiXSxbNTMsWzQxLFwid1wiXSxbMyxcIndcIiwwXSxbNjMsWzcsXCJ3XCJdLFsyMyxbMTUsXCJ3XCJdLFsxNyxbMTUsXCJ0XCJdLFwibGVuZ3RoXCJdXSxbMzMsWzE1LFwid1wiXSxbMyxcIndcIixbMCxbMTUsXCJ3XCJdLDFdXV0sWzQ2LFs1MyxbNTIsXCJ4XCIsWzE2LFsxNSxcInRcIl0sWzE1LFwid1wiXV1dLFtcImpcIixbMTUsXCJ1XCJdLFsxNSxcInhcIl0sXCJlbWFpbFwiXSxbMjIsWzE2LFsxNSxcImJcIl0sXCJlbmFibGVBdXRvUGlpT25QaG9uZUFuZEFkZHJlc3NcIl0sWzQ2LFtcImpcIixbMTUsXCJ1XCJdLFsxNSxcInhcIl0sXCJwaG9uZV9udW1iZXJcIl0sWzMsXCJ2XCIsW1wialwiLFsxNSxcInZcIl0sWzE1LFwieFwiXSxcImZpcnN0X25hbWVcIl1dLFszLFwidlwiLFtcImpcIixbMTUsXCJ2XCJdLFsxNSxcInhcIl0sXCJsYXN0X25hbWVcIl1dLFszLFwidlwiLFtcImpcIixbMTUsXCJ2XCJdLFsxNSxcInhcIl0sXCJjb3VudHJ5XCJdXSxbMyxcInZcIixbXCJqXCIsWzE1LFwidlwiXSxbMTUsXCJ4XCJdLFwicG9zdGFsX2NvZGVcIl1dXV1dXV1dLFsyMixbMSxbMTUsXCJ2XCJdLFsyOCxbMTYsWzE1LFwidVwiXSxcImFkZHJlc3NcIl1dXSxbNDYsWzQzLFsxNSxcInVcIl0sXCJhZGRyZXNzXCIsWzE1LFwidlwiXV1dXV1dXSxbMixbMTUsXCJxXCJdLFwic2V0TWV0YWRhdGFcIixbNyxcInVzZXJfZGF0YV9mcm9tX2F1dG9tYXRpY1wiLFsxNSxcInVcIl1dXSxbMzYsWzE1LFwidVwiXV1dXSxbXCJnXCIsWzE1LFwibVwiXSxbNTEsXCJcIixbNyxcInFcIl0sWzIsWzE1LFwicVwiXSxcInNldE1ldGFkYXRhXCIsWzcsXCJ1c2VyX2RhdGFfZnJvbV9hdXRvbWF0aWNfZ2V0dGVyXCIsWzE1LFwicFwiXV1dXV1dXV0sWzIsWzE1LFwiYVwiXSxcImd0bU9uU3VjY2Vzc1wiLFs3XV1dXG4gLFs1MCxcIl9fb2d0X2V2ZW50X2NyZWF0ZVwiLFs0NixcImFcIl0sWzUwLFwiclwiLFs0NixcInNcIixcInRcIl0sWzIyLFsyOCxbMixbMTUsXCJjXCJdLFwicHJlSGl0TWF0Y2hlc1J1bGVcIixbNyxbMTUsXCJzXCJdLFsxNixbMTUsXCJ0XCJdLFsxNSxcIm5cIl1dLFszMCxbMTYsWzE1LFwidFwiXSxbMTUsXCJvXCJdXSxbN11dXV1dLFs0NixbMzYsZmFsc2VdXV0sWzUyLFwidVwiLFsxNixbMTUsXCJ0XCJdLFsxNSxcInBcIl1dXSxbMjIsWzIsWzE1LFwiY1wiXSxcImlzRXZlbnROYW1lRmFsc3lPclJlc2VydmVkXCIsWzcsWzE1LFwidVwiXV1dLFs0NixbMzZdXV0sWzUyLFwidlwiLFsyOCxbMTYsWzE1LFwidFwiXSxbMTUsXCJxXCJdXV1dLFs1MixcIndcIixbMzAsWzIsWzE1LFwic1wiXSxcImdldE1ldGFkYXRhXCIsWzcsWzE1LFwialwiXV1dLFs3XV1dLFsyMixbMjAsWzIsWzE1LFwid1wiXSxcImluZGV4T2ZcIixbNyxbMTUsXCJrXCJdXV0sWzI3LDFdXSxbNDYsWzIsWzE1LFwid1wiXSxcInB1c2hcIixbNyxbMTUsXCJrXCJdXV1dXSxbMixbMTUsXCJzXCJdLFwic2V0TWV0YWRhdGFcIixbNyxbMTUsXCJqXCJdLFsxNSxcIndcIl1dXSxbNTIsXCJ4XCIsW1wiYlwiLFsxNSxcInNcIl0sWzgsXCJvbWl0SGl0RGF0YVwiLFsxNSxcInZcIl0sXCJvbWl0RXZlbnRDb250ZXh0XCIsWzE1LFwidlwiXSxcIm9taXRNZXRhZGF0YVwiLHRydWVdXV0sWzIsWzE1LFwiY1wiXSxcImFwcGx5UGFyYW1PcGVyYXRpb25zXCIsWzcsWzE1LFwieFwiXSxbMTUsXCJ0XCJdXV0sWzIsWzE1LFwieFwiXSxcInNldEV2ZW50TmFtZVwiLFs3LFsxNSxcInVcIl1dXSxbMixbMTUsXCJ4XCJdLFwic2V0TWV0YWRhdGFcIixbNyxbMTUsXCJtXCJdLHRydWVdXSxbMixbMTUsXCJ4XCJdLFwic2V0TWV0YWRhdGFcIixbNyxbMTUsXCJqXCJdLFs3LFsxNSxcImxcIl1dXV0sW1wiZFwiLFsxNSxcInhcIl1dXSxbNTIsXCJiXCIsW1wicmVxdWlyZVwiLFwiaW50ZXJuYWwuY29weVByZUhpdFwiXV0sWzUyLFwiY1wiLFsxNSxcIl9fbW9kdWxlX2V2ZW50RWRpdGluZ0FuZFN5bnRoZXNpc1wiXV0sWzUyLFwiZFwiLFtcInJlcXVpcmVcIixcImludGVybmFsLnByb2Nlc3NBc05ld0V2ZW50XCJdXSxbNTIsXCJlXCIsW1wicmVxdWlyZVwiLFwiaW50ZXJuYWwucmVnaXN0ZXJDY2RDYWxsYmFja1wiXV0sWzUyLFwiZlwiLFtcInJlcXVpcmVcIixcInRlbXBsYXRlU3RvcmFnZVwiXV0sWzUyLFwiZ1wiLFsxNyxbMTUsXCJhXCJdLFwiaW5zdGFuY2VEZXN0aW5hdGlvbklkXCJdXSxbNDEsXCJoXCJdLFszLFwiaFwiLFsyLFsxNSxcImZcIl0sXCJnZXRJdGVtXCIsWzcsWzE1LFwiZ1wiXV1dXSxbNDEsXCJpXCJdLFszLFwiaVwiLFsyOCxbMjgsWzE1LFwiaFwiXV1dXSxbMjIsWzE1LFwiaVwiXSxbNDYsWzIsWzE1LFwiaFwiXSxcInB1c2hcIixbNyxbMTcsWzE1LFwiYVwiXSxcInByZWNvbXBpbGVkUnVsZVwiXV1dLFsyLFsxNSxcImFcIl0sXCJndG1PblN1Y2Nlc3NcIixbN11dLFszNl1dXSxbMixbMTUsXCJmXCJdLFwic2V0SXRlbVwiLFs3LFsxNSxcImdcIl0sWzcsWzE3LFsxNSxcImFcIl0sXCJwcmVjb21waWxlZFJ1bGVcIl1dXV0sWzUyLFwialwiLFwiZXZlbnRfdXNhZ2VcIl0sWzUyLFwia1wiLDFdLFs1MixcImxcIiwxMV0sWzUyLFwibVwiLFwiaXNfc3luXCJdLFs1MixcIm5cIixcImV2ZW50X25hbWVfcHJlZGljYXRlXCJdLFs1MixcIm9cIixcImNvbmRpdGlvbnNcIl0sWzUyLFwicFwiLFwibmV3X2V2ZW50X25hbWVcIl0sWzUyLFwicVwiLFwibWVyZ2Vfc291cmNlX2V2ZW50X3BhcmFtc1wiXSxbXCJlXCIsWzE1LFwiZ1wiXSxbNTEsXCJcIixbNyxcInNcIl0sWzIyLFsyLFsxNSxcInNcIl0sXCJnZXRNZXRhZGF0YVwiLFs3LFsxNSxcIm1cIl1dXSxbNDYsWzM2XV1dLFs1MixcInRcIixbMixbMTUsXCJmXCJdLFwiZ2V0SXRlbVwiLFs3LFsxNSxcImdcIl1dXV0sWzY2LFwidVwiLFsxNSxcInRcIl0sWzQ2LFtcInJcIixbMTUsXCJzXCJdLFsxNSxcInVcIl1dXV1dXSxbMixbMTUsXCJhXCJdLFwiZ3RtT25TdWNjZXNzXCIsWzddXV1cbiAsWzUwLFwiX19vZ3RfZ2Ffc2VuZFwiLFs0NixcImFcIl0sWzUwLFwiZ1wiLFs0NixcImhcIixcImlcIixcImpcIixcImtcIl0sWzIyLFsyMSxbMTYsWzE1LFwiaFwiXSxbMTUsXCJpXCJdXSxbNDRdXSxbNDYsWzQzLFsxNSxcImpcIl0sWzE1LFwia1wiXSxbMTYsWzE1LFwiaFwiXSxbMTUsXCJpXCJdXV1dXV0sWzIyLFsyOCxbMTcsWzE1LFwiYVwiXSxcInZhbHVlXCJdXSxbNDYsWzIsWzE1LFwiYVwiXSxcImd0bU9uU3VjY2Vzc1wiLFs3XV0sWzM2XV1dLFs1MixcImJcIixbXCJyZXF1aXJlXCIsXCJnZXRDb250YWluZXJWZXJzaW9uXCJdXSxbNTIsXCJjXCIsW1wicmVxdWlyZVwiLFwiaW50ZXJuYWwuZ2V0RGVzdGluYXRpb25JZHNcIl1dLFs1MixcImRcIixbXCJyZXF1aXJlXCIsXCJpbnRlcm5hbC5zZW5kR3RhZ0V2ZW50XCJdXSxbNTIsXCJlXCIsW1wicmVxdWlyZVwiLFwiaW50ZXJuYWwuYWRkR2FTZW5kTGlzdGVuZXJcIl1dLFs0MSxcImZcIl0sWzMsXCJmXCIsW1wiY1wiXV0sWzIyLFszMCxbMjgsWzE1LFwiZlwiXV0sWzIwLFsxNyxbMTUsXCJmXCJdLFwibGVuZ3RoXCJdLDBdXSxbNDYsWzMsXCJmXCIsWzcsWzE3LFtcImJcIl0sXCJjb250YWluZXJJZFwiXV1dXV0sW1wiZVwiLFs1MSxcIlwiLFs3LFwiaFwiLFwiaVwiXSxbNDEsXCJqXCJdLFs0MSxcImtcIl0sWzMsXCJrXCIsWzhdXSxbMjIsWzIwLFsxNSxcImhcIl0sXCJldmVudFwiXSxbNDYsWzMsXCJqXCIsWzE2LFsxNSxcImlcIl0sXCJldmVudEFjdGlvblwiXV0sW1wiZ1wiLFsxNSxcImlcIl0sXCJldmVudENhdGVnb3J5XCIsWzE1LFwia1wiXSxcImV2ZW50X2NhdGVnb3J5XCJdLFtcImdcIixbMTUsXCJpXCJdLFwiZXZlbnRMYWJlbFwiLFsxNSxcImtcIl0sXCJldmVudF9sYWJlbFwiXSxbXCJnXCIsWzE1LFwiaVwiXSxcImV2ZW50VmFsdWVcIixbMTUsXCJrXCJdLFwidmFsdWVcIl1dLFs0NixbMjIsWzIwLFsxNSxcImhcIl0sXCJleGNlcHRpb25cIl0sWzQ2LFszLFwialwiLFwiZXhjZXB0aW9uXCJdLFtcImdcIixbMTUsXCJpXCJdLFwiZXhEZXNjcmlwdGlvblwiLFsxNSxcImtcIl0sXCJkZXNjcmlwdGlvblwiXSxbXCJnXCIsWzE1LFwiaVwiXSxcImV4RmF0YWxcIixbMTUsXCJrXCJdLFwiZmF0YWxcIl1dLFs0NixbMjIsWzIwLFsxNSxcImhcIl0sXCJ0aW1pbmdcIl0sWzQ2LFsyMixbMzAsWzMwLFsyMCxbMTYsWzE1LFwiaVwiXSxcInRpbWluZ0NhdGVnb3J5XCJdLFs0NF1dLFsyMCxbMTYsWzE1LFwiaVwiXSxcInRpbWluZ1ZhclwiXSxbNDRdXV0sWzIwLFsxNixbMTUsXCJpXCJdLFwidGltaW5nVmFsdWVcIl0sWzQ0XV1dLFs0NixbMzZdXV0sWzMsXCJqXCIsXCJ0aW1pbmdfY29tcGxldGVcIl0sW1wiZ1wiLFsxNSxcImlcIl0sXCJ0aW1pbmdDYXRlZ29yeVwiLFsxNSxcImtcIl0sXCJldmVudF9jYXRlZ29yeVwiXSxbXCJnXCIsWzE1LFwiaVwiXSxcInRpbWluZ1ZhclwiLFsxNSxcImtcIl0sXCJuYW1lXCJdLFtcImdcIixbMTUsXCJpXCJdLFwidGltaW5nVmFsdWVcIixbMTUsXCJrXCJdLFwidmFsdWVcIl0sW1wiZ1wiLFsxNSxcImlcIl0sXCJ0aW1pbmdMYWJlbFwiLFsxNSxcImtcIl0sXCJldmVudF9sYWJlbFwiXV1dXV1dXSxbMjIsWzIxLFsxNSxcImpcIl0sWzQ0XV0sWzQ2LFs1MyxbNTIsXCJsXCIsWzgsXCJldmVudE1ldGFkYXRhXCIsWzgsXCJldmVudF91c2FnZVwiLFs3LDddXSxcImV2ZW50SWRcIixbMTcsWzE1LFwiYVwiXSxcImd0bUV2ZW50SWRcIl0sXCJub0d0bUV2ZW50XCIsdHJ1ZV1dLFs2NSxcIm1cIixbMTUsXCJmXCJdLFs0NixbMjIsWzIwLFsyLFsxNSxcIm1cIl0sXCJpbmRleE9mXCIsWzcsXCJHLVwiXV0sMF0sWzQ2LFtcImRcIixbMTUsXCJtXCJdLFsxNSxcImpcIl0sWzE1LFwia1wiXSxbMTUsXCJsXCJdXV1dXV1dXV1dXSxbMixbMTUsXCJhXCJdLFwiZ3RtT25TdWNjZXNzXCIsWzddXV1cbiAsWzUwLFwiX19vZ3RfZ29vZ2xlX3NpZ25hbHNcIixbNDYsXCJhXCJdLFs1MixcImJcIixbXCJyZXF1aXJlXCIsXCJpbnRlcm5hbC5zZXRQcm9kdWN0U2V0dGluZ3NQYXJhbWV0ZXJcIl1dLFs1MixcImNcIixbXCJyZXF1aXJlXCIsXCJnZXRDb250YWluZXJWZXJzaW9uXCJdXSxbNTIsXCJkXCIsWzMwLFsxNyxbMTUsXCJhXCJdLFwiaW5zdGFuY2VEZXN0aW5hdGlvbklkXCJdLFsxNyxbXCJjXCJdLFwiY29udGFpbmVySWRcIl1dXSxbXCJiXCIsWzE1LFwiZFwiXSxcImdvb2dsZV9zaWduYWxzXCIsWzIwLFsxNyxbMTUsXCJhXCJdLFwiZ29vZ2xlU2lnbmFsc1wiXSxcIkVOQUJMRURcIl1dLFtcImJcIixbMTUsXCJkXCJdLFwiZ29vZ2xlX25nXCIsWzIwLFsxNyxbMTUsXCJhXCJdLFwiZ29vZ2xlU2lnbmFsc1wiXSxcIk5PTl9HQUlBX1JFTUFSS0VUSU5HXCJdXSxbMixbMTUsXCJhXCJdLFwiZ3RtT25TdWNjZXNzXCIsWzddXV1cbiAsWzUwLFwiX19vZ3RfcmVmZXJyYWxfZXhjbHVzaW9uXCIsWzQ2LFwiYVwiXSxbNTIsXCJiXCIsWzE1LFwiX19tb2R1bGVfY29udmVydERvbWFpbkNvbmRpdGlvbnNcIl1dLFs1MixcImNcIixbXCJyZXF1aXJlXCIsXCJpbnRlcm5hbC5nZXREZXN0aW5hdGlvbklkc1wiXV0sWzUyLFwiZFwiLFtcInJlcXVpcmVcIixcImludGVybmFsLnNldFJlbW90ZUNvbmZpZ1BhcmFtZXRlclwiXV0sWzUyLFwiZVwiLFsxMyxbNDEsXCIkMFwiXSxbMyxcIiQwXCIsW1wicmVxdWlyZVwiLFwiaW50ZXJuYWwuZ2V0RmxhZ3NcIl1dLFtcIiQwXCJdXV0sWzIyLFsxNyxbMTUsXCJhXCJdLFwiaW5jbHVkZUNvbmRpdGlvbnNcIl0sWzQ2LFs1MyxbNDEsXCJmXCJdLFszLFwiZlwiLFszMCxbXCJjXCJdLFs3XV1dLFs2NSxcImdcIixbMTUsXCJmXCJdLFs0NixbNTMsWzQxLFwiaFwiXSxbMyxcImhcIixbMTcsWzE1LFwiYVwiXSxcImluY2x1ZGVDb25kaXRpb25zXCJdXSxbMjIsWzE3LFsxNSxcImhcIl0sXCJsZW5ndGhcIl0sWzQ2LFszLFwiaFwiLFsyLFsxNSxcImJcIl0sXCJjb252ZXJ0RG9tYWluQ29uZGl0aW9uc1wiLFs3LFsxNSxcImhcIl1dXV0sW1wiZFwiLFsxNSxcImdcIl0sXCJyZWZlcnJhbF9leGNsdXNpb25fZGVmaW5pdGlvblwiLFs4LFwiaW5jbHVkZV9jb25kaXRpb25zXCIsWzE1LFwiaFwiXV1dXV1dXV1dXV0sWzIsWzE1LFwiYVwiXSxcImd0bU9uU3VjY2Vzc1wiLFs3XV1dXG4gLFs1MCxcIl9fb2d0X3Nlc3Npb25fdGltZW91dFwiLFs0NixcImFcIl0sWzUyLFwiYlwiLFtcInJlcXVpcmVcIixcImludGVybmFsLmdldERlc3RpbmF0aW9uSWRzXCJdXSxbNTIsXCJjXCIsW1wicmVxdWlyZVwiLFwibWFrZU51bWJlclwiXV0sWzUyLFwiZFwiLFtcInJlcXVpcmVcIixcImludGVybmFsLnNldFJlbW90ZUNvbmZpZ1BhcmFtZXRlclwiXV0sWzQxLFwiZVwiXSxbMyxcImVcIixbMzAsW1wiYlwiXSxbN11dXSxbNTIsXCJmXCIsWzMwLFtcImNcIixbMTcsWzE1LFwiYVwiXSxcInNlc3Npb25Ib3Vyc1wiXV0sMF1dLFs1MixcImdcIixbMzAsW1wiY1wiLFsxNyxbMTUsXCJhXCJdLFwic2Vzc2lvbk1pbnV0ZXNcIl1dLDBdXSxbMjIsWzMwLFsxNSxcImZcIl0sWzE1LFwiZ1wiXV0sWzQ2LFs1MyxbNTIsXCJpXCIsWzAsWzI2LFsxNSxcImZcIl0sNjBdLFsxNSxcImdcIl1dXSxbNjUsXCJqXCIsWzE1LFwiZVwiXSxbNDYsW1wiZFwiLFsxNSxcImpcIl0sXCJzZXNzaW9uX2R1cmF0aW9uXCIsWzE1LFwiaVwiXV1dXV1dXSxbNTIsXCJoXCIsWzMwLFtcImNcIixbMTcsWzE1LFwiYVwiXSxcImVuZ2FnZW1lbnRTZWNvbmRzXCJdXSwwXV0sWzIyLFsxNSxcImhcIl0sWzQ2LFs1MyxbNTIsXCJpXCIsWzI2LFsxNSxcImhcIl0sMTAwMF1dLFs2NSxcImpcIixbMTUsXCJlXCJdLFs0NixbXCJkXCIsWzE1LFwialwiXSxcInNlc3Npb25fZW5nYWdlZF90aW1lXCIsWzE1LFwiaVwiXV1dXV1dXSxbMixbMTUsXCJhXCJdLFwiZ3RtT25TdWNjZXNzXCIsWzddXV1cbiAsWzUwLFwiX19zZXRfcHJvZHVjdF9zZXR0aW5nc1wiLFs0NixcImFcIl0sWzIsWzE1LFwiYVwiXSxcImd0bU9uU3VjY2Vzc1wiLFs3XV1dXG4gLFs1MixcIl9fbW9kdWxlX2NvbnZlcnREb21haW5Db25kaXRpb25zXCIsWzEzLFs0MSxcIiQwXCJdLFszLFwiJDBcIixbNTEsXCJcIixbN10sWzUwLFwiYVwiLFs0Nl0sWzUwLFwiZVwiLFs0NixcImdcIl0sWzM2LFsyLFsxNSxcImdcIl0sXCJyZXBsYWNlXCIsWzcsWzE1LFwiZFwiXSxcIlxcXFwkJlwiXV1dXSxbNTAsXCJmXCIsWzQ2LFwiZ1wiXSxbNTIsXCJoXCIsWzddXSxbNTMsWzQxLFwiaVwiXSxbMyxcImlcIiwwXSxbNjMsWzcsXCJpXCJdLFsyMyxbMTUsXCJpXCJdLFsxNyxbMTUsXCJnXCJdLFwibGVuZ3RoXCJdXSxbMzMsWzE1LFwiaVwiXSxbMyxcImlcIixbMCxbMTUsXCJpXCJdLDFdXV0sWzQ2LFs1MyxbNDEsXCJqXCJdLFsyMixbMjAsW1wiY1wiLFsxNixbMTUsXCJnXCJdLFsxNSxcImlcIl1dXSxcIm9iamVjdFwiXSxbNDYsWzUzLFs1MixcImxcIixbMTYsWzE2LFsxNSxcImdcIl0sWzE1LFwiaVwiXV0sXCJtYXRjaFR5cGVcIl1dLFs1MixcIm1cIixbMTYsWzE2LFsxNSxcImdcIl0sWzE1LFwiaVwiXV0sXCJtYXRjaFZhbHVlXCJdXSxbMzgsWzE1LFwibFwiXSxbNDYsXCJCRUdJTlNfV0lUSFwiLFwiRU5EU19XSVRIXCIsXCJFUVVBTFNcIixcIlJFR0VYXCIsXCJDT05UQUlOU1wiXSxbNDYsWzUsWzQ2LFszLFwialwiLFswLFwiXlwiLFtcImVcIixbMTUsXCJtXCJdXV1dLFs0XV1dLFs1LFs0NixbMyxcImpcIixbMCxbXCJlXCIsWzE1LFwibVwiXV0sXCIkXCJdXSxbNF1dXSxbNSxbNDYsWzMsXCJqXCIsWzAsWzAsXCJeXCIsW1wiZVwiLFsxNSxcIm1cIl1dXSxcIiRcIl1dLFs0XV1dLFs1LFs0NixbMyxcImpcIixbMTUsXCJtXCJdXSxbNF1dXSxbNSxbNDZdXSxbOSxbNDYsWzMsXCJqXCIsW1wiZVwiLFsxNSxcIm1cIl1dXSxbNF1dXV1dXV0sWzQ2LFszLFwialwiLFsxNixbMTUsXCJnXCJdLFsxNSxcImlcIl1dXV1dLFs0MSxcImtcIl0sWzIyLFsxNSxcImpcIl0sWzQ2LFszLFwia1wiLFtcImJcIixbMTUsXCJqXCJdXV1dXSxbMjIsWzE1LFwia1wiXSxbNDYsWzIsWzE1LFwiaFwiXSxcInB1c2hcIixbNyxbMTUsXCJrXCJdXV1dXV1dXV0sWzM2LFsxNSxcImhcIl1dXSxbNTIsXCJiXCIsW1wicmVxdWlyZVwiLFwiaW50ZXJuYWwuY3JlYXRlUmVnZXhcIl1dLFs1MixcImNcIixbXCJyZXF1aXJlXCIsXCJnZXRUeXBlXCJdXSxbNTIsXCJkXCIsW1wiYlwiLFwiWy4qK1xcXFwtP14ke30oKXxbXFxcXF1cXFxcXFxcXF1cIixcImdcIl1dLFszNixbOCxcImNvbnZlcnREb21haW5Db25kaXRpb25zXCIsWzE1LFwiZlwiXV1dXSxbMzYsW1wiYVwiXV1dXSxbXCIkMFwiXV1dXG4gLFs1MixcIl9fbW9kdWxlX2V2ZW50RWRpdGluZ0FuZFN5bnRoZXNpc1wiLFsxMyxbNDEsXCIkMFwiXSxbMyxcIiQwXCIsWzUxLFwiXCIsWzddLFs1MCxcImFcIixbNDZdLFs1MCxcImJjXCIsWzQ2LFwiYnBcIixcImJxXCJdLFs1MixcImJyXCIsWzMwLFsxNixbMTUsXCJicVwiXSxbMTUsXCJpXCJdXSxbN11dXSxbNjYsXCJic1wiLFsxNSxcImJyXCJdLFs0NixbMjIsWzE2LFsxNSxcImJzXCJdLFsxNSxcImpcIl1dLFs0NixbNTMsWzUyLFwiYnRcIixbMTYsWzE2LFsxNSxcImJzXCJdLFsxNSxcImpcIl1dLFsxNSxcImxcIl1dXSxbNTIsXCJidVwiLFtcImJoXCIsWzE1LFwiYnBcIl0sWzE2LFsxNixbMTUsXCJic1wiXSxbMTUsXCJqXCJdXSxbMTUsXCJtXCJdXV1dLFsyLFsxNSxcImJwXCJdLFwic2V0SGl0RGF0YVwiLFs3LFsxNSxcImJ0XCJdLFtcImJkXCIsWzE1LFwiYnVcIl1dXV1dXSxbNDYsWzIyLFsxNixbMTUsXCJic1wiXSxbMTUsXCJrXCJdXSxbNDYsWzUzLFs1MixcImJ0XCIsWzE2LFsxNixbMTUsXCJic1wiXSxbMTUsXCJrXCJdXSxbMTUsXCJsXCJdXV0sWzIsWzE1LFwiYnBcIl0sXCJzZXRIaXREYXRhXCIsWzcsWzE1LFwiYnRcIl0sWzQ0XV1dXV1dXV1dXV0sWzUwLFwiYmRcIixbNDYsXCJicFwiXSxbMjIsWzI4LFsxNSxcImJwXCJdXSxbNDYsWzM2LFsxNSxcImJwXCJdXV1dLFs1MixcImJxXCIsW1wiY1wiLFsxNSxcImJwXCJdXV0sWzUyLFwiYnJcIixbMjEsWzE1LFwiYnFcIl0sWzE1LFwiYnFcIl1dXSxbMjIsWzE1LFwiYnJcIl0sWzQ2LFszNixbMTUsXCJicFwiXV1dXSxbMzYsWzE1LFwiYnFcIl1dXSxbNTAsXCJiZVwiLFs0NixcImJwXCIsXCJicVwiLFwiYnJcIl0sWzIyLFsxLFsxNSxcImJxXCJdLFsyOCxbXCJiZ1wiLFsxNSxcImJwXCJdLFsxNSxcImJxXCJdXV1dLFs0NixbMzYsZmFsc2VdXV0sWzIyLFszMCxbMjgsWzE1LFwiYnJcIl1dLFsyMCxbMTcsWzE1LFwiYnJcIl0sXCJsZW5ndGhcIl0sMF1dLFs0NixbMzYsdHJ1ZV1dXSxbNTMsWzQxLFwiYnNcIl0sWzMsXCJic1wiLDBdLFs2MyxbNyxcImJzXCJdLFsyMyxbMTUsXCJic1wiXSxbMTcsWzE1LFwiYnJcIl0sXCJsZW5ndGhcIl1dLFszMyxbMTUsXCJic1wiXSxbMyxcImJzXCIsWzAsWzE1LFwiYnNcIl0sMV1dXSxbNDYsWzUzLFs1MixcImJ0XCIsWzMwLFsxNixbMTYsWzE1LFwiYnJcIl0sWzE1LFwiYnNcIl1dLFsxNSxcInFcIl1dLFs3XV1dLFsyMixbXCJiZlwiLFsxNSxcImJwXCJdLFsxNSxcImJ0XCJdXSxbNDYsWzM2LHRydWVdXV1dXV1dLFszNixmYWxzZV1dLFs1MCxcImJmXCIsWzQ2LFwiYnBcIixcImJxXCJdLFs1MyxbNDEsXCJiclwiXSxbMyxcImJyXCIsMF0sWzYzLFs3LFwiYnJcIl0sWzIzLFsxNSxcImJyXCJdLFsxNyxbMTUsXCJicVwiXSxcImxlbmd0aFwiXV0sWzMzLFsxNSxcImJyXCJdLFszLFwiYnJcIixbMCxbMTUsXCJiclwiXSwxXV1dLFs0NixbNTMsWzUyLFwiYnNcIixbMTYsWzE1LFwiYnFcIl0sWzE1LFwiYnJcIl1dXSxbNTIsXCJidFwiLFtcImJnXCIsWzE1LFwiYnBcIl0sWzE1LFwiYnNcIl0sZmFsc2VdXSxbMjIsWzE2LFsxNSxcImJcIl0sXCJlbmFibGVVcmxEZWNvZGVFdmVudFVzYWdlXCJdLFs0NixbNTMsWzUyLFwiYnVcIixbMTYsWzMwLFsxNixbMTUsXCJic1wiXSxbMTUsXCJ0XCJdXSxbN11dLDBdXSxbMjIsWzEsWzEsWzE1LFwiYnVcIl0sWzIwLFsxNixbMTUsXCJidVwiXSxbMTUsXCJ1XCJdXSxbMTUsXCJwXCJdXV0sWzIxLFsyLFsxNSxcImJiXCJdLFwiaW5kZXhPZlwiLFs3LFsxNixbMTYsWzE1LFwiYnVcIl0sWzE1LFwicFwiXV0sWzE1LFwib1wiXV1dXSxbMjcsMV1dXSxbNDYsWzUzLFs1MixcImJ2XCIsW1wiYmdcIixbMTUsXCJicFwiXSxbMTUsXCJic1wiXSx0cnVlXV0sWzIyLFsyMSxbMTUsXCJidFwiXSxbMTUsXCJidlwiXV0sWzQ2LFs1MyxbNTIsXCJid1wiLFszMCxbMixbMTUsXCJicFwiXSxcImdldE1ldGFkYXRhXCIsWzcsWzE1LFwieVwiXV1dLFs3XV1dLFsyLFsxNSxcImJ3XCJdLFwicHVzaFwiLFs3LFszOSxbMTUsXCJidFwiXSxbMTUsXCJiYVwiXSxbMTUsXCJ6XCJdXV1dLFsyLFsxNSxcImJwXCJdLFwic2V0TWV0YWRhdGFcIixbNyxbMTUsXCJ5XCJdLFsxNSxcImJ3XCJdXV1dXV1dXV1dXV0sWzIyLFsyOCxbMTUsXCJidFwiXV0sWzQ2LFszNixmYWxzZV1dXV1dXV0sWzM2LHRydWVdXSxbNTAsXCJiZ1wiLFs0NixcImJwXCIsXCJicVwiLFwiYnJcIl0sWzUyLFwiYnNcIixbMzAsWzE2LFsxNSxcImJxXCJdLFsxNSxcInRcIl1dLFs3XV1dLFs0MSxcImJ0XCJdLFszLFwiYnRcIixbXCJiaFwiLFsxNSxcImJwXCJdLFsxNixbMTUsXCJic1wiXSwwXV1dLFs0MSxcImJ1XCJdLFszLFwiYnVcIixbXCJiaFwiLFsxNSxcImJwXCJdLFsxNixbMTUsXCJic1wiXSwxXV1dLFsyMixbMSxbMTUsXCJiclwiXSxbMTUsXCJidFwiXV0sWzQ2LFszLFwiYnRcIixbMzAsW1wiaFwiLFsxNSxcImJ0XCJdXSxbMTUsXCJidFwiXV1dXV0sWzIyLFsxLFsxNixbMTUsXCJiXCJdLFwiZW5hYmxlRGVjb2RlVXJpXCJdLFsxNSxcImJ1XCJdXSxbNDYsWzUzLFs1MixcImNhXCIsWzE2LFszMCxbMTYsWzE1LFwiYnFcIl0sWzE1LFwidFwiXV0sWzddXSwwXV0sWzIyLFsxLFsxLFsxNSxcImNhXCJdLFsyMCxbMTYsWzE1LFwiY2FcIl0sWzE1LFwidVwiXV0sWzE1LFwicFwiXV1dLFsyMSxbMixbMTUsXCJiYlwiXSxcImluZGV4T2ZcIixbNyxbMTYsWzE2LFsxNSxcImNhXCJdLFsxNSxcInBcIl1dLFsxNSxcIm9cIl1dXV0sWzI3LDFdXV0sWzQ2LFs1MyxbNTIsXCJjYlwiLFsyLFsxNSxcImJ1XCJdLFwiaW5kZXhPZlwiLFs3LFwiP1wiXV1dLFsyMixbMjAsWzE1LFwiY2JcIl0sWzI3LDFdXSxbNDYsWzMsXCJidVwiLFszMCxbXCJoXCIsWzE1LFwiYnVcIl1dLFsxNSxcImJ1XCJdXV1dLFs0NixbNTMsWzUyLFwiY2NcIixbMixbMTUsXCJidVwiXSxcInN1YnN0cmluZ1wiLFs3LDAsWzE1LFwiY2JcIl1dXV0sWzMsXCJidVwiLFswLFszMCxbXCJoXCIsWzE1LFwiY2NcIl1dLFsxNSxcImNjXCJdXSxbMixbMTUsXCJidVwiXSxcInN1YnN0cmluZ1wiLFs3LFsxNSxcImNiXCJdXV1dXV1dXV1dXV1dXSxbNTIsXCJidlwiLFsxNixbMTUsXCJicVwiXSxbMTUsXCJzXCJdXV0sWzIyLFszMCxbMzAsWzMwLFsyMCxbMTUsXCJidlwiXSxcImVxaVwiXSxbMjAsWzE1LFwiYnZcIl0sXCJzd2lcIl1dLFsyMCxbMTUsXCJidlwiXSxcImV3aVwiXV0sWzIwLFsxNSxcImJ2XCJdLFwiY25pXCJdXSxbNDYsWzIyLFsxNSxcImJ0XCJdLFs0NixbMyxcImJ0XCIsWzIsW1wiZVwiLFsxNSxcImJ0XCJdXSxcInRvTG93ZXJDYXNlXCIsWzddXV1dXSxbMjIsWzE1LFwiYnVcIl0sWzQ2LFszLFwiYnVcIixbMixbXCJlXCIsWzE1LFwiYnVcIl1dLFwidG9Mb3dlckNhc2VcIixbN11dXV1dXV0sWzQxLFwiYndcIl0sWzMsXCJid1wiLGZhbHNlXSxbMzgsWzE1LFwiYnZcIl0sWzQ2LFwiZXFcIixcImVxaVwiLFwic3dcIixcInN3aVwiLFwiZXdcIixcImV3aVwiLFwiY25cIixcImNuaVwiLFwibHRcIixcImxlXCIsXCJndFwiLFwiZ2VcIixcInJlXCIsXCJyZWlcIl0sWzQ2LFs1LFs0Nl1dLFs1LFs0NixbMyxcImJ3XCIsWzIwLFtcImVcIixbMTUsXCJidFwiXV0sW1wiZVwiLFsxNSxcImJ1XCJdXV1dLFs0XV1dLFs1LFs0Nl1dLFs1LFs0NixbMyxcImJ3XCIsWzIwLFsyLFtcImVcIixbMTUsXCJidFwiXV0sXCJpbmRleE9mXCIsWzcsW1wiZVwiLFsxNSxcImJ1XCJdXV1dLDBdXSxbNF1dXSxbNSxbNDZdXSxbNSxbNDYsWzQxLFwiYnhcIl0sWzMsXCJieFwiLFtcImVcIixbMTUsXCJidFwiXV1dLFs0MSxcImJ5XCJdLFszLFwiYnlcIixbXCJlXCIsWzE1LFwiYnVcIl1dXSxbNTIsXCJielwiLFszNyxbMTcsWzE1LFwiYnhcIl0sXCJsZW5ndGhcIl0sWzE3LFsxNSxcImJ5XCJdLFwibGVuZ3RoXCJdXV0sWzMsXCJid1wiLFsxLFsxOSxbMTUsXCJielwiXSwwXSxbMjAsWzIsWzE1LFwiYnhcIl0sXCJpbmRleE9mXCIsWzcsWzE1LFwiYnlcIl0sWzE1LFwiYnpcIl1dXSxbMTUsXCJielwiXV1dXSxbNF1dXSxbNSxbNDZdXSxbNSxbNDYsWzMsXCJid1wiLFsxOSxbMixbXCJlXCIsWzE1LFwiYnRcIl1dLFwiaW5kZXhPZlwiLFs3LFtcImVcIixbMTUsXCJidVwiXV1dXSwwXV0sWzRdXV0sWzUsWzQ2LFszLFwiYndcIixbMjMsW1wiY1wiLFsxNSxcImJ0XCJdXSxbXCJjXCIsWzE1LFwiYnVcIl1dXV0sWzRdXV0sWzUsWzQ2LFszLFwiYndcIixbMjQsW1wiY1wiLFsxNSxcImJ0XCJdXSxbXCJjXCIsWzE1LFwiYnVcIl1dXV0sWzRdXV0sWzUsWzQ2LFszLFwiYndcIixbMTgsW1wiY1wiLFsxNSxcImJ0XCJdXSxbXCJjXCIsWzE1LFwiYnVcIl1dXV0sWzRdXV0sWzUsWzQ2LFszLFwiYndcIixbMTksW1wiY1wiLFsxNSxcImJ0XCJdXSxbXCJjXCIsWzE1LFwiYnVcIl1dXV0sWzRdXV0sWzUsWzQ2LFsyMixbMjEsWzE1LFwiYnRcIl0sWzQ0XV0sWzQ2LFs1MyxbNTIsXCJjYVwiLFtcImZcIixbMTUsXCJidVwiXV1dLFsyMixbMTUsXCJjYVwiXSxbNDYsWzMsXCJid1wiLFtcImdcIixbMTUsXCJjYVwiXSxbMTUsXCJidFwiXV1dXV1dXV0sWzRdXV0sWzUsWzQ2LFsyMixbMjEsWzE1LFwiYnRcIl0sWzQ0XV0sWzQ2LFs1MyxbNTIsXCJjYVwiLFtcImZcIixbMTUsXCJidVwiXSxcImlcIl1dLFsyMixbMTUsXCJjYVwiXSxbNDYsWzMsXCJid1wiLFtcImdcIixbMTUsXCJjYVwiXSxbMTUsXCJidFwiXV1dXV1dXV0sWzRdXV0sWzksWzQ2XV1dXSxbMjIsWzI4LFsyOCxbMTYsWzE1LFwiYnFcIl0sWzE1LFwiclwiXV1dXSxbNDYsWzM2LFsyOCxbMTUsXCJid1wiXV1dXV0sWzM2LFsxNSxcImJ3XCJdXV0sWzUwLFwiYmhcIixbNDYsXCJicFwiLFwiYnFcIl0sWzIyLFsyOCxbMTUsXCJicVwiXV0sWzQ2LFszNixbNDRdXV1dLFszOCxbMTYsWzE1LFwiYnFcIl0sWzE1LFwidVwiXV0sWzQ2LFwiZXZlbnRfbmFtZVwiLFwiY29uc3RcIixcImV2ZW50X3BhcmFtXCJdLFs0NixbNSxbNDYsWzM2LFsyLFsxNSxcImJwXCJdLFwiZ2V0RXZlbnROYW1lXCIsWzddXV1dXSxbNSxbNDYsWzM2LFsxNixbMTUsXCJicVwiXSxbMTUsXCJuXCJdXV1dXSxbNSxbNDYsWzUyLFwiYnJcIixbMTYsWzE2LFsxNSxcImJxXCJdLFsxNSxcInBcIl1dLFsxNSxcIm9cIl1dXSxbMjIsWzIwLFsxNSxcImJyXCJdLFsxNSxcIndcIl1dLFs0NixbMzYsW1wiYmtcIixbMTUsXCJicFwiXV1dXV0sWzIyLFsyMCxbMTUsXCJiclwiXSxbMTUsXCJ2XCJdXSxbNDYsWzM2LFtcImJsXCIsWzE1LFwiYnBcIl1dXV1dLFszNixbMixbMTUsXCJicFwiXSxcImdldEhpdERhdGFcIixbNyxbMTUsXCJiclwiXV1dXV1dLFs5LFs0NixbMzYsWzQ0XV1dXV1dXSxbNTAsXCJialwiLFs0NixcImJwXCJdLFsyMixbMjgsWzE1LFwiYnBcIl1dLFs0NixbMzYsWzE1LFwiYnBcIl1dXV0sWzUyLFwiYnFcIixbMixbMTUsXCJicFwiXSxcInNwbGl0XCIsWzcsXCImXCJdXV0sWzUyLFwiYnJcIixbN11dLFs0MyxbMTUsXCJicVwiXSwwLFsyLFsxNixbMTUsXCJicVwiXSwwXSxcInN1YnN0cmluZ1wiLFs3LDFdXV0sWzUzLFs0MSxcImJzXCJdLFszLFwiYnNcIiwwXSxbNjMsWzcsXCJic1wiXSxbMjMsWzE1LFwiYnNcIl0sWzE3LFsxNSxcImJxXCJdLFwibGVuZ3RoXCJdXSxbMzMsWzE1LFwiYnNcIl0sWzMsXCJic1wiLFswLFsxNSxcImJzXCJdLDFdXV0sWzQ2LFs1MyxbNTIsXCJidFwiLFsxNixbMTUsXCJicVwiXSxbMTUsXCJic1wiXV1dLFs1MixcImJ1XCIsWzIsWzE1LFwiYnRcIl0sXCJpbmRleE9mXCIsWzcsXCI9XCJdXV0sWzUyLFwiYnZcIixbMzksWzE5LFsxNSxcImJ1XCJdLDBdLFsyLFsxNSxcImJ0XCJdLFwic3Vic3RyaW5nXCIsWzcsMCxbMTUsXCJidVwiXV1dLFsxNSxcImJ0XCJdXV0sWzIyLFsyOCxbMTYsWzE1LFwiYmlcIl0sWzE1LFwiYnZcIl1dXSxbNDYsWzIsWzE1LFwiYnJcIl0sXCJwdXNoXCIsWzcsWzE2LFsxNSxcImJxXCJdLFsxNSxcImJzXCJdXV1dXV1dXV1dLFsyMixbMTcsWzE1LFwiYnJcIl0sXCJsZW5ndGhcIl0sWzQ2LFszNixbMCxcIj9cIixbMixbMTUsXCJiclwiXSxcImpvaW5cIixbNyxcIiZcIl1dXV1dXSxbMzYsXCJcIl1dLFs1MCxcImJrXCIsWzQ2LFwiYnBcIl0sWzUyLFwiYnFcIixbMixbMTUsXCJicFwiXSxcImdldEhpdERhdGFcIixbNyxbMTUsXCJ3XCJdXV1dLFsyMixbMTUsXCJicVwiXSxbNDYsWzM2LFsxNSxcImJxXCJdXV1dLFs1MixcImJyXCIsWzIsWzE1LFwiYnBcIl0sXCJnZXRIaXREYXRhXCIsWzcsWzE1LFwieFwiXV1dXSxbMjIsWzIxLFs0MCxbMTUsXCJiclwiXV0sXCJzdHJpbmdcIl0sWzQ2LFszNixbNDRdXV1dLFs1MixcImJzXCIsW1wiZFwiLFsxNSxcImJyXCJdXV0sWzIyLFsyOCxbMTUsXCJic1wiXV0sWzQ2LFszNixbNDRdXV1dLFs0MSxcImJ0XCJdLFszLFwiYnRcIixbMTcsWzE1LFwiYnNcIl0sXCJwYXRobmFtZVwiXV0sWzIyLFsxNixbMTUsXCJiXCJdLFwiZW5hYmxlRGVjb2RlVXJpXCJdLFs0NixbMyxcImJ0XCIsWzMwLFtcImhcIixbMTUsXCJidFwiXV0sWzE1LFwiYnRcIl1dXV1dLFszNixbMCxbMTUsXCJidFwiXSxbXCJialwiLFsxNyxbMTUsXCJic1wiXSxcInNlYXJjaFwiXV1dXV0sWzUwLFwiYmxcIixbNDYsXCJicFwiXSxbNTIsXCJicVwiLFsyLFsxNSxcImJwXCJdLFwiZ2V0SGl0RGF0YVwiLFs3LFsxNSxcInZcIl1dXV0sWzIyLFsxNSxcImJxXCJdLFs0NixbMzYsWzE1LFwiYnFcIl1dXV0sWzUyLFwiYnJcIixbMixbMTUsXCJicFwiXSxcImdldEhpdERhdGFcIixbNyxbMTUsXCJ4XCJdXV1dLFsyMixbMjEsWzQwLFsxNSxcImJyXCJdXSxcInN0cmluZ1wiXSxbNDYsWzM2LFs0NF1dXV0sWzUyLFwiYnNcIixbXCJkXCIsWzE1LFwiYnJcIl1dXSxbMjIsWzI4LFsxNSxcImJzXCJdXSxbNDYsWzM2LFs0NF1dXV0sWzM2LFsxNyxbMTUsXCJic1wiXSxcImhvc3RuYW1lXCJdXV0sWzUwLFwiYm9cIixbNDYsXCJicFwiXSxbMjIsWzI4LFsxNSxcImJwXCJdXSxbNDYsWzM2LHRydWVdXV0sWzMsXCJicFwiLFtcImVcIixbMTUsXCJicFwiXV1dLFs2NixcImJxXCIsWzE1LFwiYm5cIl0sWzQ2LFsyMixbMjAsWzIsWzE1LFwiYnBcIl0sXCJpbmRleE9mXCIsWzcsWzE1LFwiYnFcIl1dXSwwXSxbNDYsWzM2LHRydWVdXV1dXSxbMjIsWzE4LFsyLFsxNSxcImJtXCJdLFwiaW5kZXhPZlwiLFs3LFsxNSxcImJwXCJdXV0sWzI3LDFdXSxbNDYsWzM2LHRydWVdXV0sWzM2LGZhbHNlXV0sWzUyLFwiYlwiLFsxMyxbNDEsXCIkMFwiXSxbMyxcIiQwXCIsW1wicmVxdWlyZVwiLFwiaW50ZXJuYWwuZ2V0RmxhZ3NcIl1dLFtcIiQwXCJdXV0sWzUyLFwiY1wiLFtcInJlcXVpcmVcIixcIm1ha2VOdW1iZXJcIl1dLFs1MixcImRcIixbXCJyZXF1aXJlXCIsXCJwYXJzZVVybFwiXV0sWzUyLFwiZVwiLFtcInJlcXVpcmVcIixcIm1ha2VTdHJpbmdcIl1dLFs1MixcImZcIixbXCJyZXF1aXJlXCIsXCJpbnRlcm5hbC5jcmVhdGVSZWdleFwiXV0sWzUyLFwiZ1wiLFtcInJlcXVpcmVcIixcImludGVybmFsLnRlc3RSZWdleFwiXV0sWzUyLFwiaFwiLFtcInJlcXVpcmVcIixcImRlY29kZVVyaUNvbXBvbmVudFwiXV0sWzUyLFwiaVwiLFwiZXZlbnRfcGFyYW1fb3BzXCJdLFs1MixcImpcIixcImVkaXRfcGFyYW1cIl0sWzUyLFwia1wiLFwiZGVsZXRlX3BhcmFtXCJdLFs1MixcImxcIixcInBhcmFtX25hbWVcIl0sWzUyLFwibVwiLFwicGFyYW1fdmFsdWVcIl0sWzUyLFwiblwiLFwiY29uc3RfdmFsdWVcIl0sWzUyLFwib1wiLFwicGFyYW1fbmFtZVwiXSxbNTIsXCJwXCIsXCJldmVudF9wYXJhbVwiXSxbNTIsXCJxXCIsXCJwcmVkaWNhdGVzXCJdLFs1MixcInJcIixcIm5lZ2F0ZVwiXSxbNTIsXCJzXCIsXCJ0eXBlXCJdLFs1MixcInRcIixcInZhbHVlc1wiXSxbNTIsXCJ1XCIsXCJ0eXBlXCJdLFs1MixcInZcIixcInBhZ2VfaG9zdG5hbWVcIl0sWzUyLFwid1wiLFwicGFnZV9wYXRoXCJdLFs1MixcInhcIixcInBhZ2VfbG9jYXRpb25cIl0sWzUyLFwieVwiLFwiZXZlbnRfdXNhZ2VcIl0sWzUyLFwielwiLDIwXSxbNTIsXCJiYVwiLDIxXSxbNTIsXCJiYlwiLFs3LFsxNSxcIndcIl0sWzE1LFwieFwiXSxcInBhZ2VfcmVmZXJyZXJcIl1dLFs1MixcImJpXCIsWzgsXCJfX3V0bWFcIiwxLFwiX191dG1iXCIsMSxcIl9fdXRtY1wiLDEsXCJfX3V0bWtcIiwxLFwiX191dG12XCIsMSxcIl9fdXRteFwiLDEsXCJfX3V0bXpcIiwxLFwiX19nYVwiLDEsXCJfZ2FjXCIsMSxcIl9nbFwiLDEsXCJkY2xpZFwiLDEsXCJnYnJhaWRcIiwxLFwiZ2NsaWRcIiwxLFwiZ2Nsc3JjXCIsMSxcInV0bV9jYW1wYWlnblwiLDEsXCJ1dG1fY29udGVudFwiLDEsXCJ1dG1fZXhwaWRcIiwxLFwidXRtX2lkXCIsMSxcInV0bV9tZWRpdW1cIiwxLFwidXRtX25vb3ZlcnJpZGVcIiwxLFwidXRtX3JlZmVycmVyXCIsMSxcInV0bV9zb3VyY2VcIiwxLFwidXRtX3Rlcm1cIiwxLFwid2JyYWlkXCIsMV1dLFs1MixcImJtXCIsWzcsXCJhcHBfcmVtb3ZlXCIsXCJhcHBfc3RvcmVfcmVmdW5kXCIsXCJhcHBfc3RvcmVfc3Vic2NyaXB0aW9uX2NhbmNlbFwiLFwiYXBwX3N0b3JlX3N1YnNjcmlwdGlvbl9jb252ZXJ0XCIsXCJhcHBfc3RvcmVfc3Vic2NyaXB0aW9uX3JlbmV3XCIsXCJmaXJzdF9vcGVuXCIsXCJmaXJzdF92aXNpdFwiLFwiaW5fYXBwX3B1cmNoYXNlXCIsXCJzZXNzaW9uX3N0YXJ0XCIsXCJ1c2VyX2VuZ2FnZW1lbnRcIl1dLFs1MixcImJuXCIsWzcsXCJfXCIsXCJnYV9cIixcImdvb2dsZV9cIixcImd0YWcuXCIsXCJmaXJlYmFzZV9cIl1dLFszNixbOCxcImFwcGx5UGFyYW1PcGVyYXRpb25zXCIsWzE1LFwiYmNcIl0sXCJwcmVIaXRNYXRjaGVzUnVsZVwiLFsxNSxcImJlXCJdLFwicmVzb2x2ZVZhbHVlXCIsWzE1LFwiYmhcIl0sXCJpc0V2ZW50TmFtZUZhbHN5T3JSZXNlcnZlZFwiLFsxNSxcImJvXCJdXV1dLFszNixbXCJhXCJdXV1dLFtcIiQwXCJdXV1cbiAsWzUyLFwiX19tb2R1bGVfYWN0aXZpdGllc1wiLFsxMyxbNDEsXCIkMFwiXSxbMyxcIiQwXCIsWzUxLFwiXCIsWzddLFs1MCxcImFcIixbNDZdLFs1MCxcImJcIixbNDYsXCJjXCIsXCJkXCJdLFszNixbMzksWzE1LFwiZFwiXSxbXCJkXCIsWzE1LFwiY1wiXV0sWzE1LFwiY1wiXV1dXSxbMzYsWzgsXCJ3aXRoUmVxdWVzdENvbnRleHRcIixbMTUsXCJiXCJdXV1dLFszNixbXCJhXCJdXV1dLFtcIiQwXCJdXV1cbiAsWzUyLFwiX19tb2R1bGVfY2NkRW1TaXRlU2VhcmNoQWN0aXZpdHlcIixbMTMsWzQxLFwiJDBcIl0sWzMsXCIkMFwiLFs1MSxcIlwiLFs3XSxbNTAsXCJhXCIsWzQ2XSxbNTAsXCJiXCIsWzQ2LFwiZFwiLFwiZVwiXSxbNTIsXCJmXCIsWzIsWzMwLFsxNSxcImRcIl0sXCJcIl0sXCJzcGxpdFwiLFs3LFwiLFwiXV1dLFs1MyxbNDEsXCJnXCJdLFszLFwiZ1wiLDBdLFs2MyxbNyxcImdcIl0sWzIzLFsxNSxcImdcIl0sWzE3LFsxNSxcImZcIl0sXCJsZW5ndGhcIl1dLFszMyxbMTUsXCJnXCJdLFszLFwiZ1wiLFswLFsxNSxcImdcIl0sMV1dXSxbNDYsWzUzLFs1MixcImhcIixbXCJlXCIsWzIsWzE2LFsxNSxcImZcIl0sWzE1LFwiZ1wiXV0sXCJ0cmltXCIsWzddXV1dLFsyMixbMjEsWzE1LFwiaFwiXSxbNDRdXSxbNDYsWzM2LFsxNSxcImhcIl1dXV1dXV1dXSxbNTAsXCJjXCIsWzQ2LFwiZFwiLFwiZVwiLFwiZlwiXSxbNTIsXCJnXCIsWzgsXCJzZWFyY2hfdGVybVwiLFsxNSxcImRcIl1dXSxbNTIsXCJoXCIsWzIsWzMwLFsxNSxcImVcIl0sXCJcIl0sXCJzcGxpdFwiLFs3LFwiLFwiXV1dLFs1MyxbNDEsXCJpXCJdLFszLFwiaVwiLDBdLFs2MyxbNyxcImlcIl0sWzIzLFsxNSxcImlcIl0sWzE3LFsxNSxcImhcIl0sXCJsZW5ndGhcIl1dLFszMyxbMTUsXCJpXCJdLFszLFwiaVwiLFswLFsxNSxcImlcIl0sMV1dXSxbNDYsWzUzLFs1MixcImpcIixbMixbMTYsWzE1LFwiaFwiXSxbMTUsXCJpXCJdXSxcInRyaW1cIixbN11dXSxbNTIsXCJrXCIsW1wiZlwiLFsxNSxcImpcIl1dXSxbMjIsWzIxLFsxNSxcImtcIl0sWzQ0XV0sWzQ2LFs0MyxbMTUsXCJnXCJdLFswLFwicV9cIixbMTUsXCJqXCJdXSxbMTUsXCJrXCJdXV1dXV1dXSxbMzYsWzE1LFwiZ1wiXV1dLFszNixbOCxcImdldFNlYXJjaFRlcm1cIixbMTUsXCJiXCJdLFwiYnVpbGRFdmVudFBhcmFtc1wiLFsxNSxcImNcIl1dXV0sWzM2LFtcImFcIl1dXV0sW1wiJDBcIl1dXVxuICxbNTIsXCJfX21vZHVsZV9jY2RHYVJlZ2lvblNjb3BlZFNldHRpbmdzXCIsWzEzLFs0MSxcIiQwXCJdLFszLFwiJDBcIixbNTEsXCJcIixbN10sWzUwLFwiYVwiLFs0Nl0sWzUwLFwiblwiLFs0NixcInFcIixcInJcIixcInNcIl0sWzUwLFwieFwiLFs0NixcInpcIl0sWzUyLFwiYmFcIixbMTYsWzE1LFwibVwiXSxbMTUsXCJ6XCJdXV0sWzIyLFsyOCxbMTUsXCJiYVwiXV0sWzQ2LFszNl1dXSxbNTMsWzQxLFwiYmJcIl0sWzMsXCJiYlwiLDBdLFs2MyxbNyxcImJiXCJdLFsyMyxbMTUsXCJiYlwiXSxbMTcsWzE1LFwiYmFcIl0sXCJsZW5ndGhcIl1dLFszMyxbMTUsXCJiYlwiXSxbMyxcImJiXCIsWzAsWzE1LFwiYmJcIl0sMV1dXSxbNDYsWzUzLFs1MixcImJjXCIsWzE2LFsxNSxcImJhXCJdLFsxNSxcImJiXCJdXV0sW1widVwiLFsxNSxcInRcIl0sWzE3LFsxNSxcImJjXCJdLFwibmFtZVwiXSxbMTcsWzE1LFwiYmNcIl0sXCJ2YWx1ZVwiXV1dXV1dXSxbNTAsXCJ5XCIsWzQ2LFwielwiXSxbMjIsWzMwLFsyOCxbMTUsXCJ2XCJdXSxbMjEsWzE3LFsxNSxcInZcIl0sXCJsZW5ndGhcIl0sMl1dLFs0NixbMzYsZmFsc2VdXV0sWzQxLFwiYmFcIl0sWzMsXCJiYVwiLFsxNixbMTUsXCJ6XCJdLFsxNSxcIndcIl1dXSxbMjIsWzIwLFsxNSxcImJhXCJdLFs0NF1dLFs0NixbMyxcImJhXCIsWzE2LFsxNSxcInpcIl0sWzE1LFwidlwiXV1dXV0sWzM2LFsyOCxbMjgsWzE1LFwiYmFcIl1dXV1dLFsyMixbMjgsWzE1LFwiclwiXV0sWzQ2LFszNl1dXSxbNTIsXCJ0XCIsWzMwLFsxNyxbMTUsXCJxXCJdLFwiaW5zdGFuY2VEZXN0aW5hdGlvbklkXCJdLFsxNyxbXCJkXCJdLFwiY29udGFpbmVySWRcIl1dXSxbNTIsXCJ1XCIsW1wiaVwiLFsxNSxcImdcIl0sWzE1LFwic1wiXV1dLFs1MixcInZcIixbMTMsWzQxLFwiJDBcIl0sWzMsXCIkMFwiLFtcImlcIixbMTUsXCJlXCJdLFsxNSxcInNcIl1dXSxbXCIkMFwiXV1dLFs1MixcIndcIixbMTMsWzQxLFwiJDBcIl0sWzMsXCIkMFwiLFtcImlcIixbMTUsXCJmXCJdLFsxNSxcInNcIl1dXSxbXCIkMFwiXV1dLFs1MyxbNDEsXCJ6XCJdLFszLFwielwiLDBdLFs2MyxbNyxcInpcIl0sWzIzLFsxNSxcInpcIl0sWzE3LFsxNSxcInJcIl0sXCJsZW5ndGhcIl1dLFszMyxbMTUsXCJ6XCJdLFszLFwielwiLFswLFsxNSxcInpcIl0sMV1dXSxbNDYsWzUzLFs1MixcImJhXCIsWzE2LFsxNSxcInJcIl0sWzE1LFwielwiXV1dLFsyMixbMzAsWzE3LFsxNSxcImJhXCJdLFwiZGlzYWxsb3dBbGxSZWdpb25zXCJdLFtcInlcIixbMTcsWzE1LFwiYmFcIl0sXCJkaXNhbGxvd2VkUmVnaW9uc1wiXV1dLFs0NixbXCJ4XCIsWzE3LFsxNSxcImJhXCJdLFwicmVkYWN0RmllbGRHcm91cFwiXV1dXV1dXV1dLFs1MCxcIm9cIixbNDYsXCJxXCJdLFs1MixcInJcIixbOF1dLFsyMixbMjgsWzE1LFwicVwiXV0sWzQ2LFszNixbMTUsXCJyXCJdXV1dLFs1MixcInNcIixbMixbMTUsXCJxXCJdLFwic3BsaXRcIixbNyxcIixcIl1dXSxbNTMsWzQxLFwidFwiXSxbMyxcInRcIiwwXSxbNjMsWzcsXCJ0XCJdLFsyMyxbMTUsXCJ0XCJdLFsxNyxbMTUsXCJzXCJdLFwibGVuZ3RoXCJdXSxbMzMsWzE1LFwidFwiXSxbMyxcInRcIixbMCxbMTUsXCJ0XCJdLDFdXV0sWzQ2LFs1MyxbNTIsXCJ1XCIsWzIsWzE2LFsxNSxcInNcIl0sWzE1LFwidFwiXV0sXCJ0cmltXCIsWzddXV0sWzIyLFsyOCxbMTUsXCJ1XCJdXSxbNDYsWzZdXV0sWzUyLFwidlwiLFsyLFsxNSxcInVcIl0sXCJzcGxpdFwiLFs3LFwiLVwiXV1dLFs1MixcIndcIixbMTYsWzE1LFwidlwiXSwwXV0sWzUyLFwieFwiLFszOSxbMjAsWzE3LFsxNSxcInZcIl0sXCJsZW5ndGhcIl0sMl0sWzE1LFwidVwiXSxbNDRdXV0sWzIyLFszMCxbMjgsWzE1LFwid1wiXV0sWzIxLFsxNyxbMTUsXCJ3XCJdLFwibGVuZ3RoXCJdLDJdXSxbNDYsWzZdXV0sWzIyLFsxLFsyMSxbMTUsXCJ4XCJdLFs0NF1dLFszMCxbMjMsWzE3LFsxNSxcInhcIl0sXCJsZW5ndGhcIl0sNF0sWzE4LFsxNyxbMTUsXCJ4XCJdLFwibGVuZ3RoXCJdLDZdXV0sWzQ2LFs2XV1dLFs0MyxbMTUsXCJyXCJdLFsxNSxcInVcIl0sdHJ1ZV1dXV1dLFszNixbMTUsXCJyXCJdXV0sWzUwLFwicFwiLFs0NixcInFcIl0sWzIyLFsyOCxbMTcsWzE1LFwicVwiXSxcInNldHRpbmdzVGFibGVcIl1dLFs0NixbMzYsWzddXV1dLFs1MixcInJcIixbOF1dLFs1MyxbNDEsXCJzXCJdLFszLFwic1wiLDBdLFs2MyxbNyxcInNcIl0sWzIzLFsxNSxcInNcIl0sWzE3LFsxNyxbMTUsXCJxXCJdLFwic2V0dGluZ3NUYWJsZVwiXSxcImxlbmd0aFwiXV0sWzMzLFsxNSxcInNcIl0sWzMsXCJzXCIsWzAsWzE1LFwic1wiXSwxXV1dLFs0NixbNTMsWzUyLFwidFwiLFsxNixbMTcsWzE1LFwicVwiXSxcInNldHRpbmdzVGFibGVcIl0sWzE1LFwic1wiXV1dLFs1MixcInVcIixbMTcsWzE1LFwidFwiXSxcInJlZGFjdEZpZWxkR3JvdXBcIl1dLFsyMixbMjgsWzE2LFsxNSxcIm1cIl0sWzE1LFwidVwiXV1dLFs0NixbNl1dXSxbNDMsWzE1LFwiclwiXSxbMTUsXCJ1XCJdLFs4LFwicmVkYWN0RmllbGRHcm91cFwiLFsxNSxcInVcIl0sXCJkaXNhbGxvd0FsbFJlZ2lvbnNcIixmYWxzZSxcImRpc2FsbG93ZWRSZWdpb25zXCIsWzhdXV0sWzUyLFwidlwiLFsxNixbMTUsXCJyXCJdLFsxNSxcInVcIl1dXSxbMjIsWzE3LFsxNSxcInRcIl0sXCJkaXNhbGxvd0FsbFJlZ2lvbnNcIl0sWzQ2LFs0MyxbMTUsXCJ2XCJdLFwiZGlzYWxsb3dBbGxSZWdpb25zXCIsdHJ1ZV0sWzZdXV0sWzQzLFsxNSxcInZcIl0sXCJkaXNhbGxvd2VkUmVnaW9uc1wiLFtcIm9cIixbMTcsWzE1LFwidFwiXSxcImRpc2FsbG93ZWRSZWdpb25zXCJdXV1dXV1dLFszNixbMixbMTUsXCJiXCJdLFwidmFsdWVzXCIsWzcsWzE1LFwiclwiXV1dXV0sWzUyLFwiYlwiLFtcInJlcXVpcmVcIixcIk9iamVjdFwiXV0sWzUyLFwiY1wiLFsxMyxbNDEsXCIkMFwiXSxbMyxcIiQwXCIsW1wicmVxdWlyZVwiLFwiaW50ZXJuYWwuZ2V0RmxhZ3NcIl1dLFtcIiQwXCJdXV0sWzUyLFwiZFwiLFtcInJlcXVpcmVcIixcImdldENvbnRhaW5lclZlcnNpb25cIl1dLFs1MixcImVcIixbXCJyZXF1aXJlXCIsXCJpbnRlcm5hbC5nZXRDb3VudHJ5Q29kZVwiXV0sWzUyLFwiZlwiLFtcInJlcXVpcmVcIixcImludGVybmFsLmdldFJlZ2lvbkNvZGVcIl1dLFs1MixcImdcIixbXCJyZXF1aXJlXCIsXCJpbnRlcm5hbC5zZXRSZW1vdGVDb25maWdQYXJhbWV0ZXJcIl1dLFs1MixcImhcIixbMTUsXCJfX21vZHVsZV9hY3Rpdml0aWVzXCJdXSxbNTIsXCJpXCIsWzE3LFsxNSxcImhcIl0sXCJ3aXRoUmVxdWVzdENvbnRleHRcIl1dLFs0MSxcImpcIl0sWzQxLFwia1wiXSxbNDEsXCJsXCJdLFs1MixcIm1cIixbOCxcIkdPT0dMRV9TSUdOQUxTXCIsWzcsWzgsXCJuYW1lXCIsXCJhbGxvd19nb29nbGVfc2lnbmFsc1wiLFwidmFsdWVcIixmYWxzZV1dLFwiREVWSUNFX0FORF9HRU9cIixbNyxbOCxcIm5hbWVcIixcImdlb19ncmFudWxhcml0eVwiLFwidmFsdWVcIix0cnVlXSxbOCxcIm5hbWVcIixcInJlZGFjdF9kZXZpY2VfaW5mb1wiLFwidmFsdWVcIix0cnVlXV1dXSxbMzYsWzgsXCJhcHBseVJlZ2lvblNjb3BlZFNldHRpbmdzXCIsWzE1LFwiblwiXSxcImV4dHJhY3RSZWRhY3RlZExvY2F0aW9uc1wiLFsxNSxcInBcIl1dXV0sWzM2LFtcImFcIl1dXV0sW1wiJDBcIl1dXVxuIFxuXVxuLFwiZW50aXRpZXNcIjp7XG5cIl9fY1wiOntcIjJcIjp0cnVlLFwiNFwiOnRydWV9XG4sXG5cIl9fY2NkX2F1dG9fcmVkYWN0XCI6e1wiMlwiOnRydWUsXCI0XCI6dHJ1ZX1cbixcblwiX19jY2RfY29udmVyc2lvbl9tYXJraW5nXCI6e1wiMlwiOnRydWUsXCI0XCI6dHJ1ZX1cbixcblwiX19jY2RfZW1fc2l0ZV9zZWFyY2hcIjp7XCIyXCI6dHJ1ZSxcIjRcIjp0cnVlfVxuLFxuXCJfX2NjZF9nYV9hZHNfbGlua1wiOntcIjJcIjp0cnVlLFwiNFwiOnRydWV9XG4sXG5cIl9fY2NkX2dhX2ZpcnN0XCI6e1wiMlwiOnRydWUsXCI0XCI6dHJ1ZX1cbixcblwiX19jY2RfZ2FfbGFzdFwiOntcIjJcIjp0cnVlLFwiNFwiOnRydWV9XG4sXG5cIl9fY2NkX2dhX3JlZ3Njb3BlXCI6e1wiMlwiOnRydWUsXCI0XCI6dHJ1ZX1cbixcblwiX19lXCI6e1wiMlwiOnRydWUsXCI0XCI6dHJ1ZX1cbixcblwiX19vZ3RfMXBfZGF0YV92MlwiOntcIjJcIjp0cnVlfVxuLFxuXCJfX29ndF9ldmVudF9jcmVhdGVcIjp7XCIyXCI6dHJ1ZSxcIjRcIjp0cnVlfVxuLFxuXCJfX29ndF9nYV9zZW5kXCI6e1wiMlwiOnRydWV9XG4sXG5cIl9fb2d0X2dvb2dsZV9zaWduYWxzXCI6e1wiMlwiOnRydWUsXCI0XCI6dHJ1ZX1cbixcblwiX19vZ3RfcmVmZXJyYWxfZXhjbHVzaW9uXCI6e1wiMlwiOnRydWV9XG4sXG5cIl9fb2d0X3Nlc3Npb25fdGltZW91dFwiOntcIjJcIjp0cnVlfVxuLFxuXCJfX3NldF9wcm9kdWN0X3NldHRpbmdzXCI6e1wiMlwiOnRydWUsXCI0XCI6dHJ1ZX1cblxuXG59XG4sXCJibG9iXCI6e1wiMVwiOlwiMlwifVxuLFwicGVybWlzc2lvbnNcIjp7XG5cIl9fY1wiOnt9XG4sXG5cIl9fY2NkX2F1dG9fcmVkYWN0XCI6e31cbixcblwiX19jY2RfY29udmVyc2lvbl9tYXJraW5nXCI6e31cbixcblwiX19jY2RfZW1fc2l0ZV9zZWFyY2hcIjp7XCJnZXRfdXJsXCI6e1widXJsUGFydHNcIjpcImFueVwiLFwicXVlcmllc0FsbG93ZWRcIjpcImFueVwifSxcInJlYWRfY29udGFpbmVyX2RhdGFcIjp7fX1cbixcblwiX19jY2RfZ2FfYWRzX2xpbmtcIjp7fVxuLFxuXCJfX2NjZF9nYV9maXJzdFwiOnt9XG4sXG5cIl9fY2NkX2dhX2xhc3RcIjp7fVxuLFxuXCJfX2NjZF9nYV9yZWdzY29wZVwiOntcInJlYWRfY29udGFpbmVyX2RhdGFcIjp7fX1cbixcblwiX19lXCI6e1wicmVhZF9ldmVudF9kYXRhXCI6e1wiZXZlbnREYXRhQWNjZXNzXCI6XCJzcGVjaWZpY1wiLFwia2V5UGF0dGVybnNcIjpbXCJldmVudFwiXX19XG4sXG5cIl9fb2d0XzFwX2RhdGFfdjJcIjp7XCJkZXRlY3RfdXNlcl9wcm92aWRlZF9kYXRhXCI6e1wibGltaXREYXRhU291cmNlc1wiOnRydWUsXCJhbGxvd0F1dG9EYXRhU291cmNlc1wiOnRydWUsXCJhbGxvd01hbnVhbERhdGFTb3VyY2VzXCI6ZmFsc2UsXCJhbGxvd0NvZGVEYXRhU291cmNlc1wiOmZhbHNlfX1cbixcblwiX19vZ3RfZXZlbnRfY3JlYXRlXCI6e1wiYWNjZXNzX3RlbXBsYXRlX3N0b3JhZ2VcIjp7fX1cbixcblwiX19vZ3RfZ2Ffc2VuZFwiOntcImFjY2Vzc19nbG9iYWxzXCI6e1wia2V5c1wiOlt7XCJrZXlcIjpcImdhLnFcIixcInJlYWRcIjp0cnVlLFwid3JpdGVcIjp0cnVlLFwiZXhlY3V0ZVwiOnRydWV9LHtcImtleVwiOlwiR29vZ2xlQW5hbHl0aWNzT2JqZWN0XCIsXCJyZWFkXCI6dHJ1ZSxcIndyaXRlXCI6ZmFsc2UsXCJleGVjdXRlXCI6ZmFsc2V9XX0sXCJyZWFkX2NvbnRhaW5lcl9kYXRhXCI6e319XG4sXG5cIl9fb2d0X2dvb2dsZV9zaWduYWxzXCI6e1wicmVhZF9jb250YWluZXJfZGF0YVwiOnt9fVxuLFxuXCJfX29ndF9yZWZlcnJhbF9leGNsdXNpb25cIjp7fVxuLFxuXCJfX29ndF9zZXNzaW9uX3RpbWVvdXRcIjp7fVxuLFxuXCJfX3NldF9wcm9kdWN0X3NldHRpbmdzXCI6e31cblxuXG59XG5cblxuXG4sXCJzZWN1cml0eV9ncm91cHNcIjp7XG5cImdvb2dsZVwiOltcblwiX19jXCJcbixcblwiX19jY2RfYXV0b19yZWRhY3RcIlxuLFxuXCJfX2NjZF9jb252ZXJzaW9uX21hcmtpbmdcIlxuLFxuXCJfX2NjZF9lbV9zaXRlX3NlYXJjaFwiXG4sXG5cIl9fY2NkX2dhX2Fkc19saW5rXCJcbixcblwiX19jY2RfZ2FfZmlyc3RcIlxuLFxuXCJfX2NjZF9nYV9sYXN0XCJcbixcblwiX19jY2RfZ2FfcmVnc2NvcGVcIlxuLFxuXCJfX2VcIlxuLFxuXCJfX29ndF8xcF9kYXRhX3YyXCJcbixcblwiX19vZ3RfZXZlbnRfY3JlYXRlXCJcbixcblwiX19vZ3RfZ2Ffc2VuZFwiXG4sXG5cIl9fb2d0X2dvb2dsZV9zaWduYWxzXCJcbixcblwiX19vZ3RfcmVmZXJyYWxfZXhjbHVzaW9uXCJcbixcblwiX19vZ3Rfc2Vzc2lvbl90aW1lb3V0XCJcbixcblwiX19zZXRfcHJvZHVjdF9zZXR0aW5nc1wiXG5cbl1cblxuXG59XG5cblxuXG59O1xuXG5cblxuXG52YXIgYmEsY2E9ZnVuY3Rpb24oYSl7dmFyIGI9MDtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gYjxhLmxlbmd0aD97ZG9uZTohMSx2YWx1ZTphW2IrK119Ontkb25lOiEwfX19LGRhPXR5cGVvZiBPYmplY3QuZGVmaW5lUHJvcGVydGllcz09XCJmdW5jdGlvblwiP09iamVjdC5kZWZpbmVQcm9wZXJ0eTpmdW5jdGlvbihhLGIsYyl7aWYoYT09QXJyYXkucHJvdG90eXBlfHxhPT1PYmplY3QucHJvdG90eXBlKXJldHVybiBhO2FbYl09Yy52YWx1ZTtyZXR1cm4gYX0sZmE9ZnVuY3Rpb24oYSl7Zm9yKHZhciBiPVtcIm9iamVjdFwiPT10eXBlb2YgZ2xvYmFsVGhpcyYmZ2xvYmFsVGhpcyxhLFwib2JqZWN0XCI9PXR5cGVvZiB3aW5kb3cmJndpbmRvdyxcIm9iamVjdFwiPT10eXBlb2Ygc2VsZiYmc2VsZixcIm9iamVjdFwiPT10eXBlb2YgZ2xvYmFsJiZnbG9iYWxdLGM9MDtjPGIubGVuZ3RoOysrYyl7dmFyIGQ9YltjXTtpZihkJiZkLk1hdGg9PU1hdGgpcmV0dXJuIGR9dGhyb3cgRXJyb3IoXCJDYW5ub3QgZmluZCBnbG9iYWwgb2JqZWN0XCIpO1xufSxoYT1mYSh0aGlzKSxpYT1mdW5jdGlvbihhLGIpe2lmKGIpYTp7Zm9yKHZhciBjPWhhLGQ9YS5zcGxpdChcIi5cIiksZT0wO2U8ZC5sZW5ndGgtMTtlKyspe3ZhciBmPWRbZV07aWYoIShmIGluIGMpKWJyZWFrIGE7Yz1jW2ZdfXZhciBnPWRbZC5sZW5ndGgtMV0saz1jW2ddLG09YihrKTttIT1rJiZtIT1udWxsJiZkYShjLGcse2NvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCx2YWx1ZTptfSl9fTtcbmlhKFwiU3ltYm9sXCIsZnVuY3Rpb24oYSl7aWYoYSlyZXR1cm4gYTt2YXIgYj1mdW5jdGlvbihmLGcpe3RoaXMuaj1mO2RhKHRoaXMsXCJkZXNjcmlwdGlvblwiLHtjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITAsdmFsdWU6Z30pfTtiLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmp9O3ZhciBjPVwianNjb21wX3N5bWJvbF9cIisoTWF0aC5yYW5kb20oKSoxRTk+Pj4wKStcIl9cIixkPTAsZT1mdW5jdGlvbihmKXtpZih0aGlzIGluc3RhbmNlb2YgZSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3ltYm9sIGlzIG5vdCBhIGNvbnN0cnVjdG9yXCIpO3JldHVybiBuZXcgYihjKyhmfHxcIlwiKStcIl9cIitkKyssZil9O3JldHVybiBlfSk7XG52YXIga2E9ZnVuY3Rpb24oYSl7cmV0dXJuIGphKGEsYSl9LGphPWZ1bmN0aW9uKGEsYil7YS5yYXc9YjtPYmplY3QuZnJlZXplJiYoT2JqZWN0LmZyZWV6ZShhKSxPYmplY3QuZnJlZXplKGIpKTtyZXR1cm4gYX0sbmE9ZnVuY3Rpb24oYSl7dmFyIGI9dHlwZW9mIFN5bWJvbCE9XCJ1bmRlZmluZWRcIiYmU3ltYm9sLml0ZXJhdG9yJiZhW1N5bWJvbC5pdGVyYXRvcl07aWYoYilyZXR1cm4gYi5jYWxsKGEpO2lmKHR5cGVvZiBhLmxlbmd0aD09XCJudW1iZXJcIilyZXR1cm57bmV4dDpjYShhKX07dGhyb3cgRXJyb3IoU3RyaW5nKGEpK1wiIGlzIG5vdCBhbiBpdGVyYWJsZSBvciBBcnJheUxpa2VcIik7fSxvYT1mdW5jdGlvbihhKXtmb3IodmFyIGIsYz1bXTshKGI9YS5uZXh0KCkpLmRvbmU7KWMucHVzaChiLnZhbHVlKTtyZXR1cm4gY30scGE9ZnVuY3Rpb24oYSl7cmV0dXJuIGEgaW5zdGFuY2VvZiBBcnJheT9hOm9hKG5hKGEpKX0scWE9dHlwZW9mIE9iamVjdC5hc3NpZ249PVwiZnVuY3Rpb25cIj9cbk9iamVjdC5hc3NpZ246ZnVuY3Rpb24oYSxiKXtmb3IodmFyIGM9MTtjPGFyZ3VtZW50cy5sZW5ndGg7YysrKXt2YXIgZD1hcmd1bWVudHNbY107aWYoZClmb3IodmFyIGUgaW4gZClPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZCxlKSYmKGFbZV09ZFtlXSl9cmV0dXJuIGF9O2lhKFwiT2JqZWN0LmFzc2lnblwiLGZ1bmN0aW9uKGEpe3JldHVybiBhfHxxYX0pO3ZhciByYT10eXBlb2YgT2JqZWN0LmNyZWF0ZT09XCJmdW5jdGlvblwiP09iamVjdC5jcmVhdGU6ZnVuY3Rpb24oYSl7dmFyIGI9ZnVuY3Rpb24oKXt9O2IucHJvdG90eXBlPWE7cmV0dXJuIG5ldyBifSxzYTtcbmlmKHR5cGVvZiBPYmplY3Quc2V0UHJvdG90eXBlT2Y9PVwiZnVuY3Rpb25cIilzYT1PYmplY3Quc2V0UHJvdG90eXBlT2Y7ZWxzZXt2YXIgdGE7YTp7dmFyIHVhPXthOiEwfSx2YT17fTt0cnl7dmEuX19wcm90b19fPXVhO3RhPXZhLmE7YnJlYWsgYX1jYXRjaChhKXt9dGE9ITF9c2E9dGE/ZnVuY3Rpb24oYSxiKXthLl9fcHJvdG9fXz1iO2lmKGEuX19wcm90b19fIT09Yil0aHJvdyBuZXcgVHlwZUVycm9yKGErXCIgaXMgbm90IGV4dGVuc2libGVcIik7cmV0dXJuIGF9Om51bGx9XG52YXIgeGE9c2EseWE9ZnVuY3Rpb24oYSxiKXthLnByb3RvdHlwZT1yYShiLnByb3RvdHlwZSk7YS5wcm90b3R5cGUuY29uc3RydWN0b3I9YTtpZih4YSl4YShhLGIpO2Vsc2UgZm9yKHZhciBjIGluIGIpaWYoYyE9XCJwcm90b3R5cGVcIilpZihPYmplY3QuZGVmaW5lUHJvcGVydGllcyl7dmFyIGQ9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihiLGMpO2QmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShhLGMsZCl9ZWxzZSBhW2NdPWJbY107YS5Qbj1iLnByb3RvdHlwZX0semE9ZnVuY3Rpb24oKXtmb3IodmFyIGE9TnVtYmVyKHRoaXMpLGI9W10sYz1hO2M8YXJndW1lbnRzLmxlbmd0aDtjKyspYltjLWFdPWFyZ3VtZW50c1tjXTtyZXR1cm4gYn07LypcblxuIENvcHlyaWdodCBUaGUgQ2xvc3VyZSBMaWJyYXJ5IEF1dGhvcnMuXG4gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcbiovXG52YXIgQWE9dGhpc3x8c2VsZixCYT1mdW5jdGlvbihhKXtyZXR1cm4gYX07dmFyIENhPWZ1bmN0aW9uKGEsYil7dGhpcy50eXBlPWE7dGhpcy5kYXRhPWJ9O3ZhciBEYT1mdW5jdGlvbigpe3RoaXMuaj17fTt0aGlzLkg9e319O2JhPURhLnByb3RvdHlwZTtiYS5nZXQ9ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMualtcImR1c3QuXCIrYV19O2JhLnNldD1mdW5jdGlvbihhLGIpe2E9XCJkdXN0LlwiK2E7dGhpcy5ILmhhc093blByb3BlcnR5KGEpfHwodGhpcy5qW2FdPWIpfTtiYS5OaD1mdW5jdGlvbihhLGIpe3RoaXMuc2V0KGEsYik7dGhpcy5IW1wiZHVzdC5cIithXT0hMH07YmEuaGFzPWZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLmouaGFzT3duUHJvcGVydHkoXCJkdXN0LlwiK2EpfTtiYS5yZW1vdmU9ZnVuY3Rpb24oYSl7YT1cImR1c3QuXCIrYTt0aGlzLkguaGFzT3duUHJvcGVydHkoYSl8fGRlbGV0ZSB0aGlzLmpbYV19O3ZhciBGYT1mdW5jdGlvbigpe307RmEucHJvdG90eXBlLnJlc2V0PWZ1bmN0aW9uKCl7fTt2YXIgR2E9ZnVuY3Rpb24oYSxiKXt0aGlzLlI9YTt0aGlzLnBhcmVudD1iO3RoaXMuaj10aGlzLkQ9dm9pZCAwO3RoaXMuTT0hMTt0aGlzLkg9ZnVuY3Rpb24oYyxkLGUpe3JldHVybiBjLmFwcGx5KGQsZSl9O3RoaXMudmFsdWVzPW5ldyBEYX07R2EucHJvdG90eXBlLmFkZD1mdW5jdGlvbihhLGIpe0hhKHRoaXMsYSxiLCExKX07dmFyIEhhPWZ1bmN0aW9uKGEsYixjLGQpe2EuTXx8KGQ/YS52YWx1ZXMuTmgoYixjKTphLnZhbHVlcy5zZXQoYixjKSl9O0dhLnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24oYSxiKXt0aGlzLk18fCghdGhpcy52YWx1ZXMuaGFzKGEpJiZ0aGlzLnBhcmVudCYmdGhpcy5wYXJlbnQuaGFzKGEpP3RoaXMucGFyZW50LnNldChhLGIpOnRoaXMudmFsdWVzLnNldChhLGIpKX07R2EucHJvdG90eXBlLmdldD1mdW5jdGlvbihhKXtyZXR1cm4gdGhpcy52YWx1ZXMuaGFzKGEpP3RoaXMudmFsdWVzLmdldChhKTp0aGlzLnBhcmVudD90aGlzLnBhcmVudC5nZXQoYSk6dm9pZCAwfTtcbkdhLnByb3RvdHlwZS5oYXM9ZnVuY3Rpb24oYSl7cmV0dXJuISF0aGlzLnZhbHVlcy5oYXMoYSl8fCEoIXRoaXMucGFyZW50fHwhdGhpcy5wYXJlbnQuaGFzKGEpKX07dmFyIElhPWZ1bmN0aW9uKGEpe3ZhciBiPW5ldyBHYShhLlIsYSk7YS5EJiYoYi5EPWEuRCk7Yi5IPWEuSDtiLmo9YS5qO3JldHVybiBifTtHYS5wcm90b3R5cGUucmQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5SfTtHYS5wcm90b3R5cGUuS2E9ZnVuY3Rpb24oKXt0aGlzLk09ITB9O2Z1bmN0aW9uIEphKGEsYil7Zm9yKHZhciBjLGQ9MDtkPGIubGVuZ3RoJiYhKGM9S2EoYSxiW2RdKSxjIGluc3RhbmNlb2YgQ2EpO2QrKyk7cmV0dXJuIGN9ZnVuY3Rpb24gS2EoYSxiKXt0cnl7dmFyIGM9YS5nZXQoU3RyaW5nKGJbMF0pKTtpZighY3x8dHlwZW9mIGMuaW52b2tlIT09XCJmdW5jdGlvblwiKXRocm93IEVycm9yKFwiQXR0ZW1wdGluZyB0byBleGVjdXRlIG5vbi1mdW5jdGlvbiBcIitiWzBdK1wiLlwiKTtyZXR1cm4gYy5pbnZva2UuYXBwbHkoYyxbYV0uY29uY2F0KGIuc2xpY2UoMSkpKX1jYXRjaChlKXt2YXIgZD1hLkQ7ZCYmZChlLGIuY29udGV4dD97aWQ6YlswXSxsaW5lOmIuY29udGV4dC5saW5lfTpudWxsKTt0aHJvdyBlO319O3ZhciBMYT1mdW5jdGlvbigpe3RoaXMuRD1uZXcgRmE7dGhpcy5qPW5ldyBHYSh0aGlzLkQpfTtiYT1MYS5wcm90b3R5cGU7YmEucmQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5EfTtiYS5leGVjdXRlPWZ1bmN0aW9uKGEpe3ZhciBiPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywwKTtyZXR1cm4gdGhpcy5MaChiKX07YmEuTGg9ZnVuY3Rpb24oKXtmb3IodmFyIGEsYj0wO2I8YXJndW1lbnRzLmxlbmd0aDtiKyspYT1LYSh0aGlzLmosYXJndW1lbnRzW2JdKTtyZXR1cm4gYX07YmEuTWs9ZnVuY3Rpb24oYSl7dmFyIGI9SWEodGhpcy5qKTtiLmo9YTtmb3IodmFyIGMsZD0xO2Q8YXJndW1lbnRzLmxlbmd0aDtkKyspYz1LYShiLGFyZ3VtZW50c1tkXSk7cmV0dXJuIGN9O2JhLkthPWZ1bmN0aW9uKCl7dGhpcy5qLkthKCl9O3ZhciBNYT1mdW5jdGlvbigpe0RhLmNhbGwodGhpcyk7dGhpcy5EPSExfTt5YShNYSxEYSk7dmFyIE5hPWZ1bmN0aW9uKGEsYil7dmFyIGM9W10sZDtmb3IoZCBpbiBhLmopaWYoYS5qLmhhc093blByb3BlcnR5KGQpKXN3aXRjaChkPWQuc3Vic3RyKDUpLGIpe2Nhc2UgMTpjLnB1c2goZCk7YnJlYWs7Y2FzZSAyOmMucHVzaChhLmdldChkKSk7YnJlYWs7Y2FzZSAzOmMucHVzaChbZCxhLmdldChkKV0pfXJldHVybiBjfTtNYS5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKGEsYil7dGhpcy5EfHxEYS5wcm90b3R5cGUuc2V0LmNhbGwodGhpcyxhLGIpfTtNYS5wcm90b3R5cGUuTmg9ZnVuY3Rpb24oYSxiKXt0aGlzLkR8fERhLnByb3RvdHlwZS5OaC5jYWxsKHRoaXMsYSxiKX07TWEucHJvdG90eXBlLnJlbW92ZT1mdW5jdGlvbihhKXt0aGlzLkR8fERhLnByb3RvdHlwZS5yZW1vdmUuY2FsbCh0aGlzLGEpfTtNYS5wcm90b3R5cGUuS2E9ZnVuY3Rpb24oKXt0aGlzLkQ9ITB9Oy8qXG4galF1ZXJ5IChjKSAyMDA1LCAyMDEyIGpRdWVyeSBGb3VuZGF0aW9uLCBJbmMuIGpxdWVyeS5vcmcvbGljZW5zZS5cbiovXG52YXIgUGE9L1xcW29iamVjdCAoQm9vbGVhbnxOdW1iZXJ8U3RyaW5nfEZ1bmN0aW9ufEFycmF5fERhdGV8UmVnRXhwKVxcXS8sUWE9ZnVuY3Rpb24oYSl7aWYoYT09bnVsbClyZXR1cm4gU3RyaW5nKGEpO3ZhciBiPVBhLmV4ZWMoT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKE9iamVjdChhKSkpO3JldHVybiBiP2JbMV0udG9Mb3dlckNhc2UoKTpcIm9iamVjdFwifSxSYT1mdW5jdGlvbihhLGIpe3JldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoT2JqZWN0KGEpLGIpfSxTYT1mdW5jdGlvbihhKXtpZighYXx8UWEoYSkhPVwib2JqZWN0XCJ8fGEubm9kZVR5cGV8fGE9PWEud2luZG93KXJldHVybiExO3RyeXtpZihhLmNvbnN0cnVjdG9yJiYhUmEoYSxcImNvbnN0cnVjdG9yXCIpJiYhUmEoYS5jb25zdHJ1Y3Rvci5wcm90b3R5cGUsXCJpc1Byb3RvdHlwZU9mXCIpKXJldHVybiExfWNhdGNoKGMpe3JldHVybiExfWZvcih2YXIgYiBpbiBhKTtyZXR1cm4gYj09PXZvaWQgMHx8XG5SYShhLGIpfSxoPWZ1bmN0aW9uKGEsYil7dmFyIGM9Ynx8KFFhKGEpPT1cImFycmF5XCI/W106e30pLGQ7Zm9yKGQgaW4gYSlpZihSYShhLGQpKXt2YXIgZT1hW2RdO1FhKGUpPT1cImFycmF5XCI/KFFhKGNbZF0pIT1cImFycmF5XCImJihjW2RdPVtdKSxjW2RdPWgoZSxjW2RdKSk6U2EoZSk/KFNhKGNbZF0pfHwoY1tkXT17fSksY1tkXT1oKGUsY1tkXSkpOmNbZF09ZX1yZXR1cm4gY307ZnVuY3Rpb24gVWEoYSl7aWYoYT09dm9pZCAwfHxBcnJheS5pc0FycmF5KGEpfHxTYShhKSlyZXR1cm4hMDtzd2l0Y2godHlwZW9mIGEpe2Nhc2UgXCJib29sZWFuXCI6Y2FzZSBcIm51bWJlclwiOmNhc2UgXCJzdHJpbmdcIjpjYXNlIFwiZnVuY3Rpb25cIjpyZXR1cm4hMH1yZXR1cm4hMX1mdW5jdGlvbiBWYShhKXtyZXR1cm4gdHlwZW9mIGE9PT1cIm51bWJlclwiJiZhPj0wJiZpc0Zpbml0ZShhKSYmYSUxPT09MHx8dHlwZW9mIGE9PT1cInN0cmluZ1wiJiZhWzBdIT09XCItXCImJmE9PT1cIlwiK3BhcnNlSW50KGEpfTt2YXIgV2E9ZnVuY3Rpb24oYSl7dGhpcy5qPVtdO3RoaXMuSD0hMTt0aGlzLkQ9bmV3IE1hO2E9YXx8W107Zm9yKHZhciBiIGluIGEpYS5oYXNPd25Qcm9wZXJ0eShiKSYmKFZhKGIpP3RoaXMualtOdW1iZXIoYildPWFbTnVtYmVyKGIpXTp0aGlzLkQuc2V0KGIsYVtiXSkpfTtiYT1XYS5wcm90b3R5cGU7YmEudG9TdHJpbmc9ZnVuY3Rpb24oYSl7aWYoYSYmYS5pbmRleE9mKHRoaXMpPj0wKXJldHVyblwiXCI7Zm9yKHZhciBiPVtdLGM9MDtjPHRoaXMuai5sZW5ndGg7YysrKXt2YXIgZD10aGlzLmpbY107ZD09PW51bGx8fGQ9PT12b2lkIDA/Yi5wdXNoKFwiXCIpOmQgaW5zdGFuY2VvZiBXYT8oYT1hfHxbXSxhLnB1c2godGhpcyksYi5wdXNoKGQudG9TdHJpbmcoYSkpLGEucG9wKCkpOmIucHVzaChTdHJpbmcoZCkpfXJldHVybiBiLmpvaW4oXCIsXCIpfTtcbmJhLnNldD1mdW5jdGlvbihhLGIpe2lmKCF0aGlzLkgpaWYoYT09PVwibGVuZ3RoXCIpe2lmKCFWYShiKSl0aHJvdyBFcnJvcihcIlJhbmdlRXJyb3I6IExlbmd0aCBwcm9wZXJ0eSBtdXN0IGJlIGEgdmFsaWQgaW50ZWdlci5cIik7dGhpcy5qLmxlbmd0aD1OdW1iZXIoYil9ZWxzZSBWYShhKT90aGlzLmpbTnVtYmVyKGEpXT1iOnRoaXMuRC5zZXQoYSxiKX07YmEuZ2V0PWZ1bmN0aW9uKGEpe3JldHVybiBhPT09XCJsZW5ndGhcIj90aGlzLmxlbmd0aCgpOlZhKGEpP3RoaXMualtOdW1iZXIoYSldOnRoaXMuRC5nZXQoYSl9O2JhLmxlbmd0aD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmoubGVuZ3RofTtiYS5OYj1mdW5jdGlvbigpe2Zvcih2YXIgYT1OYSh0aGlzLkQsMSksYj0wO2I8dGhpcy5qLmxlbmd0aDtiKyspYS5wdXNoKGIrXCJcIik7cmV0dXJuIG5ldyBXYShhKX07YmEucmVtb3ZlPWZ1bmN0aW9uKGEpe1ZhKGEpP2RlbGV0ZSB0aGlzLmpbTnVtYmVyKGEpXTp0aGlzLkQucmVtb3ZlKGEpfTtcbmJhLnBvcD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmoucG9wKCl9O2JhLnB1c2g9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5qLnB1c2guYXBwbHkodGhpcy5qLEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cykpfTtiYS5zaGlmdD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmouc2hpZnQoKX07YmEuc3BsaWNlPWZ1bmN0aW9uKGEsYil7cmV0dXJuIG5ldyBXYSh0aGlzLmouc3BsaWNlLmFwcGx5KHRoaXMuaixhcmd1bWVudHMpKX07YmEudW5zaGlmdD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmoudW5zaGlmdC5hcHBseSh0aGlzLmosQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKSl9O2JhLmhhcz1mdW5jdGlvbihhKXtyZXR1cm4gVmEoYSkmJnRoaXMuai5oYXNPd25Qcm9wZXJ0eShhKXx8dGhpcy5ELmhhcyhhKX07YmEuS2E9ZnVuY3Rpb24oKXt0aGlzLkg9ITA7T2JqZWN0LmZyZWV6ZSh0aGlzLmopO3RoaXMuRC5LYSgpfTtcbmZ1bmN0aW9uIFhhKGEpe2Zvcih2YXIgYj1bXSxjPTA7YzxhLmxlbmd0aCgpO2MrKylhLmhhcyhjKSYmKGJbY109YS5nZXQoYykpO3JldHVybiBifTt2YXIgWWE9ZnVuY3Rpb24oKXtNYS5jYWxsKHRoaXMpfTt5YShZYSxNYSk7WWEucHJvdG90eXBlLk5iPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBXYShOYSh0aGlzLDEpKX07dmFyIFphPWZ1bmN0aW9uKGEpe2Zvcih2YXIgYj1OYShhLDMpLGM9bmV3IFdhLGQ9MDtkPGIubGVuZ3RoO2QrKyl7dmFyIGU9bmV3IFdhKGJbZF0pO2MucHVzaChlKX1yZXR1cm4gY307ZnVuY3Rpb24gYWIoKXtmb3IodmFyIGE9YmIsYj17fSxjPTA7YzxhLmxlbmd0aDsrK2MpYlthW2NdXT1jO3JldHVybiBifWZ1bmN0aW9uIGNiKCl7dmFyIGE9XCJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWlwiO2ErPWEudG9Mb3dlckNhc2UoKStcIjAxMjM0NTY3ODktX1wiO3JldHVybiBhK1wiLlwifXZhciBiYixkYjtmdW5jdGlvbiBlYihhKXtiYj1iYnx8Y2IoKTtkYj1kYnx8YWIoKTtmb3IodmFyIGI9W10sYz0wO2M8YS5sZW5ndGg7Yys9Myl7dmFyIGQ9YysxPGEubGVuZ3RoLGU9YysyPGEubGVuZ3RoLGY9YS5jaGFyQ29kZUF0KGMpLGc9ZD9hLmNoYXJDb2RlQXQoYysxKTowLGs9ZT9hLmNoYXJDb2RlQXQoYysyKTowLG09Zj4+MixuPShmJjMpPDw0fGc+PjQscD0oZyYxNSk8PDJ8az4+NixxPWsmNjM7ZXx8KHE9NjQsZHx8KHA9NjQpKTtiLnB1c2goYmJbbV0sYmJbbl0sYmJbcF0sYmJbcV0pfXJldHVybiBiLmpvaW4oXCJcIil9XG5mdW5jdGlvbiBmYihhKXtmdW5jdGlvbiBiKG0pe2Zvcig7ZDxhLmxlbmd0aDspe3ZhciBuPWEuY2hhckF0KGQrKykscD1kYltuXTtpZihwIT1udWxsKXJldHVybiBwO2lmKCEvXltcXHNcXHhhMF0qJC8udGVzdChuKSl0aHJvdyBFcnJvcihcIlVua25vd24gYmFzZTY0IGVuY29kaW5nIGF0IGNoYXI6IFwiK24pO31yZXR1cm4gbX1iYj1iYnx8Y2IoKTtkYj1kYnx8YWIoKTtmb3IodmFyIGM9XCJcIixkPTA7Oyl7dmFyIGU9YigtMSksZj1iKDApLGc9Yig2NCksaz1iKDY0KTtpZihrPT09NjQmJmU9PT0tMSlyZXR1cm4gYztjKz1TdHJpbmcuZnJvbUNoYXJDb2RlKGU8PDJ8Zj4+NCk7ZyE9PTY0JiYoYys9U3RyaW5nLmZyb21DaGFyQ29kZShmPDw0JjI0MHxnPj4yKSxrIT09NjQmJihjKz1TdHJpbmcuZnJvbUNoYXJDb2RlKGc8PDYmMTkyfGspKSl9fTt2YXIgZ2I9e307ZnVuY3Rpb24gaGIoYSxiKXtnYlthXT1nYlthXXx8W107Z2JbYV1bYl09ITB9ZnVuY3Rpb24gaWIoYSl7dmFyIGI9Z2JbYV07aWYoIWJ8fGIubGVuZ3RoPT09MClyZXR1cm5cIlwiO2Zvcih2YXIgYz1bXSxkPTAsZT0wO2U8Yi5sZW5ndGg7ZSsrKWUlOD09PTAmJmU+MCYmKGMucHVzaChTdHJpbmcuZnJvbUNoYXJDb2RlKGQpKSxkPTApLGJbZV0mJihkfD0xPDxlJTgpO2Q+MCYmYy5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUoZCkpO3JldHVybiBlYihjLmpvaW4oXCJcIikpLnJlcGxhY2UoL1xcLiskLyxcIlwiKX1mdW5jdGlvbiBqYigpe2Zvcih2YXIgYT1bXSxiPWdiLmZkcnx8W10sYz0wO2M8Yi5sZW5ndGg7YysrKWJbY10mJmEucHVzaChjKTtyZXR1cm4gYS5sZW5ndGg+MD9hOnZvaWQgMH07dmFyIGtiPVtdLGxiPXt9O2Z1bmN0aW9uIG1iKGEpe3JldHVybiBrYlthXT09PXZvaWQgMD8hMTprYlthXX07ZnVuY3Rpb24gbmIoKXt9ZnVuY3Rpb24gb2IoYSl7cmV0dXJuIHR5cGVvZiBhPT09XCJmdW5jdGlvblwifWZ1bmN0aW9uIGwoYSl7cmV0dXJuIHR5cGVvZiBhPT09XCJzdHJpbmdcIn1mdW5jdGlvbiBwYihhKXtyZXR1cm4gdHlwZW9mIGE9PT1cIm51bWJlclwiJiYhaXNOYU4oYSl9ZnVuY3Rpb24gcWIoYSl7cmV0dXJuIEFycmF5LmlzQXJyYXkoYSk/YTpbYV19ZnVuY3Rpb24gcmIoYSxiKXtpZihhJiZBcnJheS5pc0FycmF5KGEpKWZvcih2YXIgYz0wO2M8YS5sZW5ndGg7YysrKWlmKGFbY10mJmIoYVtjXSkpcmV0dXJuIGFbY119ZnVuY3Rpb24gc2IoYSxiKXtpZighcGIoYSl8fCFwYihiKXx8YT5iKWE9MCxiPTIxNDc0ODM2NDc7cmV0dXJuIE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSooYi1hKzEpK2EpfVxuZnVuY3Rpb24gdGIoYSxiKXtmb3IodmFyIGM9bmV3IHViLGQ9MDtkPGEubGVuZ3RoO2QrKyljLnNldChhW2RdLCEwKTtmb3IodmFyIGU9MDtlPGIubGVuZ3RoO2UrKylpZihjLmdldChiW2VdKSlyZXR1cm4hMDtyZXR1cm4hMX1mdW5jdGlvbiB6KGEsYil7Zm9yKHZhciBjIGluIGEpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGEsYykmJmIoYyxhW2NdKX1mdW5jdGlvbiB2YihhKXtyZXR1cm4hIWEmJihPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoYSk9PT1cIltvYmplY3QgQXJndW1lbnRzXVwifHxPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYSxcImNhbGxlZVwiKSl9ZnVuY3Rpb24gd2IoYSl7cmV0dXJuIE1hdGgucm91bmQoTnVtYmVyKGEpKXx8MH1mdW5jdGlvbiB4YihhKXtyZXR1cm5cImZhbHNlXCI9PT1TdHJpbmcoYSkudG9Mb3dlckNhc2UoKT8hMTohIWF9XG5mdW5jdGlvbiB5YihhKXt2YXIgYj1bXTtpZihBcnJheS5pc0FycmF5KGEpKWZvcih2YXIgYz0wO2M8YS5sZW5ndGg7YysrKWIucHVzaChTdHJpbmcoYVtjXSkpO3JldHVybiBifWZ1bmN0aW9uIHpiKGEpe3JldHVybiBhP2EucmVwbGFjZSgvXlxccyt8XFxzKyQvZyxcIlwiKTpcIlwifWZ1bmN0aW9uIEFiKCl7cmV0dXJuIG5ldyBEYXRlKERhdGUubm93KCkpfWZ1bmN0aW9uIEJiKCl7cmV0dXJuIEFiKCkuZ2V0VGltZSgpfXZhciB1Yj1mdW5jdGlvbigpe3RoaXMucHJlZml4PVwiZ3RtLlwiO3RoaXMudmFsdWVzPXt9fTt1Yi5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKGEsYil7dGhpcy52YWx1ZXNbdGhpcy5wcmVmaXgrYV09Yn07dWIucHJvdG90eXBlLmdldD1mdW5jdGlvbihhKXtyZXR1cm4gdGhpcy52YWx1ZXNbdGhpcy5wcmVmaXgrYV19O3ViLnByb3RvdHlwZS5jb250YWlucz1mdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5nZXQoYSkhPT12b2lkIDB9O1xuZnVuY3Rpb24gQ2IoYSxiLGMpe3JldHVybiBhJiZhLmhhc093blByb3BlcnR5KGIpP2FbYl06Y31mdW5jdGlvbiBEYihhKXt2YXIgYj1hO3JldHVybiBmdW5jdGlvbigpe2lmKGIpe3ZhciBjPWI7Yj12b2lkIDA7dHJ5e2MoKX1jYXRjaChkKXt9fX19ZnVuY3Rpb24gRWIoYSxiKXtmb3IodmFyIGMgaW4gYiliLmhhc093blByb3BlcnR5KGMpJiYoYVtjXT1iW2NdKX1mdW5jdGlvbiBGYihhLGIpe2Zvcih2YXIgYz1bXSxkPTA7ZDxhLmxlbmd0aDtkKyspYy5wdXNoKGFbZF0pLGMucHVzaC5hcHBseShjLGJbYVtkXV18fFtdKTtyZXR1cm4gY31mdW5jdGlvbiBHYihhLGIpe3JldHVybiBhLmxlbmd0aD49Yi5sZW5ndGgmJmEuc3Vic3RyaW5nKDAsYi5sZW5ndGgpPT09Yn1mdW5jdGlvbiBIYihhLGIpe3JldHVybiBhLmxlbmd0aD49Yi5sZW5ndGgmJmEuc3Vic3RyaW5nKGEubGVuZ3RoLWIubGVuZ3RoLGEubGVuZ3RoKT09PWJ9XG5mdW5jdGlvbiBJYihhLGIpe3ZhciBjPUQ7Yj1ifHxbXTtmb3IodmFyIGQ9YyxlPTA7ZTxhLmxlbmd0aC0xO2UrKyl7aWYoIWQuaGFzT3duUHJvcGVydHkoYVtlXSkpcmV0dXJuO2Q9ZFthW2VdXTtpZihiLmluZGV4T2YoZCk+PTApcmV0dXJufXJldHVybiBkfWZ1bmN0aW9uIEpiKGEsYil7Zm9yKHZhciBjPXt9LGQ9YyxlPWEuc3BsaXQoXCIuXCIpLGY9MDtmPGUubGVuZ3RoLTE7ZisrKWQ9ZFtlW2ZdXT17fTtkW2VbZS5sZW5ndGgtMV1dPWI7cmV0dXJuIGN9dmFyIEtiPS9eXFx3ezEsOX0kLztmdW5jdGlvbiBMYihhLGIpe2E9YXx8e307Yj1ifHxcIixcIjt2YXIgYz1bXTt6KGEsZnVuY3Rpb24oZCxlKXtLYi50ZXN0KGQpJiZlJiZjLnB1c2goZCl9KTtyZXR1cm4gYy5qb2luKGIpfWZ1bmN0aW9uIE1iKGEsYil7ZnVuY3Rpb24gYygpe2UmJisrZD09PWImJihlKCksZT1udWxsLGMuZG9uZT0hMCl9dmFyIGQ9MCxlPWE7Yy5kb25lPSExO3JldHVybiBjfVxuZnVuY3Rpb24gTmIoYSl7aWYoIWEpcmV0dXJuIGE7dmFyIGI9YTtpZihtYigzKSl0cnl7Yj1kZWNvZGVVUklDb21wb25lbnQoYSl9Y2F0Y2goZCl7fXZhciBjPWIuc3BsaXQoXCIsXCIpO3JldHVybiBjLmxlbmd0aD09PTImJmNbMF09PT1jWzFdP2NbMF06YX07dmFyIE9iLFBiPWZ1bmN0aW9uKCl7aWYoT2I9PT12b2lkIDApe3ZhciBhPW51bGwsYj1BYS50cnVzdGVkVHlwZXM7aWYoYiYmYi5jcmVhdGVQb2xpY3kpe3RyeXthPWIuY3JlYXRlUG9saWN5KFwiZ29vZyNodG1sXCIse2NyZWF0ZUhUTUw6QmEsY3JlYXRlU2NyaXB0OkJhLGNyZWF0ZVNjcmlwdFVSTDpCYX0pfWNhdGNoKGMpe0FhLmNvbnNvbGUmJkFhLmNvbnNvbGUuZXJyb3IoYy5tZXNzYWdlKX1PYj1hfWVsc2UgT2I9YX1yZXR1cm4gT2J9O3ZhciBRYj17fSxSYj1mdW5jdGlvbihhKXt0aGlzLmo9YX07UmIucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaitcIlwifTt2YXIgU2I9ZnVuY3Rpb24oYSl7cmV0dXJuIGEgaW5zdGFuY2VvZiBSYiYmYS5jb25zdHJ1Y3Rvcj09PVJiP2EuajpcInR5cGVfZXJyb3I6VHJ1c3RlZFJlc291cmNlVXJsXCJ9LFRiPWZ1bmN0aW9uKGEpe3ZhciBiPWEsYz1QYigpLGQ9Yz9jLmNyZWF0ZVNjcmlwdFVSTChiKTpiO3JldHVybiBuZXcgUmIoZCxRYil9Oy8qXG5cbiBDb3B5cmlnaHQgR29vZ2xlIExMQ1xuIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG4qL1xudmFyIFViPWthKFtcIlwiXSksVmI9amEoW1wiXFx4MDBcIl0sW1wiXFxcXDBcIl0pLFdiPWphKFtcIlxcblwiXSxbXCJcXFxcblwiXSksWGI9amEoW1wiXFx4MDBcIl0sW1wiXFxcXHUwMDAwXCJdKTtmdW5jdGlvbiBZYihhKXtyZXR1cm4gYS50b1N0cmluZygpLmluZGV4T2YoXCJgXCIpPT09LTF9WWIoZnVuY3Rpb24oYSl7cmV0dXJuIGEoVWIpfSl8fFliKGZ1bmN0aW9uKGEpe3JldHVybiBhKFZiKX0pfHxZYihmdW5jdGlvbihhKXtyZXR1cm4gYShXYil9KXx8WWIoZnVuY3Rpb24oYSl7cmV0dXJuIGEoWGIpfSk7dmFyIFpiPWZ1bmN0aW9uKGEpe3RoaXMuaj1hfTtaYi5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5qfTt2YXIgJGI9bmV3IFpiKFwiYWJvdXQ6aW52YWxpZCN6Q2xvc3VyZXpcIik7dmFyIGFjPWZ1bmN0aW9uKGEpe3RoaXMuaG09YX07ZnVuY3Rpb24gYmMoYSl7cmV0dXJuIG5ldyBhYyhmdW5jdGlvbihiKXtyZXR1cm4gYi5zdWJzdHIoMCxhLmxlbmd0aCsxKS50b0xvd2VyQ2FzZSgpPT09YStcIjpcIn0pfXZhciBjYz1bYmMoXCJkYXRhXCIpLGJjKFwiaHR0cFwiKSxiYyhcImh0dHBzXCIpLGJjKFwibWFpbHRvXCIpLGJjKFwiZnRwXCIpLG5ldyBhYyhmdW5jdGlvbihhKXtyZXR1cm4vXlteOl0qKFsvPyNdfCQpLy50ZXN0KGEpfSldO2Z1bmN0aW9uIGRjKGEsYil7Yj1iPT09dm9pZCAwP2NjOmI7aWYoYSBpbnN0YW5jZW9mIFpiKXJldHVybiBhO2Zvcih2YXIgYz0wO2M8Yi5sZW5ndGg7KytjKXt2YXIgZD1iW2NdO2lmKGQgaW5zdGFuY2VvZiBhYyYmZC5obShhKSlyZXR1cm4gbmV3IFpiKGEpfX1mdW5jdGlvbiBlYyhhKXt2YXIgYjtiPWI9PT12b2lkIDA/Y2M6YjtyZXR1cm4gZGMoYSxiKXx8JGJ9dmFyIGZjPS9eXFxzKig/IWphdmFzY3JpcHQ6KSg/OltcXHcrLi1dKzp8W146Lz8jXSooPzpbLz8jXXwkKSkvaTtcbmZ1bmN0aW9uIGdjKGEpe3ZhciBiO2lmKGEgaW5zdGFuY2VvZiBaYilpZihhIGluc3RhbmNlb2YgWmIpYj1hLmo7ZWxzZSB0aHJvdyBFcnJvcihcIlwiKTtlbHNlIGI9ZmMudGVzdChhKT9hOnZvaWQgMDtyZXR1cm4gYn07dmFyIGljPWZ1bmN0aW9uKCl7dGhpcy5qPWhjWzBdLnRvTG93ZXJDYXNlKCl9O2ljLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmp9O3ZhciBqYz1mdW5jdGlvbihhKXt0aGlzLmo9YX07amMucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaitcIlwifTtmdW5jdGlvbiBrYyhhLGIpe3ZhciBjPVtuZXcgaWNdO2lmKGMubGVuZ3RoPT09MCl0aHJvdyBFcnJvcihcIlwiKTt2YXIgZD1jLm1hcChmdW5jdGlvbihmKXt2YXIgZztpZihmIGluc3RhbmNlb2YgaWMpZz1mLmo7ZWxzZSB0aHJvdyBFcnJvcihcIlwiKTtyZXR1cm4gZ30pLGU9Yi50b0xvd2VyQ2FzZSgpO2lmKGQuZXZlcnkoZnVuY3Rpb24oZil7cmV0dXJuIGUuaW5kZXhPZihmKSE9PTB9KSl0aHJvdyBFcnJvcignQXR0cmlidXRlIFwiJytiKydcIiBkb2VzIG5vdCBtYXRjaCBhbnkgb2YgdGhlIGFsbG93ZWQgcHJlZml4ZXMuJyk7YS5zZXRBdHRyaWJ1dGUoYixcInRydWVcIil9O2Z1bmN0aW9uIGxjKGEsYil7dmFyIGM9Z2MoYik7YyE9PXZvaWQgMCYmKGEuYWN0aW9uPWMpfTt2YXIgbWM9QXJyYXkucHJvdG90eXBlLmluZGV4T2Y/ZnVuY3Rpb24oYSxiKXtyZXR1cm4gQXJyYXkucHJvdG90eXBlLmluZGV4T2YuY2FsbChhLGIsdm9pZCAwKX06ZnVuY3Rpb24oYSxiKXtpZih0eXBlb2YgYT09PVwic3RyaW5nXCIpcmV0dXJuIHR5cGVvZiBiIT09XCJzdHJpbmdcInx8Yi5sZW5ndGghPTE/LTE6YS5pbmRleE9mKGIsMCk7Zm9yKHZhciBjPTA7YzxhLmxlbmd0aDtjKyspaWYoYyBpbiBhJiZhW2NdPT09YilyZXR1cm4gYztyZXR1cm4tMX07XCJBUlRJQ0xFIFNFQ1RJT04gTkFWIEFTSURFIEgxIEgyIEgzIEg0IEg1IEg2IEhFQURFUiBGT09URVIgQUREUkVTUyBQIEhSIFBSRSBCTE9DS1FVT1RFIE9MIFVMIExIIExJIERMIERUIEREIEZJR1VSRSBGSUdDQVBUSU9OIE1BSU4gRElWIEVNIFNUUk9ORyBTTUFMTCBTIENJVEUgUSBERk4gQUJCUiBSVUJZIFJCIFJUIFJUQyBSUCBEQVRBIFRJTUUgQ09ERSBWQVIgU0FNUCBLQkQgU1VCIFNVUCBJIEIgVSBNQVJLIEJESSBCRE8gU1BBTiBCUiBXQlIgTk9CUiBJTlMgREVMIFBJQ1RVUkUgUEFSQU0gVFJBQ0sgTUFQIFRBQkxFIENBUFRJT04gQ09MR1JPVVAgQ09MIFRCT0RZIFRIRUFEIFRGT09UIFRSIFREIFRIIFNFTEVDVCBEQVRBTElTVCBPUFRHUk9VUCBPUFRJT04gT1VUUFVUIFBST0dSRVNTIE1FVEVSIEZJRUxEU0VUIExFR0VORCBERVRBSUxTIFNVTU1BUlkgTUVOVSBESUFMT0cgU0xPVCBDQU5WQVMgRk9OVCBDRU5URVIgQUNST05ZTSBCQVNFRk9OVCBCSUcgRElSIEhHUk9VUCBTVFJJS0UgVFRcIi5zcGxpdChcIiBcIikuY29uY2F0KFtcIkJVVFRPTlwiLFxuXCJJTlBVVFwiXSk7ZnVuY3Rpb24gbmMoYSl7cmV0dXJuIGE9PT1udWxsP1wibnVsbFwiOmE9PT12b2lkIDA/XCJ1bmRlZmluZWRcIjphfTt2YXIgRD13aW5kb3csRT1kb2N1bWVudCxvYz1uYXZpZ2F0b3IscGM9ZnVuY3Rpb24oKXt2YXIgYTt0cnl7YT1vYy5zZXJ2aWNlV29ya2VyfWNhdGNoKGIpe3JldHVybn1yZXR1cm4gYX0scWM9RS5jdXJyZW50U2NyaXB0LHJjPXFjJiZxYy5zcmMsc2M9ZnVuY3Rpb24oYSxiKXt2YXIgYz1EW2FdO0RbYV09Yz09PXZvaWQgMD9iOmM7cmV0dXJuIERbYV19O2Z1bmN0aW9uIHRjKGEpe3JldHVybihvYy51c2VyQWdlbnR8fFwiXCIpLmluZGV4T2YoYSkhPT0tMX12YXIgdWM9e2FzeW5jOjEsbm9uY2U6MSxvbmVycm9yOjEsb25sb2FkOjEsc3JjOjEsdHlwZToxfSx2Yz17b25sb2FkOjEsc3JjOjEsd2lkdGg6MSxoZWlnaHQ6MSxzdHlsZToxfTtmdW5jdGlvbiB3YyhhLGIsYyl7YiYmeihiLGZ1bmN0aW9uKGQsZSl7ZD1kLnRvTG93ZXJDYXNlKCk7Yy5oYXNPd25Qcm9wZXJ0eShkKXx8YS5zZXRBdHRyaWJ1dGUoZCxlKX0pfVxudmFyIHhjPWZ1bmN0aW9uKGEsYixjLGQsZSl7dmFyIGY9RS5jcmVhdGVFbGVtZW50KFwic2NyaXB0XCIpO3djKGYsZCx1Yyk7Zi50eXBlPVwidGV4dC9qYXZhc2NyaXB0XCI7Zi5hc3luYz1kJiZkLmFzeW5jPT09ITE/ITE6ITA7dmFyIGc7Zz1UYihuYyhhKSk7Zi5zcmM9U2IoZyk7dmFyIGssbSxuLHA9KG49KG09KGYub3duZXJEb2N1bWVudCYmZi5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3fHx3aW5kb3cpLmRvY3VtZW50KS5xdWVyeVNlbGVjdG9yKT09bnVsbD92b2lkIDA6bi5jYWxsKG0sXCJzY3JpcHRbbm9uY2VdXCIpOyhrPXA/cC5ub25jZXx8cC5nZXRBdHRyaWJ1dGUoXCJub25jZVwiKXx8XCJcIjpcIlwiKSYmZi5zZXRBdHRyaWJ1dGUoXCJub25jZVwiLGspO2ImJihmLm9ubG9hZD1iKTtjJiYoZi5vbmVycm9yPWMpO2lmKGUpZS5hcHBlbmRDaGlsZChmKTtlbHNle3ZhciBxPUUuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCJzY3JpcHRcIilbMF18fEUuYm9keXx8RS5oZWFkO3EucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoZixcbnEpfXJldHVybiBmfSx5Yz1mdW5jdGlvbigpe2lmKHJjKXt2YXIgYT1yYy50b0xvd2VyQ2FzZSgpO2lmKGEuaW5kZXhPZihcImh0dHBzOi8vXCIpPT09MClyZXR1cm4gMjtpZihhLmluZGV4T2YoXCJodHRwOi8vXCIpPT09MClyZXR1cm4gM31yZXR1cm4gMX0semM9ZnVuY3Rpb24oYSxiLGMsZCxlKXt2YXIgZjtmPWY9PT12b2lkIDA/ITA6Zjt2YXIgZz1lLGs9ITE7Z3x8KGc9RS5jcmVhdGVFbGVtZW50KFwiaWZyYW1lXCIpLGs9ITApO3djKGcsYyx2Yyk7ZCYmeihkLGZ1bmN0aW9uKG4scCl7Zy5kYXRhc2V0W25dPXB9KTtmJiYoZy5oZWlnaHQ9XCIwXCIsZy53aWR0aD1cIjBcIixnLnN0eWxlLmRpc3BsYXk9XCJub25lXCIsZy5zdHlsZS52aXNpYmlsaXR5PVwiaGlkZGVuXCIpO2EhPT12b2lkIDAmJihnLnNyYz1hKTtpZihrKXt2YXIgbT1FLmJvZHkmJkUuYm9keS5sYXN0Q2hpbGR8fEUuYm9keXx8RS5oZWFkO20ucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoZyxtKX1iJiYoZy5vbmxvYWQ9Yik7cmV0dXJuIGd9LFxuQWM9ZnVuY3Rpb24oYSxiLGMsZCl7dmFyIGU9bmV3IEltYWdlKDEsMSk7d2MoZSxkLHt9KTtlLm9ubG9hZD1mdW5jdGlvbigpe2Uub25sb2FkPW51bGw7YiYmYigpfTtlLm9uZXJyb3I9ZnVuY3Rpb24oKXtlLm9uZXJyb3I9bnVsbDtjJiZjKCl9O2Uuc3JjPWE7cmV0dXJuIGV9LEJjPWZ1bmN0aW9uKGEsYixjLGQpe0FjKGEsYixjLGQpfSxDYz1mdW5jdGlvbihhLGIsYyxkKXthLmFkZEV2ZW50TGlzdGVuZXI/YS5hZGRFdmVudExpc3RlbmVyKGIsYywhIWQpOmEuYXR0YWNoRXZlbnQmJmEuYXR0YWNoRXZlbnQoXCJvblwiK2IsYyl9LERjPWZ1bmN0aW9uKGEsYixjKXthLnJlbW92ZUV2ZW50TGlzdGVuZXI/YS5yZW1vdmVFdmVudExpc3RlbmVyKGIsYywhMSk6YS5kZXRhY2hFdmVudCYmYS5kZXRhY2hFdmVudChcIm9uXCIrYixjKX0sRz1mdW5jdGlvbihhKXtELnNldFRpbWVvdXQoYSwwKX0sRWM9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gYSYmYiYmYS5hdHRyaWJ1dGVzJiZhLmF0dHJpYnV0ZXNbYl0/XG5hLmF0dHJpYnV0ZXNbYl0udmFsdWU6bnVsbH0sRmM9ZnVuY3Rpb24oYSl7ZnVuY3Rpb24gYihlKXtlJiZlIT1cIiBcIiYmKGU9ZS5yZXBsYWNlKC9eW1xcc1xceGEwXSt8W1xcc1xceGEwXSskL2csXCJcIikpO2UmJmUhPVwiIFwiJiYoZT1lLnJlcGxhY2UoL15bXFxzXFx4YTBdK3xbXFxzXFx4YTBdKyQvZyxcIlwiKSk7ZSYmKGU9ZS5yZXBsYWNlKC8oXFx4YTArfFxcc3syLH18XFxufFxcclxcdCkvZyxcIiBcIikpO3JldHVybiBlfXZhciBjPWIoYS5pbm5lclRleHR8fGEudGV4dENvbnRlbnR8fFwiXCIpO2lmKG1iKDEwKSl7dmFyIGQ9YihhLnRleHRDb250ZW50fHxcIlwiKTtoYihcIlRBR0dJTkdcIiwyNik7ZCE9PWMmJmhiKFwiVEFHR0lOR1wiLDI1KX1yZXR1cm4gY30sR2M9ZnVuY3Rpb24oYSl7dmFyIGI9RS5jcmVhdGVFbGVtZW50KFwiZGl2XCIpLGM9YixkLGU9bmMoXCJBPGRpdj5cIithK1wiPC9kaXY+XCIpLGY9UGIoKTtkPW5ldyBqYyhmP2YuY3JlYXRlSFRNTChlKTplKTtpZihjLm5vZGVUeXBlPT09MSl7dmFyIGc9Yy50YWdOYW1lO2lmKGc9PT1cblwiU0NSSVBUXCJ8fGc9PT1cIlNUWUxFXCIpdGhyb3cgRXJyb3IoXCJcIik7fXZhciBrO2lmKGQgaW5zdGFuY2VvZiBqYylrPWQuajtlbHNlIHRocm93IEVycm9yKFwiXCIpO2MuaW5uZXJIVE1MPWs7Yj1iLmxhc3RDaGlsZDtmb3IodmFyIG09W107Yi5maXJzdENoaWxkOyltLnB1c2goYi5yZW1vdmVDaGlsZChiLmZpcnN0Q2hpbGQpKTtyZXR1cm4gbX0sSGM9ZnVuY3Rpb24oYSxiLGMpe2M9Y3x8MTAwO2Zvcih2YXIgZD17fSxlPTA7ZTxiLmxlbmd0aDtlKyspZFtiW2VdXT0hMDtmb3IodmFyIGY9YSxnPTA7ZiYmZzw9YztnKyspe2lmKGRbU3RyaW5nKGYudGFnTmFtZSkudG9Mb3dlckNhc2UoKV0pcmV0dXJuIGY7Zj1mLnBhcmVudEVsZW1lbnR9cmV0dXJuIG51bGx9LEljPWZ1bmN0aW9uKGEpe3ZhciBiO3RyeXtiPW9jLnNlbmRCZWFjb24mJm9jLnNlbmRCZWFjb24oYSl9Y2F0Y2goYyl7aGIoXCJUQUdHSU5HXCIsMTUpfWJ8fEFjKGEpfSxKYz1mdW5jdGlvbihhLGIpe3RyeXtyZXR1cm4gb2Muc2VuZEJlYWNvbihhLFxuYil9Y2F0Y2goYyl7aGIoXCJUQUdHSU5HXCIsMTUpfXJldHVybiExfSxLYz17Y2FjaGU6XCJuby1zdG9yZVwiLGNyZWRlbnRpYWxzOlwiaW5jbHVkZVwiLGtlZXBhbGl2ZTohMCxtZXRob2Q6XCJQT1NUXCIsbW9kZTpcIm5vLWNvcnNcIixyZWRpcmVjdDpcImZvbGxvd1wifSxNYz1mdW5jdGlvbihhLGIsYyl7aWYoTGMoKSl7dmFyIGQ9T2JqZWN0LmFzc2lnbih7fSxLYyk7YiYmKGQuYm9keT1iKTtjJiYoYy5hdHRyaWJ1dGlvblJlcG9ydGluZyYmKGQuYXR0cmlidXRpb25SZXBvcnRpbmc9Yy5hdHRyaWJ1dGlvblJlcG9ydGluZyksYy5icm93c2luZ1RvcGljcyYmKGQuYnJvd3NpbmdUb3BpY3M9Yy5icm93c2luZ1RvcGljcykpO3RyeXt2YXIgZT1ELmZldGNoKGEsZCk7ZSYmZS5jYXRjaChuYik7cmV0dXJuITB9Y2F0Y2goZil7fX1pZihjJiZjLm5vRmFsbGJhY2spcmV0dXJuITE7aWYoYilyZXR1cm4gSmMoYSxiKTtJYyhhKTtyZXR1cm4hMH0sTGM9ZnVuY3Rpb24oKXtyZXR1cm4gdHlwZW9mIEQuZmV0Y2g9PT1cblwiZnVuY3Rpb25cIn0sTmM9ZnVuY3Rpb24oYSxiKXt2YXIgYz1hW2JdO2MmJnR5cGVvZiBjLmFuaW1WYWw9PT1cInN0cmluZ1wiJiYoYz1jLmFuaW1WYWwpO3JldHVybiBjfSxPYz1mdW5jdGlvbigpe3ZhciBhPUQucGVyZm9ybWFuY2U7aWYoYSYmb2IoYS5ub3cpKXJldHVybiBhLm5vdygpfSxQYz1mdW5jdGlvbigpe3JldHVybiBELnBlcmZvcm1hbmNlfHx2b2lkIDB9O2Z1bmN0aW9uIFFjKGEsYil7cmV0dXJuIHRoaXMuZXZhbHVhdGUoYSkmJnRoaXMuZXZhbHVhdGUoYil9ZnVuY3Rpb24gUmMoYSxiKXtyZXR1cm4gdGhpcy5ldmFsdWF0ZShhKT09PXRoaXMuZXZhbHVhdGUoYil9ZnVuY3Rpb24gU2MoYSxiKXtyZXR1cm4gdGhpcy5ldmFsdWF0ZShhKXx8dGhpcy5ldmFsdWF0ZShiKX1mdW5jdGlvbiBUYyhhLGIpe2E9dGhpcy5ldmFsdWF0ZShhKTtiPXRoaXMuZXZhbHVhdGUoYik7cmV0dXJuIFN0cmluZyhhKS5pbmRleE9mKFN0cmluZyhiKSk+LTF9ZnVuY3Rpb24gVWMoYSxiKXt2YXIgYz1TdHJpbmcodGhpcy5ldmFsdWF0ZShhKSksZD1TdHJpbmcodGhpcy5ldmFsdWF0ZShiKSk7cmV0dXJuIGMuc3Vic3RyaW5nKDAsZC5sZW5ndGgpPT09ZH1cbmZ1bmN0aW9uIFZjKGEsYil7YT10aGlzLmV2YWx1YXRlKGEpO2I9dGhpcy5ldmFsdWF0ZShiKTtzd2l0Y2goYSl7Y2FzZSBcInBhZ2VMb2NhdGlvblwiOnZhciBjPUQubG9jYXRpb24uaHJlZjtiIGluc3RhbmNlb2YgWWEmJmIuZ2V0KFwic3RyaXBQcm90b2NvbFwiKSYmKGM9Yy5yZXBsYWNlKC9eaHR0cHM/OlxcL1xcLy8sXCJcIikpO3JldHVybiBjfX07dmFyIFdjPWZ1bmN0aW9uKGEsYil7TWEuY2FsbCh0aGlzKTt0aGlzLk9qPWE7dGhpcy5raD1ifTt5YShXYyxNYSk7YmE9V2MucHJvdG90eXBlO2JhLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuT2p9O2JhLmdldE5hbWU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5Pan07YmEuTmI9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IFdhKE5hKHRoaXMsMSkpfTtiYS5pbnZva2U9ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMua2guYXBwbHkobmV3IFhjKHRoaXMsYSksQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLDEpKX07YmEuZmI9ZnVuY3Rpb24oYSl7dHJ5e3JldHVybiB0aGlzLmludm9rZS5hcHBseSh0aGlzLEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywwKSl9Y2F0Y2goYil7fX07dmFyIFhjPWZ1bmN0aW9uKGEsYil7dGhpcy5raD1hO3RoaXMuRj1ifTtcblhjLnByb3RvdHlwZS5ldmFsdWF0ZT1mdW5jdGlvbihhKXt2YXIgYj10aGlzLkY7cmV0dXJuIEFycmF5LmlzQXJyYXkoYSk/S2EoYixhKTphfTtYYy5wcm90b3R5cGUuZ2V0TmFtZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmtoLmdldE5hbWUoKX07WGMucHJvdG90eXBlLnJkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuRi5yZCgpfTt2YXIgWWM9ZnVuY3Rpb24oKXt0aGlzLm1hcD1uZXcgTWFwfTtZYy5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKGEsYil7dGhpcy5tYXAuc2V0KGEsYil9O1ljLnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMubWFwLmdldChhKX07dmFyIFpjPWZ1bmN0aW9uKCl7dGhpcy5rZXlzPVtdO3RoaXMudmFsdWVzPVtdfTtaYy5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKGEsYil7dGhpcy5rZXlzLnB1c2goYSk7dGhpcy52YWx1ZXMucHVzaChiKX07WmMucHJvdG90eXBlLmdldD1mdW5jdGlvbihhKXt2YXIgYj10aGlzLmtleXMuaW5kZXhPZihhKTtpZihiPi0xKXJldHVybiB0aGlzLnZhbHVlc1tiXX07ZnVuY3Rpb24gJGMoKXt0cnl7cmV0dXJuIE1hcD9uZXcgWWM6bmV3IFpjfWNhdGNoKGEpe3JldHVybiBuZXcgWmN9fTt2YXIgYWQ9ZnVuY3Rpb24oYSl7aWYoYSBpbnN0YW5jZW9mIGFkKXJldHVybiBhO2lmKFVhKGEpKXRocm93IEVycm9yKFwiVHlwZSBvZiBnaXZlbiB2YWx1ZSBoYXMgYW4gZXF1aXZhbGVudCBQaXhpZSB0eXBlLlwiKTt0aGlzLnZhbHVlPWF9O2FkLnByb3RvdHlwZS5nZXRWYWx1ZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLnZhbHVlfTthZC5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gU3RyaW5nKHRoaXMudmFsdWUpfTt2YXIgY2Q9ZnVuY3Rpb24oYSl7TWEuY2FsbCh0aGlzKTt0aGlzLnByb21pc2U9YTt0aGlzLnNldChcInRoZW5cIixiZCh0aGlzKSk7dGhpcy5zZXQoXCJjYXRjaFwiLGJkKHRoaXMsITApKTt0aGlzLnNldChcImZpbmFsbHlcIixiZCh0aGlzLCExLCEwKSl9O3lhKGNkLFlhKTt2YXIgYmQ9ZnVuY3Rpb24oYSxiLGMpe2I9Yj09PXZvaWQgMD8hMTpiO2M9Yz09PXZvaWQgMD8hMTpjO3JldHVybiBuZXcgV2MoXCJcIixmdW5jdGlvbihkLGUpe2ImJihlPWQsZD12b2lkIDApO2MmJihlPWQpO2QgaW5zdGFuY2VvZiBXY3x8KGQ9dm9pZCAwKTtlIGluc3RhbmNlb2YgV2N8fChlPXZvaWQgMCk7dmFyIGY9SWEodGhpcy5GKSxnPWZ1bmN0aW9uKG0pe3JldHVybiBmdW5jdGlvbihuKXtyZXR1cm4gYz8obS5pbnZva2UoZiksYS5wcm9taXNlKTptLmludm9rZShmLG4pfX0saz1hLnByb21pc2UudGhlbihkJiZnKGQpLGUmJmcoZSkpO3JldHVybiBuZXcgY2Qoayl9KX07ZnVuY3Rpb24gSihhLGIsYyl7dmFyIGQ9JGMoKSxlPWZ1bmN0aW9uKGcsayl7Zm9yKHZhciBtPU5hKGcsMSksbj0wO248bS5sZW5ndGg7bisrKWtbbVtuXV09ZihnLmdldChtW25dKSl9LGY9ZnVuY3Rpb24oZyl7dmFyIGs9ZC5nZXQoZyk7aWYoaylyZXR1cm4gaztpZihnIGluc3RhbmNlb2YgV2Epe3ZhciBtPVtdO2Quc2V0KGcsbSk7Zm9yKHZhciBuPWcuTmIoKSxwPTA7cDxuLmxlbmd0aCgpO3ArKyltW24uZ2V0KHApXT1mKGcuZ2V0KG4uZ2V0KHApKSk7cmV0dXJuIG19aWYoZyBpbnN0YW5jZW9mIGNkKXJldHVybiBnLnByb21pc2U7aWYoZyBpbnN0YW5jZW9mIFlhKXt2YXIgcT17fTtkLnNldChnLHEpO2UoZyxxKTtyZXR1cm4gcX1pZihnIGluc3RhbmNlb2YgV2Mpe3ZhciByPWZ1bmN0aW9uKCl7Zm9yKHZhciB1PUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywwKSx2PTA7djx1Lmxlbmd0aDt2KyspdVt2XT1kZCh1W3ZdLGIsYyk7dmFyIHc9bmV3IEdhKGI/Yi5yZCgpOlxubmV3IEZhKTtiJiYody5qPWIuaik7cmV0dXJuIGYoZy5pbnZva2UuYXBwbHkoZyxbd10uY29uY2F0KHUpKSl9O2Quc2V0KGcscik7ZShnLHIpO3JldHVybiByfXZhciB0PSExO3N3aXRjaChjKXtjYXNlIDE6dD0hMDticmVhaztjYXNlIDI6dD0hMTticmVhaztjYXNlIDM6dD0hMTticmVhaztkZWZhdWx0On1pZihnIGluc3RhbmNlb2YgYWQmJnQpcmV0dXJuIGcuZ2V0VmFsdWUoKTtzd2l0Y2godHlwZW9mIGcpe2Nhc2UgXCJib29sZWFuXCI6Y2FzZSBcIm51bWJlclwiOmNhc2UgXCJzdHJpbmdcIjpjYXNlIFwidW5kZWZpbmVkXCI6cmV0dXJuIGc7Y2FzZSBcIm9iamVjdFwiOmlmKGc9PT1udWxsKXJldHVybiBudWxsfX07cmV0dXJuIGYoYSl9XG5mdW5jdGlvbiBkZChhLGIsYyl7dmFyIGQ9JGMoKSxlPWZ1bmN0aW9uKGcsayl7Zm9yKHZhciBtIGluIGcpZy5oYXNPd25Qcm9wZXJ0eShtKSYmay5zZXQobSxmKGdbbV0pKX0sZj1mdW5jdGlvbihnKXt2YXIgaz1kLmdldChnKTtpZihrKXJldHVybiBrO2lmKEFycmF5LmlzQXJyYXkoZyl8fHZiKGcpKXt2YXIgbT1uZXcgV2EoW10pO2Quc2V0KGcsbSk7Zm9yKHZhciBuIGluIGcpZy5oYXNPd25Qcm9wZXJ0eShuKSYmbS5zZXQobixmKGdbbl0pKTtyZXR1cm4gbX1pZihTYShnKSl7dmFyIHA9bmV3IFlhO2Quc2V0KGcscCk7ZShnLHApO3JldHVybiBwfWlmKHR5cGVvZiBnPT09XCJmdW5jdGlvblwiKXt2YXIgcT1uZXcgV2MoXCJcIixmdW5jdGlvbigpe2Zvcih2YXIgeD1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsMCkseT0wO3k8eC5sZW5ndGg7eSsrKXhbeV09Sih0aGlzLmV2YWx1YXRlKHhbeV0pLGIsYyk7cmV0dXJuIGYoKDAsdGhpcy5GLkgpKGcsZyx4KSl9KTtkLnNldChnLFxucSk7ZShnLHEpO3JldHVybiBxfXZhciB2PXR5cGVvZiBnO2lmKGc9PT1udWxsfHx2PT09XCJzdHJpbmdcInx8dj09PVwibnVtYmVyXCJ8fHY9PT1cImJvb2xlYW5cIilyZXR1cm4gZzt2YXIgdz0hMTtzd2l0Y2goYyl7Y2FzZSAxOnc9XG4hMDticmVhaztjYXNlIDI6dz0hMTticmVhaztkZWZhdWx0On1pZihnIT09dm9pZCAwJiZ3KXJldHVybiBuZXcgYWQoZyl9O3JldHVybiBmKGEpfTtmdW5jdGlvbiBlZCgpe3ZhciBhPSExO3JldHVybiBhfTt2YXIgZmQ9e3N1cHBvcnRlZE1ldGhvZHM6XCJjb25jYXQgZXZlcnkgZmlsdGVyIGZvckVhY2ggaGFzT3duUHJvcGVydHkgaW5kZXhPZiBqb2luIGxhc3RJbmRleE9mIG1hcCBwb3AgcHVzaCByZWR1Y2UgcmVkdWNlUmlnaHQgcmV2ZXJzZSBzaGlmdCBzbGljZSBzb21lIHNvcnQgc3BsaWNlIHVuc2hpZnQgdG9TdHJpbmdcIi5zcGxpdChcIiBcIiksY29uY2F0OmZ1bmN0aW9uKGEpe2Zvcih2YXIgYj1bXSxjPTA7Yzx0aGlzLmxlbmd0aCgpO2MrKyliLnB1c2godGhpcy5nZXQoYykpO2Zvcih2YXIgZD0xO2Q8YXJndW1lbnRzLmxlbmd0aDtkKyspaWYoYXJndW1lbnRzW2RdaW5zdGFuY2VvZiBXYSlmb3IodmFyIGU9YXJndW1lbnRzW2RdLGY9MDtmPGUubGVuZ3RoKCk7ZisrKWIucHVzaChlLmdldChmKSk7ZWxzZSBiLnB1c2goYXJndW1lbnRzW2RdKTtyZXR1cm4gbmV3IFdhKGIpfSxldmVyeTpmdW5jdGlvbihhLGIpe2Zvcih2YXIgYz10aGlzLmxlbmd0aCgpLGQ9MDtkPHRoaXMubGVuZ3RoKCkmJlxuZDxjO2QrKylpZih0aGlzLmhhcyhkKSYmIWIuaW52b2tlKGEsdGhpcy5nZXQoZCksZCx0aGlzKSlyZXR1cm4hMTtyZXR1cm4hMH0sZmlsdGVyOmZ1bmN0aW9uKGEsYil7Zm9yKHZhciBjPXRoaXMubGVuZ3RoKCksZD1bXSxlPTA7ZTx0aGlzLmxlbmd0aCgpJiZlPGM7ZSsrKXRoaXMuaGFzKGUpJiZiLmludm9rZShhLHRoaXMuZ2V0KGUpLGUsdGhpcykmJmQucHVzaCh0aGlzLmdldChlKSk7cmV0dXJuIG5ldyBXYShkKX0sZm9yRWFjaDpmdW5jdGlvbihhLGIpe2Zvcih2YXIgYz10aGlzLmxlbmd0aCgpLGQ9MDtkPHRoaXMubGVuZ3RoKCkmJmQ8YztkKyspdGhpcy5oYXMoZCkmJmIuaW52b2tlKGEsdGhpcy5nZXQoZCksZCx0aGlzKX0saGFzT3duUHJvcGVydHk6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gdGhpcy5oYXMoYil9LGluZGV4T2Y6ZnVuY3Rpb24oYSxiLGMpe3ZhciBkPXRoaXMubGVuZ3RoKCksZT1jPT09dm9pZCAwPzA6TnVtYmVyKGMpO2U8MCYmKGU9TWF0aC5tYXgoZCtlLDApKTtmb3IodmFyIGY9XG5lO2Y8ZDtmKyspaWYodGhpcy5oYXMoZikmJnRoaXMuZ2V0KGYpPT09YilyZXR1cm4gZjtyZXR1cm4tMX0sam9pbjpmdW5jdGlvbihhLGIpe2Zvcih2YXIgYz1bXSxkPTA7ZDx0aGlzLmxlbmd0aCgpO2QrKyljLnB1c2godGhpcy5nZXQoZCkpO3JldHVybiBjLmpvaW4oYil9LGxhc3RJbmRleE9mOmZ1bmN0aW9uKGEsYixjKXt2YXIgZD10aGlzLmxlbmd0aCgpLGU9ZC0xO2MhPT12b2lkIDAmJihlPWM8MD9kK2M6TWF0aC5taW4oYyxlKSk7Zm9yKHZhciBmPWU7Zj49MDtmLS0paWYodGhpcy5oYXMoZikmJnRoaXMuZ2V0KGYpPT09YilyZXR1cm4gZjtyZXR1cm4tMX0sbWFwOmZ1bmN0aW9uKGEsYil7Zm9yKHZhciBjPXRoaXMubGVuZ3RoKCksZD1bXSxlPTA7ZTx0aGlzLmxlbmd0aCgpJiZlPGM7ZSsrKXRoaXMuaGFzKGUpJiYoZFtlXT1iLmludm9rZShhLHRoaXMuZ2V0KGUpLGUsdGhpcykpO3JldHVybiBuZXcgV2EoZCl9LHBvcDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnBvcCgpfSxwdXNoOmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLnB1c2guYXBwbHkodGhpcyxcbkFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywxKSl9LHJlZHVjZTpmdW5jdGlvbihhLGIsYyl7dmFyIGQ9dGhpcy5sZW5ndGgoKSxlLGY9MDtpZihjIT09dm9pZCAwKWU9YztlbHNle2lmKGQ9PT0wKXRocm93IEVycm9yKFwiVHlwZUVycm9yOiBSZWR1Y2Ugb24gTGlzdCB3aXRoIG5vIGVsZW1lbnRzLlwiKTtmb3IodmFyIGc9MDtnPGQ7ZysrKWlmKHRoaXMuaGFzKGcpKXtlPXRoaXMuZ2V0KGcpO2Y9ZysxO2JyZWFrfWlmKGc9PT1kKXRocm93IEVycm9yKFwiVHlwZUVycm9yOiBSZWR1Y2Ugb24gTGlzdCB3aXRoIG5vIGVsZW1lbnRzLlwiKTt9Zm9yKHZhciBrPWY7azxkO2srKyl0aGlzLmhhcyhrKSYmKGU9Yi5pbnZva2UoYSxlLHRoaXMuZ2V0KGspLGssdGhpcykpO3JldHVybiBlfSxyZWR1Y2VSaWdodDpmdW5jdGlvbihhLGIsYyl7dmFyIGQ9dGhpcy5sZW5ndGgoKSxlLGY9ZC0xO2lmKGMhPT12b2lkIDApZT1jO2Vsc2V7aWYoZD09PTApdGhyb3cgRXJyb3IoXCJUeXBlRXJyb3I6IFJlZHVjZVJpZ2h0IG9uIExpc3Qgd2l0aCBubyBlbGVtZW50cy5cIik7XG5mb3IodmFyIGc9MTtnPD1kO2crKylpZih0aGlzLmhhcyhkLWcpKXtlPXRoaXMuZ2V0KGQtZyk7Zj1kLShnKzEpO2JyZWFrfWlmKGc+ZCl0aHJvdyBFcnJvcihcIlR5cGVFcnJvcjogUmVkdWNlUmlnaHQgb24gTGlzdCB3aXRoIG5vIGVsZW1lbnRzLlwiKTt9Zm9yKHZhciBrPWY7az49MDtrLS0pdGhpcy5oYXMoaykmJihlPWIuaW52b2tlKGEsZSx0aGlzLmdldChrKSxrLHRoaXMpKTtyZXR1cm4gZX0scmV2ZXJzZTpmdW5jdGlvbigpe2Zvcih2YXIgYT1YYSh0aGlzKSxiPWEubGVuZ3RoLTEsYz0wO2I+PTA7Yi0tLGMrKylhLmhhc093blByb3BlcnR5KGIpP3RoaXMuc2V0KGMsYVtiXSk6dGhpcy5yZW1vdmUoYyk7cmV0dXJuIHRoaXN9LHNoaWZ0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc2hpZnQoKX0sc2xpY2U6ZnVuY3Rpb24oYSxiLGMpe3ZhciBkPXRoaXMubGVuZ3RoKCk7Yj09PXZvaWQgMCYmKGI9MCk7Yj1iPDA/TWF0aC5tYXgoZCtiLDApOk1hdGgubWluKGIsZCk7Yz1jPT09dm9pZCAwP1xuZDpjPDA/TWF0aC5tYXgoZCtjLDApOk1hdGgubWluKGMsZCk7Yz1NYXRoLm1heChiLGMpO2Zvcih2YXIgZT1bXSxmPWI7ZjxjO2YrKyllLnB1c2godGhpcy5nZXQoZikpO3JldHVybiBuZXcgV2EoZSl9LHNvbWU6ZnVuY3Rpb24oYSxiKXtmb3IodmFyIGM9dGhpcy5sZW5ndGgoKSxkPTA7ZDx0aGlzLmxlbmd0aCgpJiZkPGM7ZCsrKWlmKHRoaXMuaGFzKGQpJiZiLmludm9rZShhLHRoaXMuZ2V0KGQpLGQsdGhpcykpcmV0dXJuITA7cmV0dXJuITF9LHNvcnQ6ZnVuY3Rpb24oYSxiKXt2YXIgYz1YYSh0aGlzKTtiPT09dm9pZCAwP2Muc29ydCgpOmMuc29ydChmdW5jdGlvbihlLGYpe3JldHVybiBOdW1iZXIoYi5pbnZva2UoYSxlLGYpKX0pO2Zvcih2YXIgZD0wO2Q8Yy5sZW5ndGg7ZCsrKWMuaGFzT3duUHJvcGVydHkoZCk/dGhpcy5zZXQoZCxjW2RdKTp0aGlzLnJlbW92ZShkKTtyZXR1cm4gdGhpc30sc3BsaWNlOmZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gdGhpcy5zcGxpY2UuYXBwbHkodGhpcyxcbkFycmF5LnByb3RvdHlwZS5zcGxpY2UuY2FsbChhcmd1bWVudHMsMSxhcmd1bWVudHMubGVuZ3RoLTEpKX0sdG9TdHJpbmc6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50b1N0cmluZygpfSx1bnNoaWZ0OmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLnVuc2hpZnQuYXBwbHkodGhpcyxBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsMSkpfX07dmFyIGdkPWZ1bmN0aW9uKGEpe3ZhciBiO2I9RXJyb3IuY2FsbCh0aGlzLGEpO3RoaXMubWVzc2FnZT1iLm1lc3NhZ2U7XCJzdGFja1wiaW4gYiYmKHRoaXMuc3RhY2s9Yi5zdGFjayl9O3lhKGdkLEVycm9yKTt2YXIgaGQ9e2NoYXJBdDoxLGNvbmNhdDoxLGluZGV4T2Y6MSxsYXN0SW5kZXhPZjoxLG1hdGNoOjEscmVwbGFjZToxLHNlYXJjaDoxLHNsaWNlOjEsc3BsaXQ6MSxzdWJzdHJpbmc6MSx0b0xvd2VyQ2FzZToxLHRvTG9jYWxlTG93ZXJDYXNlOjEsdG9TdHJpbmc6MSx0b1VwcGVyQ2FzZToxLHRvTG9jYWxlVXBwZXJDYXNlOjEsdHJpbToxfSxpZD1uZXcgQ2EoXCJicmVha1wiKSxqZD1uZXcgQ2EoXCJjb250aW51ZVwiKTtmdW5jdGlvbiBrZChhLGIpe3JldHVybiB0aGlzLmV2YWx1YXRlKGEpK3RoaXMuZXZhbHVhdGUoYil9ZnVuY3Rpb24gbGQoYSxiKXtyZXR1cm4gdGhpcy5ldmFsdWF0ZShhKSYmdGhpcy5ldmFsdWF0ZShiKX1cbmZ1bmN0aW9uIG1kKGEsYixjKXthPXRoaXMuZXZhbHVhdGUoYSk7Yj10aGlzLmV2YWx1YXRlKGIpO2M9dGhpcy5ldmFsdWF0ZShjKTtpZighKGMgaW5zdGFuY2VvZiBXYSkpdGhyb3cgRXJyb3IoXCJFcnJvcjogTm9uLUxpc3QgYXJndW1lbnQgZ2l2ZW4gdG8gQXBwbHkgaW5zdHJ1Y3Rpb24uXCIpO2lmKGE9PT1udWxsfHxhPT09dm9pZCAwKXt2YXIgZD1cIlR5cGVFcnJvcjogQ2FuJ3QgcmVhZCBwcm9wZXJ0eSBcIitiK1wiIG9mIFwiK2ErXCIuXCI7aWYoZWQoKSl0aHJvdyBuZXcgZ2QoZCk7dGhyb3cgRXJyb3IoZCk7fXZhciBlPXR5cGVvZiBhPT09XCJudW1iZXJcIjtpZih0eXBlb2YgYT09PVwiYm9vbGVhblwifHxlKXtpZihiPT09XCJ0b1N0cmluZ1wiKXtpZihlJiZjLmxlbmd0aCgpKXt2YXIgZj1KKGMuZ2V0KDApKTt0cnl7cmV0dXJuIGEudG9TdHJpbmcoZil9Y2F0Y2goeSl7fX1yZXR1cm4gYS50b1N0cmluZygpfXZhciBnPVwiVHlwZUVycm9yOiBcIithK1wiLlwiK2IrXCIgaXMgbm90IGEgZnVuY3Rpb24uXCI7XG5pZihlZCgpKXRocm93IG5ldyBnZChnKTt0aHJvdyBFcnJvcihnKTt9aWYodHlwZW9mIGE9PT1cInN0cmluZ1wiKXtpZihoZC5oYXNPd25Qcm9wZXJ0eShiKSl7dmFyIGs9MjtrPTE7dmFyIG09SihjLHZvaWQgMCxrKTtyZXR1cm4gZGQoYVtiXS5hcHBseShhLG0pLHRoaXMuRil9dmFyIG49XCJUeXBlRXJyb3I6IFwiK2IrXCIgaXMgbm90IGEgZnVuY3Rpb25cIjtpZihlZCgpKXRocm93IG5ldyBnZChuKTt0aHJvdyBFcnJvcihuKTt9aWYoYSBpbnN0YW5jZW9mIFdhKXtpZihhLmhhcyhiKSl7dmFyIHA9YS5nZXQoYik7aWYocCBpbnN0YW5jZW9mIFdjKXt2YXIgcT1YYShjKTtxLnVuc2hpZnQodGhpcy5GKTtyZXR1cm4gcC5pbnZva2UuYXBwbHkocCxxKX12YXIgcj1cblwiVHlwZUVycm9yOiBcIitiK1wiIGlzIG5vdCBhIGZ1bmN0aW9uXCI7aWYoZWQoKSl0aHJvdyBuZXcgZ2Qocik7dGhyb3cgRXJyb3Iocik7fWlmKGZkLnN1cHBvcnRlZE1ldGhvZHMuaW5kZXhPZihiKT49MCl7dmFyIHQ9WGEoYyk7dC51bnNoaWZ0KHRoaXMuRik7cmV0dXJuIGZkW2JdLmFwcGx5KGEsdCl9fWlmKGEgaW5zdGFuY2VvZiBXY3x8YSBpbnN0YW5jZW9mIFlhKXtpZihhLmhhcyhiKSl7dmFyIHU9YS5nZXQoYik7aWYodSBpbnN0YW5jZW9mIFdjKXt2YXIgdj1YYShjKTt2LnVuc2hpZnQodGhpcy5GKTtyZXR1cm4gdS5pbnZva2UuYXBwbHkodSx2KX12YXIgdz1cIlR5cGVFcnJvcjogXCIrYitcIiBpcyBub3QgYSBmdW5jdGlvblwiO2lmKGVkKCkpdGhyb3cgbmV3IGdkKHcpO3Rocm93IEVycm9yKHcpO31pZihiPT09XCJ0b1N0cmluZ1wiKXJldHVybiBhIGluc3RhbmNlb2YgV2M/YS5nZXROYW1lKCk6YS50b1N0cmluZygpO2lmKGI9PT1cImhhc093blByb3BlcnR5XCIpcmV0dXJuIGEuaGFzLmFwcGx5KGEsXG5YYShjKSl9aWYoYSBpbnN0YW5jZW9mIGFkJiZiPT09XCJ0b1N0cmluZ1wiKXJldHVybiBhLnRvU3RyaW5nKCk7dmFyIHg9XCJUeXBlRXJyb3I6IE9iamVjdCBoYXMgbm8gJ1wiK2IrXCInIHByb3BlcnR5LlwiO2lmKGVkKCkpdGhyb3cgbmV3IGdkKHgpO3Rocm93IEVycm9yKHgpO31mdW5jdGlvbiBuZChhLGIpe2E9dGhpcy5ldmFsdWF0ZShhKTtpZih0eXBlb2YgYSE9PVwic3RyaW5nXCIpdGhyb3cgRXJyb3IoXCJJbnZhbGlkIGtleSBuYW1lIGdpdmVuIGZvciBhc3NpZ25tZW50LlwiKTt2YXIgYz10aGlzLkY7aWYoIWMuaGFzKGEpKXRocm93IEVycm9yKFwiQXR0ZW1wdGluZyB0byBhc3NpZ24gdG8gdW5kZWZpbmVkIHZhbHVlIFwiK2IpO3ZhciBkPXRoaXMuZXZhbHVhdGUoYik7Yy5zZXQoYSxkKTtyZXR1cm4gZH1mdW5jdGlvbiBvZCgpe3ZhciBhPUlhKHRoaXMuRiksYj1KYShhLEFycmF5LnByb3RvdHlwZS5zbGljZS5hcHBseShhcmd1bWVudHMpKTtpZihiIGluc3RhbmNlb2YgQ2EpcmV0dXJuIGJ9XG5mdW5jdGlvbiBwZCgpe3JldHVybiBpZH1mdW5jdGlvbiBxZChhKXtmb3IodmFyIGI9dGhpcy5ldmFsdWF0ZShhKSxjPTA7YzxiLmxlbmd0aDtjKyspe3ZhciBkPXRoaXMuZXZhbHVhdGUoYltjXSk7aWYoZCBpbnN0YW5jZW9mIENhKXJldHVybiBkfX1mdW5jdGlvbiByZCgpe2Zvcih2YXIgYT10aGlzLkYsYj0wO2I8YXJndW1lbnRzLmxlbmd0aC0xO2IrPTIpe3ZhciBjPWFyZ3VtZW50c1tiXTtpZih0eXBlb2YgYz09PVwic3RyaW5nXCIpe3ZhciBkPXRoaXMuZXZhbHVhdGUoYXJndW1lbnRzW2IrMV0pO0hhKGEsYyxkLCEwKX19fWZ1bmN0aW9uIHNkKCl7cmV0dXJuIGpkfWZ1bmN0aW9uIHZkKGEsYil7cmV0dXJuIG5ldyBDYShhLHRoaXMuZXZhbHVhdGUoYikpfVxuZnVuY3Rpb24gd2QoYSxiKXt2YXIgYz1uZXcgV2E7Yj10aGlzLmV2YWx1YXRlKGIpO2Zvcih2YXIgZD0wO2Q8Yi5sZW5ndGg7ZCsrKWMucHVzaChiW2RdKTt2YXIgZT1bNTEsYSxjXS5jb25jYXQoQXJyYXkucHJvdG90eXBlLnNwbGljZS5jYWxsKGFyZ3VtZW50cywyLGFyZ3VtZW50cy5sZW5ndGgtMikpO3RoaXMuRi5hZGQoYSx0aGlzLmV2YWx1YXRlKGUpKX1mdW5jdGlvbiB4ZChhLGIpe3JldHVybiB0aGlzLmV2YWx1YXRlKGEpL3RoaXMuZXZhbHVhdGUoYil9ZnVuY3Rpb24geWQoYSxiKXthPXRoaXMuZXZhbHVhdGUoYSk7Yj10aGlzLmV2YWx1YXRlKGIpO3ZhciBjPWEgaW5zdGFuY2VvZiBhZCxkPWIgaW5zdGFuY2VvZiBhZDtyZXR1cm4gY3x8ZD9jJiZkP2EuZ2V0VmFsdWUoKT09PWIuZ2V0VmFsdWUoKTohMTphPT1ifWZ1bmN0aW9uIHpkKCl7Zm9yKHZhciBhLGI9MDtiPGFyZ3VtZW50cy5sZW5ndGg7YisrKWE9dGhpcy5ldmFsdWF0ZShhcmd1bWVudHNbYl0pO3JldHVybiBhfVxuZnVuY3Rpb24gQWQoYSxiLGMsZCl7Zm9yKHZhciBlPTA7ZTxiKCk7ZSsrKXt2YXIgZj1hKGMoZSkpLGc9SmEoZixkKTtpZihnIGluc3RhbmNlb2YgQ2Epe2lmKGcudHlwZT09PVwiYnJlYWtcIilicmVhaztpZihnLnR5cGU9PT1cInJldHVyblwiKXJldHVybiBnfX19ZnVuY3Rpb24gQmQoYSxiLGMpe2lmKHR5cGVvZiBiPT09XCJzdHJpbmdcIilyZXR1cm4gQWQoYSxmdW5jdGlvbigpe3JldHVybiBiLmxlbmd0aH0sZnVuY3Rpb24oZil7cmV0dXJuIGZ9LGMpO2lmKGIgaW5zdGFuY2VvZiBZYXx8YiBpbnN0YW5jZW9mIFdhfHxiIGluc3RhbmNlb2YgV2Mpe3ZhciBkPWIuTmIoKSxlPWQubGVuZ3RoKCk7cmV0dXJuIEFkKGEsZnVuY3Rpb24oKXtyZXR1cm4gZX0sZnVuY3Rpb24oZil7cmV0dXJuIGQuZ2V0KGYpfSxjKX19XG5mdW5jdGlvbiBDZChhLGIsYyl7YT10aGlzLmV2YWx1YXRlKGEpO2I9dGhpcy5ldmFsdWF0ZShiKTtjPXRoaXMuZXZhbHVhdGUoYyk7dmFyIGQ9dGhpcy5GO3JldHVybiBCZChmdW5jdGlvbihlKXtkLnNldChhLGUpO3JldHVybiBkfSxiLGMpfWZ1bmN0aW9uIERkKGEsYixjKXthPXRoaXMuZXZhbHVhdGUoYSk7Yj10aGlzLmV2YWx1YXRlKGIpO2M9dGhpcy5ldmFsdWF0ZShjKTt2YXIgZD10aGlzLkY7cmV0dXJuIEJkKGZ1bmN0aW9uKGUpe3ZhciBmPUlhKGQpO0hhKGYsYSxlLCEwKTtyZXR1cm4gZn0sYixjKX1mdW5jdGlvbiBFZChhLGIsYyl7YT10aGlzLmV2YWx1YXRlKGEpO2I9dGhpcy5ldmFsdWF0ZShiKTtjPXRoaXMuZXZhbHVhdGUoYyk7dmFyIGQ9dGhpcy5GO3JldHVybiBCZChmdW5jdGlvbihlKXt2YXIgZj1JYShkKTtmLmFkZChhLGUpO3JldHVybiBmfSxiLGMpfVxuZnVuY3Rpb24gRmQoYSxiLGMpe2E9dGhpcy5ldmFsdWF0ZShhKTtiPXRoaXMuZXZhbHVhdGUoYik7Yz10aGlzLmV2YWx1YXRlKGMpO3ZhciBkPXRoaXMuRjtyZXR1cm4gR2QoZnVuY3Rpb24oZSl7ZC5zZXQoYSxlKTtyZXR1cm4gZH0sYixjKX1mdW5jdGlvbiBIZChhLGIsYyl7YT10aGlzLmV2YWx1YXRlKGEpO2I9dGhpcy5ldmFsdWF0ZShiKTtjPXRoaXMuZXZhbHVhdGUoYyk7dmFyIGQ9dGhpcy5GO3JldHVybiBHZChmdW5jdGlvbihlKXt2YXIgZj1JYShkKTtIYShmLGEsZSwhMCk7cmV0dXJuIGZ9LGIsYyl9ZnVuY3Rpb24gSWQoYSxiLGMpe2E9dGhpcy5ldmFsdWF0ZShhKTtiPXRoaXMuZXZhbHVhdGUoYik7Yz10aGlzLmV2YWx1YXRlKGMpO3ZhciBkPXRoaXMuRjtyZXR1cm4gR2QoZnVuY3Rpb24oZSl7dmFyIGY9SWEoZCk7Zi5hZGQoYSxlKTtyZXR1cm4gZn0sYixjKX1cbmZ1bmN0aW9uIEdkKGEsYixjKXtpZih0eXBlb2YgYj09PVwic3RyaW5nXCIpcmV0dXJuIEFkKGEsZnVuY3Rpb24oKXtyZXR1cm4gYi5sZW5ndGh9LGZ1bmN0aW9uKGQpe3JldHVybiBiW2RdfSxjKTtpZihiIGluc3RhbmNlb2YgV2EpcmV0dXJuIEFkKGEsZnVuY3Rpb24oKXtyZXR1cm4gYi5sZW5ndGgoKX0sZnVuY3Rpb24oZCl7cmV0dXJuIGIuZ2V0KGQpfSxjKTtpZihlZCgpKXRocm93IG5ldyBnZChcIlRoZSB2YWx1ZSBpcyBub3QgaXRlcmFibGUuXCIpO3Rocm93IG5ldyBUeXBlRXJyb3IoXCJUaGUgdmFsdWUgaXMgbm90IGl0ZXJhYmxlLlwiKTt9XG5mdW5jdGlvbiBKZChhLGIsYyxkKXtmdW5jdGlvbiBlKHAscSl7Zm9yKHZhciByPTA7cjxmLmxlbmd0aCgpO3IrKyl7dmFyIHQ9Zi5nZXQocik7cS5hZGQodCxwLmdldCh0KSl9fXZhciBmPXRoaXMuZXZhbHVhdGUoYSk7aWYoIShmIGluc3RhbmNlb2YgV2EpKXRocm93IEVycm9yKFwiVHlwZUVycm9yOiBOb24tTGlzdCBhcmd1bWVudCBnaXZlbiB0byBGb3JMZXQgaW5zdHJ1Y3Rpb24uXCIpO3ZhciBnPXRoaXMuRjtkPXRoaXMuZXZhbHVhdGUoZCk7dmFyIGs9SWEoZyk7Zm9yKGUoZyxrKTtLYShrLGIpOyl7dmFyIG09SmEoayxkKTtpZihtIGluc3RhbmNlb2YgQ2Epe2lmKG0udHlwZT09PVwiYnJlYWtcIilicmVhaztpZihtLnR5cGU9PT1cInJldHVyblwiKXJldHVybiBtfXZhciBuPUlhKGcpO2UoayxuKTtLYShuLGMpO2s9bn19XG5mdW5jdGlvbiBLZChhLGIpe3ZhciBjPXRoaXMuRixkPXRoaXMuZXZhbHVhdGUoYik7aWYoIShkIGluc3RhbmNlb2YgV2EpKXRocm93IEVycm9yKFwiRXJyb3I6IG5vbi1MaXN0IHZhbHVlIGdpdmVuIGZvciBGbiBhcmd1bWVudCBuYW1lcy5cIik7dmFyIGU9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLDIpO3JldHVybiBuZXcgV2MoYSxmdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbihmKXt2YXIgZz1JYShjKTtnLmo9PT12b2lkIDAmJihnLmo9dGhpcy5GLmopO2Zvcih2YXIgaz1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsMCksbT0wO208ay5sZW5ndGg7bSsrKWlmKGtbbV09dGhpcy5ldmFsdWF0ZShrW21dKSxrW21daW5zdGFuY2VvZiBDYSlyZXR1cm4ga1ttXTtmb3IodmFyIG49ZC5nZXQoXCJsZW5ndGhcIikscD0wO3A8bjtwKyspcDxrLmxlbmd0aD9nLmFkZChkLmdldChwKSxrW3BdKTpnLmFkZChkLmdldChwKSx2b2lkIDApO2cuYWRkKFwiYXJndW1lbnRzXCIsXG5uZXcgV2EoaykpO3ZhciBxPUphKGcsZSk7aWYocSBpbnN0YW5jZW9mIENhKXJldHVybiBxLnR5cGU9PT1cInJldHVyblwiP3EuZGF0YTpxfX0oKSl9ZnVuY3Rpb24gTGQoYSl7YT10aGlzLmV2YWx1YXRlKGEpO3ZhciBiPXRoaXMuRjtpZihNZCYmIWIuaGFzKGEpKXRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihhK1wiIGlzIG5vdCBkZWZpbmVkLlwiKTtyZXR1cm4gYi5nZXQoYSl9XG5mdW5jdGlvbiBOZChhLGIpe3ZhciBjO2E9dGhpcy5ldmFsdWF0ZShhKTtiPXRoaXMuZXZhbHVhdGUoYik7aWYoYT09PXZvaWQgMHx8YT09PW51bGwpe3ZhciBkPVwiVHlwZUVycm9yOiBDYW5ub3QgcmVhZCBwcm9wZXJ0aWVzIG9mIFwiK2ErXCIgKHJlYWRpbmcgJ1wiK2IrXCInKVwiO2lmKGVkKCkpdGhyb3cgbmV3IGdkKGQpO3Rocm93IEVycm9yKGQpO31pZihhIGluc3RhbmNlb2YgWWF8fGEgaW5zdGFuY2VvZiBXYXx8YSBpbnN0YW5jZW9mIFdjKWM9YS5nZXQoYik7ZWxzZSBpZih0eXBlb2YgYT09PVwic3RyaW5nXCIpYj09PVwibGVuZ3RoXCI/Yz1hLmxlbmd0aDpWYShiKSYmKGM9YVtiXSk7ZWxzZSBpZihhIGluc3RhbmNlb2YgYWQpcmV0dXJuO3JldHVybiBjfWZ1bmN0aW9uIE9kKGEsYil7cmV0dXJuIHRoaXMuZXZhbHVhdGUoYSk+dGhpcy5ldmFsdWF0ZShiKX1mdW5jdGlvbiBQZChhLGIpe3JldHVybiB0aGlzLmV2YWx1YXRlKGEpPj10aGlzLmV2YWx1YXRlKGIpfVxuZnVuY3Rpb24gUWQoYSxiKXthPXRoaXMuZXZhbHVhdGUoYSk7Yj10aGlzLmV2YWx1YXRlKGIpO2EgaW5zdGFuY2VvZiBhZCYmKGE9YS5nZXRWYWx1ZSgpKTtiIGluc3RhbmNlb2YgYWQmJihiPWIuZ2V0VmFsdWUoKSk7cmV0dXJuIGE9PT1ifWZ1bmN0aW9uIFJkKGEsYil7cmV0dXJuIVFkLmNhbGwodGhpcyxhLGIpfWZ1bmN0aW9uIFNkKGEsYixjKXt2YXIgZD1bXTt0aGlzLmV2YWx1YXRlKGEpP2Q9dGhpcy5ldmFsdWF0ZShiKTpjJiYoZD10aGlzLmV2YWx1YXRlKGMpKTt2YXIgZT1KYSh0aGlzLkYsZCk7aWYoZSBpbnN0YW5jZW9mIENhKXJldHVybiBlfXZhciBNZD0hMTtcbmZ1bmN0aW9uIFRkKGEsYil7cmV0dXJuIHRoaXMuZXZhbHVhdGUoYSk8dGhpcy5ldmFsdWF0ZShiKX1mdW5jdGlvbiBVZChhLGIpe3JldHVybiB0aGlzLmV2YWx1YXRlKGEpPD10aGlzLmV2YWx1YXRlKGIpfWZ1bmN0aW9uIFZkKCl7Zm9yKHZhciBhPW5ldyBXYSxiPTA7Yjxhcmd1bWVudHMubGVuZ3RoO2IrKyl7dmFyIGM9dGhpcy5ldmFsdWF0ZShhcmd1bWVudHNbYl0pO2EucHVzaChjKX1yZXR1cm4gYX1mdW5jdGlvbiBXZCgpe2Zvcih2YXIgYT1uZXcgWWEsYj0wO2I8YXJndW1lbnRzLmxlbmd0aC0xO2IrPTIpe3ZhciBjPXRoaXMuZXZhbHVhdGUoYXJndW1lbnRzW2JdKStcIlwiLGQ9dGhpcy5ldmFsdWF0ZShhcmd1bWVudHNbYisxXSk7YS5zZXQoYyxkKX1yZXR1cm4gYX1mdW5jdGlvbiBYZChhLGIpe3JldHVybiB0aGlzLmV2YWx1YXRlKGEpJXRoaXMuZXZhbHVhdGUoYil9ZnVuY3Rpb24gWWQoYSxiKXtyZXR1cm4gdGhpcy5ldmFsdWF0ZShhKSp0aGlzLmV2YWx1YXRlKGIpfVxuZnVuY3Rpb24gWmQoYSl7cmV0dXJuLXRoaXMuZXZhbHVhdGUoYSl9ZnVuY3Rpb24gJGQoYSl7cmV0dXJuIXRoaXMuZXZhbHVhdGUoYSl9ZnVuY3Rpb24gYWUoYSxiKXtyZXR1cm4heWQuY2FsbCh0aGlzLGEsYil9ZnVuY3Rpb24gYmUoKXtyZXR1cm4gbnVsbH1mdW5jdGlvbiBjZShhLGIpe3JldHVybiB0aGlzLmV2YWx1YXRlKGEpfHx0aGlzLmV2YWx1YXRlKGIpfWZ1bmN0aW9uIGRlKGEsYil7dmFyIGM9dGhpcy5ldmFsdWF0ZShhKTt0aGlzLmV2YWx1YXRlKGIpO3JldHVybiBjfWZ1bmN0aW9uIGVlKGEpe3JldHVybiB0aGlzLmV2YWx1YXRlKGEpfWZ1bmN0aW9uIGZlKCl7cmV0dXJuIEFycmF5LnByb3RvdHlwZS5zbGljZS5hcHBseShhcmd1bWVudHMpfWZ1bmN0aW9uIGdlKGEpe3JldHVybiBuZXcgQ2EoXCJyZXR1cm5cIix0aGlzLmV2YWx1YXRlKGEpKX1cbmZ1bmN0aW9uIGhlKGEsYixjKXthPXRoaXMuZXZhbHVhdGUoYSk7Yj10aGlzLmV2YWx1YXRlKGIpO2M9dGhpcy5ldmFsdWF0ZShjKTtpZihhPT09bnVsbHx8YT09PXZvaWQgMCl7dmFyIGQ9XCJUeXBlRXJyb3I6IENhbid0IHNldCBwcm9wZXJ0eSBcIitiK1wiIG9mIFwiK2ErXCIuXCI7aWYoZWQoKSl0aHJvdyBuZXcgZ2QoZCk7dGhyb3cgRXJyb3IoZCk7fShhIGluc3RhbmNlb2YgV2N8fGEgaW5zdGFuY2VvZiBXYXx8YSBpbnN0YW5jZW9mIFlhKSYmYS5zZXQoYixjKTtyZXR1cm4gY31mdW5jdGlvbiBpZShhLGIpe3JldHVybiB0aGlzLmV2YWx1YXRlKGEpLXRoaXMuZXZhbHVhdGUoYil9XG5mdW5jdGlvbiBqZShhLGIsYyl7YT10aGlzLmV2YWx1YXRlKGEpO3ZhciBkPXRoaXMuZXZhbHVhdGUoYiksZT10aGlzLmV2YWx1YXRlKGMpO2lmKCFBcnJheS5pc0FycmF5KGQpfHwhQXJyYXkuaXNBcnJheShlKSl0aHJvdyBFcnJvcihcIkVycm9yOiBNYWxmb3JtZWQgc3dpdGNoIGluc3RydWN0aW9uLlwiKTtmb3IodmFyIGYsZz0hMSxrPTA7azxkLmxlbmd0aDtrKyspaWYoZ3x8YT09PXRoaXMuZXZhbHVhdGUoZFtrXSkpaWYoZj10aGlzLmV2YWx1YXRlKGVba10pLGYgaW5zdGFuY2VvZiBDYSl7dmFyIG09Zi50eXBlO2lmKG09PT1cImJyZWFrXCIpcmV0dXJuO2lmKG09PT1cInJldHVyblwifHxtPT09XCJjb250aW51ZVwiKXJldHVybiBmfWVsc2UgZz0hMDtpZihlLmxlbmd0aD09PWQubGVuZ3RoKzEmJihmPXRoaXMuZXZhbHVhdGUoZVtlLmxlbmd0aC0xXSksZiBpbnN0YW5jZW9mIENhJiYoZi50eXBlPT09XCJyZXR1cm5cInx8Zi50eXBlPT09XCJjb250aW51ZVwiKSkpcmV0dXJuIGZ9XG5mdW5jdGlvbiBrZShhLGIsYyl7cmV0dXJuIHRoaXMuZXZhbHVhdGUoYSk/dGhpcy5ldmFsdWF0ZShiKTp0aGlzLmV2YWx1YXRlKGMpfWZ1bmN0aW9uIGxlKGEpe2E9dGhpcy5ldmFsdWF0ZShhKTtyZXR1cm4gYSBpbnN0YW5jZW9mIFdjP1wiZnVuY3Rpb25cIjp0eXBlb2YgYX1mdW5jdGlvbiBtZSgpe2Zvcih2YXIgYT10aGlzLkYsYj0wO2I8YXJndW1lbnRzLmxlbmd0aDtiKyspe3ZhciBjPWFyZ3VtZW50c1tiXTt0eXBlb2YgYyE9PVwic3RyaW5nXCJ8fGEuYWRkKGMsdm9pZCAwKX19XG5mdW5jdGlvbiBuZShhLGIsYyxkKXt2YXIgZT10aGlzLmV2YWx1YXRlKGQpO2lmKHRoaXMuZXZhbHVhdGUoYykpe3ZhciBmPUphKHRoaXMuRixlKTtpZihmIGluc3RhbmNlb2YgQ2Epe2lmKGYudHlwZT09PVwiYnJlYWtcIilyZXR1cm47aWYoZi50eXBlPT09XCJyZXR1cm5cIilyZXR1cm4gZn19Zm9yKDt0aGlzLmV2YWx1YXRlKGEpOyl7dmFyIGc9SmEodGhpcy5GLGUpO2lmKGcgaW5zdGFuY2VvZiBDYSl7aWYoZy50eXBlPT09XCJicmVha1wiKWJyZWFrO2lmKGcudHlwZT09PVwicmV0dXJuXCIpcmV0dXJuIGd9dGhpcy5ldmFsdWF0ZShiKX19ZnVuY3Rpb24gb2UoYSl7cmV0dXJufk51bWJlcih0aGlzLmV2YWx1YXRlKGEpKX1mdW5jdGlvbiBwZShhLGIpe3JldHVybiBOdW1iZXIodGhpcy5ldmFsdWF0ZShhKSk8PE51bWJlcih0aGlzLmV2YWx1YXRlKGIpKX1mdW5jdGlvbiBxZShhLGIpe3JldHVybiBOdW1iZXIodGhpcy5ldmFsdWF0ZShhKSk+Pk51bWJlcih0aGlzLmV2YWx1YXRlKGIpKX1cbmZ1bmN0aW9uIHJlKGEsYil7cmV0dXJuIE51bWJlcih0aGlzLmV2YWx1YXRlKGEpKT4+Pk51bWJlcih0aGlzLmV2YWx1YXRlKGIpKX1mdW5jdGlvbiBzZShhLGIpe3JldHVybiBOdW1iZXIodGhpcy5ldmFsdWF0ZShhKSkmTnVtYmVyKHRoaXMuZXZhbHVhdGUoYikpfWZ1bmN0aW9uIHRlKGEsYil7cmV0dXJuIE51bWJlcih0aGlzLmV2YWx1YXRlKGEpKV5OdW1iZXIodGhpcy5ldmFsdWF0ZShiKSl9ZnVuY3Rpb24gdWUoYSxiKXtyZXR1cm4gTnVtYmVyKHRoaXMuZXZhbHVhdGUoYSkpfE51bWJlcih0aGlzLmV2YWx1YXRlKGIpKX1mdW5jdGlvbiB2ZSgpe31cbmZ1bmN0aW9uIHdlKGEsYixjLGQsZSl7dmFyIGY9ITA7dHJ5e3ZhciBnPXRoaXMuZXZhbHVhdGUoYyk7aWYoZyBpbnN0YW5jZW9mIENhKXJldHVybiBnfWNhdGNoKHIpe2lmKCEociBpbnN0YW5jZW9mIGdkJiZhKSl0aHJvdyBmPXIgaW5zdGFuY2VvZiBnZCxyO3ZhciBrPUlhKHRoaXMuRiksbT1uZXcgYWQocik7ay5hZGQoYixtKTt2YXIgbj10aGlzLmV2YWx1YXRlKGQpLHA9SmEoayxuKTtpZihwIGluc3RhbmNlb2YgQ2EpcmV0dXJuIHB9ZmluYWxseXtpZihmJiZlIT09dm9pZCAwKXt2YXIgcT10aGlzLmV2YWx1YXRlKGUpO2lmKHEgaW5zdGFuY2VvZiBDYSlyZXR1cm4gcX19fTt2YXIgeWU9ZnVuY3Rpb24oKXt0aGlzLmo9bmV3IExhO3hlKHRoaXMpfTt5ZS5wcm90b3R5cGUuZXhlY3V0ZT1mdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5qLkxoKGEpfTt2YXIgeGU9ZnVuY3Rpb24oYSl7dmFyIGI9ZnVuY3Rpb24oYyxkKXt2YXIgZT1uZXcgV2MoU3RyaW5nKGMpLGQpO2UuS2EoKTthLmouai5zZXQoU3RyaW5nKGMpLGUpfTtiKFwibWFwXCIsV2QpO2IoXCJhbmRcIixRYyk7YihcImNvbnRhaW5zXCIsVGMpO2IoXCJlcXVhbHNcIixSYyk7YihcIm9yXCIsU2MpO2IoXCJzdGFydHNXaXRoXCIsVWMpO2IoXCJ2YXJpYWJsZVwiLFZjKX07dmFyIEFlPWZ1bmN0aW9uKCl7dGhpcy5EPSExO3RoaXMuaj1uZXcgTGE7emUodGhpcyk7dGhpcy5EPSEwfTtBZS5wcm90b3R5cGUuZXhlY3V0ZT1mdW5jdGlvbihhKXtyZXR1cm4gQmUodGhpcy5qLkxoKGEpKX07dmFyIENlPWZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gQmUoYS5qLk1rKGIsYykpfTtBZS5wcm90b3R5cGUuS2E9ZnVuY3Rpb24oKXt0aGlzLmouS2EoKX07XG52YXIgemU9ZnVuY3Rpb24oYSl7dmFyIGI9ZnVuY3Rpb24oYyxkKXt2YXIgZT1TdHJpbmcoYyksZj1uZXcgV2MoZSxkKTtmLkthKCk7YS5qLmouc2V0KGUsZil9O2IoMCxrZCk7YigxLGxkKTtiKDIsbWQpO2IoMyxuZCk7Yig1NixzZSk7Yig1NyxwZSk7Yig1OCxvZSk7Yig1OSx1ZSk7Yig2MCxxZSk7Yig2MSxyZSk7Yig2Mix0ZSk7Yig1MyxvZCk7Yig0LHBkKTtiKDUscWQpO2IoNTIscmQpO2IoNixzZCk7Yig0OSx2ZCk7Yig3LFZkKTtiKDgsV2QpO2IoOSxxZCk7Yig1MCx3ZCk7YigxMCx4ZCk7YigxMix5ZCk7YigxMyx6ZCk7Yig1MSxLZCk7Yig0NyxDZCk7Yig1NCxEZCk7Yig1NSxFZCk7Yig2MyxKZCk7Yig2NCxGZCk7Yig2NSxIZCk7Yig2NixJZCk7YigxNSxMZCk7YigxNixOZCk7YigxNyxOZCk7YigxOCxPZCk7YigxOSxQZCk7YigyMCxRZCk7YigyMSxSZCk7YigyMixTZCk7YigyMyxUZCk7YigyNCxVZCk7YigyNSxYZCk7YigyNixZZCk7YigyNyxaZCk7YigyOCwkZCk7YigyOSxcbmFlKTtiKDQ1LGJlKTtiKDMwLGNlKTtiKDMyLGRlKTtiKDMzLGRlKTtiKDM0LGVlKTtiKDM1LGVlKTtiKDQ2LGZlKTtiKDM2LGdlKTtiKDQzLGhlKTtiKDM3LGllKTtiKDM4LGplKTtiKDM5LGtlKTtiKDY3LHdlKTtiKDQwLGxlKTtiKDQ0LHZlKTtiKDQxLG1lKTtiKDQyLG5lKX07QWUucHJvdG90eXBlLnJkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuai5yZCgpfTtmdW5jdGlvbiBCZShhKXtpZihhIGluc3RhbmNlb2YgQ2F8fGEgaW5zdGFuY2VvZiBXY3x8YSBpbnN0YW5jZW9mIFdhfHxhIGluc3RhbmNlb2YgWWF8fGEgaW5zdGFuY2VvZiBhZHx8YT09PW51bGx8fGE9PT12b2lkIDB8fHR5cGVvZiBhPT09XCJzdHJpbmdcInx8dHlwZW9mIGE9PT1cIm51bWJlclwifHx0eXBlb2YgYT09PVwiYm9vbGVhblwiKXJldHVybiBhfTt2YXIgRGU9ZnVuY3Rpb24oYSl7dGhpcy5tZXNzYWdlPWF9O2Z1bmN0aW9uIEVlKGEpe3ZhciBiPVwiMDEyMzQ1Njc4OWFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6QUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVotX1wiW2FdO3JldHVybiBiPT09dm9pZCAwP25ldyBEZShcIlZhbHVlIFwiK2ErXCIgY2FuIG5vdCBiZSBlbmNvZGVkIGluIHdlYi1zYWZlIGJhc2U2NCBkaWN0aW9uYXJ5LlwiKTpifTtmdW5jdGlvbiBGZShhKXtzd2l0Y2goYSl7Y2FzZSAxOnJldHVyblwiMVwiO2Nhc2UgMjpjYXNlIDQ6cmV0dXJuXCIwXCI7ZGVmYXVsdDpyZXR1cm5cIi1cIn19O3ZhciBHZT0vXlsxLTlhLXpBLVpfLV1bMS05YS1jXVsxLTlhLXZdXFxkJC87ZnVuY3Rpb24gSGUoYSxiKXtmb3IodmFyIGM9XCJcIixkPSEwO2E+Nzspe3ZhciBlPWEmMzE7YT4+PTU7ZD9kPSExOmV8PTMyO2M9XCJcIitFZShlKStjfWE8PD0yO2R8fChhfD0zMik7cmV0dXJuIGM9XCJcIitFZShhfGIpK2N9O3ZhciBJZT1mdW5jdGlvbigpe2Z1bmN0aW9uIGEoYil7cmV0dXJue3RvU3RyaW5nOmZ1bmN0aW9uKCl7cmV0dXJuIGJ9fX1yZXR1cm57cGs6YShcImNvbnNlbnRcIiksWGg6YShcImNvbnZlcnRfY2FzZV90b1wiKSxZaDphKFwiY29udmVydF9mYWxzZV90b1wiKSxaaDphKFwiY29udmVydF9udWxsX3RvXCIpLGFpOmEoXCJjb252ZXJ0X3RydWVfdG9cIiksYmk6YShcImNvbnZlcnRfdW5kZWZpbmVkX3RvXCIpLGxuOmEoXCJkZWJ1Z19tb2RlX21ldGFkYXRhXCIpLG1hOmEoXCJmdW5jdGlvblwiKSxQZzphKFwiaW5zdGFuY2VfbmFtZVwiKSxQazphKFwibGl2ZV9vbmx5XCIpLFFrOmEoXCJtYWx3YXJlX2Rpc2FibGVkXCIpLE1FVEFEQVRBOmEoXCJtZXRhZGF0YVwiKSxUazphKFwib3JpZ2luYWxfYWN0aXZpdHlfaWRcIiksdW46YShcIm9yaWdpbmFsX3ZlbmRvcl90ZW1wbGF0ZV9pZFwiKSx0bjphKFwib25jZV9vbl9sb2FkXCIpLFNrOmEoXCJvbmNlX3Blcl9ldmVudFwiKSxrajphKFwib25jZV9wZXJfbG9hZFwiKSx3bjphKFwicHJpb3JpdHlfb3ZlcnJpZGVcIiksXG54bjphKFwicmVzcGVjdGVkX2NvbnNlbnRfdHlwZXNcIiksc2o6YShcInNldHVwX3RhZ3NcIiksdGU6YShcInRhZ19pZFwiKSx4ajphKFwidGVhcmRvd25fdGFnc1wiKX19KCk7dmFyIGZmO3ZhciBnZj1bXSxoZj1bXSxqZj1bXSxrZj1bXSxsZj1bXSxtZj17fSxuZixvZjtmdW5jdGlvbiBwZihhKXtvZj1vZnx8YX1cbmZ1bmN0aW9uIHFmKGEpe312YXIgcmYsc2Y9W10sdGY9W107ZnVuY3Rpb24gdWYoYSxiKXt2YXIgYz17fTtjW0llLm1hXT1cIl9fXCIrYTtmb3IodmFyIGQgaW4gYiliLmhhc093blByb3BlcnR5KGQpJiYoY1tcInZ0cF9cIitkXT1iW2RdKTtyZXR1cm4gY31cbmZ1bmN0aW9uIHZmKGEsYixjKXt0cnl7cmV0dXJuIG5mKHdmKGEsYixjKSl9Y2F0Y2goZCl7SlNPTi5zdHJpbmdpZnkoYSl9cmV0dXJuIDJ9ZnVuY3Rpb24geGYoYSl7dmFyIGI9YVtJZS5tYV07aWYoIWIpdGhyb3cgRXJyb3IoXCJFcnJvcjogTm8gZnVuY3Rpb24gbmFtZSBnaXZlbiBmb3IgZnVuY3Rpb24gY2FsbC5cIik7cmV0dXJuISFtZltiXX1cbnZhciB3Zj1mdW5jdGlvbihhLGIsYyl7Yz1jfHxbXTt2YXIgZD17fSxlO2ZvcihlIGluIGEpYS5oYXNPd25Qcm9wZXJ0eShlKSYmKGRbZV09eWYoYVtlXSxiLGMpKTtyZXR1cm4gZH0seWY9ZnVuY3Rpb24oYSxiLGMpe2lmKEFycmF5LmlzQXJyYXkoYSkpe3ZhciBkO3N3aXRjaChhWzBdKXtjYXNlIFwiZnVuY3Rpb25faWRcIjpyZXR1cm4gYVsxXTtjYXNlIFwibGlzdFwiOmQ9W107Zm9yKHZhciBlPTE7ZTxhLmxlbmd0aDtlKyspZC5wdXNoKHlmKGFbZV0sYixjKSk7cmV0dXJuIGQ7Y2FzZSBcIm1hY3JvXCI6dmFyIGY9YVsxXTtpZihjW2ZdKXJldHVybjt2YXIgZz1nZltmXTtpZighZ3x8Yi5pc0Jsb2NrZWQoZykpcmV0dXJuO2NbZl09ITA7dmFyIGs9U3RyaW5nKGdbSWUuUGddKTt0cnl7dmFyIG09d2YoZyxiLGMpO20udnRwX2d0bUV2ZW50SWQ9Yi5pZDtiLnByaW9yaXR5SWQmJihtLnZ0cF9ndG1Qcmlvcml0eUlkPWIucHJpb3JpdHlJZCk7ZD16ZihtLHtldmVudDpiLGluZGV4OmYsdHlwZToyLFxubmFtZTprfSk7cmYmJihkPXJmLm9sKGQsbSkpfWNhdGNoKHkpe2IubG9nTWFjcm9FcnJvciYmYi5sb2dNYWNyb0Vycm9yKHksTnVtYmVyKGYpLGspLGQ9ITF9Y1tmXT0hMTtyZXR1cm4gZDtjYXNlIFwibWFwXCI6ZD17fTtmb3IodmFyIG49MTtuPGEubGVuZ3RoO24rPTIpZFt5ZihhW25dLGIsYyldPXlmKGFbbisxXSxiLGMpO3JldHVybiBkO2Nhc2UgXCJ0ZW1wbGF0ZVwiOmQ9W107Zm9yKHZhciBwPSExLHE9MTtxPGEubGVuZ3RoO3ErKyl7dmFyIHI9eWYoYVtxXSxiLGMpO29mJiYocD1wfHxvZi5kbShyKSk7ZC5wdXNoKHIpfXJldHVybiBvZiYmcD9vZi5ybChkKTpkLmpvaW4oXCJcIik7Y2FzZSBcImVzY2FwZVwiOmQ9eWYoYVsxXSxiLGMpO2lmKG9mJiZBcnJheS5pc0FycmF5KGFbMV0pJiZhWzFdWzBdPT09XCJtYWNyb1wiJiZvZi5mbShhKSlyZXR1cm4gb2YuRG0oZCk7ZD1TdHJpbmcoZCk7Zm9yKHZhciB0PTI7dDxhLmxlbmd0aDt0KyspSmVbYVt0XV0mJihkPUplW2FbdF1dKGQpKTtyZXR1cm4gZDtcbmNhc2UgXCJ0YWdcIjp2YXIgdT1hWzFdO2lmKCFrZlt1XSl0aHJvdyBFcnJvcihcIlVuYWJsZSB0byByZXNvbHZlIHRhZyByZWZlcmVuY2UgXCIrdStcIi5cIik7cmV0dXJue0RqOmFbMl0saW5kZXg6dX07Y2FzZSBcInpiXCI6dmFyIHY9e2FyZzA6YVsyXSxhcmcxOmFbM10saWdub3JlX2Nhc2U6YVs1XX07dltJZS5tYV09YVsxXTt2YXIgdz12Zih2LGIsYykseD0hIWFbNF07cmV0dXJuIHh8fHchPT0yP3ghPT0odz09PTEpOm51bGw7ZGVmYXVsdDp0aHJvdyBFcnJvcihcIkF0dGVtcHRpbmcgdG8gZXhwYW5kIHVua25vd24gVmFsdWUgdHlwZTogXCIrYVswXStcIi5cIik7fX1yZXR1cm4gYX0semY9ZnVuY3Rpb24oYSxiKXt2YXIgYz1hW0llLm1hXSxkPWImJmIuZXZlbnQ7aWYoIWMpdGhyb3cgRXJyb3IoXCJFcnJvcjogTm8gZnVuY3Rpb24gbmFtZSBnaXZlbiBmb3IgZnVuY3Rpb24gY2FsbC5cIik7dmFyIGU9bWZbY10sZj1iJiZiLnR5cGU9PT0yJiYoZD09bnVsbD92b2lkIDA6ZC5yZXBvcnRNYWNyb0Rpc2NyZXBhbmN5KSYmXG5lJiZzZi5pbmRleE9mKGMpIT09LTEsZz17fSxrPXt9LG07Zm9yKG0gaW4gYSlhLmhhc093blByb3BlcnR5KG0pJiZHYihtLFwidnRwX1wiKSYmKGUmJihnW21dPWFbbV0pLCFlfHxmKSYmKGtbbS5zdWJzdHJpbmcoNCldPWFbbV0pO2UmJmQmJmQuY2FjaGVkTW9kZWxWYWx1ZXMmJihnLnZ0cF9ndG1DYWNoZWRWYWx1ZXM9ZC5jYWNoZWRNb2RlbFZhbHVlcyk7aWYoYil7aWYoYi5uYW1lPT1udWxsKXt2YXIgbjthOnt2YXIgcD1iLnR5cGUscT1iLmluZGV4O2lmKHE9PW51bGwpbj1cIlwiO2Vsc2V7dmFyIHI7c3dpdGNoKHApe2Nhc2UgMjpyPWdmW3FdO2JyZWFrO2Nhc2UgMTpyPWtmW3FdO2JyZWFrO2RlZmF1bHQ6bj1cIlwiO2JyZWFrIGF9dmFyIHQ9ciYmcltJZS5QZ107bj10P1N0cmluZyh0KTpcIlwifX1iLm5hbWU9bn1lJiYoZy52dHBfZ3RtRW50aXR5SW5kZXg9Yi5pbmRleCxnLnZ0cF9ndG1FbnRpdHlOYW1lPWIubmFtZSl9dmFyIHUsdix3O2lmKGYmJnRmLmluZGV4T2YoYyk9PT0tMSl7dGYucHVzaChjKTtcbnZhciB4PUJiKCk7dT1lKGcpO3ZhciB5PUJiKCkteCxBPUJiKCk7dj1mZihjLGssYik7dz15LShCYigpLUEpfWVsc2UgaWYoZSYmKHU9ZShnKSksIWV8fGYpdj1mZihjLGssYik7ZiYmZCYmKGQucmVwb3J0TWFjcm9EaXNjcmVwYW5jeShkLmlkLGMsdm9pZCAwLCEwKSxVYSh1KT8oQXJyYXkuaXNBcnJheSh1KT9BcnJheS5pc0FycmF5KHYpOlNhKHUpP1NhKHYpOnR5cGVvZiB1PT09XCJmdW5jdGlvblwiP3R5cGVvZiB2PT09XCJmdW5jdGlvblwiOnU9PT12KXx8ZC5yZXBvcnRNYWNyb0Rpc2NyZXBhbmN5KGQuaWQsYyk6dSE9PXYmJmQucmVwb3J0TWFjcm9EaXNjcmVwYW5jeShkLmlkLGMpLHchPT12b2lkIDAmJmQucmVwb3J0TWFjcm9EaXNjcmVwYW5jeShkLmlkLGMsdykpO3JldHVybiBlP3U6dn07dmFyIEFmPWZ1bmN0aW9uKGEsYixjKXt2YXIgZDtkPUVycm9yLmNhbGwodGhpcyxjKTt0aGlzLm1lc3NhZ2U9ZC5tZXNzYWdlO1wic3RhY2tcImluIGQmJih0aGlzLnN0YWNrPWQuc3RhY2spO3RoaXMucGVybWlzc2lvbklkPWE7dGhpcy5wYXJhbWV0ZXJzPWI7dGhpcy5uYW1lPVwiUGVybWlzc2lvbkVycm9yXCJ9O3lhKEFmLEVycm9yKTtBZi5wcm90b3R5cGUuZ2V0TWVzc2FnZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLm1lc3NhZ2V9O2Z1bmN0aW9uIEJmKGEsYil7aWYoQXJyYXkuaXNBcnJheShhKSl7T2JqZWN0LmRlZmluZVByb3BlcnR5KGEsXCJjb250ZXh0XCIse3ZhbHVlOntsaW5lOmJbMF19fSk7Zm9yKHZhciBjPTE7YzxhLmxlbmd0aDtjKyspQmYoYVtjXSxiW2NdKX19O3ZhciBDZj1mdW5jdGlvbihhLGIpe3ZhciBjO2M9RXJyb3IuY2FsbCh0aGlzLFwiV3JhcHBlZCBlcnJvciBmb3IgRHVzdCBkZWJ1Z2dpbmcuIE9yaWdpbmFsIGVycm9yIG1lc3NhZ2U6IFwiK2EubWVzc2FnZSk7dGhpcy5tZXNzYWdlPWMubWVzc2FnZTtcInN0YWNrXCJpbiBjJiYodGhpcy5zdGFjaz1jLnN0YWNrKTt0aGlzLnhtPWE7dGhpcy5qPVtdO3RoaXMuRD1ifTt5YShDZixFcnJvcik7ZnVuY3Rpb24gRGYoKXtyZXR1cm4gZnVuY3Rpb24oYSxiKXthIGluc3RhbmNlb2YgQ2Z8fChhPW5ldyBDZihhLEVmKSk7YiYmYSBpbnN0YW5jZW9mIENmJiZhLmoucHVzaChiKTt0aHJvdyBhO319ZnVuY3Rpb24gRWYoYSl7aWYoIWEubGVuZ3RoKXJldHVybiBhO2EucHVzaCh7aWQ6XCJtYWluXCIsbGluZTowfSk7Zm9yKHZhciBiPWEubGVuZ3RoLTE7Yj4wO2ItLSlwYihhW2JdLmlkKSYmYS5zcGxpY2UoYisrLDEpO2Zvcih2YXIgYz1hLmxlbmd0aC0xO2M+MDtjLS0pYVtjXS5saW5lPWFbYy0xXS5saW5lO2Euc3BsaWNlKDAsMSk7cmV0dXJuIGF9O2Z1bmN0aW9uIEZmKGEpe2Z1bmN0aW9uIGIocil7Zm9yKHZhciB0PTA7dDxyLmxlbmd0aDt0KyspZFtyW3RdXT0hMH1mb3IodmFyIGM9W10sZD1bXSxlPUdmKGEpLGY9MDtmPGhmLmxlbmd0aDtmKyspe3ZhciBnPWhmW2ZdLGs9SGYoZyxlKTtpZihrKXtmb3IodmFyIG09Zy5hZGR8fFtdLG49MDtuPG0ubGVuZ3RoO24rKyljW21bbl1dPSEwO2IoZy5ibG9ja3x8W10pfWVsc2Ugaz09PW51bGwmJmIoZy5ibG9ja3x8W10pO31mb3IodmFyIHA9W10scT0wO3E8a2YubGVuZ3RoO3ErKyljW3FdJiYhZFtxXSYmKHBbcV09ITApO3JldHVybiBwfVxuZnVuY3Rpb24gSGYoYSxiKXtmb3IodmFyIGM9YVtcImlmXCJdfHxbXSxkPTA7ZDxjLmxlbmd0aDtkKyspe3ZhciBlPWIoY1tkXSk7aWYoZT09PTApcmV0dXJuITE7aWYoZT09PTIpcmV0dXJuIG51bGx9Zm9yKHZhciBmPWEudW5sZXNzfHxbXSxnPTA7ZzxmLmxlbmd0aDtnKyspe3ZhciBrPWIoZltnXSk7aWYoaz09PTIpcmV0dXJuIG51bGw7aWYoaz09PTEpcmV0dXJuITF9cmV0dXJuITB9ZnVuY3Rpb24gR2YoYSl7dmFyIGI9W107cmV0dXJuIGZ1bmN0aW9uKGMpe2JbY109PT12b2lkIDAmJihiW2NdPXZmKGpmW2NdLGEpKTtyZXR1cm4gYltjXX19O3ZhciBJZj17b2w6ZnVuY3Rpb24oYSxiKXtiW0llLlhoXSYmdHlwZW9mIGE9PT1cInN0cmluZ1wiJiYoYT1iW0llLlhoXT09PTE/YS50b0xvd2VyQ2FzZSgpOmEudG9VcHBlckNhc2UoKSk7Yi5oYXNPd25Qcm9wZXJ0eShJZS5aaCkmJmE9PT1udWxsJiYoYT1iW0llLlpoXSk7Yi5oYXNPd25Qcm9wZXJ0eShJZS5iaSkmJmE9PT12b2lkIDAmJihhPWJbSWUuYmldKTtiLmhhc093blByb3BlcnR5KEllLmFpKSYmYT09PSEwJiYoYT1iW0llLmFpXSk7Yi5oYXNPd25Qcm9wZXJ0eShJZS5ZaCkmJmE9PT0hMSYmKGE9YltJZS5ZaF0pO3JldHVybiBhfX07dmFyIEpmPWZ1bmN0aW9uKCl7dGhpcy5qPXt9fSxMZj1mdW5jdGlvbihhLGIpe3ZhciBjPUtmLmosZDsoZD1jLmopW2FdIT1udWxsfHwoZFthXT1bXSk7Yy5qW2FdLnB1c2goZnVuY3Rpb24oKXtyZXR1cm4gYi5hcHBseShudWxsLHBhKHphLmFwcGx5KDAsYXJndW1lbnRzKSkpfSl9O2Z1bmN0aW9uIE1mKGEsYixjLGQpe2lmKGEpZm9yKHZhciBlPTA7ZTxhLmxlbmd0aDtlKyspe3ZhciBmPXZvaWQgMCxnPVwiQSBwb2xpY3kgZnVuY3Rpb24gZGVuaWVkIHRoZSBwZXJtaXNzaW9uIHJlcXVlc3RcIjt0cnl7Zj1hW2VdKGIsYyxkKSxnKz1cIi5cIn1jYXRjaChrKXtnPXR5cGVvZiBrPT09XCJzdHJpbmdcIj9nKyhcIjogXCIrayk6ayBpbnN0YW5jZW9mIEVycm9yP2crKFwiOiBcIitrLm1lc3NhZ2UpOmcrXCIuXCJ9aWYoIWYpdGhyb3cgbmV3IEFmKGMsZCxnKTt9fVxuZnVuY3Rpb24gTmYoYSxiLGMpe3JldHVybiBmdW5jdGlvbigpe3ZhciBkPWFyZ3VtZW50c1swXTtpZihkKXt2YXIgZT1hLmpbZF0sZj1hLmouYWxsO2lmKGV8fGYpe3ZhciBnPWMuYXBwbHkodm9pZCAwLEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywwKSk7TWYoZSxiLGQsZyk7TWYoZixiLGQsZyl9fX19O3ZhciBSZj1mdW5jdGlvbigpe3ZhciBhPWRhdGEucGVybWlzc2lvbnN8fHt9LGI9T2YuY3RpZCxjPXRoaXM7dGhpcy5EPXt9O3RoaXMuaj1uZXcgSmY7dmFyIGQ9e30sZT17fSxmPU5mKHRoaXMuaixiLGZ1bmN0aW9uKCl7dmFyIGc9YXJndW1lbnRzWzBdO3JldHVybiBnJiZkW2ddP2RbZ10uYXBwbHkodm9pZCAwLEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywwKSk6e319KTt6KGEsZnVuY3Rpb24oZyxrKXtmdW5jdGlvbiBtKHApe3ZhciBxPXphLmFwcGx5KDEsYXJndW1lbnRzKTtpZighbltwXSl0aHJvdyBQZihwLHt9LFwiVGhlIHJlcXVlc3RlZCBhZGRpdGlvbmFsIHBlcm1pc3Npb24gXCIrcCtcIiBpcyBub3QgY29uZmlndXJlZC5cIik7Zi5hcHBseShudWxsLFtwXS5jb25jYXQocGEocSkpKX12YXIgbj17fTt6KGssZnVuY3Rpb24ocCxxKXt2YXIgcj1RZihwLHEpO25bcF09ci5hc3NlcnQ7ZFtwXXx8KGRbcF09ci5OKTtyLnpqJiYhZVtwXSYmKGVbcF09ci56ail9KTtcbmMuRFtnXT1mdW5jdGlvbihwLHEpe3ZhciByPW5bcF07aWYoIXIpdGhyb3cgUGYocCx7fSxcIlRoZSByZXF1ZXN0ZWQgcGVybWlzc2lvbiBcIitwK1wiIGlzIG5vdCBjb25maWd1cmVkLlwiKTt2YXIgdD1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsMCk7ci5hcHBseSh2b2lkIDAsdCk7Zi5hcHBseSh2b2lkIDAsdCk7dmFyIHU9ZVtwXTt1JiZ1LmFwcGx5KG51bGwsW21dLmNvbmNhdChwYSh0LnNsaWNlKDEpKSkpfX0pfSxTZj1mdW5jdGlvbihhKXtyZXR1cm4gS2YuRFthXXx8ZnVuY3Rpb24oKXt9fTtcbmZ1bmN0aW9uIFFmKGEsYil7dmFyIGM9dWYoYSxiKTtjLnZ0cF9wZXJtaXNzaW9uTmFtZT1hO2MudnRwX2NyZWF0ZVBlcm1pc3Npb25FcnJvcj1QZjt0cnl7cmV0dXJuIHpmKGMpfWNhdGNoKGQpe3JldHVybnthc3NlcnQ6ZnVuY3Rpb24oZSl7dGhyb3cgbmV3IEFmKGUse30sXCJQZXJtaXNzaW9uIFwiK2UrXCIgaXMgdW5rbm93bi5cIik7fSxOOmZ1bmN0aW9uKCl7dGhyb3cgbmV3IEFmKGEse30sXCJQZXJtaXNzaW9uIFwiK2ErXCIgaXMgdW5rbm93bi5cIik7fX19fWZ1bmN0aW9uIFBmKGEsYixjKXtyZXR1cm4gbmV3IEFmKGEsYixjKX07dmFyIFRmPSExO3ZhciBVZj17fTtVZi5naz14YignJyk7VWYueGw9eGIoJycpO1xudmFyIFlmPWZ1bmN0aW9uKGEpe3ZhciBiPXt9LGM9MDt6KGEsZnVuY3Rpb24oZSxmKXtpZihmIT1udWxsKXt2YXIgZz0oXCJcIitmKS5yZXBsYWNlKC9+L2csXCJ+flwiKTtpZihWZi5oYXNPd25Qcm9wZXJ0eShlKSliW1ZmW2VdXT1nO2Vsc2UgaWYoV2YuaGFzT3duUHJvcGVydHkoZSkpe3ZhciBrPVdmW2VdO2IuaGFzT3duUHJvcGVydHkoayl8fChiW2tdPWcpfWVsc2UgaWYoZT09PVwiY2F0ZWdvcnlcIilmb3IodmFyIG09Zy5zcGxpdChcIi9cIiw1KSxuPTA7bjxtLmxlbmd0aDtuKyspe3ZhciBwPWIscT1YZltuXSxyPW1bbl07cC5oYXNPd25Qcm9wZXJ0eShxKXx8KHBbcV09cil9ZWxzZSBpZihjPDI3KXt2YXIgdD1TdHJpbmcuZnJvbUNoYXJDb2RlKGM8MTA/NDgrYzo2NStjLTEwKTtiW1wia1wiK3RdPShcIlwiK1N0cmluZyhlKSkucmVwbGFjZSgvfi9nLFwifn5cIik7YltcInZcIit0XT1nO2MrK319fSk7dmFyIGQ9W107eihiLGZ1bmN0aW9uKGUsZil7ZC5wdXNoKFwiXCIrZStmKX0pO3JldHVybiBkLmpvaW4oXCJ+XCIpfSxcblZmPXtpdGVtX2lkOlwiaWRcIixpdGVtX25hbWU6XCJubVwiLGl0ZW1fYnJhbmQ6XCJiclwiLGl0ZW1fY2F0ZWdvcnk6XCJjYVwiLGl0ZW1fY2F0ZWdvcnkyOlwiYzJcIixpdGVtX2NhdGVnb3J5MzpcImMzXCIsaXRlbV9jYXRlZ29yeTQ6XCJjNFwiLGl0ZW1fY2F0ZWdvcnk1OlwiYzVcIixpdGVtX3ZhcmlhbnQ6XCJ2YVwiLHByaWNlOlwicHJcIixxdWFudGl0eTpcInF0XCIsY291cG9uOlwiY3BcIixpdGVtX2xpc3RfbmFtZTpcImxuXCIsaW5kZXg6XCJscFwiLGl0ZW1fbGlzdF9pZDpcImxpXCIsZGlzY291bnQ6XCJkc1wiLGFmZmlsaWF0aW9uOlwiYWZcIixwcm9tb3Rpb25faWQ6XCJwaVwiLHByb21vdGlvbl9uYW1lOlwicG5cIixjcmVhdGl2ZV9uYW1lOlwiY25cIixjcmVhdGl2ZV9zbG90OlwiY3NcIixsb2NhdGlvbl9pZDpcImxvXCJ9LFdmPXtpZDpcImlkXCIsbmFtZTpcIm5tXCIsYnJhbmQ6XCJiclwiLHZhcmlhbnQ6XCJ2YVwiLGxpc3RfbmFtZTpcImxuXCIsbGlzdF9wb3NpdGlvbjpcImxwXCIsbGlzdDpcImxuXCIscG9zaXRpb246XCJscFwiLGNyZWF0aXZlOlwiY25cIn0sWGY9W1wiY2FcIixcblwiYzJcIixcImMzXCIsXCJjNFwiLFwiYzVcIl07XG52YXIgWmY9ZnVuY3Rpb24oKXt0aGlzLmV2ZW50cz1bXTt0aGlzLmo9XCJcIjt0aGlzLmlhPXt9O3RoaXMuYmFzZVVybD1cIlwiO3RoaXMuSD0wO3RoaXMuTT10aGlzLkQ9ITE7fTtaZi5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLlIoYSk/KHRoaXMuZXZlbnRzLnB1c2goYSksdGhpcy5qPWEuRCx0aGlzLmlhPWEuaWEsdGhpcy5iYXNlVXJsPWEuYmFzZVVybCx0aGlzLkgrPWEuTSx0aGlzLkQ9YS5ILCEwKTohMX07WmYucHJvdG90eXBlLlI9ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuZXZlbnRzLmxlbmd0aD90aGlzLmV2ZW50cy5sZW5ndGg+PTIwfHxhLk0rdGhpcy5IPj0xNjM4ND8hMTp0aGlzLmJhc2VVcmw9PT1cbmEuYmFzZVVybCYmdGhpcy5EPT09YS5IJiZ0aGlzLlooYSk6ITB9O1pmLnByb3RvdHlwZS5aPWZ1bmN0aW9uKGEpe3ZhciBiPXRoaXM7aWYoIXRoaXMuTSlyZXR1cm4gdGhpcy5qPT09YS5EO3ZhciBjPU9iamVjdC5rZXlzKHRoaXMuaWEpO3JldHVybiBjLmxlbmd0aD09PU9iamVjdC5rZXlzKGEuaWEpLmxlbmd0aCYmYy5ldmVyeShmdW5jdGlvbihkKXtyZXR1cm4gYS5pYS5oYXNPd25Qcm9wZXJ0eShkKSYmU3RyaW5nKGIuaWFbZF0pPT09U3RyaW5nKGEuaWFbZF0pfSl9O3ZhciAkZj17fSxhZz0oJGYudWFhPSEwLCRmLnVhYj0hMCwkZi51YWZ2bD0hMCwkZi51YW1iPSEwLCRmLnVhbT0hMCwkZi51YXA9ITAsJGYudWFwdj0hMCwkZi51YXc9ITAsJGYpO1xudmFyIGRnPWZ1bmN0aW9uKGEsYil7dmFyIGM9YS5ldmVudHM7aWYoYy5sZW5ndGg9PT0xKXJldHVybiBiZyhjWzBdLGIpO3ZhciBkPVtdO2EuaiYmZC5wdXNoKGEuaik7Zm9yKHZhciBlPXt9LGY9MDtmPGMubGVuZ3RoO2YrKyl6KGNbZl0uTGMsZnVuY3Rpb24odCx1KXt1IT1udWxsJiYoZVt0XT1lW3RdfHx7fSxlW3RdW1N0cmluZyh1KV09ZVt0XVtTdHJpbmcodSldKzF8fDEpfSk7dmFyIGc9e307eihlLGZ1bmN0aW9uKHQsdSl7dmFyIHYsdz0tMSx4PTA7eih1LGZ1bmN0aW9uKHksQSl7eCs9QTt2YXIgQj0oeS5sZW5ndGgrdC5sZW5ndGgrMikqKEEtMSk7Qj53JiYodj15LHc9Qil9KTt4PT09Yy5sZW5ndGgmJihnW3RdPXYpfSk7Y2coZyxkKTtiJiZkLnB1c2goXCJfcz1cIitiKTtmb3IodmFyIGs9ZC5qb2luKFwiJlwiKSxtPVtdLG49e30scD0wO3A8Yy5sZW5ndGg7bj17eWg6dm9pZCAwfSxwKyspe3ZhciBxPVtdO24ueWg9e307eihjW3BdLkxjLGZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbih1LFxudil7Z1t1XSE9PVwiXCIrdiYmKHQueWhbdV09dil9fShuKSk7Y1twXS5qJiZxLnB1c2goY1twXS5qKTtjZyhuLnloLHEpO20ucHVzaChxLmpvaW4oXCImXCIpKX12YXIgcj1tLmpvaW4oXCJcXHJcXG5cIik7cmV0dXJue3BhcmFtczprLGJvZHk6cn19LGJnPWZ1bmN0aW9uKGEsYil7dmFyIGM9W107YS5EJiZjLnB1c2goYS5EKTtiJiZjLnB1c2goXCJfcz1cIitiKTtjZyhhLkxjLGMpO3ZhciBkPSExO2EuaiYmKGMucHVzaChhLmopLGQ9ITApO3ZhciBlPWMuam9pbihcIiZcIiksZj1cIlwiLGc9ZS5sZW5ndGgrYS5iYXNlVXJsLmxlbmd0aCsxO2QmJmc+MjA0OCYmKGY9Yy5wb3AoKSxlPWMuam9pbihcIiZcIikpO3JldHVybntwYXJhbXM6ZSxib2R5OmZ9fSxjZz1mdW5jdGlvbihhLGIpe3ooYSxmdW5jdGlvbihjLGQpe2QhPW51bGwmJmIucHVzaChlbmNvZGVVUklDb21wb25lbnQoYykrXCI9XCIrZW5jb2RlVVJJQ29tcG9uZW50KGQpKX0pfTt2YXIgZWc9ZnVuY3Rpb24oYSl7dmFyIGI9W107eihhLGZ1bmN0aW9uKGMsZCl7ZCE9bnVsbCYmYi5wdXNoKGVuY29kZVVSSUNvbXBvbmVudChjKStcIj1cIitlbmNvZGVVUklDb21wb25lbnQoU3RyaW5nKGQpKSl9KTtyZXR1cm4gYi5qb2luKFwiJlwiKX0sZmc9ZnVuY3Rpb24oYSxiLGMsZCxlKXt0aGlzLmJhc2VVcmw9Yjt0aGlzLmVuZHBvaW50PWM7dGhpcy5pYT1hLmlhO3RoaXMuTGM9YS5MYzt0aGlzLmloPWEuaWg7dGhpcy5IPWQ7dGhpcy5EPWVnKGEuaWEpO3RoaXMuaj1lZyhhLmloKTt0aGlzLk09dGhpcy5qLmxlbmd0aDtpZihlJiZ0aGlzLk0+MTYzODQpdGhyb3cgRXJyb3IoXCJFVkVOVF9UT09fTEFSR0VcIik7fTtcbnZhciBpZz1mdW5jdGlvbihhLGIpe2Zvcih2YXIgYz0wO2M8Yi5sZW5ndGg7YysrKXt2YXIgZD1hLGU9YltjXTtpZighZ2cuZXhlYyhlKSl0aHJvdyBFcnJvcihcIkludmFsaWQga2V5IHdpbGRjYXJkXCIpO3ZhciBmPWUuaW5kZXhPZihcIi4qXCIpLGc9ZiE9PS0xJiZmPT09ZS5sZW5ndGgtMixrPWc/ZS5zbGljZSgwLGUubGVuZ3RoLTIpOmUsbTthOmlmKGQubGVuZ3RoPT09MCltPSExO2Vsc2V7Zm9yKHZhciBuPWQuc3BsaXQoXCIuXCIpLHA9MDtwPG4ubGVuZ3RoO3ArKylpZighaGcuZXhlYyhuW3BdKSl7bT0hMTticmVhayBhfW09ITB9aWYoIW18fGsubGVuZ3RoPmQubGVuZ3RofHwhZyYmZC5sZW5ndGghPT1lLmxlbmd0aD8wOmc/R2IoZCxrKSYmKGQ9PT1rfHxkLmNoYXJBdChrLmxlbmd0aCk9PT1cIi5cIik6ZD09PWspcmV0dXJuITB9cmV0dXJuITF9LGhnPS9eW2EteiRfXVtcXHckXSokL2ksZ2c9L14oPzpbYS16XyRdW2Etel8kMC05XSpcXC4pKlthLXpfJF1bYS16XyQwLTldKig/OlxcLlxcKik/JC9pO1xudmFyIGpnPVtcIm1hdGNoZXNcIixcIndlYmtpdE1hdGNoZXNTZWxlY3RvclwiLFwibW96TWF0Y2hlc1NlbGVjdG9yXCIsXCJtc01hdGNoZXNTZWxlY3RvclwiLFwib01hdGNoZXNTZWxlY3RvclwiXTtmdW5jdGlvbiBrZyhhLGIpe3ZhciBjPVN0cmluZyhhKSxkPVN0cmluZyhiKSxlPWMubGVuZ3RoLWQubGVuZ3RoO3JldHVybiBlPj0wJiZjLmluZGV4T2YoZCxlKT09PWV9dmFyIGxnPW5ldyB1YjtmdW5jdGlvbiBtZyhhLGIsYyl7dmFyIGQ9Yz9cImlcIjp2b2lkIDA7dHJ5e3ZhciBlPVN0cmluZyhiKStTdHJpbmcoZCksZj1sZy5nZXQoZSk7Znx8KGY9bmV3IFJlZ0V4cChiLGQpLGxnLnNldChlLGYpKTtyZXR1cm4gZi50ZXN0KGEpfWNhdGNoKGcpe3JldHVybiExfX1mdW5jdGlvbiBuZyhhLGIpe3JldHVybiBTdHJpbmcoYSkuaW5kZXhPZihTdHJpbmcoYikpPj0wfWZ1bmN0aW9uIG9nKGEsYil7cmV0dXJuIFN0cmluZyhhKT09PVN0cmluZyhiKX1cbmZ1bmN0aW9uIHBnKGEsYil7cmV0dXJuIE51bWJlcihhKT49TnVtYmVyKGIpfWZ1bmN0aW9uIHFnKGEsYil7cmV0dXJuIE51bWJlcihhKTw9TnVtYmVyKGIpfWZ1bmN0aW9uIHJnKGEsYil7cmV0dXJuIE51bWJlcihhKT5OdW1iZXIoYil9ZnVuY3Rpb24gc2coYSxiKXtyZXR1cm4gTnVtYmVyKGEpPE51bWJlcihiKX1mdW5jdGlvbiB0ZyhhLGIpe3JldHVybiBHYihTdHJpbmcoYSksU3RyaW5nKGIpKX07dmFyIEFnPS9eKFthLXpdW2EtejAtOV0qKTooIXxcXD8pKFxcKnxzdHJpbmd8Ym9vbGVhbnxudW1iZXJ8Rm58UGl4aWVNYXB8TGlzdHxPcGFxdWVWYWx1ZSkkL2ksQmc9e0ZuOlwiZnVuY3Rpb25cIixQaXhpZU1hcDpcIk9iamVjdFwiLExpc3Q6XCJBcnJheVwifTtcbmZ1bmN0aW9uIEsoYSxiLGMpe2Zvcih2YXIgZD0wO2Q8Yi5sZW5ndGg7ZCsrKXt2YXIgZT1BZy5leGVjKGJbZF0pO2lmKCFlKXRocm93IEVycm9yKFwiSW50ZXJuYWwgRXJyb3IgaW4gXCIrYSk7dmFyIGY9ZVsxXSxnPWVbMl09PT1cIiFcIixrPWVbM10sbT1jW2RdO2lmKG09PW51bGwpe2lmKGcpdGhyb3cgRXJyb3IoXCJFcnJvciBpbiBcIithK1wiLiBSZXF1aXJlZCBhcmd1bWVudCBcIitmK1wiIG5vdCBzdXBwbGllZC5cIik7fWVsc2UgaWYoayE9PVwiKlwiKXt2YXIgbj10eXBlb2YgbTttIGluc3RhbmNlb2YgV2M/bj1cIkZuXCI6bSBpbnN0YW5jZW9mIFdhP249XCJMaXN0XCI6bSBpbnN0YW5jZW9mIFlhP249XCJQaXhpZU1hcFwiOm0gaW5zdGFuY2VvZiBhZCYmKG49XCJPcGFxdWVWYWx1ZVwiKTtpZihuIT09ayl0aHJvdyBFcnJvcihcIkVycm9yIGluIFwiK2ErXCIuIEFyZ3VtZW50IFwiK2YrXCIgaGFzIHR5cGUgXCIrKChCZ1tuXXx8bikrXCIsIHdoaWNoIGRvZXMgbm90IG1hdGNoIHJlcXVpcmVkIHR5cGUgXCIpKygoQmdba118fFxuaykrXCIuXCIpKTt9fX07ZnVuY3Rpb24gQ2coYSl7cmV0dXJuXCJcIithfVxuZnVuY3Rpb24gRGcoYSxiKXt2YXIgYz1bXTtyZXR1cm4gY307ZnVuY3Rpb24gRWcoYSxiKXt2YXIgYz1uZXcgV2MoYSxmdW5jdGlvbigpe2Zvcih2YXIgZD1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsMCksZT0wO2U8ZC5sZW5ndGg7ZSsrKWRbZV09dGhpcy5ldmFsdWF0ZShkW2VdKTt0cnl7cmV0dXJuIGIuYXBwbHkodGhpcyxkKX1jYXRjaChnKXtpZihlZCgpKXRocm93IG5ldyBnZChnLm1lc3NhZ2UpO3Rocm93IGc7fX0pO2MuS2EoKTtyZXR1cm4gY31cbmZ1bmN0aW9uIEZnKGEsYil7dmFyIGM9bmV3IFlhLGQ7Zm9yKGQgaW4gYilpZihiLmhhc093blByb3BlcnR5KGQpKXt2YXIgZT1iW2RdO29iKGUpP2Muc2V0KGQsRWcoYStcIl9cIitkLGUpKTpTYShlKT9jLnNldChkLEZnKGErXCJfXCIrZCxlKSk6KHBiKGUpfHxsKGUpfHx0eXBlb2YgZT09PVwiYm9vbGVhblwiKSYmYy5zZXQoZCxlKX1jLkthKCk7cmV0dXJuIGN9O2Z1bmN0aW9uIEdnKGEsYil7Syh0aGlzLmdldE5hbWUoKSxbXCJhcGlOYW1lOiFzdHJpbmdcIixcIm1lc3NhZ2U6P3N0cmluZ1wiXSxhcmd1bWVudHMpO3ZhciBjPXt9LGQ9bmV3IFlhO3JldHVybiBkPUZnKFwiQXNzZXJ0QXBpU3ViamVjdFwiLGMpfTtmdW5jdGlvbiBIZyhhLGIpe0sodGhpcy5nZXROYW1lKCksW1wiYWN0dWFsOj8qXCIsXCJtZXNzYWdlOj9zdHJpbmdcIl0sYXJndW1lbnRzKTtpZihhIGluc3RhbmNlb2YgY2QpdGhyb3cgRXJyb3IoXCJBcmd1bWVudCBhY3R1YWwgY2Fubm90IGhhdmUgdHlwZSBQcm9taXNlLiBBc3NlcnRpb25zIG9uIGFzeW5jaHJvbm91cyBjb2RlIGFyZW4ndCBzdXBwb3J0ZWQuXCIpO3ZhciBjPXt9LGQ9bmV3IFlhO3JldHVybiBkPUZnKFwiQXNzZXJ0VGhhdFN1YmplY3RcIixjKX07ZnVuY3Rpb24gSWcoYSl7cmV0dXJuIGZ1bmN0aW9uKCl7Zm9yKHZhciBiPVtdLGM9dGhpcy5GLGQ9MDtkPGFyZ3VtZW50cy5sZW5ndGg7KytkKWIucHVzaChKKGFyZ3VtZW50c1tkXSxjKSk7cmV0dXJuIGRkKGEuYXBwbHkobnVsbCxiKSl9fWZ1bmN0aW9uIEpnKCl7Zm9yKHZhciBhPU1hdGgsYj1LZyxjPXt9LGQ9MDtkPGIubGVuZ3RoO2QrKyl7dmFyIGU9YltkXTthLmhhc093blByb3BlcnR5KGUpJiYoY1tlXT1JZyhhW2VdLmJpbmQoYSkpKX1yZXR1cm4gY307ZnVuY3Rpb24gTGcoYSl7dmFyIGI7cmV0dXJuIGJ9O2Z1bmN0aW9uIE1nKGEpe3ZhciBiO0sodGhpcy5nZXROYW1lKCksW1widXJpOiFzdHJpbmdcIl0sYXJndW1lbnRzKTt0cnl7Yj1kZWNvZGVVUklDb21wb25lbnQoYSl9Y2F0Y2goYyl7fXJldHVybiBifTtmdW5jdGlvbiBOZyhhKXt0cnl7cmV0dXJuIGVuY29kZVVSSShhKX1jYXRjaChiKXt9fTtmdW5jdGlvbiBPZyhhKXt0cnl7cmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudChhKX1jYXRjaChiKXt9fTtcbnZhciBQZz1mdW5jdGlvbihhLGIpe2Zvcih2YXIgYz0wO2M8Yi5sZW5ndGg7YysrKXtpZihhPT09dm9pZCAwKXJldHVybjthPWFbYltjXV19cmV0dXJuIGF9LFFnPWZ1bmN0aW9uKGEsYil7dmFyIGM9Yi5wcmVIaXQ7aWYoYyl7dmFyIGQ9YVswXTtzd2l0Y2goZCl7Y2FzZSBcImhpdERhdGFcIjpyZXR1cm4gYS5sZW5ndGg8Mj92b2lkIDA6UGcoYy5nZXRIaXREYXRhKGFbMV0pLGEuc2xpY2UoMikpO2Nhc2UgXCJtZXRhZGF0YVwiOnJldHVybiBhLmxlbmd0aDwyP3ZvaWQgMDpQZyhjLmdldE1ldGFkYXRhKGFbMV0pLGEuc2xpY2UoMikpO2Nhc2UgXCJldmVudE5hbWVcIjpyZXR1cm4gYy5nZXRFdmVudE5hbWUoKTtjYXNlIFwiZGVzdGluYXRpb25JZFwiOnJldHVybiBjLmdldERlc3RpbmF0aW9uSWQoKTtkZWZhdWx0OnRocm93IEVycm9yKGQrXCIgaXMgbm90IGEgdmFsaWQgZmllbGQgdGhhdCBjYW4gYmUgYWNjZXNzZWRcXG4gICAgICAgICAgICAgICAgICAgICAgZnJvbSBQcmVIaXQgZGF0YS5cIik7fX19LFxuU2c9ZnVuY3Rpb24oYSxiKXtpZihhKXtpZihhLmNvbnRleHRWYWx1ZSE9PXZvaWQgMCl7dmFyIGM7YTp7dmFyIGQ9YS5jb250ZXh0VmFsdWUsZT1kLmtleVBhcnRzO2lmKGUmJmUubGVuZ3RoIT09MCl7dmFyIGY9ZC5uYW1lc3BhY2VUeXBlO3N3aXRjaChmKXtjYXNlIDE6Yz1RZyhlLGIpO2JyZWFrIGE7Y2FzZSAyOnZhciBnPWIubWFjcm87Yz1nP2dbZVswXV06dm9pZCAwO2JyZWFrIGE7ZGVmYXVsdDp0aHJvdyBFcnJvcihcIlVua25vd24gTmFtZXNwYWNlIFR5cGUgdXNlZDogXCIrZik7fX1jPXZvaWQgMH1yZXR1cm4gY31pZihhLmJvb2xlYW5FeHByZXNzaW9uVmFsdWUhPT12b2lkIDApcmV0dXJuIFJnKGEuYm9vbGVhbkV4cHJlc3Npb25WYWx1ZSxiKTtpZihhLmJvb2xlYW5WYWx1ZSE9PXZvaWQgMClyZXR1cm4hIWEuYm9vbGVhblZhbHVlO2lmKGEuc3RyaW5nVmFsdWUhPT12b2lkIDApcmV0dXJuIFN0cmluZyhhLnN0cmluZ1ZhbHVlKTtpZihhLmludGVnZXJWYWx1ZSE9PXZvaWQgMClyZXR1cm4gTnVtYmVyKGEuaW50ZWdlclZhbHVlKTtcbmlmKGEuZG91YmxlVmFsdWUhPT12b2lkIDApcmV0dXJuIE51bWJlcihhLmRvdWJsZVZhbHVlKTt0aHJvdyBFcnJvcihcIlVua25vd24gZmllbGQgdXNlZCBmb3IgdmFyaWFibGUgb2YgdHlwZSBFeHByZXNzaW9uVmFsdWU6XCIrYSk7fX0sUmc9ZnVuY3Rpb24oYSxiKXt2YXIgYz1hLmFyZ3M7aWYoIUFycmF5LmlzQXJyYXkoYyl8fGMubGVuZ3RoPT09MCl0aHJvdyBFcnJvcignSW52YWxpZCBib29sZWFuIGV4cHJlc3Npb24gZm9ybWF0LiBFeHBlY3RlZCBcImFyZ3NcIjonK2MrXCIgcHJvcGVydHkgdG9cXG4gICAgICAgICBiZSBub24tZW1wdHkgYXJyYXkuXCIpO3ZhciBkPWZ1bmN0aW9uKGcpe3JldHVybiBTZyhnLGIpfTtzd2l0Y2goYS50eXBlKXtjYXNlIDE6Zm9yKHZhciBlPTA7ZTxjLmxlbmd0aDtlKyspaWYoZChjW2VdKSlyZXR1cm4hMDtyZXR1cm4hMTtjYXNlIDI6Zm9yKHZhciBmPTA7ZjxjLmxlbmd0aDtmKyspaWYoIWQoY1tmXSkpcmV0dXJuITE7cmV0dXJuIGMubGVuZ3RoPjA7Y2FzZSAzOnJldHVybiFkKGNbMF0pO1xuY2FzZSA0OnJldHVybiBtZyhkKGNbMF0pLGQoY1sxXSksITEpO2Nhc2UgNTpyZXR1cm4gb2coZChjWzBdKSxkKGNbMV0pKTtjYXNlIDY6cmV0dXJuIHRnKGQoY1swXSksZChjWzFdKSk7Y2FzZSA3OnJldHVybiBrZyhkKGNbMF0pLGQoY1sxXSkpO2Nhc2UgODpyZXR1cm4gbmcoZChjWzBdKSxkKGNbMV0pKTtjYXNlIDk6cmV0dXJuIHNnKGQoY1swXSksZChjWzFdKSk7Y2FzZSAxMDpyZXR1cm4gcWcoZChjWzBdKSxkKGNbMV0pKTtjYXNlIDExOnJldHVybiByZyhkKGNbMF0pLGQoY1sxXSkpO2Nhc2UgMTI6cmV0dXJuIHBnKGQoY1swXSksZChjWzFdKSk7ZGVmYXVsdDp0aHJvdyBFcnJvcignSW52YWxpZCBib29sZWFuIGV4cHJlc3Npb24gZm9ybWF0LiBFeHBlY3RlZCBcInR5cGVcIiBwcm9wZXJ0eSB0b2JlIGEgcG9zaXRpdmUgaW50ZWdlciB3aGljaCBpcyBsZXNzIHRoYW4gMTMuJyk7fX07ZnVuY3Rpb24gVGcoYSl7Syh0aGlzLmdldE5hbWUoKSxbXCJtZXNzYWdlOj9zdHJpbmdcIl0sYXJndW1lbnRzKTt9O2Z1bmN0aW9uIFVnKGEsYil7Syh0aGlzLmdldE5hbWUoKSxbXCJtaW46IW51bWJlclwiLFwibWF4OiFudW1iZXJcIl0sYXJndW1lbnRzKTtyZXR1cm4gc2IoYSxiKX07ZnVuY3Rpb24gVmcoKXtyZXR1cm4obmV3IERhdGUpLmdldFRpbWUoKX07ZnVuY3Rpb24gV2coYSl7aWYoYT09PW51bGwpcmV0dXJuXCJudWxsXCI7aWYoYSBpbnN0YW5jZW9mIFdhKXJldHVyblwiYXJyYXlcIjtpZihhIGluc3RhbmNlb2YgV2MpcmV0dXJuXCJmdW5jdGlvblwiO2lmKGEgaW5zdGFuY2VvZiBhZCl7dmFyIGI7YT0oYj1hKT09bnVsbD92b2lkIDA6Yi5nZXRWYWx1ZSgpO3ZhciBjO2lmKCgoYz1hKT09bnVsbD92b2lkIDA6Yy5jb25zdHJ1Y3Rvcik9PT12b2lkIDB8fGEuY29uc3RydWN0b3IubmFtZT09PXZvaWQgMCl7dmFyIGQ9U3RyaW5nKGEpO3JldHVybiBkLnN1YnN0cmluZyg4LGQubGVuZ3RoLTEpfXJldHVybiBTdHJpbmcoYS5jb25zdHJ1Y3Rvci5uYW1lKX1yZXR1cm4gdHlwZW9mIGF9O2Z1bmN0aW9uIFhnKGEpe2Z1bmN0aW9uIGIoYyl7cmV0dXJuIGZ1bmN0aW9uKGQpe3RyeXtyZXR1cm4gYyhkKX1jYXRjaChlKXsoVGZ8fFVmLmdrKSYmYS5jYWxsKHRoaXMsZS5tZXNzYWdlKX19fXJldHVybntwYXJzZTpiKGZ1bmN0aW9uKGMpe3JldHVybiBkZChKU09OLnBhcnNlKGMpKX0pLHN0cmluZ2lmeTpiKGZ1bmN0aW9uKGMpe3JldHVybiBKU09OLnN0cmluZ2lmeShKKGMpKX0pfX07ZnVuY3Rpb24gWWcoYSl7cmV0dXJuIHdiKEooYSx0aGlzLkYpKX07ZnVuY3Rpb24gWmcoYSl7cmV0dXJuIE51bWJlcihKKGEsdGhpcy5GKSl9O2Z1bmN0aW9uICRnKGEpe3JldHVybiBhPT09bnVsbD9cIm51bGxcIjphPT09dm9pZCAwP1widW5kZWZpbmVkXCI6YS50b1N0cmluZygpfTtmdW5jdGlvbiBhaChhLGIsYyl7dmFyIGQ9bnVsbCxlPSExO3JldHVybiBlP2Q6bnVsbH07dmFyIEtnPVwiZmxvb3IgY2VpbCByb3VuZCBtYXggbWluIGFicyBwb3cgc3FydFwiLnNwbGl0KFwiIFwiKTtmdW5jdGlvbiBiaCgpe3ZhciBhPXt9O3JldHVybntIbDpmdW5jdGlvbihiKXtyZXR1cm4gYS5oYXNPd25Qcm9wZXJ0eShiKT9hW2JdOnZvaWQgMH0sZGs6ZnVuY3Rpb24oYixjKXthW2JdPWN9LHJlc2V0OmZ1bmN0aW9uKCl7YT17fX19fWZ1bmN0aW9uIGNoKGEsYil7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGM9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoemEuYXBwbHkoMCxhcmd1bWVudHMpLDApO2MudW5zaGlmdChiKTtyZXR1cm4gV2MucHJvdG90eXBlLmludm9rZS5hcHBseShhLGMpfX1cbmZ1bmN0aW9uIGRoKGEsYil7Syh0aGlzLmdldE5hbWUoKSxbXCJhcGlOYW1lOiFzdHJpbmdcIixcIm1vY2s6PypcIl0sYXJndW1lbnRzKTt9XG5mdW5jdGlvbiBlaChhLGIpe0sodGhpcy5nZXROYW1lKCksW1wiYXBpTmFtZTohc3RyaW5nXCIsXCJtb2NrOiFQaXhpZU1hcFwiXSxhcmd1bWVudHMpO307dmFyIGZoPXt9O3ZhciBnaD1mdW5jdGlvbihhKXt2YXIgYj1uZXcgWWE7aWYoYSBpbnN0YW5jZW9mIFdhKWZvcih2YXIgYz1hLk5iKCksZD0wO2Q8Yy5sZW5ndGgoKTtkKyspe3ZhciBlPWMuZ2V0KGQpO2EuaGFzKGUpJiZiLnNldChlLGEuZ2V0KGUpKX1lbHNlIGlmKGEgaW5zdGFuY2VvZiBXYylmb3IodmFyIGY9TmEoYSwxKSxnPTA7ZzxmLmxlbmd0aDtnKyspe3ZhciBrPWZbZ107Yi5zZXQoayxhLmdldChrKSl9ZWxzZSBmb3IodmFyIG09MDttPGEubGVuZ3RoO20rKyliLnNldChtLGFbbV0pO3JldHVybiBifTtcbmZoLmtleXM9ZnVuY3Rpb24oYSl7Syh0aGlzLmdldE5hbWUoKSxbXCJpbnB1dDohKlwiXSxhcmd1bWVudHMpO2lmKGEgaW5zdGFuY2VvZiBXYXx8YSBpbnN0YW5jZW9mIFdjfHx0eXBlb2YgYT09PVwic3RyaW5nXCIpYT1naChhKTtpZihhIGluc3RhbmNlb2YgWWEpcmV0dXJuIGEuTmIoKTtyZXR1cm4gbmV3IFdhfTtcbmZoLnZhbHVlcz1mdW5jdGlvbihhKXtLKHRoaXMuZ2V0TmFtZSgpLFtcImlucHV0OiEqXCJdLGFyZ3VtZW50cyk7aWYoYSBpbnN0YW5jZW9mIFdhfHxhIGluc3RhbmNlb2YgV2N8fHR5cGVvZiBhPT09XCJzdHJpbmdcIilhPWdoKGEpO2lmKGEgaW5zdGFuY2VvZiBZYSlyZXR1cm4gbmV3IFdhKE5hKGEsMikpO3JldHVybiBuZXcgV2F9O1xuZmguZW50cmllcz1mdW5jdGlvbihhKXtLKHRoaXMuZ2V0TmFtZSgpLFtcImlucHV0OiEqXCJdLGFyZ3VtZW50cyk7aWYoYSBpbnN0YW5jZW9mIFdhfHxhIGluc3RhbmNlb2YgV2N8fHR5cGVvZiBhPT09XCJzdHJpbmdcIilhPWdoKGEpO2lmKGEgaW5zdGFuY2VvZiBZYSlyZXR1cm4gWmEoYSk7cmV0dXJuIG5ldyBXYX07ZmguZnJlZXplPWZ1bmN0aW9uKGEpeyhhIGluc3RhbmNlb2YgWWF8fGEgaW5zdGFuY2VvZiBXYXx8YSBpbnN0YW5jZW9mIFdjKSYmYS5LYSgpO3JldHVybiBhfTtcbmZoLmRlbGV0ZT1mdW5jdGlvbihhLGIpe2lmKGEgaW5zdGFuY2VvZiBZYSYmIWEuRClyZXR1cm4gYS5yZW1vdmUoYiksITA7cmV0dXJuITF9O2Z1bmN0aW9uIEwoYSxiKXt2YXIgYz16YS5hcHBseSgyLGFyZ3VtZW50cyksZD1hLkYuajtpZighZCl0aHJvdyBFcnJvcihcIk1pc3NpbmcgcHJvZ3JhbSBzdGF0ZS5cIik7aWYoZC5KbSl7dHJ5e2QuQWouYXBwbHkobnVsbCxbYl0uY29uY2F0KHBhKGMpKSl9Y2F0Y2goZSl7dGhyb3cgaGIoXCJUQUdHSU5HXCIsMjEpLGU7fXJldHVybn1kLkFqLmFwcGx5KG51bGwsW2JdLmNvbmNhdChwYShjKSkpfTt2YXIgaGg9ZnVuY3Rpb24oKXt0aGlzLkQ9e307dGhpcy5qPXt9O3RoaXMuSD0hMDt9O2hoLnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24oYSxiKXt2YXIgYz10aGlzLmNvbnRhaW5zKGEpP3RoaXMuRFthXTp2b2lkIDA7cmV0dXJuIGN9O2hoLnByb3RvdHlwZS5jb250YWlucz1mdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5ELmhhc093blByb3BlcnR5KGEpfTtcbmhoLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24oYSxiLGMpe2lmKHRoaXMuY29udGFpbnMoYSkpdGhyb3cgRXJyb3IoXCJBdHRlbXB0aW5nIHRvIGFkZCBhIGZ1bmN0aW9uIHdoaWNoIGFscmVhZHkgZXhpc3RzOiBcIithK1wiLlwiKTtpZih0aGlzLmouaGFzT3duUHJvcGVydHkoYSkpdGhyb3cgRXJyb3IoXCJBdHRlbXB0aW5nIHRvIGFkZCBhbiBBUEkgd2l0aCBhbiBleGlzdGluZyBwcml2YXRlIEFQSSBuYW1lOiBcIithK1wiLlwiKTt0aGlzLkRbYV09Yz92b2lkIDA6b2IoYik/RWcoYSxiKTpGZyhhLGIpfTtmdW5jdGlvbiBpaChhLGIpe3ZhciBjPXZvaWQgMDtyZXR1cm4gY307ZnVuY3Rpb24gamgoKXt2YXIgYT17fTtcbnJldHVybiBhfTt2YXIgbGg9ZnVuY3Rpb24oYSl7cmV0dXJuIGtoP0UucXVlcnlTZWxlY3RvckFsbChhKTpudWxsfTtcbmZ1bmN0aW9uIG1oKGEsYil7aWYoIWtoKXJldHVybiBudWxsO2lmKEVsZW1lbnQucHJvdG90eXBlLmNsb3Nlc3QpdHJ5e3JldHVybiBhLmNsb3Nlc3QoYil9Y2F0Y2goZSl7cmV0dXJuIG51bGx9dmFyIGM9RWxlbWVudC5wcm90b3R5cGUubWF0Y2hlc3x8RWxlbWVudC5wcm90b3R5cGUud2Via2l0TWF0Y2hlc1NlbGVjdG9yfHxFbGVtZW50LnByb3RvdHlwZS5tb3pNYXRjaGVzU2VsZWN0b3J8fEVsZW1lbnQucHJvdG90eXBlLm1zTWF0Y2hlc1NlbGVjdG9yfHxFbGVtZW50LnByb3RvdHlwZS5vTWF0Y2hlc1NlbGVjdG9yLGQ9YTtpZighRS5kb2N1bWVudEVsZW1lbnQuY29udGFpbnMoZCkpcmV0dXJuIG51bGw7ZG97dHJ5e2lmKGMuY2FsbChkLGIpKXJldHVybiBkfWNhdGNoKGUpe2JyZWFrfWQ9ZC5wYXJlbnRFbGVtZW50fHxkLnBhcmVudE5vZGV9d2hpbGUoZCE9PW51bGwmJmQubm9kZVR5cGU9PT0xKTtyZXR1cm4gbnVsbH12YXIgbmg9ITE7XG5pZihFLnF1ZXJ5U2VsZWN0b3JBbGwpdHJ5e3ZhciBvaD1FLnF1ZXJ5U2VsZWN0b3JBbGwoXCI6cm9vdFwiKTtvaCYmb2gubGVuZ3RoPT0xJiZvaFswXT09RS5kb2N1bWVudEVsZW1lbnQmJihuaD0hMCl9Y2F0Y2goYSl7fXZhciBraD1uaDt2YXIgcGg9L15bMC05QS1GYS1mXXs2NH0kLztmdW5jdGlvbiBxaChhKXt0cnl7cmV0dXJuKG5ldyBUZXh0RW5jb2RlcikuZW5jb2RlKGEpfWNhdGNoKGUpe2Zvcih2YXIgYj1bXSxjPTA7YzxhLmxlbmd0aDtjKyspe3ZhciBkPWEuY2hhckNvZGVBdChjKTtkPDEyOD9iLnB1c2goZCk6ZDwyMDQ4P2IucHVzaCgxOTJ8ZD4+NiwxMjh8ZCY2Myk6ZDw1NTI5Nnx8ZD49NTczNDQ/Yi5wdXNoKDIyNHxkPj4xMiwxMjh8ZD4+NiY2MywxMjh8ZCY2Myk6KGQ9NjU1MzYrKChkJjEwMjMpPDwxMHxhLmNoYXJDb2RlQXQoKytjKSYxMDIzKSxiLnB1c2goMjQwfGQ+PjE4LDEyOHxkPj4xMiY2MywxMjh8ZD4+NiY2MywxMjh8ZCY2MykpfXJldHVybiBuZXcgVWludDhBcnJheShiKX19XG5mdW5jdGlvbiByaChhKXtpZihhPT09XCJcInx8YT09PVwiZTBcIilyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGEpO3ZhciBiO2lmKChiPUQuY3J5cHRvKT09bnVsbD8wOmIuc3VidGxlKXtpZihwaC50ZXN0KGEpKXJldHVybiBQcm9taXNlLnJlc29sdmUoYSk7dHJ5e3ZhciBjPXFoKGEpO3JldHVybiBELmNyeXB0by5zdWJ0bGUuZGlnZXN0KFwiU0hBLTI1NlwiLGMpLnRoZW4oZnVuY3Rpb24oZCl7dmFyIGU9QXJyYXkuZnJvbShuZXcgVWludDhBcnJheShkKSkubWFwKGZ1bmN0aW9uKGYpe3JldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKGYpfSkuam9pbihcIlwiKTtyZXR1cm4gRC5idG9hKGUpLnJlcGxhY2UoL1xcKy9nLFwiLVwiKS5yZXBsYWNlKC9cXC8vZyxcIl9cIikucmVwbGFjZSgvPSskLyxcIlwiKX0pLmNhdGNoKGZ1bmN0aW9uKCl7cmV0dXJuXCJlMlwifSl9Y2F0Y2goZCl7cmV0dXJuIFByb21pc2UucmVzb2x2ZShcImUyXCIpfX1lbHNlIHJldHVybiBQcm9taXNlLnJlc29sdmUoXCJlMVwiKX07ZnVuY3Rpb24gTShhKXtoYihcIkdUTVwiLGEpfTtcbnZhciB2aD1mdW5jdGlvbihhKXt2YXIgYj17fSxjPVtcInR2LjFcIl0sZD0wO3ZhciB1PWMuam9pbihcIn5cIik7cmV0dXJue09oOnt1c2VyRGF0YTpifSxcblZtOnUsZ246ZH19LHhoPWZ1bmN0aW9uKGEpe2lmKEQuUHJvbWlzZSl0cnl7cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKGIpe3doKGEsZnVuY3Rpb24oYyxkKXtiKHtQajpjLFRlOmR9KX0pfSl9Y2F0Y2goYil7fX0seWg9ZnVuY3Rpb24oYSl7Zm9yKHZhciBiPVtcInR2LjFcIl0sYz0wLGQ9MDtkPGEubGVuZ3RoOysrZCl7dmFyIGU9YVtkXS5uYW1lLGY9YVtkXS52YWx1ZSxnPWFbZF0uaW5kZXgsaz1zaFtlXTtrJiZmJiYodGguaW5kZXhPZihlKT09PS0xfHwvXmVcXGQrJC8udGVzdChmKXx8dWgudGVzdChmKXx8cGgudGVzdChmKSkmJihnIT09dm9pZCAwJiYoays9ZyksYi5wdXNoKGsrXCIuXCIrZiksYysrKX1hLmxlbmd0aD09PTEmJmFbMF0ubmFtZT09PVwiZXJyb3JfY29kZVwiJiYoYz0wKTtyZXR1cm57UWo6ZW5jb2RlVVJJQ29tcG9uZW50KGIuam9pbihcIn5cIikpLFRlOmN9fSx3aD1mdW5jdGlvbihhLGIpe3poKGEsZnVuY3Rpb24oYyl7dmFyIGQ9eWgoYyk7YihkLlFqLGQuVGUpfSl9LFxuSGg9ZnVuY3Rpb24oYSl7ZnVuY3Rpb24gYihyLHQsdSx2KXt2YXIgdz1BaChyKTt3IT09XCJcIiYmKHBoLnRlc3Qodyk/ay5wdXNoKHtuYW1lOnQsdmFsdWU6dyxpbmRleDp2fSk6ay5wdXNoKHtuYW1lOnQsdmFsdWU6dSh3KSxpbmRleDp2fSkpfWZ1bmN0aW9uIGMocix0KXt2YXIgdT1yO2lmKGwodSl8fEFycmF5LmlzQXJyYXkodSkpe3U9cWIocik7Zm9yKHZhciB2PTA7djx1Lmxlbmd0aDsrK3Ype3ZhciB3PUFoKHVbdl0pLHg9cGgudGVzdCh3KTt0JiYheCYmTSg4OSk7IXQmJngmJk0oODgpfX19ZnVuY3Rpb24gZChyLHQpe3ZhciB1PXJbdF07Yyh1LCExKTt2YXIgdj1CaFt0XTtyW3ZdJiYoclt0XSYmTSg5MCksdT1yW3ZdLGModSwhMCkpO3JldHVybiB1fWZ1bmN0aW9uIGUocix0LHUpe2Zvcih2YXIgdj1xYihkKHIsdCkpLHc9MDt3PHYubGVuZ3RoOysrdyliKHZbd10sdCx1KX1mdW5jdGlvbiBmKHIsdCx1LHYpe3ZhciB3PWQocix0KTtiKHcsdCx1LHYpfWZ1bmN0aW9uIGcocil7cmV0dXJuIGZ1bmN0aW9uKHQpe00oNjQpO1xucmV0dXJuIHIodCl9fXZhciBrPVtdO2lmKEQubG9jYXRpb24ucHJvdG9jb2whPT1cImh0dHBzOlwiKXJldHVybiBrLnB1c2goe25hbWU6XCJlcnJvcl9jb2RlXCIsdmFsdWU6XCJlM1wiLGluZGV4OnZvaWQgMH0pLGs7ZShhLFwiZW1haWxcIixDaCk7ZShhLFwicGhvbmVfbnVtYmVyXCIsRGgpO2UoYSxcImZpcnN0X25hbWVcIixnKEVoKSk7ZShhLFwibGFzdF9uYW1lXCIsZyhFaCkpO3ZhciBtPWEuaG9tZV9hZGRyZXNzfHx7fTtlKG0sXCJzdHJlZXRcIixnKEZoKSk7ZShtLFwiY2l0eVwiLGcoRmgpKTtlKG0sXCJwb3N0YWxfY29kZVwiLGcoR2gpKTtlKG0sXCJyZWdpb25cIixnKEZoKSk7ZShtLFwiY291bnRyeVwiLGcoR2gpKTtmb3IodmFyIG49cWIoYS5hZGRyZXNzfHx7fSkscD0wO3A8bi5sZW5ndGg7cCsrKXt2YXIgcT1uW3BdO2YocSxcImZpcnN0X25hbWVcIixFaCxwKTtmKHEsXCJsYXN0X25hbWVcIixFaCxwKTtmKHEsXCJzdHJlZXRcIixGaCxwKTtmKHEsXCJjaXR5XCIsRmgscCk7ZihxLFwicG9zdGFsX2NvZGVcIixHaCxwKTtmKHEsXCJyZWdpb25cIixcbkZoLHApO2YocSxcImNvdW50cnlcIixHaCxwKX1yZXR1cm4ga30semg9ZnVuY3Rpb24oYSxiKXt2YXIgYz1IaChhKTtJaChjLGIpfSxBaD1mdW5jdGlvbihhKXtyZXR1cm4gYT09bnVsbD9cIlwiOmwoYSk/emIoU3RyaW5nKGEpKTpcImUwXCJ9LEdoPWZ1bmN0aW9uKGEpe3JldHVybiBhLnJlcGxhY2UoSmgsXCJcIil9LEVoPWZ1bmN0aW9uKGEpe3JldHVybiBGaChhLnJlcGxhY2UoL1xccy9nLFwiXCIpKX0sRmg9ZnVuY3Rpb24oYSl7cmV0dXJuIHpiKGEucmVwbGFjZShLaCxcIlwiKS50b0xvd2VyQ2FzZSgpKX0sRGg9ZnVuY3Rpb24oYSl7YT1hLnJlcGxhY2UoL1tcXHMtKCkvLl0vZyxcIlwiKTthLmNoYXJBdCgwKSE9PVwiK1wiJiYoYT1cIitcIithKTtyZXR1cm4gTGgudGVzdChhKT9hOlwiZTBcIn0sQ2g9ZnVuY3Rpb24oYSl7dmFyIGI9YS50b0xvd2VyQ2FzZSgpLnNwbGl0KFwiQFwiKTtpZihiLmxlbmd0aD09PTIpe3ZhciBjPWJbMF07L14oZ21haWx8Z29vZ2xlbWFpbClcXC4vLnRlc3QoYlsxXSkmJihjPWMucmVwbGFjZSgvXFwuL2csXG5cIlwiKSk7Yz1jK1wiQFwiK2JbMV07aWYoTWgudGVzdChjKSlyZXR1cm4gY31yZXR1cm5cImUwXCJ9LEloPWZ1bmN0aW9uKGEsYil7YS5zb21lKGZ1bmN0aW9uKGMpe2MudmFsdWUmJnRoLmluZGV4T2YoYy5uYW1lKX0pP2IoYSk6RC5Qcm9taXNlP1Byb21pc2UuYWxsKGEubWFwKGZ1bmN0aW9uKGMpe3JldHVybiBjLnZhbHVlJiZ0aC5pbmRleE9mKGMubmFtZSkhPT0tMT9yaChjLnZhbHVlKS50aGVuKGZ1bmN0aW9uKGQpe2MudmFsdWU9ZH0pOlByb21pc2UucmVzb2x2ZSgpfSkpLnRoZW4oZnVuY3Rpb24oKXtiKGEpfSkuY2F0Y2goZnVuY3Rpb24oKXtiKFtdKX0pOmIoW10pfSxLaD0vWzAtOWB+IUAjJCVeJiooKV9cXC0rPTo7PD4sLj98L1xcXFxbXFxdXS9nLE1oPS9eXFxTK0BcXFMrXFwuXFxTKyQvLExoPS9eXFwrXFxkezEwLDE1fSQvLEpoPS9bLn5dL2csdWg9L15bMC05QS1aYS16Xy1dezQzfSQvLE5oPXt9LHNoPShOaC5lbWFpbD1cImVtXCIsTmgucGhvbmVfbnVtYmVyPVwicG5cIixOaC5maXJzdF9uYW1lPVwiZm5cIixcbk5oLmxhc3RfbmFtZT1cImxuXCIsTmguc3RyZWV0PVwic2FcIixOaC5jaXR5PVwiY3RcIixOaC5yZWdpb249XCJyZ1wiLE5oLmNvdW50cnk9XCJjb1wiLE5oLnBvc3RhbF9jb2RlPVwicGNcIixOaC5lcnJvcl9jb2RlPVwiZWNcIixOaCksT2g9e30sQmg9KE9oLmVtYWlsPVwic2hhMjU2X2VtYWlsX2FkZHJlc3NcIixPaC5waG9uZV9udW1iZXI9XCJzaGEyNTZfcGhvbmVfbnVtYmVyXCIsT2guZmlyc3RfbmFtZT1cInNoYTI1Nl9maXJzdF9uYW1lXCIsT2gubGFzdF9uYW1lPVwic2hhMjU2X2xhc3RfbmFtZVwiLE9oLnN0cmVldD1cInNoYTI1Nl9zdHJlZXRcIixPaCksdGg9T2JqZWN0LmZyZWV6ZShbXCJlbWFpbFwiLFwicGhvbmVfbnVtYmVyXCIsXCJmaXJzdF9uYW1lXCIsXCJsYXN0X25hbWVcIixcInN0cmVldFwiXSk7ZnVuY3Rpb24gUGgoYSxiKXtpZihhPT09XCJcIilyZXR1cm4gYjt2YXIgYz1OdW1iZXIoYSk7cmV0dXJuIGlzTmFOKGMpP2I6Y307dmFyIFFoPVtdO2Z1bmN0aW9uIFJoKGEpe3N3aXRjaChhKXtjYXNlIDA6cmV0dXJuIDA7Y2FzZSA0NDpyZXR1cm4gMTtjYXNlIDQ1OnJldHVybiAyO2Nhc2UgNDY6cmV0dXJuIDExO2Nhc2UgNTI6cmV0dXJuIDM7Y2FzZSA1OTpyZXR1cm4gMTQ7Y2FzZSA2MjpyZXR1cm4gNDtjYXNlIDcxOnJldHVybiA3O2Nhc2UgODE6cmV0dXJuIDU7Y2FzZSA5NDpyZXR1cm4gNjtjYXNlIDk1OnJldHVybiAxMztjYXNlIDk2OnJldHVybiAxMDtjYXNlIDk4OnJldHVybiA4O2Nhc2UgOTk6cmV0dXJuIDl9fWZ1bmN0aW9uIFAoYSl7UWhbYV09ITA7dmFyIGI9UmgoYSk7YiE9PXZvaWQgMCYmKGtiW2JdPSEwKX1QKDMxKTtcblAoMjcpO1AoMjgpO1AoMjkpO1AoMzApO1AoNDcpO1AoNzUpO1AoNTYpO1AoMzQpO1AoMTYpO1xuUCgxMDUpO1AoMTUpO1AoMTEwKTtcblAoMTA0KTtQKDYzKTtcblAoODMpO1AoNik7UCg0OCk7XG5QKDQpO1AoNzgpO1xuUCgxMDEpO1AoNzApO1AoNjgpO1AoNjkpO1xuUCg4Mik7UCg4MCk7XG5QKDExNCk7UCgxMTEpO1AoODEpO1xuUCg1KTtQKDcxKTtcblAoOTQpO2xiWzFdPVBoKCcxJyw2RTQpO1xubGJbM109UGgoJzEwJywxKTtsYlsyXT1QaCgnJyw1MCk7UCgyNCk7UCgxMik7XG5QKDY3KTtQKDEwMik7XG5QKDgpO1xuUCg1Myk7XG5QKDIzKTtQKDQzKTtcblAoODQpO1AoOTgpO1AoOTkpO1AoOTYpO1AoODYpO1AoNTApO1AoNTIpO1xuUCg2NSk7UCgxMyk7UCg3Mik7UCg3OSk7UCg0MCk7UCg1OSk7ZnVuY3Rpb24gUShhKXtyZXR1cm4hIVFoW2FdfXZhciBUPXtnOnt3YTpcImFkX3BlcnNvbmFsaXphdGlvblwiLFA6XCJhZF9zdG9yYWdlXCIsTzpcImFkX3VzZXJfZGF0YVwiLFU6XCJhbmFseXRpY3Nfc3RvcmFnZVwiLENiOlwicmVnaW9uXCIsUWI6XCJjb25zZW50X3VwZGF0ZWRcIixaZTpcIndhaXRfZm9yX3VwZGF0ZVwiLGVpOlwiYXBwX3JlbW92ZVwiLGZpOlwiYXBwX3N0b3JlX3JlZnVuZFwiLGdpOlwiYXBwX3N0b3JlX3N1YnNjcmlwdGlvbl9jYW5jZWxcIixoaTpcImFwcF9zdG9yZV9zdWJzY3JpcHRpb25fY29udmVydFwiLGlpOlwiYXBwX3N0b3JlX3N1YnNjcmlwdGlvbl9yZW5ld1wiLHNrOlwiY29uc2VudF91cGRhdGVcIixZZjpcImFkZF9wYXltZW50X2luZm9cIixaZjpcImFkZF9zaGlwcGluZ19pbmZvXCIsamM6XCJhZGRfdG9fY2FydFwiLGtjOlwicmVtb3ZlX2Zyb21fY2FydFwiLGNnOlwidmlld19jYXJ0XCIsUmI6XCJiZWdpbl9jaGVja291dFwiLG1jOlwic2VsZWN0X2l0ZW1cIixpYjpcInZpZXdfaXRlbV9saXN0XCIsRGI6XCJzZWxlY3RfcHJvbW90aW9uXCIsamI6XCJ2aWV3X3Byb21vdGlvblwiLFxuSGE6XCJwdXJjaGFzZVwiLG5jOlwicmVmdW5kXCIsTGE6XCJ2aWV3X2l0ZW1cIixkZzpcImFkZF90b193aXNobGlzdFwiLHRrOlwiZXhjZXB0aW9uXCIsamk6XCJmaXJzdF9vcGVuXCIsa2k6XCJmaXJzdF92aXNpdFwiLGJhOlwiZ3RhZy5jb25maWdcIixUYTpcImd0YWcuZ2V0XCIsbGk6XCJpbl9hcHBfcHVyY2hhc2VcIixTYjpcInBhZ2Vfdmlld1wiLHVrOlwic2NyZWVuX3ZpZXdcIixtaTpcInNlc3Npb25fc3RhcnRcIix2azpcInRpbWluZ19jb21wbGV0ZVwiLHdrOlwidHJhY2tfc29jaWFsXCIsTWM6XCJ1c2VyX2VuZ2FnZW1lbnRcIix4azpcInVzZXJfaWRfdXBkYXRlXCIsa2I6XCJnY2xnYlwiLFVhOlwiZ2NsaWRcIixuaTpcImdjbGdzXCIsb2k6XCJnY2xscFwiLHJpOlwiZ2Nsc3RcIixmYTpcImFkc19kYXRhX3JlZGFjdGlvblwiLHNpOlwiZ2FkX3NvdXJjZVwiLHVpOlwiZ2FkX3NvdXJjZV9zcmNcIixFZDpcImdjbGlkX3VybFwiLHZpOlwiZ2Nsc3JjXCIsZWc6XCJnYnJhaWRcIixhZjpcIndicmFpZFwiLGphOlwiYWxsb3dfYWRfcGVyc29uYWxpemF0aW9uX3NpZ25hbHNcIixiZjpcImFsbG93X2N1c3RvbV9zY3JpcHRzXCIsXG5GZDpcImFsbG93X2RpcmVjdF9nb29nbGVfcmVxdWVzdHNcIixjZjpcImFsbG93X2Rpc3BsYXlfZmVhdHVyZXNcIixHZDpcImFsbG93X2VuaGFuY2VkX2NvbnZlcnNpb25zXCIsbGI6XCJhbGxvd19nb29nbGVfc2lnbmFsc1wiLEFhOlwiYWxsb3dfaW50ZXJlc3RfZ3JvdXBzXCIseWs6XCJhcHBfaWRcIix6azpcImFwcF9pbnN0YWxsZXJfaWRcIixBazpcImFwcF9uYW1lXCIsQms6XCJhcHBfdmVyc2lvblwiLEViOlwiYXVpZFwiLHdpOlwiYXV0b19kZXRlY3Rpb25fZW5hYmxlZFwiLFRiOlwiYXdfcmVtYXJrZXRpbmdcIixkZjpcImF3X3JlbWFya2V0aW5nX29ubHlcIixIZDpcImRpc2NvdW50XCIsSWQ6XCJhd19mZWVkX2NvdW50cnlcIixKZDpcImF3X2ZlZWRfbGFuZ3VhZ2VcIixkYTpcIml0ZW1zXCIsS2Q6XCJhd19tZXJjaGFudF9pZFwiLGZnOlwiYXdfYmFza2V0X3R5cGVcIixOYzpcImNhbXBhaWduX2NvbnRlbnRcIixPYzpcImNhbXBhaWduX2lkXCIsUGM6XCJjYW1wYWlnbl9tZWRpdW1cIixRYzpcImNhbXBhaWduX25hbWVcIixSYzpcImNhbXBhaWduXCIsU2M6XCJjYW1wYWlnbl9zb3VyY2VcIixcblRjOlwiY2FtcGFpZ25fdGVybVwiLG5iOlwiY2xpZW50X2lkXCIseGk6XCJybmRcIixnZzpcImNvbnNlbnRfdXBkYXRlX3R5cGVcIix5aTpcImNvbnRlbnRfZ3JvdXBcIix6aTpcImNvbnRlbnRfdHlwZVwiLFhhOlwiY29udmVyc2lvbl9jb29raWVfcHJlZml4XCIsVWM6XCJjb252ZXJzaW9uX2lkXCIsb2E6XCJjb252ZXJzaW9uX2xpbmtlclwiLEFpOlwiY29udmVyc2lvbl9saW5rZXJfZGlzYWJsZWRcIixVYjpcImNvbnZlcnNpb25fYXBpXCIsZWY6XCJjb29raWVfZGVwcmVjYXRpb25cIixWYTpcImNvb2tpZV9kb21haW5cIixNYTpcImNvb2tpZV9leHBpcmVzXCIsWWE6XCJjb29raWVfZmxhZ3NcIixvYzpcImNvb2tpZV9uYW1lXCIsRmI6XCJjb29raWVfcGF0aFwiLE5hOlwiY29va2llX3ByZWZpeFwiLHFjOlwiY29va2llX3VwZGF0ZVwiLHJjOlwiY291bnRyeVwiLHhhOlwiY3VycmVuY3lcIixMZDpcImN1c3RvbWVyX2xpZmV0aW1lX3ZhbHVlXCIsVmM6XCJjdXN0b21fbWFwXCIsaGc6XCJnY2xkY1wiLE1kOlwiZGNsaWRcIixCaTpcImRlYnVnX21vZGVcIixrYTpcImRldmVsb3Blcl9pZFwiLFxuQ2k6XCJkaXNhYmxlX21lcmNoYW50X3JlcG9ydGVkX3B1cmNoYXNlc1wiLFdjOlwiZGNfY3VzdG9tX3BhcmFtc1wiLERpOlwiZGNfbmF0dXJhbF9zZWFyY2hcIixpZzpcImR5bmFtaWNfZXZlbnRfc2V0dGluZ3NcIixqZzpcImFmZmlsaWF0aW9uXCIsTmQ6XCJjaGVja291dF9vcHRpb25cIixmZjpcImNoZWNrb3V0X3N0ZXBcIixrZzpcImNvdXBvblwiLFhjOlwiaXRlbV9saXN0X25hbWVcIixoZjpcImxpc3RfbmFtZVwiLEVpOlwicHJvbW90aW9uc1wiLFljOlwic2hpcHBpbmdcIixqZjpcInRheFwiLE9kOlwiZW5nYWdlbWVudF90aW1lX21zZWNcIixQZDpcImVuaGFuY2VkX2NsaWVudF9pZFwiLFFkOlwiZW5oYW5jZWRfY29udmVyc2lvbnNcIixsZzpcImVuaGFuY2VkX2NvbnZlcnNpb25zX2F1dG9tYXRpY19zZXR0aW5nc1wiLFJkOlwiZXN0aW1hdGVkX2RlbGl2ZXJ5X2RhdGVcIixrZjpcImV1aWRfbG9nZ2VkX2luX3N0YXRlXCIsWmM6XCJldmVudF9jYWxsYmFja1wiLENrOlwiZXZlbnRfY2F0ZWdvcnlcIixwYjpcImV2ZW50X2RldmVsb3Blcl9pZF9zdHJpbmdcIixcbkRrOlwiZXZlbnRfbGFiZWxcIixzYzpcImV2ZW50XCIsU2Q6XCJldmVudF9zZXR0aW5nc1wiLFRkOlwiZXZlbnRfdGltZW91dFwiLEVrOlwiZGVzY3JpcHRpb25cIixGazpcImZhdGFsXCIsRmk6XCJleHBlcmltZW50c1wiLGxmOlwiZmlyZWJhc2VfaWRcIix1YzpcImZpcnN0X3BhcnR5X2NvbGxlY3Rpb25cIixVZDpcIl94XzIwXCIscWI6XCJfeF8xOVwiLEdpOlwiZmxlZGdlX2Ryb3BfcmVhc29uXCIsbWc6XCJmbGVkZ2VcIixuZzpcImZsaWdodF9lcnJvcl9jb2RlXCIsb2c6XCJmbGlnaHRfZXJyb3JfbWVzc2FnZVwiLEhpOlwiZmxfYWN0aXZpdHlfY2F0ZWdvcnlcIixJaTpcImZsX2FjdGl2aXR5X2dyb3VwXCIscGc6XCJmbF9hZHZlcnRpc2VyX2lkXCIsSmk6XCJmbF9hcl9kZWR1cGVcIixxZzpcIm1hdGNoX2lkXCIsS2k6XCJmbF9yYW5kb21fbnVtYmVyXCIsTGk6XCJ0cmFuXCIsTWk6XCJ1XCIsVmQ6XCJnYWNfZ2NsaWRcIix2YzpcImdhY193YnJhaWRcIixyZzpcImdhY193YnJhaWRfbXVsdGlwbGVfY29udmVyc2lvbnNcIixzZzpcImdhX3Jlc3RyaWN0X2RvbWFpblwiLHVnOlwiZ2FfdGVtcF9jbGllbnRfaWRcIixcbkdrOlwiZ2FfdGVtcF9lY2lkXCIsd2M6XCJnZHByX2FwcGxpZXNcIix2ZzpcImdlb19ncmFudWxhcml0eVwiLEdiOlwidmFsdWVfY2FsbGJhY2tcIixyYjpcInZhbHVlX2tleVwiLHhjOlwiX2dvb2dsZV9uZ1wiLHljOlwiZ29vZ2xlX3NpZ25hbHNcIix3ZzpcImdvb2dsZV90bGRcIixXZDpcImdyb3Vwc1wiLHhnOlwiZ3NhX2V4cGVyaW1lbnRfaWRcIixOaTpcImd0bV91cFwiLEhiOlwiaWZyYW1lX3N0YXRlXCIsYmQ6XCJpZ25vcmVfcmVmZXJyZXJcIixuZjpcImludGVybmFsX3RyYWZmaWNfcmVzdWx0c1wiLFZiOlwiaXNfbGVnYWN5X2NvbnZlcnRlZFwiLEliOlwiaXNfbGVnYWN5X2xvYWRlZFwiLFhkOlwiaXNfcGFzc3Rocm91Z2hcIixkZDpcIl9scHNcIixPYTpcImxhbmd1YWdlXCIsWWQ6XCJsZWdhY3lfZGV2ZWxvcGVyX2lkX3N0cmluZ1wiLHFhOlwibGlua2VyXCIsemM6XCJhY2NlcHRfaW5jb21pbmdcIix0YjpcImRlY29yYXRlX2Zvcm1zXCIsVzpcImRvbWFpbnNcIixKYjpcInVybF9wb3NpdGlvblwiLHlnOlwibWV0aG9kXCIsSGs6XCJuYW1lXCIsZWQ6XCJuZXdfY3VzdG9tZXJcIixcbnpnOlwibm9uX2ludGVyYWN0aW9uXCIsT2k6XCJvcHRpbWl6ZV9pZFwiLFBpOlwicGFnZV9ob3N0bmFtZVwiLGZkOlwicGFnZV9wYXRoXCIsQmE6XCJwYWdlX3JlZmVycmVyXCIsWmE6XCJwYWdlX3RpdGxlXCIsQWc6XCJwYXNzZW5nZXJzXCIsQmc6XCJwaG9uZV9jb252ZXJzaW9uX2NhbGxiYWNrXCIsUWk6XCJwaG9uZV9jb252ZXJzaW9uX2NvdW50cnlfY29kZVwiLENnOlwicGhvbmVfY29udmVyc2lvbl9jc3NfY2xhc3NcIixSaTpcInBob25lX2NvbnZlcnNpb25faWRzXCIsRGc6XCJwaG9uZV9jb252ZXJzaW9uX251bWJlclwiLEVnOlwicGhvbmVfY29udmVyc2lvbl9vcHRpb25zXCIsRmc6XCJfcHJvdGVjdGVkX2F1ZGllbmNlX2VuYWJsZWRcIixnZDpcInF1YW50aXR5XCIsWmQ6XCJyZWRhY3RfZGV2aWNlX2luZm9cIixwZjpcInJlZmVycmFsX2V4Y2x1c2lvbl9kZWZpbml0aW9uXCIsV2I6XCJyZXN0cmljdGVkX2RhdGFfcHJvY2Vzc2luZ1wiLFNpOlwicmV0b2tlblwiLElrOlwic2FtcGxlX3JhdGVcIixxZjpcInNjcmVlbl9uYW1lXCIsS2I6XCJzY3JlZW5fcmVzb2x1dGlvblwiLFxuVGk6XCJzZWFyY2hfdGVybVwiLElhOlwic2VuZF9wYWdlX3ZpZXdcIixYYjpcInNlbmRfdG9cIixoZDpcInNlcnZlcl9jb250YWluZXJfdXJsXCIsamQ6XCJzZXNzaW9uX2R1cmF0aW9uXCIsYWU6XCJzZXNzaW9uX2VuZ2FnZWRcIixyZjpcInNlc3Npb25fZW5nYWdlZF90aW1lXCIsdWI6XCJzZXNzaW9uX2lkXCIsYmU6XCJzZXNzaW9uX251bWJlclwiLHRmOlwiX3NoYXJlZF91c2VyX2lkXCIsa2Q6XCJkZWxpdmVyeV9wb3N0YWxfY29kZVwiLEprOlwidGVtcG9yYXJ5X2NsaWVudF9pZFwiLHVmOlwidG9wbW9zdF91cmxcIixVaTpcInRyYWNraW5nX2lkXCIsdmY6XCJ0cmFmZmljX3R5cGVcIix5YTpcInRyYW5zYWN0aW9uX2lkXCIsTGI6XCJ0cmFuc3BvcnRfdXJsXCIsR2c6XCJ0cmlwX3R5cGVcIixZYjpcInVwZGF0ZVwiLFdhOlwidXJsX3Bhc3N0aHJvdWdoXCIsd2Y6XCJfdXNlcl9hZ2VudF9hcmNoaXRlY3R1cmVcIix4ZjpcIl91c2VyX2FnZW50X2JpdG5lc3NcIix5ZjpcIl91c2VyX2FnZW50X2Z1bGxfdmVyc2lvbl9saXN0XCIsemY6XCJfdXNlcl9hZ2VudF9tb2JpbGVcIixcbkFmOlwiX3VzZXJfYWdlbnRfbW9kZWxcIixCZjpcIl91c2VyX2FnZW50X3BsYXRmb3JtXCIsQ2Y6XCJfdXNlcl9hZ2VudF9wbGF0Zm9ybV92ZXJzaW9uXCIsRGY6XCJfdXNlcl9hZ2VudF93b3c2NFwiLENhOlwidXNlcl9kYXRhXCIsSGc6XCJ1c2VyX2RhdGFfYXV0b19sYXRlbmN5XCIsSWc6XCJ1c2VyX2RhdGFfYXV0b19tZXRhXCIsSmc6XCJ1c2VyX2RhdGFfYXV0b19tdWx0aVwiLEtnOlwidXNlcl9kYXRhX2F1dG9fc2VsZWN0b3JzXCIsTGc6XCJ1c2VyX2RhdGFfYXV0b19zdGF0dXNcIixsZDpcInVzZXJfZGF0YV9tb2RlXCIsZGU6XCJ1c2VyX2RhdGFfc2V0dGluZ3NcIix6YTpcInVzZXJfaWRcIixhYjpcInVzZXJfcHJvcGVydGllc1wiLFZpOlwiX3VzZXJfcmVnaW9uXCIsZWU6XCJ1c19wcml2YWN5X3N0cmluZ1wiLGxhOlwidmFsdWVcIixNZzpcIndicmFpZF9tdWx0aXBsZV9jb252ZXJzaW9uc1wiLGllOlwiX2ZwbV9wYXJhbWV0ZXJzXCIsY2o6XCJfaG9zdF9uYW1lXCIsZGo6XCJfaW5fcGFnZV9jb21tYW5kXCIsZWo6XCJfaXNfcGFzc3Rocm91Z2hfY2lkXCIsXG5NYjpcIm5vbl9wZXJzb25hbGl6ZWRfYWRzXCIscWU6XCJfc3N0X3BhcmFtZXRlcnNcIixvYjpcImNvbnZlcnNpb25fbGFiZWxcIixyYTpcInBhZ2VfbG9jYXRpb25cIixzYjpcImdsb2JhbF9kZXZlbG9wZXJfaWRfc3RyaW5nXCIsQWM6XCJ0Y19wcml2YWN5X3N0cmluZ1wifX0sU2g9e30sVGg9T2JqZWN0LmZyZWV6ZSgoU2hbVC5nLmphXT0xLFNoW1QuZy5jZl09MSxTaFtULmcuR2RdPTEsU2hbVC5nLmxiXT0xLFNoW1QuZy5kYV09MSxTaFtULmcuVmFdPTEsU2hbVC5nLk1hXT0xLFNoW1QuZy5ZYV09MSxTaFtULmcub2NdPTEsU2hbVC5nLkZiXT0xLFNoW1QuZy5OYV09MSxTaFtULmcucWNdPTEsU2hbVC5nLlZjXT0xLFNoW1QuZy5rYV09MSxTaFtULmcuaWddPTEsU2hbVC5nLlpjXT0xLFNoW1QuZy5TZF09MSxTaFtULmcuVGRdPTEsU2hbVC5nLnVjXT0xLFNoW1QuZy5zZ109MSxTaFtULmcueWNdPTEsU2hbVC5nLndnXT0xLFNoW1QuZy5XZF09MSxTaFtULmcubmZdPTEsU2hbVC5nLlZiXT0xLFNoW1QuZy5JYl09XG4xLFNoW1QuZy5xYV09MSxTaFtULmcucGZdPTEsU2hbVC5nLldiXT0xLFNoW1QuZy5JYV09MSxTaFtULmcuWGJdPTEsU2hbVC5nLmhkXT0xLFNoW1QuZy5qZF09MSxTaFtULmcucmZdPTEsU2hbVC5nLmtkXT0xLFNoW1QuZy5MYl09MSxTaFtULmcuWWJdPTEsU2hbVC5nLmRlXT0xLFNoW1QuZy5hYl09MSxTaFtULmcucWVdPTEsU2gpKTtPYmplY3QuZnJlZXplKFtULmcucmEsVC5nLkJhLFQuZy5aYSxULmcuT2EsVC5nLnFmLFQuZy56YSxULmcubGYsVC5nLnlpXSk7XG52YXIgVWg9e30sVmg9T2JqZWN0LmZyZWV6ZSgoVWhbVC5nLmVpXT0xLFVoW1QuZy5maV09MSxVaFtULmcuZ2ldPTEsVWhbVC5nLmhpXT0xLFVoW1QuZy5paV09MSxVaFtULmcuamldPTEsVWhbVC5nLmtpXT0xLFVoW1QuZy5saV09MSxVaFtULmcubWldPTEsVWhbVC5nLk1jXT0xLFVoKSksV2g9e30sWGg9T2JqZWN0LmZyZWV6ZSgoV2hbVC5nLllmXT0xLFdoW1QuZy5aZl09MSxXaFtULmcuamNdPTEsV2hbVC5nLmtjXT0xLFdoW1QuZy5jZ109MSxXaFtULmcuUmJdPTEsV2hbVC5nLm1jXT0xLFdoW1QuZy5pYl09MSxXaFtULmcuRGJdPTEsV2hbVC5nLmpiXT0xLFdoW1QuZy5IYV09MSxXaFtULmcubmNdPTEsV2hbVC5nLkxhXT0xLFdoW1QuZy5kZ109MSxXaCkpLFloPU9iamVjdC5mcmVlemUoW1QuZy5qYSxULmcuRmQsVC5nLmxiLFQuZy5xYyxULmcudWMsVC5nLmJkLFQuZy5JYSxULmcuWWJdKSxaaD1PYmplY3QuZnJlZXplKFtdLmNvbmNhdChwYShZaCkpKSwkaD1PYmplY3QuZnJlZXplKFtULmcuTWEsXG5ULmcuVGQsVC5nLmpkLFQuZy5yZixULmcuT2RdKSxhaT1PYmplY3QuZnJlZXplKFtdLmNvbmNhdChwYSgkaCkpKSxiaT17fSxjaT0oYmlbVC5nLlBdPVwiMVwiLGJpW1QuZy5VXT1cIjJcIixiaVtULmcuT109XCIzXCIsYmlbVC5nLndhXT1cIjRcIixiaSksZGk9e30sZWk9T2JqZWN0LmZyZWV6ZSgoZGlbVC5nLmphXT0xLGRpW1QuZy5GZF09MSxkaVtULmcuR2RdPTEsZGlbVC5nLkFhXT0xLGRpW1QuZy5UYl09MSxkaVtULmcuZGZdPTEsZGlbVC5nLkhkXT0xLGRpW1QuZy5JZF09MSxkaVtULmcuSmRdPTEsZGlbVC5nLmRhXT0xLGRpW1QuZy5LZF09MSxkaVtULmcuWGFdPTEsZGlbVC5nLm9hXT0xLGRpW1QuZy5WYV09MSxkaVtULmcuTWFdPTEsZGlbVC5nLllhXT0xLGRpW1QuZy5OYV09MSxkaVtULmcueGFdPTEsZGlbVC5nLkxkXT0xLGRpW1QuZy5rYV09MSxkaVtULmcuQ2ldPTEsZGlbVC5nLlFkXT0xLGRpW1QuZy5SZF09MSxkaVtULmcubGZdPTEsZGlbVC5nLnVjXT0xLGRpW1QuZy5WYl09MSxkaVtULmcuSWJdPVxuMSxkaVtULmcuT2FdPTEsZGlbVC5nLmVkXT0xLGRpW1QuZy5yYV09MSxkaVtULmcuQmFdPTEsZGlbVC5nLkJnXT0xLGRpW1QuZy5DZ109MSxkaVtULmcuRGddPTEsZGlbVC5nLkVnXT0xLGRpW1QuZy5XYl09MSxkaVtULmcuSWFdPTEsZGlbVC5nLlhiXT0xLGRpW1QuZy5oZF09MSxkaVtULmcua2RdPTEsZGlbVC5nLnlhXT0xLGRpW1QuZy5MYl09MSxkaVtULmcuWWJdPTEsZGlbVC5nLldhXT0xLGRpW1QuZy5DYV09MSxkaVtULmcuemFdPTEsZGlbVC5nLmxhXT0xLGRpKSksZmk9e30sZ2k9T2JqZWN0LmZyZWV6ZSgoZmkuc2VhcmNoPVwic1wiLGZpLnlvdXR1YmU9XCJ5XCIsZmkucGxheXN0b3JlPVwicFwiLGZpLnNob3BwaW5nPVwiaFwiLGZpLmFkcz1cImFcIixmaS5tYXBzPVwibVwiLGZpKSk7T2JqZWN0LmZyZWV6ZShULmcpO3ZhciBoaT17fSxpaT1ELmdvb2dsZV90YWdfbWFuYWdlcj1ELmdvb2dsZV90YWdfbWFuYWdlcnx8e307aGkuUmc9XCI0OTMwXCI7aGkucGU9TnVtYmVyKFwiMFwiKXx8MDtoaS5oYj1cImRhdGFMYXllclwiO2hpLmtuPVwiQ2hBSThLM2x0Z1lRMy9XWG40cjVtdGRiRWlVQVZVWC9McEQ2VlFOeHV1TDE1Smo4ZStPaEFZUHRpSlpHUklGdDdnYUtaSnQ1c0NZMkdnS0NUUVxceDNkXFx4M2RcIjt2YXIgamk9e19fY2w6MSxfX2VjbDoxLF9fZWhsOjEsX19ldmw6MSxfX2ZhbDoxLF9fZmlsOjEsX19mc2w6MSxfX2hsOjEsX19qZWw6MSxfX2xjbDoxLF9fc2RsOjEsX190bDoxLF9feXRsOjF9LGtpPXtfX3BhdXNlZDoxLF9fdGc6MX0sbGk7Zm9yKGxpIGluIGppKWppLmhhc093blByb3BlcnR5KGxpKSYmKGtpW2xpXT0xKTt2YXIgbWk9eGIoXCJ0cnVlXCIpLG5pPSExLG9pLHBpPSExO3BpPSEwO1xub2k9cGk7dmFyIHFpLHJpPSExO3FpPXJpO3ZhciBzaSx0aT0hMTtzaT10aTtoaS5EZD1cInd3dy5nb29nbGV0YWdtYW5hZ2VyLmNvbVwiO3ZhciB1aT1cIlwiK2hpLkRkKyhvaT9cIi9ndGFnL2pzXCI6XCIvZ3RtLmpzXCIpLHZpPW51bGwsd2k9bnVsbCx4aT17fSx5aT17fTtmdW5jdGlvbiB6aSgpe3ZhciBhPWlpLnNlcXVlbmNlfHwxO2lpLnNlcXVlbmNlPWErMTtyZXR1cm4gYX1oaS5xaz1cIlwiO3ZhciBBaT1cIlwiO2hpLlNnPUFpO3ZhciBCaT1uZXcgZnVuY3Rpb24oKXt0aGlzLmo9XCJcIjt0aGlzLkg9ITE7dGhpcy5EPTA7dGhpcy5SPXRoaXMuWj10aGlzLlBhPXRoaXMuTT1cIlwifTtmdW5jdGlvbiBDaSgpe3ZhciBhPUJpLk0ubGVuZ3RoO3JldHVybiBCaS5NW2EtMV09PT1cIi9cIj9CaS5NLnN1YnN0cmluZygwLGEtMSk6QmkuTX1mdW5jdGlvbiBEaSgpe3JldHVybiBCaS5IJiZCaS5EIT09MX1mdW5jdGlvbiBFaShhKXtmb3IodmFyIGI9e30sYz1uYShhLnNwbGl0KFwifFwiKSksZD1jLm5leHQoKTshZC5kb25lO2Q9Yy5uZXh0KCkpYltkLnZhbHVlXT0hMDtyZXR1cm4gYn12YXIgRmk9bmV3IHViLEdpPXt9LEhpPXt9LEtpPXtuYW1lOmhpLmhiLHNldDpmdW5jdGlvbihhLGIpe2goSmIoYSxiKSxHaSk7SWkoKX0sZ2V0OmZ1bmN0aW9uKGEpe3JldHVybiBKaShhLDIpfSxyZXNldDpmdW5jdGlvbigpe0ZpPW5ldyB1YjtHaT17fTtJaSgpfX07ZnVuY3Rpb24gSmkoYSxiKXtyZXR1cm4gYiE9Mj9GaS5nZXQoYSk6TGkoYSl9ZnVuY3Rpb24gTGkoYSxiKXt2YXIgYz1hLnNwbGl0KFwiLlwiKTtiPWJ8fFtdO2Zvcih2YXIgZD1HaSxlPTA7ZTxjLmxlbmd0aDtlKyspe2lmKGQ9PT1udWxsKXJldHVybiExO2lmKGQ9PT12b2lkIDApYnJlYWs7ZD1kW2NbZV1dO2lmKGIuaW5kZXhPZihkKSE9PS0xKXJldHVybn1yZXR1cm4gZH1mdW5jdGlvbiBNaShhLGIpe0hpLmhhc093blByb3BlcnR5KGEpfHwoRmkuc2V0KGEsYiksaChKYihhLGIpLEdpKSxJaSgpKX1cbmZ1bmN0aW9uIE5pKCl7Zm9yKHZhciBhPVtcImd0bS5hbGxvd2xpc3RcIixcImd0bS5ibG9ja2xpc3RcIixcImd0bS53aGl0ZWxpc3RcIixcImd0bS5ibGFja2xpc3RcIixcInRhZ1R5cGVCbGFja2xpc3RcIl0sYj0wO2I8YS5sZW5ndGg7YisrKXt2YXIgYz1hW2JdLGQ9SmkoYywxKTtpZihBcnJheS5pc0FycmF5KGQpfHxTYShkKSlkPWgoZCk7SGlbY109ZH19ZnVuY3Rpb24gSWkoYSl7eihIaSxmdW5jdGlvbihiLGMpe0ZpLnNldChiLGMpO2goSmIoYiksR2kpO2goSmIoYixjKSxHaSk7YSYmZGVsZXRlIEhpW2JdfSl9ZnVuY3Rpb24gT2koYSxiKXt2YXIgYyxkPShiPT09dm9pZCAwPzI6YikhPT0xP0xpKGEpOkZpLmdldChhKTtRYShkKT09PVwiYXJyYXlcInx8UWEoZCk9PT1cIm9iamVjdFwiP2M9aChkKTpjPWQ7cmV0dXJuIGN9O1xudmFyIFBpPWZ1bmN0aW9uKGEsYixjKXtpZighYylyZXR1cm4hMTt2YXIgZD1jLnNlbGVjdG9yX3R5cGUsZT1TdHJpbmcoYy52YWx1ZSksZjtpZihRKDEwMCl8fGQ9PT1cImpzX3ZhcmlhYmxlXCIpZm9yKHZhciBnPWUucmVwbGFjZSgvXFxbXCI/Jz8vZyxcIi5cIikucmVwbGFjZSgvXCI/Jz9cXF0vZyxcIlwiKS5zcGxpdChcIixcIiksaz0wO2s8Zy5sZW5ndGg7aysrKXt2YXIgbT1nW2tdLnRyaW0oKTtpZihtJiYhR2IobSxcIiNcIikmJiFHYihtLFwiLlwiKSl7aWYoR2IobSxcImRhdGFMYXllci5cIikpZj1KaShtLnN1YnN0cmluZygxMCkpO2Vsc2V7dmFyIG49bS5zcGxpdChcIi5cIik7Zj1EW24uc2hpZnQoKV07Zm9yKHZhciBwPTA7cDxuLmxlbmd0aDtwKyspZj1mJiZmW25bcF1dfWlmKGYhPT12b2lkIDApYnJlYWt9fWlmKChRKDEwMCkmJmY9PT12b2lkIDB8fGQ9PT1cImNzc19zZWxlY3RvclwiKSYma2gpdHJ5e3ZhciBxPWxoKGUpO2lmKHEmJnEubGVuZ3RoPjApe2Y9W107Zm9yKHZhciByPTA7cjxxLmxlbmd0aCYmcjxcbihiPT09XCJlbWFpbFwifHxiPT09XCJwaG9uZV9udW1iZXJcIj81OjEpO3IrKylmLnB1c2goRmMocVtyXSl8fHpiKHFbcl0udmFsdWUpKTtmPWYubGVuZ3RoPT09MT9mWzBdOmZ9fWNhdGNoKHQpe00oMTQ5KX1yZXR1cm4gZj8oYVtiXT1mLCEwKTohMX0sUWk9ZnVuY3Rpb24oYSl7aWYoYSl7dmFyIGI9e30sYz0hMTtjPVBpKGIsXCJlbWFpbFwiLGEuZW1haWwpfHxjO2M9UGkoYixcInBob25lX251bWJlclwiLGEucGhvbmUpfHxjO2IuYWRkcmVzcz1bXTtmb3IodmFyIGQ9YS5uYW1lX2FuZF9hZGRyZXNzfHxbXSxlPTA7ZTxkLmxlbmd0aDtlKyspe3ZhciBmPXt9O2M9UGkoZixcImZpcnN0X25hbWVcIixkW2VdLmZpcnN0X25hbWUpfHxjO2M9UGkoZixcImxhc3RfbmFtZVwiLGRbZV0ubGFzdF9uYW1lKXx8YztjPVBpKGYsXCJzdHJlZXRcIixkW2VdLnN0cmVldCl8fGM7Yz1QaShmLFwiY2l0eVwiLGRbZV0uY2l0eSl8fGM7Yz1QaShmLFwicmVnaW9uXCIsZFtlXS5yZWdpb24pfHxjO2M9UGkoZixcImNvdW50cnlcIixkW2VdLmNvdW50cnkpfHxcbmM7Yz1QaShmLFwicG9zdGFsX2NvZGVcIixkW2VdLnBvc3RhbF9jb2RlKXx8YztiLmFkZHJlc3MucHVzaChmKX1yZXR1cm4gYz9iOnZvaWQgMH19LFJpPWZ1bmN0aW9uKGEpe3JldHVybiBTYShhKT8hIWEuZW5hYmxlX2NvZGU6ITF9O3ZhciBTaT0vOlswLTldKyQvLFRpPS9eXFxkK1xcLmZsc1xcLmRvdWJsZWNsaWNrXFwubmV0JC87ZnVuY3Rpb24gVWkoYSxiLGMsZCl7Zm9yKHZhciBlPVtdLGY9bmEoYS5zcGxpdChcIiZcIikpLGc9Zi5uZXh0KCk7IWcuZG9uZTtnPWYubmV4dCgpKXt2YXIgaz1uYShnLnZhbHVlLnNwbGl0KFwiPVwiKSksbT1rLm5leHQoKS52YWx1ZSxuPW9hKGspO2lmKGRlY29kZVVSSUNvbXBvbmVudChtLnJlcGxhY2UoL1xcKy9nLFwiIFwiKSk9PT1iKXt2YXIgcD1uLmpvaW4oXCI9XCIpO2lmKCFjKXJldHVybiBkP3A6ZGVjb2RlVVJJQ29tcG9uZW50KHAucmVwbGFjZSgvXFwrL2csXCIgXCIpKTtlLnB1c2goZD9wOmRlY29kZVVSSUNvbXBvbmVudChwLnJlcGxhY2UoL1xcKy9nLFwiIFwiKSkpfX1yZXR1cm4gYz9lOnZvaWQgMH1cbmZ1bmN0aW9uIFZpKGEsYixjLGQsZSl7YiYmKGI9U3RyaW5nKGIpLnRvTG93ZXJDYXNlKCkpO2lmKGI9PT1cInByb3RvY29sXCJ8fGI9PT1cInBvcnRcIilhLnByb3RvY29sPVdpKGEucHJvdG9jb2wpfHxXaShELmxvY2F0aW9uLnByb3RvY29sKTtiPT09XCJwb3J0XCI/YS5wb3J0PVN0cmluZyhOdW1iZXIoYS5ob3N0bmFtZT9hLnBvcnQ6RC5sb2NhdGlvbi5wb3J0KXx8KGEucHJvdG9jb2w9PT1cImh0dHBcIj84MDphLnByb3RvY29sPT09XCJodHRwc1wiPzQ0MzpcIlwiKSk6Yj09PVwiaG9zdFwiJiYoYS5ob3N0bmFtZT0oYS5ob3N0bmFtZXx8RC5sb2NhdGlvbi5ob3N0bmFtZSkucmVwbGFjZShTaSxcIlwiKS50b0xvd2VyQ2FzZSgpKTtyZXR1cm4gWGkoYSxiLGMsZCxlKX1cbmZ1bmN0aW9uIFhpKGEsYixjLGQsZSl7dmFyIGYsZz1XaShhLnByb3RvY29sKTtiJiYoYj1TdHJpbmcoYikudG9Mb3dlckNhc2UoKSk7c3dpdGNoKGIpe2Nhc2UgXCJ1cmxfbm9fZnJhZ21lbnRcIjpmPVlpKGEpO2JyZWFrO2Nhc2UgXCJwcm90b2NvbFwiOmY9ZzticmVhaztjYXNlIFwiaG9zdFwiOmY9YS5ob3N0bmFtZS5yZXBsYWNlKFNpLFwiXCIpLnRvTG93ZXJDYXNlKCk7aWYoYyl7dmFyIGs9L153d3dcXGQqXFwuLy5leGVjKGYpO2smJmtbMF0mJihmPWYuc3Vic3RyaW5nKGtbMF0ubGVuZ3RoKSl9YnJlYWs7Y2FzZSBcInBvcnRcIjpmPVN0cmluZyhOdW1iZXIoYS5wb3J0KXx8KGc9PT1cImh0dHBcIj84MDpnPT09XCJodHRwc1wiPzQ0MzpcIlwiKSk7YnJlYWs7Y2FzZSBcInBhdGhcIjphLnBhdGhuYW1lfHxhLmhvc3RuYW1lfHxoYihcIlRBR0dJTkdcIiwxKTtmPWEucGF0aG5hbWUuc3Vic3RyaW5nKDAsMSk9PT1cIi9cIj9hLnBhdGhuYW1lOlwiL1wiK2EucGF0aG5hbWU7dmFyIG09Zi5zcGxpdChcIi9cIik7KGR8fFtdKS5pbmRleE9mKG1bbS5sZW5ndGgtXG4xXSk+PTAmJihtW20ubGVuZ3RoLTFdPVwiXCIpO2Y9bS5qb2luKFwiL1wiKTticmVhaztjYXNlIFwicXVlcnlcIjpmPWEuc2VhcmNoLnJlcGxhY2UoXCI/XCIsXCJcIik7ZSYmKGY9VWkoZixlLCExKSk7YnJlYWs7Y2FzZSBcImV4dGVuc2lvblwiOnZhciBuPWEucGF0aG5hbWUuc3BsaXQoXCIuXCIpO2Y9bi5sZW5ndGg+MT9uW24ubGVuZ3RoLTFdOlwiXCI7Zj1mLnNwbGl0KFwiL1wiKVswXTticmVhaztjYXNlIFwiZnJhZ21lbnRcIjpmPWEuaGFzaC5yZXBsYWNlKFwiI1wiLFwiXCIpO2JyZWFrO2RlZmF1bHQ6Zj1hJiZhLmhyZWZ9cmV0dXJuIGZ9ZnVuY3Rpb24gV2koYSl7cmV0dXJuIGE/YS5yZXBsYWNlKFwiOlwiLFwiXCIpLnRvTG93ZXJDYXNlKCk6XCJcIn1mdW5jdGlvbiBZaShhKXt2YXIgYj1cIlwiO2lmKGEmJmEuaHJlZil7dmFyIGM9YS5ocmVmLmluZGV4T2YoXCIjXCIpO2I9YzwwP2EuaHJlZjphLmhyZWYuc3Vic3RyaW5nKDAsYyl9cmV0dXJuIGJ9dmFyIFppPXt9LCRpPTA7XG5mdW5jdGlvbiBhaihhKXt2YXIgYj1aaVthXTtpZighYil7dmFyIGM9RS5jcmVhdGVFbGVtZW50KFwiYVwiKTthJiYoYy5ocmVmPWEpO3ZhciBkPWMucGF0aG5hbWU7ZFswXSE9PVwiL1wiJiYoYXx8aGIoXCJUQUdHSU5HXCIsMSksZD1cIi9cIitkKTt2YXIgZT1jLmhvc3RuYW1lLnJlcGxhY2UoU2ksXCJcIik7Yj17aHJlZjpjLmhyZWYscHJvdG9jb2w6Yy5wcm90b2NvbCxob3N0OmMuaG9zdCxob3N0bmFtZTplLHBhdGhuYW1lOmQsc2VhcmNoOmMuc2VhcmNoLGhhc2g6Yy5oYXNoLHBvcnQ6Yy5wb3J0fTskaTw1JiYoWmlbYV09YiwkaSsrKX1yZXR1cm4gYn1cbmZ1bmN0aW9uIGJqKGEpe2Z1bmN0aW9uIGIobil7dmFyIHA9bi5zcGxpdChcIj1cIilbMF07cmV0dXJuIGQuaW5kZXhPZihwKTwwP246cCtcIj0wXCJ9ZnVuY3Rpb24gYyhuKXtyZXR1cm4gbi5zcGxpdChcIiZcIikubWFwKGIpLmZpbHRlcihmdW5jdGlvbihwKXtyZXR1cm4gcCE9PXZvaWQgMH0pLmpvaW4oXCImXCIpfXZhciBkPVwiZ2NsaWQgZGNsaWQgZ2JyYWlkIHdicmFpZCBnY2xhdyBnY2xkYyBnY2xoYSBnY2xnZiBnY2xnYiBfZ2xcIi5zcGxpdChcIiBcIiksZT1haihhKSxmPWEuc3BsaXQoL1s/I10vKVswXSxnPWUuc2VhcmNoLGs9ZS5oYXNoO2dbMF09PT1cIj9cIiYmKGc9Zy5zdWJzdHJpbmcoMSkpO2tbMF09PT1cIiNcIiYmKGs9ay5zdWJzdHJpbmcoMSkpO2c9YyhnKTtrPWMoayk7ZyE9PVwiXCImJihnPVwiP1wiK2cpO2shPT1cIlwiJiYoaz1cIiNcIitrKTt2YXIgbT1cIlwiK2YrZytrO21bbS5sZW5ndGgtMV09PT1cIi9cIiYmKG09bS5zdWJzdHJpbmcoMCxtLmxlbmd0aC0xKSk7cmV0dXJuIG19XG5mdW5jdGlvbiBjaihhKXt2YXIgYj1haihELmxvY2F0aW9uLmhyZWYpLGM9VmkoYixcImhvc3RcIiwhMSk7aWYoYyYmYy5tYXRjaChUaSkpe3ZhciBkPVZpKGIsXCJwYXRoXCIpO2lmKGQpe3ZhciBlPWQuc3BsaXQoYStcIj1cIik7aWYoZS5sZW5ndGg+MSlyZXR1cm4gZVsxXS5zcGxpdChcIjtcIilbMF0uc3BsaXQoXCI/XCIpWzBdfX19ZnVuY3Rpb24gZGooYSl7Zm9yKHZhciBiPTA7YjwzOysrYil0cnl7dmFyIGM9ZGVjb2RlVVJJQ29tcG9uZW50KGEpLnJlcGxhY2UoL1xcKy9nLFwiIFwiKTtpZihjPT09YSlicmVhazthPWN9Y2F0Y2goZCl7cmV0dXJuXCJcIn1yZXR1cm4gYX07dmFyIGVqPXtcImh0dHBzOi8vd3d3Lmdvb2dsZS5jb21cIjpcIi9nXCIsXCJodHRwczovL3d3dy5nb29nbGVhZHNlcnZpY2VzLmNvbVwiOlwiL2FzXCIsXCJodHRwczovL3BhZ2VhZDIuZ29vZ2xlc3luZGljYXRpb24uY29tXCI6XCIvZ3NcIn07ZnVuY3Rpb24gZmooYSxiKXtpZihhKXt2YXIgYz1cIlwiK2E7Yy5pbmRleE9mKFwiaHR0cDovL1wiKSE9PTAmJmMuaW5kZXhPZihcImh0dHBzOi8vXCIpIT09MCYmKGM9XCJodHRwczovL1wiK2MpO2NbYy5sZW5ndGgtMV09PT1cIi9cIiYmKGM9Yy5zdWJzdHJpbmcoMCxjLmxlbmd0aC0xKSk7cmV0dXJuIGFqKFwiXCIrYytiKS5ocmVmfX1mdW5jdGlvbiBnaihhLGIpe2lmKERpKCl8fHFpKXJldHVybiBmaihhLGIpfWZ1bmN0aW9uIGhqKCl7cmV0dXJuISFoaS5TZyYmaGkuU2cuc3BsaXQoXCJAQFwiKS5qb2luKFwiXCIpIT09XCJTR1RNX1RPS0VOXCJ9XG5mdW5jdGlvbiBpaihhKXtmb3IodmFyIGI9bmEoW1QuZy5oZCxULmcuTGJdKSxjPWIubmV4dCgpOyFjLmRvbmU7Yz1iLm5leHQoKSl7dmFyIGQ9VShhLGMudmFsdWUpO2lmKGQpcmV0dXJuIGR9fWZ1bmN0aW9uIGpqKGEsYil7cmV0dXJuIERpKCk/XCJcIitDaSgpKyhiP2VqW2FdfHxcIlwiOlwiXCIpOmF9O2Z1bmN0aW9uIGtqKGEpe3ZhciBiPVN0cmluZyhhW0llLm1hXXx8XCJcIikucmVwbGFjZSgvXy9nLFwiXCIpO3JldHVybiBHYihiLFwiY3Z0XCIpP1wiY3Z0XCI6Yn12YXIgbGo9RC5sb2NhdGlvbi5zZWFyY2guaW5kZXhPZihcIj9ndG1fbGF0ZW5jeT1cIik+PTB8fEQubG9jYXRpb24uc2VhcmNoLmluZGV4T2YoXCImZ3RtX2xhdGVuY3k9XCIpPj0wO3ZhciBtaj17c2FtcGxlUmF0ZTpcIjAuMDA1MDAwXCIsbGs6XCJcIixobjpcIjAuMDFcIn0sbmo9TWF0aC5yYW5kb20oKSxvajtpZighKG9qPWxqKSl7dmFyIHBqPW1qLnNhbXBsZVJhdGU7b2o9bmo8TnVtYmVyKHBqKX12YXIgcWo9b2oscmo9KHJjPT1udWxsP3ZvaWQgMDpyYy5pbmNsdWRlcyhcImd0bV9kZWJ1Zz1kXCIpKXx8bGp8fG5qPj0xLU51bWJlcihtai5obik7dmFyIHNqPS9ndGFnWy5cXC9danMvLHRqPS9ndG1bLlxcL11qcy8sdWo9ITE7ZnVuY3Rpb24gdmooYSl7aWYodWopcmV0dXJuXCIxXCI7dmFyIGI9YS5zY3JpcHRTb3VyY2U7aWYoYil7aWYoc2oudGVzdChiKSlyZXR1cm5cIjNcIjtpZih0ai50ZXN0KGIpKXJldHVyblwiMlwifXJldHVyblwiMFwifWZ1bmN0aW9uIHdqKGEsYil7dmFyIGM9eGooKTtjLnBlbmRpbmd8fChjLnBlbmRpbmc9W10pO3JiKGMucGVuZGluZyxmdW5jdGlvbihkKXtyZXR1cm4gZC50YXJnZXQuY3RpZD09PWEuY3RpZCYmZC50YXJnZXQuaXNEZXN0aW5hdGlvbj09PWEuaXNEZXN0aW5hdGlvbn0pfHxjLnBlbmRpbmcucHVzaCh7dGFyZ2V0OmEsb25Mb2FkOmJ9KX1cbnZhciB5aj1mdW5jdGlvbigpe3RoaXMuY29udGFpbmVyPXt9O3RoaXMuZGVzdGluYXRpb249e307dGhpcy5jYW5vbmljYWw9e307dGhpcy5wZW5kaW5nPVtdO3RoaXMuc2lsb2VkPVtdO3RoaXMuaW5qZWN0ZWRGaXJzdFBhcnR5Q29udGFpbmVycz17fTt2YXIgYTt2YXIgYj1ELmdvb2dsZV90YWdzX2ZpcnN0X3BhcnR5fHxbXTtpZihBcnJheS5pc0FycmF5KGIpKXtmb3IodmFyIGM9e30sZD1uYShiKSxlPWQubmV4dCgpOyFlLmRvbmU7ZT1kLm5leHQoKSljW2UudmFsdWVdPSEwO2E9T2JqZWN0LmZyZWV6ZShjKX1lbHNlIGE9e307dGhpcy5pbmplY3RlZEZpcnN0UGFydHlDb250YWluZXJzPWF9O2Z1bmN0aW9uIHhqKCl7dmFyIGE9c2MoXCJnb29nbGVfdGFnX2RhdGFcIix7fSksYj1hLnRpZHI7Ynx8KGI9bmV3IHlqLGEudGlkcj1iKTtyZXR1cm4gYn07dmFyIHpqPXt9LEFqPSExLE9mPXtjdGlkOlwiRy1QS004RUZKTTNOXCIsY2Fub25pY2FsQ29udGFpbmVySWQ6XCIxMzQ0NDY1ODZcIixSajpcIkctUEtNOEVGSk0zTnxHVC1XUEZMOUpTXCIsU2o6XCJHLVBLTThFRkpNM05cIn07emoubWU9eGIoXCJcIik7ZnVuY3Rpb24gQmooKXt2YXIgYT1DaigpO3JldHVybiBBaj9hLm1hcChEaik6YX1mdW5jdGlvbiBFaigpe3ZhciBhPUZqKCk7cmV0dXJuIEFqP2EubWFwKERqKTphfWZ1bmN0aW9uIEdqKCl7cmV0dXJuIEhqKE9mLmN0aWQpfWZ1bmN0aW9uIElqKCl7cmV0dXJuIEhqKE9mLmNhbm9uaWNhbENvbnRhaW5lcklkfHxcIl9cIitPZi5jdGlkKX1mdW5jdGlvbiBDaigpe3JldHVybiBPZi5Saj9PZi5Sai5zcGxpdChcInxcIik6W09mLmN0aWRdfWZ1bmN0aW9uIEZqKCl7cmV0dXJuIE9mLlNqP09mLlNqLnNwbGl0KFwifFwiKTpbXX1cbmZ1bmN0aW9uIEpqKCl7dmFyIGE9S2ooTGooKSksYj1hJiZhLnBhcmVudDtpZihiKXJldHVybiBLaihiKX1mdW5jdGlvbiBLaihhKXt2YXIgYj14aigpO3JldHVybiBhLmlzRGVzdGluYXRpb24/Yi5kZXN0aW5hdGlvblthLmN0aWRdOmIuY29udGFpbmVyW2EuY3RpZF19ZnVuY3Rpb24gSGooYSl7cmV0dXJuIEFqP0RqKGEpOmF9ZnVuY3Rpb24gRGooYSl7cmV0dXJuXCJzaWxvZWRfXCIrYX1mdW5jdGlvbiBNaihhKXtyZXR1cm4gQWo/UWooYSk6YX1mdW5jdGlvbiBRaihhKXthPVN0cmluZyhhKTtyZXR1cm4gR2IoYSxcInNpbG9lZF9cIik/YS5zdWJzdHJpbmcoNyk6YX1cbmZ1bmN0aW9uIFJqKCl7dmFyIGE9ITE7YT0hMDtpZihhKXt2YXIgYj14aigpO2lmKGIuc2lsb2VkKXtmb3IodmFyIGM9W10sZD1DaigpLm1hcChEaiksZT1GaigpLm1hcChEaiksZj17fSxnPTA7ZzxiLnNpbG9lZC5sZW5ndGg7Zj17SmY6dm9pZCAwfSxnKyspZi5KZj1iLnNpbG9lZFtnXSwhQWomJnJiKGYuSmYuaXNEZXN0aW5hdGlvbj9lOmQsZnVuY3Rpb24oayl7cmV0dXJuIGZ1bmN0aW9uKG0pe3JldHVybiBtPT09ay5KZi5jdGlkfX0oZikpP0FqPSEwOmMucHVzaChmLkpmKTtiLnNpbG9lZD1jfX19XG5mdW5jdGlvbiBTaigpe3ZhciBhPXhqKCk7aWYoYS5wZW5kaW5nKXtmb3IodmFyIGIsYz1bXSxkPSExLGU9QmooKSxmPUVqKCksZz17fSxrPTA7azxhLnBlbmRpbmcubGVuZ3RoO2c9e1JlOnZvaWQgMH0saysrKWcuUmU9YS5wZW5kaW5nW2tdLHJiKGcuUmUudGFyZ2V0LmlzRGVzdGluYXRpb24/ZjplLGZ1bmN0aW9uKG0pe3JldHVybiBmdW5jdGlvbihuKXtyZXR1cm4gbj09PW0uUmUudGFyZ2V0LmN0aWR9fShnKSk/ZHx8KGI9Zy5SZS5vbkxvYWQsZD0hMCk6Yy5wdXNoKGcuUmUpO2EucGVuZGluZz1jO2lmKGIpdHJ5e2IoSWooKSl9Y2F0Y2gobSl7fX19XG5mdW5jdGlvbiBUaigpe2Zvcih2YXIgYT1PZi5jdGlkLGI9QmooKSxjPUVqKCksZD1mdW5jdGlvbihuLHApe3ZhciBxPXtjYW5vbmljYWxDb250YWluZXJJZDpPZi5jYW5vbmljYWxDb250YWluZXJJZCxzY3JpcHRDb250YWluZXJJZDphLHN0YXRlOjIsY29udGFpbmVyczpiLnNsaWNlKCksZGVzdGluYXRpb25zOmMuc2xpY2UoKX07cWMmJihxLnNjcmlwdEVsZW1lbnQ9cWMpO3JjJiYocS5zY3JpcHRTb3VyY2U9cmMpO2lmKEpqKCk9PT12b2lkIDApe3ZhciByO2E6e2lmKChxLnNjcmlwdENvbnRhaW5lcklkfHxcIlwiKS5pbmRleE9mKFwiR1RNLVwiKT49MCl7dmFyIHQ7Yjp7aWYocS5zY3JpcHRTb3VyY2Upe2Zvcih2YXIgdT1CaS5ILHY9YWoocS5zY3JpcHRTb3VyY2UpLHc9dT92LnBhdGhuYW1lOlwiXCIrdi5ob3N0bmFtZSt2LnBhdGhuYW1lLHg9RS5zY3JpcHRzLHk9XCJcIixBPTA7QTx4Lmxlbmd0aDsrK0Epe3ZhciBCPXhbQV07aWYoIShCLmlubmVySFRNTC5sZW5ndGg9PT0wfHwhdSYmQi5pbm5lckhUTUwuaW5kZXhPZihxLnNjcmlwdENvbnRhaW5lcklkfHxcblwiU0hPVUxEX05PVF9CRV9TRVRcIik8MHx8Qi5pbm5lckhUTUwuaW5kZXhPZih3KTwwKSl7aWYoQi5pbm5lckhUTUwuaW5kZXhPZihcIihmdW5jdGlvbih3LGQscyxsLGkpXCIpPj0wKXt0PVN0cmluZyhBKTticmVhayBifXk9U3RyaW5nKEEpfX1pZih5KXt0PXk7YnJlYWsgYn19dD12b2lkIDB9dmFyIEM9dDtpZihDKXt1aj0hMDtyPUM7YnJlYWsgYX19dmFyIEg9W10uc2xpY2UuY2FsbChkb2N1bWVudC5zY3JpcHRzKTtyPXEuc2NyaXB0RWxlbWVudD9TdHJpbmcoSC5pbmRleE9mKHEuc2NyaXB0RWxlbWVudCkpOlwiLTFcIn1xLmh0bWxMb2FkT3JkZXI9cjtxLmxvYWRTY3JpcHRUeXBlPXZqKHEpfXZhciBJPXA/ZS5kZXN0aW5hdGlvbjplLmNvbnRhaW5lcixGPUlbbl07Rj8ocCYmRi5zdGF0ZT09PTAmJk0oOTMpLE9iamVjdC5hc3NpZ24oRixxKSk6SVtuXT1xfSxlPXhqKCksZj1uYShiKSxnPWYubmV4dCgpOyFnLmRvbmU7Zz1mLm5leHQoKSlkKGcudmFsdWUsITEpO2Zvcih2YXIgaz1uYShjKSxcbm09ay5uZXh0KCk7IW0uZG9uZTttPWsubmV4dCgpKWQobS52YWx1ZSwhMCk7ZS5jYW5vbmljYWxbSWooKV09e307U2ooKX1mdW5jdGlvbiBVaihhKXtyZXR1cm4hIXhqKCkuY29udGFpbmVyW2FdfWZ1bmN0aW9uIFZqKGEpe3ZhciBiPXhqKCkuZGVzdGluYXRpb25bYV07cmV0dXJuISFiJiYhIWIuc3RhdGV9ZnVuY3Rpb24gTGooKXtyZXR1cm57Y3RpZDpHaigpLGlzRGVzdGluYXRpb246emoubWV9fWZ1bmN0aW9uIFdqKGEpe3ZhciBiPXhqKCk7KGIuc2lsb2VkPWIuc2lsb2VkfHxbXSkucHVzaChhKX1mdW5jdGlvbiBYaigpe3ZhciBhPXhqKCkuY29udGFpbmVyLGI7Zm9yKGIgaW4gYSlpZihhLmhhc093blByb3BlcnR5KGIpJiZhW2JdLnN0YXRlPT09MSlyZXR1cm4hMDtyZXR1cm4hMX1mdW5jdGlvbiBZaigpe3ZhciBhPXt9O3ooeGooKS5kZXN0aW5hdGlvbixmdW5jdGlvbihiLGMpe2Muc3RhdGU9PT0wJiYoYVtRaihiKV09Yyl9KTtyZXR1cm4gYX1cbmZ1bmN0aW9uIFpqKGEpe3JldHVybiEhKGEmJmEucGFyZW50JiZhLmNvbnRleHQmJmEuY29udGV4dC5zb3VyY2U9PT0xJiZhLnBhcmVudC5jdGlkLmluZGV4T2YoXCJHVE0tXCIpIT09MCl9dmFyIGFrPVwiL3RkP2lkPVwiK09mLmN0aWQsYms9W1widlwiLFwidFwiLFwicGlkXCIsXCJkbFwiLFwidGRwXCJdLGNrPVtcIm1jY1wiXSxkaz17fSxlaz17fTtmdW5jdGlvbiBmayhhLGIsYyl7ZWtbYV09YjsoYz09PXZvaWQgMHx8YykmJmdrKGEpfWZ1bmN0aW9uIGdrKGEsYil7aWYoZGtbYV09PT12b2lkIDB8fChiPT09dm9pZCAwPzA6YikpZGtbYV09ITB9ZnVuY3Rpb24gaGsoYSl7YT1hPT09dm9pZCAwPyExOmE7dmFyIGI9T2JqZWN0LmtleXMoZGspLmZpbHRlcihmdW5jdGlvbihjKXtyZXR1cm4gZGtbY109PT0hMCYmZWtbY10hPT12b2lkIDAmJihhfHwhY2suaW5jbHVkZXMoYykpfSkubWFwKGZ1bmN0aW9uKGMpe3ZhciBkPWVrW2NdO3R5cGVvZiBkPT09XCJmdW5jdGlvblwiJiYoZD1kKCkpO3JldHVybiBkP1wiJlwiK2MrXCI9XCIrZDpcIlwifSkuam9pbihcIlwiKTtyZXR1cm5cIlwiK2pqKFwiaHR0cHM6Ly93d3cuZ29vZ2xldGFnbWFuYWdlci5jb21cIikrYWsrKFwiXCIrYitcIiZ6PTBcIil9XG5mdW5jdGlvbiBpaygpe09iamVjdC5rZXlzKGRrKS5mb3JFYWNoKGZ1bmN0aW9uKGEpe2JrLmluZGV4T2YoYSk8MCYmKGRrW2FdPSExKX0pfWZ1bmN0aW9uIGprKGEpe2E9YT09PXZvaWQgMD8hMTphO2lmKHJqJiZPZi5jdGlkKXt2YXIgYj1oayhhKTthP01jKGIpOkFjKGIpO2lrKCl9fWZ1bmN0aW9uIGtrKCl7T2JqZWN0LmtleXMoZGspLmZpbHRlcihmdW5jdGlvbihhKXtyZXR1cm4gZGtbYV0mJiFiay5pbmNsdWRlcyhhKX0pLmxlbmd0aD4wJiZqayghMCl9dmFyIGxrPXNiKCk7ZnVuY3Rpb24gbWsoKXtsaz1zYigpfWZ1bmN0aW9uIG5rKCl7ZmsoXCJ2XCIsXCIzXCIpO2ZrKFwidFwiLFwidFwiKTtmayhcInBpZFwiLGZ1bmN0aW9uKCl7cmV0dXJuIFN0cmluZyhsayl9KTtDYyhELFwicGFnZWhpZGVcIixrayk7RC5zZXRJbnRlcnZhbChtayw4NjRFNSl9ZnVuY3Rpb24gb2soKXt2YXIgYT1zYyhcImdvb2dsZV90YWdfZGF0YVwiLHt9KTtyZXR1cm4gYS5pY3M9YS5pY3N8fG5ldyBwa312YXIgcGs9ZnVuY3Rpb24oKXt0aGlzLmVudHJpZXM9e307dGhpcy53YWl0UGVyaW9kVGltZWRPdXQ9dGhpcy53YXNTZXRMYXRlPXRoaXMuYWNjZXNzZWRBbnk9dGhpcy5hY2Nlc3NlZERlZmF1bHQ9dGhpcy51c2VkSW1wbGljaXQ9dGhpcy51c2VkVXBkYXRlPXRoaXMudXNlZERlZmF1bHQ9dGhpcy51c2VkRGVjbGFyZT10aGlzLmFjdGl2ZT0hMTt0aGlzLmo9W119O1xucGsucHJvdG90eXBlLmRlZmF1bHQ9ZnVuY3Rpb24oYSxiLGMsZCxlLGYsZyl7dGhpcy51c2VkRGVmYXVsdHx8dGhpcy51c2VkRGVjbGFyZXx8IXRoaXMuYWNjZXNzZWREZWZhdWx0JiYhdGhpcy5hY2Nlc3NlZEFueXx8KHRoaXMud2FzU2V0TGF0ZT0hMCk7dGhpcy51c2VkRGVmYXVsdD10aGlzLmFjdGl2ZT0hMDtoYihcIlRBR0dJTkdcIiwxOSk7Yj09bnVsbD9oYihcIlRBR0dJTkdcIiwxOCk6cWsodGhpcyxhLGI9PT1cImdyYW50ZWRcIixjLGQsZSxmLGcpfTtway5wcm90b3R5cGUud2FpdEZvclVwZGF0ZT1mdW5jdGlvbihhLGIsYyl7Zm9yKHZhciBkPTA7ZDxhLmxlbmd0aDtkKyspcWsodGhpcyxhW2RdLHZvaWQgMCx2b2lkIDAsXCJcIixcIlwiLGIsYyl9O1xudmFyIHFrPWZ1bmN0aW9uKGEsYixjLGQsZSxmLGcsayl7dmFyIG09YS5lbnRyaWVzLG49bVtiXXx8e30scD1uLnJlZ2lvbixxPWQmJmwoZCk/ZC50b1VwcGVyQ2FzZSgpOnZvaWQgMDtlPWUudG9VcHBlckNhc2UoKTtmPWYudG9VcHBlckNhc2UoKTtpZihlPT09XCJcInx8cT09PWZ8fChxPT09ZT9wIT09ZjohcSYmIXApKXt2YXIgcj0hIShnJiZnPjAmJm4udXBkYXRlPT09dm9pZCAwKSx0PXtyZWdpb246cSxkZWNsYXJlX3JlZ2lvbjpuLmRlY2xhcmVfcmVnaW9uLGltcGxpY2l0Om4uaW1wbGljaXQsZGVmYXVsdDpjIT09dm9pZCAwP2M6bi5kZWZhdWx0LGRlY2xhcmU6bi5kZWNsYXJlLHVwZGF0ZTpuLnVwZGF0ZSxxdWlldDpyfTtpZihlIT09XCJcInx8bi5kZWZhdWx0IT09ITEpbVtiXT10O3ImJkQuc2V0VGltZW91dChmdW5jdGlvbigpe21bYl09PT10JiZ0LnF1aWV0JiYoaGIoXCJUQUdHSU5HXCIsMiksYS53YWl0UGVyaW9kVGltZWRPdXQ9ITAsYS5jbGVhclRpbWVvdXQoYix2b2lkIDAsayksXG5hLm5vdGlmeUxpc3RlbmVycygpKX0sZyl9fTtiYT1way5wcm90b3R5cGU7YmEuY2xlYXJUaW1lb3V0PWZ1bmN0aW9uKGEsYixjKXt2YXIgZD1bYV0sZT1jLmRlbGVnYXRlZENvbnNlbnRUeXBlcyxmO2ZvcihmIGluIGUpZS5oYXNPd25Qcm9wZXJ0eShmKSYmZVtmXT09PWEmJmQucHVzaChmKTt2YXIgZz10aGlzLmVudHJpZXNbYV18fHt9LGs9dGhpcy5nZXRDb25zZW50U3RhdGUoYSxjKTtpZihnLnF1aWV0KXtnLnF1aWV0PSExO2Zvcih2YXIgbT1uYShkKSxuPW0ubmV4dCgpOyFuLmRvbmU7bj1tLm5leHQoKSlyayh0aGlzLG4udmFsdWUpfWVsc2UgaWYoYiE9PXZvaWQgMCYmayE9PWIpZm9yKHZhciBwPW5hKGQpLHE9cC5uZXh0KCk7IXEuZG9uZTtxPXAubmV4dCgpKXJrKHRoaXMscS52YWx1ZSl9O1xuYmEudXBkYXRlPWZ1bmN0aW9uKGEsYixjKXt0aGlzLnVzZWREZWZhdWx0fHx0aGlzLnVzZWREZWNsYXJlfHx0aGlzLnVzZWRVcGRhdGV8fCF0aGlzLmFjY2Vzc2VkQW55fHwodGhpcy53YXNTZXRMYXRlPSEwKTt0aGlzLnVzZWRVcGRhdGU9dGhpcy5hY3RpdmU9ITA7aWYoYiE9bnVsbCl7dmFyIGQ9dGhpcy5nZXRDb25zZW50U3RhdGUoYSxjKSxlPXRoaXMuZW50cmllczsoZVthXT1lW2FdfHx7fSkudXBkYXRlPWI9PT1cImdyYW50ZWRcIjt0aGlzLmNsZWFyVGltZW91dChhLGQsYyl9fTtcbmJhLmRlY2xhcmU9ZnVuY3Rpb24oYSxiLGMsZCxlKXt0aGlzLnVzZWREZWNsYXJlPXRoaXMuYWN0aXZlPSEwO3ZhciBmPXRoaXMuZW50cmllcyxnPWZbYV18fHt9LGs9Zy5kZWNsYXJlX3JlZ2lvbixtPWMmJmwoYyk/Yy50b1VwcGVyQ2FzZSgpOnZvaWQgMDtkPWQudG9VcHBlckNhc2UoKTtlPWUudG9VcHBlckNhc2UoKTtpZihkPT09XCJcInx8bT09PWV8fChtPT09ZD9rIT09ZTohbSYmIWspKXt2YXIgbj17cmVnaW9uOmcucmVnaW9uLGRlY2xhcmVfcmVnaW9uOm0sZGVjbGFyZTpiPT09XCJncmFudGVkXCIsaW1wbGljaXQ6Zy5pbXBsaWNpdCxkZWZhdWx0OmcuZGVmYXVsdCx1cGRhdGU6Zy51cGRhdGUscXVpZXQ6Zy5xdWlldH07aWYoZCE9PVwiXCJ8fGcuZGVjbGFyZSE9PSExKWZbYV09bn19O1xuYmEuaW1wbGljaXQ9ZnVuY3Rpb24oYSxiKXt0aGlzLnVzZWRJbXBsaWNpdD0hMDt2YXIgYz10aGlzLmVudHJpZXMsZD1jW2FdPWNbYV18fHt9O2QuaW1wbGljaXQhPT0hMSYmKGQuaW1wbGljaXQ9Yj09PVwiZ3JhbnRlZFwiKX07XG5iYS5nZXRDb25zZW50U3RhdGU9ZnVuY3Rpb24oYSxiKXt2YXIgYz10aGlzLmVudHJpZXMsZD1jW2FdfHx7fSxlPWQudXBkYXRlO2lmKGUhPT12b2lkIDApcmV0dXJuIGU/MToyO2lmKG1iKDgpJiZiLnVzZWRDb250YWluZXJTY29wZWREZWZhdWx0cyl7dmFyIGY9Yi5jb250YWluZXJTY29wZWREZWZhdWx0c1thXTtpZihmPT09MylyZXR1cm4gMTtpZihmPT09MilyZXR1cm4gMn1lbHNlIGlmKGU9ZC5kZWZhdWx0LGUhPT12b2lkIDApcmV0dXJuIGU/MToyO2lmKGI9PW51bGw/MDpiLmRlbGVnYXRlZENvbnNlbnRUeXBlcy5oYXNPd25Qcm9wZXJ0eShhKSl7dmFyIGc9Yi5kZWxlZ2F0ZWRDb25zZW50VHlwZXNbYV0saz1jW2ddfHx7fTtlPWsudXBkYXRlO2lmKGUhPT12b2lkIDApcmV0dXJuIGU/MToyO2lmKG1iKDgpJiZiLnVzZWRDb250YWluZXJTY29wZWREZWZhdWx0cyl7dmFyIG09Yi5jb250YWluZXJTY29wZWREZWZhdWx0c1tnXTtpZihtPT09MylyZXR1cm4gMTtpZihtPT09MilyZXR1cm4gMn1lbHNlIGlmKGU9XG5rLmRlZmF1bHQsZSE9PXZvaWQgMClyZXR1cm4gZT8xOjJ9ZT1kLmRlY2xhcmU7aWYoZSE9PXZvaWQgMClyZXR1cm4gZT8xOjI7ZT1kLmltcGxpY2l0O3JldHVybiBlIT09dm9pZCAwP2U/Mzo0OjB9O2JhLmFkZExpc3RlbmVyPWZ1bmN0aW9uKGEsYil7dGhpcy5qLnB1c2goe2NvbnNlbnRUeXBlczphLENsOmJ9KX07dmFyIHJrPWZ1bmN0aW9uKGEsYil7Zm9yKHZhciBjPTA7YzxhLmoubGVuZ3RoOysrYyl7dmFyIGQ9YS5qW2NdO0FycmF5LmlzQXJyYXkoZC5jb25zZW50VHlwZXMpJiZkLmNvbnNlbnRUeXBlcy5pbmRleE9mKGIpIT09LTEmJihkLlRqPSEwKX19O3BrLnByb3RvdHlwZS5ub3RpZnlMaXN0ZW5lcnM9ZnVuY3Rpb24oYSxiKXtmb3IodmFyIGM9MDtjPHRoaXMuai5sZW5ndGg7KytjKXt2YXIgZD10aGlzLmpbY107aWYoZC5Uail7ZC5Uaj0hMTt0cnl7ZC5DbCh7Y29uc2VudEV2ZW50SWQ6YSxjb25zZW50UHJpb3JpdHlJZDpifSl9Y2F0Y2goZSl7fX19fTt2YXIgc2s9ITEsdGs9ITEsdWs9e30sdms9e2RlbGVnYXRlZENvbnNlbnRUeXBlczp7fSxjb3JlUGxhdGZvcm1TZXJ2aWNlczp7fSx1c2VkQ29yZVBsYXRmb3JtU2VydmljZXM6ITEsc2VsZWN0ZWRBbGxDb3JlUGxhdGZvcm1TZXJ2aWNlczohMSxjb250YWluZXJTY29wZWREZWZhdWx0czoodWsuYWRfc3RvcmFnZT0xLHVrLmFuYWx5dGljc19zdG9yYWdlPTEsdWsuYWRfdXNlcl9kYXRhPTEsdWsuYWRfcGVyc29uYWxpemF0aW9uPTEsdWspLHVzZWRDb250YWluZXJTY29wZWREZWZhdWx0czohMX07ZnVuY3Rpb24gd2soYSl7dmFyIGI9b2soKTtiLmFjY2Vzc2VkQW55PSEwO3JldHVybihsKGEpP1thXTphKS5ldmVyeShmdW5jdGlvbihjKXtzd2l0Y2goYi5nZXRDb25zZW50U3RhdGUoYyx2aykpe2Nhc2UgMTpjYXNlIDM6cmV0dXJuITA7Y2FzZSAyOmNhc2UgNDpyZXR1cm4hMTtkZWZhdWx0OnJldHVybiEwfX0pfVxuZnVuY3Rpb24geGsoYSl7dmFyIGI9b2soKTtiLmFjY2Vzc2VkQW55PSEwO3JldHVybiBiLmdldENvbnNlbnRTdGF0ZShhLHZrKX1mdW5jdGlvbiB5ayhhKXtmb3IodmFyIGI9e30sYz1uYShhKSxkPWMubmV4dCgpOyFkLmRvbmU7ZD1jLm5leHQoKSl7dmFyIGU9ZC52YWx1ZTtiW2VdPXZrLmNvcmVQbGF0Zm9ybVNlcnZpY2VzW2VdIT09ITF9cmV0dXJuIGJ9ZnVuY3Rpb24gemsoYSl7dmFyIGI9b2soKTtiLmFjY2Vzc2VkQW55PSEwO3JldHVybiEoYi5lbnRyaWVzW2FdfHx7fSkucXVpZXR9XG5mdW5jdGlvbiBBaygpe2lmKCFtYigxMikpcmV0dXJuITE7dmFyIGE9b2soKTthLmFjY2Vzc2VkQW55PSEwO2lmKGEuYWN0aXZlKXJldHVybiEwO2lmKCFtYig4KXx8IXZrLnVzZWRDb250YWluZXJTY29wZWREZWZhdWx0cylyZXR1cm4hMTtmb3IodmFyIGI9bmEoT2JqZWN0LmtleXModmsuY29udGFpbmVyU2NvcGVkRGVmYXVsdHMpKSxjPWIubmV4dCgpOyFjLmRvbmU7Yz1iLm5leHQoKSlpZih2ay5jb250YWluZXJTY29wZWREZWZhdWx0c1tjLnZhbHVlXSE9PTEpcmV0dXJuITA7cmV0dXJuITF9ZnVuY3Rpb24gQmsoYSxiKXtvaygpLmFkZExpc3RlbmVyKGEsYil9ZnVuY3Rpb24gQ2soYSxiKXtvaygpLm5vdGlmeUxpc3RlbmVycyhhLGIpfVxuZnVuY3Rpb24gRGsoYSxiKXtmdW5jdGlvbiBjKCl7Zm9yKHZhciBlPTA7ZTxiLmxlbmd0aDtlKyspaWYoIXprKGJbZV0pKXJldHVybiEwO3JldHVybiExfWlmKGMoKSl7dmFyIGQ9ITE7QmsoYixmdW5jdGlvbihlKXtkfHxjKCl8fChkPSEwLGEoZSkpfSl9ZWxzZSBhKHt9KX1cbmZ1bmN0aW9uIEVrKGEsYil7ZnVuY3Rpb24gYygpe2Zvcih2YXIgaz1bXSxtPTA7bTxlLmxlbmd0aDttKyspe3ZhciBuPWVbbV07d2sobikmJiFmW25dJiZrLnB1c2gobil9cmV0dXJuIGt9ZnVuY3Rpb24gZChrKXtmb3IodmFyIG09MDttPGsubGVuZ3RoO20rKylmW2tbbV1dPSEwfXZhciBlPWwoYik/W2JdOmIsZj17fSxnPWMoKTtnLmxlbmd0aCE9PWUubGVuZ3RoJiYoZChnKSxCayhlLGZ1bmN0aW9uKGspe2Z1bmN0aW9uIG0ocSl7cS5sZW5ndGghPT0wJiYoZChxKSxrLmNvbnNlbnRUeXBlcz1xLGEoaykpfXZhciBuPWMoKTtpZihuLmxlbmd0aCE9PTApe3ZhciBwPU9iamVjdC5rZXlzKGYpLmxlbmd0aDtuLmxlbmd0aCtwPj1lLmxlbmd0aD9tKG4pOkQuc2V0VGltZW91dChmdW5jdGlvbigpe20oYygpKX0sNTAwKX19KSl9O3ZhciBGaz1bXCJhZF9zdG9yYWdlXCIsXCJhbmFseXRpY3Nfc3RvcmFnZVwiLFwiYWRfdXNlcl9kYXRhXCIsXCJhZF9wZXJzb25hbGl6YXRpb25cIl0sR2s9ITEsSGs9ITE7ZnVuY3Rpb24gSWsoKXtRKDUwKSYmIUhrJiZHayYmKEZrLnNvbWUoZnVuY3Rpb24oYSl7cmV0dXJuIHZrLmNvbnRhaW5lclNjb3BlZERlZmF1bHRzW2FdIT09MX0pfHxKayhcIm1iY1wiKSk7SGs9ITB9ZnVuY3Rpb24gSmsoYSl7cmomJihmayhhLFwiMVwiKSxqaygpKX1mdW5jdGlvbiBLayhhKXtoYihcIkhFQUxUSFwiLGEpfTt2YXIgTGs7dHJ5e0xrPUpTT04ucGFyc2UoZmIoXCJleUl3SWpvaVRGVWlMQ0l4SWpvaUlpd2lNaUk2Wm1Gc2MyVXNJak1pT2lKbmIyOW5iR1V1YkhVaUxDSTBJam9pY21WbmFXOXVNU0lzSWpVaU9tWmhiSE5sTENJMklqcDBjblZsTENJM0lqb2lZV1JmYzNSdmNtRm5aWHhoYm1Gc2VYUnBZM05mYzNSdmNtRm5aWHhoWkY5MWMyVnlYMlJoZEdGOFlXUmZjR1Z5YzI5dVlXeHBlbUYwYVc5dUluMFwiKSl9Y2F0Y2goYSl7TSgxMjMpLEtrKDIpLExrPXt9fWZ1bmN0aW9uIE1rKCl7cmV0dXJuIExrW1wiMFwiXXx8XCJcIn1mdW5jdGlvbiBOaygpe3JldHVybiBMa1tcIjFcIl18fFwiXCJ9ZnVuY3Rpb24gT2soKXt2YXIgYT0hMTthPSEhTGtbXCIyXCJdO3JldHVybiBhfWZ1bmN0aW9uIFBrKCl7cmV0dXJuIExrW1wiNlwiXSE9PSExfWZ1bmN0aW9uIFFrKCl7dmFyIGE9XCJcIjthPUxrW1wiNFwiXXx8XCJcIjtyZXR1cm4gYX1cbmZ1bmN0aW9uIFJrKCl7dmFyIGE9ITE7YT0hIUxrW1wiNVwiXTtyZXR1cm4gYX1mdW5jdGlvbiBTaygpe3ZhciBhPVwiXCI7YT1Ma1tcIjNcIl18fFwiXCI7cmV0dXJuIGF9dmFyIFRrPVtULmcuUCxULmcuVSxULmcuTyxULmcud2FdLFVrLFZrO2Z1bmN0aW9uIFdrKGEpe2Zvcih2YXIgYj1hW1QuZy5DYl0sYz1BcnJheS5pc0FycmF5KGIpP2I6W2JdLGQ9e0hlOjB9O2QuSGU8Yy5sZW5ndGg7ZD17SGU6ZC5IZX0sKytkLkhlKXooYSxmdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24oZixnKXtpZihmIT09VC5nLkNiKXt2YXIgaz1jW2UuSGVdLG09TWsoKSxuPU5rKCk7dGs9ITA7c2smJmhiKFwiVEFHR0lOR1wiLDIwKTtvaygpLmRlY2xhcmUoZixnLGssbSxuKX19fShkKSl9XG5mdW5jdGlvbiBYayhhKXtJaygpOyFWayYmVWsmJkprKFwiY3JjXCIpO1ZrPSEwO3ZhciBiPWFbVC5nLkNiXTtiJiZNKDQwKTt2YXIgYz1hW1QuZy5aZV07YyYmTSg0MSk7Zm9yKHZhciBkPUFycmF5LmlzQXJyYXkoYik/YjpbYl0sZT17SWU6MH07ZS5JZTxkLmxlbmd0aDtlPXtJZTplLkllfSwrK2UuSWUpeihhLGZ1bmN0aW9uKGYpe3JldHVybiBmdW5jdGlvbihnLGspe2lmKGchPT1ULmcuQ2ImJmchPT1ULmcuWmUpe3ZhciBtPWRbZi5JZV0sbj1OdW1iZXIoYykscD1NaygpLHE9TmsoKTtuPW49PT12b2lkIDA/MDpuO3NrPSEwO3RrJiZoYihcIlRBR0dJTkdcIiwyMCk7b2soKS5kZWZhdWx0KGcsayxtLHAscSxuLHZrKX19fShlKSl9XG5mdW5jdGlvbiBZayhhKXtpZihRKDk5KSl7bWIoOSkmJih2ay51c2VkQ29udGFpbmVyU2NvcGVkRGVmYXVsdHM9ITApO3ZhciBiPWFbVC5nLkNiXTtpZihiKXt2YXIgYz1BcnJheS5pc0FycmF5KGIpP2I6W2JdO2lmKCFjLmluY2x1ZGVzKE5rKCkpJiYhYy5pbmNsdWRlcyhNaygpKSlyZXR1cm59eihhLGZ1bmN0aW9uKGQsZSl7c3dpdGNoKGQpe2Nhc2UgXCJhZF9zdG9yYWdlXCI6Y2FzZSBcImFuYWx5dGljc19zdG9yYWdlXCI6Y2FzZSBcImFkX3VzZXJfZGF0YVwiOmNhc2UgXCJhZF9wZXJzb25hbGl6YXRpb25cIjpicmVhaztkZWZhdWx0OnJldHVybn1tYig5KSYmKHZrLnVzZWRDb250YWluZXJTY29wZWREZWZhdWx0cz0hMCk7dmsuY29udGFpbmVyU2NvcGVkRGVmYXVsdHNbZF09ZT09PVwiZ3JhbnRlZFwiPzM6Mn0pfX1cbmZ1bmN0aW9uIFprKGEsYil7SWsoKTtVaz0hMDt6KGEsZnVuY3Rpb24oYyxkKXtzaz0hMDt0ayYmaGIoXCJUQUdHSU5HXCIsMjApO29rKCkudXBkYXRlKGMsZCx2ayl9KTtDayhiLmV2ZW50SWQsYi5wcmlvcml0eUlkKX1mdW5jdGlvbiAkayhhKXthLmhhc093blByb3BlcnR5KFwiYWxsXCIpJiYodmsuc2VsZWN0ZWRBbGxDb3JlUGxhdGZvcm1TZXJ2aWNlcz0hMCx6KGdpLGZ1bmN0aW9uKGIpe3ZrLmNvcmVQbGF0Zm9ybVNlcnZpY2VzW2JdPWEuYWxsPT09XCJncmFudGVkXCI7dmsudXNlZENvcmVQbGF0Zm9ybVNlcnZpY2VzPSEwfSkpO3ooYSxmdW5jdGlvbihiLGMpe2IhPT1cImFsbFwiJiYodmsuY29yZVBsYXRmb3JtU2VydmljZXNbYl09Yz09PVwiZ3JhbnRlZFwiLHZrLnVzZWRDb3JlUGxhdGZvcm1TZXJ2aWNlcz0hMCl9KX1mdW5jdGlvbiBXKGEpe0FycmF5LmlzQXJyYXkoYSl8fChhPVthXSk7cmV0dXJuIGEuZXZlcnkoZnVuY3Rpb24oYil7cmV0dXJuIHdrKGIpfSl9XG5mdW5jdGlvbiBhbChhLGIpe0JrKGEsYil9ZnVuY3Rpb24gYmwoYSxiKXtFayhhLGIpfWZ1bmN0aW9uIGNsKGEsYil7RGsoYSxiKX1mdW5jdGlvbiBkbCgpe3ZhciBhPVtULmcuUCxULmcud2EsVC5nLk9dO29rKCkud2FpdEZvclVwZGF0ZShhLDUwMCx2ayl9ZnVuY3Rpb24gZWwoYSl7Zm9yKHZhciBiPW5hKGEpLGM9Yi5uZXh0KCk7IWMuZG9uZTtjPWIubmV4dCgpKXt2YXIgZD1jLnZhbHVlO29rKCkuY2xlYXJUaW1lb3V0KGQsdm9pZCAwLHZrKX1DaygpfWZ1bmN0aW9uIGZsKCl7aWYoaWkucHNjZGw9PT12b2lkIDApe3ZhciBhPWZ1bmN0aW9uKGMpe2lpLnBzY2RsPWN9LGI9ZnVuY3Rpb24oKXthKFwiZXJyb3JcIil9O3RyeXtvYy5jb29raWVEZXByZWNhdGlvbkxhYmVsPyhhKFwicGVuZGluZ1wiKSxvYy5jb29raWVEZXByZWNhdGlvbkxhYmVsLmdldFZhbHVlKCkudGhlbihhKS5jYXRjaChiKSk6YShcIm5vYXBpXCIpfWNhdGNoKGMpe2IoYyl9fX07ZnVuY3Rpb24gZ2woYSxiKXtRKDEzKSYmYiYmeihiLGZ1bmN0aW9uKGMsZCl7dHlwZW9mIGQhPT1cIm9iamVjdFwiJiZkIT09dm9pZCAwJiYoYVtcIjFwLlwiK2NdPVN0cmluZyhkKSl9KX07dmFyIGhsPS9bQS1aXSsvLGlsPS9cXHMvO2Z1bmN0aW9uIGpsKGEsYil7aWYobChhKSl7YT16YihhKTt2YXIgYz1hLmluZGV4T2YoXCItXCIpO2lmKCEoYzwwKSl7dmFyIGQ9YS5zdWJzdHJpbmcoMCxjKTtpZihobC50ZXN0KGQpKXt2YXIgZT1hLnN1YnN0cmluZyhjKzEpLGY7aWYoYil7dmFyIGc9ZnVuY3Rpb24obil7dmFyIHA9bi5pbmRleE9mKFwiL1wiKTtyZXR1cm4gcDwwP1tuXTpbbi5zdWJzdHJpbmcoMCxwKSxuLnN1YnN0cmluZyhwKzEpXX07Zj1nKGUpO2lmKGQ9PT1cIkRDXCImJmYubGVuZ3RoPT09Mil7dmFyIGs9ZyhmWzFdKTtrLmxlbmd0aD09PTImJihmWzFdPWtbMF0sZi5wdXNoKGtbMV0pKX19ZWxzZXtmPWUuc3BsaXQoXCIvXCIpO2Zvcih2YXIgbT0wO208Zi5sZW5ndGg7bSsrKWlmKCFmW21dfHxpbC50ZXN0KGZbbV0pJiYoZCE9PVwiQVdcInx8bSE9PTEpKXJldHVybn1yZXR1cm57aWQ6YSxwcmVmaXg6ZCxkZXN0aW5hdGlvbklkOmQrXCItXCIrZlswXSxpZHM6Zn19fX19XG5mdW5jdGlvbiBrbChhLGIpe2Zvcih2YXIgYz17fSxkPTA7ZDxhLmxlbmd0aDsrK2Qpe3ZhciBlPWpsKGFbZF0sYik7ZSYmKGNbZS5pZF09ZSl9bGwoYyk7dmFyIGY9W107eihjLGZ1bmN0aW9uKGcsayl7Zi5wdXNoKGspfSk7cmV0dXJuIGZ9ZnVuY3Rpb24gbGwoYSl7dmFyIGI9W10sYztmb3IoYyBpbiBhKWlmKGEuaGFzT3duUHJvcGVydHkoYykpe3ZhciBkPWFbY107ZC5wcmVmaXg9PT1cIkFXXCImJmQuaWRzW21sWzJdXSYmYi5wdXNoKGQuZGVzdGluYXRpb25JZCl9Zm9yKHZhciBlPTA7ZTxiLmxlbmd0aDsrK2UpZGVsZXRlIGFbYltlXV19dmFyIG5sPXt9LG1sPShubFswXT0wLG5sWzFdPTAsbmxbMl09MSxubFszXT0wLG5sWzRdPTEsbmxbNV09MixubFs2XT0wLG5sWzddPTAsbmxbOF09MCxubCk7dmFyIG9sPU51bWJlcignJyl8fDUwMCxwbD17fSxxbD17fSxybD17aW5pdGlhbGl6ZWQ6MTEsY29tcGxldGU6MTIsaW50ZXJhY3RpdmU6MTN9LHNsPXt9LHRsPU9iamVjdC5mcmVlemUoKHNsW1QuZy5JYV09ITAsc2wpKSx1bD1FLmxvY2F0aW9uLnNlYXJjaC5pbmRleE9mKFwiP2d0bV9kaWFnbm9zdGljcz1cIik+PTB8fEUubG9jYXRpb24uc2VhcmNoLmluZGV4T2YoXCImZ3RtX2RpYWdub3N0aWNzPVwiKT49MCx2bD12b2lkIDA7XG5mdW5jdGlvbiB3bChhLGIpe2lmKGIubGVuZ3RoJiZyail7dmFyIGM7KGM9cGwpW2FdIT1udWxsfHwoY1thXT1bXSk7cWxbYV0hPW51bGx8fChxbFthXT1bXSk7dmFyIGQ9Yi5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIXFsW2FdLmluY2x1ZGVzKGUpfSk7cGxbYV0ucHVzaC5hcHBseShwbFthXSxwYShkKSk7cWxbYV0ucHVzaC5hcHBseShxbFthXSxwYShkKSk7IXZsJiZkLmxlbmd0aD4wJiYoZ2soXCJ0ZGNcIiwhMCksdmw9RC5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7amsoKTtwbD17fTt2bD12b2lkIDB9LG9sKSl9fVxuZnVuY3Rpb24geGwoYSxiLGMpe2lmKHJqJiZhPT09XCJjb25maWdcIil7dmFyIGQsZT0oZD1qbChiKSk9PW51bGw/dm9pZCAwOmQuaWRzO2lmKCEoZSYmZS5sZW5ndGg+MSkpe3ZhciBmLGc9c2MoXCJnb29nbGVfdGFnX2RhdGFcIix7fSk7Zy50ZHx8KGcudGQ9e30pO2Y9Zy50ZDt2YXIgaz1oKGMuTSk7aChjLmosayk7dmFyIG09W10sbjtmb3IobiBpbiBmKWlmKGYuaGFzT3duUHJvcGVydHkobikpe3ZhciBwPXlsKGZbbl0sayk7cC5sZW5ndGgmJih1bCYmY29uc29sZS5sb2cocCksbS5wdXNoKG4pKX1tLmxlbmd0aCYmKHdsKGIsbSksaGIoXCJUQUdHSU5HXCIscmxbRS5yZWFkeVN0YXRlXXx8MTQpKTtmW2JdPWt9fX1mdW5jdGlvbiB6bChhLGIpe3ZhciBjPXt9LGQ7Zm9yKGQgaW4gYiliLmhhc093blByb3BlcnR5KGQpJiYoY1tkXT0hMCk7Zm9yKHZhciBlIGluIGEpYS5oYXNPd25Qcm9wZXJ0eShlKSYmKGNbZV09ITApO3JldHVybiBjfVxuZnVuY3Rpb24geWwoYSxiLGMsZCl7Yz1jPT09dm9pZCAwP3t9OmM7ZD1kPT09dm9pZCAwP1wiXCI6ZDtpZihhPT09YilyZXR1cm5bXTt2YXIgZT1mdW5jdGlvbihyLHQpe3ZhciB1O1FhKHQpPT09XCJvYmplY3RcIj91PXRbcl06UWEodCk9PT1cImFycmF5XCImJih1PXRbcl0pO3JldHVybiB1PT09dm9pZCAwP3RsW3JdOnV9LGY9emwoYSxiKSxnO2ZvcihnIGluIGYpaWYoZi5oYXNPd25Qcm9wZXJ0eShnKSl7dmFyIGs9KGQ/ZCtcIi5cIjpcIlwiKStnLG09ZShnLGEpLG49ZShnLGIpLHA9UWEobSk9PT1cIm9iamVjdFwifHxRYShtKT09PVwiYXJyYXlcIixxPVFhKG4pPT09XCJvYmplY3RcInx8UWEobik9PT1cImFycmF5XCI7aWYocCYmcSl5bChtLG4sYyxrKTtlbHNlIGlmKHB8fHF8fG0hPT1uKWNba109ITB9cmV0dXJuIE9iamVjdC5rZXlzKGMpfVxuZnVuY3Rpb24gQWwoKXtmayhcInRkY1wiLGZ1bmN0aW9uKCl7dmwmJihELmNsZWFyVGltZW91dCh2bCksdmw9dm9pZCAwKTt2YXIgYT1bXSxiO2ZvcihiIGluIHBsKXBsLmhhc093blByb3BlcnR5KGIpJiZhLnB1c2goYitcIipcIitwbFtiXS5qb2luKFwiLlwiKSk7cmV0dXJuIGEubGVuZ3RoP2Euam9pbihcIiFcIik6dm9pZCAwfSwhMSl9O3ZhciBCbD1mdW5jdGlvbihhLGIsYyxkLGUsZixnLGssbSxuLHApe3RoaXMuZXZlbnRJZD1hO3RoaXMucHJpb3JpdHlJZD1iO3RoaXMuaj1jO3RoaXMuUj1kO3RoaXMuSD1lO3RoaXMuTT1mO3RoaXMuRD1nO3RoaXMuZXZlbnRNZXRhZGF0YT1rO3RoaXMub25TdWNjZXNzPW07dGhpcy5vbkZhaWx1cmU9bjt0aGlzLmlzR3RtRXZlbnQ9cH0sQ2w9ZnVuY3Rpb24oYSxiKXt2YXIgYz1bXTtzd2l0Y2goYil7Y2FzZSAzOmMucHVzaChhLmopO2MucHVzaChhLlIpO2MucHVzaChhLkgpO2MucHVzaChhLk0pO2MucHVzaChhLkQpO2JyZWFrO2Nhc2UgMjpjLnB1c2goYS5qKTticmVhaztjYXNlIDE6Yy5wdXNoKGEuUik7Yy5wdXNoKGEuSCk7Yy5wdXNoKGEuTSk7Yy5wdXNoKGEuRCk7YnJlYWs7Y2FzZSA0OmMucHVzaChhLmopLGMucHVzaChhLlIpLGMucHVzaChhLkgpLGMucHVzaChhLk0pfXJldHVybiBjfSxVPWZ1bmN0aW9uKGEsYixjLGQpe2Zvcih2YXIgZT1uYShDbChhLGQ9PT12b2lkIDA/MzpcbmQpKSxmPWUubmV4dCgpOyFmLmRvbmU7Zj1lLm5leHQoKSl7dmFyIGc9Zi52YWx1ZTtpZihnW2JdIT09dm9pZCAwKXJldHVybiBnW2JdfXJldHVybiBjfSxEbD1mdW5jdGlvbihhKXtmb3IodmFyIGI9e30sYz1DbChhLDQpLGQ9bmEoYyksZT1kLm5leHQoKTshZS5kb25lO2U9ZC5uZXh0KCkpZm9yKHZhciBmPU9iamVjdC5rZXlzKGUudmFsdWUpLGc9bmEoZiksaz1nLm5leHQoKTshay5kb25lO2s9Zy5uZXh0KCkpYltrLnZhbHVlXT0xO3JldHVybiBPYmplY3Qua2V5cyhiKX0sRWw9ZnVuY3Rpb24oYSxiLGMpe2Z1bmN0aW9uIGQobil7U2EobikmJnoobixmdW5jdGlvbihwLHEpe2Y9ITA7ZVtwXT1xfSl9dmFyIGU9e30sZj0hMSxnPUNsKGEsYz09PXZvaWQgMD8zOmMpO2cucmV2ZXJzZSgpO2Zvcih2YXIgaz1uYShnKSxtPWsubmV4dCgpOyFtLmRvbmU7bT1rLm5leHQoKSlkKG0udmFsdWVbYl0pO3JldHVybiBmP2U6dm9pZCAwfSxGbD1mdW5jdGlvbihhKXtmb3IodmFyIGI9W1QuZy5SYyxcblQuZy5OYyxULmcuT2MsVC5nLlBjLFQuZy5RYyxULmcuU2MsVC5nLlRjXSxjPUNsKGEsMyksZD1uYShjKSxlPWQubmV4dCgpOyFlLmRvbmU7ZT1kLm5leHQoKSl7Zm9yKHZhciBmPWUudmFsdWUsZz17fSxrPSExLG09bmEoYiksbj1tLm5leHQoKTshbi5kb25lO249bS5uZXh0KCkpe3ZhciBwPW4udmFsdWU7ZltwXSE9PXZvaWQgMCYmKGdbcF09ZltwXSxrPSEwKX12YXIgcT1rP2c6dm9pZCAwO2lmKHEpcmV0dXJuIHF9cmV0dXJue319LEdsPWZ1bmN0aW9uKGEsYil7dGhpcy5ldmVudElkPWE7dGhpcy5wcmlvcml0eUlkPWI7dGhpcy5EPXt9O3RoaXMuUj17fTt0aGlzLmo9e307dGhpcy5IPXt9O3RoaXMuWj17fTt0aGlzLk09e307dGhpcy5ldmVudE1ldGFkYXRhPXt9O3RoaXMuaXNHdG1FdmVudD0hMTt0aGlzLm9uU3VjY2Vzcz1mdW5jdGlvbigpe307dGhpcy5vbkZhaWx1cmU9ZnVuY3Rpb24oKXt9fSxIbD1mdW5jdGlvbihhLGIpe2EuRD1iO3JldHVybiBhfSxJbD1mdW5jdGlvbihhLFxuYil7YS5SPWI7cmV0dXJuIGF9LEpsPWZ1bmN0aW9uKGEsYil7YS5qPWI7cmV0dXJuIGF9LEtsPWZ1bmN0aW9uKGEsYil7YS5IPWI7cmV0dXJuIGF9LExsPWZ1bmN0aW9uKGEsYil7YS5aPWI7cmV0dXJuIGF9LE1sPWZ1bmN0aW9uKGEsYil7YS5NPWI7cmV0dXJuIGF9LE5sPWZ1bmN0aW9uKGEsYil7YS5ldmVudE1ldGFkYXRhPWJ8fHt9O3JldHVybiBhfSxPbD1mdW5jdGlvbihhLGIpe2Eub25TdWNjZXNzPWI7cmV0dXJuIGF9LFBsPWZ1bmN0aW9uKGEsYil7YS5vbkZhaWx1cmU9YjtyZXR1cm4gYX0sUWw9ZnVuY3Rpb24oYSxiKXthLmlzR3RtRXZlbnQ9YjtyZXR1cm4gYX0sUmw9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyBCbChhLmV2ZW50SWQsYS5wcmlvcml0eUlkLGEuRCxhLlIsYS5qLGEuSCxhLk0sYS5ldmVudE1ldGFkYXRhLGEub25TdWNjZXNzLGEub25GYWlsdXJlLGEuaXNHdG1FdmVudCl9O3ZhciBTbD17a2s6TnVtYmVyKFwiNVwiKSxRbjpOdW1iZXIoXCJcIil9LFRsPVtdO2Z1bmN0aW9uIFVsKGEpe1RsLnB1c2goYSl9dmFyIFZsPVwiP2lkPVwiK09mLmN0aWQsV2w9dm9pZCAwLFhsPXt9LFlsPXZvaWQgMCxabD1uZXcgZnVuY3Rpb24oKXt2YXIgYT01O1NsLmtrPjAmJihhPVNsLmtrKTt0aGlzLkQ9YTt0aGlzLmo9MDt0aGlzLkg9W119LCRsPTFFMztcbmZ1bmN0aW9uIGFtKGEsYil7dmFyIGM9V2w7aWYoYz09PXZvaWQgMClpZihiKWM9emkoKTtlbHNlIHJldHVyblwiXCI7Zm9yKHZhciBkPVtqaihcImh0dHBzOi8vd3d3Lmdvb2dsZXRhZ21hbmFnZXIuY29tXCIpLFwiL2FcIixWbF0sZT1uYShUbCksZj1lLm5leHQoKTshZi5kb25lO2Y9ZS5uZXh0KCkpZm9yKHZhciBnPWYudmFsdWUsaz1nKHtldmVudElkOmMsaGM6ISFhfSksbT1uYShrKSxuPW0ubmV4dCgpOyFuLmRvbmU7bj1tLm5leHQoKSl7dmFyIHA9bmEobi52YWx1ZSkscT1wLm5leHQoKS52YWx1ZSxyPXAubmV4dCgpLnZhbHVlO2QucHVzaChcIiZcIitxK1wiPVwiK3IpfWQucHVzaChcIiZ6PTBcIik7cmV0dXJuIGQuam9pbihcIlwiKX1cbmZ1bmN0aW9uIGJtKCl7WWwmJihELmNsZWFyVGltZW91dChZbCksWWw9dm9pZCAwKTtpZihXbCE9PXZvaWQgMCYmY20pe3ZhciBhOyhhPVhsW1dsXSl8fChhPVpsLmo8WmwuRD8hMTpCYigpLVpsLkhbWmwuaiVabC5EXTwxRTMpO2lmKGF8fCRsLS08PTApTSgxKSxYbFtXbF09ITA7ZWxzZXt2YXIgYj1abC5qKyslWmwuRDtabC5IW2JdPUJiKCk7dmFyIGM9YW0oITApO0FjKGMpO2NtPSExfX19dmFyIGNtPSExO2Z1bmN0aW9uIGRtKGEpe1hsW2FdfHwoYSE9PVdsJiYoYm0oKSxXbD1hKSxjbT0hMCxZbHx8KFlsPUQuc2V0VGltZW91dChibSw1MDApKSxhbSgpLmxlbmd0aD49MjAyMiYmYm0oKSl9dmFyIGVtPXNiKCk7ZnVuY3Rpb24gZm0oKXtlbT1zYigpfWZ1bmN0aW9uIGdtKCl7cmV0dXJuW1tcInZcIixcIjNcIl0sW1widFwiLFwidFwiXSxbXCJwaWRcIixTdHJpbmcoZW0pXV19dmFyIGhtPXt9O2Z1bmN0aW9uIGltKGEsYixjKXtxaiYmYSE9PXZvaWQgMCYmKGhtW2FdPWhtW2FdfHxbXSxobVthXS5wdXNoKGMrYiksZG0oYSkpfWZ1bmN0aW9uIGptKGEpe3ZhciBiPWEuZXZlbnRJZCxjPWEuaGMsZD1bXSxlPWhtW2JdfHxbXTtlLmxlbmd0aCYmZC5wdXNoKFtcImVwclwiLGUuam9pbihcIi5cIildKTtjJiZkZWxldGUgaG1bYl07cmV0dXJuIGR9O2Z1bmN0aW9uIGttKGEsYil7dmFyIGM9amwoSGooYSksITApO2MmJmxtLnJlZ2lzdGVyKGMsYil9ZnVuY3Rpb24gbW0oYSxiLGMsZCl7dmFyIGU9amwoYyxkLmlzR3RtRXZlbnQpO2UmJihRKDQ5KSYmUSg0OSkmJm5pJiYoZC5kZWZlcnJhYmxlPSEwKSxsbS5wdXNoKFwiZXZlbnRcIixbYixhXSxlLGQpKX1mdW5jdGlvbiBubShhLGIsYyxkKXt2YXIgZT1qbChjLGQuaXNHdG1FdmVudCk7ZSYmbG0ucHVzaChcImdldFwiLFthLGJdLGUsZCl9ZnVuY3Rpb24gb20oYSl7dmFyIGI9amwoSGooYSksITApLGM7Yj9jPXBtKGxtLGIpLmo6Yz17fTtyZXR1cm4gY31mdW5jdGlvbiBxbShhLGIpe3ZhciBjPWpsKEhqKGEpLCEwKTtpZihjKXt2YXIgZD1sbSxlPWgoYixudWxsKTtoKHBtKGQsYykuaixlKTtwbShkLGMpLmo9ZX19XG52YXIgcm09ZnVuY3Rpb24oKXt0aGlzLlI9e307dGhpcy5qPXt9O3RoaXMuRD17fTt0aGlzLlo9bnVsbDt0aGlzLk09e307dGhpcy5IPSExO3RoaXMuc3RhdHVzPTF9LHNtPWZ1bmN0aW9uKGEsYixjLGQpe3RoaXMuRD1CYigpO3RoaXMuaj1iO3RoaXMuYXJncz1jO3RoaXMubWVzc2FnZUNvbnRleHQ9ZDt0aGlzLnR5cGU9YX0sdG09ZnVuY3Rpb24oKXt0aGlzLmRlc3RpbmF0aW9ucz17fTt0aGlzLmo9e307dGhpcy5jb21tYW5kcz1bXX0scG09ZnVuY3Rpb24oYSxiKXt2YXIgYz1iLmRlc3RpbmF0aW9uSWQ7cmV0dXJuIGEuZGVzdGluYXRpb25zW2NdPWEuZGVzdGluYXRpb25zW2NdfHxuZXcgcm19LHVtPWZ1bmN0aW9uKGEsYixjLGQpe2lmKGQuail7dmFyIGU9cG0oYSxkLmopLGY9ZS5aO2lmKGYpe3ZhciBnPWgoYyxudWxsKSxrPWgoZS5SW2Quai5pZF0sbnVsbCksbT1oKGUuTSxudWxsKSxuPWgoZS5qLG51bGwpLHA9aChhLmosbnVsbCkscT17fTtpZihxail0cnl7cT1oKEdpKX1jYXRjaCh2KXtNKDcyKX12YXIgcj1cbmQuai5wcmVmaXgsdD1mdW5jdGlvbih2KXtpbShkLm1lc3NhZ2VDb250ZXh0LmV2ZW50SWQscix2KX0sdT1SbChRbChQbChPbChObChMbChLbChNbChKbChJbChIbChuZXcgR2woZC5tZXNzYWdlQ29udGV4dC5ldmVudElkLGQubWVzc2FnZUNvbnRleHQucHJpb3JpdHlJZCksZyksayksbSksbikscCkscSksZC5tZXNzYWdlQ29udGV4dC5ldmVudE1ldGFkYXRhKSxmdW5jdGlvbigpe2lmKHQpe3ZhciB2PXQ7dD12b2lkIDA7dihcIjJcIik7aWYoZC5tZXNzYWdlQ29udGV4dC5vblN1Y2Nlc3MpZC5tZXNzYWdlQ29udGV4dC5vblN1Y2Nlc3MoKX19KSxmdW5jdGlvbigpe2lmKHQpe3ZhciB2PXQ7dD12b2lkIDA7dihcIjNcIik7aWYoZC5tZXNzYWdlQ29udGV4dC5vbkZhaWx1cmUpZC5tZXNzYWdlQ29udGV4dC5vbkZhaWx1cmUoKX19KSwhIWQubWVzc2FnZUNvbnRleHQuaXNHdG1FdmVudCkpO3RyeXtpbShkLm1lc3NhZ2VDb250ZXh0LmV2ZW50SWQscixcIjFcIikseGwoZC50eXBlLGQuai5pZCx1KSxcbmYoZC5qLmlkLGIsZC5ELHUpfWNhdGNoKHYpe2ltKGQubWVzc2FnZUNvbnRleHQuZXZlbnRJZCxyLFwiNFwiKX19fX07dG0ucHJvdG90eXBlLnJlZ2lzdGVyPWZ1bmN0aW9uKGEsYixjKXt2YXIgZD1wbSh0aGlzLGEpO2Quc3RhdHVzIT09MyYmKGQuWj1iLGQuc3RhdHVzPTMsYyYmKGgoZC5qLGMpLGQuaj1jKSx0aGlzLmZsdXNoKCkpfTt0bS5wcm90b3R5cGUucHVzaD1mdW5jdGlvbihhLGIsYyxkKXtjIT09dm9pZCAwJiYocG0odGhpcyxjKS5zdGF0dXM9PT0xJiYocG0odGhpcyxjKS5zdGF0dXM9Mix0aGlzLnB1c2goXCJyZXF1aXJlXCIsW3t9XSxjLHt9KSkscG0odGhpcyxjKS5IJiYoZC5kZWZlcnJhYmxlPSExKSk7dGhpcy5jb21tYW5kcy5wdXNoKG5ldyBzbShhLGMsYixkKSk7ZC5kZWZlcnJhYmxlfHx0aGlzLmZsdXNoKCl9O1xudG0ucHJvdG90eXBlLmZsdXNoPWZ1bmN0aW9uKGEpe2Zvcih2YXIgYj10aGlzLGM9W10sZD0hMSxlPXt9O3RoaXMuY29tbWFuZHMubGVuZ3RoO2U9e0NjOnZvaWQgMCxqaDp2b2lkIDB9KXt2YXIgZj10aGlzLmNvbW1hbmRzWzBdLGc9Zi5qO2lmKGYubWVzc2FnZUNvbnRleHQuZGVmZXJyYWJsZSkhZ3x8cG0odGhpcyxnKS5IPyhmLm1lc3NhZ2VDb250ZXh0LmRlZmVycmFibGU9ITEsdGhpcy5jb21tYW5kcy5wdXNoKGYpKTpjLnB1c2goZiksdGhpcy5jb21tYW5kcy5zaGlmdCgpO2Vsc2V7c3dpdGNoKGYudHlwZSl7Y2FzZSBcInJlcXVpcmVcIjppZihwbSh0aGlzLGcpLnN0YXR1cyE9PTMmJiFhKXt0aGlzLmNvbW1hbmRzLnB1c2guYXBwbHkodGhpcy5jb21tYW5kcyxjKTtyZXR1cm59YnJlYWs7Y2FzZSBcInNldFwiOnooZi5hcmdzWzBdLGZ1bmN0aW9uKHIsdCl7aChKYihyLHQpLGIuail9KTticmVhaztjYXNlIFwiY29uZmlnXCI6dmFyIGs9cG0odGhpcyxnKTtlLkNjPXt9O3ooZi5hcmdzWzBdLFxuZnVuY3Rpb24ocil7cmV0dXJuIGZ1bmN0aW9uKHQsdSl7aChKYih0LHUpLHIuQ2MpfX0oZSkpO3ZhciBtPSEhZS5DY1tULmcuWWJdO2RlbGV0ZSBlLkNjW1QuZy5ZYl07dmFyIG49Zy5kZXN0aW5hdGlvbklkPT09Zy5pZDttfHwobj9rLk09e306ay5SW2cuaWRdPXt9KTtrLkgmJm18fHVtKHRoaXMsVC5nLmJhLGUuQ2MsZik7ay5IPSEwO24/aChlLkNjLGsuTSk6KGgoZS5DYyxrLlJbZy5pZF0pLE0oNzApKTtkPSEwO2JyZWFrO2Nhc2UgXCJldmVudFwiOmUuamg9e307eihmLmFyZ3NbMF0sZnVuY3Rpb24ocil7cmV0dXJuIGZ1bmN0aW9uKHQsdSl7aChKYih0LHUpLHIuamgpfX0oZSkpO3VtKHRoaXMsZi5hcmdzWzFdLGUuamgsZik7YnJlYWs7Y2FzZSBcImdldFwiOnZhciBwPXt9LHE9KHBbVC5nLnJiXT1mLmFyZ3NbMF0scFtULmcuR2JdPWYuYXJnc1sxXSxwKTt1bSh0aGlzLFQuZy5UYSxxLGYpfXRoaXMuY29tbWFuZHMuc2hpZnQoKTt2bSh0aGlzLGYpfX10aGlzLmNvbW1hbmRzLnB1c2guYXBwbHkodGhpcy5jb21tYW5kcyxcbmMpO2QmJnRoaXMuZmx1c2goKX07dmFyIHZtPWZ1bmN0aW9uKGEsYil7aWYoYi50eXBlIT09XCJyZXF1aXJlXCIpaWYoYi5qKWZvcih2YXIgYz1wbShhLGIuaikuRFtiLnR5cGVdfHxbXSxkPTA7ZDxjLmxlbmd0aDtkKyspY1tkXSgpO2Vsc2UgZm9yKHZhciBlIGluIGEuZGVzdGluYXRpb25zKWlmKGEuZGVzdGluYXRpb25zLmhhc093blByb3BlcnR5KGUpKXt2YXIgZj1hLmRlc3RpbmF0aW9uc1tlXTtpZihmJiZmLkQpZm9yKHZhciBnPWYuRFtiLnR5cGVdfHxbXSxrPTA7azxnLmxlbmd0aDtrKyspZ1trXSgpfX0sbG09bmV3IHRtO3ZhciB3bT1mdW5jdGlvbihhLGIpe3ZhciBjPWZ1bmN0aW9uKCl7fTtjLnByb3RvdHlwZT1hLnByb3RvdHlwZTt2YXIgZD1uZXcgYzthLmFwcGx5KGQsQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLDEpKTtyZXR1cm4gZH0seG09ZnVuY3Rpb24oYSl7dmFyIGI9YTtyZXR1cm4gZnVuY3Rpb24oKXtpZihiKXt2YXIgYz1iO2I9bnVsbDtjKCl9fX07dmFyIHltPWZ1bmN0aW9uKGEsYixjKXthLmFkZEV2ZW50TGlzdGVuZXImJmEuYWRkRXZlbnRMaXN0ZW5lcihiLGMsITEpfSx6bT1mdW5jdGlvbihhLGIsYyl7YS5yZW1vdmVFdmVudExpc3RlbmVyJiZhLnJlbW92ZUV2ZW50TGlzdGVuZXIoYixjLCExKX07dmFyIEFtLEJtO2E6e2Zvcih2YXIgQ209W1wiQ0xPU1VSRV9GTEFHU1wiXSxEbT1BYSxFbT0wO0VtPENtLmxlbmd0aDtFbSsrKWlmKERtPURtW0NtW0VtXV0sRG09PW51bGwpe0JtPW51bGw7YnJlYWsgYX1CbT1EbX12YXIgRm09Qm0mJkJtWzYxMDQwMTMwMV07QW09Rm0hPW51bGw/Rm06ITE7ZnVuY3Rpb24gR20oKXt2YXIgYT1BYS5uYXZpZ2F0b3I7aWYoYSl7dmFyIGI9YS51c2VyQWdlbnQ7aWYoYilyZXR1cm4gYn1yZXR1cm5cIlwifXZhciBIbSxJbT1BYS5uYXZpZ2F0b3I7SG09SW0/SW0udXNlckFnZW50RGF0YXx8bnVsbDpudWxsO2Z1bmN0aW9uIEptKGEpe3JldHVybiBBbT9IbT9IbS5icmFuZHMuc29tZShmdW5jdGlvbihiKXt2YXIgYztyZXR1cm4oYz1iLmJyYW5kKSYmYy5pbmRleE9mKGEpIT0tMX0pOiExOiExfWZ1bmN0aW9uIEttKGEpe3JldHVybiBHbSgpLmluZGV4T2YoYSkhPS0xfTtmdW5jdGlvbiBMbSgpe3JldHVybiBBbT8hIUhtJiZIbS5icmFuZHMubGVuZ3RoPjA6ITF9ZnVuY3Rpb24gTW0oKXtyZXR1cm4gTG0oKT8hMTpLbShcIk9wZXJhXCIpfWZ1bmN0aW9uIE5tKCl7cmV0dXJuIEttKFwiRmlyZWZveFwiKXx8S20oXCJGeGlPU1wiKX1mdW5jdGlvbiBPbSgpe3JldHVybiBMbSgpP0ptKFwiQ2hyb21pdW1cIik6KEttKFwiQ2hyb21lXCIpfHxLbShcIkNyaU9TXCIpKSYmIShMbSgpPzA6S20oXCJFZGdlXCIpKXx8S20oXCJTaWxrXCIpfTtmdW5jdGlvbiBQbSgpe3JldHVybiBBbT8hIUhtJiYhIUhtLnBsYXRmb3JtOiExfWZ1bmN0aW9uIFFtKCl7cmV0dXJuIEttKFwiaVBob25lXCIpJiYhS20oXCJpUG9kXCIpJiYhS20oXCJpUGFkXCIpfWZ1bmN0aW9uIFJtKCl7UW0oKXx8S20oXCJpUGFkXCIpfHxLbShcImlQb2RcIil9O3ZhciBTbT1mdW5jdGlvbihhKXtTbVtcIiBcIl0oYSk7cmV0dXJuIGF9O1NtW1wiIFwiXT1mdW5jdGlvbigpe307TW0oKTtMbSgpfHxLbShcIlRyaWRlbnRcIil8fEttKFwiTVNJRVwiKTtLbShcIkVkZ2VcIik7IUttKFwiR2Vja29cIil8fEdtKCkudG9Mb3dlckNhc2UoKS5pbmRleE9mKFwid2Via2l0XCIpIT0tMSYmIUttKFwiRWRnZVwiKXx8S20oXCJUcmlkZW50XCIpfHxLbShcIk1TSUVcIil8fEttKFwiRWRnZVwiKTtHbSgpLnRvTG93ZXJDYXNlKCkuaW5kZXhPZihcIndlYmtpdFwiKSE9LTEmJiFLbShcIkVkZ2VcIikmJkttKFwiTW9iaWxlXCIpO1BtKCl8fEttKFwiTWFjaW50b3NoXCIpO1BtKCl8fEttKFwiV2luZG93c1wiKTsoUG0oKT9IbS5wbGF0Zm9ybT09PVwiTGludXhcIjpLbShcIkxpbnV4XCIpKXx8UG0oKXx8S20oXCJDck9TXCIpO1BtKCl8fEttKFwiQW5kcm9pZFwiKTtRbSgpO0ttKFwiaVBhZFwiKTtLbShcImlQb2RcIik7Um0oKTtHbSgpLnRvTG93ZXJDYXNlKCkuaW5kZXhPZihcImthaW9zXCIpO3ZhciBUbT1mdW5jdGlvbihhLGIsYyxkKXtmb3IodmFyIGU9YixmPWMubGVuZ3RoOyhlPWEuaW5kZXhPZihjLGUpKT49MCYmZTxkOyl7dmFyIGc9YS5jaGFyQ29kZUF0KGUtMSk7aWYoZz09Mzh8fGc9PTYzKXt2YXIgaz1hLmNoYXJDb2RlQXQoZStmKTtpZigha3x8az09NjF8fGs9PTM4fHxrPT0zNSlyZXR1cm4gZX1lKz1mKzF9cmV0dXJuLTF9LFVtPS8jfCQvLFZtPWZ1bmN0aW9uKGEsYil7dmFyIGM9YS5zZWFyY2goVW0pLGQ9VG0oYSwwLGIsYyk7aWYoZDwwKXJldHVybiBudWxsO3ZhciBlPWEuaW5kZXhPZihcIiZcIixkKTtpZihlPDB8fGU+YyllPWM7ZCs9Yi5sZW5ndGgrMTtyZXR1cm4gZGVjb2RlVVJJQ29tcG9uZW50KGEuc2xpY2UoZCxlIT09LTE/ZTowKS5yZXBsYWNlKC9cXCsvZyxcIiBcIikpfSxXbT0vWz8mXSgkfCMpLyxYbT1mdW5jdGlvbihhLGIsYyl7Zm9yKHZhciBkLGU9YS5zZWFyY2goVW0pLGY9MCxnLGs9W107KGc9VG0oYSxmLGIsZSkpPj0wOylrLnB1c2goYS5zdWJzdHJpbmcoZixcbmcpKSxmPU1hdGgubWluKGEuaW5kZXhPZihcIiZcIixnKSsxfHxlLGUpO2sucHVzaChhLnNsaWNlKGYpKTtkPWsuam9pbihcIlwiKS5yZXBsYWNlKFdtLFwiJDFcIik7dmFyIG0sbj1jIT1udWxsP1wiPVwiK2VuY29kZVVSSUNvbXBvbmVudChTdHJpbmcoYykpOlwiXCI7dmFyIHA9YituO2lmKHApe3ZhciBxLHI9ZC5pbmRleE9mKFwiI1wiKTtyPDAmJihyPWQubGVuZ3RoKTt2YXIgdD1kLmluZGV4T2YoXCI/XCIpLHU7dDwwfHx0PnI/KHQ9cix1PVwiXCIpOnU9ZC5zdWJzdHJpbmcodCsxLHIpO3E9W2Quc2xpY2UoMCx0KSx1LGQuc2xpY2UocildO3ZhciB2PXFbMV07cVsxXT1wP3Y/ditcIiZcIitwOnA6djttPXFbMF0rKHFbMV0/XCI/XCIrcVsxXTpcIlwiKStxWzJdfWVsc2UgbT1kO3JldHVybiBtfTt2YXIgWW09ZnVuY3Rpb24oYSl7dHJ5e3ZhciBiO2lmKGI9ISFhJiZhLmxvY2F0aW9uLmhyZWYhPW51bGwpYTp7dHJ5e1NtKGEuZm9vKTtiPSEwO2JyZWFrIGF9Y2F0Y2goYyl7fWI9ITF9cmV0dXJuIGJ9Y2F0Y2goYyl7cmV0dXJuITF9fSxabT1mdW5jdGlvbihhLGIpe2lmKGEpZm9yKHZhciBjIGluIGEpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGEsYykmJmIoYVtjXSxjLGEpfSwkbT1mdW5jdGlvbihhKXtpZihELnRvcD09RClyZXR1cm4gMDtpZihhPT09dm9pZCAwPzA6YSl7dmFyIGI9RC5sb2NhdGlvbi5hbmNlc3Rvck9yaWdpbnM7aWYoYilyZXR1cm4gYltiLmxlbmd0aC0xXT09RC5sb2NhdGlvbi5vcmlnaW4/MToyfXJldHVybiBZbShELnRvcCk/MToyfSxhbj1mdW5jdGlvbihhKXthPWE9PT12b2lkIDA/ZG9jdW1lbnQ6YTtyZXR1cm4gYS5jcmVhdGVFbGVtZW50KFwiaW1nXCIpfTtmdW5jdGlvbiBibihhLGIsYyxkKXtkPWQ9PT12b2lkIDA/ITE6ZDthLmdvb2dsZV9pbWFnZV9yZXF1ZXN0c3x8KGEuZ29vZ2xlX2ltYWdlX3JlcXVlc3RzPVtdKTt2YXIgZT1hbihhLmRvY3VtZW50KTtpZihjKXt2YXIgZj1mdW5jdGlvbigpe2lmKGMpe3ZhciBnPWEuZ29vZ2xlX2ltYWdlX3JlcXVlc3RzLGs9bWMoZyxlKTtrPj0wJiZBcnJheS5wcm90b3R5cGUuc3BsaWNlLmNhbGwoZyxrLDEpfXptKGUsXCJsb2FkXCIsZik7em0oZSxcImVycm9yXCIsZil9O3ltKGUsXCJsb2FkXCIsZik7eW0oZSxcImVycm9yXCIsZil9ZCYmKGUuYXR0cmlidXRpb25TcmM9XCJcIik7ZS5zcmM9YjthLmdvb2dsZV9pbWFnZV9yZXF1ZXN0cy5wdXNoKGUpfVxudmFyIGRuPWZ1bmN0aW9uKGEpe3ZhciBiO2I9Yj09PXZvaWQgMD8hMTpiO3ZhciBjPVwiaHR0cHM6Ly9wYWdlYWQyLmdvb2dsZXN5bmRpY2F0aW9uLmNvbS9wYWdlYWQvZ2VuXzIwND9pZD10Y2ZlXCI7Wm0oYSxmdW5jdGlvbihkLGUpe2lmKGR8fGQ9PT0wKWMrPVwiJlwiK2UrXCI9XCIrZW5jb2RlVVJJQ29tcG9uZW50KFwiXCIrZCl9KTtjbihjLGIpfSxjbj1mdW5jdGlvbihhLGIpe3ZhciBjPXdpbmRvdyxkO2I9Yj09PXZvaWQgMD8hMTpiO2Q9ZD09PXZvaWQgMD8hMTpkO2lmKGMuZmV0Y2gpe3ZhciBlPXtrZWVwYWxpdmU6ITAsY3JlZGVudGlhbHM6XCJpbmNsdWRlXCIscmVkaXJlY3Q6XCJmb2xsb3dcIixtZXRob2Q6XCJnZXRcIixtb2RlOlwibm8tY29yc1wifTtkJiYoZS5tb2RlPVwiY29yc1wiLFwic2V0QXR0cmlidXRpb25SZXBvcnRpbmdcImluIFhNTEh0dHBSZXF1ZXN0LnByb3RvdHlwZT9lLmF0dHJpYnV0aW9uUmVwb3J0aW5nPXtldmVudFNvdXJjZUVsaWdpYmxlOlwidHJ1ZVwiLHRyaWdnZXJFbGlnaWJsZTpcImZhbHNlXCJ9OlxuZS5oZWFkZXJzPXtcIkF0dHJpYnV0aW9uLVJlcG9ydGluZy1FbGlnaWJsZVwiOlwiZXZlbnQtc291cmNlXCJ9KTtjLmZldGNoKGEsZSl9ZWxzZSBibihjLGEsYj09PXZvaWQgMD8hMTpiLGQ9PT12b2lkIDA/ITE6ZCl9O3ZhciBlbj1mdW5jdGlvbigpe3RoaXMuUj10aGlzLlI7dGhpcy5EPXRoaXMuRH07ZW4ucHJvdG90eXBlLlI9ITE7ZW4ucHJvdG90eXBlLmRpc3Bvc2U9ZnVuY3Rpb24oKXt0aGlzLlJ8fCh0aGlzLlI9ITAsdGhpcy5QYSgpKX07ZW4ucHJvdG90eXBlW1N5bWJvbC5kaXNwb3NlXT1mdW5jdGlvbigpe3RoaXMuZGlzcG9zZSgpfTtlbi5wcm90b3R5cGUuYWRkT25EaXNwb3NlQ2FsbGJhY2s9ZnVuY3Rpb24oYSxiKXt0aGlzLlI/YiE9PXZvaWQgMD9hLmNhbGwoYik6YSgpOih0aGlzLkR8fCh0aGlzLkQ9W10pLGImJihhPWEuYmluZChiKSksdGhpcy5ELnB1c2goYSkpfTtlbi5wcm90b3R5cGUuUGE9ZnVuY3Rpb24oKXtpZih0aGlzLkQpZm9yKDt0aGlzLkQubGVuZ3RoOyl0aGlzLkQuc2hpZnQoKSgpfTt2YXIgZm49ZnVuY3Rpb24oYSl7YS5hZGR0bENvbnNlbnQhPT12b2lkIDAmJnR5cGVvZiBhLmFkZHRsQ29uc2VudCE9PVwic3RyaW5nXCImJihhLmFkZHRsQ29uc2VudD12b2lkIDApO2EuZ2RwckFwcGxpZXMhPT12b2lkIDAmJnR5cGVvZiBhLmdkcHJBcHBsaWVzIT09XCJib29sZWFuXCImJihhLmdkcHJBcHBsaWVzPXZvaWQgMCk7cmV0dXJuIGEudGNTdHJpbmchPT12b2lkIDAmJnR5cGVvZiBhLnRjU3RyaW5nIT09XCJzdHJpbmdcInx8YS5saXN0ZW5lcklkIT09dm9pZCAwJiZ0eXBlb2YgYS5saXN0ZW5lcklkIT09XCJudW1iZXJcIj8yOmEuY21wU3RhdHVzJiZhLmNtcFN0YXR1cyE9PVwiZXJyb3JcIj8wOjN9LGduPWZ1bmN0aW9uKGEsYil7Yj1iPT09dm9pZCAwP3t9OmI7ZW4uY2FsbCh0aGlzKTt0aGlzLkg9YTt0aGlzLmo9bnVsbDt0aGlzLlo9e307dGhpcy5FZj0wO3ZhciBjO3RoaXMuamU9KGM9Yi5ZbSkhPW51bGw/Yzo1MDA7dmFyIGQ7dGhpcy5CYz0oZD1iLkVuKSE9bnVsbD9kOiExO3RoaXMuTT1cbm51bGx9O3lhKGduLGVuKTtnbi5wcm90b3R5cGUuUGE9ZnVuY3Rpb24oKXt0aGlzLlo9e307dGhpcy5NJiYoem0odGhpcy5ILFwibWVzc2FnZVwiLHRoaXMuTSksZGVsZXRlIHRoaXMuTSk7ZGVsZXRlIHRoaXMuWjtkZWxldGUgdGhpcy5IO2RlbGV0ZSB0aGlzLmo7ZW4ucHJvdG90eXBlLlBhLmNhbGwodGhpcyl9O3ZhciBqbj1mdW5jdGlvbihhKXtyZXR1cm4gdHlwZW9mIGEuSC5fX3RjZmFwaT09PVwiZnVuY3Rpb25cInx8aG4oYSkhPW51bGx9O1xuZ24ucHJvdG90eXBlLmFkZEV2ZW50TGlzdGVuZXI9ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcyxjPXtpbnRlcm5hbEJsb2NrT25FcnJvcnM6dGhpcy5CY30sZD14bShmdW5jdGlvbigpe3JldHVybiBhKGMpfSksZT0wO3RoaXMuamUhPT0tMSYmKGU9c2V0VGltZW91dChmdW5jdGlvbigpe2MudGNTdHJpbmc9XCJ0Y3VuYXZhaWxhYmxlXCI7Yy5pbnRlcm5hbEVycm9yU3RhdGU9MTtkKCl9LHRoaXMuamUpKTt2YXIgZj1mdW5jdGlvbihnLGspe2NsZWFyVGltZW91dChlKTtnPyhjPWcsYy5pbnRlcm5hbEVycm9yU3RhdGU9Zm4oYyksYy5pbnRlcm5hbEJsb2NrT25FcnJvcnM9Yi5CYyxrJiZjLmludGVybmFsRXJyb3JTdGF0ZT09PTB8fChjLnRjU3RyaW5nPVwidGN1bmF2YWlsYWJsZVwiLGt8fChjLmludGVybmFsRXJyb3JTdGF0ZT0zKSkpOihjLnRjU3RyaW5nPVwidGN1bmF2YWlsYWJsZVwiLGMuaW50ZXJuYWxFcnJvclN0YXRlPTMpO2EoYyl9O3RyeXtrbih0aGlzLFwiYWRkRXZlbnRMaXN0ZW5lclwiLGYpfWNhdGNoKGcpe2MudGNTdHJpbmc9XG5cInRjdW5hdmFpbGFibGVcIixjLmludGVybmFsRXJyb3JTdGF0ZT0zLGUmJihjbGVhclRpbWVvdXQoZSksZT0wKSxkKCl9fTtnbi5wcm90b3R5cGUucmVtb3ZlRXZlbnRMaXN0ZW5lcj1mdW5jdGlvbihhKXthJiZhLmxpc3RlbmVySWQmJmtuKHRoaXMsXCJyZW1vdmVFdmVudExpc3RlbmVyXCIsbnVsbCxhLmxpc3RlbmVySWQpfTtcbnZhciBtbj1mdW5jdGlvbihhLGIsYyl7dmFyIGQ7ZD1kPT09dm9pZCAwP1wiNzU1XCI6ZDt2YXIgZTthOntpZihhLnB1Ymxpc2hlciYmYS5wdWJsaXNoZXIucmVzdHJpY3Rpb25zKXt2YXIgZj1hLnB1Ymxpc2hlci5yZXN0cmljdGlvbnNbYl07aWYoZiE9PXZvaWQgMCl7ZT1mW2Q9PT12b2lkIDA/XCI3NTVcIjpkXTticmVhayBhfX1lPXZvaWQgMH12YXIgZz1lO2lmKGc9PT0wKXJldHVybiExO3ZhciBrPWM7Yz09PTI/KGs9MCxnPT09MiYmKGs9MSkpOmM9PT0zJiYoaz0xLGc9PT0xJiYoaz0wKSk7dmFyIG07aWYoaz09PTApaWYoYS5wdXJwb3NlJiZhLnZlbmRvcil7dmFyIG49bG4oYS52ZW5kb3IuY29uc2VudHMsZD09PXZvaWQgMD9cIjc1NVwiOmQpO209biYmYj09PVwiMVwiJiZhLnB1cnBvc2VPbmVUcmVhdG1lbnQmJmEucHVibGlzaGVyQ0M9PT1cIkNIXCI/ITA6biYmbG4oYS5wdXJwb3NlLmNvbnNlbnRzLGIpfWVsc2UgbT0hMDtlbHNlIG09az09PTE/YS5wdXJwb3NlJiZhLnZlbmRvcj9sbihhLnB1cnBvc2UubGVnaXRpbWF0ZUludGVyZXN0cyxcbmIpJiZsbihhLnZlbmRvci5sZWdpdGltYXRlSW50ZXJlc3RzLGQ9PT12b2lkIDA/XCI3NTVcIjpkKTohMDohMDtyZXR1cm4gbX0sbG49ZnVuY3Rpb24oYSxiKXtyZXR1cm4hKCFhfHwhYVtiXSl9LGtuPWZ1bmN0aW9uKGEsYixjLGQpe2N8fChjPWZ1bmN0aW9uKCl7fSk7aWYodHlwZW9mIGEuSC5fX3RjZmFwaT09PVwiZnVuY3Rpb25cIil7dmFyIGU9YS5ILl9fdGNmYXBpO2UoYiwyLGMsZCl9ZWxzZSBpZihobihhKSl7bm4oYSk7dmFyIGY9KythLkVmO2EuWltmXT1jO2lmKGEuail7dmFyIGc9e307YS5qLnBvc3RNZXNzYWdlKChnLl9fdGNmYXBpQ2FsbD17Y29tbWFuZDpiLHZlcnNpb246MixjYWxsSWQ6ZixwYXJhbWV0ZXI6ZH0sZyksXCIqXCIpfX1lbHNlIGMoe30sITEpfSxobj1mdW5jdGlvbihhKXtpZihhLmopcmV0dXJuIGEuajt2YXIgYjthOntmb3IodmFyIGM9YS5ILGQ9MDtkPDUwOysrZCl7dmFyIGU7dHJ5e2U9ISghYy5mcmFtZXN8fCFjLmZyYW1lcy5fX3RjZmFwaUxvY2F0b3IpfWNhdGNoKGspe2U9XG4hMX1pZihlKXtiPWM7YnJlYWsgYX12YXIgZjtiOnt0cnl7dmFyIGc9Yy5wYXJlbnQ7aWYoZyYmZyE9Yyl7Zj1nO2JyZWFrIGJ9fWNhdGNoKGspe31mPW51bGx9aWYoIShjPWYpKWJyZWFrfWI9bnVsbH1hLmo9YjtyZXR1cm4gYS5qfSxubj1mdW5jdGlvbihhKXthLk18fChhLk09ZnVuY3Rpb24oYil7dHJ5e3ZhciBjO2M9KHR5cGVvZiBiLmRhdGE9PT1cInN0cmluZ1wiP0pTT04ucGFyc2UoYi5kYXRhKTpiLmRhdGEpLl9fdGNmYXBpUmV0dXJuO2EuWltjLmNhbGxJZF0oYy5yZXR1cm5WYWx1ZSxjLnN1Y2Nlc3MpfWNhdGNoKGQpe319LHltKGEuSCxcIm1lc3NhZ2VcIixhLk0pKX0sb249ZnVuY3Rpb24oYSl7aWYoYS5nZHByQXBwbGllcz09PSExKXJldHVybiEwO2EuaW50ZXJuYWxFcnJvclN0YXRlPT09dm9pZCAwJiYoYS5pbnRlcm5hbEVycm9yU3RhdGU9Zm4oYSkpO3JldHVybiBhLmNtcFN0YXR1cz09PVwiZXJyb3JcInx8YS5pbnRlcm5hbEVycm9yU3RhdGUhPT0wP2EuaW50ZXJuYWxCbG9ja09uRXJyb3JzP1xuKGRuKHtlOlN0cmluZyhhLmludGVybmFsRXJyb3JTdGF0ZSl9KSwhMSk6ITA6YS5jbXBTdGF0dXMhPT1cImxvYWRlZFwifHxhLmV2ZW50U3RhdHVzIT09XCJ0Y2xvYWRlZFwiJiZhLmV2ZW50U3RhdHVzIT09XCJ1c2VyYWN0aW9uY29tcGxldGVcIj8hMTohMH07dmFyIHBuPXsxOjAsMzowLDQ6MCw3OjMsOTozLDEwOjN9O2Z1bmN0aW9uIHFuKCl7dmFyIGE9aWkudGNmfHx7fTtyZXR1cm4gaWkudGNmPWF9dmFyIHJuPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBnbihELHtZbTotMX0pfTtcbmZ1bmN0aW9uIHNuKCl7dmFyIGE9cW4oKSxiPXJuKCk7am4oYikmJiF0bigpJiYhdW4oKSYmTSgxMjQpO2lmKCFhLmFjdGl2ZSYmam4oYikpe3RuKCkmJihhLmFjdGl2ZT0hMCxhLmZjPXt9LGEuY21wSWQ9MCxhLnRjZlBvbGljeVZlcnNpb249MCxvaygpLmFjdGl2ZT0hMCxhLnRjU3RyaW5nPVwidGN1bmF2YWlsYWJsZVwiKTtkbCgpO3RyeXtiLmFkZEV2ZW50TGlzdGVuZXIoZnVuY3Rpb24oYyl7aWYoYy5pbnRlcm5hbEVycm9yU3RhdGUhPT0wKXZuKGEpLGVsKFtULmcuUCxULmcud2EsVC5nLk9dKSxvaygpLmFjdGl2ZT0hMDtlbHNlIGlmKGEuZ2RwckFwcGxpZXM9Yy5nZHByQXBwbGllcyxhLmNtcElkPWMuY21wSWQsYS5lbmFibGVBZHZlcnRpc2VyQ29uc2VudE1vZGU9Yy5lbmFibGVBZHZlcnRpc2VyQ29uc2VudE1vZGUsdW4oKSYmKGEuYWN0aXZlPSEwKSwhd24oYyl8fHRuKCl8fHVuKCkpe2EudGNmUG9saWN5VmVyc2lvbj1jLnRjZlBvbGljeVZlcnNpb247dmFyIGQ7aWYoYy5nZHByQXBwbGllcz09PVxuITEpe3ZhciBlPXt9LGY7Zm9yKGYgaW4gcG4pcG4uaGFzT3duUHJvcGVydHkoZikmJihlW2ZdPSEwKTtkPWU7Yi5yZW1vdmVFdmVudExpc3RlbmVyKGMpfWVsc2UgaWYod24oYykpe3ZhciBnPXt9LGs7Zm9yKGsgaW4gcG4paWYocG4uaGFzT3duUHJvcGVydHkoaykpaWYoaz09PVwiMVwiKXt2YXIgbSxuPWMscD17R2w6ITB9O3A9cD09PXZvaWQgMD97fTpwO209b24obik/bi5nZHByQXBwbGllcz09PSExPyEwOm4udGNTdHJpbmc9PT1cInRjdW5hdmFpbGFibGVcIj8hcC5LajoocC5Lanx8bi5nZHByQXBwbGllcyE9PXZvaWQgMHx8cC5HbCkmJihwLktqfHx0eXBlb2Ygbi50Y1N0cmluZz09PVwic3RyaW5nXCImJm4udGNTdHJpbmcubGVuZ3RoKT9tbihuLFwiMVwiLDApOiEwOiExO2dbXCIxXCJdPW19ZWxzZSBnW2tdPW1uKGMsayxwbltrXSk7ZD1nfWlmKGQpe2EudGNTdHJpbmc9Yy50Y1N0cmluZ3x8XCJ0Y2VtcHR5XCI7YS5mYz1kO3ZhciBxPXt9LHI9KHFbVC5nLlBdPWEuZmNbXCIxXCJdP1wiZ3JhbnRlZFwiOlxuXCJkZW5pZWRcIixxKTthLmdkcHJBcHBsaWVzIT09ITA/KGVsKFtULmcuUCxULmcud2EsVC5nLk9dKSxvaygpLmFjdGl2ZT0hMCk6KHJbVC5nLndhXT1hLmZjW1wiM1wiXSYmYS5mY1tcIjRcIl0/XCJncmFudGVkXCI6XCJkZW5pZWRcIix0eXBlb2YgYS50Y2ZQb2xpY3lWZXJzaW9uPT09XCJudW1iZXJcIiYmYS50Y2ZQb2xpY3lWZXJzaW9uPj00P3JbVC5nLk9dPWEuZmNbXCIxXCJdJiZhLmZjW1wiN1wiXT9cImdyYW50ZWRcIjpcImRlbmllZFwiOmVsKFtULmcuT10pLFprKHIse2V2ZW50SWQ6MH0se2dkcHJBcHBsaWVzOmE/YS5nZHByQXBwbGllczp2b2lkIDAsdGNTdHJpbmc6eG4oKXx8XCJcIn0pKX19ZWxzZSBlbChbVC5nLlAsVC5nLndhLFQuZy5PXSl9KX1jYXRjaChjKXt2bihhKSxlbChbVC5nLlAsVC5nLndhLFQuZy5PXSksb2soKS5hY3RpdmU9ITB9fX1mdW5jdGlvbiB2bihhKXthLnR5cGU9XCJlXCI7YS50Y1N0cmluZz1cInRjdW5hdmFpbGFibGVcIn1cbmZ1bmN0aW9uIHduKGEpe3JldHVybiBhLmV2ZW50U3RhdHVzPT09XCJ0Y2xvYWRlZFwifHxhLmV2ZW50U3RhdHVzPT09XCJ1c2VyYWN0aW9uY29tcGxldGVcInx8YS5ldmVudFN0YXR1cz09PVwiY21wdWlzaG93blwifWZ1bmN0aW9uIHRuKCl7cmV0dXJuIEQuZ3RhZ19lbmFibGVfdGNmX3N1cHBvcnQ9PT0hMH1mdW5jdGlvbiB1bigpe3JldHVybiBxbigpLmVuYWJsZUFkdmVydGlzZXJDb25zZW50TW9kZT09PSEwfWZ1bmN0aW9uIHhuKCl7dmFyIGE9cW4oKTtpZihhLmFjdGl2ZSlyZXR1cm4gYS50Y1N0cmluZ31mdW5jdGlvbiB5bigpe3ZhciBhPXFuKCk7aWYoYS5hY3RpdmUmJmEuZ2RwckFwcGxpZXMhPT12b2lkIDApcmV0dXJuIGEuZ2RwckFwcGxpZXM/XCIxXCI6XCIwXCJ9ZnVuY3Rpb24gem4oYSl7aWYoIXBuLmhhc093blByb3BlcnR5KFN0cmluZyhhKSkpcmV0dXJuITA7dmFyIGI9cW4oKTtyZXR1cm4gYi5hY3RpdmUmJmIuZmM/ISFiLmZjW1N0cmluZyhhKV06ITB9dmFyIEFuPVtULmcuUCxULmcuVSxULmcuTyxULmcud2FdLEJuPXt9LENuPShCbltULmcuUF09MSxCbltULmcuVV09MixCbik7ZnVuY3Rpb24gRG4oYSl7aWYoYT09PXZvaWQgMClyZXR1cm4gMDtzd2l0Y2goVShhLFQuZy5qYSkpe2Nhc2Ugdm9pZCAwOnJldHVybiAxO2Nhc2UgITE6cmV0dXJuIDM7ZGVmYXVsdDpyZXR1cm4gMn19ZnVuY3Rpb24gRW4oYSl7aWYoTmsoKT09PVwiVVMtQ09cIiYmb2MuZ2xvYmFsUHJpdmFjeUNvbnRyb2w9PT0hMClyZXR1cm4hMTt2YXIgYj1EbihhKTtpZihiPT09MylyZXR1cm4hMTtzd2l0Y2goeGsoVC5nLndhKSl7Y2FzZSAxOmNhc2UgMzpyZXR1cm4hMDtjYXNlIDI6cmV0dXJuITE7Y2FzZSA0OnJldHVybiBiPT09MjtjYXNlIDA6cmV0dXJuITA7ZGVmYXVsdDpyZXR1cm4hMX19ZnVuY3Rpb24gRm4oKXtyZXR1cm4gQWsoKXx8IXdrKFQuZy5QKXx8IXdrKFQuZy5VKX1cbmZ1bmN0aW9uIEduKCl7dmFyIGE9e30sYjtmb3IoYiBpbiBDbilDbi5oYXNPd25Qcm9wZXJ0eShiKSYmKGFbQ25bYl1dPXhrKGIpKTtyZXR1cm5cIkcxXCIrRmUoYVsxXXx8MCkrRmUoYVsyXXx8MCl9dmFyIEhuPXt9LEluPShIbltULmcuUF09MCxIbltULmcuVV09MSxIbltULmcuT109MixIbltULmcud2FdPTMsSG4pO2Z1bmN0aW9uIEpuKGEpe3N3aXRjaChhKXtjYXNlIHZvaWQgMDpyZXR1cm4gMTtjYXNlICEwOnJldHVybiAzO2Nhc2UgITE6cmV0dXJuIDI7ZGVmYXVsdDpyZXR1cm4gMH19XG5mdW5jdGlvbiBLbihhKXtmb3IodmFyIGI9XCIxXCIsYz0wO2M8QW4ubGVuZ3RoO2MrKyl7dmFyIGQ9YixlLGY9QW5bY10sZz12ay5kZWxlZ2F0ZWRDb25zZW50VHlwZXNbZl07ZT1nPT09dm9pZCAwPzA6SW4uaGFzT3duUHJvcGVydHkoZyk/MTJ8SW5bZ106ODt2YXIgaz1vaygpO2suYWNjZXNzZWRBbnk9ITA7dmFyIG09ay5lbnRyaWVzW2ZdfHx7fTtlPWU8PDJ8Sm4obS5pbXBsaWNpdCk7Yj1kKyhcIlwiK1wiMDEyMzQ1Njc4OWFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6QUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVotX1wiW2VdK1wiMDEyMzQ1Njc4OWFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6QUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVotX1wiW0puKG0uZGVjbGFyZSk8PDR8Sm4obS5kZWZhdWx0KTw8MnxKbihtLnVwZGF0ZSldKX12YXIgbj1iLHA9KE5rKCk9PT1cIlVTLUNPXCImJm9jLmdsb2JhbFByaXZhY3lDb250cm9sPT09ITA/MTowKTw8MyxxPShBaygpPzE6MCk8PDIscj1EbihhKTtiPVxubitcIjAxMjM0NTY3ODlhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ekFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaLV9cIltwfHF8cl07USg5OSkmJihiKz1cIlwiK1wiMDEyMzQ1Njc4OWFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6QUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVotX1wiW3ZrLmNvbnRhaW5lclNjb3BlZERlZmF1bHRzLmFkX3N0b3JhZ2U8PDR8dmsuY29udGFpbmVyU2NvcGVkRGVmYXVsdHMuYW5hbHl0aWNzX3N0b3JhZ2U8PDJ8dmsuY29udGFpbmVyU2NvcGVkRGVmYXVsdHMuYWRfdXNlcl9kYXRhXStcIjAxMjM0NTY3ODlhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ekFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaLV9cIlsobWIoOCkmJnZrLnVzZWRDb250YWluZXJTY29wZWREZWZhdWx0cz8xOjApPDwyfHZrLmNvbnRhaW5lclNjb3BlZERlZmF1bHRzLmFkX3BlcnNvbmFsaXphdGlvbl0pO3JldHVybiBifVxuZnVuY3Rpb24gTG4oKXtpZighd2soVC5nLk8pKXJldHVyblwiLVwiO2Zvcih2YXIgYT1PYmplY3Qua2V5cyhnaSksYj15ayhhKSxjPVwiXCIsZD1uYShhKSxlPWQubmV4dCgpOyFlLmRvbmU7ZT1kLm5leHQoKSl7dmFyIGY9ZS52YWx1ZTtiW2ZdJiYoYys9Z2lbZl0pfSh2ay51c2VkQ29yZVBsYXRmb3JtU2VydmljZXM/dmsuc2VsZWN0ZWRBbGxDb3JlUGxhdGZvcm1TZXJ2aWNlczoxKSYmKGMrPVwib1wiKTtyZXR1cm4gY3x8XCItXCJ9ZnVuY3Rpb24gTW4oKXtyZXR1cm4gUGsoKXx8KHRuKCl8fHVuKCkpJiZ5bigpPT09XCIxXCI/XCIxXCI6XCIwXCJ9ZnVuY3Rpb24gTm4oKXtyZXR1cm4oUGsoKT8hMDohKCF0bigpJiYhdW4oKSkmJnluKCk9PT1cIjFcIil8fCF3ayhULmcuTyl9XG5mdW5jdGlvbiBVbigpe3ZhciBhPVwiMFwiLGI9XCIwXCIsYzt2YXIgZD1xbigpO2M9ZC5hY3RpdmU/ZC5jbXBJZDp2b2lkIDA7dHlwZW9mIGM9PT1cIm51bWJlclwiJiZjPj0wJiZjPD00MDk1JiYoYT1cIjAxMjM0NTY3ODlhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ekFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaLV9cIltjPj42JjYzXSxiPVwiMDEyMzQ1Njc4OWFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6QUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVotX1wiW2MmNjNdKTt2YXIgZT1cIjBcIixmO3ZhciBnPXFuKCk7Zj1nLmFjdGl2ZT9nLnRjZlBvbGljeVZlcnNpb246dm9pZCAwO3R5cGVvZiBmPT09XCJudW1iZXJcIiYmZj49MCYmZjw9NjMmJihlPVwiMDEyMzQ1Njc4OWFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6QUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVotX1wiW2ZdKTt2YXIgaz0wO1BrKCkmJihrfD0xKTt5bigpPT09XCIxXCImJihrfD0yKTt0bigpJiYoa3w9NCk7dmFyIG07dmFyIG49cW4oKTttPW4uZW5hYmxlQWR2ZXJ0aXNlckNvbnNlbnRNb2RlIT09XG52b2lkIDA/bi5lbmFibGVBZHZlcnRpc2VyQ29uc2VudE1vZGU/XCIxXCI6XCIwXCI6dm9pZCAwO209PT1cIjFcIiYmKGt8PTgpO29rKCkud2FpdFBlcmlvZFRpbWVkT3V0JiYoa3w9MTYpO3JldHVyblwiMVwiK2ErYitlK1wiMDEyMzQ1Njc4OWFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6QUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVotX1wiW2tdfWZ1bmN0aW9uIFZuKCl7cmV0dXJuIE5rKCk9PT1cIlVTLUNPXCJ9O2Z1bmN0aW9uIFduKCl7dmFyIGE9ITE7cmV0dXJuIGF9O3ZhciBYbj17VUE6MSxBVzoyLERDOjMsRzo0LEdGOjUsR1Q6MTIsR1RNOjE0LEhBOjYsTUM6N307XG5mdW5jdGlvbiBZbihhKXthPWE9PT12b2lkIDA/e306YTt2YXIgYj1PZi5jdGlkLnNwbGl0KFwiLVwiKVswXS50b1VwcGVyQ2FzZSgpLGM9e307Yy5jdGlkPU9mLmN0aWQ7Yy5JbT1oaS5wZTtjLk1tPWhpLlJnO2MuaW09emoubWU/MjoxO2MuU209YS5iaztjLnhlPU9mLmNhbm9uaWNhbENvbnRhaW5lcklkO2MueGUhPT1hLnNhJiYoYy5zYT1hLnNhKTt2YXIgZD1KaigpO2MueW09ZD9kLmNhbm9uaWNhbENvbnRhaW5lcklkOnZvaWQgMDtvaT8oYy5SZj1YbltiXSxjLlJmfHwoYy5SZj0wKSk6Yy5SZj1zaT8xMzoxMDtCaS5IPyhjLlBmPTAsYy5qbD0yKTpxaT9jLlBmPTE6V24oKT9jLlBmPTI6Yy5QZj0zO3ZhciBlPXt9O2VbNl09QWo7QmkuRD09PTI/ZVs3XT0hMDpCaS5EPT09MSYmKGVbMl09ITApO2Mubmw9ZTt2YXIgZj1hLkhmLGc7dmFyIGs9Yy5SZixtPWMuUGY7az09PXZvaWQgMD9nPVwiXCI6KG18fChtPTApLGc9XCJcIitIZSgxLDEpK0VlKGs8PDJ8bSkpO3ZhciBuPWMuamwscD1cIjRcIitnK1xuKG4/XCJcIitIZSgyLDEpK0VlKG4pOlwiXCIpLHEscj1jLk1tO3E9ciYmR2UudGVzdChyKT9cIlwiK0hlKDMsMikrcjpcIlwiO3ZhciB0LHU9Yy5JbTt0PXU/XCJcIitIZSg0LDEpK0VlKHUpOlwiXCI7dmFyIHY7dmFyIHc9Yy5jdGlkO2lmKHcmJmYpe3ZhciB4PXcuc3BsaXQoXCItXCIpLHk9eFswXS50b1VwcGVyQ2FzZSgpO2lmKHkhPT1cIkdUTVwiJiZ5IT09XCJPUFRcIil2PVwiXCI7ZWxzZXt2YXIgQT14WzFdO3Y9XCJcIitIZSg1LDMpK0VlKDErQS5sZW5ndGgpKyhjLmltfHwwKStBfX1lbHNlIHY9XCJcIjt2YXIgQj1jLlNtLEM9Yy54ZSxIPWMuc2EsST1jLk9uLEY9cCtxK3QrdisoQj9cIlwiK0hlKDYsMSkrRWUoQik6XCJcIikrKEM/XCJcIitIZSg3LDMpK0VlKEMubGVuZ3RoKStDOlwiXCIpKyhIP1wiXCIrSGUoOCwzKStFZShILmxlbmd0aCkrSDpcIlwiKSsoST9cIlwiK0hlKDksMykrRWUoSS5sZW5ndGgpK0k6XCJcIiksTzt2YXIgTj1jLm5sO049Tj09PXZvaWQgMD97fTpOO2Zvcih2YXIgUz1bXSxWPW5hKE9iamVjdC5rZXlzKE4pKSxhYT1WLm5leHQoKTshYWEuZG9uZTthYT1cblYubmV4dCgpKXt2YXIgWD1hYS52YWx1ZTtTW051bWJlcihYKV09TltYXX1pZihTLmxlbmd0aCl7dmFyIFI9SGUoMTAsMyksbWE7aWYoUy5sZW5ndGg9PT0wKW1hPUVlKDApO2Vsc2V7Zm9yKHZhciBsYT1bXSxlYT0wLHdhPSExLE9hPTA7T2E8Uy5sZW5ndGg7T2ErKyl7d2E9ITA7dmFyIEVhPU9hJTY7U1tPYV0mJihlYXw9MTw8RWEpO0VhPT09NSYmKGxhLnB1c2goRWUoZWEpKSxlYT0wLHdhPSExKX13YSYmbGEucHVzaChFZShlYSkpO21hPWxhLmpvaW4oXCJcIil9dmFyIFRhPW1hO089XCJcIitSK0VlKFRhLmxlbmd0aCkrVGF9ZWxzZSBPPVwiXCI7dmFyICRhPWMueW07cmV0dXJuIEYrTysoJGE/XCJcIitIZSgxMSwzKStFZSgkYS5sZW5ndGgpKyRhOlwiXCIpfTt2YXIgWm49e3JqOlwic2VydmljZV93b3JrZXJfZW5kcG9pbnRcIixUZzpcInNoYXJlZF91c2VyX2lkXCIsVWc6XCJzaGFyZWRfdXNlcl9pZF9yZXF1ZXN0ZWRcIixzZTpcInNoYXJlZF91c2VyX2lkX3NvdXJjZVwifSwkbjtmdW5jdGlvbiBhbyhhKXtpZighJG4peyRuPXt9O2Zvcih2YXIgYj1uYShPYmplY3Qua2V5cyhabikpLGM9Yi5uZXh0KCk7IWMuZG9uZTtjPWIubmV4dCgpKSRuW1puW2MudmFsdWVdXT0hMH1yZXR1cm4hISRuW2FdfVxuZnVuY3Rpb24gYm8oYSxiKXtiPWI9PT12b2lkIDA/ITE6YjtpZihhbyhhKSl7dmFyIGMsZCxlPShkPShjPXNjKFwiZ29vZ2xlX3RhZ19kYXRhXCIse30pKS54Y2QpIT1udWxsP2Q6Yy54Y2Q9e307aWYoZVthXSlyZXR1cm4gZVthXTtpZihiKXt2YXIgZj12b2lkIDAsZz0xLGs9e30sbT17c2V0OmZ1bmN0aW9uKG4pe2Y9bjttLm5vdGlmeSgpfSxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gZn0sc3Vic2NyaWJlOmZ1bmN0aW9uKG4pe2tbU3RyaW5nKGcpXT1uO3JldHVybiBnKyt9LHVuc3Vic2NyaWJlOmZ1bmN0aW9uKG4pe3ZhciBwPVN0cmluZyhuKTtyZXR1cm4gay5oYXNPd25Qcm9wZXJ0eShwKT8oZGVsZXRlIGtbcF0sITApOiExfSxub3RpZnk6ZnVuY3Rpb24oKXtmb3IodmFyIG49bmEoT2JqZWN0LmtleXMoaykpLHA9bi5uZXh0KCk7IXAuZG9uZTtwPW4ubmV4dCgpKXt2YXIgcT1wLnZhbHVlO3RyeXtrW3FdKGEsZil9Y2F0Y2gocil7fX19fTtyZXR1cm4gZVthXT1tfX19XG5mdW5jdGlvbiBjbyhhLGIpe3ZhciBjPWJvKGEsITApO2MmJmMuc2V0KGIpfWZ1bmN0aW9uIGVvKGEpe3ZhciBiO3JldHVybihiPWJvKGEpKT09bnVsbD92b2lkIDA6Yi5nZXQoKX1mdW5jdGlvbiBmbyhhLGIpe2lmKHR5cGVvZiBiPT09XCJmdW5jdGlvblwiKXt2YXIgYztyZXR1cm4oYz1ibyhhLCEwKSk9PW51bGw/dm9pZCAwOmMuc3Vic2NyaWJlKGIpfX1mdW5jdGlvbiBnbyhhLGIpe3ZhciBjPWJvKGEpO3JldHVybiBjP2MudW5zdWJzY3JpYmUoYik6ITF9O2Z1bmN0aW9uIGhvKGEpe3ZhciBiPTEsYyxkLGU7aWYoYSlmb3IoYj0wLGQ9YS5sZW5ndGgtMTtkPj0wO2QtLSllPWEuY2hhckNvZGVBdChkKSxiPShiPDw2JjI2ODQzNTQ1NSkrZSsoZTw8MTQpLGM9YiYyNjYzMzgzMDQsYj1jIT09MD9iXmM+PjIxOmI7cmV0dXJuIGJ9O2Z1bmN0aW9uIGlvKGEpe3JldHVybiBhLm9yaWdpbiE9PVwibnVsbFwifTtmdW5jdGlvbiBqbyhhLGIsYyxkKXt2YXIgZTtpZihrbyhkKSl7Zm9yKHZhciBmPVtdLGc9U3RyaW5nKGJ8fGxvKCkpLnNwbGl0KFwiO1wiKSxrPTA7azxnLmxlbmd0aDtrKyspe3ZhciBtPWdba10uc3BsaXQoXCI9XCIpLG49bVswXS5yZXBsYWNlKC9eXFxzKnxcXHMqJC9nLFwiXCIpO2lmKG4mJm49PT1hKXt2YXIgcD1tLnNsaWNlKDEpLmpvaW4oXCI9XCIpLnJlcGxhY2UoL15cXHMqfFxccyokL2csXCJcIik7cCYmYyYmKHA9ZGVjb2RlVVJJQ29tcG9uZW50KHApKTtmLnB1c2gocCl9fWU9Zn1lbHNlIGU9W107cmV0dXJuIGV9XG5mdW5jdGlvbiBtbyhhLGIsYyxkLGUpe2lmKGtvKGUpKXt2YXIgZj1ubyhhLGQsZSk7aWYoZi5sZW5ndGg9PT0xKXJldHVybiBmWzBdLmlkO2lmKGYubGVuZ3RoIT09MCl7Zj1vbyhmLGZ1bmN0aW9uKGcpe3JldHVybiBnLndsfSxiKTtpZihmLmxlbmd0aD09PTEpcmV0dXJuIGZbMF0uaWQ7Zj1vbyhmLGZ1bmN0aW9uKGcpe3JldHVybiBnLkFtfSxjKTtyZXR1cm4gZlswXT9mWzBdLmlkOnZvaWQgMH19fWZ1bmN0aW9uIHBvKGEsYixjLGQpe3ZhciBlPWxvKCksZj13aW5kb3c7aW8oZikmJihmLmRvY3VtZW50LmNvb2tpZT1hKTt2YXIgZz1sbygpO3JldHVybiBlIT09Z3x8YyE9PXZvaWQgMCYmam8oYixnLCExLGQpLmluZGV4T2YoYyk+PTB9XG5mdW5jdGlvbiBxbyhhLGIsYyxkKXtmdW5jdGlvbiBlKHcseCx5KXtpZih5PT1udWxsKXJldHVybiBkZWxldGUga1t4XSx3O2tbeF09eTtyZXR1cm4gdytcIjsgXCIreCtcIj1cIit5fWZ1bmN0aW9uIGYodyx4KXtpZih4PT1udWxsKXJldHVybiB3O2tbeF09ITA7cmV0dXJuIHcrXCI7IFwiK3h9aWYoIWtvKGMuQWIpKXJldHVybiAyO3ZhciBnO2I9PW51bGw/Zz1hK1wiPWRlbGV0ZWQ7IGV4cGlyZXM9XCIrKG5ldyBEYXRlKDApKS50b1VUQ1N0cmluZygpOihjLmVuY29kZSYmKGI9ZW5jb2RlVVJJQ29tcG9uZW50KGIpKSxiPXJvKGIpLGc9YStcIj1cIitiKTt2YXIgaz17fTtnPWUoZyxcInBhdGhcIixjLnBhdGgpO3ZhciBtO2MuZXhwaXJlcyBpbnN0YW5jZW9mIERhdGU/bT1jLmV4cGlyZXMudG9VVENTdHJpbmcoKTpjLmV4cGlyZXMhPW51bGwmJihtPVwiXCIrYy5leHBpcmVzKTtnPWUoZyxcImV4cGlyZXNcIixtKTtnPWUoZyxcIm1heC1hZ2VcIixjLm1tKTtnPWUoZyxcInNhbWVzaXRlXCIsYy5ObSk7Yy5zZWN1cmUmJlxuKGc9ZihnLFwic2VjdXJlXCIpKTt2YXIgbj1jLmRvbWFpbjtpZihuJiZuLnRvTG93ZXJDYXNlKCk9PT1cImF1dG9cIil7Zm9yKHZhciBwPXNvKCkscT12b2lkIDAscj0hMSx0PTA7dDxwLmxlbmd0aDsrK3Qpe3ZhciB1PXBbdF0hPT1cIm5vbmVcIj9wW3RdOnZvaWQgMCx2PWUoZyxcImRvbWFpblwiLHUpO3Y9Zih2LGMuZmxhZ3MpO3RyeXtkJiZkKGEsayl9Y2F0Y2godyl7cT13O2NvbnRpbnVlfXI9ITA7aWYoIXRvKHUsYy5wYXRoKSYmcG8odixhLGIsYy5BYikpcmV0dXJuIDB9aWYocSYmIXIpdGhyb3cgcTtyZXR1cm4gMX1uJiZuLnRvTG93ZXJDYXNlKCkhPT1cIm5vbmVcIiYmKGc9ZShnLFwiZG9tYWluXCIsbikpO2c9ZihnLGMuZmxhZ3MpO2QmJmQoYSxrKTtyZXR1cm4gdG8obixjLnBhdGgpPzE6cG8oZyxhLGIsYy5BYik/MDoxfWZ1bmN0aW9uIHVvKGEsYixjKXtjLnBhdGg9PW51bGwmJihjLnBhdGg9XCIvXCIpO2MuZG9tYWlufHwoYy5kb21haW49XCJhdXRvXCIpO3JldHVybiBxbyhhLGIsYyl9XG5mdW5jdGlvbiBvbyhhLGIsYyl7Zm9yKHZhciBkPVtdLGU9W10sZixnPTA7ZzxhLmxlbmd0aDtnKyspe3ZhciBrPWFbZ10sbT1iKGspO209PT1jP2QucHVzaChrKTpmPT09dm9pZCAwfHxtPGY/KGU9W2tdLGY9bSk6bT09PWYmJmUucHVzaChrKX1yZXR1cm4gZC5sZW5ndGg+MD9kOmV9ZnVuY3Rpb24gbm8oYSxiLGMpe2Zvcih2YXIgZD1bXSxlPWpvKGEsdm9pZCAwLHZvaWQgMCxjKSxmPTA7ZjxlLmxlbmd0aDtmKyspe3ZhciBnPWVbZl0uc3BsaXQoXCIuXCIpLGs9Zy5zaGlmdCgpO2lmKCFifHwha3x8Yi5pbmRleE9mKGspIT09LTEpe3ZhciBtPWcuc2hpZnQoKTtpZihtKXt2YXIgbj1tLnNwbGl0KFwiLVwiKTtkLnB1c2goe2lkOmcuam9pbihcIi5cIiksd2w6TnVtYmVyKG5bMF0pfHwxLEFtOk51bWJlcihuWzFdKXx8MX0pfX19cmV0dXJuIGR9ZnVuY3Rpb24gcm8oYSl7YSYmYS5sZW5ndGg+MTIwMCYmKGE9YS5zdWJzdHJpbmcoMCwxMjAwKSk7cmV0dXJuIGF9XG52YXIgdm89L14od3d3XFwuKT9nb29nbGUoXFwuY29tPyk/KFxcLlthLXpdezJ9KT8kLyx3bz0vKF58XFwuKWRvdWJsZWNsaWNrXFwubmV0JC9pO2Z1bmN0aW9uIHRvKGEsYil7cmV0dXJuIGEhPT12b2lkIDAmJih3by50ZXN0KHdpbmRvdy5kb2N1bWVudC5sb2NhdGlvbi5ob3N0bmFtZSl8fGI9PT1cIi9cIiYmdm8udGVzdChhKSl9ZnVuY3Rpb24geG8oYSl7aWYoIWEpcmV0dXJuIDE7dmFyIGI9YTttYigxMSkmJmE9PT1cIm5vbmVcIiYmKGI9d2luZG93LmRvY3VtZW50LmxvY2F0aW9uLmhvc3RuYW1lKTtiPWIuaW5kZXhPZihcIi5cIik9PT0wP2Iuc3Vic3RyaW5nKDEpOmI7cmV0dXJuIGIuc3BsaXQoXCIuXCIpLmxlbmd0aH1mdW5jdGlvbiB5byhhKXtpZighYXx8YT09PVwiL1wiKXJldHVybiAxO2FbMF0hPT1cIi9cIiYmKGE9XCIvXCIrYSk7YVthLmxlbmd0aC0xXSE9PVwiL1wiJiYoYSs9XCIvXCIpO3JldHVybiBhLnNwbGl0KFwiL1wiKS5sZW5ndGgtMX1cbmZ1bmN0aW9uIHpvKGEsYil7dmFyIGM9XCJcIit4byhhKSxkPXlvKGIpO2Q+MSYmKGMrPVwiLVwiK2QpO3JldHVybiBjfVxudmFyIGxvPWZ1bmN0aW9uKCl7cmV0dXJuIGlvKHdpbmRvdyk/d2luZG93LmRvY3VtZW50LmNvb2tpZTpcIlwifSxrbz1mdW5jdGlvbihhKXtyZXR1cm4gYSYmbWIoMTIpPyhBcnJheS5pc0FycmF5KGEpP2E6W2FdKS5ldmVyeShmdW5jdGlvbihiKXtyZXR1cm4gemsoYikmJndrKGIpfSk6ITB9LHNvPWZ1bmN0aW9uKCl7dmFyIGE9W10sYj13aW5kb3cuZG9jdW1lbnQubG9jYXRpb24uaG9zdG5hbWUuc3BsaXQoXCIuXCIpO2lmKGIubGVuZ3RoPT09NCl7dmFyIGM9YltiLmxlbmd0aC0xXTtpZihOdW1iZXIoYykudG9TdHJpbmcoKT09PWMpcmV0dXJuW1wibm9uZVwiXX1mb3IodmFyIGQ9Yi5sZW5ndGgtMjtkPj0wO2QtLSlhLnB1c2goYi5zbGljZShkKS5qb2luKFwiLlwiKSk7dmFyIGU9d2luZG93LmRvY3VtZW50LmxvY2F0aW9uLmhvc3RuYW1lO3dvLnRlc3QoZSl8fHZvLnRlc3QoZSl8fGEucHVzaChcIm5vbmVcIik7cmV0dXJuIGF9O2Z1bmN0aW9uIEFvKGEpe3ZhciBiPU1hdGgucm91bmQoTWF0aC5yYW5kb20oKSoyMTQ3NDgzNjQ3KTtyZXR1cm4gYT9TdHJpbmcoYl5obyhhKSYyMTQ3NDgzNjQ3KTpTdHJpbmcoYil9ZnVuY3Rpb24gQm8oYSl7cmV0dXJuW0FvKGEpLE1hdGgucm91bmQoQmIoKS8xRTMpXS5qb2luKFwiLlwiKX1mdW5jdGlvbiBDbyhhLGIsYyxkLGUpe3ZhciBmPXhvKGIpO3JldHVybiBtbyhhLGYseW8oYyksZCxlKX1mdW5jdGlvbiBEbyhhLGIsYyxkKXtyZXR1cm5bYix6byhjLGQpLGFdLmpvaW4oXCIuXCIpfTtmdW5jdGlvbiBFbyhhLGIsYyxkKXt2YXIgZSxmPU51bWJlcihhLnpiIT1udWxsP2EuemI6dm9pZCAwKTtmIT09MCYmKGU9bmV3IERhdGUoKGJ8fEJiKCkpKzFFMyooZnx8Nzc3NkUzKSkpO3JldHVybntwYXRoOmEucGF0aCxkb21haW46YS5kb21haW4sZmxhZ3M6YS5mbGFncyxlbmNvZGU6ISFjLGV4cGlyZXM6ZSxBYjpkfX07dmFyIEZvO2Z1bmN0aW9uIEdvKCl7ZnVuY3Rpb24gYShnKXtjKGcudGFyZ2V0fHxnLnNyY0VsZW1lbnR8fHt9KX1mdW5jdGlvbiBiKGcpe2QoZy50YXJnZXR8fGcuc3JjRWxlbWVudHx8e30pfXZhciBjPUhvLGQ9SW8sZT1KbygpO2lmKCFlLmluaXQpe0NjKEUsXCJtb3VzZWRvd25cIixhKTtDYyhFLFwia2V5dXBcIixhKTtDYyhFLFwic3VibWl0XCIsYik7dmFyIGY9SFRNTEZvcm1FbGVtZW50LnByb3RvdHlwZS5zdWJtaXQ7SFRNTEZvcm1FbGVtZW50LnByb3RvdHlwZS5zdWJtaXQ9ZnVuY3Rpb24oKXtkKHRoaXMpO2YuY2FsbCh0aGlzKX07ZS5pbml0PSEwfX1mdW5jdGlvbiBLbyhhLGIsYyxkLGUpe3ZhciBmPXtjYWxsYmFjazphLGRvbWFpbnM6YixmcmFnbWVudDpjPT09MixwbGFjZW1lbnQ6Yyxmb3JtczpkLHNhbWVIb3N0OmV9O0pvKCkuZGVjb3JhdG9ycy5wdXNoKGYpfVxuZnVuY3Rpb24gTG8oYSxiLGMpe2Zvcih2YXIgZD1KbygpLmRlY29yYXRvcnMsZT17fSxmPTA7ZjxkLmxlbmd0aDsrK2Ype3ZhciBnPWRbZl0saztpZihrPSFjfHxnLmZvcm1zKWE6e3ZhciBtPWcuZG9tYWlucyxuPWEscD0hIWcuc2FtZUhvc3Q7aWYobSYmKHB8fG4hPT1FLmxvY2F0aW9uLmhvc3RuYW1lKSlmb3IodmFyIHE9MDtxPG0ubGVuZ3RoO3ErKylpZihtW3FdaW5zdGFuY2VvZiBSZWdFeHApe2lmKG1bcV0udGVzdChuKSl7az0hMDticmVhayBhfX1lbHNlIGlmKG4uaW5kZXhPZihtW3FdKT49MHx8cCYmbVtxXS5pbmRleE9mKG4pPj0wKXtrPSEwO2JyZWFrIGF9az0hMX1pZihrKXt2YXIgcj1nLnBsYWNlbWVudDtyPT09dm9pZCAwJiYocj1nLmZyYWdtZW50PzI6MSk7cj09PWImJkViKGUsZy5jYWxsYmFjaygpKX19cmV0dXJuIGV9XG5mdW5jdGlvbiBKbygpe3ZhciBhPXNjKFwiZ29vZ2xlX3RhZ19kYXRhXCIse30pLGI9YS5nbDtiJiZiLmRlY29yYXRvcnN8fChiPXtkZWNvcmF0b3JzOltdfSxhLmdsPWIpO3JldHVybiBifTt2YXIgTW89LyguKj8pXFwqKC4qPylcXCooLiopLyxObz0vXmh0dHBzPzpcXC9cXC8oW15cXC9dKj8pXFwuP2NkblxcLmFtcHByb2plY3RcXC5vcmdcXC8/KC4qKS8sT289L14oPzp3d3dcXC58bVxcLnxhbXBcXC4pKy8sUG89LyhbXj8jXSspKFxcP1teI10qKT8oIy4qKT8vO2Z1bmN0aW9uIFFvKGEpe3ZhciBiPVBvLmV4ZWMoYSk7aWYoYilyZXR1cm57Q2g6YlsxXSxxdWVyeTpiWzJdLGZyYWdtZW50OmJbM119fVxuZnVuY3Rpb24gUm8oYSxiKXt2YXIgYz1bb2MudXNlckFnZW50LChuZXcgRGF0ZSkuZ2V0VGltZXpvbmVPZmZzZXQoKSxvYy51c2VyTGFuZ3VhZ2V8fG9jLmxhbmd1YWdlLE1hdGguZmxvb3IoQmIoKS82MC8xRTMpLShiPT09dm9pZCAwPzA6YiksYV0uam9pbihcIipcIiksZDtpZighKGQ9Rm8pKXtmb3IodmFyIGU9QXJyYXkoMjU2KSxmPTA7ZjwyNTY7ZisrKXtmb3IodmFyIGc9ZixrPTA7azw4O2srKylnPWcmMT9nPj4+MV4zOTg4MjkyMzg0Omc+Pj4xO2VbZl09Z31kPWV9Rm89ZDtmb3IodmFyIG09NDI5NDk2NzI5NSxuPTA7bjxjLmxlbmd0aDtuKyspbT1tPj4+OF5Gb1sobV5jLmNoYXJDb2RlQXQobikpJjI1NV07cmV0dXJuKChtXi0xKT4+PjApLnRvU3RyaW5nKDM2KX1cbmZ1bmN0aW9uIFNvKCl7cmV0dXJuIGZ1bmN0aW9uKGEpe3ZhciBiPWFqKEQubG9jYXRpb24uaHJlZiksYz1iLnNlYXJjaC5yZXBsYWNlKFwiP1wiLFwiXCIpLGQ9VWkoYyxcIl9nbFwiLCExLCEwKXx8XCJcIjthLnF1ZXJ5PVRvKGQpfHx7fTt2YXIgZT1WaShiLFwiZnJhZ21lbnRcIiksZjt2YXIgZz0tMTtpZihHYihlLFwiX2dsPVwiKSlnPTQ7ZWxzZXt2YXIgaz1lLmluZGV4T2YoXCImX2dsPVwiKTtrPjAmJihnPWsrMysyKX1pZihnPDApZj12b2lkIDA7ZWxzZXt2YXIgbT1lLmluZGV4T2YoXCImXCIsZyk7Zj1tPDA/ZS5zdWJzdHJpbmcoZyk6ZS5zdWJzdHJpbmcoZyxtKX1hLmZyYWdtZW50PVRvKGZ8fFwiXCIpfHx7fX19ZnVuY3Rpb24gVW8oYSl7dmFyIGI9U28oKSxjPUpvKCk7Yy5kYXRhfHwoYy5kYXRhPXtxdWVyeTp7fSxmcmFnbWVudDp7fX0sYihjLmRhdGEpKTt2YXIgZD17fSxlPWMuZGF0YTtlJiYoRWIoZCxlLnF1ZXJ5KSxhJiZFYihkLGUuZnJhZ21lbnQpKTtyZXR1cm4gZH1cbnZhciBUbz1mdW5jdGlvbihhKXt0cnl7dmFyIGI9Vm8oYSwzKTtpZihiIT09dm9pZCAwKXtmb3IodmFyIGM9e30sZD1iP2Iuc3BsaXQoXCIqXCIpOltdLGU9MDtlKzE8ZC5sZW5ndGg7ZSs9Mil7dmFyIGY9ZFtlXSxnPWZiKGRbZSsxXSk7Y1tmXT1nfWhiKFwiVEFHR0lOR1wiLDYpO3JldHVybiBjfX1jYXRjaChrKXtoYihcIlRBR0dJTkdcIiw4KX19O2Z1bmN0aW9uIFZvKGEsYil7aWYoYSl7dmFyIGM7YTp7Zm9yKHZhciBkPWEsZT0wO2U8MzsrK2Upe3ZhciBmPU1vLmV4ZWMoZCk7aWYoZil7Yz1mO2JyZWFrIGF9ZD1kZWNvZGVVUklDb21wb25lbnQoZCl9Yz12b2lkIDB9dmFyIGc9YztpZihnJiZnWzFdPT09XCIxXCIpe3ZhciBrPWdbM10sbTthOntmb3IodmFyIG49Z1syXSxwPTA7cDxiOysrcClpZihuPT09Um8oayxwKSl7bT0hMDticmVhayBhfW09ITF9aWYobSlyZXR1cm4gaztoYihcIlRBR0dJTkdcIiw3KX19fVxuZnVuY3Rpb24gV28oYSxiLGMsZCxlKXtmdW5jdGlvbiBmKHApe3ZhciBxPXAscj0obmV3IFJlZ0V4cChcIiguKj8pKF58JilcIithK1wiPShbXiZdKikmPyguKilcIikpLmV4ZWMocSksdD1xO2lmKHIpe3ZhciB1PXJbMl0sdj1yWzRdO3Q9clsxXTt2JiYodD10K3Urdil9cD10O3ZhciB3PXAuY2hhckF0KHAubGVuZ3RoLTEpO3AmJnchPT1cIiZcIiYmKHArPVwiJlwiKTtyZXR1cm4gcCtufWQ9ZD09PXZvaWQgMD8hMTpkO2U9ZT09PXZvaWQgMD8hMTplO3ZhciBnPVFvKGMpO2lmKCFnKXJldHVyblwiXCI7dmFyIGs9Zy5xdWVyeXx8XCJcIixtPWcuZnJhZ21lbnR8fFwiXCIsbj1hK1wiPVwiK2I7ZD9tLnN1YnN0cmluZygxKS5sZW5ndGghPT0wJiZlfHwobT1cIiNcIitmKG0uc3Vic3RyaW5nKDEpKSk6az1cIj9cIitmKGsuc3Vic3RyaW5nKDEpKTtyZXR1cm5cIlwiK2cuQ2grayttfVxuZnVuY3Rpb24gWG8oYSxiKXtmdW5jdGlvbiBjKG4scCxxKXt2YXIgcjthOntmb3IodmFyIHQgaW4gbilpZihuLmhhc093blByb3BlcnR5KHQpKXtyPSEwO2JyZWFrIGF9cj0hMX1pZihyKXt2YXIgdSx2PVtdLHc7Zm9yKHcgaW4gbilpZihuLmhhc093blByb3BlcnR5KHcpKXt2YXIgeD1uW3ddO3ghPT12b2lkIDAmJng9PT14JiZ4IT09bnVsbCYmeC50b1N0cmluZygpIT09XCJbb2JqZWN0IE9iamVjdF1cIiYmKHYucHVzaCh3KSx2LnB1c2goZWIoU3RyaW5nKHgpKSkpfXZhciB5PXYuam9pbihcIipcIik7dT1bXCIxXCIsUm8oeSkseV0uam9pbihcIipcIik7ZD8obWIoNCl8fG1iKDEpfHwhcCkmJllvKFwiX2dsXCIsdSxhLHAscSk6Wm8oXCJfZ2xcIix1LGEscCxxKX19dmFyIGQ9KGEudGFnTmFtZXx8XCJcIikudG9VcHBlckNhc2UoKT09PVwiRk9STVwiLGU9TG8oYiwxLGQpLGY9TG8oYiwyLGQpLGc9TG8oYiw0LGQpLGs9TG8oYiwzLGQpO2MoZSwhMSwhMSk7YyhmLCEwLCExKTttYigxKSYmYyhnLCEwLCEwKTtmb3IodmFyIG0gaW4gaylrLmhhc093blByb3BlcnR5KG0pJiZcbiRvKG0sa1ttXSxhKX1mdW5jdGlvbiAkbyhhLGIsYyl7Yy50YWdOYW1lLnRvTG93ZXJDYXNlKCk9PT1cImFcIj9abyhhLGIsYyk6Yy50YWdOYW1lLnRvTG93ZXJDYXNlKCk9PT1cImZvcm1cIiYmWW8oYSxiLGMpfWZ1bmN0aW9uIFpvKGEsYixjLGQsZSl7ZD1kPT09dm9pZCAwPyExOmQ7ZT1lPT09dm9pZCAwPyExOmU7dmFyIGY7aWYoZj1jLmhyZWYpe3ZhciBnO2lmKCEoZz0hbWIoNSl8fGQpKXt2YXIgaz1ELmxvY2F0aW9uLmhyZWYsbT1RbyhjLmhyZWYpLG49UW8oayk7Zz0hKG0mJm4mJm0uQ2g9PT1uLkNoJiZtLnF1ZXJ5PT09bi5xdWVyeSYmbS5mcmFnbWVudCl9Zj1nfWlmKGYpe3ZhciBwPVdvKGEsYixjLmhyZWYsZCxlKTtmYy50ZXN0KHApJiYoYy5ocmVmPXApfX1cbmZ1bmN0aW9uIFlvKGEsYixjLGQsZSl7ZD1kPT09dm9pZCAwPyExOmQ7ZT1lPT09dm9pZCAwPyExOmU7aWYoYyYmYy5hY3Rpb24pe3ZhciBmPShjLm1ldGhvZHx8XCJcIikudG9Mb3dlckNhc2UoKTtpZihmIT09XCJnZXRcInx8ZCl7aWYoZj09PVwiZ2V0XCJ8fGY9PT1cInBvc3RcIil7dmFyIGc9V28oYSxiLGMuYWN0aW9uLGQsZSk7ZmMudGVzdChnKSYmKGMuYWN0aW9uPWcpfX1lbHNle2Zvcih2YXIgaz1jLmNoaWxkTm9kZXN8fFtdLG09ITEsbj0wO248ay5sZW5ndGg7bisrKXt2YXIgcD1rW25dO2lmKHAubmFtZT09PWEpe3Auc2V0QXR0cmlidXRlKFwidmFsdWVcIixiKTttPSEwO2JyZWFrfX1pZighbSl7dmFyIHE9RS5jcmVhdGVFbGVtZW50KFwiaW5wdXRcIik7cS5zZXRBdHRyaWJ1dGUoXCJ0eXBlXCIsXCJoaWRkZW5cIik7cS5zZXRBdHRyaWJ1dGUoXCJuYW1lXCIsYSk7cS5zZXRBdHRyaWJ1dGUoXCJ2YWx1ZVwiLGIpO2MuYXBwZW5kQ2hpbGQocSl9fX19XG5mdW5jdGlvbiBIbyhhKXt0cnl7dmFyIGI7YTp7Zm9yKHZhciBjPWEsZD0xMDA7YyYmZD4wOyl7aWYoYy5ocmVmJiZjLm5vZGVOYW1lLm1hdGNoKC9eYSg/OnJlYSk/JC9pKSl7Yj1jO2JyZWFrIGF9Yz1jLnBhcmVudE5vZGU7ZC0tfWI9bnVsbH12YXIgZT1iO2lmKGUpe3ZhciBmPWUucHJvdG9jb2w7ZiE9PVwiaHR0cDpcIiYmZiE9PVwiaHR0cHM6XCJ8fFhvKGUsZS5ob3N0bmFtZSl9fWNhdGNoKGcpe319ZnVuY3Rpb24gSW8oYSl7dHJ5e2lmKGEuYWN0aW9uKXt2YXIgYj1WaShhaihhLmFjdGlvbiksXCJob3N0XCIpO1hvKGEsYil9fWNhdGNoKGMpe319ZnVuY3Rpb24gYXAoYSxiLGMsZCl7R28oKTt2YXIgZT1jPT09XCJmcmFnbWVudFwiPzI6MTtkPSEhZDtLbyhhLGIsZSxkLCExKTtlPT09MiYmaGIoXCJUQUdHSU5HXCIsMjMpO2QmJmhiKFwiVEFHR0lOR1wiLDI0KX1mdW5jdGlvbiBicChhLGIpe0dvKCk7S28oYSxbWGkoRC5sb2NhdGlvbixcImhvc3RcIiwhMCldLGIsITAsITApfVxuZnVuY3Rpb24gY3AoKXt2YXIgYT1FLmxvY2F0aW9uLmhvc3RuYW1lLGI9Tm8uZXhlYyhFLnJlZmVycmVyKTtpZighYilyZXR1cm4hMTt2YXIgYz1iWzJdLGQ9YlsxXSxlPVwiXCI7aWYoYyl7dmFyIGY9Yy5zcGxpdChcIi9cIiksZz1mWzFdO2U9Zz09PVwic1wiP2RlY29kZVVSSUNvbXBvbmVudChmWzJdKTpkZWNvZGVVUklDb21wb25lbnQoZyl9ZWxzZSBpZihkKXtpZihkLmluZGV4T2YoXCJ4bi0tXCIpPT09MClyZXR1cm4hMTtlPWQucmVwbGFjZSgvLS9nLFwiLlwiKS5yZXBsYWNlKC9cXC5cXC4vZyxcIi1cIil9dmFyIGs9YS5yZXBsYWNlKE9vLFwiXCIpLG09ZS5yZXBsYWNlKE9vLFwiXCIpO3JldHVybiBrPT09bXx8SGIoayxcIi5cIittKX1mdW5jdGlvbiBkcChhLGIpe3JldHVybiBhPT09ITE/ITE6YXx8Ynx8Y3AoKX07dmFyIGVwPVtcIjFcIl0sZnA9e30sZ3A9e307ZnVuY3Rpb24gaHAoYSxiKXtiPWI9PT12b2lkIDA/ITA6Yjt2YXIgYz1pcChhLnByZWZpeCk7aWYoIWZwW2NdKWlmKGpwKGMsYS5wYXRoLGEuZG9tYWluKSl7dmFyIGQ9Z3BbaXAoYS5wcmVmaXgpXTtrcChhLGQ/ZC5pZDp2b2lkIDAsZD9kLnhoOnZvaWQgMCl9ZWxzZXt2YXIgZT1jaihcImF1aWRkY1wiKTtpZihlKWhiKFwiVEFHR0lOR1wiLDE3KSxmcFtjXT1lO2Vsc2UgaWYoYil7dmFyIGY9aXAoYS5wcmVmaXgpLGc9Qm8oKTtscChmLGcsYSk7anAoYyxhLnBhdGgsYS5kb21haW4pfX19ZnVuY3Rpb24ga3AoYSxiLGMpe3ZhciBkPWlwKGEucHJlZml4KSxlPWZwW2RdO2lmKGUpe3ZhciBmPWUuc3BsaXQoXCIuXCIpO2lmKGYubGVuZ3RoPT09Mil7dmFyIGc9TnVtYmVyKGZbMV0pfHwwO2lmKGcpe3ZhciBrPWU7YiYmKGs9ZStcIi5cIitiK1wiLlwiKyhjP2M6TWF0aC5mbG9vcihCYigpLzFFMykpKTtscChkLGssYSxnKjFFMyl9fX19XG5mdW5jdGlvbiBscChhLGIsYyxkKXt2YXIgZT1EbyhiLFwiMVwiLGMuZG9tYWluLGMucGF0aCksZj1FbyhjLGQpO2YuQWI9bXAoKTt1byhhLGUsZil9ZnVuY3Rpb24ganAoYSxiLGMpe3ZhciBkPUNvKGEsYixjLGVwLG1wKCkpO2lmKCFkKXJldHVybiExO25wKGEsZCk7cmV0dXJuITB9ZnVuY3Rpb24gbnAoYSxiKXt2YXIgYz1iLnNwbGl0KFwiLlwiKTtjLmxlbmd0aD09PTU/KGZwW2FdPWMuc2xpY2UoMCwyKS5qb2luKFwiLlwiKSxncFthXT17aWQ6Yy5zbGljZSgyLDQpLmpvaW4oXCIuXCIpLHhoOk51bWJlcihjWzRdKXx8MH0pOmMubGVuZ3RoPT09Mz9ncFthXT17aWQ6Yy5zbGljZSgwLDIpLmpvaW4oXCIuXCIpLHhoOk51bWJlcihjWzJdKXx8MH06ZnBbYV09Yn1mdW5jdGlvbiBpcChhKXtyZXR1cm4oYXx8XCJfZ2NsXCIpK1wiX2F1XCJ9ZnVuY3Rpb24gb3AoYSl7ZnVuY3Rpb24gYigpe3drKGMpJiZhKCl9dmFyIGM9bXAoKTtEayhmdW5jdGlvbigpe2IoKTt3ayhjKXx8RWsoYixjKX0sYyl9XG5mdW5jdGlvbiBwcChhKXt2YXIgYj1VbyghMCksYz1pcChhLnByZWZpeCk7b3AoZnVuY3Rpb24oKXt2YXIgZD1iW2NdO2lmKGQpe25wKGMsZCk7dmFyIGU9TnVtYmVyKGZwW2NdLnNwbGl0KFwiLlwiKVsxXSkqMUUzO2lmKGUpe2hiKFwiVEFHR0lOR1wiLDE2KTt2YXIgZj1FbyhhLGUpO2YuQWI9bXAoKTt2YXIgZz1EbyhkLFwiMVwiLGEuZG9tYWluLGEucGF0aCk7dW8oYyxnLGYpfX19KX1mdW5jdGlvbiBxcChhLGIsYyxkLGUpe2U9ZXx8e307dmFyIGY9ZnVuY3Rpb24oKXt2YXIgZz17fSxrPUNvKGEsZS5wYXRoLGUuZG9tYWluLGVwLG1wKCkpO2smJihnW2FdPWspO3JldHVybiBnfTtvcChmdW5jdGlvbigpe2FwKGYsYixjLGQpfSl9ZnVuY3Rpb24gbXAoKXtyZXR1cm5bXCJhZF9zdG9yYWdlXCIsXCJhZF91c2VyX2RhdGFcIl19O2Z1bmN0aW9uIHJwKGEpe2Zvcih2YXIgYj1bXSxjPUUuY29va2llLnNwbGl0KFwiO1wiKSxkPW5ldyBSZWdFeHAoXCJeXFxcXHMqXCIrKGF8fFwiX2dhY1wiKStcIl8oVUEtXFxcXGQrLVxcXFxkKyk9XFxcXHMqKC4rPylcXFxccyokXCIpLGU9MDtlPGMubGVuZ3RoO2UrKyl7dmFyIGY9Y1tlXS5tYXRjaChkKTtmJiZiLnB1c2goe1FoOmZbMV0sdmFsdWU6ZlsyXSx0aW1lc3RhbXA6TnVtYmVyKGZbMl0uc3BsaXQoXCIuXCIpWzFdKXx8MH0pfWIuc29ydChmdW5jdGlvbihnLGspe3JldHVybiBrLnRpbWVzdGFtcC1nLnRpbWVzdGFtcH0pO3JldHVybiBifVxuZnVuY3Rpb24gc3AoYSxiKXt2YXIgYz1ycChhKSxkPXt9O2lmKCFjfHwhYy5sZW5ndGgpcmV0dXJuIGQ7Zm9yKHZhciBlPTA7ZTxjLmxlbmd0aDtlKyspe3ZhciBmPWNbZV0udmFsdWUuc3BsaXQoXCIuXCIpO2lmKCEoZlswXSE9PVwiMVwifHxiJiZmLmxlbmd0aDwzfHwhYiYmZi5sZW5ndGghPT0zKSYmTnVtYmVyKGZbMV0pKXtkW2NbZV0uUWhdfHwoZFtjW2VdLlFoXT1bXSk7dmFyIGc9e3ZlcnNpb246ZlswXSx0aW1lc3RhbXA6TnVtYmVyKGZbMV0pKjFFMyxhYTpmWzJdfTtiJiZmLmxlbmd0aD4zJiYoZy5sYWJlbHM9Zi5zbGljZSgzKSk7ZFtjW2VdLlFoXS5wdXNoKGcpfX1yZXR1cm4gZH07dmFyIHRwPXt9LHVwPSh0cC5rPXtHYTovXltcXHctXSskL30sdHAuYj17R2E6L15bXFx3LV0rJC8sSmg6ITB9LHRwLmk9e0dhOi9eWzEtOV1cXGQqJC99LHRwLnU9e0dhOi9eWzEtOV1cXGQqJC99LHRwKTt2YXIgdnA9e30seXA9KHZwWzVdPXttazp7Mjp3cH0sYWg6W1wia1wiLFwiaVwiLFwiYlwiLFwidVwiXX0sdnBbNF09e21rOnsyOndwLEdDTDp4cH0sYWg6W1wia1wiLFwiaVwiLFwiYlwiXX0sdnApO2Z1bmN0aW9uIHpwKGEpe3ZhciBiPXlwWzVdO2lmKGIpe3ZhciBjPWEuc3BsaXQoXCIuXCIpWzBdO2lmKGMpe3ZhciBkPWIubWtbY107aWYoZClyZXR1cm4gZChhLDUpfX19XG5mdW5jdGlvbiB3cChhLGIpe3ZhciBjPWEuc3BsaXQoXCIuXCIpO2lmKGMubGVuZ3RoPT09Myl7dmFyIGQ9e30sZT15cFtiXTtpZihlKXtmb3IodmFyIGY9ZS5haCxnPW5hKGNbMl0uc3BsaXQoXCIkXCIpKSxrPWcubmV4dCgpOyFrLmRvbmU7az1nLm5leHQoKSl7dmFyIG09ay52YWx1ZSxuPW1bMF07aWYoZi5pbmRleE9mKG4pIT09LTEpdHJ5e3ZhciBwPWRlY29kZVVSSUNvbXBvbmVudChtLnN1YnN0cmluZygxKSkscT11cFtuXTtxJiYocS5KaD8oZFtuXT1kW25dfHxbXSxkW25dLnB1c2gocCkpOmRbbl09cCl9Y2F0Y2gocil7fX1yZXR1cm4gZH19fVxuZnVuY3Rpb24gQXAoYSxiKXt2YXIgYz15cFs1XTtpZihjKXtmb3IodmFyIGQ9W10sZT1uYShjLmFoKSxmPWUubmV4dCgpOyFmLmRvbmU7Zj1lLm5leHQoKSl7dmFyIGc9Zi52YWx1ZSxrPXVwW2ddO2lmKGspe3ZhciBtPWFbZ107aWYobSE9PXZvaWQgMClpZihrLkpoJiZBcnJheS5pc0FycmF5KG0pKWZvcih2YXIgbj1uYShtKSxwPW4ubmV4dCgpOyFwLmRvbmU7cD1uLm5leHQoKSlkLnB1c2goZW5jb2RlVVJJQ29tcG9uZW50KFwiXCIrZytwLnZhbHVlKSk7ZWxzZSBkLnB1c2goZW5jb2RlVVJJQ29tcG9uZW50KFwiXCIrZyttKSl9fXJldHVybltcIjJcIixifHxcIjFcIixkLmpvaW4oXCIkXCIpXS5qb2luKFwiLlwiKX19ZnVuY3Rpb24geHAoYSl7dmFyIGI9YS5zcGxpdChcIi5cIik7Yi5zaGlmdCgpO3ZhciBjPWIuc2hpZnQoKSxkPWIuc2hpZnQoKSxlPXt9O3JldHVybiBlLms9ZCxlLmk9YyxlLmI9YixlfTt2YXIgQnA9bmV3IE1hcChbWzUsXCJhZF9zdG9yYWdlXCJdLFs0LFtcImFkX3N0b3JhZ2VcIixcImFkX3VzZXJfZGF0YVwiXV1dKTtmdW5jdGlvbiBDcChhKXtpZih5cFs1XSl7Zm9yKHZhciBiPVtdLGM9am8oYSx2b2lkIDAsdm9pZCAwLEJwLmdldCg1KSksZD1uYShjKSxlPWQubmV4dCgpOyFlLmRvbmU7ZT1kLm5leHQoKSl7dmFyIGY9enAoZS52YWx1ZSk7ZiYmKERwKGYpLGIucHVzaChmKSl9cmV0dXJuIGJ9fWZ1bmN0aW9uIEVwKGEsYixjLGQpe2M9Y3x8e307dmFyIGU9em8oYy5kb21haW4sYy5wYXRoKSxmPUFwKGIsZSk7aWYoZil7dmFyIGc9RW8oYyxkLHZvaWQgMCxCcC5nZXQoNSkpO3VvKGEsZixnKX19ZnVuY3Rpb24gRnAoYSxiKXt2YXIgYz1iLkdhO3JldHVybiB0eXBlb2YgYz09PVwiZnVuY3Rpb25cIj9jKGEpOmMudGVzdChhKX1cbmZ1bmN0aW9uIERwKGEpe2Zvcih2YXIgYj1uYShPYmplY3Qua2V5cyhhKSksYz1iLm5leHQoKSxkPXt9OyFjLmRvbmU7ZD17emU6dm9pZCAwfSxjPWIubmV4dCgpKXt2YXIgZT1jLnZhbHVlLGY9YVtlXTtkLnplPXVwW2VdO2QuemU/ZC56ZS5KaD9hW2VdPUFycmF5LmlzQXJyYXkoZik/Zi5maWx0ZXIoZnVuY3Rpb24oZyl7cmV0dXJuIGZ1bmN0aW9uKGspe3JldHVybiBGcChrLGcuemUpfX0oZCkpOnZvaWQgMDp0eXBlb2YgZj09PVwic3RyaW5nXCImJkZwKGYsZC56ZSl8fChhW2VdPXZvaWQgMCk6YVtlXT12b2lkIDB9fTt2YXIgR3A9L15cXHcrJC8sSHA9L15bXFx3LV0rJC8sSXA9e30sSnA9KElwLmF3PVwiX2F3XCIsSXAuZGM9XCJfZGNcIixJcC5nZj1cIl9nZlwiLElwLmdwPVwiX2dwXCIsSXAuZ3M9XCJfZ3NcIixJcC5oYT1cIl9oYVwiLElwLmFnPVwiX2FnXCIsSXAuZ2I9XCJfZ2JcIixJcCk7ZnVuY3Rpb24gS3AoKXtyZXR1cm5bXCJhZF9zdG9yYWdlXCIsXCJhZF91c2VyX2RhdGFcIl19ZnVuY3Rpb24gTHAoYSl7cmV0dXJuIW1iKDEyKXx8d2soYSl9ZnVuY3Rpb24gTXAoYSxiKXtmdW5jdGlvbiBjKCl7dmFyIGQ9THAoYik7ZCYmYSgpO3JldHVybiBkfURrKGZ1bmN0aW9uKCl7YygpfHxFayhjLGIpfSxiKX1mdW5jdGlvbiBOcChhKXtyZXR1cm4gT3AoYSkubWFwKGZ1bmN0aW9uKGIpe3JldHVybiBiLmFhfSl9ZnVuY3Rpb24gUHAoYSl7cmV0dXJuIFFwKGEpLmZpbHRlcihmdW5jdGlvbihiKXtyZXR1cm4gYi5hYX0pLm1hcChmdW5jdGlvbihiKXtyZXR1cm4gYi5hYX0pfVxuZnVuY3Rpb24gUXAoYSl7dmFyIGI9UnAoYS5wcmVmaXgpLGM9U3AoXCJnYlwiLGIpLGQ9U3AoXCJhZ1wiLGIpO2lmKCFkfHwhYylyZXR1cm5bXTt2YXIgZT1mdW5jdGlvbihrKXtyZXR1cm4gZnVuY3Rpb24obSl7bS50eXBlPWs7cmV0dXJuIG19fSxmPU9wKGMpLm1hcChlKFwiZ2JcIikpLGc9KG1iKDcpP1RwKGQpOltdKS5tYXAoZShcImFnXCIpKTtyZXR1cm4gZi5jb25jYXQoZykuc29ydChmdW5jdGlvbihrLG0pe3JldHVybiBtLnRpbWVzdGFtcC1rLnRpbWVzdGFtcH0pfWZ1bmN0aW9uIFVwKGEsYixjLGQsZSxmKXt2YXIgZz1yYihhLGZ1bmN0aW9uKGspe3JldHVybiBrLmFhPT09Y30pO2c/KGcudGltZXN0YW1wPGQmJihnLnRpbWVzdGFtcD1kLGcuTWo9ZiksZy5sYWJlbHM9VnAoZy5sYWJlbHN8fFtdLGV8fFtdKSk6YS5wdXNoKHt2ZXJzaW9uOmIsYWE6Yyx0aW1lc3RhbXA6ZCxsYWJlbHM6ZSxNajpmfSl9XG5mdW5jdGlvbiBUcChhKXtmb3IodmFyIGI9Q3AoYSl8fFtdLGM9W10sZD1uYShiKSxlPWQubmV4dCgpOyFlLmRvbmU7ZT1kLm5leHQoKSl7dmFyIGY9ZS52YWx1ZSxnPWYsaz1nLmssbT1nLmIsbj1XcChmKTtpZihuKXt2YXIgcD12b2lkIDA7bWIoMTMpJiYocD1mLnUpO1VwKGMsXCIyXCIsayxuLG18fFtdLHApfX1yZXR1cm4gYy5zb3J0KGZ1bmN0aW9uKHEscil7cmV0dXJuIHIudGltZXN0YW1wLXEudGltZXN0YW1wfSl9ZnVuY3Rpb24gT3AoYSl7Zm9yKHZhciBiPVtdLGM9am8oYSxFLmNvb2tpZSx2b2lkIDAsS3AoKSksZD1uYShjKSxlPWQubmV4dCgpOyFlLmRvbmU7ZT1kLm5leHQoKSl7dmFyIGY9WHAoZS52YWx1ZSk7aWYoZiE9bnVsbCl7dmFyIGc9ZjtVcChiLGcudmVyc2lvbixnLmFhLGcudGltZXN0YW1wLGcubGFiZWxzKX19Yi5zb3J0KGZ1bmN0aW9uKGssbSl7cmV0dXJuIG0udGltZXN0YW1wLWsudGltZXN0YW1wfSk7cmV0dXJuIFlwKGIpfVxuZnVuY3Rpb24gVnAoYSxiKXtpZighYS5sZW5ndGgpcmV0dXJuIGI7aWYoIWIubGVuZ3RoKXJldHVybiBhO3ZhciBjPXt9O3JldHVybiBhLmNvbmNhdChiKS5maWx0ZXIoZnVuY3Rpb24oZCl7cmV0dXJuIGMuaGFzT3duUHJvcGVydHkoZCk/ITE6Y1tkXT0hMH0pfWZ1bmN0aW9uIFJwKGEpe3JldHVybiBhJiZ0eXBlb2YgYT09PVwic3RyaW5nXCImJmEubWF0Y2goR3ApP2E6XCJfZ2NsXCJ9XG5mdW5jdGlvbiBacChhLGIpe3ZhciBjPW1iKDcpLGQ9YWooYSksZT1WaShkLFwicXVlcnlcIiwhMSx2b2lkIDAsXCJnY2xpZFwiKSxmPVZpKGQsXCJxdWVyeVwiLCExLHZvaWQgMCxcImdjbHNyY1wiKSxnPVZpKGQsXCJxdWVyeVwiLCExLHZvaWQgMCxcIndicmFpZFwiKTtnPU5iKGcpO3ZhciBrO2MmJihrPVZpKGQsXCJxdWVyeVwiLCExLHZvaWQgMCxcImdicmFpZFwiKSk7dmFyIG09VmkoZCxcInF1ZXJ5XCIsITEsdm9pZCAwLFwiZ2FkX3NvdXJjZVwiKSxuPVZpKGQsXCJxdWVyeVwiLCExLHZvaWQgMCxcImRjbGlkXCIpO2lmKGImJighZXx8IWZ8fCFnfHxjJiYhaykpe3ZhciBwPWQuaGFzaC5yZXBsYWNlKFwiI1wiLFwiXCIpO2U9ZXx8VWkocCxcImdjbGlkXCIsITEpO2Y9Znx8VWkocCxcImdjbHNyY1wiLCExKTtnPWd8fFVpKHAsXCJ3YnJhaWRcIiwhMSk7YyYmKGs9a3x8VWkocCxcImdicmFpZFwiLCExKSk7bT1tfHxVaShwLFwiZ2FkX3NvdXJjZVwiLCExKX1yZXR1cm4gJHAoZSxmLG4sZyxrLG0pfVxuZnVuY3Rpb24gYXEoKXtyZXR1cm4gWnAoRC5sb2NhdGlvbi5ocmVmLCEwKX1cbmZ1bmN0aW9uICRwKGEsYixjLGQsZSxmKXt2YXIgZz17fSxrPWZ1bmN0aW9uKG0sbil7Z1tuXXx8KGdbbl09W10pO2dbbl0ucHVzaChtKX07Zy5nY2xpZD1hO2cuZ2Nsc3JjPWI7Zy5kY2xpZD1jO2lmKGEhPT12b2lkIDAmJmEubWF0Y2goSHApKXN3aXRjaChiKXtjYXNlIHZvaWQgMDprKGEsXCJhd1wiKTticmVhaztjYXNlIFwiYXcuZHNcIjprKGEsXCJhd1wiKTtrKGEsXCJkY1wiKTticmVhaztjYXNlIFwiZHNcIjprKGEsXCJkY1wiKTticmVhaztjYXNlIFwiM3AuZHNcIjprKGEsXCJkY1wiKTticmVhaztjYXNlIFwiZ2ZcIjprKGEsXCJnZlwiKTticmVhaztjYXNlIFwiaGFcIjprKGEsXCJoYVwiKX1jJiZrKGMsXCJkY1wiKTtkIT09dm9pZCAwJiZIcC50ZXN0KGQpJiYoZy53YnJhaWQ9ZCxrKGQsXCJnYlwiKSk7bWIoNykmJmUhPT12b2lkIDAmJkhwLnRlc3QoZSkmJihnLmdicmFpZD1lLGsoZSxcImFnXCIpKTtmIT09dm9pZCAwJiZIcC50ZXN0KGYpJiYoZy5nYWRfc291cmNlPWYsayhmLFwiZ3NcIikpO3JldHVybiBnfVxuZnVuY3Rpb24gYnEoYSl7dmFyIGI9YXEoKTtpZihtYig2KSl7Zm9yKHZhciBjPSEwLGQ9bmEoT2JqZWN0LmtleXMoYikpLGU9ZC5uZXh0KCk7IWUuZG9uZTtlPWQubmV4dCgpKWlmKGJbZS52YWx1ZV0hPT12b2lkIDApe2M9ITE7YnJlYWt9YyYmKGI9WnAoRC5kb2N1bWVudC5yZWZlcnJlciwhMSksbWIoMTQpJiYoYi5nYWRfc291cmNlPXZvaWQgMCkpfWNxKGIsITEsYSl9XG5mdW5jdGlvbiBjcShhLGIsYyxkLGUpe2M9Y3x8e307ZT1lfHxbXTt2YXIgZj1ScChjLnByZWZpeCksZz1kfHxCYigpLGs9TWF0aC5yb3VuZChnLzFFMyksbT1LcCgpLG49ITEscD0hMSxxPWZ1bmN0aW9uKCl7aWYoTHAobSkpe3ZhciByPUVvKGMsZywhMCk7ci5BYj1tO2Zvcih2YXIgdD1mdW5jdGlvbihGLE8pe3ZhciBOPVNwKEYsZik7TiYmKHVvKE4sTyxyKSxGIT09XCJnYlwiJiYobj0hMCkpfSx1PWZ1bmN0aW9uKEYpe3ZhciBPPVtcIkdDTFwiLGssRl07ZS5sZW5ndGg+MCYmTy5wdXNoKGUuam9pbihcIi5cIikpO3JldHVybiBPLmpvaW4oXCIuXCIpfSx2PW5hKFtcImF3XCIsXCJkY1wiLFwiZ2ZcIixcImhhXCIsXCJncFwiXSksdz12Lm5leHQoKTshdy5kb25lO3c9di5uZXh0KCkpe3ZhciB4PXcudmFsdWU7YVt4XSYmdCh4LHUoYVt4XVswXSkpfWlmKCFuJiZhLmdiKXt2YXIgeT1hLmdiWzBdLEE9U3AoXCJnYlwiLGYpOyFiJiZPcChBKS5zb21lKGZ1bmN0aW9uKEYpe3JldHVybiBGLmFhPT09eSYmRi5sYWJlbHMmJlxuRi5sYWJlbHMubGVuZ3RoPjB9KXx8dChcImdiXCIsdSh5KSl9fWlmKCFwJiZtYig3KSYmYS5nYnJhaWQmJkxwKFwiYWRfc3RvcmFnZVwiKSYmKHA9ITAsIW4pKXt2YXIgQj1hLmdicmFpZCxDPVNwKFwiYWdcIixmKTtpZihifHwhKG1iKDcpP1RwKEMpOltdKS5zb21lKGZ1bmN0aW9uKEYpe3JldHVybiBGLmFhPT09QiYmRi5sYWJlbHMmJkYubGFiZWxzLmxlbmd0aD4wfSkpe3ZhciBIPXt9LEk9KEguaz1CLEguaT1cIlwiK2ssSC5iPWUsSCk7RXAoQyxJLGMsZyl9fWRxKGEsZixnLGMpfTtEayhmdW5jdGlvbigpe3EoKTtMcChtKXx8RWsocSxtKX0sbSl9XG5mdW5jdGlvbiBkcShhLGIsYyxkKXtpZihhLmdhZF9zb3VyY2UhPT12b2lkIDAmJkxwKFwiYWRfc3RvcmFnZVwiKSl7dmFyIGU9YS5nYWRfc291cmNlLGY9U3AoXCJnc1wiLGIpO2lmKGYpe3ZhciBnPU1hdGgucm91bmQoKEJiKCktKE9jKCl8fDApKS8xRTMpLGs7aWYobWIoMTMpKXt2YXIgbSxuPVN0cmluZyxwPUQubG9jYXRpb24uaG9zdG5hbWUscT1ELmxvY2F0aW9uLnBhdGhuYW1lLHI9cD1kaihwKTtyLnNwbGl0KFwiLlwiKS5sZW5ndGg+MiYmKHI9ci5yZXBsYWNlKC9eKHd3d1swLTldKnx3ZWJ8ZnRwfHdhcHxob21lfG18d3xhbXB8bW9iaWxlKVxcLi8sXCJcIikpO3A9cjtxPWRqKHEpO3ZhciB0PXEuc3BsaXQoXCI7XCIpWzBdO3Q9dC5yZXBsYWNlKC9cXC8oYXJ8c2xwfHdlYnxpbmRleCk/XFwvPyQvLFwiXCIpO209bihobygoXCJcIitwK3QpLnRvTG93ZXJDYXNlKCkpKTt2YXIgdT17fTtrPSh1Lms9ZSx1Lmk9XCJcIitnLHUudT1tLHUpfWVsc2V7dmFyIHY9e307az0odi5rPWUsdi5pPVwiXCIrZyx2KX1FcChmLGssXG5kLGMpfX19ZnVuY3Rpb24gZXEoYSxiKXt2YXIgYz1VbyghMCk7TXAoZnVuY3Rpb24oKXtmb3IodmFyIGQ9UnAoYi5wcmVmaXgpLGU9MDtlPGEubGVuZ3RoOysrZSl7dmFyIGY9YVtlXTtpZihKcFtmXSE9PXZvaWQgMCl7dmFyIGc9U3AoZixkKSxrPWNbZ107aWYoayl7dmFyIG09TWF0aC5taW4oZnEoayksQmIoKSksbjtiOntmb3IodmFyIHA9bSxxPWpvKGcsRS5jb29raWUsdm9pZCAwLEtwKCkpLHI9MDtyPHEubGVuZ3RoOysrcilpZihmcShxW3JdKT5wKXtuPSEwO2JyZWFrIGJ9bj0hMX1pZighbil7dmFyIHQ9RW8oYixtLCEwKTt0LkFiPUtwKCk7dW8oZyxrLHQpfX19fWNxKCRwKGMuZ2NsaWQsYy5nY2xzcmMpLCExLGIpfSxLcCgpKX1cbmZ1bmN0aW9uIGdxKGEpe3ZhciBiPVtdO21iKDcpJiZiLnB1c2goXCJhZ1wiKTtpZihiLmxlbmd0aCE9PTApe3ZhciBjPVVvKCEwKSxkPVJwKGEucHJlZml4KTtNcChmdW5jdGlvbigpe2Zvcih2YXIgZT0wO2U8Yi5sZW5ndGg7KytlKXt2YXIgZj1TcChiW2VdLGQpO2lmKGYpe3ZhciBnPWNbZl07aWYoZyl7dmFyIGs9enAoZyk7aWYoayl7dmFyIG09V3Aoayk7bXx8KG09QmIoKSk7dmFyIG47YTp7Zm9yKHZhciBwPW0scT1DcChmKSxyPTA7cjxxLmxlbmd0aDsrK3IpaWYoV3AocVtyXSk+cCl7bj0hMDticmVhayBhfW49ITF9aWYobilicmVhaztrLmk9XCJcIitNYXRoLnJvdW5kKG0vMUUzKTtFcChmLGssYSxtKX19fX19LFtcImFkX3N0b3JhZ2VcIl0pfX1mdW5jdGlvbiBTcChhLGIpe3ZhciBjPUpwW2FdO2lmKGMhPT12b2lkIDApcmV0dXJuIGIrY31cbmZ1bmN0aW9uIGZxKGEpe3JldHVybiBocShhLnNwbGl0KFwiLlwiKSkubGVuZ3RoIT09MD8oTnVtYmVyKGEuc3BsaXQoXCIuXCIpWzFdKXx8MCkqMUUzOjB9ZnVuY3Rpb24gV3AoYSl7cmV0dXJuIGE/KE51bWJlcihhLmkpfHwwKSoxRTM6MH1mdW5jdGlvbiBYcChhKXt2YXIgYj1ocShhLnNwbGl0KFwiLlwiKSk7cmV0dXJuIGIubGVuZ3RoPT09MD9udWxsOnt2ZXJzaW9uOmJbMF0sYWE6YlsyXSx0aW1lc3RhbXA6KE51bWJlcihiWzFdKXx8MCkqMUUzLGxhYmVsczpiLnNsaWNlKDMpfX1mdW5jdGlvbiBocShhKXtyZXR1cm4gYS5sZW5ndGg8M3x8YVswXSE9PVwiR0NMXCImJmFbMF0hPT1cIjFcInx8IS9eXFxkKyQvLnRlc3QoYVsxXSl8fCFIcC50ZXN0KGFbMl0pP1tdOmF9XG5mdW5jdGlvbiBpcShhLGIsYyxkLGUpe2lmKEFycmF5LmlzQXJyYXkoYikmJmlvKEQpKXt2YXIgZj1ScChlKSxnPWZ1bmN0aW9uKCl7Zm9yKHZhciBrPXt9LG09MDttPGEubGVuZ3RoOysrbSl7dmFyIG49U3AoYVttXSxmKTtpZihuKXt2YXIgcD1qbyhuLEUuY29va2llLHZvaWQgMCxLcCgpKTtwLmxlbmd0aCYmKGtbbl09cC5zb3J0KClbcC5sZW5ndGgtMV0pfX1yZXR1cm4ga307TXAoZnVuY3Rpb24oKXthcChnLGIsYyxkKX0sS3AoKSl9fVxuZnVuY3Rpb24ganEoYSxiLGMsZCl7aWYoQXJyYXkuaXNBcnJheShhKSYmaW8oRCkpe3ZhciBlPVtdO21iKDcpJiZlLnB1c2goXCJhZ1wiKTtpZihlLmxlbmd0aCE9PTApe3ZhciBmPVJwKGQpLGc9ZnVuY3Rpb24oKXtmb3IodmFyIGs9e30sbT0wO208ZS5sZW5ndGg7KyttKXt2YXIgbj1TcChlW21dLGYpO2lmKCFuKXJldHVybnt9O3ZhciBwPUNwKG4pO2lmKHAubGVuZ3RoKXt2YXIgcT1wLnNvcnQoZnVuY3Rpb24ocix0KXtyZXR1cm4gV3AodCktV3Aocil9KVswXTtrW25dPUFwKHEpfX1yZXR1cm4ga307TXAoZnVuY3Rpb24oKXthcChnLGEsYixjKX0sW1wiYWRfc3RvcmFnZVwiXSl9fX1mdW5jdGlvbiBZcChhKXtyZXR1cm4gYS5maWx0ZXIoZnVuY3Rpb24oYil7cmV0dXJuIEhwLnRlc3QoYi5hYSl9KX1cbmZ1bmN0aW9uIGtxKGEsYil7aWYoaW8oRCkpe2Zvcih2YXIgYz1ScChiLnByZWZpeCksZD17fSxlPTA7ZTxhLmxlbmd0aDtlKyspSnBbYVtlXV0mJihkW2FbZV1dPUpwW2FbZV1dKTtNcChmdW5jdGlvbigpe3ooZCxmdW5jdGlvbihmLGcpe3ZhciBrPWpvKGMrZyxFLmNvb2tpZSx2b2lkIDAsS3AoKSk7ay5zb3J0KGZ1bmN0aW9uKHQsdSl7cmV0dXJuIGZxKHUpLWZxKHQpfSk7aWYoay5sZW5ndGgpe3ZhciBtPWtbMF0sbj1mcShtKSxwPWhxKG0uc3BsaXQoXCIuXCIpKS5sZW5ndGghPT0wP20uc3BsaXQoXCIuXCIpLnNsaWNlKDMpOltdLHE9e30scjtyPWhxKG0uc3BsaXQoXCIuXCIpKS5sZW5ndGghPT0wP20uc3BsaXQoXCIuXCIpWzJdOnZvaWQgMDtxW2ZdPVtyXTtjcShxLCEwLGIsbixwKX19KX0sS3AoKSl9fVxuZnVuY3Rpb24gbHEoYSl7dmFyIGI9W10sYz1bXTttYig3KSYmKGIucHVzaChcImFnXCIpLGMucHVzaChcImdicmFpZFwiKSk7Yi5sZW5ndGghPT0wJiZNcChmdW5jdGlvbigpe2Zvcih2YXIgZD1ScChhLnByZWZpeCksZT0wO2U8Yi5sZW5ndGg7KytlKXt2YXIgZj1TcChiW2VdLGQpO2lmKCFmKWJyZWFrO3ZhciBnPUNwKGYpO2lmKGcubGVuZ3RoKXt2YXIgaz1nLnNvcnQoZnVuY3Rpb24ocSxyKXtyZXR1cm4gV3AociktV3AocSl9KVswXSxtPVdwKGspLG49ay5iLHA9e307cFtjW2VdXT1rLms7Y3EocCwhMCxhLG0sbil9fX0sW1wiYWRfc3RvcmFnZVwiXSl9ZnVuY3Rpb24gbXEoYSxiKXtmb3IodmFyIGM9MDtjPGIubGVuZ3RoOysrYylpZihhW2JbY11dKXJldHVybiEwO3JldHVybiExfVxuZnVuY3Rpb24gbnEoYSl7ZnVuY3Rpb24gYihlLGYsZyl7ZyYmKGVbZl09Zyl9aWYoQWsoKSl7dmFyIGM9YXEoKTtpZihtcShjLGEpKXt2YXIgZD17fTtiKGQsXCJnY2xpZFwiLGMuZ2NsaWQpO2IoZCxcImRjbGlkXCIsYy5kY2xpZCk7YihkLFwiZ2Nsc3JjXCIsYy5nY2xzcmMpO2IoZCxcIndicmFpZFwiLGMud2JyYWlkKTttYig3KSYmYihkLFwiZ2JyYWlkXCIsYy5nYnJhaWQpO2JwKGZ1bmN0aW9uKCl7cmV0dXJuIGR9LDMpO2JwKGZ1bmN0aW9uKCl7dmFyIGU9e307cmV0dXJuIGUuX3VwPVwiMVwiLGV9LDEpfX19XG5mdW5jdGlvbiBvcShhKXtpZighbWIoMSkpcmV0dXJuIG51bGw7dmFyIGI9VW8oITApLmdhZF9zb3VyY2U7aWYoYiE9bnVsbClyZXR1cm4gRC5sb2NhdGlvbi5oYXNoPVwiXCIsYjtpZihtYigyKSl7dmFyIGM9YWooRC5sb2NhdGlvbi5ocmVmKTtiPVZpKGMsXCJxdWVyeVwiLCExLHZvaWQgMCxcImdhZF9zb3VyY2VcIik7aWYoYiE9bnVsbClyZXR1cm4gYjt2YXIgZD1hcSgpO2lmKG1xKGQsYSkpcmV0dXJuXCIwXCJ9cmV0dXJuIG51bGx9ZnVuY3Rpb24gcHEoYSl7dmFyIGI9b3EoYSk7YiE9bnVsbCYmYnAoZnVuY3Rpb24oKXt2YXIgYz17fTtyZXR1cm4gYy5nYWRfc291cmNlPWIsY30sNCl9XG5mdW5jdGlvbiBxcShhLGIsYyl7dmFyIGQ9W107aWYoYi5sZW5ndGg9PT0wKXJldHVybiBkO2Zvcih2YXIgZT17fSxmPTA7ZjxiLmxlbmd0aDtmKyspe3ZhciBnPWJbZl0saz1nLnR5cGU/Zy50eXBlOlwiZ2NsXCI7KGcubGFiZWxzfHxbXSkuaW5kZXhPZihjKT09PS0xPyhhLnB1c2goMCksZVtrXXx8ZC5wdXNoKGcpKTphLnB1c2goMSk7ZVtrXT0hMH1yZXR1cm4gZH1mdW5jdGlvbiBycShhLGIsYyxkKXt2YXIgZT1bXTtjPWN8fHt9O2lmKCFMcChLcCgpKSlyZXR1cm4gZTt2YXIgZj1PcChhKSxnPXFxKGUsZixiKTtpZihnLmxlbmd0aCYmIWQpZm9yKHZhciBrPW5hKGcpLG09ay5uZXh0KCk7IW0uZG9uZTttPWsubmV4dCgpKXt2YXIgbj1tLnZhbHVlLHA9bi50aW1lc3RhbXAscT1bbi52ZXJzaW9uLE1hdGgucm91bmQocC8xRTMpLG4uYWFdLmNvbmNhdChuLmxhYmVsc3x8W10sW2JdKS5qb2luKFwiLlwiKSxyPUVvKGMscCwhMCk7ci5BYj1LcCgpO3VvKGEscSxyKX1yZXR1cm4gZX1cbmZ1bmN0aW9uIHNxKGEsYil7dmFyIGM9W107Yj1ifHx7fTt2YXIgZD1RcChiKSxlPXFxKGMsZCxhKTtpZihlLmxlbmd0aClmb3IodmFyIGY9bmEoZSksZz1mLm5leHQoKTshZy5kb25lO2c9Zi5uZXh0KCkpe3ZhciBrPWcudmFsdWUsbT1ScChiLnByZWZpeCksbj1TcChrLnR5cGUsbSk7aWYoIW4pYnJlYWs7dmFyIHA9ayxxPXAudmVyc2lvbixyPXAuYWEsdD1wLmxhYmVscyx1PXAudGltZXN0YW1wLHY9TWF0aC5yb3VuZCh1LzFFMyk7aWYoay50eXBlPT09XCJhZ1wiKXt2YXIgdz17fSx4PSh3Lms9cix3Lmk9XCJcIit2LHcuYj0odHx8W10pLmNvbmNhdChbYV0pLHcpO0VwKG4seCxiLHUpfWVsc2UgaWYoay50eXBlPT09XCJnYlwiKXt2YXIgeT1bcSx2LHJdLmNvbmNhdCh0fHxbXSxbYV0pLmpvaW4oXCIuXCIpLEE9RW8oYix1LCEwKTtBLkFiPUtwKCk7dW8obix5LEEpfX1yZXR1cm4gY31cbmZ1bmN0aW9uIHRxKGEsYil7dmFyIGM9UnAoYiksZD1TcChhLGMpO2lmKCFkKXJldHVybiAwO3ZhciBlO2U9YT09PVwiYWdcIj9tYig3KT9UcChkKTpbXTpPcChkKTtmb3IodmFyIGY9MCxnPTA7ZzxlLmxlbmd0aDtnKyspZj1NYXRoLm1heChmLGVbZ10udGltZXN0YW1wKTtyZXR1cm4gZn1mdW5jdGlvbiB1cShhKXtmb3IodmFyIGI9MCxjPW5hKE9iamVjdC5rZXlzKGEpKSxkPWMubmV4dCgpOyFkLmRvbmU7ZD1jLm5leHQoKSlmb3IodmFyIGU9YVtkLnZhbHVlXSxmPTA7ZjxlLmxlbmd0aDtmKyspYj1NYXRoLm1heChiLE51bWJlcihlW2ZdLnRpbWVzdGFtcCkpO3JldHVybiBifWZ1bmN0aW9uIHZxKGEsYil7dmFyIGM9TWF0aC5tYXgodHEoXCJhd1wiLGEpLHVxKExwKEtwKCkpP3NwKCk6e30pKSxkPU1hdGgubWF4KHRxKFwiZ2JcIixhKSx1cShMcChLcCgpKT9zcChcIl9nYWNfZ2JcIiwhMCk6e30pKTttYig3KSYmYiYmKGQ9TWF0aC5tYXgoZCx0cShcImFnXCIsYSkpKTtyZXR1cm4gZD5jfTtcbnZhciB3cT1mdW5jdGlvbihhLGIsYyl7dmFyIGQ9aWkuam9pbmVkX2F1aWQ9aWkuam9pbmVkX2F1aWR8fHt9LGU9KGM/YXx8XCJfZ2NsXCI6XCJcIikrXCIuXCIrYjtpZihkW2VdKXJldHVybiEwO2RbZV09ITA7cmV0dXJuITF9LHlxPWZ1bmN0aW9uKCl7dmFyIGE9YWooRC5sb2NhdGlvbi5ocmVmKSxiPXZvaWQgMCxjPXZvaWQgMCxkPVZpKGEsXCJxdWVyeVwiLCExLHZvaWQgMCxcImdhZF9zb3VyY2VcIiksZT14cShhKTtkJiZlPyhiPWQsYz0xKTpkPyhiPWQsYz0yKTplJiYoYj1lLGM9Myk7cmV0dXJue0RjOmIsRWo6Y319LHhxPWZ1bmN0aW9uKGEpe3ZhciBiPWEuaGFzaC5yZXBsYWNlKFwiI1wiLFwiXCIpLGM9dm9pZCAwO2lmKFEoODIpKXt2YXIgZD1iLm1hdGNoKHpxKTtjPWQ/ZFsxXTp2b2lkIDB9Yz09PXZvaWQgMCYmKGM9VWkoYixcImdhZF9zb3VyY2VcIiwhMSkpO3JldHVybiBjfSxBcT1mdW5jdGlvbigpe3ZhciBhPWFqKEQubG9jYXRpb24uaHJlZiksYj1WaShhLFwicXVlcnlcIiwhMSx2b2lkIDAsXCJnYWRfc291cmNlXCIpO1xuYj09PXZvaWQgMCYmKGI9eHEoYSkpO3JldHVybiBifSxCcT1mdW5jdGlvbigpe3ZhciBhPWFqKEQubG9jYXRpb24uaHJlZikuc2VhcmNoLnJlcGxhY2UoXCI/XCIsXCJcIik7cmV0dXJuIFVpKGEsXCJnYWRcIiwhMSwhMCk9PT1cIjFcIn0sQ3E9ZnVuY3Rpb24oKXt2YXIgYT0kbSghMSk9PT0xP0QudG9wLmxvY2F0aW9uLmhyZWY6RC5sb2NhdGlvbi5ocmVmO3JldHVybiBhPWEucmVwbGFjZSgvW1xcPyNdLiokLyxcIlwiKX0sRHE9ZnVuY3Rpb24oYSl7dmFyIGI9W107eihhLGZ1bmN0aW9uKGMsZCl7ZD1ZcChkKTtmb3IodmFyIGU9W10sZj0wO2Y8ZC5sZW5ndGg7ZisrKWUucHVzaChkW2ZdLmFhKTtlLmxlbmd0aCYmYi5wdXNoKGMrXCI6XCIrZS5qb2luKFwiLFwiKSl9KTtyZXR1cm4gYi5qb2luKFwiO1wiKX0sRnE9ZnVuY3Rpb24oYSxiLGMpe2lmKGE9PT1cImF3XCJ8fGE9PT1cImRjXCJ8fGE9PT1cImdiXCIpe3ZhciBkPWNqKFwiZ2NsXCIrYSk7aWYoZClyZXR1cm4gZC5zcGxpdChcIi5cIil9dmFyIGU9UnAoYik7aWYoZT09PVwiX2djbFwiKXt2YXIgZj1cbiFXKEVxKCkpJiZjLGc7Zz1hcSgpW2FdfHxbXTtpZihnLmxlbmd0aD4wKXJldHVybiBmP1tcIjBcIl06Z312YXIgaz1TcChhLGUpO3JldHVybiBrP05wKGspOltdfSxHcT1mdW5jdGlvbihhKXt2YXIgYj1FcSgpO2NsKGZ1bmN0aW9uKCl7YSgpO1coYil8fEVrKGEsYil9LGIpfSxFcT1mdW5jdGlvbigpe3JldHVybltULmcuUCxULmcuT119LEhxPS9eKHd3d1xcLik/Z29vZ2xlKFxcLmNvbT8pPyhcXC5bYS16XXsyfXQ/KT8kLyxJcT0vXnd3dy5nb29nbGVhZHNlcnZpY2VzLmNvbSQvLHpxPS9eZ2FkX3NvdXJjZVtfPV0oXFxkKykkLyxKcT1mdW5jdGlvbihhLGIpe3JldHVybiBGcShcImF3XCIsYSxiKX0sS3E9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gRnEoXCJkY1wiLGEsYil9LE1xPWZ1bmN0aW9uKGEsYixjLGQsZSl7dmFyIGY9UnAoYS5wcmVmaXgpO2lmKCFRKDQwKXx8THEoZiwhMCkpe3ZhciBnPWFxKCksaz1bXSxtPWMmJkVuKGMpLG49Zy5nY2xpZCxwPWcuZGNsaWQscT1nLmdjbHNyY3x8XCJhd1wiLHI9QnEoKSxcbnQsdTtpZihRKDY5KSl7dmFyIHY9eXEoKTt0PXYuRGM7dT12LkVqfWVsc2UgdD1BcSgpOyFufHxxIT09XCJhdy5kc1wiJiZxIT09XCJhd1wiJiZxIT09XCJkc1wiJiZxIT09XCIzcC5kc1wifHxrLnB1c2goe2FhOm4sRmU6cX0pO3AmJmsucHVzaCh7YWE6cCxGZTpcImRzXCJ9KTtrLmxlbmd0aD09PTImJk0oMTQ3KTtrLmxlbmd0aD09PTAmJmcud2JyYWlkJiZrLnB1c2goe2FhOmcud2JyYWlkLEZlOlwiZ2JcIn0pO2subGVuZ3RoPT09MCYmcT09PVwiYXcuZHNcIiYmay5wdXNoKHthYTpcIlwiLEZlOlwiYXcuZHNcIn0pO0dxKGZ1bmN0aW9uKCl7dmFyIHc9VyhFcSgpKTtpZih3KXtocChhKTt2YXIgeD1bXSx5PXc/ZnBbaXAoYS5wcmVmaXgpXTp2b2lkIDA7eSYmeC5wdXNoKFwiYXVpZD1cIit5KTtpZihXKFQuZy5PKSl7ZSYmeC5wdXNoKFwidXNlcklkPVwiK2UpO3ZhciBBPWVvKFpuLlRnKTtpZihBPT09dm9pZCAwKWNvKFpuLlVnLCEwKTtlbHNle3ZhciBCPWVvKFpuLnNlKTt4LnB1c2goXCJnYV91aWQ9XCIrQitcIi5cIitBKX19dmFyIEM9XG5FLnJlZmVycmVyP1ZpKGFqKEUucmVmZXJyZXIpLFwiaG9zdFwiKTpcIlwiLEg9d3x8IWQ/azpbXTtILmxlbmd0aD09PTAmJihIcS50ZXN0KEMpfHxJcS50ZXN0KEMpKSYmSC5wdXNoKHthYTpcIlwiLEZlOlwiXCJ9KTtpZihILmxlbmd0aCE9PTB8fHJ8fHQhPT12b2lkIDApe0MmJngucHVzaChcInJlZj1cIitlbmNvZGVVUklDb21wb25lbnQoQykpO3ZhciBJPUNxKCk7eC5wdXNoKFwidXJsPVwiK2VuY29kZVVSSUNvbXBvbmVudChJKSk7eC5wdXNoKFwidGZ0PVwiK0JiKCkpO3ZhciBGPU9jKCk7RiE9PXZvaWQgMCYmeC5wdXNoKFwidGZkPVwiK01hdGgucm91bmQoRikpO3ZhciBPPSRtKCEwKTt4LnB1c2goXCJmcm09XCIrTyk7ciYmeC5wdXNoKFwiZ2FkPTFcIik7dCE9PXZvaWQgMCYmeC5wdXNoKFwiZ2FkX3NvdXJjZT1cIitlbmNvZGVVUklDb21wb25lbnQodCkpO3UhPT12b2lkIDAmJngucHVzaChcImdhZF9zb3VyY2Vfc3JjPVwiK2VuY29kZVVSSUNvbXBvbmVudCh1LnRvU3RyaW5nKCkpKTtpZighYyl7dmFyIE49e307Yz1cblJsKEhsKG5ldyBHbCgwKSwoTltULmcuamFdPWxtLmpbVC5nLmphXSxOKSkpfWVsc2UgaWYoIVEoODQpKXt2YXIgUz17fTtjPVJsKEhsKG5ldyBHbCgwKSwoU1tULmcuamFdPW0sUykpKX14LnB1c2goXCJndG09XCIrWW4oe3NhOmJ9KSk7Rm4oKSYmeC5wdXNoKFwiZ2NzPVwiK0duKCkpO3gucHVzaChcImdjZD1cIitLbihjKSk7Tm4oKSYmeC5wdXNoKFwiZG1hX2Nwcz1cIitMbigpKTt4LnB1c2goXCJkbWE9XCIrTW4oKSk7RW4oYyk/eC5wdXNoKFwibnBhPTBcIik6eC5wdXNoKFwibnBhPTFcIik7Vm4oKSYmeC5wdXNoKFwiX25nPTFcIik7am4ocm4oKSkmJngucHVzaChcInRjZmQ9XCIrVW4oKSk7dmFyIFY9eW4oKTtWJiZ4LnB1c2goXCJnZHByPVwiK1YpO3ZhciBhYT14bigpO2FhJiZ4LnB1c2goXCJnZHByX2NvbnNlbnQ9XCIrYWEpO1EoMTgpJiZ4LnB1c2goXCJhcHZlPVwiKyhRKDE5KT8xOjApKTtCaS5qJiZ4LnB1c2goXCJ0YWdfZXhwPVwiK0JpLmopO2lmKEgubGVuZ3RoPjApZm9yKHZhciBYPTA7WDxILmxlbmd0aDtYKyspe3ZhciBSPVxuSFtYXSxtYT1SLmFhLGxhPVIuRmU7aWYoIXdxKGEucHJlZml4LGxhK1wiLlwiK21hLHkhPT12b2lkIDApKXt2YXIgZWE9J2h0dHBzOi8vYWRzZXJ2aWNlLmdvb2dsZS5jb20vcGFnZWFkL3JlZ2Nsaz8nK3guam9pbihcIiZcIik7bWEhPT1cIlwiP2VhPWxhPT09XCJnYlwiP2VhK1wiJndicmFpZD1cIittYTplYStcIiZnY2xpZD1cIittYStcIiZnY2xzcmM9XCIrbGE6bGE9PT1cImF3LmRzXCImJihlYSs9XCImZ2Nsc3JjPWF3LmRzXCIpO0ljKGVhKX19ZWxzZSBpZigocnx8dCE9PXZvaWQgMCkmJiF3cShhLnByZWZpeCxcImdhZFwiLHkhPT12b2lkIDApKXt2YXIgd2E9J2h0dHBzOi8vYWRzZXJ2aWNlLmdvb2dsZS5jb20vcGFnZWFkL3JlZ2Nsaz8nK3guam9pbihcIiZcIik7SWMod2EpfX19fSl9fSxMcT1mdW5jdGlvbihhLGIpe3ZhciBjPWlpLmFkc19wYWdldmlldz1paS5hZHNfcGFnZXZpZXd8fHt9O2lmKGNbYV0pcmV0dXJuITE7KGI9PT12b2lkIDA/MDpiKXx8KGNbYV09ITApO3JldHVybiEwfTtmdW5jdGlvbiBOcSgpe2lpLmRlZHVwZV9nY2xpZHx8KGlpLmRlZHVwZV9nY2xpZD1CbygpKTtyZXR1cm4gaWkuZGVkdXBlX2djbGlkfTt2YXIgT3E9L14od3d3XFwuKT9nb29nbGUoXFwuY29tPyk/KFxcLlthLXpdezJ9dD8pPyQvLFBxPS9ed3d3Lmdvb2dsZWFkc2VydmljZXMuY29tJC87ZnVuY3Rpb24gUXEoYSl7YXx8KGE9UnEoKSk7cmV0dXJuIGEuZm4/ITE6YS5SbHx8YS5TbHx8YS5WbHx8YS5UbHx8YS5vaHx8YS5EY3x8YS5GbHx8YS5VbHx8YS5KbD8hMDohMX1cbmZ1bmN0aW9uIFJxKCl7dmFyIGE9e30sYj1VbyghMCk7YS5mbj0hIWIuX3VwO3ZhciBjPWFxKCk7YS5SbD1jLmF3IT09dm9pZCAwO2EuU2w9Yy5kYyE9PXZvaWQgMDthLlZsPWMud2JyYWlkIT09dm9pZCAwO2EuVGw9Yy5nYnJhaWQhPT12b2lkIDA7YS5VbD1RKDc5KT9jLmdjbHNyYz09PVwiYXcuZHNcIjohMTt2YXIgZD1haihELmxvY2F0aW9uLmhyZWYpLGU9VmkoZCxcInF1ZXJ5XCIsITEsdm9pZCAwLFwiZ2FkXCIpO2Eub2g9ZSE9PXZvaWQgMDtpZighYS5vaCl7dmFyIGY9ZC5oYXNoLnJlcGxhY2UoXCIjXCIsXCJcIiksZz1VaShmLFwiZ2FkXCIsITEpO2Eub2g9ZyE9PXZvaWQgMH1pZihRKDgyKSlhLkRjPUFxKCk7ZWxzZSBpZihhLkRjPVZpKGQsXCJxdWVyeVwiLCExLHZvaWQgMCxcImdhZF9zb3VyY2VcIiksYS5EYz09PXZvaWQgMCl7dmFyIGs9ZC5oYXNoLnJlcGxhY2UoXCIjXCIsXCJcIiksbT1VaShrLFwiZ2FkX3NvdXJjZVwiLCExKTthLkRjPW19dmFyIG49RS5yZWZlcnJlcj9WaShhaihFLnJlZmVycmVyKSxcImhvc3RcIik6XG5cIlwiO2EuSmw9T3EudGVzdChuKTthLkZsPVBxLnRlc3Qobik7cmV0dXJuIGF9O3ZhciBTcT1SZWdFeHAoXCJeVUEtXFxcXGQrLVxcXFxkKyUzQVtcXFxcdy1dKyg/OiUyQ1tcXFxcdy1dKykqKD86JTNCVUEtXFxcXGQrLVxcXFxkKyUzQVtcXFxcdy1dKyg/OiUyQ1tcXFxcdy1dKykqKSokXCIpLFRxPS9efj9bXFx3LV0rKD86XFwufj9bXFx3LV0rKSokLyxVcT0vXlxcZCtcXC5mbHNcXC5kb3VibGVjbGlja1xcLm5ldCQvLFZxPS87Z2FjPShbXjs/XSspLyxXcT0vO2dhY2diPShbXjs/XSspLztcbmZ1bmN0aW9uIFhxKGEsYil7aWYoVXEudGVzdChFLmxvY2F0aW9uLmhvc3QpKXt2YXIgYz1FLmxvY2F0aW9uLmhyZWYubWF0Y2goYik7cmV0dXJuIGMmJmMubGVuZ3RoPT09MiYmY1sxXS5tYXRjaChTcSk/ZGVjb2RlVVJJQ29tcG9uZW50KGNbMV0pOlwiXCJ9Zm9yKHZhciBkPVtdLGU9bmEoT2JqZWN0LmtleXMoYSkpLGY9ZS5uZXh0KCk7IWYuZG9uZTtmPWUubmV4dCgpKXtmb3IodmFyIGc9Zi52YWx1ZSxrPVtdLG09YVtnXSxuPTA7bjxtLmxlbmd0aDtuKyspay5wdXNoKG1bbl0uYWEpO2QucHVzaChnK1wiOlwiK2suam9pbihcIixcIikpfXJldHVybiBkLmxlbmd0aD4wP2Quam9pbihcIjtcIik6XCJcIn1cbmZ1bmN0aW9uIFlxKGEsYixjKXtmb3IodmFyIGQ9THAoS3AoKSk/c3AoXCJfZ2FjX2diXCIsITApOnt9LGU9W10sZj0hMSxnPW5hKE9iamVjdC5rZXlzKGQpKSxrPWcubmV4dCgpOyFrLmRvbmU7az1nLm5leHQoKSl7dmFyIG09ay52YWx1ZSxuPXJxKFwiX2dhY19nYl9cIittLGEsYixjKTtmPWZ8fG4ubGVuZ3RoIT09MCYmbi5zb21lKGZ1bmN0aW9uKHApe3JldHVybiBwPT09MX0pO2UucHVzaChtK1wiOlwiK24uam9pbihcIixcIikpfXJldHVybntFbDpmP2Uuam9pbihcIjtcIik6XCJcIixEbDpYcShkLFdxKX19ZnVuY3Rpb24gWnEoYSl7dmFyIGI9RS5sb2NhdGlvbi5ocmVmLm1hdGNoKG5ldyBSZWdFeHAoXCI7XCIrYStcIj0oW147P10rKVwiKSk7cmV0dXJuIGImJmIubGVuZ3RoPT09MiYmYlsxXS5tYXRjaChUcSk/YlsxXTp2b2lkIDB9XG5mdW5jdGlvbiAkcShhKXt2YXIgYj1tYigxMyksYz17fSxkLGUsZjtVcS50ZXN0KEUubG9jYXRpb24uaG9zdCkmJihkPVpxKFwiZ2NsZ3NcIiksZT1acShcImdjbHN0XCIpLGImJihmPVpxKFwiZ2NsbHBcIikpKTtpZihkJiZlJiYoIWJ8fGYpKWMuRmo9ZCxjLkhqPWUsYy5Haj1mO2Vsc2V7dmFyIGc9QmIoKSxrPVRwKChhfHxcIl9nY2xcIikrXCJfZ3NcIiksbT1rLm1hcChmdW5jdGlvbihxKXtyZXR1cm4gcS5hYX0pLG49ay5tYXAoZnVuY3Rpb24ocSl7cmV0dXJuIGctcS50aW1lc3RhbXB9KSxwPVtdO2ImJihwPWsubWFwKGZ1bmN0aW9uKHEpe3JldHVybiBxLk1qfSkpO20ubGVuZ3RoPjAmJm4ubGVuZ3RoPjAmJighYnx8cC5sZW5ndGg+MCkmJihjLkZqPW0uam9pbihcIi5cIiksYy5Iaj1uLmpvaW4oXCIuXCIpLGImJnAubGVuZ3RoPjAmJihjLkdqPXAuam9pbihcIi5cIikpKX1yZXR1cm4gY31cbmZ1bmN0aW9uIGFyKGEsYixjKXtpZihVcS50ZXN0KEUubG9jYXRpb24uaG9zdCkpe3ZhciBkPVpxKGMpO2lmKGQpcmV0dXJuW3thYTpkfV19ZWxzZXtpZihiPT09XCJnY2xpZFwiKXJldHVybiBPcCgoYXx8XCJfZ2NsXCIpK1wiX2F3XCIpO2lmKGI9PT1cIndicmFpZFwiKXJldHVybiBPcCgoYXx8XCJfZ2NsXCIpK1wiX2diXCIpO2lmKGI9PT1cImJyYWlkc1wiKXJldHVybiBRcCh7cHJlZml4OmF9KX1yZXR1cm5bXX1mdW5jdGlvbiBicihhKXtyZXR1cm4gYXIoYSxcImdjbGlkXCIsXCJnY2xhd1wiKS5tYXAoZnVuY3Rpb24oYil7cmV0dXJuIGIuYWF9KS5qb2luKFwiLlwiKX1mdW5jdGlvbiBjcihhKXtyZXR1cm4gYXIoYSxcIndicmFpZFwiLFwiZ2NsZ2JcIikubWFwKGZ1bmN0aW9uKGIpe3JldHVybiBiLmFhfSkuam9pbihcIi5cIil9ZnVuY3Rpb24gZHIoYSl7cmV0dXJuIGFyKGEsXCJicmFpZHNcIixcImdjbGdiXCIpLm1hcChmdW5jdGlvbihiKXtyZXR1cm4gYi5hYX0pLmpvaW4oXCIuXCIpfVxuZnVuY3Rpb24gZXIoYSxiKXtyZXR1cm4gVXEudGVzdChFLmxvY2F0aW9uLmhvc3QpPyEoWnEoXCJnY2xhd1wiKXx8WnEoXCJnYWNcIikpOnZxKGEsYil9ZnVuY3Rpb24gZnIoYSxiLGMpe3ZhciBkO2Q9Yz9zcShhLGIpOnJxKChiJiZiLnByZWZpeHx8XCJfZ2NsXCIpK1wiX2diXCIsYSxiKTtyZXR1cm4gZC5sZW5ndGg9PT0wfHxkLmV2ZXJ5KGZ1bmN0aW9uKGUpe3JldHVybiBlPT09MH0pP1wiXCI6ZC5qb2luKFwiLlwiKX07ZnVuY3Rpb24gZ3IoKXt2YXIgYT1ELl9fdXNwYXBpO2lmKG9iKGEpKXt2YXIgYj1cIlwiO3RyeXthKFwiZ2V0VVNQRGF0YVwiLDEsZnVuY3Rpb24oYyxkKXtpZihkJiZjKXt2YXIgZT1jLnVzcFN0cmluZztlJiZSZWdFeHAoXCJeW1xcXFxkYS16QS1aLV17MSwyMH0kXCIpLnRlc3QoZSkmJihiPWUpfX0pfWNhdGNoKGMpe31yZXR1cm4gYn19O1xudmFyIGtyPWZ1bmN0aW9uKGEpe2lmKGEuZXZlbnROYW1lPT09VC5nLmJhJiZhLm1ldGFkYXRhLmhpdF90eXBlPT09XCJwYWdlX3ZpZXdcIilpZihRKDE5KSl7YS5tZXRhZGF0YS5yZWRhY3RfY2xpY2tfaWRzPVUoYS5tLFQuZy5mYSkhPW51bGwmJlUoYS5tLFQuZy5mYSkhPT0hMSYmIVcoW1QuZy5QLFQuZy5PXSk7dmFyIGI9aHIoYSksYz1VKGEubSxULmcub2EpIT09ITE7Y3x8KGEub1tULmcuQWldPVwiMVwiKTt2YXIgZD1ScChiLnByZWZpeCksZT1hLm1ldGFkYXRhLmlzX3NlcnZlcl9zaWRlX2Rlc3RpbmF0aW9uO2lmKCFhLm1ldGFkYXRhLmNvbnNlbnRfdXBkYXRlZCYmIWEubWV0YWRhdGEudXNlcl9pZF91cGRhdGVkKXt2YXIgZj1VKGEubSxULmcuV2EpLGc9VShhLm0sVC5nLnFhKXx8e307aXIoe29kOmMsd2Q6ZyxCZDpmLGJjOmJ9KTtpZighZSYmIUxxKGQpKXthLmlzQWJvcnRlZD0hMDtyZXR1cm59fWlmKGUpYS5pc0Fib3J0ZWQ9ITA7ZWxzZXthLm9bVC5nLnNjXT1ULmcuU2I7aWYoYS5tZXRhZGF0YS5jb25zZW50X3VwZGF0ZWQpYS5vW1QuZy5zY109XG5ULmcuc2ssYS5vW1QuZy5RYl09XCIxXCI7ZWxzZSBpZihhLm1ldGFkYXRhLnVzZXJfaWRfdXBkYXRlZClhLm9bVC5nLnNjXT1ULmcueGs7ZWxzZXt2YXIgaz1hcSgpO2Eub1tULmcuRWRdPWsuZ2NsaWQ7YS5vW1QuZy5NZF09ay5kY2xpZDthLm9bVC5nLnZpXT1rLmdjbHNyYzthLm9bVC5nLkVkXXx8YS5vW1QuZy5NZF18fChhLm9bVC5nLmFmXT1rLndicmFpZCxhLm9bVC5nLmVnXT1rLmdicmFpZCk7YS5vW1QuZy5CYV09RS5yZWZlcnJlcj9WaShhaihFLnJlZmVycmVyKSxcImhvc3RcIik6XCJcIjthLm9bVC5nLnJhXT1DcSgpO1EoMjIpJiYoYS5vW1QuZy5aYV09anIoKSk7dmFyIG07aWYoUSg2OSkpe3ZhciBuPXlxKCk7bT1uLkRjO2Eub1tULmcudWldPW4uRWp9ZWxzZSBtPUFxKCk7YS5vW1QuZy5zaV09bTthLm9bVC5nLkhiXT0kbSghMCk7dmFyIHA9UnEoKTtRcShwKSYmKGEub1tULmcuZGRdPVwiMVwiKTthLm9bVC5nLnhpXT1OcSgpO1VvKCExKS5fdXA9PT1cIjFcIiYmKGEub1tULmcuTmldPVwiMVwiKX1Haz1cbiEwO3ZhciBxPVcoW1QuZy5QLFQuZy5PXSk7YyYmcSYmKGhwKGIpLGEub1tULmcuRWJdPWZwW2lwKGIucHJlZml4KV0pO2Eub1tULmcua2JdPXZvaWQgMDthLm9bVC5nLlVhXT12b2lkIDA7dmFyIHI9USg3MSk7aWYoIWEub1tULmcuRWRdJiYhYS5vW1QuZy5NZF0mJmVyKGQscikpe3ZhciB0PXI/UHAoYik6TnAoZCtcIl9nYlwiKTt0Lmxlbmd0aD4wJiYoYS5vW1QuZy5rYl09dC5qb2luKFwiLlwiKSl9ZWxzZSBpZighYS5vW1QuZy5hZl0mJnEpe3ZhciB1PU5wKGQrXCJfYXdcIik7dS5sZW5ndGg+MCYmKGEub1tULmcuVWFdPXUuam9pbihcIi5cIikpfWEubS5pc0d0bUV2ZW50JiYoYS5tLmpbVC5nLmphXT1sbS5qW1QuZy5qYV0pO0VuKGEubSk/YS5vW1QuZy5NYl09ITE6YS5vW1QuZy5NYl09ITA7YS5tZXRhZGF0YS5hZGRfdGFnX3RpbWluZz0hMDt2YXIgdj1ncigpO3YhPT12b2lkIDAmJihhLm9bVC5nLmVlXT12fHxcImVycm9yXCIpO3ZhciB3PXluKCk7dyYmKGEub1tULmcud2NdPXcpO3ZhciB4PXhuKCk7XG54JiYoYS5vW1QuZy5BY109eCk7YS5tZXRhZGF0YS5zcGVjdWxhdGl2ZT0hMX19ZWxzZSBhLmlzQWJvcnRlZD0hMH0saHI9ZnVuY3Rpb24oYSl7dmFyIGI9e3ByZWZpeDpVKGEubSxULmcuWGEpfHxVKGEubSxULmcuTmEpLGRvbWFpbjpVKGEubSxULmcuVmEpLHpiOlUoYS5tLFQuZy5NYSksZmxhZ3M6VShhLm0sVC5nLllhKX07YS5tLmlzR3RtRXZlbnQmJihiLnBhdGg9VShhLm0sVC5nLkZiKSk7cmV0dXJuIGJ9LGxyPWZ1bmN0aW9uKGEsYil7dmFyIGMsZCxlLGYsZyxrLG0sbjtjPWEub2Q7ZD1hLndkO2U9YS5CZDtmPWEuc2E7Zz1hLm07az1hLnhkO209YS5IbjtuPWEuaWs7aXIoe29kOmMsd2Q6ZCxCZDplLGJjOmJ9KTtjJiZtIT09ITAmJihuIT1udWxsP249U3RyaW5nKG4pOm49dm9pZCAwLE1xKGIsZixnLGssbikpfSxpcj1mdW5jdGlvbihhKXt2YXIgYixjLGQsZTtiPWEub2Q7Yz1hLndkO2Q9YS5CZDtlPWEuYmM7YiYmKGRwKGNbVC5nLnpjXSwhIWNbVC5nLlddKSYmKGVxKG1yLGUpLFxuZ3EoZSkscHAoZSkpLGJxKGUpLGtxKG1yLGUpLGxxKGUpKTtjW1QuZy5XXSYmKGlxKG1yLGNbVC5nLlddLGNbVC5nLkpiXSwhIWNbVC5nLnRiXSxlLnByZWZpeCksanEoY1tULmcuV10sY1tULmcuSmJdLCEhY1tULmcudGJdLGUucHJlZml4KSxxcChpcChlLnByZWZpeCksY1tULmcuV10sY1tULmcuSmJdLCEhY1tULmcudGJdLGUpLHFwKFwiRlBBVVwiLGNbVC5nLlddLGNbVC5nLkpiXSwhIWNbVC5nLnRiXSxlKSk7ZCYmbnEobnIpO3BxKG5yKX0sb3I9ZnVuY3Rpb24oYSxiLGMsZCl7dmFyIGUsZixnO2U9YS5qaztmPWEuY2FsbGJhY2s7Zz1hLk5qO2lmKHR5cGVvZiBmPT09XCJmdW5jdGlvblwiKWlmKGU9PT1ULmcuVWEmJmc9PT12b2lkIDApe3ZhciBrPWQoYi5wcmVmaXgsYyk7ay5sZW5ndGg9PT0wP2Yodm9pZCAwKTprLmxlbmd0aD09PTE/ZihrWzBdKTpmKGspfWVsc2UgZT09PVQuZy5FYj8oTSg2NSksaHAoYiwhMSksZihmcFtpcChiLnByZWZpeCldKSk6ZihnKX0sbXI9W1wiYXdcIixcImRjXCIsXG5cImdiXCJdLG5yPVtcImF3XCIsXCJkY1wiLFwiZ2JcIixcImFnXCJdO2Z1bmN0aW9uIHByKGEpe3ZhciBiPVUoYS5tLFQuZy5JYiksYz1VKGEubSxULmcuVmIpO2ImJiFjPyhhLmV2ZW50TmFtZSE9PVQuZy5iYSYmYS5ldmVudE5hbWUhPT1ULmcuTWMmJk0oMTMxKSxhLmlzQWJvcnRlZD0hMCk6IWImJmMmJihNKDEzMiksYS5pc0Fib3J0ZWQ9ITApfWZ1bmN0aW9uIHFyKGEpe3ZhciBiPVcoVC5nLlApP2lpLnBzY2RsOlwiZGVuaWVkXCI7YiE9bnVsbCYmKGEub1tULmcuZWZdPWIpfWZ1bmN0aW9uIHJyKGEpe3ZhciBiPSRtKCEwKTthLm9bVC5nLkhiXT1ifWZ1bmN0aW9uIHNyKGEpe1ZuKCkmJihhLm9bVC5nLnhjXT0xKX1cbmZ1bmN0aW9uIGpyKCl7dmFyIGE9RS50aXRsZTtpZihhPT09dm9pZCAwfHxhPT09XCJcIilyZXR1cm5cIlwiO3ZhciBiPWZ1bmN0aW9uKGQpe3RyeXtyZXR1cm4gZGVjb2RlVVJJQ29tcG9uZW50KGQpLCEwfWNhdGNoKGUpe3JldHVybiExfX07YT1lbmNvZGVVUklDb21wb25lbnQoYSk7Zm9yKHZhciBjPTI1NjtjPjAmJiFiKGEuc3Vic3RyaW5nKDAsYykpOyljLS07cmV0dXJuIGRlY29kZVVSSUNvbXBvbmVudChhLnN1YnN0cmluZygwLGMpKX1mdW5jdGlvbiB0cihhKXtpZihRKDEzKSl7dmFyIGI9VShhLm0sVC5nLk1hKTthLm9bVC5nLmllXXx8KGEub1tULmcuaWVdPXt9KTthLm9bVC5nLmllXS5jZT1ifX07ZnVuY3Rpb24gQXIoYSxiLGMsZCl7dmFyIGU9eWMoKSxmO2lmKGU9PT0xKWE6e3ZhciBnPXVpO2c9Zy50b0xvd2VyQ2FzZSgpO2Zvcih2YXIgaz1cImh0dHBzOi8vXCIrZyxtPVwiaHR0cDovL1wiK2csbj0xLHA9RS5nZXRFbGVtZW50c0J5VGFnTmFtZShcInNjcmlwdFwiKSxxPTA7cTxwLmxlbmd0aCYmcTwxMDA7cSsrKXt2YXIgcj1wW3FdLnNyYztpZihyKXtyPXIudG9Mb3dlckNhc2UoKTtpZihyLmluZGV4T2YobSk9PT0wKXtmPTM7YnJlYWsgYX1uPT09MSYmci5pbmRleE9mKGspPT09MCYmKG49Mil9fWY9bn1lbHNlIGY9ZTtyZXR1cm4oZj09PTJ8fGR8fFwiaHR0cDpcIiE9RC5sb2NhdGlvbi5wcm90b2NvbD9hOmIpK2N9O2Z1bmN0aW9uIE5yKGEpe3JldHVybntnZXREZXN0aW5hdGlvbklkOmZ1bmN0aW9uKCl7cmV0dXJuIGEudGFyZ2V0LmRlc3RpbmF0aW9uSWR9LGdldEV2ZW50TmFtZTpmdW5jdGlvbigpe3JldHVybiBhLmV2ZW50TmFtZX0sc2V0RXZlbnROYW1lOmZ1bmN0aW9uKGIpe2EuZXZlbnROYW1lPWJ9LGdldEhpdERhdGE6ZnVuY3Rpb24oYil7cmV0dXJuIGEub1tiXX0sc2V0SGl0RGF0YTpmdW5jdGlvbihiLGMpe2Eub1tiXT1jfSxzZXRIaXREYXRhSWZOb3REZWZpbmVkOmZ1bmN0aW9uKGIsYyl7YS5vW2JdPT09dm9pZCAwJiYoYS5vW2JdPWMpfSxjb3B5VG9IaXREYXRhOmZ1bmN0aW9uKGIsYyl7YS5jb3B5VG9IaXREYXRhKGIsYyl9LGdldE1ldGFkYXRhOmZ1bmN0aW9uKGIpe3JldHVybiBhLm1ldGFkYXRhW2JdfSxzZXRNZXRhZGF0YTpmdW5jdGlvbihiLGMpe2EubWV0YWRhdGFbYl09Y30saXNBYm9ydGVkOmZ1bmN0aW9uKCl7cmV0dXJuIGEuaXNBYm9ydGVkfSxhYm9ydDpmdW5jdGlvbigpe2EuaXNBYm9ydGVkPVxuITB9LGdldEZyb21FdmVudENvbnRleHQ6ZnVuY3Rpb24oYil7cmV0dXJuIFUoYS5tLGIpfSxJajpmdW5jdGlvbigpe3JldHVybiBhfSxnZXRIaXRLZXlzOmZ1bmN0aW9uKCl7cmV0dXJuIE9iamVjdC5rZXlzKGEubyl9fX07dmFyIFByPWZ1bmN0aW9uKGEpe3ZhciBiPU9yW2EudGFyZ2V0LmRlc3RpbmF0aW9uSWRdO2lmKCFhLmlzQWJvcnRlZCYmYilmb3IodmFyIGM9TnIoYSksZD0wO2Q8Yi5sZW5ndGg7KytkKXt0cnl7YltkXShjKX1jYXRjaChlKXthLmlzQWJvcnRlZD0hMH1pZihhLmlzQWJvcnRlZClicmVha319LFFyPWZ1bmN0aW9uKGEsYil7dmFyIGM9T3JbYV07Y3x8KGM9T3JbYV09W10pO2MucHVzaChiKX0sT3I9e307dmFyIFVyLFZyPSExO2Z1bmN0aW9uIFdyKCl7VnI9ITA7VXI9VXJ8fHt9fWZ1bmN0aW9uIFhyKGEpe1ZyfHxXcigpO3JldHVybiBVclthXX1mdW5jdGlvbiBZcigpe3ZhciBhPUQuc2NyZWVuO3JldHVybnt3aWR0aDphP2Eud2lkdGg6MCxoZWlnaHQ6YT9hLmhlaWdodDowfX1cbmZ1bmN0aW9uIFpyKGEpe2lmKEUuaGlkZGVuKXJldHVybiEwO3ZhciBiPWEuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7aWYoYi50b3A9PT1iLmJvdHRvbXx8Yi5sZWZ0PT09Yi5yaWdodHx8IUQuZ2V0Q29tcHV0ZWRTdHlsZSlyZXR1cm4hMDt2YXIgYz1ELmdldENvbXB1dGVkU3R5bGUoYSxudWxsKTtpZihjLnZpc2liaWxpdHk9PT1cImhpZGRlblwiKXJldHVybiEwO2Zvcih2YXIgZD1hLGU9YztkOyl7aWYoZS5kaXNwbGF5PT09XCJub25lXCIpcmV0dXJuITA7dmFyIGY9ZS5vcGFjaXR5LGc9ZS5maWx0ZXI7aWYoZyl7dmFyIGs9Zy5pbmRleE9mKFwib3BhY2l0eShcIik7az49MCYmKGc9Zy5zdWJzdHJpbmcoays4LGcuaW5kZXhPZihcIilcIixrKSksZy5jaGFyQXQoZy5sZW5ndGgtMSk9PT1cIiVcIiYmKGc9Zy5zdWJzdHJpbmcoMCxnLmxlbmd0aC0xKSksZj1TdHJpbmcoTWF0aC5taW4oTnVtYmVyKGcpLE51bWJlcihmKSkpKX1pZihmIT09dm9pZCAwJiZOdW1iZXIoZik8PTApcmV0dXJuITA7KGQ9ZC5wYXJlbnRFbGVtZW50KSYmXG4oZT1ELmdldENvbXB1dGVkU3R5bGUoZCxudWxsKSl9cmV0dXJuITF9XG52YXIgaXM9ZnVuY3Rpb24oYSl7cmV0dXJuIGEudGFnTmFtZStcIjpcIithLmlzVmlzaWJsZStcIjpcIithLlgubGVuZ3RoK1wiOlwiK2hzLnRlc3QoYS5YKX0sd3M9ZnVuY3Rpb24oYSl7YT1hfHx7dWQ6ITAsdmQ6ITAsU2Y6dm9pZCAwfTthLndiPWEud2J8fHtlbWFpbDohMCxwaG9uZTohMSxhZGRyZXNzOiExfTt2YXIgYj1qcyhhKSxjPWtzW2JdO2lmKGMmJkJiKCktYy50aW1lc3RhbXA8MjAwKXJldHVybiBjLnJlc3VsdDt2YXIgZD1scygpLGU9ZC5zdGF0dXMsZj1bXSxnLGssbT1bXTtpZighUSgyNikpe2lmKGEud2ImJmEud2IuZW1haWwpe3ZhciBuPW1zKGQuZWxlbWVudHMpO2Y9bnMobixhJiZhLkFlKTtnPW9zKGYpO24ubGVuZ3RoPjEwJiYoZT1cIjNcIil9IWEuU2YmJmcmJihmPVtnXSk7Zm9yKHZhciBwPTA7cDxmLmxlbmd0aDtwKyspbS5wdXNoKHBzKGZbcF0sISFhLnVkLCEhYS52ZCkpO209bS5zbGljZSgwLDEwKX1lbHNlIGlmKGEud2Ipe31nJiYoaz1wcyhnLCEhYS51ZCwhIWEudmQpKTt2YXIgQz17ZWxlbWVudHM6bSxcbkZoOmssc3RhdHVzOmV9O2tzW2JdPXt0aW1lc3RhbXA6QmIoKSxyZXN1bHQ6Q307cmV0dXJuIEN9LHZzPWZ1bmN0aW9uKGEsYixjKXt2YXIgZD1hLmVsZW1lbnQsZT17WDphLlgsdHlwZTphLm5hLHRhZ05hbWU6ZC50YWdOYW1lfTtiJiYoZS5xdWVyeVNlbGVjdG9yPXhzKGQpKTtjJiYoZS5pc1Zpc2libGU9IVpyKGQpKTtyZXR1cm4gZX0scHM9ZnVuY3Rpb24oYSxiLGMpe3JldHVybiB2cyh7ZWxlbWVudDphLmVsZW1lbnQsWDphLlgsbmE6dXMuaWN9LGIsYyl9LGpzPWZ1bmN0aW9uKGEpe3ZhciBiPSEoYT09bnVsbHx8IWEudWQpK1wiLlwiKyEoYT09bnVsbHx8IWEudmQpO2EmJmEuQWUmJmEuQWUubGVuZ3RoJiYoYis9XCIuXCIrYS5BZS5qb2luKFwiLlwiKSk7YSYmYS53YiYmKGIrPVwiLlwiK2Eud2IuZW1haWwrXCIuXCIrYS53Yi5waG9uZStcIi5cIithLndiLmFkZHJlc3MpO3JldHVybiBifSxvcz1mdW5jdGlvbihhKXtpZihhLmxlbmd0aCE9PTApe3ZhciBiO2I9eXMoYSxmdW5jdGlvbihjKXtyZXR1cm4henMudGVzdChjLlgpfSk7XG5iPXlzKGIsZnVuY3Rpb24oYyl7cmV0dXJuIGMuZWxlbWVudC50YWdOYW1lLnRvVXBwZXJDYXNlKCk9PT1cIklOUFVUXCJ9KTtiPXlzKGIsZnVuY3Rpb24oYyl7cmV0dXJuIVpyKGMuZWxlbWVudCl9KTtyZXR1cm4gYlswXX19LG5zPWZ1bmN0aW9uKGEsYil7aWYoIWJ8fGIubGVuZ3RoPT09MClyZXR1cm4gYTtmb3IodmFyIGM9W10sZD0wO2Q8YS5sZW5ndGg7ZCsrKXtmb3IodmFyIGU9ITAsZj0wO2Y8Yi5sZW5ndGg7ZisrKXt2YXIgZz1iW2ZdO2lmKGcmJm1oKGFbZF0uZWxlbWVudCxnKSl7ZT0hMTticmVha319ZSYmYy5wdXNoKGFbZF0pfXJldHVybiBjfSx5cz1mdW5jdGlvbihhLGIpe2lmKGEubGVuZ3RoPD0xKXJldHVybiBhO3ZhciBjPWEuZmlsdGVyKGIpO3JldHVybiBjLmxlbmd0aD09PTA/YTpjfSx4cz1mdW5jdGlvbihhKXt2YXIgYjtpZihhPT09RS5ib2R5KWI9XCJib2R5XCI7ZWxzZXt2YXIgYztpZihhLmlkKWM9XCIjXCIrYS5pZDtlbHNle3ZhciBkO2lmKGEucGFyZW50RWxlbWVudCl7dmFyIGU7XG5hOnt2YXIgZj1hLnBhcmVudEVsZW1lbnQ7aWYoZil7Zm9yKHZhciBnPTA7ZzxmLmNoaWxkRWxlbWVudENvdW50O2crKylpZihmLmNoaWxkcmVuW2ddPT09YSl7ZT1nKzE7YnJlYWsgYX1lPS0xfWVsc2UgZT0xfWQ9eHMoYS5wYXJlbnRFbGVtZW50KStcIj46bnRoLWNoaWxkKFwiK2UudG9TdHJpbmcoKStcIilcIn1lbHNlIGQ9XCJcIjtjPWR9Yj1jfXJldHVybiBifSxtcz1mdW5jdGlvbihhKXtmb3IodmFyIGI9W10sYz0wO2M8YS5sZW5ndGg7YysrKXt2YXIgZD1hW2NdLGU9ZC50ZXh0Q29udGVudDtkLnRhZ05hbWUudG9VcHBlckNhc2UoKT09PVwiSU5QVVRcIiYmZC52YWx1ZSYmKGU9ZC52YWx1ZSk7aWYoZSl7dmFyIGY9ZS5tYXRjaChBcyk7aWYoZil7dmFyIGc9ZlswXSxrO2lmKEQubG9jYXRpb24pe3ZhciBtPVhpKEQubG9jYXRpb24sXCJob3N0XCIsITApO2s9Zy50b0xvd2VyQ2FzZSgpLmluZGV4T2YobSk+PTB9ZWxzZSBrPSExO2t8fGIucHVzaCh7ZWxlbWVudDpkLFg6Z30pfX19cmV0dXJuIGJ9LFxubHM9ZnVuY3Rpb24oKXt2YXIgYT1bXSxiPUUuYm9keTtpZighYilyZXR1cm57ZWxlbWVudHM6YSxzdGF0dXM6XCI0XCJ9O2Zvcih2YXIgYz1iLnF1ZXJ5U2VsZWN0b3JBbGwoXCIqXCIpLGQ9MDtkPGMubGVuZ3RoJiZkPDFFNDtkKyspe3ZhciBlPWNbZF07aWYoIShCcy5pbmRleE9mKGUudGFnTmFtZS50b1VwcGVyQ2FzZSgpKT49MCkmJmUuY2hpbGRyZW4gaW5zdGFuY2VvZiBIVE1MQ29sbGVjdGlvbil7Zm9yKHZhciBmPSExLGc9MDtnPGUuY2hpbGRFbGVtZW50Q291bnQmJmc8MUU0O2crKylpZighKENzLmluZGV4T2YoZS5jaGlsZHJlbltnXS50YWdOYW1lLnRvVXBwZXJDYXNlKCkpPj0wKSl7Zj0hMDticmVha30oIWZ8fFEoMjYpJiZEcy5pbmRleE9mKGUudGFnTmFtZSkhPT0tMSkmJmEucHVzaChlKX19cmV0dXJue2VsZW1lbnRzOmEsc3RhdHVzOmMubGVuZ3RoPjFFND9cIjJcIjpcIjFcIn19LEVzPSExO3ZhciBBcz0vW0EtWjAtOS5fJSstXStAW0EtWjAtOS4tXStcXC5bQS1aXXsyLH0vaSxocz0vQChnbWFpbHxnb29nbGVtYWlsKVxcLi9pLHpzPS9zdXBwb3J0fG5vcmVwbHkvaSxCcz1cIlNDUklQVCBTVFlMRSBJTUcgU1ZHIFBBVEggQlIgTk9TQ1JJUFQgVEVYVEFSRUFcIi5zcGxpdChcIiBcIiksQ3M9W1wiQlJcIl0sdXM9e2ljOlwiMVwiLG9lOlwiMlwiLGhlOlwiM1wiLGtlOlwiNFwiLFdmOlwiNVwiLFFnOlwiNlwiLEZmOlwiN1wifSxrcz17fSxEcz1bXCJJTlBVVFwiLFwiU0VMRUNUXCJdO3ZhciBUcz1mdW5jdGlvbihhLGIsYyl7YS5vW1QuZy5xZV18fChhLm9bVC5nLnFlXT17fSk7YS5vW1QuZy5xZV1bYl09Y30sVnM9ZnVuY3Rpb24oYSxiKXt2YXIgYz1VcyhhLFQuZy5TZCxhLm0uRFtULmcuU2RdKTtpZihjJiZjW2J8fGEuZXZlbnROYW1lXSE9PXZvaWQgMClyZXR1cm4gY1tifHxhLmV2ZW50TmFtZV19LFdzPWZ1bmN0aW9uKGEpe3ZhciBiPWEubWV0YWRhdGEudXNlcl9kYXRhO2lmKFNhKGIpKXJldHVybiBifSxYcz1mdW5jdGlvbihhKXtpZihhLm1ldGFkYXRhLmlzX21lcmNoYW50X2NlbnRlcnx8IWlqKGEubSkpcmV0dXJuITE7aWYoIVUoYS5tLFQuZy5oZCkpe3ZhciBiPVUoYS5tLFQuZy51Yyk7cmV0dXJuIGI9PT0hMHx8Yj09PVwidHJ1ZVwifXJldHVybiEwfSxZcz1mdW5jdGlvbihhKXtyZXR1cm4gVXMoYSxULmcueWMsVShhLm0sVC5nLnljKSl8fCEhVXMoYSxcImdvb2dsZV9uZ1wiLCExKX07dmFyIEtmO3ZhciBacz1OdW1iZXIoJycpfHw1LCRzPU51bWJlcignJyl8fDUwLGF0PXNiKCk7dmFyIGZ0PXtZazpOdW1iZXIoJycpfHw1MDAsTGs6TnVtYmVyKCcnKXx8NUUzLGdqOk51bWJlcignMjAnKXx8MTAscms6TnVtYmVyKCcnKXx8NUUzfTtmdW5jdGlvbiBndChhKXtyZXR1cm4gYS5wZXJmb3JtYW5jZSYmYS5wZXJmb3JtYW5jZS5ub3coKXx8RGF0ZS5ub3coKX1cbnZhciBodD1mdW5jdGlvbihhLGIpe3ZhciBjO3JldHVybiBjfTt2YXIgaXQ7ZnVuY3Rpb24gb3QoKXt2YXIgYT1OZihLZi5qLFwiXCIsZnVuY3Rpb24oKXtyZXR1cm57fX0pO3RyeXtyZXR1cm4gYShcImludGVybmFsX3N3X2FsbG93ZWRcIiksITB9Y2F0Y2goYil7cmV0dXJuITF9fVxuZnVuY3Rpb24gcHQoYSxiKXt9XG52YXIgcXQ9ZnVuY3Rpb24oYSxiLGMsZCl7fTtcbmZ1bmN0aW9uIHJ0KGEsYixjLGQpe31cbmZ1bmN0aW9uIHN0KGEsYixjLGQpe312YXIgdHQ9dm9pZCAwO2Z1bmN0aW9uIHV0KGEpe3ZhciBiPVtdO3JldHVybiBifTt2YXIgdnQ9ZnVuY3Rpb24oYSl7Zm9yKHZhciBiPVtdLGM9MCxkPTA7ZDxhLmxlbmd0aDtkKyspe3ZhciBlPWEuY2hhckNvZGVBdChkKTtlPDEyOD9iW2MrK109ZTooZTwyMDQ4P2JbYysrXT1lPj42fDE5MjooKGUmNjQ1MTIpPT01NTI5NiYmZCsxPGEubGVuZ3RoJiYoYS5jaGFyQ29kZUF0KGQrMSkmNjQ1MTIpPT01NjMyMD8oZT02NTUzNisoKGUmMTAyMyk8PDEwKSsoYS5jaGFyQ29kZUF0KCsrZCkmMTAyMyksYltjKytdPWU+PjE4fDI0MCxiW2MrK109ZT4+MTImNjN8MTI4KTpiW2MrK109ZT4+MTJ8MjI0LGJbYysrXT1lPj42JjYzfDEyOCksYltjKytdPWUmNjN8MTI4KX1yZXR1cm4gYn07Tm0oKTtRbSgpfHxLbShcImlQb2RcIik7S20oXCJpUGFkXCIpOyFLbShcIkFuZHJvaWRcIil8fE9tKCl8fE5tKCl8fE1tKCl8fEttKFwiU2lsa1wiKTtPbSgpOyFLbShcIlNhZmFyaVwiKXx8T20oKXx8KExtKCk/MDpLbShcIkNvYXN0XCIpKXx8TW0oKXx8KExtKCk/MDpLbShcIkVkZ2VcIikpfHwoTG0oKT9KbShcIk1pY3Jvc29mdCBFZGdlXCIpOkttKFwiRWRnL1wiKSl8fChMbSgpP0ptKFwiT3BlcmFcIik6S20oXCJPUFJcIikpfHxObSgpfHxLbShcIlNpbGtcIil8fEttKFwiQW5kcm9pZFwiKXx8Um0oKTt2YXIgd3Q9e30seHQ9bnVsbCx6dD1mdW5jdGlvbihhKXtmb3IodmFyIGI9W10sYz0wLGQ9MDtkPGEubGVuZ3RoO2QrKyl7dmFyIGU9YS5jaGFyQ29kZUF0KGQpO2U+MjU1JiYoYltjKytdPWUmMjU1LGU+Pj04KTtiW2MrK109ZX12YXIgZj00O2Y9PT12b2lkIDAmJihmPTApO2lmKCF4dCl7eHQ9e307Zm9yKHZhciBnPVwiQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODlcIi5zcGxpdChcIlwiKSxrPVtcIisvPVwiLFwiKy9cIixcIi1fPVwiLFwiLV8uXCIsXCItX1wiXSxtPTA7bTw1O20rKyl7dmFyIG49Zy5jb25jYXQoa1ttXS5zcGxpdChcIlwiKSk7d3RbbV09bjtmb3IodmFyIHA9MDtwPG4ubGVuZ3RoO3ArKyl7dmFyIHE9bltwXTt4dFtxXT09PXZvaWQgMCYmKHh0W3FdPXApfX19Zm9yKHZhciByPXd0W2ZdLHQ9QXJyYXkoTWF0aC5mbG9vcihiLmxlbmd0aC8zKSksdT1yWzY0XXx8XCJcIix2PTAsdz0wO3Y8Yi5sZW5ndGgtMjt2Kz0zKXt2YXIgeD1iW3ZdLFxueT1iW3YrMV0sQT1iW3YrMl0sQj1yW3g+PjJdLEM9clsoeCYzKTw8NHx5Pj40XSxIPXJbKHkmMTUpPDwyfEE+PjZdLEk9cltBJjYzXTt0W3crK109XCJcIitCK0MrSCtJfXZhciBGPTAsTz11O3N3aXRjaChiLmxlbmd0aC12KXtjYXNlIDI6Rj1iW3YrMV0sTz1yWyhGJjE1KTw8Ml18fHU7Y2FzZSAxOnZhciBOPWJbdl07dFt3XT1cIlwiK3JbTj4+Ml0rclsoTiYzKTw8NHxGPj40XStPK3V9cmV0dXJuIHQuam9pbihcIlwiKX07dmFyIEF0PVwicGxhdGZvcm0gcGxhdGZvcm1WZXJzaW9uIGFyY2hpdGVjdHVyZSBtb2RlbCB1YUZ1bGxWZXJzaW9uIGJpdG5lc3MgZnVsbFZlcnNpb25MaXN0IHdvdzY0XCIuc3BsaXQoXCIgXCIpO2Z1bmN0aW9uIEJ0KGEpe3ZhciBiO3JldHVybihiPWEuZ29vZ2xlX3RhZ19kYXRhKSE9bnVsbD9iOmEuZ29vZ2xlX3RhZ19kYXRhPXt9fWZ1bmN0aW9uIEN0KCl7dmFyIGE9RC5nb29nbGVfdGFnX2RhdGEsYjtpZihhIT1udWxsJiZhLnVhY2gpe3ZhciBjPWEudWFjaCxkPU9iamVjdC5hc3NpZ24oe30sYyk7Yy5mdWxsVmVyc2lvbkxpc3QmJihkLmZ1bGxWZXJzaW9uTGlzdD1jLmZ1bGxWZXJzaW9uTGlzdC5zbGljZSgwKSk7Yj1kfWVsc2UgYj1udWxsO3JldHVybiBifWZ1bmN0aW9uIER0KCl7dmFyIGEsYjtyZXR1cm4oYj0oYT1ELmdvb2dsZV90YWdfZGF0YSk9PW51bGw/dm9pZCAwOmEudWFjaF9wcm9taXNlKSE9bnVsbD9iOm51bGx9XG5mdW5jdGlvbiBFdChhKXt2YXIgYixjO3JldHVybiB0eXBlb2YoKGI9YS5uYXZpZ2F0b3IpPT1udWxsP3ZvaWQgMDooYz1iLnVzZXJBZ2VudERhdGEpPT1udWxsP3ZvaWQgMDpjLmdldEhpZ2hFbnRyb3B5VmFsdWVzKT09PVwiZnVuY3Rpb25cIn1mdW5jdGlvbiBGdCgpe3ZhciBhPUQ7aWYoIUV0KGEpKXJldHVybiBudWxsO3ZhciBiPUJ0KGEpO2lmKGIudWFjaF9wcm9taXNlKXJldHVybiBiLnVhY2hfcHJvbWlzZTt2YXIgYz1hLm5hdmlnYXRvci51c2VyQWdlbnREYXRhLmdldEhpZ2hFbnRyb3B5VmFsdWVzKEF0KS50aGVuKGZ1bmN0aW9uKGQpe2IudWFjaCE9bnVsbHx8KGIudWFjaD1kKTtyZXR1cm4gZH0pO3JldHVybiBiLnVhY2hfcHJvbWlzZT1jfTtcbnZhciBHdCxIdD1mdW5jdGlvbigpe2lmKEV0KEQpJiYoR3Q9QmIoKSwhRHQoKSkpe3ZhciBhPUZ0KCk7YSYmKGEudGhlbihmdW5jdGlvbigpe00oOTUpO30pLGEuY2F0Y2goZnVuY3Rpb24oKXtNKDk2KX0pKX19LEp0PWZ1bmN0aW9uKGEpe3ZhciBiPUl0LmRuLGM9ZnVuY3Rpb24oZyxrKXt0cnl7YShnLGspfWNhdGNoKG0pe319LGQ9Q3QoKTtpZihkKWMoZCk7ZWxzZXt2YXIgZT1EdCgpO2lmKGUpe2I9XG5NYXRoLm1pbihNYXRoLm1heChpc0Zpbml0ZShiKT9iOjAsMCksMUUzKTt2YXIgZj1ELnNldFRpbWVvdXQoZnVuY3Rpb24oKXtjLkxlfHwoYy5MZT0hMCxNKDEwNiksYyhudWxsLEVycm9yKFwiVGltZW91dFwiKSkpfSxiKTtlLnRoZW4oZnVuY3Rpb24oZyl7Yy5MZXx8KGMuTGU9ITAsTSgxMDQpLEQuY2xlYXJUaW1lb3V0KGYpLGMoZykpfSkuY2F0Y2goZnVuY3Rpb24oZyl7Yy5MZXx8KGMuTGU9ITAsTSgxMDUpLEQuY2xlYXJUaW1lb3V0KGYpLGMobnVsbCxnKSl9KX1lbHNlIGMobnVsbCl9fSxLdD1mdW5jdGlvbihhLGIpe2EmJihiLm9bVC5nLndmXT1hLmFyY2hpdGVjdHVyZSxiLm9bVC5nLnhmXT1hLmJpdG5lc3MsYS5mdWxsVmVyc2lvbkxpc3QmJihiLm9bVC5nLnlmXT1hLmZ1bGxWZXJzaW9uTGlzdC5tYXAoZnVuY3Rpb24oYyl7cmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudChjLmJyYW5kfHxcIlwiKStcIjtcIitlbmNvZGVVUklDb21wb25lbnQoYy52ZXJzaW9ufHxcIlwiKX0pLmpvaW4oXCJ8XCIpKSxcbmIub1tULmcuemZdPWEubW9iaWxlP1wiMVwiOlwiMFwiLGIub1tULmcuQWZdPWEubW9kZWwsYi5vW1QuZy5CZl09YS5wbGF0Zm9ybSxiLm9bVC5nLkNmXT1hLnBsYXRmb3JtVmVyc2lvbixiLm9bVC5nLkRmXT1hLndvdzY0P1wiMVwiOlwiMFwiKX07ZnVuY3Rpb24gTHQoYSl7dmFyIGI7Yj1iPT09dm9pZCAwP2RvY3VtZW50OmI7dmFyIGM7cmV0dXJuISgoYz1iLmZlYXR1cmVQb2xpY3kpPT1udWxsfHwhYy5hbGxvd2VkRmVhdHVyZXMoKS5pbmNsdWRlcyhhKSl9O2Z1bmN0aW9uIE10KCl7cmV0dXJuIEx0KFwiam9pbi1hZC1pbnRlcmVzdC1ncm91cFwiKSYmb2Iob2Muam9pbkFkSW50ZXJlc3RHcm91cCl9XG5mdW5jdGlvbiBOdChhLGIpe3ZhciBjPWxiWzNdPT09dm9pZCAwPzE6bGJbM10sZD0naWZyYW1lW2RhdGEtdGFnZ2luZy1pZD1cIicrYisnXCJdJyxlPVtdO3RyeXtpZihjPT09MSl7dmFyIGY9RS5xdWVyeVNlbGVjdG9yKGQpO2YmJihlPVtmXSl9ZWxzZSBlPUFycmF5LmZyb20oRS5xdWVyeVNlbGVjdG9yQWxsKGQpKX1jYXRjaChxKXt9dmFyIGc7YTp7dHJ5e2c9RS5xdWVyeVNlbGVjdG9yQWxsKCdpZnJhbWVbYWxsb3c9XCJqb2luLWFkLWludGVyZXN0LWdyb3VwXCJdW2RhdGEtdGFnZ2luZy1pZCo9XCItXCJdJyk7YnJlYWsgYX1jYXRjaChxKXt9Zz12b2lkIDB9dmFyIGs9ZyxtPSgoaz09bnVsbD92b2lkIDA6ay5sZW5ndGgpfHwwKT49KGxiWzJdPT09dm9pZCAwPzUwOmxiWzJdKSxuO2lmKG49ZS5sZW5ndGg+PTEpe3ZhciBwPU51bWJlcihlW2UubGVuZ3RoLTFdLmRhdGFzZXQubG9hZFRpbWUpO3AhPT12b2lkIDAmJkJiKCktcDwobGJbMV09PT12b2lkIDA/NkU0OmxiWzFdKT8oaGIoXCJUQUdHSU5HXCIsXG45KSxuPSEwKTpuPSExfWlmKCFuKXtpZihjPT09MSlpZihlLmxlbmd0aD49MSlPdChlWzBdKTtlbHNle2lmKG0pe2hiKFwiVEFHR0lOR1wiLDEwKTtyZXR1cm59fWVsc2UgZS5sZW5ndGg+PWM/T3QoZVswXSk6bSYmT3Qoa1swXSk7emMoYSx2b2lkIDAse2FsbG93Olwiam9pbi1hZC1pbnRlcmVzdC1ncm91cFwifSx7dGFnZ2luZ0lkOmIsbG9hZFRpbWU6QmIoKX0pfX1mdW5jdGlvbiBPdChhKXt0cnl7YS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGEpfWNhdGNoKGIpe319ZnVuY3Rpb24gUHQoKXtyZXR1cm5cImh0dHBzOi8vdGQuZG91YmxlY2xpY2submV0XCJ9O1xudmFyIEZ1PWZ1bmN0aW9uKGEsYil7dmFyIGM9e30sZD1mdW5jdGlvbihmLGcpe3ZhciBrO2s9Zz09PSEwP1wiMVwiOmc9PT0hMT9cIjBcIjplbmNvZGVVUklDb21wb25lbnQoU3RyaW5nKGcpKTtjW2ZdPWt9O3ooYS5vLGZ1bmN0aW9uKGYsZyl7dmFyIGs9RXVbZl07ayYmZyE9PXZvaWQgMCYmZyE9PVwiXCImJighYS5tZXRhZGF0YS5yZWRhY3RfY2xpY2tfaWRzfHxmIT09VC5nLkVkJiZmIT09VC5nLk1kJiZmIT09VC5nLmFmJiZmIT09VC5nLmVnfHwoZz1cIjBcIiksZChrLGcpKX0pO2QoXCJndG1cIixZbih7c2E6YS5tZXRhZGF0YS5zb3VyY2VfY2Fub25pY2FsX2lkfSkpO0ZuKCkmJmQoXCJnY3NcIixHbigpKTtkKFwiZ2NkXCIsS24oYS5tKSk7Tm4oKSYmZChcImRtYV9jcHNcIixMbigpKTtkKFwiZG1hXCIsTW4oKSk7am4ocm4oKSkmJmQoXCJ0Y2ZkXCIsVW4oKSk7QmkuaiYmZChcInRhZ19leHBcIixCaS5qKTtpZihhLm1ldGFkYXRhLmFkZF90YWdfdGltaW5nKXtkKFwidGZ0XCIsQmIoKSk7dmFyIGU9T2MoKTtlIT09dm9pZCAwJiZcbmQoXCJ0ZmRcIixNYXRoLnJvdW5kKGUpKX1RKDE4KSYmZChcImFwdmVcIixRKDE5KT9cIjFcIjpcIjBcIik7USgyMCkmJmQoXCJhcHZmXCIsTGMoKT9RKDIxKT9cImZcIjpcInNiXCI6XCJuZlwiKTtiKGMpfSxHdT1mdW5jdGlvbihhKXtGdShhLGZ1bmN0aW9uKGIpe2lmKGEubWV0YWRhdGEuaGl0X3R5cGU9PT1cInBhZ2Vfdmlld1wiKXt2YXIgYz1bXTt6KGIsZnVuY3Rpb24oZSxmKXtjLnB1c2goZStcIj1cIitmKX0pO3ZhciBkPWpqKFcoW1QuZy5QLFQuZy5PXSk/XCJodHRwczovL3d3dy5nb29nbGUuY29tXCI6XCJodHRwczovL3BhZ2VhZDIuZ29vZ2xlc3luZGljYXRpb24uY29tXCIsITApK1wiL2NjbS9jb2xsZWN0P1wiK2Muam9pbihcIiZcIik7USgyMCkmJlEoMjEpJiZMYygpP01jKGQsdm9pZCAwLHtub0ZhbGxiYWNrOiEwfSk6SWMoZCk7aWYob2IoYS5tLm9uU3VjY2VzcykpYS5tLm9uU3VjY2VzcygpfX0pfSxIdT17fSxFdT0oSHVbVC5nLlFiXT1cImdjdVwiLEh1W1QuZy5rYl09XCJnY2xnYlwiLEh1W1QuZy5VYV09XCJnY2xhd1wiLEh1W1QuZy5zaV09XG5cImdhZF9zb3VyY2VcIixIdVtULmcudWldPVwiZ2FkX3NvdXJjZV9zcmNcIixIdVtULmcuRWRdPVwiZ2NsaWRcIixIdVtULmcudmldPVwiZ2Nsc3JjXCIsSHVbVC5nLmVnXT1cImdicmFpZFwiLEh1W1QuZy5hZl09XCJ3YnJhaWRcIixIdVtULmcuRWJdPVwiYXVpZFwiLEh1W1QuZy54aV09XCJybmRcIixIdVtULmcuQWldPVwibmNsXCIsSHVbVC5nLmhnXT1cImdjbGRjXCIsSHVbVC5nLk1kXT1cImRjbGlkXCIsSHVbVC5nLnBiXT1cImVkaWRcIixIdVtULmcuc2NdPVwiZW5cIixIdVtULmcud2NdPVwiZ2RwclwiLEh1W1QuZy5zYl09XCJnZGlkXCIsSHVbVC5nLnhjXT1cIl9uZ1wiLEh1W1QuZy5OaV09XCJndG1fdXBcIixIdVtULmcuSGJdPVwiZnJtXCIsSHVbVC5nLmRkXT1cImxwc1wiLEh1W1QuZy5ZZF09XCJkaWRcIixIdVtULmcucmFdPVwiZGxcIixIdVtULmcuQmFdPVwiZHJcIixIdVtULmcuWmFdPVwiZHRcIixIdVtULmcudGZdPVwiZ2FfdWlkXCIsSHVbVC5nLkFjXT1cImdkcHJfY29uc2VudFwiLEh1W1QuZy56YV09XCJ1aWRcIixIdVtULmcuZWVdPVwidXNfcHJpdmFjeVwiLFxuSHVbVC5nLk1iXT1cIm5wYVwiLEh1KTt2YXIgSXU9e0s6e1NoOlwiYWRzX2NvbnZlcnNpb25faGl0XCIsQ2Q6XCJjb250YWluZXJfZXhlY3V0ZV9zdGFydFwiLFZoOlwiY29udGFpbmVyX3NldHVwX2VuZFwiLFVmOlwiY29udGFpbmVyX3NldHVwX3N0YXJ0XCIsVGg6XCJjb250YWluZXJfYmxvY2tpbmdfZW5kXCIsVWg6XCJjb250YWluZXJfZXhlY3V0ZV9lbmRcIixXaDpcImNvbnRhaW5lcl95aWVsZF9lbmRcIixWZjpcImNvbnRhaW5lcl95aWVsZF9zdGFydFwiLFhpOlwiZXZlbnRfZXhlY3V0ZV9lbmRcIixXaTpcImV2ZW50X2V2YWx1YXRpb25fZW5kXCIsTmc6XCJldmVudF9ldmFsdWF0aW9uX3N0YXJ0XCIsWWk6XCJldmVudF9zZXR1cF9lbmRcIixmZTpcImV2ZW50X3NldHVwX3N0YXJ0XCIsYWo6XCJnYTRfY29udmVyc2lvbl9oaXRcIixuZTpcInBhZ2VfbG9hZFwiLHZuOlwicGFnZXZpZXdcIixaYjpcInNuaXBwZXRfbG9hZFwiLHRqOlwidGFnX2NhbGxiYWNrX2Vycm9yXCIsdWo6XCJ0YWdfY2FsbGJhY2tfZmFpbHVyZVwiLHZqOlwidGFnX2NhbGxiYWNrX3N1Y2Nlc3NcIix3ajpcInRhZ19leGVjdXRlX2VuZFwiLFxubWQ6XCJ0YWdfZXhlY3V0ZV9zdGFydFwifX07ZnVuY3Rpb24gSnUoKXtmdW5jdGlvbiBhKGMsZCl7dmFyIGU9aWIoZCk7ZSYmYi5wdXNoKFtjLGVdKX12YXIgYj1bXTthKFwidVwiLFwiR1RNXCIpO2EoXCJ1dFwiLFwiVEFHR0lOR1wiKTthKFwiaFwiLFwiSEVBTFRIXCIpO3JldHVybiBifTt2YXIgS3U9ITE7ZnVuY3Rpb24gc3YoYSxiKXt9XG5mdW5jdGlvbiB0dihhLGIpe31mdW5jdGlvbiB1dihhLGIpe31cbmZ1bmN0aW9uIHZ2KGEsYil7fWZ1bmN0aW9uIHd2KCl7dmFyIGE9e307cmV0dXJuIGF9XG5mdW5jdGlvbiBrdihhKXthPWE9PT12b2lkIDA/ITA6YTt2YXIgYj17fTtyZXR1cm4gYn1cbmZ1bmN0aW9uIHh2KCl7fWZ1bmN0aW9uIHl2KGEsYil7fVxuZnVuY3Rpb24genYoYSxiLGMpe31cbmZ1bmN0aW9uIEF2KCl7fWZ1bmN0aW9uIEJ2KGEsYil7dmFyIGM9RCxkLGU9Yy5Hb29nbGViUWhDc087ZXx8KGU9e30sYy5Hb29nbGViUWhDc089ZSk7ZD1lO2lmKGRbYV0pcmV0dXJuITE7ZFthXT1bXTtkW2FdWzBdPWI7cmV0dXJuITB9O2Z1bmN0aW9uIEN2KGEsYixjLGQpe3ZhciBlPVZtKGEsXCJmbXRcIik7aWYoYil7dmFyIGY9Vm0oYSxcInJhbmRvbVwiKSxnPVZtKGEsXCJsYWJlbFwiKXx8XCJcIjtpZighZilyZXR1cm4hMTt2YXIgaz16dChkZWNvZGVVUklDb21wb25lbnQoZy5yZXBsYWNlKC9cXCsvZyxcIiBcIikpK1wiOlwiK2RlY29kZVVSSUNvbXBvbmVudChmLnJlcGxhY2UoL1xcKy9nLFwiIFwiKSkpO2lmKCFCdihrLGIpKXJldHVybiExfWUmJk51bWJlcihlKSE9PTQmJihhPVhtKGEsXCJyZm10XCIsZSkpO3ZhciBtPVhtKGEsXCJmbXRcIiw0KTt4YyhtLGZ1bmN0aW9uKCl7RC5nb29nbGVfbm9GdXJ0aGVyUmVkaXJlY3RzJiZiJiYoRC5nb29nbGVfbm9GdXJ0aGVyUmVkaXJlY3RzPW51bGwsYigpKX0sYyxkLEUuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCJzY3JpcHRcIilbMF0ucGFyZW50RWxlbWVudHx8dm9pZCAwKTtyZXR1cm4hMH07ZnVuY3Rpb24gVXYoYSxiKXtpZihkYXRhLmVudGl0aWVzKXt2YXIgYz1kYXRhLmVudGl0aWVzW2FdO2lmKGMpcmV0dXJuIGNbYl19fTtmdW5jdGlvbiBWdihhLGIsYyl7Yz1jPT09dm9pZCAwPyExOmM7V3YoKS5hZGRSZXN0cmljdGlvbigwLGEsYixjKX1mdW5jdGlvbiBYdihhLGIsYyl7Yz1jPT09dm9pZCAwPyExOmM7V3YoKS5hZGRSZXN0cmljdGlvbigxLGEsYixjKX1mdW5jdGlvbiBZdigpe3ZhciBhPUlqKCk7cmV0dXJuIFd2KCkuZ2V0UmVzdHJpY3Rpb25zKDEsYSl9dmFyIFp2PWZ1bmN0aW9uKCl7dGhpcy5qPXt9O3RoaXMuRD17fX0sJHY9ZnVuY3Rpb24oYSxiKXt2YXIgYz1hLmpbYl07Y3x8KGM9e19lbnRpdHk6e2ludGVybmFsOltdLGV4dGVybmFsOltdfSxfZXZlbnQ6e2ludGVybmFsOltdLGV4dGVybmFsOltdfX0sYS5qW2JdPWMpO3JldHVybiBjfTtcblp2LnByb3RvdHlwZS5hZGRSZXN0cmljdGlvbj1mdW5jdGlvbihhLGIsYyxkKXtkPWQ9PT12b2lkIDA/ITE6ZDtpZighZHx8IXRoaXMuRFtiXSl7dmFyIGU9JHYodGhpcyxiKTthPT09MD9kP2UuX2VudGl0eS5leHRlcm5hbC5wdXNoKGMpOmUuX2VudGl0eS5pbnRlcm5hbC5wdXNoKGMpOmE9PT0xJiYoZD9lLl9ldmVudC5leHRlcm5hbC5wdXNoKGMpOmUuX2V2ZW50LmludGVybmFsLnB1c2goYykpfX07XG5adi5wcm90b3R5cGUuZ2V0UmVzdHJpY3Rpb25zPWZ1bmN0aW9uKGEsYil7dmFyIGM9JHYodGhpcyxiKTtpZihhPT09MCl7dmFyIGQsZTtyZXR1cm5bXS5jb25jYXQocGEoKGM9PW51bGw/dm9pZCAwOihkPWMuX2VudGl0eSk9PW51bGw/dm9pZCAwOmQuaW50ZXJuYWwpfHxbXSkscGEoKGM9PW51bGw/dm9pZCAwOihlPWMuX2VudGl0eSk9PW51bGw/dm9pZCAwOmUuZXh0ZXJuYWwpfHxbXSkpfWlmKGE9PT0xKXt2YXIgZixnO3JldHVybltdLmNvbmNhdChwYSgoYz09bnVsbD92b2lkIDA6KGY9Yy5fZXZlbnQpPT1udWxsP3ZvaWQgMDpmLmludGVybmFsKXx8W10pLHBhKChjPT1udWxsP3ZvaWQgMDooZz1jLl9ldmVudCk9PW51bGw/dm9pZCAwOmcuZXh0ZXJuYWwpfHxbXSkpfXJldHVybltdfTtcblp2LnByb3RvdHlwZS5nZXRFeHRlcm5hbFJlc3RyaWN0aW9ucz1mdW5jdGlvbihhLGIpe3ZhciBjPSR2KHRoaXMsYiksZCxlO3JldHVybiBhPT09MD8oYz09bnVsbD92b2lkIDA6KGQ9Yy5fZW50aXR5KT09bnVsbD92b2lkIDA6ZC5leHRlcm5hbCl8fFtdOihjPT1udWxsP3ZvaWQgMDooZT1jLl9ldmVudCk9PW51bGw/dm9pZCAwOmUuZXh0ZXJuYWwpfHxbXX07WnYucHJvdG90eXBlLnJlbW92ZUV4dGVybmFsUmVzdHJpY3Rpb25zPWZ1bmN0aW9uKGEpe3ZhciBiPSR2KHRoaXMsYSk7Yi5fZXZlbnQmJihiLl9ldmVudC5leHRlcm5hbD1bXSk7Yi5fZW50aXR5JiYoYi5fZW50aXR5LmV4dGVybmFsPVtdKTt0aGlzLkRbYV09ITB9O2Z1bmN0aW9uIFd2KCl7dmFyIGE9aWkucjthfHwoYT1uZXcgWnYsaWkucj1hKTtyZXR1cm4gYX07dmFyIGF3PW5ldyBSZWdFeHAoL14oLipcXC4pPyhnb29nbGV8eW91dHViZXxibG9nZ2VyfHdpdGhnb29nbGUpKFxcLmNvbT8pPyhcXC5bYS16XXsyfSk/XFwuPyQvKSxidz17Y2w6W1wiZWNsXCJdLGN1c3RvbVBpeGVsczpbXCJub25Hb29nbGVQaXhlbHNcIl0sZWNsOltcImNsXCJdLGVobDpbXCJobFwiXSxnYWF3YzpbXCJnb29ndGFnXCJdLGhsOltcImVobFwiXSxodG1sOltcImN1c3RvbVNjcmlwdHNcIixcImN1c3RvbVBpeGVsc1wiLFwibm9uR29vZ2xlUGl4ZWxzXCIsXCJub25Hb29nbGVTY3JpcHRzXCIsXCJub25Hb29nbGVJZnJhbWVzXCJdLGN1c3RvbVNjcmlwdHM6W1wiaHRtbFwiLFwiY3VzdG9tUGl4ZWxzXCIsXCJub25Hb29nbGVQaXhlbHNcIixcIm5vbkdvb2dsZVNjcmlwdHNcIixcIm5vbkdvb2dsZUlmcmFtZXNcIl0sbm9uR29vZ2xlUGl4ZWxzOltdLG5vbkdvb2dsZVNjcmlwdHM6W1wibm9uR29vZ2xlUGl4ZWxzXCJdLG5vbkdvb2dsZUlmcmFtZXM6W1wibm9uR29vZ2xlUGl4ZWxzXCJdfSxjdz17Y2w6W1wiZWNsXCJdLGN1c3RvbVBpeGVsczpbXCJjdXN0b21TY3JpcHRzXCIsXG5cImh0bWxcIl0sZWNsOltcImNsXCJdLGVobDpbXCJobFwiXSxnYWF3YzpbXCJnb29ndGFnXCJdLGhsOltcImVobFwiXSxodG1sOltcImN1c3RvbVNjcmlwdHNcIl0sY3VzdG9tU2NyaXB0czpbXCJodG1sXCJdLG5vbkdvb2dsZVBpeGVsczpbXCJjdXN0b21QaXhlbHNcIixcImN1c3RvbVNjcmlwdHNcIixcImh0bWxcIixcIm5vbkdvb2dsZVNjcmlwdHNcIixcIm5vbkdvb2dsZUlmcmFtZXNcIl0sbm9uR29vZ2xlU2NyaXB0czpbXCJjdXN0b21TY3JpcHRzXCIsXCJodG1sXCJdLG5vbkdvb2dsZUlmcmFtZXM6W1wiY3VzdG9tU2NyaXB0c1wiLFwiaHRtbFwiLFwibm9uR29vZ2xlU2NyaXB0c1wiXX0sZHc9XCJnb29nbGUgY3VzdG9tUGl4ZWxzIGN1c3RvbVNjcmlwdHMgaHRtbCBub25Hb29nbGVQaXhlbHMgbm9uR29vZ2xlU2NyaXB0cyBub25Hb29nbGVJZnJhbWVzXCIuc3BsaXQoXCIgXCIpO1xuZnVuY3Rpb24gZXcoKXt2YXIgYT1KaShcImd0bS5hbGxvd2xpc3RcIil8fEppKFwiZ3RtLndoaXRlbGlzdFwiKTthJiZNKDkpO29pJiYoYT1bXCJnb29nbGVcIixcImd0YWdmbFwiLFwibGNsXCIsXCJ6b25lXCJdKTthdy50ZXN0KEQubG9jYXRpb24mJkQubG9jYXRpb24uaG9zdG5hbWUpJiYob2k/TSgxMTYpOihNKDExNyksZncmJihhPVtdLHdpbmRvdy5jb25zb2xlJiZ3aW5kb3cuY29uc29sZS5sb2cmJndpbmRvdy5jb25zb2xlLmxvZyhcIkdUTSBibG9ja2VkLiBTZWUgZ28vMTM2ODc3MjguXCIpKSkpO3ZhciBiPWEmJkZiKHliKGEpLGJ3KSxjPUppKFwiZ3RtLmJsb2NrbGlzdFwiKXx8SmkoXCJndG0uYmxhY2tsaXN0XCIpO2N8fChjPUppKFwidGFnVHlwZUJsYWNrbGlzdFwiKSkmJk0oMyk7Yz9NKDgpOmM9W107YXcudGVzdChELmxvY2F0aW9uJiZELmxvY2F0aW9uLmhvc3RuYW1lKSYmKGM9eWIoYyksYy5wdXNoKFwibm9uR29vZ2xlUGl4ZWxzXCIsXCJub25Hb29nbGVTY3JpcHRzXCIsXCJzYW5kYm94ZWRTY3JpcHRzXCIpKTtcbnliKGMpLmluZGV4T2YoXCJnb29nbGVcIik+PTAmJk0oMik7dmFyIGQ9YyYmRmIoeWIoYyksY3cpLGU9e307cmV0dXJuIGZ1bmN0aW9uKGYpe3ZhciBnPWYmJmZbSWUubWFdO2lmKCFnfHx0eXBlb2YgZyE9PVwic3RyaW5nXCIpcmV0dXJuITA7Zz1nLnJlcGxhY2UoL15fKi8sXCJcIik7aWYoZVtnXSE9PXZvaWQgMClyZXR1cm4gZVtnXTt2YXIgaz15aVtnXXx8W10sbT0hMDtpZihhKXt2YXIgbjtpZihuPW0pYTp7aWYoYi5pbmRleE9mKGcpPDApaWYoayYmay5sZW5ndGg+MClmb3IodmFyIHA9MDtwPGsubGVuZ3RoO3ArKyl7aWYoYi5pbmRleE9mKGtbcF0pPDApe00oMTEpO249ITE7YnJlYWsgYX19ZWxzZXtuPSExO2JyZWFrIGF9bj0hMH1tPW59dmFyIHE9ITE7aWYoYyl7dmFyIHI9ZC5pbmRleE9mKGcpPj0wO2lmKHIpcT1yO2Vsc2V7dmFyIHQ9dGIoZCxrfHxbXSk7dCYmTSgxMCk7cT10fX12YXIgdT0hbXx8cTt1fHwhKGsuaW5kZXhPZihcInNhbmRib3hlZFNjcmlwdHNcIik+PTApfHxiJiZiLmluZGV4T2YoXCJzYW5kYm94ZWRTY3JpcHRzXCIpIT09XG4tMXx8KHU9dGIoZCxkdykpO3JldHVybiBlW2ddPXV9fXZhciBmdz0hMTtmdz0hMDtmdW5jdGlvbiBndygpe0FqJiZWdihJaigpLGZ1bmN0aW9uKGEpe3ZhciBiPXVmKGEuZW50aXR5SWQpLGM7aWYoeGYoYikpe3ZhciBkPWJbSWUubWFdO2lmKCFkKXRocm93IEVycm9yKFwiRXJyb3I6IE5vIGZ1bmN0aW9uIG5hbWUgZ2l2ZW4gZm9yIGZ1bmN0aW9uIGNhbGwuXCIpO3ZhciBlPW1mW2RdO2M9ISFlJiYhIWUucnVuSW5TaWxvZWRNb2RlfWVsc2UgYz0hIVV2KGJbSWUubWFdLDQpO3JldHVybiBjfSl9ZnVuY3Rpb24gaHcoYSxiLGMsZCxlKXtpZighaXcoKSl7dmFyIGY9ZC5zaWxvZWQ/RGooYSk6YTtpZighVWooZikpe3ZhciBnPWp3KGEpLGs9R2IoYSxcIkdUTS1cIiksbT1oaigpLG49Yz9cIi9ndGFnL2pzXCI6XCIvZ3RtLmpzXCIscD1naihiLG4rZyk7aWYoIXApe3ZhciBxPWhpLkRkK247aWYobSYmcmMmJmspcT1yYy5yZXBsYWNlKC9eKD86aHR0cHM/OlxcL1xcLyk/L2ksXCJcIikuc3BsaXQoL1s/I10vKVswXSxwPUFyKFwiaHR0cHM6Ly9cIixcImh0dHA6Ly9cIixxK2cpO2Vsc2UgaWYoRGkoKSl7dmFyIHI9bjtRKDY0KSYmKHI9XCIvXCIpO3A9Q2koKStyK2d9ZWxzZSBwPUFyKFwiaHR0cHM6Ly9cIixcImh0dHA6Ly9cIixxK2cpfWQuc2lsb2VkJiZXaih7Y3RpZDpmLGlzRGVzdGluYXRpb246ITF9KTt2YXIgdD1MaigpO3hqKCkuY29udGFpbmVyW2ZdPXtzdGF0ZToxLGNvbnRleHQ6ZCxwYXJlbnQ6dH07d2ooe2N0aWQ6Zixpc0Rlc3RpbmF0aW9uOiExfSxlKTt4YyhwKX19fVxuZnVuY3Rpb24ga3coYSxiLGMsZCl7aWYoIWl3KCkpe3ZhciBlPWMuc2lsb2VkP0RqKGEpOmE7aWYoIVZqKGUpKWlmKCFjLnNpbG9lZCYmWGooKSl4aigpLmRlc3RpbmF0aW9uW2VdPXtzdGF0ZTowLHRyYW5zcG9ydFVybDpiLGNvbnRleHQ6YyxwYXJlbnQ6TGooKX0sd2ooe2N0aWQ6ZSxpc0Rlc3RpbmF0aW9uOiEwfSxkKSxNKDkxKTtlbHNle3ZhciBmPVwiL2d0YWcvZGVzdGluYXRpb25cIitqdyhhLCEwKSxnPWdqKGIsZik7Z3x8KERpKCk/KFEoNjQpJiYoZj1cIi9ndGRcIitqdyhhLCEwKSksZz1DaSgpK2YpOmc9QXIoXCJodHRwczovL1wiLFwiaHR0cDovL1wiLGhpLkRkK2YpKTtjLnNpbG9lZCYmV2ooe2N0aWQ6ZSxpc0Rlc3RpbmF0aW9uOiEwfSk7eGooKS5kZXN0aW5hdGlvbltlXT17c3RhdGU6MSxjb250ZXh0OmMscGFyZW50OkxqKCl9O3dqKHtjdGlkOmUsaXNEZXN0aW5hdGlvbjohMH0sZCk7eGMoZyl9fX1cbmZ1bmN0aW9uIGp3KGEsYil7Yj1iPT09dm9pZCAwPyExOmI7dmFyIGM9XCI/aWQ9XCIrZW5jb2RlVVJJQ29tcG9uZW50KGEpK1wiJmw9XCIraGkuaGI7aWYoIUdiKGEsXCJHVE0tXCIpfHxiKWMrPVwiJmN4PWNcIjtRKDczKSYmKGMrPVwiJmd0bT1cIitZbigpKTtoaigpJiYoYys9XCImc2lnbj1cIitoaS5TZyk7dmFyIGQ9QmkuRDtkPT09MT9jKz1cIiZmcHM9ZmNcIjpkPT09MiYmKGMrPVwiJmZwcz1mZVwiKTtyZXR1cm4gY31mdW5jdGlvbiBpdygpe2lmKFduKCkpe3JldHVybiEwfXJldHVybiExfTt2YXIgbHc9W107ZnVuY3Rpb24gbXcoKXt2YXIgYT1PZi5jdGlkO2lmKGEpe3ZhciBiPXpqLm1lPzE6MCxjLGQ9S2ooTGooKSk7Yz1kJiZkLmNvbnRleHQ7cmV0dXJuIGErXCI7XCIrT2YuY2Fub25pY2FsQ29udGFpbmVySWQrXCI7XCIrKGMmJmMuZnJvbUNvbnRhaW5lckV4ZWN1dGlvbj8xOjApK1wiO1wiKyhjJiZjLnNvdXJjZXx8MCkrXCI7XCIrYn19ZnVuY3Rpb24gbncoKXt2YXIgYT1haihELmxvY2F0aW9uLmhyZWYpO3JldHVybiBhLmhvc3RuYW1lK2EucGF0aG5hbWV9ZnVuY3Rpb24gb3coKXt2YXIgYT1udygpO2EmJmZrKFwiZGxcIixlbmNvZGVVUklDb21wb25lbnQoYSkpO2lmKFEoOTMpKXt2YXIgYj1tdygpO2ImJmZrKFwidGRwXCIsYil9ZWxzZSBmayhcInRkcFwiLGZ1bmN0aW9uKCl7cmV0dXJuIGx3Lmxlbmd0aD4wP2x3LmpvaW4oXCIuXCIpOnZvaWQgMH0pO3ZhciBjPSRtKCEwKTtjIT09dm9pZCAwJiZmayhcImZybVwiLFN0cmluZyhjKSl9O3ZhciBwdz0hMSxxdz0wLHJ3PVtdO2Z1bmN0aW9uIHN3KGEpe2lmKCFwdyl7dmFyIGI9RS5jcmVhdGVFdmVudE9iamVjdCxjPUUucmVhZHlTdGF0ZT09PVwiY29tcGxldGVcIixkPUUucmVhZHlTdGF0ZT09PVwiaW50ZXJhY3RpdmVcIjtpZighYXx8YS50eXBlIT09XCJyZWFkeXN0YXRlY2hhbmdlXCJ8fGN8fCFiJiZkKXtwdz0hMDtmb3IodmFyIGU9MDtlPHJ3Lmxlbmd0aDtlKyspRyhyd1tlXSl9cncucHVzaD1mdW5jdGlvbigpe2Zvcih2YXIgZj16YS5hcHBseSgwLGFyZ3VtZW50cyksZz0wO2c8Zi5sZW5ndGg7ZysrKUcoZltnXSk7cmV0dXJuIDB9fX1mdW5jdGlvbiB0dygpe2lmKCFwdyYmcXc8MTQwKXtxdysrO3RyeXt2YXIgYSxiOyhiPShhPUUuZG9jdW1lbnRFbGVtZW50KS5kb1Njcm9sbCk9PW51bGx8fGIuY2FsbChhLFwibGVmdFwiKTtzdygpfWNhdGNoKGMpe0Quc2V0VGltZW91dCh0dyw1MCl9fX1mdW5jdGlvbiB1dyhhKXtwdz9hKCk6cncucHVzaChhKX07ZnVuY3Rpb24gd3coYSxiLGMpe3JldHVybntlbnRpdHlUeXBlOmEsaW5kZXhJbk9yaWdpbkNvbnRhaW5lcjpiLG5hbWVJbk9yaWdpbkNvbnRhaW5lcjpjLG9yaWdpbkNvbnRhaW5lcklkOkdqKCl9fTt2YXIgeXc9ZnVuY3Rpb24oYSxiKXt0aGlzLmo9ITE7dGhpcy5NPVtdO3RoaXMuZXZlbnREYXRhPXt0YWdzOltdfTt0aGlzLlI9ITE7dGhpcy5EPXRoaXMuSD0wO3h3KHRoaXMsYSxiKX0senc9ZnVuY3Rpb24oYSxiLGMsZCl7aWYoa2kuaGFzT3duUHJvcGVydHkoYil8fGI9PT1cIl9fem9uZVwiKXJldHVybi0xO3ZhciBlPXt9O1NhKGQpJiYoZT1oKGQsZSkpO2UuaWQ9YztlLnN0YXR1cz1cInRpbWVvdXRcIjtyZXR1cm4gYS5ldmVudERhdGEudGFncy5wdXNoKGUpLTF9LEF3PWZ1bmN0aW9uKGEsYixjLGQpe3ZhciBlPWEuZXZlbnREYXRhLnRhZ3NbYl07ZSYmKGUuc3RhdHVzPWMsZS5leGVjdXRpb25UaW1lPWQpfSxCdz1mdW5jdGlvbihhKXtpZighYS5qKXtmb3IodmFyIGI9YS5NLGM9MDtjPGIubGVuZ3RoO2MrKyliW2NdKCk7YS5qPSEwO2EuTS5sZW5ndGg9MH19LHh3PWZ1bmN0aW9uKGEsYixjKXtiIT09dm9pZCAwJiZhLnVlKGIpO2MmJkQuc2V0VGltZW91dChmdW5jdGlvbigpe0J3KGEpfSxcbk51bWJlcihjKSl9O3l3LnByb3RvdHlwZS51ZT1mdW5jdGlvbihhKXt2YXIgYj10aGlzLGM9RGIoZnVuY3Rpb24oKXtHKGZ1bmN0aW9uKCl7YShHaigpLGIuZXZlbnREYXRhKX0pfSk7dGhpcy5qP2MoKTp0aGlzLk0ucHVzaChjKX07dmFyIEN3PWZ1bmN0aW9uKGEpe2EuSCsrO3JldHVybiBEYihmdW5jdGlvbigpe2EuRCsrO2EuUiYmYS5EPj1hLkgmJkJ3KGEpfSl9LER3PWZ1bmN0aW9uKGEpe2EuUj0hMDthLkQ+PWEuSCYmQncoYSl9O3ZhciBFdz17fSxHdz1mdW5jdGlvbigpe3JldHVybiBEW0Z3KCldfTtcbmZ1bmN0aW9uIEZ3KCl7cmV0dXJuIEQuR29vZ2xlQW5hbHl0aWNzT2JqZWN0fHxcImdhXCJ9XG52YXIgSnc9ZnVuY3Rpb24oKXt2YXIgYT1HaigpO30sS3c9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgYz1HdygpLGQ9YyYmYy5nZXRCeU5hbWUmJmMuZ2V0QnlOYW1lKGEpO2lmKGQpe3ZhciBlPWQuZ2V0KFwic2VuZEhpdFRhc2tcIik7ZC5zZXQoXCJzZW5kSGl0VGFza1wiLGZ1bmN0aW9uKGYpe3ZhciBnPWYuZ2V0KFwiaGl0UGF5bG9hZFwiKSxrPWYuZ2V0KFwiaGl0Q2FsbGJhY2tcIiksbT1nLmluZGV4T2YoXCImdGlkPVwiK2IpPDA7bSYmKGYuc2V0KFwiaGl0UGF5bG9hZFwiLGcucmVwbGFjZSgvJnRpZD1VQS1bMC05XSstWzAtOV0rLyxcIiZ0aWQ9XCIrYiksITApLGYuc2V0KFwiaGl0Q2FsbGJhY2tcIix2b2lkIDAsITApKTtlKGYpO1xubSYmKGYuc2V0KFwiaGl0UGF5bG9hZFwiLGcsITApLGYuc2V0KFwiaGl0Q2FsbGJhY2tcIixrLCEwKSxmLnNldChcIl94XzE5XCIsdm9pZCAwLCEwKSxlKGYpKX0pfX19O3ZhciBQdz1bXCJlc1wiLFwiMVwiXSxRdz17fSxSdz17fTtmdW5jdGlvbiBTdyhhLGIpe2lmKHFqKXt2YXIgYztjPWIubWF0Y2goL14oZ3RtfGd0YWcpXFwuLyk/ZW5jb2RlVVJJQ29tcG9uZW50KGIpOlwiKlwiO1F3W2FdPVtbXCJlXCIsY10sW1wiZWlkXCIsYV1dO2RtKGEpfX1mdW5jdGlvbiBUdyhhKXt2YXIgYj1hLmV2ZW50SWQsYz1hLmhjO2lmKCFRd1tiXSlyZXR1cm5bXTt2YXIgZD1bXTtSd1tiXXx8ZC5wdXNoKFB3KTtkLnB1c2guYXBwbHkoZCxwYShRd1tiXSkpO2MmJihSd1tiXT0hMCk7cmV0dXJuIGR9O3ZhciBVdz17fSxWdz17fSxXdz17fTtmdW5jdGlvbiBYdyhhLGIsYyxkKXtxaiYmUSg4MykmJigoZD09PXZvaWQgMD8wOmQpPyhXd1tiXT1Xd1tiXXx8MCwrK1d3W2JdKTpjIT09dm9pZCAwPyhWd1thXT1Wd1thXXx8e30sVndbYV1bYl09TWF0aC5yb3VuZChjKSk6KFV3W2FdPVV3W2FdfHx7fSxVd1thXVtiXT0oVXdbYV1bYl18fDApKzEpKX1mdW5jdGlvbiBZdyhhKXt2YXIgYj1hLmV2ZW50SWQsYz1hLmhjLGQ9VXdbYl18fHt9LGU9W10sZjtmb3IoZiBpbiBkKWQuaGFzT3duUHJvcGVydHkoZikmJmUucHVzaChcIlwiK2YrZFtmXSk7YyYmZGVsZXRlIFV3W2JdO3JldHVybiBlLmxlbmd0aD9bW1wibWRcIixlLmpvaW4oXCIuXCIpXV06W119XG5mdW5jdGlvbiBadyhhKXt2YXIgYj1hLmV2ZW50SWQsYz1hLmhjLGQ9VndbYl18fHt9LGU9W10sZjtmb3IoZiBpbiBkKWQuaGFzT3duUHJvcGVydHkoZikmJmUucHVzaChcIlwiK2YrZFtmXSk7YyYmZGVsZXRlIFZ3W2JdO3JldHVybiBlLmxlbmd0aD9bW1wibXRkXCIsZS5qb2luKFwiLlwiKV1dOltdfWZ1bmN0aW9uICR3KCl7Zm9yKHZhciBhPVtdLGI9bmEoT2JqZWN0LmtleXMoV3cpKSxjPWIubmV4dCgpOyFjLmRvbmU7Yz1iLm5leHQoKSl7dmFyIGQ9Yy52YWx1ZTthLnB1c2goXCJcIitkK1d3W2RdKX1yZXR1cm4gYS5sZW5ndGg/W1tcIm1lY1wiLGEuam9pbihcIi5cIildXTpbXX07dmFyIGF4PXt9LGJ4PXt9O2Z1bmN0aW9uIGN4KGEsYixjKXtpZihxaiYmYil7dmFyIGQ9a2ooYik7YXhbYV09YXhbYV18fFtdO2F4W2FdLnB1c2goYytkKTt2YXIgZT0oeGYoYik/XCIxXCI6XCIyXCIpK2Q7YnhbYV09YnhbYV18fFtdO2J4W2FdLnB1c2goZSk7ZG0oYSl9fWZ1bmN0aW9uIGR4KGEpe3ZhciBiPWEuZXZlbnRJZCxjPWEuaGMsZD1bXSxlPWF4W2JdfHxbXTtlLmxlbmd0aCYmZC5wdXNoKFtcInRyXCIsZS5qb2luKFwiLlwiKV0pO3ZhciBmPWJ4W2JdfHxbXTtmLmxlbmd0aCYmZC5wdXNoKFtcInRpXCIsZi5qb2luKFwiLlwiKV0pO2MmJihkZWxldGUgYXhbYl0sZGVsZXRlIGJ4W2JdKTtyZXR1cm4gZH07ZnVuY3Rpb24gZXgoYSxiLGMsZCl7dmFyIGU9a2ZbYV0sZj1meChhLGIsYyxkKTtpZighZilyZXR1cm4gbnVsbDt2YXIgZz15ZihlW0llLnNqXSxjLFtdKTtpZihnJiZnLmxlbmd0aCl7dmFyIGs9Z1swXTtmPWV4KGsuaW5kZXgse29uU3VjY2VzczpmLG9uRmFpbHVyZTprLkRqPT09MT9iLnRlcm1pbmF0ZTpmLHRlcm1pbmF0ZTpiLnRlcm1pbmF0ZX0sYyxkKX1yZXR1cm4gZn1cbmZ1bmN0aW9uIGZ4KGEsYixjLGQpe2Z1bmN0aW9uIGUoKXtmdW5jdGlvbiB3KCl7S2soMyk7dmFyIEk9QmIoKS1IO2N4KGMuaWQsZixcIjdcIik7QXcoYy5hYyxCLFwiZXhjZXB0aW9uXCIsSSk7USg3NCkmJnp2KGMsZixJdS5LLnRqKTtDfHwoQz0hMCxrKCkpfWlmKGZbSWUuUWtdKWsoKTtlbHNle3ZhciB4PXdmKGYsYyxbXSkseT14W0llLnBrXTtpZih5IT1udWxsKWZvcih2YXIgQT0wO0E8eS5sZW5ndGg7QSsrKWlmKCFXKHlbQV0pKXtrKCk7cmV0dXJufXZhciBCPXp3KGMuYWMsU3RyaW5nKGZbSWUubWFdKSxOdW1iZXIoZltJZS50ZV0pLHhbSWUuTUVUQURBVEFdKSxDPSExO3gudnRwX2d0bU9uU3VjY2Vzcz1mdW5jdGlvbigpe2lmKCFDKXtDPSEwO3ZhciBJPUJiKCktSDtjeChjLmlkLGtmW2FdLFwiNVwiKTtBdyhjLmFjLEIsXCJzdWNjZXNzXCIsSSk7USg3NCkmJnp2KGMsZixJdS5LLnZqKTtnKCl9fTt4LnZ0cF9ndG1PbkZhaWx1cmU9ZnVuY3Rpb24oKXtpZighQyl7Qz0hMDt2YXIgST1CYigpLVxuSDtjeChjLmlkLGtmW2FdLFwiNlwiKTtBdyhjLmFjLEIsXCJmYWlsdXJlXCIsSSk7USg3NCkmJnp2KGMsZixJdS5LLnVqKTtrKCl9fTt4LnZ0cF9ndG1UYWdJZD1mLnRhZ19pZDt4LnZ0cF9ndG1FdmVudElkPWMuaWQ7Yy5wcmlvcml0eUlkJiYoeC52dHBfZ3RtUHJpb3JpdHlJZD1jLnByaW9yaXR5SWQpO2N4KGMuaWQsZixcIjFcIik7USg3NCkmJnl2KGMsZik7dmFyIEg9QmIoKTt0cnl7emYoeCx7ZXZlbnQ6YyxpbmRleDphLHR5cGU6MX0pfWNhdGNoKEkpe3coSSl9USg3NCkmJnp2KGMsZixJdS5LLndqKX19dmFyIGY9a2ZbYV0sZz1iLm9uU3VjY2VzcyxrPWIub25GYWlsdXJlLG09Yi50ZXJtaW5hdGU7aWYoYy5pc0Jsb2NrZWQoZikpcmV0dXJuIG51bGw7dmFyIG49eWYoZltJZS54al0sYyxbXSk7aWYobiYmbi5sZW5ndGgpe3ZhciBwPW5bMF0scT1leChwLmluZGV4LHtvblN1Y2Nlc3M6ZyxvbkZhaWx1cmU6ayx0ZXJtaW5hdGU6bX0sYyxkKTtpZighcSlyZXR1cm4gbnVsbDtnPXE7az1wLkRqPT09XG4yP206cX1pZihmW0llLmtqXXx8ZltJZS5Ta10pe3ZhciByPWZbSWUua2pdP2xmOmMuVG0sdD1nLHU9aztpZighclthXSl7dmFyIHY9Z3goYSxyLERiKGUpKTtnPXYub25TdWNjZXNzO2s9di5vbkZhaWx1cmV9cmV0dXJuIGZ1bmN0aW9uKCl7clthXSh0LHUpfX1yZXR1cm4gZX1mdW5jdGlvbiBneChhLGIsYyl7dmFyIGQ9W10sZT1bXTtiW2FdPWh4KGQsZSxjKTtyZXR1cm57b25TdWNjZXNzOmZ1bmN0aW9uKCl7YlthXT1peDtmb3IodmFyIGY9MDtmPGQubGVuZ3RoO2YrKylkW2ZdKCl9LG9uRmFpbHVyZTpmdW5jdGlvbigpe2JbYV09ang7Zm9yKHZhciBmPTA7ZjxlLmxlbmd0aDtmKyspZVtmXSgpfX19ZnVuY3Rpb24gaHgoYSxiLGMpe3JldHVybiBmdW5jdGlvbihkLGUpe2EucHVzaChkKTtiLnB1c2goZSk7YygpfX1mdW5jdGlvbiBpeChhKXthKCl9ZnVuY3Rpb24gangoYSxiKXtiKCl9O3ZhciBteD1mdW5jdGlvbihhLGIpe2Zvcih2YXIgYz1bXSxkPTA7ZDxrZi5sZW5ndGg7ZCsrKWlmKGFbZF0pe3ZhciBlPWtmW2RdO3ZhciBmPUN3KGIuYWMpO3RyeXt2YXIgZz1leChkLHtvblN1Y2Nlc3M6ZixvbkZhaWx1cmU6Zix0ZXJtaW5hdGU6Zn0sYixkKTtpZihnKXt2YXIgaz1lW0llLm1hXTtpZighayl0aHJvdyBFcnJvcihcIkVycm9yOiBObyBmdW5jdGlvbiBuYW1lIGdpdmVuIGZvciBmdW5jdGlvbiBjYWxsLlwiKTt2YXIgbT1tZltrXTtjLnB1c2goe2ZrOmQsVWo6KG0/bS5wcmlvcml0eU92ZXJyaWRlfHwwOjApfHxVdihlW0llLm1hXSwxKXx8MCxleGVjdXRlOmd9KX1lbHNlIGt4KGQsYiksZigpfWNhdGNoKHApe2YoKX19Yy5zb3J0KGx4KTtmb3IodmFyIG49MDtuPGMubGVuZ3RoO24rKyljW25dLmV4ZWN1dGUoKTtyZXR1cm4gYy5sZW5ndGg+XG4wfTtmdW5jdGlvbiBseChhLGIpe3ZhciBjLGQ9Yi5VaixlPWEuVWo7Yz1kPmU/MTpkPGU/LTE6MDt2YXIgZjtpZihjIT09MClmPWM7ZWxzZXt2YXIgZz1hLmZrLGs9Yi5maztmPWc+az8xOmc8az8tMTowfXJldHVybiBmfVxuZnVuY3Rpb24ga3goYSxiKXtpZihxail7dmFyIGM9ZnVuY3Rpb24oZCl7dmFyIGU9Yi5pc0Jsb2NrZWQoa2ZbZF0pP1wiM1wiOlwiNFwiLGY9eWYoa2ZbZF1bSWUuc2pdLGIsW10pO2YmJmYubGVuZ3RoJiZjKGZbMF0uaW5kZXgpO2N4KGIuaWQsa2ZbZF0sZSk7dmFyIGc9eWYoa2ZbZF1bSWUueGpdLGIsW10pO2cmJmcubGVuZ3RoJiZjKGdbMF0uaW5kZXgpfTtjKGEpfX12YXIgcHg9ITEsbng7XG52YXIgdng9ZnVuY3Rpb24oYSl7dmFyIGI9YVtcImd0bS51bmlxdWVFdmVudElkXCJdLGM9YVtcImd0bS5wcmlvcml0eUlkXCJdLGQ9YS5ldmVudDtpZihRKDc0KSl7fWlmKGQ9PT1cImd0bS5qc1wiKXtpZihweClyZXR1cm4hMTtweD0hMH12YXIgZT0hMSxmPVl2KCksZz1oKGEpO2lmKCFmLmV2ZXJ5KGZ1bmN0aW9uKHQpe3JldHVybiB0KHtvcmlnaW5hbEV2ZW50RGF0YTpnfSl9KSl7aWYoZCE9PVwiZ3RtLmpzXCImJmQhPT1cImd0bS5pbml0XCImJmQhPT1cImd0bS5pbml0X2NvbnNlbnRcIilyZXR1cm4hMTtlPSEwfVN3KGIsZCk7dmFyIGs9YS5ldmVudENhbGxiYWNrLG09YS5ldmVudFRpbWVvdXQsbj17aWQ6YixcbnByaW9yaXR5SWQ6YyxuYW1lOmQsaXNCbG9ja2VkOnJ4KGcsZSksVG06W10sbG9nTWFjcm9FcnJvcjpmdW5jdGlvbigpe00oNik7S2soMCl9LGNhY2hlZE1vZGVsVmFsdWVzOnN4KCksYWM6bmV3IHl3KGZ1bmN0aW9uKCl7aWYoUSg3NCkpe31rJiZcbmsuYXBwbHkoayxbXS5zbGljZS5jYWxsKGFyZ3VtZW50cywwKSl9LG0pLG9yaWdpbmFsRXZlbnREYXRhOmd9O1EoODMpJiZxaiYmKG4ucmVwb3J0TWFjcm9EaXNjcmVwYW5jeT1Ydyk7USg3NCkmJnV2KG4uaWQsbi5uYW1lKTt2YXIgcD1GZihuKTtRKDc0KSYmdnYobi5pZCxuLm5hbWUpO2UmJihwPXR4KHApKTtpZihRKDc0KSl7fXZhciBxPW14KHAsbikscj0hMTtEdyhuLmFjKTtkIT09XCJndG0uanNcIiYmZCE9PVwiZ3RtLnN5bmNcInx8SncoKTtyZXR1cm4gdXgocCxxKXx8cn07ZnVuY3Rpb24gc3goKXt2YXIgYT17fTthLmV2ZW50PU9pKFwiZXZlbnRcIiwxKTthLmVjb21tZXJjZT1PaShcImVjb21tZXJjZVwiLDEpO2EuZ3RtPU9pKFwiZ3RtXCIpO2EuZXZlbnRNb2RlbD1PaShcImV2ZW50TW9kZWxcIik7cmV0dXJuIGF9XG5mdW5jdGlvbiByeChhLGIpe3ZhciBjPWV3KCk7cmV0dXJuIGZ1bmN0aW9uKGQpe2lmKGMoZCkpcmV0dXJuITA7dmFyIGU9ZCYmZFtJZS5tYV07aWYoIWV8fHR5cGVvZiBlIT1cInN0cmluZ1wiKXJldHVybiEwO2U9ZS5yZXBsYWNlKC9eXyovLFwiXCIpO3ZhciBmLGc9SWooKTtmPVd2KCkuZ2V0UmVzdHJpY3Rpb25zKDAsZyk7dmFyIGs9YTtiJiYoaz1oKGEpLGtbXCJndG0udW5pcXVlRXZlbnRJZFwiXT1OdW1iZXIuTUFYX1NBRkVfSU5URUdFUik7Zm9yKHZhciBtPXlpW2VdfHxbXSxuPW5hKGYpLHA9bi5uZXh0KCk7IXAuZG9uZTtwPW4ubmV4dCgpKXt2YXIgcT1wLnZhbHVlO3RyeXtpZighcSh7ZW50aXR5SWQ6ZSxzZWN1cml0eUdyb3VwczptLG9yaWdpbmFsRXZlbnREYXRhOmt9KSlyZXR1cm4hMH1jYXRjaChyKXtyZXR1cm4hMH19cmV0dXJuITF9fVxuZnVuY3Rpb24gdHgoYSl7Zm9yKHZhciBiPVtdLGM9MDtjPGEubGVuZ3RoO2MrKylpZihhW2NdKXt2YXIgZD1TdHJpbmcoa2ZbY11bSWUubWFdKTtpZihqaVtkXXx8a2ZbY11bSWUuVGtdIT09dm9pZCAwfHxVdihkLDIpKWJbY109ITB9cmV0dXJuIGJ9ZnVuY3Rpb24gdXgoYSxiKXtpZighYilyZXR1cm4gYjtmb3IodmFyIGM9MDtjPGEubGVuZ3RoO2MrKylpZihhW2NdJiZrZltjXSYmIWtpW1N0cmluZyhrZltjXVtJZS5tYV0pXSlyZXR1cm4hMDtyZXR1cm4hMX12YXIgd3g9MDtmdW5jdGlvbiB4eChhLGIpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPT09MT95eChcInNldFwiLGEpOnl4KFwic2V0XCIsYSxiKX1mdW5jdGlvbiB6eChhLGIpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPT09MT95eChcImNvbmZpZ1wiLGEpOnl4KFwiY29uZmlnXCIsYSxiKX1mdW5jdGlvbiBBeChhLGIsYyl7Yz1jfHx7fTtjW1QuZy5YYl09YTtyZXR1cm4geXgoXCJldmVudFwiLGIsYyl9ZnVuY3Rpb24geXgoKXtyZXR1cm4gYXJndW1lbnRzfTt2YXIgR3g9ZnVuY3Rpb24oKXt0aGlzLm1lc3NhZ2VzPVtdO3RoaXMuaj1bXX07R3gucHJvdG90eXBlLmVucXVldWU9ZnVuY3Rpb24oYSxiLGMpe3ZhciBkPXRoaXMubWVzc2FnZXMubGVuZ3RoKzE7YVtcImd0bS51bmlxdWVFdmVudElkXCJdPWI7YVtcImd0bS5wcmlvcml0eUlkXCJdPWQ7dmFyIGU9T2JqZWN0LmFzc2lnbih7fSxjLHtldmVudElkOmIscHJpb3JpdHlJZDpkLGZyb21Db250YWluZXJFeGVjdXRpb246ITB9KSxmPXttZXNzYWdlOmEsbm90QmVmb3JlRXZlbnRJZDpiLHByaW9yaXR5SWQ6ZCxtZXNzYWdlQ29udGV4dDplfTt0aGlzLm1lc3NhZ2VzLnB1c2goZik7Zm9yKHZhciBnPTA7Zzx0aGlzLmoubGVuZ3RoO2crKyl0cnl7dGhpcy5qW2ddKGYpfWNhdGNoKGspe319O0d4LnByb3RvdHlwZS5saXN0ZW49ZnVuY3Rpb24oYSl7dGhpcy5qLnB1c2goYSl9O1xuR3gucHJvdG90eXBlLmdldD1mdW5jdGlvbigpe2Zvcih2YXIgYT17fSxiPTA7Yjx0aGlzLm1lc3NhZ2VzLmxlbmd0aDtiKyspe3ZhciBjPXRoaXMubWVzc2FnZXNbYl0sZD1hW2Mubm90QmVmb3JlRXZlbnRJZF07ZHx8KGQ9W10sYVtjLm5vdEJlZm9yZUV2ZW50SWRdPWQpO2QucHVzaChjKX1yZXR1cm4gYX07R3gucHJvdG90eXBlLnBydW5lPWZ1bmN0aW9uKGEpe2Zvcih2YXIgYj1bXSxjPVtdLGQ9MDtkPHRoaXMubWVzc2FnZXMubGVuZ3RoO2QrKyl7dmFyIGU9dGhpcy5tZXNzYWdlc1tkXTtlLm5vdEJlZm9yZUV2ZW50SWQ9PT1hP2IucHVzaChlKTpjLnB1c2goZSl9dGhpcy5tZXNzYWdlcz1jO3JldHVybiBifTtmdW5jdGlvbiBIeChhLGIsYyl7Yy5ldmVudE1ldGFkYXRhPWMuZXZlbnRNZXRhZGF0YXx8e307Yy5ldmVudE1ldGFkYXRhLnNvdXJjZV9jYW5vbmljYWxfaWQ9T2YuY2Fub25pY2FsQ29udGFpbmVySWQ7SXgoKS5lbnF1ZXVlKGEsYixjKX1cbmZ1bmN0aW9uIEp4KCl7dmFyIGE9S3g7SXgoKS5saXN0ZW4oYSl9ZnVuY3Rpb24gSXgoKXt2YXIgYT1paS5tYjthfHwoYT1uZXcgR3gsaWkubWI9YSk7cmV0dXJuIGF9O3ZhciBMeD17fSxNeD17fTtmdW5jdGlvbiBOeChhLGIpe2Zvcih2YXIgYz1bXSxkPVtdLGU9e30sZj0wO2Y8YS5sZW5ndGg7ZT17RWg6dm9pZCAwLG5oOnZvaWQgMH0sZisrKXt2YXIgZz1hW2ZdO2lmKGcuaW5kZXhPZihcIi1cIik+PTApe2lmKGUuRWg9amwoZyxiKSxlLkVoKXt2YXIgaz1FaigpO3JiKGssZnVuY3Rpb24ocil7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiByLkVoLmRlc3RpbmF0aW9uSWQ9PT10fX0oZSkpP2MucHVzaChnKTpkLnB1c2goZyl9fWVsc2V7dmFyIG09THhbZ118fFtdO2Uubmg9e307bS5mb3JFYWNoKGZ1bmN0aW9uKHIpe3JldHVybiBmdW5jdGlvbih0KXtyLm5oW3RdPSEwfX0oZSkpO2Zvcih2YXIgbj1CaigpLHA9MDtwPG4ubGVuZ3RoO3ArKylpZihlLm5oW25bcF1dKXtjPWMuY29uY2F0KEVqKCkpO2JyZWFrfXZhciBxPU14W2ddfHxbXTtxLmxlbmd0aCYmKGM9Yy5jb25jYXQocSkpfX1yZXR1cm57a206YyxvbTpkfX1cbmZ1bmN0aW9uIE94KGEpe3ooTHgsZnVuY3Rpb24oYixjKXt2YXIgZD1jLmluZGV4T2YoYSk7ZD49MCYmYy5zcGxpY2UoZCwxKX0pfWZ1bmN0aW9uIFB4KGEpe3ooTXgsZnVuY3Rpb24oYixjKXt2YXIgZD1jLmluZGV4T2YoYSk7ZD49MCYmYy5zcGxpY2UoZCwxKX0pfXZhciBReD1cIkhBIEdGIEcgVUEgQVcgREMgTUNcIi5zcGxpdChcIiBcIiksUng9ITEsU3g9ITEsVHg9ITEsVXg9ITE7ZnVuY3Rpb24gVngoYSxiKXthLmhhc093blByb3BlcnR5KFwiZ3RtLnVuaXF1ZUV2ZW50SWRcIil8fE9iamVjdC5kZWZpbmVQcm9wZXJ0eShhLFwiZ3RtLnVuaXF1ZUV2ZW50SWRcIix7dmFsdWU6emkoKX0pO2IuZXZlbnRJZD1hW1wiZ3RtLnVuaXF1ZUV2ZW50SWRcIl07Yi5wcmlvcml0eUlkPWFbXCJndG0ucHJpb3JpdHlJZFwiXTtyZXR1cm57ZXZlbnRJZDpiLmV2ZW50SWQscHJpb3JpdHlJZDpiLnByaW9yaXR5SWR9fXZhciBXeD12b2lkIDAsWHg9dm9pZCAwO1xuZnVuY3Rpb24gWXgoYSxiLGMpe3ZhciBkPWgoYSxudWxsKTtkLmV2ZW50SWQ9dm9pZCAwO2QuaW5oZXJpdFBhcmVudENvbmZpZz12b2lkIDA7T2JqZWN0LmtleXMoYikuc29tZShmdW5jdGlvbihmKXtyZXR1cm4gYltmXSE9PXZvaWQgMH0pJiZNKDEzNik7dmFyIGU9aChiLG51bGwpO2goYyxlKTtIeCh6eChCaigpWzBdLGUpLGEuZXZlbnRJZCxkKX1mdW5jdGlvbiBaeChhKXtmb3IodmFyIGI9bmEoW1QuZy5oZCxULmcuTGJdKSxjPWIubmV4dCgpOyFjLmRvbmU7Yz1iLm5leHQoKSl7dmFyIGQ9Yy52YWx1ZSxlPWEmJmFbZF18fGxtLmpbZF07aWYoZSlyZXR1cm4gZX19XG52YXIgJHg9W1QuZy5oZCxULmcuTGIsVC5nLnVjLFQuZy5uYixULmcudWIsVC5nLnphLFQuZy5xYSxULmcuTmEsVC5nLlZhLFQuZy5GYl0sYXk9e2NvbmZpZzpmdW5jdGlvbihhLGIpe3ZhciBjPVZ4KGEsYik7aWYoIShhLmxlbmd0aDwyKSYmbChhWzFdKSl7dmFyIGQ9e307aWYoYS5sZW5ndGg+Mil7aWYoYVsyXSE9PXZvaWQgMCYmIVNhKGFbMl0pfHxhLmxlbmd0aD4zKXJldHVybjtkPWFbMl19dmFyIGU9amwoYVsxXSxiLmlzR3RtRXZlbnQpO2lmKGUpe3ZhciBmLGcsazthOntpZighemoubWUpe3ZhciBtPUtqKExqKCkpO2lmKFpqKG0pKXt2YXIgbj1tLnBhcmVudCxwPW4uaXNEZXN0aW5hdGlvbjtrPXt6bTpLaihuKSxqbTpwfTticmVhayBhfX1rPXZvaWQgMH12YXIgcT1rO3EmJihmPXEuem0sZz1xLmptKTtTdyhjLmV2ZW50SWQsXCJndGFnLmNvbmZpZ1wiKTt2YXIgcj1lLmRlc3RpbmF0aW9uSWQsdD1lLmlkIT09cjtpZih0P0VqKCkuaW5kZXhPZihyKT09PS0xOkJqKCkuaW5kZXhPZihyKT09PVxuLTEpe2lmKCFiLmluaGVyaXRQYXJlbnRDb25maWcmJiFkW1QuZy5JYl0pe3ZhciB1PVp4KGQpO2lmKHQpa3cocix1LHtzb3VyY2U6Mixmcm9tQ29udGFpbmVyRXhlY3V0aW9uOmIuZnJvbUNvbnRhaW5lckV4ZWN1dGlvbn0pO2Vsc2UgaWYoZiE9PXZvaWQgMCYmZi5jb250YWluZXJzLmluZGV4T2YocikhPT0tMSl7dmFyIHY9ZDtXeD9ZeChiLHYsV3gpOlh4fHwoWHg9aCh2LG51bGwpKX1lbHNlIGh3KHIsdSwhMCx7c291cmNlOjIsZnJvbUNvbnRhaW5lckV4ZWN1dGlvbjpiLmZyb21Db250YWluZXJFeGVjdXRpb259KX19ZWxzZXtpZihmJiYoTSgxMjgpLGcmJk0oMTMwKSxiLmluaGVyaXRQYXJlbnRDb25maWcpKXt2YXIgdzt2YXIgeD1kO1h4PyhZeChiLFh4LHgpLHc9ITEpOigheFtULmcuWWJdJiZtaSYmV3h8fChXeD1oKHgsbnVsbCkpLHc9ITApO3cmJmYuY29udGFpbmVycyYmZi5jb250YWluZXJzLmpvaW4oXCIsXCIpO3JldHVybn12YXIgeT1kO2lmKCFUeCYmKFR4PSEwLFN4KSlmb3IodmFyIEE9XG5uYSgkeCksQj1BLm5leHQoKTshQi5kb25lO0I9QS5uZXh0KCkpaWYoeS5oYXNPd25Qcm9wZXJ0eShCLnZhbHVlKSl7SmsoXCJlcmNcIik7YnJlYWt9cmomJiFBaiYmKHd4PT09MSYmKGRrLm1jYz0hMSksd3g9Mik7R2s9ITA7aWYobWkmJiF0JiYhZFtULmcuWWJdKXt2YXIgQz1VeDtVeD0hMDtpZihDKXJldHVybn1SeHx8TSg0Myk7aWYoIWIubm9UYXJnZXRHcm91cClpZih0KXtQeChlLmlkKTt2YXIgSD1lLmlkLEk9ZFtULmcuV2RdfHxcImRlZmF1bHRcIjtJPVN0cmluZyhJKS5zcGxpdChcIixcIik7Zm9yKHZhciBGPTA7RjxJLmxlbmd0aDtGKyspe3ZhciBPPU14W0lbRl1dfHxbXTtNeFtJW0ZdXT1PO08uaW5kZXhPZihIKTwwJiZPLnB1c2goSCl9fWVsc2V7T3goZS5pZCk7dmFyIE49ZS5pZCxTPWRbVC5nLldkXXx8XCJkZWZhdWx0XCI7Uz1TLnRvU3RyaW5nKCkuc3BsaXQoXCIsXCIpO2Zvcih2YXIgVj0wO1Y8Uy5sZW5ndGg7VisrKXt2YXIgYWE9THhbU1tWXV18fFtdO0x4W1NbVl1dPWFhO2FhLmluZGV4T2YoTik8XG4wJiZhYS5wdXNoKE4pfX1kZWxldGUgZFtULmcuV2RdO3ZhciBYPWIuZXZlbnRNZXRhZGF0YXx8e307WC5oYXNPd25Qcm9wZXJ0eShcImlzX2V4dGVybmFsX2V2ZW50XCIpfHwoWC5pc19leHRlcm5hbF9ldmVudD0hYi5mcm9tQ29udGFpbmVyRXhlY3V0aW9uKTtiLmV2ZW50TWV0YWRhdGE9WDtkZWxldGUgZFtULmcuWmNdO2Zvcih2YXIgUj10P1tlLmlkXTpFaigpLG1hPTA7bWE8Ui5sZW5ndGg7bWErKyl7dmFyIGxhPWQsZWE9UlttYV0sd2E9aChiLG51bGwpLE9hPWpsKGVhLHdhLmlzR3RtRXZlbnQpO09hJiZsbS5wdXNoKFwiY29uZmlnXCIsW2xhXSxPYSx3YSl9fX19fSxjb25zZW50OmZ1bmN0aW9uKGEsYil7aWYoYS5sZW5ndGg9PT0zKXtNKDM5KTt2YXIgYz1WeChhLGIpLGQ9YVsxXSxlPWFbMl07Yi5mcm9tQ29udGFpbmVyRXhlY3V0aW9ufHwoZVtULmcuT10mJk0oMTM5KSxlW1QuZy53YV0mJk0oMTQwKSk7ZD09PVwiZGVmYXVsdFwiP1hrKGUpOmQ9PT1cInVwZGF0ZVwiP1prKGUsYyk6ZD09PVxuXCJkZWNsYXJlXCImJmIuZnJvbUNvbnRhaW5lckV4ZWN1dGlvbiYmV2soZSl9fSxldmVudDpmdW5jdGlvbihhLGIpe3ZhciBjPWFbMV07aWYoIShhLmxlbmd0aDwyKSYmbChjKSl7dmFyIGQ9dm9pZCAwO2lmKGEubGVuZ3RoPjIpe2lmKCFTYShhWzJdKSYmYVsyXSE9PXZvaWQgMHx8YS5sZW5ndGg+MylyZXR1cm47ZD1hWzJdfXZhciBlPWQsZj17fSxnPShmLmV2ZW50PWMsZik7ZSYmKGcuZXZlbnRNb2RlbD1oKGUsbnVsbCksZVtULmcuWmNdJiYoZy5ldmVudENhbGxiYWNrPWVbVC5nLlpjXSksZVtULmcuVGRdJiYoZy5ldmVudFRpbWVvdXQ9ZVtULmcuVGRdKSk7dmFyIGs9VngoYSxiKSxtPWsuZXZlbnRJZCxuPWsucHJpb3JpdHlJZDtnW1wiZ3RtLnVuaXF1ZUV2ZW50SWRcIl09bTtuJiYoZ1tcImd0bS5wcmlvcml0eUlkXCJdPW4pO2lmKGM9PT1cIm9wdGltaXplLmNhbGxiYWNrXCIpcmV0dXJuIGcuZXZlbnRNb2RlbD1nLmV2ZW50TW9kZWx8fHt9LGc7dmFyIHA7dmFyIHE9ZCxyPXEmJnFbVC5nLlhiXTtcbnI9PT12b2lkIDAmJihyPUppKFQuZy5YYiwyKSxyPT09dm9pZCAwJiYocj1cImRlZmF1bHRcIikpO2lmKGwocil8fEFycmF5LmlzQXJyYXkocikpe3ZhciB0O3Q9Yi5pc0d0bUV2ZW50P2wocik/W3JdOnI6ci50b1N0cmluZygpLnJlcGxhY2UoL1xccysvZyxcIlwiKS5zcGxpdChcIixcIik7dmFyIHU9TngodCxiLmlzR3RtRXZlbnQpLHY9dS5rbSx3PXUub207aWYody5sZW5ndGgpZm9yKHZhciB4PVp4KHEpLHk9MDt5PHcubGVuZ3RoO3krKyl7dmFyIEE9amwod1t5XSxiLmlzR3RtRXZlbnQpO0EmJmt3KEEuZGVzdGluYXRpb25JZCx4LHtzb3VyY2U6Myxmcm9tQ29udGFpbmVyRXhlY3V0aW9uOmIuZnJvbUNvbnRhaW5lckV4ZWN1dGlvbn0pfXA9a2wodixiLmlzR3RtRXZlbnQpfWVsc2UgcD12b2lkIDA7dmFyIEI9cDtpZihCKXt2YXIgQzshQi5sZW5ndGh8fCgoQz1iLmV2ZW50TWV0YWRhdGEpPT1udWxsPzA6Qy5lbV9ldmVudCl8fChTeD0hMCk7U3cobSxjKTtmb3IodmFyIEg9W10sST0wO0k8Qi5sZW5ndGg7SSsrKXt2YXIgRj1cbkJbSV0sTz1oKGIsbnVsbCk7aWYoUXguaW5kZXhPZihNaihGLnByZWZpeCkpIT09LTEpe3ZhciBOPWgoZCxudWxsKSxTPU8uZXZlbnRNZXRhZGF0YXx8e307Uy5oYXNPd25Qcm9wZXJ0eShcImlzX2V4dGVybmFsX2V2ZW50XCIpfHwoUy5pc19leHRlcm5hbF9ldmVudD0hTy5mcm9tQ29udGFpbmVyRXhlY3V0aW9uKTtPLmV2ZW50TWV0YWRhdGE9UztkZWxldGUgTltULmcuWmNdO21tKGMsTixGLmlkLE8pO3JqJiYhQWomJnd4PT09MCYmKGZrKFwibWNjXCIsXCIxXCIpLHd4PTEpO0drPSEwfUgucHVzaChGLmlkKX1nLmV2ZW50TW9kZWw9Zy5ldmVudE1vZGVsfHx7fTtCLmxlbmd0aD4wP2cuZXZlbnRNb2RlbFtULmcuWGJdPUguam9pbigpOmRlbGV0ZSBnLmV2ZW50TW9kZWxbVC5nLlhiXTtSeHx8TSg0Myk7Yi5ub0d0bUV2ZW50PT09dm9pZCAwJiZiLmV2ZW50TWV0YWRhdGEmJmIuZXZlbnRNZXRhZGF0YS5zeW5fb3JfbW9kJiYoYi5ub0d0bUV2ZW50PSEwKTtnLmV2ZW50TW9kZWxbVC5nLlZiXSYmKGIubm9HdG1FdmVudD1cbiEwKTtyZXR1cm4gYi5ub0d0bUV2ZW50P3ZvaWQgMDpnfX19LGdldDpmdW5jdGlvbihhLGIpe00oNTMpO2lmKGEubGVuZ3RoPT09NCYmbChhWzFdKSYmbChhWzJdKSYmb2IoYVszXSkpe3ZhciBjPWpsKGFbMV0sYi5pc0d0bUV2ZW50KSxkPVN0cmluZyhhWzJdKSxlPWFbM107aWYoYyl7Unh8fE0oNDMpO3ZhciBmPVp4KCk7aWYoIXJiKEVqKCksZnVuY3Rpb24oayl7cmV0dXJuIGMuZGVzdGluYXRpb25JZD09PWt9KSlrdyhjLmRlc3RpbmF0aW9uSWQsZix7c291cmNlOjQsZnJvbUNvbnRhaW5lckV4ZWN1dGlvbjpiLmZyb21Db250YWluZXJFeGVjdXRpb259KTtlbHNlIGlmKFF4LmluZGV4T2YoTWooYy5wcmVmaXgpKSE9PS0xKXtHaz0hMDtWeChhLGIpO3ZhciBnPXt9O2goKGdbVC5nLnJiXT1kLGdbVC5nLkdiXT1lLGcpLG51bGwpO25tKGQsZnVuY3Rpb24oayl7RyhmdW5jdGlvbigpe2Uoayl9KX0sYy5pZCxiKX19fX0sanM6ZnVuY3Rpb24oYSxiKXtpZihhLmxlbmd0aD09PTImJmFbMV0uZ2V0VGltZSl7Ung9XG4hMDt2YXIgYz1WeChhLGIpLGQ9Yy5ldmVudElkLGU9Yy5wcmlvcml0eUlkLGY9e307cmV0dXJuIGYuZXZlbnQ9XCJndG0uanNcIixmW1wiZ3RtLnN0YXJ0XCJdPWFbMV0uZ2V0VGltZSgpLGZbXCJndG0udW5pcXVlRXZlbnRJZFwiXT1kLGZbXCJndG0ucHJpb3JpdHlJZFwiXT1lLGZ9fSxwb2xpY3k6ZnVuY3Rpb24oYSl7aWYoYS5sZW5ndGg9PT0zJiZsKGFbMV0pJiZvYihhWzJdKSl7aWYoTGYoYVsxXSxhWzJdKSxNKDc0KSxhWzFdPT09XCJhbGxcIil7TSg3NSk7dmFyIGI9ITE7dHJ5e2I9YVsyXShHaigpLFwidW5rbm93blwiLHt9KX1jYXRjaChjKXt9Ynx8TSg3Nil9fWVsc2UgTSg3Myl9LHNldDpmdW5jdGlvbihhLGIpe3ZhciBjPXZvaWQgMDthLmxlbmd0aD09PTImJlNhKGFbMV0pP2M9aChhWzFdLG51bGwpOmEubGVuZ3RoPT09MyYmbChhWzFdKSYmKGM9e30sU2EoYVsyXSl8fEFycmF5LmlzQXJyYXkoYVsyXSk/Y1thWzFdXT1oKGFbMl0sbnVsbCk6Y1thWzFdXT1hWzJdKTtpZihjKXt2YXIgZD1WeChhLFxuYiksZT1kLmV2ZW50SWQsZj1kLnByaW9yaXR5SWQ7aChjLG51bGwpO3ZhciBnPWgoYyxudWxsKTtsbS5wdXNoKFwic2V0XCIsW2ddLHZvaWQgMCxiKTtjW1wiZ3RtLnVuaXF1ZUV2ZW50SWRcIl09ZTtmJiYoY1tcImd0bS5wcmlvcml0eUlkXCJdPWYpO2RlbGV0ZSBjLmV2ZW50O2Iub3ZlcndyaXRlTW9kZWxGaWVsZHM9ITA7cmV0dXJuIGN9fX0sYnk9e3BvbGljeTohMH07dmFyIGR5PWZ1bmN0aW9uKGEpe2lmKGN5KGEpKXJldHVybiBhO3RoaXMudmFsdWU9YX07ZHkucHJvdG90eXBlLmdldFVudHJ1c3RlZE1lc3NhZ2VWYWx1ZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLnZhbHVlfTt2YXIgY3k9ZnVuY3Rpb24oYSl7cmV0dXJuIWF8fFFhKGEpIT09XCJvYmplY3RcInx8U2EoYSk/ITE6XCJnZXRVbnRydXN0ZWRNZXNzYWdlVmFsdWVcImluIGF9O2R5LnByb3RvdHlwZS5nZXRVbnRydXN0ZWRNZXNzYWdlVmFsdWU9ZHkucHJvdG90eXBlLmdldFVudHJ1c3RlZE1lc3NhZ2VWYWx1ZTt2YXIgZXk9ITEsZnk9W107ZnVuY3Rpb24gZ3koKXtpZighZXkpe2V5PSEwO2Zvcih2YXIgYT0wO2E8ZnkubGVuZ3RoO2ErKylHKGZ5W2FdKX19ZnVuY3Rpb24gaHkoYSl7ZXk/RyhhKTpmeS5wdXNoKGEpfTt2YXIgaXk9MCxqeT17fSxreT1bXSxseT1bXSxteT0hMSxueT0hMTtmdW5jdGlvbiBveShhLGIpe3JldHVybiBhLm1lc3NhZ2VDb250ZXh0LmV2ZW50SWQtYi5tZXNzYWdlQ29udGV4dC5ldmVudElkfHxhLm1lc3NhZ2VDb250ZXh0LnByaW9yaXR5SWQtYi5tZXNzYWdlQ29udGV4dC5wcmlvcml0eUlkfVxudmFyIHB5PWZ1bmN0aW9uKGEpe3JldHVybiBEW2hpLmhiXS5wdXNoKGEpfSxxeT1mdW5jdGlvbihhLGIsYyl7YS5ldmVudENhbGxiYWNrPWI7YyYmKGEuZXZlbnRUaW1lb3V0PWMpO3JldHVybiBweShhKX0scnk9ZnVuY3Rpb24oYSxiKXtpZighcGIoYil8fGI8MCliPTA7dmFyIGM9aWlbaGkuaGJdLGQ9MCxlPSExLGY9dm9pZCAwO2Y9RC5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7ZXx8KGU9ITAsYSgpKTtmPXZvaWQgMH0sYik7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGc9Yz9jLnN1YnNjcmliZXJzOjE7KytkPT09ZyYmKGYmJihELmNsZWFyVGltZW91dChmKSxmPXZvaWQgMCksZXx8KGEoKSxlPSEwKSl9fTtcbmZ1bmN0aW9uIHN5KGEsYil7dmFyIGM9YS5fY2xlYXJ8fGIub3ZlcndyaXRlTW9kZWxGaWVsZHM7eihhLGZ1bmN0aW9uKGUsZil7ZSE9PVwiX2NsZWFyXCImJihjJiZNaShlKSxNaShlLGYpKX0pO3ZpfHwodmk9YVtcImd0bS5zdGFydFwiXSk7dmFyIGQ9YVtcImd0bS51bmlxdWVFdmVudElkXCJdO2lmKCFhLmV2ZW50KXJldHVybiExO3R5cGVvZiBkIT09XCJudW1iZXJcIiYmKGQ9emkoKSxhW1wiZ3RtLnVuaXF1ZUV2ZW50SWRcIl09ZCxNaShcImd0bS51bmlxdWVFdmVudElkXCIsZCkpO3JldHVybiB2eChhKX1mdW5jdGlvbiB0eShhKXtpZihhPT1udWxsfHx0eXBlb2YgYSE9PVwib2JqZWN0XCIpcmV0dXJuITE7aWYoYS5ldmVudClyZXR1cm4hMDtpZih2YihhKSl7dmFyIGI9YVswXTtpZihiPT09XCJjb25maWdcInx8Yj09PVwiZXZlbnRcInx8Yj09PVwianNcInx8Yj09PVwiZ2V0XCIpcmV0dXJuITB9cmV0dXJuITF9XG5mdW5jdGlvbiB1eSgpe3ZhciBhO2lmKGx5Lmxlbmd0aClhPWx5LnNoaWZ0KCk7ZWxzZSBpZihreS5sZW5ndGgpYT1reS5zaGlmdCgpO2Vsc2UgcmV0dXJuO3ZhciBiO3ZhciBjPWE7aWYobXl8fCF0eShjLm1lc3NhZ2UpKWI9YztlbHNle215PSEwO3ZhciBkPWMubWVzc2FnZVtcImd0bS51bmlxdWVFdmVudElkXCJdO3R5cGVvZiBkIT09XCJudW1iZXJcIiYmKGQ9Yy5tZXNzYWdlW1wiZ3RtLnVuaXF1ZUV2ZW50SWRcIl09emkoKSk7dmFyIGU9e30sZj17bWVzc2FnZTooZS5ldmVudD1cImd0bS5pbml0X2NvbnNlbnRcIixlW1wiZ3RtLnVuaXF1ZUV2ZW50SWRcIl09ZC0yLGUpLG1lc3NhZ2VDb250ZXh0OntldmVudElkOmQtMn19LGc9e30saz17bWVzc2FnZTooZy5ldmVudD1cImd0bS5pbml0XCIsZ1tcImd0bS51bmlxdWVFdmVudElkXCJdPWQtMSxnKSxtZXNzYWdlQ29udGV4dDp7ZXZlbnRJZDpkLTF9fTtreS51bnNoaWZ0KGssYyk7aWYocmope2lmKCFRKDkzKSl7dmFyIG09bXcoKTttJiZsdy5wdXNoKG0pfWprKCl9Yj1cbmZ9cmV0dXJuIGJ9XG5mdW5jdGlvbiB2eSgpe2Zvcih2YXIgYT0hMSxiOyFueSYmKGI9dXkoKSk7KXtueT0hMDtkZWxldGUgR2kuZXZlbnRNb2RlbDtJaSgpO3ZhciBjPWIsZD1jLm1lc3NhZ2UsZT1jLm1lc3NhZ2VDb250ZXh0O2lmKGQ9PW51bGwpbnk9ITE7ZWxzZXtlLmZyb21Db250YWluZXJFeGVjdXRpb24mJk5pKCk7dHJ5e2lmKG9iKGQpKXRyeXtkLmNhbGwoS2kpfWNhdGNoKHYpe31lbHNlIGlmKEFycmF5LmlzQXJyYXkoZCkpe3ZhciBmPWQ7aWYobChmWzBdKSl7dmFyIGc9ZlswXS5zcGxpdChcIi5cIiksaz1nLnBvcCgpLG09Zi5zbGljZSgxKSxuPUppKGcuam9pbihcIi5cIiksMik7aWYobiE9bnVsbCl0cnl7bltrXS5hcHBseShuLG0pfWNhdGNoKHYpe319fWVsc2V7dmFyIHA9dm9pZCAwO2lmKHZiKGQpKWE6e2lmKGQubGVuZ3RoJiZsKGRbMF0pKXt2YXIgcT1heVtkWzBdXTtpZihxJiYoIWUuZnJvbUNvbnRhaW5lckV4ZWN1dGlvbnx8IWJ5W2RbMF1dKSl7cD1xKGQsZSk7YnJlYWsgYX19cD12b2lkIDB9ZWxzZSBwPVxuZDtwJiYoYT1zeShwLGUpfHxhKX19ZmluYWxseXtlLmZyb21Db250YWluZXJFeGVjdXRpb24mJklpKCEwKTt2YXIgcj1kW1wiZ3RtLnVuaXF1ZUV2ZW50SWRcIl07aWYodHlwZW9mIHI9PT1cIm51bWJlclwiKXtmb3IodmFyIHQ9anlbU3RyaW5nKHIpXXx8W10sdT0wO3U8dC5sZW5ndGg7dSsrKWx5LnB1c2god3kodFt1XSkpO3QubGVuZ3RoJiZseS5zb3J0KG95KTtkZWxldGUganlbU3RyaW5nKHIpXTtyPml5JiYoaXk9cil9bnk9ITF9fX1yZXR1cm4hYX1cbmZ1bmN0aW9uIHh5KCl7aWYoUSg3NCkpe3ZhciBhPXl5KCk7fXZhciBiPXZ5KCk7aWYoUSg3NCkpe310cnl7dmFyIGM9R2ooKSxkPURbaGkuaGJdLmhpZGU7aWYoZCYmZFtjXSE9PXZvaWQgMCYmZC5lbmQpe2RbY109ITE7dmFyIGU9ITAsZjtmb3IoZiBpbiBkKWlmKGQuaGFzT3duUHJvcGVydHkoZikmJmRbZl09PT1cbiEwKXtlPSExO2JyZWFrfWUmJihkLmVuZCgpLGQuZW5kPW51bGwpfX1jYXRjaChnKXt9cmV0dXJuIGJ9ZnVuY3Rpb24gS3goYSl7aWYoaXk8YS5ub3RCZWZvcmVFdmVudElkKXt2YXIgYj1TdHJpbmcoYS5ub3RCZWZvcmVFdmVudElkKTtqeVtiXT1qeVtiXXx8W107anlbYl0ucHVzaChhKX1lbHNlIGx5LnB1c2god3koYSkpLGx5LnNvcnQob3kpLEcoZnVuY3Rpb24oKXtueXx8dnkoKX0pfWZ1bmN0aW9uIHd5KGEpe3JldHVybnttZXNzYWdlOmEubWVzc2FnZSxtZXNzYWdlQ29udGV4dDphLm1lc3NhZ2VDb250ZXh0fX1cbnZhciB6eT1mdW5jdGlvbigpe2Z1bmN0aW9uIGEoZil7dmFyIGc9e307aWYoY3koZikpe3ZhciBrPWY7Zj1jeShrKT9rLmdldFVudHJ1c3RlZE1lc3NhZ2VWYWx1ZSgpOnZvaWQgMDtnLmZyb21Db250YWluZXJFeGVjdXRpb249ITB9cmV0dXJue21lc3NhZ2U6ZixtZXNzYWdlQ29udGV4dDpnfX12YXIgYj1zYyhoaS5oYixbXSksYz1paVtoaS5oYl09aWlbaGkuaGJdfHx7fTtjLnBydW5lZD09PSEwJiZNKDgzKTtqeT1JeCgpLmdldCgpO0p4KCk7dXcoZnVuY3Rpb24oKXtpZighYy5ndG1Eb20pe2MuZ3RtRG9tPSEwO3ZhciBmPXt9O2IucHVzaCgoZi5ldmVudD1cImd0bS5kb21cIixmKSl9fSk7aHkoZnVuY3Rpb24oKXtpZighYy5ndG1Mb2FkKXtjLmd0bUxvYWQ9ITA7dmFyIGY9e307Yi5wdXNoKChmLmV2ZW50PVwiZ3RtLmxvYWRcIixmKSl9fSk7Yy5zdWJzY3JpYmVycz0oYy5zdWJzY3JpYmVyc3x8MCkrMTt2YXIgZD1iLnB1c2g7Yi5wdXNoPWZ1bmN0aW9uKCl7dmFyIGY7aWYoaWkuU0FOREJPWEVEX0pTX1NFTUFQSE9SRT5cbjApe2Y9W107Zm9yKHZhciBnPTA7Zzxhcmd1bWVudHMubGVuZ3RoO2crKylmW2ddPW5ldyBkeShhcmd1bWVudHNbZ10pfWVsc2UgZj1bXS5zbGljZS5jYWxsKGFyZ3VtZW50cywwKTt2YXIgaz1mLm1hcChmdW5jdGlvbihxKXtyZXR1cm4gYShxKX0pO2t5LnB1c2guYXBwbHkoa3ksayk7dmFyIG09ZC5hcHBseShiLGYpLG49TWF0aC5tYXgoMTAwLE51bWJlcihcIjEwMDBcIil8fDMwMCk7aWYodGhpcy5sZW5ndGg+bilmb3IoTSg0KSxjLnBydW5lZD0hMDt0aGlzLmxlbmd0aD5uOyl0aGlzLnNoaWZ0KCk7dmFyIHA9dHlwZW9mIG0hPT1cImJvb2xlYW5cInx8bTtyZXR1cm4gdnkoKSYmcH07dmFyIGU9Yi5zbGljZSgwKS5tYXAoZnVuY3Rpb24oZil7cmV0dXJuIGEoZil9KTtreS5wdXNoLmFwcGx5KGt5LGUpO2lmKHl5KCkpe2lmKFEoNzQpKXt9Ryh4eSl9fSx5eT1mdW5jdGlvbigpe3ZhciBhPSEwO2E9ITE7cmV0dXJuIGF9O2Z1bmN0aW9uIEF5KGEpe2lmKGE9PW51bGx8fGEubGVuZ3RoPT09MClyZXR1cm4hMTt2YXIgYj1OdW1iZXIoYSksYz1CYigpO3JldHVybiBiPGMrM0U1JiZiPmMtOUU1fWZ1bmN0aW9uIEJ5KGEpe3JldHVybiBhJiZhLmluZGV4T2YoXCJwZW5kaW5nOlwiKT09PTA/QXkoYS5zdWJzdHIoOCkpOiExfTtcbnZhciBDeT1mdW5jdGlvbihhLGIpe2Zvcih2YXIgYz0wO2M8YS5sZW5ndGg7KytjKXt2YXIgZD1iW2NdO2lmKGQpZm9yKHZhciBlPTA7ZTxhW2NdLmxlbmd0aDsrK2UpYVtjXVtlXSYmKGFbY11bZV1bVC5nLlhjXT1kKX19LEV5PWZ1bmN0aW9uKGEsYixjKXt2YXIgZD1EeVthLnBhXTtkfHwoUSg3OCkmJmEudD09PVwidHJhbnNhY3Rpb25cIj9kPVQuZy5IYTphLnByb21vYT09PVwiY2xpY2tcIj9kPVQuZy5EYjpiLmxlbmd0aD9kPVQuZy5qYjpjLmxlbmd0aCYmKGQ9VC5nLmliKSk7cmV0dXJuIGR9LEZ5PWZ1bmN0aW9uKGEpe3ZhciBiLGMsZCxlO3N3aXRjaChhLnQpe2Nhc2UgXCJldmVudFwiOmI9YS5lYTtjPWEuZWM7ZD1hLmVsO2U9YS5ldjticmVhaztjYXNlIFwicGFnZXZpZXdcIjpiPVQuZy5TYjticmVhaztjYXNlIFwic2NyZWVudmlld1wiOmI9VC5nLnVrO2JyZWFrO2Nhc2UgXCJ0aW1pbmdcIjpiPVQuZy52aztjPWEudXRjO1xuZD1hLnV0bDtlPWEudXR0O2JyZWFrO2Nhc2UgXCJleGNlcHRpb25cIjpiPVQuZy50azticmVhaztjYXNlIFwic29jaWFsXCI6Yj1ULmcud2t9cmV0dXJue05sOmIsTGw6YyxNbDpkLE9sOmV9fSxNeT1mdW5jdGlvbihhKXt2YXIgYixjLGQsZT1hLm1hdGNoKEd5KTtpZihlKXJldHVybiBiPU51bWJlcihlWzFdKS0xLGM9SHlbZVsyXV0se3RoOmIsdWg6Yyx2aDpcInByb21vdGlvblwifTt2YXIgZj1hLm1hdGNoKEl5KTtpZihmKXJldHVybiBkPVwicHJvZHVjdFwiLGI9TnVtYmVyKGZbMV0pLTEsSnlbZlsyXV0/Yz1KeVtmWzJdXTpjPUt5KGZbMl0pLHt0aDpiLHVoOmMsdmg6ZH07dmFyIGc9YS5tYXRjaChMeSk7aWYoZyl7ZD1cImltcHJlc3Npb25cIjt2YXIgaz1OdW1iZXIoZ1sxXSktMTtiPU51bWJlcihnWzJdKS0xO3ZhciBtPWdbM107SnlbbV0/Yz1KeVttXTpjPUt5KG0pO3JldHVybnt0aDpiLHVoOmMsdmg6ZCxYbDprfX1yZXR1cm57fX0sTnk9ZnVuY3Rpb24oYSxiLGMsZCxlKXt2YXIgZj1NeShhKSxcbmc9Zi50aCxrPWYudWgsbT1mLnZoLG49Zi5YbDtpZighKCFrfHwhbXx8Zz09PXZvaWQgMHx8ZzwwfHxnPj0yMDApKXt2YXIgcDtzd2l0Y2gobSl7Y2FzZSBcInByb21vdGlvblwiOnA9YzticmVhaztjYXNlIFwicHJvZHVjdFwiOnA9ZDticmVhaztjYXNlIFwiaW1wcmVzc2lvblwiOmlmKG48MHx8bj49MjAwKXJldHVybjtwPWV9cCYmKG0hPT1cImltcHJlc3Npb25cIj8ocFtnXXx8KHBbZ109e30pLHBbZ11ba118fChwW2ddW2tdPWIpKTpuIT09dm9pZCAwJiYocFtuXXx8KHBbbl09W10pLHBbbl1bZ118fChwW25dW2ddPXt9KSxwW25dW2ddW2tdfHwocFtuXVtnXVtrXT1iKSkpfX0sUXk9ZnVuY3Rpb24oYSl7aWYoT3lbYV0pcmV0dXJuIE95W2FdO3ZhciBiPUt5KGEpO2lmKGIpcmV0dXJuIGI7dmFyIGM9YS5tYXRjaChQeSk7aWYoYylyZXR1cm5cInVhX2NvbnRlbnRfZ3JvdXBfXCIrTnVtYmVyKGNbMV0pfSxLeT1mdW5jdGlvbihhKXt2YXIgYj1hLm1hdGNoKFJ5KSxjO2lmKGIpe2lmKGJbMV09PT1cImNkXCIpYz1cblwidWFfZGltZW5zaW9uXCI7ZWxzZSBpZihiWzFdPT09XCJjbVwiKWM9XCJ1YV9tZXRyaWNcIjtlbHNlIHJldHVybjt2YXIgZD1OdW1iZXIoYlsyXSk7aWYoZD49MSYmZDw9MjAwKXJldHVybiBjK1wiX1wiK2R9fSxPeT17YWlkOlQuZy55ayxhaWlkOlQuZy56ayxhbjpULmcuQWssYXY6VC5nLkJrLGNjOlQuZy5OYyxjZDpULmcucWYsY2k6VC5nLk9jLGNpZDpULmcubmIsY2s6VC5nLlRjLGNtOlQuZy5QYyxjbjpULmcuUWMsY3M6VC5nLlNjLGN1OlQuZy54YSxkaDpULmcuUGksZGw6VC5nLnJhLGRwOlQuZy5mZCxkcjpULmcuQmEsZHQ6VC5nLlphLGV4ZDpULmcuRWssZXhmOlQuZy5GayxzZjpULmcuSWssc3I6VC5nLktiLHVpZDpULmcuemEsdWw6VC5nLk9hLHV0djpULmcuSGt9LFN5PXtjb2w6VC5nLk5kLGNvczpULmcuZmYscGFsOlQuZy5YYyx0YTpULmcuamcsdGNjOlQuZy5rZyx0aTpULmcueWEsdHM6VC5nLlljLHR0OlQuZy5qZn0sRHk9e2FkZDpULmcuamMsY2hlY2tvdXQ6VC5nLlJiLGNoZWNrb3V0X29wdGlvbjpULmcuTmQsXG5jbGljazpULmcubWMsZGV0YWlsOlQuZy5MYSxwdXJjaGFzZTpULmcuSGEscmVmdW5kOlQuZy5uYyxyZW1vdmU6VC5nLmtjfSxIeT17Y3I6XCJjcmVhdGl2ZV9uYW1lXCIsaWQ6XCJwcm9tb3Rpb25faWRcIixubTpcInByb21vdGlvbl9uYW1lXCIscHM6XCJjcmVhdGl2ZV9zbG90XCJ9LEp5PXticjpcIml0ZW1fYnJhbmRcIixjYTpcIml0ZW1fY2F0ZWdvcnlcIixjYzpcImNvdXBvblwiLGlkOlwiaXRlbV9pZFwiLG5tOlwiaXRlbV9uYW1lXCIscHI6XCJwcmljZVwiLHBzOlwiaW5kZXhcIixxdDpcInF1YW50aXR5XCIsdmE6XCJpdGVtX3ZhcmlhbnRcIn0sVHk9e2VhOjEsZWM6MSxlbDoxLGV2OjEscGE6MSxwcm9tb2E6MSx0OjEsdHI6MSx1dGM6MSx1dGw6MSx1dHQ6MX0sUnk9L14oY2R8Y20pKFsxLTldWzAtOV17MCwyfSkkLyxQeT0vXmNnKFsxLTVdKSQvLEd5PS9ecHJvbW8oWzEtOV1bMC05XXswLDJ9KShpZHxjcnxubXxwcykkLyxJeT0vXnByKFswLTldezAsM30pKFthLXpdezJ9WzAtOV17MCwzfSkkLyxMeT0vXmlsKFswLTldezAsM30pcGkoWzAtOV17MCwzfSkoW2Etel17Mn1bMC05XXswLDN9KSQvLFxuVXk9L15pbChbMS05XVswLTldezAsMn0pbm0kLyxWeT1mdW5jdGlvbihhKXt2YXIgYj1FaigpLmZpbHRlcihmdW5jdGlvbihWKXtyZXR1cm4gR2IoVixcIkctXCIpfSk7aWYoYi5sZW5ndGgpe3ZhciBjPXt9LGQ9ZnVuY3Rpb24oVixhYSl7YWEhPT12b2lkIDAmJmNbVl09PT12b2lkIDAmJihjW1ZdPWFhKX0sZT17fSxmPWZ1bmN0aW9uKFYsYWEpe2FhIT09dm9pZCAwJiZlW1ZdPT09dm9pZCAwJiYoZVtWXT1hYSl9LGc9YS5oaXRQYXlsb2FkO2lmKHR5cGVvZiBnIT09XCJzdHJpbmdcIilNKDEyNik7ZWxzZXtmb3IodmFyIGs9e30sbT1bXSxuPVtdLHA9W10scT1bXSxyPWcuc3BsaXQoXCImXCIpLHQ9MDt0PHIubGVuZ3RoOysrdCl7dmFyIHU9clt0XS5zcGxpdChcIj1cIiksdj11WzBdfHxcIlwiLHc9ZGVjb2RlVVJJQ29tcG9uZW50KHVbMV18fFwiXCIpO2lmKHYhPT1cIlwiJiZ3IT09XCJcIilpZihUeVt2XSYmIWtbdl0pa1t2XT13O2Vsc2UgaWYoU3lbdl0pZihTeVt2XSx3KTtlbHNle3ZhciB4PVF5KHYpO2lmKHgpZCh4LFxudyk7ZWxzZXt2YXIgeT12Lm1hdGNoKFV5KTtpZih5KXt2YXIgQT1OdW1iZXIoeVsxXSktMTtBPj0wJiZBPDIwMCYmIXFbQV0mJihxW0FdPXcpfWVsc2UgTnkodix3LG0sbixwKX19fXZhciBCPUZ5KGspLEM9Qi5ObCxIPUIuTGwsST1CLk1sLEY9Qi5PbCxPO2lmKGsucGF8fGsucHJvbW9hfHxtLmxlbmd0aHx8cC5sZW5ndGh8fCFDKU89RXkoayxtLHApO08mJmsudHImJmYoVC5nLmxhLGsudHIpO3ZhciBOO089PT1ULmcuRGJ8fE89PT1ULmcuamI/Tj1tOk89PT1ULmcuaWI/KEN5KHAscSksTj1BcnJheS5wcm90b3R5cGUuY29uY2F0LmFwcGx5KFtdLHApKTpPJiYoTj1uKTtOJiZOLmxlbmd0aCYmZihULmcuZGEsTi5maWx0ZXIoZnVuY3Rpb24oVil7cmV0dXJuISFWfSkpO2lmKEN8fE8pe2QoVC5nLkNrLEgpO2QoVC5nLkRrLEkpO2QoVC5nLmxhLEYpO2QoVC5nLmNmLGEuYWxsb3dBZEZlYXR1cmVzKTtkKFQuZy5qYSxhLmFsbG93QWRQZXJzb25hbGl6YXRpb25TaWduYWxzKTtkKFQuZy5WYSxcbmEuY29va2llRG9tYWluKTtkKFQuZy5NYSxhLmNvb2tpZUV4cGlyZXMpO2QoVC5nLllhLGEuY29va2llRmxhZ3MpO2QoVC5nLkZiLGEuY29va2llUGF0aCk7ZChULmcuTmEsYS5jb29raWVOYW1lPT09XCJfZ2FcIj92b2lkIDA6YS5jb29raWVOYW1lKTtkKFQuZy5xYyxhLmNvb2tpZVVwZGF0ZSk7ZChULmcuVmIsITApO0MmJkMhPT1PJiZweShBeChiLEMsYykpO3ZhciBTPWgoYyk7aChlLFMpO08mJnB5KEF4KGIsTyxTKSl9ZWxzZSBNKDEyNil9fX07XG52YXIgV3k9ZnVuY3Rpb24oKXtpZihRKDk3KSlyZXR1cm47dmFyIGE9c2MoXCJnb29nbGVfdGFnX2RhdGFcIix7fSksYj1hLnNscSYmYS5zbHFbR2ooKV0mJmEuc2xxW0dqKCldLnE7aWYoIUFycmF5LmlzQXJyYXkoYikpcmV0dXJuO2Zvcih2YXIgYz0wO2M8Yi5sZW5ndGg7YysrKXt2YXIgZD1iW2NdO1NhKGQpJiZWeShkKX1iLmxlbmd0aD0wO2IucHVzaD1mdW5jdGlvbigpe2Zvcih2YXIgZT0wO2U8YXJndW1lbnRzLmxlbmd0aDtlKyspe3ZhciBmPWFyZ3VtZW50c1tlXTtTYShmKSYmVnkoZil9cmV0dXJuIDB9O307dmFyIFh5PWZ1bmN0aW9uKCl7fTtYeS5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm5cInVuZGVmaW5lZFwifTt2YXIgWXk9bmV3IFh5O2Z1bmN0aW9uIGV6KGEsYil7ZnVuY3Rpb24gYyhnKXt2YXIgaz1haihnKSxtPVZpKGssXCJwcm90b2NvbFwiKSxuPVZpKGssXCJob3N0XCIsITApLHA9VmkoayxcInBvcnRcIikscT1WaShrLFwicGF0aFwiKS50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoL1xcLyQvLFwiXCIpO2lmKG09PT12b2lkIDB8fG09PT1cImh0dHBcIiYmcD09PVwiODBcInx8bT09PVwiaHR0cHNcIiYmcD09PVwiNDQzXCIpbT1cIndlYlwiLHA9XCJkZWZhdWx0XCI7cmV0dXJuW20sbixwLHFdfWZvcih2YXIgZD1jKFN0cmluZyhhKSksZT1jKFN0cmluZyhiKSksZj0wO2Y8ZC5sZW5ndGg7ZisrKWlmKGRbZl0hPT1lW2ZdKXJldHVybiExO3JldHVybiEwfVxuZnVuY3Rpb24gZnooYSl7cmV0dXJuIGd6KGEpPzE6MH1cbmZ1bmN0aW9uIGd6KGEpe3ZhciBiPWEuYXJnMCxjPWEuYXJnMTtpZihhLmFueV9vZiYmQXJyYXkuaXNBcnJheShjKSl7Zm9yKHZhciBkPTA7ZDxjLmxlbmd0aDtkKyspe3ZhciBlPWgoYSx7fSk7aCh7YXJnMTpjW2RdLGFueV9vZjp2b2lkIDB9LGUpO2lmKGZ6KGUpKXJldHVybiEwfXJldHVybiExfXN3aXRjaChhW1wiZnVuY3Rpb25cIl0pe2Nhc2UgXCJfY25cIjpyZXR1cm4gbmcoYixjKTtjYXNlIFwiX2Nzc1wiOnZhciBmO2E6e2lmKGIpdHJ5e2Zvcih2YXIgZz0wO2c8amcubGVuZ3RoO2crKyl7dmFyIGs9amdbZ107aWYoYltrXSE9bnVsbCl7Zj1iW2tdKGMpO2JyZWFrIGF9fX1jYXRjaChtKXt9Zj0hMX1yZXR1cm4gZjtjYXNlIFwiX2V3XCI6cmV0dXJuIGtnKGIsYyk7Y2FzZSBcIl9lcVwiOnJldHVybiBvZyhiLGMpO2Nhc2UgXCJfZ2VcIjpyZXR1cm4gcGcoYixjKTtjYXNlIFwiX2d0XCI6cmV0dXJuIHJnKGIsYyk7Y2FzZSBcIl9sY1wiOnJldHVybiBTdHJpbmcoYikuc3BsaXQoXCIsXCIpLmluZGV4T2YoU3RyaW5nKGMpKT49XG4wO2Nhc2UgXCJfbGVcIjpyZXR1cm4gcWcoYixjKTtjYXNlIFwiX2x0XCI6cmV0dXJuIHNnKGIsYyk7Y2FzZSBcIl9yZVwiOnJldHVybiBtZyhiLGMsYS5pZ25vcmVfY2FzZSk7Y2FzZSBcIl9zd1wiOnJldHVybiB0ZyhiLGMpO2Nhc2UgXCJfdW1cIjpyZXR1cm4gZXooYixjKX1yZXR1cm4hMX07ZnVuY3Rpb24gaHooKXt2YXIgYTthPWE9PT12b2lkIDA/XCJcIjphO3ZhciBiLGM7cmV0dXJuKChiPWRhdGEpPT1udWxsPzA6KGM9Yi5ibG9iKT09bnVsbD8wOmMuaGFzT3duUHJvcGVydHkoMSkpP1N0cmluZyhkYXRhLmJsb2JbMV0pOmF9O2Z1bmN0aW9uIGl6KCl7dmFyIGE9W1tcImN2XCIsUSgxMDIpP2h6KCk6XCIyXCJdLFtcInJ2XCIsaGkuUmddLFtcInRjXCIsa2YuZmlsdGVyKGZ1bmN0aW9uKGIpe3JldHVybiBifSkubGVuZ3RoXV07aGkucGUmJmEucHVzaChbXCJ4XCIsaGkucGVdKTtCaS5qJiZhLnB1c2goW1widGFnX2V4cFwiLEJpLmpdKTtyZXR1cm4gYX07dmFyIGp6PXt9LGt6PXt9O2Z1bmN0aW9uIGx6KCl7dmFyIGE9MDtyZXR1cm4gZnVuY3Rpb24oYil7c3dpdGNoKGIpe2Nhc2UgMTphfD0xO2JyZWFrO2Nhc2UgMjphfD0yO2JyZWFrO2Nhc2UgMzphfD00fXJldHVybiBhfX1mdW5jdGlvbiBteihhLGIsYyxkKXtpZihxail7dmFyIGU9U3RyaW5nKGMpK2I7anpbYV09anpbYV18fFtdO2p6W2FdLnB1c2goZSk7a3pbYV09a3pbYV18fFtdO2t6W2FdLnB1c2goZCtiKX19ZnVuY3Rpb24gbnooYSl7dmFyIGI9YS5ldmVudElkLGM9YS5oYyxkPVtdLGU9anpbYl18fFtdO2UubGVuZ3RoJiZkLnB1c2goW1wiaGZcIixlLmpvaW4oXCIuXCIpXSk7dmFyIGY9a3pbYl18fFtdO2YubGVuZ3RoJiZkLnB1c2goW1wiaHRcIixmLmpvaW4oXCIuXCIpXSk7YyYmKGRlbGV0ZSBqeltiXSxkZWxldGUga3pbYl0pO3JldHVybiBkfTtmdW5jdGlvbiBveigpe3JldHVybiExfWZ1bmN0aW9uIHB6KCl7dmFyIGE9e307cmV0dXJuIGZ1bmN0aW9uKGIsYyxkKXt9fTtmdW5jdGlvbiBxeigpe3ZhciBhPXJ6O3JldHVybiBmdW5jdGlvbihiLGMsZCl7dmFyIGU9ZCYmZC5ldmVudDtzeihjKTt2YXIgZj1HYihiLFwiX19jdnRfXCIpP3ZvaWQgMDoxLGc9bmV3IFlhO3ooYyxmdW5jdGlvbihyLHQpe3ZhciB1PWRkKHQsdm9pZCAwLGYpO3U9PT12b2lkIDAmJnQhPT12b2lkIDAmJk0oNDQpO2cuc2V0KHIsdSl9KTthLmouai5EPURmKCk7dmFyIGs9e0FqOlNmKGIpLGV2ZW50SWQ6ZT09bnVsbD92b2lkIDA6ZS5pZCxwcmlvcml0eUlkOmUhPT12b2lkIDA/ZS5wcmlvcml0eUlkOnZvaWQgMCx1ZTplIT09dm9pZCAwP2Z1bmN0aW9uKHIpe2UuYWMudWUocil9OnZvaWQgMCxjYjpmdW5jdGlvbigpe3JldHVybiBifSxsb2c6ZnVuY3Rpb24oKXt9LEJsOntpbmRleDpkPT1udWxsP3ZvaWQgMDpkLmluZGV4LHR5cGU6ZD09bnVsbD92b2lkIDA6ZC50eXBlLG5hbWU6ZD09bnVsbD92b2lkIDA6ZC5uYW1lfSxKbTohIVV2KGIsMyksb3JpZ2luYWxFdmVudERhdGE6ZT09bnVsbD9cbnZvaWQgMDplLm9yaWdpbmFsRXZlbnREYXRhfTtlJiZlLmNhY2hlZE1vZGVsVmFsdWVzJiYoay5jYWNoZWRNb2RlbFZhbHVlcz17Z3RtOmUuY2FjaGVkTW9kZWxWYWx1ZXMuZ3RtLGVjb21tZXJjZTplLmNhY2hlZE1vZGVsVmFsdWVzLmVjb21tZXJjZX0pO2lmKG96KCkpe3ZhciBtPXB6KCksbixwO2suU2E9e1BoOltdLHZlOnt9LHhiOmZ1bmN0aW9uKHIsdCx1KXt0PT09MSYmKG49cik7dD09PTcmJihwPXUpO20ocix0LHUpfSxRZjpiaCgpfTtrLmxvZz1mdW5jdGlvbihyKXt2YXIgdD16YS5hcHBseSgxLGFyZ3VtZW50cyk7biYmbShuLDQse2xldmVsOnIsc291cmNlOnAsbWVzc2FnZTp0fSl9fXZhciBxPUNlKGEsayxbYixnXSk7YS5qLmouRD12b2lkIDA7cSBpbnN0YW5jZW9mIENhJiZxLnR5cGU9PT1cInJldHVyblwiJiYocT1xLmRhdGEpO3JldHVybiBKKHEsdm9pZCAwLGYpfX1cbmZ1bmN0aW9uIHN6KGEpe3ZhciBiPWEuZ3RtT25TdWNjZXNzLGM9YS5ndG1PbkZhaWx1cmU7b2IoYikmJihhLmd0bU9uU3VjY2Vzcz1mdW5jdGlvbigpe0coYil9KTtvYihjKSYmKGEuZ3RtT25GYWlsdXJlPWZ1bmN0aW9uKCl7RyhjKX0pfTtmdW5jdGlvbiB0eihhLGIpe3ZhciBjPXRoaXM7fXR6LlQ9XCJhZGRDb25zZW50TGlzdGVuZXJcIjt2YXIgdXo9ITE7ZnVuY3Rpb24gdnooYSl7Zm9yKHZhciBiPTA7YjxhLmxlbmd0aDsrK2IpaWYodXopdHJ5e2FbYl0oKX1jYXRjaChjKXtNKDc3KX1lbHNlIGFbYl0oKX1mdW5jdGlvbiB3eihhLGIsYyl7dmFyIGQ9dGhpcyxlO3JldHVybiBlfXd6Lko9XCJpbnRlcm5hbC5hZGREYXRhTGF5ZXJFdmVudExpc3RlbmVyXCI7ZnVuY3Rpb24geHooYSxiLGMpe314ei5UPVwiYWRkRG9jdW1lbnRFdmVudExpc3RlbmVyXCI7ZnVuY3Rpb24geXooYSxiLGMsZCl7fXl6LlQ9XCJhZGRFbGVtZW50RXZlbnRMaXN0ZW5lclwiO2Z1bmN0aW9uIHp6KGEpe3JldHVybiBhLkYuan07ZnVuY3Rpb24gQXooYSl7fUF6LlQ9XCJhZGRFdmVudENhbGxiYWNrXCI7XG5mdW5jdGlvbiBReihhKXt9UXouSj1cImludGVybmFsLmFkZEZvcm1BYmFuZG9ubWVudExpc3RlbmVyXCI7ZnVuY3Rpb24gUnooYSxiLGMsZCl7fVxuUnouSj1cImludGVybmFsLmFkZEZvcm1EYXRhXCI7dmFyIFN6PXt9LFR6PVtdLFV6PXt9LFZ6PTAsV3o9MDtcbmZ1bmN0aW9uIGNBKGEsYil7fWNBLko9XCJpbnRlcm5hbC5hZGRGb3JtSW50ZXJhY3Rpb25MaXN0ZW5lclwiO1xuZnVuY3Rpb24gakEoYSxiKXt9akEuSj1cImludGVybmFsLmFkZEZvcm1TdWJtaXRMaXN0ZW5lclwiO1xudmFyIGtBPWZ1bmN0aW9uKGEpe3JldHVybiBhIT1udWxsJiZhLmxlbmd0aCE9PXZvaWQgMCYmb2IoYS5wdXNoKX0sbkE9ZnVuY3Rpb24oYSl7dmFyIGI9bEEuZXhlYyhhWzBdKTtpZighYilyZXR1cm4gbnVsbDt2YXIgYz1iWzJdO2lmKGMhPT12b2lkIDAmJmMubWF0Y2goL14oZ3RtXFxkK3xndGFnXy4rKSQvKSlyZXR1cm4gbnVsbDt2YXIgZCxlO2woYVsxXSk/KGQ9YVsxXSxlPVtdLnNsaWNlLmNhbGwoYSwyKSk6KGQ9YVsxXSYmYVsxXS5oaXRUeXBlLGU9W10uc2xpY2UuY2FsbChhLDEpKTtpZighZClyZXR1cm4gbnVsbDt2YXIgZjt2YXIgZz1tQVtkXSxrPWU7aWYoay5sZW5ndGg9PT0xJiZrWzBdIT1udWxsJiZ0eXBlb2Yga1swXT09PVwib2JqZWN0XCIpZj1rWzBdO2Vsc2V7Zm9yKHZhciBtPXt9LG49TWF0aC5taW4oZz9nLmxlbmd0aCsxOjEsay5sZW5ndGgpLHA9MDtwPG47cCsrKWlmKHR5cGVvZiBrW3BdPT09XCJvYmplY3RcIil7Zm9yKHZhciBxIGluIGtbcF0pa1twXS5oYXNPd25Qcm9wZXJ0eShxKSYmXG4obVtxXT1rW3BdW3FdKTticmVha31lbHNlIGcmJnA8Zy5sZW5ndGgmJihtW2dbcF1dPWtbcF0pO2Y9bX12YXIgcj1mO3IuaGl0VHlwZT1kO3JldHVybntHZTpkLERlOnJ9fSxsQT0vXigoLispXFwuKT9zZW5kJC8sbUE9e3BhZ2V2aWV3OltcInBhZ2VcIl0sZXZlbnQ6W1wiZXZlbnRDYXRlZ29yeVwiLFwiZXZlbnRBY3Rpb25cIixcImV2ZW50TGFiZWxcIixcImV2ZW50VmFsdWVcIl0sc29jaWFsOltcInNvY2lhbE5ldHdvcmtcIixcInNvY2lhbEFjdGlvblwiLFwic29jaWFsVGFyZ2V0XCJdLHRpbWluZzpbXCJ0aW1pbmdDYXRlZ29yeVwiLFwidGltaW5nVmFyXCIsXCJ0aW1pbmdWYWx1ZVwiLFwidGltaW5nTGFiZWxcIl19O1xuZnVuY3Rpb24gb0EoYSl7Syh0aGlzLmdldE5hbWUoKSxbXCJkdXN0Q2FsbGJhY2s6IUZuXCJdLGFyZ3VtZW50cyk7TCh0aGlzLFwiYWNjZXNzX2dsb2JhbHNcIixcInJlYWRcIixcIkdvb2dsZUFuYWx5dGljc09iamVjdFwiKTtMKHRoaXMsXCJhY2Nlc3NfZ2xvYmFsc1wiLFwicmVhZHdyaXRlXCIsXCJnYS5xXCIpO0wodGhpcyxcImFjY2Vzc19nbG9iYWxzXCIsXCJleGVjdXRlXCIsXCJnYS5xXCIpO3ZhciBiPTAsYz1KKGEpO0coZnVuY3Rpb24oKXt2YXIgZD1HdygpO2lmKGQmJmtBKGQucSkpe2Zvcih2YXIgZT1kLnEsZj0wO2Y8ZS5sZW5ndGg7ZisrKXt2YXIgZz1uQShlW2ZdKTtiKys7ZyE9PW51bGwmJmMoZy5HZSxnLkRlKX12YXIgaz1lLnB1c2g7ZS5wdXNoPWZ1bmN0aW9uKCl7dmFyIG09R3coKSxuPVtdLnNsaWNlLmNhbGwoYXJndW1lbnRzLDApO2suYXBwbHkoZSxuKTtpZihtJiZiPj1tLnEubGVuZ3RoK1xuKG0ucWR8fDApKXJldHVybiAwO3ZhciBwPW5BLmFwcGx5KHRoaXMsbik7YisrO2lmKHA9PT1udWxsKXJldHVybiAwO2MocC5HZSxwLkRlKTtyZXR1cm4gMH19fSk7fW9BLko9XCJpbnRlcm5hbC5hZGRHYVNlbmRMaXN0ZW5lclwiO2Z1bmN0aW9uIHBBKGEpe2lmKCFhKXJldHVybnt9O3ZhciBiPWEuQmw7cmV0dXJuIHd3KGIudHlwZSxiLmluZGV4LGIubmFtZSl9ZnVuY3Rpb24gcUEoYSl7cmV0dXJuIGE/e29yaWdpbmF0aW5nRW50aXR5OnBBKGEpfTp7fX07ZnVuY3Rpb24geUEoYSl7dmFyIGI9aWkuem9uZXM7cmV0dXJuIGI/Yi5nZXRJc0FsbG93ZWRGbihCaigpLGEpOmZ1bmN0aW9uKCl7cmV0dXJuITB9fVxuZnVuY3Rpb24gekEoKXtYdihJaigpLGZ1bmN0aW9uKGEpe3ZhciBiPWEub3JpZ2luYWxFdmVudERhdGFbXCJndG0udW5pcXVlRXZlbnRJZFwiXSxjPWlpLnpvbmVzO3JldHVybiBjP2MuaXNBY3RpdmUoQmooKSxiKTohMH0pO1Z2KElqKCksZnVuY3Rpb24oYSl7dmFyIGIsYztiPWEuZW50aXR5SWQ7Yz1hLnNlY3VyaXR5R3JvdXBzO3JldHVybiB5QShOdW1iZXIoYS5vcmlnaW5hbEV2ZW50RGF0YVtcImd0bS51bmlxdWVFdmVudElkXCJdKSkoYixjKX0pfTt2YXIgQUE9ZnVuY3Rpb24oYSxiKXt0aGlzLnRhZ0lkPWE7dGhpcy54ZT1ifTtcbmZ1bmN0aW9uIEJBKGEsYil7dmFyIGM9dGhpcyxkO3JldHVybiBkfVxuQkEuSj1cImludGVybmFsLmxvYWRHb29nbGVUYWdcIjtmdW5jdGlvbiBDQShhKXtyZXR1cm4gbmV3IFdjKFwiXCIsZnVuY3Rpb24oYil7dmFyIGM9dGhpcy5ldmFsdWF0ZShiKTtpZihjIGluc3RhbmNlb2YgV2MpcmV0dXJuIG5ldyBXYyhcIlwiLGZ1bmN0aW9uKCl7dmFyIGQ9emEuYXBwbHkoMCxhcmd1bWVudHMpLGU9dGhpcyxmPWgoenoodGhpcyksbnVsbCk7Zi5ldmVudElkPWEuZXZlbnRJZDtmLnByaW9yaXR5SWQ9YS5wcmlvcml0eUlkO2Yub3JpZ2luYWxFdmVudERhdGE9YS5vcmlnaW5hbEV2ZW50RGF0YTt2YXIgZz1kLm1hcChmdW5jdGlvbihtKXtyZXR1cm4gZS5ldmFsdWF0ZShtKX0pLGs9SWEodGhpcy5GKTtrLmo9ZjtyZXR1cm4gYy5mYi5hcHBseShjLFtrXS5jb25jYXQocGEoZykpKX0pfSl9O2Z1bmN0aW9uIERBKGEsYixjKXt2YXIgZD10aGlzO31EQS5KPVwiaW50ZXJuYWwuYWRkR29vZ2xlVGFnUmVzdHJpY3Rpb25cIjt2YXIgRUE9e30sRkE9W107XG5mdW5jdGlvbiBNQShhLGIpe31cbk1BLko9XCJpbnRlcm5hbC5hZGRIaXN0b3J5Q2hhbmdlTGlzdGVuZXJcIjtmdW5jdGlvbiBOQShhLGIsYyl7fU5BLlQ9XCJhZGRXaW5kb3dFdmVudExpc3RlbmVyXCI7ZnVuY3Rpb24gT0EoYSxiKXtyZXR1cm4hMH1PQS5UPVwiYWxpYXNJbldpbmRvd1wiO2Z1bmN0aW9uIFBBKGEsYixjKXt9UEEuSj1cImludGVybmFsLmFwcGVuZFJlbW90ZUNvbmZpZ1BhcmFtZXRlclwiO2Z1bmN0aW9uIFFBKGEpe3ZhciBiO3JldHVybiBifVFBLlQ9XCJjYWxsSW5XaW5kb3dcIjtmdW5jdGlvbiBSQShhKXt9UkEuVD1cImNhbGxMYXRlclwiO2Z1bmN0aW9uIFNBKGEpe31TQS5KPVwiY2FsbE9uRG9tUmVhZHlcIjtmdW5jdGlvbiBUQShhKXt9VEEuSj1cImNhbGxPbldpbmRvd0xvYWRcIjtmdW5jdGlvbiBVQShhLGIpe3ZhciBjO3JldHVybiBjfVVBLko9XCJpbnRlcm5hbC5jb21wdXRlR3RtUGFyYW1ldGVyXCI7ZnVuY3Rpb24gVkEoYSl7dmFyIGI7Syh0aGlzLmdldE5hbWUoKSxbXCJrZXk6IXN0cmluZ1wiXSxhcmd1bWVudHMpO2lmKCFhbyhhKSl0aHJvdyBFcnJvcihcImNvcHlGcm9tQ3Jvc3NDb250YWluZXJEYXRhIHJlcXVpcmVzIHZhbGlkIENyb3NzQ29udGFpbmVyU2NoZW1hIGtleS5cIik7dmFyIGM9ZW8oYSk7Yj1kZChjLHRoaXMuRiwxKTtyZXR1cm4gYn1WQS5KPVwiaW50ZXJuYWwuY29weUZyb21Dcm9zc0NvbnRhaW5lckRhdGFcIjtmdW5jdGlvbiBXQShhLGIpe3ZhciBjO3ZhciBkPWRkKGMsdGhpcy5GLEdiKHp6KHRoaXMpLmNiKCksXCJfX2N2dF9cIik/MjoxKTtkPT09dm9pZCAwJiZjIT09dm9pZCAwJiZNKDQ1KTtyZXR1cm4gZH1XQS5UPVwiY29weUZyb21EYXRhTGF5ZXJcIjtcbmZ1bmN0aW9uIFhBKGEpe3ZhciBiPXZvaWQgMDtyZXR1cm4gYn1YQS5KPVwiaW50ZXJuYWwuY29weUZyb21EYXRhTGF5ZXJDYWNoZVwiO2Z1bmN0aW9uIFlBKGEpe3ZhciBiO3JldHVybiBifVlBLlQ9XCJjb3B5RnJvbVdpbmRvd1wiO2Z1bmN0aW9uIFpBKGEpe3ZhciBiPXZvaWQgMDtyZXR1cm4gZGQoYix0aGlzLkYsMSl9WkEuSj1cImludGVybmFsLmNvcHlLZXlGcm9tV2luZG93XCI7dmFyICRBPWZ1bmN0aW9uKGEsYixjKXt0aGlzLmV2ZW50TmFtZT1iO3RoaXMubT1jO3RoaXMubz17fTt0aGlzLmlzQWJvcnRlZD0hMTt0aGlzLnRhcmdldD1hO3RoaXMubWV0YWRhdGE9aChjLmV2ZW50TWV0YWRhdGF8fHt9LHt9KX07JEEucHJvdG90eXBlLmNvcHlUb0hpdERhdGE9ZnVuY3Rpb24oYSxiLGMpe3ZhciBkPVUodGhpcy5tLGEpO2Q9PT12b2lkIDAmJihkPWIpO2lmKGQhPT12b2lkIDAmJmMhPT12b2lkIDAmJmwoZCkmJlEoNjgpKXRyeXtkPWMoZCl9Y2F0Y2goZSl7fWQhPT12b2lkIDAmJih0aGlzLm9bYV09ZCl9O3ZhciBVcz1mdW5jdGlvbihhLGIsYyl7dmFyIGQ9WHIoYS50YXJnZXQuZGVzdGluYXRpb25JZCk7cmV0dXJuIGQmJmRbYl0hPT12b2lkIDA/ZFtiXTpjfTtmdW5jdGlvbiBhQihhLGIpe3ZhciBjO0sodGhpcy5nZXROYW1lKCksW1wicHJlSGl0OiFQaXhpZU1hcFwiLFwiZHVzdE9wdGlvbnM6P1BpeGllTWFwXCJdLGFyZ3VtZW50cyk7dmFyIGQ9SihiKXx8e30sZT1KKGEsdGhpcy5GLDEpLklqKCksZj1lLm07ZC5vbWl0RXZlbnRDb250ZXh0JiYoZj1SbChuZXcgR2woZS5tLmV2ZW50SWQsZS5tLnByaW9yaXR5SWQpKSk7dmFyIGc9bmV3ICRBKGUudGFyZ2V0LGUuZXZlbnROYW1lLGYpO2Qub21pdEhpdERhdGF8fGgoZS5vLGcubyk7ZC5vbWl0TWV0YWRhdGE/Zy5tZXRhZGF0YT17fTpoKGUubWV0YWRhdGEsZy5tZXRhZGF0YSk7Zy5pc0Fib3J0ZWQ9ZS5pc0Fib3J0ZWQ7Yz1kZChOcihnKSx0aGlzLkYsMSk7cmV0dXJuIGN9YUIuSj1cImludGVybmFsLmNvcHlQcmVIaXRcIjtmdW5jdGlvbiBiQihhLGIpe3ZhciBjPW51bGw7cmV0dXJuIGRkKGMsdGhpcy5GLDIpfWJCLlQ9XCJjcmVhdGVBcmd1bWVudHNRdWV1ZVwiO2Z1bmN0aW9uIGNCKGEpe3JldHVybiBkZChmdW5jdGlvbihjKXt2YXIgZD1HdygpO2lmKHR5cGVvZiBjPT09XCJmdW5jdGlvblwiKWQoZnVuY3Rpb24oKXtjKGZ1bmN0aW9uKGYsZyxrKXt2YXIgbT1HdygpLG49bSYmbS5nZXRCeU5hbWUmJlxubS5nZXRCeU5hbWUoZik7cmV0dXJuIHdtKEQuZ2FwbHVnaW5zLkxpbmtlcixuKS5kZWNvcmF0ZShnLGspfSl9KTtlbHNlIGlmKEFycmF5LmlzQXJyYXkoYykpe3ZhciBlPVN0cmluZyhjWzBdKS5zcGxpdChcIi5cIik7YltlLmxlbmd0aD09PTE/ZVswXTplWzFdXSYmZC5hcHBseShudWxsLGMpfWVsc2UgaWYoYz09PVwiaXNMb2FkZWRcIilyZXR1cm4hIWQubG9hZGVkfSx0aGlzLkYsMSl9Y0IuSj1cImludGVybmFsLmNyZWF0ZUdhQ29tbWFuZFF1ZXVlXCI7ZnVuY3Rpb24gZEIoYSl7cmV0dXJuIGRkKGZ1bmN0aW9uKCl7aWYoIW9iKGUucHVzaCkpdGhyb3cgRXJyb3IoXCJPYmplY3QgYXQgXCIrYStcIiBpbiB3aW5kb3cgaXMgbm90IGFuIGFycmF5LlwiKTtlLnB1c2guYXBwbHkoZSxBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsMCkpfSx0aGlzLkYsR2IoenoodGhpcykuY2IoKSxcblwiX19jdnRfXCIpPzI6MSl9ZEIuVD1cImNyZWF0ZVF1ZXVlXCI7ZnVuY3Rpb24gZUIoYSxiKXt2YXIgYz1udWxsO0sodGhpcy5nZXROYW1lKCksW1wicGF0dGVybjohc3RyaW5nXCIsXCJmbGFnczo/c3RyaW5nXCJdLGFyZ3VtZW50cyk7dHJ5e3ZhciBkPShifHxcIlwiKS5zcGxpdChcIlwiKS5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuXCJpZ1wiLmluZGV4T2YoZSk+PTB9KS5qb2luKFwiXCIpO2M9bmV3IGFkKG5ldyBSZWdFeHAoYSxkKSl9Y2F0Y2goZSl7fXJldHVybiBjfWVCLko9XCJpbnRlcm5hbC5jcmVhdGVSZWdleFwiO2Z1bmN0aW9uIGZCKCl7dmFyIGE9e307YT17U0hBUkVEX1VTRVJfSUQ6Wm4uVGcsU0hBUkVEX1VTRVJfSURfUkVRVUVTVEVEOlpuLlVnLFNIQVJFRF9VU0VSX0lEX1NPVVJDRTpabi5zZX07cmV0dXJuIGF9O2Z1bmN0aW9uIGdCKGEpe31nQi5KPVwiaW50ZXJuYWwuZGVjbGFyZUNvbnNlbnRTdGF0ZVwiO2Z1bmN0aW9uIGhCKGEpe3ZhciBiPVwiXCI7cmV0dXJuIGJ9aEIuSj1cImludGVybmFsLmRlY29kZVVybEh0bWxFbnRpdGllc1wiO2Z1bmN0aW9uIGlCKGEsYixjKXt2YXIgZDtyZXR1cm4gZH1pQi5KPVwiaW50ZXJuYWwuZGVjb3JhdGVVcmxXaXRoR2FDb29raWVzXCI7ZnVuY3Rpb24gakIoKXt9akIuSj1cImludGVybmFsLmRlZmVyQ3VzdG9tRXZlbnRzXCI7ZnVuY3Rpb24ga0IoYSl7dmFyIGI7TCh0aGlzLFwiZGV0ZWN0X3VzZXJfcHJvdmlkZWRfZGF0YVwiLFwiYXV0b1wiKTt2YXIgYz1KKGEpfHx7fSxkPXdzKHt1ZDohIWMuaW5jbHVkZVNlbGVjdG9yLHZkOiEhYy5pbmNsdWRlVmlzaWJpbGl0eSxBZTpjLmV4Y2x1ZGVFbGVtZW50U2VsZWN0b3JzLHdiOmMuZmllbGRGaWx0ZXJzLFNmOiEhYy5zZWxlY3RNdWx0aXBsZUVsZW1lbnRzfSk7Yj1uZXcgWWE7dmFyIGU9bmV3IFdhO2Iuc2V0KFwiZWxlbWVudHNcIixlKTtmb3IodmFyIGY9ZC5lbGVtZW50cyxnPTA7ZzxmLmxlbmd0aDtnKyspZS5wdXNoKGxCKGZbZ10pKTtkLkZoIT09dm9pZCAwJiZiLnNldChcInByZWZlcnJlZEVtYWlsRWxlbWVudFwiLGxCKGQuRmgpKTtiLnNldChcInN0YXR1c1wiLGQuc3RhdHVzKTtcbnJldHVybiBifVxudmFyIGxCPWZ1bmN0aW9uKGEpe3ZhciBiPW5ldyBZYTtiLnNldChcInVzZXJEYXRhXCIsYS5YKTtiLnNldChcInRhZ05hbWVcIixhLnRhZ05hbWUpO2EucXVlcnlTZWxlY3RvciE9PXZvaWQgMCYmYi5zZXQoXCJxdWVyeVNlbGVjdG9yXCIsYS5xdWVyeVNlbGVjdG9yKTthLmlzVmlzaWJsZSE9PXZvaWQgMCYmYi5zZXQoXCJpc1Zpc2libGVcIixhLmlzVmlzaWJsZSk7aWYoUSgyNikpe31lbHNlIHN3aXRjaChhLnR5cGUpe2Nhc2UgdXMuaWM6Yi5zZXQoXCJ0eXBlXCIsXCJlbWFpbFwiKX1yZXR1cm4gYn07a0IuSj1cImludGVybmFsLmRldGVjdFVzZXJQcm92aWRlZERhdGFcIjtcbmZ1bmN0aW9uIG9CKGEsYil7cmV0dXJuIGJ9b0IuSj1cImludGVybmFsLmVuYWJsZUF1dG9FdmVudE9uQ2xpY2tcIjtcbmZ1bmN0aW9uIHdCKGEsYil7cmV0dXJuIGJ9d0IuSj1cImludGVybmFsLmVuYWJsZUF1dG9FdmVudE9uRWxlbWVudFZpc2liaWxpdHlcIjtmdW5jdGlvbiB4Qigpe314Qi5KPVwiaW50ZXJuYWwuZW5hYmxlQXV0b0V2ZW50T25FcnJvclwiO3ZhciB5Qj17fSx6Qj1bXSxBQj17fSxCQj0wLENCPTA7XG5mdW5jdGlvbiBJQihhLGIpe3ZhciBjPXRoaXM7cmV0dXJuIGJ9SUIuSj1cImludGVybmFsLmVuYWJsZUF1dG9FdmVudE9uRm9ybUludGVyYWN0aW9uXCI7XG5mdW5jdGlvbiBOQihhLGIpe3ZhciBjPXRoaXM7cmV0dXJuIGJ9TkIuSj1cImludGVybmFsLmVuYWJsZUF1dG9FdmVudE9uRm9ybVN1Ym1pdFwiO1xuZnVuY3Rpb24gU0IoKXt2YXIgYT10aGlzO31TQi5KPVwiaW50ZXJuYWwuZW5hYmxlQXV0b0V2ZW50T25HYVNlbmRcIjt2YXIgVEI9e30sVUI9W107XG5mdW5jdGlvbiBhQyhhLGIpe3ZhciBjPXRoaXM7cmV0dXJuIGJ9YUMuSj1cImludGVybmFsLmVuYWJsZUF1dG9FdmVudE9uSGlzdG9yeUNoYW5nZVwiO3ZhciBiQz1bXCJodHRwOi8vXCIsXCJodHRwczovL1wiLFwiamF2YXNjcmlwdDpcIixcImZpbGU6Ly9cIl07XG5mdW5jdGlvbiBmQyhhLGIpe3ZhciBjPXRoaXM7cmV0dXJuIGJ9ZkMuSj1cImludGVybmFsLmVuYWJsZUF1dG9FdmVudE9uTGlua0NsaWNrXCI7dmFyIGdDLGhDO1xuZnVuY3Rpb24gc0MoYSxiKXt2YXIgYz10aGlzO3JldHVybiBifXNDLko9XCJpbnRlcm5hbC5lbmFibGVBdXRvRXZlbnRPblNjcm9sbFwiO2Z1bmN0aW9uIHRDKGEpe3JldHVybiBmdW5jdGlvbigpe2lmKGEubGltaXQmJmEuemg+PWEubGltaXQpYS5PZiYmRC5jbGVhckludGVydmFsKGEuT2YpO2Vsc2V7YS56aCsrO3ZhciBiPUJiKCk7cHkoe2V2ZW50OmEuZXZlbnROYW1lLFwiZ3RtLnRpbWVySWRcIjphLk9mLFwiZ3RtLnRpbWVyRXZlbnROdW1iZXJcIjphLnpoLFwiZ3RtLnRpbWVySW50ZXJ2YWxcIjphLmludGVydmFsLFwiZ3RtLnRpbWVyTGltaXRcIjphLmxpbWl0LFwiZ3RtLnRpbWVyU3RhcnRUaW1lXCI6YS5layxcImd0bS50aW1lckN1cnJlbnRUaW1lXCI6YixcImd0bS50aW1lckVsYXBzZWRUaW1lXCI6Yi1hLmVrLFwiZ3RtLnRyaWdnZXJzXCI6YS5ibn0pfX19XG5mdW5jdGlvbiB1QyhhLGIpe1xucmV0dXJuIGJ9dUMuSj1cImludGVybmFsLmVuYWJsZUF1dG9FdmVudE9uVGltZXJcIjt2YXIgaGM9a2EoW1wiZGF0YS1ndG0teXQtaW5zcGVjdGVkLVwiXSksd0M9W1wid3d3LnlvdXR1YmUuY29tXCIsXCJ3d3cueW91dHViZS1ub2Nvb2tpZS5jb21cIl0seEMseUM9ITE7XG5mdW5jdGlvbiBJQyhhLGIpe3ZhciBjPXRoaXM7cmV0dXJuIGJ9SUMuSj1cImludGVybmFsLmVuYWJsZUF1dG9FdmVudE9uWW91VHViZUFjdGl2aXR5XCI7ZnVuY3Rpb24gSkMoYSxiKXtLKHRoaXMuZ2V0TmFtZSgpLFtcImJvb2xlYW5FeHByZXNzaW9uOiFzdHJpbmdcIixcImNvbnRleHQ6P1BpeGllTWFwXCJdLGFyZ3VtZW50cyk7dmFyIGM9Yj9KKGIpOnt9LGQ9YSxlPSExO3ZhciBmPUpTT04ucGFyc2UoZCk7aWYoIWYpdGhyb3cgRXJyb3IoXCJJbnZhbGlkIGJvb2xlYW4gZXhwcmVzc2lvbiBzdHJpbmcgd2FzIGdpdmVuLlwiKTtlPVJnKGYsYyk7cmV0dXJuIGV9SkMuSj1cImludGVybmFsLmV2YWx1YXRlQm9vbGVhbkV4cHJlc3Npb25cIjt2YXIgS0M7ZnVuY3Rpb24gTEMoYSl7dmFyIGI9ITE7cmV0dXJuIGJ9TEMuSj1cImludGVybmFsLmV2YWx1YXRlTWF0Y2hpbmdSdWxlc1wiO2Z1bmN0aW9uIHNEKCl7cmV0dXJuIHpuKDcpJiZ6big5KSYmem4oMTApfTtmdW5jdGlvbiBuRShhLGIsYyxkKXt9bkUuSj1cImludGVybmFsLmV4ZWN1dGVFdmVudFByb2Nlc3NvclwiO2Z1bmN0aW9uIG9FKGEpe3ZhciBiO3JldHVybiBkZChiLHRoaXMuRiwxKX1vRS5KPVwiaW50ZXJuYWwuZXhlY3V0ZUphdmFzY3JpcHRTdHJpbmdcIjtmdW5jdGlvbiBwRShhKXt2YXIgYjtyZXR1cm4gYn07dmFyIHFFPW51bGw7XG5mdW5jdGlvbiByRSgpe3ZhciBhPW5ldyBZYTtMKHRoaXMsXCJyZWFkX2NvbnRhaW5lcl9kYXRhXCIpLFEoNDIpJiZxRT9hPXFFOihhLnNldChcImNvbnRhaW5lcklkXCIsJ0ctUEtNOEVGSk0zTicpLGEuc2V0KFwidmVyc2lvblwiLCcyJyksYS5zZXQoXCJlbnZpcm9ubWVudE5hbWVcIiwnJyksYS5zZXQoXCJkZWJ1Z01vZGVcIixUZiksYS5zZXQoXCJwcmV2aWV3TW9kZVwiLFVmLmdrKSxhLnNldChcImVudmlyb25tZW50TW9kZVwiLFVmLnhsKSxhLnNldChcImZpcnN0UGFydHlTZXJ2aW5nXCIsRGkoKXx8cWkpLGEuc2V0KFwiY29udGFpbmVyVXJsXCIscmMpLGEuS2EoKSxRKDQyKSYmKHFFPWEpKTtyZXR1cm4gYX1cbnJFLlQ9XCJnZXRDb250YWluZXJWZXJzaW9uXCI7ZnVuY3Rpb24gc0UoYSxiKXtiPWI9PT12b2lkIDA/ITA6Yjt2YXIgYztyZXR1cm4gY31zRS5UPVwiZ2V0Q29va2llVmFsdWVzXCI7ZnVuY3Rpb24gdEUoKXtyZXR1cm4gTWsoKX10RS5KPVwiaW50ZXJuYWwuZ2V0Q291bnRyeUNvZGVcIjtmdW5jdGlvbiB1RSgpe3ZhciBhPVtdO2E9RWooKTtyZXR1cm4gZGQoYSl9dUUuSj1cImludGVybmFsLmdldERlc3RpbmF0aW9uSWRzXCI7ZnVuY3Rpb24gdkUoYSxiKXt2YXIgYz1udWxsO3JldHVybiBjfXZFLko9XCJpbnRlcm5hbC5nZXRFbGVtZW50QXR0cmlidXRlXCI7ZnVuY3Rpb24gd0UoYSl7dmFyIGI9bnVsbDtyZXR1cm4gYn13RS5KPVwiaW50ZXJuYWwuZ2V0RWxlbWVudEJ5SWRcIjtmdW5jdGlvbiB4RShhKXt2YXIgYj1cIlwiO3JldHVybiBifXhFLko9XCJpbnRlcm5hbC5nZXRFbGVtZW50SW5uZXJUZXh0XCI7ZnVuY3Rpb24geUUoYSxiKXt2YXIgYz1udWxsO3JldHVybiBjfXlFLko9XCJpbnRlcm5hbC5nZXRFbGVtZW50UHJvcGVydHlcIjtmdW5jdGlvbiB6RShhKXt2YXIgYjtyZXR1cm4gYn16RS5KPVwiaW50ZXJuYWwuZ2V0RWxlbWVudFZhbHVlXCI7ZnVuY3Rpb24gQUUoYSl7dmFyIGI9MDtyZXR1cm4gYn1BRS5KPVwiaW50ZXJuYWwuZ2V0RWxlbWVudFZpc2liaWxpdHlSYXRpb1wiO2Z1bmN0aW9uIEJFKGEpe3ZhciBiPW51bGw7cmV0dXJuIGJ9QkUuSj1cImludGVybmFsLmdldEVsZW1lbnRzQnlDc3NTZWxlY3RvclwiO1xuZnVuY3Rpb24gQ0UoYSl7dmFyIGI7Syh0aGlzLmdldE5hbWUoKSxbXCJrZXlQYXRoOiFzdHJpbmdcIl0sYXJndW1lbnRzKTtMKHRoaXMsXCJyZWFkX2V2ZW50X2RhdGFcIixhKTt2YXIgYzthOnt2YXIgZD1hLGU9enoodGhpcykub3JpZ2luYWxFdmVudERhdGE7aWYoZSl7Zm9yKHZhciBmPWUsZz17fSxrPXt9LG09e30sbj1bXSxwPWQuc3BsaXQoXCJcXFxcXFxcXFwiKSxxPTA7cTxwLmxlbmd0aDtxKyspe2Zvcih2YXIgcj1wW3FdLnNwbGl0KFwiXFxcXC5cIiksdD0wO3Q8ci5sZW5ndGg7dCsrKXtmb3IodmFyIHU9clt0XS5zcGxpdChcIi5cIiksdj0wO3Y8dS5sZW5ndGg7disrKW4ucHVzaCh1W3ZdKSx2IT09dS5sZW5ndGgtMSYmbi5wdXNoKG0pO3QhPT1yLmxlbmd0aC0xJiZuLnB1c2goayl9cSE9PXAubGVuZ3RoLTEmJm4ucHVzaChnKX1mb3IodmFyIHc9W10seD1cIlwiLHk9bmEobiksQT15Lm5leHQoKTshQS5kb25lO0E9XG55Lm5leHQoKSl7dmFyIEI9QS52YWx1ZTtCPT09bT8ody5wdXNoKHgpLHg9XCJcIik6eD1CPT09Zz94K1wiXFxcXFwiOkI9PT1rP3grXCIuXCI6eCtCfXgmJncucHVzaCh4KTtmb3IodmFyIEM9bmEodyksSD1DLm5leHQoKTshSC5kb25lO0g9Qy5uZXh0KCkpe2lmKGY9PW51bGwpe2M9dm9pZCAwO2JyZWFrIGF9Zj1mW0gudmFsdWVdfWM9Zn1lbHNlIGM9dm9pZCAwfWI9ZGQoYyx0aGlzLkYsMSk7cmV0dXJuIGJ9Q0UuSj1cImludGVybmFsLmdldEV2ZW50RGF0YVwiO3ZhciBERT17fTtERS5lbmFibGVBV0ZsZWRnZT1RKDI3KTtERS5lbmFibGVBZHNDb252ZXJzaW9uVmFsaWRhdGlvbj1RKDE1KTtERS5lbmFibGVBdXRvUGlpT25QaG9uZUFuZEFkZHJlc3M9USgyNik7REUuZW5hYmxlQ2FjaGVkRWNvbW1lcmNlRGF0YT1RKDMzKTtERS5lbmFibGVDY2RQcmVBdXRvUGlpRGV0ZWN0aW9uPVEoMzQpO0RFLmVuYWJsZUNsb3VkUmVjb21tZW50YXRpb25zRXJyb3JMb2dnaW5nPVEoMzUpO0RFLmVuYWJsZUNsb3VkUmVjb21tZW50YXRpb25zU2NoZW1hSW5nZXN0aW9uPVEoMzYpO0RFLmVuYWJsZUNsb3VkUmV0YWlsSW5qZWN0UHVyY2hhc2VNZXRhZGF0YT1RKDM4KTtERS5lbmFibGVDbG91ZFJldGFpbExvZ2dpbmc9USgzNyk7REUuZW5hYmxlQ2xvdWRSZXRhaWxQYWdlQ2F0ZWdvcmllcz1RKDM5KTtERS5lbmFibGVDb25zZW50RGlzY2xvc3VyZUFjdGl2aXR5PVEoNDEpO0RFLmVuYWJsZUNvbnZlcnNpb25NYXJrZXJQYWdlVmlld1JlbmFtZT1RKDQzKTtcbkRFLmVuYWJsZURDRmxlZGdlPVEoNDcpO0RFLmVuYWJsZURlY29kZVVyaT1RKDY4KTtERS5lbmFibGVEZWZlckFsbEVuaGFuY2VkTWVhc3VyZW1lbnQ9USg0OCk7REUuZW5hYmxlRG1hQmxvY2tEaXNjbG9zdXJlPVEoNTEpO0RFLmVuYWJsZUV1aWRBdXRvTW9kZT1RKDU2KTtERS5lbmFibGVGb3JtU2tpcFZhbGlkYXRpb249USg2Myk7REUuZW5hYmxlR3RtRWNNb2RlRml4PVEoNzIpO0RFLmVuYWJsZVVybERlY29kZUV2ZW50VXNhZ2U9USgxMDEpO0RFLmVuYWJsZVpvbmVDb25maWdJbkNoaWxkQ29udGFpbmVycz1RKDEwMyk7REUudXNlRW5hYmxlQXV0b0V2ZW50T25Gb3JtQXBpcz1RKDExMik7REUuYXV0b1BpaUVsaWdpYmxlPVJrKCk7ZnVuY3Rpb24gRUUoKXtyZXR1cm4gZGQoREUpfUVFLko9XCJpbnRlcm5hbC5nZXRGbGFnc1wiO2Z1bmN0aW9uIEZFKCl7cmV0dXJuIG5ldyBhZChZeSl9RkUuSj1cImludGVybmFsLmdldEh0bWxJZFwiO2Z1bmN0aW9uIEdFKGEsYil7dmFyIGM7Syh0aGlzLmdldE5hbWUoKSxbXCJ0YXJnZXRJZDohc3RyaW5nXCIsXCJuYW1lOiFzdHJpbmdcIl0sYXJndW1lbnRzKTt2YXIgZD1YcihhKXx8e307Yz1kZChkW2JdLHRoaXMuRik7cmV0dXJuIGN9R0UuSj1cImludGVybmFsLmdldFByb2R1Y3RTZXR0aW5nc1BhcmFtZXRlclwiO2Z1bmN0aW9uIEhFKGEsYil7dmFyIGM7Syh0aGlzLmdldE5hbWUoKSxbXCJxdWVyeUtleTohc3RyaW5nXCIsXCJyZXRyaWV2ZUFsbDo/Ym9vbGVhblwiXSxhcmd1bWVudHMpO0wodGhpcyxcImdldF91cmxcIixcInF1ZXJ5XCIsYSk7dmFyIGQ9VmkoYWooRC5sb2NhdGlvbi5ocmVmKSxcInF1ZXJ5XCIpLGU9VWkoZCxhLGIpO2M9ZGQoZSx0aGlzLkYpO3JldHVybiBjfUhFLlQ9XCJnZXRRdWVyeVBhcmFtZXRlcnNcIjtmdW5jdGlvbiBJRShhLGIpe3ZhciBjO3JldHVybiBjfUlFLlQ9XCJnZXRSZWZlcnJlclF1ZXJ5UGFyYW1ldGVyc1wiO2Z1bmN0aW9uIEpFKGEpe3ZhciBiPVwiXCI7cmV0dXJuIGJ9SkUuVD1cImdldFJlZmVycmVyVXJsXCI7ZnVuY3Rpb24gS0UoKXtyZXR1cm4gTmsoKX1LRS5KPVwiaW50ZXJuYWwuZ2V0UmVnaW9uQ29kZVwiO2Z1bmN0aW9uIExFKGEsYil7dmFyIGM7cmV0dXJuIGN9TEUuSj1cImludGVybmFsLmdldFJlbW90ZUNvbmZpZ1BhcmFtZXRlclwiO2Z1bmN0aW9uIE1FKGEpe3ZhciBiPVwiXCI7cmV0dXJuIGJ9TUUuVD1cImdldFVybFwiO2Z1bmN0aW9uIE5FKCl7TCh0aGlzLFwiZ2V0X3VzZXJfYWdlbnRcIik7cmV0dXJuIG9jLnVzZXJBZ2VudH1ORS5KPVwiaW50ZXJuYWwuZ2V0VXNlckFnZW50XCI7dmFyIE9FPSExLFBFPWZ1bmN0aW9uKGEpe3ZhciBiPWEuZXZlbnROYW1lPT09VC5nLlNiJiZBaygpJiZYcyhhKSxjPWEubWV0YWRhdGEuaXNfc2d0bV9zZXJ2aWNlX3dvcmtlcixkPWEubWV0YWRhdGEuYmF0Y2hfb25fbmF2aWdhdGlvbixlPWEubWV0YWRhdGEuaXNfY29udmVyc2lvbixmPWEubWV0YWRhdGEuaXNfc2Vzc2lvbl9zdGFydCxnPWEubWV0YWRhdGEuY3JlYXRlX2RjX2pvaW4saz1hLm1ldGFkYXRhLmNyZWF0ZV9nb29nbGVfam9pbixtPWEubWV0YWRhdGEuZXVpZF9tb2RlX2VuYWJsZWQmJiEhV3MoYSk7cmV0dXJuISghTGMoKSYmIW9jLnNlbmRCZWFjb258fGV8fG18fGZ8fGd8fGt8fGJ8fGN8fCFkJiZPRSl9O1xudmFyIFFFPWZ1bmN0aW9uKGEpe3ZhciBiPTAsYz0wO3JldHVybntzdGFydDpmdW5jdGlvbigpe2I9QmIoKX0sc3RvcDpmdW5jdGlvbigpe2M9dGhpcy5nZXQoKX0sZ2V0OmZ1bmN0aW9uKCl7dmFyIGQ9MDthLnNoKCkmJihkPUJiKCktYik7cmV0dXJuIGQrY319fSxSRT1mdW5jdGlvbigpe3RoaXMuaj12b2lkIDA7dGhpcy5EPTA7dGhpcy5pc0FjdGl2ZT10aGlzLmlzVmlzaWJsZT10aGlzLkg9ITE7dGhpcy5SPXRoaXMuTT12b2lkIDB9O2JhPVJFLnByb3RvdHlwZTtiYS5Oaz1mdW5jdGlvbihhKXt2YXIgYj10aGlzO2lmKCF0aGlzLmope3RoaXMuSD1FLmhhc0ZvY3VzKCk7dGhpcy5pc1Zpc2libGU9IUUuaGlkZGVuO3RoaXMuaXNBY3RpdmU9ITA7dmFyIGM9ZnVuY3Rpb24oZCxlLGYpe0NjKGQsZSxmdW5jdGlvbihnKXtiLmouc3RvcCgpO2YoZyk7Yi5zaCgpJiZiLmouc3RhcnQoKX0pfTtjKEQsXCJmb2N1c1wiLGZ1bmN0aW9uKCl7Yi5IPSEwfSk7YyhELFwiYmx1clwiLGZ1bmN0aW9uKCl7Yi5IPVxuITF9KTtjKEQsXCJwYWdlc2hvd1wiLGZ1bmN0aW9uKGQpe2IuaXNBY3RpdmU9ITA7ZC5wZXJzaXN0ZWQmJk0oNTYpO2IuUiYmYi5SKCl9KTtjKEQsXCJwYWdlaGlkZVwiLGZ1bmN0aW9uKCl7Yi5pc0FjdGl2ZT0hMTtiLk0mJmIuTSgpfSk7YyhFLFwidmlzaWJpbGl0eWNoYW5nZVwiLGZ1bmN0aW9uKCl7Yi5pc1Zpc2libGU9IUUuaGlkZGVufSk7WHMoYSkmJiF0YyhcIkZpcmVmb3hcIikmJiF0YyhcIkZ4aU9TXCIpJiZjKEQsXCJiZWZvcmV1bmxvYWRcIixmdW5jdGlvbigpe09FPSEwfSk7dGhpcy5LaCgpO3RoaXMuRD0wfX07YmEuS2g9ZnVuY3Rpb24oKXt0aGlzLkQrPXRoaXMuS2YoKTt0aGlzLmo9UUUodGhpcyk7dGhpcy5zaCgpJiZ0aGlzLmouc3RhcnQoKX07YmEuWm09ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5LZigpO2I+MCYmKGEub1tULmcuT2RdPWIpfTtiYS5RbD1mdW5jdGlvbihhKXthLm9bVC5nLk9kXT12b2lkIDA7dGhpcy5LaCgpO3RoaXMuRD0wfTtiYS5zaD1mdW5jdGlvbigpe3JldHVybiB0aGlzLkgmJlxudGhpcy5pc1Zpc2libGUmJnRoaXMuaXNBY3RpdmV9O2JhLklsPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuRCt0aGlzLktmKCl9O2JhLktmPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaiYmdGhpcy5qLmdldCgpfHwwfTtiYS5IbT1mdW5jdGlvbihhKXt0aGlzLk09YX07YmEuWGo9ZnVuY3Rpb24oYSl7dGhpcy5SPWF9O3ZhciBURT1mdW5jdGlvbihhKXt2YXIgYj1hLm1ldGFkYXRhLmV2ZW50X3VzYWdlO2lmKEFycmF5LmlzQXJyYXkoYikpZm9yKHZhciBjPTA7YzxiLmxlbmd0aDtjKyspU0UoYltjXSk7dmFyIGQ9aWIoXCJHQTRfRVZFTlRcIik7ZCYmKGEuby5fZXU9ZCl9LFVFPWZ1bmN0aW9uKCl7ZGVsZXRlIGdiLkdBNF9FVkVOVH0sU0U9ZnVuY3Rpb24oYSl7aGIoXCJHQTRfRVZFTlRcIixhKX07ZnVuY3Rpb24gVkUoKXtyZXR1cm4gRC5nYUdsb2JhbD1ELmdhR2xvYmFsfHx7fX1mdW5jdGlvbiBXRSgpe3ZhciBhPVZFKCk7YS5oaWQ9YS5oaWR8fHNiKCk7cmV0dXJuIGEuaGlkfWZ1bmN0aW9uIFhFKGEsYil7dmFyIGM9VkUoKTtpZihjLnZpZD09PXZvaWQgMHx8YiYmIWMuZnJvbV9jb29raWUpYy52aWQ9YSxjLmZyb21fY29va2llPWJ9O1xudmFyIFlFPWZ1bmN0aW9uKGEsYixjKXt2YXIgZD1hLm1ldGFkYXRhLmNsaWVudF9pZF9zb3VyY2U7aWYoZD09PXZvaWQgMHx8Yzw9ZClhLm9bVC5nLm5iXT1iLGEubWV0YWRhdGEuY2xpZW50X2lkX3NvdXJjZT1jfSwkRT1mdW5jdGlvbihhLGIpe3ZhciBjPWEub1tULmcubmJdO2lmKFUoYS5tLFQuZy5JYikmJlUoYS5tLFQuZy5WYil8fGImJmM9PT1iKXJldHVybiBjO2lmKGMpe2M9XCJcIitjO2lmKCFaRShjLGEpKXJldHVybiBNKDMxKSxhLmlzQWJvcnRlZD0hMCxcIlwiO1hFKGMsVyhULmcuVSkpO3JldHVybiBjfU0oMzIpO2EuaXNBYm9ydGVkPSEwO3JldHVyblwiXCJ9LGFGPVtcIkdBMVwiXSxiRj1mdW5jdGlvbihhKXt2YXIgYj1hLm1ldGFkYXRhLmNvb2tpZV9vcHRpb25zLGM9Yi5wcmVmaXgrXCJfZ2FcIixkPUNvKGMsYi5kb21haW4sYi5wYXRoLGFGLFQuZy5VKTtpZighZCl7dmFyIGU9U3RyaW5nKFUoYS5tLFQuZy5vYyxcIlwiKSk7ZSYmZSE9PWMmJihkPUNvKGUsYi5kb21haW4sYi5wYXRoLGFGLFxuVC5nLlUpKX1yZXR1cm4gZH0sWkU9ZnVuY3Rpb24oYSxiKXt2YXIgYzt2YXIgZD1iLm1ldGFkYXRhLmNvb2tpZV9vcHRpb25zLGU9ZC5wcmVmaXgrXCJfZ2FcIixmPUVvKGQsdm9pZCAwLHZvaWQgMCxULmcuVSk7aWYoVShiLm0sVC5nLnFjKT09PSExJiZiRihiKT09PWEpYz0hMDtlbHNle3ZhciBnPURvKGEsYUZbMF0sZC5kb21haW4sZC5wYXRoKTtjPXVvKGUsZyxmKSE9PTF9cmV0dXJuIGN9O1xudmFyIGVGPWZ1bmN0aW9uKGEsYixjKXtpZighYilyZXR1cm4gYTtpZighYSlyZXR1cm4gYjt2YXIgZD1jRihhKTtpZighZClyZXR1cm4gYjt2YXIgZSxmPXdiKChlPVUoYy5tLFQuZy5qZCkpIT1udWxsP2U6MzApO2lmKCEoTWF0aC5mbG9vcihjLm1ldGFkYXRhLmV2ZW50X3N0YXJ0X3RpbWVzdGFtcF9tcy8xRTMpPmQuT2UrZio2MCkpcmV0dXJuIGE7dmFyIGc9Y0YoYik7aWYoIWcpcmV0dXJuIGE7Zy5LYz1kLktjKzE7dmFyIGs7cmV0dXJuKGs9ZEYoZy5zZXNzaW9uSWQsZy5LYyxnLnlkLGcuT2UsZy53aCxnLkdjLGcucGQpKSE9bnVsbD9rOmJ9LGhGPWZ1bmN0aW9uKGEsYil7dmFyIGM9Yi5tZXRhZGF0YS5jb29raWVfb3B0aW9ucyxkPWZGKGIsYyksZT1EbyhhLGdGWzBdLGMuZG9tYWluLGMucGF0aCksZj17QWI6VC5nLlUsZG9tYWluOmMuZG9tYWluLHBhdGg6Yy5wYXRoLGV4cGlyZXM6Yy56Yj9uZXcgRGF0ZShCYigpK051bWJlcihjLnpiKSoxRTMpOnZvaWQgMCxmbGFnczpjLmZsYWdzfTtcbnVvKGQsdm9pZCAwLGYpO3JldHVybiB1byhkLGUsZikhPT0xfSxpRj1mdW5jdGlvbihhKXt2YXIgYj1hLm1ldGFkYXRhLmNvb2tpZV9vcHRpb25zLGM9ZkYoYSxiKSxkPUNvKGMsYi5kb21haW4sYi5wYXRoLGdGLFQuZy5VKTtpZighZClyZXR1cm4gZDt2YXIgZT1qbyhjLHZvaWQgMCx2b2lkIDAsVC5nLlUpO2lmKGQmJmUubGVuZ3RoPjEpe00oMTE0KTtmb3IodmFyIGY9dm9pZCAwLGc9dm9pZCAwLGs9MDtrPGUubGVuZ3RoO2srKyl7dmFyIG09ZVtrXS5zcGxpdChcIi5cIik7aWYoIShtLmxlbmd0aDw3KSl7dmFyIG49TnVtYmVyKG1bNV0pO24mJighZ3x8bj5nKSYmKGc9bixmPWVba10pfX1mJiYhSGIoZixkKSYmKE0oMTE1KSxkPWYuc3BsaXQoXCIuXCIpLnNsaWNlKDIpLmpvaW4oXCIuXCIpKX1yZXR1cm4gZH0sakY9ZnVuY3Rpb24oYSl7cmV0dXJuIGRGKGEub1tULmcudWJdLGEub1tULmcuYmVdLGEub1tULmcuYWVdLE1hdGguZmxvb3IoYS5tZXRhZGF0YS5ldmVudF9zdGFydF90aW1lc3RhbXBfbXMvXG4xRTMpLGEubWV0YWRhdGEuam9pbl90aW1lcl9zZWN8fDAsISFhLm1ldGFkYXRhW1QuZy5rZl0sYS5vW1QuZy5QZF0pfSxkRj1mdW5jdGlvbihhLGIsYyxkLGUsZixnKXtpZihhJiZiKXt2YXIgaz1bYSxiLHdiKGMpLGQsZV07ay5wdXNoKGY/XCIxXCI6XCIwXCIpO2sucHVzaChnfHxcIjBcIik7cmV0dXJuIGsuam9pbihcIi5cIil9fSxmRj1mdW5jdGlvbihhLGIpe3JldHVybiBiLnByZWZpeCtcIl9nYV9cIithLnRhcmdldC5pZHNbbWxbMF1dfSxnRj1bXCJHUzFcIl0sY0Y9ZnVuY3Rpb24oYSl7aWYoYSl7dmFyIGI9YS5zcGxpdChcIi5cIik7aWYoIShiLmxlbmd0aDw1fHxiLmxlbmd0aD43KSl7Yi5sZW5ndGg8NyYmTSg2Nyk7dmFyIGM9TnVtYmVyKGJbMV0pLGQ9TnVtYmVyKGJbM10pLGU9TnVtYmVyKGJbNF18fDApO2N8fE0oMTE4KTtkfHxNKDExOSk7aXNOYU4oZSkmJk0oMTIwKTtpZihjJiZkJiYhaXNOYU4oZSkpcmV0dXJue3Nlc3Npb25JZDpiWzBdLEtjOmMseWQ6ISFOdW1iZXIoYlsyXSksT2U6ZCx3aDplLFxuR2M6Yls1XT09PVwiMVwiLHBkOmJbNl0hPT1cIjBcIj9iWzZdOnZvaWQgMH19fX07XG52YXIga0Y9ZnVuY3Rpb24oYSl7dmFyIGI9VShhLm0sVC5nLnFhKSxjPWEubS5EW1QuZy5xYV07aWYoYz09PWIpcmV0dXJuIGM7dmFyIGQ9aChiKTtjJiZjW1QuZy5XXSYmKGRbVC5nLlddPShkW1QuZy5XXXx8W10pLmNvbmNhdChjW1QuZy5XXSkpO3JldHVybiBkfSxsRj1mdW5jdGlvbihhLGIpe3ZhciBjPVVvKCEwKTtyZXR1cm4gYy5fdXAhPT1cIjFcIj97fTp7Y2xpZW50SWQ6Y1thXSxSYTpjW2JdfX0sbUY9ZnVuY3Rpb24oYSxiLGMpe3ZhciBkPVVvKCEwKSxlPWRbYl07ZSYmKFlFKGEsZSwyKSxaRShlLGEpKTt2YXIgZj1kW2NdO2YmJmhGKGYsYSk7cmV0dXJue2NsaWVudElkOmUsUmE6Zn19LG5GPSExLG9GPWZ1bmN0aW9uKGEpe3ZhciBiPWtGKGEpfHx7fSxjPWEubWV0YWRhdGEuY29va2llX29wdGlvbnMsZD1jLnByZWZpeCtcIl9nYVwiLGU9ZkYoYSxjKSxmPXt9O2RwKGJbVC5nLnpjXSwhIWJbVC5nLlddKSYmKGY9bUYoYSxkLGUpLGYuY2xpZW50SWQmJmYuUmEmJihuRj0hMCkpO2JbVC5nLlddJiZcbmFwKGZ1bmN0aW9uKCl7dmFyIGc9e30saz1iRihhKTtrJiYoZ1tkXT1rKTt2YXIgbT1pRihhKTttJiYoZ1tlXT1tKTt2YXIgbj1qbyhcIkZQTENcIix2b2lkIDAsdm9pZCAwLFQuZy5VKTtuLmxlbmd0aCYmKGcuX2ZwbGM9blswXSk7cmV0dXJuIGd9LGJbVC5nLlddLGJbVC5nLkpiXSwhIWJbVC5nLnRiXSk7cmV0dXJuIGZ9LHFGPWZ1bmN0aW9uKGEpe2lmKCFVKGEubSxULmcuV2EpKXJldHVybnt9O3ZhciBiPWEubWV0YWRhdGEuY29va2llX29wdGlvbnMsYz1iLnByZWZpeCtcIl9nYVwiLGQ9ZkYoYSxiKTticChmdW5jdGlvbigpe3ZhciBlO2lmKFcoXCJhbmFseXRpY3Nfc3RvcmFnZVwiKSllPXt9O2Vsc2V7dmFyIGY9e307ZT0oZi5fdXA9XCIxXCIsZltjXT1hLm9bVC5nLm5iXSxmW2RdPWpGKGEpLGYpfXJldHVybiBlfSwxKTtyZXR1cm4hVyhcImFuYWx5dGljc19zdG9yYWdlXCIpJiZwRigpP2xGKGMsZCk6e319LHBGPWZ1bmN0aW9uKCl7dmFyIGE9WGkoRC5sb2NhdGlvbixcImhvc3RcIiksYj1YaShhaihFLnJlZmVycmVyKSxcblwiaG9zdFwiKTtyZXR1cm4gYSYmYj9hPT09Ynx8YS5pbmRleE9mKFwiLlwiK2IpPj0wfHxiLmluZGV4T2YoXCIuXCIrYSk+PTA/ITA6ITE6ITF9O3ZhciByRj1mdW5jdGlvbihhKXtpZighYS5tZXRhZGF0YS5pc19tZXJjaGFudF9jZW50ZXImJmlqKGEubSkpe3ZhciBiPWtGKGEpfHx7fSxjPShkcChiW1QuZy56Y10sISFiW1QuZy5XXSk/VW8oITApLl9mcGxjOnZvaWQgMCl8fChqbyhcIkZQTENcIix2b2lkIDAsdm9pZCAwLFQuZy5VKS5sZW5ndGg+MD92b2lkIDA6XCIwXCIpO2Euby5fZnBsYz1jfX07ZnVuY3Rpb24gc0YoYSl7dmFyIGI9USg2NSkmJkRpKCk7aWYoWHMoYSl8fGIpYS5vW1QuZy5WaV09TmsoKXx8TWsoKX07dmFyIHVGPWZ1bmN0aW9uKGEsYil7dmFyIGM9aWkuZ3JsO2N8fChjPXRGKCksaWkuZ3JsPWMpO2MoYil8fChNKDM1KSxhLmlzQWJvcnRlZD0hMCl9LHRGPWZ1bmN0aW9uKCl7dmFyIGE9QmIoKSxiPWErODY0RTUsYz0yMCxkPTVFMztyZXR1cm4gZnVuY3Rpb24oZSl7dmFyIGY9QmIoKTtmPj1iJiYoYj1mKzg2NEU1LGQ9NUUzKTtjPU1hdGgubWluKGMrKGYtYSkvMUUzKjUsMjApO2E9Zjt2YXIgZz0hMTtkPDF8fGM8MXx8KGc9ITAsZC0tLGMtLSk7ZSYmKGUuc2w9ZCxlLm1sPWMpO3JldHVybiBnfX07XG52YXIgdkY9ZnVuY3Rpb24oYSl7aWYoVShhLm0sVC5nLmJkKSE9PXZvaWQgMClhLmNvcHlUb0hpdERhdGEoVC5nLmJkKTtlbHNle3ZhciBiPVUoYS5tLFQuZy5wZiksYyxkO2E6e2lmKG5GKXt2YXIgZT1rRihhKXx8e307aWYoZSYmZVtULmcuV10pZm9yKHZhciBmPVZpKGFqKGEub1tULmcuQmFdKSxcImhvc3RcIiwhMCksZz1lW1QuZy5XXSxrPTA7azxnLmxlbmd0aDtrKyspaWYoZ1trXWluc3RhbmNlb2YgUmVnRXhwKXtpZihnW2tdLnRlc3QoZikpe2Q9ITA7YnJlYWsgYX19ZWxzZSBpZihmLmluZGV4T2YoZ1trXSk+PTApe2Q9ITA7YnJlYWsgYX19ZD0hMX1pZighKGM9ZCkpe3ZhciBtO2lmKG09YilhOntmb3IodmFyIG49Yi5pbmNsdWRlX2NvbmRpdGlvbnN8fFtdLHA9VmkoYWooYS5vW1QuZy5CYV0pLFwiaG9zdFwiLCEwKSxxPTA7cTxuLmxlbmd0aDtxKyspaWYobltxXS50ZXN0KHApKXttPSEwO2JyZWFrIGF9bT0hMX1jPW19YyYmKGEub1tULmcuYmRdPVwiMVwiLFNFKDQpKX19O1xudmFyIHdGPWZ1bmN0aW9uKGEsYil7Rm4oKSYmKGEuZ2NzPUduKCksYi5tZXRhZGF0YS5pc19jb25zZW50X3VwZGF0ZSYmKGEuZ2N1PVwiMVwiKSk7YS5nY2Q9S24oYi5tKTtFbihiLm0pP2EubnBhPVwiMFwiOmEubnBhPVwiMVwiO1ZuKCkmJihhLl9uZz1cIjFcIil9LHpGPWZ1bmN0aW9uKGEpe2lmKGEubWV0YWRhdGEuaXNfbWVyY2hhbnRfY2VudGVyKXJldHVybnt1cmw6amooXCJodHRwczovL3d3dy5tZXJjaGFudC1jZW50ZXItYW5hbHl0aWNzLmdvb2dcIikrXCIvbWMvY29sbGVjdFwiLGVuZHBvaW50OjIwfTt2YXIgYj1maihpaihhLm0pLFwiL2cvY29sbGVjdFwiKTtpZihiKXJldHVybnt1cmw6YixlbmRwb2ludDoxNn07aWYoRGkoKSlyZXR1cm57dXJsOlwiXCIrQ2koKStcIi9nL2NvbGxlY3RcIixlbmRwb2ludDoxNn07dmFyIGM9WXMoYSksZD1VKGEubSxULmcubGIpO3JldHVybiBjJiYhT2soKSYmZCE9PSExJiZzRCgpJiZXKFQuZy5QKSYmVyhULmcuVSk/e3VybDp4RigpLGVuZHBvaW50OjE3fTp7dXJsOnlGKCksXG5lbmRwb2ludDoxNn19LEFGPSExO0FGPSEwO3ZhciBCRj17fTtCRltULmcubmJdPVwiY2lkXCI7QkZbVC5nLmdnXT1cImdjdXRcIjtCRltULmcuVWJdPVwiYXJlXCI7QkZbVC5nLmVmXT1cInBzY2RsXCI7QkZbVC5nLmxmXT1cIl9maWRcIjtCRltULmcudmddPVwiX2dlb1wiO0JGW1QuZy5zYl09XCJnZGlkXCI7QkZbVC5nLnhjXT1cIl9uZ1wiO0JGW1QuZy5IYl09XCJmcm1cIjtCRltULmcuYmRdPVwiaXJcIjtCRltULmcuT2FdPVwidWxcIjtCRltULmcuRmddPVwicGFlXCI7QkZbVC5nLlpkXT1cIl9yZGlcIjtCRltULmcuS2JdPVwic3JcIjtCRltULmcuVWldPVwidGlkXCI7QkZbVC5nLnZmXT1cInR0XCI7QkZbVC5nLmxkXT1cImVjX21vZGVcIjtCRltULmcuZWpdPVwiZ3RtX3VwXCI7QkZbVC5nLndmXT1cInVhYVwiO0JGW1QuZy54Zl09XCJ1YWJcIjtCRltULmcueWZdPVwidWFmdmxcIjtCRltULmcuemZdPVwidWFtYlwiO0JGW1QuZy5BZl09XCJ1YW1cIjtCRltULmcuQmZdPVwidWFwXCI7QkZbVC5nLkNmXT1cInVhcHZcIjtCRltULmcuRGZdPVwidWF3XCI7QkZbVC5nLlZpXT1cInVyXCI7QkZbVC5nLmRkXT1cImxwc1wiO3ZhciBDRj17fTtDRltULmcuTmNdPVwiY2NcIjtDRltULmcuT2NdPVwiY2lcIjtDRltULmcuUGNdPVwiY21cIjtDRltULmcuUWNdPVwiY25cIjtDRltULmcuU2NdPVwiY3NcIjtDRltULmcuVGNdPVwiY2tcIjtDRltULmcueGFdPVwiY3VcIjtDRltULmcucmFdPVxuXCJkbFwiO0NGW1QuZy5CYV09XCJkclwiO0NGW1QuZy5aYV09XCJkdFwiO0NGW1QuZy5hZV09XCJzZWdcIjtDRltULmcudWJdPVwic2lkXCI7Q0ZbVC5nLmJlXT1cInNjdFwiO0NGW1QuZy56YV09XCJ1aWRcIjtRKDEwNSkmJihDRltULmcuZmRdPVwiZHBcIik7dmFyIERGPXt9O0RGW1QuZy5PZF09XCJfZXRcIjtERltULmcucGJdPVwiZWRpZFwiO3ZhciBFRj17fTtFRltULmcuTmNdPVwiY2NcIjtFRltULmcuT2NdPVxuXCJjaVwiO0VGW1QuZy5QY109XCJjbVwiO0VGW1QuZy5RY109XCJjblwiO0VGW1QuZy5TY109XCJjc1wiO0VGW1QuZy5UY109XCJja1wiO3ZhciBGRj17fSxHRj1PYmplY3QuZnJlZXplKChGRltULmcuQ2FdPTEsRkYpKSx5Rj1mdW5jdGlvbigpe3ZhciBhPVwid3d3XCI7QUYmJlFrKCkmJihhPVFrKCkpO3JldHVyblwiaHR0cHM6Ly9cIithK1wiLmdvb2dsZS1hbmFseXRpY3MuY29tL2cvY29sbGVjdFwifSx4Rj1mdW5jdGlvbigpe3ZhciBhO0FGJiZRaygpIT09XCJcIiYmKGE9UWsoKSk7cmV0dXJuXCJodHRwczovL1wiKyhhP2ErXCIuXCI6XCJcIikrXCJhbmFseXRpY3MuZ29vZ2xlLmNvbS9nL2NvbGxlY3RcIn0sSEY9ZnVuY3Rpb24oYSxiLGMpe3ZhciBkPXt9LGU9e30sZj17fTtkLnY9XCIyXCI7ZC50aWQ9YS50YXJnZXQuZGVzdGluYXRpb25JZDtkLmd0bT1Zbih7c2E6YS5tZXRhZGF0YS5zb3VyY2VfY2Fub25pY2FsX2lkfSk7ZC5fcD1RKDExNCk/dmk6V0UoKTtjJiYoZC5lbT1jKTthLm1ldGFkYXRhLmNyZWF0ZV9nb29nbGVfam9pbiYmXG4oZC5fZ2F6PTEpO3dGKGQsYSk7Tm4oKSYmKGQuZG1hX2Nwcz1MbigpKTtkLmRtYT1NbigpO2puKHJuKCkpJiYoZC50Y2ZkPVVuKCkpO0JpLmomJihkLnRhZ19leHA9Qmkuaik7dmFyIGc9YS5vW1QuZy5zYl07ZyYmKGQuZ2RpZD1nKTtlLmVuPVN0cmluZyhhLmV2ZW50TmFtZSk7YS5tZXRhZGF0YS5pc19maXJzdF92aXNpdCYmKGUuX2Z2PWEubWV0YWRhdGEuaXNfZmlyc3RfdmlzaXRfY29udmVyc2lvbj8yOjEpO2EubWV0YWRhdGEuaXNfbmV3X3RvX3NpdGUmJihlLl9uc2k9MSk7YS5tZXRhZGF0YS5pc19zZXNzaW9uX3N0YXJ0JiYoZS5fc3M9YS5tZXRhZGF0YS5pc19zZXNzaW9uX3N0YXJ0X2NvbnZlcnNpb24/MjoxKTthLm1ldGFkYXRhLmlzX2NvbnZlcnNpb24mJihlLl9jPTEpO2EubWV0YWRhdGEuaXNfZXh0ZXJuYWxfZXZlbnQmJihlLl9lZT0xKTtpZihhLm1ldGFkYXRhLmlzX2Vjb21tZXJjZSl7dmFyIGs9YS5vW1QuZy5kYV18fFUoYS5tLFQuZy5kYSk7aWYoQXJyYXkuaXNBcnJheShrKSlmb3IodmFyIG09XG4wO208ay5sZW5ndGgmJm08MjAwO20rKyllW1wicHJcIisobSsxKV09WWYoa1ttXSl9dmFyIG49YS5vW1QuZy5wYl07biYmKGUuZWRpZD1uKTt2YXIgcD1mdW5jdGlvbih0LHUpe2lmKHR5cGVvZiB1IT09XCJvYmplY3RcInx8IUdGW3RdKXt2YXIgdj1cImVwLlwiK3Qsdz1cImVwbi5cIit0O3Q9cGIodSk/dzp2O3ZhciB4PXBiKHUpP3Y6dztlLmhhc093blByb3BlcnR5KHgpJiZkZWxldGUgZVt4XTtlW3RdPVN0cmluZyh1KX19O3ooYS5vLGZ1bmN0aW9uKHQsdSl7aWYodSE9PXZvaWQgMCYmIVRoLmhhc093blByb3BlcnR5KHQpKXt1PT09bnVsbCYmKHU9XCJcIik7dmFyIHY7dmFyIHc9dTt0IT09VC5nLlBkP3Y9ITE6YS5tZXRhZGF0YS5ldWlkX21vZGVfZW5hYmxlZHx8WHMoYSk/KGQuZWNpZD13LHY9ITApOnY9dm9pZCAwO2lmKCF2JiZ0IT09VC5nLmtmKXt2YXIgeD11O3U9PT0hMCYmKHg9XCIxXCIpO3U9PT0hMSYmKHg9XCIwXCIpO3g9U3RyaW5nKHgpO3ZhciB5O2lmKEJGW3RdKXk9QkZbdF0sZFt5XT14O1xuZWxzZSBpZihDRlt0XSl5PUNGW3RdLGZbeV09eDtlbHNlIGlmKERGW3RdKXk9REZbdF0sZVt5XT14O2Vsc2UgaWYodC5jaGFyQXQoMCk9PT1cIl9cIilkW3RdPXg7ZWxzZXt2YXIgQTtFRlt0XT9BPSEwOnQhPT1ULmcuUmM/QT0hMToodHlwZW9mIHUhPT1cIm9iamVjdFwiJiZwKHQsdSksQT0hMCk7QXx8cCh0LHUpfX19fSk7KGZ1bmN0aW9uKHQpe1hzKGEpJiZ0eXBlb2YgdD09PVwib2JqZWN0XCImJnoodHx8e30sZnVuY3Rpb24odSx2KXt0eXBlb2YgdiE9PVwib2JqZWN0XCImJihkW1wic3N0LlwiK3VdPVN0cmluZyh2KSl9KX0pKGEub1tULmcucWVdKTt2YXIgcT1hLm9bVC5nLmFiXXx8e307USg3NSkmJlUoYS5tLFQuZy5sYix2b2lkIDAsNCk9PT0hMSYmKGQubmdzPVwiMVwiKTt6KHEsZnVuY3Rpb24odCx1KXt1IT09dm9pZCAwJiYoKHU9PT1udWxsJiYodT1cIlwiKSx0IT09VC5nLnphfHxmLnVpZCk/Ylt0XSE9PXUmJihlWyhwYih1KT9cInVwbi5cIjpcInVwLlwiKStTdHJpbmcodCldPVN0cmluZyh1KSxiW3RdPVxudSk6Zi51aWQ9U3RyaW5nKHUpKX0pO3ZhciByPXpGKGEpO2ZnLmNhbGwodGhpcyx7aWE6ZCxMYzpmLGloOmV9LHIudXJsLHIuZW5kcG9pbnQsWHMoYSksdm9pZCAwKX07eWEoSEYsZmcpO3ZhciBJRj1mdW5jdGlvbihhKXt0aGlzLkg9YTt0aGlzLmo9XCJcIn0sSkY9ZnVuY3Rpb24oYSxiKXthLkQ9YjtyZXR1cm4gYX0sS0Y9ZnVuY3Rpb24oYSxiKXtiPWEuaitiO2Zvcih2YXIgYz1iLmluZGV4T2YoXCJcXG5cXG5cIik7YyE9PS0xOyl7dmFyIGQ9YSxlO2E6e3ZhciBmPW5hKGIuc3Vic3RyaW5nKDAsYykuc3BsaXQoXCJcXG5cIikpLGc9Zi5uZXh0KCkudmFsdWUsaz1mLm5leHQoKS52YWx1ZTtpZihnLmluZGV4T2YoXCJldmVudDogbWVzc2FnZVwiKT09PTAmJmsuaW5kZXhPZihcImRhdGE6IFwiKT09PTApdHJ5e2U9SlNPTi5wYXJzZShrLnN1YnN0cmluZyhrLmluZGV4T2YoXCI6XCIpKzEpKTticmVhayBhfWNhdGNoKEYpe31lPXZvaWQgMH12YXIgbT1kLG49ZTtpZihuKXt2YXIgcD1uLnNlbmRfcGl4ZWwscT1uLm9wdGlvbnMscj1tLkg7aWYocCl7dmFyIHQ9cHx8W107aWYoQXJyYXkuaXNBcnJheSh0KSlmb3IodmFyIHU9U2EocSk/cTp7fSx2PW5hKHQpLHc9di5uZXh0KCk7IXcuZG9uZTt3PXYubmV4dCgpKXIody52YWx1ZSxcbnUpfXZhciB4PW4uY3JlYXRlX2lmcmFtZSx5PW4ub3B0aW9ucyxBPW0uRDtpZih4JiZBKXt2YXIgQj14fHxbXTtpZihBcnJheS5pc0FycmF5KEIpKWZvcih2YXIgQz1TYSh5KT95Ont9LEg9bmEoQiksST1ILm5leHQoKTshSS5kb25lO0k9SC5uZXh0KCkpQShJLnZhbHVlLEMpfX1iPWIuc3Vic3RyaW5nKGMrMik7Yz1iLmluZGV4T2YoXCJcXG5cXG5cIil9YS5qPWJ9O2Z1bmN0aW9uIExGKGEpe3ZhciBiPWEuc2VhcmNoO3JldHVybiBhLnByb3RvY29sK1wiLy9cIithLmhvc3RuYW1lK2EucGF0aG5hbWUrKGI/YitcIiZyaWNoc3N0c3NlXCI6XCI/cmljaHNzdHNzZVwiKX07XG52YXIgTUY9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gYS5yZXBsYWNlKC9cXCRcXHsoW15cXH1dKylcXH0vZyxmdW5jdGlvbihjLGQpe3JldHVybiBiW2RdfHxjfSl9LE5GPWZ1bmN0aW9uKGEpe3ZhciBiPXt9LGM9XCJcIixkPWEucGF0aG5hbWUuaW5kZXhPZihcIi9nL2NvbGxlY3RcIik7ZD49MCYmKGM9YS5wYXRobmFtZS5zdWJzdHJpbmcoMCxkKSk7Yi50cmFuc3BvcnRfdXJsPWEucHJvdG9jb2wrXCIvL1wiK2EuaG9zdG5hbWUrYztyZXR1cm4gYn0sT0Y9ZnVuY3Rpb24oYSxiLGMpe3ZhciBkPTAsZT1uZXcgRC5YTUxIdHRwUmVxdWVzdDtlLndpdGhDcmVkZW50aWFscz0hMDtlLm9ucHJvZ3Jlc3M9ZnVuY3Rpb24oZil7aWYoZS5zdGF0dXM9PT0yMDApe3ZhciBnPWUucmVzcG9uc2VUZXh0LnN1YnN0cmluZyhkKTtkPWYubG9hZGVkO0tGKGMsZyl9fTtlLm9wZW4oYj9cIlBPU1RcIjpcIkdFVFwiLGEpO2Uuc2V0QXR0cmlidXRpb25SZXBvcnRpbmcmJmUuc2V0QXR0cmlidXRpb25SZXBvcnRpbmcoe2V2ZW50U291cmNlRWxpZ2libGU6ITEsdHJpZ2dlckVsaWdpYmxlOiEwfSk7XG5lLnNlbmQoYil9LFFGPWZ1bmN0aW9uKGEsYixjKXt2YXIgZD1PYmplY3QuYXNzaWduKHt9LFBGKTtiJiYoZC5ib2R5PWIsZC5tZXRob2Q9XCJQT1NUXCIpO0QuZmV0Y2goYSxkKS50aGVuKGZ1bmN0aW9uKGUpe2lmKGUub2smJmUuYm9keSl7dmFyIGY9ZS5ib2R5LmdldFJlYWRlcigpO3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihnKXtmdW5jdGlvbiBrKCl7Zi5yZWFkKCkudGhlbihmdW5jdGlvbihtKXt2YXIgbixwO249bS5kb25lO3A9bS52YWx1ZTtpZihuKWcoKTtlbHNle3ZhciBxPShuZXcgVGV4dERlY29kZXIpLmRlY29kZShwKTtLRihjLHEpO2soKX19KS5jYXRjaChmdW5jdGlvbigpe2coKX0pfWsoKX0pfX0pLmNhdGNoKGZ1bmN0aW9uKCl7USg4OCkmJihhKz1cIiZfej1yZXRyeUZldGNoXCIsYj9KYyhhLGIpOkljKGEpKX0pfSxSRj1mdW5jdGlvbihhLGIpe3JldHVybiBKRihuZXcgSUYoZnVuY3Rpb24oYyxkKXt2YXIgZT1NRihjLGEpO2ImJihlPWUucmVwbGFjZShcIl9pc19zdz0wXCIsXG5iKSk7dmFyIGY9e307ZC5hdHRyaWJ1dGlvbl9yZXBvcnRpbmcmJihmLmF0dHJpYnV0aW9uc3JjPVwiXCIpO0FjKGUsdm9pZCAwLHZvaWQgMCxmKX0pLGZ1bmN0aW9uKGMsZCl7dmFyIGU9TUYoYyxhKSxmPWQuZGVkdXBlX2tleTtmJiZOdChlLGYpfSl9LFNGPWZ1bmN0aW9uKGEsYixjLGQpe3ZhciBlPVJGKGMsZCk7USg4NykmJkxjKCk/UUYoYSxiLGUpOk9GKGEsYixlKX0sVEY9ZnVuY3Rpb24oYSxiKXt2YXIgYz1haihhKSxkPU5GKGMpLGU9TEYoYyk7USg5MSk/c3QoZSxiLGQsZnVuY3Rpb24oZil7U0YoZSxiLGQsZil9KTpTRihlLGIsZCl9LFBGPU9iamVjdC5mcmVlemUoe2NhY2hlOlwibm8tc3RvcmVcIixjcmVkZW50aWFsczpcImluY2x1ZGVcIixtZXRob2Q6XCJHRVRcIixrZWVwYWxpdmU6ITAscmVkaXJlY3Q6XCJmb2xsb3dcIn0pO1xudmFyIFVGPWZ1bmN0aW9uKGEsYil7cmV0dXJuIGE/W2EsYl0uam9pbihcIiZcIik6Yn0sVkY9ZnVuY3Rpb24oYSxiLGMpe3ZhciBkPWErXCI/XCIrYjtjP0pjKGQsYyk6SWMoZCl9LFhGPWZ1bmN0aW9uKGEsYixjLGQpe3ZhciBlPWIsZj1PYygpO2YhPT12b2lkIDAmJihlKz1cIiZ0ZmQ9XCIrTWF0aC5yb3VuZChmKSk7Yj1lO3ZhciBnPWErXCI/XCIrYjtXRiYmKGQ9IUdiKGcseUYoKSkmJiFHYihnLHhGKCkpKTtpZihkJiYhT0UpVEYoZyxjKTtlbHNle3ZhciBrPWI7TGMoKT9NYyhhK1wiP1wiK2ssYyx7bm9GYWxsYmFjazohMH0pfHxWRihhLFVGKGssXCJfej1mYWlsZWRmZXRjaFwiKSxjKTpWRihhLFVGKGssXCJfej1ub2ZldGNoXCIpLGMpfX0sWUY9ZnVuY3Rpb24oYSxiKXtmdW5jdGlvbiBjKHUpe24ucHVzaCh1K1wiPVwiK2VuY29kZVVSSUNvbXBvbmVudChcIlwiK2EuaWFbdV0pKX12YXIgZD1iLlBtLGU9Yi5RbSxmPWIuS2wsZz1iLmJtLGs9Yi5hbSxtPWIuR207aWYoZHx8ZSl7dmFyIG49W107YS5pYS5fbmcmJlxuYyhcIl9uZ1wiKTtjKFwidGlkXCIpO2MoXCJjaWRcIik7YyhcImd0bVwiKTtuLnB1c2goXCJhaXA9MVwiKTthLkxjLnVpZCYmIWsmJm4ucHVzaChcInVpZD1cIitlbmNvZGVVUklDb21wb25lbnQoXCJcIithLkxjLnVpZCkpO3ZhciBwPWZ1bmN0aW9uKCl7YyhcImRtYVwiKTthLmlhLmRtYV9jcHMhPW51bGwmJmMoXCJkbWFfY3BzXCIpO2EuaWEuZ2NzIT1udWxsJiZjKFwiZ2NzXCIpO2MoXCJnY2RcIik7YS5pYS5ucGEhPW51bGwmJmMoXCJucGFcIil9O3AoKTthLmlhLmZybSE9bnVsbCYmYyhcImZybVwiKTtkJiYoQmkuaiYmbi5wdXNoKFwidGFnX2V4cD1cIitCaS5qKSxWRihcImh0dHBzOi8vc3RhdHMuZy5kb3VibGVjbGljay5uZXQvZy9jb2xsZWN0XCIsXCJ2PTImXCIrbi5qb2luKFwiJlwiKSksbi5qb2luKFwiJlwiKSk7aWYoZSl7dmFyIHE9ZnVuY3Rpb24oKXt2YXIgdT1QdCgpK1wiL3RkL2dhL3J1bD9cIjtuPVtdO2MoXCJ0aWRcIik7bi5wdXNoKFwiZ2FjaWQ9XCIrZW5jb2RlVVJJQ29tcG9uZW50KFN0cmluZyhhLmlhLmNpZCkpKTtjKFwiZ3RtXCIpO3AoKTtcbmMoXCJwc2NkbFwiKTthLmlhLl9uZyE9bnVsbCYmYyhcIl9uZ1wiKTtuLnB1c2goXCJhaXA9MVwiKTtuLnB1c2goXCJmbGVkZ2U9MVwiKTthLmlhLmZybSE9bnVsbCYmYyhcImZybVwiKTtCaS5qJiZuLnB1c2goXCJ0YWdfZXhwPVwiK0JpLmopO24ucHVzaChcIno9XCIrc2IoKSk7dmFyIHY9dStuLmpvaW4oXCImXCIpO050KHYsYS5pYS50aWQpfTtCaS5qJiZuLnB1c2goXCJ0YWdfZXhwPVwiK0JpLmopO24ucHVzaChcIno9XCIrc2IoKSk7aWYoIWcpe3ZhciByPWYmJkdiKGYsXCJnb29nbGUuXCIpJiZmIT09XCJnb29nbGUuY29tXCI/XCJodHRwczovL3d3dy4lL2Fkcy9nYS1hdWRpZW5jZXM/dj0xJnQ9c3Imc2xmX3JkPTEmX3I9NCZcIi5yZXBsYWNlKFwiJVwiLGYpOnZvaWQgMDtpZihyKXt2YXIgdD1yK24uam9pbihcIiZcIik7QWModCl9fVEoNzUpJiZtJiYhT0UmJnEoKX19fSxXRj0hMTtcbnZhciBaRj1mdW5jdGlvbigpe3RoaXMuTT0xO3RoaXMuUj17fTt0aGlzLkQ9LTE7dGhpcy5qPW5ldyBaZn07WkYucHJvdG90eXBlLkg9ZnVuY3Rpb24oYSxiKXt2YXIgYz10aGlzLGQ9bmV3IEhGKGEsdGhpcy5SLGIpLGU9UEUoYSk7ZSYmdGhpcy5qLlIoZCl8fHRoaXMuZmx1c2goKTtpZihlJiZ0aGlzLmouYWRkKGQpKXtpZih0aGlzLkQ8MCl7dmFyIGY9RC5zZXRUaW1lb3V0LGc7WHMoYSk/JEY/KCRGPSExLGc9YUcpOmc9Ykc6Zz01RTM7dGhpcy5EPWYuY2FsbChELGZ1bmN0aW9uKCl7Yy5mbHVzaCgpfSxnKX19ZWxzZXt2YXIgaz1iZyhkLHRoaXMuTSsrKTtYRihkLmJhc2VVcmwsay5wYXJhbXMsay5ib2R5LGQuSCk7dmFyIG09YS5tZXRhZGF0YS5jcmVhdGVfZGNfam9pbixuPWEubWV0YWRhdGEuY3JlYXRlX2dvb2dsZV9qb2luLHA9VShhLm0sVC5nLkFhKSE9PSExLHE9RW4oYS5tKSxyPXtldmVudElkOmEubS5ldmVudElkLHByaW9yaXR5SWQ6YS5tLnByaW9yaXR5SWR9LHQ9YS5vW1QuZy5GZ10sXG51PXtQbTptLFFtOm4sS2w6U2soKSxEbjpwLENuOnEsYm06T2soKSxhbTphLm1ldGFkYXRhLmV1aWRfbW9kZV9lbmFibGVkLEpuOnIsR206dCxtOmEubX07WUYoZCx1KX1zdihhLm0uZXZlbnRJZCxhLmV2ZW50TmFtZSl9O1pGLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24oYSl7YS5tZXRhZGF0YS5ldWlkX21vZGVfZW5hYmxlZCYmIU9FP3RoaXMuWihhKTp0aGlzLkgoYSl9O1pGLnByb3RvdHlwZS5mbHVzaD1mdW5jdGlvbigpe2lmKHRoaXMuai5ldmVudHMubGVuZ3RoKXt2YXIgYT1kZyh0aGlzLmosdGhpcy5NKyspO1hGKHRoaXMuai5iYXNlVXJsLGEucGFyYW1zLGEuYm9keSx0aGlzLmouRCk7dGhpcy5qPW5ldyBaZjt0aGlzLkQ+PTAmJihELmNsZWFyVGltZW91dCh0aGlzLkQpLHRoaXMuRD0tMSl9fTtaRi5wcm90b3R5cGUuWj1mdW5jdGlvbihhKXt2YXIgYj10aGlzLGM9V3MoYSk7Yz93aChjLGZ1bmN0aW9uKGQpe2IuSChhLGQuc3BsaXQoXCJ+XCIpLmxlbmd0aD09PTE/dm9pZCAwOmQpfSk6XG50aGlzLkgoYSl9O3ZhciBhRz1QaCgnJyw1MDApLGJHPVBoKCcnLDVFMyksJEY9ITA7XG52YXIgY0c9ZnVuY3Rpb24oYSxiLGMpe2M9PT12b2lkIDAmJihjPXt9KTtpZih0eXBlb2YgYj09PVwib2JqZWN0XCIpZm9yKHZhciBkIGluIGIpY0coYStcIi5cIitkLGJbZF0sYyk7ZWxzZSBjW2FdPWI7cmV0dXJuIGN9LGRHPWZ1bmN0aW9uKGEpe2Zvcih2YXIgYj17fSxjPW5hKGEpLGQ9Yy5uZXh0KCk7IWQuZG9uZTtkPWMubmV4dCgpKXt2YXIgZT1kLnZhbHVlO2JbZV09ISFXKGUpfXJldHVybiBifSxmRz1mdW5jdGlvbihhLGIpe3ZhciBjPWVHLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4hVyhlKX0pO2lmKGMubGVuZ3RoKXt2YXIgZD1kRyhjKTthbChjLGZ1bmN0aW9uKCl7Zm9yKHZhciBlPWRHKGMpLGY9W10sZz1uYShjKSxrPWcubmV4dCgpOyFrLmRvbmU7az1nLm5leHQoKSl7dmFyIG09ay52YWx1ZTshZFttXSYmZVttXSYmZi5wdXNoKG0pO2VbbV0mJihkW21dPSEwKX1pZihmLmxlbmd0aCl7Yi5tZXRhZGF0YS5pc19jb25zZW50X3VwZGF0ZT0hMDt2YXIgbj1mLm1hcChmdW5jdGlvbihwKXtyZXR1cm4gY2lbcF19KS5qb2luKFwiLlwiKTtcbm4mJlRzKGIsXCJnY3V0XCIsbik7YShiKX19KX19LGVHPVtULmcuUCxULmcuT10sZ0c9ZnVuY3Rpb24oYSl7WHMoYSkmJkFrKCkmJlRzKGEsXCJybmRcIixOcSgpKX0saEc9ZnVuY3Rpb24oYSl7fSxpRz1mdW5jdGlvbihhKXtpZihYcyhhKSl7VShhLm0sVC5nLmxiLHZvaWQgMCw0KT09PSExJiZUcyhhLFwibmdzXCIsMSk7T2soKSYmVHMoYSxcImdhX3JkXCIsMSk7c0QoKXx8VHMoYSxcIm5nc3RcIiwxKTt2YXIgYj1TaygpO2ImJlRzKGEsXCJldGxkXCIsYil9fSxqRz1mdW5jdGlvbihhKXtpZihYcyhhKSl7dmFyIGI9QUY/UWsoKTpcIlwiO2ImJlRzKGEsXCJnY3N1YlwiLGIpfX0sa0c9ZnVuY3Rpb24oYSl7WHMoYSkmJkFrKCkmJlxuVShhLm0sVC5nLmZhKSYmVHMoYSxcImFkclwiLDEpfSxsRz1mdW5jdGlvbihhKXtpZihYcyhhKSl7dmFyIGI9Z3IoKTtiJiZUcyhhLFwidXNfcHJpdmFjeVwiLGIpO3ZhciBjPXluKCk7YyYmVHMoYSxcImdkcHJcIixjKTt2YXIgZD14bigpO2QmJlRzKGEsXCJnZHByX2NvbnNlbnRcIixkKX19LG1HPWZ1bmN0aW9uKGEpe2lmKFhzKGEpKXt2YXIgYj1VcyhhLFwiY2NkX2FkZF8xcF9kYXRhXCIsITEpPzE6MDtUcyhhLFwidWRlXCIsYik7dmFyIGM9ZnVuY3Rpb24oZSl7dmFyIGY9Y0coVC5nLkNhLGUpO3ooZixmdW5jdGlvbihnLGspe2Eub1tnXT1rfSl9LGQ9VShhLm0sVC5nLkNhKTtkIT09dm9pZCAwPyhjKGQpLGEub1tULmcubGRdPVwiY1wiKTpjKGEubWV0YWRhdGEudXNlcl9kYXRhKTthLm1ldGFkYXRhLnVzZXJfZGF0YT12b2lkIDB9fSxuRz1mdW5jdGlvbihhKXtpZihYcyhhKSl7dmFyIGI9dmk7YiYmVHMoYSxcInRmdFwiLE51bWJlcihiKSl9fSxvRz1mdW5jdGlvbihhKXtYcyhhKSYmKGEubWV0YWRhdGEuc3BlY3VsYXRpdmUmJlxuVHMoYSxcInNwXCIsMSksYS5tZXRhZGF0YS5pc19zeW4mJlRzKGEsXCJzeW5cIiwxKSxhLm1ldGFkYXRhLmVtX2V2ZW50JiYoVHMoYSxcImVtX2V2ZW50XCIsMSksVHMoYSxcInNwXCIsMSkpKX0scEc9ZnVuY3Rpb24oYSl7WHMoYSkmJihhLm1ldGFkYXRhLnNwZWN1bGF0aXZlPSExKX0scUc9ZnVuY3Rpb24oYSl7USgxMDkpJiZYcyhhKSYmVShhLm0sVC5nLkFhKSE9PSExJiZMdChcImpvaW4tYWQtaW50ZXJlc3QtZ3JvdXBcIikmJm9iKG9jLmpvaW5BZEludGVyZXN0R3JvdXApJiZUcyhhLFwiZmxnXCIsMSl9LHJHPWZ1bmN0aW9uKGEpe2lmKFhzKGEpJiZhLmV2ZW50TmFtZT09PVQuZy5NYyYmYS5tZXRhZGF0YS5pc19jb25zZW50X3VwZGF0ZSl7dmFyIGI9YS5vW1QuZy5nZ107YiYmKFRzKGEsXCJnY3V0XCIsYiksVHMoYSxcInN5blwiLDEpKX19LHNHPWZ1bmN0aW9uKGEsYil7aWYoWHMoYikpe3ZhciBjPWIubWV0YWRhdGEuaXNfY29udmVyc2lvbjsoYi5ldmVudE5hbWU9PT1cInBhZ2Vfdmlld1wifHxjKSYmZkcoYSxcbmIpfX0sdEc9ZnVuY3Rpb24oYSl7USgxMDgpJiZYcyhhKSYmVShhLm0sVC5nLkZkLCEwKT09PSExJiYoYS5vW1QuZy5GZF09MCl9O1xudmFyIHVHPWZ1bmN0aW9uKGEsYil7dmFyIGM7YTp7dmFyIGQ9akYoYSk7aWYoZCl7aWYoaEYoZCxhKSl7Yz1kO2JyZWFrIGF9TSgyNSk7YS5pc0Fib3J0ZWQ9ITB9Yz12b2lkIDB9dmFyIGU9YztyZXR1cm57Y2xpZW50SWQ6JEUoYSxiKSxSYTplfX0sdkc9ZnVuY3Rpb24oYSxiLGMsZCxlKXt2YXIgZj1VKGEubSxULmcubmIpO2lmKFUoYS5tLFQuZy5JYikmJlUoYS5tLFQuZy5WYikpZj9ZRShhLGYsMSk6KE0oMTI3KSxhLmlzQWJvcnRlZD0hMCk7ZWxzZXt2YXIgZz1mPzE6ODthLm1ldGFkYXRhLmlzX25ld190b19zaXRlPSExO2Z8fChmPWJGKGEpLGc9Myk7Znx8KGY9YixnPTUpO2lmKCFmKXt2YXIgaz1XKFQuZy5VKSxtPVZFKCk7Zj0hbS5mcm9tX2Nvb2tpZXx8az9tLnZpZDp2b2lkIDA7Zz02fWY/Zj1cIlwiK2Y6KGY9Qm8oKSxnPTcsYS5tZXRhZGF0YS5pc19maXJzdF92aXNpdD1hLm1ldGFkYXRhLmlzX25ld190b19zaXRlPSEwKTtZRShhLGYsZyl9dmFyIG49TWF0aC5mbG9vcihhLm1ldGFkYXRhLmV2ZW50X3N0YXJ0X3RpbWVzdGFtcF9tcy9cbjFFMykscD12b2lkIDA7YS5tZXRhZGF0YS5pc19uZXdfdG9fc2l0ZXx8KHA9aUYoYSl8fGMpO3ZhciBxPXdiKFUoYS5tLFQuZy5qZCwzMCkpO3E9TWF0aC5taW4oNDc1LHEpO3E9TWF0aC5tYXgoNSxxKTt2YXIgcj13YihVKGEubSxULmcucmYsMUU0KSksdD1jRihwKTthLm1ldGFkYXRhLmlzX2ZpcnN0X3Zpc2l0PSExO2EubWV0YWRhdGEuaXNfc2Vzc2lvbl9zdGFydD0hMTthLm1ldGFkYXRhLmpvaW5fdGltZXJfc2VjPTA7dCYmdC53aCYmKGEubWV0YWRhdGEuam9pbl90aW1lcl9zZWM9TWF0aC5tYXgoMCx0LndoLU1hdGgubWF4KDAsbi10Lk9lKSkpO3ZhciB1PSExO3R8fCh1PWEubWV0YWRhdGEuaXNfZmlyc3RfdmlzaXQ9ITAsdD17c2Vzc2lvbklkOlN0cmluZyhuKSxLYzoxLHlkOiExLE9lOm4sR2M6ITEscGQ6dm9pZCAwfSk7bj50Lk9lK3EqNjAmJih1PSEwLHQuc2Vzc2lvbklkPVN0cmluZyhuKSx0LktjKyssdC55ZD0hMSx0LnBkPXZvaWQgMCk7aWYodSlhLm1ldGFkYXRhLmlzX3Nlc3Npb25fc3RhcnQ9XG4hMCxkLlFsKGEpO2Vsc2UgaWYoZC5JbCgpPnJ8fGEuZXZlbnROYW1lPT09VC5nLlNiKXQueWQ9ITA7YS5tZXRhZGF0YS5ldWlkX21vZGVfZW5hYmxlZD9VKGEubSxULmcuemEpP3QuR2M9ITA6KHQuR2MmJiFRKDEyKSYmKHQucGQ9dm9pZCAwKSx0LkdjPSExKTp0LkdjPSExO3ZhciB2PXQucGQ7aWYoYS5tZXRhZGF0YS5ldWlkX21vZGVfZW5hYmxlZHx8WHMoYSkpe3ZhciB3PVUoYS5tLFQuZy5QZCkseD13PzE6ODt3fHwodz12LHg9NCk7d3x8KHc9QW8oKSx4PTcpO3ZhciB5PXcudG9TdHJpbmcoKSxBPXgsQj1hLm1ldGFkYXRhLmVuaGFuY2VkX2NsaWVudF9pZF9zb3VyY2U7aWYoQj09PXZvaWQgMHx8QTw9QilhLm9bVC5nLlBkXT15LGEubWV0YWRhdGEuZW5oYW5jZWRfY2xpZW50X2lkX3NvdXJjZT1BfWU/KGEuY29weVRvSGl0RGF0YShULmcudWIsdC5zZXNzaW9uSWQpLGEuY29weVRvSGl0RGF0YShULmcuYmUsdC5LYyksYS5jb3B5VG9IaXREYXRhKFQuZy5hZSx0LnlkPzE6MCkpOihhLm9bVC5nLnViXT1cbnQuc2Vzc2lvbklkLGEub1tULmcuYmVdPXQuS2MsYS5vW1QuZy5hZV09dC55ZD8xOjApO2EubWV0YWRhdGFbVC5nLmtmXT10LkdjPzE6MH07dmFyIHdHPXdpbmRvdyx4Rz1kb2N1bWVudCx5Rz1mdW5jdGlvbihhKXt2YXIgYj13Ry5fZ2FVc2VyUHJlZnM7aWYoYiYmYi5pb28mJmIuaW9vKCl8fHhHLmRvY3VtZW50RWxlbWVudC5oYXNBdHRyaWJ1dGUoXCJkYXRhLWdvb2dsZS1hbmFseXRpY3Mtb3B0LW91dFwiKXx8YSYmd0dbXCJnYS1kaXNhYmxlLVwiK2FdPT09ITApcmV0dXJuITA7dHJ5e3ZhciBjPXdHLmV4dGVybmFsO2lmKGMmJmMuX2dhVXNlclByZWZzJiZjLl9nYVVzZXJQcmVmcz09XCJvb1wiKXJldHVybiEwfWNhdGNoKHApe31mb3IodmFyIGQ9W10sZT1TdHJpbmcoeEcuY29va2llKS5zcGxpdChcIjtcIiksZj0wO2Y8ZS5sZW5ndGg7ZisrKXt2YXIgZz1lW2ZdLnNwbGl0KFwiPVwiKSxrPWdbMF0ucmVwbGFjZSgvXlxccyp8XFxzKiQvZyxcIlwiKTtpZihrJiZrPT1cIkFNUF9UT0tFTlwiKXt2YXIgbT1nLnNsaWNlKDEpLmpvaW4oXCI9XCIpLnJlcGxhY2UoL15cXHMqfFxccyokL2csXCJcIik7bSYmKG09ZGVjb2RlVVJJQ29tcG9uZW50KG0pKTtkLnB1c2gobSl9fWZvcih2YXIgbj1cbjA7bjxkLmxlbmd0aDtuKyspaWYoZFtuXT09XCIkT1BUX09VVFwiKXJldHVybiEwO3JldHVybiB4Ry5nZXRFbGVtZW50QnlJZChcIl9fZ2FPcHRPdXRFeHRlbnNpb25cIik/ITA6ITF9O1xudmFyIEFHPWZ1bmN0aW9uKGEpe3JldHVybiFhfHx6Ry50ZXN0KGEpfHxWaC5oYXNPd25Qcm9wZXJ0eShhKX0sQkc9ZnVuY3Rpb24oYSl7dmFyIGI9VC5nLktiLGM7Y3x8KGM9ZnVuY3Rpb24oKXt9KTthLm9bYl0hPT12b2lkIDAmJihhLm9bYl09YyhhLm9bYl0pKX0sQ0c9ZnVuY3Rpb24oYSl7dmFyIGI9YS5pbmRleE9mKFwiP1wiKSxjPWI9PT0tMT9hOmEuc3Vic3RyaW5nKDAsYik7dHJ5e2M9ZGVjb2RlVVJJQ29tcG9uZW50KGMpfWNhdGNoKGQpe31yZXR1cm4gYj09PS0xP2M6XCJcIitjK2Euc3Vic3RyaW5nKGIpfSxERz1mdW5jdGlvbihhKXtVKGEubSxULmcuV2EpJiYoVyhULmcuVSl8fFUoYS5tLFQuZy5uYil8fChhLm9bVC5nLmVqXT0hMCkpO3ZhciBiO3ZhciBjO2M9Yz09PXZvaWQgMD8zOmM7dmFyIGQ9RC5sb2NhdGlvbi5ocmVmO2lmKGQpe3ZhciBlPWFqKGQpLnNlYXJjaC5yZXBsYWNlKFwiP1wiLFwiXCIpLGY9VWkoZSxcIl9nbFwiLCExLCEwKXx8XCJcIjtiPWY/Vm8oZixjKSE9PXZvaWQgMDohMX1lbHNlIGI9XG4hMTtiJiZYcyhhKSYmVHMoYSxcImdsdlwiLDEpO2lmKGEuZXZlbnROYW1lIT09VC5nLmJhKXJldHVybnt9O1UoYS5tLFQuZy5XYSkmJm5xKFtcImF3XCIsXCJkY1wiXSk7cHEoW1wiYXdcIixcImRjXCJdKTt2YXIgZz1vRihhKSxrPXFGKGEpO3JldHVybiBPYmplY3Qua2V5cyhnKS5sZW5ndGg/ZzprfSxFRz1mdW5jdGlvbihhKXt2YXIgYj1MYihFbChhLm0sVC5nLmthLDEpLFwiLlwiKTtiJiYoYS5vW1QuZy5zYl09Yik7dmFyIGM9TGIoRWwoYS5tLFQuZy5rYSwyKSxcIi5cIik7YyYmKGEub1tULmcucGJdPWMpfSxJdD17emw6XCJcIixkbjpOdW1iZXIoXCJcIil9LEZHPXt9LEdHPShGR1tULmcuTmNdPTEsRkdbVC5nLk9jXT0xLEZHW1QuZy5QY109MSxGR1tULmcuUWNdPTEsRkdbVC5nLlNjXT0xLEZHW1QuZy5UY109MSxGRyksekc9L14oX3xnYV98Z29vZ2xlX3xndGFnXFwufGZpcmViYXNlXykuKiQvLEhHPVtrcixcbkVHLFByXSxJRz1mdW5jdGlvbihhKXt0aGlzLkg9YTt0aGlzLmo9dGhpcy5SYT10aGlzLmNsaWVudElkPXZvaWQgMDt0aGlzLlBhPXRoaXMuUj0hMTt0aGlzLkJjPTA7dGhpcy5NPSExO3RoaXMuWj1uZXcgWkY7dGhpcy5EPW5ldyBSRX07YmE9SUcucHJvdG90eXBlO2JhLkVtPWZ1bmN0aW9uKGEsYixjKXt2YXIgZD10aGlzLGU9amwodGhpcy5IKTtpZihlKWlmKGMuZXZlbnRNZXRhZGF0YS5pc19leHRlcm5hbF9ldmVudCYmYS5jaGFyQXQoMCk9PT1cIl9cIiljLm9uRmFpbHVyZSgpO2Vsc2V7YSE9PVQuZy5iYSYmYSE9PVQuZy5UYSYmQUcoYSkmJk0oNTgpO0pHKGMuaik7dmFyIGY9bmV3ICRBKGUsYSxjKTtmLm1ldGFkYXRhLmV2ZW50X3N0YXJ0X3RpbWVzdGFtcF9tcz1iO3ZhciBnPVtULmcuVV07aWYoVXMoZixULmcueWMsVShmLm0sVC5nLnljKSl8fFhzKGYpKWcucHVzaChULmcuUCksZy5wdXNoKFQuZy5PKTtKdChmdW5jdGlvbigpe2NsKGZ1bmN0aW9uKCl7ZC5GbShmKX0sZyl9KTt0aGlzLkNtKGEsXG5jLGYpfWVsc2UgYy5vbkZhaWx1cmUoKX07YmEuQ209ZnVuY3Rpb24oYSxiLGMpe3ZhciBkPWpsKHRoaXMuSCk7aWYoUSg2NikmJmE9PT1ULmcuYmEmJlVzKGMsXCJnYTRfYWRzX2xpbmtlZFwiLCExKSl7dmFyIGU9ZnVuY3Rpb24oKXtmb3IodmFyIGs9bmEoSEcpLG09ay5uZXh0KCk7IW0uZG9uZTttPWsubmV4dCgpKXt2YXIgbj1tLnZhbHVlO24oZik7aWYoZi5pc0Fib3J0ZWQpYnJlYWt9Zi5tZXRhZGF0YS5zcGVjdWxhdGl2ZXx8Zi5pc0Fib3J0ZWR8fEd1KGYpfSxmPW5ldyAkQShkLGEsYik7Zi5tZXRhZGF0YS5oaXRfdHlwZT1cInBhZ2Vfdmlld1wiO2YubWV0YWRhdGEuc3BlY3VsYXRpdmU9ITA7Zi5tZXRhZGF0YS5pc19zZXJ2ZXJfc2lkZV9kZXN0aW5hdGlvbj1YcyhjKTt2YXIgZz1bVC5nLlAsVC5nLk9dO2NsKGZ1bmN0aW9uKCl7ZSgpO1coZyl8fGJsKGZ1bmN0aW9uKGspe3ZhciBtLG47bT1rLmNvbnNlbnRFdmVudElkO249ay5jb25zZW50UHJpb3JpdHlJZDtmLm1ldGFkYXRhLmNvbnNlbnRfdXBkYXRlZD1cbiEwO2YubWV0YWRhdGEuY29uc2VudF9ldmVudF9pZD1tO2YubWV0YWRhdGEuY29uc2VudF9wcmlvcml0eV9pZD1uO2UoKX0sZyl9LGcpfX07YmEuRm09ZnVuY3Rpb24oYSl7dmFyIGI9dGhpczt0aGlzLmo9YTt0cnl7S0coYSk7TEcoYSk7TUcoYSk7TkcoYSk7USg5NykmJihhLmlzQWJvcnRlZD0hMCk7cHIoYSk7dmFyIGM9e307dUYoYSxjKTtpZihhLmlzQWJvcnRlZCl7YS5tLm9uRmFpbHVyZSgpO1VFKCk7cmV0dXJufXZhciBkPWMubWw7Yy5zbD09PTAmJlNFKDI1KTtkPT09MCYmU0UoMjYpO09HKGEpO1BHKGEpO3RoaXMuT2soYSk7dGhpcy5ELlptKGEpO1FHKGEpO1JHKGEpO1NHKGEpO3RoaXMuV2ooREcoYSkpO3ZhciBlPWEuZXZlbnROYW1lPT09VC5nLmJhO2UmJih0aGlzLk09ITApO1RHKGEpO2UmJiFhLmlzQWJvcnRlZCYmdGhpcy5CYysrPjAmJlNFKDE3KTtVRyhhKTt2RyhhLHRoaXMuY2xpZW50SWQsdGhpcy5SYSx0aGlzLkQsIXRoaXMuUGEpO1ZHKGEpO1dHKGEpO1hHKGEpO1xuWUcoYSk7WkcoYSk7JEcoYSk7YUgoYSk7ckYoYSk7dkYoYSk7Z0coYSk7aEcoYSk7aUcoYSk7akcoYSk7a0coYSk7bEcoYSk7bkcoYSk7b0coYSk7cUcoYSk7ckcoYSk7dEcoYSk7c0YoYSk7YkgoYSk7Y0goYSk7ZEgoYSk7cnIoYSk7cXIoYSk7ZUgoYSk7ZkgoYSk7UHIoYSk7bUcoYSk7cEcoYSk7Z0goYSk7IXRoaXMuTSYmYS5tZXRhZGF0YS5lbV9ldmVudCYmU0UoMTgpO1RFKGEpO2lmKGEubWV0YWRhdGEuc3BlY3VsYXRpdmV8fGEuaXNBYm9ydGVkKXthLm0ub25GYWlsdXJlKCk7VUUoKTtyZXR1cm59dGhpcy5Xaih1RyhhLHRoaXMuY2xpZW50SWQpKTt0aGlzLlBhPSEwO3RoaXMuVW0oYSk7aEgoYSk7c0coZnVuY3Rpb24oZil7Yi55aihmKX0sYSk7dGhpcy5ELktoKCk7aUgoYSk7aWYoYS5pc0Fib3J0ZWQpe2EubS5vbkZhaWx1cmUoKTtVRSgpO3JldHVybn10aGlzLnlqKGEpO2EubS5vblN1Y2Nlc3MoKX1jYXRjaChmKXthLm0ub25GYWlsdXJlKCl9VUUoKX07YmEueWo9ZnVuY3Rpb24oYSl7dGhpcy5aLmFkZChhKX07XG5iYS5Xaj1mdW5jdGlvbihhKXt2YXIgYj1hLmNsaWVudElkLGM9YS5SYTtiJiZjJiYodGhpcy5jbGllbnRJZD1iLHRoaXMuUmE9Yyl9O2JhLmZsdXNoPWZ1bmN0aW9uKCl7dGhpcy5aLmZsdXNoKCl9O2JhLlVtPWZ1bmN0aW9uKGEpe3ZhciBiPXRoaXM7aWYoIXRoaXMuUil7dmFyIGM9VyhULmcuTyksZD1XKFQuZy5VKTthbChbVC5nLk8sVC5nLlVdLGZ1bmN0aW9uKCl7dmFyIGU9VyhULmcuTyksZj1XKFQuZy5VKSxnPSExLGs9e30sbT17fTtpZihkIT09ZiYmYi5qJiZiLlJhJiZiLmNsaWVudElkKXt2YXIgbj1iLmNsaWVudElkLHA7dmFyIHE9Y0YoYi5SYSk7cD1xP3EucGQ6dm9pZCAwO2lmKGYpe3ZhciByPWJGKGIuaik7aWYocil7Yi5jbGllbnRJZD1yO3ZhciB0PWlGKGIuaik7dCYmKGIuUmE9ZUYodCxiLlJhLGIuaikpfWVsc2UgWkUoYi5jbGllbnRJZCxiLmopLFhFKGIuY2xpZW50SWQsITApO2hGKGIuUmEsYi5qKTtnPSEwO2tbVC5nLnVnXT1uO1EoNTcpJiZwJiYoa1tULmcuR2tdPVxucCl9ZWxzZSBiLlJhPXZvaWQgMCxiLmNsaWVudElkPXZvaWQgMCxELmdhR2xvYmFsPXt9fWUmJiFjJiYoZz0hMCxtLmlzX2NvbnNlbnRfdXBkYXRlPSEwLGtbVC5nLmdnXT1jaVtULmcuT10pO2lmKGcpe3ZhciB1PUF4KGIuSCxULmcuTWMsayk7SHgodSxhLm0uZXZlbnRJZCx7ZXZlbnRNZXRhZGF0YTptfSl9ZD1mO2M9ZX0pO3RoaXMuUj0hMH19O2JhLk9rPWZ1bmN0aW9uKGEpe2EuZXZlbnROYW1lIT09VC5nLlRhJiZ0aGlzLkQuTmsoYSl9O3ZhciBNRz1mdW5jdGlvbihhKXt2YXIgYj1FLmxvY2F0aW9uLnByb3RvY29sO2IhPT1cImh0dHA6XCImJmIhPT1cImh0dHBzOlwiJiYoTSgyOSksYS5pc0Fib3J0ZWQ9ITApfSxORz1mdW5jdGlvbihhKXtvYyYmb2MubG9hZFB1cnBvc2U9PT1cInByZXZpZXdcIiYmKE0oMzApLGEuaXNBYm9ydGVkPSEwKX0sT0c9ZnVuY3Rpb24oYSl7dmFyIGI9e3ByZWZpeDpTdHJpbmcoVShhLm0sVC5nLk5hLFwiXCIpKSxwYXRoOlN0cmluZyhVKGEubSxULmcuRmIsXCIvXCIpKSxcbmZsYWdzOlN0cmluZyhVKGEubSxULmcuWWEsXCJcIikpLGRvbWFpbjpTdHJpbmcoVShhLm0sVC5nLlZhLFwiYXV0b1wiKSksemI6TnVtYmVyKFUoYS5tLFQuZy5NYSw2MzA3MkUzKSl9O2EubWV0YWRhdGEuY29va2llX29wdGlvbnM9Yn0sUUc9ZnVuY3Rpb24oYSl7aWYoYS5tZXRhZGF0YS5pc19tZXJjaGFudF9jZW50ZXIpYS5tZXRhZGF0YS5ldWlkX21vZGVfZW5hYmxlZD0hMTtlbHNlIGlmKFVzKGEsXCJjY2RfYWRkXzFwX2RhdGFcIiwhMSl8fFVzKGEsXCJjY2RfYWRkX2VjX3N0aXRjaGluZ1wiLCExKSlhLm1ldGFkYXRhLmV1aWRfbW9kZV9lbmFibGVkPSEwfSxSRz1mdW5jdGlvbihhKXtpZihhLm1ldGFkYXRhLmV1aWRfbW9kZV9lbmFibGVkJiZVcyhhLFwiY2NkX2FkZF8xcF9kYXRhXCIsITEpKXt2YXIgYj1hLm0uRFtULmcuZGVdO2lmKFJpKGIpKXt2YXIgYz1VKGEubSxULmcuQ2EpO2M9PT1udWxsP2EubWV0YWRhdGEudXNlcl9kYXRhX2Zyb21fY29kZT1udWxsOihiLmVuYWJsZV9jb2RlJiZTYShjKSYmXG4oYS5tZXRhZGF0YS51c2VyX2RhdGFfZnJvbV9jb2RlPWMpLFNhKGIuc2VsZWN0b3JzKSYmIWEubWV0YWRhdGEudXNlcl9kYXRhX2Zyb21fbWFudWFsJiYoYS5tZXRhZGF0YS51c2VyX2RhdGFfZnJvbV9tYW51YWw9UWkoYi5zZWxlY3RvcnMpKSl9fX0sU0c9ZnVuY3Rpb24oYSl7aWYoUSg2NykmJiFRKDY2KSYmVXMoYSxcImdhNF9hZHNfbGlua2VkXCIsITEpJiZhLmV2ZW50TmFtZT09PVQuZy5iYSl7dmFyIGI9VShhLm0sVC5nLm9hKSE9PSExO2lmKGIpe3ZhciBjPWhyKGEpO2MuemImJihjLnpiPU1hdGgubWluKGMuemIsNzc3NkUzKSk7aXIoe29kOmIsd2Q6VShhLm0sVC5nLnFhKXx8e30sQmQ6VShhLm0sVC5nLldhKSxiYzpjfSl9fX0sYkg9ZnVuY3Rpb24oYSl7aWYoIUV0KEQpKU0oODcpO2Vsc2UgaWYoR3QhPT12b2lkIDApe00oODUpO3ZhciBiPUN0KCk7Yj9VKGEubSxULmcuWmQpJiYhWHMoYSl8fEt0KGIsYSk6TSg4Nil9fSxURz1mdW5jdGlvbihhKXthLmV2ZW50TmFtZT09PVQuZy5iYSYmXG4oVShhLm0sVC5nLklhLCEwKT8oYS5tLmpbVC5nLmthXSYmKGEubS5IW1QuZy5rYV09YS5tLmpbVC5nLmthXSxhLm0ualtULmcua2FdPXZvaWQgMCxhLm9bVC5nLmthXT12b2lkIDApLGEuZXZlbnROYW1lPVQuZy5TYik6YS5pc0Fib3J0ZWQ9ITApfSxQRz1mdW5jdGlvbihhKXtmdW5jdGlvbiBiKGMsZCl7VGhbY118fGQ9PT12b2lkIDB8fChhLm9bY109ZCl9eihhLm0uSCxiKTt6KGEubS5qLGIpfSxWRz1mdW5jdGlvbihhKXt2YXIgYj1GbChhLm0pLGM9ZnVuY3Rpb24oZCxlKXtHR1tkXSYmKGEub1tkXT1lKX07U2EoYltULmcuUmNdKT96KGJbVC5nLlJjXSxmdW5jdGlvbihkLGUpe2MoKFQuZy5SYytcIl9cIitkKS50b0xvd2VyQ2FzZSgpLGUpfSk6eihiLGMpfSxVRz1FRyxoSD1mdW5jdGlvbihhKXtpZihRKDkxKSYmVyhULmcuVSkpe1hzKGEpJiYoYS5tZXRhZGF0YS5pc19zZ3RtX3NlcnZpY2Vfd29ya2VyPSEwLFhzKGEpJiZUcyhhLFwic3dfZXhwXCIsMSkpO2E6e319fSxlSD1mdW5jdGlvbihhKXtpZihhLmV2ZW50TmFtZT09PVQuZy5UYSl7dmFyIGI9VShhLm0sVC5nLnJiKTtVKGEubSxULmcuR2IpKGEub1tiXXx8VShhLm0sYikpO2EuaXNBYm9ydGVkPSEwfX0sV0c9ZnVuY3Rpb24oYSl7aWYoIVUoYS5tLFQuZy5WYil8fCFVKGEubSxULmcuSWIpKXt2YXIgYj1hLmNvcHlUb0hpdERhdGEsYz1ULmcucmEsZD1cIlwiLGU9RS5sb2NhdGlvbjtpZihlKXt2YXIgZj1lLnBhdGhuYW1lfHxcIlwiO2YuY2hhckF0KDApIT09XCIvXCImJihmPVwiL1wiK2YpO3ZhciBnPWUuc2VhcmNofHxcIlwiO2lmKGcmJmdbMF09PT1cIj9cIilmb3IodmFyIGs9XG5nLnN1YnN0cmluZygxKS5zcGxpdChcIiZcIiksbT0wO208ay5sZW5ndGg7KyttKXt2YXIgbj1rW21dLnNwbGl0KFwiPVwiKTtuJiZuLmxlbmd0aD09PTImJm5bMF09PT1cIndicmFpZFwiJiYoZz1nLnJlcGxhY2UoLyhbPyZdKXdicmFpZD1bXiZdKy8sXCIkMXdicmFpZD1cIitOYihuWzFdKSkpfWQ9ZS5wcm90b2NvbCtcIi8vXCIrZS5ob3N0bmFtZStmK2d9Yi5jYWxsKGEsYyxkLENHKTt2YXIgcD1hLmNvcHlUb0hpdERhdGEscT1ULmcuQmEscjthOnt2YXIgdD1qbyhcIl9vcHRfZXhwaWRcIix2b2lkIDAsdm9pZCAwLFQuZy5VKVswXTtpZih0KXt2YXIgdT1kZWNvZGVVUklDb21wb25lbnQodCkuc3BsaXQoXCIkXCIpO2lmKHUubGVuZ3RoPT09Myl7cj11WzJdO2JyZWFrIGF9fWlmKGlpLmdhNF9yZWZlcnJlcl9vdmVycmlkZSE9PXZvaWQgMClyPWlpLmdhNF9yZWZlcnJlcl9vdmVycmlkZTtlbHNle3ZhciB2PUppKFwiZ3RtLmd0YWdSZWZlcnJlci5cIithLnRhcmdldC5kZXN0aW5hdGlvbklkKSx3PUUucmVmZXJyZXI7XG5yPXY/XCJcIit2Ond9fXAuY2FsbChhLHEscnx8dm9pZCAwLENHKTthLmNvcHlUb0hpdERhdGEoVC5nLlphLEUudGl0bGUpO2EuY29weVRvSGl0RGF0YShULmcuT2EsKG9jLmxhbmd1YWdlfHxcIlwiKS50b0xvd2VyQ2FzZSgpKTt2YXIgeD1ZcigpO2EuY29weVRvSGl0RGF0YShULmcuS2IseC53aWR0aCtcInhcIit4LmhlaWdodCk7USgxMDUpJiZhLmNvcHlUb0hpdERhdGEoVC5nLmZkLHZvaWQgMCxDRyk7USg3MCkmJlFxKCkmJmEuY29weVRvSGl0RGF0YShULmcuZGQsXCIxXCIpfX0sWUc9ZnVuY3Rpb24oYSl7YS5tZXRhZGF0YS5jcmVhdGVfZGNfam9pbj0hMTthLm1ldGFkYXRhLmNyZWF0ZV9nb29nbGVfam9pbj0hMTtpZighKERpKCl8fFEoNikmJlhzKGEpfHxhLm1ldGFkYXRhLmlzX21lcmNoYW50X2NlbnRlcnx8VShhLm0sVC5nLmxiKT09PSExKSYmc0QoKSYmVyhULmcuUCkpe3ZhciBiPVlzKGEpOyhhLm1ldGFkYXRhLmlzX3Nlc3Npb25fc3RhcnR8fFUoYS5tLFQuZy51ZykpJiYoYS5tZXRhZGF0YS5jcmVhdGVfZGNfam9pbj1cbiEhYik7dmFyIGM9YS5tZXRhZGF0YS5qb2luX3RpbWVyX3NlYztiJiYoY3x8MCk9PT0wJiYoYS5tZXRhZGF0YS5qb2luX3RpbWVyX3NlYz02MCxhLm1ldGFkYXRhLmNyZWF0ZV9nb29nbGVfam9pbj0hMCl9fSxhSD1mdW5jdGlvbihhKXthLmNvcHlUb0hpdERhdGEoVC5nLnZmKTtmb3IodmFyIGI9VShhLm0sVC5nLm5mKXx8W10sYz0wO2M8Yi5sZW5ndGg7YysrKXt2YXIgZD1iW2NdO2lmKGQucnVsZV9yZXN1bHQpe2EuY29weVRvSGl0RGF0YShULmcudmYsZC50cmFmZmljX3R5cGUpO1NFKDMpO2JyZWFrfX19LGlIPWZ1bmN0aW9uKGEpe2EuY29weVRvSGl0RGF0YShULmcudmcpO1UoYS5tLFQuZy5aZCkmJihhLm9bVC5nLlpkXT0hMCxYcyhhKXx8QkcoYSkpfSxmSD1mdW5jdGlvbihhKXthLmNvcHlUb0hpdERhdGEoVC5nLnphKTthLmNvcHlUb0hpdERhdGEoVC5nLmFiKX0sWEc9ZnVuY3Rpb24oYSl7VXMoYSxcImdvb2dsZV9uZ1wiKSYmIU9rKCk/YS5jb3B5VG9IaXREYXRhKFQuZy54YywxKTpcbnNyKGEpfSxkSD1mdW5jdGlvbihhKXtpZihVKGEubSxULmcuQWEpIT09ITEmJkVuKGEubSkpe3ZhciBiPVlzKGEpLGM9VShhLm0sVC5nLmxiKTtiJiZjIT09ITEmJnNEKCkmJlcoVC5nLlApJiZ3ayhULmcuTykmJnlrKFtcImFkc1wiXSkuYWRzJiZNdCgpJiYoYS5vW1QuZy5GZ109ITApfX0sZ0g9ZnVuY3Rpb24oYSl7dmFyIGI9VShhLm0sVC5nLkliKTtiJiZTRSgxMik7YS5tZXRhZGF0YS5lbV9ldmVudCYmU0UoMTQpO3ZhciBjPUtqKExqKCkpOyhifHxaaihjKXx8YyYmYy5wYXJlbnQmJmMuY29udGV4dCYmYy5jb250ZXh0LnNvdXJjZT09PTUpJiZTRSgxOSl9LEtHPWZ1bmN0aW9uKGEpe2lmKHlHKGEudGFyZ2V0LmRlc3RpbmF0aW9uSWQpKU0oMjgpLGEuaXNBYm9ydGVkPSEwO2Vsc2UgaWYoUSgxMDQpKXt2YXIgYj1KaigpO2lmKGImJkFycmF5LmlzQXJyYXkoYi5kZXN0aW5hdGlvbnMpKWZvcih2YXIgYz0wO2M8Yi5kZXN0aW5hdGlvbnMubGVuZ3RoO2MrKylpZih5RyhiLmRlc3RpbmF0aW9uc1tjXSkpe00oMTI1KTtcbmEuaXNBYm9ydGVkPSEwO2JyZWFrfX19LGNIPWZ1bmN0aW9uKGEpe0x0KFwiYXR0cmlidXRpb24tcmVwb3J0aW5nXCIpJiYoYS5vW1QuZy5VYl09XCIxXCIpfSxMRz1mdW5jdGlvbihhKXtpZihJdC56bC5yZXBsYWNlKC9cXHMrL2csXCJcIikuc3BsaXQoXCIsXCIpLmluZGV4T2YoYS5ldmVudE5hbWUpPj0wKWEuaXNBYm9ydGVkPSEwO2Vsc2V7dmFyIGI9VnMoYSk7YiYmYi5ibGFja2xpc3RlZCYmKGEuaXNBYm9ydGVkPSEwKX19LFpHPWZ1bmN0aW9uKGEpe3ZhciBiPWZ1bmN0aW9uKGMpe3JldHVybiEhYyYmYy5jb252ZXJzaW9ufTthLm1ldGFkYXRhLmlzX2NvbnZlcnNpb249YihWcyhhKSk7YS5tZXRhZGF0YS5pc19maXJzdF92aXNpdCYmKGEubWV0YWRhdGEuaXNfZmlyc3RfdmlzaXRfY29udmVyc2lvbj1iKFZzKGEsXCJmaXJzdF92aXNpdFwiKSkpO2EubWV0YWRhdGEuaXNfc2Vzc2lvbl9zdGFydCYmKGEubWV0YWRhdGEuaXNfc2Vzc2lvbl9zdGFydF9jb252ZXJzaW9uPWIoVnMoYSxcInNlc3Npb25fc3RhcnRcIikpKX0sXG4kRz1mdW5jdGlvbihhKXtYaC5oYXNPd25Qcm9wZXJ0eShhLmV2ZW50TmFtZSkmJihhLm1ldGFkYXRhLmlzX2Vjb21tZXJjZT0hMCxhLmNvcHlUb0hpdERhdGEoVC5nLmRhKSxhLmNvcHlUb0hpdERhdGEoVC5nLnhhKSl9O2Z1bmN0aW9uIEpHKGEpe3ooYSxmdW5jdGlvbihjKXtjLmNoYXJBdCgwKT09PVwiX1wiJiZkZWxldGUgYVtjXX0pO3ZhciBiPWFbVC5nLmFiXXx8e307eihiLGZ1bmN0aW9uKGMpe2MuY2hhckF0KDApPT09XCJfXCImJmRlbGV0ZSBiW2NdfSl9dmFyIGtIPWZ1bmN0aW9uKGEpe2lmKCFqSChhKSl7dmFyIGI9ITEsYz1mdW5jdGlvbigpeyFiJiZqSChhKSYmKGI9ITAsRGMoRSxcInZpc2liaWxpdHljaGFuZ2VcIixjKSxRKDQpJiZEYyhFLFwicHJlcmVuZGVyaW5nY2hhbmdlXCIsYyksTSg1NSkpfTtDYyhFLFwidmlzaWJpbGl0eWNoYW5nZVwiLGMpO1EoNCkmJkNjKEUsXCJwcmVyZW5kZXJpbmdjaGFuZ2VcIixjKTtNKDU0KX19LGpIPWZ1bmN0aW9uKGEpe2lmKFEoNCkmJlwicHJlcmVuZGVyaW5nXCJpbiBFP0UucHJlcmVuZGVyaW5nOkUudmlzaWJpbGl0eVN0YXRlPT09XCJwcmVyZW5kZXJcIilyZXR1cm4hMTthKCk7cmV0dXJuITB9O3ZhciBtSD1mdW5jdGlvbihhLGIpe2tIKGZ1bmN0aW9uKCl7dmFyIGM9amwoYSk7aWYoYyl7dmFyIGQ9bEgoYyxiKTtrbShhLGQpfX0pO307ZnVuY3Rpb24gbEgoYSxiKXt2YXIgYz1mdW5jdGlvbigpe307dmFyIGQ9bmV3IElHKGEuaWQpLGU9YS5wcmVmaXg9PT1cIk1DXCI7Yz1mdW5jdGlvbihmLGcsayxtKXtlJiYobS5ldmVudE1ldGFkYXRhLmlzX21lcmNoYW50X2NlbnRlcj0hMCk7ZC5FbShnLGssbSl9O0FqfHxuSChhLGQsYik7cmV0dXJuIGN9XG5mdW5jdGlvbiBuSChhLGIsYyl7dmFyIGQ9Yi5ELGU9e30sZj17ZXZlbnRJZDpjLGV2ZW50TWV0YWRhdGE6KGUuYmF0Y2hfb25fbmF2aWdhdGlvbj0hMCxlKX07USg0OCkmJihmLmRlZmVycmFibGU9ITApO2QuSG0oZnVuY3Rpb24oKXtPRT0hMDtsbS5mbHVzaCgpO2QuS2YoKT49MUUzJiZvYy5zZW5kQmVhY29uJiZtbShULmcuTWMse30sYS5pZCxmKTtiLmZsdXNoKCk7ZC5YaihmdW5jdGlvbigpe09FPSExO2QuWGooKX0pfSk7fTt2YXIgb0g9bEg7ZnVuY3Rpb24gcUgoYSxiLGMpe3ZhciBkPXRoaXM7fXFILko9XCJpbnRlcm5hbC5ndGFnQ29uZmlnXCI7ZnVuY3Rpb24gckgoKXt2YXIgYT17fTthPXtFdmVudE5hbWVzOntBUFBfUkVNT1ZFOlQuZy5laSxBUFBfU1RPUkVfUkVGVU5EOlQuZy5maSxBUFBfU1RPUkVfU1VCU0NSSVBUSU9OX0NBTkNFTDpULmcuZ2ksQVBQX1NUT1JFX1NVQlNDUklQVElPTl9DT05WRVJUOlQuZy5oaSxBUFBfU1RPUkVfU1VCU0NSSVBUSU9OX1JFTkVXOlQuZy5paSxFQ09NTUVSQ0VfQUREX1BBWU1FTlQ6VC5nLllmLEVDT01NRVJDRV9BRERfU0hJUFBJTkc6VC5nLlpmLEVDT01NRVJDRV9DQVJUX0FERDpULmcuamMsRUNPTU1FUkNFX0NBUlRfUkVNT1ZFOlQuZy5rYyxFQ09NTUVSQ0VfQ0FSVF9WSUVXOlQuZy5jZyxFQ09NTUVSQ0VfQ0hFQ0tPVVQ6VC5nLlJiLEVDT01NRVJDRV9JVEVNX0xJU1RfQ0xJQ0s6VC5nLm1jLEVDT01NRVJDRV9JVEVNX0xJU1RfVklFVzpULmcuaWIsRUNPTU1FUkNFX1BST01PVElPTl9DTElDSzpULmcuRGIsXG5FQ09NTUVSQ0VfUFJPTU9USU9OX1ZJRVc6VC5nLmpiLEVDT01NRVJDRV9QVVJDSEFTRTpULmcuSGEsRUNPTU1FUkNFX1JFRlVORDpULmcubmMsRUNPTU1FUkNFX1ZJRVdfSVRFTTpULmcuTGEsRUNPTU1FUkNFX1dJU0hMSVNUX0FERDpULmcuZGcsRklSU1RfT1BFTjpULmcuamksRklSU1RfVklTSVQ6VC5nLmtpLEdUQUdfQ09ORklHOlQuZy5iYSxHVEFHX0dFVDpULmcuVGEsSU5fQVBQX1BVUkNIQVNFOlQuZy5saSxQQUdFX1ZJRVc6VC5nLlNiLFNFU1NJT05fU1RBUlQ6VC5nLm1pLFVTRVJfRU5HQUdFTUVOVDpULmcuTWN9LEV2ZW50UGFyYW1ldGVyczp7QUNDRVBUX0lOQ09NSU5HOlQuZy56YyxBRFNfREFUQV9SRURBQ1RJT046VC5nLmZhLEFGRklMSUFUSU9OOlQuZy5qZyxBTExPV19BRF9QRVJTT05BTElaQVRJT05fU0lHTkFMUzpULmcuamEsQUxMT1dfQ1VTVE9NX1NDUklQVFM6VC5nLmJmLEFMTE9XX0RJU1BMQVlfRkVBVFVSRVM6VC5nLmNmLEFMTE9XX0VOSEFOQ0VEX0NPTlZFUlNJT05TOlQuZy5HZCxcbkFMTE9XX0dPT0dMRV9TSUdOQUxTOlQuZy5sYixBTExPV19JTlRFUkVTVF9HUk9VUFM6VC5nLkFhLEFVSUQ6VC5nLkViLEFVVE9fREVURUNUSU9OX0VOQUJMRUQ6VC5nLndpLEFXX0JBU0tFVF9JVEVNUzpULmcuZGEsQVdfQkFTS0VUX1RZUEU6VC5nLmZnLEFXX0ZFRURfQ09VTlRSWTpULmcuSWQsQVdfRkVFRF9MQU5HVUFHRTpULmcuSmQsQVdfTUVSQ0hBTlRfSUQ6VC5nLktkLEFXX1JFTUFSS0VUSU5HOlQuZy5UYixBV19SRU1BUktFVElOR19PTkxZOlQuZy5kZixDQU1QQUlHTjpULmcuUmMsQ0FNUEFJR05fQ09OVEVOVDpULmcuTmMsQ0FNUEFJR05fSUQ6VC5nLk9jLENBTVBBSUdOX01FRElVTTpULmcuUGMsQ0FNUEFJR05fTkFNRTpULmcuUWMsQ0FNUEFJR05fU09VUkNFOlQuZy5TYyxDQU1QQUlHTl9URVJNOlQuZy5UYyxDSEVDS09VVF9PUFRJT046VC5nLk5kLENIRUNLT1VUX1NURVA6VC5nLmZmLENMSUVOVF9JRDpULmcubmIsQ09OVEVOVF9HUk9VUDpULmcueWksQ09OVEVOVF9UWVBFOlQuZy56aSxcbkNPTlZFUlNJT05fQVBJOlQuZy5VYixDT05WRVJTSU9OX0NPT0tJRV9QUkVGSVg6VC5nLlhhLENPTlZFUlNJT05fSUQ6VC5nLlVjLENPTlZFUlNJT05fTEFCRUw6VC5nLm9iLENPTlZFUlNJT05fTElOS0VSOlQuZy5vYSxDT09LSUVfRE9NQUlOOlQuZy5WYSxDT09LSUVfRVhQSVJFUzpULmcuTWEsQ09PS0lFX0ZMQUdTOlQuZy5ZYSxDT09LSUVfTkFNRTpULmcub2MsQ09PS0lFX1BBVEg6VC5nLkZiLENPT0tJRV9QUkVGSVg6VC5nLk5hLENPT0tJRV9VUERBVEU6VC5nLnFjLENPVU5UUlk6VC5nLnJjLENPVVBPTjpULmcua2csQ1VSUkVOQ1k6VC5nLnhhLENVU1RPTUVSX0xJRkVUSU1FX1ZBTFVFOlQuZy5MZCxDVVNUT01fTUFQOlQuZy5WYyxEQ19DVVNUT01fUEFSQU1TOlQuZy5XYyxEQ19OQVRVUkFMX1NFQVJDSDpULmcuRGksREVCVUdfTU9ERTpULmcuQmksREVDT1JBVEVfRk9STVM6VC5nLnRiLERFTElWRVJZX1BPU1RBTF9DT0RFOlQuZy5rZCxERVZFTE9QRVJfSUQ6VC5nLmthLERJU0FCTEVfTUVSQ0hBTlRfUkVQT1JURURfUFVSQ0hBU0VTOlQuZy5DaSxcbkRJU0NPVU5UOlQuZy5IZCxEWU5BTUlDX0VWRU5UX1NFVFRJTkdTOlQuZy5pZyxFTkdBR0VNRU5UX1RJTUVfTVNFQzpULmcuT2QsRU5IQU5DRURfQ0xJRU5UX0lEOlQuZy5QZCxFTkhBTkNFRF9DT05WRVJTSU9OUzpULmcuUWQsRU5IQU5DRURfQ09OVkVSU0lPTlNfQVVUT01BVElDX1NFVFRJTkdTOlQuZy5sZyxFU1RJTUFURURfREVMSVZFUllfREFURTpULmcuUmQsRVVJRF9MT0dHRURfSU5fU1RBVEU6VC5nLmtmLEVWRU5UOlQuZy5zYyxFVkVOVF9DQUxMQkFDSzpULmcuWmMsRVZFTlRfREVWRUxPUEVSX0lEX1NUUklORzpULmcucGIsRVZFTlRfU0VUVElOR1M6VC5nLlNkLEVWRU5UX1RJTUVPVVQ6VC5nLlRkLEVYUEVSSU1FTlRTOlQuZy5GaSxGSVJFQkFTRV9JRDpULmcubGYsRklSU1RfUEFSVFlfQ09MTEVDVElPTjpULmcudWMsRklSU1RfUEFSVFlfRFVBTF9UQUdHSU5HX0lEOlQuZy5VZCxGSVJTVF9QQVJUWV9VUkw6VC5nLnFiLEZMRURHRTpULmcubWcsRkxJR0hUX0VSUk9SX0NPREU6VC5nLm5nLFxuRkxJR0hUX0VSUk9SX01FU1NBR0U6VC5nLm9nLEdBQ19HQ0xJRDpULmcuVmQsR0FDX1dCUkFJRDpULmcudmMsR0FDX1dCUkFJRF9NVUxUSVBMRV9DT05WRVJTSU9OUzpULmcucmcsR0FfUkVTVFJJQ1RfRE9NQUlOOlQuZy5zZyxHQV9URU1QX0NMSUVOVF9JRDpULmcudWcsR0NMSUQ6VC5nLlVhLEdEUFJfQVBQTElFUzpULmcud2MsR0VPX0dSQU5VTEFSSVRZOlQuZy52ZyxHTE9CQUxfREVWRUxPUEVSX0lEX1NUUklORzpULmcuc2IsR09PR0xFX05HOlQuZy54YyxHT09HTEVfU0lHTkFMUzpULmcueWMsR09PR0xFX1RMRDpULmcud2csR1JPVVBTOlQuZy5XZCxHU0FfRVhQRVJJTUVOVF9JRDpULmcueGcsSUZSQU1FX1NUQVRFOlQuZy5IYixJR05PUkVfUkVGRVJSRVI6VC5nLmJkLElOVEVSTkFMX1RSQUZGSUNfUkVTVUxUUzpULmcubmYsSVNfTEVHQUNZX0xPQURFRDpULmcuSWIsSVNfUEFTU1RIUk9VR0g6VC5nLlhkLElURU1fTElTVF9OQU1FOlQuZy5YYyxMQU5HVUFHRTpULmcuT2EsTEVHQUNZX0RFVkVMT1BFUl9JRF9TVFJJTkc6VC5nLllkLFxuTElOS0VSOlQuZy5xYSxMSU5LRVJfRE9NQUlOUzpULmcuVyxMSU5LRVJfVVJMX1BPU0lUSU9OOlQuZy5KYixMSVNUX05BTUU6VC5nLmhmLE1FVEhPRDpULmcueWcsTkVXX0NVU1RPTUVSOlQuZy5lZCxOT05fSU5URVJBQ1RJT046VC5nLnpnLE9QVElNSVpFX0lEOlQuZy5PaSxQQUdFX0hPU1ROQU1FOlQuZy5QaSxQQUdFX0xPQ0FUSU9OOlQuZy5yYSxQQUdFX1BBVEg6VC5nLmZkLFBBR0VfUkVGRVJSRVI6VC5nLkJhLFBBR0VfVElUTEU6VC5nLlphLFBBU1NFTkdFUlM6VC5nLkFnLFBIT05FX0NPTlZFUlNJT05fQ0FMTEJBQ0s6VC5nLkJnLFBIT05FX0NPTlZFUlNJT05fQ09VTlRSWV9DT0RFOlQuZy5RaSxQSE9ORV9DT05WRVJTSU9OX0NTU19DTEFTUzpULmcuQ2csUEhPTkVfQ09OVkVSU0lPTl9JRFM6VC5nLlJpLFBIT05FX0NPTlZFUlNJT05fTlVNQkVSOlQuZy5EZyxQSE9ORV9DT05WRVJTSU9OX09QVElPTlM6VC5nLkVnLFBST01PVElPTlM6VC5nLkVpLFFVQU5USVRZOlQuZy5nZCxSRURBQ1RfREVWSUNFX0lORk86VC5nLlpkLFxuUkVGRVJSQUxfRVhDTFVTSU9OX0RFRklOSVRJT046VC5nLnBmLFJFU1RSSUNURURfREFUQV9QUk9DRVNTSU5HOlQuZy5XYixSRVRPS0VOOlQuZy5TaSxTQ1JFRU5fTkFNRTpULmcucWYsU0NSRUVOX1JFU09MVVRJT046VC5nLktiLFNFQVJDSF9URVJNOlQuZy5UaSxTRU5EX1BBR0VfVklFVzpULmcuSWEsU0VORF9UTzpULmcuWGIsU0VTU0lPTl9EVVJBVElPTjpULmcuamQsU0VTU0lPTl9FTkdBR0VEOlQuZy5hZSxTRVNTSU9OX0VOR0FHRURfVElNRTpULmcucmYsU0VTU0lPTl9JRDpULmcudWIsU0VTU0lPTl9OVU1CRVI6VC5nLmJlLFNISVBQSU5HOlQuZy5ZYyxUQVg6VC5nLmpmLFRDX1BSSVZBQ1lfU1RSSU5HOlQuZy5BYyxURU1QT1JBUllfQ0xJRU5UX0lEOlQuZy5KayxUT1BNT1NUX1VSTDpULmcudWYsVFJBQ0tJTkdfSUQ6VC5nLlVpLFRSQUZGSUNfVFlQRTpULmcudmYsVFJBTlNBQ1RJT05fSUQ6VC5nLnlhLFRSQU5TUE9SVF9VUkw6VC5nLkxiLFRSSVBfVFlQRTpULmcuR2csVVBEQVRFOlQuZy5ZYixcblVSTF9QQVNTVEhST1VHSDpULmcuV2EsVVNFUl9EQVRBOlQuZy5DYSxVU0VSX0RBVEFfQVVUT19MQVRFTkNZOlQuZy5IZyxVU0VSX0RBVEFfQVVUT19NRVRBOlQuZy5JZyxVU0VSX0RBVEFfQVVUT19NVUxUSTpULmcuSmcsVVNFUl9EQVRBX0FVVE9fU0VMRUNUT1JTOlQuZy5LZyxVU0VSX0RBVEFfQVVUT19TVEFUVVM6VC5nLkxnLFVTRVJfREFUQV9NT0RFOlQuZy5sZCxVU0VSX0RBVEFfU0VUVElOR1M6VC5nLmRlLFVTRVJfSUQ6VC5nLnphLFVTRVJfUFJPUEVSVElFUzpULmcuYWIsVVNfUFJJVkFDWV9TVFJJTkc6VC5nLmVlLFZBTFVFOlQuZy5sYSxWQUxVRV9DQUxMQkFDSzpULmcuR2IsVkFMVUVfS0VZOlQuZy5yYixXQlJBSUQ6VC5nLmtiLFdCUkFJRF9NVUxUSVBMRV9DT05WRVJTSU9OUzpULmcuTWd9LENvbnNlbnQ6e0FEX1NUT1JBR0U6VC5nLlAsQU5BTFlUSUNTX1NUT1JBR0U6VC5nLlUsQ09OU0VOVF9VUERBVEVEOlQuZy5RYixSRUdJT046VC5nLkNiLFdBSVRfRk9SX1VQREFURTpULmcuWmV9fTtcbnJldHVybiBhfTtcbmZ1bmN0aW9uIHRIKGEsYil7fXRILlQ9XCJndGFnU2V0XCI7ZnVuY3Rpb24gdUgoYSxiKXt9dUguVD1cImluamVjdEhpZGRlbklmcmFtZVwiO3ZhciB2SD1seigpO1xuZnVuY3Rpb24gd0goYSxiLGMsZCxlKXt9d0guSj1cImludGVybmFsLmluamVjdEh0bWxcIjt2YXIgQUg9e307XG5mdW5jdGlvbiBDSChhLGIsYyxkKXt9dmFyIERIPXtkbDoxLGlkOjF9LEVIPXt9O1xuZnVuY3Rpb24gRkgoYSxiLGMsZCl7fUNILlQ9XCJpbmplY3RTY3JpcHRcIjtGSC5KPVwiaW50ZXJuYWwuaW5qZWN0U2NyaXB0XCI7ZnVuY3Rpb24gR0goYSl7dmFyIGI9ITA7cmV0dXJuIGJ9R0guVD1cImlzQ29uc2VudEdyYW50ZWRcIjtmdW5jdGlvbiBISCgpe3JldHVybiBQaygpfUhILko9XCJpbnRlcm5hbC5pc0RtYVJlZ2lvblwiO2Z1bmN0aW9uIElIKGEpe3ZhciBiPSExO3JldHVybiBifUlILko9XCJpbnRlcm5hbC5pc0VudGl0eUluZnJhc3RydWN0dXJlXCI7ZnVuY3Rpb24gSkgoKXt2YXIgYT1YZyhmdW5jdGlvbihiKXt6eih0aGlzKS5sb2coXCJlcnJvclwiLGIpfSk7YS5UPVwiSlNPTlwiO3JldHVybiBhfTtmdW5jdGlvbiBLSChhKXt2YXIgYj12b2lkIDA7cmV0dXJuIGRkKGIpfUtILko9XCJpbnRlcm5hbC5sZWdhY3lQYXJzZVVybFwiO2Z1bmN0aW9uIExIKCl7cmV0dXJuITF9XG52YXIgTUg9e2dldEl0ZW06ZnVuY3Rpb24oYSl7dmFyIGI9bnVsbDtyZXR1cm4gYn0sc2V0SXRlbTpmdW5jdGlvbihhLGIpe3JldHVybiExfSxyZW1vdmVJdGVtOmZ1bmN0aW9uKGEpe319O2Z1bmN0aW9uIE5IKCl7fU5ILlQ9XCJsb2dUb0NvbnNvbGVcIjtmdW5jdGlvbiBPSChhLGIpe31PSC5KPVwiaW50ZXJuYWwubWVyZ2VSZW1vdGVDb25maWdcIjtmdW5jdGlvbiBQSChhLGIsYyl7Yz1jPT09dm9pZCAwPyEwOmM7dmFyIGQ9W107cmV0dXJuIGRkKGQpfVBILko9XCJpbnRlcm5hbC5wYXJzZUNvb2tpZVZhbHVlc0Zyb21TdHJpbmdcIjtmdW5jdGlvbiBRSChhKXt2YXIgYj12b2lkIDA7aWYodHlwZW9mIGEhPT1cInN0cmluZ1wiKXJldHVybjthJiZHYihhLFwiLy9cIikmJihhPUUubG9jYXRpb24ucHJvdG9jb2wrYSk7aWYodHlwZW9mIFVSTD09PVwiZnVuY3Rpb25cIil7dmFyIGM7YTp7dmFyIGQ7dHJ5e2Q9bmV3IFVSTChhKX1jYXRjaCh3KXtjPXZvaWQgMDticmVhayBhfWZvcih2YXIgZT17fSxmPUFycmF5LmZyb20oZC5zZWFyY2hQYXJhbXMpLGc9MDtnPGYubGVuZ3RoO2crKyl7dmFyIGs9ZltnXVswXSxtPWZbZ11bMV07ZS5oYXNPd25Qcm9wZXJ0eShrKT90eXBlb2YgZVtrXT09PVwic3RyaW5nXCI/ZVtrXT1bZVtrXSxtXTplW2tdLnB1c2gobSk6ZVtrXT1tfWM9ZGQoe2hyZWY6ZC5ocmVmLG9yaWdpbjpkLm9yaWdpbixwcm90b2NvbDpkLnByb3RvY29sLHVzZXJuYW1lOmQudXNlcm5hbWUscGFzc3dvcmQ6ZC5wYXNzd29yZCxob3N0OmQuaG9zdCxcbmhvc3RuYW1lOmQuaG9zdG5hbWUscG9ydDpkLnBvcnQscGF0aG5hbWU6ZC5wYXRobmFtZSxzZWFyY2g6ZC5zZWFyY2gsc2VhcmNoUGFyYW1zOmUsaGFzaDpkLmhhc2h9KX1yZXR1cm4gY312YXIgbjt0cnl7bj1haihhKX1jYXRjaCh3KXtyZXR1cm59aWYoIW4ucHJvdG9jb2x8fCFuLmhvc3QpcmV0dXJuO3ZhciBwPXt9O2lmKG4uc2VhcmNoKWZvcih2YXIgcT1uLnNlYXJjaC5yZXBsYWNlKFwiP1wiLFwiXCIpLnNwbGl0KFwiJlwiKSxyPTA7cjxxLmxlbmd0aDtyKyspe3ZhciB0PXFbcl0uc3BsaXQoXCI9XCIpLHU9dFswXSx2PWRlY29kZVVSSUNvbXBvbmVudCh0LnNwbGljZSgxKS5qb2luKFwiPVwiKSkucmVwbGFjZSgvXFwrL2csXCIgXCIpO3AuaGFzT3duUHJvcGVydHkodSk/dHlwZW9mIHBbdV09PT1cInN0cmluZ1wiP3BbdV09W3BbdV0sdl06cFt1XS5wdXNoKHYpOnBbdV09dn1uLnNlYXJjaFBhcmFtcz1wO24ub3JpZ2luPW4ucHJvdG9jb2wrXCIvL1wiK24uaG9zdDtuLnVzZXJuYW1lPVwiXCI7bi5wYXNzd29yZD1cblwiXCI7Yj1kZChuKTtyZXR1cm4gYn1RSC5UPVwicGFyc2VVcmxcIjtmdW5jdGlvbiBSSChhKXtLKHRoaXMuZ2V0TmFtZSgpLFtcInByZUhpdDohUGl4aWVNYXBcIl0sYXJndW1lbnRzKTt2YXIgYj1KKGEsdGhpcy5GLDEpLklqKCksYz17fTtoKGIubS5qLGMpO2goYi5vLGMpO3ZhciBkPXt9O2goYi5tZXRhZGF0YSxkKTtkLnN5bl9vcl9tb2Q9ITA7dmFyIGU9e2V2ZW50TWV0YWRhdGE6ZH0sZj1iLm0uZXZlbnRJZCxnPUF4KGIudGFyZ2V0LmRlc3RpbmF0aW9uSWQsYi5ldmVudE5hbWUsYyk7SHgoZyxmLGUpO31SSC5KPVwiaW50ZXJuYWwucHJvY2Vzc0FzTmV3RXZlbnRcIjtmdW5jdGlvbiBTSChhLGIsYyl7dmFyIGQ7cmV0dXJuIGR9U0guSj1cImludGVybmFsLnB1c2hUb0RhdGFMYXllclwiO2Z1bmN0aW9uIFRIKGEpe3ZhciBiPSExO3JldHVybiBifVRILlQ9XCJxdWVyeVBlcm1pc3Npb25cIjtmdW5jdGlvbiBVSCgpe3ZhciBhPVwiXCI7cmV0dXJuIGF9VUguVD1cInJlYWRDaGFyYWN0ZXJTZXRcIjtmdW5jdGlvbiBWSCgpe3JldHVybiBoaS5oYn1WSC5KPVwiaW50ZXJuYWwucmVhZERhdGFMYXllck5hbWVcIjtmdW5jdGlvbiBXSCgpe3ZhciBhPVwiXCI7cmV0dXJuIGF9V0guVD1cInJlYWRUaXRsZVwiO2Z1bmN0aW9uIFhIKGEsYil7dmFyIGM9dGhpcztLKHRoaXMuZ2V0TmFtZSgpLFtcImRlc3RpbmF0aW9uSWQ6IXN0cmluZ1wiLFwiY2FsbGJhY2s6IUZuXCJdLGFyZ3VtZW50cyksUXIoYSxmdW5jdGlvbihkKXtiLmludm9rZShjLkYsZGQoZCxjLkYsMSkpfSk7fVhILko9XCJpbnRlcm5hbC5yZWdpc3RlckNjZENhbGxiYWNrXCI7ZnVuY3Rpb24gWUgoYSl7cmV0dXJuITB9XG5ZSC5KPVwiaW50ZXJuYWwucmVnaXN0ZXJEZXN0aW5hdGlvblwiO3ZhciBaSD1bXCJjb25maWdcIixcImV2ZW50XCIsXCJnZXRcIixcInNldFwiXTtmdW5jdGlvbiAkSChhLGIsYyl7fSRILko9XCJpbnRlcm5hbC5yZWdpc3Rlckd0YWdDb21tYW5kTGlzdGVuZXJcIjtmdW5jdGlvbiBhSShhLGIpe3ZhciBjPSExO3JldHVybiBjfWFJLko9XCJpbnRlcm5hbC5yZW1vdmVEYXRhTGF5ZXJFdmVudExpc3RlbmVyXCI7ZnVuY3Rpb24gYkkoYSxiKXt9XG5iSS5KPVwiaW50ZXJuYWwucmVtb3ZlRm9ybURhdGFcIjtmdW5jdGlvbiBjSSgpe31jSS5UPVwicmVzZXREYXRhTGF5ZXJcIjtmdW5jdGlvbiBkSShhLGIsYyxkKXtLKHRoaXMuZ2V0TmFtZSgpLFtcImRlc3RpbmF0aW9uSWRzOiEqXCIsXCJldmVudE5hbWU6ISpcIixcImV2ZW50UGFyYW1ldGVyczo/UGl4aWVNYXBcIixcIm1lc3NhZ2VDb250ZXh0Oj9QaXhpZU1hcFwiXSxhcmd1bWVudHMpO3ZhciBlPWM/SihjKTp7fSxmPUooYSk7QXJyYXkuaXNBcnJheShmKXx8KGY9W2ZdKTtiPVN0cmluZyhiKTt2YXIgZz1kP0ooZCk6e30saz16eih0aGlzKTtnLm9yaWdpbmF0aW5nRW50aXR5PXBBKGspO3ZhciBtPWY7Zm9yKHZhciBuPTA7bjxtLmxlbmd0aDtuKyspe3ZhciBwPW1bbl07aWYodHlwZW9mIHA9PT1cInN0cmluZ1wiKXt2YXIgcT1cbnt9O2goZSxxKTt2YXIgcj17fTtoKGcscik7dmFyIHQ9QXgocCxiLHEpO0h4KHQsZy5ldmVudElkfHxrLmV2ZW50SWQscil9fX1kSS5KPVwiaW50ZXJuYWwuc2VuZEd0YWdFdmVudFwiO2Z1bmN0aW9uIGVJKGEsYixjKXt9ZUkuVD1cInNlbmRQaXhlbFwiO2Z1bmN0aW9uIGZJKGEsYil7fWZJLko9XCJpbnRlcm5hbC5zZXRBbmNob3JIcmVmXCI7ZnVuY3Rpb24gZ0koYSl7fWdJLko9XCJpbnRlcm5hbC5zZXRDb250YWluZXJDb25zZW50RGVmYXVsdHNcIjtmdW5jdGlvbiBoSShhLGIsYyxkKXt2YXIgZT10aGlzO2Q9ZD09PXZvaWQgMD8hMDpkO3ZhciBmPSExO3JldHVybiBmfWhJLlQ9XCJzZXRDb29raWVcIjtmdW5jdGlvbiBpSShhKXt9aUkuSj1cImludGVybmFsLnNldENvcmVQbGF0Zm9ybVNlcnZpY2VzXCI7ZnVuY3Rpb24gakkoYSxiKXt9akkuSj1cImludGVybmFsLnNldERhdGFMYXllclZhbHVlXCI7ZnVuY3Rpb24ga0koYSl7fWtJLlQ9XCJzZXREZWZhdWx0Q29uc2VudFN0YXRlXCI7ZnVuY3Rpb24gbEkoYSxiKXt9bEkuSj1cImludGVybmFsLnNldERlbGVnYXRlZENvbnNlbnRUeXBlXCI7ZnVuY3Rpb24gbUkoYSxiKXt9bUkuSj1cImludGVybmFsLnNldEZvcm1BY3Rpb25cIjtmdW5jdGlvbiBuSShhLGIsYyl7Syh0aGlzLmdldE5hbWUoKSxbXCJrZXk6IXN0cmluZ1wiLFwidmFsdWU6PypcIixcIm92ZXJyaWRlRXhpc3Rpbmc6P2Jvb2xlYW5cIl0sYXJndW1lbnRzKTtpZighYW8oYSkpdGhyb3cgRXJyb3IoXCJzZXRJbkNyb3NzQ29udGFpbmVyRGF0YSByZXF1aXJlcyB2YWxpZCBDcm9zc0NvbnRhaW5lclNjaGVtYSBrZXkuXCIpOyhjfHxlbyhhKT09PXZvaWQgMCkmJmNvKGEsSihiLHRoaXMuRiwxKSk7fW5JLko9XCJpbnRlcm5hbC5zZXRJbkNyb3NzQ29udGFpbmVyRGF0YVwiO2Z1bmN0aW9uIG9JKGEsYixjKXtyZXR1cm4hMX1vSS5UPVwic2V0SW5XaW5kb3dcIjtmdW5jdGlvbiBwSShhLGIsYyl7Syh0aGlzLmdldE5hbWUoKSxbXCJ0YXJnZXRJZDohc3RyaW5nXCIsXCJuYW1lOiFzdHJpbmdcIixcInZhbHVlOiEqXCJdLGFyZ3VtZW50cyk7dmFyIGQ9WHIoYSl8fHt9O2RbYl09SihjLHRoaXMuRik7dmFyIGU9YTtWcnx8V3IoKTtVcltlXT1kO31wSS5KPVwiaW50ZXJuYWwuc2V0UHJvZHVjdFNldHRpbmdzUGFyYW1ldGVyXCI7ZnVuY3Rpb24gcUkoYSxiLGMpe0sodGhpcy5nZXROYW1lKCksW1widGFyZ2V0SWQ6IXN0cmluZ1wiLFwibmFtZTohc3RyaW5nXCIsXCJ2YWx1ZTohKlwiXSxhcmd1bWVudHMpO2Zvcih2YXIgZD1iLnNwbGl0KFwiLlwiKSxlPW9tKGEpLGY9MDtmPGQubGVuZ3RoLTE7ZisrKXtpZihlW2RbZl1dPT09dm9pZCAwKWVbZFtmXV09e307ZWxzZSBpZighU2EoZVtkW2ZdXSkpdGhyb3cgRXJyb3IoXCJzZXRSZW1vdGVDb25maWdQYXJhbWV0ZXIgZmFpbGVkLCBwYXRoIGNvbnRhaW5zIGEgbm9uLW9iamVjdCB0eXBlOiBcIitkW2ZdKTtlPWVbZFtmXV19ZVtkW2ZdXT1KKGMsdGhpcy5GLDEpO31xSS5KPVwiaW50ZXJuYWwuc2V0UmVtb3RlQ29uZmlnUGFyYW1ldGVyXCI7ZnVuY3Rpb24gckkoYSxiLGMsZCl7dmFyIGU9dGhpczt9ckkuVD1cInNoYTI1NlwiO2Z1bmN0aW9uIHNJKGEsYixjKXt9XG5zSS5KPVwiaW50ZXJuYWwuc29ydFJlbW90ZUNvbmZpZ1BhcmFtZXRlcnNcIjtmdW5jdGlvbiB0SShhLGIpe3ZhciBjPXZvaWQgMDtyZXR1cm4gY310SS5KPVwiaW50ZXJuYWwuc3Vic2NyaWJlVG9Dcm9zc0NvbnRhaW5lckRhdGFcIjt2YXIgdUk9e30sdkk9e307dUkuZ2V0SXRlbT1mdW5jdGlvbihhKXt2YXIgYj1udWxsO0wodGhpcyxcImFjY2Vzc190ZW1wbGF0ZV9zdG9yYWdlXCIpO3ZhciBjPXp6KHRoaXMpLmNiKCk7dklbY10mJihiPXZJW2NdLmhhc093blByb3BlcnR5KFwiZ3RtLlwiK2EpP3ZJW2NdW1wiZ3RtLlwiK2FdOm51bGwpO3JldHVybiBifTt1SS5zZXRJdGVtPWZ1bmN0aW9uKGEsYil7TCh0aGlzLFwiYWNjZXNzX3RlbXBsYXRlX3N0b3JhZ2VcIik7dmFyIGM9enoodGhpcykuY2IoKTt2SVtjXT12SVtjXXx8e307dklbY11bXCJndG0uXCIrYV09Yjt9O1xudUkucmVtb3ZlSXRlbT1mdW5jdGlvbihhKXtMKHRoaXMsXCJhY2Nlc3NfdGVtcGxhdGVfc3RvcmFnZVwiKTt2YXIgYj16eih0aGlzKS5jYigpO2lmKCF2SVtiXXx8IXZJW2JdLmhhc093blByb3BlcnR5KFwiZ3RtLlwiK2EpKXJldHVybjtkZWxldGUgdklbYl1bXCJndG0uXCIrYV07fTt1SS5jbGVhcj1mdW5jdGlvbigpe0wodGhpcyxcImFjY2Vzc190ZW1wbGF0ZV9zdG9yYWdlXCIpLGRlbGV0ZSB2SVt6eih0aGlzKS5jYigpXTt9O3VJLlQ9XCJ0ZW1wbGF0ZVN0b3JhZ2VcIjtmdW5jdGlvbiB3SShhLGIpe3ZhciBjPSExO0sodGhpcy5nZXROYW1lKCksW1wicmVnZXg6IU9wYXF1ZVZhbHVlXCIsXCJ0ZXN0U3RyaW5nOiFzdHJpbmdcIl0sYXJndW1lbnRzKTtpZighKGEuZ2V0VmFsdWUoKWluc3RhbmNlb2YgUmVnRXhwKSlyZXR1cm4hMTtjPWEuZ2V0VmFsdWUoKS50ZXN0KGIpO3JldHVybiBjfXdJLko9XCJpbnRlcm5hbC50ZXN0UmVnZXhcIjtmdW5jdGlvbiB4SShhKXt2YXIgYjtyZXR1cm4gYn07ZnVuY3Rpb24geUkoYSl7dmFyIGI7cmV0dXJuIGJ9eUkuSj1cImludGVybmFsLnVuc2lsb0lkXCI7ZnVuY3Rpb24gekkoYSxiKXt2YXIgYztyZXR1cm4gY316SS5KPVwiaW50ZXJuYWwudW5zdWJzY3JpYmVGcm9tQ3Jvc3NDb250YWluZXJEYXRhXCI7ZnVuY3Rpb24gQUkoYSl7fUFJLlQ9XCJ1cGRhdGVDb25zZW50U3RhdGVcIjt2YXIgQkk7ZnVuY3Rpb24gQ0koYSxiLGMpe0JJPUJJfHxuZXcgaGg7QkkuYWRkKGEsYixjKX1mdW5jdGlvbiBESShhLGIpe3ZhciBjPUJJPUJJfHxuZXcgaGg7aWYoYy5qLmhhc093blByb3BlcnR5KGEpKXRocm93IEVycm9yKFwiQXR0ZW1wdGluZyB0byBhZGQgYSBwcml2YXRlIGZ1bmN0aW9uIHdoaWNoIGFscmVhZHkgZXhpc3RzOiBcIithK1wiLlwiKTtpZihjLmNvbnRhaW5zKGEpKXRocm93IEVycm9yKFwiQXR0ZW1wdGluZyB0byBhZGQgYSBwcml2YXRlIGZ1bmN0aW9uIHdpdGggYW4gZXhpc3RpbmcgQVBJIG5hbWU6IFwiK2ErXCIuXCIpO2MualthXT1vYihiKT9FZyhhLGIpOkZnKGEsYil9XG5mdW5jdGlvbiBFSSgpe3JldHVybiBmdW5jdGlvbihhKXt2YXIgYjt2YXIgYz1CSTtpZihjLmNvbnRhaW5zKGEpKWI9Yy5nZXQoYSx0aGlzKTtlbHNle3ZhciBkO2lmKGQ9Yy5qLmhhc093blByb3BlcnR5KGEpKXt2YXIgZT0hMSxmPXRoaXMuRi5qO2lmKGYpe3ZhciBnPWYuY2IoKTtpZihnKXtnLmluZGV4T2YoXCJfX2N2dF9cIikhPT0wJiYoZT0hMCk7fX1lbHNlIGU9ITA7ZD1lfWlmKGQpe3ZhciBrPWMuai5oYXNPd25Qcm9wZXJ0eShhKT9jLmpbYV06dm9pZCAwO1xuYj1rfWVsc2UgdGhyb3cgRXJyb3IoYStcIiBpcyBub3QgYSB2YWxpZCBBUEkgbmFtZS5cIik7fXJldHVybiBifX07dmFyIEZJPWZ1bmN0aW9uKCl7dmFyIGE9ZnVuY3Rpb24oYyl7cmV0dXJuIERJKGMuSixjKX0sYj1mdW5jdGlvbihjKXtyZXR1cm4gQ0koYy5ULGMpfTtiKHR6KTtiKEF6KTtiKE9BKTtiKFFBKTtiKFJBKTtiKFdBKTtiKFlBKTtiKGJCKTtiKGRCKTtiKHJFKTtiKHNFKTtiKEhFKTtiKElFKTtiKEpFKTtiKE1FKTtiKHRIKTtiKHVIKTtiKENIKTtiKEdIKTtiKE5IKTtiKFFIKTtiKFRIKTtiKFVIKTtiKFdIKTtiKGVJKTtiKGhJKTtiKGtJKTtiKG9JKTtiKHJJKTtiKHVJKTtiKEFJKTtiKEpIKCkpO0NJKFwiTWF0aFwiLEpnKCkpO0NJKFwiT2JqZWN0XCIsZmgpO0NJKFwiVGVzdEhlbHBlclwiLGpoKCkpO0NJKFwiYXNzZXJ0QXBpXCIsR2cpO0NJKFwiYXNzZXJ0VGhhdFwiLEhnKTtDSShcImRlY29kZVVyaVwiLExnKTtDSShcImRlY29kZVVyaUNvbXBvbmVudFwiLE1nKTtDSShcImVuY29kZVVyaVwiLE5nKTtDSShcImVuY29kZVVyaUNvbXBvbmVudFwiLE9nKTtDSShcImZhaWxcIixUZyk7Q0koXCJnZW5lcmF0ZVJhbmRvbVwiLFxuVWcpO0NJKFwiZ2V0VGltZXN0YW1wXCIsVmcpO0NJKFwiZ2V0VGltZXN0YW1wTWlsbGlzXCIsVmcpO0NJKFwiZ2V0VHlwZVwiLFdnKTtDSShcIm1ha2VJbnRlZ2VyXCIsWWcpO0NJKFwibWFrZU51bWJlclwiLFpnKTtDSShcIm1ha2VTdHJpbmdcIiwkZyk7Q0koXCJtYWtlVGFibGVNYXBcIixhaCk7Q0koXCJtb2NrXCIsZGgpO0NJKFwiZnJvbUJhc2U2NFwiLHBFLCEoXCJhdG9iXCJpbiBEKSk7Q0koXCJsb2NhbFN0b3JhZ2VcIixNSCwhTEgoKSk7Q0koXCJ0b0Jhc2U2NFwiLHhJLCEoXCJidG9hXCJpbiBEKSk7YSh3eik7YShSeik7YShjQSk7YShqQSk7YShvQSk7YShEQSk7YShNQSk7YShQQSk7YShTQSk7YShUQSk7YShVQSk7YShWQSk7YShYQSk7YShaQSk7YShhQik7YShjQik7YShlQik7YShnQik7YShoQik7YShpQik7YShqQik7YShrQik7YShvQik7YSh3Qik7YSh4Qik7YShJQik7YShOQik7YShTQik7YShhQyk7YShmQyk7YShzQyk7YSh1Qyk7YShJQyk7YShKQyk7YShMQyk7YShuRSk7YShvRSk7YSh0RSk7YSh1RSk7YSh2RSk7XG5hKHdFKTthKHhFKTthKHlFKTthKHpFKTthKEFFKTthKEJFKTthKENFKTthKEVFKTthKEZFKTthKEdFKTthKEtFKTthKExFKTthKHFIKTthKHdIKTthKEZIKTthKEhIKTthKElIKTthKEtIKTthKEJBKTthKE9IKTthKFBIKTthKFJIKTthKFNIKTthKFZIKTthKFhIKTthKFlIKTthKCRIKTthKGFJKTthKGJJKTthKGRJKTthKGZJKTthKGdJKTthKGlJKTthKGpJKTthKGxJKTthKG1JKTthKG5JKTthKHBJKTthKHFJKTthKHNJKTthKHRJKTthKHdJKTthKHlJKTthKHpJKTtESShcImludGVybmFsLkNyb3NzQ29udGFpbmVyU2NoZW1hXCIsZkIoKSk7REkoXCJpbnRlcm5hbC5HdGFnU2NoZW1hXCIsckgoKSk7Q0koXCJtb2NrT2JqZWN0XCIsZWgpO3JldHVybiBFSSgpfTt2YXIgcno7ZnVuY3Rpb24gR0koKXtyei5qLmouSD1mdW5jdGlvbihhLGIsYyl7aWkuU0FOREJPWEVEX0pTX1NFTUFQSE9SRT1paS5TQU5EQk9YRURfSlNfU0VNQVBIT1JFfHwwO2lpLlNBTkRCT1hFRF9KU19TRU1BUEhPUkUrKzt0cnl7cmV0dXJuIGEuYXBwbHkoYixjKX1maW5hbGx5e2lpLlNBTkRCT1hFRF9KU19TRU1BUEhPUkUtLX19fWZ1bmN0aW9uIEhJKGEpe2EmJnooYSxmdW5jdGlvbihiLGMpe2Zvcih2YXIgZD0wO2Q8Yy5sZW5ndGg7ZCsrKXt2YXIgZT1jW2RdLnJlcGxhY2UoL15fKi8sXCJcIik7eWlbZV09eWlbZV18fFtdO3lpW2VdLnB1c2goYil9fSl9O3ZhciBJST1lbmNvZGVVUkksWT1lbmNvZGVVUklDb21wb25lbnQsSkk9QXJyYXkuaXNBcnJheSxLST1mdW5jdGlvbihhLGIsYyl7QWMoYSxiLGMpfSxMST1mdW5jdGlvbihhLGIpe2lmKCFhKXJldHVybiExO3ZhciBjPVZpKGFqKGEpLFwiaG9zdFwiKTtpZighYylyZXR1cm4hMTtmb3IodmFyIGQ9MDtiJiZkPGIubGVuZ3RoO2QrKyl7dmFyIGU9YltkXSYmYltkXS50b0xvd2VyQ2FzZSgpO2lmKGUpe3ZhciBmPWMubGVuZ3RoLWUubGVuZ3RoO2Y+MCYmZS5jaGFyQXQoMCkhPVwiLlwiJiYoZi0tLGU9XCIuXCIrZSk7aWYoZj49MCYmYy5pbmRleE9mKGUsZik9PWYpcmV0dXJuITB9fXJldHVybiExfSxNST1mdW5jdGlvbihhLGIsYyl7Zm9yKHZhciBkPXt9LGU9ITEsZj0wO2EmJmY8YS5sZW5ndGg7ZisrKWFbZl0mJlxuYVtmXS5oYXNPd25Qcm9wZXJ0eShiKSYmYVtmXS5oYXNPd25Qcm9wZXJ0eShjKSYmKGRbYVtmXVtiXV09YVtmXVtjXSxlPSEwKTtyZXR1cm4gZT9kOm51bGx9O3ZhciBWST1ELmNsZWFyVGltZW91dCxXST1ELnNldFRpbWVvdXQ7ZnVuY3Rpb24gWEkoYSxiLGMpe2lmKFduKCkpe2ImJkcoYil9ZWxzZSByZXR1cm4geGMoYSxiLGMpfWZ1bmN0aW9uIFlJKCl7cmV0dXJuIEQubG9jYXRpb24uaHJlZn1mdW5jdGlvbiBaSShhLGIpe3JldHVybiBKaShhLGJ8fDIpfWZ1bmN0aW9uICRJKGEsYil7RFthXT1ifWZ1bmN0aW9uIGFKKGEsYixjKXtiJiYoRFthXT09PXZvaWQgMHx8YyYmIURbYV0pJiYoRFthXT1iKTtyZXR1cm4gRFthXX1mdW5jdGlvbiBiSihhLGIpe2lmKFduKCkpe2ImJkcoYil9ZWxzZSB6YyhhLGIpfVxudmFyIGNKPXt9O3ZhciBaPXtzZWN1cml0eUdyb3Vwczp7fX07XG5cblouc2VjdXJpdHlHcm91cHMuYWNjZXNzX3RlbXBsYXRlX3N0b3JhZ2U9W1wiZ29vZ2xlXCJdLFouX19hY2Nlc3NfdGVtcGxhdGVfc3RvcmFnZT1mdW5jdGlvbigpe3JldHVybnthc3NlcnQ6ZnVuY3Rpb24oKXt9LE46ZnVuY3Rpb24oKXtyZXR1cm57fX19fSxaLl9fYWNjZXNzX3RlbXBsYXRlX3N0b3JhZ2UuQz1cImFjY2Vzc190ZW1wbGF0ZV9zdG9yYWdlXCIsWi5fX2FjY2Vzc190ZW1wbGF0ZV9zdG9yYWdlLmlzVmVuZG9yVGVtcGxhdGU9ITAsWi5fX2FjY2Vzc190ZW1wbGF0ZV9zdG9yYWdlLnByaW9yaXR5T3ZlcnJpZGU9MCxaLl9fYWNjZXNzX3RlbXBsYXRlX3N0b3JhZ2UuaXNJbmZyYXN0cnVjdHVyZT0hMSxaLl9fYWNjZXNzX3RlbXBsYXRlX3N0b3JhZ2UucnVuSW5TaWxvZWRNb2RlPSExO1xuXG5aLnNlY3VyaXR5R3JvdXBzLmFjY2Vzc19nbG9iYWxzPVtcImdvb2dsZVwiXSxmdW5jdGlvbigpe2Z1bmN0aW9uIGEoYixjLGQpe3ZhciBlPXtrZXk6ZCxyZWFkOiExLHdyaXRlOiExLGV4ZWN1dGU6ITF9O3N3aXRjaChjKXtjYXNlIFwicmVhZFwiOmUucmVhZD0hMDticmVhaztjYXNlIFwid3JpdGVcIjplLndyaXRlPSEwO2JyZWFrO2Nhc2UgXCJyZWFkd3JpdGVcIjplLnJlYWQ9ZS53cml0ZT0hMDticmVhaztjYXNlIFwiZXhlY3V0ZVwiOmUuZXhlY3V0ZT0hMDticmVhaztkZWZhdWx0OnRocm93IEVycm9yKFwiSW52YWxpZCBcIitiK1wiIHJlcXVlc3QgXCIrYyk7fXJldHVybiBlfShmdW5jdGlvbihiKXtaLl9fYWNjZXNzX2dsb2JhbHM9YjtaLl9fYWNjZXNzX2dsb2JhbHMuQz1cImFjY2Vzc19nbG9iYWxzXCI7Wi5fX2FjY2Vzc19nbG9iYWxzLmlzVmVuZG9yVGVtcGxhdGU9ITA7Wi5fX2FjY2Vzc19nbG9iYWxzLnByaW9yaXR5T3ZlcnJpZGU9MDtaLl9fYWNjZXNzX2dsb2JhbHMuaXNJbmZyYXN0cnVjdHVyZT0hMTtcblouX19hY2Nlc3NfZ2xvYmFscy5ydW5JblNpbG9lZE1vZGU9ITF9KShmdW5jdGlvbihiKXtmb3IodmFyIGM9Yi52dHBfa2V5c3x8W10sZD1iLnZ0cF9jcmVhdGVQZXJtaXNzaW9uRXJyb3IsZT1bXSxmPVtdLGc9W10saz0wO2s8Yy5sZW5ndGg7aysrKXt2YXIgbT1jW2tdLG49bS5rZXk7bS5yZWFkJiZlLnB1c2gobik7bS53cml0ZSYmZi5wdXNoKG4pO20uZXhlY3V0ZSYmZy5wdXNoKG4pfXJldHVybnthc3NlcnQ6ZnVuY3Rpb24ocCxxLHIpe2lmKCFsKHIpKXRocm93IGQocCx7fSxcIktleSBtdXN0IGJlIGEgc3RyaW5nLlwiKTtpZihxPT09XCJyZWFkXCIpe2lmKGUuaW5kZXhPZihyKT4tMSlyZXR1cm59ZWxzZSBpZihxPT09XCJ3cml0ZVwiKXtpZihmLmluZGV4T2Yocik+LTEpcmV0dXJufWVsc2UgaWYocT09PVwicmVhZHdyaXRlXCIpe2lmKGYuaW5kZXhPZihyKT4tMSYmZS5pbmRleE9mKHIpPi0xKXJldHVybn1lbHNlIGlmKHE9PT1cImV4ZWN1dGVcIil7aWYoZy5pbmRleE9mKHIpPi0xKXJldHVybn1lbHNlIHRocm93IGQocCxcbnt9LFwiT3BlcmF0aW9uIG11c3QgYmUgZWl0aGVyICdyZWFkJywgJ3dyaXRlJywgb3IgJ2V4ZWN1dGUnLCB3YXMgXCIrcSk7dGhyb3cgZChwLHt9LFwiUHJvaGliaXRlZCBcIitxK1wiIG9uIGdsb2JhbCB2YXJpYWJsZTogXCIrcitcIi5cIik7fSxOOmF9fSl9KCk7Wi5zZWN1cml0eUdyb3Vwcy52PVtcImdvb2dsZVwiXSxaLl9fdj1mdW5jdGlvbihhKXt2YXIgYj1hLnZ0cF9uYW1lO2lmKCFifHwhYi5yZXBsYWNlKXJldHVybiExO3ZhciBjPVpJKGIucmVwbGFjZSgvXFxcXFxcLi9nLFwiLlwiKSxhLnZ0cF9kYXRhTGF5ZXJWZXJzaW9ufHwxKTtyZXR1cm4gYyE9PXZvaWQgMD9jOmEudnRwX2RlZmF1bHRWYWx1ZX0sWi5fX3YuQz1cInZcIixaLl9fdi5pc1ZlbmRvclRlbXBsYXRlPSEwLFouX192LnByaW9yaXR5T3ZlcnJpZGU9MCxaLl9fdi5pc0luZnJhc3RydWN0dXJlPSEwLFouX192LnJ1bkluU2lsb2VkTW9kZT0hMTtcblxuWi5zZWN1cml0eUdyb3Vwcy5yZWFkX2V2ZW50X2RhdGE9W1wiZ29vZ2xlXCJdLGZ1bmN0aW9uKCl7ZnVuY3Rpb24gYShiLGMpe3JldHVybntrZXk6Y319KGZ1bmN0aW9uKGIpe1ouX19yZWFkX2V2ZW50X2RhdGE9YjtaLl9fcmVhZF9ldmVudF9kYXRhLkM9XCJyZWFkX2V2ZW50X2RhdGFcIjtaLl9fcmVhZF9ldmVudF9kYXRhLmlzVmVuZG9yVGVtcGxhdGU9ITA7Wi5fX3JlYWRfZXZlbnRfZGF0YS5wcmlvcml0eU92ZXJyaWRlPTA7Wi5fX3JlYWRfZXZlbnRfZGF0YS5pc0luZnJhc3RydWN0dXJlPSExO1ouX19yZWFkX2V2ZW50X2RhdGEucnVuSW5TaWxvZWRNb2RlPSExfSkoZnVuY3Rpb24oYil7dmFyIGM9Yi52dHBfZXZlbnREYXRhQWNjZXNzLGQ9Yi52dHBfa2V5UGF0dGVybnN8fFtdLGU9Yi52dHBfY3JlYXRlUGVybWlzc2lvbkVycm9yO3JldHVybnthc3NlcnQ6ZnVuY3Rpb24oZixnKXtpZihnIT1udWxsJiYhbChnKSl0aHJvdyBlKGYse2tleTpnfSxcIktleSBtdXN0IGJlIGEgc3RyaW5nLlwiKTtcbmlmKGMhPT1cImFueVwiKXt0cnl7aWYoYz09PVwic3BlY2lmaWNcIiYmZyE9bnVsbCYmaWcoZyxkKSlyZXR1cm59Y2F0Y2goayl7dGhyb3cgZShmLHtrZXk6Z30sXCJJbnZhbGlkIGtleSBmaWx0ZXIuXCIpO310aHJvdyBlKGYse2tleTpnfSxcIlByb2hpYml0ZWQgcmVhZCBmcm9tIGV2ZW50IGRhdGEuXCIpO319LE46YX19KX0oKTtcblxuXG5cblxuWi5zZWN1cml0eUdyb3Vwcy5yZWFkX2NvbnRhaW5lcl9kYXRhPVtcImdvb2dsZVwiXSxaLl9fcmVhZF9jb250YWluZXJfZGF0YT1mdW5jdGlvbigpe3JldHVybnthc3NlcnQ6ZnVuY3Rpb24oKXt9LE46ZnVuY3Rpb24oKXtyZXR1cm57fX19fSxaLl9fcmVhZF9jb250YWluZXJfZGF0YS5DPVwicmVhZF9jb250YWluZXJfZGF0YVwiLFouX19yZWFkX2NvbnRhaW5lcl9kYXRhLmlzVmVuZG9yVGVtcGxhdGU9ITAsWi5fX3JlYWRfY29udGFpbmVyX2RhdGEucHJpb3JpdHlPdmVycmlkZT0wLFouX19yZWFkX2NvbnRhaW5lcl9kYXRhLmlzSW5mcmFzdHJ1Y3R1cmU9ITEsWi5fX3JlYWRfY29udGFpbmVyX2RhdGEucnVuSW5TaWxvZWRNb2RlPSExO1xuXG5aLnNlY3VyaXR5R3JvdXBzLmRldGVjdF91c2VyX3Byb3ZpZGVkX2RhdGE9W1wiZ29vZ2xlXCJdLGZ1bmN0aW9uKCl7ZnVuY3Rpb24gYShiLGMpe3JldHVybntkYXRhU291cmNlOmN9fShmdW5jdGlvbihiKXtaLl9fZGV0ZWN0X3VzZXJfcHJvdmlkZWRfZGF0YT1iO1ouX19kZXRlY3RfdXNlcl9wcm92aWRlZF9kYXRhLkM9XCJkZXRlY3RfdXNlcl9wcm92aWRlZF9kYXRhXCI7Wi5fX2RldGVjdF91c2VyX3Byb3ZpZGVkX2RhdGEuaXNWZW5kb3JUZW1wbGF0ZT0hMDtaLl9fZGV0ZWN0X3VzZXJfcHJvdmlkZWRfZGF0YS5wcmlvcml0eU92ZXJyaWRlPTA7Wi5fX2RldGVjdF91c2VyX3Byb3ZpZGVkX2RhdGEuaXNJbmZyYXN0cnVjdHVyZT0hMTtaLl9fZGV0ZWN0X3VzZXJfcHJvdmlkZWRfZGF0YS5ydW5JblNpbG9lZE1vZGU9ITF9KShmdW5jdGlvbihiKXt2YXIgYz1iLnZ0cF9jcmVhdGVQZXJtaXNzaW9uRXJyb3I7cmV0dXJue2Fzc2VydDpmdW5jdGlvbihkLGUpe2lmKGUhPT1cImF1dG9cIiYmZSE9PVwibWFudWFsXCImJlxuZSE9PVwiY29kZVwiKXRocm93IGMoZCx7fSxcIlVua25vd24gdXNlciBwcm92aWRlZCBkYXRhIHNvdXJjZS5cIik7aWYoYi52dHBfbGltaXREYXRhU291cmNlcylpZihlIT09XCJhdXRvXCJ8fGIudnRwX2FsbG93QXV0b0RhdGFTb3VyY2VzKXtpZihlPT09XCJtYW51YWxcIiYmIWIudnRwX2FsbG93TWFudWFsRGF0YVNvdXJjZXMpdGhyb3cgYyhkLHt9LFwiRGV0ZWN0aW9uIG9mIHVzZXIgcHJvdmlkZWQgZGF0YSB2aWEgbWFudWFsbHkgc3BlY2lmaWVkIENTUyBzZWxlY3RvcnMgaXMgbm90IGFsbG93ZWQuXCIpO2lmKGU9PT1cImNvZGVcIiYmIWIudnRwX2FsbG93Q29kZURhdGFTb3VyY2VzKXRocm93IGMoZCx7fSxcIkRldGVjdGlvbiBvZiB1c2VyIHByb3ZpZGVkIGRhdGEgZnJvbSBhbiBpbi1wYWdlIHZhcmlhYmxlIGlzIG5vdCBhbGxvd2VkLlwiKTt9ZWxzZSB0aHJvdyBjKGQse30sXCJBdXRvbWF0aWMgZGV0ZWN0aW9uIG9mIHVzZXIgcHJvdmlkZWQgZGF0YSBpcyBub3QgYWxsb3dlZC5cIik7fSxOOmF9fSl9KCk7XG5cblxuXG5aLnNlY3VyaXR5R3JvdXBzLmdldF91cmw9W1wiZ29vZ2xlXCJdLGZ1bmN0aW9uKCl7ZnVuY3Rpb24gYShiLGMsZCl7cmV0dXJue2NvbXBvbmVudDpjLHF1ZXJ5S2V5OmR9fShmdW5jdGlvbihiKXtaLl9fZ2V0X3VybD1iO1ouX19nZXRfdXJsLkM9XCJnZXRfdXJsXCI7Wi5fX2dldF91cmwuaXNWZW5kb3JUZW1wbGF0ZT0hMDtaLl9fZ2V0X3VybC5wcmlvcml0eU92ZXJyaWRlPTA7Wi5fX2dldF91cmwuaXNJbmZyYXN0cnVjdHVyZT0hMTtaLl9fZ2V0X3VybC5ydW5JblNpbG9lZE1vZGU9ITF9KShmdW5jdGlvbihiKXt2YXIgYz1iLnZ0cF91cmxQYXJ0cz09PVwiYW55XCI/bnVsbDpbXTtjJiYoYi52dHBfcHJvdG9jb2wmJmMucHVzaChcInByb3RvY29sXCIpLGIudnRwX2hvc3QmJmMucHVzaChcImhvc3RcIiksYi52dHBfcG9ydCYmYy5wdXNoKFwicG9ydFwiKSxiLnZ0cF9wYXRoJiZjLnB1c2goXCJwYXRoXCIpLGIudnRwX2V4dGVuc2lvbiYmYy5wdXNoKFwiZXh0ZW5zaW9uXCIpLGIudnRwX3F1ZXJ5JiZjLnB1c2goXCJxdWVyeVwiKSxcbmIudnRwX2ZyYWdtZW50JiZjLnB1c2goXCJmcmFnbWVudFwiKSk7dmFyIGQ9YyYmYi52dHBfcXVlcmllc0FsbG93ZWQhPT1cImFueVwiP2IudnRwX3F1ZXJ5S2V5c3x8W106bnVsbCxlPWIudnRwX2NyZWF0ZVBlcm1pc3Npb25FcnJvcjtyZXR1cm57YXNzZXJ0OmZ1bmN0aW9uKGYsZyxrKXtpZihnKXtpZighbChnKSl0aHJvdyBlKGYse30sXCJVUkwgY29tcG9uZW50IG11c3QgYmUgYSBzdHJpbmcuXCIpO2lmKGMmJmMuaW5kZXhPZihnKTwwKXRocm93IGUoZix7fSxcIlByb2hpYml0ZWQgVVJMIGNvbXBvbmVudDogXCIrZyk7aWYoZz09PVwicXVlcnlcIiYmZCl7aWYoIWspdGhyb3cgZShmLHt9LFwiUHJvaGliaXRlZCBmcm9tIGdldHRpbmcgZW50aXJlIFVSTCBxdWVyeSB3aGVuIHF1ZXJ5IGtleXMgYXJlIHNwZWNpZmllZC5cIik7aWYoIWwoaykpdGhyb3cgZShmLHt9LFwiUXVlcnkga2V5IG11c3QgYmUgYSBzdHJpbmcuXCIpO2lmKGQuaW5kZXhPZihrKTwwKXRocm93IGUoZix7fSxcIlByb2hpYml0ZWQgcXVlcnkga2V5OiBcIitcbmspO319ZWxzZSBpZihjKXRocm93IGUoZix7fSxcIlByb2hpYml0ZWQgZnJvbSBnZXR0aW5nIGVudGlyZSBVUkwgd2hlbiBjb21wb25lbnRzIGFyZSBzcGVjaWZpZWQuXCIpO30sTjphfX0pfSgpO1xuXG5cblxuWi5zZWN1cml0eUdyb3Vwcy5nY3Q9W1wiZ29vZ2xlXCJdLGZ1bmN0aW9uKCl7ZnVuY3Rpb24gYShiKXtmb3IodmFyIGM9W10sZD0wO2Q8Yi5sZW5ndGg7ZCsrKXRyeXtjLnB1c2gobmV3IFJlZ0V4cChiW2RdKSl9Y2F0Y2goZSl7fXJldHVybiBjfShmdW5jdGlvbihiKXtaLl9fZ2N0PWI7Wi5fX2djdC5DPVwiZ2N0XCI7Wi5fX2djdC5pc1ZlbmRvclRlbXBsYXRlPSEwO1ouX19nY3QucHJpb3JpdHlPdmVycmlkZT0wO1ouX19nY3QuaXNJbmZyYXN0cnVjdHVyZT0hMTtaLl9fZ2N0LnJ1bkluU2lsb2VkTW9kZT0hMH0pKGZ1bmN0aW9uKGIpe3ZhciBjPXt9LGQ9Yi52dHBfc2Vzc2lvbkR1cmF0aW9uO2Q+MCYmKGNbVC5nLmpkXT1kKTtjW1QuZy5TZF09Yi52dHBfZXZlbnRTZXR0aW5ncztjW1QuZy5pZ109Yi52dHBfZHluYW1pY0V2ZW50U2V0dGluZ3M7Y1tULmcueWNdPWIudnRwX2dvb2dsZVNpZ25hbHM9PT0xO2NbVC5nLndnXT1iLnZ0cF9mb3JlaWduVGxkO2NbVC5nLnNnXT1iLnZ0cF9yZXN0cmljdERvbWFpbj09PVxuMTtjW1QuZy5uZl09Yi52dHBfaW50ZXJuYWxUcmFmZmljUmVzdWx0czt2YXIgZT1ULmcucWEsZj1iLnZ0cF9saW5rZXI7ZiYmZltULmcuV10mJihmW1QuZy5XXT1hKGZbVC5nLlddKSk7Y1tlXT1mO3ZhciBnPVQuZy5wZixrPWIudnRwX3JlZmVycmFsRXhjbHVzaW9uRGVmaW5pdGlvbjtrJiZrLmluY2x1ZGVfY29uZGl0aW9ucyYmKGsuaW5jbHVkZV9jb25kaXRpb25zPWEoay5pbmNsdWRlX2NvbmRpdGlvbnMpKTtjW2ddPWs7dmFyIG09TWooYi52dHBfdHJhY2tpbmdJZCk7cW0obSxjKTttSChtLGIudnRwX2d0bUV2ZW50SWQpO0coYi52dHBfZ3RtT25TdWNjZXNzKX0pfSgpO1xuXG5cblxuWi5zZWN1cml0eUdyb3Vwcy5nZXQ9W1wiZ29vZ2xlXCJdLFouX19nZXQ9ZnVuY3Rpb24oYSl7dmFyIGI9YS52dHBfc2V0dGluZ3MsYz1iLmV2ZW50UGFyYW1ldGVyc3x8e30sZD1TdHJpbmcoYS52dHBfZXZlbnROYW1lKSxlPXt9O2UuZXZlbnRJZD1hLnZ0cF9ndG1FdmVudElkO2UucHJpb3JpdHlJZD1hLnZ0cF9ndG1Qcmlvcml0eUlkO2EudnRwX2RlZmVycmFibGUmJihlLmRlZmVycmFibGU9ITApO3ZhciBmPUF4KFN0cmluZyhiLnN0cmVhbUlkKSxkLGMpO0h4KGYsZS5ldmVudElkLGUpO2EudnRwX2d0bU9uU3VjY2VzcygpfSxaLl9fZ2V0LkM9XCJnZXRcIixaLl9fZ2V0LmlzVmVuZG9yVGVtcGxhdGU9ITAsWi5fX2dldC5wcmlvcml0eU92ZXJyaWRlPTAsWi5fX2dldC5pc0luZnJhc3RydWN0dXJlPSExLFouX19nZXQucnVuSW5TaWxvZWRNb2RlPSExO1xuXG5cbnZhciBkSj17fTtkSi5kYXRhTGF5ZXI9S2k7ZEouY2FsbGJhY2s9ZnVuY3Rpb24oYSl7eGkuaGFzT3duUHJvcGVydHkoYSkmJm9iKHhpW2FdKSYmeGlbYV0oKTtkZWxldGUgeGlbYV19O2RKLmJvb3RzdHJhcD0wO2RKLl9zcHg9ITE7XG5mdW5jdGlvbiBlSigpe2lpW0dqKCldPWlpW0dqKCldfHxkSjtUaigpO1hqKCl8fHooWWooKSxmdW5jdGlvbihkLGUpe2t3KGQsZS50cmFuc3BvcnRVcmwsZS5jb250ZXh0KTtNKDkyKX0pO0ViKHlpLFouc2VjdXJpdHlHcm91cHMpO3ZhciBhPUtqKExqKCkpLGIsYz1hPT1udWxsP3ZvaWQgMDooYj1hLmNvbnRleHQpPT1udWxsP3ZvaWQgMDpiLnNvdXJjZTtjIT09MiYmYyE9PTQmJmMhPT0zfHxNKDE0Mik7cmY9SWZ9dmFyIGZKPSExO1xuKGZ1bmN0aW9uKGEpe2Z1bmN0aW9uIGIoKXtuPUUuZG9jdW1lbnRFbGVtZW50LmdldEF0dHJpYnV0ZShcImRhdGEtdGFnLWFzc2lzdGFudC1wcmVzZW50XCIpO0F5KG4pJiYobT1rLlppKX1mdW5jdGlvbiBjKCl7bSYmcmM/ZyhtKTphKCl9aWYoIURbXCJfX1RBR0dZX0lOU1RBTExFRFwiXSl7dmFyIGQ9ITE7aWYoRS5yZWZlcnJlcil7dmFyIGU9YWooRS5yZWZlcnJlcik7ZD1YaShlLFwiaG9zdFwiKT09PVwiY2N0Lmdvb2dsZVwifWlmKCFkKXt2YXIgZj1qbyhcImdvb2dUYWdneVJlZmVycmVyXCIpO2Q9ISghZi5sZW5ndGh8fCFmWzBdLmxlbmd0aCl9ZCYmKERbXCJfX1RBR0dZX0lOU1RBTExFRFwiXT0hMCx4YyhcImh0dHBzOi8vY2N0Lmdvb2dsZS90YWdneS9hZ2VudC5qc1wiKSl9dmFyIGc9ZnVuY3Rpb24odSl7dmFyIHY9XCJHVE1cIix3PVwiR1RNXCI7b2kmJih2PVwiT0dUXCIsdz1cIkdUQUdcIik7dmFyIHg9RFtcImdvb2dsZS50YWdtYW5hZ2VyLmRlYnVndWkyLnF1ZXVlXCJdO3h8fCh4PVxuW10sRFtcImdvb2dsZS50YWdtYW5hZ2VyLmRlYnVndWkyLnF1ZXVlXCJdPXgseGMoXCJodHRwczovL1wiK2hpLkRkK1wiL2RlYnVnL2Jvb3RzdHJhcD9pZD1cIitPZi5jdGlkK1wiJnNyYz1cIit3K1wiJmNvbmQ9XCIrdStcIiZndG09XCIrWW4oKSkpO3ZhciB5PXttZXNzYWdlVHlwZTpcIkNPTlRBSU5FUl9TVEFSVElOR1wiLGRhdGE6e3NjcmlwdFNvdXJjZTpyYyxjb250YWluZXJQcm9kdWN0OnYsZGVidWc6ITEsaWQ6T2YuY3RpZCx0YXJnZXRSZWY6e2N0aWQ6T2YuY3RpZCxpc0Rlc3RpbmF0aW9uOnpqLm1lfSxhbGlhc2VzOkNqKCksZGVzdGluYXRpb25zOkZqKCl9fTt5LmRhdGEucmVzdW1lPWZ1bmN0aW9uKCl7YSgpfTtoaS5xayYmKHkuZGF0YS5pbml0aWFsUHVibGlzaD0hMCk7eC5wdXNoKHkpfSxrPXtLazoxLGJqOjIscGo6MyxkaTo0LFppOjV9O2tbay5La109XCJHVE1fREVCVUdfTEVHQUNZX1BBUkFNXCI7a1trLmJqXT1cIkdUTV9ERUJVR19QQVJBTVwiO2tbay5wal09XCJSRUZFUlJFUlwiO2tbay5kaV09XCJDT09LSUVcIjtrW2suWmldPVwiRVhURU5TSU9OX1BBUkFNXCI7XG52YXIgbT12b2lkIDAsbj12b2lkIDAscD1WaShELmxvY2F0aW9uLFwicXVlcnlcIiwhMSx2b2lkIDAsXCJndG1fZGVidWdcIik7QXkocCkmJihtPWsuYmopO2lmKCFtJiZFLnJlZmVycmVyKXt2YXIgcT1haihFLnJlZmVycmVyKTtYaShxLFwiaG9zdFwiKT09PVwidGFnYXNzaXN0YW50Lmdvb2dsZS5jb21cIiYmKG09ay5wail9aWYoIW0pe3ZhciByPWpvKFwiX19UQUdfQVNTSVNUQU5UXCIpO3IubGVuZ3RoJiZyWzBdLmxlbmd0aCYmKG09ay5kaSl9bXx8YigpO2lmKCFtJiZCeShuKSl7dmFyIHQ9ITE7Q2MoRSxcIlRBRGVidWdTaWduYWxcIixmdW5jdGlvbigpe3R8fCh0PSEwLGIoKSxjKCkpfSwhMSk7RC5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dHx8KHQ9ITAsYigpLGMoKSl9LDIwMCl9ZWxzZSBjKCl9KShmdW5jdGlvbigpe3RyeXt2YXIgYTtpZighKGE9IVEoNTgpKSl7dmFyIGI7aWYoIShiPWZKKSl7dmFyIGM7YTp7Zm9yKHZhciBkPXhqKCkuaW5qZWN0ZWRGaXJzdFBhcnR5Q29udGFpbmVycyxlPW5hKEJqKCkpLFxuZj1lLm5leHQoKTshZi5kb25lO2Y9ZS5uZXh0KCkpaWYoZFtmLnZhbHVlXSl7Yz0hMDticmVhayBhfWM9ITF9Yj0hY31hPWJ9aWYoYSl7UmooKTtpZihRKDc0KSl7fWtiWzEyXT0hMDtzbigpO2ZsKCk7dmFyIGc9SWooKTtpZih4aigpLmNhbm9uaWNhbFtnXSl7dmFyIGs9aWkuem9uZXM7ayYmay51bnJlZ2lzdGVyQ2hpbGQoQmooKSk7V3YoKS5yZW1vdmVFeHRlcm5hbFJlc3RyaWN0aW9ucyhJaigpKTt9ZWxzZXtcbkh0KCk7YTp7fUJpLmo9XCIwXCI7QmkuTT1cIlwiO0JpLlBhPVwiYWRfc3RvcmFnZXxhbmFseXRpY3Nfc3RvcmFnZXxhZF91c2VyX2RhdGF8YWRfcGVyc29uYWxpemF0aW9uXCI7QmkuWj1cImFkX3N0b3JhZ2V8YW5hbHl0aWNzX3N0b3JhZ2V8YWRfdXNlcl9kYXRhXCI7QmkuUj1cIjQ5MzBcIjtcbkJpLlI9XCI0OTMwXCI7Z3coKTtmb3IodmFyIG09ZGF0YS5yZXNvdXJjZXx8e30sbj1tLm1hY3Jvc3x8W10scD0wO3A8bi5sZW5ndGg7cCsrKWdmLnB1c2gobltwXSk7Zm9yKHZhciBxPW0udGFnc3x8W10scj0wO3I8cS5sZW5ndGg7cisrKWtmLnB1c2gocVtyXSk7Zm9yKHZhciB0PW0ucHJlZGljYXRlc3x8W10sdT0wO3U8dC5sZW5ndGg7dSsrKWpmLnB1c2godFt1XSk7Zm9yKHZhciB2PW0ucnVsZXN8fFtdLHc9MDt3PHYubGVuZ3RoO3crKyl7Zm9yKHZhciB4PXZbd10seT17fSxBPTA7QTx4Lmxlbmd0aDtBKyspe3ZhciBCPXhbQV1bMF07eVtCXT1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbCh4W0FdLDEpO0IhPT1cImlmXCImJkIhPT1cInVubGVzc1wifHxxZih5W0JdKX1oZi5wdXNoKHkpfW1mPVo7bmY9Zno7S2Y9bmV3IFJmO1xudmFyIEM9ZGF0YS5zYW5kYm94ZWRfc2NyaXB0cyxIPWRhdGEuc2VjdXJpdHlfZ3JvdXBzO2E6e3ZhciBJPWRhdGEucnVudGltZXx8W10sRj1kYXRhLnJ1bnRpbWVfbGluZXM7cno9bmV3IEFlO0dJKCk7ZmY9cXooKTt2YXIgTz1yeixOPUZJKCksUz1uZXcgV2MoXCJyZXF1aXJlXCIsTik7Uy5LYSgpO08uai5qLnNldChcInJlcXVpcmVcIixTKTtmb3IodmFyIFY9W10sYWE9MDthYTxJLmxlbmd0aDthYSsrKXt2YXIgWD1JW2FhXTtpZighQXJyYXkuaXNBcnJheShYKXx8WC5sZW5ndGg8Myl7aWYoWC5sZW5ndGg9PT0wKWNvbnRpbnVlO2JyZWFrIGF9RiYmRlthYV0mJkZbYWFdLmxlbmd0aCYmQmYoWCxGW2FhXSk7dHJ5e3J6LmV4ZWN1dGUoWCksUSg4MykmJnFqJiZYWzBdPT09NTAmJlYucHVzaChYWzFdKX1jYXRjaChPbil7fX1RKDgzKSYmKHNmPVYpfWlmKEMmJkMubGVuZ3RoKWZvcih2YXIgUj1bXCJzYW5kYm94ZWRTY3JpcHRzXCJdLG1hPTA7bWE8Qy5sZW5ndGg7bWErKyl7dmFyIGxhPUNbbWFdLnJlcGxhY2UoL15fKi8sXG5cIlwiKTt5aVtsYV09Un1ISShIKTtlSigpO2lmKCFzaSlmb3IodmFyIGVhPVBrKCk/RWkoQmkuWik6RWkoQmkuUGEpLHdhPTA7d2E8VGsubGVuZ3RoO3dhKyspe3ZhciBPYT1Ua1t3YV0sRWE9T2EsVGE9ZWFbT2FdP1wiZ3JhbnRlZFwiOlwiZGVuaWVkXCI7b2soKS5pbXBsaWNpdChFYSxUYSl9enkoKTtwdz0hMTtxdz0wO2lmKEUucmVhZHlTdGF0ZT09PVwiaW50ZXJhY3RpdmVcIiYmIUUuY3JlYXRlRXZlbnRPYmplY3R8fEUucmVhZHlTdGF0ZT09PVwiY29tcGxldGVcIilzdygpO2Vsc2V7Q2MoRSxcIkRPTUNvbnRlbnRMb2FkZWRcIixzdyk7Q2MoRSxcInJlYWR5c3RhdGVjaGFuZ2VcIixzdyk7aWYoRS5jcmVhdGVFdmVudE9iamVjdCYmRS5kb2N1bWVudEVsZW1lbnQuZG9TY3JvbGwpe3ZhciAkYT0hMDt0cnl7JGE9IUQuZnJhbWVFbGVtZW50fWNhdGNoKE9uKXt9JGEmJnR3KCl9Q2MoRCxcImxvYWRcIixzdyl9ZXk9ITE7RS5yZWFkeVN0YXRlPT09XCJjb21wbGV0ZVwiP2d5KCk6Q2MoRCxcImxvYWRcIixneSk7cWomJihVbChnbSksRC5zZXRJbnRlcnZhbChmbSw4NjRFNSksVWwoaXopLFVsKFR3KSxVbChKdSksVWwoam0pLFVsKG56KSxVbChkeCksVWwodXQpLFEoODMpJiYoVWwoWXcpLFVsKFp3KSxVbCgkdykpKTtpZihyail7bmsoKTtBbCgpO293KCk7dmFyIHRkO3ZhciB1ZD1LaihMaigpKTtpZih1ZCl7Zm9yKDt1ZC5wYXJlbnQ7KXt2YXIgQng9S2oodWQucGFyZW50KTtpZighQngpYnJlYWs7dWQ9Qnh9dGQ9dWR9ZWxzZSB0ZD12b2lkIDA7dmFyIFBlPXRkO2lmKCFQZSlNKDE0NCk7ZWxzZSBpZihQZS5jYW5vbmljYWxDb250YWluZXJJZCl7dmFyIFBuO2E6e2lmKFBlLnNjcmlwdFNvdXJjZSl7dmFyIE5qO3RyeXt2YXIgQ3g7Tmo9KEN4PVBjKCkpPT1udWxsP3ZvaWQgMDpDeC5nZXRFbnRyaWVzQnlUeXBlKFwicmVzb3VyY2VcIil9Y2F0Y2goT24pe31pZihOail7Zm9yKHZhciBRbj1cbnt9LE9qPTA7T2o8TmoubGVuZ3RoOysrT2ope3ZhciBEeD1OaltPal0sUm49RHguaW5pdGlhdG9yVHlwZTtpZihSbj09PVwic2NyaXB0XCImJkR4Lm5hbWU9PT1QZS5zY3JpcHRTb3VyY2Upe1BuPXtLbTpPaixMbTpRbn07YnJlYWsgYX1RbltSbl09MSsoUW5bUm5dfHwwKX1NKDE0Nil9ZWxzZSBNKDE0NSl9UG49dm9pZCAwfXZhciBTbj1QbjtTbiYmKGZrKFwicnRnXCIsU3RyaW5nKFBlLmNhbm9uaWNhbENvbnRhaW5lcklkKSksZmsoXCJybG9cIixTdHJpbmcoU24uS20pKSxmayhcInNsb1wiLFN0cmluZyhTbi5MbS5zY3JpcHR8fFwiMFwiKSksZmsoXCJobG9cIixQZS5odG1sTG9hZE9yZGVyfHxcIi0xXCIpLGZrKFwibHN0XCIsU3RyaW5nKFBlLmxvYWRTY3JpcHRUeXBlfHxcIjBcIikpKX12YXIgVG47dmFyIFBqPUpqKCk7aWYoUGope3ZhciBFeDtUbj1Qai5jYW5vbmljYWxDb250YWluZXJJZHx8XCJfXCIrKFBqLnNjcmlwdENvbnRhaW5lcklkfHwoKEV4PVBqLmRlc3RpbmF0aW9ucyk9PW51bGw/dm9pZCAwOkV4WzBdKSl9ZWxzZSBUbj1cbnZvaWQgMDt2YXIgRng9VG47RngmJmZrKFwicGNpZFwiLEZ4KTtRKDMyKSYmKGZrKFwiYnRcIixTdHJpbmcoQmkuSD8yOnFpPzE6MCkpLGZrKFwiY3RcIixTdHJpbmcoQmkuSD8wOnFpPzE6V24oKT8yOjMpKSl9V3koKTtLaygxKTt6QSgpO3dpPUJiKCk7ZEouYm9vdHN0cmFwPXdpO2RKLl9zcHg9ITAseHkoKTtpZihRKDc0KSl7fX19fWNhdGNoKE9uKXtpZihLayg0KSxcbnFqKXt2YXIgZ0o9YW0oITAsITApO0FjKGdKKX19fSk7XG5cbn0pKClcblxuIn0sICJoZWFkZXJzU2l6ZSI6IDAsICJib2R5U2l6ZSI6IDEwMTE5MywgInJlZGlyZWN0VVJMIjogIiIsICJfdHJhbnNmZXJTaXplIjogMTAxMTkzfSwgImNhY2hlIjoge30sICJ0aW1pbmdzIjogeyJkbnMiOiAwLCAiY29ubmVjdCI6IDAsICJzc2wiOiAwLCAic2VuZCI6IDAsICJ3YWl0IjogMzkuNDExLCAicmVjZWl2ZSI6IDcxLjk5NH0sICJwYWdlcmVmIjogInBhZ2VAOGM5MzJmODMzN2Q5YWJiNGI5YWI5ODg5ZGVjNTFiOTkiLCAic2VydmVySVBBZGRyZXNzIjogIlsyYTAwOjE0NTA6NDAwMTo4MTM6OjIwMDhdIiwgIl9zZXJ2ZXJQb3J0IjogNDQzLCAiX3NlY3VyaXR5RGV0YWlscyI6IHsicHJvdG9jb2wiOiAiUVVJQyIsICJzdWJqZWN0TmFtZSI6ICIqLmdvb2dsZS1hbmFseXRpY3MuY29tIiwgImlzc3VlciI6ICJXUjIiLCAidmFsaWRGcm9tIjogMTcyMzQ0NDQyNCwgInZhbGlkVG8iOiAxNzMwNzAyMDIzfX0sIHsic3RhcnRlZERhdGVUaW1lIjogIjIwMjQtMDktMDVUMTE6MDc6MjEuNDM1WiIsICJ0aW1lIjogOTUuMzQxMDAwMDAwMDAwMDEsICJyZXF1ZXN0IjogeyJtZXRob2QiOiAiUE9TVCIsICJ1cmwiOiAiaHR0cHM6Ly9yZWdpb24xLmdvb2dsZS1hbmFseXRpY3MuY29tL2cvY29sbGVjdD92PTImdGlkPUctS1E1RURWQkoxTiZndG09NDVqZTQ5MzB2OTEwNzAwNzI4MHphMjAwJl9wPTE3MjU1MzQ0NDA5OTYmZ2NkPTEzbDNsM2wybDJsMSZucGE9MCZkbWFfY3BzPXN5cGhhbW8mZG1hPTEmdGFnX2V4cD0wJnVsPWVuLXVzJnNyPTEyODB4NzIwJmNpZD0xNzQ3NTc2NDg5LjE3MjU1MzQ0NDEmdWFhPXg2NCZ1YWI9NjQmdWFmdmw9Tm90JTI1M0JBJTI1M0RCcmFuZCUzQjI0LjAuMC4wJTdDQ2hyb21pdW0lM0IxMjguMC42NjEzLjE4JnVhbWI9MCZ1YW09JnVhcD1XaW5kb3dzJnVhcHY9MTAuMCZ1YXc9MCZhcmU9MSZmcm09MCZwc2NkbD1ub2FwaSZfZXU9QUJBSSZfcz0xJmRsPWh0dHBzJTNBJTJGJTJGcG9ydGFsLnN1cHBseWNoYWluY2FuYWRhLmNvbSUyRmVuJTJGcG9ydGFsbG9naW4mZHQ9U3VwcGx5JTIwQ2hhaW4lMjBDYW5hZGElMjBQb3J0YWwmc2lkPTE3MjU1MzQ0NDEmc2N0PTEmc2VnPTAmZW49cGFnZV92aWV3Jl9mdj0xJl9zcz0xJl9lZT0xJnRmZD0yNTc4IiwgImh0dHBWZXJzaW9uIjogIkhUVFAvMS4xIiwgImNvb2tpZXMiOiBbXSwgImhlYWRlcnMiOiBbeyJuYW1lIjogIjphdXRob3JpdHkiLCAidmFsdWUiOiAicmVnaW9uMS5nb29nbGUtYW5hbHl0aWNzLmNvbSJ9LCB7Im5hbWUiOiAiOm1ldGhvZCIsICJ2YWx1ZSI6ICJQT1NUIn0sIHsibmFtZSI6ICI6cGF0aCIsICJ2YWx1ZSI6ICIvZy9jb2xsZWN0P3Y9MiZ0aWQ9Ry1LUTVFRFZCSjFOJmd0bT00NWplNDkzMHY5MTA3MDA3MjgwemEyMDAmX3A9MTcyNTUzNDQ0MDk5NiZnY2Q9MTNsM2wzbDJsMmwxJm5wYT0wJmRtYV9jcHM9c3lwaGFtbyZkbWE9MSZ0YWdfZXhwPTAmdWw9ZW4tdXMmc3I9MTI4MHg3MjAmY2lkPTE3NDc1NzY0ODkuMTcyNTUzNDQ0MSZ1YWE9eDY0JnVhYj02NCZ1YWZ2bD1Ob3QlMjUzQkElMjUzREJyYW5kJTNCMjQuMC4wLjAlN0NDaHJvbWl1bSUzQjEyOC4wLjY2MTMuMTgmdWFtYj0wJnVhbT0mdWFwPVdpbmRvd3MmdWFwdj0xMC4wJnVhdz0wJmFyZT0xJmZybT0wJnBzY2RsPW5vYXBpJl9ldT1BQkFJJl9zPTEmZGw9aHR0cHMlM0ElMkYlMkZwb3J0YWwuc3VwcGx5Y2hhaW5jYW5hZGEuY29tJTJGZW4lMkZwb3J0YWxsb2dpbiZkdD1TdXBwbHklMjBDaGFpbiUyMENhbmFkYSUyMFBvcnRhbCZzaWQ9MTcyNTUzNDQ0MSZzY3Q9MSZzZWc9MCZlbj1wYWdlX3ZpZXcmX2Z2PTEmX3NzPTEmX2VlPTEmdGZkPTI1NzgifSwgeyJuYW1lIjogIjpzY2hlbWUiLCAidmFsdWUiOiAiaHR0cHMifSwgeyJuYW1lIjogImFjY2VwdCIsICJ2YWx1ZSI6ICIqLyoifSwgeyJuYW1lIjogImFjY2VwdC1lbmNvZGluZyIsICJ2YWx1ZSI6ICJnemlwLCBkZWZsYXRlLCBiciwgenN0ZCJ9LCB7Im5hbWUiOiAiYWNjZXB0LWxhbmd1YWdlIiwgInZhbHVlIjogImVuLVVTIn0sIHsibmFtZSI6ICJjb250ZW50LWxlbmd0aCIsICJ2YWx1ZSI6ICIwIn0sIHsibmFtZSI6ICJvcmlnaW4iLCAidmFsdWUiOiAiaHR0cHM6Ly9wb3J0YWwuc3VwcGx5Y2hhaW5jYW5hZGEuY29tIn0sIHsibmFtZSI6ICJwcmlvcml0eSIsICJ2YWx1ZSI6ICJ1PTEsIGkifSwgeyJuYW1lIjogInJlZmVyZXIiLCAidmFsdWUiOiAiaHR0cHM6Ly9wb3J0YWwuc3VwcGx5Y2hhaW5jYW5hZGEuY29tLyJ9LCB7Im5hbWUiOiAic2VjLWNoLXVhIiwgInZhbHVlIjogIlwiTm90O0E9QnJhbmRcIjt2PVwiMjRcIiwgXCJDaHJvbWl1bVwiO3Y9XCIxMjhcIiJ9LCB7Im5hbWUiOiAic2VjLWNoLXVhLW1vYmlsZSIsICJ2YWx1ZSI6ICI/MCJ9LCB7Im5hbWUiOiAic2VjLWNoLXVhLXBsYXRmb3JtIiwgInZhbHVlIjogIlwiV2luZG93c1wiIn0sIHsibmFtZSI6ICJzZWMtZmV0Y2gtZGVzdCIsICJ2YWx1ZSI6ICJlbXB0eSJ9LCB7Im5hbWUiOiAic2VjLWZldGNoLW1vZGUiLCAidmFsdWUiOiAibm8tY29ycyJ9LCB7Im5hbWUiOiAic2VjLWZldGNoLXNpdGUiLCAidmFsdWUiOiAiY3Jvc3Mtc2l0ZSJ9LCB7Im5hbWUiOiAidXNlci1hZ2VudCIsICJ2YWx1ZSI6ICJNb3ppbGxhLzUuMCAoV2luZG93cyBOVCAxMC4wOyBXaW42NDsgeDY0KSBBcHBsZVdlYktpdC81MzcuMzYgKEtIVE1MLCBsaWtlIEdlY2tvKSBDaHJvbWUvMTI4LjAuNjYxMy4xOCBTYWZhcmkvNTM3LjM2In1dLCAicXVlcnlTdHJpbmciOiBbeyJuYW1lIjogInYiLCAidmFsdWUiOiAiMiJ9LCB7Im5hbWUiOiAidGlkIiwgInZhbHVlIjogIkctS1E1RURWQkoxTiJ9LCB7Im5hbWUiOiAiZ3RtIiwgInZhbHVlIjogIjQ1amU0OTMwdjkxMDcwMDcyODB6YTIwMCJ9LCB7Im5hbWUiOiAiX3AiLCAidmFsdWUiOiAiMTcyNTUzNDQ0MDk5NiJ9LCB7Im5hbWUiOiAiZ2NkIiwgInZhbHVlIjogIjEzbDNsM2wybDJsMSJ9LCB7Im5hbWUiOiAibnBhIiwgInZhbHVlIjogIjAifSwgeyJuYW1lIjogImRtYV9jcHMiLCAidmFsdWUiOiAic3lwaGFtbyJ9LCB7Im5hbWUiOiAiZG1hIiwgInZhbHVlIjogIjEifSwgeyJuYW1lIjogInRhZ19leHAiLCAidmFsdWUiOiAiMCJ9LCB7Im5hbWUiOiAidWwiLCAidmFsdWUiOiAiZW4tdXMifSwgeyJuYW1lIjogInNyIiwgInZhbHVlIjogIjEyODB4NzIwIn0sIHsibmFtZSI6ICJjaWQiLCAidmFsdWUiOiAiMTc0NzU3NjQ4OS4xNzI1NTM0NDQxIn0sIHsibmFtZSI6ICJ1YWEiLCAidmFsdWUiOiAieDY0In0sIHsibmFtZSI6ICJ1YWIiLCAidmFsdWUiOiAiNjQifSwgeyJuYW1lIjogInVhZnZsIiwgInZhbHVlIjogIk5vdCUzQkElM0RCcmFuZDsyNC4wLjAuMHxDaHJvbWl1bTsxMjguMC42NjEzLjE4In0sIHsibmFtZSI6ICJ1YW1iIiwgInZhbHVlIjogIjAifSwgeyJuYW1lIjogInVhbSIsICJ2YWx1ZSI6ICIifSwgeyJuYW1lIjogInVhcCIsICJ2YWx1ZSI6ICJXaW5kb3dzIn0sIHsibmFtZSI6ICJ1YXB2IiwgInZhbHVlIjogIjEwLjAifSwgeyJuYW1lIjogInVhdyIsICJ2YWx1ZSI6ICIwIn0sIHsibmFtZSI6ICJhcmUiLCAidmFsdWUiOiAiMSJ9LCB7Im5hbWUiOiAiZnJtIiwgInZhbHVlIjogIjAifSwgeyJuYW1lIjogInBzY2RsIiwgInZhbHVlIjogIm5vYXBpIn0sIHsibmFtZSI6ICJfZXUiLCAidmFsdWUiOiAiQUJBSSJ9LCB7Im5hbWUiOiAiX3MiLCAidmFsdWUiOiAiMSJ9LCB7Im5hbWUiOiAiZGwiLCAidmFsdWUiOiAiaHR0cHM6Ly9wb3J0YWwuc3VwcGx5Y2hhaW5jYW5hZGEuY29tL2VuL3BvcnRhbGxvZ2luIn0sIHsibmFtZSI6ICJkdCIsICJ2YWx1ZSI6ICJTdXBwbHkgQ2hhaW4gQ2FuYWRhIFBvcnRhbCJ9LCB7Im5hbWUiOiAic2lkIiwgInZhbHVlIjogIjE3MjU1MzQ0NDEifSwgeyJuYW1lIjogInNjdCIsICJ2YWx1ZSI6ICIxIn0sIHsibmFtZSI6ICJzZWciLCAidmFsdWUiOiAiMCJ9LCB7Im5hbWUiOiAiZW4iLCAidmFsdWUiOiAicGFnZV92aWV3In0sIHsibmFtZSI6ICJfZnYiLCAidmFsdWUiOiAiMSJ9LCB7Im5hbWUiOiAiX3NzIiwgInZhbHVlIjogIjEifSwgeyJuYW1lIjogIl9lZSIsICJ2YWx1ZSI6ICIxIn0sIHsibmFtZSI6ICJ0ZmQiLCAidmFsdWUiOiAiMjU3OCJ9XSwgImhlYWRlcnNTaXplIjogLTEsICJib2R5U2l6ZSI6IDB9LCAicmVzcG9uc2UiOiB7InN0YXR1cyI6IDIwNCwgInN0YXR1c1RleHQiOiAiIiwgImh0dHBWZXJzaW9uIjogIkhUVFAvMi4wIiwgImNvb2tpZXMiOiBbXSwgImhlYWRlcnMiOiBbeyJuYW1lIjogImFjY2Vzcy1jb250cm9sLWFsbG93LWNyZWRlbnRpYWxzIiwgInZhbHVlIjogInRydWUifSwgeyJuYW1lIjogImFjY2Vzcy1jb250cm9sLWFsbG93LW9yaWdpbiIsICJ2YWx1ZSI6ICJodHRwczovL3BvcnRhbC5zdXBwbHljaGFpbmNhbmFkYS5jb20ifSwgeyJuYW1lIjogImFsdC1zdmMiLCAidmFsdWUiOiAiaDM9XCI6NDQzXCI7IG1hPTI1OTIwMDAsaDMtMjk9XCI6NDQzXCI7IG1hPTI1OTIwMDAifSwgeyJuYW1lIjogImNhY2hlLWNvbnRyb2wiLCAidmFsdWUiOiAibm8tY2FjaGUsIG5vLXN0b3JlLCBtdXN0LXJldmFsaWRhdGUifSwgeyJuYW1lIjogImNvbnRlbnQtbGVuZ3RoIiwgInZhbHVlIjogIjAifSwgeyJuYW1lIjogImNvbnRlbnQtdHlwZSIsICJ2YWx1ZSI6ICJ0ZXh0L3BsYWluIn0sIHsibmFtZSI6ICJjcm9zcy1vcmlnaW4tcmVzb3VyY2UtcG9saWN5IiwgInZhbHVlIjogImNyb3NzLW9yaWdpbiJ9LCB7Im5hbWUiOiAiZGF0ZSIsICJ2YWx1ZSI6ICJUaHUsIDA1IFNlcCAyMDI0IDExOjA3OjIxIEdNVCJ9LCB7Im5hbWUiOiAiZXhwaXJlcyIsICJ2YWx1ZSI6ICJGcmksIDAxIEphbiAxOTkwIDAwOjAwOjAwIEdNVCJ9LCB7Im5hbWUiOiAicHJhZ21hIiwgInZhbHVlIjogIm5vLWNhY2hlIn0sIHsibmFtZSI6ICJzZXJ2ZXIiLCAidmFsdWUiOiAiR29sZmUyIn1dLCAiY29udGVudCI6IHsic2l6ZSI6IC0xLCAibWltZVR5cGUiOiAidGV4dC9wbGFpbiJ9LCAiaGVhZGVyc1NpemUiOiAtMSwgImJvZHlTaXplIjogLTEsICJyZWRpcmVjdFVSTCI6ICIiLCAiX3RyYW5zZmVyU2l6ZSI6IC0xLCAiX2ZhaWx1cmVUZXh0IjogIm5ldDo6RVJSX0FCT1JURUQifSwgImNhY2hlIjoge30sICJ0aW1pbmdzIjogeyJkbnMiOiA0MS45ODUsICJjb25uZWN0IjogMjIuNDcxLCAic3NsIjogMTcuNjM3LCAic2VuZCI6IDAsICJ3YWl0IjogMTMuMjQ4LCAicmVjZWl2ZSI6IC0xfSwgInBhZ2VyZWYiOiAicGFnZUA4YzkzMmY4MzM3ZDlhYmI0YjlhYjk4ODlkZWM1MWI5OSJ9LCB7InN0YXJ0ZWREYXRlVGltZSI6ICIyMDI0LTA5LTA1VDExOjA3OjIxLjU4NFoiLCAidGltZSI6IDEzLjUzMywgInJlcXVlc3QiOiB7Im1ldGhvZCI6ICJQT1NUIiwgInVybCI6ICJodHRwczovL3JlZ2lvbjEuYW5hbHl0aWNzLmdvb2dsZS5jb20vZy9jb2xsZWN0P3Y9MiZ0aWQ9Ry1QS004RUZKTTNOJmd0bT00NWplNDkzMHY5MTM0NDQ2NTg2emEyMDAmX3A9MTcyNTUzNDQ0MDk5NiZfZ2F6PTEmZ2NkPTEzbDNsM2wybDNsMSZucGE9MSZkbWFfY3BzPXN5cGhhbW8mZG1hPTEmdGFnX2V4cD0wJnVsPWVuLXVzJnNyPTEyODB4NzIwJmNpZD0xNzQ3NTc2NDg5LjE3MjU1MzQ0NDEmX25nPTEmdWFhPXg2NCZ1YWI9NjQmdWFmdmw9Tm90JTI1M0JBJTI1M0RCcmFuZCUzQjI0LjAuMC4wJTdDQ2hyb21pdW0lM0IxMjguMC42NjEzLjE4JnVhbWI9MCZ1YW09JnVhcD1XaW5kb3dzJnVhcHY9MTAuMCZ1YXc9MCZhcmU9MSZmcm09MCZwc2NkbD1ub2FwaSZfZXU9QUJBSSZfcz0xJmRsPWh0dHBzJTNBJTJGJTJGcG9ydGFsLnN1cHBseWNoYWluY2FuYWRhLmNvbSUyRmVuJTJGcG9ydGFsbG9naW4mZHQ9U3VwcGx5JTIwQ2hhaW4lMjBDYW5hZGElMjBQb3J0YWwmc2lkPTE3MjU1MzQ0NDEmc2N0PTEmc2VnPTAmZW49cGFnZV92aWV3Jl9mdj0xJl9zcz0xJl9lZT0xJnRmZD0yNTc4IiwgImh0dHBWZXJzaW9uIjogIkhUVFAvMS4xIiwgImNvb2tpZXMiOiBbXSwgImhlYWRlcnMiOiBbeyJuYW1lIjogIjphdXRob3JpdHkiLCAidmFsdWUiOiAicmVnaW9uMS5hbmFseXRpY3MuZ29vZ2xlLmNvbSJ9LCB7Im5hbWUiOiAiOm1ldGhvZCIsICJ2YWx1ZSI6ICJQT1NUIn0sIHsibmFtZSI6ICI6cGF0aCIsICJ2YWx1ZSI6ICIvZy9jb2xsZWN0P3Y9MiZ0aWQ9Ry1QS004RUZKTTNOJmd0bT00NWplNDkzMHY5MTM0NDQ2NTg2emEyMDAmX3A9MTcyNTUzNDQ0MDk5NiZfZ2F6PTEmZ2NkPTEzbDNsM2wybDNsMSZucGE9MSZkbWFfY3BzPXN5cGhhbW8mZG1hPTEmdGFnX2V4cD0wJnVsPWVuLXVzJnNyPTEyODB4NzIwJmNpZD0xNzQ3NTc2NDg5LjE3MjU1MzQ0NDEmX25nPTEmdWFhPXg2NCZ1YWI9NjQmdWFmdmw9Tm90JTI1M0JBJTI1M0RCcmFuZCUzQjI0LjAuMC4wJTdDQ2hyb21pdW0lM0IxMjguMC42NjEzLjE4JnVhbWI9MCZ1YW09JnVhcD1XaW5kb3dzJnVhcHY9MTAuMCZ1YXc9MCZhcmU9MSZmcm09MCZwc2NkbD1ub2FwaSZfZXU9QUJBSSZfcz0xJmRsPWh0dHBzJTNBJTJGJTJGcG9ydGFsLnN1cHBseWNoYWluY2FuYWRhLmNvbSUyRmVuJTJGcG9ydGFsbG9naW4mZHQ9U3VwcGx5JTIwQ2hhaW4lMjBDYW5hZGElMjBQb3J0YWwmc2lkPTE3MjU1MzQ0NDEmc2N0PTEmc2VnPTAmZW49cGFnZV92aWV3Jl9mdj0xJl9zcz0xJl9lZT0xJnRmZD0yNTc4In0sIHsibmFtZSI6ICI6c2NoZW1lIiwgInZhbHVlIjogImh0dHBzIn0sIHsibmFtZSI6ICJhY2NlcHQiLCAidmFsdWUiOiAiKi8qIn0sIHsibmFtZSI6ICJhY2NlcHQtZW5jb2RpbmciLCAidmFsdWUiOiAiZ3ppcCwgZGVmbGF0ZSwgYnIsIHpzdGQifSwgeyJuYW1lIjogImFjY2VwdC1sYW5ndWFnZSIsICJ2YWx1ZSI6ICJlbi1VUyJ9LCB7Im5hbWUiOiAiY29udGVudC1sZW5ndGgiLCAidmFsdWUiOiAiMCJ9LCB7Im5hbWUiOiAib3JpZ2luIiwgInZhbHVlIjogImh0dHBzOi8vcG9ydGFsLnN1cHBseWNoYWluY2FuYWRhLmNvbSJ9LCB7Im5hbWUiOiAicHJpb3JpdHkiLCAidmFsdWUiOiAidT0xLCBpIn0sIHsibmFtZSI6ICJyZWZlcmVyIiwgInZhbHVlIjogImh0dHBzOi8vcG9ydGFsLnN1cHBseWNoYWluY2FuYWRhLmNvbS8ifSwgeyJuYW1lIjogInNlYy1jaC11YSIsICJ2YWx1ZSI6ICJcIk5vdDtBPUJyYW5kXCI7dj1cIjI0XCIsIFwiQ2hyb21pdW1cIjt2PVwiMTI4XCIifSwgeyJuYW1lIjogInNlYy1jaC11YS1tb2JpbGUiLCAidmFsdWUiOiAiPzAifSwgeyJuYW1lIjogInNlYy1jaC11YS1wbGF0Zm9ybSIsICJ2YWx1ZSI6ICJcIldpbmRvd3NcIiJ9LCB7Im5hbWUiOiAic2VjLWZldGNoLWRlc3QiLCAidmFsdWUiOiAiZW1wdHkifSwgeyJuYW1lIjogInNlYy1mZXRjaC1tb2RlIiwgInZhbHVlIjogIm5vLWNvcnMifSwgeyJuYW1lIjogInNlYy1mZXRjaC1zaXRlIiwgInZhbHVlIjogImNyb3NzLXNpdGUifSwgeyJuYW1lIjogInVzZXItYWdlbnQiLCAidmFsdWUiOiAiTW96aWxsYS81LjAgKFdpbmRvd3MgTlQgMTAuMDsgV2luNjQ7IHg2NCkgQXBwbGVXZWJLaXQvNTM3LjM2IChLSFRNTCwgbGlrZSBHZWNrbykgQ2hyb21lLzEyOC4wLjY2MTMuMTggU2FmYXJpLzUzNy4zNiJ9XSwgInF1ZXJ5U3RyaW5nIjogW3sibmFtZSI6ICJ2IiwgInZhbHVlIjogIjIifSwgeyJuYW1lIjogInRpZCIsICJ2YWx1ZSI6ICJHLVBLTThFRkpNM04ifSwgeyJuYW1lIjogImd0bSIsICJ2YWx1ZSI6ICI0NWplNDkzMHY5MTM0NDQ2NTg2emEyMDAifSwgeyJuYW1lIjogIl9wIiwgInZhbHVlIjogIjE3MjU1MzQ0NDA5OTYifSwgeyJuYW1lIjogIl9nYXoiLCAidmFsdWUiOiAiMSJ9LCB7Im5hbWUiOiAiZ2NkIiwgInZhbHVlIjogIjEzbDNsM2wybDNsMSJ9LCB7Im5hbWUiOiAibnBhIiwgInZhbHVlIjogIjEifSwgeyJuYW1lIjogImRtYV9jcHMiLCAidmFsdWUiOiAic3lwaGFtbyJ9LCB7Im5hbWUiOiAiZG1hIiwgInZhbHVlIjogIjEifSwgeyJuYW1lIjogInRhZ19leHAiLCAidmFsdWUiOiAiMCJ9LCB7Im5hbWUiOiAidWwiLCAidmFsdWUiOiAiZW4tdXMifSwgeyJuYW1lIjogInNyIiwgInZhbHVlIjogIjEyODB4NzIwIn0sIHsibmFtZSI6ICJjaWQiLCAidmFsdWUiOiAiMTc0NzU3NjQ4OS4xNzI1NTM0NDQxIn0sIHsibmFtZSI6ICJfbmciLCAidmFsdWUiOiAiMSJ9LCB7Im5hbWUiOiAidWFhIiwgInZhbHVlIjogIng2NCJ9LCB7Im5hbWUiOiAidWFiIiwgInZhbHVlIjogIjY0In0sIHsibmFtZSI6ICJ1YWZ2bCIsICJ2YWx1ZSI6ICJOb3QlM0JBJTNEQnJhbmQ7MjQuMC4wLjB8Q2hyb21pdW07MTI4LjAuNjYxMy4xOCJ9LCB7Im5hbWUiOiAidWFtYiIsICJ2YWx1ZSI6ICIwIn0sIHsibmFtZSI6ICJ1YW0iLCAidmFsdWUiOiAiIn0sIHsibmFtZSI6ICJ1YXAiLCAidmFsdWUiOiAiV2luZG93cyJ9LCB7Im5hbWUiOiAidWFwdiIsICJ2YWx1ZSI6ICIxMC4wIn0sIHsibmFtZSI6ICJ1YXciLCAidmFsdWUiOiAiMCJ9LCB7Im5hbWUiOiAiYXJlIiwgInZhbHVlIjogIjEifSwgeyJuYW1lIjogImZybSIsICJ2YWx1ZSI6ICIwIn0sIHsibmFtZSI6ICJwc2NkbCIsICJ2YWx1ZSI6ICJub2FwaSJ9LCB7Im5hbWUiOiAiX2V1IiwgInZhbHVlIjogIkFCQUkifSwgeyJuYW1lIjogIl9zIiwgInZhbHVlIjogIjEifSwgeyJuYW1lIjogImRsIiwgInZhbHVlIjogImh0dHBzOi8vcG9ydGFsLnN1cHBseWNoYWluY2FuYWRhLmNvbS9lbi9wb3J0YWxsb2dpbiJ9LCB7Im5hbWUiOiAiZHQiLCAidmFsdWUiOiAiU3VwcGx5IENoYWluIENhbmFkYSBQb3J0YWwifSwgeyJuYW1lIjogInNpZCIsICJ2YWx1ZSI6ICIxNzI1NTM0NDQxIn0sIHsibmFtZSI6ICJzY3QiLCAidmFsdWUiOiAiMSJ9LCB7Im5hbWUiOiAic2VnIiwgInZhbHVlIjogIjAifSwgeyJuYW1lIjogImVuIiwgInZhbHVlIjogInBhZ2VfdmlldyJ9LCB7Im5hbWUiOiAiX2Z2IiwgInZhbHVlIjogIjEifSwgeyJuYW1lIjogIl9zcyIsICJ2YWx1ZSI6ICIxIn0sIHsibmFtZSI6ICJfZWUiLCAidmFsdWUiOiAiMSJ9LCB7Im5hbWUiOiAidGZkIiwgInZhbHVlIjogIjI1NzgifV0sICJoZWFkZXJzU2l6ZSI6IC0xLCAiYm9keVNpemUiOiAwfSwgInJlc3BvbnNlIjogeyJzdGF0dXMiOiAyMDQsICJzdGF0dXNUZXh0IjogIiIsICJodHRwVmVyc2lvbiI6ICJIVFRQLzIuMCIsICJjb29raWVzIjogW10sICJoZWFkZXJzIjogW3sibmFtZSI6ICJhY2Nlc3MtY29udHJvbC1hbGxvdy1jcmVkZW50aWFscyIsICJ2YWx1ZSI6ICJ0cnVlIn0sIHsibmFtZSI6ICJhY2Nlc3MtY29udHJvbC1hbGxvdy1vcmlnaW4iLCAidmFsdWUiOiAiaHR0cHM6Ly9wb3J0YWwuc3VwcGx5Y2hhaW5jYW5hZGEuY29tIn0sIHsibmFtZSI6ICJhbHQtc3ZjIiwgInZhbHVlIjogImgzPVwiOjQ0M1wiOyBtYT0yNTkyMDAwLGgzLTI5PVwiOjQ0M1wiOyBtYT0yNTkyMDAwIn0sIHsibmFtZSI6ICJjYWNoZS1jb250cm9sIiwgInZhbHVlIjogIm5vLWNhY2hlLCBuby1zdG9yZSwgbXVzdC1yZXZhbGlkYXRlIn0sIHsibmFtZSI6ICJjb250ZW50LWxlbmd0aCIsICJ2YWx1ZSI6ICIwIn0sIHsibmFtZSI6ICJjb250ZW50LXR5cGUiLCAidmFsdWUiOiAidGV4dC9wbGFpbiJ9LCB7Im5hbWUiOiAiY3Jvc3Mtb3JpZ2luLXJlc291cmNlLXBvbGljeSIsICJ2YWx1ZSI6ICJjcm9zcy1vcmlnaW4ifSwgeyJuYW1lIjogImRhdGUiLCAidmFsdWUiOiAiVGh1LCAwNSBTZXAgMjAyNCAxMTowNzoyMSBHTVQifSwgeyJuYW1lIjogImV4cGlyZXMiLCAidmFsdWUiOiAiRnJpLCAwMSBKYW4gMTk5MCAwMDowMDowMCBHTVQifSwgeyJuYW1lIjogInByYWdtYSIsICJ2YWx1ZSI6ICJuby1jYWNoZSJ9LCB7Im5hbWUiOiAic2VydmVyIiwgInZhbHVlIjogIkdvbGZlMiJ9XSwgImNvbnRlbnQiOiB7InNpemUiOiAtMSwgIm1pbWVUeXBlIjogInRleHQvcGxhaW4ifSwgImhlYWRlcnNTaXplIjogLTEsICJib2R5U2l6ZSI6IC0xLCAicmVkaXJlY3RVUkwiOiAiIiwgIl90cmFuc2ZlclNpemUiOiAtMSwgIl9mYWlsdXJlVGV4dCI6ICJuZXQ6OkVSUl9BQk9SVEVEIn0sICJjYWNoZSI6IHt9LCAidGltaW5ncyI6IHsiZG5zIjogLTEsICJjb25uZWN0IjogLTEsICJzc2wiOiAtMSwgInNlbmQiOiAwLCAid2FpdCI6IDEzLjUzMywgInJlY2VpdmUiOiAtMX0sICJwYWdlcmVmIjogInBhZ2VAOGM5MzJmODMzN2Q5YWJiNGI5YWI5ODg5ZGVjNTFiOTkifSwgeyJzdGFydGVkRGF0ZVRpbWUiOiAiMjAyNC0wOS0wNVQxMTowNzoyMS41ODVaIiwgInRpbWUiOiAyMC4yMzcsICJyZXF1ZXN0IjogeyJtZXRob2QiOiAiUE9TVCIsICJ1cmwiOiAiaHR0cHM6Ly9zdGF0cy5nLmRvdWJsZWNsaWNrLm5ldC9nL2NvbGxlY3Q/dj0yJl9uZz0xJnRpZD1HLVBLTThFRkpNM04mY2lkPTE3NDc1NzY0ODkuMTcyNTUzNDQ0MSZndG09NDVqZTQ5MzB2OTEzNDQ0NjU4NnphMjAwJmFpcD0xJmRtYT0xJmRtYV9jcHM9c3lwaGFtbyZnY2Q9MTNsM2wzbDJsM2wxJm5wYT0xJmZybT0wJnRhZ19leHA9MCIsICJodHRwVmVyc2lvbiI6ICJIVFRQLzIuMCIsICJjb29raWVzIjogW10sICJoZWFkZXJzIjogW3sibmFtZSI6ICI6YXV0aG9yaXR5IiwgInZhbHVlIjogInN0YXRzLmcuZG91YmxlY2xpY2submV0In0sIHsibmFtZSI6ICI6bWV0aG9kIiwgInZhbHVlIjogIlBPU1QifSwgeyJuYW1lIjogIjpwYXRoIiwgInZhbHVlIjogIi9nL2NvbGxlY3Q/dj0yJl9uZz0xJnRpZD1HLVBLTThFRkpNM04mY2lkPTE3NDc1NzY0ODkuMTcyNTUzNDQ0MSZndG09NDVqZTQ5MzB2OTEzNDQ0NjU4NnphMjAwJmFpcD0xJmRtYT0xJmRtYV9jcHM9c3lwaGFtbyZnY2Q9MTNsM2wzbDJsM2wxJm5wYT0xJmZybT0wJnRhZ19leHA9MCJ9LCB7Im5hbWUiOiAiOnNjaGVtZSIsICJ2YWx1ZSI6ICJodHRwcyJ9LCB7Im5hbWUiOiAiYWNjZXB0IiwgInZhbHVlIjogIiovKiJ9LCB7Im5hbWUiOiAiYWNjZXB0LWVuY29kaW5nIiwgInZhbHVlIjogImd6aXAsIGRlZmxhdGUsIGJyLCB6c3RkIn0sIHsibmFtZSI6ICJhY2NlcHQtbGFuZ3VhZ2UiLCAidmFsdWUiOiAiZW4tVVMifSwgeyJuYW1lIjogImNvbnRlbnQtbGVuZ3RoIiwgInZhbHVlIjogIjAifSwgeyJuYW1lIjogIm9yaWdpbiIsICJ2YWx1ZSI6ICJodHRwczovL3BvcnRhbC5zdXBwbHljaGFpbmNhbmFkYS5jb20ifSwgeyJuYW1lIjogInByaW9yaXR5IiwgInZhbHVlIjogInU9NCwgaSJ9LCB7Im5hbWUiOiAicmVmZXJlciIsICJ2YWx1ZSI6ICJodHRwczovL3BvcnRhbC5zdXBwbHljaGFpbmNhbmFkYS5jb20vIn0sIHsibmFtZSI6ICJzZWMtY2gtdWEiLCAidmFsdWUiOiAiXCJOb3Q7QT1CcmFuZFwiO3Y9XCIyNFwiLCBcIkNocm9taXVtXCI7dj1cIjEyOFwiIn0sIHsibmFtZSI6ICJzZWMtY2gtdWEtbW9iaWxlIiwgInZhbHVlIjogIj8wIn0sIHsibmFtZSI6ICJzZWMtY2gtdWEtcGxhdGZvcm0iLCAidmFsdWUiOiAiXCJXaW5kb3dzXCIifSwgeyJuYW1lIjogInNlYy1mZXRjaC1kZXN0IiwgInZhbHVlIjogImVtcHR5In0sIHsibmFtZSI6ICJzZWMtZmV0Y2gtbW9kZSIsICJ2YWx1ZSI6ICJuby1jb3JzIn0sIHsibmFtZSI6ICJzZWMtZmV0Y2gtc2l0ZSIsICJ2YWx1ZSI6ICJjcm9zcy1zaXRlIn0sIHsibmFtZSI6ICJ1c2VyLWFnZW50IiwgInZhbHVlIjogIk1vemlsbGEvNS4wIChXaW5kb3dzIE5UIDEwLjA7IFdpbjY0OyB4NjQpIEFwcGxlV2ViS2l0LzUzNy4zNiAoS0hUTUwsIGxpa2UgR2Vja28pIENocm9tZS8xMjguMC42NjEzLjE4IFNhZmFyaS81MzcuMzYifV0sICJxdWVyeVN0cmluZyI6IFt7Im5hbWUiOiAidiIsICJ2YWx1ZSI6ICIyIn0sIHsibmFtZSI6ICJfbmciLCAidmFsdWUiOiAiMSJ9LCB7Im5hbWUiOiAidGlkIiwgInZhbHVlIjogIkctUEtNOEVGSk0zTiJ9LCB7Im5hbWUiOiAiY2lkIiwgInZhbHVlIjogIjE3NDc1NzY0ODkuMTcyNTUzNDQ0MSJ9LCB7Im5hbWUiOiAiZ3RtIiwgInZhbHVlIjogIjQ1amU0OTMwdjkxMzQ0NDY1ODZ6YTIwMCJ9LCB7Im5hbWUiOiAiYWlwIiwgInZhbHVlIjogIjEifSwgeyJuYW1lIjogImRtYSIsICJ2YWx1ZSI6ICIxIn0sIHsibmFtZSI6ICJkbWFfY3BzIiwgInZhbHVlIjogInN5cGhhbW8ifSwgeyJuYW1lIjogImdjZCIsICJ2YWx1ZSI6ICIxM2wzbDNsMmwzbDEifSwgeyJuYW1lIjogIm5wYSIsICJ2YWx1ZSI6ICIxIn0sIHsibmFtZSI6ICJmcm0iLCAidmFsdWUiOiAiMCJ9LCB7Im5hbWUiOiAidGFnX2V4cCIsICJ2YWx1ZSI6ICIwIn1dLCAiaGVhZGVyc1NpemUiOiA3ODMsICJib2R5U2l6ZSI6IDB9LCAicmVzcG9uc2UiOiB7InN0YXR1cyI6IDIwNCwgInN0YXR1c1RleHQiOiAiIiwgImh0dHBWZXJzaW9uIjogIkhUVFAvMi4wIiwgImNvb2tpZXMiOiBbXSwgImhlYWRlcnMiOiBbeyJuYW1lIjogImFjY2Vzcy1jb250cm9sLWFsbG93LWNyZWRlbnRpYWxzIiwgInZhbHVlIjogInRydWUifSwgeyJuYW1lIjogImFjY2Vzcy1jb250cm9sLWFsbG93LW9yaWdpbiIsICJ2YWx1ZSI6ICJodHRwczovL3BvcnRhbC5zdXBwbHljaGFpbmNhbmFkYS5jb20ifSwgeyJuYW1lIjogImFsdC1zdmMiLCAidmFsdWUiOiAiaDM9XCI6NDQzXCI7IG1hPTI1OTIwMDAsaDMtMjk9XCI6NDQzXCI7IG1hPTI1OTIwMDAifSwgeyJuYW1lIjogImNhY2hlLWNvbnRyb2wiLCAidmFsdWUiOiAibm8tY2FjaGUsIG5vLXN0b3JlLCBtdXN0LXJldmFsaWRhdGUifSwgeyJuYW1lIjogImNvbnRlbnQtbGVuZ3RoIiwgInZhbHVlIjogIjAifSwgeyJuYW1lIjogImNvbnRlbnQtdHlwZSIsICJ2YWx1ZSI6ICJ0ZXh0L3BsYWluIn0sIHsibmFtZSI6ICJjcm9zcy1vcmlnaW4tcmVzb3VyY2UtcG9saWN5IiwgInZhbHVlIjogImNyb3NzLW9yaWdpbiJ9LCB7Im5hbWUiOiAiZGF0ZSIsICJ2YWx1ZSI6ICJUaHUsIDA1IFNlcCAyMDI0IDExOjA3OjIxIEdNVCJ9LCB7Im5hbWUiOiAiZXhwaXJlcyIsICJ2YWx1ZSI6ICJGcmksIDAxIEphbiAxOTkwIDAwOjAwOjAwIEdNVCJ9LCB7Im5hbWUiOiAicHJhZ21hIiwgInZhbHVlIjogIm5vLWNhY2hlIn0sIHsibmFtZSI6ICJzZXJ2ZXIiLCAidmFsdWUiOiAiR29sZmUyIn1dLCAiY29udGVudCI6IHsic2l6ZSI6IDAsICJtaW1lVHlwZSI6ICJ0ZXh0L3BsYWluIiwgImNvbXByZXNzaW9uIjogMCwgInRleHQiOiAiIn0sICJoZWFkZXJzU2l6ZSI6IDAsICJib2R5U2l6ZSI6IDU2LCAicmVkaXJlY3RVUkwiOiAiIiwgIl90cmFuc2ZlclNpemUiOiA1Nn0sICJjYWNoZSI6IHt9LCAidGltaW5ncyI6IHsiZG5zIjogLTEsICJjb25uZWN0IjogLTEsICJzc2wiOiAtMSwgInNlbmQiOiAwLCAid2FpdCI6IDE4LjA5LCAicmVjZWl2ZSI6IDIuMTQ3fSwgInBhZ2VyZWYiOiAicGFnZUA4YzkzMmY4MzM3ZDlhYmI0YjlhYjk4ODlkZWM1MWI5OSIsICJzZXJ2ZXJJUEFkZHJlc3MiOiAiWzJhMDA6MTQ1MDo0MDBjOmMxZDo6OWJdIiwgIl9zZXJ2ZXJQb3J0IjogNDQzLCAiX3NlY3VyaXR5RGV0YWlscyI6IHsicHJvdG9jb2wiOiAiVExTIDEuMyIsICJzdWJqZWN0TmFtZSI6ICIqLmcuZG91YmxlY2xpY2submV0IiwgImlzc3VlciI6ICJXUjIiLCAidmFsaWRGcm9tIjogMTcyMjgzOTgzNiwgInZhbGlkVG8iOiAxNzMwMDk3NDM1fX0sIHsic3RhcnRlZERhdGVUaW1lIjogIjIwMjQtMDktMDVUMTE6MDc6MjEuNTg1WiIsICJ0aW1lIjogMTMzLjkyNDk5OTk5OTk5OTk4LCAicmVxdWVzdCI6IHsibWV0aG9kIjogIkdFVCIsICJ1cmwiOiAiaHR0cHM6Ly93d3cuZ29vZ2xlLmx1L2Fkcy9nYS1hdWRpZW5jZXM/dj0xJnQ9c3Imc2xmX3JkPTEmX3I9NCZfbmc9MSZ0aWQ9Ry1QS004RUZKTTNOJmNpZD0xNzQ3NTc2NDg5LjE3MjU1MzQ0NDEmZ3RtPTQ1amU0OTMwdjkxMzQ0NDY1ODZ6YTIwMCZhaXA9MSZkbWE9MSZkbWFfY3BzPXN5cGhhbW8mZ2NkPTEzbDNsM2wybDNsMSZucGE9MSZmcm09MCZ0YWdfZXhwPTAmdGFnX2V4cD0wJno9Mzg4NjkzOTAxIiwgImh0dHBWZXJzaW9uIjogIkhUVFAvMi4wIiwgImNvb2tpZXMiOiBbXSwgImhlYWRlcnMiOiBbeyJuYW1lIjogIjphdXRob3JpdHkiLCAidmFsdWUiOiAid3d3Lmdvb2dsZS5sdSJ9LCB7Im5hbWUiOiAiOm1ldGhvZCIsICJ2YWx1ZSI6ICJHRVQifSwgeyJuYW1lIjogIjpwYXRoIiwgInZhbHVlIjogIi9hZHMvZ2EtYXVkaWVuY2VzP3Y9MSZ0PXNyJnNsZl9yZD0xJl9yPTQmX25nPTEmdGlkPUctUEtNOEVGSk0zTiZjaWQ9MTc0NzU3NjQ4OS4xNzI1NTM0NDQxJmd0bT00NWplNDkzMHY5MTM0NDQ2NTg2emEyMDAmYWlwPTEmZG1hPTEmZG1hX2Nwcz1zeXBoYW1vJmdjZD0xM2wzbDNsMmwzbDEmbnBhPTEmZnJtPTAmdGFnX2V4cD0wJnRhZ19leHA9MCZ6PTM4ODY5MzkwMSJ9LCB7Im5hbWUiOiAiOnNjaGVtZSIsICJ2YWx1ZSI6ICJodHRwcyJ9LCB7Im5hbWUiOiAiYWNjZXB0IiwgInZhbHVlIjogImltYWdlL2F2aWYsaW1hZ2Uvd2VicCxpbWFnZS9hcG5nLGltYWdlL3N2Zyt4bWwsaW1hZ2UvKiwqLyo7cT0wLjgifSwgeyJuYW1lIjogImFjY2VwdC1lbmNvZGluZyIsICJ2YWx1ZSI6ICJnemlwLCBkZWZsYXRlLCBiciwgenN0ZCJ9LCB7Im5hbWUiOiAiYWNjZXB0LWxhbmd1YWdlIiwgInZhbHVlIjogImVuLVVTIn0sIHsibmFtZSI6ICJwcmlvcml0eSIsICJ2YWx1ZSI6ICJpIn0sIHsibmFtZSI6ICJyZWZlcmVyIiwgInZhbHVlIjogImh0dHBzOi8vcG9ydGFsLnN1cHBseWNoYWluY2FuYWRhLmNvbS8ifSwgeyJuYW1lIjogInNlYy1jaC11YSIsICJ2YWx1ZSI6ICJcIk5vdDtBPUJyYW5kXCI7dj1cIjI0XCIsIFwiQ2hyb21pdW1cIjt2PVwiMTI4XCIifSwgeyJuYW1lIjogInNlYy1jaC11YS1tb2JpbGUiLCAidmFsdWUiOiAiPzAifSwgeyJuYW1lIjogInNlYy1jaC11YS1wbGF0Zm9ybSIsICJ2YWx1ZSI6ICJcIldpbmRvd3NcIiJ9LCB7Im5hbWUiOiAic2VjLWZldGNoLWRlc3QiLCAidmFsdWUiOiAiaW1hZ2UifSwgeyJuYW1lIjogInNlYy1mZXRjaC1tb2RlIiwgInZhbHVlIjogIm5vLWNvcnMifSwgeyJuYW1lIjogInNlYy1mZXRjaC1zaXRlIiwgInZhbHVlIjogImNyb3NzLXNpdGUifSwgeyJuYW1lIjogInVzZXItYWdlbnQiLCAidmFsdWUiOiAiTW96aWxsYS81LjAgKFdpbmRvd3MgTlQgMTAuMDsgV2luNjQ7IHg2NCkgQXBwbGVXZWJLaXQvNTM3LjM2IChLSFRNTCwgbGlrZSBHZWNrbykgQ2hyb21lLzEyOC4wLjY2MTMuMTggU2FmYXJpLzUzNy4zNiJ9XSwgInF1ZXJ5U3RyaW5nIjogW3sibmFtZSI6ICJ2IiwgInZhbHVlIjogIjEifSwgeyJuYW1lIjogInQiLCAidmFsdWUiOiAic3IifSwgeyJuYW1lIjogInNsZl9yZCIsICJ2YWx1ZSI6ICIxIn0sIHsibmFtZSI6ICJfciIsICJ2YWx1ZSI6ICI0In0sIHsibmFtZSI6ICJfbmciLCAidmFsdWUiOiAiMSJ9LCB7Im5hbWUiOiAidGlkIiwgInZhbHVlIjogIkctUEtNOEVGSk0zTiJ9LCB7Im5hbWUiOiAiY2lkIiwgInZhbHVlIjogIjE3NDc1NzY0ODkuMTcyNTUzNDQ0MSJ9LCB7Im5hbWUiOiAiZ3RtIiwgInZhbHVlIjogIjQ1amU0OTMwdjkxMzQ0NDY1ODZ6YTIwMCJ9LCB7Im5hbWUiOiAiYWlwIiwgInZhbHVlIjogIjEifSwgeyJuYW1lIjogImRtYSIsICJ2YWx1ZSI6ICIxIn0sIHsibmFtZSI6ICJkbWFfY3BzIiwgInZhbHVlIjogInN5cGhhbW8ifSwgeyJuYW1lIjogImdjZCIsICJ2YWx1ZSI6ICIxM2wzbDNsMmwzbDEifSwgeyJuYW1lIjogIm5wYSIsICJ2YWx1ZSI6ICIxIn0sIHsibmFtZSI6ICJmcm0iLCAidmFsdWUiOiAiMCJ9LCB7Im5hbWUiOiAidGFnX2V4cCIsICJ2YWx1ZSI6ICIwIn0sIHsibmFtZSI6ICJ0YWdfZXhwIiwgInZhbHVlIjogIjAifSwgeyJuYW1lIjogInoiLCAidmFsdWUiOiAiMzg4NjkzOTAxIn1dLCAiaGVhZGVyc1NpemUiOiA4MTcsICJib2R5U2l6ZSI6IDB9LCAicmVzcG9uc2UiOiB7InN0YXR1cyI6IDIwMCwgInN0YXR1c1RleHQiOiAiIiwgImh0dHBWZXJzaW9uIjogIkhUVFAvMi4wIiwgImNvb2tpZXMiOiBbXSwgImhlYWRlcnMiOiBbeyJuYW1lIjogImFsdC1zdmMiLCAidmFsdWUiOiAiaDM9XCI6NDQzXCI7IG1hPTI1OTIwMDAsaDMtMjk9XCI6NDQzXCI7IG1hPTI1OTIwMDAifSwgeyJuYW1lIjogImNhY2hlLWNvbnRyb2wiLCAidmFsdWUiOiAibm8tY2FjaGUsIG5vLXN0b3JlLCBtdXN0LXJldmFsaWRhdGUifSwgeyJuYW1lIjogImNvbnRlbnQtbGVuZ3RoIiwgInZhbHVlIjogIjQyIn0sIHsibmFtZSI6ICJjb250ZW50LXR5cGUiLCAidmFsdWUiOiAiaW1hZ2UvZ2lmIn0sIHsibmFtZSI6ICJjcm9zcy1vcmlnaW4tcmVzb3VyY2UtcG9saWN5IiwgInZhbHVlIjogImNyb3NzLW9yaWdpbiJ9LCB7Im5hbWUiOiAiZGF0ZSIsICJ2YWx1ZSI6ICJUaHUsIDA1IFNlcCAyMDI0IDExOjA3OjIxIEdNVCJ9LCB7Im5hbWUiOiAiZXhwaXJlcyIsICJ2YWx1ZSI6ICJGcmksIDAxIEphbiAxOTkwIDAwOjAwOjAwIEdNVCJ9LCB7Im5hbWUiOiAicDNwIiwgInZhbHVlIjogInBvbGljeXJlZj1cImh0dHBzOi8vd3d3Lmdvb2dsZWFkc2VydmljZXMuY29tL3BhZ2VhZC9wM3AueG1sXCIsIENQPVwiTk9JIERFViBQU0EgUFNEIElWQSBJVkQgT1RQIE9VUiBPVFIgSU5EIE9UQ1wiIn0sIHsibmFtZSI6ICJwcmFnbWEiLCAidmFsdWUiOiAibm8tY2FjaGUifSwgeyJuYW1lIjogInNlcnZlciIsICJ2YWx1ZSI6ICJjYWZlIn0sIHsibmFtZSI6ICJ0aW1pbmctYWxsb3ctb3JpZ2luIiwgInZhbHVlIjogIioifSwgeyJuYW1lIjogIngtY29udGVudC10eXBlLW9wdGlvbnMiLCAidmFsdWUiOiAibm9zbmlmZiJ9LCB7Im5hbWUiOiAieC14c3MtcHJvdGVjdGlvbiIsICJ2YWx1ZSI6ICIwIn1dLCAiY29udGVudCI6IHsic2l6ZSI6IDQyLCAibWltZVR5cGUiOiAiaW1hZ2UvZ2lmIiwgImNvbXByZXNzaW9uIjogMCwgInRleHQiOiAiUjBsR09EbGhBUUFCQUlBQUFBQUFBUC8vL3lINUJBRUFBQUFBTEFBQUFBQUJBQUVBQUFJQlJBQTciLCAiZW5jb2RpbmciOiAiYmFzZTY0In0sICJoZWFkZXJzU2l6ZSI6IDAsICJib2R5U2l6ZSI6IDQwOCwgInJlZGlyZWN0VVJMIjogIiIsICJfdHJhbnNmZXJTaXplIjogNDA4fSwgImNhY2hlIjoge30sICJ0aW1pbmdzIjogeyJkbnMiOiA0NC4zMjEsICJjb25uZWN0IjogMjMuMDYsICJzc2wiOiAxOC4yNDgsICJzZW5kIjogMCwgIndhaXQiOiA0My44NjQsICJyZWNlaXZlIjogNC40MzJ9LCAicGFnZXJlZiI6ICJwYWdlQDhjOTMyZjgzMzdkOWFiYjRiOWFiOTg4OWRlYzUxYjk5IiwgInNlcnZlcklQQWRkcmVzcyI6ICJbMmEwMDoxNDUwOjQwMDE6ODBiOjoyMDAzXSIsICJfc2VydmVyUG9ydCI6IDQ0MywgIl9zZWN1cml0eURldGFpbHMiOiB7InByb3RvY29sIjogIlRMUyAxLjMiLCAic3ViamVjdE5hbWUiOiAiKi5nb29nbGUubHUiLCAiaXNzdWVyIjogIldSMiIsICJ2YWxpZEZyb20iOiAxNzIzNDQ3NjM2LCAidmFsaWRUbyI6IDE3MzA3MDUyMzV9fV19fQ==","disable_correlation":true,"to_ids":false,"type":"attachment","uuid":"064d8c3e-c7f0-494f-90c9-93af124f0217","value":"har.json"},{"category":"External analysis","comment":"The rendered page at the end of the capture","data":"PCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBYSFRNTCAxLjAgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMS9EVEQveGh0bWwxLXRyYW5zaXRpb25hbC5kdGQiPjxodG1sIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIj48aGVhZD4KCTxtZXRhIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIj4KCTxtZXRhIG5hbWU9InZpZXdwb3J0IiBjb250ZW50PSJ3aWR0aD1kZXZpY2Utd2lkdGgsIG1pbmltdW0tc2NhbGU9MS4wLCBtYXhpbXVtLXNjYWxlPTEuMCB1c2VyLXNjYWxhYmxlPTAiPgoJPHRpdGxlPgoJCgkKCQlTdXBwbHkgQ2hhaW4gQ2FuYWRhIFBvcnRhbAoJCgk8L3RpdGxlPgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBhc3luYz0iIiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZXRhZ21hbmFnZXIuY29tL2d0YWcvanM/aWQ9Ry1QS004RUZKTTNOJmFtcDtjeD1jJmFtcDtfc2xjPTEiPjwvc2NyaXB0PjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBhc3luYz0iIiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS1hbmFseXRpY3MuY29tL2FuYWx5dGljcy5qcyI+PC9zY3JpcHQ+PHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIGFzeW5jPSIiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xldGFnbWFuYWdlci5jb20vZ3RhZy9qcz9pZD1HLUtRNUVEVkJKMU4mYW1wO2N4PWMmYW1wO19zbGM9MSI+PC9zY3JpcHQ+PHNjcmlwdCBhc3luYz0iIiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZXRhZ21hbmFnZXIuY29tL2d0bS5qcz9pZD1HVE0tTjZCVktQOSI+PC9zY3JpcHQ+PHNjcmlwdCBhc3luYz0iIiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS1hbmFseXRpY3MuY29tL2FuYWx5dGljcy5qcyI+PC9zY3JpcHQ+PHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iLi4vY29tbW9uL3NjcmlwdHMvY2FsZW5kYXIvbW9vdG9vbHMuanMiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iLi4vY29tbW9uL3NjcmlwdHMvY2FsZW5kYXIvY2FsZW5kYXIuanMiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iLi4vY29tbW9uL3NjcmlwdHMvZXh0cmEuanMiPjwvc2NyaXB0PgoJCgk8c2NyaXB0IHNyYz0iLi4vY21zMi9qcy9qcXVlcnktMi4xLjQuanMiPjwvc2NyaXB0PiA8IS0tIEpxdWVyeSBMaWJyYXJ5IENhbGwgLS0+Cgk8c2NyaXB0IHNyYz0iLi4vY21zMi9qcy9ib290c3RyYXAuanMiPjwvc2NyaXB0PiA8IS0tIFVJIC0tPgoJCgk8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii8vY29kZS5qcXVlcnkuY29tL3VpLzEuMTEuNC90aGVtZXMvc21vb3RobmVzcy9qcXVlcnktdWkuY3NzIj4KCTxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vY29tbW9uL2Jvb3RzdHJhcC9jc3MvYm9vdHN0cmFwLmNzcyIgdHlwZT0idGV4dC9jc3MiIG1lZGlhPSJhbGwiPgoJCgk8bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSIuLi9jb21tb24vY3NzL2NhbGVuZGFyLmNzcyI+Cgk8bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSIuLi9jbXMyL2Nzcy9tZW1iZXJfcG9ydGFsLmNzcyI+CgkKCTwhLS0gPGxpbmsgcmVsPSJpbXBvcnQiIGhyZWY9Ii4uL2NtczIvZGlzcGxheS9leHRlcm5hbF9zb3VyY2Uvc2VsZWN0LWxpc3QuanNwIiAvPiAtLT4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Ii4uL2NvbW1vbi9ib290c3RyYXAvanMvYm9vdHN0cmFwLXNlbGVjdC5taW4uanMiPjwvc2NyaXB0PgoJPCEtLSA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSIuLi9jb21tb24vYm9vdHN0cmFwL2pzL2Jvb3RzdHJhcF9kcm9wZG93bi5taW4uanMiPjwvc2NyaXB0PiAtLT4KCTxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vY29tbW9uL2Jvb3RzdHJhcC9jc3MvYm9vdHN0cmFwLXNlbGVjdC5taW4uY3NzIiB0eXBlPSJ0ZXh0L2NzcyIgbWVkaWE9InNjcmVlbiI+Cgk8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uL2NvbW1vbi9ib290c3RyYXAvY3NzL2Jvb3RzdHJhcC10aGVtZS5taW4uY3NzIiB0eXBlPSJ0ZXh0L2NzcyIgbWVkaWE9InNjcmVlbiI+CgkgCgk8c2NyaXB0IHNyYz0iLi4vY21zMi9qcy9zY21hL3NjbWEtdGVtcGxhdGUuanM/dj0xLjMuMSIgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij48L3NjcmlwdD4KCQoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ3N0YXRpYy5jb20vY2hhcnRzL2xvYWRlci5qcyI+PC9zY3JpcHQ+CgkKCTxzY3JpcHQgbGFuZ3VhZ2U9IkphdmFTY3JpcHQiIHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJdmFyICRqcW1vZGFsID0galF1ZXJ5OwoJCXZhciB1cmxQcmVmaXggPSAibXBvd2VyIjsKCQl2YXIgaXNMb2NhbFRlc3QgPSBmYWxzZTsKCQlpZiAod2luZG93LmxvY2F0aW9uLmhyZWYuaW5jbHVkZXMoImxvY2FsaG9zdCIpKSB7CgkJCWlzTG9jYWxUZXN0ID0gdHJ1ZTsKCQkJdXJsUHJlZml4ID0gIm1wb3dlcjhQTUFDIjsKCQl9CgkKCSAgZnVuY3Rpb24gY2hlY2tDUihldnQpIHsKCSAgICB2YXIgZXZ0ICA9IChldnQpID8gZXZ0IDogKChldmVudCkgPyBldmVudCA6IG51bGwpOwoJICAgIHZhciBub2RlID0gKGV2dC50YXJnZXQpID8gZXZ0LnRhcmdldCA6ICgoZXZ0LnNyY0VsZW1lbnQpID8gZXZ0LnNyY0VsZW1lbnQgOiBudWxsKTsKCSAgICBpZiAoKGV2dC5rZXlDb2RlID09IDEzKSAmJiAobm9kZS50eXBlPT0idGV4dCIpKSB7cmV0dXJuIGZhbHNlO30KCSAgfQoJICAKCSAgZnVuY3Rpb24gaW5zZXJ0UGFyYW0oa2V5LCB2YWx1ZSkKCQl7CgkJICAgIGtleSA9IGVzY2FwZShrZXkpOyB2YWx1ZSA9IGVzY2FwZSh2YWx1ZSk7CgoJCSAgICB2YXIga3ZwID0gZG9jdW1lbnQubG9jYXRpb24uc2VhcmNoLnN1YnN0cigxKS5zcGxpdCgnJicpOwoKCQkgICAgdmFyIGk9a3ZwLmxlbmd0aDsgdmFyIHg7IHdoaWxlKGktLSkgCgkJICAgIHsKCQkgICAgICAgIHggPSBrdnBbaV0uc3BsaXQoJz0nKTsKCgkJICAgICAgICBpZiAoeFswXT09a2V5KQoJCSAgICAgICAgewoJCSAgICAgICAgICAgICAgICB4WzFdID0gdmFsdWU7CgkJICAgICAgICAgICAgICAgIGt2cFtpXSA9IHguam9pbignPScpOwoJCSAgICAgICAgICAgICAgICBicmVhazsKCQkgICAgICAgIH0KCQkgICAgfQoKCQkgICAgaWYoaTwwKSB7CgkJICAgIAlpZiAoa3ZwLmxlbmd0aCA9PSAxICYmIGt2cFswXSA9PSAiIil7CgkJICAgIAkJa3ZwWzBdID0gW2tleSx2YWx1ZV0uam9pbignPScpOwkKCQkgICAgCX0KCQkgICAgCWVsc2V7CgkJICAgIAkJa3ZwW2t2cC5sZW5ndGhdID0gW2tleSx2YWx1ZV0uam9pbignPScpOwkKCQkgICAgCX0KCQkgICAgCQoJCSAgICB9CgoJCSAgICB2YXIgb3V0cHV0ID0gIGt2cC5qb2luKCcmJyk7CgkJICAgIHJldHVybiBvdXRwdXQ7CgkJfQoJCQoJCXZhciBsb2NhbGVfZnIgPSBkb2N1bWVudC5sb2NhdGlvbi5wYXRobmFtZSArICI/IiArIGluc2VydFBhcmFtKCJyZXF1ZXN0X2xvY2FsZSIsICJmciIpOwoJCXZhciBsb2NhbGVfZW4gPSBkb2N1bWVudC5sb2NhdGlvbi5wYXRobmFtZSArICI/IiArIGluc2VydFBhcmFtKCJyZXF1ZXN0X2xvY2FsZSIsICJlbiIpOwoKCSAJZG9jdW1lbnQub25rZXlwcmVzcyA9IGNoZWNrQ1I7CgkgCQoJIAl2YXIgbGFuZ0NoayA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCJzY21hLWxhbmctc2V0dGluZyIpOwoJIAlpZiAod2luZG93LmxvY2F0aW9uLmhyZWYuaW5jbHVkZXMoIi9lbi8iKSkge2xvY2FsU3RvcmFnZS5zZXRJdGVtKCJzY21hLWxhbmctc2V0dGluZyIsICJlbiIpO30KCSAJZWxzZSBpZiAod2luZG93LmxvY2F0aW9uLmhyZWYuaW5jbHVkZXMoIi9mci8iKSkge2xvY2FsU3RvcmFnZS5zZXRJdGVtKCJzY21hLWxhbmctc2V0dGluZyIsICJmciIpO30KCSAJZWxzZSB7bG9jYWxTdG9yYWdlLnNldEl0ZW0oInNjbWEtbGFuZy1zZXR0aW5nIiwgImVuIik7fQoJIAkvKiBpZiAobGFuZ0NoayA9PSBudWxsKSB7CgkgCQlsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgic2NtYS1sYW5nLXNldHRpbmciLCAiZW4iKTsKCSAJfSAqLwoJIAkKCSAJdmFyIGlzTW9iaWxlRGV2aWNlID0gZmFsc2U7CSAJCgkgCWlmICgoKHdpbmRvdy5pbm5lcldpZHRoID4gMCkgPyB3aW5kb3cuaW5uZXJXaWR0aCA6IHNjcmVlbi53aWR0aCkgPD0gNzY4KSB7CgkgCQlpc01vYmlsZURldmljZSA9IHRydWU7CgkgCX0gZWxzZSB7CgkgCQlpc01vYmlsZURldmljZSA9IGZhbHNlOwoJIAl9CgkgCQoJIAlsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgic2NtYS1lbnRpdHktY29tcC1jcm0iLCAnJyk7CgkgCWxvY2FsU3RvcmFnZS5zZXRJdGVtKCJzY21hLWVudGl0eS1jb21wLWVtYWlsIiwgJycpOwoJPC9zY3JpcHQ+CgkKCgoKCgoKCgoKCgoKCgoKCgoKCQoJCjwhLS0gKioqKioqTU9EQUwgTElTVCoqKioqKiAtLT4gCjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Ii4uL2NtczIvanMvYm9vdHN0cmFwLW1vZGFsLmpzIj48L3NjcmlwdD4KCgo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+IAkKCSQoIi5pc01vZGFsIikuY2xpY2soZnVuY3Rpb24oZSl7CiAgICAJaWYgKGUudGFyZ2V0LmhyZWYuaW5jbHVkZXMoIiRtb2RhbC4iKSkgewogICAgCQl2YXIgbW9kYWxOYW1lID0gIiMiICsgZS50YXJnZXQuaHJlZi5zcGxpdCgiJG1vZGFsLiIpWzFdLnJlcGxhY2UoIiAiLCAiXyIpOwogICAgCQkkanFtb2RhbChtb2RhbE5hbWUpLm1vZGFsKCJzaG93Iik7CiAgICAJCXJldHVybiBmYWxzZTsKICAgIAl9CSAgICAJICAgICAgICAKCX0pCiA8L3NjcmlwdD4KIAogPCEtLSBoYXJkIGNvZGVkIG1vZGFsIGxpc3QgLS0+CiA8L2hlYWQ+PGJvZHk+PGRpdiBpZD0ibWVtRGlyTW9kYWwiIGNsYXNzPSJtb2RhbCBoaWRlIGZhZGUiIHRhYmluZGV4PSItMSIgcm9sZT0iZGlhbG9nIiBhcmlhLWxhYmVsbGVkYnk9Im1lbURpck1vZGFsTGFiZWwiIGFyaWEtaGlkZGVuPSJ0cnVlIiBzdHlsZT0iZGlzcGxheTogbm9uZTsiPgoJPGRpdiBjbGFzcz0ibW9kYWwtaGVhZGVyIj4KCQk8aDMgaWQ9Im1lbURpck1vZGFsTGFiZWwiPgoJCQlNZW1iZXIgRGlyZWN0b3J5CgkJCQoJCTwvaDM+Cgk8L2Rpdj4KCTxkaXYgY2xhc3M9Im1vZGFsLWJvZHkiIHN0eWxlPSJtYXgtaGVpZ2h0OiA2NXZoOyI+CgkJCTxwPjxiPlN1cHBseSBDaGFpbiBDYW5hZGEgT25saW5lIE1lbWJlciBEaXJlY3RvcnktVGVybXMgYW5kIENvbmRpdGlvbnM8L2I+PC9wPgoJCQlBY2Nlc3MgYW5kIHVzZSBvZiB0aGUgU3VwcGx5IENoYWluIENhbmFkYSBPbmxpbmUgTWVtYmVyIERpcmVjdG9yeSBmcm9tIHRoaXMgd2Vic2l0ZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBsaXN0ZWQgYmVsb3cuIFRoZSBTdXBwbHkgQ2hhaW4gQ2FuYWRhIHJlc2VydmVzIHRoZSByaWdodCB0byBjaGFuZ2UgdGVybXMgYW5kIGNvbmRpdGlvbnMgd2l0aG91dCBub3RpY2UuPGJyPjxicj4KCQkJSWYgeW91IHJlYWQgYW5kIGFncmVlIHRvIHRoZXNlIHRlcm1zIGFuZCBjb25kaXRpb25zLCBjbGljayB0aGUgIkkgQUdSRUUiIGJ1dHRvbiBiZWxvdy4gSWYgeW91IGRpc2FncmVlIHdpdGggdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zLCBjbGljayB0aGUgIkkgREVDTElORSIgYnV0dG9uIGJlbG93Ljxicj48YnI+IAoJCQkxLiBZb3UgbWF5IHVzZSB0aGUgU3VwcGx5IENoYWluIENhbmFkYSBPbmxpbmUgTWVtYmVyIERpcmVjdG9yeSB0byBhc3Npc3QgeW91IGluIGZpbmRpbmcgYSBTdXBwbHkgQ2hhaW4gQ2FuYWRhIG1lbWJlci48YnI+PGJyPiAKCQkJMi4gWW91IG1heSBub3QgdXNlLCByZXByb2R1Y2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUgb3IgY29tbXVuaWNhdGUgYWxsIG9yIGFueSBwYXJ0IG9mIHRoZSBTdXBwbHkgQ2hhaW4gQ2FuYWRhIE9ubGluZSBNZW1iZXIgRGlyZWN0b3J5IGV4Y2VwdCBhcyBleHByZXNzbHkgcGVybWl0dGVkIGJ5IGNsYXVzZSAxLiBJbiBwYXJ0aWN1bGFyLCBidXQgd2l0aG91dCBsaW1pdGluZyB0aGUgZm9yZWdvaW5nLCB5b3UgbWF5IG5vdCB1c2UgdGhlIFN1cHBseSBDaGFpbiBDYW5hZGEgT25saW5lIE1lbWJlciBEaXJlY3RvcnkgZm9yOjxicj4KCQkJKGEpIGFueSBjb21tZXJjaWFsIHB1cnBvc2VzOzxicj4gCgkJCShiKSBjcmVhdGluZyBvciBjb21waWxpbmcgYW55IGRpcmVjdG9yeSBvciBhbnkgbWFpbGluZyBsaXN0Ozxicj4gCgkJCShjKSBpbiBhIGNvbXB1dGVyIHNlcnZpY2UsIGFzIHBhcnQgb2YgYSBmZWUtZm9yLXNlcnZpY2UsIGNvcHkgc2VydmljZSwgb3IgZG9jdW1lbnQgZGVsaXZlcnkgc2VydmljZTs8YnI+IAoJCQkoZCkgZm9yIGFueSBvdGhlciBwdXJwb3NlIHRoYXQgd291bGQgYmUgc3VzY2VwdGlibGUgdG8gYmUgdXNlZCBhcyBhIHNvdXJjZSBvZiBvciBzdWJzdGl0dXRlIGZvciB0aGUgU3VwcGx5IENoYWluIENhbmFkYSBPbmxpbmUgTWVtYmVyIERpcmVjdG9yeS48YnI+CgkJCUFueSBtZW1iZXIgd2hvIGFidXNlcyBhY2Nlc3MgdG8gdGhpcyBEaXJlY3RvcnkgbWF5IGhhdmUgdGhlaXIgYWNjZXNzIHN1c3BlbmRlZC48YnI+PGJyPiAKCQkJSWYgeW91IGhhdmUgcmVhZCBhbmQgYWdyZWUgdG8gdGhlc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMsIHBsZWFzZSBjbGljayB0aGUgIkkgQUdSRUUiIGFuZCBjb250aW51ZSB0byB0aGUgZGlyZWN0b3J5Ljxicj48YnI+IAoJCQlJZiB5b3UgZG8gbm90IGFncmVlIHRvIHRoZXNlIHRlcm1zIGFuZCBjb25kaXRpb25zLCBjbGljayAiSSBERUNMSU5FIiBhbmQgeW91IHdpbGwgYmUgcmVkaXJlY3RlZCB0byB0aGUgbWVtYmVyc2hpcCBob21lIHBhZ2UuIAoJCQoJPC9kaXY+Cgk8ZGl2IGNsYXNzPSJtb2RhbC1mb290ZXIiPgoJCTxpbnB1dCB0eXBlPSJidXR0b24iIGNsYXNzPSJidG4iIHZhbHVlPSJJIEFHUkVFIiBkYXRhLWRpc21pc3M9Im1vZGFsIiBhcmlhLWhpZGRlbj0idHJ1ZSIgb25jbGljaz0icmV0dXJuIG1lbURpckFncmVlKCk7Ij4KCQk8aW5wdXQgdHlwZT0iYnV0dG9uIiBjbGFzcz0iYnRuIiB2YWx1ZT0iSSBERUNMSU5FIiBkYXRhLWRpc21pc3M9Im1vZGFsIiBhcmlhLWhpZGRlbj0idHJ1ZSIgb25jbGljaz0icmV0dXJuIG1lbURpckRpc2FncmVlKCk7Ij4KCQkKCTwvZGl2Pgo8L2Rpdj4KPGRpdiBpZD0ibWVtRGlyTW9kYWxGciIgY2xhc3M9Im1vZGFsIGhpZGUgZmFkZSIgdGFiaW5kZXg9Ii0xIiByb2xlPSJkaWFsb2ciIGFyaWEtbGFiZWxsZWRieT0ibWVtRGlyTW9kYWxMYWJlbCIgYXJpYS1oaWRkZW49InRydWUiIHN0eWxlPSJkaXNwbGF5OiBub25lOyI+Cgk8ZGl2IGNsYXNzPSJtb2RhbC1oZWFkZXIiPgoJCTxoMyBpZD0ibWVtRGlyTW9kYWxMYWJlbCI+CgkJCVLDqXBlcnRvaXJlIGRlcyBtZW1icmVzCgkJPC9oMz4KCTwvZGl2PgoJPGRpdiBjbGFzcz0ibW9kYWwtYm9keSI+CgkJCTxwPjxiPkNvbmRpdGlvbnMgZCd1dGlsaXNhdGlvbiBkZSBsJ2FubnVhaXJlIGVuIGxpZ25lIGRlcyBtZW1icmVzIGRlIENoYcOubmUgZCdBcHByb3Zpc2lvbm5lbWVudCBDYW5hZGE8L2I+PC9wPgoJCQlMJ2FubnVhaXJlIGRlcyBtZW1icmVzIGRlIENoYcOubmUgZCdBcHByb3Zpc2lvbm5lbWVudCBDYW5hZGEgcGVybWV0IMOgIGNldXgtY2kgZGUgcmVjaGVyY2hlciBkJ2F1dHJlcyBtZW1icmVzIGV0IGQnZW50cmVyIGVuIHJlbGF0aW9uIGF2ZWMgZXV4LiBMJ2FjY8OocyBldCBsJ3V0aWxpc2F0aW9uIGRlIGwnYW5udWFpcmUgZW4gbGlnbmUgZGVzIG1lbWJyZXMgZGUgQ2hhw65uZSBkJ0FwcHJvdmlzaW9ubmVtZW50IENhbmFkYSDDoCBwYXJ0aXIgZGUgY2Ugc2l0ZSBXZWIgc29udCBhc3N1amV0dGlzIGF1eCBjb25kaXRpb25zIGQndXRpbGlzYXRpb24gcXVpIGZpZ3VyZW50IGNpLWRlc3NvdXMuIENoYcOubmUgZCdBcHByb3Zpc2lvbm5lbWVudCBDYW5hZGEgc2UgcsOpc2VydmUgbGUgZHJvaXQgZGUgbW9kaWZpZXIgbGVzIGNvbmRpdGlvbnMgZCd1dGlsaXNhdGlvbiBzYW5zIHByw6lhdmlzLjxicj48YnI+CgkJCVNpIHZvdXMgbGlzZXogbGVzIHByw6lzZW50ZXMgY29uZGl0aW9ucyBkJ3V0aWxpc2F0aW9uIGV0IGxlcyBhY2NlcHRleiwgY2xpcXVleiBzdXIgbGUgYm91dG9uIMKrIEonQUNDRVBURSDCuyBjaS1kZXNzb3VzLiBTaSB2b3VzIG4nw6p0ZXMgcGFzIGQnYWNjb3JkIGF2ZWMgbGVzIHByw6lzZW50ZXMgY29uZGl0aW9ucyBkJ3V0aWxpc2F0aW9uLCBjbGlxdWV6IHN1ciBsZSBib3V0b24gwqsgSkUgUkVGVVNFIMK7IGNpLWRlc3NvdXMuPGJyPjxicj4KCQkJMS4gVm91cyBwb3V2ZXogdXRpbGlzZXIgbCdhbm51YWlyZSBlbiBsaWduZSBkZXMgbWVtYnJlcyBkZSBDaGHDrm5lIGQnQXBwcm92aXNpb25uZW1lbnQgQ2FuYWRhIHBvdXIgdm91cyBhaWRlciDDoCB0cm91dmVyIHVuIG1lbWJyZSBkZSBDaGHDrm5lIGQnQXBwcm92aXNpb25uZW1lbnQgQ2FuYWRhLjxicj48YnI+CgkJCTIuIFZvdXMgbmUgcG91dmV6IHBhcyB1dGlsaXNlciwgcmVwcm9kdWlyZSwgcHVibGllciwgZGlmZnVzZXIgb3UgdHJhbnNtZXR0cmUgbGEgdG90YWxpdMOpIG91IHVuZSBwYXJ0aWUgZGUgbCdhbm51YWlyZSBlbiBsaWduZSBkZXMgbWVtYnJlcyBkZSBDaGHDrm5lIGQnQXBwcm92aXNpb25uZW1lbnQgQ2FuYWRhLCBzYXVmIHNpIGxhIGNsYXVzZSAxIGxlIHBlcm1ldCBleHByZXNzw6ltZW50LiBFbiBwYXJ0aWN1bGllciwgbWFpcyBzYW5zIGxpbWl0ZXIgY2UgcXVpIHByw6ljw6hkZSwgdm91cyBuZSBwb3V2ZXogcGFzIHV0aWxpc2VyIGwnYW5udWFpcmUgZW4gbGlnbmUgZGVzIG1lbWJyZXMgZGUgQ2hhw65uZSBkJ0FwcHJvdmlzaW9ubmVtZW50IENhbmFkYSBhdXggZmlucyBzdWl2YW50ZXMgOjxicj4KCQkJKGEpIGRlcyBmaW5zIGNvbW1lcmNpYWxlczs8YnI+IAoJCQkoYikgbGEgY3LDqWF0aW9uIG91IGxhIGNvbXBpbGF0aW9uIGQndW4gYW5udWFpcmUgb3UgZCd1bmUgbGlzdGUgZCdlbnZvaTs8YnI+IAoJCQkoYykgZGFucyB1biBzZXJ2aWNlIGluZm9ybWF0aXF1ZSwgZGFucyBsZSBjYWRyZSBkJ3VuIHNlcnZpY2UgcGF5w6kgw6AgbCdhY3RlLCBkJ3VuIHNlcnZpY2UgZGUgY29waWUgb3UgZCd1biBzZXJ2aWNlIGRlIGxpdnJhaXNvbiBkZSBkb2N1bWVudHM7PGJyPiAKCQkJKGQpIHRvdXRlIGF1dHJlIGZpbiBxdWkgcG91cnJhaXQgw6p0cmUgdXRpbGlzw6llIGNvbW1lIHNvdXJjZSBvdSByZW1wbGFjZW1lbnQgcG91ciBsJ2FubnVhaXJlIGVuIGxpZ25lIGRlcyBtZW1icmVzIGRlIENoYcOubmUgZCdBcHByb3Zpc2lvbm5lbWVudCBDYW5hZGEuPGJyPgoJCQlMJ2FjY8OocyBkZSB0b3V0IG1lbWJyZSBxdWkgYWJ1c2UgZGUgc29uIGFjY8OocyBhdSBwcsOpc2VudCBhbm51YWlyZSBwb3VycmFpdCDDqnRyZSBzdXNwZW5kdS48YnI+PGJyPgoJCQlTaSB2b3VzIGF2ZXogbHUgbGVzIHByw6lzZW50ZXMgY29uZGl0aW9ucyBkJ3V0aWxpc2F0aW9uIGV0IGxlcyBhY2NlcHRleiwgdmV1aWxsZXogY2xpcXVlciBzdXIgbGUgYm91dG9uIMKrIEonQUNDRVBURSDCuyBjaS1kZXNzb3VzIGV0IHZvdXMgcmVuZHJlIMOgIGwnYW5udWFpcmUuPGJyPjxicj4KCQkJU2kgdm91cyBuJ2FjY2VwdGV6IHBhcyBsZXMgcHLDqXNlbnRlcyBjb25kaXRpb25zIGQndXRpbGlzYXRpb24sIGNsaXF1ZXogc3VyIGxlIGJvdXRvbiDCqyBKJ0FDQ0VQVEUgwrsgY2ktZGVzc291cyBldCB2b3VzIHNlcmV6IHJlbnZvecOpIMOgIGxhIHBhZ2UgZCdhY2N1ZWlsIGRlcyBtZW1icmVzLgoJPC9kaXY+Cgk8ZGl2IGNsYXNzPSJtb2RhbC1mb290ZXIiPgoJCTxpbnB1dCB0eXBlPSJidXR0b24iIGNsYXNzPSJidG4iIHZhbHVlPSJKJ0FDQ0VQVEUiIGRhdGEtZGlzbWlzcz0ibW9kYWwiIGFyaWEtaGlkZGVuPSJ0cnVlIiBvbmNsaWNrPSJyZXR1cm4gbWVtRGlyQWdyZWUoKTsiPgoJCTxpbnB1dCB0eXBlPSJidXR0b24iIGNsYXNzPSJidG4iIHZhbHVlPSJKRSBSRUZVU0UiIGRhdGEtZGlzbWlzcz0ibW9kYWwiIGFyaWEtaGlkZGVuPSJ0cnVlIiBvbmNsaWNrPSJyZXR1cm4gbWVtRGlyRGlzYWdyZWUoKTsiPgoJPC9kaXY+CjwvZGl2PgoKCjxkaXYgaWQ9Im1lbURpckRlY2xpbmVkTW9kYWwiIGNsYXNzPSJtb2RhbCBoaWRlIGZhZGUiIHRhYmluZGV4PSItMSIgcm9sZT0iZGlhbG9nIiBhcmlhLWxhYmVsbGVkYnk9Im1lbURpckRlY2xpbmVkTW9kYWxMYWJlbCIgYXJpYS1oaWRkZW49InRydWUiIHN0eWxlPSJkaXNwbGF5OiBub25lOyI+Cgk8ZGl2IGNsYXNzPSJtb2RhbC1oZWFkZXIiPgoJCTxoMyBpZD0ibWVtRGlyRGVjbGluZWRNb2RhbExhYmVsIj4KCQkJTWVtYmVyIERpcmVjdG9yeQoJCQkKCQk8L2gzPgoJPC9kaXY+Cgk8ZGl2IGNsYXNzPSJtb2RhbC1ib2R5Ij4KCQlJdCBhcHBlYXJzIHRoYXQgeW91IGhhdmUgZGVjbGluZWQgdG8gYWNjZXB0IHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBmb3IgdGhlIHVzYWdlIG9mIHRoZSBtZW1iZXIgZGlyZWN0b3J5LiBQbGVhc2UgY2xpY2sgT0sgdG8gY2xvc2UgdGhpcyBtZXNzYWdlLgoJCQoJPC9kaXY+Cgk8ZGl2IGNsYXNzPSJtb2RhbC1mb290ZXIiPgkKCQk8aW5wdXQgdHlwZT0iYnV0dG9uIiBjbGFzcz0iYnRuIiB2YWx1ZT0iT0siIGRhdGEtZGlzbWlzcz0ibW9kYWwiIGFyaWEtaGlkZGVuPSJ0cnVlIj4KCQkKCTwvZGl2Pgo8L2Rpdj4KCjxkaXYgaWQ9Im1lbURpckRlY2xpbmVkTW9kYWxGciIgY2xhc3M9Im1vZGFsIGhpZGUgZmFkZSIgdGFiaW5kZXg9Ii0xIiByb2xlPSJkaWFsb2ciIGFyaWEtbGFiZWxsZWRieT0ibWVtRGlyRGVjbGluZWRNb2RhbExhYmVsIiBhcmlhLWhpZGRlbj0idHJ1ZSIgc3R5bGU9ImRpc3BsYXk6IG5vbmU7Ij4KCTxkaXYgY2xhc3M9Im1vZGFsLWhlYWRlciI+CgkJPGgzIGlkPSJtZW1EaXJEZWNsaW5lZE1vZGFsTGFiZWwiPgoJCQlSw6lwZXJ0b2lyZSBkZXMgbWVtYnJlcwoJCTwvaDM+Cgk8L2Rpdj4KCTxkaXYgY2xhc3M9Im1vZGFsLWJvZHkiPgoJCQlJbCBzZW1ibGUgcXVlIHZvdXMgYXZleiByZWZ1c8OpIGQnYWNjZXB0ZXIgbGVzIG1vZGFsaXTDqXMgZXQgbGVzIGNvbmRpdGlvbnMgZCd1dGlsaXNhdGlvbiBwb3VyIGwnYW5udWFpcmUgZGVzIG1lbWJyZXMuIENsaXF1ZXogc3VyIE9LIHBvdXIgZmVybWVyIGNlIG1lc3NhZ2UuCgk8L2Rpdj4KCTxkaXYgY2xhc3M9Im1vZGFsLWZvb3RlciI+CQoJCTxpbnB1dCB0eXBlPSJidXR0b24iIGNsYXNzPSJidG4iIHZhbHVlPSJPSyIgZGF0YS1kaXNtaXNzPSJtb2RhbCIgYXJpYS1oaWRkZW49InRydWUiPgoJPC9kaXY+CjwvZGl2PgoKPGRpdiBpZD0ic2NtYUxlYXJuaW5nTW9kYWwiIGNsYXNzPSJtb2RhbCBoaWRlIGZhZGUiIHRhYmluZGV4PSItMSIgcm9sZT0iZGlhbG9nIiBhcmlhLWxhYmVsbGVkYnk9InNjbWFMZWFybmluZ01vZGFsTGFiZWwiIGFyaWEtaGlkZGVuPSJ0cnVlIiBzdHlsZT0iZGlzcGxheTogbm9uZTsiPgoJPGRpdiBjbGFzcz0ibW9kYWwtaGVhZGVyIj4KCQk8aDMgaWQ9InNjbWFMZWFybmluZ01vZGFsTGFiZWwiPk9ubGluZSBMZWFybmluZzwvaDM+Cgk8L2Rpdj4KCTxkaXYgY2xhc3M9Im1vZGFsLWJvZHkiPgoJCTxwPldlbGNvbWUgdG8gU3VwcGx5IENoYWluIENhbmFkYSdzIG9ubGluZSBsZWFybmluZyBTdXBwbHkgQ2hhaW4gTWFuYWdlbWVudCBQcm9mZXNzaW9uYWwgKFNDTVApIHByb2dyYW0uIEluIG9yZGVyIHRvIGVucm9sbCBpbiBhbnkgb2YgdGhlIHByb2dyYW0gbW9kdWxlcywgeW91IG11c3QgZmlyc3QgYmUgYWRtaXR0ZWQgdG8gdGhlIFNDTVAgcHJvZ3JhbS4gSWYgeW91IG1lZXQgdGhlIHF1YWxpZnlpbmcgPGEgaHJlZj0iaHR0cDovL3NjbWEuY29tL2VuL2VkdWNhdGlvbi1hY2NyZWRpdGF0aW9uL3NjbXAtZGVzaWduYXRpb24tcHJvZ3JhbSNwcmUtcmVxdWlzaXRlcy1hbmQtYWRtaXNzaW9uIiB0YXJnZXQ9Il9ibGFuayI+cHJlLXJlcXVpc2l0ZXM8L2E+LCBwbGVhc2UgY29udGFjdCB5b3VyIDxhIGhyZWY9Imh0dHA6Ly9zY21hLmNvbS9lbi9hYm91dC1zY21hL2pvaW4tc2NtYS9zY21hLWluc3RpdHV0ZXMiIHRhcmdldD0iX2JsYW5rIj5Qcm92aW5jaWFsIEluc3RpdHV0ZTwvYT4gZm9yIHByb2dyYW0gYWRtaXNzaW9uLjwvcD4KCTwvZGl2PgoJPGRpdiBjbGFzcz0ibW9kYWwtZm9vdGVyIj4KCQk8aW5wdXQgdHlwZT0iYnV0dG9uIiBjbGFzcz0iYnRuIiB2YWx1ZT0iQ2xvc2UiIGRhdGEtZGlzbWlzcz0ibW9kYWwiIGFyaWEtaGlkZGVuPSJ0cnVlIj4KCQkKCTwvZGl2Pgo8L2Rpdj4KCjxkaXYgaWQ9InNjbWFMZWFybmluZ01vZGFsLWZyIiBjbGFzcz0ibW9kYWwgaGlkZSBmYWRlIiB0YWJpbmRleD0iLTEiIHJvbGU9ImRpYWxvZyIgYXJpYS1sYWJlbGxlZGJ5PSJzY21hTGVhcm5pbmdNb2RhbExhYmVsIiBhcmlhLWhpZGRlbj0idHJ1ZSIgc3R5bGU9ImRpc3BsYXk6IG5vbmU7Ij4KCTxkaXYgY2xhc3M9Im1vZGFsLWhlYWRlciI+CgkJPGgzIGlkPSJzY21hTGVhcm5pbmdNb2RhbExhYmVsIj5BcHByZW50aXNzYWdlIGVuIGxpZ25lPC9oMz4KCTwvZGl2PgoJPGRpdiBjbGFzcz0ibW9kYWwtYm9keSI+CgkJPHA+QmllbnZlbnVlIGF1IHByb2dyYW1tZSBkZSBwcm9mZXNzaW9ubmVsIGRlIGxhIGdlc3Rpb24gZGUgbGEgY2hhaW5lIGQnYXBwcm92aXNpb25uZW1lbnQgKHAuZy5jLmEuKSBlbiBsaWduZS4gUG91ciB2b3VzIGluc2NyaXJlIMOgIGwndW4gZGVzIG1vZHVsZXMgZHUgcHJvZ3JhbW1lLCB2b3VzIGRldmV6IGQnYWJvcmQgw6p0cmUgYWRtaXMgYXUgcHJvZ3JhbW1lIHAuZy5jLmEuIFNpIHZvdXMgcsOpcG9uZGV6IGF1eCBjb25kaXRpb25zIDxhIGhyZWY9Imh0dHA6Ly9zY21hLmNvbS9mci9mb3JtYXRpb24tZXQtYWNjcmVkaXRhdGlvbi1mci9wLWctYy1hI2NvbmRpdGlvbnMiIHRhcmdldD0iX2JsYW5rIj5wcsOpYWxhYmxlcyByZXF1aXNlczwvYT4sIHZldWlsbGV6IGNvbW11bmlxdWVyIGF2ZWMgdm90cmUgPGEgaHJlZj0iaHR0cDovL3NjbWEuY29tL2ZyL2EtcHJvcG9zL2FkaGVzaW9uLWEtbC1hZ2NhL2NvcnBvcmF0aW9ucy1kZS1sLWFnY2EiIHRhcmdldD0iX2JsYW5rIj5pbnN0aXR1dCBwcm92aW5jaWFsPC9hPiBwb3VyIGwnYWRtaXNzaW9uIGF1IHByb2dyYW1tZS48L3A+Cgk8L2Rpdj4KCTxkaXYgY2xhc3M9Im1vZGFsLWZvb3RlciI+CgkJPGlucHV0IHR5cGU9ImJ1dHRvbiIgY2xhc3M9ImJ0biIgdmFsdWU9IkNsb3NlIiBkYXRhLWRpc21pc3M9Im1vZGFsIiBhcmlhLWhpZGRlbj0idHJ1ZSI+CgkJCgk8L2Rpdj4KPC9kaXY+CgoKCjxkaXYgaWQ9ImFsZXJ0LWZpbGwtb3V0IiBjbGFzcz0ibW9kYWwgaGlkZSBmYWRlIj4KICA8ZGl2IGNsYXNzPSJtb2RhbC1ib2R5Ij4KICAgIFBsZWFzZSBmaWxsIG91dCBhbGwgcmVxdWlyZWQgZmllbGRzCiAgPC9kaXY+CiAgPGRpdiBjbGFzcz0ibW9kYWwtZm9vdGVyIj4KICAgIDxidXR0b24gdHlwZT0iYnV0dG9uIiBkYXRhLWRpc21pc3M9Im1vZGFsIiBjbGFzcz0iYnRuIGJ0bi1wcmltYXJ5IiBkYXRhLXZhbHVlPSIxIj5PSzwvYnV0dG9uPgogIDwvZGl2Pgo8L2Rpdj4KCjxkaXYgaWQ9ImFsZXJ0LWNwZC1maWxsZWQiIGNsYXNzPSJtb2RhbCBoaWRlIGZhZGUiPgogIDxkaXYgY2xhc3M9Im1vZGFsLWJvZHkiPgogICAgQ1BEIEFjdGl2aXR5IHN1Ym1pdHRlZC4KICA8L2Rpdj4KICA8ZGl2IGNsYXNzPSJtb2RhbC1mb290ZXIiPgogICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iIGRhdGEtZGlzbWlzcz0ibW9kYWwiIGNsYXNzPSJidG4gYnRuLXByaW1hcnkiIGRhdGEtdmFsdWU9IjEiIG9uY2xpY2s9ImxvY2F0aW9uLnJlbG9hZCgpOyI+T0s8L2J1dHRvbj4KICA8L2Rpdj4KPC9kaXY+Cgo8ZGl2IGlkPSJhbGVydC1mYWlsIiBjbGFzcz0ibW9kYWwgaGlkZSBmYWRlIj4KICA8ZGl2IGNsYXNzPSJtb2RhbC1ib2R5Ij4KICAgIEZhaWxlZCB0byBpbnNlcnQgZGF0YQogIDwvZGl2PgogIDxkaXYgY2xhc3M9Im1vZGFsLWZvb3RlciI+CiAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgZGF0YS1kaXNtaXNzPSJtb2RhbCIgY2xhc3M9ImJ0biBidG4tcHJpbWFyeSIgZGF0YS12YWx1ZT0iMSI+T0s8L2J1dHRvbj4KICA8L2Rpdj4KPC9kaXY+Cgo8ZGl2IGlkPSJhbGVydC1yZW5ld2FsIiBjbGFzcz0ibW9kYWwgaGlkZSBmYWRlIj4KICA8ZGl2IGNsYXNzPSJtb2RhbC1ib2R5Ij4KICAgIDxkaXYgc3R5bGU9ImRpc3BsYXk6IGlubGluZS1ibG9jazsgd2lkdGg6IDI1JTsgdmVydGljYWwtYWxpZ246IHRvcDsiPlBsZWFzZSBjb250YWN0OjwvZGl2PgogICAgPGRpdiBzdHlsZT0iZGlzcGxheTogaW5saW5lLWJsb2NrOyB3aWR0aDogNzQlOyBsaW5lLWhlaWdodDogMjRweDsiPjxzcGFuIGlkPSJwLWVudGl0eS1pbmZvIiBzdHlsZT0iZm9udC13ZWlnaHQ6IGJvbGQ7Ij48L3NwYW4+IHRvIHJlbmV3LiBUaGFuayB5b3UuPC9kaXY+CiAgPC9kaXY+CiAgPGRpdiBjbGFzcz0ibW9kYWwtZm9vdGVyIj4KICAgIDxidXR0b24gdHlwZT0iYnV0dG9uIiBkYXRhLWRpc21pc3M9Im1vZGFsIiBjbGFzcz0iYnRuIGJ0bi1wcmltYXJ5IiBkYXRhLXZhbHVlPSIxIj5PSzwvYnV0dG9uPgogIDwvZGl2Pgo8L2Rpdj4KCjxkaXYgaWQ9ImFsZXJ0LXJlbmV3YWwtZnIiIGNsYXNzPSJtb2RhbCBoaWRlIGZhZGUiPgogIDxkaXYgY2xhc3M9Im1vZGFsLWJvZHkiPgogICAgPGRpdiBzdHlsZT0iZGlzcGxheTogaW5saW5lLWJsb2NrOyB3aWR0aDogNDAlOyB2ZXJ0aWNhbC1hbGlnbjogdG9wOyI+UG91ciByZW5vdXZlbGVyIHZvdHJlIGFkaMOpc2lvbiB2ZXVpbGxleiBjb250YWN0ZXI6PC9kaXY+CiAgICA8ZGl2IHN0eWxlPSJkaXNwbGF5OiBpbmxpbmUtYmxvY2s7IHdpZHRoOiA1OSU7IGxpbmUtaGVpZ2h0OiAyNHB4OyI+PHNwYW4gaWQ9InAtZW50aXR5LWluZm8iIHN0eWxlPSJmb250LXdlaWdodDogYm9sZDsiPjwvc3Bhbj4uIE1lcmNpLjwvZGl2PgogIDwvZGl2PgogIDxkaXYgY2xhc3M9Im1vZGFsLWZvb3RlciI+CiAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgZGF0YS1kaXNtaXNzPSJtb2RhbCIgY2xhc3M9ImJ0biBidG4tcHJpbWFyeSIgZGF0YS12YWx1ZT0iMSI+RCdhY2NvcmQ8L2J1dHRvbj4KICA8L2Rpdj4KPC9kaXY+Cgo8IS0tICoqKioqKk1PREFMIExJU1QgRU5EKioqKioqIC0tPiAKCgkKCQoJCgkJPHNjcmlwdD4KCQkgIChmdW5jdGlvbihpLHMsbyxnLHIsYSxtKXtpWydHb29nbGVBbmFseXRpY3NPYmplY3QnXT1yO2lbcl09aVtyXXx8ZnVuY3Rpb24oKXsKCQkgIChpW3JdLnE9aVtyXS5xfHxbXSkucHVzaChhcmd1bWVudHMpfSxpW3JdLmw9MSpuZXcgRGF0ZSgpO2E9cy5jcmVhdGVFbGVtZW50KG8pLAoJCSAgbT1zLmdldEVsZW1lbnRzQnlUYWdOYW1lKG8pWzBdO2EuYXN5bmM9MTthLnNyYz1nO20ucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoYSxtKQoJCSAgfSkod2luZG93LGRvY3VtZW50LCdzY3JpcHQnLCdodHRwczovL3d3dy5nb29nbGUtYW5hbHl0aWNzLmNvbS9hbmFseXRpY3MuanMnLCdnYScpOwoJCQoJCSAgZ2EoJ2NyZWF0ZScsICdVQS0xMDE0MDc3ODEtMScsICdhdXRvJyk7CgkJICBnYSgnc2VuZCcsICdwYWdldmlldycpOwoJCQkKCQk8L3NjcmlwdD4KCQoJCTwhLS0gR29vZ2xlIFRhZyBNYW5hZ2VyIC0tPgoJCTxzY3JpcHQ+KGZ1bmN0aW9uKHcsZCxzLGwsaSl7d1tsXT13W2xdfHxbXTt3W2xdLnB1c2goeydndG0uc3RhcnQnOgoJCW5ldyBEYXRlKCkuZ2V0VGltZSgpLGV2ZW50OidndG0uanMnfSk7dmFyIGY9ZC5nZXRFbGVtZW50c0J5VGFnTmFtZShzKVswXSwKCQlqPWQuY3JlYXRlRWxlbWVudChzKSxkbD1sIT0nZGF0YUxheWVyJz8nJmw9JytsOicnO2ouYXN5bmM9dHJ1ZTtqLnNyYz0KCQknaHR0cHM6Ly93d3cuZ29vZ2xldGFnbWFuYWdlci5jb20vZ3RtLmpzP2lkPScraStkbDtmLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGosZik7CgkJfSkod2luZG93LGRvY3VtZW50LCdzY3JpcHQnLCdkYXRhTGF5ZXInLCdHVE0tTjZCVktQOScpOzwvc2NyaXB0PgoJCTwhLS0gRW5kIEdvb2dsZSBUYWcgTWFuYWdlciAtLT4KCQoJCgoJCgkJPCEtLSBHb29nbGUgVGFnIE1hbmFnZXIgKG5vc2NyaXB0KSAtLT4KCQk8bm9zY3JpcHQ+PGlmcmFtZSBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZXRhZ21hbmFnZXIuY29tL25zLmh0bWw/aWQ9R1RNLU42QlZLUDkiCgkJaGVpZ2h0PSIwIiB3aWR0aD0iMCIgc3R5bGU9ImRpc3BsYXk6bm9uZTt2aXNpYmlsaXR5OmhpZGRlbiI+PC9pZnJhbWU+PC9ub3NjcmlwdD4KCQk8IS0tIEVuZCBHb29nbGUgVGFnIE1hbmFnZXIgKG5vc2NyaXB0KSAtLT4KCQoKCTxkaXYgY2xhc3M9ImNvbnRhaW5lciI+CgkJCgoKCgoKCgoKCgoKCgoKCgoKCjxkaXYgY2xhc3M9ImRpdi1oZWFkZXIiPgoJPHN0eWxlPjwhLS0KLnRpdGxlLWxvZ28sICNwb3J0YWwtaWNvbnMgewoJCW1heC13aWR0aDogMTAwMHB4OwoJCXdpZHRoOiAxMDAlOwoJCWxldHRlci1zcGFjaW5nOiAycHg7CgkJbWFyZ2luOiBhdXRvOwoJfQoJCgkjZGl2LXRvcC1saW5rcyB7CgkJd2lkdGg6IDEwMCU7CgkJaGVpZ2h0OiAzNHB4OwoJCWRpc3BsYXk6IGZsZXg7CiAgICAJYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIAlqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtZW5kOwogICAgCW1hcmdpbjogYXV0bzsKICAgIAliYWNrZ3JvdW5kLWNvbG9yOiNFRDFDMjQ7Cgl9CgkjZGl2LXRvcC1saW5rcyB1bCB7CgkJZGlzcGxheTogZmxleDsKCQlqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtZW5kOwoJCWZsZXgtd3JhcDogd3JhcDsKCX0KCSNkaXYtdG9wLWxpbmtzIHVsIGxpIHsKCQltYXJnaW4tbGVmdDogNXB4OwoJCW1hcmdpbi1yaWdodDogNXB4OwoJfQoJI2Rpdi10b3AtbGlua3MgdWwgbGkgYSB7CgkJY29sb3I6ICNmZmY7CgkJZm9udC1zaXplOiAxMHB4OwogICAgCWxldHRlci1zcGFjaW5nOiAxcHg7CiAgICAJdGV4dC1kZWNvcmF0aW9uOiBub25lOwoJfQoJCgkjZGl2LXRvcC1saW5rcyB1bCBsaSBhOmhvdmVyIHsKICAgIAl0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsKCX0KCQoJI2Rpdi10b3AtbGlua3MgLmluYWN0aXZlIHsKCQljb2xvcjogI2ZmZjsKCX0KICAgICAgICAjZGl2LXNpZ25pbi1pZCB7CgkJbWF4LXdpZHRoOiAxMDAwcHg7CgkJd2lkdGg6IDEwMCU7CiAgICAJICAgICAgICBtYXJnaW46IGF1dG87CiAgICAgICAgICAgICAgICB0ZXh0LWFsaWduOiByaWdodDsKICAgICAgICB9CgkjdGl0bGUtd3JhcHBlciB7CgkJcG9zaXRpb246IHJlbGF0aXZlOwoJCWhlaWdodDogMTYwcHg7Cgl9CiAgICAudGl0bGUtd3JhcHBlci1yaWdodC1wYXJ0IHsKCSAgICBwb3NpdGlvbjogYWJzb2x1dGU7CgkgICAgd2lkdGg6IDQwJTsKCSAgICBoZWlnaHQ6IDEwMCU7CgkgICAgdG9wOiAwOwoJICAgIHJpZ2h0OiAwOwoJICAgIGJhY2tncm91bmQtY29sb3I6ICNmZmY7CgkgICAgei1pbmRleDogLTE7Cgl9CgkudGl0bGUtd3JhcHBlci1sZWZ0LXBhcnQgewoJICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKCSAgICB3aWR0aDogNDAlOwoJICAgIGhlaWdodDogNjVweDsKCSAgICBib3R0b206IDA7CgkgICAgbGVmdDogMDsKCSAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmOwoJICAgIHotaW5kZXg6IC0xOwoJfQoJLnRpdGxlLWxvZ28tdG9wIHsKCQloZWlnaHQ6IDk2cHg7CgkJZGlzcGxheTogZmxleDsKCQlqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47CgkJYWxpZ24taXRlbXM6IGNlbnRlcjsKCX0KCS50aXRsZS1sb2dvLWJvdHRvbSB7CgkJaGVpZ2h0OiA2NHB4OwoJCWRpc3BsYXk6IGZsZXg7CiAgICAJanVzdGlmeS1jb250ZW50OiBmbGV4LWVuZDsKCX0KCQoJLnRpdGxlX19ib3R0b21fX3NvY2lhbGxpbmtzIHsKCQltYXJnaW46IDBweDsKCQlwYWRkaW5nOiAwcHg7CgkJZGlzcGxheTogZmxleDsKCX0KCS50aXRsZV9fYm90dG9tX19zb2NpYWxsaW5rcyBsaSB7CgkJbWFyZ2luLWxlZnQ6IDE1cHg7CiAgICAJbWFyZ2luLXJpZ2h0OiAxNXB4OwoJfQoJCgkubGFuZy1pbmxpbmUgewoJCW1hcmdpbjogMHB4OwoJfQoJI2xvZ29fbGluayB7CnBhZGRpbmctbGVmdDoxNXB4OwpwYWRkaW5nLXRvcDo2MHB4Owp9CiNkaXYtc2lnbmluLWlkIHsKCQl0ZXh0LWFsaWduOiByaWdodDsKCX0KCglAbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiAxMDAwcHgpIHsKCSAgICAudGl0bGUtd3JhcHBlci1yaWdodC1wYXJ0LCAudGl0bGUtd3JhcHBlci1sZWZ0LXBhcnQsIC50aXRsZV9fYm90dG9tX19zb2NpYWxsaW5rcywgLmxvZ28tdGV4dCB7CgkgICAgCWRpc3BsYXk6IG5vbmU7CgkgICAgfQoJfQoJCglAbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiA3NjhweCkgewoJICAgIC5jb250YWluTmF2Lm1lbnUtaWNvbi1iYWNrZ3JvdW5kIHsKCSAgICAJZGlzcGxheTogZmxleCAhaW1wb3J0YW50OwoJICAgIH0KI2Rpdi10b3AtbGlua3MuY29udGFpbk5hdiB7CgkgICAgCWp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbiAhaW1wb3J0YW50OwoJICAgIH0KI2Rpdi1zaWduaW4taWQgewoJICAgIAlkaXNwbGF5OiBmbGV4ICFpbXBvcnRhbnQ7CiAgICBwYWRkaW5nOiAwOwogICAganVzdGlmeS1jb250ZW50OiBmbGV4LWVuZDsKICAgIGNvbG9yOiAjZmZmOwogICAgZm9udC1zaXplOiAxMHB4OwogICAgbGV0dGVyLXNwYWNpbmc6IDFweDsKcGFkZGluZy1yaWdodDogMTVweDsKICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7CgkgICAgfQojbGktc2lnbmluLWlkIHsKCSAgICAJZGlzcGxheTogbm9uZTsKCSAgICB9CgojZGl2LXRvcC1saW5rcyB7Cmp1c3RpZnktY29udGVudDogZmxleC1lbmQ7Cn0KCX0JIAoJCgkubWVudS1pY29uLWJhY2tncm91bmQgewoJICAgIGRpc3BsYXk6IGZsZXg7CgkgICAgZmxleC1mbG93OiByb3cgd3JhcDsKCSAgICBhbGlnbi1pdGVtczogY2VudGVyOwoJICAgIHBhZGRpbmctdG9wOiA0cHg7CgkgICAgcGFkZGluZy1ib3R0b206IDRweDsKCSAgICBwYWRkaW5nLWxlZnQ6IDNweDsKCSAgICBwYWRkaW5nLXJpZ2h0OiAzcHg7CgkgICAgaGVpZ2h0OiAxNnB4OwoJICAgIHdpZHRoOiAxOHB4OwoJICAgIG1hcmdpbi1yaWdodDogMTVweDsKICAgIAltYXJnaW4tbGVmdDogMTVweDsKCX0KCS5iYXIgewoJICAgIHdpZHRoOiAyNHB4OwoJICAgIGhlaWdodDogMnB4OwoJICAgIGJvcmRlci1yYWRpdXM6IDJweDsKCSAgICBiYWNrZ3JvdW5kOiAjMDA3MThmOwoJfQoJLm9uZSB7CgkJd2lkdGg6IDEwMCU7CgkgICAgdG9wOiAxNHB4OwoJICAgIGxlZnQ6IDEwcHg7Cgl9CgkudHdvIHsKCQl3aWR0aDogMTAwJTsKCSAgICB0b3A6IDdweDsKCSAgICBsZWZ0OiAwcHg7Cgl9CgkudGhyZWUgewoJCXdpZHRoOiAxMDAlOwoJICAgIHRvcDogN3B4OwoJICAgIGxlZnQ6IDBweDsKCX0KLS0+PC9zdHlsZT4KPGRpdiBjbGFzcz0iaGVhZGVyLWNvbnRhaW5lciI+CjxkaXYgaWQ9ImRpdi10b3AtbGlua3MiPgo8ZGl2IGlkPSJoYW1NZW51IiBjbGFzcz0ibWVudS1pY29uLWJhY2tncm91bmQiIHN0eWxlPSJkaXNwbGF5OiBub25lOyI+CjxkaXYgY2xhc3M9ImJhciBvbmUiPjwvZGl2Pgo8ZGl2IGNsYXNzPSJiYXIgdHdvIj48L2Rpdj4KPGRpdiBjbGFzcz0iYmFyIHRocmVlIj48L2Rpdj4KPC9kaXY+Cjx1bCBjbGFzcz0ibGFuZy1pbmxpbmUiPjxsaT48YSBpZD0ibGFuZy1lbiIgaHJlZj0iL2VuL3BvcnRhbGxvZ2luIj5FTkdMSVNIPC9hPjwvbGk+PGxpPjxhIGlkPSJsYW5nLWZyIiBocmVmPSIvZW4vcG9ydGFsbG9naW4iIGNsYXNzPSJpbmFjdGl2ZSI+RlJBTsOHQUlTPC9hPjwvbGk+PC91bD4KPC9kaXY+CjxkaXYgaWQ9ImRpdi1zaWduaW4taWQiIGNsYXNzPSJtZW51LWljb24tYmFja2dyb3VuZCIgc3R5bGU9ImRpc3BsYXk6IG5vbmU7Ij48L2Rpdj4KPGRpdiBpZD0idGl0bGUtd3JhcHBlciI+CjxkaXYgY2xhc3M9InRpdGxlLXdyYXBwZXItbGVmdC1wYXJ0Ij48L2Rpdj4KPGRpdiBjbGFzcz0idGl0bGUtd3JhcHBlci1yaWdodC1wYXJ0Ij48L2Rpdj4KPGRpdiBjbGFzcz0idGl0bGUtbG9nbyI+CjxkaXYgY2xhc3M9InRpdGxlLWxvZ28tdG9wIj48YSBpZD0ibG9nb19saW5rIiBocmVmPSIvcG9ydGFsLWhvbWUiIHN0eWxlPSJ6LWluZGV4OiAtMTsiPiA8IS0tICRodG1sU2NtYUxvZ28gLS0+IDxpbWcgaWQ9ImhlYWRlci1sb2dvIiBzcmM9Ii9tcG93ZXIvY21zMi9pbWcvc2NtYV9sb2dvX3RhZ18yNTAucG5nIj4gPC9hPiA8c3BhbiBjbGFzcz0ibG9nby10ZXh0LTEiIHN0eWxlPSJmb250LXNpemU6IDM1cHg7IGNvbG9yOiAjMDAwOyBsZXR0ZXItc3BhY2luZzogMTJweDsiPlBvcnRhbDwvc3Bhbj48L2Rpdj4KPGRpdiBjbGFzcz0idGl0bGUtbG9nby1ib3R0b20iPgo8dWwgY2xhc3M9InRpdGxlX19ib3R0b21fX3NvY2lhbGxpbmtzIj4KPGxpPjxhIGhyZWY9Imh0dHBzOi8vd3d3LmZhY2Vib29rLmNvbS9zdXBwbHktY2hhaW4tY2FuYWRhIiB0YXJnZXQ9Il9ibGFuayIgcmVsPSJub29wZW5lciBub3JlZmVycmVyIj4gPGltZyBzcmM9Ii9tcG93ZXIvY21zMi9pbWcvaWNvbi1mYWNlYm9vay0zMl9ibGFjay5wbmciPjwvYT48L2xpPgo8bGk+PGEgaHJlZj0iaHR0cHM6Ly93d3cubGlua2VkaW4uY29tL2NvbXBhbnkvc3VwcGx5LWNoYWluLWNhbmFkYSIgdGFyZ2V0PSJfYmxhbmsiIHJlbD0ibm9vcGVuZXIgbm9yZWZlcnJlciI+IDxpbWcgc3JjPSIvbXBvd2VyL2NtczIvaW1nL2ljb24tbGlua2VkaW4tMzJfYmxhY2sucG5nIj48L2E+PC9saT4KPGxpPjxhIGhyZWY9Imh0dHBzOi8vdHdpdHRlci5jb20vc3VwcGx5LWNoYWluLWNhIiB0YXJnZXQ9Il9ibGFuayIgcmVsPSJub29wZW5lciBub3JlZmVycmVyIj4gPGltZyBzcmM9Ii9tcG93ZXIvY21zMi9pbWcvaWNvbi10d2l0dGVyLTMyX2JsYWNrLnBuZyI+PC9hPjwvbGk+CjwvdWw+CjxzcGFuIGNsYXNzPSJsb2dvLXRleHQtMiIgc3R5bGU9ImZvbnQtc2l6ZTogMzVweDsgY29sb3I6ICMwMDA7IGxldHRlci1zcGFjaW5nOiAxMnB4OyBkaXNwbGF5OiBub25lOyBtYXJnaW4tbGVmdDogMjgwcHg7Ij5Qb3J0YWw8L3NwYW4+PC9kaXY+CjwvZGl2Pgo8L2Rpdj4KPC9kaXY+CgkKCQo8L2Rpdj4KCjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCSQoIGRvY3VtZW50ICkucmVhZHkoZnVuY3Rpb24oKSB7CgkJJCgiI2xhbmctZW4iKS5hdHRyKCAiaHJlZiIsICIvIitsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgic2NtYS1sYW5nLXNldHRpbmciKSsiL3BvcnRhbGxvZ2luIiApCgkJJCgiI2xhbmctZnIiKS5hdHRyKCAiaHJlZiIsICIvIitsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgic2NtYS1sYW5nLXNldHRpbmciKSsiL3BvcnRhbGxvZ2luIiApCgkJCgkJdmFyIGxhbmdDaGsgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgic2NtYS1sYW5nLXNldHRpbmciKTsKCSAJaWYgKGxhbmdDaGsgPT0gbnVsbCB8fCBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgic2NtYS1sYW5nLXNldHRpbmciKSA9PSAiZW4iKSB7CgkgCQkkKCIjbGFuZy1lbiIpLnJlbW92ZUNsYXNzKCJpbmFjdGl2ZSIpOwoJCQkkKCIjbGFuZy1mciIpLmFkZENsYXNzKCJpbmFjdGl2ZSIpOwoJIAl9IGVsc2UgewoJIAkJJCgiI2xhbmctZW4iKS5hZGRDbGFzcygiaW5hY3RpdmUiKTsKCQkJJCgiI2xhbmctZnIiKS5yZW1vdmVDbGFzcygiaW5hY3RpdmUiKTsKCSAJfQoJCQkKCQl2YXIgbG9jYWxlID0gImVuIgkKCQkKCQlpZiAobG9jYWxlID09PSAiZnIiKSB7CgkJCSQoIiNzaWduLW91dC1mciIpLnNob3coKTsJCQkKCQl9IGVsc2UgewoJCQkkKCIjc2lnbi1vdXQiKS5zaG93KCk7CgkJfQoJCSQoIi5sYW5nLWlubGluZSIpLnNob3coKTsKCQkKCQkKCQkkKCIjbGFuZy1lbiIpLmNsaWNrKGZ1bmN0aW9uKGUpewoJCQkKCQkJLyogdmFyIGlzTG9jYWxUZXN0ID0gZmFsc2U7CgkJCXZhciB0bXAgPSAibXBvd2VyIjsKCQkJaWYgKHdpbmRvdy5sb2NhdGlvbi5ocmVmLmluY2x1ZGVzKCJsb2NhbGhvc3QiKSkgewoJCQkJaXNMb2NhbFRlc3QgPSB0cnVlOwoJCQkJdG1wID0gIm1wb3dlcjhQTUFDIjsKCQkJfSAqLwoJCQkKCQkJJCgiI2xhbmctZW4iKS5yZW1vdmVBdHRyKCAiaHJlZiIgKTsKCQkJCgkJCWxvY2FsU3RvcmFnZS5zZXRJdGVtKCJzY21hLWxhbmctc2V0dGluZyIsICJlbiIpOwoJCQkKCQkJdmFyIHVybCA9IHdpbmRvdy5sb2NhdGlvbi5ocmVmOwoJCQkKCQkJdmFyIGFyclVybCA9IHVybC5zcGxpdCgiLyIpOwoJCQl2YXIgcGFyYW0gPSBhcnJVcmxbYXJyVXJsLmxlbmd0aC0xXTsKCQkJaWYgKHBhcmFtLnNsaWNlKC0xKSA9PSAiIyIpIHsKCQkJCXBhcmFtID0gcGFyYW0uc3Vic3RyaW5nKDAsIHBhcmFtLmxlbmd0aC0xKTsKCQkJfQoJCQkKCQkJaWYgKGlzTG9jYWxUZXN0KSB7CQkJCS8vRm9yIGxvY2FsIHRlc3QKCQkJCXZhciBhcnJQYXJhbSA9IHBhcmFtLnNwbGl0KCJwYWdlTmFtZT0iKTsKCQkJCXZhciBhcnJQYXJhbTIgPSBhcnJQYXJhbVthcnJQYXJhbS5sZW5ndGgtMV0uc3BsaXQoIi8iKTsKCQkJCXBhcmFtID0gYXJyUGFyYW0yW2FyclBhcmFtMi5sZW5ndGgtMV07CgkJCX0KCQkJCQkKCQkJaWYgKHBhcmFtID09ICIiKSB7CgkJCQlwYXJhbSA9ICJwb3J0YWxsb2dpbiI7CgkJCX0KCQkJCgkJCSQuYWpheCh7CiAgICAJCQl0eXBlOidQT1NUJywKICAgIAkJCXVybDonLycgKyB1cmxQcmVmaXggKyAnL2NtczIvY2hhbmdlTGFuZ1NldHRpbmcuYWN0aW9uJywKICAgIAkJCWRhdGE6eydsYW5nJzogJ2VuJ30sCiAgICAJCQlzdWNjZXNzOmZ1bmN0aW9uKGRhdGEpewogICAgCQkJCWNvbnNvbGUubG9nKCJzdWNjZXNzIik7CgkJCQkKCQkJCQkkKCIjbGFuZy1lbiIpLmF0dHIoICJocmVmIiwgbG9jYWxTdG9yYWdlLmdldEl0ZW0oInNjbWEtbGFuZy1zZXR0aW5nIikrIi8iK3BhcmFtICk7CiAgICAJCQkJCiAgICAJCQkJaWYgKGlzTG9jYWxUZXN0KSB7CQkJCS8vRm9yIGxvY2FsIHRlc3QKICAgIAkJCQkJbG9jYXRpb24uaHJlZiA9ICJkaXNwbGF5LmFjdGlvbj9wYWdlTmFtZT0iKyQoIiNsYW5nLWVuIikuYXR0cigiaHJlZiIpOwogICAgCQkJCX0gZWxzZSB7CiAgICAJCQkJCWxvY2F0aW9uLmhyZWYgPSAiLyIgKyAkKCIjbGFuZy1lbiIpLmF0dHIoImhyZWYiKTsKICAgIAkJCQl9CiAgICAJCQl9LAogICAgCQkJZXJyb3I6ZnVuY3Rpb24oZGF0YSl7CiAgICAJCQkJY29uc29sZS5sb2coImZhaWwiKTsKICAgIAkJCX0KCSAgICAJfSk7CgkJCQoJCX0pOwoJCSQoIiNsYW5nLWZyIikuY2xpY2soZnVuY3Rpb24oZSl7CgkJCQoJCQkvKiB2YXIgaXNMb2NhbFRlc3QgPSBmYWxzZTsKCQkJdmFyIHRtcCA9ICJtcG93ZXIiOwoJCQlpZiAod2luZG93LmxvY2F0aW9uLmhyZWYuaW5jbHVkZXMoImxvY2FsaG9zdCIpKSB7CgkJCQlpc0xvY2FsVGVzdCA9IHRydWU7CgkJCQl0bXAgPSAibXBvd2VyOFBNQUMiOwoJCQl9ICovCgkJCQoJCQkkKCIjbGFuZy1mciIpLnJlbW92ZUF0dHIoICJocmVmIiApOwoJCQkKCQkJbG9jYWxTdG9yYWdlLnNldEl0ZW0oInNjbWEtbGFuZy1zZXR0aW5nIiwgImZyIik7CgoJCQl2YXIgdXJsID0gd2luZG93LmxvY2F0aW9uLmhyZWY7CgkKCQkJdmFyIGFyclVybCA9IHVybC5zcGxpdCgiLyIpOwoJCQl2YXIgcGFyYW0gPSBhcnJVcmxbYXJyVXJsLmxlbmd0aC0xXQoJCQlpZiAocGFyYW0uc2xpY2UoLTEpID09ICIjIikgewoJCQkJcGFyYW0gPSBwYXJhbS5zdWJzdHJpbmcoMCwgcGFyYW0ubGVuZ3RoLTEpOwoJCQl9CgoJCQlpZiAoaXNMb2NhbFRlc3QpIHsJCQkJCQkJCQkJCQkvL0ZvciBsb2NhbCB0ZXN0CgkJCQl2YXIgYXJyUGFyYW0gPSBwYXJhbS5zcGxpdCgicGFnZU5hbWU9Iik7CgkJCQl2YXIgYXJyUGFyYW0yID0gYXJyUGFyYW1bYXJyUGFyYW0ubGVuZ3RoLTFdLnNwbGl0KCIvIik7CgkJCQlwYXJhbSA9IGFyclBhcmFtMlthcnJQYXJhbTIubGVuZ3RoLTFdOwoJCQl9CgkJCQoJCQlpZiAocGFyYW0gPT0gIiIpIHsKCQkJCXBhcmFtID0gInBvcnRhbGxvZ2luIjsKCQkJfQoJCQkKCQkJJC5hamF4KHsKICAgIAkJCXR5cGU6J1BPU1QnLAogICAgCQkJdXJsOicvJyArIHVybFByZWZpeCArICcvY21zMi9jaGFuZ2VMYW5nU2V0dGluZy5hY3Rpb24nLAogICAgCQkJZGF0YTp7J2xhbmcnOiAnZnInfSwKICAgIAkJCXN1Y2Nlc3M6ZnVuY3Rpb24oZGF0YSl7CiAgICAJCQkJY29uc29sZS5sb2coInN1Y2Nlc3MiKTsKICAgIAkJCQkKICAgIAkJCQkkKCIjbGFuZy1mciIpLmF0dHIoICJocmVmIiwgbG9jYWxTdG9yYWdlLmdldEl0ZW0oInNjbWEtbGFuZy1zZXR0aW5nIikrIi8iK3BhcmFtICk7CiAgICAJCQkJCiAgICAJCQkJaWYgKGlzTG9jYWxUZXN0KSB7CQkJCS8vRm9yIGxvY2FsIHRlc3QKICAgIAkJCQkJbG9jYXRpb24uaHJlZiA9ICJkaXNwbGF5LmFjdGlvbj9wYWdlTmFtZT0iKyQoIiNsYW5nLWZyIikuYXR0cigiaHJlZiIpOwogICAgCQkJCX0gZWxzZSB7CiAgICAJCQkJCWxvY2F0aW9uLmhyZWYgPSAiLyIgKyAkKCIjbGFuZy1mciIpLmF0dHIoImhyZWYiKTsKICAgIAkJCQl9CiAgICAJCQkJCiAgICAJCQkJLy9kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnI2xhbmctZnInKS5jbGljaygpOwogICAgCQkJCQogICAgCQkJfSwKICAgIAkJCWVycm9yOmZ1bmN0aW9uKGRhdGEpewogICAgCQkJCWNvbnNvbGUubG9nKCJmYWlsIik7ICAgIAkJCQkKICAgIAkJCX0KCSAgICAJfSk7CgkJCQoJCX0pOwkJCgkJCgkJCgkJLyogJCgiLnRpdGxlLWxvZ28tdG9wIikuY2xpY2soZnVuY3Rpb24oZSl7CgkJCWFsZXJ0KGxvY2FsU3RvcmFnZS5nZXRJdGVtKCJzY21hLWxhbmctc2V0dGluZyIpKTsKCQl9KTsgKi8KCQkKCQkkKCIjc2lnbi1vdXQsICNzaWduLW91dC1mciIpLmNsaWNrKGZ1bmN0aW9uKGUpewoJCQkkLmFqYXgoewogICAgCQkJdHlwZTonUE9TVCcsCiAgICAJCQl1cmw6Jy8nICsgdXJsUHJlZml4ICsgJy9jbXMyL2FqYXgtbWVtYmVyLWxvZ291dC5hY3Rpb24nLAogICAgCQkJc3VjY2VzczpmdW5jdGlvbihkYXRhKXsKICAgIAkJCQljb25zb2xlLmxvZygic3VjY2VzcyIpOwoKICAgIAkJCQl2YXIgaHJlZiA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCJzY21hLWxhbmctc2V0dGluZyIpKyIvIisicG9ydGFsbG9naW4iOwogICAgCQkJCWlmIChpc0xvY2FsVGVzdCkgewkJCQkvL0ZvciBsb2NhbCB0ZXN0CiAgICAJCQkJCWxvY2F0aW9uLmhyZWYgPSAiZGlzcGxheS5hY3Rpb24/cGFnZU5hbWU9IitocmVmOwogICAgCQkJCX0gZWxzZSB7CiAgICAJCQkJCWxvY2F0aW9uLmhyZWYgPSAiLyIgKyBocmVmOwogICAgCQkJCX0KICAgIAkJCQkKICAgIAkJCQkvL2RvY3VtZW50LmdldEVsZW1lbnRCeUlkKCcjbGFuZy1mcicpLmNsaWNrKCk7CiAgICAJCQkJCiAgICAJCQl9LAogICAgCQkJZXJyb3I6ZnVuY3Rpb24oZGF0YSl7CiAgICAJCQkJY29uc29sZS5sb2coImZhaWwiKTsgICAgCQkJCQogICAgCQkJfQoJICAgIAl9KTsKCQl9KTsKCQkKCQlpZiAod2luZG93LmxvY2F0aW9uLmhyZWYuaW5jbHVkZXMoInBvcnRhbGxvZ2luIikpIHsKCQkJJCgiI2hhbU1lbnUiKS5yZW1vdmVDbGFzcygiY29udGFpbk5hdiIpOwkJCS8vcmVtb3ZlIGhhbWJ1cmdlciBidXR0b24gaW4gbG9naW4gcGFnZQoJCQkkKCIjZGl2LXRvcC1saW5rcyIpLnJlbW92ZUNsYXNzKCJjb250YWluTmF2Iik7CQkvL2ZvciBhbGlnbmluZyBoYW1idXJnZXIgYnV0dG9uCgkJfSBlbHNlIHsKCQkJJCgiI2hhbU1lbnUiKS5hZGRDbGFzcygiY29udGFpbk5hdiIpOwkJCQkKCQkJJCgiI2Rpdi10b3AtbGlua3MiKS5hZGRDbGFzcygiY29udGFpbk5hdiIpOwoJCX0KCQkKCX0pOwo8L3NjcmlwdD4KCgkJCgoKCgoKCgoKCgoKCgoKCgoKPCEtLSAqKioqKipDT05URU5UKioqKioqIC0tPiAKPHN0eWxlPgoJLnBhZ2Utd3JhcHBlciB7CgkJaGVpZ2h0OiAxMDAlOwoJfQoJLnBhZ2UtY29udGVudCB7CgkJZGlzcGxheTogZmxleDsKICAgIAloZWlnaHQ6IDEwMCU7Cgl9Cjwvc3R5bGU+CjxkaXYgY2xhc3M9ImNvbnRlbnQiPgoJPGRpdiBjbGFzcz0icGFnZS13cmFwcGVyIj4KCQoJPGRpdiBjbGFzcz0icGFnZS1jb250ZW50Ij4KCQk8c3R5bGU+PCEtLQoubG9naW4tY29udGFpbmVyIHsKCQl3aWR0aDogMTAwJTsKCQltYXgtd2lkdGg6IDEwMDBweDsKCQltYXJnaW46IGF1dG87CgkJY29sb3I6ICMzMzMzMzM7CgkJYmFja2dyb3VuZC1jb2xvcjogI2ZmZjsKCQlkaXNwbGF5OnRhYmxlLXJvdzsKCQkKCX0KCSNkaXYtbG9naW4tbWlkZGxlIHsKCSAgIAltYXgtd2lkdGg6IDEwMDBweDsKCSAgIAltYXJnaW46IGF1dG87CgkgICAJcGFkZGluZy10b3A6IDUwcHg7CgkgICAJcGFkZGluZy1ib3R0b206IDUwcHg7Cgl9CgkjZGl2LWxvZ2luLW1pZGRsZSA+IGgxIHsKCQljb2xvcjogIzAwMDsKCQlmb250LXdlaWdodDogbm9ybWFsOwoJfQoJI2Rpdi1sb2dpbi1taWRkbGUgPiBoMSwgI2Rpdi1sb2dpbi1taWRkbGUgPiBwLCAjZGl2LWxvZ2luLW1pZGRsZSA+IGRpdnsKCQlwYWRkaW5nLWxlZnQ6IDEwcHg7CgkJcGFkZGluZy1yaWdodDogMTBweDsKCX0KCSNkaXYtbG9naW4tbWlkZGxlIGgzIHsKCQlmb250LXNpemU6IDExcHg7CgkJY29sb3I6ICMzMzMzMzM7CgkgICAgZm9udC13ZWlnaHQ6IG5vcm1hbDsKCSAgICBtYXJnaW4tYm90dG9tOiA1cHg7Cgl9CgkjZGl2LWxvZ2luLW1pZGRsZSB1bCB7CgkJbWFyZ2luLWxlZnQ6IDEwcHg7CgkJcGFkZGluZy1sZWZ0OiAwcHg7Cgl9CgkjZGl2LWxvZ2luLWJvdHRvbSB7CgkJaGVpZ2h0OiA1MHB4OwoJfQoJLmxvZ2luIGlucHV0IHsKCQlkaXNwbGF5OiBibG9jazsKCX0KCS5sb2dpbiAubG9naW4taW5wdXQtYm94IHsKCQl3aWR0aDogY2FsYygxMDAlIC0gMjJweCk7CgkJaGVpZ2h0OiAxNnB4OwoJCW1heC13aWR0aDogNTcwcHg7CgkJYm9yZGVyOiAxcHggc29saWQgI0E5QTNBMTsKCQlib3JkZXItcmFkaXVzOiAzcHg7CgkJcGFkZGluZzogMTBweDsKCQltYXJnaW4tdG9wOiAxNXB4OwoJCW1hcmdpbi1ib3R0b206IDE1cHg7Cgl9CgkjbWVtYmVyLWxvZ2luLXN1Ym1pdF9wYXNzd29yZCB7CgkJbWFyZ2luLWJvdHRvbTogMjBweDsKCX0KCSNtZW1iZXItbG9naW4gewoJCXdpZHRoOiA4NHB4OwoJCWhlaWdodDogNDVweDsKCQltYXJnaW4tYm90dG9tOiAyMHB4OwoJfQoJCgkjZm9yZ290LXB3IHsKCQl0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsKCQljb2xvcjogIzAwMDsKCQlmb250LXdlaWdodDogYm9sZDsKCX0KCS5ncmVlbkJ0biB7CgkgICAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KHRvIGJvdHRvbSwgI0VEMUMyNCAwJSwgI0VEMUMyNCAxMDAlKTsKCSAgICBmaWx0ZXI6IHByb2dpZDpEWEltYWdlVHJhbnNmb3JtLk1pY3Jvc29mdC5ncmFkaWVudCggc3RhcnRDb2xvcnN0cj0nI0VEMUMyNCcsIGVuZENvbG9yc3RyPScjRUQxQzI0JyxHcmFkaWVudFR5cGU9MCApOwoJICAgIGJvcmRlcjogMXB4IHNvbGlkICNFRDFDMjQ7CgkgICAgbWFyZ2luLXRvcDogMTBweDsKCSAgICBwYWRkaW5nOiAwICFpbXBvcnRhbnQ7CgkgICAgdGV4dC1hbGlnbjogY2VudGVyOwoJICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7CgkgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwoJICAgIHdpZHRoOiAxMDAlOwoJICAgIGJvcmRlci1yYWRpdXM6IDRweDsKCSAgICBjb2xvcjogI2U2ZTZlNjsKCSAgICBmb250LWZhbWlseTogIm15cmlhZC1wcm8iLCBzYW5zLXNlcmlmOwoJICAgIGZvbnQtc2l6ZTogMC44MTI1cmVtOwoJICAgIGxldHRlci1zcGFjaW5nOiAwLjM4cHg7CgkgICAgZm9udC13ZWlnaHQ6IDYwMDsKCX0KCS5ncmVlbkJ0bjpob3ZlciB7CgkJY29sb3I6ICNmZmY7Cgl9Ci0tPjwvc3R5bGU+CjxkaXYgY2xhc3M9ImxvZ2luLWNvbnRhaW5lciI+CjxkaXYgaWQ9ImRpdi1sb2dpbi1taWRkbGUiPgo8aDE+TG9naW48L2gxPgo8cD5QbGVhc2UgZW50ZXIgeW91ciBlLW1haWwgYWRkcmVzcyBhbmQgcGFzc3dvcmQgdG8gYWNjZXNzIHRoZSBQb3J0YWw8L3A+CjxkaXYgY2xhc3M9ImxvZ2luIj48aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0idXNlcm5hbWUiIHNpemU9IjQwIiBtYXhsZW5ndGg9IjEwMCIgaWQ9Im1lbWJlci1sb2dpbi11c2VybmFtZSIgY2xhc3M9ImxvZ2luLWlucHV0LWJveCIgcGxhY2Vob2xkZXI9IkVtYWlsIEFkZHJlc3MiPiA8aW5wdXQgdHlwZT0icGFzc3dvcmQiIG5hbWU9InBhc3N3b3JkIiBzaXplPSI0MCIgbWF4bGVuZ3RoPSIxMDAiIGlkPSJtZW1iZXItbG9naW4tcGFzc3dvcmQiIGNsYXNzPSJsb2dpbi1pbnB1dC1ib3giIHBsYWNlaG9sZGVyPSJQYXNzd29yZCI+IDxpbnB1dCB0eXBlPSJzdWJtaXQiIGlkPSJtZW1iZXItbG9naW4iIGNsYXNzPSJncmVlbkJ0biIgbmFtZT0ibG9naW4ubG9naW4iIHZhbHVlPSJMb2dpbiI+IDxhIGlkPSJmb3Jnb3QtcHciIGhyZWY9Ii9tcG93ZXIvbXBwL21lbWJlci1mb3Jnb3QiPiBGb3Jnb3QgeW91ciBwYXNzd29yZCAvIEZpcnN0IHRpbWUgbG9nZ2luZyBpbj8gPC9hPjwvZGl2Pgo8L2Rpdj4KPGRpdiBpZD0iZGl2LWxvZ2luLWJvdHRvbSI+PC9kaXY+CjwvZGl2PgoJPC9kaXY+CgkKCTwvZGl2PgogPC9kaXY+CQoJCQoKCgoKCgoKCgoKCgoKCgoKCgo8ZGl2IGNsYXNzPSJkaXYtZm9vdGVyIj4KCTxzdHlsZT48IS0tCi5mb290ZXItY29udGFpbmVyIHsKCSAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjMDAwOwoJICAgIGhlaWdodDogMTAwJTsKCSAgICB3aWR0aDogMTAwJTsKCX0KCQoJLmZvb3Rlci1saW5rcy1yaWdodHMgewoJCWhlaWdodDogMTAwJTsKCSAgICBtYXgtd2lkdGg6IDEwMDBweDsKCSAgICBtYXJnaW46IGF1dG87CgkgICAgcGFkZGluZy10b3A6IDI1cHg7CgkgICAgYm94LXNpemluZzogYm9yZGVyLWJveDsKCSAgICBkaXNwbGF5OiBmbGV4OwoJICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CgkgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuOwoJICAgIHBhZGRpbmctYm90dG9tOiAyNXB4OwogICAgCgl9CQoJLmZvb3Rlci1saW5rcy1yaWdodHMgc3BhbiB7CgkJY29sb3I6ICNmZmY7Cgl9CgkKCS50aXRsZV9fYm90dG9tX19zb2NpYWxsaW5rcyB7CgkJbWFyZ2luOiAwcHg7CgkJcGFkZGluZzogMHB4OwoJCWRpc3BsYXk6IGZsZXg7CgkJbGlzdC1zdHlsZTogbm9uZTsKCX0KCS50aXRsZV9fYm90dG9tX19zb2NpYWxsaW5rcyBsaSB7CgkJbWFyZ2luLWxlZnQ6IDE1cHg7CiAgICAJbWFyZ2luLXJpZ2h0OiAxNXB4OzsKCX0KCQoJI2Zvb3Rlci1saW5rcywgI2Zvb3Rlci1yaWdodHMgewoJCW1heC13aWR0aDogMTAwMHB4OwoJICAgIG1hcmdpbi10b3A6IDIwcHg7Cgl9ICAgIAoJI2Zvb3Rlci1yaWdodHMgewoJCXRleHQtYWxpZ246IGNlbnRlcjsKCQkKCX0KLS0+PC9zdHlsZT4KPGRpdiBjbGFzcz0iZm9vdGVyLWNvbnRhaW5lciI+CjxkaXYgY2xhc3M9ImZvb3Rlci1saW5rcy1yaWdodHMiPgo8ZGl2IGlkPSJmb290ZXItbGlua3MiPgo8dWwgY2xhc3M9InRpdGxlX19ib3R0b21fX3NvY2lhbGxpbmtzIj4KPGxpPjxhIGhyZWY9Imh0dHBzOi8vd3d3LmZhY2Vib29rLmNvbS9zdXBwbHktY2hhaW4tY2FuYWRhIiB0YXJnZXQ9Il9ibGFuayIgcmVsPSJub29wZW5lciBub3JlZmVycmVyIj4gPGltZyBzcmM9Ii9tcG93ZXIvY21zMi9pbWcvaWNvbi1mYWNlYm9vay0zMi5wbmciPjwvYT48L2xpPgo8bGk+PGEgaHJlZj0iaHR0cHM6Ly93d3cubGlua2VkaW4uY29tL2NvbXBhbnkvc3VwcGx5LWNoYWluLWNhbmFkYSIgdGFyZ2V0PSJfYmxhbmsiIHJlbD0ibm9vcGVuZXIgbm9yZWZlcnJlciI+IDxpbWcgc3JjPSIvbXBvd2VyL2NtczIvaW1nL2ljb24tbGlua2VkaW4tMzIucG5nIj48L2E+PC9saT4KPGxpPjxhIGhyZWY9Imh0dHBzOi8vdHdpdHRlci5jb20vc3VwcGx5LWNoYWluLWNhIiB0YXJnZXQ9Il9ibGFuayIgcmVsPSJub29wZW5lciBub3JlZmVycmVyIj4gPGltZyBzcmM9Ii9tcG93ZXIvY21zMi9pbWcvaWNvbi10d2l0dGVyLTMyLnBuZyI+PC9hPjwvbGk+CjwvdWw+CjwvZGl2Pgo8ZGl2PjxzcGFuPjwvc3Bhbj48L2Rpdj4KPGRpdiBzdHlsZT0idGV4dC1hbGlnbjogY2VudGVyOyI+PHNwYW4gc3R5bGU9ImNvbG9yOiAjZmZmZmZmOyI+PGEgaHJlZj0iaHR0cHM6Ly93d3cuc3VwcGx5Y2hhaW5jYW5hZGEuY29tL3ByaXZhY3kiIHRhcmdldD0iX2JsYW5rIiByZWw9Im5vb3BlbmVyIG5vcmVmZXJyZXIiIHN0eWxlPSJjb2xvcjogI2ZmZmZmZjsiPlByaXZhY3kgU3RhdGVtZW50PC9hPiB8IDxhIGhyZWY9Imh0dHBzOi8vd3d3LnN1cHBseWNoYWluY2FuYWRhLmNvbS90ZXJtcy1vZi1zZXJ2aWNlIiB0YXJnZXQ9Il9ibGFuayIgcmVsPSJub29wZW5lciBub3JlZmVycmVyIiBzdHlsZT0iY29sb3I6ICNmZmZmZmY7Ij5UZXJtcyBvZiBTZXJ2aWNlczwvYT4gfCA8YSBocmVmPSJodHRwczovL3d3dy5zdXBwbHljaGFpbmNhbmFkYS5jb20vY29kZS1vZi1jb25kdWN0IiB0YXJnZXQ9Il9ibGFuayIgcmVsPSJub29wZW5lciBub3JlZmVycmVyIiBzdHlsZT0iY29sb3I6ICNmZmZmZmY7Ij5Db2RlIG9mIENvbmR1Y3Q8L2E+PC9zcGFuPjwvZGl2Pgo8ZGl2IGlkPSJmb290ZXItcmlnaHRzIj48c3Bhbj7CqSA8c3BhbiBpZD0iY3VyWWVhciI+MjAyNDwvc3Bhbj4gU3VwcGx5IENoYWluIENhbmFkYS4gQWxsIHJpZ2h0cyByZXNlcnZlZC48L3NwYW4+PC9kaXY+CjwvZGl2Pgo8L2Rpdj4KPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPi8vIDwhW0NEQVRBWwokKCIjdGFnc2Nsb3VkIHNwYW4iKS50ZXh0KCJZb3VyIHRleHQgaGVyZSIpOwoJJCgiI2N1clllYXIiKS50ZXh0KG5ldyBEYXRlKCkuZ2V0RnVsbFllYXIoKSk7Ci8vIF1dPjwvc2NyaXB0PgoJCgkKPC9kaXY+Cgk8L2Rpdj4KCgoKPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJJCggZG9jdW1lbnQgKS5yZWFkeShmdW5jdGlvbigpIHsKCQl2YXIgbGFuZ0NoayA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCJzY21hLWxhbmctc2V0dGluZyIpOwoJCXZhciAkYWxlcnQ7CgkJCgkJJCgiLmxvZ2luLWNvbnRhaW5lciBpbnB1dCNtZW1iZXItbG9naW4tcGFzc3dvcmQiKS5rZXlwcmVzcyhmdW5jdGlvbihlKSB7IAoJCQkJaWYoZS5rZXlDb2RlPT0xMykgeyAkKCIubG9naW4tY29udGFpbmVyICNtZW1iZXItbG9naW4iKS5jbGljaygpOyB9IAoJCX0pOwoJfSk7Cjwvc2NyaXB0PgoJCgoKCjxkaXYgaWQ9InFUaXAiIHN0eWxlPSJsZWZ0OiA1NDVweDsgdG9wOiAzMDJweDsiPjwvZGl2PjwvYm9keT48L2h0bWw+","disable_correlation":true,"to_ids":false,"type":"attachment","uuid":"b3c4f765-19f4-49d8-9e62-17a87bd30618","value":"rendered_page.html"},{"category":"Network activity","comment":"The address in the browser address bar at the end of the capture.","disable_correlation":false,"to_ids":true,"type":"url","uuid":"cd3dd997-b0b2-4e47-9ca6-02b74d5d7189","value":"https://portal.supplychaincanada.com/en/portallogin"}],"Object":[{"Attribute":[{"category":"Network activity","disable_correlation":false,"object_relation":"url","to_ids":true,"type":"url","uuid":"fe5c8c1a-0bba-45fb-91fa-3139915b7e13","value":"http://portal.supplychaincanada.com"},{"category":"Network activity","disable_correlation":false,"object_relation":"host","to_ids":true,"type":"hostname","uuid":"5901e34c-fd2c-40bb-8dfc-dbbf88d31919","value":"portal.supplychaincanada.com"},{"category":"Network activity","disable_correlation":false,"object_relation":"domain","to_ids":true,"type":"domain","uuid":"b3a88c74-76e2-40ca-bf68-87798982e49d","value":"supplychaincanada.com"},{"category":"Network activity","disable_correlation":false,"object_relation":"ip","to_ids":true,"type":"ip-dst","uuid":"080d3376-31b3-4d4b-8200-203d2858c39c","value":"104.26.15.207"},{"category":"Network activity","disable_correlation":false,"object_relation":"ip","to_ids":true,"type":"ip-dst","uuid":"a8f66416-194b-4af3-a3c6-6ee174db1668","value":"104.26.14.207"},{"category":"Network activity","disable_correlation":false,"object_relation":"ip","to_ids":true,"type":"ip-dst","uuid":"00a1465a-a86c-43c9-8b39-1f86beeae11d","value":"172.67.74.52"},{"category":"Network activity","disable_correlation":false,"object_relation":"ip","to_ids":true,"type":"ip-dst","uuid":"445eaa6f-5b90-4941-bae3-fb6933a24e4c","value":"2606:4700:20::681a:fcf"},{"category":"Network activity","disable_correlation":false,"object_relation":"ip","to_ids":true,"type":"ip-dst","uuid":"61fdeb1c-4cae-423f-9134-4f582a8b620a","value":"2606:4700:20::681a:ecf"},{"category":"Network activity","disable_correlation":false,"object_relation":"ip","to_ids":true,"type":"ip-dst","uuid":"c3d17058-0f24-478c-859b-cc9aa32f2601","value":"2606:4700:20::ac43:4a34"}],"ObjectReference":[{"comment":"Capture on lookyloo","object_uuid":"95853453-72be-41ee-b1c0-cfcf4bb27545","referenced_uuid":"3d41e752-8a34-40e0-89a7-d25bcfc3da9d","relationship_type":"captured-by","uuid":"ff11a524-3a98-41ce-b7b3-e9d2ecbdff01"},{"object_uuid":"95853453-72be-41ee-b1c0-cfcf4bb27545","referenced_uuid":"6758b40a-5a7a-4302-b4dd-3a77c8714c6e","relationship_type":"redirects-to","uuid":"bbbae543-5622-44aa-85b2-82acae2dd2bb"}],"comment":"Submitted URL","description":"url object describes an url along with its normalized field (like extracted using faup parsing library) and its metadata.","distribution":"5","first_seen":"2024-09-05T11:07:19.443000+00:00","meta-category":"network","name":"url","parsed_url":null,"sharing_group_id":"0","template_uuid":"60efb77b-40b5-4c46-871b-ed1ed999fce5","template_version":"10","uuid":"95853453-72be-41ee-b1c0-cfcf4bb27545"},{"Attribute":[{"category":"Network activity","disable_correlation":false,"object_relation":"url","to_ids":true,"type":"url","uuid":"ccd2dec5-388b-481e-a5bb-f52dd3b06d89","value":"http://portal.supplychaincanada.com/"},{"category":"Network activity","disable_correlation":false,"object_relation":"host","to_ids":true,"type":"hostname","uuid":"b598f7a7-b895-4b3d-bec7-cc17c5ba88a8","value":"portal.supplychaincanada.com"},{"category":"Network activity","disable_correlation":false,"object_relation":"domain","to_ids":true,"type":"domain","uuid":"4ab98ab0-dd34-499b-ad29-696c482f06c5","value":"supplychaincanada.com"},{"category":"Network activity","disable_correlation":false,"object_relation":"ip","to_ids":true,"type":"ip-dst","uuid":"c30bfc7f-67b5-407f-84a4-a9a05b529324","value":"104.26.15.207"},{"category":"Network activity","disable_correlation":false,"object_relation":"ip","to_ids":true,"type":"ip-dst","uuid":"7e7510e3-1308-424a-92c9-1bc4246d00ad","value":"104.26.14.207"},{"category":"Network activity","disable_correlation":false,"object_relation":"ip","to_ids":true,"type":"ip-dst","uuid":"47c85459-406b-4d30-b159-6988f97d4ac1","value":"172.67.74.52"},{"category":"Network activity","disable_correlation":false,"object_relation":"ip","to_ids":true,"type":"ip-dst","uuid":"f98394e1-0d55-4f4f-a6fc-6a26a12d0940","value":"2606:4700:20::681a:fcf"},{"category":"Network activity","disable_correlation":false,"object_relation":"ip","to_ids":true,"type":"ip-dst","uuid":"f5d0598e-1be7-49a5-a22e-5474e32fc57b","value":"2606:4700:20::681a:ecf"},{"category":"Network activity","disable_correlation":false,"object_relation":"ip","to_ids":true,"type":"ip-dst","uuid":"87721ae7-e523-4d57-819d-478048bf11e2","value":"2606:4700:20::ac43:4a34"}],"ObjectReference":[{"object_uuid":"6758b40a-5a7a-4302-b4dd-3a77c8714c6e","referenced_uuid":"b0132ef3-7728-4768-b875-40e2c6ac5d63","relationship_type":"redirects-to","uuid":"18b298e3-1ecd-4fb3-a8e0-f79b35e5b21f"}],"comment":"Redirect 0","description":"url object describes an url along with its normalized field (like extracted using faup parsing library) and its metadata.","distribution":"5","first_seen":"2024-09-05T11:07:19.443000+00:00","meta-category":"network","name":"url","parsed_url":null,"sharing_group_id":"0","template_uuid":"60efb77b-40b5-4c46-871b-ed1ed999fce5","template_version":"10","uuid":"6758b40a-5a7a-4302-b4dd-3a77c8714c6e"},{"Attribute":[{"category":"Network activity","disable_correlation":false,"object_relation":"url","to_ids":true,"type":"url","uuid":"57686cfc-ac14-44e1-8bd4-3083657276f7","value":"https://portal.supplychaincanada.com/"},{"category":"Network activity","disable_correlation":false,"object_relation":"host","to_ids":true,"type":"hostname","uuid":"457fc146-2d12-412d-9baa-9ed3329a0cd5","value":"portal.supplychaincanada.com"},{"category":"Network activity","disable_correlation":false,"object_relation":"domain","to_ids":true,"type":"domain","uuid":"fda5c3f3-c415-432f-b46c-38521de89281","value":"supplychaincanada.com"},{"category":"Network activity","disable_correlation":false,"object_relation":"ip","to_ids":true,"type":"ip-dst","uuid":"be2502fa-cbc6-4d13-968c-01a543caa158","value":"104.26.15.207"},{"category":"Network activity","disable_correlation":false,"object_relation":"ip","to_ids":true,"type":"ip-dst","uuid":"71bb1cfb-15e5-4baf-be6b-434553719a68","value":"104.26.14.207"},{"category":"Network activity","disable_correlation":false,"object_relation":"ip","to_ids":true,"type":"ip-dst","uuid":"80c0fc76-f892-4974-b264-252377710604","value":"172.67.74.52"},{"category":"Network activity","disable_correlation":false,"object_relation":"ip","to_ids":true,"type":"ip-dst","uuid":"98144101-7af3-4521-b4c4-40040c35985b","value":"2606:4700:20::681a:fcf"},{"category":"Network activity","disable_correlation":false,"object_relation":"ip","to_ids":true,"type":"ip-dst","uuid":"8cf8df1b-17d3-42f7-876e-6ab50380cb9a","value":"2606:4700:20::681a:ecf"},{"category":"Network activity","disable_correlation":false,"object_relation":"ip","to_ids":true,"type":"ip-dst","uuid":"b69bc199-517a-4c1d-9027-811430f84241","value":"2606:4700:20::ac43:4a34"}],"ObjectReference":[{"object_uuid":"b0132ef3-7728-4768-b875-40e2c6ac5d63","referenced_uuid":"1570699a-a74f-49b7-aac9-b372299e3271","relationship_type":"redirects-to","uuid":"5f4493d0-543e-4462-9762-d86e58bee615"}],"comment":"Redirect 1","description":"url object describes an url along with its normalized field (like extracted using faup parsing library) and its metadata.","distribution":"5","first_seen":"2024-09-05T11:07:19.443000+00:00","meta-category":"network","name":"url","parsed_url":null,"sharing_group_id":"0","template_uuid":"60efb77b-40b5-4c46-871b-ed1ed999fce5","template_version":"10","uuid":"b0132ef3-7728-4768-b875-40e2c6ac5d63"},{"Attribute":[{"category":"Network activity","disable_correlation":false,"object_relation":"url","to_ids":true,"type":"url","uuid":"10409496-c59a-4995-a76c-ab24bfc22114","value":"https://portal.supplychaincanada.com/en/portallogin"},{"category":"Network activity","disable_correlation":false,"object_relation":"host","to_ids":true,"type":"hostname","uuid":"c9452cb5-970c-4633-9e18-11ed2ea3486b","value":"portal.supplychaincanada.com"},{"category":"Network activity","disable_correlation":false,"object_relation":"domain","to_ids":true,"type":"domain","uuid":"b1abfc4b-3946-4cd4-8fea-45fef4bc457a","value":"supplychaincanada.com"},{"category":"Network activity","disable_correlation":false,"object_relation":"ip","to_ids":true,"type":"ip-dst","uuid":"3e7988eb-eafb-4f82-b54f-3fab358f115b","value":"104.26.15.207"},{"category":"Network activity","disable_correlation":false,"object_relation":"ip","to_ids":true,"type":"ip-dst","uuid":"6d2c8e7c-dc79-4f76-89f2-31cddeaba8b5","value":"104.26.14.207"},{"category":"Network activity","disable_correlation":false,"object_relation":"ip","to_ids":true,"type":"ip-dst","uuid":"f412a992-0056-4495-b53a-0381f5348cd2","value":"172.67.74.52"},{"category":"Network activity","disable_correlation":false,"object_relation":"ip","to_ids":true,"type":"ip-dst","uuid":"447443a2-2732-4e41-a1fe-6a334dd338ea","value":"2606:4700:20::681a:fcf"},{"category":"Network activity","disable_correlation":false,"object_relation":"ip","to_ids":true,"type":"ip-dst","uuid":"36bddf57-b807-4d7e-aa9b-349447d97b7b","value":"2606:4700:20::681a:ecf"},{"category":"Network activity","disable_correlation":false,"object_relation":"ip","to_ids":true,"type":"ip-dst","uuid":"a122571b-7734-4688-a24a-9c4864cd7bba","value":"2606:4700:20::ac43:4a34"},{"category":"Network activity","disable_correlation":false,"object_relation":"dom-hash","to_ids":true,"type":"dom-hash","uuid":"b27017be-8d16-432b-89b0-3163010e6967","value":"e703c53cd7653cc1f78b54a9d4f15b41"}],"comment":"Last redirect (2)","description":"url object describes an url along with its normalized field (like extracted using faup parsing library) and its metadata.","distribution":"5","first_seen":"2024-09-05T11:07:19.443000+00:00","meta-category":"network","name":"url","parsed_url":null,"sharing_group_id":"0","template_uuid":"60efb77b-40b5-4c46-871b-ed1ed999fce5","template_version":"10","uuid":"1570699a-a74f-49b7-aac9-b372299e3271"},{"Attribute":[{"category":"Payload delivery","disable_correlation":true,"object_relation":"filename","to_ids":true,"type":"filename","uuid":"d20acdac-cde0-47d1-8461-a7bf1ac573d5","value":"portallogin"},{"category":"Other","disable_correlation":true,"object_relation":"size-in-bytes","to_ids":false,"type":"size-in-bytes","uuid":"1623fa25-2322-467c-ae9b-4fd826233e9f","value":"31425"},{"category":"Other","disable_correlation":true,"object_relation":"entropy","to_ids":false,"type":"float","uuid":"54371838-2927-455a-8b59-9a4b8de25cc1","value":5.293809232733397},{"category":"Payload delivery","disable_correlation":false,"object_relation":"md5","to_ids":true,"type":"md5","uuid":"b71e1b31-bb73-424a-9936-d5ffaa9c4812","value":"8ca99a43f17efe8c6341cbb1e25ad2fd"},{"category":"Payload delivery","disable_correlation":false,"object_relation":"sha1","to_ids":true,"type":"sha1","uuid":"08743cdf-da96-4749-b570-fcfd3e8ce159","value":"c1a7864c5003c179c77ce823381dec036fed715f"},{"category":"Payload delivery","disable_correlation":false,"object_relation":"sha256","to_ids":true,"type":"sha256","uuid":"eeb876a3-982e-4cd8-8853-c39292ad4de0","value":"7c124cf7fb7e1f9bfe3bde346be53c27332d20267b399bd82a36c91df4d07a75"},{"category":"Payload delivery","disable_correlation":false,"object_relation":"sha512","to_ids":true,"type":"sha512","uuid":"0fbc065f-02f4-4731-99ff-e978accbb478","value":"740991d50f7cccbccf7695729d9c594f516bc73c038972c689d5e62e7244d15781c29f73207e98cbc9b0df971a16aedcc6984bf92d5c573afbaf9f1668452974"},{"category":"Payload delivery","data":"DQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBYSFRNTCAxLjAgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMS9EVEQveGh0bWwxLXRyYW5zaXRpb25hbC5kdGQiPg0KPGh0bWwgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiPg0KPGhlYWQ+DQoJPG1ldGEgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIC8+DQoJPG1ldGEgbmFtZT0idmlld3BvcnQiIGNvbnRlbnQ9IndpZHRoPWRldmljZS13aWR0aCwgbWluaW11bS1zY2FsZT0xLjAsIG1heGltdW0tc2NhbGU9MS4wIHVzZXItc2NhbGFibGU9MCIgLz4NCgk8dGl0bGU+DQoJDQoJDQoJCVN1cHBseSBDaGFpbiBDYW5hZGEgUG9ydGFsDQoJDQoJPC90aXRsZT4NCg0KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Ii4uL2NvbW1vbi9zY3JpcHRzL2NhbGVuZGFyL21vb3Rvb2xzLmpzIj48L3NjcmlwdD4NCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSIuLi9jb21tb24vc2NyaXB0cy9jYWxlbmRhci9jYWxlbmRhci5qcyI+PC9zY3JpcHQ+DQoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iLi4vY29tbW9uL3NjcmlwdHMvZXh0cmEuanMiPjwvc2NyaXB0Pg0KCQ0KCTxzY3JpcHQgc3JjPSIuLi9jbXMyL2pzL2pxdWVyeS0yLjEuNC5qcyI+PC9zY3JpcHQ+IDwhLS0gSnF1ZXJ5IExpYnJhcnkgQ2FsbCAtLT4NCgk8c2NyaXB0IHNyYz0iLi4vY21zMi9qcy9ib290c3RyYXAuanMiPjwvc2NyaXB0PiA8IS0tIFVJIC0tPg0KCQ0KCTxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLy9jb2RlLmpxdWVyeS5jb20vdWkvMS4xMS40L3RoZW1lcy9zbW9vdGhuZXNzL2pxdWVyeS11aS5jc3MiLz4NCgk8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uL2NvbW1vbi9ib290c3RyYXAvY3NzL2Jvb3RzdHJhcC5jc3MiIHR5cGU9InRleHQvY3NzIiBtZWRpYT0iYWxsIiAgLz4NCgkNCgk8bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSIuLi9jb21tb24vY3NzL2NhbGVuZGFyLmNzcyIgLz4NCgk8bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSIuLi9jbXMyL2Nzcy9tZW1iZXJfcG9ydGFsLmNzcyIgLz4NCgkNCgk8IS0tIDxsaW5rIHJlbD0iaW1wb3J0IiBocmVmPSIuLi9jbXMyL2Rpc3BsYXkvZXh0ZXJuYWxfc291cmNlL3NlbGVjdC1saXN0LmpzcCIgLz4gLS0+DQoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iLi4vY29tbW9uL2Jvb3RzdHJhcC9qcy9ib290c3RyYXAtc2VsZWN0Lm1pbi5qcyI+PC9zY3JpcHQ+DQoJPCEtLSA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSIuLi9jb21tb24vYm9vdHN0cmFwL2pzL2Jvb3RzdHJhcF9kcm9wZG93bi5taW4uanMiPjwvc2NyaXB0PiAtLT4NCgk8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uL2NvbW1vbi9ib290c3RyYXAvY3NzL2Jvb3RzdHJhcC1zZWxlY3QubWluLmNzcyIgIHR5cGU9InRleHQvY3NzIiBtZWRpYT0ic2NyZWVuIiAvPg0KCTxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vY29tbW9uL2Jvb3RzdHJhcC9jc3MvYm9vdHN0cmFwLXRoZW1lLm1pbi5jc3MiICB0eXBlPSJ0ZXh0L2NzcyIgbWVkaWE9InNjcmVlbiIgLz4NCgkgDQoJPHNjcmlwdCBzcmM9Ii4uL2NtczIvanMvc2NtYS9zY21hLXRlbXBsYXRlLmpzP3Y9MS4zLjEiIHR5cGU9InRleHQvamF2YXNjcmlwdCI+PC9zY3JpcHQ+DQoJDQoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ3N0YXRpYy5jb20vY2hhcnRzL2xvYWRlci5qcyI+PC9zY3JpcHQ+DQoJDQoJPHNjcmlwdCBsYW5ndWFnZT0iSmF2YVNjcmlwdCIgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4NCgkJdmFyICRqcW1vZGFsID0galF1ZXJ5Ow0KCQl2YXIgdXJsUHJlZml4ID0gIm1wb3dlciI7DQoJCXZhciBpc0xvY2FsVGVzdCA9IGZhbHNlOw0KCQlpZiAod2luZG93LmxvY2F0aW9uLmhyZWYuaW5jbHVkZXMoImxvY2FsaG9zdCIpKSB7DQoJCQlpc0xvY2FsVGVzdCA9IHRydWU7DQoJCQl1cmxQcmVmaXggPSAibXBvd2VyOFBNQUMiOw0KCQl9DQoJDQoJICBmdW5jdGlvbiBjaGVja0NSKGV2dCkgew0KCSAgICB2YXIgZXZ0ICA9IChldnQpID8gZXZ0IDogKChldmVudCkgPyBldmVudCA6IG51bGwpOw0KCSAgICB2YXIgbm9kZSA9IChldnQudGFyZ2V0KSA/IGV2dC50YXJnZXQgOiAoKGV2dC5zcmNFbGVtZW50KSA/IGV2dC5zcmNFbGVtZW50IDogbnVsbCk7DQoJICAgIGlmICgoZXZ0LmtleUNvZGUgPT0gMTMpICYmIChub2RlLnR5cGU9PSJ0ZXh0IikpIHtyZXR1cm4gZmFsc2U7fQ0KCSAgfQ0KCSAgDQoJICBmdW5jdGlvbiBpbnNlcnRQYXJhbShrZXksIHZhbHVlKQ0KCQl7DQoJCSAgICBrZXkgPSBlc2NhcGUoa2V5KTsgdmFsdWUgPSBlc2NhcGUodmFsdWUpOw0KDQoJCSAgICB2YXIga3ZwID0gZG9jdW1lbnQubG9jYXRpb24uc2VhcmNoLnN1YnN0cigxKS5zcGxpdCgnJicpOw0KDQoJCSAgICB2YXIgaT1rdnAubGVuZ3RoOyB2YXIgeDsgd2hpbGUoaS0tKSANCgkJICAgIHsNCgkJICAgICAgICB4ID0ga3ZwW2ldLnNwbGl0KCc9Jyk7DQoNCgkJICAgICAgICBpZiAoeFswXT09a2V5KQ0KCQkgICAgICAgIHsNCgkJICAgICAgICAgICAgICAgIHhbMV0gPSB2YWx1ZTsNCgkJICAgICAgICAgICAgICAgIGt2cFtpXSA9IHguam9pbignPScpOw0KCQkgICAgICAgICAgICAgICAgYnJlYWs7DQoJCSAgICAgICAgfQ0KCQkgICAgfQ0KDQoJCSAgICBpZihpPDApIHsNCgkJICAgIAlpZiAoa3ZwLmxlbmd0aCA9PSAxICYmIGt2cFswXSA9PSAiIil7DQoJCSAgICAJCWt2cFswXSA9IFtrZXksdmFsdWVdLmpvaW4oJz0nKTsJDQoJCSAgICAJfQ0KCQkgICAgCWVsc2V7DQoJCSAgICAJCWt2cFtrdnAubGVuZ3RoXSA9IFtrZXksdmFsdWVdLmpvaW4oJz0nKTsJDQoJCSAgICAJfQ0KCQkgICAgCQ0KCQkgICAgfQ0KDQoJCSAgICB2YXIgb3V0cHV0ID0gIGt2cC5qb2luKCcmJyk7DQoJCSAgICByZXR1cm4gb3V0cHV0Ow0KCQl9DQoJCQ0KCQl2YXIgbG9jYWxlX2ZyID0gZG9jdW1lbnQubG9jYXRpb24ucGF0aG5hbWUgKyAiPyIgKyBpbnNlcnRQYXJhbSgicmVxdWVzdF9sb2NhbGUiLCAiZnIiKTsNCgkJdmFyIGxvY2FsZV9lbiA9IGRvY3VtZW50LmxvY2F0aW9uLnBhdGhuYW1lICsgIj8iICsgaW5zZXJ0UGFyYW0oInJlcXVlc3RfbG9jYWxlIiwgImVuIik7DQoNCgkgCWRvY3VtZW50Lm9ua2V5cHJlc3MgPSBjaGVja0NSOw0KCSAJDQoJIAl2YXIgbGFuZ0NoayA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCJzY21hLWxhbmctc2V0dGluZyIpOw0KCSAJaWYgKHdpbmRvdy5sb2NhdGlvbi5ocmVmLmluY2x1ZGVzKCIvZW4vIikpIHtsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgic2NtYS1sYW5nLXNldHRpbmciLCAiZW4iKTt9DQoJIAllbHNlIGlmICh3aW5kb3cubG9jYXRpb24uaHJlZi5pbmNsdWRlcygiL2ZyLyIpKSB7bG9jYWxTdG9yYWdlLnNldEl0ZW0oInNjbWEtbGFuZy1zZXR0aW5nIiwgImZyIik7fQ0KCSAJZWxzZSB7bG9jYWxTdG9yYWdlLnNldEl0ZW0oInNjbWEtbGFuZy1zZXR0aW5nIiwgImVuIik7fQ0KCSAJLyogaWYgKGxhbmdDaGsgPT0gbnVsbCkgew0KCSAJCWxvY2FsU3RvcmFnZS5zZXRJdGVtKCJzY21hLWxhbmctc2V0dGluZyIsICJlbiIpOw0KCSAJfSAqLw0KCSAJDQoJIAl2YXIgaXNNb2JpbGVEZXZpY2UgPSBmYWxzZTsJIAkNCgkgCWlmICgoKHdpbmRvdy5pbm5lcldpZHRoID4gMCkgPyB3aW5kb3cuaW5uZXJXaWR0aCA6IHNjcmVlbi53aWR0aCkgPD0gNzY4KSB7DQoJIAkJaXNNb2JpbGVEZXZpY2UgPSB0cnVlOw0KCSAJfSBlbHNlIHsNCgkgCQlpc01vYmlsZURldmljZSA9IGZhbHNlOw0KCSAJfQ0KCSAJDQoJIAlsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgic2NtYS1lbnRpdHktY29tcC1jcm0iLCAnJyk7DQoJIAlsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgic2NtYS1lbnRpdHktY29tcC1lbWFpbCIsICcnKTsNCgk8L3NjcmlwdD4NCgkNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCgkNCgkNCjwhLS0gKioqKioqTU9EQUwgTElTVCoqKioqKiAtLT4gDQo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSIuLi9jbXMyL2pzL2Jvb3RzdHJhcC1tb2RhbC5qcyI+PC9zY3JpcHQ+DQoNCg0KPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPiAJDQoJJCgiLmlzTW9kYWwiKS5jbGljayhmdW5jdGlvbihlKXsNCiAgICAJaWYgKGUudGFyZ2V0LmhyZWYuaW5jbHVkZXMoIiRtb2RhbC4iKSkgew0KICAgIAkJdmFyIG1vZGFsTmFtZSA9ICIjIiArIGUudGFyZ2V0LmhyZWYuc3BsaXQoIiRtb2RhbC4iKVsxXS5yZXBsYWNlKCIgIiwgIl8iKTsNCiAgICAJCSRqcW1vZGFsKG1vZGFsTmFtZSkubW9kYWwoInNob3ciKTsNCiAgICAJCXJldHVybiBmYWxzZTsNCiAgICAJfQkgICAgCSAgICAgICAgDQoJfSkNCiA8L3NjcmlwdD4NCiANCiA8IS0tIGhhcmQgY29kZWQgbW9kYWwgbGlzdCAtLT4NCiA8ZGl2IGlkPSJtZW1EaXJNb2RhbCIgY2xhc3M9Im1vZGFsIGhpZGUgZmFkZSIgdGFiaW5kZXg9Ii0xIiByb2xlPSJkaWFsb2ciIGFyaWEtbGFiZWxsZWRieT0ibWVtRGlyTW9kYWxMYWJlbCIgYXJpYS1oaWRkZW49InRydWUiIHN0eWxlPSJkaXNwbGF5OiBub25lOyI+DQoJPGRpdiBjbGFzcz0ibW9kYWwtaGVhZGVyIj4NCgkJPGgzIGlkPSJtZW1EaXJNb2RhbExhYmVsIj4NCgkJCU1lbWJlciBEaXJlY3RvcnkNCgkJCQ0KCQk8L2gzPg0KCTwvZGl2Pg0KCTxkaXYgY2xhc3M9Im1vZGFsLWJvZHkiIHN0eWxlPSJtYXgtaGVpZ2h0OiA2NXZoOyI+DQoJCQk8cD48Yj5TdXBwbHkgQ2hhaW4gQ2FuYWRhIE9ubGluZSBNZW1iZXIgRGlyZWN0b3J5LVRlcm1zIGFuZCBDb25kaXRpb25zPC9iPjwvcD4NCgkJCUFjY2VzcyBhbmQgdXNlIG9mIHRoZSBTdXBwbHkgQ2hhaW4gQ2FuYWRhIE9ubGluZSBNZW1iZXIgRGlyZWN0b3J5IGZyb20gdGhpcyB3ZWJzaXRlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIGxpc3RlZCBiZWxvdy4gVGhlIFN1cHBseSBDaGFpbiBDYW5hZGEgcmVzZXJ2ZXMgdGhlIHJpZ2h0IHRvIGNoYW5nZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyB3aXRob3V0IG5vdGljZS48YnIgLz48YnIgLz4NCgkJCUlmIHlvdSByZWFkIGFuZCBhZ3JlZSB0byB0aGVzZSB0ZXJtcyBhbmQgY29uZGl0aW9ucywgY2xpY2sgdGhlICJJIEFHUkVFIiBidXR0b24gYmVsb3cuIElmIHlvdSBkaXNhZ3JlZSB3aXRoIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucywgY2xpY2sgdGhlICJJIERFQ0xJTkUiIGJ1dHRvbiBiZWxvdy48YnIgLz48YnIgLz4gDQoJCQkxLiBZb3UgbWF5IHVzZSB0aGUgU3VwcGx5IENoYWluIENhbmFkYSBPbmxpbmUgTWVtYmVyIERpcmVjdG9yeSB0byBhc3Npc3QgeW91IGluIGZpbmRpbmcgYSBTdXBwbHkgQ2hhaW4gQ2FuYWRhIG1lbWJlci48YnIgLz48YnIgLz4gDQoJCQkyLiBZb3UgbWF5IG5vdCB1c2UsIHJlcHJvZHVjZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSBvciBjb21tdW5pY2F0ZSBhbGwgb3IgYW55IHBhcnQgb2YgdGhlIFN1cHBseSBDaGFpbiBDYW5hZGEgT25saW5lIE1lbWJlciBEaXJlY3RvcnkgZXhjZXB0IGFzIGV4cHJlc3NseSBwZXJtaXR0ZWQgYnkgY2xhdXNlIDEuIEluIHBhcnRpY3VsYXIsIGJ1dCB3aXRob3V0IGxpbWl0aW5nIHRoZSBmb3JlZ29pbmcsIHlvdSBtYXkgbm90IHVzZSB0aGUgU3VwcGx5IENoYWluIENhbmFkYSBPbmxpbmUgTWVtYmVyIERpcmVjdG9yeSBmb3I6PGJyIC8+DQoJCQkoYSkgYW55IGNvbW1lcmNpYWwgcHVycG9zZXM7PGJyIC8+IA0KCQkJKGIpIGNyZWF0aW5nIG9yIGNvbXBpbGluZyBhbnkgZGlyZWN0b3J5IG9yIGFueSBtYWlsaW5nIGxpc3Q7PGJyIC8+IA0KCQkJKGMpIGluIGEgY29tcHV0ZXIgc2VydmljZSwgYXMgcGFydCBvZiBhIGZlZS1mb3Itc2VydmljZSwgY29weSBzZXJ2aWNlLCBvciBkb2N1bWVudCBkZWxpdmVyeSBzZXJ2aWNlOzxiciAvPiANCgkJCShkKSBmb3IgYW55IG90aGVyIHB1cnBvc2UgdGhhdCB3b3VsZCBiZSBzdXNjZXB0aWJsZSB0byBiZSB1c2VkIGFzIGEgc291cmNlIG9mIG9yIHN1YnN0aXR1dGUgZm9yIHRoZSBTdXBwbHkgQ2hhaW4gQ2FuYWRhIE9ubGluZSBNZW1iZXIgRGlyZWN0b3J5LjxiciAvPg0KCQkJQW55IG1lbWJlciB3aG8gYWJ1c2VzIGFjY2VzcyB0byB0aGlzIERpcmVjdG9yeSBtYXkgaGF2ZSB0aGVpciBhY2Nlc3Mgc3VzcGVuZGVkLjxiciAvPjxiciAvPiANCgkJCUlmIHlvdSBoYXZlIHJlYWQgYW5kIGFncmVlIHRvIHRoZXNlIHRlcm1zIGFuZCBjb25kaXRpb25zLCBwbGVhc2UgY2xpY2sgdGhlICJJIEFHUkVFIiBhbmQgY29udGludWUgdG8gdGhlIGRpcmVjdG9yeS48YnIgLz48YnIgLz4gDQoJCQlJZiB5b3UgZG8gbm90IGFncmVlIHRvIHRoZXNlIHRlcm1zIGFuZCBjb25kaXRpb25zLCBjbGljayAiSSBERUNMSU5FIiBhbmQgeW91IHdpbGwgYmUgcmVkaXJlY3RlZCB0byB0aGUgbWVtYmVyc2hpcCBob21lIHBhZ2UuIA0KCQkNCgk8L2Rpdj4NCgk8ZGl2IGNsYXNzPSJtb2RhbC1mb290ZXIiPg0KCQk8aW5wdXQgdHlwZT0iYnV0dG9uIiBjbGFzcz0iYnRuIiB2YWx1ZT0iSSBBR1JFRSIgZGF0YS1kaXNtaXNzPSJtb2RhbCIgYXJpYS1oaWRkZW49InRydWUiIG9uY2xpY2s9InJldHVybiBtZW1EaXJBZ3JlZSgpOyIgLz4NCgkJPGlucHV0IHR5cGU9ImJ1dHRvbiIgY2xhc3M9ImJ0biIgdmFsdWU9IkkgREVDTElORSIgZGF0YS1kaXNtaXNzPSJtb2RhbCIgYXJpYS1oaWRkZW49InRydWUiIG9uY2xpY2s9InJldHVybiBtZW1EaXJEaXNhZ3JlZSgpOyIgLz4NCgkJDQoJPC9kaXY+DQo8L2Rpdj4NCjxkaXYgaWQ9Im1lbURpck1vZGFsRnIiIGNsYXNzPSJtb2RhbCBoaWRlIGZhZGUiIHRhYmluZGV4PSItMSIgcm9sZT0iZGlhbG9nIiBhcmlhLWxhYmVsbGVkYnk9Im1lbURpck1vZGFsTGFiZWwiIGFyaWEtaGlkZGVuPSJ0cnVlIiBzdHlsZT0iZGlzcGxheTogbm9uZTsiPg0KCTxkaXYgY2xhc3M9Im1vZGFsLWhlYWRlciI+DQoJCTxoMyBpZD0ibWVtRGlyTW9kYWxMYWJlbCI+DQoJCQlSw6lwZXJ0b2lyZSBkZXMgbWVtYnJlcw0KCQk8L2gzPg0KCTwvZGl2Pg0KCTxkaXYgY2xhc3M9Im1vZGFsLWJvZHkiPg0KCQkJPHA+PGI+Q29uZGl0aW9ucyBkJ3V0aWxpc2F0aW9uIGRlIGwnYW5udWFpcmUgZW4gbGlnbmUgZGVzIG1lbWJyZXMgZGUgQ2hhw65uZSBkJ0FwcHJvdmlzaW9ubmVtZW50IENhbmFkYTwvYj48L3A+DQoJCQlMJ2FubnVhaXJlIGRlcyBtZW1icmVzIGRlIENoYcOubmUgZCdBcHByb3Zpc2lvbm5lbWVudCBDYW5hZGEgcGVybWV0IMOgIGNldXgtY2kgZGUgcmVjaGVyY2hlciBkJ2F1dHJlcyBtZW1icmVzIGV0IGQnZW50cmVyIGVuIHJlbGF0aW9uIGF2ZWMgZXV4LiBMJ2FjY8OocyBldCBsJ3V0aWxpc2F0aW9uIGRlIGwnYW5udWFpcmUgZW4gbGlnbmUgZGVzIG1lbWJyZXMgZGUgQ2hhw65uZSBkJ0FwcHJvdmlzaW9ubmVtZW50IENhbmFkYSDDoCBwYXJ0aXIgZGUgY2Ugc2l0ZSBXZWIgc29udCBhc3N1amV0dGlzIGF1eCBjb25kaXRpb25zIGQndXRpbGlzYXRpb24gcXVpIGZpZ3VyZW50IGNpLWRlc3NvdXMuIENoYcOubmUgZCdBcHByb3Zpc2lvbm5lbWVudCBDYW5hZGEgc2UgcsOpc2VydmUgbGUgZHJvaXQgZGUgbW9kaWZpZXIgbGVzIGNvbmRpdGlvbnMgZCd1dGlsaXNhdGlvbiBzYW5zIHByw6lhdmlzLjxiciAvPjxiciAvPg0KCQkJU2kgdm91cyBsaXNleiBsZXMgcHLDqXNlbnRlcyBjb25kaXRpb25zIGQndXRpbGlzYXRpb24gZXQgbGVzIGFjY2VwdGV6LCBjbGlxdWV6IHN1ciBsZSBib3V0b24gwqsgSidBQ0NFUFRFIMK7IGNpLWRlc3NvdXMuIFNpIHZvdXMgbifDqnRlcyBwYXMgZCdhY2NvcmQgYXZlYyBsZXMgcHLDqXNlbnRlcyBjb25kaXRpb25zIGQndXRpbGlzYXRpb24sIGNsaXF1ZXogc3VyIGxlIGJvdXRvbiDCqyBKRSBSRUZVU0UgwrsgY2ktZGVzc291cy48YnIgLz48YnIgLz4NCgkJCTEuIFZvdXMgcG91dmV6IHV0aWxpc2VyIGwnYW5udWFpcmUgZW4gbGlnbmUgZGVzIG1lbWJyZXMgZGUgQ2hhw65uZSBkJ0FwcHJvdmlzaW9ubmVtZW50IENhbmFkYSBwb3VyIHZvdXMgYWlkZXIgw6AgdHJvdXZlciB1biBtZW1icmUgZGUgQ2hhw65uZSBkJ0FwcHJvdmlzaW9ubmVtZW50IENhbmFkYS48YnIgLz48YnIgLz4NCgkJCTIuIFZvdXMgbmUgcG91dmV6IHBhcyB1dGlsaXNlciwgcmVwcm9kdWlyZSwgcHVibGllciwgZGlmZnVzZXIgb3UgdHJhbnNtZXR0cmUgbGEgdG90YWxpdMOpIG91IHVuZSBwYXJ0aWUgZGUgbCdhbm51YWlyZSBlbiBsaWduZSBkZXMgbWVtYnJlcyBkZSBDaGHDrm5lIGQnQXBwcm92aXNpb25uZW1lbnQgQ2FuYWRhLCBzYXVmIHNpIGxhIGNsYXVzZSAxIGxlIHBlcm1ldCBleHByZXNzw6ltZW50LiBFbiBwYXJ0aWN1bGllciwgbWFpcyBzYW5zIGxpbWl0ZXIgY2UgcXVpIHByw6ljw6hkZSwgdm91cyBuZSBwb3V2ZXogcGFzIHV0aWxpc2VyIGwnYW5udWFpcmUgZW4gbGlnbmUgZGVzIG1lbWJyZXMgZGUgQ2hhw65uZSBkJ0FwcHJvdmlzaW9ubmVtZW50IENhbmFkYSBhdXggZmlucyBzdWl2YW50ZXMgOjxiciAvPg0KCQkJKGEpIGRlcyBmaW5zIGNvbW1lcmNpYWxlczs8YnIgLz4gDQoJCQkoYikgbGEgY3LDqWF0aW9uIG91IGxhIGNvbXBpbGF0aW9uIGQndW4gYW5udWFpcmUgb3UgZCd1bmUgbGlzdGUgZCdlbnZvaTs8YnIgLz4gDQoJCQkoYykgZGFucyB1biBzZXJ2aWNlIGluZm9ybWF0aXF1ZSwgZGFucyBsZSBjYWRyZSBkJ3VuIHNlcnZpY2UgcGF5w6kgw6AgbCdhY3RlLCBkJ3VuIHNlcnZpY2UgZGUgY29waWUgb3UgZCd1biBzZXJ2aWNlIGRlIGxpdnJhaXNvbiBkZSBkb2N1bWVudHM7PGJyIC8+IA0KCQkJKGQpIHRvdXRlIGF1dHJlIGZpbiBxdWkgcG91cnJhaXQgw6p0cmUgdXRpbGlzw6llIGNvbW1lIHNvdXJjZSBvdSByZW1wbGFjZW1lbnQgcG91ciBsJ2FubnVhaXJlIGVuIGxpZ25lIGRlcyBtZW1icmVzIGRlIENoYcOubmUgZCdBcHByb3Zpc2lvbm5lbWVudCBDYW5hZGEuPGJyIC8+DQoJCQlMJ2FjY8OocyBkZSB0b3V0IG1lbWJyZSBxdWkgYWJ1c2UgZGUgc29uIGFjY8OocyBhdSBwcsOpc2VudCBhbm51YWlyZSBwb3VycmFpdCDDqnRyZSBzdXNwZW5kdS48YnIgLz48YnIgLz4NCgkJCVNpIHZvdXMgYXZleiBsdSBsZXMgcHLDqXNlbnRlcyBjb25kaXRpb25zIGQndXRpbGlzYXRpb24gZXQgbGVzIGFjY2VwdGV6LCB2ZXVpbGxleiBjbGlxdWVyIHN1ciBsZSBib3V0b24gwqsgSidBQ0NFUFRFIMK7IGNpLWRlc3NvdXMgZXQgdm91cyByZW5kcmUgw6AgbCdhbm51YWlyZS48YnIgLz48YnIgLz4NCgkJCVNpIHZvdXMgbidhY2NlcHRleiBwYXMgbGVzIHByw6lzZW50ZXMgY29uZGl0aW9ucyBkJ3V0aWxpc2F0aW9uLCBjbGlxdWV6IHN1ciBsZSBib3V0b24gwqsgSidBQ0NFUFRFIMK7IGNpLWRlc3NvdXMgZXQgdm91cyBzZXJleiByZW52b3nDqSDDoCBsYSBwYWdlIGQnYWNjdWVpbCBkZXMgbWVtYnJlcy4NCgk8L2Rpdj4NCgk8ZGl2IGNsYXNzPSJtb2RhbC1mb290ZXIiPg0KCQk8aW5wdXQgdHlwZT0iYnV0dG9uIiBjbGFzcz0iYnRuIiB2YWx1ZT0iSidBQ0NFUFRFIiBkYXRhLWRpc21pc3M9Im1vZGFsIiBhcmlhLWhpZGRlbj0idHJ1ZSIgb25jbGljaz0icmV0dXJuIG1lbURpckFncmVlKCk7IiAvPg0KCQk8aW5wdXQgdHlwZT0iYnV0dG9uIiBjbGFzcz0iYnRuIiB2YWx1ZT0iSkUgUkVGVVNFIiBkYXRhLWRpc21pc3M9Im1vZGFsIiBhcmlhLWhpZGRlbj0idHJ1ZSIgb25jbGljaz0icmV0dXJuIG1lbURpckRpc2FncmVlKCk7IiAvPg0KCTwvZGl2Pg0KPC9kaXY+DQoNCg0KPGRpdiBpZD0ibWVtRGlyRGVjbGluZWRNb2RhbCIgY2xhc3M9Im1vZGFsIGhpZGUgZmFkZSIgdGFiaW5kZXg9Ii0xIiByb2xlPSJkaWFsb2ciIGFyaWEtbGFiZWxsZWRieT0ibWVtRGlyRGVjbGluZWRNb2RhbExhYmVsIiBhcmlhLWhpZGRlbj0idHJ1ZSIgc3R5bGU9ImRpc3BsYXk6IG5vbmU7Ij4NCgk8ZGl2IGNsYXNzPSJtb2RhbC1oZWFkZXIiPg0KCQk8aDMgaWQ9Im1lbURpckRlY2xpbmVkTW9kYWxMYWJlbCI+DQoJCQlNZW1iZXIgRGlyZWN0b3J5DQoJCQkNCgkJPC9oMz4NCgk8L2Rpdj4NCgk8ZGl2IGNsYXNzPSJtb2RhbC1ib2R5Ij4NCgkJSXQgYXBwZWFycyB0aGF0IHlvdSBoYXZlIGRlY2xpbmVkIHRvIGFjY2VwdCB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgZm9yIHRoZSB1c2FnZSBvZiB0aGUgbWVtYmVyIGRpcmVjdG9yeS4gUGxlYXNlIGNsaWNrIE9LIHRvIGNsb3NlIHRoaXMgbWVzc2FnZS4NCgkJDQoJPC9kaXY+DQoJPGRpdiBjbGFzcz0ibW9kYWwtZm9vdGVyIj4JDQoJCTxpbnB1dCB0eXBlPSJidXR0b24iIGNsYXNzPSJidG4iIHZhbHVlPSJPSyIgZGF0YS1kaXNtaXNzPSJtb2RhbCIgYXJpYS1oaWRkZW49InRydWUiIC8+DQoJCQ0KCTwvZGl2Pg0KPC9kaXY+DQoNCjxkaXYgaWQ9Im1lbURpckRlY2xpbmVkTW9kYWxGciIgY2xhc3M9Im1vZGFsIGhpZGUgZmFkZSIgdGFiaW5kZXg9Ii0xIiByb2xlPSJkaWFsb2ciIGFyaWEtbGFiZWxsZWRieT0ibWVtRGlyRGVjbGluZWRNb2RhbExhYmVsIiBhcmlhLWhpZGRlbj0idHJ1ZSIgc3R5bGU9ImRpc3BsYXk6IG5vbmU7Ij4NCgk8ZGl2IGNsYXNzPSJtb2RhbC1oZWFkZXIiPg0KCQk8aDMgaWQ9Im1lbURpckRlY2xpbmVkTW9kYWxMYWJlbCI+DQoJCQlSw6lwZXJ0b2lyZSBkZXMgbWVtYnJlcw0KCQk8L2gzPg0KCTwvZGl2Pg0KCTxkaXYgY2xhc3M9Im1vZGFsLWJvZHkiPg0KCQkJSWwgc2VtYmxlIHF1ZSB2b3VzIGF2ZXogcmVmdXPDqSBkJ2FjY2VwdGVyIGxlcyBtb2RhbGl0w6lzIGV0IGxlcyBjb25kaXRpb25zIGQndXRpbGlzYXRpb24gcG91ciBsJ2FubnVhaXJlIGRlcyBtZW1icmVzLiBDbGlxdWV6IHN1ciBPSyBwb3VyIGZlcm1lciBjZSBtZXNzYWdlLg0KCTwvZGl2Pg0KCTxkaXYgY2xhc3M9Im1vZGFsLWZvb3RlciI+CQ0KCQk8aW5wdXQgdHlwZT0iYnV0dG9uIiBjbGFzcz0iYnRuIiB2YWx1ZT0iT0siIGRhdGEtZGlzbWlzcz0ibW9kYWwiIGFyaWEtaGlkZGVuPSJ0cnVlIiAvPg0KCTwvZGl2Pg0KPC9kaXY+DQoNCjxkaXYgaWQ9InNjbWFMZWFybmluZ01vZGFsIiBjbGFzcz0ibW9kYWwgaGlkZSBmYWRlIiB0YWJpbmRleD0iLTEiIHJvbGU9ImRpYWxvZyIgYXJpYS1sYWJlbGxlZGJ5PSJzY21hTGVhcm5pbmdNb2RhbExhYmVsIiBhcmlhLWhpZGRlbj0idHJ1ZSIgc3R5bGU9ImRpc3BsYXk6IG5vbmU7Ij4NCgk8ZGl2IGNsYXNzPSJtb2RhbC1oZWFkZXIiPg0KCQk8aDMgaWQ9InNjbWFMZWFybmluZ01vZGFsTGFiZWwiPk9ubGluZSBMZWFybmluZzwvaDM+DQoJPC9kaXY+DQoJPGRpdiBjbGFzcz0ibW9kYWwtYm9keSI+DQoJCTxwPldlbGNvbWUgdG8gU3VwcGx5IENoYWluIENhbmFkYSdzIG9ubGluZSBsZWFybmluZyBTdXBwbHkgQ2hhaW4gTWFuYWdlbWVudCBQcm9mZXNzaW9uYWwgKFNDTVApIHByb2dyYW0uIEluIG9yZGVyIHRvIGVucm9sbCBpbiBhbnkgb2YgdGhlIHByb2dyYW0gbW9kdWxlcywgeW91IG11c3QgZmlyc3QgYmUgYWRtaXR0ZWQgdG8gdGhlIFNDTVAgcHJvZ3JhbS4gSWYgeW91IG1lZXQgdGhlIHF1YWxpZnlpbmcgPGEgaHJlZj0iaHR0cDovL3NjbWEuY29tL2VuL2VkdWNhdGlvbi1hY2NyZWRpdGF0aW9uL3NjbXAtZGVzaWduYXRpb24tcHJvZ3JhbSNwcmUtcmVxdWlzaXRlcy1hbmQtYWRtaXNzaW9uIiB0YXJnZXQ9Il9ibGFuayI+cHJlLXJlcXVpc2l0ZXM8L2E+LCBwbGVhc2UgY29udGFjdCB5b3VyIDxhIGhyZWY9Imh0dHA6Ly9zY21hLmNvbS9lbi9hYm91dC1zY21hL2pvaW4tc2NtYS9zY21hLWluc3RpdHV0ZXMiIHRhcmdldD0iX2JsYW5rIj5Qcm92aW5jaWFsIEluc3RpdHV0ZTwvYT4gZm9yIHByb2dyYW0gYWRtaXNzaW9uLjwvcD4NCgk8L2Rpdj4NCgk8ZGl2IGNsYXNzPSJtb2RhbC1mb290ZXIiPg0KCQk8aW5wdXQgdHlwZT0iYnV0dG9uIiBjbGFzcz0iYnRuIiB2YWx1ZT0iQ2xvc2UiIGRhdGEtZGlzbWlzcz0ibW9kYWwiIGFyaWEtaGlkZGVuPSJ0cnVlIiAvPg0KCQkNCgk8L2Rpdj4NCjwvZGl2Pg0KDQo8ZGl2IGlkPSJzY21hTGVhcm5pbmdNb2RhbC1mciIgY2xhc3M9Im1vZGFsIGhpZGUgZmFkZSIgdGFiaW5kZXg9Ii0xIiByb2xlPSJkaWFsb2ciIGFyaWEtbGFiZWxsZWRieT0ic2NtYUxlYXJuaW5nTW9kYWxMYWJlbCIgYXJpYS1oaWRkZW49InRydWUiIHN0eWxlPSJkaXNwbGF5OiBub25lOyI+DQoJPGRpdiBjbGFzcz0ibW9kYWwtaGVhZGVyIj4NCgkJPGgzIGlkPSJzY21hTGVhcm5pbmdNb2RhbExhYmVsIj5BcHByZW50aXNzYWdlIGVuIGxpZ25lPC9oMz4NCgk8L2Rpdj4NCgk8ZGl2IGNsYXNzPSJtb2RhbC1ib2R5Ij4NCgkJPHA+QmllbnZlbnVlIGF1IHByb2dyYW1tZSBkZSBwcm9mZXNzaW9ubmVsIGRlIGxhIGdlc3Rpb24gZGUgbGEgY2hhaW5lIGQnYXBwcm92aXNpb25uZW1lbnQgKHAuZy5jLmEuKSBlbiBsaWduZS4gUG91ciB2b3VzIGluc2NyaXJlIMOgIGwndW4gZGVzIG1vZHVsZXMgZHUgcHJvZ3JhbW1lLCB2b3VzIGRldmV6IGQnYWJvcmQgw6p0cmUgYWRtaXMgYXUgcHJvZ3JhbW1lIHAuZy5jLmEuIFNpIHZvdXMgcsOpcG9uZGV6IGF1eCBjb25kaXRpb25zIDxhIGhyZWY9Imh0dHA6Ly9zY21hLmNvbS9mci9mb3JtYXRpb24tZXQtYWNjcmVkaXRhdGlvbi1mci9wLWctYy1hI2NvbmRpdGlvbnMiIHRhcmdldD0iX2JsYW5rIj5wcsOpYWxhYmxlcyByZXF1aXNlczwvYT4sIHZldWlsbGV6IGNvbW11bmlxdWVyIGF2ZWMgdm90cmUgPGEgaHJlZj0iaHR0cDovL3NjbWEuY29tL2ZyL2EtcHJvcG9zL2FkaGVzaW9uLWEtbC1hZ2NhL2NvcnBvcmF0aW9ucy1kZS1sLWFnY2EiIHRhcmdldD0iX2JsYW5rIj5pbnN0aXR1dCBwcm92aW5jaWFsPC9hPiBwb3VyIGwnYWRtaXNzaW9uIGF1IHByb2dyYW1tZS48L3A+DQoJPC9kaXY+DQoJPGRpdiBjbGFzcz0ibW9kYWwtZm9vdGVyIj4NCgkJPGlucHV0IHR5cGU9ImJ1dHRvbiIgY2xhc3M9ImJ0biIgdmFsdWU9IkNsb3NlIiBkYXRhLWRpc21pc3M9Im1vZGFsIiBhcmlhLWhpZGRlbj0idHJ1ZSIgLz4NCgkJDQoJPC9kaXY+DQo8L2Rpdj4NCg0KDQoNCjxkaXYgaWQ9ImFsZXJ0LWZpbGwtb3V0IiBjbGFzcz0ibW9kYWwgaGlkZSBmYWRlIj4NCiAgPGRpdiBjbGFzcz0ibW9kYWwtYm9keSI+DQogICAgUGxlYXNlIGZpbGwgb3V0IGFsbCByZXF1aXJlZCBmaWVsZHMNCiAgPC9kaXY+DQogIDxkaXYgY2xhc3M9Im1vZGFsLWZvb3RlciI+DQogICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iIGRhdGEtZGlzbWlzcz0ibW9kYWwiIGNsYXNzPSJidG4gYnRuLXByaW1hcnkiIGRhdGEtdmFsdWU9IjEiPk9LPC9idXR0b24+DQogIDwvZGl2Pg0KPC9kaXY+DQoNCjxkaXYgaWQ9ImFsZXJ0LWNwZC1maWxsZWQiIGNsYXNzPSJtb2RhbCBoaWRlIGZhZGUiPg0KICA8ZGl2IGNsYXNzPSJtb2RhbC1ib2R5Ij4NCiAgICBDUEQgQWN0aXZpdHkgc3VibWl0dGVkLg0KICA8L2Rpdj4NCiAgPGRpdiBjbGFzcz0ibW9kYWwtZm9vdGVyIj4NCiAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgZGF0YS1kaXNtaXNzPSJtb2RhbCIgY2xhc3M9ImJ0biBidG4tcHJpbWFyeSIgZGF0YS12YWx1ZT0iMSIgb25jbGljaz0ibG9jYXRpb24ucmVsb2FkKCk7Ij5PSzwvYnV0dG9uPg0KICA8L2Rpdj4NCjwvZGl2Pg0KDQo8ZGl2IGlkPSJhbGVydC1mYWlsIiBjbGFzcz0ibW9kYWwgaGlkZSBmYWRlIj4NCiAgPGRpdiBjbGFzcz0ibW9kYWwtYm9keSI+DQogICAgRmFpbGVkIHRvIGluc2VydCBkYXRhDQogIDwvZGl2Pg0KICA8ZGl2IGNsYXNzPSJtb2RhbC1mb290ZXIiPg0KICAgIDxidXR0b24gdHlwZT0iYnV0dG9uIiBkYXRhLWRpc21pc3M9Im1vZGFsIiBjbGFzcz0iYnRuIGJ0bi1wcmltYXJ5IiBkYXRhLXZhbHVlPSIxIj5PSzwvYnV0dG9uPg0KICA8L2Rpdj4NCjwvZGl2Pg0KDQo8ZGl2IGlkPSJhbGVydC1yZW5ld2FsIiBjbGFzcz0ibW9kYWwgaGlkZSBmYWRlIj4NCiAgPGRpdiBjbGFzcz0ibW9kYWwtYm9keSI+DQogICAgPGRpdiBzdHlsZT0iZGlzcGxheTogaW5saW5lLWJsb2NrOyB3aWR0aDogMjUlOyB2ZXJ0aWNhbC1hbGlnbjogdG9wOyI+UGxlYXNlIGNvbnRhY3Q6PC9kaXY+DQogICAgPGRpdiBzdHlsZT0iZGlzcGxheTogaW5saW5lLWJsb2NrOyB3aWR0aDogNzQlOyBsaW5lLWhlaWdodDogMjRweDsiPjxzcGFuIGlkPSJwLWVudGl0eS1pbmZvIiBzdHlsZT0iZm9udC13ZWlnaHQ6IGJvbGQ7Ij48L3NwYW4+IHRvIHJlbmV3LiBUaGFuayB5b3UuPC9kaXY+DQogIDwvZGl2Pg0KICA8ZGl2IGNsYXNzPSJtb2RhbC1mb290ZXIiPg0KICAgIDxidXR0b24gdHlwZT0iYnV0dG9uIiBkYXRhLWRpc21pc3M9Im1vZGFsIiBjbGFzcz0iYnRuIGJ0bi1wcmltYXJ5IiBkYXRhLXZhbHVlPSIxIj5PSzwvYnV0dG9uPg0KICA8L2Rpdj4NCjwvZGl2Pg0KDQo8ZGl2IGlkPSJhbGVydC1yZW5ld2FsLWZyIiBjbGFzcz0ibW9kYWwgaGlkZSBmYWRlIj4NCiAgPGRpdiBjbGFzcz0ibW9kYWwtYm9keSI+DQogICAgPGRpdiBzdHlsZT0iZGlzcGxheTogaW5saW5lLWJsb2NrOyB3aWR0aDogNDAlOyB2ZXJ0aWNhbC1hbGlnbjogdG9wOyI+UG91ciByZW5vdXZlbGVyIHZvdHJlIGFkaMOpc2lvbiB2ZXVpbGxleiBjb250YWN0ZXI6PC9kaXY+DQogICAgPGRpdiBzdHlsZT0iZGlzcGxheTogaW5saW5lLWJsb2NrOyB3aWR0aDogNTklOyBsaW5lLWhlaWdodDogMjRweDsiPjxzcGFuIGlkPSJwLWVudGl0eS1pbmZvIiBzdHlsZT0iZm9udC13ZWlnaHQ6IGJvbGQ7Ij48L3NwYW4+LiBNZXJjaS48L2Rpdj4NCiAgPC9kaXY+DQogIDxkaXYgY2xhc3M9Im1vZGFsLWZvb3RlciI+DQogICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iIGRhdGEtZGlzbWlzcz0ibW9kYWwiIGNsYXNzPSJidG4gYnRuLXByaW1hcnkiIGRhdGEtdmFsdWU9IjEiPkQnYWNjb3JkPC9idXR0b24+DQogIDwvZGl2Pg0KPC9kaXY+DQoNCjwhLS0gKioqKioqTU9EQUwgTElTVCBFTkQqKioqKiogLS0+IA0KDQoJDQoJDQoJDQoJCTxzY3JpcHQ+DQoJCSAgKGZ1bmN0aW9uKGkscyxvLGcscixhLG0pe2lbJ0dvb2dsZUFuYWx5dGljc09iamVjdCddPXI7aVtyXT1pW3JdfHxmdW5jdGlvbigpew0KCQkgIChpW3JdLnE9aVtyXS5xfHxbXSkucHVzaChhcmd1bWVudHMpfSxpW3JdLmw9MSpuZXcgRGF0ZSgpO2E9cy5jcmVhdGVFbGVtZW50KG8pLA0KCQkgIG09cy5nZXRFbGVtZW50c0J5VGFnTmFtZShvKVswXTthLmFzeW5jPTE7YS5zcmM9ZzttLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGEsbSkNCgkJICB9KSh3aW5kb3csZG9jdW1lbnQsJ3NjcmlwdCcsJ2h0dHBzOi8vd3d3Lmdvb2dsZS1hbmFseXRpY3MuY29tL2FuYWx5dGljcy5qcycsJ2dhJyk7DQoJCQ0KCQkgIGdhKCdjcmVhdGUnLCAnVUEtMTAxNDA3NzgxLTEnLCAnYXV0bycpOw0KCQkgIGdhKCdzZW5kJywgJ3BhZ2V2aWV3Jyk7DQoJCQkNCgkJPC9zY3JpcHQ+DQoJDQoJCTwhLS0gR29vZ2xlIFRhZyBNYW5hZ2VyIC0tPg0KCQk8c2NyaXB0PihmdW5jdGlvbih3LGQscyxsLGkpe3dbbF09d1tsXXx8W107d1tsXS5wdXNoKHsnZ3RtLnN0YXJ0JzoNCgkJbmV3IERhdGUoKS5nZXRUaW1lKCksZXZlbnQ6J2d0bS5qcyd9KTt2YXIgZj1kLmdldEVsZW1lbnRzQnlUYWdOYW1lKHMpWzBdLA0KCQlqPWQuY3JlYXRlRWxlbWVudChzKSxkbD1sIT0nZGF0YUxheWVyJz8nJmw9JytsOicnO2ouYXN5bmM9dHJ1ZTtqLnNyYz0NCgkJJ2h0dHBzOi8vd3d3Lmdvb2dsZXRhZ21hbmFnZXIuY29tL2d0bS5qcz9pZD0nK2krZGw7Zi5wYXJlbnROb2RlLmluc2VydEJlZm9yZShqLGYpOw0KCQl9KSh3aW5kb3csZG9jdW1lbnQsJ3NjcmlwdCcsJ2RhdGFMYXllcicsJ0dUTS1ONkJWS1A5Jyk7PC9zY3JpcHQ+DQoJCTwhLS0gRW5kIEdvb2dsZSBUYWcgTWFuYWdlciAtLT4NCgkNCgk8L2hlYWQ+DQo8Ym9keT4NCgkNCgkJPCEtLSBHb29nbGUgVGFnIE1hbmFnZXIgKG5vc2NyaXB0KSAtLT4NCgkJPG5vc2NyaXB0PjxpZnJhbWUgc3JjPSJodHRwczovL3d3dy5nb29nbGV0YWdtYW5hZ2VyLmNvbS9ucy5odG1sP2lkPUdUTS1ONkJWS1A5Ig0KCQloZWlnaHQ9IjAiIHdpZHRoPSIwIiBzdHlsZT0iZGlzcGxheTpub25lO3Zpc2liaWxpdHk6aGlkZGVuIj48L2lmcmFtZT48L25vc2NyaXB0Pg0KCQk8IS0tIEVuZCBHb29nbGUgVGFnIE1hbmFnZXIgKG5vc2NyaXB0KSAtLT4NCgkNCg0KCTxkaXYgY2xhc3M9ImNvbnRhaW5lciI+DQoJCQ0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KPGRpdiBjbGFzcz0iZGl2LWhlYWRlciI+DQoJPHN0eWxlPjwhLS0NCi50aXRsZS1sb2dvLCAjcG9ydGFsLWljb25zIHsNCgkJbWF4LXdpZHRoOiAxMDAwcHg7DQoJCXdpZHRoOiAxMDAlOw0KCQlsZXR0ZXItc3BhY2luZzogMnB4Ow0KCQltYXJnaW46IGF1dG87DQoJfQ0KCQ0KCSNkaXYtdG9wLWxpbmtzIHsNCgkJd2lkdGg6IDEwMCU7DQoJCWhlaWdodDogMzRweDsNCgkJZGlzcGxheTogZmxleDsNCiAgICAJYWxpZ24taXRlbXM6IGNlbnRlcjsNCiAgICAJanVzdGlmeS1jb250ZW50OiBmbGV4LWVuZDsNCiAgICAJbWFyZ2luOiBhdXRvOw0KICAgIAliYWNrZ3JvdW5kLWNvbG9yOiNFRDFDMjQ7DQoJfQ0KCSNkaXYtdG9wLWxpbmtzIHVsIHsNCgkJZGlzcGxheTogZmxleDsNCgkJanVzdGlmeS1jb250ZW50OiBmbGV4LWVuZDsNCgkJZmxleC13cmFwOiB3cmFwOw0KCX0NCgkjZGl2LXRvcC1saW5rcyB1bCBsaSB7DQoJCW1hcmdpbi1sZWZ0OiA1cHg7DQoJCW1hcmdpbi1yaWdodDogNXB4Ow0KCX0NCgkjZGl2LXRvcC1saW5rcyB1bCBsaSBhIHsNCgkJY29sb3I6ICNmZmY7DQoJCWZvbnQtc2l6ZTogMTBweDsNCiAgICAJbGV0dGVyLXNwYWNpbmc6IDFweDsNCiAgICAJdGV4dC1kZWNvcmF0aW9uOiBub25lOw0KCX0NCgkNCgkjZGl2LXRvcC1saW5rcyB1bCBsaSBhOmhvdmVyIHsNCiAgICAJdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7DQoJfQ0KCQ0KCSNkaXYtdG9wLWxpbmtzIC5pbmFjdGl2ZSB7DQoJCWNvbG9yOiAjZmZmOw0KCX0NCiAgICAgICAgI2Rpdi1zaWduaW4taWQgew0KCQltYXgtd2lkdGg6IDEwMDBweDsNCgkJd2lkdGg6IDEwMCU7DQogICAgCSAgICAgICAgbWFyZ2luOiBhdXRvOw0KICAgICAgICAgICAgICAgIHRleHQtYWxpZ246IHJpZ2h0Ow0KICAgICAgICB9DQoJI3RpdGxlLXdyYXBwZXIgew0KCQlwb3NpdGlvbjogcmVsYXRpdmU7DQoJCWhlaWdodDogMTYwcHg7DQoJfQ0KICAgIC50aXRsZS13cmFwcGVyLXJpZ2h0LXBhcnQgew0KCSAgICBwb3NpdGlvbjogYWJzb2x1dGU7DQoJICAgIHdpZHRoOiA0MCU7DQoJICAgIGhlaWdodDogMTAwJTsNCgkgICAgdG9wOiAwOw0KCSAgICByaWdodDogMDsNCgkgICAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjsNCgkgICAgei1pbmRleDogLTE7DQoJfQ0KCS50aXRsZS13cmFwcGVyLWxlZnQtcGFydCB7DQoJICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsNCgkgICAgd2lkdGg6IDQwJTsNCgkgICAgaGVpZ2h0OiA2NXB4Ow0KCSAgICBib3R0b206IDA7DQoJICAgIGxlZnQ6IDA7DQoJICAgIGJhY2tncm91bmQtY29sb3I6ICNmZmY7DQoJICAgIHotaW5kZXg6IC0xOw0KCX0NCgkudGl0bGUtbG9nby10b3Agew0KCQloZWlnaHQ6IDk2cHg7DQoJCWRpc3BsYXk6IGZsZXg7DQoJCWp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjsNCgkJYWxpZ24taXRlbXM6IGNlbnRlcjsNCgl9DQoJLnRpdGxlLWxvZ28tYm90dG9tIHsNCgkJaGVpZ2h0OiA2NHB4Ow0KCQlkaXNwbGF5OiBmbGV4Ow0KICAgIAlqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtZW5kOw0KCX0NCgkNCgkudGl0bGVfX2JvdHRvbV9fc29jaWFsbGlua3Mgew0KCQltYXJnaW46IDBweDsNCgkJcGFkZGluZzogMHB4Ow0KCQlkaXNwbGF5OiBmbGV4Ow0KCX0NCgkudGl0bGVfX2JvdHRvbV9fc29jaWFsbGlua3MgbGkgew0KCQltYXJnaW4tbGVmdDogMTVweDsNCiAgICAJbWFyZ2luLXJpZ2h0OiAxNXB4Ow0KCX0NCgkNCgkubGFuZy1pbmxpbmUgew0KCQltYXJnaW46IDBweDsNCgl9DQoJI2xvZ29fbGluayB7DQpwYWRkaW5nLWxlZnQ6MTVweDsNCnBhZGRpbmctdG9wOjYwcHg7DQp9DQojZGl2LXNpZ25pbi1pZCB7DQoJCXRleHQtYWxpZ246IHJpZ2h0Ow0KCX0NCg0KCUBtZWRpYSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6IDEwMDBweCkgew0KCSAgICAudGl0bGUtd3JhcHBlci1yaWdodC1wYXJ0LCAudGl0bGUtd3JhcHBlci1sZWZ0LXBhcnQsIC50aXRsZV9fYm90dG9tX19zb2NpYWxsaW5rcywgLmxvZ28tdGV4dCB7DQoJICAgIAlkaXNwbGF5OiBub25lOw0KCSAgICB9DQoJfQ0KCQ0KCUBtZWRpYSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6IDc2OHB4KSB7DQoJICAgIC5jb250YWluTmF2Lm1lbnUtaWNvbi1iYWNrZ3JvdW5kIHsNCgkgICAgCWRpc3BsYXk6IGZsZXggIWltcG9ydGFudDsNCgkgICAgfQ0KI2Rpdi10b3AtbGlua3MuY29udGFpbk5hdiB7DQoJICAgIAlqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW4gIWltcG9ydGFudDsNCgkgICAgfQ0KI2Rpdi1zaWduaW4taWQgew0KCSAgICAJZGlzcGxheTogZmxleCAhaW1wb3J0YW50Ow0KICAgIHBhZGRpbmc6IDA7DQogICAganVzdGlmeS1jb250ZW50OiBmbGV4LWVuZDsNCiAgICBjb2xvcjogI2ZmZjsNCiAgICBmb250LXNpemU6IDEwcHg7DQogICAgbGV0dGVyLXNwYWNpbmc6IDFweDsNCnBhZGRpbmctcmlnaHQ6IDE1cHg7DQogICAgYm94LXNpemluZzogYm9yZGVyLWJveDsNCgkgICAgfQ0KI2xpLXNpZ25pbi1pZCB7DQoJICAgIAlkaXNwbGF5OiBub25lOw0KCSAgICB9DQoNCiNkaXYtdG9wLWxpbmtzIHsNCmp1c3RpZnktY29udGVudDogZmxleC1lbmQ7DQp9DQoJfQkgDQoJDQoJLm1lbnUtaWNvbi1iYWNrZ3JvdW5kIHsNCgkgICAgZGlzcGxheTogZmxleDsNCgkgICAgZmxleC1mbG93OiByb3cgd3JhcDsNCgkgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsNCgkgICAgcGFkZGluZy10b3A6IDRweDsNCgkgICAgcGFkZGluZy1ib3R0b206IDRweDsNCgkgICAgcGFkZGluZy1sZWZ0OiAzcHg7DQoJICAgIHBhZGRpbmctcmlnaHQ6IDNweDsNCgkgICAgaGVpZ2h0OiAxNnB4Ow0KCSAgICB3aWR0aDogMThweDsNCgkgICAgbWFyZ2luLXJpZ2h0OiAxNXB4Ow0KICAgIAltYXJnaW4tbGVmdDogMTVweDsNCgl9DQoJLmJhciB7DQoJICAgIHdpZHRoOiAyNHB4Ow0KCSAgICBoZWlnaHQ6IDJweDsNCgkgICAgYm9yZGVyLXJhZGl1czogMnB4Ow0KCSAgICBiYWNrZ3JvdW5kOiAjMDA3MThmOw0KCX0NCgkub25lIHsNCgkJd2lkdGg6IDEwMCU7DQoJICAgIHRvcDogMTRweDsNCgkgICAgbGVmdDogMTBweDsNCgl9DQoJLnR3byB7DQoJCXdpZHRoOiAxMDAlOw0KCSAgICB0b3A6IDdweDsNCgkgICAgbGVmdDogMHB4Ow0KCX0NCgkudGhyZWUgew0KCQl3aWR0aDogMTAwJTsNCgkgICAgdG9wOiA3cHg7DQoJICAgIGxlZnQ6IDBweDsNCgl9DQotLT48L3N0eWxlPg0KPGRpdiBjbGFzcz0iaGVhZGVyLWNvbnRhaW5lciI+DQo8ZGl2IGlkPSJkaXYtdG9wLWxpbmtzIj4NCjxkaXYgaWQ9ImhhbU1lbnUiIGNsYXNzPSJtZW51LWljb24tYmFja2dyb3VuZCIgc3R5bGU9ImRpc3BsYXk6IG5vbmU7Ij4NCjxkaXYgY2xhc3M9ImJhciBvbmUiPjwvZGl2Pg0KPGRpdiBjbGFzcz0iYmFyIHR3byI+PC9kaXY+DQo8ZGl2IGNsYXNzPSJiYXIgdGhyZWUiPjwvZGl2Pg0KPC9kaXY+DQo8dWwgY2xhc3M9ImxhbmctaW5saW5lIj48bGk+PGEgaWQ9J2xhbmctZW4nIGhyZWY9JyMnPkVOR0xJU0g8L2E+PC9saT48bGk+PGEgaWQ9J2xhbmctZnInIGhyZWY9JyMnIGNsYXNzPSdpbmFjdGl2ZSc+RlJBTsOHQUlTPC9hPjwvbGk+PC91bD4NCjwvZGl2Pg0KPGRpdiBpZD0iZGl2LXNpZ25pbi1pZCIgY2xhc3M9Im1lbnUtaWNvbi1iYWNrZ3JvdW5kIiBzdHlsZT0iZGlzcGxheTogbm9uZTsiPjwvZGl2Pg0KPGRpdiBpZD0idGl0bGUtd3JhcHBlciI+DQo8ZGl2IGNsYXNzPSJ0aXRsZS13cmFwcGVyLWxlZnQtcGFydCI+PC9kaXY+DQo8ZGl2IGNsYXNzPSJ0aXRsZS13cmFwcGVyLXJpZ2h0LXBhcnQiPjwvZGl2Pg0KPGRpdiBjbGFzcz0idGl0bGUtbG9nbyI+DQo8ZGl2IGNsYXNzPSJ0aXRsZS1sb2dvLXRvcCI+PGEgaWQ9ImxvZ29fbGluayIgaHJlZj0iL3BvcnRhbC1ob21lIiBzdHlsZT0iei1pbmRleDogLTE7Ij4gPCEtLSAkaHRtbFNjbWFMb2dvIC0tPiA8aW1nIGlkPSJoZWFkZXItbG9nbyIgc3JjPSIvbXBvd2VyL2NtczIvaW1nL3NjbWFfbG9nb190YWdfMjUwLnBuZyIgLz4gPC9hPiA8c3BhbiBjbGFzcz0ibG9nby10ZXh0LTEiIHN0eWxlPSJmb250LXNpemU6IDM1cHg7IGNvbG9yOiAjMDAwOyBsZXR0ZXItc3BhY2luZzogMTJweDsiPlBvcnRhbDwvc3Bhbj48L2Rpdj4NCjxkaXYgY2xhc3M9InRpdGxlLWxvZ28tYm90dG9tIj4NCjx1bCBjbGFzcz0idGl0bGVfX2JvdHRvbV9fc29jaWFsbGlua3MiPg0KPGxpPjxhIGhyZWY9Imh0dHBzOi8vd3d3LmZhY2Vib29rLmNvbS9zdXBwbHktY2hhaW4tY2FuYWRhIiB0YXJnZXQ9Il9ibGFuayIgcmVsPSJub29wZW5lciBub3JlZmVycmVyIj4gPGltZyBzcmM9Ii9tcG93ZXIvY21zMi9pbWcvaWNvbi1mYWNlYm9vay0zMl9ibGFjay5wbmciIC8+PC9hPjwvbGk+DQo8bGk+PGEgaHJlZj0iaHR0cHM6Ly93d3cubGlua2VkaW4uY29tL2NvbXBhbnkvc3VwcGx5LWNoYWluLWNhbmFkYSIgdGFyZ2V0PSJfYmxhbmsiIHJlbD0ibm9vcGVuZXIgbm9yZWZlcnJlciI+IDxpbWcgc3JjPSIvbXBvd2VyL2NtczIvaW1nL2ljb24tbGlua2VkaW4tMzJfYmxhY2sucG5nIiAvPjwvYT48L2xpPg0KPGxpPjxhIGhyZWY9Imh0dHBzOi8vdHdpdHRlci5jb20vc3VwcGx5LWNoYWluLWNhIiB0YXJnZXQ9Il9ibGFuayIgcmVsPSJub29wZW5lciBub3JlZmVycmVyIj4gPGltZyBzcmM9Ii9tcG93ZXIvY21zMi9pbWcvaWNvbi10d2l0dGVyLTMyX2JsYWNrLnBuZyIgLz48L2E+PC9saT4NCjwvdWw+DQo8c3BhbiBjbGFzcz0ibG9nby10ZXh0LTIiIHN0eWxlPSJmb250LXNpemU6IDM1cHg7IGNvbG9yOiAjMDAwOyBsZXR0ZXItc3BhY2luZzogMTJweDsgZGlzcGxheTogbm9uZTsgbWFyZ2luLWxlZnQ6IDI4MHB4OyI+UG9ydGFsPC9zcGFuPjwvZGl2Pg0KPC9kaXY+DQo8L2Rpdj4NCjwvZGl2Pg0KCQ0KCQ0KPC9kaXY+DQoNCjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4NCgkkKCBkb2N1bWVudCApLnJlYWR5KGZ1bmN0aW9uKCkgew0KCQkkKCIjbGFuZy1lbiIpLmF0dHIoICJocmVmIiwgIi8iK2xvY2FsU3RvcmFnZS5nZXRJdGVtKCJzY21hLWxhbmctc2V0dGluZyIpKyIvcG9ydGFsbG9naW4iICkNCgkJJCgiI2xhbmctZnIiKS5hdHRyKCAiaHJlZiIsICIvIitsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgic2NtYS1sYW5nLXNldHRpbmciKSsiL3BvcnRhbGxvZ2luIiApDQoJCQ0KCQl2YXIgbGFuZ0NoayA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCJzY21hLWxhbmctc2V0dGluZyIpOw0KCSAJaWYgKGxhbmdDaGsgPT0gbnVsbCB8fCBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgic2NtYS1sYW5nLXNldHRpbmciKSA9PSAiZW4iKSB7DQoJIAkJJCgiI2xhbmctZW4iKS5yZW1vdmVDbGFzcygiaW5hY3RpdmUiKTsNCgkJCSQoIiNsYW5nLWZyIikuYWRkQ2xhc3MoImluYWN0aXZlIik7DQoJIAl9IGVsc2Ugew0KCSAJCSQoIiNsYW5nLWVuIikuYWRkQ2xhc3MoImluYWN0aXZlIik7DQoJCQkkKCIjbGFuZy1mciIpLnJlbW92ZUNsYXNzKCJpbmFjdGl2ZSIpOw0KCSAJfQ0KCQkJDQoJCXZhciBsb2NhbGUgPSAiZW4iCQ0KCQkNCgkJaWYgKGxvY2FsZSA9PT0gImZyIikgew0KCQkJJCgiI3NpZ24tb3V0LWZyIikuc2hvdygpOwkJCQ0KCQl9IGVsc2Ugew0KCQkJJCgiI3NpZ24tb3V0Iikuc2hvdygpOw0KCQl9DQoJCSQoIi5sYW5nLWlubGluZSIpLnNob3coKTsNCgkJDQoJCQ0KCQkkKCIjbGFuZy1lbiIpLmNsaWNrKGZ1bmN0aW9uKGUpew0KCQkJDQoJCQkvKiB2YXIgaXNMb2NhbFRlc3QgPSBmYWxzZTsNCgkJCXZhciB0bXAgPSAibXBvd2VyIjsNCgkJCWlmICh3aW5kb3cubG9jYXRpb24uaHJlZi5pbmNsdWRlcygibG9jYWxob3N0IikpIHsNCgkJCQlpc0xvY2FsVGVzdCA9IHRydWU7DQoJCQkJdG1wID0gIm1wb3dlcjhQTUFDIjsNCgkJCX0gKi8NCgkJCQ0KCQkJJCgiI2xhbmctZW4iKS5yZW1vdmVBdHRyKCAiaHJlZiIgKTsNCgkJCQ0KCQkJbG9jYWxTdG9yYWdlLnNldEl0ZW0oInNjbWEtbGFuZy1zZXR0aW5nIiwgImVuIik7DQoJCQkNCgkJCXZhciB1cmwgPSB3aW5kb3cubG9jYXRpb24uaHJlZjsNCgkJCQ0KCQkJdmFyIGFyclVybCA9IHVybC5zcGxpdCgiLyIpOw0KCQkJdmFyIHBhcmFtID0gYXJyVXJsW2FyclVybC5sZW5ndGgtMV07DQoJCQlpZiAocGFyYW0uc2xpY2UoLTEpID09ICIjIikgew0KCQkJCXBhcmFtID0gcGFyYW0uc3Vic3RyaW5nKDAsIHBhcmFtLmxlbmd0aC0xKTsNCgkJCX0NCgkJCQ0KCQkJaWYgKGlzTG9jYWxUZXN0KSB7CQkJCS8vRm9yIGxvY2FsIHRlc3QNCgkJCQl2YXIgYXJyUGFyYW0gPSBwYXJhbS5zcGxpdCgicGFnZU5hbWU9Iik7DQoJCQkJdmFyIGFyclBhcmFtMiA9IGFyclBhcmFtW2FyclBhcmFtLmxlbmd0aC0xXS5zcGxpdCgiLyIpOw0KCQkJCXBhcmFtID0gYXJyUGFyYW0yW2FyclBhcmFtMi5sZW5ndGgtMV07DQoJCQl9DQoJCQkJCQ0KCQkJaWYgKHBhcmFtID09ICIiKSB7DQoJCQkJcGFyYW0gPSAicG9ydGFsbG9naW4iOw0KCQkJfQ0KCQkJDQoJCQkkLmFqYXgoew0KICAgIAkJCXR5cGU6J1BPU1QnLA0KICAgIAkJCXVybDonLycgKyB1cmxQcmVmaXggKyAnL2NtczIvY2hhbmdlTGFuZ1NldHRpbmcuYWN0aW9uJywNCiAgICAJCQlkYXRhOnsnbGFuZyc6ICdlbid9LA0KICAgIAkJCXN1Y2Nlc3M6ZnVuY3Rpb24oZGF0YSl7DQogICAgCQkJCWNvbnNvbGUubG9nKCJzdWNjZXNzIik7DQoJCQkJDQoJCQkJCSQoIiNsYW5nLWVuIikuYXR0ciggImhyZWYiLCBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgic2NtYS1sYW5nLXNldHRpbmciKSsiLyIrcGFyYW0gKTsNCiAgICAJCQkJDQogICAgCQkJCWlmIChpc0xvY2FsVGVzdCkgewkJCQkvL0ZvciBsb2NhbCB0ZXN0DQogICAgCQkJCQlsb2NhdGlvbi5ocmVmID0gImRpc3BsYXkuYWN0aW9uP3BhZ2VOYW1lPSIrJCgiI2xhbmctZW4iKS5hdHRyKCJocmVmIik7DQogICAgCQkJCX0gZWxzZSB7DQogICAgCQkJCQlsb2NhdGlvbi5ocmVmID0gIi8iICsgJCgiI2xhbmctZW4iKS5hdHRyKCJocmVmIik7DQogICAgCQkJCX0NCiAgICAJCQl9LA0KICAgIAkJCWVycm9yOmZ1bmN0aW9uKGRhdGEpew0KICAgIAkJCQljb25zb2xlLmxvZygiZmFpbCIpOw0KICAgIAkJCX0NCgkgICAgCX0pOw0KCQkJDQoJCX0pOw0KCQkkKCIjbGFuZy1mciIpLmNsaWNrKGZ1bmN0aW9uKGUpew0KCQkJDQoJCQkvKiB2YXIgaXNMb2NhbFRlc3QgPSBmYWxzZTsNCgkJCXZhciB0bXAgPSAibXBvd2VyIjsNCgkJCWlmICh3aW5kb3cubG9jYXRpb24uaHJlZi5pbmNsdWRlcygibG9jYWxob3N0IikpIHsNCgkJCQlpc0xvY2FsVGVzdCA9IHRydWU7DQoJCQkJdG1wID0gIm1wb3dlcjhQTUFDIjsNCgkJCX0gKi8NCgkJCQ0KCQkJJCgiI2xhbmctZnIiKS5yZW1vdmVBdHRyKCAiaHJlZiIgKTsNCgkJCQ0KCQkJbG9jYWxTdG9yYWdlLnNldEl0ZW0oInNjbWEtbGFuZy1zZXR0aW5nIiwgImZyIik7DQoNCgkJCXZhciB1cmwgPSB3aW5kb3cubG9jYXRpb24uaHJlZjsNCgkNCgkJCXZhciBhcnJVcmwgPSB1cmwuc3BsaXQoIi8iKTsNCgkJCXZhciBwYXJhbSA9IGFyclVybFthcnJVcmwubGVuZ3RoLTFdDQoJCQlpZiAocGFyYW0uc2xpY2UoLTEpID09ICIjIikgew0KCQkJCXBhcmFtID0gcGFyYW0uc3Vic3RyaW5nKDAsIHBhcmFtLmxlbmd0aC0xKTsNCgkJCX0NCg0KCQkJaWYgKGlzTG9jYWxUZXN0KSB7CQkJCQkJCQkJCQkJLy9Gb3IgbG9jYWwgdGVzdA0KCQkJCXZhciBhcnJQYXJhbSA9IHBhcmFtLnNwbGl0KCJwYWdlTmFtZT0iKTsNCgkJCQl2YXIgYXJyUGFyYW0yID0gYXJyUGFyYW1bYXJyUGFyYW0ubGVuZ3RoLTFdLnNwbGl0KCIvIik7DQoJCQkJcGFyYW0gPSBhcnJQYXJhbTJbYXJyUGFyYW0yLmxlbmd0aC0xXTsNCgkJCX0NCgkJCQ0KCQkJaWYgKHBhcmFtID09ICIiKSB7DQoJCQkJcGFyYW0gPSAicG9ydGFsbG9naW4iOw0KCQkJfQ0KCQkJDQoJCQkkLmFqYXgoew0KICAgIAkJCXR5cGU6J1BPU1QnLA0KICAgIAkJCXVybDonLycgKyB1cmxQcmVmaXggKyAnL2NtczIvY2hhbmdlTGFuZ1NldHRpbmcuYWN0aW9uJywNCiAgICAJCQlkYXRhOnsnbGFuZyc6ICdmcid9LA0KICAgIAkJCXN1Y2Nlc3M6ZnVuY3Rpb24oZGF0YSl7DQogICAgCQkJCWNvbnNvbGUubG9nKCJzdWNjZXNzIik7DQogICAgCQkJCQ0KICAgIAkJCQkkKCIjbGFuZy1mciIpLmF0dHIoICJocmVmIiwgbG9jYWxTdG9yYWdlLmdldEl0ZW0oInNjbWEtbGFuZy1zZXR0aW5nIikrIi8iK3BhcmFtICk7DQogICAgCQkJCQ0KICAgIAkJCQlpZiAoaXNMb2NhbFRlc3QpIHsJCQkJLy9Gb3IgbG9jYWwgdGVzdA0KICAgIAkJCQkJbG9jYXRpb24uaHJlZiA9ICJkaXNwbGF5LmFjdGlvbj9wYWdlTmFtZT0iKyQoIiNsYW5nLWZyIikuYXR0cigiaHJlZiIpOw0KICAgIAkJCQl9IGVsc2Ugew0KICAgIAkJCQkJbG9jYXRpb24uaHJlZiA9ICIvIiArICQoIiNsYW5nLWZyIikuYXR0cigiaHJlZiIpOw0KICAgIAkJCQl9DQogICAgCQkJCQ0KICAgIAkJCQkvL2RvY3VtZW50LmdldEVsZW1lbnRCeUlkKCcjbGFuZy1mcicpLmNsaWNrKCk7DQogICAgCQkJCQ0KICAgIAkJCX0sDQogICAgCQkJZXJyb3I6ZnVuY3Rpb24oZGF0YSl7DQogICAgCQkJCWNvbnNvbGUubG9nKCJmYWlsIik7ICAgIAkJCQkNCiAgICAJCQl9DQoJICAgIAl9KTsNCgkJCQ0KCQl9KTsJCQ0KCQkNCgkJDQoJCS8qICQoIi50aXRsZS1sb2dvLXRvcCIpLmNsaWNrKGZ1bmN0aW9uKGUpew0KCQkJYWxlcnQobG9jYWxTdG9yYWdlLmdldEl0ZW0oInNjbWEtbGFuZy1zZXR0aW5nIikpOw0KCQl9KTsgKi8NCgkJDQoJCSQoIiNzaWduLW91dCwgI3NpZ24tb3V0LWZyIikuY2xpY2soZnVuY3Rpb24oZSl7DQoJCQkkLmFqYXgoew0KICAgIAkJCXR5cGU6J1BPU1QnLA0KICAgIAkJCXVybDonLycgKyB1cmxQcmVmaXggKyAnL2NtczIvYWpheC1tZW1iZXItbG9nb3V0LmFjdGlvbicsDQogICAgCQkJc3VjY2VzczpmdW5jdGlvbihkYXRhKXsNCiAgICAJCQkJY29uc29sZS5sb2coInN1Y2Nlc3MiKTsNCg0KICAgIAkJCQl2YXIgaHJlZiA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCJzY21hLWxhbmctc2V0dGluZyIpKyIvIisicG9ydGFsbG9naW4iOw0KICAgIAkJCQlpZiAoaXNMb2NhbFRlc3QpIHsJCQkJLy9Gb3IgbG9jYWwgdGVzdA0KICAgIAkJCQkJbG9jYXRpb24uaHJlZiA9ICJkaXNwbGF5LmFjdGlvbj9wYWdlTmFtZT0iK2hyZWY7DQogICAgCQkJCX0gZWxzZSB7DQogICAgCQkJCQlsb2NhdGlvbi5ocmVmID0gIi8iICsgaHJlZjsNCiAgICAJCQkJfQ0KICAgIAkJCQkNCiAgICAJCQkJLy9kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnI2xhbmctZnInKS5jbGljaygpOw0KICAgIAkJCQkNCiAgICAJCQl9LA0KICAgIAkJCWVycm9yOmZ1bmN0aW9uKGRhdGEpew0KICAgIAkJCQljb25zb2xlLmxvZygiZmFpbCIpOyAgICAJCQkJDQogICAgCQkJfQ0KCSAgICAJfSk7DQoJCX0pOw0KCQkNCgkJaWYgKHdpbmRvdy5sb2NhdGlvbi5ocmVmLmluY2x1ZGVzKCJwb3J0YWxsb2dpbiIpKSB7DQoJCQkkKCIjaGFtTWVudSIpLnJlbW92ZUNsYXNzKCJjb250YWluTmF2Iik7CQkJLy9yZW1vdmUgaGFtYnVyZ2VyIGJ1dHRvbiBpbiBsb2dpbiBwYWdlDQoJCQkkKCIjZGl2LXRvcC1saW5rcyIpLnJlbW92ZUNsYXNzKCJjb250YWluTmF2Iik7CQkvL2ZvciBhbGlnbmluZyBoYW1idXJnZXIgYnV0dG9uDQoJCX0gZWxzZSB7DQoJCQkkKCIjaGFtTWVudSIpLmFkZENsYXNzKCJjb250YWluTmF2Iik7CQkJCQ0KCQkJJCgiI2Rpdi10b3AtbGlua3MiKS5hZGRDbGFzcygiY29udGFpbk5hdiIpOw0KCQl9DQoJCQ0KCX0pOw0KPC9zY3JpcHQ+DQoNCgkJDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KPCEtLSAqKioqKipDT05URU5UKioqKioqIC0tPiANCjxzdHlsZT4NCgkucGFnZS13cmFwcGVyIHsNCgkJaGVpZ2h0OiAxMDAlOw0KCX0NCgkucGFnZS1jb250ZW50IHsNCgkJZGlzcGxheTogZmxleDsNCiAgICAJaGVpZ2h0OiAxMDAlOw0KCX0NCjwvc3R5bGU+DQo8ZGl2IGNsYXNzPSJjb250ZW50Ij4NCgk8ZGl2IGNsYXNzPSJwYWdlLXdyYXBwZXIiPg0KCQ0KCTxkaXYgY2xhc3M9InBhZ2UtY29udGVudCI+DQoJCTxzdHlsZT48IS0tDQoubG9naW4tY29udGFpbmVyIHsNCgkJd2lkdGg6IDEwMCU7DQoJCW1heC13aWR0aDogMTAwMHB4Ow0KCQltYXJnaW46IGF1dG87DQoJCWNvbG9yOiAjMzMzMzMzOw0KCQliYWNrZ3JvdW5kLWNvbG9yOiAjZmZmOw0KCQlkaXNwbGF5OnRhYmxlLXJvdzsNCgkJDQoJfQ0KCSNkaXYtbG9naW4tbWlkZGxlIHsNCgkgICAJbWF4LXdpZHRoOiAxMDAwcHg7DQoJICAgCW1hcmdpbjogYXV0bzsNCgkgICAJcGFkZGluZy10b3A6IDUwcHg7DQoJICAgCXBhZGRpbmctYm90dG9tOiA1MHB4Ow0KCX0NCgkjZGl2LWxvZ2luLW1pZGRsZSA+IGgxIHsNCgkJY29sb3I6ICMwMDA7DQoJCWZvbnQtd2VpZ2h0OiBub3JtYWw7DQoJfQ0KCSNkaXYtbG9naW4tbWlkZGxlID4gaDEsICNkaXYtbG9naW4tbWlkZGxlID4gcCwgI2Rpdi1sb2dpbi1taWRkbGUgPiBkaXZ7DQoJCXBhZGRpbmctbGVmdDogMTBweDsNCgkJcGFkZGluZy1yaWdodDogMTBweDsNCgl9DQoJI2Rpdi1sb2dpbi1taWRkbGUgaDMgew0KCQlmb250LXNpemU6IDExcHg7DQoJCWNvbG9yOiAjMzMzMzMzOw0KCSAgICBmb250LXdlaWdodDogbm9ybWFsOw0KCSAgICBtYXJnaW4tYm90dG9tOiA1cHg7DQoJfQ0KCSNkaXYtbG9naW4tbWlkZGxlIHVsIHsNCgkJbWFyZ2luLWxlZnQ6IDEwcHg7DQoJCXBhZGRpbmctbGVmdDogMHB4Ow0KCX0NCgkjZGl2LWxvZ2luLWJvdHRvbSB7DQoJCWhlaWdodDogNTBweDsNCgl9DQoJLmxvZ2luIGlucHV0IHsNCgkJZGlzcGxheTogYmxvY2s7DQoJfQ0KCS5sb2dpbiAubG9naW4taW5wdXQtYm94IHsNCgkJd2lkdGg6IGNhbGMoMTAwJSAtIDIycHgpOw0KCQloZWlnaHQ6IDE2cHg7DQoJCW1heC13aWR0aDogNTcwcHg7DQoJCWJvcmRlcjogMXB4IHNvbGlkICNBOUEzQTE7DQoJCWJvcmRlci1yYWRpdXM6IDNweDsNCgkJcGFkZGluZzogMTBweDsNCgkJbWFyZ2luLXRvcDogMTVweDsNCgkJbWFyZ2luLWJvdHRvbTogMTVweDsNCgl9DQoJI21lbWJlci1sb2dpbi1zdWJtaXRfcGFzc3dvcmQgew0KCQltYXJnaW4tYm90dG9tOiAyMHB4Ow0KCX0NCgkjbWVtYmVyLWxvZ2luIHsNCgkJd2lkdGg6IDg0cHg7DQoJCWhlaWdodDogNDVweDsNCgkJbWFyZ2luLWJvdHRvbTogMjBweDsNCgl9DQoJDQoJI2ZvcmdvdC1wdyB7DQoJCXRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOw0KCQljb2xvcjogIzAwMDsNCgkJZm9udC13ZWlnaHQ6IGJvbGQ7DQoJfQ0KCS5ncmVlbkJ0biB7DQoJICAgIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCh0byBib3R0b20sICNFRDFDMjQgMCUsICNFRDFDMjQgMTAwJSk7DQoJICAgIGZpbHRlcjogcHJvZ2lkOkRYSW1hZ2VUcmFuc2Zvcm0uTWljcm9zb2Z0LmdyYWRpZW50KCBzdGFydENvbG9yc3RyPScjRUQxQzI0JywgZW5kQ29sb3JzdHI9JyNFRDFDMjQnLEdyYWRpZW50VHlwZT0wICk7DQoJICAgIGJvcmRlcjogMXB4IHNvbGlkICNFRDFDMjQ7DQoJICAgIG1hcmdpbi10b3A6IDEwcHg7DQoJICAgIHBhZGRpbmc6IDAgIWltcG9ydGFudDsNCgkgICAgdGV4dC1hbGlnbjogY2VudGVyOw0KCSAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlOw0KCSAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7DQoJICAgIHdpZHRoOiAxMDAlOw0KCSAgICBib3JkZXItcmFkaXVzOiA0cHg7DQoJICAgIGNvbG9yOiAjZTZlNmU2Ow0KCSAgICBmb250LWZhbWlseTogIm15cmlhZC1wcm8iLCBzYW5zLXNlcmlmOw0KCSAgICBmb250LXNpemU6IDAuODEyNXJlbTsNCgkgICAgbGV0dGVyLXNwYWNpbmc6IDAuMzhweDsNCgkgICAgZm9udC13ZWlnaHQ6IDYwMDsNCgl9DQoJLmdyZWVuQnRuOmhvdmVyIHsNCgkJY29sb3I6ICNmZmY7DQoJfQ0KLS0+PC9zdHlsZT4NCjxkaXYgY2xhc3M9ImxvZ2luLWNvbnRhaW5lciI+DQo8ZGl2IGlkPSJkaXYtbG9naW4tbWlkZGxlIj4NCjxoMT5Mb2dpbjwvaDE+DQo8cD5QbGVhc2UgZW50ZXIgeW91ciBlLW1haWwgYWRkcmVzcyBhbmQgcGFzc3dvcmQgdG8gYWNjZXNzIHRoZSBQb3J0YWw8L3A+DQo8ZGl2IGNsYXNzPSJsb2dpbiI+PGlucHV0IHR5cGU9InRleHQiIG5hbWU9InVzZXJuYW1lIiBzaXplPSI0MCIgbWF4bGVuZ3RoPSIxMDAiIGlkPSJtZW1iZXItbG9naW4tdXNlcm5hbWUiIGNsYXNzPSJsb2dpbi1pbnB1dC1ib3giIHBsYWNlaG9sZGVyPSJFbWFpbCBBZGRyZXNzIiAvPiA8aW5wdXQgdHlwZT0icGFzc3dvcmQiIG5hbWU9InBhc3N3b3JkIiBzaXplPSI0MCIgbWF4bGVuZ3RoPSIxMDAiIGlkPSJtZW1iZXItbG9naW4tcGFzc3dvcmQiIGNsYXNzPSJsb2dpbi1pbnB1dC1ib3giIHBsYWNlaG9sZGVyPSJQYXNzd29yZCIgLz4gPGlucHV0IHR5cGU9InN1Ym1pdCIgaWQ9Im1lbWJlci1sb2dpbiIgY2xhc3M9ImdyZWVuQnRuIiBuYW1lPSJsb2dpbi5sb2dpbiIgdmFsdWU9IkxvZ2luIiAvPiA8YSBpZD0iZm9yZ290LXB3IiBocmVmPSIvbXBvd2VyL21wcC9tZW1iZXItZm9yZ290Ij4gRm9yZ290IHlvdXIgcGFzc3dvcmQgLyBGaXJzdCB0aW1lIGxvZ2dpbmcgaW4/IDwvYT48L2Rpdj4NCjwvZGl2Pg0KPGRpdiBpZD0iZGl2LWxvZ2luLWJvdHRvbSI+PC9kaXY+DQo8L2Rpdj4NCgk8L2Rpdj4NCgkNCgk8L2Rpdj4NCiA8L2Rpdj4JDQoJCQ0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KPGRpdiBjbGFzcz0iZGl2LWZvb3RlciI+DQoJPHN0eWxlPjwhLS0NCi5mb290ZXItY29udGFpbmVyIHsNCgkgICAgYmFja2dyb3VuZC1jb2xvcjogIzAwMDsNCgkgICAgaGVpZ2h0OiAxMDAlOw0KCSAgICB3aWR0aDogMTAwJTsNCgl9DQoJDQoJLmZvb3Rlci1saW5rcy1yaWdodHMgew0KCQloZWlnaHQ6IDEwMCU7DQoJICAgIG1heC13aWR0aDogMTAwMHB4Ow0KCSAgICBtYXJnaW46IGF1dG87DQoJICAgIHBhZGRpbmctdG9wOiAyNXB4Ow0KCSAgICBib3gtc2l6aW5nOiBib3JkZXItYm94Ow0KCSAgICBkaXNwbGF5OiBmbGV4Ow0KCSAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOw0KCSAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47DQoJICAgIHBhZGRpbmctYm90dG9tOiAyNXB4Ow0KICAgIA0KCX0JDQoJLmZvb3Rlci1saW5rcy1yaWdodHMgc3BhbiB7DQoJCWNvbG9yOiAjZmZmOw0KCX0NCgkNCgkudGl0bGVfX2JvdHRvbV9fc29jaWFsbGlua3Mgew0KCQltYXJnaW46IDBweDsNCgkJcGFkZGluZzogMHB4Ow0KCQlkaXNwbGF5OiBmbGV4Ow0KCQlsaXN0LXN0eWxlOiBub25lOw0KCX0NCgkudGl0bGVfX2JvdHRvbV9fc29jaWFsbGlua3MgbGkgew0KCQltYXJnaW4tbGVmdDogMTVweDsNCiAgICAJbWFyZ2luLXJpZ2h0OiAxNXB4OzsNCgl9DQoJDQoJI2Zvb3Rlci1saW5rcywgI2Zvb3Rlci1yaWdodHMgew0KCQltYXgtd2lkdGg6IDEwMDBweDsNCgkgICAgbWFyZ2luLXRvcDogMjBweDsNCgl9ICAgIA0KCSNmb290ZXItcmlnaHRzIHsNCgkJdGV4dC1hbGlnbjogY2VudGVyOw0KCQkNCgl9DQotLT48L3N0eWxlPg0KPGRpdiBjbGFzcz0iZm9vdGVyLWNvbnRhaW5lciI+DQo8ZGl2IGNsYXNzPSJmb290ZXItbGlua3MtcmlnaHRzIj4NCjxkaXYgaWQ9ImZvb3Rlci1saW5rcyI+DQo8dWwgY2xhc3M9InRpdGxlX19ib3R0b21fX3NvY2lhbGxpbmtzIj4NCjxsaT48YSBocmVmPSJodHRwczovL3d3dy5mYWNlYm9vay5jb20vc3VwcGx5LWNoYWluLWNhbmFkYSIgdGFyZ2V0PSJfYmxhbmsiIHJlbD0ibm9vcGVuZXIgbm9yZWZlcnJlciI+IDxpbWcgc3JjPSIvbXBvd2VyL2NtczIvaW1nL2ljb24tZmFjZWJvb2stMzIucG5nIiAvPjwvYT48L2xpPg0KPGxpPjxhIGhyZWY9Imh0dHBzOi8vd3d3LmxpbmtlZGluLmNvbS9jb21wYW55L3N1cHBseS1jaGFpbi1jYW5hZGEiIHRhcmdldD0iX2JsYW5rIiByZWw9Im5vb3BlbmVyIG5vcmVmZXJyZXIiPiA8aW1nIHNyYz0iL21wb3dlci9jbXMyL2ltZy9pY29uLWxpbmtlZGluLTMyLnBuZyIgLz48L2E+PC9saT4NCjxsaT48YSBocmVmPSJodHRwczovL3R3aXR0ZXIuY29tL3N1cHBseS1jaGFpbi1jYSIgdGFyZ2V0PSJfYmxhbmsiIHJlbD0ibm9vcGVuZXIgbm9yZWZlcnJlciI+IDxpbWcgc3JjPSIvbXBvd2VyL2NtczIvaW1nL2ljb24tdHdpdHRlci0zMi5wbmciIC8+PC9hPjwvbGk+DQo8L3VsPg0KPC9kaXY+DQo8ZGl2PjxzcGFuPjwvc3Bhbj48L2Rpdj4NCjxkaXYgc3R5bGU9InRleHQtYWxpZ246IGNlbnRlcjsiPjxzcGFuIHN0eWxlPSJjb2xvcjogI2ZmZmZmZjsiPjxhIGhyZWY9Imh0dHBzOi8vd3d3LnN1cHBseWNoYWluY2FuYWRhLmNvbS9wcml2YWN5IiB0YXJnZXQ9Il9ibGFuayIgcmVsPSJub29wZW5lciBub3JlZmVycmVyIiBzdHlsZT0iY29sb3I6ICNmZmZmZmY7Ij5Qcml2YWN5IFN0YXRlbWVudDwvYT4gfCA8YSBocmVmPSJodHRwczovL3d3dy5zdXBwbHljaGFpbmNhbmFkYS5jb20vdGVybXMtb2Ytc2VydmljZSIgdGFyZ2V0PSJfYmxhbmsiIHJlbD0ibm9vcGVuZXIgbm9yZWZlcnJlciIgc3R5bGU9ImNvbG9yOiAjZmZmZmZmOyI+VGVybXMgb2YgU2VydmljZXM8L2E+IHwgPGEgaHJlZj0iaHR0cHM6Ly93d3cuc3VwcGx5Y2hhaW5jYW5hZGEuY29tL2NvZGUtb2YtY29uZHVjdCIgdGFyZ2V0PSJfYmxhbmsiIHJlbD0ibm9vcGVuZXIgbm9yZWZlcnJlciIgc3R5bGU9ImNvbG9yOiAjZmZmZmZmOyI+Q29kZSBvZiBDb25kdWN0PC9hPjwvc3Bhbj48L2Rpdj4NCjxkaXYgaWQ9ImZvb3Rlci1yaWdodHMiPjxzcGFuPiZjb3B5OyA8c3BhbiBpZD0iY3VyWWVhciI+PC9zcGFuPiBTdXBwbHkgQ2hhaW4gQ2FuYWRhLiBBbGwgcmlnaHRzIHJlc2VydmVkLjwvc3Bhbj48L2Rpdj4NCjwvZGl2Pg0KPC9kaXY+DQo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ly8gPCFbQ0RBVEFbDQokKCIjdGFnc2Nsb3VkIHNwYW4iKS50ZXh0KCJZb3VyIHRleHQgaGVyZSIpOw0KCSQoIiNjdXJZZWFyIikudGV4dChuZXcgRGF0ZSgpLmdldEZ1bGxZZWFyKCkpOw0KLy8gXV0+PC9zY3JpcHQ+DQoJDQoJDQo8L2Rpdj4NCgk8L2Rpdj4NCjwvYm9keT4NCg0KDQo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+DQoJJCggZG9jdW1lbnQgKS5yZWFkeShmdW5jdGlvbigpIHsNCgkJdmFyIGxhbmdDaGsgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgic2NtYS1sYW5nLXNldHRpbmciKTsNCgkJdmFyICRhbGVydDsNCgkJDQoJCSQoIi5sb2dpbi1jb250YWluZXIgaW5wdXQjbWVtYmVyLWxvZ2luLXBhc3N3b3JkIikua2V5cHJlc3MoZnVuY3Rpb24oZSkgeyANCgkJCQlpZihlLmtleUNvZGU9PTEzKSB7ICQoIi5sb2dpbi1jb250YWluZXIgI21lbWJlci1sb2dpbiIpLmNsaWNrKCk7IH0gDQoJCX0pOw0KCX0pOw0KPC9zY3JpcHQ+DQoJDQoNCjwvaHRtbD4NCg0K","disable_correlation":true,"encrypt":true,"malware_filename":"portallogin","object_relation":"malware-sample","to_ids":true,"type":"malware-sample","uuid":"d3e3522a-93fb-463b-bdf9-70cef4f90f73","value":"portallogin"},{"category":"Artifacts dropped","disable_correlation":true,"object_relation":"mimetype","to_ids":false,"type":"mime-type","uuid":"206bb214-efe6-4a40-b8b9-d8d4c683151a","value":"text/html"},{"category":"Payload delivery","disable_correlation":false,"object_relation":"ssdeep","to_ids":true,"type":"ssdeep","uuid":"9154ccb3-0495-4a4a-9947-c5d520d08dda","value":"384:mIh0o/6R86xjdra7sBibI+xROVSy5PoNPFn3mXYB4t5z3f:me0o/6RvQ+V/54mikf"},{"category":"Network activity","disable_correlation":false,"object_relation":"dom-hash","to_ids":true,"type":"dom-hash","uuid":"187be2c4-5e2c-494e-923f-1a30ff8359ae","value":"e703c53cd7653cc1f78b54a9d4f15b41"}],"ObjectReference":[{"comment":"URL loading that content","object_uuid":"751c1f88-6cef-4bb8-807c-783e984956ba","referenced_uuid":"1570699a-a74f-49b7-aac9-b372299e3271","relationship_type":"loaded-by","uuid":"8a264de2-6e18-4254-800f-36c7a34fad38"},{"comment":"Screenshot of the page","object_uuid":"751c1f88-6cef-4bb8-807c-783e984956ba","referenced_uuid":"f8a55a44-b4cc-4b58-aeca-1ae67ab6a6d8","relationship_type":"rendered-as","uuid":"fc67d8b3-ecf9-4ed7-9b86-a574b08e4f86"},{"comment":"Rendered HTML at the end of the capture","object_uuid":"751c1f88-6cef-4bb8-807c-783e984956ba","referenced_uuid":"b3c4f765-19f4-49d8-9e62-17a87bd30618","relationship_type":"rendered-as","uuid":"7a4df1b9-530c-4458-a368-b73be0d90ffc"}],"comment":"Content received for the final redirect (before rendering)","description":"File object describing a file with meta-information","distribution":"5","first_seen":"2024-09-05T11:07:20.031000+00:00","magic_db":null,"meta-category":"file","name":"file","sharing_group_id":"0","template_uuid":"688c46fb-5edb-40a3-8273-1af7923e2215","template_version":"25","uuid":"751c1f88-6cef-4bb8-807c-783e984956ba"}],"info":"Lookyloo Capture (http://portal.supplychaincanada.com)","uuid":"aa7fcfd1-63d8-436d-a403-0cdd5fd44194"}]
