GeneralCatalog
6.0.13
OTRS AG
https://otrs.com/
GNU GENERAL PUBLIC LICENSE Version 3, 29 June 2007
Build for OTRS::ITSM 6 patch level 13.
Build for OTRS::ITSM 6 patch level 12.
Build for OTRS::ITSM 6 patch level 11.
Build for OTRS::ITSM 6 patch level 10.
Build for OTRS::ITSM 6 patch level 9.
Build for OTRS::ITSM 6 patch level 8.
Build for OTRS::ITSM 6 patch level 7.
Build for OTRS::ITSM 6 patch level 6.
Build for OTRS::ITSM 6 patch level 5.
Build for OTRS::ITSM 6 patch level 4.
Build for OTRS::ITSM 6 patch level 3.
Build for OTRS::ITSM 6 patch level 2.
Build for OTRS::ITSM 6.
Build for OTRS::ITSM 6 rc1.
Build for OTRS::ITSM 6 beta3.
Build for OTRS::ITSM 6 beta2.
Build for OTRS::ITSM 6 beta1.
The General Catalog package.
Das General Catalog Paket.
El paquete General Catalog.
Az általános katalógus csomag.
6.0.x
<br/>
<strong>ATTENTION</strong>
<br/>
<br/>
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.
<br/>
<br/>
((enjoy))<br/>
<br/>
<br/>
<strong>ACHTUNG</strong>
<br/>
<br/>
Bei der Deinstallation werden die von diesem Paket angelegten Datenbank-Tabellen gelöscht.
Alle darin enthaltenen Daten gehen unwiderruflich verloren!
<br/>
<br/>
((enjoy))<br/>
<br/>
<br/>
<strong>ATENCIÓN</strong>
<br/>
<br/>
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!.
<br/>
<br/>
((enjoy))<br/>
<br/>
<br/>
<strong>FIGYELEM</strong>
<br/>
<br/>
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!
<br/>
<br/>
((enjoy))<br/>
<br/>
# create the package name
my $CodeModule = 'var::packagesetup::' . $Param{Structure}->{Name}->{Content};
$Kernel::OM->Get($CodeModule)->CodeInstall();
# create the package name
my $CodeModule = 'var::packagesetup::' . $Param{Structure}->{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();
# create the package name
my $CodeModule = 'var::packagesetup::' . $Param{Structure}->{Name}->{Content};
$Kernel::OM->Get($CodeModule)->CodeUpgradeFromLowerThan_4_0_91();
# create the package name
my $CodeModule = 'var::packagesetup::' . $Param{Structure}->{Name}->{Content};
$Kernel::OM->Get($CodeModule)->CodeUninstall();
# create the package name
my $CodeModule = 'var::packagesetup::' . $Param{Structure}->{Name}->{Content};
$Kernel::OM->Get($CodeModule)->CodeReinstall();
2018-11-05 14:45:38
opms.otrs.com
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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+fr3Yc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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+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtPklUU00uR2VuZXJhbENhdGFsb2cuSlNDb2xvclBpY2tlci5qczwvSXRlbT4KICAgICAgICAgICAgICAgICAgICA8L0FycmF5PgogICAgICAgICAgICAgICAgPC9JdGVtPgogICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgPC9WYWx1ZT4KICAgIDwvU2V0dGluZz4KICAgIDxTZXR0aW5nIE5hbWU9IkZyb250ZW5kOjpOYXZpZ2F0aW9uIyMjQWRtaW5HZW5lcmFsQ2F0YWxvZyMjIzAwMS1HZW5lcmFsQ2F0YWxvZyIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIwIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5NYWluIG1lbnUgaXRlbSByZWdpc3RyYXRpb24uPC9EZXNjcmlwdGlvbj4KICAgICAgICA8TmF2aWdhdGlvbj5Gcm9udGVuZDo6QWRtaW46Ok1vZHVsZVJlZ2lzdHJhdGlvbjo6TWFpbk1lbnU8L05hdmlnYXRpb24+CiAgICAgICAgPFZhbHVlPgogICAgICAgICAgICA8QXJyYXk+CiAgICAgICAgICAgICAgICA8RGVmYXVsdEl0ZW0gVmFsdWVUeXBlPSJGcm9udGVuZE5hdmlnYXRpb24iPgogICAgICAgICAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICAgICAgICAgIDwvRGVmYXVsdEl0ZW0+CiAgICAgICAgICAgIDwvQXJyYXk+CiAgICAgICAgPC9WYWx1ZT4KICAgIDwvU2V0dGluZz4KICAgIDxTZXR0aW5nIE5hbWU9IkZyb250ZW5kOjpOYXZpZ2F0aW9uTW9kdWxlIyMjQWRtaW5HZW5lcmFsQ2F0YWxvZyIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5BZG1pbiBhcmVhIG5hdmlnYXRpb24gZm9yIHRoZSBhZ2VudCBpbnRlcmZhY2UuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8TmF2aWdhdGlvbj5Gcm9udGVuZDo6QWRtaW46Ok1vZHVsZVJlZ2lzdHJhdGlvbjo6QWRtaW5PdmVydmlldzwvTmF2aWdhdGlvbj4KICAgICAgICA8VmFsdWU+CiAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJHcm91cCI+CiAgICAgICAgICAgICAgICAgICAgPEFycmF5PgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbT5hZG1pbjwvSXRlbT4KICAgICAgICAgICAgICAgICAgICA8L0FycmF5PgogICAgICAgICAgICAgICAgPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJHcm91cFJvIj4KICAgICAgICAgICAgICAgICAgICA8QXJyYXk+CiAgICAgICAgICAgICAgICAgICAgPC9BcnJheT4KICAgICAgICAgICAgICAgIDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTW9kdWxlIj5LZXJuZWw6Ok91dHB1dDo6SFRNTDo6TmF2QmFyOjpNb2R1bGVBZG1pbjwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTmFtZSIgVHJhbnNsYXRhYmxlPSIxIj5HZW5lcmFsIENhdGFsb2c8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkJsb2NrIj5BZG1pbmlzdHJhdGlvbjwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iRGVzY3JpcHRpb24iIFRyYW5zbGF0YWJsZT0iMSI+Q3JlYXRlIGFuZCBtYW5hZ2UgdGhlIEdlbmVyYWwgQ2F0YWxvZy48L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ikljb25CaWciPmZhLWJvb2s8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ikljb25TbWFsbCI+PC9JdGVtPgogICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgPC9WYWx1ZT4KICAgIDwvU2V0dGluZz4KICAgIDxTZXR0aW5nIE5hbWU9IkdlbmVyYWxDYXRhbG9nOjpGcm9udGVuZDo6SlNDb2xvclBpY2tlclBhdGgiIFJlcXVpcmVkPSIxIiBWYWxpZD0iMSIgQ29uZmlnTGV2ZWw9IjIwMCI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+RGVmaW5lcyB0aGUgVVJMIEpTIENvbG9yIFBpY2tlciBwYXRoLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPE5hdmlnYXRpb24+RnJvbnRlbmQ6OkJhc2U8L05hdmlnYXRpb24+CiAgICAgICAgPFZhbHVlPgogICAgICAgICAgICA8SXRlbSBWYWx1ZVR5cGU9IlN0cmluZyIgVmFsdWVSZWdleD0iIj4mbHQ7T1RSU19DT05GSUdfRnJvbnRlbmQ6OldlYlBhdGgmZ3Q7anMvdGhpcmRwYXJ0eS9qc2NvbG9yXzEuNC4xLzwvSXRlbT4KICAgICAgICA8L1ZhbHVlPgogICAgPC9TZXR0aW5nPgogICAgPFNldHRpbmcgTmFtZT0iR2VuZXJhbENhdGFsb2dQcmVmZXJlbmNlcyMjI0NvbW1lbnQyIiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjAiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPlBhcmFtZXRlcnMgZm9yIHRoZSBleGFtcGxlIGNvbW1lbnQgMiBvZiB0aGUgZ2VuZXJhbCBjYXRhbG9nIGF0dHJpYnV0ZXMuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8TmF2aWdhdGlvbj5Db3JlOjpHZW5lcmFsQ2F0YWxvZzwvTmF2aWdhdGlvbj4KICAgICAgICA8VmFsdWU+CiAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJNb2R1bGUiPktlcm5lbDo6T3V0cHV0OjpIVE1MOjpHZW5lcmFsQ2F0YWxvZ1ByZWZlcmVuY2VzOjpHZW5lcmljPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJMYWJlbCIgVHJhbnNsYXRhYmxlPSIxIj5Db21tZW50IDI8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkRlc2MiIFRyYW5zbGF0YWJsZT0iMSI+RGVmaW5lIHRoZSBnZW5lcmFsIGNhdGFsb2cgY29tbWVudCAyLjwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iQmxvY2siPlRleHRBcmVhPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJDb2xzIj41MDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iUm93cyI+NTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iUHJlZktleSI+Q29tbWVudDI8L0l0ZW0+CiAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICA8L1ZhbHVlPgogICAgPC9TZXR0aW5nPgogICAgPFNldHRpbmcgTmFtZT0iR2VuZXJhbENhdGFsb2dQcmVmZXJlbmNlcyMjI1Blcm1pc3Npb25zIiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjAiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPlBhcmFtZXRlcnMgZm9yIHRoZSBleGFtcGxlIHBlcm1pc3Npb24gZ3JvdXBzIG9mIHRoZSBnZW5lcmFsIGNhdGFsb2cgYXR0cmlidXRlcy48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxOYXZpZ2F0aW9uPkNvcmU6OkdlbmVyYWxDYXRhbG9nPC9OYXZpZ2F0aW9uPgogICAgICAgIDxWYWx1ZT4KICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik1vZHVsZSI+S2VybmVsOjpPdXRwdXQ6OkhUTUw6OkdlbmVyYWxDYXRhbG9nUHJlZmVyZW5jZXM6OkdlbmVyaWM8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkxhYmVsIiBUcmFuc2xhdGFibGU9IjEiPlBlcm1pc3Npb248L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkRlc2MiIFRyYW5zbGF0YWJsZT0iMSI+RGVmaW5lIHRoZSBncm91cCB3aXRoIHBlcm1pc3Npb25zLjwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iQmxvY2siPlBlcm1pc3Npb248L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkNsYXNzIj5JVFNNOjpDb25maWdJdGVtOjpDbGFzczwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iUHJlZktleSI+UGVybWlzc2lvbjwvSXRlbT4KICAgICAgICAgICAgPC9IYXNoPgogICAgICAgIDwvVmFsdWU+CiAgICA8L1NldHRpbmc+CiAgICA8U2V0dGluZyBOYW1lPSJMb2FkZXI6OkFnZW50OjpDb21tb25KUyMjIzEwMC1HZW5lcmFsQ2F0YWxvZyIgUmVxdWlyZWQ9IjEiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5MaXN0IG9mIEpTIGZpbGVzIHRvIGFsd2F5cyBiZSBsb2FkZWQgZm9yIHRoZSBhZ2VudCBpbnRlcmZhY2UuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8TmF2aWdhdGlvbj5Gcm9udGVuZDo6QmFzZTo6TG9hZGVyPC9OYXZpZ2F0aW9uPgogICAgICAgIDxWYWx1ZT4KICAgICAgICAgICAgPEFycmF5PgogICAgICAgICAgICAgICAgPEl0ZW0+dGhpcmRwYXJ0eS9qc2NvbG9yXzEuNC4xL2pzY29sb3IuanM8L0l0ZW0+CiAgICAgICAgICAgIDwvQXJyYXk+CiAgICAgICAgPC9WYWx1ZT4KICAgIDwvU2V0dGluZz4KPC9vdHJzX2NvbmZpZz4K
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0zLjAudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6TGFuZ3VhZ2U6OmJnX0dlbmVyYWxDYXRhbG9nOwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwp1c2UgdXRmODsKCnN1YiBEYXRhIHsKICAgIG15ICRTZWxmID0gc2hpZnQ7CgogICAgIyBUZW1wbGF0ZTogQUFBR2VuZXJhbENhdGFsb2cKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Z1bmN0aW9uYWxpdHknfSA9ICfQpNGD0L3QutGG0LjQvtC90LDQu9C90L7RgdGCJzsKCiAgICAjIFRlbXBsYXRlOiBBZG1pbkdlbmVyYWxDYXRhbG9nCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydHZW5lcmFsIENhdGFsb2cgTWFuYWdlbWVudCd9ID0gJ9Cj0L/RgNCw0LLQu9C10L3QuNC1INC90LAg0L7RgdC90L7QstC90LjRjyDQutCw0YLQsNC70L7Qsyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJdGVtcyBpbiBDbGFzcyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFZGl0IEl0ZW0nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIENsYXNzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBJdGVtJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBDYXRhbG9nIEl0ZW0nfSA9ICfQlNC+0LHQsNCy0Lgg0LXQu9C10LzQtdC90YIg0LrRitC8INC60LDRgtCw0LvQvtCz0LAnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIENhdGFsb2cgQ2xhc3MnfSA9ICfQlNC+0LHQsNCy0Lgg0LrQu9Cw0YEg0LIg0LrQsNGC0LDQu9C+0LPQsCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDYXRhbG9nIENsYXNzJ30gPSAn0JrQu9Cw0YHQvtCy0LUg0LIg0LrQsNGC0LDQu9C+0LPQsCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFZGl0IENhdGFsb2cgSXRlbSd9ID0gJyc7CgogICAgIyBTeXNDb25maWcKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbW1lbnQgMid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDcmVhdGUgYW5kIG1hbmFnZSB0aGUgR2VuZXJhbCBDYXRhbG9nLid9ID0gJ9Ch0YrQt9C00LDQstCw0L3QtSDQuCDQv9C+0LTQtNGA0YrQttC60LAg0L3QsCDQntGB0L3QvtCy0L3QuNGPINC60LDRgtCw0LvQvtCzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZSB0aGUgZ2VuZXJhbCBjYXRhbG9nIGNvbW1lbnQgMi4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lIHRoZSBncm91cCB3aXRoIHBlcm1pc3Npb25zLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBVUkwgSlMgQ29sb3IgUGlja2VyIHBhdGguJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZG1pbkdlbmVyYWxDYXRhbG9nIGNvbmZpZ3VyYXRpb24gaW4gdGhlIGFkbWluIGFyZWEuJ30gPQogICAgICAgICfQoNC10LPQuNGB0YLRgNCw0YbQuNGPINC90LAg0L/RgNC10LTQvdC40Y8g0LzQvtC00YPQuyDQt9CwINC60L7QvdGE0LjQs9GD0YDQsNGG0LjRj9GC0LAg0L3QsCDQkNC00LzQuNC90LjRgdGC0YDQsNGC0L7RgNGB0LrQuNGPINCe0YHQvdC+0LLQtdC9INC60LDRgtCw0LvQvtCzINCyINCQ0LTQvNC40L3QuNGB0YLRgNCw0YLQuNCy0L3QsNGC0LAg0YfQsNGB0YIuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0dlbmVyYWwgQ2F0YWxvZyd9ID0gJ9Ce0YHQvdC+0LLQtdC9INC60LDRgtCw0LvQvtCzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcmFtZXRlcnMgZm9yIHRoZSBleGFtcGxlIGNvbW1lbnQgMiBvZiB0aGUgZ2VuZXJhbCBjYXRhbG9nIGF0dHJpYnV0ZXMuJ30gPQogICAgICAgICfQn9Cw0YDQsNC80LXRgtGA0Lgg0L3QsCDQv9GA0LjQvNC10YDQvdC40Y8g0LrQvtC80LXQvdGC0LDRgCAyINC90LAg0LDRgtGA0LjQsdGD0YLQuNGC0LUg0L3QsCDQvtCx0YnQuNGPINC60LDRgtCw0LvQvtCzLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJhbWV0ZXJzIGZvciB0aGUgZXhhbXBsZSBwZXJtaXNzaW9uIGdyb3VwcyBvZiB0aGUgZ2VuZXJhbCBjYXRhbG9nIGF0dHJpYnV0ZXMuJ30gPQogICAgICAgICfQn9Cw0YDQsNC80LXRgtGA0Lgg0LfQsCDQv9GA0LjQvNC10YDQvdC40YLQtSDRgNCw0LfRgNC10YjQuNGC0LXQu9C90Lgg0LPRgNGD0L/QuCDQvtGCINCw0YLRgNC40LHRg9GC0LjRgtC1INC90LAg0L7QsdGJ0LjRjyDQutCw0YLQsNC70L7Qsy4nOwoKCiAgICBwdXNoIEB7ICRTZWxmLT57SmF2YVNjcmlwdFN0cmluZ3N9IC8vIFtdIH0sICgKICAgICk7Cgp9CgoxOwo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0zLjAudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6TGFuZ3VhZ2U6OmNzX0dlbmVyYWxDYXRhbG9nOwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwp1c2UgdXRmODsKCnN1YiBEYXRhIHsKICAgIG15ICRTZWxmID0gc2hpZnQ7CgogICAgIyBUZW1wbGF0ZTogQUFBR2VuZXJhbENhdGFsb2cKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Z1bmN0aW9uYWxpdHknfSA9ICdGdW5rY2lvbmFsaXRhJzsKCiAgICAjIFRlbXBsYXRlOiBBZG1pbkdlbmVyYWxDYXRhbG9nCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydHZW5lcmFsIENhdGFsb2cgTWFuYWdlbWVudCd9ID0gJ1NwcsOhdmEgSGxhdm7DrWhvIEthdGFsb2d1JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0l0ZW1zIGluIENsYXNzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VkaXQgSXRlbSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgQ2xhc3MnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIEl0ZW0nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIENhdGFsb2cgSXRlbSd9ID0gJ1DFmWlkYXQgcG9sb8W+a3UgS2F0YWxvZ3UnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIENhdGFsb2cgQ2xhc3MnfSA9ICdQxZlpZGF0IHTFmcOtZHUgS2F0YWxvZ3UnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2F0YWxvZyBDbGFzcyd9ID0gJ1TFmcOtZHkgS2F0YWxvZ3UnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRWRpdCBDYXRhbG9nIEl0ZW0nfSA9ICcnOwoKICAgICMgU3lzQ29uZmlnCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb21tZW50IDInfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3JlYXRlIGFuZCBtYW5hZ2UgdGhlIEdlbmVyYWwgQ2F0YWxvZy4nfSA9ICdWeXR2b8WZaXQgYSBzcHJhdm92YXQgaGxhdm7DrSBrYXRhbG9nJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZSB0aGUgZ2VuZXJhbCBjYXRhbG9nIGNvbW1lbnQgMi4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lIHRoZSBncm91cCB3aXRoIHBlcm1pc3Npb25zLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBVUkwgSlMgQ29sb3IgUGlja2VyIHBhdGguJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZG1pbkdlbmVyYWxDYXRhbG9nIGNvbmZpZ3VyYXRpb24gaW4gdGhlIGFkbWluIGFyZWEuJ30gPQogICAgICAgICdGcm9udGVuZG92w6EgcmVnaXN0cmFjZSBtb2R1bHUgcHJvIGtvbmZpZ3VyYWNpIGhsYXZuw61obyBrYXRhbG9ndSB2IGFkbWluaXN0cmF0aXZuw60gb2JsYXN0aS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnR2VuZXJhbCBDYXRhbG9nJ30gPSAnSGxhdm7DrSBLYXRhbG9nJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcmFtZXRlcnMgZm9yIHRoZSBleGFtcGxlIGNvbW1lbnQgMiBvZiB0aGUgZ2VuZXJhbCBjYXRhbG9nIGF0dHJpYnV0ZXMuJ30gPQogICAgICAgICdQxZnDrWtsYWQgcGFyYW1ldHLFryBwcm8ga29tZW50w6HFmSAyIG9iZWNuw71jaCBhdHJpYnV0xa8ga2F0YWxvZ3UnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFyYW1ldGVycyBmb3IgdGhlIGV4YW1wbGUgcGVybWlzc2lvbiBncm91cHMgb2YgdGhlIGdlbmVyYWwgY2F0YWxvZyBhdHRyaWJ1dGVzLid9ID0KICAgICAgICAnUGFyYW1ldHJ5IHNrdXBpbnkgcHJvIHDFmcOta2xhZCBvcHLDoXZuxJtuw60gb2JlY27DvWNoIGF0cmlidXTFryBrYXRhbG9ndSc7CgoKICAgIHB1c2ggQHsgJFNlbGYtPntKYXZhU2NyaXB0U3RyaW5nc30gLy8gW10gfSwgKAogICAgKTsKCn0KCjE7Cg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0zLjAudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6TGFuZ3VhZ2U6OmRhX0dlbmVyYWxDYXRhbG9nOwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwp1c2UgdXRmODsKCnN1YiBEYXRhIHsKICAgIG15ICRTZWxmID0gc2hpZnQ7CgogICAgIyBUZW1wbGF0ZTogQUFBR2VuZXJhbENhdGFsb2cKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Z1bmN0aW9uYWxpdHknfSA9ICdGdW5rdGlvbmFsaXRldCc7CgogICAgIyBUZW1wbGF0ZTogQWRtaW5HZW5lcmFsQ2F0YWxvZwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnR2VuZXJhbCBDYXRhbG9nIE1hbmFnZW1lbnQnfSA9ICdHZW5lcmFsIEthdGFsb2cgTWFuYWdlbWVudCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJdGVtcyBpbiBDbGFzcyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFZGl0IEl0ZW0nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIENsYXNzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBJdGVtJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBDYXRhbG9nIEl0ZW0nfSA9ICdUaWxmw7hqIGthdGFsb2cgcG9zdCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgQ2F0YWxvZyBDbGFzcyd9ID0gJ1RpbGbDuGogS2F0YWxvZyBrbGFzc2UnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2F0YWxvZyBDbGFzcyd9ID0gJ0thdGFsb2cgS2xhc3NlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VkaXQgQ2F0YWxvZyBJdGVtJ30gPSAnUmVkaWdlciBlbmhlZCBpIGthdGFsb2dldCc7CgogICAgIyBTeXNDb25maWcKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbW1lbnQgMid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDcmVhdGUgYW5kIG1hbmFnZSB0aGUgR2VuZXJhbCBDYXRhbG9nLid9ID0gJ09wcmV0IG9nIGjDpW5kdGVyIHN0YW5kYXJkIGthdGFsb2dldCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmUgdGhlIGdlbmVyYWwgY2F0YWxvZyBjb21tZW50IDIuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZSB0aGUgZ3JvdXAgd2l0aCBwZXJtaXNzaW9ucy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgVVJMIEpTIENvbG9yIFBpY2tlciBwYXRoLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgQWRtaW5HZW5lcmFsQ2F0YWxvZyBjb25maWd1cmF0aW9uIGluIHRoZSBhZG1pbiBhcmVhLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0dlbmVyYWwgQ2F0YWxvZyd9ID0gJ0dlbmVyYWwgS2F0YWxvZyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJhbWV0ZXJzIGZvciB0aGUgZXhhbXBsZSBjb21tZW50IDIgb2YgdGhlIGdlbmVyYWwgY2F0YWxvZyBhdHRyaWJ1dGVzLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcmFtZXRlcnMgZm9yIHRoZSBleGFtcGxlIHBlcm1pc3Npb24gZ3JvdXBzIG9mIHRoZSBnZW5lcmFsIGNhdGFsb2cgYXR0cmlidXRlcy4nfSA9CiAgICAgICAgJyc7CgoKICAgIHB1c2ggQHsgJFNlbGYtPntKYXZhU2NyaXB0U3RyaW5nc30gLy8gW10gfSwgKAogICAgKTsKCn0KCjE7Cg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0zLjAudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6TGFuZ3VhZ2U6OmRlX0dlbmVyYWxDYXRhbG9nOwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwp1c2UgdXRmODsKCnN1YiBEYXRhIHsKICAgIG15ICRTZWxmID0gc2hpZnQ7CgogICAgIyBUZW1wbGF0ZTogQUFBR2VuZXJhbENhdGFsb2cKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Z1bmN0aW9uYWxpdHknfSA9ICdGdW5rdGlvbmFsaXTDpHQnOwoKICAgICMgVGVtcGxhdGU6IEFkbWluR2VuZXJhbENhdGFsb2cKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0dlbmVyYWwgQ2F0YWxvZyBNYW5hZ2VtZW50J30gPSAnQWxsZ2VtZWluZSBLYXRhbG9ndmVyd2FsdHVuZyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJdGVtcyBpbiBDbGFzcyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFZGl0IEl0ZW0nfSA9ICfDhG5kZXJlIGRhcyBJdGVtJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBDbGFzcyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgSXRlbSd9ID0gJ0bDvGdlIEl0ZW0gaGluenUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIENhdGFsb2cgSXRlbSd9ID0gJ0thdGFsb2dhcnRpa2VsIGhpbnp1ZsO8Z2VuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBDYXRhbG9nIENsYXNzJ30gPSAnS2F0YWxvZ2tsYXNzZSBoaW56dWbDvGdlbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDYXRhbG9nIENsYXNzJ30gPSAnS2F0YWxvZ2tsYXNzZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFZGl0IENhdGFsb2cgSXRlbSd9ID0gJ0thdGFsb2dhcnRpa2VsIGJlYXJiZWl0ZW4nOwoKICAgICMgU3lzQ29uZmlnCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb21tZW50IDInfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3JlYXRlIGFuZCBtYW5hZ2UgdGhlIEdlbmVyYWwgQ2F0YWxvZy4nfSA9ICdBbGxnZW1laW5lbiBLYXRhbG9nIGVyc3RlbGxlbiB1bmQgdmVyd2FsdGVuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmUgdGhlIGdlbmVyYWwgY2F0YWxvZyBjb21tZW50IDIuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZSB0aGUgZ3JvdXAgd2l0aCBwZXJtaXNzaW9ucy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgVVJMIEpTIENvbG9yIFBpY2tlciBwYXRoLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgQWRtaW5HZW5lcmFsQ2F0YWxvZyBjb25maWd1cmF0aW9uIGluIHRoZSBhZG1pbiBhcmVhLid9ID0KICAgICAgICAnRnJvbnRlbmRtb2R1bC1SZWdpc3RyYXRpb24gZGVyIEFkbWluR2VuZXJhbENhdGFsb2cgS29uZmlndXJhdGlvbiBpbSBBZG1pbi1CZXJlaWNoLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydHZW5lcmFsIENhdGFsb2cnfSA9ICdBbGxnZW1laW5lciBLYXRhbG9nJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcmFtZXRlcnMgZm9yIHRoZSBleGFtcGxlIGNvbW1lbnQgMiBvZiB0aGUgZ2VuZXJhbCBjYXRhbG9nIGF0dHJpYnV0ZXMuJ30gPQogICAgICAgICdQYXJhbWV0ZXIgZsO8ciBkZW4gQmVpc3BpZWwtS29tbWVudGFyIDIgZGVyIEdlbmVyYWwtS2F0YWxvZy1BdHRyaWJ1dGUuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcmFtZXRlcnMgZm9yIHRoZSBleGFtcGxlIHBlcm1pc3Npb24gZ3JvdXBzIG9mIHRoZSBnZW5lcmFsIGNhdGFsb2cgYXR0cmlidXRlcy4nfSA9CiAgICAgICAgJ1BhcmFtZXRlciBmw7xyIGRpZSB6dWdyaWZmc2JlcmVjaHRpZ3RlIEdydXBwZSBkZXIgR2VuZXJhbC1LYXRhbG9nLUF0dHJpYnV0ZS4nOwoKCiAgICBwdXNoIEB7ICRTZWxmLT57SmF2YVNjcmlwdFN0cmluZ3N9IC8vIFtdIH0sICgKICAgICk7Cgp9CgoxOwo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0zLjAudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6TGFuZ3VhZ2U6OmVzX0dlbmVyYWxDYXRhbG9nOwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwp1c2UgdXRmODsKCnN1YiBEYXRhIHsKICAgIG15ICRTZWxmID0gc2hpZnQ7CgogICAgIyBUZW1wbGF0ZTogQUFBR2VuZXJhbENhdGFsb2cKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Z1bmN0aW9uYWxpdHknfSA9ICdGdW5jaW9uYWxpZGFkJzsKCiAgICAjIFRlbXBsYXRlOiBBZG1pbkdlbmVyYWxDYXRhbG9nCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydHZW5lcmFsIENhdGFsb2cgTWFuYWdlbWVudCd9ID0gJ0dlc3Rpw7NuIGRlbCBDYXTDoWxvZ28gR2VuZXJhbCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJdGVtcyBpbiBDbGFzcyd9ID0gJ0l0ZW1zIGVuIENsYXNlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VkaXQgSXRlbSd9ID0gJ0VkaXRhciBlbGVtZW50byc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgQ2xhc3MnfSA9ICdBw7FhZGlyIENsYXNlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBJdGVtJ30gPSAnQcOxYWRpciBlbGVtZW50byc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgQ2F0YWxvZyBJdGVtJ30gPSAnQcOxYWRpciBFbGVtZW50byBhbCBDYXTDoWxvZ28nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIENhdGFsb2cgQ2xhc3MnfSA9ICdBw7FhZGlyIENsYXNlIGFsIENhdMOhbG9nbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDYXRhbG9nIENsYXNzJ30gPSAnQ2xhc2UgZGUgQ2F0w6Fsb2dvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VkaXQgQ2F0YWxvZyBJdGVtJ30gPSAnRWRpdGFyIEVsZW1lbnRvIGRlbCBDYXTDoWxvZ28nOwoKICAgICMgU3lzQ29uZmlnCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb21tZW50IDInfSA9ICdDb21lbnRhcmlvIDInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3JlYXRlIGFuZCBtYW5hZ2UgdGhlIEdlbmVyYWwgQ2F0YWxvZy4nfSA9ICdDcmVhIHkgZ2VzdGlvbmEgZWwgQ2F0w6Fsb2dvIEdlbmVyYWwnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lIHRoZSBnZW5lcmFsIGNhdGFsb2cgY29tbWVudCAyLid9ID0gJ0RlZmluaXIgZWwgY29tZW50YXJpbyAyIGRlbCBjYXTDoWxvZ28gZ2VuZXJhbC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lIHRoZSBncm91cCB3aXRoIHBlcm1pc3Npb25zLid9ID0gJ0RlZmluaXIgZWwgZ3J1cG8gY29uIHBlcm1pc29zLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBVUkwgSlMgQ29sb3IgUGlja2VyIHBhdGguJ30gPSAnRGVmaW5lIGxhIHJ1dGEgVVJMIEpTIGRlbCBzZWxlY3RvciBkZSBjb2xvcic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgQWRtaW5HZW5lcmFsQ2F0YWxvZyBjb25maWd1cmF0aW9uIGluIHRoZSBhZG1pbiBhcmVhLid9ID0KICAgICAgICAnRWwgRnJvbnRlbmQgZGVsIHJlZ2lzdHJvIGRlbCBtw7NkdWxvIHBhcmEgbGEgY29uZmlndXJhY2nDs24gZGVsIEFkbWluR2VuZXJhbENhdGFsb2cgZW4gZWwgw6FyZWEgYWRtaW4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnR2VuZXJhbCBDYXRhbG9nJ30gPSAnQ2F0w6Fsb2dvIEdlbmVyYWwnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFyYW1ldGVycyBmb3IgdGhlIGV4YW1wbGUgY29tbWVudCAyIG9mIHRoZSBnZW5lcmFsIGNhdGFsb2cgYXR0cmlidXRlcy4nfSA9CiAgICAgICAgJ1BhcsOhbWV0cm9zIHBhcmEgZWwgZWplbXBsbyBjb21lbnRhcmlvIDIgZGUgbG9zIGF0cmlidXRvcyBkZWwgY2F0w6Fsb2dvIGdlbmVyYWwuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcmFtZXRlcnMgZm9yIHRoZSBleGFtcGxlIHBlcm1pc3Npb24gZ3JvdXBzIG9mIHRoZSBnZW5lcmFsIGNhdGFsb2cgYXR0cmlidXRlcy4nfSA9CiAgICAgICAgJ1BhcsOhbWV0cm9zIHBhcmEgbG9zIHBlcm1pc29zIGRlIGVqZW1wbG8gZGUgbG9zIGF0cmlidXRvcyBkZWwgY2F0w6Fsb2dvIGdlbmVyYWwuJzsKCgogICAgcHVzaCBAeyAkU2VsZi0+e0phdmFTY3JpcHRTdHJpbmdzfSAvLyBbXSB9LCAoCiAgICApOwoKfQoKMTsK
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0zLjAudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6TGFuZ3VhZ2U6OmVzX01YX0dlbmVyYWxDYXRhbG9nOwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwp1c2UgdXRmODsKCnN1YiBEYXRhIHsKICAgIG15ICRTZWxmID0gc2hpZnQ7CgogICAgIyBUZW1wbGF0ZTogQUFBR2VuZXJhbENhdGFsb2cKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Z1bmN0aW9uYWxpdHknfSA9ICdGdW5jaW9uYWxpZGFkJzsKCiAgICAjIFRlbXBsYXRlOiBBZG1pbkdlbmVyYWxDYXRhbG9nCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydHZW5lcmFsIENhdGFsb2cgTWFuYWdlbWVudCd9ID0gJ0FkbWluaXN0cmFjacOzbiBkZWwgQ2F0w6Fsb2dvIEdlbmVyYWwnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSXRlbXMgaW4gQ2xhc3MnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRWRpdCBJdGVtJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBDbGFzcyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgSXRlbSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgQ2F0YWxvZyBJdGVtJ30gPSAnQcOxYWRpciBhcnTDrWN1bG8gZGVsIGNhdMOhbG9nbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgQ2F0YWxvZyBDbGFzcyd9ID0gJ0HDsWFkaXIgY2xhc2UgZGVsIGNhdMOhbG9nbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDYXRhbG9nIENsYXNzJ30gPSAnQ2F0w6Fsb2dvIGRlIGNsYXNlcyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFZGl0IENhdGFsb2cgSXRlbSd9ID0gJ0VkaXRhciBhcnTDrWN1bG8gZGVsIGNhdMOhbG9nbyc7CgogICAgIyBTeXNDb25maWcKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbW1lbnQgMid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDcmVhdGUgYW5kIG1hbmFnZSB0aGUgR2VuZXJhbCBDYXRhbG9nLid9ID0gJ0NyZWFyIHkgYWRtaW5pc3RyYXIgZWwgQ2F0w6Fsb2dvIEdlbmVyYWwnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lIHRoZSBnZW5lcmFsIGNhdGFsb2cgY29tbWVudCAyLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmUgdGhlIGdyb3VwIHdpdGggcGVybWlzc2lvbnMuJ30gPSAnRGVmaW5lIGVsIGdydXBvIGNvbiBwZXJtaXNvcy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgVVJMIEpTIENvbG9yIFBpY2tlciBwYXRoLid9ID0gJ0RlZmluZSBsYSBVUkwgcGFyYSBlbCBTZWxlY3RvciBkZSBDb2xvciBKUy4gJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZG1pbkdlbmVyYWxDYXRhbG9nIGNvbmZpZ3VyYXRpb24gaW4gdGhlIGFkbWluIGFyZWEuJ30gPQogICAgICAgICdSZWdpc3RybyBkZWwgbcOzZHVsbyBkZSBGcm9udGVuZCBwYXJhIGxhIGFkbWluaXN0cmFjacOzbiBkZWwgY2F0w6Fsb2dvIGdlbmVyYWwgZW4gZWwgw6FyZWEgZGUgYWRtaW5pc3RyYWNpw7NuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0dlbmVyYWwgQ2F0YWxvZyd9ID0gJ0NhdMOhbG9nbyBHZW5lcmFsJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcmFtZXRlcnMgZm9yIHRoZSBleGFtcGxlIGNvbW1lbnQgMiBvZiB0aGUgZ2VuZXJhbCBjYXRhbG9nIGF0dHJpYnV0ZXMuJ30gPQogICAgICAgICdQYXLDoW1ldHJvcyBwYXJhIGVsIGNvbWVudGFyaW8gZGUgZWplbXBsbyAyIGRlbCBjYXTDoWxvZ28gZ2VuZXJhbCBkZSBhdHJpYnV0b3MnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFyYW1ldGVycyBmb3IgdGhlIGV4YW1wbGUgcGVybWlzc2lvbiBncm91cHMgb2YgdGhlIGdlbmVyYWwgY2F0YWxvZyBhdHRyaWJ1dGVzLid9ID0KICAgICAgICAnUGFyw6FtZXRyb3MgcGFyYSBlbCBlamVtcGxvIGRlIHBlcm1pc29zIGRlIGdydXBvIGRlbCBjYXTDoWxvZ28gZ2VuZXJhbCBkZSBhdHJpYnV0b3MnOwoKCiAgICBwdXNoIEB7ICRTZWxmLT57SmF2YVNjcmlwdFN0cmluZ3N9IC8vIFtdIH0sICgKICAgICk7Cgp9CgoxOwo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0zLjAudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6TGFuZ3VhZ2U6OmZhX0dlbmVyYWxDYXRhbG9nOwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwp1c2UgdXRmODsKCnN1YiBEYXRhIHsKICAgIG15ICRTZWxmID0gc2hpZnQ7CgogICAgIyBUZW1wbGF0ZTogQUFBR2VuZXJhbENhdGFsb2cKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Z1bmN0aW9uYWxpdHknfSA9ICfaqdin2LHaqdix2K/bjCc7CgogICAgIyBUZW1wbGF0ZTogQWRtaW5HZW5lcmFsQ2F0YWxvZwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnR2VuZXJhbCBDYXRhbG9nIE1hbmFnZW1lbnQnfSA9ICfZhdiv24zYsduM2Kog2YHZh9ix2LPYqiDYudmF2YjZhduMJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0l0ZW1zIGluIENsYXNzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VkaXQgSXRlbSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgQ2xhc3MnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIEl0ZW0nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIENhdGFsb2cgSXRlbSd9ID0gJ9in2LbYp9mB2Ycg2qnYsdiv2YYg24zaqSDZgtmE2YUg2YHZh9ix2LPYqic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgQ2F0YWxvZyBDbGFzcyd9ID0gJ9in2LbYp9mB2Ycg2qnYsdiv2YYg2qnZhNin2LMg2YHZh9ix2LPYqtuMJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NhdGFsb2cgQ2xhc3MnfSA9ICfZgdmH2LHYs9iqINqp2YTYp9iz24wnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRWRpdCBDYXRhbG9nIEl0ZW0nfSA9ICcnOwoKICAgICMgU3lzQ29uZmlnCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb21tZW50IDInfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3JlYXRlIGFuZCBtYW5hZ2UgdGhlIEdlbmVyYWwgQ2F0YWxvZy4nfSA9ICfYs9in2K7YqiDZiCDZhdiv24zYsduM2Kog2YHZh9ix2LPYqiDYudmF2YjZhduMJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZSB0aGUgZ2VuZXJhbCBjYXRhbG9nIGNvbW1lbnQgMi4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lIHRoZSBncm91cCB3aXRoIHBlcm1pc3Npb25zLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBVUkwgSlMgQ29sb3IgUGlja2VyIHBhdGguJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZG1pbkdlbmVyYWxDYXRhbG9nIGNvbmZpZ3VyYXRpb24gaW4gdGhlIGFkbWluIGFyZWEuJ30gPQogICAgICAgICfYq9io2Kog2YXYp9qY2YjZhCDYqNix2KfbjCDZvtuM2qnYsdio2YbYr9uMINmB2YfYsdiz2Kog2LnZhdmI2YXbjCDYr9ixINio2K7YtCDZhdiv24zYsduM2KonOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnR2VuZXJhbCBDYXRhbG9nJ30gPSAn2YHZh9ix2LPYqiDYudmF2YjZhduMJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcmFtZXRlcnMgZm9yIHRoZSBleGFtcGxlIGNvbW1lbnQgMiBvZiB0aGUgZ2VuZXJhbCBjYXRhbG9nIGF0dHJpYnV0ZXMuJ30gPQogICAgICAgICfZvtin2LHYp9mF2KrYsdmH2KfbjNuMINio2LHYp9uMINiq2YjYttuM2K0g2YbZhdmI2YbZhyDbsiDZhdix2KjZiNi3INio2Ycg2YjbjNqY2q/bjOKAjNmH2KfbjCDZgdmH2LHYs9iqINi52YXZiNmF24wnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFyYW1ldGVycyBmb3IgdGhlIGV4YW1wbGUgcGVybWlzc2lvbiBncm91cHMgb2YgdGhlIGdlbmVyYWwgY2F0YWxvZyBhdHRyaWJ1dGVzLid9ID0KICAgICAgICAn2b7Yp9ix2KfZhdiq2LHZh9in24zbjCDYqNix2KfbjCDar9ix2YjZh+KAjNmH2KfbjCDYr9iz2KrYsdiz24wg2YbZhdmI2YbZhyDZhdix2KjZiNi3INio2Ycg2YjbjNqY2q/bjOKAjNmH2KfbjCDZgdmH2LHYs9iqINi52YXZiNmF24wnOwoKCiAgICBwdXNoIEB7ICRTZWxmLT57SmF2YVNjcmlwdFN0cmluZ3N9IC8vIFtdIH0sICgKICAgICk7Cgp9CgoxOwo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0zLjAudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6TGFuZ3VhZ2U6OmZyX0dlbmVyYWxDYXRhbG9nOwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwp1c2UgdXRmODsKCnN1YiBEYXRhIHsKICAgIG15ICRTZWxmID0gc2hpZnQ7CgogICAgIyBUZW1wbGF0ZTogQUFBR2VuZXJhbENhdGFsb2cKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Z1bmN0aW9uYWxpdHknfSA9ICdGb25jdGlvbm5hbGl0w6knOwoKICAgICMgVGVtcGxhdGU6IEFkbWluR2VuZXJhbENhdGFsb2cKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0dlbmVyYWwgQ2F0YWxvZyBNYW5hZ2VtZW50J30gPSAnR2VzdGlvbiBkdSBjYXRhbG9ndWUgZ8OpbsOpcmFsJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0l0ZW1zIGluIENsYXNzJ30gPSAnw4lsw6ltZW50cyBkYW5zIGxhIGNsYXNzZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFZGl0IEl0ZW0nfSA9ICfDiWRpdGVyIHVuIMOpbMOpbWVudCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgQ2xhc3MnfSA9ICdBam91dGVyIHVuZSBjbGFzc2UnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIEl0ZW0nfSA9ICdBam91dGVyIHVuIMOpbMOpbWVudCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgQ2F0YWxvZyBJdGVtJ30gPSAnQWpvdXRlciB1biDDqWzDqW1lbnQgYXUgY2F0YWxvZ3VlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBDYXRhbG9nIENsYXNzJ30gPSAnQWpvdXRlciB1bmUgY2xhc3NlIGF1IGNhdGFsb2d1ZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDYXRhbG9nIENsYXNzJ30gPSAnQ2xhc3NlIGRlIGNhdGFsb2d1ZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFZGl0IENhdGFsb2cgSXRlbSd9ID0gJ8OJZGl0ZXIgdW4gw6lsw6ltZW50IGR1IGNhdGFsb2d1ZSc7CgogICAgIyBTeXNDb25maWcKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbW1lbnQgMid9ID0gJ0NvbW1lbnRhaXJlIDInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3JlYXRlIGFuZCBtYW5hZ2UgdGhlIEdlbmVyYWwgQ2F0YWxvZy4nfSA9ICdDcsOpZXIgZXQgZ8OpcmVyIGxlIGNhdGFsb2d1ZSBnw6luw6lyYWwuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZSB0aGUgZ2VuZXJhbCBjYXRhbG9nIGNvbW1lbnQgMi4nfSA9ICdEw6lmaW5pciBsZSBjb21tZW50YWlyZSAyIGR1IGNhdGFsb2d1ZSBnw6luw6lyYWwuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZSB0aGUgZ3JvdXAgd2l0aCBwZXJtaXNzaW9ucy4nfSA9ICdEw6lmaW5pciBsZSBncm91cGUgZGUgcGVybWlzc2lvbnMuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIFVSTCBKUyBDb2xvciBQaWNrZXIgcGF0aC4nfSA9ICdEw6lmaW5pdCBsXCdVUkwgZHUgY2hlbWluICJKUyBDb2xvciBQaWNrZXIiLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgQWRtaW5HZW5lcmFsQ2F0YWxvZyBjb25maWd1cmF0aW9uIGluIHRoZSBhZG1pbiBhcmVhLid9ID0KICAgICAgICAnSW50ZXJmYWNlIGRcJ2VucmVnaXN0cmVtZW50IGRlIG1vZHVsZSBwb3VyIGxhIGNvbmZpZ3VyYXRpb24gZHUgY2F0YWxvZ3VlIGfDqW7DqXJhbCBkYW5zIGxhIHpvbmUgYWRtaW5pc3RyYXRldXInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnR2VuZXJhbCBDYXRhbG9nJ30gPSAnQ2F0YWxvZ3VlIGfDqW7DqXJhbCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJhbWV0ZXJzIGZvciB0aGUgZXhhbXBsZSBjb21tZW50IDIgb2YgdGhlIGdlbmVyYWwgY2F0YWxvZyBhdHRyaWJ1dGVzLid9ID0KICAgICAgICAnUGFyYW3DqHRyZXMgcG91ciBsXCdleGVtcGxlIGR1IGNvbW1lbnRhaXJlIDIgZGVzIGF0dHJpYnV0cyBkdSBjYXRhbG9ndWUgZ8OpbsOpcmFsJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcmFtZXRlcnMgZm9yIHRoZSBleGFtcGxlIHBlcm1pc3Npb24gZ3JvdXBzIG9mIHRoZSBnZW5lcmFsIGNhdGFsb2cgYXR0cmlidXRlcy4nfSA9CiAgICAgICAgJ1BhcmFtw6h0cmVzIHBvdXIgbFwnZXhlbXBsZSBkZXMgcGVybWlzc2lvbnMgZGUgZ3JvdXBlIGRlcyBhdHRyaWJ1dHMgZHUgY2F0YWxvZ3VlIGfDqW7DqXJhbCc7CgoKICAgIHB1c2ggQHsgJFNlbGYtPntKYXZhU2NyaXB0U3RyaW5nc30gLy8gW10gfSwgKAogICAgKTsKCn0KCjE7Cg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0zLjAudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6TGFuZ3VhZ2U6OmdsX0dlbmVyYWxDYXRhbG9nOwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwp1c2UgdXRmODsKCnN1YiBEYXRhIHsKICAgIG15ICRTZWxmID0gc2hpZnQ7CgogICAgIyBUZW1wbGF0ZTogQUFBR2VuZXJhbENhdGFsb2cKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Z1bmN0aW9uYWxpdHknfSA9ICdGdW5jaW9uYWxpZGFkZSc7CgogICAgIyBUZW1wbGF0ZTogQWRtaW5HZW5lcmFsQ2F0YWxvZwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnR2VuZXJhbCBDYXRhbG9nIE1hbmFnZW1lbnQnfSA9ICdYZXN0acOzbiBkbyBDYXTDoWxvZ28gWGVyYWwnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSXRlbXMgaW4gQ2xhc3MnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRWRpdCBJdGVtJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBDbGFzcyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgSXRlbSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgQ2F0YWxvZyBJdGVtJ30gPSAnRW5nYWRpciB1biBlbGVtZW50byBhbyBjYXTDoWxvZ28nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIENhdGFsb2cgQ2xhc3MnfSA9ICdFbmdhZGlyIHVuaGEgY2xhc2UgYW8gY2F0w6Fsb2dvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NhdGFsb2cgQ2xhc3MnfSA9ICdDbGFzZSBkbyBjYXTDoWxvZ28nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRWRpdCBDYXRhbG9nIEl0ZW0nfSA9ICcnOwoKICAgICMgU3lzQ29uZmlnCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb21tZW50IDInfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3JlYXRlIGFuZCBtYW5hZ2UgdGhlIEdlbmVyYWwgQ2F0YWxvZy4nfSA9ICdDcmVhciBlIHhlc3Rpb25hciBvIENhdMOhbG9nbyBYZXJhbCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmUgdGhlIGdlbmVyYWwgY2F0YWxvZyBjb21tZW50IDIuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZSB0aGUgZ3JvdXAgd2l0aCBwZXJtaXNzaW9ucy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgVVJMIEpTIENvbG9yIFBpY2tlciBwYXRoLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgQWRtaW5HZW5lcmFsQ2F0YWxvZyBjb25maWd1cmF0aW9uIGluIHRoZSBhZG1pbiBhcmVhLid9ID0KICAgICAgICAnUmV4aXN0cm8gbm8gbcOzZHVsbyBkZSBpbnRlcmZhY2UgcGFyYSBhIGNvbmZpZ3VyYWNpw7NuIGRlIEFkbWluR2VuZXJhbENhdGFsb2cgbmEgw6FyZWEgYWRtaW5pc3RyYXRpdmEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0dlbmVyYWwgQ2F0YWxvZyd9ID0gJ0NhdMOhbG9nbyBYZXJhbCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJhbWV0ZXJzIGZvciB0aGUgZXhhbXBsZSBjb21tZW50IDIgb2YgdGhlIGdlbmVyYWwgY2F0YWxvZyBhdHRyaWJ1dGVzLid9ID0KICAgICAgICAnUGFyw6FtZXRyb3MgcGFyYSBvIGNvbWVudGFyaW8gZGUgZXhlbXBsbyAyIGRvcyBhdHJpYnV0b3MgZG8gY2F0w6Fsb2dvIHhlcmFsLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJhbWV0ZXJzIGZvciB0aGUgZXhhbXBsZSBwZXJtaXNzaW9uIGdyb3VwcyBvZiB0aGUgZ2VuZXJhbCBjYXRhbG9nIGF0dHJpYnV0ZXMuJ30gPQogICAgICAgICdQYXLDoW1ldHJvcyBwYXJhIG9zIGdydXBvcyBkZSBwZXJtaXNvcyBkZSBleGVtcGxvIGRvcyBhdHJpYnV0b3MgZG8gY2F0w6Fsb2dvIHhlcmFsLic7CgoKICAgIHB1c2ggQHsgJFNlbGYtPntKYXZhU2NyaXB0U3RyaW5nc30gLy8gW10gfSwgKAogICAgKTsKCn0KCjE7Cg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0zLjAudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6TGFuZ3VhZ2U6OmhyX0dlbmVyYWxDYXRhbG9nOwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwp1c2UgdXRmODsKCnN1YiBEYXRhIHsKICAgIG15ICRTZWxmID0gc2hpZnQ7CgogICAgIyBUZW1wbGF0ZTogQUFBR2VuZXJhbENhdGFsb2cKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Z1bmN0aW9uYWxpdHknfSA9ICdGdW5jaW9uYWxub3N0JzsKCiAgICAjIFRlbXBsYXRlOiBBZG1pbkdlbmVyYWxDYXRhbG9nCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydHZW5lcmFsIENhdGFsb2cgTWFuYWdlbWVudCd9ID0gJ09wxIdlIHBvc3RhdmtlIEthdGFsb2dhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0l0ZW1zIGluIENsYXNzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VkaXQgSXRlbSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgQ2xhc3MnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIEl0ZW0nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIENhdGFsb2cgSXRlbSd9ID0gJ0RvZGFqIHN0YXZrdSB1IEthdGFsb2d1JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBDYXRhbG9nIENsYXNzJ30gPSAnRG9kYWoga2xhc3UgdSBLYXRhbG9ndSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDYXRhbG9nIENsYXNzJ30gPSAnS2F0YWxvxaFrYSBrbGFzYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFZGl0IENhdGFsb2cgSXRlbSd9ID0gJyc7CgogICAgIyBTeXNDb25maWcKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbW1lbnQgMid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDcmVhdGUgYW5kIG1hbmFnZSB0aGUgR2VuZXJhbCBDYXRhbG9nLid9ID0gJ05hcHJhdmkgaSBwb2Rlc2kgT3DEh2kga2F0YWxvZy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lIHRoZSBnZW5lcmFsIGNhdGFsb2cgY29tbWVudCAyLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmUgdGhlIGdyb3VwIHdpdGggcGVybWlzc2lvbnMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIFVSTCBKUyBDb2xvciBQaWNrZXIgcGF0aC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFkbWluR2VuZXJhbENhdGFsb2cgY29uZmlndXJhdGlvbiBpbiB0aGUgYWRtaW4gYXJlYS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydHZW5lcmFsIENhdGFsb2cnfSA9ICdPcMSHaSBrYXRhbG9nJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcmFtZXRlcnMgZm9yIHRoZSBleGFtcGxlIGNvbW1lbnQgMiBvZiB0aGUgZ2VuZXJhbCBjYXRhbG9nIGF0dHJpYnV0ZXMuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFyYW1ldGVycyBmb3IgdGhlIGV4YW1wbGUgcGVybWlzc2lvbiBncm91cHMgb2YgdGhlIGdlbmVyYWwgY2F0YWxvZyBhdHRyaWJ1dGVzLid9ID0KICAgICAgICAnJzsKCgogICAgcHVzaCBAeyAkU2VsZi0+e0phdmFTY3JpcHRTdHJpbmdzfSAvLyBbXSB9LCAoCiAgICApOwoKfQoKMTsK
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0zLjAudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6TGFuZ3VhZ2U6Omh1X0dlbmVyYWxDYXRhbG9nOwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwp1c2UgdXRmODsKCnN1YiBEYXRhIHsKICAgIG15ICRTZWxmID0gc2hpZnQ7CgogICAgIyBUZW1wbGF0ZTogQUFBR2VuZXJhbENhdGFsb2cKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Z1bmN0aW9uYWxpdHknfSA9ICdGdW5rY2lvbmFsaXTDoXMnOwoKICAgICMgVGVtcGxhdGU6IEFkbWluR2VuZXJhbENhdGFsb2cKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0dlbmVyYWwgQ2F0YWxvZyBNYW5hZ2VtZW50J30gPSAnw4FsdGFsw6Fub3Mga2F0YWzDs2d1cyBrZXplbMOpcyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJdGVtcyBpbiBDbGFzcyd9ID0gJ0VsZW1layBheiBvc3p0w6FseWJhbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFZGl0IEl0ZW0nfSA9ICdFbGVtIHN6ZXJrZXN6dMOpc2UnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIENsYXNzJ30gPSAnT3N6dMOhbHkgaG96esOhYWTDoXNhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBJdGVtJ30gPSAnRWxlbSBob3p6w6FhZMOhc2EnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIENhdGFsb2cgSXRlbSd9ID0gJ0thdGFsw7NndXNlbGVtIGhvenrDoWFkw6FzYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgQ2F0YWxvZyBDbGFzcyd9ID0gJ0thdGFsw7NndXNvc3p0w6FseSBob3p6w6FhZMOhc2EnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2F0YWxvZyBDbGFzcyd9ID0gJ0thdGFsw7NndXNvc3p0w6FseSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFZGl0IENhdGFsb2cgSXRlbSd9ID0gJ0thdGFsw7NndXNlbGVtIHN6ZXJrZXN6dMOpc2UnOwoKICAgICMgU3lzQ29uZmlnCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb21tZW50IDInfSA9ICcyLiBtZWdqZWd5esOpcyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDcmVhdGUgYW5kIG1hbmFnZSB0aGUgR2VuZXJhbCBDYXRhbG9nLid9ID0gJ0F6IMOhbHRhbMOhbm9zIGthdGFsw7NndXMgbMOpdHJlaG96w6FzYSDDqXMga2V6ZWzDqXNlLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmUgdGhlIGdlbmVyYWwgY2F0YWxvZyBjb21tZW50IDIuJ30gPSAnTWVnaGF0w6Fyb3p6YSBheiDDoWx0YWzDoW5vcyBrYXRhbMOzZ3VzIDIuIG1lZ2plZ3l6w6lzw6l0Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmUgdGhlIGdyb3VwIHdpdGggcGVybWlzc2lvbnMuJ30gPSAnQSBqb2dvc3VsdHPDoWdva2thbCByZW5kZWxrZXrFkSBjc29wb3J0IG1lZ2hhdMOhcm96w6FzYS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgVVJMIEpTIENvbG9yIFBpY2tlciBwYXRoLid9ID0gJ01lZ2hhdMOhcm96emEgYSBKUyBzesOtbnbDoWxhc3p0w7Mgw7p0dm9uYWzDoW5hayBVUkwtw6l0Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgQWRtaW5HZW5lcmFsQ2F0YWxvZyBjb25maWd1cmF0aW9uIGluIHRoZSBhZG1pbiBhcmVhLid9ID0KICAgICAgICAnRWzFkXTDqXRwcm9ncmFtIG1vZHVsIHJlZ2lzenRyw6FjacOzIGF6IGFkbWluaXN6dHLDoWNpw7NzIHRlcsO8bGV0ZW4gbMOpdsWRIMOhbHRhbMOhbm9zIGthdGFsw7NndXMgYmXDoWxsw610w6FzaG96Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydHZW5lcmFsIENhdGFsb2cnfSA9ICfDgWx0YWzDoW5vcyBrYXRhbMOzZ3VzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcmFtZXRlcnMgZm9yIHRoZSBleGFtcGxlIGNvbW1lbnQgMiBvZiB0aGUgZ2VuZXJhbCBjYXRhbG9nIGF0dHJpYnV0ZXMuJ30gPQogICAgICAgICdQYXJhbcOpdGVyZWsgYXogw6FsdGFsw6Fub3Mga2F0YWzDs2d1cyBhdHRyaWLDunR1bWFpbmFrIDIuIHDDqWxkYSBtZWdqZWd5esOpc2VpaGV6Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJhbWV0ZXJzIGZvciB0aGUgZXhhbXBsZSBwZXJtaXNzaW9uIGdyb3VwcyBvZiB0aGUgZ2VuZXJhbCBjYXRhbG9nIGF0dHJpYnV0ZXMuJ30gPQogICAgICAgICdQYXJhbcOpdGVyZWsgYXogw6FsdGFsw6Fub3Mga2F0YWzDs2d1cyBhdHRyaWLDunR1bWFpbmFrIHDDqWxkYSBqb2dvc3VsdHPDoWcgY3NvcG9ydGphaWhvei4nOwoKCiAgICBwdXNoIEB7ICRTZWxmLT57SmF2YVNjcmlwdFN0cmluZ3N9IC8vIFtdIH0sICgKICAgICk7Cgp9CgoxOwo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0zLjAudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6TGFuZ3VhZ2U6OmlkX0dlbmVyYWxDYXRhbG9nOwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwp1c2UgdXRmODsKCnN1YiBEYXRhIHsKICAgIG15ICRTZWxmID0gc2hpZnQ7CgogICAgIyBUZW1wbGF0ZTogQUFBR2VuZXJhbENhdGFsb2cKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Z1bmN0aW9uYWxpdHknfSA9ICdGdW5nc2lvbmFsaXRhcyc7CgogICAgIyBUZW1wbGF0ZTogQWRtaW5HZW5lcmFsQ2F0YWxvZwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnR2VuZXJhbCBDYXRhbG9nIE1hbmFnZW1lbnQnfSA9ICdNYW5hamVtZW4gS2F0YWxvZyBVbXVtJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0l0ZW1zIGluIENsYXNzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VkaXQgSXRlbSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgQ2xhc3MnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIEl0ZW0nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIENhdGFsb2cgSXRlbSd9ID0gJ1RhbWJhaCBJdGVtIEthdGFsb2cnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIENhdGFsb2cgQ2xhc3MnfSA9ICdUYW1iYWggS2VsYXMgS2F0YWxvZyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDYXRhbG9nIENsYXNzJ30gPSAnS2VsYXMgS2F0YWxvZyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFZGl0IENhdGFsb2cgSXRlbSd9ID0gJyc7CgogICAgIyBTeXNDb25maWcKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbW1lbnQgMid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDcmVhdGUgYW5kIG1hbmFnZSB0aGUgR2VuZXJhbCBDYXRhbG9nLid9ID0gJ0J1YXQgZGFuIGtlbG9sYSBLYXRhbG9nIFVtdW0nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lIHRoZSBnZW5lcmFsIGNhdGFsb2cgY29tbWVudCAyLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmUgdGhlIGdyb3VwIHdpdGggcGVybWlzc2lvbnMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIFVSTCBKUyBDb2xvciBQaWNrZXIgcGF0aC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFkbWluR2VuZXJhbENhdGFsb2cgY29uZmlndXJhdGlvbiBpbiB0aGUgYWRtaW4gYXJlYS4nfSA9CiAgICAgICAgJ1JlZ2lzdHJhc2kgbW9kdWwgZnJvbnRlbmQgdW50dWsgcGVuZ2F0dXJhbiBBZG1pbkthdGFsb2dVbXVtIGRpIGFyZWEgYWRtaW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0dlbmVyYWwgQ2F0YWxvZyd9ID0gJ0thdGFsb2cgVW11bSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJhbWV0ZXJzIGZvciB0aGUgZXhhbXBsZSBjb21tZW50IDIgb2YgdGhlIGdlbmVyYWwgY2F0YWxvZyBhdHRyaWJ1dGVzLid9ID0KICAgICAgICAnUGFyYW1ldGVyIHVudHVrIDIgY29udG9oIGtvbWVudGFyIGRhcmkgYXRyaWJ1dCBrYXRhbG9nIHVtdW0uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcmFtZXRlcnMgZm9yIHRoZSBleGFtcGxlIHBlcm1pc3Npb24gZ3JvdXBzIG9mIHRoZSBnZW5lcmFsIGNhdGFsb2cgYXR0cmlidXRlcy4nfSA9CiAgICAgICAgJ1BhcmFtZXRlciB1bnR1ayBncnVwIGNvbm90aCBwZXJpemluYW4gZGFyaSBhdHJpYnV0IGthdGFsb2cgdW11bS4nOwoKCiAgICBwdXNoIEB7ICRTZWxmLT57SmF2YVNjcmlwdFN0cmluZ3N9IC8vIFtdIH0sICgKICAgICk7Cgp9CgoxOwo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0zLjAudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6TGFuZ3VhZ2U6Oml0X0dlbmVyYWxDYXRhbG9nOwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwp1c2UgdXRmODsKCnN1YiBEYXRhIHsKICAgIG15ICRTZWxmID0gc2hpZnQ7CgogICAgIyBUZW1wbGF0ZTogQUFBR2VuZXJhbENhdGFsb2cKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Z1bmN0aW9uYWxpdHknfSA9ICdGdW56aW9uYWxpdMOgJzsKCiAgICAjIFRlbXBsYXRlOiBBZG1pbkdlbmVyYWxDYXRhbG9nCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydHZW5lcmFsIENhdGFsb2cgTWFuYWdlbWVudCd9ID0gJ0dlc3Rpb25lIGRlbCBDYXRhbG9nbyBHZW5lcmFsZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJdGVtcyBpbiBDbGFzcyd9ID0gJ0VsZW1lbnRpIG5lbGxhIENsYXNzZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFZGl0IEl0ZW0nfSA9ICdNb2RpZmljYSBFbGVtZW50byc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgQ2xhc3MnfSA9ICdBZ2dpdW5naSBDbGFzc2UnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIEl0ZW0nfSA9ICdBZ2dpdW5naSBFbGVtZW50byc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgQ2F0YWxvZyBJdGVtJ30gPSAnQWdnaXVuZ2kgRWxlbWVudG8gYWwgQ2F0YWxvZ28nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIENhdGFsb2cgQ2xhc3MnfSA9ICdBZ2dpdW5naSBDbGFzc2UgYWwgQ2F0YWxvZ28nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2F0YWxvZyBDbGFzcyd9ID0gJ0NsYXNzZSBkaSBDYXRhbG9nbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFZGl0IENhdGFsb2cgSXRlbSd9ID0gJ01vZGlmaWNhIGVsZW1lbnRvIGRpIGNhdGFsb2dvJzsKCiAgICAjIFN5c0NvbmZpZwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29tbWVudCAyJ30gPSAnQ29tbWVudG8gMic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDcmVhdGUgYW5kIG1hbmFnZSB0aGUgR2VuZXJhbCBDYXRhbG9nLid9ID0gJ0NyZWEgZSBnZXN0aXNjaSBpbCBDYXRhbG9nbyBHZW5lcmFsZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmUgdGhlIGdlbmVyYWwgY2F0YWxvZyBjb21tZW50IDIuJ30gPSAnRGVmaW5pc2NpIGlsIGNvbW1lbnRvIDIgZGVsIGNhdGFsb2dvIGdlbmVyYWxlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZSB0aGUgZ3JvdXAgd2l0aCBwZXJtaXNzaW9ucy4nfSA9ICdTcGVjaWZpY2EgaWwgZ3J1cHBvIGNvbiBwZXJtZXNzaS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgVVJMIEpTIENvbG9yIFBpY2tlciBwYXRoLid9ID0gJ1NwZWNpZmljYSBpbCBwZXJjb3JzbyBkZWxsXCdVUkwgZGVsIHNlbGV0dG9yZSBkaSBjb2xvcmkgSlMuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZG1pbkdlbmVyYWxDYXRhbG9nIGNvbmZpZ3VyYXRpb24gaW4gdGhlIGFkbWluIGFyZWEuJ30gPQogICAgICAgICdNb2R1bG8gZGkgcmVnaXN0cmF6aW9uZSBwZXIgbGEgY29uZmlndXJhemlvbmUgZGkgQWRtaW5HZW5lcmFsQ2F0YWxvZyBuZWxsXCdhcmVhIGRpIGFkbWluLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydHZW5lcmFsIENhdGFsb2cnfSA9ICdDYXRhbG9nbyBHZW5lcmFsZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJhbWV0ZXJzIGZvciB0aGUgZXhhbXBsZSBjb21tZW50IDIgb2YgdGhlIGdlbmVyYWwgY2F0YWxvZyBhdHRyaWJ1dGVzLid9ID0KICAgICAgICAnUGFyYW1ldHJpIHBlciBpbCBjb21tZW50byBkaSBlc2VtcGlvIDIgZGVnbGkgYXR0cmlidXRpIGRlbCBjYXRhbG9nbyBnZW5lcmFsZS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFyYW1ldGVycyBmb3IgdGhlIGV4YW1wbGUgcGVybWlzc2lvbiBncm91cHMgb2YgdGhlIGdlbmVyYWwgY2F0YWxvZyBhdHRyaWJ1dGVzLid9ID0KICAgICAgICAnUGFyYW1ldHJpIHBlciBpIGdydXBwaSBkaSBwZXJtZXNzaSBkaSBlc2VtcGlvIGRlZ2xpIGF0dHJpYnV0aSBkZWwgY2F0YWxvZ28gZ2VuZXJhbGUuJzsKCgogICAgcHVzaCBAeyAkU2VsZi0+e0phdmFTY3JpcHRTdHJpbmdzfSAvLyBbXSB9LCAoCiAgICApOwoKfQoKMTsK
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0zLjAudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6TGFuZ3VhZ2U6OmphX0dlbmVyYWxDYXRhbG9nOwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwp1c2UgdXRmODsKCnN1YiBEYXRhIHsKICAgIG15ICRTZWxmID0gc2hpZnQ7CgogICAgIyBUZW1wbGF0ZTogQUFBR2VuZXJhbENhdGFsb2cKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Z1bmN0aW9uYWxpdHknfSA9ICfmqZ/og73mgKcnOwoKICAgICMgVGVtcGxhdGU6IEFkbWluR2VuZXJhbENhdGFsb2cKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0dlbmVyYWwgQ2F0YWxvZyBNYW5hZ2VtZW50J30gPSAn44K444Kn44ON44Op44Or44O744Kr44K/44Ot44Kw566h55CGJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0l0ZW1zIGluIENsYXNzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VkaXQgSXRlbSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgQ2xhc3MnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIEl0ZW0nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIENhdGFsb2cgSXRlbSd9ID0gJ+OCq+OCv+ODreOCsOmgheebruOCkui/veWKoCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgQ2F0YWxvZyBDbGFzcyd9ID0gJ+OCq+OCv+ODreOCsOOCr+ODqeOCueOCkui/veWKoCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDYXRhbG9nIENsYXNzJ30gPSAn44Kr44K/44Ot44Kw44Kv44Op44K5JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VkaXQgQ2F0YWxvZyBJdGVtJ30gPSAn44Kr44K/44Ot44Kw44O744Ki44Kk44OG44Og44KS5L+u5q2jJzsKCiAgICAjIFN5c0NvbmZpZwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29tbWVudCAyJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NyZWF0ZSBhbmQgbWFuYWdlIHRoZSBHZW5lcmFsIENhdGFsb2cuJ30gPSAn44K444Oj44ON44Op44Or44O744Kr44K/44Ot44Kw44Gu5L2c5oiQ44Go566h55CGJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZSB0aGUgZ2VuZXJhbCBjYXRhbG9nIGNvbW1lbnQgMi4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lIHRoZSBncm91cCB3aXRoIHBlcm1pc3Npb25zLid9ID0gJ+aoqemZkOOCkuaMgeOBpOOCsOODq+ODvOODl+OCkuWumue+qeOBl+OBvuOBmeOAgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBVUkwgSlMgQ29sb3IgUGlja2VyIHBhdGguJ30gPSAnVVJMIEpTIOOCq+ODqeODvOODlOODg+OCq+ODvOOBruODkeOCueOCkuWumue+qeOBl+OBvuOBmeOAgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgQWRtaW5HZW5lcmFsQ2F0YWxvZyBjb25maWd1cmF0aW9uIGluIHRoZSBhZG1pbiBhcmVhLid9ID0KICAgICAgICAn566h55CG44Ko44Oq44Ki44Gn44GuQWRtaW5HZW5lcmFsQ2F0YWxvZ+OBruODleODreODs+ODiOOCqOODs+ODieODouOCuOODpeODvOODq+OBrueZu+mMsic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydHZW5lcmFsIENhdGFsb2cnfSA9ICfjgrjjgqfjg43jg6njg6vjg7vjgqvjgr/jg63jgrAnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFyYW1ldGVycyBmb3IgdGhlIGV4YW1wbGUgY29tbWVudCAyIG9mIHRoZSBnZW5lcmFsIGNhdGFsb2cgYXR0cmlidXRlcy4nfSA9CiAgICAgICAgJ+OCuOOCp+ODjeODqeODq+ODu+OCq+OCv+ODreOCsOWxnuaAp+OBruOCs+ODoeODs+ODiOS+iyAy44CA44Gu6Kit5a6a5YCkJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcmFtZXRlcnMgZm9yIHRoZSBleGFtcGxlIHBlcm1pc3Npb24gZ3JvdXBzIG9mIHRoZSBnZW5lcmFsIGNhdGFsb2cgYXR0cmlidXRlcy4nfSA9CiAgICAgICAgJ+OCuOOCp+ODjeODqeODq+ODu+OCq+OCv+ODreOCsOWxnuaAp+OBruaoqemZkOOCsOODq+ODvOODl+OAgOOBruioreWumuWApCc7CgoKICAgIHB1c2ggQHsgJFNlbGYtPntKYXZhU2NyaXB0U3RyaW5nc30gLy8gW10gfSwgKAogICAgKTsKCn0KCjE7Cg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0zLjAudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6TGFuZ3VhZ2U6Om1zX0dlbmVyYWxDYXRhbG9nOwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwp1c2UgdXRmODsKCnN1YiBEYXRhIHsKICAgIG15ICRTZWxmID0gc2hpZnQ7CgogICAgIyBUZW1wbGF0ZTogQUFBR2VuZXJhbENhdGFsb2cKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Z1bmN0aW9uYWxpdHknfSA9ICdGdW5nc2knOwoKICAgICMgVGVtcGxhdGU6IEFkbWluR2VuZXJhbENhdGFsb2cKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0dlbmVyYWwgQ2F0YWxvZyBNYW5hZ2VtZW50J30gPSAnS2F0YWxvZyBQZW5ndXJ1c2FuIEdlbmVyYWwnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSXRlbXMgaW4gQ2xhc3MnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRWRpdCBJdGVtJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBDbGFzcyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgSXRlbSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgQ2F0YWxvZyBJdGVtJ30gPSAnVGFtYmFoYW4gSXRlbSBLYXRhbG9nJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBDYXRhbG9nIENsYXNzJ30gPSAnVGFtYmFoIEtlbGFzIEthdGFsb2cnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2F0YWxvZyBDbGFzcyd9ID0gJ0tlbGFzIEthdGFsb2cnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRWRpdCBDYXRhbG9nIEl0ZW0nfSA9ICcnOwoKICAgICMgU3lzQ29uZmlnCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb21tZW50IDInfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3JlYXRlIGFuZCBtYW5hZ2UgdGhlIEdlbmVyYWwgQ2F0YWxvZy4nfSA9ICdDaXB0YSBkYW4gdXJ1cyBLYXRhbG9nIEdlbmVyYWwuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZSB0aGUgZ2VuZXJhbCBjYXRhbG9nIGNvbW1lbnQgMi4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lIHRoZSBncm91cCB3aXRoIHBlcm1pc3Npb25zLid9ID0gJ1Rha3JpZmthbiBrdW1wdWxhbiB0ZXJzZWJ1dCBkZW5nYW4ga2VpemluYW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIFVSTCBKUyBDb2xvciBQaWNrZXIgcGF0aC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFkbWluR2VuZXJhbENhdGFsb2cgY29uZmlndXJhdGlvbiBpbiB0aGUgYWRtaW4gYXJlYS4nfSA9CiAgICAgICAgJ01vZHVsIHBlbmRhZnRhcmFuIG11a2EgaGFkYXBhbiBiYWdpIGtvbmZpZ3VyYXNpIEthdGFsb2dVbXVtVGFkYmlyIGRhbGFtIHJ1YW5nYW4gcGVudGFkYmlyLiAnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnR2VuZXJhbCBDYXRhbG9nJ30gPSAnS2F0YWxvZyBHZW5lcmFsJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcmFtZXRlcnMgZm9yIHRoZSBleGFtcGxlIGNvbW1lbnQgMiBvZiB0aGUgZ2VuZXJhbCBjYXRhbG9nIGF0dHJpYnV0ZXMuJ30gPQogICAgICAgICdQYXJhbWV0ZXIgdW50dWsgY29udG9oIGtvbWVuIDIgcGFkYSBjaXJpLWNpcmkga2F0YWxvZy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFyYW1ldGVycyBmb3IgdGhlIGV4YW1wbGUgcGVybWlzc2lvbiBncm91cHMgb2YgdGhlIGdlbmVyYWwgY2F0YWxvZyBhdHRyaWJ1dGVzLid9ID0KICAgICAgICAnUGFyYW1ldGVyIHVudHVrIGNvbnRvaCBrdW1wdWxhbiB5YW5nIGRpYmVuYXJrYW4gcGFkYSBjaXJpLWNpcmkga2F0YWxvZy4nOwoKCiAgICBwdXNoIEB7ICRTZWxmLT57SmF2YVNjcmlwdFN0cmluZ3N9IC8vIFtdIH0sICgKICAgICk7Cgp9CgoxOwo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0zLjAudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6TGFuZ3VhZ2U6Om5iX05PX0dlbmVyYWxDYXRhbG9nOwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwp1c2UgdXRmODsKCnN1YiBEYXRhIHsKICAgIG15ICRTZWxmID0gc2hpZnQ7CgogICAgIyBUZW1wbGF0ZTogQUFBR2VuZXJhbENhdGFsb2cKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Z1bmN0aW9uYWxpdHknfSA9ICdGdW5rc2pvbmFsaXRldCc7CgogICAgIyBUZW1wbGF0ZTogQWRtaW5HZW5lcmFsQ2F0YWxvZwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnR2VuZXJhbCBDYXRhbG9nIE1hbmFnZW1lbnQnfSA9ICdBZG1pbmlzdHJhc2pvbiBhdiBHZW5lcmVsbCBLYXRhbG9nJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0l0ZW1zIGluIENsYXNzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VkaXQgSXRlbSd9ID0gJ0VuZHJlIG9iamVrdCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgQ2xhc3MnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIEl0ZW0nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIENhdGFsb2cgSXRlbSd9ID0gJ0xlZ2cgdGlsIGthdGFsb2dvYmpla3QnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIENhdGFsb2cgQ2xhc3MnfSA9ICdMZWdnIHRpbCBrYXRhbG9nLWtsYXNzZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDYXRhbG9nIENsYXNzJ30gPSAnS2F0YWxvZy1rbGFzc2UnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRWRpdCBDYXRhbG9nIEl0ZW0nfSA9ICcnOwoKICAgICMgU3lzQ29uZmlnCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb21tZW50IDInfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3JlYXRlIGFuZCBtYW5hZ2UgdGhlIEdlbmVyYWwgQ2F0YWxvZy4nfSA9ICdPcHByZXR0IG9nIGFkbWluaXN0csOpciBkZW4gZ2VuZXJlbGxlIGthdGFsb2dlbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmUgdGhlIGdlbmVyYWwgY2F0YWxvZyBjb21tZW50IDIuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZSB0aGUgZ3JvdXAgd2l0aCBwZXJtaXNzaW9ucy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgVVJMIEpTIENvbG9yIFBpY2tlciBwYXRoLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgQWRtaW5HZW5lcmFsQ2F0YWxvZyBjb25maWd1cmF0aW9uIGluIHRoZSBhZG1pbiBhcmVhLid9ID0KICAgICAgICAnRm9yc2lkZW1vZHVsLXJlZ2lzdHJlcmluZyBmb3IgQWRtaW5HZW5lcmFsQ2F0YWxvZy1vcHBzZXR0IGkgYWRtaW4tZGVsZW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0dlbmVyYWwgQ2F0YWxvZyd9ID0gJ0dlbmVyZWxsIEthdGFsb2cnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFyYW1ldGVycyBmb3IgdGhlIGV4YW1wbGUgY29tbWVudCAyIG9mIHRoZSBnZW5lcmFsIGNhdGFsb2cgYXR0cmlidXRlcy4nfSA9CiAgICAgICAgJ1BhcmFtZXRyZSBmb3IgZWtzZW1wZWxrb21tZW50YXIgMiBpIGF0dHJpYnV0dGVuZSBmb3IgZ2VuZXJlbGwga2F0YWxvZyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJhbWV0ZXJzIGZvciB0aGUgZXhhbXBsZSBwZXJtaXNzaW9uIGdyb3VwcyBvZiB0aGUgZ2VuZXJhbCBjYXRhbG9nIGF0dHJpYnV0ZXMuJ30gPQogICAgICAgICdQYXJhbWV0ZXJlIGZvciB0aWxnYW5nc2dydXBwZS1la3NlbXBlbCBpIGF0dHJpYnV0dGVuZSBmb3IgZ2VuZXJlbGwga2F0YWxvZy4nOwoKCiAgICBwdXNoIEB7ICRTZWxmLT57SmF2YVNjcmlwdFN0cmluZ3N9IC8vIFtdIH0sICgKICAgICk7Cgp9CgoxOwo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0zLjAudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6TGFuZ3VhZ2U6Om5sX0dlbmVyYWxDYXRhbG9nOwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwp1c2UgdXRmODsKCnN1YiBEYXRhIHsKICAgIG15ICRTZWxmID0gc2hpZnQ7CgogICAgIyBUZW1wbGF0ZTogQUFBR2VuZXJhbENhdGFsb2cKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Z1bmN0aW9uYWxpdHknfSA9ICdGdW5jdGlvbmFsaXRlaXQnOwoKICAgICMgVGVtcGxhdGU6IEFkbWluR2VuZXJhbENhdGFsb2cKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0dlbmVyYWwgQ2F0YWxvZyBNYW5hZ2VtZW50J30gPSAnQ2F0YWxvZ3VzIEJlaGVlcic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJdGVtcyBpbiBDbGFzcyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFZGl0IEl0ZW0nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIENsYXNzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBJdGVtJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBDYXRhbG9nIEl0ZW0nfSA9ICdDYXRhbG9ndXMtaXRlbSB0b2V2b2VnZW4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIENhdGFsb2cgQ2xhc3MnfSA9ICdDYXRhbG9ndXMta2xhc3NlIHRvZXZvZWdlbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDYXRhbG9nIENsYXNzJ30gPSAnQ2F0YWxvZ3VzIGtsYXNzZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFZGl0IENhdGFsb2cgSXRlbSd9ID0gJyc7CgogICAgIyBTeXNDb25maWcKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbW1lbnQgMid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDcmVhdGUgYW5kIG1hbmFnZSB0aGUgR2VuZXJhbCBDYXRhbG9nLid9ID0gJ0Fhbm1ha2VuIGVuIGJlaGVyZW4gdmFuIGl0ZW1zIGluIGRlIGNhdGFsb2d1cy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lIHRoZSBnZW5lcmFsIGNhdGFsb2cgY29tbWVudCAyLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmUgdGhlIGdyb3VwIHdpdGggcGVybWlzc2lvbnMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIFVSTCBKUyBDb2xvciBQaWNrZXIgcGF0aC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFkbWluR2VuZXJhbENhdGFsb2cgY29uZmlndXJhdGlvbiBpbiB0aGUgYWRtaW4gYXJlYS4nfSA9CiAgICAgICAgJ0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpZSB2b29yIGRlIEFkbWluR2VuZXJhbENhdGFsb2cgY29uZmlndXJhdGllIGluIGhldCBiZWhlZXIgZGVlbC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnR2VuZXJhbCBDYXRhbG9nJ30gPSAnQ2F0YWxvZ3VzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcmFtZXRlcnMgZm9yIHRoZSBleGFtcGxlIGNvbW1lbnQgMiBvZiB0aGUgZ2VuZXJhbCBjYXRhbG9nIGF0dHJpYnV0ZXMuJ30gPQogICAgICAgICdQYXJhbWV0ZXJzIHZvb3IgaGV0IHZvb3JiZWVsZCBjb21tZW50YWFyIDIgdmFuIGRlIGFsZ2VtZW5lIGNhdGFsb2cgYXR0cmlidXRlbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJhbWV0ZXJzIGZvciB0aGUgZXhhbXBsZSBwZXJtaXNzaW9uIGdyb3VwcyBvZiB0aGUgZ2VuZXJhbCBjYXRhbG9nIGF0dHJpYnV0ZXMuJ30gPQogICAgICAgICdQYXJhbWV0ZXJzIHZvb3IgZGUgdm9vcmJlZWxkIHBlcmltc3NpZWdyb2VwZW4gdmFuIGRlIGFsZ2VtZW5lIGNhdGFsb2cgYXR0cmlidXRlbi4nOwoKCiAgICBwdXNoIEB7ICRTZWxmLT57SmF2YVNjcmlwdFN0cmluZ3N9IC8vIFtdIH0sICgKICAgICk7Cgp9CgoxOwo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0zLjAudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6TGFuZ3VhZ2U6OnBsX0dlbmVyYWxDYXRhbG9nOwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwp1c2UgdXRmODsKCnN1YiBEYXRhIHsKICAgIG15ICRTZWxmID0gc2hpZnQ7CgogICAgIyBUZW1wbGF0ZTogQUFBR2VuZXJhbENhdGFsb2cKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Z1bmN0aW9uYWxpdHknfSA9ICdGdW5rY2pvbmFsbm/Fm8SHJzsKCiAgICAjIFRlbXBsYXRlOiBBZG1pbkdlbmVyYWxDYXRhbG9nCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydHZW5lcmFsIENhdGFsb2cgTWFuYWdlbWVudCd9ID0gJ1phcnrEhWR6YW5pZSBrYXRhbG9naWVtIGfFgsOzd255bSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJdGVtcyBpbiBDbGFzcyd9ID0gJ0VsZW1lbnR5IGtsYXN5JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VkaXQgSXRlbSd9ID0gJ0VkeXR1aiBlbGVtZW50JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBDbGFzcyd9ID0gJ0RvZGFqIGtsYXPEmSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgSXRlbSd9ID0gJ0RvZGFqIGVsZW1lbnQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIENhdGFsb2cgSXRlbSd9ID0gJ0RvZGFqIGVsZW1lbnQga2F0YWxvZ3UnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIENhdGFsb2cgQ2xhc3MnfSA9ICdEb2RhaiBrbGFzxJkga2F0YWxvZ3UnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2F0YWxvZyBDbGFzcyd9ID0gJ0tsYXNhIGthdGFsb2d1JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VkaXQgQ2F0YWxvZyBJdGVtJ30gPSAnRWR5dHVqIGVsZW1lbnQga2F0YWxvZ3UnOwoKICAgICMgU3lzQ29uZmlnCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb21tZW50IDInfSA9ICdLb21lbnRhcnogMic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDcmVhdGUgYW5kIG1hbmFnZSB0aGUgR2VuZXJhbCBDYXRhbG9nLid9ID0gJ1V0d8OzcnogaSB6YXJ6xIVkemFqIGthdGFsb2dpZW0gZ8WCw7N3bnltLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmUgdGhlIGdlbmVyYWwgY2F0YWxvZyBjb21tZW50IDIuJ30gPSAnRGVmaW5pdWplIGtvbWVudGFyeiAyIGRvIGthdGFsb2d1IGfFgsOzd25lZ28nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lIHRoZSBncm91cCB3aXRoIHBlcm1pc3Npb25zLid9ID0gJ1pkZWZpbml1aiBncnVwxJkgeiB1cHJhd25pZW5pYW1pLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBVUkwgSlMgQ29sb3IgUGlja2VyIHBhdGguJ30gPSAnRGVmaW5pdWplIFVSTCBkbyBKUyBDb2xvciBQaWNrZXInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFkbWluR2VuZXJhbENhdGFsb2cgY29uZmlndXJhdGlvbiBpbiB0aGUgYWRtaW4gYXJlYS4nfSA9CiAgICAgICAgJ1JlamVzdHJhY2phIG1vZHXFgnUgZnJvbnRlbmQgZG8ga29uZmlndXJhY2ppIG1vZHXFgnUgQWRtaW5HZW5lcmFsQ2F0YWxvZyB3IHBhbmVsdSBhZG1pbmlzdHJhdG9yYS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnR2VuZXJhbCBDYXRhbG9nJ30gPSAnS2F0YWxvZyBnxYLDs3dueSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJhbWV0ZXJzIGZvciB0aGUgZXhhbXBsZSBjb21tZW50IDIgb2YgdGhlIGdlbmVyYWwgY2F0YWxvZyBhdHRyaWJ1dGVzLid9ID0KICAgICAgICAnUGFyYW1ldHJ5IGRvIHByenlrxYJhZG93ZWdvIGtvbWVudGFyemEgMiBhdHJ5YnV0w7N3IGthdGFsb2d1IGdlbmVyYWxuZWdvLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJhbWV0ZXJzIGZvciB0aGUgZXhhbXBsZSBwZXJtaXNzaW9uIGdyb3VwcyBvZiB0aGUgZ2VuZXJhbCBjYXRhbG9nIGF0dHJpYnV0ZXMuJ30gPQogICAgICAgICdQYXJhbWV0cnkgZGxhIHByenlrxYJhZG93eWNoIGdydXAgdXByYXduaWXFhCBhdHJ5YnV0w7N3IGthdGFsb2d1IGfFgsOzd25lZ28uJzsKCgogICAgcHVzaCBAeyAkU2VsZi0+e0phdmFTY3JpcHRTdHJpbmdzfSAvLyBbXSB9LCAoCiAgICApOwoKfQoKMTsK
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0zLjAudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6TGFuZ3VhZ2U6OnB0X0JSX0dlbmVyYWxDYXRhbG9nOwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwp1c2UgdXRmODsKCnN1YiBEYXRhIHsKICAgIG15ICRTZWxmID0gc2hpZnQ7CgogICAgIyBUZW1wbGF0ZTogQUFBR2VuZXJhbENhdGFsb2cKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Z1bmN0aW9uYWxpdHknfSA9ICdGdW5jaW9uYWxpZGFkZSc7CgogICAgIyBUZW1wbGF0ZTogQWRtaW5HZW5lcmFsQ2F0YWxvZwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnR2VuZXJhbCBDYXRhbG9nIE1hbmFnZW1lbnQnfSA9ICdHZXJlbmNpYW1lbnRvIGRvIENhdMOhbG9nbyBHZXJhbCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJdGVtcyBpbiBDbGFzcyd9ID0gJ0l0ZW5zIG5hIENsYXNzZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFZGl0IEl0ZW0nfSA9ICdBbHRlcmFyIEl0ZW0nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIENsYXNzJ30gPSAnQWRpY2lvbmFyIENsYXNzZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgSXRlbSd9ID0gJ0FkaWNpb25hciBJdGVtJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBDYXRhbG9nIEl0ZW0nfSA9ICdBZGljaW9uYXIgSXRlbSBhbyBDYXTDoWxvZ28nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIENhdGFsb2cgQ2xhc3MnfSA9ICdBZGljaW9uYXIgQ2xhc3NlIGFvIENhdMOhbG9nbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDYXRhbG9nIENsYXNzJ30gPSAnQ2xhc3NlIGRvIENhdMOhbG9nbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFZGl0IENhdGFsb2cgSXRlbSd9ID0gJ0FsdGVyYXIgSXRlbSBkbyBDYXTDoWxvZ28nOwoKICAgICMgU3lzQ29uZmlnCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb21tZW50IDInfSA9ICdDb21lbnTDoXJpbyAyJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NyZWF0ZSBhbmQgbWFuYWdlIHRoZSBHZW5lcmFsIENhdGFsb2cuJ30gPSAnQ3JpYXIgZSBnZXJlbmNpYXIgbyBDYXTDoWxvZ28gR2VyYWwuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZSB0aGUgZ2VuZXJhbCBjYXRhbG9nIGNvbW1lbnQgMi4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lIHRoZSBncm91cCB3aXRoIHBlcm1pc3Npb25zLid9ID0gJ0RlZmluaXIgbyBncnVwbyBkZSBwZXJtaXNzaW9uYW1lbnRvLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBVUkwgSlMgQ29sb3IgUGlja2VyIHBhdGguJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZG1pbkdlbmVyYWxDYXRhbG9nIGNvbmZpZ3VyYXRpb24gaW4gdGhlIGFkbWluIGFyZWEuJ30gPQogICAgICAgICdNw7NkdWxvIGRlIHJlZ2lzdG8gZGEgaW50ZXJmYWNlIHBhcmEgYSBjb25maWd1cmHDp8OjbyBBZG1pbkdlbmVyYWxDYXRhbG9nIG5hIMOhcmVhIGFkbWluaXN0cmF0aXZhLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydHZW5lcmFsIENhdGFsb2cnfSA9ICdDYXTDoWxvZ28gR2VyYWwnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFyYW1ldGVycyBmb3IgdGhlIGV4YW1wbGUgY29tbWVudCAyIG9mIHRoZSBnZW5lcmFsIGNhdGFsb2cgYXR0cmlidXRlcy4nfSA9CiAgICAgICAgJ1BhcsOibWV0cm9zIHBhcmEgbyBjb21lbnTDoXJpbyBkZSBleGVtcGxvIDIgZG9zIGF0cmlidXRvcyBkbyBjYXTDoWxvZ28gZ2VyYWwuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcmFtZXRlcnMgZm9yIHRoZSBleGFtcGxlIHBlcm1pc3Npb24gZ3JvdXBzIG9mIHRoZSBnZW5lcmFsIGNhdGFsb2cgYXR0cmlidXRlcy4nfSA9CiAgICAgICAgJ1BhcsOibWV0cm9zIGRvIGdydXBvcyBkZSBwZXJtaXNzw6NvIGRlIGV4ZW1wbG8gZG9zIGF0cmlidXRvcyBkbyBjYXTDoWxvZ28gZ2VyYWwuJzsKCgogICAgcHVzaCBAeyAkU2VsZi0+e0phdmFTY3JpcHRTdHJpbmdzfSAvLyBbXSB9LCAoCiAgICApOwoKfQoKMTsK
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0zLjAudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6TGFuZ3VhZ2U6OnB0X0dlbmVyYWxDYXRhbG9nOwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwp1c2UgdXRmODsKCnN1YiBEYXRhIHsKICAgIG15ICRTZWxmID0gc2hpZnQ7CgogICAgIyBUZW1wbGF0ZTogQUFBR2VuZXJhbENhdGFsb2cKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Z1bmN0aW9uYWxpdHknfSA9ICdGdW5jaW9uYWxpZGFkZSc7CgogICAgIyBUZW1wbGF0ZTogQWRtaW5HZW5lcmFsQ2F0YWxvZwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnR2VuZXJhbCBDYXRhbG9nIE1hbmFnZW1lbnQnfSA9ICdHZXN0w6NvIGRvIENhdMOhbG9nbyBHZXJhbCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJdGVtcyBpbiBDbGFzcyd9ID0gJ0l0ZW1zIG5hIENsYXNzZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFZGl0IEl0ZW0nfSA9ICdFZGl0YXIgSXRlbSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgQ2xhc3MnfSA9ICdBZGljaW9uYXIgQ2xhc3NlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBJdGVtJ30gPSAnQWRpY2lvbmFyIEl0ZW0nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIENhdGFsb2cgSXRlbSd9ID0gJ0FkaWNpb25hciBJdGVtIGFvIENhdMOhbG9nbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgQ2F0YWxvZyBDbGFzcyd9ID0gJ0FkaWNpb25hciBDbGFzc2UgYW8gQ2F0w6Fsb2dvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NhdGFsb2cgQ2xhc3MnfSA9ICdDbGFzc2UgZG8gQ2F0w6Fsb2dvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VkaXQgQ2F0YWxvZyBJdGVtJ30gPSAnRWRpdGFyIEl0ZW0gZG8gQ2F0w6Fsb2dvJzsKCiAgICAjIFN5c0NvbmZpZwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29tbWVudCAyJ30gPSAnQ29tZW50w6FyaW8gMic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDcmVhdGUgYW5kIG1hbmFnZSB0aGUgR2VuZXJhbCBDYXRhbG9nLid9ID0gJ0NyaWFyIGUgZ2VyaXIgbyBDYXTDoWxvZ28gR2VyYWwuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZSB0aGUgZ2VuZXJhbCBjYXRhbG9nIGNvbW1lbnQgMi4nfSA9ICdEZWZpbmlyIG8gQ2F0w6Fsb2dvIEdlcmFsIGNvbWVudMOhcmlvIDIuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZSB0aGUgZ3JvdXAgd2l0aCBwZXJtaXNzaW9ucy4nfSA9ICdEZWZpbmlyIG8gZ3J1cG8gY29tIHBlcm1pc3PDtWVzLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBVUkwgSlMgQ29sb3IgUGlja2VyIHBhdGguJ30gPSAnRGVmaW5pciBvIFVSTCBwYXJhIG8gY2FtaW5obyBkbyBKUyBDb2xvciBQaWNrZXInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFkbWluR2VuZXJhbENhdGFsb2cgY29uZmlndXJhdGlvbiBpbiB0aGUgYWRtaW4gYXJlYS4nfSA9CiAgICAgICAgJ03Ds2R1bG8gZGUgcmVnaXN0byBkYSBpbnRlcmZhY2UgcGFyYSBhIGNvbmZpZ3VyYcOnw6NvIEFkbWluR2VuZXJhbENhdGFsb2cgbmEgw6FyZWEgYWRtaW5pc3RyYXRpdmEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0dlbmVyYWwgQ2F0YWxvZyd9ID0gJ0NhdMOhbG9nbyBHZXJhbCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJhbWV0ZXJzIGZvciB0aGUgZXhhbXBsZSBjb21tZW50IDIgb2YgdGhlIGdlbmVyYWwgY2F0YWxvZyBhdHRyaWJ1dGVzLid9ID0KICAgICAgICAnUGFyw6JtZXRyb3MgcGFyYSBvIGNvbWVudMOhcmlvIGRlIGV4ZW1wbG8gMiBkb3MgYXRyaWJ1dG9zIGRvIGNhdMOhbG9nbyBnZXJhbC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFyYW1ldGVycyBmb3IgdGhlIGV4YW1wbGUgcGVybWlzc2lvbiBncm91cHMgb2YgdGhlIGdlbmVyYWwgY2F0YWxvZyBhdHRyaWJ1dGVzLid9ID0KICAgICAgICAnUGFyw6JtZXRyb3MgcGFyYSBvcyBncnVwb3MgZGUgcGVybWlzc8OjbyBkZSBleGVtcGxvIGRvcyBhdHJpYnV0b3MgZG8gY2F0w6Fsb2dvIGdlcmFsLic7CgoKICAgIHB1c2ggQHsgJFNlbGYtPntKYXZhU2NyaXB0U3RyaW5nc30gLy8gW10gfSwgKAogICAgKTsKCn0KCjE7Cg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0zLjAudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6TGFuZ3VhZ2U6OnJ1X0dlbmVyYWxDYXRhbG9nOwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwp1c2UgdXRmODsKCnN1YiBEYXRhIHsKICAgIG15ICRTZWxmID0gc2hpZnQ7CgogICAgIyBUZW1wbGF0ZTogQUFBR2VuZXJhbENhdGFsb2cKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Z1bmN0aW9uYWxpdHknfSA9ICfQpNGD0L3QutGG0LjQvtC90LDQu9GM0L3QvtGB0YLRjCc7CgogICAgIyBUZW1wbGF0ZTogQWRtaW5HZW5lcmFsQ2F0YWxvZwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnR2VuZXJhbCBDYXRhbG9nIE1hbmFnZW1lbnQnfSA9ICfQo9C/0YDQsNCy0LvQtdC90LjQtSDQntCx0YnQuNC8INC60LDRgtCw0LvQvtCz0L7QvCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJdGVtcyBpbiBDbGFzcyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFZGl0IEl0ZW0nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIENsYXNzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBJdGVtJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBDYXRhbG9nIEl0ZW0nfSA9ICfQlNC+0LHQsNCy0LvQtdC90LjQtSDRjdC70LXQvNC10L3RgtCwINC60LDRgtCw0LvQvtCz0LAnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIENhdGFsb2cgQ2xhc3MnfSA9ICfQlNC+0LHQsNCy0LvQtdC90LjQtSDQutC70LDRgdGB0LAg0LrQsNGC0LDQu9C+0LPQsCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDYXRhbG9nIENsYXNzJ30gPSAn0JrQu9Cw0YHRgSDQutCw0YLQsNC70L7Qs9CwJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VkaXQgQ2F0YWxvZyBJdGVtJ30gPSAn0J/RgNCw0LLQutCwINGN0LvQtdC80LXQvdGC0LAg0LrQsNGC0LDQu9C+0LPQsCc7CgogICAgIyBTeXNDb25maWcKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbW1lbnQgMid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDcmVhdGUgYW5kIG1hbmFnZSB0aGUgR2VuZXJhbCBDYXRhbG9nLid9ID0gJ9Ch0L7Qt9C00LDQvdC40LUg0Lgg0YPQv9GA0LDQstC70LXQvdC40LUg0J7QsdGJ0LjQvCDQutCw0YLQsNC70L7Qs9C+0LwnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lIHRoZSBnZW5lcmFsIGNhdGFsb2cgY29tbWVudCAyLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmUgdGhlIGdyb3VwIHdpdGggcGVybWlzc2lvbnMuJ30gPSAn0J7Qv9GA0LXQtNC10LvQuNGC0LUg0LPRgNGD0L/Qv9GDINGBINGA0LDQt9GA0LXRiNC10L3QuNGP0LzQuC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgVVJMIEpTIENvbG9yIFBpY2tlciBwYXRoLid9ID0gJ9CX0LDQtNCw0LXRgiDQv9GD0YLRjCBVUkwgSlMgQ29sb3IgUGlja2VyLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgQWRtaW5HZW5lcmFsQ2F0YWxvZyBjb25maWd1cmF0aW9uIGluIHRoZSBhZG1pbiBhcmVhLid9ID0KICAgICAgICAnTW9kdWxlIHJlZ2lzdHJhdGlvbiDQtNC70Y8g0LrQvtC90YTQuNCz0YPRgNCw0YbQuNC4IEFkbWluR2VuZXJhbENhdGFsb2cg0LIg0L/QsNC90LXQu9C4INCw0LTQvNC40L3QuNGB0YLRgNCw0YLQvtGA0LAuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0dlbmVyYWwgQ2F0YWxvZyd9ID0gJ9Ce0LHRidC40Lkg0LrQsNGC0LDQu9C+0LMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFyYW1ldGVycyBmb3IgdGhlIGV4YW1wbGUgY29tbWVudCAyIG9mIHRoZSBnZW5lcmFsIGNhdGFsb2cgYXR0cmlidXRlcy4nfSA9CiAgICAgICAgJ9CU0L7QsdCw0LLQu9C10L3QuNC1INC00L7Qv9C+0LvQvdC40YLQtdC70YzQvdC+0LPQviDQutC+0LzQvNC10L3RgtCw0YDQuNGPINC6INCw0YLRgNC40LHRg9GC0LDQvCDQntCx0YnQtdCz0L4g0LrQsNGC0LDQu9C+0LPQsCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJhbWV0ZXJzIGZvciB0aGUgZXhhbXBsZSBwZXJtaXNzaW9uIGdyb3VwcyBvZiB0aGUgZ2VuZXJhbCBjYXRhbG9nIGF0dHJpYnV0ZXMuJ30gPQogICAgICAgICfQn9Cw0YDQsNC80LXRgtGA0Ysg0LTQu9GPINC/0YDQuNC80LXRgNC90YvRhSDQs9GA0YPQv9C/0L7QstGL0YUg0L/RgNCw0LIg0LTQu9GPINCw0YLRgNC40LHRg9GC0L7QsiDQntCx0YnQtdCz0L4g0LrQsNGC0LDQu9C+0LPQsCc7CgoKICAgIHB1c2ggQHsgJFNlbGYtPntKYXZhU2NyaXB0U3RyaW5nc30gLy8gW10gfSwgKAogICAgKTsKCn0KCjE7Cg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0zLjAudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6TGFuZ3VhZ2U6OnNyX0N5cmxfR2VuZXJhbENhdGFsb2c7Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CnVzZSB1dGY4OwoKc3ViIERhdGEgewogICAgbXkgJFNlbGYgPSBzaGlmdDsKCiAgICAjIFRlbXBsYXRlOiBBQUFHZW5lcmFsQ2F0YWxvZwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnVuY3Rpb25hbGl0eSd9ID0gJ9Ck0YPQvdC60YbQuNC+0L3QsNC70L3QvtGB0YInOwoKICAgICMgVGVtcGxhdGU6IEFkbWluR2VuZXJhbENhdGFsb2cKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0dlbmVyYWwgQ2F0YWxvZyBNYW5hZ2VtZW50J30gPSAn0KPQv9GA0LDQstGZ0LDRmtC1INCe0L/RiNGC0LjQvCDQutCw0YLQsNC70L7Qs9C+0LwnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSXRlbXMgaW4gQ2xhc3MnfSA9ICfQodGC0LDQstC60LUg0YMg0LrQu9Cw0YHQuCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFZGl0IEl0ZW0nfSA9ICfQo9GA0LXQtNC4INGB0YLQsNCy0LrRgyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgQ2xhc3MnfSA9ICfQlNC+0LTQsNGYINC60LvQsNGB0YMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIEl0ZW0nfSA9ICfQlNC+0LTQsNGYINGB0YLQsNCy0LrRgyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgQ2F0YWxvZyBJdGVtJ30gPSAn0JTQvtC00LDQstCw0ZrQtSDRgdGC0LDQstC60LUg0YMg0LrQsNGC0LDQu9C+0LMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIENhdGFsb2cgQ2xhc3MnfSA9ICfQlNC+0LTQsNCy0LDRmtC1INC60LvQsNGB0LUg0YMg0LrQsNGC0LDQu9C+0LMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2F0YWxvZyBDbGFzcyd9ID0gJ9Ca0LDRgtCw0LvQvtCzINC60LvQsNGB0LAnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRWRpdCBDYXRhbG9nIEl0ZW0nfSA9ICfQo9GA0LXQtNC4INGB0YLQsNCy0LrRgyDQutCw0YLQsNC70L7Qs9CwJzsKCiAgICAjIFN5c0NvbmZpZwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29tbWVudCAyJ30gPSAn0JrQvtC80LXQvdGC0LDRgCAyJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NyZWF0ZSBhbmQgbWFuYWdlIHRoZSBHZW5lcmFsIENhdGFsb2cuJ30gPSAn0JrRgNC10LjRgNCw0ZrQtSDQuCDRg9C/0YDQsNCy0ZnQsNGa0LUg0L7Qv9GI0YLQuNC8INC60LDRgtCw0LvQvtCz0L7QvC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lIHRoZSBnZW5lcmFsIGNhdGFsb2cgY29tbWVudCAyLid9ID0gJ9CU0LXRhNC40L3QuNGI0LUg0LrQvtC80LXQvdGC0LDRgCAyINGDINC+0L/RiNGC0LXQvCDQutCw0YLQsNC70L7Qs9GDLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmUgdGhlIGdyb3VwIHdpdGggcGVybWlzc2lvbnMuJ30gPSAn0JTQtdGE0LjQvdC40YjQtSDQs9GA0YPQv9GDINGB0LAg0LTQvtC30LLQvtC70LDQvNCwLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBVUkwgSlMgQ29sb3IgUGlja2VyIHBhdGguJ30gPSAn0JTQtdGE0LjQvdC40YjQtSBVUkwg0L/Rg9GC0LDRmtGDINC30LAgSlMgQ29sb3IgUGlja2VyLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgQWRtaW5HZW5lcmFsQ2F0YWxvZyBjb25maWd1cmF0aW9uIGluIHRoZSBhZG1pbiBhcmVhLid9ID0KICAgICAgICAn0KDQtdCz0LjRgdGC0YDQsNGG0LjRmNCwINC/0YDQuNGB0YLRg9C/0L3QvtCzINC80L7QtNGD0LvQsCDQt9CwIEFkbWluR2VuZXJhbENhdGFsb2cg0YMg0LjQvdGC0LXRgNGE0LXRmNGB0YMg0LDQtNC80LjQvdC40YHRgtGA0LDRgtC+0YDQsC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnR2VuZXJhbCBDYXRhbG9nJ30gPSAn0J7Qv9GI0YLQuCDQutCw0YLQsNC70L7Qsyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJhbWV0ZXJzIGZvciB0aGUgZXhhbXBsZSBjb21tZW50IDIgb2YgdGhlIGdlbmVyYWwgY2F0YWxvZyBhdHRyaWJ1dGVzLid9ID0KICAgICAgICAn0J/QsNGA0LDQvNC10YLRgNC4INC30LAg0L/RgNC40LzQtdGAINC60L7QvNC10L3RgtCw0YDQsCAyINCw0YLRgNC40LHRg9GC0LAg0L7Qv9GI0YLQtdCzINC60LDRgtCw0LvQvtCz0LAuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcmFtZXRlcnMgZm9yIHRoZSBleGFtcGxlIHBlcm1pc3Npb24gZ3JvdXBzIG9mIHRoZSBnZW5lcmFsIGNhdGFsb2cgYXR0cmlidXRlcy4nfSA9CiAgICAgICAgJ9Cf0LDRgNCw0LzQtdGC0YDQuCDQt9CwINC/0YDQuNC80LXRgCDQs9GA0YPQv9C1INC30LAg0LTQvtC30LLQvtC70LUg0LDRgtGA0LjQsdGD0YLQsCDQvtC/0YjRgtC10LMg0LrQsNGC0LDQu9C+0LPQsC4nOwoKCiAgICBwdXNoIEB7ICRTZWxmLT57SmF2YVNjcmlwdFN0cmluZ3N9IC8vIFtdIH0sICgKICAgICk7Cgp9CgoxOwo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0zLjAudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6TGFuZ3VhZ2U6OnNyX0xhdG5fR2VuZXJhbENhdGFsb2c7Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CnVzZSB1dGY4OwoKc3ViIERhdGEgewogICAgbXkgJFNlbGYgPSBzaGlmdDsKCiAgICAjIFRlbXBsYXRlOiBBQUFHZW5lcmFsQ2F0YWxvZwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnVuY3Rpb25hbGl0eSd9ID0gJ0Z1bmtjaW9uYWxub3N0JzsKCiAgICAjIFRlbXBsYXRlOiBBZG1pbkdlbmVyYWxDYXRhbG9nCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydHZW5lcmFsIENhdGFsb2cgTWFuYWdlbWVudCd9ID0gJ1VwcmF2bGphbmplIE9wxaF0aW0ga2F0YWxvZ29tJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0l0ZW1zIGluIENsYXNzJ30gPSAnU3RhdmtlIHUga2xhc2knOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRWRpdCBJdGVtJ30gPSAnVXJlZGkgc3Rhdmt1JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBDbGFzcyd9ID0gJ0RvZGFqIGtsYXN1JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBJdGVtJ30gPSAnRG9kYWogc3Rhdmt1JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBDYXRhbG9nIEl0ZW0nfSA9ICdEb2RhdmFuamUgc3RhdmtlIHUga2F0YWxvZyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgQ2F0YWxvZyBDbGFzcyd9ID0gJ0RvZGF2YW5qZSBrbGFzZSB1IGthdGFsb2cnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2F0YWxvZyBDbGFzcyd9ID0gJ0thdGFsb2cga2xhc2EnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRWRpdCBDYXRhbG9nIEl0ZW0nfSA9ICdVcmVkaSBzdGF2a3Uga2F0YWxvZ2EnOwoKICAgICMgU3lzQ29uZmlnCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb21tZW50IDInfSA9ICdLb21lbnRhciAyJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NyZWF0ZSBhbmQgbWFuYWdlIHRoZSBHZW5lcmFsIENhdGFsb2cuJ30gPSAnS3JlaXJhbmplIGkgdXByYXZsamFuamUgb3DFoXRpbSBrYXRhbG9nb20uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZSB0aGUgZ2VuZXJhbCBjYXRhbG9nIGNvbW1lbnQgMi4nfSA9ICdEZWZpbmnFoWUga29tZW50YXIgMiB1IG9wxaF0ZW0ga2F0YWxvZ3UuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZSB0aGUgZ3JvdXAgd2l0aCBwZXJtaXNzaW9ucy4nfSA9ICdEZWZpbmnFoWUgZ3J1cHUgc2EgZG96dm9sYW1hLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBVUkwgSlMgQ29sb3IgUGlja2VyIHBhdGguJ30gPSAnRGVmaW5pxaFlIFVSTCBwdXRhbmp1IHphIEpTIENvbG9yIFBpY2tlci4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFkbWluR2VuZXJhbENhdGFsb2cgY29uZmlndXJhdGlvbiBpbiB0aGUgYWRtaW4gYXJlYS4nfSA9CiAgICAgICAgJ1JlZ2lzdHJhY2lqYSBwcmlzdHVwbm9nIG1vZHVsYSB6YSBBZG1pbkdlbmVyYWxDYXRhbG9nIHUgaW50ZXJmZWpzdSBhZG1pbmlzdHJhdG9yYS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnR2VuZXJhbCBDYXRhbG9nJ30gPSAnT3DFoXRpIGthdGFsb2cnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFyYW1ldGVycyBmb3IgdGhlIGV4YW1wbGUgY29tbWVudCAyIG9mIHRoZSBnZW5lcmFsIGNhdGFsb2cgYXR0cmlidXRlcy4nfSA9CiAgICAgICAgJ1BhcmFtZXRyaSB6YSBwcmltZXIga29tZW50YXJhIDIgYXRyaWJ1dGEgb3DFoXRlZyBrYXRhbG9nYS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFyYW1ldGVycyBmb3IgdGhlIGV4YW1wbGUgcGVybWlzc2lvbiBncm91cHMgb2YgdGhlIGdlbmVyYWwgY2F0YWxvZyBhdHRyaWJ1dGVzLid9ID0KICAgICAgICAnUGFyYW1ldHJpIHphIHByaW1lciBncnVwZSB6YSBkb3p2b2xlIGF0cmlidXRhIG9wxaF0ZWcga2F0YWxvZ2EuJzsKCgogICAgcHVzaCBAeyAkU2VsZi0+e0phdmFTY3JpcHRTdHJpbmdzfSAvLyBbXSB9LCAoCiAgICApOwoKfQoKMTsK
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0zLjAudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6TGFuZ3VhZ2U6OnN2X0dlbmVyYWxDYXRhbG9nOwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwp1c2UgdXRmODsKCnN1YiBEYXRhIHsKICAgIG15ICRTZWxmID0gc2hpZnQ7CgogICAgIyBUZW1wbGF0ZTogQUFBR2VuZXJhbENhdGFsb2cKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Z1bmN0aW9uYWxpdHknfSA9ICdGdW5rdGlvbmFsaXRldCc7CgogICAgIyBUZW1wbGF0ZTogQWRtaW5HZW5lcmFsQ2F0YWxvZwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnR2VuZXJhbCBDYXRhbG9nIE1hbmFnZW1lbnQnfSA9ICdIYW50ZXJhIGdydW5ka2F0YWxvZyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJdGVtcyBpbiBDbGFzcyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFZGl0IEl0ZW0nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIENsYXNzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBJdGVtJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBDYXRhbG9nIEl0ZW0nfSA9ICdMw6RnZyB0aWxsIGthdGFsb2dwb3N0JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBDYXRhbG9nIENsYXNzJ30gPSAnTMOkZ2cgdGlsbCBrbGFzcyBpIGthdGFsb2cnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2F0YWxvZyBDbGFzcyd9ID0gJ0thdGFsb2drbGFzcyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFZGl0IENhdGFsb2cgSXRlbSd9ID0gJyc7CgogICAgIyBTeXNDb25maWcKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbW1lbnQgMid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDcmVhdGUgYW5kIG1hbmFnZSB0aGUgR2VuZXJhbCBDYXRhbG9nLid9ID0gJ1NrYXBhIG9jaCBoYW50ZXJhIGdydW5ka2F0YWxvZ2VuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZSB0aGUgZ2VuZXJhbCBjYXRhbG9nIGNvbW1lbnQgMi4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lIHRoZSBncm91cCB3aXRoIHBlcm1pc3Npb25zLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBVUkwgSlMgQ29sb3IgUGlja2VyIHBhdGguJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZG1pbkdlbmVyYWxDYXRhbG9nIGNvbmZpZ3VyYXRpb24gaW4gdGhlIGFkbWluIGFyZWEuJ30gPQogICAgICAgICdSZWdpc3RyZXJpbmcgYXYgZnJvbnRlbmRtb2R1bCBmw7ZyIEFkbWluR2VuZXJhbENhdGFsb2ctaW5zdMOkbGxuaW5nYXIgaSBhZG1pbmFyZWFuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydHZW5lcmFsIENhdGFsb2cnfSA9ICdHcnVuZGthdGFsb2cnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFyYW1ldGVycyBmb3IgdGhlIGV4YW1wbGUgY29tbWVudCAyIG9mIHRoZSBnZW5lcmFsIGNhdGFsb2cgYXR0cmlidXRlcy4nfSA9CiAgICAgICAgJ1BhcmFtZXRyYXIgZsO2ciBleGVtcGVsa29tbWVudGFyIDIgaSBhdHRyaWJ1dGVuIGbDtnIgZ3J1bmRrYXRhbG9nZW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcmFtZXRlcnMgZm9yIHRoZSBleGFtcGxlIHBlcm1pc3Npb24gZ3JvdXBzIG9mIHRoZSBnZW5lcmFsIGNhdGFsb2cgYXR0cmlidXRlcy4nfSA9CiAgICAgICAgJ1BhcmFtZXRyYXIgZsO2ciBleGVtcGVsIHDDpSBiZWjDtnJpZ2hldHNlZ3J1cHBlciBpIGdydW5ka2F0YWxvZ2VucyBhdHRyaWJ1dC4nOwoKCiAgICBwdXNoIEB7ICRTZWxmLT57SmF2YVNjcmlwdFN0cmluZ3N9IC8vIFtdIH0sICgKICAgICk7Cgp9CgoxOwo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0zLjAudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6TGFuZ3VhZ2U6OnN3X0dlbmVyYWxDYXRhbG9nOwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwp1c2UgdXRmODsKCnN1YiBEYXRhIHsKICAgIG15ICRTZWxmID0gc2hpZnQ7CgogICAgIyBUZW1wbGF0ZTogQUFBR2VuZXJhbENhdGFsb2cKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Z1bmN0aW9uYWxpdHknfSA9ICdVdGVuZGFqaSc7CgogICAgIyBUZW1wbGF0ZTogQWRtaW5HZW5lcmFsQ2F0YWxvZwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnR2VuZXJhbCBDYXRhbG9nIE1hbmFnZW1lbnQnfSA9ICdVc2ltYW1pemkgd2Ega2F0YWxvZ2kgd2EgdWp1bWxhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0l0ZW1zIGluIENsYXNzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VkaXQgSXRlbSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgQ2xhc3MnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIEl0ZW0nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIENhdGFsb2cgSXRlbSd9ID0gJ09uZ2V6YSBraXBlbmdlbGUgeWEga2F0YWxvZ2knOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIENhdGFsb2cgQ2xhc3MnfSA9ICdPbmdlemEgdGFiYWthIGxhIGthdGFsb2dpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NhdGFsb2cgQ2xhc3MnfSA9ICdUYWJha2EgbGEga2F0YWxvZ2knOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRWRpdCBDYXRhbG9nIEl0ZW0nfSA9ICcnOwoKICAgICMgU3lzQ29uZmlnCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb21tZW50IDInfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3JlYXRlIGFuZCBtYW5hZ2UgdGhlIEdlbmVyYWwgQ2F0YWxvZy4nfSA9ICdUZW5nZW5lemEgbmEgc2ltYW1pYSBLYXRhbG9naSB5YSB1anVtbGEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZSB0aGUgZ2VuZXJhbCBjYXRhbG9nIGNvbW1lbnQgMi4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lIHRoZSBncm91cCB3aXRoIHBlcm1pc3Npb25zLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBVUkwgSlMgQ29sb3IgUGlja2VyIHBhdGguJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZG1pbkdlbmVyYWxDYXRhbG9nIGNvbmZpZ3VyYXRpb24gaW4gdGhlIGFkbWluIGFyZWEuJ30gPQogICAgICAgICdVc2FqaWxpIHdhIG1vZHVsaSB5YSBtYXppbmdpcmEgeWEgbWJlbGUga3dhIHVzYW5pZGkgd2Ega2F0YWxvZ2kgeWEgdWp1bWxhIHlhIG1zaW1hbWl6aSBrYXRpa2EgZW5lbyBsYSB1c2ltYW1pemkuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0dlbmVyYWwgQ2F0YWxvZyd9ID0gJ0thdGFsb2dpIHlhIHVqdW1sYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJhbWV0ZXJzIGZvciB0aGUgZXhhbXBsZSBjb21tZW50IDIgb2YgdGhlIGdlbmVyYWwgY2F0YWxvZyBhdHRyaWJ1dGVzLid9ID0KICAgICAgICAnVmlnZXpvIGt3YSBtZmFubyBNYW9uaSAyIHlhIHNpZmEgemEga2F0YWxvZ2kgemEgdWp1bWxhLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJhbWV0ZXJzIGZvciB0aGUgZXhhbXBsZSBwZXJtaXNzaW9uIGdyb3VwcyBvZiB0aGUgZ2VuZXJhbCBjYXRhbG9nIGF0dHJpYnV0ZXMuJ30gPQogICAgICAgICdWaWdlem8ga3dhIG1mYW5vIHJ1aHVzYSB6YSB2aWt1bmRpIGt3YSBzaWZhIHphIGthdGFsb2dpIHphIHVqdW1sYS4nOwoKCiAgICBwdXNoIEB7ICRTZWxmLT57SmF2YVNjcmlwdFN0cmluZ3N9IC8vIFtdIH0sICgKICAgICk7Cgp9CgoxOwo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0zLjAudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6TGFuZ3VhZ2U6OnRoX1RIX0dlbmVyYWxDYXRhbG9nOwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwp1c2UgdXRmODsKCnN1YiBEYXRhIHsKICAgIG15ICRTZWxmID0gc2hpZnQ7CgogICAgIyBUZW1wbGF0ZTogQUFBR2VuZXJhbENhdGFsb2cKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Z1bmN0aW9uYWxpdHknfSA9ICfguJ/guLHguIfguIHguYzguIrguLHguYjguJnguIHguLLguKPguJfguLPguIfguLLguJknOwoKICAgICMgVGVtcGxhdGU6IEFkbWluR2VuZXJhbENhdGFsb2cKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0dlbmVyYWwgQ2F0YWxvZyBNYW5hZ2VtZW50J30gPSAn4LiB4Liy4Lij4LiI4Lix4LiU4LiB4Liy4Lij4LmB4LiE4LmH4LiV4LiV4Liy4Lil4LmH4Lit4LiB4LiX4Lix4LmI4Lin4LmE4LibJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0l0ZW1zIGluIENsYXNzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VkaXQgSXRlbSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgQ2xhc3MnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIEl0ZW0nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIENhdGFsb2cgSXRlbSd9ID0gJ+C5gOC4nuC4tOC5iOC4oeC4o+C4suC4ouC4geC4suC4o+C5geC4hOC5h+C4leC4leC4suC4peC5h+C4reC4gSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgQ2F0YWxvZyBDbGFzcyd9ID0gJ+C5gOC4nuC4tOC5iOC4oeC4q+C5ieC4reC4h+C5geC4hOC5h+C4leC4leC4suC4peC5h+C4reC4gSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDYXRhbG9nIENsYXNzJ30gPSAn4Lir4LmJ4Lit4LiH4LmB4LiE4LmH4LiV4LiV4Liy4Lil4LmH4Lit4LiBJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VkaXQgQ2F0YWxvZyBJdGVtJ30gPSAnJzsKCiAgICAjIFN5c0NvbmZpZwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29tbWVudCAyJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NyZWF0ZSBhbmQgbWFuYWdlIHRoZSBHZW5lcmFsIENhdGFsb2cuJ30gPSAn4Liq4Lij4LmJ4Liy4LiH4LmB4Lil4Liw4LiI4Lix4LiU4LiB4Liy4Lij4LmB4LiE4LmH4LiV4LiV4Liy4Lil4LmH4Lit4LiB4LiX4Lix4LmI4Lin4LmE4LibJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZSB0aGUgZ2VuZXJhbCBjYXRhbG9nIGNvbW1lbnQgMi4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lIHRoZSBncm91cCB3aXRoIHBlcm1pc3Npb25zLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBVUkwgSlMgQ29sb3IgUGlja2VyIHBhdGguJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZG1pbkdlbmVyYWxDYXRhbG9nIGNvbmZpZ3VyYXRpb24gaW4gdGhlIGFkbWluIGFyZWEuJ30gPQogICAgICAgICfguIHguLLguKPguKXguIfguJfguLDguYDguJrguLXguKLguJnguYLguKHguJTguLnguKUgRnJvbnRlbmQg4Liq4Liz4Lir4Lij4Lix4Lia4LiB4Liy4Lij4LiB4Liz4Lir4LiZ4LiU4LiE4LmI4Liy4LiC4Lit4LiHIEFkbWluR2VuZXJhbENhdGFsb2cg4LmD4LiZ4Lie4Li34LmJ4LiZ4LiX4Li14LmI4LiC4Lit4LiH4LmB4Lit4LiU4Lih4Li04LiZJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0dlbmVyYWwgQ2F0YWxvZyd9ID0gJ+C5geC4hOC5h+C4leC4leC4suC4peC5h+C4reC4geC4l+C4seC5iOC4p+C5hOC4myc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJhbWV0ZXJzIGZvciB0aGUgZXhhbXBsZSBjb21tZW50IDIgb2YgdGhlIGdlbmVyYWwgY2F0YWxvZyBhdHRyaWJ1dGVzLid9ID0KICAgICAgICAn4Lie4Liy4Lij4Liy4Lih4Li04LmA4LiV4Lit4Lij4LmM4Liq4Liz4Lir4Lij4Lix4Lia4LiV4Lix4Lin4Lit4Lii4LmI4Liy4LiH4LiE4Lin4Liy4Lih4LiE4Li04LiU4LmA4Lir4LmH4LiZ4LiX4Li14LmIMiDguILguK3guIfguYHguITguYfguJXguJXguLLguKXguYfguK3guIHguYHguK3guJXguJfguKPguLTguJrguLTguKfguJXguYzguJfguLHguYjguKfguYTguJsnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFyYW1ldGVycyBmb3IgdGhlIGV4YW1wbGUgcGVybWlzc2lvbiBncm91cHMgb2YgdGhlIGdlbmVyYWwgY2F0YWxvZyBhdHRyaWJ1dGVzLid9ID0KICAgICAgICAn4Lie4Liy4Lij4Liy4Lih4Li04LmA4LiV4Lit4Lij4LmM4Liq4Liz4Lir4Lij4Lix4Lia4LiV4Lix4Lin4Lit4Lii4LmI4Liy4LiH4LiB4Lil4Li44LmI4Lih4LiX4Li14LmI4LmE4LiU4LmJ4Lij4Lix4Lia4Lit4LiZ4Li44LiN4Liy4LiV4LiC4Lit4LiH4LmB4Lit4LiV4LiX4Lij4Li04Lia4Li04Lin4LiV4LmM4LmB4LiE4LmH4LiV4LiV4Liy4Lil4LmH4Lit4LiB4LiX4Lix4LmI4Lin4LmE4LibJzsKCgogICAgcHVzaCBAeyAkU2VsZi0+e0phdmFTY3JpcHRTdHJpbmdzfSAvLyBbXSB9LCAoCiAgICApOwoKfQoKMTsK
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0zLjAudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6TGFuZ3VhZ2U6OnRyX0dlbmVyYWxDYXRhbG9nOwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwp1c2UgdXRmODsKCnN1YiBEYXRhIHsKICAgIG15ICRTZWxmID0gc2hpZnQ7CgogICAgIyBUZW1wbGF0ZTogQUFBR2VuZXJhbENhdGFsb2cKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Z1bmN0aW9uYWxpdHknfSA9ICfEsMWfbGV2c2VsbGlrJzsKCiAgICAjIFRlbXBsYXRlOiBBZG1pbkdlbmVyYWxDYXRhbG9nCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydHZW5lcmFsIENhdGFsb2cgTWFuYWdlbWVudCd9ID0gJ0dlbmVsIEthdGFsb2cgWcO2bmV0aW1pJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0l0ZW1zIGluIENsYXNzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VkaXQgSXRlbSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgQ2xhc3MnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIEl0ZW0nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIENhdGFsb2cgSXRlbSd9ID0gJ0thdGFsb2cgw5ZnZXNpIEVrbGV5aW4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIENhdGFsb2cgQ2xhc3MnfSA9ICdLYXRhbG9nIFPEsW7EsWbEsSBFa2xleWluJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NhdGFsb2cgQ2xhc3MnfSA9ICdLYXRhbG9nIFPEsW7EsWbEsSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFZGl0IENhdGFsb2cgSXRlbSd9ID0gJyc7CgogICAgIyBTeXNDb25maWcKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbW1lbnQgMid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDcmVhdGUgYW5kIG1hbmFnZSB0aGUgR2VuZXJhbCBDYXRhbG9nLid9ID0gJ0dlbmVsIEthdGFsb2cgecO2bmV0aW1pLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmUgdGhlIGdlbmVyYWwgY2F0YWxvZyBjb21tZW50IDIuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZSB0aGUgZ3JvdXAgd2l0aCBwZXJtaXNzaW9ucy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgVVJMIEpTIENvbG9yIFBpY2tlciBwYXRoLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgQWRtaW5HZW5lcmFsQ2F0YWxvZyBjb25maWd1cmF0aW9uIGluIHRoZSBhZG1pbiBhcmVhLid9ID0KICAgICAgICAnWcO2bmV0aW0gYsO2bMO8bcO8bmVraSBBZG1pbkdlbmVyYWxDYXRhbG9nIGF5YXJsYXLEsSBpw6dpbiDDtm55w7x6IG1vZMO8bCBrYXlkxLEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0dlbmVyYWwgQ2F0YWxvZyd9ID0gJ0dlbmVsIEthdGFsb2cnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFyYW1ldGVycyBmb3IgdGhlIGV4YW1wbGUgY29tbWVudCAyIG9mIHRoZSBnZW5lcmFsIGNhdGFsb2cgYXR0cmlidXRlcy4nfSA9CiAgICAgICAgJ0dlbmVsIGthdGFsb2cgw7Z6bml0ZWxpa2xlcmluaW4gaWtpbmNpIMO2cm5layB5b3J1bXVudW4gcGFyYW1ldHJlbGVyaS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFyYW1ldGVycyBmb3IgdGhlIGV4YW1wbGUgcGVybWlzc2lvbiBncm91cHMgb2YgdGhlIGdlbmVyYWwgY2F0YWxvZyBhdHRyaWJ1dGVzLid9ID0KICAgICAgICAnR2VuZWwga2F0YWxvZyDDtnpuaXRlbGlrbGVyaW5pbiDDtnJuZWsgaXppbiBncnVwbGFyxLFuxLFuIHBhcmFtZXRyZWxlcmkuJzsKCgogICAgcHVzaCBAeyAkU2VsZi0+e0phdmFTY3JpcHRTdHJpbmdzfSAvLyBbXSB9LCAoCiAgICApOwoKfQoKMTsK
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0zLjAudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6TGFuZ3VhZ2U6OnVrX0dlbmVyYWxDYXRhbG9nOwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwp1c2UgdXRmODsKCnN1YiBEYXRhIHsKICAgIG15ICRTZWxmID0gc2hpZnQ7CgogICAgIyBUZW1wbGF0ZTogQUFBR2VuZXJhbENhdGFsb2cKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Z1bmN0aW9uYWxpdHknfSA9ICfQpNGD0L3QutGG0ZbQvtC90LDQu9GM0L3RltGB0YLRjCc7CgogICAgIyBUZW1wbGF0ZTogQWRtaW5HZW5lcmFsQ2F0YWxvZwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnR2VuZXJhbCBDYXRhbG9nIE1hbmFnZW1lbnQnfSA9ICfQmtC10YDRg9Cy0LDQvdC90Y8g0LfQsNCz0LDQu9GM0L3QuNC8INC60LDRgtCw0LvQvtCz0L7QvCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJdGVtcyBpbiBDbGFzcyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFZGl0IEl0ZW0nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIENsYXNzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBJdGVtJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBDYXRhbG9nIEl0ZW0nfSA9ICfQlNC+0LTQsNGC0Lgg0LXQu9C10LzQtdC90YIg0LrQsNGC0LDQu9C+0LPRgyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgQ2F0YWxvZyBDbGFzcyd9ID0gJ9CU0L7QtNCw0YLQuCDQutC70LDRgSDQutCw0YLQsNC70L7Qs9GDJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NhdGFsb2cgQ2xhc3MnfSA9ICfQmtC70LDRgSDQutCw0YLQsNC70L7Qs9GDJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VkaXQgQ2F0YWxvZyBJdGVtJ30gPSAnJzsKCiAgICAjIFN5c0NvbmZpZwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29tbWVudCAyJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NyZWF0ZSBhbmQgbWFuYWdlIHRoZSBHZW5lcmFsIENhdGFsb2cuJ30gPSAn0KHRgtCy0L7RgNC40YLQuCDRliDQutC10YDRg9Cy0LDRgtC4INC30LDQs9Cw0LvRjNC90LjQvCDQutCw0YLQsNC70L7Qs9C+0LwnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lIHRoZSBnZW5lcmFsIGNhdGFsb2cgY29tbWVudCAyLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmUgdGhlIGdyb3VwIHdpdGggcGVybWlzc2lvbnMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIFVSTCBKUyBDb2xvciBQaWNrZXIgcGF0aC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFkbWluR2VuZXJhbENhdGFsb2cgY29uZmlndXJhdGlvbiBpbiB0aGUgYWRtaW4gYXJlYS4nfSA9CiAgICAgICAgJ0Zyb250ZW5kINC80L7QtNGD0LvRjCDRgNC10ZTRgdGC0YDQsNGG0ZbRlyDQsiDQt9C+0L3RliDQsNC00LzRltC90ZbRgdGC0YDRg9Cy0LDQvdC90Y8g0LTQu9GPINC60L7QvdGE0ZbQs9GD0YDQsNGG0ZbRlyBBZG1pbkdlbmVyYWxDYXRhbG9nJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0dlbmVyYWwgQ2F0YWxvZyd9ID0gJ9CX0LDQs9Cw0LvRjNC90Lgg0LrQsNGC0LDQu9C+0LMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFyYW1ldGVycyBmb3IgdGhlIGV4YW1wbGUgY29tbWVudCAyIG9mIHRoZSBnZW5lcmFsIGNhdGFsb2cgYXR0cmlidXRlcy4nfSA9CiAgICAgICAgJ9Cf0LDRgNCw0LzQtdGC0YDQuCDQtNC70Y8g0L/RgNC40LrQu9Cw0LTRgyDQutC+0LzQtdC90YLQsNGAIDIg0LDRgtGA0LjQsdGD0YLRltCyINC30LDQs9Cw0LvRjNC90L7Qs9C+INC60LDRgtCw0LvQvtCz0YMuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcmFtZXRlcnMgZm9yIHRoZSBleGFtcGxlIHBlcm1pc3Npb24gZ3JvdXBzIG9mIHRoZSBnZW5lcmFsIGNhdGFsb2cgYXR0cmlidXRlcy4nfSA9CiAgICAgICAgJ9Cf0LDRgNCw0LzQtdGC0YDQuCDQtNC70Y8g0L/RgNC40LrQu9Cw0LTRgyDQtNC+0LfQstC+0LvRgyDQs9GA0YPQvyDQt9Cw0LPQsNC70YzQvdC40YUg0LDRgtGA0LjQsdGD0YLRltCyINC60LDRgtCw0LvQvtCz0YMuJzsKCgogICAgcHVzaCBAeyAkU2VsZi0+e0phdmFTY3JpcHRTdHJpbmdzfSAvLyBbXSB9LCAoCiAgICApOwoKfQoKMTsK
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0zLjAudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6TGFuZ3VhZ2U6OnZpX1ZOX0dlbmVyYWxDYXRhbG9nOwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwp1c2UgdXRmODsKCnN1YiBEYXRhIHsKICAgIG15ICRTZWxmID0gc2hpZnQ7CgogICAgIyBUZW1wbGF0ZTogQUFBR2VuZXJhbENhdGFsb2cKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Z1bmN0aW9uYWxpdHknfSA9ICdDaOG7qWMgbsSDbmcnOwoKICAgICMgVGVtcGxhdGU6IEFkbWluR2VuZXJhbENhdGFsb2cKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0dlbmVyYWwgQ2F0YWxvZyBNYW5hZ2VtZW50J30gPSAnUXXhuqNuIGzDvSBkYW5oIG3hu6VjIGNodW5nJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0l0ZW1zIGluIENsYXNzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VkaXQgSXRlbSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgQ2xhc3MnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIEl0ZW0nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIENhdGFsb2cgSXRlbSd9ID0gJ1Row6ptIGRhbmggbeG7pWMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIENhdGFsb2cgQ2xhc3MnfSA9ICdUaMOqbSBs4bubcCBkYW5oIG3hu6VjJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NhdGFsb2cgQ2xhc3MnfSA9ICdM4bubcCBkYW5oIG3hu6VjJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VkaXQgQ2F0YWxvZyBJdGVtJ30gPSAnJzsKCiAgICAjIFN5c0NvbmZpZwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29tbWVudCAyJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NyZWF0ZSBhbmQgbWFuYWdlIHRoZSBHZW5lcmFsIENhdGFsb2cuJ30gPSAnVOG6oW8gdsOgIHF14bqjbiBsw70gZGFuaCBt4bulYyBjaHVuZyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmUgdGhlIGdlbmVyYWwgY2F0YWxvZyBjb21tZW50IDIuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZSB0aGUgZ3JvdXAgd2l0aCBwZXJtaXNzaW9ucy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgVVJMIEpTIENvbG9yIFBpY2tlciBwYXRoLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgQWRtaW5HZW5lcmFsQ2F0YWxvZyBjb25maWd1cmF0aW9uIGluIHRoZSBhZG1pbiBhcmVhLid9ID0KICAgICAgICAnxJDEg25nIGvDvSBtw7QtxJF1biDEkeG7gyBj4bqldSBow6xuaCBBZG1pbkdlbmVyYWxDYXRhbG9nIHRyb25nIGdpYW8gZGnhu4duIHF14bqjbiB0cuG7iyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydHZW5lcmFsIENhdGFsb2cnfSA9ICdEYW5oIG3hu6VjIGNodW5nJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcmFtZXRlcnMgZm9yIHRoZSBleGFtcGxlIGNvbW1lbnQgMiBvZiB0aGUgZ2VuZXJhbCBjYXRhbG9nIGF0dHJpYnV0ZXMuJ30gPQogICAgICAgICdUaGFtIHPhu5EgY2hvIGNow7ogdGjDrWNoIHRo4bupIDIgY+G7p2EgdGh14buZYyB0w61uaCBkYW5oIG3hu6VjIGNodW5nLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJhbWV0ZXJzIGZvciB0aGUgZXhhbXBsZSBwZXJtaXNzaW9uIGdyb3VwcyBvZiB0aGUgZ2VuZXJhbCBjYXRhbG9nIGF0dHJpYnV0ZXMuJ30gPQogICAgICAgICdUaGFtIHPhu5EgY2hvIG5ow7NtIGPhuqVwIHBow6lwIGPhu6dhIHRodeG7mWMgdMOtbmggZGFuaCBt4bulYyBjaHVuZy4nOwoKCiAgICBwdXNoIEB7ICRTZWxmLT57SmF2YVNjcmlwdFN0cmluZ3N9IC8vIFtdIH0sICgKICAgICk7Cgp9CgoxOwo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0zLjAudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6TGFuZ3VhZ2U6OnpoX0NOX0dlbmVyYWxDYXRhbG9nOwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwp1c2UgdXRmODsKCnN1YiBEYXRhIHsKICAgIG15ICRTZWxmID0gc2hpZnQ7CgogICAgIyBUZW1wbGF0ZTogQUFBR2VuZXJhbENhdGFsb2cKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Z1bmN0aW9uYWxpdHknfSA9ICflip/og70nOwoKICAgICMgVGVtcGxhdGU6IEFkbWluR2VuZXJhbENhdGFsb2cKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0dlbmVyYWwgQ2F0YWxvZyBNYW5hZ2VtZW50J30gPSAn55uu5b2V566h55CGJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0l0ZW1zIGluIENsYXNzJ30gPSAn5Lul5LiL5p2h55uu5bGe5LqO57G777yaJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VkaXQgSXRlbSd9ID0gJ+e8lui+keadoeebric7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgQ2xhc3MnfSA9ICfmt7vliqDnsbsnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIEl0ZW0nfSA9ICfmt7vliqDmnaHnm64nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIENhdGFsb2cgSXRlbSd9ID0gJ+a3u+WKoOebruW9lemhueebric7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgQ2F0YWxvZyBDbGFzcyd9ID0gJ+a3u+WKoOaWsOebruW9leexuyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDYXRhbG9nIENsYXNzJ30gPSAn55uu5b2V57G7JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VkaXQgQ2F0YWxvZyBJdGVtJ30gPSAn57yW6L6R55uu5b2V6aG555uuJzsKCiAgICAjIFN5c0NvbmZpZwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29tbWVudCAyJ30gPSAn5rOo6YeKMic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDcmVhdGUgYW5kIG1hbmFnZSB0aGUgR2VuZXJhbCBDYXRhbG9nLid9ID0gJ+WIm+W7uuWSjOeuoeeQhuebruW9lSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmUgdGhlIGdlbmVyYWwgY2F0YWxvZyBjb21tZW50IDIuJ30gPSAn5a6a5LmJ6YCa55So55uu5b2V5rOo6YeKMuOAgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmUgdGhlIGdyb3VwIHdpdGggcGVybWlzc2lvbnMuJ30gPSAn5a6a5LmJ5pyJ5p2D6ZmQ55qE57uE44CCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIFVSTCBKUyBDb2xvciBQaWNrZXIgcGF0aC4nfSA9ICflrprkuYlKU+minOiJsumAieaLqeWZqOeahOi3r+W+hFVSTOOAgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgQWRtaW5HZW5lcmFsQ2F0YWxvZyBjb25maWd1cmF0aW9uIGluIHRoZSBhZG1pbiBhcmVhLid9ID0KICAgICAgICAn5Zyo57O757uf566h55CG5Lit5rOo5YaM55uu5b2V566h55CG5qih5Z2XQWRtaW5HZW5lcmFsQ2F0YWxvZ+eahOWJjeerr+aooeWdl+OAgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydHZW5lcmFsIENhdGFsb2cnfSA9ICfnm67lvZUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFyYW1ldGVycyBmb3IgdGhlIGV4YW1wbGUgY29tbWVudCAyIG9mIHRoZSBnZW5lcmFsIGNhdGFsb2cgYXR0cmlidXRlcy4nfSA9CiAgICAgICAgJ+ebruW9leWxnuaAp+agt+S+iy3ms6jph4oy55qE5Y+C5pWw6K6+572u44CCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcmFtZXRlcnMgZm9yIHRoZSBleGFtcGxlIHBlcm1pc3Npb24gZ3JvdXBzIG9mIHRoZSBnZW5lcmFsIGNhdGFsb2cgYXR0cmlidXRlcy4nfSA9CiAgICAgICAgJ+ebruW9leWxnuaAp+agt+S+iy3mnYPpmZDnu4TnmoTlj4LmlbDjgIInOwoKCiAgICBwdXNoIEB7ICRTZWxmLT57SmF2YVNjcmlwdFN0cmluZ3N9IC8vIFtdIH0sICgKICAgICk7Cgp9CgoxOwo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0zLjAudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6TGFuZ3VhZ2U6OnpoX1RXX0dlbmVyYWxDYXRhbG9nOwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwp1c2UgdXRmODsKCnN1YiBEYXRhIHsKICAgIG15ICRTZWxmID0gc2hpZnQ7CgogICAgIyBUZW1wbGF0ZTogQUFBR2VuZXJhbENhdGFsb2cKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Z1bmN0aW9uYWxpdHknfSA9ICflip/og70nOwoKICAgICMgVGVtcGxhdGU6IEFkbWluR2VuZXJhbENhdGFsb2cKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0dlbmVyYWwgQ2F0YWxvZyBNYW5hZ2VtZW50J30gPSAn55uu6YyE566h55CGJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0l0ZW1zIGluIENsYXNzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VkaXQgSXRlbSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgQ2xhc3MnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIEl0ZW0nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIENhdGFsb2cgSXRlbSd9ID0gJ+a3u+WKoOebrumMhOmgheebric7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgQ2F0YWxvZyBDbGFzcyd9ID0gJ+a3u+WKoOaWsOebrumMhOmhnuWIpSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDYXRhbG9nIENsYXNzJ30gPSAn55uu6YyE6aGe5YilJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VkaXQgQ2F0YWxvZyBJdGVtJ30gPSAnJzsKCiAgICAjIFN5c0NvbmZpZwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29tbWVudCAyJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NyZWF0ZSBhbmQgbWFuYWdlIHRoZSBHZW5lcmFsIENhdGFsb2cuJ30gPSAn5Ym15bu65ZKM566h55CG55uu6YyEJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZSB0aGUgZ2VuZXJhbCBjYXRhbG9nIGNvbW1lbnQgMi4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lIHRoZSBncm91cCB3aXRoIHBlcm1pc3Npb25zLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBVUkwgSlMgQ29sb3IgUGlja2VyIHBhdGguJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZG1pbkdlbmVyYWxDYXRhbG9nIGNvbmZpZ3VyYXRpb24gaW4gdGhlIGFkbWluIGFyZWEuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnR2VuZXJhbCBDYXRhbG9nJ30gPSAn55uu6YyEJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcmFtZXRlcnMgZm9yIHRoZSBleGFtcGxlIGNvbW1lbnQgMiBvZiB0aGUgZ2VuZXJhbCBjYXRhbG9nIGF0dHJpYnV0ZXMuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFyYW1ldGVycyBmb3IgdGhlIGV4YW1wbGUgcGVybWlzc2lvbiBncm91cHMgb2YgdGhlIGdlbmVyYWwgY2F0YWxvZyBhdHRyaWJ1dGVzLid9ID0KICAgICAgICAnJzsKCgogICAgcHVzaCBAeyAkU2VsZi0+e0phdmFTY3JpcHRTdHJpbmdzfSAvLyBbXSB9LCAoCiAgICApOwoKfQoKMTsK
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0zLjAudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6TW9kdWxlczo6QWRtaW5HZW5lcmFsQ2F0YWxvZzsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKCm91ciAkT2JqZWN0TWFuYWdlckRpc2FibGVkID0gMTsKCnN1YiBuZXcgewogICAgbXkgKCAkVHlwZSwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGFsbG9jYXRlIG5ldyBoYXNoIGZvciBvYmplY3QKICAgIG15ICRTZWxmID0geyVQYXJhbX07CiAgICBibGVzcyggJFNlbGYsICRUeXBlICk7CgogICAgcmV0dXJuICRTZWxmOwp9CgpzdWIgUnVuIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBnZXQgbmVlZGVkIG9iamVjdAogICAgbXkgJENvbmZpZ09iamVjdCAgICAgICAgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKTsKICAgIG15ICRQYXJhbU9iamVjdCAgICAgICAgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpXZWI6OlJlcXVlc3QnKTsKICAgIG15ICRMYXlvdXRPYmplY3QgICAgICAgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6T3V0cHV0OjpIVE1MOjpMYXlvdXQnKTsKICAgIG15ICRWYWxpZE9iamVjdCAgICAgICAgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpWYWxpZCcpOwogICAgbXkgJEdlbmVyYWxDYXRhbG9nT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkdlbmVyYWxDYXRhbG9nJyk7CgogICAgJExheW91dE9iamVjdC0+QWRkSlNEYXRhKAogICAgICAgIEtleSAgID0+ICdHZW5lcmFsQ2F0YWxvZzo6RnJvbnRlbmQ6OkpTQ29sb3JQaWNrZXJQYXRoJywKICAgICAgICBWYWx1ZSA9PiAkQ29uZmlnT2JqZWN0LT5HZXQoJ0dlbmVyYWxDYXRhbG9nOjpGcm9udGVuZDo6SlNDb2xvclBpY2tlclBhdGgnKSwKICAgICk7CgogICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwogICAgIyBjYXRhbG9nIGl0ZW0gbGlzdAogICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwogICAgaWYgKCAkU2VsZi0+e1N1YmFjdGlvbn0gZXEgJ0l0ZW1MaXN0JyApIHsKICAgICAgICBteSAkQ2xhc3MgPSAkUGFyYW1PYmplY3QtPkdldFBhcmFtKCBQYXJhbSA9PiAiQ2xhc3MiICkgfHwgJyc7CgogICAgICAgICMgY2hlY2sgbmVlZGVkIGNsYXNzCiAgICAgICAgaWYgKCAhJENsYXNzICkgewogICAgICAgICAgICByZXR1cm4gJExheW91dE9iamVjdC0+UmVkaXJlY3QoIE9QID0+ICJBY3Rpb249JFNlbGYtPntBY3Rpb259IiApOwogICAgICAgIH0KCiAgICAgICAgIyBvdXRwdXQgb3ZlcnZpZXcKICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgTmFtZSA9PiAnT3ZlcnZpZXcnLAogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIFBhcmFtICAgICA9PiBcJVBhcmFtLAogICAgICAgICAgICAgICAgQ2xhc3MgICAgID0+ICRDbGFzcywKICAgICAgICAgICAgICAgIFN1YmFjdGlvbiA9PiAkU2VsZi0+e1N1YmFjdGlvbn0sCiAgICAgICAgICAgIH0sCiAgICAgICAgKTsKICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgTmFtZSA9PiAnT3ZlcnZpZXdJdGVtJywKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAlUGFyYW0sCiAgICAgICAgICAgICAgICBDbGFzcyA9PiAkQ2xhc3MsCiAgICAgICAgICAgIH0sCiAgICAgICAgKTsKCiAgICAgICAgIyBnZXQgYXZhaWxhYmlsaXR5IGxpc3QKICAgICAgICBteSAlVmFsaWRMaXN0ID0gJFZhbGlkT2JqZWN0LT5WYWxpZExpc3QoKTsKCiAgICAgICAgIyBnZXQgY2F0YWxvZyBpdGVtIGxpc3QKICAgICAgICBteSAkSXRlbUlETGlzdCA9ICRHZW5lcmFsQ2F0YWxvZ09iamVjdC0+SXRlbUxpc3QoCiAgICAgICAgICAgIENsYXNzID0+ICRDbGFzcywKICAgICAgICAgICAgVmFsaWQgPT4gMCwKICAgICAgICApOwoKICAgICAgICAjIGNoZWNrIGl0ZW0gbGlzdAogICAgICAgIGlmICggISRJdGVtSURMaXN0IHx8ICEleyRJdGVtSURMaXN0fSApIHsKICAgICAgICAgICAgcmV0dXJuICRMYXlvdXRPYmplY3QtPkVycm9yU2NyZWVuKCk7CiAgICAgICAgfQoKICAgICAgICBmb3IgbXkgJEl0ZW1JRCAoIHNvcnQgeyAkSXRlbUlETGlzdC0+eyRhfSBjbXAgJEl0ZW1JRExpc3QtPnskYn0gfSBrZXlzICV7JEl0ZW1JRExpc3R9ICkgewoKICAgICAgICAgICAgIyBnZXQgaXRlbSBkYXRhCiAgICAgICAgICAgIG15ICRJdGVtRGF0YSA9ICRHZW5lcmFsQ2F0YWxvZ09iamVjdC0+SXRlbUdldCgKICAgICAgICAgICAgICAgIEl0ZW1JRCA9PiAkSXRlbUlELAogICAgICAgICAgICApOwoKICAgICAgICAgICAgIyBvdXRwdXQgb3ZlcnZpZXcgaXRlbSBsaXN0CiAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICAgICAgTmFtZSA9PiAnT3ZlcnZpZXdJdGVtTGlzdCcsCiAgICAgICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgICAgICAleyRJdGVtRGF0YX0sCiAgICAgICAgICAgICAgICAgICAgVmFsaWQgPT4gJFZhbGlkTGlzdHsgJEl0ZW1EYXRhLT57VmFsaWRJRH0gfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICAjIEFjdGlvbk92ZXJ2aWV3CiAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgIE5hbWUgPT4gJ0FjdGlvbkFkZEl0ZW0nLAogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgICVQYXJhbSwKICAgICAgICAgICAgICAgIENsYXNzID0+ICRDbGFzcywKICAgICAgICAgICAgfSwKICAgICAgICApOwoKICAgICAgICAjIEFjdGlvbk92ZXJ2aWV3CiAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgIE5hbWUgPT4gJ0FjdGlvbk92ZXJ2aWV3JywKICAgICAgICApOwoKICAgICAgICAjIG91dHB1dCBoZWFkZXIgYW5kIG5hdmJhcgogICAgICAgIG15ICRPdXRwdXQgPSAkTGF5b3V0T2JqZWN0LT5IZWFkZXIoKTsKICAgICAgICAkT3V0cHV0IC49ICRMYXlvdXRPYmplY3QtPk5hdmlnYXRpb25CYXIoKTsKCiAgICAgICAgIyBjcmVhdGUgb3V0cHV0IHN0cmluZwogICAgICAgICRPdXRwdXQgLj0gJExheW91dE9iamVjdC0+T3V0cHV0KAogICAgICAgICAgICBUZW1wbGF0ZUZpbGUgPT4gJ0FkbWluR2VuZXJhbENhdGFsb2cnLAogICAgICAgICAgICBEYXRhICAgICAgICAgPT4gXCVQYXJhbSwKICAgICAgICApOwoKICAgICAgICAjIGFkZCBmb290ZXIKICAgICAgICAkT3V0cHV0IC49ICRMYXlvdXRPYmplY3QtPkZvb3RlcigpOwoKICAgICAgICByZXR1cm4gJE91dHB1dDsKICAgIH0KCiAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiAgICAjIGNhdGFsb2cgaXRlbSBlZGl0CiAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiAgICBlbHNpZiAoICRTZWxmLT57U3ViYWN0aW9ufSBlcSAnSXRlbUVkaXQnICkgewogICAgICAgIG15ICVJdGVtRGF0YTsKCiAgICAgICAgIyBnZXQgcGFyYW1zCiAgICAgICAgJEl0ZW1EYXRhe0l0ZW1JRH0gPSAkUGFyYW1PYmplY3QtPkdldFBhcmFtKCBQYXJhbSA9PiAiSXRlbUlEIiApOwoKICAgICAgICAjIGFkZCBhIG5ldyBjYXRhbG9nIGl0ZW0KICAgICAgICBpZiAoICRJdGVtRGF0YXtJdGVtSUR9IGVxICdORVcnICkgewoKICAgICAgICAgICAgIyBnZXQgY2xhc3MKICAgICAgICAgICAgJEl0ZW1EYXRhe0NsYXNzfSA9ICRQYXJhbU9iamVjdC0+R2V0UGFyYW0oIFBhcmFtID0+ICJDbGFzcyIgKTsKCiAgICAgICAgICAgICMgcmVkaXJlY3QgdG8gb3ZlcnZpZXcKICAgICAgICAgICAgaWYgKCAhJEl0ZW1EYXRhe0NsYXNzfSApIHsKICAgICAgICAgICAgICAgIHJldHVybiAkTGF5b3V0T2JqZWN0LT5SZWRpcmVjdCggT1AgPT4gIkFjdGlvbj0kU2VsZi0+e0FjdGlvbn0iICk7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgICMgZWRpdCBhbiBleGlzdGluZyBjYXRhbG9nIGl0ZW0KICAgICAgICBlbHNlIHsKCiAgICAgICAgICAgICMgZ2V0IGl0ZW0gZGF0YQogICAgICAgICAgICBteSAkSXRlbURhdGFSZWYgPSAkR2VuZXJhbENhdGFsb2dPYmplY3QtPkl0ZW1HZXQoCiAgICAgICAgICAgICAgICBJdGVtSUQgPT4gJEl0ZW1EYXRhe0l0ZW1JRH0sCiAgICAgICAgICAgICk7CgogICAgICAgICAgICAjIGNoZWNrIGl0ZW0gZGF0YQogICAgICAgICAgICBpZiAoICEkSXRlbURhdGFSZWYgKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gJExheW91dE9iamVjdC0+RXJyb3JTY3JlZW4oKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgJUl0ZW1EYXRhID0gJXskSXRlbURhdGFSZWZ9OwogICAgICAgIH0KCiAgICAgICAgIyBvdXRwdXQgb3ZlcnZpZXcKICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgTmFtZSA9PiAnT3ZlcnZpZXcnLAogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgICVQYXJhbSwKICAgICAgICAgICAgICAgIENsYXNzICAgICA9PiAkSXRlbURhdGF7Q2xhc3N9LAogICAgICAgICAgICAgICAgU3ViYWN0aW9uID0+ICRTZWxmLT57U3ViYWN0aW9ufSwKICAgICAgICAgICAgICAgIEl0ZW1OYW1lICA9PiAkSXRlbURhdGF7TmFtZX0sCiAgICAgICAgICAgICAgICBJdGVtRWRpdCAgPT4gJEl0ZW1EYXRhe0l0ZW1JRH0gZXEgJ05FVycgPyAwIDogMSwKICAgICAgICAgICAgfSwKICAgICAgICApOwoKICAgICAgICAjIGdlbmVyYXRlIFZhbGlkT3B0aW9uU3RyZwogICAgICAgIG15ICVWYWxpZExpc3QgICAgICAgID0gJFZhbGlkT2JqZWN0LT5WYWxpZExpc3QoKTsKICAgICAgICBteSAlVmFsaWRMaXN0UmV2ZXJzZSA9IHJldmVyc2UgJVZhbGlkTGlzdDsKICAgICAgICBteSAkVmFsaWRPcHRpb25TdHJnICA9ICRMYXlvdXRPYmplY3QtPkJ1aWxkU2VsZWN0aW9uKAogICAgICAgICAgICBOYW1lICAgICAgID0+ICdWYWxpZElEJywKICAgICAgICAgICAgRGF0YSAgICAgICA9PiBcJVZhbGlkTGlzdCwKICAgICAgICAgICAgU2VsZWN0ZWRJRCA9PiAkSXRlbURhdGF7VmFsaWRJRH0gfHwgJFZhbGlkTGlzdFJldmVyc2V7dmFsaWR9LAogICAgICAgICAgICBDbGFzcyAgICAgID0+ICdNb2Rlcm5pemUnLAogICAgICAgICk7CgogICAgICAgICMgb3V0cHV0IEl0ZW1FZGl0CiAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgIE5hbWUgPT4gJ0l0ZW1FZGl0JywKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAlSXRlbURhdGEsCiAgICAgICAgICAgICAgICBWYWxpZE9wdGlvblN0cmcgPT4gJFZhbGlkT3B0aW9uU3RyZywKICAgICAgICAgICAgICAgIEl0ZW1FZGl0ICAgICAgICA9PiAkSXRlbURhdGF7SXRlbUlEfSBlcSAnTkVXJyA/IDAgOiAxLAogICAgICAgICAgICB9LAogICAgICAgICk7CgogICAgICAgICMgc2hvdyBlYWNoIHByZWZlcmVuY2VzIHNldHRpbmcKICAgICAgICBteSAlUHJlZmVyZW5jZXMgPSAoKTsKICAgICAgICBpZiAoICRDb25maWdPYmplY3QtPkdldCgnR2VuZXJhbENhdGFsb2dQcmVmZXJlbmNlcycpICkgewogICAgICAgICAgICAlUHJlZmVyZW5jZXMgPSAleyAkQ29uZmlnT2JqZWN0LT5HZXQoJ0dlbmVyYWxDYXRhbG9nUHJlZmVyZW5jZXMnKSB9OwogICAgICAgIH0KCiAgICAgICAgSVRFTToKICAgICAgICBmb3IgbXkgJEl0ZW0gKCBzb3J0IGtleXMgJVByZWZlcmVuY2VzICkgewoKICAgICAgICAgICAgIyBza2lwIGl0ZW1zIHRoYXQgZG9uJ3QgYmVsb25nIHRvIHRoZSBjbGFzcwogICAgICAgICAgICBpZiAoICRQcmVmZXJlbmNlc3skSXRlbX0tPntDbGFzc30gJiYgJFByZWZlcmVuY2VzeyRJdGVtfS0+e0NsYXNzfSBuZSAkSXRlbURhdGF7Q2xhc3N9ICkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgbmV4dCBJVEVNOwogICAgICAgICAgICB9CgogICAgICAgICAgICAjIGZpbmQgb3V0cHV0IG1vZHVsZQogICAgICAgICAgICBteSAkTW9kdWxlID0gJFByZWZlcmVuY2VzeyRJdGVtfS0+e01vZHVsZX0KICAgICAgICAgICAgICAgIHx8ICdLZXJuZWw6Ok91dHB1dDo6SFRNTDo6R2VuZXJhbENhdGFsb2dQcmVmZXJlbmNlczo6R2VuZXJpYyc7CgogICAgICAgICAgICAjIGxvYWQgbW9kdWxlCiAgICAgICAgICAgIGlmICggISRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpNYWluJyktPlJlcXVpcmUoJE1vZHVsZSkgKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gJExheW91dE9iamVjdC0+RmF0YWxFcnJvcigpOwogICAgICAgICAgICB9CgogICAgICAgICAgICAjIGNyZWF0ZSBvYmplY3QgZm9yIHRoaXMgcHJlZmVyZW5jZXMgaXRlbQogICAgICAgICAgICBteSAkT2JqZWN0ID0gJE1vZHVsZS0+bmV3KAogICAgICAgICAgICAgICAgJXskU2VsZn0sCiAgICAgICAgICAgICAgICBDb25maWdJdGVtID0+ICRQcmVmZXJlbmNlc3skSXRlbX0sCiAgICAgICAgICAgICAgICBEZWJ1ZyAgICAgID0+ICRTZWxmLT57RGVidWd9LAogICAgICAgICAgICApOwoKICAgICAgICAgICAgIyBzaG93IGFsbCBwYXJhbWV0ZXJzCiAgICAgICAgICAgIG15IEBQYXJhbXMgPSAkT2JqZWN0LT5QYXJhbSggR2VuZXJhbENhdGFsb2dEYXRhID0+IHsgJUl0ZW1EYXRhLCAlUGFyYW0gfSApOwogICAgICAgICAgICBmb3IgbXkgJFBhcmFtSXRlbSAoQFBhcmFtcykgewoKICAgICAgICAgICAgICAgIGlmICgKICAgICAgICAgICAgICAgICAgICByZWYoICRQYXJhbUl0ZW0tPntEYXRhfSApIGVxICdIQVNIJwogICAgICAgICAgICAgICAgICAgIHx8IHJlZiggJFByZWZlcmVuY2VzeyRJdGVtfS0+e0RhdGF9ICkgZXEgJ0hBU0gnCiAgICAgICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICRQYXJhbUl0ZW0tPnsnT3B0aW9uJ30gPSAkTGF5b3V0T2JqZWN0LT5CdWlsZFNlbGVjdGlvbigKICAgICAgICAgICAgICAgICAgICAgICAgJXsgJFByZWZlcmVuY2VzeyRJdGVtfSB9LAogICAgICAgICAgICAgICAgICAgICAgICAleyRQYXJhbUl0ZW19LAogICAgICAgICAgICAgICAgICAgICAgICBDbGFzcyA9PiAnTW9kZXJuaXplJywKICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICAgICAgICAgIE5hbWUgPT4gJFBhcmFtSXRlbS0+e0Jsb2NrfSB8fCAkUHJlZmVyZW5jZXN7JEl0ZW19LT57QmxvY2t9IHx8ICdPcHRpb24nLAogICAgICAgICAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAleyAkUHJlZmVyZW5jZXN7JEl0ZW19IH0sCiAgICAgICAgICAgICAgICAgICAgICAgICV7JFBhcmFtSXRlbX0sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIGlmICggJEl0ZW1EYXRhe0NsYXNzfSBlcSAnTkVXJyApIHsKCiAgICAgICAgICAgICMgb3V0cHV0IEl0ZW1FZGl0Q2xhc3NBZGQKICAgICAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgICAgICBOYW1lID0+ICdJdGVtRWRpdENsYXNzQWRkJywKICAgICAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgICAgIENsYXNzID0+ICRJdGVtRGF0YXtDbGFzc30sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICApOwogICAgICAgIH0KICAgICAgICBlbHNlIHsKCiAgICAgICAgICAgICMgb3V0cHV0IEl0ZW1FZGl0Q2xhc3NFeGlzdAogICAgICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgICAgIE5hbWUgPT4gJ0l0ZW1FZGl0Q2xhc3NFeGlzdCcsCiAgICAgICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgICAgICBDbGFzcyA9PiAkSXRlbURhdGF7Q2xhc3N9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgICMgQWN0aW9uT3ZlcnZpZXcKICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgTmFtZSA9PiAnQWN0aW9uT3ZlcnZpZXcnLAogICAgICAgICk7CgogICAgICAgICMgb3V0cHV0IGhlYWRlcgogICAgICAgIG15ICRPdXRwdXQgPSAkTGF5b3V0T2JqZWN0LT5IZWFkZXIoKTsKICAgICAgICAkT3V0cHV0IC49ICRMYXlvdXRPYmplY3QtPk5hdmlnYXRpb25CYXIoKTsKCiAgICAgICAgIyBjcmVhdGUgb3V0cHV0IHN0cmluZwogICAgICAgICRPdXRwdXQgLj0gJExheW91dE9iamVjdC0+T3V0cHV0KAogICAgICAgICAgICBUZW1wbGF0ZUZpbGUgPT4gJ0FkbWluR2VuZXJhbENhdGFsb2cnLAogICAgICAgICAgICBEYXRhICAgICAgICAgPT4gXCVQYXJhbSwKICAgICAgICApOwoKICAgICAgICAjIGFkZCBmb290ZXIKICAgICAgICAkT3V0cHV0IC49ICRMYXlvdXRPYmplY3QtPkZvb3RlcigpOwoKICAgICAgICByZXR1cm4gJE91dHB1dDsKICAgIH0KCiAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiAgICAjIGNhdGFsb2cgaXRlbSBzYXZlCiAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiAgICBlbHNpZiAoICRTZWxmLT57U3ViYWN0aW9ufSBlcSAnSXRlbVNhdmUnICkgewogICAgICAgIG15ICVJdGVtRGF0YTsKCiAgICAgICAgIyBnZXQgcGFyYW1zCiAgICAgICAgZm9yIG15ICRQYXJhbSAocXcoQ2xhc3MgSXRlbUlEIFZhbGlkSUQgQ29tbWVudCkpIHsKICAgICAgICAgICAgJEl0ZW1EYXRheyRQYXJhbX0gPSAkUGFyYW1PYmplY3QtPkdldFBhcmFtKCBQYXJhbSA9PiAkUGFyYW0gKSB8fCAnJzsKICAgICAgICB9CgogICAgICAgICMgZ2V0IG5hbWUgcGFyYW0sIG5hbWUgbXVzdCBiZSBub3QgZW1wdHksIGJ1dCBudW1iZXIgemVybyAoMCkgaXMgYWxsb3dlZAogICAgICAgICRJdGVtRGF0YXtOYW1lfSA9ICRQYXJhbU9iamVjdC0+R2V0UGFyYW0oIFBhcmFtID0+ICdOYW1lJyApOwoKICAgICAgICAjIGNoZWNrIGNsYXNzCiAgICAgICAgaWYgKCAkSXRlbURhdGF7Q2xhc3N9IGVxICdORVcnICkgewogICAgICAgICAgICByZXR1cm4gJExheW91dE9iamVjdC0+UmVkaXJlY3QoIE9QID0+ICJBY3Rpb249JFNlbGYtPntBY3Rpb259IiApOwogICAgICAgIH0KCiAgICAgICAgIyBzYXZlIHRvIGRhdGFiYXNlCiAgICAgICAgbXkgJFN1Y2Nlc3M7CiAgICAgICAgbXkgJEl0ZW1JRCA9ICRJdGVtRGF0YXtJdGVtSUR9OwogICAgICAgIGlmICggJEl0ZW1EYXRhe0l0ZW1JRH0gZXEgJ05FVycgKSB7CiAgICAgICAgICAgICRTdWNjZXNzID0gJEdlbmVyYWxDYXRhbG9nT2JqZWN0LT5JdGVtQWRkKAogICAgICAgICAgICAgICAgJUl0ZW1EYXRhLAogICAgICAgICAgICAgICAgVXNlcklEID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgJEl0ZW1JRCA9ICRTdWNjZXNzOwogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICAgJFN1Y2Nlc3MgPSAkR2VuZXJhbENhdGFsb2dPYmplY3QtPkl0ZW1VcGRhdGUoCiAgICAgICAgICAgICAgICAlSXRlbURhdGEsCiAgICAgICAgICAgICAgICBVc2VySUQgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgIyB1cGRhdGUgcHJlZmVyZW5jZXMKICAgICAgICBteSAkR0NEYXRhICAgICAgPSAkR2VuZXJhbENhdGFsb2dPYmplY3QtPkl0ZW1HZXQoIEl0ZW1JRCA9PiAkSXRlbUlEICk7CiAgICAgICAgbXkgJVByZWZlcmVuY2VzID0gKCk7CiAgICAgICAgbXkgJE5vdGUgICAgICAgID0gJyc7CgogICAgICAgIGlmICggJENvbmZpZ09iamVjdC0+R2V0KCdHZW5lcmFsQ2F0YWxvZ1ByZWZlcmVuY2VzJykgKSB7CiAgICAgICAgICAgICVQcmVmZXJlbmNlcyA9ICV7ICRDb25maWdPYmplY3QtPkdldCgnR2VuZXJhbENhdGFsb2dQcmVmZXJlbmNlcycpIH07CiAgICAgICAgfQoKICAgICAgICBmb3IgbXkgJEl0ZW0gKCBzb3J0IGtleXMgJVByZWZlcmVuY2VzICkgewogICAgICAgICAgICBteSAkTW9kdWxlID0gJFByZWZlcmVuY2VzeyRJdGVtfS0+e01vZHVsZX0KICAgICAgICAgICAgICAgIHx8ICdLZXJuZWw6Ok91dHB1dDo6SFRNTDo6R2VuZXJhbENhdGFsb2dQcmVmZXJlbmNlczo6R2VuZXJpYyc7CgogICAgICAgICAgICAjIGxvYWQgbW9kdWxlCiAgICAgICAgICAgIGlmICggISRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpNYWluJyktPlJlcXVpcmUoJE1vZHVsZSkgKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gJExheW91dE9iamVjdC0+RmF0YWxFcnJvcigpOwogICAgICAgICAgICB9CgogICAgICAgICAgICBteSAkT2JqZWN0ID0gJE1vZHVsZS0+bmV3KAogICAgICAgICAgICAgICAgJXskU2VsZn0sCiAgICAgICAgICAgICAgICBDb25maWdJdGVtID0+ICRQcmVmZXJlbmNlc3skSXRlbX0sCiAgICAgICAgICAgICAgICBEZWJ1ZyAgICAgID0+ICRTZWxmLT57RGVidWd9LAogICAgICAgICAgICApOwogICAgICAgICAgICBteSBAUGFyYW1zID0gJE9iamVjdC0+UGFyYW0oIEdlbmVyYWxDYXRhbG9nRGF0YSA9PiAkR0NEYXRhICk7CiAgICAgICAgICAgIGlmIChAUGFyYW1zKSB7CiAgICAgICAgICAgICAgICBteSAlR2V0UGFyYW0gPSAoKTsKICAgICAgICAgICAgICAgIGZvciBteSAkUGFyYW1JdGVtIChAUGFyYW1zKSB7CiAgICAgICAgICAgICAgICAgICAgbXkgQEFycmF5ID0gJFBhcmFtT2JqZWN0LT5HZXRBcnJheSggUGFyYW0gPT4gJFBhcmFtSXRlbS0+e05hbWV9ICk7CiAgICAgICAgICAgICAgICAgICAgJEdldFBhcmFteyAkUGFyYW1JdGVtLT57TmFtZX0gfSA9IFxAQXJyYXk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpZiAoCiAgICAgICAgICAgICAgICAgICAgISRPYmplY3QtPlJ1bigKICAgICAgICAgICAgICAgICAgICAgICAgR2V0UGFyYW0gPT4gXCVHZXRQYXJhbSwKICAgICAgICAgICAgICAgICAgICAgICAgSXRlbUlEICAgPT4gJEdDRGF0YS0+e0l0ZW1JRH0sCiAgICAgICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAkTm90ZSAuPSAkTGF5b3V0T2JqZWN0LT5Ob3RpZnkoIEluZm8gPT4gJE9iamVjdC0+RXJyb3IoKSApOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBpZiAoICEkU3VjY2VzcyApIHsKICAgICAgICAgICAgcmV0dXJuICRMYXlvdXRPYmplY3QtPkVycm9yU2NyZWVuKCk7CiAgICAgICAgfQoKICAgICAgICBteSAkQ29udGludWVBZnRlclNhdmUgPSAkUGFyYW1PYmplY3QtPkdldFBhcmFtKCBQYXJhbSA9PiAnQ29udGludWVBZnRlclNhdmUnICk7CiAgICAgICAgaWYgKCRDb250aW51ZUFmdGVyU2F2ZSkgewogICAgICAgICAgICByZXR1cm4gJExheW91dE9iamVjdC0+UmVkaXJlY3QoCiAgICAgICAgICAgICAgICBPUCA9PiAiQWN0aW9uPSRTZWxmLT57QWN0aW9ufTtTdWJhY3Rpb249SXRlbUVkaXQ7Q2xhc3M9JEl0ZW1EYXRhe0NsYXNzfTtJdGVtSUQ9JEl0ZW1EYXRhe0l0ZW1JRH0iCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICAjIHJlZGlyZWN0IHRvIG92ZXJ2aWV3IGNsYXNzIGxpc3QKICAgICAgICByZXR1cm4gJExheW91dE9iamVjdC0+UmVkaXJlY3QoCiAgICAgICAgICAgIE9QID0+ICJBY3Rpb249JFNlbGYtPntBY3Rpb259O1N1YmFjdGlvbj1JdGVtTGlzdDtDbGFzcz0kSXRlbURhdGF7Q2xhc3N9IgogICAgICAgICk7CiAgICB9CgogICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwogICAgIyBvdmVydmlldwogICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwogICAgZWxzZSB7CgogICAgICAgICMgb3V0cHV0IG92ZXJ2aWV3CiAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgIE5hbWUgPT4gJ092ZXJ2aWV3JywKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAlUGFyYW0sCiAgICAgICAgICAgIH0sCiAgICAgICAgKTsKICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgTmFtZSA9PiAnT3ZlcnZpZXdDbGFzcycsCiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgJVBhcmFtLAogICAgICAgICAgICB9LAogICAgICAgICk7CgogICAgICAgICMgZ2V0IGNhdGFsb2cgY2xhc3MgbGlzdAogICAgICAgIG15ICRDbGFzc0xpc3QgPSAkR2VuZXJhbENhdGFsb2dPYmplY3QtPkNsYXNzTGlzdCgpOwoKICAgICAgICBmb3IgbXkgJENsYXNzICggQHskQ2xhc3NMaXN0fSApIHsKCiAgICAgICAgICAgICMgb3V0cHV0IG92ZXJ2aWV3IGNsYXNzIGxpc3QKICAgICAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgICAgICBOYW1lID0+ICdPdmVydmlld0NsYXNzTGlzdCcsCiAgICAgICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgICAgICBDbGFzcyA9PiAkQ2xhc3MsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgIyBBY3Rpb25BZGRDbGFzcwogICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICBOYW1lID0+ICdBY3Rpb25BZGRDbGFzcycsCiAgICAgICAgKTsKCiAgICAgICAgIyBvdXRwdXQgaGVhZGVyIGFuZCBuYXZiYXIKICAgICAgICBteSAkT3V0cHV0ID0gJExheW91dE9iamVjdC0+SGVhZGVyKCk7CiAgICAgICAgJE91dHB1dCAuPSAkTGF5b3V0T2JqZWN0LT5OYXZpZ2F0aW9uQmFyKCk7CgogICAgICAgICMgY3JlYXRlIG91dHB1dCBzdHJpbmcKICAgICAgICAkT3V0cHV0IC49ICRMYXlvdXRPYmplY3QtPk91dHB1dCgKICAgICAgICAgICAgVGVtcGxhdGVGaWxlID0+ICdBZG1pbkdlbmVyYWxDYXRhbG9nJywKICAgICAgICAgICAgRGF0YSAgICAgICAgID0+IFwlUGFyYW0sCiAgICAgICAgKTsKCiAgICAgICAgIyBhZGQgZm9vdGVyCiAgICAgICAgJE91dHB1dCAuPSAkTGF5b3V0T2JqZWN0LT5Gb290ZXIoKTsKCiAgICAgICAgcmV0dXJuICRPdXRwdXQ7CiAgICB9Cn0KCjE7Cg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0zLjAudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6T3V0cHV0OjpIVE1MOjpHZW5lcmFsQ2F0YWxvZ1ByZWZlcmVuY2VzOjpHZW5lcmljOwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwoKb3VyIEBPYmplY3REZXBlbmRlbmNpZXMgPSAoCiAgICAnS2VybmVsOjpTeXN0ZW06OkdlbmVyYWxDYXRhbG9nJywKICAgICdLZXJuZWw6OlN5c3RlbTo6R3JvdXAnLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpXZWI6OlJlcXVlc3QnLAopOwoKc3ViIG5ldyB7CiAgICBteSAoICRUeXBlLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgYWxsb2NhdGUgbmV3IGhhc2ggZm9yIG9iamVjdAogICAgbXkgJFNlbGYgPSB7JVBhcmFtfTsKICAgIGJsZXNzKCAkU2VsZiwgJFR5cGUgKTsKCiAgICAjIGdldCBuZWVkZWQgcGFyYW1zCiAgICBmb3IgbXkgJE5lZWRlZCAocXcoIFVzZXJJRCBDb25maWdJdGVtICkpIHsKICAgICAgICBkaWUgIkdvdCBubyAkTmVlZGVkISIgaWYgKCAhJFNlbGYtPnskTmVlZGVkfSApOwogICAgfQoKICAgIHJldHVybiAkU2VsZjsKfQoKc3ViIFBhcmFtIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgbXkgQFBhcmFtcyA9ICgpOwogICAgbXkgJEdldFBhcmFtCiAgICAgICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6V2ViOjpSZXF1ZXN0JyktPkdldFBhcmFtKCBQYXJhbSA9PiAkU2VsZi0+e0NvbmZpZ0l0ZW19LT57UHJlZktleX0gKTsKCiAgICBpZiAoICFkZWZpbmVkKCRHZXRQYXJhbSkgKSB7CiAgICAgICAgJEdldFBhcmFtID0gZGVmaW5lZCggJFBhcmFte0dlbmVyYWxDYXRhbG9nRGF0YX0tPnsgJFNlbGYtPntDb25maWdJdGVtfS0+e1ByZWZLZXl9IH0gKQogICAgICAgICAgICA/ICRQYXJhbXtHZW5lcmFsQ2F0YWxvZ0RhdGF9LT57ICRTZWxmLT57Q29uZmlnSXRlbX0tPntQcmVmS2V5fSB9CiAgICAgICAgICAgIDogJFNlbGYtPntDb25maWdJdGVtfS0+e0RhdGFTZWxlY3RlZH07CiAgICB9CgogICAgaWYgKCAhKCBkZWZpbmVkICRTZWxmLT57Q29uZmlnSXRlbX0tPntCbG9ja30gJiYgJFNlbGYtPntDb25maWdJdGVtfS0+e0Jsb2NrfSApICkgewogICAgICAgICRTZWxmLT57Q29uZmlnSXRlbX0tPntCbG9ja30gPSAnVGV4dCc7CiAgICB9CgogICAgaWYgKCAkU2VsZi0+e0NvbmZpZ0l0ZW19LT57QmxvY2t9IGVxICdQZXJtaXNzaW9uJyApIHsKICAgICAgICAkUGFyYW17RGF0YX0gICAgICAgICA9IHsgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06Okdyb3VwJyktPkdyb3VwTGlzdCggVmFsaWQgPT4gMSApIH07CiAgICAgICAgJFBhcmFte1Bvc3NpYmxlTm9uZX0gPSAxOwogICAgICAgICRQYXJhbXtCbG9ja30gICAgICAgID0gJ09wdGlvbic7CiAgICB9CgogICAgcHVzaCgKICAgICAgICBAUGFyYW1zLAogICAgICAgIHsKICAgICAgICAgICAgJVBhcmFtLAogICAgICAgICAgICBOYW1lICAgICAgID0+ICRTZWxmLT57Q29uZmlnSXRlbX0tPntQcmVmS2V5fSwKICAgICAgICAgICAgU2VsZWN0ZWRJRCA9PiAkR2V0UGFyYW0sCiAgICAgICAgfSwKICAgICk7CgogICAgcmV0dXJuIEBQYXJhbXM7Cn0KCnN1YiBSdW4gewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICBmb3IgbXkgJEtleSAoIHNvcnQga2V5cyAleyAkUGFyYW17R2V0UGFyYW19IH0gKSB7CiAgICAgICAgbXkgQEFycmF5ID0gQHsgJFBhcmFte0dldFBhcmFtfS0+eyRLZXl9IH07CiAgICAgICAgZm9yIG15ICRWYWx1ZSAoQEFycmF5KSB7CgogICAgICAgICAgICAjIHByZWYgdXBkYXRlIGRiCiAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpHZW5lcmFsQ2F0YWxvZycpLT5HZW5lcmFsQ2F0YWxvZ1ByZWZlcmVuY2VzU2V0KAogICAgICAgICAgICAgICAgSXRlbUlEID0+ICRQYXJhbXtJdGVtSUR9LAogICAgICAgICAgICAgICAgS2V5ICAgID0+ICRLZXksCiAgICAgICAgICAgICAgICBWYWx1ZSAgPT4gJFZhbHVlLAogICAgICAgICAgICApOwogICAgICAgIH0KICAgIH0KCiAgICAkU2VsZi0+e01lc3NhZ2V9ID0gJ1ByZWZlcmVuY2VzIHVwZGF0ZWQgc3VjY2Vzc2Z1bGx5ISc7CiAgICByZXR1cm4gMTsKfQoKc3ViIEVycm9yIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgcmV0dXJuICRTZWxmLT57RXJyb3J9IHx8ICcnOwp9CgpzdWIgTWVzc2FnZSB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgIHJldHVybiAkU2VsZi0+e01lc3NhZ2V9IHx8ICcnOwp9CgoxOwo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0zLjAudHh0LgojIC0tCgojIENvbW1vbgpbJSBUcmFuc2xhdGUoIkZ1bmN0aW9uYWxpdHkiKSB8IGh0bWwgJV0K
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0zLjAudHh0LgojIC0tCgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJPdmVydmlldyIpICVdCjxkaXYgY2xhc3M9Ik1haW5Cb3ggQVJJQVJvbGVNYWluIExheW91dEZpeGVkU2lkZWJhciBTaWRlYmFyRmlyc3QiPgogICAgPGgxPlslIFRyYW5zbGF0ZSgiR2VuZXJhbCBDYXRhbG9nIE1hbmFnZW1lbnQiKSB8IGh0bWwgJV08L2gxPgoKICAgIFslIFVTRSBJdGVtc1RpdGxlID0gU3RyaW5nKFRyYW5zbGF0ZSgiSXRlbXMgaW4gQ2xhc3MiKSkgJV0KICAgIFslIFVTRSBFZGl0VGl0bGUgID0gU3RyaW5nKFRyYW5zbGF0ZSgiRWRpdCBJdGVtIikpICVdCgogICAgWyUgQnJlYWRjcnVtYlBhdGggPSBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIE5hbWUgPT4gVHJhbnNsYXRlKCdHZW5lcmFsIENhdGFsb2cgTWFuYWdlbWVudCcpLAogICAgICAgICAgICAgICAgTGluayA9PiAnQWRtaW5HZW5lcmFsQ2F0YWxvZycsCiAgICAgICAgICAgIH0sCiAgICAgICAgXTsKCiAgICAgICAgSUYgRGF0YS5DbGFzcyAmJiBEYXRhLkNsYXNzID09ICdORVcnOwoKICAgICAgICAgICAgQnJlYWRjcnVtYlBhdGgucHVzaCh7CiAgICAgICAgICAgICAgICBOYW1lID0+IFRyYW5zbGF0ZSgnQWRkIENsYXNzJyksCiAgICAgICAgICAgIH0pOwoKICAgICAgICBFTFNJRiBEYXRhLkNsYXNzOwoKICAgICAgICAgICAgQ2xhc3NVUkkgPSBEYXRhLkNsYXNzOwoKICAgICAgICAgICAgQnJlYWRjcnVtYlBhdGgucHVzaCh7CiAgICAgICAgICAgICAgICBOYW1lID0+IEl0ZW1zVGl0bGUuYXBwZW5kKCAnOiAnLCBEYXRhLkNsYXNzICksCiAgICAgICAgICAgICAgICBMaW5rID0+ICdBZG1pbkdlbmVyYWxDYXRhbG9nO1N1YmFjdGlvbj1JdGVtTGlzdDtDbGFzcz0nIF8gQ2xhc3NVUkksCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgSUYgRGF0YS5TdWJhY3Rpb24gJiYgRGF0YS5TdWJhY3Rpb24gPT0gJ0l0ZW1FZGl0JzsKICAgICAgICAgICAgICAgIEJyZWFkY3J1bWJQYXRoLnB1c2goewogICAgICAgICAgICAgICAgICAgIE5hbWUgPT4gRGF0YS5JdGVtRWRpdCA/IEVkaXRUaXRsZS5hcHBlbmQoICc6ICcsIERhdGEuSXRlbU5hbWUgKSA6IFRyYW5zbGF0ZSgnQWRkIEl0ZW0nKSwKICAgICAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgRU5EOwoKICAgICAgICBFTkQ7CiAgICAlXQoKICAgIFslIElOQ0xVREUgIkJyZWFkY3J1bWIudHQiIFBhdGggPSBCcmVhZGNydW1iUGF0aCAlXQoKICAgIDxkaXYgY2xhc3M9IlNpZGViYXJDb2x1bW4iPgogICAgICAgIDxkaXYgY2xhc3M9IldpZGdldFNpbXBsZSI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9IkhlYWRlciI+CiAgICAgICAgICAgICAgICA8aDI+WyUgVHJhbnNsYXRlKCJBY3Rpb25zIikgfCBodG1sICVdPC9oMj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9J0NvbnRlbnQnPgogICAgICAgICAgICAgICAgPHVsIGNsYXNzPSJBY3Rpb25MaXN0Ij4KWyUgUmVuZGVyQmxvY2tTdGFydCgiQWN0aW9uQWRkSXRlbSIpICVdCiAgICAgICAgICAgICAgICAgICAgPGxpPgogICAgICAgICAgICAgICAgICAgICAgICA8Zm9ybSBhY3Rpb249IlslIEVudigiQ0dJSGFuZGxlIikgJV0iIG1ldGhvZD0iZ2V0Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IkFjdGlvbiIgdmFsdWU9IlslIEVudigiQWN0aW9uIikgJV0iLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IlN1YmFjdGlvbiIgdmFsdWU9Ikl0ZW1FZGl0Ii8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJDbGFzcyIgdmFsdWU9IlslIERhdGEuQ2xhc3MgfCBodG1sICVdIi8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJJdGVtSUQiIHZhbHVlPSJORVciLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9IkNhbGxGb3JBY3Rpb24gRnVsbHNpemUgQ2VudGVyIENyZWF0ZSIgdHlwZT0ic3VibWl0IiB2YWx1ZT0iWyUgVHJhbnNsYXRlKCJBZGQiKSB8IGh0bWwgJV0iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPjxpIGNsYXNzPSJmYSBmYS1wbHVzLXNxdWFyZSI+PC9pPlslIFRyYW5zbGF0ZSgiQWRkIENhdGFsb2cgSXRlbSIpIHwgaHRtbCAlXTwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPgogICAgICAgICAgICAgICAgICAgICAgICA8L2Zvcm0+CiAgICAgICAgICAgICAgICAgICAgPC9saT4KWyUgUmVuZGVyQmxvY2tFbmQoIkFjdGlvbkFkZEl0ZW0iKSAlXQpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJBY3Rpb25BZGRDbGFzcyIpICVdCiAgICAgICAgICAgICAgICAgICAgPGxpPgogICAgICAgICAgICAgICAgICAgICAgICA8Zm9ybSBhY3Rpb249IlslIEVudigiQ0dJSGFuZGxlIikgJV0iIG1ldGhvZD0iZ2V0Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IkFjdGlvbiIgdmFsdWU9IlslIEVudigiQWN0aW9uIikgJV0iLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IlN1YmFjdGlvbiIgdmFsdWU9Ikl0ZW1FZGl0Ii8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJJdGVtSUQiIHZhbHVlPSJORVciLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IkNsYXNzIiB2YWx1ZT0iTkVXIi8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJDYWxsRm9yQWN0aW9uIEZ1bGxzaXplIENlbnRlciBDcmVhdGUiIHR5cGU9InN1Ym1pdCIgdmFsdWU9IlslIFRyYW5zbGF0ZSgiQWRkIikgfCBodG1sICVdIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj48aSBjbGFzcz0iZmEgZmEtcGx1cy1zcXVhcmUiPjwvaT5bJSBUcmFuc2xhdGUoIkFkZCBDYXRhbG9nIENsYXNzIikgfCBodG1sICVdPC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZm9ybT4KICAgICAgICAgICAgICAgICAgICA8L2xpPgpbJSBSZW5kZXJCbG9ja0VuZCgiQWN0aW9uQWRkQ2xhc3MiKSAlXQpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJBY3Rpb25PdmVydmlldyIpICVdCiAgICAgICAgICAgICAgICAgICAgPGxpPgogICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJbJSBFbnYoIkJhc2VsaW5rIikgJV1BY3Rpb249WyUgRW52KCJBY3Rpb24iKSAlXSIgY2xhc3M9IkNhbGxGb3JBY3Rpb24gRnVsbHNpemUgQ2VudGVyIj48c3Bhbj48aSBjbGFzcz0iZmEgZmEtY2FyZXQtbGVmdCI+PC9pPlslIFRyYW5zbGF0ZSgiR28gdG8gb3ZlcnZpZXciKSB8IGh0bWwgJV08L3NwYW4+PC9hPgogICAgICAgICAgICAgICAgICAgIDwvbGk+ClslIFJlbmRlckJsb2NrRW5kKCJBY3Rpb25PdmVydmlldyIpICVdCiAgICAgICAgICAgICAgICA8L3VsPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgIDwvZGl2PgoKICAgIDxkaXYgY2xhc3M9IkNvbnRlbnRDb2x1bW4iPgogICAgICAgIDxkaXYgY2xhc3M9IldpZGdldFNpbXBsZSI+ClslIFJlbmRlckJsb2NrU3RhcnQoIk92ZXJ2aWV3Q2xhc3MiKSAlXQogICAgICAgICAgICA8ZGl2IGNsYXNzPSJIZWFkZXIiPgogICAgICAgICAgICAgICAgPGgyPlslIFRyYW5zbGF0ZSgiTGlzdCIpIHwgaHRtbCAlXTwvaDI+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJDb250ZW50Ij4KICAgICAgICAgICAgICAgIDx0YWJsZSBjbGFzcz0iRGF0YVRhYmxlIj4KICAgICAgICAgICAgICAgICAgICA8dGhlYWQ+CiAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aD5bJSBUcmFuc2xhdGUoIkNhdGFsb2cgQ2xhc3MiKSB8IGh0bWwgJV08L3RoPgogICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgogICAgICAgICAgICAgICAgICAgIDwvdGhlYWQ+CiAgICAgICAgICAgICAgICAgICAgPHRib2R5PgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJPdmVydmlld0NsYXNzTGlzdCIpICVdCiAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBjbGFzcz0iQXNCbG9jayIgIGhyZWY9IlslIEVudigiQmFzZWxpbmsiKSAlXUFjdGlvbj1bJSBFbnYoIkFjdGlvbiIpICVdO1N1YmFjdGlvbj1JdGVtTGlzdDtDbGFzcz1bJSBEYXRhLkNsYXNzIHwgdXJpICVdIj5bJSBEYXRhLkNsYXNzIHwgaHRtbCAlXTwvYT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+ClslIFJlbmRlckJsb2NrRW5kKCJPdmVydmlld0NsYXNzTGlzdCIpICVdCiAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KICAgICAgICAgICAgICAgIDwvdGFibGU+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+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0iWyUgRGF0YS5OYW1lIHwgaHRtbCAlXSIgaWQ9IlslIERhdGEuTmFtZSB8IGh0bWwgJV0iIHZhbHVlPSJbJSBEYXRhLlNlbGVjdGVkSUQgfCBodG1sICVdIiBjbGFzcz0iVzUwcGMgSlNDb2xvclBpY2tlciB7cGlja2VyQm9yZGVyQ29sb3I6JyNCQkIgI0JCQiAjQkJCICNCQkInLCBwaWNrZXJJbnNldENvbG9yOicjQkJCICNCQkIgI0JCQiAjQkJCJ30iLz4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KWyUgUmVuZGVyQmxvY2tFbmQoIkNvbG9yUGlja2VyIikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj0iVmFsaWRJRCI+WyUgVHJhbnNsYXRlKCJWYWxpZGl0eSIpIHwgaHRtbCAlXTogPC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iRmllbGQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgWyUgRGF0YS5WYWxpZE9wdGlvblN0cmcgJV0KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KCiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9IkNvbW1lbnQiPlslIFRyYW5zbGF0ZSgiQ29tbWVudCIpIHwgaHRtbCAlXTogPC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iRmllbGQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9InRleHQiIG5hbWU9IkNvbW1lbnQiIGlkPSJDb21tZW50IiB2YWx1ZT0iWyUgRGF0YS5Db21tZW50IHwgaHRtbCAlXSIgY2xhc3M9Ilc1MHBjIiBtYXhsZW5ndGg9IjIwMCIvPgogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgoKICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iRmllbGQgU3BhY2luZ1RvcCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJSBJRiAoRGF0YS5DbGFzcyAmJiBEYXRhLkNsYXNzID09ICdORVcnKSB8fCBEYXRhLkl0ZW1JRCA9PSAnTkVXJyAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gbmFtZT0iU3VibWl0IiBjbGFzcz0iQ2FsbEZvckFjdGlvbiBQcmltYXJ5IiBpZD0iU3VibWl0IiB0eXBlPSJzdWJtaXQiIHZhbHVlPSJTdWJtaXQiPjxzcGFuPlslIFRyYW5zbGF0ZSgiU2F2ZSIpIHwgaHRtbCAlXTwvc3Bhbj48L2J1dHRvbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIFslIEVMU0UgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIG5hbWU9IlN1Ym1pdEFuZENvbnRpbnVlIiBjbGFzcz0iQ2FsbEZvckFjdGlvbiBQcmltYXJ5IiBpZD0iU3VibWl0QW5kQ29udGludWUiIHR5cGU9ImJ1dHRvbiIgdmFsdWU9IlN1Ym1pdCI+PHNwYW4+WyUgVHJhbnNsYXRlKCJTYXZlIikgfCBodG1sICVdPC9zcGFuPjwvYnV0dG9uPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFslIFRyYW5zbGF0ZSgib3IiKSB8IGh0bWwgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIG5hbWU9IlN1Ym1pdCIgY2xhc3M9IkNhbGxGb3JBY3Rpb24gUHJpbWFyeSIgaWQ9IlN1Ym1pdCIgdHlwZT0ic3VibWl0IiB2YWx1ZT0iU3VibWl0Ij48c3Bhbj5bJSBUcmFuc2xhdGUoIlNhdmUgYW5kIGZpbmlzaCIpIHwgaHRtbCAlXTwvc3Bhbj48L2J1dHRvbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIFslIEVORCAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgWyUgVHJhbnNsYXRlKCJvciIpIHwgaHRtbCAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iWyUgRW52KCJCYXNlbGluayIpICVdQWN0aW9uPVslIEVudigiQWN0aW9uIikgJV0iPlslIFRyYW5zbGF0ZSgiQ2FuY2VsIikgfCBodG1sICVdPC9hPgogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgoKICAgICAgICAgICAgICAgICAgICA8L2ZpZWxkc2V0PgogICAgICAgICAgICAgICAgPC9mb3JtPgogICAgICAgICAgICA8L2Rpdj4KWyUgUmVuZGVyQmxvY2tFbmQoIkl0ZW1FZGl0IikgJV0KICAgICAgICA8L2Rpdj4KICAgIDwvZGl2PgogICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2Pgo8L2Rpdj4KWyUgUmVuZGVyQmxvY2tFbmQoIk92ZXJ2aWV3IikgJV0K
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0zLjAudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6U3lzdGVtOjpHZW5lcmFsQ2F0YWxvZzsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKCm91ciBAT2JqZWN0RGVwZW5kZW5jaWVzID0gKAogICAgJ0tlcm5lbDo6Q29uZmlnJywKICAgICdLZXJuZWw6OlN5c3RlbTo6Q2FjaGUnLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpDaGVja0l0ZW0nLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpEQicsCiAgICAnS2VybmVsOjpTeXN0ZW06OkxvZycsCiAgICAnS2VybmVsOjpTeXN0ZW06Ok1haW4nLAopOwoKPWhlYWQxIE5BTUUKCktlcm5lbDo6U3lzdGVtOjpHZW5lcmFsQ2F0YWxvZyAtIGdlbmVyYWwgY2F0YWxvZyBsaWIKCj1oZWFkMSBQVUJMSUMgSU5URVJGQUNFCgo9Y3V0Cgo9aGVhZDIgbmV3KCkKCmNyZWF0ZSBhbiBvYmplY3QKCiAgICB1c2UgS2VybmVsOjpTeXN0ZW06Ok9iamVjdE1hbmFnZXI7CiAgICBsb2NhbCAkS2VybmVsOjpPTSA9IEtlcm5lbDo6U3lzdGVtOjpPYmplY3RNYW5hZ2VyLT5uZXcoKTsKICAgIG15ICRHZW5lcmFsQ2F0YWxvZ09iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpHZW5lcmFsQ2F0YWxvZycpOwoKPWN1dAoKc3ViIG5ldyB7CiAgICBteSAoICRUeXBlLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgYWxsb2NhdGUgbmV3IGhhc2ggZm9yIG9iamVjdAogICAgbXkgJFNlbGYgPSB7fTsKICAgIGJsZXNzKCAkU2VsZiwgJFR5cGUgKTsKCiAgICAjIGxvYWQgZ2VuZXJhdG9yIHByZWZlcmVuY2VzIG1vZHVsZQogICAgbXkgJEdlbmVyYXRvck1vZHVsZSA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6Q29uZmlnJyktPkdldCgnR2VuZXJhbENhdGFsb2c6OlByZWZlcmVuY2VzTW9kdWxlJykKICAgICAgICB8fCAnS2VybmVsOjpTeXN0ZW06OkdlbmVyYWxDYXRhbG9nOjpQcmVmZXJlbmNlc0RCJzsKICAgIGlmICggJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06Ok1haW4nKS0+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+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgPT4KICAgICAgICAgICAgICAgICJDYW4ndCBhZGQgbmV3IGl0ZW0hIEdlbmVyYWwgY2F0YWxvZyBpdGVtIHdpdGggc2FtZSBuYW1lIGFscmVhZHkgZXhpc3RzIGluIHRoaXMgY2xhc3MuIiwKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAjIHJlc2V0IGNhY2hlCiAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6Q2FjaGUnKS0+Q2xlYW5VcCgKICAgICAgICBUeXBlID0+ICRTZWxmLT57Q2FjaGVUeXBlfSwKICAgICk7CgogICAgIyBpbnNlcnQgbmV3IGl0ZW0KICAgIHJldHVybiBpZiAhJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkRCJyktPkRvKAogICAgICAgIFNRTCA9PiAnSU5TRVJUIElOVE8gZ2VuZXJhbF9jYXRhbG9nICcKICAgICAgICAgICAgLiAnKGdlbmVyYWxfY2F0YWxvZ19jbGFzcywgbmFtZSwgdmFsaWRfaWQsIGNvbW1lbnRzLCAnCiAgICAgICAgICAgIC4gJ2NyZWF0ZV90aW1lLCBjcmVhdGVfYnksIGNoYW5nZV90aW1lLCBjaGFuZ2VfYnkpIFZBTFVFUyAnCiAgICAgICAgICAgIC4gJyg/LCA/LCA/LCA/LCBjdXJyZW50X3RpbWVzdGFtcCwgPywgY3VycmVudF90aW1lc3RhbXAsID8pJywKICAgICAgICBCaW5kID0+IFsKICAgICAgICAgICAgXCRQYXJhbXtDbGFzc30sIFwkUGFyYW17TmFtZX0sCiAgICAgICAgICAgIFwkUGFyYW17VmFsaWRJRH0sCiAgICAgICAgICAgIFwkUGFyYW17Q29tbWVudH0sIFwkUGFyYW17VXNlcklEfSwKICAgICAgICAgICAgXCRQYXJhbXtVc2VySUR9LAogICAgICAgIF0sCiAgICApOwoKICAgICMgZmluZCBpZCBvZiBuZXcgaXRlbQogICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkRCJyktPlByZXBhcmUoCiAgICAgICAgU1FMID0+ICdTRUxFQ1QgaWQgRlJPTSBnZW5lcmFsX2NhdGFsb2cgJwogICAgICAgICAgICAuICdXSEVSRSBnZW5lcmFsX2NhdGFsb2dfY2xhc3MgPSA/IEFORCBuYW1lID0gPycsCiAgICAgICAgQmluZCAgPT4gWyBcJFBhcmFte0NsYXNzfSwgXCRQYXJhbXtOYW1lfSBdLAogICAgICAgIExpbWl0ID0+IDEsCiAgICApOwoKICAgICMgZmV0Y2ggdGhlIHJlc3VsdAogICAgbXkgJEl0ZW1JRDsKICAgIHdoaWxlICggbXkgQFJvdyA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEQicpLT5GZXRjaHJvd0FycmF5KCkgKSB7CiAgICAgICAgJEl0ZW1JRCA9ICRSb3dbMF07CiAgICB9CgogICAgcmV0dXJuICRJdGVtSUQ7Cn0KCj1oZWFkMiBJdGVtVXBkYXRlKCkKCnVwZGF0ZSBhbiBleGlzdGluZyBnZW5lcmFsIGNhdGFsb2cgaXRlbQoKICAgIG15ICRUcnVlID0gJEdlbmVyYWxDYXRhbG9nT2JqZWN0LT5JdGVtVXBkYXRlKAogICAgICAgIEl0ZW1JRCAgICAgICAgPT4gMTIzLAogICAgICAgIE5hbWUgICAgICAgICAgPT4gJ0l0ZW0gTmFtZScsCiAgICAgICAgVmFsaWRJRCAgICAgICA9PiAxLAogICAgICAgIENvbW1lbnQgICAgICAgPT4gJ0NvbW1lbnQnLCAgICAjIChvcHRpb25hbCkKICAgICAgICBVc2VySUQgICAgICAgID0+IDEsCiAgICApOwoKPWN1dAoKc3ViIEl0ZW1VcGRhdGUgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgZm9yIG15ICRBcmd1bWVudCAocXcoSXRlbUlEIFZhbGlkSUQgVXNlcklEKSkgewogICAgICAgIGlmICggISRQYXJhbXskQXJndW1lbnR9ICkgewogICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCAkQXJndW1lbnQhIiwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KCiAgICAjIG5hbWUgbXVzdCBiZSBub3QgZW1wdHksIGJ1dCBudW1iZXIgemVybyAoMCkgaXMgYWxsb3dlZAogICAgaWYgKCAkUGFyYW17TmFtZX0gZXEgJycgKSB7CiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJOZWVkIE5hbWUhIiwKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAjIHNldCBkZWZhdWx0IHZhbHVlcwogICAgZm9yIG15ICRBcmd1bWVudCAocXcoQ29tbWVudCkpIHsKICAgICAgICAkUGFyYW17JEFyZ3VtZW50fSB8fD0gJyc7CiAgICB9CgogICAgIyBjbGVhbnVwIGdpdmVuIHBhcmFtcwogICAgZm9yIG15ICRBcmd1bWVudCAocXcoQ2xhc3MpKSB7CiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkNoZWNrSXRlbScpLT5TdHJpbmdDbGVhbigKICAgICAgICAgICAgU3RyaW5nUmVmICAgICAgICAgPT4gXCRQYXJhbXskQXJndW1lbnR9LAogICAgICAgICAgICBSZW1vdmVBbGxOZXdsaW5lcyA9PiAxLAogICAgICAgICAgICBSZW1vdmVBbGxUYWJzICAgICA9PiAxLAogICAgICAgICAgICBSZW1vdmVBbGxTcGFjZXMgICA9PiAxLAogICAgICAgICk7CiAgICB9CiAgICBmb3IgbXkgJEFyZ3VtZW50IChxdyhOYW1lIENvbW1lbnQpKSB7CiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkNoZWNrSXRlbScpLT5TdHJpbmdDbGVhbigKICAgICAgICAgICAgU3RyaW5nUmVmICAgICAgICAgPT4gXCRQYXJhbXskQXJndW1lbnR9LAogICAgICAgICAgICBSZW1vdmVBbGxOZXdsaW5lcyA9PiAxLAogICAgICAgICAgICBSZW1vdmVBbGxUYWJzICAgICA9PiAxLAogICAgICAgICk7CiAgICB9CgogICAgIyBnZXQgY2xhc3Mgb2YgaXRlbQogICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkRCJyktPlByZXBhcmUoCiAgICAgICAgU1FMICAgPT4gJ1NFTEVDVCBnZW5lcmFsX2NhdGFsb2dfY2xhc3MgRlJPTSBnZW5lcmFsX2NhdGFsb2cgV0hFUkUgaWQgPSA/JywKICAgICAgICBCaW5kICA9PiBbIFwkUGFyYW17SXRlbUlEfSBdLAogICAgICAgIExpbWl0ID0+IDEsCiAgICApOwoKICAgICMgZmV0Y2ggdGhlIHJlc3VsdAogICAgbXkgJENsYXNzOwogICAgd2hpbGUgKCBteSBAUm93ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkRCJyktPkZldGNocm93QXJyYXkoKSApIHsKICAgICAgICAkQ2xhc3MgPSAkUm93WzBdOwogICAgfQoKICAgIGlmICggISRDbGFzcyApIHsKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gIkNhbid0IHVwZGF0ZSBpdGVtISBHZW5lcmFsIGNhdGFsb2cgaXRlbSBub3QgZm91bmQgaW4gdGhpcyBjbGFzcy4iLAogICAgICAgICk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgICMgZmluZCBleGl0aW5nIGl0ZW0gd2l0aCBzYW1lIG5hbWUKICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEQicpLT5QcmVwYXJlKAogICAgICAgIFNRTCAgID0+ICdTRUxFQ1QgaWQgRlJPTSBnZW5lcmFsX2NhdGFsb2cgV0hFUkUgZ2VuZXJhbF9jYXRhbG9nX2NsYXNzID0gPyBBTkQgbmFtZSA9ID8nLAogICAgICAgIEJpbmQgID0+IFsgXCRDbGFzcywgXCRQYXJhbXtOYW1lfSBdLAogICAgICAgIExpbWl0ID0+IDEsCiAgICApOwoKICAgICMgZmV0Y2ggdGhlIHJlc3VsdAogICAgbXkgJFVwZGF0ZSA9IDE7CiAgICB3aGlsZSAoIG15IEBSb3cgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6REInKS0+RmV0Y2hyb3dBcnJheSgpICkgewogICAgICAgIGlmICggJFBhcmFte0l0ZW1JRH0gbmUgJFJvd1swXSApIHsKICAgICAgICAgICAgJFVwZGF0ZSA9IDA7CiAgICAgICAgfQogICAgfQoKICAgIGlmICggISRVcGRhdGUgKSB7CiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgPT4KICAgICAgICAgICAgICAgICJDYW4ndCB1cGRhdGUgaXRlbSEgR2VuZXJhbCBjYXRhbG9nIGl0ZW0gd2l0aCBzYW1lIG5hbWUgYWxyZWFkeSBleGlzdHMgaW4gdGhpcyBjbGFzcy4iLAogICAgICAgICk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgICMgcmVzZXQgY2FjaGUKICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpDYWNoZScpLT5DbGVhblVwKAogICAgICAgIFR5cGUgPT4gJFNlbGYtPntDYWNoZVR5cGV9LAogICAgKTsKCiAgICByZXR1cm4gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkRCJyktPkRvKAogICAgICAgIFNRTCA9PiAnVVBEQVRFIGdlbmVyYWxfY2F0YWxvZyBTRVQgJwogICAgICAgICAgICAuICduYW1lID0gPywgdmFsaWRfaWQgPSA/LCBjb21tZW50cyA9ID8sICcKICAgICAgICAgICAgLiAnY2hhbmdlX3RpbWUgPSBjdXJyZW50X3RpbWVzdGFtcCwgY2hhbmdlX2J5ID0gPyAnCiAgICAgICAgICAgIC4gJ1dIRVJFIGlkID0gPycsCiAgICAgICAgQmluZCA9PiBbCiAgICAgICAgICAgIFwkUGFyYW17TmFtZX0sCiAgICAgICAgICAgIFwkUGFyYW17VmFsaWRJRH0sIFwkUGFyYW17Q29tbWVudH0sCiAgICAgICAgICAgIFwkUGFyYW17VXNlcklEfSwgIFwkUGFyYW17SXRlbUlEfSwKICAgICAgICBdLAogICAgKTsKfQoKPWhlYWQyIEdlbmVyYWxDYXRhbG9nUHJlZmVyZW5jZXNTZXQoKQoKc2V0IEdlbmVyYWxDYXRhbG9nIHByZWZlcmVuY2VzCgogICAgJEdlbmVyYWxDYXRhbG9nT2JqZWN0LT5HZW5lcmFsQ2F0YWxvZ1ByZWZlcmVuY2VzU2V0KAogICAgICAgIEl0ZW1JRCA9PiAxMjMsCiAgICAgICAgS2V5ICAgID0+ICdVc2VyQ29tbWVudCcsCiAgICAgICAgVmFsdWUgID0+ICdzb21lIGNvbW1lbnQnLAogICAgKTsKCj1jdXQKCnN1YiBHZW5lcmFsQ2F0YWxvZ1ByZWZlcmVuY2VzU2V0IHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBkZWxldGUgY2FjaGUKICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpDYWNoZScpLT5DbGVhblVwKAogICAgICAgIFR5cGUgPT4gJFNlbGYtPntDYWNoZVR5cGV9LAogICAgKTsKCiAgICByZXR1cm4gJFNlbGYtPntQcmVmZXJlbmNlc09iamVjdH0tPkdlbmVyYWxDYXRhbG9nUHJlZmVyZW5jZXNTZXQoJVBhcmFtKTsKfQoKPWhlYWQyIEdlbmVyYWxDYXRhbG9nUHJlZmVyZW5jZXNHZXQoKQoKZ2V0IEdlbmVyYWxDYXRhbG9nIHByZWZlcmVuY2VzCgogICAgbXkgJVByZWZlcmVuY2VzID0gJFF1ZXVlT2JqZWN0LT5HZW5lcmFsQ2F0YWxvZ1ByZWZlcmVuY2VzR2V0KAogICAgICAgIEl0ZW1JRCA9PiAxMjMsCiAgICApOwoKPWN1dAoKc3ViIEdlbmVyYWxDYXRhbG9nUHJlZmVyZW5jZXNHZXQgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICByZXR1cm4gJFNlbGYtPntQcmVmZXJlbmNlc09iamVjdH0tPkdlbmVyYWxDYXRhbG9nUHJlZmVyZW5jZXNHZXQoJVBhcmFtKTsKfQoKMTsKCj1oZWFkMSBURVJNUyBBTkQgQ09ORElUSU9OUwoKVGhpcyBTb2Z0d2FyZSBpcyBwYXJ0IG9mIHRoZSBPVFJTIHByb2plY3QgKGh0dHA6Ly9vdHJzLm9yZy8pLgoKVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoR1BMKS4gSWYgeW91CmRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBMPGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvZ3BsLTMuMC50eHQ+LgoKPWN1dAo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0zLjAudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6U3lzdGVtOjpHZW5lcmFsQ2F0YWxvZzo6UHJlZmVyZW5jZXNEQjsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKCm91ciBAT2JqZWN0RGVwZW5kZW5jaWVzID0gKAogICAgJ0tlcm5lbDo6Q29uZmlnJywKICAgICdLZXJuZWw6OlN5c3RlbTo6REInLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpMb2cnLAopOwoKPWhlYWQxIE5BTUUKCktlcm5lbDo6U3lzdGVtOjpHZW5lcmFsQ2F0YWxvZzo6UHJlZmVyZW5jZXNEQiAtIHNvbWUgcHJlZmVyZW5jZXMgZnVuY3Rpb25zIGZvciBnZW5lcmFsIGNhdGFsb2cKCj1oZWFkMSBQVUJMSUMgSU5URVJGQUNFCgo9Y3V0Cgo9aGVhZDIgbmV3KCkKCmNyZWF0ZSBhbiBvYmplY3QKCiAgICB1c2UgS2VybmVsOjpTeXN0ZW06Ok9iamVjdE1hbmFnZXI7CiAgICBsb2NhbCAkS2VybmVsOjpPTSA9IEtlcm5lbDo6U3lzdGVtOjpPYmplY3RNYW5hZ2VyLT5uZXcoKTsKICAgIG15ICRHZW5lcmFsQ2F0YWxvZ1ByZWZlcmVuY2VzREJPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6R2VuZXJhbENhdGFsb2c6OlByZWZlcmVuY2VzREInKTsKCj1jdXQKCnN1YiBuZXcgewogICAgbXkgKCAkVHlwZSwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGFsbG9jYXRlIG5ldyBoYXNoIGZvciBvYmplY3QKICAgIG15ICRTZWxmID0ge307CiAgICBibGVzcyggJFNlbGYsICRUeXBlICk7CgogICAgIyBwcmVmZXJlbmNlcyB0YWJsZSBkYXRhCiAgICAkU2VsZi0+e1ByZWZlcmVuY2VzVGFibGV9ICAgICAgPSAnZ2VuZXJhbF9jYXRhbG9nX3ByZWZlcmVuY2VzJzsKICAgICRTZWxmLT57UHJlZmVyZW5jZXNUYWJsZUtleX0gICA9ICdwcmVmX2tleSc7CiAgICAkU2VsZi0+e1ByZWZlcmVuY2VzVGFibGVWYWx1ZX0gPSAncHJlZl92YWx1ZSc7CiAgICAkU2VsZi0+e1ByZWZlcmVuY2VzVGFibGVHY0lEfSAgPSAnZ2VuZXJhbF9jYXRhbG9nX2lkJzsKCiAgICByZXR1cm4gJFNlbGY7Cn0KCj1oZWFkMiBHZW5lcmFsQ2F0YWxvZ1ByZWZlcmVuY2VzU2V0KCkKClNldCBwcmVmZXJlbmNlcyBmb3IgYW4gaXRlbQoKICAgICRQcmVmZXJlbmNlc09iamVjdC0+R2VuZXJhbENhdGFsb2dQcmVmZXJlbmNlc1NldCgKICAgICAgICBJdGVtSUQgPT4gMTIzNCwKICAgICAgICBLZXkgICAgPT4gJ0Z1bmN0aW9uYWxpdHknLAogICAgICAgIFZhbHVlICA9PiAnb3BlcmF0aW9uYWwnLAogICAgKTsKCj1jdXQKCnN1YiBHZW5lcmFsQ2F0YWxvZ1ByZWZlcmVuY2VzU2V0IHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGZvciBteSAkTmVlZGVkIChxdyhJdGVtSUQgS2V5IFZhbHVlKSkgewogICAgICAgIGlmICggIWRlZmluZWQoICRQYXJhbXskTmVlZGVkfSApICkgewogICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCAkTmVlZGVkISIsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgIyBkZWxldGUgb2xkIGRhdGEKICAgIHJldHVybiBpZiAhJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkRCJyktPkRvKAogICAgICAgIFNRTCA9PiAiREVMRVRFIEZST00gJFNlbGYtPntQcmVmZXJlbmNlc1RhYmxlfSBXSEVSRSAiCiAgICAgICAgICAgIC4gIiRTZWxmLT57UHJlZmVyZW5jZXNUYWJsZUdjSUR9ID0gPyBBTkQgJFNlbGYtPntQcmVmZXJlbmNlc1RhYmxlS2V5fSA9ID8iLAogICAgICAgIEJpbmQgPT4gWwogICAgICAgICAgICBcJFBhcmFte0l0ZW1JRH0sCiAgICAgICAgICAgIFwkUGFyYW17S2V5fSwKICAgICAgICBdLAogICAgKTsKCiAgICAjIGluc2VydCBuZXcgZGF0YQogICAgcmV0dXJuICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEQicpLT5EbygKICAgICAgICBTUUwgPT4gIklOU0VSVCBJTlRPICRTZWxmLT57UHJlZmVyZW5jZXNUYWJsZX0gKCRTZWxmLT57UHJlZmVyZW5jZXNUYWJsZUdjSUR9LCAiCiAgICAgICAgICAgIC4gIiAkU2VsZi0+e1ByZWZlcmVuY2VzVGFibGVLZXl9LCAkU2VsZi0+e1ByZWZlcmVuY2VzVGFibGVWYWx1ZX0pICIKICAgICAgICAgICAgLiAiIFZBTFVFUyAoPywgPywgPykiLAogICAgICAgIEJpbmQgPT4gWwogICAgICAgICAgICBcJFBhcmFte0l0ZW1JRH0sCiAgICAgICAgICAgIFwkUGFyYW17S2V5fSwKICAgICAgICAgICAgXCRQYXJhbXtWYWx1ZX0sCiAgICAgICAgXSwKICAgICk7Cn0KCj1oZWFkMiBHZW5lcmFsQ2F0YWxvZ1ByZWZlcmVuY2VzR2V0KCkKCkdldCBhbGwgUHJlZmVyZW5jZXMgZm9yIGFuIGl0ZW0KCiAgICBteSAlUHJlZmVyZW5jZXMgPSAkUHJlZmVyZW5jZXNPYmplY3QtPkdlbmVyYWxDYXRhbG9nUHJlZmVyZW5jZXNHZXQoCiAgICAgICAgSXRlbUlEID0+IDEyMywKICAgICk7Cgo9Y3V0CgpzdWIgR2VuZXJhbENhdGFsb2dQcmVmZXJlbmNlc0dldCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBmb3IgbXkgJE5lZWRlZCAocXcoSXRlbUlEKSkgewogICAgICAgIGlmICggISRQYXJhbXskTmVlZGVkfSApIHsKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJE5lZWRlZCEiLAogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQoKICAgICMgY2hlY2sgaWYgcXVldWUgcHJlZmVyZW5jZXMgYXJlIGF2YWlsYWJsZQogICAgaWYgKCAhJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKS0+R2V0KCdHZW5lcmFsQ2F0YWxvZ1ByZWZlcmVuY2VzJykgKSB7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgICMgZ2V0IHByZWZlcmVuY2VzCiAgICByZXR1cm4gaWYgISRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEQicpLT5QcmVwYXJlKAogICAgICAgIFNRTCA9PiAiU0VMRUNUICRTZWxmLT57UHJlZmVyZW5jZXNUYWJsZUtleX0sICRTZWxmLT57UHJlZmVyZW5jZXNUYWJsZVZhbHVlfSAiCiAgICAgICAgICAgIC4gIiBGUk9NICRTZWxmLT57UHJlZmVyZW5jZXNUYWJsZX0gV0hFUkUgJFNlbGYtPntQcmVmZXJlbmNlc1RhYmxlR2NJRH0gPSA/IiwKICAgICAgICBCaW5kID0+IFsgXCRQYXJhbXtJdGVtSUR9IF0sCiAgICApOwoKICAgIG15ICVEYXRhOwogICAgd2hpbGUgKCBteSBAUm93ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkRCJyktPkZldGNocm93QXJyYXkoKSApIHsKICAgICAgICAkRGF0YXsgJFJvd1swXSB9ID0gJFJvd1sxXTsKICAgIH0KCiAgICAjIHJldHVybiBkYXRhCiAgICByZXR1cm4gJURhdGE7Cn0KCjE7Cgo9aGVhZDEgVEVSTVMgQU5EIENPTkRJVElPTlMKClRoaXMgc29mdHdhcmUgaXMgcGFydCBvZiB0aGUgT1RSUyBwcm9qZWN0IChMPGh0dHBzOi8vb3Rycy5vcmcvPikuCgpUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQp0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChHUEwpLiBJZiB5b3UKZGlkIG5vdCByZWNlaXZlIHRoaXMgZmlsZSwgc2VlIEw8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9ncGwtMy4wLnR4dD4uCgo9Y3V0Cg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0zLjAudHh0LgojIC0tCgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CnVzZSB1dGY4OwoKdXNlIHZhcnMgcXcoJFNlbGYpOwoKIyBjcmVhdGUgbG9jYWwgb2JqZWN0cwpteSAkQ29uZmlnT2JqZWN0ICAgICAgICAgPSAkS2VybmVsOjpPTS0+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=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0zLjAudHh0LgojIC0tCgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CnVzZSB1dGY4OwoKdXNlIHZhcnMgKHF3KCRTZWxmKSk7CgojIGdldCBzZWxlbml1bSBvYmplY3QKbXkgJFNlbGVuaXVtID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlVuaXRUZXN0OjpTZWxlbml1bScpOwoKJFNlbGVuaXVtLT5SdW5UZXN0KAogICAgc3ViIHsKCiAgICAgICAgIyBnZXQgaGVscGVyIG9iamVjdAogICAgICAgIG15ICRIZWxwZXIgPSAkS2VybmVsOjpPTS0+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=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0zLjAudHh0LgojIC0tCgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CnVzZSB1dGY4OwoKdXNlIHZhcnMgKHF3KCRTZWxmKSk7CgpteSAkU2VsZW5pdW0gPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VW5pdFRlc3Q6OlNlbGVuaXVtJyk7CgokU2VsZW5pdW0tPlJ1blRlc3QoCiAgICBzdWIgewoKICAgICAgICBteSAkSGVscGVyID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlVuaXRUZXN0OjpIZWxwZXInKTsKCiAgICAgICAgIyBDcmVhdGUgYW5kIGxvZyBpbiB0ZXN0IHVzZXIuCiAgICAgICAgbXkgJFRlc3RVc2VyTG9naW4gPSAkSGVscGVyLT5UZXN0VXNlckNyZWF0ZSgKICAgICAgICAgICAgR3JvdXBzID0+IFsnYWRtaW4nXSwKICAgICAgICApIHx8IGRpZSAiRGlkIG5vdCBnZXQgdGVzdCB1c2VyIjsKCiAgICAgICAgJFNlbGVuaXVtLT5Mb2dpbigKICAgICAgICAgICAgVHlwZSAgICAgPT4gJ0FnZW50JywKICAgICAgICAgICAgVXNlciAgICAgPT4gJFRlc3RVc2VyTG9naW4sCiAgICAgICAgICAgIFBhc3N3b3JkID0+ICRUZXN0VXNlckxvZ2luLAogICAgICAgICk7CgogICAgICAgIG15ICRTY3JpcHRBbGlhcyA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6Q29uZmlnJyktPkdldCgnU2NyaXB0QWxpYXMnKTsKCiAgICAgICAgIyBOYXZpZ2F0ZSB0byBBZG1pbkdlbmVyYWxDYXRhbG9nIHNjcmVlbi4KICAgICAgICAkU2VsZW5pdW0tPlZlcmlmaWVkR2V0KCIke1NjcmlwdEFsaWFzfWluZGV4LnBsP0FjdGlvbj1BZG1pbkdlbmVyYWxDYXRhbG9nIik7CgogICAgICAgICMgQ2xpY2sgIkFkZCBDYXRhbG9nIENsYXNzIi4KICAgICAgICAkU2VsZW5pdW0tPmZpbmRfZWxlbWVudCgiLy9idXR0b25bXEB2YWx1ZT0nQWRkJ11bXEB0eXBlPSdzdWJtaXQnXSIpLT5WZXJpZmllZENsaWNrKCk7CgogICAgICAgICMgQ2hlY2sgZm9yIGlucHV0IGZpZWxkcy4KICAgICAgICBmb3IgbXkgJElEICgKICAgICAgICAgICAgcXcoQ2xhc3NEc2MgTmFtZSBWYWxpZElEIENvbW1lbnQpCiAgICAgICAgICAgICkKICAgICAgICB7CiAgICAgICAgICAgIG15ICRFbGVtZW50ID0gJFNlbGVuaXVtLT5maW5kX2VsZW1lbnQoICIjJElEIiwgJ2NzcycgKTsKICAgICAgICAgICAgJEVsZW1lbnQtPmlzX2VuYWJsZWQoKTsKICAgICAgICAgICAgJEVsZW1lbnQtPmlzX2Rpc3BsYXllZCgpOwogICAgICAgIH0KCiAgICAgICAgIyBDaGVjayBjbGllbnQgc2lkZSB2YWxpZGF0aW9uLgogICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCAiI05hbWUiLCAgICdjc3MnICktPmNsZWFyKCk7CiAgICAgICAgJFNlbGVuaXVtLT5maW5kX2VsZW1lbnQoICIjU3VibWl0IiwgJ2NzcycgKS0+Y2xpY2soKTsKICAgICAgICAkU2VsZW5pdW0tPldhaXRGb3IoIEphdmFTY3JpcHQgPT4gJ3JldHVybiAkKCIjTmFtZS5FcnJvciIpLmxlbmd0aCcgKTsKCiAgICAgICAgJFNlbGYtPklzKAogICAgICAgICAgICAkU2VsZW5pdW0tPmV4ZWN1dGVfc2NyaXB0KAogICAgICAgICAgICAgICAgInJldHVybiBcJCgnI05hbWUnKS5oYXNDbGFzcygnRXJyb3InKSIKICAgICAgICAgICAgKSwKICAgICAgICAgICAgJzEnLAogICAgICAgICAgICAnQ2xpZW50IHNpZGUgdmFsaWRhdGlvbiBjb3JyZWN0bHkgZGV0ZWN0ZWQgbWlzc2luZyBpbnB1dCB2YWx1ZScsCiAgICAgICAgKTsKCiAgICAgICAgIyBDcmVhdGUgcmVhbCB0ZXN0IGNhdGFsb2cgY2xhc3MuCiAgICAgICAgbXkgJENhdGFsb2dDbGFzc0RzYyAgPSAiQ2F0YWxvZ0NsYXNzRHNjIiAuICRIZWxwZXItPkdldFJhbmRvbUlEKCk7CiAgICAgICAgbXkgJENhdGFsb2dDbGFzc05hbWUgPSAiQ2F0YWxvZ0NsYXNzTmFtZSIgLiAkSGVscGVyLT5HZXRSYW5kb21JRCgpOwogICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCAiI0NsYXNzRHNjIiwgJ2NzcycgKS0+c2VuZF9rZXlzKCRDYXRhbG9nQ2xhc3NEc2MpOwogICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCAiI05hbWUiLCAgICAgJ2NzcycgKS0+c2VuZF9rZXlzKCRDYXRhbG9nQ2xhc3NOYW1lKTsKICAgICAgICAkU2VsZW5pdW0tPmZpbmRfZWxlbWVudCggIiNDb21tZW50IiwgICdjc3MnICktPnNlbmRfa2V5cygiU2VsZW5pdW0gY2F0YWxvZyBjbGFzcyIpOwogICAgICAgICRTZWxlbml1bS0+ZXhlY3V0ZV9zY3JpcHQoIlwkKCcjVmFsaWRJRCcpLnZhbCgnMScpLnRyaWdnZXIoJ3JlZHJhdy5JbnB1dEZpZWxkJykudHJpZ2dlcignY2hhbmdlJyk7Iik7CiAgICAgICAgJFNlbGVuaXVtLT5maW5kX2VsZW1lbnQoICcjU3VibWl0JywgJ2NzcycgKS0+VmVyaWZpZWRDbGljaygpOwoKICAgICAgICAjIENsaWNrICJHbyB0byBvdmVydmlldyIuCiAgICAgICAgJFNlbGVuaXVtLT5maW5kX2VsZW1lbnQoIi8vYVtjb250YWlucyhcQGhyZWYsIFwnQWN0aW9uPUFkbWluR2VuZXJhbENhdGFsb2cnICldIiktPlZlcmlmaWVkQ2xpY2soKTsKCiAgICAgICAgIyBDaGVjayBmb3IgY3JlYXRlZCB0ZXN0IGNhdGFsb2cgY2xhc3MgaW4gQWRtaW5HZW5lcmFsQ2F0YWxvZyBzY3JlZW4gYW5kIGNsaWNrIG9uIGl0LgogICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICBpbmRleCggJFNlbGVuaXVtLT5nZXRfcGFnZV9zb3VyY2UoKSwgJENhdGFsb2dDbGFzc0RzYyApID4gLTEsCiAgICAgICAgICAgICJDcmVhdGVkIHRlc3QgY2F0YWxvZyBjbGFzcyAkQ2F0YWxvZ0NsYXNzRHNjIC0gZm91bmQiLAogICAgICAgICk7CiAgICAgICAgJFNlbGVuaXVtLT5maW5kX2VsZW1lbnQoCiAgICAgICAgICAgICIvL2FbY29udGFpbnMoXEBocmVmLCBcJ0FjdGlvbj1BZG1pbkdlbmVyYWxDYXRhbG9nO1N1YmFjdGlvbj1JdGVtTGlzdDtDbGFzcz0kQ2F0YWxvZ0NsYXNzRHNjJyApXSIKICAgICAgICApLT5WZXJpZmllZENsaWNrKCk7CgogICAgICAgICMgQ2xpY2sgIkFkZCBDYXRhbG9nIEl0ZW0iLgogICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCIvL2J1dHRvbltcQHZhbHVlPSdBZGQnXVtcQHR5cGU9J3N1Ym1pdCddIiktPlZlcmlmaWVkQ2xpY2soKTsKCiAgICAgICAgIyBDaGVjayBjbGllbnQgc2lkZSB2YWxpZGF0aW9uLgogICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCAiI05hbWUiLCAgICdjc3MnICktPmNsZWFyKCk7CiAgICAgICAgJFNlbGVuaXVtLT5maW5kX2VsZW1lbnQoICIjU3VibWl0IiwgJ2NzcycgKS0+Y2xpY2soKTsKICAgICAgICAkU2VsZW5pdW0tPldhaXRGb3IoIEphdmFTY3JpcHQgPT4gJ3JldHVybiAkKCIjTmFtZS5FcnJvciIpLmxlbmd0aCcgKTsKCiAgICAgICAgJFNlbGYtPklzKAogICAgICAgICAgICAkU2VsZW5pdW0tPmV4ZWN1dGVfc2NyaXB0KAogICAgICAgICAgICAgICAgInJldHVybiBcJCgnI05hbWUnKS5oYXNDbGFzcygnRXJyb3InKSIKICAgICAgICAgICAgKSwKICAgICAgICAgICAgJzEnLAogICAgICAgICAgICAnQ2xpZW50IHNpZGUgdmFsaWRhdGlvbiBjb3JyZWN0bHkgZGV0ZWN0ZWQgbWlzc2luZyBpbnB1dCB2YWx1ZScsCiAgICAgICAgKTsKCiAgICAgICAgIyBUcnkgdG8gY3JlYXRlIGNhdGFsb2cgaXRlbSB0aGF0IGFscmVhZHkgZXhpc3RzLgogICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCAiI05hbWUiLCAnY3NzJyApLT5zZW5kX2tleXMoJENhdGFsb2dDbGFzc05hbWUpOwogICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCIvL2J1dHRvbltcQHZhbHVlPSdTdWJtaXQnXVtcQHR5cGU9J3N1Ym1pdCddIiktPlZlcmlmaWVkQ2xpY2soKTsKCiAgICAgICAgIyBWZXJpZnkgZXJyb3IgbWVzc2FnZS4KICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgaW5kZXgoICRTZWxlbml1bS0+Z2V0X3BhZ2Vfc291cmNlKCksICdOZWVkIEl0ZW1JRCBPUiBDbGFzcyBhbmQgTmFtZSEnICkgPiAtMSwKICAgICAgICAgICAgIkVycm9yIG1lc3NhZ2UgLSBkaXNwbGF5ZWQiLAogICAgICAgICk7CgogICAgICAgICMgUmV0dXJuIGJhY2sgdG8gdGVzdCBjYXRhbG9nIGNsYXNzIHNjcmVlbiBhbmQgY2xpY2sgb24gIkFkZCBDYXRhbG9nIEl0ZW0iLgogICAgICAgICRTZWxlbml1bS0+VmVyaWZpZWRHZXQoCiAgICAgICAgICAgICIke1NjcmlwdEFsaWFzfWluZGV4LnBsP0FjdGlvbj1BZG1pbkdlbmVyYWxDYXRhbG9nO1N1YmFjdGlvbj1JdGVtTGlzdDtDbGFzcz0kQ2F0YWxvZ0NsYXNzRHNjIgogICAgICAgICk7CiAgICAgICAgJFNlbGVuaXVtLT5maW5kX2VsZW1lbnQoIi8vYnV0dG9uW1xAdmFsdWU9J0FkZCddW1xAdHlwZT0nc3VibWl0J10iKS0+VmVyaWZpZWRDbGljaygpOwoKICAgICAgICAjIENyZWF0ZSByZWFsIHRlc3QgY2F0YWxvZyBpdGVtLgogICAgICAgIG15ICRDYXRhbG9nQ2xhc3NJdGVtID0gIkNhdGFsb2dDbGFzc0l0ZW0iIC4gJEhlbHBlci0+R2V0UmFuZG9tSUQoKTsKICAgICAgICAkU2VsZW5pdW0tPmZpbmRfZWxlbWVudCggIiNOYW1lIiwgICAgJ2NzcycgKS0+c2VuZF9rZXlzKCRDYXRhbG9nQ2xhc3NJdGVtKTsKICAgICAgICAkU2VsZW5pdW0tPmZpbmRfZWxlbWVudCggIiNDb21tZW50IiwgJ2NzcycgKS0+c2VuZF9rZXlzKCJTZWxlbml1bSBjYXRhbG9nIGl0ZW0iKTsKICAgICAgICAkU2VsZW5pdW0tPmV4ZWN1dGVfc2NyaXB0KCJcJCgnI1ZhbGlkSUQnKS52YWwoJzEnKS50cmlnZ2VyKCdyZWRyYXcuSW5wdXRGaWVsZCcpLnRyaWdnZXIoJ2NoYW5nZScpOyIpOwogICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCIvL2J1dHRvbltcQHZhbHVlPSdTdWJtaXQnXVtcQHR5cGU9J3N1Ym1pdCddIiktPlZlcmlmaWVkQ2xpY2soKTsKCiAgICAgICAgIyBHZXQgdGVzdCBjYXRhbG9nIGl0ZW1zIElEcy4KICAgICAgICBteSBAQ2F0YWxvZ0l0ZW1JRHM7CiAgICAgICAgZm9yIG15ICRDYXRhbG9nSXRlbXMgKCAkQ2F0YWxvZ0NsYXNzTmFtZSwgJENhdGFsb2dDbGFzc0l0ZW0gKSB7CiAgICAgICAgICAgIG15ICRDYXRhbG9nQ2xhc3NJdGVtRGF0YSA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpHZW5lcmFsQ2F0YWxvZycpLT5JdGVtR2V0KAogICAgICAgICAgICAgICAgQ2xhc3MgPT4gJENhdGFsb2dDbGFzc0RzYywKICAgICAgICAgICAgICAgIE5hbWUgID0+ICRDYXRhbG9nSXRlbXMsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIG15ICRDYXRhbG9nSXRlbUlEID0gJENhdGFsb2dDbGFzc0l0ZW1EYXRhLT57SXRlbUlEfTsKICAgICAgICAgICAgcHVzaCBAQ2F0YWxvZ0l0ZW1JRHMsICRDYXRhbG9nSXRlbUlEOwogICAgICAgIH0KCiAgICAgICAgIyBDaGVjayBmb3IgY3JlYXRlZCB0ZXN0IGNhdGFsb2cgaXRlbSBhbmQgY2xpY2sgb24gaXQuCiAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgIGluZGV4KCAkU2VsZW5pdW0tPmdldF9wYWdlX3NvdXJjZSgpLCAkQ2F0YWxvZ0NsYXNzSXRlbSApID4gLTEsCiAgICAgICAgICAgICJDcmVhdGVkIHRlc3QgY2F0YWxvZyBpdGVtICRDYXRhbG9nQ2xhc3NJdGVtIC0gZm91bmQiLAogICAgICAgICk7CiAgICAgICAgJFNlbGVuaXVtLT5maW5kX2VsZW1lbnQoCiAgICAgICAgICAgICIvL2FbY29udGFpbnMoXEBocmVmLCBcJ0FjdGlvbj1BZG1pbkdlbmVyYWxDYXRhbG9nO1N1YmFjdGlvbj1JdGVtRWRpdDtJdGVtSUQ9JENhdGFsb2dJdGVtSURzWzFdJyApXSIKICAgICAgICApLT5WZXJpZmllZENsaWNrKCk7CgogICAgICAgICMgQ2hlY2sgbmV3IHRlc3QgY2F0YWxvZyBpdGVtIHZhbHVlcy4KICAgICAgICAkU2VsZi0+SXMoCiAgICAgICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCAnI05hbWUnLCAnY3NzJyApLT5nZXRfdmFsdWUoKSwKICAgICAgICAgICAgJENhdGFsb2dDbGFzc0l0ZW0sCiAgICAgICAgICAgICIjTmFtZSBzdG9yZWQgdmFsdWUiLAogICAgICAgICk7CiAgICAgICAgJFNlbGYtPklzKAogICAgICAgICAgICAkU2VsZW5pdW0tPmZpbmRfZWxlbWVudCggJyNDb21tZW50JywgJ2NzcycgKS0+Z2V0X3ZhbHVlKCksCiAgICAgICAgICAgICJTZWxlbml1bSBjYXRhbG9nIGl0ZW0iLAogICAgICAgICAgICAiI0NvbW1lbnQgc3RvcmVkIHZhbHVlIiwKICAgICAgICApOwoKICAgICAgICAjIEVkaXQgbmFtZSBhbmQgY29tbWVudC4KICAgICAgICBteSAkRWRpdENhdGFsb2dDbGFzc0l0ZW0gPSAiRWRpdCIgLiAkQ2F0YWxvZ0NsYXNzSXRlbTsKICAgICAgICAkU2VsZW5pdW0tPmZpbmRfZWxlbWVudCggIiNOYW1lIiwgICAgJ2NzcycgKS0+Y2xlYXIoKTsKICAgICAgICAkU2VsZW5pdW0tPmZpbmRfZWxlbWVudCggIiNOYW1lIiwgICAgJ2NzcycgKS0+c2VuZF9rZXlzKCRFZGl0Q2F0YWxvZ0NsYXNzSXRlbSk7CiAgICAgICAgJFNlbGVuaXVtLT5maW5kX2VsZW1lbnQoICIjQ29tbWVudCIsICdjc3MnICktPnNlbmRfa2V5cygiIGVkaXQiKTsKICAgICAgICAkU2VsZW5pdW0tPmZpbmRfZWxlbWVudCgiLy9idXR0b25bXEB2YWx1ZT0nU3VibWl0J11bXEB0eXBlPSdzdWJtaXQnXSIpLT5WZXJpZmllZENsaWNrKCk7CgogICAgICAgICMgQ2hlY2sgZWRpdGVkIHRlc3QgY2F0YWxvZyBpdGVtIHZhbHVlcy4KICAgICAgICAkU2VsZW5pdW0tPmZpbmRfZWxlbWVudCggJEVkaXRDYXRhbG9nQ2xhc3NJdGVtLCAnbGlua190ZXh0JyApLT5WZXJpZmllZENsaWNrKCk7CiAgICAgICAgJFNlbGYtPklzKAogICAgICAgICAgICAkU2VsZW5pdW0tPmZpbmRfZWxlbWVudCggJyNOYW1lJywgJ2NzcycgKS0+Z2V0X3ZhbHVlKCksCiAgICAgICAgICAgICRFZGl0Q2F0YWxvZ0NsYXNzSXRlbSwKICAgICAgICAgICAgIiNOYW1lIHVwZGF0ZWQgdmFsdWUiLAogICAgICAgICk7CiAgICAgICAgJFNlbGYtPklzKAogICAgICAgICAgICAkU2VsZW5pdW0tPmZpbmRfZWxlbWVudCggJyNDb21tZW50JywgJ2NzcycgKS0+Z2V0X3ZhbHVlKCksCiAgICAgICAgICAgICJTZWxlbml1bSBjYXRhbG9nIGl0ZW0gZWRpdCIsCiAgICAgICAgICAgICIjQ29tbWVudCB1cGRhdGVkIHZhbHVlIiwKICAgICAgICApOwoKICAgICAgICBteSAkREJPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6REInKTsKCiAgICAgICAgIyBEZWxldGUgY3JlYXRlZCB0ZXN0IGNhdGFsb2cgY2xhc3MuCiAgICAgICAgZm9yIG15ICRDYXRhbG9nSXRlbSAoQENhdGFsb2dJdGVtSURzKSB7CgogICAgICAgICAgICBteSAkU3VjY2VzcyA9ICREQk9iamVjdC0+RG8oCiAgICAgICAgICAgICAgICBTUUwgPT4gIkRFTEVURSBGUk9NIGdlbmVyYWxfY2F0YWxvZ19wcmVmZXJlbmNlcyBXSEVSRSBnZW5lcmFsX2NhdGFsb2dfaWQgPSAkQ2F0YWxvZ0l0ZW0iLAogICAgICAgICAgICApOwogICAgICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgICAgICRTdWNjZXNzLAogICAgICAgICAgICAgICAgIkNhdGFsb2dJdGVtSUQgJENhdGFsb2dJdGVtIHByZWZlcmVuY2UgLSBkZWxldGVkIiwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICRTdWNjZXNzID0gJERCT2JqZWN0LT5EbygKICAgICAgICAgICAgICAgIFNRTCA9PiAiREVMRVRFIEZST00gZ2VuZXJhbF9jYXRhbG9nIFdIRVJFIGlkID0gJENhdGFsb2dJdGVtIiwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgICAgICAkU3VjY2VzcywKICAgICAgICAgICAgICAgICJDYXRhbG9nSXRlbUlEICRDYXRhbG9nSXRlbSAtIGRlbGV0ZWQiLAogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgIyBDbGVhbiB1cCBjYWNoZS4KICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6Q2FjaGUnKS0+Q2xlYW5VcCggVHlwZSA9PiAnR2VuZXJhbENhdGFsb2cnICk7CiAgICB9Cik7CgoxOwo=
R0lGODlhBwALAKECAAAAAP///6g8eKg8eCH5BAEKAAIALAAAAAAHAAsAAAITTIQYcLnsgGxvijrxqdQq6DRJAQA7
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Z0DHEEdB0+snd7lfPq9NpH/55K3+aAnpToJ2InbBnUOnf3Vad5r9uHyRSB5vXhwE+pOgY4ijoGf9L2nwgxoXOWtVrAT78okiBDkD2pXYkbUHSf+kipO8zof43OX8aOgY4hDo9A8ef+9KVcz41678F0AnzytR0OnSxFHJ6Xd0oZvTavfnQfsRf9bS/3/9z77+A2DdeCv3ceV0AAAAAElFTkSuQmCC
LyoqDQogKiBqc2NvbG9yLCBKYXZhU2NyaXB0IENvbG9yIFBpY2tlcg0KICoNCiAqIEB2ZXJzaW9uIDEuNC4xDQogKiBAbGljZW5zZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGh0dHA6Ly93d3cuZ251Lm9yZy9jb3B5bGVmdC9sZXNzZXIuaHRtbA0KICogQGF1dGhvciAgSmFuIE9kdmFya28sIGh0dHA6Ly9vZHZhcmtvLmN6DQogKiBAY3JlYXRlZCAyMDA4LTA2LTE1DQogKiBAdXBkYXRlZCAyMDEzLTA0LTA4DQogKiBAbGluayAgICBodHRwOi8vanNjb2xvci5jb20NCiAqLw0KDQoNCnZhciBqc2NvbG9yID0gew0KDQoNCglkaXIgOiAnJywgLy8gbG9jYXRpb24gb2YganNjb2xvciBkaXJlY3RvcnkgKGxlYXZlIGVtcHR5IHRvIGF1dG9kZXRlY3QpDQoJYmluZENsYXNzIDogJ2NvbG9yJywgLy8gY2xhc3MgbmFtZQ0KCWJpbmRpbmcgOiB0cnVlLCAvLyBhdXRvbWF0aWMgYmluZGluZyB2aWEgPGlucHV0IGNsYXNzPSIuLi4iPg0KCXByZWxvYWRpbmcgOiB0cnVlLCAvLyB1c2UgaW1hZ2UgcHJlbG9hZGluZz8NCg0KDQoJaW5zdGFsbCA6IGZ1bmN0aW9uKCkgew0KCQlqc2NvbG9yLmFkZEV2ZW50KHdpbmRvdywgJ2xvYWQnLCBqc2NvbG9yLmluaXQpOw0KCX0sDQoNCg0KCWluaXQgOiBmdW5jdGlvbigpIHsNCgkJaWYoanNjb2xvci5iaW5kaW5nKSB7DQoJCQlqc2NvbG9yLmJpbmQoKTsNCgkJfQ0KCQlpZihqc2NvbG9yLnByZWxvYWRpbmcpIHsNCgkJCWpzY29sb3IucHJlbG9hZCgpOw0KCQl9DQoJfSwNCg0KDQoJZ2V0RGlyIDogZnVuY3Rpb24oKSB7DQoJCWlmKCFqc2NvbG9yLmRpcikgew0KCQkJdmFyIGRldGVjdGVkID0ganNjb2xvci5kZXRlY3REaXIoKTsNCgkJCWpzY29sb3IuZGlyID0gZGV0ZWN0ZWQhPT1mYWxzZSA/IGRldGVjdGVkIDogJ2pzY29sb3IvJzsNCgkJfQ0KCQlyZXR1cm4ganNjb2xvci5kaXI7DQoJfSwNCg0KDQoJZGV0ZWN0RGlyIDogZnVuY3Rpb24oKSB7DQoJCXZhciBiYXNlID0gbG9jYXRpb24uaHJlZjsNCg0KCQl2YXIgZSA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdiYXNlJyk7DQoJCWZvcih2YXIgaT0wOyBpPGUubGVuZ3RoOyBpKz0xKSB7DQoJCQlpZihlW2ldLmhyZWYpIHsgYmFzZSA9IGVbaV0uaHJlZjsgfQ0KCQl9DQoNCgkJdmFyIGUgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnc2NyaXB0Jyk7DQoJCWZvcih2YXIgaT0wOyBpPGUubGVuZ3RoOyBpKz0xKSB7DQoJCQlpZihlW2ldLnNyYyAmJiAvKF58XC8panNjb2xvclwuanMoWz8jXS4qKT8kL2kudGVzdChlW2ldLnNyYykpIHsNCgkJCQl2YXIgc3JjID0gbmV3IGpzY29sb3IuVVJJKGVbaV0uc3JjKTsNCgkJCQl2YXIgc3JjQWJzID0gc3JjLnRvQWJzb2x1dGUoYmFzZSk7DQoJCQkJc3JjQWJzLnBhdGggPSBzcmNBYnMucGF0aC5yZXBsYWNlKC9bXlwvXSskLywgJycpOyAvLyByZW1vdmUgZmlsZW5hbWUNCgkJCQlzcmNBYnMucXVlcnkgPSBudWxsOw0KCQkJCXNyY0Ficy5mcmFnbWVudCA9IG51bGw7DQoJCQkJcmV0dXJuIHNyY0Ficy50b1N0cmluZygpOw0KCQkJfQ0KCQl9DQoJCXJldHVybiBmYWxzZTsNCgl9LA0KDQoNCgliaW5kIDogZnVuY3Rpb24oKSB7DQoJCXZhciBtYXRjaENsYXNzID0gbmV3IFJlZ0V4cCgnKF58XFxzKSgnK2pzY29sb3IuYmluZENsYXNzKycpXFxzKihcXHtbXn1dKlxcfSk/JywgJ2knKTsNCgkJdmFyIGUgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnaW5wdXQnKTsNCgkJZm9yKHZhciBpPTA7IGk8ZS5sZW5ndGg7IGkrPTEpIHsNCgkJCXZhciBtOw0KCQkJaWYoIWVbaV0uY29sb3IgJiYgZVtpXS5jbGFzc05hbWUgJiYgKG0gPSBlW2ldLmNsYXNzTmFtZS5tYXRjaChtYXRjaENsYXNzKSkpIHsNCgkJCQl2YXIgcHJvcCA9IHt9Ow0KCQkJCWlmKG1bM10pIHsNCgkJCQkJdHJ5IHsNCgkJCQkJCXByb3AgPSAobmV3IEZ1bmN0aW9uICgncmV0dXJuICgnICsgbVszXSArICcpJykpKCk7DQoJCQkJCX0gY2F0Y2goZUludmFsaWRQcm9wKSB7fQ0KCQkJCX0NCgkJCQllW2ldLmNvbG9yID0gbmV3IGpzY29sb3IuY29sb3IoZVtpXSwgcHJvcCk7DQoJCQl9DQoJCX0NCgl9LA0KDQoNCglwcmVsb2FkIDogZnVuY3Rpb24oKSB7DQoJCWZvcih2YXIgZm4gaW4ganNjb2xvci5pbWdSZXF1aXJlKSB7DQoJCQlpZihqc2NvbG9yLmltZ1JlcXVpcmUuaGFzT3duUHJvcGVydHkoZm4pKSB7DQoJCQkJanNjb2xvci5sb2FkSW1hZ2UoZm4pOw0KCQkJfQ0KCQl9DQoJfSwNCg0KDQoJaW1hZ2VzIDogew0KCQlwYWQgOiBbIDE4MSwgMTAxIF0sDQoJCXNsZCA6IFsgMTYsIDEwMSBdLA0KCQljcm9zcyA6IFsgMTUsIDE1IF0sDQoJCWFycm93IDogWyA3LCAxMSBdDQoJfSwNCg0KDQoJaW1nUmVxdWlyZSA6IHt9LA0KCWltZ0xvYWRlZCA6IHt9LA0KDQoNCglyZXF1aXJlSW1hZ2UgOiBmdW5jdGlvbihmaWxlbmFtZSkgew0KCQlqc2NvbG9yLmltZ1JlcXVpcmVbZmlsZW5hbWVdID0gdHJ1ZTsNCgl9LA0KDQoNCglsb2FkSW1hZ2UgOiBmdW5jdGlvbihmaWxlbmFtZSkgew0KCQlpZighanNjb2xvci5pbWdMb2FkZWRbZmlsZW5hbWVdKSB7DQoJCQlqc2NvbG9yLmltZ0xvYWRlZFtmaWxlbmFtZV0gPSBuZXcgSW1hZ2UoKTsNCgkJCWpzY29sb3IuaW1nTG9hZGVkW2ZpbGVuYW1lXS5zcmMgPSBqc2NvbG9yLmdldERpcigpK2ZpbGVuYW1lOw0KCQl9DQoJfSwNCg0KDQoJZmV0Y2hFbGVtZW50IDogZnVuY3Rpb24obWl4ZWQpIHsNCgkJcmV0dXJuIHR5cGVvZiBtaXhlZCA9PT0gJ3N0cmluZycgPyBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChtaXhlZCkgOiBtaXhlZDsNCgl9LA0KDQoNCglhZGRFdmVudCA6IGZ1bmN0aW9uKGVsLCBldm50LCBmdW5jKSB7DQoJCWlmKGVsLmFkZEV2ZW50TGlzdGVuZXIpIHsNCgkJCWVsLmFkZEV2ZW50TGlzdGVuZXIoZXZudCwgZnVuYywgZmFsc2UpOw0KCQl9IGVsc2UgaWYoZWwuYXR0YWNoRXZlbnQpIHsNCgkJCWVsLmF0dGFjaEV2ZW50KCdvbicrZXZudCwgZnVuYyk7DQoJCX0NCgl9LA0KDQoNCglmaXJlRXZlbnQgOiBmdW5jdGlvbihlbCwgZXZudCkgew0KCQlpZighZWwpIHsNCgkJCXJldHVybjsNCgkJfQ0KCQlpZihkb2N1bWVudC5jcmVhdGVFdmVudCkgew0KCQkJdmFyIGV2ID0gZG9jdW1lbnQuY3JlYXRlRXZlbnQoJ0hUTUxFdmVudHMnKTsNCgkJCWV2LmluaXRFdmVudChldm50LCB0cnVlLCB0cnVlKTsNCgkJCWVsLmRpc3BhdGNoRXZlbnQoZXYpOw0KCQl9IGVsc2UgaWYoZG9jdW1lbnQuY3JlYXRlRXZlbnRPYmplY3QpIHsNCgkJCXZhciBldiA9IGRvY3VtZW50LmNyZWF0ZUV2ZW50T2JqZWN0KCk7DQoJCQllbC5maXJlRXZlbnQoJ29uJytldm50LCBldik7DQoJCX0gZWxzZSBpZihlbFsnb24nK2V2bnRdKSB7IC8vIGFsdGVybmF0aXZlbHkgdXNlIHRoZSB0cmFkaXRpb25hbCBldmVudCBtb2RlbCAoSUU1KQ0KCQkJZWxbJ29uJytldm50XSgpOw0KCQl9DQoJfSwNCg0KDQoJZ2V0RWxlbWVudFBvcyA6IGZ1bmN0aW9uKGUpIHsNCgkJdmFyIGUxPWUsIGUyPWU7DQoJCXZhciB4PTAsIHk9MDsNCgkJaWYoZTEub2Zmc2V0UGFyZW50KSB7DQoJCQlkbyB7DQoJCQkJeCArPSBlMS5vZmZzZXRMZWZ0Ow0KCQkJCXkgKz0gZTEub2Zmc2V0VG9wOw0KCQkJfSB3aGlsZShlMSA9IGUxLm9mZnNldFBhcmVudCk7DQoJCX0NCgkJd2hpbGUoKGUyID0gZTIucGFyZW50Tm9kZSkgJiYgZTIubm9kZU5hbWUudG9VcHBlckNhc2UoKSAhPT0gJ0JPRFknKSB7DQoJCQl4IC09IGUyLnNjcm9sbExlZnQ7DQoJCQl5IC09IGUyLnNjcm9sbFRvcDsNCgkJfQ0KCQlyZXR1cm4gW3gsIHldOw0KCX0sDQoNCg0KCWdldEVsZW1lbnRTaXplIDogZnVuY3Rpb24oZSkgew0KCQlyZXR1cm4gW2Uub2Zmc2V0V2lkdGgsIGUub2Zmc2V0SGVpZ2h0XTsNCgl9LA0KDQoNCglnZXRSZWxNb3VzZVBvcyA6IGZ1bmN0aW9uKGUpIHsNCgkJdmFyIHggPSAwLCB5ID0gMDsNCgkJaWYgKCFlKSB7IGUgPSB3aW5kb3cuZXZlbnQ7IH0NCgkJaWYgKHR5cGVvZiBlLm9mZnNldFggPT09ICdudW1iZXInKSB7DQoJCQl4ID0gZS5vZmZzZXRYOw0KCQkJeSA9IGUub2Zmc2V0WTsNCgkJfSBlbHNlIGlmICh0eXBlb2YgZS5sYXllclggPT09ICdudW1iZXInKSB7DQoJCQl4ID0gZS5sYXllclg7DQoJCQl5ID0gZS5sYXllclk7DQoJCX0NCgkJcmV0dXJuIHsgeDogeCwgeTogeSB9Ow0KCX0sDQoNCg0KCWdldFZpZXdQb3MgOiBmdW5jdGlvbigpIHsNCgkJaWYodHlwZW9mIHdpbmRvdy5wYWdlWU9mZnNldCA9PT0gJ251bWJlcicpIHsNCgkJCXJldHVybiBbd2luZG93LnBhZ2VYT2Zmc2V0LCB3aW5kb3cucGFnZVlPZmZzZXRdOw0KCQl9IGVsc2UgaWYoZG9jdW1lbnQuYm9keSAmJiAoZG9jdW1lbnQuYm9keS5zY3JvbGxMZWZ0IHx8IGRvY3VtZW50LmJvZHkuc2Nyb2xsVG9wKSkgew0KCQkJcmV0dXJuIFtkb2N1bWVudC5ib2R5LnNjcm9sbExlZnQsIGRvY3VtZW50LmJvZHkuc2Nyb2xsVG9wXTsNCgkJfSBlbHNlIGlmKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCAmJiAoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNjcm9sbExlZnQgfHwgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNjcm9sbFRvcCkpIHsNCgkJCXJldHVybiBbZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNjcm9sbExlZnQsIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxUb3BdOw0KCQl9IGVsc2Ugew0KCQkJcmV0dXJuIFswLCAwXTsNCgkJfQ0KCX0sDQoNCg0KCWdldFZpZXdTaXplIDogZnVuY3Rpb24oKSB7DQoJCWlmKHR5cGVvZiB3aW5kb3cuaW5uZXJXaWR0aCA9PT0gJ251bWJlcicpIHsNCgkJCXJldHVybiBbd2luZG93LmlubmVyV2lkdGgsIHdpbmRvdy5pbm5lckhlaWdodF07DQoJCX0gZWxzZSBpZihkb2N1bWVudC5ib2R5ICYmIChkb2N1bWVudC5ib2R5LmNsaWVudFdpZHRoIHx8IGRvY3VtZW50LmJvZHkuY2xpZW50SGVpZ2h0KSkgew0KCQkJcmV0dXJuIFtkb2N1bWVudC5ib2R5LmNsaWVudFdpZHRoLCBkb2N1bWVudC5ib2R5LmNsaWVudEhlaWdodF07DQoJCX0gZWxzZSBpZihkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQgJiYgKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRXaWR0aCB8fCBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50SGVpZ2h0KSkgew0KCQkJcmV0dXJuIFtkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50V2lkdGgsIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRIZWlnaHRdOw0KCQl9IGVsc2Ugew0KCQkJcmV0dXJuIFswLCAwXTsNCgkJfQ0KCX0sDQoNCg0KCVVSSSA6IGZ1bmN0aW9uKHVyaSkgeyAvLyBTZWUgUkZDMzk4Ng0KDQoJCXRoaXMuc2NoZW1lID0gbnVsbDsNCgkJdGhpcy5hdXRob3JpdHkgPSBudWxsOw0KCQl0aGlzLnBhdGggPSAnJzsNCgkJdGhpcy5xdWVyeSA9IG51bGw7DQoJCXRoaXMuZnJhZ21lbnQgPSBudWxsOw0KDQoJCXRoaXMucGFyc2UgPSBmdW5jdGlvbih1cmkpIHsNCgkJCXZhciBtID0gdXJpLm1hdGNoKC9eKChbQS1aYS16XVswLTlBLVphLXorLi1dKikoOikpPygoXC9cLykoW15cLz8jXSopKT8oW14/I10qKSgoXD8pKFteI10qKSk/KCgjKSguKikpPy8pOw0KCQkJdGhpcy5zY2hlbWUgPSBtWzNdID8gbVsyXSA6IG51bGw7DQoJCQl0aGlzLmF1dGhvcml0eSA9IG1bNV0gPyBtWzZdIDogbnVsbDsNCgkJCXRoaXMucGF0aCA9IG1bN107DQoJCQl0aGlzLnF1ZXJ5ID0gbVs5XSA/IG1bMTBdIDogbnVsbDsNCgkJCXRoaXMuZnJhZ21lbnQgPSBtWzEyXSA/IG1bMTNdIDogbnVsbDsNCgkJCXJldHVybiB0aGlzOw0KCQl9Ow0KDQoJCXRoaXMudG9TdHJpbmcgPSBmdW5jdGlvbigpIHsNCgkJCXZhciByZXN1bHQgPSAnJzsNCgkJCWlmKHRoaXMuc2NoZW1lICE9PSBudWxsKSB7IHJlc3VsdCA9IHJlc3VsdCArIHRoaXMuc2NoZW1lICsgJzonOyB9DQoJCQlpZih0aGlzLmF1dGhvcml0eSAhPT0gbnVsbCkgeyByZXN1bHQgPSByZXN1bHQgKyAnLy8nICsgdGhpcy5hdXRob3JpdHk7IH0NCgkJCWlmKHRoaXMucGF0aCAhPT0gbnVsbCkgeyByZXN1bHQgPSByZXN1bHQgKyB0aGlzLnBhdGg7IH0NCgkJCWlmKHRoaXMucXVlcnkgIT09IG51bGwpIHsgcmVzdWx0ID0gcmVzdWx0ICsgJz8nICsgdGhpcy5xdWVyeTsgfQ0KCQkJaWYodGhpcy5mcmFnbWVudCAhPT0gbnVsbCkgeyByZXN1bHQgPSByZXN1bHQgKyAnIycgKyB0aGlzLmZyYWdtZW50OyB9DQoJCQlyZXR1cm4gcmVzdWx0Ow0KCQl9Ow0KDQoJCXRoaXMudG9BYnNvbHV0ZSA9IGZ1bmN0aW9uKGJhc2UpIHsNCgkJCXZhciBiYXNlID0gbmV3IGpzY29sb3IuVVJJKGJhc2UpOw0KCQkJdmFyIHIgPSB0aGlzOw0KCQkJdmFyIHQgPSBuZXcganNjb2xvci5VUkk7DQoNCgkJCWlmKGJhc2Uuc2NoZW1lID09PSBudWxsKSB7IHJldHVybiBmYWxzZTsgfQ0KDQoJCQlpZihyLnNjaGVtZSAhPT0gbnVsbCAmJiByLnNjaGVtZS50b0xvd2VyQ2FzZSgpID09PSBiYXNlLnNjaGVtZS50b0xvd2VyQ2FzZSgpKSB7DQoJCQkJci5zY2hlbWUgPSBudWxsOw0KCQkJfQ0KDQoJCQlpZihyLnNjaGVtZSAhPT0gbnVsbCkgew0KCQkJCXQuc2NoZW1lID0gci5zY2hlbWU7DQoJCQkJdC5hdXRob3JpdHkgPSByLmF1dGhvcml0eTsNCgkJCQl0LnBhdGggPSByZW1vdmVEb3RTZWdtZW50cyhyLnBhdGgpOw0KCQkJCXQucXVlcnkgPSByLnF1ZXJ5Ow0KCQkJfSBlbHNlIHsNCgkJCQlpZihyLmF1dGhvcml0eSAhPT0gbnVsbCkgew0KCQkJCQl0LmF1dGhvcml0eSA9IHIuYXV0aG9yaXR5Ow0KCQkJCQl0LnBhdGggPSByZW1vdmVEb3RTZWdtZW50cyhyLnBhdGgpOw0KCQkJCQl0LnF1ZXJ5ID0gci5xdWVyeTsNCgkJCQl9IGVsc2Ugew0KCQkJCQlpZihyLnBhdGggPT09ICcnKSB7DQoJCQkJCQl0LnBhdGggPSBiYXNlLnBhdGg7DQoJCQkJCQlpZihyLnF1ZXJ5ICE9PSBudWxsKSB7DQoJCQkJCQkJdC5xdWVyeSA9IHIucXVlcnk7DQoJCQkJCQl9IGVsc2Ugew0KCQkJCQkJCXQucXVlcnkgPSBiYXNlLnF1ZXJ5Ow0KCQkJCQkJfQ0KCQkJCQl9IGVsc2Ugew0KCQkJCQkJaWYoci5wYXRoLnN1YnN0cigwLDEpID09PSAnLycpIHsNCgkJCQkJCQl0LnBhdGggPSByZW1vdmVEb3RTZWdtZW50cyhyLnBhdGgpOw0KCQkJCQkJfSBlbHNlIHsNCgkJCQkJCQlpZihiYXNlLmF1dGhvcml0eSAhPT0gbnVsbCAmJiBiYXNlLnBhdGggPT09ICcnKSB7DQoJCQkJCQkJCXQucGF0aCA9ICcvJytyLnBhdGg7DQoJCQkJCQkJfSBlbHNlIHsNCgkJCQkJCQkJdC5wYXRoID0gYmFzZS5wYXRoLnJlcGxhY2UoL1teXC9dKyQvLCcnKStyLnBhdGg7DQoJCQkJCQkJfQ0KCQkJCQkJCXQucGF0aCA9IHJlbW92ZURvdFNlZ21lbnRzKHQucGF0aCk7DQoJCQkJCQl9DQoJCQkJCQl0LnF1ZXJ5ID0gci5xdWVyeTsNCgkJCQkJfQ0KCQkJCQl0LmF1dGhvcml0eSA9IGJhc2UuYXV0aG9yaXR5Ow0KCQkJCX0NCgkJCQl0LnNjaGVtZSA9IGJhc2Uuc2NoZW1lOw0KCQkJfQ0KCQkJdC5mcmFnbWVudCA9IHIuZnJhZ21lbnQ7DQoNCgkJCXJldHVybiB0Ow0KCQl9Ow0KDQoJCWZ1bmN0aW9uIHJlbW92ZURvdFNlZ21lbnRzKHBhdGgpIHsNCgkJCXZhciBvdXQgPSAnJzsNCgkJCXdoaWxlKHBhdGgpIHsNCgkJCQlpZihwYXRoLnN1YnN0cigwLDMpPT09Jy4uLycgfHwgcGF0aC5zdWJzdHIoMCwyKT09PScuLycpIHsNCgkJCQkJcGF0aCA9IHBhdGgucmVwbGFjZSgvXlwuKy8sJycpLnN1YnN0cigxKTsNCgkJCQl9IGVsc2UgaWYocGF0aC5zdWJzdHIoMCwzKT09PScvLi8nIHx8IHBhdGg9PT0nLy4nKSB7DQoJCQkJCXBhdGggPSAnLycrcGF0aC5zdWJzdHIoMyk7DQoJCQkJfSBlbHNlIGlmKHBhdGguc3Vic3RyKDAsNCk9PT0nLy4uLycgfHwgcGF0aD09PScvLi4nKSB7DQoJCQkJCXBhdGggPSAnLycrcGF0aC5zdWJzdHIoNCk7DQoJCQkJCW91dCA9IG91dC5yZXBsYWNlKC9cLz9bXlwvXSokLywgJycpOw0KCQkJCX0gZWxzZSBpZihwYXRoPT09Jy4nIHx8IHBhdGg9PT0nLi4nKSB7DQoJCQkJCXBhdGggPSAnJzsNCgkJCQl9IGVsc2Ugew0KCQkJCQl2YXIgcm0gPSBwYXRoLm1hdGNoKC9eXC8/W15cL10qLylbMF07DQoJCQkJCXBhdGggPSBwYXRoLnN1YnN0cihybS5sZW5ndGgpOw0KCQkJCQlvdXQgPSBvdXQgKyBybTsNCgkJCQl9DQoJCQl9DQoJCQlyZXR1cm4gb3V0Ow0KCQl9DQoNCgkJaWYodXJpKSB7DQoJCQl0aGlzLnBhcnNlKHVyaSk7DQoJCX0NCg0KCX0sDQoNCg0KCS8vDQoJLy8gVXNhZ2UgZXhhbXBsZToNCgkvLyB2YXIgbXlDb2xvciA9IG5ldyBqc2NvbG9yLmNvbG9yKG15SW5wdXRFbGVtZW50KQ0KCS8vDQoNCgljb2xvciA6IGZ1bmN0aW9uKHRhcmdldCwgcHJvcCkgew0KDQoNCgkJdGhpcy5yZXF1aXJlZCA9IHRydWU7IC8vIHJlZnVzZSBlbXB0eSB2YWx1ZXM/DQoJCXRoaXMuYWRqdXN0ID0gdHJ1ZTsgLy8gYWRqdXN0IHZhbHVlIHRvIHVuaWZvcm0gbm90YXRpb24/DQoJCXRoaXMuaGFzaCA9IGZhbHNlOyAvLyBwcmVmaXggY29sb3Igd2l0aCAjIHN5bWJvbD8NCgkJdGhpcy5jYXBzID0gdHJ1ZTsgLy8gdXBwZXJjYXNlPw0KCQl0aGlzLnNsaWRlciA9IHRydWU7IC8vIHNob3cgdGhlIHZhbHVlL3NhdHVyYXRpb24gc2xpZGVyPw0KCQl0aGlzLnZhbHVlRWxlbWVudCA9IHRhcmdldDsgLy8gdmFsdWUgaG9sZGVyDQoJCXRoaXMuc3R5bGVFbGVtZW50ID0gdGFyZ2V0OyAvLyB3aGVyZSB0byByZWZsZWN0IGN1cnJlbnQgY29sb3INCgkJdGhpcy5vbkltbWVkaWF0ZUNoYW5nZSA9IG51bGw7IC8vIG9uY2hhbmdlIGNhbGxiYWNrIChjYW4gYmUgZWl0aGVyIHN0cmluZyBvciBmdW5jdGlvbikNCgkJdGhpcy5oc3YgPSBbMCwgMCwgMV07IC8vIHJlYWQtb25seSAgMC02LCAwLTEsIDAtMQ0KCQl0aGlzLnJnYiA9IFsxLCAxLCAxXTsgLy8gcmVhZC1vbmx5ICAwLTEsIDAtMSwgMC0xDQoJCXRoaXMubWluSCA9IDA7IC8vIHJlYWQtb25seSAgMC02DQoJCXRoaXMubWF4SCA9IDY7IC8vIHJlYWQtb25seSAgMC02DQoJCXRoaXMubWluUyA9IDA7IC8vIHJlYWQtb25seSAgMC0xDQoJCXRoaXMubWF4UyA9IDE7IC8vIHJlYWQtb25seSAgMC0xDQoJCXRoaXMubWluViA9IDA7IC8vIHJlYWQtb25seSAgMC0xDQoJCXRoaXMubWF4ViA9IDE7IC8vIHJlYWQtb25seSAgMC0xDQoNCgkJdGhpcy5waWNrZXJPbmZvY3VzID0gdHJ1ZTsgLy8gZGlzcGxheSBwaWNrZXIgb24gZm9jdXM/DQoJCXRoaXMucGlja2VyTW9kZSA9ICdIU1YnOyAvLyBIU1YgfCBIVlMNCgkJdGhpcy5waWNrZXJQb3NpdGlvbiA9ICdib3R0b20nOyAvLyBsZWZ0IHwgcmlnaHQgfCB0b3AgfCBib3R0b20NCgkJdGhpcy5waWNrZXJTbWFydFBvc2l0aW9uID0gdHJ1ZTsgLy8gYXV0b21hdGljYWxseSBhZGp1c3QgcGlja2VyIHBvc2l0aW9uIHdoZW4gbmVjZXNzYXJ5DQoJCXRoaXMucGlja2VyQnV0dG9uSGVpZ2h0ID0gMjA7IC8vIHB4DQoJCXRoaXMucGlja2VyQ2xvc2FibGUgPSBmYWxzZTsNCgkJdGhpcy5waWNrZXJDbG9zZVRleHQgPSAnQ2xvc2UnOw0KCQl0aGlzLnBpY2tlckJ1dHRvbkNvbG9yID0gJ0J1dHRvblRleHQnOyAvLyBweA0KCQl0aGlzLnBpY2tlckZhY2UgPSAxMDsgLy8gcHgNCgkJdGhpcy5waWNrZXJGYWNlQ29sb3IgPSAnVGhyZWVERmFjZSc7IC8vIENTUyBjb2xvcg0KCQl0aGlzLnBpY2tlckJvcmRlciA9IDE7IC8vIHB4DQoJCXRoaXMucGlja2VyQm9yZGVyQ29sb3IgPSAnVGhyZWVESGlnaGxpZ2h0IFRocmVlRFNoYWRvdyBUaHJlZURTaGFkb3cgVGhyZWVESGlnaGxpZ2h0JzsgLy8gQ1NTIGNvbG9yDQoJCXRoaXMucGlja2VySW5zZXQgPSAxOyAvLyBweA0KCQl0aGlzLnBpY2tlckluc2V0Q29sb3IgPSAnVGhyZWVEU2hhZG93IFRocmVlREhpZ2hsaWdodCBUaHJlZURIaWdobGlnaHQgVGhyZWVEU2hhZG93JzsgLy8gQ1NTIGNvbG9yDQoJCXRoaXMucGlja2VyWkluZGV4ID0gMTAwMDA7DQoNCg0KCQlmb3IodmFyIHAgaW4gcHJvcCkgew0KCQkJaWYocHJvcC5oYXNPd25Qcm9wZXJ0eShwKSkgew0KCQkJCXRoaXNbcF0gPSBwcm9wW3BdOw0KCQkJfQ0KCQl9DQoNCg0KCQl0aGlzLmhpZGVQaWNrZXIgPSBmdW5jdGlvbigpIHsNCgkJCWlmKGlzUGlja2VyT3duZXIoKSkgew0KCQkJCXJlbW92ZVBpY2tlcigpOw0KCQkJfQ0KCQl9Ow0KDQoNCgkJdGhpcy5zaG93UGlja2VyID0gZnVuY3Rpb24oKSB7DQoJCQlpZighaXNQaWNrZXJPd25lcigpKSB7DQoJCQkJdmFyIHRwID0ganNjb2xvci5nZXRFbGVtZW50UG9zKHRhcmdldCk7IC8vIHRhcmdldCBwb3MNCgkJCQl2YXIgdHMgPSBqc2NvbG9yLmdldEVsZW1lbnRTaXplKHRhcmdldCk7IC8vIHRhcmdldCBzaXplDQoJCQkJdmFyIHZwID0ganNjb2xvci5nZXRWaWV3UG9zKCk7IC8vIHZpZXcgcG9zDQoJCQkJdmFyIHZzID0ganNjb2xvci5nZXRWaWV3U2l6ZSgpOyAvLyB2aWV3IHNpemUNCgkJCQl2YXIgcHMgPSBnZXRQaWNrZXJEaW1zKHRoaXMpOyAvLyBwaWNrZXIgc2l6ZQ0KCQkJCXZhciBhLCBiLCBjOw0KCQkJCXN3aXRjaCh0aGlzLnBpY2tlclBvc2l0aW9uLnRvTG93ZXJDYXNlKCkpIHsNCgkJCQkJY2FzZSAnbGVmdCc6IGE9MTsgYj0wOyBjPS0xOyBicmVhazsNCgkJCQkJY2FzZSAncmlnaHQnOmE9MTsgYj0wOyBjPTE7IGJyZWFrOw0KCQkJCQljYXNlICd0b3AnOiAgYT0wOyBiPTE7IGM9LTE7IGJyZWFrOw0KCQkJCQlkZWZhdWx0OiAgICAgYT0wOyBiPTE7IGM9MTsgYnJlYWs7DQoJCQkJfQ0KCQkJCXZhciBsID0gKHRzW2JdK3BzW2JdKS8yOw0KDQoJCQkJLy8gcGlja2VyIHBvcw0KCQkJCWlmICghdGhpcy5waWNrZXJTbWFydFBvc2l0aW9uKSB7DQoJCQkJCXZhciBwcCA9IFsNCgkJCQkJCXRwW2FdLA0KCQkJCQkJdHBbYl0rdHNbYl0tbCtsKmMNCgkJCQkJXTsNCgkJCQl9IGVsc2Ugew0KCQkJCQl2YXIgcHAgPSBbDQoJCQkJCQktdnBbYV0rdHBbYV0rcHNbYV0gPiB2c1thXSA/DQoJCQkJCQkJKC12cFthXSt0cFthXSt0c1thXS8yID4gdnNbYV0vMiAmJiB0cFthXSt0c1thXS1wc1thXSA+PSAwID8gdHBbYV0rdHNbYV0tcHNbYV0gOiB0cFthXSkgOg0KCQkJCQkJCXRwW2FdLA0KCQkJCQkJLXZwW2JdK3RwW2JdK3RzW2JdK3BzW2JdLWwrbCpjID4gdnNbYl0gPw0KCQkJCQkJCSgtdnBbYl0rdHBbYl0rdHNbYl0vMiA+IHZzW2JdLzIgJiYgdHBbYl0rdHNbYl0tbC1sKmMgPj0gMCA/IHRwW2JdK3RzW2JdLWwtbCpjIDogdHBbYl0rdHNbYl0tbCtsKmMpIDoNCgkJCQkJCQkodHBbYl0rdHNbYl0tbCtsKmMgPj0gMCA/IHRwW2JdK3RzW2JdLWwrbCpjIDogdHBbYl0rdHNbYl0tbC1sKmMpDQoJCQkJCV07DQoJCQkJfQ0KCQkJCWRyYXdQaWNrZXIocHBbYV0sIHBwW2JdKTsNCgkJCX0NCgkJfTsNCg0KDQoJCXRoaXMuaW1wb3J0Q29sb3IgPSBmdW5jdGlvbigpIHsNCgkJCWlmKCF2YWx1ZUVsZW1lbnQpIHsNCgkJCQl0aGlzLmV4cG9ydENvbG9yKCk7DQoJCQl9IGVsc2Ugew0KCQkJCWlmKCF0aGlzLmFkanVzdCkgew0KCQkJCQlpZighdGhpcy5mcm9tU3RyaW5nKHZhbHVlRWxlbWVudC52YWx1ZSwgbGVhdmVWYWx1ZSkpIHsNCgkJCQkJCXN0eWxlRWxlbWVudC5zdHlsZS5iYWNrZ3JvdW5kSW1hZ2UgPSBzdHlsZUVsZW1lbnQuanNjU3R5bGUuYmFja2dyb3VuZEltYWdlOw0KCQkJCQkJc3R5bGVFbGVtZW50LnN0eWxlLmJhY2tncm91bmRDb2xvciA9IHN0eWxlRWxlbWVudC5qc2NTdHlsZS5iYWNrZ3JvdW5kQ29sb3I7DQoJCQkJCQlzdHlsZUVsZW1lbnQuc3R5bGUuY29sb3IgPSBzdHlsZUVsZW1lbnQuanNjU3R5bGUuY29sb3I7DQoJCQkJCQl0aGlzLmV4cG9ydENvbG9yKGxlYXZlVmFsdWUgfCBsZWF2ZVN0eWxlKTsNCgkJCQkJfQ0KCQkJCX0gZWxzZSBpZighdGhpcy5yZXF1aXJlZCAmJiAvXlxzKiQvLnRlc3QodmFsdWVFbGVtZW50LnZhbHVlKSkgew0KCQkJCQl2YWx1ZUVsZW1lbnQudmFsdWUgPSAnJzsNCgkJCQkJc3R5bGVFbGVtZW50LnN0eWxlLmJhY2tncm91bmRJbWFnZSA9IHN0eWxlRWxlbWVudC5qc2NTdHlsZS5iYWNrZ3JvdW5kSW1hZ2U7DQoJCQkJCXN0eWxlRWxlbWVudC5zdHlsZS5iYWNrZ3JvdW5kQ29sb3IgPSBzdHlsZUVsZW1lbnQuanNjU3R5bGUuYmFja2dyb3VuZENvbG9yOw0KCQkJCQlzdHlsZUVsZW1lbnQuc3R5bGUuY29sb3IgPSBzdHlsZUVsZW1lbnQuanNjU3R5bGUuY29sb3I7DQoJCQkJCXRoaXMuZXhwb3J0Q29sb3IobGVhdmVWYWx1ZSB8IGxlYXZlU3R5bGUpOw0KDQoJCQkJfSBlbHNlIGlmKHRoaXMuZnJvbVN0cmluZyh2YWx1ZUVsZW1lbnQudmFsdWUpKSB7DQoJCQkJCS8vIE9LDQoJCQkJfSBlbHNlIHsNCgkJCQkJdGhpcy5leHBvcnRDb2xvcigpOw0KCQkJCX0NCgkJCX0NCgkJfTsNCg0KDQoJCXRoaXMuZXhwb3J0Q29sb3IgPSBmdW5jdGlvbihmbGFncykgew0KCQkJaWYoIShmbGFncyAmIGxlYXZlVmFsdWUpICYmIHZhbHVlRWxlbWVudCkgew0KCQkJCXZhciB2YWx1ZSA9IHRoaXMudG9TdHJpbmcoKTsNCgkJCQlpZih0aGlzLmNhcHMpIHsgdmFsdWUgPSB2YWx1ZS50b1VwcGVyQ2FzZSgpOyB9DQoJCQkJaWYodGhpcy5oYXNoKSB7IHZhbHVlID0gJyMnK3ZhbHVlOyB9DQoJCQkJdmFsdWVFbGVtZW50LnZhbHVlID0gdmFsdWU7DQoJCQl9DQoJCQlpZighKGZsYWdzICYgbGVhdmVTdHlsZSkgJiYgc3R5bGVFbGVtZW50KSB7DQoJCQkJc3R5bGVFbGVtZW50LnN0eWxlLmJhY2tncm91bmRJbWFnZSA9ICJub25lIjsNCgkJCQlzdHlsZUVsZW1lbnQuc3R5bGUuYmFja2dyb3VuZENvbG9yID0NCgkJCQkJJyMnK3RoaXMudG9TdHJpbmcoKTsNCgkJCQlzdHlsZUVsZW1lbnQuc3R5bGUuY29sb3IgPQ0KCQkJCQkwLjIxMyAqIHRoaXMucmdiWzBdICsNCgkJCQkJMC43MTUgKiB0aGlzLnJnYlsxXSArDQoJCQkJCTAuMDcyICogdGhpcy5yZ2JbMl0NCgkJCQkJPCAwLjUgPyAnI0ZGRicgOiAnIzAwMCc7DQoJCQl9DQoJCQlpZighKGZsYWdzICYgbGVhdmVQYWQpICYmIGlzUGlja2VyT3duZXIoKSkgew0KCQkJCXJlZHJhd1BhZCgpOw0KCQkJfQ0KCQkJaWYoIShmbGFncyAmIGxlYXZlU2xkKSAmJiBpc1BpY2tlck93bmVyKCkpIHsNCgkJCQlyZWRyYXdTbGQoKTsNCgkJCX0NCgkJfTsNCg0KDQoJCXRoaXMuZnJvbUhTViA9IGZ1bmN0aW9uKGgsIHMsIHYsIGZsYWdzKSB7IC8vIG51bGwgPSBkb24ndCBjaGFuZ2UNCgkJCWlmKGggIT09IG51bGwpIHsgaCA9IE1hdGgubWF4KDAuMCwgdGhpcy5taW5ILCBNYXRoLm1pbig2LjAsIHRoaXMubWF4SCwgaCkpOyB9DQoJCQlpZihzICE9PSBudWxsKSB7IHMgPSBNYXRoLm1heCgwLjAsIHRoaXMubWluUywgTWF0aC5taW4oMS4wLCB0aGlzLm1heFMsIHMpKTsgfQ0KCQkJaWYodiAhPT0gbnVsbCkgeyB2ID0gTWF0aC5tYXgoMC4wLCB0aGlzLm1pblYsIE1hdGgubWluKDEuMCwgdGhpcy5tYXhWLCB2KSk7IH0NCg0KCQkJdGhpcy5yZ2IgPSBIU1ZfUkdCKA0KCQkJCWg9PT1udWxsID8gdGhpcy5oc3ZbMF0gOiAodGhpcy5oc3ZbMF09aCksDQoJCQkJcz09PW51bGwgPyB0aGlzLmhzdlsxXSA6ICh0aGlzLmhzdlsxXT1zKSwNCgkJCQl2PT09bnVsbCA/IHRoaXMuaHN2WzJdIDogKHRoaXMuaHN2WzJdPXYpDQoJCQkpOw0KDQoJCQl0aGlzLmV4cG9ydENvbG9yKGZsYWdzKTsNCgkJfTsNCg0KDQoJCXRoaXMuZnJvbVJHQiA9IGZ1bmN0aW9uKHIsIGcsIGIsIGZsYWdzKSB7IC8vIG51bGwgPSBkb24ndCBjaGFuZ2UNCgkJCWlmKHIgIT09IG51bGwpIHsgciA9IE1hdGgubWF4KDAuMCwgTWF0aC5taW4oMS4wLCByKSk7IH0NCgkJCWlmKGcgIT09IG51bGwpIHsgZyA9IE1hdGgubWF4KDAuMCwgTWF0aC5taW4oMS4wLCBnKSk7IH0NCgkJCWlmKGIgIT09IG51bGwpIHsgYiA9IE1hdGgubWF4KDAuMCwgTWF0aC5taW4oMS4wLCBiKSk7IH0NCg0KCQkJdmFyIGhzdiA9IFJHQl9IU1YoDQoJCQkJcj09PW51bGwgPyB0aGlzLnJnYlswXSA6IHIsDQoJCQkJZz09PW51bGwgPyB0aGlzLnJnYlsxXSA6IGcsDQoJCQkJYj09PW51bGwgPyB0aGlzLnJnYlsyXSA6IGINCgkJCSk7DQoJCQlpZihoc3ZbMF0gIT09IG51bGwpIHsNCgkJCQl0aGlzLmhzdlswXSA9IE1hdGgubWF4KDAuMCwgdGhpcy5taW5ILCBNYXRoLm1pbig2LjAsIHRoaXMubWF4SCwgaHN2WzBdKSk7DQoJCQl9DQoJCQlpZihoc3ZbMl0gIT09IDApIHsNCgkJCQl0aGlzLmhzdlsxXSA9IGhzdlsxXT09PW51bGwgPyBudWxsIDogTWF0aC5tYXgoMC4wLCB0aGlzLm1pblMsIE1hdGgubWluKDEuMCwgdGhpcy5tYXhTLCBoc3ZbMV0pKTsNCgkJCX0NCgkJCXRoaXMuaHN2WzJdID0gaHN2WzJdPT09bnVsbCA/IG51bGwgOiBNYXRoLm1heCgwLjAsIHRoaXMubWluViwgTWF0aC5taW4oMS4wLCB0aGlzLm1heFYsIGhzdlsyXSkpOw0KDQoJCQkvLyB1cGRhdGUgUkdCIGFjY29yZGluZyB0byBmaW5hbCBIU1YsIGFzIHNvbWUgdmFsdWVzIG1pZ2h0IGJlIHRyaW1tZWQNCgkJCXZhciByZ2IgPSBIU1ZfUkdCKHRoaXMuaHN2WzBdLCB0aGlzLmhzdlsxXSwgdGhpcy5oc3ZbMl0pOw0KCQkJdGhpcy5yZ2JbMF0gPSByZ2JbMF07DQoJCQl0aGlzLnJnYlsxXSA9IHJnYlsxXTsNCgkJCXRoaXMucmdiWzJdID0gcmdiWzJdOw0KDQoJCQl0aGlzLmV4cG9ydENvbG9yKGZsYWdzKTsNCgkJfTsNCg0KDQoJCXRoaXMuZnJvbVN0cmluZyA9IGZ1bmN0aW9uKGhleCwgZmxhZ3MpIHsNCgkJCXZhciBtID0gaGV4Lm1hdGNoKC9eXFcqKFswLTlBLUZdezN9KFswLTlBLUZdezN9KT8pXFcqJC9pKTsNCgkJCWlmKCFtKSB7DQoJCQkJcmV0dXJuIGZhbHNlOw0KCQkJfSBlbHNlIHsNCgkJCQlpZihtWzFdLmxlbmd0aCA9PT0gNikgeyAvLyA2LWNoYXIgbm90YXRpb24NCgkJCQkJdGhpcy5mcm9tUkdCKA0KCQkJCQkJcGFyc2VJbnQobVsxXS5zdWJzdHIoMCwyKSwxNikgLyAyNTUsDQoJCQkJCQlwYXJzZUludChtWzFdLnN1YnN0cigyLDIpLDE2KSAvIDI1NSwNCgkJCQkJCXBhcnNlSW50KG1bMV0uc3Vic3RyKDQsMiksMTYpIC8gMjU1LA0KCQkJCQkJZmxhZ3MNCgkJCQkJKTsNCgkJCQl9IGVsc2UgeyAvLyAzLWNoYXIgbm90YXRpb24NCgkJCQkJdGhpcy5mcm9tUkdCKA0KCQkJCQkJcGFyc2VJbnQobVsxXS5jaGFyQXQoMCkrbVsxXS5jaGFyQXQoMCksMTYpIC8gMjU1LA0KCQkJCQkJcGFyc2VJbnQobVsxXS5jaGFyQXQoMSkrbVsxXS5jaGFyQXQoMSksMTYpIC8gMjU1LA0KCQkJCQkJcGFyc2VJbnQobVsxXS5jaGFyQXQoMikrbVsxXS5jaGFyQXQoMiksMTYpIC8gMjU1LA0KCQkJCQkJZmxhZ3MNCgkJCQkJKTsNCgkJCQl9DQoJCQkJcmV0dXJuIHRydWU7DQoJCQl9DQoJCX07DQoNCg0KCQl0aGlzLnRvU3RyaW5nID0gZnVuY3Rpb24oKSB7DQoJCQlyZXR1cm4gKA0KCQkJCSgweDEwMCB8IE1hdGgucm91bmQoMjU1KnRoaXMucmdiWzBdKSkudG9TdHJpbmcoMTYpLnN1YnN0cigxKSArDQoJCQkJKDB4MTAwIHwgTWF0aC5yb3VuZCgyNTUqdGhpcy5yZ2JbMV0pKS50b1N0cmluZygxNikuc3Vic3RyKDEpICsNCgkJCQkoMHgxMDAgfCBNYXRoLnJvdW5kKDI1NSp0aGlzLnJnYlsyXSkpLnRvU3RyaW5nKDE2KS5zdWJzdHIoMSkNCgkJCSk7DQoJCX07DQoNCg0KCQlmdW5jdGlvbiBSR0JfSFNWKHIsIGcsIGIpIHsNCgkJCXZhciBuID0gTWF0aC5taW4oTWF0aC5taW4ocixnKSxiKTsNCgkJCXZhciB2ID0gTWF0aC5tYXgoTWF0aC5tYXgocixnKSxiKTsNCgkJCXZhciBtID0gdiAtIG47DQoJCQlpZihtID09PSAwKSB7IHJldHVybiBbIG51bGwsIDAsIHYgXTsgfQ0KCQkJdmFyIGggPSByPT09biA/IDMrKGItZykvbSA6IChnPT09biA/IDUrKHItYikvbSA6IDErKGctcikvbSk7DQoJCQlyZXR1cm4gWyBoPT09Nj8wOmgsIG0vdiwgdiBdOw0KCQl9DQoNCg0KCQlmdW5jdGlvbiBIU1ZfUkdCKGgsIHMsIHYpIHsNCgkJCWlmKGggPT09IG51bGwpIHsgcmV0dXJuIFsgdiwgdiwgdiBdOyB9DQoJCQl2YXIgaSA9IE1hdGguZmxvb3IoaCk7DQoJCQl2YXIgZiA9IGklMiA/IGgtaSA6IDEtKGgtaSk7DQoJCQl2YXIgbSA9IHYgKiAoMSAtIHMpOw0KCQkJdmFyIG4gPSB2ICogKDEgLSBzKmYpOw0KCQkJc3dpdGNoKGkpIHsNCgkJCQljYXNlIDY6DQoJCQkJY2FzZSAwOiByZXR1cm4gW3YsbixtXTsNCgkJCQljYXNlIDE6IHJldHVybiBbbix2LG1dOw0KCQkJCWNhc2UgMjogcmV0dXJuIFttLHYsbl07DQoJCQkJY2FzZSAzOiByZXR1cm4gW20sbix2XTsNCgkJCQljYXNlIDQ6IHJldHVybiBbbixtLHZdOw0KCQkJCWNhc2UgNTogcmV0dXJuIFt2LG0sbl07DQoJCQl9DQoJCX0NCg0KDQoJCWZ1bmN0aW9uIHJlbW92ZVBpY2tlcigpIHsNCgkJCWRlbGV0ZSBqc2NvbG9yLnBpY2tlci5vd25lcjsNCgkJCWRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdib2R5JylbMF0ucmVtb3ZlQ2hpbGQoanNjb2xvci5waWNrZXIuYm94Qik7DQoJCX0NCg0KDQoJCWZ1bmN0aW9uIGRyYXdQaWNrZXIoeCwgeSkgew0KCQkJaWYoIWpzY29sb3IucGlja2VyKSB7DQoJCQkJanNjb2xvci5waWNrZXIgPSB7DQoJCQkJCWJveCA6IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpLA0KCQkJCQlib3hCIDogZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2JyksDQoJCQkJCXBhZCA6IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpLA0KCQkJCQlwYWRCIDogZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2JyksDQoJCQkJCXBhZE0gOiBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKSwNCgkJCQkJc2xkIDogZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2JyksDQoJCQkJCXNsZEIgOiBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKSwNCgkJCQkJc2xkTSA6IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpLA0KCQkJCQlidG4gOiBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKSwNCgkJCQkJYnRuUyA6IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NwYW4nKSwNCgkJCQkJYnRuVCA6IGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKFRISVMucGlja2VyQ2xvc2VUZXh0KQ0KCQkJCX07DQoJCQkJZm9yKHZhciBpPTAsc2VnU2l6ZT00OyBpPGpzY29sb3IuaW1hZ2VzLnNsZFsxXTsgaSs9c2VnU2l6ZSkgew0KCQkJCQl2YXIgc2VnID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7DQoJCQkJCXNlZy5zdHlsZS5oZWlnaHQgPSBzZWdTaXplKydweCc7DQoJCQkJCXNlZy5zdHlsZS5mb250U2l6ZSA9ICcxcHgnOw0KCQkJCQlzZWcuc3R5bGUubGluZUhlaWdodCA9ICcwJzsNCgkJCQkJanNjb2xvci5waWNrZXIuc2xkLmFwcGVuZENoaWxkKHNlZyk7DQoJCQkJfQ0KCQkJCWpzY29sb3IucGlja2VyLnNsZEIuYXBwZW5kQ2hpbGQoanNjb2xvci5waWNrZXIuc2xkKTsNCgkJCQlqc2NvbG9yLnBpY2tlci5ib3guYXBwZW5kQ2hpbGQoanNjb2xvci5waWNrZXIuc2xkQik7DQoJCQkJanNjb2xvci5waWNrZXIuYm94LmFwcGVuZENoaWxkKGpzY29sb3IucGlja2VyLnNsZE0pOw0KCQkJCWpzY29sb3IucGlja2VyLnBhZEIuYXBwZW5kQ2hpbGQoanNjb2xvci5waWNrZXIucGFkKTsNCgkJCQlqc2NvbG9yLnBpY2tlci5ib3guYXBwZW5kQ2hpbGQoanNjb2xvci5waWNrZXIucGFkQik7DQoJCQkJanNjb2xvci5waWNrZXIuYm94LmFwcGVuZENoaWxkKGpzY29sb3IucGlja2VyLnBhZE0pOw0KCQkJCWpzY29sb3IucGlja2VyLmJ0blMuYXBwZW5kQ2hpbGQoanNjb2xvci5waWNrZXIuYnRuVCk7DQoJCQkJanNjb2xvci5waWNrZXIuYnRuLmFwcGVuZENoaWxkKGpzY29sb3IucGlja2VyLmJ0blMpOw0KCQkJCWpzY29sb3IucGlja2VyLmJveC5hcHBlbmRDaGlsZChqc2NvbG9yLnBpY2tlci5idG4pOw0KCQkJCWpzY29sb3IucGlja2VyLmJveEIuYXBwZW5kQ2hpbGQoanNjb2xvci5waWNrZXIuYm94KTsNCgkJCX0NCg0KCQkJdmFyIHAgPSBqc2NvbG9yLnBpY2tlcjsNCg0KCQkJLy8gY29udHJvbHMgaW50ZXJhY3Rpb24NCgkJCXAuYm94Lm9ubW91c2V1cCA9DQoJCQlwLmJveC5vbm1vdXNlb3V0ID0gZnVuY3Rpb24oKSB7IHRhcmdldC5mb2N1cygpOyB9Ow0KCQkJcC5ib3gub25tb3VzZWRvd24gPSBmdW5jdGlvbigpIHsgYWJvcnRCbHVyPXRydWU7IH07DQoJCQlwLmJveC5vbm1vdXNlbW92ZSA9IGZ1bmN0aW9uKGUpIHsNCgkJCQlpZiAoaG9sZFBhZCB8fCBob2xkU2xkKSB7DQoJCQkJCWhvbGRQYWQgJiYgc2V0UGFkKGUpOw0KCQkJCQlob2xkU2xkICYmIHNldFNsZChlKTsNCgkJCQkJaWYgKGRvY3VtZW50LnNlbGVjdGlvbikgew0KCQkJCQkJZG9jdW1lbnQuc2VsZWN0aW9uLmVtcHR5KCk7DQoJCQkJCX0gZWxzZSBpZiAod2luZG93LmdldFNlbGVjdGlvbikgew0KCQkJCQkJd2luZG93LmdldFNlbGVjdGlvbigpLnJlbW92ZUFsbFJhbmdlcygpOw0KCQkJCQl9DQoJCQkJCWRpc3BhdGNoSW1tZWRpYXRlQ2hhbmdlKCk7DQoJCQkJfQ0KCQkJfTsNCgkJCWlmKCdvbnRvdWNoc3RhcnQnIGluIHdpbmRvdykgeyAvLyBpZiB0b3VjaCBkZXZpY2UNCgkJCQlwLmJveC5hZGRFdmVudExpc3RlbmVyKCd0b3VjaG1vdmUnLCBmdW5jdGlvbihlKSB7DQoJCQkJCXZhciBldmVudD17DQoJCQkJCQknb2Zmc2V0WCc6IGUudG91Y2hlc1swXS5wYWdlWC10b3VjaE9mZnNldC5YLA0KCQkJCQkJJ29mZnNldFknOiBlLnRvdWNoZXNbMF0ucGFnZVktdG91Y2hPZmZzZXQuWQ0KCQkJCQl9Ow0KCQkJCQlpZiAoaG9sZFBhZCB8fCBob2xkU2xkKSB7DQoJCQkJCQlob2xkUGFkICYmIHNldFBhZChldmVudCk7DQoJCQkJCQlob2xkU2xkICYmIHNldFNsZChldmVudCk7DQoJCQkJCQlkaXNwYXRjaEltbWVkaWF0ZUNoYW5nZSgpOw0KCQkJCQl9DQoJCQkJCWUuc3RvcFByb3BhZ2F0aW9uKCk7IC8vIHByZXZlbnQgbW92ZSAidmlldyIgb24gYnJvc3dlcg0KCQkJCQllLnByZXZlbnREZWZhdWx0KCk7IC8vIHByZXZlbnQgRGVmYXVsdCAtIEFuZHJvaWQgRml4IChlbHNlIGFuZHJvaWQgZ2VuZXJhdGVkIG9ubHkgMS0yIHRvdWNobW92ZSBldmVudHMpDQoJCQkJfSwgZmFsc2UpOw0KCQkJfQ0KCQkJcC5wYWRNLm9ubW91c2V1cCA9DQoJCQlwLnBhZE0ub25tb3VzZW91dCA9IGZ1bmN0aW9uKCkgeyBpZihob2xkUGFkKSB7IGhvbGRQYWQ9ZmFsc2U7IGpzY29sb3IuZmlyZUV2ZW50KHZhbHVlRWxlbWVudCwnY2hhbmdlJyk7IH0gfTsNCgkJCXAucGFkTS5vbm1vdXNlZG93biA9IGZ1bmN0aW9uKGUpIHsNCgkJCQkvLyBpZiB0aGUgc2xpZGVyIGlzIGF0IHRoZSBib3R0b20sIG1vdmUgaXQgdXANCgkJCQlzd2l0Y2gobW9kZUlEKSB7DQoJCQkJCWNhc2UgMDogaWYgKFRISVMuaHN2WzJdID09PSAwKSB7IFRISVMuZnJvbUhTVihudWxsLCBudWxsLCAxLjApOyB9OyBicmVhazsNCgkJCQkJY2FzZSAxOiBpZiAoVEhJUy5oc3ZbMV0gPT09IDApIHsgVEhJUy5mcm9tSFNWKG51bGwsIDEuMCwgbnVsbCk7IH07IGJyZWFrOw0KCQkJCX0NCgkJCQlob2xkU2xkPWZhbHNlOw0KCQkJCWhvbGRQYWQ9dHJ1ZTsNCgkJCQlzZXRQYWQoZSk7DQoJCQkJZGlzcGF0Y2hJbW1lZGlhdGVDaGFuZ2UoKTsNCgkJCX07DQoJCQlpZignb250b3VjaHN0YXJ0JyBpbiB3aW5kb3cpIHsNCgkJCQlwLnBhZE0uYWRkRXZlbnRMaXN0ZW5lcigndG91Y2hzdGFydCcsIGZ1bmN0aW9uKGUpIHsNCgkJCQkJdG91Y2hPZmZzZXQ9ew0KCQkJCQkJJ1gnOiBlLnRhcmdldC5vZmZzZXRQYXJlbnQub2Zmc2V0TGVmdCwNCgkJCQkJCSdZJzogZS50YXJnZXQub2Zmc2V0UGFyZW50Lm9mZnNldFRvcA0KCQkJCQl9Ow0KCQkJCQl0aGlzLm9ubW91c2Vkb3duKHsNCgkJCQkJCSdvZmZzZXRYJzplLnRvdWNoZXNbMF0ucGFnZVgtdG91Y2hPZmZzZXQuWCwNCgkJCQkJCSdvZmZzZXRZJzplLnRvdWNoZXNbMF0ucGFnZVktdG91Y2hPZmZzZXQuWQ0KCQkJCQl9KTsNCgkJCQl9KTsNCgkJCX0NCgkJCXAuc2xkTS5vbm1vdXNldXAgPQ0KCQkJcC5zbGRNLm9ubW91c2VvdXQgPSBmdW5jdGlvbigpIHsgaWYoaG9sZFNsZCkgeyBob2xkU2xkPWZhbHNlOyBqc2NvbG9yLmZpcmVFdmVudCh2YWx1ZUVsZW1lbnQsJ2NoYW5nZScpOyB9IH07DQoJCQlwLnNsZE0ub25tb3VzZWRvd24gPSBmdW5jdGlvbihlKSB7DQoJCQkJaG9sZFBhZD1mYWxzZTsNCgkJCQlob2xkU2xkPXRydWU7DQoJCQkJc2V0U2xkKGUpOw0KCQkJCWRpc3BhdGNoSW1tZWRpYXRlQ2hhbmdlKCk7DQoJCQl9Ow0KCQkJaWYoJ29udG91Y2hzdGFydCcgaW4gd2luZG93KSB7DQoJCQkJcC5zbGRNLmFkZEV2ZW50TGlzdGVuZXIoJ3RvdWNoc3RhcnQnLCBmdW5jdGlvbihlKSB7DQoJCQkJCXRvdWNoT2Zmc2V0PXsNCgkJCQkJCSdYJzogZS50YXJnZXQub2Zmc2V0UGFyZW50Lm9mZnNldExlZnQsDQoJCQkJCQknWSc6IGUudGFyZ2V0Lm9mZnNldFBhcmVudC5vZmZzZXRUb3ANCgkJCQkJfTsNCgkJCQkJdGhpcy5vbm1vdXNlZG93bih7DQoJCQkJCQknb2Zmc2V0WCc6ZS50b3VjaGVzWzBdLnBhZ2VYLXRvdWNoT2Zmc2V0LlgsDQoJCQkJCQknb2Zmc2V0WSc6ZS50b3VjaGVzWzBdLnBhZ2VZLXRvdWNoT2Zmc2V0LlkNCgkJCQkJfSk7DQoJCQkJfSk7DQoJCQl9DQoNCgkJCS8vIHBpY2tlcg0KCQkJdmFyIGRpbXMgPSBnZXRQaWNrZXJEaW1zKFRISVMpOw0KCQkJcC5ib3guc3R5bGUud2lkdGggPSBkaW1zWzBdICsgJ3B4JzsNCgkJCXAuYm94LnN0eWxlLmhlaWdodCA9IGRpbXNbMV0gKyAncHgnOw0KDQoJCQkvLyBwaWNrZXIgYm9yZGVyDQoJCQlwLmJveEIuc3R5bGUucG9zaXRpb24gPSAnYWJzb2x1dGUnOw0KCQkJcC5ib3hCLnN0eWxlLmNsZWFyID0gJ2JvdGgnOw0KCQkJcC5ib3hCLnN0eWxlLmxlZnQgPSB4KydweCc7DQoJCQlwLmJveEIuc3R5bGUudG9wID0geSsncHgnOw0KCQkJcC5ib3hCLnN0eWxlLnpJbmRleCA9IFRISVMucGlja2VyWkluZGV4Ow0KCQkJcC5ib3hCLnN0eWxlLmJvcmRlciA9IFRISVMucGlja2VyQm9yZGVyKydweCBzb2xpZCc7DQoJCQlwLmJveEIuc3R5bGUuYm9yZGVyQ29sb3IgPSBUSElTLnBpY2tlckJvcmRlckNvbG9yOw0KCQkJcC5ib3hCLnN0eWxlLmJhY2tncm91bmQgPSBUSElTLnBpY2tlckZhY2VDb2xvcjsNCg0KCQkJLy8gcGFkIGltYWdlDQoJCQlwLnBhZC5zdHlsZS53aWR0aCA9IGpzY29sb3IuaW1hZ2VzLnBhZFswXSsncHgnOw0KCQkJcC5wYWQuc3R5bGUuaGVpZ2h0ID0ganNjb2xvci5pbWFnZXMucGFkWzFdKydweCc7DQoNCgkJCS8vIHBhZCBib3JkZXINCgkJCXAucGFkQi5zdHlsZS5wb3NpdGlvbiA9ICdhYnNvbHV0ZSc7DQoJCQlwLnBhZEIuc3R5bGUubGVmdCA9IFRISVMucGlja2VyRmFjZSsncHgnOw0KCQkJcC5wYWRCLnN0eWxlLnRvcCA9IFRISVMucGlja2VyRmFjZSsncHgnOw0KCQkJcC5wYWRCLnN0eWxlLmJvcmRlciA9IFRISVMucGlja2VySW5zZXQrJ3B4IHNvbGlkJzsNCgkJCXAucGFkQi5zdHlsZS5ib3JkZXJDb2xvciA9IFRISVMucGlja2VySW5zZXRDb2xvcjsNCg0KCQkJLy8gcGFkIG1vdXNlIGFyZWENCgkJCXAucGFkTS5zdHlsZS5wb3NpdGlvbiA9ICdhYnNvbHV0ZSc7DQoJCQlwLnBhZE0uc3R5bGUubGVmdCA9ICcwJzsNCgkJCXAucGFkTS5zdHlsZS50b3AgPSAnMCc7DQoJCQlwLnBhZE0uc3R5bGUud2lkdGggPSBUSElTLnBpY2tlckZhY2UgKyAyKlRISVMucGlja2VySW5zZXQgKyBqc2NvbG9yLmltYWdlcy5wYWRbMF0gKyBqc2NvbG9yLmltYWdlcy5hcnJvd1swXSArICdweCc7DQoJCQlwLnBhZE0uc3R5bGUuaGVpZ2h0ID0gcC5ib3guc3R5bGUuaGVpZ2h0Ow0KCQkJcC5wYWRNLnN0eWxlLmN1cnNvciA9ICdjcm9zc2hhaXInOw0KDQoJCQkvLyBzbGlkZXIgaW1hZ2UNCgkJCXAuc2xkLnN0eWxlLm92ZXJmbG93ID0gJ2hpZGRlbic7DQoJCQlwLnNsZC5zdHlsZS53aWR0aCA9IGpzY29sb3IuaW1hZ2VzLnNsZFswXSsncHgnOw0KCQkJcC5zbGQuc3R5bGUuaGVpZ2h0ID0ganNjb2xvci5pbWFnZXMuc2xkWzFdKydweCc7DQoNCgkJCS8vIHNsaWRlciBib3JkZXINCgkJCXAuc2xkQi5zdHlsZS5kaXNwbGF5ID0gVEhJUy5zbGlkZXIgPyAnYmxvY2snIDogJ25vbmUnOw0KCQkJcC5zbGRCLnN0eWxlLnBvc2l0aW9uID0gJ2Fic29sdXRlJzsNCgkJCXAuc2xkQi5zdHlsZS5yaWdodCA9IFRISVMucGlja2VyRmFjZSsncHgnOw0KCQkJcC5zbGRCLnN0eWxlLnRvcCA9IFRISVMucGlja2VyRmFjZSsncHgnOw0KCQkJcC5zbGRCLnN0eWxlLmJvcmRlciA9IFRISVMucGlja2VySW5zZXQrJ3B4IHNvbGlkJzsNCgkJCXAuc2xkQi5zdHlsZS5ib3JkZXJDb2xvciA9IFRISVMucGlja2VySW5zZXRDb2xvcjsNCg0KCQkJLy8gc2xpZGVyIG1vdXNlIGFyZWENCgkJCXAuc2xkTS5zdHlsZS5kaXNwbGF5ID0gVEhJUy5zbGlkZXIgPyAnYmxvY2snIDogJ25vbmUnOw0KCQkJcC5zbGRNLnN0eWxlLnBvc2l0aW9uID0gJ2Fic29sdXRlJzsNCgkJCXAuc2xkTS5zdHlsZS5yaWdodCA9ICcwJzsNCgkJCXAuc2xkTS5zdHlsZS50b3AgPSAnMCc7DQoJCQlwLnNsZE0uc3R5bGUud2lkdGggPSBqc2NvbG9yLmltYWdlcy5zbGRbMF0gKyBqc2NvbG9yLmltYWdlcy5hcnJvd1swXSArIFRISVMucGlja2VyRmFjZSArIDIqVEhJUy5waWNrZXJJbnNldCArICdweCc7DQoJCQlwLnNsZE0uc3R5bGUuaGVpZ2h0ID0gcC5ib3guc3R5bGUuaGVpZ2h0Ow0KCQkJdHJ5IHsNCgkJCQlwLnNsZE0uc3R5bGUuY3Vyc29yID0gJ3BvaW50ZXInOw0KCQkJfSBjYXRjaChlT2xkSUUpIHsNCgkJCQlwLnNsZE0uc3R5bGUuY3Vyc29yID0gJ2hhbmQnOw0KCQkJfQ0KDQoJCQkvLyAiY2xvc2UiIGJ1dHRvbg0KCQkJZnVuY3Rpb24gc2V0QnRuQm9yZGVyKCkgew0KCQkJCXZhciBpbnNldENvbG9ycyA9IFRISVMucGlja2VySW5zZXRDb2xvci5zcGxpdCgvXHMrLyk7DQoJCQkJdmFyIHBpY2tlck91dHNldENvbG9yID0gaW5zZXRDb2xvcnMubGVuZ3RoIDwgMiA/IGluc2V0Q29sb3JzWzBdIDogaW5zZXRDb2xvcnNbMV0gKyAnICcgKyBpbnNldENvbG9yc1swXSArICcgJyArIGluc2V0Q29sb3JzWzBdICsgJyAnICsgaW5zZXRDb2xvcnNbMV07DQoJCQkJcC5idG4uc3R5bGUuYm9yZGVyQ29sb3IgPSBwaWNrZXJPdXRzZXRDb2xvcjsNCgkJCX0NCgkJCXAuYnRuLnN0eWxlLmRpc3BsYXkgPSBUSElTLnBpY2tlckNsb3NhYmxlID8gJ2Jsb2NrJyA6ICdub25lJzsNCgkJCXAuYnRuLnN0eWxlLnBvc2l0aW9uID0gJ2Fic29sdXRlJzsNCgkJCXAuYnRuLnN0eWxlLmxlZnQgPSBUSElTLnBpY2tlckZhY2UgKyAncHgnOw0KCQkJcC5idG4uc3R5bGUuYm90dG9tID0gVEhJUy5waWNrZXJGYWNlICsgJ3B4JzsNCgkJCXAuYnRuLnN0eWxlLnBhZGRpbmcgPSAnMCAxNXB4JzsNCgkJCXAuYnRuLnN0eWxlLmhlaWdodCA9ICcxOHB4JzsNCgkJCXAuYnRuLnN0eWxlLmJvcmRlciA9IFRISVMucGlja2VySW5zZXQgKyAncHggc29saWQnOw0KCQkJc2V0QnRuQm9yZGVyKCk7DQoJCQlwLmJ0bi5zdHlsZS5jb2xvciA9IFRISVMucGlja2VyQnV0dG9uQ29sb3I7DQoJCQlwLmJ0bi5zdHlsZS5mb250ID0gJzEycHggc2Fucy1zZXJpZic7DQoJCQlwLmJ0bi5zdHlsZS50ZXh0QWxpZ24gPSAnY2VudGVyJzsNCgkJCXRyeSB7DQoJCQkJcC5idG4uc3R5bGUuY3Vyc29yID0gJ3BvaW50ZXInOw0KCQkJfSBjYXRjaChlT2xkSUUpIHsNCgkJCQlwLmJ0bi5zdHlsZS5jdXJzb3IgPSAnaGFuZCc7DQoJCQl9DQoJCQlwLmJ0bi5vbm1vdXNlZG93biA9IGZ1bmN0aW9uICgpIHsNCgkJCQlUSElTLmhpZGVQaWNrZXIoKTsNCgkJCX07DQoJCQlwLmJ0blMuc3R5bGUubGluZUhlaWdodCA9IHAuYnRuLnN0eWxlLmhlaWdodDsNCg0KCQkJLy8gbG9hZCBpbWFnZXMgaW4gb3B0aW1hbCBvcmRlcg0KCQkJc3dpdGNoKG1vZGVJRCkgew0KCQkJCWNhc2UgMDogdmFyIHBhZEltZyA9ICdocy5wbmcnOyBicmVhazsNCgkJCQljYXNlIDE6IHZhciBwYWRJbWcgPSAnaHYucG5nJzsgYnJlYWs7DQoJCQl9DQoJCQlwLnBhZE0uc3R5bGUuYmFja2dyb3VuZEltYWdlID0gInVybCgnIitqc2NvbG9yLmdldERpcigpKyJjcm9zcy5naWYnKSI7DQoJCQlwLnBhZE0uc3R5bGUuYmFja2dyb3VuZFJlcGVhdCA9ICJuby1yZXBlYXQiOw0KCQkJcC5zbGRNLnN0eWxlLmJhY2tncm91bmRJbWFnZSA9ICJ1cmwoJyIranNjb2xvci5nZXREaXIoKSsiYXJyb3cuZ2lmJykiOw0KCQkJcC5zbGRNLnN0eWxlLmJhY2tncm91bmRSZXBlYXQgPSAibm8tcmVwZWF0IjsNCgkJCXAucGFkLnN0eWxlLmJhY2tncm91bmRJbWFnZSA9ICJ1cmwoJyIranNjb2xvci5nZXREaXIoKStwYWRJbWcrIicpIjsNCgkJCXAucGFkLnN0eWxlLmJhY2tncm91bmRSZXBlYXQgPSAibm8tcmVwZWF0IjsNCgkJCXAucGFkLnN0eWxlLmJhY2tncm91bmRQb3NpdGlvbiA9ICIwIDAiOw0KDQoJCQkvLyBwbGFjZSBwb2ludGVycw0KCQkJcmVkcmF3UGFkKCk7DQoJCQlyZWRyYXdTbGQoKTsNCg0KCQkJanNjb2xvci5waWNrZXIub3duZXIgPSBUSElTOw0KCQkJZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2JvZHknKVswXS5hcHBlbmRDaGlsZChwLmJveEIpOw0KCQl9DQoNCg0KCQlmdW5jdGlvbiBnZXRQaWNrZXJEaW1zKG8pIHsNCgkJCXZhciBkaW1zID0gWw0KCQkJCTIqby5waWNrZXJJbnNldCArIDIqby5waWNrZXJGYWNlICsganNjb2xvci5pbWFnZXMucGFkWzBdICsNCgkJCQkJKG8uc2xpZGVyID8gMipvLnBpY2tlckluc2V0ICsgMipqc2NvbG9yLmltYWdlcy5hcnJvd1swXSArIGpzY29sb3IuaW1hZ2VzLnNsZFswXSA6IDApLA0KCQkJCW8ucGlja2VyQ2xvc2FibGUgPw0KCQkJCQk0Km8ucGlja2VySW5zZXQgKyAzKm8ucGlja2VyRmFjZSArIGpzY29sb3IuaW1hZ2VzLnBhZFsxXSArIG8ucGlja2VyQnV0dG9uSGVpZ2h0IDoNCgkJCQkJMipvLnBpY2tlckluc2V0ICsgMipvLnBpY2tlckZhY2UgKyBqc2NvbG9yLmltYWdlcy5wYWRbMV0NCgkJCV07DQoJCQlyZXR1cm4gZGltczsNCgkJfQ0KDQoNCgkJZnVuY3Rpb24gcmVkcmF3UGFkKCkgew0KCQkJLy8gcmVkcmF3IHRoZSBwYWQgcG9pbnRlcg0KCQkJc3dpdGNoKG1vZGVJRCkgew0KCQkJCWNhc2UgMDogdmFyIHlDb21wb25lbnQgPSAxOyBicmVhazsNCgkJCQljYXNlIDE6IHZhciB5Q29tcG9uZW50ID0gMjsgYnJlYWs7DQoJCQl9DQoJCQl2YXIgeCA9IE1hdGgucm91bmQoKFRISVMuaHN2WzBdLzYpICogKGpzY29sb3IuaW1hZ2VzLnBhZFswXS0xKSk7DQoJCQl2YXIgeSA9IE1hdGgucm91bmQoKDEtVEhJUy5oc3ZbeUNvbXBvbmVudF0pICogKGpzY29sb3IuaW1hZ2VzLnBhZFsxXS0xKSk7DQoJCQlqc2NvbG9yLnBpY2tlci5wYWRNLnN0eWxlLmJhY2tncm91bmRQb3NpdGlvbiA9DQoJCQkJKFRISVMucGlja2VyRmFjZStUSElTLnBpY2tlckluc2V0K3ggLSBNYXRoLmZsb29yKGpzY29sb3IuaW1hZ2VzLmNyb3NzWzBdLzIpKSArICdweCAnICsNCgkJCQkoVEhJUy5waWNrZXJGYWNlK1RISVMucGlja2VySW5zZXQreSAtIE1hdGguZmxvb3IoanNjb2xvci5pbWFnZXMuY3Jvc3NbMV0vMikpICsgJ3B4JzsNCg0KCQkJLy8gcmVkcmF3IHRoZSBzbGlkZXIgaW1hZ2UNCgkJCXZhciBzZWcgPSBqc2NvbG9yLnBpY2tlci5zbGQuY2hpbGROb2RlczsNCg0KCQkJc3dpdGNoKG1vZGVJRCkgew0KCQkJCWNhc2UgMDoNCgkJCQkJdmFyIHJnYiA9IEhTVl9SR0IoVEhJUy5oc3ZbMF0sIFRISVMuaHN2WzFdLCAxKTsNCgkJCQkJZm9yKHZhciBpPTA7IGk8c2VnLmxlbmd0aDsgaSs9MSkgew0KCQkJCQkJc2VnW2ldLnN0eWxlLmJhY2tncm91bmRDb2xvciA9ICdyZ2IoJysNCgkJCQkJCQkocmdiWzBdKigxLWkvc2VnLmxlbmd0aCkqMTAwKSsnJSwnKw0KCQkJCQkJCShyZ2JbMV0qKDEtaS9zZWcubGVuZ3RoKSoxMDApKyclLCcrDQoJCQkJCQkJKHJnYlsyXSooMS1pL3NlZy5sZW5ndGgpKjEwMCkrJyUpJzsNCgkJCQkJfQ0KCQkJCQlicmVhazsNCgkJCQljYXNlIDE6DQoJCQkJCXZhciByZ2IsIHMsIGMgPSBbIFRISVMuaHN2WzJdLCAwLCAwIF07DQoJCQkJCXZhciBpID0gTWF0aC5mbG9vcihUSElTLmhzdlswXSk7DQoJCQkJCXZhciBmID0gaSUyID8gVEhJUy5oc3ZbMF0taSA6IDEtKFRISVMuaHN2WzBdLWkpOw0KCQkJCQlzd2l0Y2goaSkgew0KCQkJCQkJY2FzZSA2Og0KCQkJCQkJY2FzZSAwOiByZ2I9WzAsMSwyXTsgYnJlYWs7DQoJCQkJCQljYXNlIDE6IHJnYj1bMSwwLDJdOyBicmVhazsNCgkJCQkJCWNhc2UgMjogcmdiPVsyLDAsMV07IGJyZWFrOw0KCQkJCQkJY2FzZSAzOiByZ2I9WzIsMSwwXTsgYnJlYWs7DQoJCQkJCQljYXNlIDQ6IHJnYj1bMSwyLDBdOyBicmVhazsNCgkJCQkJCWNhc2UgNTogcmdiPVswLDIsMV07IGJyZWFrOw0KCQkJCQl9DQoJCQkJCWZvcih2YXIgaT0wOyBpPHNlZy5sZW5ndGg7IGkrPTEpIHsNCgkJCQkJCXMgPSAxIC0gMS8oc2VnLmxlbmd0aC0xKSppOw0KCQkJCQkJY1sxXSA9IGNbMF0gKiAoMSAtIHMqZik7DQoJCQkJCQljWzJdID0gY1swXSAqICgxIC0gcyk7DQoJCQkJCQlzZWdbaV0uc3R5bGUuYmFja2dyb3VuZENvbG9yID0gJ3JnYignKw0KCQkJCQkJCShjW3JnYlswXV0qMTAwKSsnJSwnKw0KCQkJCQkJCShjW3JnYlsxXV0qMTAwKSsnJSwnKw0KCQkJCQkJCShjW3JnYlsyXV0qMTAwKSsnJSknOw0KCQkJCQl9DQoJCQkJCWJyZWFrOw0KCQkJfQ0KCQl9DQoNCg0KCQlmdW5jdGlvbiByZWRyYXdTbGQoKSB7DQoJCQkvLyByZWRyYXcgdGhlIHNsaWRlciBwb2ludGVyDQoJCQlzd2l0Y2gobW9kZUlEKSB7DQoJCQkJY2FzZSAwOiB2YXIgeUNvbXBvbmVudCA9IDI7IGJyZWFrOw0KCQkJCWNhc2UgMTogdmFyIHlDb21wb25lbnQgPSAxOyBicmVhazsNCgkJCX0NCgkJCXZhciB5ID0gTWF0aC5yb3VuZCgoMS1USElTLmhzdlt5Q29tcG9uZW50XSkgKiAoanNjb2xvci5pbWFnZXMuc2xkWzFdLTEpKTsNCgkJCWpzY29sb3IucGlja2VyLnNsZE0uc3R5bGUuYmFja2dyb3VuZFBvc2l0aW9uID0NCgkJCQknMCAnICsgKFRISVMucGlja2VyRmFjZStUSElTLnBpY2tlckluc2V0K3kgLSBNYXRoLmZsb29yKGpzY29sb3IuaW1hZ2VzLmFycm93WzFdLzIpKSArICdweCc7DQoJCX0NCg0KDQoJCWZ1bmN0aW9uIGlzUGlja2VyT3duZXIoKSB7DQoJCQlyZXR1cm4ganNjb2xvci5waWNrZXIgJiYganNjb2xvci5waWNrZXIub3duZXIgPT09IFRISVM7DQoJCX0NCg0KDQoJCWZ1bmN0aW9uIGJsdXJUYXJnZXQoKSB7DQoJCQlpZih2YWx1ZUVsZW1lbnQgPT09IHRhcmdldCkgew0KCQkJCVRISVMuaW1wb3J0Q29sb3IoKTsNCgkJCX0NCgkJCWlmKFRISVMucGlja2VyT25mb2N1cykgew0KCQkJCVRISVMuaGlkZVBpY2tlcigpOw0KCQkJfQ0KCQl9DQoNCg0KCQlmdW5jdGlvbiBibHVyVmFsdWUoKSB7DQoJCQlpZih2YWx1ZUVsZW1lbnQgIT09IHRhcmdldCkgew0KCQkJCVRISVMuaW1wb3J0Q29sb3IoKTsNCgkJCX0NCgkJfQ0KDQoNCgkJZnVuY3Rpb24gc2V0UGFkKGUpIHsNCgkJCXZhciBtcG9zID0ganNjb2xvci5nZXRSZWxNb3VzZVBvcyhlKTsNCgkJCXZhciB4ID0gbXBvcy54IC0gVEhJUy5waWNrZXJGYWNlIC0gVEhJUy5waWNrZXJJbnNldDsNCgkJCXZhciB5ID0gbXBvcy55IC0gVEhJUy5waWNrZXJGYWNlIC0gVEhJUy5waWNrZXJJbnNldDsNCgkJCXN3aXRjaChtb2RlSUQpIHsNCgkJCQljYXNlIDA6IFRISVMuZnJvbUhTVih4Kig2Lyhqc2NvbG9yLmltYWdlcy5wYWRbMF0tMSkpLCAxIC0geS8oanNjb2xvci5pbWFnZXMucGFkWzFdLTEpLCBudWxsLCBsZWF2ZVNsZCk7IGJyZWFrOw0KCQkJCWNhc2UgMTogVEhJUy5mcm9tSFNWKHgqKDYvKGpzY29sb3IuaW1hZ2VzLnBhZFswXS0xKSksIG51bGwsIDEgLSB5Lyhqc2NvbG9yLmltYWdlcy5wYWRbMV0tMSksIGxlYXZlU2xkKTsgYnJlYWs7DQoJCQl9DQoJCX0NCg0KDQoJCWZ1bmN0aW9uIHNldFNsZChlKSB7DQoJCQl2YXIgbXBvcyA9IGpzY29sb3IuZ2V0UmVsTW91c2VQb3MoZSk7DQoJCQl2YXIgeSA9IG1wb3MueSAtIFRISVMucGlja2VyRmFjZSAtIFRISVMucGlja2VySW5zZXQ7DQoJCQlzd2l0Y2gobW9kZUlEKSB7DQoJCQkJY2FzZSAwOiBUSElTLmZyb21IU1YobnVsbCwgbnVsbCwgMSAtIHkvKGpzY29sb3IuaW1hZ2VzLnNsZFsxXS0xKSwgbGVhdmVQYWQpOyBicmVhazsNCgkJCQljYXNlIDE6IFRISVMuZnJvbUhTVihudWxsLCAxIC0geS8oanNjb2xvci5pbWFnZXMuc2xkWzFdLTEpLCBudWxsLCBsZWF2ZVBhZCk7IGJyZWFrOw0KCQkJfQ0KCQl9DQoNCg0KCQlmdW5jdGlvbiBkaXNwYXRjaEltbWVkaWF0ZUNoYW5nZSgpIHsNCgkJCWlmIChUSElTLm9uSW1tZWRpYXRlQ2hhbmdlKSB7DQoJCQkJdmFyIGNhbGxiYWNrOw0KCQkJCWlmICh0eXBlb2YgVEhJUy5vbkltbWVkaWF0ZUNoYW5nZSA9PT0gJ3N0cmluZycpIHsNCgkJCQkJY2FsbGJhY2sgPSBuZXcgRnVuY3Rpb24gKFRISVMub25JbW1lZGlhdGVDaGFuZ2UpOw0KCQkJCX0gZWxzZSB7DQoJCQkJCWNhbGxiYWNrID0gVEhJUy5vbkltbWVkaWF0ZUNoYW5nZTsNCgkJCQl9DQoJCQkJY2FsbGJhY2suY2FsbChUSElTKTsNCgkJCX0NCgkJfQ0KDQoNCgkJdmFyIFRISVMgPSB0aGlzOw0KCQl2YXIgbW9kZUlEID0gdGhpcy5waWNrZXJNb2RlLnRvTG93ZXJDYXNlKCk9PT0naHZzJyA/IDEgOiAwOw0KCQl2YXIgYWJvcnRCbHVyID0gZmFsc2U7DQoJCXZhcg0KCQkJdmFsdWVFbGVtZW50ID0ganNjb2xvci5mZXRjaEVsZW1lbnQodGhpcy52YWx1ZUVsZW1lbnQpLA0KCQkJc3R5bGVFbGVtZW50ID0ganNjb2xvci5mZXRjaEVsZW1lbnQodGhpcy5zdHlsZUVsZW1lbnQpOw0KCQl2YXINCgkJCWhvbGRQYWQgPSBmYWxzZSwNCgkJCWhvbGRTbGQgPSBmYWxzZSwNCgkJCXRvdWNoT2Zmc2V0ID0ge307DQoJCXZhcg0KCQkJbGVhdmVWYWx1ZSA9IDE8PDAsDQoJCQlsZWF2ZVN0eWxlID0gMTw8MSwNCgkJCWxlYXZlUGFkID0gMTw8MiwNCgkJCWxlYXZlU2xkID0gMTw8MzsNCg0KCQkvLyB0YXJnZXQNCgkJanNjb2xvci5hZGRFdmVudCh0YXJnZXQsICdmb2N1cycsIGZ1bmN0aW9uKCkgew0KCQkJaWYoVEhJUy5waWNrZXJPbmZvY3VzKSB7IFRISVMuc2hvd1BpY2tlcigpOyB9DQoJCX0pOw0KCQlqc2NvbG9yLmFkZEV2ZW50KHRhcmdldCwgJ2JsdXInLCBmdW5jdGlvbigpIHsNCgkJCWlmKCFhYm9ydEJsdXIpIHsNCgkJCQl3aW5kb3cuc2V0VGltZW91dChmdW5jdGlvbigpeyBhYm9ydEJsdXIgfHwgYmx1clRhcmdldCgpOyBhYm9ydEJsdXI9ZmFsc2U7IH0sIDApOw0KCQkJfSBlbHNlIHsNCgkJCQlhYm9ydEJsdXIgPSBmYWxzZTsNCgkJCX0NCgkJfSk7DQoNCgkJLy8gdmFsdWVFbGVtZW50DQoJCWlmKHZhbHVlRWxlbWVudCkgew0KCQkJdmFyIHVwZGF0ZUZpZWxkID0gZnVuY3Rpb24oKSB7DQoJCQkJVEhJUy5mcm9tU3RyaW5nKHZhbHVlRWxlbWVudC52YWx1ZSwgbGVhdmVWYWx1ZSk7DQoJCQkJZGlzcGF0Y2hJbW1lZGlhdGVDaGFuZ2UoKTsNCgkJCX07DQoJCQlqc2NvbG9yLmFkZEV2ZW50KHZhbHVlRWxlbWVudCwgJ2tleXVwJywgdXBkYXRlRmllbGQpOw0KCQkJanNjb2xvci5hZGRFdmVudCh2YWx1ZUVsZW1lbnQsICdpbnB1dCcsIHVwZGF0ZUZpZWxkKTsNCgkJCWpzY29sb3IuYWRkRXZlbnQodmFsdWVFbGVtZW50LCAnYmx1cicsIGJsdXJWYWx1ZSk7DQoJCQl2YWx1ZUVsZW1lbnQuc2V0QXR0cmlidXRlKCdhdXRvY29tcGxldGUnLCAnb2ZmJyk7DQoJCX0NCg0KCQkvLyBzdHlsZUVsZW1lbnQNCgkJaWYoc3R5bGVFbGVtZW50KSB7DQoJCQlzdHlsZUVsZW1lbnQuanNjU3R5bGUgPSB7DQoJCQkJYmFja2dyb3VuZEltYWdlIDogc3R5bGVFbGVtZW50LnN0eWxlLmJhY2tncm91bmRJbWFnZSwNCgkJCQliYWNrZ3JvdW5kQ29sb3IgOiBzdHlsZUVsZW1lbnQuc3R5bGUuYmFja2dyb3VuZENvbG9yLA0KCQkJCWNvbG9yIDogc3R5bGVFbGVtZW50LnN0eWxlLmNvbG9yDQoJCQl9Ow0KCQl9DQoNCgkJLy8gcmVxdWlyZSBpbWFnZXMNCgkJc3dpdGNoKG1vZGVJRCkgew0KCQkJY2FzZSAwOiBqc2NvbG9yLnJlcXVpcmVJbWFnZSgnaHMucG5nJyk7IGJyZWFrOw0KCQkJY2FzZSAxOiBqc2NvbG9yLnJlcXVpcmVJbWFnZSgnaHYucG5nJyk7IGJyZWFrOw0KCQl9DQoJCWpzY29sb3IucmVxdWlyZUltYWdlKCdjcm9zcy5naWYnKTsNCgkJanNjb2xvci5yZXF1aXJlSW1hZ2UoJ2Fycm93LmdpZicpOw0KDQoJCXRoaXMuaW1wb3J0Q29sb3IoKTsNCgl9DQoNCn07DQoNCi8vLS0tIE9UUlNDSURlcGxveW1lbnRTdGF0ZUNvbG9ycw0KLy9qc2NvbG9yLmluc3RhbGwoKTsNCi8vLS0t
Ly8gLS0KLy8gQ29weXJpZ2h0IChDKSAyMDAxLTIwMTggT1RSUyBBRywgaHR0cHM6Ly9vdHJzLmNvbS8KLy8gLS0KLy8gVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKLy8gdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoR1BMKS4gSWYgeW91Ci8vIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0zLjAudHh0LgovLyAtLQoKInVzZSBzdHJpY3QiOwoKdmFyIElUU00gPSBJVFNNIHx8IHt9OwpJVFNNLkdlbmVyYWxDYXRhbG9nID0gSVRTTS5HZW5lcmFsQ2F0YWxvZyB8fCB7fTsKCgovKioKICogQG5hbWVzcGFjZSBHZW5lcmFsQ2F0YWxvZwogKiBAYXV0aG9yIE9UUlMgQUcKICogQGRlc2NyaXB0aW9uCiAqICAgICAgVGhpcyBuYW1lc3BhY2UgY29udGFpbnMgdGhlIHNwZWNpYWwgbW9kdWxlIGZ1bmN0aW9uIGZvciB0aGUgR2VuZXJhbCBDYXRhbG9nIENvbG9yIFBpY2tlciBtb2R1bGUuCiAqLwogSVRTTS5HZW5lcmFsQ2F0YWxvZy5KU0NvbG9yUGlja2VyID0gKGZ1bmN0aW9uIChUYXJnZXROUykgewoKICAgIC8qKgogICAgICogQG5hbWUgSW5pdAogICAgICogQG1lbWJlcm9mIEdlbmVyYWxDYXRhbG9nLkNvbG9yUGlja2VyCiAgICAgKiBAZnVuY3Rpb24KICAgICAqIEBkZXNjcmlwdGlvbgogICAgICogICAgICBUaGlzIGZ1bmN0aW9uIGluaXRpYWxpemVzIGFjdGlvbnMgZm9yIEdlbmVyYWwgQ2F0YWxvZy4KICAgICAqLwogICAgVGFyZ2V0TlMuSW5pdCA9IGZ1bmN0aW9uKCkgewoKICAgICAgICAvKmdsb2JhbCBqc2NvbG9yOiB0cnVlICovCiAgICAgICAganNjb2xvci5kaXIgPSBDb3JlLkNvbmZpZy5HZXQoJ0dlbmVyYWxDYXRhbG9nOjpGcm9udGVuZDo6SlNDb2xvclBpY2tlclBhdGgnKTsKICAgICAgICBqc2NvbG9yLmJpbmRDbGFzcyA9ICdKU0NvbG9yUGlja2VyJzsKICAgICAgICBqc2NvbG9yLmluc3RhbGwoKTsKICAgIH07CgogICAgQ29yZS5Jbml0LlJlZ2lzdGVyTmFtZXNwYWNlKFRhcmdldE5TLCAnSlNfTE9BREVEJyk7CgogICAgcmV0dXJuIFRhcmdldE5TOwp9KElUU00uR2VuZXJhbENhdGFsb2cuSlNDb2xvclBpY2tlciB8fCB7fSkpOwo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE4IE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0zLjAudHh0LgojIC0tCgpwYWNrYWdlIHZhcjo6cGFja2FnZXNldHVwOjpHZW5lcmFsQ2F0YWxvZzsgICAgIyMgbm8gY3JpdGljCgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7Cgp1c2UgS2VybmVsOjpTeXN0ZW06OlZhcmlhYmxlQ2hlY2sgcXcoOmFsbCk7CgpvdXIgQE9iamVjdERlcGVuZGVuY2llcyA9ICgKICAgICdLZXJuZWw6OkNvbmZpZycsCiAgICAnS2VybmVsOjpTeXN0ZW06OkRCJywKICAgICdLZXJuZWw6OlN5c3RlbTo6U3lzQ29uZmlnJywKKTsKCj1oZWFkMSBOQU1FCgp2YXI6OnBhY2thZ2VzZXR1cDo6R2VuZXJhbENhdGFsb2cgLSBjb2RlIHRvIGV4ZWN1dGUgZHVyaW5nIHBhY2thZ2UgaW5zdGFsbGF0aW9uCgo9aGVhZDEgUFVCTElDIElOVEVSRkFDRQoKPWN1dAoKPWhlYWQyIG5ldygpCgpjcmVhdGUgYW4gb2JqZWN0CgogICAgdXNlIEtlcm5lbDo6U3lzdGVtOjpPYmplY3RNYW5hZ2VyOwogICAgbG9jYWwgJEtlcm5lbDo6T00gPSBLZXJuZWw6OlN5c3RlbTo6T2JqZWN0TWFuYWdlci0+bmV3KCk7CiAgICBteSAkQ29kZU9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ3Zhcjo6cGFja2FnZXNldHVwOjpHZW5lcmFsQ2F0YWxvZycpOwoKPWN1dAoKc3ViIG5ldyB7CiAgICBteSAoICRUeXBlLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgYWxsb2NhdGUgbmV3IGhhc2ggZm9yIG9iamVjdAogICAgbXkgJFNlbGYgPSB7fTsKICAgIGJsZXNzKCAkU2VsZiwgJFR5cGUgKTsKCiAgICAjIEZvcmNlIGEgcmVsb2FkIG9mIFpaWkF1dG8ucG0gYW5kIFpaWkFBdXRvLnBtIHRvIGdldCB0aGUgZnJlc2ggY29uZmlndXJhdGlvbiB2YWx1ZXMuCiAgICBmb3IgbXkgJE1vZHVsZSAoIHNvcnQga2V5cyAlSU5DICkgewogICAgICAgIGlmICggJE1vZHVsZSA9fiBtL1paWkFBP3V0b1wucG0kLyApIHsKICAgICAgICAgICAgZGVsZXRlICRJTkN7JE1vZHVsZX07CiAgICAgICAgfQogICAgfQoKICAgICMgQ3JlYXRlIGNvbW1vbiBvYmplY3RzIHdpdGggZnJlc2ggZGVmYXVsdCBjb25maWcuCiAgICAkS2VybmVsOjpPTS0+T2JqZWN0c0Rpc2NhcmQoKTsKCiAgICByZXR1cm4gJFNlbGY7Cn0KCj1oZWFkMiBDb2RlSW5zdGFsbCgpCgpydW4gdGhlIGNvZGUgaW5zdGFsbCBwYXJ0CgogICAgbXkgJFJlc3VsdCA9ICRDb2RlT2JqZWN0LT5Db2RlSW5zdGFsbCgpOwoKPWN1dAoKc3ViIENvZGVJbnN0YWxsIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgcmV0dXJuIDE7Cn0KCj1oZWFkMiBDb2RlUmVpbnN0YWxsKCkKCnJ1biB0aGUgY29kZSByZWluc3RhbGwgcGFydAoKICAgIG15ICRSZXN1bHQgPSAkQ29kZU9iamVjdC0+Q29kZVJlaW5zdGFsbCgpOwoKPWN1dAoKc3ViIENvZGVSZWluc3RhbGwgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICByZXR1cm4gMTsKfQoKPWhlYWQyIENvZGVVcGdyYWRlKCkKCnJ1biB0aGUgY29kZSB1cGdyYWRlIHBhcnQKCiAgICBteSAkUmVzdWx0ID0gJENvZGVPYmplY3QtPkNvZGVVcGdyYWRlKCk7Cgo9Y3V0CgpzdWIgQ29kZVVwZ3JhZGUgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIG1pZ3JhdGUgJ2Z1bmN0aW9uYWxpdHknIHRvIGV4dGVybmFsIHRhYmxlCiAgICAjIHRoaXMgaXMgb25seSBuZWNjZXNhcnkgaW4gQ29kZVVwZ3JhZGUsIGZvciBuZXcgaW5zdGFsbGF0aW9ucyB0aGlzIGlzIGRvbmUKICAgICMgaW4gdGhlIHBhY2thZ2UgSVRTTUNvcmUgZHVyaW5nIENvZGVJbnN0YWxsCiAgICAkU2VsZi0+X01pZ3JhdGVGdW5jdGlvbmFsaXR5KCk7CgogICAgcmV0dXJuIDE7Cn0KCj1oZWFkMiBDb2RlVXBncmFkZUZyb21Mb3dlclRoYW5fNF8wXzkxKCkKClRoaXMgZnVuY3Rpb24gaXMgb25seSBleGVjdXRlZCBpZiB0aGUgaW5zdGFsbGVkIG1vZHVsZSB2ZXJzaW9uIGlzIHNtYWxsZXIgdGhhbiA0LjAuOTEuCgpteSAkUmVzdWx0ID0gJENvZGVPYmplY3QtPkNvZGVVcGdyYWRlRnJvbUxvd2VyVGhhbl80XzBfOTEoKTsKCj1jdXQKCnN1YiBDb2RlVXBncmFkZUZyb21Mb3dlclRoYW5fNF8wXzkxIHsgICAgIyMgbm8gY3JpdGljCiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hhbmdlIGNvbmZpZ3VyYXRpb25zIHRvIG1hdGNoIHRoZSBuZXcgbW9kdWxlIGxvY2F0aW9uLgogICAgJFNlbGYtPl9NaWdyYXRlQ29uZmlncygpOwoKICAgIHJldHVybiAxOwp9Cgo9aGVhZDIgQ29kZVVuaW5zdGFsbCgpCgpydW4gdGhlIGNvZGUgdW5pbnN0YWxsIHBhcnQKCiAgICBteSAkUmVzdWx0ID0gJENvZGVPYmplY3QtPkNvZGVVbmluc3RhbGwoKTsKCj1jdXQKCnN1YiBDb2RlVW5pbnN0YWxsIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgcmV0dXJuIDE7Cn0KCj1oZWFkMiBfTWlncmF0ZUZ1bmN0aW9uYWxpdHkoKQoKPWN1dAoKc3ViIF9NaWdyYXRlRnVuY3Rpb25hbGl0eSB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgU0VMRUNUIGFsbCBmdW5jdGlvbmFsaXR5IHZhbHVlcwogICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkRCJyktPlByZXBhcmUoCiAgICAgICAgU1FMID0+ICdTRUxFQ1QgaWQsIGZ1bmN0aW9uYWxpdHkgRlJPTSBnZW5lcmFsX2NhdGFsb2cnLAogICAgKTsKCiAgICBteSBATGlzdDsKICAgIFJPVzoKICAgIHdoaWxlICggbXkgQFJvdyA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEQicpLT5GZXRjaHJvd0FycmF5KCkgKSB7CiAgICAgICAgbmV4dCBST1cgaWYgISRSb3dbMV07CgogICAgICAgIHB1c2ggQExpc3QsIFxAUm93OwogICAgfQoKICAgICMgc2F2ZSBlbnRyaWVzIGluIG5ldyB0YWJsZQogICAgZm9yIG15ICRFbnRyeSAoQExpc3QpIHsKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6REInKS0+RG8oCiAgICAgICAgICAgIFNRTCA9PgogICAgICAgICAgICAgICAgJ0lOU0VSVCBJTlRPIGdlbmVyYWxfY2F0YWxvZ19wcmVmZXJlbmNlcyggZ2VuZXJhbF9jYXRhbG9nX2lkLCBwcmVmX2tleSwgcHJlZl92YWx1ZSApJwogICAgICAgICAgICAgICAgLiAnIFZBTFVFUyggPywgXCdGdW5jdGlvbmFsaXR5XCcsID8gKScsCiAgICAgICAgICAgIEJpbmQgPT4gWyBcJEVudHJ5LT5bMF0sIFwkRW50cnktPlsxXSBdLAogICAgICAgICk7CiAgICB9CgogICAgIyBkcm9wIGNvbHVtbiBmdW5jdGlvbmFsaXR5CiAgICBteSAoJERyb3ApID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkRCJyktPlNRTFByb2Nlc3NvcigKICAgICAgICBEYXRhYmFzZSA9PiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIFRhZyAgICAgPT4gJ1RhYmxlQWx0ZXInLAogICAgICAgICAgICAgICAgTmFtZSAgICA9PiAnZ2VuZXJhbF9jYXRhbG9nJywKICAgICAgICAgICAgICAgIFRhZ1R5cGUgPT4gJ1N0YXJ0JywKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgVGFnICAgICA9PiAnQ29sdW1uRHJvcCcsCiAgICAgICAgICAgICAgICBOYW1lICAgID0+ICdmdW5jdGlvbmFsaXR5JywKICAgICAgICAgICAgICAgIFRhZ1R5cGUgPT4gJ1N0YXJ0JywKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgVGFnICAgICA9PiAnVGFibGVBbHRlcicsCiAgICAgICAgICAgICAgICBUYWdUeXBlID0+ICdFbmQnLAogICAgICAgICAgICB9LAogICAgICAgIF0sCiAgICApOwoKICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEQicpLT5EbygKICAgICAgICBTUUwgPT4gJERyb3AsCiAgICApOwoKICAgIHJldHVybiAxOwp9Cgo9aGVhZDIgX01pZ3JhdGVDb25maWdzKCkKCmNoYW5nZSBjb25maWd1cmF0aW9ucyB0byBtYXRjaCB0aGUgbmV3IG1vZHVsZSBsb2NhdGlvbi4KCiAgICBteSAkUmVzdWx0ID0gJENvZGVPYmplY3QtPl9NaWdyYXRlQ29uZmlncygpOwoKPWN1dAoKc3ViIF9NaWdyYXRlQ29uZmlncyB7CgogICAgbXkgJFN5c0NvbmZpZ09iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpTeXNDb25maWcnKTsKICAgIG15ICRDb25maWdPYmplY3QgICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OkNvbmZpZycpOwoKICAgIG15ICRTZXR0aW5nID0gJENvbmZpZ09iamVjdC0+R2V0KCdHZW5lcmFsQ2F0YWxvZ1ByZWZlcmVuY2VzJyk7CgogICAgbXkgQE5ld1NldHRpbmdzOwoKICAgIENPTkZJR0lURU06CiAgICBmb3IgbXkgJE1lbnVNb2R1bGUgKCBzb3J0IGtleXMgJXskU2V0dGluZ30gKSB7CgogICAgICAgICMgdXBkYXRlIG1vZHVsZSBsb2NhdGlvbgogICAgICAgIG15ICRNb2R1bGUgPSAkU2V0dGluZy0+eyRNZW51TW9kdWxlfS0+eydNb2R1bGUnfTsKICAgICAgICBpZiAoICRNb2R1bGUgIX4gbXtLZXJuZWw6Ok91dHB1dDo6SFRNTDo6R2VuZXJhbENhdGFsb2dQcmVmZXJlbmNlcyhcdyspfSApIHsKICAgICAgICAgICAgbmV4dCBDT05GSUdJVEVNOwogICAgICAgIH0KCiAgICAgICAgIyBEZWZpbmUgdGhlIG5ldyBzZXR0aW5nIHZhbHVlLgogICAgICAgICRTZXR0aW5nLT57JE1lbnVNb2R1bGV9LT57TW9kdWxlfSA9ICJLZXJuZWw6Ok91dHB1dDo6SFRNTDo6R2VuZXJhbENhdGFsb2dQcmVmZXJlbmNlczo6R2VuZXJpYyI7CgogICAgICAgICMgQnVpbGQgbmV3IHNldHRpbmcuCiAgICAgICAgcHVzaCBATmV3U2V0dGluZ3MsIHsKICAgICAgICAgICAgTmFtZSAgICAgICAgICAgPT4gJ0dlbmVyYWxDYXRhbG9nUHJlZmVyZW5jZXMjIyMnIC4gJE1lbnVNb2R1bGUsCiAgICAgICAgICAgIEVmZmVjdGl2ZVZhbHVlID0+ICRTZXR0aW5nLT57JE1lbnVNb2R1bGV9LAogICAgICAgIH07CiAgICB9CgogICAgcmV0dXJuIDEgaWYgIUBOZXdTZXR0aW5nczsKCiAgICAjIFdyaXRlIG5ldyBzZXR0aW5nLgogICAgJFN5c0NvbmZpZ09iamVjdC0+U2V0dGluZ3NTZXQoCiAgICAgICAgVXNlcklEICAgPT4gMSwKICAgICAgICBDb21tZW50cyA9PiAnR2VuZXJhbENhdGFsb2cgLSBwYWNrYWdlIHNldHVwIGZ1bmN0aW9uOiBfTWlncmF0ZUNvbmZpZ3MnLAogICAgICAgIFNldHRpbmdzID0+IFxATmV3U2V0dGluZ3MsCiAgICApOwoKICAgIHJldHVybiAxOwp9CgoxOwoKPWhlYWQxIFRFUk1TIEFORCBDT05ESVRJT05TCgpUaGlzIFNvZnR3YXJlIGlzIHBhcnQgb2YgdGhlIE9UUlMgcHJvamVjdCAoaHR0cDovL290cnMub3JnLykuCgpUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQp0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChHUEwpLiBJZiB5b3UKZGlkIG5vdCByZWNlaXZlIHRoaXMgZmlsZSwgc2VlIEw8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9ncGwtMy4wLnR4dD4uCgo9Y3V0Cg==