GeneralCatalog
6.4.3
6.4.x
Znuny
https://www.znuny.org/
GNU GENERAL PUBLIC LICENSE Version 3, 29 June 2007
The General Catalog package.
Das General Catalog Paket.
El paquete General Catalog.
Az általános katalógus csomag.
Updated translations.
Release for Znuny 6.4.2.
Initial release for Znuny 6.4.
Release for Znuny 6.3.3.
Ported to 6.2.
build.znuny.com
2022-11-08 20:35:07 UTC
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EolEYWFhQUE0DdryIwAgtsxfo7/5+te/nv4vAJyVsrKysrKyqEYvLS2NML0CgD52vly7nS91nmvx+oDS3Nz86quvvv322zU1NadPny4uLi4vL7/ooouuvPLKzGUIcn/bvv71r7c7uLCwcPjw4TNmzLjmmms6fkBsa2urrKzcsmXL4cOHm5qaBg0aVF5ePmXKlPe9731jx47NcdB33nlnw4YNe/bsaWhoKCkpmTJlyrx58yZPnpxLtd3YBQD0D+Xl5VGXAEAsnD59urKycseOHTU1NadOnRo0aNCoUaNmzpw5d+7c4uLiqKs751pbW19//fW33367urq6sbExPz9/5MiRM2fOnD9//uDBg6OubuCKUX60Z8+eZ5555uTJk+ktDQ0NDQ0Ne/bsWbNmzSc/+clcIpgutbS01NTU1NTU/P73v7/33ntHjBiR3tXc3Lxs2bJ9+/alt5w6dWrfvn379u1bvXp1jgnOqlWrfvvb36bXvzx58uSWLVu2bNkiAAIAAKBL27dvX7FixalTp9JbGhsb9+zZs2fPntWrV990001z5syJsLxz7Z133nnmmWeOHz+e3tLa2lpdXV1dXb1u3bqbbrrpsssuO6sT6h7qLXHJj/bt2/f4448nk8mKioprrrlm8uTJJSUlp06d2rt375o1a/bv3//444/ffffdEyZMCM70xnf5A5He1dDQsG/fvhdffLGuru6ll176xCc+kT5m1apV+/btGzx48Ic//OELL7ywrKyspaWltrZ2165dW7ZsyeVZbNy4cdWqVXl5eQsWLLj88stHjBhx+vTpnTt3btiwIfeXwo81AADAwLRjx44nn3wylUpNnTp1/vz5EyZMKC0tbW5urq2t3bZtW2Vl5YoVK/pxfvTOO+98//vfb21traiouOqqqyZPnlxWVtba2nr06NG3335748aNP/nJT842P6K3xCI/SiaTP/7xj5PJ5GWXXfYnf/IneXl/WNW7rKxs1qxZF1988U9/+tNNmzb96Ec/uv/++/Pz83sy1uDBgy+++OLS0tLHHnts586dmbveeOONIAhuvfXW6dOnh1vy8/MnTJgwYcKEhQsXdnnmhoaGX/3qV0EQ3HzzzZdffnl6uNmzZ8+ePbsnNQMAANDvtbS0PPvss6lU6oMf/OCHP/zh9PaSkpKJEydOnDjx2muvfe655yKs8JxKJpM/+tGPWltbr7zyyptuuimdDBQUFFRUVFRUVCxYsKAfP/34i0V+tHnz5mPHjo0aNermm29O/4ik5eXl3Xzzzfv37w8nnfVK1hguZtTU1JS58cSJE0EQTJw4sXvnfP3115ubmydOnJgOj86FsDvpn/7pnyorK1977bXa2tqWlpZ/+qd/CoJg//79mzZt2r17d11dXSKRGDZs2EUXXXTttdeWlJR0PMPXv/71TZs2bdy4saamJi8vb+LEiYsWLQpfltdffz3cnkqlJk6c+JGPfKTj2k91dXVr166tqqqqr68vKCgYN27cVVdddfHFF6cP+D//5/8cO3bsvvvuGzduXLjl2Wefff3114MguPTSS2+55ZZwY3V19dKlS0eMGPHXf/3X6cfu27dv7dq1+/btO3XqVElJyaRJkxYsWBC2nuXyOnTU1NS0YsWKbdu25eXl3XjjjfPmzTvLVx0AAOCc27RpU0NDw6RJkzLDo0zFxcW33nprx+1dXqAFGVeCr7/++oYNG8IrwUmTJqWvBLt3wp5cnLYTJgNjx47NDI8yFRUVLV68OH03l1HS83syJ/qkb3evzlAu161BEGzfvn3NmjXV1dWpVKq8vHzu3Llz5849T6fUxSI/2rZtWxAEf/RHf9RZb1F+fv5VV13185//fNu2bb2SH1VXVwdBMHTo0MyNQ4YMOX78+I4dO2bNmtWNc1ZVVQVB0DedhL/4xS9effXVdhsffvjhzLu1tbW1tbVbt25dsmRJaWlpu4Off/75zFl127dv37Nnz5IlSzZu3PjKK6+kt1dVVb3zzjv33XffyJEjMzcuX768ubk5vNva2rpr165du3Z94AMfuO6668KN06ZNe+2113bt2pXOj3bt2tXuRhAEYQvY1KlT01s2btz43HPPZS4gtXXr1jfffPOP//iP586dm8vr0E5dXd1TTz11+PDh0tLS22+/PXMsAACA+Ni+fXsQBGf7B+9cLtDSXnzxxXXr1mWOuGfPnvvuu++CCy7o3gl7fnGalk4GzhgeddS9UXrlDDlet65fv/6FF15I3z1w4MCBAwcOHjyYS20xFIv86MCBA8F7Q4SOwr3hkT0RLjz24osvBkHQblrZnDlzVq9evWLFiqqqqosuumj8+PFntbT74cOHgyCYOHHiG2+8sXbt2sOHD+fn548ePfryyy+/7LLLEolEDyvPVFlZuWDBgiuuuGLkyJHpX60pU6bMnTt30qRJZWVlzc3NBw4ceOmll/bv37969errr7++3Rk2btx4zTXXXHHFFUOHDj106NDKlStramqeeOKJ+vr6jttXr1798Y9/PHxgfX39008/3dzcPHv27AULFlxwwQWnTp164403/uu//uvll1+ePn16uMz51KlTw/xowYIFQRDU1tbW19eXlZWlUqn6+vra2trwK2bCLCn91h88ePD5559PpVKXX375tddeO3z48GPHjq1evXrTpk3PPffcxIkTR48e3eXrkGn37t1PP/10Y2Pj6NGj//RP/zRzuXQAAIBYCZOFs5oTk+MFWtqGDRsWLlx4+eWXl5WVHTx4cOXKlUeOHFm9enW6r+dsT9jzi9O0sM8j9y/OymWU9Heyn7HZp3t15njdevDgwV/+8pdBEMybN2/BggVDhw6tr69fu3btxo0bc3yCcROL/KixsTHo0A3UTrg3PLIbOv6szJ49+wMf+EDmlg996EP19fWvv/56ZWVlZWVlOOiUKVMuvfTS9IpIWYTL42/ZsuV3v/tduKWlpWXv3r179+7dvn377bffnmOE1Nnq4JnmzZv30Y9+tN3Gz3zmM+nbJSUl06dPLy8v/9d//de3336744/+Nddcs2jRovD2hAkTbrrppv/8z/88duzYwoULO27P7Bhav359U1NT5hy0oqKiBQsW5OfnP//886+88ko6PwqCYM+ePclkMj8/P50TpVKpLVu27Nq1q7y8PJlM7tmzJ8jIjzZs2NDW1jZz5sx0XHXBBRcsXrz45MmTO3bsWL9+/Z/8yZ90+Tqkvfrqq88991xbW9tFF1106623Dho0qLMjAQAAIhde8JaVlbXbnuUiMccLtLSFCxemJ8dNmjTpYx/72OOPP7579+70AWd7wp5fnKY1NDQEQTBkyJDODuiVUXp+hhyvW1955ZW2trZZs2Z97GMfCw8bMWLExz72sYaGhq1bt+b4HGMlFvlR3xs2bNgHP/jBdtPl8vPzb7nllgULFmzZsmXPnj0HDx6sr6/fvHnz5s2bZ82a9YlPfCL70t1h69qaNWuKi4uvv/76mTNnBkHw9ttvv/DCC1u3bt24ceP8+fN7q/4rr7yy48Ywy9y5c+exY8fSrYZBEGR+8WHaFVdckXm3oqIiy/ZwZajQjh07giC46qqr2p3wfe973/PPP79v377wbllZ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3HvttdceOXKk158CnAvyIwCgP2tra2toaDh9+nTUhXQqfTkkQhoIJk+eHHUJvWbOnDmR/NCe8QI+R1HVnF08q4qhPnuVvvKVr3z2s59N3z1w4MA999yzbt26L3/5y7W1tR2PX7JkybJly1566aVUKrVq1aq77rory94f//jHmXs/97nPffWrXz1HTwR6V0HUBQAAnEPNzc0HDhwoKCiYOnVq1LWcmaaDAWXv3r1Rl3Deq66ujroE+rOqqqrKyspHH300vaWiouKxxx7L8pC8vLxRo0aFtxcsWNDQ0JBlb3Nzc+beT3/609/+9rerqqqmT5/eO08Azhn9RwBAf5ZKpYqLi4uLi6MupFP6jwiC4JFHHpk6dWpZWdknP/nJ48ePt5un89Of/vSqq64qLS2dNWvWihUrMh8YHnny5MnFixcXFRV1nDuT5bFBxoSgZcuWXXLJJUOHDn3ggQfSex966KF77723oqJi/PjxS5Ys2bVrV28933Xr1t14443Dhg0rKSlZuHDhb37zm5kzZ3Y57owZM8JqExnanbknNf/whz+8/PLLBw8efMUVVzz99NPt9mZ/j3ryfLPL8oyeffbZoqKiRCJRUlJy5ZVXrlix4v3vf3+Oe0Pz58+fP39+jpWktXvxO74X2d+F7D91Xb5W27dvX7BgQUFBQcef9p6Mm7Z06dJ77733rF6Qw4cPd3tvEAR333330qVLz2pEiEYKAIBIvf3222+//XZra2vUhdDLpk6dunnz5swtZ/z4/fTTT1977bU7duxobm7esmXLF7/4xczDfvjDH9555507d+5samrasmXLokWLXnjhhXbn/Mu//MuXX365ra1txYoVhYWFuT82fPgdd9xx6623VlZWNjc3P//88+ldO3bsCG/U1tZ+7WtfmzZtWsfiu3FB8eKLL86ePfuFF144cuRIc3Pznj17HnzwwZEjR+Y4bvYRu13zU089ddtttzU0NKRSqYaGhttuu2358uXpvdnfox4+3+zPK8szKiwsXLFiRSqVSiaThw8fXrZs2ahRo3LcG7ryyiuvvPLKHJ9IpoULF65Zsya8vWbNmg984AM51hzq7Keuy9cqCII//uM/3rJlS8ef9p6Mm2n27NlvvPFGZ0/8jG9TIpHIckzHvX/7t3+bueX3v//9+9///s5GhPiQHwEARCyZTCaTyairoPel86OOS/ZUVFSkD7v00kszY6YNGzZkXn/OmjXrnXfeSd99++23r7nmmsxRgiB4+umnM+/m/tjw+F/84hddPpfW1tYzXjl3Iz+aM2fO+vXrczy447i5j3hWNV9yySVvvfVW+u5bb711ySWXpO9mf4+yy/H55nLCds+otLT0oYceOnbs2BkPzr63hx5//PG77747vP2Zz3xm2bJlnR15xnehs5+6Ll+rIAiqq6sz7/bKuJlKSkrCGLGzArrc2OXddvnRyZMni4uLs1cFcZBI6ZQGAIBzYNq0aStXrpw9e3Z6S9iJ0O6wsrKympqakpKS8G5DQ0NZWVn6sOLi4qampszjS0pKGhsbOztn5t0uH9tZSUEQHD58+H/9r//13HPP7d69u7S09LLLLvvNb37T8cjOHp7FoEGDjh49Onjw4DPu7XLcLCP2pOaioqLjx4+n34VTp04NHz48/eplf4968nyzV5X9GT3//PMf//jHW1paioqKRo8ePWTIkP/8z/+cN29eLnt76NSpUxdeeOHWrVuDIJg1a9aOHTvS04RzeRc6exO7fK2y/LT3ZNxMJSUlR44cKS0tzaWAzqpqa2vLnN/Xbu/f/u3f/su//Et6S0NDw6hRo9r9YkIMWf8IAACiNGPGjKqqqvTdzZs3Z+6dNWvWm2++mfkX4NyvM3vy2MWLF998881bt25tbGzcv3//97///Rwf2KWpU6du2rSpt8bNDMh6UvOMGTP27NmTvrtnz57M9Yyzv0fZZX++2WV/RjfeeGNzc3Nzc/P+/ftffvnlu+6666Mf/WiOe3uopKRk8eLFTz755BNPPHHLLbdkrjHXk3fh3L1WuZs+ffru3bu799i0ZDKZZW9bW1vm3V27ds2YMaOHI0IfkB8BAECUvva1r/3N3/zNwYMHk8nkli1bfvCDH2Tu/eY3v7lkyZJXXnnl1KlTDQ0Nr7322ic+8Ykcz9yTx+7evbuurq6pqammpmbt2rXf+c53zu5Zde4b3/jG5z//+R07dgRB0NDQ8Oabby5duvTuu+/OcdzCwsJw1eTq6urvfve7CxYs6JWa//Ef//GLX/xi+O3stbW1X/ziF//xH/8xvTf7e9ST55td9mc0atSol19+uaWlpby8fOrUqRdffHHmN39l3xvq3vrZoSVLljz88MOPPPLIkiVLcq85u3P3WuXuhhtueOmll87qISUlJWvXrg1vb9y4cejQoZkNR+32Dho0qN3Df/3rX994443dqxb61DmZFQcAAANex/WzJ02adMYjv/e9702ePLmkpOTWW28NI4zMvc8///y8efOKiorGjBlzzz337NmzJ72r3af6jh/yszw21WEaTuauVatWXXHFFcXFxWPHjr3vvvv2799/xoG6d2WxatWq6667bty4ccOHD583b953v/vd9Ioz2cdNpVLhqsmJRGLixIl/9Vd/deDAgd6q+cknn7z44osLCwsvvvjiJ598sl3N2d+jbj/f7FVlf0bz5s1bvnz57NmzCwoKgiBIL5idy97QFVdc0b31s9NDzJs3r+OTzf4OZv+xyeW1OuPdHo6btn379ssuu6zdxuxvU/gzGQRBeXl5RUXFb3/728zHttt7zz33tFv/6NJLL62qquqsHogP6x8BAMA50XH9o1zU1dWNHTu23bpFxIr3qH9bsmTJokWLPvWpT52Lkz/wwAN1dXXp9Y+eeuqpVatWLV269FyMBb3L/DUAAIiL2trab33rW3fddVfUhdAp71G/98///M//8R//0TdjPfzww9/61rf6ZizoIfkRAABEqbm5+Rvf+EZeXl4ikZgxY8bgwYM1I8SN92hAKS8v/93vftc3Y7300kvl5eV9Mxb0kPlrAEC/dfTo0RMnTgwbNmz48OFR18JA1L35a+e7yZMn792794y7Jk2alPkdZ/3DQHu+9FC7+WtwHimIugAAgHMl/O7q+P+1rKGhobm5uaSkJPM7sOE8NdASk4H2fIEBy/w1AKDfam1tDYIg/O6hODt58mRtbW1jY2PUhQAAnFncP04BAHRbS0tLcD7kR6WlpYlEYtCgQVEXAgBwZnH/OAUA0G3JZDIIgsLCwqgL6cKQIUOGDBkSdRUAAJ0yfw0A6J9aW1tTqVQikYh//xEAQMzJjwCA/ul8mbwGnF/Cf1sABhr5EQDQP50vi2cDuUskEolEog8GqqmpWbRoUbuNlZWVX/jCFyoqKjoe//LLL99www3XXXddIpEoKip69tlnc9977bXXHjlypNefAkDvkh8BAP1T2CMQ/8WPGFAmT54cdQnnt1Qq1TcDfeUrX/nsZz+bvnvgwIF77rln3bp1X/7yl2trazsev2TJkmXLlr300kupVGrVqlV33XVX7ns/97nPffWrXz1HTwSgt/iLHADQP+k/Iob27t0bdQl0raqq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9dZba9eu7bN/3rx558+fLygoUDZrampKS0svX7484EWCwaBOp4scc0ka9CMY1pUHDPzuu++Gy1Uff/zxt7/97Rs3bggh9u3bd/369T/+8Y9K07PPPpuVlbV169YYrxxj7wPelyRJJ06c2LBhw4CHRRkNYKzodDqn02mxWNQOAgAYe01NTS6XS6vVTp8+3WAwqB0HAID4Ec+/rkfWj8IGrFAkJSW1tbUlJydHudpgpQ2j0djnfbEmk8nj8Shf2+32l19++e23366vrzebzQsWLLhw4UKMFZPoVx6SJEnd3d0pKSnKpsfjycnJcblcQohgMLho0aKKiori4uK7d++uXbv2ww8/HNufsaLUj6LcPvUjTADqRwAQx2RZ/vzzzyVJUlZEUjsOAADxg2+rQggxa9asjz76aGTnFhcXV1dXR866iizxlJSUPPLIIzdv3vR4PI2NjYcOHYp+tciCUfQrxyJyStonn3wSXtFJq9W+9NJL27ZtE0Js3759x44dk/MPdH3KZwAAANEplSOKRwAAjDm+swohxM6dO5988sna2lohhNvtrq6uLi8vLy0tjeXc559/vqys7Nq1a16v1+12X79+ff369eHW+vr69vZ2n8/ncDiqqqp27drV53S9Xq+sId3U1LR79+5ly5bFeOVYvP322xcuXPB4PB988MEPf/jD7du3h5seeuihUCj00ksvffbZZ+HZZJFGvH72aEQZDQCYnFpbWzs6OtROAeAftFotxSMAAMacTu0AE23mzJn9dz722GO5ublbtmyprq72er2zZ8/+7ne/+4c//CF8QPjVYMpm5ByrtWvXajSan/zkJ3/7298yMjK+/vWv/+53vwu3Hjt2bOvWrd/61rfS09O/8Y1v7Nix45VXXomcpaWsId3b2zt9+vR169a9+eabMV45OiXqzp07f/SjH/3bv/1bdnb29u3b+5Sffvvb3z7wwANVVVUDXiEYDI7gZ68+r3VTvgjfbHgYlT19NkXU0QCASai7u7u9vV0IYTQajUaj2nEAAACA8RLPy80MuP4Rwl5//fWjR49WVlaqHQSYUKx/hLHS09Pz+eefy7KcmZk5bdo0teMAAAAA4yjhnj+Core3d8eOHa+99praQQBgSurt7W1qapJlOTk5meIRAAAA4h71o4QTOcXsnnvuieMH0ABgnIRCIZvN1tvbm5SUlJ+fr3YcAAAAYNyxuOCUVFhYKA2isLAw+rnyP5uYwAAQT1paWnw+n1artVqtkUV5AJNWKBRqbm4OBAJqBwEAYKri+aMpqaGhQe0IAJCg2traXC6XJEn5+fk6Hd9GganBbrd3d3f7/f4BX6UCAACGxA++AADEyuVyOZ1OIUR2drbJZFI7DoBYZWVlBQKBnJwctYMAADBVUT8CACAmPp+vpaVFCGGxWHiFHzC16HS6GTNmqJ0CAIApjPWPAAAYmrJ4SigUMhqN2dnZascBAAAAJhT1IwAAhiDLclNTk9/v12q1+fn5rJkNAACAREP9KKHxKxAAxKK5udnj8Wg0moKCAtbMBgAAQAKifjQ0SZKos0w8hh3AJKG8cE0IkZeXl5SUpHYcAAAAQAUJVz8qLCwc7imyLI9HkvFmtVqHPGYy39pws8VyvwAwXN3d3eEXriUnJ6sdB8DY83q9akcAAGAKSLj60Z07d9SOMEGamprUjjChEu1+AUwAr9ervHAtPT09PT1d7TgAxl5ra+vnn3/e0dGhdhAAACa7hKsfDebq1atr1qyxWCwmk2n58uUXLlyYM2dO5AE1NTXLli3T6XQGg+HMmTORTXv27Nm8ebPVai0oKCgrK6urqws3KZOwXC5XSUmJwWDof+7+/ftnzZqVkpLy2GOPdXZ29pm09cYbbyxdutRsNhcXF58+fTrGeykqKlIuIkXoc0xNTc2A+5Wdr7zySmpqalVV1euvv26xWPpkHjLVkiVLlixZEmPaSAcPHpw9e3ZKSsqjjz7a2trap3WwcY7lfkc2kgASWSAQaGpqkmU5OTmZF64B8c3hcHR1damdAgCASY36kRBCnD9/fsuWLU899VRdXV1XV1dFRcWtW7eUCQthW7du3bdvXyAQqKys3LhxY2TT6tWrDxw4YLPZbty4kZubu2rVqnCTMglr27ZtTz/9tM/n63PuyZMnDx8+/N5777W3t//nf/7n888/LyLmbVVWVlZWVh4/fryjo+PkyZN79ux55513Yrmd2tpa5SJyhD7HzJ49e8AJYsrOlpaWgwcPrlu37sSJE/v374/MHEuqAXsc0pEjR1599dV3333X6XT+4he/+PWvf93ngMHGecj7HfFIAkhkoVBIkiSDwZCXl6d2FgDjJSsrS3m6sKWlhRISAABRSJN5BZxROnz48NmzZ0+dOiWEKCgosNlska1Wq7WxsVH5ev78+Xv37l26dOlgl5IkqampKfwrhCQNOm7BYFCn00W2SpJ04sSJDRs29D93wYIFR44ceeCBB5TNa9euLV26NNw6b9688+fPFxQUKJs1NTWlpaWXL1+O8fajhIx+jCRJgUBAp9NJkuTxeEwmU+Rho0wVxf33319ZWTlv3jxl8/r161/+8peHNc6DHTx+mTEV6XQ6p9NpsVjUDoIpoLe3V5ZlvV6vdhAA48vpdLa1tQkhsrOzmawKAMCAEuUlxOFS0YBVhk8++eT++++PfoXB/v5st9tffvnlt99+u76+3mw2L1iwoP8x4eJRH7W1tUVFReHNcOlEcfv27enTp0fuMZlM0UOOlfDbqfv3OH6pamtr77nnnvDm3LlzI1tjGefBqDiSAKa08D+GAOLbtGnThBBtbW0Oh0MIQQkJAID+mL8mhBCzZs366KOPRnZuSUnJI488cvPmTY/H09jYeOjQodjPLSoqun37dnjzxo0bka3FxcXV1dWRc7I8Hs/IQgohfD7fiM8dv1SRioqKPvvss/DmrVu3IluHO86R9zt+mQEAQHyYNm1aZmamEMLhcHR2dqodBwCASYf6kRBC7Ny588knn6ytrRVCuN3u6urq8vLy0tLSWM6tr69vb2/3+XwOh6OqqmrXrl2x97t9+/annnqqubk5GAx+/PHHr776amTr888/X1ZWdu3aNa/X63a7r1+/vn79+tgvrtfrlXWvm5qadu/evWzZstjPjSKWVCNbP3vbtm0//elPGxoa/H7/X//61/3790e2DjnOUe53lCMJAAASQbiEZLfbKSEBANCXHL8OHTq0fv36Pjtnzpw54MEXL15csWJFfn5+enr64sWLd+/e7Xa7laY+Y9Vn8+LFiwsXLjQajXl5eVu2bAlPlIvlXFmW9+7dW1hYaDKZvvnNbypvHItMde7cucWLFxsMhtzc3B/84AcNDQ2x3/7p06f1er0kSTNmzPjZz35ms9nCTVH+S4jc7P9FjKkWLly4aNGi2KOGlZeX33PPPWaz+Zvf/KbyAHmM4xz9fmPJjMSh1Wo7OjrUTgEAmKRaWlo+/fTTTz/9tLOzU+0sAABMIomyfvaU0N7enpeXN1YTzQAMiPWzAQDRhZ8/ysnJ4fsFAAAK5q9NFq2trS+88MITTzyhdhAASDiBQEB5AhQAhBA5OTkZGRlCCLvdzj8OAAAoqB+pye/379y5U6PRSJJUVFSUnJxcXl6udigASCyyLDc2Nra3t/NbIoCwrKysrKwsIQT/OAAAoKB+pCaDwbBjx45QKCTLckdHx29+8xutVhvLiYWFhdIgCgsLxzs2AMQTSZKysrL0ej1v7AYQKSMjI1xCstvtascBAEBlOrUDYCQaGhrUjgAA8SMlJSU5OVmSJLWDAJhcMjIyNBqNshxSKBTKzc3lHwoAQMLi+SMAAAS/EwIYkMViycnJEUJ0d3fb7fY4fvMMAADRUT8CAAAABmWxWJQnj9xudzAYVDsOAADqYP4aAAAAEE1aWppWq9XpdDodPzwDABIU3wIBAACAISQnJ6sdAQAANTF/DeOClUQATE6BQEDtCAAAAMDUQ/1oaJIkTblqyFTMDADjrbu7u6GhoaurS+0gAAAAwBSTcPWjwsLC4Z4yFV+0oXrmkQWwWq1jngQAFC6Xq6WlRZblnp4etbMAAAAAU0zC1Y/u3LmjdgQMqqmpSe0IAOKTy+VqamqSZTn8Km4AGCtut1vtCAAAjLuEqx8N5urVq2vWrLFYLCaTafny5RcuXJgzZ07kATU1NcuWLdPpdAaD4cyZM5FNe/bs2bx5s9VqLSgoKCsrq6urCzcp88hcLldJSYnBYOh/7v79+2fNmpWSkvLYY491dnb2mXf2xhtvLF261Gw2FxcXnz59erg35fV6v//976ekpHzhC18oLy+PjBTZi7I5e/bsyHOXLFmyZMmS4fYohKipqRls9lyU0SgqKlJOkSKMoHcA6M/tdjc3NwshUlNTKR4BGFsOh8NmszmdTrWDAAAwvqgfCSHE+fPnt2zZ8tRTT9XV1XV1dVVUVNy6davPzwFbt27dt29fIBCorKzcuHFjZNPq1asPHDhgs9lfLkcjAAAgAElEQVRu3LiRm5u7atWqcJMyjWvbtm1PP/20z+frc+7JkycPHz783nvvtbe3/+d//ufzzz8vImZ+VVZWVlZWHj9+vKOj4+TJk3v27HnnnXeGdV//8R//8Z3vfKelpeX06dP//d//ffz4cSFEd3f3nDlz7HZ7+LCurq65c+f+5S9/iTxXluWRzUGbPXv2YCdGGY3a2lqlVY4wgt4BoA+v16s8eZSSkpKXl6d2HADxRqvVCiGSkpLUDgIAwPiS4vi39MOHD589e/bUqVNCiIKCApvNFtlqtVobGxuVr+fPn793796lS5cOdilJkpqamsK/eEjSoOMWDAZ1Ol1kqyRJJ06c2LBhQ/9zFyxYcOTIkQceeEDZvHbt2tKlS8Ot8+bNO3/+fEFBgbJZU1NTWlp6+fLlGG9fkqR33303XMz6+OOPv/3tb9+4cUMIsW/fvuvXr//xj39Ump599tmsrKytW7fGeOUYex9wiKKMRpSzgDGk0+mcTqfFYlE7CCaCz+f7/PPPQ6GQyWQqKCjgwUYA4yEQCOj1erVTAAAwvuL51/XI+lHYgBWKpKSktra25OTkwS4Vpcxht9tffvnlt99+u76+3mw2L1iw4MKFC1FqIpGbKSkpDofDZDIpm263OyUlJdxqNBp9Pl9kDJPJ5PF4Yrt7IUlSd3d3SkqKsunxeHJyclwulxAiGAwuWrSooqKiuLj47t27a9eu/fDDDw0GQ4xXjrH3wepHMQ4OME6oHyUOn8/X2NgYDAaNRmNBQYFGwyO3AAAAwAjxw7QQQsyaNeujjz4a2bklJSWPPPLIzZs3PR5PY2PjoUOHYj+3qKjo9u3b4U3l4aCw4uLi6urqyPlcsRePFJFT0j755JPwik5arfall17atm2bEGL79u07duwY2+LRWOlTPgOA2Pn9fopHAAAAwFjh52khhNi5c+eTTz5ZW1srhHC73dXV1eXl5aWlpbGcW19f397e7vP5HA5HVVXVrl27Yu93+/btTz31VHNzczAY/Pjjj1999dXI1ueff76srOzatWter9ftdl+/fn39+vXDuq+33377woULHo/ngw8++OEPf7h9+/Zw00MPPRQKhV566aXPPvssPJss0ojXzx4NvV6vrKjd1NS0e/fuZcuWTXAAAPHB5/PdvXuX4hEAAAAwVnRqB5hoM2fO7L/zsccey83N3bJlS3V1tdfrnT179ne/+90//OEPSmv4vWDK1Ko+m8eOHdu6deu3vvWt9PT0b3zjGzt27HjllVcGO7jP5oYNGzo6Ov7lX/7FbrevWbNm7969e/bsCadau3atRqP5yU9+8re//S0jI+PrX//67373uxhvU+lo586dP/rRj/7t3/4tOzt7+/btfcpPv/3tbx944IGqqqoBrxAMBkfwG1ef17opX4SnpEUfDSGEsqJ2b2/v9OnT161b9+abbw43AAAo09ZCoRDFIwAAAGCsxPNyMwOufzSZtbe35+XlTdikrddff/3o0aOVlZUT0x0wSbD+UXzz+/2ff/45Tx4BmAw6Ozu7u7vz8/OVd7QBADClJdzzR5NWa2vr//t//++JJ56YmO56e3t37Njx2muvTUx3ADABKB4BmDxCoZDT6QwGg3fv3rVarZNzrUkAAGLHz9Zq8vv9O3fu1Gg0kiQVFRUlJyeXl5ePd6eSJEmSpNfrb9y4cc8994x3dwAwMQKBgLJgtsFgsFqtFI8AqEuj0UyfPl2v1wcCgbt377rdbrUTAQAwKvx4rSaDwbBjx45QKCTLckdHx29+85sYH28uLCyUBlFYWBj9XPmfjcV9AIDKlCePent7DQbD9OnTmSoCYDIwGAwzZswwm82hUMhms7W1tamdCACAkWP+2pTU0NCgdgQAmCxkWW5sbKR4BGAS0mq1VqvV6XS2t7c7nc6enp68vDwekAQATEV89wIATG2SJOXm5ppMphkzZlA8AjDZSJKUlZWlzKt1u90NDQ09PT1qhwIAYNji+fmjDz/88E9/+hNvWQIQSavVulwu/mWIM2az2Ww2q50CAAaVnJw8c+bMpqYmn8/3+eefZ2Vlpaenqx0KAIBhiOf60bx5877yla/s2bNH7SAAJpE5c+ZQaAAATDy9Xj9jxgy73d7V1eVwOHp6enJzcyVJUjsXAAAxief6kdFoTElJ4RVjAPpg4QkAgCqU+bYGg6G1tbW7uzsQCOTl5en1erVzAQAwNH6JAgAAACZORkZGQUGBVqvt6em5c+dOd3e32okAABhaPD9/JIT4y1/+8thjj6mdAsAkEgqF1I4AAEh0ZrN55syZzc3NXq+3ubnZ7Xbn5OTweCwAYDKTZFlWO8N4qa+v/+CDD9ROAWDSKSkpYbLAFNXV1RUKhVh0FkB8kGW5ra2tra1NCGEwGPLy8pKSktQOBQDAwOK5fgQAiCc9PT13794VQkyfPt1kMqkdBwDGhsvlamlpCYVCGo0mPz+flzwAACanOJ+/BgCIG0ajMSMjQwhB8QhAPElJSTEajc3NzYFAgOePAACTFs8fAQAAACqTZTkQCBgMBrWDAAAwMOpHAAAAAAAAiIa3PAAAAAAAACAa6kcAAAAAAACIhvoRAAAAMHkFg0GHwxEKhdQOAgBIaNSPAACTi9/vb2ho8Pl8agcBgEnBbrd3dHS0tLSoHQQAkNCoHwEAJhGv13v37l2/3+9wONTOAgCTQnp6ul6vz8zMVDsIACCh8f41AMBk0d3d3dLSIsuy0Wi0Wq1arVbtRAAAAACEEEKndgAAAIQQorOz0263CyHMZnN+fr5GwxOyAAAAwGRB/QgAoD6n09nW1iaESE1Nzc3NlSRJ7UQAAAAA/oH6EQBATbIst7S0dHd3CyEyMjKysrLUTgQAU0lvb69Wq6XsDgAYb9SPAACqCQaDNputp6dHkqScnJy0tDS1EwHAVCLLss1mk2U5JyfHZDKpHQcAEM9YPxsAoA6/32+z2QKBgEajyc/PN5vNaicCgCkmEAh8/vnnvb29Qoi0tLTs7GwWjwMAjBPqRwAAFXi9XpvNFgqFdDpdQUGBwWBQOxEATEmyLDudzvb2diGERqPJysqyWCxqhwIAxCHqRwCAidbd3d3S0iLLstFotFqtWq1W7UQAMLX5fL6WlhafzyeEMJlMOTk51OUBAGOL+hEAYEJ1dHQ4HA4hhNlszs/PZ6oFAIwJWZbb2tra29tlWdZoNNOmTUtPT1c7FAAgflA/AgBMEFmWHQ5HZ2enECItLS0nJ4cXBgHA2PL5fHa7vaenRwiRlJSUk5NjNBrVDgUAiAfUjwAAEyHyVWvZ2dkszwEA46ejo8PpdIZCISGExWKZNm0aM4UBAKNE/QgAMO5kWb5z547f79doNHl5ecnJyWonAoA4FwqFnE5nR0eHEILpbACA0aN+BACYCB0dHZ2dnVarVa/Xq50FABJFT0+Pw+FgOhsAYPSoHwEAJkgoFGK1bACYYLIst7e3t7W1ybIsSVJ6enpmZib/GgMAhov6EQAAABDnAoGAw+Fwu91CCK1Wm5+fbzKZ1A4FAJhK+MsDAAAAEOf0er3VarVarQaDQZZlg8GgdiIAwBTD80cAAABAopBl2e/3JyUlqR0EADDFUD8CAIwln8/HryUAAABAnGH+GgBgzDgcjjt37ijrawAAAACIG9SPAABjJhQKCSF8Pp/aQQAAI9Hd3e1yudROAQCYjJi/BgAYM7Isezye5ORktYMAAIYtFArV19cHg8H8/PyUlBS14wAAJheePwIAjBlJkigeAcDUlZaWlpSUxL/kAID+eP4IAAAAAAAA0fD8EQAAAAAAAKKhfgQAGLZgMKh2BADARAuFQsp7EgAACYj6EQBgeJxOZ319vd/vVzsIAGBCKf/+d3R0sAIGACQg6kcAgFgFg8HGxsa2trZQKMQLngEgoShv2AwGgw6HgyoSACQg1s8GAMSkp6enubk5EAhIkpSTk5OWlqZ2IgDAhJJluaurq62trbe3Vwih0+mmTZuWmpoqSZLa0QAA4476EQBgaB0dHa2trbIs6/X6/Pz8pKQktRMBANQhy3JnZ2dbW5uyFp5er8/IyEhLS6OKBADxjfoRACCa3t7elpYWj8cjhLBYLNnZ2fyGAABQqkjt7e3hZ5EyMjIsFgvfIwAgXlE/AgAMyuPxNDc3B4NBjUaTnZ3NnDUAQCRZlru7u9va2gKBgBBCq9VaLJaMjAyNhlVWASDeUD8CAAystbW1vb1dCJGUlJSXl2cwGNROBACYjPqsi6TVapVnkagiAUA8oX4EAOirt7e3ubnZ6/UKIdLT07OyspiPAACITqkitbe3Rz6LlJ6ertVq1Y4GABgD1I8AAP/E6/U2Nzf39vbynjUAwHApM9ra29v9fr8QQpKktLS0jIwMvV6vdjQAwKhQPwIA/J0sy21tbW1tbUIIg8GQn5/PnDUAwMh4vd729na32y2EsFqtycnJaicCAIwK9SMAgBBCBAKB5ubmnp4ewXvWAABjxOPxdHd35+bmqh0EADBa1I8AAKKjo6O1tVWWZZ1Ol5ubazab1U4EAAAAYBLRqR0AAKCyYDDY1tYmy7LJZMrLy9Pp+NYAAJggwWCQBbYBYErg+SMAgHC5XH6/PzMzU+0gAIAE4vf779y5k5qaygQ3AJj8+CMzAECkpKSoHQH/v707D4+jvu84/pvZ+5S0um3ZrmRDAqacSTBxoIBJCE1KSCBtHK7GDmeMk4fHltO4dWtS24G6edKQJ7Gd0lwPtE/pAy6UkHCFyFAHcxgSXNyAD0m2jHXtvTuzO0f/mLJZJO1qZR2j4/36Q89o5jcz35XAj/azv993AGDOSaVSpmnqum53IQCA0TH/CAAAAIA9stmsLMsej8fuQgAAoyA/AgAAAAAAQDmy3QUAAKZIPp9njQAAYAbJZDKJRIIPvAFgOmD+EQDMCalU6uTJk36/v7m52e5aAACoyLFjx6wFbuFwuLq62uVy2V0RAMxd9M8GgDnB6XSapqlpmmEYsszkUwDADBAIBDRNy+fzsVgsFov5/f6qqqpAICBJkt2lAcCcw/wjAJgrstms1+vlb24AwMySTqfj8Xg6nba+dTgc4XC4qqqK6UgAMJXIjwAAAABMd9YspEQiYRiGtcfn81VVVQWDQT4aAYApQH4EAAAAYMbIZDLWdCTrjYwsy4FAIBwO+/1+u0sDgNmM/AgAAADADJPP5xOJRCKR0DTN2uP1esPhcCgUos0fAEwG8iMAmD1SqVQymeQJawCAuSOdTicSicJ0JEmSCtORWNcGABOI/AgAZgNd13t7e1OplBCioaGhqqrK7ooAAJg6uq4nk8lEIqGqqhBCluXW1lYmIgHABCI/AoAZL5lM9vX16bouSVJNTU0kEuETVwDA3JTL5RKJhBCirq7O7loAYFYhPwKAGSyfz/f29mYyGSGEx+NpbGz0eDx2FwUAAABgtnHaXQAA4BTFYrGBgQHDMJh2BABAhawV38FgMBQK2V0LAMwk5EcAMPMoitLb22u1ePD7/Q0NDS6Xy+6iAACYAZLJZCqV0jSN/AgAxoT8CABmEsMw+vv74/G4EMLhcNTV1YXDYbuLAgBgxggEArqu87kLAIwV/Y8AYMbIZDK9vb35fF4IEQgEGhoanE4+BgAAYIKZpsmScAAYgjceADAD6Lre399vPVDG4XDU19cz6x4AgMmQyWR6enr8fn8wGAwGg7Is210RAEwLzD8CgOkuHo/39/cbhiGECIfDdXV1DofD7qIAAJid+vv7o9GotS1JUiAQCAaDgUCAIAnAHEd+BADTV3GfbK/X29DQ4PF47C4KAIBZTlGUQptta48kSdaMpEAgwKc4AOYm8iMAmKZM0zxy5Iiu67IsRyKR6upqejEAADCVFEVJpVKpVMpqPmjxer3WpCS3221jbQAwxciPAGD6isfjmUymvr6ePtkAANhIVdV0Op1KpaxJwRaXyxUIBAKBgM/n4zMeALMe+REAAAAAVETTtHQ6nU6nM5lM4Z2ULMvWjCS/30+bJACzFfkRAAAAAIyNYRiZTMbKknRdt3Z6vd4FCxbYWxgATBLyIwAAAAA4ddlsNpVKpdPpUChUW1trdzkAMCnIjwDATrlcbmBgoKGhgYe5AAAw05mmWaoRkmmauVyO56gCmLlYnQsAdjp58mQqlRoYGLC7EAAAMF5lumgritLV1dXV1TWV9QDABCI/AgA71dXVBQKBmpoauwsBAACTKJfLSZLkdrvtLgQAThHr1wAAAABg0pmmaRhGmRXriqJ4vd6pLAkAKkd+BAAAAAA2y+fzR48elWXZ5/P5/X6fz0ezJADTitPuAgAAAABgrsvn8w6HQ9f1dDqdTqeFEGRJAKYV5h8BwORKJpMDAwPNzc385QcAAMpTVTX7Hl3XC/sLWZLH4/F6vWUadQPAJCE/AoDJks1m+/r6VFUVQoRCoaamJrsrAgAAM0apLEmSJI/H43uPLPNMJABTgfwIACZePp/v6+srTD6vqampqanho0IAAHBqSmVJQggrS6qqquLhbgAmFfkRAEwkXdcHBgYSiYT1r2s4HK6trXU6aTYHAAAmhqZpVpykKIqiKNafHAsXLmSlPIBJRX4EABPDMIxYLBaNRg3DEEL4/f66ujr+kgMAAJNH13UrRaqtrS01RtM0IQSfZgEYJ/IjABgv0zSt5MiaT+7z+erq6rxer911AQAAiN7e3ng8XlNTU1dXZ3ctAGYwQmgAGJd4PD44OGh9sudyuerq6oLBoN1FAQAA/D/TNCVJ4pMtAOPE/CMAOEWKovT392ezWSGELMuRSKS6upom2QAAYLqx3vSV+islm8329vZ6vV6Px2N95e8ZAMMx/wgAxiyXyw0MDKRSKSGEJElVVVWRSMThcNhdFwAAwAjK50GqquZyuVwuVxjsdrsLcZLb7SZOAiCYfwQAY6JpWn9/fzKZtL4NhUK1tbUul8veqgAAAE5ZoQm3qqqqqlqr8gskSXK5XB6Px+PxuN1uj8dDK25gbiI/AoAxUFW1q6tLCFFVVVVTU0NyBAAAZhlN09Qi+Xx+yACHw2EFSYVQiQlKwFxAfgQAYzM4OOj3+2lCCQAA5gLTNPP5fGF2kqqqhmEUD5g3b14gELCrPABThvwIAAAAAFAR0zRzuVzxBKWFCxeWmpGdz+dzuZzb7WbKNjALkB8BAAAAACZeNBrt7+8PhUJNTU121wJgvOh8BgDvYxhGPB73er0+n8/uWgAAAGYwSZKsHkllxvT397tcLrfb7Xa7eZotMJ0x/wgA3qevry8Wi/l8vpaWFrtrAQAAmM00TTty5EjhW1mWrSDJ5XJZoZLL5ZJl2cYKARQw/wgA3qempiaVSoVCIbsLAQAAmP1qampyuVwul8vn84ZhKIqiKErxAIfDUciSCrkSoRIw9Zh/BAAAAACwmdWZ22q5nc/nrQ1d10ccbIVKgUAgEolMcZ3AnMX8IwAAAACAzUZslmQYRiFLKg6VLG63u8wFk8mk0+n0er2SJE1y7cCcQH4EYM4xDCORSFRVVfHHBAAAwHQmy3KZUMnpLPl+1jTNkydPmqbZ2tpaaphpmvw1CFSO/AjAHGIYRiwWi0ajhmE4HA6aHAEAAMw4I4ZKQxiG4ff7NU0rkzENDg5Go1Gn0+lyuQpfLQ6Hg4fBAUOQHwGYE3Rdj8VisVjMMAwhhNPp5OMmAACA2crhcMybN6/8GE3TTNO0pjINPypJksPhsLKkQqhUnC7xxyTmGvpnA5jlNE0bHBxMJBLWP3derzcSiQQCAbvrAgAAgJ0Mw9Dek8/nC9tWc6VRT583bx5/UmJOYf4RgFlL07RoNBqPx63kyOPxRCKRYDBod10AAACwnyzLbrd7xCbcpmkWsqTiXMnasOazy7Jc6srpdPrEiRN+v7/MHCjDMMpcAZiGyI8AzEKqqkaj0VQqxZwjAAAAjJUkSS6Xy+VyjXjUMAxd18t0VtJ13TTN8mt9jh07pqqqYySyLFtfizfG+5KAcSM/AjCrZDKZaDSayWSsbwOBQE1Njc/ns7cqAAAAzBqjBjqhUMjv95fPj6wlchWulRNCDEmUGhsbS9Vg3Zf2TKicFXcahmEYhmmahQC0eCMYDNL/CMBsYJpmPB6PxWJW+0NJkqqqqqqrq0t9agQAAADYSy/Bmt9U+Drie/YlS5aUSogGBgYGBwerq6vr6+tL3ToajUqSZPUIL96wIiprz4S9TkwJVVWFEG63u9TvLp1OJ5PJ4oSoEBhVkgvV1dUx/wjAzGYYhtXkyProRpbl6urq6upqHrkKAACA6cxarTbqMOtN/pBoqUy+M2p7JtM0+/v7y9/UipCsLMm6lFWqFTA1NjaWOlFVVV3X3W53mfV9c5amablcztq2fk1CCCvHMd9TZjsUCtXU1JS6eFdXlxCira2t1H9UuVwumUyWr7Dwe7d+9cXxotvt5jcKYGbr6uqy5hw5HA5rzhHJEQAAAGYN68185XFMXV1dTU1N+fwoGAwWTz8ZPg+lkFkMP718JYODg6lUqr6+vrq6esQB+Xz+6NGj1nbxRKdCUGUZsl0Y5nK5GhoaSt19YGAgl8vV1NR4vd4RB+RyuYGBgTL1FwzJd6xtv99fV1dX6pQjR45omrZgwYJSd89ms++++24ldx9RqctanE5nqdlqFp/PV1dXN555Z+RHAGa2QCCQSqVqamrC4TCdBQEAADDHSZJUPuKRZbm5uXnEQ8P74Ij3kpTCdvk/uV0ul8fjKVNAccAxZOVUJa2gymcomUxGUZRQKFRqgK7rqVRq1LuUUv4Ha4UvZRIcWZat9hrWz7AQ2VgnFmZ4iaI0rXhk+bu3traWL97r9Zb/6Y2K/kcAZjZr+i4rtAEAAIAZoTDpaXjnneEzaIbMgZJl2e/3l7pyKpXSdd3v95fqgqppWjqdrqTI4jUNhcjM4XB4PJ5Sp+i6XpwHzT7kRwAAAAAAACiHtR4ApjWrPXYikbC7EAAAAACYu8iPAExryWSyv79/cHDQ7kIAAAAAYO6ifzaAaS0cDqdSqVAoZJrmbF1IDAAAAADTHP2PAAAAAAAAUA7r1wDYT9M0u0sAAAAAAJTE+jUAtjFNM51Ox2IxRVFaW1uLn5EJAAAAAJg+yI8A2EDTtHg8nkgkrJlHkiRls9lgMGh3XQAAAACAEZAfAZhSmUwmFoul02nrW4fDUVVVVVVV5XTyzxEAAAAATFO8YQMwFTRNi8ViyWSy0OooGAxWVVX5/X57CwMAAAAAjIr8CMDksjocZTIZ61smHAEAAADAjMP7NwCTwjCMZDIZj8dVVbX2eL3eqqqqUCgkSZK9tQEAAAAAxoT8CMAEUxQlHo8nk0nTNIUQkiSFQqGqqiqv12t3aQAAAACAU0F+BGDCpNPpgYGBwoQjj8cTDofD4bAsy/YWBgAAAAAYD/IjABNJVVWHw2HFRm632+5yAAAAAAATQLIWmADA+JmmmUgkQqEQE44AAAAAYDYhPwIAAAAAAEA5zBEAUClN0/r6+k6cOGF3IQAAAACAKUX/IwBjEIvFhBD5fN7lctldCwAAAABgirB+DcAYRKNRj8fj9/vtLgQAAAAAMHXIjwAAAAAAAFAO/Y8A/L98Pj84ONjd3U2sDAAAAAAoRv8jYK7TdT2RSCQSiVwuZ+1Jp9PBYNDeqgAAAAAA0wf5ETBHmaaZTqeTyWQ6nS5MOPL5fKFQiPZGAAAAAIBi5EfA3GKaZiaTSafTqVRK13Vrp8fjCYVCoVDI6eTfBAAAAADAULxXBOaKTCaTTCZTqZRhGNYep9MZCoXC4bDb7ba3NgAAAADAdEZ+BMxyiqIkk8lkMlmYbeRwOILBYCgU8vl89tYGAAAAAJgRyI+A2UlVVSs20jTN2iPLciE2kiTJ3vIAAAAAADMI+REwO/X19WWzWSGELMtWbyNmGwEAAAAATg35ETA7hUIhKzkKBAKyLNtdDgAAAABgBpMKz+0GAAAAAAAAhmNWAjAjxWKxzs7OdDptdyEAAAAAgNmP/AiYkXK5XC6XS6VSdhcCAAAAAJj9WL8GzEiqqiqKEgwGHQ6H3bUAAAAAAGY58iNgOjJNM5PJeDwep5Mm9wAAAAAAm/HWFJhGNE1LpVLpdDqbzZqmWVtbG4lE7C4KAAAAADDXkR8B9tM0LZ1Op1IpKzaydjqdTkmS7C0MAAAAAABBfgTYSFVVa7aRqqqFnW63OxAIBINBr9drY20AAAAAABSQHwFTympslE6n0+m0pmmF/T6fLxAIBAIBt9ttY3kAAAAAAAxHfgRMhVwuZ2VGiqIUVqg5HI5gMBgIBHw+nyzL9lYIAAAAAEAp5EfA5IrH44lEQlGUwh6n02mtUPP5fHQ4AgAAAABMf+RHwORSVdUKj7xer7VCzePx2F0UAAAAAABjIBWW0gCYDIqiqKoaCAScTuJaAAAAAMCMRH4EjEsmk0mlUtXV1fS9BgAAAADMVkyIAMYlGo1mMhmXy0V+BAAAAACYrciPgHEJhUIul8vn89ldCAAAAAAAk4X1a0BJpmlms9l0Ol1bWyvLst3lAAAAAABgD+YfAUPl8/l0Op3JZDKZjBWw+ny+YDBod10AAAAAANiD/AgQQghN07LZrJUZaZpW2O9wOPx+v8PhsLE2AAAAAADsRX6EuUvXdSszymazuVyusF+SJJ/P5/f7/X6/x+OxsUIAAAAAAKYD8iPMLZqmZTIZRVEymUw+ny/sJzMCAAAAAKAU8iPMCYZhRKNRKzkq3u92u/1+v5Uc0SEbAAAAAIARkR9hrohGo1YzbKfTac0z8vl8Tif/CwAAAAAAMArePGNOkGW5pqbG6XT6fD632213OQAAAAAAzCSSNSMDmNEURenr65Nlef78+XbXAgAAAADAbMP8I8wGsiwriiJJkmmakiTZXQ4AAAAAALMK848wM+RyOSFEmaVniUTC5/O5XK4pLAoAAAAAgDmBB05hmjJNM5PJDAwMHD9+/NChQ52dnZzkSboAABUxSURBVIODg2XGh8NhwiMAAAAAGKe33nrrzjvv/OAHPxgMBgOBwAc+8IE77rjjrbfeGjJMqkCpwYFAYOnSpXffffe77747vIBsNrt9+/aLLrqourra6XTW1tYuX75848aNb7zxxqm9ouJixlR2hZUUTrz++uuH3/36668ffuXynnvuuT//8z9vaWnxeDxNTU1f+MIXOjo6Tu21TyDmH2Ea0XVdKWIYRuGQLMvBYLCxsdHG8gAAAABgdrv33ns3btyo6/qQ/Q6HY+vWre3t7YU9laQhhcCh1ODGxsa9e/e2trYW9vT29l5++eUHDhwof8Exse5unVt52ZVXYl1TkiSPx3PixInq6urCoVgs1tzcrKqqNX7U+g3DWLNmzQ9+8IPyd7QF849gM1VV4/H4yZMnOzs7Dx8+3NPTMzg4mMlkDMNwOBzBYLC+vn7BggVtbW2ERwAAAAAwef7pn/7p61//umEYq1evfumll5LJZDqd3rdv35e//GXDMDZs2PDd7363MNh8vzI7h5/S29u7e/futra2kydP/vVf/3XxmPb29gMHDsyfP/9HP/pRd3e3qqqxWGzv3r1bt249++yzx/8aKy97rJVcfvnliqI89NBDxTsffPBBRVFWrFhRYXkbN278wQ9+4HQ629vbDx48qKrqyZMnH3zwwQsvvHAcL3piMP8IU63MJCMhhNvt9vl8Xq/X6/WW6XYEAAAAAJhA3d3dS5YsyeVy//Iv//KlL31pyNEf/ehHq1atcrvdhw4damlpGX568RyfCo+++OKLH/vYxxoaGk6ePFnYWVtbOzg4uHfv3mXLlo3zFVVSW5lDlVdiXeShhx764he/eP7557/66quFQ+eff/7+/fv/9V//deXKlaVuVPD73//+jDPOMAxjxF+B7Zh/hCnV3d09ZJKRLMt+vz8SicyfP3/x4sWLFi1qaGgIh8OERwAAAAAwZXbs2JHL5a677roRk4svfelL1157bS6X27Fjx0Td8ZxzzhFCxOPx4p3pdFoIcdppp416+ogdhcbUZqi8yiuxfO5zn4tEIq+99trrr79u7dm/f//+/fsjkchnP/vZSq6wc+dOwzA++tGPTsPwSJAfYYrJsiyEcLlcoVCooaFh4cKFixcvnj9/fm1trd/vt44CAAAAAKbY008/LYS45ZZbSg2wDj3zzDMTdcfXXntNCDFkNtN5550nhFi9evU777wzUTc6NWOtxOPxWP2zH3jgAWuPtXHDDTd4PJ5KrvD8888LIW688cZTqnfSsX4NE0bX9UQikc/nGxoaSo3J5/OyLDscjqksDAAAAABQXiQSiUajAwMDkUhkxAH9/f319fW1tbX9/f3Dj45p/Vp/f/+ePXvuvvvuo0ePbtq0afPmzYWRe/bs+cQnPqEoihCira3t3HPPPeussy655JJLL710yBvJEe9Y+c5RD51CJW+88ca5555bU1PT09MjhGhubo7FYm+88cbZZ59d/udjqampicVir7/++v/+7/9u3779zTffdDqdZ5555he+8IWvfOUrtj9wnPwIE0bX9cOHDwsh2traSIgAAAAAYAZxuVyapuXzeafTOeKAfD7vdrudTmc+nx9+tJL8aLiVK1f+5Cc/GZKMHDx4cOvWrbt3704mk4WdLS0t3/nOd6699toKX06FtZUvu8JKii/y4Q9/+JVXXnnooYdM07z++us//OEP79u3b9QbWZxOp67r69ev/4d/+Ichh5YtW/b0008Hg8GKXvDkID9CpUzTVFVVCOH1ekuN6evrc7lc4XCYlWgAAAAAMINMwfyjIVpaWh577DFrmdhwuq6/+eabBw4c2Ldv389//vO3335bkqRHH330M5/5TKUvqYLaKol1Rq2k+CI7duy44447VqxYYZrmc889t2PHjttuu63CG4VCoVQqJUnSRz/60a1bt55zzjn5fH737t3r16+PxWLr1q0bnitNJfIjlGQYRjabVRRFVVVVVTVNE0IEAoF58+bZXRoAAAAAYCJ95CMfefnll5966qmPf/zjIw546qmnrrzyyo985CMvvfTS8KOVr1/L5/NHjhzZsmXLT3/60/r6+t/97neNjY3lazMMY+PGjd/61reGPN2sQuPMj0atpPgi8Xh83rx52WxWCOHz+U6cOBEOhyu80WmnnfbOO++EQqGurq7q6urC/scff/zqq69euHBhZ2dnhXVOBiaJ4A8Mw1AUJR6P9/b2Fj8oLZ1OW+GRw+FgYhEAAAAAzD5XXHGFEOKHP/xhqQHWIWvYeLhcrtNPP/3HP/7xlVde2dfXt3HjxlFPkWV5w4YNQogDBw6M8+7jNGolVVVV1113nWmapml+/vOft8KjCp177rlCiNNPP704PBJCXHLJJUKId99999TrnghkAXOapmmZTCYajZ44caKzs/PQoUPd3d29vb3xeFxRFNM0nU5nIBCIRCLz5s1rbW1ta2tramqyu2oAAAAAwAS7/fbbXS7Xww8//LOf/Wz40Z/+9Kf/8R//4Xa7b7/99gm5nSRJ3/3ud51O509+8pPf//73o463HoJmbwOgCitZvXr1kI0K/dmf/ZkQ4u23347H48X7Ozo6hBC2rwQiP5qLBgYGjh8/fvjw4SNHjhw/fry/vz+VSuVyOSGEy+UKBoO1tbXz5s1ra2trbW2dN29ebW1tIBAo1UQNAAAAADDTLVy4cNu2bUKIm2+++dZbb3355ZczmUw2m33llVduu+22v/zLvxRCfOtb31qwYMFE3fH0009ftWqVpmnFU5CWLl26cePGX/7yl93d3aqqKopy5MiR73//+1azoauuuqowUpKk4W2VRtx5aiqvZIhLLrnEmn908cUXj+mOf/EXf7F48eJEIvGpT31qz5498Xi8v7//gQceuOmmm4QQX/ziF8f5isaJ/kdzUWdnp5UWSZLk9Xo9Ho/H4/F6vS6Xa6L+TwMAAAAAzDhbtmzZtGmTYRhD9suy/M1vfvMb3/hGqRMr739UrKenZ8mSJYqi7Nu370Mf+pAo/aQ2IcQZZ5zx3HPPFdbEjHjNyndWeOiUK6n8RsVeffXVFStWDJl/JIS49NJLf/7zn/t8vvKnTyryo9kmn88nEglJkkr1zBdCWP8tWrERgREAAAAAoODAgQPf+973nn322ePHj5um2dLScvnll991111Lly4tc9ap5UdCiK9//ev33nvvFVdc8fTTTwsh/ud//mf37t0dHR0HDhzo7e01TbO2tnbp0qXXXHPNl7/85eKngU92fjTOSiq/0RDHjh3bsmXLk08+2dPT4/P5zjrrrBtuuOHWW291OByjnjupyI9mG1VVu7q6HA5HW1ub3bUAAAAAAIDZgI42M4ZhGLlcTlXVfD7v8/kCgcCIw9xudzgcdrvdpmkytwgAAAAAAIwf+dE0lc/nc7mcFRjlcrl8Pl+8ANU0zVL5kSRJjY2NU1UmAAAAAACY/ciPpgVd13Pvp2na8GFOp9Ptdrvdbr/fP/VFAgAAAACAuYn8yB66rieTyUJapOv68DGFtKjA9nZZAAAAAABgDiI/soeu6319fcV7hqRFHo9HlmW7ygMAAAAAACggP5oUyWQylUoFAoFwODziAJfLFQwGXS5XITAiLQIAAAAAANMT+dEpKv90s1wul0qlHA5HqfxIkqTm5uZJqw4AAAAAAGDCkB+NzjRNTdOsB6IVvubz+dbWVqdz5B9gIBBwOBxer3eKSwUAAAAAAJhwrJl6H9M0c7lcOp2ORqO9vb3Hjx8/evTooUOHjh49evz48b6+vlgslslk8vm8EML6OiKv11tdXU1+BAAAAACYQV599dWbbrqptbXV6/X6fL4PfOADq1ateuGFF+yuSwghyqwBEkL88pe//PSnP11fX+9yuZqamq699tpnnnlmyu4+F0imadpdg22sZ59Zk4msDU3TRhwpSZLb7Xa9h6ehAQAAAABmme985zs7d+78xje+cdlllzU2Nkaj0V/96lf33nvv/v37p0N0IEklE4xNmzY98cQTmzdvXr58udfrff311++9997//M//LF92mQuOc/CsNKdf/8mTJxOJxJCdsiwXQqJCYFRqnRoAAAAAALNAR0fHnXfe+d///d9D2vgahrFu3bpvf/vbdhVWUCrBeeqpp9rb2/fu3evz+Yr333PPPZs2bTqFC45/8Kw0a9ev6bre3d195MiRMmM8Ho/X6w2FQpFIpKmpacGCBW1tbYsXL164cGFzc3NtbW04HPb5fIRHAAAAAIDZ7dvf/vamTZuGPwNKluXi8Oixxx4777zzPB7PH/3RHz3wwAOF/ZIkPfTQQ+eff77X621sbLzxxhsHBgYqPOvCCy8MBoOFJT7Hjx9fs2ZNKBRqbW1tb29XFKV85ffff/+mTZuGhEdCiEJ4NOIFrfVo0nsKZ1Vy9507dy5ZssTtdi9ZsuSHP/xh8aFdu3a1tra63e7TTjtt586ds2nV28zLj3RdVxQllUrFYrF0Ol1qmMPhUFXV6ntdakx1dfWCBQuamppqa2tDoZDX62VJGgAAAABgDtq7d+9ll11WfsyLL7548803t7e39/X1/fu///vWrVuffPLJwtEtW7Zs3769v79///79hmHcddddlZy1efPmbdu29fb26rpu7Vm+fPkFF1xw4sSJX/3qV52dnZs3by5f1W9+85uLL764zIARL2hNJjLfU35wsUcfffTv//7vd+3aNTAwsGvXrnvuuefxxx+3Dv3Xf/3Xtm3bfvzjHw8ODv7zP//ztm3bylc+s0zT+VeFR55pmjZko7jgUCjU1NRU6iKZTMbhcLjd7tkU+AEAAAAAMOFcLlc2mx2y/qbwbtp6J/7xj3/8tttuu+6666ydL7300po1a15++WVr5GuvvXbeeedZh3p7e88888z+/v5Rz+ro6CiT/kSj0Q996EOHDh0SpVeQjVj5eC5YfvDy5cvXr19/zTXXWGMeffTRf/zHf7RajF9yySXt7e2f/vSnrUOPP/741VdfPT1Tl1Ngc35kPe+skBAVcqJSfawtTqfT6knk8/mqqqqmrFoAAAAAAGalhoaGN998s6GhYfihQnRSX19vRUIFDofDev8uSZKu67Isj/WsbDZb/OzywcHBv/3bv33iiSd6enpUVR0yeMQEo76+/q233qqrqxvxdY3pgpUMjkQihw4dqqmpsU6JRqOLFy8eHBy0Dh0+fLi6urpwKBKJzJr8yOb1a6qqdnV19fT09PX1RaPRVCqlKIr1u5Fl2e12BwKBqqqq2trapqamlpaW1tbWJUuWtLa2trS0NDU1ER4BAAAAADB+y5Yte/bZZ8uPSaVSyWTSLFI8+aM4PKr8rOLwSAhx0003aZr2i1/8IhaLmaaZSqUK69pKufDCCzs6OkodHdMFT+Huc8fkdobu7e1NJpN1dXWlgh5nEWtKkfXV6XTSiggAAAAAgKmxdu3aO++888orr4xEIqXGXHDBBa+++uqf/MmfjOnKYzqro6Oju7u7kCGMGmkJIdasWfNXf/VXV1111ZAW2t/85jf/5m/+pswFnU6nruvF4UMldz/jjDM6Ojo+85nPWN/++te/PvPMM63ts84664UXXiisX3vxxRcreMUzRqXzj3Rdz+VymUwmkUhEo9G+vr4TJ04cO3asu7u7/ImGYZRZjOZ0OltbWxcsWNDc3FxXV1ddXR0IBDweD+ERAAAAAABT5oorrrj55psvuOCCXbt2HTlyJJfLJZPJgwcP3nfffYUxmzdvXrduXUdHRyqVSqfTzz777Kc+9alRrzyms84555z77rtvcHAwFos9/PDDt95666jX/+QnP/mnf/qnF1988RNPPBGPxxVF+c1vfnPNNddYz18rc8GFCxc+88wzhmGM6e7r1q1bu3bt888/n0qlnn/++a9+9asbNmywDrW3t69du3bPnj3pdHrPnj1r164dtfgZ5A+L/XRd13W90H7I2i7sKbNgb8mSJaUaVFsnOp1OOlgDAAAAADDNdXR03H///S+++GJfX5/b7V60aNEnPvGJ1atX//Ef/7E14Ne//vXmzZv37dtnGMayZcs2bty4YsUKMVIvoeI9lZ919OjRu+66a8+ePYqifPCDH7z77rtvvvlma0z5dtdPPvnk/fffv2/fvng8Xltbu3z58jvvvHPFihVlLvjII4+sW7euq6tL13VrT4V337Fjx/bt2zs7OxctWrRhw4ZbbrmlUMbOnTu3bdvW09OzaNGiNWvWtLe3W32UZgHJNM2urq5cLjdqSydZlgsrywqLzhwOh9frJR4CAAAAAAAo2Lt376pVq9566y27C5kYTiGE1b9KCCFJUnEwNGS7VCssAAAAAAAA3HjjjRs2bGhra/vd7353++23r1q1yu6KJoxTCNHU1CRJksPhoOsQAAAAAADAqbniiitWrlx5+PDhRYsW3XLLLV/96lftrmjClFs9CAAAAAAAALAkDQAAAAAAAOWQHwEAAAAAAKAc8iMAAAAAAACUQ34EAAAAAACAcsiPAAAAAADAH3R2dnZ3d1vbqVTq6NGj1raqqgMDA0KIdDp97NixY8eOvfvuu8UnFg8eGBg4ePBgmSsXb2P64/lrAAAAAADg/z322GO//e1vBwcHW1tbr7vuuq997WvnnHOOx+O5+uqr77vvvr6+vt27d7/yyiu/+MUvstnsyy+//NRTT1knnjhxojD40ksv3bJly0UXXXTo0KEdO3YMv/KiRYsK23fddZd9LxeVIj8CAAAAAADvk0gk7rjjjosuumjp0qWXXXbZ5z73uUceeUQIcc011+zevdsa87Of/czpdK5cudL69nvf+15h8OrVq995550bbrjhK1/5yr/9278Nv/KDDz44ZBvTHOvXAAAAAADAH5im2d7evn79+r6+vvr6+lLDHn300c9+9rOHDx9+5ZVXstls8eDzzz9/7969a9euveqqqwoDiq88ZBvTH/kRAAAAAAD4g3Xr1n3+858/99xz58+f39PTI4SQJGnImHfeeaelpcXr9fb09Bw8eFBRlOLBDzzwwNe+9rUHH3zwkUceKQwovvKQbUx/jr/7u7+zuwYAAAAAADAt7Nq16+GHH06n02+//fbKlSvvueeeF1544eKLL160aNH69etfeOGFbDb7sY99bPv27ddff31zc/PChQvPPvtsn8/X2tpaGLxs2bLt27e//vrrgUDgtttuswYUX/m3v/1tYXvZsmV2v2iMjv5HAAAAAABgZKZpKori8/nGOljTtGw2GwqFJrlATJH/A2wGHHe4IBW1AAAAAElFTkSuQmCC
PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiID8+CjxvdHJzX2NvbmZpZyB2ZXJzaW9uPSIyLjAiIGluaXQ9IkZyYW1ld29yayI+CiAgICA8U2V0dGluZyBOYW1lPSJGcm9udGVuZDo6TW9kdWxlIyMjQWRtaW5HZW5lcmFsQ2F0YWxvZyIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5Gcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgQWRtaW5HZW5lcmFsQ2F0YWxvZyBjb25maWd1cmF0aW9uIGluIHRoZSBhZG1pbiBhcmVhLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPE5hdmlnYXRpb24+RnJvbnRlbmQ6OkFkbWluOjpNb2R1bGVSZWdpc3RyYXRpb248L05hdmlnYXRpb24+CiAgICAgICAgPFZhbHVlPgogICAgICAgICAgICA8SXRlbSBWYWx1ZVR5cGU9IkZyb250ZW5kUmVnaXN0cmF0aW9uIj4KICAgICAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iR3JvdXBSbyI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxBcnJheT4KICAgICAgICAgICAgICAgICAgICAgICAgPC9BcnJheT4KICAgICAgICAgICAgICAgICAgICA8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJHcm91cCI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxBcnJheT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtPmFkbWluPC9JdGVtPgogICAgICAgICAgICAgICAgICAgICAgICA8L0FycmF5PgogICAgICAgICAgICAgICAgICAgIDwvSXRlbT4KICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkRlc2NyaXB0aW9uIiBUcmFuc2xhdGFibGU9IjEiPkFkbWluLjwvSXRlbT4KICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlRpdGxlIiBUcmFuc2xhdGFibGU9IjEiPkdlbmVyYWwgQ2F0YWxvZzwvSXRlbT4KICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik5hdkJhck5hbWUiPkFkbWluPC9JdGVtPgogICAgICAgICAgICAgICAgPC9IYXNoPgogICAgICAgICAgICA8L0l0ZW0+CiAgICAgICAgPC9WYWx1ZT4KICAgIDwvU2V0dGluZz4KICAgIDxTZXR0aW5nIE5hbWU9IkxvYWRlcjo6TW9kdWxlOjpBZG1pbkdlbmVyYWxDYXRhbG9nIyMjMDAxLUdlbmVyYWxDYXRhbG9nIiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPkxvYWRlciBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgYWdlbnQgaW50ZXJmYWNlLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPE5hdmlnYXRpb24+RnJvbnRlbmQ6OkFkbWluOjpNb2R1bGVSZWdpc3RyYXRpb246OkxvYWRlcjwvTmF2aWdhdGlvbj4KICAgICAgICA8VmFsdWU+CiAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJKYXZhU2NyaXB0Ij4KICAgICAgICAgICAgICAgICAgICA8QXJyYXk+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtPklUU00uR2VuZXJhbENhdGFsb2cuanM8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgPC9BcnJheT4KICAgICAgICAgICAgICAgIDwvSXRlbT4KICAgICAgICAgICAgPC9IYXNoPgogICAgICAgIDwvVmFsdWU+CiAgICA8L1NldHRpbmc+CiAgICA8U2V0dGluZyBOYW1lPSJGcm9udGVuZDo6TmF2aWdhdGlvbiMjI0FkbWluR2VuZXJhbENhdGFsb2cjIyMwMDEtR2VuZXJhbENhdGFsb2ciIFJlcXVpcmVkPSIwIiBWYWxpZD0iMCI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+TWFpbiBtZW51IGl0ZW0gcmVnaXN0cmF0aW9uLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPE5hdmlnYXRpb24+RnJvbnRlbmQ6OkFkbWluOjpNb2R1bGVSZWdpc3RyYXRpb246Ok1haW5NZW51PC9OYXZpZ2F0aW9uPgogICAgICAgIDxWYWx1ZT4KICAgICAgICAgICAgPEFycmF5PgogICAgICAgICAgICAgICAgPERlZmF1bHRJdGVtIFZhbHVlVHlwZT0iRnJvbnRlbmROYXZpZ2F0aW9uIj4KICAgICAgICAgICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgICAgICAgICA8L0RlZmF1bHRJdGVtPgogICAgICAgICAgICA8L0FycmF5PgogICAgICAgIDwvVmFsdWU+CiAgICA8L1NldHRpbmc+CiAgICA8U2V0dGluZyBOYW1lPSJGcm9udGVuZDo6TmF2aWdhdGlvbk1vZHVsZSMjI0FkbWluR2VuZXJhbENhdGFsb2ciIFJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+QWRtaW4gYXJlYSBuYXZpZ2F0aW9uIGZvciB0aGUgYWdlbnQgaW50ZXJmYWNlLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPE5hdmlnYXRpb24+RnJvbnRlbmQ6OkFkbWluOjpNb2R1bGVSZWdpc3RyYXRpb246OkFkbWluT3ZlcnZpZXc8L05hdmlnYXRpb24+CiAgICAgICAgPFZhbHVlPgogICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iR3JvdXAiPgogICAgICAgICAgICAgICAgICAgIDxBcnJheT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0+YWRtaW48L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgPC9BcnJheT4KICAgICAgICAgICAgICAgIDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iR3JvdXBSbyI+CiAgICAgICAgICAgICAgICAgICAgPEFycmF5PgogICAgICAgICAgICAgICAgICAgIDwvQXJyYXk+CiAgICAgICAgICAgICAgICA8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik1vZHVsZSI+S2VybmVsOjpPdXRwdXQ6OkhUTUw6Ok5hdkJhcjo6TW9kdWxlQWRtaW48L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik5hbWUiIFRyYW5zbGF0YWJsZT0iMSI+R2VuZXJhbCBDYXRhbG9nPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJCbG9jayI+QWRtaW5pc3RyYXRpb248L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkRlc2NyaXB0aW9uIiBUcmFuc2xhdGFibGU9IjEiPkNyZWF0ZSBhbmQgbWFuYWdlIHRoZSBHZW5lcmFsIENhdGFsb2cuPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJJY29uQmlnIj5mYS1ib29rPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJJY29uU21hbGwiPjwvSXRlbT4KICAgICAgICAgICAgPC9IYXNoPgogICAgICAgIDwvVmFsdWU+CiAgICA8L1NldHRpbmc+CiAgICA8U2V0dGluZyBOYW1lPSJHZW5lcmFsQ2F0YWxvZ1ByZWZlcmVuY2VzIyMjQ29tbWVudDIiIFJlcXVpcmVkPSIwIiBWYWxpZD0iMCI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+UGFyYW1ldGVycyBmb3IgdGhlIGV4YW1wbGUgY29tbWVudCAyIG9mIHRoZSBnZW5lcmFsIGNhdGFsb2cgYXR0cmlidXRlcy48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxOYXZpZ2F0aW9uPkNvcmU6OkdlbmVyYWxDYXRhbG9nPC9OYXZpZ2F0aW9uPgogICAgICAgIDxWYWx1ZT4KICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik1vZHVsZSI+S2VybmVsOjpPdXRwdXQ6OkhUTUw6OkdlbmVyYWxDYXRhbG9nUHJlZmVyZW5jZXM6OkdlbmVyaWM8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkxhYmVsIiBUcmFuc2xhdGFibGU9IjEiPkNvbW1lbnQgMjwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iRGVzYyIgVHJhbnNsYXRhYmxlPSIxIj5EZWZpbmUgdGhlIGdlbmVyYWwgY2F0YWxvZyBjb21tZW50IDIuPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJCbG9jayI+VGV4dEFyZWE8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkNvbHMiPjUwPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJSb3dzIj41PC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJQcmVmS2V5Ij5Db21tZW50MjwvSXRlbT4KICAgICAgICAgICAgPC9IYXNoPgogICAgICAgIDwvVmFsdWU+CiAgICA8L1NldHRpbmc+CiAgICA8U2V0dGluZyBOYW1lPSJHZW5lcmFsQ2F0YWxvZ1ByZWZlcmVuY2VzIyMjUGVybWlzc2lvbnMiIFJlcXVpcmVkPSIwIiBWYWxpZD0iMCI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+UGFyYW1ldGVycyBmb3IgdGhlIGV4YW1wbGUgcGVybWlzc2lvbiBncm91cHMgb2YgdGhlIGdlbmVyYWwgY2F0YWxvZyBhdHRyaWJ1dGVzLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPE5hdmlnYXRpb24+Q29yZTo6R2VuZXJhbENhdGFsb2c8L05hdmlnYXRpb24+CiAgICAgICAgPFZhbHVlPgogICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTW9kdWxlIj5LZXJuZWw6Ok91dHB1dDo6SFRNTDo6R2VuZXJhbENhdGFsb2dQcmVmZXJlbmNlczo6R2VuZXJpYzwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTGFiZWwiIFRyYW5zbGF0YWJsZT0iMSI+UGVybWlzc2lvbiBHcm91cDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iQmxvY2siPlBlcm1pc3Npb248L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkNsYXNzIj5JVFNNOjpDb25maWdJdGVtOjpDbGFzczwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iUHJlZktleSI+UGVybWlzc2lvbjwvSXRlbT4KICAgICAgICAgICAgPC9IYXNoPgogICAgICAgIDwvVmFsdWU+CiAgICA8L1NldHRpbmc+Cjwvb3Ryc19jb25maWc+Cg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAyMS0yMDIyIFpudW55IEdtYkgsIGh0dHBzOi8vem51bnkub3JnLwojIC0tCiMgVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKIyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9ncGwtMy4wLnR4dC4KIyAtLQoKcGFja2FnZSBLZXJuZWw6Okxhbmd1YWdlOjphcl9TQV9HZW5lcmFsQ2F0YWxvZzsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKdXNlIHV0Zjg7CgpzdWIgRGF0YSB7CiAgICBteSAkU2VsZiA9IHNoaWZ0OwoKICAgICMgVFQgVGVtcGxhdGU6IEtlcm5lbC9PdXRwdXQvSFRNTC9UZW1wbGF0ZXMvU3RhbmRhcmQvQUFBR2VuZXJhbENhdGFsb2cudHQKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Z1bmN0aW9uYWxpdHknfSA9ICcnOwoKICAgICMgVFQgVGVtcGxhdGU6IEtlcm5lbC9PdXRwdXQvSFRNTC9UZW1wbGF0ZXMvU3RhbmRhcmQvQWRtaW5HZW5lcmFsQ2F0YWxvZy50dAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnR2VuZXJhbCBDYXRhbG9nIE1hbmFnZW1lbnQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSXRlbXMgaW4gQ2xhc3MnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRWRpdCBJdGVtJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBDbGFzcyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgSXRlbSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgQ2F0YWxvZyBJdGVtJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBDYXRhbG9nIENsYXNzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NhdGFsb2cgQ2xhc3MnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRWRpdCBDYXRhbG9nIEl0ZW0nfSA9ICcnOwoKICAgICMgSlMgRmlsZTogdmFyL2h0dHBkL2h0ZG9jcy9qcy9JVFNNLkdlbmVyYWxDYXRhbG9nLmpzCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXYXJuaW5nIGluY2lkZW50IHN0YXRlIGNhbiBub3QgYmUgc2V0IHRvIGludmFsaWQuJ30gPSAnJzsKCiAgICAjIFN5c0NvbmZpZwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29tbWVudCAyJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NyZWF0ZSBhbmQgbWFuYWdlIHRoZSBHZW5lcmFsIENhdGFsb2cuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZSB0aGUgZ2VuZXJhbCBjYXRhbG9nIGNvbW1lbnQgMi4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFkbWluR2VuZXJhbENhdGFsb2cgY29uZmlndXJhdGlvbiBpbiB0aGUgYWRtaW4gYXJlYS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydHZW5lcmFsIENhdGFsb2cnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFyYW1ldGVycyBmb3IgdGhlIGV4YW1wbGUgY29tbWVudCAyIG9mIHRoZSBnZW5lcmFsIGNhdGFsb2cgYXR0cmlidXRlcy4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJhbWV0ZXJzIGZvciB0aGUgZXhhbXBsZSBwZXJtaXNzaW9uIGdyb3VwcyBvZiB0aGUgZ2VuZXJhbCBjYXRhbG9nIGF0dHJpYnV0ZXMuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGVybWlzc2lvbiBHcm91cCd9ID0gJyc7CgoKICAgIHB1c2ggQHsgJFNlbGYtPntKYXZhU2NyaXB0U3RyaW5nc30gLy8gW10gfSwgKAogICAgJ0NhbmNlbCcsCiAgICAnV2FybmluZycsCiAgICAnV2FybmluZyBpbmNpZGVudCBzdGF0ZSBjYW4gbm90IGJlIHNldCB0byBpbnZhbGlkLicsCiAgICApOwoKfQoKMTsK
IyAtLQojIENvcHlyaWdodCAoQykgMjAyMS0yMDIyIFpudW55IEdtYkgsIGh0dHBzOi8vem51bnkub3JnLwojIC0tCiMgVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKIyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9ncGwtMy4wLnR4dC4KIyAtLQoKcGFja2FnZSBLZXJuZWw6Okxhbmd1YWdlOjpiZ19HZW5lcmFsQ2F0YWxvZzsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKdXNlIHV0Zjg7CgpzdWIgRGF0YSB7CiAgICBteSAkU2VsZiA9IHNoaWZ0OwoKICAgICMgVFQgVGVtcGxhdGU6IEtlcm5lbC9PdXRwdXQvSFRNTC9UZW1wbGF0ZXMvU3RhbmRhcmQvQUFBR2VuZXJhbENhdGFsb2cudHQKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Z1bmN0aW9uYWxpdHknfSA9ICfQpNGD0L3QutGG0LjQvtC90LDQu9C90L7RgdGCJzsKCiAgICAjIFRUIFRlbXBsYXRlOiBLZXJuZWwvT3V0cHV0L0hUTUwvVGVtcGxhdGVzL1N0YW5kYXJkL0FkbWluR2VuZXJhbENhdGFsb2cudHQKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0dlbmVyYWwgQ2F0YWxvZyBNYW5hZ2VtZW50J30gPSAn0KPQv9GA0LDQstC70LXQvdC40LUg0L3QsCDQvtGB0L3QvtCy0L3QuNGPINC60LDRgtCw0LvQvtCzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0l0ZW1zIGluIENsYXNzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VkaXQgSXRlbSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgQ2xhc3MnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIEl0ZW0nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIENhdGFsb2cgSXRlbSd9ID0gJ9CU0L7QsdCw0LLQuCDQtdC70LXQvNC10L3RgiDQutGK0Lwg0LrQsNGC0LDQu9C+0LPQsCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgQ2F0YWxvZyBDbGFzcyd9ID0gJ9CU0L7QsdCw0LLQuCDQutC70LDRgSDQsiDQutCw0YLQsNC70L7Qs9CwJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NhdGFsb2cgQ2xhc3MnfSA9ICfQmtC70LDRgdC+0LLQtSDQsiDQutCw0YLQsNC70L7Qs9CwJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VkaXQgQ2F0YWxvZyBJdGVtJ30gPSAnJzsKCiAgICAjIEpTIEZpbGU6IHZhci9odHRwZC9odGRvY3MvanMvSVRTTS5HZW5lcmFsQ2F0YWxvZy5qcwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV2FybmluZyBpbmNpZGVudCBzdGF0ZSBjYW4gbm90IGJlIHNldCB0byBpbnZhbGlkLid9ID0gJyc7CgogICAgIyBTeXNDb25maWcKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbW1lbnQgMid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDcmVhdGUgYW5kIG1hbmFnZSB0aGUgR2VuZXJhbCBDYXRhbG9nLid9ID0gJ9Ch0YrQt9C00LDQstCw0L3QtSDQuCDQv9C+0LTQtNGA0YrQttC60LAg0L3QsCDQntGB0L3QvtCy0L3QuNGPINC60LDRgtCw0LvQvtCzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZSB0aGUgZ2VuZXJhbCBjYXRhbG9nIGNvbW1lbnQgMi4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFkbWluR2VuZXJhbENhdGFsb2cgY29uZmlndXJhdGlvbiBpbiB0aGUgYWRtaW4gYXJlYS4nfSA9CiAgICAgICAgJ9Cg0LXQs9C40YHRgtGA0LDRhtC40Y8g0L3QsCDQv9GA0LXQtNC90LjRjyDQvNC+0LTRg9C7INC30LAg0LrQvtC90YTQuNCz0YPRgNCw0YbQuNGP0YLQsCDQvdCwINCQ0LTQvNC40L3QuNGB0YLRgNCw0YLQvtGA0YHQutC40Y8g0J7RgdC90L7QstC10L0g0LrQsNGC0LDQu9C+0LMg0LIg0JDQtNC80LjQvdC40YHRgtGA0LDRgtC40LLQvdCw0YLQsCDRh9Cw0YHRgi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnR2VuZXJhbCBDYXRhbG9nJ30gPSAn0J7RgdC90L7QstC10L0g0LrQsNGC0LDQu9C+0LMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFyYW1ldGVycyBmb3IgdGhlIGV4YW1wbGUgY29tbWVudCAyIG9mIHRoZSBnZW5lcmFsIGNhdGFsb2cgYXR0cmlidXRlcy4nfSA9CiAgICAgICAgJ9Cf0LDRgNCw0LzQtdGC0YDQuCDQvdCwINC/0YDQuNC80LXRgNC90LjRjyDQutC+0LzQtdC90YLQsNGAIDIg0L3QsCDQsNGC0YDQuNCx0YPRgtC40YLQtSDQvdCwINC+0LHRidC40Y8g0LrQsNGC0LDQu9C+0LMuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcmFtZXRlcnMgZm9yIHRoZSBleGFtcGxlIHBlcm1pc3Npb24gZ3JvdXBzIG9mIHRoZSBnZW5lcmFsIGNhdGFsb2cgYXR0cmlidXRlcy4nfSA9CiAgICAgICAgJ9Cf0LDRgNCw0LzQtdGC0YDQuCDQt9CwINC/0YDQuNC80LXRgNC90LjRgtC1INGA0LDQt9GA0LXRiNC40YLQtdC70L3QuCDQs9GA0YPQv9C4INC+0YIg0LDRgtGA0LjQsdGD0YLQuNGC0LUg0L3QsCDQvtCx0YnQuNGPINC60LDRgtCw0LvQvtCzLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQZXJtaXNzaW9uIEdyb3VwJ30gPSAnJzsKCgogICAgcHVzaCBAeyAkU2VsZi0+e0phdmFTY3JpcHRTdHJpbmdzfSAvLyBbXSB9LCAoCiAgICAnQ2FuY2VsJywKICAgICdXYXJuaW5nJywKICAgICdXYXJuaW5nIGluY2lkZW50IHN0YXRlIGNhbiBub3QgYmUgc2V0IHRvIGludmFsaWQuJywKICAgICk7Cgp9CgoxOwo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAyMS0yMDIyIFpudW55IEdtYkgsIGh0dHBzOi8vem51bnkub3JnLwojIC0tCiMgVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKIyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9ncGwtMy4wLnR4dC4KIyAtLQoKcGFja2FnZSBLZXJuZWw6Okxhbmd1YWdlOjpjYV9HZW5lcmFsQ2F0YWxvZzsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKdXNlIHV0Zjg7CgpzdWIgRGF0YSB7CiAgICBteSAkU2VsZiA9IHNoaWZ0OwoKICAgICMgVFQgVGVtcGxhdGU6IEtlcm5lbC9PdXRwdXQvSFRNTC9UZW1wbGF0ZXMvU3RhbmRhcmQvQUFBR2VuZXJhbENhdGFsb2cudHQKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Z1bmN0aW9uYWxpdHknfSA9ICcnOwoKICAgICMgVFQgVGVtcGxhdGU6IEtlcm5lbC9PdXRwdXQvSFRNTC9UZW1wbGF0ZXMvU3RhbmRhcmQvQWRtaW5HZW5lcmFsQ2F0YWxvZy50dAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnR2VuZXJhbCBDYXRhbG9nIE1hbmFnZW1lbnQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSXRlbXMgaW4gQ2xhc3MnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRWRpdCBJdGVtJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBDbGFzcyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgSXRlbSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgQ2F0YWxvZyBJdGVtJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBDYXRhbG9nIENsYXNzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NhdGFsb2cgQ2xhc3MnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRWRpdCBDYXRhbG9nIEl0ZW0nfSA9ICcnOwoKICAgICMgSlMgRmlsZTogdmFyL2h0dHBkL2h0ZG9jcy9qcy9JVFNNLkdlbmVyYWxDYXRhbG9nLmpzCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXYXJuaW5nIGluY2lkZW50IHN0YXRlIGNhbiBub3QgYmUgc2V0IHRvIGludmFsaWQuJ30gPSAnJzsKCiAgICAjIFN5c0NvbmZpZwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29tbWVudCAyJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NyZWF0ZSBhbmQgbWFuYWdlIHRoZSBHZW5lcmFsIENhdGFsb2cuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZSB0aGUgZ2VuZXJhbCBjYXRhbG9nIGNvbW1lbnQgMi4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFkbWluR2VuZXJhbENhdGFsb2cgY29uZmlndXJhdGlvbiBpbiB0aGUgYWRtaW4gYXJlYS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydHZW5lcmFsIENhdGFsb2cnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFyYW1ldGVycyBmb3IgdGhlIGV4YW1wbGUgY29tbWVudCAyIG9mIHRoZSBnZW5lcmFsIGNhdGFsb2cgYXR0cmlidXRlcy4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJhbWV0ZXJzIGZvciB0aGUgZXhhbXBsZSBwZXJtaXNzaW9uIGdyb3VwcyBvZiB0aGUgZ2VuZXJhbCBjYXRhbG9nIGF0dHJpYnV0ZXMuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGVybWlzc2lvbiBHcm91cCd9ID0gJyc7CgoKICAgIHB1c2ggQHsgJFNlbGYtPntKYXZhU2NyaXB0U3RyaW5nc30gLy8gW10gfSwgKAogICAgJ0NhbmNlbCcsCiAgICAnV2FybmluZycsCiAgICAnV2FybmluZyBpbmNpZGVudCBzdGF0ZSBjYW4gbm90IGJlIHNldCB0byBpbnZhbGlkLicsCiAgICApOwoKfQoKMTsK
IyAtLQojIENvcHlyaWdodCAoQykgMjAyMS0yMDIyIFpudW55IEdtYkgsIGh0dHBzOi8vem51bnkub3JnLwojIC0tCiMgVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKIyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9ncGwtMy4wLnR4dC4KIyAtLQoKcGFja2FnZSBLZXJuZWw6Okxhbmd1YWdlOjpjc19HZW5lcmFsQ2F0YWxvZzsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKdXNlIHV0Zjg7CgpzdWIgRGF0YSB7CiAgICBteSAkU2VsZiA9IHNoaWZ0OwoKICAgICMgVFQgVGVtcGxhdGU6IEtlcm5lbC9PdXRwdXQvSFRNTC9UZW1wbGF0ZXMvU3RhbmRhcmQvQUFBR2VuZXJhbENhdGFsb2cudHQKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Z1bmN0aW9uYWxpdHknfSA9ICdGdW5rY2lvbmFsaXRhJzsKCiAgICAjIFRUIFRlbXBsYXRlOiBLZXJuZWwvT3V0cHV0L0hUTUwvVGVtcGxhdGVzL1N0YW5kYXJkL0FkbWluR2VuZXJhbENhdGFsb2cudHQKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0dlbmVyYWwgQ2F0YWxvZyBNYW5hZ2VtZW50J30gPSAnU3Byw6F2YSBIbGF2bsOtaG8gS2F0YWxvZ3UnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSXRlbXMgaW4gQ2xhc3MnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRWRpdCBJdGVtJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBDbGFzcyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgSXRlbSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgQ2F0YWxvZyBJdGVtJ30gPSAnUMWZaWRhdCBwb2xvxb5rdSBLYXRhbG9ndSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgQ2F0YWxvZyBDbGFzcyd9ID0gJ1DFmWlkYXQgdMWZw61kdSBLYXRhbG9ndSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDYXRhbG9nIENsYXNzJ30gPSAnVMWZw61keSBLYXRhbG9ndSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFZGl0IENhdGFsb2cgSXRlbSd9ID0gJyc7CgogICAgIyBKUyBGaWxlOiB2YXIvaHR0cGQvaHRkb2NzL2pzL0lUU00uR2VuZXJhbENhdGFsb2cuanMKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dhcm5pbmcgaW5jaWRlbnQgc3RhdGUgY2FuIG5vdCBiZSBzZXQgdG8gaW52YWxpZC4nfSA9ICcnOwoKICAgICMgU3lzQ29uZmlnCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb21tZW50IDInfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3JlYXRlIGFuZCBtYW5hZ2UgdGhlIEdlbmVyYWwgQ2F0YWxvZy4nfSA9ICdWeXR2b8WZaXQgYSBzcHJhdm92YXQgaGxhdm7DrSBrYXRhbG9nJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZSB0aGUgZ2VuZXJhbCBjYXRhbG9nIGNvbW1lbnQgMi4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFkbWluR2VuZXJhbENhdGFsb2cgY29uZmlndXJhdGlvbiBpbiB0aGUgYWRtaW4gYXJlYS4nfSA9CiAgICAgICAgJ0Zyb250ZW5kb3bDoSByZWdpc3RyYWNlIG1vZHVsdSBwcm8ga29uZmlndXJhY2kgaGxhdm7DrWhvIGthdGFsb2d1IHYgYWRtaW5pc3RyYXRpdm7DrSBvYmxhc3RpLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydHZW5lcmFsIENhdGFsb2cnfSA9ICdIbGF2bsOtIEthdGFsb2cnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFyYW1ldGVycyBmb3IgdGhlIGV4YW1wbGUgY29tbWVudCAyIG9mIHRoZSBnZW5lcmFsIGNhdGFsb2cgYXR0cmlidXRlcy4nfSA9CiAgICAgICAgJ1DFmcOta2xhZCBwYXJhbWV0csWvIHBybyBrb21lbnTDocWZIDIgb2JlY27DvWNoIGF0cmlidXTFryBrYXRhbG9ndSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJhbWV0ZXJzIGZvciB0aGUgZXhhbXBsZSBwZXJtaXNzaW9uIGdyb3VwcyBvZiB0aGUgZ2VuZXJhbCBjYXRhbG9nIGF0dHJpYnV0ZXMuJ30gPQogICAgICAgICdQYXJhbWV0cnkgc2t1cGlueSBwcm8gcMWZw61rbGFkIG9wcsOhdm7Em27DrSBvYmVjbsO9Y2ggYXRyaWJ1dMWvIGthdGFsb2d1JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Blcm1pc3Npb24gR3JvdXAnfSA9ICcnOwoKCiAgICBwdXNoIEB7ICRTZWxmLT57SmF2YVNjcmlwdFN0cmluZ3N9IC8vIFtdIH0sICgKICAgICdDYW5jZWwnLAogICAgJ1dhcm5pbmcnLAogICAgJ1dhcm5pbmcgaW5jaWRlbnQgc3RhdGUgY2FuIG5vdCBiZSBzZXQgdG8gaW52YWxpZC4nLAogICAgKTsKCn0KCjE7Cg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAyMS0yMDIyIFpudW55IEdtYkgsIGh0dHBzOi8vem51bnkub3JnLwojIC0tCiMgVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKIyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9ncGwtMy4wLnR4dC4KIyAtLQoKcGFja2FnZSBLZXJuZWw6Okxhbmd1YWdlOjpkYV9HZW5lcmFsQ2F0YWxvZzsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKdXNlIHV0Zjg7CgpzdWIgRGF0YSB7CiAgICBteSAkU2VsZiA9IHNoaWZ0OwoKICAgICMgVFQgVGVtcGxhdGU6IEtlcm5lbC9PdXRwdXQvSFRNTC9UZW1wbGF0ZXMvU3RhbmRhcmQvQUFBR2VuZXJhbENhdGFsb2cudHQKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Z1bmN0aW9uYWxpdHknfSA9ICdGdW5rdGlvbmFsaXRldCc7CgogICAgIyBUVCBUZW1wbGF0ZTogS2VybmVsL091dHB1dC9IVE1ML1RlbXBsYXRlcy9TdGFuZGFyZC9BZG1pbkdlbmVyYWxDYXRhbG9nLnR0CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydHZW5lcmFsIENhdGFsb2cgTWFuYWdlbWVudCd9ID0gJ0dlbmVyYWwgS2F0YWxvZyBNYW5hZ2VtZW50JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0l0ZW1zIGluIENsYXNzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VkaXQgSXRlbSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgQ2xhc3MnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIEl0ZW0nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIENhdGFsb2cgSXRlbSd9ID0gJ1RpbGbDuGoga2F0YWxvZyBwb3N0JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBDYXRhbG9nIENsYXNzJ30gPSAnVGlsZsO4aiBLYXRhbG9nIGtsYXNzZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDYXRhbG9nIENsYXNzJ30gPSAnS2F0YWxvZyBLbGFzc2UnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRWRpdCBDYXRhbG9nIEl0ZW0nfSA9ICdSZWRpZ2VyIGVuaGVkIGkga2F0YWxvZ2V0JzsKCiAgICAjIEpTIEZpbGU6IHZhci9odHRwZC9odGRvY3MvanMvSVRTTS5HZW5lcmFsQ2F0YWxvZy5qcwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV2FybmluZyBpbmNpZGVudCBzdGF0ZSBjYW4gbm90IGJlIHNldCB0byBpbnZhbGlkLid9ID0gJyc7CgogICAgIyBTeXNDb25maWcKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbW1lbnQgMid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDcmVhdGUgYW5kIG1hbmFnZSB0aGUgR2VuZXJhbCBDYXRhbG9nLid9ID0gJ09wcmV0IG9nIGjDpW5kdGVyIHN0YW5kYXJkIGthdGFsb2dldCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmUgdGhlIGdlbmVyYWwgY2F0YWxvZyBjb21tZW50IDIuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZG1pbkdlbmVyYWxDYXRhbG9nIGNvbmZpZ3VyYXRpb24gaW4gdGhlIGFkbWluIGFyZWEuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnR2VuZXJhbCBDYXRhbG9nJ30gPSAnR2VuZXJhbCBLYXRhbG9nJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcmFtZXRlcnMgZm9yIHRoZSBleGFtcGxlIGNvbW1lbnQgMiBvZiB0aGUgZ2VuZXJhbCBjYXRhbG9nIGF0dHJpYnV0ZXMuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFyYW1ldGVycyBmb3IgdGhlIGV4YW1wbGUgcGVybWlzc2lvbiBncm91cHMgb2YgdGhlIGdlbmVyYWwgY2F0YWxvZyBhdHRyaWJ1dGVzLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Blcm1pc3Npb24gR3JvdXAnfSA9ICcnOwoKCiAgICBwdXNoIEB7ICRTZWxmLT57SmF2YVNjcmlwdFN0cmluZ3N9IC8vIFtdIH0sICgKICAgICdDYW5jZWwnLAogICAgJ1dhcm5pbmcnLAogICAgJ1dhcm5pbmcgaW5jaWRlbnQgc3RhdGUgY2FuIG5vdCBiZSBzZXQgdG8gaW52YWxpZC4nLAogICAgKTsKCn0KCjE7Cg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAyMS0yMDIyIFpudW55IEdtYkgsIGh0dHBzOi8vem51bnkub3JnLwojIC0tCiMgVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKIyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9ncGwtMy4wLnR4dC4KIyAtLQoKcGFja2FnZSBLZXJuZWw6Okxhbmd1YWdlOjpkZV9HZW5lcmFsQ2F0YWxvZzsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKdXNlIHV0Zjg7CgpzdWIgRGF0YSB7CiAgICBteSAkU2VsZiA9IHNoaWZ0OwoKICAgICMgVFQgVGVtcGxhdGU6IEtlcm5lbC9PdXRwdXQvSFRNTC9UZW1wbGF0ZXMvU3RhbmRhcmQvQUFBR2VuZXJhbENhdGFsb2cudHQKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Z1bmN0aW9uYWxpdHknfSA9ICdGdW5rdGlvbmFsaXTDpHQnOwoKICAgICMgVFQgVGVtcGxhdGU6IEtlcm5lbC9PdXRwdXQvSFRNTC9UZW1wbGF0ZXMvU3RhbmRhcmQvQWRtaW5HZW5lcmFsQ2F0YWxvZy50dAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnR2VuZXJhbCBDYXRhbG9nIE1hbmFnZW1lbnQnfSA9ICdHZW5lcmFsIEthdGFsb2ctVmVyd2FsdHVuZyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJdGVtcyBpbiBDbGFzcyd9ID0gJ0VsZW1lbnRlIGluIEtsYXNzZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFZGl0IEl0ZW0nfSA9ICfDhG5kZXJlIGRhcyBJdGVtJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBDbGFzcyd9ID0gJ0tsYXNzZSBoaW56dWbDvGdlbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgSXRlbSd9ID0gJ0bDvGdlIEl0ZW0gaGluenUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIENhdGFsb2cgSXRlbSd9ID0gJ0thdGFsb2dlbGVtZW50IGhpbnp1ZsO8Z2VuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBDYXRhbG9nIENsYXNzJ30gPSAnS2F0YWxvZ2tsYXNzZSBoaW56dWbDvGdlbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDYXRhbG9nIENsYXNzJ30gPSAnS2F0YWxvZ2tsYXNzZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFZGl0IENhdGFsb2cgSXRlbSd9ID0gJ0thdGFsb2dlbGVtZW50IGJlYXJiZWl0ZW4nOwoKICAgICMgSlMgRmlsZTogdmFyL2h0dHBkL2h0ZG9jcy9qcy9JVFNNLkdlbmVyYWxDYXRhbG9nLmpzCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXYXJuaW5nIGluY2lkZW50IHN0YXRlIGNhbiBub3QgYmUgc2V0IHRvIGludmFsaWQuJ30gPSAnRGVyIFN0YXR1cyBXYXJudW5nIGbDvHIgVm9yZsOkbGxlIGthbm4gbmljaHQgYXVmIHVuZ8O8bHRpZyBnZXNldHp0IHdlcmRlbi4nOwoKICAgICMgU3lzQ29uZmlnCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb21tZW50IDInfSA9ICdLb21tZW50YXIgMic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDcmVhdGUgYW5kIG1hbmFnZSB0aGUgR2VuZXJhbCBDYXRhbG9nLid9ID0gJ0dlbmVyYWwgS2F0YWxvZyBlcnN0ZWxsZW4gdW5kIHZlcndhbHRlbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lIHRoZSBnZW5lcmFsIGNhdGFsb2cgY29tbWVudCAyLid9ID0gJ0RlZmluaWVydCBkZW4gS29tbWVudGFyIDIgZsO8ciBHZW5lcmFsIEthdGFsb2cuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZG1pbkdlbmVyYWxDYXRhbG9nIGNvbmZpZ3VyYXRpb24gaW4gdGhlIGFkbWluIGFyZWEuJ30gPQogICAgICAgICdSZWdpc3RyaWVydW5nIGRlcyBGcm9udGVuZC1Nb2R1bHMgZsO8ciBkaWUgS29uZmlndXJhdGlvbiB2b24gQWRtaW5HZW5lcmFsQ2F0YWxvZyBpbSBBZG1pbi1CZXJlaWNoLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydHZW5lcmFsIENhdGFsb2cnfSA9ICdHZW5lcmFsIEthdGFsb2cnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFyYW1ldGVycyBmb3IgdGhlIGV4YW1wbGUgY29tbWVudCAyIG9mIHRoZSBnZW5lcmFsIGNhdGFsb2cgYXR0cmlidXRlcy4nfSA9CiAgICAgICAgJ1BhcmFtZXRlciBmw7xyIGRlbiBCZWlzcGllbC1Lb21tZW50YXIgMiBkZXIgR2VuZXJhbCBLYXRhbG9nLUF0dHJpYnV0ZS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFyYW1ldGVycyBmb3IgdGhlIGV4YW1wbGUgcGVybWlzc2lvbiBncm91cHMgb2YgdGhlIGdlbmVyYWwgY2F0YWxvZyBhdHRyaWJ1dGVzLid9ID0KICAgICAgICAnUGFyYW1ldGVyIGbDvHIgZGllIHp1Z3JpZmZzYmVyZWNodGlndGUgR3J1cHBlIGRlciBHZW5lcmFsIEthdGFsb2ctQXR0cmlidXRlLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQZXJtaXNzaW9uIEdyb3VwJ30gPSAnQmVyZWNodGlndW5nc2dydXBwZSc7CgoKICAgIHB1c2ggQHsgJFNlbGYtPntKYXZhU2NyaXB0U3RyaW5nc30gLy8gW10gfSwgKAogICAgJ0NhbmNlbCcsCiAgICAnV2FybmluZycsCiAgICAnV2FybmluZyBpbmNpZGVudCBzdGF0ZSBjYW4gbm90IGJlIHNldCB0byBpbnZhbGlkLicsCiAgICApOwoKfQoKMTsK
IyAtLQojIENvcHlyaWdodCAoQykgMjAyMS0yMDIyIFpudW55IEdtYkgsIGh0dHBzOi8vem51bnkub3JnLwojIC0tCiMgVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKIyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9ncGwtMy4wLnR4dC4KIyAtLQoKcGFja2FnZSBLZXJuZWw6Okxhbmd1YWdlOjplbF9HZW5lcmFsQ2F0YWxvZzsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKdXNlIHV0Zjg7CgpzdWIgRGF0YSB7CiAgICBteSAkU2VsZiA9IHNoaWZ0OwoKICAgICMgVFQgVGVtcGxhdGU6IEtlcm5lbC9PdXRwdXQvSFRNTC9UZW1wbGF0ZXMvU3RhbmRhcmQvQUFBR2VuZXJhbENhdGFsb2cudHQKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Z1bmN0aW9uYWxpdHknfSA9ICcnOwoKICAgICMgVFQgVGVtcGxhdGU6IEtlcm5lbC9PdXRwdXQvSFRNTC9UZW1wbGF0ZXMvU3RhbmRhcmQvQWRtaW5HZW5lcmFsQ2F0YWxvZy50dAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnR2VuZXJhbCBDYXRhbG9nIE1hbmFnZW1lbnQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSXRlbXMgaW4gQ2xhc3MnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRWRpdCBJdGVtJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBDbGFzcyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgSXRlbSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgQ2F0YWxvZyBJdGVtJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBDYXRhbG9nIENsYXNzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NhdGFsb2cgQ2xhc3MnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRWRpdCBDYXRhbG9nIEl0ZW0nfSA9ICcnOwoKICAgICMgSlMgRmlsZTogdmFyL2h0dHBkL2h0ZG9jcy9qcy9JVFNNLkdlbmVyYWxDYXRhbG9nLmpzCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXYXJuaW5nIGluY2lkZW50IHN0YXRlIGNhbiBub3QgYmUgc2V0IHRvIGludmFsaWQuJ30gPSAnJzsKCiAgICAjIFN5c0NvbmZpZwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29tbWVudCAyJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NyZWF0ZSBhbmQgbWFuYWdlIHRoZSBHZW5lcmFsIENhdGFsb2cuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZSB0aGUgZ2VuZXJhbCBjYXRhbG9nIGNvbW1lbnQgMi4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFkbWluR2VuZXJhbENhdGFsb2cgY29uZmlndXJhdGlvbiBpbiB0aGUgYWRtaW4gYXJlYS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydHZW5lcmFsIENhdGFsb2cnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFyYW1ldGVycyBmb3IgdGhlIGV4YW1wbGUgY29tbWVudCAyIG9mIHRoZSBnZW5lcmFsIGNhdGFsb2cgYXR0cmlidXRlcy4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJhbWV0ZXJzIGZvciB0aGUgZXhhbXBsZSBwZXJtaXNzaW9uIGdyb3VwcyBvZiB0aGUgZ2VuZXJhbCBjYXRhbG9nIGF0dHJpYnV0ZXMuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGVybWlzc2lvbiBHcm91cCd9ID0gJyc7CgoKICAgIHB1c2ggQHsgJFNlbGYtPntKYXZhU2NyaXB0U3RyaW5nc30gLy8gW10gfSwgKAogICAgJ0NhbmNlbCcsCiAgICAnV2FybmluZycsCiAgICAnV2FybmluZyBpbmNpZGVudCBzdGF0ZSBjYW4gbm90IGJlIHNldCB0byBpbnZhbGlkLicsCiAgICApOwoKfQoKMTsK
IyAtLQojIENvcHlyaWdodCAoQykgMjAyMS0yMDIyIFpudW55IEdtYkgsIGh0dHBzOi8vem51bnkub3JnLwojIC0tCiMgVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKIyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9ncGwtMy4wLnR4dC4KIyAtLQoKcGFja2FnZSBLZXJuZWw6Okxhbmd1YWdlOjplbl9DQV9HZW5lcmFsQ2F0YWxvZzsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKdXNlIHV0Zjg7CgpzdWIgRGF0YSB7CiAgICBteSAkU2VsZiA9IHNoaWZ0OwoKICAgICMgVFQgVGVtcGxhdGU6IEtlcm5lbC9PdXRwdXQvSFRNTC9UZW1wbGF0ZXMvU3RhbmRhcmQvQUFBR2VuZXJhbENhdGFsb2cudHQKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Z1bmN0aW9uYWxpdHknfSA9ICcnOwoKICAgICMgVFQgVGVtcGxhdGU6IEtlcm5lbC9PdXRwdXQvSFRNTC9UZW1wbGF0ZXMvU3RhbmRhcmQvQWRtaW5HZW5lcmFsQ2F0YWxvZy50dAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnR2VuZXJhbCBDYXRhbG9nIE1hbmFnZW1lbnQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSXRlbXMgaW4gQ2xhc3MnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRWRpdCBJdGVtJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBDbGFzcyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgSXRlbSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgQ2F0YWxvZyBJdGVtJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBDYXRhbG9nIENsYXNzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NhdGFsb2cgQ2xhc3MnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRWRpdCBDYXRhbG9nIEl0ZW0nfSA9ICcnOwoKICAgICMgSlMgRmlsZTogdmFyL2h0dHBkL2h0ZG9jcy9qcy9JVFNNLkdlbmVyYWxDYXRhbG9nLmpzCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXYXJuaW5nIGluY2lkZW50IHN0YXRlIGNhbiBub3QgYmUgc2V0IHRvIGludmFsaWQuJ30gPSAnJzsKCiAgICAjIFN5c0NvbmZpZwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29tbWVudCAyJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NyZWF0ZSBhbmQgbWFuYWdlIHRoZSBHZW5lcmFsIENhdGFsb2cuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZSB0aGUgZ2VuZXJhbCBjYXRhbG9nIGNvbW1lbnQgMi4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFkbWluR2VuZXJhbENhdGFsb2cgY29uZmlndXJhdGlvbiBpbiB0aGUgYWRtaW4gYXJlYS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydHZW5lcmFsIENhdGFsb2cnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFyYW1ldGVycyBmb3IgdGhlIGV4YW1wbGUgY29tbWVudCAyIG9mIHRoZSBnZW5lcmFsIGNhdGFsb2cgYXR0cmlidXRlcy4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJhbWV0ZXJzIGZvciB0aGUgZXhhbXBsZSBwZXJtaXNzaW9uIGdyb3VwcyBvZiB0aGUgZ2VuZXJhbCBjYXRhbG9nIGF0dHJpYnV0ZXMuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGVybWlzc2lvbiBHcm91cCd9ID0gJyc7CgoKICAgIHB1c2ggQHsgJFNlbGYtPntKYXZhU2NyaXB0U3RyaW5nc30gLy8gW10gfSwgKAogICAgJ0NhbmNlbCcsCiAgICAnV2FybmluZycsCiAgICAnV2FybmluZyBpbmNpZGVudCBzdGF0ZSBjYW4gbm90IGJlIHNldCB0byBpbnZhbGlkLicsCiAgICApOwoKfQoKMTsK
IyAtLQojIENvcHlyaWdodCAoQykgMjAyMS0yMDIyIFpudW55IEdtYkgsIGh0dHBzOi8vem51bnkub3JnLwojIC0tCiMgVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKIyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9ncGwtMy4wLnR4dC4KIyAtLQoKcGFja2FnZSBLZXJuZWw6Okxhbmd1YWdlOjplbl9HQl9HZW5lcmFsQ2F0YWxvZzsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKdXNlIHV0Zjg7CgpzdWIgRGF0YSB7CiAgICBteSAkU2VsZiA9IHNoaWZ0OwoKICAgICMgVFQgVGVtcGxhdGU6IEtlcm5lbC9PdXRwdXQvSFRNTC9UZW1wbGF0ZXMvU3RhbmRhcmQvQUFBR2VuZXJhbENhdGFsb2cudHQKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Z1bmN0aW9uYWxpdHknfSA9ICdGdW5jdGlvbmFsaXR5JzsKCiAgICAjIFRUIFRlbXBsYXRlOiBLZXJuZWwvT3V0cHV0L0hUTUwvVGVtcGxhdGVzL1N0YW5kYXJkL0FkbWluR2VuZXJhbENhdGFsb2cudHQKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0dlbmVyYWwgQ2F0YWxvZyBNYW5hZ2VtZW50J30gPSAnR2VuZXJhbCBDYXRhbG9ndWUgTWFuYWdlbWVudCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJdGVtcyBpbiBDbGFzcyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFZGl0IEl0ZW0nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIENsYXNzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBJdGVtJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBDYXRhbG9nIEl0ZW0nfSA9ICdBZGQgQ2F0YWxvZ3VlIEl0ZW0nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIENhdGFsb2cgQ2xhc3MnfSA9ICdBZGQgQ2F0YWxvZ3VlIENsYXNzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NhdGFsb2cgQ2xhc3MnfSA9ICdDYXRhbG9nIENsYXNzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VkaXQgQ2F0YWxvZyBJdGVtJ30gPSAnRWRpdCBDYXRhbG9ndWUgSXRlbSc7CgogICAgIyBKUyBGaWxlOiB2YXIvaHR0cGQvaHRkb2NzL2pzL0lUU00uR2VuZXJhbENhdGFsb2cuanMKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dhcm5pbmcgaW5jaWRlbnQgc3RhdGUgY2FuIG5vdCBiZSBzZXQgdG8gaW52YWxpZC4nfSA9ICcnOwoKICAgICMgU3lzQ29uZmlnCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb21tZW50IDInfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3JlYXRlIGFuZCBtYW5hZ2UgdGhlIEdlbmVyYWwgQ2F0YWxvZy4nfSA9ICdDcmVhdGUgYW5kIG1hbmFnZSB0aGUgR2VuZXJhbCBDYXRhbG9ndWUuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZSB0aGUgZ2VuZXJhbCBjYXRhbG9nIGNvbW1lbnQgMi4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFkbWluR2VuZXJhbENhdGFsb2cgY29uZmlndXJhdGlvbiBpbiB0aGUgYWRtaW4gYXJlYS4nfSA9CiAgICAgICAgJ0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZG1pbkdlbmVyYWxDYXRhbG9ndWUgY29uZmlndXJhdGlvbiBpbiB0aGUgYWRtaW4gYXJlYS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnR2VuZXJhbCBDYXRhbG9nJ30gPSAnR2VuZXJhbCBDYXRhbG9ndWUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFyYW1ldGVycyBmb3IgdGhlIGV4YW1wbGUgY29tbWVudCAyIG9mIHRoZSBnZW5lcmFsIGNhdGFsb2cgYXR0cmlidXRlcy4nfSA9CiAgICAgICAgJ1BhcmFtZXRlcnMgZm9yIHRoZSBleGFtcGxlIGNvbW1lbnQgMiBvZiB0aGUgZ2VuZXJhbCBjYXRhbG9ndWUgYXR0cmlidXRlcy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFyYW1ldGVycyBmb3IgdGhlIGV4YW1wbGUgcGVybWlzc2lvbiBncm91cHMgb2YgdGhlIGdlbmVyYWwgY2F0YWxvZyBhdHRyaWJ1dGVzLid9ID0KICAgICAgICAnUGFyYW1ldGVycyBmb3IgdGhlIGV4YW1wbGUgcGVybWlzc2lvbiBncm91cHMgb2YgdGhlIGdlbmVyYWwgY2F0YWxvZ3VlIGF0dHJpYnV0ZXMuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Blcm1pc3Npb24gR3JvdXAnfSA9ICcnOwoKCiAgICBwdXNoIEB7ICRTZWxmLT57SmF2YVNjcmlwdFN0cmluZ3N9IC8vIFtdIH0sICgKICAgICdDYW5jZWwnLAogICAgJ1dhcm5pbmcnLAogICAgJ1dhcm5pbmcgaW5jaWRlbnQgc3RhdGUgY2FuIG5vdCBiZSBzZXQgdG8gaW52YWxpZC4nLAogICAgKTsKCn0KCjE7Cg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAyMS0yMDIyIFpudW55IEdtYkgsIGh0dHBzOi8vem51bnkub3JnLwojIC0tCiMgVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKIyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9ncGwtMy4wLnR4dC4KIyAtLQoKcGFja2FnZSBLZXJuZWw6Okxhbmd1YWdlOjplc19DT19HZW5lcmFsQ2F0YWxvZzsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKdXNlIHV0Zjg7CgpzdWIgRGF0YSB7CiAgICBteSAkU2VsZiA9IHNoaWZ0OwoKICAgICMgVFQgVGVtcGxhdGU6IEtlcm5lbC9PdXRwdXQvSFRNTC9UZW1wbGF0ZXMvU3RhbmRhcmQvQUFBR2VuZXJhbENhdGFsb2cudHQKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Z1bmN0aW9uYWxpdHknfSA9ICcnOwoKICAgICMgVFQgVGVtcGxhdGU6IEtlcm5lbC9PdXRwdXQvSFRNTC9UZW1wbGF0ZXMvU3RhbmRhcmQvQWRtaW5HZW5lcmFsQ2F0YWxvZy50dAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnR2VuZXJhbCBDYXRhbG9nIE1hbmFnZW1lbnQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSXRlbXMgaW4gQ2xhc3MnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRWRpdCBJdGVtJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBDbGFzcyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgSXRlbSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgQ2F0YWxvZyBJdGVtJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBDYXRhbG9nIENsYXNzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NhdGFsb2cgQ2xhc3MnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRWRpdCBDYXRhbG9nIEl0ZW0nfSA9ICcnOwoKICAgICMgSlMgRmlsZTogdmFyL2h0dHBkL2h0ZG9jcy9qcy9JVFNNLkdlbmVyYWxDYXRhbG9nLmpzCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXYXJuaW5nIGluY2lkZW50IHN0YXRlIGNhbiBub3QgYmUgc2V0IHRvIGludmFsaWQuJ30gPSAnJzsKCiAgICAjIFN5c0NvbmZpZwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29tbWVudCAyJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NyZWF0ZSBhbmQgbWFuYWdlIHRoZSBHZW5lcmFsIENhdGFsb2cuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZSB0aGUgZ2VuZXJhbCBjYXRhbG9nIGNvbW1lbnQgMi4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFkbWluR2VuZXJhbENhdGFsb2cgY29uZmlndXJhdGlvbiBpbiB0aGUgYWRtaW4gYXJlYS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydHZW5lcmFsIENhdGFsb2cnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFyYW1ldGVycyBmb3IgdGhlIGV4YW1wbGUgY29tbWVudCAyIG9mIHRoZSBnZW5lcmFsIGNhdGFsb2cgYXR0cmlidXRlcy4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJhbWV0ZXJzIGZvciB0aGUgZXhhbXBsZSBwZXJtaXNzaW9uIGdyb3VwcyBvZiB0aGUgZ2VuZXJhbCBjYXRhbG9nIGF0dHJpYnV0ZXMuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGVybWlzc2lvbiBHcm91cCd9ID0gJyc7CgoKICAgIHB1c2ggQHsgJFNlbGYtPntKYXZhU2NyaXB0U3RyaW5nc30gLy8gW10gfSwgKAogICAgJ0NhbmNlbCcsCiAgICAnV2FybmluZycsCiAgICAnV2FybmluZyBpbmNpZGVudCBzdGF0ZSBjYW4gbm90IGJlIHNldCB0byBpbnZhbGlkLicsCiAgICApOwoKfQoKMTsK
IyAtLQojIENvcHlyaWdodCAoQykgMjAyMS0yMDIyIFpudW55IEdtYkgsIGh0dHBzOi8vem51bnkub3JnLwojIC0tCiMgVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKIyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9ncGwtMy4wLnR4dC4KIyAtLQoKcGFja2FnZSBLZXJuZWw6Okxhbmd1YWdlOjplc19HZW5lcmFsQ2F0YWxvZzsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKdXNlIHV0Zjg7CgpzdWIgRGF0YSB7CiAgICBteSAkU2VsZiA9IHNoaWZ0OwoKICAgICMgVFQgVGVtcGxhdGU6IEtlcm5lbC9PdXRwdXQvSFRNTC9UZW1wbGF0ZXMvU3RhbmRhcmQvQUFBR2VuZXJhbENhdGFsb2cudHQKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Z1bmN0aW9uYWxpdHknfSA9ICdGdW5jaW9uYWxpZGFkJzsKCiAgICAjIFRUIFRlbXBsYXRlOiBLZXJuZWwvT3V0cHV0L0hUTUwvVGVtcGxhdGVzL1N0YW5kYXJkL0FkbWluR2VuZXJhbENhdGFsb2cudHQKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0dlbmVyYWwgQ2F0YWxvZyBNYW5hZ2VtZW50J30gPSAnR2VzdGnDs24gZGVsIENhdMOhbG9nbyBHZW5lcmFsJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0l0ZW1zIGluIENsYXNzJ30gPSAnSXRlbXMgZW4gQ2xhc2UnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRWRpdCBJdGVtJ30gPSAnRWRpdGFyIGVsZW1lbnRvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBDbGFzcyd9ID0gJ0HDsWFkaXIgQ2xhc2UnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIEl0ZW0nfSA9ICdBw7FhZGlyIGVsZW1lbnRvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBDYXRhbG9nIEl0ZW0nfSA9ICdBw7FhZGlyIEVsZW1lbnRvIGFsIENhdMOhbG9nbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgQ2F0YWxvZyBDbGFzcyd9ID0gJ0HDsWFkaXIgQ2xhc2UgYWwgQ2F0w6Fsb2dvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NhdGFsb2cgQ2xhc3MnfSA9ICdDbGFzZSBkZSBDYXTDoWxvZ28nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRWRpdCBDYXRhbG9nIEl0ZW0nfSA9ICdFZGl0YXIgRWxlbWVudG8gZGVsIENhdMOhbG9nbyc7CgogICAgIyBKUyBGaWxlOiB2YXIvaHR0cGQvaHRkb2NzL2pzL0lUU00uR2VuZXJhbENhdGFsb2cuanMKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dhcm5pbmcgaW5jaWRlbnQgc3RhdGUgY2FuIG5vdCBiZSBzZXQgdG8gaW52YWxpZC4nfSA9ICdFbCBlc3RhZG8gZGUgaW5jaWRlbnRlIEF0ZW5jacOzbiBubyBwdWVkZSBzZXIgaW52w6FsaWRvLic7CgogICAgIyBTeXNDb25maWcKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbW1lbnQgMid9ID0gJ0NvbWVudGFyaW8gMic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDcmVhdGUgYW5kIG1hbmFnZSB0aGUgR2VuZXJhbCBDYXRhbG9nLid9ID0gJ0NyZWEgeSBnZXN0aW9uYSBlbCBDYXTDoWxvZ28gR2VuZXJhbCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmUgdGhlIGdlbmVyYWwgY2F0YWxvZyBjb21tZW50IDIuJ30gPSAnRGVmaW5pciBlbCBjb21lbnRhcmlvIDIgZGVsIGNhdMOhbG9nbyBnZW5lcmFsLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgQWRtaW5HZW5lcmFsQ2F0YWxvZyBjb25maWd1cmF0aW9uIGluIHRoZSBhZG1pbiBhcmVhLid9ID0KICAgICAgICAnRWwgRnJvbnRlbmQgZGVsIHJlZ2lzdHJvIGRlbCBtw7NkdWxvIHBhcmEgbGEgY29uZmlndXJhY2nDs24gZGVsIEFkbWluR2VuZXJhbENhdGFsb2cgZW4gZWwgw6FyZWEgYWRtaW4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnR2VuZXJhbCBDYXRhbG9nJ30gPSAnQ2F0w6Fsb2dvIEdlbmVyYWwnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFyYW1ldGVycyBmb3IgdGhlIGV4YW1wbGUgY29tbWVudCAyIG9mIHRoZSBnZW5lcmFsIGNhdGFsb2cgYXR0cmlidXRlcy4nfSA9CiAgICAgICAgJ1BhcsOhbWV0cm9zIHBhcmEgZWwgZWplbXBsbyBjb21lbnRhcmlvIDIgZGUgbG9zIGF0cmlidXRvcyBkZWwgY2F0w6Fsb2dvIGdlbmVyYWwuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcmFtZXRlcnMgZm9yIHRoZSBleGFtcGxlIHBlcm1pc3Npb24gZ3JvdXBzIG9mIHRoZSBnZW5lcmFsIGNhdGFsb2cgYXR0cmlidXRlcy4nfSA9CiAgICAgICAgJ1BhcsOhbWV0cm9zIHBhcmEgbG9zIHBlcm1pc29zIGRlIGVqZW1wbG8gZGUgbG9zIGF0cmlidXRvcyBkZWwgY2F0w6Fsb2dvIGdlbmVyYWwuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Blcm1pc3Npb24gR3JvdXAnfSA9ICdHcnVwbyBkZSBwZXJtaXNvcyc7CgoKICAgIHB1c2ggQHsgJFNlbGYtPntKYXZhU2NyaXB0U3RyaW5nc30gLy8gW10gfSwgKAogICAgJ0NhbmNlbCcsCiAgICAnV2FybmluZycsCiAgICAnV2FybmluZyBpbmNpZGVudCBzdGF0ZSBjYW4gbm90IGJlIHNldCB0byBpbnZhbGlkLicsCiAgICApOwoKfQoKMTsK
IyAtLQojIENvcHlyaWdodCAoQykgMjAyMS0yMDIyIFpudW55IEdtYkgsIGh0dHBzOi8vem51bnkub3JnLwojIC0tCiMgVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKIyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9ncGwtMy4wLnR4dC4KIyAtLQoKcGFja2FnZSBLZXJuZWw6Okxhbmd1YWdlOjplc19NWF9HZW5lcmFsQ2F0YWxvZzsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKdXNlIHV0Zjg7CgpzdWIgRGF0YSB7CiAgICBteSAkU2VsZiA9IHNoaWZ0OwoKICAgICMgVFQgVGVtcGxhdGU6IEtlcm5lbC9PdXRwdXQvSFRNTC9UZW1wbGF0ZXMvU3RhbmRhcmQvQUFBR2VuZXJhbENhdGFsb2cudHQKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Z1bmN0aW9uYWxpdHknfSA9ICdGdW5jaW9uYWxpZGFkJzsKCiAgICAjIFRUIFRlbXBsYXRlOiBLZXJuZWwvT3V0cHV0L0hUTUwvVGVtcGxhdGVzL1N0YW5kYXJkL0FkbWluR2VuZXJhbENhdGFsb2cudHQKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0dlbmVyYWwgQ2F0YWxvZyBNYW5hZ2VtZW50J30gPSAnQWRtaW5pc3RyYWNpw7NuIGRlbCBDYXTDoWxvZ28gR2VuZXJhbCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJdGVtcyBpbiBDbGFzcyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFZGl0IEl0ZW0nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIENsYXNzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBJdGVtJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBDYXRhbG9nIEl0ZW0nfSA9ICdBw7FhZGlyIGFydMOtY3VsbyBkZWwgY2F0w6Fsb2dvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBDYXRhbG9nIENsYXNzJ30gPSAnQcOxYWRpciBjbGFzZSBkZWwgY2F0w6Fsb2dvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NhdGFsb2cgQ2xhc3MnfSA9ICdDYXTDoWxvZ28gZGUgY2xhc2VzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VkaXQgQ2F0YWxvZyBJdGVtJ30gPSAnRWRpdGFyIGFydMOtY3VsbyBkZWwgY2F0w6Fsb2dvJzsKCiAgICAjIEpTIEZpbGU6IHZhci9odHRwZC9odGRvY3MvanMvSVRTTS5HZW5lcmFsQ2F0YWxvZy5qcwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV2FybmluZyBpbmNpZGVudCBzdGF0ZSBjYW4gbm90IGJlIHNldCB0byBpbnZhbGlkLid9ID0gJyc7CgogICAgIyBTeXNDb25maWcKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbW1lbnQgMid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDcmVhdGUgYW5kIG1hbmFnZSB0aGUgR2VuZXJhbCBDYXRhbG9nLid9ID0gJ0NyZWFyIHkgYWRtaW5pc3RyYXIgZWwgQ2F0w6Fsb2dvIEdlbmVyYWwnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lIHRoZSBnZW5lcmFsIGNhdGFsb2cgY29tbWVudCAyLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgQWRtaW5HZW5lcmFsQ2F0YWxvZyBjb25maWd1cmF0aW9uIGluIHRoZSBhZG1pbiBhcmVhLid9ID0KICAgICAgICAnUmVnaXN0cm8gZGVsIG3Ds2R1bG8gZGUgRnJvbnRlbmQgcGFyYSBsYSBhZG1pbmlzdHJhY2nDs24gZGVsIGNhdMOhbG9nbyBnZW5lcmFsIGVuIGVsIMOhcmVhIGRlIGFkbWluaXN0cmFjacOzbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydHZW5lcmFsIENhdGFsb2cnfSA9ICdDYXTDoWxvZ28gR2VuZXJhbCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJhbWV0ZXJzIGZvciB0aGUgZXhhbXBsZSBjb21tZW50IDIgb2YgdGhlIGdlbmVyYWwgY2F0YWxvZyBhdHRyaWJ1dGVzLid9ID0KICAgICAgICAnUGFyw6FtZXRyb3MgcGFyYSBlbCBjb21lbnRhcmlvIGRlIGVqZW1wbG8gMiBkZWwgY2F0w6Fsb2dvIGdlbmVyYWwgZGUgYXRyaWJ1dG9zJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcmFtZXRlcnMgZm9yIHRoZSBleGFtcGxlIHBlcm1pc3Npb24gZ3JvdXBzIG9mIHRoZSBnZW5lcmFsIGNhdGFsb2cgYXR0cmlidXRlcy4nfSA9CiAgICAgICAgJ1BhcsOhbWV0cm9zIHBhcmEgZWwgZWplbXBsbyBkZSBwZXJtaXNvcyBkZSBncnVwbyBkZWwgY2F0w6Fsb2dvIGdlbmVyYWwgZGUgYXRyaWJ1dG9zJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Blcm1pc3Npb24gR3JvdXAnfSA9ICcnOwoKCiAgICBwdXNoIEB7ICRTZWxmLT57SmF2YVNjcmlwdFN0cmluZ3N9IC8vIFtdIH0sICgKICAgICdDYW5jZWwnLAogICAgJ1dhcm5pbmcnLAogICAgJ1dhcm5pbmcgaW5jaWRlbnQgc3RhdGUgY2FuIG5vdCBiZSBzZXQgdG8gaW52YWxpZC4nLAogICAgKTsKCn0KCjE7Cg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAyMS0yMDIyIFpudW55IEdtYkgsIGh0dHBzOi8vem51bnkub3JnLwojIC0tCiMgVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKIyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9ncGwtMy4wLnR4dC4KIyAtLQoKcGFja2FnZSBLZXJuZWw6Okxhbmd1YWdlOjpldF9HZW5lcmFsQ2F0YWxvZzsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKdXNlIHV0Zjg7CgpzdWIgRGF0YSB7CiAgICBteSAkU2VsZiA9IHNoaWZ0OwoKICAgICMgVFQgVGVtcGxhdGU6IEtlcm5lbC9PdXRwdXQvSFRNTC9UZW1wbGF0ZXMvU3RhbmRhcmQvQUFBR2VuZXJhbENhdGFsb2cudHQKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Z1bmN0aW9uYWxpdHknfSA9ICcnOwoKICAgICMgVFQgVGVtcGxhdGU6IEtlcm5lbC9PdXRwdXQvSFRNTC9UZW1wbGF0ZXMvU3RhbmRhcmQvQWRtaW5HZW5lcmFsQ2F0YWxvZy50dAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnR2VuZXJhbCBDYXRhbG9nIE1hbmFnZW1lbnQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSXRlbXMgaW4gQ2xhc3MnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRWRpdCBJdGVtJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBDbGFzcyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgSXRlbSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgQ2F0YWxvZyBJdGVtJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBDYXRhbG9nIENsYXNzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NhdGFsb2cgQ2xhc3MnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRWRpdCBDYXRhbG9nIEl0ZW0nfSA9ICcnOwoKICAgICMgSlMgRmlsZTogdmFyL2h0dHBkL2h0ZG9jcy9qcy9JVFNNLkdlbmVyYWxDYXRhbG9nLmpzCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXYXJuaW5nIGluY2lkZW50IHN0YXRlIGNhbiBub3QgYmUgc2V0IHRvIGludmFsaWQuJ30gPSAnJzsKCiAgICAjIFN5c0NvbmZpZwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29tbWVudCAyJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NyZWF0ZSBhbmQgbWFuYWdlIHRoZSBHZW5lcmFsIENhdGFsb2cuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZSB0aGUgZ2VuZXJhbCBjYXRhbG9nIGNvbW1lbnQgMi4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFkbWluR2VuZXJhbENhdGFsb2cgY29uZmlndXJhdGlvbiBpbiB0aGUgYWRtaW4gYXJlYS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydHZW5lcmFsIENhdGFsb2cnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFyYW1ldGVycyBmb3IgdGhlIGV4YW1wbGUgY29tbWVudCAyIG9mIHRoZSBnZW5lcmFsIGNhdGFsb2cgYXR0cmlidXRlcy4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJhbWV0ZXJzIGZvciB0aGUgZXhhbXBsZSBwZXJtaXNzaW9uIGdyb3VwcyBvZiB0aGUgZ2VuZXJhbCBjYXRhbG9nIGF0dHJpYnV0ZXMuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGVybWlzc2lvbiBHcm91cCd9ID0gJyc7CgoKICAgIHB1c2ggQHsgJFNlbGYtPntKYXZhU2NyaXB0U3RyaW5nc30gLy8gW10gfSwgKAogICAgJ0NhbmNlbCcsCiAgICAnV2FybmluZycsCiAgICAnV2FybmluZyBpbmNpZGVudCBzdGF0ZSBjYW4gbm90IGJlIHNldCB0byBpbnZhbGlkLicsCiAgICApOwoKfQoKMTsK
IyAtLQojIENvcHlyaWdodCAoQykgMjAyMS0yMDIyIFpudW55IEdtYkgsIGh0dHBzOi8vem51bnkub3JnLwojIC0tCiMgVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKIyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9ncGwtMy4wLnR4dC4KIyAtLQoKcGFja2FnZSBLZXJuZWw6Okxhbmd1YWdlOjpmYV9HZW5lcmFsQ2F0YWxvZzsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKdXNlIHV0Zjg7CgpzdWIgRGF0YSB7CiAgICBteSAkU2VsZiA9IHNoaWZ0OwoKICAgICMgVFQgVGVtcGxhdGU6IEtlcm5lbC9PdXRwdXQvSFRNTC9UZW1wbGF0ZXMvU3RhbmRhcmQvQUFBR2VuZXJhbENhdGFsb2cudHQKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Z1bmN0aW9uYWxpdHknfSA9ICfaqdin2LHaqdix2K/bjCc7CgogICAgIyBUVCBUZW1wbGF0ZTogS2VybmVsL091dHB1dC9IVE1ML1RlbXBsYXRlcy9TdGFuZGFyZC9BZG1pbkdlbmVyYWxDYXRhbG9nLnR0CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydHZW5lcmFsIENhdGFsb2cgTWFuYWdlbWVudCd9ID0gJ9mF2K/bjNix24zYqiDZgdmH2LHYs9iqINi52YXZiNmF24wnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSXRlbXMgaW4gQ2xhc3MnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRWRpdCBJdGVtJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBDbGFzcyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgSXRlbSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgQ2F0YWxvZyBJdGVtJ30gPSAn2KfYttin2YHZhyDaqdix2K/ZhiDbjNqpINmC2YTZhSDZgdmH2LHYs9iqJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBDYXRhbG9nIENsYXNzJ30gPSAn2KfYttin2YHZhyDaqdix2K/ZhiDaqdmE2KfYsyDZgdmH2LHYs9iq24wnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2F0YWxvZyBDbGFzcyd9ID0gJ9mB2YfYsdiz2Kog2qnZhNin2LPbjCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFZGl0IENhdGFsb2cgSXRlbSd9ID0gJyc7CgogICAgIyBKUyBGaWxlOiB2YXIvaHR0cGQvaHRkb2NzL2pzL0lUU00uR2VuZXJhbENhdGFsb2cuanMKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dhcm5pbmcgaW5jaWRlbnQgc3RhdGUgY2FuIG5vdCBiZSBzZXQgdG8gaW52YWxpZC4nfSA9ICcnOwoKICAgICMgU3lzQ29uZmlnCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb21tZW50IDInfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3JlYXRlIGFuZCBtYW5hZ2UgdGhlIEdlbmVyYWwgQ2F0YWxvZy4nfSA9ICfYs9in2K7YqiDZiCDZhdiv24zYsduM2Kog2YHZh9ix2LPYqiDYudmF2YjZhduMJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZSB0aGUgZ2VuZXJhbCBjYXRhbG9nIGNvbW1lbnQgMi4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFkbWluR2VuZXJhbENhdGFsb2cgY29uZmlndXJhdGlvbiBpbiB0aGUgYWRtaW4gYXJlYS4nfSA9CiAgICAgICAgJ9ir2KjYqiDZhdin2pjZiNmEINio2LHYp9uMINm+24zaqdix2KjZhtiv24wg2YHZh9ix2LPYqiDYudmF2YjZhduMINiv2LEg2KjYrti0INmF2K/bjNix24zYqic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydHZW5lcmFsIENhdGFsb2cnfSA9ICfZgdmH2LHYs9iqINi52YXZiNmF24wnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFyYW1ldGVycyBmb3IgdGhlIGV4YW1wbGUgY29tbWVudCAyIG9mIHRoZSBnZW5lcmFsIGNhdGFsb2cgYXR0cmlidXRlcy4nfSA9CiAgICAgICAgJ9m+2KfYsdin2YXYqtix2YfYp9uM24wg2KjYsdin24wg2KrZiNi224zYrSDZhtmF2YjZhtmHINuyINmF2LHYqNmI2Lcg2KjZhyDZiNuM2pjar9uM4oCM2YfYp9uMINmB2YfYsdiz2Kog2LnZhdmI2YXbjCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJhbWV0ZXJzIGZvciB0aGUgZXhhbXBsZSBwZXJtaXNzaW9uIGdyb3VwcyBvZiB0aGUgZ2VuZXJhbCBjYXRhbG9nIGF0dHJpYnV0ZXMuJ30gPQogICAgICAgICfZvtin2LHYp9mF2KrYsdmH2KfbjNuMINio2LHYp9uMINqv2LHZiNmH4oCM2YfYp9uMINiv2LPYqtix2LPbjCDZhtmF2YjZhtmHINmF2LHYqNmI2Lcg2KjZhyDZiNuM2pjar9uM4oCM2YfYp9uMINmB2YfYsdiz2Kog2LnZhdmI2YXbjCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQZXJtaXNzaW9uIEdyb3VwJ30gPSAnJzsKCgogICAgcHVzaCBAeyAkU2VsZi0+e0phdmFTY3JpcHRTdHJpbmdzfSAvLyBbXSB9LCAoCiAgICAnQ2FuY2VsJywKICAgICdXYXJuaW5nJywKICAgICdXYXJuaW5nIGluY2lkZW50IHN0YXRlIGNhbiBub3QgYmUgc2V0IHRvIGludmFsaWQuJywKICAgICk7Cgp9CgoxOwo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAyMS0yMDIyIFpudW55IEdtYkgsIGh0dHBzOi8vem51bnkub3JnLwojIC0tCiMgVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKIyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9ncGwtMy4wLnR4dC4KIyAtLQoKcGFja2FnZSBLZXJuZWw6Okxhbmd1YWdlOjpmaV9HZW5lcmFsQ2F0YWxvZzsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKdXNlIHV0Zjg7CgpzdWIgRGF0YSB7CiAgICBteSAkU2VsZiA9IHNoaWZ0OwoKICAgICMgVFQgVGVtcGxhdGU6IEtlcm5lbC9PdXRwdXQvSFRNTC9UZW1wbGF0ZXMvU3RhbmRhcmQvQUFBR2VuZXJhbENhdGFsb2cudHQKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Z1bmN0aW9uYWxpdHknfSA9ICcnOwoKICAgICMgVFQgVGVtcGxhdGU6IEtlcm5lbC9PdXRwdXQvSFRNTC9UZW1wbGF0ZXMvU3RhbmRhcmQvQWRtaW5HZW5lcmFsQ2F0YWxvZy50dAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnR2VuZXJhbCBDYXRhbG9nIE1hbmFnZW1lbnQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSXRlbXMgaW4gQ2xhc3MnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRWRpdCBJdGVtJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBDbGFzcyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgSXRlbSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgQ2F0YWxvZyBJdGVtJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBDYXRhbG9nIENsYXNzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NhdGFsb2cgQ2xhc3MnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRWRpdCBDYXRhbG9nIEl0ZW0nfSA9ICcnOwoKICAgICMgSlMgRmlsZTogdmFyL2h0dHBkL2h0ZG9jcy9qcy9JVFNNLkdlbmVyYWxDYXRhbG9nLmpzCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXYXJuaW5nIGluY2lkZW50IHN0YXRlIGNhbiBub3QgYmUgc2V0IHRvIGludmFsaWQuJ30gPSAnJzsKCiAgICAjIFN5c0NvbmZpZwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29tbWVudCAyJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NyZWF0ZSBhbmQgbWFuYWdlIHRoZSBHZW5lcmFsIENhdGFsb2cuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZSB0aGUgZ2VuZXJhbCBjYXRhbG9nIGNvbW1lbnQgMi4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFkbWluR2VuZXJhbENhdGFsb2cgY29uZmlndXJhdGlvbiBpbiB0aGUgYWRtaW4gYXJlYS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydHZW5lcmFsIENhdGFsb2cnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFyYW1ldGVycyBmb3IgdGhlIGV4YW1wbGUgY29tbWVudCAyIG9mIHRoZSBnZW5lcmFsIGNhdGFsb2cgYXR0cmlidXRlcy4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJhbWV0ZXJzIGZvciB0aGUgZXhhbXBsZSBwZXJtaXNzaW9uIGdyb3VwcyBvZiB0aGUgZ2VuZXJhbCBjYXRhbG9nIGF0dHJpYnV0ZXMuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGVybWlzc2lvbiBHcm91cCd9ID0gJyc7CgoKICAgIHB1c2ggQHsgJFNlbGYtPntKYXZhU2NyaXB0U3RyaW5nc30gLy8gW10gfSwgKAogICAgJ0NhbmNlbCcsCiAgICAnV2FybmluZycsCiAgICAnV2FybmluZyBpbmNpZGVudCBzdGF0ZSBjYW4gbm90IGJlIHNldCB0byBpbnZhbGlkLicsCiAgICApOwoKfQoKMTsK
IyAtLQojIENvcHlyaWdodCAoQykgMjAyMS0yMDIyIFpudW55IEdtYkgsIGh0dHBzOi8vem51bnkub3JnLwojIC0tCiMgVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKIyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9ncGwtMy4wLnR4dC4KIyAtLQoKcGFja2FnZSBLZXJuZWw6Okxhbmd1YWdlOjpmcl9DQV9HZW5lcmFsQ2F0YWxvZzsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKdXNlIHV0Zjg7CgpzdWIgRGF0YSB7CiAgICBteSAkU2VsZiA9IHNoaWZ0OwoKICAgICMgVFQgVGVtcGxhdGU6IEtlcm5lbC9PdXRwdXQvSFRNTC9UZW1wbGF0ZXMvU3RhbmRhcmQvQUFBR2VuZXJhbENhdGFsb2cudHQKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Z1bmN0aW9uYWxpdHknfSA9ICcnOwoKICAgICMgVFQgVGVtcGxhdGU6IEtlcm5lbC9PdXRwdXQvSFRNTC9UZW1wbGF0ZXMvU3RhbmRhcmQvQWRtaW5HZW5lcmFsQ2F0YWxvZy50dAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnR2VuZXJhbCBDYXRhbG9nIE1hbmFnZW1lbnQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSXRlbXMgaW4gQ2xhc3MnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRWRpdCBJdGVtJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBDbGFzcyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgSXRlbSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgQ2F0YWxvZyBJdGVtJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBDYXRhbG9nIENsYXNzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NhdGFsb2cgQ2xhc3MnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRWRpdCBDYXRhbG9nIEl0ZW0nfSA9ICcnOwoKICAgICMgSlMgRmlsZTogdmFyL2h0dHBkL2h0ZG9jcy9qcy9JVFNNLkdlbmVyYWxDYXRhbG9nLmpzCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXYXJuaW5nIGluY2lkZW50IHN0YXRlIGNhbiBub3QgYmUgc2V0IHRvIGludmFsaWQuJ30gPSAnJzsKCiAgICAjIFN5c0NvbmZpZwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29tbWVudCAyJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NyZWF0ZSBhbmQgbWFuYWdlIHRoZSBHZW5lcmFsIENhdGFsb2cuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZSB0aGUgZ2VuZXJhbCBjYXRhbG9nIGNvbW1lbnQgMi4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFkbWluR2VuZXJhbENhdGFsb2cgY29uZmlndXJhdGlvbiBpbiB0aGUgYWRtaW4gYXJlYS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydHZW5lcmFsIENhdGFsb2cnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFyYW1ldGVycyBmb3IgdGhlIGV4YW1wbGUgY29tbWVudCAyIG9mIHRoZSBnZW5lcmFsIGNhdGFsb2cgYXR0cmlidXRlcy4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJhbWV0ZXJzIGZvciB0aGUgZXhhbXBsZSBwZXJtaXNzaW9uIGdyb3VwcyBvZiB0aGUgZ2VuZXJhbCBjYXRhbG9nIGF0dHJpYnV0ZXMuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGVybWlzc2lvbiBHcm91cCd9ID0gJyc7CgoKICAgIHB1c2ggQHsgJFNlbGYtPntKYXZhU2NyaXB0U3RyaW5nc30gLy8gW10gfSwgKAogICAgJ0NhbmNlbCcsCiAgICAnV2FybmluZycsCiAgICAnV2FybmluZyBpbmNpZGVudCBzdGF0ZSBjYW4gbm90IGJlIHNldCB0byBpbnZhbGlkLicsCiAgICApOwoKfQoKMTsK
IyAtLQojIENvcHlyaWdodCAoQykgMjAyMS0yMDIyIFpudW55IEdtYkgsIGh0dHBzOi8vem51bnkub3JnLwojIC0tCiMgVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKIyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9ncGwtMy4wLnR4dC4KIyAtLQoKcGFja2FnZSBLZXJuZWw6Okxhbmd1YWdlOjpmcl9HZW5lcmFsQ2F0YWxvZzsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKdXNlIHV0Zjg7CgpzdWIgRGF0YSB7CiAgICBteSAkU2VsZiA9IHNoaWZ0OwoKICAgICMgVFQgVGVtcGxhdGU6IEtlcm5lbC9PdXRwdXQvSFRNTC9UZW1wbGF0ZXMvU3RhbmRhcmQvQUFBR2VuZXJhbENhdGFsb2cudHQKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Z1bmN0aW9uYWxpdHknfSA9ICdGb25jdGlvbm5hbGl0w6knOwoKICAgICMgVFQgVGVtcGxhdGU6IEtlcm5lbC9PdXRwdXQvSFRNTC9UZW1wbGF0ZXMvU3RhbmRhcmQvQWRtaW5HZW5lcmFsQ2F0YWxvZy50dAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnR2VuZXJhbCBDYXRhbG9nIE1hbmFnZW1lbnQnfSA9ICdHZXN0aW9uIGR1IGNhdGFsb2d1ZSBnw6luw6lyYWwnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSXRlbXMgaW4gQ2xhc3MnfSA9ICfDiWzDqW1lbnRzIGRhbnMgbGEgY2xhc3NlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VkaXQgSXRlbSd9ID0gJ8OJZGl0ZXIgdW4gw6lsw6ltZW50JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBDbGFzcyd9ID0gJ0Fqb3V0ZXIgdW5lIGNsYXNzZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgSXRlbSd9ID0gJ0Fqb3V0ZXIgdW4gw6lsw6ltZW50JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBDYXRhbG9nIEl0ZW0nfSA9ICdBam91dGVyIHVuIMOpbMOpbWVudCBhdSBjYXRhbG9ndWUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIENhdGFsb2cgQ2xhc3MnfSA9ICdBam91dGVyIHVuZSBjbGFzc2UgYXUgY2F0YWxvZ3VlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NhdGFsb2cgQ2xhc3MnfSA9ICdDbGFzc2UgZGUgY2F0YWxvZ3VlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VkaXQgQ2F0YWxvZyBJdGVtJ30gPSAnw4lkaXRlciB1biDDqWzDqW1lbnQgZHUgY2F0YWxvZ3VlJzsKCiAgICAjIEpTIEZpbGU6IHZhci9odHRwZC9odGRvY3MvanMvSVRTTS5HZW5lcmFsQ2F0YWxvZy5qcwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV2FybmluZyBpbmNpZGVudCBzdGF0ZSBjYW4gbm90IGJlIHNldCB0byBpbnZhbGlkLid9ID0gJyc7CgogICAgIyBTeXNDb25maWcKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbW1lbnQgMid9ID0gJ0NvbW1lbnRhaXJlIDInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3JlYXRlIGFuZCBtYW5hZ2UgdGhlIEdlbmVyYWwgQ2F0YWxvZy4nfSA9ICdDcsOpZXIgZXQgZ8OpcmVyIGxlIGNhdGFsb2d1ZSBnw6luw6lyYWwuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZSB0aGUgZ2VuZXJhbCBjYXRhbG9nIGNvbW1lbnQgMi4nfSA9ICdEw6lmaW5pciBsZSBjb21tZW50YWlyZSAyIGR1IGNhdGFsb2d1ZSBnw6luw6lyYWwuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZG1pbkdlbmVyYWxDYXRhbG9nIGNvbmZpZ3VyYXRpb24gaW4gdGhlIGFkbWluIGFyZWEuJ30gPQogICAgICAgICdJbnRlcmZhY2UgZFwnZW5yZWdpc3RyZW1lbnQgZGUgbW9kdWxlIHBvdXIgbGEgY29uZmlndXJhdGlvbiBkdSBjYXRhbG9ndWUgZ8OpbsOpcmFsIGRhbnMgbGEgem9uZSBhZG1pbmlzdHJhdGV1cic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydHZW5lcmFsIENhdGFsb2cnfSA9ICdDYXRhbG9ndWUgZ8OpbsOpcmFsJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcmFtZXRlcnMgZm9yIHRoZSBleGFtcGxlIGNvbW1lbnQgMiBvZiB0aGUgZ2VuZXJhbCBjYXRhbG9nIGF0dHJpYnV0ZXMuJ30gPQogICAgICAgICdQYXJhbcOodHJlcyBwb3VyIGxcJ2V4ZW1wbGUgZHUgY29tbWVudGFpcmUgMiBkZXMgYXR0cmlidXRzIGR1IGNhdGFsb2d1ZSBnw6luw6lyYWwnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFyYW1ldGVycyBmb3IgdGhlIGV4YW1wbGUgcGVybWlzc2lvbiBncm91cHMgb2YgdGhlIGdlbmVyYWwgY2F0YWxvZyBhdHRyaWJ1dGVzLid9ID0KICAgICAgICAnUGFyYW3DqHRyZXMgcG91ciBsXCdleGVtcGxlIGRlcyBwZXJtaXNzaW9ucyBkZSBncm91cGVzIGRlcyBhdHRyaWJ1dHMgZHUgY2F0YWxvZ3VlIGfDqW7DqXJhbC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGVybWlzc2lvbiBHcm91cCd9ID0gJyc7CgoKICAgIHB1c2ggQHsgJFNlbGYtPntKYXZhU2NyaXB0U3RyaW5nc30gLy8gW10gfSwgKAogICAgJ0NhbmNlbCcsCiAgICAnV2FybmluZycsCiAgICAnV2FybmluZyBpbmNpZGVudCBzdGF0ZSBjYW4gbm90IGJlIHNldCB0byBpbnZhbGlkLicsCiAgICApOwoKfQoKMTsK
IyAtLQojIENvcHlyaWdodCAoQykgMjAyMS0yMDIyIFpudW55IEdtYkgsIGh0dHBzOi8vem51bnkub3JnLwojIC0tCiMgVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKIyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9ncGwtMy4wLnR4dC4KIyAtLQoKcGFja2FnZSBLZXJuZWw6Okxhbmd1YWdlOjpnbF9HZW5lcmFsQ2F0YWxvZzsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKdXNlIHV0Zjg7CgpzdWIgRGF0YSB7CiAgICBteSAkU2VsZiA9IHNoaWZ0OwoKICAgICMgVFQgVGVtcGxhdGU6IEtlcm5lbC9PdXRwdXQvSFRNTC9UZW1wbGF0ZXMvU3RhbmRhcmQvQUFBR2VuZXJhbENhdGFsb2cudHQKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Z1bmN0aW9uYWxpdHknfSA9ICdGdW5jaW9uYWxpZGFkZSc7CgogICAgIyBUVCBUZW1wbGF0ZTogS2VybmVsL091dHB1dC9IVE1ML1RlbXBsYXRlcy9TdGFuZGFyZC9BZG1pbkdlbmVyYWxDYXRhbG9nLnR0CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydHZW5lcmFsIENhdGFsb2cgTWFuYWdlbWVudCd9ID0gJ1hlc3Rpw7NuIGRvIENhdMOhbG9nbyBYZXJhbCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJdGVtcyBpbiBDbGFzcyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFZGl0IEl0ZW0nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIENsYXNzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBJdGVtJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBDYXRhbG9nIEl0ZW0nfSA9ICdFbmdhZGlyIHVuIGVsZW1lbnRvIGFvIGNhdMOhbG9nbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgQ2F0YWxvZyBDbGFzcyd9ID0gJ0VuZ2FkaXIgdW5oYSBjbGFzZSBhbyBjYXTDoWxvZ28nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2F0YWxvZyBDbGFzcyd9ID0gJ0NsYXNlIGRvIGNhdMOhbG9nbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFZGl0IENhdGFsb2cgSXRlbSd9ID0gJyc7CgogICAgIyBKUyBGaWxlOiB2YXIvaHR0cGQvaHRkb2NzL2pzL0lUU00uR2VuZXJhbENhdGFsb2cuanMKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dhcm5pbmcgaW5jaWRlbnQgc3RhdGUgY2FuIG5vdCBiZSBzZXQgdG8gaW52YWxpZC4nfSA9ICcnOwoKICAgICMgU3lzQ29uZmlnCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb21tZW50IDInfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3JlYXRlIGFuZCBtYW5hZ2UgdGhlIEdlbmVyYWwgQ2F0YWxvZy4nfSA9ICdDcmVhciBlIHhlc3Rpb25hciBvIENhdMOhbG9nbyBYZXJhbCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmUgdGhlIGdlbmVyYWwgY2F0YWxvZyBjb21tZW50IDIuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZG1pbkdlbmVyYWxDYXRhbG9nIGNvbmZpZ3VyYXRpb24gaW4gdGhlIGFkbWluIGFyZWEuJ30gPQogICAgICAgICdSZXhpc3RybyBubyBtw7NkdWxvIGRlIGludGVyZmFjZSBwYXJhIGEgY29uZmlndXJhY2nDs24gZGUgQWRtaW5HZW5lcmFsQ2F0YWxvZyBuYSDDoXJlYSBhZG1pbmlzdHJhdGl2YS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnR2VuZXJhbCBDYXRhbG9nJ30gPSAnQ2F0w6Fsb2dvIFhlcmFsJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcmFtZXRlcnMgZm9yIHRoZSBleGFtcGxlIGNvbW1lbnQgMiBvZiB0aGUgZ2VuZXJhbCBjYXRhbG9nIGF0dHJpYnV0ZXMuJ30gPQogICAgICAgICdQYXLDoW1ldHJvcyBwYXJhIG8gY29tZW50YXJpbyBkZSBleGVtcGxvIDIgZG9zIGF0cmlidXRvcyBkbyBjYXTDoWxvZ28geGVyYWwuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcmFtZXRlcnMgZm9yIHRoZSBleGFtcGxlIHBlcm1pc3Npb24gZ3JvdXBzIG9mIHRoZSBnZW5lcmFsIGNhdGFsb2cgYXR0cmlidXRlcy4nfSA9CiAgICAgICAgJ1BhcsOhbWV0cm9zIHBhcmEgb3MgZ3J1cG9zIGRlIHBlcm1pc29zIGRlIGV4ZW1wbG8gZG9zIGF0cmlidXRvcyBkbyBjYXTDoWxvZ28geGVyYWwuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Blcm1pc3Npb24gR3JvdXAnfSA9ICcnOwoKCiAgICBwdXNoIEB7ICRTZWxmLT57SmF2YVNjcmlwdFN0cmluZ3N9IC8vIFtdIH0sICgKICAgICdDYW5jZWwnLAogICAgJ1dhcm5pbmcnLAogICAgJ1dhcm5pbmcgaW5jaWRlbnQgc3RhdGUgY2FuIG5vdCBiZSBzZXQgdG8gaW52YWxpZC4nLAogICAgKTsKCn0KCjE7Cg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAyMS0yMDIyIFpudW55IEdtYkgsIGh0dHBzOi8vem51bnkub3JnLwojIC0tCiMgVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKIyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9ncGwtMy4wLnR4dC4KIyAtLQoKcGFja2FnZSBLZXJuZWw6Okxhbmd1YWdlOjpoZV9HZW5lcmFsQ2F0YWxvZzsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKdXNlIHV0Zjg7CgpzdWIgRGF0YSB7CiAgICBteSAkU2VsZiA9IHNoaWZ0OwoKICAgICMgVFQgVGVtcGxhdGU6IEtlcm5lbC9PdXRwdXQvSFRNTC9UZW1wbGF0ZXMvU3RhbmRhcmQvQUFBR2VuZXJhbENhdGFsb2cudHQKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Z1bmN0aW9uYWxpdHknfSA9ICfXpNeV16DXp9em15nXldeg15zXmSc7CgogICAgIyBUVCBUZW1wbGF0ZTogS2VybmVsL091dHB1dC9IVE1ML1RlbXBsYXRlcy9TdGFuZGFyZC9BZG1pbkdlbmVyYWxDYXRhbG9nLnR0CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydHZW5lcmFsIENhdGFsb2cgTWFuYWdlbWVudCd9ID0gJ9eg15nXlNeV15wg16fXmNec15XXkiDXm9ec15zXmSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJdGVtcyBpbiBDbGFzcyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFZGl0IEl0ZW0nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIENsYXNzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBJdGVtJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBDYXRhbG9nIEl0ZW0nfSA9ICfXlNeV16HXoyDXpNeo15nXmCDXnNen15jXnNeV15InOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIENhdGFsb2cgQ2xhc3MnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2F0YWxvZyBDbGFzcyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFZGl0IENhdGFsb2cgSXRlbSd9ID0gJyc7CgogICAgIyBKUyBGaWxlOiB2YXIvaHR0cGQvaHRkb2NzL2pzL0lUU00uR2VuZXJhbENhdGFsb2cuanMKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dhcm5pbmcgaW5jaWRlbnQgc3RhdGUgY2FuIG5vdCBiZSBzZXQgdG8gaW52YWxpZC4nfSA9ICcnOwoKICAgICMgU3lzQ29uZmlnCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb21tZW50IDInfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3JlYXRlIGFuZCBtYW5hZ2UgdGhlIEdlbmVyYWwgQ2F0YWxvZy4nfSA9ICfXmdem15nXqNeUINeV16DXmdeU15XXnCDXqdecINeU16fXmNec15XXkiDXlNeb15zXnNeZJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZSB0aGUgZ2VuZXJhbCBjYXRhbG9nIGNvbW1lbnQgMi4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFkbWluR2VuZXJhbENhdGFsb2cgY29uZmlndXJhdGlvbiBpbiB0aGUgYWRtaW4gYXJlYS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydHZW5lcmFsIENhdGFsb2cnfSA9ICfXoNeZ15TXldecINen15jXnNeV15InOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFyYW1ldGVycyBmb3IgdGhlIGV4YW1wbGUgY29tbWVudCAyIG9mIHRoZSBnZW5lcmFsIGNhdGFsb2cgYXR0cmlidXRlcy4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJhbWV0ZXJzIGZvciB0aGUgZXhhbXBsZSBwZXJtaXNzaW9uIGdyb3VwcyBvZiB0aGUgZ2VuZXJhbCBjYXRhbG9nIGF0dHJpYnV0ZXMuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGVybWlzc2lvbiBHcm91cCd9ID0gJyc7CgoKICAgIHB1c2ggQHsgJFNlbGYtPntKYXZhU2NyaXB0U3RyaW5nc30gLy8gW10gfSwgKAogICAgJ0NhbmNlbCcsCiAgICAnV2FybmluZycsCiAgICAnV2FybmluZyBpbmNpZGVudCBzdGF0ZSBjYW4gbm90IGJlIHNldCB0byBpbnZhbGlkLicsCiAgICApOwoKfQoKMTsK
IyAtLQojIENvcHlyaWdodCAoQykgMjAyMS0yMDIyIFpudW55IEdtYkgsIGh0dHBzOi8vem51bnkub3JnLwojIC0tCiMgVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKIyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9ncGwtMy4wLnR4dC4KIyAtLQoKcGFja2FnZSBLZXJuZWw6Okxhbmd1YWdlOjpoaV9HZW5lcmFsQ2F0YWxvZzsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKdXNlIHV0Zjg7CgpzdWIgRGF0YSB7CiAgICBteSAkU2VsZiA9IHNoaWZ0OwoKICAgICMgVFQgVGVtcGxhdGU6IEtlcm5lbC9PdXRwdXQvSFRNTC9UZW1wbGF0ZXMvU3RhbmRhcmQvQUFBR2VuZXJhbENhdGFsb2cudHQKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Z1bmN0aW9uYWxpdHknfSA9ICcnOwoKICAgICMgVFQgVGVtcGxhdGU6IEtlcm5lbC9PdXRwdXQvSFRNTC9UZW1wbGF0ZXMvU3RhbmRhcmQvQWRtaW5HZW5lcmFsQ2F0YWxvZy50dAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnR2VuZXJhbCBDYXRhbG9nIE1hbmFnZW1lbnQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSXRlbXMgaW4gQ2xhc3MnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRWRpdCBJdGVtJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBDbGFzcyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgSXRlbSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgQ2F0YWxvZyBJdGVtJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBDYXRhbG9nIENsYXNzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NhdGFsb2cgQ2xhc3MnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRWRpdCBDYXRhbG9nIEl0ZW0nfSA9ICcnOwoKICAgICMgSlMgRmlsZTogdmFyL2h0dHBkL2h0ZG9jcy9qcy9JVFNNLkdlbmVyYWxDYXRhbG9nLmpzCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXYXJuaW5nIGluY2lkZW50IHN0YXRlIGNhbiBub3QgYmUgc2V0IHRvIGludmFsaWQuJ30gPSAnJzsKCiAgICAjIFN5c0NvbmZpZwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29tbWVudCAyJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NyZWF0ZSBhbmQgbWFuYWdlIHRoZSBHZW5lcmFsIENhdGFsb2cuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZSB0aGUgZ2VuZXJhbCBjYXRhbG9nIGNvbW1lbnQgMi4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFkbWluR2VuZXJhbENhdGFsb2cgY29uZmlndXJhdGlvbiBpbiB0aGUgYWRtaW4gYXJlYS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydHZW5lcmFsIENhdGFsb2cnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFyYW1ldGVycyBmb3IgdGhlIGV4YW1wbGUgY29tbWVudCAyIG9mIHRoZSBnZW5lcmFsIGNhdGFsb2cgYXR0cmlidXRlcy4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJhbWV0ZXJzIGZvciB0aGUgZXhhbXBsZSBwZXJtaXNzaW9uIGdyb3VwcyBvZiB0aGUgZ2VuZXJhbCBjYXRhbG9nIGF0dHJpYnV0ZXMuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGVybWlzc2lvbiBHcm91cCd9ID0gJyc7CgoKICAgIHB1c2ggQHsgJFNlbGYtPntKYXZhU2NyaXB0U3RyaW5nc30gLy8gW10gfSwgKAogICAgJ0NhbmNlbCcsCiAgICAnV2FybmluZycsCiAgICAnV2FybmluZyBpbmNpZGVudCBzdGF0ZSBjYW4gbm90IGJlIHNldCB0byBpbnZhbGlkLicsCiAgICApOwoKfQoKMTsK
IyAtLQojIENvcHlyaWdodCAoQykgMjAyMS0yMDIyIFpudW55IEdtYkgsIGh0dHBzOi8vem51bnkub3JnLwojIC0tCiMgVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKIyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9ncGwtMy4wLnR4dC4KIyAtLQoKcGFja2FnZSBLZXJuZWw6Okxhbmd1YWdlOjpocl9HZW5lcmFsQ2F0YWxvZzsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKdXNlIHV0Zjg7CgpzdWIgRGF0YSB7CiAgICBteSAkU2VsZiA9IHNoaWZ0OwoKICAgICMgVFQgVGVtcGxhdGU6IEtlcm5lbC9PdXRwdXQvSFRNTC9UZW1wbGF0ZXMvU3RhbmRhcmQvQUFBR2VuZXJhbENhdGFsb2cudHQKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Z1bmN0aW9uYWxpdHknfSA9ICdGdW5jaW9uYWxub3N0JzsKCiAgICAjIFRUIFRlbXBsYXRlOiBLZXJuZWwvT3V0cHV0L0hUTUwvVGVtcGxhdGVzL1N0YW5kYXJkL0FkbWluR2VuZXJhbENhdGFsb2cudHQKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0dlbmVyYWwgQ2F0YWxvZyBNYW5hZ2VtZW50J30gPSAnT3DEh2UgcG9zdGF2a2UgS2F0YWxvZ2EnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSXRlbXMgaW4gQ2xhc3MnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRWRpdCBJdGVtJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBDbGFzcyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgSXRlbSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgQ2F0YWxvZyBJdGVtJ30gPSAnRG9kYWogc3Rhdmt1IHUgS2F0YWxvZ3UnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIENhdGFsb2cgQ2xhc3MnfSA9ICdEb2RhaiBrbGFzdSB1IEthdGFsb2d1JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NhdGFsb2cgQ2xhc3MnfSA9ICdLYXRhbG/FoWthIGtsYXNhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VkaXQgQ2F0YWxvZyBJdGVtJ30gPSAnJzsKCiAgICAjIEpTIEZpbGU6IHZhci9odHRwZC9odGRvY3MvanMvSVRTTS5HZW5lcmFsQ2F0YWxvZy5qcwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV2FybmluZyBpbmNpZGVudCBzdGF0ZSBjYW4gbm90IGJlIHNldCB0byBpbnZhbGlkLid9ID0gJyc7CgogICAgIyBTeXNDb25maWcKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbW1lbnQgMid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDcmVhdGUgYW5kIG1hbmFnZSB0aGUgR2VuZXJhbCBDYXRhbG9nLid9ID0gJ05hcHJhdmkgaSBwb2Rlc2kgT3DEh2kga2F0YWxvZy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lIHRoZSBnZW5lcmFsIGNhdGFsb2cgY29tbWVudCAyLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgQWRtaW5HZW5lcmFsQ2F0YWxvZyBjb25maWd1cmF0aW9uIGluIHRoZSBhZG1pbiBhcmVhLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0dlbmVyYWwgQ2F0YWxvZyd9ID0gJ09wxIdpIGthdGFsb2cnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFyYW1ldGVycyBmb3IgdGhlIGV4YW1wbGUgY29tbWVudCAyIG9mIHRoZSBnZW5lcmFsIGNhdGFsb2cgYXR0cmlidXRlcy4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJhbWV0ZXJzIGZvciB0aGUgZXhhbXBsZSBwZXJtaXNzaW9uIGdyb3VwcyBvZiB0aGUgZ2VuZXJhbCBjYXRhbG9nIGF0dHJpYnV0ZXMuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGVybWlzc2lvbiBHcm91cCd9ID0gJyc7CgoKICAgIHB1c2ggQHsgJFNlbGYtPntKYXZhU2NyaXB0U3RyaW5nc30gLy8gW10gfSwgKAogICAgJ0NhbmNlbCcsCiAgICAnV2FybmluZycsCiAgICAnV2FybmluZyBpbmNpZGVudCBzdGF0ZSBjYW4gbm90IGJlIHNldCB0byBpbnZhbGlkLicsCiAgICApOwoKfQoKMTsK
IyAtLQojIENvcHlyaWdodCAoQykgMjAyMS0yMDIyIFpudW55IEdtYkgsIGh0dHBzOi8vem51bnkub3JnLwojIC0tCiMgVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKIyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9ncGwtMy4wLnR4dC4KIyAtLQoKcGFja2FnZSBLZXJuZWw6Okxhbmd1YWdlOjpodV9HZW5lcmFsQ2F0YWxvZzsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKdXNlIHV0Zjg7CgpzdWIgRGF0YSB7CiAgICBteSAkU2VsZiA9IHNoaWZ0OwoKICAgICMgVFQgVGVtcGxhdGU6IEtlcm5lbC9PdXRwdXQvSFRNTC9UZW1wbGF0ZXMvU3RhbmRhcmQvQUFBR2VuZXJhbENhdGFsb2cudHQKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Z1bmN0aW9uYWxpdHknfSA9ICdGdW5rY2lvbmFsaXTDoXMnOwoKICAgICMgVFQgVGVtcGxhdGU6IEtlcm5lbC9PdXRwdXQvSFRNTC9UZW1wbGF0ZXMvU3RhbmRhcmQvQWRtaW5HZW5lcmFsQ2F0YWxvZy50dAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnR2VuZXJhbCBDYXRhbG9nIE1hbmFnZW1lbnQnfSA9ICfDgWx0YWzDoW5vcyBrYXRhbMOzZ3VzIGtlemVsw6lzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0l0ZW1zIGluIENsYXNzJ30gPSAnRWxlbWVrIGF6IG9zenTDoWx5YmFuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VkaXQgSXRlbSd9ID0gJ0VsZW0gc3plcmtlc3p0w6lzZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgQ2xhc3MnfSA9ICdPc3p0w6FseSBob3p6w6FhZMOhc2EnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIEl0ZW0nfSA9ICdFbGVtIGhvenrDoWFkw6FzYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgQ2F0YWxvZyBJdGVtJ30gPSAnS2F0YWzDs2d1c2VsZW0gaG96esOhYWTDoXNhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBDYXRhbG9nIENsYXNzJ30gPSAnS2F0YWzDs2d1c29zenTDoWx5IGhvenrDoWFkw6FzYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDYXRhbG9nIENsYXNzJ30gPSAnS2F0YWzDs2d1c29zenTDoWx5JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VkaXQgQ2F0YWxvZyBJdGVtJ30gPSAnS2F0YWzDs2d1c2VsZW0gc3plcmtlc3p0w6lzZSc7CgogICAgIyBKUyBGaWxlOiB2YXIvaHR0cGQvaHRkb2NzL2pzL0lUU00uR2VuZXJhbENhdGFsb2cuanMKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dhcm5pbmcgaW5jaWRlbnQgc3RhdGUgY2FuIG5vdCBiZSBzZXQgdG8gaW52YWxpZC4nfSA9ICdBIGZpZ3llbG1lenRldMOpcyBpbmNpZGVuc8OhbGxhcG90b3QgbmVtIGxlaGV0IMOpcnbDqW55dGVsZW5yZSDDoWxsw610YW5pLic7CgogICAgIyBTeXNDb25maWcKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbW1lbnQgMid9ID0gJzIuIG1lZ2plZ3l6w6lzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NyZWF0ZSBhbmQgbWFuYWdlIHRoZSBHZW5lcmFsIENhdGFsb2cuJ30gPSAnQXogw6FsdGFsw6Fub3Mga2F0YWzDs2d1cyBsw6l0cmVob3rDoXNhIMOpcyBrZXplbMOpc2UuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZSB0aGUgZ2VuZXJhbCBjYXRhbG9nIGNvbW1lbnQgMi4nfSA9ICdNZWdoYXTDoXJvenphIGF6IMOhbHRhbMOhbm9zIGthdGFsw7NndXMgMi4gbWVnamVneXrDqXPDqXQuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZG1pbkdlbmVyYWxDYXRhbG9nIGNvbmZpZ3VyYXRpb24gaW4gdGhlIGFkbWluIGFyZWEuJ30gPQogICAgICAgICdFbMWRdMOpdHByb2dyYW0gbW9kdWwgcmVnaXN6dHLDoWNpw7MgYXogYWRtaW5pc3p0csOhY2nDs3MgdGVyw7xsZXRlbiBsw6l2xZEgw6FsdGFsw6Fub3Mga2F0YWzDs2d1cyBiZcOhbGzDrXTDoXNob3ouJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0dlbmVyYWwgQ2F0YWxvZyd9ID0gJ8OBbHRhbMOhbm9zIGthdGFsw7NndXMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFyYW1ldGVycyBmb3IgdGhlIGV4YW1wbGUgY29tbWVudCAyIG9mIHRoZSBnZW5lcmFsIGNhdGFsb2cgYXR0cmlidXRlcy4nfSA9CiAgICAgICAgJ1BhcmFtw6l0ZXJlayBheiDDoWx0YWzDoW5vcyBrYXRhbMOzZ3VzIGF0dHJpYsO6dHVtYWluYWsgMi4gcMOpbGRhIG1lZ2plZ3l6w6lzZWloZXouJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcmFtZXRlcnMgZm9yIHRoZSBleGFtcGxlIHBlcm1pc3Npb24gZ3JvdXBzIG9mIHRoZSBnZW5lcmFsIGNhdGFsb2cgYXR0cmlidXRlcy4nfSA9CiAgICAgICAgJ1BhcmFtw6l0ZXJlayBheiDDoWx0YWzDoW5vcyBrYXRhbMOzZ3VzIGF0dHJpYsO6dHVtYWluYWsgcMOpbGRhIGpvZ29zdWx0c8OhZyBjc29wb3J0amFpaG96Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQZXJtaXNzaW9uIEdyb3VwJ30gPSAnSm9nb3N1bHRzw6FnaSBjc29wb3J0JzsKCgogICAgcHVzaCBAeyAkU2VsZi0+e0phdmFTY3JpcHRTdHJpbmdzfSAvLyBbXSB9LCAoCiAgICAnQ2FuY2VsJywKICAgICdXYXJuaW5nJywKICAgICdXYXJuaW5nIGluY2lkZW50IHN0YXRlIGNhbiBub3QgYmUgc2V0IHRvIGludmFsaWQuJywKICAgICk7Cgp9CgoxOwo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAyMS0yMDIyIFpudW55IEdtYkgsIGh0dHBzOi8vem51bnkub3JnLwojIC0tCiMgVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKIyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9ncGwtMy4wLnR4dC4KIyAtLQoKcGFja2FnZSBLZXJuZWw6Okxhbmd1YWdlOjppZF9HZW5lcmFsQ2F0YWxvZzsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKdXNlIHV0Zjg7CgpzdWIgRGF0YSB7CiAgICBteSAkU2VsZiA9IHNoaWZ0OwoKICAgICMgVFQgVGVtcGxhdGU6IEtlcm5lbC9PdXRwdXQvSFRNTC9UZW1wbGF0ZXMvU3RhbmRhcmQvQUFBR2VuZXJhbENhdGFsb2cudHQKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Z1bmN0aW9uYWxpdHknfSA9ICdGdW5nc2lvbmFsaXRhcyc7CgogICAgIyBUVCBUZW1wbGF0ZTogS2VybmVsL091dHB1dC9IVE1ML1RlbXBsYXRlcy9TdGFuZGFyZC9BZG1pbkdlbmVyYWxDYXRhbG9nLnR0CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydHZW5lcmFsIENhdGFsb2cgTWFuYWdlbWVudCd9ID0gJ01hbmFqZW1lbiBLYXRhbG9nIFVtdW0nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSXRlbXMgaW4gQ2xhc3MnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRWRpdCBJdGVtJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBDbGFzcyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgSXRlbSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgQ2F0YWxvZyBJdGVtJ30gPSAnVGFtYmFoIEl0ZW0gS2F0YWxvZyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgQ2F0YWxvZyBDbGFzcyd9ID0gJ1RhbWJhaCBLZWxhcyBLYXRhbG9nJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NhdGFsb2cgQ2xhc3MnfSA9ICdLZWxhcyBLYXRhbG9nJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VkaXQgQ2F0YWxvZyBJdGVtJ30gPSAnJzsKCiAgICAjIEpTIEZpbGU6IHZhci9odHRwZC9odGRvY3MvanMvSVRTTS5HZW5lcmFsQ2F0YWxvZy5qcwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV2FybmluZyBpbmNpZGVudCBzdGF0ZSBjYW4gbm90IGJlIHNldCB0byBpbnZhbGlkLid9ID0gJyc7CgogICAgIyBTeXNDb25maWcKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbW1lbnQgMid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDcmVhdGUgYW5kIG1hbmFnZSB0aGUgR2VuZXJhbCBDYXRhbG9nLid9ID0gJ0J1YXQgZGFuIGtlbG9sYSBLYXRhbG9nIFVtdW0nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lIHRoZSBnZW5lcmFsIGNhdGFsb2cgY29tbWVudCAyLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgQWRtaW5HZW5lcmFsQ2F0YWxvZyBjb25maWd1cmF0aW9uIGluIHRoZSBhZG1pbiBhcmVhLid9ID0KICAgICAgICAnUmVnaXN0cmFzaSBtb2R1bCBmcm9udGVuZCB1bnR1ayBwZW5nYXR1cmFuIEFkbWluS2F0YWxvZ1VtdW0gZGkgYXJlYSBhZG1pbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnR2VuZXJhbCBDYXRhbG9nJ30gPSAnS2F0YWxvZyBVbXVtJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcmFtZXRlcnMgZm9yIHRoZSBleGFtcGxlIGNvbW1lbnQgMiBvZiB0aGUgZ2VuZXJhbCBjYXRhbG9nIGF0dHJpYnV0ZXMuJ30gPQogICAgICAgICdQYXJhbWV0ZXIgdW50dWsgMiBjb250b2gga29tZW50YXIgZGFyaSBhdHJpYnV0IGthdGFsb2cgdW11bS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFyYW1ldGVycyBmb3IgdGhlIGV4YW1wbGUgcGVybWlzc2lvbiBncm91cHMgb2YgdGhlIGdlbmVyYWwgY2F0YWxvZyBhdHRyaWJ1dGVzLid9ID0KICAgICAgICAnUGFyYW1ldGVyIHVudHVrIGdydXAgY29ub3RoIHBlcml6aW5hbiBkYXJpIGF0cmlidXQga2F0YWxvZyB1bXVtLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQZXJtaXNzaW9uIEdyb3VwJ30gPSAnJzsKCgogICAgcHVzaCBAeyAkU2VsZi0+e0phdmFTY3JpcHRTdHJpbmdzfSAvLyBbXSB9LCAoCiAgICAnQ2FuY2VsJywKICAgICdXYXJuaW5nJywKICAgICdXYXJuaW5nIGluY2lkZW50IHN0YXRlIGNhbiBub3QgYmUgc2V0IHRvIGludmFsaWQuJywKICAgICk7Cgp9CgoxOwo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAyMS0yMDIyIFpudW55IEdtYkgsIGh0dHBzOi8vem51bnkub3JnLwojIC0tCiMgVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKIyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9ncGwtMy4wLnR4dC4KIyAtLQoKcGFja2FnZSBLZXJuZWw6Okxhbmd1YWdlOjppdF9HZW5lcmFsQ2F0YWxvZzsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKdXNlIHV0Zjg7CgpzdWIgRGF0YSB7CiAgICBteSAkU2VsZiA9IHNoaWZ0OwoKICAgICMgVFQgVGVtcGxhdGU6IEtlcm5lbC9PdXRwdXQvSFRNTC9UZW1wbGF0ZXMvU3RhbmRhcmQvQUFBR2VuZXJhbENhdGFsb2cudHQKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Z1bmN0aW9uYWxpdHknfSA9ICdGdW56aW9uYWxpdMOgJzsKCiAgICAjIFRUIFRlbXBsYXRlOiBLZXJuZWwvT3V0cHV0L0hUTUwvVGVtcGxhdGVzL1N0YW5kYXJkL0FkbWluR2VuZXJhbENhdGFsb2cudHQKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0dlbmVyYWwgQ2F0YWxvZyBNYW5hZ2VtZW50J30gPSAnR2VzdGlvbmUgZGVsIENhdGFsb2dvIEdlbmVyYWxlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0l0ZW1zIGluIENsYXNzJ30gPSAnRWxlbWVudGkgbmVsbGEgQ2xhc3NlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VkaXQgSXRlbSd9ID0gJ01vZGlmaWNhIEVsZW1lbnRvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBDbGFzcyd9ID0gJ0FnZ2l1bmdpIENsYXNzZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgSXRlbSd9ID0gJ0FnZ2l1bmdpIEVsZW1lbnRvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBDYXRhbG9nIEl0ZW0nfSA9ICdBZ2dpdW5naSBFbGVtZW50byBhbCBDYXRhbG9nbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgQ2F0YWxvZyBDbGFzcyd9ID0gJ0FnZ2l1bmdpIENsYXNzZSBhbCBDYXRhbG9nbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDYXRhbG9nIENsYXNzJ30gPSAnQ2xhc3NlIGRpIENhdGFsb2dvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VkaXQgQ2F0YWxvZyBJdGVtJ30gPSAnTW9kaWZpY2EgZWxlbWVudG8gZGkgY2F0YWxvZ28nOwoKICAgICMgSlMgRmlsZTogdmFyL2h0dHBkL2h0ZG9jcy9qcy9JVFNNLkdlbmVyYWxDYXRhbG9nLmpzCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXYXJuaW5nIGluY2lkZW50IHN0YXRlIGNhbiBub3QgYmUgc2V0IHRvIGludmFsaWQuJ30gPSAnTG8gc3RhdG8gZGVsbFwnaW5jaWRlbnRlIGRpIGF2dmlzbyBub24gcHXDsiBlc3NlcmUgaW1wb3N0YXRvIHN1IG5vbiB2YWxpZG8uJzsKCiAgICAjIFN5c0NvbmZpZwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29tbWVudCAyJ30gPSAnQ29tbWVudG8gMic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDcmVhdGUgYW5kIG1hbmFnZSB0aGUgR2VuZXJhbCBDYXRhbG9nLid9ID0gJ0NyZWEgZSBnZXN0aXNjaSBpbCBDYXRhbG9nbyBHZW5lcmFsZS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lIHRoZSBnZW5lcmFsIGNhdGFsb2cgY29tbWVudCAyLid9ID0gJ0RlZmluaXNjaSBpbCBjb21tZW50byAyIGRlbCBjYXRhbG9nbyBnZW5lcmFsZS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFkbWluR2VuZXJhbENhdGFsb2cgY29uZmlndXJhdGlvbiBpbiB0aGUgYWRtaW4gYXJlYS4nfSA9CiAgICAgICAgJ01vZHVsbyBkaSByZWdpc3RyYXppb25lIHBlciBsYSBjb25maWd1cmF6aW9uZSBkaSBBZG1pbkdlbmVyYWxDYXRhbG9nIG5lbGxcJ2FyZWEgZGkgYWRtaW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0dlbmVyYWwgQ2F0YWxvZyd9ID0gJ0NhdGFsb2dvIEdlbmVyYWxlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcmFtZXRlcnMgZm9yIHRoZSBleGFtcGxlIGNvbW1lbnQgMiBvZiB0aGUgZ2VuZXJhbCBjYXRhbG9nIGF0dHJpYnV0ZXMuJ30gPQogICAgICAgICdQYXJhbWV0cmkgcGVyIGlsIGNvbW1lbnRvIGRpIGVzZW1waW8gMiBkZWdsaSBhdHRyaWJ1dGkgZGVsIGNhdGFsb2dvIGdlbmVyYWxlLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJhbWV0ZXJzIGZvciB0aGUgZXhhbXBsZSBwZXJtaXNzaW9uIGdyb3VwcyBvZiB0aGUgZ2VuZXJhbCBjYXRhbG9nIGF0dHJpYnV0ZXMuJ30gPQogICAgICAgICdQYXJhbWV0cmkgcGVyIGkgZ3J1cHBpIGRpIHBlcm1lc3NpIGRpIGVzZW1waW8gZGVnbGkgYXR0cmlidXRpIGRlbCBjYXRhbG9nbyBnZW5lcmFsZS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGVybWlzc2lvbiBHcm91cCd9ID0gJ0dydXBwbyBkaSBhdXRvcml6emF6aW9uaSc7CgoKICAgIHB1c2ggQHsgJFNlbGYtPntKYXZhU2NyaXB0U3RyaW5nc30gLy8gW10gfSwgKAogICAgJ0NhbmNlbCcsCiAgICAnV2FybmluZycsCiAgICAnV2FybmluZyBpbmNpZGVudCBzdGF0ZSBjYW4gbm90IGJlIHNldCB0byBpbnZhbGlkLicsCiAgICApOwoKfQoKMTsK
IyAtLQojIENvcHlyaWdodCAoQykgMjAyMS0yMDIyIFpudW55IEdtYkgsIGh0dHBzOi8vem51bnkub3JnLwojIC0tCiMgVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKIyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9ncGwtMy4wLnR4dC4KIyAtLQoKcGFja2FnZSBLZXJuZWw6Okxhbmd1YWdlOjpqYV9HZW5lcmFsQ2F0YWxvZzsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKdXNlIHV0Zjg7CgpzdWIgRGF0YSB7CiAgICBteSAkU2VsZiA9IHNoaWZ0OwoKICAgICMgVFQgVGVtcGxhdGU6IEtlcm5lbC9PdXRwdXQvSFRNTC9UZW1wbGF0ZXMvU3RhbmRhcmQvQUFBR2VuZXJhbENhdGFsb2cudHQKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Z1bmN0aW9uYWxpdHknfSA9ICfmqZ/og73mgKcnOwoKICAgICMgVFQgVGVtcGxhdGU6IEtlcm5lbC9PdXRwdXQvSFRNTC9UZW1wbGF0ZXMvU3RhbmRhcmQvQWRtaW5HZW5lcmFsQ2F0YWxvZy50dAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnR2VuZXJhbCBDYXRhbG9nIE1hbmFnZW1lbnQnfSA9ICfjgrjjgqfjg43jg6njg6vjg7vjgqvjgr/jg63jgrDnrqHnkIYnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSXRlbXMgaW4gQ2xhc3MnfSA9ICfjgq/jg6njgrnlhoXjga7jgqLjgqTjg4bjg6AnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRWRpdCBJdGVtJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBDbGFzcyd9ID0gJ+OCr+ODqeOCueOBrui/veWKoCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgSXRlbSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgQ2F0YWxvZyBJdGVtJ30gPSAn44Kr44K/44Ot44Kw6aCF55uu44KS6L+95YqgJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBDYXRhbG9nIENsYXNzJ30gPSAn44Kr44K/44Ot44Kw44Kv44Op44K544KS6L+95YqgJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NhdGFsb2cgQ2xhc3MnfSA9ICfjgqvjgr/jg63jgrDjgq/jg6njgrknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRWRpdCBDYXRhbG9nIEl0ZW0nfSA9ICfjgqvjgr/jg63jgrDjg7vjgqLjgqTjg4bjg6DjgpLkv67mraMnOwoKICAgICMgSlMgRmlsZTogdmFyL2h0dHBkL2h0ZG9jcy9qcy9JVFNNLkdlbmVyYWxDYXRhbG9nLmpzCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXYXJuaW5nIGluY2lkZW50IHN0YXRlIGNhbiBub3QgYmUgc2V0IHRvIGludmFsaWQuJ30gPSAnJzsKCiAgICAjIFN5c0NvbmZpZwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29tbWVudCAyJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NyZWF0ZSBhbmQgbWFuYWdlIHRoZSBHZW5lcmFsIENhdGFsb2cuJ30gPSAn44K444Oj44ON44Op44Or44O744Kr44K/44Ot44Kw44Gu5L2c5oiQ44Go566h55CGJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZSB0aGUgZ2VuZXJhbCBjYXRhbG9nIGNvbW1lbnQgMi4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFkbWluR2VuZXJhbENhdGFsb2cgY29uZmlndXJhdGlvbiBpbiB0aGUgYWRtaW4gYXJlYS4nfSA9CiAgICAgICAgJ+euoeeQhuOCqOODquOCouOBp+OBrkFkbWluR2VuZXJhbENhdGFsb2fjga7jg5Xjg63jg7Pjg4jjgqjjg7Pjg4njg6Ljgrjjg6Xjg7zjg6vjga7nmbvpjLInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnR2VuZXJhbCBDYXRhbG9nJ30gPSAn44K444Kn44ON44Op44Or44O744Kr44K/44Ot44KwJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcmFtZXRlcnMgZm9yIHRoZSBleGFtcGxlIGNvbW1lbnQgMiBvZiB0aGUgZ2VuZXJhbCBjYXRhbG9nIGF0dHJpYnV0ZXMuJ30gPQogICAgICAgICfjgrjjgqfjg43jg6njg6vjg7vjgqvjgr/jg63jgrDlsZ7mgKfjga7jgrPjg6Hjg7Pjg4jkvosgMuOAgOOBruioreWumuWApCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJhbWV0ZXJzIGZvciB0aGUgZXhhbXBsZSBwZXJtaXNzaW9uIGdyb3VwcyBvZiB0aGUgZ2VuZXJhbCBjYXRhbG9nIGF0dHJpYnV0ZXMuJ30gPQogICAgICAgICfjgrjjgqfjg43jg6njg6vjg7vjgqvjgr/jg63jgrDlsZ7mgKfjga7mqKnpmZDjgrDjg6vjg7zjg5fjgIDjga7oqK3lrprlgKQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGVybWlzc2lvbiBHcm91cCd9ID0gJ+aoqemZkOOCsOODq+ODvOODlyc7CgoKICAgIHB1c2ggQHsgJFNlbGYtPntKYXZhU2NyaXB0U3RyaW5nc30gLy8gW10gfSwgKAogICAgJ0NhbmNlbCcsCiAgICAnV2FybmluZycsCiAgICAnV2FybmluZyBpbmNpZGVudCBzdGF0ZSBjYW4gbm90IGJlIHNldCB0byBpbnZhbGlkLicsCiAgICApOwoKfQoKMTsK
IyAtLQojIENvcHlyaWdodCAoQykgMjAyMS0yMDIyIFpudW55IEdtYkgsIGh0dHBzOi8vem51bnkub3JnLwojIC0tCiMgVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKIyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9ncGwtMy4wLnR4dC4KIyAtLQoKcGFja2FnZSBLZXJuZWw6Okxhbmd1YWdlOjprb19HZW5lcmFsQ2F0YWxvZzsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKdXNlIHV0Zjg7CgpzdWIgRGF0YSB7CiAgICBteSAkU2VsZiA9IHNoaWZ0OwoKICAgICMgVFQgVGVtcGxhdGU6IEtlcm5lbC9PdXRwdXQvSFRNTC9UZW1wbGF0ZXMvU3RhbmRhcmQvQUFBR2VuZXJhbENhdGFsb2cudHQKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Z1bmN0aW9uYWxpdHknfSA9ICcnOwoKICAgICMgVFQgVGVtcGxhdGU6IEtlcm5lbC9PdXRwdXQvSFRNTC9UZW1wbGF0ZXMvU3RhbmRhcmQvQWRtaW5HZW5lcmFsQ2F0YWxvZy50dAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnR2VuZXJhbCBDYXRhbG9nIE1hbmFnZW1lbnQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSXRlbXMgaW4gQ2xhc3MnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRWRpdCBJdGVtJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBDbGFzcyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgSXRlbSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgQ2F0YWxvZyBJdGVtJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBDYXRhbG9nIENsYXNzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NhdGFsb2cgQ2xhc3MnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRWRpdCBDYXRhbG9nIEl0ZW0nfSA9ICcnOwoKICAgICMgSlMgRmlsZTogdmFyL2h0dHBkL2h0ZG9jcy9qcy9JVFNNLkdlbmVyYWxDYXRhbG9nLmpzCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXYXJuaW5nIGluY2lkZW50IHN0YXRlIGNhbiBub3QgYmUgc2V0IHRvIGludmFsaWQuJ30gPSAnJzsKCiAgICAjIFN5c0NvbmZpZwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29tbWVudCAyJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NyZWF0ZSBhbmQgbWFuYWdlIHRoZSBHZW5lcmFsIENhdGFsb2cuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZSB0aGUgZ2VuZXJhbCBjYXRhbG9nIGNvbW1lbnQgMi4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFkbWluR2VuZXJhbENhdGFsb2cgY29uZmlndXJhdGlvbiBpbiB0aGUgYWRtaW4gYXJlYS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydHZW5lcmFsIENhdGFsb2cnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFyYW1ldGVycyBmb3IgdGhlIGV4YW1wbGUgY29tbWVudCAyIG9mIHRoZSBnZW5lcmFsIGNhdGFsb2cgYXR0cmlidXRlcy4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJhbWV0ZXJzIGZvciB0aGUgZXhhbXBsZSBwZXJtaXNzaW9uIGdyb3VwcyBvZiB0aGUgZ2VuZXJhbCBjYXRhbG9nIGF0dHJpYnV0ZXMuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGVybWlzc2lvbiBHcm91cCd9ID0gJyc7CgoKICAgIHB1c2ggQHsgJFNlbGYtPntKYXZhU2NyaXB0U3RyaW5nc30gLy8gW10gfSwgKAogICAgJ0NhbmNlbCcsCiAgICAnV2FybmluZycsCiAgICAnV2FybmluZyBpbmNpZGVudCBzdGF0ZSBjYW4gbm90IGJlIHNldCB0byBpbnZhbGlkLicsCiAgICApOwoKfQoKMTsK
IyAtLQojIENvcHlyaWdodCAoQykgMjAyMS0yMDIyIFpudW55IEdtYkgsIGh0dHBzOi8vem51bnkub3JnLwojIC0tCiMgVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKIyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9ncGwtMy4wLnR4dC4KIyAtLQoKcGFja2FnZSBLZXJuZWw6Okxhbmd1YWdlOjpsdF9HZW5lcmFsQ2F0YWxvZzsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKdXNlIHV0Zjg7CgpzdWIgRGF0YSB7CiAgICBteSAkU2VsZiA9IHNoaWZ0OwoKICAgICMgVFQgVGVtcGxhdGU6IEtlcm5lbC9PdXRwdXQvSFRNTC9UZW1wbGF0ZXMvU3RhbmRhcmQvQUFBR2VuZXJhbENhdGFsb2cudHQKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Z1bmN0aW9uYWxpdHknfSA9ICdGdW5rY2lvbmFsdW1hcyc7CgogICAgIyBUVCBUZW1wbGF0ZTogS2VybmVsL091dHB1dC9IVE1ML1RlbXBsYXRlcy9TdGFuZGFyZC9BZG1pbkdlbmVyYWxDYXRhbG9nLnR0CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydHZW5lcmFsIENhdGFsb2cgTWFuYWdlbWVudCd9ID0gJ0JlbmRyb2pvIGthdGFsb2dvIHZhbGR5bWFzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0l0ZW1zIGluIENsYXNzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VkaXQgSXRlbSd9ID0gJ1JlZGFndW90aSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgQ2xhc3MnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIEl0ZW0nfSA9ICdQcmlkxJd0aSBkb2t1bWVudMSFJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBDYXRhbG9nIEl0ZW0nfSA9ICdQcmlkxJd0aSBrYXRhbG9nbyBvYmpla3TEhSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgQ2F0YWxvZyBDbGFzcyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDYXRhbG9nIENsYXNzJ30gPSAnS2F0YWxvZ28ga2xhc8SXJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VkaXQgQ2F0YWxvZyBJdGVtJ30gPSAnUmVkYWd1b3RpIGthdGFsb2dvIG9iamVrdMSFJzsKCiAgICAjIEpTIEZpbGU6IHZhci9odHRwZC9odGRvY3MvanMvSVRTTS5HZW5lcmFsQ2F0YWxvZy5qcwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV2FybmluZyBpbmNpZGVudCBzdGF0ZSBjYW4gbm90IGJlIHNldCB0byBpbnZhbGlkLid9ID0gJyc7CgogICAgIyBTeXNDb25maWcKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbW1lbnQgMid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDcmVhdGUgYW5kIG1hbmFnZSB0aGUgR2VuZXJhbCBDYXRhbG9nLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmUgdGhlIGdlbmVyYWwgY2F0YWxvZyBjb21tZW50IDIuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZG1pbkdlbmVyYWxDYXRhbG9nIGNvbmZpZ3VyYXRpb24gaW4gdGhlIGFkbWluIGFyZWEuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnR2VuZXJhbCBDYXRhbG9nJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcmFtZXRlcnMgZm9yIHRoZSBleGFtcGxlIGNvbW1lbnQgMiBvZiB0aGUgZ2VuZXJhbCBjYXRhbG9nIGF0dHJpYnV0ZXMuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFyYW1ldGVycyBmb3IgdGhlIGV4YW1wbGUgcGVybWlzc2lvbiBncm91cHMgb2YgdGhlIGdlbmVyYWwgY2F0YWxvZyBhdHRyaWJ1dGVzLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Blcm1pc3Npb24gR3JvdXAnfSA9ICcnOwoKCiAgICBwdXNoIEB7ICRTZWxmLT57SmF2YVNjcmlwdFN0cmluZ3N9IC8vIFtdIH0sICgKICAgICdDYW5jZWwnLAogICAgJ1dhcm5pbmcnLAogICAgJ1dhcm5pbmcgaW5jaWRlbnQgc3RhdGUgY2FuIG5vdCBiZSBzZXQgdG8gaW52YWxpZC4nLAogICAgKTsKCn0KCjE7Cg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAyMS0yMDIyIFpudW55IEdtYkgsIGh0dHBzOi8vem51bnkub3JnLwojIC0tCiMgVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKIyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9ncGwtMy4wLnR4dC4KIyAtLQoKcGFja2FnZSBLZXJuZWw6Okxhbmd1YWdlOjpsdl9HZW5lcmFsQ2F0YWxvZzsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKdXNlIHV0Zjg7CgpzdWIgRGF0YSB7CiAgICBteSAkU2VsZiA9IHNoaWZ0OwoKICAgICMgVFQgVGVtcGxhdGU6IEtlcm5lbC9PdXRwdXQvSFRNTC9UZW1wbGF0ZXMvU3RhbmRhcmQvQUFBR2VuZXJhbENhdGFsb2cudHQKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Z1bmN0aW9uYWxpdHknfSA9ICcnOwoKICAgICMgVFQgVGVtcGxhdGU6IEtlcm5lbC9PdXRwdXQvSFRNTC9UZW1wbGF0ZXMvU3RhbmRhcmQvQWRtaW5HZW5lcmFsQ2F0YWxvZy50dAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnR2VuZXJhbCBDYXRhbG9nIE1hbmFnZW1lbnQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSXRlbXMgaW4gQ2xhc3MnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRWRpdCBJdGVtJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBDbGFzcyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgSXRlbSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgQ2F0YWxvZyBJdGVtJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBDYXRhbG9nIENsYXNzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NhdGFsb2cgQ2xhc3MnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRWRpdCBDYXRhbG9nIEl0ZW0nfSA9ICcnOwoKICAgICMgSlMgRmlsZTogdmFyL2h0dHBkL2h0ZG9jcy9qcy9JVFNNLkdlbmVyYWxDYXRhbG9nLmpzCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXYXJuaW5nIGluY2lkZW50IHN0YXRlIGNhbiBub3QgYmUgc2V0IHRvIGludmFsaWQuJ30gPSAnJzsKCiAgICAjIFN5c0NvbmZpZwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29tbWVudCAyJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NyZWF0ZSBhbmQgbWFuYWdlIHRoZSBHZW5lcmFsIENhdGFsb2cuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZSB0aGUgZ2VuZXJhbCBjYXRhbG9nIGNvbW1lbnQgMi4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFkbWluR2VuZXJhbENhdGFsb2cgY29uZmlndXJhdGlvbiBpbiB0aGUgYWRtaW4gYXJlYS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydHZW5lcmFsIENhdGFsb2cnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFyYW1ldGVycyBmb3IgdGhlIGV4YW1wbGUgY29tbWVudCAyIG9mIHRoZSBnZW5lcmFsIGNhdGFsb2cgYXR0cmlidXRlcy4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJhbWV0ZXJzIGZvciB0aGUgZXhhbXBsZSBwZXJtaXNzaW9uIGdyb3VwcyBvZiB0aGUgZ2VuZXJhbCBjYXRhbG9nIGF0dHJpYnV0ZXMuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGVybWlzc2lvbiBHcm91cCd9ID0gJyc7CgoKICAgIHB1c2ggQHsgJFNlbGYtPntKYXZhU2NyaXB0U3RyaW5nc30gLy8gW10gfSwgKAogICAgJ0NhbmNlbCcsCiAgICAnV2FybmluZycsCiAgICAnV2FybmluZyBpbmNpZGVudCBzdGF0ZSBjYW4gbm90IGJlIHNldCB0byBpbnZhbGlkLicsCiAgICApOwoKfQoKMTsK
IyAtLQojIENvcHlyaWdodCAoQykgMjAyMS0yMDIyIFpudW55IEdtYkgsIGh0dHBzOi8vem51bnkub3JnLwojIC0tCiMgVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKIyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9ncGwtMy4wLnR4dC4KIyAtLQoKcGFja2FnZSBLZXJuZWw6Okxhbmd1YWdlOjpta19HZW5lcmFsQ2F0YWxvZzsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKdXNlIHV0Zjg7CgpzdWIgRGF0YSB7CiAgICBteSAkU2VsZiA9IHNoaWZ0OwoKICAgICMgVFQgVGVtcGxhdGU6IEtlcm5lbC9PdXRwdXQvSFRNTC9UZW1wbGF0ZXMvU3RhbmRhcmQvQUFBR2VuZXJhbENhdGFsb2cudHQKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Z1bmN0aW9uYWxpdHknfSA9ICfQpNGD0L3QutGG0LjQvtC90LDQu9C90L7RgdGCJzsKCiAgICAjIFRUIFRlbXBsYXRlOiBLZXJuZWwvT3V0cHV0L0hUTUwvVGVtcGxhdGVzL1N0YW5kYXJkL0FkbWluR2VuZXJhbENhdGFsb2cudHQKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0dlbmVyYWwgQ2F0YWxvZyBNYW5hZ2VtZW50J30gPSAn0J7Qv9GI0YIg0JrQsNGC0LDQu9C+0LMg0JzQtdC90LDRn9C80LXQvdGCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0l0ZW1zIGluIENsYXNzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VkaXQgSXRlbSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgQ2xhc3MnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIEl0ZW0nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIENhdGFsb2cgSXRlbSd9ID0gJ9CU0L7QtNCw0LTQuCDQmtCw0YLQsNC70L7QsyDRgdGC0LDQstC60LAnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIENhdGFsb2cgQ2xhc3MnfSA9ICfQlNC+0LTQsNC00Lgg0JrQsNGC0LDQu9C+0LMg0JrQu9Cw0YHQsCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDYXRhbG9nIENsYXNzJ30gPSAn0JrQsNGC0LDQu9C+0LMg0JrQu9Cw0YHQsCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFZGl0IENhdGFsb2cgSXRlbSd9ID0gJyc7CgogICAgIyBKUyBGaWxlOiB2YXIvaHR0cGQvaHRkb2NzL2pzL0lUU00uR2VuZXJhbENhdGFsb2cuanMKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dhcm5pbmcgaW5jaWRlbnQgc3RhdGUgY2FuIG5vdCBiZSBzZXQgdG8gaW52YWxpZC4nfSA9ICcnOwoKICAgICMgU3lzQ29uZmlnCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb21tZW50IDInfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3JlYXRlIGFuZCBtYW5hZ2UgdGhlIEdlbmVyYWwgQ2F0YWxvZy4nfSA9ICfQlNC+0LTQsNC00Lgg0Lgg0JzQtdC90LDRn9C40YDQsNGYINCz0L4g0J7Qv9GI0YLQuNC+0YIg0JrQsNGC0LDQu9C+0LMuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZSB0aGUgZ2VuZXJhbCBjYXRhbG9nIGNvbW1lbnQgMi4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFkbWluR2VuZXJhbENhdGFsb2cgY29uZmlndXJhdGlvbiBpbiB0aGUgYWRtaW4gYXJlYS4nfSA9CiAgICAgICAgJ9Cf0L7Qt9Cw0LTQuNC90YHQutC4INC80L7QtNGD0Lsg0YDQtdCz0LjRgdGC0YDQsNGG0LjRmNCwINC30LAg0JDQtNC80LjQvdCe0L/RiNGC0JrQsNGC0LDQu9C+0LMg0LrQvtC90YTQuNCz0YPRgNCw0YbQuNGY0LAg0LLQviDQsNC00LzQuNC9INC00LXQuy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnR2VuZXJhbCBDYXRhbG9nJ30gPSAn0J7Qv9GI0YIg0JrQsNGC0LDQu9C+0LMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFyYW1ldGVycyBmb3IgdGhlIGV4YW1wbGUgY29tbWVudCAyIG9mIHRoZSBnZW5lcmFsIGNhdGFsb2cgYXR0cmlidXRlcy4nfSA9CiAgICAgICAgJ9Cf0LDRgNCw0LzQtdGC0LDRgCDQt9CwINC/0YDQuNC80LXRgCDQutC+0LzQtdC90YLQsNGAIDIg0L7QtCDQvtC/0YjRgiDQutCw0YLQsNC70L7QsyDQsNGC0YDQuNCx0YPRgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJhbWV0ZXJzIGZvciB0aGUgZXhhbXBsZSBwZXJtaXNzaW9uIGdyb3VwcyBvZiB0aGUgZ2VuZXJhbCBjYXRhbG9nIGF0dHJpYnV0ZXMuJ30gPQogICAgICAgICfQn9Cw0YDQsNC80LXRgtGA0Lgg0LfQsCDQv9GA0LjQvNC10YAg0LTQvtC30LLQvtC70LjRgtC1INC30LAg0LPRgNGD0L/QuCDQvtC0INCz0LXQvdC10YDQsNC70L3QuCDQutCw0YLQsNC70L7QsyDQsNGC0YDQuNCx0YPRgtC4Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQZXJtaXNzaW9uIEdyb3VwJ30gPSAnJzsKCgogICAgcHVzaCBAeyAkU2VsZi0+e0phdmFTY3JpcHRTdHJpbmdzfSAvLyBbXSB9LCAoCiAgICAnQ2FuY2VsJywKICAgICdXYXJuaW5nJywKICAgICdXYXJuaW5nIGluY2lkZW50IHN0YXRlIGNhbiBub3QgYmUgc2V0IHRvIGludmFsaWQuJywKICAgICk7Cgp9CgoxOwo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAyMS0yMDIyIFpudW55IEdtYkgsIGh0dHBzOi8vem51bnkub3JnLwojIC0tCiMgVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKIyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9ncGwtMy4wLnR4dC4KIyAtLQoKcGFja2FnZSBLZXJuZWw6Okxhbmd1YWdlOjptc19HZW5lcmFsQ2F0YWxvZzsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKdXNlIHV0Zjg7CgpzdWIgRGF0YSB7CiAgICBteSAkU2VsZiA9IHNoaWZ0OwoKICAgICMgVFQgVGVtcGxhdGU6IEtlcm5lbC9PdXRwdXQvSFRNTC9UZW1wbGF0ZXMvU3RhbmRhcmQvQUFBR2VuZXJhbENhdGFsb2cudHQKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Z1bmN0aW9uYWxpdHknfSA9ICdGdW5nc2knOwoKICAgICMgVFQgVGVtcGxhdGU6IEtlcm5lbC9PdXRwdXQvSFRNTC9UZW1wbGF0ZXMvU3RhbmRhcmQvQWRtaW5HZW5lcmFsQ2F0YWxvZy50dAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnR2VuZXJhbCBDYXRhbG9nIE1hbmFnZW1lbnQnfSA9ICdLYXRhbG9nIFBlbmd1cnVzYW4gR2VuZXJhbCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJdGVtcyBpbiBDbGFzcyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFZGl0IEl0ZW0nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIENsYXNzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBJdGVtJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBDYXRhbG9nIEl0ZW0nfSA9ICdUYW1iYWhhbiBJdGVtIEthdGFsb2cnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIENhdGFsb2cgQ2xhc3MnfSA9ICdUYW1iYWggS2VsYXMgS2F0YWxvZyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDYXRhbG9nIENsYXNzJ30gPSAnS2VsYXMgS2F0YWxvZyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFZGl0IENhdGFsb2cgSXRlbSd9ID0gJyc7CgogICAgIyBKUyBGaWxlOiB2YXIvaHR0cGQvaHRkb2NzL2pzL0lUU00uR2VuZXJhbENhdGFsb2cuanMKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dhcm5pbmcgaW5jaWRlbnQgc3RhdGUgY2FuIG5vdCBiZSBzZXQgdG8gaW52YWxpZC4nfSA9ICcnOwoKICAgICMgU3lzQ29uZmlnCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb21tZW50IDInfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3JlYXRlIGFuZCBtYW5hZ2UgdGhlIEdlbmVyYWwgQ2F0YWxvZy4nfSA9ICdDaXB0YSBkYW4gdXJ1cyBLYXRhbG9nIEdlbmVyYWwuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZSB0aGUgZ2VuZXJhbCBjYXRhbG9nIGNvbW1lbnQgMi4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFkbWluR2VuZXJhbENhdGFsb2cgY29uZmlndXJhdGlvbiBpbiB0aGUgYWRtaW4gYXJlYS4nfSA9CiAgICAgICAgJ01vZHVsIHBlbmRhZnRhcmFuIG11a2EgaGFkYXBhbiBiYWdpIGtvbmZpZ3VyYXNpIEthdGFsb2dVbXVtVGFkYmlyIGRhbGFtIHJ1YW5nYW4gcGVudGFkYmlyLiAnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnR2VuZXJhbCBDYXRhbG9nJ30gPSAnS2F0YWxvZyBHZW5lcmFsJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcmFtZXRlcnMgZm9yIHRoZSBleGFtcGxlIGNvbW1lbnQgMiBvZiB0aGUgZ2VuZXJhbCBjYXRhbG9nIGF0dHJpYnV0ZXMuJ30gPQogICAgICAgICdQYXJhbWV0ZXIgdW50dWsgY29udG9oIGtvbWVuIDIgcGFkYSBjaXJpLWNpcmkga2F0YWxvZy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFyYW1ldGVycyBmb3IgdGhlIGV4YW1wbGUgcGVybWlzc2lvbiBncm91cHMgb2YgdGhlIGdlbmVyYWwgY2F0YWxvZyBhdHRyaWJ1dGVzLid9ID0KICAgICAgICAnUGFyYW1ldGVyIHVudHVrIGNvbnRvaCBrdW1wdWxhbiB5YW5nIGRpYmVuYXJrYW4gcGFkYSBjaXJpLWNpcmkga2F0YWxvZy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGVybWlzc2lvbiBHcm91cCd9ID0gJyc7CgoKICAgIHB1c2ggQHsgJFNlbGYtPntKYXZhU2NyaXB0U3RyaW5nc30gLy8gW10gfSwgKAogICAgJ0NhbmNlbCcsCiAgICAnV2FybmluZycsCiAgICAnV2FybmluZyBpbmNpZGVudCBzdGF0ZSBjYW4gbm90IGJlIHNldCB0byBpbnZhbGlkLicsCiAgICApOwoKfQoKMTsK
IyAtLQojIENvcHlyaWdodCAoQykgMjAyMS0yMDIyIFpudW55IEdtYkgsIGh0dHBzOi8vem51bnkub3JnLwojIC0tCiMgVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKIyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9ncGwtMy4wLnR4dC4KIyAtLQoKcGFja2FnZSBLZXJuZWw6Okxhbmd1YWdlOjpuYl9OT19HZW5lcmFsQ2F0YWxvZzsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKdXNlIHV0Zjg7CgpzdWIgRGF0YSB7CiAgICBteSAkU2VsZiA9IHNoaWZ0OwoKICAgICMgVFQgVGVtcGxhdGU6IEtlcm5lbC9PdXRwdXQvSFRNTC9UZW1wbGF0ZXMvU3RhbmRhcmQvQUFBR2VuZXJhbENhdGFsb2cudHQKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Z1bmN0aW9uYWxpdHknfSA9ICdGdW5rc2pvbmFsaXRldCc7CgogICAgIyBUVCBUZW1wbGF0ZTogS2VybmVsL091dHB1dC9IVE1ML1RlbXBsYXRlcy9TdGFuZGFyZC9BZG1pbkdlbmVyYWxDYXRhbG9nLnR0CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydHZW5lcmFsIENhdGFsb2cgTWFuYWdlbWVudCd9ID0gJ0FkbWluaXN0cmFzam9uIGF2IEdlbmVyZWxsIEthdGFsb2cnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSXRlbXMgaW4gQ2xhc3MnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRWRpdCBJdGVtJ30gPSAnRW5kcmUgb2JqZWt0JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBDbGFzcyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgSXRlbSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgQ2F0YWxvZyBJdGVtJ30gPSAnTGVnZyB0aWwga2F0YWxvZ29iamVrdCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgQ2F0YWxvZyBDbGFzcyd9ID0gJ0xlZ2cgdGlsIGthdGFsb2cta2xhc3NlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NhdGFsb2cgQ2xhc3MnfSA9ICdLYXRhbG9nLWtsYXNzZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFZGl0IENhdGFsb2cgSXRlbSd9ID0gJyc7CgogICAgIyBKUyBGaWxlOiB2YXIvaHR0cGQvaHRkb2NzL2pzL0lUU00uR2VuZXJhbENhdGFsb2cuanMKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dhcm5pbmcgaW5jaWRlbnQgc3RhdGUgY2FuIG5vdCBiZSBzZXQgdG8gaW52YWxpZC4nfSA9ICcnOwoKICAgICMgU3lzQ29uZmlnCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb21tZW50IDInfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3JlYXRlIGFuZCBtYW5hZ2UgdGhlIEdlbmVyYWwgQ2F0YWxvZy4nfSA9ICdPcHByZXR0IG9nIGFkbWluaXN0csOpciBkZW4gZ2VuZXJlbGxlIGthdGFsb2dlbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmUgdGhlIGdlbmVyYWwgY2F0YWxvZyBjb21tZW50IDIuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZG1pbkdlbmVyYWxDYXRhbG9nIGNvbmZpZ3VyYXRpb24gaW4gdGhlIGFkbWluIGFyZWEuJ30gPQogICAgICAgICdGb3JzaWRlbW9kdWwtcmVnaXN0cmVyaW5nIGZvciBBZG1pbkdlbmVyYWxDYXRhbG9nLW9wcHNldHQgaSBhZG1pbi1kZWxlbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnR2VuZXJhbCBDYXRhbG9nJ30gPSAnR2VuZXJlbGwgS2F0YWxvZyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJhbWV0ZXJzIGZvciB0aGUgZXhhbXBsZSBjb21tZW50IDIgb2YgdGhlIGdlbmVyYWwgY2F0YWxvZyBhdHRyaWJ1dGVzLid9ID0KICAgICAgICAnUGFyYW1ldHJlIGZvciBla3NlbXBlbGtvbW1lbnRhciAyIGkgYXR0cmlidXR0ZW5lIGZvciBnZW5lcmVsbCBrYXRhbG9nJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcmFtZXRlcnMgZm9yIHRoZSBleGFtcGxlIHBlcm1pc3Npb24gZ3JvdXBzIG9mIHRoZSBnZW5lcmFsIGNhdGFsb2cgYXR0cmlidXRlcy4nfSA9CiAgICAgICAgJ1BhcmFtZXRlcmUgZm9yIHRpbGdhbmdzZ3J1cHBlLWVrc2VtcGVsIGkgYXR0cmlidXR0ZW5lIGZvciBnZW5lcmVsbCBrYXRhbG9nLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQZXJtaXNzaW9uIEdyb3VwJ30gPSAnJzsKCgogICAgcHVzaCBAeyAkU2VsZi0+e0phdmFTY3JpcHRTdHJpbmdzfSAvLyBbXSB9LCAoCiAgICAnQ2FuY2VsJywKICAgICdXYXJuaW5nJywKICAgICdXYXJuaW5nIGluY2lkZW50IHN0YXRlIGNhbiBub3QgYmUgc2V0IHRvIGludmFsaWQuJywKICAgICk7Cgp9CgoxOwo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAyMS0yMDIyIFpudW55IEdtYkgsIGh0dHBzOi8vem51bnkub3JnLwojIC0tCiMgVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKIyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9ncGwtMy4wLnR4dC4KIyAtLQoKcGFja2FnZSBLZXJuZWw6Okxhbmd1YWdlOjpubF9HZW5lcmFsQ2F0YWxvZzsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKdXNlIHV0Zjg7CgpzdWIgRGF0YSB7CiAgICBteSAkU2VsZiA9IHNoaWZ0OwoKICAgICMgVFQgVGVtcGxhdGU6IEtlcm5lbC9PdXRwdXQvSFRNTC9UZW1wbGF0ZXMvU3RhbmRhcmQvQUFBR2VuZXJhbENhdGFsb2cudHQKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Z1bmN0aW9uYWxpdHknfSA9ICdGdW5jdGlvbmFsaXRlaXQnOwoKICAgICMgVFQgVGVtcGxhdGU6IEtlcm5lbC9PdXRwdXQvSFRNTC9UZW1wbGF0ZXMvU3RhbmRhcmQvQWRtaW5HZW5lcmFsQ2F0YWxvZy50dAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnR2VuZXJhbCBDYXRhbG9nIE1hbmFnZW1lbnQnfSA9ICdBbGdlbWVuZSBDYXRhbG9ndXMgYmVoZWVyJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0l0ZW1zIGluIENsYXNzJ30gPSAnSXRlbXMgaW4ga2xhc3NlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VkaXQgSXRlbSd9ID0gJ0l0ZW0gYmV3ZXJrZW4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIENsYXNzJ30gPSAnS2xhc3NlIHRvZXZvZWdlbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgSXRlbSd9ID0gJ0l0ZW0gdG9ldm9lZ2VuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBDYXRhbG9nIEl0ZW0nfSA9ICdDYXRhbG9ndXNpdGVtIHRvZXZvZWdlbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgQ2F0YWxvZyBDbGFzcyd9ID0gJ0NhdGFsb2d1c2tsYXNzZSB0b2V2b2VnZW4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2F0YWxvZyBDbGFzcyd9ID0gJ0NhdGFsb2d1c2tsYXNzZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFZGl0IENhdGFsb2cgSXRlbSd9ID0gJ0NhdGFsb2d1c2l0ZW0gYmV3ZXJrZW4nOwoKICAgICMgSlMgRmlsZTogdmFyL2h0dHBkL2h0ZG9jcy9qcy9JVFNNLkdlbmVyYWxDYXRhbG9nLmpzCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXYXJuaW5nIGluY2lkZW50IHN0YXRlIGNhbiBub3QgYmUgc2V0IHRvIGludmFsaWQuJ30gPSAnV2FhcnNjaHV3aW5nIGluY2lkZW50IHN0YXR1cyBrYW4gbmlldCB3b3JkZW4gaW5nZXN0ZWxkIG9wIG9uZ2VsZGlnLic7CgogICAgIyBTeXNDb25maWcKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbW1lbnQgMid9ID0gJ0NvbW1lbnRhYXIgMic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDcmVhdGUgYW5kIG1hbmFnZSB0aGUgR2VuZXJhbCBDYXRhbG9nLid9ID0gJ01hYWsgZW4gYmVoZWVyIGRlIEFsZ2VtZW5lIENhdGFsb2d1cy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lIHRoZSBnZW5lcmFsIGNhdGFsb2cgY29tbWVudCAyLid9ID0gJ0RlZmluaWVlciBkZSBhbGdlbWVuZSBjYXRhbG9ndXNjb21tZW50YWFyIDIuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZG1pbkdlbmVyYWxDYXRhbG9nIGNvbmZpZ3VyYXRpb24gaW4gdGhlIGFkbWluIGFyZWEuJ30gPQogICAgICAgICdGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aWUgdm9vciBkZSBBZG1pbkdlbmVyYWxDYXRhbG9nIGNvbmZpZ3VyYXRpZSBpbiBoZXQgYWRtaW4gZ2ViaWVkLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydHZW5lcmFsIENhdGFsb2cnfSA9ICdBbGdlbWVuZSBDYXRhbG9ndXMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFyYW1ldGVycyBmb3IgdGhlIGV4YW1wbGUgY29tbWVudCAyIG9mIHRoZSBnZW5lcmFsIGNhdGFsb2cgYXR0cmlidXRlcy4nfSA9CiAgICAgICAgJ1BhcmFtZXRlcnMgdm9vciBoZXQgdm9vcmJlZWxkY29tbWVudGFhciAyIHZhbiBkZSBhbGdlbWVuZSBjYXRhbG9ndXNrZW5tZXJrZW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcmFtZXRlcnMgZm9yIHRoZSBleGFtcGxlIHBlcm1pc3Npb24gZ3JvdXBzIG9mIHRoZSBnZW5lcmFsIGNhdGFsb2cgYXR0cmlidXRlcy4nfSA9CiAgICAgICAgJ1BhcmFtZXRlcnMgdm9vciBkZSB2b29yYmVlbGRtYWNodGlnaW5nc2dyb2VwZW4gdmFuIGRlIGFsZ2VtZW5lIGNhdGFsb2d1c2tlbm1lcmtlbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGVybWlzc2lvbiBHcm91cCd9ID0gJ1RvZXN0ZW1taW5nc2dyb2VwJzsKCgogICAgcHVzaCBAeyAkU2VsZi0+e0phdmFTY3JpcHRTdHJpbmdzfSAvLyBbXSB9LCAoCiAgICAnQ2FuY2VsJywKICAgICdXYXJuaW5nJywKICAgICdXYXJuaW5nIGluY2lkZW50IHN0YXRlIGNhbiBub3QgYmUgc2V0IHRvIGludmFsaWQuJywKICAgICk7Cgp9CgoxOwo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAyMS0yMDIyIFpudW55IEdtYkgsIGh0dHBzOi8vem51bnkub3JnLwojIC0tCiMgVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKIyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9ncGwtMy4wLnR4dC4KIyAtLQoKcGFja2FnZSBLZXJuZWw6Okxhbmd1YWdlOjpwbF9HZW5lcmFsQ2F0YWxvZzsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKdXNlIHV0Zjg7CgpzdWIgRGF0YSB7CiAgICBteSAkU2VsZiA9IHNoaWZ0OwoKICAgICMgVFQgVGVtcGxhdGU6IEtlcm5lbC9PdXRwdXQvSFRNTC9UZW1wbGF0ZXMvU3RhbmRhcmQvQUFBR2VuZXJhbENhdGFsb2cudHQKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Z1bmN0aW9uYWxpdHknfSA9ICdGdW5rY2pvbmFsbm/Fm8SHJzsKCiAgICAjIFRUIFRlbXBsYXRlOiBLZXJuZWwvT3V0cHV0L0hUTUwvVGVtcGxhdGVzL1N0YW5kYXJkL0FkbWluR2VuZXJhbENhdGFsb2cudHQKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0dlbmVyYWwgQ2F0YWxvZyBNYW5hZ2VtZW50J30gPSAnWmFyesSFZHphbmllIGthdGFsb2dpZW0gZ8WCw7N3bnltJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0l0ZW1zIGluIENsYXNzJ30gPSAnRWxlbWVudHkga2xhc3knOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRWRpdCBJdGVtJ30gPSAnRWR5dHVqIGVsZW1lbnQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIENsYXNzJ30gPSAnRG9kYWoga2xhc8SZJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBJdGVtJ30gPSAnRG9kYWogZWxlbWVudCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgQ2F0YWxvZyBJdGVtJ30gPSAnRG9kYWogZWxlbWVudCBrYXRhbG9ndSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgQ2F0YWxvZyBDbGFzcyd9ID0gJ0RvZGFqIGtsYXPEmSBrYXRhbG9ndSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDYXRhbG9nIENsYXNzJ30gPSAnS2xhc2Ega2F0YWxvZ3UnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRWRpdCBDYXRhbG9nIEl0ZW0nfSA9ICdFZHl0dWogZWxlbWVudCBrYXRhbG9ndSc7CgogICAgIyBKUyBGaWxlOiB2YXIvaHR0cGQvaHRkb2NzL2pzL0lUU00uR2VuZXJhbENhdGFsb2cuanMKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dhcm5pbmcgaW5jaWRlbnQgc3RhdGUgY2FuIG5vdCBiZSBzZXQgdG8gaW52YWxpZC4nfSA9ICdVd2FnYSBzdGFuIGluY3lkZW50IG5pZSBtb8W8ZSB6b3N0YcSHIHVzdGF3aW9ueSBqYWtvIG5pZXdhxbxueS4nOwoKICAgICMgU3lzQ29uZmlnCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb21tZW50IDInfSA9ICdLb21lbnRhcnogMic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDcmVhdGUgYW5kIG1hbmFnZSB0aGUgR2VuZXJhbCBDYXRhbG9nLid9ID0gJ1V0d8OzcnogaSB6YXJ6xIVkemFqIGthdGFsb2dpZW0gZ8WCw7N3bnltLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmUgdGhlIGdlbmVyYWwgY2F0YWxvZyBjb21tZW50IDIuJ30gPSAnRGVmaW5pdWoga29tZW50YXJ6IDIgZG8ga2F0YWxvZ3UgZ8WCw7N3bmVnbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgQWRtaW5HZW5lcmFsQ2F0YWxvZyBjb25maWd1cmF0aW9uIGluIHRoZSBhZG1pbiBhcmVhLid9ID0KICAgICAgICAnUmVqZXN0cmFjamEgbW9kdcWCdSBmcm9udGVuZCBkbyBrb25maWd1cmFjamkgbW9kdcWCdSBBZG1pbkdlbmVyYWxDYXRhbG9nIHcgcGFuZWx1IGFkbWluaXN0cmF0b3JhLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydHZW5lcmFsIENhdGFsb2cnfSA9ICdLYXRhbG9nIGfFgsOzd255JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcmFtZXRlcnMgZm9yIHRoZSBleGFtcGxlIGNvbW1lbnQgMiBvZiB0aGUgZ2VuZXJhbCBjYXRhbG9nIGF0dHJpYnV0ZXMuJ30gPQogICAgICAgICdQYXJhbWV0cnkgZG8gcHJ6eWvFgmFkb3dlZ28ga29tZW50YXJ6YSAyIGF0cnlidXTDs3cga2F0YWxvZ3UgZ2VuZXJhbG5lZ28uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcmFtZXRlcnMgZm9yIHRoZSBleGFtcGxlIHBlcm1pc3Npb24gZ3JvdXBzIG9mIHRoZSBnZW5lcmFsIGNhdGFsb2cgYXR0cmlidXRlcy4nfSA9CiAgICAgICAgJ1BhcmFtZXRyeSBkbGEgcHJ6eWvFgmFkb3d5Y2ggZ3J1cCB1cHJhd25pZcWEIGF0cnlidXTDs3cga2F0YWxvZ3UgZ8WCw7N3bmVnby4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGVybWlzc2lvbiBHcm91cCd9ID0gJ1VwcmF3bmllbmlhIGdydXAnOwoKCiAgICBwdXNoIEB7ICRTZWxmLT57SmF2YVNjcmlwdFN0cmluZ3N9IC8vIFtdIH0sICgKICAgICdDYW5jZWwnLAogICAgJ1dhcm5pbmcnLAogICAgJ1dhcm5pbmcgaW5jaWRlbnQgc3RhdGUgY2FuIG5vdCBiZSBzZXQgdG8gaW52YWxpZC4nLAogICAgKTsKCn0KCjE7Cg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAyMS0yMDIyIFpudW55IEdtYkgsIGh0dHBzOi8vem51bnkub3JnLwojIC0tCiMgVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKIyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9ncGwtMy4wLnR4dC4KIyAtLQoKcGFja2FnZSBLZXJuZWw6Okxhbmd1YWdlOjpwdF9CUl9HZW5lcmFsQ2F0YWxvZzsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKdXNlIHV0Zjg7CgpzdWIgRGF0YSB7CiAgICBteSAkU2VsZiA9IHNoaWZ0OwoKICAgICMgVFQgVGVtcGxhdGU6IEtlcm5lbC9PdXRwdXQvSFRNTC9UZW1wbGF0ZXMvU3RhbmRhcmQvQUFBR2VuZXJhbENhdGFsb2cudHQKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Z1bmN0aW9uYWxpdHknfSA9ICdGdW5jaW9uYWxpZGFkZSc7CgogICAgIyBUVCBUZW1wbGF0ZTogS2VybmVsL091dHB1dC9IVE1ML1RlbXBsYXRlcy9TdGFuZGFyZC9BZG1pbkdlbmVyYWxDYXRhbG9nLnR0CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydHZW5lcmFsIENhdGFsb2cgTWFuYWdlbWVudCd9ID0gJ0dlcmVuY2lhbWVudG8gZG8gQ2F0w6Fsb2dvIEdlcmFsJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0l0ZW1zIGluIENsYXNzJ30gPSAnSXRlbnMgbmEgQ2xhc3NlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VkaXQgSXRlbSd9ID0gJ0FsdGVyYXIgSXRlbSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgQ2xhc3MnfSA9ICdBZGljaW9uYXIgQ2xhc3NlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBJdGVtJ30gPSAnQWRpY2lvbmFyIEl0ZW0nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIENhdGFsb2cgSXRlbSd9ID0gJ0FkaWNpb25hciBJdGVtIGFvIENhdMOhbG9nbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgQ2F0YWxvZyBDbGFzcyd9ID0gJ0FkaWNpb25hciBDbGFzc2UgYW8gQ2F0w6Fsb2dvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NhdGFsb2cgQ2xhc3MnfSA9ICdDbGFzc2UgZG8gQ2F0w6Fsb2dvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VkaXQgQ2F0YWxvZyBJdGVtJ30gPSAnQWx0ZXJhciBJdGVtIGRvIENhdMOhbG9nbyc7CgogICAgIyBKUyBGaWxlOiB2YXIvaHR0cGQvaHRkb2NzL2pzL0lUU00uR2VuZXJhbENhdGFsb2cuanMKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dhcm5pbmcgaW5jaWRlbnQgc3RhdGUgY2FuIG5vdCBiZSBzZXQgdG8gaW52YWxpZC4nfSA9ICcnOwoKICAgICMgU3lzQ29uZmlnCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb21tZW50IDInfSA9ICdDb21lbnTDoXJpbyAyJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NyZWF0ZSBhbmQgbWFuYWdlIHRoZSBHZW5lcmFsIENhdGFsb2cuJ30gPSAnQ3JpYXIgZSBnZXJlbmNpYXIgbyBDYXTDoWxvZ28gR2VyYWwuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZSB0aGUgZ2VuZXJhbCBjYXRhbG9nIGNvbW1lbnQgMi4nfSA9ICdEZWZpbmEgbyBjb21lbnTDoXJpbyAyIGRvIGNhdMOhbG9nbyBnZW7DqXJpY28uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZG1pbkdlbmVyYWxDYXRhbG9nIGNvbmZpZ3VyYXRpb24gaW4gdGhlIGFkbWluIGFyZWEuJ30gPQogICAgICAgICdNw7NkdWxvIGRlIHJlZ2lzdG8gZGEgaW50ZXJmYWNlIHBhcmEgYSBjb25maWd1cmHDp8OjbyBBZG1pbkdlbmVyYWxDYXRhbG9nIG5hIMOhcmVhIGFkbWluaXN0cmF0aXZhLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydHZW5lcmFsIENhdGFsb2cnfSA9ICdDYXTDoWxvZ28gR2VyYWwnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFyYW1ldGVycyBmb3IgdGhlIGV4YW1wbGUgY29tbWVudCAyIG9mIHRoZSBnZW5lcmFsIGNhdGFsb2cgYXR0cmlidXRlcy4nfSA9CiAgICAgICAgJ1BhcsOibWV0cm9zIHBhcmEgbyBjb21lbnTDoXJpbyBkZSBleGVtcGxvIDIgZG9zIGF0cmlidXRvcyBkbyBjYXTDoWxvZ28gZ2VyYWwuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcmFtZXRlcnMgZm9yIHRoZSBleGFtcGxlIHBlcm1pc3Npb24gZ3JvdXBzIG9mIHRoZSBnZW5lcmFsIGNhdGFsb2cgYXR0cmlidXRlcy4nfSA9CiAgICAgICAgJ1BhcsOibWV0cm9zIGRvIGdydXBvcyBkZSBwZXJtaXNzw6NvIGRlIGV4ZW1wbG8gZG9zIGF0cmlidXRvcyBkbyBjYXTDoWxvZ28gZ2VyYWwuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Blcm1pc3Npb24gR3JvdXAnfSA9ICcnOwoKCiAgICBwdXNoIEB7ICRTZWxmLT57SmF2YVNjcmlwdFN0cmluZ3N9IC8vIFtdIH0sICgKICAgICdDYW5jZWwnLAogICAgJ1dhcm5pbmcnLAogICAgJ1dhcm5pbmcgaW5jaWRlbnQgc3RhdGUgY2FuIG5vdCBiZSBzZXQgdG8gaW52YWxpZC4nLAogICAgKTsKCn0KCjE7Cg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAyMS0yMDIyIFpudW55IEdtYkgsIGh0dHBzOi8vem51bnkub3JnLwojIC0tCiMgVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKIyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9ncGwtMy4wLnR4dC4KIyAtLQoKcGFja2FnZSBLZXJuZWw6Okxhbmd1YWdlOjpwdF9HZW5lcmFsQ2F0YWxvZzsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKdXNlIHV0Zjg7CgpzdWIgRGF0YSB7CiAgICBteSAkU2VsZiA9IHNoaWZ0OwoKICAgICMgVFQgVGVtcGxhdGU6IEtlcm5lbC9PdXRwdXQvSFRNTC9UZW1wbGF0ZXMvU3RhbmRhcmQvQUFBR2VuZXJhbENhdGFsb2cudHQKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Z1bmN0aW9uYWxpdHknfSA9ICdGdW5jaW9uYWxpZGFkZSc7CgogICAgIyBUVCBUZW1wbGF0ZTogS2VybmVsL091dHB1dC9IVE1ML1RlbXBsYXRlcy9TdGFuZGFyZC9BZG1pbkdlbmVyYWxDYXRhbG9nLnR0CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydHZW5lcmFsIENhdGFsb2cgTWFuYWdlbWVudCd9ID0gJ0dlc3TDo28gZG8gQ2F0w6Fsb2dvIEdlcmFsJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0l0ZW1zIGluIENsYXNzJ30gPSAnSXRlbXMgbmEgQ2xhc3NlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VkaXQgSXRlbSd9ID0gJ0VkaXRhciBJdGVtJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBDbGFzcyd9ID0gJ0FkaWNpb25hciBDbGFzc2UnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIEl0ZW0nfSA9ICdBZGljaW9uYXIgSXRlbSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgQ2F0YWxvZyBJdGVtJ30gPSAnQWRpY2lvbmFyIEl0ZW0gYW8gQ2F0w6Fsb2dvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBDYXRhbG9nIENsYXNzJ30gPSAnQWRpY2lvbmFyIENsYXNzZSBhbyBDYXTDoWxvZ28nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2F0YWxvZyBDbGFzcyd9ID0gJ0NsYXNzZSBkbyBDYXTDoWxvZ28nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRWRpdCBDYXRhbG9nIEl0ZW0nfSA9ICdFZGl0YXIgSXRlbSBkbyBDYXTDoWxvZ28nOwoKICAgICMgSlMgRmlsZTogdmFyL2h0dHBkL2h0ZG9jcy9qcy9JVFNNLkdlbmVyYWxDYXRhbG9nLmpzCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXYXJuaW5nIGluY2lkZW50IHN0YXRlIGNhbiBub3QgYmUgc2V0IHRvIGludmFsaWQuJ30gPSAnJzsKCiAgICAjIFN5c0NvbmZpZwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29tbWVudCAyJ30gPSAnQ29tZW50w6FyaW8gMic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDcmVhdGUgYW5kIG1hbmFnZSB0aGUgR2VuZXJhbCBDYXRhbG9nLid9ID0gJ0NyaWFyIGUgZ2VyaXIgbyBDYXTDoWxvZ28gR2VyYWwuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZSB0aGUgZ2VuZXJhbCBjYXRhbG9nIGNvbW1lbnQgMi4nfSA9ICdEZWZpbmlyIG8gQ2F0w6Fsb2dvIEdlcmFsIGNvbWVudMOhcmlvIDIuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZG1pbkdlbmVyYWxDYXRhbG9nIGNvbmZpZ3VyYXRpb24gaW4gdGhlIGFkbWluIGFyZWEuJ30gPQogICAgICAgICdNw7NkdWxvIGRlIHJlZ2lzdG8gZGEgaW50ZXJmYWNlIHBhcmEgYSBjb25maWd1cmHDp8OjbyBBZG1pbkdlbmVyYWxDYXRhbG9nIG5hIMOhcmVhIGFkbWluaXN0cmF0aXZhLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydHZW5lcmFsIENhdGFsb2cnfSA9ICdDYXTDoWxvZ28gR2VyYWwnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFyYW1ldGVycyBmb3IgdGhlIGV4YW1wbGUgY29tbWVudCAyIG9mIHRoZSBnZW5lcmFsIGNhdGFsb2cgYXR0cmlidXRlcy4nfSA9CiAgICAgICAgJ1BhcsOibWV0cm9zIHBhcmEgbyBjb21lbnTDoXJpbyBkZSBleGVtcGxvIDIgZG9zIGF0cmlidXRvcyBkbyBjYXTDoWxvZ28gZ2VyYWwuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcmFtZXRlcnMgZm9yIHRoZSBleGFtcGxlIHBlcm1pc3Npb24gZ3JvdXBzIG9mIHRoZSBnZW5lcmFsIGNhdGFsb2cgYXR0cmlidXRlcy4nfSA9CiAgICAgICAgJ1BhcsOibWV0cm9zIHBhcmEgb3MgZ3J1cG9zIGRlIHBlcm1pc3PDo28gZGUgZXhlbXBsbyBkb3MgYXRyaWJ1dG9zIGRvIGNhdMOhbG9nbyBnZXJhbC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGVybWlzc2lvbiBHcm91cCd9ID0gJyc7CgoKICAgIHB1c2ggQHsgJFNlbGYtPntKYXZhU2NyaXB0U3RyaW5nc30gLy8gW10gfSwgKAogICAgJ0NhbmNlbCcsCiAgICAnV2FybmluZycsCiAgICAnV2FybmluZyBpbmNpZGVudCBzdGF0ZSBjYW4gbm90IGJlIHNldCB0byBpbnZhbGlkLicsCiAgICApOwoKfQoKMTsK
IyAtLQojIENvcHlyaWdodCAoQykgMjAyMS0yMDIyIFpudW55IEdtYkgsIGh0dHBzOi8vem51bnkub3JnLwojIC0tCiMgVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKIyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9ncGwtMy4wLnR4dC4KIyAtLQoKcGFja2FnZSBLZXJuZWw6Okxhbmd1YWdlOjpyb19HZW5lcmFsQ2F0YWxvZzsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKdXNlIHV0Zjg7CgpzdWIgRGF0YSB7CiAgICBteSAkU2VsZiA9IHNoaWZ0OwoKICAgICMgVFQgVGVtcGxhdGU6IEtlcm5lbC9PdXRwdXQvSFRNTC9UZW1wbGF0ZXMvU3RhbmRhcmQvQUFBR2VuZXJhbENhdGFsb2cudHQKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Z1bmN0aW9uYWxpdHknfSA9ICdGdW5jdGlvbmFsaXRhdGUnOwoKICAgICMgVFQgVGVtcGxhdGU6IEtlcm5lbC9PdXRwdXQvSFRNTC9UZW1wbGF0ZXMvU3RhbmRhcmQvQWRtaW5HZW5lcmFsQ2F0YWxvZy50dAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnR2VuZXJhbCBDYXRhbG9nIE1hbmFnZW1lbnQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSXRlbXMgaW4gQ2xhc3MnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRWRpdCBJdGVtJ30gPSAnRWRpdGFyZSBlbGVtZW50JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBDbGFzcyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgSXRlbSd9ID0gJ0FkYXVnxIMgZWxlbWVudCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgQ2F0YWxvZyBJdGVtJ30gPSAnQWRhdWdhIGFydGljb2wgaW4gY2F0YWxvZyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgQ2F0YWxvZyBDbGFzcyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDYXRhbG9nIENsYXNzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VkaXQgQ2F0YWxvZyBJdGVtJ30gPSAnJzsKCiAgICAjIEpTIEZpbGU6IHZhci9odHRwZC9odGRvY3MvanMvSVRTTS5HZW5lcmFsQ2F0YWxvZy5qcwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV2FybmluZyBpbmNpZGVudCBzdGF0ZSBjYW4gbm90IGJlIHNldCB0byBpbnZhbGlkLid9ID0gJyc7CgogICAgIyBTeXNDb25maWcKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbW1lbnQgMid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDcmVhdGUgYW5kIG1hbmFnZSB0aGUgR2VuZXJhbCBDYXRhbG9nLid9ID0gJ0NyZWF6YSBzaSBhZG1pbmlzdHJlYXphIENhdGFsb2d1bCBHZW5lcmFsLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmUgdGhlIGdlbmVyYWwgY2F0YWxvZyBjb21tZW50IDIuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZG1pbkdlbmVyYWxDYXRhbG9nIGNvbmZpZ3VyYXRpb24gaW4gdGhlIGFkbWluIGFyZWEuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnR2VuZXJhbCBDYXRhbG9nJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcmFtZXRlcnMgZm9yIHRoZSBleGFtcGxlIGNvbW1lbnQgMiBvZiB0aGUgZ2VuZXJhbCBjYXRhbG9nIGF0dHJpYnV0ZXMuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFyYW1ldGVycyBmb3IgdGhlIGV4YW1wbGUgcGVybWlzc2lvbiBncm91cHMgb2YgdGhlIGdlbmVyYWwgY2F0YWxvZyBhdHRyaWJ1dGVzLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Blcm1pc3Npb24gR3JvdXAnfSA9ICcnOwoKCiAgICBwdXNoIEB7ICRTZWxmLT57SmF2YVNjcmlwdFN0cmluZ3N9IC8vIFtdIH0sICgKICAgICdDYW5jZWwnLAogICAgJ1dhcm5pbmcnLAogICAgJ1dhcm5pbmcgaW5jaWRlbnQgc3RhdGUgY2FuIG5vdCBiZSBzZXQgdG8gaW52YWxpZC4nLAogICAgKTsKCn0KCjE7Cg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAyMS0yMDIyIFpudW55IEdtYkgsIGh0dHBzOi8vem51bnkub3JnLwojIC0tCiMgVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKIyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9ncGwtMy4wLnR4dC4KIyAtLQoKcGFja2FnZSBLZXJuZWw6Okxhbmd1YWdlOjpydV9HZW5lcmFsQ2F0YWxvZzsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKdXNlIHV0Zjg7CgpzdWIgRGF0YSB7CiAgICBteSAkU2VsZiA9IHNoaWZ0OwoKICAgICMgVFQgVGVtcGxhdGU6IEtlcm5lbC9PdXRwdXQvSFRNTC9UZW1wbGF0ZXMvU3RhbmRhcmQvQUFBR2VuZXJhbENhdGFsb2cudHQKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Z1bmN0aW9uYWxpdHknfSA9ICfQpNGD0L3QutGG0LjQvtC90LDQu9GM0L3QvtGB0YLRjCc7CgogICAgIyBUVCBUZW1wbGF0ZTogS2VybmVsL091dHB1dC9IVE1ML1RlbXBsYXRlcy9TdGFuZGFyZC9BZG1pbkdlbmVyYWxDYXRhbG9nLnR0CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydHZW5lcmFsIENhdGFsb2cgTWFuYWdlbWVudCd9ID0gJ9Cj0L/RgNCw0LLQu9C10L3QuNC1INCe0LHRidC40Lwg0LrQsNGC0LDQu9C+0LPQvtC8JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0l0ZW1zIGluIENsYXNzJ30gPSAn0K3Qu9C10LzQtdC90YLRiyDQsiDQutC70LDRgdGB0LUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRWRpdCBJdGVtJ30gPSAn0JjQt9C80LXQvdC40YLRjCDRjdC70LXQvNC10L3Rgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgQ2xhc3MnfSA9ICfQlNC+0LHQsNCy0LjRgtGMINC60LvQsNGB0YEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIEl0ZW0nfSA9ICfQlNC+0LHQsNCy0LjRgtGMINGN0LvQtdC80LXQvdGCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBDYXRhbG9nIEl0ZW0nfSA9ICfQlNC+0LHQsNCy0LvQtdC90LjQtSDRjdC70LXQvNC10L3RgtCwINC60LDRgtCw0LvQvtCz0LAnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIENhdGFsb2cgQ2xhc3MnfSA9ICfQlNC+0LHQsNCy0LvQtdC90LjQtSDQutC70LDRgdGB0LAg0LrQsNGC0LDQu9C+0LPQsCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDYXRhbG9nIENsYXNzJ30gPSAn0JrQu9Cw0YHRgSDQutCw0YLQsNC70L7Qs9CwJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VkaXQgQ2F0YWxvZyBJdGVtJ30gPSAn0J/RgNCw0LLQutCwINGN0LvQtdC80LXQvdGC0LAg0LrQsNGC0LDQu9C+0LPQsCc7CgogICAgIyBKUyBGaWxlOiB2YXIvaHR0cGQvaHRkb2NzL2pzL0lUU00uR2VuZXJhbENhdGFsb2cuanMKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dhcm5pbmcgaW5jaWRlbnQgc3RhdGUgY2FuIG5vdCBiZSBzZXQgdG8gaW52YWxpZC4nfSA9ICcnOwoKICAgICMgU3lzQ29uZmlnCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb21tZW50IDInfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3JlYXRlIGFuZCBtYW5hZ2UgdGhlIEdlbmVyYWwgQ2F0YWxvZy4nfSA9ICfQodC+0LfQtNCw0L3QuNC1INC4INGD0L/RgNCw0LLQu9C10L3QuNC1INCe0LHRidC40Lwg0LrQsNGC0LDQu9C+0LPQvtC8JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZSB0aGUgZ2VuZXJhbCBjYXRhbG9nIGNvbW1lbnQgMi4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFkbWluR2VuZXJhbENhdGFsb2cgY29uZmlndXJhdGlvbiBpbiB0aGUgYWRtaW4gYXJlYS4nfSA9CiAgICAgICAgJ01vZHVsZSByZWdpc3RyYXRpb24g0LTQu9GPINC60L7QvdGE0LjQs9GD0YDQsNGG0LjQuCBBZG1pbkdlbmVyYWxDYXRhbG9nINCyINC/0LDQvdC10LvQuCDQsNC00LzQuNC90LjRgdGC0YDQsNGC0L7RgNCwLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydHZW5lcmFsIENhdGFsb2cnfSA9ICfQntCx0YnQuNC5INC60LDRgtCw0LvQvtCzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcmFtZXRlcnMgZm9yIHRoZSBleGFtcGxlIGNvbW1lbnQgMiBvZiB0aGUgZ2VuZXJhbCBjYXRhbG9nIGF0dHJpYnV0ZXMuJ30gPQogICAgICAgICfQlNC+0LHQsNCy0LvQtdC90LjQtSDQtNC+0L/QvtC70L3QuNGC0LXQu9GM0L3QvtCz0L4g0LrQvtC80LzQtdC90YLQsNGA0LjRjyDQuiDQsNGC0YDQuNCx0YPRgtCw0Lwg0J7QsdGJ0LXQs9C+INC60LDRgtCw0LvQvtCz0LAnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFyYW1ldGVycyBmb3IgdGhlIGV4YW1wbGUgcGVybWlzc2lvbiBncm91cHMgb2YgdGhlIGdlbmVyYWwgY2F0YWxvZyBhdHRyaWJ1dGVzLid9ID0KICAgICAgICAn0J/QsNGA0LDQvNC10YLRgNGLINC00LvRjyDQv9GA0LjQvNC10YDQvdGL0YUg0LPRgNGD0L/Qv9C+0LLRi9GFINC/0YDQsNCyINC00LvRjyDQsNGC0YDQuNCx0YPRgtC+0LIg0J7QsdGJ0LXQs9C+INC60LDRgtCw0LvQvtCz0LAnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGVybWlzc2lvbiBHcm91cCd9ID0gJyc7CgoKICAgIHB1c2ggQHsgJFNlbGYtPntKYXZhU2NyaXB0U3RyaW5nc30gLy8gW10gfSwgKAogICAgJ0NhbmNlbCcsCiAgICAnV2FybmluZycsCiAgICAnV2FybmluZyBpbmNpZGVudCBzdGF0ZSBjYW4gbm90IGJlIHNldCB0byBpbnZhbGlkLicsCiAgICApOwoKfQoKMTsK
IyAtLQojIENvcHlyaWdodCAoQykgMjAyMS0yMDIyIFpudW55IEdtYkgsIGh0dHBzOi8vem51bnkub3JnLwojIC0tCiMgVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKIyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9ncGwtMy4wLnR4dC4KIyAtLQoKcGFja2FnZSBLZXJuZWw6Okxhbmd1YWdlOjpza19TS19HZW5lcmFsQ2F0YWxvZzsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKdXNlIHV0Zjg7CgpzdWIgRGF0YSB7CiAgICBteSAkU2VsZiA9IHNoaWZ0OwoKICAgICMgVFQgVGVtcGxhdGU6IEtlcm5lbC9PdXRwdXQvSFRNTC9UZW1wbGF0ZXMvU3RhbmRhcmQvQUFBR2VuZXJhbENhdGFsb2cudHQKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Z1bmN0aW9uYWxpdHknfSA9ICcnOwoKICAgICMgVFQgVGVtcGxhdGU6IEtlcm5lbC9PdXRwdXQvSFRNTC9UZW1wbGF0ZXMvU3RhbmRhcmQvQWRtaW5HZW5lcmFsQ2F0YWxvZy50dAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnR2VuZXJhbCBDYXRhbG9nIE1hbmFnZW1lbnQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSXRlbXMgaW4gQ2xhc3MnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRWRpdCBJdGVtJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBDbGFzcyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgSXRlbSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgQ2F0YWxvZyBJdGVtJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBDYXRhbG9nIENsYXNzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NhdGFsb2cgQ2xhc3MnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRWRpdCBDYXRhbG9nIEl0ZW0nfSA9ICcnOwoKICAgICMgSlMgRmlsZTogdmFyL2h0dHBkL2h0ZG9jcy9qcy9JVFNNLkdlbmVyYWxDYXRhbG9nLmpzCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXYXJuaW5nIGluY2lkZW50IHN0YXRlIGNhbiBub3QgYmUgc2V0IHRvIGludmFsaWQuJ30gPSAnJzsKCiAgICAjIFN5c0NvbmZpZwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29tbWVudCAyJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NyZWF0ZSBhbmQgbWFuYWdlIHRoZSBHZW5lcmFsIENhdGFsb2cuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZSB0aGUgZ2VuZXJhbCBjYXRhbG9nIGNvbW1lbnQgMi4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFkbWluR2VuZXJhbENhdGFsb2cgY29uZmlndXJhdGlvbiBpbiB0aGUgYWRtaW4gYXJlYS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydHZW5lcmFsIENhdGFsb2cnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFyYW1ldGVycyBmb3IgdGhlIGV4YW1wbGUgY29tbWVudCAyIG9mIHRoZSBnZW5lcmFsIGNhdGFsb2cgYXR0cmlidXRlcy4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJhbWV0ZXJzIGZvciB0aGUgZXhhbXBsZSBwZXJtaXNzaW9uIGdyb3VwcyBvZiB0aGUgZ2VuZXJhbCBjYXRhbG9nIGF0dHJpYnV0ZXMuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGVybWlzc2lvbiBHcm91cCd9ID0gJyc7CgoKICAgIHB1c2ggQHsgJFNlbGYtPntKYXZhU2NyaXB0U3RyaW5nc30gLy8gW10gfSwgKAogICAgJ0NhbmNlbCcsCiAgICAnV2FybmluZycsCiAgICAnV2FybmluZyBpbmNpZGVudCBzdGF0ZSBjYW4gbm90IGJlIHNldCB0byBpbnZhbGlkLicsCiAgICApOwoKfQoKMTsK
IyAtLQojIENvcHlyaWdodCAoQykgMjAyMS0yMDIyIFpudW55IEdtYkgsIGh0dHBzOi8vem51bnkub3JnLwojIC0tCiMgVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKIyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9ncGwtMy4wLnR4dC4KIyAtLQoKcGFja2FnZSBLZXJuZWw6Okxhbmd1YWdlOjpzbF9HZW5lcmFsQ2F0YWxvZzsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKdXNlIHV0Zjg7CgpzdWIgRGF0YSB7CiAgICBteSAkU2VsZiA9IHNoaWZ0OwoKICAgICMgVFQgVGVtcGxhdGU6IEtlcm5lbC9PdXRwdXQvSFRNTC9UZW1wbGF0ZXMvU3RhbmRhcmQvQUFBR2VuZXJhbENhdGFsb2cudHQKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Z1bmN0aW9uYWxpdHknfSA9ICcnOwoKICAgICMgVFQgVGVtcGxhdGU6IEtlcm5lbC9PdXRwdXQvSFRNTC9UZW1wbGF0ZXMvU3RhbmRhcmQvQWRtaW5HZW5lcmFsQ2F0YWxvZy50dAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnR2VuZXJhbCBDYXRhbG9nIE1hbmFnZW1lbnQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSXRlbXMgaW4gQ2xhc3MnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRWRpdCBJdGVtJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBDbGFzcyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgSXRlbSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgQ2F0YWxvZyBJdGVtJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBDYXRhbG9nIENsYXNzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NhdGFsb2cgQ2xhc3MnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRWRpdCBDYXRhbG9nIEl0ZW0nfSA9ICcnOwoKICAgICMgSlMgRmlsZTogdmFyL2h0dHBkL2h0ZG9jcy9qcy9JVFNNLkdlbmVyYWxDYXRhbG9nLmpzCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXYXJuaW5nIGluY2lkZW50IHN0YXRlIGNhbiBub3QgYmUgc2V0IHRvIGludmFsaWQuJ30gPSAnJzsKCiAgICAjIFN5c0NvbmZpZwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29tbWVudCAyJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NyZWF0ZSBhbmQgbWFuYWdlIHRoZSBHZW5lcmFsIENhdGFsb2cuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZSB0aGUgZ2VuZXJhbCBjYXRhbG9nIGNvbW1lbnQgMi4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFkbWluR2VuZXJhbENhdGFsb2cgY29uZmlndXJhdGlvbiBpbiB0aGUgYWRtaW4gYXJlYS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydHZW5lcmFsIENhdGFsb2cnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFyYW1ldGVycyBmb3IgdGhlIGV4YW1wbGUgY29tbWVudCAyIG9mIHRoZSBnZW5lcmFsIGNhdGFsb2cgYXR0cmlidXRlcy4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJhbWV0ZXJzIGZvciB0aGUgZXhhbXBsZSBwZXJtaXNzaW9uIGdyb3VwcyBvZiB0aGUgZ2VuZXJhbCBjYXRhbG9nIGF0dHJpYnV0ZXMuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGVybWlzc2lvbiBHcm91cCd9ID0gJyc7CgoKICAgIHB1c2ggQHsgJFNlbGYtPntKYXZhU2NyaXB0U3RyaW5nc30gLy8gW10gfSwgKAogICAgJ0NhbmNlbCcsCiAgICAnV2FybmluZycsCiAgICAnV2FybmluZyBpbmNpZGVudCBzdGF0ZSBjYW4gbm90IGJlIHNldCB0byBpbnZhbGlkLicsCiAgICApOwoKfQoKMTsK
IyAtLQojIENvcHlyaWdodCAoQykgMjAyMS0yMDIyIFpudW55IEdtYkgsIGh0dHBzOi8vem51bnkub3JnLwojIC0tCiMgVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKIyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9ncGwtMy4wLnR4dC4KIyAtLQoKcGFja2FnZSBLZXJuZWw6Okxhbmd1YWdlOjpzcl9DeXJsX0dlbmVyYWxDYXRhbG9nOwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwp1c2UgdXRmODsKCnN1YiBEYXRhIHsKICAgIG15ICRTZWxmID0gc2hpZnQ7CgogICAgIyBUVCBUZW1wbGF0ZTogS2VybmVsL091dHB1dC9IVE1ML1RlbXBsYXRlcy9TdGFuZGFyZC9BQUFHZW5lcmFsQ2F0YWxvZy50dAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnVuY3Rpb25hbGl0eSd9ID0gJ9Ck0YPQvdC60YbQuNC+0L3QsNC70L3QvtGB0YInOwoKICAgICMgVFQgVGVtcGxhdGU6IEtlcm5lbC9PdXRwdXQvSFRNTC9UZW1wbGF0ZXMvU3RhbmRhcmQvQWRtaW5HZW5lcmFsQ2F0YWxvZy50dAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnR2VuZXJhbCBDYXRhbG9nIE1hbmFnZW1lbnQnfSA9ICfQo9C/0YDQsNCy0ZnQsNGa0LUg0J7Qv9GI0YLQuNC8INC60LDRgtCw0LvQvtCz0L7QvCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJdGVtcyBpbiBDbGFzcyd9ID0gJ9Ch0YLQsNCy0LrQtSDRgyDQutC70LDRgdC4JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VkaXQgSXRlbSd9ID0gJ9Cj0YDQtdC00Lgg0YHRgtCw0LLQutGDJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBDbGFzcyd9ID0gJ9CU0L7QtNCw0Zgg0LrQu9Cw0YHRgyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgSXRlbSd9ID0gJ9CU0L7QtNCw0Zgg0YHRgtCw0LLQutGDJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBDYXRhbG9nIEl0ZW0nfSA9ICfQlNC+0LTQsNCy0LDRmtC1INGB0YLQsNCy0LrQtSDRgyDQutCw0YLQsNC70L7Qsyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgQ2F0YWxvZyBDbGFzcyd9ID0gJ9CU0L7QtNCw0LLQsNGa0LUg0LrQu9Cw0YHQtSDRgyDQutCw0YLQsNC70L7Qsyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDYXRhbG9nIENsYXNzJ30gPSAn0JrQu9Cw0YHQsCDQutCw0YLQsNC70L7Qs9CwJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VkaXQgQ2F0YWxvZyBJdGVtJ30gPSAn0KPRgNC10LTQuCDRgdGC0LDQstC60YMg0LrQsNGC0LDQu9C+0LPQsCc7CgogICAgIyBKUyBGaWxlOiB2YXIvaHR0cGQvaHRkb2NzL2pzL0lUU00uR2VuZXJhbENhdGFsb2cuanMKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dhcm5pbmcgaW5jaWRlbnQgc3RhdGUgY2FuIG5vdCBiZSBzZXQgdG8gaW52YWxpZC4nfSA9ICfQodGC0LDRgtGD0YEg0LjQvdGG0LjQtNC10L3RgtCwINGD0L/QvtC30L7RgNC10ZrQsCDQvdC1INC80L7QttC1INGB0LUg0L/QvtGB0YLQsNCy0LjRgtC4INC90LAg0L3QtdCy0LDQttC10ZvQuC4nOwoKICAgICMgU3lzQ29uZmlnCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb21tZW50IDInfSA9ICfQmtC+0LzQtdC90YLQsNGAIDInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3JlYXRlIGFuZCBtYW5hZ2UgdGhlIEdlbmVyYWwgQ2F0YWxvZy4nfSA9ICfQmtGA0LXQuNGA0LDRmtC1INC4INGD0L/RgNCw0LLRmdCw0ZrQtSDQvtC/0YjRgtC40Lwg0LrQsNGC0LDQu9C+0LPQvtC8Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmUgdGhlIGdlbmVyYWwgY2F0YWxvZyBjb21tZW50IDIuJ30gPSAn0JTQtdGE0LjQvdC40YjQtSDQutC+0LzQtdC90YLQsNGAIDIg0YMg0L7Qv9GI0YLQtdC8INC60LDRgtCw0LvQvtCz0YMuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZG1pbkdlbmVyYWxDYXRhbG9nIGNvbmZpZ3VyYXRpb24gaW4gdGhlIGFkbWluIGFyZWEuJ30gPQogICAgICAgICfQoNC10LPQuNGB0YLRgNCw0YbQuNGY0LAg0L/RgNC40YHRgtGD0L/QvdC+0LMg0LzQvtC00YPQu9CwINC30LAgQWRtaW5HZW5lcmFsQ2F0YWxvZyDRgyDQuNC90YLQtdGA0YTQtdGY0YHRgyDQsNC00LzQuNC90LjRgdGC0YDQsNGC0L7RgNCwLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydHZW5lcmFsIENhdGFsb2cnfSA9ICfQntC/0YjRgtC4INC60LDRgtCw0LvQvtCzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcmFtZXRlcnMgZm9yIHRoZSBleGFtcGxlIGNvbW1lbnQgMiBvZiB0aGUgZ2VuZXJhbCBjYXRhbG9nIGF0dHJpYnV0ZXMuJ30gPQogICAgICAgICfQn9Cw0YDQsNC80LXRgtGA0Lgg0LfQsCDQv9GA0LjQvNC10YAg0LrQvtC80LXQvdGC0LDRgNCwIDIg0LDRgtGA0LjQsdGD0YLQsCDQvtC/0YjRgtC10LMg0LrQsNGC0LDQu9C+0LPQsC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFyYW1ldGVycyBmb3IgdGhlIGV4YW1wbGUgcGVybWlzc2lvbiBncm91cHMgb2YgdGhlIGdlbmVyYWwgY2F0YWxvZyBhdHRyaWJ1dGVzLid9ID0KICAgICAgICAn0J/QsNGA0LDQvNC10YLRgNC4INC30LAg0L/RgNC40LzQtdGAINCz0YDRg9C/0LUg0LfQsCDQtNC+0LfQstC+0LvQtSDQsNGC0YDQuNCx0YPRgtCwINC+0L/RiNGC0LXQsyDQutCw0YLQsNC70L7Qs9CwLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQZXJtaXNzaW9uIEdyb3VwJ30gPSAn0JPRgNGD0L/QsCDQv9GA0LjRgdGC0YPQv9CwJzsKCgogICAgcHVzaCBAeyAkU2VsZi0+e0phdmFTY3JpcHRTdHJpbmdzfSAvLyBbXSB9LCAoCiAgICAnQ2FuY2VsJywKICAgICdXYXJuaW5nJywKICAgICdXYXJuaW5nIGluY2lkZW50IHN0YXRlIGNhbiBub3QgYmUgc2V0IHRvIGludmFsaWQuJywKICAgICk7Cgp9CgoxOwo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAyMS0yMDIyIFpudW55IEdtYkgsIGh0dHBzOi8vem51bnkub3JnLwojIC0tCiMgVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKIyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9ncGwtMy4wLnR4dC4KIyAtLQoKcGFja2FnZSBLZXJuZWw6Okxhbmd1YWdlOjpzcl9MYXRuX0dlbmVyYWxDYXRhbG9nOwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwp1c2UgdXRmODsKCnN1YiBEYXRhIHsKICAgIG15ICRTZWxmID0gc2hpZnQ7CgogICAgIyBUVCBUZW1wbGF0ZTogS2VybmVsL091dHB1dC9IVE1ML1RlbXBsYXRlcy9TdGFuZGFyZC9BQUFHZW5lcmFsQ2F0YWxvZy50dAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnVuY3Rpb25hbGl0eSd9ID0gJ0Z1bmtjaW9uYWxub3N0JzsKCiAgICAjIFRUIFRlbXBsYXRlOiBLZXJuZWwvT3V0cHV0L0hUTUwvVGVtcGxhdGVzL1N0YW5kYXJkL0FkbWluR2VuZXJhbENhdGFsb2cudHQKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0dlbmVyYWwgQ2F0YWxvZyBNYW5hZ2VtZW50J30gPSAnVXByYXZsamFuamUgT3DFoXRpbSBrYXRhbG9nb20nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSXRlbXMgaW4gQ2xhc3MnfSA9ICdTdGF2a2UgdSBrbGFzaSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFZGl0IEl0ZW0nfSA9ICdVcmVkaSBzdGF2a3UnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIENsYXNzJ30gPSAnRG9kYWoga2xhc3UnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIEl0ZW0nfSA9ICdEb2RhaiBzdGF2a3UnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIENhdGFsb2cgSXRlbSd9ID0gJ0RvZGF2YW5qZSBzdGF2a2UgdSBrYXRhbG9nJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBDYXRhbG9nIENsYXNzJ30gPSAnRG9kYXZhbmplIGtsYXNlIHUga2F0YWxvZyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDYXRhbG9nIENsYXNzJ30gPSAnS2xhc2Ega2F0YWxvZ2EnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRWRpdCBDYXRhbG9nIEl0ZW0nfSA9ICdVcmVkaSBzdGF2a3Uga2F0YWxvZ2EnOwoKICAgICMgSlMgRmlsZTogdmFyL2h0dHBkL2h0ZG9jcy9qcy9JVFNNLkdlbmVyYWxDYXRhbG9nLmpzCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXYXJuaW5nIGluY2lkZW50IHN0YXRlIGNhbiBub3QgYmUgc2V0IHRvIGludmFsaWQuJ30gPSAnU3RhdHVzIGluY2lkZW50YSB1cG96b3JlbmphIG5lIG1vxb5lIHNlIHBvc3Rhdml0aSBuYSBuZXZhxb5lxIdpLic7CgogICAgIyBTeXNDb25maWcKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbW1lbnQgMid9ID0gJ0tvbWVudGFyIDInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3JlYXRlIGFuZCBtYW5hZ2UgdGhlIEdlbmVyYWwgQ2F0YWxvZy4nfSA9ICdLcmVpcmFuamUgaSB1cHJhdmxqYW5qZSBvcMWhdGltIGthdGFsb2dvbS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lIHRoZSBnZW5lcmFsIGNhdGFsb2cgY29tbWVudCAyLid9ID0gJ0RlZmluacWhZSBrb21lbnRhciAyIHUgb3DFoXRlbSBrYXRhbG9ndS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFkbWluR2VuZXJhbENhdGFsb2cgY29uZmlndXJhdGlvbiBpbiB0aGUgYWRtaW4gYXJlYS4nfSA9CiAgICAgICAgJ1JlZ2lzdHJhY2lqYSBwcmlzdHVwbm9nIG1vZHVsYSB6YSBBZG1pbkdlbmVyYWxDYXRhbG9nIHUgaW50ZXJmZWpzdSBhZG1pbmlzdHJhdG9yYS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnR2VuZXJhbCBDYXRhbG9nJ30gPSAnT3DFoXRpIGthdGFsb2cnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFyYW1ldGVycyBmb3IgdGhlIGV4YW1wbGUgY29tbWVudCAyIG9mIHRoZSBnZW5lcmFsIGNhdGFsb2cgYXR0cmlidXRlcy4nfSA9CiAgICAgICAgJ1BhcmFtZXRyaSB6YSBwcmltZXIga29tZW50YXJhIDIgYXRyaWJ1dGEgb3DFoXRlZyBrYXRhbG9nYS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFyYW1ldGVycyBmb3IgdGhlIGV4YW1wbGUgcGVybWlzc2lvbiBncm91cHMgb2YgdGhlIGdlbmVyYWwgY2F0YWxvZyBhdHRyaWJ1dGVzLid9ID0KICAgICAgICAnUGFyYW1ldHJpIHphIHByaW1lciBncnVwZSB6YSBkb3p2b2xlIGF0cmlidXRhIG9wxaF0ZWcga2F0YWxvZ2EuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Blcm1pc3Npb24gR3JvdXAnfSA9ICdHcnVwYSBwcmlzdHVwYSc7CgoKICAgIHB1c2ggQHsgJFNlbGYtPntKYXZhU2NyaXB0U3RyaW5nc30gLy8gW10gfSwgKAogICAgJ0NhbmNlbCcsCiAgICAnV2FybmluZycsCiAgICAnV2FybmluZyBpbmNpZGVudCBzdGF0ZSBjYW4gbm90IGJlIHNldCB0byBpbnZhbGlkLicsCiAgICApOwoKfQoKMTsK
IyAtLQojIENvcHlyaWdodCAoQykgMjAyMS0yMDIyIFpudW55IEdtYkgsIGh0dHBzOi8vem51bnkub3JnLwojIC0tCiMgVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKIyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9ncGwtMy4wLnR4dC4KIyAtLQoKcGFja2FnZSBLZXJuZWw6Okxhbmd1YWdlOjpzdl9HZW5lcmFsQ2F0YWxvZzsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKdXNlIHV0Zjg7CgpzdWIgRGF0YSB7CiAgICBteSAkU2VsZiA9IHNoaWZ0OwoKICAgICMgVFQgVGVtcGxhdGU6IEtlcm5lbC9PdXRwdXQvSFRNTC9UZW1wbGF0ZXMvU3RhbmRhcmQvQUFBR2VuZXJhbENhdGFsb2cudHQKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Z1bmN0aW9uYWxpdHknfSA9ICdGdW5rdGlvbmFsaXRldCc7CgogICAgIyBUVCBUZW1wbGF0ZTogS2VybmVsL091dHB1dC9IVE1ML1RlbXBsYXRlcy9TdGFuZGFyZC9BZG1pbkdlbmVyYWxDYXRhbG9nLnR0CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydHZW5lcmFsIENhdGFsb2cgTWFuYWdlbWVudCd9ID0gJ0hhbnRlcmEgZ3J1bmRrYXRhbG9nJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0l0ZW1zIGluIENsYXNzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VkaXQgSXRlbSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgQ2xhc3MnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIEl0ZW0nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIENhdGFsb2cgSXRlbSd9ID0gJ0zDpGdnIHRpbGwga2F0YWxvZ3Bvc3QnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIENhdGFsb2cgQ2xhc3MnfSA9ICdMw6RnZyB0aWxsIGtsYXNzIGkga2F0YWxvZyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDYXRhbG9nIENsYXNzJ30gPSAnS2F0YWxvZ2tsYXNzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VkaXQgQ2F0YWxvZyBJdGVtJ30gPSAnJzsKCiAgICAjIEpTIEZpbGU6IHZhci9odHRwZC9odGRvY3MvanMvSVRTTS5HZW5lcmFsQ2F0YWxvZy5qcwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV2FybmluZyBpbmNpZGVudCBzdGF0ZSBjYW4gbm90IGJlIHNldCB0byBpbnZhbGlkLid9ID0gJyc7CgogICAgIyBTeXNDb25maWcKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbW1lbnQgMid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDcmVhdGUgYW5kIG1hbmFnZSB0aGUgR2VuZXJhbCBDYXRhbG9nLid9ID0gJ1NrYXBhIG9jaCBoYW50ZXJhIGdydW5ka2F0YWxvZ2VuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZSB0aGUgZ2VuZXJhbCBjYXRhbG9nIGNvbW1lbnQgMi4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFkbWluR2VuZXJhbENhdGFsb2cgY29uZmlndXJhdGlvbiBpbiB0aGUgYWRtaW4gYXJlYS4nfSA9CiAgICAgICAgJ1JlZ2lzdHJlcmluZyBhdiBmcm9udGVuZG1vZHVsIGbDtnIgQWRtaW5HZW5lcmFsQ2F0YWxvZy1pbnN0w6RsbG5pbmdhciBpIGFkbWluYXJlYW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0dlbmVyYWwgQ2F0YWxvZyd9ID0gJ0dydW5ka2F0YWxvZyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJhbWV0ZXJzIGZvciB0aGUgZXhhbXBsZSBjb21tZW50IDIgb2YgdGhlIGdlbmVyYWwgY2F0YWxvZyBhdHRyaWJ1dGVzLid9ID0KICAgICAgICAnUGFyYW1ldHJhciBmw7ZyIGV4ZW1wZWxrb21tZW50YXIgMiBpIGF0dHJpYnV0ZW4gZsO2ciBncnVuZGthdGFsb2dlbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFyYW1ldGVycyBmb3IgdGhlIGV4YW1wbGUgcGVybWlzc2lvbiBncm91cHMgb2YgdGhlIGdlbmVyYWwgY2F0YWxvZyBhdHRyaWJ1dGVzLid9ID0KICAgICAgICAnUGFyYW1ldHJhciBmw7ZyIGV4ZW1wZWwgcMOlIGJlaMO2cmlnaGV0c2VncnVwcGVyIGkgZ3J1bmRrYXRhbG9nZW5zIGF0dHJpYnV0Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQZXJtaXNzaW9uIEdyb3VwJ30gPSAnJzsKCgogICAgcHVzaCBAeyAkU2VsZi0+e0phdmFTY3JpcHRTdHJpbmdzfSAvLyBbXSB9LCAoCiAgICAnQ2FuY2VsJywKICAgICdXYXJuaW5nJywKICAgICdXYXJuaW5nIGluY2lkZW50IHN0YXRlIGNhbiBub3QgYmUgc2V0IHRvIGludmFsaWQuJywKICAgICk7Cgp9CgoxOwo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAyMS0yMDIyIFpudW55IEdtYkgsIGh0dHBzOi8vem51bnkub3JnLwojIC0tCiMgVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKIyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9ncGwtMy4wLnR4dC4KIyAtLQoKcGFja2FnZSBLZXJuZWw6Okxhbmd1YWdlOjpzd19HZW5lcmFsQ2F0YWxvZzsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKdXNlIHV0Zjg7CgpzdWIgRGF0YSB7CiAgICBteSAkU2VsZiA9IHNoaWZ0OwoKICAgICMgVFQgVGVtcGxhdGU6IEtlcm5lbC9PdXRwdXQvSFRNTC9UZW1wbGF0ZXMvU3RhbmRhcmQvQUFBR2VuZXJhbENhdGFsb2cudHQKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Z1bmN0aW9uYWxpdHknfSA9ICdVdGVuZGFqaSc7CgogICAgIyBUVCBUZW1wbGF0ZTogS2VybmVsL091dHB1dC9IVE1ML1RlbXBsYXRlcy9TdGFuZGFyZC9BZG1pbkdlbmVyYWxDYXRhbG9nLnR0CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydHZW5lcmFsIENhdGFsb2cgTWFuYWdlbWVudCd9ID0gJ1VzaW1hbWl6aSB3YSBrYXRhbG9naSB3YSB1anVtbGEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSXRlbXMgaW4gQ2xhc3MnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRWRpdCBJdGVtJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBDbGFzcyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgSXRlbSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgQ2F0YWxvZyBJdGVtJ30gPSAnT25nZXphIGtpcGVuZ2VsZSB5YSBrYXRhbG9naSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgQ2F0YWxvZyBDbGFzcyd9ID0gJ09uZ2V6YSB0YWJha2EgbGEga2F0YWxvZ2knOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2F0YWxvZyBDbGFzcyd9ID0gJ1RhYmFrYSBsYSBrYXRhbG9naSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFZGl0IENhdGFsb2cgSXRlbSd9ID0gJyc7CgogICAgIyBKUyBGaWxlOiB2YXIvaHR0cGQvaHRkb2NzL2pzL0lUU00uR2VuZXJhbENhdGFsb2cuanMKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dhcm5pbmcgaW5jaWRlbnQgc3RhdGUgY2FuIG5vdCBiZSBzZXQgdG8gaW52YWxpZC4nfSA9ICcnOwoKICAgICMgU3lzQ29uZmlnCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb21tZW50IDInfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3JlYXRlIGFuZCBtYW5hZ2UgdGhlIEdlbmVyYWwgQ2F0YWxvZy4nfSA9ICdUZW5nZW5lemEgbmEgc2ltYW1pYSBLYXRhbG9naSB5YSB1anVtbGEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZSB0aGUgZ2VuZXJhbCBjYXRhbG9nIGNvbW1lbnQgMi4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFkbWluR2VuZXJhbENhdGFsb2cgY29uZmlndXJhdGlvbiBpbiB0aGUgYWRtaW4gYXJlYS4nfSA9CiAgICAgICAgJ1VzYWppbGkgd2EgbW9kdWxpIHlhIG1hemluZ2lyYSB5YSBtYmVsZSBrd2EgdXNhbmlkaSB3YSBrYXRhbG9naSB5YSB1anVtbGEgeWEgbXNpbWFtaXppIGthdGlrYSBlbmVvIGxhIHVzaW1hbWl6aS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnR2VuZXJhbCBDYXRhbG9nJ30gPSAnS2F0YWxvZ2kgeWEgdWp1bWxhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcmFtZXRlcnMgZm9yIHRoZSBleGFtcGxlIGNvbW1lbnQgMiBvZiB0aGUgZ2VuZXJhbCBjYXRhbG9nIGF0dHJpYnV0ZXMuJ30gPQogICAgICAgICdWaWdlem8ga3dhIG1mYW5vIE1hb25pIDIgeWEgc2lmYSB6YSBrYXRhbG9naSB6YSB1anVtbGEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcmFtZXRlcnMgZm9yIHRoZSBleGFtcGxlIHBlcm1pc3Npb24gZ3JvdXBzIG9mIHRoZSBnZW5lcmFsIGNhdGFsb2cgYXR0cmlidXRlcy4nfSA9CiAgICAgICAgJ1ZpZ2V6byBrd2EgbWZhbm8gcnVodXNhIHphIHZpa3VuZGkga3dhIHNpZmEgemEga2F0YWxvZ2kgemEgdWp1bWxhLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQZXJtaXNzaW9uIEdyb3VwJ30gPSAnJzsKCgogICAgcHVzaCBAeyAkU2VsZi0+e0phdmFTY3JpcHRTdHJpbmdzfSAvLyBbXSB9LCAoCiAgICAnQ2FuY2VsJywKICAgICdXYXJuaW5nJywKICAgICdXYXJuaW5nIGluY2lkZW50IHN0YXRlIGNhbiBub3QgYmUgc2V0IHRvIGludmFsaWQuJywKICAgICk7Cgp9CgoxOwo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAyMS0yMDIyIFpudW55IEdtYkgsIGh0dHBzOi8vem51bnkub3JnLwojIC0tCiMgVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKIyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9ncGwtMy4wLnR4dC4KIyAtLQoKcGFja2FnZSBLZXJuZWw6Okxhbmd1YWdlOjp0aF9USF9HZW5lcmFsQ2F0YWxvZzsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKdXNlIHV0Zjg7CgpzdWIgRGF0YSB7CiAgICBteSAkU2VsZiA9IHNoaWZ0OwoKICAgICMgVFQgVGVtcGxhdGU6IEtlcm5lbC9PdXRwdXQvSFRNTC9UZW1wbGF0ZXMvU3RhbmRhcmQvQUFBR2VuZXJhbENhdGFsb2cudHQKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Z1bmN0aW9uYWxpdHknfSA9ICfguJ/guLHguIfguIHguYzguIrguLHguYjguJnguIHguLLguKPguJfguLPguIfguLLguJknOwoKICAgICMgVFQgVGVtcGxhdGU6IEtlcm5lbC9PdXRwdXQvSFRNTC9UZW1wbGF0ZXMvU3RhbmRhcmQvQWRtaW5HZW5lcmFsQ2F0YWxvZy50dAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnR2VuZXJhbCBDYXRhbG9nIE1hbmFnZW1lbnQnfSA9ICfguIHguLLguKPguIjguLHguJTguIHguLLguKPguYHguITguYfguJXguJXguLLguKXguYfguK3guIHguJfguLHguYjguKfguYTguJsnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSXRlbXMgaW4gQ2xhc3MnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRWRpdCBJdGVtJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBDbGFzcyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgSXRlbSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgQ2F0YWxvZyBJdGVtJ30gPSAn4LmA4Lie4Li04LmI4Lih4Lij4Liy4Lii4LiB4Liy4Lij4LmB4LiE4LmH4LiV4LiV4Liy4Lil4LmH4Lit4LiBJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBDYXRhbG9nIENsYXNzJ30gPSAn4LmA4Lie4Li04LmI4Lih4Lir4LmJ4Lit4LiH4LmB4LiE4LmH4LiV4LiV4Liy4Lil4LmH4Lit4LiBJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NhdGFsb2cgQ2xhc3MnfSA9ICfguKvguYnguK3guIfguYHguITguYfguJXguJXguLLguKXguYfguK3guIEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRWRpdCBDYXRhbG9nIEl0ZW0nfSA9ICcnOwoKICAgICMgSlMgRmlsZTogdmFyL2h0dHBkL2h0ZG9jcy9qcy9JVFNNLkdlbmVyYWxDYXRhbG9nLmpzCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXYXJuaW5nIGluY2lkZW50IHN0YXRlIGNhbiBub3QgYmUgc2V0IHRvIGludmFsaWQuJ30gPSAnJzsKCiAgICAjIFN5c0NvbmZpZwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29tbWVudCAyJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NyZWF0ZSBhbmQgbWFuYWdlIHRoZSBHZW5lcmFsIENhdGFsb2cuJ30gPSAn4Liq4Lij4LmJ4Liy4LiH4LmB4Lil4Liw4LiI4Lix4LiU4LiB4Liy4Lij4LmB4LiE4LmH4LiV4LiV4Liy4Lil4LmH4Lit4LiB4LiX4Lix4LmI4Lin4LmE4LibJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZSB0aGUgZ2VuZXJhbCBjYXRhbG9nIGNvbW1lbnQgMi4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFkbWluR2VuZXJhbENhdGFsb2cgY29uZmlndXJhdGlvbiBpbiB0aGUgYWRtaW4gYXJlYS4nfSA9CiAgICAgICAgJ+C4geC4suC4o+C4peC4h+C4l+C4sOC5gOC4muC4teC4ouC4meC5guC4oeC4lOC4ueC4pSBGcm9udGVuZCDguKrguLPguKvguKPguLHguJrguIHguLLguKPguIHguLPguKvguJnguJTguITguYjguLLguILguK3guIcgQWRtaW5HZW5lcmFsQ2F0YWxvZyDguYPguJnguJ7guLfguYnguJnguJfguLXguYjguILguK3guIfguYHguK3guJTguKHguLTguJknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnR2VuZXJhbCBDYXRhbG9nJ30gPSAn4LmB4LiE4LmH4LiV4LiV4Liy4Lil4LmH4Lit4LiB4LiX4Lix4LmI4Lin4LmE4LibJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcmFtZXRlcnMgZm9yIHRoZSBleGFtcGxlIGNvbW1lbnQgMiBvZiB0aGUgZ2VuZXJhbCBjYXRhbG9nIGF0dHJpYnV0ZXMuJ30gPQogICAgICAgICfguJ7guLLguKPguLLguKHguLTguYDguJXguK3guKPguYzguKrguLPguKvguKPguLHguJrguJXguLHguKfguK3guKLguYjguLLguIfguITguKfguLLguKHguITguLTguJTguYDguKvguYfguJnguJfguLXguYgyIOC4guC4reC4h+C5geC4hOC5h+C4leC4leC4suC4peC5h+C4reC4geC5geC4reC4leC4l+C4o+C4tOC4muC4tOC4p+C4leC5jOC4l+C4seC5iOC4p+C5hOC4myc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJhbWV0ZXJzIGZvciB0aGUgZXhhbXBsZSBwZXJtaXNzaW9uIGdyb3VwcyBvZiB0aGUgZ2VuZXJhbCBjYXRhbG9nIGF0dHJpYnV0ZXMuJ30gPQogICAgICAgICfguJ7guLLguKPguLLguKHguLTguYDguJXguK3guKPguYzguKrguLPguKvguKPguLHguJrguJXguLHguKfguK3guKLguYjguLLguIfguIHguKXguLjguYjguKHguJfguLXguYjguYTguJTguYnguKPguLHguJrguK3guJnguLjguI3guLLguJXguILguK3guIfguYHguK3guJXguJfguKPguLTguJrguLTguKfguJXguYzguYHguITguYfguJXguJXguLLguKXguYfguK3guIHguJfguLHguYjguKfguYTguJsnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGVybWlzc2lvbiBHcm91cCd9ID0gJyc7CgoKICAgIHB1c2ggQHsgJFNlbGYtPntKYXZhU2NyaXB0U3RyaW5nc30gLy8gW10gfSwgKAogICAgJ0NhbmNlbCcsCiAgICAnV2FybmluZycsCiAgICAnV2FybmluZyBpbmNpZGVudCBzdGF0ZSBjYW4gbm90IGJlIHNldCB0byBpbnZhbGlkLicsCiAgICApOwoKfQoKMTsK
IyAtLQojIENvcHlyaWdodCAoQykgMjAyMS0yMDIyIFpudW55IEdtYkgsIGh0dHBzOi8vem51bnkub3JnLwojIC0tCiMgVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKIyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9ncGwtMy4wLnR4dC4KIyAtLQoKcGFja2FnZSBLZXJuZWw6Okxhbmd1YWdlOjp0cl9HZW5lcmFsQ2F0YWxvZzsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKdXNlIHV0Zjg7CgpzdWIgRGF0YSB7CiAgICBteSAkU2VsZiA9IHNoaWZ0OwoKICAgICMgVFQgVGVtcGxhdGU6IEtlcm5lbC9PdXRwdXQvSFRNTC9UZW1wbGF0ZXMvU3RhbmRhcmQvQUFBR2VuZXJhbENhdGFsb2cudHQKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Z1bmN0aW9uYWxpdHknfSA9ICfEsMWfbGV2c2VsbGlrJzsKCiAgICAjIFRUIFRlbXBsYXRlOiBLZXJuZWwvT3V0cHV0L0hUTUwvVGVtcGxhdGVzL1N0YW5kYXJkL0FkbWluR2VuZXJhbENhdGFsb2cudHQKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0dlbmVyYWwgQ2F0YWxvZyBNYW5hZ2VtZW50J30gPSAnR2VuZWwgS2F0YWxvZyBZw7ZuZXRpbWknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSXRlbXMgaW4gQ2xhc3MnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRWRpdCBJdGVtJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBDbGFzcyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgSXRlbSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgQ2F0YWxvZyBJdGVtJ30gPSAnS2F0YWxvZyDDlmdlc2kgRWtsZXlpbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgQ2F0YWxvZyBDbGFzcyd9ID0gJ0thdGFsb2cgU8SxbsSxZsSxIEVrbGV5aW4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2F0YWxvZyBDbGFzcyd9ID0gJ0thdGFsb2cgU8SxbsSxZsSxJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VkaXQgQ2F0YWxvZyBJdGVtJ30gPSAnJzsKCiAgICAjIEpTIEZpbGU6IHZhci9odHRwZC9odGRvY3MvanMvSVRTTS5HZW5lcmFsQ2F0YWxvZy5qcwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV2FybmluZyBpbmNpZGVudCBzdGF0ZSBjYW4gbm90IGJlIHNldCB0byBpbnZhbGlkLid9ID0gJyc7CgogICAgIyBTeXNDb25maWcKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbW1lbnQgMid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDcmVhdGUgYW5kIG1hbmFnZSB0aGUgR2VuZXJhbCBDYXRhbG9nLid9ID0gJ0dlbmVsIEthdGFsb2cgecO2bmV0aW1pLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmUgdGhlIGdlbmVyYWwgY2F0YWxvZyBjb21tZW50IDIuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZG1pbkdlbmVyYWxDYXRhbG9nIGNvbmZpZ3VyYXRpb24gaW4gdGhlIGFkbWluIGFyZWEuJ30gPQogICAgICAgICdZw7ZuZXRpbSBiw7Zsw7xtw7xuZWtpIEFkbWluR2VuZXJhbENhdGFsb2cgYXlhcmxhcsSxIGnDp2luIMO2bnnDvHogbW9kw7xsIGtheWTEsS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnR2VuZXJhbCBDYXRhbG9nJ30gPSAnR2VuZWwgS2F0YWxvZyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJhbWV0ZXJzIGZvciB0aGUgZXhhbXBsZSBjb21tZW50IDIgb2YgdGhlIGdlbmVyYWwgY2F0YWxvZyBhdHRyaWJ1dGVzLid9ID0KICAgICAgICAnR2VuZWwga2F0YWxvZyDDtnpuaXRlbGlrbGVyaW5pbiBpa2luY2kgw7ZybmVrIHlvcnVtdW51biBwYXJhbWV0cmVsZXJpLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJhbWV0ZXJzIGZvciB0aGUgZXhhbXBsZSBwZXJtaXNzaW9uIGdyb3VwcyBvZiB0aGUgZ2VuZXJhbCBjYXRhbG9nIGF0dHJpYnV0ZXMuJ30gPQogICAgICAgICdHZW5lbCBrYXRhbG9nIMO2em5pdGVsaWtsZXJpbmluIMO2cm5layBpemluIGdydXBsYXLEsW7EsW4gcGFyYW1ldHJlbGVyaS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGVybWlzc2lvbiBHcm91cCd9ID0gJyc7CgoKICAgIHB1c2ggQHsgJFNlbGYtPntKYXZhU2NyaXB0U3RyaW5nc30gLy8gW10gfSwgKAogICAgJ0NhbmNlbCcsCiAgICAnV2FybmluZycsCiAgICAnV2FybmluZyBpbmNpZGVudCBzdGF0ZSBjYW4gbm90IGJlIHNldCB0byBpbnZhbGlkLicsCiAgICApOwoKfQoKMTsK
IyAtLQojIENvcHlyaWdodCAoQykgMjAyMS0yMDIyIFpudW55IEdtYkgsIGh0dHBzOi8vem51bnkub3JnLwojIC0tCiMgVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKIyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9ncGwtMy4wLnR4dC4KIyAtLQoKcGFja2FnZSBLZXJuZWw6Okxhbmd1YWdlOjp1a19HZW5lcmFsQ2F0YWxvZzsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKdXNlIHV0Zjg7CgpzdWIgRGF0YSB7CiAgICBteSAkU2VsZiA9IHNoaWZ0OwoKICAgICMgVFQgVGVtcGxhdGU6IEtlcm5lbC9PdXRwdXQvSFRNTC9UZW1wbGF0ZXMvU3RhbmRhcmQvQUFBR2VuZXJhbENhdGFsb2cudHQKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Z1bmN0aW9uYWxpdHknfSA9ICfQpNGD0L3QutGG0ZbQvtC90LDQu9GM0L3RltGB0YLRjCc7CgogICAgIyBUVCBUZW1wbGF0ZTogS2VybmVsL091dHB1dC9IVE1ML1RlbXBsYXRlcy9TdGFuZGFyZC9BZG1pbkdlbmVyYWxDYXRhbG9nLnR0CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydHZW5lcmFsIENhdGFsb2cgTWFuYWdlbWVudCd9ID0gJ9Ca0LXRgNGD0LLQsNC90L3RjyDQt9Cw0LPQsNC70YzQvdC40Lwg0LrQsNGC0LDQu9C+0LPQvtC8JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0l0ZW1zIGluIENsYXNzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VkaXQgSXRlbSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgQ2xhc3MnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIEl0ZW0nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIENhdGFsb2cgSXRlbSd9ID0gJ9CU0L7QtNCw0YLQuCDQtdC70LXQvNC10L3RgiDQutCw0YLQsNC70L7Qs9GDJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBDYXRhbG9nIENsYXNzJ30gPSAn0JTQvtC00LDRgtC4INC60LvQsNGBINC60LDRgtCw0LvQvtCz0YMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2F0YWxvZyBDbGFzcyd9ID0gJ9Ca0LvQsNGBINC60LDRgtCw0LvQvtCz0YMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRWRpdCBDYXRhbG9nIEl0ZW0nfSA9ICcnOwoKICAgICMgSlMgRmlsZTogdmFyL2h0dHBkL2h0ZG9jcy9qcy9JVFNNLkdlbmVyYWxDYXRhbG9nLmpzCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXYXJuaW5nIGluY2lkZW50IHN0YXRlIGNhbiBub3QgYmUgc2V0IHRvIGludmFsaWQuJ30gPSAnJzsKCiAgICAjIFN5c0NvbmZpZwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29tbWVudCAyJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NyZWF0ZSBhbmQgbWFuYWdlIHRoZSBHZW5lcmFsIENhdGFsb2cuJ30gPSAn0KHRgtCy0L7RgNC40YLQuCDRliDQutC10YDRg9Cy0LDRgtC4INC30LDQs9Cw0LvRjNC90LjQvCDQutCw0YLQsNC70L7Qs9C+0LwnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lIHRoZSBnZW5lcmFsIGNhdGFsb2cgY29tbWVudCAyLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgQWRtaW5HZW5lcmFsQ2F0YWxvZyBjb25maWd1cmF0aW9uIGluIHRoZSBhZG1pbiBhcmVhLid9ID0KICAgICAgICAnRnJvbnRlbmQg0LzQvtC00YPQu9GMINGA0LXRlNGB0YLRgNCw0YbRltGXINCyINC30L7QvdGWINCw0LTQvNGW0L3RltGB0YLRgNGD0LLQsNC90L3RjyDQtNC70Y8g0LrQvtC90YTRltCz0YPRgNCw0YbRltGXIEFkbWluR2VuZXJhbENhdGFsb2cnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnR2VuZXJhbCBDYXRhbG9nJ30gPSAn0JfQsNCz0LDQu9GM0L3QuCDQutCw0YLQsNC70L7Qsyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJhbWV0ZXJzIGZvciB0aGUgZXhhbXBsZSBjb21tZW50IDIgb2YgdGhlIGdlbmVyYWwgY2F0YWxvZyBhdHRyaWJ1dGVzLid9ID0KICAgICAgICAn0J/QsNGA0LDQvNC10YLRgNC4INC00LvRjyDQv9GA0LjQutC70LDQtNGDINC60L7QvNC10L3RgtCw0YAgMiDQsNGC0YDQuNCx0YPRgtGW0LIg0LfQsNCz0LDQu9GM0L3QvtCz0L4g0LrQsNGC0LDQu9C+0LPRgy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFyYW1ldGVycyBmb3IgdGhlIGV4YW1wbGUgcGVybWlzc2lvbiBncm91cHMgb2YgdGhlIGdlbmVyYWwgY2F0YWxvZyBhdHRyaWJ1dGVzLid9ID0KICAgICAgICAn0J/QsNGA0LDQvNC10YLRgNC4INC00LvRjyDQv9GA0LjQutC70LDQtNGDINC00L7Qt9Cy0L7Qu9GDINCz0YDRg9C/INC30LDQs9Cw0LvRjNC90LjRhSDQsNGC0YDQuNCx0YPRgtGW0LIg0LrQsNGC0LDQu9C+0LPRgy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGVybWlzc2lvbiBHcm91cCd9ID0gJyc7CgoKICAgIHB1c2ggQHsgJFNlbGYtPntKYXZhU2NyaXB0U3RyaW5nc30gLy8gW10gfSwgKAogICAgJ0NhbmNlbCcsCiAgICAnV2FybmluZycsCiAgICAnV2FybmluZyBpbmNpZGVudCBzdGF0ZSBjYW4gbm90IGJlIHNldCB0byBpbnZhbGlkLicsCiAgICApOwoKfQoKMTsK
IyAtLQojIENvcHlyaWdodCAoQykgMjAyMS0yMDIyIFpudW55IEdtYkgsIGh0dHBzOi8vem51bnkub3JnLwojIC0tCiMgVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKIyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9ncGwtMy4wLnR4dC4KIyAtLQoKcGFja2FnZSBLZXJuZWw6Okxhbmd1YWdlOjp2aV9WTl9HZW5lcmFsQ2F0YWxvZzsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKdXNlIHV0Zjg7CgpzdWIgRGF0YSB7CiAgICBteSAkU2VsZiA9IHNoaWZ0OwoKICAgICMgVFQgVGVtcGxhdGU6IEtlcm5lbC9PdXRwdXQvSFRNTC9UZW1wbGF0ZXMvU3RhbmRhcmQvQUFBR2VuZXJhbENhdGFsb2cudHQKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Z1bmN0aW9uYWxpdHknfSA9ICdDaOG7qWMgbsSDbmcnOwoKICAgICMgVFQgVGVtcGxhdGU6IEtlcm5lbC9PdXRwdXQvSFRNTC9UZW1wbGF0ZXMvU3RhbmRhcmQvQWRtaW5HZW5lcmFsQ2F0YWxvZy50dAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnR2VuZXJhbCBDYXRhbG9nIE1hbmFnZW1lbnQnfSA9ICdRdeG6o24gbMO9IGRhbmggbeG7pWMgY2h1bmcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSXRlbXMgaW4gQ2xhc3MnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRWRpdCBJdGVtJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBDbGFzcyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgSXRlbSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgQ2F0YWxvZyBJdGVtJ30gPSAnVGjDqm0gZGFuaCBt4bulYyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgQ2F0YWxvZyBDbGFzcyd9ID0gJ1Row6ptIGzhu5twIGRhbmggbeG7pWMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2F0YWxvZyBDbGFzcyd9ID0gJ0zhu5twIGRhbmggbeG7pWMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRWRpdCBDYXRhbG9nIEl0ZW0nfSA9ICcnOwoKICAgICMgSlMgRmlsZTogdmFyL2h0dHBkL2h0ZG9jcy9qcy9JVFNNLkdlbmVyYWxDYXRhbG9nLmpzCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXYXJuaW5nIGluY2lkZW50IHN0YXRlIGNhbiBub3QgYmUgc2V0IHRvIGludmFsaWQuJ30gPSAnJzsKCiAgICAjIFN5c0NvbmZpZwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29tbWVudCAyJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NyZWF0ZSBhbmQgbWFuYWdlIHRoZSBHZW5lcmFsIENhdGFsb2cuJ30gPSAnVOG6oW8gdsOgIHF14bqjbiBsw70gZGFuaCBt4bulYyBjaHVuZyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmUgdGhlIGdlbmVyYWwgY2F0YWxvZyBjb21tZW50IDIuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZG1pbkdlbmVyYWxDYXRhbG9nIGNvbmZpZ3VyYXRpb24gaW4gdGhlIGFkbWluIGFyZWEuJ30gPQogICAgICAgICfEkMSDbmcga8O9IG3DtC3EkXVuIMSR4buDIGPhuqV1IGjDrG5oIEFkbWluR2VuZXJhbENhdGFsb2cgdHJvbmcgZ2lhbyBkaeG7h24gcXXhuqNuIHRy4buLJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0dlbmVyYWwgQ2F0YWxvZyd9ID0gJ0RhbmggbeG7pWMgY2h1bmcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFyYW1ldGVycyBmb3IgdGhlIGV4YW1wbGUgY29tbWVudCAyIG9mIHRoZSBnZW5lcmFsIGNhdGFsb2cgYXR0cmlidXRlcy4nfSA9CiAgICAgICAgJ1RoYW0gc+G7kSBjaG8gY2jDuiB0aMOtY2ggdGjhu6kgMiBj4bunYSB0aHXhu5ljIHTDrW5oIGRhbmggbeG7pWMgY2h1bmcuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcmFtZXRlcnMgZm9yIHRoZSBleGFtcGxlIHBlcm1pc3Npb24gZ3JvdXBzIG9mIHRoZSBnZW5lcmFsIGNhdGFsb2cgYXR0cmlidXRlcy4nfSA9CiAgICAgICAgJ1RoYW0gc+G7kSBjaG8gbmjDs20gY+G6pXAgcGjDqXAgY+G7p2EgdGh14buZYyB0w61uaCBkYW5oIG3hu6VjIGNodW5nLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQZXJtaXNzaW9uIEdyb3VwJ30gPSAnJzsKCgogICAgcHVzaCBAeyAkU2VsZi0+e0phdmFTY3JpcHRTdHJpbmdzfSAvLyBbXSB9LCAoCiAgICAnQ2FuY2VsJywKICAgICdXYXJuaW5nJywKICAgICdXYXJuaW5nIGluY2lkZW50IHN0YXRlIGNhbiBub3QgYmUgc2V0IHRvIGludmFsaWQuJywKICAgICk7Cgp9CgoxOwo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAyMS0yMDIyIFpudW55IEdtYkgsIGh0dHBzOi8vem51bnkub3JnLwojIC0tCiMgVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKIyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9ncGwtMy4wLnR4dC4KIyAtLQoKcGFja2FnZSBLZXJuZWw6Okxhbmd1YWdlOjp6aF9DTl9HZW5lcmFsQ2F0YWxvZzsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKdXNlIHV0Zjg7CgpzdWIgRGF0YSB7CiAgICBteSAkU2VsZiA9IHNoaWZ0OwoKICAgICMgVFQgVGVtcGxhdGU6IEtlcm5lbC9PdXRwdXQvSFRNTC9UZW1wbGF0ZXMvU3RhbmRhcmQvQUFBR2VuZXJhbENhdGFsb2cudHQKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Z1bmN0aW9uYWxpdHknfSA9ICflip/og70nOwoKICAgICMgVFQgVGVtcGxhdGU6IEtlcm5lbC9PdXRwdXQvSFRNTC9UZW1wbGF0ZXMvU3RhbmRhcmQvQWRtaW5HZW5lcmFsQ2F0YWxvZy50dAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnR2VuZXJhbCBDYXRhbG9nIE1hbmFnZW1lbnQnfSA9ICfnm67lvZXnrqHnkIYnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSXRlbXMgaW4gQ2xhc3MnfSA9ICdYWFjku6XkuIvmnaHnm67lsZ7kuo7nsbsnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRWRpdCBJdGVtJ30gPSAn57yW6L6R5p2h55uuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBDbGFzcyd9ID0gJ+a3u+WKoOexuyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgSXRlbSd9ID0gJ+a3u+WKoOadoeebric7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgQ2F0YWxvZyBJdGVtJ30gPSAn5re75Yqg55uu5b2V6aG555uuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBDYXRhbG9nIENsYXNzJ30gPSAn5re75Yqg5paw55uu5b2V57G7JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NhdGFsb2cgQ2xhc3MnfSA9ICfnm67lvZXnsbsnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRWRpdCBDYXRhbG9nIEl0ZW0nfSA9ICfnvJbovpHnm67lvZXpobnnm64nOwoKICAgICMgSlMgRmlsZTogdmFyL2h0dHBkL2h0ZG9jcy9qcy9JVFNNLkdlbmVyYWxDYXRhbG9nLmpzCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXYXJuaW5nIGluY2lkZW50IHN0YXRlIGNhbiBub3QgYmUgc2V0IHRvIGludmFsaWQuJ30gPSAn6K2m5ZGK5LqL5Lu254q25oCB5LiN6IO96K6+572u5Li65peg5pWI44CCJzsKCiAgICAjIFN5c0NvbmZpZwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29tbWVudCAyJ30gPSAn5rOo6YeKMic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDcmVhdGUgYW5kIG1hbmFnZSB0aGUgR2VuZXJhbCBDYXRhbG9nLid9ID0gJ+WIm+W7uuWSjOeuoeeQhuebruW9leOAgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmUgdGhlIGdlbmVyYWwgY2F0YWxvZyBjb21tZW50IDIuJ30gPSAn5a6a5LmJ6YCa55So55uu5b2V5rOo6YeKMuOAgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgQWRtaW5HZW5lcmFsQ2F0YWxvZyBjb25maWd1cmF0aW9uIGluIHRoZSBhZG1pbiBhcmVhLid9ID0KICAgICAgICAn5Zyo57O757uf566h55CG5Lit5rOo5YaM55uu5b2V566h55CG5qih5Z2XQWRtaW5HZW5lcmFsQ2F0YWxvZ+eahOWJjeerr+aooeWdl+OAgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydHZW5lcmFsIENhdGFsb2cnfSA9ICfnm67lvZUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFyYW1ldGVycyBmb3IgdGhlIGV4YW1wbGUgY29tbWVudCAyIG9mIHRoZSBnZW5lcmFsIGNhdGFsb2cgYXR0cmlidXRlcy4nfSA9CiAgICAgICAgJ+ebruW9leWxnuaAp+agt+S+iy3ms6jph4oy55qE5Y+C5pWw6K6+572u44CCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcmFtZXRlcnMgZm9yIHRoZSBleGFtcGxlIHBlcm1pc3Npb24gZ3JvdXBzIG9mIHRoZSBnZW5lcmFsIGNhdGFsb2cgYXR0cmlidXRlcy4nfSA9CiAgICAgICAgJ+ebruW9leWxnuaAp+agt+S+iy3mnYPpmZDnu4TnmoTlj4LmlbDjgIInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGVybWlzc2lvbiBHcm91cCd9ID0gJ+adg+mZkOe7hCc7CgoKICAgIHB1c2ggQHsgJFNlbGYtPntKYXZhU2NyaXB0U3RyaW5nc30gLy8gW10gfSwgKAogICAgJ0NhbmNlbCcsCiAgICAnV2FybmluZycsCiAgICAnV2FybmluZyBpbmNpZGVudCBzdGF0ZSBjYW4gbm90IGJlIHNldCB0byBpbnZhbGlkLicsCiAgICApOwoKfQoKMTsK
IyAtLQojIENvcHlyaWdodCAoQykgMjAyMS0yMDIyIFpudW55IEdtYkgsIGh0dHBzOi8vem51bnkub3JnLwojIC0tCiMgVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKIyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9ncGwtMy4wLnR4dC4KIyAtLQoKcGFja2FnZSBLZXJuZWw6Okxhbmd1YWdlOjp6aF9UV19HZW5lcmFsQ2F0YWxvZzsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKdXNlIHV0Zjg7CgpzdWIgRGF0YSB7CiAgICBteSAkU2VsZiA9IHNoaWZ0OwoKICAgICMgVFQgVGVtcGxhdGU6IEtlcm5lbC9PdXRwdXQvSFRNTC9UZW1wbGF0ZXMvU3RhbmRhcmQvQUFBR2VuZXJhbENhdGFsb2cudHQKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Z1bmN0aW9uYWxpdHknfSA9ICflip/og70nOwoKICAgICMgVFQgVGVtcGxhdGU6IEtlcm5lbC9PdXRwdXQvSFRNTC9UZW1wbGF0ZXMvU3RhbmRhcmQvQWRtaW5HZW5lcmFsQ2F0YWxvZy50dAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnR2VuZXJhbCBDYXRhbG9nIE1hbmFnZW1lbnQnfSA9ICfnm67pjITnrqHnkIYnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSXRlbXMgaW4gQ2xhc3MnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRWRpdCBJdGVtJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBDbGFzcyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgSXRlbSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgQ2F0YWxvZyBJdGVtJ30gPSAn5re75Yqg55uu6YyE6aCF55uuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBDYXRhbG9nIENsYXNzJ30gPSAn5re75Yqg5paw55uu6YyE6aGe5YilJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NhdGFsb2cgQ2xhc3MnfSA9ICfnm67pjITpoZ7liKUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRWRpdCBDYXRhbG9nIEl0ZW0nfSA9ICcnOwoKICAgICMgSlMgRmlsZTogdmFyL2h0dHBkL2h0ZG9jcy9qcy9JVFNNLkdlbmVyYWxDYXRhbG9nLmpzCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXYXJuaW5nIGluY2lkZW50IHN0YXRlIGNhbiBub3QgYmUgc2V0IHRvIGludmFsaWQuJ30gPSAnJzsKCiAgICAjIFN5c0NvbmZpZwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29tbWVudCAyJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NyZWF0ZSBhbmQgbWFuYWdlIHRoZSBHZW5lcmFsIENhdGFsb2cuJ30gPSAn5Ym15bu65ZKM566h55CG55uu6YyEJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZSB0aGUgZ2VuZXJhbCBjYXRhbG9nIGNvbW1lbnQgMi4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFkbWluR2VuZXJhbENhdGFsb2cgY29uZmlndXJhdGlvbiBpbiB0aGUgYWRtaW4gYXJlYS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydHZW5lcmFsIENhdGFsb2cnfSA9ICfnm67pjIQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFyYW1ldGVycyBmb3IgdGhlIGV4YW1wbGUgY29tbWVudCAyIG9mIHRoZSBnZW5lcmFsIGNhdGFsb2cgYXR0cmlidXRlcy4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJhbWV0ZXJzIGZvciB0aGUgZXhhbXBsZSBwZXJtaXNzaW9uIGdyb3VwcyBvZiB0aGUgZ2VuZXJhbCBjYXRhbG9nIGF0dHJpYnV0ZXMuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGVybWlzc2lvbiBHcm91cCd9ID0gJyc7CgoKICAgIHB1c2ggQHsgJFNlbGYtPntKYXZhU2NyaXB0U3RyaW5nc30gLy8gW10gfSwgKAogICAgJ0NhbmNlbCcsCiAgICAnV2FybmluZycsCiAgICAnV2FybmluZyBpbmNpZGVudCBzdGF0ZSBjYW4gbm90IGJlIHNldCB0byBpbnZhbGlkLicsCiAgICApOwoKfQoKMTsK
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIxIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDIxLTIwMjIgWm51bnkgR21iSCwgaHR0cHM6Ly96bnVueS5vcmcvCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0zLjAudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6TW9kdWxlczo6QWRtaW5HZW5lcmFsQ2F0YWxvZzsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKCm91ciAkT2JqZWN0TWFuYWdlckRpc2FibGVkID0gMTsKCnN1YiBuZXcgewogICAgbXkgKCAkVHlwZSwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGFsbG9jYXRlIG5ldyBoYXNoIGZvciBvYmplY3QKICAgIG15ICRTZWxmID0geyVQYXJhbX07CiAgICBibGVzcyggJFNlbGYsICRUeXBlICk7CgogICAgcmV0dXJuICRTZWxmOwp9CgpzdWIgUnVuIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBnZXQgbmVlZGVkIG9iamVjdAogICAgbXkgJENvbmZpZ09iamVjdCAgICAgICAgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKTsKICAgIG15ICRQYXJhbU9iamVjdCAgICAgICAgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpXZWI6OlJlcXVlc3QnKTsKICAgIG15ICRMYXlvdXRPYmplY3QgICAgICAgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6T3V0cHV0OjpIVE1MOjpMYXlvdXQnKTsKICAgIG15ICRWYWxpZE9iamVjdCAgICAgICAgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpWYWxpZCcpOwogICAgbXkgJEdlbmVyYWxDYXRhbG9nT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkdlbmVyYWxDYXRhbG9nJyk7CgogICAgJExheW91dE9iamVjdC0+QWRkSlNEYXRhKAogICAgICAgIEtleSAgID0+ICdHZW5lcmFsQ2F0YWxvZzo6RnJvbnRlbmQ6OkpTQ29sb3JQaWNrZXJQYXRoJywKICAgICAgICBWYWx1ZSA9PiAkQ29uZmlnT2JqZWN0LT5HZXQoJ0dlbmVyYWxDYXRhbG9nOjpGcm9udGVuZDo6SlNDb2xvclBpY2tlclBhdGgnKSwKICAgICk7CgogICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwogICAgIyBjYXRhbG9nIGl0ZW0gbGlzdAogICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwogICAgaWYgKCAkU2VsZi0+e1N1YmFjdGlvbn0gZXEgJ0l0ZW1MaXN0JyApIHsKICAgICAgICBteSAkQ2xhc3MgPSAkUGFyYW1PYmplY3QtPkdldFBhcmFtKCBQYXJhbSA9PiAiQ2xhc3MiICkgfHwgJyc7CgogICAgICAgICMgY2hlY2sgbmVlZGVkIGNsYXNzCiAgICAgICAgaWYgKCAhJENsYXNzICkgewogICAgICAgICAgICByZXR1cm4gJExheW91dE9iamVjdC0+UmVkaXJlY3QoIE9QID0+ICJBY3Rpb249JFNlbGYtPntBY3Rpb259IiApOwogICAgICAgIH0KCiAgICAgICAgIyBvdXRwdXQgb3ZlcnZpZXcKICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgTmFtZSA9PiAnT3ZlcnZpZXcnLAogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIFBhcmFtICAgICA9PiBcJVBhcmFtLAogICAgICAgICAgICAgICAgQ2xhc3MgICAgID0+ICRDbGFzcywKICAgICAgICAgICAgICAgIFN1YmFjdGlvbiA9PiAkU2VsZi0+e1N1YmFjdGlvbn0sCiAgICAgICAgICAgIH0sCiAgICAgICAgKTsKICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgTmFtZSA9PiAnT3ZlcnZpZXdJdGVtJywKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAlUGFyYW0sCiAgICAgICAgICAgICAgICBDbGFzcyA9PiAkQ2xhc3MsCiAgICAgICAgICAgIH0sCiAgICAgICAgKTsKCiAgICAgICAgIyBnZXQgYXZhaWxhYmlsaXR5IGxpc3QKICAgICAgICBteSAlVmFsaWRMaXN0ID0gJFZhbGlkT2JqZWN0LT5WYWxpZExpc3QoKTsKCiAgICAgICAgIyBnZXQgY2F0YWxvZyBpdGVtIGxpc3QKICAgICAgICBteSAkSXRlbUlETGlzdCA9ICRHZW5lcmFsQ2F0YWxvZ09iamVjdC0+SXRlbUxpc3QoCiAgICAgICAgICAgIENsYXNzID0+ICRDbGFzcywKICAgICAgICAgICAgVmFsaWQgPT4gMCwKICAgICAgICApOwoKICAgICAgICAjIGNoZWNrIGl0ZW0gbGlzdAogICAgICAgIGlmICggISRJdGVtSURMaXN0IHx8ICEleyRJdGVtSURMaXN0fSApIHsKICAgICAgICAgICAgcmV0dXJuICRMYXlvdXRPYmplY3QtPkVycm9yU2NyZWVuKCk7CiAgICAgICAgfQoKICAgICAgICBmb3IgbXkgJEl0ZW1JRCAoIHNvcnQgeyAkSXRlbUlETGlzdC0+eyRhfSBjbXAgJEl0ZW1JRExpc3QtPnskYn0gfSBrZXlzICV7JEl0ZW1JRExpc3R9ICkgewoKICAgICAgICAgICAgIyBnZXQgaXRlbSBkYXRhCiAgICAgICAgICAgIG15ICRJdGVtRGF0YSA9ICRHZW5lcmFsQ2F0YWxvZ09iamVjdC0+SXRlbUdldCgKICAgICAgICAgICAgICAgIEl0ZW1JRCA9PiAkSXRlbUlELAogICAgICAgICAgICApOwoKICAgICAgICAgICAgIyBvdXRwdXQgb3ZlcnZpZXcgaXRlbSBsaXN0CiAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICAgICAgTmFtZSA9PiAnT3ZlcnZpZXdJdGVtTGlzdCcsCiAgICAgICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgICAgICAleyRJdGVtRGF0YX0sCiAgICAgICAgICAgICAgICAgICAgVmFsaWQgPT4gJFZhbGlkTGlzdHsgJEl0ZW1EYXRhLT57VmFsaWRJRH0gfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICAjIEFjdGlvbk92ZXJ2aWV3CiAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgIE5hbWUgPT4gJ0FjdGlvbkFkZEl0ZW0nLAogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgICVQYXJhbSwKICAgICAgICAgICAgICAgIENsYXNzID0+ICRDbGFzcywKICAgICAgICAgICAgfSwKICAgICAgICApOwoKICAgICAgICAjIEFjdGlvbk92ZXJ2aWV3CiAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgIE5hbWUgPT4gJ0FjdGlvbk92ZXJ2aWV3JywKICAgICAgICApOwoKICAgICAgICAjIG91dHB1dCBoZWFkZXIgYW5kIG5hdmJhcgogICAgICAgIG15ICRPdXRwdXQgPSAkTGF5b3V0T2JqZWN0LT5IZWFkZXIoKTsKICAgICAgICAkT3V0cHV0IC49ICRMYXlvdXRPYmplY3QtPk5hdmlnYXRpb25CYXIoKTsKCiAgICAgICAgIyBjcmVhdGUgb3V0cHV0IHN0cmluZwogICAgICAgICRPdXRwdXQgLj0gJExheW91dE9iamVjdC0+T3V0cHV0KAogICAgICAgICAgICBUZW1wbGF0ZUZpbGUgPT4gJ0FkbWluR2VuZXJhbENhdGFsb2cnLAogICAgICAgICAgICBEYXRhICAgICAgICAgPT4gXCVQYXJhbSwKICAgICAgICApOwoKICAgICAgICAjIGFkZCBmb290ZXIKICAgICAgICAkT3V0cHV0IC49ICRMYXlvdXRPYmplY3QtPkZvb3RlcigpOwoKICAgICAgICByZXR1cm4gJE91dHB1dDsKICAgIH0KCiAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiAgICAjIGNhdGFsb2cgaXRlbSBlZGl0CiAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiAgICBlbHNpZiAoICRTZWxmLT57U3ViYWN0aW9ufSBlcSAnSXRlbUVkaXQnICkgewogICAgICAgIG15ICVJdGVtRGF0YTsKCiAgICAgICAgIyBnZXQgcGFyYW1zCiAgICAgICAgJEl0ZW1EYXRhe0l0ZW1JRH0gPSAkUGFyYW1PYmplY3QtPkdldFBhcmFtKCBQYXJhbSA9PiAiSXRlbUlEIiApOwoKICAgICAgICAjIGFkZCBhIG5ldyBjYXRhbG9nIGl0ZW0KICAgICAgICBpZiAoICRJdGVtRGF0YXtJdGVtSUR9IGVxICdORVcnICkgewoKICAgICAgICAgICAgIyBnZXQgY2xhc3MKICAgICAgICAgICAgJEl0ZW1EYXRhe0NsYXNzfSA9ICRQYXJhbU9iamVjdC0+R2V0UGFyYW0oIFBhcmFtID0+ICJDbGFzcyIgKTsKCiAgICAgICAgICAgICMgcmVkaXJlY3QgdG8gb3ZlcnZpZXcKICAgICAgICAgICAgaWYgKCAhJEl0ZW1EYXRhe0NsYXNzfSApIHsKICAgICAgICAgICAgICAgIHJldHVybiAkTGF5b3V0T2JqZWN0LT5SZWRpcmVjdCggT1AgPT4gIkFjdGlvbj0kU2VsZi0+e0FjdGlvbn0iICk7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgICMgZWRpdCBhbiBleGlzdGluZyBjYXRhbG9nIGl0ZW0KICAgICAgICBlbHNlIHsKCiAgICAgICAgICAgICMgZ2V0IGl0ZW0gZGF0YQogICAgICAgICAgICBteSAkSXRlbURhdGFSZWYgPSAkR2VuZXJhbENhdGFsb2dPYmplY3QtPkl0ZW1HZXQoCiAgICAgICAgICAgICAgICBJdGVtSUQgPT4gJEl0ZW1EYXRhe0l0ZW1JRH0sCiAgICAgICAgICAgICk7CgogICAgICAgICAgICAjIFNlbmQgZGF0YSB0byBKUyBpZiB0aGVyZSBpcyBhIHNwZWNpZmljIHNjcmVlbiAoJ1dhcm5pbmcnIGl0ZW0gaW4gJ0lUU006OkNvcmU6OkluY2lkZW50U3RhdGUnIGNsYXNzKS4KICAgICAgICAgICAgIyBTZWUgYnVnIzE0NjgyLgogICAgICAgICAgICBpZiAoICRJdGVtRGF0YVJlZi0+e0NsYXNzfSBlcSAnSVRTTTo6Q29yZTo6SW5jaWRlbnRTdGF0ZScgJiYgJEl0ZW1EYXRhUmVmLT57TmFtZX0gZXEgJ1dhcm5pbmcnICkgewogICAgICAgICAgICAgICAgJExheW91dE9iamVjdC0+QWRkSlNEYXRhKAogICAgICAgICAgICAgICAgICAgIEtleSAgID0+ICdXYXJuaW5nSW5jaWRlbnRTdGF0ZScsCiAgICAgICAgICAgICAgICAgICAgVmFsdWUgPT4gMSwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMgY2hlY2sgaXRlbSBkYXRhCiAgICAgICAgICAgIGlmICggISRJdGVtRGF0YVJlZiApIHsKICAgICAgICAgICAgICAgIHJldHVybiAkTGF5b3V0T2JqZWN0LT5FcnJvclNjcmVlbigpOwogICAgICAgICAgICB9CgogICAgICAgICAgICAlSXRlbURhdGEgPSAleyRJdGVtRGF0YVJlZn07CiAgICAgICAgfQoKICAgICAgICAjIG91dHB1dCBvdmVydmlldwogICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICBOYW1lID0+ICdPdmVydmlldycsCiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgJVBhcmFtLAogICAgICAgICAgICAgICAgQ2xhc3MgICAgID0+ICRJdGVtRGF0YXtDbGFzc30sCiAgICAgICAgICAgICAgICBTdWJhY3Rpb24gPT4gJFNlbGYtPntTdWJhY3Rpb259LAogICAgICAgICAgICAgICAgSXRlbU5hbWUgID0+ICRJdGVtRGF0YXtOYW1lfSwKICAgICAgICAgICAgICAgIEl0ZW1FZGl0ICA9PiAkSXRlbURhdGF7SXRlbUlEfSBlcSAnTkVXJyA/IDAgOiAxLAogICAgICAgICAgICB9LAogICAgICAgICk7CgogICAgICAgICMgZ2VuZXJhdGUgVmFsaWRPcHRpb25TdHJnCiAgICAgICAgbXkgJVZhbGlkTGlzdCAgICAgICAgPSAkVmFsaWRPYmplY3QtPlZhbGlkTGlzdCgpOwogICAgICAgIG15ICVWYWxpZExpc3RSZXZlcnNlID0gcmV2ZXJzZSAlVmFsaWRMaXN0OwogICAgICAgIG15ICRWYWxpZE9wdGlvblN0cmcgID0gJExheW91dE9iamVjdC0+QnVpbGRTZWxlY3Rpb24oCiAgICAgICAgICAgIE5hbWUgICAgICAgPT4gJ1ZhbGlkSUQnLAogICAgICAgICAgICBEYXRhICAgICAgID0+IFwlVmFsaWRMaXN0LAogICAgICAgICAgICBTZWxlY3RlZElEID0+ICRJdGVtRGF0YXtWYWxpZElEfSB8fCAkVmFsaWRMaXN0UmV2ZXJzZXt2YWxpZH0sCiAgICAgICAgICAgIENsYXNzICAgICAgPT4gJ01vZGVybml6ZScsCiAgICAgICAgKTsKCiAgICAgICAgIyBvdXRwdXQgSXRlbUVkaXQKICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgTmFtZSA9PiAnSXRlbUVkaXQnLAogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgICVJdGVtRGF0YSwKICAgICAgICAgICAgICAgIFZhbGlkT3B0aW9uU3RyZyA9PiAkVmFsaWRPcHRpb25TdHJnLAogICAgICAgICAgICAgICAgSXRlbUVkaXQgICAgICAgID0+ICRJdGVtRGF0YXtJdGVtSUR9IGVxICdORVcnID8gMCA6IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgKTsKCiAgICAgICAgIyBzaG93IGVhY2ggcHJlZmVyZW5jZXMgc2V0dGluZwogICAgICAgIG15ICVQcmVmZXJlbmNlcyA9ICgpOwogICAgICAgIGlmICggJENvbmZpZ09iamVjdC0+R2V0KCdHZW5lcmFsQ2F0YWxvZ1ByZWZlcmVuY2VzJykgKSB7CiAgICAgICAgICAgICVQcmVmZXJlbmNlcyA9ICV7ICRDb25maWdPYmplY3QtPkdldCgnR2VuZXJhbENhdGFsb2dQcmVmZXJlbmNlcycpIH07CiAgICAgICAgfQoKICAgICAgICBJVEVNOgogICAgICAgIGZvciBteSAkSXRlbSAoIHNvcnQga2V5cyAlUHJlZmVyZW5jZXMgKSB7CgogICAgICAgICAgICAjIHNraXAgaXRlbXMgdGhhdCBkb24ndCBiZWxvbmcgdG8gdGhlIGNsYXNzCiAgICAgICAgICAgIGlmICggJFByZWZlcmVuY2VzeyRJdGVtfS0+e0NsYXNzfSAmJiAkUHJlZmVyZW5jZXN7JEl0ZW19LT57Q2xhc3N9IG5lICRJdGVtRGF0YXtDbGFzc30gKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBuZXh0IElURU07CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMgZmluZCBvdXRwdXQgbW9kdWxlCiAgICAgICAgICAgIG15ICRNb2R1bGUgPSAkUHJlZmVyZW5jZXN7JEl0ZW19LT57TW9kdWxlfQogICAgICAgICAgICAgICAgfHwgJ0tlcm5lbDo6T3V0cHV0OjpIVE1MOjpHZW5lcmFsQ2F0YWxvZ1ByZWZlcmVuY2VzOjpHZW5lcmljJzsKCiAgICAgICAgICAgICMgbG9hZCBtb2R1bGUKICAgICAgICAgICAgaWYgKCAhJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06Ok1haW4nKS0+UmVxdWlyZSgkTW9kdWxlKSApIHsKICAgICAgICAgICAgICAgIHJldHVybiAkTGF5b3V0T2JqZWN0LT5GYXRhbEVycm9yKCk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMgY3JlYXRlIG9iamVjdCBmb3IgdGhpcyBwcmVmZXJlbmNlcyBpdGVtCiAgICAgICAgICAgIG15ICRPYmplY3QgPSAkTW9kdWxlLT5uZXcoCiAgICAgICAgICAgICAgICAleyRTZWxmfSwKICAgICAgICAgICAgICAgIENvbmZpZ0l0ZW0gPT4gJFByZWZlcmVuY2VzeyRJdGVtfSwKICAgICAgICAgICAgICAgIERlYnVnICAgICAgPT4gJFNlbGYtPntEZWJ1Z30sCiAgICAgICAgICAgICk7CgogICAgICAgICAgICAjIHNob3cgYWxsIHBhcmFtZXRlcnMKICAgICAgICAgICAgbXkgQFBhcmFtcyA9ICRPYmplY3QtPlBhcmFtKCBHZW5lcmFsQ2F0YWxvZ0RhdGEgPT4geyAlSXRlbURhdGEsICVQYXJhbSB9ICk7CiAgICAgICAgICAgIGZvciBteSAkUGFyYW1JdGVtIChAUGFyYW1zKSB7CgogICAgICAgICAgICAgICAgaWYgKAogICAgICAgICAgICAgICAgICAgIHJlZiggJFBhcmFtSXRlbS0+e0RhdGF9ICkgZXEgJ0hBU0gnCiAgICAgICAgICAgICAgICAgICAgfHwgcmVmKCAkUHJlZmVyZW5jZXN7JEl0ZW19LT57RGF0YX0gKSBlcSAnSEFTSCcKICAgICAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgJFBhcmFtSXRlbS0+eydPcHRpb24nfSA9ICRMYXlvdXRPYmplY3QtPkJ1aWxkU2VsZWN0aW9uKAogICAgICAgICAgICAgICAgICAgICAgICAleyAkUHJlZmVyZW5jZXN7JEl0ZW19IH0sCiAgICAgICAgICAgICAgICAgICAgICAgICV7JFBhcmFtSXRlbX0sCiAgICAgICAgICAgICAgICAgICAgICAgIENsYXNzICAgICAgID0+ICdNb2Rlcm5pemUnLAogICAgICAgICAgICAgICAgICAgICAgICBUcmFuc2xhdGlvbiA9PiAwLAogICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiAkUGFyYW1JdGVtLT57QmxvY2t9IHx8ICRQcmVmZXJlbmNlc3skSXRlbX0tPntCbG9ja30gfHwgJ09wdGlvbicsCiAgICAgICAgICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICV7ICRQcmVmZXJlbmNlc3skSXRlbX0gfSwKICAgICAgICAgICAgICAgICAgICAgICAgJXskUGFyYW1JdGVtfSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgaWYgKCAkSXRlbURhdGF7Q2xhc3N9IGVxICdORVcnICkgewoKICAgICAgICAgICAgIyBvdXRwdXQgSXRlbUVkaXRDbGFzc0FkZAogICAgICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgICAgIE5hbWUgPT4gJ0l0ZW1FZGl0Q2xhc3NBZGQnLAogICAgICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAgICAgQ2xhc3MgPT4gJEl0ZW1EYXRhe0NsYXNzfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgICAgIGVsc2UgewoKICAgICAgICAgICAgIyBvdXRwdXQgSXRlbUVkaXRDbGFzc0V4aXN0CiAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICAgICAgTmFtZSA9PiAnSXRlbUVkaXRDbGFzc0V4aXN0JywKICAgICAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgICAgIENsYXNzID0+ICRJdGVtRGF0YXtDbGFzc30sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgIyBBY3Rpb25PdmVydmlldwogICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICBOYW1lID0+ICdBY3Rpb25PdmVydmlldycsCiAgICAgICAgKTsKCiAgICAgICAgIyBvdXRwdXQgaGVhZGVyCiAgICAgICAgbXkgJE91dHB1dCA9ICRMYXlvdXRPYmplY3QtPkhlYWRlcigpOwogICAgICAgICRPdXRwdXQgLj0gJExheW91dE9iamVjdC0+TmF2aWdhdGlvbkJhcigpOwoKICAgICAgICAjIGNyZWF0ZSBvdXRwdXQgc3RyaW5nCiAgICAgICAgJE91dHB1dCAuPSAkTGF5b3V0T2JqZWN0LT5PdXRwdXQoCiAgICAgICAgICAgIFRlbXBsYXRlRmlsZSA9PiAnQWRtaW5HZW5lcmFsQ2F0YWxvZycsCiAgICAgICAgICAgIERhdGEgICAgICAgICA9PiBcJVBhcmFtLAogICAgICAgICk7CgogICAgICAgICMgYWRkIGZvb3RlcgogICAgICAgICRPdXRwdXQgLj0gJExheW91dE9iamVjdC0+Rm9vdGVyKCk7CgogICAgICAgIHJldHVybiAkT3V0cHV0OwogICAgfQoKICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKICAgICMgY2F0YWxvZyBpdGVtIHNhdmUKICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKICAgIGVsc2lmICggJFNlbGYtPntTdWJhY3Rpb259IGVxICdJdGVtU2F2ZScgKSB7CiAgICAgICAgbXkgJUl0ZW1EYXRhOwoKICAgICAgICAjIGdldCBwYXJhbXMKICAgICAgICBmb3IgbXkgJFBhcmFtIChxdyhDbGFzcyBJdGVtSUQgVmFsaWRJRCBDb21tZW50KSkgewogICAgICAgICAgICAkSXRlbURhdGF7JFBhcmFtfSA9ICRQYXJhbU9iamVjdC0+R2V0UGFyYW0oIFBhcmFtID0+ICRQYXJhbSApIHx8ICcnOwogICAgICAgIH0KCiAgICAgICAgIyBnZXQgbmFtZSBwYXJhbSwgbmFtZSBtdXN0IGJlIG5vdCBlbXB0eSwgYnV0IG51bWJlciB6ZXJvICgwKSBpcyBhbGxvd2VkCiAgICAgICAgJEl0ZW1EYXRhe05hbWV9ID0gJFBhcmFtT2JqZWN0LT5HZXRQYXJhbSggUGFyYW0gPT4gJ05hbWUnICk7CgogICAgICAgICMgY2hlY2sgY2xhc3MKICAgICAgICBpZiAoICRJdGVtRGF0YXtDbGFzc30gZXEgJ05FVycgKSB7CiAgICAgICAgICAgIHJldHVybiAkTGF5b3V0T2JqZWN0LT5SZWRpcmVjdCggT1AgPT4gIkFjdGlvbj0kU2VsZi0+e0FjdGlvbn0iICk7CiAgICAgICAgfQoKICAgICAgICAjIHNhdmUgdG8gZGF0YWJhc2UKICAgICAgICBteSAkU3VjY2VzczsKICAgICAgICBteSAkSXRlbUlEID0gJEl0ZW1EYXRhe0l0ZW1JRH07CiAgICAgICAgaWYgKCAkSXRlbURhdGF7SXRlbUlEfSBlcSAnTkVXJyApIHsKICAgICAgICAgICAgJFN1Y2Nlc3MgPSAkR2VuZXJhbENhdGFsb2dPYmplY3QtPkl0ZW1BZGQoCiAgICAgICAgICAgICAgICAlSXRlbURhdGEsCiAgICAgICAgICAgICAgICBVc2VySUQgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICAgICApOwogICAgICAgICAgICAkSXRlbUlEID0gJFN1Y2Nlc3M7CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICAkU3VjY2VzcyA9ICRHZW5lcmFsQ2F0YWxvZ09iamVjdC0+SXRlbVVwZGF0ZSgKICAgICAgICAgICAgICAgICVJdGVtRGF0YSwKICAgICAgICAgICAgICAgIFVzZXJJRCA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICAjIHVwZGF0ZSBwcmVmZXJlbmNlcwogICAgICAgIG15ICRHQ0RhdGEgICAgICA9ICRHZW5lcmFsQ2F0YWxvZ09iamVjdC0+SXRlbUdldCggSXRlbUlEID0+ICRJdGVtSUQgKTsKICAgICAgICBteSAlUHJlZmVyZW5jZXMgPSAoKTsKICAgICAgICBteSAkTm90ZSAgICAgICAgPSAnJzsKCiAgICAgICAgaWYgKCAkQ29uZmlnT2JqZWN0LT5HZXQoJ0dlbmVyYWxDYXRhbG9nUHJlZmVyZW5jZXMnKSApIHsKICAgICAgICAgICAgJVByZWZlcmVuY2VzID0gJXsgJENvbmZpZ09iamVjdC0+R2V0KCdHZW5lcmFsQ2F0YWxvZ1ByZWZlcmVuY2VzJykgfTsKICAgICAgICB9CgogICAgICAgIGZvciBteSAkSXRlbSAoIHNvcnQga2V5cyAlUHJlZmVyZW5jZXMgKSB7CiAgICAgICAgICAgIG15ICRNb2R1bGUgPSAkUHJlZmVyZW5jZXN7JEl0ZW19LT57TW9kdWxlfQogICAgICAgICAgICAgICAgfHwgJ0tlcm5lbDo6T3V0cHV0OjpIVE1MOjpHZW5lcmFsQ2F0YWxvZ1ByZWZlcmVuY2VzOjpHZW5lcmljJzsKCiAgICAgICAgICAgICMgbG9hZCBtb2R1bGUKICAgICAgICAgICAgaWYgKCAhJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06Ok1haW4nKS0+UmVxdWlyZSgkTW9kdWxlKSApIHsKICAgICAgICAgICAgICAgIHJldHVybiAkTGF5b3V0T2JqZWN0LT5GYXRhbEVycm9yKCk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIG15ICRPYmplY3QgPSAkTW9kdWxlLT5uZXcoCiAgICAgICAgICAgICAgICAleyRTZWxmfSwKICAgICAgICAgICAgICAgIENvbmZpZ0l0ZW0gPT4gJFByZWZlcmVuY2VzeyRJdGVtfSwKICAgICAgICAgICAgICAgIERlYnVnICAgICAgPT4gJFNlbGYtPntEZWJ1Z30sCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIG15IEBQYXJhbXMgPSAkT2JqZWN0LT5QYXJhbSggR2VuZXJhbENhdGFsb2dEYXRhID0+ICRHQ0RhdGEgKTsKICAgICAgICAgICAgaWYgKEBQYXJhbXMpIHsKICAgICAgICAgICAgICAgIG15ICVHZXRQYXJhbSA9ICgpOwogICAgICAgICAgICAgICAgZm9yIG15ICRQYXJhbUl0ZW0gKEBQYXJhbXMpIHsKICAgICAgICAgICAgICAgICAgICBteSBAQXJyYXkgPSAkUGFyYW1PYmplY3QtPkdldEFycmF5KCBQYXJhbSA9PiAkUGFyYW1JdGVtLT57TmFtZX0gKTsKICAgICAgICAgICAgICAgICAgICAkR2V0UGFyYW17ICRQYXJhbUl0ZW0tPntOYW1lfSB9ID0gXEBBcnJheTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGlmICgKICAgICAgICAgICAgICAgICAgICAhJE9iamVjdC0+UnVuKAogICAgICAgICAgICAgICAgICAgICAgICBHZXRQYXJhbSA9PiBcJUdldFBhcmFtLAogICAgICAgICAgICAgICAgICAgICAgICBJdGVtSUQgICA9PiAkR0NEYXRhLT57SXRlbUlEfSwKICAgICAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICROb3RlIC49ICRMYXlvdXRPYmplY3QtPk5vdGlmeSggSW5mbyA9PiAkT2JqZWN0LT5FcnJvcigpICk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIGlmICggISRTdWNjZXNzICkgewogICAgICAgICAgICByZXR1cm4gJExheW91dE9iamVjdC0+RXJyb3JTY3JlZW4oKTsKICAgICAgICB9CgogICAgICAgIG15ICRDb250aW51ZUFmdGVyU2F2ZSA9ICRQYXJhbU9iamVjdC0+R2V0UGFyYW0oIFBhcmFtID0+ICdDb250aW51ZUFmdGVyU2F2ZScgKTsKICAgICAgICBpZiAoJENvbnRpbnVlQWZ0ZXJTYXZlKSB7CiAgICAgICAgICAgIHJldHVybiAkTGF5b3V0T2JqZWN0LT5SZWRpcmVjdCgKICAgICAgICAgICAgICAgIE9QID0+ICJBY3Rpb249JFNlbGYtPntBY3Rpb259O1N1YmFjdGlvbj1JdGVtRWRpdDtDbGFzcz0kSXRlbURhdGF7Q2xhc3N9O0l0ZW1JRD0kSXRlbURhdGF7SXRlbUlEfSIKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgICMgcmVkaXJlY3QgdG8gb3ZlcnZpZXcgY2xhc3MgbGlzdAogICAgICAgIHJldHVybiAkTGF5b3V0T2JqZWN0LT5SZWRpcmVjdCgKICAgICAgICAgICAgT1AgPT4gIkFjdGlvbj0kU2VsZi0+e0FjdGlvbn07U3ViYWN0aW9uPUl0ZW1MaXN0O0NsYXNzPSRJdGVtRGF0YXtDbGFzc30iCiAgICAgICAgKTsKICAgIH0KCiAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiAgICAjIG92ZXJ2aWV3CiAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiAgICBlbHNlIHsKCiAgICAgICAgIyBvdXRwdXQgb3ZlcnZpZXcKICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgTmFtZSA9PiAnT3ZlcnZpZXcnLAogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgICVQYXJhbSwKICAgICAgICAgICAgfSwKICAgICAgICApOwogICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICBOYW1lID0+ICdPdmVydmlld0NsYXNzJywKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAlUGFyYW0sCiAgICAgICAgICAgIH0sCiAgICAgICAgKTsKCiAgICAgICAgIyBnZXQgY2F0YWxvZyBjbGFzcyBsaXN0CiAgICAgICAgbXkgJENsYXNzTGlzdCA9ICRHZW5lcmFsQ2F0YWxvZ09iamVjdC0+Q2xhc3NMaXN0KCk7CgogICAgICAgIGlmICggQHskQ2xhc3NMaXN0fSApIHsKCiAgICAgICAgICAgIGZvciBteSAkQ2xhc3MgKCBAeyRDbGFzc0xpc3R9ICkgewoKICAgICAgICAgICAgICAgICMgb3V0cHV0IG92ZXJ2aWV3IGNsYXNzIGxpc3QKICAgICAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICAgICAgICAgIE5hbWUgPT4gJ092ZXJ2aWV3Q2xhc3NMaXN0JywKICAgICAgICAgICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgQ2xhc3MgPT4gJENsYXNzLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAjIG90aGVyd2lzZSBpdCBkaXNwbGF5cyBhIG5vIGRhdGEgZm91bmQgbWVzc2FnZQogICAgICAgIGVsc2UgewogICAgICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgICAgIE5hbWUgPT4gJ05vRGF0YUZvdW5kTXNnJywKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgICMgQWN0aW9uQWRkQ2xhc3MKICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgTmFtZSA9PiAnQWN0aW9uQWRkQ2xhc3MnLAogICAgICAgICk7CgogICAgICAgICMgb3V0cHV0IGhlYWRlciBhbmQgbmF2YmFyCiAgICAgICAgbXkgJE91dHB1dCA9ICRMYXlvdXRPYmplY3QtPkhlYWRlcigpOwogICAgICAgICRPdXRwdXQgLj0gJExheW91dE9iamVjdC0+TmF2aWdhdGlvbkJhcigpOwoKICAgICAgICAjIGNyZWF0ZSBvdXRwdXQgc3RyaW5nCiAgICAgICAgJE91dHB1dCAuPSAkTGF5b3V0T2JqZWN0LT5PdXRwdXQoCiAgICAgICAgICAgIFRlbXBsYXRlRmlsZSA9PiAnQWRtaW5HZW5lcmFsQ2F0YWxvZycsCiAgICAgICAgICAgIERhdGEgICAgICAgICA9PiBcJVBhcmFtLAogICAgICAgICk7CgogICAgICAgICMgYWRkIGZvb3RlcgogICAgICAgICRPdXRwdXQgLj0gJExheW91dE9iamVjdC0+Rm9vdGVyKCk7CgogICAgICAgIHJldHVybiAkT3V0cHV0OwogICAgfQp9CgoxOwo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIxIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDIxLTIwMjIgWm51bnkgR21iSCwgaHR0cHM6Ly96bnVueS5vcmcvCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0zLjAudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6T3V0cHV0OjpIVE1MOjpHZW5lcmFsQ2F0YWxvZ1ByZWZlcmVuY2VzOjpHZW5lcmljOwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwoKb3VyIEBPYmplY3REZXBlbmRlbmNpZXMgPSAoCiAgICAnS2VybmVsOjpTeXN0ZW06OkdlbmVyYWxDYXRhbG9nJywKICAgICdLZXJuZWw6OlN5c3RlbTo6R3JvdXAnLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpXZWI6OlJlcXVlc3QnLAopOwoKc3ViIG5ldyB7CiAgICBteSAoICRUeXBlLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgYWxsb2NhdGUgbmV3IGhhc2ggZm9yIG9iamVjdAogICAgbXkgJFNlbGYgPSB7JVBhcmFtfTsKICAgIGJsZXNzKCAkU2VsZiwgJFR5cGUgKTsKCiAgICAjIGdldCBuZWVkZWQgcGFyYW1zCiAgICBmb3IgbXkgJE5lZWRlZCAocXcoIFVzZXJJRCBDb25maWdJdGVtICkpIHsKICAgICAgICBkaWUgIkdvdCBubyAkTmVlZGVkISIgaWYgKCAhJFNlbGYtPnskTmVlZGVkfSApOwogICAgfQoKICAgIHJldHVybiAkU2VsZjsKfQoKc3ViIFBhcmFtIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgbXkgQFBhcmFtcyA9ICgpOwogICAgbXkgJEdldFBhcmFtCiAgICAgICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6V2ViOjpSZXF1ZXN0JyktPkdldFBhcmFtKCBQYXJhbSA9PiAkU2VsZi0+e0NvbmZpZ0l0ZW19LT57UHJlZktleX0gKTsKCiAgICBpZiAoICFkZWZpbmVkKCRHZXRQYXJhbSkgKSB7CiAgICAgICAgJEdldFBhcmFtID0gZGVmaW5lZCggJFBhcmFte0dlbmVyYWxDYXRhbG9nRGF0YX0tPnsgJFNlbGYtPntDb25maWdJdGVtfS0+e1ByZWZLZXl9IH0gKQogICAgICAgICAgICA/ICRQYXJhbXtHZW5lcmFsQ2F0YWxvZ0RhdGF9LT57ICRTZWxmLT57Q29uZmlnSXRlbX0tPntQcmVmS2V5fSB9CiAgICAgICAgICAgIDogJFNlbGYtPntDb25maWdJdGVtfS0+e0RhdGFTZWxlY3RlZH07CiAgICB9CgogICAgaWYgKCAhKCBkZWZpbmVkICRTZWxmLT57Q29uZmlnSXRlbX0tPntCbG9ja30gJiYgJFNlbGYtPntDb25maWdJdGVtfS0+e0Jsb2NrfSApICkgewogICAgICAgICRTZWxmLT57Q29uZmlnSXRlbX0tPntCbG9ja30gPSAnVGV4dCc7CiAgICB9CgogICAgaWYgKCAkU2VsZi0+e0NvbmZpZ0l0ZW19LT57QmxvY2t9IGVxICdQZXJtaXNzaW9uJyApIHsKICAgICAgICAkUGFyYW17RGF0YX0gICAgICAgICA9IHsgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06Okdyb3VwJyktPkdyb3VwTGlzdCggVmFsaWQgPT4gMSApIH07CiAgICAgICAgJFBhcmFte1Bvc3NpYmxlTm9uZX0gPSAxOwogICAgICAgICRQYXJhbXtCbG9ja30gICAgICAgID0gJ09wdGlvbic7CiAgICB9CgogICAgcHVzaCgKICAgICAgICBAUGFyYW1zLAogICAgICAgIHsKICAgICAgICAgICAgJVBhcmFtLAogICAgICAgICAgICBOYW1lICAgICAgID0+ICRTZWxmLT57Q29uZmlnSXRlbX0tPntQcmVmS2V5fSwKICAgICAgICAgICAgU2VsZWN0ZWRJRCA9PiAkR2V0UGFyYW0sCiAgICAgICAgfSwKICAgICk7CgogICAgcmV0dXJuIEBQYXJhbXM7Cn0KCnN1YiBSdW4gewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICBmb3IgbXkgJEtleSAoIHNvcnQga2V5cyAleyAkUGFyYW17R2V0UGFyYW19IH0gKSB7CiAgICAgICAgbXkgQEFycmF5ID0gQHsgJFBhcmFte0dldFBhcmFtfS0+eyRLZXl9IH07CiAgICAgICAgZm9yIG15ICRWYWx1ZSAoQEFycmF5KSB7CgogICAgICAgICAgICAjIHByZWYgdXBkYXRlIGRiCiAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpHZW5lcmFsQ2F0YWxvZycpLT5HZW5lcmFsQ2F0YWxvZ1ByZWZlcmVuY2VzU2V0KAogICAgICAgICAgICAgICAgSXRlbUlEID0+ICRQYXJhbXtJdGVtSUR9LAogICAgICAgICAgICAgICAgS2V5ICAgID0+ICRLZXksCiAgICAgICAgICAgICAgICBWYWx1ZSAgPT4gJFZhbHVlLAogICAgICAgICAgICApOwogICAgICAgIH0KICAgIH0KCiAgICAkU2VsZi0+e01lc3NhZ2V9ID0gJ1ByZWZlcmVuY2VzIHVwZGF0ZWQgc3VjY2Vzc2Z1bGx5ISc7CiAgICByZXR1cm4gMTsKfQoKc3ViIEVycm9yIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgcmV0dXJuICRTZWxmLT57RXJyb3J9IHx8ICcnOwp9CgpzdWIgTWVzc2FnZSB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgIHJldHVybiAkU2VsZi0+e01lc3NhZ2V9IHx8ICcnOwp9CgoxOwo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIxIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDIxLTIwMjIgWm51bnkgR21iSCwgaHR0cHM6Ly96bnVueS5vcmcvCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0zLjAudHh0LgojIC0tCgojIENvbW1vbgpbJSBUcmFuc2xhdGUoIkZ1bmN0aW9uYWxpdHkiKSB8IGh0bWwgJV0K
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIxIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDIxLTIwMjIgWm51bnkgR21iSCwgaHR0cHM6Ly96bnVueS5vcmcvCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0zLjAudHh0LgojIC0tCgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJPdmVydmlldyIpICVdCjxkaXYgY2xhc3M9Ik1haW5Cb3ggQVJJQVJvbGVNYWluIExheW91dEZpeGVkU2lkZWJhciBTaWRlYmFyRmlyc3QiPgogICAgPGgxPlslIFRyYW5zbGF0ZSgiR2VuZXJhbCBDYXRhbG9nIE1hbmFnZW1lbnQiKSB8IGh0bWwgJV08L2gxPgoKICAgIFslIFVTRSBJdGVtc1RpdGxlID0gU3RyaW5nKFRyYW5zbGF0ZSgiSXRlbXMgaW4gQ2xhc3MiKSkgJV0KICAgIFslIFVTRSBFZGl0VGl0bGUgID0gU3RyaW5nKFRyYW5zbGF0ZSgiRWRpdCBJdGVtIikpICVdCgogICAgWyUgQnJlYWRjcnVtYlBhdGggPSBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIE5hbWUgPT4gVHJhbnNsYXRlKCdHZW5lcmFsIENhdGFsb2cgTWFuYWdlbWVudCcpLAogICAgICAgICAgICAgICAgTGluayA9PiAnQWRtaW5HZW5lcmFsQ2F0YWxvZycsCiAgICAgICAgICAgIH0sCiAgICAgICAgXTsKCiAgICAgICAgSUYgRGF0YS5DbGFzcyAmJiBEYXRhLkNsYXNzID09ICdORVcnOwoKICAgICAgICAgICAgQnJlYWRjcnVtYlBhdGgucHVzaCh7CiAgICAgICAgICAgICAgICBOYW1lID0+IFRyYW5zbGF0ZSgnQWRkIENsYXNzJyksCiAgICAgICAgICAgIH0pOwoKICAgICAgICBFTFNJRiBEYXRhLkNsYXNzOwoKICAgICAgICAgICAgQ2xhc3NVUkkgPSBEYXRhLkNsYXNzOwoKICAgICAgICAgICAgQnJlYWRjcnVtYlBhdGgucHVzaCh7CiAgICAgICAgICAgICAgICBOYW1lID0+IEl0ZW1zVGl0bGUuYXBwZW5kKCAnOiAnLCBEYXRhLkNsYXNzICksCiAgICAgICAgICAgICAgICBMaW5rID0+ICdBZG1pbkdlbmVyYWxDYXRhbG9nO1N1YmFjdGlvbj1JdGVtTGlzdDtDbGFzcz0nIF8gQ2xhc3NVUkksCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgSUYgRGF0YS5TdWJhY3Rpb24gJiYgRGF0YS5TdWJhY3Rpb24gPT0gJ0l0ZW1FZGl0JzsKICAgICAgICAgICAgICAgIEJyZWFkY3J1bWJQYXRoLnB1c2goewogICAgICAgICAgICAgICAgICAgIE5hbWUgPT4gRGF0YS5JdGVtRWRpdCA/IEVkaXRUaXRsZS5hcHBlbmQoICc6ICcsIERhdGEuSXRlbU5hbWUgKSA6IFRyYW5zbGF0ZSgnQWRkIEl0ZW0nKSwKICAgICAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgRU5EOwoKICAgICAgICBFTkQ7CiAgICAlXQoKICAgIFslIElOQ0xVREUgIkJyZWFkY3J1bWIudHQiIFBhdGggPSBCcmVhZGNydW1iUGF0aCAlXQoKICAgIDxkaXYgY2xhc3M9IlNpZGViYXJDb2x1bW4iPgogICAgICAgIDxkaXYgY2xhc3M9IldpZGdldFNpbXBsZSI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9IkhlYWRlciI+CiAgICAgICAgICAgICAgICA8aDI+WyUgVHJhbnNsYXRlKCJBY3Rpb25zIikgfCBodG1sICVdPC9oMj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9J0NvbnRlbnQnPgogICAgICAgICAgICAgICAgPHVsIGNsYXNzPSJBY3Rpb25MaXN0Ij4KWyUgUmVuZGVyQmxvY2tTdGFydCgiQWN0aW9uQWRkSXRlbSIpICVdCiAgICAgICAgICAgICAgICAgICAgPGxpPgogICAgICAgICAgICAgICAgICAgICAgICA8Zm9ybSBhY3Rpb249IlslIEVudigiQ0dJSGFuZGxlIikgJV0iIG1ldGhvZD0iZ2V0Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IkFjdGlvbiIgdmFsdWU9IlslIEVudigiQWN0aW9uIikgJV0iLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IlN1YmFjdGlvbiIgdmFsdWU9Ikl0ZW1FZGl0Ii8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJDbGFzcyIgdmFsdWU9IlslIERhdGEuQ2xhc3MgfCBodG1sICVdIi8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJJdGVtSUQiIHZhbHVlPSJORVciLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9IkNhbGxGb3JBY3Rpb24gRnVsbHNpemUgQ2VudGVyIENyZWF0ZSIgdHlwZT0ic3VibWl0IiB2YWx1ZT0iWyUgVHJhbnNsYXRlKCJBZGQiKSB8IGh0bWwgJV0iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPjxpIGNsYXNzPSJmYSBmYS1wbHVzLXNxdWFyZSI+PC9pPlslIFRyYW5zbGF0ZSgiQWRkIENhdGFsb2cgSXRlbSIpIHwgaHRtbCAlXTwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPgogICAgICAgICAgICAgICAgICAgICAgICA8L2Zvcm0+CiAgICAgICAgICAgICAgICAgICAgPC9saT4KWyUgUmVuZGVyQmxvY2tFbmQoIkFjdGlvbkFkZEl0ZW0iKSAlXQpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJBY3Rpb25BZGRDbGFzcyIpICVdCiAgICAgICAgICAgICAgICAgICAgPGxpPgogICAgICAgICAgICAgICAgICAgICAgICA8Zm9ybSBhY3Rpb249IlslIEVudigiQ0dJSGFuZGxlIikgJV0iIG1ldGhvZD0iZ2V0Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IkFjdGlvbiIgdmFsdWU9IlslIEVudigiQWN0aW9uIikgJV0iLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IlN1YmFjdGlvbiIgdmFsdWU9Ikl0ZW1FZGl0Ii8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJJdGVtSUQiIHZhbHVlPSJORVciLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IkNsYXNzIiB2YWx1ZT0iTkVXIi8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJDYWxsRm9yQWN0aW9uIEZ1bGxzaXplIENlbnRlciBDcmVhdGUiIHR5cGU9InN1Ym1pdCIgdmFsdWU9IlslIFRyYW5zbGF0ZSgiQWRkIikgfCBodG1sICVdIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj48aSBjbGFzcz0iZmEgZmEtcGx1cy1zcXVhcmUiPjwvaT5bJSBUcmFuc2xhdGUoIkFkZCBDYXRhbG9nIENsYXNzIikgfCBodG1sICVdPC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZm9ybT4KICAgICAgICAgICAgICAgICAgICA8L2xpPgpbJSBSZW5kZXJCbG9ja0VuZCgiQWN0aW9uQWRkQ2xhc3MiKSAlXQpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJBY3Rpb25PdmVydmlldyIpICVdCiAgICAgICAgICAgICAgICAgICAgPGxpPgogICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJbJSBFbnYoIkJhc2VsaW5rIikgJV1BY3Rpb249WyUgRW52KCJBY3Rpb24iKSAlXSIgY2xhc3M9IkNhbGxGb3JBY3Rpb24gRnVsbHNpemUgQ2VudGVyIj48c3Bhbj48aSBjbGFzcz0iZmEgZmEtY2FyZXQtbGVmdCI+PC9pPlslIFRyYW5zbGF0ZSgiR28gdG8gb3ZlcnZpZXciKSB8IGh0bWwgJV08L3NwYW4+PC9hPgogICAgICAgICAgICAgICAgICAgIDwvbGk+ClslIFJlbmRlckJsb2NrRW5kKCJBY3Rpb25PdmVydmlldyIpICVdCiAgICAgICAgICAgICAgICA8L3VsPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgIDwvZGl2PgoKICAgIDxkaXYgY2xhc3M9IkNvbnRlbnRDb2x1bW4iPgogICAgICAgIDxkaXYgY2xhc3M9IldpZGdldFNpbXBsZSI+ClslIFJlbmRlckJsb2NrU3RhcnQoIk92ZXJ2aWV3Q2xhc3MiKSAlXQogICAgICAgICAgICA8ZGl2IGNsYXNzPSJIZWFkZXIiPgogICAgICAgICAgICAgICAgPGgyPlslIFRyYW5zbGF0ZSgiTGlzdCIpIHwgaHRtbCAlXTwvaDI+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJDb250ZW50Ij4KICAgICAgICAgICAgICAgIDx0YWJsZSBjbGFzcz0iRGF0YVRhYmxlIj4KICAgICAgICAgICAgICAgICAgICA8dGhlYWQ+CiAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aD5bJSBUcmFuc2xhdGUoIkNhdGFsb2cgQ2xhc3MiKSB8IGh0bWwgJV08L3RoPgogICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgogICAgICAgICAgICAgICAgICAgIDwvdGhlYWQ+CiAgICAgICAgICAgICAgICAgICAgPHRib2R5PgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJPdmVydmlld0NsYXNzTGlzdCIpICVdCiAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBjbGFzcz0iQXNCbG9jayIgIGhyZWY9IlslIEVudigiQmFzZWxpbmsiKSAlXUFjdGlvbj1bJSBFbnYoIkFjdGlvbiIpICVdO1N1YmFjdGlvbj1JdGVtTGlzdDtDbGFzcz1bJSBEYXRhLkNsYXNzIHwgdXJpICVdIj5bJSBEYXRhLkNsYXNzIHwgaHRtbCAlXTwvYT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+ClslIFJlbmRlckJsb2NrRW5kKCJPdmVydmlld0NsYXNzTGlzdCIpICVdClslIFJlbmRlckJsb2NrU3RhcnQoIk5vRGF0YUZvdW5kTXNnIikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFslIFRyYW5zbGF0ZSgiTm8gZGF0YSBmb3VuZC4iKSB8IGh0bWwgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+ClslIFJlbmRlckJsb2NrRW5kKCJOb0RhdGFGb3VuZE1zZyIpICVdCiAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KICAgICAgICAgICAgICAgIDwvdGFibGU+CiAgICAgICAgICAgIDwvZGl2PgpbJSBSZW5kZXJCbG9ja0VuZCgiT3ZlcnZpZXdDbGFzcyIpICVdCgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJPdmVydmlld0l0ZW0iKSAlXQogICAgICAgICAgICA8ZGl2IGNsYXNzPSJIZWFkZXIiPgogICAgICAgICAgICAgICAgPGgyPlslIFRyYW5zbGF0ZSgiTGlzdCIpIHwgaHRtbCAlXTwvaDI+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJDb250ZW50Ij4KCiAgICAgICAgICAgICAgICA8dGFibGUgY2xhc3M9IkRhdGFUYWJsZSI+CiAgICAgICAgICAgICAgICAgICAgPHRoZWFkPgogICAgICAgICAgICAgICAgICAgICAgICA8dHI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGggY2xhc3M9Ilc2MHBjIj5bJSBUcmFuc2xhdGUoIk5hbWUiKSB8IGh0bWwgJV08L3RoPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoIGNsYXNzPSJDZW50ZXIiPlslIFRyYW5zbGF0ZSgiVmFsaWRpdHkiKSB8IGh0bWwgJV08L3RoPgogICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgogICAgICAgICAgICAgICAgICAgIDwvdGhlYWQ+CiAgICAgICAgICAgICAgICAgICAgPHRib2R5PgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJPdmVydmlld0l0ZW1MaXN0IikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgPHRyIFslIElGIERhdGEuVmFsaWRJRCAhPSAxJV1jbGFzcz0iSW52YWxpZCJbJSBFTkQgJV0+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iWyUgRW52KCJCYXNlbGluayIpICVdQWN0aW9uPVslIEVudigiQWN0aW9uIikgJV07U3ViYWN0aW9uPUl0ZW1FZGl0O0l0ZW1JRD1bJSBEYXRhLkl0ZW1JRCB8IHVyaSAlXSI+WyUgRGF0YS5OYW1lIHwgaHRtbCAlXTwvYT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9IkNlbnRlciI+WyUgVHJhbnNsYXRlKERhdGEuVmFsaWQpIHwgaHRtbCAlXTwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+ClslIFJlbmRlckJsb2NrRW5kKCJPdmVydmlld0l0ZW1MaXN0IikgJV0KICAgICAgICAgICAgICAgICAgICA8L3Rib2R5PgogICAgICAgICAgICAgICAgPC90YWJsZT4KICAgICAgICAgICAgPC9kaXY+ClslIFJlbmRlckJsb2NrRW5kKCJPdmVydmlld0l0ZW0iKSAlXQoKWyUgUmVuZGVyQmxvY2tTdGFydCgiSXRlbUVkaXQiKSAlXQogICAgICAgICAgICA8ZGl2IGNsYXNzPSJIZWFkZXIiPgogICAgICAgICAgICAgICAgPGgyPlslLQogICAgICAgICAgICAgICAgSUYgRGF0YS5DbGFzcyAmJiBEYXRhLkNsYXNzID09ICdORVcnOwogICAgICAgICAgICAgICAgICAgIFRyYW5zbGF0ZSgiQWRkIENhdGFsb2cgQ2xhc3MiKSB8IGh0bWw7CiAgICAgICAgICAgICAgICBFTFNJRiBEYXRhLkl0ZW1FZGl0OwogICAgICAgICAgICAgICAgICAgIFRyYW5zbGF0ZSgiRWRpdCBDYXRhbG9nIEl0ZW0iKSB8IGh0bWw7CiAgICAgICAgICAgICAgICBFTFNFOwogICAgICAgICAgICAgICAgICAgIFRyYW5zbGF0ZSgiQWRkIENhdGFsb2cgSXRlbSIpIHwgaHRtbDsKICAgICAgICAgICAgICAgIEVORDsKICAgICAgICAgICAgICAgICVdPC9oMj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNvbnRlbnQiPgoKICAgICAgICAgICAgICAgIDxmb3JtIGFjdGlvbj0iWyUgRW52KCJDR0lIYW5kbGUiKSAlXSIgbWV0aG9kPSJnZXQiIGNsYXNzPSJWYWxpZGF0ZSI+CiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iQWN0aW9uIiB2YWx1ZT0iWyUgRW52KCJBY3Rpb24iKSAlXSIvPgogICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IlN1YmFjdGlvbiIgdmFsdWU9Ikl0ZW1TYXZlIi8+CiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iSXRlbUlEIiB2YWx1ZT0iWyUgRGF0YS5JdGVtSUQgfCBodG1sICVdIi8+CiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iQ29udGludWVBZnRlclNhdmUiIGlkPSJDb250aW51ZUFmdGVyU2F2ZSIgdmFsdWU9IiIvPgogICAgICAgICAgICAgICAgICAgIDxmaWVsZHNldCBjbGFzcz0iVGFibGVMaWtlIj4KWyUgUmVuZGVyQmxvY2tTdGFydCgiSXRlbUVkaXRDbGFzc0FkZCIpICVdCiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz0iTWFuZGF0b3J5IiBmb3I9IkNsYXNzRHNjIj48c3BhbiBjbGFzcz0iTWFya2VyIj4qPC9zcGFuPlslIFRyYW5zbGF0ZSgiQ2F0YWxvZyBDbGFzcyIpIHwgaHRtbCAlXTo8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJGaWVsZCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0iQ2xhc3MiIGlkPSJDbGFzc0RzYyIgdmFsdWU9IlslIERhdGEuTmFtZSB8IGh0bWwgJV0iIGNsYXNzPSJXNTBwYyBWYWxpZGF0ZV9SZXF1aXJlZCIgbWF4bGVuZ3RoPSIxMDAiIC8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGlkPSJDbGFzc0RzY0Vycm9yIiBjbGFzcz0iVG9vbHRpcEVycm9yTWVzc2FnZSIgPjxwPlslIFRyYW5zbGF0ZSgiVGhpcyBmaWVsZCBpcyByZXF1aXJlZC4iKSB8IGh0bWwgJV08L3A+PC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGlkPSJDbGFzc0RzY1NlcnZlckVycm9yIiBjbGFzcz0iVG9vbHRpcEVycm9yTWVzc2FnZSI+PHA+WyUgVHJhbnNsYXRlKCJUaGlzIGZpZWxkIGlzIHJlcXVpcmVkLiIpIHwgaHRtbCAlXTwvcD48L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KWyUgUmVuZGVyQmxvY2tFbmQoIkl0ZW1FZGl0Q2xhc3NBZGQiKSAlXQpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJJdGVtRWRpdENsYXNzRXhpc3QiKSAlXQogICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWw+WyUgVHJhbnNsYXRlKCJDYXRhbG9nIENsYXNzIikgfCBodG1sICVdOiA8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJGaWVsZCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJSBEYXRhLkNsYXNzIHwgaHRtbCAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iQ2xhc3MiIHZhbHVlPSJbJSBEYXRhLkNsYXNzIHwgaHRtbCAlXSI+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+ClslIFJlbmRlckJsb2NrRW5kKCJJdGVtRWRpdENsYXNzRXhpc3QiKSAlXQogICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9Ik1hbmRhdG9yeSIgZm9yPSJOYW1lIj48c3BhbiBjbGFzcz0iTWFya2VyIj4qPC9zcGFuPlslIFRyYW5zbGF0ZSgiTmFtZSIpIHwgaHRtbCAlXTogPC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iRmllbGQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9InRleHQiIG5hbWU9Ik5hbWUiIGlkPSJOYW1lIiB2YWx1ZT0iWyUgRGF0YS5OYW1lIHwgaHRtbCAlXSIgY2xhc3M9Ilc1MHBjIFZhbGlkYXRlX1JlcXVpcmVkIiBtYXhsZW5ndGg9IjEwMCIvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBpZD0iTmFtZUVycm9yIiBjbGFzcz0iVG9vbHRpcEVycm9yTWVzc2FnZSIgPjxwPlslIFRyYW5zbGF0ZSgiVGhpcyBmaWVsZCBpcyByZXF1aXJlZC4iKSB8IGh0bWwgJV08L3A+PC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGlkPSJOYW1lU2VydmVyRXJyb3IiIGNsYXNzPSJUb29sdGlwRXJyb3JNZXNzYWdlIj48cD5bJSBUcmFuc2xhdGUoIlRoaXMgZmllbGQgaXMgcmVxdWlyZWQuIikgfCBodG1sICVdPC9wPjwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJJbnB1dEtleSIpICVdCiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9IlslIERhdGEuTmFtZSB8IGh0bWwgJV0iPlslIFRyYW5zbGF0ZShEYXRhLkxhYmVsKSB8IGh0bWwgJV0gWyUgVHJhbnNsYXRlKERhdGEuS2V5KSB8IGh0bWwgJV06IDwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJbJSBEYXRhLk5hbWUgfCBodG1sICVdIiBpZD0iWyUgRGF0YS5OYW1lIHwgaHRtbCAlXSIgdmFsdWU9IlslIERhdGEuU2VsZWN0ZWRJRCB8IGh0bWwgJV0iIGNsYXNzPSJXNTBwYyIgbWF4bGVuZ3RoPSIxMDAiLz4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KWyUgUmVuZGVyQmxvY2tFbmQoIklucHV0S2V5IikgJV0KWyUgUmVuZGVyQmxvY2tTdGFydCgiSW5wdXQiKSAlXQogICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPSJbJSBEYXRhLk5hbWUgfCBodG1sICVdIj5bJSBUcmFuc2xhdGUoRGF0YS5MYWJlbCkgfCBodG1sICVdOjxici8+CiAgICAgICAgICAgICAgICAgICAgICAgIFslIElGIChEYXRhLkRlc2MpICVdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0+KFslIFRyYW5zbGF0ZShEYXRhLkRlc2MpIHwgaHRtbCAlXSk8L2VtPgogICAgICAgICAgICAgICAgICAgICAgICBbJSBFTkQgJV0KICAgICAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iRmllbGQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9InRleHQiIG5hbWU9IlslIERhdGEuTmFtZSB8IGh0bWwgJV0iIGlkPSJbJSBEYXRhLk5hbWUgfCBodG1sICVdIiB2YWx1ZT0iWyUgRGF0YS5TZWxlY3RlZElEIHwgaHRtbCAlXSIgY2xhc3M9Ilc1MHBjIi8+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+ClslIFJlbmRlckJsb2NrRW5kKCJJbnB1dCIpICVdClslIFJlbmRlckJsb2NrU3RhcnQoIlRleHRBcmVhIikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj0iWyUgRGF0YS5OYW1lIHwgaHRtbCAlXSI+WyUgVHJhbnNsYXRlKERhdGEuTGFiZWwpIHwgaHRtbCAlXTo8YnIvPgogICAgICAgICAgICAgICAgICAgICAgICBbJSBJRiAoRGF0YS5EZXNjKSAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtPihbJSBUcmFuc2xhdGUoRGF0YS5EZXNjKSB8IGh0bWwgJV0pPC9lbT4KICAgICAgICAgICAgICAgICAgICAgICAgWyUgRU5EICVdCiAgICAgICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZXh0YXJlYSBuYW1lPSJbJSBEYXRhLk5hbWUgfCBodG1sICVdIiBpZD0iWyUgRGF0YS5OYW1lIHwgaHRtbCAlXSIgcm93cz0iWyUgRGF0YS5Sb3dzIHwgaHRtbCAlXSIgY29scz0iWyUgRGF0YS5Db2xzIHwgaHRtbCAlXSI+WyUgRGF0YS5TZWxlY3RlZElEIHwgaHRtbCAlXTwvdGV4dGFyZWE+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+ClslIFJlbmRlckJsb2NrRW5kKCJUZXh0QXJlYSIpICVdClslIFJlbmRlckJsb2NrU3RhcnQoIk9wdGlvbiIpICVdCiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9IlslIERhdGEuTmFtZSB8IGh0bWwgJV0iPlslIFRyYW5zbGF0ZShEYXRhLkxhYmVsKSB8IGh0bWwgJV0gWyUgVHJhbnNsYXRlKERhdGEuS2V5KSB8IGh0bWwgJV06PGJyLz4KICAgICAgICAgICAgICAgICAgICAgICAgWyUgSUYgKERhdGEuRGVzYykgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbT4oWyUgVHJhbnNsYXRlKERhdGEuRGVzYykgfCBodG1sICVdKTwvZW0+CiAgICAgICAgICAgICAgICAgICAgICAgIFslIEVORCAlXQogICAgICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJGaWVsZCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJSBEYXRhLk9wdGlvbiAlXQogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgpbJSBSZW5kZXJCbG9ja0VuZCgiT3B0aW9uIikgJV0KWyUgUmVuZGVyQmxvY2tTdGFydCgiVXBsb2FkIikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj0iWyUgRGF0YS5OYW1lIHwgaHRtbCAlXSI+WyUgVHJhbnNsYXRlKERhdGEuTGFiZWwpIHwgaHRtbCAlXSBbJSBUcmFuc2xhdGUoRGF0YS5LZXkpIHwgaHRtbCAlXTogPC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iRmllbGQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IG5hbWU9IlslIERhdGEuTmFtZSB8IGh0bWwgJV0iIGlkPSJbJSBEYXRhLk5hbWUgfCBodG1sICVdIiB0eXBlPSJmaWxlIiBzaXplPSIzMCIgY2xhc3M9ImZpeGVkIi8+PGJyLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiI+WyUgRGF0YS5GaWxlbmFtZSB8IGh0bWwgJV08L2E+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+ClslIFJlbmRlckJsb2NrRW5kKCJVcGxvYWQiKSAlXQpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJQYXNzd29yZCIpICVdCiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9IlslIERhdGEuTmFtZSB8IGh0bWwgJV0iPlslIFRyYW5zbGF0ZShEYXRhLkxhYmVsKSB8IGh0bWwgJV0gWyUgVHJhbnNsYXRlKERhdGEuS2V5KSB8IGh0bWwgJV06IDwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJwYXNzd29yZCIgbmFtZT0iWyUgRGF0YS5OYW1lIHwgaHRtbCAlXSIgaWQ9IlslIERhdGEuTmFtZSB8IGh0bWwgJV0iIHZhbHVlPSIiIGNsYXNzPSJXNTBwYyIvPgogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgpbJSBSZW5kZXJCbG9ja0VuZCgiUGFzc3dvcmQiKSAlXQpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJDb2xvclBpY2tlciIpICVdCiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9IlslIERhdGEuTmFtZSB8IGh0bWwgJV0iPlslIFRyYW5zbGF0ZShEYXRhLkxhYmVsKSB8IGh0bWwgJV06PGJyLz4KICAgICAgICAgICAgICAgICAgICAgICAgWyUgSUYgKERhdGEuRGVzYykgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbT4oWyUgVHJhbnNsYXRlKERhdGEuRGVzYykgfCBodG1sICVdKTwvZW0+CiAgICAgICAgICAgICAgICAgICAgICAgIFslIEVORCAlXQogICAgICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJGaWVsZCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0iWyUgRGF0YS5OYW1lIHwgaHRtbCAlXSIgaWQ9IlslIERhdGEuTmFtZSB8IGh0bWwgJV0iIHZhbHVlPSJbJSBEYXRhLlNlbGVjdGVkSUQgfCBodG1sICVdIiBjbGFzcz0iVzUwcGMiIGRhdGEtanNjb2xvcj0ie2JhY2tncm91bmRDb2xvcjogJ3JnYigyNDUsIDI0NSwgMjQ1KScsIGJvcmRlckNvbG9yOiAncmdiKDIwMSwgMjAxLCAyMDEpJywgYm9yZGVyUmFkaXVzOicwJ30iPgogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgpbJSBSZW5kZXJCbG9ja0VuZCgiQ29sb3JQaWNrZXIiKSAlXQogICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPSJWYWxpZElEIj5bJSBUcmFuc2xhdGUoIlZhbGlkaXR5IikgfCBodG1sICVdOiA8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJGaWVsZCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJSBEYXRhLlZhbGlkT3B0aW9uU3RyZyAlXQogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgoKICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj0iQ29tbWVudCI+WyUgVHJhbnNsYXRlKCJDb21tZW50IikgfCBodG1sICVdOiA8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJGaWVsZCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0iQ29tbWVudCIgaWQ9IkNvbW1lbnQiIHZhbHVlPSJbJSBEYXRhLkNvbW1lbnQgfCBodG1sICVdIiBjbGFzcz0iVzUwcGMiIG1heGxlbmd0aD0iMjAwIi8+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJGaWVsZCBTcGFjaW5nVG9wIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIFslIElGIChEYXRhLkNsYXNzICYmIERhdGEuQ2xhc3MgPT0gJ05FVycpIHx8IERhdGEuSXRlbUlEID09ICdORVcnICVdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBuYW1lPSJTdWJtaXQiIGNsYXNzPSJDYWxsRm9yQWN0aW9uIFByaW1hcnkiIGlkPSJTdWJtaXQiIHR5cGU9InN1Ym1pdCIgdmFsdWU9IlN1Ym1pdCI+PHNwYW4+WyUgVHJhbnNsYXRlKCJTYXZlIikgfCBodG1sICVdPC9zcGFuPjwvYnV0dG9uPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFslIFRyYW5zbGF0ZSgib3IiKSB8IGh0bWwgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJbJSBFbnYoIkJhc2VsaW5rIikgJV1BY3Rpb249WyUgRW52KCJBY3Rpb24iKSAlXSI+WyUgVHJhbnNsYXRlKCJDYW5jZWwiKSB8IGh0bWwgJV08L2E+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJSBFTFNFICVdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBuYW1lPSJTdWJtaXRBbmRDb250aW51ZSIgY2xhc3M9IkNhbGxGb3JBY3Rpb24gUHJpbWFyeSIgaWQ9IlN1Ym1pdEFuZENvbnRpbnVlIiB0eXBlPSJidXR0b24iIHZhbHVlPSJTdWJtaXQiPjxzcGFuPlslIFRyYW5zbGF0ZSgiU2F2ZSIpIHwgaHRtbCAlXTwvc3Bhbj48L2J1dHRvbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJSBUcmFuc2xhdGUoIm9yIikgfCBodG1sICVdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBuYW1lPSJTdWJtaXQiIGNsYXNzPSJDYWxsRm9yQWN0aW9uIFByaW1hcnkiIGlkPSJTdWJtaXQiIHR5cGU9InN1Ym1pdCIgdmFsdWU9IlN1Ym1pdCI+PHNwYW4+WyUgVHJhbnNsYXRlKCJTYXZlIGFuZCBmaW5pc2giKSB8IGh0bWwgJV08L3NwYW4+PC9idXR0b24+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyUgVHJhbnNsYXRlKCJvciIpIHwgaHRtbCAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IlslIEVudigiQmFzZWxpbmsiKSAlXUFjdGlvbj1bJSBFbnYoIkFjdGlvbiIpICVdO1N1YmFjdGlvbj1JdGVtTGlzdDtDbGFzcz1bJSBEYXRhLkNsYXNzICVdIj5bJSBUcmFuc2xhdGUoIkNhbmNlbCIpIHwgaHRtbCAlXTwvYT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIFslIEVORCAlXQogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgoKICAgICAgICAgICAgICAgICAgICA8L2ZpZWxkc2V0PgogICAgICAgICAgICAgICAgPC9mb3JtPgogICAgICAgICAgICA8L2Rpdj4KWyUgUmVuZGVyQmxvY2tFbmQoIkl0ZW1FZGl0IikgJV0KICAgICAgICA8L2Rpdj4KICAgIDwvZGl2PgogICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2Pgo8L2Rpdj4KWyUgUmVuZGVyQmxvY2tFbmQoIk92ZXJ2aWV3IikgJV0K
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIxIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDIxLTIwMjIgWm51bnkgR21iSCwgaHR0cHM6Ly96bnVueS5vcmcvCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0zLjAudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6U3lzdGVtOjpHZW5lcmFsQ2F0YWxvZzsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKCm91ciBAT2JqZWN0RGVwZW5kZW5jaWVzID0gKAogICAgJ0tlcm5lbDo6Q29uZmlnJywKICAgICdLZXJuZWw6OlN5c3RlbTo6Q2FjaGUnLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpDaGVja0l0ZW0nLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpEQicsCiAgICAnS2VybmVsOjpTeXN0ZW06OkxvZycsCiAgICAnS2VybmVsOjpTeXN0ZW06Ok1haW4nLAopOwoKPWhlYWQxIE5BTUUKCktlcm5lbDo6U3lzdGVtOjpHZW5lcmFsQ2F0YWxvZyAtIGdlbmVyYWwgY2F0YWxvZyBsaWIKCj1oZWFkMSBQVUJMSUMgSU5URVJGQUNFCgo9Y3V0Cgo9aGVhZDIgbmV3KCkKCmNyZWF0ZSBhbiBvYmplY3QKCiAgICB1c2UgS2VybmVsOjpTeXN0ZW06Ok9iamVjdE1hbmFnZXI7CiAgICBsb2NhbCAkS2VybmVsOjpPTSA9IEtlcm5lbDo6U3lzdGVtOjpPYmplY3RNYW5hZ2VyLT5uZXcoKTsKICAgIG15ICRHZW5lcmFsQ2F0YWxvZ09iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpHZW5lcmFsQ2F0YWxvZycpOwoKPWN1dAoKc3ViIG5ldyB7CiAgICBteSAoICRUeXBlLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgYWxsb2NhdGUgbmV3IGhhc2ggZm9yIG9iamVjdAogICAgbXkgJFNlbGYgPSB7fTsKICAgIGJsZXNzKCAkU2VsZiwgJFR5cGUgKTsKCiAgICAjIGxvYWQgZ2VuZXJhdG9yIHByZWZlcmVuY2VzIG1vZHVsZQogICAgbXkgJEdlbmVyYXRvck1vZHVsZSA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6Q29uZmlnJyktPkdldCgnR2VuZXJhbENhdGFsb2c6OlByZWZlcmVuY2VzTW9kdWxlJykKICAgICAgICB8fCAnS2VybmVsOjpTeXN0ZW06OkdlbmVyYWxDYXRhbG9nOjpQcmVmZXJlbmNlc0RCJzsKICAgIGlmICggJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06Ok1haW4nKS0+UmVxdWlyZSgkR2VuZXJhdG9yTW9kdWxlKSApIHsKICAgICAgICAkU2VsZi0+e1ByZWZlcmVuY2VzT2JqZWN0fSA9ICRHZW5lcmF0b3JNb2R1bGUtPm5ldyglUGFyYW0pOwogICAgfQoKICAgICMgZGVmaW5lIGNhY2hlIHNldHRpbmdzCiAgICAkU2VsZi0+e0NhY2hlVHlwZX0gPSAnR2VuZXJhbENhdGFsb2cnOwogICAgJFNlbGYtPntDYWNoZVRUTH0gID0gNjAgKiA2MCAqIDM7CgogICAgcmV0dXJuICRTZWxmOwp9Cgo9aGVhZDIgQ2xhc3NMaXN0KCkKCnJldHVybiBhbiBhcnJheSByZWZlcmVuY2Ugb2YgYWxsIGdlbmVyYWwgY2F0YWxvZyBjbGFzc2VzCgogICAgbXkgJEFycmF5UmVmID0gJEdlbmVyYWxDYXRhbG9nT2JqZWN0LT5DbGFzc0xpc3QoKTsKCj1jdXQKCnN1YiBDbGFzc0xpc3QgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGFzayBkYXRhYmFzZQogICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkRCJyktPlByZXBhcmUoCiAgICAgICAgU1FMID0+ICdTRUxFQ1QgRElTVElOQ1QoZ2VuZXJhbF9jYXRhbG9nX2NsYXNzKSAnCiAgICAgICAgICAgIC4gJ0ZST00gZ2VuZXJhbF9jYXRhbG9nIE9SREVSIEJZIGdlbmVyYWxfY2F0YWxvZ19jbGFzcycsCiAgICApOwoKICAgICMgZmV0Y2ggdGhlIHJlc3VsdAogICAgbXkgQENsYXNzTGlzdDsKICAgIHdoaWxlICggbXkgQFJvdyA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEQicpLT5GZXRjaHJvd0FycmF5KCkgKSB7CiAgICAgICAgcHVzaCBAQ2xhc3NMaXN0LCAkUm93WzBdOwogICAgfQoKICAgICMgY2FjaGUgdGhlIHJlc3VsdAogICAgbXkgJENhY2hlS2V5ID0gJ0NsYXNzTGlzdCc7CiAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6Q2FjaGUnKS0+U2V0KAogICAgICAgIFR5cGUgID0+ICRTZWxmLT57Q2FjaGVUeXBlfSwKICAgICAgICBUVEwgICA9PiAkU2VsZi0+e0NhY2hlVFRMfSwKICAgICAgICBLZXkgICA9PiAkQ2FjaGVLZXksCiAgICAgICAgVmFsdWUgPT4gXEBDbGFzc0xpc3QsCiAgICApOwoKICAgIHJldHVybiBcQENsYXNzTGlzdDsKfQoKPWhlYWQyIENsYXNzUmVuYW1lKCkKCnJlbmFtZSBhIGdlbmVyYWwgY2F0YWxvZyBjbGFzcwoKICAgIG15ICRUcnVlID0gJEdlbmVyYWxDYXRhbG9nT2JqZWN0LT5DbGFzc1JlbmFtZSgKICAgICAgICBDbGFzc09sZCA9PiAnSVRTTTo6Q29uZmlnSXRlbTo6U3RhdGUnLAogICAgICAgIENsYXNzTmV3ID0+ICdJVFNNOjpDb25maWdJdGVtOjpEZXBsb3ltZW50U3RhdGUnLAogICAgKTsKCj1jdXQKCnN1YiBDbGFzc1JlbmFtZSB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBmb3IgbXkgJEFyZ3VtZW50IChxdyhDbGFzc09sZCBDbGFzc05ldykpIHsKICAgICAgICBpZiAoICEkUGFyYW17JEFyZ3VtZW50fSApIHsKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJEFyZ3VtZW50ISIsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgIyBjbGVhbnVwIGdpdmVuIHBhcmFtcwogICAgZm9yIG15ICRBcmd1bWVudCAocXcoQ2xhc3NPbGQgQ2xhc3NOZXcpKSB7CiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkNoZWNrSXRlbScpLT5TdHJpbmdDbGVhbigKICAgICAgICAgICAgU3RyaW5nUmVmICAgICAgICAgPT4gXCRQYXJhbXskQXJndW1lbnR9LAogICAgICAgICAgICBSZW1vdmVBbGxOZXdsaW5lcyA9PiAxLAogICAgICAgICAgICBSZW1vdmVBbGxUYWJzICAgICA9PiAxLAogICAgICAgICAgICBSZW1vdmVBbGxTcGFjZXMgICA9PiAxLAogICAgICAgICk7CiAgICB9CgogICAgcmV0dXJuIDEgaWYgJFBhcmFte0NsYXNzTmV3fSBlcSAkUGFyYW17Q2xhc3NPbGR9OwoKICAgICMgY2hlY2sgaWYgbmV3IGNsYXNzIG5hbWUgYWxyZWFkeSBleGlzdHMKICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEQicpLT5QcmVwYXJlKAogICAgICAgIFNRTCAgID0+ICdTRUxFQ1QgaWQgRlJPTSBnZW5lcmFsX2NhdGFsb2cgV0hFUkUgZ2VuZXJhbF9jYXRhbG9nX2NsYXNzID0gPycsCiAgICAgICAgQmluZCAgPT4gWyBcJFBhcmFte0NsYXNzTmV3fSBdLAogICAgICAgIExpbWl0ID0+IDEsCiAgICApOwoKICAgICMgZmV0Y2ggdGhlIHJlc3VsdAogICAgbXkgJEFscmVhZHlFeGlzdHMgPSAwOwogICAgd2hpbGUgKCBteSBAUm93ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkRCJyktPkZldGNocm93QXJyYXkoKSApIHsKICAgICAgICAkQWxyZWFkeUV4aXN0cyA9IDE7CiAgICB9CgogICAgaWYgKCRBbHJlYWR5RXhpc3RzKSB7CiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJDYW4ndCByZW5hbWUgY2xhc3MgJFBhcmFte0NsYXNzT2xkfSEgTmV3IGNsYXNzbmFtZSBhbHJlYWR5IGV4aXN0cy4iCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgIyByZXNldCBjYWNoZQogICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkNhY2hlJyktPkNsZWFuVXAoCiAgICAgICAgVHlwZSA9PiAkU2VsZi0+e0NhY2hlVHlwZX0sCiAgICApOwoKICAgICMgcmVuYW1lIGdlbmVyYWwgY2F0YWxvZyBjbGFzcwogICAgcmV0dXJuICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEQicpLT5EbygKICAgICAgICBTUUwgPT4gJ1VQREFURSBnZW5lcmFsX2NhdGFsb2cgU0VUIGdlbmVyYWxfY2F0YWxvZ19jbGFzcyA9ID8gJwogICAgICAgICAgICAuICdXSEVSRSBnZW5lcmFsX2NhdGFsb2dfY2xhc3MgPSA/JywKICAgICAgICBCaW5kID0+IFsgXCRQYXJhbXtDbGFzc05ld30sIFwkUGFyYW17Q2xhc3NPbGR9IF0sCiAgICApOwp9Cgo9aGVhZDIgSXRlbUxpc3QoKQoKcmV0dXJucyBhIGxpc3QgYXMgYSBoYXNoIHJlZmVyZW5jZSBvZiBvbmUgZ2VuZXJhbCBjYXRhbG9nIGNsYXNzCgogICAgbXkgJEhhc2hSZWYgPSAkR2VuZXJhbENhdGFsb2dPYmplY3QtPkl0ZW1MaXN0KAogICAgICAgIENsYXNzICAgICAgICAgPT4gJ0lUU006OlNlcnZpY2U6OlR5cGUnLAogICAgICAgIFZhbGlkICAgICAgICAgPT4gMCwgICAgICAgICAgICAgICAgICAgICAgIyAob3B0aW9uYWwpIGRlZmF1bHQgMQogICAgICAgIFByZWZlcmVuY2VzICAgPT4geyAgICAgICAgICAgICAgICAgICAgICAgIyAob3B0aW9uYWwpIGRlZmF1bHQge30KICAgICAgICAgICAgUGVybWlzc2lvbiA9PiAyLCAgICAgICAgICAgICAgICAgICAgICMgb3Igd2hhdGV2ZXIgcHJlZmVyZW5jZXMgY2FuIGJlIHVzZWQKICAgICAgICB9LAogICAgKTsKCj1jdXQKCnN1YiBJdGVtTGlzdCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBpZiAoICEkUGFyYW17Q2xhc3N9ICkgewogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAnTmVlZCBDbGFzcyEnCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgIyBzZXQgZGVmYXVsdCB2YWx1ZQogICAgaWYgKCAhZGVmaW5lZCAkUGFyYW17VmFsaWR9ICkgewogICAgICAgICRQYXJhbXtWYWxpZH0gPSAxOwogICAgfQoKICAgIG15ICRQcmVmZXJlbmNlc0NhY2hlS2V5ID0gJyc7CiAgICBteSAkUHJlZmVyZW5jZXNUYWJsZSAgICA9ICcnOwogICAgbXkgJFByZWZlcmVuY2VzV2hlcmUgICAgPSAnJzsKICAgIG15IEBQcmVmZXJlbmNlc0JpbmQ7CgogICAgIyBoYW5kbGUgZ2l2ZW4gcHJlZmVyZW5jZXMKICAgIGlmICggZXhpc3RzICRQYXJhbXtQcmVmZXJlbmNlc30gJiYgcmVmICRQYXJhbXtQcmVmZXJlbmNlc30gZXEgJ0hBU0gnICkgewoKICAgICAgICAkUHJlZmVyZW5jZXNUYWJsZSA9ICcsIGdlbmVyYWxfY2F0YWxvZ19wcmVmZXJlbmNlcyc7CiAgICAgICAgbXkgQFdoZXJlczsKCiAgICAgICAgIyBhZGQgYWxsIHByZWZlcmVuY2VzIGdpdmVuIHRvIHdoZXJlLWNsYXVzZQogICAgICAgIGZvciBteSAkS2V5ICggc29ydCBrZXlzICV7ICRQYXJhbXtQcmVmZXJlbmNlc30gfSApIHsKCiAgICAgICAgICAgIGlmICggcmVmKCAkUGFyYW17UHJlZmVyZW5jZXN9LT57JEtleX0gKSBuZSAnQVJSQVknICkgewogICAgICAgICAgICAgICAgJFBhcmFte1ByZWZlcmVuY2VzfS0+eyRLZXl9ID0gWyAkUGFyYW17UHJlZmVyZW5jZXN9LT57JEtleX0gXTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgcHVzaCBAV2hlcmVzLCAnKHByZWZfa2V5ID0gPyBBTkQgcHJlZl92YWx1ZSBJTiAoJwogICAgICAgICAgICAgICAgLiBqb2luKCAnLCAnLCBtYXAgeyc/J30gQHsgJFBhcmFte1ByZWZlcmVuY2VzfS0+eyRLZXl9IH0gKQogICAgICAgICAgICAgICAgLiAnKSknOwoKICAgICAgICAgICAgcHVzaCBAUHJlZmVyZW5jZXNCaW5kLCBcJEtleSwgbWFwIHsgXCRfIH0gQHsgJFBhcmFte1ByZWZlcmVuY2VzfS0+eyRLZXl9IH07CgogICAgICAgICAgICAjIGFkZCBmdW5jdGlvbmFsaXR5IGxpc3QgdG8gY2FjaGUga2V5CiAgICAgICAgICAgICRQcmVmZXJlbmNlc0NhY2hlS2V5IC49ICcjIyMjJyBpZiAkUHJlZmVyZW5jZXNDYWNoZUtleTsKICAgICAgICAgICAgJFByZWZlcmVuY2VzQ2FjaGVLZXkgLj0gam9pbiBxeyMjIyN9LCAkS2V5LCBtYXAgeyRffSBAeyAkUGFyYW17UHJlZmVyZW5jZXN9LT57JEtleX0gfTsKICAgICAgICB9CgogICAgICAgICRQcmVmZXJlbmNlc1doZXJlID0gJ0FORCBnZW5lcmFsX2NhdGFsb2cuaWQgPSBnZW5lcmFsX2NhdGFsb2dfcHJlZmVyZW5jZXMuZ2VuZXJhbF9jYXRhbG9nX2lkJzsKICAgICAgICAkUHJlZmVyZW5jZXNXaGVyZSAuPSAnIEFORCAnIC4gam9pbiAnIEFORCAnLCBAV2hlcmVzOwogICAgfQoKICAgICMgY3JlYXRlIHNxbCBzdHJpbmcKICAgIG15ICRTUUwgPSAiU0VMRUNUIGlkLCBuYW1lIEZST00gZ2VuZXJhbF9jYXRhbG9nICRQcmVmZXJlbmNlc1RhYmxlICIKICAgICAgICAuICJXSEVSRSBnZW5lcmFsX2NhdGFsb2dfY2xhc3MgPSA/ICRQcmVmZXJlbmNlc1doZXJlICI7CiAgICBteSBAQklORCA9ICggXCRQYXJhbXtDbGFzc30sIEBQcmVmZXJlbmNlc0JpbmQgKTsKCiAgICAjIGFkZCB2YWxpZCBzdHJpbmcgdG8gc3FsIHN0cmluZwogICAgaWYgKCAkUGFyYW17VmFsaWR9ICkgewogICAgICAgICRTUUwgLj0gJ0FORCB2YWxpZF9pZCA9IDEgJzsKICAgIH0KCiAgICAjIGNyZWF0ZSBjYWNoZSBrZXkKICAgIG15ICRDYWNoZUtleSA9ICdJdGVtTGlzdDo6JyAuICRQYXJhbXtDbGFzc30gLiAnIyMjIycgLiAkUGFyYW17VmFsaWR9IC4gJyMjIyMnIC4gJFByZWZlcmVuY2VzQ2FjaGVLZXk7CgogICAgIyBjaGVjayBpZiByZXN1bHQgaXMgYWxyZWFkeSBjYWNoZWQKICAgIG15ICRDYWNoZSA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpDYWNoZScpLT5HZXQoCiAgICAgICAgVHlwZSA9PiAkU2VsZi0+e0NhY2hlVHlwZX0sCiAgICAgICAgS2V5ICA9PiAkQ2FjaGVLZXksCiAgICApOwogICAgcmV0dXJuICRDYWNoZSBpZiAkQ2FjaGU7CgogICAgIyBhc2sgZGF0YWJhc2UKICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEQicpLT5QcmVwYXJlKAogICAgICAgIFNRTCAgPT4gJFNRTCwKICAgICAgICBCaW5kID0+IFxAQklORCwKICAgICk7CgogICAgIyBmZXRjaCB0aGUgcmVzdWx0CiAgICBteSAlRGF0YTsKICAgIHdoaWxlICggbXkgQFJvdyA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEQicpLT5GZXRjaHJvd0FycmF5KCkgKSB7CiAgICAgICAgJERhdGF7ICRSb3dbMF0gfSA9ICRSb3dbMV07CiAgICB9CgogICAgIyBqdXN0IHJldHVybiB3aXRob3V0IGxvZ2dpbmcgYW4gZXJyb3IgYW5kIHdpdGhvdXQgY2FjaGluZyB0aGUgZW1wdHkgcmVzdWx0CiAgICByZXR1cm4gaWYgISVEYXRhOwoKICAgICMgY2FjaGUgdGhlIHJlc3VsdAogICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkNhY2hlJyktPlNldCgKICAgICAgICBUeXBlICA9PiAkU2VsZi0+e0NhY2hlVHlwZX0sCiAgICAgICAgVFRMICAgPT4gJFNlbGYtPntDYWNoZVRUTH0sCiAgICAgICAgS2V5ICAgPT4gJENhY2hlS2V5LAogICAgICAgIFZhbHVlID0+IFwlRGF0YSwKICAgICk7CgogICAgcmV0dXJuIFwlRGF0YTsKfQoKPWhlYWQyIEl0ZW1HZXQoKQoKZ2V0IGl0ZW0gYXR0cmlidXRlcwoKICAgIG15ICRJdGVtRGF0YVJlZiA9ICRHZW5lcmFsQ2F0YWxvZ09iamVjdC0+SXRlbUdldCgKICAgICAgICBJdGVtSUQgPT4gMywKICAgICk7CgogICAgb3IKCiAgICBteSAkSXRlbURhdGFSZWYgPSAkR2VuZXJhbENhdGFsb2dPYmplY3QtPkl0ZW1HZXQoCiAgICAgICAgQ2xhc3MgPT4gJ0lUU006OlNlcnZpY2U6OlR5cGUnLAogICAgICAgIE5hbWUgID0+ICdVbmRlcnBpbm5pbmcgQ29udHJhY3QnLAogICAgKTsKCnJldHVybnMKCiAgICBteSAkSXRlbSA9IHsKICAgICAgICAnSXRlbUlEJyAgICAgPT4gJzIzJywKICAgICAgICAnQ2xhc3MnICAgICAgPT4gJ0lUU006OlNlcnZpY2U6OlR5cGUnLAogICAgICAgICdOYW1lJyAgICAgICA9PiAnVW5kZXJwaW5uaW5nIENvbnRyYWN0JwogICAgICAgICdDb21tZW50JyAgICA9PiAnU29tZSBDb21tZW50JywKICAgICAgICAnVmFsaWRJRCcgICAgPT4gJzEnLAogICAgICAgICdDcmVhdGVUaW1lJyA9PiAnMjAxMi0wMS0xMiAwOTozNjoyNCcsCiAgICAgICAgJ0NyZWF0ZUJ5JyAgID0+ICcxJywKICAgICAgICAnQ2hhbmdlVGltZScgPT4gJzIwMTItMDEtMTIgMDk6MzY6MjQnLAogICAgICAgICdDaGFuZ2VCeScgICA9PiAnMScsCiAgICB9OwoKPWN1dAoKc3ViIEl0ZW1HZXQgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgaWYgKCAhJFBhcmFte0l0ZW1JRH0gJiYgKCAhJFBhcmFte0NsYXNzfSB8fCAkUGFyYW17TmFtZX0gZXEgJycgKSApIHsKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gJ05lZWQgSXRlbUlEIE9SIENsYXNzIGFuZCBOYW1lIScKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAjIGNyZWF0ZSBzcWwgc3RyaW5nCiAgICBteSAkU1FMID0gJ1NFTEVDVCBpZCwgZ2VuZXJhbF9jYXRhbG9nX2NsYXNzLCBuYW1lLCB2YWxpZF9pZCwgY29tbWVudHMsICcKICAgICAgICAuICdjcmVhdGVfdGltZSwgY3JlYXRlX2J5LCBjaGFuZ2VfdGltZSwgY2hhbmdlX2J5IEZST00gZ2VuZXJhbF9jYXRhbG9nIFdIRVJFICc7CiAgICBteSBAQklORDsKCiAgICAjIGFkZCBvcHRpb25zIHRvIHNxbCBzdHJpbmcKICAgIGlmICggJFBhcmFte0NsYXNzfSAmJiAkUGFyYW17TmFtZX0gbmUgJycgKSB7CgogICAgICAgICMgY2hlY2sgaWYgcmVzdWx0IGlzIGFscmVhZHkgY2FjaGVkCiAgICAgICAgbXkgJENhY2hlS2V5ID0gJ0l0ZW1HZXQ6OkNsYXNzOjonIC4gJFBhcmFte0NsYXNzfSAuICc6OicgLiAkUGFyYW17TmFtZX07CiAgICAgICAgbXkgJENhY2hlICAgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkNhY2hlJyktPkdldCgKICAgICAgICAgICAgVHlwZSA9PiAkU2VsZi0+e0NhY2hlVHlwZX0sCiAgICAgICAgICAgIEtleSAgPT4gJENhY2hlS2V5LAogICAgICAgICk7CiAgICAgICAgcmV0dXJuICRDYWNoZSBpZiAkQ2FjaGU7CgogICAgICAgICMgYWRkIGNsYXNzIGFuZCBuYW1lIHRvIHNxbCBzdHJpbmcKICAgICAgICAkU1FMIC49ICdnZW5lcmFsX2NhdGFsb2dfY2xhc3MgPSA/IEFORCBuYW1lID0gPyc7CiAgICAgICAgcHVzaCBAQklORCwgKCBcJFBhcmFte0NsYXNzfSwgXCRQYXJhbXtOYW1lfSApOwogICAgfQogICAgZWxzZSB7CgogICAgICAgICMgY2hlY2sgaWYgcmVzdWx0IGlzIGFscmVhZHkgY2FjaGVkCiAgICAgICAgbXkgJENhY2hlS2V5ID0gJ0l0ZW1HZXQ6Okl0ZW1JRDo6JyAuICRQYXJhbXtJdGVtSUR9OwogICAgICAgIG15ICRDYWNoZSAgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpDYWNoZScpLT5HZXQoCiAgICAgICAgICAgIFR5cGUgPT4gJFNlbGYtPntDYWNoZVR5cGV9LAogICAgICAgICAgICBLZXkgID0+ICRDYWNoZUtleSwKICAgICAgICApOwogICAgICAgIHJldHVybiAkQ2FjaGUgaWYgJENhY2hlOwoKICAgICAgICAjIGFkZCBpdGVtIGlkIHRvIHNxbCBzdHJpbmcKICAgICAgICAkU1FMIC49ICdpZCA9ID8nOwogICAgICAgIHB1c2ggQEJJTkQsIFwkUGFyYW17SXRlbUlEfTsKICAgIH0KCiAgICAjIGFzayBkYXRhYmFzZQogICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkRCJyktPlByZXBhcmUoCiAgICAgICAgU1FMICAgPT4gJFNRTCwKICAgICAgICBCaW5kICA9PiBcQEJJTkQsCiAgICAgICAgTGltaXQgPT4gMSwKICAgICk7CgogICAgIyBmZXRjaCB0aGUgcmVzdWx0CiAgICBteSAlSXRlbURhdGE7CiAgICB3aGlsZSAoIG15IEBSb3cgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6REInKS0+RmV0Y2hyb3dBcnJheSgpICkgewogICAgICAgICRJdGVtRGF0YXtJdGVtSUR9ICAgICA9ICRSb3dbMF07CiAgICAgICAgJEl0ZW1EYXRhe0NsYXNzfSAgICAgID0gJFJvd1sxXTsKICAgICAgICAkSXRlbURhdGF7TmFtZX0gICAgICAgPSAkUm93WzJdOwogICAgICAgICRJdGVtRGF0YXtWYWxpZElEfSAgICA9ICRSb3dbM107CiAgICAgICAgJEl0ZW1EYXRhe0NvbW1lbnR9ICAgID0gJFJvd1s0XSB8fCAnJzsKICAgICAgICAkSXRlbURhdGF7Q3JlYXRlVGltZX0gPSAkUm93WzVdOwogICAgICAgICRJdGVtRGF0YXtDcmVhdGVCeX0gICA9ICRSb3dbNl07CiAgICAgICAgJEl0ZW1EYXRhe0NoYW5nZVRpbWV9ID0gJFJvd1s3XTsKICAgICAgICAkSXRlbURhdGF7Q2hhbmdlQnl9ICAgPSAkUm93WzhdOwogICAgfQoKICAgICMgY2hlY2sgaXRlbQogICAgaWYgKCAhJEl0ZW1EYXRhe0l0ZW1JRH0gKSB7CiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICdJdGVtIG5vdCBmb3VuZCBpbiBkYXRhYmFzZSEnLAogICAgICAgICk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgICMgZ2V0IGdlbmVyYWwgY2F0YWxvZyBwcmVmZXJlbmNlcwogICAgbXkgJVByZWZlcmVuY2VzID0gJFNlbGYtPkdlbmVyYWxDYXRhbG9nUHJlZmVyZW5jZXNHZXQoIEl0ZW1JRCA9PiAkSXRlbURhdGF7SXRlbUlEfSApOwoKICAgICMgbWVyZ2UgaGFzaAogICAgaWYgKCVQcmVmZXJlbmNlcykgewogICAgICAgICVJdGVtRGF0YSA9ICggJUl0ZW1EYXRhLCAlUHJlZmVyZW5jZXMgKTsKICAgIH0KCiAgICAjIGNhY2hlIHRoZSByZXN1bHQKICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpDYWNoZScpLT5TZXQoCiAgICAgICAgVHlwZSAgPT4gJFNlbGYtPntDYWNoZVR5cGV9LAogICAgICAgIFRUTCAgID0+ICRTZWxmLT57Q2FjaGVUVEx9LAogICAgICAgIEtleSAgID0+ICdJdGVtR2V0OjpDbGFzczo6JyAuICRJdGVtRGF0YXtDbGFzc30gLiAnOjonIC4gJEl0ZW1EYXRhe05hbWV9LAogICAgICAgIFZhbHVlID0+IFwlSXRlbURhdGEsCiAgICApOwogICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkNhY2hlJyktPlNldCgKICAgICAgICBUeXBlICA9PiAkU2VsZi0+e0NhY2hlVHlwZX0sCiAgICAgICAgVFRMICAgPT4gJFNlbGYtPntDYWNoZVRUTH0sCiAgICAgICAgS2V5ICAgPT4gJ0l0ZW1HZXQ6Okl0ZW1JRDo6JyAuICRJdGVtRGF0YXtJdGVtSUR9LAogICAgICAgIFZhbHVlID0+IFwlSXRlbURhdGEsCiAgICApOwoKICAgIHJldHVybiBcJUl0ZW1EYXRhOwp9Cgo9aGVhZDIgSXRlbUFkZCgpCgphZGQgYSBuZXcgZ2VuZXJhbCBjYXRhbG9nIGl0ZW0KCiAgICBteSAkSXRlbUlEID0gJEdlbmVyYWxDYXRhbG9nT2JqZWN0LT5JdGVtQWRkKAogICAgICAgIENsYXNzICAgICAgICAgPT4gJ0lUU006OlNlcnZpY2U6OlR5cGUnLAogICAgICAgIE5hbWUgICAgICAgICAgPT4gJ0l0ZW0gTmFtZScsCiAgICAgICAgVmFsaWRJRCAgICAgICA9PiAxLAogICAgICAgIENvbW1lbnQgICAgICAgPT4gJ0NvbW1lbnQnLCAgICAgICAgICAgICAgIyAob3B0aW9uYWwpCiAgICAgICAgVXNlcklEICAgICAgICA9PiAxLAogICAgKTsKCj1jdXQKCnN1YiBJdGVtQWRkIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGZvciBteSAkQXJndW1lbnQgKHF3KENsYXNzIFZhbGlkSUQgVXNlcklEKSkgewogICAgICAgIGlmICggISRQYXJhbXskQXJndW1lbnR9ICkgewogICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCAkQXJndW1lbnQhIiwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KCiAgICAjIG5hbWUgbXVzdCBiZSBub3QgZW1wdHksIGJ1dCBudW1iZXIgemVybyAoMCkgaXMgYWxsb3dlZAogICAgaWYgKCAhKCBkZWZpbmVkICRQYXJhbXtOYW1lfSApIHx8ICEoIGxlbmd0aCAkUGFyYW17TmFtZX0gKSApIHsKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgTmFtZSEiLAogICAgICAgICk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgICMgc2V0IGRlZmF1bHQgdmFsdWVzCiAgICBmb3IgbXkgJEFyZ3VtZW50IChxdyhDb21tZW50KSkgewogICAgICAgICRQYXJhbXskQXJndW1lbnR9IHx8PSAnJzsKICAgIH0KCiAgICAjIGNsZWFudXAgZ2l2ZW4gcGFyYW1zCiAgICBmb3IgbXkgJEFyZ3VtZW50IChxdyhDbGFzcykpIHsKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6Q2hlY2tJdGVtJyktPlN0cmluZ0NsZWFuKAogICAgICAgICAgICBTdHJpbmdSZWYgICAgICAgICA9PiBcJFBhcmFteyRBcmd1bWVudH0sCiAgICAgICAgICAgIFJlbW92ZUFsbE5ld2xpbmVzID0+IDEsCiAgICAgICAgICAgIFJlbW92ZUFsbFRhYnMgICAgID0+IDEsCiAgICAgICAgICAgIFJlbW92ZUFsbFNwYWNlcyAgID0+IDEsCiAgICAgICAgKTsKICAgIH0KICAgIGZvciBteSAkQXJndW1lbnQgKHF3KE5hbWUgQ29tbWVudCkpIHsKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6Q2hlY2tJdGVtJyktPlN0cmluZ0NsZWFuKAogICAgICAgICAgICBTdHJpbmdSZWYgICAgICAgICA9PiBcJFBhcmFteyRBcmd1bWVudH0sCiAgICAgICAgICAgIFJlbW92ZUFsbE5ld2xpbmVzID0+IDEsCiAgICAgICAgICAgIFJlbW92ZUFsbFRhYnMgICAgID0+IDEsCiAgICAgICAgKTsKICAgIH0KCiAgICAjIGZpbmQgZXhpdGluZyBpdGVtIHdpdGggc2FtZSBuYW1lCiAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6REInKS0+UHJlcGFyZSgKICAgICAgICBTUUwgPT4gJ1NFTEVDVCBpZCBGUk9NIGdlbmVyYWxfY2F0YWxvZyAnCiAgICAgICAgICAgIC4gJ1dIRVJFIGdlbmVyYWxfY2F0YWxvZ19jbGFzcyA9ID8gQU5EIG5hbWUgPSA/JywKICAgICAgICBCaW5kICA9PiBbIFwkUGFyYW17Q2xhc3N9LCBcJFBhcmFte05hbWV9IF0sCiAgICAgICAgTGltaXQgPT4gMSwKICAgICk7CgogICAgIyBmZXRjaCB0aGUgcmVzdWx0CiAgICBteSAkTm9BZGQ7CiAgICB3aGlsZSAoICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEQicpLT5GZXRjaHJvd0FycmF5KCkgKSB7CiAgICAgICAgJE5vQWRkID0gMTsKICAgIH0KCiAgICAjIGFib3J0IGluc2VydCBvZiBuZXcgaXRlbSwgaWYgaXRlbSBuYW1lIGFscmVhZHkgZXhpc3RzCiAgICBpZiAoJE5vQWRkKSB7CiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgPT4KICAgICAgICAgICAgICAgICJDYW4ndCBhZGQgbmV3IGl0ZW0hIEdlbmVyYWwgY2F0YWxvZyBpdGVtIHdpdGggc2FtZSBuYW1lICgkUGFyYW17TmFtZX0pIGFscmVhZHkgZXhpc3RzIGluIHRoaXMgY2xhc3MgKCRQYXJhbXtDbGFzc30pLiIsCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgIyByZXNldCBjYWNoZQogICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkNhY2hlJyktPkNsZWFuVXAoCiAgICAgICAgVHlwZSA9PiAkU2VsZi0+e0NhY2hlVHlwZX0sCiAgICApOwoKICAgICMgaW5zZXJ0IG5ldyBpdGVtCiAgICByZXR1cm4gaWYgISRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEQicpLT5EbygKICAgICAgICBTUUwgPT4gJ0lOU0VSVCBJTlRPIGdlbmVyYWxfY2F0YWxvZyAnCiAgICAgICAgICAgIC4gJyhnZW5lcmFsX2NhdGFsb2dfY2xhc3MsIG5hbWUsIHZhbGlkX2lkLCBjb21tZW50cywgJwogICAgICAgICAgICAuICdjcmVhdGVfdGltZSwgY3JlYXRlX2J5LCBjaGFuZ2VfdGltZSwgY2hhbmdlX2J5KSBWQUxVRVMgJwogICAgICAgICAgICAuICcoPywgPywgPywgPywgY3VycmVudF90aW1lc3RhbXAsID8sIGN1cnJlbnRfdGltZXN0YW1wLCA/KScsCiAgICAgICAgQmluZCA9PiBbCiAgICAgICAgICAgIFwkUGFyYW17Q2xhc3N9LCBcJFBhcmFte05hbWV9LAogICAgICAgICAgICBcJFBhcmFte1ZhbGlkSUR9LAogICAgICAgICAgICBcJFBhcmFte0NvbW1lbnR9LCBcJFBhcmFte1VzZXJJRH0sCiAgICAgICAgICAgIFwkUGFyYW17VXNlcklEfSwKICAgICAgICBdLAogICAgKTsKCiAgICAjIGZpbmQgaWQgb2YgbmV3IGl0ZW0KICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEQicpLT5QcmVwYXJlKAogICAgICAgIFNRTCA9PiAnU0VMRUNUIGlkIEZST00gZ2VuZXJhbF9jYXRhbG9nICcKICAgICAgICAgICAgLiAnV0hFUkUgZ2VuZXJhbF9jYXRhbG9nX2NsYXNzID0gPyBBTkQgbmFtZSA9ID8nLAogICAgICAgIEJpbmQgID0+IFsgXCRQYXJhbXtDbGFzc30sIFwkUGFyYW17TmFtZX0gXSwKICAgICAgICBMaW1pdCA9PiAxLAogICAgKTsKCiAgICAjIGZldGNoIHRoZSByZXN1bHQKICAgIG15ICRJdGVtSUQ7CiAgICB3aGlsZSAoIG15IEBSb3cgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6REInKS0+RmV0Y2hyb3dBcnJheSgpICkgewogICAgICAgICRJdGVtSUQgPSAkUm93WzBdOwogICAgfQoKICAgIHJldHVybiAkSXRlbUlEOwp9Cgo9aGVhZDIgSXRlbVVwZGF0ZSgpCgp1cGRhdGUgYW4gZXhpc3RpbmcgZ2VuZXJhbCBjYXRhbG9nIGl0ZW0KCiAgICBteSAkVHJ1ZSA9ICRHZW5lcmFsQ2F0YWxvZ09iamVjdC0+SXRlbVVwZGF0ZSgKICAgICAgICBJdGVtSUQgICAgICAgID0+IDEyMywKICAgICAgICBOYW1lICAgICAgICAgID0+ICdJdGVtIE5hbWUnLAogICAgICAgIFZhbGlkSUQgICAgICAgPT4gMSwKICAgICAgICBDb21tZW50ICAgICAgID0+ICdDb21tZW50JywgICAgIyAob3B0aW9uYWwpCiAgICAgICAgVXNlcklEICAgICAgICA9PiAxLAogICAgKTsKCj1jdXQKCnN1YiBJdGVtVXBkYXRlIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGZvciBteSAkQXJndW1lbnQgKHF3KEl0ZW1JRCBWYWxpZElEIFVzZXJJRCkpIHsKICAgICAgICBpZiAoICEkUGFyYW17JEFyZ3VtZW50fSApIHsKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJEFyZ3VtZW50ISIsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgIyBuYW1lIG11c3QgYmUgbm90IGVtcHR5LCBidXQgbnVtYmVyIHplcm8gKDApIGlzIGFsbG93ZWQKICAgIGlmICggJFBhcmFte05hbWV9IGVxICcnICkgewogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCBOYW1lISIsCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgIyBzZXQgZGVmYXVsdCB2YWx1ZXMKICAgIGZvciBteSAkQXJndW1lbnQgKHF3KENvbW1lbnQpKSB7CiAgICAgICAgJFBhcmFteyRBcmd1bWVudH0gfHw9ICcnOwogICAgfQoKICAgICMgY2xlYW51cCBnaXZlbiBwYXJhbXMKICAgIGZvciBteSAkQXJndW1lbnQgKHF3KENsYXNzKSkgewogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpDaGVja0l0ZW0nKS0+U3RyaW5nQ2xlYW4oCiAgICAgICAgICAgIFN0cmluZ1JlZiAgICAgICAgID0+IFwkUGFyYW17JEFyZ3VtZW50fSwKICAgICAgICAgICAgUmVtb3ZlQWxsTmV3bGluZXMgPT4gMSwKICAgICAgICAgICAgUmVtb3ZlQWxsVGFicyAgICAgPT4gMSwKICAgICAgICAgICAgUmVtb3ZlQWxsU3BhY2VzICAgPT4gMSwKICAgICAgICApOwogICAgfQogICAgZm9yIG15ICRBcmd1bWVudCAocXcoTmFtZSBDb21tZW50KSkgewogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpDaGVja0l0ZW0nKS0+U3RyaW5nQ2xlYW4oCiAgICAgICAgICAgIFN0cmluZ1JlZiAgICAgICAgID0+IFwkUGFyYW17JEFyZ3VtZW50fSwKICAgICAgICAgICAgUmVtb3ZlQWxsTmV3bGluZXMgPT4gMSwKICAgICAgICAgICAgUmVtb3ZlQWxsVGFicyAgICAgPT4gMSwKICAgICAgICApOwogICAgfQoKICAgICMgZ2V0IGNsYXNzIG9mIGl0ZW0KICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEQicpLT5QcmVwYXJlKAogICAgICAgIFNRTCAgID0+ICdTRUxFQ1QgZ2VuZXJhbF9jYXRhbG9nX2NsYXNzIEZST00gZ2VuZXJhbF9jYXRhbG9nIFdIRVJFIGlkID0gPycsCiAgICAgICAgQmluZCAgPT4gWyBcJFBhcmFte0l0ZW1JRH0gXSwKICAgICAgICBMaW1pdCA9PiAxLAogICAgKTsKCiAgICAjIGZldGNoIHRoZSByZXN1bHQKICAgIG15ICRDbGFzczsKICAgIHdoaWxlICggbXkgQFJvdyA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEQicpLT5GZXRjaHJvd0FycmF5KCkgKSB7CiAgICAgICAgJENsYXNzID0gJFJvd1swXTsKICAgIH0KCiAgICBpZiAoICEkQ2xhc3MgKSB7CiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJDYW4ndCB1cGRhdGUgaXRlbSEgR2VuZXJhbCBjYXRhbG9nIGl0ZW0gbm90IGZvdW5kIGluIHRoaXMgY2xhc3MuIiwKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAjIGZpbmQgZXhpdGluZyBpdGVtIHdpdGggc2FtZSBuYW1lCiAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6REInKS0+UHJlcGFyZSgKICAgICAgICBTUUwgICA9PiAnU0VMRUNUIGlkIEZST00gZ2VuZXJhbF9jYXRhbG9nIFdIRVJFIGdlbmVyYWxfY2F0YWxvZ19jbGFzcyA9ID8gQU5EIG5hbWUgPSA/JywKICAgICAgICBCaW5kICA9PiBbIFwkQ2xhc3MsIFwkUGFyYW17TmFtZX0gXSwKICAgICAgICBMaW1pdCA9PiAxLAogICAgKTsKCiAgICAjIGZldGNoIHRoZSByZXN1bHQKICAgIG15ICRVcGRhdGUgPSAxOwogICAgd2hpbGUgKCBteSBAUm93ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkRCJyktPkZldGNocm93QXJyYXkoKSApIHsKICAgICAgICBpZiAoICRQYXJhbXtJdGVtSUR9IG5lICRSb3dbMF0gKSB7CiAgICAgICAgICAgICRVcGRhdGUgPSAwOwogICAgICAgIH0KICAgIH0KCiAgICBpZiAoICEkVXBkYXRlICkgewogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlID0+CiAgICAgICAgICAgICAgICAiQ2FuJ3QgdXBkYXRlIGl0ZW0hIEdlbmVyYWwgY2F0YWxvZyBpdGVtIHdpdGggc2FtZSBuYW1lIGFscmVhZHkgZXhpc3RzIGluIHRoaXMgY2xhc3MuIiwKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAjIHJlc2V0IGNhY2hlCiAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6Q2FjaGUnKS0+Q2xlYW5VcCgKICAgICAgICBUeXBlID0+ICRTZWxmLT57Q2FjaGVUeXBlfSwKICAgICk7CgogICAgcmV0dXJuICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEQicpLT5EbygKICAgICAgICBTUUwgPT4gJ1VQREFURSBnZW5lcmFsX2NhdGFsb2cgU0VUICcKICAgICAgICAgICAgLiAnbmFtZSA9ID8sIHZhbGlkX2lkID0gPywgY29tbWVudHMgPSA/LCAnCiAgICAgICAgICAgIC4gJ2NoYW5nZV90aW1lID0gY3VycmVudF90aW1lc3RhbXAsIGNoYW5nZV9ieSA9ID8gJwogICAgICAgICAgICAuICdXSEVSRSBpZCA9ID8nLAogICAgICAgIEJpbmQgPT4gWwogICAgICAgICAgICBcJFBhcmFte05hbWV9LAogICAgICAgICAgICBcJFBhcmFte1ZhbGlkSUR9LCBcJFBhcmFte0NvbW1lbnR9LAogICAgICAgICAgICBcJFBhcmFte1VzZXJJRH0sICBcJFBhcmFte0l0ZW1JRH0sCiAgICAgICAgXSwKICAgICk7Cn0KCj1oZWFkMiBHZW5lcmFsQ2F0YWxvZ1ByZWZlcmVuY2VzU2V0KCkKCnNldCBHZW5lcmFsQ2F0YWxvZyBwcmVmZXJlbmNlcwoKICAgICRHZW5lcmFsQ2F0YWxvZ09iamVjdC0+R2VuZXJhbENhdGFsb2dQcmVmZXJlbmNlc1NldCgKICAgICAgICBJdGVtSUQgPT4gMTIzLAogICAgICAgIEtleSAgICA9PiAnVXNlckNvbW1lbnQnLAogICAgICAgIFZhbHVlICA9PiAnc29tZSBjb21tZW50JywKICAgICk7Cgo9Y3V0CgpzdWIgR2VuZXJhbENhdGFsb2dQcmVmZXJlbmNlc1NldCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgZGVsZXRlIGNhY2hlCiAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6Q2FjaGUnKS0+Q2xlYW5VcCgKICAgICAgICBUeXBlID0+ICRTZWxmLT57Q2FjaGVUeXBlfSwKICAgICk7CgogICAgcmV0dXJuICRTZWxmLT57UHJlZmVyZW5jZXNPYmplY3R9LT5HZW5lcmFsQ2F0YWxvZ1ByZWZlcmVuY2VzU2V0KCVQYXJhbSk7Cn0KCj1oZWFkMiBHZW5lcmFsQ2F0YWxvZ1ByZWZlcmVuY2VzR2V0KCkKCmdldCBHZW5lcmFsQ2F0YWxvZyBwcmVmZXJlbmNlcwoKICAgIG15ICVQcmVmZXJlbmNlcyA9ICRRdWV1ZU9iamVjdC0+R2VuZXJhbENhdGFsb2dQcmVmZXJlbmNlc0dldCgKICAgICAgICBJdGVtSUQgPT4gMTIzLAogICAgKTsKCj1jdXQKCnN1YiBHZW5lcmFsQ2F0YWxvZ1ByZWZlcmVuY2VzR2V0IHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgcmV0dXJuICRTZWxmLT57UHJlZmVyZW5jZXNPYmplY3R9LT5HZW5lcmFsQ2F0YWxvZ1ByZWZlcmVuY2VzR2V0KCVQYXJhbSk7Cn0KCjE7Cgo9aGVhZDEgVEVSTVMgQU5EIENPTkRJVElPTlMKClRoaXMgU29mdHdhcmUgaXMgcGFydCBvZiB0aGUgT1RSUyBwcm9qZWN0IChodHRwOi8vb3Rycy5vcmcvKS4KClRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCnRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEdQTCkuIElmIHlvdQpkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgTDxodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0zLjAudHh0Pi4KCj1jdXQK
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIxIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDIxLTIwMjIgWm51bnkgR21iSCwgaHR0cHM6Ly96bnVueS5vcmcvCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0zLjAudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6U3lzdGVtOjpHZW5lcmFsQ2F0YWxvZzo6UHJlZmVyZW5jZXNEQjsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKCm91ciBAT2JqZWN0RGVwZW5kZW5jaWVzID0gKAogICAgJ0tlcm5lbDo6Q29uZmlnJywKICAgICdLZXJuZWw6OlN5c3RlbTo6REInLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpMb2cnLAopOwoKPWhlYWQxIE5BTUUKCktlcm5lbDo6U3lzdGVtOjpHZW5lcmFsQ2F0YWxvZzo6UHJlZmVyZW5jZXNEQiAtIHNvbWUgcHJlZmVyZW5jZXMgZnVuY3Rpb25zIGZvciBnZW5lcmFsIGNhdGFsb2cKCj1oZWFkMSBQVUJMSUMgSU5URVJGQUNFCgo9Y3V0Cgo9aGVhZDIgbmV3KCkKCmNyZWF0ZSBhbiBvYmplY3QKCiAgICB1c2UgS2VybmVsOjpTeXN0ZW06Ok9iamVjdE1hbmFnZXI7CiAgICBsb2NhbCAkS2VybmVsOjpPTSA9IEtlcm5lbDo6U3lzdGVtOjpPYmplY3RNYW5hZ2VyLT5uZXcoKTsKICAgIG15ICRHZW5lcmFsQ2F0YWxvZ1ByZWZlcmVuY2VzREJPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6R2VuZXJhbENhdGFsb2c6OlByZWZlcmVuY2VzREInKTsKCj1jdXQKCnN1YiBuZXcgewogICAgbXkgKCAkVHlwZSwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGFsbG9jYXRlIG5ldyBoYXNoIGZvciBvYmplY3QKICAgIG15ICRTZWxmID0ge307CiAgICBibGVzcyggJFNlbGYsICRUeXBlICk7CgogICAgIyBwcmVmZXJlbmNlcyB0YWJsZSBkYXRhCiAgICAkU2VsZi0+e1ByZWZlcmVuY2VzVGFibGV9ICAgICAgPSAnZ2VuZXJhbF9jYXRhbG9nX3ByZWZlcmVuY2VzJzsKICAgICRTZWxmLT57UHJlZmVyZW5jZXNUYWJsZUtleX0gICA9ICdwcmVmX2tleSc7CiAgICAkU2VsZi0+e1ByZWZlcmVuY2VzVGFibGVWYWx1ZX0gPSAncHJlZl92YWx1ZSc7CiAgICAkU2VsZi0+e1ByZWZlcmVuY2VzVGFibGVHY0lEfSAgPSAnZ2VuZXJhbF9jYXRhbG9nX2lkJzsKCiAgICByZXR1cm4gJFNlbGY7Cn0KCj1oZWFkMiBHZW5lcmFsQ2F0YWxvZ1ByZWZlcmVuY2VzU2V0KCkKClNldCBwcmVmZXJlbmNlcyBmb3IgYW4gaXRlbQoKICAgICRQcmVmZXJlbmNlc09iamVjdC0+R2VuZXJhbENhdGFsb2dQcmVmZXJlbmNlc1NldCgKICAgICAgICBJdGVtSUQgPT4gMTIzNCwKICAgICAgICBLZXkgICAgPT4gJ0Z1bmN0aW9uYWxpdHknLAogICAgICAgIFZhbHVlICA9PiAnb3BlcmF0aW9uYWwnLAogICAgKTsKCj1jdXQKCnN1YiBHZW5lcmFsQ2F0YWxvZ1ByZWZlcmVuY2VzU2V0IHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGZvciBteSAkTmVlZGVkIChxdyhJdGVtSUQgS2V5IFZhbHVlKSkgewogICAgICAgIGlmICggIWRlZmluZWQoICRQYXJhbXskTmVlZGVkfSApICkgewogICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCAkTmVlZGVkISIsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgIyBkZWxldGUgb2xkIGRhdGEKICAgIHJldHVybiBpZiAhJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkRCJyktPkRvKAogICAgICAgIFNRTCA9PiAiREVMRVRFIEZST00gJFNlbGYtPntQcmVmZXJlbmNlc1RhYmxlfSBXSEVSRSAiCiAgICAgICAgICAgIC4gIiRTZWxmLT57UHJlZmVyZW5jZXNUYWJsZUdjSUR9ID0gPyBBTkQgJFNlbGYtPntQcmVmZXJlbmNlc1RhYmxlS2V5fSA9ID8iLAogICAgICAgIEJpbmQgPT4gWwogICAgICAgICAgICBcJFBhcmFte0l0ZW1JRH0sCiAgICAgICAgICAgIFwkUGFyYW17S2V5fSwKICAgICAgICBdLAogICAgKTsKCiAgICAjIGluc2VydCBuZXcgZGF0YQogICAgcmV0dXJuICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEQicpLT5EbygKICAgICAgICBTUUwgPT4gIklOU0VSVCBJTlRPICRTZWxmLT57UHJlZmVyZW5jZXNUYWJsZX0gKCRTZWxmLT57UHJlZmVyZW5jZXNUYWJsZUdjSUR9LCAiCiAgICAgICAgICAgIC4gIiAkU2VsZi0+e1ByZWZlcmVuY2VzVGFibGVLZXl9LCAkU2VsZi0+e1ByZWZlcmVuY2VzVGFibGVWYWx1ZX0pICIKICAgICAgICAgICAgLiAiIFZBTFVFUyAoPywgPywgPykiLAogICAgICAgIEJpbmQgPT4gWwogICAgICAgICAgICBcJFBhcmFte0l0ZW1JRH0sCiAgICAgICAgICAgIFwkUGFyYW17S2V5fSwKICAgICAgICAgICAgXCRQYXJhbXtWYWx1ZX0sCiAgICAgICAgXSwKICAgICk7Cn0KCj1oZWFkMiBHZW5lcmFsQ2F0YWxvZ1ByZWZlcmVuY2VzR2V0KCkKCkdldCBhbGwgUHJlZmVyZW5jZXMgZm9yIGFuIGl0ZW0KCiAgICBteSAlUHJlZmVyZW5jZXMgPSAkUHJlZmVyZW5jZXNPYmplY3QtPkdlbmVyYWxDYXRhbG9nUHJlZmVyZW5jZXNHZXQoCiAgICAgICAgSXRlbUlEID0+IDEyMywKICAgICk7Cgo9Y3V0CgpzdWIgR2VuZXJhbENhdGFsb2dQcmVmZXJlbmNlc0dldCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBmb3IgbXkgJE5lZWRlZCAocXcoSXRlbUlEKSkgewogICAgICAgIGlmICggISRQYXJhbXskTmVlZGVkfSApIHsKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJE5lZWRlZCEiLAogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQoKICAgICMgY2hlY2sgaWYgcXVldWUgcHJlZmVyZW5jZXMgYXJlIGF2YWlsYWJsZQogICAgaWYgKCAhJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKS0+R2V0KCdHZW5lcmFsQ2F0YWxvZ1ByZWZlcmVuY2VzJykgKSB7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgICMgZ2V0IHByZWZlcmVuY2VzCiAgICByZXR1cm4gaWYgISRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEQicpLT5QcmVwYXJlKAogICAgICAgIFNRTCA9PiAiU0VMRUNUICRTZWxmLT57UHJlZmVyZW5jZXNUYWJsZUtleX0sICRTZWxmLT57UHJlZmVyZW5jZXNUYWJsZVZhbHVlfSAiCiAgICAgICAgICAgIC4gIiBGUk9NICRTZWxmLT57UHJlZmVyZW5jZXNUYWJsZX0gV0hFUkUgJFNlbGYtPntQcmVmZXJlbmNlc1RhYmxlR2NJRH0gPSA/IiwKICAgICAgICBCaW5kID0+IFsgXCRQYXJhbXtJdGVtSUR9IF0sCiAgICApOwoKICAgIG15ICVEYXRhOwogICAgd2hpbGUgKCBteSBAUm93ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkRCJyktPkZldGNocm93QXJyYXkoKSApIHsKICAgICAgICAkRGF0YXsgJFJvd1swXSB9ID0gJFJvd1sxXTsKICAgIH0KCiAgICAjIHJldHVybiBkYXRhCiAgICByZXR1cm4gJURhdGE7Cn0KCjE7Cgo9aGVhZDEgVEVSTVMgQU5EIENPTkRJVElPTlMKClRoaXMgc29mdHdhcmUgaXMgcGFydCBvZiB0aGUgT1RSUyBwcm9qZWN0IChMPGh0dHBzOi8vb3Rycy5vcmcvPikuCgpUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQp0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChHUEwpLiBJZiB5b3UKZGlkIG5vdCByZWNlaXZlIHRoaXMgZmlsZSwgc2VlIEw8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9ncGwtMy4wLnR4dD4uCgo9Y3V0Cg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIxIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDIxLTIwMjIgWm51bnkgR21iSCwgaHR0cHM6Ly96bnVueS5vcmcvCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0zLjAudHh0LgojIC0tCgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CnVzZSB1dGY4OwoKdXNlIHZhcnMgcXcoJFNlbGYpOwoKIyBjcmVhdGUgbG9jYWwgb2JqZWN0cwpteSAkQ29uZmlnT2JqZWN0ICAgICAgICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OkNvbmZpZycpOwpteSAkR2VuZXJhbENhdGFsb2dPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6R2VuZXJhbENhdGFsb2cnKTsKbXkgJFVzZXJPYmplY3QgICAgICAgICAgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlVzZXInKTsKCiMgZ2V0IGhlbHBlciBvYmplY3QKJEtlcm5lbDo6T00tPk9iamVjdFBhcmFtQWRkKAogICAgJ0tlcm5lbDo6U3lzdGVtOjpVbml0VGVzdDo6SGVscGVyJyA9PiB7CiAgICAgICAgUmVzdG9yZURhdGFiYXNlID0+IDEsCiAgICB9LAopOwpteSAkSGVscGVyID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlVuaXRUZXN0OjpIZWxwZXInKTsKCiMgZGVmaW5lIG5lZWRlZCB2YXJpYWJsZQpteSAkUmFuZG9tSUQgPSAkSGVscGVyLT5HZXRSYW5kb21JRCgpOwoKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwojIG1ha2UgcHJlcGFyYXRpb25zCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKCiMgY3JlYXRlIG5lZWRlZCB1c2VycwpteSBAVXNlcklEczsKewoKICAgICMgZGlzYWJsZSBlbWFpbCBjaGVja3MgdG8gY3JlYXRlIG5ldyB1c2VyCiAgICBteSAkQ2hlY2tFbWFpbEFkZHJlc3Nlc09yZyA9ICRDb25maWdPYmplY3QtPkdldCgnQ2hlY2tFbWFpbEFkZHJlc3NlcycpIHx8IDE7CiAgICAkQ29uZmlnT2JqZWN0LT5TZXQoCiAgICAgICAgS2V5ICAgPT4gJ0NoZWNrRW1haWxBZGRyZXNzZXMnLAogICAgICAgIFZhbHVlID0+IDAsCiAgICApOwoKICAgIGZvciBteSAkQ291bnRlciAoIDEgLi4gMiApIHsKCiAgICAgICAgIyBjcmVhdGUgbmV3IHVzZXJzIGZvciB0aGUgdGVzdHMKICAgICAgICBteSAkVXNlcklEID0gJFVzZXJPYmplY3QtPlVzZXJBZGQoCiAgICAgICAgICAgIFVzZXJGaXJzdG5hbWUgPT4gJ0dlbmVyYWxDYXRhbG9nJyAuICRDb3VudGVyLAogICAgICAgICAgICBVc2VyTGFzdG5hbWUgID0+ICdVbml0VGVzdCcsCiAgICAgICAgICAgIFVzZXJMb2dpbiAgICAgPT4gJ1VuaXRUZXN0LUdlbmVyYWxDYXRhbG9nLScgLiAkQ291bnRlciAuICRSYW5kb21JRCwKICAgICAgICAgICAgVXNlckVtYWlsICAgICA9PiAnVW5pdFRlc3QtR2VuZXJhbENhdGFsb2ctJyAuICRDb3VudGVyIC4gJ0Bsb2NhbGhvc3QnLAogICAgICAgICAgICBWYWxpZElEICAgICAgID0+IDEsCiAgICAgICAgICAgIENoYW5nZVVzZXJJRCAgPT4gMSwKICAgICAgICApOwoKICAgICAgICBwdXNoIEBVc2VySURzLCAkVXNlcklEOwogICAgfQoKICAgICMgcmVzdG9yZSBvcmlnaW5hbCBlbWFpbCBjaGVjayBwYXJhbQogICAgJENvbmZpZ09iamVjdC0+U2V0KAogICAgICAgIEtleSAgID0+ICdDaGVja0VtYWlsQWRkcmVzc2VzJywKICAgICAgICBWYWx1ZSA9PiAkQ2hlY2tFbWFpbEFkZHJlc3Nlc09yZywKICAgICk7Cn0KCiMgY3JlYXRlIG5lZWRlZCByYW5kb20gY2xhc3NlcwpteSBAQ2xhc3NSYW5kOwoKZm9yIG15ICRDb3VudGVyICggMSAuLiAzICkgewoKICAgIHB1c2ggQENsYXNzUmFuZCwgJEhlbHBlci0+R2V0UmFuZG9tTnVtYmVyKCk7Cn0KCiMgc3RvcmUgb3JpZ2luYWwgZ2VuZXJhbCBjYXRhbG9nIHBlcm1pc3Npb24gcHJlZmVyZW5jZXMgc2V0dGluZwpteSAkR2VuZXJhbENhdGFsb2dQcmVmZXJlbmNlc1Blcm1pc3Npb25zT3JnOwppZiAoICRDb25maWdPYmplY3QtPkdldCgnR2VuZXJhbENhdGFsb2dQcmVmZXJlbmNlcycpICkgewogICAgJEdlbmVyYWxDYXRhbG9nUHJlZmVyZW5jZXNQZXJtaXNzaW9uc09yZyA9ICRDb25maWdPYmplY3QtPkdldCgnR2VuZXJhbENhdGFsb2dQcmVmZXJlbmNlcycpLT57UGVybWlzc2lvbnN9Owp9CgojIGVuYWJsZSBnZW5lcmFsIGNhdGFsb2cgcGVybWlzc2lvbiBwcmVmZXJlbmNlcyBzZXR0aW5nIHdpdGggYSBkdW1teSB0cnVlIHZhbHVlCiRDb25maWdPYmplY3QtPlNldCgKICAgIEtleSAgID0+ICdHZW5lcmFsQ2F0YWxvZ1ByZWZlcmVuY2VzIyMjUGVybWlzc2lvbnMnLAogICAgVmFsdWUgPT4gMSwKKTsKCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKIyBkZWZpbmUgZ2VuZXJhbCB0ZXN0cwojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCgpteSAkSXRlbURhdGEgPSBbCgogICAgIyB0aGlzIGl0ZW0gaXMgTk9UIGNvbXBsZXRlIGFuZCBtdXN0IG5vdCBiZSBhZGRlZAogICAgewogICAgICAgIEFkZCA9PiB7CiAgICAgICAgICAgIE5hbWUgICAgPT4gJ1Rlc3RJdGVtMScsCiAgICAgICAgICAgIFZhbGlkSUQgPT4gMSwKICAgICAgICAgICAgVXNlcklEICA9PiAxLAogICAgICAgIH0sCiAgICB9LAoKICAgICMgdGhpcyBpdGVtIGlzIE5PVCBjb21wbGV0ZSBhbmQgbXVzdCBub3QgYmUgYWRkZWQKICAgIHsKICAgICAgICBBZGQgPT4gewogICAgICAgICAgICBDbGFzcyAgID0+ICdVbml0VGVzdDo6VGVzdENsYXNzJyAuICRDbGFzc1JhbmRbMF0sCiAgICAgICAgICAgIFZhbGlkSUQgPT4gMSwKICAgICAgICAgICAgVXNlcklEICA9PiAxLAogICAgICAgIH0sCiAgICB9LAoKICAgICMgdGhpcyBpdGVtIGlzIE5PVCBjb21wbGV0ZSBhbmQgbXVzdCBub3QgYmUgYWRkZWQKICAgIHsKICAgICAgICBBZGQgPT4gewogICAgICAgICAgICBDbGFzcyAgPT4gJ1VuaXRUZXN0OjpUZXN0Q2xhc3MnIC4gJENsYXNzUmFuZFswXSwKICAgICAgICAgICAgTmFtZSAgID0+ICdUZXN0SXRlbTInLAogICAgICAgICAgICBVc2VySUQgPT4gMSwKICAgICAgICB9LAogICAgfSwKCiAgICAjIHRoaXMgaXRlbSBpcyBOT1QgY29tcGxldGUgYW5kIG11c3Qgbm90IGJlIGFkZGVkCiAgICB7CiAgICAgICAgQWRkID0+IHsKICAgICAgICAgICAgQ2xhc3MgICA9PiAnVW5pdFRlc3Q6OlRlc3RDbGFzcycgLiAkQ2xhc3NSYW5kWzBdLAogICAgICAgICAgICBOYW1lICAgID0+ICdUZXN0SXRlbTMnLAogICAgICAgICAgICBWYWxpZElEID0+IDEsCiAgICAgICAgfSwKICAgIH0sCgogICAgIyB0aGlzIGl0ZW0gbXVzdCBiZSBpbnNlcnRlZCBzdWNjZXNzZnVsbHkKICAgIHsKICAgICAgICBBZGQgPT4gewogICAgICAgICAgICBDbGFzcyAgID0+ICdVbml0VGVzdDo6VGVzdENsYXNzJyAuICRDbGFzc1JhbmRbMF0sCiAgICAgICAgICAgIE5hbWUgICAgPT4gJ1Rlc3RJdGVtNCcsCiAgICAgICAgICAgIFZhbGlkSUQgPT4gMSwKICAgICAgICAgICAgVXNlcklEICA9PiAxLAogICAgICAgIH0sCiAgICAgICAgQWRkR2V0ID0+IHsKICAgICAgICAgICAgQ2xhc3MgICAgPT4gJ1VuaXRUZXN0OjpUZXN0Q2xhc3MnIC4gJENsYXNzUmFuZFswXSwKICAgICAgICAgICAgTmFtZSAgICAgPT4gJ1Rlc3RJdGVtNCcsCiAgICAgICAgICAgIFZhbGlkSUQgID0+IDEsCiAgICAgICAgICAgIENvbW1lbnQgID0+ICcnLAogICAgICAgICAgICBDcmVhdGVCeSA9PiAxLAogICAgICAgICAgICBDaGFuZ2VCeSA9PiAxLAogICAgICAgIH0sCiAgICB9LAoKICAgICMgdGhlIHByZWZlcmVuY2VzIG9mIHRoZSBpdGVtIG9uZSBhZGQtdGVzdCBiZWZvcmUgbXVzdCBiZSBzZXQKICAgIHsKICAgICAgICBQcmVmZXJlbmNlc1NldCA9PiB7CiAgICAgICAgICAgIEhlbGxvID0+ICdXb3JsZCcsCiAgICAgICAgICAgIENvbG9yID0+ICdSZWQnLAogICAgICAgIH0sCiAgICAgICAgUHJlZmVyZW5jZXNHZXQgPT4gewogICAgICAgICAgICBIZWxsbyA9PiAnV29ybGQnLAogICAgICAgICAgICBDb2xvciA9PiAnUmVkJywKICAgICAgICB9LAogICAgfSwKCiAgICAjIHRoaXMgaXRlbSBoYXZlIHRoZSBzYW1lIG5hbWUgYXMgb25lIHRlc3QgYmVmb3JlIGFuZCBtdXN0IG5vdCBiZSBhZGRlZAogICAgewogICAgICAgIEFkZCA9PiB7CiAgICAgICAgICAgIENsYXNzICAgPT4gJ1VuaXRUZXN0OjpUZXN0Q2xhc3MnIC4gJENsYXNzUmFuZFswXSwKICAgICAgICAgICAgTmFtZSAgICA9PiAnVGVzdEl0ZW00JywKICAgICAgICAgICAgVmFsaWRJRCA9PiAxLAogICAgICAgICAgICBVc2VySUQgID0+IDEsCiAgICAgICAgfSwKICAgIH0sCgogICAgIyB0aGlzIGl0ZW0gbXVzdCBiZSBpbnNlcnRlZCBzdWNjZXNzZnVsbHkKICAgIHsKICAgICAgICBBZGQgPT4gewogICAgICAgICAgICBDbGFzcyAgID0+ICdVbml0VGVzdDo6VGVzdENsYXNzJyAuICRDbGFzc1JhbmRbMF0sCiAgICAgICAgICAgIE5hbWUgICAgPT4gJ1Rlc3RJdGVtNScsCiAgICAgICAgICAgIFZhbGlkSUQgPT4gMSwKICAgICAgICAgICAgVXNlcklEICA9PiAxLAogICAgICAgIH0sCiAgICAgICAgQWRkR2V0ID0+IHsKICAgICAgICAgICAgQ2xhc3MgICAgPT4gJ1VuaXRUZXN0OjpUZXN0Q2xhc3MnIC4gJENsYXNzUmFuZFswXSwKICAgICAgICAgICAgTmFtZSAgICAgPT4gJ1Rlc3RJdGVtNScsCiAgICAgICAgICAgIFZhbGlkSUQgID0+IDEsCiAgICAgICAgICAgIENvbW1lbnQgID0+ICcnLAogICAgICAgICAgICBDcmVhdGVCeSA9PiAxLAogICAgICAgICAgICBDaGFuZ2VCeSA9PiAxLAogICAgICAgIH0sCiAgICB9LAoKICAgICMgdGhlIHByZWZlcmVuY2VzIG9mIHRoZSBpdGVtIG9uZSBhZGQtdGVzdCBiZWZvcmUgbXVzdCBiZSBzZXQKICAgIHsKICAgICAgICBQcmVmZXJlbmNlc1NldCA9PiB7CiAgICAgICAgICAgIEhlbGxvID0+ICdOZXdXb3JsZCcsCiAgICAgICAgICAgIENvbG9yID0+ICdCbHVlJywKICAgICAgICB9LAogICAgICAgIFByZWZlcmVuY2VzR2V0ID0+IHsKICAgICAgICAgICAgSGVsbG8gPT4gJ05ld1dvcmxkJywKICAgICAgICAgICAgQ29sb3IgPT4gJ0JsdWUnLAogICAgICAgIH0sCiAgICB9LAoKICAgICMgdGhlIGl0ZW0gb25lIGFkZC10ZXN0IGJlZm9yZSBtdXN0IGJlIE5PVCB1cGRhdGVkIChpdGVtIHVwZGF0ZSBhcmd1bWVudHMgTk9UIGNvbXBsZXRlKQogICAgewogICAgICAgIFVwZGF0ZSA9PiB7CiAgICAgICAgICAgIFZhbGlkSUQgPT4gJFVzZXJJRHNbMF0sCiAgICAgICAgICAgIFVzZXJJRCAgPT4gJFVzZXJJRHNbMF0sCiAgICAgICAgfSwKICAgIH0sCgogICAgIyB0aGUgaXRlbSBvbmUgYWRkLXRlc3QgYmVmb3JlIG11c3QgYmUgTk9UIHVwZGF0ZWQgKGl0ZW0gdXBkYXRlIGFyZ3VtZW50cyBOT1QgY29tcGxldGUpCiAgICB7CiAgICAgICAgVXBkYXRlID0+IHsKICAgICAgICAgICAgTmFtZSAgID0+ICdUZXN0SXRlbTVVUERBVEUxJywKICAgICAgICAgICAgVXNlcklEID0+ICRVc2VySURzWzBdLAogICAgICAgIH0sCiAgICB9LAoKICAgICMgdGhlIGl0ZW0gb25lIGFkZC10ZXN0IGJlZm9yZSBtdXN0IGJlIE5PVCB1cGRhdGVkIChpdGVtIHVwZGF0ZSBhcmd1bWVudHMgTk9UIGNvbXBsZXRlKQogICAgewogICAgICAgIFVwZGF0ZSA9PiB7CiAgICAgICAgICAgIFZhbGlkSUQgPT4gJFVzZXJJRHNbMF0sCiAgICAgICAgfSwKICAgIH0sCgogICAgIyB0aGUgaXRlbSBvbmUgYWRkLXRlc3QgYmVmb3JlIG11c3QgYmUgdXBkYXRlZCAoaXRlbSB1cGRhdGUgYXJndW1lbnRzIGFyZSBjb21wbGV0ZSkKICAgIHsKICAgICAgICBVcGRhdGUgPT4gewogICAgICAgICAgICBOYW1lICAgID0+ICdUZXN0SXRlbTVVUERBVEUyJywKICAgICAgICAgICAgVmFsaWRJRCA9PiAkVXNlcklEc1swXSwKICAgICAgICAgICAgVXNlcklEICA9PiAkVXNlcklEc1swXSwKICAgICAgICB9LAogICAgICAgIFVwZGF0ZUdldCA9PiB7CiAgICAgICAgICAgIE5hbWUgICAgID0+ICdUZXN0SXRlbTVVUERBVEUyJywKICAgICAgICAgICAgVmFsaWRJRCAgPT4gJFVzZXJJRHNbMF0sCiAgICAgICAgICAgIENvbW1lbnQgID0+ICcnLAogICAgICAgICAgICBDcmVhdGVCeSA9PiAxLAogICAgICAgICAgICBDaGFuZ2VCeSA9PiAkVXNlcklEc1swXSwKICAgICAgICB9LAogICAgfSwKCiAgICAjIHRoZSBpdGVtIG9uZSBhZGQtdGVzdCBiZWZvcmUgbXVzdCBiZSB1cGRhdGVkIChpdGVtIHVwZGF0ZSBhcmd1bWVudHMgYXJlIGNvbXBsZXRlKQogICAgewogICAgICAgIFVwZGF0ZSA9PiB7CiAgICAgICAgICAgIE5hbWUgICAgPT4gJ1Rlc3RJdGVtNVVQREFURTMnLAogICAgICAgICAgICBWYWxpZElEID0+IDEsCiAgICAgICAgICAgIFVzZXJJRCAgPT4gMSwKICAgICAgICB9LAogICAgICAgIFVwZGF0ZUdldCA9PiB7CiAgICAgICAgICAgIE5hbWUgICAgID0+ICdUZXN0SXRlbTVVUERBVEUzJywKICAgICAgICAgICAgVmFsaWRJRCAgPT4gMSwKICAgICAgICAgICAgQ29tbWVudCAgPT4gJycsCiAgICAgICAgICAgIENyZWF0ZUJ5ID0+IDEsCiAgICAgICAgICAgIENoYW5nZUJ5ID0+IDEsCiAgICAgICAgfSwKICAgIH0sCgogICAgIyB0aGlzIHRlbXBsYXRlIG11c3QgYmUgaW5zZXJ0ZWQgc3VjY2Vzc2Z1bGx5IChjaGVjayBzdHJpbmcgY2xlYW5lciBmdW5jdGlvbikKICAgIHsKICAgICAgICBBZGQgPT4gewogICAgICAgICAgICBDbGFzcyAgID0+ICIgXHQgXG4gXHIgVW5pdCBUZXN0IDo6IFRlc3QgQ2xhc3MgXHQgXG4gXHIgIiAuICRDbGFzc1JhbmRbMF0sCiAgICAgICAgICAgIE5hbWUgICAgPT4gIiBcdCBcbiBcciBUZXN0IEl0ZW0gXHQgXG4gXHIgIiwKICAgICAgICAgICAgVmFsaWRJRCA9PiAxLAogICAgICAgICAgICBDb21tZW50ID0+ICIgXHQgXG4gXHIgVGVzdCBDb21tZW50IFx0IFxuIFxyICIsCiAgICAgICAgICAgIFVzZXJJRCAgPT4gMSwKICAgICAgICB9LAogICAgICAgIEFkZEdldCA9PiB7CiAgICAgICAgICAgIENsYXNzICAgID0+ICdVbml0VGVzdDo6VGVzdENsYXNzJyAuICRDbGFzc1JhbmRbMF0sCiAgICAgICAgICAgIE5hbWUgICAgID0+ICdUZXN0IEl0ZW0nLAogICAgICAgICAgICBWYWxpZElEICA9PiAxLAogICAgICAgICAgICBDb21tZW50ICA9PiAnVGVzdCBDb21tZW50JywKICAgICAgICAgICAgQ3JlYXRlQnkgPT4gMSwKICAgICAgICAgICAgQ2hhbmdlQnkgPT4gMSwKICAgICAgICB9LAogICAgfSwKCiAgICAjIHRoZSBpdGVtIG9uZSBhZGQtdGVzdCBiZWZvcmUgbXVzdCBiZSB1cGRhdGVkIHN1Y2Nlc3NmdWxseSAoY2hlY2sgc3RyaW5nIGNsZWFuZXIgZnVuY3Rpb24pCiAgICB7CiAgICAgICAgVXBkYXRlID0+IHsKICAgICAgICAgICAgTmFtZSAgICA9PiAiIFx0IFxuIFxyIFRlc3QgSXRlbSBVUERBVEUxIFx0IFxuIFxyICIsCiAgICAgICAgICAgIFZhbGlkSUQgPT4gJFVzZXJJRHNbMF0sCiAgICAgICAgICAgIENvbW1lbnQgPT4gIiBcdCBcbiBcciBUZXN0IENvbW1lbnQgVVBEQVRFMSBcdCBcbiBcciAiLAogICAgICAgICAgICBVc2VySUQgID0+ICRVc2VySURzWzBdLAogICAgICAgIH0sCiAgICAgICAgVXBkYXRlR2V0ID0+IHsKICAgICAgICAgICAgTmFtZSAgICAgPT4gJ1Rlc3QgSXRlbSBVUERBVEUxJywKICAgICAgICAgICAgVmFsaWRJRCAgPT4gJFVzZXJJRHNbMF0sCiAgICAgICAgICAgIENvbW1lbnQgID0+ICdUZXN0IENvbW1lbnQgVVBEQVRFMScsCiAgICAgICAgICAgIENyZWF0ZUJ5ID0+IDEsCiAgICAgICAgICAgIENoYW5nZUJ5ID0+ICRVc2VySURzWzBdLAogICAgICAgIH0sCiAgICB9LAoKICAgICMgdGhpcyBpdGVtIG11c3QgYmUgaW5zZXJ0ZWQgc3VjY2Vzc2Z1bGx5ICh1bmljb2RlIGNoZWNrcykKICAgIHsKICAgICAgICBBZGQgPT4gewogICAgICAgICAgICBDbGFzcyAgID0+ICdVbml0VGVzdDo6VGVzdENsYXNzwqknIC4gJENsYXNzUmFuZFsxXSwKICAgICAgICAgICAgTmFtZSAgICA9PiAnIM+SIM+hIFRlc3QgSXRlbSDGqSDPniAnLAogICAgICAgICAgICBWYWxpZElEID0+IDEsCiAgICAgICAgICAgIENvbW1lbnQgPT4gJyDPoCDQryBUZXN0IENvbW1lbnQg0awg0aAgJywKICAgICAgICAgICAgVXNlcklEICA9PiAxLAogICAgICAgIH0sCiAgICAgICAgQWRkR2V0ID0+IHsKICAgICAgICAgICAgQ2xhc3MgICAgPT4gJ1VuaXRUZXN0OjpUZXN0Q2xhc3PCqScgLiAkQ2xhc3NSYW5kWzFdLAogICAgICAgICAgICBOYW1lICAgICA9PiAnz5Igz6EgVGVzdCBJdGVtIMapIM+eJywKICAgICAgICAgICAgVmFsaWRJRCAgPT4gMSwKICAgICAgICAgICAgQ29tbWVudCAgPT4gJ8+gINCvIFRlc3QgQ29tbWVudCDRrCDRoCcsCiAgICAgICAgICAgIENyZWF0ZUJ5ID0+IDEsCiAgICAgICAgICAgIENoYW5nZUJ5ID0+IDEsCiAgICAgICAgfSwKICAgIH0sCgogICAgIyB0aGUgaXRlbSBvbmUgYWRkLXRlc3QgYmVmb3JlIG11c3QgYmUgdXBkYXRlZCBzdWNjZXNzZnVsbHkgKHVuaWNvZGUgY2hlY2tzKQogICAgewogICAgICAgIFVwZGF0ZSA9PiB7CiAgICAgICAgICAgIE5hbWUgICAgPT4gJ1Rlc3QgSXRlbSDGqSDJpCBVUERBVEUxJywKICAgICAgICAgICAgVmFsaWRJRCA9PiAkVXNlcklEc1sxXSwKICAgICAgICAgICAgQ29tbWVudCA9PiAnIFRlc3QgQ29tbWVudCDRmSDRkiBVUERBVEUxICcsCiAgICAgICAgICAgIFVzZXJJRCAgPT4gJFVzZXJJRHNbMV0sCiAgICAgICAgfSwKICAgICAgICBVcGRhdGVHZXQgPT4gewogICAgICAgICAgICBOYW1lICAgICA9PiAnVGVzdCBJdGVtIMapIMmkIFVQREFURTEnLAogICAgICAgICAgICBWYWxpZElEICA9PiAkVXNlcklEc1sxXSwKICAgICAgICAgICAgQ29tbWVudCAgPT4gJ1Rlc3QgQ29tbWVudCDRmSDRkiBVUERBVEUxJywKICAgICAgICAgICAgQ3JlYXRlQnkgPT4gMSwKICAgICAgICAgICAgQ2hhbmdlQnkgPT4gJFVzZXJJRHNbMV0sCiAgICAgICAgfSwKICAgIH0sCgogICAgIyB0aGlzIGl0ZW0gbXVzdCBiZSBpbnNlcnRlZCBzdWNjZXNzZnVsbHkgKGEgc2Vjb25kIGl0ZW0gd2l0aCBGdW5jdGlvbmFsaXR5ICd0ZXN0MScpCiAgICB7CiAgICAgICAgQWRkID0+IHsKICAgICAgICAgICAgQ2xhc3MgICA9PiAnVW5pdFRlc3Q6OlRlc3RDbGFzcycgLiAkQ2xhc3NSYW5kWzBdLAogICAgICAgICAgICBOYW1lICAgID0+ICdUZXN0SXRlbTYnLAogICAgICAgICAgICBWYWxpZElEID0+IDEsCiAgICAgICAgICAgIFVzZXJJRCAgPT4gMSwKICAgICAgICB9LAogICAgICAgIEFkZEdldCA9PiB7CiAgICAgICAgICAgIENsYXNzICAgID0+ICdVbml0VGVzdDo6VGVzdENsYXNzJyAuICRDbGFzc1JhbmRbMF0sCiAgICAgICAgICAgIE5hbWUgICAgID0+ICdUZXN0SXRlbTYnLAogICAgICAgICAgICBWYWxpZElEICA9PiAxLAogICAgICAgICAgICBDb21tZW50ICA9PiAnJywKICAgICAgICAgICAgQ3JlYXRlQnkgPT4gMSwKICAgICAgICAgICAgQ2hhbmdlQnkgPT4gMSwKICAgICAgICB9LAogICAgfSwKCiAgICAjIHRoZSBpdGVtIG9uZSBhZGQtdGVzdCBiZWZvcmUgbXVzdCBiZSB1cGRhdGVkIChzZXQgZnVuY3Rpb25hbGl0eSB0byAnJykKICAgIHsKICAgICAgICBVcGRhdGUgPT4gewogICAgICAgICAgICBOYW1lICAgID0+ICdUZXN0SXRlbTZVUERBVEUxJywKICAgICAgICAgICAgVmFsaWRJRCA9PiAxLAogICAgICAgICAgICBVc2VySUQgID0+IDEsCiAgICAgICAgfSwKICAgICAgICBVcGRhdGVHZXQgPT4gewogICAgICAgICAgICBOYW1lICAgICA9PiAnVGVzdEl0ZW02VVBEQVRFMScsCiAgICAgICAgICAgIFZhbGlkSUQgID0+IDEsCiAgICAgICAgICAgIENvbW1lbnQgID0+ICcnLAogICAgICAgICAgICBDcmVhdGVCeSA9PiAxLAogICAgICAgICAgICBDaGFuZ2VCeSA9PiAxLAogICAgICAgIH0sCiAgICB9LAoKICAgICMgdGhpcyBpdGVtIG11c3QgYmUgaW5zZXJ0ZWQgc3VjY2Vzc2Z1bGx5IChzcGVjaWFsIGNoYXJhY3RlciBjaGVja3MpCiAgICB7CiAgICAgICAgQWRkID0+IHsKICAgICAgICAgICAgQ2xhc3MgICA9PiAnVW5pdFRlc3Q6OlRlc3RDbGFzc1t0ZXN0XSUqXFwnIC4gJENsYXNzUmFuZFsxXSwKICAgICAgICAgICAgTmFtZSAgICA9PiAnIFt0ZXN0XSUqXFwgVGVzdCBJdGVtIFt0ZXN0XSUqXFwgJywKICAgICAgICAgICAgVmFsaWRJRCA9PiAxLAogICAgICAgICAgICBDb21tZW50ID0+ICcgW3Rlc3RdJSpcXCBUZXN0IENvbW1lbnQgW3Rlc3RdJSpcXCAnLAogICAgICAgICAgICBVc2VySUQgID0+IDEsCiAgICAgICAgfSwKICAgICAgICBBZGRHZXQgPT4gewogICAgICAgICAgICBDbGFzcyAgICA9PiAnVW5pdFRlc3Q6OlRlc3RDbGFzc1t0ZXN0XSUqXFwnIC4gJENsYXNzUmFuZFsxXSwKICAgICAgICAgICAgTmFtZSAgICAgPT4gJ1t0ZXN0XSUqXFwgVGVzdCBJdGVtIFt0ZXN0XSUqXFwnLAogICAgICAgICAgICBWYWxpZElEICA9PiAxLAogICAgICAgICAgICBDb21tZW50ICA9PiAnW3Rlc3RdJSpcXCBUZXN0IENvbW1lbnQgW3Rlc3RdJSpcXCcsCiAgICAgICAgICAgIENyZWF0ZUJ5ID0+IDEsCiAgICAgICAgICAgIENoYW5nZUJ5ID0+IDEsCiAgICAgICAgfSwKICAgIH0sCgogICAgIyB0aGUgaXRlbSBvbmUgYWRkLXRlc3QgYmVmb3JlIG11c3QgYmUgdXBkYXRlZCBzdWNjZXNzZnVsbHkgKHNwZWNpYWwgY2hhcmFjdGVyIGNoZWNrcykKICAgIHsKICAgICAgICBVcGRhdGUgPT4gewogICAgICAgICAgICBOYW1lICAgID0+ICcgW3Rlc3RdJSpcXCBUZXN0IEl0ZW0gVVBEQVRFMSBbdGVzdF0lKlxcICcsCiAgICAgICAgICAgIFZhbGlkSUQgPT4gJFVzZXJJRHNbMV0sCiAgICAgICAgICAgIENvbW1lbnQgPT4gJyBbdGVzdF0lKlxcIFRlc3QgQ29tbWVudCBVUERBVEUxIFt0ZXN0XSUqXFwgJywKICAgICAgICAgICAgVXNlcklEICA9PiAkVXNlcklEc1sxXSwKICAgICAgICB9LAogICAgICAgIFVwZGF0ZUdldCA9PiB7CiAgICAgICAgICAgIE5hbWUgICAgID0+ICdbdGVzdF0lKlxcIFRlc3QgSXRlbSBVUERBVEUxIFt0ZXN0XSUqXFwnLAogICAgICAgICAgICBWYWxpZElEICA9PiAkVXNlcklEc1sxXSwKICAgICAgICAgICAgQ29tbWVudCAgPT4gJ1t0ZXN0XSUqXFwgVGVzdCBDb21tZW50IFVQREFURTEgW3Rlc3RdJSpcXCcsCiAgICAgICAgICAgIENyZWF0ZUJ5ID0+IDEsCiAgICAgICAgICAgIENoYW5nZUJ5ID0+ICRVc2VySURzWzFdLAogICAgICAgIH0sCiAgICB9LAoKICAgICMgdGhpcyBpdGVtIG11c3QgYmUgaW5zZXJ0ZWQgc3VjY2Vzc2Z1bGx5CiAgICB7CiAgICAgICAgQWRkID0+IHsKICAgICAgICAgICAgQ2xhc3MgICA9PiAnVW5pdFRlc3Q6OlRlc3RDbGFzcycgLiAkQ2xhc3NSYW5kWzBdLAogICAgICAgICAgICBOYW1lICAgID0+ICdUZXN0SXRlbVByZWZlcmVuY2VzJywKICAgICAgICAgICAgVmFsaWRJRCA9PiAxLAogICAgICAgICAgICBVc2VySUQgID0+IDEsCiAgICAgICAgfSwKICAgICAgICBBZGRHZXQgPT4gewogICAgICAgICAgICBDbGFzcyAgICA9PiAnVW5pdFRlc3Q6OlRlc3RDbGFzcycgLiAkQ2xhc3NSYW5kWzBdLAogICAgICAgICAgICBOYW1lICAgICA9PiAnVGVzdEl0ZW1QcmVmZXJlbmNlcycsCiAgICAgICAgICAgIFZhbGlkSUQgID0+IDEsCiAgICAgICAgICAgIENvbW1lbnQgID0+ICcnLAogICAgICAgICAgICBDcmVhdGVCeSA9PiAxLAogICAgICAgICAgICBDaGFuZ2VCeSA9PiAxLAogICAgICAgIH0sCiAgICB9LAoKICAgICMgdGhlIHByZWZlcmVuY2VzIG9mIHRoZSBpdGVtIG9uZSBhZGQtdGVzdCBiZWZvcmUgbXVzdCBiZSBzZXQKICAgIHsKICAgICAgICBQcmVmZXJlbmNlc1NldCA9PiB7CiAgICAgICAgICAgIFRlc3QgID0+ICdoZWxsbyB3b3JsZCcsCiAgICAgICAgICAgIEdyb3VwID0+IDMzLAogICAgICAgIH0sCiAgICAgICAgUHJlZmVyZW5jZXNHZXQgPT4gewogICAgICAgICAgICBUZXN0ICA9PiAnaGVsbG8gd29ybGQnLAogICAgICAgICAgICBHcm91cCA9PiAzMywKICAgICAgICB9LAogICAgfSwKCiAgICAjIHRoZSBwcmVmZXJlbmNlcyBvZiB0aGUgaXRlbSBvbmUgYWRkLXRlc3QgYmVmb3JlIG11c3QgYmUgc2V0CiAgICB7CiAgICAgICAgUHJlZmVyZW5jZXNTZXQgPT4gewogICAgICAgICAgICBUZXN0ID0+ICdoZWxsbycsCiAgICAgICAgICAgIFNpemUgPT4gMzgsCiAgICAgICAgfSwKICAgICAgICBQcmVmZXJlbmNlc0dldCA9PiB7CiAgICAgICAgICAgIFRlc3QgPT4gJ2hlbGxvJywKICAgICAgICAgICAgU2l6ZSA9PiAzOCwKICAgICAgICB9LAogICAgfSwKCiAgICAjIHRoaXMgaXRlbSBoYXMgYW4gZW1wdHkgbmFtZSBhbmQgbXVzdCBub3QgYmUgYWRkZWQKICAgIHsKICAgICAgICBBZGQgPT4gewogICAgICAgICAgICBDbGFzcyAgID0+ICdVbml0VGVzdDo6VGVzdENsYXNzJyAuICRDbGFzc1JhbmRbMF0sCiAgICAgICAgICAgIE5hbWUgICAgPT4gJycsCiAgICAgICAgICAgIFZhbGlkSUQgPT4gMSwKICAgICAgICAgICAgVXNlcklEICA9PiAxLAogICAgICAgIH0sCiAgICB9LAoKICAgICMgdGhpcyBpdGVtIG11c3QgYmUgYWRkZWQsIHRoZSBudW1iZXIgemVybyAoMCkgaXMgYWxsb3dlZCBhcyBuYW1lCiAgICB7CiAgICAgICAgQWRkID0+IHsKICAgICAgICAgICAgQ2xhc3MgICA9PiAnVW5pdFRlc3Q6OlRlc3RDbGFzcycgLiAkQ2xhc3NSYW5kWzBdLAogICAgICAgICAgICBOYW1lICAgID0+ICcwJywKICAgICAgICAgICAgVmFsaWRJRCA9PiAxLAogICAgICAgICAgICBVc2VySUQgID0+IDEsCiAgICAgICAgfSwKICAgICAgICBBZGRHZXQgPT4gewogICAgICAgICAgICBDbGFzcyAgICA9PiAnVW5pdFRlc3Q6OlRlc3RDbGFzcycgLiAkQ2xhc3NSYW5kWzBdLAogICAgICAgICAgICBOYW1lICAgICA9PiAnMCcsCiAgICAgICAgICAgIFZhbGlkSUQgID0+IDEsCiAgICAgICAgICAgIENvbW1lbnQgID0+ICcnLAogICAgICAgICAgICBDcmVhdGVCeSA9PiAxLAogICAgICAgICAgICBDaGFuZ2VCeSA9PiAxLAogICAgICAgIH0sCiAgICB9LAoKICAgICMgdGhlIGl0ZW0gb25lIGFkZC10ZXN0IGJlZm9yZSBtdXN0IGJlIHVwZGF0ZWQgc3VjY2Vzc2Z1bGx5ICh1cGRhdGluZyBuYW1lIHRvIG51bWJlciB6ZXJvICgwKSApCiAgICB7CiAgICAgICAgVXBkYXRlID0+IHsKICAgICAgICAgICAgTmFtZSAgICA9PiAnMCcsCiAgICAgICAgICAgIFZhbGlkSUQgPT4gMSwKICAgICAgICAgICAgQ29tbWVudCA9PiAnJywKICAgICAgICAgICAgVXNlcklEICA9PiAxLAogICAgICAgIH0sCiAgICAgICAgVXBkYXRlR2V0ID0+IHsKICAgICAgICAgICAgTmFtZSAgICAgPT4gJzAnLAogICAgICAgICAgICBWYWxpZElEICA9PiAxLAogICAgICAgICAgICBDb21tZW50ICA9PiAnJywKICAgICAgICAgICAgQ3JlYXRlQnkgPT4gMSwKICAgICAgICAgICAgQ2hhbmdlQnkgPT4gMSwKICAgICAgICB9LAogICAgfSwKCiAgICAjIHRoZSBpdGVtIG9uZSBhZGQtdGVzdCBiZWZvcmUgbXVzdCBub3QgYmUgdXBkYXRlZCBzdWNjZXNzZnVsbHkKICAgICMgKGVtcHR5IHN0cmluZyBhcyBuYW1lIGlzIG5vdCBhbGxvd2VkICkKICAgIHsKICAgICAgICBVcGRhdGUgPT4gewogICAgICAgICAgICBOYW1lICAgID0+ICcnLAogICAgICAgICAgICBWYWxpZElEID0+IDEsCiAgICAgICAgICAgIENvbW1lbnQgPT4gJycsCiAgICAgICAgICAgIFVzZXJJRCAgPT4gMSwKICAgICAgICB9LAogICAgfSwKXTsKCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKIyBydW4gZ2VuZXJhbCB0ZXN0cwojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCgpteSAkVGVzdENvdW50ID0gMTsKbXkgJExhc3RBZGRlZEl0ZW1JRDsKbXkgJUFkZGVkSXRlbUNvdW50ZXI7Cgpmb3IgbXkgJEl0ZW0gKCBAeyRJdGVtRGF0YX0gKSB7CgogICAgaWYgKCAkSXRlbS0+e0FkZH0gKSB7CgogICAgICAgICMgYWRkIG5ldyBpdGVtCiAgICAgICAgbXkgJEl0ZW1JRCA9ICRHZW5lcmFsQ2F0YWxvZ09iamVjdC0+SXRlbUFkZCgKICAgICAgICAgICAgJXsgJEl0ZW0tPntBZGR9IH0sCiAgICAgICAgKTsKCiAgICAgICAgIyBjaGVjayBpZiBpdGVtIHdhcyBhZGRlZCBzdWNjZXNzZnVsbHkgb3Igbm90CiAgICAgICAgaWYgKCAkSXRlbS0+e0FkZEdldH0gKSB7CgogICAgICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgICAgICRJdGVtSUQsCiAgICAgICAgICAgICAgICAiVGVzdCAkVGVzdENvdW50OiBJdGVtQWRkKCkgLSBJdGVtS2V5OiAkSXRlbUlEIiwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgIGlmICgkSXRlbUlEKSB7CgogICAgICAgICAgICAgICAgIyBzZXQgbGFzdCBpdGVtIGlkIHZhcmlhYmxlCiAgICAgICAgICAgICAgICAkTGFzdEFkZGVkSXRlbUlEID0gJEl0ZW1JRDsKCiAgICAgICAgICAgICAgICAjIGluY3JlbWVudCB0aGUgYWRkZWQgaXRlbSBjb3VudGVyCiAgICAgICAgICAgICAgICAkQWRkZWRJdGVtQ291bnRlcnsgJEl0ZW0tPntBZGRHZXR9LT57Q2xhc3N9IH0rKzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICAgJFNlbGYtPkZhbHNlKAogICAgICAgICAgICAgICAgJEl0ZW1JRCwKICAgICAgICAgICAgICAgICJUZXN0ICRUZXN0Q291bnQ6IEl0ZW1BZGQoKSIsCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICAjIGdldCBpdGVtIGRhdGEgdG8gY2hlY2sgdGhlIHZhbHVlcyBhZnRlciBjcmVhdGlvbiBvZiBpdGVtIHVzaW5nIEl0ZW1JZCBhbmQgVXNlcklECiAgICAgICAgbXkgJEl0ZW1HZXQgPSAkR2VuZXJhbENhdGFsb2dPYmplY3QtPkl0ZW1HZXQoCiAgICAgICAgICAgIEl0ZW1JRCA9PiAkSXRlbUlELAogICAgICAgICAgICBVc2VySUQgPT4gJEl0ZW0tPntBZGR9LT57VXNlcklEfSwKICAgICAgICApOwoKICAgICAgICAjIGNoZWNrIGl0ZW0gZGF0YSBhZnRlciBjcmVhdGlvbiBvZiBpdGVtCiAgICAgICAgZm9yIG15ICRJdGVtQXR0cmlidXRlICggc29ydCBrZXlzICV7ICRJdGVtLT57QWRkR2V0fSB9ICkgewogICAgICAgICAgICAkU2VsZi0+SXMoCiAgICAgICAgICAgICAgICAkSXRlbUdldC0+eyRJdGVtQXR0cmlidXRlfSwKICAgICAgICAgICAgICAgICRJdGVtLT57QWRkR2V0fS0+eyRJdGVtQXR0cmlidXRlfSwKICAgICAgICAgICAgICAgICJUZXN0ICRUZXN0Q291bnQ6IEl0ZW1HZXQoKSAtIFVzaW5nIEl0ZW1JRCBhbmQgVXNlcklEIC0gJEl0ZW1BdHRyaWJ1dGUgIiwKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgICMgZ2V0IGl0ZW0gZGF0YSB0byBjaGVjayB0aGUgdmFsdWVzIGFmdGVyIGNyZWF0aW9uIG9mIGl0ZW0gdXNpbmcgQ2xhc3MgYW5kIE5hbWUKICAgICAgICAkSXRlbUdldCA9ICRHZW5lcmFsQ2F0YWxvZ09iamVjdC0+SXRlbUdldCgKICAgICAgICAgICAgQ2xhc3MgPT4gJEl0ZW0tPntBZGRHZXR9LT57Q2xhc3N9LAogICAgICAgICAgICBOYW1lICA9PiAkSXRlbS0+e0FkZEdldH0tPntOYW1lfSwKICAgICAgICApOwoKICAgICAgICAjIGNoZWNrIGl0ZW0gZGF0YSBhZnRlciBjcmVhdGlvbiBvZiBpdGVtCiAgICAgICAgZm9yIG15ICRJdGVtQXR0cmlidXRlICggc29ydCBrZXlzICV7ICRJdGVtLT57QWRkR2V0fSB9ICkgewogICAgICAgICAgICAkU2VsZi0+SXMoCiAgICAgICAgICAgICAgICAkSXRlbUdldC0+eyRJdGVtQXR0cmlidXRlfSwKICAgICAgICAgICAgICAgICRJdGVtLT57QWRkR2V0fS0+eyRJdGVtQXR0cmlidXRlfSwKICAgICAgICAgICAgICAgICJUZXN0ICRUZXN0Q291bnQ6IEl0ZW1HZXQoKSAtIFVzaW5nIENsYXNzIGFuZCBOYW1lIC0gJEl0ZW1BdHRyaWJ1dGUgIiwKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICB9CgogICAgaWYgKCAkSXRlbS0+e1VwZGF0ZX0gKSB7CgogICAgICAgICMgY2hlY2sgbGFzdCBpdGVtIGlkIHZhcmlhYmxlCiAgICAgICAgaWYgKCAhJExhc3RBZGRlZEl0ZW1JRCApIHsKICAgICAgICAgICAgJFNlbGYtPkZhbHNlKAogICAgICAgICAgICAgICAgMSwKICAgICAgICAgICAgICAgICJUZXN0ICRUZXN0Q291bnQ6IE5PIExBU1QgSVRFTSBJRCBHSVZFTiIsCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICAjIHVwZGF0ZSB0aGUgaXRlbQogICAgICAgIG15ICRVcGRhdGVTdWNlc3MgPSAkR2VuZXJhbENhdGFsb2dPYmplY3QtPkl0ZW1VcGRhdGUoCiAgICAgICAgICAgICV7ICRJdGVtLT57VXBkYXRlfSB9LAogICAgICAgICAgICBJdGVtSUQgPT4gJExhc3RBZGRlZEl0ZW1JRCwKICAgICAgICApOwoKICAgICAgICAjIGNoZWNrIGlmIGl0ZW0gd2FzIHVwZGF0ZWQgc3VjY2Vzc2Z1bGx5IG9yIG5vdAogICAgICAgIGlmICggJEl0ZW0tPntVcGRhdGVHZXR9ICkgewogICAgICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgICAgICRVcGRhdGVTdWNlc3MsCiAgICAgICAgICAgICAgICAiVGVzdCAkVGVzdENvdW50OiBJdGVtVXBkYXRlKCkgLSBJdGVtS2V5OiAkTGFzdEFkZGVkSXRlbUlEIiwKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICRTZWxmLT5GYWxzZSgKICAgICAgICAgICAgICAgICRVcGRhdGVTdWNlc3MsCiAgICAgICAgICAgICAgICAiVGVzdCAkVGVzdENvdW50OiBJdGVtVXBkYXRlKCkiLAogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgIyBnZXQgaXRlbSBkYXRhIHRvIGNoZWNrIHRoZSB2YWx1ZXMgYWZ0ZXIgdGhlIHVwZGF0ZQogICAgICAgIG15ICRJdGVtR2V0MiA9ICRHZW5lcmFsQ2F0YWxvZ09iamVjdC0+SXRlbUdldCgKICAgICAgICAgICAgSXRlbUlEID0+ICRMYXN0QWRkZWRJdGVtSUQsCiAgICAgICAgICAgIFVzZXJJRCA9PiAkSXRlbS0+e1VwZGF0ZX0tPntVc2VySUR9LAogICAgICAgICk7CgogICAgICAgICMgY2hlY2sgaXRlbSBkYXRhIGFmdGVyIHVwZGF0ZQogICAgICAgIGZvciBteSAkSXRlbUF0dHJpYnV0ZSAoIHNvcnQga2V5cyAleyAkSXRlbS0+e1VwZGF0ZUdldH0gfSApIHsKICAgICAgICAgICAgJFNlbGYtPklzKAogICAgICAgICAgICAgICAgJEl0ZW1HZXQyLT57JEl0ZW1BdHRyaWJ1dGV9LAogICAgICAgICAgICAgICAgJEl0ZW0tPntVcGRhdGVHZXR9LT57JEl0ZW1BdHRyaWJ1dGV9LAogICAgICAgICAgICAgICAgIlRlc3QgJFRlc3RDb3VudDogSXRlbUdldCgpIC0gJEl0ZW1BdHRyaWJ1dGUiLAogICAgICAgICAgICApOwogICAgICAgIH0KICAgIH0KCiAgICBpZiAoICRJdGVtLT57UHJlZmVyZW5jZXNTZXR9ICkgewoKICAgICAgICBmb3IgbXkgJEtleSAoIHNvcnQga2V5cyAleyAkSXRlbS0+e1ByZWZlcmVuY2VzU2V0fSB9ICkgewoKICAgICAgICAgICAgIyBzZXQgcHJlZmVyZW5jZXMKICAgICAgICAgICAgbXkgJFN1Y2Nlc3MgPSAkR2VuZXJhbENhdGFsb2dPYmplY3QtPkdlbmVyYWxDYXRhbG9nUHJlZmVyZW5jZXNTZXQoCiAgICAgICAgICAgICAgICBLZXkgICAgPT4gJEtleSwKICAgICAgICAgICAgICAgIFZhbHVlICA9PiAkSXRlbS0+e1ByZWZlcmVuY2VzU2V0fS0+eyRLZXl9LAogICAgICAgICAgICAgICAgSXRlbUlEID0+ICRMYXN0QWRkZWRJdGVtSUQsCiAgICAgICAgICAgICk7CgogICAgICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgICAgICRTdWNjZXNzLAogICAgICAgICAgICAgICAgIlRlc3QgJFRlc3RDb3VudDogUHJlZmVyZW5jZXNTZXQoKSAtICRLZXkiLAogICAgICAgICAgICApOwogICAgICAgIH0KICAgIH0KCiAgICAjIGNoZWNrIHByZWZlcmVuY2VzCiAgICBpZiAoICRJdGVtLT57UHJlZmVyZW5jZXNHZXR9ICkgewogICAgICAgIG15ICVQcmVmZXJlbmNlcyA9ICRHZW5lcmFsQ2F0YWxvZ09iamVjdC0+R2VuZXJhbENhdGFsb2dQcmVmZXJlbmNlc0dldCgKICAgICAgICAgICAgSXRlbUlEID0+ICRMYXN0QWRkZWRJdGVtSUQsCiAgICAgICAgKTsKCiAgICAgICAgZm9yIG15ICRLZXkgKCBzb3J0IGtleXMgJXsgJEl0ZW0tPntQcmVmZXJlbmNlc0dldH0gfSApIHsKICAgICAgICAgICAgaWYgKCAkSXRlbS0+e1ByZWZlcmVuY2VzR2V0fS0+eyRLZXl9IGVxICRQcmVmZXJlbmNlc3skS2V5fSApIHsKICAgICAgICAgICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICAgICAgICAgIDEsCiAgICAgICAgICAgICAgICAgICAgIlRlc3QgJFRlc3RDb3VudDogUHJlZmVyZW5jZXNHZXQoKSAtICRLZXkiLAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICAgICAgICAgIDAsCiAgICAgICAgICAgICAgICAgICAgIlRlc3QgJFRlc3RDb3VudDogUHJlZmVyZW5jZXNHZXQoKSAtICRLZXkiLAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICAkVGVzdENvdW50Kys7Cn0KCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKIyBtYWtlIHByZXBhcmF0aW9ucyBmb3IgbGF0ZXIgdGVzdHMKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwoKIyBjcmVhdGUgbmVlZGVkIGFycmF5cwpteSAlRXhpc3RpbmdDbGFzc2VzVG1wOwpJVEVNOgpmb3IgbXkgJEl0ZW0gKCBAeyRJdGVtRGF0YX0gKSB7CiAgICBuZXh0IElURU0gaWYgISRJdGVtLT57QWRkR2V0fS0+e0NsYXNzfTsKICAgICRFeGlzdGluZ0NsYXNzZXNUbXB7ICRJdGVtLT57QWRkR2V0fS0+e0NsYXNzfSB9ID0gMTsKfQpteSBARXhpc3RpbmdDbGFzc2VzID0gc29ydCBrZXlzICVFeGlzdGluZ0NsYXNzZXNUbXA7CgpteSAlRXhpc3RpbmdGdW5jdGlvbmFsaXRpZXNUbXA7CklURU06CmZvciBteSAkSXRlbSAoIEB7JEl0ZW1EYXRhfSApIHsKICAgICRJdGVtLT57VXBkYXRlR2V0fS0+e0Z1bmN0aW9uYWxpdHl9IHx8PSAnJzsKICAgICRFeGlzdGluZ0Z1bmN0aW9uYWxpdGllc1RtcHsgJEl0ZW0tPntVcGRhdGVHZXR9LT57RnVuY3Rpb25hbGl0eX0gfSA9IDE7Cn0KbXkgQEV4aXN0aW5nRnVuY3Rpb25hbGl0aWVzID0gc29ydCBrZXlzICVFeGlzdGluZ0Z1bmN0aW9uYWxpdGllc1RtcDsKCm15IEBOb25FeGlzdGluZ0NsYXNzZXMgPSAoICdVbml0VGVzdDo6Tm9FeGlzdGluZ0NsYXNzMScsICdVbml0VGVzdDo6Tm9FeGlzdGluZ0NsYXNzMicgKTsKCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKIyBDbGFzc0xpc3QgdGVzdCAxCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKCm15ICRDbGFzc0xpc3QxID0gJEdlbmVyYWxDYXRhbG9nT2JqZWN0LT5DbGFzc0xpc3QoKTsKCmZvciBteSAkQ2xhc3MgKEBFeGlzdGluZ0NsYXNzZXMpIHsKCiAgICBteSAkQ2xhc3NDb3VudCA9IDA7CiAgICBpZiAoICRDbGFzc0xpc3QxICYmIHJlZiAkQ2xhc3NMaXN0MSBlcSAnQVJSQVknICkgewogICAgICAgICRDbGFzc0NvdW50ID0gZ3JlcCB7ICRfIGVxICRDbGFzcyB9IEB7JENsYXNzTGlzdDF9OwogICAgfQoKICAgICRTZWxmLT5JcygKICAgICAgICAkQ2xhc3NDb3VudCwKICAgICAgICAxLAogICAgICAgICJUZXN0ICRUZXN0Q291bnQ6IENsYXNzTGlzdCgpIC0gJENsYXNzIGxpc3RlZCIsCiAgICApOwoKICAgICRUZXN0Q291bnQrKzsKfQoKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwojIEl0ZW1MaXN0IHRlc3QgMQojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCgpmb3IgbXkgJENsYXNzIChATm9uRXhpc3RpbmdDbGFzc2VzKSB7CgogICAgbXkgJEl0ZW1MaXN0ID0gJEdlbmVyYWxDYXRhbG9nT2JqZWN0LT5JdGVtTGlzdCgKICAgICAgICBDbGFzcyA9PiAkQ2xhc3MsCiAgICAgICAgVmFsaWQgPT4gMCwKICAgICk7CgogICAgJFNlbGYtPkZhbHNlKAogICAgICAgICRJdGVtTGlzdCwKICAgICAgICAiVGVzdCAkVGVzdENvdW50OiBJdGVtTGlzdCgpIC0gJENsYXNzIG5vdCBleGlzdHMiLAogICAgKTsKCiAgICAkVGVzdENvdW50Kys7Cn0KCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKIyBJdGVtTGlzdCB0ZXN0IDIKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwoKZm9yIG15ICRDbGFzcyAoQEV4aXN0aW5nQ2xhc3NlcykgewoKICAgIG15ICRJdGVtTGlzdCA9ICRHZW5lcmFsQ2F0YWxvZ09iamVjdC0+SXRlbUxpc3QoCiAgICAgICAgQ2xhc3MgPT4gJENsYXNzLAogICAgICAgIFZhbGlkID0+IDAsCiAgICApOwoKICAgIG15ICRMaXN0Q291bnQgPSAnTlVMTCc7CiAgICBpZiAoIGRlZmluZWQgJEl0ZW1MaXN0ICYmIHJlZiAkSXRlbUxpc3QgZXEgJ0hBU0gnICkgewogICAgICAgICRMaXN0Q291bnQgPSBrZXlzICV7JEl0ZW1MaXN0fTsKICAgIH0KCiAgICAkU2VsZi0+SXMoCiAgICAgICAgJExpc3RDb3VudCwKICAgICAgICAkQWRkZWRJdGVtQ291bnRlcnskQ2xhc3N9LAogICAgICAgICJUZXN0ICRUZXN0Q291bnQ6IEl0ZW1MaXN0KCkgLSAkQ2xhc3MgY29ycmVjdCBudW1iZXIgb2YgaXRlbXMiLAogICAgKTsKCiAgICAkVGVzdENvdW50Kys7Cn0KCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKIyBJdGVtTGlzdCB0ZXN0IDMgLSBJdGVtIExpc3Qgd2l0aCBwcmVmZXJlbmNlcyAoc2luZ2xlIGhhc2ggZW50cnkpCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKCnsKCiAgICBteSAkQ2xhc3MgICAgPSAnVW5pdFRlc3Q6OlRlc3RDbGFzcycgLiAkQ2xhc3NSYW5kWzBdOwogICAgbXkgJEl0ZW1MaXN0ID0gJEdlbmVyYWxDYXRhbG9nT2JqZWN0LT5JdGVtTGlzdCgKICAgICAgICBDbGFzcyAgICAgICA9PiAkQ2xhc3MsCiAgICAgICAgVmFsaWQgICAgICAgPT4gMSwKICAgICAgICBQcmVmZXJlbmNlcyA9PiB7CiAgICAgICAgICAgIEhlbGxvID0+ICdXb3JsZCcsCiAgICAgICAgfSwKICAgICk7CgogICAgbXkgJExpc3RDb3VudCA9ICdOVUxMJzsKICAgIGlmICggZGVmaW5lZCAkSXRlbUxpc3QgJiYgcmVmICRJdGVtTGlzdCBlcSAnSEFTSCcgKSB7CiAgICAgICAgJExpc3RDb3VudCA9IGtleXMgJXskSXRlbUxpc3R9OwogICAgfQoKICAgICRTZWxmLT5JcygKICAgICAgICAkTGlzdENvdW50LAogICAgICAgIDEsCiAgICAgICAgIlRlc3QgJFRlc3RDb3VudDogSXRlbUxpc3QoKSBwcmVmZXJlbmNlcyAoc2luZ2xlIGhhc2ggZW50cnkpIC0gJENsYXNzIGNvcnJlY3QgbnVtYmVyIG9mIGl0ZW1zIiwKICAgICk7CgogICAgJFRlc3RDb3VudCsrOwp9CgojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiMgSXRlbUxpc3QgdGVzdCA0IC0gSXRlbSBMaXN0IHdpdGggcHJlZmVyZW5jZXMgKGFycmF5KQojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCgp7CgogICAgbXkgJENsYXNzICAgID0gJ1VuaXRUZXN0OjpUZXN0Q2xhc3MnIC4gJENsYXNzUmFuZFswXTsKICAgIG15ICRJdGVtTGlzdCA9ICRHZW5lcmFsQ2F0YWxvZ09iamVjdC0+SXRlbUxpc3QoCiAgICAgICAgQ2xhc3MgICAgICAgPT4gJENsYXNzLAogICAgICAgIFZhbGlkICAgICAgID0+IDEsCiAgICAgICAgUHJlZmVyZW5jZXMgPT4gewogICAgICAgICAgICBDb2xvciA9PiBbICdSZWQnLCAnQmx1ZScgXSwKICAgICAgICB9LAogICAgKTsKCiAgICBteSAkTGlzdENvdW50ID0gJ05VTEwnOwogICAgaWYgKCBkZWZpbmVkICRJdGVtTGlzdCAmJiByZWYgJEl0ZW1MaXN0IGVxICdIQVNIJyApIHsKICAgICAgICAkTGlzdENvdW50ID0ga2V5cyAleyRJdGVtTGlzdH07CiAgICB9CgogICAgJFNlbGYtPklzKAogICAgICAgICRMaXN0Q291bnQsCiAgICAgICAgMiwKICAgICAgICAiVGVzdCAkVGVzdENvdW50OiBJdGVtTGlzdCgpIHByZWZlcmVuY2VzIChhcnJheSkgLSAkQ2xhc3MgY29ycmVjdCBudW1iZXIgb2YgaXRlbXMiLAogICAgKTsKCiAgICAkVGVzdENvdW50Kys7Cn0KCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKIyBQcmVmZXJlbmNlcyB0ZXN0IDEKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwpmb3IgbXkgJENsYXNzIChARXhpc3RpbmdDbGFzc2VzKSB7CgogICAgbXkgJEl0ZW1JRCA9ICRHZW5lcmFsQ2F0YWxvZ09iamVjdC0+SXRlbUFkZCgKICAgICAgICBDbGFzcyAgID0+ICRDbGFzcywKICAgICAgICBOYW1lICAgID0+ICdJdGVtIFByZWZlcmVuY2VzJywKICAgICAgICBWYWxpZElEID0+IDEsCiAgICAgICAgVXNlcklEICA9PiAxLAogICAgKTsKCiAgICAkR2VuZXJhbENhdGFsb2dPYmplY3QtPkdlbmVyYWxDYXRhbG9nUHJlZmVyZW5jZXNTZXQoCiAgICAgICAgSXRlbUlEID0+ICRJdGVtSUQsCiAgICAgICAgS2V5ICAgID0+ICdVbml0VGVzdFByZWYnLAogICAgICAgIFZhbHVlICA9PiAnMScsCiAgICApOwoKICAgIG15ICRJdGVtTGlzdCA9ICRHZW5lcmFsQ2F0YWxvZ09iamVjdC0+SXRlbUxpc3QoCiAgICAgICAgQ2xhc3MgICAgICAgPT4gJENsYXNzLAogICAgICAgIFByZWZlcmVuY2VzID0+IHsKICAgICAgICAgICAgVW5pdFRlc3RQcmVmID0+IDEsCiAgICAgICAgfSwKICAgICk7CgogICAgJFNlbGYtPklzKAogICAgICAgICRJdGVtTGlzdC0+eyRJdGVtSUR9LAogICAgICAgICdJdGVtIFByZWZlcmVuY2VzJywKICAgICAgICAiVGVzdCAkVGVzdENvdW50OiBJdGVtTGlzdCgpIC0gQ2xhc3MgJENsYXNzIFByZWZlcmVuY2VzIG1hdGNoIiwKICAgICk7CgogICAgJEdlbmVyYWxDYXRhbG9nT2JqZWN0LT5HZW5lcmFsQ2F0YWxvZ1ByZWZlcmVuY2VzU2V0KAogICAgICAgIEl0ZW1JRCA9PiAkSXRlbUlELAogICAgICAgIEtleSAgICA9PiAnVW5pdFRlc3RQcmVmJywKICAgICAgICBWYWx1ZSAgPT4gJzInLAogICAgKTsKCiAgICAkSXRlbUxpc3QgPSAkR2VuZXJhbENhdGFsb2dPYmplY3QtPkl0ZW1MaXN0KAogICAgICAgIENsYXNzICAgICAgID0+ICRDbGFzcywKICAgICAgICBQcmVmZXJlbmNlcyA9PiB7CiAgICAgICAgICAgIFVuaXRUZXN0UHJlZiA9PiAxLAogICAgICAgIH0sCiAgICApOwoKICAgICRTZWxmLT5GYWxzZSgKICAgICAgICAkSXRlbUxpc3QsCiAgICAgICAgIlRlc3QgJFRlc3RDb3VudDogSXRlbUxpc3QoKSAtIENsYXNzICRDbGFzcyBQcmVmZXJlbmNlcyBub3QgbWF0Y2ggYWZ0ZXIgUHJlZmVyZW5jZXNTZXQgQ2hhbmdlIgogICAgKTsKCiAgICAkR2VuZXJhbENhdGFsb2dPYmplY3QtPkl0ZW1VcGRhdGUoCiAgICAgICAgSXRlbUlEICA9PiAkSXRlbUlELAogICAgICAgIE5hbWUgICAgPT4gJ0l0ZW0gUHJlZmVyZW5jZXMnLAogICAgICAgIFZhbGlkSUQgPT4gMiwKICAgICAgICBVc2VySUQgID0+IDEsCiAgICApOwoKICAgICRUZXN0Q291bnQrKzsKfQoKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwojIFByZWZlcmVuY2VzIHRlc3QgMgojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCgo9cG9kCgpteSAlRnVuY3Rpb25hbGl0eUxpc3QxOwptYXAgeyAkRnVuY3Rpb25hbGl0eUxpc3QxeyRffSA9IDEgfSBARXhpc3RpbmdGdW5jdGlvbmFsaXRpZXM7Cgpmb3IgbXkgJENsYXNzIChARXhpc3RpbmdDbGFzc2VzKSB7CgogICAgbXkgJEZ1bmN0aW9uYWxpdHlMaXN0ID0gJEdlbmVyYWxDYXRhbG9nT2JqZWN0LT5GdW5jdGlvbmFsaXR5TGlzdCgKICAgICAgICBDbGFzcyA9PiAkQ2xhc3MsCiAgICApOwoKICAgICRTZWxmLT5UcnVlKAogICAgICAgICRGdW5jdGlvbmFsaXR5TGlzdCAmJiByZWYgJEZ1bmN0aW9uYWxpdHlMaXN0IGVxICdBUlJBWScsCiAgICAgICAgIlRlc3QgJFRlc3RDb3VudDogRnVuY3Rpb25hbGl0eUxpc3QoKSAtIHJldHVybiBhIGFycmF5IHJlZmVyZW5jZSIsCiAgICApOwoKICAgIGZvciBteSAkRnVuY3Rpb25hbGl0eSAoIEB7JEZ1bmN0aW9uYWxpdHlMaXN0fSApIHsKICAgICAgICBkZWxldGUgJEZ1bmN0aW9uYWxpdHlMaXN0MXskRnVuY3Rpb25hbGl0eX07CiAgICB9CgogICAgJFRlc3RDb3VudCsrOwp9CgokU2VsZi0+VHJ1ZSgKICAgICFrZXlzICVGdW5jdGlvbmFsaXR5TGlzdDEsCiAgICAiVGVzdCAkVGVzdENvdW50OiBGdW5jdGlvbmFsaXR5TGlzdCgpIiwKKTsKCiRUZXN0Q291bnQrKzsKCj1jdXQKCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKIyBDbGFzc1JlbmFtZSB0ZXN0IDEgKGNoZWNrIG5vcm1hbCByZW5hbWUpCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKCkNMQVNTOgpmb3IgbXkgJENsYXNzIChARXhpc3RpbmdDbGFzc2VzKSB7CgogICAgbXkgJE9sZEl0ZW1MaXN0ID0gJEdlbmVyYWxDYXRhbG9nT2JqZWN0LT5JdGVtTGlzdCgKICAgICAgICBDbGFzcyA9PiAkQ2xhc3MsCiAgICAgICAgVmFsaWQgPT4gMCwKICAgICk7CgogICAgbXkgJFN1Y2Nlc3MgPSAkR2VuZXJhbENhdGFsb2dPYmplY3QtPkNsYXNzUmVuYW1lKAogICAgICAgIENsYXNzT2xkID0+ICRDbGFzcywKICAgICAgICBDbGFzc05ldyA9PiAkQ2xhc3MgLiAnUkVOQU1FMScsCiAgICApOwoKICAgIGlmICggISRTdWNjZXNzICkgewogICAgICAgICRTZWxmLT5GYWxzZSgKICAgICAgICAgICAgMSwKICAgICAgICAgICAgIlRlc3QgJFRlc3RDb3VudDogQ2xhc3NSZW5hbWUoKSAtIFJlbmFtZSBmYWlsZWQiLAogICAgICAgICk7CiAgICAgICAgbmV4dCBDTEFTUzsKICAgIH0KCiAgICBteSAkTmV3SXRlbUxpc3QgPSAkR2VuZXJhbENhdGFsb2dPYmplY3QtPkl0ZW1MaXN0KAogICAgICAgIENsYXNzID0+ICRDbGFzcyAuICdSRU5BTUUxJywKICAgICAgICBWYWxpZCA9PiAwLAogICAgKTsKCiAgICBpZiAoCiAgICAgICAgISRPbGRJdGVtTGlzdAogICAgICAgIHx8ICEkTmV3SXRlbUxpc3QKICAgICAgICB8fCByZWYgJE9sZEl0ZW1MaXN0IG5lICdIQVNIJwogICAgICAgIHx8IHJlZiAkTmV3SXRlbUxpc3QgbmUgJ0hBU0gnCiAgICAgICAgKQogICAgewogICAgICAgICRTZWxmLT5GYWxzZSgKICAgICAgICAgICAgMSwKICAgICAgICAgICAgIlRlc3QgJFRlc3RDb3VudDogQ2xhc3NSZW5hbWUoKSAtIEl0ZW1MaXN0IGZhaWxlZCIsCiAgICAgICAgKTsKICAgICAgICBuZXh0IENMQVNTOwogICAgfQoKICAgIE9MREtFWToKICAgIGZvciBteSAkT2xkS2V5ICggc29ydCBrZXlzICV7JE9sZEl0ZW1MaXN0fSApIHsKCiAgICAgICAgaWYgKCAhZXhpc3RzICROZXdJdGVtTGlzdC0+eyRPbGRLZXl9ICkgewogICAgICAgICAgICAkTmV3SXRlbUxpc3QtPntGYWlsZWREdW1teX0gPSAxOwogICAgICAgICAgICBuZXh0IE9MREtFWTsKICAgICAgICB9CgogICAgICAgIG5leHQgT0xES0VZIGlmICRPbGRJdGVtTGlzdC0+eyRPbGRLZXl9IG5lICROZXdJdGVtTGlzdC0+eyRPbGRLZXl9OwoKICAgICAgICBkZWxldGUgJE5ld0l0ZW1MaXN0LT57JE9sZEtleX07CiAgICB9CgogICAgJFNlbGYtPlRydWUoCiAgICAgICAgIWtleXMgJXskTmV3SXRlbUxpc3R9LAogICAgICAgICJUZXN0ICRUZXN0Q291bnQ6IENsYXNzUmVuYW1lKCkiLAogICAgKTsKCiAgICAkVGVzdENvdW50Kys7Cn0KCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKIyBDbGFzc1JlbmFtZSB0ZXN0IDIgKGNoZWNrIHN0cmluZyBjbGVhbmVyIGZ1bmN0aW9uKQojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCgpDTEFTUzoKZm9yIG15ICRDbGFzcyAoQEV4aXN0aW5nQ2xhc3NlcykgewoKICAgIG15ICRPbGRJdGVtTGlzdCA9ICRHZW5lcmFsQ2F0YWxvZ09iamVjdC0+SXRlbUxpc3QoCiAgICAgICAgQ2xhc3MgPT4gJENsYXNzIC4gJ1JFTkFNRTEnLAogICAgICAgIFZhbGlkID0+IDAsCiAgICApOwoKICAgIG15ICRTdWNjZXNzID0gJEdlbmVyYWxDYXRhbG9nT2JqZWN0LT5DbGFzc1JlbmFtZSgKICAgICAgICBDbGFzc09sZCA9PiAkQ2xhc3MgLiAnUkVOQU1FMScsCiAgICAgICAgQ2xhc3NOZXcgPT4gJyAnIC4gJENsYXNzIC4gIlJFIE5BIE1FIDIgXG4gXHIgXHQgIiwKICAgICk7CgogICAgaWYgKCAhJFN1Y2Nlc3MgKSB7CiAgICAgICAgJFNlbGYtPkZhbHNlKAogICAgICAgICAgICAxLAogICAgICAgICAgICAiVGVzdCAkVGVzdENvdW50OiBDbGFzc1JlbmFtZSgpIC0gUmVuYW1lIGZhaWxlZCIsCiAgICAgICAgKTsKICAgICAgICBuZXh0IENMQVNTOwogICAgfQoKICAgIG15ICROZXdJdGVtTGlzdCA9ICRHZW5lcmFsQ2F0YWxvZ09iamVjdC0+SXRlbUxpc3QoCiAgICAgICAgQ2xhc3MgPT4gJENsYXNzIC4gJ1JFTkFNRTInLAogICAgICAgIFZhbGlkID0+IDAsCiAgICApOwoKICAgIGlmICgKICAgICAgICAhJE9sZEl0ZW1MaXN0CiAgICAgICAgfHwgISROZXdJdGVtTGlzdAogICAgICAgIHx8IHJlZiAkT2xkSXRlbUxpc3QgbmUgJ0hBU0gnCiAgICAgICAgfHwgcmVmICROZXdJdGVtTGlzdCBuZSAnSEFTSCcKICAgICAgICApCiAgICB7CiAgICAgICAgJFNlbGYtPkZhbHNlKAogICAgICAgICAgICAxLAogICAgICAgICAgICAiVGVzdCAkVGVzdENvdW50OiBDbGFzc1JlbmFtZSgpIC0gSXRlbUxpc3QgZmFpbGVkIiwKICAgICAgICApOwogICAgICAgIG5leHQgQ0xBU1M7CiAgICB9CgogICAgT0xES0VZOgogICAgZm9yIG15ICRPbGRLZXkgKCBzb3J0IGtleXMgJXskT2xkSXRlbUxpc3R9ICkgewoKICAgICAgICBpZiAoICFleGlzdHMgJE5ld0l0ZW1MaXN0LT57JE9sZEtleX0gKSB7CiAgICAgICAgICAgICROZXdJdGVtTGlzdC0+e0ZhaWxlZER1bW15fSA9IDE7CiAgICAgICAgICAgIG5leHQgT0xES0VZOwogICAgICAgIH0KCiAgICAgICAgbmV4dCBPTERLRVkgaWYgJE9sZEl0ZW1MaXN0LT57JE9sZEtleX0gbmUgJE5ld0l0ZW1MaXN0LT57JE9sZEtleX07CgogICAgICAgIGRlbGV0ZSAkTmV3SXRlbUxpc3QtPnskT2xkS2V5fTsKICAgIH0KCiAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAha2V5cyAleyROZXdJdGVtTGlzdH0sCiAgICAgICAgIlRlc3QgJFRlc3RDb3VudDogQ2xhc3NSZW5hbWUoKSIsCiAgICApOwoKICAgICRUZXN0Q291bnQrKzsKfQoKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwojIENsYXNzUmVuYW1lIHRlc3QgMiAoaWRlbnRpY2FsIG5hbWUgdGVzdCkKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwoKZm9yIG15ICRDbGFzcyAoQEV4aXN0aW5nQ2xhc3NlcykgewoKICAgIG15ICRTdWNjZXNzID0gJEdlbmVyYWxDYXRhbG9nT2JqZWN0LT5DbGFzc1JlbmFtZSgKICAgICAgICBDbGFzc09sZCA9PiAkQ2xhc3MgLiAnUkVOQU1FMicsCiAgICAgICAgQ2xhc3NOZXcgPT4gJENsYXNzIC4gJ1JFTkFNRTInLAogICAgKTsKCiAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAkU3VjY2VzcywKICAgICAgICAiVGVzdCAkVGVzdENvdW50OiBDbGFzc1JlbmFtZSgpIC0gb2xkbmFtZSBhbmQgbmV3bmFtZSBpZGVudGljYWwiLAogICAgKTsKCiAgICAkVGVzdENvdW50Kys7Cn0KCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKIyBDbGFzc1JlbmFtZSB0ZXN0IDMgKG5ldyBjbGFzcyBuYW1lIGFscmVhZHkgZXhpc3RzKQojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCgokR2VuZXJhbENhdGFsb2dPYmplY3QtPkl0ZW1BZGQoCiAgICBDbGFzcyAgICAgICAgID0+ICdVbml0VGVzdDo6VGVzdENsYXNzJyAuICRDbGFzc1JhbmRbMl0sCiAgICBOYW1lICAgICAgICAgID0+ICdEdW1teScsCiAgICBGdW5jdGlvbmFsaXR5ID0+ICcnLAogICAgVmFsaWRJRCAgICAgICA9PiAxLAogICAgVXNlcklEICAgICAgICA9PiAxLAopOwoKZm9yIG15ICRDbGFzcyAoQEV4aXN0aW5nQ2xhc3NlcykgewoKICAgIG15ICRTdWNjZXNzID0gJEdlbmVyYWxDYXRhbG9nT2JqZWN0LT5DbGFzc1JlbmFtZSgKICAgICAgICBDbGFzc09sZCA9PiAkQ2xhc3MgLiAnUkVOQU1FMicsCiAgICAgICAgQ2xhc3NOZXcgPT4gJ1VuaXRUZXN0OjpUZXN0Q2xhc3MnIC4gJENsYXNzUmFuZFsyXSwKICAgICk7CgogICAgJFNlbGYtPkZhbHNlKAogICAgICAgICRTdWNjZXNzLAogICAgICAgICJUZXN0ICRUZXN0Q291bnQ6IENsYXNzUmVuYW1lKCkgLSBuZXcgY2xhc3MgbmFtZSBhbHJlYWR5IGV4aXN0cyIsCiAgICApOwoKICAgICRUZXN0Q291bnQrKzsKfQoKIyByZXN0b3JlIG9yaWdpbmFsIGdlbmVyYWwgY2F0YWxvZyBwZXJtaXNzaW9uIHByZWZlcmVuY2VzIHNldHRpbmcKJENvbmZpZ09iamVjdC0+U2V0KAogICAgS2V5ICAgPT4gJ0dlbmVyYWxDYXRhbG9nUHJlZmVyZW5jZXMjIyNQZXJtaXNzaW9ucycsCiAgICBWYWx1ZSA9PiAkR2VuZXJhbENhdGFsb2dQcmVmZXJlbmNlc1Blcm1pc3Npb25zT3JnLAopOwoKIyBjbGVhbnVwIGlzIGRvbmUgYnkgUmVzdG9yZURhdGFiYXNlCgoxOwo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIxIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDIxLTIwMjIgWm51bnkgR21iSCwgaHR0cHM6Ly96bnVueS5vcmcvCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0zLjAudHh0LgojIC0tCgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CnVzZSB1dGY4OwoKdXNlIHZhcnMgKHF3KCRTZWxmKSk7CgojIGdldCBzZWxlbml1bSBvYmplY3QKbXkgJFNlbGVuaXVtID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlVuaXRUZXN0OjpTZWxlbml1bScpOwoKJFNlbGVuaXVtLT5SdW5UZXN0KAogICAgc3ViIHsKCiAgICAgICAgIyBnZXQgaGVscGVyIG9iamVjdAogICAgICAgIG15ICRIZWxwZXIgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VW5pdFRlc3Q6OkhlbHBlcicpOwoKICAgICAgICAjIGdldCBzeXNjb25maWcgb2JqZWN0CiAgICAgICAgbXkgJFN5c0NvbmZpZ09iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpTeXNDb25maWcnKTsKCiAgICAgICAgJEhlbHBlci0+Q29uZmlnU2V0dGluZ0NoYW5nZSgKICAgICAgICAgICAgVmFsaWQgPT4gMCwKICAgICAgICAgICAgS2V5ICAgPT4gJ0dlbmVyYWxDYXRhbG9nUHJlZmVyZW5jZXMjIyNDb21tZW50MicsCiAgICAgICAgICAgIFZhbHVlID0+IHsKICAgICAgICAgICAgICAgIE1vZHVsZSAgPT4gJ0tlcm5lbDo6T3V0cHV0OjpIVE1MOjpHZW5lcmFsQ2F0YWxvZ1ByZWZlcmVuY2VzOjpHZW5lcmljJywKICAgICAgICAgICAgICAgIExhYmVsICAgPT4gJ0NvbW1lbnQyJywKICAgICAgICAgICAgICAgIERlc2MgICAgPT4gJ0RlZmluZSB0aGUgZ2VuZXJhbCBjYXRhbG9nIGNvbW1lbnQgMi4nLAogICAgICAgICAgICAgICAgQmxvY2sgICA9PiAnVGV4dEFyZWEnLAogICAgICAgICAgICAgICAgQ29scyAgICA9PiAnNTAnLAogICAgICAgICAgICAgICAgUm93cyAgICA9PiAnNScsCiAgICAgICAgICAgICAgICBQcmVmS2V5ID0+ICdDb21tZW50MicsCiAgICAgICAgICAgIH0sCiAgICAgICAgKTsKCiAgICAgICAgJEhlbHBlci0+Q29uZmlnU2V0dGluZ0NoYW5nZSgKICAgICAgICAgICAgVmFsaWQgPT4gMCwKICAgICAgICAgICAgS2V5ICAgPT4gJ0dlbmVyYWxDYXRhbG9nUHJlZmVyZW5jZXMjIyNQZXJtaXNzaW9ucycsCiAgICAgICAgICAgIFZhbHVlID0+IHsKICAgICAgICAgICAgICAgIE1vZHVsZSAgPT4gJ0tlcm5lbDo6T3V0cHV0OjpIVE1MOjpHZW5lcmFsQ2F0YWxvZ1ByZWZlcmVuY2VzOjpHZW5lcmljJywKICAgICAgICAgICAgICAgIExhYmVsICAgPT4gJ1Blcm1pc3Npb25zJywKICAgICAgICAgICAgICAgIERlc2MgICAgPT4gJ0RlZmluZSB0aGUgZ3JvdXAgd2l0aCBwZXJtaXNzaW9ucy4nLAogICAgICAgICAgICAgICAgQmxvY2sgICA9PiAnUGVybWlzc2lvbicsCiAgICAgICAgICAgICAgICBDbGFzcyAgID0+ICdJVFNNOjpDb25maWdJdGVtOjpDbGFzcycsCiAgICAgICAgICAgICAgICBQcmVmS2V5ID0+ICdQZXJtaXNzaW9uJywKICAgICAgICAgICAgfSwKICAgICAgICApOwoKICAgICAgICAjIGNyZWF0ZSBhbmQgbG9nIGluIHRlc3QgdXNlcgogICAgICAgIG15ICRUZXN0VXNlckxvZ2luID0gJEhlbHBlci0+VGVzdFVzZXJDcmVhdGUoCiAgICAgICAgICAgIEdyb3VwcyA9PiBbJ2FkbWluJ10sCiAgICAgICAgKSB8fCBkaWUgIkRpZCBub3QgZ2V0IHRlc3QgdXNlciI7CgogICAgICAgICRTZWxlbml1bS0+TG9naW4oCiAgICAgICAgICAgIFR5cGUgICAgID0+ICdBZ2VudCcsCiAgICAgICAgICAgIFVzZXIgICAgID0+ICRUZXN0VXNlckxvZ2luLAogICAgICAgICAgICBQYXNzd29yZCA9PiAkVGVzdFVzZXJMb2dpbiwKICAgICAgICApOwoKICAgICAgICAjIGdldCBzY3JpcHQgYWxpYXMKICAgICAgICBteSAkU2NyaXB0QWxpYXMgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OkNvbmZpZycpLT5HZXQoJ1NjcmlwdEFsaWFzJyk7CgogICAgICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiAgICAgICAgIyBUZXN0IGNhc2U6IENvbW1lbnQyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKICAgICAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwoKICAgICAgICAjIG5hdmlnYXRlIHRvIEFkbWluR2VuZXJhbENhdGFsb2cgc2NyZWVuCiAgICAgICAgJFNlbGVuaXVtLT5WZXJpZmllZEdldCgiJHtTY3JpcHRBbGlhc31pbmRleC5wbD9BY3Rpb249QWRtaW5HZW5lcmFsQ2F0YWxvZyIpOwoKICAgICAgICAjIGNsaWNrICJBZGQgQ2F0YWxvZyBDbGFzcyIKICAgICAgICAkU2VsZW5pdW0tPmZpbmRfZWxlbWVudCgiLy9idXR0b25bXEB2YWx1ZT0nQWRkJ11bXEB0eXBlPSdzdWJtaXQnXSIpLT5WZXJpZmllZENsaWNrKCk7CgogICAgICAgICMgdmVyaWZ5IHRoYXQgZ2VuZXJhbCBjYXRhbG9nIHByZWZlcmVuY2UgQ29tbWVudDIgaXMgbm90IHByZXNlbnQgd2hpbGUgaW52YWxpZAogICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICBpbmRleCggJFNlbGVuaXVtLT5nZXRfcGFnZV9zb3VyY2UoKSwgIiNDb21tZW50MiIgKSA9PSAtMSwKICAgICAgICAgICAgIiNDb21tZW50MiBpcyBub3QgZW5hYmxlZCEiLAogICAgICAgICk7CgogICAgICAgICMgZ2V0IGdlbmVyYWwgY2F0YWxvZyBwcmVmZXJlbmNlIENvbW1lbnQyIGRlZmF1bHQgc3lzY29uZmlnCiAgICAgICAgbXkgJVByZWZlcmVuY2VDb21tZW50MkNvbmZpZyA9ICRTeXNDb25maWdPYmplY3QtPlNldHRpbmdHZXQoCiAgICAgICAgICAgIE5hbWUgICAgPT4gJ0dlbmVyYWxDYXRhbG9nUHJlZmVyZW5jZXMjIyNDb21tZW50MicsCiAgICAgICAgICAgIERlZmF1bHQgPT4gMSwKICAgICAgICApOwoKICAgICAgICAjIHNldCBnZW5lcmFsIGNhdGFsb2cgcHJlZmVyZW5jZSBDb21tZW50MiB0byB2YWxpZAogICAgICAgIG15ICVQcmVmZXJlbmNlQ29tbWVudDJDb25maWdVcGRhdGUgPSBtYXAgeyAkXy0+e0tleX0gPT4gJF8tPntDb250ZW50fSB9CiAgICAgICAgICAgIGdyZXAgeyBkZWZpbmVkICRfLT57S2V5fSB9CiAgICAgICAgICAgIEB7ICRQcmVmZXJlbmNlQ29tbWVudDJDb25maWd7WE1MQ29udGVudFBhcnNlZH0tPntWYWx1ZX0tPlswXS0+e0hhc2h9LT5bMF0tPntJdGVtfSB9OwoKICAgICAgICAjQHsgJFByZWZlcmVuY2VDb21tZW50MkNvbmZpZ3tTZXR0aW5nfS0+WzFdLT57SGFzaH0tPlsxXS0+e0l0ZW19IH07CgogICAgICAgICRIZWxwZXItPkNvbmZpZ1NldHRpbmdDaGFuZ2UoCiAgICAgICAgICAgIFZhbGlkID0+IDEsCiAgICAgICAgICAgIEtleSAgID0+ICdHZW5lcmFsQ2F0YWxvZ1ByZWZlcmVuY2VzIyMjQ29tbWVudDInLAogICAgICAgICAgICBWYWx1ZSA9PiBcJVByZWZlcmVuY2VDb21tZW50MkNvbmZpZ1VwZGF0ZSwKICAgICAgICApOwoKICAgICAgICAjIHJlZnJlc2ggc2NyZWVuIGZvciBzeXNjb25maWcgdXBkYXRlIHRvIHRha2UgZWZmZWN0CiAgICAgICAgJFNlbGVuaXVtLT5WZXJpZmllZFJlZnJlc2goKTsKCiAgICAgICAgIyB2ZXJpZnkgdGhhdCBnZW5lcmFsIGNhdGFsb2cgcHJlZmVyZW5jZSBDb21tZW50MiBpcyBwcmVzZW50IHdoaWxlIHZhbGlkCiAgICAgICAgbXkgJFN1Y2Nlc3MgPSAkU2VsZW5pdW0tPmZpbmRfZWxlbWVudCggIiNDb21tZW50MiIsICdjc3MnICktPmlzX2VuYWJsZWQoKTsKICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgJFN1Y2Nlc3MsCiAgICAgICAgICAgICIjQ29tbWVudDIgaXMgZW5hYmxlZCEiLAogICAgICAgICk7CgogICAgICAgICMgY3JlYXRlIHJlYWwgdGVzdCBjYXRhbG9nIGNsYXNzCiAgICAgICAgbXkgJENhdGFsb2dDbGFzc0RzYyAgPSAiQ2F0YWxvZ0NsYXNzRHNjIiAuICRIZWxwZXItPkdldFJhbmRvbUlEKCk7CiAgICAgICAgbXkgJENhdGFsb2dDbGFzc05hbWUgPSAiQ2F0YWxvZ0NsYXNzTmFtZSIgLiAkSGVscGVyLT5HZXRSYW5kb21JRCgpOwogICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCAiI0NsYXNzRHNjIiwgJ2NzcycgKS0+c2VuZF9rZXlzKCRDYXRhbG9nQ2xhc3NEc2MpOwogICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCAiI05hbWUiLCAgICAgJ2NzcycgKS0+c2VuZF9rZXlzKCRDYXRhbG9nQ2xhc3NOYW1lKTsKICAgICAgICAkU2VsZW5pdW0tPmZpbmRfZWxlbWVudCggIiNDb21tZW50IiwgICdjc3MnICktPnNlbmRfa2V5cygiU2VsZW5pdW0gY2F0YWxvZyBjbGFzcyIpOwogICAgICAgICRTZWxlbml1bS0+ZXhlY3V0ZV9zY3JpcHQoIlwkKCcjVmFsaWRJRCcpLnZhbCgnMScpLnRyaWdnZXIoJ3JlZHJhdy5JbnB1dEZpZWxkJykudHJpZ2dlcignY2hhbmdlJyk7Iik7CiAgICAgICAgJFNlbGVuaXVtLT5maW5kX2VsZW1lbnQoIi8vYnV0dG9uW1xAdmFsdWU9J1N1Ym1pdCddW1xAdHlwZT0nc3VibWl0J10iKS0+VmVyaWZpZWRDbGljaygpOwoKICAgICAgICAjIGNsaWNrICJBZGQgQ2F0YWxvZyBJdGVtIgogICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCIvL2J1dHRvbltcQHZhbHVlPSdBZGQnXVtcQHR5cGU9J3N1Ym1pdCddIiktPlZlcmlmaWVkQ2xpY2soKTsKCiAgICAgICAgIyBjcmVhdGUgcmVhbCB0ZXN0IGNhdGFsb2cgaXRlbQogICAgICAgIG15ICRDYXRhbG9nQ2xhc3NJdGVtID0gIkNhdGFsb2dDbGFzc0l0ZW0iIC4gJEhlbHBlci0+R2V0UmFuZG9tSUQoKTsKICAgICAgICAkU2VsZW5pdW0tPmZpbmRfZWxlbWVudCggIiNOYW1lIiwgICAgJ2NzcycgKS0+c2VuZF9rZXlzKCRDYXRhbG9nQ2xhc3NJdGVtKTsKICAgICAgICAkU2VsZW5pdW0tPmZpbmRfZWxlbWVudCggIiNDb21tZW50IiwgJ2NzcycgKS0+c2VuZF9rZXlzKCJTZWxlbml1bSBjYXRhbG9nIGl0ZW0iKTsKICAgICAgICAkU2VsZW5pdW0tPmV4ZWN1dGVfc2NyaXB0KCJcJCgnI1ZhbGlkSUQnKS52YWwoJzEnKS50cmlnZ2VyKCdyZWRyYXcuSW5wdXRGaWVsZCcpLnRyaWdnZXIoJ2NoYW5nZScpOyIpOwoKICAgICAgICAjIHNldCBpbmNsdWRlZCBxdWV1ZSBhdHRyaWJ1dGUgQ29tbWVudDIKICAgICAgICAkU2VsZW5pdW0tPmZpbmRfZWxlbWVudCggIiNDb21tZW50MiIsICdjc3MnICktPnNlbmRfa2V5cygnR2VuZXJhbENhdGFsb2dQcmVmZXJlbmNlc0dlbmVyaWMgQ29tbWVudDInKTsKICAgICAgICAkU2VsZW5pdW0tPmZpbmRfZWxlbWVudCgiLy9idXR0b25bXEB2YWx1ZT0nU3VibWl0J11bXEB0eXBlPSdzdWJtaXQnXSIpLT5WZXJpZmllZENsaWNrKCk7CgogICAgICAgICMgZ2V0IHRlc3QgY2F0YWxvZyBpdGVtcyBJRHMKICAgICAgICBteSBAQ2F0YWxvZ0l0ZW1JRHM7CiAgICAgICAgZm9yIG15ICRDYXRhbG9nSXRlbXMgKCAkQ2F0YWxvZ0NsYXNzTmFtZSwgJENhdGFsb2dDbGFzc0l0ZW0gKSB7CiAgICAgICAgICAgIG15ICRDYXRhbG9nQ2xhc3NJdGVtRGF0YSA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpHZW5lcmFsQ2F0YWxvZycpLT5JdGVtR2V0KAogICAgICAgICAgICAgICAgQ2xhc3MgPT4gJENhdGFsb2dDbGFzc0RzYywKICAgICAgICAgICAgICAgIE5hbWUgID0+ICRDYXRhbG9nSXRlbXMsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIG15ICRDYXRhbG9nSXRlbUlEID0gJENhdGFsb2dDbGFzc0l0ZW1EYXRhLT57SXRlbUlEfTsKICAgICAgICAgICAgcHVzaCBAQ2F0YWxvZ0l0ZW1JRHMsICRDYXRhbG9nSXRlbUlEOwogICAgICAgIH0KCiAgICAgICAgIyBjaGVjayBuZXcgdGVzdCBjYXRhbG9nIGl0ZW0gQ29tbWVudDIgdmFsdWUKICAgICAgICAkU2VsZW5pdW0tPmZpbmRfZWxlbWVudCgKICAgICAgICAgICAgIi8vYVtjb250YWlucyhcQGhyZWYsIFwnQWN0aW9uPUFkbWluR2VuZXJhbENhdGFsb2c7U3ViYWN0aW9uPUl0ZW1FZGl0O0l0ZW1JRD0kQ2F0YWxvZ0l0ZW1JRHNbMV0nICldIgogICAgICAgICktPlZlcmlmaWVkQ2xpY2soKTsKCiAgICAgICAgJFNlbGYtPklzKAogICAgICAgICAgICAkU2VsZW5pdW0tPmZpbmRfZWxlbWVudCggJyNDb21tZW50MicsICdjc3MnICktPmdldF92YWx1ZSgpLAogICAgICAgICAgICAnR2VuZXJhbENhdGFsb2dQcmVmZXJlbmNlc0dlbmVyaWMgQ29tbWVudDInLAogICAgICAgICAgICAiI0NvbW1lbnQyIHN0b3JlZCB2YWx1ZSIsCiAgICAgICAgKTsKCiAgICAgICAgIyB1cGRhdGUgQ29tbWVudDIKICAgICAgICBteSAkVXBkYXRlQ29tbWVudDIgPSAiVXBkYXRlZCBjb21tZW50IGZvciBHZW5lcmFsQ2F0YWxvZ1ByZWZlcmVuY2VzR2VuZXJpYyBDb21tZW50MiI7CiAgICAgICAgJFNlbGVuaXVtLT5maW5kX2VsZW1lbnQoICIjQ29tbWVudDIiLCAnY3NzJyApLT5jbGVhcigpOwogICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCAiI0NvbW1lbnQyIiwgJ2NzcycgKS0+c2VuZF9rZXlzKCRVcGRhdGVDb21tZW50Mik7CiAgICAgICAgJFNlbGVuaXVtLT5maW5kX2VsZW1lbnQoIi8vYnV0dG9uW1xAdmFsdWU9J1N1Ym1pdCddW1xAdHlwZT0nc3VibWl0J10iKS0+VmVyaWZpZWRDbGljaygpOwoKICAgICAgICAjIGNoZWNrIHVwZGF0ZWQgQ29tbWVudDIgdmFsdWUKICAgICAgICAkU2VsZW5pdW0tPmZpbmRfZWxlbWVudCggJENhdGFsb2dDbGFzc0l0ZW0sICdsaW5rX3RleHQnICktPlZlcmlmaWVkQ2xpY2soKTsKICAgICAgICAkU2VsZi0+SXMoCiAgICAgICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCAnI0NvbW1lbnQyJywgJ2NzcycgKS0+Z2V0X3ZhbHVlKCksCiAgICAgICAgICAgICRVcGRhdGVDb21tZW50MiwKICAgICAgICAgICAgIiNDb21tZW50MiB1cGRhdGVkIHZhbHVlIiwKICAgICAgICApOwoKICAgICAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwogICAgICAgICMgVGVzdCBjYXNlOiBQZXJtaXNzaW9ucyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCiAgICAgICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKCiAgICAgICAgIyBuYXZpZ2F0ZSB0byBBZG1pbkdlbmVyYWxDYXRhbG9nIHNjcmVlbgogICAgICAgICRTZWxlbml1bS0+VmVyaWZpZWRHZXQoIiR7U2NyaXB0QWxpYXN9aW5kZXgucGw/QWN0aW9uPUFkbWluR2VuZXJhbENhdGFsb2ciKTsKCiAgICAgICAgIyBjbGljayBvbiB0ZXN0IENhdGFsb2dDbGFzcwogICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCAkQ2F0YWxvZ0NsYXNzRHNjLCAnbGlua190ZXh0JyApLT5WZXJpZmllZENsaWNrKCk7CgogICAgICAgICMgY2xpY2sgIkFkZCBDYXRhbG9nIEl0ZW0iCiAgICAgICAgJFNlbGVuaXVtLT5maW5kX2VsZW1lbnQoIi8vYnV0dG9uW1xAdmFsdWU9J0FkZCddW1xAdHlwZT0nc3VibWl0J10iKS0+VmVyaWZpZWRDbGljaygpOwoKICAgICAgICAjIHZlcmlmeSB0aGF0IGdlbmVyYWwgY2F0YWxvZyBwcmVmZXJlbmNlIFBlcm1pc3Npb25zIGlzIG5vdCBwcmVzZW50IHdoaWxlIGludmFsaWQKICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgaW5kZXgoICRTZWxlbml1bS0+Z2V0X3BhZ2Vfc291cmNlKCksICIjUGVybWlzc2lvbl9TZWFyY2giICkgPT0gLTEsCiAgICAgICAgICAgICIjUGVybWlzc2lvbnMgaXMgbm90IGVuYWJsZWQhIiwKICAgICAgICApOwoKICAgICAgICAjIGdldCBnZW5lcmFsIGNhdGFsb2cgcHJlZmVyZW5jZSBQZXJtaXNzaW9uIGRlZmF1bHQgc3lzY29uZmlnCiAgICAgICAgbXkgJVByZWZlcmVuY2VQZXJtaXNzaW9uc0NvbmZpZyA9ICRTeXNDb25maWdPYmplY3QtPlNldHRpbmdHZXQoCiAgICAgICAgICAgIE5hbWUgICAgPT4gJ0dlbmVyYWxDYXRhbG9nUHJlZmVyZW5jZXMjIyNQZXJtaXNzaW9ucycsCiAgICAgICAgICAgIERlZmF1bHQgPT4gMSwKICAgICAgICApOwoKICAgICAgICBteSAkUHJlZmVyZW5jZVBlcm1pc3Npb25zRWZmZWN0aXZlQ29uZmlnID0gJFN5c0NvbmZpZ09iamVjdC0+U2V0dGluZ0VmZmVjdGl2ZVZhbHVlR2V0KAogICAgICAgICAgICBWYWx1ZSA9PiAkUHJlZmVyZW5jZVBlcm1pc3Npb25zQ29uZmlne1hNTENvbnRlbnRQYXJzZWR9LT57VmFsdWV9LAogICAgICAgICk7CgogICAgICAgICMgc2V0IENsYXNzIGZvciBHZW5lcmFsQ2F0YWxvZ1ByZWZlcmVuY2VzIyMjUGVybWlzc2lvbnMgYXMgdGVzdCBDYXRhbG9nQ2xhc3MKICAgICAgICAkUHJlZmVyZW5jZVBlcm1pc3Npb25zRWZmZWN0aXZlQ29uZmlnLT57Q2xhc3N9ID0gJENhdGFsb2dDbGFzc0RzYzsKCiAgICAgICAgJEhlbHBlci0+Q29uZmlnU2V0dGluZ0NoYW5nZSgKICAgICAgICAgICAgVmFsaWQgPT4gMSwKICAgICAgICAgICAgS2V5ICAgPT4gJ0dlbmVyYWxDYXRhbG9nUHJlZmVyZW5jZXMjIyNQZXJtaXNzaW9ucycsCiAgICAgICAgICAgIFZhbHVlID0+ICRQcmVmZXJlbmNlUGVybWlzc2lvbnNFZmZlY3RpdmVDb25maWcsCiAgICAgICAgKTsKCiAgICAgICAgIyByZWZyZXNoIHNjcmVlbiBmb3Igc3lzY29uZmlnIHVwZGF0ZSB0byB0YWtlIGVmZmVjdAogICAgICAgICRTZWxlbml1bS0+VmVyaWZpZWRSZWZyZXNoKCk7CgogICAgICAgICMgdmVyaWZ5IHRoYXQgZ2VuZXJhbCBjYXRhbG9nIHByZWZlcmVuY2UgUGVybWlzc2lvbnMgaXMgcHJlc2VudCB3aGlsZSB2YWxpZAogICAgICAgICRTdWNjZXNzID0gJFNlbGVuaXVtLT5maW5kX2VsZW1lbnQoICIjUGVybWlzc2lvbl9TZWFyY2giLCAnY3NzJyApLT5pc19lbmFibGVkKCk7CiAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgICRTdWNjZXNzLAogICAgICAgICAgICAiI1Blcm1pc3Npb25zIGlzIGVuYWJsZWQhIiwKICAgICAgICApOwoKICAgICAgICAjIGdldCBEQiBvYmplY3QKICAgICAgICBteSAkREJPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6REInKTsKCiAgICAgICAgIyBkZWxldGUgY3JlYXRlZCB0ZXN0IGNhdGFsb2cgY2xhc3MKICAgICAgICBmb3IgbXkgJENhdGFsb2dJdGVtIChAQ2F0YWxvZ0l0ZW1JRHMpIHsKCiAgICAgICAgICAgICRTdWNjZXNzID0gJERCT2JqZWN0LT5EbygKICAgICAgICAgICAgICAgIFNRTCA9PiAiREVMRVRFIEZST00gZ2VuZXJhbF9jYXRhbG9nX3ByZWZlcmVuY2VzIFdIRVJFIGdlbmVyYWxfY2F0YWxvZ19pZCA9ICRDYXRhbG9nSXRlbSIsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICAgICAgJFN1Y2Nlc3MsCiAgICAgICAgICAgICAgICAiQ2F0YWxvZ0l0ZW1JRCAkQ2F0YWxvZ0l0ZW0gcHJlZmVyZW5jZSAtIGRlbGV0ZWQiLAogICAgICAgICAgICApOwogICAgICAgICAgICAkU3VjY2VzcyA9ICREQk9iamVjdC0+RG8oCiAgICAgICAgICAgICAgICBTUUwgPT4gIkRFTEVURSBGUk9NIGdlbmVyYWxfY2F0YWxvZyBXSEVSRSBpZCA9ICRDYXRhbG9nSXRlbSIsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICAgICAgJFN1Y2Nlc3MsCiAgICAgICAgICAgICAgICAiQ2F0YWxvZ0l0ZW1JRCAkQ2F0YWxvZ0l0ZW0gLSBkZWxldGVkIiwKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgICMgY2xlYW4gdXAgY2FjaGUKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6Q2FjaGUnKS0+Q2xlYW5VcCggVHlwZSA9PiAnR2VuZXJhbENhdGFsb2cnICk7CiAgICB9Cik7CgoxOwo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIxIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDIxLTIwMjIgWm51bnkgR21iSCwgaHR0cHM6Ly96bnVueS5vcmcvCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0zLjAudHh0LgojIC0tCgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CnVzZSB1dGY4OwoKdXNlIHZhcnMgKHF3KCRTZWxmKSk7CgpteSAkU2VsZW5pdW0gPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VW5pdFRlc3Q6OlNlbGVuaXVtJyk7CgokU2VsZW5pdW0tPlJ1blRlc3QoCiAgICBzdWIgewoKICAgICAgICBteSAkSGVscGVyICAgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpVbml0VGVzdDo6SGVscGVyJyk7CiAgICAgICAgbXkgJFV0aWxPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VXRpbCcpOwoKICAgICAgICAjIENyZWF0ZSBhbmQgbG9nIGluIHRlc3QgdXNlci4KICAgICAgICBteSAkVGVzdFVzZXJMb2dpbiA9ICRIZWxwZXItPlRlc3RVc2VyQ3JlYXRlKAogICAgICAgICAgICBHcm91cHMgPT4gWydhZG1pbiddLAogICAgICAgICkgfHwgZGllICJEaWQgbm90IGdldCB0ZXN0IHVzZXIiOwoKICAgICAgICAkU2VsZW5pdW0tPkxvZ2luKAogICAgICAgICAgICBUeXBlICAgICA9PiAnQWdlbnQnLAogICAgICAgICAgICBVc2VyICAgICA9PiAkVGVzdFVzZXJMb2dpbiwKICAgICAgICAgICAgUGFzc3dvcmQgPT4gJFRlc3RVc2VyTG9naW4sCiAgICAgICAgKTsKCiAgICAgICAgbXkgJFNjcmlwdEFsaWFzID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKS0+R2V0KCdTY3JpcHRBbGlhcycpOwoKICAgICAgICAjIE5hdmlnYXRlIHRvIEFkbWluR2VuZXJhbENhdGFsb2cgc2NyZWVuLgogICAgICAgICRTZWxlbml1bS0+VmVyaWZpZWRHZXQoIiR7U2NyaXB0QWxpYXN9aW5kZXgucGw/QWN0aW9uPUFkbWluR2VuZXJhbENhdGFsb2ciKTsKCiAgICAgICAgIyBDbGljayAiQWRkIENhdGFsb2cgQ2xhc3MiLgogICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCIvL2J1dHRvbltcQHZhbHVlPSdBZGQnXVtcQHR5cGU9J3N1Ym1pdCddIiktPlZlcmlmaWVkQ2xpY2soKTsKCiAgICAgICAgIyBDaGVjayBmb3IgaW5wdXQgZmllbGRzLgogICAgICAgIGZvciBteSAkSUQgKAogICAgICAgICAgICBxdyhDbGFzc0RzYyBOYW1lIFZhbGlkSUQgQ29tbWVudCkKICAgICAgICAgICAgKQogICAgICAgIHsKICAgICAgICAgICAgbXkgJEVsZW1lbnQgPSAkU2VsZW5pdW0tPmZpbmRfZWxlbWVudCggIiMkSUQiLCAnY3NzJyApOwogICAgICAgICAgICAkRWxlbWVudC0+aXNfZW5hYmxlZCgpOwogICAgICAgICAgICAkRWxlbWVudC0+aXNfZGlzcGxheWVkKCk7CiAgICAgICAgfQoKICAgICAgICAjIENoZWNrIGNsaWVudCBzaWRlIHZhbGlkYXRpb24uCiAgICAgICAgJFNlbGVuaXVtLT5maW5kX2VsZW1lbnQoICIjTmFtZSIsICAgJ2NzcycgKS0+Y2xlYXIoKTsKICAgICAgICAkU2VsZW5pdW0tPmZpbmRfZWxlbWVudCggIiNTdWJtaXQiLCAnY3NzJyApLT5jbGljaygpOwogICAgICAgICRTZWxlbml1bS0+V2FpdEZvciggSmF2YVNjcmlwdCA9PiAncmV0dXJuICQoIiNOYW1lLkVycm9yIikubGVuZ3RoJyApOwoKICAgICAgICAkU2VsZi0+SXMoCiAgICAgICAgICAgICRTZWxlbml1bS0+ZXhlY3V0ZV9zY3JpcHQoCiAgICAgICAgICAgICAgICAicmV0dXJuIFwkKCcjTmFtZScpLmhhc0NsYXNzKCdFcnJvcicpIgogICAgICAgICAgICApLAogICAgICAgICAgICAnMScsCiAgICAgICAgICAgICdDbGllbnQgc2lkZSB2YWxpZGF0aW9uIGNvcnJlY3RseSBkZXRlY3RlZCBtaXNzaW5nIGlucHV0IHZhbHVlJywKICAgICAgICApOwoKICAgICAgICAjIENyZWF0ZSByZWFsIHRlc3QgY2F0YWxvZyBjbGFzcy4KICAgICAgICBteSAkQ2F0YWxvZ0NsYXNzRHNjICA9ICJDYXRhbG9nQ2xhc3NEc2MiIC4gJEhlbHBlci0+R2V0UmFuZG9tSUQoKTsKICAgICAgICBteSAkQ2F0YWxvZ0NsYXNzTmFtZSA9ICJDYXRhbG9nQ2xhc3NOYW1lIiAuICRIZWxwZXItPkdldFJhbmRvbUlEKCk7CiAgICAgICAgJFNlbGVuaXVtLT5maW5kX2VsZW1lbnQoICIjQ2xhc3NEc2MiLCAnY3NzJyApLT5zZW5kX2tleXMoJENhdGFsb2dDbGFzc0RzYyk7CiAgICAgICAgJFNlbGVuaXVtLT5maW5kX2VsZW1lbnQoICIjTmFtZSIsICAgICAnY3NzJyApLT5zZW5kX2tleXMoJENhdGFsb2dDbGFzc05hbWUpOwogICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCAiI0NvbW1lbnQiLCAgJ2NzcycgKS0+c2VuZF9rZXlzKCJTZWxlbml1bSBjYXRhbG9nIGNsYXNzIik7CiAgICAgICAgJFNlbGVuaXVtLT5leGVjdXRlX3NjcmlwdCgiXCQoJyNWYWxpZElEJykudmFsKCcxJykudHJpZ2dlcigncmVkcmF3LklucHV0RmllbGQnKS50cmlnZ2VyKCdjaGFuZ2UnKTsiKTsKICAgICAgICAkU2VsZW5pdW0tPmZpbmRfZWxlbWVudCggJyNTdWJtaXQnLCAnY3NzJyApLT5WZXJpZmllZENsaWNrKCk7CgogICAgICAgICMgQ2xpY2sgIkdvIHRvIG92ZXJ2aWV3Ii4KICAgICAgICAkU2VsZW5pdW0tPmZpbmRfZWxlbWVudCgiLy9hW2NvbnRhaW5zKFxAaHJlZiwgXCdBY3Rpb249QWRtaW5HZW5lcmFsQ2F0YWxvZycgKV0iKS0+VmVyaWZpZWRDbGljaygpOwoKICAgICAgICAjIENoZWNrIGZvciBjcmVhdGVkIHRlc3QgY2F0YWxvZyBjbGFzcyBpbiBBZG1pbkdlbmVyYWxDYXRhbG9nIHNjcmVlbiBhbmQgY2xpY2sgb24gaXQuCiAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgIGluZGV4KCAkU2VsZW5pdW0tPmdldF9wYWdlX3NvdXJjZSgpLCAkQ2F0YWxvZ0NsYXNzRHNjICkgPiAtMSwKICAgICAgICAgICAgIkNyZWF0ZWQgdGVzdCBjYXRhbG9nIGNsYXNzICRDYXRhbG9nQ2xhc3NEc2MgLSBmb3VuZCIsCiAgICAgICAgKTsKICAgICAgICAkU2VsZW5pdW0tPmZpbmRfZWxlbWVudCgKICAgICAgICAgICAgIi8vYVtjb250YWlucyhcQGhyZWYsIFwnQWN0aW9uPUFkbWluR2VuZXJhbENhdGFsb2c7U3ViYWN0aW9uPUl0ZW1MaXN0O0NsYXNzPSRDYXRhbG9nQ2xhc3NEc2MnICldIgogICAgICAgICktPlZlcmlmaWVkQ2xpY2soKTsKCiAgICAgICAgIyBDbGljayAiQWRkIENhdGFsb2cgSXRlbSIuCiAgICAgICAgJFNlbGVuaXVtLT5maW5kX2VsZW1lbnQoIi8vYnV0dG9uW1xAdmFsdWU9J0FkZCddW1xAdHlwZT0nc3VibWl0J10iKS0+VmVyaWZpZWRDbGljaygpOwoKICAgICAgICAjIENoZWNrIGNsaWVudCBzaWRlIHZhbGlkYXRpb24uCiAgICAgICAgJFNlbGVuaXVtLT5maW5kX2VsZW1lbnQoICIjTmFtZSIsICAgJ2NzcycgKS0+Y2xlYXIoKTsKICAgICAgICAkU2VsZW5pdW0tPmZpbmRfZWxlbWVudCggIiNTdWJtaXQiLCAnY3NzJyApLT5jbGljaygpOwogICAgICAgICRTZWxlbml1bS0+V2FpdEZvciggSmF2YVNjcmlwdCA9PiAncmV0dXJuICQoIiNOYW1lLkVycm9yIikubGVuZ3RoJyApOwoKICAgICAgICAkU2VsZi0+SXMoCiAgICAgICAgICAgICRTZWxlbml1bS0+ZXhlY3V0ZV9zY3JpcHQoCiAgICAgICAgICAgICAgICAicmV0dXJuIFwkKCcjTmFtZScpLmhhc0NsYXNzKCdFcnJvcicpIgogICAgICAgICAgICApLAogICAgICAgICAgICAnMScsCiAgICAgICAgICAgICdDbGllbnQgc2lkZSB2YWxpZGF0aW9uIGNvcnJlY3RseSBkZXRlY3RlZCBtaXNzaW5nIGlucHV0IHZhbHVlJywKICAgICAgICApOwoKICAgICAgICAjIFRyeSB0byBjcmVhdGUgY2F0YWxvZyBpdGVtIHRoYXQgYWxyZWFkeSBleGlzdHMuCiAgICAgICAgJFNlbGVuaXVtLT5maW5kX2VsZW1lbnQoICIjTmFtZSIsICdjc3MnICktPnNlbmRfa2V5cygkQ2F0YWxvZ0NsYXNzTmFtZSk7CiAgICAgICAgJFNlbGVuaXVtLT5maW5kX2VsZW1lbnQoIi8vYnV0dG9uW1xAdmFsdWU9J1N1Ym1pdCddW1xAdHlwZT0nc3VibWl0J10iKS0+VmVyaWZpZWRDbGljaygpOwoKICAgICAgICAjIFZlcmlmeSBlcnJvciBtZXNzYWdlLgogICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICBpbmRleCggJFNlbGVuaXVtLT5nZXRfcGFnZV9zb3VyY2UoKSwgJ05lZWQgSXRlbUlEIE9SIENsYXNzIGFuZCBOYW1lIScgKSA+IC0xLAogICAgICAgICAgICAiRXJyb3IgbWVzc2FnZSAtIGRpc3BsYXllZCIsCiAgICAgICAgKTsKCiAgICAgICAgIyBSZXR1cm4gYmFjayB0byB0ZXN0IGNhdGFsb2cgY2xhc3Mgc2NyZWVuIGFuZCBjbGljayBvbiAiQWRkIENhdGFsb2cgSXRlbSIuCiAgICAgICAgJFNlbGVuaXVtLT5WZXJpZmllZEdldCgKICAgICAgICAgICAgIiR7U2NyaXB0QWxpYXN9aW5kZXgucGw/QWN0aW9uPUFkbWluR2VuZXJhbENhdGFsb2c7U3ViYWN0aW9uPUl0ZW1MaXN0O0NsYXNzPSRDYXRhbG9nQ2xhc3NEc2MiCiAgICAgICAgKTsKICAgICAgICAkU2VsZW5pdW0tPmZpbmRfZWxlbWVudCgiLy9idXR0b25bXEB2YWx1ZT0nQWRkJ11bXEB0eXBlPSdzdWJtaXQnXSIpLT5WZXJpZmllZENsaWNrKCk7CgogICAgICAgICMgQ3JlYXRlIHJlYWwgdGVzdCBjYXRhbG9nIGl0ZW0uCiAgICAgICAgbXkgJENhdGFsb2dDbGFzc0l0ZW0gPSAiQ2F0YWxvZ0NsYXNzSXRlbSIgLiAkSGVscGVyLT5HZXRSYW5kb21JRCgpOwogICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCAiI05hbWUiLCAgICAnY3NzJyApLT5zZW5kX2tleXMoJENhdGFsb2dDbGFzc0l0ZW0pOwogICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCAiI0NvbW1lbnQiLCAnY3NzJyApLT5zZW5kX2tleXMoIlNlbGVuaXVtIGNhdGFsb2cgaXRlbSIpOwogICAgICAgICRTZWxlbml1bS0+ZXhlY3V0ZV9zY3JpcHQoIlwkKCcjVmFsaWRJRCcpLnZhbCgnMScpLnRyaWdnZXIoJ3JlZHJhdy5JbnB1dEZpZWxkJykudHJpZ2dlcignY2hhbmdlJyk7Iik7CiAgICAgICAgJFNlbGVuaXVtLT5maW5kX2VsZW1lbnQoIi8vYnV0dG9uW1xAdmFsdWU9J1N1Ym1pdCddW1xAdHlwZT0nc3VibWl0J10iKS0+VmVyaWZpZWRDbGljaygpOwoKICAgICAgICAjIEdldCB0ZXN0IGNhdGFsb2cgaXRlbXMgSURzLgogICAgICAgIG15IEBDYXRhbG9nSXRlbUlEczsKICAgICAgICBmb3IgbXkgJENhdGFsb2dJdGVtcyAoICRDYXRhbG9nQ2xhc3NOYW1lLCAkQ2F0YWxvZ0NsYXNzSXRlbSApIHsKICAgICAgICAgICAgbXkgJENhdGFsb2dDbGFzc0l0ZW1EYXRhID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkdlbmVyYWxDYXRhbG9nJyktPkl0ZW1HZXQoCiAgICAgICAgICAgICAgICBDbGFzcyA9PiAkQ2F0YWxvZ0NsYXNzRHNjLAogICAgICAgICAgICAgICAgTmFtZSAgPT4gJENhdGFsb2dJdGVtcywKICAgICAgICAgICAgKTsKICAgICAgICAgICAgbXkgJENhdGFsb2dJdGVtSUQgPSAkQ2F0YWxvZ0NsYXNzSXRlbURhdGEtPntJdGVtSUR9OwogICAgICAgICAgICBwdXNoIEBDYXRhbG9nSXRlbUlEcywgJENhdGFsb2dJdGVtSUQ7CiAgICAgICAgfQoKICAgICAgICAjIENoZWNrIGZvciBjcmVhdGVkIHRlc3QgY2F0YWxvZyBpdGVtIGFuZCBjbGljayBvbiBpdC4KICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgaW5kZXgoICRTZWxlbml1bS0+Z2V0X3BhZ2Vfc291cmNlKCksICRDYXRhbG9nQ2xhc3NJdGVtICkgPiAtMSwKICAgICAgICAgICAgIkNyZWF0ZWQgdGVzdCBjYXRhbG9nIGl0ZW0gJENhdGFsb2dDbGFzc0l0ZW0gLSBmb3VuZCIsCiAgICAgICAgKTsKICAgICAgICAkU2VsZW5pdW0tPmZpbmRfZWxlbWVudCgKICAgICAgICAgICAgIi8vYVtjb250YWlucyhcQGhyZWYsIFwnQWN0aW9uPUFkbWluR2VuZXJhbENhdGFsb2c7U3ViYWN0aW9uPUl0ZW1FZGl0O0l0ZW1JRD0kQ2F0YWxvZ0l0ZW1JRHNbMV0nICldIgogICAgICAgICktPlZlcmlmaWVkQ2xpY2soKTsKCiAgICAgICAgIyBDaGVjayBuZXcgdGVzdCBjYXRhbG9nIGl0ZW0gdmFsdWVzLgogICAgICAgICRTZWxmLT5JcygKICAgICAgICAgICAgJFNlbGVuaXVtLT5maW5kX2VsZW1lbnQoICcjTmFtZScsICdjc3MnICktPmdldF92YWx1ZSgpLAogICAgICAgICAgICAkQ2F0YWxvZ0NsYXNzSXRlbSwKICAgICAgICAgICAgIiNOYW1lIHN0b3JlZCB2YWx1ZSIsCiAgICAgICAgKTsKICAgICAgICAkU2VsZi0+SXMoCiAgICAgICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCAnI0NvbW1lbnQnLCAnY3NzJyApLT5nZXRfdmFsdWUoKSwKICAgICAgICAgICAgIlNlbGVuaXVtIGNhdGFsb2cgaXRlbSIsCiAgICAgICAgICAgICIjQ29tbWVudCBzdG9yZWQgdmFsdWUiLAogICAgICAgICk7CgogICAgICAgICMgRWRpdCBuYW1lIGFuZCBjb21tZW50LgogICAgICAgIG15ICRFZGl0Q2F0YWxvZ0NsYXNzSXRlbSA9ICJFZGl0IiAuICRDYXRhbG9nQ2xhc3NJdGVtOwogICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCAiI05hbWUiLCAgICAnY3NzJyApLT5jbGVhcigpOwogICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCAiI05hbWUiLCAgICAnY3NzJyApLT5zZW5kX2tleXMoJEVkaXRDYXRhbG9nQ2xhc3NJdGVtKTsKICAgICAgICAkU2VsZW5pdW0tPmZpbmRfZWxlbWVudCggIiNDb21tZW50IiwgJ2NzcycgKS0+c2VuZF9rZXlzKCIgZWRpdCIpOwogICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCIvL2J1dHRvbltcQHZhbHVlPSdTdWJtaXQnXVtcQHR5cGU9J3N1Ym1pdCddIiktPlZlcmlmaWVkQ2xpY2soKTsKCiAgICAgICAgIyBDaGVjayBlZGl0ZWQgdGVzdCBjYXRhbG9nIGl0ZW0gdmFsdWVzLgogICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCAkRWRpdENhdGFsb2dDbGFzc0l0ZW0sICdsaW5rX3RleHQnICktPlZlcmlmaWVkQ2xpY2soKTsKICAgICAgICAkU2VsZi0+SXMoCiAgICAgICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCAnI05hbWUnLCAnY3NzJyApLT5nZXRfdmFsdWUoKSwKICAgICAgICAgICAgJEVkaXRDYXRhbG9nQ2xhc3NJdGVtLAogICAgICAgICAgICAiI05hbWUgdXBkYXRlZCB2YWx1ZSIsCiAgICAgICAgKTsKICAgICAgICAkU2VsZi0+SXMoCiAgICAgICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCAnI0NvbW1lbnQnLCAnY3NzJyApLT5nZXRfdmFsdWUoKSwKICAgICAgICAgICAgIlNlbGVuaXVtIGNhdGFsb2cgaXRlbSBlZGl0IiwKICAgICAgICAgICAgIiNDb21tZW50IHVwZGF0ZWQgdmFsdWUiLAogICAgICAgICk7CgogICAgICAgICMgQ2xpY2sgb24gJ2NhbmNlbCcgYW5kIHZlcmlmeSBjb3JyZWN0IGxpbmsuCiAgICAgICAgJFNlbGVuaXVtLT5maW5kX2VsZW1lbnQoICJDYW5jZWwiLCAnbGlua190ZXh0JyApLT5WZXJpZmllZENsaWNrKCk7CiAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCAkRWRpdENhdGFsb2dDbGFzc0l0ZW0sICdsaW5rX3RleHQnICksCiAgICAgICAgICAgICJDYW5jZWwgbGluayBpcyBjb3JyZWN0LiIKICAgICAgICApOwoKICAgICAgICBteSAkSXNJVFNNSW5zdGFsbGVkID0gJFV0aWxPYmplY3QtPklzSVRTTUluc3RhbGxlZCgpOwogICAgICAgIGlmICgkSXNJVFNNSW5zdGFsbGVkKSB7CgogICAgICAgICAgICAjIEdldCBXYXJuaW5nSUQuCiAgICAgICAgICAgIG15ICRJdGVtRGF0YVJlZiA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpHZW5lcmFsQ2F0YWxvZycpLT5JdGVtR2V0KAogICAgICAgICAgICAgICAgQ2xhc3MgPT4gJ0lUU006OkNvcmU6OkluY2lkZW50U3RhdGUnLAogICAgICAgICAgICAgICAgTmFtZSAgPT4gJ1dhcm5pbmcnLAogICAgICAgICAgICApOwoKICAgICAgICAgICAgbXkgJFdhcm5pbmdJRCA9ICRJdGVtRGF0YVJlZi0+e0l0ZW1JRH07CiAgICAgICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICAgICAgJFdhcm5pbmdJRCwKICAgICAgICAgICAgICAgICJXYXJuaW5nIGluY2lkZW50IHN0YXRlIElEIC0gJFdhcm5pbmdJRCIsCiAgICAgICAgICAgICk7CgogICAgICAgICAgICAjIE5hdmlnYXRlIHRvIFdhcm5pbmcgZWRpdCBzY3JlZW4uCiAgICAgICAgICAgICRTZWxlbml1bS0+VmVyaWZpZWRHZXQoCiAgICAgICAgICAgICAgICAiJHtTY3JpcHRBbGlhc31pbmRleC5wbD9BY3Rpb249QWRtaW5HZW5lcmFsQ2F0YWxvZztTdWJhY3Rpb249SXRlbUVkaXQ7SXRlbUlEPSRXYXJuaW5nSUQiCiAgICAgICAgICAgICk7CgogICAgICAgICAgICAkU2VsZW5pdW0tPldhaXRGb3IoCiAgICAgICAgICAgICAgICBKYXZhU2NyaXB0ID0+ICdyZXR1cm4gdHlwZW9mKCQpID09PSAiZnVuY3Rpb24iICYmICQoIiNWYWxpZElEIikubGVuZ3RoICYmICQoIiNGdW5jdGlvbmFsaXR5IikubGVuZ3RoOycKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICMgU2VsZWN0ICd3YXJuaW5nJyBhcyBGdW5jdGlvbmFsaXR5IG9wdGlvbi4KICAgICAgICAgICAgJFNlbGVuaXVtLT5JbnB1dEZpZWxkVmFsdWVTZXQoCiAgICAgICAgICAgICAgICBFbGVtZW50ID0+ICcjRnVuY3Rpb25hbGl0eScsCiAgICAgICAgICAgICAgICBWYWx1ZSAgID0+ICd3YXJuaW5nJywKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICMgU2VsZWN0ICdJbnZhbGlkJyBhcyBWYWxpZElEIG9wdGlvbi4KICAgICAgICAgICAgJFNlbGVuaXVtLT5JbnB1dEZpZWxkVmFsdWVTZXQoCiAgICAgICAgICAgICAgICBFbGVtZW50ID0+ICcjVmFsaWRJRCcsCiAgICAgICAgICAgICAgICBWYWx1ZSAgID0+ICcyJywKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICRTZWxlbml1bS0+V2FpdEZvcmpRdWVyeUV2ZW50Qm91bmQoCiAgICAgICAgICAgICAgICBDU1NTZWxlY3RvciA9PiAnI1N1Ym1pdEFuZENvbnRpbnVlJywKICAgICAgICAgICAgICAgIEV2ZW50ICAgICAgID0+ICdjbGljaycsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgICRTZWxlbml1bS0+V2FpdEZvcmpRdWVyeUV2ZW50Qm91bmQoCiAgICAgICAgICAgICAgICBDU1NTZWxlY3RvciA9PiAnI1N1Ym1pdCcsCiAgICAgICAgICAgICAgICBFdmVudCAgICAgICA9PiAnY2xpY2snLAogICAgICAgICAgICApOwoKICAgICAgICAgICAgIyBDbGljayAnU2F2ZScgYW5kICdTYXZlIGFuZCBmaW5pc2gnLgogICAgICAgICAgICBmb3IgbXkgJEJ1dHRvbklEIChxdyhTdWJtaXRBbmRDb250aW51ZSBTdWJtaXQpKSB7CiAgICAgICAgICAgICAgICAkU2VsZW5pdW0tPmZpbmRfZWxlbWVudCggIiMkQnV0dG9uSUQiLCAnY3NzJyApLT5jbGljaygpOwoKICAgICAgICAgICAgICAgICRTZWxlbml1bS0+V2FpdEZvciggSmF2YVNjcmlwdCA9PiAncmV0dXJuICQoIi5EaWFsb2c6dmlzaWJsZSIpLmxlbmd0aDsnICk7CgogICAgICAgICAgICAgICAgbXkgJFdhcm5pbmdUZXh0ID0gJ1dhcm5pbmcgaW5jaWRlbnQgc3RhdGUgY2FuIG5vdCBiZSBzZXQgdG8gaW52YWxpZC4nOwoKICAgICAgICAgICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICAgICAgICAgICRTZWxlbml1bS0+ZXhlY3V0ZV9zY3JpcHQoInJldHVybiBcJCgnLkRpYWxvZzpjb250YWlucyhcIiRXYXJuaW5nVGV4dFwiKScpLmxlbmd0aDsiKSwKICAgICAgICAgICAgICAgICAgICAiJyRCdXR0b25JRCcgY2xpY2sgLSBXYXJuaW5nIGRpYWxvZyBpcyBmb3VuZCIsCiAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgICRTZWxlbml1bS0+V2FpdEZvcmpRdWVyeUV2ZW50Qm91bmQoCiAgICAgICAgICAgICAgICAgICAgQ1NTU2VsZWN0b3IgPT4gJyNEaWFsb2dCdXR0b24xJywKICAgICAgICAgICAgICAgICAgICBFdmVudCAgICAgICA9PiAnY2xpY2snLAogICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICAjIENsaWNrIHRoZSBjYW5jZWwgYnV0dG9uLgogICAgICAgICAgICAgICAgJFNlbGVuaXVtLT5maW5kX2VsZW1lbnQoICcjRGlhbG9nQnV0dG9uMScsICdjc3MnICktPmNsaWNrKCk7CgogICAgICAgICAgICAgICAgJFNlbGVuaXVtLT5XYWl0Rm9yKCBKYXZhU2NyaXB0ID0+ICdyZXR1cm4gISQoIi5EaWFsb2c6dmlzaWJsZSIpLmxlbmd0aDsnICk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMgU2VsZWN0ICdWYWxpZCcgYXMgVmFsaWRJRCBvcHRpb24uCiAgICAgICAgICAgICRTZWxlbml1bS0+SW5wdXRGaWVsZFZhbHVlU2V0KAogICAgICAgICAgICAgICAgRWxlbWVudCA9PiAnI1ZhbGlkSUQnLAogICAgICAgICAgICAgICAgVmFsdWUgICA9PiAnMScsCiAgICAgICAgICAgICk7CgogICAgICAgICAgICAjIENsaWNrIFNhdmUuCiAgICAgICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCAiI1N1Ym1pdEFuZENvbnRpbnVlIiwgJ2NzcycgKS0+VmVyaWZpZWRDbGljaygpOwoKICAgICAgICAgICAgJFNlbGVuaXVtLT5XYWl0Rm9yKAogICAgICAgICAgICAgICAgSmF2YVNjcmlwdCA9PiAncmV0dXJuIHR5cGVvZigkKSA9PT0gImZ1bmN0aW9uIiAmJiAkKCIjVmFsaWRJRCIpLmxlbmd0aCAmJiAkKCIjRnVuY3Rpb25hbGl0eSIpLmxlbmd0aDsnCiAgICAgICAgICAgICk7CgogICAgICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgICAgICRTZWxlbml1bS0+ZXhlY3V0ZV9zY3JpcHQoInJldHVybiBcJCgnI0Z1bmN0aW9uYWxpdHknKS52YWwoKSA9PSAnd2FybmluZyc7IiksCiAgICAgICAgICAgICAgICAiSW5jaWRlbnQgU3RhdGUgVHlwZSBpcyBzZXQgdG8gJ3dhcm5pbmcnIiwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgICAgICAkU2VsZW5pdW0tPmV4ZWN1dGVfc2NyaXB0KCJyZXR1cm4gXCQoJyNWYWxpZElEJykudmFsKCkgPT0gJzEnOyIpLAogICAgICAgICAgICAgICAgIlZhbGlkSUQgaXMgc2V0IHRvICcxJyIsCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICBteSAkREJPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6REInKTsKCiAgICAgICAgIyBEZWxldGUgY3JlYXRlZCB0ZXN0IGNhdGFsb2cgY2xhc3MuCiAgICAgICAgZm9yIG15ICRDYXRhbG9nSXRlbSAoQENhdGFsb2dJdGVtSURzKSB7CgogICAgICAgICAgICBteSAkU3VjY2VzcyA9ICREQk9iamVjdC0+RG8oCiAgICAgICAgICAgICAgICBTUUwgID0+ICJERUxFVEUgRlJPTSBnZW5lcmFsX2NhdGFsb2dfcHJlZmVyZW5jZXMgV0hFUkUgZ2VuZXJhbF9jYXRhbG9nX2lkID0gPyIsCiAgICAgICAgICAgICAgICBCaW5kID0+IFsgXCRDYXRhbG9nSXRlbSBdLAogICAgICAgICAgICApOwogICAgICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgICAgICRTdWNjZXNzLAogICAgICAgICAgICAgICAgIkNhdGFsb2dJdGVtSUQgJENhdGFsb2dJdGVtIHByZWZlcmVuY2UgLSBkZWxldGVkIiwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICRTdWNjZXNzID0gJERCT2JqZWN0LT5EbygKICAgICAgICAgICAgICAgIFNRTCAgPT4gIkRFTEVURSBGUk9NIGdlbmVyYWxfY2F0YWxvZyBXSEVSRSBpZCA9ID8iLAogICAgICAgICAgICAgICAgQmluZCA9PiBbIFwkQ2F0YWxvZ0l0ZW0gXSwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgICAgICAkU3VjY2VzcywKICAgICAgICAgICAgICAgICJDYXRhbG9nSXRlbUlEICRDYXRhbG9nSXRlbSAtIGRlbGV0ZWQiLAogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgIyBDbGVhbiB1cCBjYWNoZS4KICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6Q2FjaGUnKS0+Q2xlYW5VcCggVHlwZSA9PiAnR2VuZXJhbENhdGFsb2cnICk7CiAgICB9Cik7CgoxOwo=
Ly8gLS0KLy8gQ29weXJpZ2h0IChDKSAyMDAxLTIwMjEgT1RSUyBBRywgaHR0cHM6Ly9vdHJzLmNvbS8KLy8gQ29weXJpZ2h0IChDKSAyMDIxLTIwMjIgWm51bnkgR21iSCwgaHR0cHM6Ly96bnVueS5vcmcvCi8vIC0tCi8vIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCi8vIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEdQTCkuIElmIHlvdQovLyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9ncGwtMy4wLnR4dC4KLy8gLS0KCiJ1c2Ugc3RyaWN0IjsKCnZhciBJVFNNID0gSVRTTSB8fCB7fTsKCi8qKgogKiBAbmFtZXNwYWNlIEdlbmVyYWxDYXRhbG9nCiAqIEBhdXRob3IgT1RSUyBBRwogKiBAZGVzY3JpcHRpb24KICogICAgICBUaGlzIG5hbWVzcGFjZSBjb250YWlucyB0aGUgc3BlY2lhbCBtb2R1bGUgZnVuY3Rpb24gZm9yIEdlbmVyYWwgQ2F0YWxvZy4KICovCiBJVFNNLkdlbmVyYWxDYXRhbG9nID0gKGZ1bmN0aW9uIChUYXJnZXROUykgewoKICAgIC8qKgogICAgICogQG5hbWUgSW5pdAogICAgICogQG1lbWJlcm9mIEdlbmVyYWxDYXRhbG9nCiAgICAgKiBAZnVuY3Rpb24KICAgICAqIEBkZXNjcmlwdGlvbgogICAgICogICAgICBUaGlzIGZ1bmN0aW9uIGluaXRpYWxpemVzIGFjdGlvbnMgZm9yIEdlbmVyYWwgQ2F0YWxvZy4KICAgICAqLwogICAgVGFyZ2V0TlMuSW5pdCA9IGZ1bmN0aW9uKCkgewoKICAgICAgICBpZiAodHlwZW9mIENvcmUuQ29uZmlnLkdldCgnV2FybmluZ0luY2lkZW50U3RhdGUnKSAhPT0gJ3VuZGVmaW5lZCcKICAgICAgICAgICAgJiYgcGFyc2VJbnQoQ29yZS5Db25maWcuR2V0KCdXYXJuaW5nSW5jaWRlbnRTdGF0ZScpLCAxMCkgPT09IDEKICAgICAgICApIHsKICAgICAgICAgICAgJCgnI1N1Ym1pdCcpLmNsaWNrKGZ1bmN0aW9uKEV2ZW50KXsKICAgICAgICAgICAgICAgIHZhciBGdW5jdGlvbmFsaXR5ID0gJCgnI0Z1bmN0aW9uYWxpdHknKS52YWwoKSwKICAgICAgICAgICAgICAgICAgICBWYWxpZElEICAgICAgID0gJCgnI1ZhbGlkSUQnKS52YWwoKTsKCiAgICAgICAgICAgICAgICBFdmVudC5wcmV2ZW50RGVmYXVsdCgpOwoKICAgICAgICAgICAgICAgIGlmIChGdW5jdGlvbmFsaXR5ID09PSAnd2FybmluZycgJiYgVmFsaWRJRCAhPSAnMScpIHsKICAgICAgICAgICAgICAgICAgICBDb3JlLlVJLkRpYWxvZy5TaG93RGlhbG9nKHsKICAgICAgICAgICAgICAgICAgICAgICAgTW9kYWw6IHRydWUsCiAgICAgICAgICAgICAgICAgICAgICAgIFRpdGxlOiBDb3JlLkxhbmd1YWdlLlRyYW5zbGF0ZSgnV2FybmluZycpLAogICAgICAgICAgICAgICAgICAgICAgICBIVE1MOiAnPHA+JyArIENvcmUuTGFuZ3VhZ2UuVHJhbnNsYXRlKCdXYXJuaW5nIGluY2lkZW50IHN0YXRlIGNhbiBub3QgYmUgc2V0IHRvIGludmFsaWQuJykgKyAnPC9wPicsCiAgICAgICAgICAgICAgICAgICAgICAgIFBvc2l0aW9uVG9wOiAnMTUlJywKICAgICAgICAgICAgICAgICAgICAgICAgUG9zaXRpb25MZWZ0OiAnQ2VudGVyJywKICAgICAgICAgICAgICAgICAgICAgICAgQ2xvc2VPbkVzY2FwZTogZmFsc2UsCiAgICAgICAgICAgICAgICAgICAgICAgIENsb3NlT25DbGlja091dHNpZGU6IGZhbHNlLAogICAgICAgICAgICAgICAgICAgICAgICBCdXR0b25zOiBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGFiZWw6IENvcmUuTGFuZ3VhZ2UuVHJhbnNsYXRlKCdDYW5jZWwnKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGdW5jdGlvbjogZnVuY3Rpb24gKCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb3JlLlVJLkRpYWxvZy5DbG9zZURpYWxvZygkKCcuRGlhbG9nOnZpc2libGUnKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgXQogICAgICAgICAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICQodGhpcykuY2xvc2VzdCgnZm9ybScpLnRyaWdnZXIoJ3N1Ym1pdCcpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9KTsKICAgICAgICB9CiAgICB9OwoKICAgIENvcmUuSW5pdC5SZWdpc3Rlck5hbWVzcGFjZShUYXJnZXROUywgJ0FQUF9NT0RVTEUnKTsKCiAgICByZXR1cm4gVGFyZ2V0TlM7Cn0oSVRTTS5HZW5lcmFsQ2F0YWxvZyB8fCB7fSkpOwo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIxIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDIxLTIwMjIgWm51bnkgR21iSCwgaHR0cHM6Ly96bnVueS5vcmcvCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0zLjAudHh0LgojIC0tCgpwYWNrYWdlIHZhcjo6cGFja2FnZXNldHVwOjpHZW5lcmFsQ2F0YWxvZzsgICAgIyMgbm8gY3JpdGljCgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7Cgp1c2UgS2VybmVsOjpTeXN0ZW06OlZhcmlhYmxlQ2hlY2sgcXcoOmFsbCk7CgpvdXIgQE9iamVjdERlcGVuZGVuY2llcyA9ICgKICAgICdLZXJuZWw6OkNvbmZpZycsCiAgICAnS2VybmVsOjpTeXN0ZW06OkRCJywKICAgICdLZXJuZWw6OlN5c3RlbTo6U3lzQ29uZmlnJywKKTsKCj1oZWFkMSBOQU1FCgp2YXI6OnBhY2thZ2VzZXR1cDo6R2VuZXJhbENhdGFsb2cgLSBjb2RlIHRvIGV4ZWN1dGUgZHVyaW5nIHBhY2thZ2UgaW5zdGFsbGF0aW9uCgo9aGVhZDEgUFVCTElDIElOVEVSRkFDRQoKPWN1dAoKPWhlYWQyIG5ldygpCgpjcmVhdGUgYW4gb2JqZWN0CgogICAgdXNlIEtlcm5lbDo6U3lzdGVtOjpPYmplY3RNYW5hZ2VyOwogICAgbG9jYWwgJEtlcm5lbDo6T00gPSBLZXJuZWw6OlN5c3RlbTo6T2JqZWN0TWFuYWdlci0+bmV3KCk7CiAgICBteSAkQ29kZU9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ3Zhcjo6cGFja2FnZXNldHVwOjpHZW5lcmFsQ2F0YWxvZycpOwoKPWN1dAoKc3ViIG5ldyB7CiAgICBteSAoICRUeXBlLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgYWxsb2NhdGUgbmV3IGhhc2ggZm9yIG9iamVjdAogICAgbXkgJFNlbGYgPSB7fTsKICAgIGJsZXNzKCAkU2VsZiwgJFR5cGUgKTsKCiAgICAjIEZvcmNlIGEgcmVsb2FkIG9mIFpaWkF1dG8ucG0gYW5kIFpaWkFBdXRvLnBtIHRvIGdldCB0aGUgZnJlc2ggY29uZmlndXJhdGlvbiB2YWx1ZXMuCiAgICBmb3IgbXkgJE1vZHVsZSAoIHNvcnQga2V5cyAlSU5DICkgewogICAgICAgIGlmICggJE1vZHVsZSA9fiBtL1paWkFBP3V0b1wucG0kLyApIHsKICAgICAgICAgICAgZGVsZXRlICRJTkN7JE1vZHVsZX07CiAgICAgICAgfQogICAgfQoKICAgICMgQ3JlYXRlIGNvbW1vbiBvYmplY3RzIHdpdGggZnJlc2ggZGVmYXVsdCBjb25maWcuCiAgICAkS2VybmVsOjpPTS0+T2JqZWN0c0Rpc2NhcmQoKTsKCiAgICByZXR1cm4gJFNlbGY7Cn0KCj1oZWFkMiBDb2RlSW5zdGFsbCgpCgpydW4gdGhlIGNvZGUgaW5zdGFsbCBwYXJ0CgogICAgbXkgJFJlc3VsdCA9ICRDb2RlT2JqZWN0LT5Db2RlSW5zdGFsbCgpOwoKPWN1dAoKc3ViIENvZGVJbnN0YWxsIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgcmV0dXJuIDE7Cn0KCj1oZWFkMiBDb2RlUmVpbnN0YWxsKCkKCnJ1biB0aGUgY29kZSByZWluc3RhbGwgcGFydAoKICAgIG15ICRSZXN1bHQgPSAkQ29kZU9iamVjdC0+Q29kZVJlaW5zdGFsbCgpOwoKPWN1dAoKc3ViIENvZGVSZWluc3RhbGwgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICByZXR1cm4gMTsKfQoKPWhlYWQyIENvZGVVcGdyYWRlKCkKCnJ1biB0aGUgY29kZSB1cGdyYWRlIHBhcnQKCiAgICBteSAkUmVzdWx0ID0gJENvZGVPYmplY3QtPkNvZGVVcGdyYWRlKCk7Cgo9Y3V0CgpzdWIgQ29kZVVwZ3JhZGUgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIG1pZ3JhdGUgJ2Z1bmN0aW9uYWxpdHknIHRvIGV4dGVybmFsIHRhYmxlCiAgICAjIHRoaXMgaXMgb25seSBuZWNjZXNhcnkgaW4gQ29kZVVwZ3JhZGUsIGZvciBuZXcgaW5zdGFsbGF0aW9ucyB0aGlzIGlzIGRvbmUKICAgICMgaW4gdGhlIHBhY2thZ2UgSVRTTUNvcmUgZHVyaW5nIENvZGVJbnN0YWxsCiAgICAkU2VsZi0+X01pZ3JhdGVGdW5jdGlvbmFsaXR5KCk7CgogICAgcmV0dXJuIDE7Cn0KCj1oZWFkMiBDb2RlVXBncmFkZUZyb21Mb3dlclRoYW5fNF8wXzkxKCkKClRoaXMgZnVuY3Rpb24gaXMgb25seSBleGVjdXRlZCBpZiB0aGUgaW5zdGFsbGVkIG1vZHVsZSB2ZXJzaW9uIGlzIHNtYWxsZXIgdGhhbiA0LjAuOTEuCgpteSAkUmVzdWx0ID0gJENvZGVPYmplY3QtPkNvZGVVcGdyYWRlRnJvbUxvd2VyVGhhbl80XzBfOTEoKTsKCj1jdXQKCnN1YiBDb2RlVXBncmFkZUZyb21Mb3dlclRoYW5fNF8wXzkxIHsgICAgIyMgbm8gY3JpdGljCiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hhbmdlIGNvbmZpZ3VyYXRpb25zIHRvIG1hdGNoIHRoZSBuZXcgbW9kdWxlIGxvY2F0aW9uLgogICAgJFNlbGYtPl9NaWdyYXRlQ29uZmlncygpOwoKICAgIHJldHVybiAxOwp9Cgo9aGVhZDIgQ29kZVVuaW5zdGFsbCgpCgpydW4gdGhlIGNvZGUgdW5pbnN0YWxsIHBhcnQKCiAgICBteSAkUmVzdWx0ID0gJENvZGVPYmplY3QtPkNvZGVVbmluc3RhbGwoKTsKCj1jdXQKCnN1YiBDb2RlVW5pbnN0YWxsIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgcmV0dXJuIDE7Cn0KCj1oZWFkMiBfTWlncmF0ZUZ1bmN0aW9uYWxpdHkoKQoKPWN1dAoKc3ViIF9NaWdyYXRlRnVuY3Rpb25hbGl0eSB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgU0VMRUNUIGFsbCBmdW5jdGlvbmFsaXR5IHZhbHVlcwogICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkRCJyktPlByZXBhcmUoCiAgICAgICAgU1FMID0+ICdTRUxFQ1QgaWQsIGZ1bmN0aW9uYWxpdHkgRlJPTSBnZW5lcmFsX2NhdGFsb2cnLAogICAgKTsKCiAgICBteSBATGlzdDsKICAgIFJPVzoKICAgIHdoaWxlICggbXkgQFJvdyA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEQicpLT5GZXRjaHJvd0FycmF5KCkgKSB7CiAgICAgICAgbmV4dCBST1cgaWYgISRSb3dbMV07CgogICAgICAgIHB1c2ggQExpc3QsIFxAUm93OwogICAgfQoKICAgICMgc2F2ZSBlbnRyaWVzIGluIG5ldyB0YWJsZQogICAgZm9yIG15ICRFbnRyeSAoQExpc3QpIHsKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6REInKS0+RG8oCiAgICAgICAgICAgIFNRTCA9PgogICAgICAgICAgICAgICAgJ0lOU0VSVCBJTlRPIGdlbmVyYWxfY2F0YWxvZ19wcmVmZXJlbmNlcyggZ2VuZXJhbF9jYXRhbG9nX2lkLCBwcmVmX2tleSwgcHJlZl92YWx1ZSApJwogICAgICAgICAgICAgICAgLiAnIFZBTFVFUyggPywgXCdGdW5jdGlvbmFsaXR5XCcsID8gKScsCiAgICAgICAgICAgIEJpbmQgPT4gWyBcJEVudHJ5LT5bMF0sIFwkRW50cnktPlsxXSBdLAogICAgICAgICk7CiAgICB9CgogICAgIyBkcm9wIGNvbHVtbiBmdW5jdGlvbmFsaXR5CiAgICBteSAoJERyb3ApID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkRCJyktPlNRTFByb2Nlc3NvcigKICAgICAgICBEYXRhYmFzZSA9PiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIFRhZyAgICAgPT4gJ1RhYmxlQWx0ZXInLAogICAgICAgICAgICAgICAgTmFtZSAgICA9PiAnZ2VuZXJhbF9jYXRhbG9nJywKICAgICAgICAgICAgICAgIFRhZ1R5cGUgPT4gJ1N0YXJ0JywKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgVGFnICAgICA9PiAnQ29sdW1uRHJvcCcsCiAgICAgICAgICAgICAgICBOYW1lICAgID0+ICdmdW5jdGlvbmFsaXR5JywKICAgICAgICAgICAgICAgIFRhZ1R5cGUgPT4gJ1N0YXJ0JywKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgVGFnICAgICA9PiAnVGFibGVBbHRlcicsCiAgICAgICAgICAgICAgICBUYWdUeXBlID0+ICdFbmQnLAogICAgICAgICAgICB9LAogICAgICAgIF0sCiAgICApOwoKICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEQicpLT5EbygKICAgICAgICBTUUwgPT4gJERyb3AsCiAgICApOwoKICAgIHJldHVybiAxOwp9Cgo9aGVhZDIgX01pZ3JhdGVDb25maWdzKCkKCmNoYW5nZSBjb25maWd1cmF0aW9ucyB0byBtYXRjaCB0aGUgbmV3IG1vZHVsZSBsb2NhdGlvbi4KCiAgICBteSAkUmVzdWx0ID0gJENvZGVPYmplY3QtPl9NaWdyYXRlQ29uZmlncygpOwoKPWN1dAoKc3ViIF9NaWdyYXRlQ29uZmlncyB7CgogICAgbXkgJFN5c0NvbmZpZ09iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpTeXNDb25maWcnKTsKICAgIG15ICRDb25maWdPYmplY3QgICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OkNvbmZpZycpOwoKICAgIG15ICRTZXR0aW5nID0gJENvbmZpZ09iamVjdC0+R2V0KCdHZW5lcmFsQ2F0YWxvZ1ByZWZlcmVuY2VzJyk7CgogICAgbXkgQE5ld1NldHRpbmdzOwoKICAgIENPTkZJR0lURU06CiAgICBmb3IgbXkgJE1lbnVNb2R1bGUgKCBzb3J0IGtleXMgJXskU2V0dGluZ30gKSB7CgogICAgICAgICMgdXBkYXRlIG1vZHVsZSBsb2NhdGlvbgogICAgICAgIG15ICRNb2R1bGUgPSAkU2V0dGluZy0+eyRNZW51TW9kdWxlfS0+eydNb2R1bGUnfTsKICAgICAgICBpZiAoICRNb2R1bGUgIX4gbXtLZXJuZWw6Ok91dHB1dDo6SFRNTDo6R2VuZXJhbENhdGFsb2dQcmVmZXJlbmNlcyhcdyspfSApIHsKICAgICAgICAgICAgbmV4dCBDT05GSUdJVEVNOwogICAgICAgIH0KCiAgICAgICAgIyBEZWZpbmUgdGhlIG5ldyBzZXR0aW5nIHZhbHVlLgogICAgICAgICRTZXR0aW5nLT57JE1lbnVNb2R1bGV9LT57TW9kdWxlfSA9ICJLZXJuZWw6Ok91dHB1dDo6SFRNTDo6R2VuZXJhbENhdGFsb2dQcmVmZXJlbmNlczo6R2VuZXJpYyI7CgogICAgICAgICMgQnVpbGQgbmV3IHNldHRpbmcuCiAgICAgICAgcHVzaCBATmV3U2V0dGluZ3MsIHsKICAgICAgICAgICAgTmFtZSAgICAgICAgICAgPT4gJ0dlbmVyYWxDYXRhbG9nUHJlZmVyZW5jZXMjIyMnIC4gJE1lbnVNb2R1bGUsCiAgICAgICAgICAgIEVmZmVjdGl2ZVZhbHVlID0+ICRTZXR0aW5nLT57JE1lbnVNb2R1bGV9LAogICAgICAgIH07CiAgICB9CgogICAgcmV0dXJuIDEgaWYgIUBOZXdTZXR0aW5nczsKCiAgICAjIFdyaXRlIG5ldyBzZXR0aW5nLgogICAgJFN5c0NvbmZpZ09iamVjdC0+U2V0dGluZ3NTZXQoCiAgICAgICAgVXNlcklEICAgPT4gMSwKICAgICAgICBDb21tZW50cyA9PiAnR2VuZXJhbENhdGFsb2cgLSBwYWNrYWdlIHNldHVwIGZ1bmN0aW9uOiBfTWlncmF0ZUNvbmZpZ3MnLAogICAgICAgIFNldHRpbmdzID0+IFxATmV3U2V0dGluZ3MsCiAgICApOwoKICAgIHJldHVybiAxOwp9CgoxOwoKPWhlYWQxIFRFUk1TIEFORCBDT05ESVRJT05TCgpUaGlzIFNvZnR3YXJlIGlzIHBhcnQgb2YgdGhlIE9UUlMgcHJvamVjdCAoaHR0cDovL290cnMub3JnLykuCgpUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQp0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChHUEwpLiBJZiB5b3UKZGlkIG5vdCByZWNlaXZlIHRoaXMgZmlsZSwgc2VlIEw8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9ncGwtMy4wLnR4dD4uCgo9Y3V0Cg==
{Name}->{Content};
$Kernel::OM->Get($CodeModule)->CodeInstall();
]]>
{Name}->{Content};
$Kernel::OM->Get($CodeModule)->CodeReinstall();
]]>
{Name}->{Content};
# discard internally stored object, so that the next access to object creates them newly
$Kernel::OM->ObjectsDiscard(
Objects => [$CodeModule],
ForcePackageReload => 1,
);
$Kernel::OM->Get($CodeModule)->CodeUpgrade();
]]>
{Name}->{Content};
$Kernel::OM->Get($CodeModule)->CodeUpgradeFromLowerThan_4_0_91();
]]>
{Name}->{Content};
$Kernel::OM->Get($CodeModule)->CodeUninstall();
]]>
ATTENTION
If you uninstall this package, all database tables that were created during installation will be deleted.
All data from this table will be irrevocably lost.
((enjoy))
]]>
ACHTUNG
Bei der Deinstallation werden die von diesem Paket angelegten Datenbank-Tabellen gelöscht.
Alle darin enthaltenen Daten gehen unwiderruflich verloren!
((enjoy))
]]>
ATENCIÓN
Si usted desinstala este paquete, todas las tablas de la base de datos creadas durante la instalación serán borradas.
¡Todos los datos de esas tablas serán irrevocablemente perdidos!.
((enjoy))
]]>
FIGYELEM
Ha eltávolítja ezt a csomagot, akkor a telepítés során létrehozott összes adatbázistábla törlésre kerül.
Az ezekben a táblákban lévő összes adat visszavonhatatlanul el fog veszni!
((enjoy))
]]>