Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA384:256) (Exim 4.89) (envelope-from ) id 1euGVJ-0004EE-Oi for pgadmin-hackers@arkaria.postgresql.org; Fri, 09 Mar 2018 11:48:06 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.89) (envelope-from ) id 1euGVH-0003us-F8 for pgadmin-hackers@arkaria.postgresql.org; Fri, 09 Mar 2018 11:48:03 +0000 Received: from makus.postgresql.org ([2001:4800:1501:1::229]) by malur.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA384:256) (Exim 4.89) (envelope-from ) id 1euGVG-0003ui-Hw for pgadmin-hackers@lists.postgresql.org; Fri, 09 Mar 2018 11:48:03 +0000 Received: from mail-ot0-x232.google.com ([2607:f8b0:4003:c0f::232]) by makus.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.89) (envelope-from ) id 1euGVD-0001dt-5E for pgadmin-hackers@postgresql.org; Fri, 09 Mar 2018 11:48:00 +0000 Received: by mail-ot0-x232.google.com with SMTP id l12so8422342otj.7 for ; Fri, 09 Mar 2018 03:47:58 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=enterprisedb-com.20150623.gappssmtp.com; s=20150623; h=mime-version:from:date:message-id:subject:to; bh=g912NXAAtK+f7L2enUlrrIhT/KtDajc8S1DvNiBM+Kw=; b=lrw2uUZjdbAhBSeWcvr36vUnBaqPuBGZkBHHf0QE4la/ZToV3Bi8GURhr+MJoYnm3j n29XpLZARHeOcG5H4GSJTXGvRnYDnoXWnvhR7KeFCe8MHdVq0WDOdwjX9DkTbdYic09r I9IZcJHbj1Ypz/J0Af9x2VVCOCja8jKbXU98V5NndSVYbc/fvJAIPgL6kIm9x90Nf9CG NIRZ2b/j6ATPdRHvJH89hD1ccY5c0JAN66QQWYHm+7UfgkUjBtInBMFXvLrGvQH4t5r1 G+n8FmqIR/Hu+VcG+uG5jD6NDrqfNJSoRgxi6+OD3UVgbwxvaTqVqCXjrqKLwJBW+WIU KNpQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:from:date:message-id:subject:to; bh=g912NXAAtK+f7L2enUlrrIhT/KtDajc8S1DvNiBM+Kw=; b=FDBwS4wsx/0u15uvBYcoGkWTKbC9tUmIRSs4PpcjU4Pfx89N3N3pRpLT7dQ7q4nStg gaBGSWETBcf6Z/kxIDtGRkdPgO2fmkATOn5xhyiQbIB9dS4V1vzYtrrrCzvICzjW2EXk AS5uRPkHIyG0lryyTXG6VSfXGrli4cWnA4A6o47Q9a/Ubqm3b7lUKyUtRgK0SLEuJaNN gGC7fC5mtf6wokVYUlnFtpw1pAn5KUfAlM/hs4o4Nlp1hvEVPvygzFtcMaKPNB3FvT1/ KxBnJvOcAkoNPNHdzJMpNA430sxv48V6cQMSINKItOk+pzFRK+mMKNgU+7axBDS+JGUs kH+A== X-Gm-Message-State: AElRT7GozRaip2SsOd3YA1jHtlhGi8oUhpqfJ7sI9ar0+ZAGrGOrTeZn 8OiRNXTv1NVnb0u0Joa+xdJhOLpCpy7EDfv82gS0g0AD X-Google-Smtp-Source: AG47ELsVw/Mb8aOKKaAxsXbaZ+3NV45gNdQsU2TcAKJmZYWEodtF4kK+gBEIHrcJrSl3LcnwlPzSN3GeaXjzMzbzGsg= X-Received: by 10.157.22.233 with SMTP id s38mr2424346ots.97.1520596077342; Fri, 09 Mar 2018 03:47:57 -0800 (PST) MIME-Version: 1.0 Received: by 10.74.8.150 with HTTP; Fri, 9 Mar 2018 03:47:36 -0800 (PST) From: Murtuza Zabuawala Date: Fri, 9 Mar 2018 17:17:36 +0530 Message-ID: Subject: [pgAdmin4][RM#3140] Add service parameter To: pgadmin-hackers Content-Type: multipart/mixed; boundary="001a114790ea0b83e60566f95d92" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Precedence: bulk --001a114790ea0b83e60566f95d92 Content-Type: multipart/alternative; boundary="001a114790ea0b83e30566f95d90" --001a114790ea0b83e30566f95d90 Content-Type: text/plain; charset="UTF-8" Hi, PFA patch to add service parameter in server dialog. - Docs updated - Test case added for Service ID parameter Please note, I have extracted Connection class and Server manager class from our own custom Psycopg2 driver module. Patch also covers RM#3120 Please review. -- Regards, Murtuza Zabuawala EnterpriseDB: http://www.enterprisedb.com The Enterprise PostgreSQL Company --001a114790ea0b83e30566f95d90 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
Hi,

PFA patch to add=C2=A0service parameter in server dialog.
- Docs updated
- Test case added for Service I= D parameter

Please note,
=
I have extracted Connection class and Server manager class f= rom our own custom Psycopg2 driver module.

Patch also covers RM#3120

Please review.

=
--
Regards,
Murtuza Zabuawala
EnterpriseDB:=C2=A0h= ttp://www.enterprisedb.com
The Enterprise PostgreSQL Company

--001a114790ea0b83e30566f95d90-- --001a114790ea0b83e60566f95d92 Content-Type: application/octet-stream; name="RM_3140.diff" Content-Disposition: attachment; filename="RM_3140.diff" Content-Transfer-Encoding: base64 X-Attachment-Id: f_jejve69y0 ZGlmZiAtLWdpdCBhL2RvY3MvZW5fVVMvaW1hZ2VzL3NlcnZlcl9hZHZhbmNlZC5wbmcgYi9kb2Nz L2VuX1VTL2ltYWdlcy9zZXJ2ZXJfYWR2YW5jZWQucG5nCmluZGV4IDEwZjE4MDlhMzY0NTc5YTM5 YjJmZTE5MTEzOTE1NjgyNjBiMzc5YjguLjIyOTFkOTVmNDM3OGEyMTU1NGE4YTY2OGE2ZjUyZWEw YTQ4NWY0ODUgMTAwNjQ0CkdJVCBiaW5hcnkgcGF0Y2gKbGl0ZXJhbCA1NTY1Mgp6Y21aXkoxOH02 PDdIKzN3K1l7VEcqdFR1a3d2Q0E8UDl+Ynp3bUk9Nm5iQH1ObXZpcDlzQ3decFJhZnUrX3hrcTIK el9QNzI+MXZ6bmU3I3RWPzAwMXYzQSkqOFQwNiZYQjdBVDAlQUdlZ2VDamJCciElfHBTS35oK2xQ e0dPRyUra2diCnowRmExR1BLOHdZSzd1aVBLdG1ObW5qYD5MNVY4KC1xLXUzWU5RaD8+TEs+b0Ex TzxsOVUwMVRIckdWVFVSVFpeMwp6NUIjTjdPQXtUPypgPVlOc2ZoezhybXt7N2FAJVNAI2NlO0Mm ZHxOdWBZYEZncFpQUWkyZTZ8NVFwPHM8M1B+dWgKekxLejdRWiZGeExSNFdrJjBSOXB7TSt6aGcq Q3NAV2AxVEY+cHxRUmV1d0o5bmAyRkQ3eSElN3p0SCYjbDl3MCV4CnozI1NMZGooQU4zYU53PWRQ PVcmRmZpQkF5VkBCPTBWJGBMOCFHSHh3cXxeKEhKVWRNKSlDS29aNVhIaUNMSUllUQp6YHhCcjV4 bm5vPVE3eW88YVFkKVEhZmp+TGN5ezZZSnVecC1jKz5kZC05NmRoM2I5YXw8U1NrTFVqTjszdGRX cnwKekNAfkZBM3tmSVRYeE0/KXRuYGxxbSlERUxSMnNiVmVsUnR3NmpFOV9Kfkl3YFpzI0o9UUVW Jm0qZUs/RlY/dH04CnpGMllAXipGN0ghWGBCPn0tSGtDaWdNTG0+OEd1NjE0dyRHPW1+JGpeQSFq NnJAYWFHVHJCTk9+NGpuQz1Ka35iYwp6TkpDNUJzfDlqNUElfGFEe298SVJGZWhmVCk2Wn5FPDAz fVZGVSZmWWhrNHItQXRyQCN3PXhOZ1I1OzlkUFUzPWMKektEK1RCIVB+VE13PjVEaEkxfiN1NUtw IzZxQDszMyFBSEMzYUI7QnAyVG9gPkVgJT9iV0BJNSQjPGdnRWY+TThLCnoqem94JkhBK0V0dTAk aCtHbmlXMWZJREdFVip7PFYhdGFZPmVzJmdGUFQ5M0A7RyRSa3dZczRXZm04PHwtYm9YWQp6NXZz Py0+eWZhPXM3Y0VYVXFuRklwbiRaNXB7JEBYcGkyVWE+bm5kP0tkN3tZMEZWKl5mWGwkT2N2Qjh5 JjF2R0cKekRHdnA+X21CWmRhMXpKQkNeYklIcG5DPXF3WV55YzZLYnQhRy1TP0FzJEN1KCNEfkdv RTZUXilASHl5KjleVVhCCno0WGdmNmw7QjlnMFkpUkpYKWg1LSUoQlQpUmJZc0p2dWB2aDUxOSlK SzVgWVJOeXJLek80SWRMKzgmSDMzNWhnTgp6OSEpZHNUXj5DfSFjU29teER5Q0I2YmtvXjkjcmZC P3F3NTBwXiprWjt6aSgxZnFRYmBFJiVUd0QyQHtGKHAlZHEKemJuKmFHTko4Qjt1XjBDP2FfN3JH TTh2JW9jRnQ4bVklSWQ+SiNhRWlkd1FgUzBxSVpUZT47Ri0zfFZgI05PZWw9CnpoR3E/PEpxNFNP WCozKyg8KjdyLXJjfj41dXk9Jjk8eiRSPVNSQnNsJV5UamorMy00bXFsJXxvWFEka3FxRC09Zgp6 eThuNzU2UjhsZGBVQHNOLS1NNHdYUH1Ydy1edDEwNzlqQk10TTEzUSZXT0hZOHsmRENOJXVodCRs bSkrYERuSjIKejI2V2heMD5ycCkqYzRUNy1EYHBMKUZNPT1DPjFucFR8PEg+MW1MVjx4QWg+VTBj a2tNREs7VEcwe05qSmtPPzczCnoxNV9CbkMlckkhMSh5e0VGQnlQUGZ9JElNWWsqcXlra19EfWZf ZTlWezA1NStRcmBVMTA+ezxrPlZSNEcmRiZJLQp6OHxaRVQ1SlctfDYyXis0SHdzQjNYXktHSTR0 eWw7bHxWeFlGQ2FkTzAzWmA3blh1SSVsP3FUTjtGIVFGI2wxIy0KejV0SmpzT3B4MVV5R0ErXilG YTdKZkdmPGBEZ20oeWoxfWVtNGZ1KjhEP3NyUl8/M1c4T25UYlhmPmtVMFRudSt3CnpgT3gmMWkm fEplX1lKRUBnXkFvT1gyfXBBM3BjdVZyYmIzNFhrdWAqbWJ3Q0FDQXpXNC01MzQ0VmR0V0ZSc0BS IQp6aDheVUJJYVlScl5PY1ZlZUhVN0Z1bHg0NU45PFNYY2NoRXtaV0llSi15cGkpWGUyb2FBfUZY P1h3d2t0S0RSIUAKektGeVkmWk98N0hCRTtWPEJ3ZlAyUyg0TGF2cVd7SVJzfmtZY19kRnNgTjsz VE9PV2EmKHY1X3AzMig+NE5TWVM3Cno3T1dNWjdTSm9QQUF4RW4rbGFVa2hzViRVQjZmbXFqcH5U QCR5eWNsNlQ/P2ZSQSpBWlFpQGRFRGppcVJ0ZzRlTwp6NnkxeEdZOTBsTTF7K0NVPCZpNFhRTmRF cUMzUG0lQ3dWOGFtejktfm10fmlzcylVeF5zRnRmZmw8TyhAbU9Ma3YKek5qQiF5bTN9VyNJJVlt YklGPnhOSjt1ZlBXK3IlM1RzUkc1SWM5TyFGeHZweGZhbjZUbVc/bFdGbnVzPmVlfl4/Cnp7I2x3 OG96PU0hJmA0ITlYcipjZUlhZ0ozUzV7dTRUfmFeQ2RGKHVBSnJgSDlwPm5aY1Y4TE5FVjZrZ1NK R1dUcQp6c0pQUWdFOyVkMnFWY18wdiNlRzFyZVdWMFZ1O2JTMjN1IUhYb3poe1E+Kzw3YVpISXVo ZW8/eCRVMDd+VGBpfW4KenM0M2JsQGdEOT4+JiRxV25TN3xoQWRKTzFlSm1YXmpYZjwjM19BdH1Z bWxKUDxqPWFJPyQ3bTtuRTkpUHQmXm1hCnopN2pSbDhfQ297Kz18U2Y/TWxzKDRfKXxHPTBEajU/ YzNKSElfdGVVZT5SR0YkTCtfYDZaamgzO2B5cDxpMUV3JAp6ckBYN1p2QXl8JDNJezhJKjdrQSom cTgjRCRxNClSK3d7K2M0YTBsS1YyTzIhM0hfV0NxbGtHb3UmZjdhdntxUW4KelcyQCFWYn4mY2l7 XyUpKllgK1NLRVJAV2JqMnorbnshKWFkajVzU1pKNkJYJDxaQzhvd2xpVXQkKHB2dHF8V3JmCnpJ S2B9UT9ZSThnOENvYj5IJUpeITkofEMpbTltdkdtOyNealArXzZ3cn1tYGdzPHUhT0lnZFpqSWdl WXhaS0hzegp6bz1LYWpsfVhjN1FraHgjK2IhN2swSUxzY2lZY0dUKSExJVhAZUZ0eGImN0x9enN6 Iz5eSGxtWV5IZXtVNipyVTMKelpFeHwkeFNPa21ZblJLJHgjZ3RmMnkwN1lkdldgNWQxTlReTUNI VX5CN09oTUhxVFYrKG89R0RDRzNYaiZvTWduCnp1b0k2MyhXPVRTe25nYnFRYWtUOHVob2d3Knxt bENqb2FWWDVxQkVMaj1rU0V1QDU8P1pifVpzOFE4MFpzekxTcQp6SnkkI3JKVDkqTl8kSG1jX14m b08jYCgobGFQVnBTbX5fIUB4Tko7eEc0bVZxJExqeXNBbntsQiY7REB4RmJBMGoKelNwc1BYKXF+ JnlsTDhfX2NBMHpFOUBOTX43eipZST9nXmd0WDdvbih2aTJlaCRxMGNGITR2dUJScHIkUyQlaTVM Cno1JTtUd3QtLU5GOWZVMX1LWnYlN2s0SksjTmA4eHB0QkNZTEdlc3FmdzhEO3lqbD00O2RoTjho dX4ya1RoS3FvWAp6KD9vYVhwSiEme3ppKTtmZlVaVGdxVHU9RjlGdkxYJlg8a00mKzRjQys4KXZx dklwJnNUOFVCXlN0KTVIYDkxT1kKemAjSj9Bbkw3RUgob29VM1dOVEpnRHolS1E5NyFRcnB7QEsk NGk9QiYjSzVeXiklUXtJd0tOK30mIU9GRDw9ZGlOCnpJWmlmSlRXYSY7VUtiJVJye304TXNWcG94 eWtkUzU5JUVsSWc0N0EhRzJoO3NnVWJFOE9XKClqU016a2ZeeUtzQAp6YUswZWJwbHNVaWluMG5s QjVlJjRwSmNxMFBPMkFRSWhvMVd0bHJoI1JiUzhEakB1M3JWcCt4NSF8fHtFbU1sZkMKelFNUUFv TXcoc2Y/LXtScmtfOUgtQVdEcF94dmRKWV9eIShaWUJNPG5ofHhhTFI/JlBpQCk+PihWTUIxIUYt X0BnCnpFVUR1QFlHMElJJDdwPnArfF5FT2M5dmt4X19JKE0mQnRfMT8xb243SiZTSW40cVRAWWV7 PyY4bTxtbj9aQWdFUwp6cUx5QiNtKGcyUHZRcHNjelAqeXE8N1o4cDl3UmtuJE1qQGFab3R4filt aU50QEVtQykoO3hIUE9RcnJvVH1JOHYKenV0KG97VGZafGskQiMlcXJaZUJRWVdwO1ZLN2dLJiZh VT1jeHZFKkpzSHlZaEc1NHRZdHo1SHdPdWJ1fCNkVHRrCnpJPC12Sm4jI0orK0hfOEZac0tIb3pF YjAlbUFyaTQlaHVxbT4rYm1ed1pnd1V1c1A1QT1mX1pJQ0xFaXAmMnhpaAp6JWhQPHlaQE89Ozdf Tz8/az1vSHNkfX1FVVhSaSRTLUdBJkNSYGhEJCN0XjB2bUxeKyVtPjtqNW9WWHVkWHNyaloKek4j Sl85JHVGPGZRZHIyfT0oVHJoLSFuYV5vPGhEOXpJOzVnekFmTkY1K2dSPy0qVTcoIzZSV1RnPTJA MDtVKX5GCnpmQWZ7cWwmI3pVdnAtM0tFVXU7OXBeZmxpX09UTkNiNGM3ZSZYUGRlRlV6VXBfSGk/ RTh9Kkgxa2l1SVlUOGBLNQp6JEZrUmglamw3e0llQ15QS2QkRn1VdShRYEBmMmhoemhten4tKm1K ZFd9TUQtJU85N2VHYmlJcj55QG55VTRRPTcKel5aOWo7IThhLUFhQzMzI2dPPHIxVHxlRjhEaE9S KGNlPloqeV80dyRaaE8tODdGWHZQKihKTDUlN2JRU2B8ZFZuCno3eFReWVNNTHoteUAkQ0FiPjgz cDNKKGs/eyU3QT9NYEMmNXljWHslLT4yN3hTQkR3MChSaUwjYilTPiY4OztZYgp6PnpAemdyc0Qy SFplM29QdUh3IXl3PXFGR1A1ckgyVGkqLWsjKVNRIUtJWjBBWEJPVjF1QnxUYlg0dT44LTh4KTcK elNDJERASn5ubU4rWEVsPTJ3ZUQyVWt8VVlVVzwzLXJ5ej5fJCRoS2Rqb3UzUHRhbGZAZ0ZTPFRq YmNON2E9O2tXCno8Zm8/dElAVW58Ym0tWjVvNG0wPz5nKE5UO0VMPG09d1I9VyQ/amk4OVlHRGtg Mm1xUEFRM180TiNBTlJncDJ6MAp6cFJUeGozMzRZVk5uQV9OT3RgcUlvRTVqfCFZJk9SRjI4e1Ez TlFkJjUpaEQoWTtYdkVPQXYkVzVTdTFsKlh0QXYKekF8Njg8SFZubkY9ajwjIWg8aDZsRUg+RShv fE18MzdYQGVzMn5CNEowRTZ0V0ZObVpQPkUtN2cwPlY7NyEkbV9ACnpoUmZMQW1mcTBCLXBHe1Ih YDkoYjhVV3omO1FCMXVuenxTZ2RmM3w3SWRnZ042OHxtMV47IVB3RiN8RS0teSR5Nwp6eXU9IV4z V1VQO1BOc3ljXmszOzJpVFBqJTI/PT9lT3c3MkhNOHk3cWZCeGVvd3MzS0E7OV84S2NYeXxFWFE4 KXUKekdHfTFvPG02O3ZXTSpKeXJ1JnFqYk1+fXpHNCFDYmIwK3kkQm1adGsjTUlmPyQ8bzJhKCV6 Mm51WFlXTT58SUBXCnppSFpNR15xPGVhPkBAWVR7STRjRT1ZUVAjYmRjZSU4VWBrTU11el92JSpF Mnx7eyNFMD0zbFZDe3JaPFdwMSZJNwp6UW4yKGV3YjJ4QHZeQk1Ke3hwcWBpSFZ0dz1XamojU0pp KGx7VTR+dHwzRGQ7enkyQHVmMiNmbWBqOyhTQD1saGYKenBKRG5kNzxeMVQ0RkFgJmY4PT0+eykq SzlNREFiUl43cXJ2ZSZLYFJWZmFyVV5UOG1HeWxWbWcwc3UpN0tAfF4+CnpRKFpee1JuaHIoQnxS X3VjcCllfXAjKzI9RGI9S1dqaGQ9OT5UPklpSjlwaU15OEVzdz5tfUUtSHRNI0JzO0MoLQp6NUo3 Pm1UTkVLNlJSUUxWLW1geUtZeCpTPUx3cEQhKFBXU0ohI2I3dXF8ZGAlSG5hSkQ4ITAqWWQ+PzZX Zk01QHkKejBUTHE9N1Q3V2B1KDdleCFQIX4oVkRpVi1eMH5NKmd2SCsjYTZreDw7MnZaczcxYWVT QEolUkBAekRRYm4xRUlFCnpeZCVLI0x5JEtNZVZ3KEE4Sj5ZZEBrfiNqZlBYYj9AZERNdFZYVE4y a2RaLXN4X244WmxRanJ2a3BTOzAwWmk3Zwp6Yz5ZST5MbC1IWT5WcEt1N0AodThpO1J4R3craX1z YHo3MW5DX1Elb0JYVHpVdU4/dl9xQ05ZNUUrcXV0ZUJ8WSkKek5ZRFhoWU8xUDZ6ND5JMV54UDEw UmR4PUYkSDlzYSVqYWpUUz1lQklUT0pefCRxMDFXUEV9dlg1MDFtZD88KE50Cnp2OGdJU21KaiR6 VDN1U29zUldgaFFLO25VJChibHNyYSUtR29KazNRPVliME1XLXxZZWImT0NBUkE0JXlHWThRPwp6 MmEpWjxwQWR3cGE9YCNqez49bU9nZG1+TiQ+MTwmQ34raUslPk15PWckRl9JZ1dxK1NVRlE2d2w7 MFdYPDR5XkkKejQhR1o8YV9acFkld24hP1lnPXZ3M0l5dHRwZFRfRGFFYkEmZiMyQnYqVTI2eFdR WHJjcVlFJWs0SnVWaXVgOWRMCnohXmNCanNNe2BwdVZ4KUFOSHJ9amk+PClsU2hDO2t8QkRnMExD JDY4RSFHT1UoNkw1N0N2VSVzMVkzey1nZyhfSwp6OHVQOzMrdkYraD9GMT8wMl4pN182PT5zRV49 an0+ZWh+MEB7SDZxaTh+JV4wN1FTR1ZvM05ydmFxI3J3N2xobkUKejgrMGlVM3JUcXUwRGBLUWZx RWRPOGlvZzx6fU0pWGdCX3lqeSNiUmJ5bnZDQjVpdC00aH1hUjkmb1Q2T3p5KyljCnoxOyVwdntK cH1KWmVpKWY7MUFZcXZtRnZOK0VXVSZZUyVrO3E8PUd3I3hsekRgPWxRUTNsUXpDcUI9QksyX09R ewp6MTdjIWdRZkw1TnpqOCVFPEhma1RhPj5xUWFzTSt1OChoSVM0c3ZNRHBQN3VGbHBtdmEyLWR2 cmd+QjVvOG5OWjIKekFCJGkzU1pIdXhQIyZsPUlRUHlxdk0pLURLKSlDUkVuZUJUMFNZaHpsOUd9 KT16d0VYSj5vYSVUflZPdWNDPHdtCnpmLXYybkp+X1k3bnZOa1JUYG0pWkhaYUUwX318ZUNZemhN RzZeNCZMJjdSNEJkZVNZZVc0PmZ4ZD5vPWQzU1R0OQp6JVordzY3bUVLKTQpcDgxOz9Ic2JqJilC ajxGa1hUQiQ/UT1jZG1MYWNVZE9Venx5KkdRdXY9ND5JJGx8OSEzSXAKejZ7LUUmQiFLUXZRP2F1 WiF3JCFmaUA+ZTV6bypAKzY0WWg3e0xAZVh8S3ZaKWFAMlRxdWkjTzJaKF5VfHQySnt4CnozazA9 WnpWamR9RENhJE1rWSs9OzZEQHR3SmFRb2oyJE1PbylfTztLWE5kZE8tKnw4em17VG1QXks+ZjUy Rm9RXgp6SitFUF41NWhAQlVwKX1NYVc9M3ZtZEdALUt0M0hLJlRiWWBrbXtxQFl3JFpie0J9YUN1 KXxfY2dhTStvaU9xRTgKejJDYnt+dExpVGY0cyFTTzJQKUpIJHotKEFMZGt6ZF5sdiVqVCkwaT05 RD5Pdz1lUXEzQSNHcy1zcTgkKlBRMm1yCnpTX01iQE48UjtxTWZfTWJMNkE3WjYzY0sqS1JYRVcj bmFMKyF4eWZwbD9yX09KTnl4NFgtUWFrP29VPyQtQih5TAp6ZV91SldNdH4hQ0xgMkZEPXUlVFNz Q3kqM1ZJXyErd2M3NnhYbm0/ZXNtaUVMWTZhNHY1aXNOVEdnNF5ERnN9TjYKelQ5PzVkezlGKT1O RitQVlFVVHZfanEzaDIqMF9hb145PCZKdEJ3JjtZMShSYU49UyM8PyN8eVVBTXZoQmtQWnVPCno/ KFZpd2UjfHgpZUA2JHZqMW5pemJQbXxja0xncGA7ZGMwY19eQ2ttU00xT3hJSV9GRDU0ZklKPW4z PzI2KEV4fAp6JSYoTHFpUVAke0tuZ35DK0IlWElpOUshQVFaWXJ1IUc/IzJiSGwoJipOezxSNT4o MkhZTFgyJHFEeDIrWDtiK3kKeldlMW9YUXNzKXVGVG1jbyZYXjgtVXN8UW1CeH03IyQ/WXJANjgm SytYWl89QU9FZ0x4K01mY353MlpsaVRLam50Cnp7akJ8I2RVPm9XaiZfPHA7YTNHYyNtTDxUQW5q c1NZLXtBeDtvJVdJYChsUkxSPlVITXIhZ2BBWTNqcjNfWE5eSgp6NEt2SXglfXwwaT8rREJsI3x7 KyhvKUUobkNWOWshanZCZzcpLVJ8eGxFZVJBKEslWTdlaT1WTU81elgwViRjSVgKelp8SilvalNA V1p0KSQ7TW8lZUglaGh3cVc/WHJ+TWE3Z3xYQE1WM3Fze3s1bHBAcTRPWHhzVG1GQmkjWHspdyF2 Cnp1RmhFNDZjcylUUyhhN3c8NzM7fkd1LWBeUHt3QiZrNzBRJVYlVmZpeVVZQz92WW9JMkN0bEs+ TntQVypxcHAlPwp6P3Qlbnk4YGFsYHJ9PTIoJmJKTlpITmVFZDRveWlsMis+SzY0REhPVDV0Nmhh dXhHITtFTn0wZEw2MnZraCFvUDYKejxpOHEwT3U+U0hgUTdNPXpXQ2gzQGtMXnlIKShodypaZX51 I0d7Mk91KThnSGIldkJqbXVZcCU0QkJNa2xxdUcjCnpPZTg2LTghbzJqPVIjYWljKm5RV21JQCln VXhZbGEoQmZTbDtPfnVPeE45Y1EjYFRvWVBsWUokUjYodVgtU0YjNQp6JXxhbkpXZ1NpO3FnVypY NlNOVm1eWmBfNiN2V2xSY3FLZzFlNWd1KDY9OzNNMCpEY2ZAMXRlJFYpQnRtY1BNX3IKekNTTyMq STFzdiFzZy1jPjstQ01aS3RTVnR8TSNaeWhwMHliVX5nfDxwOy1ebnl6VyhRNnlpQnNCLT8rd1JE Ym8wCnpCKDl7UiklbjBedm5RfS08JX57YGNoZT9tTEoxJWRrTzlGaik5Xmxga2krTWpnYyo/SF9p KDwzakQoYlhrM0FtKwp6aDt5OzUmfXhLMU08PDM3WkZlalgqNk9IMkcyOX4mSSR4S0Rxfjd8Tkky UGV+bnhKUGpfbWlfQiVvcG1vUVp9UG4Kelopc3N+SS0zZ0QxJCpCV1I5d3RkNEJAWW89YEFza0A4 RkB2RiFhTTt0bXl7JFopQWsjNXNPJCNLRU9Xb2VoaThlCnpZSn1LbmI+WT5zNiZZN1VqZCNaIU0p Pl5AQ1kqLXp4TjhGV15eMn1vSWdAI01WbUooUVhwbzVkN2o4UXUjQDVJOwp6JFoyXkdYR304RFV3 QUJ2d01lTzhNYylxZExxMXE/c2BAaWVXfDBYRkJQMDl6TT8tWE82RCRLdmk1RCtvNVFpaF4KemRu dTloX0Z1Q0M9eyF2anNycF93bClWaFJyOWUpSmNOc1dIbCU2WEBfdyReNVprNVkkLTE4e0UzVWZi aUdrbmpsCnpjQGZ+dCk9WkFnb1AtK1k/Q2UqaHg5d1U+aUw5UE1GcFF7JWR9cGVxYWYrc2kmcioo cGclbDtPP309cmZGRE19Kwp6R2BhS0c7b0xXbiZITHc2KGZ8Y0FEaDY+b0k1YjIobUpgK1VhP3VA VUkralowWGlwcHo2eSZmS2liPjRIcjhQSXAKeiskajJrKUFFbEVjdXhZdjBWVTx7UW1CQ2VrPzhu cDxtZzYtIWFfM2Y3TWVxbCY5NDROOz57JjdHQWFDVWslZ354CnpiS1QhZ2YpKm5ISGZ5UWhFSEI8 LWAwOGVRJGJ9eGhodyR0IW1vdzQjO1YjSVdsQVBhQ2RxbCZvWCV8N3hwSyhQWAp6dWhjV1dPeDdk ZzloYUJyKFFUTWx1U1E0bkZOU0RgeTlgOUxlK3o0ZGFgLVdNeW48WjZhNV93fnBvdCVPVVRiKGIK eiN8YkNCYU03PWZUZ1B9WVNedH1iVHRqXyQoR1FhR2lhKFJfJnpSSDFaMCNseWRtTCNhej9BWGxZ Y20/RFZwcyZZCnphLXFpVTIofXcoR15DTjlTezstcnUzSj5sPDtLe3k8NVFZbThBM05iWEYyenxy I1krSkxDVihoJjJ0fXBaejcpXwp6bkA4azxLeWxxUV8zSC1XaT5Oa0drRiVKRDklfng/PEkjdkRv M3xTRnl3aiY3MUh5MCgrdF8+U0QkY0pAbiVrTWwKei1pSUpHeGQlJFdtekp7fk9hM2hfJGJ2fXdm TiordVYpfnpCcSNxR2oxNWtrZEJOJmt7Vm5OUnZ7JCMjVlNqe1lECnpkLUold2RUNEB1Qlc4MmNL dClYcmVAflpSa3hqYkBAQ1Z4N0okPk9+dCh7JTFUOTNofWd8ZkY7OWhgJCVqSit3ZAp6OylRX1E/ Ylo7eXIjMnt5ckE5c2xHfWsrWHRqQit5MkdIX3t4TmkoXiZ9alBwKG9OaHY5aitMUDBrYW5pVyVG QWoKel9pVXw/SGJoZm87cF54Z1h3cyRzUDl+ajNMUnZVUUhDRChHdjRWZHk2PyokamJkOC1rJml1 dD4tLTlIJCRNSlItCnopLShsLWV3QjNadShhRnUoOUwkTz1ha15NVU1CJWBgZTImPm4qaUE+empo WmNMRGIrfCRSN2ZCTihfMGE3ZjNieQp6OXRwPUI3NipzODBSfVYmdC15fEdvWnJIJD1PRnBXNHhl Rl8/JipgWSM5SGJgZWZPR2hraWtJPF9RWFpsezVHTXYKek5IYDFuMDJpVXE9V2xPP2tEcCEtal9N VkBIRldjYFJSI09KeCUkQVNWVnAjVE05c2NZI1R9NjV6KDNCQCVga2F7CnoyfkxZYU0qSWkxfDN4 SWZXLSskJDFAYEx3aGpGfk5MUXB2V1Q3KF51VWR1KDRWVC1GM2VAQkNQQz95SmQxa2BPYAp6WT1P PFZaYVlERSRpKmh0cGVQTVBVK3VwKWF0OWNzVHVlZXpRVzNaI0VMeDJren0zfiZWellmdC1SbHV9 RjY1Z0AKeks/KVRCQSomej9LKlBgKzNIdmtuOGp1dVN2KEA0SUJSMURjPkN4UDVwTT5kKGtlSGJH aXh2VCY+ZlBYJXlRRWdECnpBfCp9bTkoTnEoJDU9SjFMTVI9Rz1UWlo5Y2xLVE1DOHFadWNhJFVi I3ZUUVQmI3V0fGhMWWV4MUZyc2RhU0M2awp6NlB+OyFjZWM0VkU3fD9TR0cpa2dDX3l+Y3FjLT1I TTJhJVh0U1ZNQU5uaXB4eEhVciNvU2pqQVNOayhVKz9AdSUKelA8PztIYjxwZn5OSl93ejRDYU9l aUI4PGErWVlKfVJaWEwraDREM2cmZHBha2hOPDM9X1VVXyRGKTlSJGlHTy02CnpIbF47fUA0e0ch SVNFQytRYW9ueTZAaF4wWm9ASHQqNUVMflR4S2Qmcn1QPHxwfEltTTVAciVZZ0VMQkA9ekZWWgp6 cDNscGQ3JFZNJmw/Km0hJGB5eCVMJTExZyY/QUNFQyRvNlo1USZMXlJaQG5CYmRGfXluJmQ0IUN5 TTBFcjcjVHwKejVObTBaJjxUYERVMWhPRyNXPCVFQFE4PXhpZXhzZUBPUmFvTmQwP1I7dmo9TUVj OXpRSD1vRHxyTzVGPzM1SXxOCno4bFNZZTlPWldhWiFgNDBqdFZRZTk7elclaGB8RmVjdV87JlYo fSE/STJeSE5YNmkmTj01cURCP05DNS1MNGtDRgp6KHB3czhYMmJwOz9PPyU+NCsrVkRJJWBHSFMh SHJXNiVGcmZ1d1A3eUB5XiVsOyVHcnVqKWwlUkoqcHlWamJCfjkKejl8Z2dzNF4hTC1uQFNPPz1e VnBGLVB+WEdwbF9kPjgzaG9iS0ZJblJkQVl4OHVJe2p2NHp6JG8oX0JlR08jclNLCno4QyM+MzB1 bDVNc2UpRjdMI280ZF5yYEohJFlyST0lNkd+M0lHQG5kbTx2I2M1RitjRF9nKW05clhFZjdLXy0o bAp6TFhAX0EzKnZDIVl3N1coPzhiV3RwMmF0cHVYc2dVNDxpc3d7NUFeaHliTHJoVm1hIW9IU1E4 MGpkUDFBQ1A0PnIKejUwMHF7Q2A2eCk0OSYzQlleN0NxVU00bXI7M0NqWE1QfChUM2t7U3U5OS05 e3R2TXpTKjlDdmZxQUhWMTFyJVMoCnp5dXlrU05nPDBHc1UqY142Z2YwSzFYKT5oe2QtZiE2YnpY MVZQSWdlUyohdHg8R3NocSYoQ01IUyFDcFNTYXRTegp6U2FWT3YlIzhscjVjRUJsIXtNLTxqKU1X WGBGKTt0Mj5GSWFEVyg/bkcxVVlPVV5ATD8mc3JVP3FxYmViej1nRVEKelEoUVc0Mm5xdjdGeypf JiZGTSFhT0JIYmZzeXpyblI/NEstSX5YY3pnT1lCUzZtcEVxTWEmZHBsX1k0RzJPY1dLCnpNOXZI UWtGUj1fM1hkbmxDemtecXF+cT0wU285cUE/SGE0d2liJjt8ckJaMDFYekdVVDZ+eXMyVSNLZzQ4 cTZgdgp6QllnUUNQWXh0S1llZVB7Vj1rM3lwJHpLP2RZZl5UTk5jSkopPEo5ZG1AcylzaUV8UGpW JkZBS0IzYGVwTGNIZzwKek9ZUUhzb0ZrMUZwTFJgZCZycnlqS3RqdGxuKWh1N1o4dH5fYlh0QlZK TnwqJSY8UGJkI1puZjskMzcjVjJuXko+Cno9YzFJN3dBYk9OZ1k2NlVPYHpaTHdSZEo0eTAxa0df O3s7PFdaXyRtZzJ3QWlwbGpnaFItdzhyMFZxVCFWM1I3IQp6dns7NnkxKXs8M2tOdmE2JVlndW92 RllhZGkpU3ZuVWhMNCYmXjh+c0tYezJyTkYxa2xBMUZtUEdwd3J3PE00VHgKejw9X0hSMnBWP1ZU X1Q0TmBFNylCYml+T18qbG18ZkxyVCNyRXZPKmlmYUFZQDRhWEN1K3t0SUwhaGhxYGVJcHIyCnpe cH5wRzg9RCZHMXQyR2BUO1BPPzt3bFNOM3olenledVB6TktWSm5YYVU/O1pVSSE5ZVZqZThsPmgz b35NIVVZdgp6aCtiKVFAUFpsJlN6RTl9QUZte29LMnV8fHpwWW9HQGJGZEFoIz8qcHdCNFp6d3d0 TUViSCNtdzhRUyZoSnRTMjgKeiRiMnZ9PmY0PDNjdW4rc15zJDhyQjdIWnxTVXxFI05ycHRNbVE8 RG8/d0Y5fEc/VnNKSVM4QXI4Qnx+YXVLUmYqCnpkX3dQeUJGVFBERmJ1Z3gzWU9xME1QSSFVdExq cWB6am0rMmhlP3dHO3NnQ1BRUCVWKyVLO0UwUWpuUH43ZGNPTQp6NDhrelN5eSYtSEJHVWYjQ0tt elREOW5ybnNpTmp2QHt1bWAyMldLc0ktRmUpMmhzd1lIJW52XkdfPk1BO2B8fHkKelVPVG0rJj1g OGE3OFgoMjlzQWdTRUA3OHIhfiZkPillUCNCWWk9dkhRZWpTLWd1KG1WRXs2ZFcqJmFlMnYqJVdP CnpVdnxKflRiSTNmbmstOz9ZRzNAYCtKMkdxcmYtKlZOVGU0TXphYCV+UmdmTUMzZmRobUh5UWA4 X05Vck5ZaitlXgp6T247bWRYST50ZmYtKS1YeDl7eHE5biV5WkJ5Wj0/QWVJT1NzVyljeUVUZDZL Jjk4Tkd4Tn5RQlBHWmlBeGhmTl4KejlsbzVVWXJIJGQoRFN1Sm55cW1RbnFzY2RwalZeSyZeVT5C RjZQaVVLamw1JVp7MylCOHNnTFlJSyVJVXpaajRBCnpYeHZSViV2PzdgUH4/bDk1JWYmRmQ1em8j JUZfQj5QWnA/eUlJIWY/bU0pTnhMIW0td2opdGolRUB0V2x4VH5FRgp6dnFNSUdAJj4xPSp8VnJ8 NjdqaW0rS0VvXzhtOzFOYSl8LU1aQXswXlpWZil4WkF0KkYpWFBSJSheREV7IVZCX1UKejxIYzlv N0UzNHBTSWVSSj1WTDApITl7Tk9STXQrUyl7TG9WbkVpbyZrNjxidytBLVFXVFZgVn57Kj5pYzdX I2wkCnooNjZnPFZWNEtGQCk5N3FgKnByQVlfK0c1bDw9Vm9mQW0oQFkrY29ncTN7eTg7NEVrO0RP Q2REUU9SVyNmVURUcwp6YUY7diN0aGZWRmMoK3E/OXQhKHktcUI8eTNfKXpfeipqI2M+MUtfVC1w KnpOLTBTR0VZMjZDakU/aHp9K1NAKEwKekw1YDJYeSV0WkF1U1VXP2Yza3U2cj14djd3SGZAJipg YUhlcEAkM0BaZCFJIURQdnIoT3IzcVRXUTluOWJARHlECnoxWGFWeSFhdEZ6VW16PHNRcDNNRWUj Q2ozbEQjdzE7O2VCJG1ORDUjT2IpTzk7S1VrLTQ9PDRTQkUoOWdqMUIjWAp6R1MqUmVkaFJ9TmtQ cjRFM2dLQnM2KSZSY190MTRwcCtJTiVuMURqVHhZTkRqa1hkMWJ3WjxhakNndmdAYiRNVXYKejBw VFVkKGJ2dyo4cVorN2tKVENubDhUWnwpRWlqT1pyWmNxNEdTfCFRenI7U1hkVDstaH0zUnotT3tV QSZXdl9gCno1Jk08NEkje2p7KnM2XntFSD5+aTlfP08reUcwVj9TUSpCODxjUExILXYzWD93WGck PXU9R0BiRWcocVdvMzM1KQp6PEc4QXM8fStyKD56bkE1MEYtfnlPT2spe1p0ZCh1QDl2dEEtTEBq ZkZRZG1ocE56YGUhJkNDQ2Y8aSs+a0ZNcTIKejEwREw5JUFNYk5xYD5APVQoMUFMZWEpQyM/TkA3 biFXMD9mQHFrb0J2ZGhmTHQhbUJBajwxeiU3PVR1UjNHamNrCnpCVmJZNEBLZnE4e3RiaUM9WmAh VUN9R3pLdEFgMGFuTXRQUmpGPUsjUSF3XkFebF8jbjdgfEdjKUJaak9ITm5yWQp6UU40ZjNzVjAj YnhTcWRRNV5lMENLeWh4PnFST2BaPFBfTClHbC1qOGdSfjlfWk9leyl0VFhMVU0yVDhZTSElYGcK ektiOXlTdDlaUjVucFNeaVllUWk/WilfNW1TbEw5PXJEKzdBbEsjaChNTn5RfGNyWDlBNTlLVGh3 UT5qWFQ0QSpTCnpiYmcxcVdUS0hyJV4hUTFrRnZUYT02XkEwZnY5MnVQN19TNVowSUw0enFyUnBE I08wdys7MSZ6KUp8cXIweXRvaAp6JkpUd04/eE1WQ0h2anpqXlJvZkg2RkVMRUY3NnR3Mkw2YSsj dDB1M3ZkO3M2RlllSTM0eG1PI2t1bTEwRyEkRD4KenpFciRxRFA/bVMtU2VlSVo3b0gpMTJvMWNq SkNMS1YzNkw+SDdwbkU3RW5VQ0VYfCY1bEp6O01xQGBMN3Z5Rz0+CnpAeD4oVklhI1VtYX44dWJ5 bE1XNGR5fTBFNjN2Wit4bCMkcll7V0t+eiVkJTkkKTsqKWp7XjJSJj92Tzk8WG5MJgp6b3N9QHZA dUcle1dtTnAhRno/fStJVk9+VDtleklzbTN8bT5XSVRGND8oX01GbUY8eGY0VldfSFRYQD12YGx8 S3gKekhOKD9KcmlDRG0yKiFVQFdyazJ6SHBpRWhvbUNubl9xVS0tcj1JdX1oPVprJmwrLUJHT1d8 LXBDaWNNSztNQFdVCnp7MHk8SXhudV5WQXI8IXZLe0FlYTA9eStCNEdBNUx0RGxSSjNvb2ptRzI3 WlI3Z0wtJVRIM3JGdSZ1eVRKa2gxIwp6cT1HZFcqP01heXA+VDRqN2lZSmVETUthcHcmaERIY0pE PCo3JF5KUkB1d2dGO1ZVT0FmTTElVT1USkUhOGYleDEKelBmenx2QEF4RDZBdUZoKFJWbzFFVTQ+ WGxYO3dqMWxmSj1NbUI0UkMtVDFucGNBOEJTV1lnZVApUyE1RCh0V1RGCnpsfGNWIVoxPj14Y3BX XktLSTJMaHIkOThMeiY3IX0lc0RGWEVCVG5VUEVDMGFFWikhNCNaKmU9X0N6amA1RT5kaQp6LUxF JiVEZzJAUW1QYHMrNE5Ld08rQmFtRHBadH45TkVkVT94Y2FLITxDPmd+dztqUXFsKWZGdXRPSC0p a3B+encKek1ERng7QGcpV1AzPVktSlZ7QSg2WSFtdEhLTkFsUVNkMHlmS31KT0g/V3BTa0hPJSVx I01GeFVXSEQ+X01eTmR2Cnpod0xUdVM4X2hwZUtoSXRpKVErQU0yaHAlS2F0WV8zSTtzKTRWbT9R QUw+a2U+V0pgfG9GP0pUTzdefnpEZX53Mgp6RXpmVjZWNVlwblVXbGtYezJ4V087Mj4+I3BkJDFC cFZWJWFsYyZGMkpSUyV1SSpSa1dQSXhDUHVeaXBzYlpRajEKeldwailZT0RjJHgwKmdoZ25zO1B7 dXMjRHJ2Z0ljd0R8VTJHMFo7TjtpRUdzYnw1d3I+S3JyYD5TWVVAO0EhTSk0CnpONHxwb1ItaUBX NmkmXllafXV3MlZBeDlxZlRiP2IldW59YDBeQChiUVVWek9jWjVpREppc0hDZFVNeVE2VEZAewp6 Jj5KdTJvRSlCVllyNmFvSH5wQ21QJDNhJCNYTyYrYT9YX3FWVU1HZVdSNkRnZSolTXxxWHdOVVVf N35XPylYeXoKelIzSGskNHhDY3BGWlNWQDtMJnEwVEskaVUtQVo3YHlKbn4rJk9aVClqeTNoU1Nq PWZkamstRlpEb0RxdVFAQWR0CnpEeGJSdDY3ak89dytfVHFyZjBMMUVfQCtwcXlPO0FZfktMcjBE OVA0PWNHJmM1UHJ4X2pTMmA2dlIrLVZrR21eVgp6Mmx3eTM9Y1JUV21MPTRnNEZCUTFLbDN0Sksl PSVYRTA4LW1ZfE9EK19vbUh2Tl5wVTFMU1M5WnI/T0tNNUwhSG4Keig/Z3Ejcn5oP3VBck4yO00+ OzlELXJ4VWNRUihkYDhiR2FLV1h1Tnc7UzI0YHkleGpXbFBrYlglPD99ci0zSjVvCnpmNGYoI0xC dUhtWmh4PXN4aTtLK1ZgT3B5O0c7UjthZ1ozNV5+NSgheV52LTlUQWJ0JSFGSThXRCpldkNFTldQ KAp6ZkVYQ1JGPG9+dko8OW1DaXdLMUxjO0ImMS1MYy0haldyZWdgYVAtQz9vLTFuM2U/dnQ/RC1P NHVJRT8oUn4lXlAKelM2MEhAamhWcV8rakpBNis7eSZAQ3owVURDJl5ESShTZ0lOZmFOKWgyP0lG YnV0MHpzenJOakkrPUxtbypvM35pCnpxTnlvYVJDS2hXbDlKUS0ofHxyRXdPSXAxOzRBXmlQZTlp RCF8I3x9YmZuek4xRGJNQkFXJG4lPnhGcGg9bV5AYwp6MVB2Vng0VH4oLWNUSkJhTCFTdmFIMSRO Jl48O0w0MGQjU0VkNDhVVV49Sjk7LSg/V3E1IXtSNXpAc1RTe0ZTbWwKemBxfDRDVl5DUCZ4cFco TntWTlBYZkV9SH5kLU1EbjdEb3AwSn5eSFM2b0QpX0tKamhpcz9Sd14wfjc8eyg3bmpvCnpZRjk8 ZEg4NklfJSlWam9vOFlYIyFRMis8WGJ7QCRYY31TdERgYiNoRitjfmRSa0hwYU56dENjM1RJbzRF e0pOZwp6VVE9cFp1d35sTUhaMUMhaFp5Z3JpRnlgdilCbWBEIVJnNWtrTilgeiluTkxHYDwtJFR5 RVhCanV9MStOczI+T1gKekpANnd6NHJNYXp2PkZYJEdJe0p7bVJQZVJufHdTUUJMYXNVOSV6ZGpo YEl0UGtkNGtkPlB1Wjh3OTROcF9sd3k7CnpMYm99dXchTmpUTT5lZ2olNW5gZCVnYlZ2MTkyKV4z cWZoMjJ8QHQzNFJoR0lrZl5BR0pjfUFoY0N4ajthVlhRYAp6cmcpZm4/Y0J0O2BrNj1gMSNZLTJG NF5Wc2lAKW58eGk+OHJNWjMoRWBhQD02cE9JZXwxK0pzOzJCRV8tdlBDVj4KemZIejVaJWhXa28r ViZmaStEWUVsQHFYQkc4SUZwWUhzWUJ3emxiITQlSG8pIWojX0FzMDZfJShafFg+X09WPzw4CnpK TmkxZDwrfEhIQ3p5TDZUMH5lYF5wYyR2VEZ9M2hyKXY5PjZyYXVxey1FNjF5fj5VdFJ3eXdSez1R NEIpN3F2eAp6WkVJflNeJV9gX0pyOSpWN3htbTU+MGZfZFF8YDZ4aTw5c3BAWnt2WXloYVIpT1lQ ODllelgtVCpNQjl+QFJgZUoKeldXYzEpZXV1aWVRXytocWcxZj5ycExoOHl6MWVeUns1KmZxXzh2 Zn1zMkxufDBaJTFwI094ZiZJeSE2Kmt4cWxWCnpiYi1ATXpvaFkoUSY0KUltJjsyMDloaiNLdkJa LVhrfndXQE92anQ/aSErK2BUeCtnMT9Xam1rMmxuQCgySmtwTgp6KyhlMT0odzg5bG42SFFgZSpF ckZkJU9HPVgqeVZfayh3NlgyfDE9Zj8/bDF6ODx2Kn5KbERPVUpIUHRyMEs4SWQKeklRKTNwbX5i andibF8/ZmRLJnEqQE44PXkhQmoqRnl+ZStIRVYwfilleXBgaj5ndUJVSkNtME9aUD50NV5rb0lQ Cno9RT9kV0xsMiY4aVBjKHQoT2h1LUZSPHQoV2xHJWhyPXpgLTYtcTc5bXZLPG5Wam9xIzV6c2Ur czt6aEBPP3lWeAp6Uj91YWwqaWYrN0F+fT0yaGcyVHNnP29uUFYmRyE4aH5jdFdERUhjfDNIKE0w d2Y0QXYlTmdHIVhOTHMrdzh7djAKentaOU8jZGgqaitWNEM5ZWUwa304dyYtTk9WMTJfO0clNmBM RUkxd289ZnpPdG9+WWZWKGtkZzdvZkNVKndyY3NNCnojR2BBYT14aWc4ZjUmVDBuXlduTTl3VVdU TzZ+TGJZYSppS2tWJUtEd21UYFpqO3RIO0ZEXmFzSzNic3Vxd25lVwp6cmZ7M3FKLUdrTCpjI1R1 NjNDWVomPiE1LXl8e0I4cmtZJFJwOWh5LVRpIXBFX2RHblNUVzVScFlDanRORyRiZ2MKekMmX19I KT18ODtOaTsybTJxI01le1hJP2lQOXtlOS0+cW4tMWwmYCsrcn5pME1+ZlJ2NGtmZU9QM0JlQUwt K2N8Cno2NT9kYld1M2J0S3w9aW4tVDNmNzk1Q3JNR2U5JFFEMiMtN1lmYV9wKWxPLVl1eGp6Mmgo Nll0aHgqZWI7OyFTSAp6aDhQfGZ6dys1ZD0/XipePzsoSF5XOSRhczl6X3k/O1NsKWRiYnZ1XzMp QXhLWUdrUGZYcFNqdWteNmNyRShYMHQKeikzaFVDSDY4Rj9TdmtuTkdAbmslaFF5c09DX2tHaj4o VXB+TnpYNzxkYUVwNlo4Ynh1KWVAX1J2QD51JHdyJC1zCnpZQSpoOzRHKl93P2I3VylvVyhIZHF2 P1VJP1BZc3k7ZV5hWU5iMT8maXBxKStaYUhxM2AzPSVAV2tJVm9ebjFGSgp6bDlLYk5Adnh0UShm OFRJTXRXMitgUzY8b0BqaEJkNzI1bEZ7RCF4eVlPVFN+cy0jUEV5clNuZSpCPFJOOXJTeSYKemJD fXQtSG16SiNmXn1UIU17Q29iS3NEWGdwT0B8aFY+ZHNhUWB0SWxgZT49QyVlQy1XU1QkfTt8QyVG YFV8TzNYCnpAIXtQKFYzX1pwcj9sYilxb3J8PStqQn1nUzhUbjs3TXRSMVJkYEhmRkxaUkh2dE9W e3M+ekUjNmUzcFphNzRyKAp6ZT00YElLWHoybSl8MCNga281dDFZYll3QXo/SngkZzg3TXMzJHQj WnVNTyVWOCM3VzghJENjaHAlQ3RjOXU1S04KeiE+Tjh7PD8pR3tBdktLclhlUnFhZ31FQGdNbkwz YV5adlhiO3NWcDtKUTI3aHhyRnghcS1ZJiFpYjVkXiR3ODdGCnpaI3YwXzgweGJ9bW59Y2lye35R Qj5vI0tRTVBYaFozSXQ/bmQ1aWhhbCtQdkZFPHhZPUV3Z0UqVE83MU5OakY3Vgp6S31BdSUoMiMx RjFHZkczSkZ5OCZ6djVPYExeN2dnSWlIeTRIejxodHltb0d5cDghZVhGVE5ybU43R2JEKihTMUIK em0rQFdGUUJzM1Nea1JpQDRhT3lpVHdxSHpVZkt4enJgNWQ/eUU9fjItY2FqJEVkfn5sa0tyQ3Zu QjNAUHFjaEI+CnpHTXBqI1FpTmpYa31AckVQUUFfbk4wNnxhQ2x7ZEppcU1INykzN0xsdEV4an1k WStEaCtDan1eQGxISDtQRSV0cgp6KHdCfjI9b29zX2twMHsqZVJfKGFrXlM1d19NPj0oV1RJJn43 USs/TT9PUT45eSl+KW8jO2ZzSWJNfW9NXmZ2ZioKelg8djV6SmZleVY5fk1SYzdSYz9SeldobURr b3BYWnV+KD5LaFZSPTFPYnNpZGkzfF9JNUNTMDk0NVIoP2JTbnhGCnoxaCpIbmN3TjBqNHdhPjFo Qz83cGkkRypfOTc8T0AoTDczaVA7N0E0TGshR045Qi16PyNRUUErSWlmeDtIP2ZAVAp6KzkqQlMj I2NFZFcrVipzKDV3UjgjbmtOSlV2Z3tIP2NPcCE1KUpPTyk0cXFEYVg8NzlfUVU/KmF1Oz85TjFF JSgKelp2a2pHIVNKKTxNX2xqJkB8P09rOGlocGp3VnFlb09rdGZ3MHx7b2o1bm9eNShDcD5IP0Vs S0AyRChLRSlUMDZUCnpUMj0+dXc0LUNnPChia355YHBRczhBaiN6PVZfNyQjfj0lZUE0UkJvMV9M OWtrVnklfnIzVyZ2MV41fHkmQGM4MQp6dyR+KG9Gbkt5YW5vd1lGKlMxPGghUkt3ZDFRenA8Wmo0 OWBXMlU8R00lVzF3MygoWk1tQD9ieEk3Nnc2ZHVfSmcKekk9IWxhJjVkOHhtUSsjPkA/KC1tVFE5 O3dWOzUzN0lRSVchM0VGZ0hNQ3xfZkRoWmF0ekItdWtMYGpoNXQqTV4xCnpCeip7ZEEhVEVnbW00 P0hRQ2M4T2w+V205TzE/bTRFN097cmgtKHBiQFNmVXBRfG53TzVpS3BnaDZVYnpWb0dHZwp6TEVa ekplPFFWRT1rOTJZayYrJHwrVW5gQ2JwbT5NZTxQcihOKjdmNGVzWUJGQGUtc1ZnWiY0amtXKkF7 WSRKVVkKemB9PWIhYlF8a3AlQClBIVN4O3Zna0dHYmp7N2IpQT09UWxZSF83NChJQWtLcil2dHg0 biY+JEtRcDh0LVVLMX5TCnpgfCV9Wj5VRSZ8eEs/JmhudztVfE0xJlU0YnZObmp7cCkhZTdDfXRJ QURoPVZmNT49cCZfZmNKYip7OXFSRWghMAp6WV4lfCslZlVYLU1OTl9pPkVDYjxaaTV3USs8eHBl cG5lUmx0Q1VjdHIqdDd8WWI1SHVeWVZgcWwkN0RUcXVQaGwKeitsMl8/JkA/U2wxbFVoKk5oM2I2 O1BrcUNHWVdTIWtWKCNWOz5EPGpWelZYTypYKk0mP1NAUDBsc0hiWGRmaT84CnpVaHdfXmMwRT9g WF4/WlBAaDhaSyZISm0pOGpmMyhAclp7KDw/UkhHdWs0c0MqLXJoVjRCN3F0P0pvdnpXNmc3MAp6 JUYjPHhaeTVTZGRnMGFoUyVLWGZUPEhHcUJrMFlzdjRiWlVKXj5XIyZscmRrUyt2VWRPRHpgPG1f Sz1INVVyeGUKemtueFZsXzZXQS08V3FLSFh7SG87JlVFaEp4NWVmQSh7QVg0JEdTS1ZVN3AlS0sx eSpGO0BlPV47Wks2YFk3Zz5ZCno1ZSN+bEhFZCpgaz4wazY2O2VgVERiOUhpcilaJnUqMzxgZlQ4 bjNFK19xcVJjPW1jQk5aMzw5dU88VENxUGR6ZAp6MEtyWXI9N3dDTXB3UUxkV1BSJFpWTWJTRCFM PSRDNkd9fEhnQ2tJeDlofGZ9dkBodEglMnlsMFlfdzBsYFl1Vn4KenlZfTtCI0BDNHx1Y1NkeV5l NCVLYX49ajdsdlZpSCg5TyRJYTlRMXVfRWxxcG0pUyVUOD56dzhZVXFZZjZUWGdPCno0Rm19SXpY bCRnemNZNHRMeHFYOE44YyVaNlpLXkVrZnQzaDBwTURSSmVBYkZZIWZVemheaiEhaUtgZz5JPDxX Pwp6UV91U2l0QT9seEljP3d4OSYld3VMOX42Vzc1JG5JMTl4e1BQfFYxe1lDcXx6dm4+RH43I0xy OEo+TVh7azJmJikKemxZOHJVMy05eCNkPXdKUWkrO1J+XldrUWU3aXc3RSkmZENCSHRAfDlOMld7 MUA8R2lwKVRfZnxvMHQ8IWRVYGtZCnopNzB4TF98Y0N4WVUkKXVeU3p4OWs7aVVOUmYzbyE8T3JZ RXVBSz44amFnby1AN3xzfWQpM08qI3ApcVlxeyFwPgp6ST8wUkhOR0tNPHMrIT5JaX0wXnwqWXFl SWx4aFpeMl5zakNYbntIZ19kJWN+aGUjM3JhKkBHM1FMeFFMbzIjQncKejhwUHxWVTN1SHw3K1lD O1RpK0luVCMqTmQhXisoWDN+eUl5VyQ8d1Z2LThKUUJiYiNid2xjdSFMT0pQX3J2Jig0Cno5Vkd5 TUh5ZEVEbUxgPHN3PCVBKVNMWUdvYFc0eSk8Mik+QSUzJUZKTjx+fDB7R3EmdEFeT0NONyU1LW53 WUdUKwp6XkEkQSU1Y1MmIypndVJCeSUwe3EodTM3XiFyQG1PPVVQfF9QSD1vfmp5b1NzOSp1dV8t Jjc8MEsrNDI/NkdzYTsKejBnPm1BJCMhOTdUalBXQUNUUEx1PCRsYmtePTJeUllldElwXlY1RFd2 VSF9P0E9c2A7bGNPJSRUdSlFVVR9ZlpxCnpjMztAYjQtU1ZzamJgaDZWQ1d0XkAkVzxwNm5ZNFk5 eHs5a01jZ2hNUXpJLWY7aCNqPWBxJjtHYkN7WWxSLWpAKwp6Kjs4ZVBDd2xGOElAcmheM3dGTDcj N217TjtQYnM9KHxKMHl2R00qdXNLfFB1JlE1MkF2aD1pJWVpJWdeJDs4TVgKej4kNldiLXo/YSZm V3JOSkpJZlhaI0l1NXByNCtJZl9JMSFgUGRGajx7UTdNdD8jMSFvZk93Tm5zKXIpZU5yN3JxCnp6 KEAmdWQrQEJvKlBneT5oNDVTcyo8dWVSR0FCajdPNlNTM2khSjdpQVA/QkklNC11NWVKYGUyJFlV ZEZLeFUzawp6cUUpZG8/b3lqU1VzU3FUckJWQlNlfj5hZ0UqN2cxQERPXypWVGIzRilFdD1RQCM1 OUhQPkV5QlVjQj4/UT1nenAKemx+USZvbmFVYUpZKXpoNjReNDJyQUB4a0RabnZFPUg5OyQhSHZ4 S3BmTWlKVCk0enNsMz0hNVo0X3M5ZTRSbEhrCnpEPHBPcWo7P3c1MzI9NSNyOSNxb053amMtVk0j MWNkSldyfjl2Q2khQ2B+NyRMfml5bF5rYyVQbWhSdEFMaXYxJAp6Z3BqSEczd1NHOzI3X0A5R2I4 WXduM0l6WG0yZWQxMGByTj93ciVBa2ImTHcrQWo7YCMoSS1QV2NubVU+TTVOKmMKenJxPTZhTlBK VV9LYWJ8a1FSKk9HVz4wNjlVdUJTNk1XdmxrRFhBeSZ5XjdoX1U/TmBJcHk0IT1hcWReTzwqQkFf Cno/UU1wSjJVX3loWXV2K2paOGJgUVlsI3ErYHloNihhcVYlbD8oZH5hbHZ6SWMwZkxXcSRQckZj c1lvS2JgTlFMOQp6X1pBQWVvbkthaTg7SHVJX3dYTH1vblQmNFhxSkwqPFlGQDJDPTduamN4NChJ bmh7ZXU+Q3BeIThGP1o2Xl47Z0UKeig3XitoZE9Ba3AzZUFCbk9fKCglNktvaVVEe1h9Vzduekl8 QC1jMChGKTttSXZpeWVBaTVJb14yZlQrWUYxaEZ4CnpSTldeZ05BRStATUtvSmVxbUZBWXh5OGQl Q0NNOVpYNGB0WkxANFVBMVYwYTN5dUV0bV5CLXdvNUkxKTthZ254Xgp6IXVHfmVqZ31COzZnMDNT JklvNykxVTBkbj16WUskZUVzVEMtb05Pczx9eTl7PTRkRzVSfWQ8UWp7aTtVbyM2IVQKeigqU19z P1R8SXtVPUYyRiZOIzhqI0ZVZnh2Ki1qbXYhTHFrNDxkZXtFaGVVdUQhWDVGT3JPPiFQMH0mZlFv fTwhCnpWMGdHRmskVXkka3ZQS3trc1drfClDKkk3JnleSmh5RjQmVTxWeCtrJmtvRzJge257eHpU ZWNFZWhfN0NGYVI5JAp6ajBVNEo3aTU+OE4zLWwzZDF8bmYxQGM7cU9vQHYrUXYoWDIhR0JUTGtk Jil6Qk9Ra1QyJUlXWU9naC1HOXxOemMKemxie2UqXj9TNCtENlJpK0JHTXpDWkFWIT5NJmohN1R0 O28rWSVTQE1rTlQ0RmJTaUQqUUhCUVpXO3BfTncjNz1QCnpOJn5kPUxgXzRwTGo8c21gPiUxUk9l fkJ3V3prS2hGJXAkdlloKjg8STdeWHErYUM9RExMajlFPnRgZ3Q2N1VtMQp6cERNd0MqUDBSPl5D TD04NSE9YnwpSiktQW0zY3RQIT0wOEphaiVFdHNEcl5vQj1eT0E/bXlUMkpnc1ZEbWp5JlMKeip0 PjRkOThzfWZ3Nlp6dUt4KDlsdSlJRmctWVgxZS0oPVpjZl9XUX1hX21PY3FWUTh3LU9qKG47eGUz dXAwVkV2CnoqZCppbVl4Xm1AZ19XJDlKVklAJCUwNUFUQE1Kcm4zPF5ea0AzfWpwbSNYOHhmdHJv Q0FVTE5gODFgcFE4SGh7Twp6VEJ4VyMhWjFONEY2PVFRcFd+PUFXSERKcFExKU1rNllgYmY7YGB3 QE0qe1oybUw3Nj1COE5ZRygxVWpFc2VHcSEKeldOTXheNSNfcj0tPjVXeXtnTXpEd0Eze3l5MWMt ajY7RVB0OVI1PlNSdEJASDhkQTM1PTIoazJveFFWcChDYXdyCnpMQjx6VytTWShZdWhfR2BEYEtQ M2omSDQyQzZyKGR3Zj1yNyktdGF+OyVmfmwwOyR6ZW1YP1dnYnFJZV5zZGkyWQp6ezUhPkhAY3tN SjhZVGVJNlEoPT5OazhWSFlCMWsrPUA1NUdHeW1LYUozKnJjV2dgczk1bmZfN0cwRmlrSzN3VHgK emsjTG8oN1BYOHRFZ0l0c1hpPUdIaTBMazcxYjhMQkNOWW8xNXtnZypQKjxlS0JNTllHYXVqcUBl NSoyY1UmOHBpCnp0X2xPUnUlYmFoYktga3d2UVR2fDZ4X289NiRIUCMxYWs1Vzd0WT9YXmt1UXhr Z1VCPkE9ekt0WDJyPDBeeDFZawp6d1BEOWgycE1fWnM4VzNeOUl2Ji0meEpIWndKPF48VjVTV0xX eWB4cUZIKj57R2QlTDdRfHZsd3ZAQyZZVz00RWUKemd1ZXspX1BEX0E2XiZKbUlNQHshR295KXVY b3FHT15zXmYoIzZnaj1pbD5eUWtMKX1AMm5HVUlUMm9JZWgwPGN+Cno3aFF6X2R0P0N2WUd8LWVE T29AZUxvajQlUHN6ODBmPUlvdntjfmdDNjNWWW5XYXVhZzJqTnklWSVSWSF7RyVFTwp6Mj02NUlU bkxWLT87PzVkX0ZNVmRNSldvYkVCOHs1ekM4VTxtOWBPWXR9O3d4OygpQyNTYVFydmRLcnleSmNr cUAKekJXaVB8RUo3VW4/N3U8fSRzemZAMW1yVXZDWldNUEVoclN1ZDMoIzVVVmw/ZyQoRDwqKUxN YX1UNXxaPDFTfkxVCnp0fFchLTtWUClVMUwqfiQ5Iz4tclVabihqPiFVIThMTS1YOFdOSjNBKmI5 bSozMTJUeVo7JjE/RktQXnFCKnR+bQp6IV87JVc2a1Rgd3pOdnhuemtgX1pgYGBfZmkxJWk1QFZx WSRtJk5HWTUhWEN2bSZrV35wc1l4bHZTXzVONih2c3oKenNnM3c9NT5TPlM0JHV0akF8cGt0OXJm SSh1VGozYm1EeVlVUCQ5QiVmTjMoe0g0SFAra1ZkN2NkM211dGJrKCg5CnpufUU+R2twN0Rebyo/ PyYoZTM4QkpiUFVxbmF0dkIxTm13ejNaYSprOHNaQlh0dzcySUNfTXQtcm1qTF8mcmg3TQp6IXte NDVYT0o5YiQ3TjJTMEZqfXBsayo8anIlalVOMVEofHxoJn5EN1Bhcnl6XjBVJk49QjVWfE8lTF51 UE5+MmYKelhBcmhLQyNxT2FCJSo7Vk9NMi1AbzQtYk9YZHsjbWA+dzdPaSY5MGhrcnM1S3A4QVdZ PjU/YG1BalBtMDNLfEFHCnpgU3VENVhTaDM7eCVYU19EezAxeXlnQjRuN2RWeE5LSmJ8Tm5pTlpz YyhNNm5RZlJ2dU1aXnVFUHZ0fUYpJXl5Pgp6TTU7cjtQITQ0TW9lekhQQy1Bbzw4Yz1LMzEmbzlJ VDJoNzwtfTc4VXMjbHc0ekc7KT5za1V5UjJVflR8ISprbE4KelV7XylUZTZXczw3WnAwYTVERV5s MmMyMn1CaEhqK2spckJGU2dGYT16M1BAaUQoTGQjODw8P3RLRV9YeEFhKmlvCnpASlU0cHVqanxE PVhic3F2RikjSnFvWGt9al82YVZ3RypYbzt5eDdxdGFoZUxZJn0mbUVpbU9OWTIxa2lNUzZ9bAp6 UiNBZE0xcGJSSU5UdGwrMTEqV04rT3Q+NyRIWCFUOGM+VTRtdjNQJXFeNCtqOGJ2ZzJYWDY5bUd9 bzZhXzxxfXMKekB0WEYlRWFGTDN5ZjE/Kk5sRFFtek81MjZSNFQ/YylDQk0rT3BrR3Z2KTR9JmNz YCNRYCpUe0h4WGU/fUVmRHQkCnowVWZ1NDdtd0hIMTRXSWt1PTRkeiNCUjxEcmMpazVXcktTWnBR cmZ+MzBuSDNCal9rczxvTz83SjBPdlk+Q0Vwdwp6MUc+SHAmalhgckI2Izw9KEJle0pZelFNI0Bm ezdrOTxMMVFMPEY1RG1yMSQ5NFo5QDZndnVzVl9pJk5qQWJzOSYKejNQUGBXPUtBN0l1a1RJPjxp YENlVUBjRT5lZzFrYSphd0pEeWxtJm8zXmJIZEBpbiQyWTlGKjlndj1BbiQyMDFlCnppfXNVKSVl cyZRQiZ4OWxlRXRMJU1Gcig4TlRtalU8IztZPjFhZFg7MG8jSlR2ZHZCcD4oZCZabyR3ZDVRdisp YAp6bjdOcjEzciozTmI8dzc3cCgyXkhuLXx5d3Akdzt1azFzUTVLQ09Cd2p3NEJlQ04mSFljaSRB c0EmQjJkejFzQXcKejlCZjs7d3x4ZU0zOW1xakBQZTY2cVUwV2p3YEVxcCQzc1QkaCZORn1PcFY5 eSR6RTZndGdiTXxxPV8+Y2hRV3ZKCno1akdGc0pSK0VfKEV5VzNZYXorVCF3R0BHQ09RK1ModkND UjNfNiE1KDAySH5sPVFMKE19UW58LS0pPEFyQEVCWgp6JSFgUlBoPFl1b2hwdzBMZyg4UiN1Mn1+ dysjUiFNeVgpZ1RDe3RxYzV7WkNeR3ctX3hNRjI2ak1ePzsrUjxMY1AKekpiU0lxUHRhb3pHQDkh QW9XfWsyeTd6JjQhYVhKdzhCSUY3Xz99IXFFI0o9TmgzSFlzTDNlMEdkez1ZSXBLV3swCnprO0hL Kj09e3RYXnY4MytgNGNWMyk7OWRyP2NFVVM4bVVFPEhPS2k8ZFEydzJXUkdXT3BUbWh9VTJwOD03 THxydAp6V0tFYG5ufFc7ITskfFNqZWMyVG5eIV5SUU1IQ2tGdX1PZXQmRnhmYSVyb2lFcCRkQn1n cU5VaUdJPFZFPD8lSSkKelBZVnljc0xAZ1FOVCttaU9UdEokbXFGV3J7R1N2dzNET3RBKF44QnE2 QzVnOHV6ZD8/bWAqZDVmfGtaWFB7TX5hCno8Rn1WPmx9TTYyQmEtITAwUVE1YTl9MTtKVCtpMFoy NUdqMEAmd0lkdDxtfEhqYHppek9Ie0omdnVNPGpWfGY9NQp6Uzg0TVBMXmV0MjFtQ090a3IqaH16 akBUJjRvNGxGUkUjSilabWhYZXJGTkhIWSk5NUFSe2AqUzNEbzZ0ME42cEsKej57PExiXzhKXzxV JiY/UDwmM09mOEdWUHxUNm1xQnVNSCN8cHUqJWMzZWRpWTJHZng7VUl2eFVoOUV3WCsjbjNuCnp5 ZmtmM3g3IVZRJlVPWGJLTVVRcVo7YDteezAyPjNkO2h4Yj5XTHV5M154PXJIcX4hbCZwI05RTClW YFVgaFNARQp6PmJSKTdAOVV3Rk1uVnQtMVFGP3k/aDxKYnI1aDJEP3EpekZCbkZaMD8oWGd3MVNC UC1WZCFvYzd+c0E1Sm0yVHsKemVtP1VUK19gaF94IyEleSo0a19EPDdLPUNafF5NOG9aIXFGKEl4 e2N5V3QzJCheNTVEK1FNfSRHaCVtP3w1YFJKCnorJU92K05gYmBjRWYrTlV1VFNYfTsrN0dvQmt7 UTI0YnRVcFMwU0M7QG05Wj5kdk8+YSQ4KUJ9UEBSQV9eMkQ2awp6YnhYSEMyV2hSWCN8XiU+YVde SDM9VSN8VUcyQ2RtR0tMREgzOXVeRzhoOzw5T08rP1k0REttJUJKJHItRHBvKl4Kekp0NkwmTldu SyhAWTUtZ2JGbypoKElYfWw2SnZMbSh7Rng3dj0/d1k9QXRyTmBYZU9sTlpRUmFhclRweiNAdHxT Cnp5ZnU3NHo/b0VDYj9SLW5XVHJjUCFCPG8pNmBWV3V4ZmNwfWs8UlVwQG42YlBlUU9TTnY4WUtv cXhhMnRjZj8rKgp6SSlTYGNSa2pyMSE9el54cms5dy18SDRPb0Bae3Y4PF9sP1ZIQitOYGFMQEpT KzFZcDgoMm9vNHViaUpNK0BVdS0KelE7VnZwUiVtTlMpJG8qfiQ7M0ojNSskZHxTUyhoQileTGxL anNmXnlSa2YzYFFuVFJMPnJ0ZEg3ZitgYitrTmEyCnpZamk5UVU/NiEhaUY8VWNEd3JCZDdscVpN Ny1ZfT9RdmZVKkw0UHZCYkY1WjFvRjs0alozMEErSFJkXkV7ZHE1Vgp6X2VnVSUwV2F9JSlsUn45 PkhRU21QcHQxKS0lPkhMQUheaT1sb0IoeUdMcUUpKzZXUmxjPksyZTtQPVF8X21Ve3cKej88Yypt bUd5bExMdnI9bGN9Pm00amc9VmZ6PEdBJU57NyRpM048Vj0xYFk+YWc0MTdnYyliKXVDOGxKMCVz WCE7CnooJSNPNHJrMX1TTUA7PWd3NmAwIWohTy1IX1M9b0FNKmliWWlRPDR7Y1kmNXV2KU5ybEtl WXxySCpvZyRfVngpeQp6X0xDOTl0djYyLXRieT5rOTdFRyNQSTBkY2NUaHckbSZSLWt3c0BTNW54 T2Zpe18lZklyYkc2N3tXdm8oK1A5KyQKenN+UyEtLVJ0ZWtLVj9QJTZfem9pQH14Ql90JFV8RT9O O0t9eiY+bX5FQHQjZDlaJmFNY1JJNzB4NSp8OXZLSCl2Cno4TDEmSDA8VDZUKzItajkjdElvV1pS R1opSmYkNGJQWEVjTkdCR2F5b2RqZSlJYms7TkM2PmoyTkdQX1B2bExlUQp6VCoqfjMyfV5kMHU8 ZzclJXwmMktAYStlNCRiUlhmJTNpV2gpSnAtSF9JVj9EZU5HaTBFbjJnYSRqO2NjSylCK3kKemd9 KExAckpMIXV2JmVrVj5uVi0oWG18Ym1vWmVHR2pUfGs5REdNazRxSndXSkZ4K3dxZFIweUYkZ2lf OWxAYzwmCnpfKSZzR3N5LTI+djZHc1Bqd1p3KWhLdk4zMEM1VXdLUUlpYzRvVlYxVGpwMTBCX152 ZHF1LVQtVTNDfmc+LX0wcAp6dnB4bE8+RF9FSCkmQ1MpUVY4fnxWa0pUVWxrdEFpJkFVTytOPG9K eUUzSjBAJVJLK00oXk1icmUzI3VxdXlhP3gKekUlUChxVyF8M1BYfjlVQilNSHF9cm5gWUdCN2A/ N2pfJDY8UGNFTFBDamNKSVM/bGh5d15gc1NAQXNSS3F6VTVrCnpLe2pHLXlERTtkKDRKQypeUWxv RUVtITdgLWgxTiUlRnZ6OXtDQTdhOFZabUlFVkVUY3V0bT9XdUhrbnpHcj4pKwp6c3N6c009alhk elQ5Rj10K2c0I3xHLXxTakB1eW59dk1ZeChYPCFNLURoUEZQblFnSjxqO1c4KDM3OWZhV2BhWloK ejBYX045KmheeWgxJk5DKHAxRXxKbnkhMWw8eCN8fkUpbTNhZzQ8aW9qNXBjTiNHQlVrJkdQNX1L QVoxenw0c2IjCnojRl5oUHtoNnJYJChCM3R7dkw2biVxX0VnbVVfUE1lUTlJVisyRkVZUk9QSmJJ VCYqR2Apdyt4biZ2aXs0Q0deeQp6JmpGNkMocG8+NCFxcEMheCE3O0lVMG9pRTRGTG44R14tfXUp MjlaenAyRURYQ0M1dXFiUnRkPGRFXj49KUQjdVoKenkyIzJ6d2cyK205VzxrdTVCWEQ2dmdxNGdp RGZPKWxYOHJ9eXZYMG5sZz1mSU4mKGAhWjxaVT5MRlowaVo5SXNCCnpfeVJmfShIUXh7ZXhhenFh d0M2UCo/Zk1HTCl3WHZwKkl2Wj9+em9hXzg7cWd7MmBJaU4tTTRxMmQwVCZ5fCpmZAp6aUg8b353 IUhSYmtSUGRldSFpVjdMMU5Ce05CVVY2OGFsVmhgeSspM1dMeEU9e1Z+VmRqQGo8cXN2KVI/UTFJ bSgKempsQitDTSZQV2FOUWp9SSRMakEmUT5iQUUhXkFfeXE8dDJxZWR+U1kjbEMkSnM2emMjezVP PXl0bXA1RVhFQmdCCno1PVRXM3ZkTHZgV1M4QisjU3p6Nj1reHhlYj5NO18lenVwI3p9QDsxQFRW YmMteT5PdzVoTVV1ezlucn1AREJuWQp6NmFIR2ROQUthNXs8PGNYSFUwZTVLKXpedmV7bFkxJWZ+ XitDRkg7b215I1o7e20rQnFpdzVNbm1vQEY5YiopMDYKeipzbTswZVF9PXNZZHFpJkBBJkM/IVB8 cyRXSXckekx9Un07dytYNE97TXp9REI3WjByKXhrJFA3fGlCZF9gR2teCno1UD59RWQwRHZkRjYt aGFiPXJjaD9CfngrMHxOdDNUWVQjbEBEXn19eyhkOGMzLXhPTHtObXpgcTlSVTlPVXJNawp6ZFkp SmlraVcwZV80MEp5ZHhkYTJUI1dHWjE0K3h1UFRMVz9jIXFiYHw2QD40N0RIX3l2TkpZKmV6bXRo UyolJmkKemowOXhlWisoZntVcU4tfGFATUtJJFUrSlZVUU08Uy1eKE8mcnZDTDdgNU9gPHp3U1VG NUhUMldCZytSMSZCZG92CnpVcGlpYU4mYE8lPCNoe3lue0h2TnN+endIbTx7X01ORzZCV0tYckBr dWFNNz56WGs7WCtLX2haT3pfQ15sc3F1RQp6U1lPTnVKb310PWFCdSpXTDJnUiVicExhKDRMWl9P SkAxUFheNyt9SEVHWDdDKHNQXzV1blJqVi0hI3JjdyUjSGQKel5RaDZRRHk8YmJnWipHfm1Lamcz R0RfOVBfYGhUS0FqQTFiWE10NDMxJk13UCFNdWEydExuYlV0R19QSWApJGIjCno8TWpUJk1AeD4o SyMkJiQ9JEE4VS1kND9KOT9uQV9JVXNFe3t2cnx6aX12QTQ2bVE2emZCdjhTV3xqJUxeWitSWAp6 d0M7JUo+cHErbF8qcF4lPkVkOWFtXldxJlVMPmppJTsjWFF6KX5QaTRPMVAtVVNtVjZ5bGBEY015 NnI2dGh2SlgKeileayExK3NuWT49QFIlfWd2JEYhO3tBc1lnQFNAaGxAS1AydHx4UFhiI0IoPFQ1 WUQhezt0S3BtKipjeEpOZztSCnprNW8mej9XaFpUQztQTzlXfSg0PiZodT1gem9ld1ooXm9yfm56 aTRCTFN3bm53c2BRfDF1JF48VWFlcE5leUhqQwp6UVUpRWopd2pBNlImVWQlYkFDeEQtNkotfEJ4 R2I1cHd+bCNMcWsyKUJjZmhrbXUrWThjZWpQcHhHbWN9JF84aTMKenNwMWN5bHx6K21CWSRsdWVg bVM0KSRAbGRfIU5SJVREZmtiR3JINDY+PFc9b098UkNBeDc3Nk4tVkcxTzJgQUAlCnp2O1UqIzhy TzFIYyUjfjsrZSZHcUdEVmtfRCs+SGxVc25JT2tBclVDLVI7ZnZXeG1JaF5VUnhpKD09c1ZYeXpk MAp6RjBaaDt1MlE8JCVZVXRFeiZvKil6QG5CNiM1JnJhSz5BVDxpJTBuTE1rMDgqMUloYmx6a2E2 OE0rb3JvZT5vaXkKenF4UU1FYDB5cHRfUUdzMSZVbUZPYUE1cktQYz1oZEJ6M3VLakBTOTVDYTNl M1lSbD1ja2kzemgmLXZzKXYkJXJwCnpXcWQrSCFLfmQoZ35XY291PE0+eWlyYj5jKGI/STFtWUJG V2xSRUBsdElmTXtjRXo/UWdwa1FsY1ghXzI3XnV5QAp6MHhEQExmYnZCPmAlV318X29JeEBCZ2Io dUYkSCZXZD9GJng+e15ifCVVVnc0XiZFT2hpbyg2aV4lfiF1YH4wTWoKekh8cWNYe0lneSMtbUAr c29MNzlGV0xrRzI8MWhqWmkoS2x9MCgkPHtePV41azw7MlRjY3oxX0MkX0goQ2NYeUdwCnpyKCNh OGZ3bGg2YTRRZzZAWmtIXnNuI0JDOXlwTVlrYkV2bmskdUBUbFVVPHRDTSp0SVJxU2ArJUBuNT91 Ri1Ocwp6Rj91cD55V2BiZmA3NTt9bEB4d0x2RC01dSpTKHB7RW1lVnhDd15hfFVlfkRSOCU/I1Nj OEswMVBSVD8oWWFXKzkKekY+cnQwMkgmOWdwJmBXN2RiSndYdXZhek1BJG9nemRweCZ2cnhDa2RV YURKOUQ9SkNfNyh3TmFmJmE3SEwhWUA3CnorLWM+dnZgfldLZ05GN34rVTZeVV90I0l9S3EkV2Y1 KjFHeWwqJFZ5LW9VZilAcFc1VW80aHZzNyluakR7Wk5wRQp6Rk1JP2x1cz1Hem42c2x9VjMzWDI0 V2g3Qjwtfmw/K3B5Mkp7VGNEdmFPMXpTY1loKzhqN2ViLUJ6I29xP3pnJU0Kejw2eDVISjEtMWpW ZDNBe3hJSj1aTUklVygzZmMmfUh1JWR8RlUqRyRHRHtYXnNYVEhQblNvcnF2bVdeTisoPWh2CnpJ IUQkUntFS0lMYEZ6P0M4YWAtRlEpUVp5bF4rYF5jcngmfntiSlQ/Uzl8Yyt1aWhXQDNOYzFgQyYk ejZjTypERgp6NmhMV2FrPD80KDVzQ2x4MCs4e1dZRHEoOzBsJEJgV3BpfFYrYDBCTUlAYUV0NShN cVJOOF5XUTU9NGZDczUpO3MKejcqWTA9PXtOcyZQbjNKRVl9ZFFvOFNvKmN2bTBObXFfMmJQPGdK fWxtRyR7c1UkUXktaSRDVm9uRHRBKExleyo9CnpnNDZzKCpuaE05fEV5fndAI1VPWHBxZ09AcktH UEVifWVkXlpeRl9nOVM3ckItT3Q4a1J9TURIUCNNd2dDc2Yycgp6emx6UE45PSMofE0+MytKTE9X PV5UckI+fGskb3h+QGlaX2FnR01HZzZyP1dHeFVPJlNlNT45YGE5cU4mPEZZJSYKekQzS0IkQUl4 SmxsPnhsJmk9T0g0RC1yX15QNE9yPlkjbVJgUzJLKT0/WGlwPmwybXVNaHV+PnVrVX42TEY5eC1E CnojI2dhaikkZ2FqbG9YeFV4eityKjR9bC09UmJYJDskLUBIYlJQJFFNSFQ3TCQtKGslXzc2U2t5 Sm5+dTRMIzs9Rwp6cGk5dy1gMWQhaGpAe1YqRTckfWdARTZSUVN6XkQ5ZlVmOCVIazVVP2M3KUAz PURQMjM/LU9QfCFDa2MoSE5YN2EKeisoTmorTFklRDV3UEo1P0A3Nj48ez45IyhZK2A+I14qa0NU dHxIJVdYKz4qbTNmU15rLWMxd2ErI01iX2tZXz9nCnpeLVNCX05Od3skYT1KSWQ8QEdmKDl2UEJk ak0hS3smPmxZU0tsYHEreGc9PSV2VzlibWB7ITg1QnQjSUduRj9jaAp6MlAxRH1HJDloQVFxYGRw MGQtPnVgdDNCWTEyczxrV0lqOE1OYGpPd3FZYDlHdEhvejwmZHQ5T3toPipOI1V0ZD4KejRXIVg3 Nj5LQSZaaU1SY0BtbVJuJW1MfWxlb04kR0MtbnwpT05rVCo0a2BXOSQhZikjMGVJczwoezQ9dGFe ME01CnpfaVV9enVBeksoQW4lUndRV0lGYENmKDtFYVc+Tkx1LXgzbEBJNmp+cUA/OFVzNiFuKkpV b3B9OW1XZ3tmNWhuSAp6Qzc+I2REU056MmBjbGxwaU1XcHZLWUJPfUdnNVcpejQjUj0xMmt1cyEh SWdiKlJ+UE9KazI4eT4tRX5xbVdAI2MKenR5bmw7MkdxWTJaQX5XZlM1KEArY0dgenJzUkZebnlN eHFQaGNFKj5aU3h3fFBmM0VEbXUlTllqeFRjZEooT2htCnpyU00jeFA0YCg/ZW42UVVtTk5QPUN4 SkAmVjE5MjI4V1hGLSVRdV9jTVFRc2tPR0RFTGAqZWBiWGMjR0xTRzA8Iwp6SHYxbT1KaGFFZHcr fiZsO3h0OT5SQ2RMQyQ+LUFsPUUqM1hnZkJuNk00O3FeQ2hrKmomZWA7Qj5pZXI7RWJGMSsKejts OCsxLVFOaCZSdCMpWDdWJnJRZXlrPkE7WHIkNnF8dVNOai1zZnIlUSVpcz5mLTE+KTh8WEB7ZVIo X14tYWJrCnpHM1haKDhYZkN4KGRXVjBYfUI7aWFuYyF4VzU4IWByZ0dWbFBubHZLZTFBTE9HSUF8 O2tLa15RaDlFaUFqNHkhPwp6ZWImKjh3OTVAemtBbFN6NjU5UFd7ZiVwcGErZWF0TnR+RURhPXJk WTBkN2teXl5aJTRrSXExPDhRa3F3KGBCRFMKentSV1Z1RlclZUZ1QmQmfSZKWmA+MUpUe2MxJDs+ dzJzJSlwdTZePncyfGxtJXtZeDQlQHl0YXlsNms/aHNPUkhGCnomdDI5QDFgIVleQytFUUFoJiNy YDtKVitDc2RkK35NOE5TN19sVkpHaEQwZDRFU2p1WSF2RVB5WVkzMkA1VD18OQp6NFhKazYtfXhx JXdDM0w9b2dOZTB7dnM0RThFTiErc1dZSVhkaCU4d3R0JVE/KnstU0U2UXwhKUd8KVI9SWR2eD0K emcmIW1SJEIoUjgyajcoYW53ISkhMztHRWU3NWB5TldHcWtDYUJieXkoTHM7M2Nhb1pYbnJySkQm dnwqezdLKFpwCnprISpFYD5XSFdHTXBVZnlSSXRDaFIhTUo4cG1hRFk8SnZQd0cycyU9dGZkTiVn LSZhMikzclglKGJ2IWs+Y3xsMQp6O1dkJE9gdlhhUGJScHlXbnJiY2glMyZgQFBQb1JUbFFUNmA4 bUI9OGg0WiZ9OGtWU0hgYWcod0lzX3lGUDNoWDgKejY3VXBrViZxcCVRJXwhYChpejAzVmwtQGNx RXlUYmlyfngqJXJiNFA3TE1iS0pKaX1KZnRhU2o4Y293N282dz9lCnp1OXZ0O3JwPFhOKU0waGk3 dGtWYjM3Ml98aj9mNXo4NnlmWiZIbj00QnVLfjRjT1ZeQiV1JEN8IShTUUQ3KkFfQwp6VjZ+KVc1 T35mNmh2OV4pYiteLWthe2Jzb3o/bUZuMShpeWpnckJsWipTei1lKmBMd2E8WE1+Sk95N2pxb1Zs TXgKenReYT9wZmBAPmc1bGg/QElTZjhMa2QkMUd2OGRJWTdneFJiWlFQelc0UiNKTDVzbXppeDFF JnpBN0VEfF9TZThpCno3RkcqVl4hZ1g0S1ZXZlgoRlpGa29HaDhAfDB1eCowUlotc285VG18fDk0 PURfayREbGdwKmd+S1kkNCs8d25HUQp6eWx4Nk9RdmJiV19+OCR2VjlqKmkpe31vS0d9eDg8RWpQ ajZiQnkqOEBOMTc0V1BAcmRESGImVHRsKEZ5Q2A4VU8Kemw/Vk1adDQ2NV5Nc0o0cjU3d3JXVXxk K0BSI3xfUEVnZzJ7WT58ZklVdmozaCp3bXpVbkZsPyUkcEdeMyl6NWU4Cno8ajxoRnk7QntNdCRa K3A4Q14hNnYtTTYyNnthZjZkZ1MtUjdjO0cxXkA4fkxfP218ZHszMzZSOHZjUEhgMyVUNAp6MnNw MWM2VVpCaEQlJHNEZVAwT1JrJHc4QSZoI25xOWltaDFXKTEmNHlaTmREVn50aE9HeUh8V1NleWVo PHNJcjMKelZtPDhXWUh5dnBmaFNONTt9Zng7eH5HPik8blhndFBANzg+SXxrUiFlfn4jYmxDJTN1 dnQ4KmE2dT1OSHdZIWM1CnpYZHZeRy0zQ31jTEUjUX54TzQhIWxPZ1RmMEI1Uj1ldU5BbGVfV0NP OCg/JXlHVy1ycGB7LUhaRnZ2bEVRNHRkbgp6JHwkTEE9dH0zcSVYPURnYmpRdUR6TlpFVGQ+N3FA KmwkWCo+ZTxBWVNXOHdHRWRvJjdVYV8mK0xiR31QcjZWPk4Kek5NZDRRSUYkU1pjWHhMJEYpUX14 O3x3dHZBWUlfP0Btd1E8PHFHMyZNYXF0SCpoUkExUXtiQk4zNlJrQjgwaEshCnpNOzBBbWVZSClH amY2cUBNO21FKWBudyVPNF4yWFJ1Rm5MWCZGfjY4OTFLe2VzZ1JPP1kxfEwzYjZAUk1rSndIfAp6 JXFTOHBUaXoyMXopX1l7IzFgKUtvMUUyQiRDJj5yKiQ7RnRNR3k2P0kmUT4zR3l1K0dgfEJmYz5D KUF5PEt0cUkKenRxMnRfd0FwUkBVbHNwZyNBST1DRnt8QHhPfGRaREZhY25xa3AyalF7TkxvSWR6 Z1B1N2cpTkJ7YDtFX3d0d192CnopUn1+MiQhNn0/cnpLRjhaYlo7QChfTndIandWOyMqTEVVSHVP Z15WKXM1USkxJUlOPyZYVCNwMHFvfm1TZEFgNAp6KmlAY2Q3MVZDKUZOPiF7V3teUiQqejI0PEdW YnZsLXIrNUE8NjFFP0xeTCF9RXM8eUtRYnZsSXpmUFhMX3l7QHcKekk2aEBzY2ZJVW1iOFF1bmRX KWAlUm8qZiFkRyV6czk0KX1ZV3w0QXgrYmFoZyMlZVYzbmlGYGB2eExae1d1VCt5CnooUD9Scig5 cUNwNEEhTWpKKH5Uel5KNXw5ezRCM3RzYWcmRThIUGVKe1Fkb1JOQGJOZzZLcDd7P1g2KWZEaWJF Owp6KFlEI1VKNjhINSN8NjlnIVZlWWpCV1dVJlRGIz1vZjxnPlJzVllFNnc1SGsrTlReMm48Umx6 LVBWaSNhe1hsRHAKenZ0MjAjSkowYjZhVVFnKmxHREtJYkNIXzlkYSpBQkwoQGQ8eHxzdXNMQ1gy ZCVRVVFmO3R3QSp2TlZSdHdPfjZmCnpSb3V2PlhgME9LKnVCdmtuUlYhfkExM1hpUWA+YXsqKWNw UjFyQWp2NCVBcGJ1Y2JBRnl4U3VsKDIoc1Njdndpdgp6WHZrMUx1akdEYEt3X2ZFXjQ1IXxPfEpX KWE/dmp7MG1LeSY4cm9HbVo0ZEA8WkVBXnFwajF7Qz11cUo+Q2lCRjIKelljejlmclpXMzt3S2Jn VWdVVzwoUitKdGBJeUUje3lJVUFxMlFqbm13ejk0MGFBSU8hOD58JCluWHF3UU49IWBUCnoten0r cjsyTj5IZ0M0KVZFJUAlK2R+UGEkOEc0UDczZFVPKmlaVkFqbX5Ud2Q2WSt1OG9kPiF3R353JDlQ dW5tPgp6UVBhUW8rcEdDbEBgVD1lO280PVVPXkMzVXt2dW5ldyRJZHpkNChaZ1pmPEpENGgrVj5Y bktPUEwlMzUoRXRBOFIKelo3ZVcxUno+MHBYXlFgbTlZYWlidEpWQ0dqbXFOKzM5JGxjSzM9JXE0 XjcoV0MyenlNYXA7VHV1LVg2RXlvUz4xCnopZlJDKDg/Q2hyO3JJN3gkelIpQmtOOTN9WHc2Smc/ KW9aZG9CQ3tkRTd7ckE+OTcyVllyIXNfdkpMM0o9cWBpfAp6dWR0KndZSDFCNT1EOVRaM3B8SmN2 KUIpO259JFFMKnU1SzxaK1J0e2BWRylhczthOCQ9I1AyMkAkVWspMVVAP3wKend1V1dvSzxkKVJj QEpFNzszUXZtOEROWGhoRHo5WGZjP2NfaXUlPW4tcDgmaDd6JkF8SUh5JCRMZD1yVjNeYX14Cnor P0k/MV5tenBrNiZIMXYtIXsoRlFCZ259QzBFdWF3X085bjFGaGlBKzFpMCkpbE0+RF9saEVnYSYh YDhDVnNgNwp6IXJkWXFgMW97XiphbHh0ZEFVb254PSMpWD5uZTZKPjk1WGFZQjI2Uy1xPXhIQlEy a2VTWFF1cF8+RW1FNjIyeEQKejZIZndOcFhvUjlqSCh0S1pIIVlxezZKKjY1N1R3fGxMbkZjT1pZ eSZmXnQrdUZSWWg+bUt6b15GSGI4QGNIYUpHCnp2WUo5OGYwVFNZIVlBNTYwKFFwfmtyWXtlSGp+ LTVNMFptezxTcE09OE56PSF7V05mK3ctTn1ucVNMOWBtdD0xagp6dERuXl5eR2dUYzZsTnZ1VjE0 eyhwM3lRczkjciRCcVhfKCg+UmJUMUJnI2sxVGwpK3p0N1lJRiRCI09lek9XQD8KelNvSEpUPCNs d2tfMiNDWGNGQURRPUBgP3d4YG5PeldAPzBwVWc9RntCSHYlcGEpSVZTNERiYVZ6Zz5DcV5sNEVF CnpuMEIoKyVgVGkkO04ydG0mdTlrTmElWEAlKjtHaV9rOGNKYkxxa0tMZzZ1ZzkzKGtufVg/V0dw d3Y0QFohOGxlcgp6dz5qUitATl8+YC1UR3lxY3xgez57MUVfSSRNXjg/a1o7V1JlbFZKZSFxJkVD KHNUSnU2YVM2UUBfUyo2Uj9YMHgKeiVXJkBEajwxaTFWdHlQMDNeVHhzUlNkb3NqZnNjWHJeTDdM Xj5XYipVbiZTa1pENnFkP3dubF9wdSFJd1Zqa00tCnpYb1BuQD8raVR2PGNDVjVQR3N3YXJWbVBu X1NRZmZ6OU0hQXliPztLWmtwZCE/USMwYVkrRWZWcWhlRjVwVUJORQp6NmQtd34lY1JYY2t6TlB0 LV5nQkQ1YTNiclhGTCFxQkBmdlVRe0FfPGopIWBCZFROZHdOWSRjdSRtKF90KWF0fEoKejhIPz10 LSghUFA8ZFpTTWdpSjFGQTVSb31NfCZyNlpFMmx6cTtiMUhTaCV+LT8hNTJwbVJFXkQxWCY8QyZB ejEoCnpTYXNfTm53Kj5gPXlycV5wSCM4NXomRFpgNG57X3AoWm1WTVp5cH5QWSo5MEBOTGNMSUUw WGFMcWA4Pll3QUcmRQp6d24pMHorVEQ2LVB9c2YySU47TG4kTylfejx2USRsREFmNihpTDEjczc8 O0k3ZEV+KDtkVXJgZD1HMU10TGpyUU4KenRvRTJ2QCZCTnFGJlNacSlVbT4oNjc7bkVOU35EJkpI Mn5DWC19VTQoa1pwb05ONmg7MDV1NGhtWCZ3fUhjLUVzCnpFQEM5eEJebUo/JUdIKjBobjNibCtA RkdqI2RMbmpefFNyZWhHcSRuT1k9Wm03ITs5Oy1VJW4mIU9XM1ZSOCRGXgp6cnMhIyZKQiloXiZD fkJkSjlfRSNeej1zOzdhR1dKYHpscitaVzBwNlR6PSF6OCZvVmxiREt4JUJpOGVVdW02PUwKeih1 akJYbWJ8JUxfaClsa0BGO2sjI2gwJHlPblItUW1mQ3pLVnx3UTcrOU11bnVYfHNyYzNrZEVEeF9B a3N5alFzCnpNbio8biVoWldiNXJ3MUhGU3NVV2lKMSkkSjBIeEc9alBAJXRqRm5jZmJZRU5lX3NO dSh4TCh9eitDPWI5JmAjYwp6cmdeVzI7PDVMO0YjNFNablY1S0ZLaygpKUNrX0tORVNgT2RUPVJ7 ZyNMJlopP3FDP2VuVUo7dE4qUEUqTExhQSsKekRvRkFtdHFjcEZEcTg9a0xjNmBXKUV4THFzYG5Y YHpnNjUpZi1+OCs1KXY2MXRhUU0kP3I5SEkjdzdMSyglQlN0CnpHPElkJHhWNkxNLUlFS25Re144 e2NJMTQ2eUkwNytRNjRCU25ZekhQSVhUbUU7eChqeUM0eDBqSmhtSUltTE97Twp6eEdTTEwhfGhJ JEI7eDNuKjFPIz9SamFOeDxVb2owOWc1U3RWPC1BYFZJeiNiZFpgUVhSOHo1YWpTMSpRa1Fha2wK elJxSilAPXpYKWBOU0h3NHo4eyFSRnVyZkM9T098MjdJQXhpalcwa1h4Qko5K3hDXiVkNWhyQVM3 dmxTQk5XUWJuCnpXNjd4ZDtGYiVXSilHWWhkSDVOYTZrIzNIXitBakM2OGsrYFp3OGsrZHRBdlom ZilpMGlqN0FtJkxgfjlkKG5IVwp6cE5TcnJWU0FBNmM+T1BGb1dgPVJJNDA9QDU+Ql9sXzckXyhS LV98KzE5cFFCY2w2VmxoRl5uP3c4REQhREpubmoKelZwLTNuTXxfNz1IVz0tXlA4ckxOZXdYLWFr Y2pzX2d1VHJtQnQ8R1c8YlZAMS1hcl5Gd0pUc0ptSSNmdzlhWm02CnpXYT9JcW1mbk1jX3ZRM3pE RTVlZHVALXorbGRaUWFtc3cyKlh7Tj1TVmBJS0JCPVEocTs8Z3daOTRZcHg5akB9ZQp6KiVMTmlU cVlDR2FoU2I1P2U8YW1GWkxxeipIOCFUVT5LVSk5M14hblE/bkxXRU8wdzRycGokYlFpflpwUWV3 ZykKemg4WCg3PX5xYCpjY31TdzNOei0/TFhwcmBmcH0zfjt4TWpWVi1ifWtJR1BxWCRrdlF3WD0o WCtJOTArY1F1TytqCnpmelNCfEoqUXRoQkBqVCtSWCRmKilGeyEpeXczRmRsdlI8KClpRHhHP0hq X1QtJkVrT3YjTXhkVjZnTCstaGIpfQp6WGp+UHVubjZOQ2BYSVB5OV42MDNKKElzaU1sQHk3MS1R bm4jOHFUbVVGK1R2QipAWVN6KVZ6TSM5fn40d3t6b0gKejFEXm4weHZUY0ZCU3FnQ1VeME9xcEBl aHlDcUo5VT9nKmF8bTxmR1Z4eFpud1pDSXNzNCNqKzUhcUc3RHEyJV9ZCnoza1J7QTdfMnR0TGhD RSEjOHBMOXp1WVRKe2J0ZnMxIXhSbEQ9JWsrIWtXWCYyQilTMVRYRmg9WnhvJko5SEk1cQp6T1ZG aXZQUkZBbmU0UkBnTEg5bUtQZXFzOUc1TUM8PkF4JXRNI1gpMkZfNnBXKj9TNHlzN1c4Uz45Q2le QFQ2ZkcKelpCblR6UXEjcCV4I3deVy00RVpoVkk9ZElMUFpWZz4mVUk2XnJ8b0dZPUo5cW5qamps N0ZoWGM+I1B7dyQ5LUl4CnolJT5LWUpOd2djJkJ2RWZfWDM1dzRiSnB+Myk9emVxUTNIY1hkfn5T dWxYTVNHflUxZz9iRzZra2hOfHJzJEpfRAp6dWBvaSk7YjBBJGF8SSNKMD4zdEdMRyZAV0E0Q2JR WX0jc1hlPWNEPSptfThHN354ZSNGanAkcEJ5KmlEUlVyMWMKek5NU2BnSGN9d24jfispWFpObStR UW40TkU7bDJ2ISRuWkBuRGF9TnR4QVA2Q210eDFIVyRAZW0yN1g+bD1GTzJsCno3PChSVUpOUysh NEx8dnN3VXxRbi1tRmxnV29VM1FJQ3N+dFNRPUBqZDBuPlVXSjdQPmVmcDRLV2ZLeDBfdmpVNAp6 eCEqNGFnNF5wcEk7VT1COTVSUU8kT3xGXyVhaGxVLSNqbWR6NSZTRmV0X1VnPUR3PHlXKW1BUDtx M2ZEJWJQejYKek43QWFaUElMck1EMyE7OEJKY3RZSzdUSCVOYHJydi1mdnJJXkojV20wJCo/RTFB WF5JVzA3PiRmVXM1YER3WkpYCnpCZEIjKVI5eUQxRF5YSXppfTd2eD02ZW9qWUN1PFBldGclMnww X1U0JEd+SHFnZyN9UCRHJGBnP1RjSV4jM2oyYQp6K2cyZXJLcHBSV2g7I2RGdHFOTDVURU99NEcl T05+JGJOaiteTm9zX2k5MlEzTk5eR2hiaS1pQyt4fldfPCVYKXwKemJWS05CZjshJX5wezJ5K09H fEFMeFNZUnRiNkFQRnFQX3trMEl8Uz5uWUdtRnJWP1kkVkFMNiE5KmYrdTRmNGQmCnorczxiaj85 KChIPlEkOz0zTyplPEQ0dkMpLXM0PmdwQ1NMP1d8TzdGVFIhY2J2bWZEUkhgYzt1UEJZMFVMaEhI MAp6P2IkO1VxeEJ1TmNnN2JPKkVnaTJAXjNLa1FQVlhEc1pCb1ppUk9BSVAqKiZfT14/fExrJH5s fHhKQGc2bjBXR3sKentgbHNlSFp6T0Rwa2U9fF53a2R5Y0loanhSaDd1TEt6LUJVRjI3LWtBRFIo Sj0xUlNfKzxFPnlPfGxxOTBxKjdLCnppbWo5cjQweTRXRyMlJCQqMW04UU4qMCMqMVFlQHJlfDNm ZlEzKjFeJiF9eHpPRDFSRylMO0Q8cX43fkBYJFdGcgp6JWlBOS1UXmdNdjl5NjYmKXJlYD5kNXtZ SCQ7fD99OCtFM1BhS1E2fj8wQER8bXoqU3NUaTtCO1dAN0NARCpANygKektmR3dgYHojJmZ4Qlh9 Z2l3bXw/KiordUZhKjdMXko8c0NyZm5HKTxVel9UMmM9d0M1VHc3d0dmNzRgPVplZFdBCnp5b2tC cVV7TX5iMlBWcD40cldhb2EpPGRfe25oUmVZRX5NP2AyQGk/UkNxeCFwM1J3Qm0hVT9GSzc1WURE UDIxPQp6aFh0d3FCWHVSK204UzNta0VTejUjWHA4SkdQelpHPGxlRnB5JnVyXnh9WUVfYmxQenVA aiphaVN9Vj11JFIjaz4KekhVQjE9KHZgfUkwZFlBYWxQaThNYTtgXldBfUlGIXhrVCZJcFF0dkNQ X295QnlKfW45JEZvbzRiTV5TXmdrbT5JCno0YUdsQmJLNVQmcmJ8azh1Xn0zKUlqSW9zX3VhS194 OCN+QmUzWlJ0anJPSTJVcXxqdjFxYiRHdi0pU2dII3pZKwp6Jkk/T185aGZOcWd7YTEkNDF9R2la bSRIU2l1blpCPj9eMU55XlVJezIlMjU8dlQ4Vjx6fWVgSnVwP3pRd2FeY0wKeiVIdCZwV19ZaUBt ZU5rdEA2QHdwa0VSckJFWFMjLUAjUCp6dkhEM0kmN3VAKkIrLW9lMlI8WUhDd2V9TU9FZGkwCnpz T0JSdVRXOXNSVCFSIWhmfmVMVEk+b1BJb0JjOUU2MCtaOXp3S31OQlR9cCNyY3BEQ04+SE9qZ3FU LVVSPHhLYQp6djEkKXxMbW1rcm5qTjBCNi0+WE1MXzYyaygtUXZoRDd+ZlpSc0E1SnRmYE50UzBK czlpRFdfJUlXMWklKD4/Rn0Kenl2KGx4ZnZAdlY7WXhkMjBuLXo4XjE9JFohdCtjfkRHZSR5O29n JmRTIUskUmNrZmNRc1FlOWxXTU07RkUpQlFDCnomR3d4IWc9N05POUc8Ul9fY3JxVD5wSz9nKGM3 R2MkdmhGYDJedFIwPkBPYipgMXpGcGpUVEtEbzdFP1dyPDg3PQp6eXI4RnA3a3l0JV4+WEtyTFQ1 SXNpTDZ5M2wxRiUyS0YhRFJFKV5obXJiZm5me1BycEZURnVwQSVjLSYlPE1mQigKekBAXnRGP3pR MDRFMVYtITFjKEdASnBYOTJySGFrK1U3fiRsIXBMIW8qRm9iemNnQypKNnVxSE5NbHFyKHBEUHlp CnpCXnlJZDs3SEVSeC0qQ2ZoMHNNck1FTGBhO1p0Xj4xeVRxYlRoe1dvb1lmU0VDR01ifj05dCRQ MkAjcmAtakwoJAp6NXgteldtLVh8Z3QhY2FPO2w9VyhzbzNhZUAhcDNaZFNNeDVnKDglPGNwcXhu d3RsbHhFbzM3O3ljVyhVeXY3czcKelNUTG5pdHpnJCo4NHlMb29zPnRUSkNYaz9WaXQzRTgmI3hT QHs3dXVKbTUqYGlfN2tiQyVsUTBNa2E+eCMwcUFiCno9KGxvRzxMX0RJaU9eWEZCOSRqZzN0YzQm K1JyeiRLVzR3O1QrN3Z3di11ISVFMl4hM1h8PUFpdj9mdWpaYiVCdwp6KzI0a3Q7VHV7Tl4oIT9N emZAdit6TmdgeSR1YCFpPyQrWkw3U2tSai18I2x+P2x6ZE5PMkolNzNxbCZIKEhGSVoKenokSjdf QUFMMkNmQ2g3WG4meEc+d1M5Z2tkXyR6P2NEbTV1elJJRGQ2QjZndDdNYiUyczV1OWU4fWJNQUBU JWwwCnowflJHMkxGemMoXzk3LUd0e34pK1pfITw8YWRtcVl8NTJyMG5vYjVpMTRIcSQwNkxzaXlH NUVjKEY/dkZQZnw5Xwp6Oyo4cnNga2xCU3l4KktVZylpVDRCU25QTzFNMyFXZD08RGNSVTJZJCUq PCRnMnpHOWVBaVNpQGFRaX5hU0lZV0sKenlZJDlFXzthc2NGJllee0huUGkpOD1aIWtUajNtUCNF KHZPRmpGYTJpZklKYSQ9SSNhVzlfJlU8a25iOGFULT1UCnpyfTg7ZCVrQUxrJWREc3Z0c0pjTEQq TzdRJDZaeHhpYjM7aVltckVfbVJYSUJjNSEzQklIdkxXcyV0JWh7RzRSKwp6OCR2SlVDT3YxS299 ZV9WZlohUi0oYFk3eE87I2hPKm59e29IfUZzWUZJRmt7b1d1S1NIITZEI2wxcis0b0FRY14Kenoo dXN9LWteeyNBdjRTdFhgLWY9PGJ4QXVTc1NLdVhUM2NaUyNyUE1YSUNae1IycWQ+bnFYOXBOXkd+ WFJKMHpwCnotUDtgdUpHdzBkcTgoRDw0Y2FYcUc7Uig3bi1ZMCUmY3BCWHNxKVckZWY9Qil0O3d1 aXJ0NE0hcSFLPENaUnUxUQp6TkpNUHFQcFZXYnlOYzFtWEhGSUhmWlNJK0gjOEZgZUslcGV3dFlk UkdIKHoyNTVWZWBkMmVtbjdWKnA8YW9YbD4KenJWNj5XNXt4MFd2UUlqRChAQmo1aEMoe2ZjKnVX Z2FjfmJ4RTZCPWc2T0syWGNOPzRERjNaMDZlJVhHSEpHSnlRCno+TDxvPz4+R0U+QUxCd01KKU4p eGJId2ZsRVI3K3BFNXtUYyNmejw+aG50aH1vcnR7dj9jdWs5cSkwVmNMSVF1RQp6MW83LV5iYDV3 MnZkXitWaENTakR3MyZRJlojZSZDe1lPMjMmdH1PVkRHbzlwMG9aWWdAZzM4TSpKMU0kcGd+dVAK elJWS0cwM0BjZ0ZielQ8YmktV3kmaXVfJCh2YU10RVcmPEtwVlc7M0w8S1E5cS1zfGplWF45LT1l VDhDaF81TD0wCnpCZ0ZKJVBzWnBGNmtCdU8wOCtZaFBpJG00SSVxIVolYU16PXBVRGh2ajcySk15 RHNBUDw8STtjamMyTEg1I0ExIQp6bUM1I3gjIzlsemIpS2Z7R1cpSn47PWJUQS1IN20lJUd+eU97 az9eQTF2YVpJJWFDbU9sfUYqcCUySWlvfDQ0bEsKelliaVVUSUpQOTlVKzthOEB+IU4xMjBCNiUq PklgcllmYngwISNuP1Z0MGAwMWJ1RipQOW9xKHIhR1d+LTZSK0EqCnpfMDZLVHVYd0V2Sjk0biZM N35HZy1Sak44VGU+KUs8IUcjbWd4UnhlSmdUNUVrPT4pfGM5SE8wRF8qMTE+cSViNQp6Nkh7V3s7 KUg+cy09N1hmc3l7cV9FZ0JYfG0lT0IhPy1lTVVTWHxXTEp0ez1PUiNjfnRNQmQtbkA2ZXc+SHxC NzkKemIyWWJRKmNHPVFTb2Q+YE9aY2lJZWJuSmRqY2ghOTtXUkdlcn5aVX15MXZRJEN3c0BPUE41 NlRfcD1wSiZLIXM0CnpwWVJ7c1lfSH5AaWdwOHVDc247cS05IzZ7dlIjS0UwcG1ePHdCcmhLe3pO MGZneTZQYUpqTHs1TGYrWkNyXlBsVwp6aXthI1VyVkZrY2Q/dFEzdVc4fD5qO3l7MHUlNGs0YFE2 U2NOOE1VeXcjQXp4UXcxKnlwZkp3Rj41bFp7JDR9MV8KemJyekFXYnNCTmZlVlE8Sj51cUV6YVRr c3BZdTw7ZUQ1RlhuRXhqYkRyVUkyMDA5bHo8Skgwenh6QlVENnlATmduCnpwWWpUa0RuSmApcnVY MERHJjFYKjspKS0wQW9HSnZYRUYxWCNjeTZVOFkrcDRyTCkwU0h6WCpybVhEQW9WMllsMwp6S05H TF8yJCVKY2wmU1d0c3lvJStzcH0hSy0kWGRKVng7S3gqRUNXX3Q9dE51UGA5ZmolY252XyhCPWIt V0B7fFYKeiZfPDQ0YjhYR2diKUwtPmNaZlY5Vj5jVnpBdFJeR1FgezVEO0ZSYEFSamtBNmg9ZTx0 V01XaEU7UU5RQ2YkdXlSCnooaUp9MS1EaGZXLV9eI05VNXpZSk9ESml1YW9LcGM3Z1RfSldGZ1E/ WXM7aXZ0d1RZfj40ZygrO2Z3ejBoUnAtfgp6c014NGIrK0FNUzkmPyRDen1wSF51Z3lJT0Rhb1Yp PDshJGV8QTxfJTtRVl99Rit0fkgye1NuKUU+RkQ5cXNscnoKemt6NjcrX3koQH5QRV8hNWF4KnYo QjNKdUw7VUpWNj9eKHBxLVd+dHVwOER+fkhhO3czYkhhWCt7eXhDTDZ1cFYtCnpxRnxNXlJHRHtm KFgjc09QWEI+KnRLPklBQSR+NkVPdVQyTz0qd1B3ZFhYNV5hMTd0cFd2U21XQnc2YjEwbWxKTwp6 YExwdDwmMTJGXl4jKSUpZGx8U2pwZ0lybHVVQD05bm9jbD9YS1Nucj8hWGZnSXVUQjtqMmBjMDRm RU1icEUleSQKejlhKVlFRUFMJkNBbiFrakY/O2p6ejVESjsjJkw+ZHNtO04lPjJMP0QzIzBvNkhV M0h9VU1oajZfTHF9enM7aUJWCnpOPk9kMEgoaWRAVS10R1dVcmEqZFEoXz4pJnVGXzxhfDRyKW1r KzY+TXYjMmUpRDZCQWVPMSkrb3k9WFA+XnVfPAp6dXBqO25JfnZjdlQhSEA8KjdOKW1PVUNgR2VD M2lYX0lxMlhBTGQ+Kz5aOzx7WXFFPXlsb158MFRoQlVeIXRYN1EKekF1PzJkSmFiUnhWb2o1cjRk QT5fKzZ3aVFNdnxLdXU5TlQmQmdjSDN1Wk8rMWxBX0NiaiUlSTRSdEYyUSk7MjM2Cnp0JmVBI0pK VjkkSThwMm43MXdTRWNgKzF+PHxaWWlneUpQZWFxaGhwckNWNWE7clp+WSFoQHpaWjxLNENgK0xf PAp6cT5ZQV4kaHB5PWZ0dGwtKiFsUG0rODc3enE9KnNvKiN2JkNhZiZNfmd9UkpfKEtHdU5hK0Fj bUtNfllsM2FZMjkKekdpeWcrYClUMkNMVGZCX2x4MXswS2sjTm9PT1pXTjg9KClJX1FpVXM4Ky1u T0lDPHpCPytTTW5KdFdAJGtmPFdLCnooS3Z1YzJXP00zMVFKJEVRTiMqMVQlMWNFUUlWRjVDdy1E Tj9wIXEoWXo5Kn1NN0g/T0lyaX0qOHx+JFhuSE4yKQp6PEJxJVZ4MTBmZ1BJaUt4WmMocTdWOSpN UiN1NFNlcztLezNgRkBUcXlmPkdaZEBNK3I+bGNTPigzZz54XmA/cHIKempnJWdTTD9wWHRnNSlx VUNQcDY7QnRpPXo8bVJGUFVIUWM4Nm91OTc7UEp3R0dIU2w4Rmx+SkM4YzxaSSp0UHRjCnptLV9t TWVWYiRpLWE/OD1GNCp9aCYpRUlvbVZEfWx1bDMrbz1Pak5vOTIpRm94RUMzamQ8cG0zLVloQCRz ITRBQAp6RDNeaDVBNl48S0VlQFY7OVNQQEs5cTlDIUFLc1pNUjc/M0J6TDk8JHcrckZRbjBJKXp4 QTFNfkhZNj8ldEopWSgKeiFpVzZiJnM9bG8zS2klNng4N2BRJHRDZnp5YEAxfWw8RC0lViUxVFVZ SWhnNFlDMzBDTjU5Qmx5WikoIUBGaXdYCnpJOU5faD0kVHxzaUlzWmB1KEB0R3xCQmpMPTt3ckJX fWdpfkxKfTBCS3lxP1FJQlBHdHVGWXdCSCNDbF8peTx0Uwp6dlMzYV5NNHF9b1o1MCplcyZmO2c5 KEBtb1puOFV1JVIpPX55QE9OcG9+dH1Xd0soeClHTFMqJWVyVHZCcSMwfVQKeil7VWYle3l3Zyhv fHdJeCZ4TiZqWTw5UHFoKylFKChPYlEtJWw7dHRNPzhJM1B4fEMkQWVKWElfWU0zc0c8Wj5UCnpE UHB6ZTxjUis5YXBXciU+ZU9acD5ifDgtKnMoRSFRO15sYiVKWlE2KnExdUt4JGtPIVZ3c2p5eHRw PjVeJUc1fQp6WDxFTD8lV3d7PXJkTSFeVHZMTkYybHdfalJwaEFfVnx3MV87SDw7LVQjTCRmTzQl MStySFB9PnZFIVgpJSNlO1kKemw/KXt1S09nRWEjfGp9LW9tYHE3NTxSRDVVTl5BUXdDbnNfUm81 S2NNK2dVcGRWMDkpYUh3MSRWb3ZYQnFZUGYtCnpWWkYwLSozIXRxc3QtSFFFM0A8LTN6QWZDKkkk X1haTWFFR2dNN3A1fE1FOEMjYFYqU1I/SEI7emFRfmslemx1Pwp6R2xzeSZOUTRCeSRLTz4oOTlf SmJOIWpjVHM8aW1TTUBKVTshIUd+K2JTNlR9TDRrc0pmNyg5QTxLYjhmSSVNQ2gKenZUYHBVZWFo bXNrRCM4PWszeHsoVz0yUCtKZk9DLVMrRFE8eGl4ZXZoVWVrWDhCXnI4R1A4dzIhMn1sdjdKWH5l Cnp1LXVRSyUqM2ImdH0wSGB6VTJ0TU1TSEd1MDJBMUZQK31wYGV8QDtIOGcqb0F4SHtZa1c4UVIr WFY8dys4NnAjQgp6Mkl+MUBBX05IX2VNUVowdDJ1PTZ7bV5ON0ZuUjV0JWJaT0U+RTR4aVg9NmEm IVBPbmZLe2tmSUh7TXVkWiRMe1gKentaQSYyQnd+cEUtWE8zcE8xeW1QITZtVWB4cDdGTnU0ZENe Q0txcX55ZXYkRkBnfmN9OE0lUkJxOXU/KlptYUFTCno8ZXlURzJBTHxvS21QWGJTY1BOTzFnPjZZ Nj1ITm1rMj5VfFc7TGZIZSNFM00oZn42SDc+O35ZP18lTVFKcU9IPQp6JVp8UVR2aFBSKSh2Sj5j bWhTNkAxX3FEXlhIdjtMdTtFcCkwTy1jT1FyO1VGPlYrNUxYaFE8M3J5SVlWcGp5bXAKemQ4LV9F XlllUCkpTThXcyNHODgyaz59XlVTY2pTd2QleE5uSGRialdkJHU8PXBgQnhNZHNKXlRPYmtwQlYz WilCCnpUP3laLUNpa1p4X0xkYExBZUFgbEReUD1iNkNXRkEzPCRkb2ZDKCY+YjlyfWRPME1seGJx OHJpQXBMZjZuJVNjYwp6UUhXQEUrMSpIWkAjMk58d3Z5fE8ybio3fjltSnkrSTE4TDw+KzBAKVRF RFVOYyMzTVhvbldoPkxDUn5sNyM/cnYKek9UTCo3X0VwQH4yTEBOJGJOX3t7PSspakcmfEpIfCtQ eDN+VSFHSSZGbWBuaWBrN254OTJwb3lSd0FSOyYwUl59CnpAR0UxSHhBWTRkNUs5Z3YtbkpSYzst VnRTY2trV30xdEVVfilxTUNfVGtXM0J4QDF1dHxIZCFuPztXYHptdDA7SQp6NzhGPko7VGZnKnV2 O2R0cis9X2tuKEpYaCQqXmd0OGBRZVImKFF5Km9jSihae1prMiFMZXRKXitIWGRiWk5EWVAKenN8 YkF9b1JXUWtMVzNAPyVneHlCTSNSSX5LUSZLKkxUTEl9TSpXWko8M2RgKGhqMDBXaCVjanliTjlV fCo7KGJ+CnoxaHJJIXV9eD9fcUlfbnEpcHAyWW1sbFpNP05vbHxAeWlmaiFRZSZrLSRsfGZ7T0dE bERDRH1pdjhEeUBQaCg4Owp6ZyQpcihoUUtRJmw5ZSk8SVg9blBBR1hIYyR2JTBeOzVhSFhsNkhB e0IzTFJmQFh2Qk9CQz0zc3RkSVJ8bGMrSU4Keml4KWMhX0B4JEBhcEtGaDRuRER3bDlLWDwkQiZC NUBgeXdSOGFoKXBVJDw0Qy1NMFA7VCo9e1lkTUs5QlVBaVduCnpEbU9lRl9SKnIhd29sPFcwZ1Fx eDRLUFN8VlNaWER1ckMwMV5gfkV3K1MtWk9fb3dPaWxuKXVGOD4oOTxsKm1WRQp6TiNeZ2B5JTBx ems0ZVZFeFoxNTB5Pj5ROUp4dzQ3ODVrZDVIODApYnBgaGIqSUgqSU02cmNAfDxJRz94TkJLeDIK enZPWj4yQFdHKXVJeXt5N1N8PEl9PiYkMHQ2RzY0X097cjg0Y1JEPHJJNkMkT1F6WnZrOV9ZeCll SCpraEdjITlZCnpKdW9uRXpkZklKNyM3JUU0ck1PdWFCSUtPelo2Xm0/Q0I7OE8paEw7X08+ZnBq WiZSU2QlS0MoOSY4S2BsWV5Gawp6M2kmc003bVVhWCpAZz9YQmxRUWNodVM7RDY7I1oxN2l2Q3w3 SjwjKUxJNHp4VCtMM21PQFNiWm5PeyFqWFBCRn0Kem9iZG1jJiU0Rm0rI25oK0ZKLUJOI1d1JGJQ Y1ByeHp9PlRNdiR9Njg/dyZURXtZZ3p2TzQ/fmJ4VEpDNVE3XzMtCnpgK1U4PlVBbEw5MUc+YyVM KWVFP0Baa1o1MSYyT0dwbyNHSkEzcjNeLT59VDEtNEghMVpfbXNBPVVGZShiJEk+KAp6JisxXk1F OS04M2NeRUskc3pTPUA+U30jPCY8WUwoRlY1LWEyIT9MNmRBZCpDb2FGSS17WmUxXlZjVmBOenU7 Q3oKemZQRWppYz9OSTtrb0JGKDteVFJ6a3JsdkFDWlZqMV9hPjRtMHYwSm8xdGszMzRfaHp3Z2Ra fEs/WV83Mz1SLXFeCnppZUx2cHd3NWhQPWZsTVgjJk9gcHFgTExDeT1ZSkxtV2l6JDk2MFpRI0k2 dlVjTXFZZy17dCtUO2tfZzQzODEkKAp6eFo/QCFhY0M5KmhSejxieUpMSnhBLUw5MXE3ZH1scGR2 WSl0RF5XR3pNMVooJWRNUWtLVn55M1BVazB8S0ZrY1oKekNIazN+eXkkKFo8aChWQ0J6OFIoSW5N IyZuPW96emB1QTt9XmhHPkZ3MF45Jm5kNFBWN2hVTEdzPHFOb095d28lCno0I0lPWDdCLUZsZSlt dHYqZHN3TTNBOzVuTjRecGlZSiErdyNTSkhpNGQlbU9wVkB9ZTQ4cV85ZW91UExON0ppaQp6UWNf YShHSG1gLV4rcDdyKHFwTFNEUiRDRDNhfEUhMl5iaT4pQT0mVS1jRCZQa25USiNYTV96ZVlkJnlm LTJwWmEKelNxNjV1YUdvMCpqfH1QcD8zdGphcGxOO1pHZzIwPDxzWSFSWiVnLWdtLUBuaFVEUm5o aiFpJUcoMGZ5O3pyUD19CnpgOWQqR20+Z2RXUU5mTHd6fUNFT25LMyUxKXYlRmQjaiVtV2RHS14x aHdHREBtPV8wc2tIY09pXm94VVhHQX1OVwp6SD9ANEZgbyNac1chT1Y4U2N0emUtPihrfm11JGQk QGBHbU1ZcUJeZ2VCVWVvWjZOUDR4IWVORSheZ2dXVGo+ckcKemZfKTEtPzFzTn5Dakp7cFdgdDAp TlN2SU8zUXVScUhpRE82Rmp3RDJKPDVvKCtSaSpIJlJ3Sjw4UyEzfks8THpFCnpDPCR8bCQ7YVli QWsqJX5ZOCRqV1NJXkc+WF95c3Y4O15lKFJCXjc8RTNYQ0lTMzN7fmFURjZjSV5wV1pSbW14PQp6 dTEjVT1aOE1BLU9zMDV6MWRxSyl1ZXdsfkp9RDNCMCsjSyQ+Y2xzbHFuVDJiX0E4UVpoeUVCO209 fTBRRFZDI3sKem5jMGZAc2pmLXR2KHt0UGxYdklrVT9BaEA1UFVQdDtmO2pxI2hTbiNsbi0wSCtG UU5VemwjYVBEY0VDZy1zNTc/CnpzcChKVSMmX04kJSVHej9ZJXd2UFJ9bnRgeEAlX0NHRE5oQXJN ZHtAMV5JR1Q0a3koOVZnVlg9PGd3N2srfjM7ZQp6PlhEPEIkOFlQYW95dyozSXRzKUBPTDw0e0xt SDk5OHcqUlEtSXRMclJ8Sn15KHx4WmtyKU1fPnhVWU1rNyZlc0kKenlWZzVCKSlQfU51PlImYGpv MylHTHZObDJBQlB6PnEjLWxlMyVWezslbGJqbkA2UGkxY003dWcyMipeMlBXRF59CnpLbnc4Y2xU RFR6Skt4aH1UVnpfQGJIRWUmUVdTOXtIU1ozS0QwfWpTYGBFNXxwRW48Mlh8R0R8cT9aUGZMUEBG Vgp6WFk8QldzT1pyODkrTm5iXjJWUktlWH0tLVBQWFlyPitLQF5hUGI7O3o5b3w0YXAzaX5yTClK MUB9O3JvWXZkT0gKenA2M2A8KkRMdG90JmlzSilNQUhHfDZtMm9JTUEtcSljdm8/LXJvIyt3YE00 RHhiSzJpRCVjaG5eSFd3S1cxQSV0CnpoRjwkVF9GNT8tZVpNS2pBZVQzMVM+QDFHdWMwN05SJCU2 ZEFmUjImVWtVMjJRaUJuZHlHKXhERjxXO1JfM2UkZQp6citeSX5ZTC14WFdIVlBVQnJfTyh3flFm WC13SnYjJlJXNm1QVTczOEVpRFVvODhjYCV0diV9P2Y4PH5DMylYIVgKemtuVDhrRGRXI0wqJSlz SVJ0QUM3PTVUTHVkRTNybjtnQlJ1S3RmaCVpOSYrekU3dklla3VQRmNsNC1fWjhRMz4pCnpHazdA b2M9TiNJbVlOITBDQShjVl99aGdrbTRNK0ZkPVJYLXF7STxfaF9DSDlCNTNNPGMtOFcwYFMzcHgh JGlnSgp6KytLbHRoaW9VeHB3K1Z4c018bklOJCRnTTJlJHQqX143b0Fpd05DVmg0YD0kR3l9OWgh VG4+c0Z2RlJ7TnQjPDUKeiR1SDlULWxAUW0rQyVreFd0WVhocnVMTn1pbDxHejA/SCRnK3p8Rkd6 S0U7aXZjTz5qcSVTN1pnMUYlaVlxP0MqCnotKmdrJHRlXmBCS0F+Y1c2P3xJQGY3cj9VNlZ0d01o WlRNbXpsRDN9QEwqPTVFaUUkVjZoODUzVjl5KEw+Pip8cwp6RHM3SGQmJnd7SyVaMUdvQz4rUFI9 NHtMUlpiOXlyK0F3NW44c1NFckNNJDs4ZiQ+JVUmaWstQmF3KygtPmROV2EKenp0SXA2JCp9JjBa cjl4Ul44QkBDaS1UQjdYOD1hPz93KXF1WTNhP0QoXyhpO09FOUdBckohaXZFLXVPd25qbytWCnpG WTQlZnFvK3RpRU5KPHJGU0RMQyYtX2A8P1lhUyQpX3pNdGAwNDRYZXE/NnxBemNkY0NGQD5JJjEp OGVtWUg4YQp6N35hPi02I2owX1VkYCh+cyFxUWhJO1hLOHItQklxJlQpcWFqbWorS2VURFA8X3V5 Xn1eSGk1T1pnaFVlPDJZU2cKejJVR1pLSiReT3pTLTlsLUM8Xm9oKnRMT3Z5MC1mTy1pfXlqeDkj c3tjMzlsaG1XR2F2VXYzMmw+QXo3LWV1SEN7CnpaUHZkK3NRZkNZI3FsQWMoamFAS2dMWkIxa0hf N2dYPT5fakl1bSlkNjteTllXQkE+cmgpczxQb1JnbzJMXjUzVwp6QUt1TiY1TSt4MVZSdHplVHIr Q20mYUAjKjwle302LTxrMEdeNipnU3B6VTBfX29yODN8RFctRUxpP2ptak9PRU8KekRMakZtaCko ckspbzNHP2o7O355JDkpdkdwVHM7eUJPIU5mV0AycjN2dyVgM1BXSl5PZil5IXQkRkJeaWFeeyYx Cno1TSh+S3JufkZpKWJ7JUVtZXRGdVlGWEhyRVZZWnM2QVYxVFFKMFlrcWx9YT5iaWM1a3lESjJU JHw5V3FIZmxrMQp6dWA+OUopS2s2JT1qZElEbEBsPiMkbDUkZTVGQ2tMeyFlVGNLU0ZKPkooWFJP YmM0RjlQaENYZl43QV52U0tNfVQKelFkN0NoLVcqRygtVClZOWY/cyFGcyQhQ29YeXI9OHl2V2U7 QyV4Q30/UXI/ZjEjOyoya25qbmlZcSpuK3FfdXw9CnpCSGFvJFU4MFJyMkY/SFJpNT12SCZoRyVa MGdhe2A2fTxJR3l7eUZXV0F6alpPU2kxaF53KCFqZERVLT5EITRTKgp6VlZeNEteNyolKklkJlRM UT0qaX4heyZ1UXQ5aW0+bW1GO0RMWnxnV2smRTtHKWExezQtdnYpVEtFRXAyJX1OMiUKekloISgr Xj9kKkMjZlZzRCVfY2ZyeTJGTXFVbVZCeWpxWkwlO2cycGx6N0RiWUl4Mm9GIXNWcXZuIz10Nkt9 TGg+Cno5WDRPTSkkUkM1UmhPPENLTzNTI1d7Yil7MiVGKi1RYkBpfHhofUZDTDNVeUdzeG1HNlEx R0h+S0ZSNnFedm1WJAp6RyhOKDhHayk/b01MclR9PGFia21EdTl3c2VkejVpezRWTkxZT354KUZP VV9uV3AkUkZqa0ZTc21VVWFXbWIzYEYKel5+ak9qZkhyUz15VkxwbURyc30qS1lmbUhmMEFsdlVg bDQyKWY0I19sODE8MlZPSDIpcnFrcUQ3MXg7OWYoVXslCnpEfk92NFBwOFIoc0tFZjtveGVGd3kx YXp1YFFDWStgNStGO1o7cjtNbGRqPjtOZH1RXihCS3RMTEZGe0ImQk0hMAp6Vko/PWBOYWt3O2dS cU9zNj5sO3ltQ3VebnpiTHM/d3F0dHAqQ2dFTGQ4YFdpbHRjWURCKjF6ckdeb21RZC0wK3kKemIp ZyUxQ0tsfWNvWVQ2LSVGfDlBOUF4d0s8K1pRUmxZaXB5QVptI1llcFEtbmFte1FHWGw3NipkK25k cUV9aWlVCnopQlhvX3tlP3sjKGxxSX0wZ3dmRFFLPFVBcX1EWkJ5eGFRenJBU0xOeGwte0xiLTFq YHNAMEBZRE5ZV1JwVD9KVwp6OURsSnA2NSRjKll8KTFVKnJqWWJVU3k+ITdzJXY0RT84clE/NFkt NmhtfE9UPFYpK09ZY2BXbGhtdWk+JCF6Zk4KekghYkxxaExKS1BaTHhGYi09bjUwSkxgLXNCP20y fkktUF58QEteJUBlZGQ3X0EzbDFXQTJXdn4/X15teXtoYWlUCnpBQzZ4Z1E+YG0wSjJtZ3BCdVF+ X2RGdTBidF5tMmNLdFYzU3pLdl9HUlA4RjI9eVQ0UjIpJGNPeTN4ZX5ldnpLNQp6WDtJdjdQVCRj QCtJRFA2cFVVKzdpMDRISHV5SEZnWkFCIShUZzh5UVRAXlotNUNQQ1VRdkJTIVE/ZDhgPzZwP3IK ejQ8cktTQU4jTVZtUyM2XiRnVnl5R3Vea2Uyd3lKT1BwfmxTSzc5M3Y5ezluK3FoaE9+MStVTG53 bi1aWCRkfGJrCno/VzxeUTJXaChWSH1NTl9LeylmOVVFNnBoMF9AT3plbW97YFFUc2lsV3Zje3Uo PChxKVVnS2NZeilGfns5IUBuSAp6MEB7Xmd5MGUrOVltQmNRcXA/dGNwM1BoZHU2IWx4JnxHe1Y+ YkMhSyRwWl5JempFNylhc153NEtrQj4+ak5ZZ28KejZOZyVLSzhDWCVXd0NWNVJmdlA2NFhqYFQo RHVNNnE+NEcyRCk4Y1IxYylsWTZLJiY4UE4kSStpNGFyQktWIUZ9CnpQV0E1TmVCSkY2VnxKT0p8 NDxEWTxtV0hOKk94U3VNTDskKGIqYTQrSHZYUzZHZzMqKXNefGI3cUohTDR8R1d0Zwp6NT9jWDBV WVYrQVAjQVR+JCUhTjJVcUpgUk8lbSExV0tkVGRmQ0hFcU5PK0JUeHcoeiYoPHZlUXlRXkFxM0A5 YGoKekZYaytUQEJGaCpIbn0+MFZ4MjRpYFJrejFDPWNyWDBxN3x2SmB4KUA7TmBWPFZiP1Y3b3k3 JDdmVjMqUyshcjxDCnorY1BJNDB8U3goMURTN1pLVHRsQ3tSZHJicHc1N1JEbjtqO0AoTWdFZXRS UURLOWd1OWY+VDs2RnJuajZgb2k3cQp6Xnw9IT5YeDRNej5WfmQ+QDxFZzZORnl8MjdZRkRDO0sq NXRHckFFI0AqPnJSSEdjJVgtcEgmYiNUPFJTOXY0JlQKemVXbWtPS0tgRkl2R2JeK3YkcllVI2w5 cHA0eWlCNkxJfFI9YUpTIUo5fUIyN3s7SDNTVElWIWUlNW5UdU5nS2NaCnpQWTxmMkFOP2MrK0FC TktDdGRWQmhIOURyWjIkZ3olNSp8JHtjPS1qLUxCWjFNQGpaVVRZQzVxRmVCVFRmSz03cQp6RmB7 UlpDMkV3QXY8Sl88enN1VmNyTnNTU19vRmpFXlBrdGFBNzs7dzJOfnt0akJjSEU9a0B2U0xOU3Eo bGo5Z2IKekk0Oz4+N1c2eH5mdklLfD1FZn5jVTRoc09kO05yVFpAZHxxc1BoVkM2e2Rhb3VidXYm Rnw7fnRRXlgxe2VUQ0FVCnppcj00fG9kcyNhNHd5dSMlT1VAfTVfRHdGUjF8VWd4MGdXaXAtYGFN PWlqZD15Kz1EQWltclQqMDtwZk4kVXMpSQp6TmI9ZjhQPiUwfUZWVXIoZkZEIXdKc3w+ZWl+X2lh cEZVfWN1YEl7ZHdsNl4hJk9EdUc1eVNUTl5OIWVlMDZgVUcKelokbXgtSGxhYV4yc2VjWXBhVWRZ eXh3LWY5dn18SmZackpSamVuI3BrVWpnbXpBP0d8NlY1QFojX3ROTkNjT2RmCnp1P2tlK0BlQipA dlB8PXxTXndlNlNHfDNRVWZ2KiprZVlnUGFLNlBNJF9sPT5zYkFPIyQ5Qz1aNX5FJkI9ZUQrTAp6 eVcjZ3hsJFpha2I8dVlQaCZ4QiEpT1E1JmRYQz8yK0tqdT0mMXB0UTtlZWdneyVSJGRQbzdTWT9j WDtkZmo8VyEKejBMREFZeilrQVAwJSl5WG0jI35WRS1hfjw5ZHE/fFA9SHMyQnl5V0tyRnwoPiZv PT9lI25eQChfJCNrNG5VRXtYCnpMdzQxQXpKYyk4OFlLdzsmOHV0Q0R6K2czLVBrfWE2QGp3Z182 eHB3UlVJOXl3Jkp1bXAhU0NmTC0rZ0olaGFWUAp6cGlAUzVVVFdZRlVTaF8kRlIlO1Y1bnh3XmIp ZXYqUEpCV2JARz9rYWdVUmdUKzRTYHkoRjJaQk19d2NhQ1VfYTEKejA9XnRtMWZXfHVIfWxyTUVG PTlmWVdCWnpgemo3I1h6I0ZPdFJEeTRgUlJSaUhnaXc4Ui1uVVNWUE90SHI3TFZ4Cno+fFVUQ3A+ YyRoV0UtZUEpdGd4I2pEckQxNHA4OU8xN2k1cUY+RTBVOVN3SDZKKndJT3o+bGNaKVAzUz4oQDJx eAp6N19zSVp5VmkzSkh9SGUrZHtoRU07UXpKdlIjOTxuT3wpPzE0I0N9blRZdjwmO0s0fTwqMD5Z Zy04REdEZ1MpI3MKeiFRSXs2LTVZNTVgPChOZ0pNUUJoPDl8SzhGbjBJdXk7clladDlJM19TK20z Xzc8aUZEQVB+PWEpNk9PMjYwSkpPCnomVDlgNEFUc2lkYkc7eGVfMjkqSTs2cEBhNnZXM2trTmtf RSN1cElhMERHOG9WVGI+fU8pQ05gRG9KND8yKztBZgp6P19QekYrX3c2TWluQV57LUBIa0RVYXFX MSk3JVFUeTxlXmQpP2h6SldrV3B0Q0d8JEBiV1FARWomVzUhKCQraVAKeksjPjg7emB2ck5XQyVl eE82YlkjdmhPMSNsS2xWfjVCa0RMUzJtbWlOOGE9OGpBRlhvUl9tX1k3elZZIy1SIXJiCnpxOVE8 SzVJUU1lKHxRMFFyXiNsJG5yPV5EbEdiUkpFKGkyIy07P2taeXkkSjImd2ZCdUoxJkZAVXllfjhA SGVwRwp6aXhgK0JHS3ZaP25RSHYyMCZ7bUNkaCM3NCRQalAjZDMpWCVmMHIhbSk4U0QoaW1mUSVI I3t1RUo+RnJ4PURxLTkKemRvI3coVTYoPHBrYWskNGR7aCh1M1NwSHh2YlljZG5BOXA5SCo4dnRY el96KCl8aHI3V31rd1p4KEFKTGEpIXowCnorKkhgKC1qWH1fNEhCSCVOe1krS0FwYUd3RCspaT9R TGJqeHQlQyhXaXZKSV43MXpfSGM7XnIpVkp3fExWJn03dwp6QFJxdnEwI0JEXz5yV2hBTldOaHY5 eUQ1JmtubyljQH07JVpgMjQwSTVYUUYqMlpyQEpeTy1jTHN+dXdSUXlrdSUKeiVXfHRIa0RjN1N5 an0oJGgwVUFzaz1geCU0d2RZWmwzfStnS3JANzh6NHBOdXFxUjJvVm8jND94RE52QGBnXkhyCnpe VUJOUiExIzdkPUQjIUpDbytsI1U+cktjQDMpUWN5eHR2WmcxRVRhO2hEaXUzdWxsWnVpcEF2PmxA LWE7QnVrZQp6ZlNsN0xxVjt6NVd9PG4+blMwZVgwMnJiUiM4JlMxdyMtPCZJKDtweW5IVT9oSXda e2NKbFNaWXlXbnZOcCs5YSYKelpQP3pIeUpuSUpKXzxnaT45Xl5OX0R4TGVrRVE8QShQfFRkNWpr QndLTkNeUzxOdiQtRGc3WHpRXiUpS0o5ayNOCnotN0BnKHRQMXk0bD1lOVVMOXQ4U3gxQVItb3Ey PFZzPHd0TkRuKnVgWj03bCY5ZlFwQlk9Xj47bGYkXiMqZHx6NQp6Yl80a3Z3dGVuT2IkUWRjPFNT IXkkUks2VnQqO1BFdkYocS1ZRm1CX2YjLUs3I1c0RUozKUE8YjspQlRmKDRwU2IKeihZMm44NWtq I2xmeXUzMyNEWFIkNXMzJiE9fFhzI21WRiZDYz1FYjxhdzNCZHBZT0UpPVJiOWVRa2F3aUpjRF9A CnpXcGRzKGdDLXl4Y3hgUyR4JmE4Vy1LKmttdzhEZFJZVWZlVjExMT1hYlUkJCNeY19HI1dPbSRV dW4jWmIybXpBYQp6YV8xWHR6JXoqWUVqRkVDRX1xa19iJTI3KnVERHBtbWhmKGoqczc1ank4TEFI d0gqeUt1QTQpWTdAUTgtYU0jYSgKeiZiRlBUYWkjMytLYzNUT1RXdjVJdkxKM0w8JU5JMXw4OGxE YW1fQllsaHNCMHl7MVA5bGxoM05SZSF8UUM0bmc2Cno1PC1iejRIPUc7aTM8fkFWSlRQRWY/I1Yt T2koPDIoSmIhNGBaajxFT25QUSEkSiohSWZoKGtGPFBfTzZwMGNpVQp6RlRVWU09UUdXUmJpMnAt I15fOD93c1AwVXdwYERUR0c7dXNzfklEMztQO35CIUJeOEMlKj5oZWZeJGk8Zn42WjwKeihebG81 Mmd3dHU+MV55YlZERkN5fDRBQ2FPOEdLdkVLY3RKMHYlR2BZa3ZefE9NI2BeUG8xY3ZYWTwrR1o/ UFp8Cno8fGJTPW1HUX4lT2YmcCkzUSY2MzQzaT54KUkjeE15WnlyZ0kySW5OYVdudHNpay05Rntx RmlSKFRpcVNDUkVYXwp6JVAwTmx0RWIyYVNCI3JKVWYzflM7Z19raiUhK0ByNmErfVVze2xSUDt4 eTF6KU5ubGMjaUpsISNLWC0zO1d6ezwKemVhd3lLVWhYe2xNNlApMnE7dkR8UUdQfUQhVGl6aTdU bVQhKEptYV8pQFhrNXh2c00je0NeMSMwO0lhMVExOGt1CnpmeTBpbmBrRygrZyk7VkVmR3pXQFBX P1M2RUZoNGhYSCRCKilicjhieGQ7ZTRjcSQ4UEFjU1BBSktTZFVrQmpAeAp6NTFhc1RZcip4cTJ7 d04oWiRJJHd6bThpVDZhRyNpe2xDQmVLKFNHLSFDUT9tYiZVN1ZoMEA9ZG1BMHRDY1BWNnoKelNS ZzxOYEwxNHVSeTJkKElTMDtpfDhzKSt5R3RqbFRMdGd4KDFpZz83KVp2WlNefDMyZVkkaDtye0Q1 MGsoRHlRCno/SnFwRCVVaWxAcCZzJUtzNmJ5JnhBRnhCbCopNUt8QiZ4U3VDO2xXMXZlWkx2cUhy TjNHMk5NUVZIdnl3PnAlKQp6ZXxgT25fZHdIP0Q3K3llMyoqYUhuUzB9OCZ1bVd2THhHMzBWbj9G Iz5iYmNIKH1lKE9hfEowRF5qdUtrQTgpQ2wKentYNDJsMEcjTXttfUVHeW9vdVF6YGsyVlVjaj5V S2RyQERSUVU2cyZpJmlQVSZZaFBPfENhKyhiJUF4Y19GQXBfCnpga28zI1peTWZmSSRATzxPNWgy QkxrVEtBYDdlYG9TX3IhPTNjfTgoZypxPzluOVZSczlvQmA9Rig2KHVnKnZwPQp6X2xJRXNWZ3BJ Uz98K1MoS1YtXzRafl9BVmFaQkYkPV4rZ1E1RUMxfXspMkxAPmtPM3NzfDVnWTBeZFJXKUcmalgK emNtRno0JXVzfVlLaTheMXt5aiM5PF5ZSClxaGc4diZsMzM0UHsyXkF1Z2wyKT9eeUlSQndhYCFf RjQyRnZeWjN4CnozZjJlIUl8M35KY1hgcjc1e2AleD85eno7K1BnJV5AYnVpNnshU0ReaEtMOVV4 bm5qeEprc0IzQio8PDVVX3BrJgp6WT9KQEBFSkJYNkRJajttPjckX2hYWWM+QG9qQ3loZCohcUw5 Xipqbjc/P3h3e19qTDBXRWlscmtSZXNJe2w4QWcKemYwT1huTGl1a2N7NUpgSWhjVy1IZyNXZ35L VG5HUFI+RlRQO2xHdmVlO2xYKHchP3FoO2xKKGgtKikpRmdRQD4pCnohaGJnNUtiIUVNUDVBJDk2 REdAYGwrQEhobndvZyVlaFJ9Z0NIQGJyZiRYa0ZNcCk8a1BWQ2ZoMGR7dUdQb0YrKgp6UnlROz5H KmgodjN5KUJ9R2t+N207ZGg4YzF3ZVNkd145KTFWR3MmRipEZHJaR2NAUmJBUGdpSTVEb0FFYUJ5 LTAKelhaSWl7dlUhViZga3oyO2o8cF8oVU9wVnN8RERiSUUxP0dzP0lkRVFlYTNwe1FWUzM4Zlpw RU9uSk5jenlGX0dRCnp6dzxCcTB7Y0cqPWJheGRZK0o/dEJzZHQyN3tDZVp5I008WDswNWc/XnJM Pj58RnxnLSprKzRudlRtV244WHZEcQp6MFJwd1pkVEUwXiFzK0VDQEZZe1pkIT1lbCR6aUVGVmJy O2VZcnx1ZyhFfEJTIWk8U2FuenY/eVRlN184elBBcUQKenMqT3B2cFBOVWUxUnckUEB5SW9iQDR2 P19uX2c1Sl9wQSE0TjdpKGloR290LXI0cz5LIT9ObXNvLSRAczkmZW5BCno4Tl99U3k0UmNodUJP KHl2O054aUJ7NG9wYHk8T3hkIXc8KzZWPkVBP0JqfUQmNHk/Xzc9NChEdjdGQ0ZKN3tqKwp6ektf K0xrKj1ZMDgkdTNeJFAwODsoSUNZRXJAR3ZJYC0pfVJqYXhGcHEtNUg3ZGNaZykyeG9Vc3xHdURy QkMyJDwKenE9Ym13Vk9hUTJeNHdmak1hP1J+TVA9e2xrYz5rOFgpMURNYWdJfjdSUD96dUZ+SE5l U1daP31jMWBAVlExMkFSCno5b2QpYTVOPVEldVF8Sio7OTl4Zj1CSkNJN2Jacj1EdX5YajYxfjwj MEN4KFgpM0gmNHM3emAzJDRxaWtpN1pIXgp6e1JQRG0mYzwmdjtOX3oxaDJlT1pyenQ9aj82QE12 ckpYSlpxbz5rSWxJQylhY3tzO3twS3ltOWlIaHxyUFB4VmUKelpDPmFLbVRgWkE4PldsIz5LPE8t TVJ1Qj9tb09sSHQ3cXpGKWdnQU82I29hfm44PlhxUi1BSUg2PFVkfjh8b3Q4CnpnbG5+NVdBNkNJ K1YxXz48JFlUMygpRyhKcm5KREpLKEVXV0cwVzwoQVA0anxCJWB3Jk49N2NuQzxsRzktdEhsVwp6 dksrQTgoJXMhSGBoRSFgSWtQP2dyQ2xKdGFvQWhzI3FvM3peQ1BAIzxadmZNUDhFVyl2WFZvVFht cDNlcWpTcm4KejwzckxHanwmQSg3QWdfO3pSMWZiVXsyMG87YCRVSlVOKitXQytpSWhsUDlnLUY+ fmNSe1loU0xlYG1fRj4jUD5OCnpWJCg1eEpmZiZwYDhsYVp7Xyo2WTs1VE5CcTB7JEkrdlZyWCtP MnEqeD15JD9TbGNuNWpITDZ0ZjJhX0xscEhRPQp6NXR5WEFYV1NZNiQmc0toRCg9YTh6TDBYQyRT QTZQQX14NWFEMCtFPSlUZU5NalpOYzV3V3xuTzVIbjwyPzMrSDEKemNJcSMoemshWlZpbEBFYD80 PENNNmo0ekc1UHFHd2VDVVRhdDteVlZJVWEhc3ojX0ctITlhanVUcCNzI2RgPlpxCnpMd1g9WTFY cyU+I2cyJFdZcDRyajstTWl8ZEUwb1kmNWFXeGdWb1h+QCU0JTc5WC1ebVBIRE07JiM1bENwMWNl egp6RWgtTm42PFBNfGZpUX0pTVpISlE4JCk7IygwMWNpSzYyeTJEbG8qckxJaUlLYXVIey1tbSY/ NnVePjxabDFrdDwKejIpQmt9ekI4NFIlcyE3KEIrMiNMY3h7TSRTVFZYP1c/WjtkbHZmbzA1elN1 MnZQS2w8RjhGeE9BO1Y9OGo5TypRCnpIQylkOS1oMH5SQiV6SmxTQ2VpSUxjQ0RQSWZhc3psfHtq STloUyg9RD1RbHYrRzhRbntKZ1paR0BnU1IwTSRqNgp6WjVlT0EoO3FwR29WI2pJUlZEbGAzeXNW TXlIUkZqeE9+TTIxJTN+O194UG5kYypCemE2eCFBZSpxOzltI15JV0kKekxOe3ltSXdMbUxueHpw ZDlAeXheWkx5WUUzMHg+ellZYFNlVkw2eWBteCtXPUYoT0p1Pm58RVV6UlFie2dWZUZYCnp0bjU9 VkctQ1dmVUk1fj43TV5NPElGUjRpayYrZ0todEU/TmlgbTU2cT1ZUG9hbEZxZmFKY0daTlNRd3ta QTFrfgp6JTFYJTQ7QmlUJTxScjh1JkZEdG91ZExMM3FoKHVJUG4wK2M3ZzIpc3RwQjVOUnNYNDt6 TkdCNHlGcCVlQmV7KXwKejBjXjVEcDJVUm1hWlZWS2sqZFFkNWhNTFhlb2RKQ2QzVG5iWilGSF5P bU5XZyV4eiFoekUkQ3xGM3RBUUJyRFdmCno+YEx5THZgYWI3PDxBMzVEJXBER0x1QEY7d0RofFZB fm1PdTxSOFgxPlRmKU5xNHBRTF9YYUN2USFUJjA3VHlsZwp6dVU5OzhzOU9aQlRFWH4rRl9wMXVh I2RjZ1ZNSm5Ka210bmsreztZe2VKT35eaVh9S3AyS2V8X0pYS001JkxFMTIKemZgYGNWUj9nU2Jf czdaZEY7aTIyb058KlpnTyN0VWIqTnkta2F8c31xKXImQWgqdChPOUs/dXRjTz05cGd1MmcwCnpD WFpvTzBgTmp5Um4oUlUrYGJiMUM+YzNoR1NySF9xcVYjOHsqK2lnWUNBRDBncVNXJjNxOyVVbVpS O004NUpVcQp6T3NAQj1TJUwzak1YZ0J1X0c1Y1MxdGhfQUxIaWwjR2QjKnxDcFh+cCt4MllqK2J+ WD96e1EqdnkmYX5ScGtLY2cKeiFuNXt1Q1hsKndDbldVO0htc0ZHVElxfjQ5dyFzTzApVk5zcSpg KC0+ZTxENFYqTXQhaiY+KWhjZW1haC1kZih9CnplUkFBUCRlSztgREdNYkFNd2ZFMnNvOD8tVEsl Y3BURjh+dXg5aj5qXj9MbkpWTihieGJ8fHJGYmAlWngqN2ZCdQp6MWhpeSFwTko8NVchZHJ5b1R7 b2BnTHEkR3o0aV94dilzN15jJGdAVEpASXYySFVOdGZmI3JBbT95ZmVsTnxAKXoKejxyM3dRKzxh K2pGUnVoPWpqYkRBQj1MOHBqTWtZS1lZQ3NYQihrKElfMkFBSz9TRGd5ezJJZT5IM2dnSyYyVEI7 CnpaM2RBcDg4PE9MVWs7d017WW10VkJ3UXBsWiVDYENYKShkP2x3SUZrdiE0STsrOGAqdnIrbmY4 Q1gmITZUTClZXwp6aU1BSXtQU1FwTzl3Pj09am0pdXI9I2JgbDhfVD5uS0oyO1I7VWQ0TiojNE88 JXphfXdBcmp9UXVfVzFZUEs7U1AKenBudHQwbjMwMDl3TTMme2BBMEhVQ0JAO1RvcSk/MG1DTmd1 VGA0MkYxNz1gSjkzPDFZb0t1JGZFX01CaCNhKUgxCnprciFkO3tgNkd1Yk8rXm1OKVhmTkFTME9j I2FaZ1MtMmhPOTt0M0lLdnJaSTNWVFVBbit4PWBeVX5SMF9gITlzYwp6K3YpZzdGN35FSEo5bEdp OUxRbkc5JWtSXnI5bjFxQyQ/PjhmSUJ0aG5lb1Q4Rlg4ZDcrS1V9RCR6WitPKmhXPnUKejtrKkNZ cEFmY3E9KE00fXJIeTBTc0AzPyFTP2kmeG9WSTlDYk9aZn16SjQ5PjxSUCZjZWRRYzBpMU8zZk5V TUgrCnp4dVVBVld4Uz5FV140S1FAVC18d0lUITApYTcqI30jc2FGcUhUSHpANztVOVR3Smk4a3pn fEp5LWtmR2xWJlFUeQp6cDUtcHQoP3V4VkZOaTNJeGgjaEs2b31QSDdTZSNKJEAqUyQlZ3lCJFl+ QDZqdF5MZ2VxU0x+VlQxKylSN3JSUn0KeitAOXx+WlJGRGI4TX5tM28wMSozNTRhKD1lV3t6aGE3 bkZnREpVZjthQDBRJmAkSnB5RCpkVStmey1geXdEK3dLCnpBMHR4U0lANWVtcmFiQnhzUitORF5m VXZPMiQ0U3tpdG9nXnZWNSFkQ19mVU5lQVQ2WmpRdG5aSjxwVH44bFh+Kwp6N3gpSUwtZip0SEZQ M2htXj1gNnk1dXRoaGokYG89dH0rZGJHNVZjcjNkO0VeZVFUJWVZbVZJTmdXbGNvOURRfDQKej5x a3xINCpnYWxuU0M1KDx+VkRQI2NxM1ImQnFvRUk7dSVCI0hNQVl1ZCVnaWlMeDtLPlZuU1dVISo4 e29jJmcrCno+SmJmdEhDZVBUN1I1VHVfRG4yfTc3VGoqbmo0T2kmZE4rNStCZ2ctM2Y4WkFJdT47 VHs0YFFiVkFjRHliVHdgPQp6I0p7PEluKX5rUmFZdmlfKHt3bV4yWmZZbGxBaismYDxJNUAqQ1RQ cGhYKCRKN2E/M1Z7TnlhJTNUKE02YnZFLTkKejdHczVtaDMwO3MmfmFIKDUwR2g8cm1gUSR3U0Yk WUlLM3V+PERyYSp3NDV4d2s/aHhValZSOU9aQC0kemY9M3FMCnp2cllkfD5WRTJHaFktbT4wc0tH WkcqPVNtaDlZOHE+QEg9bilLeyFoVmNCdzBhMzU2P2BXNCtDK0R1WGo1Y0dGVQp6I31xTkhgMTxi LTUlQW85YmZNZGNsOWQpV1NtTUkqeHVAVkdeR1IpdSV0LWdaa2NmVkowdVh7fm0xPUwxSmspRT4K ek8zMll8ODtTRVo8RT5MOCElRU8lVGg8ZHhZMlJaPXh8YEBPZH5naSpPLWtpKDlnciQxekloITN1 YGAybiFScFJQCnojZmpHQ2Y8NXdGUGorQCE3X3VgTkpCUUR3RzhXb2RAUEh1dXVzUHBxKyV3PmAp ZzFVQENSZSRkS1o+SjtCezE+PQp6UWRKVXhLO3tZe19rTl9EVXooMUdAVmo/PHVAIXIxbEM9REAj WD8mMEp6RmhjSndYRTx7TD42JmtqQHtfNzU8R0kKekxfUWNLMH5jbHE+YzFINyl6KT09R2Rvey1o MSQtVGxhdzE/QHRKal9XNFhhNz5SPGdgVVJ7d31fTUxrdkpLZlBuCnplQyorTW4oalEpVHpmWEVq NjZ1dTUwaiZpSWs2NmxVVCRRPXRsQXAhZDwweFJxOTZYVW1aPS0ocUZmR0sqdGhPfQp6YDMwLT9y fW98bU9qdTFeUih9PSZKd3NPXlkwXklHZ05uO2JvN15ZNUx1RF9TTzB7aTQ2ZHBJcmxGYDRWT3x6 QykKekY5U0xwXmFhX0pvTmt2NzgwPjVaKFVXPz5aWU8jQm9pe2pgZUtpU1EhRFhaNWd+TnFnc3M3 VjZkdl9pPXN6RlptCnomXyF0aUpJbk9iLUxCfVU9dFZaayVtMmslaXReejtCekM1PFJrbzRRMmor VWlqcmVESFZoZzBPTSsmZ0puUCY9cgp6QnRRQHpQUztUcFVlfFIzQ0xES0BkUn5FWlFTPjZYUzhk WH15SFp1bEIxKlIlWXsjSW8tZk1sX3VFV04zY19pYy0KekhDJWFhcTFjQGtaNjkrQCZyfVJKO18j a2YrRnYqY0IjdXF7eUBpVXhfX2lFSTc0TG01ckQ5b3k9QWJHa0NmTy1BCnpJPytKVHohS3pmT0NJ NnhfTW9uQnMtQzl1RGlgPGJ3O18+VGdXKlk1cyZhYX57dFh0M3ByS0JPN2FTTGg3bndHdgp6TU5E amw7aCpEJkQlJl96YUN0e2FHUkpiOXE0SE91MTdAO0J3P0xYczU5fEdqazEwe1MhKWk1NyFHYVVi aGlUbDQKelpEcFM2aDVge3VBPH5QOHdWQGExRktEdj56MkZvKD5qMDFJQXYhfmRZTn4+JmIhYm9H SnZ4MUJUK257Y3h2TFUmCnpSVnYyWiVsRm5Fdy0qUiFYRnZqOUl9b0RPTkMydENiY1JiYnBNUWlq MDhvUkZicCMmfGJFN31sP0BGc1lsezJQQgp6cFViTUhERHdWQTwhdV9TPTsqR142cWolMzc/dTln VFVFQn1QQXpaXns4QVY4NUsyYnF4YDcmSzxveWR2c2oxX2cKej5HfmA1c35nei1hYmJlQk9KZzNw cyh+NGttak91dUdpbUFkM0M0WUlUVHpXSHErYGlFbVQlXkpaJngwPnVISDc9Cnp4QGhDNlQ7NmlN S2N2czdyV29aPyVQUmtwbDMzNnVCfVZ4PUBlPz5Ccjske0tGYUM0LXIqMnVZQTM5WXlJZ3B1Mwp6 bClBfHhjSGJMbThrUi1DaHB5b3VefkRHKis0VkRfamFTcVBnO3JvVU5uOTQtPnhkdE9rb1UqbWpR MmJScDxGPzwKelNoSEhNV1g4cm43cXs7XyNhVmZDb2gkbENEcjU+Smc5P1Q5TjlOUzFBOHUhcTRC TE49WXVNWX1xeCorVj59VHlTCnoxS0Y+Si15fV5XdWhEdGNAeVQ2cUBVJCpCPTFZSEJhcWR9Mz1R Wl8/Xn5ycUxCZVgkWCNjUU1HX2FJeVMrVkAqIwp6N0FIeGd6Zyl0cVUlTEZSJShhSlJKcHptSTtg blEtbTVuaU89OHJiZ1RHI2pMOGduMTQhfDVvO3dpVWtBR3w0S04KendpQTMmJkZzJHlGOClHZlRl emt4cF9RWGJEUzRBa2VCbSlCWkMySU0oSlMxT21OYE1AajkhJnNebDc8PGRsTm1JCnpmNkw7I2JC KUtiXmVjOFIpSC1UQkRpPH5ZKE05SlRLKyNkbXNOJjc1XkdeSGJmPGp1NVhac0piUGh0O05UOUtN YAp6IXhOWSlRJW1YRjA0TThCSjxoWipVQlBUTVhKbmtURWEybH5qdURAKko+SW9vQnU0RyN7IzJe eSVGPiNibF5WJWIKeiRZV3xQIS1gWXgoQl5eV2NpTn0jZUlfYkkyZTNQYS1YQkFFbjdGYz55Vmoo fksya2QkdV8tNWdtXzNnb2E/ZVZPCnozZWIpYyRoJFh3KDFLVnJpSmJ8Q0M5K1dAWX0jMyVORyQl SD9MdFJgdC1PeWB0NHpSX2REZHQ7e3txN3NMezdzSAp6UXEjK2A2VHZ3LTtCNShNI3UwMSp2Vm13 YjNjckNTPzFVUmo+SlhYfDZHV0wlRDR6eThuQX4+UnB3QUx+LT5oMFQKejAhbH15JTR6NCM2WHQm JElLOVBmaGRadm5kOXF4N3A9N0xOO089RDNHUV5zPFg2aFNpNmJ3blM7bHVXTW9Ici05CnpqPkNf UU9ZezMhU300NXlIOFBiPVhxNGVpTyRROFVZX0NLOGRCbml1dklAWWxTcjdjS2RiT3tQQG4+YG4k WCowUQp6ZSl7ZHIldiUxWmxeQzE3MWp6Tlp2Pn5eTzFJaiQ1cHx5eFhfWn1IPEZfQGAxcHw0PURZ P187UUwlUzZUIU1JT2YKeiQofV5qc0BAfl5yKEg5bGlPOCY/ajhSOUN0bDZufTNUJWcqK25SJXwr Z0BPUVUtO3cqNXV3PClAQ013OGJ4JkBICno7NUM3WHdrczZoJUtle309bGRRXnBIfiQ3citjU1kh XiQ9K2woTiMrP1N9e0k0cWN5Ynl7bFhjTEBGbWpRZm5HJgp6SjZTZmBmcHZrJW1hZURLPlRlSkRA Kl59XkpIXzl8N01IQn4tejg/KG1fZzA2WChHc0ZnZjIlRnolOCZ6XzMhXzEKekJ3Sm1HX25+UD5u SigzUztWUXY/JUtkQDMhfWZXKjM/cWkkdkY+YyNnMmV7P0pGXzxlKDVrPm9LR1MrJSpEdnFXCnpO ejZpaURkODh+I3BgKjJjcnRKTFc0PEw2P3xFajQ1WWQmVkNaN3R6Y1pufFpzbXZBfjZhNWR0aSE9 Y1NQaDE5JAp6Wm1NV2ZIRj0kIUFKb3M1QUg0PUopakl7el9sVzFTQDNUPiszYFpwaEp7KGNhI15Z eXVvQCpCZkptLW9mRE5CRW0KentTMnlrSTFfKmEmTktoJSN8QHUpdENeX3N4e3M0KU53ZTwlWH5s MjNfRns2Y2V3KE9KLWt3KUg5fnwyLUFAenJlCnpvMF8kcj9ibE9VKmVMcnopPGtjM147dDhXZTYt Vk53PUZxSyowYnAwej4zNlpYclM5QW13b0woT0xsNWw0KTNCPwp6VEk2dUE1TilsWClMaSUhTHBm ZjBPfGJlUil+PTBLPSRSOGpZSVNUeDtCVnVAdns8dUR4c19vVD5LMXVIZ2NPPXUKel9KPSM7ITl5 PEM9QS14I2Ezd2lCSjdLM2szZEghOXJqX3NRRih0TkVJSns7cDNRbkFQRylxX21kRVIhRykwPW8z CnpnbCN1UDFmRVo4QSswcVN5YE5WJHd4P3k7b1krV3lMKiRKTTxXbEBVMmYjUCRgJDFAJWBqMXVt Q1pNWkdsWEpTWgp6a3Z5JVMjdHxpQzNoMSpHMEk8RG01TEVxRUhtUkxJRT4+Uk9XQFY1KGhyak1M YV4kPD1aQUgrS3R7eF5OJE9qeDUKenN3LWlMQG1ed1peXiU3PTJNQEc5UFFrXzV6SUl1KlJUbUgt bjVjaFMpeDIzc3ZIWTMxUlQofG53SWFifkltcmEwCnpfT2U0QV4rYGBvaFVEN2F4cmJqKEBzQmk2 S0V8Qm9hcmhjNUhTLW9xIVFHb3dzT2p9JmtZejJAIVJIUlcjUFMwNAp6JDsye0VOVDEmT3pDTTZg Q3NISCVLMXN2JStKa1BaJlE4cGQjLTkpWWN5cU5GU0dqWmlmREVZe0QlWXApYzdsU0cKenpaYEB9 alp8QkZlcn4lLWIyMipuI1dwIzJqTUpqWT5BOUc1WmdQUmxiREFDVTtpZSRmYzktcUthZC1wR08w ekFFCnplekM4K0dQKDJKNiU0djkhT3BnWTY2Z3p1YGBVeDliZ2ljTThvQTl0MzZyPH5FPD5GQmxC JlQ7YENFOFAjSDtrNgp6b2FGdk9YVU9gUzZPcH5nWnB2Q3JNMiohKykkU0M2bEgwfmJqTnt+ai02 ZE5gJFhPe0tXJS0yaz8lazJXTHozWnwKejZsY3xTZjk1Z316NGxaPlFhOV9HeFk2KkdNcHcqdiFC V2tlaFV2aVl1Q2VweSVOXzJaK2pTPDd7an5hZmpSfVJOCnojUU5tN0VePykoUWVvPTU3JG54ezdz RSZeeXRaI289Y15zdXh7Nz4xYFlUP1NzO0A0MVQ2eSF1KUtKc3leR1ZCUAp6KkUySGpHRzdvKiRi XndkdWhCV0Zkb3FIMEtkTS1IViZJbHVlOVZRVkZDJmFSJlIqRWMzaW1OSmRAe2M7ZFQrMiYKemB2 NmhhJj1FND84JWx1TitYfFY7dHs9eDlIZFVZVGN8V31JIzxjQ3VFRnIxTmg0bUZhYF5PMkQ8JUtp S2xOPktUCnpYXm99Qks/I1J0OFlkfkpfRlBtKTI1JEplQlpTTn1KdyMhTll2V0gmWCUkUHYkYnBk R1cxb3dtaG53eSE4MytURgp6K15lYSZGezd+Q05nYUhBRilFXyV0QWo2V1pKdGItI0RedjNXN2R1 VXMjVSV9NCFZOzVydDh2PnFnODglNjdoVEoKekFgSF9iTDVZKW5FQmRlJF5hXlIwO2o0V2JFcUc1 KnBxUDJ5bEh1OXQjWXwoKygpenJHNW5od3d5bGslQz1FXj9LCnpFdHwjIV49T302WntqeWxZaE9j ZFR3P1dlKUdCcmpXQGd4dHp+dShSbmMxUGRObkRTZHFIODA8OyFjOW1WU3tMWQp6NXVCQFFgUkJK aFQhbF9pUUpKVnxZTGlQSkA0JHshUW8zS3BUSStUJFQmYkshQH5fJTQxSFFyKVRhbGxVNDhUKFUK endScEteP2Jfb2gmQlZQJipDNj48RnsxTXBiRHxEbTR5ZXFzIz41SVJKbCptO3Y2U3s7OXc4Yy0w UWxTUDxOVlVBCnpUTUxLazFfOG8+XmJjXkkxbzZSaERgUTwleXV0X1EhKDlXJC14dX03cyVIQXBL UyExR0sqO1I0PVdxOCVrQ2lgcgp6cy01P1UxVkcxSERnfUduQn1AfXRYU3NadjBvI211dm8yRkQ4 P0JXXnNXYEhFKT91P3FGRkY+SChUfS13Mjc5RVAKekJFQHFGWF43SE5vemBMQFRrJXE0Xj4jMWI9 VnwreDJ8bHJOJGA7O040KH59a0JKVFd3N29wbWZFRFdPRWMwRG1wCnpkZ1FiRks3UjVUVkR6N0s+ QmtYTiMxdkI5TUwoczlfeUNfVyQwZEpVeWRLNmJWRD8+ZjFWeXJTaFNmejArRC0wbAp6aHt5PF5e bTkyTXQkRX5aQz1jWCg4JmZeYD8yMFRnKHdPeXRJYmU4K1E3SzhJT1lkOz96PCZQMzZ0bHZNM0Rq e1QKejFkJmZqNz8+anNAMztTS2R1enFkUlYwVyRXKXRkckl3JTA1dj1SNWVadF4rNEppUy0zc3E9 bndyO2deM1FhfUJHCno+YjlPMVA3dCshQERpRWdseUNEZmZTUiVvcn1AdEZKI0J2MDAzfWA0TjRy MTx1JG1tbWdAWiFYYi1xMCMjOyFufgp6aXpGeTVSP1RwOD5WUik9IVY2Jmt2PllCM3tFe2koOzw8 IWNGe3QhcSpEY34hIz9ISSU+M2VGbV5XMkYjQER1SyoKekJUXlBHNDtzNThWQTEpI0pnVUc2QHE3 dUojOXJZOTEqO0ZXSkU9WF9ieVU7dmBmR0JLNHhPJTVhOFhMT0xxPW1wCnp5aTFIVkhYNyVRcktg eV5NOy19PzMwMkAhYG4/cWhDbX5iNVFQTTtXSE56YlNzfSkxTUpGIW8kK2o8cTYqQHR8dwp6czwm byFYfVZxPztFX1I2OEE+PjA5VjJNKGNNbmghSFFpZHFoXmY1RG0jd2EqKjB+ODlHaHt9Q0xNUlNH NygkeHQKekNodVZSKl5VYzc5cTFubEpIN3IoQCU3NWVnVDFmIUMteE9ZPTV3b2AqaFpZcUx6fHsm OFlFRW4mYlZpOUtHPnFeCnp2I3hqK0RPUlk7dUh+UHE+NVolQnQhTDx9M1BrKWhVUSVzTiVlSk50 aSkxSH5KR2c7OztTSFRBSkI/TkpgRyR+Iwp6I1R0dVkrYjwtTU5XZ3RsUyFqJEEqPjFGbmlRWT9W TExSJE9rKGNYNHpzS3xDUHN5KnRzOUxYP1YrMyhZUiEreFEKemopS3BFdko/RmMyTUshOStKIXJq SHU1IU9lJmJEQngoKitsY0hmaEQ4M31LdXJ8YEpDdlhPQVQjfE5zaV9PVEdoCnojcldMJUUjQ0hG cTRIZiY+Z24/O2ZSN2tsd180LXVQOUxHVkpqZn10R2I2Y3g0LU12Tmk2YChUWjkrY2l7ekslWgp6 SklASXROcnFTNykkfDUwLWE8ZDc5dTcyaUR3RVBLVWdsS19GTEVscWZEWTh7azchc291SXs7SmBB U1BpZV5rTmUKekxgdH5TSEdlUFdkaE4qV2VKUkpheW87Q3I3TGpNVkdlXiVQKEgqfU5geGJ0b2Nl UX11OVA5OGNqXktXfm1CNE0tCnopZC16MUBJfDhVdmBnZ2ZOZ3xvc2otR0tvUyV9bndPbWZUPmh0 eXJ1VnlYSzwwUT9eS01LPlR7N3t0WjNgbEBDVAp6TUBOPDJ4YzN9LXExVXc9cGoyWjx0M3p6WiF6 ezZAXkkkNjEwcF9ePFV9JHR6WTMmZGU0JSF+cjZUWVNwJEkoUVEKentQdGNlRlJoclZxK352T0NI Xl9+U0I3eUt5Pmk7OCNhfVVBeX5haFpjTiUjRztfZWJALTQhZiNBVCZYeD0wakUkCnpiUk9pUEhF S1o/eHNLOzhRfml8fGVDRkRRY0kmaUEmXk5waEcmKWU8TzQoWi13cj0mZG9PbT5wO3A3eXBONChi eQp6K2UkUn47QldocUApRygxe0Fmazd0KE9QUDF2ZGJeKStoM0dnZWEta3d1S2xvaHApcik2fWBW cTNuPDRgQiY7aEgKejJJVmdObzIpa14mSWo0KWJwXjQqLXlFQzlIYT5qMm4tdGFgVHpFeSRmUlF3 T21XXypiJFFuez1MSlZTQ2RfUG5jCnpZZnxPPnNoUjREN0o3b202QW5LYXM+P3F8KU9nfFAofUxF SD05QExITlN0VT97eHd+YTszdDU8JShnKmxuIWEkeQp6XkxaPFZAYmw4ZDJsTUlvZT1GSkYlPnlD TEB6azMxWlp9QXEhNUU4d21Bc3RfISlrcGVBN1Radjd5UXhed0Q0KWwKelk8P2E8bkhQTlBFQVZX eSNzKnQ1WDkpPmw+YE82cTtTbDR9QGw9bnxZTW5qR09LOFM/V1ZQJVRtWWh4NCVHMiEoCnp5XnRk YTxtXlo5LUoqV3Bea0w9MjJ5a3g/eyhgflV3SGJqVTtDTUdoQWlPVlA8V2tpdkZ6ZFgoWk47Tl4m bVZwVAp6K1FhX3ZxWmYpR3tnTys4LTt0dUd5eC1HcW8oZFFnNkMlZ1Nja0YpdXIkRWl5MilvKHh7 Yz0ydmNHOVl4I2lCfksKenw4P2ByNnVfKF89bCV7RypSeGtje1RfUEplJkBIcD14RFh3bzFjI3hm RU5iLVc2Nm02aEdpWjg5Jj18R1pCZmQwCnpHLXI/UiQmKDhgOUNrJiZQS00hQmpkd307RHhQdnB7 Nys5JV59S3lLIUBZa2BMSDI+NWtIaUhmJSZJcmk2JktRXgp6SXJXTHhYMzA7VTUhSnJtMn1LJSll ZklsRDEtRF5pRTVUJXxueXdVcjExJHxHXkxvJDNIcT8rTk5UYVYrayEkbmIKemZ4UzhibWg9TkVX KjF3QFpFb1J4aEhqO2laNzw5JGpqNkArZGtWQnpiUFU3MiYzSEl0ZmVsc1hqOXhfaUhJOURGCno+ aGRYZj1OTyswdD1wO2ZCVCY+fTxIeCs5JXlHRnF2Y3V+aTxeOEJLKnM2OH1xRl9BO3pzQ3xYK3RI YHFBLXZETAp6bWNeZFRwbWFEJlpfVGIqQXlCRkchbjdMX0pWUEdvUm49NkZ7d2YrR2E3KmZ0I34l SnN0SUB8NXplTU8mWHF6d0gKem9RLWsyUFZ+Znk9Zj0lWmNxQlJIdl5ZJWBEaXViI21WX3FVRz9t PjZ2NDhienV6YXx3ZW90QkZOfnh6JGN2PzA+CnppeGZZRDRHK0JjaDk8fiF7Rz5AXz1HVzJjajRC TyFvejE9X2dJP1JHbXp9VGg+ZG0kbFREeWMhKkstY0dUbGJyYQp6eUZiP2doI3prOG9ZTm9iOFVe ZztoMCoqUW9MPjxkPSNETiFkUlY7YHAhMlNVQXYhY14qRkYlTyF3JUI4dS1PWmgKejJodUhlU3ND aCNGTWtjR148KXU4NiF4QTV5NXJoXylFYyp+YmhvJlVuIUl3T3gqaGdfWXpmNkh5NEwjR1U3fjc3 CnpWWjklJVd4THdnZ1djTkE7dG4wYU8yJnY4SzVAUFNUUityezxvZVghX2p0I0lWIUtVPXUmSm4p PjY9U087Klh1Rgp6NkxyJFRrMUl1PDk4aG47d0hlMWRWd3N6KU1LWiVjWjd8OGspUm1mOS1rPGRh WTx0OG1fYHlAMHl3ckUoXjdkcWUKenk9c0V+OD02USp4c2hnNSVSNihmK0h+UztQaXRoZXFsNDBe SEZ3cUBAXihDZ15pNHhFWCR+d05QcyV6ZGRXX1JVCno8TV4jQT5mcVl5RUM3UHwrRFQ0SGJTVWNs dlBHWkE1PWpae3kzTGxoU1JpSH1hTj4pM2haQyN7PHl1Ni1iLWNCNwp6Yi0kZ3psYzItNGJ7WlBZ dGQoeH51fjxoYHdhYT0kblpnaSMjeG9NS1lQcjwlQiljQEpVWnFsXyMlbiFTSyYtankKemxGXnJ2 b345YjspKHUoX191UG51UXtEM1ZVbCE5PVdgMkA+XiZReUxvWjU8P3RtP3pjUG4ycExiSTAtOz5t cnEjCnp3VjZTZGMqay1La3s+JUk0OHtkOU1pS1UwcWBifWgqI1Rocm9UZXJmOyZXSEhKdGlVMUN0 SHVYOGl1IyYxb0dVPwp6YGtDXl55dzx3eylhdDRONiY3dkF4OFo5UmRUR0x0d217RSN3bF80YWVa fGxGTVN+ZW8yYDZ8dENObGBNSns1dmAKenZEVkhOJSVRUyEpbDA5TGBZVW1VRiZ7U2Q5ZmUqIWRy aE4xfDZCcismZGBWNFZXfE1zeGBITDcqJHc/dXgjcTB2Cnp4UVA7Tj4/aDNrU3tISzZkaChAdEZB MGVJUX1pLT4jPl9AVm9VLXF4KSRkQ3pTQjBtNyhWQzJBJkA4Tn5iUnpGKwp6UUpJMHl2OE1oTDBm TD9hXiV5dGcmREo3RSlkUT9iRnVvWGNLPTcqNEs7dilpPzFnWjB1dmZJaD81P0M1VylvZT4KelBi bnFeSD99PncyTEVQQXJfSSVVO2xDUF9lNCRHWmdtan0/eFNNRShEbztxPThxQktTMCNmR3FoanN9 YGNGaD9uCnptXjJLb2hMeyRWUTRqeGU1PVpOZzlQVE9LYyhVUHMyeklkaXRwTXFaSiFyQVlvI2p4 dFBeRVh+VClKNyN3YFlAPgp6a21JR15Ka0FaTChKfGxSKmxNYjtDJlF4QzBUTl51dXdyJmNsTSFW KihJbUdSX1VVVnpuMHk7OF52d3NfSzdycE4KejRKR2ZaKyF3YkdIQTNpd3dJVjdOazMtQExOYz5w Nl96amtGQndUSGNrIWJKZlUyYWZeOCFmeG9yQipSVyV2ayNDCno9WkNabiNFP3dVeVJycVhYblk5 KUFGPTMqUG9UMHk8VmpBVCl5TmxQcWtNTUNqQ0M1a054ND9BbnR4OGImZDVKSAp6MipTPTV5diVP UWM9YU5aZkhLdnQpKEghOVF9M1lQSkpxcTtHVX4rJWp3aH5zZXx6P18xWVl1VEw9eSNQMnRUbjQK ejNFanZ6aEs8ekZtX3Z9eVUmeWVCJi1LSnxwaDcobXd1fUNpan1OJmRhKThiPVBDRVJwdHNPe31y IVV2PystIUp1CnomS003N1A3em1FVng8KkBrO0FmazE/OX5rMVhUKEBoTSNgSihgd0xVIz1neGZm fkQ1TSlWaHpuWDsweSlkZ2hxZwp6ayNUSjckNDBEPFZBN0taNSRTT3p2NEAhKWRhN3FTNTF3KTZZ V1M/NVJMWnFOfDFXTkdhYip5TGJQP0NuM1U/fGkKem48T3txdjM+YlVNXip1VTN6LSpnO0BkTEBK c1NfZmtkMlQoUlBtYkNXSDtAU210KX14ISV4ez1hbmFnREVrNCRUCnoqd05JNkdFR21XVlIlSzZm ekphdVc9cWtRODlpKDxMeE9PWT5zPSpCKmZDWDBQdGF2elMtcSs+dzk2bTsobFc0UAp6SXtXJUI3 VFRqRFFkQj4tZDs3TSV3Wk9PYEQybHo3TXo/U2pFcTlRTm9ieTl6JXMhWj8jMXBpWj4yUSg2Nz5t SmsKek1kI0pEVk0qWkc3I3lIVVohITYzZV83TmBNMCRmZiE7N0ZxXnB+eStNVihrPm9FZzhLSk5N UCtqRTh9ZFFeR25ECnolKU4xP05qNDY2LVhKWH00cnc3ajNwbylHP0M3ejR7bDw3TGVnTSU9KTYx bE5TTncrPUJ7RzJtSTNDY2xJTCZ7ZQp6KFIkd2EpPn1Bb0djYDRAVSl2YHVNUVg8N2NMR1Z9Pz5s XmBRYlJYa3R0RmFIYCRtSnUrUSllRFA9YStlK0V8I2EKenhUWlE8Z0xrTkVRNGByQFBhajJgNyU7 e3BHKkFgXmhab3tCPnBhbSV4YDV0YntqZyh1bTRkQSRwa2pGIzxHLSpFCnpwXnZhTj09KGNHKlRV VW50bUY7T285WHhHNyQ7WCNra2RzNzUheyZRMXw0eGleeUNoaE53fUttT3VSbWpGU05CSAp6OENz PG5ARnExK0RMZW1JRWZ9dzhlYWFIRFE3el48KTBsMlloPFhCRjVIdEE5aHU2PHIzQDdINEV9JWxJ QXcrT2UKej55T2ptUS1fPmZyfkIhSlAycWckRjJiPlZTOy13RjI3a0wxLWEqYkFDRyQoKjstKHlM NyNTbExuQntgMSRAYz12CnplQGh1NUZ8VkVNZD18VkYtYlkxRTdnKC1QQ3BGelZxfnt2eC1WM3pu VkVXaj12KFVBUW1yNVNYZVB+NERJOG1GLQp6ZDlJTzRER1hTJWs1anJGSkVefEhVZ19NNyp8RjxJ c01LR0loPm5TMCE0OG1HOTBldTRgajdlNCU3PERXMkV3JmEKelRSKTZsKi1KKnRXKj9DPWtxKDZH azhPUyM2JjsmRERwSjQzRTglPFMrbm4pPCpwMT9Da2orOCt1OURkNz5+UG5YCnpxe09waHBHV3Iw WjJ1ZkJJcDYyOXkhPD4hNDgzRThEPkJ4P09WNjVOVk9mP29SI1l7KjZubkkmUj40RTUjKS1YYwp6 XilOVns7dkBQYWI3Z1hgJGZDO0lQa3Z0T21oVj88TSE7KjVyeXVUeHlwJnohOE9HRiZsNER0ZXNx eG14cH0td0EKelBGWUkkbjhnOWJRMiRseV41SipWMmYoNSYjO35kdk1oWEkxXnRvRFJ1c24qQHkw b09DPDFyYFY1ZmhvblVDOUpYCnptZihuPldWWXF3I0EhQyRYUEd9MSZidUdOa29JWClUSWxBK0E0 Y0khMEdFRkd6WWd8PVByc1RmMCZ1PDRCQVhNSQp6SnUpR1VmQm5RVDFaUD4wY0VeM0lBPzRpfGVT KnhiN0BfNHA9U1dAb0s4MCFhVmQxe0EwUC1nWTM4PiVIKEFxTWsKejJfZV9YdTlkdDY/cnZheUVu a1VoUVY4amg0M05iQzk0WUNJVSQqI1lVblJ9YG53VyMhKT43UD9jKD9UUV8+PkplCnomUn40KlNR ZVZZaV8jfXsmKGp1ZzkhSVZ6QXRGcSN1Xld1PjxKbTxsdkgyRXV1aERMUmQrejxIP2IqLShuQ1Bl ewp6eiRmSi0qbSN9fnM7R1lqKXFJalpPZTl7cTh7MGs5d14tTHJ6VEBwakJNSkFmS2UtJG55KDlQ YGR3XkIwZV8xYTQKemlyfns+Jms8RDwqJlZ6VCgmRTNmP0kydGV3dmtCUiZrclhXbSlDKk5XbjZi ZlVidmdnPTNScyQtPmxYRiFiNWp8CnpeVik/ZGdJMXgmK3t5WGYye0VfYzYleVJtdUVkJnEwQWxi WF5UYEB1dElpd1ZkYWllKHJLWWIydmQwP2A4Y2U5Uwp6P0o+bVhQQ0VQaSQ/MC03Pk5pQjkxRUwr dGxNPG5yNmN+Rn5rdjk0Wld9K21MbCVAMkNOcTVUYThHRD5wVDxMNG8KekZrbm5oUEZQK3dSfVBC YHJzc1E3NTlRK0d3dHJhR2VAXm9uYlhhTTNGKShoN0kmfDFwQ2glIXpRUldRTlhhJTgrCnpvO1Ru eVN2UWdYPzBrZkJDbGV3Ujk4aj9MRUBKR3ZldUZmSD5jT3NXKDE/PnlhSXBqSyU1QDFEc2wyN0By dCVETAp6SGI2Jjc4YCZwUDM5YTJmemZHRDxrVXdHUC00aCl9Qm5IWipmXkF5U3JnNHxuLSFaZitp akhUfndjTmI3XztSek8KemVkSz5vTSU+d3BgaXArMlRSZTBwIWg7ajFzbkwlWlB4PzR5OFNUdzwx dnhWbS03cmRZZWFoJGE2ITBMWU5+fEhCCnpKbWdRST1TKXQ3ZmNhZHdyQjJ8UFNqP0o3XjRZOWVE K1dYQGBXfE4ld15EcDcxWT5ENiE3eyRoamQoaT5NMHAqbwp6JkBsMTdicystbkIkOGV1JHRZUHo+ Z1opKkAreE5NIXx2I2JHTyFNRDxAS3RyRkhZKFlHbH1xWDN7K1JYbGF9T3cKenY1JU1nTHY7cURL Wm4rUiUkMjZpJComVmdyenc2SEdXTiRFR0liI3BrNCo+QFl9IyU/eEkjeWRKSzxwXi1PTmtpCnp3 VGJfTTV0NHI4aHB3bjhecEFNU0BJPVghRFBONjtQRVZiKTNNKj5wan1KcSFhbXIrblNAPHJPWnlz Zk1wKjROcgp6VD54UCFvYUVtViMlaEgjZDRwaWw4I0VUZ0plSTlwQFNJMlglYlElcjtaRitYeVZa ZC13bnlaekwyQiF1U0ArQUAKenM8bX58JDVoMzY7RGF+YnVXfjwqeWw/KHpTam5OTDhfQUlwbldJ dzg/TSlgTmt3NTl8MWVUbHwhPGtrP2srX0JZCnpaWk9WK3s7WnR9IXA/KT1qPChUfmJ1fVpXP2hP TDRJSEI3ZG9ad0lIWGBgR3o4JEl4a3B3dD0pWDNkdCtneVRXKQp6Xm5ZVDhWWG4qZjRyZ3Q3X3Vi KEBGU31mdCRmT2x1YShsRmNMJn5YUiY9MUE4UkI5en1KPHkrMSFxbXZWRkJGcGYKemxLKSkyYEcr cG5aczx0KjxWV3EwVHVNVEBydko0QmxiX2kxNj09NCRgbjdCKVd8PGV3U1hNfiNZS0FrJGJHeTF8 CnojVm9BZW5NfGx3OH1USH1OXzRHPm5wdDdMNz1UalFIaSorJHsqSiV+aCZ6eUVhNW9mSjE9Xk80 PCptdkxWaHxtWQp6bmplJSsyM1RoSl8ycCZge0koYnViR0ohZFJJZWtZc1Uybk9NRXJANnJ9cWFK VXNJcmc8VEJMR1NyX2M9bjx4cnsKentycE5KKWV7eXJMMyg3ZFk1Q0NwSkV2S2lWVTB8RytsRVRq TCNNPjV1cSUmbXJFNXJZeSNQZXI7aS00M1UhdTtBCnpmfikoSWM/S2BBbChWO3FOSUZ4czJKcyp7 aSVqSnVJVV83OTRaZiljYWFIUChGcShoPzJAVkwwY2xKT15UU1Vmbgp6ZXpGNzxSPylCY0UyeyZs dXFya3txWkBkPCliOGtrY19+RnYoUzw5bng5O15OeSZMRn5nLSpSYUJOK0FLVCRiZXAKejw9YSha PD5mVjYyaj8wPUpqLW9eeVojaWU/QXBPP0wxPGlab3pVYDsyfXd+XntNNUlgTVIjQXoxTSFzfCVJ bTZ8Cno1SXdnP1dZI0omZk0lNy10PithNnU2WjVTdTFra2UkalhefT9rM1oyQHM/Xm9GP2NDYG97 eEh+LUUhflNrcz9HPAp6UWJYZkBwMXJuPkZnbSlDdlJjKTFPVkg4Ny1pOWVoP0glU35BKT5mOUxZ V3lUd1E4TTwtIyRteC10JHctZHlVYyYKekVvVl9lVDNVUkhrLUhgZFp7Wmo0bD8hakx3ZWc1PlUt dG94cm99OEg1UGpyKDZaO1MxdVhQKGgxUGd9dFIhaSYqCnpqaXp5ZitPR0teeyheNU1nZkltayVN VWh7Uj9QT3dYLT0rcyk4X1YqTElXJVhKT2t1SyVJWlVCJlUpSlNJOFZuRgp6eHA5fXZ1TGkzdTsj MXhFYG5hcmxuR3VxT1l+YVgxaS1HS0tJdD9jWjRQJnlHe2lydXhXV0ojX1B4aSlWQyh2WisKemhO YlM/QDVgRVp6WEU/SU10Qz5pZWdOKTxjWCgmaUd3c0NpVCQhbVh6NTtJOG4pQjhYNDxxd15VT0Js dVomSWNDCnpfNmNVQmMxQDF2U35aRUYrSm1YSEEhd05aN3p5V0toMXZlKEklO0NQKjRUSjh4R3wy UWc5cng8eyoxRk1EUnRIVQp6TTdnIU9SckttdmpWOXtBVkZYdVY3T3xOM2hpMzx5b3Q2MWJjNUgp fHNOYz4mSD1YNX5mMWUpbVJIP342JGYmXzMKenkxJmpMVGEleylzeVZyblZiU2o4LTBwU2V4fFhC T0lGM3VVU3Z9ejtuT3RlYG9gckBDQ3I8Y1o8JUBFY3BHYGs7CnphMG9HQGstS3Y/SSZ0eEd2WXkh eiFASDd2WCY8MHkySWtURUJXS3UlJFdAdTxTJU8jU0dyJX19QnB+N1c8YiFeegp6ZC1TbUdKOV5O aWotbFd2TUJlVTVDTEJ3QUpPNSs4aVBqUH1Ib2dydW96PnRVb3RmVSFBfH12YyNSYFlCTjNAOTYK ekBzIURYdSNkO1ZKb1NLYi1fYEc+NmJRZUxZT3BWPG0pO15vVG1XX2opPH1adF5IMUAzdyQwME5y cn5oNj9NUEZkCnpONyYwPT8wMTNoelBgdUdsZzFSeSh4TTEhTSUxc3VrOG1NUFQ/e1VKO0FxYHs8 RFoqNVBkUTNDKHJ8WE1KfTdmOQp6RWoqYm5lQVdKYkZuY3lAKUFLWVNKanI9Qm9JSGFWaDZrbm9X MGA0RF5RbDkheXBBQGZBbjUxSypIc25DP25GdEYKelcydURSKnNBKkxwMj8+TFQjJHVfb3xzKyFX WHkhLU98NTN+VkBySW5hbFlIP2JSTShCWW9Ibjx4QkgyTG5KejlNCno3YHl+IWQlbnNHKC1Obnpm TWpJYVJwc0JwblpBOGRmdmtFPDY2QFNnMFJTTChkPWRZd1Z2OWo7KFlWbGtHKmo0Zgp6IXI9LXZi IXAzfF9xJCtfPkQ7Jk9RYjlpc05Fd0Q7MlV+eS08ITx9Jl9RI21mN2pDV1BNZFhuTT4pPDNeUHAt RGQKeil1aXspMmktMG1jWHdzNnhoV1J+MT5KNDgtTD1rTUllbE4lWSR9NE84YGRIaTB0c0d+a0Bn SDlOfXZgTFZJOUlUCno7WGhAVSpfY01YaFE1I3wyeWIhYzxFKUIjdTFRZj1ERU17QCZQRihGMD1J Y3RySHZsYko5SDRrZT96KD5HT2ZDagp6XjVhJFFqRldISyZpIVQqMzxUMEckPiErcCtkI3c2S3c2 Km0yPHcwKW5fbH5nXn0maWhEZz5ZK20+UkYwZmAkZkMKeldNWmF+dCtvYjR1NHI8TVFlcDU8b1Bm JlNZQGQzSz9ZMnYqdEU/bHk3b3hFLXdqVU41RkwlcDRjVWdVJm4ldXMrCnpVYHxEfEl1VSo0ajcw XzRPYig7NF8tXnZIT2hvcG1ZYT1BSDFZd0gzbl9EOG5BfWBIRVNhS25mT2NjWUw5VU9sNQp6Unc7 NmYkTkBZRDtsT3ROeEkqZzRWWj01PlRIVClhdU1Idmxlc21sMjlReDdVNVM7OypDbSp8aiFhZj5k Vi04cHUKelVtZmVIRHhFaT4/bFJzPSR7a0krbWt+QmxadzhEfkh2PSsqJk1jT0hQRU1QfW9JVzdu eT8lamB1QjJ9ezRtK1dICno+N3czSFZSaWpzTCp+fXlTT3gxWlIyIWNmI0FkMXdmX0lsQmA9TlFt Xl9Dfnw9TnEyUmF1XnZDeClKVFdBYWdfSQp6ciYlTnJpcXkrYz95TEghdlcydntuRzhlSyFGNCRN VThhcjMlWTN1Y1VhSHFPeiRUKkthMU5qOUI+djk+UGJKbSQKel5NY0MqKHJTdlUqekpWJT97aFMw YztNX2RrXlZ3dHd5UE47S243WUkqO1lEPC07JCo3bGU4Rl8jfFl3eEE+YU0mCnolRXEmVj4oPVpK dCUqOFZ2Mnh3fTc3en5kSW8xKDcyX0p2K3FHfEkwP09heCZSQFVLZyQ2Nylze1E2WE5lUlFqTQp6 YXt1Knh4QmZRQDwqKzJKWkNOOHs8IWRSNWhtc3JHVHtEYnBFPXJIczwpUC1kIXRVZU5pQCtBdWht WmdjSzx+RVUKelpZNTQyVXY1Nn4lK3VQbHsmeyMhWjYmWEp1MFZSUExMeWw9aWVDbTl7QFR+aHop UzxnbyEwcExGNiNpVVgkTl5YCnozWTY5Xy1aZ25pZVU9YUJHSVRlUlJaZV5QaFlNI217IVFhO3VX YHJxQlZpZnRDJX1+XzRpe0EjQG8yTF5OcEUwdQp6a2ZKd09uKm4oX3J8fTZOeU1pYmNwOXx9aVE3 VGBxIUkqSWJ1RGdrYT8jV29SSFNmSnxXeFVgMFcjMz9MZCReKHAKelBYWk0lVUxCU0VMSyNtRSR9 RD00dn16Kkc+cEs5OHs1RTRHR159ayF5aVpuNWhXfnAlcWN6cW87PEd7dFJ3aHEtCnp3XlBBRUMj aiE/QzxYZGVle2tCLUhHOzk/VFJNJSM+ZFIjZlZgUip2WkVNUkduMzU5SlUtYXRXIVh8ajRtXjxv bgp6MUR1I0FPYnFyY1NKUn4oP1JEPDtDMSVacy1xfGwlPitUUG83dU8oZy15NGRpRDJ0NztIX0Mt eHM+cio0V0puKSEKekpkQHRiKmJ3UiY7VjY1LTlTVz5SNCFCIytTQyNScF5PPWBUaWRrNUtKM1Um YzUrVjd+c04rcj5KPX4kcGVwY09yCnowSysjdmVEZTBXaFk4VENSQ19Odk5lb1paTShIX3xWMCVt eEdtPXFnZE83TjR8QWgmM0hZQCtxYmI+aGc5KHNQbgp6KDNSdzhxMHEwRV5+YEEhRmxFWClYPTJl NjNzT1grb05fYitkZ30wY1ArfDdAa0JsPDtEVGdhNyhUb01VZW9rKDMKek0lRWA5RTwlJXdRKDMz cDNwcEVtPy1eXl5DTVJjUHhFeV9SfEhgRHg2OUEzQTBZUSM1eUcmTS1wISs9MWBqdHhwCnpkeW9E PjhoU1koWkBBP34/T2MxNVc4RjI4KXFedXg4SEtTMEIlc3JHMntWST5aUn5rWSU5djNAe2VjIy0y cHlPQgp6N0RBczR5JGJDJHlFKVQyYjRVS0RaI3t0dCpyVD5kSDdtUiZydW4xb3I9JHtnJVNwJD9T VW9EPFlvQUdKRXB4eVMKejk0YnVxKzJTYHhjc3xYd0EraWFoMEltaiFDWH0/YHJyPTRSbm8lMWsw ZDg/YjtrSk9GLVBkZncxUVpQODg2KkswCnpkKU5YKHMwUEY4S3g2fENtN2V8blQxPytyVGx3ciNX QXNFZCltKjlKNHw9ZDdoT19nT2dZajkxNHZpWF9lSCkzVQp6STgrNVpWYnArQXVTUnBxNGBQcTxE RncrMVE2PWErKXhvcmNlPlBuKEQ7U1VSdXJ6NE95aWctUlJXWj9MVHN4d2QKeigyQUZkSTUtKTAp d05tVz87P31VVUh1QXNHcnp4TC10MVBvSy00Nm0tMDRAMm0mVkFHRzNYUlkoMHk4OEgqQSR3Cnp2 Uy1zMkAwXnRRNWVKI3ZYZkskWkd2ZllhIWRab14kSFozdTl3K3xIK1p+cHZKMENxcTQ7Qm5ZQmsp VUQzWWNXPwp6YlJwdl9tVSM5X2dkWH1CPiZGR0doe1d2azRFV1BmMSZHVUgkK2hGNypqQjMtIVZy WSslNVpKP0wpckE8ZyNYN0QKekdQIzgmP2cqcFQ9cTteaSpMdlolLTwhQ2FsYkVTSEI1NDc+ZHQk Q1oxSWp6eD0qY2A3d0x2MV4xaD4+V3A1JENfCnpGcF8jflNhbVZ6ajAoTHRQb1NqVW9BczZuYjFx ZkR4XzwtbHlpSllTOSQmVTZucUg1cXslSlZ7MytLU311fGhRNwp6bmptYEgqJGZ1bTRHRVNGVldN dTxiRm8wNWl9cldwWTN2YlFWV2ctfE9RZEZrVVI7KHNWQjtlMmYhZWJETHdwJDAKel5MNmRDem1g Z01Ib219Sk1WVy12K0xQQyFgbER6UXdPcDZ2XllybDU9fW4jVVJ5VylhTyRFZVJWczBiKEZaNSlC Cno1UGZjfXVNKnE1LUNYSlpZUFpDNWY/fihYcit3M1UkSTNoMWJuUiEza0NSMUBPZFo/fHZ9cWlP b2ZRQ19zakZ1Vgp6NWVrS29BbHNgPHJZJEwoNHN4TTMqWUR2PSE4VUVRUCl4eUs7WjllMiYkRTJm PyhPT3grR0kxQk1lNUd7aFRIamsKeip7JDNLOWg0SXlCeCRROHhaaT1KWEkjPEopfGdoP1BeNkJ4 Z0c7cXJQPXE9PWQxQ3pHQkZSPWlpaX5jU2A7Xz9LCnpjOWg7NEVneGk0aENsaFA/VkZPIWpNU3lg fDMrVCZSKVc5RkBSbTRXVmglMVNrbXtueGJVR2JRVXtXb3Bzc1A0dwp6dTV1YmdTKjIjPGByaTUq XyNaOU51ZUR2e0JtLWFATk9CTnU2TWA2RUgqU0MqIzEwKm53eG9oRThWPVlWQE9odk8KejFBUGdu djRsQEpVZ31MdUplMmBDZktZSFZ5TWVQKlMjS2lJJlBOb1lkKlFBUjRiJDF7Ymx0bmBHOXQxb2s2 ZlJeCnpjI3JRSHUwSClwYTtfPUhUblhsTExWUjthRmt4WVVWb0JqI0A5JkN6RzVyOyZ0VVhVaXsy UnwpYFZwVFVJPVRlOAp6WXd7WmEkeGBRb2Y9V1M1OTtMSFowaDZUbXBVcWdOdDR8NyN5bGhjai1j LUk2ZDF6WmtPMDM1d1NafmltMTNEY2oKelF9SzxtQkBaVUVNVkYjUFhUTHZlSSg4T1IoMm98TjEm SWJUdHhlfmVVTD8jbjlGXmIoM1F6cWhWO0hzNl9UNnRjCnpSZTIjNkAqa1Jpbj09eWZENGJQO2w3 PXBvdil6YURENzBCR2JpTEc9WkZ4QVZlPGhPWSFYKXFvZ25ja2Q9bE50Wgp6TDtFRGhCakdsV2pU Q0hFNHBJPSooN2UrcUs8MyNeLXJNJD57fi1IQShYQXRId2M9flU2QzxFRk53KXg/QEAySiQKejJS aDFeU191aU4tbj58JjZ2eHtpbmtHZns9VXo2bm52NUw+M3xkZjZVMUhraiVuRUBHZGNZVEY0NEde ZENfTytoCnpZK3ttPWw3QWZhQ2dSX3AtYjlxY2ZnWmVVU3JSPVRiOGQjdCFWU0pWOHhAaGJYZ2M1 ZF9YTm4jNlk0N3VyXmkhXwp6O2x1ekNYRk07d3orUHg0ZnIxUio3OGRlUDQ7NTRJKm4zaCVCbmV0 WE5DYFVhfDlYYzVRelF5UXYoc2g0elJQSFQKenNAZUlrKUJwYUlBMzd7Tmw4PThZXmQhe3BIXita cEYyTTl0JGo/JnRSM2RwfFRVVnJobXFHVmA/KHJMUHI5ITRYCnpQSD99RjB5V2BLXl5SU0FkNWk9 TUo9fkVAPzVma2g3YTtLKWByT3EzP1ZPd0AxPWFPWTI7cTZvQz1PVTdNMyZZdwp6PFZIZUtSYWJ8 anM7WVlXaj9+aGJwWkJsMWArRXwpakhyfHJ2UT0oNChucEolTlc/P0pYfnk1Nks7NCtESkUxKXYK UTBnJTVoNSg/cktxSSYtU0EzSSFwPWx9byEKCmxpdGVyYWwgMzQwNjcKemNtYlRlV241SFcqZnUo fU5HYnZYNX43c0UkV1lRSEFkUjRPREdjNCtMbnclcDxqQEB8QmBwbzJOVmcwT3tpaj0pCnpwJjkw RSljMUx4LSNPb29VKVp6dlQ1R1RTLVljJkF5NiREOW1XQzQ5UDVQVDQ1UXQzcSo7OCMwMnA3MS02 fVVrTgp6e1A5WjNJfEc0bWZeRnNId1VwKU1TK3Z9b3QheTJqQVB7R35nfU0zWFhGUXhldVU/cyhf WTg3Iy1Fe05UZSlsZH4KeitxfUsyVzNaISg8LTdTMG1oNG54PEhmc19pKFNEfjBuT2JWSH1iKlRw I3llZUMwXmNKaWsleDRiXz47fHlUPE09Cnorand8O05mWkJCNSl2d3N2eHVgNUpyU2t0QT4xNVE8 PlAjV1FAc3dGWmR6cHtVXiU4XkYpRjtWQTtXVGteRGN9MAp6NiUzfjt2QlFDI3s3ZD09N0hid0ch WEJEdXA8Z15AYzA2dig1UHNKZmRadmFgRXFnVDxAKWR7bFlwQlRgKG19RVMKelBlJFM9bkorJE09 LWpOcXlKSU52JHYzWjQjXyt+Rj0tcDV7PEdYazZsRnwqKGs9X2xVXlBtZShmZndvfjE+WF4wCnpy K3E7S0V3KWJMZTFhPTReMEhHQHgqQG1yVmNqI09QNjRvaXJjITU1I3xXczl7RWpvX3ZOVGJNcXhs ezJJTGlMPwp6ZmUhUDdAUXska29BKjx5R2VjZlFOI2NlMUplRUBuNmRxQ0RyQFFPKmhWfiYxK2Mo REgpMG5yRT9OMGAkWmhUdkYKemVRaj51ZFY8QVQzbFMwP0UwZERLSUlnZip8NH1SIU12SiEjSU1h b04ydmsyfEFJTE0rYnFhaW9FWlowUTl7VEVQCnpWaXdNaGU2Szg+VXFrdFA5OUA4SzFwLU88aHlq PDVQPil3RUs4X0FmP3FXV1l0YmE7fjBvVHtKIUteSFFpZz8mZAp6dmcpZ0F2QioyU0wwTj9PMW88 QWJPNUoyKFZVY2pOdj1ZO1BzYCMldUBKb2BfIz4yeCEzPUg9Nl9VN3t6O0IkN2YKejJKPyVHaWg+ X1F6el8mOFA9ZVJwKlU5NlI1M2lIXmdUSWFacExVKT8tN1ZaflR8OGBeb21qNWhlZjhTZSg/Z1Aj CnpfNC1Cc15ZM3B6cCsyXyVfZjFhanxJN2ptMVliVl5eWWM5aHw0LVhNUmYrNG5WcF9JN1B6VXt8 d3ZKRkljaTxnVAp6TGlgWWtLanJeRlB5WCo0fDVyX2V8NWEwMTtENldyVXIrd2tsbUs1RkBWXlpE PiNhWGAwZTRCPWxtUCNhPiFvaH4KelhBdFdOMD9CfXNwVVNAUSFQJUszSGg9a31fNEwzalNtdzZl KU99ZW1DQGxleHpMc2t6ZnM0YHl5LX5mN3VnbW9WCnolbGtgSmtJVj4wS2t2RjE9Kyt8alVOY3Z8 Wnl2RmhqVXJIZUUqc0F7RXdyUDBMenhCVjNZQyVKLWwpN2NEMFYrPgp6TUxkMWh6aDJaYCVEb1hL PyFLMSF6MSo7RkVBPDFWMzx3OUdRWUtlfWMlb0VDc2xTc283PShMK0J7LU94MSsqQ1UKel9nYVNX NGghZ0dTbnw7UTJZK3RKZkk2KUlSMDQmRmFtcytTaGA2KWw3NX15KCVNKiU1ZC0oZEUqakNYOUZr ZCRlCnorXyhFR2dMeDg5MFlpJHxhYyR6Zj4tKG5tP3x1VWFNYHBMZUVTQ0lGIUh8ISpfQEwob3Nn WnY9QWhTeVl5bWFvVQp6ZkFzJEtPREE1MUpjLTE3U3g1fjdaR1dNU2kyWWs4YDNCbEhvZzAmfStN XnVsdDFacHZ3UU17IzZuOEh3KGJAZSEKelh6JTx9Z1h9Ynx2Q3ByJkxFVVFqQWJ3bEBmM31ILXlt Ri1JTiNte04mZE1Wc1hHfG9ZJChlV35rPTkoR0pSbV5+CnpkT2h+I3BMTCZVTStDNkIybTh9Q0M1 M2dXaVJWWSNkTngwbVYoLU9BPz9iKntAPUpAPks8Z2QpVzgmdGh3Qit6Ugp6P2dybUhzSlY2UkpQ PENGX1U7SWUkSiM9VG9+Rz9XVWZeMj4qanhjMmQzcHJsP2V1ZXo7aX00Mml+PmxAbHomcGAKenVp RytsY1c8TTFYPjR0NlM3I3h8VGU3Q1IxM3NiZTN2YjVaK2BZZ0l4blh8PTdEMyQjLXRYdm5TdS1Z WklyQWxeCnpWUTJPOGNCZ09yXnteUiFDPVFIel9jK2NnXk44VU0tK2pUNGl7e15Nb2A3QnlBMFk1 WEo3aUhUZXwqUmkrITBDcAp6KFM8XjBCQE1nTzYjPD1WXjMxTytEdz1RZ1NNM1RYK3FIfUxlTEF5 OEI7VkFOWjArJkVZbWZATS1gUTE8U25QdCoKejlqP0QrJFMqZ3dTZUZ6RGByeDZkVEQzWnA9JjY1 STxyZzd3MHhQdzFAYTRMRFpNViRzcFhNSjkmTmpOUWM3KSkkCnpaSChrOyEjdzd5QTM2JT0tMTgz NDlJdUl+d019TyFAcFJ5V1hISUdpWk91M0ZXV2VuaSRwbVI2QT1TbitOdUh9YAp6NnNEfHQ2ZyEt Wk1uZCh7ZWlDfXdxaXRtd0hCNWgrWFFWdG1vXmY3e1M3TTVIWmFaVFNzT15WPzthb2IhSnJ5UisK ei0lIVNGcDgocXw/fGJiYC1TQE0/OXtnbVVuRmoxaVdMTTgkZlMqbnBJVig4UEE3TDxoTXxDbDQ2 P2hSVnZDPnpuCnpRbF5iXzcyWSNIQnpNemxncmBnbElyPEJuIUJpJEVzbEYtU3o2cHUlX15sdD1h bXpPflJCZGtgX1N8dE9MNF9WMgp6Vk99bjV2K05vQD48IWNsPVRwWD9ObHQ9MD1eMmg7dlMjWmUx S002UzckMi1DZDNnPkJsPjJKdXNVTG1TelAkfFgKejhZKit5U0phd1p5ZW5TbztMdmMhSmJyUEBY TT1RM1M3KVN2bERCZzQyfDg3Q2NjZippJjRLVno/c2BhazZiP35oCno0dCFDfGB3TyVQWkAoO0JT eX0wXmg/Qklee0c4K1NBRj1QeyFPdHhDcGZZSVd0RSt7d2lifSQqMmEyaVByPlBHZwp6Szd+UF5v MD97Q0chP04panc4QGg7JTJtVkpFNGppM19DVWNzUkVtITtZTnNHO29BT1dlN2cmI151amtoOWlr YSQKek1lb1RCdjs9O2ZRJCtqe0pQMzdpVE5xJWdLUn5ueXN5QlUmMjt9N2pIKXw4WDZvbHVJa0VN Zz09ITgjaVJGNTtvCnomWHs4S3o4YzU+e0o2Y2JgaGtVRj9yTlN9R252fXhxIShkeSsmIT8oO352 bXBJI0tXZVFBP3BtKVZ4QXtKeHBgYwp6MzVLTXgwY29QeyNyR3Q5TXZuMVUqNEptYyY3ejk+S2VM SndnOXlwIUFMYXhjZXV+c3JYYHtZQm56XzBLKnN5enUKel8wc2VAYiRCdil1QWNiY3N3UCQrT2Yo UXckM017eD4pIzdJWTtHQCl1VyhGb0VJMmBfc3Q+PX1scyZhV25ORnZyCnphZyQ4JClaJFVyRW5S a2c3JjshMXhJd093aiY3UUpZM3V2cms+PT1gbkNfREcxSFdFNjZHTm1iPjMlPylMVUReewp6aXs1 YDYjbV5fUmk2cH5DUm9qeXpleGhyQj0wWnVlU05RR0JDbEh5UE00Sil2bilTe3tyK28/Vnozc3N0 OEVoNzIKenV7QDhMRFdDbkI/P1VxQz0jNWJ+XnYzaEVlelU5QlZacGdDc015cyQwSkRySlFOdF8/ QUN3YlZ1UTZGTVhFQWlDCnorUlVhIUx8bDs9JVA1fVdMI2NsSUtRQDhwNj5+V09wWTBtbiF6Z0xr RTdWdkdPY0ZJYkRFXnY9ZH1+MEI+VGFSMQp6ZFRvRSo1P1J3UFBsP1dAJVlyNFMqVn1oeTE7YVpw VVlwKTNNZk1aQTVAO0dDVSpTZT9xOXpzalF2NkxYV2AmMnMKekdAUEojM0hGMSNpQX1NYFIrO21r OGhJXyZiJGl8Vi0lMmA2QUtleDdBcUgkSzdFLU4rLShrQXcxb19ZNnNoUFg3CnpoenRgX211NUZy UHFkKTUteUhNKC01dTwqZ0gyVHNHeCRmIXV5bEdNeU44bH5aflRmJl5KX0o1Z1U/WCM5Xk05SAp6 VVplVXE2fkRZVSQyMUhab01gRz1DP3dHZChlJDNPNlZPZ0kkcVZOQFg2RnhYOX1QJTlFN3leT0dv SUlpVGcrUFAKekQ+bDNRIUFiSzN7azVae2R7cD18Tl5MMUFkTWkhUmpVU3NReFppPHZ0dTFMdEs8 Rkp+U2dvRWM5PzVSZU5Jd05WCnokUkBXeW5UU3g0b2xHbkFqJkMmNVhaelVOIXw3RjZueXh5MUZF O1FmJWNRUWJyUz9RI1hKfjA4cUVGKkQkKUFETwp6ZUlvI0tnZzghempoeHpkZFlIRzhsVFBzQ2FP QitFSWBBfHc9ZklKWGxpUjQ1KGolRDMzN2l0MTZ6YyQyX3FQO1kKeik9PDM3dH1hQj5NPiFRKDQ8 SnZzY2ZCb2cod3U5fmo/WUg8WXErXjheQkZMRVR8JjJ+QHc3YUFBMlpfUE4pR0c+CnolZCtJUlF1 LU9aOXN4Xz0mP1JaI2Y9MWZkJmVmfG14MDwkJXBrWnRFJih6c2dpKCgmTT98dmNhK2ByTXxuaH0q fQp6XzY7eXlVRU5jKzQpPFk2aiZ7dGhhfkFFcUdSUzRHNXBRTDtWTGJ3alE+SV9WWnp0PlNQU0hQ LWhiaUVUJH49b2AKemhnbXF8dn18NUY5cksqMngpWVlwe3I5UHVCO2VLZXFrfHNEK1dRaWYtayoo TVdpeHpQRnFSc1RiP3dyVz8pOGMlCnorUDFZUS1BcmJ0QWh4M1JgKmpRNVdUTmEjT353fjBQSXdk ZzsmSTtEa3F3LSt3N3RMOWBqWS0jVzxvbHZwTGJYPgp6KVhHZHVZU0Y7YD83dFg9akdZQDg5MjNL eXhTO2tnRURgXktvbmRYaTJ0aUdBQX5PX2tlayM5c1NvdlMwME1RP0oKeml7VSRjVF9Re3FjMSp2 I1h2YTIzLT1rfmRsXm5gNlgqKmxYZkg9KjVlWi1aSjIrRDxGNjkrZjJuMW1jTkgoR2JoCnpgSF5L dXV4U3l+Sk0hI3RMVHRFdVErTjwte2dmNXE3WHtVKG5BbHRkcEJ2Kk0/TCowSll9T3xBLUIrUEZ0 O31YSAp6dzFXWEd2PUF8VUw/OEdpaTx+ZXpTP2BPd2Z2RzJHZndNK2hVM1Q4QD9FWVBqLXgoKSpK KFl0ZHBlQnRrcm5ZQlcKek1QVzAxbzNIUSthXyE5O0swUHhuK0twUU1Hay1aMCY0SWxOO2A3QClH TEZLOGV6Ry18UEMmN3VZM3M4YiR+ZEs0Cno4VDhuQlVaVX56em9efENpb0JXUiNfdis5WWlnaktw Iz1FX2pIO0BCI3BUay16YDVfbktOMHB6K3VtPlg1KXF2Tgp6JFd2O0AtVT52SUN3P20tTWJxSHEt MU80TEB7dXBEcExwZ0YpPWcoNC1SSmtpWjtRUjVWd35Xd1lvXishTWFoIS0KejZ7YHBjKGR1Wisx QWpfJWIrOHYhaU9JcjZqWHZxQXhaPmMyb150PmMjYmErT257N3lRYF9GRFRjO310TlchUD1TCnoz fGdNam96Z14qJT5GKllwSHxoTUBgRHQmNDEhenB5fjlmQVpZWkk2WUhVREU5blYpbj0wPkwjfEdB MmRkV0RoKQp6Mj1Na3JefiUhTC04IXw9ISQtU1F7ZUM9VTUhYVlYJU81YHpBR0FCdTBHSVNYP3dQ akVhZkY1eztuRzVwP1hkUCoKelRPRlY4ey1kNiR8Ry17N0BqWCEqaiZvV1omIXFPIV84VUhoaWBE Klp6MEl0PiEwPXM1ditpM1AlLUNKUDxOUVE8Cnp3RHBUQlEwKzFDXzMhfE5HKEclbnFKZypoQSZH O0lqeEx7TGtTfTRhWHRPelVkNn0+OyhmS1cyQFNIKSE0JUx4fAp6YiNISSl1YF5EUl8wT2g/SFE3 SkFxRCpjKk5rQTMyN2F3IzF7aVQ5fW4tNEJqRCUtPCNtJEVeLTNPJVFNXjE5X1cKekYpeWR0e04q V0h4R1BAKVpFLW9MPE1gPkZrUCtkbSZRJUZ0cjQjK0AxQ3NBYzA1RXZpUzkkPnk9LTk8NUlHLSVK CnpyX2h7ZT4xJX48WmBVIUxyelF0a1VBWSUqUTJlY2NnUmVySCtUMG9tcGdzODJweGE4fWNMe08h VHkqKlMlRGlSYgp6SGxldkl6Y3NWYlpacjNDN20heFZ2ak4kRTA1U287bU99PCtDd0NKd0g9Q3w/ eVlEYWwxbVNZMTElbnBmSmc8NTEKejQrekhzS3pRJklpQXZ9blNsZEJOI3B6MWdrcld+IWNLcWZT elc4NjtKRX1USEUhTUtUP3RjMFhWbVk/cmNlNDxfCno5dEo9U3BaaSpgS2AhJSs+d2QxM2NXKGMy RzdrUUdrYDRKVkc+NzQ5UVctKCZ3WkhnSnREb1FvJGorQyotUkV6YAp6ciZLSlVjZzVjJXtgSTAh Q2VpfEFjVUE+RnpDJCU0Snc5RCNBYUlRPzIrMjtAWi1HfFYqSHlpfD5VVS11ei12ZH0KeiV9cT5p JCNoV1F2QEtuSjxXVFgmI2ppY2tSOD50cEokO1h7OWktQ3daYTRGbVBAYXA2RDxMKTIyQWdTSENh ZHNFCnpTSD4kRWd1NjwhY3c0NWljUGg5Mz0wPSl5NDZMYFZSQkchZlU/TFhpK2h3SkVZKTU+cypG flpWWk8xMiUyYV9AIwp6TF4heDBYMWhwOEhZSEJRODlhdXJxKn1DITIzTj09Nz9mTCNwaj8mejMh cmJ9LXZFNkVDRypfKzZVfV93MVJARWMKeileSllkemFEelkwekBlVUExKGh5N1Y1TT5XVShwcV56 MlZgTGlySWxNQz1hZVVVRkdoVDdxWm8leyNyZkwtY1ZDCnpFKFhSP1pXZ0BkMX1LeX1vNWY2OWBi JjB8RmM5dWJjQ0FlZzlII2szNlJFUztsPjsqZzk3Sm1UO3pGdClnNjE7JQp6TGAmLTghKFp5fCtf Y1FCKEZzYip6T1FHQmw8KVJiRXQ0VXY2N0VlTEc7PlVEPGdUJWQjSVpAeEh6VnxQV2JZenUKek5M PG0rbkR9eHdCVn0/UVFLfDhQcVQ5UnR6TmduanMjOCpYZlVCMTlZRSs/K0ohaEMtVUJhdENMJkxf aGEtLUU8CnowKU9jOT1sY2N6dEdmb2BoMDZxVWd8TWhjKFQqc0FtRFB4QklHPVBINHthXkQ1dSRm PmhQeFN2ZGV8JUtScSF5Vwp6I2pYeEtYbVZDdkU0flhvVl9oZk5HI2UpfCtCTGokP2V8QVZ5cDRf ckh8Y0VZZXxfUmM2YEJvT0hYaHpWbH4/V08KenMlMTZra3N8fmRzSjA1ekF3dHBhMjRDKV9WWWJ9 UE1xNG58SiVVKmVHP2JJKFZgNikxcVArVUVDRXlwWFg/bjNPCnptQCRZIUpYTCYybF89WE5tKWde e1Jhbzx4aDB0SjxXSDBmV0tyJn5xZmhnbz9lOGhVfGNla2g4dWtHZlE8aml3Twp6elYpcXJgM1VJ bzxVTkNgYiooZFIhJnUmOVVTRC01S2FjbU03cFFNejRKeXk1SHVvV21KYmBkKCgrNiNoKH1MeVEK ek0zMVBZcT1jVj5MZ2E5JV9pPWo4SExlekwjfEpYMyEtaTkqPGg0b1VCNDRkWCZlOWNTVXxlRTEy XzJKSSRTbUk2CnpXOClqezdzNjRIeDRwfTN1YEN4K05Uc3l1R0ptVGtYdnc7JW5PeDtLcGlWZyhC M1cjbW96QVlxPWZKQEM8TG1Gewp6UCFUMjYlSjJJKysyM3ojbCZYayNDIzFrQClwKl5hT34zNTcx U1Z2QXN4aWZVSmV2cTxVNDB3ITxFQ1ErX290ITQKej8tLWlGJUNobXM+WHEjV3RSXiEoTiEtWmtu RERkKFkySy1UeGgpNDJwWEB5U2cxfkgtX0MmTHRmNDE5ZCpyeFllCno3NThDZyVobG9WWE8lWnBu Pil+a0U5cmFhSCpmSGpaTTVYRlh6JUlkKGJrbCFFMSpicUEhcTVDPlRSOVRAQVI2QAp6M2FGcykj PlR3RXIpNyptM19NWmspO18lUktvSTZnXzNsX215VnpwKGFAeHMmPDdnJCleKE89TmNYPDQrJEUy NjwKekI+SHhYaUElUj16TGAtWU8yUz9EcClXKXZ1IXpTb2dOTGxXbWxWd0daNiUpZV9eWjBDdF53 cmE9bV9GeiZ6V3glCnpwVFl4PDdGRFNBX0Ngc2teelR5JEN5IVJeP1V+eHJNX1h8ZmxaZE9RVHpa RGh3bko+VHd0S1ZTVU1hV2N3Nyk2MQp6cFJudUUxbG9uQmY0NktEJHYqJlJ3cn09YmRCan1XajJf cmBOVms0V0dAZSEodTBgTH4/SjFhMTh4RkRUdU9hdzMKeilmfWtmPil9Qj1eRUo4Tl8rZnFBVDI3 czcqekN6PGtVPF81ZCg0eDl3MGw8cElYbkZPJmJ+cFAmUD5jcVBoSEtGCnpPYEIkb2FpNVd6O2Qw aWBlUjVuV3B7PWloNlJDZ2BfZFhAYGVzfD5FUXJlSFYoTysxWmxZemF8TERwJD90SkNgSwp6V3I8 ayFRWGAoN2JIdyRtcHBIPVlST29Xam96VkExLW07JUJhR201cGBhTDh+OSNsSn1lRF9wXmdPQShw VzVTZCsKenQkRXxeKEA4KHI+I3BeREJxVl96MjZrRVluYU8zdXd0ITg+VjRoaW0wJDRlYm1iMmo1 Vl4zIX5qIW5wM0Mma1hxCnowO1Y5ZEZfPFZNcHVYKkp1QjdtVW5qajwrNEh1Y0BPTHxfYyNPTThz cj9ENnpiUX00KHklNUgpU3dWOTFpKH1xdwp6dlI4QCgpY3FkVSR3RW9JZUEzNEs3WX5DVDFrM1BK eT5zfjc/YHE+KWVRWUdEWVJgc0laNWojbVhwbEo0NGk5KXUKenpmTEREcmVJfH1gR1NVNTImYT1h JkJ7I2FBQH07bmZoI2VjMWZzJVRCV1dweD5AIW4mV2l4Y3Z6fXpSeXkzJVNRCnorN3Nld2d5KERK cHl6OUVZJFIlSm9ua0MqWn5ybH5RMypRUVhYNTZxN34xbDxLNVhFemJyamhUTEhaK3hKfU4hVwp6 Z2EjKXVoM3FGbjhyZ29aTTJGYjEyaFVAfVYlb013Yz9eS2g+fXAqU0tLd01RO19HaEklbFpUQyFI QyFLWTQrb3YKekNwIUB0bWREK3AhN0x+NSU0WTI3NTU1O2VtVyFEbiVWVCMkVFJodChFO2pjPEVx SDh3eHVuRUpkUzRiRno/fXg2CnotUjw3VigjOHtHI2Aha2YodXtNKWhOLWo2Xm1FRXItb19sOEho dmAoJXp+YjJvKTB+eWlfTSRhVE1oZkxjND5Tbgp6REdGeCRBRFg0K3BOQilKc1h6OTNncmZKS247 bjxVQCMkY2psPFQyUDZ4bzZlNldNRk5tQH1lNXBWKyE7KSg1NG0Kejt2WGwzeGZkcVo0dWp+dCZv fj9ScX5mX1cxMXlKbk5YOH45OUZ9NDBGeFkqNl9rcDUhQn41U1dKdW82fWVkY0xBCnpISXwxdiQo X2lBZ0MmJko1WFA7fFI3P1F0LVJLdComPio2OD59MEBWOHlCMHtKVT9mUzcjdXtoR2ZPPHRuNzhw Tgp6M0dpbDdZUDxONHRUKnR0dyhzSGBYfHUjfjBheUoyWSE5cDNHb1E4NE9OK2AqP0Elb2taKGRX Kng0cGE9aE9DTnkKeihiSHtsa0JNZCZGPCNxK1dVTTtoNVcxMzlaU2RWUUBoIyE7b3h0WT9WdSs2 ZHhZVlF8d2RHYnNLIzdvODVXQVBwCnp3cGlvdV83c3srOT1LPCp0SGtBOFA/e3FyTjlMJFgweEN8 JEUjblRJYnNPbnxzWGFacmRoeSg3I1hLP0lqN3FnPQp6Oyt8dy1HRnJIJWVwZShnJkRZO0BOTXBR cHpPdS19IVFzJHU7XzEreSlwM0s2UFdAKVJ1dXV9K2Emc0AyRWlZVCQKeitwfSoxMztFV2pLSlVA YTg3dlglOTVWZ0ZOVikqRT5kellxVXhjTjVWPU8lTFE8Kn5GTWllUEQpSStSZjgya2U7CnohK1Rz Tz5CfSVeVjwkLW96QXQpQUJPeUpMXlY2SklQamEhV1gqSV9OKFBaKiM5YEZ4cTZtOW9jU3Fvb25s djZ3Xwp6PEF1a0VkRH1JPXJZaFQ0ZW9rWV5iZVVZd19tWlUpKU5EZy1XX24tZDxsIUQ0WGJnKmA9 dT5+ZXNafiFodUVKUzwKemFPITtkbm8hOSZ5IWAtbkg9VCEkYD1zdihycTQjKFJ4NmpYTG4+NTVI an41WjlPSn1neT4+NVkjKEstekRRJj0lCnpWYmNJdXdgdj5kRjV5OGFCRk56bmA9XkAhTU1NV0ZU T0wxMilCN0RfRVBDUFYtaWw+UTN5X0R8VEFlVFhYR3Rycwp6ckwpfH1ocUVKRWc7bElmTHt0WX1L MWUrN3dKJEpEaU57SzZqMTRHcD0zeGxqbU1PeFl4c1UkPFRnfVF+dVVQNHQKekxyM0p8X0xZNmxO QCQ7QCk2dkZIIWpoc0g/bjlnbCl7P2xIQkBjcG9EJShGTyg7ZypRbEBIWGZRXlg2UmhDNVN+Cnpf TDV4Skp3fF4kYlg8SCEyZHpLI24zbjFfNWdFPXJpJVM5cjEhZkpfN3p+cDwzfHo5VE5xUGdxXjtC VGQtRn5Acwp6QVI9aD9jemVLZW1xcDBJS1ZqZiptU2RYQFdjQiFqe0xLKSVkT192cHI8MktrWll4 Yj5NSDtffSt4d0xXQjRTMHQKelRXJXw8UzxhUDlZc14qTilNY2tVQDxGd053VEBCV3tsP15tXzNP ZXExYX1ncU16Uk9EbDhVPjs4flN0dnluQnUzCnpHXj5lZTJJJVUmLTFUfmVtTEI5Q0xLeXxjcW1w YTZuYEpHZFV1cmdHeSZpSUVBOWBlP0hwcmphVUs3KzNrWFE0WQp6WDMzRTJtOU1RN0t+PFY1c2Mx SSNBZTNxSEg3eWhDRF9VVSg8Q2c3SzE/I1lAPjdgSTNQRjJxRmdCfFgoaWZvVTIKej1EMlk8I2s7 ZSVlOVd6X0NWTHVLTVhUQlFwUnEjOVA3QVZvRXhuaGlvRjAyRTwmYTxLTCYxOSlKWTl3Xy01UUQ8 Cnp2WVE9SilKOHA+bXs/cHpuOWFgNCtJaXlSckc8Rnd5S2BUY3YxLUcwKUR1Z2VlXkVCIWdMUVpl UUdCNDdvQzcxKwp6MCQ5QSRkYGJCQnA+U1VRPChxYEZXdndLfEBrfGRPX0t7UUZOV097NVg0dU1O aTxXdEFPdXpAbEk+ZClVOCNeYmYKelI4X3E0Xil3NyRKUkFHeHlTNzFZJDcjWGVAV2F3P3F1c1RC YGBTKztAbyFkWlN0a1BBN3h8NGg4Uj5fTnJKS2RPCno3S1UqTztzZXVtO19tJikoXy1fUHkhOWV4 a0NmdDQ2e2x4JmludGE4WTFrek5LSU5lS0NhM1ZOTVpBKiNZb351aAp6cEhCPXdOXihVaTcoUjVJ dn1MJH5QamF9RCpyMnxnUSlZcDQpNSZfPUchbWglckFeSiVfU1NmTVU+NF9Ldnwla2gKekN7OFpx Kn4lVztAOFpEWSNpV3k8bHU1IWFIMClie1l+eztoQDFvTig/c3RSdkxSYWFxRWAxQGA7fV9RUCg1 YWVICnprTS0yWXRrZDVpJCZjSkVpPWhFSXZ0c0pxQ2FHK2RFeSlrV3pEZiZLMmRYPnFieWY1dndx R0s9dDlrb3RFb0RKawp6PH5yUmJOeHBSeUxFYWZYIX1BfG48ST9ULXQrY1hZPnk2SVY5M2hLTTlA RD82czZjbEQzTGkrOVUoYEZAbTwhN0gKelNLYjNfVWExWXQ7VzBuNmA8QlFgd0UofTViZ0p8cDZ1 eHBVNjlQPDwrT0NYPTdTT3h3UHB3YUwjV2k/LUNBcXJBCno3N0VYdzReM0AkRnklek84fTV7JWEt ZT83NTFyKk55Jm9KcmoybUI0dk1MdClMT3xhK2JOYXRNdG16fHxMRlJwYgp6aTJGbHMwb0Q0ekw/ fElxeE9QX3M/Kks/N2VyRTZwPkE3fHVzSDxELVZBYGdqSjdzQEshMlFFNyh3V1Z8Rmt8b1YKeldV YE5nO1V3S3JlVihCYFFHdmhOZV9QZCFEbHUpLWJJUEtQdn1PUUJaMGMoIVVMS1YqK0txJnN0Xk1w NWckb0tACnpedkIhN29TUXpATVc/TURleEtafVVnMiZ2Yj5kU1piPlFeWk8mNkcyWkMwO1RzOT5h Z0AoWWNPLURLS3pDPWMrNQp6WVhedU9eQ1JkNz5KQ2U7PlZITW9KJnN3UUJzRi18JkcwZGYoWDdl PSZpfHtLYCh7WmotY2hQWV5acjlfdTsjSkQKej84Q1NxdWNzUUQkK3o5aDxkXk99NT5NdCh5e2do a0RWdT54PUA/WDd1YW89d2tJRSs2MkhLQUg3JkQjUXdHTHFICnpuakt+PXElX21rM18hM01zST5F Xi1uPGt3eWxoV35sVF5QY3doV1FJRlZnLTRgaVV3ZmZoNFF4bzNIdEJxSEVfYQp6aHpIWkJwST4x cnZuX3xGYX1vQHFQU1deYkREZG12Q3V4VSFEeD5qN2JaY0luNEV5e2doc0JSVjF5YCliJVFDaTQK engmfCljWVZiQzdnMDVydGxmQWxgJkVQaUlWZ3c4MSE7TzBJUlhSJTslKGh9LVZiO2o+IVhzPVlv cnVDd3p4dF9nCno+YWFtJktTJGF4PVkqTiE7WTNtJCNEeTJNQ24wWFlwTmc5ZVAwdVFsbylAeFE5 N0poWT8tKGZ8cyhrVkFuYD9DNwp6RmN7ZVNUNSllM3ooZ3NrUDJKTzZgfng+bj1oQFNtJSRxT2dG WSFNcSlJMSRPYXhDN2VPQT8xIUk+fXozeWMmT3kKelpqZyslNzh1UmdXNHhaODlLNkR9YT9QQWxZ TW0xSj5nUDVAKGJVJmtCaXZVeGtHJGpYc0grV09JPCNaTz93S1htCnpkaEA2ZFlvTlpHZ2dFSXgw KyZ+Qm5Ad3srKkMxWkZNY0xQISpIek9NWmZtajxSJU50MD9MQT1ye1QpUWJ0dmJNKgp6PX1uU1la aXomZGJARDdgaUFMWlE+flZ1PyRQUjF+Tl8yfV9vWHxiSG9HQzsodlMwUHNjQi12KDtIIUUwdGRu QVoKeiQ8WXlDR2l0dE01Xmx9c3pfKk90UGNqPV5jKGpSOS15ZXYoUDxDNGhHRUQ2WnA8VjZlVyFg JVgjTUQ8dSFnJDB2CnpFcnNUVnt3cXkrQHtmJHlMVmM1Y3IpIylXaS1VP2dqYnRIa3p3RW4rS2Aq U2NhTEMla0ZlSHBedHVBe2JpQEl4VQp6QW1hWTgjSms+c3Z9VFdwR3RzdWJIfnMwVXJpREVmVmF4 cX09VDJRYSh5MT9WbEh3KCExcEEzR3Qzd2ZrMXtpTUMKeiRgRWEoME55VFNBaD4xekZuR2A+TiNi T2lWWVU5cCZ5JDFeX2QqSGx7UXFYXihefTRIUig9SCk0cSVRcj40Wk87CnoqITx2NlR5NEJLU00z el8rdEI/c3ZGdG5MUDU8SkshfkUoTjJlZFBhKXRZUlItanIpQCk/bm52aihzS0Y8MG5vWAp6azhO cSZFTH1ePWRJVChwPkNwLTZ4XjIjVGx3ViZVQ0dSMn40aDBnNnVuQTxOJml0aDcwfVF+bz1mIW1g KWgmTkMKenppdURQQ247JmR1OW03KnpzJlA+YytTKz4qfFAyM0h1YmBlT1lFN0t1Jm5IO0tQc3d7 NGpMOztSY0hQQVh4VHphCnpZNEtEeT9feXJIMSVeNTg4PTlZOXppWjx9bU0+QXNAfCRaKF5oV1pk WFViQllaQmFANkRHZmE+LT1MZj5KZyE7YQp6akdrblRTd05RV3A7T3ZsPWNGeUJkSVR1RiZnMS18 dCp8anhxKl8hQDtwe048QzJTcV5XPDdafFdffiV4ZEc3I3gKeithZHw3KTIjN2pmc2ozbkhMdGJ4 YnNwO2QwQWpiY0wyZntKKXQ5XkBvTlI1MzVhNTtVU35fa0NuNXg2X2kjV31RCnpNcz5OTnJqcH4y O2ZEJnckaXYkdz0xZHpAK2xGMlR5SVlLfjRmVFYhRk5IWlNiRip5eEltMHctMm0yJXtBTGlWPgp6 O0h6ciFgdVNgNXU5VEd8SkJtdV4kQ0tpWitxeXMxUD9ldSZETGBYeERLKXFGeWxtS1o4VlltZW5E cWdVQzhVWGkKemFARHdYQDRuMFR6WFpeUDVEc298bGtXMDhATCFAdEYmR3BhaHg3Tl5Rd3lNMiRh VGRjME1oMlZHITdgfEFHTmZWCnozKCFASldnZ15vZStqK1kmVWhZUFdgYVdpZHN2RXA+aCRzRHVp bmxIP0dUSGZ2RDRPfDBNd3chXlNCUjghNT9gQgp6cDhoM2t5aHRjUDZNTl5ZOC1Nd2ljYUxPMWwq dzw/eyZtUi09bn5TVHtUfTFyWmFmRVFxNVNIe1JEV05FPE9QX1YKej01MlZ2VSozbzFHdGlTNEcq KjhfWXB2I01kZG5OKj1KQWktcVVKbzFtM2lKXlprMHZUKTdPXyFacSg0JTdJPzk7CnpGPFJoPjM9 TzsxVU95WT1uenM2bDBZdW00Tk00d3IpOWxwZC1WSVF1K3ZNSXI/RSZfRHlLPVFLUTZwaHU7PjlR aAp6YHlWRFNjTUJpPWJRe24lc354NXhxREs9dFlAKHZtKD9kWD09YVd+Xz1tOWVadFp1b1hHQypq dkAkcHEwR1ljeGMKejFLanRiQVhzWHM7ZHl+I0pebmY0WT5sPDFiPHVzMGk9eDRXej9jJmo1UTA8 eW93Q2FzaTtxKitKfSlXPDQwMHdNCnokNGpBMlYhYkZELWp4fldjMjdlfVR1QDE3b3cmZzZkJUth YDVYVmN+UStzYXtjZmUzQjN+dUwxblc8QXVUJTVQbQp6LXV0TXB6cyFEYENkKXtfPng+dkg0Yns7 SHhWO1Y/OUwhTXBgK1hCIWtmdD17OWZvVUg9SS00OUswO1IwK092T0AKem5LcTZlPXlNVyQ7TlE8 USs/VGdPbVI0NE1EWkVCMkJZRTthVipPQlNnVnBacUwkNld4ZWJFYi1ZYSh0KSttZEFjCnpkbk9n ekBxYSgkQDBZbk14V1U4SFNZeTZjd0R4cGNwZyV2bnBSWlolM1NBO2lvbmFQRk4zUnhlXmg9TD1J PzNATAp6XkVRcmF4PEdnZXhPdHxKZHBFak8xTSEkQj8kMm5HeGY1YlgwWVhETTBwb2VPYjw0aXxW MGh3Xll3V1oxYzhQO3wKeik4SHpDSWZ6cGcmWClgYnpldFlKRVpFZjwxWXFjV2YhMiRaOytQSSs3 T3IlZ0poJDFBJjZIX15gKV41VGsmY0s7CnpHdkB8R2NJNGglYkErQnp0eGRkJUhURFdLKjZpJihp cyZpeXoxKCQlQ0h7el9SVUkhQEZFVlFuaWpRKW5fenVYfQp6aiZWT1BfUz5DTj40MlAzPm9oMFVx SzJBU2UtYTAlMUtRZiFKSTZAKHljdlNrRzAzSz97VWdKKmB8e3lFWTFZfWMKekBQanxYNjl8VkVf b1crZ1pXK09OX2ZiWGpVUDVtbyQ0dk5oaE0pZlh0JE17OFMjfnVlUnJ1Y1hLdUJqJHtna2g5Cno8 QFJVXj50QHJye2BiWW1YWGheSWk/KyVOQyM3YyN1MEkpJURHLUB+JEoyKiN1dUZOeEk0MGlvJUhs WXdeSm5aRAp6blZicyZzRismazF5aWVgT2ZFbmF4NXsoS2hGJHBAdkNrPDEhblo/RUpvbkNndEM2 WWlEc0BKczZxb2J3I21AUXcKemBebUVTP2FGcWslbzhIITAyWXlYcDhgaE9UUmhgT01fPHZOJDIt JHI7JCZYNjE1SUd3bmlSKzc/d0kpSTcwSkktCnpGYDRHJDcqbFkqXkBAVU9zcjM7SWQkOW1MTXto MCgld0F6R1coWnYtSzBaR052eV97KkFfPDgqPjMkYX5DcHlUVgp6cD5uWFokRG1CbE5yVXxUMHla K3YrRUkkM0NMdzFzUF82OCplIV5rTmxUMT1adjVCXj1WfXotSHh1WnV8aV5yR3oKelc1X0hGaS1D Q1U9IV5UMDxqVTUrcUw/SCRlU2pHQzF0ZTlAQj0wWC1PenI+P0otMVVvPDVWTF91dk9Va299Rysq CnpOYjx6RWFWZVooJDh7P3g0QytNP15xMkJwbCp2YFcxM0JLQTBtT0Bzc2VXRHpnXkw1aUhuV35y Yms+PSNYemRhMAp6VWkpVCZONTc3Rk9jKjkhYiVpSTMkd35LIWBeP29sV15Daj5iQFUwXzN6VzEr Yk8tSnQ+KylrPEpfdUAhVTxnYDQKek5YYmcmO2pPU2o9PSY1XyMzJlF0VjYjY0gqWVYrLTNnI1c3 eFUqMGF6QXRiZHY9NVdkQkZAPj5OeE80U1Jwc18zCno2dHBXa2w1PztPQWpiN2ZEc3BvVihTT1BV RmgmNGZ2KjA2NGY/ZkEhKTQ+QmNrQFlzeCNhPDVeY3J3U2FwNT5oXwp6c2Z3dVorTkIlbSRMfTsj ZE91c2c7bERlVTFBKUdtcShVNnZBcVNaWUdjeis2OXJOXkJobk5jJilnKTZWNSY5UH4KejUqb1c+ aChiNzdYZ2Amb0YqMHwxIUZ9PW8kQnpmT1RMfjh3dn1NVmFxKGxsRiU9XzwwbERrWVNQWTdDY040 cFY4CnpkQ0M5dDhsXm5vd2N4dUtxe0VaYXlycyYrc2JTJH0lXmdCbjBmKVdFRkJ5eShmZUd6NVh6 RVd7OClhT2dzKUJUXgp6aC1udlk+U1YobXlhMHhPUllzbFQldypmJVI4QGhORmJOSU00TmFvZWFZ OUwoI3J7TG1GbW5eZSQzRWxnQjV6U3EKejBSPXh4PVB2WTJKZDt+X3dlZG83SWI8M1Rrbk1WVWtn WVNRTDBvYWBmYSVYZFJnTD5nPzhmNV9WTU41MVAxazRYCnolR1RwX04lcXp8eCNQJFVxOEtNXz9G MTg9bWFRSHY4SDRiWXtZc304Jk5HK2RpcTV4SkhwfFFfPD1ZIT5XYU5VKwp6TSl1Q2wmQ2FFc1dy PXhLbjtlTkwkfSYzP1pudk9AIzVAMUhaUlhzTEBuVWU7RmQ9THp6dU5GMGx4SnxxakpuejAKejQ5 KXJle2klUDhWZmJQYjQ4Uik+YlNrclNCITNyMiZKdmxyVzYoeGdnX3JYLS1DbWhOamwqYyZiQSZJ RmJMJlpQCno0P2tYMHNBJk8oKH50NChsT3wobCMpJWhicDBpT1U8fnIqVSs0JnwlJWRycUl6aSF4 fDVhTnlYYzVjVFJZSko5Kgp6Pl43NiUjKGc2eCM8R3Zme1V5PnhZPWNHJktDUyZNNVpqWnNTWG9Y I1Y9K0BYRnhkdHBnIyFIM0tMSEJ8e3MjcSMKeihlUVIlPVViZ0ZNSEtLcF4yYDx2MEtVY0NQR18z V213NGVWSyV8Y2BgUVE9UXg+bV8wQnFTN3xTVC0oZTNUU1EjCnpESmU5Mj8tOV4rYmhJSlN3dF45 alc4K0BDTDU8Wj87Nl9AI1JNbGU8NXlZTlJMKiZqT1ZseXtAbjModUQpeCQ4Ngp6Tm5XY2hjVj5h Xy1EJU1VTmpKWDctbUdZZzhTZT5ASmhVNUJ3LWU5UURjc2JhJnZlVG09WGIrLTBCJm5Xb0B8KDEK ejQxP3lXWW1OTiVjR0U7fmgoZktKVmI5P2s/eXZnTkp4RyE5NTByTHhTNFFoVUM0Zzl2djhuNnJL OzlfVXYqIzkmCnpkek9SeUApcWREX0ZhJjRYXjhnVW9VX0lNYH1sZjsoN0h3bVppIVhAdSp3eUhD e0UySD8qMDNAM1ojeTRpcUo5cQp6UU84KlJlXmZQP280ZHZaJERnITReQDFQIzBTWmJvSVU2TWxv cVVOaXYmSmRXRXEwbH5RZ1F+XlNsUW5rdkcmRnwKelQkSTxIQXxYSkY+JFVxSWlCQ2FVS2B4JlJg Y1paWlpMSnRRXj5jM3FiWDV7UVplN2JhUTl5MGBzRWRQJXtrM24xCno4VCE/SnN7bSt9M2lqKHFr cm5TU3gyVUxyaFVDJFU9X2IhbzJWfHtzRVImPlJlX1UkVUhRTT5DQykxMk04ZmJUMwp6WGQ0NjRl b0VjfjIlLS1fNWFUU2wqMkNGI1NlYXwhQWR7T3k7ekZGOHFXM3VCa0RNRFVCTTNPaz1Gen1Fb2g7 PVYKemRMNzxlYH40NGt1PilDYXp8JHpNKz1sI3N2c0wpdm9jRj9rVDV6ZmcmJFc7P2R0Oyl+JW5W cykmcnk7UylLdSMqCnpKKkhrdiZgMWUtdlJYRW1YMWdyeWY5eWE5WXxFTU1MISE1dG5hIUZoUXZj d3gmanVgRHVxR2gpR2hFRHh6eTV4cwp6TD4yQEdlUXRDTU03Q3oxKilKfj9De2ZWRWF2c0gydmp6 dEA7UUhra2Q3QjNBYCFDZUFSYE9CMjBkLXRFTGJWeXcKej82bktucDc2KFp5WD1sJGp2TlBZWVpE SjBQTyQyclZLIVZVRCV9WmRYeGUpWk5EWjVLaEopR3J3UW1sTzFadVBVCnp7IypHWWZkUiFxdC0k fHgoejxaVGZFS2tBVG1DX25yQF4zKCNQfDhCZjA1JFhKMEJDKXxHKnQhRDxlcytrJmhzTQp6VGtR RUNmUDFPfDZmMXx5NU8jYjdoPyNIS2VrRFo7Ki11WDhkK2c3KiZNRmBxLUFsXk0rRChUZlB5PXF4 e2UqaTIKeilpdT5AUWU0WGE1ckBuekNwYEVnJjlkUWl0bW5ZXnlrfWpOXyg1NEJScypSbmM8cTR+ VVg0NHx7cU1efj4/U3pWCnoxWkApbFl8JTdUe1c8bUVtITg/UWJpLTdZI24wT3tGaEU3T3l0K0tn LS1mNDFvb19yNFU1KnlgX0VRVyVJJSZaQQp6LSpQaFZ1Wjt7Kz4yRnIjOCVEQnxWQyhlanA9LShr dVhRI0Bpc0kwbCpeaTIoQTh7SXVWVjlpQCM1UXomfDcoKFoKejNBMVUyX2dQU0F6PENNJD40V3hC WmpDZTJSVkpTLV5zano0THlfPElkI1UyJGtfJU48Pzt5V3cxc1R7czRENlFNCno2dEhTUnlJO3Vn NlMxKzg7OFEqc3krKCVrTUVyczA5P0YyPzh5IXRMe25mUj01d3QjI19DVWFEO0RjZmVKd2EoTgp6 PTQxZ0pNbnE5Ump7R3xCeSUxUXhiYV4lbVY9XnN5dnx0Unc5MzI5d0ZMMzFKZ2BrVndlQ2VYMSEz PmNaJkArYU0KelQjO3A5XlpZUUJCQFM8ajgjfUNzPl8tVT8jNWQ7ej1wRWpxYzFsNHZwQW8wfF98 Y3tGVj5uWXdPa041QGBFbmxBCnpvU0BeWSo2LXspLWFPMWs8cUtiI0t4YSk1RCV8NWIkJWFgbSoh azZqc3xKa1FadERHP2N4KkFMPGcyUGRUOG4qYwp6RyVNQ00oYFIpJiNgWEkyIypjXmFMMk1DTCg1 ZjxyKEo1ZmhgSzxRYEdGJT14PSlyMllqVGt5MnNXfCRLb0xrdnwKenArTHMkM3lnKHRXQ2F6YUNj Qmt3PWJ4WEZmQ09ieSNsMCh4e1dnbVp1UCpsY3pyN2BhQjVRNXk4KDgjPDttcWcrCnpjfXIqY0ZL VyQ4TjNWcERHMTR8OEVEWF4kdlF+clhZfWZifGZFPzNxM051UWhzdnRrJjw9dXZiNmwha1djVCgm UAp6MDBiNU9hNWxGZVdRe3VRViFtU1dRPGxkZ0JAMy1CaS0mYDE7VzgobXBrc34mJD0qRjU/dDMr eFhLYDEye3FOMEQKel5pJnZVUzdqciVBT0B6Xz15e2ttUj87fVZYcGArPSg1UlQ7bXo7TTFtY04z VUtvNytDYCEwbil2RWhTIXRObkFICnpqVHlsRUtrIXdCeXtYPS10bG9Bc0k7YE5pZURibSltSzFh b3FGJn4oSGQ/PEFRT1FufkZpdUVeJnpeMTw3YTF3ZQp6O0dscUBmK09TKzhSKSY3JjlhRWNoTCRn b1VgMFh6aXI/T3hNZ2VRWnF2ZkEqYWhaJWttMU1pemxgWEdmNj5hQnMKekdtQ2M0cH42R1I1eFht N1lTOGFhcVQ2VTtWMiRoTDgkU1hBKnc+KU5yeilfYm5oPG54b0pQfUdjcFdANDJienNaCnpje0gq K1VoWCQtXlBPRVJWNFk0ciReSi1TUXs1P1c2OVRKYDkkcm9sMlUpPmUoUE9JbEBIQDM/Q1FUbTFA Ukw9egp6UyQhKkVKWERKV0JUdERgJkJOKWM4SjRtfmVkS0JmIVo5fTZJbXdBcmBARjNtc3U1Q2Vu XkFEQVhPa010K1YmJXkKenJMaTtgdiQrZVk0TWN9Tzg8eHQreXNGciMmJSN4UHRTbVVlVTJqPCpI M2NBSD9jN0d5YT0yVzlOX31TJFFZajQkCno+Nl8pX3RJe2NIaTJBUDhOUG48JmtYNHtaUkgzdyNJ P2F8YU5wXn1kJDx5JUpeRWJ1fSpveFZjQFNkLXo/O2RmKAp6YTBsaTEkVC1kOXBrQ0h+P0ReLUde UCQlUW5tUCVqRW8mVCp0SSFJc042diQ0anIoPEtiZHpBc2Q1bnYlTyQ9WXgKeiRgSGR2Pzx7USky VDRQQ3tnJlVQZWp9elM/YFF1aiNHUHF+YkdwUUZ4YXFxb1ImVlQyWjRePj0mKnhHRF4lP3Q2Cnot TjRMOGpScml2JUV+bnQoTzJGT29sR3VVbEN+K0RkV0g1ZFhjQ3lQQTNHe0B3UEw+MmRjJilmdno/ cTV6SlM/IQp6eGYlNGN6fDl4I0drdihwbFAyWnY2akNFOXJ4VCZLOzh3YWEoNHVMVFkpUXZ2WnZ7 fVVGeCshVGNlekMyQnRKJDsKejJzSS0oSHxBN2JXYlJJKk80VyhxRylwekB0OFpfSj4rYzhjSExt WThBLX4kbzxkUnU9ZDJSSGNVU29GYVZYLXxLCnoxe2JuPlBBdnpEejVxWTRucj5lYWp+YlI8YTRO TjRPTWshREhOPG1UYll7MVYtNik4b1ZmZE5yeVVBfWlLVSM2Sgp6NFQjJjlNe2FVMW5GVUk1Xj1C SypHbSNRfXQ8a3M5Xm83TzYkbz5hU21gSGwmVGZQSFReRXBVeWcqOTtNMUlfa2QKenZoMnBBbiVl SjQlVnJKe0M2LTk+P1ZfJlNCfWp7emo9P0VYRWx1PURSKy1EamhHZXoqJGZWSTVjYHdwZ1RCfCNE Cnpob2YwNGlfMENtJk9kJXJCaVhlaXFjaEtGSiN9XmV6Mkg3eUs/TzZYdWFQPjElQjhaSyVGa0Qw dVZSUkE4ZDQ8TAp6Z1pYMVR3QmY4VlA2PXBIfDkxfCk3T0BWdFIpPWtjJjR0RDYlSmNPQno0Snw0 I2x3YEZMR3Z6fkB1PzR5OyUhJXcKekkmMEowTVhTTH1raTgyPU9BSlR4SiFjOEZpJmF7O3A5Rzhw KUZkQD9McSl8MCZSa3YyblZoYHNNbSQoP3t8YnIyCno0cjN9KHZMc2lMbGY9MjQhRlcqO0Q7Mist e29ZZW54TG1weTlWXn5VVyY5NSNvej1yQ2QzQiVCN3N3MzRwcypBJQp6PU9+YH01dEh1dWZLdEoh WU9PS3JWZmZFJU40RFZ3cCNnTTc4Tjdya20wZUxNKylVYXktTn1xb0t3MXE+cSl4Nj0Kenh2bHJF YHQpaEdMJSthJTRYZkIqPm9DIV4jc3U1WXNMMXVCND9BPCl0SyRrWWd+XitZSFpCXnJETD5xOyRa PkMrCnphPTNpTTMkfVVjN2UzUHRnRWM/SFpwOTE3RGxtTUBwQ1BheV5rfCMrYH52TGg3YVVadWk8 dCVGJWRsb2prRFUteAp6KiMyYUIjX2x8OUZAJElabkJxWWI7ZjtsWGNUOUBVPn43THFpJEN1K15B blhCfDNQYlpaKGFfTWZHanxfIWs4fCoKeiMyRjF5YDlMcT88Z2w9fGtfIUchcExCalghd0FgRkYw dEg7Nys7O0lQJXUxWmUxeW5RbTYkdG4zbGAxRGczQEQ4CnorbylEKXJBZFhmRm4rfjdiSjk2WjYt cFdYPnxyRntVYztDaVFQdTtAJTk4KWo0MHFRPWplV2l9c31HQ2NHfjAhNwp6SXc7ZXk7a0s3VyY2 bHFhOEg8VDAxaXhQaW1sdTFhKzRfKytRNiR8REJSUD9wcTZXQztwbWtGQ3VsPlFRWkJreCsKejR1 MnlYUkVVVTFAJlZxPkoqaVF9TnhgZUp6JEElKTAkVUlERWtzR3FMLW5rT2Apd0JXP2RKTFRNUXhY R2l2SGcoCnpZUUJOUzdyX30xLVJxQ3omOTIlSEBAclBtRkFUNmg5I2pXPllWPT0wZX5XUWZmZEBl ZmJARi1VPVZpbW1Wa1BfJAp6SFJseT4+JnhEJDMrWVBDJUUtVjVITTQzMyRlYHUlJjs5Z25ZMTN9 V0QteWNiZXEzdDM1MjVWX1pSUy13IVo8UmoKelN1YShwRj97VGxCYSVmUFZsVTZyMCZTJF5gOGNP c0k9Jj9Fc2BscG14V1RkKihMb0ZfRk5YRVA5YFZXeSp1QDxxCnp2b0hZQCV5Pmo2T0g8RiRRUSU2 TlhSVEFmb0NZMz1xdWBOKTBocXg/aXtKT3FHOSNHfjdZTn1VTTslRGltRyVsbwp6YTBMIzQtMykw IUVsUCNoIWBMWU1FNzFVbFNadG12THBmXy1kdW1MbUNPYEw8eWljMjZiSV58UXRRZiQmWmopJTsK eihQXjk9VjNfeDd1d2xxKCptPkRfQS15YVEyTXpIMEFXekUtc3VWMDtSKE8tQXN+dk1IVDMjPys0 bVNeYShvbTVJCnpfTjYkT2AyS1BtMk9USCFHN1IpJGFAfFNqVkZKPmJoak11OUQpLWR4K0dwSnZA MVBhRE47ZmwmLUdQOEhMa3hGXgp6T2NxRVJFcHVCZzQmRDRXQDR3aTNzOVlFMFZwQ1U8ck4lVGY9 dmNOP3VEeD91ek8/enhgS0YybXVTMDxZWk4/STsKel9mc0F5LWBvPiohekZQYnQ/e2hZRzI+U2ZI Z002JlNJMWhVRkw4JjV6PnUkV2E1WTl0RTA7dD9JaXsoPGFWfUFmCnpxRlhReD9XIylXdipna2t1 dEk1VD4rayRwRyZ6QUkzZG8kfTR4c3t+ZW5nWDNqRDNUekw0eHAzNj5mMFBaa1ZFVwp6QzVGZ2tF NTg0emIqO2M7YCNMemorfC0wc2hYZnp2ellydUMjdlBmRHM3flR7bGpiIUY5fnd1V2hFe0wwNWlf MkMKemwjUXo3RGhpYVFnSTB2WkhUNE5EdUlWOzZxVHYwJT9kNm1iJEdwRXBaek5oWjRiQGU+N3Mw TTd0SSt6IzhsQWQkCnp4fXYxcSZlJSVRIX1VNGp4WWBVKHc3VHE/ZGUhJXZtbnxVXkNUVDc1VCh0 e1lpM3xlKikoYj5PK1M8eGslbEVXcAp6cjx1IVZLTFZfQWJNKDNIYTJFQ35heDE8WUJfKkordmRS YGNrcnJhVDgoRGBySTglbVAjJlRGTHJvVispQUt4PjAKekI1cCNIcC1NKUBmdDVSLSZkeWwyS0xu MloqcDxqQUZJWGlAejI0bzVqZnpWMitANzRhS2slY2V1KlRBd2NzJFEqCnpJWjhpSDthemhXZDVC NEBmbjY+JEpIaThKPksjZVNeflQ8cVk5ZHNMMHh5cDE7SkJlSj1yWFlsSCQqY2Z4KFBPNwp6JmNS TnwqdG5Lbnh0VFVIUHNGUWdGbEprbFd1PHA5PXAxQkdjfD4kRXU4T08/aDlpKmYoZTZpentIaiNV QjxWTWAKej83dEdQPG5Ydn5kbX5zdW96flJuKXluNmZIc0ApUnJnVE55UHhWM0ZgSmE1Sjg1aVdr dnZzflFOTy12OTlual5TCno5Mzxxd3RPaEYrPGBmYClMPXtWbktJJThCcEV4R0dDcHtqazVCNnhm JDZ0VyEldXJXcnoxVDAhSj9xJlgpUi1tPQp6WEojRWY9bDxab3FePnF7JVdpXlhJOTRiKilsI1ZG ci05V01gelBqK2J6WWsmQlFJdndXJVNTSkA+SWJpNk1eRm4KemJkNGJSKVg/UlhmIXs1Q0pPR3N7 VSEmNjJSV017VFM0PEt3RWBUdFlrRF9UYyV2MCN1KlkjfXdfdk4lYWFtUmpMCnpXRmt7bEFjZDFw QzshPlF7WU9LPjRPNFAyT295OTEtP1V6QlQkb0c5KW5mMmI9bThUMUJIKVBUOF9WV3lJRmMmUQp6 ZjtfWighIUtTcjQqUW5ZXm47Tzg7fTNFdihpR2RfWE8jTipyfnNjVilIansjS35tJjRnNipZdExO Iz5MJSkwbHIKemB8WXtic0xqb2YydzZWcSR8QUszcEMqWnZDbl48O05Sentwe1M+eUdAe312QVJY NmIrIVBsTGxDeSg3I1hFU1h7CnpSQCopdUsmfT9UKGAmQk9yaGlZcj9pSSV2KG02R2lmbT5lWjRn fnNFc1JmRUR1dHk2YXVua34lV2tZUyFiTkVxSgp6cnxkQnQxfV9USkRKK3RUPGBsQWZyJHNuTT96 VSZaSkxxfHwyYFMld04rPE4+V3FxMSNATWl5akAzSFNYYSorayUKeno/SiFHO35ERVpicTx2d2VV ND4qVDNIY2Z5fXhzPEV4PXRndWEhfk1vUTlCPWh9RTZBYnpraUQqSUdkZi1lVDshCno0I2UpOz5Y Pjl2JGo8eTF7Z219MXhUfUA5MV5Oekt5Wm9CJmoyP35aaTk0YUhwMUB0Vm5SRzE+bGJLb2o/Zikx Sgp6Nn5WWE1aXmA3STZNVExNOHNTKjk/UDdRK0laalNMVzFpaSVtRkIkU0NrQ0V1WUVzaH5aSU81 WEt9ZDJ3M3UwN2YKemp3VCl2MiRHeVpiUXx0KEZFbzJzdUJAI2dMcDxZR2lSO0cmeW10OVYyJUJz Z0oqNFJecFIoYHItI0drckNndnJaCno9IThZdVM0UGVVZVlfWlZ2dzEoRGI1Z216Ri19PzZBfnBy Q1J2VjJLTlklXkV6U1g/Xj1xZWN3UlY+ZXRiJnUtMAp6aD1kMHthN3ZEfXMlPEhqdkl5Y0BLRnAz czZWJEFIQklyfnhRM3B9QmgjWTAjNXU/ITk2M19eOFpTNF5kODBmaj0KenBydDlKMWIzLXthPUQt I0s4OzxvU0kxfl5fdGowTWZwYEF1PHFeSFZgX0ZxRF4rPVA/ens0VWxYKX1sYTUlcDFGCnpoMSZH TnBfbVJAQGx9bmFlMiEqSiNsX29iMnNCJkJ6bGtTQDVnRjR1PWNLaio+ZEshPG5AeDs2ZEd4aihA PjVxMwp6Ni1xRVNPdmxFa1ctaHE/cXJAX25ZeERjaG9YNl9Vb047cDQkSUY4K1Q8UkEtPTNFfW15 Qi1lSVkobG53RVFkZjUKenc9aUxJKVZ7byNJY3AzSEVKK3U4Jl4yO0E2amRSNG18QyF8T017I05Q dVEtSDB0aVElOzZGZnFwPkRFbWVSZWlKCnpLRUFwWCFPUkROX2NybjUhbVdhVUt1VkcwaTZ2bntu dk98cEojJnQ2M3VAbFVsOEd8T1FTVXZ4UTFPVDEoKEFKPQp6KVZhe2whV0dXIz9tcEdeNDdaMjIx QD1VPiljeTRWMF5jcl9BeUJAQlZ5S0FgKFpQPWwoOG1AU29UYndJRiUpYEwKekVGMDxqd1ZzRmoj YGdWU25ITTNxK3J0VlJAYG0kOC1CI1hoJXoySiNaQGdlWi1kPyt9I2VfNFM4JHNYMDhSUGpPCnom UjBmanFGWH1XYlZaMHVtbkNvZTJrXlJQaG1SSiFDQz8xRjFxXyVIZG9WVitGR0lhbktKemNZUXpQ dkFRO1c8Mgp6Y0khbiVhRmwhRDdOXkw/VW84ejNxNXxrUkZMMn0zfEZSc3ZVam49YUJFNFl0RlIk QEo0JCR5IWAjOE0rQmRQPmYKejAlXzUwbGxOQnQ8P3I3SGVrT082K0drOHduemIpSlp9WiZrNWpE TiRrbypZSHs5RVVZSkNJd1R1TT1nZnpJRkQ5CnpBdF57PjNOIW0zUiV6bDFQQWxCM0o8Tm4xN1go a1FsYypmbWxzMklPb0FRK0VSVGd2UHJYWWxfaXdWaWczfHxpNwp6VTkxNG43WnJ4d0U2cz1VIXlv NDZpZHI1K0hFMCVlUnoheDZDZjUwVDlPZzZDaCFiJD8zOSYhRjI8fmt7R1Q7UHIKel9saE9OMSVi ZHs3ZW1GfFlWV2FNNkt3dGpVLTdtNHdeSlZjbG1DaFZgQT8wVzx9YzMmSk8kKUc9USVnYXpzNyZS CnpWQGBWZ15lTlQ8T1oqJHZlUlh9RlAtfm11M0xxc15qRXlybGElUmMyVSNpKD4wfV4yaCZ8ZjFs JiNnTjxlWkFaYAp6IUJwSyVAc1l3O1ctdl5oJElqSUF2OVluOGg8MnhZcUR0NHY8YWNPSjBmRk5s SVZkIXx7aj0keyNJKWFYLW00a0oKekQoUSNqSDIkRVgyR0UkZWxAKlNrdCo/LSRCOTYhanNyYihU dVpXTjF4aHZtc3peYkswZkwxZn1tcG5STjJhZGxACno/TXBmUzdScXwzSCtRWWUwNk0zVkgwKVE8 Nm1vWVZQb0J0aj5Qc0ZPMnJiVlhAVm02dDF4VldsU1ZURC07RW9hPQp6MnQoWTRXb15kYF5PZlp7 KjQkUTM/U0Qkfm1tXmNtcjlheVc8M2pKYDBORyhUQ2E2UHR4e2NkTyFmZVRJcUZkUG0KeiVsbUJT RCpLLVR0WEt7Q2liNGE3QHVNYUFFZ2J5VUgqRnFORWApVXxZZ3NOPUdRMiRVN3psbDdqKU5tWkZ0 VDtYCnplIWZJNXdkZ3E9VnhhX3gkeX02WTd9XyhiIXZRbnNYRnVkeURWJCZ1Z35QdUlfeVZ9ZC0k YXQyUEZXPkZKaDk1cAp6QzFEdWR3UGE4KCNMcHE+NH1FSip6eytzO1MheC1hLWNFdmtNQXdefm1k MGdOPz84OypuUWFfYkZ0QiVFWUNqdXYKelVhMXx8aCUlSXRKYm82bipoO0B5dHE/XnN6M2ItWT1E PHxoZSZzaDJAYns+Jm1PRm12ZmZoYWYjJkJmMTduY15CCnpCcSNAVilpP3t0V15lbV5mZEk3Y2Ru QT5HYU1EfWQzSSFfSWBGUEY+SyhYPDlKPUspUCliMzFHJHJyMW92Rl44Pwp6V0N4RHZSMyljfHtP UjVVMEBtUnhkck8+dHQmZmswTDdeQ3A5SH1gZWUhZDN9PGJ5RVZYOGxKOUdjZmtfcn1SVE0Kekhh N2pEcCUlTGIleFVSRF9Vc1lsajBwZ0ZINTBMSUxqbjNEP3tyWHZFRG80OHVaMHomS0txR0ghSmBs V1hAWWpHCnpJJHdFJEAhaU9hWn4lUkFUVThONzRHMkkxZEchIWp1OEAxS2t7PHc4eSsydmNscS1m X3NHNGx+bm8tJnVFNlJfUAp6KitKSG9sRn51R0pDJkhNeVJRd3oxN3krRUdKPEc0ME1PIyM/Tj4q WVY/ZipgaW9IYmJVSU9IbCVHeXZDSHs4X2sKejZUbnVeNFVIQE0wNG1tRE8lNyYyMUJNPHxTXyh2 T0JRKDNDPjhRdnhTUWBNcj9MP3RweiE1M3ZVdEJTRkVZPUZjCnoxe3BhNCQzSCpHanV1e3cxV1lf STkwUj1xTj40dF5YYHtYUylDbGhUWE8/a2p1eCNNbUZiJEtgSk0jRiNPazRSOQp6TFlQfF4lRXIh KXtFLXVNe3djOFIpeTQ2eVZ9VXBqQktVNVhIfCMqak5ZU19EMEJMZkVTPnwqdCFgVHYwN2A+KS0K ekckcSp0dGNRfC14ZUA3OThtQmw+MDxxMH5ZKEw0PDlEQylyOTMhIzxJM3BnPU4rUSspZW1aYnpX MlhwaVQ3NUI2CnpHVUteOV9HOFQqRERqQH5abzFlMHlraTVpcStjempPWFFrKz8ySUhOXlcmMjVG VDZsaHcqWklGbUk5TzMpeFg1KQp6JnEkbmE2eShFaWRQb347JXZKOUZuSCgleXQrPmIkQV9QV3Jy TEAxR1Z2R3MyZCMrZDU+Vk1NckFXbmk2STRQWXQKelJOUVlne19mVFRPSkw5KHdfYzZhKnRBT0lx OSk0PjkqOXtqaEJHKlFpSyFTR3VYJn04b1UoSkZibnBpPnU0IW1qCnoxTz1fKlZpPSk+TztWazsz P0xOfXNhdDF4clo1SmEzPHdQTzAwRUt7ZF41bXQxS2hqPU50NSpWZGc5emJBRy1FYAp6e3g1KjY+ dSpBdmUkQW0rMCpCTWBFN0wxbGp8fnxMcnlfMyRROUZKZWV6RntXZHkrPXtpQl9EZktQVklAb2Ne JjUKel9+fVVoXlZmdHRlPlI3WTVGRSFEKjVQQUtiWnJ6fj1APnw2U1U7PlZXPS07Qm1USz1jO3Ra TUdXO0BQKTF7fG4lCnpna05wX0QmNUB6QE5adExhanBlbmNOe1ojSj0weW9OOElzKT1WR1FRKTV0 Mil2bDAqIW92dzBBV0NVKGJ7dEF7bQp6JHh7WSUqcUc7VXt1YyRWdVJLPzYtbCZXQWkpNGp0cm9s ZFZPdGhLR2VjaTJ9MntvdVUpLXd6QXtMfjZrQVgxPVYKenFAbz05dlooSEkmeVArWENnYH0oVy17 P0NFVkpvSlk8X1MhP2UpZmsxZVMkPkshOVU0ZU8kaDlhYjZOb3c+dlVGCnpKNjd4fHVISmNFUmN5 aS1rVzJ7YldSYy1AU1BecGhAJTNvWiRrQyNodFZQKCRhaStkKnlzMEFsenoqK0khfW1Fcgp6VT5E O0tVQHJyZlQ/YGlKQWQ9NCZHeWN2YF91Z2ZlckRGJWh5KGl9VzQ4WkJXTStgaUdeIX1YP2d2ODVC JlYhOCEKejg7JmlTMUU+MWwoa1BeZVBzJktQTnxfbXNaRFNNP08lPmxJaFglOGAkd1UlOUlIeTh+ ZUBDWEF7VGNvKnhwUU9PCnpNYFg2TV5WUk1CM3pXP35lUW4yIVIlc2gmdCZEcmswOV9ZOTM+MX59 ZUU5TjZPXyQqO0h7fTBtQDIjVForTTtieQp6K30rKlhnUyRmXiFKVk1OQXZncWdDJTZXOENxUXNf QyVDJnlhNGo1ZVckKnBZWXd6b3xkJXh+U1lKT0Y8d1c/O2QKekRXbElaZGhjc3FFSEdhN0BjcmRi cSlHcEZySj5zNVMmWHRBSm4oQ2VPO2hMQilzcjd6VGRRQyZKQEwwTXtOQ0d5CnpvKUB6TkBeNCY3 TEVfcl93d2FVVHAwQF4tYFBEbUBTOGRyS0VDdFZKMTUqWTlQRHolRUJRTjVxKCo1WiV2WXhRdwp6 ZTI8XzFATWlvITFxe08mWlVSb2dyeE52Ri14anA9T1hgMjsyRS07Qyl+d0NQdDZQRGdSbTRSVEAt JSp7WEVkLTYKem4+fmJxVDBDX1BGa29FX3VvdjUxRTd4SDNsQ0I8ZW5hWVhAVTdVVlR1WkpaJkxP fkBeJGZ+fkpgcHhCTUU1bF9xCno4OT1peD9GSCRnN2w9fG44PilaN0cqeV5OYG5pWktjUztAJjUo Y1RwWTtnbXNnSzNMRCVrI0w1ZGtqPG5GPnJDbgp6Rko0PklUTCFVVGV6bjF6JUtheUZjTEtNSzNX REtWc1BPZko0RzVAR1RYQ3VNait9NkZiKHFIaEl8QWRpXmB7KHkKemxRYU08dk9NUTZ7JkhvQHFf T3A7T2d0IVBMSXRJVjZ0WnhtO05iey1eZnl8SiExQjVHU2xjZkgqUE88Zm9qflEpCnpCWj5AOEpV RXkmPSRwdlNXQml1dkR9WV56MmB0NDBIKGpmT1I1NiRKb1hPakt3WGQxSThQZkY+TnUraVlHUig+ NAp6S1FLd1QwYisjP1ItYDlldkVRWUo2fVMyaStsPkRXRD0zYGtLUl9BdFRAQmQ4RlFkQDVjPXQ8 fWFNZTxfWk9zKWQKekgrdm9pKzFXSTt7cC1idmlAMTBvQz9PZC1kRj83ZGo4eEpBPmx1LUVCPHYj NEcwI0BKRCVjRTNjQkJGfmluJit4CnpKbCMmdzFScy1rI05CRkpsYS09QlIhbT1lYGM9QXpfM1Yy M0MqPF5YIzlHKX0pKiVSenRiOEtQO0lTdX1wd0k+awp6QSFkUyNARzNYKClwYFQ9d2B0SHBGdnVX JVVPQmEwPHhUO20qUGtgPzE+KjdYNW9vR1RfX0JyY0Y0LWFjdW9ZeSsKelNnMGRFUkBnSyRMfTBI O3l9N3FTUDNrZj4jODN0VSkxJXtBcXF4VnRWa0IrRD5EczB9IytoVGVEdyREb2w5SHEpCnpKQjBT NyF+K1Z7cjUtX19YZTApVCE7fE0+cENnfmI9fjRWak9rMTdsbXckRGp5ZE5OKnZWTz0wYEN+cD55 QiE+OQp6OWw7VHFOcHRAVCE5YjckYk52REsqP0lwSENAZmJZMEVHWWhUcnl4fjNLOWZ5Rmh6OGR7 XmVCLUIxJmUqITx2OHYKeml2Tml1SWl1fHVWQ3ZHYncqU0R8PDNpQ1hOSGlqRVE/fWZIIWw9RU8w WCFIKCFCRkVyLXt6e0NZWUJObDI/NmRPCnorYVI2eCZrZn11N0BWdjd4WGNIRmNfNC00SlNGSS1n dzlYQEBnVj5VdSpSTU82WkglMUB1ZllVLXhzP2ZgVWt8YQp6NjVyLTRHMG1hIXxMSVFZSHhRfUhh MD0zYSF0Zmk0VX1kRVV4VHFRUSRyU0pARWFOdFFzN0oofi17cHZpMHJjZlkKeig2YFVrek9QVGZR JHM+aVdIN30hbkBlMFBlR1RZOztBPnAkOH0jN2EkPkpEQGJNemEmNiFMRElvV2ZzSk13SVklCnoz cWJnaUZWZD5IKkl4ZDhBJFJ3KlpXMEIxYy1zQ1AhVTBNTHd7fWAmY2RnMFphSmttKCt2X2ZkQyFo YTY9dUlsJQp6NTUrOys1RTliJXJRJXFfM20xZUBzVkQoNF8wPXB0O0tCNSk3WHNRajtmX0dkaTxu cFM0fnwwJVhKI2BVaiQxKyQKeigmP29KUSh9bnh7NFl5eE9CSGxQXyY9PFlsN1h0KXZJaFQtcCpz YnJwZWllK0B9SFREOXMoTlp1c3tXMz1sKCV9CnpnNkwjbW14Y0xzZV41SlUwOVppQ1QrY2NJX3Vx SGZwZCpYQnN0VlM+b0lWaGgwU2IoVFl2ZSE1bG9Da0VET2c0cQp6YEw5O2ZVbWhnP09pa1lsYDIp LVJ7YkBtJFd+Klpqe0NvSzZFJl4zfTxyU3t+KTVsX2hGOCV2QXwySnloZUBGQjAKenIyVkAjfExq K1B3Oz16Jkoxdk9RQEhlMjR7ZT1mbVgjWVE0dkE9UWlaYH1NRkh+K0BYZjZwWDtQYmghbUNnXmJi CnpIKldyb259NXU+bm43Tjx8MkhRfDAtN317Rz5OfXlGMDhrPzBXIXdfXlpyNytsKnUoNE9IcS1S TkIjZmtERzhGawp6eEBRVHZ2RGpqI3tIdyQ4N2UmVGcwPzd7fHNQa2NTQn1zN3AlXyU3aHszKlIh YlUzTzFuO1N+e1YrJX15YGshOD0Kekd6KzNBMjBZdyMzNnorMHk0KF5RODU+Sjk4T3E7fkw5PGFp eXhIQl5wJU5CMDBGbjhha097Q3YzUElkXlMjJEdaCnpRd3hqNUBMQyNiWUxFazJCJllTPGEwQGco I2EzZVhzS1YtZypNPkhrO2c1Qk9NP2xQamBZbjVFZ1ZeaG5sV3I2Ngp6bnNoT2Z4YFYlZ3hsdGNq SzN7dipmPWhLJFZkbko5eUwjYWMlYzhSe1FSI3hRRVlVOCRGazJ8bmshWkM9ZTl1dG4KeittfXhh UE1wPEMqWmRwPjJKSkd8QkpwQndHSX1RKSohLXVlX0s7RUJhTFI9NUFod1kjRDV1TEFXbHg4cG1G THM4CnpJXjBoaGM3cX5zWElJNHU2NE5RODw9KkA7b2R3QkA2MVood1dJODxXQnEzcHRiPDF9KCZj Mj9sUTFrT2pqMWAxWgp6S15eQ0pNQEZ4al9Me3NpKHAle2x4d2ZJP0JOc2dhPW5xSU9qcyZEODhM Zkw8ZDx7QkoqQlloUklUcHEkLWFVVFkKejklbTklb2QrPiRqcXZhJkJgbll1JD08fUE2JmJ3MyV3 S24/PnUtaWwxSEVvI0kjMVd6SE5OXzBra2ZXT3Z+IS0lCnpiRFgtbTNeXyUzeHdUVUB7LSVpNWIm S2I8aDNkPFItPk9zTkZeRW11SS1IdDdQTip7cEI1Sz0tUmJgYiFMcW1keQp6YXdSa2hmJClFUXpM KXA4aUVTe0puMDs4eGIkUGZuPUtETkIwZ15zaSVOTFFkKm5WbHExSnptRl93PSkqSGFtVVYKemtV IzErU2V3MX5YaiRraUBqJWUoaW9WO3ZKKTJhSUhURmVkWX1XckU1X0ZNX0FyakpNQm9xLTZ1fTs4 YTRGajZWCnp2YE0jSTU0e3IrM3MybCgrOXd4UUxNRl5xbUp4OVhse2JvVVRCcn5HQEB2aEM0bWUo TSQ+ZnVAJClyajxweUZ0Zwp6amRieUcpTG1qYyYkPiFiVyg1IXcqSkYoRTIoPm9jYSRxdkVGP3tX e1J4fmRYT0NYdzlxaXp7VypqdzdLIzxHIUAKekxqK15zZ2FQU2cmZUdsXi1XS1Qwe0ImdVVLZ0dx UXFYSEJhVj1Ra0FhPUNzMyN0T301KiVRIThaNkthbjRDe1VpCnpTV09pY25WT1N3em9VRy1ANSs4 ODwjO0V0VWFsYXFGJGE9YyNqVkx7K0s8QSRYRG1MI1lFe1NZP1YwajxadSNATQp6MikjfCtzfl5w S0dhVD5LSkYxfCVALTxzNGtYTV91WTBDOE5uTEN8TWZ6UTVAZFlnO2U0VCVXMm55d0lhQG9VRnMK empyQSQrS2VFdktfT3Y1P3ZYUmd8VFlzQSN3ZXNAKXhRdmpIcVZedGQpenRNbXEqMD9zU3IkMDhe NzQkSmtIOS1VCnpkLXBNXiFtS1Z1RVdrcjVId0Ymc29nM3QpeTAoO04oKTh8JCp4OGt3JiNob1Yl RHhGRzRyNzFkc2plUCE7aXUpfgp6OT84RFhmUTxQemQqaztTSWQ3RFVxTGhKMmJ5NUtMcSUqYXBP ISlkaiM5YGJpKDEyYiRDU0w5T1JhYn07a0l0YzEKeit3NFVuND1ndnpXQVhjWkZXVkN6eUdXaiZM RWltNXpySU5AOVVMZitvLTA9S01wI2Rhd2F0MzchZTwtSGctfEVOCnokTV5RYnZ+eVM/WHdjO3BN blF5UWFId0NGb2NpQDtacnwhODRgeUc8bD9INXpqRW5fS0V6SDJDK3ZUejE4Izd2fAp6OEg2V3xN UTY4ITtRX2l1MlhMJGRyfnMlQ0Atblo4KS1HTC0/VnRNazw2SUhZJDlffHBZV3N2WkB6TWFgOE5D Z1YKejBHUTNqNU9GQjhEZUNlPnFefDJjPUdpJmJiPXBsK0BFTlFXX21CTz1UWkkpdUBNVmUoJj1A YEMjfEE1dmFzWk92CnpCQjxaSChCSmlhaE8leipaK3J0OENpPGs9RnVHSFh5XnotaXZXJE8qJT13 a3RmUDhRX1UtX3ZeQzgzfHxCWU90JQp6V35aZXVta3F6MVl4PUdoTTg+WlErbGxYdUNAU15oSWs7 LWkjJSN9eG0keGRJK1VLJlRec256R3dKb31GdG9ZeHwKek4zQXk3PFlNTXxuaFl7RFRzTUc0N3hL ViM3Z183TT9uY0M4NT8kQGY8TjEyI0ZELXI9cFRLSXxDSmkyTWI4PHI4CnpLNGdAaWQrOGQyYm10 TitzSlRwcFEyTz9iS05tK0FYT1I9akxGXzNyM3R9a2lJeyVvUiMmLTxGKXtmb2xvNHc5eQp6JG87 fWI9OHRHLXk1P087NFNaQTU4Jk8kNU4xKSpOIWZ5OGExfWUtWlg2KG5vMVlUX3tSXm5DOz5JT1NR NWV5JmgKelJmdTBvPS11aHZmMUojTU9UZnxZRzxDY2c3NktOSHE9MSlwVzk3NlpRR1N2SFQqJktB JWE4ZDJkczhjWDJ+Iyg8Cno0JEBnKz5rTiRDJW4zcW1UNXtJa3BzZExGdDh5S0xKM29lQG1TQF9S R2xUc3g7eCteTWRUI0c8RTg2THFmJjBIbgp6KUpGVUNaMCE2Pm1HbWcjJTNySDc0bXc/TClBRHE9 QVJrZGs9cmdPOUByezIqd2Rmfj1JP2ZiamdYdzt3T3JDQTYKelB4QDN2I05fd3ZST2d+KCEkNzxt WjEtQ3UjVERQbiV2UVIxanpfOzBIKjJIRTwtJmFRJG9ZQStxN0hYVjt4fVRVCnptPGM5bGE1WilD SEtHekpoYTE1V3V7ZS0oYT9OSXdPeFJeaXo0RVRZK0lRfVdZWklvcElkNXY5SilOaGdLMi1HUwp6 dFNJX1p7cjtvKjBMJm56X05KK3Q8K0ojI2NAWXQmZEsjYzxuVFJtV3M2MjBaO2w7ND0ldk0lenhK IUkyYn5HaHUKeklVKFVZKUErfFBUQllxWVR9TEM4TVgrQklKc1F9Q082cVE2PGFQckBRbCFVY0Q3 Wnl2MDRjOUpEQWJLeyhwak93CnoyWlRwNGwpbUpeOSZ2ZD9QU2l2YCVMQ2o9QkBxZH0xMUU5Ylpu bzhWZG8pXlAqRGpVQyNwUihmd1ImJDJfOChHWgp6cVVEV1hxQilka1hfMU5tbVdvcF4ramZaQHJY UlJCdV9KR1k5NCN4VHo5WHx3V089a1gtbGB4NXdHcFhycTFrakIKemZeLVpYZVVvREF5cyYkejsz TXttcEJaWUA4VHpHdWNqb0tMS2A5eFh5fCMhO3NOVz1HJk08SypGckwpRkd9fWNwCno/KEs1MT09 dTtrPE1oYztrVzE0Yl5FS3BqRUlRR0cyQnFQPmxsMEBlPFBLclJDKk5eREczQmFpenp1TEA5flVL PQp6NnpPQVBAcXZ4U3lCTVluKDwmTE5Qa1NHeVooZEArQFpDNE4zbnpad2x3bURtc00ydyUoaDtf PEEwZmwhdiljOV8KemdvcXVsa1U8dmsleUhVRVReekJqbzV0QiozQ3B9SDckYChaVWs/STRId3J+ K2xjWDZjekxFMn1GT1NjaD9hVVZiCnpeZ3QtdkJhSTY+KEh5RGJAdVBMem9RckxKQTNuU0ROJmJs SHNUP1plXkstQkJ1Qk91S3JCOGd3ZitvS3RjYWQlYAp6TDY/O3xEXiN7SVh9b25ySG1JN2h7dyRC eFZtUTl6V2RGIzVSZlpSZyY0I00hZ3RfSHBCY1UmaGVPJGM8STRIdjIKelJiY0IhPVVDIWBJVS09 WElIaCNkZ0lxXnReMTMrbFZZJXs/c242bzlqdC0jRWM9emVFeGFPeS1xc0kmPlk/KmwrCnpGcWgq c1N3KWY4K29AYjZ3TSE1fE1JLW1ZWV87RnUwQGNVVTdSOyFMcHw0KDhgellKJUpSYW04ZlYmY0pw ejQwewp6ZFQrWDRvX3F+YkdaQEBYY1M2N09rMCQlJmVNfCNBV0MwO0tASjFRNDZmRG8jcGt0aXpm ZHsraFhmYTNNO0w9X3oKemJASSktVzZmXkM9aXVQeFNGT28pTWNPO04yP1JsZzhfMWshZjZUe2ln SEdncFJnI0JBIz4jMm9jU24mOWthVy1ECnorcWZ0Mi1SUEFlOHptQyRzKGUkYV4qKnJMP2RKVVpR UUdWSSFqSFgjUjl8fmZaaHxxfHJqSG1wWjN9YD52eytFNQp6WSlabGs5YWpNTVEoQlB9WDN7cj5s K0V8dGRKYkJSeWFLdysmM01Xej5hJkshQV88PF5PRi1kNDMyTV5VNCNLZlQKek9rY0d4P14wdUdY MHYkXi0jcDRRYEElfmUwdkUlM2FYZjlmKi10X2ZKaCZWQEB1aTZHbVUtIWFENiZVNEBNWUx6CnpA byY4UkxnSClSIUBofVVGYUVTQi19e0RpYjZLVypBLVZ5P1BXYjdiVnd5MX5PWj58Vz9BZj5tK2Zu ZlNmdXlnPAp6RHdaV2dqO3NYYWhVTkNBQGIlPiNTT3JCXiFDKSZ3RGlCQnI1JWBJV0YyV2Ajb2pe dz8rUldOSVFJbXRxJXFwPyoKem1rMXgxVSZUJDYod01xaCtBPSRydHd+MTh2Z3g8djIoSGlSNnVI Z2Q1Zm8mI0gpcm9SKjxLZXpfZGVuZkklSTFGCnotaU8mfExLaHpBOWZ2LVh6PldQVCVEX1JtKkdF MSg8Myh0PXUyVVlrdzxrR1hgNEgkSTlmMFpre2lAfFdaWil2aAp6PkU3OTJYJmdkUDMtYiV+Jllq dWV5WTZ7Yk9VTU5mSjwyMj5CdT94WlVMSk8xcFcpc00zI3JXN09HLTsrOUdrckUKej9iQEc/RTU1 c3B4MF9HalJBMkNOUGc5dnVJRVlpXm9gRndrcj9PfVhWOT8/Kz85SXxOJjd4VE5HLVQ3cmRWZWQ2 CnpzLTlSWXNMSUxvIXxCe35oR1Q1UHMmRW5xZTt3TXZLITRMMVh4QCh7SFIzQT5FaVYyJUB4QUtk ek56Kj17OylFdgp6dF9tVU1OIUs9Ymsod1oyOCRGNGtwKGJeYWpFekFXOXcjfGY8b3BUNHg1PEIj SUluXktyX0BDeUp2RHFyS0syfH0KekhYJFkjVnd0cFduUnE2R097I0YwOUMjZFheaEB4JEt1YlVH KXFva04yVnVwdnFUVWx5WFN5RztwMV9UQXBIOUZBCnopPnxMV2kmKVghYCgyQn1sQH40RyteMVZA QmJRUihwaVN0fVAyb1o3TyE4ezhzPXRSemIrUWBHWmBFezMjM3koVwp6WFF9eDxLaHUxNGo3WlF6 Ml5eMFlCTlQ1IWtTKlIlNW8+QXZYdSF4WjNwPitnbzcwakZxZlo+Mj1FdXhxVj95OyMKenRFVzA2 SUQhQWhfSTlgYENjaG1+PE5SKX1neGN9di1jfmFIeFV8QWQ7Yi16WXFMODNnTFNmfUh8RFgxZkE0 Wj0tCnp7MUFFV2lBIURiPk44O2l1ZUhkam9RYjZzeVlQKUFFVj4pRjlUfWpVMip+aVIzTV9pe25e QXk0YGRiTDZma0s5WQp6djBHdnNYeE0pMjxzMmxVcmdYTjBOMGdwSCFnR2lDT0NXYyRGeV43Pz8h NXxoe3NSVzZmeXwpTlRRfXR7VzZWZFYKelMqKHU0RjsmZT1iendBfEQ2dE40SDF5SWRFcjV2QHRs VXxnMlRXakM+QUJkXjckI2hSbyZnJD8rfU13WUpZNitrCnp1WF9aNUhgSkE1WW1HJkJeQHM5JUdA fGxTRExkaH5ET3gwPD05Z1J7aDRrdkgzYj58KzUoTzsoTko/eThiKkpJNQp6V25aNlhAXjwtVnJM YC1CUWRvSnZTR1hwTVJVKklod0hFYyhvNEJtM1hzYDFZU2hXJnNMSyN5e3F3I2RFJGNiV3cKejQy U1hnI2JKfUJGUmNtRiFfXjNCQX5YPEwqeD19RnQlKVA8PXVvNTZPflZjb1ZAMT5oR3hjdDE+PUdw Q0lRYzAlCnpRNzt1ZD1SRj5qJnMlfHheeDc/dHhlUEB8UWxUbWBqd0BaM3EjSnVBeyRSZUE8eyQ9 TnZyVV82ZEBJdjtwSmYtTwp6XmQ7RHojPTM1bktiVSQlSyV5R2ZGdWxtZCQ9P3hvN29GY1d0SUNa T00+WmtsTm0/K31UOWJFKzJ7IzdZdFcxOHMKejlkamJaJHNJOVZIPGBUSTh0JHdycmA2MEsrMGQm ZFpnNWtJLXpWM1lDbWRyK3FPb0BsYEdiPmV2bn5mKFZjWUxHCnolVT0kKCtufWRyJDd+fjMmJnR+ dnRiTCFSISMleWQ3TUR+WkBEX3JKRHB9UyQ1eXJ+KXAmcTQqTyg0djAqeiFlUwp6ITZ1M0ZSb2FZ SkRXUmhIcDBQS3U0Nkt5Y0lRP1d+dUBOcCtaOFRiTWx5bmdDeG1QQnBZUVMte3tpdlpVJnZMfEsK ek8+aFZzOGJGYnMoKmF2QmdpYDF9dExKay1JTldnI1B0Pn1sOFAjUCpMczc7V1FNZDBDZFNTaylo O093d3g1R3RyCnpvMn5NWT5WcEB9RlV6QC1fZ0leUj0/Ql99aGY2bj00SVI2IUQqODczMz9kKEZ0 OXZ3NWFgI0pXJX56amJSd3QhQAp6ZFZeeSklKj9lLUhAckomJGxFUDJOWH1XNW5VWCVpcHNFS19a TTIqfnRIWXY3I0IkNlMhPUxyZGVMVGlwR2paQXUKeiF7ZXlRTm0qNWk9cmVxVXppYXR+Q1QrJigw TDtRJHVGZVRHVX5qZkBHSlpYQlQwJmBZQWJiMG8+MmsrfUd7PH0qCno1R2YrfClAM0tQbUx+dGY9 QHc2bF8zSnJ6SUskRD5TNkomc3pzZCV7SSlFNTl4bmZfJEhYcUVwNlg9WWA5Zl9QVwp6PnpmPUpW ZXllT2FBPStmMnYhTyFjYj9iVGJFeGdCdTh3OGtgSXtRX15wVm5OemlUUDZ3KDt8Mk02IT5nOHpH dzAKekIyfjxzNW92SWx4b3s0X3FndTUrdk9fRX1aPXU5dFk9PW0rO3oxM3M7PCNDUzItbWIjYEdi KWN6PzJWJDV8NVBnCnp0fV5HQzFOa2Q1YUBSVndLKzRKTkt4MkJWaGY0d2g5SENtQVJtd0shcSQq aXted0FPNz43KDs8aTlzRyUkNUk8awp6YkVOMj0yNH47cz1OI2VTTmF4UlMrK1hxWk5Hc0t7bilk Z016aGpYPys0JG1YX1F5JnVebTRqe1ZQfGstPWR2QFAKelNXdSUzak5RWU1uTyRrQWMzP2FTcFEt KXE2blchRm5pMH50OHVOJEVAZDlfZXNSbytqUCNldlJ2NjQ/KzVIY3pICnpOKkhhdlp7KT4tOShz XmliRDVMd0N8SCg/RzM8KE9VIVdle18mVEd9REk9TV4xYDhoY2IhJkxSMmt2ODxmN002ewp6PEBV N0JsSC1qNFR6PHF8SCVyOGsmYGpoP3dRJVZDR1ZKOyFMNSM1VEpLUTJpUEpad2AhX3hxQDRCazkp bUZtb3IKeldAdWF6bVVpVFFaKzFQSjF5Z25lbiF7d3ozS0ZqO0QmVCZ1P3ReJj9hdDc8RzItTU1p MX4mJWJfVTVlMUNTdURXCnpsZnwjbihTIUR0YlVFSmdpbjQ1VVhKMkp7eF5+OWFWKlArOGRzMCFF eFRzXkY4fkZ5Pk5uYlJ2PUBGOFoqVTR1Pwp6dFMpfW8+M0JXNHRJPGpTUTRffTZnN1RDeGp7ZlBN Rz9Gc0w/bDtKdTFMNWYzQ3VscjFnbHFlb2VKWkxVLUd3ZmEKejNaNFdTM3l3QVlafEt1bFp4YWQ4 NCNYQFdNVGMtdSh6QEhsbXVAYT89Jn5GWkRpUCZAJlhiRHtmRVpFYjMrTU87CnowbTU9Oz1XVzV2 en0hK2hoZkBvSlIzQU45dHZYQGgyNz8hP1JTQlZTJVcwXyRJPFJRbDJUVClXa3lPbEBoZkpGKQp6 PXVVNUtuR345WSM2PEVPdE8/ZlBBclB6Z2hheDBpeUo4eDwpT3Itb0VEemxHJkluTnBYO0lnell0 YH4/QiVmRGsKekd1a2ZDVF44P3BNOztTYG5kcXp+WTJQMD1IWm9ldTRBOS1WT18pdEE3cU9gPF9g JXpsdnNZTEJqJndfUGd0NDNMCno1Y1h+dGdTeVBrN3VBIXlCciRtVSs+OHxeIzd9LX0wWGtQSS14 SXJ0WWAmP242JlUoND9jQ2xLJXRfIzZ1TiNpagp6UmxZdFU+aUxhYSg3Z29BI3xpfnxvTUBCWTZU YStAMnopcHg8a2JAK3psdFIyQUBJaVErP2hIQSskbmk3N1FHVGMKeiprTGoyN1ghVHBDVCl9PDJy JUU7YTVqUnxaQzdRfkQqRVZIZU4lJmwoZTZnMXo/YXA5PnwlX1pDKj1VeCZ1dDhmCnp5OD4lITRp Z0tvUSRxMlNDaWtvU0JJPEd9PEE5QzJtaCRYdUtPZXtsd1AmJn4/MnFlU2x1eFA7eUR+SWk2JUY4 UQp6JCkoejg5aElFPHYjRWphZThnIUwoM0g1K29uN2VnTERGUUFfaXkyWW05MXhoOGA/OWd7PDYx Qlhib3BCMjtpe2YKelpJKGxlKCFxdW1od31GcEViPz13bmZxfjg8QzheSGE/MyQ+ckxeenx0WUQ8 PVQ5PTtEZipWUyN5dS1KfHJ0Z3VHCnptS1lRISVMYSFBT1B4PXdXMn5aIVJIMCo5IyQlWEctUUBD d0tCV0NlSHBTI3JSQHswaHd3fFJkX0kkTT4mdX43TAp6TiNYQiZ2KXplTXp0IWZEPFFfa2pRMX1z IUt7cnBpXzJCZG1NaEVYX3tWcUxvQnhzY2k+Q05fbEpiaVpVdjlEamYKejZrQGh+ezQrYWRpeHZC eHFWOXhHUE9ORXQjdmJpOEJTS3hKSlNJMzVsKEZ8WHJaYTF6bylHPSRgZD1Qej00ciE8CnpEKE9D OFdPTGdSUk5rSFBfSCFqPlRVSGZ3cHRHVUpgRCNqXiV0WHtWdEZneEUmSGZEZnMpcENuZTNRUU8l fT0rcgp6c2F4eFVXIUozVjA+MUVqZTcrbm49VSVGbGokUmRFOVN6flBnVl4zRV5qOV9gQkxvc0pG S3xeN1U7S05FUldATWUKenRtOSVLSW9fSDhRWGNwemhTY1lrWnF+fHtubEViZjx7dTthOSZhJE5o SHZKMT9JcEVubEQxbTdTYmstZnh9S2BwCnp3SVh9alZRPmZXZWk5PVVgZTItaSRtJjxuRmpuR3xh QyhUO1EqdzxqUlg+PH1sdlkkKVdUZzFpPWlRfk13e1FeNwp6XlZ+fGZ3VWo7MUlxelA7cHV8aDJu eFhhZU1nUilJTSZ3RUwqWUFVJmJ2ckwyNlBtMlJARzNvQl8/PVVANEBNMHUKenJGeD9kREZ3ZEhG LUhJaGRKJUMtTV5EZEs4RUJwSE1hQ0E5ZkhhTUpudmdaUDZSR3kyQypjUmZldng1QjAzRjJLCnpw MWszMD1JUEUpPipRWktHIUdtSjlYYGg1KntCMkliMCVWd1B6V0N6IzhrKFFEaiZlXzRBKjE3X3Z7 KlB7eVoqeQp6WD9USD1OX3swWDl5YlY+biFfaEtSdFh5SGkrfDVIXmt3RiZ6byNuKWNkMiNTVVcm ZV4jPVhMVlpeNWdpKkUhPEQKekU7IzRhdmd0SUUhNmd2RE5MSSVYWjs0PVk+Z35mNWMqMFJYKjkm VFFCTmU2SyhRdHtGOyR7SDBUWEp+bl4rUXhDCnpsYyojb3lyT1hyTHVVd25iNGcpS3lGPVMqMDZz TXRqP0dfaGE7dHleSG4makcmPWx7bEhQIXxUR0YpI3U0OUB3PAp6X2NDZiMtTk59aiVGVG8xSXUr KEhybEYkaVMyPzFhVFlhfCpRMmZMWWFgYGU5Y2V1bEZ2IzJnfVdKMSg5I184JUIKemVDLSsqXnlK JVhGUTJqSWx5eUJVV2dAU3szNEY7KDQwT1cqLTw8fHJRQDY4MGAkQ2QxKUlCdil8RUUte2EhTGM4 CnpIbFRAP0JYV1hZYS09Y0U+aGlMQU1fUDNJaCQ5fVNBYjQzcHo7O3FlTkplZUUqYyohfWp2UiNQ e3dWLW5EJWEmdgp6USRXQmNDU2NKSE9fcU01Ym5+KTdKSTlkdjduUXkpQl8hNzRkflo9RTVFPU4/ VGMqU1pnV318QDRASz96SnpZJHcKeil0a0VIUnpFZDZEeX1DO2BTNEJLY0lCcCttMXt1bzxedSs4 ZjQ2SFA5TWA1QE5DUEwteGBvMmRaRj4oV20qJlA/CnpOeTlBfFJyLTtqMzB4bjBiS3x4TUo2fS1V e3VkT2tiSkQ0Y04oK0swSiVjYnNob2RnYU5SY1RhSj5FVy1uVWQ7RAp6PTRrMlJFUF5CMzgkT1R0 Iz5mM1lMMW85diQwUEd4UE9ZcnNEVlM4YCQxIVU/eEpWKVZsPVE1Y0RuRnppJG1JbiMKeiNtJX0q dVJ+YVZPNXtoNFR9ZzBIS2M+bk1KQ35Odmx1R0VnTDApS1h1bT0mYHgkQXNkUVplWn1WSGpgdTxS TFNJCnotQSRQKSs1elIlSWJgMFctY1poSik9a0Q7UVkqUD8lNkRyOzwmfDN8bzBHR1EkTUJ6JVIk UFhvaXY9UFMrT3REKQp6PkdXPWFxZ2p7OEN5JTtFNEd8RHpZOX1uYDRsaE5TN1NZallqMiRXcSUy M0BuIVNlRitfKCVpU25TOVB7e3V3VVQKelJeOW14eEFuTCRzcDgkMEx6MX4hNnh9R31IIVJeeVF+ THB4QFR9anRhcmA9T0ReMXU5YG0lbCg7NWFaVyh3KFNLCnpYd1VXMXBYbjtmZypsaX5AMlpDeT5M dGRtbVZ0I3diLThgPGR0MTNXJFdxISk1d0Y1dHQrPzc0RTdRJCMrRX1ZNAp6ZXFhNm85O0IrJitq bCZiZlN1RUktK2BmLXs4ZmI/cVE/MT12RHBlJjMwV3Bxe1ApMzUjMkh2YWtVez0hOGdnRmcKejRR PVlpMWEoJkhpJmNWPiFuMXR5b1VzSUglbk0reG82PGo7d31FeW0jTyVUUVQoSF5jRTFCTEdJeW18 dypyUXViCno9Y0tqPSFDPSYhZktEfmkhRUVmRmRSajY9ZlVDLUJ2eGdBTWhYUClfeTdRaCE0d21B Q0UkUWVSbm9NRE5oUF5ENgp6WFBFbFkyM09CJC0jI0d8cmY0U0Y8VTkjQTc0ZVVyYWoxeyZid1F6 X2RWK0d9OUtMaU9jSGp1P0wzMilFJS00TWYKekQ1NS1rQEo4WF8zcFQlJEBtez0rcl5AZU50UktJ WithRHhtNkUqRERffSpqbTRzQ3xfV28oSzg3bnF1QG88Kzt5CnphLUk1WiFTSU4xMlgmQkh1OGA4 OVpIKEJzNTVMZ3RhVUgkQmA1WXlDcTY4dntncWRDRng9dXA5ISN3cT81Jl5hYAp6NEJMUGJFKlQj WFJWLWMhckY4MWg5a298aVFOMmo2SChuNHdfZVFYdWxvYCliUWRvWTh6I31PaTdqMyVsK0RfYi0K eno2PkZwO2AkSSNmQC1OWlR0dHRzcEVJIT1makwyVGgzfi1Zaz41Ul9nRkYtZXZReFFfdlAyQmQ4 QXo9fU03WkJhCnorVntmK2dsRnAkN0J6N2I+QTgxfVJjQ0RqYjVPb0dfYz44P15GcWhQI2V3fXEm JjdoOShZIUFSeHM3YEl2YCR4LQp6OHpCbFNEKjZlKyhsUShsZkIoVD96eyMyfjIqISlXPExFVU0k eWFMXl9JfE1JcTdAM2d7OztaSi1rV3FrWWM5KnsKek5OMV9XMm49UWF2fk9hRUw3VVJWNSVAcVpf a2ZGb1pTdShvblhOYCg8eyZjJGBWKFdrdVF8VzttQCFxeHIkS3dGCnp7bFB3KW4tM3lmKDB5ZiQr TmtIPFM8anFMX2JpKVhvQTE9bmI+e31iT1JPTWB1YHcoUjZ9NTlwRXxpN0hXem1sNAp6OVYtbG4h ZWdieEhVNFhhJU9VJDJZcC04biZMd1VEIUJ6dmpHQ2pCO09FYStDMkNkVU1SU2BoT2NKIWs9S20q cmcKek9OeTVBRCpMMFB7dnx3JGBFPmVjN28+YnU2UDVjVHlfa218O1kzcm85cmhWdmtrbFhXSk9g eFlscT5rS1hWQ1FxCnpARl45eW0xMVhWSFpJWGQ/LWM+bntianMyJGh1ISVfRnlIbUpzRGF4empT QlFjMWZTayt7OEQzQT9fOD80b1NkUgp6TlJ9KDJiU0hFPWNwYUNKTW1PYW0qbGV3NE5FbSZ8PmBE QnJ1JlhlLSVGYDdYWEkkNEp5QF8xMSpfOVJha3p+NEYKelF3X2RzKjlrdD55My0zXnU1dWZYX2Zk JXhaeXN8NWNTOHlxNVZ8VXZKcUEwa0d1QktyQmRZWUYjRFZpejMmfX4rCno1QkNkbjM4aFE3dlpP K0cmfmR8a2p7IVIoYEc/c0xOOUF9cyYlX1h8SyFEMzxjOEVub0ImflBjWCtNOE5LcksmaAp6QkA1 T0VecCRJV1pRSWlFMlpUSjE1KD9uYGAjfTZTcWwlODFseT1TKT1qcEFgdkY0aFJsc0h6WWEmVzh7 OG4jQ1cKejlJR0Q7SWN6Wkx3dj1GeVZUNFZLNEpJQGh0cEZAWWpDaSZFYitKbW45dlZGbVdYQVE+ UGE0fjsoc3R7NThDMypFCno5UjtsPDBjbFY1YGc0Zm49MkZtUDVRI356PGBRdGpoIz99YndCRWl1 JjZeaysoSCMqNTF+ezFzYHlJc0IqbmMjSQp6UzYlZnVIZURXbmUmTk0wRGd8SVhOekJSZSFjJX5Y NjtBZXBRQip1JWRHezdOc0g2KXU+dTMyVExYOH14aTJ0b0MKenZsb2V6RUskUjlwciNxakVKQkk/ eylGU18/PFUjclE8UUt6Z3BGTDZiKkB+Iz8qP1FraVZEKENnfGwmMHYoPn05CnpVLUFzd2tVRWla K0lfYVFjPDw+RHB7VDYpOUZYb1ktKHJwbFBNY0V9MEpGNVl0akoqYWliPypuSVMmR2ppaytoMAp6 SzZ9YEU3Slh3NFlQKigyWUd4dXtBNXolUVFLXitYK2hXfmo2MSheSzlpRExtOEB9KFlePUw0Y09p UGkoT1BAVSMKem1rQSUlOzhrUT9DMlBVZSlxe1JzXiY2R15xM19lUT9TbmVmO2Y5IUYpdGRMfExe SDhLNHprcD5NanslfEYxd1dCCno0QUd8alkqY3I9TiotM1ghb25jV3J7Sz1rI0FBVGRHdkJNaCpx bT1yZSV+Kms/cCMkWGAxWVktQXAoPmA2NnNWQwp6dCghUGR7YU54QG4rNW9iRnpKJHFQUzxvMlIk cGp3S1dpWTklVj9jTT5TSVlZeXp3IylgUHQmayQlWVMzJipFbDgKeiY5PH1nPEJQJnY9VH5OP1JG UjBTPUJ1TTJrI1VYUVFHUmAjNzVRLURrbWpZVVlAaCg1ZiVxOXAtbnw3JlRYNFNvCnpPM1A5RipB eypxR1A4QnFRbX5ySipLYllSTHs3Qmdpcz49bndDSjska2ZqV3NURHlHfXVidl55eiFnZEc7ZmF5 Swp6b31EMSFVeTskVEFwNWQrQ0lvKlYrUX5kVnNzXklaaGoqSzF2VFNOaVBVYCMrbXpZc3xHJWc+ XmZRZkswMHJmaSEKenREODs9WGZDWCVkJHx6UFZ+dV8mJTIlSj1rWmJ6R1dXTiYmbllJQC1nZCVi bzd7SyNkQkc1b087Q0soYTxBPnFyCnpuS2YzMm0wPDktMUMkOX50Yn18UHNENzxHOyhsdHg/QXZ+ P29BfDRSWEZPbV4jKHIzLV5HYUJ4KEApPFYlPypLXgp6RiM4e18hZChkOSlZfElzTWFWamMycC1i eVB+PC18dnI3Xnc/ST5PPD15KXFVQiRkLXc/WnR2SGxvaDxGRnZeVD4Kejs2aDxNc2JlPyVYOF9B RF5vTndVR1djc2ttZXtkQGhTIzZDKlRSMzVzODBESEVLWFg8bHBKUmVtOzI0NDFBWkhfCnppalJE QE8ycTlMczhlcCRNempmaDVaZTNiZnZQezQ2VSRQJGQyQTN9ajshbEJGI0FuclF7bX4qU3VWckxe VEpQQQp6RVFta1NWOTw3bl92TEhPKF9DJFlxZSQ5MlVDR1JGaSo7cjcxPUJ7VDFJenRgS3BIZmZj UH4tNGVpKldqPGRwQUMKenUkLTNVPmspdEZfWWdgJF9mMGtXQ3hZXjkmbnphcXRJYkBYVk0jQnNH bFJHI0ZNPXl8NFgkQFo1dzJiJjx3QHdKCnpyRDtPPj8wYFo5aVZ+bVZCaiRTfnZMMW08VEN1VHtK R0tRRFFmcWFkPWc1Zyp4KDVSanI9fVV9KCNHWkspOCtEMQp6V3tNc05kN3UjIU0rWEs1N0NmQkpT MWhWSDRwSHV1V0pBTyRpZ0xmPER9SDxAa1BHbnlRPlgxd3poay17PGxefikKeiN0OWw7I1lvWTwq Nk1hYVR7aX0wP1hocG9xNEZvNU04dkQzMihCKUxMenE4fWNAPmAqaFVKOEJvRk93bHNQNSsxCnoz ayVRKy1fJEtOeyNhaDMzNnd5IXNxO2JwZVhAOTFAc3VIVktZMmxGKDNMSDQ8cm14O3pxeiV4JTN9 XmpyNkBEMwp6Kk9wfXtLaSt3NVVGaFR+OypTSUNUJXtrTGUkbkpQZ1AzREwoSn4jJjBVanB1aXF2 K1lVNVAtcjl9Pm07P2w0ZTMKekZPQTclVChFZDNqbHYqMmNZVDchck1yPW4/YnEhMllDVUhlX2RI IzQ3SypDbkJ7OWVKI0V8JW8zZikrKkZJZ0N0Cnp0Rl9kNFA3YkJtTnw/ZmVkYCVWcG0xSXZuJXly aXB0Nm9qJEBPP2QjdEh4WHkpazI1RmlkI18kezZPaiomXkxmegp6TCZeXkhhaTFMdldPaSVZU3pK bXduKFB1dm1EaCk9fExGcC04fnBIYTE2JF4/NFpgdyFNe0IzY2IrSjJCNllFdUIKenNIRE9TWnph PDEoa0UwQHZDJk83Y0d8KmxTYzlsYDtUMldvcD9KXzNpKStebSZYa1lRP3oyNFRNQGV2V0BWIyFU CnoySiZ5bzhjdjFNc1UwcntgKHNMMUwkT3t9OExoKVF6QnpLOUI5dmpCenJkeXZNZlRtTnQ5b0ch YFB+cDhTI2V4RAp6UGt7VG9aOHMoS0NuMjl0MGh3fCR2eHFzbWZzb1oqQFVZM3llSTZ4YWNNJkFx RUJte0lsVG5lVGgjaUNAe3l2OSgKek15cnFMaWBlZGhOaEpednlgR29wZ3JZQDZ2NFJWSnAwR150 N1M7djY9aXFWbGVwJXJNJihrKzBvNUZudlE4QDRRCnpBanNNfmk8WmxMKDJOWiYyXzdlNkdBXlRi dEJiP0pvQ2klP0tEZ2wkPHpSRTwhQVNrWEdDYCtiR1NgSHhUUDV2WQp6cHV4dEV6SWdvJjtZckhQ TFdJIS1ecllsQHFSb2tEWFolJmZUUTFNZEpMNnNiSkh5U19xUTI7TFBPR2tBOG17WEYKeil+SzNf Nz8/PSl1MzdpaT07SFc+TXl+OXRyIS1SZiY4a15LJFp3Ny1nRFVZZT4wMm8hbDkqZSojJiFAY2l6 eilpCnpqNnRLSkZFT3VhYUZydEI2MG19R1dnPSE5elpHVCNHPHxILUN5TUtQTDk+MWVMRCl8ZntS fj5vSV92bUxAT1JKNAp6KWZwfCtKdGdaRG9oOFl3ZXRAWExWSiR3eilnMHNUOzZlTkFRbT0+dm9N KT9AMFVpMHNYP2NZYE1XeUlmeyRnaXUKekJ3LUhlSm5tMkM4TzJBSHg9M15GUnFwTWVCeT08ZkVM e1NsIU1AeEN7TFFHRUl1fX1KOHczZ0c+LVZgUVUqSShpCnpDLWJkOTIhem9vaT4tNUJ3TWFiLURS YUEpYEIlJlVscllnZzUteyVaUGU7RmY+VyZZbkpBO0E9K1g3WmRzNHRgbQp6cVBib05GTHhabGk+ TiV6TG1uSStlJk0rR0l1ITc3UVAhJV9mZmFZIzRrajl6ZT9ZZkhnYzc4NSl2VXJZTUcmSUMKejZS PmA7ajNhIWF3UThQckE2YWJhcWdXdHhpK1lkWDAzKXZRLVc0VjBYdypSUHVqREs5cUN+THZhYEkt dXZOc1R2CnopaXd1PGErZ3IhdGdZQTNIdC1DaDRaezYxODklfWVQd1ZuQDcxRDR8JXhpMEh6YHJH U2M5P3xmdWgyJHkqd3VQcAp6WWNxamNfYk5WVmJYLVpwdTE1NW9IZHk3QlkoRiUzR0ZhKj5EPUxK OFUwMlNaJXR+WiZSZCU5cC00UjFvNTFvOFoKei04ZHJRc0VhNCg8O0NNKERZZGcjYmpSM2UqUVhQ Qyl7JDRzckVvfHR7KmVTWVlofnsxT31zU2MyU3Q7fT8lY1BaCnpZdkVHelV1c2NCcHxURkVPK3VO IW9FVFp2cjZMayR7K2IqY202bmx+QmMlPkJeeWE4Xks9KkZYWVNUaGMqdGVieAp6USUmZDAjV0so MEleODxaYSNONHdgOGVLYm1rZmMxai1EcVJNUzArYD9fdWk8QVBHKT1eN08/RVlSNlpVVVVEKzsK enN4OE51PWktRFAhQnUjWnlsaEhsLTRyWGBqd2ppY2I/Mn1FazdfZX0lN08+P0lMRm9aUE9yXmta VG8zUEJaPnVYCnp0SzwoU2BnPjE2Pyl6RDt0UUtOeUU9VUU4I0VAbCM8fikxJWYmbWBBRTMtKXpY IXIkPnVJblpnOG4jQ1EpVzt9Ywp6UnF4Z0JRWi1rSj9JXkhhdzAobGVsVy1yLU9edk8od3V9bDtu NDlyPE45eU1GRUpudTFaUGtOUWxhdUtRSztGZEIKekdmdW9qYSZhVGVLM29aUW9RdGZPXnZKMzRV MnVMc1hEb1FQPHNUQks4fGgjKig9KSFId3ZQQFFlbkFMX0FvRmZJCno3e3NeenZ1OShYZ1lUfWRi KFgrUWRlQC1xYyVoYX5vSnhLZmB7fEI/Zlk0dmxANlBtSDcpQW9+Kj9xJFVHTn1CRgp6a0dLNjRk ZHwjal85MT8kXytvOU03bk1FKVJZN1gqckRCQFBieSZybjU1PTUoQDBsNy11cylmRmxwbiQlSSYj WkkKejFQWip6VktCenVjRnE7PFNtOyshcUZXRCROPiptMUNKb2c2MHBfa1hsVT5jbEprbTF9dllE R2RJN2ZtN3J0XiM/CnpDSDI7PmZZZjlgcUBWfGJJfEsjPjl4Vz49cm9RbkpEdXhIKj59KnxkPEJh MWRCNS1wflV7aTtVdDtSQ09lcktMMgp6c1VFK3VJR1p1M19hfk5yPXl0NzJlJFhSQ1R2UlAyPGxg Q2oxWUE5PWgyWWt+YUZAXjthJDtEY2MmPD1xaDZwWj4KekxkUSlPZHtCeSEmQ2F9RmVSXi0xTV5P TXVINWVRa0w7YDYyezdJLTs4cDNfUUN8KHc2eFEqYjxObFQkdmFDeV9UCnpoNF8tNW5mOTUmPXpw MzYxKTBNeWRAdktfWkFyX2hrJTk+U3w3b0goWGx4Yz4+MHlhIVcwS3dmd09rNEVzWFppNwp6d0lM WE9eXkBfej97TlE1YjF7UEkyWXl0VyRPTn1Ven58V2Jle1g9S0ctM2NGZW1GPjFffHZDPG48V0Nj K1crQm8KelRUbFF8QndEVjBDZUdOMyk3P2x+OzU4IzdxbCZoNklFVzMmWHhOS2smeU5aSUtQPjxn Nlp+Zj1CV1pxTz83PkxiCmVRRXktMClxQWEoVHcoM3FaWiNPX0JgYypVU3RWezFfYGQqXm49RUpt CgpkaWZmIC0tZ2l0IGEvZG9jcy9lbl9VUy9zZXJ2ZXJfZGlhbG9nLnJzdCBiL2RvY3MvZW5fVVMv c2VydmVyX2RpYWxvZy5yc3QKaW5kZXggMjRhNzI2Yi4uNmFjNzJhNiAxMDA2NDQKLS0tIGEvZG9j cy9lbl9VUy9zZXJ2ZXJfZGlhbG9nLnJzdAorKysgYi9kb2NzL2VuX1VTL3NlcnZlcl9kaWFsb2cu cnN0CkBAIC02Miw2ICs2Miw3IEBAIFVzZSB0aGUgZmllbGRzIGluIHRoZSAqQWR2YW5jZWQqIHRh YiB0byBjb25maWd1cmUgYSBjb25uZWN0aW9uOgogKiBTcGVjaWZ5IHRoZSBJUCBhZGRyZXNzIG9m IHRoZSBzZXJ2ZXIgaG9zdCBpbiB0aGUgKkhvc3QgYWRkcmVzcyogZmllbGQuIFVzaW5nIHRoaXMg ZmllbGQgdG8gc3BlY2lmeSB0aGUgaG9zdCBJUCBhZGRyZXNzIG1heSBzYXZlIHRpbWUgYnkgYXZv aWRpbmcgYSBETlMgbG9va3VwIG9uIGNvbm5lY3Rpb24sIGJ1dCBpdCBtYXkgYmUgdXNlZnVsIHRv IHNwZWNpZnkgYm90aCBhIGhvc3QgbmFtZSBhbmQgYWRkcmVzcyB3aGVuIHVzaW5nIEtlcmJlcm9z LCBHU1NBUEksIG9yIFNTUEkgYXV0aGVudGljYXRpb24gbWV0aG9kcywgYXMgd2VsbCBhcyBmb3Ig dmVyaWZ5LWZ1bGwgU1NMIGNlcnRpZmljYXRlIHZlcmlmaWNhdGlvbi4KICogVXNlIHRoZSAqREIg cmVzdHJpY3Rpb24qIGZpZWxkIHRvIHByb3ZpZGUgYSBTUUwgcmVzdHJpY3Rpb24gdGhhdCB3aWxs IGJlIHVzZWQgYWdhaW5zdCB0aGUgcGdfZGF0YWJhc2UgdGFibGUgdG8gbGltaXQgdGhlIGRhdGFi YXNlcyB0aGF0IHlvdSBzZWUuIEZvciBleGFtcGxlLCB5b3UgbWlnaHQgZW50ZXI6ICpsaXZlX2Ri IHRlc3RfZGIqIHNvIHRoYXQgb25seSBsaXZlX2RiIGFuZCB0ZXN0X2RiIGFyZSBzaG93biBpbiB0 aGUgcGdBZG1pbiBicm93c2VyLiBTZXBhcmF0ZSBlbnRyaWVzIHdpdGggYSBjb21tYSBvciB0YWIg YXMgeW91IHR5cGUuCiAqIFVzZSB0aGUgKlBhc3N3b3JkIEZpbGUqIGZpZWxkIHRvIHNwZWNpZnkg dGhlIGxvY2F0aW9uIG9mIGEgcGFzc3dvcmQgZmlsZSAoLnBncGFzcykuIEEgLnBncGFzcyBmaWxl IGFsbG93cyBhIHVzZXIgdG8gbG9naW4gd2l0aG91dCBwcm92aWRpbmcgYSBwYXNzd29yZCB3aGVu IHRoZXkgY29ubmVjdC4gIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgYFNlY3Rpb24gMzMuMTUg b2YgdGhlIFBvc3RncmVzIGRvY3VtZW50YXRpb24gPGh0dHA6Ly93d3cucG9zdGdyZXNxbC5vcmcv ZG9jcy9jdXJyZW50L3N0YXRpYy9saWJwcS1wZ3Bhc3MuaHRtbD5gXy4KKyogVXNlIHRoZSAqU2Vy dmljZSBJRCogZmllbGQgdG8gc3BlY2lmeSB0aGUgc2VydmljZSBuYW1lLiBGb3IgbW9yZSBpbmZv cm1hdGlvbiwgc2VlIGBTZWN0aW9uIDMzLjE2IG9mIHRoZSBQb3N0Z3JlcyBkb2N1bWVudGF0aW9u IDxodHRwczovL3d3dy5wb3N0Z3Jlc3FsLm9yZy9kb2NzLzEwL3N0YXRpYy9saWJwcS1wZ3NlcnZp Y2UuaHRtbD5gXy4KIAogKk5PVEU6KiBUaGUgcGFzc3dvcmQgZmlsZSBvcHRpb24gaXMgb25seSBz dXBwb3J0ZWQgd2hlbiBwZ0FkbWluIGlzIHVzaW5nIGxpYnBxIHYxMC4wIG9yIGxhdGVyIHRvIGNv bm5lY3QgdG8gdGhlIHNlcnZlci4KIApkaWZmIC0tZ2l0IGEvd2ViL21pZ3JhdGlvbnMvdmVyc2lv bnMvNTBhYWQ2OGY5OWMyXy5weSBiL3dlYi9taWdyYXRpb25zL3ZlcnNpb25zLzUwYWFkNjhmOTlj Ml8ucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjhjOTdmMgotLS0gL2Rl di9udWxsCisrKyBiL3dlYi9taWdyYXRpb25zL3ZlcnNpb25zLzUwYWFkNjhmOTljMl8ucHkKQEAg LTAsMCArMSw4MiBAQAorCisiIiJBZGRlZCBzZXJ2aWNlIGZpZWxkIG9wdGlvbiBpbiBzZXJ2ZXIg dGFibGUgKFJNIzMxNDApCisKK1JldmlzaW9uIElEOiA1MGFhZDY4Zjk5YzIKK1JldmlzZXM6IDAy YjlkY2NkY2ZjYgorQ3JlYXRlIERhdGU6IDIwMTgtMDMtMDcgMTE6NTM6NTcuNTg0MjgwCisKKyIi IgorZnJvbSBwZ2FkbWluLm1vZGVsIGltcG9ydCBkYgorCisKKyMgcmV2aXNpb24gaWRlbnRpZmll cnMsIHVzZWQgYnkgQWxlbWJpYy4KK3JldmlzaW9uID0gJzUwYWFkNjhmOTljMicKK2Rvd25fcmV2 aXNpb24gPSAnMDJiOWRjY2RjZmNiJworYnJhbmNoX2xhYmVscyA9IE5vbmUKK2RlcGVuZHNfb24g PSBOb25lCisKKworZGVmIHVwZ3JhZGUoKToKKyAgICAgICAgIyBUbyBTYXZlIHByZXZpb3VzIGRh dGEKKyAgICAgICAgZGIuZW5naW5lLmV4ZWN1dGUoIkFMVEVSIFRBQkxFIHNlcnZlciBSRU5BTUUg VE8gc2VydmVyX29sZCIpCisKKyAgICAgICAgIyBXaXRoIHNlcnZpY2UgZmlsZSBzb21lIGZpZWxk cyB3b24ndCBiZSBtYW5kYXRvcnkgYXMgdXNlciBjYW4gcHJvdmlkZQorICAgICAgICAjIHRoZW0g dXNpbmcgc2VydmljZSBmaWxlLiBSZW1vdmVkIE5PVCBOVUxMIGNvbnN0cmFpbnQgZnJvbSBmZXcg Y29sdW1ucworICAgICAgICBkYi5lbmdpbmUuZXhlY3V0ZSgiIiIKKyAgICAgICAgICAgIENSRUFU RSBUQUJMRSBzZXJ2ZXIgKAorICAgICAgICAgICAgICAgIGlkCUlOVEVHRVIgTk9UIE5VTEwsCisg ICAgICAgICAgICAgICAgdXNlcl9pZAlJTlRFR0VSIE5PVCBOVUxMLAorICAgICAgICAgICAgICAg IHNlcnZlcmdyb3VwX2lkCUlOVEVHRVIgTk9UIE5VTEwsCisgICAgICAgICAgICAgICAgbmFtZQlW QVJDSEFSKDEyOCkgTk9UIE5VTEwsCisgICAgICAgICAgICAgICAgaG9zdAlWQVJDSEFSKDEyOCks CisgICAgICAgICAgICAgICAgcG9ydAlJTlRFR0VSIE5PVCBOVUxMIENIRUNLKHBvcnQgPj0gMTAy NCBBTkQgcG9ydCA8PSA2NTUzNCksCisgICAgICAgICAgICAgICAgbWFpbnRlbmFuY2VfZGIJVkFS Q0hBUig2NCksCisgICAgICAgICAgICAgICAgdXNlcm5hbWUJVkFSQ0hBUig2NCkgTk9UIE5VTEws CisgICAgICAgICAgICAgICAgcGFzc3dvcmQJVkFSQ0hBUig2NCksCisgICAgICAgICAgICAgICAg cm9sZQlWQVJDSEFSKDY0KSwKKyAgICAgICAgICAgICAgICBzc2xfbW9kZQlWQVJDSEFSKDE2KSBO T1QgTlVMTCBDSEVDSyhzc2xfbW9kZSBJTgorICAgICAgICAgICAgICAgICAgICAoICdhbGxvdycg LCAncHJlZmVyJyAsICdyZXF1aXJlJyAsICdkaXNhYmxlJyAsCisgICAgICAgICAgICAgICAgICAg ICAgJ3ZlcmlmeS1jYScgLCAndmVyaWZ5LWZ1bGwnICkKKyAgICAgICAgICAgICAgICApLAorICAg ICAgICAgICAgICAgIGNvbW1lbnQJVkFSQ0hBUigxMDI0KSwKKyAgICAgICAgICAgICAgICBkaXNj b3ZlcnlfaWQJVkFSQ0hBUigxMjgpLAorICAgICAgICAgICAgICAgIGhvc3RhZGRyCVRFWFQoMTAy NCksCisgICAgICAgICAgICAgICAgZGJfcmVzCVRFWFQsCisgICAgICAgICAgICAgICAgcGFzc2Zp bGUJVEVYVCwKKyAgICAgICAgICAgICAgICBzc2xjZXJ0CVRFWFQsCisgICAgICAgICAgICAgICAg c3Nsa2V5CVRFWFQsCisgICAgICAgICAgICAgICAgc3Nscm9vdGNlcnQJVEVYVCwKKyAgICAgICAg ICAgICAgICBzc2xjcmwJVEVYVCwKKyAgICAgICAgICAgICAgICBzc2xjb21wcmVzc2lvbglJTlRF R0VSIERFRkFVTFQgMCwKKyAgICAgICAgICAgICAgICBiZ2NvbG9yIFRFWFQoMTApLAorICAgICAg ICAgICAgICAgIGZnY29sb3IgVEVYVCgxMCksCisgICAgICAgICAgICAgICAgUFJJTUFSWSBLRVko aWQpLAorICAgICAgICAgICAgICAgIEZPUkVJR04gS0VZKHVzZXJfaWQpIFJFRkVSRU5DRVMgdXNl cihpZCksCisgICAgICAgICAgICAgICAgRk9SRUlHTiBLRVkoc2VydmVyZ3JvdXBfaWQpIFJFRkVS RU5DRVMgc2VydmVyZ3JvdXAoaWQpCisgICAgICAgICAgICApCisgICAgICAgICIiIikKKworICAg ICAgICAjIENvcHkgb2xkIGRhdGEgYWdhaW4gaW50byB0YWJsZQorICAgICAgICBkYi5lbmdpbmUu ZXhlY3V0ZSgiIiIKKyAgICAgICAgSU5TRVJUIElOVE8gc2VydmVyICgKKyAgICAgICAgICAgIGlk LHVzZXJfaWQsIHNlcnZlcmdyb3VwX2lkLCBuYW1lLCBob3N0LCBwb3J0LCBtYWludGVuYW5jZV9k YiwKKyAgICAgICAgICAgIHVzZXJuYW1lLCBzc2xfbW9kZSwgY29tbWVudCwgcGFzc3dvcmQsIHJv bGUsIGRpc2NvdmVyeV9pZCwKKyAgICAgICAgICAgIGhvc3RhZGRyLCBkYl9yZXMsIHBhc3NmaWxl LCBzc2xjZXJ0LCBzc2xrZXksIHNzbHJvb3RjZXJ0LCBzc2xjcmwsCisgICAgICAgICAgICBiZ2Nv bG9yLCBmZ2NvbG9yCisgICAgICAgICkgU0VMRUNUCisgICAgICAgICAgICBpZCx1c2VyX2lkLCBz ZXJ2ZXJncm91cF9pZCwgbmFtZSwgaG9zdCwgcG9ydCwgbWFpbnRlbmFuY2VfZGIsCisgICAgICAg ICAgICB1c2VybmFtZSwgc3NsX21vZGUsIGNvbW1lbnQsIHBhc3N3b3JkLCByb2xlLCBkaXNjb3Zl cnlfaWQsCisgICAgICAgICAgICBob3N0YWRkciwgZGJfcmVzLCBwYXNzZmlsZSwgc3NsY2VydCwg c3Nsa2V5LCBzc2xyb290Y2VydCwgc3NsY3JsLAorICAgICAgICAgICAgYmdjb2xvciwgZmdjb2xv cgorICAgICAgICBGUk9NIHNlcnZlcl9vbGQiIiIpCisKKyAgICAgICAgIyBSZW1vdmUgb2xkIGRh dGEKKyAgICAgICAgZGIuZW5naW5lLmV4ZWN1dGUoIkRST1AgVEFCTEUgc2VydmVyX29sZCIpCisK KyAgICAgICAgIyBBZGQgY29sdW1uIGZvciBTZXJ2aWNlIElECisgICAgICAgIGRiLmVuZ2luZS5l eGVjdXRlKAorICAgICAgICAgICAgJ0FMVEVSIFRBQkxFIHNlcnZlciBBREQgQ09MVU1OIHNlcnZp Y2UgVEVYVCcKKyAgICAgICAgKQorCitkZWYgZG93bmdyYWRlKCk6CisgICAgcGFzcwpkaWZmIC0t Z2l0IGEvd2ViL3BnYWRtaW4vYnJvd3Nlci9zZXJ2ZXJfZ3JvdXBzL3NlcnZlcnMvX19pbml0X18u cHkgYi93ZWIvcGdhZG1pbi9icm93c2VyL3NlcnZlcl9ncm91cHMvc2VydmVycy9fX2luaXRfXy5w eQppbmRleCBkZmE5ZDYyLi5mZWNiNjZkIDEwMDY0NAotLS0gYS93ZWIvcGdhZG1pbi9icm93c2Vy L3NlcnZlcl9ncm91cHMvc2VydmVycy9fX2luaXRfXy5weQorKysgYi93ZWIvcGdhZG1pbi9icm93 c2VyL3NlcnZlcl9ncm91cHMvc2VydmVycy9fX2luaXRfXy5weQpAQCAtNDc4LDcgKzQ3OCw4IEBA IGNsYXNzIFNlcnZlck5vZGUoUEdDaGlsZE5vZGVWaWV3KToKICAgICAgICAgICAgICdzc2xjcmwn OiAnc3NsY3JsJywKICAgICAgICAgICAgICdzc2xjb21wcmVzc2lvbic6ICdzc2xjb21wcmVzc2lv bicsCiAgICAgICAgICAgICAnYmdjb2xvcic6ICdiZ2NvbG9yJywKLSAgICAgICAgICAgICdmZ2Nv bG9yJzogJ2ZnY29sb3InCisgICAgICAgICAgICAnZmdjb2xvcic6ICdmZ2NvbG9yJywKKyAgICAg ICAgICAgICdzZXJ2aWNlJzogJ3NlcnZpY2UnCiAgICAgICAgIH0KIAogICAgICAgICBkaXNwX2xi bCA9IHsKQEAgLTUxNSw3ICs1MTYsNyBAQCBjbGFzcyBTZXJ2ZXJOb2RlKFBHQ2hpbGROb2RlVmll dyk6CiAgICAgICAgIGlmIGNvbm5lY3RlZDoKICAgICAgICAgICAgIGZvciBhcmcgaW4gKAogICAg ICAgICAgICAgICAgICAgICAnaG9zdCcsICdob3N0YWRkcicsICdwb3J0JywgJ2RiJywgJ3VzZXJu YW1lJywgJ3NzbG1vZGUnLAotICAgICAgICAgICAgICAgICAgICAncm9sZScKKyAgICAgICAgICAg ICAgICAgICAgJ3JvbGUnLCAnc2VydmljZScKICAgICAgICAgICAgICk6CiAgICAgICAgICAgICAg ICAgaWYgYXJnIGluIGRhdGE6CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmb3JiaWRkZW4o CkBAIC02NjMsNyArNjY0LDggQEAgY2xhc3MgU2VydmVyTm9kZShQR0NoaWxkTm9kZVZpZXcpOgog ICAgICAgICAgICAgICAgICdzc2xyb290Y2VydCc6IHNlcnZlci5zc2xyb290Y2VydCBpZiBpc19z c2wgZWxzZSBOb25lLAogICAgICAgICAgICAgICAgICdzc2xjcmwnOiBzZXJ2ZXIuc3NsY3JsIGlm IGlzX3NzbCBlbHNlIE5vbmUsCiAgICAgICAgICAgICAgICAgJ3NzbGNvbXByZXNzaW9uJzogVHJ1 ZSBpZiBpc19zc2wgYW5kIHNlcnZlci5zc2xjb21wcmVzc2lvbgotICAgICAgICAgICAgICAgIGVs c2UgRmFsc2UKKyAgICAgICAgICAgICAgICBlbHNlIEZhbHNlLAorICAgICAgICAgICAgICAgICdz ZXJ2aWNlJzogc2VydmVyLnNlcnZpY2UgaWYgc2VydmVyLnNlcnZpY2UgZWxzZSBOb25lCiAgICAg ICAgICAgICB9CiAgICAgICAgICkKIApAQCAtNjcyLDE4ICs2NzQsMjIgQEAgY2xhc3MgU2VydmVy Tm9kZShQR0NoaWxkTm9kZVZpZXcpOgogICAgICAgICAiIiJBZGQgYSBzZXJ2ZXIgbm9kZSB0byB0 aGUgc2V0dGluZ3MgZGF0YWJhc2UiIiIKICAgICAgICAgcmVxdWlyZWRfYXJncyA9IFsKICAgICAg ICAgICAgIHUnbmFtZScsCi0gICAgICAgICAgICB1J2hvc3QnLAogICAgICAgICAgICAgdSdwb3J0 JywKLSAgICAgICAgICAgIHUnZGInLAotICAgICAgICAgICAgdSd1c2VybmFtZScsCiAgICAgICAg ICAgICB1J3NzbG1vZGUnLAotICAgICAgICAgICAgdSdyb2xlJworICAgICAgICAgICAgdSd1c2Vy bmFtZScKICAgICAgICAgXQogCiAgICAgICAgIGRhdGEgPSByZXF1ZXN0LmZvcm0gaWYgcmVxdWVz dC5mb3JtIGVsc2UganNvbi5sb2FkcygKICAgICAgICAgICAgIHJlcXVlc3QuZGF0YSwgZW5jb2Rp bmc9J3V0Zi04JwogICAgICAgICApCiAKKyAgICAgICAgIyBTb21lIGZpZWxkcyBjYW4gYmUgcHJv dmlkZWQgd2l0aCBzZXJ2aWNlIGZpbGUgc28gdGhleSBhcmUgb3B0aW9uYWwKKyAgICAgICAgaWYg J3NlcnZpY2UnIGluIGRhdGEgYW5kIG5vdCBkYXRhWydzZXJ2aWNlJ106CisgICAgICAgICAgICBy ZXF1aXJlZF9hcmdzLmV4dGVuZChbCisgICAgICAgICAgICAgICAgdSdob3N0JywKKyAgICAgICAg ICAgICAgICB1J2RiJywKKyAgICAgICAgICAgICAgICB1J3JvbGUnCisgICAgICAgICAgICBdKQog ICAgICAgICBmb3IgYXJnIGluIHJlcXVpcmVkX2FyZ3M6CiAgICAgICAgICAgICBpZiBhcmcgbm90 IGluIGRhdGE6CiAgICAgICAgICAgICAgICAgcmV0dXJuIG1ha2VfanNvbl9yZXNwb25zZSgKQEAg LTcxMSwyOSArNzE3LDI2IEBAIGNsYXNzIFNlcnZlck5vZGUoUEdDaGlsZE5vZGVWaWV3KToKICAg ICAgICAgdHJ5OgogICAgICAgICAgICAgc2VydmVyID0gU2VydmVyKAogICAgICAgICAgICAgICAg IHVzZXJfaWQ9Y3VycmVudF91c2VyLmlkLAotICAgICAgICAgICAgICAgIHNlcnZlcmdyb3VwX2lk PWRhdGFbdSdnaWQnXSBpZiB1J2dpZCcgaW4gZGF0YSBlbHNlIGdpZCwKLSAgICAgICAgICAgICAg ICBuYW1lPWRhdGFbdSduYW1lJ10sCi0gICAgICAgICAgICAgICAgaG9zdD1kYXRhW3UnaG9zdCdd LAotICAgICAgICAgICAgICAgIGhvc3RhZGRyPWRhdGFbdSdob3N0YWRkciddIGlmIHUnaG9zdGFk ZHInIGluIGRhdGEgZWxzZSBOb25lLAotICAgICAgICAgICAgICAgIHBvcnQ9ZGF0YVt1J3BvcnQn XSwKLSAgICAgICAgICAgICAgICBtYWludGVuYW5jZV9kYj1kYXRhW3UnZGInXSwKLSAgICAgICAg ICAgICAgICB1c2VybmFtZT1kYXRhW3UndXNlcm5hbWUnXSwKLSAgICAgICAgICAgICAgICBzc2xf bW9kZT1kYXRhW3Unc3NsbW9kZSddLAotICAgICAgICAgICAgICAgIGNvbW1lbnQ9ZGF0YVt1J2Nv bW1lbnQnXSBpZiB1J2NvbW1lbnQnIGluIGRhdGEgZWxzZSBOb25lLAotICAgICAgICAgICAgICAg IHJvbGU9ZGF0YVt1J3JvbGUnXSBpZiB1J3JvbGUnIGluIGRhdGEgZWxzZSBOb25lLAorICAgICAg ICAgICAgICAgIHNlcnZlcmdyb3VwX2lkPWRhdGEuZ2V0KCdnaWQnLCBnaWQpLAorICAgICAgICAg ICAgICAgIG5hbWU9ZGF0YS5nZXQoJ25hbWUnKSwKKyAgICAgICAgICAgICAgICBob3N0PWRhdGEu Z2V0KCdob3N0JywgTm9uZSksCisgICAgICAgICAgICAgICAgaG9zdGFkZHI9ZGF0YS5nZXQoJ2hv c3RhZGRyJywgTm9uZSksCisgICAgICAgICAgICAgICAgcG9ydD1kYXRhLmdldCgncG9ydCcpLAor ICAgICAgICAgICAgICAgIG1haW50ZW5hbmNlX2RiPWRhdGEuZ2V0KCdkYicsIE5vbmUpLAorICAg ICAgICAgICAgICAgIHVzZXJuYW1lPWRhdGEuZ2V0KCd1c2VybmFtZScpLAorICAgICAgICAgICAg ICAgIHNzbF9tb2RlPWRhdGEuZ2V0KCdzc2xtb2RlJyksCisgICAgICAgICAgICAgICAgY29tbWVu dD1kYXRhLmdldCgnY29tbWVudCcsIE5vbmUpLAorICAgICAgICAgICAgICAgIHJvbGU9ZGF0YS5n ZXQoJ3JvbGUnLCBOb25lKSwKICAgICAgICAgICAgICAgICBkYl9yZXM9JywnLmpvaW4oZGF0YVt1 J2RiX3JlcyddKQotICAgICAgICAgICAgICAgIGlmIHUnZGJfcmVzJyBpbiBkYXRhCi0gICAgICAg ICAgICAgICAgZWxzZSBOb25lLAotICAgICAgICAgICAgICAgIHNzbGNlcnQ9ZGF0YVsnc3NsY2Vy dCddIGlmIGlzX3NzbCBlbHNlIE5vbmUsCi0gICAgICAgICAgICAgICAgc3Nsa2V5PWRhdGFbJ3Nz bGtleSddIGlmIGlzX3NzbCBlbHNlIE5vbmUsCi0gICAgICAgICAgICAgICAgc3Nscm9vdGNlcnQ9 ZGF0YVsnc3Nscm9vdGNlcnQnXSBpZiBpc19zc2wgZWxzZSBOb25lLAotICAgICAgICAgICAgICAg IHNzbGNybD1kYXRhWydzc2xjcmwnXSBpZiBpc19zc2wgZWxzZSBOb25lLAorICAgICAgICAgICAg ICAgIGlmIHUnZGJfcmVzJyBpbiBkYXRhIGVsc2UgTm9uZSwKKyAgICAgICAgICAgICAgICBzc2xj ZXJ0PWRhdGEuZ2V0KCdzc2xjZXJ0JywgTm9uZSksCisgICAgICAgICAgICAgICAgc3Nsa2V5PWRh dGEuZ2V0KCdzc2xrZXknLCBOb25lKSwKKyAgICAgICAgICAgICAgICBzc2xyb290Y2VydD1kYXRh LmdldCgnc3Nscm9vdGNlcnQnLCBOb25lKSwKKyAgICAgICAgICAgICAgICBzc2xjcmw9ZGF0YS5n ZXQoJ3NzbGNybCcsIE5vbmUpLAogICAgICAgICAgICAgICAgIHNzbGNvbXByZXNzaW9uPTEgaWYg aXNfc3NsIGFuZCBkYXRhWydzc2xjb21wcmVzc2lvbiddIGVsc2UgMCwKLSAgICAgICAgICAgICAg ICBiZ2NvbG9yPWRhdGFbJ2JnY29sb3InXSBpZiB1J2JnY29sb3InIGluIGRhdGEKLSAgICAgICAg ICAgICAgICBlbHNlIE5vbmUsCi0gICAgICAgICAgICAgICAgZmdjb2xvcj1kYXRhWydmZ2NvbG9y J10gaWYgdSdmZ2NvbG9yJyBpbiBkYXRhCi0gICAgICAgICAgICAgICAgZWxzZSBOb25lCi0KKyAg ICAgICAgICAgICAgICBiZ2NvbG9yPWRhdGEuZ2V0KCdiZ2NvbG9yJywgTm9uZSksCisgICAgICAg ICAgICAgICAgZmdjb2xvcj1kYXRhLmdldCgnZmdjb2xvcicsIE5vbmUpLAorICAgICAgICAgICAg ICAgIHNlcnZpY2U9ZGF0YS5nZXQoJ3NlcnZpY2UnLCBOb25lKQogICAgICAgICAgICAgKQogICAg ICAgICAgICAgZGIuc2Vzc2lvbi5hZGQoc2VydmVyKQogICAgICAgICAgICAgZGIuc2Vzc2lvbi5j b21taXQoKQpAQCAtOTMwLDcgKzkzMyw3IEBAIGNsYXNzIFNlcnZlck5vZGUoUEdDaGlsZE5vZGVW aWV3KToKICAgICAgICAgaWYgJ3Bhc3N3b3JkJyBub3QgaW4gZGF0YToKICAgICAgICAgICAgIGNv bm5fcGFzc3dkID0gZ2V0YXR0cihjb25uLCAncGFzc3dvcmQnLCBOb25lKQogICAgICAgICAgICAg aWYgY29ubl9wYXNzd2QgaXMgTm9uZSBhbmQgc2VydmVyLnBhc3N3b3JkIGlzIE5vbmUgYW5kIFwK LSAgICAgICAgICAgICAgICAgICAgc2VydmVyLnBhc3NmaWxlIGlzIE5vbmU6CisgICAgICAgICAg ICAgICAgICAgIHNlcnZlci5wYXNzZmlsZSBpcyBOb25lIGFuZCBzZXJ2ZXIuc2VydmljZSBpcyBO b25lOgogICAgICAgICAgICAgICAgICMgUmV0dXJuIHRoZSBwYXNzd29yZCB0ZW1wbGF0ZSBpbiBj YXNlIHBhc3N3b3JkIGlzIG5vdAogICAgICAgICAgICAgICAgICMgcHJvdmlkZWQsIG9yIHBhc3N3 b3JkIGhhcyBub3QgYmVlbiBzYXZlZCBlYXJsaWVyLgogICAgICAgICAgICAgICAgIHJldHVybiBt YWtlX2pzb25fcmVzcG9uc2UoCmRpZmYgLS1naXQgYS93ZWIvcGdhZG1pbi9icm93c2VyL3NlcnZl cl9ncm91cHMvc2VydmVycy9zdGF0aWMvanMvc2VydmVyLmpzIGIvd2ViL3BnYWRtaW4vYnJvd3Nl ci9zZXJ2ZXJfZ3JvdXBzL3NlcnZlcnMvc3RhdGljL2pzL3NlcnZlci5qcwppbmRleCA5OTMyODA4 Li5iZWRiMzhkIDEwMDY0NAotLS0gYS93ZWIvcGdhZG1pbi9icm93c2VyL3NlcnZlcl9ncm91cHMv c2VydmVycy9zdGF0aWMvanMvc2VydmVyLmpzCisrKyBiL3dlYi9wZ2FkbWluL2Jyb3dzZXIvc2Vy dmVyX2dyb3Vwcy9zZXJ2ZXJzL3N0YXRpYy9qcy9zZXJ2ZXIuanMKQEAgLTY2NSw2ICs2NjUsNyBA QCBkZWZpbmUoJ3BnYWRtaW4ubm9kZS5zZXJ2ZXInLCBbCiAgICAgICAgICAgc3Nsa2V5OiB1bmRl ZmluZWQsCiAgICAgICAgICAgc3Nscm9vdGNlcnQ6IHVuZGVmaW5lZCwKICAgICAgICAgICBzc2xj cmw6IHVuZGVmaW5lZCwKKyAgICAgICAgICBzZXJ2aWNlOiB1bmRlZmluZWQsCiAgICAgICAgIH0s CiAgICAgICAgIC8vIERlZmF1bHQgdmFsdWVzIQogICAgICAgICBpbml0aWFsaXplOiBmdW5jdGlv bihhdHRycywgYXJncykgewpAQCAtODQxLDEyICs4NDIsMTggQEAgZGVmaW5lKCdwZ2FkbWluLm5v ZGUuc2VydmVyJywgWwogICAgICAgICAgICAgdmFyIHBhc3NmaWxlID0gbS5nZXQoJ3Bhc3NmaWxl Jyk7CiAgICAgICAgICAgICByZXR1cm4gIV8uaXNVbmRlZmluZWQocGFzc2ZpbGUpICYmICFfLmlz TnVsbChwYXNzZmlsZSk7CiAgICAgICAgICAgfSwKKyAgICAgICAgfSx7CisgICAgICAgICAgaWQ6 ICdzZXJ2aWNlJywgbGFiZWw6IGdldHRleHQoJ1NlcnZpY2UgSUQnKSwgdHlwZTogJ3RleHQnLAor ICAgICAgICAgIG1vZGU6IFsncHJvcGVydGllcycsICdlZGl0JywgJ2NyZWF0ZSddLCBkaXNhYmxl ZDogJ2lzQ29ubmVjdGVkJywKKyAgICAgICAgICBncm91cDogZ2V0dGV4dCgnQWR2YW5jZWQnKSwK ICAgICAgICAgfV0sCiAgICAgICAgIHZhbGlkYXRlOiBmdW5jdGlvbigpIHsKICAgICAgICAgICB2 YXIgZXJyID0ge30sCiAgICAgICAgICAgICBlcnJtc2csCiAgICAgICAgICAgICBzZWxmID0gdGhp czsKIAorICAgICAgICAgIHZhciBzZXJ2aWNlX2lkID0gdGhpcy5nZXQoJ3NlcnZpY2UnKTsKKwog ICAgICAgICAgIHZhciBjaGVja19mb3JfZW1wdHkgPSBmdW5jdGlvbihpZCwgbXNnKSB7CiAgICAg ICAgICAgICB2YXIgdiA9IHNlbGYuZ2V0KGlkKTsKICAgICAgICAgICAgIGlmICgKQEAgLTkwMywy NiArOTEwLDQxIEBAIGRlZmluZSgncGdhZG1pbi5ub2RlLnNlcnZlcicsIFsKICAgICAgICAgICB9 CiAgICAgICAgICAgY2hlY2tfZm9yX2VtcHR5KCduYW1lJywgZ2V0dGV4dCgnTmFtZSBtdXN0IGJl IHNwZWNpZmllZC4nKSk7CiAKLSAgICAgICAgICBpZiAoY2hlY2tfZm9yX2VtcHR5KAotICAgICAg ICAgICAgJ2hvc3QnLCBnZXR0ZXh0KCdFaXRoZXIgSG9zdCBuYW1lIG9yIEhvc3QgYWRkcmVzcyBt dXN0IGJlIHNwZWNpZmllZC4nKQotICAgICAgICAgICkgJiYgY2hlY2tfZm9yX2VtcHR5KCdob3N0 YWRkcicsIGdldHRleHQoJ0VpdGhlciBIb3N0IG5hbWUgb3IgSG9zdCBhZGRyZXNzIG11c3QgYmUg c3BlY2lmaWVkLicpKSl7Ci0gICAgICAgICAgICBlcnJtc2cgPSBlcnJtc2cgfHwgZ2V0dGV4dCgn RWl0aGVyIEhvc3QgbmFtZSBvciBIb3N0IGFkZHJlc3MgbXVzdCBiZSBzcGVjaWZpZWQnKTsKKyAg ICAgICAgICAvLyBJZiBubyBzZXJ2aWNlIGlkIHRoZW4gb25seSBjaGVjaworICAgICAgICAgIGlm ICgKKyAgICAgICAgICAgICAgXy5pc1VuZGVmaW5lZChzZXJ2aWNlX2lkKSB8fCBfLmlzTnVsbChz ZXJ2aWNlX2lkKSB8fAorICAgICAgICAgICAgICBTdHJpbmcoc2VydmljZV9pZCkucmVwbGFjZSgv XlxzK3xccyskL2csICcnKSA9PSAnJworICAgICAgICAgICAgKSB7CisgICAgICAgICAgICBpZiAo Y2hlY2tfZm9yX2VtcHR5KAorICAgICAgICAgICAgICAnaG9zdCcsIGdldHRleHQoJ0VpdGhlciBI b3N0IG5hbWUgb3IgSG9zdCBhZGRyZXNzIG11c3QgYmUgc3BlY2lmaWVkLicpCisgICAgICAgICAg ICApICYmIGNoZWNrX2Zvcl9lbXB0eSgnaG9zdGFkZHInLCBnZXR0ZXh0KCdFaXRoZXIgSG9zdCBu YW1lIG9yIEhvc3QgYWRkcmVzcyBtdXN0IGJlIHNwZWNpZmllZC4nKSkpeworICAgICAgICAgICAg ICBlcnJtc2cgPSBlcnJtc2cgfHwgZ2V0dGV4dCgnRWl0aGVyIEhvc3QgbmFtZSBvciBIb3N0IGFk ZHJlc3MgbXVzdCBiZSBzcGVjaWZpZWQnKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAg ICAgICAgIGVycm1zZyA9IHVuZGVmaW5lZDsKKyAgICAgICAgICAgICAgZGVsZXRlIGVyclsnaG9z dCddOworICAgICAgICAgICAgICBkZWxldGUgZXJyWydob3N0YWRkciddOworICAgICAgICAgICAg fQorCisgICAgICAgICAgICBjaGVja19mb3JfZW1wdHkoCisgICAgICAgICAgICAgICdkYicsIGdl dHRleHQoJ01haW50ZW5hbmNlIGRhdGFiYXNlIG11c3QgYmUgc3BlY2lmaWVkLicpCisgICAgICAg ICAgICApOworICAgICAgICAgICAgY2hlY2tfZm9yX3ZhbGlkX2lwKAorICAgICAgICAgICAgICAn aG9zdGFkZHInLCBnZXR0ZXh0KCdIb3N0IGFkZHJlc3MgbXVzdCBiZSB2YWxpZCBJUHY0IG9yIElQ djYgYWRkcmVzcy4nKQorICAgICAgICAgICAgKTsKKyAgICAgICAgICAgIGNoZWNrX2Zvcl92YWxp ZF9pcCgKKyAgICAgICAgICAgICAgJ2hvc3RhZGRyJywgZ2V0dGV4dCgnSG9zdCBhZGRyZXNzIG11 c3QgYmUgdmFsaWQgSVB2NCBvciBJUHY2IGFkZHJlc3MuJykKKyAgICAgICAgICAgICk7CiAgICAg ICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGVycm1zZyA9IHVuZGVmaW5lZDsKLSAgICAgICAg ICAgIGRlbGV0ZSBlcnJbJ2hvc3QnXTsKLSAgICAgICAgICAgIGRlbGV0ZSBlcnJbJ2hvc3RhZGRy J107CisgICAgICAgICAgICBfLmVhY2goWydob3N0JywgJ2hvc3RhZGRyJywgJ2RiJ10sIChpdGVt KSA9PiB7CisgICAgICAgICAgICAgIHNlbGYuZXJyb3JNb2RlbC51bnNldChpdGVtKTsKKyAgICAg ICAgICAgIH0pOwogICAgICAgICAgIH0KIAogICAgICAgICAgIGNoZWNrX2Zvcl9lbXB0eSgKLSAg ICAgICAgICAgICdkYicsIGdldHRleHQoJ01haW50ZW5hbmNlIGRhdGFiYXNlIG11c3QgYmUgc3Bl Y2lmaWVkLicpCi0gICAgICAgICAgKTsKLSAgICAgICAgICBjaGVja19mb3JfZW1wdHkoCiAgICAg ICAgICAgICAndXNlcm5hbWUnLCBnZXR0ZXh0KCdVc2VybmFtZSBtdXN0IGJlIHNwZWNpZmllZC4n KQogICAgICAgICAgICk7CiAgICAgICAgICAgY2hlY2tfZm9yX2VtcHR5KCdwb3J0JywgZ2V0dGV4 dCgnUG9ydCBtdXN0IGJlIHNwZWNpZmllZC4nKSk7Ci0gICAgICAgICAgY2hlY2tfZm9yX3ZhbGlk X2lwKAotICAgICAgICAgICAgJ2hvc3RhZGRyJywgZ2V0dGV4dCgnSG9zdCBhZGRyZXNzIG11c3Qg YmUgdmFsaWQgSVB2NCBvciBJUHY2IGFkZHJlc3MuJykKLSAgICAgICAgICApOworCiAgICAgICAg ICAgdGhpcy5lcnJvck1vZGVsLnNldChlcnIpOwogCiAgICAgICAgICAgaWYgKF8uc2l6ZShlcnIp KSB7CmRpZmYgLS1naXQgYS93ZWIvcGdhZG1pbi9icm93c2VyL3NlcnZlcl9ncm91cHMvc2VydmVy cy90ZXN0cy90ZXN0X2FkZF9zZXJ2ZXJfd2l0aF9zZXJ2aWNlX2lkLnB5IGIvd2ViL3BnYWRtaW4v YnJvd3Nlci9zZXJ2ZXJfZ3JvdXBzL3NlcnZlcnMvdGVzdHMvdGVzdF9hZGRfc2VydmVyX3dpdGhf c2VydmljZV9pZC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYjAzZDQ5 Ci0tLSAvZGV2L251bGwKKysrIGIvd2ViL3BnYWRtaW4vYnJvd3Nlci9zZXJ2ZXJfZ3JvdXBzL3Nl cnZlcnMvdGVzdHMvdGVzdF9hZGRfc2VydmVyX3dpdGhfc2VydmljZV9pZC5weQpAQCAtMCwwICsx LDQ3IEBACisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIworIyBwZ0FkbWluIDQgLSBQb3N0Z3JlU1FMIFRv b2xzCisjCisjIENvcHlyaWdodCAoQykgMjAxMyAtIDIwMTgsIFRoZSBwZ0FkbWluIERldmVsb3Bt ZW50IFRlYW0KKyMgVGhpcyBzb2Z0d2FyZSBpcyByZWxlYXNlZCB1bmRlciB0aGUgUG9zdGdyZVNR TCBMaWNlbmNlCisjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitpbXBvcnQganNvbgorCitmcm9tIHBn YWRtaW4udXRpbHMucm91dGUgaW1wb3J0IEJhc2VUZXN0R2VuZXJhdG9yCitmcm9tIHJlZ3Jlc3Np b24ucHl0aG9uX3Rlc3RfdXRpbHMgaW1wb3J0IHRlc3RfdXRpbHMgYXMgdXRpbHMKKworCitjbGFz cyBTZXJ2ZXJzV2l0aFNlcnZpY2VJREFkZFRlc3RDYXNlKEJhc2VUZXN0R2VuZXJhdG9yKToKKyAg ICAiIiIgVGhpcyBjbGFzcyB3aWxsIGFkZCB0aGUgc2VydmVycyB1bmRlciBkZWZhdWx0IHNlcnZl ciBncm91cC4gIiIiCisKKyAgICBzY2VuYXJpb3MgPSBbCisgICAgICAgICMgRmV0Y2ggdGhlIGRl ZmF1bHQgdXJsIGZvciBzZXJ2ZXIgb2JqZWN0CisgICAgICAgICgKKyAgICAgICAgICAgICdEZWZh dWx0IFNlcnZlciBOb2RlIHVybCcsIGRpY3QoCisgICAgICAgICAgICAgICAgdXJsPScvYnJvd3Nl ci9zZXJ2ZXIvb2JqLycKKyAgICAgICAgICAgICkKKyAgICAgICAgKQorICAgIF0KKworICAgIGRl ZiBzZXRVcChzZWxmKToKKyAgICAgICAgcGFzcworCisgICAgZGVmIHJ1blRlc3Qoc2VsZik6Cisg ICAgICAgICIiIiBUaGlzIGZ1bmN0aW9uIHdpbGwgYWRkIHRoZSBzZXJ2ZXIgdW5kZXIgZGVmYXVs dCBzZXJ2ZXIgZ3JvdXAuIiIiCisgICAgICAgIHVybCA9ICJ7MH17MX0vIi5mb3JtYXQoc2VsZi51 cmwsIHV0aWxzLlNFUlZFUl9HUk9VUCkKKyAgICAgICAgIyBBZGQgc2VydmljZSBuYW1lIGluIHRo ZSBjb25maWcKKyAgICAgICAgc2VsZi5zZXJ2ZXJbJ3NlcnZpY2UnXSA9ICJUZXN0REIiCisgICAg ICAgIHJlc3BvbnNlID0gc2VsZi50ZXN0ZXIucG9zdCgKKyAgICAgICAgICAgIHVybCwKKyAgICAg ICAgICAgIGRhdGE9anNvbi5kdW1wcyhzZWxmLnNlcnZlciksCisgICAgICAgICAgICBjb250ZW50 X3R5cGU9J2h0bWwvanNvbicKKyAgICAgICAgKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhy ZXNwb25zZS5zdGF0dXNfY29kZSwgMjAwKQorICAgICAgICByZXNwb25zZV9kYXRhID0ganNvbi5s b2FkcyhyZXNwb25zZS5kYXRhLmRlY29kZSgndXRmLTgnKSkKKyAgICAgICAgc2VsZi5zZXJ2ZXJf aWQgPSByZXNwb25zZV9kYXRhWydub2RlJ11bJ19pZCddCisKKyAgICBkZWYgdGVhckRvd24oc2Vs Zik6CisgICAgICAgICIiIlRoaXMgZnVuY3Rpb24gZGVsZXRlIHRoZSBzZXJ2ZXIgZnJvbSBTUUxp dGUgIiIiCisgICAgICAgIHV0aWxzLmRlbGV0ZV9zZXJ2ZXJfd2l0aF9hcGkoc2VsZi50ZXN0ZXIs IHNlbGYuc2VydmVyX2lkKQpkaWZmIC0tZ2l0IGEvd2ViL3BnYWRtaW4vbW9kZWwvX19pbml0X18u cHkgYi93ZWIvcGdhZG1pbi9tb2RlbC9fX2luaXRfXy5weQppbmRleCA2NzRmOTQ1Li4xMWJjOWYw IDEwMDY0NAotLS0gYS93ZWIvcGdhZG1pbi9tb2RlbC9fX2luaXRfXy5weQorKysgYi93ZWIvcGdh ZG1pbi9tb2RlbC9fX2luaXRfXy5weQpAQCAtMTA3LDEzICsxMDcsMTMgQEAgY2xhc3MgU2VydmVy KGRiLk1vZGVsKToKICAgICAgICAgbnVsbGFibGU9RmFsc2UKICAgICApCiAgICAgbmFtZSA9IGRi LkNvbHVtbihkYi5TdHJpbmcoMTI4KSwgbnVsbGFibGU9RmFsc2UpCi0gICAgaG9zdCA9IGRiLkNv bHVtbihkYi5TdHJpbmcoMTI4KSwgbnVsbGFibGU9RmFsc2UpCisgICAgaG9zdCA9IGRiLkNvbHVt bihkYi5TdHJpbmcoMTI4KSwgbnVsbGFibGU9VHJ1ZSkKICAgICBob3N0YWRkciA9IGRiLkNvbHVt bihkYi5TdHJpbmcoMTI4KSwgbnVsbGFibGU9VHJ1ZSkKICAgICBwb3J0ID0gZGIuQ29sdW1uKAog ICAgICAgICBkYi5JbnRlZ2VyKCksCiAgICAgICAgIGRiLkNoZWNrQ29uc3RyYWludCgncG9ydCA+ PSAxMDI0IEFORCBwb3J0IDw9IDY1NTM0JyksCiAgICAgICAgIG51bGxhYmxlPUZhbHNlKQotICAg IG1haW50ZW5hbmNlX2RiID0gZGIuQ29sdW1uKGRiLlN0cmluZyg2NCksIG51bGxhYmxlPUZhbHNl KQorICAgIG1haW50ZW5hbmNlX2RiID0gZGIuQ29sdW1uKGRiLlN0cmluZyg2NCksIG51bGxhYmxl PVRydWUpCiAgICAgdXNlcm5hbWUgPSBkYi5Db2x1bW4oZGIuU3RyaW5nKDY0KSwgbnVsbGFibGU9 RmFsc2UpCiAgICAgcGFzc3dvcmQgPSBkYi5Db2x1bW4oZGIuU3RyaW5nKDY0KSwgbnVsbGFibGU9 VHJ1ZSkKICAgICByb2xlID0gZGIuQ29sdW1uKGRiLlN0cmluZyg2NCksIG51bGxhYmxlPVRydWUp CkBAIC0xNDQsNiArMTQ0LDcgQEAgY2xhc3MgU2VydmVyKGRiLk1vZGVsKToKICAgICApCiAgICAg Ymdjb2xvciA9IGRiLkNvbHVtbihkYi5UZXh0KDEwKSwgbnVsbGFibGU9VHJ1ZSkKICAgICBmZ2Nv bG9yID0gZGIuQ29sdW1uKGRiLlRleHQoMTApLCBudWxsYWJsZT1UcnVlKQorICAgIHNlcnZpY2Ug PSBkYi5Db2x1bW4oZGIuVGV4dCgpLCBudWxsYWJsZT1UcnVlKQogCiAKIGNsYXNzIE1vZHVsZVBy ZWZlcmVuY2UoZGIuTW9kZWwpOgpkaWZmIC0tZ2l0IGEvd2ViL3BnYWRtaW4vdXRpbHMvZHJpdmVy L3BzeWNvcGcyL19faW5pdF9fLnB5IGIvd2ViL3BnYWRtaW4vdXRpbHMvZHJpdmVyL3BzeWNvcGcy L19faW5pdF9fLnB5CmluZGV4IDk0MWE2OTQuLjk1YTQ5ZmIgMTAwNjQ0Ci0tLSBhL3dlYi9wZ2Fk bWluL3V0aWxzL2RyaXZlci9wc3ljb3BnMi9fX2luaXRfXy5weQorKysgYi93ZWIvcGdhZG1pbi91 dGlscy9kcml2ZXIvcHN5Y29wZzIvX19pbml0X18ucHkKQEAgLTgsMTk4NSArOCwyMyBAQAogIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMKIAogIiIiCi1JbXBsZW1lbnRhdGlvbiBvZiBDb25uZWN0aW9uLCBTZXJ2 ZXJNYW5hZ2VyIGFuZCBEcml2ZXIgY2xhc3NlcyB1c2luZyB0aGUKLXBzeWNvcGcyLiBJdCBpcyBh IHdyYXBwZXIgYXJvdW5kIHRoZSBhY3R1YWwgcHN5Y29wZzIgZHJpdmVyLCBhbmQgY29ubmVjdGlv bgorSW1wbGVtZW50YXRpb24gb2YgRHJpdmVyIGNsYXNzCitJdCBpcyBhIHdyYXBwZXIgYXJvdW5k IHRoZSBhY3R1YWwgcHN5Y29wZzIgZHJpdmVyLCBhbmQgY29ubmVjdGlvbgogb2JqZWN0LgotIiIi CiAKKyIiIgogaW1wb3J0IGRhdGV0aW1lCi1pbXBvcnQgb3MKLWltcG9ydCByYW5kb20KLWltcG9y dCBzZWxlY3QKLWltcG9ydCBzeXMKLQotaW1wb3J0IHNpbXBsZWpzb24gYXMganNvbgotaW1wb3J0 IHBzeWNvcGcyCi1mcm9tIGZsYXNrIGltcG9ydCBnLCBjdXJyZW50X2FwcCwgc2Vzc2lvbgorZnJv bSBmbGFzayBpbXBvcnQgc2Vzc2lvbgogZnJvbSBmbGFza19iYWJlbCBpbXBvcnQgZ2V0dGV4dAot ZnJvbSBmbGFza19zZWN1cml0eSBpbXBvcnQgY3VycmVudF91c2VyCi1mcm9tIHBnYWRtaW4udXRp bHMuY3J5cHRvIGltcG9ydCBkZWNyeXB0Ci1mcm9tIHBzeWNvcGcyLmV4dGVuc2lvbnMgaW1wb3J0 IGFkYXB0LCBlbmNvZGluZ3MKK2ltcG9ydCBwc3ljb3BnMgorZnJvbSBwc3ljb3BnMi5leHRlbnNp b25zIGltcG9ydCBhZGFwdAogCiBpbXBvcnQgY29uZmlnCiBmcm9tIHBnYWRtaW4ubW9kZWwgaW1w b3J0IFNlcnZlciwgVXNlcgotZnJvbSBwZ2FkbWluLnV0aWxzLmV4Y2VwdGlvbiBpbXBvcnQgQ29u bmVjdGlvbkxvc3QKLWZyb20gcGdhZG1pbi51dGlscyBpbXBvcnQgZ2V0X2NvbXBsZXRlX2ZpbGVf cGF0aAogZnJvbSAua2V5d29yZHMgaW1wb3J0IFNjYW5LZXl3b3JkCi1mcm9tIC4uYWJzdHJhY3Qg aW1wb3J0IEJhc2VEcml2ZXIsIEJhc2VDb25uZWN0aW9uCi1mcm9tIC5jdXJzb3IgaW1wb3J0IERp Y3RDdXJzb3IKLWZyb20gLnR5cGVjYXN0IGltcG9ydCByZWdpc3Rlcl9nbG9iYWxfdHlwZWNhc3Rl cnMsIFwKLSAgICByZWdpc3Rlcl9zdHJpbmdfdHlwZWNhc3RlcnMsIHJlZ2lzdGVyX2JpbmFyeV90 eXBlY2FzdGVycywgXAotICAgIHJlZ2lzdGVyX2FycmF5X3RvX3N0cmluZ190eXBlY2FzdGVycywg QUxMX0pTT05fVFlQRVMKLWZyb20gY29sbGVjdGlvbnMgaW1wb3J0IGRlcXVlCi0KLQotaWYgc3lz LnZlcnNpb25faW5mbyA8ICgzLCk6Ci0gICAgIyBQeXRob24yIGluLWJ1aWx0IGNzdiBtb2R1bGUg ZG8gbm90IGhhbmRsZSB1bmljb2RlCi0gICAgIyBiYWNrcG9ydHMuY3N2IG1vZHVsZSBwb3J0ZWQg ZnJvbSBQWTMgY3N2IG1vZHVsZSBmb3IgdW5pY29kZSBoYW5kbGluZwotICAgIGZyb20gYmFja3Bv cnRzIGltcG9ydCBjc3YKLSAgICBmcm9tIFN0cmluZ0lPIGltcG9ydCBTdHJpbmdJTwotICAgIElT X1BZMiA9IFRydWUKLWVsc2U6Ci0gICAgZnJvbSBpbyBpbXBvcnQgU3RyaW5nSU8KLSAgICBpbXBv cnQgY3N2Ci0gICAgSVNfUFkyID0gRmFsc2UKLQotXyA9IGdldHRleHQKLQotCi0jIFJlZ2lzdGVy IGdsb2JhbCB0eXBlIGNhc3RlciB3aGljaCB3aWxsIGJlIGFwcGxpY2FibGUgdG8gYWxsIGNvbm5l Y3Rpb25zLgotcmVnaXN0ZXJfZ2xvYmFsX3R5cGVjYXN0ZXJzKCkKLQotCi1jbGFzcyBDb25uZWN0 aW9uKEJhc2VDb25uZWN0aW9uKToKLSAgICAiIiIKLSAgICBjbGFzcyBDb25uZWN0aW9uKG9iamVj dCkKLQotICAgICAgICBBIHdyYXBwZXIgY2xhc3MsIHdoaWNoIHdyYXBzIHRoZSBwc3ljb3BnMiBj b25uZWN0aW9uIG9iamVjdCwgYW5kCi0gICAgICAgIGRlbGVnYXRlIHRoZSBleGVjdXRpb24gdG8g dGhlIGFjdHVhbCBjb25uZWN0aW9uIG9iamVjdCwgd2hlbiByZXF1aXJlZC4KLQotICAgIE1ldGhv ZHM6Ci0gICAgLS0tLS0tLQotICAgICogY29ubmVjdCgqKmt3YXJncykKLSAgICAgIC0gQ29ubmVj dCB0aGUgUG9zdGdyZVNRTC9FREIgUG9zdGdyZXMgQWR2YW5jZWQgU2VydmVyIHVzaW5nIHRoZSBw c3ljb3BnMgotICAgICAgZHJpdmVyCi0KLSAgICAqIGV4ZWN1dGVfc2NhbGFyKHF1ZXJ5LCBwYXJh bXMsIGZvcm1hdHRlZF9leGNlcHRpb25fbXNnKQotICAgICAgLSBFeGVjdXRlIHRoZSBnaXZlbiBx dWVyeSBhbmQgcmV0dXJucyBzaW5nbGUgZGF0dW0gcmVzdWx0Ci0KLSAgICAqIGV4ZWN1dGVfYXN5 bmMocXVlcnksIHBhcmFtcywgZm9ybWF0dGVkX2V4Y2VwdGlvbl9tc2cpCi0gICAgICAtIEV4ZWN1 dGUgdGhlIGdpdmVuIHF1ZXJ5IGFzeW5jaHJvbm91c2x5IGFuZCByZXR1cm5zIHJlc3VsdC4KLQot ICAgICogZXhlY3V0ZV92b2lkKHF1ZXJ5LCBwYXJhbXMsIGZvcm1hdHRlZF9leGNlcHRpb25fbXNn KQotICAgICAgLSBFeGVjdXRlIHRoZSBnaXZlbiBxdWVyeSB3aXRoIG5vIHJlc3VsdC4KLQotICAg ICogZXhlY3V0ZV8yZGFycmF5KHF1ZXJ5LCBwYXJhbXMsIGZvcm1hdHRlZF9leGNlcHRpb25fbXNn KQotICAgICAgLSBFeGVjdXRlIHRoZSBnaXZlbiBxdWVyeSBhbmQgcmV0dXJucyB0aGUgcmVzdWx0 IGFzIGEgMiBkaW1lbnNpb25hbAotICAgICAgICBhcnJheS4KLQotICAgICogZXhlY3V0ZV9kaWN0 KHF1ZXJ5LCBwYXJhbXMsIGZvcm1hdHRlZF9leGNlcHRpb25fbXNnKQotICAgICAgLSBFeGVjdXRl IHRoZSBnaXZlbiBxdWVyeSBhbmQgcmV0dXJucyB0aGUgcmVzdWx0IGFzIGFuIGFycmF5IG9mIGRp Y3QKLSAgICAgICAgKGNvbHVtbiBuYW1lIC0+IHZhbHVlKSBmb3JtYXQuCi0KLSAgICAqIGNvbm5l Y3RlZCgpCi0gICAgICAtIEdldCB0aGUgc3RhdHVzIG9mIHRoZSBjb25uZWN0aW9uLgotICAgICAg ICBSZXR1cm5zIFRydWUgaWYgY29ubmVjdGVkLCBvdGhlcndpc2UgRmFsc2UuCi0KLSAgICAqIHJl c2V0KCkKLSAgICAgIC0gUmVjb25uZWN0IHRoZSBkYXRhYmFzZSBzZXJ2ZXIgKGlmIHBvc3NpYmxl KQotCi0gICAgKiB0cmFuc2FjdGlvbl9zdGF0dXMoKQotICAgICAgLSBUcmFuc2FjdGlvbiBTdGF0 dXMKLQotICAgICogcGluZygpCi0gICAgICAtIFBpbmcgdGhlIHNlcnZlci4KLQotICAgICogX3Jl bGVhc2UoKQotICAgICAgLSBSZWxlYXNlIHRoZSBjb25uZWN0aW9uIG9iamVjdCBvZiBwc3ljb3Bn MgotCi0gICAgKiBfcmVjb25uZWN0KCkKLSAgICAgIC0gQXR0ZW1wdCB0byByZWNvbm5lY3QgdG8g dGhlIGRhdGFiYXNlCi0KLSAgICAqIF93YWl0KGNvbm4pCi0gICAgICAtIFRoaXMgbWV0aG9kIGlz IHVzZWQgdG8gd2FpdCBmb3IgYXN5bmNocm9ub3VzIGNvbm5lY3Rpb24uIFRoaXMgaXMgYQotICAg ICAgICBibG9ja2luZyBjYWxsLgotCi0gICAgKiBfd2FpdF90aW1lb3V0KGNvbm4pCi0gICAgICAt IFRoaXMgbWV0aG9kIGlzIHVzZWQgdG8gd2FpdCBmb3IgYXN5bmNocm9ub3VzIGNvbm5lY3Rpb24g d2l0aCB0aW1lb3V0LgotICAgICAgICBUaGlzIGlzIGEgbm9uIGJsb2NraW5nIGNhbGwuCi0KLSAg ICAqIHBvbGwoZm9ybWF0dGVkX2V4Y2VwdGlvbl9tc2cpCi0gICAgICAtIFRoaXMgbWV0aG9kIGlz IHVzZWQgdG8gcG9sbCB0aGUgZGF0YSBvZiBxdWVyeSBydW5uaW5nIG9uIGFzeW5jaHJvbm91cwot ICAgICAgICBjb25uZWN0aW9uLgotCi0gICAgKiBzdGF0dXNfbWVzc2FnZSgpCi0gICAgICAtIFJl dHVybnMgdGhlIHN0YXR1cyBtZXNzYWdlIHJldHVybmVkIGJ5IHRoZSBsYXN0IGNvbW1hbmQgZXhl Y3V0ZWQgb24KLSAgICAgIHRoZSBzZXJ2ZXIuCi0KLSAgICAqIHJvd3NfYWZmZWN0ZWQoKQotICAg ICAgLSBSZXR1cm5zIHRoZSBubyBvZiByb3dzIGFmZmVjdGVkIGJ5IHRoZSBsYXN0IGNvbW1hbmQg ZXhlY3V0ZWQgb24KLSAgICAgIHRoZSBzZXJ2ZXIuCi0KLSAgICAqIGNhbmNlbF90cmFuc2FjdGlv bihjb25uX2lkLCBkaWQ9Tm9uZSkKLSAgICAgIC0gVGhpcyBtZXRob2QgaXMgdXNlZCB0byBjYW5j ZWwgdGhlIHRyYW5zYWN0aW9uIGZvciB0aGUKLSAgICAgICAgc3BlY2lmaWVkIGNvbm5lY3Rpb24g aWQgYW5kIGRhdGFiYXNlIGlkLgotCi0gICAgKiBtZXNzYWdlcygpCi0gICAgICAtIFJldHVybnMg dGhlIGxpc3Qgb2YgbWVzc2FnZXMvbm90aWNlcyBzZW5kcyBmcm9tIHRoZSBQb3N0Z3JlU1FMIGRh dGFiYXNlCi0gICAgICAgIHNlcnZlci4KLQotICAgICogX2Zvcm1hdHRlZF9leGNlcHRpb25fbXNn KGV4Y2VwdGlvbl9vYmosIGZvcm1hdHRlZF9tc2cpCi0gICAgICAtIFRoaXMgbWV0aG9kIGlzIHVz ZWQgdG8gcGFyc2UgdGhlIHBzeWNvcGcyLkVycm9yIG9iamVjdCBhbmQgcmV0dXJucyB0aGUKLSAg ICAgICAgZm9ybWF0dGVkIGVycm9yIG1lc3NhZ2UgaWYgZmxhZyBpcyBzZXQgdG8gdHJ1ZSBlbHNl IHJldHVybgotICAgICAgICBub3JtYWwgZXJyb3IgbWVzc2FnZS4KLQotICAgICIiIgotCi0gICAg ZGVmIF9faW5pdF9fKHNlbGYsIG1hbmFnZXIsIGNvbm5faWQsIGRiLCBhdXRvX3JlY29ubmVjdD1U cnVlLCBhc3luYz0wLAotICAgICAgICAgICAgICAgICB1c2VfYmluYXJ5X3BsYWNlaG9sZGVyPUZh bHNlLCBhcnJheV90b19zdHJpbmc9RmFsc2UpOgotICAgICAgICBhc3NlcnQgKG1hbmFnZXIgaXMg bm90IE5vbmUpCi0gICAgICAgIGFzc2VydCAoY29ubl9pZCBpcyBub3QgTm9uZSkKLQotICAgICAg ICBzZWxmLmNvbm5faWQgPSBjb25uX2lkCi0gICAgICAgIHNlbGYubWFuYWdlciA9IG1hbmFnZXIK LSAgICAgICAgc2VsZi5kYiA9IGRiIGlmIGRiIGlzIG5vdCBOb25lIGVsc2UgbWFuYWdlci5kYgot ICAgICAgICBzZWxmLmNvbm4gPSBOb25lCi0gICAgICAgIHNlbGYuYXV0b19yZWNvbm5lY3QgPSBh dXRvX3JlY29ubmVjdAotICAgICAgICBzZWxmLmFzeW5jID0gYXN5bmMKLSAgICAgICAgc2VsZi5f X2FzeW5jX2N1cnNvciA9IE5vbmUKLSAgICAgICAgc2VsZi5fX2FzeW5jX3F1ZXJ5X2lkID0gTm9u ZQotICAgICAgICBzZWxmLl9fYmFja2VuZF9waWQgPSBOb25lCi0gICAgICAgIHNlbGYuZXhlY3V0 aW9uX2Fib3J0ZWQgPSBGYWxzZQotICAgICAgICBzZWxmLnJvd19jb3VudCA9IDAKLSAgICAgICAg c2VsZi5fX25vdGljZXMgPSBOb25lCi0gICAgICAgIHNlbGYucGFzc3dvcmQgPSBOb25lCi0gICAg ICAgICMgVGhpcyBmbGFnIGluZGljYXRlcyB0aGUgY29ubmVjdGlvbiBzdGF0dXMgKGNvbm5lY3Rl ZC9kaXNjb25uZWN0ZWQpLgotICAgICAgICBzZWxmLndhc0Nvbm5lY3RlZCA9IEZhbHNlCi0gICAg ICAgICMgVGhpcyBmbGFnIGluZGljYXRlcyB0aGUgY29ubmVjdGlvbiByZWNvbm5lY3Rpbmcgc3Rh dHVzLgotICAgICAgICBzZWxmLnJlY29ubmVjdGluZyA9IEZhbHNlCi0gICAgICAgIHNlbGYudXNl X2JpbmFyeV9wbGFjZWhvbGRlciA9IHVzZV9iaW5hcnlfcGxhY2Vob2xkZXIKLSAgICAgICAgc2Vs Zi5hcnJheV90b19zdHJpbmcgPSBhcnJheV90b19zdHJpbmcKLQotICAgICAgICBzdXBlcihDb25u ZWN0aW9uLCBzZWxmKS5fX2luaXRfXygpCi0KLSAgICBkZWYgYXNfZGljdChzZWxmKToKLSAgICAg ICAgIiIiCi0gICAgICAgIFJldHVybnMgdGhlIGRpY3Rpb25hcnkgb2JqZWN0IHJlcHJlc2VudGlu ZyB0aGlzIG9iamVjdC4KLSAgICAgICAgIiIiCi0gICAgICAgICMgSW4gY2FzZSwgaXQgY2Fubm90 IGJlIGF1dG8gcmVjb25uZWN0YWJsZSwgb3IgYWxyZWFkeSBiZWVuIHJlbGVhc2VkLAotICAgICAg ICAjIHRoZW4gd2Ugd2lsbCByZXR1cm4gTm9uZS4KLSAgICAgICAgaWYgbm90IHNlbGYuYXV0b19y ZWNvbm5lY3QgYW5kIG5vdCBzZWxmLmNvbm46Ci0gICAgICAgICAgICByZXR1cm4gTm9uZQotCi0g ICAgICAgIHJlcyA9IGRpY3QoKQotICAgICAgICByZXNbJ2Nvbm5faWQnXSA9IHNlbGYuY29ubl9p ZAotICAgICAgICByZXNbJ2RhdGFiYXNlJ10gPSBzZWxmLmRiCi0gICAgICAgIHJlc1snYXN5bmMn XSA9IHNlbGYuYXN5bmMKLSAgICAgICAgcmVzWyd3YXNDb25uZWN0ZWQnXSA9IHNlbGYud2FzQ29u bmVjdGVkCi0gICAgICAgIHJlc1snYXV0b19yZWNvbm5lY3QnXSA9IHNlbGYuYXV0b19yZWNvbm5l Y3QKLSAgICAgICAgcmVzWyd1c2VfYmluYXJ5X3BsYWNlaG9sZGVyJ10gPSBzZWxmLnVzZV9iaW5h cnlfcGxhY2Vob2xkZXIKLSAgICAgICAgcmVzWydhcnJheV90b19zdHJpbmcnXSA9IHNlbGYuYXJy YXlfdG9fc3RyaW5nCi0KLSAgICAgICAgcmV0dXJuIHJlcwotCi0gICAgZGVmIF9fcmVwcl9fKHNl bGYpOgotICAgICAgICByZXR1cm4gIlBHIENvbm5lY3Rpb246IHswfSAoezF9KSAtPiB7Mn0gKGFq YXg6ezN9KSIuZm9ybWF0KAotICAgICAgICAgICAgc2VsZi5jb25uX2lkLCBzZWxmLmRiLAotICAg ICAgICAgICAgJ0Nvbm5lY3RlZCcgaWYgc2VsZi5jb25uIGFuZCBub3Qgc2VsZi5jb25uLmNsb3Nl ZCBlbHNlCi0gICAgICAgICAgICAiRGlzY29ubmVjdGVkIiwKLSAgICAgICAgICAgIHNlbGYuYXN5 bmMKLSAgICAgICAgKQotCi0gICAgZGVmIF9fc3RyX18oc2VsZik6Ci0gICAgICAgIHJldHVybiAi UEcgQ29ubmVjdGlvbjogezB9ICh7MX0pIC0+IHsyfSAoYWpheDp7M30pIi5mb3JtYXQoCi0gICAg ICAgICAgICBzZWxmLmNvbm5faWQsIHNlbGYuZGIsCi0gICAgICAgICAgICAnQ29ubmVjdGVkJyBp ZiBzZWxmLmNvbm4gYW5kIG5vdCBzZWxmLmNvbm4uY2xvc2VkIGVsc2UKLSAgICAgICAgICAgICJE aXNjb25uZWN0ZWQiLAotICAgICAgICAgICAgc2VsZi5hc3luYwotICAgICAgICApCi0KLSAgICBk ZWYgY29ubmVjdChzZWxmLCAqKmt3YXJncyk6Ci0gICAgICAgIGlmIHNlbGYuY29ubjoKLSAgICAg ICAgICAgIGlmIHNlbGYuY29ubi5jbG9zZWQ6Ci0gICAgICAgICAgICAgICAgc2VsZi5jb25uID0g Tm9uZQotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICByZXR1cm4gVHJ1ZSwgTm9u ZQotCi0gICAgICAgIHBnX2Nvbm4gPSBOb25lCi0gICAgICAgIHBhc3N3b3JkID0gTm9uZQotICAg ICAgICBwYXNzZmlsZSA9IE5vbmUKLSAgICAgICAgbWdyID0gc2VsZi5tYW5hZ2VyCi0KLSAgICAg ICAgZW5jcGFzcyA9IGt3YXJnc1sncGFzc3dvcmQnXSBpZiAncGFzc3dvcmQnIGluIGt3YXJncyBl bHNlIE5vbmUKLSAgICAgICAgcGFzc2ZpbGUgPSBrd2FyZ3NbJ3Bhc3NmaWxlJ10gaWYgJ3Bhc3Nm aWxlJyBpbiBrd2FyZ3MgZWxzZSBOb25lCi0KLSAgICAgICAgaWYgZW5jcGFzcyBpcyBOb25lOgot ICAgICAgICAgICAgZW5jcGFzcyA9IHNlbGYucGFzc3dvcmQgb3IgZ2V0YXR0cihtZ3IsICdwYXNz d29yZCcsIE5vbmUpCi0KLSAgICAgICAgIyBSZXNldCB0aGUgZXhpc3RpbmcgY29ubmVjdGlvbiBw YXNzd29yZAotICAgICAgICBpZiBzZWxmLnJlY29ubmVjdGluZyBpcyBub3QgRmFsc2U6Ci0gICAg ICAgICAgICBzZWxmLnBhc3N3b3JkID0gTm9uZQotCi0gICAgICAgIGlmIGVuY3Bhc3M6Ci0gICAg ICAgICAgICAjIEZldGNoIExvZ2dlZCBpbiBVc2VyIERldGFpbHMuCi0gICAgICAgICAgICB1c2Vy ID0gVXNlci5xdWVyeS5maWx0ZXJfYnkoaWQ9Y3VycmVudF91c2VyLmlkKS5maXJzdCgpCi0KLSAg ICAgICAgICAgIGlmIHVzZXIgaXMgTm9uZToKLSAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2Us IGdldHRleHQoIlVuYXV0aG9yaXplZCByZXF1ZXN0LiIpCi0KLSAgICAgICAgICAgIHRyeToKLSAg ICAgICAgICAgICAgICBwYXNzd29yZCA9IGRlY3J5cHQoZW5jcGFzcywgdXNlci5wYXNzd29yZCkK LSAgICAgICAgICAgICAgICAjIEhhbmRsaW5nIG9mIG5vbiBhc2NpaSBwYXNzd29yZCAoUHl0aG9u MikKLSAgICAgICAgICAgICAgICBpZiBoYXNhdHRyKHN0ciwgJ2RlY29kZScpOgotICAgICAgICAg ICAgICAgICAgICBwYXNzd29yZCA9IHBhc3N3b3JkLmRlY29kZSgndXRmLTgnKS5lbmNvZGUoJ3V0 Zi04JykKLSAgICAgICAgICAgICAgICAjIHBhc3N3b3JkIGlzIGluIGJ5dGVzLCBmb3IgcHl0aG9u MyB3ZSBuZWVkIGl0IGluIHN0cmluZwotICAgICAgICAgICAgICAgIGVsaWYgaXNpbnN0YW5jZShw YXNzd29yZCwgYnl0ZXMpOgotICAgICAgICAgICAgICAgICAgICBwYXNzd29yZCA9IHBhc3N3b3Jk LmRlY29kZSgpCi0KLSAgICAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZToKLSAgICAgICAg ICAgICAgICBjdXJyZW50X2FwcC5sb2dnZXIuZXhjZXB0aW9uKGUpCi0gICAgICAgICAgICAgICAg cmV0dXJuIEZhbHNlLCBcCi0gICAgICAgICAgICAgICAgICAgIF8oCi0gICAgICAgICAgICAgICAg ICAgICAgICAiRmFpbGVkIHRvIGRlY3J5cHQgdGhlIHNhdmVkIHBhc3N3b3JkLlxuRXJyb3I6IHsw fSIKLSAgICAgICAgICAgICAgICAgICAgKS5mb3JtYXQoc3RyKGUpKQotCi0gICAgICAgICMgSWYg bm8gcGFzc3dvcmQgY3JlZGVudGlhbCBpcyBmb3VuZCB0aGVuIGNvbm5lY3QgcmVxdWVzdCBtaWdo dAotICAgICAgICAjIGNvbWUgZnJvbSBRdWVyeSB0b29sLCBWaWV3RGF0YSBncmlkLCBkZWJ1Z2dl ciBldGMgdG9vbHMuCi0gICAgICAgICMgd2Ugd2lsbCBjaGVjayBmb3IgcGdwYXNzIGZpbGUgYXZh aWxhYmlsaXR5IGZyb20gY29ubmVjdGlvbiBtYW5hZ2VyCi0gICAgICAgICMgaWYgaXQncyBwcmVz ZW50IHRoZW4gd2Ugd2lsbCB1c2UgaXQKLSAgICAgICAgaWYgbm90IHBhc3N3b3JkIGFuZCBub3Qg ZW5jcGFzcyBhbmQgbm90IHBhc3NmaWxlOgotICAgICAgICAgICAgcGFzc2ZpbGUgPSBtZ3IucGFz c2ZpbGUgaWYgbWdyLnBhc3NmaWxlIGVsc2UgTm9uZQotCi0gICAgICAgIHRyeToKLSAgICAgICAg ICAgIGlmIGhhc2F0dHIoc3RyLCAnZGVjb2RlJyk6Ci0gICAgICAgICAgICAgICAgZGF0YWJhc2Ug PSBzZWxmLmRiLmVuY29kZSgndXRmLTgnKQotICAgICAgICAgICAgICAgIHVzZXIgPSBtZ3IudXNl ci5lbmNvZGUoJ3V0Zi04JykKLSAgICAgICAgICAgICAgICBjb25uX2lkID0gc2VsZi5jb25uX2lk LmVuY29kZSgndXRmLTgnKQotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBkYXRh YmFzZSA9IHNlbGYuZGIKLSAgICAgICAgICAgICAgICB1c2VyID0gbWdyLnVzZXIKLSAgICAgICAg ICAgICAgICBjb25uX2lkID0gc2VsZi5jb25uX2lkCi0KLSAgICAgICAgICAgIGltcG9ydCBvcwot ICAgICAgICAgICAgb3MuZW52aXJvblsnUEdBUFBOQU1FJ10gPSAnezB9IC0gezF9Jy5mb3JtYXQo Ci0gICAgICAgICAgICAgICAgY29uZmlnLkFQUF9OQU1FLCBjb25uX2lkKQotCi0gICAgICAgICAg ICBwZ19jb25uID0gcHN5Y29wZzIuY29ubmVjdCgKLSAgICAgICAgICAgICAgICBob3N0PW1nci5o b3N0LAotICAgICAgICAgICAgICAgIGhvc3RhZGRyPW1nci5ob3N0YWRkciwKLSAgICAgICAgICAg ICAgICBwb3J0PW1nci5wb3J0LAotICAgICAgICAgICAgICAgIGRhdGFiYXNlPWRhdGFiYXNlLAot ICAgICAgICAgICAgICAgIHVzZXI9dXNlciwKLSAgICAgICAgICAgICAgICBwYXNzd29yZD1wYXNz d29yZCwKLSAgICAgICAgICAgICAgICBhc3luYz1zZWxmLmFzeW5jLAotICAgICAgICAgICAgICAg IHBhc3NmaWxlPWdldF9jb21wbGV0ZV9maWxlX3BhdGgocGFzc2ZpbGUpLAotICAgICAgICAgICAg ICAgIHNzbG1vZGU9bWdyLnNzbF9tb2RlLAotICAgICAgICAgICAgICAgIHNzbGNlcnQ9Z2V0X2Nv bXBsZXRlX2ZpbGVfcGF0aChtZ3Iuc3NsY2VydCksCi0gICAgICAgICAgICAgICAgc3Nsa2V5PWdl dF9jb21wbGV0ZV9maWxlX3BhdGgobWdyLnNzbGtleSksCi0gICAgICAgICAgICAgICAgc3Nscm9v dGNlcnQ9Z2V0X2NvbXBsZXRlX2ZpbGVfcGF0aChtZ3Iuc3Nscm9vdGNlcnQpLAotICAgICAgICAg ICAgICAgIHNzbGNybD1nZXRfY29tcGxldGVfZmlsZV9wYXRoKG1nci5zc2xjcmwpLAotICAgICAg ICAgICAgICAgIHNzbGNvbXByZXNzaW9uPVRydWUgaWYgbWdyLnNzbGNvbXByZXNzaW9uIGVsc2Ug RmFsc2UKLSAgICAgICAgICAgICkKLQotICAgICAgICAgICAgIyBJZiBjb25uZWN0aW9uIGlzIGFz eW5jaHJvbm91cyB0aGVuIHdlIHdpbGwgaGF2ZSB0byB3YWl0Ci0gICAgICAgICAgICAjIHVudGls IHRoZSBjb25uZWN0aW9uIGlzIHJlYWR5IHRvIHVzZS4KLSAgICAgICAgICAgIGlmIHNlbGYuYXN5 bmMgPT0gMToKLSAgICAgICAgICAgICAgICBzZWxmLl93YWl0KHBnX2Nvbm4pCi0KLSAgICAgICAg ZXhjZXB0IHBzeWNvcGcyLkVycm9yIGFzIGU6Ci0gICAgICAgICAgICBpZiBlLnBnZXJyb3I6Ci0g ICAgICAgICAgICAgICAgbXNnID0gZS5wZ2Vycm9yCi0gICAgICAgICAgICBlbGlmIGUuZGlhZy5t ZXNzYWdlX2RldGFpbDoKLSAgICAgICAgICAgICAgICBtc2cgPSBlLmRpYWcubWVzc2FnZV9kZXRh aWwKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgbXNnID0gc3RyKGUpCi0gICAg ICAgICAgICBjdXJyZW50X2FwcC5sb2dnZXIuaW5mbygKLSAgICAgICAgICAgICAgICB1IkZhaWxl ZCB0byBjb25uZWN0IHRvIHRoZSBkYXRhYmFzZSBzZXJ2ZXIoI3tzZXJ2ZXJfaWR9KSBmb3IgIgot ICAgICAgICAgICAgICAgIHUiY29ubmVjdGlvbiAoe2Nvbm5faWR9KSB3aXRoIGVycm9yIG1lc3Nh Z2UgYXMgYmVsb3ciCi0gICAgICAgICAgICAgICAgdSI6e21zZ30iLmZvcm1hdCgKLSAgICAgICAg ICAgICAgICAgICAgc2VydmVyX2lkPXNlbGYubWFuYWdlci5zaWQsCi0gICAgICAgICAgICAgICAg ICAgIGNvbm5faWQ9Y29ubl9pZCwKLSAgICAgICAgICAgICAgICAgICAgbXNnPW1zZy5kZWNvZGUo J3V0Zi04JykgaWYgaGFzYXR0cihzdHIsICdkZWNvZGUnKSBlbHNlIG1zZwotICAgICAgICAgICAg ICAgICkKLSAgICAgICAgICAgICkKLSAgICAgICAgICAgIHJldHVybiBGYWxzZSwgbXNnCi0KLSAg ICAgICAgIyBPdmVyd3JpdGUgY29ubmVjdGlvbiBub3RpY2UgYXR0ciB0byBzdXBwb3J0Ci0gICAg ICAgICMgbW9yZSB0aGFuIDUwIG5vdGljZXMgYXQgYSB0aW1lCi0gICAgICAgIHBnX2Nvbm4ubm90 aWNlcyA9IGRlcXVlKFtdLCBzZWxmLkFTWU5DX05PVElDRV9NQVhMRU5HVEgpCi0gICAgICAgIHNl bGYuY29ubiA9IHBnX2Nvbm4KLSAgICAgICAgc2VsZi53YXNDb25uZWN0ZWQgPSBUcnVlCi0gICAg ICAgIHRyeToKLSAgICAgICAgICAgIHN0YXR1cywgbXNnID0gc2VsZi5faW5pdGlhbGl6ZShjb25u X2lkLCAqKmt3YXJncykKLSAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOgotICAgICAgICAg ICAgY3VycmVudF9hcHAubG9nZ2VyLmV4Y2VwdGlvbihlKQotICAgICAgICAgICAgc2VsZi5jb25u ID0gTm9uZQotICAgICAgICAgICAgaWYgbm90IHNlbGYucmVjb25uZWN0aW5nOgotICAgICAgICAg ICAgICAgIHNlbGYud2FzQ29ubmVjdGVkID0gRmFsc2UKLSAgICAgICAgICAgIHJhaXNlIGUKLQot ICAgICAgICBpZiBzdGF0dXM6Ci0gICAgICAgICAgICBtZ3IuX3VwZGF0ZV9wYXNzd29yZChlbmNw YXNzKQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgaWYgbm90IHNlbGYucmVjb25uZWN0aW5n OgotICAgICAgICAgICAgICAgIHNlbGYud2FzQ29ubmVjdGVkID0gRmFsc2UKLQotICAgICAgICBy ZXR1cm4gc3RhdHVzLCBtc2cKLQotICAgIGRlZiBfaW5pdGlhbGl6ZShzZWxmLCBjb25uX2lkLCAq Kmt3YXJncyk6Ci0gICAgICAgIHNlbGYuZXhlY3V0aW9uX2Fib3J0ZWQgPSBGYWxzZQotICAgICAg ICBzZWxmLl9fYmFja2VuZF9waWQgPSBzZWxmLmNvbm4uZ2V0X2JhY2tlbmRfcGlkKCkKLQotICAg ICAgICBzZXRhdHRyKGcsICJ7MH0jezF9Ii5mb3JtYXQoCi0gICAgICAgICAgICBzZWxmLm1hbmFn ZXIuc2lkLAotICAgICAgICAgICAgc2VsZi5jb25uX2lkLmVuY29kZSgndXRmLTgnKQotICAgICAg ICApLCBOb25lKQotCi0gICAgICAgIHN0YXR1cywgY3VyID0gc2VsZi5fX2N1cnNvcigpCi0gICAg ICAgIGZvcm1hdHRlZF9leGNlcHRpb25fbXNnID0gc2VsZi5fZm9ybWF0dGVkX2V4Y2VwdGlvbl9t c2cKLSAgICAgICAgbWdyID0gc2VsZi5tYW5hZ2VyCi0KLSAgICAgICAgZGVmIF9leGVjdXRlKGN1 ciwgcXVlcnksIHBhcmFtcz1Ob25lKToKLSAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAg ICBzZWxmLl9faW50ZXJuYWxfYmxvY2tpbmdfZXhlY3V0ZShjdXIsIHF1ZXJ5LCBwYXJhbXMpCi0g ICAgICAgICAgICBleGNlcHQgcHN5Y29wZzIuRXJyb3IgYXMgcGU6Ci0gICAgICAgICAgICAgICAg Y3VyLmNsb3NlKCkKLSAgICAgICAgICAgICAgICByZXR1cm4gZm9ybWF0dGVkX2V4Y2VwdGlvbl9t c2cocGUsIEZhbHNlKQotICAgICAgICAgICAgcmV0dXJuIE5vbmUKLQotICAgICAgICAjIGF1dG9j b21taXQgZmxhZyBkb2VzIG5vdCB3b3JrIHdpdGggYXN5bmNocm9ub3VzIGNvbm5lY3Rpb25zLgot ICAgICAgICAjIEJ5IGRlZmF1bHQgYXN5bmNocm9ub3VzIGNvbm5lY3Rpb24gcnVucyBpbiBhdXRv Y29tbWl0IG1vZGUuCi0gICAgICAgIGlmIHNlbGYuYXN5bmMgPT0gMDoKLSAgICAgICAgICAgIGlm ICdhdXRvY29tbWl0JyBpbiBrd2FyZ3MgYW5kIGt3YXJnc1snYXV0b2NvbW1pdCddIGlzIEZhbHNl OgotICAgICAgICAgICAgICAgIHNlbGYuY29ubi5hdXRvY29tbWl0ID0gRmFsc2UKLSAgICAgICAg ICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgc2VsZi5jb25uLmF1dG9jb21taXQgPSBUcnVlCi0K LSAgICAgICAgcmVnaXN0ZXJfc3RyaW5nX3R5cGVjYXN0ZXJzKHNlbGYuY29ubikKLQotICAgICAg ICBpZiBzZWxmLmFycmF5X3RvX3N0cmluZzoKLSAgICAgICAgICAgIHJlZ2lzdGVyX2FycmF5X3Rv X3N0cmluZ190eXBlY2FzdGVycyhzZWxmLmNvbm4pCi0KLSAgICAgICAgIyBSZWdpc3RlciB0eXBl IGNhc3RlcnMgZm9yIGJpbmFyeSBkYXRhIG9ubHkgYWZ0ZXIgcmVnaXN0ZXJpbmcgYXJyYXkgdG8K LSAgICAgICAgIyBzdHJpbmcgdHlwZSBjYXN0ZXJzLgotICAgICAgICBpZiBzZWxmLnVzZV9iaW5h cnlfcGxhY2Vob2xkZXI6Ci0gICAgICAgICAgICByZWdpc3Rlcl9iaW5hcnlfdHlwZWNhc3RlcnMo c2VsZi5jb25uKQotCi0gICAgICAgIHN0YXR1cyA9IF9leGVjdXRlKGN1ciwgIlNFVCBEYXRlU3R5 bGU9SVNPOyIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiU0VUIGNsaWVudF9taW5f bWVzc2FnZXM9bm90aWNlOyIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiU0VUIGJ5 dGVhX291dHB1dD1lc2NhcGU7IgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJTRVQg Y2xpZW50X2VuY29kaW5nPSdVTklDT0RFJzsiKQotCi0gICAgICAgIGlmIHN0YXR1cyBpcyBub3Qg Tm9uZToKLSAgICAgICAgICAgIHNlbGYuY29ubi5jbG9zZSgpCi0gICAgICAgICAgICBzZWxmLmNv bm4gPSBOb25lCi0KLSAgICAgICAgICAgIHJldHVybiBGYWxzZSwgc3RhdHVzCi0KLSAgICAgICAg aWYgbWdyLnJvbGU6Ci0gICAgICAgICAgICBzdGF0dXMgPSBfZXhlY3V0ZShjdXIsIHUiU0VUIFJP TEUgVE8gJXMiLCBbbWdyLnJvbGVdKQotCi0gICAgICAgICAgICBpZiBzdGF0dXMgaXMgbm90IE5v bmU6Ci0gICAgICAgICAgICAgICAgc2VsZi5jb25uLmNsb3NlKCkKLSAgICAgICAgICAgICAgICBz ZWxmLmNvbm4gPSBOb25lCi0gICAgICAgICAgICAgICAgY3VycmVudF9hcHAubG9nZ2VyLmVycm9y KAotICAgICAgICAgICAgICAgICAgICAiQ29ubmVjdCB0byB0aGUgZGF0YWJhc2Ugc2VydmVyICgj e3NlcnZlcl9pZH0pIGZvciAiCi0gICAgICAgICAgICAgICAgICAgICJjb25uZWN0aW9uICh7Y29u bl9pZH0pLCBidXQgLSBmYWlsZWQgdG8gc2V0dXAgdGhlIHJvbGUgIgotICAgICAgICAgICAgICAg ICAgICAid2l0aCBlcnJvciBtZXNzYWdlIGFzIGJlbG93Onttc2d9Ii5mb3JtYXQoCi0gICAgICAg ICAgICAgICAgICAgICAgICBzZXJ2ZXJfaWQ9c2VsZi5tYW5hZ2VyLnNpZCwKLSAgICAgICAgICAg ICAgICAgICAgICAgIGNvbm5faWQ9Y29ubl9pZCwKLSAgICAgICAgICAgICAgICAgICAgICAgIG1z Zz1zdGF0dXMKLSAgICAgICAgICAgICAgICAgICAgKQotICAgICAgICAgICAgICAgICkKLSAgICAg ICAgICAgICAgICByZXR1cm4gRmFsc2UsIFwKLSAgICAgICAgICAgICAgICAgICAgXygKLSAgICAg ICAgICAgICAgICAgICAgICAgICJGYWlsZWQgdG8gc2V0dXAgdGhlIHJvbGUgd2l0aCBlcnJvciBt ZXNzYWdlOlxuezB9IgotICAgICAgICAgICAgICAgICAgICApLmZvcm1hdChzdGF0dXMpCi0KLSAg ICAgICAgaWYgbWdyLnZlciBpcyBOb25lOgotICAgICAgICAgICAgc3RhdHVzID0gX2V4ZWN1dGUo Y3VyLCAiU0VMRUNUIHZlcnNpb24oKSIpCi0KLSAgICAgICAgICAgIGlmIHN0YXR1cyBpcyBub3Qg Tm9uZToKLSAgICAgICAgICAgICAgICBzZWxmLmNvbm4uY2xvc2UoKQotICAgICAgICAgICAgICAg IHNlbGYuY29ubiA9IE5vbmUKLSAgICAgICAgICAgICAgICBzZWxmLndhc0Nvbm5lY3RlZCA9IEZh bHNlCi0gICAgICAgICAgICAgICAgY3VycmVudF9hcHAubG9nZ2VyLmVycm9yKAotICAgICAgICAg ICAgICAgICAgICAiRmFpbGVkIHRvIGZldGNoIHRoZSB2ZXJzaW9uIGluZm9ybWF0aW9uIG9uIHRo ZSAiCi0gICAgICAgICAgICAgICAgICAgICJlc3RhYmxpc2hlZCBjb25uZWN0aW9uIHRvIHRoZSBk YXRhYmFzZSBzZXJ2ZXIgIgotICAgICAgICAgICAgICAgICAgICAiKCN7c2VydmVyX2lkfSkgZm9y ICd7Y29ubl9pZH0nIHdpdGggYmVsb3cgZXJyb3IgIgotICAgICAgICAgICAgICAgICAgICAibWVz c2FnZTp7bXNnfSIuZm9ybWF0KAotICAgICAgICAgICAgICAgICAgICAgICAgc2VydmVyX2lkPXNl bGYubWFuYWdlci5zaWQsCi0gICAgICAgICAgICAgICAgICAgICAgICBjb25uX2lkPWNvbm5faWQs Ci0gICAgICAgICAgICAgICAgICAgICAgICBtc2c9c3RhdHVzKQotICAgICAgICAgICAgICAgICkK LSAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2UsIHN0YXR1cwotCi0gICAgICAgICAgICBpZiBj dXIucm93Y291bnQgPiAwOgotICAgICAgICAgICAgICAgIHJvdyA9IGN1ci5mZXRjaG1hbnkoMSlb MF0KLSAgICAgICAgICAgICAgICBtZ3IudmVyID0gcm93Wyd2ZXJzaW9uJ10KLSAgICAgICAgICAg ICAgICBtZ3Iuc3ZlcnNpb24gPSBzZWxmLmNvbm4uc2VydmVyX3ZlcnNpb24KLQotICAgICAgICBz dGF0dXMgPSBfZXhlY3V0ZShjdXIsICIiIgotU0VMRUNUCi0gICAgZGIub2lkIGFzIGRpZCwgZGIu ZGF0bmFtZSwgZGIuZGF0YWxsb3djb25uLAotICAgIHBnX2VuY29kaW5nX3RvX2NoYXIoZGIuZW5j b2RpbmcpIEFTIHNlcnZlcmVuY29kaW5nLAotICAgIGhhc19kYXRhYmFzZV9wcml2aWxlZ2UoZGIu b2lkLCAnQ1JFQVRFJykgYXMgY2FuY3JlYXRlLCBkYXRsYXN0c3lzb2lkCi1GUk9NCi0gICAgcGdf ZGF0YWJhc2UgZGIKLVdIRVJFIGRiLmRhdG5hbWUgPSBjdXJyZW50X2RhdGFiYXNlKCkiIiIpCi0K LSAgICAgICAgaWYgc3RhdHVzIGlzIE5vbmU6Ci0gICAgICAgICAgICBtZ3IuZGJfaW5mbyA9IG1n ci5kYl9pbmZvIG9yIGRpY3QoKQotICAgICAgICAgICAgaWYgY3VyLnJvd2NvdW50ID4gMDoKLSAg ICAgICAgICAgICAgICByZXMgPSBjdXIuZmV0Y2htYW55KDEpWzBdCi0gICAgICAgICAgICAgICAg bWdyLmRiX2luZm9bcmVzWydkaWQnXV0gPSByZXMuY29weSgpCi0KLSAgICAgICAgICAgICAgICAj IFdlIGRvIG5vdCBoYXZlIGRhdGFiYXNlIG9pZCBmb3IgdGhlIG1haW50ZW5hbmNlIGRhdGFiYXNl LgotICAgICAgICAgICAgICAgIGlmIGxlbihtZ3IuZGJfaW5mbykgPT0gMToKLSAgICAgICAgICAg ICAgICAgICAgbWdyLmRpZCA9IHJlc1snZGlkJ10KLQotICAgICAgICBzdGF0dXMgPSBfZXhlY3V0 ZShjdXIsICIiIgotU0VMRUNUCi0gICAgb2lkIGFzIGlkLCByb2xuYW1lIGFzIG5hbWUsIHJvbHN1 cGVyIGFzIGlzX3N1cGVydXNlciwKLSAgICByb2xjcmVhdGVyb2xlIGFzIGNhbl9jcmVhdGVfcm9s ZSwgcm9sY3JlYXRlZGIgYXMgY2FuX2NyZWF0ZV9kYgotRlJPTQotICAgIHBnX2NhdGFsb2cucGdf cm9sZXMKLVdIRVJFCi0gICAgcm9sbmFtZSA9IGN1cnJlbnRfdXNlciIiIikKLQotICAgICAgICBp ZiBzdGF0dXMgaXMgTm9uZToKLSAgICAgICAgICAgIG1nci51c2VyX2luZm8gPSBkaWN0KCkKLSAg ICAgICAgICAgIGlmIGN1ci5yb3djb3VudCA+IDA6Ci0gICAgICAgICAgICAgICAgbWdyLnVzZXJf aW5mbyA9IGN1ci5mZXRjaG1hbnkoMSlbMF0KLQotICAgICAgICBpZiAncGFzc3dvcmQnIGluIGt3 YXJnczoKLSAgICAgICAgICAgIG1nci5wYXNzd29yZCA9IGt3YXJnc1sncGFzc3dvcmQnXQotCi0g ICAgICAgIHNlcnZlcl90eXBlcyA9IE5vbmUKLSAgICAgICAgaWYgJ3NlcnZlcl90eXBlcycgaW4g a3dhcmdzIGFuZCBpc2luc3RhbmNlKAotICAgICAgICAgICAgICAgIGt3YXJnc1snc2VydmVyX3R5 cGVzJ10sIGxpc3QpOgotICAgICAgICAgICAgc2VydmVyX3R5cGVzID0gbWdyLnNlcnZlcl90eXBl cyA9IGt3YXJnc1snc2VydmVyX3R5cGVzJ10KLQotICAgICAgICBpZiBzZXJ2ZXJfdHlwZXMgaXMg Tm9uZToKLSAgICAgICAgICAgIGZyb20gcGdhZG1pbi5icm93c2VyLnNlcnZlcl9ncm91cHMuc2Vy dmVycy50eXBlcyBpbXBvcnQgU2VydmVyVHlwZQotICAgICAgICAgICAgc2VydmVyX3R5cGVzID0g U2VydmVyVHlwZS50eXBlcygpCi0KLSAgICAgICAgZm9yIHN0IGluIHNlcnZlcl90eXBlczoKLSAg ICAgICAgICAgIGlmIHN0Lmluc3RhbmNlT2YobWdyLnZlcik6Ci0gICAgICAgICAgICAgICAgbWdy LnNlcnZlcl90eXBlID0gc3Quc3R5cGUKLSAgICAgICAgICAgICAgICBtZ3Iuc2VydmVyX2NscyA9 IHN0Ci0gICAgICAgICAgICAgICAgYnJlYWsKLQotICAgICAgICBtZ3IudXBkYXRlX3Nlc3Npb24o KQotCi0gICAgICAgIHJldHVybiBUcnVlLCBOb25lCi0KLSAgICBkZWYgX19jdXJzb3Ioc2VsZiwg c2VydmVyX2N1cnNvcj1GYWxzZSk6Ci0gICAgICAgIGlmIHNlbGYud2FzQ29ubmVjdGVkIGlzIEZh bHNlOgotICAgICAgICAgICAgcmFpc2UgQ29ubmVjdGlvbkxvc3QoCi0gICAgICAgICAgICAgICAg c2VsZi5tYW5hZ2VyLnNpZCwKLSAgICAgICAgICAgICAgICBzZWxmLmRiLAotICAgICAgICAgICAg ICAgIE5vbmUgaWYgc2VsZi5jb25uX2lkWzA6M10gPT0gdSdEQjonIGVsc2Ugc2VsZi5jb25uX2lk WzU6XQotICAgICAgICAgICAgKQotICAgICAgICBjdXIgPSBnZXRhdHRyKGcsICJ7MH0jezF9Ii5m b3JtYXQoCi0gICAgICAgICAgICBzZWxmLm1hbmFnZXIuc2lkLAotICAgICAgICAgICAgc2VsZi5j b25uX2lkLmVuY29kZSgndXRmLTgnKQotICAgICAgICApLCBOb25lKQotCi0gICAgICAgIGlmIHNl bGYuY29ubmVjdGVkKCkgYW5kIGN1ciBhbmQgbm90IGN1ci5jbG9zZWQ6Ci0gICAgICAgICAgICBp ZiBub3Qgc2VydmVyX2N1cnNvciBvciAoc2VydmVyX2N1cnNvciBhbmQgY3VyLm5hbWUpOgotICAg ICAgICAgICAgICAgIHJldHVybiBUcnVlLCBjdXIKLQotICAgICAgICBpZiBub3Qgc2VsZi5jb25u ZWN0ZWQoKToKLSAgICAgICAgICAgIGVycm1zZyA9ICIiCi0KLSAgICAgICAgICAgIGN1cnJlbnRf YXBwLmxvZ2dlci53YXJuaW5nKAotICAgICAgICAgICAgICAgICJDb25uZWN0aW9uIHRvIGRhdGFi YXNlIHNlcnZlciAoI3tzZXJ2ZXJfaWR9KSBmb3IgdGhlICIKLSAgICAgICAgICAgICAgICAiY29u bmVjdGlvbiAtICd7Y29ubl9pZH0nIGhhcyBiZWVuIGxvc3QuIi5mb3JtYXQoCi0gICAgICAgICAg ICAgICAgICAgIHNlcnZlcl9pZD1zZWxmLm1hbmFnZXIuc2lkLAotICAgICAgICAgICAgICAgICAg ICBjb25uX2lkPXNlbGYuY29ubl9pZAotICAgICAgICAgICAgICAgICkKLSAgICAgICAgICAgICkK LQotICAgICAgICAgICAgaWYgc2VsZi5hdXRvX3JlY29ubmVjdCBhbmQgbm90IHNlbGYucmVjb25u ZWN0aW5nOgotICAgICAgICAgICAgICAgIHNlbGYuX19hdHRlbXB0X2V4ZWN1dGlvbl9yZWNvbm5l Y3QoTm9uZSkKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgcmFpc2UgQ29ubmVj dGlvbkxvc3QoCi0gICAgICAgICAgICAgICAgICAgIHNlbGYubWFuYWdlci5zaWQsCi0gICAgICAg ICAgICAgICAgICAgIHNlbGYuZGIsCi0gICAgICAgICAgICAgICAgICAgIE5vbmUgaWYgc2VsZi5j b25uX2lkWzA6M10gPT0gdSdEQjonIGVsc2Ugc2VsZi5jb25uX2lkWzU6XQotICAgICAgICAgICAg ICAgICkKLQotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBpZiBzZXJ2ZXJfY3Vyc29yOgotICAg ICAgICAgICAgICAgICMgUHJvdmlkaW5nIG5hbWUgdG8gY3Vyc29yIHdpbGwgY3JlYXRlIHNlcnZl ciBzaWRlIGN1cnNvci4KLSAgICAgICAgICAgICAgICBjdXJzb3JfbmFtZSA9ICJDVVJTT1I6ezB9 Ii5mb3JtYXQoc2VsZi5jb25uX2lkKQotICAgICAgICAgICAgICAgIGN1ciA9IHNlbGYuY29ubi5j dXJzb3IoCi0gICAgICAgICAgICAgICAgICAgIG5hbWU9Y3Vyc29yX25hbWUsIGN1cnNvcl9mYWN0 b3J5PURpY3RDdXJzb3IKLSAgICAgICAgICAgICAgICApCi0gICAgICAgICAgICBlbHNlOgotICAg ICAgICAgICAgICAgIGN1ciA9IHNlbGYuY29ubi5jdXJzb3IoY3Vyc29yX2ZhY3Rvcnk9RGljdEN1 cnNvcikKLSAgICAgICAgZXhjZXB0IHBzeWNvcGcyLkVycm9yIGFzIHBlOgotICAgICAgICAgICAg Y3VycmVudF9hcHAubG9nZ2VyLmV4Y2VwdGlvbihwZSkKLSAgICAgICAgICAgIGVycm1zZyA9IGdl dHRleHQoCi0gICAgICAgICAgICAgICAgIkZhaWxlZCB0byBjcmVhdGUgY3Vyc29yIGZvciBwc3lj b3BnMiBjb25uZWN0aW9uIHdpdGggZXJyb3IgIgotICAgICAgICAgICAgICAgICJtZXNzYWdlIGZv ciB0aGUgc2VydmVyI3sxfTp7Mn06XG57MH0iCi0gICAgICAgICAgICApLmZvcm1hdCgKLSAgICAg ICAgICAgICAgICBzdHIocGUpLCBzZWxmLm1hbmFnZXIuc2lkLCBzZWxmLmRiCi0gICAgICAgICAg ICApCi0KLSAgICAgICAgICAgIGN1cnJlbnRfYXBwLmxvZ2dlci5lcnJvcihlcnJtc2cpCi0gICAg ICAgICAgICBpZiBzZWxmLmNvbm4uY2xvc2VkOgotICAgICAgICAgICAgICAgIHNlbGYuY29ubiA9 IE5vbmUKLSAgICAgICAgICAgICAgICBpZiBzZWxmLmF1dG9fcmVjb25uZWN0IGFuZCBub3Qgc2Vs Zi5yZWNvbm5lY3Rpbmc6Ci0gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRfYXBwLmxvZ2dlci5p bmZvKAotICAgICAgICAgICAgICAgICAgICAgICAgZ2V0dGV4dCgKLSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAiQXR0ZW1wdGluZyB0byByZWNvbm5lY3QgdG8gdGhlIGRhdGFiYXNlIHNlcnZl ciAiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIigje3NlcnZlcl9pZH0pIGZvciB0aGUg Y29ubmVjdGlvbiAtICd7Y29ubl9pZH0nLiIKLSAgICAgICAgICAgICAgICAgICAgICAgICkuZm9y bWF0KAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZlcl9pZD1zZWxmLm1hbmFnZXIu c2lkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbm5faWQ9c2VsZi5jb25uX2lkCi0g ICAgICAgICAgICAgICAgICAgICAgICApCi0gICAgICAgICAgICAgICAgICAgICkKLSAgICAgICAg ICAgICAgICAgICAgcmV0dXJuIHNlbGYuX19hdHRlbXB0X2V4ZWN1dGlvbl9yZWNvbm5lY3QoCi0g ICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9fY3Vyc29yLCBzZXJ2ZXJfY3Vyc29yCi0gICAg ICAgICAgICAgICAgICAgICkKLSAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAg ICAgICByYWlzZSBDb25uZWN0aW9uTG9zdCgKLSAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYu bWFuYWdlci5zaWQsCi0gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmRiLAotICAgICAgICAg ICAgICAgICAgICAgICAgTm9uZSBpZiBzZWxmLmNvbm5faWRbMDozXSA9PSB1J0RCOicKLSAgICAg ICAgICAgICAgICAgICAgICAgIGVsc2Ugc2VsZi5jb25uX2lkWzU6XQotICAgICAgICAgICAgICAg ICAgICApCi0KLSAgICAgICAgc2V0YXR0cigKLSAgICAgICAgICAgIGcsICJ7MH0jezF9Ii5mb3Jt YXQoCi0gICAgICAgICAgICAgICAgc2VsZi5tYW5hZ2VyLnNpZCwgc2VsZi5jb25uX2lkLmVuY29k ZSgndXRmLTgnKQotICAgICAgICAgICAgKSwgY3VyCi0gICAgICAgICkKLQotICAgICAgICByZXR1 cm4gVHJ1ZSwgY3VyCi0KLSAgICBkZWYgX19pbnRlcm5hbF9ibG9ja2luZ19leGVjdXRlKHNlbGYs IGN1ciwgcXVlcnksIHBhcmFtcyk6Ci0gICAgICAgICIiIgotICAgICAgICBUaGlzIGZ1bmN0aW9u IGV4ZWN1dGVzIHRoZSBxdWVyeSB1c2luZyBjdXJzb3IncyBleGVjdXRlIGZ1bmN0aW9uLAotICAg ICAgICBidXQgaW4gY2FzZSBvZiBhc3luY2hyb25vdXMgY29ubmVjdGlvbiB3ZSBuZWVkIHRvIHdh aXQgZm9yIHRoZQotICAgICAgICB0cmFuc2FjdGlvbiB0byBiZSBjb21wbGV0ZWQuIElmIHNlbGYu YXN5bmMgaXMgMSB0aGVuIGl0IGlzIGEKLSAgICAgICAgYmxvY2tpbmcgY2FsbC4KLQotICAgICAg ICBBcmdzOgotICAgICAgICAgICAgY3VyOiBDdXJzb3Igb2JqZWN0Ci0gICAgICAgICAgICBxdWVy eTogU1FMIHF1ZXJ5IHRvIHJ1bi4KLSAgICAgICAgICAgIHBhcmFtczogRXh0cmEgcGFyYW1ldGVy cwotICAgICAgICAiIiIKLQotICAgICAgICBpZiBzeXMudmVyc2lvbl9pbmZvIDwgKDMsKToKLSAg ICAgICAgICAgIGlmIHR5cGUocXVlcnkpID09IHVuaWNvZGU6Ci0gICAgICAgICAgICAgICAgcXVl cnkgPSBxdWVyeS5lbmNvZGUoJ3V0Zi04JykKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHF1 ZXJ5ID0gcXVlcnkuZW5jb2RlKCd1dGYtOCcpCi0KLSAgICAgICAgY3VyLmV4ZWN1dGUocXVlcnks IHBhcmFtcykKLSAgICAgICAgaWYgc2VsZi5hc3luYyA9PSAxOgotICAgICAgICAgICAgc2VsZi5f d2FpdChjdXIuY29ubmVjdGlvbikKLQotICAgIGRlZiBleGVjdXRlX29uX3NlcnZlcl9hc19jc3Yo c2VsZiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHF1ZXJ5LCBwYXJhbXM9Tm9u ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdHRlZF9leGNlcHRpb25f bXNnPUZhbHNlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVjb3Jkcz0yMDAw KToKLSAgICAgICAgIiIiCi0gICAgICAgIFRvIGZldGNoIHF1ZXJ5IHJlc3VsdCBhbmQgZ2VuZXJh dGUgQ1NWIG91dHB1dAotCi0gICAgICAgIEFyZ3M6Ci0gICAgICAgICAgICBxdWVyeTogU1FMCi0g ICAgICAgICAgICBwYXJhbXM6IEFkZGl0aW9uYWwgcGFyYW1ldGVycwotICAgICAgICAgICAgZm9y bWF0dGVkX2V4Y2VwdGlvbl9tc2c6IEZvciBleGNlcHRpb24KLSAgICAgICAgICAgIHJlY29yZHM6 IE51bWJlciBvZiBpbml0aWFsIHJlY29yZHMKLSAgICAgICAgUmV0dXJuczoKLSAgICAgICAgICAg IEdlbmVyYXRvciByZXNwb25zZQotICAgICAgICAiIiIKLSAgICAgICAgc3RhdHVzLCBjdXIgPSBz ZWxmLl9fY3Vyc29yKHNlcnZlcl9jdXJzb3I9VHJ1ZSkKLSAgICAgICAgc2VsZi5yb3dfY291bnQg PSAwCi0KLSAgICAgICAgaWYgbm90IHN0YXR1czoKLSAgICAgICAgICAgIHJldHVybiBGYWxzZSwg c3RyKGN1cikKLSAgICAgICAgcXVlcnlfaWQgPSByYW5kb20ucmFuZGludCgxLCA5OTk5OTk5KQot Ci0gICAgICAgIGlmIElTX1BZMiBhbmQgdHlwZShxdWVyeSkgPT0gdW5pY29kZToKLSAgICAgICAg ICAgIHF1ZXJ5ID0gcXVlcnkuZW5jb2RlKCd1dGYtOCcpCi0KLSAgICAgICAgY3VycmVudF9hcHAu bG9nZ2VyLmxvZygKLSAgICAgICAgICAgIDI1LAotICAgICAgICAgICAgdSJFeGVjdXRlICh3aXRo IHNlcnZlciBjdXJzb3IpIGZvciBzZXJ2ZXIgI3tzZXJ2ZXJfaWR9IC0gIgotICAgICAgICAgICAg dSJ7Y29ubl9pZH0gKFF1ZXJ5LWlkOiB7cXVlcnlfaWR9KTpcbntxdWVyeX0iLmZvcm1hdCgKLSAg ICAgICAgICAgICAgICBzZXJ2ZXJfaWQ9c2VsZi5tYW5hZ2VyLnNpZCwKLSAgICAgICAgICAgICAg ICBjb25uX2lkPXNlbGYuY29ubl9pZCwKLSAgICAgICAgICAgICAgICBxdWVyeT1xdWVyeS5kZWNv ZGUoJ3V0Zi04JykgaWYKLSAgICAgICAgICAgICAgICBzeXMudmVyc2lvbl9pbmZvIDwgKDMsKSBl bHNlIHF1ZXJ5LAotICAgICAgICAgICAgICAgIHF1ZXJ5X2lkPXF1ZXJ5X2lkCi0gICAgICAgICAg ICApCi0gICAgICAgICkKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgc2VsZi5fX2ludGVybmFs X2Jsb2NraW5nX2V4ZWN1dGUoY3VyLCBxdWVyeSwgcGFyYW1zKQotICAgICAgICBleGNlcHQgcHN5 Y29wZzIuRXJyb3IgYXMgcGU6Ci0gICAgICAgICAgICBjdXIuY2xvc2UoKQotICAgICAgICAgICAg ZXJybXNnID0gc2VsZi5fZm9ybWF0dGVkX2V4Y2VwdGlvbl9tc2cocGUsIGZvcm1hdHRlZF9leGNl cHRpb25fbXNnKQotICAgICAgICAgICAgY3VycmVudF9hcHAubG9nZ2VyLmVycm9yKAotICAgICAg ICAgICAgICAgIHUiZmFpbGVkIHRvIGV4ZWN1dGUgcXVlcnkgKCh3aXRoIHNlcnZlciBjdXJzb3Ip ICIKLSAgICAgICAgICAgICAgICB1ImZvciB0aGUgc2VydmVyICN7c2VydmVyX2lkfSAtIHtjb25u X2lkfSAiCi0gICAgICAgICAgICAgICAgdSIocXVlcnktaWQ6IHtxdWVyeV9pZH0pOlxuZXJyb3Ig bWVzc2FnZTp7ZXJybXNnfSIuZm9ybWF0KAotICAgICAgICAgICAgICAgICAgICBzZXJ2ZXJfaWQ9 c2VsZi5tYW5hZ2VyLnNpZCwKLSAgICAgICAgICAgICAgICAgICAgY29ubl9pZD1zZWxmLmNvbm5f aWQsCi0gICAgICAgICAgICAgICAgICAgIHF1ZXJ5PXF1ZXJ5LAotICAgICAgICAgICAgICAgICAg ICBlcnJtc2c9ZXJybXNnLAotICAgICAgICAgICAgICAgICAgICBxdWVyeV9pZD1xdWVyeV9pZAot ICAgICAgICAgICAgICAgICkKLSAgICAgICAgICAgICkKLSAgICAgICAgICAgIHJldHVybiBGYWxz ZSwgZXJybXNnCi0KLSAgICAgICAgZGVmIGhhbmRsZV9qc29uX2RhdGEoanNvbl9jb2x1bW5zLCBy ZXN1bHRzKToKLSAgICAgICAgICAgICIiIgotICAgICAgICAgICAgWyBUaGlzIGlzIG9ubHkgZm9y IFB5dGhvbjIueF0KLSAgICAgICAgICAgIFRoaXMgZnVuY3Rpb24gd2lsbCBiZSB1c2VmdWwgdG8g aGFuZGxlIGpzb24gZGF0YSB0eXBlcy4KLSAgICAgICAgICAgIFdlIHdpbGwgZHVtcCBqc29uIGRh dGEgYXMgcHJvcGVyIGpzb24gaW5zdGVhZCBvZiB1bmljb2RlIHZhbHVlcwotCi0gICAgICAgICAg ICBBcmdzOgotICAgICAgICAgICAgICAgIGpzb25fY29sdW1uczogQ29sdW1ucyB3aGljaCBjb250 YWlucyBqc29uIGRhdGEKLSAgICAgICAgICAgICAgICByZXN1bHRzOiBRdWVyeSByZXN1bHQKLQot ICAgICAgICAgICAgUmV0dXJuczoKLSAgICAgICAgICAgICAgICByZXN1bHRzCi0gICAgICAgICAg ICAiIiIKLSAgICAgICAgICAgICMgT25seSBpZiBQeXRob24yIGFuZCB0aGVyZSBhcmUgY29sdW1u cyB3aXRoIEpTT04gdHlwZQotICAgICAgICAgICAgaWYgSVNfUFkyIGFuZCBsZW4oanNvbl9jb2x1 bW5zKSA+IDA6Ci0gICAgICAgICAgICAgICAgdGVtcF9yZXN1bHRzID0gW10KLSAgICAgICAgICAg ICAgICBmb3Igcm93IGluIHJlc3VsdHM6Ci0gICAgICAgICAgICAgICAgICAgIHJlcyA9IGRpY3Qo KQotICAgICAgICAgICAgICAgICAgICBmb3IgaywgdiBpbiByb3cuaXRlbXMoKToKLSAgICAgICAg ICAgICAgICAgICAgICAgIGlmIGsgaW4ganNvbl9jb2x1bW5zOgotICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHJlc1trXSA9IGpzb24uZHVtcHModikKLSAgICAgICAgICAgICAgICAgICAgICAg IGVsc2U6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzW2tdID0gdgotICAgICAgICAg ICAgICAgICAgICB0ZW1wX3Jlc3VsdHMuYXBwZW5kKHJlcykKLSAgICAgICAgICAgICAgICByZXN1 bHRzID0gdGVtcF9yZXN1bHRzCi0gICAgICAgICAgICByZXR1cm4gcmVzdWx0cwotCi0gICAgICAg IGRlZiBjb252ZXJ0X2tleXNfdG9fdW5pY29kZShyZXN1bHRzLCBjb25uX2VuY29kaW5nKToKLSAg ICAgICAgICAgICIiIgotICAgICAgICAgICAgWyBUaGlzIGlzIG9ubHkgZm9yIFB5dGhvbjIueF0K LSAgICAgICAgICAgIFdlIG5lZWQgdG8gY29udmVydCBhbGwga2V5cyB0byB1bmljb2RlIGFzIHBz eWNvcGcyCi0gICAgICAgICAgICBzZW5kcyB0aGVtIGFzIHN0cmluZwotCi0gICAgICAgICAgICBB cmdzOgotICAgICAgICAgICAgICAgIHJlczogUXVlcnkgcmVzdWx0IHNldCBmcm9tIHBzeWNvcGcy Ci0gICAgICAgICAgICAgICAgY29ubl9lbmNvZGluZzogQ29ubmVjdGlvbiBlbmNvZGluZwotCi0g ICAgICAgICAgICBSZXR1cm5zOgotICAgICAgICAgICAgICAgIFJlc3VsdCBzZXQgKFdpdGggYWxs IHRoZSBrZXlzIGNvbnZlcnRlZCB0byB1bmljb2RlKQotICAgICAgICAgICAgIiIiCi0gICAgICAg ICAgICBuZXdfcmVzdWx0cyA9IFtdCi0gICAgICAgICAgICBmb3Igcm93IGluIHJlc3VsdHM6Ci0g ICAgICAgICAgICAgICAgbmV3X3Jlc3VsdHMuYXBwZW5kKAotICAgICAgICAgICAgICAgICAgICBk aWN0KFsoay5kZWNvZGUoY29ubl9lbmNvZGluZyksIHYpCi0gICAgICAgICAgICAgICAgICAgICAg ICAgIGZvciBrLCB2IGluIHJvdy5pdGVtcygpXSkKLSAgICAgICAgICAgICAgICApCi0gICAgICAg ICAgICByZXR1cm4gbmV3X3Jlc3VsdHMKLQotICAgICAgICBkZWYgZ2VuKHF1b3RlPSdzdHJpbmdz JywgcXVvdGVfY2hhcj0iJyIsIGZpZWxkX3NlcGFyYXRvcj0nLCcpOgotCi0gICAgICAgICAgICBy ZXN1bHRzID0gY3VyLmZldGNobWFueShyZWNvcmRzKQotICAgICAgICAgICAgaWYgbm90IHJlc3Vs dHM6Ci0gICAgICAgICAgICAgICAgaWYgbm90IGN1ci5jbG9zZWQ6Ci0gICAgICAgICAgICAgICAg ICAgIGN1ci5jbG9zZSgpCi0gICAgICAgICAgICAgICAgeWllbGQgZ2V0dGV4dCgnVGhlIHF1ZXJ5 IGV4ZWN1dGVkIGRpZCBub3QgcmV0dXJuIGFueSBkYXRhLicpCi0gICAgICAgICAgICAgICAgcmV0 dXJuCi0KLSAgICAgICAgICAgIGhlYWRlciA9IFtdCi0gICAgICAgICAgICBqc29uX2NvbHVtbnMg PSBbXQotICAgICAgICAgICAgY29ubl9lbmNvZGluZyA9IGN1ci5jb25uZWN0aW9uLmVuY29kaW5n Ci0KLSAgICAgICAgICAgIGZvciBjIGluIGN1ci5vcmRlcmVkX2Rlc2NyaXB0aW9uKCk6Ci0gICAg ICAgICAgICAgICAgIyBUaGlzIGlzIHRvIGhhbmRsZSB0aGUgY2FzZSBpbiB3aGljaCBjb2x1bW4g bmFtZSBpcyBub24tYXNjaWkKLSAgICAgICAgICAgICAgICBjb2x1bW5fbmFtZSA9IGMudG9fZGlj dCgpWyduYW1lJ10KLSAgICAgICAgICAgICAgICBpZiBJU19QWTI6Ci0gICAgICAgICAgICAgICAg ICAgIGNvbHVtbl9uYW1lID0gY29sdW1uX25hbWUuZGVjb2RlKGNvbm5fZW5jb2RpbmcpCi0gICAg ICAgICAgICAgICAgaGVhZGVyLmFwcGVuZChjb2x1bW5fbmFtZSkKLSAgICAgICAgICAgICAgICBp ZiBjLnRvX2RpY3QoKVsndHlwZV9jb2RlJ10gaW4gQUxMX0pTT05fVFlQRVM6Ci0gICAgICAgICAg ICAgICAgICAgIGpzb25fY29sdW1ucy5hcHBlbmQoY29sdW1uX25hbWUpCi0KLSAgICAgICAgICAg IGlmIElTX1BZMjoKLSAgICAgICAgICAgICAgICByZXN1bHRzID0gY29udmVydF9rZXlzX3RvX3Vu aWNvZGUocmVzdWx0cywgY29ubl9lbmNvZGluZykKLQotICAgICAgICAgICAgcmVzX2lvID0gU3Ry aW5nSU8oKQotCi0gICAgICAgICAgICBpZiBxdW90ZSA9PSAnc3RyaW5ncyc6Ci0gICAgICAgICAg ICAgICAgcXVvdGUgPSBjc3YuUVVPVEVfTk9OTlVNRVJJQwotICAgICAgICAgICAgZWxpZiBxdW90 ZSA9PSAnYWxsJzoKLSAgICAgICAgICAgICAgICBxdW90ZSA9IGNzdi5RVU9URV9BTEwKLSAgICAg ICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgcXVvdGUgPSBjc3YuUVVPVEVfTk9ORQotCi0g ICAgICAgICAgICBpZiBoYXNhdHRyKHN0ciwgJ2RlY29kZScpOgotICAgICAgICAgICAgICAgICMg RGVjb2RlIHRoZSBmaWVsZF9zZXBhcmF0b3IKLSAgICAgICAgICAgICAgICB0cnk6Ci0gICAgICAg ICAgICAgICAgICAgIGZpZWxkX3NlcGFyYXRvciA9IGZpZWxkX3NlcGFyYXRvci5kZWNvZGUoJ3V0 Zi04JykKLSAgICAgICAgICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6Ci0gICAgICAgICAg ICAgICAgICAgIGN1cnJlbnRfYXBwLmxvZ2dlci5lcnJvcihlKQotCi0gICAgICAgICAgICAgICAg IyBEZWNvZGUgdGhlIHF1b3RlX2NoYXIKLSAgICAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAg ICAgICAgICAgIHF1b3RlX2NoYXIgPSBxdW90ZV9jaGFyLmRlY29kZSgndXRmLTgnKQotICAgICAg ICAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZToKLSAgICAgICAgICAgICAgICAgICAgY3Vy cmVudF9hcHAubG9nZ2VyLmVycm9yKGUpCi0KLSAgICAgICAgICAgIGNzdl93cml0ZXIgPSBjc3Yu RGljdFdyaXRlcigKLSAgICAgICAgICAgICAgICByZXNfaW8sIGZpZWxkbmFtZXM9aGVhZGVyLCBk ZWxpbWl0ZXI9ZmllbGRfc2VwYXJhdG9yLAotICAgICAgICAgICAgICAgIHF1b3Rpbmc9cXVvdGUs Ci0gICAgICAgICAgICAgICAgcXVvdGVjaGFyPXF1b3RlX2NoYXIKLSAgICAgICAgICAgICkKLQot ICAgICAgICAgICAgY3N2X3dyaXRlci53cml0ZWhlYWRlcigpCi0gICAgICAgICAgICByZXN1bHRz ID0gaGFuZGxlX2pzb25fZGF0YShqc29uX2NvbHVtbnMsIHJlc3VsdHMpCi0gICAgICAgICAgICBj c3Zfd3JpdGVyLndyaXRlcm93cyhyZXN1bHRzKQotCi0gICAgICAgICAgICB5aWVsZCByZXNfaW8u Z2V0dmFsdWUoKQotCi0gICAgICAgICAgICB3aGlsZSBUcnVlOgotICAgICAgICAgICAgICAgIHJl c3VsdHMgPSBjdXIuZmV0Y2htYW55KHJlY29yZHMpCi0KLSAgICAgICAgICAgICAgICBpZiBub3Qg cmVzdWx0czoKLSAgICAgICAgICAgICAgICAgICAgaWYgbm90IGN1ci5jbG9zZWQ6Ci0gICAgICAg ICAgICAgICAgICAgICAgICBjdXIuY2xvc2UoKQotICAgICAgICAgICAgICAgICAgICBicmVhawot ICAgICAgICAgICAgICAgIHJlc19pbyA9IFN0cmluZ0lPKCkKLQotICAgICAgICAgICAgICAgIGNz dl93cml0ZXIgPSBjc3YuRGljdFdyaXRlcigKLSAgICAgICAgICAgICAgICAgICAgcmVzX2lvLCBm aWVsZG5hbWVzPWhlYWRlciwgZGVsaW1pdGVyPWZpZWxkX3NlcGFyYXRvciwKLSAgICAgICAgICAg ICAgICAgICAgcXVvdGluZz1xdW90ZSwKLSAgICAgICAgICAgICAgICAgICAgcXVvdGVjaGFyPXF1 b3RlX2NoYXIKLSAgICAgICAgICAgICAgICApCi0KLSAgICAgICAgICAgICAgICBpZiBJU19QWTI6 Ci0gICAgICAgICAgICAgICAgICAgIHJlc3VsdHMgPSBjb252ZXJ0X2tleXNfdG9fdW5pY29kZShy ZXN1bHRzLCBjb25uX2VuY29kaW5nKQotCi0gICAgICAgICAgICAgICAgcmVzdWx0cyA9IGhhbmRs ZV9qc29uX2RhdGEoanNvbl9jb2x1bW5zLCByZXN1bHRzKQotICAgICAgICAgICAgICAgIGNzdl93 cml0ZXIud3JpdGVyb3dzKHJlc3VsdHMpCi0gICAgICAgICAgICAgICAgeWllbGQgcmVzX2lvLmdl dHZhbHVlKCkKLQotICAgICAgICByZXR1cm4gVHJ1ZSwgZ2VuCi0KLSAgICBkZWYgZXhlY3V0ZV9z Y2FsYXIoc2VsZiwgcXVlcnksIHBhcmFtcz1Ob25lLAotICAgICAgICAgICAgICAgICAgICAgICBm b3JtYXR0ZWRfZXhjZXB0aW9uX21zZz1GYWxzZSk6Ci0gICAgICAgIHN0YXR1cywgY3VyID0gc2Vs Zi5fX2N1cnNvcigpCi0gICAgICAgIHNlbGYucm93X2NvdW50ID0gMAotCi0gICAgICAgIGlmIG5v dCBzdGF0dXM6Ci0gICAgICAgICAgICByZXR1cm4gRmFsc2UsIHN0cihjdXIpCi0gICAgICAgIHF1 ZXJ5X2lkID0gcmFuZG9tLnJhbmRpbnQoMSwgOTk5OTk5OSkKLQotICAgICAgICBjdXJyZW50X2Fw cC5sb2dnZXIubG9nKAotICAgICAgICAgICAgMjUsCi0gICAgICAgICAgICB1IkV4ZWN1dGUgKHNj YWxhcikgZm9yIHNlcnZlciAje3NlcnZlcl9pZH0gLSB7Y29ubl9pZH0gKFF1ZXJ5LWlkOiAiCi0g ICAgICAgICAgICB1IntxdWVyeV9pZH0pOlxue3F1ZXJ5fSIuZm9ybWF0KAotICAgICAgICAgICAg ICAgIHNlcnZlcl9pZD1zZWxmLm1hbmFnZXIuc2lkLAotICAgICAgICAgICAgICAgIGNvbm5faWQ9 c2VsZi5jb25uX2lkLAotICAgICAgICAgICAgICAgIHF1ZXJ5PXF1ZXJ5LAotICAgICAgICAgICAg ICAgIHF1ZXJ5X2lkPXF1ZXJ5X2lkCi0gICAgICAgICAgICApCi0gICAgICAgICkKLSAgICAgICAg dHJ5OgotICAgICAgICAgICAgc2VsZi5fX2ludGVybmFsX2Jsb2NraW5nX2V4ZWN1dGUoY3VyLCBx dWVyeSwgcGFyYW1zKQotICAgICAgICBleGNlcHQgcHN5Y29wZzIuRXJyb3IgYXMgcGU6Ci0gICAg ICAgICAgICBjdXIuY2xvc2UoKQotICAgICAgICAgICAgaWYgbm90IHNlbGYuY29ubmVjdGVkKCk6 Ci0gICAgICAgICAgICAgICAgaWYgc2VsZi5hdXRvX3JlY29ubmVjdCBhbmQgbm90IHNlbGYucmVj b25uZWN0aW5nOgotICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5fX2F0dGVtcHRfZXhl Y3V0aW9uX3JlY29ubmVjdCgKLSAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZXhlY3V0ZV9k aWN0LCBxdWVyeSwgcGFyYW1zLAotICAgICAgICAgICAgICAgICAgICAgICAgZm9ybWF0dGVkX2V4 Y2VwdGlvbl9tc2cKLSAgICAgICAgICAgICAgICAgICAgKQotICAgICAgICAgICAgICAgIHJhaXNl IENvbm5lY3Rpb25Mb3N0KAotICAgICAgICAgICAgICAgICAgICBzZWxmLm1hbmFnZXIuc2lkLAot ICAgICAgICAgICAgICAgICAgICBzZWxmLmRiLAotICAgICAgICAgICAgICAgICAgICBOb25lIGlm IHNlbGYuY29ubl9pZFswOjNdID09IHUnREI6JyBlbHNlIHNlbGYuY29ubl9pZFs1Ol0KLSAgICAg ICAgICAgICAgICApCi0gICAgICAgICAgICBlcnJtc2cgPSBzZWxmLl9mb3JtYXR0ZWRfZXhjZXB0 aW9uX21zZyhwZSwgZm9ybWF0dGVkX2V4Y2VwdGlvbl9tc2cpCi0gICAgICAgICAgICBjdXJyZW50 X2FwcC5sb2dnZXIuZXJyb3IoCi0gICAgICAgICAgICAgICAgdSJGYWlsZWQgdG8gZXhlY3V0ZSBx dWVyeSAoZXhlY3V0ZV9zY2FsYXIpIGZvciB0aGUgc2VydmVyICIKLSAgICAgICAgICAgICAgICB1 IiN7c2VydmVyX2lkfSAtIHtjb25uX2lkfSAoUXVlcnktaWQ6IHtxdWVyeV9pZH0pOlxuIgotICAg ICAgICAgICAgICAgIHUiRXJyb3IgTWVzc2FnZTp7ZXJybXNnfSIuZm9ybWF0KAotICAgICAgICAg ICAgICAgICAgICBzZXJ2ZXJfaWQ9c2VsZi5tYW5hZ2VyLnNpZCwKLSAgICAgICAgICAgICAgICAg ICAgY29ubl9pZD1zZWxmLmNvbm5faWQsCi0gICAgICAgICAgICAgICAgICAgIHF1ZXJ5PXF1ZXJ5 LAotICAgICAgICAgICAgICAgICAgICBlcnJtc2c9ZXJybXNnLAotICAgICAgICAgICAgICAgICAg ICBxdWVyeV9pZD1xdWVyeV9pZAotICAgICAgICAgICAgICAgICkKLSAgICAgICAgICAgICkKLSAg ICAgICAgICAgIHJldHVybiBGYWxzZSwgZXJybXNnCi0KLSAgICAgICAgc2VsZi5yb3dfY291bnQg PSBjdXIucm93Y291bnQKLSAgICAgICAgaWYgY3VyLnJvd2NvdW50ID4gMDoKLSAgICAgICAgICAg IHJlcyA9IGN1ci5mZXRjaG9uZSgpCi0gICAgICAgICAgICBpZiBsZW4ocmVzKSA+IDA6Ci0gICAg ICAgICAgICAgICAgcmV0dXJuIFRydWUsIHJlc1swXQotCi0gICAgICAgIHJldHVybiBUcnVlLCBO b25lCi0KLSAgICBkZWYgZXhlY3V0ZV9hc3luYyhzZWxmLCBxdWVyeSwgcGFyYW1zPU5vbmUsIGZv cm1hdHRlZF9leGNlcHRpb25fbXNnPVRydWUpOgotICAgICAgICAiIiIKLSAgICAgICAgVGhpcyBm dW5jdGlvbiBleGVjdXRlcyB0aGUgZ2l2ZW4gcXVlcnkgYXN5bmNocm9ub3VzbHkgYW5kIHJldHVy bnMKLSAgICAgICAgcmVzdWx0LgotCi0gICAgICAgIEFyZ3M6Ci0gICAgICAgICAgICBxdWVyeTog U1FMIHF1ZXJ5IHRvIHJ1bi4KLSAgICAgICAgICAgIHBhcmFtczogZXh0cmEgcGFyYW1ldGVycyB0 byB0aGUgZnVuY3Rpb24KLSAgICAgICAgICAgIGZvcm1hdHRlZF9leGNlcHRpb25fbXNnOiBpZiBU cnVlIHRoZW4gZnVuY3Rpb24gcmV0dXJuIHRoZQotICAgICAgICAgICAgZm9ybWF0dGVkIGV4Y2Vw dGlvbiBtZXNzYWdlCi0gICAgICAgICIiIgotCi0gICAgICAgIGlmIHN5cy52ZXJzaW9uX2luZm8g PCAoMywpOgotICAgICAgICAgICAgaWYgdHlwZShxdWVyeSkgPT0gdW5pY29kZToKLSAgICAgICAg ICAgICAgICBxdWVyeSA9IHF1ZXJ5LmVuY29kZSgndXRmLTgnKQotICAgICAgICBlbHNlOgotICAg ICAgICAgICAgcXVlcnkgPSBxdWVyeS5lbmNvZGUoJ3V0Zi04JykKLQotICAgICAgICBzZWxmLl9f YXN5bmNfY3Vyc29yID0gTm9uZQotICAgICAgICBzdGF0dXMsIGN1ciA9IHNlbGYuX19jdXJzb3Io KQotCi0gICAgICAgIGlmIG5vdCBzdGF0dXM6Ci0gICAgICAgICAgICByZXR1cm4gRmFsc2UsIHN0 cihjdXIpCi0gICAgICAgIHF1ZXJ5X2lkID0gcmFuZG9tLnJhbmRpbnQoMSwgOTk5OTk5OSkKLQot ICAgICAgICBjdXJyZW50X2FwcC5sb2dnZXIubG9nKAotICAgICAgICAgICAgMjUsCi0gICAgICAg ICAgICB1IkV4ZWN1dGUgKGFzeW5jKSBmb3Igc2VydmVyICN7c2VydmVyX2lkfSAtIHtjb25uX2lk fSAoUXVlcnktaWQ6ICIKLSAgICAgICAgICAgIHUie3F1ZXJ5X2lkfSk6XG57cXVlcnl9Ii5mb3Jt YXQoCi0gICAgICAgICAgICAgICAgc2VydmVyX2lkPXNlbGYubWFuYWdlci5zaWQsCi0gICAgICAg ICAgICAgICAgY29ubl9pZD1zZWxmLmNvbm5faWQsCi0gICAgICAgICAgICAgICAgcXVlcnk9cXVl cnkuZGVjb2RlKCd1dGYtOCcpLAotICAgICAgICAgICAgICAgIHF1ZXJ5X2lkPXF1ZXJ5X2lkCi0g ICAgICAgICAgICApCi0gICAgICAgICkKLQotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBzZWxm Ll9fbm90aWNlcyA9IFtdCi0gICAgICAgICAgICBzZWxmLmV4ZWN1dGlvbl9hYm9ydGVkID0gRmFs c2UKLSAgICAgICAgICAgIGN1ci5leGVjdXRlKHF1ZXJ5LCBwYXJhbXMpCi0gICAgICAgICAgICBy ZXMgPSBzZWxmLl93YWl0X3RpbWVvdXQoY3VyLmNvbm5lY3Rpb24pCi0gICAgICAgIGV4Y2VwdCBw c3ljb3BnMi5FcnJvciBhcyBwZToKLSAgICAgICAgICAgIGVycm1zZyA9IHNlbGYuX2Zvcm1hdHRl ZF9leGNlcHRpb25fbXNnKHBlLCBmb3JtYXR0ZWRfZXhjZXB0aW9uX21zZykKLSAgICAgICAgICAg IGN1cnJlbnRfYXBwLmxvZ2dlci5lcnJvcigKLSAgICAgICAgICAgICAgICB1IkZhaWxlZCB0byBl eGVjdXRlIHF1ZXJ5IChleGVjdXRlX2FzeW5jKSBmb3IgdGhlIHNlcnZlciAiCi0gICAgICAgICAg ICAgICAgdSIje3NlcnZlcl9pZH0gLSB7Y29ubl9pZH0oUXVlcnktaWQ6IHtxdWVyeV9pZH0pOlxu IgotICAgICAgICAgICAgICAgIHUiRXJyb3IgTWVzc2FnZTp7ZXJybXNnfSIuZm9ybWF0KAotICAg ICAgICAgICAgICAgICAgICBzZXJ2ZXJfaWQ9c2VsZi5tYW5hZ2VyLnNpZCwKLSAgICAgICAgICAg ICAgICAgICAgY29ubl9pZD1zZWxmLmNvbm5faWQsCi0gICAgICAgICAgICAgICAgICAgIHF1ZXJ5 PXF1ZXJ5LmRlY29kZSgndXRmLTgnKSwKLSAgICAgICAgICAgICAgICAgICAgZXJybXNnPWVycm1z ZywKLSAgICAgICAgICAgICAgICAgICAgcXVlcnlfaWQ9cXVlcnlfaWQKLSAgICAgICAgICAgICAg ICApCi0gICAgICAgICAgICApCi0KLSAgICAgICAgICAgIGlmIHNlbGYuaXNfZGlzY29ubmVjdGVk KHBlKToKLSAgICAgICAgICAgICAgICByYWlzZSBDb25uZWN0aW9uTG9zdCgKLSAgICAgICAgICAg ICAgICAgICAgc2VsZi5tYW5hZ2VyLnNpZCwKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5kYiwK LSAgICAgICAgICAgICAgICAgICAgTm9uZSBpZiBzZWxmLmNvbm5faWRbMDozXSA9PSB1J0RCOicg ZWxzZSBzZWxmLmNvbm5faWRbNTpdCi0gICAgICAgICAgICAgICAgKQotICAgICAgICAgICAgcmV0 dXJuIEZhbHNlLCBlcnJtc2cKLQotICAgICAgICBzZWxmLl9fYXN5bmNfY3Vyc29yID0gY3VyCi0g ICAgICAgIHNlbGYuX19hc3luY19xdWVyeV9pZCA9IHF1ZXJ5X2lkCi0KLSAgICAgICAgcmV0dXJu IFRydWUsIHJlcwotCi0gICAgZGVmIGV4ZWN1dGVfdm9pZChzZWxmLCBxdWVyeSwgcGFyYW1zPU5v bmUsIGZvcm1hdHRlZF9leGNlcHRpb25fbXNnPUZhbHNlKToKLSAgICAgICAgIiIiCi0gICAgICAg IFRoaXMgZnVuY3Rpb24gZXhlY3V0ZXMgdGhlIGdpdmVuIHF1ZXJ5IHdpdGggbm8gcmVzdWx0Lgot Ci0gICAgICAgIEFyZ3M6Ci0gICAgICAgICAgICBxdWVyeTogU1FMIHF1ZXJ5IHRvIHJ1bi4KLSAg ICAgICAgICAgIHBhcmFtczogZXh0cmEgcGFyYW1ldGVycyB0byB0aGUgZnVuY3Rpb24KLSAgICAg ICAgICAgIGZvcm1hdHRlZF9leGNlcHRpb25fbXNnOiBpZiBUcnVlIHRoZW4gZnVuY3Rpb24gcmV0 dXJuIHRoZQotICAgICAgICAgICAgZm9ybWF0dGVkIGV4Y2VwdGlvbiBtZXNzYWdlCi0gICAgICAg ICIiIgotICAgICAgICBzdGF0dXMsIGN1ciA9IHNlbGYuX19jdXJzb3IoKQotICAgICAgICBzZWxm LnJvd19jb3VudCA9IDAKLQotICAgICAgICBpZiBub3Qgc3RhdHVzOgotICAgICAgICAgICAgcmV0 dXJuIEZhbHNlLCBzdHIoY3VyKQotICAgICAgICBxdWVyeV9pZCA9IHJhbmRvbS5yYW5kaW50KDEs IDk5OTk5OTkpCi0KLSAgICAgICAgY3VycmVudF9hcHAubG9nZ2VyLmxvZygKLSAgICAgICAgICAg IDI1LAotICAgICAgICAgICAgdSJFeGVjdXRlICh2b2lkKSBmb3Igc2VydmVyICN7c2VydmVyX2lk fSAtIHtjb25uX2lkfSAoUXVlcnktaWQ6ICIKLSAgICAgICAgICAgIHUie3F1ZXJ5X2lkfSk6XG57 cXVlcnl9Ii5mb3JtYXQoCi0gICAgICAgICAgICAgICAgc2VydmVyX2lkPXNlbGYubWFuYWdlci5z aWQsCi0gICAgICAgICAgICAgICAgY29ubl9pZD1zZWxmLmNvbm5faWQsCi0gICAgICAgICAgICAg ICAgcXVlcnk9cXVlcnksCi0gICAgICAgICAgICAgICAgcXVlcnlfaWQ9cXVlcnlfaWQKLSAgICAg ICAgICAgICkKLSAgICAgICAgKQotCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIHNlbGYuX19p bnRlcm5hbF9ibG9ja2luZ19leGVjdXRlKGN1ciwgcXVlcnksIHBhcmFtcykKLSAgICAgICAgZXhj ZXB0IHBzeWNvcGcyLkVycm9yIGFzIHBlOgotICAgICAgICAgICAgY3VyLmNsb3NlKCkKLSAgICAg ICAgICAgIGlmIG5vdCBzZWxmLmNvbm5lY3RlZCgpOgotICAgICAgICAgICAgICAgIGlmIHNlbGYu YXV0b19yZWNvbm5lY3QgYW5kIG5vdCBzZWxmLnJlY29ubmVjdGluZzoKLSAgICAgICAgICAgICAg ICAgICAgcmV0dXJuIHNlbGYuX19hdHRlbXB0X2V4ZWN1dGlvbl9yZWNvbm5lY3QoCi0gICAgICAg ICAgICAgICAgICAgICAgICBzZWxmLmV4ZWN1dGVfdm9pZCwgcXVlcnksIHBhcmFtcywKLSAgICAg ICAgICAgICAgICAgICAgICAgIGZvcm1hdHRlZF9leGNlcHRpb25fbXNnCi0gICAgICAgICAgICAg ICAgICAgICkKLSAgICAgICAgICAgICAgICByYWlzZSBDb25uZWN0aW9uTG9zdCgKLSAgICAgICAg ICAgICAgICAgICAgc2VsZi5tYW5hZ2VyLnNpZCwKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5k YiwKLSAgICAgICAgICAgICAgICAgICAgTm9uZSBpZiBzZWxmLmNvbm5faWRbMDozXSA9PSB1J0RC OicgZWxzZSBzZWxmLmNvbm5faWRbNTpdCi0gICAgICAgICAgICAgICAgKQotICAgICAgICAgICAg ZXJybXNnID0gc2VsZi5fZm9ybWF0dGVkX2V4Y2VwdGlvbl9tc2cocGUsIGZvcm1hdHRlZF9leGNl cHRpb25fbXNnKQotICAgICAgICAgICAgY3VycmVudF9hcHAubG9nZ2VyLmVycm9yKAotICAgICAg ICAgICAgICAgIHUiRmFpbGVkIHRvIGV4ZWN1dGUgcXVlcnkgKGV4ZWN1dGVfdm9pZCkgZm9yIHRo ZSBzZXJ2ZXIgIgotICAgICAgICAgICAgICAgIHUiI3tzZXJ2ZXJfaWR9IC0ge2Nvbm5faWR9KFF1 ZXJ5LWlkOiB7cXVlcnlfaWR9KTpcbiIKLSAgICAgICAgICAgICAgICB1IkVycm9yIE1lc3NhZ2U6 e2Vycm1zZ30iLmZvcm1hdCgKLSAgICAgICAgICAgICAgICAgICAgc2VydmVyX2lkPXNlbGYubWFu YWdlci5zaWQsCi0gICAgICAgICAgICAgICAgICAgIGNvbm5faWQ9c2VsZi5jb25uX2lkLAotICAg ICAgICAgICAgICAgICAgICBxdWVyeT1xdWVyeSwKLSAgICAgICAgICAgICAgICAgICAgZXJybXNn PWVycm1zZywKLSAgICAgICAgICAgICAgICAgICAgcXVlcnlfaWQ9cXVlcnlfaWQKLSAgICAgICAg ICAgICAgICApCi0gICAgICAgICAgICApCi0gICAgICAgICAgICByZXR1cm4gRmFsc2UsIGVycm1z ZwotCi0gICAgICAgIHNlbGYucm93X2NvdW50ID0gY3VyLnJvd2NvdW50Ci0KLSAgICAgICAgcmV0 dXJuIFRydWUsIE5vbmUKLQotICAgIGRlZiBfX2F0dGVtcHRfZXhlY3V0aW9uX3JlY29ubmVjdChz ZWxmLCBmbiwgKmFyZ3MsICoqa3dhcmdzKToKLSAgICAgICAgc2VsZi5yZWNvbm5lY3RpbmcgPSBU cnVlCi0gICAgICAgIHNldGF0dHIoZywgInswfSN7MX0iLmZvcm1hdCgKLSAgICAgICAgICAgIHNl bGYubWFuYWdlci5zaWQsCi0gICAgICAgICAgICBzZWxmLmNvbm5faWQuZW5jb2RlKCd1dGYtOCcp Ci0gICAgICAgICksIE5vbmUpCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIHN0YXR1cywgcmVz ID0gc2VsZi5jb25uZWN0KCkKLSAgICAgICAgICAgIGlmIHN0YXR1czoKLSAgICAgICAgICAgICAg ICBpZiBmbjoKLSAgICAgICAgICAgICAgICAgICAgc3RhdHVzLCByZXMgPSBmbigqYXJncywgKipr d2FyZ3MpCi0gICAgICAgICAgICAgICAgICAgIHNlbGYucmVjb25uZWN0aW5nID0gRmFsc2UKLSAg ICAgICAgICAgICAgICByZXR1cm4gc3RhdHVzLCByZXMKLSAgICAgICAgZXhjZXB0IEV4Y2VwdGlv biBhcyBlOgotICAgICAgICAgICAgY3VycmVudF9hcHAubG9nZ2VyLmV4Y2VwdGlvbihlKQotICAg ICAgICAgICAgc2VsZi5yZWNvbm5lY3RpbmcgPSBGYWxzZQotCi0gICAgICAgICAgICBjdXJyZW50 X2FwcC53YXJuaW5nKAotICAgICAgICAgICAgICAgICJGYWlsZWQgdG8gcmVjb25uZWN0IHRoZSBk YXRhYmFzZSBzZXJ2ZXIgIgotICAgICAgICAgICAgICAgICIoI3tzZXJ2ZXJfaWR9KSIuZm9ybWF0 KAotICAgICAgICAgICAgICAgICAgICBzZXJ2ZXJfaWQ9c2VsZi5tYW5hZ2VyLnNpZCwKLSAgICAg ICAgICAgICAgICAgICAgY29ubl9pZD1zZWxmLmNvbm5faWQKLSAgICAgICAgICAgICAgICApCi0g ICAgICAgICAgICApCi0gICAgICAgIHNlbGYucmVjb25uZWN0aW5nID0gRmFsc2UKLSAgICAgICAg cmFpc2UgQ29ubmVjdGlvbkxvc3QoCi0gICAgICAgICAgICBzZWxmLm1hbmFnZXIuc2lkLAotICAg ICAgICAgICAgc2VsZi5kYiwKLSAgICAgICAgICAgIE5vbmUgaWYgc2VsZi5jb25uX2lkWzA6M10g PT0gdSdEQjonIGVsc2Ugc2VsZi5jb25uX2lkWzU6XQotICAgICAgICApCi0KLSAgICBkZWYgZXhl Y3V0ZV8yZGFycmF5KHNlbGYsIHF1ZXJ5LCBwYXJhbXM9Tm9uZSwKLSAgICAgICAgICAgICAgICAg ICAgICAgIGZvcm1hdHRlZF9leGNlcHRpb25fbXNnPUZhbHNlKToKLSAgICAgICAgc3RhdHVzLCBj dXIgPSBzZWxmLl9fY3Vyc29yKCkKLSAgICAgICAgc2VsZi5yb3dfY291bnQgPSAwCi0KLSAgICAg ICAgaWYgbm90IHN0YXR1czoKLSAgICAgICAgICAgIHJldHVybiBGYWxzZSwgc3RyKGN1cikKLQot ICAgICAgICBxdWVyeV9pZCA9IHJhbmRvbS5yYW5kaW50KDEsIDk5OTk5OTkpCi0gICAgICAgIGN1 cnJlbnRfYXBwLmxvZ2dlci5sb2coCi0gICAgICAgICAgICAyNSwKLSAgICAgICAgICAgIHUiRXhl Y3V0ZSAoMmRhcnJheSkgZm9yIHNlcnZlciAje3NlcnZlcl9pZH0gLSB7Y29ubl9pZH0gIgotICAg ICAgICAgICAgdSIoUXVlcnktaWQ6IHtxdWVyeV9pZH0pOlxue3F1ZXJ5fSIuZm9ybWF0KAotICAg ICAgICAgICAgICAgIHNlcnZlcl9pZD1zZWxmLm1hbmFnZXIuc2lkLAotICAgICAgICAgICAgICAg IGNvbm5faWQ9c2VsZi5jb25uX2lkLAotICAgICAgICAgICAgICAgIHF1ZXJ5PXF1ZXJ5LAotICAg ICAgICAgICAgICAgIHF1ZXJ5X2lkPXF1ZXJ5X2lkCi0gICAgICAgICAgICApCi0gICAgICAgICkK LSAgICAgICAgdHJ5OgotICAgICAgICAgICAgc2VsZi5fX2ludGVybmFsX2Jsb2NraW5nX2V4ZWN1 dGUoY3VyLCBxdWVyeSwgcGFyYW1zKQotICAgICAgICBleGNlcHQgcHN5Y29wZzIuRXJyb3IgYXMg cGU6Ci0gICAgICAgICAgICBjdXIuY2xvc2UoKQotICAgICAgICAgICAgaWYgbm90IHNlbGYuY29u bmVjdGVkKCk6Ci0gICAgICAgICAgICAgICAgaWYgc2VsZi5hdXRvX3JlY29ubmVjdCBhbmQgXAot ICAgICAgICAgICAgICAgICAgICAgICAgbm90IHNlbGYucmVjb25uZWN0aW5nOgotICAgICAgICAg ICAgICAgICAgICByZXR1cm4gc2VsZi5fX2F0dGVtcHRfZXhlY3V0aW9uX3JlY29ubmVjdCgKLSAg ICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZXhlY3V0ZV8yZGFycmF5LCBxdWVyeSwgcGFyYW1z LAotICAgICAgICAgICAgICAgICAgICAgICAgZm9ybWF0dGVkX2V4Y2VwdGlvbl9tc2cKLSAgICAg ICAgICAgICAgICAgICAgKQotICAgICAgICAgICAgZXJybXNnID0gc2VsZi5fZm9ybWF0dGVkX2V4 Y2VwdGlvbl9tc2cocGUsIGZvcm1hdHRlZF9leGNlcHRpb25fbXNnKQotICAgICAgICAgICAgY3Vy cmVudF9hcHAubG9nZ2VyLmVycm9yKAotICAgICAgICAgICAgICAgIHUiRmFpbGVkIHRvIGV4ZWN1 dGUgcXVlcnkgKGV4ZWN1dGVfMmRhcnJheSkgZm9yIHRoZSBzZXJ2ZXIgIgotICAgICAgICAgICAg ICAgIHUiI3tzZXJ2ZXJfaWR9IC0ge2Nvbm5faWR9IChRdWVyeS1pZDoge3F1ZXJ5X2lkfSk6XG4i Ci0gICAgICAgICAgICAgICAgdSJFcnJvciBNZXNzYWdlOntlcnJtc2d9Ii5mb3JtYXQoCi0gICAg ICAgICAgICAgICAgICAgIHNlcnZlcl9pZD1zZWxmLm1hbmFnZXIuc2lkLAotICAgICAgICAgICAg ICAgICAgICBjb25uX2lkPXNlbGYuY29ubl9pZCwKLSAgICAgICAgICAgICAgICAgICAgcXVlcnk9 cXVlcnksCi0gICAgICAgICAgICAgICAgICAgIGVycm1zZz1lcnJtc2csCi0gICAgICAgICAgICAg ICAgICAgIHF1ZXJ5X2lkPXF1ZXJ5X2lkCi0gICAgICAgICAgICAgICAgKQotICAgICAgICAgICAg KQotICAgICAgICAgICAgcmV0dXJuIEZhbHNlLCBlcnJtc2cKLQotICAgICAgICAjIEdldCBSZXN1 bHRzZXQgQ29sdW1uIE5hbWUsIFR5cGUgYW5kIHNpemUKLSAgICAgICAgY29sdW1ucyA9IGN1ci5k ZXNjcmlwdGlvbiBhbmQgWwotICAgICAgICAgICAgZGVzYy50b19kaWN0KCkgZm9yIGRlc2MgaW4g Y3VyLm9yZGVyZWRfZGVzY3JpcHRpb24oKQotICAgICAgICBdIG9yIFtdCi0KLSAgICAgICAgcm93 cyA9IFtdCi0gICAgICAgIHNlbGYucm93X2NvdW50ID0gY3VyLnJvd2NvdW50Ci0gICAgICAgIGlm IGN1ci5yb3djb3VudCA+IDA6Ci0gICAgICAgICAgICBmb3Igcm93IGluIGN1cjoKLSAgICAgICAg ICAgICAgICByb3dzLmFwcGVuZChyb3cpCi0KLSAgICAgICAgcmV0dXJuIFRydWUsIHsnY29sdW1u cyc6IGNvbHVtbnMsICdyb3dzJzogcm93c30KLQotICAgIGRlZiBleGVjdXRlX2RpY3Qoc2VsZiwg cXVlcnksIHBhcmFtcz1Ob25lLCBmb3JtYXR0ZWRfZXhjZXB0aW9uX21zZz1GYWxzZSk6Ci0gICAg ICAgIHN0YXR1cywgY3VyID0gc2VsZi5fX2N1cnNvcigpCi0gICAgICAgIHNlbGYucm93X2NvdW50 ID0gMAotCi0gICAgICAgIGlmIG5vdCBzdGF0dXM6Ci0gICAgICAgICAgICByZXR1cm4gRmFsc2Us IHN0cihjdXIpCi0gICAgICAgIHF1ZXJ5X2lkID0gcmFuZG9tLnJhbmRpbnQoMSwgOTk5OTk5OSkK LSAgICAgICAgY3VycmVudF9hcHAubG9nZ2VyLmxvZygKLSAgICAgICAgICAgIDI1LAotICAgICAg ICAgICAgdSJFeGVjdXRlIChkaWN0KSBmb3Igc2VydmVyICN7c2VydmVyX2lkfSAtIHtjb25uX2lk fSAoUXVlcnktaWQ6ICIKLSAgICAgICAgICAgIHUie3F1ZXJ5X2lkfSk6XG57cXVlcnl9Ii5mb3Jt YXQoCi0gICAgICAgICAgICAgICAgc2VydmVyX2lkPXNlbGYubWFuYWdlci5zaWQsCi0gICAgICAg ICAgICAgICAgY29ubl9pZD1zZWxmLmNvbm5faWQsCi0gICAgICAgICAgICAgICAgcXVlcnk9cXVl cnksCi0gICAgICAgICAgICAgICAgcXVlcnlfaWQ9cXVlcnlfaWQKLSAgICAgICAgICAgICkKLSAg ICAgICAgKQotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBzZWxmLl9faW50ZXJuYWxfYmxvY2tp bmdfZXhlY3V0ZShjdXIsIHF1ZXJ5LCBwYXJhbXMpCi0gICAgICAgIGV4Y2VwdCBwc3ljb3BnMi5F cnJvciBhcyBwZToKLSAgICAgICAgICAgIGN1ci5jbG9zZSgpCi0gICAgICAgICAgICBpZiBub3Qg c2VsZi5jb25uZWN0ZWQoKToKLSAgICAgICAgICAgICAgICBpZiBzZWxmLmF1dG9fcmVjb25uZWN0 IGFuZCBub3Qgc2VsZi5yZWNvbm5lY3Rpbmc6Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBz ZWxmLl9fYXR0ZW1wdF9leGVjdXRpb25fcmVjb25uZWN0KAotICAgICAgICAgICAgICAgICAgICAg ICAgc2VsZi5leGVjdXRlX2RpY3QsIHF1ZXJ5LCBwYXJhbXMsCi0gICAgICAgICAgICAgICAgICAg ICAgICBmb3JtYXR0ZWRfZXhjZXB0aW9uX21zZwotICAgICAgICAgICAgICAgICAgICApCi0gICAg ICAgICAgICAgICAgcmFpc2UgQ29ubmVjdGlvbkxvc3QoCi0gICAgICAgICAgICAgICAgICAgIHNl bGYubWFuYWdlci5zaWQsCi0gICAgICAgICAgICAgICAgICAgIHNlbGYuZGIsCi0gICAgICAgICAg ICAgICAgICAgIE5vbmUgaWYgc2VsZi5jb25uX2lkWzA6M10gPT0gdSdEQjonIGVsc2Ugc2VsZi5j b25uX2lkWzU6XQotICAgICAgICAgICAgICAgICkKLSAgICAgICAgICAgIGVycm1zZyA9IHNlbGYu X2Zvcm1hdHRlZF9leGNlcHRpb25fbXNnKHBlLCBmb3JtYXR0ZWRfZXhjZXB0aW9uX21zZykKLSAg ICAgICAgICAgIGN1cnJlbnRfYXBwLmxvZ2dlci5lcnJvcigKLSAgICAgICAgICAgICAgICB1IkZh aWxlZCB0byBleGVjdXRlIHF1ZXJ5IChleGVjdXRlX2RpY3QpIGZvciB0aGUgc2VydmVyICIKLSAg ICAgICAgICAgICAgICB1IiN7c2VydmVyX2lkfS0ge2Nvbm5faWR9IChRdWVyeS1pZDoge3F1ZXJ5 X2lkfSk6XG4iCi0gICAgICAgICAgICAgICAgdSJFcnJvciBNZXNzYWdlOntlcnJtc2d9Ii5mb3Jt YXQoCi0gICAgICAgICAgICAgICAgICAgIHNlcnZlcl9pZD1zZWxmLm1hbmFnZXIuc2lkLAotICAg ICAgICAgICAgICAgICAgICBjb25uX2lkPXNlbGYuY29ubl9pZCwKLSAgICAgICAgICAgICAgICAg ICAgcXVlcnlfaWQ9cXVlcnlfaWQsCi0gICAgICAgICAgICAgICAgICAgIGVycm1zZz1lcnJtc2cK LSAgICAgICAgICAgICAgICApCi0gICAgICAgICAgICApCi0gICAgICAgICAgICByZXR1cm4gRmFs c2UsIGVycm1zZwotCi0gICAgICAgICMgR2V0IFJlc3VsdHNldCBDb2x1bW4gTmFtZSwgVHlwZSBh bmQgc2l6ZQotICAgICAgICBjb2x1bW5zID0gY3VyLmRlc2NyaXB0aW9uIGFuZCBbCi0gICAgICAg ICAgICBkZXNjLnRvX2RpY3QoKSBmb3IgZGVzYyBpbiBjdXIub3JkZXJlZF9kZXNjcmlwdGlvbigp Ci0gICAgICAgIF0gb3IgW10KLQotICAgICAgICByb3dzID0gW10KLSAgICAgICAgc2VsZi5yb3df Y291bnQgPSBjdXIucm93Y291bnQKLSAgICAgICAgaWYgY3VyLnJvd2NvdW50ID4gMDoKLSAgICAg ICAgICAgIGZvciByb3cgaW4gY3VyOgotICAgICAgICAgICAgICAgIHJvd3MuYXBwZW5kKGRpY3Qo cm93KSkKLQotICAgICAgICByZXR1cm4gVHJ1ZSwgeydjb2x1bW5zJzogY29sdW1ucywgJ3Jvd3Mn OiByb3dzfQotCi0gICAgZGVmIGFzeW5jX2ZldGNobWFueV8yZGFycmF5KHNlbGYsIHJlY29yZHM9 MjAwMCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybWF0dGVkX2V4Y2VwdGlv bl9tc2c9RmFsc2UpOgotICAgICAgICAiIiIKLSAgICAgICAgVXNlciBzaG91bGQgcG9sbCBhbmQg Y2hlY2sgaWYgc3RhdHVzIGlzIEFTWU5DX09LIGJlZm9yZSBjYWxsaW5nIHRoaXMKLSAgICAgICAg ZnVuY3Rpb24KLSAgICAgICAgQXJnczoKLSAgICAgICAgICByZWNvcmRzOiBubyBvZiByZWNvcmRz IHRvIGZldGNoLiB1c2UgLTEgdG8gZmV0Y2hhbGwuCi0gICAgICAgICAgZm9ybWF0dGVkX2V4Y2Vw dGlvbl9tc2c6Ci0KLSAgICAgICAgUmV0dXJuczoKLQotICAgICAgICAiIiIKLSAgICAgICAgY3Vy ID0gc2VsZi5fX2FzeW5jX2N1cnNvcgotICAgICAgICBpZiBub3QgY3VyOgotICAgICAgICAgICAg cmV0dXJuIEZhbHNlLCBnZXR0ZXh0KAotICAgICAgICAgICAgICAgICJDdXJzb3IgY291bGQgbm90 IGJlIGZvdW5kIGZvciB0aGUgYXN5bmMgY29ubmVjdGlvbi4iCi0gICAgICAgICAgICApCi0KLSAg ICAgICAgaWYgc2VsZi5jb25uLmlzZXhlY3V0aW5nKCk6Ci0gICAgICAgICAgICByZXR1cm4gRmFs c2UsIGdldHRleHQoCi0gICAgICAgICAgICAgICAgIkFzeW5jaHJvbm91cyBxdWVyeSBleGVjdXRp b24vb3BlcmF0aW9uIHVuZGVyd2F5LiIKLSAgICAgICAgICAgICkKLQotICAgICAgICBpZiBzZWxm LnJvd19jb3VudCA+IDA6Ci0gICAgICAgICAgICByZXN1bHQgPSBbXQotICAgICAgICAgICAgIyBG b3IgRERMIG9wZXJhdGlvbiwgd2UgbWF5IG5vdCBoYXZlIHJlc3VsdC4KLSAgICAgICAgICAgICMK LSAgICAgICAgICAgICMgQmVjYXVzZSAtIHRoZXJlIGlzIG5vdCBkaXJlY3Qgd2F5IHRvIGRpZmZl cmVudGlhdGUgRE1MIGFuZAotICAgICAgICAgICAgIyBEREwgb3BlcmF0aW9ucywgd2UgbmVlZCB0 byByZWx5IG9uIGV4Y2VwdGlvbiB0byBmaWd1cmUKLSAgICAgICAgICAgICMgdGhhdCBvdXQgYXQg dGhlIG1vbWVudC4KLSAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICBpZiByZWNvcmRz ID09IC0xOgotICAgICAgICAgICAgICAgICAgICByZXMgPSBjdXIuZmV0Y2hhbGwoKQotICAgICAg ICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAgIHJlcyA9IGN1ci5mZXRjaG1hbnko cmVjb3JkcykKLSAgICAgICAgICAgICAgICBmb3Igcm93IGluIHJlczoKLSAgICAgICAgICAgICAg ICAgICAgbmV3X3JvdyA9IFtdCi0gICAgICAgICAgICAgICAgICAgIGZvciBjb2wgaW4gc2VsZi5j b2x1bW5faW5mbzoKLSAgICAgICAgICAgICAgICAgICAgICAgIG5ld19yb3cuYXBwZW5kKHJvd1tj b2xbJ25hbWUnXV0pCi0gICAgICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQobmV3X3JvdykK LSAgICAgICAgICAgIGV4Y2VwdCBwc3ljb3BnMi5Qcm9ncmFtbWluZ0Vycm9yIGFzIGU6Ci0gICAg ICAgICAgICAgICAgcmVzdWx0ID0gTm9uZQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgIyBV c2VyIHBlcmZvcm1lZCBvcGVyYXRpb24gd2hpY2ggZG9zZSBub3QgcHJvZHVjZSByZWNvcmQvcyBh cwotICAgICAgICAgICAgIyByZXN1bHQuCi0gICAgICAgICAgICAjIGZvciBlZy4gRERMIG9wZXJh dGlvbnMuCi0gICAgICAgICAgICByZXR1cm4gVHJ1ZSwgTm9uZQotCi0gICAgICAgIHJldHVybiBU cnVlLCByZXN1bHQKLQotICAgIGRlZiBjb25uZWN0ZWQoc2VsZik6Ci0gICAgICAgIGlmIHNlbGYu Y29ubjoKLSAgICAgICAgICAgIGlmIG5vdCBzZWxmLmNvbm4uY2xvc2VkOgotICAgICAgICAgICAg ICAgIHJldHVybiBUcnVlCi0gICAgICAgICAgICBzZWxmLmNvbm4gPSBOb25lCi0gICAgICAgIHJl dHVybiBGYWxzZQotCi0gICAgZGVmIHJlc2V0KHNlbGYpOgotICAgICAgICBpZiBzZWxmLmNvbm46 Ci0gICAgICAgICAgICBpZiBzZWxmLmNvbm4uY2xvc2VkOgotICAgICAgICAgICAgICAgIHNlbGYu Y29ubiA9IE5vbmUKLSAgICAgICAgcGdfY29ubiA9IE5vbmUKLSAgICAgICAgbWdyID0gc2VsZi5t YW5hZ2VyCi0KLSAgICAgICAgcGFzc3dvcmQgPSBnZXRhdHRyKG1nciwgJ3Bhc3N3b3JkJywgTm9u ZSkKLQotICAgICAgICBpZiBwYXNzd29yZDoKLSAgICAgICAgICAgICMgRmV0Y2ggTG9nZ2VkIGlu IFVzZXIgRGV0YWlscy4KLSAgICAgICAgICAgIHVzZXIgPSBVc2VyLnF1ZXJ5LmZpbHRlcl9ieShp ZD1jdXJyZW50X3VzZXIuaWQpLmZpcnN0KCkKLQotICAgICAgICAgICAgaWYgdXNlciBpcyBOb25l OgotICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZSwgZ2V0dGV4dCgiVW5hdXRob3JpemVkIHJl cXVlc3QuIikKLQotICAgICAgICAgICAgcGFzc3dvcmQgPSBkZWNyeXB0KHBhc3N3b3JkLCB1c2Vy LnBhc3N3b3JkKS5kZWNvZGUoKQotCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIHBnX2Nvbm4g PSBwc3ljb3BnMi5jb25uZWN0KAotICAgICAgICAgICAgICAgIGhvc3Q9bWdyLmhvc3QsCi0gICAg ICAgICAgICAgICAgaG9zdGFkZHI9bWdyLmhvc3RhZGRyLAotICAgICAgICAgICAgICAgIHBvcnQ9 bWdyLnBvcnQsCi0gICAgICAgICAgICAgICAgZGF0YWJhc2U9c2VsZi5kYiwKLSAgICAgICAgICAg ICAgICB1c2VyPW1nci51c2VyLAotICAgICAgICAgICAgICAgIHBhc3N3b3JkPXBhc3N3b3JkLAot ICAgICAgICAgICAgICAgIHBhc3NmaWxlPWdldF9jb21wbGV0ZV9maWxlX3BhdGgobWdyLnBhc3Nm aWxlKSwKLSAgICAgICAgICAgICAgICBzc2xtb2RlPW1nci5zc2xfbW9kZSwKLSAgICAgICAgICAg ICAgICBzc2xjZXJ0PWdldF9jb21wbGV0ZV9maWxlX3BhdGgobWdyLnNzbGNlcnQpLAotICAgICAg ICAgICAgICAgIHNzbGtleT1nZXRfY29tcGxldGVfZmlsZV9wYXRoKG1nci5zc2xrZXkpLAotICAg ICAgICAgICAgICAgIHNzbHJvb3RjZXJ0PWdldF9jb21wbGV0ZV9maWxlX3BhdGgobWdyLnNzbHJv b3RjZXJ0KSwKLSAgICAgICAgICAgICAgICBzc2xjcmw9Z2V0X2NvbXBsZXRlX2ZpbGVfcGF0aCht Z3Iuc3NsY3JsKSwKLSAgICAgICAgICAgICAgICBzc2xjb21wcmVzc2lvbj1UcnVlIGlmIG1nci5z c2xjb21wcmVzc2lvbiBlbHNlIEZhbHNlCi0gICAgICAgICAgICApCi0KLSAgICAgICAgZXhjZXB0 IHBzeWNvcGcyLkVycm9yIGFzIGU6Ci0gICAgICAgICAgICBtc2cgPSBlLnBnZXJyb3IgaWYgZS5w Z2Vycm9yIGVsc2UgZS5tZXNzYWdlIFwKLSAgICAgICAgICAgICAgICBpZiBlLm1lc3NhZ2UgZWxz ZSBlLmRpYWcubWVzc2FnZV9kZXRhaWwgXAotICAgICAgICAgICAgICAgIGlmIGUuZGlhZy5tZXNz YWdlX2RldGFpbCBlbHNlIHN0cihlKQotCi0gICAgICAgICAgICBjdXJyZW50X2FwcC5sb2dnZXIu ZXJyb3IoCi0gICAgICAgICAgICAgICAgZ2V0dGV4dCgKLSAgICAgICAgICAgICAgICAgICAgIiIi Ci1GYWlsZWQgdG8gcmVzZXQgdGhlIGNvbm5lY3Rpb24gdG8gdGhlIHNlcnZlciBkdWUgdG8gZm9s bG93aW5nIGVycm9yOgotezB9IiIiCi0gICAgICAgICAgICAgICAgKS5Gb3JtYXQobXNnKQotICAg ICAgICAgICAgKQotICAgICAgICAgICAgcmV0dXJuIEZhbHNlLCBtc2cKLQotICAgICAgICBwZ19j b25uLm5vdGljZXMgPSBkZXF1ZShbXSwgc2VsZi5BU1lOQ19OT1RJQ0VfTUFYTEVOR1RIKQotICAg ICAgICBzZWxmLmNvbm4gPSBwZ19jb25uCi0gICAgICAgIHNlbGYuX19iYWNrZW5kX3BpZCA9IHBn X2Nvbm4uZ2V0X2JhY2tlbmRfcGlkKCkKLQotICAgICAgICByZXR1cm4gVHJ1ZSwgTm9uZQotCi0g ICAgZGVmIHRyYW5zYWN0aW9uX3N0YXR1cyhzZWxmKToKLSAgICAgICAgaWYgc2VsZi5jb25uOgot ICAgICAgICAgICAgcmV0dXJuIHNlbGYuY29ubi5nZXRfdHJhbnNhY3Rpb25fc3RhdHVzKCkKLSAg ICAgICAgcmV0dXJuIE5vbmUKLQotICAgIGRlZiBwaW5nKHNlbGYpOgotICAgICAgICByZXR1cm4g c2VsZi5leGVjdXRlX3NjYWxhcignU0VMRUNUIDEnKQotCi0gICAgZGVmIF9yZWxlYXNlKHNlbGYp OgotICAgICAgICBpZiBzZWxmLndhc0Nvbm5lY3RlZDoKLSAgICAgICAgICAgIGlmIHNlbGYuY29u bjoKLSAgICAgICAgICAgICAgICBzZWxmLmNvbm4uY2xvc2UoKQotICAgICAgICAgICAgICAgIHNl bGYuY29ubiA9IE5vbmUKLSAgICAgICAgICAgIHNlbGYucGFzc3dvcmQgPSBOb25lCi0gICAgICAg ICAgICBzZWxmLndhc0Nvbm5lY3RlZCA9IEZhbHNlCi0KLSAgICBkZWYgX3dhaXQoc2VsZiwgY29u bik6Ci0gICAgICAgICIiIgotICAgICAgICBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgZm9yIHRoZSBh c3luY2hyb25vdXMgY29ubmVjdGlvbiwKLSAgICAgICAgaXQgd2lsbCBjYWxsIHBvbGwgbWV0aG9k IGluIGEgaW5maW5pdGUgbG9vcCB0aWxsIHBvbGwKLSAgICAgICAgcmV0dXJucyBwc3ljb3BnMi5l eHRlbnNpb25zLlBPTExfT0suIFRoaXMgaXMgYSBibG9ja2luZwotICAgICAgICBjYWxsLgotCi0g ICAgICAgIEFyZ3M6Ci0gICAgICAgICAgICBjb25uOiBjb25uZWN0aW9uIG9iamVjdAotICAgICAg ICAiIiIKLQotICAgICAgICB3aGlsZSAxOgotICAgICAgICAgICAgc3RhdGUgPSBjb25uLnBvbGwo KQotICAgICAgICAgICAgaWYgc3RhdGUgPT0gcHN5Y29wZzIuZXh0ZW5zaW9ucy5QT0xMX09LOgot ICAgICAgICAgICAgICAgIGJyZWFrCi0gICAgICAgICAgICBlbGlmIHN0YXRlID09IHBzeWNvcGcy LmV4dGVuc2lvbnMuUE9MTF9XUklURToKLSAgICAgICAgICAgICAgICBzZWxlY3Quc2VsZWN0KFtd LCBbY29ubi5maWxlbm8oKV0sIFtdKQotICAgICAgICAgICAgZWxpZiBzdGF0ZSA9PSBwc3ljb3Bn Mi5leHRlbnNpb25zLlBPTExfUkVBRDoKLSAgICAgICAgICAgICAgICBzZWxlY3Quc2VsZWN0KFtj b25uLmZpbGVubygpXSwgW10sIFtdKQotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAg ICByYWlzZSBwc3ljb3BnMi5PcGVyYXRpb25hbEVycm9yKAotICAgICAgICAgICAgICAgICAgICAi cG9sbCgpIHJldHVybmVkICVzIGZyb20gX3dhaXQgZnVuY3Rpb24iICUgc3RhdGUpCi0KLSAgICBk ZWYgX3dhaXRfdGltZW91dChzZWxmLCBjb25uKToKLSAgICAgICAgIiIiCi0gICAgICAgIFRoaXMg ZnVuY3Rpb24gaXMgdXNlZCBmb3IgdGhlIGFzeW5jaHJvbm91cyBjb25uZWN0aW9uLAotICAgICAg ICBpdCB3aWxsIGNhbGwgcG9sbCBtZXRob2QgYW5kIHJldHVybiB0aGUgc3RhdHVzLiBJZiBzdGF0 ZSBpcwotICAgICAgICBwc3ljb3BnMi5leHRlbnNpb25zLlBPTExfV1JJVEUgYW5kIHBzeWNvcGcy LmV4dGVuc2lvbnMuUE9MTF9SRUFECi0gICAgICAgIGZ1bmN0aW9uIHdpbGwgd2FpdCBmb3IgdGhl IGdpdmVuIHRpbWVvdXQuVGhpcyBpcyBub3QgYSBibG9ja2luZyBjYWxsLgotCi0gICAgICAgIEFy Z3M6Ci0gICAgICAgICAgICBjb25uOiBjb25uZWN0aW9uIG9iamVjdAotICAgICAgICAiIiIKLSAg ICAgICAgd2hpbGUgMToKLSAgICAgICAgICAgIHN0YXRlID0gY29ubi5wb2xsKCkKLSAgICAgICAg ICAgIGlmIHN0YXRlID09IHBzeWNvcGcyLmV4dGVuc2lvbnMuUE9MTF9PSzoKLSAgICAgICAgICAg ICAgICByZXR1cm4gc2VsZi5BU1lOQ19PSwotICAgICAgICAgICAgZWxpZiBzdGF0ZSA9PSBwc3lj b3BnMi5leHRlbnNpb25zLlBPTExfV1JJVEU6Ci0gICAgICAgICAgICAgICAgIyBXYWl0IGZvciB0 aGUgZ2l2ZW4gdGltZSBhbmQgdGhlbiBjaGVjayB0aGUgcmV0dXJuIHN0YXR1cwotICAgICAgICAg ICAgICAgICMgSWYgdGhyZWUgZW1wdHkgbGlzdHMgYXJlIHJldHVybmVkIHRoZW4gdGhlIHRpbWUt b3V0IGlzCi0gICAgICAgICAgICAgICAgIyByZWFjaGVkLgotICAgICAgICAgICAgICAgIHRpbWVv dXRfc3RhdHVzID0gc2VsZWN0LnNlbGVjdChbXSwgW2Nvbm4uZmlsZW5vKCldLCBbXSwKLSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5BU1lOQ19USU1F T1VUKQotICAgICAgICAgICAgICAgIGlmIHRpbWVvdXRfc3RhdHVzID09IChbXSwgW10sIFtdKToK LSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuQVNZTkNfV1JJVEVfVElNRU9VVAotICAg ICAgICAgICAgZWxpZiBzdGF0ZSA9PSBwc3ljb3BnMi5leHRlbnNpb25zLlBPTExfUkVBRDoKLSAg ICAgICAgICAgICAgICAjIFdhaXQgZm9yIHRoZSBnaXZlbiB0aW1lIGFuZCB0aGVuIGNoZWNrIHRo ZSByZXR1cm4gc3RhdHVzCi0gICAgICAgICAgICAgICAgIyBJZiB0aHJlZSBlbXB0eSBsaXN0cyBh cmUgcmV0dXJuZWQgdGhlbiB0aGUgdGltZS1vdXQgaXMKLSAgICAgICAgICAgICAgICAjIHJlYWNo ZWQuCi0gICAgICAgICAgICAgICAgdGltZW91dF9zdGF0dXMgPSBzZWxlY3Quc2VsZWN0KFtjb25u LmZpbGVubygpXSwgW10sIFtdLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBzZWxmLkFTWU5DX1RJTUVPVVQpCi0gICAgICAgICAgICAgICAgaWYgdGltZW91 dF9zdGF0dXMgPT0gKFtdLCBbXSwgW10pOgotICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2Vs Zi5BU1lOQ19SRUFEX1RJTUVPVVQKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAg cmFpc2UgcHN5Y29wZzIuT3BlcmF0aW9uYWxFcnJvcigKLSAgICAgICAgICAgICAgICAgICAgInBv bGwoKSByZXR1cm5lZCAlcyBmcm9tIF93YWl0X3RpbWVvdXQgZnVuY3Rpb24iICUgc3RhdGUKLSAg ICAgICAgICAgICAgICApCi0KLSAgICBkZWYgcG9sbChzZWxmLCBmb3JtYXR0ZWRfZXhjZXB0aW9u X21zZz1GYWxzZSwgbm9fcmVzdWx0PUZhbHNlKToKLSAgICAgICAgIiIiCi0gICAgICAgIFRoaXMg ZnVuY3Rpb24gaXMgYSB3cmFwcGVyIGFyb3VuZCBjb25uZWN0aW9uJ3MgcG9sbCBmdW5jdGlvbi4K LSAgICAgICAgSXQgaW50ZXJuYWxseSB1c2VzIHRoZSBfd2FpdF90aW1lb3V0IG1ldGhvZCB0byBw b2xsIHRoZQotICAgICAgICByZXN1bHQgb24gdGhlIGNvbm5lY3Rpb24gb2JqZWN0LiBJbiBjYXNl IG9mIHN1Y2Nlc3MgaXQKLSAgICAgICAgcmV0dXJucyB0aGUgcmVzdWx0IG9mIHRoZSBxdWVyeS4K LQotICAgICAgICBBcmdzOgotICAgICAgICAgICAgZm9ybWF0dGVkX2V4Y2VwdGlvbl9tc2c6IGlm IFRydWUgdGhlbiBmdW5jdGlvbiByZXR1cm4gdGhlIGZvcm1hdHRlZAotICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGV4Y2VwdGlvbiBtZXNzYWdlLCBvdGhlcndpc2UgZXJyb3Ig c3RyaW5nLgotICAgICAgICAgICAgbm9fcmVzdWx0OiBJZiBUcnVlIHRoZW4gb25seSBwb2xsIHN0 YXR1cyB3aWxsIGJlIHJldHVybmVkLgotICAgICAgICAiIiIKLQotICAgICAgICBjdXIgPSBzZWxm Ll9fYXN5bmNfY3Vyc29yCi0gICAgICAgIGlmIG5vdCBjdXI6Ci0gICAgICAgICAgICByZXR1cm4g RmFsc2UsIGdldHRleHQoCi0gICAgICAgICAgICAgICAgIkN1cnNvciBjb3VsZCBub3QgYmUgZm91 bmQgZm9yIHRoZSBhc3luYyBjb25uZWN0aW9uLiIKLSAgICAgICAgICAgICkKLQotICAgICAgICBj dXJyZW50X2FwcC5sb2dnZXIubG9nKAotICAgICAgICAgICAgMjUsCi0gICAgICAgICAgICAiUG9s bGluZyByZXN1bHQgZm9yIChRdWVyeS1pZDoge3F1ZXJ5X2lkfSkiLmZvcm1hdCgKLSAgICAgICAg ICAgICAgICBxdWVyeV9pZD1zZWxmLl9fYXN5bmNfcXVlcnlfaWQKLSAgICAgICAgICAgICkKLSAg ICAgICAgKQotCi0gICAgICAgIGlzX2Vycm9yID0gRmFsc2UKLSAgICAgICAgdHJ5OgotICAgICAg ICAgICAgc3RhdHVzID0gc2VsZi5fd2FpdF90aW1lb3V0KHNlbGYuY29ubikKLSAgICAgICAgZXhj ZXB0IHBzeWNvcGcyLkVycm9yIGFzIHBlOgotICAgICAgICAgICAgaWYgc2VsZi5jb25uLmNsb3Nl ZDoKLSAgICAgICAgICAgICAgICByYWlzZSBDb25uZWN0aW9uTG9zdCgKLSAgICAgICAgICAgICAg ICAgICAgc2VsZi5tYW5hZ2VyLnNpZCwKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5kYiwKLSAg ICAgICAgICAgICAgICAgICAgc2VsZi5jb25uX2lkWzU6XQotICAgICAgICAgICAgICAgICkKLSAg ICAgICAgICAgIGVycm1zZyA9IHNlbGYuX2Zvcm1hdHRlZF9leGNlcHRpb25fbXNnKHBlLCBmb3Jt YXR0ZWRfZXhjZXB0aW9uX21zZykKLSAgICAgICAgICAgIGlzX2Vycm9yID0gVHJ1ZQotCi0gICAg ICAgIGlmIHNlbGYuY29ubi5ub3RpY2VzIGFuZCBzZWxmLl9fbm90aWNlcyBpcyBub3QgTm9uZToK LSAgICAgICAgICAgIHNlbGYuX19ub3RpY2VzLmV4dGVuZChzZWxmLmNvbm4ubm90aWNlcykKLSAg ICAgICAgICAgIHNlbGYuY29ubi5ub3RpY2VzLmNsZWFyKCkKLQotICAgICAgICAjIFdlIGFsc28g bmVlZCB0byBmZXRjaCBub3RpY2VzIGJlZm9yZSB3ZSByZXR1cm4gZnJvbSBmdW5jdGlvbiBpbiBj YXNlCi0gICAgICAgICMgb2YgYW55IEV4Y2VwdGlvbiwgVG8gYXZvaWQgY29kZSBkdXBsaWNhdGlv biB3ZSB3aWxsIHJldHVybiBhZnRlcgotICAgICAgICAjIGZldGNoaW5nIHRoZSBub3RpY2VzIGlu IGNhc2Ugb2YgYW55IEV4Y2VwdGlvbgotICAgICAgICBpZiBpc19lcnJvcjoKLSAgICAgICAgICAg IHJldHVybiBGYWxzZSwgZXJybXNnCi0KLSAgICAgICAgcmVzdWx0ID0gTm9uZQotICAgICAgICBz ZWxmLnJvd19jb3VudCA9IDAKLSAgICAgICAgc2VsZi5jb2x1bW5faW5mbyA9IE5vbmUKLQotICAg ICAgICBpZiBzdGF0dXMgPT0gc2VsZi5BU1lOQ19PSzoKLQotICAgICAgICAgICAgIyBpZiB1c2Vy IGhhcyBjYW5jZWxsZWQgdGhlIHRyYW5zYWN0aW9uIHRoZW4gY2hhbmdlZCB0aGUgc3RhdHVzCi0g ICAgICAgICAgICBpZiBzZWxmLmV4ZWN1dGlvbl9hYm9ydGVkOgotICAgICAgICAgICAgICAgIHN0 YXR1cyA9IHNlbGYuQVNZTkNfRVhFQ1VUSU9OX0FCT1JURUQKLSAgICAgICAgICAgICAgICBzZWxm LmV4ZWN1dGlvbl9hYm9ydGVkID0gRmFsc2UKLSAgICAgICAgICAgICAgICByZXR1cm4gc3RhdHVz LCByZXN1bHQKLQotICAgICAgICAgICAgIyBGZXRjaCB0aGUgY29sdW1uIGluZm9ybWF0aW9uCi0g ICAgICAgICAgICBpZiBjdXIuZGVzY3JpcHRpb24gaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICAg ICAgc2VsZi5jb2x1bW5faW5mbyA9IFsKLSAgICAgICAgICAgICAgICAgICAgZGVzYy50b19kaWN0 KCkgZm9yIGRlc2MgaW4gY3VyLm9yZGVyZWRfZGVzY3JpcHRpb24oKQotICAgICAgICAgICAgICAg IF0KLQotICAgICAgICAgICAgICAgIHBvcyA9IDAKLSAgICAgICAgICAgICAgICBmb3IgY29sIGlu IHNlbGYuY29sdW1uX2luZm86Ci0gICAgICAgICAgICAgICAgICAgIGNvbFsncG9zJ10gPSBwb3MK LSAgICAgICAgICAgICAgICAgICAgcG9zICs9IDEKLQotICAgICAgICAgICAgc2VsZi5yb3dfY291 bnQgPSBjdXIucm93Y291bnQKLSAgICAgICAgICAgIGlmIG5vdCBub19yZXN1bHQ6Ci0gICAgICAg ICAgICAgICAgaWYgY3VyLnJvd2NvdW50ID4gMDoKLSAgICAgICAgICAgICAgICAgICAgcmVzdWx0 ID0gW10KLSAgICAgICAgICAgICAgICAgICAgIyBGb3IgRERMIG9wZXJhdGlvbiwgd2UgbWF5IG5v dCBoYXZlIHJlc3VsdC4KLSAgICAgICAgICAgICAgICAgICAgIwotICAgICAgICAgICAgICAgICAg ICAjIEJlY2F1c2UgLSB0aGVyZSBpcyBub3QgZGlyZWN0IHdheSB0byBkaWZmZXJlbnRpYXRlIERN TAotICAgICAgICAgICAgICAgICAgICAjIGFuZCBEREwgb3BlcmF0aW9ucywgd2UgbmVlZCB0byBy ZWx5IG9uIGV4Y2VwdGlvbiB0bwotICAgICAgICAgICAgICAgICAgICAjIGZpZ3VyZSB0aGF0IG91 dCBhdCB0aGUgbW9tZW50LgotICAgICAgICAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAg ICAgICAgICAgICBmb3Igcm93IGluIGN1cjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBu ZXdfcm93ID0gW10KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgY29sIGluIHNlbGYu Y29sdW1uX2luZm86Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld19yb3cuYXBw ZW5kKHJvd1tjb2xbJ25hbWUnXV0pCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0 LmFwcGVuZChuZXdfcm93KQotCi0gICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBwc3ljb3BnMi5Q cm9ncmFtbWluZ0Vycm9yOgotICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gTm9uZQot Ci0gICAgICAgIHJldHVybiBzdGF0dXMsIHJlc3VsdAotCi0gICAgZGVmIHN0YXR1c19tZXNzYWdl KHNlbGYpOgotICAgICAgICAiIiIKLSAgICAgICAgVGhpcyBmdW5jdGlvbiB3aWxsIHJldHVybiB0 aGUgc3RhdHVzIG1lc3NhZ2UgcmV0dXJuZWQgYnkgdGhlIGxhc3QKLSAgICAgICAgY29tbWFuZCBl eGVjdXRlZCBvbiB0aGUgc2VydmVyLgotICAgICAgICAiIiIKLSAgICAgICAgY3VyID0gc2VsZi5f X2FzeW5jX2N1cnNvcgotICAgICAgICBpZiBub3QgY3VyOgotICAgICAgICAgICAgcmV0dXJuIGdl dHRleHQoCi0gICAgICAgICAgICAgICAgIkN1cnNvciBjb3VsZCBub3QgYmUgZm91bmQgZm9yIHRo ZSBhc3luYyBjb25uZWN0aW9uLiIKLSAgICAgICAgICAgICkKLQotICAgICAgICBjdXJyZW50X2Fw cC5sb2dnZXIubG9nKAotICAgICAgICAgICAgMjUsCi0gICAgICAgICAgICAiU3RhdHVzIG1lc3Nh Z2UgZm9yIChRdWVyeS1pZDoge3F1ZXJ5X2lkfSkiLmZvcm1hdCgKLSAgICAgICAgICAgICAgICBx dWVyeV9pZD1zZWxmLl9fYXN5bmNfcXVlcnlfaWQKLSAgICAgICAgICAgICkKLSAgICAgICAgKQot Ci0gICAgICAgIHJldHVybiBjdXIuc3RhdHVzbWVzc2FnZQotCi0gICAgZGVmIHJvd3NfYWZmZWN0 ZWQoc2VsZik6Ci0gICAgICAgICIiIgotICAgICAgICBUaGlzIGZ1bmN0aW9uIHdpbGwgcmV0dXJu IHRoZSBubyBvZiByb3dzIGFmZmVjdGVkIGJ5IHRoZSBsYXN0IGNvbW1hbmQKLSAgICAgICAgZXhl Y3V0ZWQgb24gdGhlIHNlcnZlci4KLSAgICAgICAgIiIiCi0KLSAgICAgICAgcmV0dXJuIHNlbGYu cm93X2NvdW50Ci0KLSAgICBkZWYgZ2V0X2NvbHVtbl9pbmZvKHNlbGYpOgotICAgICAgICAiIiIK LSAgICAgICAgVGhpcyBmdW5jdGlvbiB3aWxsIHJldHVybnMgbGlzdCBvZiBjb2x1bW5zIGZvciBs YXN0IGFzeW5jIHNxbCBjb21tYW5kCi0gICAgICAgIGV4ZWN1dGVkIG9uIHRoZSBzZXJ2ZXIuCi0g ICAgICAgICIiIgotCi0gICAgICAgIHJldHVybiBzZWxmLmNvbHVtbl9pbmZvCi0KLSAgICBkZWYg Y2FuY2VsX3RyYW5zYWN0aW9uKHNlbGYsIGNvbm5faWQsIGRpZD1Ob25lKToKLSAgICAgICAgIiIi Ci0gICAgICAgIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byBjYW5jZWwgdGhlIHJ1bm5pbmcgdHJh bnNhY3Rpb24KLSAgICAgICAgb2YgdGhlIGdpdmVuIGNvbm5lY3Rpb24gaWQgYW5kIGRhdGFiYXNl IGlkIHVzaW5nCi0gICAgICAgIFBvc3RncmVTUUwncyBwZ19jYW5jZWxfYmFja2VuZC4KLQotICAg ICAgICBBcmdzOgotICAgICAgICAgICAgY29ubl9pZDogQ29ubmVjdGlvbiBpZAotICAgICAgICAg ICAgZGlkOiBEYXRhYmFzZSBpZCAob3B0aW9uYWwpCi0gICAgICAgICIiIgotICAgICAgICBjYW5j ZWxfY29ubiA9IHNlbGYubWFuYWdlci5jb25uZWN0aW9uKGRpZD1kaWQsIGNvbm5faWQ9Y29ubl9p ZCkKLSAgICAgICAgcXVlcnkgPSAiIiJTRUxFQ1QgcGdfY2FuY2VsX2JhY2tlbmQoezB9KTsiIiIu Zm9ybWF0KAotICAgICAgICAgICAgY2FuY2VsX2Nvbm4uX19iYWNrZW5kX3BpZCkKLQotICAgICAg ICBzdGF0dXMgPSBUcnVlCi0gICAgICAgIG1zZyA9ICcnCi0KLSAgICAgICAgIyBpZiBiYWNrZW5k IHBpZCBpcyBzYW1lIHRoZW4gY3JlYXRlIGEgbmV3IGNvbm5lY3Rpb24KLSAgICAgICAgIyB0byBj YW5jZWwgdGhlIHF1ZXJ5IGFuZCByZWxlYXNlIGl0LgotICAgICAgICBpZiBjYW5jZWxfY29ubi5f X2JhY2tlbmRfcGlkID09IHNlbGYuX19iYWNrZW5kX3BpZDoKLSAgICAgICAgICAgIHBhc3N3b3Jk ID0gZ2V0YXR0cihzZWxmLm1hbmFnZXIsICdwYXNzd29yZCcsIE5vbmUpCi0gICAgICAgICAgICBp ZiBwYXNzd29yZDoKLSAgICAgICAgICAgICAgICAjIEZldGNoIExvZ2dlZCBpbiBVc2VyIERldGFp bHMuCi0gICAgICAgICAgICAgICAgdXNlciA9IFVzZXIucXVlcnkuZmlsdGVyX2J5KGlkPWN1cnJl bnRfdXNlci5pZCkuZmlyc3QoKQotICAgICAgICAgICAgICAgIGlmIHVzZXIgaXMgTm9uZToKLSAg ICAgICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlLCBnZXR0ZXh0KCJVbmF1dGhvcml6ZWQgcmVx dWVzdC4iKQotCi0gICAgICAgICAgICAgICAgcGFzc3dvcmQgPSBkZWNyeXB0KHBhc3N3b3JkLCB1 c2VyLnBhc3N3b3JkKS5kZWNvZGUoKQotCi0gICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAg ICAgcGdfY29ubiA9IHBzeWNvcGcyLmNvbm5lY3QoCi0gICAgICAgICAgICAgICAgICAgIGhvc3Q9 c2VsZi5tYW5hZ2VyLmhvc3QsCi0gICAgICAgICAgICAgICAgICAgIGhvc3RhZGRyPXNlbGYubWFu YWdlci5ob3N0YWRkciwKLSAgICAgICAgICAgICAgICAgICAgcG9ydD1zZWxmLm1hbmFnZXIucG9y dCwKLSAgICAgICAgICAgICAgICAgICAgZGF0YWJhc2U9c2VsZi5kYiwKLSAgICAgICAgICAgICAg ICAgICAgdXNlcj1zZWxmLm1hbmFnZXIudXNlciwKLSAgICAgICAgICAgICAgICAgICAgcGFzc3dv cmQ9cGFzc3dvcmQsCi0gICAgICAgICAgICAgICAgICAgIHBhc3NmaWxlPWdldF9jb21wbGV0ZV9m aWxlX3BhdGgoc2VsZi5tYW5hZ2VyLnBhc3NmaWxlKSwKLSAgICAgICAgICAgICAgICAgICAgc3Ns bW9kZT1zZWxmLm1hbmFnZXIuc3NsX21vZGUsCi0gICAgICAgICAgICAgICAgICAgIHNzbGNlcnQ9 Z2V0X2NvbXBsZXRlX2ZpbGVfcGF0aChzZWxmLm1hbmFnZXIuc3NsY2VydCksCi0gICAgICAgICAg ICAgICAgICAgIHNzbGtleT1nZXRfY29tcGxldGVfZmlsZV9wYXRoKHNlbGYubWFuYWdlci5zc2xr ZXkpLAotICAgICAgICAgICAgICAgICAgICBzc2xyb290Y2VydD1nZXRfY29tcGxldGVfZmlsZV9w YXRoKAotICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5tYW5hZ2VyLnNzbHJvb3RjZXJ0Ci0g ICAgICAgICAgICAgICAgICAgICksCi0gICAgICAgICAgICAgICAgICAgIHNzbGNybD1nZXRfY29t cGxldGVfZmlsZV9wYXRoKHNlbGYubWFuYWdlci5zc2xjcmwpLAotICAgICAgICAgICAgICAgICAg ICBzc2xjb21wcmVzc2lvbj1UcnVlIGlmIHNlbGYubWFuYWdlci5zc2xjb21wcmVzc2lvbgotICAg ICAgICAgICAgICAgICAgICBlbHNlIEZhbHNlCi0gICAgICAgICAgICAgICAgKQotCi0gICAgICAg ICAgICAgICAgIyBHZXQgdGhlIGN1cnNvciBhbmQgcnVuIHRoZSBxdWVyeQotICAgICAgICAgICAg ICAgIGN1ciA9IHBnX2Nvbm4uY3Vyc29yKCkKLSAgICAgICAgICAgICAgICBjdXIuZXhlY3V0ZShx dWVyeSkKLQotICAgICAgICAgICAgICAgICMgQ2xvc2UgdGhlIGNvbm5lY3Rpb24KLSAgICAgICAg ICAgICAgICBwZ19jb25uLmNsb3NlKCkKLSAgICAgICAgICAgICAgICBwZ19jb25uID0gTm9uZQot Ci0gICAgICAgICAgICBleGNlcHQgcHN5Y29wZzIuRXJyb3IgYXMgZToKLSAgICAgICAgICAgICAg ICBzdGF0dXMgPSBGYWxzZQotICAgICAgICAgICAgICAgIGlmIGUucGdlcnJvcjoKLSAgICAgICAg ICAgICAgICAgICAgbXNnID0gZS5wZ2Vycm9yCi0gICAgICAgICAgICAgICAgZWxpZiBlLmRpYWcu bWVzc2FnZV9kZXRhaWw6Ci0gICAgICAgICAgICAgICAgICAgIG1zZyA9IGUuZGlhZy5tZXNzYWdl X2RldGFpbAotICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAgIG1zZyA9 IHN0cihlKQotICAgICAgICAgICAgICAgIHJldHVybiBzdGF0dXMsIG1zZwotICAgICAgICBlbHNl OgotICAgICAgICAgICAgaWYgc2VsZi5jb25uZWN0ZWQoKToKLSAgICAgICAgICAgICAgICBzdGF0 dXMsIG1zZyA9IHNlbGYuZXhlY3V0ZV92b2lkKHF1ZXJ5KQotCi0gICAgICAgICAgICAgICAgaWYg c3RhdHVzOgotICAgICAgICAgICAgICAgICAgICBjYW5jZWxfY29ubi5leGVjdXRpb25fYWJvcnRl ZCA9IFRydWUKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgc3RhdHVzID0gRmFs c2UKLSAgICAgICAgICAgICAgICBtc2cgPSBnZXR0ZXh0KCJOb3QgY29ubmVjdGVkIHRvIHRoZSBk YXRhYmFzZSBzZXJ2ZXIuIikKLQotICAgICAgICByZXR1cm4gc3RhdHVzLCBtc2cKLQotICAgIGRl ZiBtZXNzYWdlcyhzZWxmKToKLSAgICAgICAgIiIiCi0gICAgICAgIFJldHVybnMgdGhlIGxpc3Qg b2YgdGhlIG1lc3NhZ2VzL25vdGljZXMgc2VuZCBmcm9tIHRoZSBkYXRhYmFzZSBzZXJ2ZXIuCi0g ICAgICAgICIiIgotICAgICAgICByZXNwID0gW10KLSAgICAgICAgd2hpbGUgc2VsZi5fX25vdGlj ZXM6Ci0gICAgICAgICAgICByZXNwLmFwcGVuZChzZWxmLl9fbm90aWNlcy5wb3AoMCkpCi0gICAg ICAgIHJldHVybiByZXNwCi0KLSAgICBkZWYgZGVjb2RlX3RvX3V0Zjgoc2VsZiwgdmFsdWUpOgot ICAgICAgICAiIiIKLSAgICAgICAgVGhpcyBtZXRob2Qgd2lsbCBkZWNvZGUgdmFsdWVzIHRvIHV0 Zi04Ci0gICAgICAgIEFyZ3M6Ci0gICAgICAgICAgICB2YWx1ZTogU3RyaW5nIHRvIGJlIGRlY29k ZQotCi0gICAgICAgIFJldHVybnM6Ci0gICAgICAgICAgICBEZWNvZGVkIHN0cmluZwotICAgICAg ICAiIiIKLSAgICAgICAgaXNfZXJyb3IgPSBGYWxzZQotICAgICAgICBpZiBoYXNhdHRyKHN0ciwg J2RlY29kZScpOgotICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIHZhbHVlID0gdmFs dWUuZGVjb2RlKCd1dGYtOCcpCi0gICAgICAgICAgICBleGNlcHQgVW5pY29kZURlY29kZUVycm9y OgotICAgICAgICAgICAgICAgICMgTGV0J3MgdHJ5IHdpdGggcHl0aG9uJ3MgcHJlZmVycmVkIGVu Y29kaW5nCi0gICAgICAgICAgICAgICAgIyBPbiBXaW5kb3dzIGxjX21lc3NhZ2VzIG1vc3RseSBo YXMgZW52aXJvbm1lbnQgZGVwZW5kZW50Ci0gICAgICAgICAgICAgICAgIyBlbmNvZGluZyBsaWtl ICdGcmVuY2hfRnJhbmNlLjEyNTInCi0gICAgICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAg ICAgICAgICBpbXBvcnQgbG9jYWxlCi0gICAgICAgICAgICAgICAgICAgIHByZWZfZW5jb2Rpbmcg PSBsb2NhbGUuZ2V0cHJlZmVycmVkZW5jb2RpbmcoKQotICAgICAgICAgICAgICAgICAgICB2YWx1 ZSA9IHZhbHVlLmRlY29kZShwcmVmX2VuY29kaW5nKVwKLSAgICAgICAgICAgICAgICAgICAgICAg IC5lbmNvZGUoJ3V0Zi04JylcCi0gICAgICAgICAgICAgICAgICAgICAgICAuZGVjb2RlKCd1dGYt OCcpCi0gICAgICAgICAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbjoKLSAgICAgICAgICAgICAgICAg ICAgaXNfZXJyb3IgPSBUcnVlCi0gICAgICAgICAgICBleGNlcHQgRXhjZXB0aW9uOgotICAgICAg ICAgICAgICAgIGlzX2Vycm9yID0gVHJ1ZQotCi0gICAgICAgICMgSWYgc3RpbGwgbm90IGFibGUg dG8gZGVjb2RlIHRoZW4KLSAgICAgICAgaWYgaXNfZXJyb3I6Ci0gICAgICAgICAgICB2YWx1ZSA9 IHZhbHVlLmRlY29kZSgnYXNjaWknLCAnaWdub3JlJykKLQotICAgICAgICByZXR1cm4gdmFsdWUK LQotICAgIGRlZiBfZm9ybWF0dGVkX2V4Y2VwdGlvbl9tc2coc2VsZiwgZXhjZXB0aW9uX29iaiwg Zm9ybWF0dGVkX21zZyk6Ci0gICAgICAgICIiIgotICAgICAgICBUaGlzIG1ldGhvZCBpcyB1c2Vk IHRvIHBhcnNlIHRoZSBwc3ljb3BnMi5FcnJvciBvYmplY3QgYW5kIHJldHVybnMgdGhlCi0gICAg ICAgIGZvcm1hdHRlZCBlcnJvciBtZXNzYWdlIGlmIGZsYWcgaXMgc2V0IHRvIHRydWUgZWxzZSBy ZXR1cm4KLSAgICAgICAgbm9ybWFsIGVycm9yIG1lc3NhZ2UuCi0KLSAgICAgICAgQXJnczoKLSAg ICAgICAgICAgIGV4Y2VwdGlvbl9vYmo6IGV4Y2VwdGlvbiBvYmplY3QKLSAgICAgICAgICAgIGZv cm1hdHRlZF9tc2c6IGlmIFRydWUgdGhlbiBmdW5jdGlvbiByZXR1cm4gdGhlIGZvcm1hdHRlZCBl eGNlcHRpb24KLSAgICAgICAgICAgIG1lc3NhZ2UKLQotICAgICAgICAiIiIKLSAgICAgICAgaWYg ZXhjZXB0aW9uX29iai5wZ2Vycm9yOgotICAgICAgICAgICAgZXJybXNnID0gZXhjZXB0aW9uX29i ai5wZ2Vycm9yCi0gICAgICAgIGVsaWYgZXhjZXB0aW9uX29iai5kaWFnLm1lc3NhZ2VfZGV0YWls OgotICAgICAgICAgICAgZXJybXNnID0gZXhjZXB0aW9uX29iai5kaWFnLm1lc3NhZ2VfZGV0YWls Ci0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBlcnJtc2cgPSBzdHIoZXhjZXB0aW9uX29iaikK LSAgICAgICAgIyBlcnJtc2cgbWlnaHQgY29udGFpbnMgZW5jb2RlZCB2YWx1ZSwgbGV0cyBkZWNv ZGUgaXQKLSAgICAgICAgZXJybXNnID0gc2VsZi5kZWNvZGVfdG9fdXRmOChlcnJtc2cpCi0KLSAg ICAgICAgIyBpZiBmb3JtYXR0ZWRfbXNnIGlzIGZhbHNlIHRoZW4gcmV0dXJuIGZyb20gdGhlIGZ1 bmN0aW9uCi0gICAgICAgIGlmIG5vdCBmb3JtYXR0ZWRfbXNnOgotICAgICAgICAgICAgcmV0dXJu IGVycm1zZwotCi0gICAgICAgICMgRG8gbm90IGFwcGVuZCBpZiBlcnJvciBzdGFydHMgd2l0aCBg RVJST1I6YCBhcyBtb3N0IHBnIHJlbGF0ZWQKLSAgICAgICAgIyBlcnJvciBzdGFydHMgd2l0aCBg RVJST1I6YAotICAgICAgICBpZiBub3QgZXJybXNnLnN0YXJ0c3dpdGgodSdFUlJPUjonKToKLSAg ICAgICAgICAgIGVycm1zZyA9IHUnRVJST1I6ICAnICsgZXJybXNnICsgdSdcblxuJwotCi0gICAg ICAgIGlmIGV4Y2VwdGlvbl9vYmouZGlhZy5zZXZlcml0eSBpcyBub3QgTm9uZSBcCi0gICAgICAg ICAgICAgICAgYW5kIGV4Y2VwdGlvbl9vYmouZGlhZy5tZXNzYWdlX3ByaW1hcnkgaXMgbm90IE5v bmU6Ci0gICAgICAgICAgICBleF9kaWFnX21lc3NhZ2UgPSB1InswfTogIHsxfSIuZm9ybWF0KAot ICAgICAgICAgICAgICAgIGV4Y2VwdGlvbl9vYmouZGlhZy5zZXZlcml0eSwKLSAgICAgICAgICAg ICAgICBzZWxmLmRlY29kZV90b191dGY4KGV4Y2VwdGlvbl9vYmouZGlhZy5tZXNzYWdlX3ByaW1h cnkpCi0gICAgICAgICAgICApCi0gICAgICAgICAgICAjIElmIGJvdGggZXJyb3JzIGFyZSBkaWZm ZXJlbnQgdGhlbiBvbmx5IGFwcGVuZCBpdAotICAgICAgICAgICAgaWYgZXJybXNnIGFuZCBleF9k aWFnX21lc3NhZ2UgYW5kIFwKLSAgICAgICAgICAgICAgICBleF9kaWFnX21lc3NhZ2Uuc3RyaXAo KS5zdHJpcCgnXG4nKS5sb3dlcigpIG5vdCBpbiBcCi0gICAgICAgICAgICAgICAgICAgIGVycm1z Zy5zdHJpcCgpLnN0cmlwKCdcbicpLmxvd2VyKCk6Ci0gICAgICAgICAgICAgICAgZXJybXNnICs9 IGV4X2RpYWdfbWVzc2FnZQotICAgICAgICBlbGlmIGV4Y2VwdGlvbl9vYmouZGlhZy5tZXNzYWdl X3ByaW1hcnkgaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICBtZXNzYWdlX3ByaW1hcnkgPSBzZWxm LmRlY29kZV90b191dGY4KAotICAgICAgICAgICAgICAgIGV4Y2VwdGlvbl9vYmouZGlhZy5tZXNz YWdlX3ByaW1hcnkKLSAgICAgICAgICAgICkKLSAgICAgICAgICAgIGlmIG1lc3NhZ2VfcHJpbWFy eS5sb3dlcigpIG5vdCBpbiBlcnJtc2cubG93ZXIoKToKLSAgICAgICAgICAgICAgICBlcnJtc2cg Kz0gbWVzc2FnZV9wcmltYXJ5Ci0KLSAgICAgICAgaWYgZXhjZXB0aW9uX29iai5kaWFnLnNxbHN0 YXRlIGlzIG5vdCBOb25lOgotICAgICAgICAgICAgaWYgbm90IGVycm1zZy5lbmRzd2l0aCgnXG4n KToKLSAgICAgICAgICAgICAgICBlcnJtc2cgKz0gJ1xuJwotICAgICAgICAgICAgZXJybXNnICs9 IGdldHRleHQoJ1NRTCBzdGF0ZTogJykKLSAgICAgICAgICAgIGVycm1zZyArPSBzZWxmLmRlY29k ZV90b191dGY4KGV4Y2VwdGlvbl9vYmouZGlhZy5zcWxzdGF0ZSkKLQotICAgICAgICBpZiBleGNl cHRpb25fb2JqLmRpYWcubWVzc2FnZV9kZXRhaWwgaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICBp ZiAnRGV0YWlsOicubG93ZXIoKSBub3QgaW4gZXJybXNnLmxvd2VyKCk6Ci0gICAgICAgICAgICAg ICAgaWYgbm90IGVycm1zZy5lbmRzd2l0aCgnXG4nKToKLSAgICAgICAgICAgICAgICAgICAgZXJy bXNnICs9ICdcbicKLSAgICAgICAgICAgICAgICBlcnJtc2cgKz0gZ2V0dGV4dCgnRGV0YWlsOiAn KQotICAgICAgICAgICAgICAgIGVycm1zZyArPSBzZWxmLmRlY29kZV90b191dGY4KAotICAgICAg ICAgICAgICAgICAgICBleGNlcHRpb25fb2JqLmRpYWcubWVzc2FnZV9kZXRhaWwKLSAgICAgICAg ICAgICAgICApCi0KLSAgICAgICAgaWYgZXhjZXB0aW9uX29iai5kaWFnLm1lc3NhZ2VfaGludCBp cyBub3QgTm9uZToKLSAgICAgICAgICAgIGlmICdIaW50OicubG93ZXIoKSBub3QgaW4gZXJybXNn Lmxvd2VyKCk6Ci0gICAgICAgICAgICAgICAgaWYgbm90IGVycm1zZy5lbmRzd2l0aCgnXG4nKToK LSAgICAgICAgICAgICAgICAgICAgZXJybXNnICs9ICdcbicKLSAgICAgICAgICAgICAgICBlcnJt c2cgKz0gZ2V0dGV4dCgnSGludDogJykKLSAgICAgICAgICAgICAgICBlcnJtc2cgKz0gc2VsZi5k ZWNvZGVfdG9fdXRmOChleGNlcHRpb25fb2JqLmRpYWcubWVzc2FnZV9oaW50KQotCi0gICAgICAg IGlmIGV4Y2VwdGlvbl9vYmouZGlhZy5zdGF0ZW1lbnRfcG9zaXRpb24gaXMgbm90IE5vbmU6Ci0g ICAgICAgICAgICBpZiAnQ2hhcmFjdGVyOicubG93ZXIoKSBub3QgaW4gZXJybXNnLmxvd2VyKCk6 Ci0gICAgICAgICAgICAgICAgaWYgbm90IGVycm1zZy5lbmRzd2l0aCgnXG4nKToKLSAgICAgICAg ICAgICAgICAgICAgZXJybXNnICs9ICdcbicKLSAgICAgICAgICAgICAgICBlcnJtc2cgKz0gZ2V0 dGV4dCgnQ2hhcmFjdGVyOiAnKQotICAgICAgICAgICAgICAgIGVycm1zZyArPSBzZWxmLmRlY29k ZV90b191dGY4KAotICAgICAgICAgICAgICAgICAgICBleGNlcHRpb25fb2JqLmRpYWcuc3RhdGVt ZW50X3Bvc2l0aW9uCi0gICAgICAgICAgICAgICAgKQotCi0gICAgICAgIGlmIGV4Y2VwdGlvbl9v YmouZGlhZy5jb250ZXh0IGlzIG5vdCBOb25lOgotICAgICAgICAgICAgaWYgJ0NvbnRleHQ6Jy5s b3dlcigpIG5vdCBpbiBlcnJtc2cubG93ZXIoKToKLSAgICAgICAgICAgICAgICBpZiBub3QgZXJy bXNnLmVuZHN3aXRoKCdcbicpOgotICAgICAgICAgICAgICAgICAgICBlcnJtc2cgKz0gJ1xuJwot ICAgICAgICAgICAgICAgIGVycm1zZyArPSBnZXR0ZXh0KCdDb250ZXh0OiAnKQotICAgICAgICAg ICAgICAgIGVycm1zZyArPSBzZWxmLmRlY29kZV90b191dGY4KGV4Y2VwdGlvbl9vYmouZGlhZy5j b250ZXh0KQotCi0gICAgICAgIHJldHVybiBlcnJtc2cKLQotICAgICMjIyMjCi0gICAgIyBBcyBw ZXIgaXNzdWUgcmVwb3J0ZWQgb24gcGdzeWNvcGcyIGdpdGh1YiByZXBvc2l0b3J5IGxpbmsgaXMg c2hhcmVkIGJlbG93Ci0gICAgIyBjb25uLmNsb3NlZCBpcyBub3QgcmVsaWFibGUgZW5vdWdoIHRv IGlkZW50aWZ5IHRoZSBkaXNjb25uZWN0aW9uIGZyb20gdGhlCi0gICAgIyBkYXRhYmFzZSBzZXJ2 ZXIgZm9yIHNvbWUgdW5rbm93biByZWFzb25zLgotICAgICMKLSAgICAjIChodHRwczovL2dpdGh1 Yi5jb20vcHN5Y29wZy9wc3ljb3BnMi9pc3N1ZXMvMjYzKQotICAgICMKLSAgICAjIEluIG9yZGVy IHRvIHJlc29sdmUgdGhlIGlzc3VlLCBzcWxhbGNoYW1leSBmb2xsb3dzIHRoZSBiZWxvdyBsb2dp YyB0bwotICAgICMgaWRlbnRpZnkgdGhlIGRpc2Nvbm5lY3Rpb24uIEl0IHJlbGllcyBvbiBleGNl cHRpb24gbWVzc2FnZSB0byBpZGVudGlmeQotICAgICMgdGhlIGVycm9yLgotICAgICMKLSAgICAj IFJlZmVyZW5jZSAoTUlUIGxpY2Vuc2UpOgotICAgICMgaHR0cHM6Ly9naXRodWIuY29tL3p6emVl ay9zcWxhbGNoZW15L2Jsb2IvbWFzdGVyL2xpYi9zcWxhbGNoZW15L2RpYWxlY3RzL3Bvc3RncmVz cWwvcHN5Y29wZzIucHkKLSAgICAjCi0gICAgZGVmIGlzX2Rpc2Nvbm5lY3RlZChzZWxmLCBlcnIp OgotICAgICAgICBpZiBub3Qgc2VsZi5jb25uLmNsb3NlZDoKLSAgICAgICAgICAgICMgY2hlY2tz IGJhc2VkIG9uIHN0cmluZ3MuICBpbiB0aGUgY2FzZSB0aGF0IC5jbG9zZWQKLSAgICAgICAgICAg ICMgZGlkbid0IGN1dCBpdCwgZmFsbCBiYWNrIG9udG8gdGhlc2UuCi0gICAgICAgICAgICBzdHJf ZSA9IHN0cihlcnIpLnBhcnRpdGlvbigiXG4iKVswXQotICAgICAgICAgICAgZm9yIG1zZyBpbiBb Ci0gICAgICAgICAgICAgICAgIyB0aGVzZSBlcnJvciBtZXNzYWdlcyBmcm9tIGxpYnBxOiBpbnRl cmZhY2VzL2xpYnBxL2ZlLW1pc2MuYwotICAgICAgICAgICAgICAgICMgYW5kIGludGVyZmFjZXMv bGlicHEvZmUtc2VjdXJlLmMuCi0gICAgICAgICAgICAgICAgJ3Rlcm1pbmF0aW5nIGNvbm5lY3Rp b24nLAotICAgICAgICAgICAgICAgICdjbG9zZWQgdGhlIGNvbm5lY3Rpb24nLAotICAgICAgICAg ICAgICAgICdjb25uZWN0aW9uIG5vdCBvcGVuJywKLSAgICAgICAgICAgICAgICAnY291bGQgbm90 IHJlY2VpdmUgZGF0YSBmcm9tIHNlcnZlcicsCi0gICAgICAgICAgICAgICAgJ2NvdWxkIG5vdCBz ZW5kIGRhdGEgdG8gc2VydmVyJywKLSAgICAgICAgICAgICAgICAjIHBzeWNvcGcyIGNsaWVudCBl cnJvcnMsIHBzeWNvcGcyL2NvbmVuY3Rpb24uaCwKLSAgICAgICAgICAgICAgICAjIHBzeWNvcGcy L2N1cnNvci5oCi0gICAgICAgICAgICAgICAgJ2Nvbm5lY3Rpb24gYWxyZWFkeSBjbG9zZWQnLAot ICAgICAgICAgICAgICAgICdjdXJzb3IgYWxyZWFkeSBjbG9zZWQnLAotICAgICAgICAgICAgICAg ICMgbm90IHN1cmUgd2hlcmUgdGhpcyBwYXRoIGlzIG9yaWdpbmFsbHkgZnJvbSwgaXQgbWF5Ci0g ICAgICAgICAgICAgICAgIyBiZSBvYnNvbGV0ZS4gICBJdCByZWFsbHkgc2F5cyAibG9zZWQiLCBu b3QgImNsb3NlZCIuCi0gICAgICAgICAgICAgICAgJ2xvc2VkIHRoZSBjb25uZWN0aW9uIHVuZXhw ZWN0ZWRseScsCi0gICAgICAgICAgICAgICAgIyB0aGVzZSBjYW4gb2NjdXIgaW4gbmV3ZXIgU1NM Ci0gICAgICAgICAgICAgICAgJ2Nvbm5lY3Rpb24gaGFzIGJlZW4gY2xvc2VkIHVuZXhwZWN0ZWRs eScsCi0gICAgICAgICAgICAgICAgJ1NTTCBTWVNDQUxMIGVycm9yOiBCYWQgZmlsZSBkZXNjcmlw dG9yJywKLSAgICAgICAgICAgICAgICAnU1NMIFNZU0NBTEwgZXJyb3I6IEVPRiBkZXRlY3RlZCcs Ci0gICAgICAgICAgICBdOgotICAgICAgICAgICAgICAgIGlkeCA9IHN0cl9lLmZpbmQobXNnKQot ICAgICAgICAgICAgICAgIGlmIGlkeCA+PSAwIGFuZCAnIicgbm90IGluIHN0cl9lWzppZHhdOgot ICAgICAgICAgICAgICAgICAgICByZXR1cm4gVHJ1ZQotCi0gICAgICAgICAgICByZXR1cm4gRmFs c2UKLSAgICAgICAgcmV0dXJuIFRydWUKLQotCi1jbGFzcyBTZXJ2ZXJNYW5hZ2VyKG9iamVjdCk6 Ci0gICAgIiIiCi0gICAgY2xhc3MgU2VydmVyTWFuYWdlcgotCi0gICAgVGhpcyBjbGFzcyBjb250 YWlucyB0aGUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGdpdmVuIHNlcnZlci4KLSAgICBBbmQsIGFj dHMgYXMgY29ubmVjdGlvbiBtYW5hZ2VyIGZvciB0aGF0IHBhcnRpY3VsYXIgc2Vzc2lvbi4KLSAg ICAiIiIKLQotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBzZXJ2ZXIpOgotICAgICAgICBzZWxmLmNv bm5lY3Rpb25zID0gZGljdCgpCi0KLSAgICAgICAgc2VsZi51cGRhdGUoc2VydmVyKQotCi0gICAg ZGVmIHVwZGF0ZShzZWxmLCBzZXJ2ZXIpOgotICAgICAgICBhc3NlcnQgKHNlcnZlciBpcyBub3Qg Tm9uZSkKLSAgICAgICAgYXNzZXJ0IChpc2luc3RhbmNlKHNlcnZlciwgU2VydmVyKSkKLQotICAg ICAgICBzZWxmLnZlciA9IE5vbmUKLSAgICAgICAgc2VsZi5zdmVyc2lvbiA9IE5vbmUKLSAgICAg ICAgc2VsZi5zZXJ2ZXJfdHlwZSA9IE5vbmUKLSAgICAgICAgc2VsZi5zZXJ2ZXJfY2xzID0gTm9u ZQotICAgICAgICBzZWxmLnBhc3N3b3JkID0gTm9uZQotCi0gICAgICAgIHNlbGYuc2lkID0gc2Vy dmVyLmlkCi0gICAgICAgIHNlbGYuaG9zdCA9IHNlcnZlci5ob3N0Ci0gICAgICAgIHNlbGYuaG9z dGFkZHIgPSBzZXJ2ZXIuaG9zdGFkZHIKLSAgICAgICAgc2VsZi5wb3J0ID0gc2VydmVyLnBvcnQK LSAgICAgICAgc2VsZi5kYiA9IHNlcnZlci5tYWludGVuYW5jZV9kYgotICAgICAgICBzZWxmLmRp ZCA9IE5vbmUKLSAgICAgICAgc2VsZi51c2VyID0gc2VydmVyLnVzZXJuYW1lCi0gICAgICAgIHNl bGYucGFzc3dvcmQgPSBzZXJ2ZXIucGFzc3dvcmQKLSAgICAgICAgc2VsZi5yb2xlID0gc2VydmVy LnJvbGUKLSAgICAgICAgc2VsZi5zc2xfbW9kZSA9IHNlcnZlci5zc2xfbW9kZQotICAgICAgICBz ZWxmLnBpbmdlZCA9IGRhdGV0aW1lLmRhdGV0aW1lLm5vdygpCi0gICAgICAgIHNlbGYuZGJfaW5m byA9IGRpY3QoKQotICAgICAgICBzZWxmLnNlcnZlcl90eXBlcyA9IE5vbmUKLSAgICAgICAgc2Vs Zi5kYl9yZXMgPSBzZXJ2ZXIuZGJfcmVzCi0gICAgICAgIHNlbGYucGFzc2ZpbGUgPSBzZXJ2ZXIu cGFzc2ZpbGUKLSAgICAgICAgc2VsZi5zc2xjZXJ0ID0gc2VydmVyLnNzbGNlcnQKLSAgICAgICAg c2VsZi5zc2xrZXkgPSBzZXJ2ZXIuc3Nsa2V5Ci0gICAgICAgIHNlbGYuc3Nscm9vdGNlcnQgPSBz ZXJ2ZXIuc3Nscm9vdGNlcnQKLSAgICAgICAgc2VsZi5zc2xjcmwgPSBzZXJ2ZXIuc3NsY3JsCi0g ICAgICAgIHNlbGYuc3NsY29tcHJlc3Npb24gPSBUcnVlIGlmIHNlcnZlci5zc2xjb21wcmVzc2lv biBlbHNlIEZhbHNlCi0KLSAgICAgICAgZm9yIGNvbiBpbiBzZWxmLmNvbm5lY3Rpb25zOgotICAg ICAgICAgICAgc2VsZi5jb25uZWN0aW9uc1tjb25dLl9yZWxlYXNlKCkKLQotICAgICAgICBzZWxm LnVwZGF0ZV9zZXNzaW9uKCkKLQotICAgICAgICBzZWxmLmNvbm5lY3Rpb25zID0gZGljdCgpCi0K LSAgICBkZWYgYXNfZGljdChzZWxmKToKLSAgICAgICAgIiIiCi0gICAgICAgIFJldHVybnMgYSBk aWN0aW9uYXJ5IG9iamVjdCByZXByZXNlbnRpbmcgdGhlIHNlcnZlciBtYW5hZ2VyLgotICAgICAg ICAiIiIKLSAgICAgICAgaWYgc2VsZi52ZXIgaXMgTm9uZSBvciBsZW4oc2VsZi5jb25uZWN0aW9u cykgPT0gMDoKLSAgICAgICAgICAgIHJldHVybiBOb25lCi0KLSAgICAgICAgcmVzID0gZGljdCgp Ci0gICAgICAgIHJlc1snc2lkJ10gPSBzZWxmLnNpZAotICAgICAgICByZXNbJ3ZlciddID0gc2Vs Zi52ZXIKLSAgICAgICAgcmVzWydzdmVyc2lvbiddID0gc2VsZi5zdmVyc2lvbgotICAgICAgICBp ZiBoYXNhdHRyKHNlbGYsICdwYXNzd29yZCcpIGFuZCBzZWxmLnBhc3N3b3JkOgotICAgICAgICAg ICAgIyBJZiBydW5uaW5nIHVuZGVyIFBZMgotICAgICAgICAgICAgaWYgaGFzYXR0cihzZWxmLnBh c3N3b3JkLCAnZGVjb2RlJyk6Ci0gICAgICAgICAgICAgICAgcmVzWydwYXNzd29yZCddID0gc2Vs Zi5wYXNzd29yZC5kZWNvZGUoJ3V0Zi04JykKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAg ICAgICAgcmVzWydwYXNzd29yZCddID0gc3RyKHNlbGYucGFzc3dvcmQpCi0gICAgICAgIGVsc2U6 Ci0gICAgICAgICAgICByZXNbJ3Bhc3N3b3JkJ10gPSBzZWxmLnBhc3N3b3JkCi0KLSAgICAgICAg Y29ubmVjdGlvbnMgPSByZXNbJ2Nvbm5lY3Rpb25zJ10gPSBkaWN0KCkKLQotICAgICAgICBmb3Ig Y29ubl9pZCBpbiBzZWxmLmNvbm5lY3Rpb25zOgotICAgICAgICAgICAgY29ubiA9IHNlbGYuY29u bmVjdGlvbnNbY29ubl9pZF0uYXNfZGljdCgpCi0KLSAgICAgICAgICAgIGlmIGNvbm4gaXMgbm90 IE5vbmU6Ci0gICAgICAgICAgICAgICAgY29ubmVjdGlvbnNbY29ubl9pZF0gPSBjb25uCi0KLSAg ICAgICAgcmV0dXJuIHJlcwotCi0gICAgZGVmIFNlcnZlclZlcnNpb24oc2VsZik6Ci0gICAgICAg IHJldHVybiBzZWxmLnZlcgotCi0gICAgQHByb3BlcnR5Ci0gICAgZGVmIHZlcnNpb24oc2VsZik6 Ci0gICAgICAgIHJldHVybiBzZWxmLnN2ZXJzaW9uCi0KLSAgICBkZWYgTWFqb3JWZXJzaW9uKHNl bGYpOgotICAgICAgICBpZiBzZWxmLnN2ZXJzaW9uIGlzIG5vdCBOb25lOgotICAgICAgICAgICAg cmV0dXJuIGludChzZWxmLnN2ZXJzaW9uIC8gMTAwMDApCi0gICAgICAgIHJhaXNlIEV4Y2VwdGlv bigiSW5mb3JtYXRpb24gaXMgbm90IGF2YWlsYWJsZS4iKQotCi0gICAgZGVmIE1pbm9yVmVyc2lv bihzZWxmKToKLSAgICAgICAgaWYgc2VsZi5zdmVyc2lvbjoKLSAgICAgICAgICAgIHJldHVybiBp bnQoaW50KHNlbGYuc3ZlcnNpb24gLyAxMDApICUgMTAwKQotICAgICAgICByYWlzZSBFeGNlcHRp b24oIkluZm9ybWF0aW9uIGlzIG5vdCBhdmFpbGFibGUuIikKLQotICAgIGRlZiBQYXRjaFZlcnNp b24oc2VsZik6Ci0gICAgICAgIGlmIHNlbGYuc3ZlcnNpb246Ci0gICAgICAgICAgICByZXR1cm4g aW50KGludChzZWxmLnN2ZXJzaW9uIC8gMTAwKSAvIDEwMCkKLSAgICAgICAgcmFpc2UgRXhjZXB0 aW9uKCJJbmZvcm1hdGlvbiBpcyBub3QgYXZhaWxhYmxlLiIpCi0KLSAgICBkZWYgY29ubmVjdGlv bigKLSAgICAgICAgICAgIHNlbGYsIGRhdGFiYXNlPU5vbmUsIGNvbm5faWQ9Tm9uZSwgYXV0b19y ZWNvbm5lY3Q9VHJ1ZSwgZGlkPU5vbmUsCi0gICAgICAgICAgICBhc3luYz1Ob25lLCB1c2VfYmlu YXJ5X3BsYWNlaG9sZGVyPUZhbHNlLCBhcnJheV90b19zdHJpbmc9RmFsc2UKLSAgICApOgotICAg ICAgICBpZiBkYXRhYmFzZSBpcyBub3QgTm9uZToKLSAgICAgICAgICAgIGlmIGhhc2F0dHIoc3Ry LCAnZGVjb2RlJykgYW5kIFwKLSAgICAgICAgICAgICAgICAgICAgbm90IGlzaW5zdGFuY2UoZGF0 YWJhc2UsIHVuaWNvZGUpOgotICAgICAgICAgICAgICAgIGRhdGFiYXNlID0gZGF0YWJhc2UuZGVj b2RlKCd1dGYtOCcpCi0gICAgICAgICAgICBpZiBkaWQgaXMgbm90IE5vbmU6Ci0gICAgICAgICAg ICAgICAgaWYgZGlkIGluIHNlbGYuZGJfaW5mbzoKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5k Yl9pbmZvW2RpZF1bJ2RhdG5hbWUnXSA9IGRhdGFiYXNlCi0gICAgICAgIGVsc2U6Ci0gICAgICAg ICAgICBpZiBkaWQgaXMgTm9uZToKLSAgICAgICAgICAgICAgICBkYXRhYmFzZSA9IHNlbGYuZGIK LSAgICAgICAgICAgIGVsaWYgZGlkIGluIHNlbGYuZGJfaW5mbzoKLSAgICAgICAgICAgICAgICBk YXRhYmFzZSA9IHNlbGYuZGJfaW5mb1tkaWRdWydkYXRuYW1lJ10KLSAgICAgICAgICAgIGVsc2U6 Ci0gICAgICAgICAgICAgICAgbWFpbnRlbmFuY2VfZGJfaWQgPSB1J0RCOnswfScuZm9ybWF0KHNl bGYuZGIpCi0gICAgICAgICAgICAgICAgaWYgbWFpbnRlbmFuY2VfZGJfaWQgaW4gc2VsZi5jb25u ZWN0aW9uczoKLSAgICAgICAgICAgICAgICAgICAgY29ubiA9IHNlbGYuY29ubmVjdGlvbnNbbWFp bnRlbmFuY2VfZGJfaWRdCi0gICAgICAgICAgICAgICAgICAgIGlmIGNvbm4uY29ubmVjdGVkKCk6 Ci0gICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXMsIHJlcyA9IGNvbm4uZXhlY3V0ZV9kaWN0 KHUiIiIKLVNFTEVDVAotICAgIGRiLm9pZCBhcyBkaWQsIGRiLmRhdG5hbWUsIGRiLmRhdGFsbG93 Y29ubiwKLSAgICBwZ19lbmNvZGluZ190b19jaGFyKGRiLmVuY29kaW5nKSBBUyBzZXJ2ZXJlbmNv ZGluZywKLSAgICBoYXNfZGF0YWJhc2VfcHJpdmlsZWdlKGRiLm9pZCwgJ0NSRUFURScpIGFzIGNh bmNyZWF0ZSwgZGF0bGFzdHN5c29pZAotRlJPTQotICAgIHBnX2RhdGFiYXNlIGRiCi1XSEVSRSBk Yi5vaWQgPSB7MH0iIiIuZm9ybWF0KGRpZCkpCi0KLSAgICAgICAgICAgICAgICAgICAgICAgIGlm IHN0YXR1cyBhbmQgbGVuKHJlc1sncm93cyddKSA+IDA6Ci0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgZm9yIHJvdyBpbiByZXNbJ3Jvd3MnXToKLSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgc2VsZi5kYl9pbmZvW2RpZF0gPSByb3cKLSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgZGF0YWJhc2UgPSBzZWxmLmRiX2luZm9bZGlkXVsnZGF0bmFtZSddCi0KLSAgICAgICAg ICAgICAgICAgICAgICAgIGlmIGRpZCBub3QgaW4gc2VsZi5kYl9pbmZvOgotICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbihnZXR0ZXh0KAotICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAiQ291bGQgbm90IGZpbmQgdGhlIHNwZWNpZmllZCBkYXRhYmFzZS4i Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgKSkKLQotICAgICAgICBpZiBkYXRhYmFzZSBp cyBOb25lOgotICAgICAgICAgICAgcmFpc2UgQ29ubmVjdGlvbkxvc3Qoc2VsZi5zaWQsIE5vbmUs IE5vbmUpCi0KLSAgICAgICAgbXlfaWQgPSAodSdDT05OOnswfScuZm9ybWF0KGNvbm5faWQpKSBp ZiBjb25uX2lkIGlzIG5vdCBOb25lIGVsc2UgXAotICAgICAgICAgICAgKHUnREI6ezB9Jy5mb3Jt YXQoZGF0YWJhc2UpKQotCi0gICAgICAgIHNlbGYucGluZ2VkID0gZGF0ZXRpbWUuZGF0ZXRpbWUu bm93KCkKLQotICAgICAgICBpZiBteV9pZCBpbiBzZWxmLmNvbm5lY3Rpb25zOgotICAgICAgICAg ICAgcmV0dXJuIHNlbGYuY29ubmVjdGlvbnNbbXlfaWRdCi0gICAgICAgIGVsc2U6Ci0gICAgICAg ICAgICBpZiBhc3luYyBpcyBOb25lOgotICAgICAgICAgICAgICAgIGFzeW5jID0gMSBpZiBjb25u X2lkIGlzIG5vdCBOb25lIGVsc2UgMAotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAg ICBhc3luYyA9IDEgaWYgYXN5bmMgaXMgVHJ1ZSBlbHNlIDAKLSAgICAgICAgICAgIHNlbGYuY29u bmVjdGlvbnNbbXlfaWRdID0gQ29ubmVjdGlvbigKLSAgICAgICAgICAgICAgICBzZWxmLCBteV9p ZCwgZGF0YWJhc2UsIGF1dG9fcmVjb25uZWN0LCBhc3luYywKLSAgICAgICAgICAgICAgICB1c2Vf YmluYXJ5X3BsYWNlaG9sZGVyPXVzZV9iaW5hcnlfcGxhY2Vob2xkZXIsCi0gICAgICAgICAgICAg ICAgYXJyYXlfdG9fc3RyaW5nPWFycmF5X3RvX3N0cmluZwotICAgICAgICAgICAgKQotCi0gICAg ICAgICAgICByZXR1cm4gc2VsZi5jb25uZWN0aW9uc1tteV9pZF0KLQotICAgIGRlZiBfcmVzdG9y ZShzZWxmLCBkYXRhKToKLSAgICAgICAgIiIiCi0gICAgICAgIEhlbHBzIHJlc3RvcmluZyB0byBy ZWNvbm5lY3QgdGhlIGF1dG8tY29ubmVjdCBjb25uZWN0aW9ucyBzbW9vdGhseSBvbgotICAgICAg ICByZWxvYWQvcmVzdGFydCBvZiB0aGUgYXBwIHNlcnZlci4uCi0gICAgICAgICIiIgotICAgICAg ICAjIHJlc3RvcmUgc2VydmVyIHZlcnNpb24gZnJvbSBmbGFzayBzZXNzaW9uIGlmIGZsYXNrIHNl cnZlciB3YXMKLSAgICAgICAgIyByZXN0YXJ0ZWQuIEFzIHdlIG5lZWQgc2VydmVyIHZlcnNpb24g dG8gcmVzb2x2ZSBzcWwgdGVtcGxhdGUgcGF0aHMuCi0KLSAgICAgICAgc2VsZi52ZXIgPSBkYXRh LmdldCgndmVyJywgTm9uZSkKLSAgICAgICAgc2VsZi5zdmVyc2lvbiA9IGRhdGEuZ2V0KCdzdmVy c2lvbicsIE5vbmUpCi0KLSAgICAgICAgaWYgc2VsZi52ZXIgYW5kIG5vdCBzZWxmLnNlcnZlcl90 eXBlOgotICAgICAgICAgICAgZnJvbSBwZ2FkbWluLmJyb3dzZXIuc2VydmVyX2dyb3Vwcy5zZXJ2 ZXJzLnR5cGVzIGltcG9ydCBTZXJ2ZXJUeXBlCi0gICAgICAgICAgICBmb3Igc3QgaW4gU2VydmVy VHlwZS50eXBlcygpOgotICAgICAgICAgICAgICAgIGlmIHN0Lmluc3RhbmNlT2Yoc2VsZi52ZXIp OgotICAgICAgICAgICAgICAgICAgICBzZWxmLnNlcnZlcl90eXBlID0gc3Quc3R5cGUKLSAgICAg ICAgICAgICAgICAgICAgc2VsZi5zZXJ2ZXJfY2xzID0gc3QKLSAgICAgICAgICAgICAgICAgICAg YnJlYWsKLQotICAgICAgICAjIEhtbS4uIHdlIHdpbGwgbm90IGhvbm91ciB0aGlzIHJlcXVlc3Qs IHdoZW4gSSBhbHJlYWR5IGhhdmUKLSAgICAgICAgIyBjb25uZWN0aW9ucwotICAgICAgICBpZiBs ZW4oc2VsZi5jb25uZWN0aW9ucykgIT0gMDoKLSAgICAgICAgICAgIHJldHVybgotCi0gICAgICAg ICMgV2UgbmVlZCB0byBrbm93IGFib3V0IHRoZSBleGlzdGluZyBzZXJ2ZXIgdmFyaWFudCBzdXBw b3J0cyBkdXJpbmcKLSAgICAgICAgIyBmaXJzdCBjb25uZWN0aW9uIGZvciBpZGVudGlmaWNhdGlv bnMuCi0gICAgICAgIGZyb20gcGdhZG1pbi5icm93c2VyLnNlcnZlcl9ncm91cHMuc2VydmVycy50 eXBlcyBpbXBvcnQgU2VydmVyVHlwZQotICAgICAgICBzZWxmLnBpbmdlZCA9IGRhdGV0aW1lLmRh dGV0aW1lLm5vdygpCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIGlmICdwYXNzd29yZCcgaW4g ZGF0YSBhbmQgZGF0YVsncGFzc3dvcmQnXToKLSAgICAgICAgICAgICAgICBkYXRhWydwYXNzd29y ZCddID0gZGF0YVsncGFzc3dvcmQnXS5lbmNvZGUoJ3V0Zi04JykKLSAgICAgICAgZXhjZXB0IEV4 Y2VwdGlvbiBhcyBlOgotICAgICAgICAgICAgY3VycmVudF9hcHAubG9nZ2VyLmV4Y2VwdGlvbihl KQotCi0gICAgICAgIGNvbm5lY3Rpb25zID0gZGF0YVsnY29ubmVjdGlvbnMnXQotICAgICAgICBm b3IgY29ubl9pZCBpbiBjb25uZWN0aW9uczoKLSAgICAgICAgICAgIGNvbm5faW5mbyA9IGNvbm5l Y3Rpb25zW2Nvbm5faWRdCi0gICAgICAgICAgICBjb25uID0gc2VsZi5jb25uZWN0aW9uc1tjb25u X2luZm9bJ2Nvbm5faWQnXV0gPSBDb25uZWN0aW9uKAotICAgICAgICAgICAgICAgIHNlbGYsIGNv bm5faW5mb1snY29ubl9pZCddLCBjb25uX2luZm9bJ2RhdGFiYXNlJ10sCi0gICAgICAgICAgICAg ICAgY29ubl9pbmZvWydhdXRvX3JlY29ubmVjdCddLCBjb25uX2luZm9bJ2FzeW5jJ10sCi0gICAg ICAgICAgICAgICAgdXNlX2JpbmFyeV9wbGFjZWhvbGRlcj1jb25uX2luZm9bJ3VzZV9iaW5hcnlf cGxhY2Vob2xkZXInXSwKLSAgICAgICAgICAgICAgICBhcnJheV90b19zdHJpbmc9Y29ubl9pbmZv WydhcnJheV90b19zdHJpbmcnXQotICAgICAgICAgICAgKQotCi0gICAgICAgICAgICAjIG9ubHkg dHJ5IHRvIHJlY29ubmVjdCBpZiBjb25uZWN0aW9uIHdhcyBjb25uZWN0ZWQgcHJldmlvdXNseSBh bmQKLSAgICAgICAgICAgICMgYXV0b19yZWNvbm5lY3QgaXMgdHJ1ZS4KLSAgICAgICAgICAgIGlm IGNvbm5faW5mb1snd2FzQ29ubmVjdGVkJ10gYW5kIGNvbm5faW5mb1snYXV0b19yZWNvbm5lY3Qn XToKLSAgICAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgICAgIGNvbm4uY29ubmVj dCgKLSAgICAgICAgICAgICAgICAgICAgICAgIHBhc3N3b3JkPWRhdGFbJ3Bhc3N3b3JkJ10sCi0g ICAgICAgICAgICAgICAgICAgICAgICBzZXJ2ZXJfdHlwZXM9U2VydmVyVHlwZS50eXBlcygpCi0g ICAgICAgICAgICAgICAgICAgICkKLSAgICAgICAgICAgICAgICAgICAgIyBUaGlzIHdpbGwgYWxz byB1cGRhdGUgd2FzQ29ubmVjdGVkIGZsYWcgaW4gY29ubmVjdGlvbiBzbwotICAgICAgICAgICAg ICAgICAgICAjIG5vIG5lZWQgdG8gdXBkYXRlIHRoZSBmbGFnIG1hbnVhbGx5LgotICAgICAgICAg ICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZToKLSAgICAgICAgICAgICAgICAgICAgY3VycmVu dF9hcHAubG9nZ2VyLmV4Y2VwdGlvbihlKQotICAgICAgICAgICAgICAgICAgICBzZWxmLmNvbm5l Y3Rpb25zLnBvcChjb25uX2luZm9bJ2Nvbm5faWQnXSkKLQotICAgIGRlZiByZWxlYXNlKHNlbGYs IGRhdGFiYXNlPU5vbmUsIGNvbm5faWQ9Tm9uZSwgZGlkPU5vbmUpOgotICAgICAgICBpZiBkaWQg aXMgbm90IE5vbmU6Ci0gICAgICAgICAgICBpZiBkaWQgaW4gc2VsZi5kYl9pbmZvIGFuZCAnZGF0 bmFtZScgaW4gc2VsZi5kYl9pbmZvW2RpZF06Ci0gICAgICAgICAgICAgICAgZGF0YWJhc2UgPSBz ZWxmLmRiX2luZm9bZGlkXVsnZGF0bmFtZSddCi0gICAgICAgICAgICAgICAgaWYgaGFzYXR0cihz dHIsICdkZWNvZGUnKSBhbmQgXAotICAgICAgICAgICAgICAgICAgICAgICAgbm90IGlzaW5zdGFu Y2UoZGF0YWJhc2UsIHVuaWNvZGUpOgotICAgICAgICAgICAgICAgICAgICBkYXRhYmFzZSA9IGRh dGFiYXNlLmRlY29kZSgndXRmLTgnKQotICAgICAgICAgICAgICAgIGlmIGRhdGFiYXNlIGlzIE5v bmU6Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQotICAgICAgICAgICAgZWxzZToK LSAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2UKLQotICAgICAgICBteV9pZCA9ICh1J0NPTk46 ezB9Jy5mb3JtYXQoY29ubl9pZCkpIGlmIGNvbm5faWQgaXMgbm90IE5vbmUgZWxzZSBcCi0gICAg ICAgICAgICAodSdEQjp7MH0nLmZvcm1hdChkYXRhYmFzZSkpIGlmIGRhdGFiYXNlIGlzIG5vdCBO b25lIGVsc2UgTm9uZQotCi0gICAgICAgIGlmIG15X2lkIGlzIG5vdCBOb25lOgotICAgICAgICAg ICAgaWYgbXlfaWQgaW4gc2VsZi5jb25uZWN0aW9uczoKLSAgICAgICAgICAgICAgICBzZWxmLmNv bm5lY3Rpb25zW215X2lkXS5fcmVsZWFzZSgpCi0gICAgICAgICAgICAgICAgZGVsIHNlbGYuY29u bmVjdGlvbnNbbXlfaWRdCi0gICAgICAgICAgICAgICAgaWYgZGlkIGlzIG5vdCBOb25lOgotICAg ICAgICAgICAgICAgICAgICBkZWwgc2VsZi5kYl9pbmZvW2RpZF0KLQotICAgICAgICAgICAgICAg IGlmIGxlbihzZWxmLmNvbm5lY3Rpb25zKSA9PSAwOgotICAgICAgICAgICAgICAgICAgICBzZWxm LnZlciA9IE5vbmUKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5zdmVyc2lvbiA9IE5vbmUKLSAg ICAgICAgICAgICAgICAgICAgc2VsZi5zZXJ2ZXJfdHlwZSA9IE5vbmUKLSAgICAgICAgICAgICAg ICAgICAgc2VsZi5zZXJ2ZXJfY2xzID0gTm9uZQotICAgICAgICAgICAgICAgICAgICBzZWxmLnBh c3N3b3JkID0gTm9uZQotCi0gICAgICAgICAgICAgICAgc2VsZi51cGRhdGVfc2Vzc2lvbigpCi0K LSAgICAgICAgICAgICAgICByZXR1cm4gVHJ1ZQotICAgICAgICAgICAgZWxzZToKLSAgICAgICAg ICAgICAgICByZXR1cm4gRmFsc2UKLQotICAgICAgICBmb3IgY29uIGluIHNlbGYuY29ubmVjdGlv bnM6Ci0gICAgICAgICAgICBzZWxmLmNvbm5lY3Rpb25zW2Nvbl0uX3JlbGVhc2UoKQotCi0gICAg ICAgIHNlbGYuY29ubmVjdGlvbnMgPSBkaWN0KCkKLSAgICAgICAgc2VsZi52ZXIgPSBOb25lCi0g ICAgICAgIHNlbGYuc3ZlcnNpb24gPSBOb25lCi0gICAgICAgIHNlbGYuc2VydmVyX3R5cGUgPSBO b25lCi0gICAgICAgIHNlbGYuc2VydmVyX2NscyA9IE5vbmUKLSAgICAgICAgc2VsZi5wYXNzd29y ZCA9IE5vbmUKLQotICAgICAgICBzZWxmLnVwZGF0ZV9zZXNzaW9uKCkKLQotICAgICAgICByZXR1 cm4gVHJ1ZQotCi0gICAgZGVmIF91cGRhdGVfcGFzc3dvcmQoc2VsZiwgcGFzc3dkKToKLSAgICAg ICAgc2VsZi5wYXNzd29yZCA9IHBhc3N3ZAotICAgICAgICBmb3IgY29ubl9pZCBpbiBzZWxmLmNv bm5lY3Rpb25zOgotICAgICAgICAgICAgY29ubiA9IHNlbGYuY29ubmVjdGlvbnNbY29ubl9pZF0K LSAgICAgICAgICAgIGlmIGNvbm4uY29ubiBpcyBub3QgTm9uZSBvciBjb25uLndhc0Nvbm5lY3Rl ZCBpcyBUcnVlOgotICAgICAgICAgICAgICAgIGNvbm4ucGFzc3dvcmQgPSBwYXNzd2QKLQotICAg IGRlZiB1cGRhdGVfc2Vzc2lvbihzZWxmKToKLSAgICAgICAgbWFuYWdlcnMgPSBzZXNzaW9uWydf X3Bnc3FsX3NlcnZlcl9tYW5hZ2VycyddIFwKLSAgICAgICAgICAgIGlmICdfX3Bnc3FsX3NlcnZl cl9tYW5hZ2VycycgaW4gc2Vzc2lvbiBlbHNlIGRpY3QoKQotICAgICAgICB1cGRhdGVkX21nciA9 IHNlbGYuYXNfZGljdCgpCi0KLSAgICAgICAgaWYgbm90IHVwZGF0ZWRfbWdyOgotICAgICAgICAg ICAgaWYgc2VsZi5zaWQgaW4gbWFuYWdlcnM6Ci0gICAgICAgICAgICAgICAgbWFuYWdlcnMucG9w KHNlbGYuc2lkKQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgbWFuYWdlcnNbc2VsZi5zaWRd ID0gdXBkYXRlZF9tZ3IKLSAgICAgICAgc2Vzc2lvblsnX19wZ3NxbF9zZXJ2ZXJfbWFuYWdlcnMn XSA9IG1hbmFnZXJzCi0gICAgICAgIHNlc3Npb24uZm9yY2Vfd3JpdGUgPSBUcnVlCi0KLSAgICBk ZWYgdXRpbGl0eShzZWxmLCBvcGVyYXRpb24pOgotICAgICAgICAiIiIKLSAgICAgICAgdXRpbGl0 eShvcGVyYXRpb24pCi0KLSAgICAgICAgUmV0dXJuczogbmFtZSBvZiB0aGUgdXRpbGl0eSB3aGlj aCB1c2VkIGZvciB0aGUgb3BlcmF0aW9uCi0gICAgICAgICIiIgotICAgICAgICBpZiBzZWxmLnNl cnZlcl9jbHMgaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICByZXR1cm4gc2VsZi5zZXJ2ZXJfY2xz LnV0aWxpdHkob3BlcmF0aW9uLCBzZWxmLnN2ZXJzaW9uKQotCi0gICAgICAgIHJldHVybiBOb25l Ci0KLSAgICBkZWYgZXhwb3J0X3Bhc3N3b3JkX2VudihzZWxmLCBlbnYpOgotICAgICAgICBpZiBz ZWxmLnBhc3N3b3JkOgotICAgICAgICAgICAgcGFzc3dvcmQgPSBkZWNyeXB0KAotICAgICAgICAg ICAgICAgIHNlbGYucGFzc3dvcmQsIGN1cnJlbnRfdXNlci5wYXNzd29yZAotICAgICAgICAgICAg KS5kZWNvZGUoKQotICAgICAgICAgICAgb3MuZW52aXJvbltzdHIoZW52KV0gPSBwYXNzd29yZAor ZnJvbSAuLmFic3RyYWN0IGltcG9ydCBCYXNlRHJpdmVyCitmcm9tIC5jb25uZWN0aW9uIGltcG9y dCBDb25uZWN0aW9uCitmcm9tIC5zZXJ2ZXJfbWFuYWdlciBpbXBvcnQgU2VydmVyTWFuYWdlcgog CiAKIGNsYXNzIERyaXZlcihCYXNlRHJpdmVyKToKQEAgLTIxNjQsOCArMjAyLDkgQEAgY2xhc3Mg RHJpdmVyKEJhc2VEcml2ZXIpOgogICAgICAgICAgICAgICAgIGNvbnRpbnVlCiAKICAgICAgICAg ICAgIGlmIGN1cnJfdGltZSAtIHNlc3NfbWdyWydwaW5nZWQnXSA+PSBzZXNzaW9uX2lkbGVfdGlt ZW91dDoKLSAgICAgICAgICAgICAgICBmb3IgbWdyIGluIFttIGZvciBtIGluIHNlc3NfbWdyIGlm IGlzaW5zdGFuY2UobSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgU2VydmVyTWFuYWdlcildOgorICAgICAgICAgICAgICAgIGZv ciBtZ3IgaW4gWworICAgICAgICAgICAgICAgICAgICAgICAgbSBmb3IgbSBpbiBzZXNzX21nciBp ZiBpc2luc3RhbmNlKG0sIFNlcnZlck1hbmFnZXIpCisgICAgICAgICAgICAgICAgXToKICAgICAg ICAgICAgICAgICAgICAgbWdyLnJlbGVhc2UoKQogCiAgICAgQHN0YXRpY21ldGhvZApkaWZmIC0t Z2l0IGEvd2ViL3BnYWRtaW4vdXRpbHMvZHJpdmVyL3BzeWNvcGcyL2Nvbm5lY3Rpb24ucHkgYi93 ZWIvcGdhZG1pbi91dGlscy9kcml2ZXIvcHN5Y29wZzIvY29ubmVjdGlvbi5weQpuZXcgZmlsZSBt b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNGM5NTczCi0tLSAvZGV2L251bGwKKysrIGIvd2Vi L3BnYWRtaW4vdXRpbHMvZHJpdmVyL3BzeWNvcGcyL2Nvbm5lY3Rpb24ucHkKQEAgLTAsMCArMSwx NjgyIEBACisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIworIyBwZ0FkbWluIDQgLSBQb3N0Z3JlU1FMIFRv b2xzCisjCisjIENvcHlyaWdodCAoQykgMjAxMyAtIDIwMTgsIFRoZSBwZ0FkbWluIERldmVsb3Bt ZW50IFRlYW0KKyMgVGhpcyBzb2Z0d2FyZSBpcyByZWxlYXNlZCB1bmRlciB0aGUgUG9zdGdyZVNR TCBMaWNlbmNlCisjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisiIiIKK0ltcGxlbWVudGF0aW9uIG9m IENvbm5lY3Rpb24uCitJdCBpcyBhIHdyYXBwZXIgYXJvdW5kIHRoZSBhY3R1YWwgcHN5Y29wZzIg ZHJpdmVyLCBhbmQgY29ubmVjdGlvbgorb2JqZWN0LgorIiIiCisKK2ltcG9ydCByYW5kb20KK2lt cG9ydCBzZWxlY3QKK2ltcG9ydCBzeXMKK2Zyb20gY29sbGVjdGlvbnMgaW1wb3J0IGRlcXVlCitp bXBvcnQgc2ltcGxlanNvbiBhcyBqc29uCitpbXBvcnQgcHN5Y29wZzIKK2Zyb20gZmxhc2sgaW1w b3J0IGcsIGN1cnJlbnRfYXBwCitmcm9tIGZsYXNrX2JhYmVsIGltcG9ydCBnZXR0ZXh0Citmcm9t IGZsYXNrX3NlY3VyaXR5IGltcG9ydCBjdXJyZW50X3VzZXIKK2Zyb20gcGdhZG1pbi51dGlscy5j cnlwdG8gaW1wb3J0IGRlY3J5cHQKK2Zyb20gcHN5Y29wZzIuZXh0ZW5zaW9ucyBpbXBvcnQgYWRh cHQsIGVuY29kaW5ncworCitpbXBvcnQgY29uZmlnCitmcm9tIHBnYWRtaW4ubW9kZWwgaW1wb3J0 IFNlcnZlciwgVXNlcgorZnJvbSBwZ2FkbWluLnV0aWxzLmV4Y2VwdGlvbiBpbXBvcnQgQ29ubmVj dGlvbkxvc3QKK2Zyb20gcGdhZG1pbi51dGlscyBpbXBvcnQgZ2V0X2NvbXBsZXRlX2ZpbGVfcGF0 aAorZnJvbSAuLmFic3RyYWN0IGltcG9ydCBCYXNlRHJpdmVyLCBCYXNlQ29ubmVjdGlvbgorZnJv bSAuY3Vyc29yIGltcG9ydCBEaWN0Q3Vyc29yCitmcm9tIC50eXBlY2FzdCBpbXBvcnQgcmVnaXN0 ZXJfZ2xvYmFsX3R5cGVjYXN0ZXJzLCBcCisgICAgcmVnaXN0ZXJfc3RyaW5nX3R5cGVjYXN0ZXJz LCByZWdpc3Rlcl9iaW5hcnlfdHlwZWNhc3RlcnMsIFwKKyAgICByZWdpc3Rlcl9hcnJheV90b19z dHJpbmdfdHlwZWNhc3RlcnMsIEFMTF9KU09OX1RZUEVTCisKKworaWYgc3lzLnZlcnNpb25faW5m byA8ICgzLCk6CisgICAgIyBQeXRob24yIGluLWJ1aWx0IGNzdiBtb2R1bGUgZG8gbm90IGhhbmRs ZSB1bmljb2RlCisgICAgIyBiYWNrcG9ydHMuY3N2IG1vZHVsZSBwb3J0ZWQgZnJvbSBQWTMgY3N2 IG1vZHVsZSBmb3IgdW5pY29kZSBoYW5kbGluZworICAgIGZyb20gYmFja3BvcnRzIGltcG9ydCBj c3YKKyAgICBmcm9tIFN0cmluZ0lPIGltcG9ydCBTdHJpbmdJTworICAgIElTX1BZMiA9IFRydWUK K2Vsc2U6CisgICAgZnJvbSBpbyBpbXBvcnQgU3RyaW5nSU8KKyAgICBpbXBvcnQgY3N2CisgICAg SVNfUFkyID0gRmFsc2UKKworXyA9IGdldHRleHQKKworCisjIFJlZ2lzdGVyIGdsb2JhbCB0eXBl IGNhc3RlciB3aGljaCB3aWxsIGJlIGFwcGxpY2FibGUgdG8gYWxsIGNvbm5lY3Rpb25zLgorcmVn aXN0ZXJfZ2xvYmFsX3R5cGVjYXN0ZXJzKCkKKworCitjbGFzcyBDb25uZWN0aW9uKEJhc2VDb25u ZWN0aW9uKToKKyAgICAiIiIKKyAgICBjbGFzcyBDb25uZWN0aW9uKG9iamVjdCkKKworICAgICAg ICBBIHdyYXBwZXIgY2xhc3MsIHdoaWNoIHdyYXBzIHRoZSBwc3ljb3BnMiBjb25uZWN0aW9uIG9i amVjdCwgYW5kCisgICAgICAgIGRlbGVnYXRlIHRoZSBleGVjdXRpb24gdG8gdGhlIGFjdHVhbCBj b25uZWN0aW9uIG9iamVjdCwgd2hlbiByZXF1aXJlZC4KKworICAgIE1ldGhvZHM6CisgICAgLS0t LS0tLQorICAgICogY29ubmVjdCgqKmt3YXJncykKKyAgICAgIC0gQ29ubmVjdCB0aGUgUG9zdGdy ZVNRTC9FREIgUG9zdGdyZXMgQWR2YW5jZWQgU2VydmVyIHVzaW5nIHRoZSBwc3ljb3BnMgorICAg ICAgZHJpdmVyCisKKyAgICAqIGV4ZWN1dGVfc2NhbGFyKHF1ZXJ5LCBwYXJhbXMsIGZvcm1hdHRl ZF9leGNlcHRpb25fbXNnKQorICAgICAgLSBFeGVjdXRlIHRoZSBnaXZlbiBxdWVyeSBhbmQgcmV0 dXJucyBzaW5nbGUgZGF0dW0gcmVzdWx0CisKKyAgICAqIGV4ZWN1dGVfYXN5bmMocXVlcnksIHBh cmFtcywgZm9ybWF0dGVkX2V4Y2VwdGlvbl9tc2cpCisgICAgICAtIEV4ZWN1dGUgdGhlIGdpdmVu IHF1ZXJ5IGFzeW5jaHJvbm91c2x5IGFuZCByZXR1cm5zIHJlc3VsdC4KKworICAgICogZXhlY3V0 ZV92b2lkKHF1ZXJ5LCBwYXJhbXMsIGZvcm1hdHRlZF9leGNlcHRpb25fbXNnKQorICAgICAgLSBF eGVjdXRlIHRoZSBnaXZlbiBxdWVyeSB3aXRoIG5vIHJlc3VsdC4KKworICAgICogZXhlY3V0ZV8y ZGFycmF5KHF1ZXJ5LCBwYXJhbXMsIGZvcm1hdHRlZF9leGNlcHRpb25fbXNnKQorICAgICAgLSBF eGVjdXRlIHRoZSBnaXZlbiBxdWVyeSBhbmQgcmV0dXJucyB0aGUgcmVzdWx0IGFzIGEgMiBkaW1l bnNpb25hbAorICAgICAgICBhcnJheS4KKworICAgICogZXhlY3V0ZV9kaWN0KHF1ZXJ5LCBwYXJh bXMsIGZvcm1hdHRlZF9leGNlcHRpb25fbXNnKQorICAgICAgLSBFeGVjdXRlIHRoZSBnaXZlbiBx dWVyeSBhbmQgcmV0dXJucyB0aGUgcmVzdWx0IGFzIGFuIGFycmF5IG9mIGRpY3QKKyAgICAgICAg KGNvbHVtbiBuYW1lIC0+IHZhbHVlKSBmb3JtYXQuCisKKyAgICAqIGNvbm5lY3RlZCgpCisgICAg ICAtIEdldCB0aGUgc3RhdHVzIG9mIHRoZSBjb25uZWN0aW9uLgorICAgICAgICBSZXR1cm5zIFRy dWUgaWYgY29ubmVjdGVkLCBvdGhlcndpc2UgRmFsc2UuCisKKyAgICAqIHJlc2V0KCkKKyAgICAg IC0gUmVjb25uZWN0IHRoZSBkYXRhYmFzZSBzZXJ2ZXIgKGlmIHBvc3NpYmxlKQorCisgICAgKiB0 cmFuc2FjdGlvbl9zdGF0dXMoKQorICAgICAgLSBUcmFuc2FjdGlvbiBTdGF0dXMKKworICAgICog cGluZygpCisgICAgICAtIFBpbmcgdGhlIHNlcnZlci4KKworICAgICogX3JlbGVhc2UoKQorICAg ICAgLSBSZWxlYXNlIHRoZSBjb25uZWN0aW9uIG9iamVjdCBvZiBwc3ljb3BnMgorCisgICAgKiBf cmVjb25uZWN0KCkKKyAgICAgIC0gQXR0ZW1wdCB0byByZWNvbm5lY3QgdG8gdGhlIGRhdGFiYXNl CisKKyAgICAqIF93YWl0KGNvbm4pCisgICAgICAtIFRoaXMgbWV0aG9kIGlzIHVzZWQgdG8gd2Fp dCBmb3IgYXN5bmNocm9ub3VzIGNvbm5lY3Rpb24uIFRoaXMgaXMgYQorICAgICAgICBibG9ja2lu ZyBjYWxsLgorCisgICAgKiBfd2FpdF90aW1lb3V0KGNvbm4pCisgICAgICAtIFRoaXMgbWV0aG9k IGlzIHVzZWQgdG8gd2FpdCBmb3IgYXN5bmNocm9ub3VzIGNvbm5lY3Rpb24gd2l0aCB0aW1lb3V0 LgorICAgICAgICBUaGlzIGlzIGEgbm9uIGJsb2NraW5nIGNhbGwuCisKKyAgICAqIHBvbGwoZm9y bWF0dGVkX2V4Y2VwdGlvbl9tc2cpCisgICAgICAtIFRoaXMgbWV0aG9kIGlzIHVzZWQgdG8gcG9s bCB0aGUgZGF0YSBvZiBxdWVyeSBydW5uaW5nIG9uIGFzeW5jaHJvbm91cworICAgICAgICBjb25u ZWN0aW9uLgorCisgICAgKiBzdGF0dXNfbWVzc2FnZSgpCisgICAgICAtIFJldHVybnMgdGhlIHN0 YXR1cyBtZXNzYWdlIHJldHVybmVkIGJ5IHRoZSBsYXN0IGNvbW1hbmQgZXhlY3V0ZWQgb24KKyAg ICAgIHRoZSBzZXJ2ZXIuCisKKyAgICAqIHJvd3NfYWZmZWN0ZWQoKQorICAgICAgLSBSZXR1cm5z IHRoZSBubyBvZiByb3dzIGFmZmVjdGVkIGJ5IHRoZSBsYXN0IGNvbW1hbmQgZXhlY3V0ZWQgb24K KyAgICAgIHRoZSBzZXJ2ZXIuCisKKyAgICAqIGNhbmNlbF90cmFuc2FjdGlvbihjb25uX2lkLCBk aWQ9Tm9uZSkKKyAgICAgIC0gVGhpcyBtZXRob2QgaXMgdXNlZCB0byBjYW5jZWwgdGhlIHRyYW5z YWN0aW9uIGZvciB0aGUKKyAgICAgICAgc3BlY2lmaWVkIGNvbm5lY3Rpb24gaWQgYW5kIGRhdGFi YXNlIGlkLgorCisgICAgKiBtZXNzYWdlcygpCisgICAgICAtIFJldHVybnMgdGhlIGxpc3Qgb2Yg bWVzc2FnZXMvbm90aWNlcyBzZW5kcyBmcm9tIHRoZSBQb3N0Z3JlU1FMIGRhdGFiYXNlCisgICAg ICAgIHNlcnZlci4KKworICAgICogX2Zvcm1hdHRlZF9leGNlcHRpb25fbXNnKGV4Y2VwdGlvbl9v YmosIGZvcm1hdHRlZF9tc2cpCisgICAgICAtIFRoaXMgbWV0aG9kIGlzIHVzZWQgdG8gcGFyc2Ug dGhlIHBzeWNvcGcyLkVycm9yIG9iamVjdCBhbmQgcmV0dXJucyB0aGUKKyAgICAgICAgZm9ybWF0 dGVkIGVycm9yIG1lc3NhZ2UgaWYgZmxhZyBpcyBzZXQgdG8gdHJ1ZSBlbHNlIHJldHVybgorICAg ICAgICBub3JtYWwgZXJyb3IgbWVzc2FnZS4KKworICAgICIiIgorCisgICAgZGVmIF9faW5pdF9f KHNlbGYsIG1hbmFnZXIsIGNvbm5faWQsIGRiLCBhdXRvX3JlY29ubmVjdD1UcnVlLCBhc3luYz0w LAorICAgICAgICAgICAgICAgICB1c2VfYmluYXJ5X3BsYWNlaG9sZGVyPUZhbHNlLCBhcnJheV90 b19zdHJpbmc9RmFsc2UpOgorICAgICAgICBhc3NlcnQgKG1hbmFnZXIgaXMgbm90IE5vbmUpCisg ICAgICAgIGFzc2VydCAoY29ubl9pZCBpcyBub3QgTm9uZSkKKworICAgICAgICBzZWxmLmNvbm5f aWQgPSBjb25uX2lkCisgICAgICAgIHNlbGYubWFuYWdlciA9IG1hbmFnZXIKKyAgICAgICAgc2Vs Zi5kYiA9IGRiIGlmIGRiIGlzIG5vdCBOb25lIGVsc2UgbWFuYWdlci5kYgorICAgICAgICBzZWxm LmNvbm4gPSBOb25lCisgICAgICAgIHNlbGYuYXV0b19yZWNvbm5lY3QgPSBhdXRvX3JlY29ubmVj dAorICAgICAgICBzZWxmLmFzeW5jID0gYXN5bmMKKyAgICAgICAgc2VsZi5fX2FzeW5jX2N1cnNv ciA9IE5vbmUKKyAgICAgICAgc2VsZi5fX2FzeW5jX3F1ZXJ5X2lkID0gTm9uZQorICAgICAgICBz ZWxmLl9fYmFja2VuZF9waWQgPSBOb25lCisgICAgICAgIHNlbGYuZXhlY3V0aW9uX2Fib3J0ZWQg PSBGYWxzZQorICAgICAgICBzZWxmLnJvd19jb3VudCA9IDAKKyAgICAgICAgc2VsZi5fX25vdGlj ZXMgPSBOb25lCisgICAgICAgIHNlbGYucGFzc3dvcmQgPSBOb25lCisgICAgICAgICMgVGhpcyBm bGFnIGluZGljYXRlcyB0aGUgY29ubmVjdGlvbiBzdGF0dXMgKGNvbm5lY3RlZC9kaXNjb25uZWN0 ZWQpLgorICAgICAgICBzZWxmLndhc0Nvbm5lY3RlZCA9IEZhbHNlCisgICAgICAgICMgVGhpcyBm bGFnIGluZGljYXRlcyB0aGUgY29ubmVjdGlvbiByZWNvbm5lY3Rpbmcgc3RhdHVzLgorICAgICAg ICBzZWxmLnJlY29ubmVjdGluZyA9IEZhbHNlCisgICAgICAgIHNlbGYudXNlX2JpbmFyeV9wbGFj ZWhvbGRlciA9IHVzZV9iaW5hcnlfcGxhY2Vob2xkZXIKKyAgICAgICAgc2VsZi5hcnJheV90b19z dHJpbmcgPSBhcnJheV90b19zdHJpbmcKKworICAgICAgICBzdXBlcihDb25uZWN0aW9uLCBzZWxm KS5fX2luaXRfXygpCisKKyAgICBkZWYgYXNfZGljdChzZWxmKToKKyAgICAgICAgIiIiCisgICAg ICAgIFJldHVybnMgdGhlIGRpY3Rpb25hcnkgb2JqZWN0IHJlcHJlc2VudGluZyB0aGlzIG9iamVj dC4KKyAgICAgICAgIiIiCisgICAgICAgICMgSW4gY2FzZSwgaXQgY2Fubm90IGJlIGF1dG8gcmVj b25uZWN0YWJsZSwgb3IgYWxyZWFkeSBiZWVuIHJlbGVhc2VkLAorICAgICAgICAjIHRoZW4gd2Ug d2lsbCByZXR1cm4gTm9uZS4KKyAgICAgICAgaWYgbm90IHNlbGYuYXV0b19yZWNvbm5lY3QgYW5k IG5vdCBzZWxmLmNvbm46CisgICAgICAgICAgICByZXR1cm4gTm9uZQorCisgICAgICAgIHJlcyA9 IGRpY3QoKQorICAgICAgICByZXNbJ2Nvbm5faWQnXSA9IHNlbGYuY29ubl9pZAorICAgICAgICBy ZXNbJ2RhdGFiYXNlJ10gPSBzZWxmLmRiCisgICAgICAgIHJlc1snYXN5bmMnXSA9IHNlbGYuYXN5 bmMKKyAgICAgICAgcmVzWyd3YXNDb25uZWN0ZWQnXSA9IHNlbGYud2FzQ29ubmVjdGVkCisgICAg ICAgIHJlc1snYXV0b19yZWNvbm5lY3QnXSA9IHNlbGYuYXV0b19yZWNvbm5lY3QKKyAgICAgICAg cmVzWyd1c2VfYmluYXJ5X3BsYWNlaG9sZGVyJ10gPSBzZWxmLnVzZV9iaW5hcnlfcGxhY2Vob2xk ZXIKKyAgICAgICAgcmVzWydhcnJheV90b19zdHJpbmcnXSA9IHNlbGYuYXJyYXlfdG9fc3RyaW5n CisKKyAgICAgICAgcmV0dXJuIHJlcworCisgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgorICAgICAg ICByZXR1cm4gIlBHIENvbm5lY3Rpb246IHswfSAoezF9KSAtPiB7Mn0gKGFqYXg6ezN9KSIuZm9y bWF0KAorICAgICAgICAgICAgc2VsZi5jb25uX2lkLCBzZWxmLmRiLAorICAgICAgICAgICAgJ0Nv bm5lY3RlZCcgaWYgc2VsZi5jb25uIGFuZCBub3Qgc2VsZi5jb25uLmNsb3NlZCBlbHNlCisgICAg ICAgICAgICAiRGlzY29ubmVjdGVkIiwKKyAgICAgICAgICAgIHNlbGYuYXN5bmMKKyAgICAgICAg KQorCisgICAgZGVmIF9fc3RyX18oc2VsZik6CisgICAgICAgIHJldHVybiAiUEcgQ29ubmVjdGlv bjogezB9ICh7MX0pIC0+IHsyfSAoYWpheDp7M30pIi5mb3JtYXQoCisgICAgICAgICAgICBzZWxm LmNvbm5faWQsIHNlbGYuZGIsCisgICAgICAgICAgICAnQ29ubmVjdGVkJyBpZiBzZWxmLmNvbm4g YW5kIG5vdCBzZWxmLmNvbm4uY2xvc2VkIGVsc2UKKyAgICAgICAgICAgICJEaXNjb25uZWN0ZWQi LAorICAgICAgICAgICAgc2VsZi5hc3luYworICAgICAgICApCisKKyAgICBkZWYgY29ubmVjdChz ZWxmLCAqKmt3YXJncyk6CisgICAgICAgIGlmIHNlbGYuY29ubjoKKyAgICAgICAgICAgIGlmIHNl bGYuY29ubi5jbG9zZWQ6CisgICAgICAgICAgICAgICAgc2VsZi5jb25uID0gTm9uZQorICAgICAg ICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByZXR1cm4gVHJ1ZSwgTm9uZQorCisgICAgICAg IHBnX2Nvbm4gPSBOb25lCisgICAgICAgIHBhc3N3b3JkID0gTm9uZQorICAgICAgICBwYXNzZmls ZSA9IE5vbmUKKyAgICAgICAgbWdyID0gc2VsZi5tYW5hZ2VyCisKKyAgICAgICAgZW5jcGFzcyA9 IGt3YXJnc1sncGFzc3dvcmQnXSBpZiAncGFzc3dvcmQnIGluIGt3YXJncyBlbHNlIE5vbmUKKyAg ICAgICAgcGFzc2ZpbGUgPSBrd2FyZ3NbJ3Bhc3NmaWxlJ10gaWYgJ3Bhc3NmaWxlJyBpbiBrd2Fy Z3MgZWxzZSBOb25lCisKKyAgICAgICAgaWYgZW5jcGFzcyBpcyBOb25lOgorICAgICAgICAgICAg ZW5jcGFzcyA9IHNlbGYucGFzc3dvcmQgb3IgZ2V0YXR0cihtZ3IsICdwYXNzd29yZCcsIE5vbmUp CisKKyAgICAgICAgIyBSZXNldCB0aGUgZXhpc3RpbmcgY29ubmVjdGlvbiBwYXNzd29yZAorICAg ICAgICBpZiBzZWxmLnJlY29ubmVjdGluZyBpcyBub3QgRmFsc2U6CisgICAgICAgICAgICBzZWxm LnBhc3N3b3JkID0gTm9uZQorCisgICAgICAgIGlmIGVuY3Bhc3M6CisgICAgICAgICAgICAjIEZl dGNoIExvZ2dlZCBpbiBVc2VyIERldGFpbHMuCisgICAgICAgICAgICB1c2VyID0gVXNlci5xdWVy eS5maWx0ZXJfYnkoaWQ9Y3VycmVudF91c2VyLmlkKS5maXJzdCgpCisKKyAgICAgICAgICAgIGlm IHVzZXIgaXMgTm9uZToKKyAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2UsIGdldHRleHQoIlVu YXV0aG9yaXplZCByZXF1ZXN0LiIpCisKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAg ICBwYXNzd29yZCA9IGRlY3J5cHQoZW5jcGFzcywgdXNlci5wYXNzd29yZCkKKyAgICAgICAgICAg ICAgICAjIEhhbmRsaW5nIG9mIG5vbiBhc2NpaSBwYXNzd29yZCAoUHl0aG9uMikKKyAgICAgICAg ICAgICAgICBpZiBoYXNhdHRyKHN0ciwgJ2RlY29kZScpOgorICAgICAgICAgICAgICAgICAgICBw YXNzd29yZCA9IHBhc3N3b3JkLmRlY29kZSgndXRmLTgnKS5lbmNvZGUoJ3V0Zi04JykKKyAgICAg ICAgICAgICAgICAjIHBhc3N3b3JkIGlzIGluIGJ5dGVzLCBmb3IgcHl0aG9uMyB3ZSBuZWVkIGl0 IGluIHN0cmluZworICAgICAgICAgICAgICAgIGVsaWYgaXNpbnN0YW5jZShwYXNzd29yZCwgYnl0 ZXMpOgorICAgICAgICAgICAgICAgICAgICBwYXNzd29yZCA9IHBhc3N3b3JkLmRlY29kZSgpCisK KyAgICAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZToKKyAgICAgICAgICAgICAgICBjdXJy ZW50X2FwcC5sb2dnZXIuZXhjZXB0aW9uKGUpCisgICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNl LCBcCisgICAgICAgICAgICAgICAgICAgIF8oCisgICAgICAgICAgICAgICAgICAgICAgICAiRmFp bGVkIHRvIGRlY3J5cHQgdGhlIHNhdmVkIHBhc3N3b3JkLlxuRXJyb3I6IHswfSIKKyAgICAgICAg ICAgICAgICAgICAgKS5mb3JtYXQoc3RyKGUpKQorCisgICAgICAgICMgSWYgbm8gcGFzc3dvcmQg Y3JlZGVudGlhbCBpcyBmb3VuZCB0aGVuIGNvbm5lY3QgcmVxdWVzdCBtaWdodAorICAgICAgICAj IGNvbWUgZnJvbSBRdWVyeSB0b29sLCBWaWV3RGF0YSBncmlkLCBkZWJ1Z2dlciBldGMgdG9vbHMu CisgICAgICAgICMgd2Ugd2lsbCBjaGVjayBmb3IgcGdwYXNzIGZpbGUgYXZhaWxhYmlsaXR5IGZy b20gY29ubmVjdGlvbiBtYW5hZ2VyCisgICAgICAgICMgaWYgaXQncyBwcmVzZW50IHRoZW4gd2Ug d2lsbCB1c2UgaXQKKyAgICAgICAgaWYgbm90IHBhc3N3b3JkIGFuZCBub3QgZW5jcGFzcyBhbmQg bm90IHBhc3NmaWxlOgorICAgICAgICAgICAgcGFzc2ZpbGUgPSBtZ3IucGFzc2ZpbGUgaWYgbWdy LnBhc3NmaWxlIGVsc2UgTm9uZQorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGlmIGhhc2F0 dHIoc3RyLCAnZGVjb2RlJyk6CisgICAgICAgICAgICAgICAgZGF0YWJhc2UgPSBzZWxmLmRiLmVu Y29kZSgndXRmLTgnKQorICAgICAgICAgICAgICAgIHVzZXIgPSBtZ3IudXNlci5lbmNvZGUoJ3V0 Zi04JykKKyAgICAgICAgICAgICAgICBjb25uX2lkID0gc2VsZi5jb25uX2lkLmVuY29kZSgndXRm LTgnKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBkYXRhYmFzZSA9IHNlbGYu ZGIKKyAgICAgICAgICAgICAgICB1c2VyID0gbWdyLnVzZXIKKyAgICAgICAgICAgICAgICBjb25u X2lkID0gc2VsZi5jb25uX2lkCisKKyAgICAgICAgICAgIGltcG9ydCBvcworICAgICAgICAgICAg b3MuZW52aXJvblsnUEdBUFBOQU1FJ10gPSAnezB9IC0gezF9Jy5mb3JtYXQoCisgICAgICAgICAg ICAgICAgY29uZmlnLkFQUF9OQU1FLCBjb25uX2lkKQorCisgICAgICAgICAgICBwZ19jb25uID0g cHN5Y29wZzIuY29ubmVjdCgKKyAgICAgICAgICAgICAgICBob3N0PW1nci5ob3N0LAorICAgICAg ICAgICAgICAgIGhvc3RhZGRyPW1nci5ob3N0YWRkciwKKyAgICAgICAgICAgICAgICBwb3J0PW1n ci5wb3J0LAorICAgICAgICAgICAgICAgIGRhdGFiYXNlPWRhdGFiYXNlLAorICAgICAgICAgICAg ICAgIHVzZXI9dXNlciwKKyAgICAgICAgICAgICAgICBwYXNzd29yZD1wYXNzd29yZCwKKyAgICAg ICAgICAgICAgICBhc3luYz1zZWxmLmFzeW5jLAorICAgICAgICAgICAgICAgIHBhc3NmaWxlPWdl dF9jb21wbGV0ZV9maWxlX3BhdGgocGFzc2ZpbGUpLAorICAgICAgICAgICAgICAgIHNzbG1vZGU9 bWdyLnNzbF9tb2RlLAorICAgICAgICAgICAgICAgIHNzbGNlcnQ9Z2V0X2NvbXBsZXRlX2ZpbGVf cGF0aChtZ3Iuc3NsY2VydCksCisgICAgICAgICAgICAgICAgc3Nsa2V5PWdldF9jb21wbGV0ZV9m aWxlX3BhdGgobWdyLnNzbGtleSksCisgICAgICAgICAgICAgICAgc3Nscm9vdGNlcnQ9Z2V0X2Nv bXBsZXRlX2ZpbGVfcGF0aChtZ3Iuc3Nscm9vdGNlcnQpLAorICAgICAgICAgICAgICAgIHNzbGNy bD1nZXRfY29tcGxldGVfZmlsZV9wYXRoKG1nci5zc2xjcmwpLAorICAgICAgICAgICAgICAgIHNz bGNvbXByZXNzaW9uPVRydWUgaWYgbWdyLnNzbGNvbXByZXNzaW9uIGVsc2UgRmFsc2UsCisgICAg ICAgICAgICAgICAgc2VydmljZT1tZ3Iuc2VydmljZQorICAgICAgICAgICAgKQorCisgICAgICAg ICAgICAjIElmIGNvbm5lY3Rpb24gaXMgYXN5bmNocm9ub3VzIHRoZW4gd2Ugd2lsbCBoYXZlIHRv IHdhaXQKKyAgICAgICAgICAgICMgdW50aWwgdGhlIGNvbm5lY3Rpb24gaXMgcmVhZHkgdG8gdXNl LgorICAgICAgICAgICAgaWYgc2VsZi5hc3luYyA9PSAxOgorICAgICAgICAgICAgICAgIHNlbGYu X3dhaXQocGdfY29ubikKKworICAgICAgICBleGNlcHQgcHN5Y29wZzIuRXJyb3IgYXMgZToKKyAg ICAgICAgICAgIGlmIGUucGdlcnJvcjoKKyAgICAgICAgICAgICAgICBtc2cgPSBlLnBnZXJyb3IK KyAgICAgICAgICAgIGVsaWYgZS5kaWFnLm1lc3NhZ2VfZGV0YWlsOgorICAgICAgICAgICAgICAg IG1zZyA9IGUuZGlhZy5tZXNzYWdlX2RldGFpbAorICAgICAgICAgICAgZWxzZToKKyAgICAgICAg ICAgICAgICBtc2cgPSBzdHIoZSkKKyAgICAgICAgICAgIGN1cnJlbnRfYXBwLmxvZ2dlci5pbmZv KAorICAgICAgICAgICAgICAgIHUiRmFpbGVkIHRvIGNvbm5lY3QgdG8gdGhlIGRhdGFiYXNlIHNl cnZlcigje3NlcnZlcl9pZH0pIGZvciAiCisgICAgICAgICAgICAgICAgdSJjb25uZWN0aW9uICh7 Y29ubl9pZH0pIHdpdGggZXJyb3IgbWVzc2FnZSBhcyBiZWxvdyIKKyAgICAgICAgICAgICAgICB1 Ijp7bXNnfSIuZm9ybWF0KAorICAgICAgICAgICAgICAgICAgICBzZXJ2ZXJfaWQ9c2VsZi5tYW5h Z2VyLnNpZCwKKyAgICAgICAgICAgICAgICAgICAgY29ubl9pZD1jb25uX2lkLAorICAgICAgICAg ICAgICAgICAgICBtc2c9bXNnLmRlY29kZSgndXRmLTgnKSBpZiBoYXNhdHRyKHN0ciwgJ2RlY29k ZScpIGVsc2UgbXNnCisgICAgICAgICAgICAgICAgKQorICAgICAgICAgICAgKQorICAgICAgICAg ICAgcmV0dXJuIEZhbHNlLCBtc2cKKworICAgICAgICAjIE92ZXJ3cml0ZSBjb25uZWN0aW9uIG5v dGljZSBhdHRyIHRvIHN1cHBvcnQKKyAgICAgICAgIyBtb3JlIHRoYW4gNTAgbm90aWNlcyBhdCBh IHRpbWUKKyAgICAgICAgcGdfY29ubi5ub3RpY2VzID0gZGVxdWUoW10sIHNlbGYuQVNZTkNfTk9U SUNFX01BWExFTkdUSCkKKworICAgICAgICBzZWxmLmNvbm4gPSBwZ19jb25uCisgICAgICAgIHNl bGYud2FzQ29ubmVjdGVkID0gVHJ1ZQorICAgICAgICB0cnk6CisgICAgICAgICAgICBzdGF0dXMs IG1zZyA9IHNlbGYuX2luaXRpYWxpemUoY29ubl9pZCwgKiprd2FyZ3MpCisgICAgICAgIGV4Y2Vw dCBFeGNlcHRpb24gYXMgZToKKyAgICAgICAgICAgIGN1cnJlbnRfYXBwLmxvZ2dlci5leGNlcHRp b24oZSkKKyAgICAgICAgICAgIHNlbGYuY29ubiA9IE5vbmUKKyAgICAgICAgICAgIGlmIG5vdCBz ZWxmLnJlY29ubmVjdGluZzoKKyAgICAgICAgICAgICAgICBzZWxmLndhc0Nvbm5lY3RlZCA9IEZh bHNlCisgICAgICAgICAgICByYWlzZSBlCisKKyAgICAgICAgaWYgc3RhdHVzOgorICAgICAgICAg ICAgbWdyLl91cGRhdGVfcGFzc3dvcmQoZW5jcGFzcykKKyAgICAgICAgZWxzZToKKyAgICAgICAg ICAgIGlmIG5vdCBzZWxmLnJlY29ubmVjdGluZzoKKyAgICAgICAgICAgICAgICBzZWxmLndhc0Nv bm5lY3RlZCA9IEZhbHNlCisKKyAgICAgICAgcmV0dXJuIHN0YXR1cywgbXNnCisKKyAgICBkZWYg X2luaXRpYWxpemUoc2VsZiwgY29ubl9pZCwgKiprd2FyZ3MpOgorICAgICAgICBzZWxmLmV4ZWN1 dGlvbl9hYm9ydGVkID0gRmFsc2UKKyAgICAgICAgc2VsZi5fX2JhY2tlbmRfcGlkID0gc2VsZi5j b25uLmdldF9iYWNrZW5kX3BpZCgpCisKKyAgICAgICAgc2V0YXR0cihnLCAiezB9I3sxfSIuZm9y bWF0KAorICAgICAgICAgICAgc2VsZi5tYW5hZ2VyLnNpZCwKKyAgICAgICAgICAgIHNlbGYuY29u bl9pZC5lbmNvZGUoJ3V0Zi04JykKKyAgICAgICAgKSwgTm9uZSkKKworICAgICAgICBzdGF0dXMs IGN1ciA9IHNlbGYuX19jdXJzb3IoKQorICAgICAgICBmb3JtYXR0ZWRfZXhjZXB0aW9uX21zZyA9 IHNlbGYuX2Zvcm1hdHRlZF9leGNlcHRpb25fbXNnCisgICAgICAgIG1nciA9IHNlbGYubWFuYWdl cgorCisgICAgICAgIGRlZiBfZXhlY3V0ZShjdXIsIHF1ZXJ5LCBwYXJhbXM9Tm9uZSk6CisgICAg ICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgc2VsZi5fX2ludGVybmFsX2Jsb2NraW5nX2V4 ZWN1dGUoY3VyLCBxdWVyeSwgcGFyYW1zKQorICAgICAgICAgICAgZXhjZXB0IHBzeWNvcGcyLkVy cm9yIGFzIHBlOgorICAgICAgICAgICAgICAgIGN1ci5jbG9zZSgpCisgICAgICAgICAgICAgICAg cmV0dXJuIGZvcm1hdHRlZF9leGNlcHRpb25fbXNnKHBlLCBGYWxzZSkKKyAgICAgICAgICAgIHJl dHVybiBOb25lCisKKyAgICAgICAgIyBhdXRvY29tbWl0IGZsYWcgZG9lcyBub3Qgd29yayB3aXRo IGFzeW5jaHJvbm91cyBjb25uZWN0aW9ucy4KKyAgICAgICAgIyBCeSBkZWZhdWx0IGFzeW5jaHJv bm91cyBjb25uZWN0aW9uIHJ1bnMgaW4gYXV0b2NvbW1pdCBtb2RlLgorICAgICAgICBpZiBzZWxm LmFzeW5jID09IDA6CisgICAgICAgICAgICBpZiAnYXV0b2NvbW1pdCcgaW4ga3dhcmdzIGFuZCBr d2FyZ3NbJ2F1dG9jb21taXQnXSBpcyBGYWxzZToKKyAgICAgICAgICAgICAgICBzZWxmLmNvbm4u YXV0b2NvbW1pdCA9IEZhbHNlCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNl bGYuY29ubi5hdXRvY29tbWl0ID0gVHJ1ZQorCisgICAgICAgIHJlZ2lzdGVyX3N0cmluZ190eXBl Y2FzdGVycyhzZWxmLmNvbm4pCisKKyAgICAgICAgaWYgc2VsZi5hcnJheV90b19zdHJpbmc6Cisg ICAgICAgICAgICByZWdpc3Rlcl9hcnJheV90b19zdHJpbmdfdHlwZWNhc3RlcnMoc2VsZi5jb25u KQorCisgICAgICAgICMgUmVnaXN0ZXIgdHlwZSBjYXN0ZXJzIGZvciBiaW5hcnkgZGF0YSBvbmx5 IGFmdGVyIHJlZ2lzdGVyaW5nIGFycmF5IHRvCisgICAgICAgICMgc3RyaW5nIHR5cGUgY2FzdGVy cy4KKyAgICAgICAgaWYgc2VsZi51c2VfYmluYXJ5X3BsYWNlaG9sZGVyOgorICAgICAgICAgICAg cmVnaXN0ZXJfYmluYXJ5X3R5cGVjYXN0ZXJzKHNlbGYuY29ubikKKworICAgICAgICBzdGF0dXMg PSBfZXhlY3V0ZShjdXIsICJTRVQgRGF0ZVN0eWxlPUlTTzsiCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIlNFVCBjbGllbnRfbWluX21lc3NhZ2VzPW5vdGljZTsiCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIlNFVCBieXRlYV9vdXRwdXQ9ZXNjYXBlOyIKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAiU0VUIGNsaWVudF9lbmNvZGluZz0nVU5JQ09ERSc7IikK KworICAgICAgICBpZiBzdGF0dXMgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBzZWxmLmNvbm4u Y2xvc2UoKQorICAgICAgICAgICAgc2VsZi5jb25uID0gTm9uZQorCisgICAgICAgICAgICByZXR1 cm4gRmFsc2UsIHN0YXR1cworCisgICAgICAgIGlmIG1nci5yb2xlOgorICAgICAgICAgICAgc3Rh dHVzID0gX2V4ZWN1dGUoY3VyLCB1IlNFVCBST0xFIFRPICVzIiwgW21nci5yb2xlXSkKKworICAg ICAgICAgICAgaWYgc3RhdHVzIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgIHNlbGYuY29u bi5jbG9zZSgpCisgICAgICAgICAgICAgICAgc2VsZi5jb25uID0gTm9uZQorICAgICAgICAgICAg ICAgIGN1cnJlbnRfYXBwLmxvZ2dlci5lcnJvcigKKyAgICAgICAgICAgICAgICAgICAgIkNvbm5l Y3QgdG8gdGhlIGRhdGFiYXNlIHNlcnZlciAoI3tzZXJ2ZXJfaWR9KSBmb3IgIgorICAgICAgICAg ICAgICAgICAgICAiY29ubmVjdGlvbiAoe2Nvbm5faWR9KSwgYnV0IC0gZmFpbGVkIHRvIHNldHVw IHRoZSByb2xlICIKKyAgICAgICAgICAgICAgICAgICAgIndpdGggZXJyb3IgbWVzc2FnZSBhcyBi ZWxvdzp7bXNnfSIuZm9ybWF0KAorICAgICAgICAgICAgICAgICAgICAgICAgc2VydmVyX2lkPXNl bGYubWFuYWdlci5zaWQsCisgICAgICAgICAgICAgICAgICAgICAgICBjb25uX2lkPWNvbm5faWQs CisgICAgICAgICAgICAgICAgICAgICAgICBtc2c9c3RhdHVzCisgICAgICAgICAgICAgICAgICAg ICkKKyAgICAgICAgICAgICAgICApCisgICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlLCBcCisg ICAgICAgICAgICAgICAgICAgIF8oCisgICAgICAgICAgICAgICAgICAgICAgICAiRmFpbGVkIHRv IHNldHVwIHRoZSByb2xlIHdpdGggZXJyb3IgbWVzc2FnZTpcbnswfSIKKyAgICAgICAgICAgICAg ICAgICAgKS5mb3JtYXQoc3RhdHVzKQorCisgICAgICAgIGlmIG1nci52ZXIgaXMgTm9uZToKKyAg ICAgICAgICAgIHN0YXR1cyA9IF9leGVjdXRlKGN1ciwgIlNFTEVDVCB2ZXJzaW9uKCkiKQorCisg ICAgICAgICAgICBpZiBzdGF0dXMgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgc2VsZi5j b25uLmNsb3NlKCkKKyAgICAgICAgICAgICAgICBzZWxmLmNvbm4gPSBOb25lCisgICAgICAgICAg ICAgICAgc2VsZi53YXNDb25uZWN0ZWQgPSBGYWxzZQorICAgICAgICAgICAgICAgIGN1cnJlbnRf YXBwLmxvZ2dlci5lcnJvcigKKyAgICAgICAgICAgICAgICAgICAgIkZhaWxlZCB0byBmZXRjaCB0 aGUgdmVyc2lvbiBpbmZvcm1hdGlvbiBvbiB0aGUgIgorICAgICAgICAgICAgICAgICAgICAiZXN0 YWJsaXNoZWQgY29ubmVjdGlvbiB0byB0aGUgZGF0YWJhc2Ugc2VydmVyICIKKyAgICAgICAgICAg ICAgICAgICAgIigje3NlcnZlcl9pZH0pIGZvciAne2Nvbm5faWR9JyB3aXRoIGJlbG93IGVycm9y ICIKKyAgICAgICAgICAgICAgICAgICAgIm1lc3NhZ2U6e21zZ30iLmZvcm1hdCgKKyAgICAgICAg ICAgICAgICAgICAgICAgIHNlcnZlcl9pZD1zZWxmLm1hbmFnZXIuc2lkLAorICAgICAgICAgICAg ICAgICAgICAgICAgY29ubl9pZD1jb25uX2lkLAorICAgICAgICAgICAgICAgICAgICAgICAgbXNn PXN0YXR1cykKKyAgICAgICAgICAgICAgICApCisgICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNl LCBzdGF0dXMKKworICAgICAgICAgICAgaWYgY3VyLnJvd2NvdW50ID4gMDoKKyAgICAgICAgICAg ICAgICByb3cgPSBjdXIuZmV0Y2htYW55KDEpWzBdCisgICAgICAgICAgICAgICAgbWdyLnZlciA9 IHJvd1sndmVyc2lvbiddCisgICAgICAgICAgICAgICAgbWdyLnN2ZXJzaW9uID0gc2VsZi5jb25u LnNlcnZlcl92ZXJzaW9uCisKKyAgICAgICAgc3RhdHVzID0gX2V4ZWN1dGUoY3VyLCAiIiIKK1NF TEVDVAorICAgIGRiLm9pZCBhcyBkaWQsIGRiLmRhdG5hbWUsIGRiLmRhdGFsbG93Y29ubiwKKyAg ICBwZ19lbmNvZGluZ190b19jaGFyKGRiLmVuY29kaW5nKSBBUyBzZXJ2ZXJlbmNvZGluZywKKyAg ICBoYXNfZGF0YWJhc2VfcHJpdmlsZWdlKGRiLm9pZCwgJ0NSRUFURScpIGFzIGNhbmNyZWF0ZSwg ZGF0bGFzdHN5c29pZAorRlJPTQorICAgIHBnX2RhdGFiYXNlIGRiCitXSEVSRSBkYi5kYXRuYW1l ID0gY3VycmVudF9kYXRhYmFzZSgpIiIiKQorCisgICAgICAgIGlmIHN0YXR1cyBpcyBOb25lOgor ICAgICAgICAgICAgbWdyLmRiX2luZm8gPSBtZ3IuZGJfaW5mbyBvciBkaWN0KCkKKyAgICAgICAg ICAgIGlmIGN1ci5yb3djb3VudCA+IDA6CisgICAgICAgICAgICAgICAgcmVzID0gY3VyLmZldGNo bWFueSgxKVswXQorICAgICAgICAgICAgICAgIG1nci5kYl9pbmZvW3Jlc1snZGlkJ11dID0gcmVz LmNvcHkoKQorCisgICAgICAgICAgICAgICAgIyBXZSBkbyBub3QgaGF2ZSBkYXRhYmFzZSBvaWQg Zm9yIHRoZSBtYWludGVuYW5jZSBkYXRhYmFzZS4KKyAgICAgICAgICAgICAgICBpZiBsZW4obWdy LmRiX2luZm8pID09IDE6CisgICAgICAgICAgICAgICAgICAgIG1nci5kaWQgPSByZXNbJ2RpZCdd CisKKyAgICAgICAgc3RhdHVzID0gX2V4ZWN1dGUoY3VyLCAiIiIKK1NFTEVDVAorICAgIG9pZCBh cyBpZCwgcm9sbmFtZSBhcyBuYW1lLCByb2xzdXBlciBhcyBpc19zdXBlcnVzZXIsCisgICAgcm9s Y3JlYXRlcm9sZSBhcyBjYW5fY3JlYXRlX3JvbGUsIHJvbGNyZWF0ZWRiIGFzIGNhbl9jcmVhdGVf ZGIKK0ZST00KKyAgICBwZ19jYXRhbG9nLnBnX3JvbGVzCitXSEVSRQorICAgIHJvbG5hbWUgPSBj dXJyZW50X3VzZXIiIiIpCisKKyAgICAgICAgaWYgc3RhdHVzIGlzIE5vbmU6CisgICAgICAgICAg ICBtZ3IudXNlcl9pbmZvID0gZGljdCgpCisgICAgICAgICAgICBpZiBjdXIucm93Y291bnQgPiAw OgorICAgICAgICAgICAgICAgIG1nci51c2VyX2luZm8gPSBjdXIuZmV0Y2htYW55KDEpWzBdCisK KyAgICAgICAgaWYgJ3Bhc3N3b3JkJyBpbiBrd2FyZ3M6CisgICAgICAgICAgICBtZ3IucGFzc3dv cmQgPSBrd2FyZ3NbJ3Bhc3N3b3JkJ10KKworICAgICAgICBzZXJ2ZXJfdHlwZXMgPSBOb25lCisg ICAgICAgIGlmICdzZXJ2ZXJfdHlwZXMnIGluIGt3YXJncyBhbmQgaXNpbnN0YW5jZSgKKyAgICAg ICAgICAgICAgICBrd2FyZ3NbJ3NlcnZlcl90eXBlcyddLCBsaXN0KToKKyAgICAgICAgICAgIHNl cnZlcl90eXBlcyA9IG1nci5zZXJ2ZXJfdHlwZXMgPSBrd2FyZ3NbJ3NlcnZlcl90eXBlcyddCisK KyAgICAgICAgaWYgc2VydmVyX3R5cGVzIGlzIE5vbmU6CisgICAgICAgICAgICBmcm9tIHBnYWRt aW4uYnJvd3Nlci5zZXJ2ZXJfZ3JvdXBzLnNlcnZlcnMudHlwZXMgaW1wb3J0IFNlcnZlclR5cGUK KyAgICAgICAgICAgIHNlcnZlcl90eXBlcyA9IFNlcnZlclR5cGUudHlwZXMoKQorCisgICAgICAg IGZvciBzdCBpbiBzZXJ2ZXJfdHlwZXM6CisgICAgICAgICAgICBpZiBzdC5pbnN0YW5jZU9mKG1n ci52ZXIpOgorICAgICAgICAgICAgICAgIG1nci5zZXJ2ZXJfdHlwZSA9IHN0LnN0eXBlCisgICAg ICAgICAgICAgICAgbWdyLnNlcnZlcl9jbHMgPSBzdAorICAgICAgICAgICAgICAgIGJyZWFrCisK KyAgICAgICAgbWdyLnVwZGF0ZV9zZXNzaW9uKCkKKworICAgICAgICByZXR1cm4gVHJ1ZSwgTm9u ZQorCisgICAgZGVmIF9fY3Vyc29yKHNlbGYsIHNlcnZlcl9jdXJzb3I9RmFsc2UpOgorICAgICAg ICBpZiBzZWxmLndhc0Nvbm5lY3RlZCBpcyBGYWxzZToKKyAgICAgICAgICAgIHJhaXNlIENvbm5l Y3Rpb25Mb3N0KAorICAgICAgICAgICAgICAgIHNlbGYubWFuYWdlci5zaWQsCisgICAgICAgICAg ICAgICAgc2VsZi5kYiwKKyAgICAgICAgICAgICAgICBOb25lIGlmIHNlbGYuY29ubl9pZFswOjNd ID09IHUnREI6JyBlbHNlIHNlbGYuY29ubl9pZFs1Ol0KKyAgICAgICAgICAgICkKKyAgICAgICAg Y3VyID0gZ2V0YXR0cihnLCAiezB9I3sxfSIuZm9ybWF0KAorICAgICAgICAgICAgc2VsZi5tYW5h Z2VyLnNpZCwKKyAgICAgICAgICAgIHNlbGYuY29ubl9pZC5lbmNvZGUoJ3V0Zi04JykKKyAgICAg ICAgKSwgTm9uZSkKKworICAgICAgICBpZiBzZWxmLmNvbm5lY3RlZCgpIGFuZCBjdXIgYW5kIG5v dCBjdXIuY2xvc2VkOgorICAgICAgICAgICAgaWYgbm90IHNlcnZlcl9jdXJzb3Igb3IgKHNlcnZl cl9jdXJzb3IgYW5kIGN1ci5uYW1lKToKKyAgICAgICAgICAgICAgICByZXR1cm4gVHJ1ZSwgY3Vy CisKKyAgICAgICAgaWYgbm90IHNlbGYuY29ubmVjdGVkKCk6CisgICAgICAgICAgICBlcnJtc2cg PSAiIgorCisgICAgICAgICAgICBjdXJyZW50X2FwcC5sb2dnZXIud2FybmluZygKKyAgICAgICAg ICAgICAgICAiQ29ubmVjdGlvbiB0byBkYXRhYmFzZSBzZXJ2ZXIgKCN7c2VydmVyX2lkfSkgZm9y IHRoZSAiCisgICAgICAgICAgICAgICAgImNvbm5lY3Rpb24gLSAne2Nvbm5faWR9JyBoYXMgYmVl biBsb3N0LiIuZm9ybWF0KAorICAgICAgICAgICAgICAgICAgICBzZXJ2ZXJfaWQ9c2VsZi5tYW5h Z2VyLnNpZCwKKyAgICAgICAgICAgICAgICAgICAgY29ubl9pZD1zZWxmLmNvbm5faWQKKyAgICAg ICAgICAgICAgICApCisgICAgICAgICAgICApCisKKyAgICAgICAgICAgIGlmIHNlbGYuYXV0b19y ZWNvbm5lY3QgYW5kIG5vdCBzZWxmLnJlY29ubmVjdGluZzoKKyAgICAgICAgICAgICAgICBzZWxm Ll9fYXR0ZW1wdF9leGVjdXRpb25fcmVjb25uZWN0KE5vbmUpCisgICAgICAgICAgICBlbHNlOgor ICAgICAgICAgICAgICAgIHJhaXNlIENvbm5lY3Rpb25Mb3N0KAorICAgICAgICAgICAgICAgICAg ICBzZWxmLm1hbmFnZXIuc2lkLAorICAgICAgICAgICAgICAgICAgICBzZWxmLmRiLAorICAgICAg ICAgICAgICAgICAgICBOb25lIGlmIHNlbGYuY29ubl9pZFswOjNdID09IHUnREI6JyBlbHNlIHNl bGYuY29ubl9pZFs1Ol0KKyAgICAgICAgICAgICAgICApCisKKyAgICAgICAgdHJ5OgorICAgICAg ICAgICAgaWYgc2VydmVyX2N1cnNvcjoKKyAgICAgICAgICAgICAgICAjIFByb3ZpZGluZyBuYW1l IHRvIGN1cnNvciB3aWxsIGNyZWF0ZSBzZXJ2ZXIgc2lkZSBjdXJzb3IuCisgICAgICAgICAgICAg ICAgY3Vyc29yX25hbWUgPSAiQ1VSU09SOnswfSIuZm9ybWF0KHNlbGYuY29ubl9pZCkKKyAgICAg ICAgICAgICAgICBjdXIgPSBzZWxmLmNvbm4uY3Vyc29yKAorICAgICAgICAgICAgICAgICAgICBu YW1lPWN1cnNvcl9uYW1lLCBjdXJzb3JfZmFjdG9yeT1EaWN0Q3Vyc29yCisgICAgICAgICAgICAg ICAgKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBjdXIgPSBzZWxmLmNvbm4u Y3Vyc29yKGN1cnNvcl9mYWN0b3J5PURpY3RDdXJzb3IpCisgICAgICAgIGV4Y2VwdCBwc3ljb3Bn Mi5FcnJvciBhcyBwZToKKyAgICAgICAgICAgIGN1cnJlbnRfYXBwLmxvZ2dlci5leGNlcHRpb24o cGUpCisgICAgICAgICAgICBlcnJtc2cgPSBnZXR0ZXh0KAorICAgICAgICAgICAgICAgICJGYWls ZWQgdG8gY3JlYXRlIGN1cnNvciBmb3IgcHN5Y29wZzIgY29ubmVjdGlvbiB3aXRoIGVycm9yICIK KyAgICAgICAgICAgICAgICAibWVzc2FnZSBmb3IgdGhlIHNlcnZlciN7MX06ezJ9OlxuezB9Igor ICAgICAgICAgICAgKS5mb3JtYXQoCisgICAgICAgICAgICAgICAgc3RyKHBlKSwgc2VsZi5tYW5h Z2VyLnNpZCwgc2VsZi5kYgorICAgICAgICAgICAgKQorCisgICAgICAgICAgICBjdXJyZW50X2Fw cC5sb2dnZXIuZXJyb3IoZXJybXNnKQorICAgICAgICAgICAgaWYgc2VsZi5jb25uLmNsb3NlZDoK KyAgICAgICAgICAgICAgICBzZWxmLmNvbm4gPSBOb25lCisgICAgICAgICAgICAgICAgaWYgc2Vs Zi5hdXRvX3JlY29ubmVjdCBhbmQgbm90IHNlbGYucmVjb25uZWN0aW5nOgorICAgICAgICAgICAg ICAgICAgICBjdXJyZW50X2FwcC5sb2dnZXIuaW5mbygKKyAgICAgICAgICAgICAgICAgICAgICAg IGdldHRleHQoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkF0dGVtcHRpbmcgdG8gcmVj b25uZWN0IHRvIHRoZSBkYXRhYmFzZSBzZXJ2ZXIgIgorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICIoI3tzZXJ2ZXJfaWR9KSBmb3IgdGhlIGNvbm5lY3Rpb24gLSAne2Nvbm5faWR9Jy4iCisg ICAgICAgICAgICAgICAgICAgICAgICApLmZvcm1hdCgKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICBzZXJ2ZXJfaWQ9c2VsZi5tYW5hZ2VyLnNpZCwKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICBjb25uX2lkPXNlbGYuY29ubl9pZAorICAgICAgICAgICAgICAgICAgICAgICAgKQorICAg ICAgICAgICAgICAgICAgICApCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLl9fYXR0 ZW1wdF9leGVjdXRpb25fcmVjb25uZWN0KAorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5f X2N1cnNvciwgc2VydmVyX2N1cnNvcgorICAgICAgICAgICAgICAgICAgICApCisgICAgICAgICAg ICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgQ29ubmVjdGlvbkxvc3QoCisg ICAgICAgICAgICAgICAgICAgICAgICBzZWxmLm1hbmFnZXIuc2lkLAorICAgICAgICAgICAgICAg ICAgICAgICAgc2VsZi5kYiwKKyAgICAgICAgICAgICAgICAgICAgICAgIE5vbmUgaWYgc2VsZi5j b25uX2lkWzA6M10gPT0gdSdEQjonCisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHNlbGYu Y29ubl9pZFs1Ol0KKyAgICAgICAgICAgICAgICAgICAgKQorCisgICAgICAgIHNldGF0dHIoCisg ICAgICAgICAgICBnLCAiezB9I3sxfSIuZm9ybWF0KAorICAgICAgICAgICAgICAgIHNlbGYubWFu YWdlci5zaWQsIHNlbGYuY29ubl9pZC5lbmNvZGUoJ3V0Zi04JykKKyAgICAgICAgICAgICksIGN1 cgorICAgICAgICApCisKKyAgICAgICAgcmV0dXJuIFRydWUsIGN1cgorCisgICAgZGVmIF9faW50 ZXJuYWxfYmxvY2tpbmdfZXhlY3V0ZShzZWxmLCBjdXIsIHF1ZXJ5LCBwYXJhbXMpOgorICAgICAg ICAiIiIKKyAgICAgICAgVGhpcyBmdW5jdGlvbiBleGVjdXRlcyB0aGUgcXVlcnkgdXNpbmcgY3Vy c29yJ3MgZXhlY3V0ZSBmdW5jdGlvbiwKKyAgICAgICAgYnV0IGluIGNhc2Ugb2YgYXN5bmNocm9u b3VzIGNvbm5lY3Rpb24gd2UgbmVlZCB0byB3YWl0IGZvciB0aGUKKyAgICAgICAgdHJhbnNhY3Rp b24gdG8gYmUgY29tcGxldGVkLiBJZiBzZWxmLmFzeW5jIGlzIDEgdGhlbiBpdCBpcyBhCisgICAg ICAgIGJsb2NraW5nIGNhbGwuCisKKyAgICAgICAgQXJnczoKKyAgICAgICAgICAgIGN1cjogQ3Vy c29yIG9iamVjdAorICAgICAgICAgICAgcXVlcnk6IFNRTCBxdWVyeSB0byBydW4uCisgICAgICAg ICAgICBwYXJhbXM6IEV4dHJhIHBhcmFtZXRlcnMKKyAgICAgICAgIiIiCisKKyAgICAgICAgaWYg c3lzLnZlcnNpb25faW5mbyA8ICgzLCk6CisgICAgICAgICAgICBpZiB0eXBlKHF1ZXJ5KSA9PSB1 bmljb2RlOgorICAgICAgICAgICAgICAgIHF1ZXJ5ID0gcXVlcnkuZW5jb2RlKCd1dGYtOCcpCisg ICAgICAgIGVsc2U6CisgICAgICAgICAgICBxdWVyeSA9IHF1ZXJ5LmVuY29kZSgndXRmLTgnKQor CisgICAgICAgIGN1ci5leGVjdXRlKHF1ZXJ5LCBwYXJhbXMpCisgICAgICAgIGlmIHNlbGYuYXN5 bmMgPT0gMToKKyAgICAgICAgICAgIHNlbGYuX3dhaXQoY3VyLmNvbm5lY3Rpb24pCisKKyAgICBk ZWYgZXhlY3V0ZV9vbl9zZXJ2ZXJfYXNfY3N2KHNlbGYsCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBxdWVyeSwgcGFyYW1zPU5vbmUsCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBmb3JtYXR0ZWRfZXhjZXB0aW9uX21zZz1GYWxzZSwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHJlY29yZHM9MjAwMCk6CisgICAgICAgICIiIgorICAgICAgICBUbyBm ZXRjaCBxdWVyeSByZXN1bHQgYW5kIGdlbmVyYXRlIENTViBvdXRwdXQKKworICAgICAgICBBcmdz OgorICAgICAgICAgICAgcXVlcnk6IFNRTAorICAgICAgICAgICAgcGFyYW1zOiBBZGRpdGlvbmFs IHBhcmFtZXRlcnMKKyAgICAgICAgICAgIGZvcm1hdHRlZF9leGNlcHRpb25fbXNnOiBGb3IgZXhj ZXB0aW9uCisgICAgICAgICAgICByZWNvcmRzOiBOdW1iZXIgb2YgaW5pdGlhbCByZWNvcmRzCisg ICAgICAgIFJldHVybnM6CisgICAgICAgICAgICBHZW5lcmF0b3IgcmVzcG9uc2UKKyAgICAgICAg IiIiCisgICAgICAgIHN0YXR1cywgY3VyID0gc2VsZi5fX2N1cnNvcihzZXJ2ZXJfY3Vyc29yPVRy dWUpCisgICAgICAgIHNlbGYucm93X2NvdW50ID0gMAorCisgICAgICAgIGlmIG5vdCBzdGF0dXM6 CisgICAgICAgICAgICByZXR1cm4gRmFsc2UsIHN0cihjdXIpCisgICAgICAgIHF1ZXJ5X2lkID0g cmFuZG9tLnJhbmRpbnQoMSwgOTk5OTk5OSkKKworICAgICAgICBpZiBJU19QWTIgYW5kIHR5cGUo cXVlcnkpID09IHVuaWNvZGU6CisgICAgICAgICAgICBxdWVyeSA9IHF1ZXJ5LmVuY29kZSgndXRm LTgnKQorCisgICAgICAgIGN1cnJlbnRfYXBwLmxvZ2dlci5sb2coCisgICAgICAgICAgICAyNSwK KyAgICAgICAgICAgIHUiRXhlY3V0ZSAod2l0aCBzZXJ2ZXIgY3Vyc29yKSBmb3Igc2VydmVyICN7 c2VydmVyX2lkfSAtICIKKyAgICAgICAgICAgIHUie2Nvbm5faWR9IChRdWVyeS1pZDoge3F1ZXJ5 X2lkfSk6XG57cXVlcnl9Ii5mb3JtYXQoCisgICAgICAgICAgICAgICAgc2VydmVyX2lkPXNlbGYu bWFuYWdlci5zaWQsCisgICAgICAgICAgICAgICAgY29ubl9pZD1zZWxmLmNvbm5faWQsCisgICAg ICAgICAgICAgICAgcXVlcnk9cXVlcnkuZGVjb2RlKCd1dGYtOCcpIGlmCisgICAgICAgICAgICAg ICAgc3lzLnZlcnNpb25faW5mbyA8ICgzLCkgZWxzZSBxdWVyeSwKKyAgICAgICAgICAgICAgICBx dWVyeV9pZD1xdWVyeV9pZAorICAgICAgICAgICAgKQorICAgICAgICApCisgICAgICAgIHRyeToK KyAgICAgICAgICAgIHNlbGYuX19pbnRlcm5hbF9ibG9ja2luZ19leGVjdXRlKGN1ciwgcXVlcnks IHBhcmFtcykKKyAgICAgICAgZXhjZXB0IHBzeWNvcGcyLkVycm9yIGFzIHBlOgorICAgICAgICAg ICAgY3VyLmNsb3NlKCkKKyAgICAgICAgICAgIGVycm1zZyA9IHNlbGYuX2Zvcm1hdHRlZF9leGNl cHRpb25fbXNnKHBlLCBmb3JtYXR0ZWRfZXhjZXB0aW9uX21zZykKKyAgICAgICAgICAgIGN1cnJl bnRfYXBwLmxvZ2dlci5lcnJvcigKKyAgICAgICAgICAgICAgICB1ImZhaWxlZCB0byBleGVjdXRl IHF1ZXJ5ICgod2l0aCBzZXJ2ZXIgY3Vyc29yKSAiCisgICAgICAgICAgICAgICAgdSJmb3IgdGhl IHNlcnZlciAje3NlcnZlcl9pZH0gLSB7Y29ubl9pZH0gIgorICAgICAgICAgICAgICAgIHUiKHF1 ZXJ5LWlkOiB7cXVlcnlfaWR9KTpcbmVycm9yIG1lc3NhZ2U6e2Vycm1zZ30iLmZvcm1hdCgKKyAg ICAgICAgICAgICAgICAgICAgc2VydmVyX2lkPXNlbGYubWFuYWdlci5zaWQsCisgICAgICAgICAg ICAgICAgICAgIGNvbm5faWQ9c2VsZi5jb25uX2lkLAorICAgICAgICAgICAgICAgICAgICBxdWVy eT1xdWVyeSwKKyAgICAgICAgICAgICAgICAgICAgZXJybXNnPWVycm1zZywKKyAgICAgICAgICAg ICAgICAgICAgcXVlcnlfaWQ9cXVlcnlfaWQKKyAgICAgICAgICAgICAgICApCisgICAgICAgICAg ICApCisgICAgICAgICAgICByZXR1cm4gRmFsc2UsIGVycm1zZworCisgICAgICAgIGRlZiBoYW5k bGVfanNvbl9kYXRhKGpzb25fY29sdW1ucywgcmVzdWx0cyk6CisgICAgICAgICAgICAiIiIKKyAg ICAgICAgICAgIFsgVGhpcyBpcyBvbmx5IGZvciBQeXRob24yLnhdCisgICAgICAgICAgICBUaGlz IGZ1bmN0aW9uIHdpbGwgYmUgdXNlZnVsIHRvIGhhbmRsZSBqc29uIGRhdGEgdHlwZXMuCisgICAg ICAgICAgICBXZSB3aWxsIGR1bXAganNvbiBkYXRhIGFzIHByb3BlciBqc29uIGluc3RlYWQgb2Yg dW5pY29kZSB2YWx1ZXMKKworICAgICAgICAgICAgQXJnczoKKyAgICAgICAgICAgICAgICBqc29u X2NvbHVtbnM6IENvbHVtbnMgd2hpY2ggY29udGFpbnMganNvbiBkYXRhCisgICAgICAgICAgICAg ICAgcmVzdWx0czogUXVlcnkgcmVzdWx0CisKKyAgICAgICAgICAgIFJldHVybnM6CisgICAgICAg ICAgICAgICAgcmVzdWx0cworICAgICAgICAgICAgIiIiCisgICAgICAgICAgICAjIE9ubHkgaWYg UHl0aG9uMiBhbmQgdGhlcmUgYXJlIGNvbHVtbnMgd2l0aCBKU09OIHR5cGUKKyAgICAgICAgICAg IGlmIElTX1BZMiBhbmQgbGVuKGpzb25fY29sdW1ucykgPiAwOgorICAgICAgICAgICAgICAgIHRl bXBfcmVzdWx0cyA9IFtdCisgICAgICAgICAgICAgICAgZm9yIHJvdyBpbiByZXN1bHRzOgorICAg ICAgICAgICAgICAgICAgICByZXMgPSBkaWN0KCkKKyAgICAgICAgICAgICAgICAgICAgZm9yIGss IHYgaW4gcm93Lml0ZW1zKCk6CisgICAgICAgICAgICAgICAgICAgICAgICBpZiBrIGluIGpzb25f Y29sdW1uczoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNba10gPSBqc29uLmR1bXBz KHYpCisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHJlc1trXSA9IHYKKyAgICAgICAgICAgICAgICAgICAgdGVtcF9yZXN1bHRzLmFwcGVu ZChyZXMpCisgICAgICAgICAgICAgICAgcmVzdWx0cyA9IHRlbXBfcmVzdWx0cworICAgICAgICAg ICAgcmV0dXJuIHJlc3VsdHMKKworICAgICAgICBkZWYgY29udmVydF9rZXlzX3RvX3VuaWNvZGUo cmVzdWx0cywgY29ubl9lbmNvZGluZyk6CisgICAgICAgICAgICAiIiIKKyAgICAgICAgICAgIFsg VGhpcyBpcyBvbmx5IGZvciBQeXRob24yLnhdCisgICAgICAgICAgICBXZSBuZWVkIHRvIGNvbnZl cnQgYWxsIGtleXMgdG8gdW5pY29kZSBhcyBwc3ljb3BnMgorICAgICAgICAgICAgc2VuZHMgdGhl bSBhcyBzdHJpbmcKKworICAgICAgICAgICAgQXJnczoKKyAgICAgICAgICAgICAgICByZXM6IFF1 ZXJ5IHJlc3VsdCBzZXQgZnJvbSBwc3ljb3BnMgorICAgICAgICAgICAgICAgIGNvbm5fZW5jb2Rp bmc6IENvbm5lY3Rpb24gZW5jb2RpbmcKKworICAgICAgICAgICAgUmV0dXJuczoKKyAgICAgICAg ICAgICAgICBSZXN1bHQgc2V0IChXaXRoIGFsbCB0aGUga2V5cyBjb252ZXJ0ZWQgdG8gdW5pY29k ZSkKKyAgICAgICAgICAgICIiIgorICAgICAgICAgICAgbmV3X3Jlc3VsdHMgPSBbXQorICAgICAg ICAgICAgZm9yIHJvdyBpbiByZXN1bHRzOgorICAgICAgICAgICAgICAgIG5ld19yZXN1bHRzLmFw cGVuZCgKKyAgICAgICAgICAgICAgICAgICAgZGljdChbKGsuZGVjb2RlKGNvbm5fZW5jb2Rpbmcp LCB2KQorICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgaywgdiBpbiByb3cuaXRlbXMoKV0p CisgICAgICAgICAgICAgICAgKQorICAgICAgICAgICAgcmV0dXJuIG5ld19yZXN1bHRzCisKKyAg ICAgICAgZGVmIGdlbihxdW90ZT0nc3RyaW5ncycsIHF1b3RlX2NoYXI9IiciLCBmaWVsZF9zZXBh cmF0b3I9JywnKToKKworICAgICAgICAgICAgcmVzdWx0cyA9IGN1ci5mZXRjaG1hbnkocmVjb3Jk cykKKyAgICAgICAgICAgIGlmIG5vdCByZXN1bHRzOgorICAgICAgICAgICAgICAgIGlmIG5vdCBj dXIuY2xvc2VkOgorICAgICAgICAgICAgICAgICAgICBjdXIuY2xvc2UoKQorICAgICAgICAgICAg ICAgIHlpZWxkIGdldHRleHQoJ1RoZSBxdWVyeSBleGVjdXRlZCBkaWQgbm90IHJldHVybiBhbnkg ZGF0YS4nKQorICAgICAgICAgICAgICAgIHJldHVybgorCisgICAgICAgICAgICBoZWFkZXIgPSBb XQorICAgICAgICAgICAganNvbl9jb2x1bW5zID0gW10KKyAgICAgICAgICAgIGNvbm5fZW5jb2Rp bmcgPSBjdXIuY29ubmVjdGlvbi5lbmNvZGluZworCisgICAgICAgICAgICBmb3IgYyBpbiBjdXIu b3JkZXJlZF9kZXNjcmlwdGlvbigpOgorICAgICAgICAgICAgICAgICMgVGhpcyBpcyB0byBoYW5k bGUgdGhlIGNhc2UgaW4gd2hpY2ggY29sdW1uIG5hbWUgaXMgbm9uLWFzY2lpCisgICAgICAgICAg ICAgICAgY29sdW1uX25hbWUgPSBjLnRvX2RpY3QoKVsnbmFtZSddCisgICAgICAgICAgICAgICAg aWYgSVNfUFkyOgorICAgICAgICAgICAgICAgICAgICBjb2x1bW5fbmFtZSA9IGNvbHVtbl9uYW1l LmRlY29kZShjb25uX2VuY29kaW5nKQorICAgICAgICAgICAgICAgIGhlYWRlci5hcHBlbmQoY29s dW1uX25hbWUpCisgICAgICAgICAgICAgICAgaWYgYy50b19kaWN0KClbJ3R5cGVfY29kZSddIGlu IEFMTF9KU09OX1RZUEVTOgorICAgICAgICAgICAgICAgICAgICBqc29uX2NvbHVtbnMuYXBwZW5k KGNvbHVtbl9uYW1lKQorCisgICAgICAgICAgICBpZiBJU19QWTI6CisgICAgICAgICAgICAgICAg cmVzdWx0cyA9IGNvbnZlcnRfa2V5c190b191bmljb2RlKHJlc3VsdHMsIGNvbm5fZW5jb2Rpbmcp CisKKyAgICAgICAgICAgIHJlc19pbyA9IFN0cmluZ0lPKCkKKworICAgICAgICAgICAgaWYgcXVv dGUgPT0gJ3N0cmluZ3MnOgorICAgICAgICAgICAgICAgIHF1b3RlID0gY3N2LlFVT1RFX05PTk5V TUVSSUMKKyAgICAgICAgICAgIGVsaWYgcXVvdGUgPT0gJ2FsbCc6CisgICAgICAgICAgICAgICAg cXVvdGUgPSBjc3YuUVVPVEVfQUxMCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAg IHF1b3RlID0gY3N2LlFVT1RFX05PTkUKKworICAgICAgICAgICAgaWYgaGFzYXR0cihzdHIsICdk ZWNvZGUnKToKKyAgICAgICAgICAgICAgICAjIERlY29kZSB0aGUgZmllbGRfc2VwYXJhdG9yCisg ICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICBmaWVsZF9zZXBhcmF0b3Ig PSBmaWVsZF9zZXBhcmF0b3IuZGVjb2RlKCd1dGYtOCcpCisgICAgICAgICAgICAgICAgZXhjZXB0 IEV4Y2VwdGlvbiBhcyBlOgorICAgICAgICAgICAgICAgICAgICBjdXJyZW50X2FwcC5sb2dnZXIu ZXJyb3IoZSkKKworICAgICAgICAgICAgICAgICMgRGVjb2RlIHRoZSBxdW90ZV9jaGFyCisgICAg ICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICBxdW90ZV9jaGFyID0gcXVvdGVf Y2hhci5kZWNvZGUoJ3V0Zi04JykKKyAgICAgICAgICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFz IGU6CisgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRfYXBwLmxvZ2dlci5lcnJvcihlKQorCisg ICAgICAgICAgICBjc3Zfd3JpdGVyID0gY3N2LkRpY3RXcml0ZXIoCisgICAgICAgICAgICAgICAg cmVzX2lvLCBmaWVsZG5hbWVzPWhlYWRlciwgZGVsaW1pdGVyPWZpZWxkX3NlcGFyYXRvciwKKyAg ICAgICAgICAgICAgICBxdW90aW5nPXF1b3RlLAorICAgICAgICAgICAgICAgIHF1b3RlY2hhcj1x dW90ZV9jaGFyCisgICAgICAgICAgICApCisKKyAgICAgICAgICAgIGNzdl93cml0ZXIud3JpdGVo ZWFkZXIoKQorICAgICAgICAgICAgcmVzdWx0cyA9IGhhbmRsZV9qc29uX2RhdGEoanNvbl9jb2x1 bW5zLCByZXN1bHRzKQorICAgICAgICAgICAgY3N2X3dyaXRlci53cml0ZXJvd3MocmVzdWx0cykK KworICAgICAgICAgICAgeWllbGQgcmVzX2lvLmdldHZhbHVlKCkKKworICAgICAgICAgICAgd2hp bGUgVHJ1ZToKKyAgICAgICAgICAgICAgICByZXN1bHRzID0gY3VyLmZldGNobWFueShyZWNvcmRz KQorCisgICAgICAgICAgICAgICAgaWYgbm90IHJlc3VsdHM6CisgICAgICAgICAgICAgICAgICAg IGlmIG5vdCBjdXIuY2xvc2VkOgorICAgICAgICAgICAgICAgICAgICAgICAgY3VyLmNsb3NlKCkK KyAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICByZXNfaW8gPSBTdHJp bmdJTygpCisKKyAgICAgICAgICAgICAgICBjc3Zfd3JpdGVyID0gY3N2LkRpY3RXcml0ZXIoCisg ICAgICAgICAgICAgICAgICAgIHJlc19pbywgZmllbGRuYW1lcz1oZWFkZXIsIGRlbGltaXRlcj1m aWVsZF9zZXBhcmF0b3IsCisgICAgICAgICAgICAgICAgICAgIHF1b3Rpbmc9cXVvdGUsCisgICAg ICAgICAgICAgICAgICAgIHF1b3RlY2hhcj1xdW90ZV9jaGFyCisgICAgICAgICAgICAgICAgKQor CisgICAgICAgICAgICAgICAgaWYgSVNfUFkyOgorICAgICAgICAgICAgICAgICAgICByZXN1bHRz ID0gY29udmVydF9rZXlzX3RvX3VuaWNvZGUocmVzdWx0cywgY29ubl9lbmNvZGluZykKKworICAg ICAgICAgICAgICAgIHJlc3VsdHMgPSBoYW5kbGVfanNvbl9kYXRhKGpzb25fY29sdW1ucywgcmVz dWx0cykKKyAgICAgICAgICAgICAgICBjc3Zfd3JpdGVyLndyaXRlcm93cyhyZXN1bHRzKQorICAg ICAgICAgICAgICAgIHlpZWxkIHJlc19pby5nZXR2YWx1ZSgpCisKKyAgICAgICAgcmV0dXJuIFRy dWUsIGdlbgorCisgICAgZGVmIGV4ZWN1dGVfc2NhbGFyKHNlbGYsIHF1ZXJ5LCBwYXJhbXM9Tm9u ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgZm9ybWF0dGVkX2V4Y2VwdGlvbl9tc2c9RmFsc2Up OgorICAgICAgICBzdGF0dXMsIGN1ciA9IHNlbGYuX19jdXJzb3IoKQorICAgICAgICBzZWxmLnJv d19jb3VudCA9IDAKKworICAgICAgICBpZiBub3Qgc3RhdHVzOgorICAgICAgICAgICAgcmV0dXJu IEZhbHNlLCBzdHIoY3VyKQorICAgICAgICBxdWVyeV9pZCA9IHJhbmRvbS5yYW5kaW50KDEsIDk5 OTk5OTkpCisKKyAgICAgICAgY3VycmVudF9hcHAubG9nZ2VyLmxvZygKKyAgICAgICAgICAgIDI1 LAorICAgICAgICAgICAgdSJFeGVjdXRlIChzY2FsYXIpIGZvciBzZXJ2ZXIgI3tzZXJ2ZXJfaWR9 IC0ge2Nvbm5faWR9IChRdWVyeS1pZDogIgorICAgICAgICAgICAgdSJ7cXVlcnlfaWR9KTpcbntx dWVyeX0iLmZvcm1hdCgKKyAgICAgICAgICAgICAgICBzZXJ2ZXJfaWQ9c2VsZi5tYW5hZ2VyLnNp ZCwKKyAgICAgICAgICAgICAgICBjb25uX2lkPXNlbGYuY29ubl9pZCwKKyAgICAgICAgICAgICAg ICBxdWVyeT1xdWVyeSwKKyAgICAgICAgICAgICAgICBxdWVyeV9pZD1xdWVyeV9pZAorICAgICAg ICAgICAgKQorICAgICAgICApCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYuX19pbnRl cm5hbF9ibG9ja2luZ19leGVjdXRlKGN1ciwgcXVlcnksIHBhcmFtcykKKyAgICAgICAgZXhjZXB0 IHBzeWNvcGcyLkVycm9yIGFzIHBlOgorICAgICAgICAgICAgY3VyLmNsb3NlKCkKKyAgICAgICAg ICAgIGlmIG5vdCBzZWxmLmNvbm5lY3RlZCgpOgorICAgICAgICAgICAgICAgIGlmIHNlbGYuYXV0 b19yZWNvbm5lY3QgYW5kIG5vdCBzZWxmLnJlY29ubmVjdGluZzoKKyAgICAgICAgICAgICAgICAg ICAgcmV0dXJuIHNlbGYuX19hdHRlbXB0X2V4ZWN1dGlvbl9yZWNvbm5lY3QoCisgICAgICAgICAg ICAgICAgICAgICAgICBzZWxmLmV4ZWN1dGVfZGljdCwgcXVlcnksIHBhcmFtcywKKyAgICAgICAg ICAgICAgICAgICAgICAgIGZvcm1hdHRlZF9leGNlcHRpb25fbXNnCisgICAgICAgICAgICAgICAg ICAgICkKKyAgICAgICAgICAgICAgICByYWlzZSBDb25uZWN0aW9uTG9zdCgKKyAgICAgICAgICAg ICAgICAgICAgc2VsZi5tYW5hZ2VyLnNpZCwKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5kYiwK KyAgICAgICAgICAgICAgICAgICAgTm9uZSBpZiBzZWxmLmNvbm5faWRbMDozXSA9PSB1J0RCOicg ZWxzZSBzZWxmLmNvbm5faWRbNTpdCisgICAgICAgICAgICAgICAgKQorICAgICAgICAgICAgZXJy bXNnID0gc2VsZi5fZm9ybWF0dGVkX2V4Y2VwdGlvbl9tc2cocGUsIGZvcm1hdHRlZF9leGNlcHRp b25fbXNnKQorICAgICAgICAgICAgY3VycmVudF9hcHAubG9nZ2VyLmVycm9yKAorICAgICAgICAg ICAgICAgIHUiRmFpbGVkIHRvIGV4ZWN1dGUgcXVlcnkgKGV4ZWN1dGVfc2NhbGFyKSBmb3IgdGhl IHNlcnZlciAiCisgICAgICAgICAgICAgICAgdSIje3NlcnZlcl9pZH0gLSB7Y29ubl9pZH0gKFF1 ZXJ5LWlkOiB7cXVlcnlfaWR9KTpcbiIKKyAgICAgICAgICAgICAgICB1IkVycm9yIE1lc3NhZ2U6 e2Vycm1zZ30iLmZvcm1hdCgKKyAgICAgICAgICAgICAgICAgICAgc2VydmVyX2lkPXNlbGYubWFu YWdlci5zaWQsCisgICAgICAgICAgICAgICAgICAgIGNvbm5faWQ9c2VsZi5jb25uX2lkLAorICAg ICAgICAgICAgICAgICAgICBxdWVyeT1xdWVyeSwKKyAgICAgICAgICAgICAgICAgICAgZXJybXNn PWVycm1zZywKKyAgICAgICAgICAgICAgICAgICAgcXVlcnlfaWQ9cXVlcnlfaWQKKyAgICAgICAg ICAgICAgICApCisgICAgICAgICAgICApCisgICAgICAgICAgICByZXR1cm4gRmFsc2UsIGVycm1z ZworCisgICAgICAgIHNlbGYucm93X2NvdW50ID0gY3VyLnJvd2NvdW50CisgICAgICAgIGlmIGN1 ci5yb3djb3VudCA+IDA6CisgICAgICAgICAgICByZXMgPSBjdXIuZmV0Y2hvbmUoKQorICAgICAg ICAgICAgaWYgbGVuKHJlcykgPiAwOgorICAgICAgICAgICAgICAgIHJldHVybiBUcnVlLCByZXNb MF0KKworICAgICAgICByZXR1cm4gVHJ1ZSwgTm9uZQorCisgICAgZGVmIGV4ZWN1dGVfYXN5bmMo c2VsZiwgcXVlcnksIHBhcmFtcz1Ob25lLCBmb3JtYXR0ZWRfZXhjZXB0aW9uX21zZz1UcnVlKToK KyAgICAgICAgIiIiCisgICAgICAgIFRoaXMgZnVuY3Rpb24gZXhlY3V0ZXMgdGhlIGdpdmVuIHF1 ZXJ5IGFzeW5jaHJvbm91c2x5IGFuZCByZXR1cm5zCisgICAgICAgIHJlc3VsdC4KKworICAgICAg ICBBcmdzOgorICAgICAgICAgICAgcXVlcnk6IFNRTCBxdWVyeSB0byBydW4uCisgICAgICAgICAg ICBwYXJhbXM6IGV4dHJhIHBhcmFtZXRlcnMgdG8gdGhlIGZ1bmN0aW9uCisgICAgICAgICAgICBm b3JtYXR0ZWRfZXhjZXB0aW9uX21zZzogaWYgVHJ1ZSB0aGVuIGZ1bmN0aW9uIHJldHVybiB0aGUK KyAgICAgICAgICAgIGZvcm1hdHRlZCBleGNlcHRpb24gbWVzc2FnZQorICAgICAgICAiIiIKKwor ICAgICAgICBpZiBzeXMudmVyc2lvbl9pbmZvIDwgKDMsKToKKyAgICAgICAgICAgIGlmIHR5cGUo cXVlcnkpID09IHVuaWNvZGU6CisgICAgICAgICAgICAgICAgcXVlcnkgPSBxdWVyeS5lbmNvZGUo J3V0Zi04JykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHF1ZXJ5ID0gcXVlcnkuZW5jb2Rl KCd1dGYtOCcpCisKKyAgICAgICAgc2VsZi5fX2FzeW5jX2N1cnNvciA9IE5vbmUKKyAgICAgICAg c3RhdHVzLCBjdXIgPSBzZWxmLl9fY3Vyc29yKCkKKworICAgICAgICBpZiBub3Qgc3RhdHVzOgor ICAgICAgICAgICAgcmV0dXJuIEZhbHNlLCBzdHIoY3VyKQorICAgICAgICBxdWVyeV9pZCA9IHJh bmRvbS5yYW5kaW50KDEsIDk5OTk5OTkpCisKKyAgICAgICAgY3VycmVudF9hcHAubG9nZ2VyLmxv ZygKKyAgICAgICAgICAgIDI1LAorICAgICAgICAgICAgdSJFeGVjdXRlIChhc3luYykgZm9yIHNl cnZlciAje3NlcnZlcl9pZH0gLSB7Y29ubl9pZH0gKFF1ZXJ5LWlkOiAiCisgICAgICAgICAgICB1 IntxdWVyeV9pZH0pOlxue3F1ZXJ5fSIuZm9ybWF0KAorICAgICAgICAgICAgICAgIHNlcnZlcl9p ZD1zZWxmLm1hbmFnZXIuc2lkLAorICAgICAgICAgICAgICAgIGNvbm5faWQ9c2VsZi5jb25uX2lk LAorICAgICAgICAgICAgICAgIHF1ZXJ5PXF1ZXJ5LmRlY29kZSgndXRmLTgnKSwKKyAgICAgICAg ICAgICAgICBxdWVyeV9pZD1xdWVyeV9pZAorICAgICAgICAgICAgKQorICAgICAgICApCisKKyAg ICAgICAgdHJ5OgorICAgICAgICAgICAgc2VsZi5fX25vdGljZXMgPSBbXQorICAgICAgICAgICAg c2VsZi5leGVjdXRpb25fYWJvcnRlZCA9IEZhbHNlCisgICAgICAgICAgICBjdXIuZXhlY3V0ZShx dWVyeSwgcGFyYW1zKQorICAgICAgICAgICAgcmVzID0gc2VsZi5fd2FpdF90aW1lb3V0KGN1ci5j b25uZWN0aW9uKQorICAgICAgICBleGNlcHQgcHN5Y29wZzIuRXJyb3IgYXMgcGU6CisgICAgICAg ICAgICBlcnJtc2cgPSBzZWxmLl9mb3JtYXR0ZWRfZXhjZXB0aW9uX21zZyhwZSwgZm9ybWF0dGVk X2V4Y2VwdGlvbl9tc2cpCisgICAgICAgICAgICBjdXJyZW50X2FwcC5sb2dnZXIuZXJyb3IoCisg ICAgICAgICAgICAgICAgdSJGYWlsZWQgdG8gZXhlY3V0ZSBxdWVyeSAoZXhlY3V0ZV9hc3luYykg Zm9yIHRoZSBzZXJ2ZXIgIgorICAgICAgICAgICAgICAgIHUiI3tzZXJ2ZXJfaWR9IC0ge2Nvbm5f aWR9KFF1ZXJ5LWlkOiB7cXVlcnlfaWR9KTpcbiIKKyAgICAgICAgICAgICAgICB1IkVycm9yIE1l c3NhZ2U6e2Vycm1zZ30iLmZvcm1hdCgKKyAgICAgICAgICAgICAgICAgICAgc2VydmVyX2lkPXNl bGYubWFuYWdlci5zaWQsCisgICAgICAgICAgICAgICAgICAgIGNvbm5faWQ9c2VsZi5jb25uX2lk LAorICAgICAgICAgICAgICAgICAgICBxdWVyeT1xdWVyeS5kZWNvZGUoJ3V0Zi04JyksCisgICAg ICAgICAgICAgICAgICAgIGVycm1zZz1lcnJtc2csCisgICAgICAgICAgICAgICAgICAgIHF1ZXJ5 X2lkPXF1ZXJ5X2lkCisgICAgICAgICAgICAgICAgKQorICAgICAgICAgICAgKQorCisgICAgICAg ICAgICBpZiBzZWxmLmlzX2Rpc2Nvbm5lY3RlZChwZSk6CisgICAgICAgICAgICAgICAgcmFpc2Ug Q29ubmVjdGlvbkxvc3QoCisgICAgICAgICAgICAgICAgICAgIHNlbGYubWFuYWdlci5zaWQsCisg ICAgICAgICAgICAgICAgICAgIHNlbGYuZGIsCisgICAgICAgICAgICAgICAgICAgIE5vbmUgaWYg c2VsZi5jb25uX2lkWzA6M10gPT0gdSdEQjonIGVsc2Ugc2VsZi5jb25uX2lkWzU6XQorICAgICAg ICAgICAgICAgICkKKyAgICAgICAgICAgIHJldHVybiBGYWxzZSwgZXJybXNnCisKKyAgICAgICAg c2VsZi5fX2FzeW5jX2N1cnNvciA9IGN1cgorICAgICAgICBzZWxmLl9fYXN5bmNfcXVlcnlfaWQg PSBxdWVyeV9pZAorCisgICAgICAgIHJldHVybiBUcnVlLCByZXMKKworICAgIGRlZiBleGVjdXRl X3ZvaWQoc2VsZiwgcXVlcnksIHBhcmFtcz1Ob25lLCBmb3JtYXR0ZWRfZXhjZXB0aW9uX21zZz1G YWxzZSk6CisgICAgICAgICIiIgorICAgICAgICBUaGlzIGZ1bmN0aW9uIGV4ZWN1dGVzIHRoZSBn aXZlbiBxdWVyeSB3aXRoIG5vIHJlc3VsdC4KKworICAgICAgICBBcmdzOgorICAgICAgICAgICAg cXVlcnk6IFNRTCBxdWVyeSB0byBydW4uCisgICAgICAgICAgICBwYXJhbXM6IGV4dHJhIHBhcmFt ZXRlcnMgdG8gdGhlIGZ1bmN0aW9uCisgICAgICAgICAgICBmb3JtYXR0ZWRfZXhjZXB0aW9uX21z ZzogaWYgVHJ1ZSB0aGVuIGZ1bmN0aW9uIHJldHVybiB0aGUKKyAgICAgICAgICAgIGZvcm1hdHRl ZCBleGNlcHRpb24gbWVzc2FnZQorICAgICAgICAiIiIKKyAgICAgICAgc3RhdHVzLCBjdXIgPSBz ZWxmLl9fY3Vyc29yKCkKKyAgICAgICAgc2VsZi5yb3dfY291bnQgPSAwCisKKyAgICAgICAgaWYg bm90IHN0YXR1czoKKyAgICAgICAgICAgIHJldHVybiBGYWxzZSwgc3RyKGN1cikKKyAgICAgICAg cXVlcnlfaWQgPSByYW5kb20ucmFuZGludCgxLCA5OTk5OTk5KQorCisgICAgICAgIGN1cnJlbnRf YXBwLmxvZ2dlci5sb2coCisgICAgICAgICAgICAyNSwKKyAgICAgICAgICAgIHUiRXhlY3V0ZSAo dm9pZCkgZm9yIHNlcnZlciAje3NlcnZlcl9pZH0gLSB7Y29ubl9pZH0gKFF1ZXJ5LWlkOiAiCisg ICAgICAgICAgICB1IntxdWVyeV9pZH0pOlxue3F1ZXJ5fSIuZm9ybWF0KAorICAgICAgICAgICAg ICAgIHNlcnZlcl9pZD1zZWxmLm1hbmFnZXIuc2lkLAorICAgICAgICAgICAgICAgIGNvbm5faWQ9 c2VsZi5jb25uX2lkLAorICAgICAgICAgICAgICAgIHF1ZXJ5PXF1ZXJ5LAorICAgICAgICAgICAg ICAgIHF1ZXJ5X2lkPXF1ZXJ5X2lkCisgICAgICAgICAgICApCisgICAgICAgICkKKworICAgICAg ICB0cnk6CisgICAgICAgICAgICBzZWxmLl9faW50ZXJuYWxfYmxvY2tpbmdfZXhlY3V0ZShjdXIs IHF1ZXJ5LCBwYXJhbXMpCisgICAgICAgIGV4Y2VwdCBwc3ljb3BnMi5FcnJvciBhcyBwZToKKyAg ICAgICAgICAgIGN1ci5jbG9zZSgpCisgICAgICAgICAgICBpZiBub3Qgc2VsZi5jb25uZWN0ZWQo KToKKyAgICAgICAgICAgICAgICBpZiBzZWxmLmF1dG9fcmVjb25uZWN0IGFuZCBub3Qgc2VsZi5y ZWNvbm5lY3Rpbmc6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLl9fYXR0ZW1wdF9l eGVjdXRpb25fcmVjb25uZWN0KAorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5leGVjdXRl X3ZvaWQsIHF1ZXJ5LCBwYXJhbXMsCisgICAgICAgICAgICAgICAgICAgICAgICBmb3JtYXR0ZWRf ZXhjZXB0aW9uX21zZworICAgICAgICAgICAgICAgICAgICApCisgICAgICAgICAgICAgICAgcmFp c2UgQ29ubmVjdGlvbkxvc3QoCisgICAgICAgICAgICAgICAgICAgIHNlbGYubWFuYWdlci5zaWQs CisgICAgICAgICAgICAgICAgICAgIHNlbGYuZGIsCisgICAgICAgICAgICAgICAgICAgIE5vbmUg aWYgc2VsZi5jb25uX2lkWzA6M10gPT0gdSdEQjonIGVsc2Ugc2VsZi5jb25uX2lkWzU6XQorICAg ICAgICAgICAgICAgICkKKyAgICAgICAgICAgIGVycm1zZyA9IHNlbGYuX2Zvcm1hdHRlZF9leGNl cHRpb25fbXNnKHBlLCBmb3JtYXR0ZWRfZXhjZXB0aW9uX21zZykKKyAgICAgICAgICAgIGN1cnJl bnRfYXBwLmxvZ2dlci5lcnJvcigKKyAgICAgICAgICAgICAgICB1IkZhaWxlZCB0byBleGVjdXRl IHF1ZXJ5IChleGVjdXRlX3ZvaWQpIGZvciB0aGUgc2VydmVyICIKKyAgICAgICAgICAgICAgICB1 IiN7c2VydmVyX2lkfSAtIHtjb25uX2lkfShRdWVyeS1pZDoge3F1ZXJ5X2lkfSk6XG4iCisgICAg ICAgICAgICAgICAgdSJFcnJvciBNZXNzYWdlOntlcnJtc2d9Ii5mb3JtYXQoCisgICAgICAgICAg ICAgICAgICAgIHNlcnZlcl9pZD1zZWxmLm1hbmFnZXIuc2lkLAorICAgICAgICAgICAgICAgICAg ICBjb25uX2lkPXNlbGYuY29ubl9pZCwKKyAgICAgICAgICAgICAgICAgICAgcXVlcnk9cXVlcnks CisgICAgICAgICAgICAgICAgICAgIGVycm1zZz1lcnJtc2csCisgICAgICAgICAgICAgICAgICAg IHF1ZXJ5X2lkPXF1ZXJ5X2lkCisgICAgICAgICAgICAgICAgKQorICAgICAgICAgICAgKQorICAg ICAgICAgICAgcmV0dXJuIEZhbHNlLCBlcnJtc2cKKworICAgICAgICBzZWxmLnJvd19jb3VudCA9 IGN1ci5yb3djb3VudAorCisgICAgICAgIHJldHVybiBUcnVlLCBOb25lCisKKyAgICBkZWYgX19h dHRlbXB0X2V4ZWN1dGlvbl9yZWNvbm5lY3Qoc2VsZiwgZm4sICphcmdzLCAqKmt3YXJncyk6Cisg ICAgICAgIHNlbGYucmVjb25uZWN0aW5nID0gVHJ1ZQorICAgICAgICBzZXRhdHRyKGcsICJ7MH0j ezF9Ii5mb3JtYXQoCisgICAgICAgICAgICBzZWxmLm1hbmFnZXIuc2lkLAorICAgICAgICAgICAg c2VsZi5jb25uX2lkLmVuY29kZSgndXRmLTgnKQorICAgICAgICApLCBOb25lKQorICAgICAgICB0 cnk6CisgICAgICAgICAgICBzdGF0dXMsIHJlcyA9IHNlbGYuY29ubmVjdCgpCisgICAgICAgICAg ICBpZiBzdGF0dXM6CisgICAgICAgICAgICAgICAgaWYgZm46CisgICAgICAgICAgICAgICAgICAg IHN0YXR1cywgcmVzID0gZm4oKmFyZ3MsICoqa3dhcmdzKQorICAgICAgICAgICAgICAgICAgICBz ZWxmLnJlY29ubmVjdGluZyA9IEZhbHNlCisgICAgICAgICAgICAgICAgcmV0dXJuIHN0YXR1cywg cmVzCisgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZToKKyAgICAgICAgICAgIGN1cnJlbnRf YXBwLmxvZ2dlci5leGNlcHRpb24oZSkKKyAgICAgICAgICAgIHNlbGYucmVjb25uZWN0aW5nID0g RmFsc2UKKworICAgICAgICAgICAgY3VycmVudF9hcHAud2FybmluZygKKyAgICAgICAgICAgICAg ICAiRmFpbGVkIHRvIHJlY29ubmVjdCB0aGUgZGF0YWJhc2Ugc2VydmVyICIKKyAgICAgICAgICAg ICAgICAiKCN7c2VydmVyX2lkfSkiLmZvcm1hdCgKKyAgICAgICAgICAgICAgICAgICAgc2VydmVy X2lkPXNlbGYubWFuYWdlci5zaWQsCisgICAgICAgICAgICAgICAgICAgIGNvbm5faWQ9c2VsZi5j b25uX2lkCisgICAgICAgICAgICAgICAgKQorICAgICAgICAgICAgKQorICAgICAgICBzZWxmLnJl Y29ubmVjdGluZyA9IEZhbHNlCisgICAgICAgIHJhaXNlIENvbm5lY3Rpb25Mb3N0KAorICAgICAg ICAgICAgc2VsZi5tYW5hZ2VyLnNpZCwKKyAgICAgICAgICAgIHNlbGYuZGIsCisgICAgICAgICAg ICBOb25lIGlmIHNlbGYuY29ubl9pZFswOjNdID09IHUnREI6JyBlbHNlIHNlbGYuY29ubl9pZFs1 Ol0KKyAgICAgICAgKQorCisgICAgZGVmIGV4ZWN1dGVfMmRhcnJheShzZWxmLCBxdWVyeSwgcGFy YW1zPU5vbmUsCisgICAgICAgICAgICAgICAgICAgICAgICBmb3JtYXR0ZWRfZXhjZXB0aW9uX21z Zz1GYWxzZSk6CisgICAgICAgIHN0YXR1cywgY3VyID0gc2VsZi5fX2N1cnNvcigpCisgICAgICAg IHNlbGYucm93X2NvdW50ID0gMAorCisgICAgICAgIGlmIG5vdCBzdGF0dXM6CisgICAgICAgICAg ICByZXR1cm4gRmFsc2UsIHN0cihjdXIpCisKKyAgICAgICAgcXVlcnlfaWQgPSByYW5kb20ucmFu ZGludCgxLCA5OTk5OTk5KQorICAgICAgICBjdXJyZW50X2FwcC5sb2dnZXIubG9nKAorICAgICAg ICAgICAgMjUsCisgICAgICAgICAgICB1IkV4ZWN1dGUgKDJkYXJyYXkpIGZvciBzZXJ2ZXIgI3tz ZXJ2ZXJfaWR9IC0ge2Nvbm5faWR9ICIKKyAgICAgICAgICAgIHUiKFF1ZXJ5LWlkOiB7cXVlcnlf aWR9KTpcbntxdWVyeX0iLmZvcm1hdCgKKyAgICAgICAgICAgICAgICBzZXJ2ZXJfaWQ9c2VsZi5t YW5hZ2VyLnNpZCwKKyAgICAgICAgICAgICAgICBjb25uX2lkPXNlbGYuY29ubl9pZCwKKyAgICAg ICAgICAgICAgICBxdWVyeT1xdWVyeSwKKyAgICAgICAgICAgICAgICBxdWVyeV9pZD1xdWVyeV9p ZAorICAgICAgICAgICAgKQorICAgICAgICApCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNl bGYuX19pbnRlcm5hbF9ibG9ja2luZ19leGVjdXRlKGN1ciwgcXVlcnksIHBhcmFtcykKKyAgICAg ICAgZXhjZXB0IHBzeWNvcGcyLkVycm9yIGFzIHBlOgorICAgICAgICAgICAgY3VyLmNsb3NlKCkK KyAgICAgICAgICAgIGlmIG5vdCBzZWxmLmNvbm5lY3RlZCgpOgorICAgICAgICAgICAgICAgIGlm IHNlbGYuYXV0b19yZWNvbm5lY3QgYW5kIFwKKyAgICAgICAgICAgICAgICAgICAgICAgIG5vdCBz ZWxmLnJlY29ubmVjdGluZzoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuX19hdHRl bXB0X2V4ZWN1dGlvbl9yZWNvbm5lY3QoCisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmV4 ZWN1dGVfMmRhcnJheSwgcXVlcnksIHBhcmFtcywKKyAgICAgICAgICAgICAgICAgICAgICAgIGZv cm1hdHRlZF9leGNlcHRpb25fbXNnCisgICAgICAgICAgICAgICAgICAgICkKKyAgICAgICAgICAg IGVycm1zZyA9IHNlbGYuX2Zvcm1hdHRlZF9leGNlcHRpb25fbXNnKHBlLCBmb3JtYXR0ZWRfZXhj ZXB0aW9uX21zZykKKyAgICAgICAgICAgIGN1cnJlbnRfYXBwLmxvZ2dlci5lcnJvcigKKyAgICAg ICAgICAgICAgICB1IkZhaWxlZCB0byBleGVjdXRlIHF1ZXJ5IChleGVjdXRlXzJkYXJyYXkpIGZv ciB0aGUgc2VydmVyICIKKyAgICAgICAgICAgICAgICB1IiN7c2VydmVyX2lkfSAtIHtjb25uX2lk fSAoUXVlcnktaWQ6IHtxdWVyeV9pZH0pOlxuIgorICAgICAgICAgICAgICAgIHUiRXJyb3IgTWVz c2FnZTp7ZXJybXNnfSIuZm9ybWF0KAorICAgICAgICAgICAgICAgICAgICBzZXJ2ZXJfaWQ9c2Vs Zi5tYW5hZ2VyLnNpZCwKKyAgICAgICAgICAgICAgICAgICAgY29ubl9pZD1zZWxmLmNvbm5faWQs CisgICAgICAgICAgICAgICAgICAgIHF1ZXJ5PXF1ZXJ5LAorICAgICAgICAgICAgICAgICAgICBl cnJtc2c9ZXJybXNnLAorICAgICAgICAgICAgICAgICAgICBxdWVyeV9pZD1xdWVyeV9pZAorICAg ICAgICAgICAgICAgICkKKyAgICAgICAgICAgICkKKyAgICAgICAgICAgIHJldHVybiBGYWxzZSwg ZXJybXNnCisKKyAgICAgICAgIyBHZXQgUmVzdWx0c2V0IENvbHVtbiBOYW1lLCBUeXBlIGFuZCBz aXplCisgICAgICAgIGNvbHVtbnMgPSBjdXIuZGVzY3JpcHRpb24gYW5kIFsKKyAgICAgICAgICAg IGRlc2MudG9fZGljdCgpIGZvciBkZXNjIGluIGN1ci5vcmRlcmVkX2Rlc2NyaXB0aW9uKCkKKyAg ICAgICAgXSBvciBbXQorCisgICAgICAgIHJvd3MgPSBbXQorICAgICAgICBzZWxmLnJvd19jb3Vu dCA9IGN1ci5yb3djb3VudAorICAgICAgICBpZiBjdXIucm93Y291bnQgPiAwOgorICAgICAgICAg ICAgZm9yIHJvdyBpbiBjdXI6CisgICAgICAgICAgICAgICAgcm93cy5hcHBlbmQocm93KQorCisg ICAgICAgIHJldHVybiBUcnVlLCB7J2NvbHVtbnMnOiBjb2x1bW5zLCAncm93cyc6IHJvd3N9CisK KyAgICBkZWYgZXhlY3V0ZV9kaWN0KHNlbGYsIHF1ZXJ5LCBwYXJhbXM9Tm9uZSwgZm9ybWF0dGVk X2V4Y2VwdGlvbl9tc2c9RmFsc2UpOgorICAgICAgICBzdGF0dXMsIGN1ciA9IHNlbGYuX19jdXJz b3IoKQorICAgICAgICBzZWxmLnJvd19jb3VudCA9IDAKKworICAgICAgICBpZiBub3Qgc3RhdHVz OgorICAgICAgICAgICAgcmV0dXJuIEZhbHNlLCBzdHIoY3VyKQorICAgICAgICBxdWVyeV9pZCA9 IHJhbmRvbS5yYW5kaW50KDEsIDk5OTk5OTkpCisgICAgICAgIGN1cnJlbnRfYXBwLmxvZ2dlci5s b2coCisgICAgICAgICAgICAyNSwKKyAgICAgICAgICAgIHUiRXhlY3V0ZSAoZGljdCkgZm9yIHNl cnZlciAje3NlcnZlcl9pZH0gLSB7Y29ubl9pZH0gKFF1ZXJ5LWlkOiAiCisgICAgICAgICAgICB1 IntxdWVyeV9pZH0pOlxue3F1ZXJ5fSIuZm9ybWF0KAorICAgICAgICAgICAgICAgIHNlcnZlcl9p ZD1zZWxmLm1hbmFnZXIuc2lkLAorICAgICAgICAgICAgICAgIGNvbm5faWQ9c2VsZi5jb25uX2lk LAorICAgICAgICAgICAgICAgIHF1ZXJ5PXF1ZXJ5LAorICAgICAgICAgICAgICAgIHF1ZXJ5X2lk PXF1ZXJ5X2lkCisgICAgICAgICAgICApCisgICAgICAgICkKKyAgICAgICAgdHJ5OgorICAgICAg ICAgICAgc2VsZi5fX2ludGVybmFsX2Jsb2NraW5nX2V4ZWN1dGUoY3VyLCBxdWVyeSwgcGFyYW1z KQorICAgICAgICBleGNlcHQgcHN5Y29wZzIuRXJyb3IgYXMgcGU6CisgICAgICAgICAgICBjdXIu Y2xvc2UoKQorICAgICAgICAgICAgaWYgbm90IHNlbGYuY29ubmVjdGVkKCk6CisgICAgICAgICAg ICAgICAgaWYgc2VsZi5hdXRvX3JlY29ubmVjdCBhbmQgbm90IHNlbGYucmVjb25uZWN0aW5nOgor ICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5fX2F0dGVtcHRfZXhlY3V0aW9uX3JlY29u bmVjdCgKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZXhlY3V0ZV9kaWN0LCBxdWVyeSwg cGFyYW1zLAorICAgICAgICAgICAgICAgICAgICAgICAgZm9ybWF0dGVkX2V4Y2VwdGlvbl9tc2cK KyAgICAgICAgICAgICAgICAgICAgKQorICAgICAgICAgICAgICAgIHJhaXNlIENvbm5lY3Rpb25M b3N0KAorICAgICAgICAgICAgICAgICAgICBzZWxmLm1hbmFnZXIuc2lkLAorICAgICAgICAgICAg ICAgICAgICBzZWxmLmRiLAorICAgICAgICAgICAgICAgICAgICBOb25lIGlmIHNlbGYuY29ubl9p ZFswOjNdID09IHUnREI6JyBlbHNlIHNlbGYuY29ubl9pZFs1Ol0KKyAgICAgICAgICAgICAgICAp CisgICAgICAgICAgICBlcnJtc2cgPSBzZWxmLl9mb3JtYXR0ZWRfZXhjZXB0aW9uX21zZyhwZSwg Zm9ybWF0dGVkX2V4Y2VwdGlvbl9tc2cpCisgICAgICAgICAgICBjdXJyZW50X2FwcC5sb2dnZXIu ZXJyb3IoCisgICAgICAgICAgICAgICAgdSJGYWlsZWQgdG8gZXhlY3V0ZSBxdWVyeSAoZXhlY3V0 ZV9kaWN0KSBmb3IgdGhlIHNlcnZlciAiCisgICAgICAgICAgICAgICAgdSIje3NlcnZlcl9pZH0t IHtjb25uX2lkfSAoUXVlcnktaWQ6IHtxdWVyeV9pZH0pOlxuIgorICAgICAgICAgICAgICAgIHUi RXJyb3IgTWVzc2FnZTp7ZXJybXNnfSIuZm9ybWF0KAorICAgICAgICAgICAgICAgICAgICBzZXJ2 ZXJfaWQ9c2VsZi5tYW5hZ2VyLnNpZCwKKyAgICAgICAgICAgICAgICAgICAgY29ubl9pZD1zZWxm LmNvbm5faWQsCisgICAgICAgICAgICAgICAgICAgIHF1ZXJ5X2lkPXF1ZXJ5X2lkLAorICAgICAg ICAgICAgICAgICAgICBlcnJtc2c9ZXJybXNnCisgICAgICAgICAgICAgICAgKQorICAgICAgICAg ICAgKQorICAgICAgICAgICAgcmV0dXJuIEZhbHNlLCBlcnJtc2cKKworICAgICAgICAjIEdldCBS ZXN1bHRzZXQgQ29sdW1uIE5hbWUsIFR5cGUgYW5kIHNpemUKKyAgICAgICAgY29sdW1ucyA9IGN1 ci5kZXNjcmlwdGlvbiBhbmQgWworICAgICAgICAgICAgZGVzYy50b19kaWN0KCkgZm9yIGRlc2Mg aW4gY3VyLm9yZGVyZWRfZGVzY3JpcHRpb24oKQorICAgICAgICBdIG9yIFtdCisKKyAgICAgICAg cm93cyA9IFtdCisgICAgICAgIHNlbGYucm93X2NvdW50ID0gY3VyLnJvd2NvdW50CisgICAgICAg IGlmIGN1ci5yb3djb3VudCA+IDA6CisgICAgICAgICAgICBmb3Igcm93IGluIGN1cjoKKyAgICAg ICAgICAgICAgICByb3dzLmFwcGVuZChkaWN0KHJvdykpCisKKyAgICAgICAgcmV0dXJuIFRydWUs IHsnY29sdW1ucyc6IGNvbHVtbnMsICdyb3dzJzogcm93c30KKworICAgIGRlZiBhc3luY19mZXRj aG1hbnlfMmRhcnJheShzZWxmLCByZWNvcmRzPTIwMDAsCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGZvcm1hdHRlZF9leGNlcHRpb25fbXNnPUZhbHNlKToKKyAgICAgICAgIiIiCisg ICAgICAgIFVzZXIgc2hvdWxkIHBvbGwgYW5kIGNoZWNrIGlmIHN0YXR1cyBpcyBBU1lOQ19PSyBi ZWZvcmUgY2FsbGluZyB0aGlzCisgICAgICAgIGZ1bmN0aW9uCisgICAgICAgIEFyZ3M6CisgICAg ICAgICAgcmVjb3Jkczogbm8gb2YgcmVjb3JkcyB0byBmZXRjaC4gdXNlIC0xIHRvIGZldGNoYWxs LgorICAgICAgICAgIGZvcm1hdHRlZF9leGNlcHRpb25fbXNnOgorCisgICAgICAgIFJldHVybnM6 CisKKyAgICAgICAgIiIiCisgICAgICAgIGN1ciA9IHNlbGYuX19hc3luY19jdXJzb3IKKyAgICAg ICAgaWYgbm90IGN1cjoKKyAgICAgICAgICAgIHJldHVybiBGYWxzZSwgZ2V0dGV4dCgKKyAgICAg ICAgICAgICAgICAiQ3Vyc29yIGNvdWxkIG5vdCBiZSBmb3VuZCBmb3IgdGhlIGFzeW5jIGNvbm5l Y3Rpb24uIgorICAgICAgICAgICAgKQorCisgICAgICAgIGlmIHNlbGYuY29ubi5pc2V4ZWN1dGlu ZygpOgorICAgICAgICAgICAgcmV0dXJuIEZhbHNlLCBnZXR0ZXh0KAorICAgICAgICAgICAgICAg ICJBc3luY2hyb25vdXMgcXVlcnkgZXhlY3V0aW9uL29wZXJhdGlvbiB1bmRlcndheS4iCisgICAg ICAgICAgICApCisKKyAgICAgICAgaWYgc2VsZi5yb3dfY291bnQgPiAwOgorICAgICAgICAgICAg cmVzdWx0ID0gW10KKyAgICAgICAgICAgICMgRm9yIERETCBvcGVyYXRpb24sIHdlIG1heSBub3Qg aGF2ZSByZXN1bHQuCisgICAgICAgICAgICAjCisgICAgICAgICAgICAjIEJlY2F1c2UgLSB0aGVy ZSBpcyBub3QgZGlyZWN0IHdheSB0byBkaWZmZXJlbnRpYXRlIERNTCBhbmQKKyAgICAgICAgICAg ICMgRERMIG9wZXJhdGlvbnMsIHdlIG5lZWQgdG8gcmVseSBvbiBleGNlcHRpb24gdG8gZmlndXJl CisgICAgICAgICAgICAjIHRoYXQgb3V0IGF0IHRoZSBtb21lbnQuCisgICAgICAgICAgICB0cnk6 CisgICAgICAgICAgICAgICAgaWYgcmVjb3JkcyA9PSAtMToKKyAgICAgICAgICAgICAgICAgICAg cmVzID0gY3VyLmZldGNoYWxsKCkKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAg ICAgICAgICByZXMgPSBjdXIuZmV0Y2htYW55KHJlY29yZHMpCisgICAgICAgICAgICAgICAgZm9y IHJvdyBpbiByZXM6CisgICAgICAgICAgICAgICAgICAgIG5ld19yb3cgPSBbXQorICAgICAgICAg ICAgICAgICAgICBmb3IgY29sIGluIHNlbGYuY29sdW1uX2luZm86CisgICAgICAgICAgICAgICAg ICAgICAgICBuZXdfcm93LmFwcGVuZChyb3dbY29sWyduYW1lJ11dKQorICAgICAgICAgICAgICAg ICAgICByZXN1bHQuYXBwZW5kKG5ld19yb3cpCisgICAgICAgICAgICBleGNlcHQgcHN5Y29wZzIu UHJvZ3JhbW1pbmdFcnJvciBhcyBlOgorICAgICAgICAgICAgICAgIHJlc3VsdCA9IE5vbmUKKyAg ICAgICAgZWxzZToKKyAgICAgICAgICAgICMgVXNlciBwZXJmb3JtZWQgb3BlcmF0aW9uIHdoaWNo IGRvc2Ugbm90IHByb2R1Y2UgcmVjb3JkL3MgYXMKKyAgICAgICAgICAgICMgcmVzdWx0LgorICAg ICAgICAgICAgIyBmb3IgZWcuIERETCBvcGVyYXRpb25zLgorICAgICAgICAgICAgcmV0dXJuIFRy dWUsIE5vbmUKKworICAgICAgICByZXR1cm4gVHJ1ZSwgcmVzdWx0CisKKyAgICBkZWYgY29ubmVj dGVkKHNlbGYpOgorICAgICAgICBpZiBzZWxmLmNvbm46CisgICAgICAgICAgICBpZiBub3Qgc2Vs Zi5jb25uLmNsb3NlZDoKKyAgICAgICAgICAgICAgICByZXR1cm4gVHJ1ZQorICAgICAgICAgICAg c2VsZi5jb25uID0gTm9uZQorICAgICAgICByZXR1cm4gRmFsc2UKKworICAgIGRlZiByZXNldChz ZWxmKToKKyAgICAgICAgaWYgc2VsZi5jb25uOgorICAgICAgICAgICAgaWYgc2VsZi5jb25uLmNs b3NlZDoKKyAgICAgICAgICAgICAgICBzZWxmLmNvbm4gPSBOb25lCisgICAgICAgIHBnX2Nvbm4g PSBOb25lCisgICAgICAgIG1nciA9IHNlbGYubWFuYWdlcgorCisgICAgICAgIHBhc3N3b3JkID0g Z2V0YXR0cihtZ3IsICdwYXNzd29yZCcsIE5vbmUpCisKKyAgICAgICAgaWYgcGFzc3dvcmQ6Cisg ICAgICAgICAgICAjIEZldGNoIExvZ2dlZCBpbiBVc2VyIERldGFpbHMuCisgICAgICAgICAgICB1 c2VyID0gVXNlci5xdWVyeS5maWx0ZXJfYnkoaWQ9Y3VycmVudF91c2VyLmlkKS5maXJzdCgpCisK KyAgICAgICAgICAgIGlmIHVzZXIgaXMgTm9uZToKKyAgICAgICAgICAgICAgICByZXR1cm4gRmFs c2UsIGdldHRleHQoIlVuYXV0aG9yaXplZCByZXF1ZXN0LiIpCisKKyAgICAgICAgICAgIHBhc3N3 b3JkID0gZGVjcnlwdChwYXNzd29yZCwgdXNlci5wYXNzd29yZCkuZGVjb2RlKCkKKworICAgICAg ICB0cnk6CisgICAgICAgICAgICBwZ19jb25uID0gcHN5Y29wZzIuY29ubmVjdCgKKyAgICAgICAg ICAgICAgICBob3N0PW1nci5ob3N0LAorICAgICAgICAgICAgICAgIGhvc3RhZGRyPW1nci5ob3N0 YWRkciwKKyAgICAgICAgICAgICAgICBwb3J0PW1nci5wb3J0LAorICAgICAgICAgICAgICAgIGRh dGFiYXNlPXNlbGYuZGIsCisgICAgICAgICAgICAgICAgdXNlcj1tZ3IudXNlciwKKyAgICAgICAg ICAgICAgICBwYXNzd29yZD1wYXNzd29yZCwKKyAgICAgICAgICAgICAgICBwYXNzZmlsZT1nZXRf Y29tcGxldGVfZmlsZV9wYXRoKG1nci5wYXNzZmlsZSksCisgICAgICAgICAgICAgICAgc3NsbW9k ZT1tZ3Iuc3NsX21vZGUsCisgICAgICAgICAgICAgICAgc3NsY2VydD1nZXRfY29tcGxldGVfZmls ZV9wYXRoKG1nci5zc2xjZXJ0KSwKKyAgICAgICAgICAgICAgICBzc2xrZXk9Z2V0X2NvbXBsZXRl X2ZpbGVfcGF0aChtZ3Iuc3Nsa2V5KSwKKyAgICAgICAgICAgICAgICBzc2xyb290Y2VydD1nZXRf Y29tcGxldGVfZmlsZV9wYXRoKG1nci5zc2xyb290Y2VydCksCisgICAgICAgICAgICAgICAgc3Ns Y3JsPWdldF9jb21wbGV0ZV9maWxlX3BhdGgobWdyLnNzbGNybCksCisgICAgICAgICAgICAgICAg c3NsY29tcHJlc3Npb249VHJ1ZSBpZiBtZ3Iuc3NsY29tcHJlc3Npb24gZWxzZSBGYWxzZSwKKyAg ICAgICAgICAgICAgICBzZXJ2aWNlPW1nci5zZXJ2aWNlCisgICAgICAgICAgICApCisKKyAgICAg ICAgZXhjZXB0IHBzeWNvcGcyLkVycm9yIGFzIGU6CisgICAgICAgICAgICBtc2cgPSBlLnBnZXJy b3IgaWYgZS5wZ2Vycm9yIGVsc2UgZS5tZXNzYWdlIFwKKyAgICAgICAgICAgICAgICBpZiBlLm1l c3NhZ2UgZWxzZSBlLmRpYWcubWVzc2FnZV9kZXRhaWwgXAorICAgICAgICAgICAgICAgIGlmIGUu ZGlhZy5tZXNzYWdlX2RldGFpbCBlbHNlIHN0cihlKQorCisgICAgICAgICAgICBjdXJyZW50X2Fw cC5sb2dnZXIuZXJyb3IoCisgICAgICAgICAgICAgICAgZ2V0dGV4dCgKKyAgICAgICAgICAgICAg ICAgICAgIiIiCitGYWlsZWQgdG8gcmVzZXQgdGhlIGNvbm5lY3Rpb24gdG8gdGhlIHNlcnZlciBk dWUgdG8gZm9sbG93aW5nIGVycm9yOgorezB9IiIiCisgICAgICAgICAgICAgICAgKS5Gb3JtYXQo bXNnKQorICAgICAgICAgICAgKQorICAgICAgICAgICAgcmV0dXJuIEZhbHNlLCBtc2cKKworICAg ICAgICBwZ19jb25uLm5vdGljZXMgPSBkZXF1ZShbXSwgc2VsZi5BU1lOQ19OT1RJQ0VfTUFYTEVO R1RIKQorICAgICAgICBzZWxmLmNvbm4gPSBwZ19jb25uCisgICAgICAgIHNlbGYuX19iYWNrZW5k X3BpZCA9IHBnX2Nvbm4uZ2V0X2JhY2tlbmRfcGlkKCkKKworICAgICAgICByZXR1cm4gVHJ1ZSwg Tm9uZQorCisgICAgZGVmIHRyYW5zYWN0aW9uX3N0YXR1cyhzZWxmKToKKyAgICAgICAgaWYgc2Vs Zi5jb25uOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuY29ubi5nZXRfdHJhbnNhY3Rpb25fc3Rh dHVzKCkKKyAgICAgICAgcmV0dXJuIE5vbmUKKworICAgIGRlZiBwaW5nKHNlbGYpOgorICAgICAg ICByZXR1cm4gc2VsZi5leGVjdXRlX3NjYWxhcignU0VMRUNUIDEnKQorCisgICAgZGVmIF9yZWxl YXNlKHNlbGYpOgorICAgICAgICBpZiBzZWxmLndhc0Nvbm5lY3RlZDoKKyAgICAgICAgICAgIGlm IHNlbGYuY29ubjoKKyAgICAgICAgICAgICAgICBzZWxmLmNvbm4uY2xvc2UoKQorICAgICAgICAg ICAgICAgIHNlbGYuY29ubiA9IE5vbmUKKyAgICAgICAgICAgIHNlbGYucGFzc3dvcmQgPSBOb25l CisgICAgICAgICAgICBzZWxmLndhc0Nvbm5lY3RlZCA9IEZhbHNlCisKKyAgICBkZWYgX3dhaXQo c2VsZiwgY29ubik6CisgICAgICAgICIiIgorICAgICAgICBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQg Zm9yIHRoZSBhc3luY2hyb25vdXMgY29ubmVjdGlvbiwKKyAgICAgICAgaXQgd2lsbCBjYWxsIHBv bGwgbWV0aG9kIGluIGEgaW5maW5pdGUgbG9vcCB0aWxsIHBvbGwKKyAgICAgICAgcmV0dXJucyBw c3ljb3BnMi5leHRlbnNpb25zLlBPTExfT0suIFRoaXMgaXMgYSBibG9ja2luZworICAgICAgICBj YWxsLgorCisgICAgICAgIEFyZ3M6CisgICAgICAgICAgICBjb25uOiBjb25uZWN0aW9uIG9iamVj dAorICAgICAgICAiIiIKKworICAgICAgICB3aGlsZSAxOgorICAgICAgICAgICAgc3RhdGUgPSBj b25uLnBvbGwoKQorICAgICAgICAgICAgaWYgc3RhdGUgPT0gcHN5Y29wZzIuZXh0ZW5zaW9ucy5Q T0xMX09LOgorICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICBlbGlmIHN0YXRlID09 IHBzeWNvcGcyLmV4dGVuc2lvbnMuUE9MTF9XUklURToKKyAgICAgICAgICAgICAgICBzZWxlY3Qu c2VsZWN0KFtdLCBbY29ubi5maWxlbm8oKV0sIFtdKQorICAgICAgICAgICAgZWxpZiBzdGF0ZSA9 PSBwc3ljb3BnMi5leHRlbnNpb25zLlBPTExfUkVBRDoKKyAgICAgICAgICAgICAgICBzZWxlY3Qu c2VsZWN0KFtjb25uLmZpbGVubygpXSwgW10sIFtdKQorICAgICAgICAgICAgZWxzZToKKyAgICAg ICAgICAgICAgICByYWlzZSBwc3ljb3BnMi5PcGVyYXRpb25hbEVycm9yKAorICAgICAgICAgICAg ICAgICAgICAicG9sbCgpIHJldHVybmVkICVzIGZyb20gX3dhaXQgZnVuY3Rpb24iICUgc3RhdGUp CisKKyAgICBkZWYgX3dhaXRfdGltZW91dChzZWxmLCBjb25uKToKKyAgICAgICAgIiIiCisgICAg ICAgIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCBmb3IgdGhlIGFzeW5jaHJvbm91cyBjb25uZWN0aW9u LAorICAgICAgICBpdCB3aWxsIGNhbGwgcG9sbCBtZXRob2QgYW5kIHJldHVybiB0aGUgc3RhdHVz LiBJZiBzdGF0ZSBpcworICAgICAgICBwc3ljb3BnMi5leHRlbnNpb25zLlBPTExfV1JJVEUgYW5k IHBzeWNvcGcyLmV4dGVuc2lvbnMuUE9MTF9SRUFECisgICAgICAgIGZ1bmN0aW9uIHdpbGwgd2Fp dCBmb3IgdGhlIGdpdmVuIHRpbWVvdXQuVGhpcyBpcyBub3QgYSBibG9ja2luZyBjYWxsLgorCisg ICAgICAgIEFyZ3M6CisgICAgICAgICAgICBjb25uOiBjb25uZWN0aW9uIG9iamVjdAorICAgICAg ICAgICAgdGltZTogd2FpdCB0aW1lCisgICAgICAgICIiIgorCisgICAgICAgIHdoaWxlIDE6Cisg ICAgICAgICAgICBzdGF0ZSA9IGNvbm4ucG9sbCgpCisKKyAgICAgICAgICAgIGlmIHN0YXRlID09 IHBzeWNvcGcyLmV4dGVuc2lvbnMuUE9MTF9PSzoKKyAgICAgICAgICAgICAgICByZXR1cm4gc2Vs Zi5BU1lOQ19PSworICAgICAgICAgICAgZWxpZiBzdGF0ZSA9PSBwc3ljb3BnMi5leHRlbnNpb25z LlBPTExfV1JJVEU6CisgICAgICAgICAgICAgICAgIyBXYWl0IGZvciB0aGUgZ2l2ZW4gdGltZSBh bmQgdGhlbiBjaGVjayB0aGUgcmV0dXJuIHN0YXR1cworICAgICAgICAgICAgICAgICMgSWYgdGhy ZWUgZW1wdHkgbGlzdHMgYXJlIHJldHVybmVkIHRoZW4gdGhlIHRpbWUtb3V0IGlzCisgICAgICAg ICAgICAgICAgIyByZWFjaGVkLgorICAgICAgICAgICAgICAgIHRpbWVvdXRfc3RhdHVzID0gc2Vs ZWN0LnNlbGVjdCgKKyAgICAgICAgICAgICAgICAgICAgW10sIFtjb25uLmZpbGVubygpXSwgW10s IHNlbGYuQVNZTkNfVElNRU9VVAorICAgICAgICAgICAgICAgICkKKyAgICAgICAgICAgICAgICBp ZiB0aW1lb3V0X3N0YXR1cyA9PSAoW10sIFtdLCBbXSk6CisgICAgICAgICAgICAgICAgICAgIHJl dHVybiBzZWxmLkFTWU5DX1dSSVRFX1RJTUVPVVQKKyAgICAgICAgICAgIGVsaWYgc3RhdGUgPT0g cHN5Y29wZzIuZXh0ZW5zaW9ucy5QT0xMX1JFQUQ6CisgICAgICAgICAgICAgICAgIyBXYWl0IGZv ciB0aGUgZ2l2ZW4gdGltZSBhbmQgdGhlbiBjaGVjayB0aGUgcmV0dXJuIHN0YXR1cworICAgICAg ICAgICAgICAgICMgSWYgdGhyZWUgZW1wdHkgbGlzdHMgYXJlIHJldHVybmVkIHRoZW4gdGhlIHRp bWUtb3V0IGlzCisgICAgICAgICAgICAgICAgIyByZWFjaGVkLgorICAgICAgICAgICAgICAgIHRp bWVvdXRfc3RhdHVzID0gc2VsZWN0LnNlbGVjdCgKKyAgICAgICAgICAgICAgICAgICAgW2Nvbm4u ZmlsZW5vKCldLCBbXSwgW10sIHNlbGYuQVNZTkNfVElNRU9VVAorICAgICAgICAgICAgICAgICkK KyAgICAgICAgICAgICAgICBpZiB0aW1lb3V0X3N0YXR1cyA9PSAoW10sIFtdLCBbXSk6CisgICAg ICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLkFTWU5DX1JFQURfVElNRU9VVAorICAgICAgICAg ICAgZWxzZToKKyAgICAgICAgICAgICAgICByYWlzZSBwc3ljb3BnMi5PcGVyYXRpb25hbEVycm9y KAorICAgICAgICAgICAgICAgICAgICAicG9sbCgpIHJldHVybmVkICVzIGZyb20gX3dhaXRfdGlt ZW91dCBmdW5jdGlvbiIgJSBzdGF0ZQorICAgICAgICAgICAgICAgICkKKworICAgIGRlZiBwb2xs KHNlbGYsIGZvcm1hdHRlZF9leGNlcHRpb25fbXNnPUZhbHNlLCBub19yZXN1bHQ9RmFsc2UpOgor ICAgICAgICAiIiIKKyAgICAgICAgVGhpcyBmdW5jdGlvbiBpcyBhIHdyYXBwZXIgYXJvdW5kIGNv bm5lY3Rpb24ncyBwb2xsIGZ1bmN0aW9uLgorICAgICAgICBJdCBpbnRlcm5hbGx5IHVzZXMgdGhl IF93YWl0X3RpbWVvdXQgbWV0aG9kIHRvIHBvbGwgdGhlCisgICAgICAgIHJlc3VsdCBvbiB0aGUg Y29ubmVjdGlvbiBvYmplY3QuIEluIGNhc2Ugb2Ygc3VjY2VzcyBpdAorICAgICAgICByZXR1cm5z IHRoZSByZXN1bHQgb2YgdGhlIHF1ZXJ5LgorCisgICAgICAgIEFyZ3M6CisgICAgICAgICAgICBm b3JtYXR0ZWRfZXhjZXB0aW9uX21zZzogaWYgVHJ1ZSB0aGVuIGZ1bmN0aW9uIHJldHVybiB0aGUg Zm9ybWF0dGVkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhjZXB0aW9u IG1lc3NhZ2UsIG90aGVyd2lzZSBlcnJvciBzdHJpbmcuCisgICAgICAgICAgICBub19yZXN1bHQ6 IElmIFRydWUgdGhlbiBvbmx5IHBvbGwgc3RhdHVzIHdpbGwgYmUgcmV0dXJuZWQuCisgICAgICAg ICIiIgorCisgICAgICAgIGN1ciA9IHNlbGYuX19hc3luY19jdXJzb3IKKyAgICAgICAgaWYgbm90 IGN1cjoKKyAgICAgICAgICAgIHJldHVybiBGYWxzZSwgZ2V0dGV4dCgKKyAgICAgICAgICAgICAg ICAiQ3Vyc29yIGNvdWxkIG5vdCBiZSBmb3VuZCBmb3IgdGhlIGFzeW5jIGNvbm5lY3Rpb24uIgor ICAgICAgICAgICAgKQorCisgICAgICAgIGN1cnJlbnRfYXBwLmxvZ2dlci5sb2coCisgICAgICAg ICAgICAyNSwKKyAgICAgICAgICAgICJQb2xsaW5nIHJlc3VsdCBmb3IgKFF1ZXJ5LWlkOiB7cXVl cnlfaWR9KSIuZm9ybWF0KAorICAgICAgICAgICAgICAgIHF1ZXJ5X2lkPXNlbGYuX19hc3luY19x dWVyeV9pZAorICAgICAgICAgICAgKQorICAgICAgICApCisKKyAgICAgICAgaXNfZXJyb3IgPSBG YWxzZQorICAgICAgICB0cnk6CisgICAgICAgICAgICBzdGF0dXMgPSBzZWxmLl93YWl0X3RpbWVv dXQoc2VsZi5jb25uKQorICAgICAgICBleGNlcHQgcHN5Y29wZzIuRXJyb3IgYXMgcGU6CisgICAg ICAgICAgICBpZiBzZWxmLmNvbm4uY2xvc2VkOgorICAgICAgICAgICAgICAgIHJhaXNlIENvbm5l Y3Rpb25Mb3N0KAorICAgICAgICAgICAgICAgICAgICBzZWxmLm1hbmFnZXIuc2lkLAorICAgICAg ICAgICAgICAgICAgICBzZWxmLmRiLAorICAgICAgICAgICAgICAgICAgICBzZWxmLmNvbm5faWRb NTpdCisgICAgICAgICAgICAgICAgKQorICAgICAgICAgICAgZXJybXNnID0gc2VsZi5fZm9ybWF0 dGVkX2V4Y2VwdGlvbl9tc2cocGUsIGZvcm1hdHRlZF9leGNlcHRpb25fbXNnKQorICAgICAgICAg ICAgaXNfZXJyb3IgPSBUcnVlCisKKyAgICAgICAgaWYgc2VsZi5jb25uLm5vdGljZXMgYW5kIHNl bGYuX19ub3RpY2VzIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgc2VsZi5fX25vdGljZXMuZXh0 ZW5kKHNlbGYuY29ubi5ub3RpY2VzKQorICAgICAgICAgICAgc2VsZi5jb25uLm5vdGljZXMuY2xl YXIoKQorCisgICAgICAgICMgV2UgYWxzbyBuZWVkIHRvIGZldGNoIG5vdGljZXMgYmVmb3JlIHdl IHJldHVybiBmcm9tIGZ1bmN0aW9uIGluIGNhc2UKKyAgICAgICAgIyBvZiBhbnkgRXhjZXB0aW9u LCBUbyBhdm9pZCBjb2RlIGR1cGxpY2F0aW9uIHdlIHdpbGwgcmV0dXJuIGFmdGVyCisgICAgICAg ICMgZmV0Y2hpbmcgdGhlIG5vdGljZXMgaW4gY2FzZSBvZiBhbnkgRXhjZXB0aW9uCisgICAgICAg IGlmIGlzX2Vycm9yOgorICAgICAgICAgICAgcmV0dXJuIEZhbHNlLCBlcnJtc2cKKworICAgICAg ICByZXN1bHQgPSBOb25lCisgICAgICAgIHNlbGYucm93X2NvdW50ID0gMAorICAgICAgICBzZWxm LmNvbHVtbl9pbmZvID0gTm9uZQorCisgICAgICAgIGlmIHN0YXR1cyA9PSBzZWxmLkFTWU5DX09L OgorCisgICAgICAgICAgICAjIGlmIHVzZXIgaGFzIGNhbmNlbGxlZCB0aGUgdHJhbnNhY3Rpb24g dGhlbiBjaGFuZ2VkIHRoZSBzdGF0dXMKKyAgICAgICAgICAgIGlmIHNlbGYuZXhlY3V0aW9uX2Fi b3J0ZWQ6CisgICAgICAgICAgICAgICAgc3RhdHVzID0gc2VsZi5BU1lOQ19FWEVDVVRJT05fQUJP UlRFRAorICAgICAgICAgICAgICAgIHNlbGYuZXhlY3V0aW9uX2Fib3J0ZWQgPSBGYWxzZQorICAg ICAgICAgICAgICAgIHJldHVybiBzdGF0dXMsIHJlc3VsdAorCisgICAgICAgICAgICAjIEZldGNo IHRoZSBjb2x1bW4gaW5mb3JtYXRpb24KKyAgICAgICAgICAgIGlmIGN1ci5kZXNjcmlwdGlvbiBp cyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICBzZWxmLmNvbHVtbl9pbmZvID0gWworICAgICAg ICAgICAgICAgICAgICBkZXNjLnRvX2RpY3QoKSBmb3IgZGVzYyBpbiBjdXIub3JkZXJlZF9kZXNj cmlwdGlvbigpCisgICAgICAgICAgICAgICAgXQorCisgICAgICAgICAgICAgICAgcG9zID0gMAor ICAgICAgICAgICAgICAgIGZvciBjb2wgaW4gc2VsZi5jb2x1bW5faW5mbzoKKyAgICAgICAgICAg ICAgICAgICAgY29sWydwb3MnXSA9IHBvcworICAgICAgICAgICAgICAgICAgICBwb3MgKz0gMQor CisgICAgICAgICAgICBzZWxmLnJvd19jb3VudCA9IGN1ci5yb3djb3VudAorICAgICAgICAgICAg aWYgbm90IG5vX3Jlc3VsdDoKKyAgICAgICAgICAgICAgICBpZiBjdXIucm93Y291bnQgPiAwOgor ICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBbXQorICAgICAgICAgICAgICAgICAgICAjIEZv ciBEREwgb3BlcmF0aW9uLCB3ZSBtYXkgbm90IGhhdmUgcmVzdWx0LgorICAgICAgICAgICAgICAg ICAgICAjCisgICAgICAgICAgICAgICAgICAgICMgQmVjYXVzZSAtIHRoZXJlIGlzIG5vdCBkaXJl Y3Qgd2F5IHRvIGRpZmZlcmVudGlhdGUgRE1MCisgICAgICAgICAgICAgICAgICAgICMgYW5kIERE TCBvcGVyYXRpb25zLCB3ZSBuZWVkIHRvIHJlbHkgb24gZXhjZXB0aW9uIHRvCisgICAgICAgICAg ICAgICAgICAgICMgZmlndXJlIHRoYXQgb3V0IGF0IHRoZSBtb21lbnQuCisgICAgICAgICAgICAg ICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciByb3cgaW4gY3VyOgorICAg ICAgICAgICAgICAgICAgICAgICAgICAgIG5ld19yb3cgPSBbXQorICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGZvciBjb2wgaW4gc2VsZi5jb2x1bW5faW5mbzoKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgbmV3X3Jvdy5hcHBlbmQocm93W2NvbFsnbmFtZSddXSkKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKG5ld19yb3cpCisKKyAgICAgICAgICAg ICAgICAgICAgZXhjZXB0IHBzeWNvcGcyLlByb2dyYW1taW5nRXJyb3I6CisgICAgICAgICAgICAg ICAgICAgICAgICByZXN1bHQgPSBOb25lCisKKyAgICAgICAgcmV0dXJuIHN0YXR1cywgcmVzdWx0 CisKKyAgICBkZWYgc3RhdHVzX21lc3NhZ2Uoc2VsZik6CisgICAgICAgICIiIgorICAgICAgICBU aGlzIGZ1bmN0aW9uIHdpbGwgcmV0dXJuIHRoZSBzdGF0dXMgbWVzc2FnZSByZXR1cm5lZCBieSB0 aGUgbGFzdAorICAgICAgICBjb21tYW5kIGV4ZWN1dGVkIG9uIHRoZSBzZXJ2ZXIuCisgICAgICAg ICIiIgorICAgICAgICBjdXIgPSBzZWxmLl9fYXN5bmNfY3Vyc29yCisgICAgICAgIGlmIG5vdCBj dXI6CisgICAgICAgICAgICByZXR1cm4gZ2V0dGV4dCgKKyAgICAgICAgICAgICAgICAiQ3Vyc29y IGNvdWxkIG5vdCBiZSBmb3VuZCBmb3IgdGhlIGFzeW5jIGNvbm5lY3Rpb24uIgorICAgICAgICAg ICAgKQorCisgICAgICAgIGN1cnJlbnRfYXBwLmxvZ2dlci5sb2coCisgICAgICAgICAgICAyNSwK KyAgICAgICAgICAgICJTdGF0dXMgbWVzc2FnZSBmb3IgKFF1ZXJ5LWlkOiB7cXVlcnlfaWR9KSIu Zm9ybWF0KAorICAgICAgICAgICAgICAgIHF1ZXJ5X2lkPXNlbGYuX19hc3luY19xdWVyeV9pZAor ICAgICAgICAgICAgKQorICAgICAgICApCisKKyAgICAgICAgcmV0dXJuIGN1ci5zdGF0dXNtZXNz YWdlCisKKyAgICBkZWYgcm93c19hZmZlY3RlZChzZWxmKToKKyAgICAgICAgIiIiCisgICAgICAg IFRoaXMgZnVuY3Rpb24gd2lsbCByZXR1cm4gdGhlIG5vIG9mIHJvd3MgYWZmZWN0ZWQgYnkgdGhl IGxhc3QgY29tbWFuZAorICAgICAgICBleGVjdXRlZCBvbiB0aGUgc2VydmVyLgorICAgICAgICAi IiIKKworICAgICAgICByZXR1cm4gc2VsZi5yb3dfY291bnQKKworICAgIGRlZiBnZXRfY29sdW1u X2luZm8oc2VsZik6CisgICAgICAgICIiIgorICAgICAgICBUaGlzIGZ1bmN0aW9uIHdpbGwgcmV0 dXJucyBsaXN0IG9mIGNvbHVtbnMgZm9yIGxhc3QgYXN5bmMgc3FsIGNvbW1hbmQKKyAgICAgICAg ZXhlY3V0ZWQgb24gdGhlIHNlcnZlci4KKyAgICAgICAgIiIiCisKKyAgICAgICAgcmV0dXJuIHNl bGYuY29sdW1uX2luZm8KKworICAgIGRlZiBjYW5jZWxfdHJhbnNhY3Rpb24oc2VsZiwgY29ubl9p ZCwgZGlkPU5vbmUpOgorICAgICAgICAiIiIKKyAgICAgICAgVGhpcyBmdW5jdGlvbiBpcyB1c2Vk IHRvIGNhbmNlbCB0aGUgcnVubmluZyB0cmFuc2FjdGlvbgorICAgICAgICBvZiB0aGUgZ2l2ZW4g Y29ubmVjdGlvbiBpZCBhbmQgZGF0YWJhc2UgaWQgdXNpbmcKKyAgICAgICAgUG9zdGdyZVNRTCdz IHBnX2NhbmNlbF9iYWNrZW5kLgorCisgICAgICAgIEFyZ3M6CisgICAgICAgICAgICBjb25uX2lk OiBDb25uZWN0aW9uIGlkCisgICAgICAgICAgICBkaWQ6IERhdGFiYXNlIGlkIChvcHRpb25hbCkK KyAgICAgICAgIiIiCisgICAgICAgIGNhbmNlbF9jb25uID0gc2VsZi5tYW5hZ2VyLmNvbm5lY3Rp b24oZGlkPWRpZCwgY29ubl9pZD1jb25uX2lkKQorICAgICAgICBxdWVyeSA9ICIiIlNFTEVDVCBw Z19jYW5jZWxfYmFja2VuZCh7MH0pOyIiIi5mb3JtYXQoCisgICAgICAgICAgICBjYW5jZWxfY29u bi5fX2JhY2tlbmRfcGlkKQorCisgICAgICAgIHN0YXR1cyA9IFRydWUKKyAgICAgICAgbXNnID0g JycKKworICAgICAgICAjIGlmIGJhY2tlbmQgcGlkIGlzIHNhbWUgdGhlbiBjcmVhdGUgYSBuZXcg Y29ubmVjdGlvbgorICAgICAgICAjIHRvIGNhbmNlbCB0aGUgcXVlcnkgYW5kIHJlbGVhc2UgaXQu CisgICAgICAgIGlmIGNhbmNlbF9jb25uLl9fYmFja2VuZF9waWQgPT0gc2VsZi5fX2JhY2tlbmRf cGlkOgorICAgICAgICAgICAgcGFzc3dvcmQgPSBnZXRhdHRyKHNlbGYubWFuYWdlciwgJ3Bhc3N3 b3JkJywgTm9uZSkKKyAgICAgICAgICAgIGlmIHBhc3N3b3JkOgorICAgICAgICAgICAgICAgICMg RmV0Y2ggTG9nZ2VkIGluIFVzZXIgRGV0YWlscy4KKyAgICAgICAgICAgICAgICB1c2VyID0gVXNl ci5xdWVyeS5maWx0ZXJfYnkoaWQ9Y3VycmVudF91c2VyLmlkKS5maXJzdCgpCisgICAgICAgICAg ICAgICAgaWYgdXNlciBpcyBOb25lOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2Us IGdldHRleHQoIlVuYXV0aG9yaXplZCByZXF1ZXN0LiIpCisKKyAgICAgICAgICAgICAgICBwYXNz d29yZCA9IGRlY3J5cHQocGFzc3dvcmQsIHVzZXIucGFzc3dvcmQpLmRlY29kZSgpCisKKyAgICAg ICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBwZ19jb25uID0gcHN5Y29wZzIuY29ubmVjdCgK KyAgICAgICAgICAgICAgICAgICAgaG9zdD1zZWxmLm1hbmFnZXIuaG9zdCwKKyAgICAgICAgICAg ICAgICAgICAgaG9zdGFkZHI9c2VsZi5tYW5hZ2VyLmhvc3RhZGRyLAorICAgICAgICAgICAgICAg ICAgICBwb3J0PXNlbGYubWFuYWdlci5wb3J0LAorICAgICAgICAgICAgICAgICAgICBkYXRhYmFz ZT1zZWxmLmRiLAorICAgICAgICAgICAgICAgICAgICB1c2VyPXNlbGYubWFuYWdlci51c2VyLAor ICAgICAgICAgICAgICAgICAgICBwYXNzd29yZD1wYXNzd29yZCwKKyAgICAgICAgICAgICAgICAg ICAgcGFzc2ZpbGU9Z2V0X2NvbXBsZXRlX2ZpbGVfcGF0aChzZWxmLm1hbmFnZXIucGFzc2ZpbGUp LAorICAgICAgICAgICAgICAgICAgICBzc2xtb2RlPXNlbGYubWFuYWdlci5zc2xfbW9kZSwKKyAg ICAgICAgICAgICAgICAgICAgc3NsY2VydD1nZXRfY29tcGxldGVfZmlsZV9wYXRoKHNlbGYubWFu YWdlci5zc2xjZXJ0KSwKKyAgICAgICAgICAgICAgICAgICAgc3Nsa2V5PWdldF9jb21wbGV0ZV9m aWxlX3BhdGgoc2VsZi5tYW5hZ2VyLnNzbGtleSksCisgICAgICAgICAgICAgICAgICAgIHNzbHJv b3RjZXJ0PWdldF9jb21wbGV0ZV9maWxlX3BhdGgoCisgICAgICAgICAgICAgICAgICAgICAgICBz ZWxmLm1hbmFnZXIuc3Nscm9vdGNlcnQKKyAgICAgICAgICAgICAgICAgICAgKSwKKyAgICAgICAg ICAgICAgICAgICAgc3NsY3JsPWdldF9jb21wbGV0ZV9maWxlX3BhdGgoc2VsZi5tYW5hZ2VyLnNz bGNybCksCisgICAgICAgICAgICAgICAgICAgIHNzbGNvbXByZXNzaW9uPVRydWUgaWYgc2VsZi5t YW5hZ2VyLnNzbGNvbXByZXNzaW9uCisgICAgICAgICAgICAgICAgICAgIGVsc2UgRmFsc2UsCisg ICAgICAgICAgICAgICAgICAgIHNlcnZpY2U9c2VsZi5tYW5hZ2VyLnNlcnZpY2UKKyAgICAgICAg ICAgICAgICApCisKKyAgICAgICAgICAgICAgICAjIEdldCB0aGUgY3Vyc29yIGFuZCBydW4gdGhl IHF1ZXJ5CisgICAgICAgICAgICAgICAgY3VyID0gcGdfY29ubi5jdXJzb3IoKQorICAgICAgICAg ICAgICAgIGN1ci5leGVjdXRlKHF1ZXJ5KQorCisgICAgICAgICAgICAgICAgIyBDbG9zZSB0aGUg Y29ubmVjdGlvbgorICAgICAgICAgICAgICAgIHBnX2Nvbm4uY2xvc2UoKQorICAgICAgICAgICAg ICAgIHBnX2Nvbm4gPSBOb25lCisKKyAgICAgICAgICAgIGV4Y2VwdCBwc3ljb3BnMi5FcnJvciBh cyBlOgorICAgICAgICAgICAgICAgIHN0YXR1cyA9IEZhbHNlCisgICAgICAgICAgICAgICAgaWYg ZS5wZ2Vycm9yOgorICAgICAgICAgICAgICAgICAgICBtc2cgPSBlLnBnZXJyb3IKKyAgICAgICAg ICAgICAgICBlbGlmIGUuZGlhZy5tZXNzYWdlX2RldGFpbDoKKyAgICAgICAgICAgICAgICAgICAg bXNnID0gZS5kaWFnLm1lc3NhZ2VfZGV0YWlsCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAg ICAgICAgICAgICAgICAgbXNnID0gc3RyKGUpCisgICAgICAgICAgICAgICAgcmV0dXJuIHN0YXR1 cywgbXNnCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBpZiBzZWxmLmNvbm5lY3RlZCgpOgor ICAgICAgICAgICAgICAgIHN0YXR1cywgbXNnID0gc2VsZi5leGVjdXRlX3ZvaWQocXVlcnkpCisK KyAgICAgICAgICAgICAgICBpZiBzdGF0dXM6CisgICAgICAgICAgICAgICAgICAgIGNhbmNlbF9j b25uLmV4ZWN1dGlvbl9hYm9ydGVkID0gVHJ1ZQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAg ICAgICAgICBzdGF0dXMgPSBGYWxzZQorICAgICAgICAgICAgICAgIG1zZyA9IGdldHRleHQoIk5v dCBjb25uZWN0ZWQgdG8gdGhlIGRhdGFiYXNlIHNlcnZlci4iKQorCisgICAgICAgIHJldHVybiBz dGF0dXMsIG1zZworCisgICAgZGVmIG1lc3NhZ2VzKHNlbGYpOgorICAgICAgICAiIiIKKyAgICAg ICAgUmV0dXJucyB0aGUgbGlzdCBvZiB0aGUgbWVzc2FnZXMvbm90aWNlcyBzZW5kIGZyb20gdGhl IGRhdGFiYXNlIHNlcnZlci4KKyAgICAgICAgIiIiCisgICAgICAgIHJlc3AgPSBbXQorICAgICAg ICB3aGlsZSBzZWxmLl9fbm90aWNlczoKKyAgICAgICAgICAgIHJlc3AuYXBwZW5kKHNlbGYuX19u b3RpY2VzLnBvcCgwKSkKKyAgICAgICAgcmV0dXJuIHJlc3AKKworICAgIGRlZiBkZWNvZGVfdG9f dXRmOChzZWxmLCB2YWx1ZSk6CisgICAgICAgICIiIgorICAgICAgICBUaGlzIG1ldGhvZCB3aWxs IGRlY29kZSB2YWx1ZXMgdG8gdXRmLTgKKyAgICAgICAgQXJnczoKKyAgICAgICAgICAgIHZhbHVl OiBTdHJpbmcgdG8gYmUgZGVjb2RlCisKKyAgICAgICAgUmV0dXJuczoKKyAgICAgICAgICAgIERl Y29kZWQgc3RyaW5nCisgICAgICAgICIiIgorICAgICAgICBpc19lcnJvciA9IEZhbHNlCisgICAg ICAgIGlmIGhhc2F0dHIoc3RyLCAnZGVjb2RlJyk6CisgICAgICAgICAgICB0cnk6CisgICAgICAg ICAgICAgICAgdmFsdWUgPSB2YWx1ZS5kZWNvZGUoJ3V0Zi04JykKKyAgICAgICAgICAgIGV4Y2Vw dCBVbmljb2RlRGVjb2RlRXJyb3I6CisgICAgICAgICAgICAgICAgIyBMZXQncyB0cnkgd2l0aCBw eXRob24ncyBwcmVmZXJyZWQgZW5jb2RpbmcKKyAgICAgICAgICAgICAgICAjIE9uIFdpbmRvd3Mg bGNfbWVzc2FnZXMgbW9zdGx5IGhhcyBlbnZpcm9ubWVudCBkZXBlbmRlbnQKKyAgICAgICAgICAg ICAgICAjIGVuY29kaW5nIGxpa2UgJ0ZyZW5jaF9GcmFuY2UuMTI1MicKKyAgICAgICAgICAgICAg ICB0cnk6CisgICAgICAgICAgICAgICAgICAgIGltcG9ydCBsb2NhbGUKKyAgICAgICAgICAgICAg ICAgICAgcHJlZl9lbmNvZGluZyA9IGxvY2FsZS5nZXRwcmVmZXJyZWRlbmNvZGluZygpCisgICAg ICAgICAgICAgICAgICAgIHZhbHVlID0gdmFsdWUuZGVjb2RlKHByZWZfZW5jb2RpbmcpXAorICAg ICAgICAgICAgICAgICAgICAgICAgLmVuY29kZSgndXRmLTgnKVwKKyAgICAgICAgICAgICAgICAg ICAgICAgIC5kZWNvZGUoJ3V0Zi04JykKKyAgICAgICAgICAgICAgICBleGNlcHQgRXhjZXB0aW9u OgorICAgICAgICAgICAgICAgICAgICBpc19lcnJvciA9IFRydWUKKyAgICAgICAgICAgIGV4Y2Vw dCBFeGNlcHRpb246CisgICAgICAgICAgICAgICAgaXNfZXJyb3IgPSBUcnVlCisKKyAgICAgICAg IyBJZiBzdGlsbCBub3QgYWJsZSB0byBkZWNvZGUgdGhlbgorICAgICAgICBpZiBpc19lcnJvcjoK KyAgICAgICAgICAgIHZhbHVlID0gdmFsdWUuZGVjb2RlKCdhc2NpaScsICdpZ25vcmUnKQorCisg ICAgICAgIHJldHVybiB2YWx1ZQorCisgICAgZGVmIF9mb3JtYXR0ZWRfZXhjZXB0aW9uX21zZyhz ZWxmLCBleGNlcHRpb25fb2JqLCBmb3JtYXR0ZWRfbXNnKToKKyAgICAgICAgIiIiCisgICAgICAg IFRoaXMgbWV0aG9kIGlzIHVzZWQgdG8gcGFyc2UgdGhlIHBzeWNvcGcyLkVycm9yIG9iamVjdCBh bmQgcmV0dXJucyB0aGUKKyAgICAgICAgZm9ybWF0dGVkIGVycm9yIG1lc3NhZ2UgaWYgZmxhZyBp cyBzZXQgdG8gdHJ1ZSBlbHNlIHJldHVybgorICAgICAgICBub3JtYWwgZXJyb3IgbWVzc2FnZS4K KworICAgICAgICBBcmdzOgorICAgICAgICAgICAgZXhjZXB0aW9uX29iajogZXhjZXB0aW9uIG9i amVjdAorICAgICAgICAgICAgZm9ybWF0dGVkX21zZzogaWYgVHJ1ZSB0aGVuIGZ1bmN0aW9uIHJl dHVybiB0aGUgZm9ybWF0dGVkIGV4Y2VwdGlvbgorICAgICAgICAgICAgbWVzc2FnZQorCisgICAg ICAgICIiIgorICAgICAgICBpZiBleGNlcHRpb25fb2JqLnBnZXJyb3I6CisgICAgICAgICAgICBl cnJtc2cgPSBleGNlcHRpb25fb2JqLnBnZXJyb3IKKyAgICAgICAgZWxpZiBleGNlcHRpb25fb2Jq LmRpYWcubWVzc2FnZV9kZXRhaWw6CisgICAgICAgICAgICBlcnJtc2cgPSBleGNlcHRpb25fb2Jq LmRpYWcubWVzc2FnZV9kZXRhaWwKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGVycm1zZyA9 IHN0cihleGNlcHRpb25fb2JqKQorICAgICAgICAjIGVycm1zZyBtaWdodCBjb250YWlucyBlbmNv ZGVkIHZhbHVlLCBsZXRzIGRlY29kZSBpdAorICAgICAgICBlcnJtc2cgPSBzZWxmLmRlY29kZV90 b191dGY4KGVycm1zZykKKworICAgICAgICAjIGlmIGZvcm1hdHRlZF9tc2cgaXMgZmFsc2UgdGhl biByZXR1cm4gZnJvbSB0aGUgZnVuY3Rpb24KKyAgICAgICAgaWYgbm90IGZvcm1hdHRlZF9tc2c6 CisgICAgICAgICAgICByZXR1cm4gZXJybXNnCisKKyAgICAgICAgIyBEbyBub3QgYXBwZW5kIGlm IGVycm9yIHN0YXJ0cyB3aXRoIGBFUlJPUjpgIGFzIG1vc3QgcGcgcmVsYXRlZAorICAgICAgICAj IGVycm9yIHN0YXJ0cyB3aXRoIGBFUlJPUjpgCisgICAgICAgIGlmIG5vdCBlcnJtc2cuc3RhcnRz d2l0aCh1J0VSUk9SOicpOgorICAgICAgICAgICAgZXJybXNnID0gdSdFUlJPUjogICcgKyBlcnJt c2cgKyB1J1xuXG4nCisKKyAgICAgICAgaWYgZXhjZXB0aW9uX29iai5kaWFnLnNldmVyaXR5IGlz IG5vdCBOb25lIFwKKyAgICAgICAgICAgICAgICBhbmQgZXhjZXB0aW9uX29iai5kaWFnLm1lc3Nh Z2VfcHJpbWFyeSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIGV4X2RpYWdfbWVzc2FnZSA9IHUi ezB9OiAgezF9Ii5mb3JtYXQoCisgICAgICAgICAgICAgICAgZXhjZXB0aW9uX29iai5kaWFnLnNl dmVyaXR5LAorICAgICAgICAgICAgICAgIHNlbGYuZGVjb2RlX3RvX3V0ZjgoZXhjZXB0aW9uX29i ai5kaWFnLm1lc3NhZ2VfcHJpbWFyeSkKKyAgICAgICAgICAgICkKKyAgICAgICAgICAgICMgSWYg Ym90aCBlcnJvcnMgYXJlIGRpZmZlcmVudCB0aGVuIG9ubHkgYXBwZW5kIGl0CisgICAgICAgICAg ICBpZiBlcnJtc2cgYW5kIGV4X2RpYWdfbWVzc2FnZSBhbmQgXAorICAgICAgICAgICAgICAgIGV4 X2RpYWdfbWVzc2FnZS5zdHJpcCgpLnN0cmlwKCdcbicpLmxvd2VyKCkgbm90IGluIFwKKyAgICAg ICAgICAgICAgICAgICAgZXJybXNnLnN0cmlwKCkuc3RyaXAoJ1xuJykubG93ZXIoKToKKyAgICAg ICAgICAgICAgICBlcnJtc2cgKz0gZXhfZGlhZ19tZXNzYWdlCisgICAgICAgIGVsaWYgZXhjZXB0 aW9uX29iai5kaWFnLm1lc3NhZ2VfcHJpbWFyeSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIG1l c3NhZ2VfcHJpbWFyeSA9IHNlbGYuZGVjb2RlX3RvX3V0ZjgoCisgICAgICAgICAgICAgICAgZXhj ZXB0aW9uX29iai5kaWFnLm1lc3NhZ2VfcHJpbWFyeQorICAgICAgICAgICAgKQorICAgICAgICAg ICAgaWYgbWVzc2FnZV9wcmltYXJ5Lmxvd2VyKCkgbm90IGluIGVycm1zZy5sb3dlcigpOgorICAg ICAgICAgICAgICAgIGVycm1zZyArPSBtZXNzYWdlX3ByaW1hcnkKKworICAgICAgICBpZiBleGNl cHRpb25fb2JqLmRpYWcuc3Fsc3RhdGUgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBpZiBub3Qg ZXJybXNnLmVuZHN3aXRoKCdcbicpOgorICAgICAgICAgICAgICAgIGVycm1zZyArPSAnXG4nCisg ICAgICAgICAgICBlcnJtc2cgKz0gZ2V0dGV4dCgnU1FMIHN0YXRlOiAnKQorICAgICAgICAgICAg ZXJybXNnICs9IHNlbGYuZGVjb2RlX3RvX3V0ZjgoZXhjZXB0aW9uX29iai5kaWFnLnNxbHN0YXRl KQorCisgICAgICAgIGlmIGV4Y2VwdGlvbl9vYmouZGlhZy5tZXNzYWdlX2RldGFpbCBpcyBub3Qg Tm9uZToKKyAgICAgICAgICAgIGlmICdEZXRhaWw6Jy5sb3dlcigpIG5vdCBpbiBlcnJtc2cubG93 ZXIoKToKKyAgICAgICAgICAgICAgICBpZiBub3QgZXJybXNnLmVuZHN3aXRoKCdcbicpOgorICAg ICAgICAgICAgICAgICAgICBlcnJtc2cgKz0gJ1xuJworICAgICAgICAgICAgICAgIGVycm1zZyAr PSBnZXR0ZXh0KCdEZXRhaWw6ICcpCisgICAgICAgICAgICAgICAgZXJybXNnICs9IHNlbGYuZGVj b2RlX3RvX3V0ZjgoCisgICAgICAgICAgICAgICAgICAgIGV4Y2VwdGlvbl9vYmouZGlhZy5tZXNz YWdlX2RldGFpbAorICAgICAgICAgICAgICAgICkKKworICAgICAgICBpZiBleGNlcHRpb25fb2Jq LmRpYWcubWVzc2FnZV9oaW50IGlzIG5vdCBOb25lOgorICAgICAgICAgICAgaWYgJ0hpbnQ6Jy5s b3dlcigpIG5vdCBpbiBlcnJtc2cubG93ZXIoKToKKyAgICAgICAgICAgICAgICBpZiBub3QgZXJy bXNnLmVuZHN3aXRoKCdcbicpOgorICAgICAgICAgICAgICAgICAgICBlcnJtc2cgKz0gJ1xuJwor ICAgICAgICAgICAgICAgIGVycm1zZyArPSBnZXR0ZXh0KCdIaW50OiAnKQorICAgICAgICAgICAg ICAgIGVycm1zZyArPSBzZWxmLmRlY29kZV90b191dGY4KGV4Y2VwdGlvbl9vYmouZGlhZy5tZXNz YWdlX2hpbnQpCisKKyAgICAgICAgaWYgZXhjZXB0aW9uX29iai5kaWFnLnN0YXRlbWVudF9wb3Np dGlvbiBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIGlmICdDaGFyYWN0ZXI6Jy5sb3dlcigpIG5v dCBpbiBlcnJtc2cubG93ZXIoKToKKyAgICAgICAgICAgICAgICBpZiBub3QgZXJybXNnLmVuZHN3 aXRoKCdcbicpOgorICAgICAgICAgICAgICAgICAgICBlcnJtc2cgKz0gJ1xuJworICAgICAgICAg ICAgICAgIGVycm1zZyArPSBnZXR0ZXh0KCdDaGFyYWN0ZXI6ICcpCisgICAgICAgICAgICAgICAg ZXJybXNnICs9IHNlbGYuZGVjb2RlX3RvX3V0ZjgoCisgICAgICAgICAgICAgICAgICAgIGV4Y2Vw dGlvbl9vYmouZGlhZy5zdGF0ZW1lbnRfcG9zaXRpb24KKyAgICAgICAgICAgICAgICApCisKKyAg ICAgICAgaWYgZXhjZXB0aW9uX29iai5kaWFnLmNvbnRleHQgaXMgbm90IE5vbmU6CisgICAgICAg ICAgICBpZiAnQ29udGV4dDonLmxvd2VyKCkgbm90IGluIGVycm1zZy5sb3dlcigpOgorICAgICAg ICAgICAgICAgIGlmIG5vdCBlcnJtc2cuZW5kc3dpdGgoJ1xuJyk6CisgICAgICAgICAgICAgICAg ICAgIGVycm1zZyArPSAnXG4nCisgICAgICAgICAgICAgICAgZXJybXNnICs9IGdldHRleHQoJ0Nv bnRleHQ6ICcpCisgICAgICAgICAgICAgICAgZXJybXNnICs9IHNlbGYuZGVjb2RlX3RvX3V0Zjgo ZXhjZXB0aW9uX29iai5kaWFnLmNvbnRleHQpCisKKyAgICAgICAgcmV0dXJuIGVycm1zZworCisg ICAgIyMjIyMKKyAgICAjIEFzIHBlciBpc3N1ZSByZXBvcnRlZCBvbiBwZ3N5Y29wZzIgZ2l0aHVi IHJlcG9zaXRvcnkgbGluayBpcyBzaGFyZWQgYmVsb3cKKyAgICAjIGNvbm4uY2xvc2VkIGlzIG5v dCByZWxpYWJsZSBlbm91Z2ggdG8gaWRlbnRpZnkgdGhlIGRpc2Nvbm5lY3Rpb24gZnJvbSB0aGUK KyAgICAjIGRhdGFiYXNlIHNlcnZlciBmb3Igc29tZSB1bmtub3duIHJlYXNvbnMuCisgICAgIwor ICAgICMgKGh0dHBzOi8vZ2l0aHViLmNvbS9wc3ljb3BnL3BzeWNvcGcyL2lzc3Vlcy8yNjMpCisg ICAgIworICAgICMgSW4gb3JkZXIgdG8gcmVzb2x2ZSB0aGUgaXNzdWUsIHNxbGFsY2hhbWV5IGZv bGxvd3MgdGhlIGJlbG93IGxvZ2ljIHRvCisgICAgIyBpZGVudGlmeSB0aGUgZGlzY29ubmVjdGlv bi4gSXQgcmVsaWVzIG9uIGV4Y2VwdGlvbiBtZXNzYWdlIHRvIGlkZW50aWZ5CisgICAgIyB0aGUg ZXJyb3IuCisgICAgIworICAgICMgUmVmZXJlbmNlIChNSVQgbGljZW5zZSk6CisgICAgIyBodHRw czovL2dpdGh1Yi5jb20venp6ZWVrL3NxbGFsY2hlbXkvYmxvYi9tYXN0ZXIvbGliL3NxbGFsY2hl bXkvZGlhbGVjdHMvcG9zdGdyZXNxbC9wc3ljb3BnMi5weQorICAgICMKKyAgICBkZWYgaXNfZGlz Y29ubmVjdGVkKHNlbGYsIGVycik6CisgICAgICAgIGlmIG5vdCBzZWxmLmNvbm4uY2xvc2VkOgor ICAgICAgICAgICAgIyBjaGVja3MgYmFzZWQgb24gc3RyaW5ncy4gIGluIHRoZSBjYXNlIHRoYXQg LmNsb3NlZAorICAgICAgICAgICAgIyBkaWRuJ3QgY3V0IGl0LCBmYWxsIGJhY2sgb250byB0aGVz ZS4KKyAgICAgICAgICAgIHN0cl9lID0gc3RyKGVycikucGFydGl0aW9uKCJcbiIpWzBdCisgICAg ICAgICAgICBmb3IgbXNnIGluIFsKKyAgICAgICAgICAgICAgICAjIHRoZXNlIGVycm9yIG1lc3Nh Z2VzIGZyb20gbGlicHE6IGludGVyZmFjZXMvbGlicHEvZmUtbWlzYy5jCisgICAgICAgICAgICAg ICAgIyBhbmQgaW50ZXJmYWNlcy9saWJwcS9mZS1zZWN1cmUuYy4KKyAgICAgICAgICAgICAgICAn dGVybWluYXRpbmcgY29ubmVjdGlvbicsCisgICAgICAgICAgICAgICAgJ2Nsb3NlZCB0aGUgY29u bmVjdGlvbicsCisgICAgICAgICAgICAgICAgJ2Nvbm5lY3Rpb24gbm90IG9wZW4nLAorICAgICAg ICAgICAgICAgICdjb3VsZCBub3QgcmVjZWl2ZSBkYXRhIGZyb20gc2VydmVyJywKKyAgICAgICAg ICAgICAgICAnY291bGQgbm90IHNlbmQgZGF0YSB0byBzZXJ2ZXInLAorICAgICAgICAgICAgICAg ICMgcHN5Y29wZzIgY2xpZW50IGVycm9ycywgcHN5Y29wZzIvY29uZW5jdGlvbi5oLAorICAgICAg ICAgICAgICAgICMgcHN5Y29wZzIvY3Vyc29yLmgKKyAgICAgICAgICAgICAgICAnY29ubmVjdGlv biBhbHJlYWR5IGNsb3NlZCcsCisgICAgICAgICAgICAgICAgJ2N1cnNvciBhbHJlYWR5IGNsb3Nl ZCcsCisgICAgICAgICAgICAgICAgIyBub3Qgc3VyZSB3aGVyZSB0aGlzIHBhdGggaXMgb3JpZ2lu YWxseSBmcm9tLCBpdCBtYXkKKyAgICAgICAgICAgICAgICAjIGJlIG9ic29sZXRlLiAgIEl0IHJl YWxseSBzYXlzICJsb3NlZCIsIG5vdCAiY2xvc2VkIi4KKyAgICAgICAgICAgICAgICAnbG9zZWQg dGhlIGNvbm5lY3Rpb24gdW5leHBlY3RlZGx5JywKKyAgICAgICAgICAgICAgICAjIHRoZXNlIGNh biBvY2N1ciBpbiBuZXdlciBTU0wKKyAgICAgICAgICAgICAgICAnY29ubmVjdGlvbiBoYXMgYmVl biBjbG9zZWQgdW5leHBlY3RlZGx5JywKKyAgICAgICAgICAgICAgICAnU1NMIFNZU0NBTEwgZXJy b3I6IEJhZCBmaWxlIGRlc2NyaXB0b3InLAorICAgICAgICAgICAgICAgICdTU0wgU1lTQ0FMTCBl cnJvcjogRU9GIGRldGVjdGVkJywKKyAgICAgICAgICAgIF06CisgICAgICAgICAgICAgICAgaWR4 ID0gc3RyX2UuZmluZChtc2cpCisgICAgICAgICAgICAgICAgaWYgaWR4ID49IDAgYW5kICciJyBu b3QgaW4gc3RyX2VbOmlkeF06CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBUcnVlCisKKyAg ICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICByZXR1cm4gVHJ1ZQpkaWZmIC0tZ2l0IGEv d2ViL3BnYWRtaW4vdXRpbHMvZHJpdmVyL3BzeWNvcGcyL3NlcnZlcl9tYW5hZ2VyLnB5IGIvd2Vi L3BnYWRtaW4vdXRpbHMvZHJpdmVyL3BzeWNvcGcyL3NlcnZlcl9tYW5hZ2VyLnB5Cm5ldyBmaWxl IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIyOTllMjgKLS0tIC9kZXYvbnVsbAorKysgYi93 ZWIvcGdhZG1pbi91dGlscy9kcml2ZXIvcHN5Y29wZzIvc2VydmVyX21hbmFnZXIucHkKQEAgLTAs MCArMSwzMzMgQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjCisjIHBnQWRtaW4gNCAtIFBvc3RncmVT UUwgVG9vbHMKKyMKKyMgQ29weXJpZ2h0IChDKSAyMDEzIC0gMjAxOCwgVGhlIHBnQWRtaW4gRGV2 ZWxvcG1lbnQgVGVhbQorIyBUaGlzIHNvZnR3YXJlIGlzIHJlbGVhc2VkIHVuZGVyIHRoZSBQb3N0 Z3JlU1FMIExpY2VuY2UKKyMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyIiIgorSW1wbGVtZW50YXRp b24gb2YgU2VydmVyTWFuYWdlcgorIiIiCitpbXBvcnQgb3MKK2ltcG9ydCBkYXRldGltZQorZnJv bSBmbGFzayBpbXBvcnQgY3VycmVudF9hcHAsIHNlc3Npb24KK2Zyb20gZmxhc2tfc2VjdXJpdHkg aW1wb3J0IGN1cnJlbnRfdXNlcgorZnJvbSBmbGFza19iYWJlbCBpbXBvcnQgZ2V0dGV4dAorCitm cm9tIHBnYWRtaW4udXRpbHMuY3J5cHRvIGltcG9ydCBkZWNyeXB0Citmcm9tIC5jb25uZWN0aW9u IGltcG9ydCBDb25uZWN0aW9uCitmcm9tIHBnYWRtaW4ubW9kZWwgaW1wb3J0IFNlcnZlcgorCisK K2NsYXNzIFNlcnZlck1hbmFnZXIob2JqZWN0KToKKyAgICAiIiIKKyAgICBjbGFzcyBTZXJ2ZXJN YW5hZ2VyCisKKyAgICBUaGlzIGNsYXNzIGNvbnRhaW5zIHRoZSBpbmZvcm1hdGlvbiBhYm91dCB0 aGUgZ2l2ZW4gc2VydmVyLgorICAgIEFuZCwgYWN0cyBhcyBjb25uZWN0aW9uIG1hbmFnZXIgZm9y IHRoYXQgcGFydGljdWxhciBzZXNzaW9uLgorICAgICIiIgorCisgICAgZGVmIF9faW5pdF9fKHNl bGYsIHNlcnZlcik6CisgICAgICAgIHNlbGYuY29ubmVjdGlvbnMgPSBkaWN0KCkKKworICAgICAg ICBzZWxmLnVwZGF0ZShzZXJ2ZXIpCisKKyAgICBkZWYgdXBkYXRlKHNlbGYsIHNlcnZlcik6Cisg ICAgICAgIGFzc2VydCAoc2VydmVyIGlzIG5vdCBOb25lKQorICAgICAgICBhc3NlcnQgKGlzaW5z dGFuY2Uoc2VydmVyLCBTZXJ2ZXIpKQorCisgICAgICAgIHNlbGYudmVyID0gTm9uZQorICAgICAg ICBzZWxmLnN2ZXJzaW9uID0gTm9uZQorICAgICAgICBzZWxmLnNlcnZlcl90eXBlID0gTm9uZQor ICAgICAgICBzZWxmLnNlcnZlcl9jbHMgPSBOb25lCisgICAgICAgIHNlbGYucGFzc3dvcmQgPSBO b25lCisKKyAgICAgICAgc2VsZi5zaWQgPSBzZXJ2ZXIuaWQKKyAgICAgICAgc2VsZi5ob3N0ID0g c2VydmVyLmhvc3QKKyAgICAgICAgc2VsZi5ob3N0YWRkciA9IHNlcnZlci5ob3N0YWRkcgorICAg ICAgICBzZWxmLnBvcnQgPSBzZXJ2ZXIucG9ydAorICAgICAgICBzZWxmLmRiID0gc2VydmVyLm1h aW50ZW5hbmNlX2RiCisgICAgICAgIHNlbGYuZGlkID0gTm9uZQorICAgICAgICBzZWxmLnVzZXIg PSBzZXJ2ZXIudXNlcm5hbWUKKyAgICAgICAgc2VsZi5wYXNzd29yZCA9IHNlcnZlci5wYXNzd29y ZAorICAgICAgICBzZWxmLnJvbGUgPSBzZXJ2ZXIucm9sZQorICAgICAgICBzZWxmLnNzbF9tb2Rl ID0gc2VydmVyLnNzbF9tb2RlCisgICAgICAgIHNlbGYucGluZ2VkID0gZGF0ZXRpbWUuZGF0ZXRp bWUubm93KCkKKyAgICAgICAgc2VsZi5kYl9pbmZvID0gZGljdCgpCisgICAgICAgIHNlbGYuc2Vy dmVyX3R5cGVzID0gTm9uZQorICAgICAgICBzZWxmLmRiX3JlcyA9IHNlcnZlci5kYl9yZXMKKyAg ICAgICAgc2VsZi5wYXNzZmlsZSA9IHNlcnZlci5wYXNzZmlsZQorICAgICAgICBzZWxmLnNzbGNl cnQgPSBzZXJ2ZXIuc3NsY2VydAorICAgICAgICBzZWxmLnNzbGtleSA9IHNlcnZlci5zc2xrZXkK KyAgICAgICAgc2VsZi5zc2xyb290Y2VydCA9IHNlcnZlci5zc2xyb290Y2VydAorICAgICAgICBz ZWxmLnNzbGNybCA9IHNlcnZlci5zc2xjcmwKKyAgICAgICAgc2VsZi5zc2xjb21wcmVzc2lvbiA9 IFRydWUgaWYgc2VydmVyLnNzbGNvbXByZXNzaW9uIGVsc2UgRmFsc2UKKyAgICAgICAgc2VsZi5z ZXJ2aWNlID0gc2VydmVyLnNlcnZpY2UKKworICAgICAgICBmb3IgY29uIGluIHNlbGYuY29ubmVj dGlvbnM6CisgICAgICAgICAgICBzZWxmLmNvbm5lY3Rpb25zW2Nvbl0uX3JlbGVhc2UoKQorCisg ICAgICAgIHNlbGYudXBkYXRlX3Nlc3Npb24oKQorCisgICAgICAgIHNlbGYuY29ubmVjdGlvbnMg PSBkaWN0KCkKKworICAgIGRlZiBhc19kaWN0KHNlbGYpOgorICAgICAgICAiIiIKKyAgICAgICAg UmV0dXJucyBhIGRpY3Rpb25hcnkgb2JqZWN0IHJlcHJlc2VudGluZyB0aGUgc2VydmVyIG1hbmFn ZXIuCisgICAgICAgICIiIgorICAgICAgICBpZiBzZWxmLnZlciBpcyBOb25lIG9yIGxlbihzZWxm LmNvbm5lY3Rpb25zKSA9PSAwOgorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKworICAgICAgICBy ZXMgPSBkaWN0KCkKKyAgICAgICAgcmVzWydzaWQnXSA9IHNlbGYuc2lkCisgICAgICAgIHJlc1sn dmVyJ10gPSBzZWxmLnZlcgorICAgICAgICByZXNbJ3N2ZXJzaW9uJ10gPSBzZWxmLnN2ZXJzaW9u CisgICAgICAgIGlmIGhhc2F0dHIoc2VsZiwgJ3Bhc3N3b3JkJykgYW5kIHNlbGYucGFzc3dvcmQ6 CisgICAgICAgICAgICAjIElmIHJ1bm5pbmcgdW5kZXIgUFkyCisgICAgICAgICAgICBpZiBoYXNh dHRyKHNlbGYucGFzc3dvcmQsICdkZWNvZGUnKToKKyAgICAgICAgICAgICAgICByZXNbJ3Bhc3N3 b3JkJ10gPSBzZWxmLnBhc3N3b3JkLmRlY29kZSgndXRmLTgnKQorICAgICAgICAgICAgZWxzZToK KyAgICAgICAgICAgICAgICByZXNbJ3Bhc3N3b3JkJ10gPSBzdHIoc2VsZi5wYXNzd29yZCkKKyAg ICAgICAgZWxzZToKKyAgICAgICAgICAgIHJlc1sncGFzc3dvcmQnXSA9IHNlbGYucGFzc3dvcmQK KworICAgICAgICBjb25uZWN0aW9ucyA9IHJlc1snY29ubmVjdGlvbnMnXSA9IGRpY3QoKQorCisg ICAgICAgIGZvciBjb25uX2lkIGluIHNlbGYuY29ubmVjdGlvbnM6CisgICAgICAgICAgICBjb25u ID0gc2VsZi5jb25uZWN0aW9uc1tjb25uX2lkXS5hc19kaWN0KCkKKworICAgICAgICAgICAgaWYg Y29ubiBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICBjb25uZWN0aW9uc1tjb25uX2lkXSA9 IGNvbm4KKworICAgICAgICByZXR1cm4gcmVzCisKKyAgICBkZWYgU2VydmVyVmVyc2lvbihzZWxm KToKKyAgICAgICAgcmV0dXJuIHNlbGYudmVyCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgdmVy c2lvbihzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuc3ZlcnNpb24KKworICAgIGRlZiBNYWpv clZlcnNpb24oc2VsZik6CisgICAgICAgIGlmIHNlbGYuc3ZlcnNpb24gaXMgbm90IE5vbmU6Cisg ICAgICAgICAgICByZXR1cm4gaW50KHNlbGYuc3ZlcnNpb24gLyAxMDAwMCkKKyAgICAgICAgcmFp c2UgRXhjZXB0aW9uKCJJbmZvcm1hdGlvbiBpcyBub3QgYXZhaWxhYmxlLiIpCisKKyAgICBkZWYg TWlub3JWZXJzaW9uKHNlbGYpOgorICAgICAgICBpZiBzZWxmLnN2ZXJzaW9uOgorICAgICAgICAg ICAgcmV0dXJuIGludChpbnQoc2VsZi5zdmVyc2lvbiAvIDEwMCkgJSAxMDApCisgICAgICAgIHJh aXNlIEV4Y2VwdGlvbigiSW5mb3JtYXRpb24gaXMgbm90IGF2YWlsYWJsZS4iKQorCisgICAgZGVm IFBhdGNoVmVyc2lvbihzZWxmKToKKyAgICAgICAgaWYgc2VsZi5zdmVyc2lvbjoKKyAgICAgICAg ICAgIHJldHVybiBpbnQoaW50KHNlbGYuc3ZlcnNpb24gLyAxMDApIC8gMTAwKQorICAgICAgICBy YWlzZSBFeGNlcHRpb24oIkluZm9ybWF0aW9uIGlzIG5vdCBhdmFpbGFibGUuIikKKworICAgIGRl ZiBjb25uZWN0aW9uKAorICAgICAgICAgICAgc2VsZiwgZGF0YWJhc2U9Tm9uZSwgY29ubl9pZD1O b25lLCBhdXRvX3JlY29ubmVjdD1UcnVlLCBkaWQ9Tm9uZSwKKyAgICAgICAgICAgIGFzeW5jPU5v bmUsIHVzZV9iaW5hcnlfcGxhY2Vob2xkZXI9RmFsc2UsIGFycmF5X3RvX3N0cmluZz1GYWxzZQor ICAgICk6CisgICAgICAgIGlmIGRhdGFiYXNlIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgaWYg aGFzYXR0cihzdHIsICdkZWNvZGUnKSBhbmQgXAorICAgICAgICAgICAgICAgICAgICBub3QgaXNp bnN0YW5jZShkYXRhYmFzZSwgdW5pY29kZSk6CisgICAgICAgICAgICAgICAgZGF0YWJhc2UgPSBk YXRhYmFzZS5kZWNvZGUoJ3V0Zi04JykKKyAgICAgICAgICAgIGlmIGRpZCBpcyBub3QgTm9uZToK KyAgICAgICAgICAgICAgICBpZiBkaWQgaW4gc2VsZi5kYl9pbmZvOgorICAgICAgICAgICAgICAg ICAgICBzZWxmLmRiX2luZm9bZGlkXVsnZGF0bmFtZSddID0gZGF0YWJhc2UKKyAgICAgICAgZWxz ZToKKyAgICAgICAgICAgIGlmIGRpZCBpcyBOb25lOgorICAgICAgICAgICAgICAgIGRhdGFiYXNl ID0gc2VsZi5kYgorICAgICAgICAgICAgZWxpZiBkaWQgaW4gc2VsZi5kYl9pbmZvOgorICAgICAg ICAgICAgICAgIGRhdGFiYXNlID0gc2VsZi5kYl9pbmZvW2RpZF1bJ2RhdG5hbWUnXQorICAgICAg ICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBtYWludGVuYW5jZV9kYl9pZCA9IHUnREI6ezB9 Jy5mb3JtYXQoc2VsZi5kYikKKyAgICAgICAgICAgICAgICBpZiBtYWludGVuYW5jZV9kYl9pZCBp biBzZWxmLmNvbm5lY3Rpb25zOgorICAgICAgICAgICAgICAgICAgICBjb25uID0gc2VsZi5jb25u ZWN0aW9uc1ttYWludGVuYW5jZV9kYl9pZF0KKyAgICAgICAgICAgICAgICAgICAgaWYgY29ubi5j b25uZWN0ZWQoKToKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1cywgcmVzID0gY29ubi5l eGVjdXRlX2RpY3QodSIiIgorU0VMRUNUCisgICAgZGIub2lkIGFzIGRpZCwgZGIuZGF0bmFtZSwg ZGIuZGF0YWxsb3djb25uLAorICAgIHBnX2VuY29kaW5nX3RvX2NoYXIoZGIuZW5jb2RpbmcpIEFT IHNlcnZlcmVuY29kaW5nLAorICAgIGhhc19kYXRhYmFzZV9wcml2aWxlZ2UoZGIub2lkLCAnQ1JF QVRFJykgYXMgY2FuY3JlYXRlLCBkYXRsYXN0c3lzb2lkCitGUk9NCisgICAgcGdfZGF0YWJhc2Ug ZGIKK1dIRVJFIGRiLm9pZCA9IHswfSIiIi5mb3JtYXQoZGlkKSkKKworICAgICAgICAgICAgICAg ICAgICAgICAgaWYgc3RhdHVzIGFuZCBsZW4ocmVzWydyb3dzJ10pID4gMDoKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICBmb3Igcm93IGluIHJlc1sncm93cyddOgorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBzZWxmLmRiX2luZm9bZGlkXSA9IHJvdworICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBkYXRhYmFzZSA9IHNlbGYuZGJfaW5mb1tkaWRdWydkYXRuYW1lJ10K KworICAgICAgICAgICAgICAgICAgICAgICAgaWYgZGlkIG5vdCBpbiBzZWxmLmRiX2luZm86Cisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKGdldHRleHQoCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICJDb3VsZCBub3QgZmluZCB0aGUgc3BlY2lmaWVk IGRhdGFiYXNlLiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICApKQorCisgICAgICAgIGlm IGRhdGFiYXNlIGlzIE5vbmU6CisgICAgICAgICAgICByYWlzZSBDb25uZWN0aW9uTG9zdChzZWxm LnNpZCwgTm9uZSwgTm9uZSkKKworICAgICAgICBteV9pZCA9ICh1J0NPTk46ezB9Jy5mb3JtYXQo Y29ubl9pZCkpIGlmIGNvbm5faWQgaXMgbm90IE5vbmUgZWxzZSBcCisgICAgICAgICAgICAodSdE Qjp7MH0nLmZvcm1hdChkYXRhYmFzZSkpCisKKyAgICAgICAgc2VsZi5waW5nZWQgPSBkYXRldGlt ZS5kYXRldGltZS5ub3coKQorCisgICAgICAgIGlmIG15X2lkIGluIHNlbGYuY29ubmVjdGlvbnM6 CisgICAgICAgICAgICByZXR1cm4gc2VsZi5jb25uZWN0aW9uc1tteV9pZF0KKyAgICAgICAgZWxz ZToKKyAgICAgICAgICAgIGlmIGFzeW5jIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgYXN5bmMg PSAxIGlmIGNvbm5faWQgaXMgbm90IE5vbmUgZWxzZSAwCisgICAgICAgICAgICBlbHNlOgorICAg ICAgICAgICAgICAgIGFzeW5jID0gMSBpZiBhc3luYyBpcyBUcnVlIGVsc2UgMAorICAgICAgICAg ICAgc2VsZi5jb25uZWN0aW9uc1tteV9pZF0gPSBDb25uZWN0aW9uKAorICAgICAgICAgICAgICAg IHNlbGYsIG15X2lkLCBkYXRhYmFzZSwgYXV0b19yZWNvbm5lY3QsIGFzeW5jLAorICAgICAgICAg ICAgICAgIHVzZV9iaW5hcnlfcGxhY2Vob2xkZXI9dXNlX2JpbmFyeV9wbGFjZWhvbGRlciwKKyAg ICAgICAgICAgICAgICBhcnJheV90b19zdHJpbmc9YXJyYXlfdG9fc3RyaW5nCisgICAgICAgICAg ICApCisKKyAgICAgICAgICAgIHJldHVybiBzZWxmLmNvbm5lY3Rpb25zW215X2lkXQorCisgICAg ZGVmIF9yZXN0b3JlKHNlbGYsIGRhdGEpOgorICAgICAgICAiIiIKKyAgICAgICAgSGVscHMgcmVz dG9yaW5nIHRvIHJlY29ubmVjdCB0aGUgYXV0by1jb25uZWN0IGNvbm5lY3Rpb25zIHNtb290aGx5 IG9uCisgICAgICAgIHJlbG9hZC9yZXN0YXJ0IG9mIHRoZSBhcHAgc2VydmVyLi4KKyAgICAgICAg IiIiCisgICAgICAgICMgcmVzdG9yZSBzZXJ2ZXIgdmVyc2lvbiBmcm9tIGZsYXNrIHNlc3Npb24g aWYgZmxhc2sgc2VydmVyIHdhcworICAgICAgICAjIHJlc3RhcnRlZC4gQXMgd2UgbmVlZCBzZXJ2 ZXIgdmVyc2lvbiB0byByZXNvbHZlIHNxbCB0ZW1wbGF0ZSBwYXRocy4KKyAgICAgICAgZnJvbSBw Z2FkbWluLmJyb3dzZXIuc2VydmVyX2dyb3Vwcy5zZXJ2ZXJzLnR5cGVzIGltcG9ydCBTZXJ2ZXJU eXBlCisKKyAgICAgICAgc2VsZi52ZXIgPSBkYXRhLmdldCgndmVyJywgTm9uZSkKKyAgICAgICAg c2VsZi5zdmVyc2lvbiA9IGRhdGEuZ2V0KCdzdmVyc2lvbicsIE5vbmUpCisKKyAgICAgICAgaWYg c2VsZi52ZXIgYW5kIG5vdCBzZWxmLnNlcnZlcl90eXBlOgorICAgICAgICAgICAgZm9yIHN0IGlu IFNlcnZlclR5cGUudHlwZXMoKToKKyAgICAgICAgICAgICAgICBpZiBzdC5pbnN0YW5jZU9mKHNl bGYudmVyKToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5zZXJ2ZXJfdHlwZSA9IHN0LnN0eXBl CisgICAgICAgICAgICAgICAgICAgIHNlbGYuc2VydmVyX2NscyA9IHN0CisgICAgICAgICAgICAg ICAgICAgIGJyZWFrCisKKyAgICAgICAgIyBIbW0uLiB3ZSB3aWxsIG5vdCBob25vdXIgdGhpcyBy ZXF1ZXN0LCB3aGVuIEkgYWxyZWFkeSBoYXZlCisgICAgICAgICMgY29ubmVjdGlvbnMKKyAgICAg ICAgaWYgbGVuKHNlbGYuY29ubmVjdGlvbnMpICE9IDA6CisgICAgICAgICAgICByZXR1cm4KKwor ICAgICAgICAjIFdlIG5lZWQgdG8ga25vdyBhYm91dCB0aGUgZXhpc3Rpbmcgc2VydmVyIHZhcmlh bnQgc3VwcG9ydHMgZHVyaW5nCisgICAgICAgICMgZmlyc3QgY29ubmVjdGlvbiBmb3IgaWRlbnRp ZmljYXRpb25zLgorICAgICAgICBzZWxmLnBpbmdlZCA9IGRhdGV0aW1lLmRhdGV0aW1lLm5vdygp CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGlmICdwYXNzd29yZCcgaW4gZGF0YSBhbmQgZGF0 YVsncGFzc3dvcmQnXToKKyAgICAgICAgICAgICAgICBkYXRhWydwYXNzd29yZCddID0gZGF0YVsn cGFzc3dvcmQnXS5lbmNvZGUoJ3V0Zi04JykKKyAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBl OgorICAgICAgICAgICAgY3VycmVudF9hcHAubG9nZ2VyLmV4Y2VwdGlvbihlKQorCisgICAgICAg IGNvbm5lY3Rpb25zID0gZGF0YVsnY29ubmVjdGlvbnMnXQorICAgICAgICBmb3IgY29ubl9pZCBp biBjb25uZWN0aW9uczoKKyAgICAgICAgICAgIGNvbm5faW5mbyA9IGNvbm5lY3Rpb25zW2Nvbm5f aWRdCisgICAgICAgICAgICBjb25uID0gc2VsZi5jb25uZWN0aW9uc1tjb25uX2luZm9bJ2Nvbm5f aWQnXV0gPSBDb25uZWN0aW9uKAorICAgICAgICAgICAgICAgIHNlbGYsIGNvbm5faW5mb1snY29u bl9pZCddLCBjb25uX2luZm9bJ2RhdGFiYXNlJ10sCisgICAgICAgICAgICAgICAgY29ubl9pbmZv WydhdXRvX3JlY29ubmVjdCddLCBjb25uX2luZm9bJ2FzeW5jJ10sCisgICAgICAgICAgICAgICAg dXNlX2JpbmFyeV9wbGFjZWhvbGRlcj1jb25uX2luZm9bJ3VzZV9iaW5hcnlfcGxhY2Vob2xkZXIn XSwKKyAgICAgICAgICAgICAgICBhcnJheV90b19zdHJpbmc9Y29ubl9pbmZvWydhcnJheV90b19z dHJpbmcnXQorICAgICAgICAgICAgKQorCisgICAgICAgICAgICAjIG9ubHkgdHJ5IHRvIHJlY29u bmVjdCBpZiBjb25uZWN0aW9uIHdhcyBjb25uZWN0ZWQgcHJldmlvdXNseSBhbmQKKyAgICAgICAg ICAgICMgYXV0b19yZWNvbm5lY3QgaXMgdHJ1ZS4KKyAgICAgICAgICAgIGlmIGNvbm5faW5mb1sn d2FzQ29ubmVjdGVkJ10gYW5kIGNvbm5faW5mb1snYXV0b19yZWNvbm5lY3QnXToKKyAgICAgICAg ICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIGNvbm4uY29ubmVjdCgKKyAgICAgICAg ICAgICAgICAgICAgICAgIHBhc3N3b3JkPWRhdGFbJ3Bhc3N3b3JkJ10sCisgICAgICAgICAgICAg ICAgICAgICAgICBzZXJ2ZXJfdHlwZXM9U2VydmVyVHlwZS50eXBlcygpCisgICAgICAgICAgICAg ICAgICAgICkKKyAgICAgICAgICAgICAgICAgICAgIyBUaGlzIHdpbGwgYWxzbyB1cGRhdGUgd2Fz Q29ubmVjdGVkIGZsYWcgaW4gY29ubmVjdGlvbiBzbworICAgICAgICAgICAgICAgICAgICAjIG5v IG5lZWQgdG8gdXBkYXRlIHRoZSBmbGFnIG1hbnVhbGx5LgorICAgICAgICAgICAgICAgIGV4Y2Vw dCBFeGNlcHRpb24gYXMgZToKKyAgICAgICAgICAgICAgICAgICAgY3VycmVudF9hcHAubG9nZ2Vy LmV4Y2VwdGlvbihlKQorICAgICAgICAgICAgICAgICAgICBzZWxmLmNvbm5lY3Rpb25zLnBvcChj b25uX2luZm9bJ2Nvbm5faWQnXSkKKworICAgIGRlZiByZWxlYXNlKHNlbGYsIGRhdGFiYXNlPU5v bmUsIGNvbm5faWQ9Tm9uZSwgZGlkPU5vbmUpOgorICAgICAgICBpZiBkaWQgaXMgbm90IE5vbmU6 CisgICAgICAgICAgICBpZiBkaWQgaW4gc2VsZi5kYl9pbmZvIGFuZCAnZGF0bmFtZScgaW4gc2Vs Zi5kYl9pbmZvW2RpZF06CisgICAgICAgICAgICAgICAgZGF0YWJhc2UgPSBzZWxmLmRiX2luZm9b ZGlkXVsnZGF0bmFtZSddCisgICAgICAgICAgICAgICAgaWYgaGFzYXR0cihzdHIsICdkZWNvZGUn KSBhbmQgXAorICAgICAgICAgICAgICAgICAgICAgICAgbm90IGlzaW5zdGFuY2UoZGF0YWJhc2Us IHVuaWNvZGUpOgorICAgICAgICAgICAgICAgICAgICBkYXRhYmFzZSA9IGRhdGFiYXNlLmRlY29k ZSgndXRmLTgnKQorICAgICAgICAgICAgICAgIGlmIGRhdGFiYXNlIGlzIE5vbmU6CisgICAgICAg ICAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAg ICAgICByZXR1cm4gRmFsc2UKKworICAgICAgICBteV9pZCA9ICh1J0NPTk46ezB9Jy5mb3JtYXQo Y29ubl9pZCkpIGlmIGNvbm5faWQgaXMgbm90IE5vbmUgZWxzZSBcCisgICAgICAgICAgICAodSdE Qjp7MH0nLmZvcm1hdChkYXRhYmFzZSkpIGlmIGRhdGFiYXNlIGlzIG5vdCBOb25lIGVsc2UgTm9u ZQorCisgICAgICAgIGlmIG15X2lkIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgaWYgbXlfaWQg aW4gc2VsZi5jb25uZWN0aW9uczoKKyAgICAgICAgICAgICAgICBzZWxmLmNvbm5lY3Rpb25zW215 X2lkXS5fcmVsZWFzZSgpCisgICAgICAgICAgICAgICAgZGVsIHNlbGYuY29ubmVjdGlvbnNbbXlf aWRdCisgICAgICAgICAgICAgICAgaWYgZGlkIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAg ICAgICBkZWwgc2VsZi5kYl9pbmZvW2RpZF0KKworICAgICAgICAgICAgICAgIGlmIGxlbihzZWxm LmNvbm5lY3Rpb25zKSA9PSAwOgorICAgICAgICAgICAgICAgICAgICBzZWxmLnZlciA9IE5vbmUK KyAgICAgICAgICAgICAgICAgICAgc2VsZi5zdmVyc2lvbiA9IE5vbmUKKyAgICAgICAgICAgICAg ICAgICAgc2VsZi5zZXJ2ZXJfdHlwZSA9IE5vbmUKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5z ZXJ2ZXJfY2xzID0gTm9uZQorICAgICAgICAgICAgICAgICAgICBzZWxmLnBhc3N3b3JkID0gTm9u ZQorCisgICAgICAgICAgICAgICAgc2VsZi51cGRhdGVfc2Vzc2lvbigpCisKKyAgICAgICAgICAg ICAgICByZXR1cm4gVHJ1ZQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByZXR1 cm4gRmFsc2UKKworICAgICAgICBmb3IgY29uIGluIHNlbGYuY29ubmVjdGlvbnM6CisgICAgICAg ICAgICBzZWxmLmNvbm5lY3Rpb25zW2Nvbl0uX3JlbGVhc2UoKQorCisgICAgICAgIHNlbGYuY29u bmVjdGlvbnMgPSBkaWN0KCkKKyAgICAgICAgc2VsZi52ZXIgPSBOb25lCisgICAgICAgIHNlbGYu c3ZlcnNpb24gPSBOb25lCisgICAgICAgIHNlbGYuc2VydmVyX3R5cGUgPSBOb25lCisgICAgICAg IHNlbGYuc2VydmVyX2NscyA9IE5vbmUKKyAgICAgICAgc2VsZi5wYXNzd29yZCA9IE5vbmUKKwor ICAgICAgICBzZWxmLnVwZGF0ZV9zZXNzaW9uKCkKKworICAgICAgICByZXR1cm4gVHJ1ZQorCisg ICAgZGVmIF91cGRhdGVfcGFzc3dvcmQoc2VsZiwgcGFzc3dkKToKKyAgICAgICAgc2VsZi5wYXNz d29yZCA9IHBhc3N3ZAorICAgICAgICBmb3IgY29ubl9pZCBpbiBzZWxmLmNvbm5lY3Rpb25zOgor ICAgICAgICAgICAgY29ubiA9IHNlbGYuY29ubmVjdGlvbnNbY29ubl9pZF0KKyAgICAgICAgICAg IGlmIGNvbm4uY29ubiBpcyBub3QgTm9uZSBvciBjb25uLndhc0Nvbm5lY3RlZCBpcyBUcnVlOgor ICAgICAgICAgICAgICAgIGNvbm4ucGFzc3dvcmQgPSBwYXNzd2QKKworICAgIGRlZiB1cGRhdGVf c2Vzc2lvbihzZWxmKToKKyAgICAgICAgbWFuYWdlcnMgPSBzZXNzaW9uWydfX3Bnc3FsX3NlcnZl cl9tYW5hZ2VycyddIFwKKyAgICAgICAgICAgIGlmICdfX3Bnc3FsX3NlcnZlcl9tYW5hZ2Vycycg aW4gc2Vzc2lvbiBlbHNlIGRpY3QoKQorICAgICAgICB1cGRhdGVkX21nciA9IHNlbGYuYXNfZGlj dCgpCisKKyAgICAgICAgaWYgbm90IHVwZGF0ZWRfbWdyOgorICAgICAgICAgICAgaWYgc2VsZi5z aWQgaW4gbWFuYWdlcnM6CisgICAgICAgICAgICAgICAgbWFuYWdlcnMucG9wKHNlbGYuc2lkKQor ICAgICAgICBlbHNlOgorICAgICAgICAgICAgbWFuYWdlcnNbc2VsZi5zaWRdID0gdXBkYXRlZF9t Z3IKKyAgICAgICAgc2Vzc2lvblsnX19wZ3NxbF9zZXJ2ZXJfbWFuYWdlcnMnXSA9IG1hbmFnZXJz CisgICAgICAgIHNlc3Npb24uZm9yY2Vfd3JpdGUgPSBUcnVlCisKKyAgICBkZWYgdXRpbGl0eShz ZWxmLCBvcGVyYXRpb24pOgorICAgICAgICAiIiIKKyAgICAgICAgdXRpbGl0eShvcGVyYXRpb24p CisKKyAgICAgICAgUmV0dXJuczogbmFtZSBvZiB0aGUgdXRpbGl0eSB3aGljaCB1c2VkIGZvciB0 aGUgb3BlcmF0aW9uCisgICAgICAgICIiIgorICAgICAgICBpZiBzZWxmLnNlcnZlcl9jbHMgaXMg bm90IE5vbmU6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5zZXJ2ZXJfY2xzLnV0aWxpdHkob3Bl cmF0aW9uLCBzZWxmLnN2ZXJzaW9uKQorCisgICAgICAgIHJldHVybiBOb25lCisKKyAgICBkZWYg ZXhwb3J0X3Bhc3N3b3JkX2VudihzZWxmLCBlbnYpOgorICAgICAgICBpZiBzZWxmLnBhc3N3b3Jk OgorICAgICAgICAgICAgcGFzc3dvcmQgPSBkZWNyeXB0KAorICAgICAgICAgICAgICAgIHNlbGYu cGFzc3dvcmQsIGN1cnJlbnRfdXNlci5wYXNzd29yZAorICAgICAgICAgICAgKS5kZWNvZGUoKQor ICAgICAgICAgICAgb3MuZW52aXJvbltzdHIoZW52KV0gPSBwYXNzd29yZAo= --001a114790ea0b83e60566f95d92--