Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1qqYA1-00B2jQ-Oo for pgsql-odbc@arkaria.postgresql.org; Wed, 11 Oct 2023 12:18:00 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.94.2) (envelope-from ) id 1qqY8z-00FmLk-RY for pgsql-odbc@arkaria.postgresql.org; Wed, 11 Oct 2023 12:16:54 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1qqY8y-00FmLQ-AJ for pgsql-odbc@lists.postgresql.org; Wed, 11 Oct 2023 12:16:54 +0000 Received: from m13116.mail.163.com ([220.181.13.116]) by makus.postgresql.org with esmtp (Exim 4.94.2) (envelope-from ) id 1qqY8n-0019rN-8Z for pgsql-odbc@postgresql.org; Wed, 11 Oct 2023 12:16:50 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=163.com; s=s110527; h=Date:From:Subject:Content-Type:MIME-Version: Message-ID; bh=O6ify/6zM9FsPjv3wUQ25nnQ88i0KVE9Kfdpe6Spl/Q=; b=m AsV6CRBmkp24ehIdl0vm2eBo+ChopdW9oVL6RJ8Bspou74WRASUFjGcSVPW+d7pL K8gySWq+ePd3l1/IJpy/lpA2hYJ/n5AY5oSeSMlGThtOaZCx4Styhm7NSMV4I3ug CbQ0mca4He+evix70nT8XaoEKw8M99iotqkWVDpG7o= Received: from lzwp0521$163.com ( [117.136.38.60] ) by ajax-webmail-wmsvr116 (Coremail) ; Wed, 11 Oct 2023 20:16:18 +0800 (CST) X-Originating-IP: [117.136.38.60] Date: Wed, 11 Oct 2023 20:16:18 +0800 (CST) From: =?GBK?B?wfXXrw==?= To: "Dave Cramer" Cc: pgsql-odbc@postgresql.org Subject: =?GBK?Q?Re:Re:_[PATCH]_Allow_catalogname_(database)_and_procname?= =?GBK?Q?_=A3=A8no_under_public_schema)_enumeration_with_SQLProcedures?= X-Priority: 3 X-Mailer: Coremail Webmail Server Version XT5.0.14 build 20230109(dcb5de15) Copyright (c) 2002-2023 www.mailtech.cn 163com In-Reply-To: References: <755f8640.2ea4.18b17fd0ce5.Coremail.lzwp0521@163.com> X-NTES-SC: AL_QuySBfyZuU0s7iGRZukXn0kXhes2XcSys/si34NTO5E0qivUwwQ6ZWdhIlXw4eSzEjm9qACtSzlIw8JZU5FHVq2ZpimLZitUbAJM7eHso7ZU Content-Type: multipart/mixed; boundary="----=_Part_96870_920188474.1697026578197" MIME-Version: 1.0 Message-ID: <76e935dd.6634.18b1eaa9716.Coremail.lzwp0521@163.com> X-Coremail-Locale: zh_CN X-CM-TRANSID: dMGowACnvYkSkiZluvwRAA--.37912W X-CM-SenderInfo: ho2z1iqvsrqiywtou0bp/1tbivxIGgVWB5EINKwAAs+ X-Coremail-Antispam: 1U5529EdanIXcx71UUUUU7vcSsGvfC2KfnxnUU== List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk ------=_Part_96870_920188474.1697026578197 Content-Type: multipart/related; boundary="----=_Part_96871_1374622295.1697026578197" ------=_Part_96871_1374622295.1697026578197 Content-Type: multipart/alternative; boundary="----=_Part_96872_131420511.1697026578197" ------=_Part_96872_131420511.1697026578197 Content-Type: text/plain; charset=GBK Content-Transfer-Encoding: base64 aGVsbG8gIERhdmUgQ3JhbWVyOgoKCiBJJ20gc29ycnkgdGhhdCBteSBhY2Nlc3MgdG8gZ2l0aHVi IGlzIHZlcnkgdW5zdGFibGUuCiBJIHdpbGwgc2VuZCB5b3UgdGhlIHNvdXJjZSBjb2RlIGNoYW5n ZSBmaWxlKGluZm8tcGF0Y2guYykgYW5kIGFkZGVkIHRlc3QgY2FzZXMgZmlyc3QoY2F0YWxvZ2Z1 bmN0aW9ucy10ZXN0LmOjrCBzYW1wbGV0YWJsZXMuc3FsKS4KIEkgd2lsbCBzdWJtaXQgYSBQUiBw b3N0Z3Jlc3FsLWludGVyZmFjZXMvcHNxbG9kYmMgKGdpdGh1Yi5jb20pICB3aGVuIG15IG5ldHdv cmsgaXMgc3RhYmxlLgoKCgoKVGhpcyBwYXRjaCBoYXMgYmVlbiB2ZXJpZmllZCBpbiBteSBsb2Nh bCBlbnZpcm9ubWVudCAgIGNhbiBtYWtlIGVudW1lcmF0aW9uIG9mIGRhdGFiYXNlcyBhbmQgcHJv Y2VkdXJlbmFtZSB3b3JrLiBUaGUgdmVyaWZpY2F0aW9uIHJlc3VsdHMgYXJlIGFzIGZvbGxvd3M6 CiBPUyB2ZXNpb246ICAgICAgICAgICAgICAgIENlbnRPUzcgMy4xMC4wLTk1Ny5lbDcueDg2XzY0 CiBQRyBzZXJ2ZXIgdmVyc2lvbjogICAgUG9zdGdyZVNRTCAxNC41IG9uIHg4Nl82NC1wYy1saW51 eC1nbnUsIGNvbXBpbGVkIGJ5IGdjYyAoR0NDKSA0LjguNSAyMDE1MDYyMyAoUmVkIEhhdCA0Ljgu NS00NCksIDY0LWJpdAogcHNxbE9EQkMgdmVyc2lvbjogICAgcHNxbG9kYmMtMTUuMDAuMDAwMAog dW5peE9EQkMgdmVyc2lvbjogICAgdW5peE9EQkMgMi4zLjEKIFRoZSByZWdyZXNzaW9uICh3aXRo IGFkZGVkIHRlc3QgY2FzZXMpIHJlc3VsdDoKICAgICAgICAgICAgICAgICAgV2l0aCBubyBwYXRo OiBpcyBlbXB0eS4KIAogICAgICAgICAgICAgICAgIFdpdGggdGhlIGF0dGFjaGVkIHBhdGNoo7og U1FMUHJvY2VkdXJlcyB3b3JrIHdlbGwKICAgICAgICAgICAgIAoKCgoKUmVnYXJkcywKCiAgICAg TGl1IFpodWFuZwoKCgoKCgoKQXQgMjAyMy0xMC0xMCAyMTowNDozMSwgIkRhdmUgQ3JhbWVyIiA8 ZGF2ZWNyYW1lckBwb3N0Z3Jlcy5yb2Nrcz4gd3JvdGU6CgpIZWxsbywKCgpUaGFua3MgZm9yIHRo ZSBwYXRjaCwgaG93ZXZlciBpdCBkb2VzIG5vdCBhcHBseSBjbGVhbmx5IHVzaW5nIHBhdGNoIG9y IGdpdCBhcHBseQoKCkNhbiB5b3UgcHJvdmlkZSBhIFBSIHBvc3RncmVzcWwtaW50ZXJmYWNlcy9w c3Fsb2RiYyAoZ2l0aHViLmNvbSkgYW5kIGFkZCB0ZXN0cyBwbGVhc2UgPwoKCgoKRGF2ZSBDcmFt ZXIKd3d3LnBvc3RncmVzLnJvY2tzCgoKCgpPbiBUdWUsIDEwIE9jdCAyMDIzIGF0IDAxOjA5LCDB 9devIDxsendwMDUyMUAxNjMuY29tPiB3cm90ZToKCgpoZWxsb6OhCgoKCgpUaGUgYXR0YWNoZWQg cGF0Y2ggZml4ZWQgIFNRTFByb2NlZHVyZXMgdHdvIGJ1ZzoKCjEuICBtYWtlIGVudW1lcmF0aW9u IG9mIGRhdGFiYXNlcyAoY2F0YWxvZ3MgaW4gT0RCQyBzcGVhaykgd29yay4KCjIuICBtYWtlIGVu dW1lcmF0aW9uIG9mIHByb2NlZHVyZW5hbWUgKHByb2NuYW1lICBpbiBPREJDIHNwZWFrKSB3b3Jr LgoKCgoKCgoKU3RlcDoKCiAgIDEuICBsb2dpbiBwb3N0Z3JlcwoKICAgMi4gIGNyZWF0ZSBzY2hl bSBuYW1lZCAgc2NoZW0xIAoKICAgMy4gIHNldCBzZWFyY2hfcGF0aCBUTyBzY2hlbTEKCiAgIDQu ICBjcmVhdGUgcHJvY2VkdXJlIG5hbWVkIGdlbnJlX2luc2VydF9kYXRhCgogICA1LiAgd2l0aCBv ZGJjIGFwcGxpY2F0aW9uo6hyZXRjb2RlID0gIFNRTFByb2NlZHVyZXMgKGhzdG10LCBOVUxMLCAw LCBOVUxMLCAwLCAoU1FMQ0hBUiAqKSJnZW5yZV9pbnNlcnRfZGF0YSIsIHN0cmxlbigiZ2VucmVf aW5zZXJ0X2RhdGEiKSk7o6l0byBnZXQgdGhlIGdlbnJlX2luc2VydF9kYXRhKHN0ZXAgNCkKCiAg IDYuICB0aGUgcmVzdWx0IGlzIGVtcHR5LgoKICAgCiAgIDcuIEFmdGVyIHRoZSBwYXRjaCBpcyBj b21waWxlZCB1c2luZyB0aGUgYXR0YWNoZWQgcGF0Y2gsIHRoZW4gcnVuIHRoZSBvZGJjIGFwcGxp Y2F0aW9uo6hzdGVwIDWjqSwgVGhlIHJlc3VsdCBpcyBzaG93biBiZWxvdzoKICAgICAKCgoKCgoK ICA= ------=_Part_96872_131420511.1697026578197 Content-Type: text/html; charset=GBK Content-Transfer-Encoding: base64 PGRpdiBzdHlsZT0ibGluZS1oZWlnaHQ6MS43O2NvbG9yOiMwMDAwMDA7Zm9udC1zaXplOjE0cHg7 Zm9udC1mYW1pbHk6QXJpYWwiPjxkaXYgc3R5bGU9Im1hcmdpbjogMDsiPmhlbGxvJm5ic3A7IERh dmUgQ3JhbWVyOjwvZGl2PjxkaXYgc3R5bGU9Im1hcmdpbjogMDsiPjxicj48L2Rpdj48ZGl2IHN0 eWxlPSJtYXJnaW46IDA7Ij4mbmJzcDtJJ20gc29ycnkgdGhhdCBteSBhY2Nlc3MgdG8gZ2l0aHVi IGlzIHZlcnkgdW5zdGFibGUuPC9kaXY+PGRpdiBzdHlsZT0ibWFyZ2luOiAwOyI+Jm5ic3A7SSB3 aWxsIHNlbmQgeW91IHRoZSBzb3VyY2UgY29kZSBjaGFuZ2UgZmlsZShpbmZvLXBhdGNoLmMpIGFu ZCBhZGRlZCB0ZXN0IGNhc2VzIGZpcnN0KGNhdGFsb2dmdW5jdGlvbnMtdGVzdC5jo6wgc2FtcGxl dGFibGVzLnNxbCkuPC9kaXY+PGRpdiBzdHlsZT0ibWFyZ2luOiAwOyI+Jm5ic3A7SSB3aWxsIHN1 Ym1pdCBhIFBSJm5ic3A7PGEgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL3Bvc3RncmVzcWwtaW50 ZXJmYWNlcy9wc3Fsb2RiYyI+cG9zdGdyZXNxbC1pbnRlcmZhY2VzL3BzcWxvZGJjIChnaXRodWIu Y29tKTwvYT4mbmJzcDsgd2hlbiBteSBuZXR3b3JrIGlzIHN0YWJsZS48L2Rpdj48ZGl2IHN0eWxl PSJtYXJnaW46IDA7Ij48YnI+PC9kaXY+PGRpdiBzdHlsZT0ibWFyZ2luOiAwOyI+PGJyPjwvZGl2 PjxkaXYgc3R5bGU9Im1hcmdpbjogMDsiPlRoaXMgcGF0Y2ggaGFzIGJlZW4gdmVyaWZpZWQgaW4g bXkgbG9jYWwgZW52aXJvbm1lbnQmbmJzcDsgJm5ic3A7Y2FuIG1ha2UgZW51bWVyYXRpb24gb2Yg ZGF0YWJhc2VzIGFuZCBwcm9jZWR1cmVuYW1lIHdvcmsuIFRoZSB2ZXJpZmljYXRpb24gcmVzdWx0 cyBhcmUgYXMgZm9sbG93czo8L2Rpdj48ZGl2IHN0eWxlPSJtYXJnaW46IDA7Ij4mbmJzcDtPUyB2 ZXNpb246Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZu YnNwOyZuYnNwO0NlbnRPUzcgMy4xMC4wLTk1Ny5lbDcueDg2XzY0PC9kaXY+PGRpdiBzdHlsZT0i bWFyZ2luOiAwOyI+Jm5ic3A7UEcgc2VydmVyIHZlcnNpb246Jm5ic3A7ICZuYnNwOyZuYnNwO1Bv c3RncmVTUUwgMTQuNSBvbiB4ODZfNjQtcGMtbGludXgtZ251LCBjb21waWxlZCBieSBnY2MgKEdD QykgNC44LjUgMjAxNTA2MjMgKFJlZCBIYXQgNC44LjUtNDQpLCA2NC1iaXQ8L2Rpdj48ZGl2IHN0 eWxlPSJtYXJnaW46IDA7Ij4mbmJzcDtwc3FsT0RCQyB2ZXJzaW9uOiZuYnNwOyAmbmJzcDsmbmJz cDtwc3Fsb2RiYy0xNS4wMC4wMDAwPC9kaXY+PGRpdiBzdHlsZT0ibWFyZ2luOiAwOyI+Jm5ic3A7 dW5peE9EQkMgdmVyc2lvbjombmJzcDsgJm5ic3A7IHVuaXhPREJDIDIuMy4xPC9kaXY+PGRpdiBz dHlsZT0ibWFyZ2luOiAwOyI+Jm5ic3A7VGhlIHJlZ3Jlc3Npb24gKHdpdGggYWRkZWQgdGVzdCBj YXNlcykgcmVzdWx0OjwvZGl2PjxkaXYgc3R5bGU9Im1hcmdpbjogMDsiPiZuYnNwOyAmbmJzcDsg Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7IFdpdGggbm8g cGF0aDogaXMgZW1wdHkuPC9kaXY+PGRpdiBzdHlsZT0ibWFyZ2luOiAwOyI+Jm5ic3A7PGltZyBz cmM9ImNpZDo0NTRmMDlhMiQxJDE4YjFlOWU3MjczJENvcmVtYWlsJGx6d3AwNTIxJDE2My5jb20i IG9yZ3dpZHRoPSI0MDQiIG9yZ2hlaWdodD0iMTYzIiBkYXRhLWltYWdlPSIxIiBzdHlsZT0id2lk dGg6IDQwNHB4OyBoZWlnaHQ6IDE2M3B4OyI+PC9kaXY+PGRpdiBzdHlsZT0ibWFyZ2luOiAwOyI+ Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAm bmJzcDtXaXRoIHRoZSBhdHRhY2hlZCBwYXRjaKO6IFNRTFByb2NlZHVyZXMgd29yayB3ZWxsPC9k aXY+PGRpdiBzdHlsZT0ibWFyZ2luOiAwOyI+PGltZyBzcmM9ImNpZDo0NjlkODE5OSQ2JDE4YjFl YTlmNTJkJENvcmVtYWlsJGx6d3AwNTIxJDE2My5jb20iIG9yZ3dpZHRoPSI2NDIiIG9yZ2hlaWdo dD0iMTcyIiBkYXRhLWltYWdlPSIxIiBzdHlsZT0id2lkdGg6IDY0MnB4OyBoZWlnaHQ6IDE3MnB4 OyI+PC9kaXY+PGRpdiBzdHlsZT0ibWFyZ2luOiAwOyI+Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5i c3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7PC9kaXY+PHAgc3R5bGU9Im1hcmdpbjogMDsiPjxicj48 L3A+PHAgc3R5bGU9Im1hcmdpbjogMDsiPlJlZ2FyZHMsPC9wPjxwIHN0eWxlPSJtYXJnaW46IDA7 Ij4mbmJzcDsgJm5ic3A7ICZuYnNwO0xpdSBaaHVhbmc8L3A+PHAgc3R5bGU9Im1hcmdpbjogMDsi Pjxicj48L3A+PGRpdiBzdHlsZT0icG9zaXRpb246cmVsYXRpdmU7em9vbToxIj48L2Rpdj48ZGl2 IGlkPSJkaXZOZXRlYXNlTWFpbENhcmQiPjwvZGl2PjxwIHN0eWxlPSJtYXJnaW46IDA7Ij48YnI+ PC9wPjxwPkF0IDIwMjMtMTAtMTAgMjE6MDQ6MzEsICJEYXZlIENyYW1lciIgJmx0O2RhdmVjcmFt ZXJAcG9zdGdyZXMucm9ja3MmZ3Q7IHdyb3RlOjwvcD48YmxvY2txdW90ZSBpZD0iaXNSZXBseUNv bnRlbnQiIHN0eWxlPSJQQURESU5HLUxFRlQ6IDFleDsgTUFSR0lOOiAwcHggMHB4IDBweCAwLjhl eDsgQk9SREVSLUxFRlQ6ICNjY2MgMXB4IHNvbGlkIj48ZGl2IGRpcj0ibHRyIj48ZGl2IGRpcj0i bHRyIj5IZWxsbyw8ZGl2Pjxicj48L2Rpdj48ZGl2PlRoYW5rcyBmb3IgdGhlIHBhdGNoLCBob3dl dmVyIGl0IGRvZXMgbm90IGFwcGx5IGNsZWFubHkgdXNpbmcgcGF0Y2ggb3IgZ2l0IGFwcGx5PC9k aXY+PGRpdj48YnI+PC9kaXY+PGRpdj5DYW4geW91IHByb3ZpZGUmbmJzcDthIFBSJm5ic3A7PGEg aHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL3Bvc3RncmVzcWwtaW50ZXJmYWNlcy9wc3Fsb2RiYyI+ cG9zdGdyZXNxbC1pbnRlcmZhY2VzL3BzcWxvZGJjIChnaXRodWIuY29tKTwvYT4mbmJzcDthbmQg YWRkIHRlc3RzIHBsZWFzZSA/PC9kaXY+PGRpdj48YnI+PC9kaXY+PGRpdj48YnIgY2xlYXI9ImFs bCI+PGRpdj48ZGl2IGRpcj0ibHRyIiBjbGFzcz0iZ21haWxfc2lnbmF0dXJlIj48ZGl2IGRpcj0i bHRyIj5EYXZlIENyYW1lcjxkaXY+d3d3LnBvc3RncmVzLnJvY2tzPC9kaXY+PC9kaXY+PC9kaXY+ PC9kaXY+PGJyPjwvZGl2PjwvZGl2PjwvZGl2Pjxicj48ZGl2IGNsYXNzPSJnbWFpbF9xdW90ZSI+ PGRpdiBkaXI9Imx0ciIgY2xhc3M9ImdtYWlsX2F0dHIiPk9uIFR1ZSwgMTAgT2N0IDIwMjMgYXQg MDE6MDksIMH1168gJmx0OzxhIGhyZWY9Im1haWx0bzpsendwMDUyMUAxNjMuY29tIj5sendwMDUy MUAxNjMuY29tPC9hPiZndDsgd3JvdGU6PGJyPjwvZGl2PjxibG9ja3F1b3RlIGNsYXNzPSJnbWFp bF9xdW90ZSIgc3R5bGU9Im1hcmdpbjowcHggMHB4IDBweCAwLjhleDtib3JkZXItbGVmdDoxcHgg c29saWQgcmdiKDIwNCwyMDQsMjA0KTtwYWRkaW5nLWxlZnQ6MWV4Ij48ZGl2IHN0eWxlPSJsaW5l LWhlaWdodDoxLjc7Y29sb3I6cmdiKDAsMCwwKTtmb250LXNpemU6MTRweDtmb250LWZhbWlseTpB cmlhbCI+PGRpdiBzdHlsZT0ibGluZS1oZWlnaHQ6MS43Ij48cCBzdHlsZT0iY29sb3I6cmdiKDAs MCwwKTtmb250LWZhbWlseTpBcmlhbDtmb250LXNpemU6MTRweDttYXJnaW46MHB4Ij48c3BhbiBz dHlsZT0iZm9udC1mYW1pbHk6SGVsdmV0aWNhLCZxdW90O01pY3Jvc29mdCBZYWhlaSZxdW90Oyx2 ZXJkYW5hIj5oZWxsb6OhPC9zcGFuPjwvcD48cCBzdHlsZT0iY29sb3I6cmdiKDAsMCwwKTtmb250 LWZhbWlseTpBcmlhbDtmb250LXNpemU6MTRweDttYXJnaW46MHB4Ij48YnI+PC9wPjxwIHN0eWxl PSJjb2xvcjpyZ2IoMCwwLDApO2ZvbnQtZmFtaWx5OkFyaWFsO2ZvbnQtc2l6ZToxNHB4O21hcmdp bjowcHgiPlRoZSBhdHRhY2hlZCBwYXRjaCBmaXhlZCZuYnNwOyBTUUxQcm9jZWR1cmVzIHR3byBi dWc6PC9wPjxwIHN0eWxlPSJjb2xvcjpyZ2IoMCwwLDApO2ZvbnQtZmFtaWx5OkFyaWFsO2ZvbnQt c2l6ZToxNHB4O21hcmdpbjowcHgiPjEuJm5ic3A7IG1ha2UgZW51bWVyYXRpb24gb2YgZGF0YWJh c2VzIChjYXRhbG9ncyBpbiBPREJDIHNwZWFrKSB3b3JrLjwvcD48cCBzdHlsZT0iY29sb3I6cmdi KDAsMCwwKTtmb250LWZhbWlseTpBcmlhbDtmb250LXNpemU6MTRweDttYXJnaW46MHB4Ij4yLiZu YnNwOyBtYWtlIGVudW1lcmF0aW9uIG9mIHByb2NlZHVyZW5hbWUgKHByb2NuYW1lJm5ic3A7IGlu IE9EQkMgc3BlYWspIHdvcmsuPC9wPjxwIHN0eWxlPSJjb2xvcjpyZ2IoMCwwLDApO2ZvbnQtZmFt aWx5OkFyaWFsO2ZvbnQtc2l6ZToxNHB4O21hcmdpbjowcHgiPjxicj48L3A+PHAgc3R5bGU9ImNv bG9yOnJnYigwLDAsMCk7Zm9udC1mYW1pbHk6QXJpYWw7Zm9udC1zaXplOjE0cHg7bWFyZ2luOjBw eCI+PGJyPjwvcD48cCBzdHlsZT0iY29sb3I6cmdiKDAsMCwwKTtmb250LWZhbWlseTpBcmlhbDtm b250LXNpemU6MTRweDttYXJnaW46MHB4Ij5TdGVwOjwvcD48cCBzdHlsZT0iY29sb3I6cmdiKDAs MCwwKTtmb250LWZhbWlseTpBcmlhbDtmb250LXNpemU6MTRweDttYXJnaW46MHB4Ij4mbmJzcDsg Jm5ic3A7MS4mbmJzcDsgbG9naW4gcG9zdGdyZXM8L3A+PHAgc3R5bGU9ImNvbG9yOnJnYigwLDAs MCk7Zm9udC1mYW1pbHk6QXJpYWw7Zm9udC1zaXplOjE0cHg7bWFyZ2luOjBweCI+Jm5ic3A7ICZu YnNwOzIuJm5ic3A7IGNyZWF0ZSBzY2hlbSBuYW1lZCZuYnNwOyBzY2hlbTEmbmJzcDs8L3A+PHAg c3R5bGU9ImNvbG9yOnJnYigwLDAsMCk7Zm9udC1mYW1pbHk6QXJpYWw7Zm9udC1zaXplOjE0cHg7 bWFyZ2luOjBweCI+Jm5ic3A7ICZuYnNwOzMuJm5ic3A7IHNldCBzZWFyY2hfcGF0aCBUTyBzY2hl bTE8L3A+PHAgc3R5bGU9ImNvbG9yOnJnYigwLDAsMCk7Zm9udC1mYW1pbHk6QXJpYWw7Zm9udC1z aXplOjE0cHg7bWFyZ2luOjBweCI+Jm5ic3A7ICZuYnNwOzQuJm5ic3A7IGNyZWF0ZSBwcm9jZWR1 cmUgbmFtZWQgZ2VucmVfaW5zZXJ0X2RhdGE8L3A+PHAgc3R5bGU9ImNvbG9yOnJnYigwLDAsMCk7 Zm9udC1mYW1pbHk6QXJpYWw7Zm9udC1zaXplOjE0cHg7bWFyZ2luOjBweCI+Jm5ic3A7ICZuYnNw OzUuJm5ic3A7IHdpdGggb2RiYyBhcHBsaWNhdGlvbqOocmV0Y29kZSA9Jm5ic3A7IFNRTFByb2Nl ZHVyZXMgKGhzdG10LCBOVUxMLCAwLCBOVUxMLCAwLCAoU1FMQ0hBUiAqKSJnZW5yZV9pbnNlcnRf ZGF0YSIsIHN0cmxlbigiZ2VucmVfaW5zZXJ0X2RhdGEiKSk7o6l0byBnZXQgdGhlIGdlbnJlX2lu c2VydF9kYXRhKHN0ZXAgNCk8L3A+PHAgc3R5bGU9ImNvbG9yOnJnYigwLDAsMCk7Zm9udC1mYW1p bHk6QXJpYWw7Zm9udC1zaXplOjE0cHg7bWFyZ2luOjBweCI+Jm5ic3A7ICZuYnNwOzYuJm5ic3A7 IHRoZSByZXN1bHQgaXMgZW1wdHkuPC9wPjxkaXYgc3R5bGU9ImNvbG9yOnJnYigwLDAsMCk7Zm9u dC1mYW1pbHk6QXJpYWw7Zm9udC1zaXplOjE0cHgiPiZuYnNwOyAmbmJzcDs8aW1nIHNyYz0iY2lk OjJlMTU5YWU5JDEkMThiMTdlNWIxOWQkQ29yZW1haWwkbHp3cDA1MjEkMTYzLmNvbSIgc3R5bGU9 IndpZHRoOiAzODdweDsgaGVpZ2h0OiA1NHB4OyI+PC9kaXY+PGRpdj4mbmJzcDsgJm5ic3A7Ny4g QWZ0ZXIgdGhlIHBhdGNoIGlzIGNvbXBpbGVkIHVzaW5nIHRoZSZuYnNwOzxzcGFuIHN0eWxlPSJm b250LWZhbWlseTphcmlhbDt3aGl0ZS1zcGFjZTpwcmUtd3JhcCI+YXR0YWNoZWQgcGF0Y2gsIHRo ZW4gcnVuIHRoZSA8L3NwYW4+b2RiYyBhcHBsaWNhdGlvbqOoc3RlcCA1o6ksJm5ic3A7VGhlIHJl c3VsdCBpcyBzaG93biBiZWxvdzo8L2Rpdj48ZGl2PiZuYnNwOyZuYnNwOzxpbWcgc3JjPSJjaWQ6 NjNlMTY0YjgkMiQxOGIxN2VlZGE1NiRDb3JlbWFpbCRsendwMDUyMSQxNjMuY29tIiBzdHlsZT0i d2lkdGg6IDM3OHB4OyBoZWlnaHQ6IDEyMnB4OyBib3JkZXI6IG5vbmU7Ij4mbmJzcDsgJm5ic3A7 PC9kaXY+PGRpdj48YnI+PC9kaXY+PGRpdj48YnI+PC9kaXY+PGRpdiBzdHlsZT0iY29sb3I6cmdi KDAsMCwwKTtmb250LWZhbWlseTpBcmlhbDtmb250LXNpemU6MTRweCI+PGJyPjwvZGl2PjxkaXYg c3R5bGU9ImNvbG9yOnJnYigwLDAsMCk7Zm9udC1mYW1pbHk6QXJpYWw7Zm9udC1zaXplOjE0cHgi PiZuYnNwOyZuYnNwOzwvZGl2PjwvZGl2PjwvZGl2PjwvYmxvY2txdW90ZT48L2Rpdj4KPC9ibG9j a3F1b3RlPjwvZGl2Pg== ------=_Part_96872_131420511.1697026578197-- ------=_Part_96871_1374622295.1697026578197 Content-Type: image/png; name=image.png Content-Transfer-Encoding: base64 Content-Disposition: inline; filename="image.png" Content-ID: <454f09a2$1$18b1e9e7273$Coremail$lzwp0521$163.com> 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 Wy4sMLlSMlEAAAAASUVORK5CYII= ------=_Part_96871_1374622295.1697026578197 Content-Type: image/png; name=image.png Content-Transfer-Encoding: base64 Content-Disposition: inline; filename="image.png" Content-ID: <469d8199$6$18b1ea9f52d$Coremail$lzwp0521$163.com> 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 2zy3PwAAAABJRU5ErkJggg== ------=_Part_96871_1374622295.1697026578197-- ------=_Part_96870_920188474.1697026578197 Content-Type: text/x-c; name=info-patch.c Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="info-patch.c" LyotLS0tLS0tLQogKiBNb2R1bGU6CQkJaW5mby5jCiAqCiAqIERlc2NyaXB0aW9uOgkJVGhpcyBt b2R1bGUgY29udGFpbnMgcm91dGluZXMgcmVsYXRlZCB0bwogKgkJCQkJT0RCQyBpbmZvcm1hdGlv bmFsIGZ1bmN0aW9ucy4KICoKICogQ2xhc3NlczoJCQluL2EKICoKICogQVBJIGZ1bmN0aW9uczoJ U1FMR2V0SW5mbywgU1FMR2V0VHlwZUluZm8sIFNRTEdldEZ1bmN0aW9ucywKICoJCQkJCVNRTFRh YmxlcywgU1FMQ29sdW1ucywgU1FMU3RhdGlzdGljcywgU1FMU3BlY2lhbENvbHVtbnMsCiAqCQkJ CQlTUUxQcmltYXJ5S2V5cywgU1FMRm9yZWlnbktleXMsCiAqCQkJCQlTUUxQcm9jZWR1cmVDb2x1 bW5zLCBTUUxQcm9jZWR1cmVzLAogKgkJCQkJU1FMVGFibGVQcml2aWxlZ2VzLCBTUUxDb2x1bW5Q cml2aWxlZ2VzKE5JKQogKgogKiBDb21tZW50czoJCVNlZSAicmVhZG1lLnR4dCIgZm9yIGNvcHly aWdodCBhbmQgbGljZW5zZSBpbmZvcm1hdGlvbi4KICotLS0tLS0tLQogKi8KCiNpbmNsdWRlICJw c3Fsb2RiYy5oIgojaW5jbHVkZSAidW5pY29kZV9zdXBwb3J0LmgiCgojaW5jbHVkZSA8c3RyaW5n Lmg+CiNpbmNsdWRlIDxzdGRpby5oPgoKI2lmbmRlZiBXSU4zMgojaW5jbHVkZSA8Y3R5cGUuaD4K I2VuZGlmCgojaW5jbHVkZSAidHVwbGUuaCIKI2luY2x1ZGUgInBndHlwZXMuaCIKI2luY2x1ZGUg ImRsZ19zcGVjaWZpYy5oIgoKI2luY2x1ZGUgImVudmlyb24uaCIKI2luY2x1ZGUgImNvbm5lY3Rp b24uaCIKI2luY2x1ZGUgInN0YXRlbWVudC5oIgojaW5jbHVkZSAicXJlc3VsdC5oIgojaW5jbHVk ZSAiYmluZC5oIgojaW5jbHVkZSAibWlzYy5oIgojaW5jbHVkZSAicGd0eXBlcy5oIgojaW5jbHVk ZSAicGdhcGlmdW5jLmgiCiNpbmNsdWRlICJtdWx0aWJ5dGUuaCIKI2luY2x1ZGUgImNhdGZ1bmMu aCIKCi8qCVRyaWdnZXIgcmVsYXRlZCBzdHVmZiBmb3IgU1FMRm9yZWlnbiBLZXlzICovCiNkZWZp bmUgVFJJR0dFUl9TSElGVCAzCiNkZWZpbmUgVFJJR0dFUl9NQVNLICAgMHgwMwojZGVmaW5lIFRS SUdHRVJfREVMRVRFIDB4MDEKI2RlZmluZSBUUklHR0VSX1VQREFURSAweDAyCgpzdGF0aWMgY29u c3QgU1FMQ0hBUiAqcHVic3RyID0gKFNRTENIQVIgKikgInB1YmxpYyI7CnN0YXRpYyBjb25zdCBj aGFyCSpsaWtlb3AgPSAibGlrZSI7CnN0YXRpYyBjb25zdCBjaGFyCSplcW9wID0gIj0iOwoKLyog Z3JvdXAgb2YgU1FMX0NWVF8oY2hhcnMpICovCiNkZWZpbmUgUEdfQ09OVkVSVF9DSAlTUUxfQ1ZU X0NIQVIgfCBTUUxfQ1ZUX1ZBUkNIQVIgfCBTUUxfQ1ZUX0xPTkdWQVJDSEFSCi8qIGdyb3VwIG9m IFNRTF9DVlRfKG51bWJlcnMpICovCiNkZWZpbmUgUEdfQ09OVkVSVF9OVU0JU1FMX0NWVF9TTUFM TElOVCB8IFNRTF9DVlRfSU5URUdFUiB8ICBTUUxfQ1ZUX0JJR0lOVCB8IFNRTF9DVlRfUkVBTCB8 IFNRTF9DVlRfRkxPQVQgfCBTUUxfQ1ZUX0RPVUJMRSB8IFNRTF9DVlRfTlVNRVJJQyB8IFNRTF9D VlRfREVDSU1BTAovKiBncm91cCBvZiBTUUxfQ1ZUXyhkYXRlIHRpbWUpICovCiNkZWZpbmUgUEdf Q09OVkVSVF9EVAlTUUxfQ1ZUX0RBVEUgfCBTUUxfQ1ZUX1RJTUUgfCBTUUxfQ1ZUX1RJTUVTVEFN UAovKiBncm91cCBvZiBTUUxfQ1ZUXyh3Y2hhcnMpICovCiNpZmRlZiBVTklDT0RFX1NVUFBPUlQK I2RlZmluZSBQR19DT05WRVJUX1dDSAlTUUxfQ1ZUX1dDSEFSIHwgU1FMX0NWVF9XVkFSQ0hBUiB8 IFNRTF9DVlRfV0xPTkdWQVJDSEFSCiNlbHNlCiNkZWZpbmUgUEdfQ09OVkVSVF9XQ0gJMAojZW5k aWYgLyogVU5JQ09ERV9TVVBQT1JUICovCgojZGVmaW5lIFFSX3NldF9maWVsZF9pbmZvX0VOKHNl bGYsIGZpZWxkX251bSwgYWR0aWQsIGFkdHNpemUpICAoQ0lfc2V0X2ZpZWxkX2luZm8oc2VsZi0+ ZmllbGRzLCBmaWVsZF9udW0sIGNhdGNuW2ZpZWxkX251bV1baXNfT0RCQzJdLCBhZHRpZCwgYWR0 c2l6ZSwgLTEsIDAsIDApKQoKY29uc3QgU1FMTEVOIG1hc2tfbG9uZ3ZhcmJpbmFyeSA9IFNRTF9D VlRfTE9OR1ZBUkJJTkFSWTsKClJFVENPREUJCVNRTF9BUEkKUEdBUElfR2V0SW5mbyhIREJDIGhk YmMsCgkJCSAgU1FMVVNNQUxMSU5UIGZJbmZvVHlwZSwKCQkJICBQVFIgcmdiSW5mb1ZhbHVlLAoJ CQkgIFNRTFNNQUxMSU5UIGNiSW5mb1ZhbHVlTWF4LAoJCQkgIFNRTFNNQUxMSU5UICogcGNiSW5m b1ZhbHVlKQp7CglDU1RSIGZ1bmMgPSAiUEdBUElfR2V0SW5mbyI7CglDb25uZWN0aW9uQ2xhc3Mg KmNvbm4gPSAoQ29ubmVjdGlvbkNsYXNzICopIGhkYmM7CglDb25uSW5mbyAgICpjaTsKCWNvbnN0 IGNoYXIgICAqcCA9IE5VTEw7CgljaGFyCQl0bXBbTUFYX0lORk9fU1RSSU5HXTsKCVNRTFVMRU4J CQlsZW4gPSAwLAoJCQkJdmFsdWUgPSAwOwoJUkVUQ09ERQkJcmV0ID0gU1FMX0VSUk9SOwoJY2hh cgkJb2RiY3ZlclsxNl07CgoJTVlMT0coMCwgImVudGVyaW5nLi4uZkluZm9UeXBlPSVkXG4iLCBm SW5mb1R5cGUpOwoKCWlmICghY29ubikKCXsKCQlDQ19sb2dfZXJyb3IoZnVuYywgTlVMTF9TVFJJ TkcsIE5VTEwpOwoJCXJldHVybiBTUUxfSU5WQUxJRF9IQU5ETEU7Cgl9CgoJY2kgPSAmKGNvbm4t PmNvbm5JbmZvKTsKCglzd2l0Y2ggKGZJbmZvVHlwZSkKCXsKCQljYXNlIFNRTF9BQ0NFU1NJQkxF X1BST0NFRFVSRVM6IC8qIE9EQkMgMS4wICovCgkJCXAgPSAiTiI7CgkJCWJyZWFrOwoKCQljYXNl IFNRTF9BQ0NFU1NJQkxFX1RBQkxFUzoJCS8qIE9EQkMgMS4wICovCgkJCXAgPSBDQ19hY2Nlc3Np YmxlX29ubHkoY29ubikgPyAiWSIgOiAiTiI7CgkJCWJyZWFrOwoKCQljYXNlIFNRTF9BQ1RJVkVf Q09OTkVDVElPTlM6CS8qIE9EQkMgMS4wICovCgkJCWxlbiA9IDI7CgkJCXZhbHVlID0gMDsKCQkJ YnJlYWs7CgoJCWNhc2UgU1FMX0FDVElWRV9TVEFURU1FTlRTOgkJLyogT0RCQyAxLjAgKi8KCQkJ bGVuID0gMjsKCQkJdmFsdWUgPSAwOwoJCQlicmVhazsKCgkJY2FzZSBTUUxfQUxURVJfVEFCTEU6 CS8qIE9EQkMgMi4wICovCgkJCWxlbiA9IDQ7CgkJCXZhbHVlID0gU1FMX0FUX0FERF9DT0xVTU4K CQkJCQl8IFNRTF9BVF9EUk9QX0NPTFVNTgoJCQkJCXwgU1FMX0FUX0FERF9DT0xVTU5fU0lOR0xF CgkJCQkJfCBTUUxfQVRfQUREX0NPTlNUUkFJTlQKCQkJCQl8IFNRTF9BVF9BRERfVEFCTEVfQ09O U1RSQUlOVAoJCQkJCXwgU1FMX0FUX0NPTlNUUkFJTlRfSU5JVElBTExZX0RFRkVSUkVECgkJCQkJ fCBTUUxfQVRfQ09OU1RSQUlOVF9JTklUSUFMTFlfSU1NRURJQVRFCgkJCQkJfCBTUUxfQVRfQ09O U1RSQUlOVF9ERUZFUlJBQkxFCgkJCQkJfCBTUUxfQVRfRFJPUF9UQUJMRV9DT05TVFJBSU5UX1JF U1RSSUNUCgkJCQkJfCBTUUxfQVRfRFJPUF9UQUJMRV9DT05TVFJBSU5UX0NBU0NBREUKCQkJCQl8 IFNRTF9BVF9EUk9QX0NPTFVNTl9SRVNUUklDVAoJCQkJCXwgU1FMX0FUX0RST1BfQ09MVU1OX0NB U0NBREU7CgkJCWJyZWFrOwoKCQljYXNlIFNRTF9CT09LTUFSS19QRVJTSVNURU5DRToJLyogT0RC QyAyLjAgKi8KCQkJLyogdmVyeSBzaW1wbGUgYm9va21hcmsgc3VwcG9ydCAqLwoJCQlsZW4gPSA0 OwoJCQl2YWx1ZSA9IFNRTF9CUF9TQ1JPTEwgfCBTUUxfQlBfREVMRVRFIHwgU1FMX0JQX1VQREFU RSB8IFNRTF9CUF9UUkFOU0FDVElPTjsKCQkJYnJlYWs7CgoJCWNhc2UgU1FMX0NPTFVNTl9BTElB UzoJLyogT0RCQyAyLjAgKi8KCQkJcCA9ICJZIjsKCQkJYnJlYWs7CgoJCWNhc2UgU1FMX0NPTkNB VF9OVUxMX0JFSEFWSU9SOgkvKiBPREJDIDEuMCAqLwoJCQlsZW4gPSAyOwoJCQl2YWx1ZSA9IFNR TF9DQl9OT05fTlVMTDsKCQkJYnJlYWs7CgoJCWNhc2UgU1FMX0NPTlZFUlRfQklUOgoJCQlsZW4g PSBzaXplb2YoU1FMVUlOVEVHRVIpOwoJCQl2YWx1ZSA9IGNpLT5kaXNhYmxlX2NvbnZlcnRfZnVu YyA/IDAgOiBTUUxfQ1ZUX0JJVCB8IFNRTF9DVlRfSU5URUdFUiB8IFBHX0NPTlZFUlRfQ0ggfCBQ R19DT05WRVJUX1dDSDsKTVlMT0coMCwgIlNRTF9DT05WRVJUXyBtYXNrPSIgRk9STUFUX1VMRU4g IlxuIiwgdmFsdWUpOwoJCQlicmVhazsKCQljYXNlIFNRTF9DT05WRVJUX0lOVEVHRVI6CgkJCWxl biA9IHNpemVvZihTUUxVSU5URUdFUik7CgkJCXZhbHVlID0gY2ktPmRpc2FibGVfY29udmVydF9m dW5jID8gMCA6IFNRTF9DVlRfQklUIHwgUEdfQ09OVkVSVF9OVU0gfCBQR19DT05WRVJUX0NIIHwg UEdfQ09OVkVSVF9XQ0g7CgkJCWJyZWFrOwoJCWNhc2UgU1FMX0NPTlZFUlRfU01BTExJTlQ6CgkJ Y2FzZSBTUUxfQ09OVkVSVF9CSUdJTlQ6CgkJY2FzZSBTUUxfQ09OVkVSVF9ERUNJTUFMOgoJCWNh c2UgU1FMX0NPTlZFUlRfRE9VQkxFOgoJCWNhc2UgU1FMX0NPTlZFUlRfRkxPQVQ6CgkJY2FzZSBT UUxfQ09OVkVSVF9OVU1FUklDOgoJCWNhc2UgU1FMX0NPTlZFUlRfUkVBTDoKCQkJbGVuID0gc2l6 ZW9mKFNRTFVJTlRFR0VSKTsKCQkJdmFsdWUgPSBjaS0+ZGlzYWJsZV9jb252ZXJ0X2Z1bmMgPyAw IDogUEdfQ09OVkVSVF9OVU0gfCBQR19DT05WRVJUX0NIIHwgUEdfQ09OVkVSVF9XQ0g7CgkJCWJy ZWFrOwoJCWNhc2UgU1FMX0NPTlZFUlRfQ0hBUjoKCQljYXNlIFNRTF9DT05WRVJUX1ZBUkNIQVI6 CQkvKiBPREJDIDEuMCAqLwoJCWNhc2UgU1FMX0NPTlZFUlRfTE9OR1ZBUkNIQVI6CgkJCWxlbiA9 IHNpemVvZihTUUxVSU5URUdFUik7CgkJCXZhbHVlID0gY2ktPmRpc2FibGVfY29udmVydF9mdW5j ID8gMCA6IFNRTF9DVlRfQklUIHwgUEdfQ09OVkVSVF9OVU0gfCBQR19DT05WRVJUX0NIIHwgUEdf Q09OVkVSVF9XQ0g7CgkJCWJyZWFrOwoJCWNhc2UgU1FMX0NPTlZFUlRfREFURToKCQkJbGVuID0g c2l6ZW9mKFNRTFVJTlRFR0VSKTsKCQkJdmFsdWUgPSBjaS0+ZGlzYWJsZV9jb252ZXJ0X2Z1bmMg PyAwIDogUEdfQ09OVkVSVF9DSCB8IFNRTF9DVlRfREFURSB8IFNRTF9DVlRfVElNRVNUQU1QIHwg UEdfQ09OVkVSVF9XQ0g7CgkJCWJyZWFrOwoJCWNhc2UgU1FMX0NPTlZFUlRfVElNRToKCQkJbGVu ID0gc2l6ZW9mKFNRTFVJTlRFR0VSKTsKCQkJdmFsdWUgPSBjaS0+ZGlzYWJsZV9jb252ZXJ0X2Z1 bmMgPyAwIDogUEdfQ09OVkVSVF9DSCB8IFNRTF9DVlRfVElNRSB8IFBHX0NPTlZFUlRfV0NIOwoJ CQlicmVhazsKCQljYXNlIFNRTF9DT05WRVJUX1RJTUVTVEFNUDoKCQkJbGVuID0gc2l6ZW9mKFNR TFVJTlRFR0VSKTsKCQkJdmFsdWUgPSBjaS0+ZGlzYWJsZV9jb252ZXJ0X2Z1bmMgPyAwIDogUEdf Q09OVkVSVF9DSCB8IFBHX0NPTlZFUlRfRFQgfCBQR19DT05WRVJUX1dDSDsKCQkJYnJlYWs7CgkJ Y2FzZSBTUUxfQ09OVkVSVF9MT05HVkFSQklOQVJZOgoJCQlsZW4gPSBzaXplb2YoU1FMVUlOVEVH RVIpOwoJCQl2YWx1ZSA9IGNpLT5kaXNhYmxlX2NvbnZlcnRfZnVuYyA/IDAgOiBTUUxfQ1ZUX0xP TkdWQVJCSU5BUlk7CgkJCWJyZWFrOwojaWZkZWYgVU5JQ09ERV9TVVBQT1JUCgkJY2FzZSBTUUxf Q09OVkVSVF9XQ0hBUjoKCQljYXNlIFNRTF9DT05WRVJUX1dMT05HVkFSQ0hBUjoKCQljYXNlIFNR TF9DT05WRVJUX1dWQVJDSEFSOgoJCQlsZW4gPSBzaXplb2YoU1FMVUlOVEVHRVIpOwoJCQl2YWx1 ZSA9IGNpLT5kaXNhYmxlX2NvbnZlcnRfZnVuYyA/IDAgOiBTUUxfQ1ZUX0JJVCB8IFBHX0NPTlZF UlRfTlVNIHwgUEdfQ09OVkVSVF9EVCB8IFBHX0NPTlZFUlRfV0NIOwoJCQlicmVhazsKI2VuZGlm IC8qIFVOSUNPREVfU1VQUE9SVCAqLwoJCWNhc2UgU1FMX0NPTlZFUlRfVElOWUlOVDoKCQljYXNl IFNRTF9DT05WRVJUX0JJTkFSWToKCQljYXNlIFNRTF9DT05WRVJUX1ZBUkJJTkFSWToJCS8qIE9E QkMgMS4wICovCgkJCWxlbiA9IHNpemVvZihTUUxVSU5URUdFUik7CgkJCXZhbHVlID0gMDsJLyog Q09OVkVSVCBpcyB1bmF2YWlsYWJsZSAqLwoJCQlicmVhazsKCgkJY2FzZSBTUUxfQ09OVkVSVF9G VU5DVElPTlM6CQkvKiBPREJDIDEuMCAqLwoJCQlsZW4gPSBzaXplb2YoU1FMVUlOVEVHRVIpOwoJ CQl2YWx1ZSA9IFNRTF9GTl9DVlRfQ09OVkVSVDsKTVlMT0coMCwgIkNPTlZFUlRfRlVOQ1RJT05T PSIgRk9STUFUX1VMRU4gIlxuIiwgdmFsdWUpOwoJCQlicmVhazsKCgkJY2FzZSBTUUxfQ09SUkVM QVRJT05fTkFNRToJCS8qIE9EQkMgMS4wICovCgoJCQkvKgoJCQkgKiBTYXlpbmcgbm8gY29ycmVs YXRpb24gbmFtZSBtYWtlcyBRdWVyeSBub3Qgd29yayByaWdodC4KCQkJICogdmFsdWUgPSBTUUxf Q05fTk9ORTsKCQkJICovCgkJCWxlbiA9IDI7CgkJCXZhbHVlID0gU1FMX0NOX0FOWTsKCQkJYnJl YWs7CgoJCWNhc2UgU1FMX0NVUlNPUl9DT01NSVRfQkVIQVZJT1I6CQkvKiBPREJDIDEuMCAqLwoJ CQlsZW4gPSAyOwoJCQl2YWx1ZSA9IFNRTF9DQl9QUkVTRVJWRTsKCQkJYnJlYWs7CgoJCWNhc2Ug U1FMX0NVUlNPUl9ST0xMQkFDS19CRUhBVklPUjoJCS8qIE9EQkMgMS4wICovCgkJCWxlbiA9IDI7 CgkJCWlmICghY2ktPmRyaXZlcnMudXNlX2RlY2xhcmVmZXRjaCkKCQkJCXZhbHVlID0gU1FMX0NC X1BSRVNFUlZFOwoJCQllbHNlCgkJCQl2YWx1ZSA9IFNRTF9DQl9DTE9TRTsKCQkJYnJlYWs7CgoJ CWNhc2UgU1FMX0RBVEFfU09VUkNFX05BTUU6CQkvKiBPREJDIDEuMCAqLwoJCQlwID0gQ0NfZ2V0 X0RTTihjb25uKTsKCQkJYnJlYWs7CgoJCWNhc2UgU1FMX0RBVEFfU09VUkNFX1JFQURfT05MWTog LyogT0RCQyAxLjAgKi8KCQkJcCA9IENDX2lzX29ubHlyZWFkKGNvbm4pID8gIlkiIDogIk4iOwoJ CQlicmVhazsKCgkJY2FzZSBTUUxfREFUQUJBU0VfTkFNRToJLyogU3VwcG9ydCBmb3Igb2xkIE9E QkMgMS4wIEFwcHMgKi8KCgkJCS8qCgkJCSAqIFJldHVybmluZyB0aGUgZGF0YWJhc2UgbmFtZSBj YXVzZXMgcHJvYmxlbXMgaW4gTVMgUXVlcnkuIEl0CgkJCSAqIGdlbmVyYXRlcyBxdWVyeSBsaWtl OiAiU0VMRUNUIERJU1RJTkNUIGEgRlJPTSBieXJvbm5iYWQzCgkJCSAqIGJhZDMiCgkJCSAqCgkJ CSAqIHAgPSBDQ19nZXRfZGF0YWJhc2UoY29ubik7CgkJCSAqLwoJCQlwID0gQ3VyckNhdFN0cmlu Zyhjb25uKTsKCQkJYnJlYWs7CgoJCWNhc2UgU1FMX0RCTVNfTkFNRToJCS8qIE9EQkMgMS4wICov CgkJCWlmIChDQ19mYWtlX21zcyhjb25uKSkKCQkJCXAgPSAiTWljcm9zb2Z0IFNRTCBTZXJ2ZXIi OwoJCQllbHNlCgkJCQlwID0gIlBvc3RncmVTUUwiOwoJCQlicmVhazsKCgkJY2FzZSBTUUxfREJN U19WRVI6CQkvKiBPREJDIDEuMCAqLwoKCQkJLyoKCQkJICogVGhlIE9EQkMgc3BlYyB3YW50cyAj Iy4jIy4jIyMjIC4uLndoYXRldmVyLi4uIHNvIHByZXBlbmQKCQkJICogdGhlIGRyaXZlcgoJCQkg Ki8KCQkJLyogdmVyc2lvbiBudW1iZXIgdG8gdGhlIGRibXMgdmVyc2lvbiBzdHJpbmcgKi8KCQkJ LyoKCQkJU1BSSU5URl9GSVhFRCh0bXAsICIlcyAlcyIsIFBPU1RHUkVTRFJJVkVSVkVSU0lPTiwg Y29ubi0+cGdfdmVyc2lvbik7CiAgICAgICAgICAgICAgICAgICAgICAgIHRtcFtzaXplb2YodG1w KSAtIDFdID0gJ1wwJzsgKi8KCQkJaWYgKENDX2Zha2VfbXNzKGNvbm4pKQoJCQkJcCA9ICIwOS4w MC4xMzk5IjsKCQkJZWxzZQoJCQl7CgkJCQlTVFJDUFlfRklYRUQodG1wLCBjb25uLT5wZ192ZXJz aW9uKTsKCQkJCXAgPSB0bXA7CgkJCX0KCQkJYnJlYWs7CgoJCWNhc2UgU1FMX0RFRkFVTFRfVFhO X0lTT0xBVElPTjogLyogT0RCQyAxLjAgKi8KCQkJbGVuID0gNDsKCQkJaWYgKDAgPT0gY29ubi0+ ZGVmYXVsdF9pc29sYXRpb24pCgkJCQljb25uLT5pc29sYXRpb24gPSBDQ19nZXRfaXNvbGF0aW9u KGNvbm4pOwoJCQl2YWx1ZSA9IGNvbm4tPmRlZmF1bHRfaXNvbGF0aW9uOwoJCQlicmVhazsKCgkJ Y2FzZSBTUUxfRFJJVkVSX05BTUU6CS8qIE9EQkMgMS4wICovCgkJCXAgPSBEUklWRVJfRklMRV9O QU1FOwoJCQlicmVhazsKCgkJY2FzZSBTUUxfRFJJVkVSX09EQkNfVkVSOgoJCQlTUFJJTlRGX0ZJ WEVEKG9kYmN2ZXIsICIlMDJ4LiUwMngiLCBPREJDVkVSIC8gMjU2LCBPREJDVkVSICUgMjU2KTsK CQkJLyogcCA9IERSSVZFUl9PREJDX1ZFUjsgKi8KCQkJcCA9IG9kYmN2ZXI7CgkJCWJyZWFrOwoK CQljYXNlIFNRTF9EUklWRVJfVkVSOgkvKiBPREJDIDEuMCAqLwoJCQlwID0gUE9TVEdSRVNEUklW RVJWRVJTSU9OOwoJCQlicmVhazsKCgkJY2FzZSBTUUxfRVhQUkVTU0lPTlNfSU5fT1JERVJCWToJ CS8qIE9EQkMgMS4wICovCgkJCXAgPSAiWSI7CgkJCWJyZWFrOwoKCQljYXNlIFNRTF9GRVRDSF9E SVJFQ1RJT046CQkvKiBPREJDIDEuMCAqLwoJCQlsZW4gPSA0OwoJCQl2YWx1ZSA9IChTUUxfRkRf RkVUQ0hfTkVYVCB8CgkJCQkJIFNRTF9GRF9GRVRDSF9GSVJTVCB8CgkJCQkJIFNRTF9GRF9GRVRD SF9MQVNUIHwKCQkJCQkgU1FMX0ZEX0ZFVENIX1BSSU9SIHwKCQkJCQkgU1FMX0ZEX0ZFVENIX0FC U09MVVRFIHwKCQkJCQkgU1FMX0ZEX0ZFVENIX1JFTEFUSVZFIHwKCQkJCQkgU1FMX0ZEX0ZFVENI X0JPT0tNQVJLKTsKCQkJYnJlYWs7CgoJCWNhc2UgU1FMX0ZJTEVfVVNBR0U6CS8qIE9EQkMgMi4w ICovCgkJCWxlbiA9IDI7CgkJCXZhbHVlID0gU1FMX0ZJTEVfTk9UX1NVUFBPUlRFRDsKCQkJYnJl YWs7CgoJCWNhc2UgU1FMX0dFVERBVEFfRVhURU5TSU9OUzoJLyogT0RCQyAyLjAgKi8KCQkJbGVu ID0gNDsKCQkJdmFsdWUgPSAoU1FMX0dEX0FOWV9DT0xVTU4gfCBTUUxfR0RfQU5ZX09SREVSIHwg U1FMX0dEX0JPVU5EIHwgU1FMX0dEX0JMT0NLKTsKCQkJYnJlYWs7CgoJCWNhc2UgU1FMX0dST1VQ X0JZOgkJLyogT0RCQyAyLjAgKi8KCQkJbGVuID0gMjsKCQkJdmFsdWUgPSBTUUxfR0JfR1JPVVBf QllfRVFVQUxTX1NFTEVDVDsKCQkJYnJlYWs7CgoJCWNhc2UgU1FMX0lERU5USUZJRVJfQ0FTRToJ CS8qIE9EQkMgMS4wICovCgoJCQkvKgoJCQkgKiBhcmUgaWRlbnRpZmllcnMgY2FzZS1zZW5zaXRp dmUgKHllcywgYnV0IG9ubHkgd2hlbiBxdW90ZWQuCgkJCSAqIElmIG5vdCBxdW90ZWQsIHRoZXkg ZGVmYXVsdCB0byBsb3dlcmNhc2UpCgkJCSAqLwoJCQlsZW4gPSAyOwoJCQl2YWx1ZSA9IFNRTF9J Q19MT1dFUjsKCQkJYnJlYWs7CgoJCWNhc2UgU1FMX0lERU5USUZJRVJfUVVPVEVfQ0hBUjogLyog T0RCQyAxLjAgKi8KCQkJLyogdGhlIGNoYXJhY3RlciB1c2VkIHRvIHF1b3RlICJpZGVudGlmaWVy cyIgKi8KCQkJcCA9ICJcIiI7CgkJCWJyZWFrOwoKCQljYXNlIFNRTF9LRVlXT1JEUzoJCS8qIE9E QkMgMi4wICovCgkJCXAgPSBOVUxMX1NUUklORzsKCQkJYnJlYWs7CgoJCWNhc2UgU1FMX0xJS0Vf RVNDQVBFX0NMQVVTRToJLyogT0RCQyAyLjAgKi8KCQkJcCA9ICJZIjsKCQkJYnJlYWs7CgoJCWNh c2UgU1FMX0xPQ0tfVFlQRVM6CS8qIE9EQkMgMi4wICovCgkJCWxlbiA9IDQ7CgkJCXZhbHVlID0g Y2ktPmRyaXZlcnMubGllID8gKFNRTF9MQ0tfTk9fQ0hBTkdFIHwgU1FMX0xDS19FWENMVVNJVkUg fCBTUUxfTENLX1VOTE9DSykgOiBTUUxfTENLX05PX0NIQU5HRTsKCQkJYnJlYWs7CgoJCWNhc2Ug U1FMX01BWF9CSU5BUllfTElURVJBTF9MRU46CQkvKiBPREJDIDIuMCAqLwoJCQlsZW4gPSA0OwoJ CQl2YWx1ZSA9IDA7CgkJCWJyZWFrOwoKCQljYXNlIFNRTF9NQVhfQ0hBUl9MSVRFUkFMX0xFTjoJ LyogT0RCQyAyLjAgKi8KCQkJbGVuID0gNDsKCQkJdmFsdWUgPSAwOwoJCQlicmVhazsKCgkJY2Fz ZSBTUUxfTUFYX0NPTFVNTl9OQU1FX0xFTjoJLyogT0RCQyAxLjAgKi8KCQkJbGVuID0gMjsKCQkJ dmFsdWUgPSBDQ19nZXRfbWF4X2lkbGVuKGNvbm4pOwoJCQlpZiAoMCA9PSB2YWx1ZSkKCQkJCXZh bHVlID0gTkFNRURBVEFMRU5fVjczIC0gMTsKCQkJYnJlYWs7CgoJCWNhc2UgU1FMX01BWF9DT0xV TU5TX0lOX0dST1VQX0JZOgkJLyogT0RCQyAyLjAgKi8KCQkJbGVuID0gMjsKCQkJdmFsdWUgPSAw OwoJCQlicmVhazsKCgkJY2FzZSBTUUxfTUFYX0NPTFVNTlNfSU5fSU5ERVg6CS8qIE9EQkMgMi4w ICovCgkJCWxlbiA9IDI7CgkJCXZhbHVlID0gMDsKCQkJYnJlYWs7CgoJCWNhc2UgU1FMX01BWF9D T0xVTU5TX0lOX09SREVSX0JZOgkJLyogT0RCQyAyLjAgKi8KCQkJbGVuID0gMjsKCQkJdmFsdWUg PSAwOwoJCQlicmVhazsKCgkJY2FzZSBTUUxfTUFYX0NPTFVNTlNfSU5fU0VMRUNUOiAvKiBPREJD IDIuMCAqLwoJCQlsZW4gPSAyOwoJCQl2YWx1ZSA9IDA7CgkJCWJyZWFrOwoKCQljYXNlIFNRTF9N QVhfQ09MVU1OU19JTl9UQUJMRToJLyogT0RCQyAyLjAgKi8KCQkJbGVuID0gMjsKCQkJdmFsdWUg PSAwOwoJCQlicmVhazsKCgkJY2FzZSBTUUxfTUFYX0NVUlNPUl9OQU1FX0xFTjoJLyogT0RCQyAx LjAgKi8KCQkJbGVuID0gMjsKCQkJdmFsdWUgPSBNQVhfQ1VSU09SX0xFTjsKCQkJYnJlYWs7CgoJ CWNhc2UgU1FMX01BWF9JTkRFWF9TSVpFOgkJLyogT0RCQyAyLjAgKi8KCQkJbGVuID0gNDsKCQkJ dmFsdWUgPSAwOwoJCQlicmVhazsKCgkJY2FzZSBTUUxfTUFYX09XTkVSX05BTUVfTEVOOgkvKiBP REJDIDEuMCAqLwoJCQlsZW4gPSAyOwoJCQl2YWx1ZSA9IDA7CgkJCWlmIChQR19WRVJTSU9OX0dU KGNvbm4sIDcuNCkpCgkJCQl2YWx1ZSA9IENDX2dldF9tYXhfaWRsZW4oY29ubik7CiNpZmRlZglN QVhfU0NIRU1BX0xFTgoJCQllbHNlCgkJCQl2YWx1ZSA9IE1BWF9TQ0hFTUFfTEVOOwojZW5kaWYg LyogTUFYX1NDSEVNQV9MRU4gKi8KCQkJaWYgKDAgPT0gdmFsdWUpCgkJCQl2YWx1ZSA9IE5BTUVE QVRBTEVOX1Y3MyAtIDE7CgkJCWJyZWFrOwoKCQljYXNlIFNRTF9NQVhfUFJPQ0VEVVJFX05BTUVf TEVOOgkJLyogT0RCQyAxLjAgKi8KCQkJbGVuID0gMjsKCQkJdmFsdWUgPSAwOwoJCQlicmVhazsK CgkJY2FzZSBTUUxfTUFYX1FVQUxJRklFUl9OQU1FX0xFTjoJCS8qIE9EQkMgMS4wICovCgkJCWxl biA9IDI7CgkJCXZhbHVlID0gMDsKCQkJYnJlYWs7CgoJCWNhc2UgU1FMX01BWF9ST1dfU0laRToJ LyogT0RCQyAyLjAgKi8KCQkJbGVuID0gNDsKCQkJLyogTm8gbGltaXQgd2l0aCB0dXB0b2FzdGVy IGluIDcuMSsgKi8KCQkJdmFsdWUgPSAwOwoJCQlicmVhazsKCgkJY2FzZSBTUUxfTUFYX1NUQVRF TUVOVF9MRU46CQkvKiBPREJDIDIuMCAqLwoJCQlsZW4gPSA0OwoJCQl2YWx1ZSA9IDA7CgkJCWJy ZWFrOwoKCQljYXNlIFNRTF9NQVhfVEFCTEVfTkFNRV9MRU46CS8qIE9EQkMgMS4wICovCgkJCWxl biA9IDI7CgkJCWlmIChQR19WRVJTSU9OX0dUKGNvbm4sIDcuNCkpCgkJCQl2YWx1ZSA9IENDX2dl dF9tYXhfaWRsZW4oY29ubik7CiNpZmRlZglNQVhfVEFCTEVfTEVOCgkJCWVsc2UKCQkJCXZhbHVl ID0gTUFYX1RBQkxFX0xFTjsKI2VuZGlmIC8qIE1BWF9UQUJMRV9MRU4gKi8KCQkJaWYgKDAgPT0g dmFsdWUpCgkJCQl2YWx1ZSA9IE5BTUVEQVRBTEVOX1Y3MyAtIDE7CgkJCWJyZWFrOwoKCQljYXNl IFNRTF9NQVhfVEFCTEVTX0lOX1NFTEVDVDoJLyogT0RCQyAyLjAgKi8KCQkJbGVuID0gMjsKCQkJ dmFsdWUgPSAwOwoJCQlicmVhazsKCgkJY2FzZSBTUUxfTUFYX1VTRVJfTkFNRV9MRU46CgkJCWxl biA9IDI7CgkJCXZhbHVlID0gMDsKCQkJYnJlYWs7CgoJCWNhc2UgU1FMX01VTFRfUkVTVUxUX1NF VFM6CQkvKiBPREJDIDEuMCAqLwoJCQkvKiBEb24ndCBzdXBwb3J0IG11bHRpcGxlIHJlc3VsdCBz ZXRzIGJ1dCBzYXkgeWVzIGFueXdheT8gKi8KCQkJcCA9ICJZIjsKCQkJYnJlYWs7CgoJCWNhc2Ug U1FMX01VTFRJUExFX0FDVElWRV9UWE46CS8qIE9EQkMgMS4wICovCgkJCXAgPSAiWSI7CgkJCWJy ZWFrOwoKCQljYXNlIFNRTF9ORUVEX0xPTkdfREFUQV9MRU46CS8qIE9EQkMgMi4wICovCgoJCQkv KgoJCQkgKiBEb24ndCBuZWVkIHRoZSBsZW5ndGgsIFNRTFB1dERhdGEgY2FuIGhhbmRsZSBhbnkg c2l6ZSBhbmQKCQkJICogbXVsdGlwbGUgY2FsbHMKCQkJICovCgkJCXAgPSAiTiI7CgkJCWJyZWFr OwoKCQljYXNlIFNRTF9OT05fTlVMTEFCTEVfQ09MVU1OUzoJLyogT0RCQyAxLjAgKi8KCQkJbGVu ID0gMjsKCQkJdmFsdWUgPSBTUUxfTk5DX05PTl9OVUxMOwoJCQlicmVhazsKCgkJY2FzZSBTUUxf TlVMTF9DT0xMQVRJT046CQkvKiBPREJDIDIuMCAqLwoJCQkvKiB3aGVyZSBhcmUgbnVsbHMgc29y dGVkPyAqLwoJCQlsZW4gPSAyOwoJCQl2YWx1ZSA9IFNRTF9OQ19ISUdIOwoJCQlicmVhazsKCgkJ Y2FzZSBTUUxfTlVNRVJJQ19GVU5DVElPTlM6CQkvKiBPREJDIDEuMCAqLwoJCQlsZW4gPSA0OwoJ CQl2YWx1ZSA9IFNRTF9GTl9OVU1fQUJTIHwgU1FMX0ZOX05VTV9BQ09TIHwgU1FMX0ZOX05VTV9B U0lOIHwgU1FMX0ZOX05VTV9BVEFOIHwKCQkJCVNRTF9GTl9OVU1fQVRBTjIgfCBTUUxfRk5fTlVN X0NFSUxJTkcgfCBTUUxfRk5fTlVNX0NPUyB8IFNRTF9GTl9OVU1fQ09UIHwKCQkJCVNRTF9GTl9O VU1fREVHUkVFUyB8IFNRTF9GTl9OVU1fRVhQIHwgU1FMX0ZOX05VTV9GTE9PUiB8IFNRTF9GTl9O VU1fTE9HIHwKCQkJCVNRTF9GTl9OVU1fTE9HMTAgfCBTUUxfRk5fTlVNX01PRCB8IFNRTF9GTl9O VU1fUEkgfCBTUUxfRk5fTlVNX1BPV0VSIHwKCQkJCVNRTF9GTl9OVU1fUkFESUFOUyB8IFNRTF9G Tl9OVU1fUkFORCB8IFNRTF9GTl9OVU1fUk9VTkQgfCBTUUxfRk5fTlVNX1NJR04gfAoJCQkJU1FM X0ZOX05VTV9TSU4gfCBTUUxfRk5fTlVNX1NRUlQgfCBTUUxfRk5fTlVNX1RBTiB8IFNRTF9GTl9O VU1fVFJVTkNBVEU7CgkJCWJyZWFrOwoKCQljYXNlIFNRTF9PREJDX0FQSV9DT05GT1JNQU5DRToJ LyogT0RCQyAxLjAgKi8KCQkJbGVuID0gMjsKCQkJdmFsdWUgPSBTUUxfT0FDX0xFVkVMMTsKCQkJ YnJlYWs7CgoJCWNhc2UgU1FMX09EQkNfU0FHX0NMSV9DT05GT1JNQU5DRToJCS8qIE9EQkMgMS4w ICovCgkJCWxlbiA9IDI7CgkJCXZhbHVlID0gU1FMX09TQ0NfTk9UX0NPTVBMSUFOVDsKCQkJYnJl YWs7CgoJCWNhc2UgU1FMX09EQkNfU1FMX0NPTkZPUk1BTkNFOgkvKiBPREJDIDEuMCAqLwoJCQls ZW4gPSAyOwoJCQl2YWx1ZSA9IFNRTF9PU0NfQ09SRTsKCQkJYnJlYWs7CgoJCWNhc2UgU1FMX09E QkNfU1FMX09QVF9JRUY6CQkvKiBPREJDIDEuMCAqLwoJCQlwID0gIk4iOwoJCQlicmVhazsKCgkJ Y2FzZSBTUUxfT0pfQ0FQQUJJTElUSUVTOgkJLyogT0RCQyAyLjAxICovCgkJCWxlbiA9IDQ7CgkJ CXZhbHVlID0gKFNRTF9PSl9MRUZUIHwKCQkJCQkgU1FMX09KX1JJR0hUIHwKCQkJCQkgU1FMX09K X0ZVTEwgfAoJCQkJCSBTUUxfT0pfTkVTVEVEIHwKCQkJCQkgU1FMX09KX05PVF9PUkRFUkVEIHwK CQkJCQkgU1FMX09KX0lOTkVSIHwKCQkJCQkgU1FMX09KX0FMTF9DT01QQVJJU09OX09QUyk7CgkJ CWJyZWFrOwoKCQljYXNlIFNRTF9PUkRFUl9CWV9DT0xVTU5TX0lOX1NFTEVDVDoJLyogT0RCQyAy LjAgKi8KCQkJcCA9ICJZIjsKCQkJYnJlYWs7CgoJCWNhc2UgU1FMX09VVEVSX0pPSU5TOgkvKiBP REJDIDEuMCAqLwoJCQlwID0gIlkiOwoJCQlicmVhazsKCgkJY2FzZSBTUUxfT1dORVJfVEVSTToJ LyogT0RCQyAxLjAgKi8KCQkJcCA9ICJzY2hlbWEiOwoJCQlicmVhazsKCgkJY2FzZSBTUUxfT1dO RVJfVVNBR0U6CS8qIE9EQkMgMi4wICovCgkJCWxlbiA9IDQ7CgkJCXZhbHVlID0gU1FMX09VX0RN TF9TVEFURU1FTlRTCgkJCQkJfCBTUUxfT1VfVEFCTEVfREVGSU5JVElPTgoJCQkJCXwgU1FMX09V X0lOREVYX0RFRklOSVRJT04KCQkJCQl8IFNRTF9PVV9QUklWSUxFR0VfREVGSU5JVElPTjsKCQkJ YnJlYWs7CgoJCWNhc2UgU1FMX1BPU19PUEVSQVRJT05TOgkJLyogT0RCQyAyLjAgKi8KCQkJbGVu ID0gNDsKCQkJdmFsdWUgPSAoU1FMX1BPU19QT1NJVElPTiB8IFNRTF9QT1NfUkVGUkVTSCk7CgkJ CWlmICgwICE9IGNpLT51cGRhdGFibGVfY3Vyc29ycykKCQkJCXZhbHVlIHw9IChTUUxfUE9TX1VQ REFURSB8IFNRTF9QT1NfREVMRVRFIHwgU1FMX1BPU19BREQpOwoJCQlicmVhazsKCgkJY2FzZSBT UUxfUE9TSVRJT05FRF9TVEFURU1FTlRTOiAvKiBPREJDIDIuMCAqLwoJCQlsZW4gPSA0OwoJCQl2 YWx1ZSA9IGNpLT5kcml2ZXJzLmxpZSA/IChTUUxfUFNfUE9TSVRJT05FRF9ERUxFVEUgfAoJCQkJ CQkJCQkgICBTUUxfUFNfUE9TSVRJT05FRF9VUERBVEUgfAoJCQkJCQkJCQkgICBTUUxfUFNfU0VM RUNUX0ZPUl9VUERBVEUpIDogMDsKCQkJYnJlYWs7CgoJCWNhc2UgU1FMX1BST0NFRFVSRV9URVJN OgkJLyogT0RCQyAxLjAgKi8KCQkJcCA9ICJwcm9jZWR1cmUiOwoJCQlicmVhazsKCgkJY2FzZSBT UUxfUFJPQ0VEVVJFUzoJLyogT0RCQyAxLjAgKi8KCQkJcCA9ICJZIjsKCQkJYnJlYWs7CgoJCWNh c2UgU1FMX1FVQUxJRklFUl9MT0NBVElPTjoJLyogT0RCQyAyLjAgKi8KCQkJbGVuID0gMjsKCQkJ aWYgKEN1cnJDYXQoY29ubikpCgkJCQl2YWx1ZSA9IFNRTF9RTF9TVEFSVDsKCQkJZWxzZQoJCQkJ dmFsdWUgPSAwOwoJCQlicmVhazsKCgkJY2FzZSBTUUxfUVVBTElGSUVSX05BTUVfU0VQQVJBVE9S OgkJLyogT0RCQyAxLjAgKi8KCQkJaWYgKEN1cnJDYXQoY29ubikpCgkJCQlwID0gIi4iOwoJCQll bHNlCgkJCQlwID0gTlVMTF9TVFJJTkc7CgkJCWJyZWFrOwoKCQljYXNlIFNRTF9RVUFMSUZJRVJf VEVSTToJCS8qIE9EQkMgMS4wICovCgkJCWlmIChDdXJyQ2F0KGNvbm4pKQoJCQkJcCA9ICJjYXRh bG9nIjsKCQkJZWxzZQoJCQkJcCA9IE5VTExfU1RSSU5HOwoJCQlicmVhazsKCgkJY2FzZSBTUUxf UVVBTElGSUVSX1VTQUdFOgkJLyogT0RCQyAyLjAgKi8KCQkJbGVuID0gNDsKCQkJaWYgKEN1cnJD YXQoY29ubikpCgkJCQl2YWx1ZSA9IFNRTF9DVV9ETUxfU1RBVEVNRU5UUzsKCQkJZWxzZQoJCQkJ dmFsdWUgPSAwOwoJCQlicmVhazsKCgkJY2FzZSBTUUxfUVVPVEVEX0lERU5USUZJRVJfQ0FTRToJ CS8qIE9EQkMgMi4wICovCgkJCS8qIGFyZSAicXVvdGVkIiBpZGVudGlmaWVycyBjYXNlLXNlbnNp dGl2ZT8gIFlFUyEgKi8KCQkJbGVuID0gMjsKCQkJdmFsdWUgPSBTUUxfSUNfU0VOU0lUSVZFOwoJ CQlicmVhazsKCgkJY2FzZSBTUUxfUk9XX1VQREFURVM6CS8qIE9EQkMgMS4wICovCgoJCQkvKgoJ CQkgKiBEcml2ZXIgZG9lc24ndCBzdXBwb3J0IGtleXNldC1kcml2ZW4gb3IgbWl4ZWQgY3Vyc29y cywgc28KCQkJICogbm90IG11Y2ggcG9pbnQgaW4gc2F5aW5nIHJvdyB1cGRhdGVzIGFyZSBzdXBw b3J0ZWQKCQkJICovCgkJCXAgPSAoMCAhPSBjaS0+dXBkYXRhYmxlX2N1cnNvcnMpID8gIlkiIDog Ik4iOwoJCQlicmVhazsKCgkJY2FzZSBTUUxfU0NST0xMX0NPTkNVUlJFTkNZOgkvKiBPREJDIDEu MCAqLwoJCQlsZW4gPSA0OwoJCQl2YWx1ZSA9IFNRTF9TQ0NPX1JFQURfT05MWTsKCQkJaWYgKDAg IT0gY2ktPnVwZGF0YWJsZV9jdXJzb3JzKQoJCQkJdmFsdWUgfD0gU1FMX1NDQ09fT1BUX1JPV1ZF UjsKCQkJaWYgKGNpLT5kcml2ZXJzLmxpZSkKCQkJCXZhbHVlIHw9IChTUUxfU0NDT19MT0NLIHwg U1FMX1NDQ09fT1BUX1ZBTFVFUyk7CgkJCWJyZWFrOwoKCQljYXNlIFNRTF9TQ1JPTExfT1BUSU9O UzoJCS8qIE9EQkMgMS4wICovCgkJCWxlbiA9IDQ7CgkJCXZhbHVlID0gU1FMX1NPX0ZPUldBUkRf T05MWSB8IFNRTF9TT19TVEFUSUM7CgkJCWlmICgwICE9IChjaS0+dXBkYXRhYmxlX2N1cnNvcnMg JiBBTExPV19LRVlTRVRfRFJJVkVOX0NVUlNPUlMpKQoJCQkJdmFsdWUgfD0gU1FMX1NPX0tFWVNF VF9EUklWRU47CgkJCWlmIChjaS0+ZHJpdmVycy5saWUpCgkJCQl2YWx1ZSB8PSAoU1FMX1NPX0RZ TkFNSUMgfCBTUUxfU09fTUlYRUQpOwoJCQlicmVhazsKCgkJY2FzZSBTUUxfU0VBUkNIX1BBVFRF Uk5fRVNDQVBFOiAvKiBPREJDIDEuMCAqLwoJCQlwID0gIlxcIjsKCQkJYnJlYWs7CgoJCWNhc2Ug U1FMX1NFUlZFUl9OQU1FOgkvKiBPREJDIDEuMCAqLwoJCQlwID0gQ0NfZ2V0X3NlcnZlcihjb25u KTsKCQkJYnJlYWs7CgoJCWNhc2UgU1FMX1NQRUNJQUxfQ0hBUkFDVEVSUzoJLyogT0RCQyAyLjAg Ki8KCQkJcCA9ICJfIjsKCQkJYnJlYWs7CgoJCWNhc2UgU1FMX1NUQVRJQ19TRU5TSVRJVklUWToJ LyogT0RCQyAyLjAgKi8KCQkJbGVuID0gNDsKCQkJdmFsdWUgPSAwOwoJCQlpZiAoMCAhPSBjaS0+ dXBkYXRhYmxlX2N1cnNvcnMpCgkJCQl2YWx1ZSB8PSAoU1FMX1NTX0FERElUSU9OUyB8IFNRTF9T U19ERUxFVElPTlMgfCBTUUxfU1NfVVBEQVRFUyk7CgkJCWJyZWFrOwoKCQljYXNlIFNRTF9TVFJJ TkdfRlVOQ1RJT05TOgkJLyogT0RCQyAxLjAgKi8KCQkJbGVuID0gNDsKCQkJdmFsdWUgPSBTUUxf Rk5fU1RSX0FTQ0lJIHwgU1FMX0ZOX1NUUl9DSEFSIHwgU1FMX0ZOX1NUUl9DT05DQVQgfAoJCQkJ U1FMX0ZOX1NUUl9JTlNFUlQgfCBTUUxfRk5fU1RSX0xDQVNFIHwgU1FMX0ZOX1NUUl9MRUZUIHwK CQkJCVNRTF9GTl9TVFJfTEVOR1RIIHwgU1FMX0ZOX1NUUl9MT0NBVEUgfCBTUUxfRk5fU1RSX0xP Q0FURV8yIHwKCQkJCVNRTF9GTl9TVFJfTFRSSU0gfCBTUUxfRk5fU1RSX1JFUEVBVCB8IFNRTF9G Tl9TVFJfUklHSFQgfAoJCQkJU1FMX0ZOX1NUUl9SVFJJTSB8IFNRTF9GTl9TVFJfU1BBQ0UgfCBT UUxfRk5fU1RSX1NVQlNUUklORyB8IFNRTF9GTl9TVFJfVUNBU0U7CgkJCWJyZWFrOwoKCQljYXNl IFNRTF9TVUJRVUVSSUVTOgkvKiBPREJDIDIuMCAqLwoJCQkvKiBwb3N0Z3JlcyA2LjMgc3VwcG9y dHMgc3VicXVlcmllcyAqLwoJCQlsZW4gPSA0OwoJCQl2YWx1ZSA9IChTUUxfU1FfUVVBTlRJRklF RCB8CgkJCQkJIFNRTF9TUV9JTiB8CgkJCQkJIFNRTF9TUV9FWElTVFMgfAoJCQkJCSBTUUxfU1Ff Q09NUEFSSVNPTik7CgkJCWJyZWFrOwoKCQljYXNlIFNRTF9TWVNURU1fRlVOQ1RJT05TOgkJLyog T0RCQyAxLjAgKi8KCQkJbGVuID0gNDsKCQkJdmFsdWUgPSBTUUxfRk5fU1lTX0lGTlVMTCB8IFNR TF9GTl9TWVNfVVNFUk5BTUU7CgkJCWJyZWFrOwoKCQljYXNlIFNRTF9UQUJMRV9URVJNOgkvKiBP REJDIDEuMCAqLwoJCQlwID0gInRhYmxlIjsKCQkJYnJlYWs7CgoJCWNhc2UgU1FMX1RJTUVEQVRF X0FERF9JTlRFUlZBTFM6CQkvKiBPREJDIDIuMCAqLwoJCQlsZW4gPSA0OwoJCQl2YWx1ZSA9IFNR TF9GTl9UU0lfREFZIHwgU1FMX0ZOX1RTSV9IT1VSIHwgU1FMX0ZOX1RTSV9NSU5VVEUgfCBTUUxf Rk5fVFNJX1NFQ09ORAoJCQkgICAgICB8IFNRTF9GTl9UU0lfRlJBQ19TRUNPTkQgfCBTUUxfRk5f VFNJX1lFQVIgfCBTUUxfRk5fVFNJX01PTlRIIHwgU1FMX0ZOX1RTSV9XRUVLOwoJCQlicmVhazsK CgkJY2FzZSBTUUxfVElNRURBVEVfRElGRl9JTlRFUlZBTFM6CQkvKiBPREJDIDIuMCAqLwoJCQls ZW4gPSA0OwoJCQl2YWx1ZSA9IFNRTF9GTl9UU0lfREFZIHwgU1FMX0ZOX1RTSV9IT1VSIHwgU1FM X0ZOX1RTSV9NSU5VVEUKCQkJICAgICAgfCBTUUxfRk5fVFNJX1NFQ09ORCB8IFNRTF9GTl9UU0lf U0VDT05EOwoJCQlicmVhazsKCgkJY2FzZSBTUUxfVElNRURBVEVfRlVOQ1RJT05TOgkvKiBPREJD IDEuMCAqLwoJCQlsZW4gPSA0OwoJCQl2YWx1ZSA9IFNRTF9GTl9URF9OT1cgfCBTUUxfRk5fVERf Q1VSUkVOVF9EQVRFIHwgU1FMX0ZOX1REX0NVUlJFTlRfVElNRQoJCQkgICAgICAgCXwgU1FMX0ZO X1REX0NVUlJFTlRfVElNRVNUQU1QIHwgU1FMX0ZOX1REX0NVUkRBVEUgfCBTUUxfRk5fVERfQ1VS VElNRQoJCQkgICAgICAgCXwgU1FMX0ZOX1REX0RBWU5BTUUgfCBTUUxfRk5fVERfREFZT0ZNT05U SCB8IFNRTF9GTl9URF9EQVlPRldFRUsKCQkJICAgICAgIAl8IFNRTF9GTl9URF9EQVlPRllFQVIg fCBTUUxfRk5fVERfSE9VUiB8IFNRTF9GTl9URF9NSU5VVEUKCQkJICAgICAgIAl8IFNRTF9GTl9U RF9NT05USCB8IFNRTF9GTl9URF9NT05USE5BTUUgfCBTUUxfRk5fVERfTk9XCgkJCQl8IFNRTF9G Tl9URF9RVUFSVEVSIHwgU1FMX0ZOX1REX1NFQ09ORCB8IFNRTF9GTl9URF9XRUVLIHwgU1FMX0ZO X1REX1lFQVIKCQkJCXwgU1FMX0ZOX1REX1RJTUVTVEFNUEFERCB8IFNRTF9GTl9URF9USU1FU1RB TVBESUZGIHwgU1FMX0ZOX1REX0VYVFJBQ1Q7CgkJCWJyZWFrOwoKCQljYXNlIFNRTF9UWE5fQ0FQ QUJMRToJLyogT0RCQyAxLjAgKi8KCgkJCS8qCgkJCSAqIFBvc3RncmVzIGNhbiBkZWFsIHdpdGgg Y3JlYXRlIG9yIGRyb3AgdGFibGUgc3RhdGVtZW50cyBpbiBhCgkJCSAqIHRyYW5zYWN0aW9uCgkJ CSAqLwoJCQlsZW4gPSAyOwoJCQl2YWx1ZSA9IFNRTF9UQ19BTEw7CgkJCWJyZWFrOwoKCQljYXNl IFNRTF9UWE5fSVNPTEFUSU9OX09QVElPTjoJLyogT0RCQyAxLjAgKi8KCQkJbGVuID0gNDsKCQkJ dmFsdWUgPSBTUUxfVFhOX1JFQURfVU5DT01NSVRURUQgfCBTUUxfVFhOX1JFQURfQ09NTUlUVEVE IHwKCQkJCVNRTF9UWE5fUkVQRUFUQUJMRV9SRUFEIHwgU1FMX1RYTl9TRVJJQUxJWkFCTEU7CgkJ CWJyZWFrOwoKCQljYXNlIFNRTF9VTklPTjogLyogT0RCQyAyLjAgKi8KCQkJLyogdW5pb25zIHdp dGggYWxsIHN1cHBvcnRlZCBpbiBwb3N0Z3JlcyA2LjMgKi8KCQkJbGVuID0gNDsKCQkJdmFsdWUg PSAoU1FMX1VfVU5JT04gfCBTUUxfVV9VTklPTl9BTEwpOwoJCQlicmVhazsKCgkJY2FzZSBTUUxf VVNFUl9OQU1FOgkJLyogT0RCQyAxLjAgKi8KCQkJcCA9IENDX2dldF91c2VybmFtZShjb25uKTsK CQkJYnJlYWs7CgoJCS8qIEtleXMgZm9yIE9EQkMgMy4wICovCgkJY2FzZSBTUUxfRFlOQU1JQ19D VVJTT1JfQVRUUklCVVRFUzE6CgkJCWxlbiA9IDQ7CgkJCXZhbHVlID0gMDsKCQkJYnJlYWs7CgkJ Y2FzZSBTUUxfRFlOQU1JQ19DVVJTT1JfQVRUUklCVVRFUzI6CgkJCWxlbiA9IDQ7CgkJCXZhbHVl ID0gMDsKCQkJYnJlYWs7CgkJY2FzZSBTUUxfRk9SV0FSRF9PTkxZX0NVUlNPUl9BVFRSSUJVVEVT MToKCQkJbGVuID0gNDsKCQkJdmFsdWUgPSBTUUxfQ0ExX05FWFQ7IC8qIG90aGVycyBhcmVuJ3Qg YWxsb3dlZCBpbiBPREJDIHNwZWMgKi8KCQkJYnJlYWs7CgkJY2FzZSBTUUxfRk9SV0FSRF9PTkxZ X0NVUlNPUl9BVFRSSUJVVEVTMjoKCQkJbGVuID0gNDsKCQkJdmFsdWUgPSBTUUxfQ0EyX1JFQURf T05MWV9DT05DVVJSRU5DWTsKCQkJaWYgKCFjaS0+ZHJpdmVycy51c2VfZGVjbGFyZWZldGNoIHx8 IGNpLT5kcml2ZXJzLmxpZSkKCQkJCXZhbHVlIHw9IFNRTF9DQTJfQ1JDX0VYQUNUOwoJCQlicmVh azsKCQljYXNlIFNRTF9LRVlTRVRfQ1VSU09SX0FUVFJJQlVURVMxOgoJCQlsZW4gPSA0OwoJCQl2 YWx1ZSA9IFNRTF9DQTFfTkVYVCB8IFNRTF9DQTFfQUJTT0xVVEUKCQkJCXwgU1FMX0NBMV9SRUxB VElWRSB8IFNRTF9DQTFfQk9PS01BUksKCQkJCXwgU1FMX0NBMV9MT0NLX05PX0NIQU5HRSB8IFNR TF9DQTFfUE9TX1BPU0lUSU9OCgkJCQl8IFNRTF9DQTFfUE9TX1JFRlJFU0g7CgkJCWlmICgwICE9 IChjaS0+dXBkYXRhYmxlX2N1cnNvcnMgJiBBTExPV19LRVlTRVRfRFJJVkVOX0NVUlNPUlMpKQoJ CQkJdmFsdWUgfD0gKFNRTF9DQTFfUE9TX1VQREFURSB8IFNRTF9DQTFfUE9TX0RFTEVURQoJCQkJ fCBTUUxfQ0ExX0JVTEtfQURECgkJCQl8IFNRTF9DQTFfQlVMS19VUERBVEVfQllfQk9PS01BUksK CQkJCXwgU1FMX0NBMV9CVUxLX0RFTEVURV9CWV9CT09LTUFSSwoJCQkJfCBTUUxfQ0ExX0JVTEtf RkVUQ0hfQllfQk9PS01BUksKCQkJCSk7CgkJCWlmIChjaS0+ZHJpdmVycy5saWUpCgkJCQl2YWx1 ZSB8PSAoU1FMX0NBMV9MT0NLX0VYQ0xVU0lWRQoJCQkJfCBTUUxfQ0ExX0xPQ0tfVU5MT0NLCgkJ CQl8IFNRTF9DQTFfUE9TSVRJT05FRF9VUERBVEUKCQkJCXwgU1FMX0NBMV9QT1NJVElPTkVEX0RF TEVURQoJCQkJfCBTUUxfQ0ExX1NFTEVDVF9GT1JfVVBEQVRFCgkJCQkpOwoJCQlicmVhazsKCQlj YXNlIFNRTF9LRVlTRVRfQ1VSU09SX0FUVFJJQlVURVMyOgoJCQlsZW4gPSA0OwoJCQl2YWx1ZSA9 IFNRTF9DQTJfUkVBRF9PTkxZX0NPTkNVUlJFTkNZOwoJCQlpZiAoMCAhPSAoY2ktPnVwZGF0YWJs ZV9jdXJzb3JzICYgQUxMT1dfS0VZU0VUX0RSSVZFTl9DVVJTT1JTKSkKCQkJCXZhbHVlIHw9IChT UUxfQ0EyX09QVF9ST1dWRVJfQ09OQ1VSUkVOQ1kKCQkJCS8qfCBTUUxfQ0EyX0NSQ19BUFBST1hJ TUFURSovCgkJCQkpOwoJCQlpZiAoMCAhPSAoY2ktPnVwZGF0YWJsZV9jdXJzb3JzICYgU0VOU0Vf U0VMRl9PUEVSQVRJT05TKSkKCQkJCXZhbHVlIHw9IChTUUxfQ0EyX1NFTlNJVElWSVRZX0RFTEVU SU9OUwoJCQkJfCBTUUxfQ0EyX1NFTlNJVElWSVRZX1VQREFURVMKCQkJCXwgU1FMX0NBMl9TRU5T SVRJVklUWV9BRERJVElPTlMKCQkJCSk7CgkJCWlmICghY2ktPmRyaXZlcnMudXNlX2RlY2xhcmVm ZXRjaCB8fCBjaS0+ZHJpdmVycy5saWUpCgkJCQl2YWx1ZSB8PSBTUUxfQ0EyX0NSQ19FWEFDVDsK CQkJaWYgKGNpLT5kcml2ZXJzLmxpZSkKCQkJCXZhbHVlIHw9IChTUUxfQ0EyX0xPQ0tfQ09OQ1VS UkVOQ1kKCQkJCXwgU1FMX0NBMl9PUFRfVkFMVUVTX0NPTkNVUlJFTkNZCgkJCQl8IFNRTF9DQTJf TUFYX1JPV1NfU0VMRUNUCgkJCQl8IFNRTF9DQTJfTUFYX1JPV1NfSU5TRVJUCgkJCQl8IFNRTF9D QTJfTUFYX1JPV1NfREVMRVRFCgkJCQl8IFNRTF9DQTJfTUFYX1JPV1NfVVBEQVRFCgkJCQl8IFNR TF9DQTJfTUFYX1JPV1NfQ0FUQUxPRwoJCQkJfCBTUUxfQ0EyX01BWF9ST1dTX0FGRkVDVFNfQUxM CgkJCQl8IFNRTF9DQTJfU0lNVUxBVEVfTk9OX1VOSVFVRQoJCQkJfCBTUUxfQ0EyX1NJTVVMQVRF X1RSWV9VTklRVUUKCQkJCXwgU1FMX0NBMl9TSU1VTEFURV9VTklRVUUKCQkJCSk7CgkJCWJyZWFr OwoKCQljYXNlIFNRTF9TVEFUSUNfQ1VSU09SX0FUVFJJQlVURVMxOgoJCQlsZW4gPSA0OwoJCQl2 YWx1ZSA9IFNRTF9DQTFfTkVYVCB8IFNRTF9DQTFfQUJTT0xVVEUKCQkJCXwgU1FMX0NBMV9SRUxB VElWRSB8IFNRTF9DQTFfQk9PS01BUksKCQkJCXwgU1FMX0NBMV9MT0NLX05PX0NIQU5HRSB8IFNR TF9DQTFfUE9TX1BPU0lUSU9OCgkJCQl8IFNRTF9DQTFfUE9TX1JFRlJFU0g7CgkJCWlmICgwICE9 IChjaS0+dXBkYXRhYmxlX2N1cnNvcnMgJiBBTExPV19TVEFUSUNfQ1VSU09SUykpCgkJCQl2YWx1 ZSB8PSAoU1FMX0NBMV9QT1NfVVBEQVRFIHwgU1FMX0NBMV9QT1NfREVMRVRFCgkJCQkpOwoJCQlp ZiAoMCAhPSAoY2ktPnVwZGF0YWJsZV9jdXJzb3JzICYgQUxMT1dfQlVMS19PUEVSQVRJT05TKSkK CQkJCXZhbHVlIHw9IChTUUxfQ0ExX0JVTEtfQURECgkJCQl8IFNRTF9DQTFfQlVMS19VUERBVEVf QllfQk9PS01BUksKCQkJCXwgU1FMX0NBMV9CVUxLX0RFTEVURV9CWV9CT09LTUFSSwoJCQkJfCBT UUxfQ0ExX0JVTEtfRkVUQ0hfQllfQk9PS01BUksKCQkJCSk7CgkJCWJyZWFrOwoJCWNhc2UgU1FM X1NUQVRJQ19DVVJTT1JfQVRUUklCVVRFUzI6CgkJCWxlbiA9IDQ7CgkJCXZhbHVlID0gU1FMX0NB Ml9SRUFEX09OTFlfQ09OQ1VSUkVOQ1k7CgkJCWlmICgwICE9IChjaS0+dXBkYXRhYmxlX2N1cnNv cnMgJiBBTExPV19TVEFUSUNfQ1VSU09SUykpCgkJCQl2YWx1ZSB8PSAoU1FMX0NBMl9PUFRfUk9X VkVSX0NPTkNVUlJFTkNZCgkJCQkpOwoJCQlpZiAoMCAhPSAoY2ktPnVwZGF0YWJsZV9jdXJzb3Jz ICYgU0VOU0VfU0VMRl9PUEVSQVRJT05TKSkKCQkJCXZhbHVlIHw9IChTUUxfQ0EyX1NFTlNJVElW SVRZX0RFTEVUSU9OUwoJCQkJfCBTUUxfQ0EyX1NFTlNJVElWSVRZX1VQREFURVMKCQkJCXwgU1FM X0NBMl9TRU5TSVRJVklUWV9BRERJVElPTlMKCQkJCSk7CgkJCWlmICghY2ktPmRyaXZlcnMudXNl X2RlY2xhcmVmZXRjaCB8fCBjaS0+ZHJpdmVycy5saWUpCgkJCQl2YWx1ZSB8PSAoU1FMX0NBMl9D UkNfRVhBQ1QKCQkJCSk7CgkJCWJyZWFrOwoKCQljYXNlIFNRTF9PREJDX0lOVEVSRkFDRV9DT05G T1JNQU5DRToKCQkJbGVuID0gNDsKCQkJdmFsdWUgPSBTUUxfT0lDX0NPUkU7CgkJCWlmIChjaS0+ ZHJpdmVycy5saWUpCgkJCQl2YWx1ZSA9IFNRTF9PSUNfTEVWRUwyOwoJCQlicmVhazsKCQljYXNl IFNRTF9BQ1RJVkVfRU5WSVJPTk1FTlRTOgoJCQlsZW4gPSAyOwoJCQl2YWx1ZSA9IDA7CgkJCWJy ZWFrOwoJCWNhc2UgU1FMX0FHR1JFR0FURV9GVU5DVElPTlM6CgkJCWxlbiA9IDQ7CgkJCXZhbHVl ID0gU1FMX0FGX0FMTDsKCQkJYnJlYWs7CgkJY2FzZSBTUUxfQUxURVJfRE9NQUlOOgoJCQlsZW4g PSA0OwoJCQl2YWx1ZSA9IDA7CgkJCWJyZWFrOwoJCWNhc2UgU1FMX0FTWU5DX01PREU6CgkJCWxl biA9IDQ7CgkJCXZhbHVlID0gU1FMX0FNX05PTkU7CgkJCWJyZWFrOwoJCWNhc2UgU1FMX0JBVENI X1JPV19DT1VOVDoKCQkJbGVuID0gNDsKCQkJdmFsdWUgPSBTUUxfQlJDX0VYUExJQ0lUOwoJCQli cmVhazsKCQljYXNlIFNRTF9CQVRDSF9TVVBQT1JUOgoJCQlsZW4gPSA0OwoJCQl2YWx1ZSA9IFNR TF9CU19TRUxFQ1RfRVhQTElDSVQgfCBTUUxfQlNfUk9XX0NPVU5UX0VYUExJQ0lUOwoJCQlicmVh azsKCQljYXNlIFNRTF9DQVRBTE9HX05BTUU6CgkJCWlmIChDdXJyQ2F0KGNvbm4pKQoJCQkJcCA9 ICJZIjsKCQkJZWxzZQoJCQkJcCA9ICJOIjsKCQkJYnJlYWs7CgkJY2FzZSBTUUxfQ09MTEFUSU9O X1NFUToKCQkJcCA9ICIiOwoJCQlicmVhazsKCQljYXNlIFNRTF9DUkVBVEVfQVNTRVJUSU9OOgoJ CQlsZW4gPSA0OwoJCQl2YWx1ZSA9IDA7CgkJCWJyZWFrOwoJCWNhc2UgU1FMX0NSRUFURV9DSEFS QUNURVJfU0VUOgoJCQlsZW4gPSA0OwoJCQl2YWx1ZSA9IDA7CgkJCWJyZWFrOwoJCWNhc2UgU1FM X0NSRUFURV9DT0xMQVRJT046CgkJCWxlbiA9IDQ7CgkJCXZhbHVlID0gMDsKCQkJYnJlYWs7CgkJ Y2FzZSBTUUxfQ1JFQVRFX0RPTUFJTjoKCQkJbGVuID0gNDsKCQkJdmFsdWUgPSAwOwoJCQlicmVh azsKCQljYXNlIFNRTF9DUkVBVEVfU0NIRU1BOgoJCQlsZW4gPSA0OwoJCQl2YWx1ZSA9IFNRTF9D U19DUkVBVEVfU0NIRU1BIHwgU1FMX0NTX0FVVEhPUklaQVRJT047CgkJCWJyZWFrOwoJCWNhc2Ug U1FMX0NSRUFURV9UQUJMRToKCQkJbGVuID0gNDsKCQkJdmFsdWUgPSBTUUxfQ1RfQ1JFQVRFX1RB QkxFCgkJCQl8IFNRTF9DVF9DT0xVTU5fQ09OU1RSQUlOVAoJCQkJfCBTUUxfQ1RfQ09MVU1OX0RF RkFVTFQKCQkJCXwgU1FMX0NUX0dMT0JBTF9URU1QT1JBUlkKCQkJCXwgU1FMX0NUX1RBQkxFX0NP TlNUUkFJTlQKCQkJCXwgU1FMX0NUX0NPTlNUUkFJTlRfTkFNRV9ERUZJTklUSU9OCgkJCQl8IFNR TF9DVF9DT05TVFJBSU5UX0lOSVRJQUxMWV9ERUZFUlJFRAoJCQkJfCBTUUxfQ1RfQ09OU1RSQUlO VF9JTklUSUFMTFlfSU1NRURJQVRFCgkJCQl8IFNRTF9DVF9DT05TVFJBSU5UX0RFRkVSUkFCTEU7 CgkJCWJyZWFrOwoJCWNhc2UgU1FMX0NSRUFURV9UUkFOU0xBVElPTjoKCQkJbGVuID0gNDsKCQkJ dmFsdWUgPSAwOwoJCQlicmVhazsKCQljYXNlIFNRTF9DUkVBVEVfVklFVzoKCQkJbGVuID0gNDsK CQkJdmFsdWUgPSBTUUxfQ1ZfQ1JFQVRFX1ZJRVc7CgkJCWJyZWFrOwoJCWNhc2UgU1FMX0RETF9J TkRFWDoKCQkJbGVuID0gNDsKCQkJdmFsdWUgPSBTUUxfRElfQ1JFQVRFX0lOREVYIHwgU1FMX0RJ X0RST1BfSU5ERVg7CgkJCWJyZWFrOwoJCWNhc2UgU1FMX0RFU0NSSUJFX1BBUkFNRVRFUjoKCQkJ cCA9ICJOIjsKCQkJYnJlYWs7CgkJY2FzZSBTUUxfRFJPUF9BU1NFUlRJT046CgkJCWxlbiA9IDQ7 CgkJCXZhbHVlID0gMDsKCQkJYnJlYWs7CgkJY2FzZSBTUUxfRFJPUF9DSEFSQUNURVJfU0VUOgoJ CQlsZW4gPSA0OwoJCQl2YWx1ZSA9IDA7CgkJCWJyZWFrOwoJCWNhc2UgU1FMX0RST1BfQ09MTEFU SU9OOgoJCQlsZW4gPSA0OwoJCQl2YWx1ZSA9IDA7CgkJCWJyZWFrOwoJCWNhc2UgU1FMX0RST1Bf RE9NQUlOOgoJCQlsZW4gPSA0OwoJCQl2YWx1ZSA9IDA7CgkJCWJyZWFrOwoJCWNhc2UgU1FMX0RS T1BfU0NIRU1BOgoJCQlsZW4gPSA0OwoJCQl2YWx1ZSA9IFNRTF9EU19EUk9QX1NDSEVNQSB8IFNR TF9EU19SRVNUUklDVCB8IFNRTF9EU19DQVNDQURFOwoJCQlicmVhazsKCQljYXNlIFNRTF9EUk9Q X1RBQkxFOgoJCQlsZW4gPSA0OwoJCQl2YWx1ZSA9IFNRTF9EVF9EUk9QX1RBQkxFOwoJCQl2YWx1 ZSB8PSAoU1FMX0RUX1JFU1RSSUNUIHwgU1FMX0RUX0NBU0NBREUpOwoJCQlicmVhazsKCQljYXNl IFNRTF9EUk9QX1RSQU5TTEFUSU9OOgoJCQlsZW4gPSA0OwoJCQl2YWx1ZSA9IDA7CgkJCWJyZWFr OwoJCWNhc2UgU1FMX0RST1BfVklFVzoKCQkJbGVuID0gNDsKCQkJdmFsdWUgPSBTUUxfRFZfRFJP UF9WSUVXOwoJCQl2YWx1ZSB8PSAoU1FMX0RWX1JFU1RSSUNUIHwgU1FMX0RWX0NBU0NBREUpOwoJ CQlicmVhazsKCQljYXNlIFNRTF9JTkRFWF9LRVlXT1JEUzoKCQkJbGVuID0gNDsKCQkJdmFsdWUg PSBTUUxfSUtfTk9ORTsKCQkJYnJlYWs7CgkJY2FzZSBTUUxfSU5GT19TQ0hFTUFfVklFV1M6CgkJ CWxlbiA9IDQ7CgkJCXZhbHVlID0gMDsKCQkJYnJlYWs7CgkJY2FzZSBTUUxfSU5TRVJUX1NUQVRF TUVOVDoKCQkJbGVuID0gNDsKCQkJdmFsdWUgPSBTUUxfSVNfSU5TRVJUX0xJVEVSQUxTIHwgU1FM X0lTX0lOU0VSVF9TRUFSQ0hFRCB8IFNRTF9JU19TRUxFQ1RfSU5UTzsKCQkJYnJlYWs7CgkJY2Fz ZSBTUUxfTUFYX0lERU5USUZJRVJfTEVOOgoJCQlsZW4gPSAyOwoJCQl2YWx1ZSA9IENDX2dldF9t YXhfaWRsZW4oY29ubik7CgkJCWlmICgwID09IHZhbHVlKQoJCQkJdmFsdWUgPSBOQU1FREFUQUxF Tl9WNzMgLSAxOwoJCQlicmVhazsKCQljYXNlIFNRTF9NQVhfUk9XX1NJWkVfSU5DTFVERVNfTE9O RzoKCQkJcCA9ICJZIjsKCQkJYnJlYWs7CgkJY2FzZSBTUUxfUEFSQU1fQVJSQVlfUk9XX0NPVU5U UzoKCQkJbGVuID0gNDsKCQkJdmFsdWUgPSBTUUxfUEFSQ19CQVRDSDsKCQkJYnJlYWs7CgkJY2Fz ZSBTUUxfUEFSQU1fQVJSQVlfU0VMRUNUUzoKCQkJbGVuID0gNDsKCQkJdmFsdWUgPSBTUUxfUEFT X0JBVENIOwoJCQlicmVhazsKCQljYXNlIFNRTF9TUUxfQ09ORk9STUFOQ0U6CgkJCWxlbiA9IDQ7 CgkJCXZhbHVlID0gU1FMX1NDX1NRTDkyX0VOVFJZOwoJCQlicmVhazsKCQljYXNlIFNRTF9TUUw5 Ml9EQVRFVElNRV9GVU5DVElPTlM6CgkJCWxlbiA9IDQ7CgkJCXZhbHVlID0gU1FMX1NERl9DVVJS RU5UX0RBVEUgfCBTUUxfU0RGX0NVUlJFTlRfVElNRSB8IFNRTF9TREZfQ1VSUkVOVF9USU1FU1RB TVA7CgkJCWJyZWFrOwoJCWNhc2UgU1FMX1NRTDkyX0ZPUkVJR05fS0VZX0RFTEVURV9SVUxFOgoJ CQlsZW4gPSA0OwoJCQl2YWx1ZSA9IFNRTF9TRktEX0NBU0NBREUgfCBTUUxfU0ZLRF9OT19BQ1RJ T04gfCBTUUxfU0ZLRF9TRVRfREVGQVVMVCB8IFNRTF9TRktEX1NFVF9OVUxMOwoJCQlicmVhazsK CQljYXNlIFNRTF9TUUw5Ml9GT1JFSUdOX0tFWV9VUERBVEVfUlVMRToKCQkJbGVuID0gNDsKCQkJ dmFsdWUgPSBTUUxfU0ZLVV9DQVNDQURFIHwgU1FMX1NGS1VfTk9fQUNUSU9OIHwgU1FMX1NGS1Vf U0VUX0RFRkFVTFQgfCBTUUxfU0ZLVV9TRVRfTlVMTDsKCQkJYnJlYWs7CgkJY2FzZSBTUUxfU1FM OTJfR1JBTlQ6CgkJCWxlbiA9IDQ7CgkJCXZhbHVlID0gU1FMX1NHX0RFTEVURV9UQUJMRSB8IFNR TF9TR19JTlNFUlRfVEFCTEUgfCBTUUxfU0dfUkVGRVJFTkNFU19UQUJMRSB8IFNRTF9TR19TRUxF Q1RfVEFCTEUgfCBTUUxfU0dfVVBEQVRFX1RBQkxFOwoJCQlicmVhazsKCQljYXNlIFNRTF9TUUw5 Ml9OVU1FUklDX1ZBTFVFX0ZVTkNUSU9OUzoKCQkJbGVuID0gNDsKCQkJdmFsdWUgPSBTUUxfU05W Rl9CSVRfTEVOR1RIIHwgU1FMX1NOVkZfQ0hBUl9MRU5HVEgKCQkJCXwgU1FMX1NOVkZfQ0hBUkFD VEVSX0xFTkdUSCB8IFNRTF9TTlZGX0VYVFJBQ1QKCQkJCXwgU1FMX1NOVkZfT0NURVRfTEVOR1RI IHwgU1FMX1NOVkZfUE9TSVRJT047CgkJCWJyZWFrOwoJCWNhc2UgU1FMX1NRTDkyX1BSRURJQ0FU RVM6CgkJCWxlbiA9IDQ7CgkJCXZhbHVlID0gU1FMX1NQX0JFVFdFRU4gfCBTUUxfU1BfQ09NUEFS SVNPTgoJCQkJfCBTUUxfU1BfRVhJU1RTIHwgU1FMX1NQX0lOCgkJCQl8IFNRTF9TUF9JU05PVE5V TEwgfCBTUUxfU1BfSVNOVUxMCgkJCQl8IFNRTF9TUF9MSUtFIHwgU1FMX1NQX09WRVJMQVBTCgkJ CQl8IFNRTF9TUF9RVUFOVElGSUVEX0NPTVBBUklTT047CgkJCWJyZWFrOwoJCWNhc2UgU1FMX1NR TDkyX1JFTEFUSU9OQUxfSk9JTl9PUEVSQVRPUlM6CgkJCWxlbiA9IDQ7CgkJCXZhbHVlID0gU1FM X1NSSk9fQ1JPU1NfSk9JTiB8IFNRTF9TUkpPX0VYQ0VQVF9KT0lOCgkJCQl8IFNRTF9TUkpPX0ZV TExfT1VURVJfSk9JTiB8IFNRTF9TUkpPX0lOTkVSX0pPSU4KCQkJCXwgU1FMX1NSSk9fSU5URVJT RUNUX0pPSU4gfCBTUUxfU1JKT19MRUZUX09VVEVSX0pPSU4KCQkJCXwgU1FMX1NSSk9fTkFUVVJB TF9KT0lOIHwgU1FMX1NSSk9fUklHSFRfT1VURVJfSk9JTgoJCQkJfCBTUUxfU1JKT19VTklPTl9K T0lOOwoJCQlicmVhazsKCQljYXNlIFNRTF9TUUw5Ml9SRVZPS0U6CgkJCWxlbiA9IDQ7CgkJCXZh bHVlID0gU1FMX1NSX0RFTEVURV9UQUJMRSB8IFNRTF9TUl9JTlNFUlRfVEFCTEUgfCBTUUxfU1Jf UkVGRVJFTkNFU19UQUJMRSB8IFNRTF9TUl9TRUxFQ1RfVEFCTEUgfCBTUUxfU1JfVVBEQVRFX1RB QkxFOwoJCQlicmVhazsKCQljYXNlIFNRTF9TUUw5Ml9ST1dfVkFMVUVfQ09OU1RSVUNUT1I6CgkJ CWxlbiA9IDQ7CgkJCXZhbHVlID0gU1FMX1NSVkNfVkFMVUVfRVhQUkVTU0lPTiB8IFNRTF9TUlZD X05VTEw7CgkJCWJyZWFrOwoJCWNhc2UgU1FMX1NRTDkyX1NUUklOR19GVU5DVElPTlM6CgkJCWxl biA9IDQ7CgkJCXZhbHVlID0gU1FMX1NTRl9DT05WRVJUIHwgU1FMX1NTRl9MT1dFUgoJCQkJfCBT UUxfU1NGX1VQUEVSIHwgU1FMX1NTRl9TVUJTVFJJTkcKCQkJCXwgU1FMX1NTRl9UUkFOU0xBVEUg fCBTUUxfU1NGX1RSSU1fQk9USAoJCQkJfCBTUUxfU1NGX1RSSU1fTEVBRElORyB8IFNRTF9TU0Zf VFJJTV9UUkFJTElORzsKCQkJYnJlYWs7CgkJY2FzZSBTUUxfU1FMOTJfVkFMVUVfRVhQUkVTU0lP TlM6CgkJCWxlbiA9IDQ7CgkJCXZhbHVlID0gU1FMX1NWRV9DQVNFIHwgU1FMX1NWRV9DQVNUIHwg U1FMX1NWRV9DT0FMRVNDRSB8IFNRTF9TVkVfTlVMTElGOwoJCQlicmVhazsKI2lmZGVmIFNRTF9E VENfVFJBTlNBQ1RJT05fQ09TVAoJCWNhc2UgU1FMX0RUQ19UUkFOU0FDVElPTl9DT1NUOgojZWxz ZQoJCWNhc2UgMTc1MDoKI2VuZGlmCgkJCWxlbiA9IDQ7CgkJCWJyZWFrOwoJCS8qIFRoZSBmb2xs b3dpbmdzIGFyZW4ndCBpbXBsZW1lbnRlZCB5ZXQgKi8KCQljYXNlIFNRTF9EQVRFVElNRV9MSVRF UkFMUzoKCQkJbGVuID0gNDsKCQljYXNlIFNRTF9ETV9WRVI6CgkJCWxlbiA9IDA7CgkJY2FzZSBT UUxfRFJJVkVSX0hERVNDOgoJCQlsZW4gPSA0OwoJCWNhc2UgU1FMX01BWF9BU1lOQ19DT05DVVJS RU5UX1NUQVRFTUVOVFM6CgkJCWxlbiA9IDQ7CgkJY2FzZSBTUUxfU1RBTkRBUkRfQ0xJX0NPTkZP Uk1BTkNFOgoJCQlsZW4gPSA0OwoJCWNhc2UgU1FMX1hPUEVOX0NMSV9ZRUFSOgoJCQlsZW4gPSAw OwoKCQlkZWZhdWx0OgoJCQkvKiB1bnJlY29nbml6ZWQga2V5ICovCgkJCUNDX3NldF9lcnJvcihj b25uLCBDT05OX05PVF9JTVBMRU1FTlRFRF9FUlJPUiwgIlVucmVjb2duaXplZCBrZXkgcGFzc2Vk IHRvIFBHQVBJX0dldEluZm8uIiwgTlVMTCk7CgkJCWdvdG8gY2xlYW51cDsKCX0KCglyZXQgPSBT UUxfU1VDQ0VTUzsKCglNWUxPRygwLCAicD0nJXMnLCBsZW49IiBGT1JNQVRfVUxFTiAiLCB2YWx1 ZT0iIEZPUk1BVF9VTEVOICIsIGNiTWF4PSVkXG4iLCBwID8gcCA6ICI8TlVMTD4iLCBsZW4sIHZh bHVlLCBjYkluZm9WYWx1ZU1heCk7CgoJLyoKCSAqIE5PVEUsIHRoYXQgaWYgcmdiSW5mb1ZhbHVl IGlzIE5VTEwsIHRoZW4gbm8gd2FybmluZ3Mgb3IgZXJyb3JzCgkgKiBzaG91bGQgcmVzdWx0IGFu ZCBqdXN0IHBjYkluZm9WYWx1ZSBpcyByZXR1cm5lZCwgd2hpY2ggaW5kaWNhdGVzCgkgKiB3aGF0 IGxlbmd0aCB3b3VsZCBiZSByZXF1aXJlZCBpZiBhIHJlYWwgYnVmZmVyIGhhZCBiZWVuIHBhc3Nl ZCBpbi4KCSAqLwoJaWYgKHApCgl7CgkJLyogY2hhci9iaW5hcnkgZGF0YSAqLwoJCWxlbiA9IHN0 cmxlbihwKTsKCgkJaWYgKHJnYkluZm9WYWx1ZSkKCQl7CiNpZmRlZglVTklDT0RFX1NVUFBPUlQK CQkJaWYgKENDX2lzX2luX3VuaWNvZGVfZHJpdmVyKGNvbm4pKQoJCQl7CgkJCQlsZW4gPSB1dGY4 X3RvX3VjczIocCwgbGVuLCAoU1FMV0NIQVIgKikgcmdiSW5mb1ZhbHVlLCBjYkluZm9WYWx1ZU1h eCAvIFdDTEVOKTsKCQkJCWxlbiAqPSBXQ0xFTjsKCQkJfQoJCQllbHNlCiNlbmRpZiAvKiBVTklD T0RFX1NVUFBPUlQgKi8KCQkJc3RybmNweV9udWxsKChjaGFyICopIHJnYkluZm9WYWx1ZSwgcCwg KHNpemVfdCkgY2JJbmZvVmFsdWVNYXgpOwoKCQkJaWYgKGxlbiA+PSBjYkluZm9WYWx1ZU1heCkK CQkJewoJCQkJcmV0ID0gU1FMX1NVQ0NFU1NfV0lUSF9JTkZPOwoJCQkJQ0Nfc2V0X2Vycm9yKGNv bm4sIENPTk5fVFJVTkNBVEVELCAiVGhlIGJ1ZmZlciB3YXMgdG9vIHNtYWxsIGZvciB0aGUgSW5m b1ZhbHVlLiIsIGZ1bmMpOwoJCQl9CgkJfQojaWZkZWYJVU5JQ09ERV9TVVBQT1JUCgkJZWxzZSBp ZiAoQ0NfaXNfaW5fdW5pY29kZV9kcml2ZXIoY29ubikpCgkJCWxlbiAqPSBXQ0xFTjsKI2VuZGlm IC8qIFVOSUNPREVfU1VQUE9SVCAqLwoJfQoJZWxzZQoJewoJCS8qIG51bWVyaWMgZGF0YSAqLwoJ CWlmIChyZ2JJbmZvVmFsdWUpCgkJewoJCQlpZiAobGVuID09IHNpemVvZihTUUxTTUFMTElOVCkp CgkJCQkqKChTUUxVU01BTExJTlQgKikgcmdiSW5mb1ZhbHVlKSA9IChTUUxVU01BTExJTlQpIHZh bHVlOwoJCQllbHNlIGlmIChsZW4gPT0gc2l6ZW9mKFNRTElOVEVHRVIpKQoJCQkJKigoU1FMVUlO VEVHRVIgKikgcmdiSW5mb1ZhbHVlKSA9IChTUUxVSU5URUdFUikgdmFsdWU7CgkJfQoJfQoKCWlm IChwY2JJbmZvVmFsdWUpCgkJKnBjYkluZm9WYWx1ZSA9IChTUUxTTUFMTElOVCkgbGVuOwpjbGVh bnVwOgoKCXJldHVybiByZXQ7Cn0KCi8qCiAqCW1hY3JvcyBmb3IgcGd0eXBlX3h4eHgoKSBjYWxs cyB3aGljaCBoYXZlIFBHX0FUUF9VTlNFVCBwYXJhbWV0ZXJzCiAqLwojZGVmaW5lIFBHVFlQRV9D T0xVTU5fU0laRShjb25uLCBwZ1R5cGUpIHBndHlwZV9hdHRyX2NvbHVtbl9zaXplKGNvbm4sIHBn VHlwZSwgUEdfQVRQX1VOU0VULCBQR19BRFRfVU5TRVQsIFBHX1VOS05PV05TX1VOU0VUKQojZGVm aW5lIFBHVFlQRV9UT19DT05DSVNFX1RZUEUoY29ubiwgcGdUeXBlKSBwZ3R5cGVfYXR0cl90b19j b25jaXNlX3R5cGUoY29ubiwgcGdUeXBlLCBQR19BVFBfVU5TRVQsIFBHX0FEVF9VTlNFVCwgUEdf VU5LTk9XTlNfVU5TRVQpCiNkZWZpbmUgUEdUWVBFX1RPX1NRTERFU0NUWVBFKGNvbm4sIHBnVHlw ZSkgcGd0eXBlX2F0dHJfdG9fc3FsZGVzY3R5cGUoY29ubiwgcGdUeXBlLCBQR19BVFBfVU5TRVQs IFBHX0FEVF9VTlNFVCwgUEdfVU5LTk9XTlNfVU5TRVQpCiNkZWZpbmUgUEdUWVBFX0JVRkZFUl9M RU5HVEgoY29ubiwgcGdUeXBlKSBwZ3R5cGVfYXR0cl9idWZmZXJfbGVuZ3RoKGNvbm4sIHBnVHlw ZSwgUEdfQVRQX1VOU0VULCBQR19BRFRfVU5TRVQsIFBHX1VOS05PV05TX1VOU0VUKQojZGVmaW5l IFBHVFlQRV9ERUNJTUFMX0RJR0lUUyhjb25uLCBwZ1R5cGUpIHBndHlwZV9hdHRyX2RlY2ltYWxf ZGlnaXRzKGNvbm4sIHBnVHlwZSwgUEdfQVRQX1VOU0VULCBQR19BRFRfVU5TRVQsIFBHX1VOS05P V05TX1VOU0VUKQojZGVmaW5lIFBHVFlQRV9UUkFOU0ZFUl9PQ1RFVF9MRU5HVEgoY29ubiwgcGdU eXBlKSBwZ3R5cGVfYXR0cl90cmFuc2Zlcl9vY3RldF9sZW5ndGgoY29ubiwgcGdUeXBlLCBQR19B VFBfVU5TRVQsIFBHX1VOS05PV05TX1VOU0VUKQojZGVmaW5lIFBHVFlQRV9UT19OQU1FKGNvbm4s IHBnVHlwZSwgYXV0b19pbmNyZW1lbnQpIHBndHlwZV9hdHRyX3RvX25hbWUoY29ubiwgcGdUeXBl LCBQR19BVFBfVU5TRVQsIGF1dG9faW5jcmVtZW50KQojZGVmaW5lIFBHVFlQRV9UT19EQVRFVElN RV9TVUIoY29ubiwgcGd0eXBlKSBwZ3R5cGVfYXR0cl90b19kYXRldGltZV9zdWIoY29ubiwgcGd0 eXBlLCBQR19BVFBfVU5TRVQpCgoKUkVUQ09ERQkJU1FMX0FQSQpQR0FQSV9HZXRUeXBlSW5mbyhI U1RNVCBoc3RtdCwKCQkJCSAgU1FMU01BTExJTlQgZlNxbFR5cGUpCnsKCUNTVFIgZnVuYyA9ICJQ R0FQSV9HZXRUeXBlSW5mbyI7CglTdGF0ZW1lbnRDbGFzcyAqc3RtdCA9IChTdGF0ZW1lbnRDbGFz cyAqKSBoc3RtdDsKCUNvbm5lY3Rpb25DbGFzcwkqY29ubjsKCVFSZXN1bHRDbGFzcwkqcmVzID0g TlVMTDsKCVR1cGxlRmllbGQJKnR1cGxlOwoJaW50CQkJaSwgcmVzdWx0X2NvbHM7CgoJLyogSW50 NCB0eXBlOyAqLwoJSW50NAkJcGdUeXBlOwoJSW50MgkJc3FsVHlwZTsKCVJFVENPREUJCXJldCA9 IFNRTF9FUlJPUiwgcmVzdWx0OwoJc3RhdGljIGNvbnN0IGNoYXIgKmNhdGNuW11bMl0gPSB7CgkJ eyJUWVBFX05BTUUiLCAiVFlQRV9OQU1FIn0sCgkJeyJEQVRBX1RZUEUiLCAiREFUQV9UWVBFIn0s CgkJeyJDT0xVTU5fU0laRSIsICJQUkVDSVNJT04ifSwKCQl7IkxJVEVSQUxfUFJFRklYIiwgIkxJ VEVSQUxfUFJFRklYIn0sCgkJeyJMSVRFUkFMX1NVRkZJWCIsICJMSVRFUkFMX1NVRkZJWCJ9LAoJ CXsiQ1JFQVRFX1BBUkFNUyIsICJDUkVBVEVfUEFSQU1TIn0sCgkJeyJOVUxMQUJMRSIsICJOVUxM QUJMRSJ9LAoJCXsiQ0FTRV9TRU5TSVRJVkUiLCAiQ0FTRV9TRU5TSVRJVkUifSwKCQl7IlNFQVJD SEFCTEUiLCAiU0VBUkNIQUJMRSJ9LAoJCXsiVU5TSUdORURfQVRUUklCVVRFIiwgIlVOU0lHTkVE X0FUVFJJQlVURSJ9LAoJCXsiRklYRURfUFJFQ19TQ0FMRSIsICJNT05FWSJ9LAoJCXsiQVVUT19V TklRVUVfVkFMVUUiLCAiQVVUT19JTkNSRU1FTlQifSwKCQl7IkxPQ0FMX1RZUEVfTkFNRSIsICJM T0NBTF9UWVBFX05BTUUifSwKCQl7Ik1JTklNVU1fU0NBTEUiLCAiTUlOSU1VTV9TQ0FMRSJ9LAoJ CXsiTUFYSU1VTV9TQ0FMRSIsICJNQVhJTVVNX1NDQUxFIn0sCgkJeyJTUUxfREFUQV9UWVBFIiwg IlNRTF9EQVRBX1RZUEUifSwKCQl7IlNRTF9EQVRFVElNRV9TVUIiLCAiU1FMX0RBVEVUSU1FX1NV QiJ9LAoJCXsiTlVNX1BSRUNfUkFESVgiLCAiTlVNX1BSRUNfUkFESVgifSwKCQl7IklOVEVSVkFM X1BSRUNJU0lPTiIsICJJTlRFUlZBTF9QUkVDSVNJT04ifSB9OwoJRW52aXJvbm1lbnRDbGFzcwkq ZW52OwoJQk9PTCBpc19PREJDMjsKCglNWUxPRygwLCAiZW50ZXJpbmcuLi5mU3FsVHlwZT0lZFxu IiwgZlNxbFR5cGUpOwoKCWlmIChyZXN1bHQgPSBTQ19pbml0aWFsaXplX2FuZF9yZWN5Y2xlKHN0 bXQpLCBTUUxfU1VDQ0VTUyAhPSByZXN1bHQpCgkJcmV0dXJuIHJlc3VsdDsKCgljb25uID0gU0Nf Z2V0X2Nvbm4oc3RtdCk7CgllbnYgPSBDQ19nZXRfZW52KGNvbm4pOwoJaXNfT0RCQzIgPSBFTl9p c19vZGJjMihlbnYpOwoJaWYgKHJlcyA9IFFSX0NvbnN0cnVjdG9yKCksICFyZXMpCgl7CgkJU0Nf c2V0X2Vycm9yKHN0bXQsIFNUTVRfSU5URVJOQUxfRVJST1IsICJFcnJvciBjcmVhdGluZyByZXN1 bHQuIiwgZnVuYyk7CgkJcmV0dXJuIFNRTF9FUlJPUjsKCX0KCVNDX3NldF9SZXN1bHQoc3RtdCwg cmVzKTsKCiNkZWZpbmUJcmV0dXJuCURPTlRfQ0FMTF9SRVRVUk5fRlJPTV9IRVJFPz8/CglyZXN1 bHRfY29scyA9IE5VTV9PRl9HRVRUWVBFX0ZJRUxEUzsKCWV4dGVuZF9jb2x1bW5fYmluZGluZ3Mo U0NfZ2V0X0FSREYoc3RtdCksIHJlc3VsdF9jb2xzKTsKCglzdG10LT5jYXRhbG9nX3Jlc3VsdCA9 IFRSVUU7CglRUl9zZXRfbnVtX2ZpZWxkcyhyZXMsIHJlc3VsdF9jb2xzKTsKCVFSX3NldF9maWVs ZF9pbmZvX0VOKHJlcywgMCwgUEdfVFlQRV9WQVJDSEFSLCBNQVhfSU5GT19TVFJJTkcpOwoJUVJf c2V0X2ZpZWxkX2luZm9fRU4ocmVzLCAxLCBQR19UWVBFX0lOVDIsIDIpOwoJUVJfc2V0X2ZpZWxk X2luZm9fRU4ocmVzLCAyLCBQR19UWVBFX0lOVDQsIDQpOwoJUVJfc2V0X2ZpZWxkX2luZm9fRU4o cmVzLCAzLCBQR19UWVBFX1ZBUkNIQVIsIE1BWF9JTkZPX1NUUklORyk7CglRUl9zZXRfZmllbGRf aW5mb19FTihyZXMsIDQsIFBHX1RZUEVfVkFSQ0hBUiwgTUFYX0lORk9fU1RSSU5HKTsKCVFSX3Nl dF9maWVsZF9pbmZvX0VOKHJlcywgNSwgUEdfVFlQRV9WQVJDSEFSLCBNQVhfSU5GT19TVFJJTkcp OwoJUVJfc2V0X2ZpZWxkX2luZm9fRU4ocmVzLCA2LCBQR19UWVBFX0lOVDIsIDIpOwoJUVJfc2V0 X2ZpZWxkX2luZm9fRU4ocmVzLCA3LCBQR19UWVBFX0lOVDIsIDIpOwoJUVJfc2V0X2ZpZWxkX2lu Zm9fRU4ocmVzLCA4LCBQR19UWVBFX0lOVDIsIDIpOwoJUVJfc2V0X2ZpZWxkX2luZm9fRU4ocmVz LCA5LCBQR19UWVBFX0lOVDIsIDIpOwoJUVJfc2V0X2ZpZWxkX2luZm9fRU4ocmVzLCAxMCwgUEdf VFlQRV9JTlQyLCAyKTsKCVFSX3NldF9maWVsZF9pbmZvX0VOKHJlcywgMTEsIFBHX1RZUEVfSU5U MiwgMik7CglRUl9zZXRfZmllbGRfaW5mb19FTihyZXMsIDEyLCBQR19UWVBFX1ZBUkNIQVIsIE1B WF9JTkZPX1NUUklORyk7CglRUl9zZXRfZmllbGRfaW5mb19FTihyZXMsIDEzLCBQR19UWVBFX0lO VDIsIDIpOwoJUVJfc2V0X2ZpZWxkX2luZm9fRU4ocmVzLCAxNCwgUEdfVFlQRV9JTlQyLCAyKTsK CVFSX3NldF9maWVsZF9pbmZvX0VOKHJlcywgMTUsIFBHX1RZUEVfSU5UMiwgMik7CglRUl9zZXRf ZmllbGRfaW5mb19FTihyZXMsIDE2LCBQR19UWVBFX0lOVDIsIDIpOwoJUVJfc2V0X2ZpZWxkX2lu Zm9fRU4ocmVzLCAxNywgUEdfVFlQRV9JTlQ0LCA0KTsKCVFSX3NldF9maWVsZF9pbmZvX0VOKHJl cywgMTgsIFBHX1RZUEVfSU5UMiwgMik7CgoJZm9yIChpID0gMCwgc3FsVHlwZSA9IHNxbFR5cGVz WzBdOyBzcWxUeXBlOyBzcWxUeXBlID0gc3FsVHlwZXNbKytpXSkKCXsKCQkvKiBGaWx0ZXIgdW5z dXBwb3J0ZWQgZGF0YSB0eXBlcyB3aGVuIGZTcWxUeXBlID0gU1FMX0FMTF9UWVBFUyAqLwoJCWlm IChTUUxfQUxMX1RZUEVTID09IGZTcWxUeXBlICYmIEVOX2lzX29kYmMyKGVudikpCgkJewoJCQlz d2l0Y2ggKHNxbFR5cGUpCgkJCXsKCQkJCWNhc2UgU1FMX1RZUEVfREFURToKCQkJCWNhc2UgU1FM X1RZUEVfVElNRToKCQkJCWNhc2UgU1FMX1RZUEVfVElNRVNUQU1QOgoJCQkJCWNvbnRpbnVlOwoJ CQl9CgkJfQoKCQlwZ1R5cGUgPSBzcWx0eXBlX3RvX3BndHlwZShjb25uLCBzcWxUeXBlKTsKCmlm IChzcWxUeXBlID09IFNRTF9MT05HVkFSQklOQVJZKQp7CkNvbm5JbmZvCSpjaSA9ICYoY29ubi0+ Y29ubkluZm8pOwpNWUxPRyhERVRBSUxfTE9HX0xFVkVMLCAiJWQgc3FsdHlwZT0lZCAtPiBwZ3R5 cGU9JWRcbiIsIGNpLT5ieXRlYV9hc19sb25ndmFyYmluYXJ5LCBzcWxUeXBlLCBwZ1R5cGUpOwp9 CgoJCWlmIChmU3FsVHlwZSA9PSBTUUxfQUxMX1RZUEVTIHx8IGZTcWxUeXBlID09IHNxbFR5cGUp CgkJewoJCQlpbnQJcGd0Y291bnQgPSAxLCBhdW5xX21hdGNoID0gLTEsIGNudDsKCgkJCS8qaWYg KFNRTF9JTlRFR0VSID09IHNxbFR5cGUgfHwgU1FMX1RJTllJTlQgPT0gc3FsVHlwZSkqLwoJCQlp ZiAoU1FMX0lOVEVHRVIgPT0gc3FsVHlwZSkKCQkJewpNWUxPRygwLCAic3FsVHlwZT0lZCBtc19q ZXQ9JWRcbiIsIHNxbFR5cGUsIGNvbm4tPm1zX2pldCk7CgkJCQlpZiAoY29ubi0+bXNfamV0KQoJ CQkJewoJCQkJCWF1bnFfbWF0Y2ggPSAxOwoJCQkJCXBndGNvdW50ID0gMjsKCQkJCX0KTVlMT0co MCwgImF1bnFfbWF0Y2g9JWQgcGd0Y291bnQ9JWRcbiIsIGF1bnFfbWF0Y2gsIHBndGNvdW50KTsK CQkJfQoJCQlmb3IgKGNudCA9IDA7IGNudCA8IHBndGNvdW50OyBjbnQgKyspCgkJCXsKCQkJCWlm ICh0dXBsZSA9IFFSX0FkZE5ldyhyZXMpLCBOVUxMID09IHR1cGxlKQoJCQkJewoJCQkJCVNDX3Nl dF9lcnJvcihzdG10LCBTVE1UX05PX01FTU9SWV9FUlJPUiwgIkNvdWxkbid0IFFSX0FkZE5ldy4i LCBmdW5jKTsKCQkJCQlnb3RvIGNsZWFudXA7CgkJCQl9CgoJCQkJLyogVGhlc2UgdmFsdWVzIGNh bid0IGJlIE5VTEwgKi8KCQkJCWlmIChhdW5xX21hdGNoID09IGNudCkKCQkJCXsKCQkJCQlzZXRf dHVwbGVmaWVsZF9zdHJpbmcoJnR1cGxlW0dFVFRZUEVfVFlQRV9OQU1FXSwgUEdUWVBFX1RPX05B TUUoY29ubiwgcGdUeXBlLCBUUlVFKSk7CgkJCQkJc2V0X3R1cGxlZmllbGRfaW50MigmdHVwbGVb R0VUVFlQRV9OVUxMQUJMRV0sIFNRTF9OT19OVUxMUyk7Ck1ZTE9HKERFVEFJTF9MT0dfTEVWRUws ICJzZXJpYWwgaW5cbiIpOwoJCQkJfQoJCQkJZWxzZQoJCQkJewoJCQkJCXNldF90dXBsZWZpZWxk X3N0cmluZygmdHVwbGVbR0VUVFlQRV9UWVBFX05BTUVdLCBQR1RZUEVfVE9fTkFNRShjb25uLCBw Z1R5cGUsIEZBTFNFKSk7CgkJCQkJc2V0X3R1cGxlZmllbGRfaW50MigmdHVwbGVbR0VUVFlQRV9O VUxMQUJMRV0sIHBndHlwZV9udWxsYWJsZShjb25uLCBwZ1R5cGUpKTsKCQkJCX0KCQkJCXNldF90 dXBsZWZpZWxkX2ludDIoJnR1cGxlW0dFVFRZUEVfREFUQV9UWVBFXSwgKEludDIpIHNxbFR5cGUp OwoJCQkJc2V0X3R1cGxlZmllbGRfaW50MigmdHVwbGVbR0VUVFlQRV9DQVNFX1NFTlNJVElWRV0s IHBndHlwZV9jYXNlX3NlbnNpdGl2ZShjb25uLCBwZ1R5cGUpKTsKCQkJCXNldF90dXBsZWZpZWxk X2ludDIoJnR1cGxlW0dFVFRZUEVfU0VBUkNIQUJMRV0sIHBndHlwZV9zZWFyY2hhYmxlKGNvbm4s IHBnVHlwZSkpOwoJCQkJc2V0X3R1cGxlZmllbGRfaW50MigmdHVwbGVbR0VUVFlQRV9GSVhFRF9Q UkVDX1NDQUxFXSwgcGd0eXBlX21vbmV5KGNvbm4sIHBnVHlwZSkpOwoKCQkJLyoKCQkJICogTG9j YWxpemVkIGRhdGEtc291cmNlIGRlcGVuZGVudCBkYXRhIHR5cGUgbmFtZSAoYWx3YXlzCgkJCSAq IE5VTEwpCgkJCSAqLwoJCQkJc2V0X3R1cGxlZmllbGRfbnVsbCgmdHVwbGVbR0VUVFlQRV9MT0NB TF9UWVBFX05BTUVdKTsKCgkJCQkvKiBUaGVzZSB2YWx1ZXMgY2FuIGJlIE5VTEwgKi8KCQkJCXNl dF9udWxsZmllbGRfaW50NCgmdHVwbGVbR0VUVFlQRV9DT0xVTU5fU0laRV0sIFBHVFlQRV9DT0xV TU5fU0laRShjb25uLCBwZ1R5cGUpKTsKCQkJCXNldF9udWxsZmllbGRfc3RyaW5nKCZ0dXBsZVtH RVRUWVBFX0xJVEVSQUxfUFJFRklYXSwgcGd0eXBlX2xpdGVyYWxfcHJlZml4KGNvbm4sIHBnVHlw ZSkpOwoJCQkJc2V0X251bGxmaWVsZF9zdHJpbmcoJnR1cGxlW0dFVFRZUEVfTElURVJBTF9TVUZG SVhdLCBwZ3R5cGVfbGl0ZXJhbF9zdWZmaXgoY29ubiwgcGdUeXBlKSk7CgkJCQlzZXRfbnVsbGZp ZWxkX3N0cmluZygmdHVwbGVbR0VUVFlQRV9DUkVBVEVfUEFSQU1TXSwgcGd0eXBlX2NyZWF0ZV9w YXJhbXMoY29ubiwgcGdUeXBlKSk7CgkJCQlpZiAoMSA8IHBndGNvdW50KQoJCQkJCXNldF90dXBs ZWZpZWxkX2ludDIoJnR1cGxlW0dFVFRZUEVfVU5TSUdORURfQVRUUklCVVRFXSwgU1FMX1RSVUUp OwoJCQkJZWxzZQoJCQkJCXNldF9udWxsZmllbGRfaW50MigmdHVwbGVbR0VUVFlQRV9VTlNJR05F RF9BVFRSSUJVVEVdLCBwZ3R5cGVfdW5zaWduZWQoY29ubiwgcGdUeXBlKSk7CgkJCQlpZiAoYXVu cV9tYXRjaCA9PSBjbnQpCgkJCQkJc2V0X3R1cGxlZmllbGRfaW50MigmdHVwbGVbR0VUVFlQRV9B VVRPX1VOSVFVRV9WQUxVRV0sIFNRTF9UUlVFKTsKCQkJCWVsc2UKCQkJCQlzZXRfbnVsbGZpZWxk X2ludDIoJnR1cGxlW0dFVFRZUEVfQVVUT19VTklRVUVfVkFMVUVdLCBwZ3R5cGVfYXV0b19pbmNy ZW1lbnQoY29ubiwgcGdUeXBlKSk7CgkJCQlzZXRfbnVsbGZpZWxkX2ludDIoJnR1cGxlW0dFVFRZ UEVfTUlOSU1VTV9TQ0FMRV0sIHBndHlwZV9taW5fZGVjaW1hbF9kaWdpdHMoY29ubiwgcGdUeXBl KSk7CgkJCQlzZXRfbnVsbGZpZWxkX2ludDIoJnR1cGxlW0dFVFRZUEVfTUFYSU1VTV9TQ0FMRV0s IHBndHlwZV9tYXhfZGVjaW1hbF9kaWdpdHMoY29ubiwgcGdUeXBlKSk7CgkJCQlzZXRfdHVwbGVm aWVsZF9pbnQyKCZ0dXBsZVtHRVRUWVBFX1NRTF9EQVRBX1RZUEVdLCBQR1RZUEVfVE9fU1FMREVT Q1RZUEUoY29ubiwgcGdUeXBlKSk7CgkJCQlzZXRfbnVsbGZpZWxkX2ludDIoJnR1cGxlW0dFVFRZ UEVfU1FMX0RBVEVUSU1FX1NVQl0sIFBHVFlQRV9UT19EQVRFVElNRV9TVUIoY29ubiwgcGdUeXBl KSk7CgkJCQlzZXRfbnVsbGZpZWxkX2ludDQoJnR1cGxlW0dFVFRZUEVfTlVNX1BSRUNfUkFESVhd LCBwZ3R5cGVfcmFkaXgoY29ubiwgcGdUeXBlKSk7CgkJCQlzZXRfbnVsbGZpZWxkX2ludDQoJnR1 cGxlW0dFVFRZUEVfSU5URVJWQUxfUFJFQ0lTSU9OXSwgMCk7CgkJCX0KCQl9Cgl9CglyZXQgPSBT UUxfU1VDQ0VTUzsKCmNsZWFudXA6CiN1bmRlZglyZXR1cm4KCS8qCgkgKiBhbHNvLCB0aGluZ3Mg bmVlZCB0byB0aGluayB0aGF0IHRoaXMgc3RhdGVtZW50IGlzIGZpbmlzaGVkIHNvIHRoZQoJICog cmVzdWx0cyBjYW4gYmUgcmV0cmlldmVkLgoJICovCglzdG10LT5zdGF0dXMgPSBTVE1UX0ZJTklT SEVEOwoJc3RtdC0+Y3VyclR1cGxlID0gLTE7CglpZiAoU1FMX1NVQ0NFRURFRChyZXQpKQoJCVND X3NldF9yb3dzZXRfc3RhcnQoc3RtdCwgLTEsIEZBTFNFKTsKCWVsc2UKCQlTQ19zZXRfUmVzdWx0 KHN0bXQsIE5VTEwpOwoJU0Nfc2V0X2N1cnJlbnRfY29sKHN0bXQsIC0xKTsKCglyZXR1cm4gcmV0 Owp9CgoKUkVUQ09ERQkJU1FMX0FQSQpQR0FQSV9HZXRGdW5jdGlvbnMoSERCQyBoZGJjLAoJCQkJ ICAgU1FMVVNNQUxMSU5UIGZGdW5jdGlvbiwKCQkJCSAgIFNRTFVTTUFMTElOVCAqIHBmRXhpc3Rz KQp7CglDb25uZWN0aW9uQ2xhc3MgKmNvbm4gPSAoQ29ubmVjdGlvbkNsYXNzICopIGhkYmM7CglD b25uSW5mbyAgICpjaSA9ICYoY29ubi0+Y29ubkluZm8pOwoKCU1ZTE9HKDAsICJlbnRlcmluZy4u LiV1XG4iLCBmRnVuY3Rpb24pOwoKCWlmIChmRnVuY3Rpb24gPT0gU1FMX0FQSV9BTExfRlVOQ1RJ T05TKQoJewoJCW1lbXNldChwZkV4aXN0cywgMCwgc2l6ZW9mKHBmRXhpc3RzWzBdKSAqIDEwMCk7 CgoJCS8qIE9EQkMgY29yZSBmdW5jdGlvbnMgKi8KCQlwZkV4aXN0c1tTUUxfQVBJX1NRTEFMTE9D Q09OTkVDVF0gPSBUUlVFOwoJCXBmRXhpc3RzW1NRTF9BUElfU1FMQUxMT0NFTlZdID0gVFJVRTsK CQlwZkV4aXN0c1tTUUxfQVBJX1NRTEFMTE9DU1RNVF0gPSBUUlVFOwoJCXBmRXhpc3RzW1NRTF9B UElfU1FMQklORENPTF0gPSBUUlVFOwoJCXBmRXhpc3RzW1NRTF9BUElfU1FMQ0FOQ0VMXSA9IFRS VUU7CgkJcGZFeGlzdHNbU1FMX0FQSV9TUUxDT0xBVFRSSUJVVEVTXSA9IFRSVUU7CgkJcGZFeGlz dHNbU1FMX0FQSV9TUUxDT05ORUNUXSA9IFRSVUU7CgkJcGZFeGlzdHNbU1FMX0FQSV9TUUxERVND UklCRUNPTF0gPSBUUlVFOwkvKiBwYXJ0aWFsICovCgkJcGZFeGlzdHNbU1FMX0FQSV9TUUxESVND T05ORUNUXSA9IFRSVUU7CgkJcGZFeGlzdHNbU1FMX0FQSV9TUUxFUlJPUl0gPSBUUlVFOwoJCXBm RXhpc3RzW1NRTF9BUElfU1FMRVhFQ0RJUkVDVF0gPSBUUlVFOwoJCXBmRXhpc3RzW1NRTF9BUElf U1FMRVhFQ1VURV0gPSBUUlVFOwoJCXBmRXhpc3RzW1NRTF9BUElfU1FMRkVUQ0hdID0gVFJVRTsK CQlwZkV4aXN0c1tTUUxfQVBJX1NRTEZSRUVDT05ORUNUXSA9IFRSVUU7CgkJcGZFeGlzdHNbU1FM X0FQSV9TUUxGUkVFRU5WXSA9IFRSVUU7CgkJcGZFeGlzdHNbU1FMX0FQSV9TUUxGUkVFU1RNVF0g PSBUUlVFOwoJCXBmRXhpc3RzW1NRTF9BUElfU1FMR0VUQ1VSU09STkFNRV0gPSBUUlVFOwoJCXBm RXhpc3RzW1NRTF9BUElfU1FMTlVNUkVTVUxUQ09MU10gPSBUUlVFOwoJCXBmRXhpc3RzW1NRTF9B UElfU1FMUFJFUEFSRV0gPSBUUlVFOwkJLyogY29tcGxldGU/ICovCgkJcGZFeGlzdHNbU1FMX0FQ SV9TUUxST1dDT1VOVF0gPSBUUlVFOwoJCXBmRXhpc3RzW1NRTF9BUElfU1FMU0VUQ1VSU09STkFN RV0gPSBUUlVFOwoJCXBmRXhpc3RzW1NRTF9BUElfU1FMU0VUUEFSQU1dID0gRkFMU0U7CQkvKiBv ZGJjIDEuMCAqLwoJCXBmRXhpc3RzW1NRTF9BUElfU1FMVFJBTlNBQ1RdID0gVFJVRTsKCgkJLyog T0RCQyBsZXZlbCAxIGZ1bmN0aW9ucyAqLwoJCXBmRXhpc3RzW1NRTF9BUElfU1FMQklORFBBUkFN RVRFUl0gPSBUUlVFOwoJCXBmRXhpc3RzW1NRTF9BUElfU1FMQ09MVU1OU10gPSBUUlVFOwoJCXBm RXhpc3RzW1NRTF9BUElfU1FMRFJJVkVSQ09OTkVDVF0gPSBUUlVFOwoJCXBmRXhpc3RzW1NRTF9B UElfU1FMR0VUQ09OTkVDVE9QVElPTl0gPSBUUlVFOwkJLyogcGFydGlhbCAqLwoJCXBmRXhpc3Rz W1NRTF9BUElfU1FMR0VUREFUQV0gPSBUUlVFOwoJCXBmRXhpc3RzW1NRTF9BUElfU1FMR0VURlVO Q1RJT05TXSA9IFRSVUU7CgkJcGZFeGlzdHNbU1FMX0FQSV9TUUxHRVRJTkZPXSA9IFRSVUU7CgkJ cGZFeGlzdHNbU1FMX0FQSV9TUUxHRVRTVE1UT1BUSU9OXSA9IFRSVUU7CS8qIHBhcnRpYWwgKi8K CQlwZkV4aXN0c1tTUUxfQVBJX1NRTEdFVFRZUEVJTkZPXSA9IFRSVUU7CgkJcGZFeGlzdHNbU1FM X0FQSV9TUUxQQVJBTURBVEFdID0gVFJVRTsKCQlwZkV4aXN0c1tTUUxfQVBJX1NRTFBVVERBVEFd ID0gVFJVRTsKCQlwZkV4aXN0c1tTUUxfQVBJX1NRTFNFVENPTk5FQ1RPUFRJT05dID0gVFJVRTsJ CS8qIHBhcnRpYWwgKi8KCQlwZkV4aXN0c1tTUUxfQVBJX1NRTFNFVFNUTVRPUFRJT05dID0gVFJV RTsKCQlwZkV4aXN0c1tTUUxfQVBJX1NRTFNQRUNJQUxDT0xVTU5TXSA9IFRSVUU7CgkJcGZFeGlz dHNbU1FMX0FQSV9TUUxTVEFUSVNUSUNTXSA9IFRSVUU7CgkJcGZFeGlzdHNbU1FMX0FQSV9TUUxU QUJMRVNdID0gVFJVRTsKCgkJLyogT0RCQyBsZXZlbCAyIGZ1bmN0aW9ucyAqLwoJCXBmRXhpc3Rz W1NRTF9BUElfU1FMQlJPV1NFQ09OTkVDVF0gPSBGQUxTRTsKCQlwZkV4aXN0c1tTUUxfQVBJX1NR TENPTFVNTlBSSVZJTEVHRVNdID0gVFJVRTsKCQlwZkV4aXN0c1tTUUxfQVBJX1NRTERBVEFTT1VS Q0VTXSA9IEZBTFNFOwkvKiBvbmx5IGltcGxlbWVudGVkIGJ5CgkJCQkJCQkJCQkJCQkgKiBETSAq LwoJCWlmIChTVVBQT1JUX0RFU0NSSUJFX1BBUkFNKGNpKSkKCQkJcGZFeGlzdHNbU1FMX0FQSV9T UUxERVNDUklCRVBBUkFNXSA9IFRSVUU7CgkJZWxzZQoJCQlwZkV4aXN0c1tTUUxfQVBJX1NRTERF U0NSSUJFUEFSQU1dID0gRkFMU0U7IC8qIG5vdCBwcm9wZXJseQoJCQkJCQkJCQkJCQkJICogaW1w bGVtZW50ZWQgKi8KCQlwZkV4aXN0c1tTUUxfQVBJX1NRTERSSVZFUlNdID0gRkFMU0U7CQkvKiBv bmx5IGltcGxlbWVudGVkIGJ5CgkJCQkJCQkJCQkJCQkgKiBETSAqLwoJCXBmRXhpc3RzW1NRTF9B UElfU1FMRVhURU5ERURGRVRDSF0gPSBUUlVFOwoJCXBmRXhpc3RzW1NRTF9BUElfU1FMRk9SRUlH TktFWVNdID0gVFJVRTsKCQlwZkV4aXN0c1tTUUxfQVBJX1NRTE1PUkVSRVNVTFRTXSA9IFRSVUU7 CgkJcGZFeGlzdHNbU1FMX0FQSV9TUUxOQVRJVkVTUUxdID0gVFJVRTsKCQlwZkV4aXN0c1tTUUxf QVBJX1NRTE5VTVBBUkFNU10gPSBUUlVFOwoJCXBmRXhpc3RzW1NRTF9BUElfU1FMUEFSQU1PUFRJ T05TXSA9IFRSVUU7CgkJcGZFeGlzdHNbU1FMX0FQSV9TUUxQUklNQVJZS0VZU10gPSBUUlVFOwoJ CXBmRXhpc3RzW1NRTF9BUElfU1FMUFJPQ0VEVVJFQ09MVU1OU10gPSBUUlVFOwoJCXBmRXhpc3Rz W1NRTF9BUElfU1FMUFJPQ0VEVVJFU10gPSBUUlVFOwoJCXBmRXhpc3RzW1NRTF9BUElfU1FMU0VU UE9TXSA9IFRSVUU7CgkJcGZFeGlzdHNbU1FMX0FQSV9TUUxTRVRTQ1JPTExPUFRJT05TXSA9IFRS VUU7CQkvKiBvZGJjIDEuMCAqLwoJCXBmRXhpc3RzW1NRTF9BUElfU1FMVEFCTEVQUklWSUxFR0VT XSA9IFRSVUU7CgkJaWYgKDAgPT0gY2ktPnVwZGF0YWJsZV9jdXJzb3JzKQoJCQlwZkV4aXN0c1tT UUxfQVBJX1NRTEJVTEtPUEVSQVRJT05TXSA9IEZBTFNFOwoJCWVsc2UKCQkJcGZFeGlzdHNbU1FM X0FQSV9TUUxCVUxLT1BFUkFUSU9OU10gPSBUUlVFOwoJfQoJZWxzZQoJewoJCWlmIChjaS0+ZHJp dmVycy5saWUpCgkJCSpwZkV4aXN0cyA9IFRSVUU7CgkJZWxzZQoJCXsKCQkJc3dpdGNoIChmRnVu Y3Rpb24pCgkJCXsKCQkJCWNhc2UgU1FMX0FQSV9TUUxCSU5EQ09MOgoJCQkJCSpwZkV4aXN0cyA9 IFRSVUU7CgkJCQkJYnJlYWs7CgkJCQljYXNlIFNRTF9BUElfU1FMQ0FOQ0VMOgoJCQkJCSpwZkV4 aXN0cyA9IFRSVUU7CgkJCQkJYnJlYWs7CgkJCQljYXNlIFNRTF9BUElfU1FMQ09MQVRUUklCVVRF OgoJCQkJCSpwZkV4aXN0cyA9IFRSVUU7CgkJCQkJYnJlYWs7CgkJCQljYXNlIFNRTF9BUElfU1FM Q09OTkVDVDoKCQkJCQkqcGZFeGlzdHMgPSBUUlVFOwoJCQkJCWJyZWFrOwoJCQkJY2FzZSBTUUxf QVBJX1NRTERFU0NSSUJFQ09MOgoJCQkJCSpwZkV4aXN0cyA9IFRSVUU7CgkJCQkJYnJlYWs7CQkv KiBwYXJ0aWFsICovCgkJCQljYXNlIFNRTF9BUElfU1FMRElTQ09OTkVDVDoKCQkJCQkqcGZFeGlz dHMgPSBUUlVFOwoJCQkJCWJyZWFrOwoJCQkJY2FzZSBTUUxfQVBJX1NRTEVYRUNESVJFQ1Q6CgkJ CQkJKnBmRXhpc3RzID0gVFJVRTsKCQkJCQlicmVhazsKCQkJCWNhc2UgU1FMX0FQSV9TUUxFWEVD VVRFOgoJCQkJCSpwZkV4aXN0cyA9IFRSVUU7CgkJCQkJYnJlYWs7CgkJCQljYXNlIFNRTF9BUElf U1FMRkVUQ0g6CgkJCQkJKnBmRXhpc3RzID0gVFJVRTsKCQkJCQlicmVhazsKCQkJCWNhc2UgU1FM X0FQSV9TUUxGUkVFU1RNVDoKCQkJCQkqcGZFeGlzdHMgPSBUUlVFOwoJCQkJCWJyZWFrOwoJCQkJ Y2FzZSBTUUxfQVBJX1NRTEdFVENVUlNPUk5BTUU6CgkJCQkJKnBmRXhpc3RzID0gVFJVRTsKCQkJ CQlicmVhazsKCQkJCWNhc2UgU1FMX0FQSV9TUUxOVU1SRVNVTFRDT0xTOgoJCQkJCSpwZkV4aXN0 cyA9IFRSVUU7CgkJCQkJYnJlYWs7CgkJCQljYXNlIFNRTF9BUElfU1FMUFJFUEFSRToKCQkJCQkq cGZFeGlzdHMgPSBUUlVFOwoJCQkJCWJyZWFrOwoJCQkJY2FzZSBTUUxfQVBJX1NRTFJPV0NPVU5U OgoJCQkJCSpwZkV4aXN0cyA9IFRSVUU7CgkJCQkJYnJlYWs7CgkJCQljYXNlIFNRTF9BUElfU1FM U0VUQ1VSU09STkFNRToKCQkJCQkqcGZFeGlzdHMgPSBUUlVFOwoJCQkJCWJyZWFrOwoKCQkJCQkv KiBPREJDIGxldmVsIDEgZnVuY3Rpb25zICovCgkJCQljYXNlIFNRTF9BUElfU1FMQklORFBBUkFN RVRFUjoKCQkJCQkqcGZFeGlzdHMgPSBUUlVFOwoJCQkJCWJyZWFrOwoJCQkJY2FzZSBTUUxfQVBJ X1NRTENPTFVNTlM6CgkJCQkJKnBmRXhpc3RzID0gVFJVRTsKCQkJCQlicmVhazsKCQkJCWNhc2Ug U1FMX0FQSV9TUUxEUklWRVJDT05ORUNUOgoJCQkJCSpwZkV4aXN0cyA9IFRSVUU7CgkJCQkJYnJl YWs7CgkJCQljYXNlIFNRTF9BUElfU1FMR0VUREFUQToKCQkJCQkqcGZFeGlzdHMgPSBUUlVFOwoJ CQkJCWJyZWFrOwoJCQkJY2FzZSBTUUxfQVBJX1NRTEdFVEZVTkNUSU9OUzoKCQkJCQkqcGZFeGlz dHMgPSBUUlVFOwoJCQkJCWJyZWFrOwoJCQkJY2FzZSBTUUxfQVBJX1NRTEdFVElORk86CgkJCQkJ KnBmRXhpc3RzID0gVFJVRTsKCQkJCQlicmVhazsKCQkJCWNhc2UgU1FMX0FQSV9TUUxHRVRUWVBF SU5GTzoKCQkJCQkqcGZFeGlzdHMgPSBUUlVFOwoJCQkJCWJyZWFrOwoJCQkJY2FzZSBTUUxfQVBJ X1NRTFBBUkFNREFUQToKCQkJCQkqcGZFeGlzdHMgPSBUUlVFOwoJCQkJCWJyZWFrOwoJCQkJY2Fz ZSBTUUxfQVBJX1NRTFBVVERBVEE6CgkJCQkJKnBmRXhpc3RzID0gVFJVRTsKCQkJCQlicmVhazsK CQkJCWNhc2UgU1FMX0FQSV9TUUxTUEVDSUFMQ09MVU1OUzoKCQkJCQkqcGZFeGlzdHMgPSBUUlVF OwoJCQkJCWJyZWFrOwoJCQkJY2FzZSBTUUxfQVBJX1NRTFNUQVRJU1RJQ1M6CgkJCQkJKnBmRXhp c3RzID0gVFJVRTsKCQkJCQlicmVhazsKCQkJCWNhc2UgU1FMX0FQSV9TUUxUQUJMRVM6CgkJCQkJ KnBmRXhpc3RzID0gVFJVRTsKCQkJCQlicmVhazsKCgkJCQkJLyogT0RCQyBsZXZlbCAyIGZ1bmN0 aW9ucyAqLwoJCQkJY2FzZSBTUUxfQVBJX1NRTEJST1dTRUNPTk5FQ1Q6CgkJCQkJKnBmRXhpc3Rz ID0gRkFMU0U7CgkJCQkJYnJlYWs7CgkJCQljYXNlIFNRTF9BUElfU1FMQ09MVU1OUFJJVklMRUdF UzoKCQkJCQkqcGZFeGlzdHMgPSBUUlVFOwoJCQkJCWJyZWFrOwoJCQkJY2FzZSBTUUxfQVBJX1NR TERBVEFTT1VSQ0VTOgoJCQkJCSpwZkV4aXN0cyA9IEZBTFNFOwoJCQkJCWJyZWFrOwkJLyogb25s eSBpbXBsZW1lbnRlZCBieSBETSAqLwoJCQkJY2FzZSBTUUxfQVBJX1NRTERFU0NSSUJFUEFSQU06 CgkJCQkJaWYgKFNVUFBPUlRfREVTQ1JJQkVfUEFSQU0oY2kpKQoJCQkJCQkqcGZFeGlzdHMgPSBU UlVFOwoJCQkJCWVsc2UKCQkJCQkJKnBmRXhpc3RzID0gRkFMU0U7CgkJCQkJYnJlYWs7CQkvKiBu b3QgcHJvcGVybHkgaW1wbGVtZW50ZWQgKi8KCQkJCWNhc2UgU1FMX0FQSV9TUUxEUklWRVJTOgoJ CQkJCSpwZkV4aXN0cyA9IEZBTFNFOwoJCQkJCWJyZWFrOwkJLyogb25seSBpbXBsZW1lbnRlZCBi eSBETSAqLwoJCQkJY2FzZSBTUUxfQVBJX1NRTEVYVEVOREVERkVUQ0g6CgkJCQkJKnBmRXhpc3Rz ID0gVFJVRTsKCQkJCQlicmVhazsKCQkJCWNhc2UgU1FMX0FQSV9TUUxGT1JFSUdOS0VZUzoKCQkJ CQkqcGZFeGlzdHMgPSBUUlVFOwoJCQkJCWJyZWFrOwoJCQkJY2FzZSBTUUxfQVBJX1NRTE1PUkVS RVNVTFRTOgoJCQkJCSpwZkV4aXN0cyA9IFRSVUU7CgkJCQkJYnJlYWs7CgkJCQljYXNlIFNRTF9B UElfU1FMTkFUSVZFU1FMOgoJCQkJCSpwZkV4aXN0cyA9IFRSVUU7CgkJCQkJYnJlYWs7CgkJCQlj YXNlIFNRTF9BUElfU1FMTlVNUEFSQU1TOgoJCQkJCSpwZkV4aXN0cyA9IFRSVUU7CgkJCQkJYnJl YWs7CgkJCQljYXNlIFNRTF9BUElfU1FMUFJJTUFSWUtFWVM6CgkJCQkJKnBmRXhpc3RzID0gVFJV RTsKCQkJCQlicmVhazsKCQkJCWNhc2UgU1FMX0FQSV9TUUxQUk9DRURVUkVDT0xVTU5TOgoJCQkJ CSpwZkV4aXN0cyA9IFRSVUU7CgkJCQkJYnJlYWs7CgkJCQljYXNlIFNRTF9BUElfU1FMUFJPQ0VE VVJFUzoKCQkJCQkqcGZFeGlzdHMgPSBUUlVFOwoJCQkJCWJyZWFrOwoJCQkJY2FzZSBTUUxfQVBJ X1NRTFNFVFBPUzoKCQkJCQkqcGZFeGlzdHMgPSBUUlVFOwoJCQkJCWJyZWFrOwoJCQkJY2FzZSBT UUxfQVBJX1NRTFRBQkxFUFJJVklMRUdFUzoKCQkJCQkqcGZFeGlzdHMgPSBUUlVFOwoJCQkJCWJy ZWFrOwoJCQkJY2FzZSBTUUxfQVBJX1NRTEJVTEtPUEVSQVRJT05TOgkvKiAyNCAqLwoJCQkJY2Fz ZSBTUUxfQVBJX1NRTEFMTE9DSEFORExFOgkvKiAxMDAxICovCgkJCQljYXNlIFNRTF9BUElfU1FM QklORFBBUkFNOgkvKiAxMDAyICovCgkJCQljYXNlIFNRTF9BUElfU1FMQ0xPU0VDVVJTT1I6CS8q IDEwMDMgKi8KCQkJCWNhc2UgU1FMX0FQSV9TUUxFTkRUUkFOOgkvKiAxMDA1ICovCgkJCQljYXNl IFNRTF9BUElfU1FMRkVUQ0hTQ1JPTEw6CS8qIDEwMjEgKi8KCQkJCWNhc2UgU1FMX0FQSV9TUUxG UkVFSEFORExFOgkvKiAxMDA2ICovCgkJCQljYXNlIFNRTF9BUElfU1FMR0VUQ09OTkVDVEFUVFI6 CS8qIDEwMDcgKi8KCQkJCWNhc2UgU1FMX0FQSV9TUUxHRVRERVNDRklFTEQ6CS8qIDEwMDggKi8K CQkJCWNhc2UgU1FMX0FQSV9TUUxHRVRESUFHRklFTEQ6CS8qIDEwMTAgKi8KCQkJCWNhc2UgU1FM X0FQSV9TUUxHRVRESUFHUkVDOgkvKiAxMDExICovCgkJCQljYXNlIFNRTF9BUElfU1FMR0VURU5W QVRUUjoJLyogMTAxMiAqLwoJCQkJY2FzZSBTUUxfQVBJX1NRTEdFVFNUTVRBVFRSOgkvKiAxMDE0 ICovCgkJCQljYXNlIFNRTF9BUElfU1FMU0VUQ09OTkVDVEFUVFI6CS8qIDEwMTYgKi8KCQkJCWNh c2UgU1FMX0FQSV9TUUxTRVRERVNDRklFTEQ6CS8qIDEwMTcgKi8KCQkJCWNhc2UgU1FMX0FQSV9T UUxTRVRFTlZBVFRSOgkvKiAxMDE5ICovCgkJCQljYXNlIFNRTF9BUElfU1FMU0VUU1RNVEFUVFI6 CS8qIDEwMjAgKi8KCQkJCQkqcGZFeGlzdHMgPSBUUlVFOwoJCQkJCWJyZWFrOwoJCQkJY2FzZSBT UUxfQVBJX1NRTEdFVERFU0NSRUM6CS8qIDEwMDkgKi8KCQkJCWNhc2UgU1FMX0FQSV9TUUxTRVRE RVNDUkVDOgkvKiAxMDE4ICovCgkJCQljYXNlIFNRTF9BUElfU1FMQ09QWURFU0M6CS8qIDEwMDQg Ki8KCQkJCQkqcGZFeGlzdHMgPSBGQUxTRTsKCQkJCQlicmVhazsKCQkJCWRlZmF1bHQ6CgkJCQkJ KnBmRXhpc3RzID0gRkFMU0U7CgkJCQkJYnJlYWs7CgkJCX0KCQl9Cgl9CglyZXR1cm4gU1FMX1NV Q0NFU1M7Cn0KCgpjaGFyICoKaWRlbnRpZmllckVzY2FwZShjb25zdCBTUUxDSEFSICpzcmMsIFNR TExFTiBzcmNsZW4sIGNvbnN0IENvbm5lY3Rpb25DbGFzcyAqY29ubiwgY2hhciAqYnVmLCBzaXpl X3QgYnVmc2l6ZSwgQk9PTCBkb3VibGVfcXVvdGUpCnsKCWludAlpLCBvdXRsZW47CglVQ0hBUgl0 Y2hhcjsKCWNoYXIJKmRlc3QgPSBOVUxMLCBlc2NhcGVfY2ggPSBDQ19nZXRfZXNjYXBlKGNvbm4p OwoJZW5jb2RlZF9zdHIJZW5jc3RyOwoKCWlmICghc3JjIHx8IHNyY2xlbiA9PSBTUUxfTlVMTF9E QVRBKQoJCXJldHVybiBkZXN0OwoJZWxzZSBpZiAoc3JjbGVuID09IFNRTF9OVFMpCgkJc3JjbGVu ID0gKFNRTExFTikgc3RybGVuKChjaGFyICopIHNyYyk7CglpZiAoc3JjbGVuIDw9IDApCgkJcmV0 dXJuIGRlc3Q7Ck1ZTE9HKDAsICJlbnRlcmluZyBpbj0lcygiIEZPUk1BVF9MRU4gIilcbiIsIHNy Yywgc3JjbGVuKTsKCWlmIChOVUxMICE9IGJ1ZiAmJiBidWZzaXplID4gMCkKCQlkZXN0ID0gYnVm OwoJZWxzZQoJewoJCWJ1ZnNpemUgPSAyICogc3JjbGVuICsgMTsKCQlkZXN0ID0gbWFsbG9jKGJ1 ZnNpemUpOwoJfQoJaWYgKCFkZXN0KSByZXR1cm4gTlVMTDsKCWVuY29kZWRfc3RyX2NvbnN0cigm ZW5jc3RyLCBjb25uLT5jY3NjLCAoY2hhciAqKSBzcmMpOwoJb3V0bGVuID0gMDsKCWlmIChkb3Vi bGVfcXVvdGUpCgkJZGVzdFtvdXRsZW4rK10gPSBJREVOVElGSUVSX1FVT1RFOwoJZm9yIChpID0g MCwgdGNoYXIgPSBlbmNvZGVkX25leHRjaGFyKCZlbmNzdHIpOyBpIDwgc3JjbGVuICYmIG91dGxl biA8IGJ1ZnNpemUgLSAxOyBpKyssIHRjaGFyID0gZW5jb2RlZF9uZXh0Y2hhcigmZW5jc3RyKSkK CXsKICAgICAgICAgICAgICAgIGlmIChNQkNTX05PTl9BU0NJSShlbmNzdHIpKQogICAgICAgICAg ICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICBkZXN0W291dGxlbisrXSA9IHRjaGFyOwog ICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgIH0KCQlpZiAo TElURVJBTF9RVU9URSA9PSB0Y2hhciB8fAoJCSAgICBlc2NhcGVfY2ggPT0gdGNoYXIpCgkJCWRl c3Rbb3V0bGVuKytdID0gdGNoYXI7CgkJZWxzZSBpZiAoZG91YmxlX3F1b3RlICYmCgkJCSBJREVO VElGSUVSX1FVT1RFID09IHRjaGFyKQoJCQlkZXN0W291dGxlbisrXSA9IHRjaGFyOwoJCWRlc3Rb b3V0bGVuKytdID0gdGNoYXI7Cgl9CglpZiAoZG91YmxlX3F1b3RlKQoJCWRlc3Rbb3V0bGVuKytd ID0gSURFTlRJRklFUl9RVU9URTsKCWRlc3Rbb3V0bGVuXSA9ICdcMCc7Ck1ZTE9HKDAsICJsZWF2 aW5nIG91dHB1dD0lcyglZClcbiIsIGRlc3QsIG91dGxlbik7CglyZXR1cm4gZGVzdDsKfQoKc3Rh dGljIGNoYXIgKgpzaW1wbGVDYXRhbG9nRXNjYXBlKGNvbnN0IFNRTENIQVIgKnNyYywgU1FMTEVO IHNyY2xlbiwgY29uc3QgQ29ubmVjdGlvbkNsYXNzICpjb25uKQp7CglyZXR1cm4gaWRlbnRpZmll ckVzY2FwZShzcmMsIHNyY2xlbiwgY29ubiwgTlVMTCwgLTEsIEZBTFNFKTsKfQoKLyoKICoJUG9z dGdyZVNRTCBuZWVkcyAyICdcXCcgdG8gZXNjYXBlICdfJyBhbmQgJyUnLgogKi8Kc3RhdGljIGNo YXIJKgphZGp1c3RMaWtlUGF0dGVybihjb25zdCBTUUxDSEFSICpzcmMsIGludCBzcmNsZW4sIGNv bnN0IENvbm5lY3Rpb25DbGFzcyAqY29ubikKewoJaW50CWksIG91dGxlbjsKCVVDSEFSCXRjaGFy OwoJY2hhcgkqZGVzdCA9IE5VTEwsIGVzY2FwZV9pbl9saXRlcmFsID0gQ0NfZ2V0X2VzY2FwZShj b25uKTsKCUJPT0wJZXNjYXBlX2luID0gRkFMU0U7CgllbmNvZGVkX3N0cgllbmNzdHI7CgoJaWYg KCFzcmMgfHwgc3JjbGVuID09IFNRTF9OVUxMX0RBVEEpCgkJcmV0dXJuIGRlc3Q7CgllbHNlIGlm IChzcmNsZW4gPT0gU1FMX05UUykKCQlzcmNsZW4gPSAoaW50KSBzdHJsZW4oKGNoYXIgKikgc3Jj KTsKCS8qIGlmIChzcmNsZW4gPD0gMCkgKi8KCWlmIChzcmNsZW4gPCAwKQoJCXJldHVybiBkZXN0 OwpNWUxPRygwLCAiZW50ZXJpbmcgaW49JS4qcyglZClcbiIsIHNyY2xlbiwgc3JjLCBzcmNsZW4p OwoJZW5jb2RlZF9zdHJfY29uc3RyKCZlbmNzdHIsIGNvbm4tPmNjc2MsIChjaGFyICopIHNyYyk7 CglkZXN0ID0gbWFsbG9jKDQgKiBzcmNsZW4gKyAxKTsKCWlmICghZGVzdCkgcmV0dXJuIE5VTEw7 Cglmb3IgKGkgPSAwLCBvdXRsZW4gPSAwOyBpIDwgc3JjbGVuOyBpKyspCgl7CgkJdGNoYXIgPSBl bmNvZGVkX25leHRjaGFyKCZlbmNzdHIpOwoJCWlmIChNQkNTX05PTl9BU0NJSShlbmNzdHIpKQoJ CXsKCQkJZGVzdFtvdXRsZW4rK10gPSB0Y2hhcjsKCQkJY29udGludWU7CgkJfQoJCWlmIChlc2Nh cGVfaW4pCgkJewoJCQlzd2l0Y2ggKHRjaGFyKQoJCQl7CgkJCQljYXNlICclJzoKCQkJCWNhc2Ug J18nOgoJCQkJCWJyZWFrOwoJCQkJZGVmYXVsdDoKCQkJCQlpZiAoU0VBUkNIX1BBVFRFUk5fRVND QVBFID09IGVzY2FwZV9pbl9saXRlcmFsKQoJCQkJCQlkZXN0W291dGxlbisrXSA9IGVzY2FwZV9p bl9saXRlcmFsOwoJCQkJCWRlc3Rbb3V0bGVuKytdID0gU0VBUkNIX1BBVFRFUk5fRVNDQVBFOwoJ CQkJCWJyZWFrOwoJCQl9CgkJfQoJCWlmICh0Y2hhciA9PSBTRUFSQ0hfUEFUVEVSTl9FU0NBUEUp CgkJewoJCQllc2NhcGVfaW4gPSBUUlVFOwoJCQlpZiAoU0VBUkNIX1BBVFRFUk5fRVNDQVBFID09 IGVzY2FwZV9pbl9saXRlcmFsKQoJCQkJZGVzdFtvdXRsZW4rK10gPSBlc2NhcGVfaW5fbGl0ZXJh bDsgLyogaW5zZXJ0IDEgbW9yZSBMRVhFUiBlc2NhcGUgKi8KCQl9CgkJZWxzZQoJCXsKCQkJZXNj YXBlX2luID0gRkFMU0U7CgkJCWlmIChMSVRFUkFMX1FVT1RFID09IHRjaGFyKQoJCQkJZGVzdFtv dXRsZW4rK10gPSB0Y2hhcjsKCQl9CgkJZGVzdFtvdXRsZW4rK10gPSB0Y2hhcjsKCX0KCWlmIChl c2NhcGVfaW4pCgl7CgkJaWYgKFNFQVJDSF9QQVRURVJOX0VTQ0FQRSA9PSBlc2NhcGVfaW5fbGl0 ZXJhbCkKCQkJZGVzdFtvdXRsZW4rK10gPSBlc2NhcGVfaW5fbGl0ZXJhbDsKCQlkZXN0W291dGxl bisrXSA9IFNFQVJDSF9QQVRURVJOX0VTQ0FQRTsKCX0KCWRlc3Rbb3V0bGVuXSA9ICdcMCc7Ck1Z TE9HKDAsICJsZWF2aW5nIG91dHB1dD0lcyglZClcbiIsIGRlc3QsIG91dGxlbik7CglyZXR1cm4g ZGVzdDsKfQoKI2RlZmluZQlDU1RSX1NZU19UQUJMRQkiU1lTVEVNIFRBQkxFIgojZGVmaW5lCUNT VFJfVEFCTEUJIlRBQkxFIgojZGVmaW5lCUNTVFJfVklFVwkiVklFVyIKI2RlZmluZSBDU1RSX0ZP UkVJR05fVEFCTEUgIkZPUkVJR04gVEFCTEUiCiNkZWZpbmUgQ1NUUl9NQVRWSUVXICJNQVRWSUVX IgoKQ1NUUglsaWtlX29wX3NwID0gImxpa2UgIjsKQ1NUUglsaWtlX29wX2V4dCA9ICJsaWtlIEUi OwpDU1RSCWVxX29wX3NwID0JIj0gIjsKQ1NUUgllcV9vcF9leHQgPQkiPSBFIjsKCiNkZWZpbmUJ IElTX1ZBTElEX05BTUUoc3RyKSAoKHN0cikgJiYgKHN0cilbMF0pCgpzdGF0aWMgY29uc3QgY2hh ciAqZ2VuX29wZXN0cihjb25zdCBjaGFyICpvcmlnX29wZXN0ciwgY29uc3QgQ29ubmVjdGlvbkNs YXNzICogY29ubikKewoJQk9PTAlhZGRFID0gKDAgIT0gQ0NfZ2V0X2VzY2FwZShjb25uKSAmJiBQ R19WRVJTSU9OX0dFKGNvbm4sIDguMSkpOwoKCWlmICgwID09IHN0cmNtcChvcmlnX29wZXN0ciwg ZXFvcCkpCgkJcmV0dXJuIChhZGRFID8gZXFfb3BfZXh0IDogZXFfb3Bfc3ApOwoJcmV0dXJuIChh ZGRFID8gbGlrZV9vcF9leHQgOiBsaWtlX29wX3NwKTsKfQoKLyoKICoJSWYgc3BlY2lmaWVkIHNj aGVtYSBuYW1lID09IHVzZXJfbmFtZSBhbmQgdGhlIGN1cnJlbnQgc2NoZW1hIGlzCiAqCSdwdWJs aWMnLCBhbGxvd2VkIHRvIHVzZSB0aGUgJ3B1YmxpYycgc2NoZW1hLgogKi8Kc3RhdGljIEJPT0wK YWxsb3dfcHVibGljX3NjaGVtYShDb25uZWN0aW9uQ2xhc3MgKmNvbm4sIGNvbnN0IFNRTENIQVIg KnN6U2NoZW1hTmFtZSwgU1FMU01BTExJTlQgY2JTY2hlbWFOYW1lKQp7Cgljb25zdCBjaGFyICp1 c2VyID0gQ0NfZ2V0X3VzZXJuYW1lKGNvbm4pOwoJY29uc3QgY2hhciAqY3Vyc2NoZW1hOwoJc2l6 ZV90CXVzZXJsZW4gPSBzdHJsZW4odXNlcik7CglzaXplX3QJc2NoZW1hbGVuOwoKCWlmIChOVUxM ID09IHN6U2NoZW1hTmFtZSkKCQlyZXR1cm4gRkFMU0U7CgoJaWYgKFNRTF9OVFMgPT0gY2JTY2hl bWFOYW1lKQoJCXNjaGVtYWxlbiA9IHN0cmxlbigoY2hhciAqKSBzelNjaGVtYU5hbWUpOwoJZWxz ZQoJCXNjaGVtYWxlbiA9IGNiU2NoZW1hTmFtZTsKCglpZiAoc2NoZW1hbGVuICE9IHVzZXJsZW4p CgkJcmV0dXJuIEZBTFNFOwoJaWYgKHN0cm5pY21wKChjaGFyICopIHN6U2NoZW1hTmFtZSwgdXNl ciwgdXNlcmxlbikgIT0gMCkKCQlyZXR1cm4gRkFMU0U7CgoJY3Vyc2NoZW1hID0gQ0NfZ2V0X2N1 cnJlbnRfc2NoZW1hKGNvbm4pOwoJaWYgKGN1cnNjaGVtYSA9PSBOVUxMKQoJCXJldHVybiBGQUxT RTsKCglyZXR1cm4gc3RyaWNtcChjdXJzY2hlbWEsIChjb25zdCBjaGFyICopIHB1YnN0cikgPT0g MDsKfQoKI2RlZmluZSBUQUJMRV9JTl9SRUxLSU5ECSIoJ3InLCAndicsICdtJywgJ2YnLCAncCcp IgoKUkVUQ09ERQkJU1FMX0FQSQpQR0FQSV9UYWJsZXMoSFNUTVQgaHN0bXQsCgkJCSBjb25zdCBT UUxDSEFSICogc3pUYWJsZVF1YWxpZmllciwgLyogUFYgWCovCgkJCSBTUUxTTUFMTElOVCBjYlRh YmxlUXVhbGlmaWVyLAoJCQkgY29uc3QgU1FMQ0hBUiAqIHN6VGFibGVPd25lciwgLyogUFYgRSov CgkJCSBTUUxTTUFMTElOVCBjYlRhYmxlT3duZXIsCgkJCSBjb25zdCBTUUxDSEFSICogc3pUYWJs ZU5hbWUsIC8qIFBWIEUqLwoJCQkgU1FMU01BTExJTlQgY2JUYWJsZU5hbWUsCgkJCSBjb25zdCBT UUxDSEFSICogc3pUYWJsZVR5cGUsCgkJCSBTUUxTTUFMTElOVCBjYlRhYmxlVHlwZSwKCQkJIFVX T1JECWZsYWcpCnsKCUNTVFIgZnVuYyA9ICJQR0FQSV9UYWJsZXMiOwoJU3RhdGVtZW50Q2xhc3Mg KnN0bXQgPSAoU3RhdGVtZW50Q2xhc3MgKikgaHN0bXQ7CglTdGF0ZW1lbnRDbGFzcyAqdGJsX3N0 bXQgPSBOVUxMOwoJUVJlc3VsdENsYXNzCSpyZXM7CglUdXBsZUZpZWxkCSp0dXBsZTsKCVJFVENP REUJCXJldCA9IFNRTF9FUlJPUiwgcmVzdWx0OwoJaW50CQlyZXN1bHRfY29sczsKCWNoYXIJCSp0 YWJsZVR5cGUgPSBOVUxMOwoJUFFFeHBCdWZmZXJEYXRhCQl0YWJsZXNfcXVlcnkgPSB7MH07Cglj aGFyCQl0YWJsZV9uYW1lW01BWF9JTkZPX1NUUklOR10sCgkJCQl0YWJsZV9vd25lcltNQVhfSU5G T19TVFJJTkddLAoJCQkJcmVsa2luZF9vcl9oYXNydWxlc1tNQVhfSU5GT19TVFJJTkddOwojaWZk ZWYJSEFWRV9TVFJUT0tfUgoJY2hhcgkJKmxhc3Q7CiNlbmRpZiAvKiBIQVZFX1NUUlRPS19SICov CglDb25uZWN0aW9uQ2xhc3MgKmNvbm47CglDb25uSW5mbyAgICpjaTsKCWNoYXIJKmVzY0NhdE5h bWUgPSBOVUxMLCAqZXNjU2NoZW1hTmFtZSA9IE5VTEwsICplc2NUYWJsZU5hbWUgPSBOVUxMOwoJ LyogU3VwcG9ydCB1cCB0byAzMiBzeXN0ZW0gdGFibGUgcHJlZml4ZXMuIFNob3VsZCBiZSBtb3Jl IHRoYW4gZW5vdWdoLiAqLwojZGVmaW5lIE1BWF9QUkVGSVhFUyAzMgoJY2hhcgkgICAqcHJlZml4 W01BWF9QUkVGSVhFU10sCgkJCQlwcmVmaXhlc1tNRURJVU1fUkVHSVNUUllfTEVOXTsKCWludAkJ CW5wcmVmaXhlczsKCWNoYXIJCXNob3dfc3lzdGVtX3RhYmxlcywKCQkJCXNob3dfcmVndWxhcl90 YWJsZXMsCgkJCQlzaG93X3ZpZXdzLAoJCQkJc2hvd19tYXR2aWV3cywKCQkJCXNob3dfZm9yZWln bl90YWJsZXM7CgljaGFyCQlyZWd1bGFyX3RhYmxlLAoJCQkJdmlldywKCQkJCW1hdHZpZXcsCgkJ CQlmb3JlaWduX3RhYmxlLAoJCQkJc3lzdGFibGU7CglpbnQJCQlpOwoJU1FMU01BTExJTlQJCWlu dGVybmFsX2FzaXNfdHlwZSA9IFNRTF9DX0NIQVIsIGNiU2NoZW1hTmFtZTsKCWNvbnN0IGNoYXIJ Kmxpa2Vfb3JfZXEsICpvcF9zdHJpbmc7Cgljb25zdCBTUUxDSEFSICpzelNjaGVtYU5hbWU7CglC T09MCQlzZWFyY2hfcGF0dGVybjsKCUJPT0wJCWxpc3RfY2F0ID0gRkFMU0UsIGxpc3Rfc2NoZW1h cyA9IEZBTFNFLCBsaXN0X3RhYmxlX3R5cGVzID0gRkFMU0UsIGxpc3Rfc29tZSA9IEZBTFNFOwoJ U1FMTEVOCQljYlJlbG5hbWUsIGNiUmVsa2luZCwgY2JTY2hOYW1lOwoJRW52aXJvbm1lbnRDbGFz cyAqZW52OwoJQk9PTCBpc19PREJDMjsKCXN0YXRpYyBjb25zdCBjaGFyICpjYXRjbltdWzJdID0g ewoJCXsiVEFCTEVfQ0FUIiwgIlRBQkxFX1FVQUxJRklFUiJ9LAoJCXsiVEFCTEVfU0NIRU0iLCAi VEFCTEVfT1dORVIifSwKCQl7IlRBQkxFX05BTUUiLCAiVEFCTEVfTkFNRSJ9LAoJCXsiVEFCTEVf VFlQRSIsICJUQUJMRV9UWVBFIn0sCgkJeyJSRU1BUktTIiwgIlJFTUFSS1MifX07CgoJTVlMT0co MCwgImVudGVyaW5nLi4uc3RtdD0lcCBzY25tPSVwIGxlbj0lZFxuIiwgc3RtdCwgc3pUYWJsZU93 bmVyLCBjYlRhYmxlT3duZXIpOwoKCWlmIChyZXN1bHQgPSBTQ19pbml0aWFsaXplX2FuZF9yZWN5 Y2xlKHN0bXQpLCBTUUxfU1VDQ0VTUyAhPSByZXN1bHQpCgkJcmV0dXJuIHJlc3VsdDsKCgljb25u ID0gU0NfZ2V0X2Nvbm4oc3RtdCk7CgljaSA9ICYoY29ubi0+Y29ubkluZm8pOwoJZW52ID0gQ0Nf Z2V0X2Vudihjb25uKTsKCWlzX09EQkMyID0gRU5faXNfb2RiYzIoZW52KTsKCglyZXN1bHQgPSBQ R0FQSV9BbGxvY1N0bXQoY29ubiwgKEhTVE1UICopICZ0Ymxfc3RtdCwgMCk7CglpZiAoIVNRTF9T VUNDRUVERUQocmVzdWx0KSkKCXsKCQlTQ19zZXRfZXJyb3Ioc3RtdCwgU1RNVF9OT19NRU1PUllf RVJST1IsICJDb3VsZG4ndCBhbGxvY2F0ZSBzdGF0ZW1lbnQgZm9yIFBHQVBJX1RhYmxlcyByZXN1 bHQuIiwgZnVuYyk7CgkJcmV0dXJuIFNRTF9FUlJPUjsKCX0KCXN6U2NoZW1hTmFtZSA9IHN6VGFi bGVPd25lcjsKCWNiU2NoZW1hTmFtZSA9IGNiVGFibGVPd25lcjsKCiNkZWZpbmUJcmV0dXJuCURP TlRfQ0FMTF9SRVRVUk5fRlJPTV9IRVJFPz8/CglzZWFyY2hfcGF0dGVybiA9ICgwID09IChmbGFn ICYgUE9EQkNfTk9UX1NFQVJDSF9QQVRURVJOKSk7CglpZiAoc2VhcmNoX3BhdHRlcm4pCgl7CgkJ bGlrZV9vcl9lcSA9IGxpa2VvcDsKCQllc2NDYXROYW1lID0gYWRqdXN0TGlrZVBhdHRlcm4oc3pU YWJsZVF1YWxpZmllciwgY2JUYWJsZVF1YWxpZmllciwgY29ubik7CgkJZXNjVGFibGVOYW1lID0g YWRqdXN0TGlrZVBhdHRlcm4oc3pUYWJsZU5hbWUsIGNiVGFibGVOYW1lLCBjb25uKTsKCX0KCWVs c2UKCXsKCQlsaWtlX29yX2VxID0gZXFvcDsKCQllc2NDYXROYW1lID0gc2ltcGxlQ2F0YWxvZ0Vz Y2FwZShzelRhYmxlUXVhbGlmaWVyLCBjYlRhYmxlUXVhbGlmaWVyLCBjb25uKTsKCQllc2NUYWJs ZU5hbWUgPSBzaW1wbGVDYXRhbG9nRXNjYXBlKHN6VGFibGVOYW1lLCBjYlRhYmxlTmFtZSwgY29u bik7Cgl9CnJldHJ5X3B1YmxpY19zY2hlbWE6CglpZiAoZXNjU2NoZW1hTmFtZSkKCQlmcmVlKGVz Y1NjaGVtYU5hbWUpOwoJaWYgKHNlYXJjaF9wYXR0ZXJuKQoJCWVzY1NjaGVtYU5hbWUgPSBhZGp1 c3RMaWtlUGF0dGVybihzelNjaGVtYU5hbWUsIGNiU2NoZW1hTmFtZSwgY29ubik7CgllbHNlCgkJ ZXNjU2NoZW1hTmFtZSA9IHNpbXBsZUNhdGFsb2dFc2NhcGUoc3pTY2hlbWFOYW1lLCBjYlNjaGVt YU5hbWUsIGNvbm4pOwoJLyoKCSAqIENyZWF0ZSB0aGUgcXVlcnkgdG8gZmluZCBvdXQgdGhlIHRh YmxlcwoJICovCgkvKiBtYWtlX3N0cmluZyBtYWxsb2NzIG1lbW9yeSAqLwoJdGFibGVUeXBlID0g bWFrZV9zdHJpbmcoc3pUYWJsZVR5cGUsIGNiVGFibGVUeXBlLCBOVUxMLCAwKTsKCWlmIChzZWFy Y2hfcGF0dGVybiAmJgoJICAgIGVzY1RhYmxlTmFtZSAmJiAnXDAnID09IGVzY1RhYmxlTmFtZVsw XSAmJgoJICAgIGVzY0NhdE5hbWUgJiYgZXNjU2NoZW1hTmFtZSkKCXsKCQlpZiAoJ1wwJyA9PSBl c2NTY2hlbWFOYW1lWzBdKQoJCXsKCQkJaWYgKHN0cmljbXAoZXNjQ2F0TmFtZSwgU1FMX0FMTF9D QVRBTE9HUykgPT0gMCkKCQkJCWxpc3RfY2F0ID0gVFJVRTsKCQkJZWxzZSBpZiAoJ1wwJyA9PSBl c2NDYXROYW1lWzBdICYmCgkJCQkgc3RyaWNtcCh0YWJsZVR5cGUsIFNRTF9BTExfVEFCTEVfVFlQ RVMpID09IDApCgkJCQlsaXN0X3RhYmxlX3R5cGVzID0gVFJVRTsKCQl9CgkJZWxzZSBpZiAoJ1ww JyA9PSBlc2NDYXROYW1lWzBdICYmCgkJCSBzdHJpY21wKGVzY1NjaGVtYU5hbWUsIFNRTF9BTExf U0NIRU1BUykgPT0gMCkKCQkJbGlzdF9zY2hlbWFzID0gVFJVRTsKCX0KCWxpc3Rfc29tZSA9IChs aXN0X2NhdCB8fCBsaXN0X3NjaGVtYXMgfHwgbGlzdF90YWJsZV90eXBlcyk7CgoJaW5pdFBRRXhw QnVmZmVyKCZ0YWJsZXNfcXVlcnkpOwojZGVmaW5lCXJldHVybglET05UX0NBTExfUkVUVVJOX0ZS T01fSEVSRT8/PwoJaWYgKGxpc3RfY2F0KQoJCWFwcGVuZFBRRXhwQnVmZmVyU3RyKCZ0YWJsZXNf cXVlcnksICJzZWxlY3QgTlVMTCwgTlVMTCwgTlVMTCIpOwoJZWxzZSBpZiAobGlzdF90YWJsZV90 eXBlcykKCXsKCQkvKgoJCSAqIFF1ZXJ5IHJlbGF0aW9ucyBkZXBlbmRpbmcgb24gd2hhdCBpcyBh dmFpbGFibGU6CgkJICogLSAxMCAgYW5kIG5ld2VyIHZlcnNpb25zIGhhdmUgcGFydGl0aW9uIHRh YmxlcwoJCSAqIC0gOS4zIGFuZCBuZXdlciB2ZXJzaW9ucyBoYXZlIG1hdGVyaWFsaXplZCB2aWV3 cwoJCSAqIC0gOS4xIGFuZCBuZXdlciB2ZXJzaW9ucyBoYXZlIGZvcmVpZ24gdGFibGVzCgkJICov CgkJYXBwZW5kUFFFeHBCdWZmZXJTdHIoJnRhYmxlc19xdWVyeSwKCQkJCSJzZWxlY3QgTlVMTCwg TlVMTCwgcmVsa2luZCBmcm9tIChzZWxlY3QgJ3InIGFzIHJlbGtpbmQgIgoJCQkJInVuaW9uIHNl bGVjdCAndicgIgoJCQkJInVuaW9uIHNlbGVjdCAnbScgIgoJCQkJInVuaW9uIHNlbGVjdCAnZicg IgoJCQkJInVuaW9uIHNlbGVjdCAncCcpIGFzIGEiKTsKCX0KCWVsc2UgaWYgKGxpc3Rfc2NoZW1h cykKCXsKCQlhcHBlbmRQUUV4cEJ1ZmZlclN0cigmdGFibGVzX3F1ZXJ5LCAic2VsZWN0IE5VTEws IG5zcG5hbWUsIE5VTEwiCgkJCSIgZnJvbSBwZ19jYXRhbG9nLnBnX25hbWVzcGFjZSBuIHdoZXJl IHRydWUiKTsKCX0KCWVsc2UKCXsKCQkvKgoJCSAqIFZpZXcgaXMgcmVwcmVzZW50ZWQgYnkgaXRz IHJlbGtpbmQgc2luY2UgNy4xLAoJCSAqIE1hdGVyaWFsaXplZCB2aWV3cyBhcmUgYWRkZWQgaW4g OS4zLCBhbmQgZm9yZWlnbgoJCSAqIHRhYmxlcyBpbiA5LjEuCgkJICovCgkJYXBwZW5kUFFFeHBC dWZmZXJTdHIoJnRhYmxlc19xdWVyeSwgInNlbGVjdCByZWxuYW1lLCBuc3BuYW1lLCByZWxraW5k ICIKCQkJImZyb20gcGdfY2F0YWxvZy5wZ19jbGFzcyBjLCBwZ19jYXRhbG9nLnBnX25hbWVzcGFj ZSBuICIKCQkJIndoZXJlIHJlbGtpbmQgaW4gIiBUQUJMRV9JTl9SRUxLSU5EKTsKCX0KCglvcF9z dHJpbmcgPSBnZW5fb3Blc3RyKGxpa2Vfb3JfZXEsIGNvbm4pOwoJaWYgKCFsaXN0X3NvbWUpCgl7 CgkJc2NoZW1hX2FwcGVuZFBRRXhwQnVmZmVyMSgmdGFibGVzX3F1ZXJ5LCAiIGFuZCBuc3BuYW1l ICVzJyUuKnMnIiwgb3Bfc3RyaW5nLCBlc2NTY2hlbWFOYW1lLCBUQUJMRV9JU19WQUxJRChzelRh YmxlTmFtZSwgY2JUYWJsZU5hbWUpLCBjb25uKTsKCQlpZiAoSVNfVkFMSURfTkFNRShlc2NUYWJs ZU5hbWUpKQoJCQlhcHBlbmRQUUV4cEJ1ZmZlcigmdGFibGVzX3F1ZXJ5LAoJCQkJCSAiIGFuZCBy ZWxuYW1lICVzJyVzJyIsIG9wX3N0cmluZywgZXNjVGFibGVOYW1lKTsKCX0KCgkvKgoJICogUGFy c2UgdGhlIGV4dHJhIHN5c3RhYmxlIHByZWZpeCBjb25maWd1cmF0aW9uIHZhcmlhYmxlIGludG8g YW4gYXJyYXkKCSAqIG9mIHByZWZpeGVzLgoJICovCglTVFJDUFlfRklYRUQocHJlZml4ZXMsIGNp LT5kcml2ZXJzLmV4dHJhX3N5c3RhYmxlX3ByZWZpeGVzKTsKCWZvciAoaSA9IDA7IGkgPCBNQVhf UFJFRklYRVM7IGkrKykKCXsKCQljaGFyCSpzdHIgPSAoaSA9PSAwKSA/IHByZWZpeGVzIDogTlVM TDsKCiNpZmRlZglIQVZFX1NUUlRPS19SCgkJcHJlZml4W2ldID0gc3RydG9rX3Ioc3RyLCAiOyIs ICZsYXN0KTsKI2Vsc2UKCQlwcmVmaXhbaV0gPSBzdHJ0b2soc3RyLCAiOyIpOwojZW5kaWYgLyog SEFWRV9TVFJUT0tfUiAqLwoKCQlpZiAocHJlZml4W2ldID09IE5VTEwpCgkJCWJyZWFrOwoJfQoJ bnByZWZpeGVzID0gaTsKCgkvKiBQYXJzZSB0aGUgZGVzaXJlZCB0YWJsZSB0eXBlcyB0byByZXR1 cm4gKi8KCXNob3dfc3lzdGVtX3RhYmxlcyA9IEZBTFNFOwoJc2hvd19yZWd1bGFyX3RhYmxlcyA9 IEZBTFNFOwoJc2hvd192aWV3cyA9IEZBTFNFOwoJc2hvd19mb3JlaWduX3RhYmxlcyA9IEZBTFNF OwoJc2hvd19tYXR2aWV3cyA9IEZBTFNFOwoKCS8qIFRBQkxFX1RZUEUgKi8KCWlmICghdGFibGVU eXBlKQoJewoJCXNob3dfcmVndWxhcl90YWJsZXMgPSBUUlVFOwoJCXNob3dfdmlld3MgPSBUUlVF OwoJCXNob3dfZm9yZWlnbl90YWJsZXMgPSBUUlVFOwoJCXNob3dfbWF0dmlld3MgPSBUUlVFOwoJ fQoJZWxzZSBpZiAobGlzdF9zb21lIHx8IHN0cmljbXAodGFibGVUeXBlLCBTUUxfQUxMX1RBQkxF X1RZUEVTKSA9PSAwKQoJewoJCXNob3dfcmVndWxhcl90YWJsZXMgPSBUUlVFOwoJCXNob3dfdmll d3MgPSBUUlVFOwoJCXNob3dfZm9yZWlnbl90YWJsZXMgPSBUUlVFOwoJCXNob3dfbWF0dmlld3Mg PSBUUlVFOwoJfQoJZWxzZQoJewoJCS8qIENoZWNrIGZvciBkZXNpcmVkIHRhYmxlIHR5cGVzIHRv IHJldHVybiAqLwoJCWNoYXIgKnNyY3N0cjsKCQlmb3IgKHNyY3N0ciA9IHRhYmxlVHlwZTs7IHNy Y3N0ciA9IE5VTEwpCgkJewoJCQljaGFyICp0eXBlc3RyOwoKI2lmZGVmCUhBVkVfU1RSVE9LX1IK CQkJdHlwZXN0ciA9IHN0cnRva19yKHNyY3N0ciwgIiwiLCAmbGFzdCk7CiNlbHNlCgkJCXR5cGVz dHIgPSBzdHJ0b2soc3Jjc3RyLCAiLCIpOwojZW5kaWYgLyogSEFWRV9TVFJUT0tfUiAqLwoKCQkJ aWYgKHR5cGVzdHIgPT0gTlVMTCkKCQkJCWJyZWFrOwoKCQkJd2hpbGUgKGlzc3BhY2UoKHVuc2ln bmVkIGNoYXIpICp0eXBlc3RyKSkKCQkJCXR5cGVzdHIrKzsKCQkJaWYgKCp0eXBlc3RyID09ICdc JycpCgkJCQl0eXBlc3RyKys7CgkJCWlmIChzdHJuaWNtcCh0eXBlc3RyLCBDU1RSX1NZU19UQUJM RSwgc3RybGVuKENTVFJfU1lTX1RBQkxFKSkgPT0gMCkKCQkJCXNob3dfc3lzdGVtX3RhYmxlcyA9 IFRSVUU7CgkJCWVsc2UgaWYgKHN0cm5pY21wKHR5cGVzdHIsIENTVFJfVEFCTEUsIHN0cmxlbihD U1RSX1RBQkxFKSkgPT0gMCkKCQkJCXNob3dfcmVndWxhcl90YWJsZXMgPSBUUlVFOwoJCQllbHNl IGlmIChzdHJuaWNtcCh0eXBlc3RyLCBDU1RSX1ZJRVcsIHN0cmxlbihDU1RSX1ZJRVcpKSA9PSAw KQoJCQkJc2hvd192aWV3cyA9IFRSVUU7CgkJCWVsc2UgaWYgKHN0cm5pY21wKHR5cGVzdHIsIENT VFJfRk9SRUlHTl9UQUJMRSwgc3RybGVuKENTVFJfRk9SRUlHTl9UQUJMRSkpID09IDApCgkJCQlz aG93X2ZvcmVpZ25fdGFibGVzID0gVFJVRTsKCQkJZWxzZSBpZiAoc3RybmljbXAodHlwZXN0ciwg Q1NUUl9NQVRWSUVXLCBzdHJsZW4oQ1NUUl9NQVRWSUVXKSkgPT0gMCkKCQkJCXNob3dfbWF0dmll d3MgPSBUUlVFOwoJCX0KCX0KCgkvKgoJICogSWYgbm90IGludGVyZXN0ZWQgaW4gU1lTVEVNIFRB QkxFUyB0aGVuIGZpbHRlciB0aGVtIG91dCB0byBzYXZlCgkgKiBzb21lIHRpbWUgb24gdGhlIHF1 ZXJ5LglJZiB0cmVhdGluZyBzeXN0ZW0gdGFibGVzIGFzIHJlZ3VsYXIKCSAqIHRhYmxlcywgdGhl biBkb250IGZpbHRlciBlaXRoZXIuCgkgKi8KCWlmICgobGlzdF9zY2hlbWFzIHx8ICFsaXN0X3Nv bWUpICYmICFhdG9pKGNpLT5zaG93X3N5c3RlbV90YWJsZXMpICYmICFzaG93X3N5c3RlbV90YWJs ZXMpCgkJYXBwZW5kUFFFeHBCdWZmZXJTdHIoJnRhYmxlc19xdWVyeSwgIiBhbmQgbnNwbmFtZSBu b3QgaW4gKCdwZ19jYXRhbG9nJywgJ2luZm9ybWF0aW9uX3NjaGVtYScsICdwZ190b2FzdCcsICdw Z190ZW1wXzEnKSIpOwoKCWlmICghbGlzdF9zb21lKQoJewoJCWlmIChDQ19hY2Nlc3NpYmxlX29u bHkoY29ubikpCgkJCWFwcGVuZFBRRXhwQnVmZmVyU3RyKCZ0YWJsZXNfcXVlcnksICIgYW5kIGhh c190YWJsZV9wcml2aWxlZ2UoYy5vaWQsICdzZWxlY3QnKSIpOwoJfQoJaWYgKGxpc3Rfc2NoZW1h cykKCQlhcHBlbmRQUUV4cEJ1ZmZlclN0cigmdGFibGVzX3F1ZXJ5LCAiIG9yZGVyIGJ5IG5zcG5h bWUiKTsKCWVsc2UgaWYgKGxpc3Rfc29tZSkKCQk7CgllbHNlCgkJYXBwZW5kUFFFeHBCdWZmZXJT dHIoJnRhYmxlc19xdWVyeSwgIiBhbmQgbi5vaWQgPSByZWxuYW1lc3BhY2Ugb3JkZXIgYnkgbnNw bmFtZSwgcmVsbmFtZSIpOwoKCWlmIChQUUV4cEJ1ZmZlckRhdGFCcm9rZW4odGFibGVzX3F1ZXJ5 KSkKCXsKCQlTQ19zZXRfZXJyb3Ioc3RtdCwgU1RNVF9OT19NRU1PUllfRVJST1IsICJPdXQgb2Yg bWVtb3J5IGluIFBHQVBJX1RhYmxlcygpIiwgZnVuYyk7CgkJZ290byBjbGVhbnVwOwoJfQoJcmVz dWx0ID0gUEdBUElfRXhlY0RpcmVjdCh0Ymxfc3RtdCwgKFNRTENIQVIgKikgdGFibGVzX3F1ZXJ5 LmRhdGEsIFNRTF9OVFMsIFBPREJDX1JET05MWSk7CglpZiAoIVNRTF9TVUNDRUVERUQocmVzdWx0 KSkKCXsKCQlTQ19mdWxsX2Vycm9yX2NvcHkoc3RtdCwgdGJsX3N0bXQsIEZBTFNFKTsKCQlnb3Rv IGNsZWFudXA7Cgl9CgoJLyogSWYgbm90IGZvdW5kICovCglpZiAoKHJlcyA9IFNDX2dldF9SZXN1 bHQodGJsX3N0bXQpKSAmJgoJICAgIDAgPT0gUVJfZ2V0X251bV90b3RhbF90dXBsZXMocmVzKSkK CXsKCQlpZiAoYWxsb3dfcHVibGljX3NjaGVtYShjb25uLCBzelNjaGVtYU5hbWUsIGNiU2NoZW1h TmFtZSkpCgkJewoJCQlzelNjaGVtYU5hbWUgPSBwdWJzdHI7CgkJCWNiU2NoZW1hTmFtZSA9IFNR TF9OVFM7CgkJCWdvdG8gcmV0cnlfcHVibGljX3NjaGVtYTsKCQl9Cgl9CiNpZmRlZglVTklDT0RF X1NVUFBPUlQKCWlmIChDQ19pc19pbl91bmljb2RlX2RyaXZlcihjb25uKSkKCQlpbnRlcm5hbF9h c2lzX3R5cGUgPSBJTlRFUk5BTF9BU0lTX1RZUEU7CiNlbmRpZiAvKiBVTklDT0RFX1NVUFBPUlQg Ki8KCXJlc3VsdCA9IFBHQVBJX0JpbmRDb2wodGJsX3N0bXQsIDEsIGludGVybmFsX2FzaXNfdHlw ZSwKCQkJdGFibGVfbmFtZSwgTUFYX0lORk9fU1RSSU5HLCAmY2JSZWxuYW1lKTsKCWlmICghU1FM X1NVQ0NFRURFRChyZXN1bHQpKQoJewoJCWdvdG8gY2xlYW51cDsKCX0KCglyZXN1bHQgPSBQR0FQ SV9CaW5kQ29sKHRibF9zdG10LCAyLCBpbnRlcm5hbF9hc2lzX3R5cGUsCgkJCQkJCSAgIHRhYmxl X293bmVyLCBNQVhfSU5GT19TVFJJTkcsICZjYlNjaE5hbWUpOwoJaWYgKCFTUUxfU1VDQ0VFREVE KHJlc3VsdCkpCgl7CgkJZ290byBjbGVhbnVwOwoJfQoJcmVzdWx0ID0gUEdBUElfQmluZENvbCh0 Ymxfc3RtdCwgMywgaW50ZXJuYWxfYXNpc190eXBlLAoJCQlyZWxraW5kX29yX2hhc3J1bGVzLCBN QVhfSU5GT19TVFJJTkcsICZjYlJlbGtpbmQpOwoJaWYgKCFTUUxfU1VDQ0VFREVEKHJlc3VsdCkp Cgl7CgkJZ290byBjbGVhbnVwOwoJfQoKCWlmIChyZXMgPSBRUl9Db25zdHJ1Y3RvcigpLCAhcmVz KQoJewoJCVNDX3NldF9lcnJvcihzdG10LCBTVE1UX05PX01FTU9SWV9FUlJPUiwgIkNvdWxkbid0 IGFsbG9jYXRlIG1lbW9yeSBmb3IgUEdBUElfVGFibGVzIHJlc3VsdC4iLCBmdW5jKTsKCQlnb3Rv IGNsZWFudXA7Cgl9CglTQ19zZXRfUmVzdWx0KHN0bXQsIHJlcyk7CgoJLyogdGhlIGJpbmRpbmcg c3RydWN0dXJlIGZvciBhIHN0YXRlbWVudCBpcyBub3Qgc2V0IHVwIHVudGlsICovCgoJLyoKCSAq IGEgc3RhdGVtZW50IGlzIGFjdHVhbGx5IGV4ZWN1dGVkLCBzbyB3ZSdsbCBoYXZlIHRvIGRvIHRo aXMKCSAqIG91cnNlbHZlcy4KCSAqLwoJcmVzdWx0X2NvbHMgPSBOVU1fT0ZfVEFCTEVTX0ZJRUxE UzsKCWV4dGVuZF9jb2x1bW5fYmluZGluZ3MoU0NfZ2V0X0FSREYoc3RtdCksIHJlc3VsdF9jb2xz KTsKCglzdG10LT5jYXRhbG9nX3Jlc3VsdCA9IFRSVUU7CgkvKiBzZXQgdGhlIGZpZWxkIG5hbWVz ICovCglRUl9zZXRfbnVtX2ZpZWxkcyhyZXMsIHJlc3VsdF9jb2xzKTsKCVFSX3NldF9maWVsZF9p bmZvX0VOKHJlcywgVEFCTEVTX0NBVEFMT0dfTkFNRSwgUEdfVFlQRV9WQVJDSEFSLCBNQVhfSU5G T19TVFJJTkcpOwoJUVJfc2V0X2ZpZWxkX2luZm9fRU4ocmVzLCBUQUJMRVNfU0NIRU1BX05BTUUs IFBHX1RZUEVfVkFSQ0hBUiwgTUFYX0lORk9fU1RSSU5HKTsKCVFSX3NldF9maWVsZF9pbmZvX0VO KHJlcywgVEFCTEVTX1RBQkxFX05BTUUsIFBHX1RZUEVfVkFSQ0hBUiwgTUFYX0lORk9fU1RSSU5H KTsKCVFSX3NldF9maWVsZF9pbmZvX0VOKHJlcywgVEFCTEVTX1RBQkxFX1RZUEUsIFBHX1RZUEVf VkFSQ0hBUiwgTUFYX0lORk9fU1RSSU5HKTsKCVFSX3NldF9maWVsZF9pbmZvX0VOKHJlcywgVEFC TEVTX1JFTUFSS1MsIFBHX1RZUEVfVkFSQ0hBUiwgSU5GT19WQVJDSEFSX1NJWkUpOwoKCS8qIGFk ZCB0aGUgdHVwbGVzICovCgl0YWJsZV9uYW1lWzBdID0gJ1wwJzsKCXRhYmxlX293bmVyWzBdID0g J1wwJzsKCXJlc3VsdCA9IFBHQVBJX0ZldGNoKHRibF9zdG10KTsKCXdoaWxlIChTUUxfU1VDQ0VF REVEKHJlc3VsdCkpCgl7CgkJLyoKCQkgKiBEZXRlcm1pbmUgaWYgdGhpcyB0YWJsZSBuYW1lIGlz IGEgc3lzdGVtIHRhYmxlLiBJZiB0cmVhdGluZwoJCSAqIHN5c3RlbSB0YWJsZXMgYXMgcmVndWxh ciB0YWJsZXMsIHRoZW4gbm8gbmVlZCB0byBkbyB0aGlzIHRlc3QuCgkJICovCgkJc3lzdGFibGUg PSBGQUxTRTsKCQlpZiAoIWF0b2koY2ktPnNob3dfc3lzdGVtX3RhYmxlcykpCgkJewoJCQlpZiAo c3RyaWNtcCh0YWJsZV9vd25lciwgInBnX2NhdGFsb2ciKSA9PSAwIHx8CgkJCSAgICBzdHJpY21w KHRhYmxlX293bmVyLCAicGdfdG9hc3QiKSA9PSAwIHx8CgkJCSAgICBzdHJuaWNtcCh0YWJsZV9v d25lciwgInBnX3RlbXBfIiwgOCkgPT0gMCB8fAoJCQkgICAgc3RyaWNtcCh0YWJsZV9vd25lciwg ImluZm9ybWF0aW9uX3NjaGVtYSIpID09IDApCgkJCQlzeXN0YWJsZSA9IFRSVUU7CgkJCWVsc2UK CQkJewoJCQkJLyogQ2hlY2sgZXh0cmEgc3lzdGVtIHRhYmxlIHByZWZpeGVzICovCgkJCQlmb3Ig KGkgPSAwOyBpIDwgbnByZWZpeGVzOyBpKyspCgkJCQl7CgkJCQkJTVlMT0coMCwgInRhYmxlX25h bWU9JyVzJywgcHJlZml4WyVkXT0nJXMnXG4iLCB0YWJsZV9uYW1lLCBpLCBwcmVmaXhbaV0pOwoJ CQkJCWlmIChzdHJuY21wKHRhYmxlX25hbWUsIHByZWZpeFtpXSwgc3RybGVuKHByZWZpeFtpXSkp ID09IDApCgkJCQkJewoJCQkJCQlzeXN0YWJsZSA9IFRSVUU7CgkJCQkJCWJyZWFrOwoJCQkJCX0K CQkJCX0KCQkJfQoJCX0KCgkJLyogRGV0ZXJtaW5lIGlmIHRoZSB0YWJsZSBuYW1lIGlzIGEgdmll dyAqLwoJCXZpZXcgPSAocmVsa2luZF9vcl9oYXNydWxlc1swXSA9PSAndicpOwoKCQkvKiBDaGVj ayBmb3IgZm9yZWlnbiB0YWJsZXMgYW5kIG1hdGVyaWFsaXplZCB2aWV3cyAuLi4gKi8KCQlmb3Jl aWduX3RhYmxlID0gKHJlbGtpbmRfb3JfaGFzcnVsZXNbMF0gPT0gJ2YnKTsKCQltYXR2aWV3ID0g IChyZWxraW5kX29yX2hhc3J1bGVzWzBdID09ICdtJyk7CgoJCS8qIEl0IG11c3QgYmUgYSByZWd1 bGFyIHRhYmxlICovCgkJcmVndWxhcl90YWJsZSA9ICghc3lzdGFibGUgJiYgIXZpZXcpOwoKCQkv KiBJbmNsdWRlIHRoZSByb3cgaW4gdGhlIHJlc3VsdCBzZXQgaWYgbWVldHMgYWxsIGNyaXRlcmlh ICovCgoJCS8qCgkJICogTk9URTogVW5zdXBwb3J0ZWQgdGFibGUgdHlwZXMgKGkuZS4sIExPQ0FM IFRFTVBPUkFSWSwgQUxJQVMsCgkJICogZXRjKSB3aWxsIHJldHVybiBub3RoaW5nCgkJICovCgkJ aWYgKChzeXN0YWJsZSAmJiBzaG93X3N5c3RlbV90YWJsZXMpIHx8CgkJCSh2aWV3ICYmIHNob3df dmlld3MpIHx8CgkJCShmb3JlaWduX3RhYmxlICYmIHNob3dfZm9yZWlnbl90YWJsZXMpIHx8CgkJ CShtYXR2aWV3ICYmIHNob3dfbWF0dmlld3MpIHx8CgkJCShyZWd1bGFyX3RhYmxlICYmIHNob3df cmVndWxhcl90YWJsZXMpKQoJCXsKCQkJdHVwbGUgPSBRUl9BZGROZXcocmVzKTsKCgkJCWlmIChs aXN0X2NhdCB8fCAhbGlzdF9zb21lKQoJCQkJc2V0X3R1cGxlZmllbGRfc3RyaW5nKCZ0dXBsZVtU QUJMRVNfQ0FUQUxPR19OQU1FXSwgQ3VyckNhdChjb25uKSk7CgkJCWVsc2UKCQkJCXNldF90dXBs ZWZpZWxkX251bGwoJnR1cGxlW1RBQkxFU19DQVRBTE9HX05BTUVdKTsKCgkJCS8qCgkJCSAqIEkg aGF2ZSB0byBoaWRlIHRoZSB0YWJsZSBvd25lciBmcm9tIEFjY2Vzcywgb3RoZXJ3aXNlIGl0CgkJ CSAqIGluc2lzdHMgb24gcmVmZXJyaW5nIHRvIHRoZSB0YWJsZSBhcyAnb3duZXIudGFibGUnLiAo dGhpcwoJCQkgKiBpcyB2YWxpZCBhY2NvcmRpbmcgdG8gdGhlIE9EQkMgU1FMIGdyYW1tYXIsIGJ1 dCBQb3N0Z3JlcwoJCQkgKiB3b24ndCBzdXBwb3J0IGl0LikKCQkJICoKCQkJICogc2V0X3R1cGxl ZmllbGRfc3RyaW5nKCZ0dXBsZVtUQUJMRVNfU0NIRU1BX05BTUVdLCB0YWJsZV9vd25lcik7CgkJ CSAqLwoKCQkJTVlMT0coMCwgInRhYmxlX25hbWUgPSAnJXMnXG4iLCB0YWJsZV9uYW1lKTsKCgkJ CWlmIChsaXN0X3NjaGVtYXMgfHwgIWxpc3Rfc29tZSkKCQkJCXNldF90dXBsZWZpZWxkX3N0cmlu ZygmdHVwbGVbVEFCTEVTX1NDSEVNQV9OQU1FXSwgR0VUX1NDSEVNQV9OQU1FKHRhYmxlX293bmVy KSk7CgkJCWVsc2UKCQkJCXNldF90dXBsZWZpZWxkX251bGwoJnR1cGxlW1RBQkxFU19TQ0hFTUFf TkFNRV0pOwoJCQlpZiAobGlzdF9zb21lKQoJCQkJc2V0X3R1cGxlZmllbGRfbnVsbCgmdHVwbGVb VEFCTEVTX1RBQkxFX05BTUVdKTsKCQkJZWxzZQoJCQkJc2V0X3R1cGxlZmllbGRfc3RyaW5nKCZ0 dXBsZVtUQUJMRVNfVEFCTEVfTkFNRV0sIHRhYmxlX25hbWUpOwoJCQlpZiAobGlzdF90YWJsZV90 eXBlcyB8fCAhbGlzdF9zb21lKQoJCQl7CgkJCQlpZiAoc3lzdGFibGUpCgkJCQkJc2V0X3R1cGxl ZmllbGRfc3RyaW5nKCZ0dXBsZVtUQUJMRVNfVEFCTEVfVFlQRV0sIENTVFJfU1lTX1RBQkxFKTsK CQkJCWVsc2UgaWYgKHZpZXcpCgkJCQkJc2V0X3R1cGxlZmllbGRfc3RyaW5nKCZ0dXBsZVtUQUJM RVNfVEFCTEVfVFlQRV0sIENTVFJfVklFVyk7CgkJCQllbHNlIGlmIChtYXR2aWV3KQoJCQkJCXNl dF90dXBsZWZpZWxkX3N0cmluZygmdHVwbGVbVEFCTEVTX1RBQkxFX1RZUEVdLCBDU1RSX01BVFZJ RVcpOwoJCQkJZWxzZSBpZiAoZm9yZWlnbl90YWJsZSkKCQkJCQlzZXRfdHVwbGVmaWVsZF9zdHJp bmcoJnR1cGxlW1RBQkxFU19UQUJMRV9UWVBFXSwgQ1NUUl9GT1JFSUdOX1RBQkxFKTsKCQkJCWVs c2UKCQkJCQlzZXRfdHVwbGVmaWVsZF9zdHJpbmcoJnR1cGxlW1RBQkxFU19UQUJMRV9UWVBFXSwg Q1NUUl9UQUJMRSk7CgkJCX0KCQkJZWxzZQoJCQkJc2V0X3R1cGxlZmllbGRfbnVsbCgmdHVwbGVb VEFCTEVTX1RBQkxFX1RZUEVdKTsKCQkJc2V0X3R1cGxlZmllbGRfc3RyaW5nKCZ0dXBsZVtUQUJM RVNfUkVNQVJLU10sIE5VTExfU1RSSU5HKTsKCQkJLyoqKiBzZXRfdHVwbGVmaWVsZF9zdHJpbmco JnR1cGxlW1RBQkxFU19SRU1BUktTXSwgIlRBQkxFIik7ICoqKi8KCQl9CgkJcmVzdWx0ID0gUEdB UElfRmV0Y2godGJsX3N0bXQpOwoJfQoJaWYgKHJlc3VsdCAhPSBTUUxfTk9fREFUQV9GT1VORCkK CXsKCQlTQ19mdWxsX2Vycm9yX2NvcHkoc3RtdCwgdGJsX3N0bXQsIEZBTFNFKTsKCQlnb3RvIGNs ZWFudXA7Cgl9CglyZXQgPSBTUUxfU1VDQ0VTUzsKCmNsZWFudXA6CiN1bmRlZglyZXR1cm4KCS8q CgkgKiBhbHNvLCB0aGluZ3MgbmVlZCB0byB0aGluayB0aGF0IHRoaXMgc3RhdGVtZW50IGlzIGZp bmlzaGVkIHNvIHRoZQoJICogcmVzdWx0cyBjYW4gYmUgcmV0cmlldmVkLgoJICovCglzdG10LT5z dGF0dXMgPSBTVE1UX0ZJTklTSEVEOwoKCWlmICghU1FMX1NVQ0NFRURFRChyZXQpICYmIDAgPj0g U0NfZ2V0X2Vycm9ybnVtYmVyKHN0bXQpKQoJCVNDX2Vycm9yX2NvcHkoc3RtdCwgdGJsX3N0bXQs IFRSVUUpOwoJaWYgKCFQUUV4cEJ1ZmZlckRhdGFCcm9rZW4odGFibGVzX3F1ZXJ5KSkKCQl0ZXJt UFFFeHBCdWZmZXIoJnRhYmxlc19xdWVyeSk7CglpZiAoZXNjQ2F0TmFtZSkKCQlmcmVlKGVzY0Nh dE5hbWUpOwoJaWYgKGVzY1NjaGVtYU5hbWUpCgkJZnJlZShlc2NTY2hlbWFOYW1lKTsKCWlmIChl c2NUYWJsZU5hbWUpCgkJZnJlZShlc2NUYWJsZU5hbWUpOwoJaWYgKHRhYmxlVHlwZSkKCQlmcmVl KHRhYmxlVHlwZSk7CgkvKiBzZXQgdXAgdGhlIGN1cnJlbnQgdHVwbGUgcG9pbnRlciBmb3IgU1FM RmV0Y2ggKi8KCXN0bXQtPmN1cnJUdXBsZSA9IC0xOwoJU0Nfc2V0X3Jvd3NldF9zdGFydChzdG10 LCAtMSwgRkFMU0UpOwoJU0Nfc2V0X2N1cnJlbnRfY29sKHN0bXQsIC0xKTsKCglpZiAodGJsX3N0 bXQpCgkJUEdBUElfRnJlZVN0bXQodGJsX3N0bXQsIFNRTF9EUk9QKTsKCglNWUxPRygwLCAibGVh dmluZyBzdG10PSVwLCByZXQ9JWRcbiIsIHN0bXQsIHJldCk7CglyZXR1cm4gcmV0Owp9CgovKgog KgltYWNyb3MgZm9yIHBndHlwZV9hdHRyX3h4eHgoKSBjYWxscyB3aGljaCBoYXZlCiAqCQlQR19B RFRfVU5TRVQgb3IgUEdfVU5LTk9XTlNfVU5TRVQgcGFyYW1ldGVycwogKi8KI2RlZmluZSBQR1RZ UEVfQVRUUl9DT0xVTU5fU0laRShjb25uLCBwZ1R5cGUsIGF0dHR5cG1vZCkgcGd0eXBlX2F0dHJf Y29sdW1uX3NpemUoY29ubiwgcGdUeXBlLCBhdHR0eXBtb2QsIFBHX0FEVF9VTlNFVCwgUEdfVU5L Tk9XTlNfVU5TRVQpCiNkZWZpbmUgUEdUWVBFX0FUVFJfVE9fQ09OQ0lTRV9UWVBFKGNvbm4sIHBn VHlwZSwgYXR0dHlwbW9kKSBwZ3R5cGVfYXR0cl90b19jb25jaXNlX3R5cGUoY29ubiwgcGdUeXBl LCBhdHR0eXBtb2QsIFBHX0FEVF9VTlNFVCwgUEdfVU5LTk9XTlNfVU5TRVQpCiNkZWZpbmUgUEdU WVBFX0FUVFJfVE9fU1FMREVTQ1RZUEUoY29ubiwgcGdUeXBlLCBhdHR0eXBtb2QpIHBndHlwZV9h dHRyX3RvX3NxbGRlc2N0eXBlKGNvbm4sIHBnVHlwZSwgYXR0dHlwbW9kLCBQR19BRFRfVU5TRVQs IFBHX1VOS05PV05TX1VOU0VUKQojZGVmaW5lIFBHVFlQRV9BVFRSX0RJU1BMQVlfU0laRShjb25u LCBwZ1R5cGUsIGF0dHR5cG1vZCkgcGd0eXBlX2F0dHJfZGlzcGxheV9zaXplKGNvbm4sIHBnVHlw ZSwgYXR0dHlwbW9kLCBQR19BRFRfVU5TRVQsIFBHX1VOS05PV05TX1VOU0VUKQojZGVmaW5lIFBH VFlQRV9BVFRSX0JVRkZFUl9MRU5HVEgoY29ubiwgcGdUeXBlLCBhdHR0eXBtb2QpIHBndHlwZV9h dHRyX2J1ZmZlcl9sZW5ndGgoY29ubiwgcGdUeXBlLCBhdHR0eXBtb2QsIFBHX0FEVF9VTlNFVCwg UEdfVU5LTk9XTlNfVU5TRVQpCiNkZWZpbmUgUEdUWVBFX0FUVFJfREVDSU1BTF9ESUdJVFMoY29u biwgcGdUeXBlLCBhdHR0eXBtb2QpIHBndHlwZV9hdHRyX2RlY2ltYWxfZGlnaXRzKGNvbm4sIHBn VHlwZSwgYXR0dHlwbW9kLCBQR19BRFRfVU5TRVQsIFBHX1VOS05PV05TX1VOU0VUKQojZGVmaW5l IFBHVFlQRV9BVFRSX1RSQU5TRkVSX09DVEVUX0xFTkdUSChjb25uLCBwZ1R5cGUsIGF0dHR5cG1v ZCkgcGd0eXBlX2F0dHJfdHJhbnNmZXJfb2N0ZXRfbGVuZ3RoKGNvbm4sIHBnVHlwZSwgYXR0dHlw bW9kLCBQR19VTktOT1dOU19VTlNFVCkKCi8qCiAqCWZvciBvaWQgb3IgeG1pbgogKi8Kc3RhdGlj IHZvaWQKYWRkX3R1cGxlX2Zvcl9vaWRfb3JfeG1pbihUdXBsZUZpZWxkICp0dXBsZSwgaW50IG9y ZGluYWwsIGNvbnN0IGNoYXIgKmNvbG5hbWUsIE9JRCB0aGVfdHlwZSwgY29uc3QgY2hhciAqdHlw bmFtZSwgY29uc3QgQ29ubmVjdGlvbkNsYXNzICpjb25uLCBjb25zdCBjaGFyICp0YWJsZV9vd25l ciwgY29uc3QgY2hhciAqdGFibGVfbmFtZSwgT0lEIGdyZWxvaWQsIGludCBhdHRudW0sIEJPT0wg YXV0b19pbmNyZW1lbnQsIGludCB0YWJsZV9pbmZvKQp7CglpbnQJc3FsdHlwZTsKCWNvbnN0IGlu dCBhdHR0eXBtb2QgPSAtMTsKCglzZXRfdHVwbGVmaWVsZF9zdHJpbmcoJnR1cGxlW0NPTFVNTlNf Q0FUQUxPR19OQU1FXSwgQ3VyckNhdChjb25uKSk7CgkvKiBzZWUgbm90ZSBpbiBTUUxUYWJsZXMo KSAqLwoJc2V0X3R1cGxlZmllbGRfc3RyaW5nKCZ0dXBsZVtDT0xVTU5TX1NDSEVNQV9OQU1FXSwg R0VUX1NDSEVNQV9OQU1FKHRhYmxlX293bmVyKSk7CglzZXRfdHVwbGVmaWVsZF9zdHJpbmcoJnR1 cGxlW0NPTFVNTlNfVEFCTEVfTkFNRV0sIHRhYmxlX25hbWUpOwoJc2V0X3R1cGxlZmllbGRfc3Ry aW5nKCZ0dXBsZVtDT0xVTU5TX0NPTFVNTl9OQU1FXSwgY29sbmFtZSk7CglzcWx0eXBlID0gUEdU WVBFX0FUVFJfVE9fQ09OQ0lTRV9UWVBFKGNvbm4sIHRoZV90eXBlLCBhdHR0eXBtb2QpOwoJc2V0 X3R1cGxlZmllbGRfaW50MigmdHVwbGVbQ09MVU1OU19EQVRBX1RZUEVdLCBzcWx0eXBlKTsKCXNl dF90dXBsZWZpZWxkX3N0cmluZygmdHVwbGVbQ09MVU1OU19UWVBFX05BTUVdLCB0eXBuYW1lKTsK CglzZXRfdHVwbGVmaWVsZF9pbnQ0KCZ0dXBsZVtDT0xVTU5TX1BSRUNJU0lPTl0sIFBHVFlQRV9B VFRSX0NPTFVNTl9TSVpFKGNvbm4sIHRoZV90eXBlLCBhdHR0eXBtb2QpKTsKCXNldF90dXBsZWZp ZWxkX2ludDQoJnR1cGxlW0NPTFVNTlNfTEVOR1RIXSwgUEdUWVBFX0FUVFJfQlVGRkVSX0xFTkdU SChjb25uLCB0aGVfdHlwZSwgYXR0dHlwbW9kKSk7CglzZXRfbnVsbGZpZWxkX2ludDIoJnR1cGxl W0NPTFVNTlNfU0NBTEVdLCBQR1RZUEVfQVRUUl9ERUNJTUFMX0RJR0lUUyhjb25uLCB0aGVfdHlw ZSwgYXR0dHlwbW9kKSk7CglzZXRfbnVsbGZpZWxkX2ludDIoJnR1cGxlW0NPTFVNTlNfUkFESVhd LCBwZ3R5cGVfcmFkaXgoY29ubiwgdGhlX3R5cGUpKTsKCXNldF90dXBsZWZpZWxkX2ludDIoJnR1 cGxlW0NPTFVNTlNfTlVMTEFCTEVdLCBTUUxfTk9fTlVMTFMpOwoJc2V0X3R1cGxlZmllbGRfc3Ry aW5nKCZ0dXBsZVtDT0xVTU5TX1JFTUFSS1NdLCBOVUxMX1NUUklORyk7CglzZXRfdHVwbGVmaWVs ZF9udWxsKCZ0dXBsZVtDT0xVTU5TX0NPTFVNTl9ERUZdKTsKCXNldF90dXBsZWZpZWxkX2ludDIo JnR1cGxlW0NPTFVNTlNfU1FMX0RBVEFfVFlQRV0sIHNxbHR5cGUpOwoJc2V0X3R1cGxlZmllbGRf bnVsbCgmdHVwbGVbQ09MVU1OU19TUUxfREFURVRJTUVfU1VCXSk7CglzZXRfdHVwbGVmaWVsZF9u dWxsKCZ0dXBsZVtDT0xVTU5TX0NIQVJfT0NURVRfTEVOR1RIXSk7CglzZXRfdHVwbGVmaWVsZF9p bnQ0KCZ0dXBsZVtDT0xVTU5TX09SRElOQUxfUE9TSVRJT05dLCBvcmRpbmFsKTsKCXNldF90dXBs ZWZpZWxkX3N0cmluZygmdHVwbGVbQ09MVU1OU19JU19OVUxMQUJMRV0sICJObyIpOwoJc2V0X3R1 cGxlZmllbGRfaW50NCgmdHVwbGVbQ09MVU1OU19ESVNQTEFZX1NJWkVdLCBQR1RZUEVfQVRUUl9E SVNQTEFZX1NJWkUoY29ubiwgdGhlX3R5cGUsIGF0dHR5cG1vZCkpOwoJc2V0X3R1cGxlZmllbGRf aW50NCgmdHVwbGVbQ09MVU1OU19GSUVMRF9UWVBFXSwgdGhlX3R5cGUpOwoJc2V0X3R1cGxlZmll bGRfaW50NCgmdHVwbGVbQ09MVU1OU19BVVRPX0lOQ1JFTUVOVF0sIGF1dG9faW5jcmVtZW50KTsK CXNldF90dXBsZWZpZWxkX2ludDIoJnR1cGxlW0NPTFVNTlNfUEhZU0lDQUxfTlVNQkVSXSwgYXR0 bnVtKTsKCXNldF90dXBsZWZpZWxkX2ludDQoJnR1cGxlW0NPTFVNTlNfVEFCTEVfT0lEXSwgZ3Jl bG9pZCk7CglzZXRfdHVwbGVmaWVsZF9pbnQ0KCZ0dXBsZVtDT0xVTU5TX0JBU0VfVFlQRUlEXSwg MCk7CglzZXRfdHVwbGVmaWVsZF9pbnQ0KCZ0dXBsZVtDT0xVTU5TX0FUVFRZUE1PRF0sIC0xKTsK CXNldF90dXBsZWZpZWxkX2ludDQoJnR1cGxlW0NPTFVNTlNfVEFCTEVfSU5GT10sIHRhYmxlX2lu Zm8pOwp9CgpSRVRDT0RFCQlTUUxfQVBJClBHQVBJX0NvbHVtbnMoSFNUTVQgaHN0bXQsCgkJCSAg Y29uc3QgU1FMQ0hBUiAqIHN6VGFibGVRdWFsaWZpZXIsIC8qIE9BIFgqLwoJCQkgIFNRTFNNQUxM SU5UIGNiVGFibGVRdWFsaWZpZXIsCgkJCSAgY29uc3QgU1FMQ0hBUiAqIHN6VGFibGVPd25lciwg LyogUFYgRSovCgkJCSAgU1FMU01BTExJTlQgY2JUYWJsZU93bmVyLAoJCQkgIGNvbnN0IFNRTENI QVIgKiBzelRhYmxlTmFtZSwgLyogUFYgRSovCgkJCSAgU1FMU01BTExJTlQgY2JUYWJsZU5hbWUs CgkJCSAgY29uc3QgU1FMQ0hBUiAqIHN6Q29sdW1uTmFtZSwgLyogUFYgRSovCgkJCSAgU1FMU01B TExJTlQgY2JDb2x1bW5OYW1lLAoJCQkgIFVXT1JECWZsYWcsCgkJCSAgT0lECXJlbG9pZCwKCQkJ ICBJbnQyCWF0dG51bSkKewoJQ1NUUiBmdW5jID0gIlBHQVBJX0NvbHVtbnMiOwoJU3RhdGVtZW50 Q2xhc3MgKnN0bXQgPSAoU3RhdGVtZW50Q2xhc3MgKikgaHN0bXQ7CglRUmVzdWx0Q2xhc3MJKnJl czsKCVR1cGxlRmllbGQJKnR1cGxlOwoJU3RhdGVtZW50Q2xhc3MgKmNvbF9zdG10ID0gTlVMTDsK CVBRRXhwQnVmZmVyRGF0YQkJY29sdW1uc19xdWVyeSA9IHswfTsKCVJFVENPREUJCXJldCA9IFNR TF9FUlJPUiwgcmVzdWx0OwoJY2hhcgkJdGFibGVfb3duZXJbTUFYX0lORk9fU1RSSU5HXSwKCQkJ CXRhYmxlX25hbWVbTUFYX0lORk9fU1RSSU5HXSwKCQkJCWZpZWxkX25hbWVbTUFYX0lORk9fU1RS SU5HXSwKCQkJCWZpZWxkX3R5cGVfbmFtZVtNQVhfSU5GT19TVFJJTkddOwoJSW50MgkJZmllbGRf bnVtYmVyLCBzcWx0eXBlLCBjb25jaXNlX3R5cGUsCgkJCQlyZXN1bHRfY29sczsKCUludDQJCW1v ZF9sZW5ndGgsCgkJCQlvcmRpbmFsLAoJCQkJdHlwbW9kLCByZWxoYXNvaWRzLCByZWxoYXNzdWJj bGFzczsKCU9JRAkJZmllbGRfdHlwZSwgZ3JlbG9pZCwgYmFzZXR5cGU7CgljaGFyCQlub3RfbnVs bFtNQVhfSU5GT19TVFJJTkddLAoJCQkJcmVsaGFzcnVsZXNbTUFYX0lORk9fU1RSSU5HXSwgcmVs a2luZFs4XSwgYXR0aWRlbnRpdHlbMl07CgljaGFyCSplc2NTY2hlbWFOYW1lID0gTlVMTCwgKmVz Y1RhYmxlTmFtZSA9IE5VTEwsICplc2NDb2x1bW5OYW1lID0gTlVMTDsKCUJPT0wJc2VhcmNoX3Bh dHRlcm4gPSBUUlVFLCBzZWFyY2hfYnlfaWRzLCByZWxpc2F2aWV3LCBzaG93X29pZF9jb2x1bW4s IHJvd192ZXJzaW9uaW5nOwoJQ29ubkluZm8gICAqY2k7CglDb25uZWN0aW9uQ2xhc3MgKmNvbm47 CglTUUxTTUFMTElOVAlpbnRlcm5hbF9hc2lzX3R5cGUgPSBTUUxfQ19DSEFSLCBjYlNjaGVtYU5h bWU7Cgljb25zdCBjaGFyCSpsaWtlX29yX2VxID0gbGlrZW9wLCAqb3Bfc3RyaW5nOwoJY29uc3Qg U1FMQ0hBUiAqc3pTY2hlbWFOYW1lOwoJQk9PTAlzZXRJZGVudGl0eSA9IEZBTFNFOwoJaW50CXRh YmxlX2luZm8gPSAwOwoKCXN0YXRpYyBjb25zdCBjaGFyICpjYXRjbltdWzJdID0gewoJCXsiVEFC TEVfQ0FUIiwgIlRBQkxFX1FVQUxJRklFUiJ9LAoJCXsiVEFCTEVfU0NIRU0iLCAiVEFCTEVfT1dO RVIifSwKCQl7IlRBQkxFX05BTUUiLCAiVEFCTEVfTkFNRSJ9LAoJCXsiQ09MVU1OX05BTUUiLCAi Q09MVU1OX05BTUUifSwKCQl7IkRBVEFfVFlQRSIsICJEQVRBX1RZUEUifSwKCQl7IlRZUEVfTkFN RSIsICJUWVBFX05BTUUifSwKCQl7IkNPTFVNTl9TSVpFIiwgIlBSRUNJU0lPTiJ9LAoJCXsiQlVG RkVSX0xFTkdUSCIsICJMRU5HVEgifSwKCQl7IkRFQ0lNQUxfRElHSVRTIiwgIlNDQUxFIn0sCgkJ eyJOVU1fUFJFQ19SQURJWCIsICJSQURJWCJ9LAoJCXsiTlVMTEFCTEUiLCAiTlVMTEFCTEUifSwK CQl7IlJFTUFSS1MiLCAiUkVNQVJLUyJ9LAoJCXsiQ09MVU1OX0RFRiIsICJDT0xVTU5fREVGIn0s CgkJeyJTUUxfREFUQV9UWVBFIiwgIlNRTF9EQVRBX1RZUEUifSwKCQl7IlNRTF9EQVRFVElNRV9T VUIiLCAiU1FMX0RBVEVUSU1FX1NVQiJ9LAoJCXsiQ0hBUl9PQ1RFVF9MRU5HVEgiLCAiQ0hBUl9P Q1RFVF9MRU5HVEgifSwKCQl7Ik9SRElOQUxfUE9TSVRJT04iLCAiT1JESU5BTF9QT1NJVElPTiJ9 LAoJCXsiSVNfTlVMTEFCTEUiLCAiSVNfTlVMTEFCTEUifSwKCS8qIFVzZXIgZGVmaW5lZCBmaWVs ZHMgKi8KCQl7IkRJU1BMQVlfU0laRSIsICJESVNQTEFZX1NJWkUifSwKCQl7IkZJRUxEX1RZUEUi LCAiRklFTERfVFlQRSJ9LAoJCXsiQVVUT19JTkNSRU1FTlQiLCAiQVVUT19JTkNSRU1FTlQifSwK CQl7IlBIWVNJQ0FMIE5VTUJFUiIsICJQSFlTSUNBTCBOVU1CRVIifSwKCQl7IlRBQkxFIE9JRCIs ICJUQUJMRSBPSUQifSwKCQl7IkJBU0UgVFlQRUlEIiwgIkJBU0UgVFlQRUlEIn0sCgkJeyJUWVBN T0QiLCAiVFlQTU9EIn0sCgkJeyJUQUJMRSBJTkZPIiwgIlRBQkxFIElORk8ifSB9OwoJRW52aXJv bm1lbnRDbGFzcyAqZW52OwoJQk9PTCBpc19PREJDMjsKCglNWUxPRygwLCAiZW50ZXJpbmcuLi5z dG10PSVwIHNjbm09JXAgbGVuPSVkIGNvbHVtbk9wdD0leFxuIiwgc3RtdCwgc3pUYWJsZU93bmVy LCBjYlRhYmxlT3duZXIsIGZsYWcpOwoKCWlmIChyZXN1bHQgPSBTQ19pbml0aWFsaXplX2FuZF9y ZWN5Y2xlKHN0bXQpLCBTUUxfU1VDQ0VTUyAhPSByZXN1bHQpCgkJcmV0dXJuIHJlc3VsdDsKCglj b25uID0gU0NfZ2V0X2Nvbm4oc3RtdCk7CgljaSA9ICYoY29ubi0+Y29ubkluZm8pOwoJZW52ID0g Q0NfZ2V0X2Vudihjb25uKTsKCWlzX09EQkMyID0gRU5faXNfb2RiYzIoZW52KTsKI2lmZGVmCVVO SUNPREVfU1VQUE9SVAoJaWYgKENDX2lzX2luX3VuaWNvZGVfZHJpdmVyKGNvbm4pKQoJCWludGVy bmFsX2FzaXNfdHlwZSA9IElOVEVSTkFMX0FTSVNfVFlQRTsKI2VuZGlmIC8qIFVOSUNPREVfU1VQ UE9SVCAqLwoKI2RlZmluZQlyZXR1cm4JRE9OVF9DQUxMX1JFVFVSTl9GUk9NX0hFUkU/Pz8KCXNo b3dfb2lkX2NvbHVtbiA9ICgoZmxhZyAmIFBPREJDX1NIT1dfT0lEX0NPTFVNTikgIT0gMCk7Cgly b3dfdmVyc2lvbmluZyA9ICgoZmxhZyAmIFBPREJDX1JPV19WRVJTSU9OSU5HKSAhPSAwKTsKCXNl YXJjaF9ieV9pZHMgPSAoKGZsYWcgJiBQT0RCQ19TRUFSQ0hfQllfSURTKSAhPSAwKTsKCWlmIChz ZWFyY2hfYnlfaWRzKQoJewoJCXN6U2NoZW1hTmFtZSA9IE5VTEw7CgkJY2JTY2hlbWFOYW1lID0g U1FMX05VTExfREFUQTsKCX0KCWVsc2UKCXsKCQlzelNjaGVtYU5hbWUgPSBzelRhYmxlT3duZXI7 CgkJY2JTY2hlbWFOYW1lID0gY2JUYWJsZU93bmVyOwoJCXJlbG9pZCA9IDA7CgkJYXR0bnVtID0g MDsKCQkvKgoJCSAqCVRhYmxlTmFtZSBvciBDb2x1bW5OYW1lIGlzIG9yZGluYXJpbHkgYW4gcGF0 dGVybiB2YWx1ZSwKCQkgKi8KCQlzZWFyY2hfcGF0dGVybiA9ICgoZmxhZyAmIFBPREJDX05PVF9T RUFSQ0hfUEFUVEVSTikgPT0gMCk7CgkJaWYgKHNlYXJjaF9wYXR0ZXJuKQoJCXsKCQkJbGlrZV9v cl9lcSA9IGxpa2VvcDsKCQkJZXNjVGFibGVOYW1lID0gYWRqdXN0TGlrZVBhdHRlcm4oc3pUYWJs ZU5hbWUsIGNiVGFibGVOYW1lLCBjb25uKTsKCQkJZXNjQ29sdW1uTmFtZSA9IGFkanVzdExpa2VQ YXR0ZXJuKHN6Q29sdW1uTmFtZSwgY2JDb2x1bW5OYW1lLCBjb25uKTsKCQl9CgkJZWxzZQoJCXsK CQkJbGlrZV9vcl9lcSA9IGVxb3A7CgkJCWVzY1RhYmxlTmFtZSA9IHNpbXBsZUNhdGFsb2dFc2Nh cGUoc3pUYWJsZU5hbWUsIGNiVGFibGVOYW1lLCBjb25uKTsKCQkJZXNjQ29sdW1uTmFtZSA9IHNp bXBsZUNhdGFsb2dFc2NhcGUoc3pDb2x1bW5OYW1lLCBjYkNvbHVtbk5hbWUsIGNvbm4pOwoJCX0K CX0KcmV0cnlfcHVibGljX3NjaGVtYToKCWlmICghc2VhcmNoX2J5X2lkcykKCXsKCQlpZiAoZXNj U2NoZW1hTmFtZSkKCQkJZnJlZShlc2NTY2hlbWFOYW1lKTsKCQlpZiAoc2VhcmNoX3BhdHRlcm4p CgkJCWVzY1NjaGVtYU5hbWUgPSBhZGp1c3RMaWtlUGF0dGVybihzelNjaGVtYU5hbWUsIGNiU2No ZW1hTmFtZSwgY29ubik7CgkJZWxzZQoJCQllc2NTY2hlbWFOYW1lID0gc2ltcGxlQ2F0YWxvZ0Vz Y2FwZShzelNjaGVtYU5hbWUsIGNiU2NoZW1hTmFtZSwgY29ubik7Cgl9Cglpbml0UFFFeHBCdWZm ZXIoJmNvbHVtbnNfcXVlcnkpOwojZGVmaW5lCXJldHVybglET05UX0NBTExfUkVUVVJOX0ZST01f SEVSRT8/PwoJLyoKCSAqIENyZWF0ZSB0aGUgcXVlcnkgdG8gZmluZCBvdXQgdGhlIGNvbHVtbnMg KE5vdGU6IHByZSA2LjMgZGlkIG5vdAoJICogaGF2ZSB0aGUgYXR0dHlwbW9kIGZpZWxkKQoJICov CglvcF9zdHJpbmcgPSBnZW5fb3Blc3RyKGxpa2Vfb3JfZXEsIGNvbm4pOwoJcHJpbnRmUFFFeHBC dWZmZXIoJmNvbHVtbnNfcXVlcnksCgkJInNlbGVjdCBuLm5zcG5hbWUsIGMucmVsbmFtZSwgYS5h dHRuYW1lLCBhLmF0dHR5cGlkLCAiCgkJInQudHlwbmFtZSwgYS5hdHRudW0sIGEuYXR0bGVuLCBh LmF0dHR5cG1vZCwgYS5hdHRub3RudWxsLCAiCgkJImMucmVsaGFzcnVsZXMsIGMucmVsa2luZCwg Yy5vaWQsIHBnX2dldF9leHByKGQuYWRiaW4sIGQuYWRyZWxpZCksICIKICAgICAgICAiY2FzZSB0 LnR5cHR5cGUgd2hlbiAnZCcgdGhlbiB0LnR5cGJhc2V0eXBlIGVsc2UgMCBlbmQsIHQudHlwdHlw bW9kLCAiCiAgICAgICAgIiVzLCAlcywgYy5yZWxoYXNzdWJjbGFzcyAiCgkJImZyb20gKCgocGdf Y2F0YWxvZy5wZ19jbGFzcyBjICIKCQkiaW5uZXIgam9pbiBwZ19jYXRhbG9nLnBnX25hbWVzcGFj ZSBuIG9uIG4ub2lkID0gYy5yZWxuYW1lc3BhY2UiLAogICAgICAgICAgICBQR19WRVJTSU9OX0dF KGNvbm4sIDEyLjApID8gIjAiIDogImMucmVsaGFzb2lkcyIsCiAgICAgICAgICAgIFBHX1ZFUlNJ T05fR0UoY29ubiwgMTAuMCkgPyAiYXR0aWRlbnRpdHkiIDogIicnIik7CglpZiAoc2VhcmNoX2J5 X2lkcykKCQlhcHBlbmRQUUV4cEJ1ZmZlcigmY29sdW1uc19xdWVyeSwgIiBhbmQgYy5vaWQgPSAl dSIsIHJlbG9pZCk7CgllbHNlCgl7CgkJaWYgKGVzY1RhYmxlTmFtZSkKCQkJYXBwZW5kUFFFeHBC dWZmZXIoJmNvbHVtbnNfcXVlcnksICIgYW5kIGMucmVsbmFtZSAlcyclcyciLCBvcF9zdHJpbmcs IGVzY1RhYmxlTmFtZSk7CgkJc2NoZW1hX2FwcGVuZFBRRXhwQnVmZmVyMSgmY29sdW1uc19xdWVy eSwgIiBhbmQgbi5uc3BuYW1lICVzJyUuKnMnIiwgb3Bfc3RyaW5nLCBlc2NTY2hlbWFOYW1lLCBU QUJMRV9JU19WQUxJRChzelRhYmxlTmFtZSwgY2JUYWJsZU5hbWUpLCBjb25uKTsKCX0KCWFwcGVu ZFBRRXhwQnVmZmVyU3RyKCZjb2x1bW5zX3F1ZXJ5LCAiKSBpbm5lciBqb2luIHBnX2NhdGFsb2cu cGdfYXR0cmlidXRlIGEiCgkJIiBvbiAobm90IGEuYXR0aXNkcm9wcGVkKSIpOwoJaWYgKDAgPT0g YXR0bnVtICYmIChOVUxMID09IGVzY0NvbHVtbk5hbWUgfHwgbGlrZV9vcl9lcSAhPSBlcW9wKSkK CQlhcHBlbmRQUUV4cEJ1ZmZlclN0cigmY29sdW1uc19xdWVyeSwgIiBhbmQgYS5hdHRudW0gPiAw Iik7CglpZiAoc2VhcmNoX2J5X2lkcykKCXsKCQlpZiAoYXR0bnVtICE9IDApCgkJCWFwcGVuZFBR RXhwQnVmZmVyKCZjb2x1bW5zX3F1ZXJ5LCAiIGFuZCBhLmF0dG51bSA9ICVkIiwgYXR0bnVtKTsK CX0KCWVsc2UgaWYgKGVzY0NvbHVtbk5hbWUpCgkJYXBwZW5kUFFFeHBCdWZmZXIoJmNvbHVtbnNf cXVlcnksICIgYW5kIGEuYXR0bmFtZSAlcyclcyciLCBvcF9zdHJpbmcsIGVzY0NvbHVtbk5hbWUp OwoJYXBwZW5kUFFFeHBCdWZmZXJTdHIoJmNvbHVtbnNfcXVlcnksCgkJIiBhbmQgYS5hdHRyZWxp ZCA9IGMub2lkKSBpbm5lciBqb2luIHBnX2NhdGFsb2cucGdfdHlwZSB0IgoJCSIgb24gdC5vaWQg PSBhLmF0dHR5cGlkKSBsZWZ0IG91dGVyIGpvaW4gcGdfYXR0cmRlZiBkIgoJCSIgb24gYS5hdHRo YXNkZWYgYW5kIGQuYWRyZWxpZCA9IGEuYXR0cmVsaWQgYW5kIGQuYWRudW0gPSBhLmF0dG51bSIp OwoJYXBwZW5kUFFFeHBCdWZmZXJTdHIoJmNvbHVtbnNfcXVlcnksICIgb3JkZXIgYnkgbi5uc3Bu YW1lLCBjLnJlbG5hbWUsIGF0dG51bSIpOwoJaWYgKFBRRXhwQnVmZmVyRGF0YUJyb2tlbihjb2x1 bW5zX3F1ZXJ5KSkKCXsKCQlTQ19zZXRfZXJyb3Ioc3RtdCwgU1RNVF9OT19NRU1PUllfRVJST1Is ICJPdXQgb2YgbWVtb3J5IGluIFBHQVBJX0NvbHVtbnMoKSIsIGZ1bmMpOwoJCWdvdG8gY2xlYW51 cDsKCX0KCXJlc3VsdCA9IFBHQVBJX0FsbG9jU3RtdChjb25uLCAoSFNUTVQgKikgJmNvbF9zdG10 LCAwKTsKCWlmICghU1FMX1NVQ0NFRURFRChyZXN1bHQpKQoJewoJCVNDX3NldF9lcnJvcihzdG10 LCBTVE1UX05PX01FTU9SWV9FUlJPUiwgIkNvdWxkbid0IGFsbG9jYXRlIHN0YXRlbWVudCBmb3Ig UEdBUElfQ29sdW1ucyByZXN1bHQuIiwgZnVuYyk7CgkJZ290byBjbGVhbnVwOwoJfQoKCU1ZTE9H KDAsICJjb2xfc3RtdCA9ICVwXG4iLCBjb2xfc3RtdCk7CgoJcmVzdWx0ID0gUEdBUElfRXhlY0Rp cmVjdChjb2xfc3RtdCwgKFNRTENIQVIgKikgY29sdW1uc19xdWVyeS5kYXRhLCBTUUxfTlRTLCBQ T0RCQ19SRE9OTFkpOwoJaWYgKCFTUUxfU1VDQ0VFREVEKHJlc3VsdCkpCgl7CgkJU0NfZnVsbF9l cnJvcl9jb3B5KHN0bXQsIGNvbF9zdG10LCBGQUxTRSk7CgkJZ290byBjbGVhbnVwOwoJfQoKCS8q IElmIG5vdCBmb3VuZCAqLwoJaWYgKChmbGFnICYgUE9EQkNfU0VBUkNIX1BVQkxJQ19TQ0hFTUEp ICE9IDAgJiYKCSAgICAocmVzID0gU0NfZ2V0X1Jlc3VsdChjb2xfc3RtdCkpICYmCgkgICAgMCA9 PSBRUl9nZXRfbnVtX3RvdGFsX3R1cGxlcyhyZXMpKQoJewoJCWlmICghc2VhcmNoX2J5X2lkcyAm JgoJCSAgICBhbGxvd19wdWJsaWNfc2NoZW1hKGNvbm4sIHN6U2NoZW1hTmFtZSwgY2JTY2hlbWFO YW1lKSkKCQl7CgkJCVBHQVBJX0ZyZWVTdG10KGNvbF9zdG10LCBTUUxfRFJPUCk7CgkJCWNvbF9z dG10ID0gTlVMTDsKCQkJc3pTY2hlbWFOYW1lID0gcHVic3RyOwoJCQljYlNjaGVtYU5hbWUgPSBT UUxfTlRTOwoJCQlnb3RvIHJldHJ5X3B1YmxpY19zY2hlbWE7CgkJfQoJfQoKCXJlc3VsdCA9IFBH QVBJX0JpbmRDb2woY29sX3N0bXQsIDEsIGludGVybmFsX2FzaXNfdHlwZSwKCQkJCQkJICAgdGFi bGVfb3duZXIsIE1BWF9JTkZPX1NUUklORywgTlVMTCk7CglpZiAoIVNRTF9TVUNDRUVERUQocmVz dWx0KSkKCXsKCQlnb3RvIGNsZWFudXA7Cgl9CgoJcmVzdWx0ID0gUEdBUElfQmluZENvbChjb2xf c3RtdCwgMiwgaW50ZXJuYWxfYXNpc190eXBlLAoJCQkJCQkgICB0YWJsZV9uYW1lLCBNQVhfSU5G T19TVFJJTkcsIE5VTEwpOwoJaWYgKCFTUUxfU1VDQ0VFREVEKHJlc3VsdCkpCgl7CgkJZ290byBj bGVhbnVwOwoJfQoKCXJlc3VsdCA9IFBHQVBJX0JpbmRDb2woY29sX3N0bXQsIDMsIGludGVybmFs X2FzaXNfdHlwZSwKCQkJCQkJICAgZmllbGRfbmFtZSwgTUFYX0lORk9fU1RSSU5HLCBOVUxMKTsK CWlmICghU1FMX1NVQ0NFRURFRChyZXN1bHQpKQoJewoJCWdvdG8gY2xlYW51cDsKCX0KCglyZXN1 bHQgPSBQR0FQSV9CaW5kQ29sKGNvbF9zdG10LCA0LCBTUUxfQ19VTE9ORywKCQkJCQkJICAgJmZp ZWxkX3R5cGUsIDQsIE5VTEwpOwoJaWYgKCFTUUxfU1VDQ0VFREVEKHJlc3VsdCkpCgl7CgkJZ290 byBjbGVhbnVwOwoJfQoKCXJlc3VsdCA9IFBHQVBJX0JpbmRDb2woY29sX3N0bXQsIDUsIGludGVy bmFsX2FzaXNfdHlwZSwKCQkJCQkJICAgZmllbGRfdHlwZV9uYW1lLCBNQVhfSU5GT19TVFJJTkcs IE5VTEwpOwoJaWYgKCFTUUxfU1VDQ0VFREVEKHJlc3VsdCkpCgl7CgkJZ290byBjbGVhbnVwOwoJ fQoKCXJlc3VsdCA9IFBHQVBJX0JpbmRDb2woY29sX3N0bXQsIDYsIFNRTF9DX1NIT1JULAoJCQkJ CQkgICAmZmllbGRfbnVtYmVyLCBNQVhfSU5GT19TVFJJTkcsIE5VTEwpOwoJaWYgKCFTUUxfU1VD Q0VFREVEKHJlc3VsdCkpCgl7CgkJZ290byBjbGVhbnVwOwoJfQoKI2lmZGVmCU5PVF9VU0VECgly ZXN1bHQgPSBQR0FQSV9CaW5kQ29sKGNvbF9zdG10LCA3LCBTUUxfQ19MT05HLAoJCQkJCQkgICAm ZmllbGRfbGVuZ3RoLCBNQVhfSU5GT19TVFJJTkcsIE5VTEwpOwoJaWYgKCFTUUxfU1VDQ0VFREVE KHJlc3VsdCkpCgl7CgkJZ290byBjbGVhbnVwOwoJfQojZW5kaWYgLyogTk9UX1VTRUQgKi8KCgly ZXN1bHQgPSBQR0FQSV9CaW5kQ29sKGNvbF9zdG10LCA4LCBTUUxfQ19MT05HLAoJCQkJCQkgICAm bW9kX2xlbmd0aCwgTUFYX0lORk9fU1RSSU5HLCBOVUxMKTsKCWlmICghU1FMX1NVQ0NFRURFRChy ZXN1bHQpKQoJewoJCWdvdG8gY2xlYW51cDsKCX0KCglyZXN1bHQgPSBQR0FQSV9CaW5kQ29sKGNv bF9zdG10LCA5LCBpbnRlcm5hbF9hc2lzX3R5cGUsCgkJCQkJCSAgIG5vdF9udWxsLCBNQVhfSU5G T19TVFJJTkcsIE5VTEwpOwoJaWYgKCFTUUxfU1VDQ0VFREVEKHJlc3VsdCkpCgl7CgkJZ290byBj bGVhbnVwOwoJfQoKCXJlc3VsdCA9IFBHQVBJX0JpbmRDb2woY29sX3N0bXQsIDEwLCBpbnRlcm5h bF9hc2lzX3R5cGUsCgkJCQkJCSAgIHJlbGhhc3J1bGVzLCBNQVhfSU5GT19TVFJJTkcsIE5VTEwp OwoJaWYgKCFTUUxfU1VDQ0VFREVEKHJlc3VsdCkpCgl7CgkJZ290byBjbGVhbnVwOwoJfQoKCXJl c3VsdCA9IFBHQVBJX0JpbmRDb2woY29sX3N0bXQsIDExLCBpbnRlcm5hbF9hc2lzX3R5cGUsCgkJ CQkJCSAgIHJlbGtpbmQsIHNpemVvZihyZWxraW5kKSwgTlVMTCk7CglpZiAoIVNRTF9TVUNDRUVE RUQocmVzdWx0KSkKCXsKCQlnb3RvIGNsZWFudXA7Cgl9CgoJcmVzdWx0ID0gUEdBUElfQmluZENv bChjb2xfc3RtdCwgMTIsIFNRTF9DX0xPTkcsCgkJCQkJJmdyZWxvaWQsIHNpemVvZihncmVsb2lk KSwgTlVMTCk7CglpZiAoIVNRTF9TVUNDRUVERUQocmVzdWx0KSkKCXsKCQlnb3RvIGNsZWFudXA7 Cgl9CgoJcmVzdWx0ID0gUEdBUElfQmluZENvbChjb2xfc3RtdCwgMTQsIFNRTF9DX1VMT05HLAoJ CQkJCSZiYXNldHlwZSwgc2l6ZW9mKGJhc2V0eXBlKSwgTlVMTCk7CglpZiAoIVNRTF9TVUNDRUVE RUQocmVzdWx0KSkKCXsKCQlnb3RvIGNsZWFudXA7Cgl9CgoJcmVzdWx0ID0gUEdBUElfQmluZENv bChjb2xfc3RtdCwgMTUsIFNRTF9DX0xPTkcsCgkJCQkJJnR5cG1vZCwgc2l6ZW9mKHR5cG1vZCks IE5VTEwpOwoJaWYgKCFTUUxfU1VDQ0VFREVEKHJlc3VsdCkpCgl7CgkJZ290byBjbGVhbnVwOwoJ fQoKCXJlc3VsdCA9IFBHQVBJX0JpbmRDb2woY29sX3N0bXQsIDE2LCBTUUxfQ19MT05HLAoJCQkJ CSZyZWxoYXNvaWRzLCBzaXplb2YocmVsaGFzb2lkcyksIE5VTEwpOwoJaWYgKCFTUUxfU1VDQ0VF REVEKHJlc3VsdCkpCgl7CgkJZ290byBjbGVhbnVwOwoJfQoKCXJlc3VsdCA9IFBHQVBJX0JpbmRD b2woY29sX3N0bXQsIDE3LCBTUUxfQ19DSEFSLAoJCQkJCWF0dGlkZW50aXR5LCBzaXplb2YoYXR0 aWRlbnRpdHkpLCBOVUxMKTsKCWlmICghU1FMX1NVQ0NFRURFRChyZXN1bHQpKQoJewoJCWdvdG8g Y2xlYW51cDsKCX0KCglyZXN1bHQgPSBQR0FQSV9CaW5kQ29sKGNvbF9zdG10LCAxOCwgU1FMX0Nf TE9ORywKCQkJCQkmcmVsaGFzc3ViY2xhc3MsIHNpemVvZihyZWxoYXNzdWJjbGFzcyksIE5VTEwp OwoJaWYgKCFTUUxfU1VDQ0VFREVEKHJlc3VsdCkpCgl7CgkJZ290byBjbGVhbnVwOwoJfQoJaWYg KHJlcyA9IFFSX0NvbnN0cnVjdG9yKCksICFyZXMpCgl7CgkJU0Nfc2V0X2Vycm9yKHN0bXQsIFNU TVRfTk9fTUVNT1JZX0VSUk9SLCAiQ291bGRuJ3QgYWxsb2NhdGUgbWVtb3J5IGZvciBQR0FQSV9D b2x1bW5zIHJlc3VsdC4iLCBmdW5jKTsKCQlnb3RvIGNsZWFudXA7Cgl9CglTQ19zZXRfUmVzdWx0 KHN0bXQsIHJlcyk7CgoJLyogdGhlIGJpbmRpbmcgc3RydWN0dXJlIGZvciBhIHN0YXRlbWVudCBp cyBub3Qgc2V0IHVwIHVudGlsICovCgoJLyoKCSAqIGEgc3RhdGVtZW50IGlzIGFjdHVhbGx5IGV4 ZWN1dGVkLCBzbyB3ZSdsbCBoYXZlIHRvIGRvIHRoaXMKCSAqIG91cnNlbHZlcy4KCSAqLwoJcmVz dWx0X2NvbHMgPSBOVU1fT0ZfQ09MVU1OU19GSUVMRFM7CglleHRlbmRfY29sdW1uX2JpbmRpbmdz KFNDX2dldF9BUkRGKHN0bXQpLCByZXN1bHRfY29scyk7CgoJLyoKCSAqIFNldHRpbmcgY2F0YWxv Z19yZXN1bHQgaGVyZSBhZmZlY3RzIHRoZSBiZWhhdmlvciBvZgoJICogcGd0eXBlX3h4eCgpIGZ1 bmN0aW9ucy4gU28gc2V0IGl0IGxhdGVyLgoJICogc3RtdC0+Y2F0YWxvZ19yZXN1bHQgPSBUUlVF OwoJICovCgkvKiBzZXQgdGhlIGZpZWxkIG5hbWVzICovCglRUl9zZXRfbnVtX2ZpZWxkcyhyZXMs IHJlc3VsdF9jb2xzKTsKCVFSX3NldF9maWVsZF9pbmZvX0VOKHJlcywgQ09MVU1OU19DQVRBTE9H X05BTUUsIFBHX1RZUEVfVkFSQ0hBUiwgTUFYX0lORk9fU1RSSU5HKTsKCVFSX3NldF9maWVsZF9p bmZvX0VOKHJlcywgQ09MVU1OU19TQ0hFTUFfTkFNRSwgUEdfVFlQRV9WQVJDSEFSLCBNQVhfSU5G T19TVFJJTkcpOwoJUVJfc2V0X2ZpZWxkX2luZm9fRU4ocmVzLCBDT0xVTU5TX1RBQkxFX05BTUUs IFBHX1RZUEVfVkFSQ0hBUiwgTUFYX0lORk9fU1RSSU5HKTsKCVFSX3NldF9maWVsZF9pbmZvX0VO KHJlcywgQ09MVU1OU19DT0xVTU5fTkFNRSwgUEdfVFlQRV9WQVJDSEFSLCBNQVhfSU5GT19TVFJJ TkcpOwoJUVJfc2V0X2ZpZWxkX2luZm9fRU4ocmVzLCBDT0xVTU5TX0RBVEFfVFlQRSwgUEdfVFlQ RV9JTlQyLCAyKTsKCVFSX3NldF9maWVsZF9pbmZvX0VOKHJlcywgQ09MVU1OU19UWVBFX05BTUUs IFBHX1RZUEVfVkFSQ0hBUiwgTUFYX0lORk9fU1RSSU5HKTsKCVFSX3NldF9maWVsZF9pbmZvX0VO KHJlcywgQ09MVU1OU19QUkVDSVNJT04sIFBHX1RZUEVfSU5UNCwgNCk7IC8qIENPTFVNTl9TSVpF ICovCglRUl9zZXRfZmllbGRfaW5mb19FTihyZXMsIENPTFVNTlNfTEVOR1RILCBQR19UWVBFX0lO VDQsIDQpOyAvKiBCVUZGRVJfTEVOR1RIICovCglRUl9zZXRfZmllbGRfaW5mb19FTihyZXMsIENP TFVNTlNfU0NBTEUsIFBHX1RZUEVfSU5UMiwgMik7IC8qIERFQ0lNQUxfRElHSVRTICoqKi8KCVFS X3NldF9maWVsZF9pbmZvX0VOKHJlcywgQ09MVU1OU19SQURJWCwgUEdfVFlQRV9JTlQyLCAyKTsK CVFSX3NldF9maWVsZF9pbmZvX0VOKHJlcywgQ09MVU1OU19OVUxMQUJMRSwgUEdfVFlQRV9JTlQy LCAyKTsKCVFSX3NldF9maWVsZF9pbmZvX0VOKHJlcywgQ09MVU1OU19SRU1BUktTLCBQR19UWVBF X1ZBUkNIQVIsIElORk9fVkFSQ0hBUl9TSVpFKTsKCVFSX3NldF9maWVsZF9pbmZvX0VOKHJlcywg Q09MVU1OU19DT0xVTU5fREVGLCBQR19UWVBFX1ZBUkNIQVIsIElORk9fVkFSQ0hBUl9TSVpFKTsK CVFSX3NldF9maWVsZF9pbmZvX0VOKHJlcywgQ09MVU1OU19TUUxfREFUQV9UWVBFLCBQR19UWVBF X0lOVDIsIDIpOwoJUVJfc2V0X2ZpZWxkX2luZm9fRU4ocmVzLCBDT0xVTU5TX1NRTF9EQVRFVElN RV9TVUIsIFBHX1RZUEVfSU5UMiwgMik7CglRUl9zZXRfZmllbGRfaW5mb19FTihyZXMsIENPTFVN TlNfQ0hBUl9PQ1RFVF9MRU5HVEgsIFBHX1RZUEVfSU5UNCwgNCk7CglRUl9zZXRfZmllbGRfaW5m b19FTihyZXMsIENPTFVNTlNfT1JESU5BTF9QT1NJVElPTiwgUEdfVFlQRV9JTlQ0LCA0KTsKCVFS X3NldF9maWVsZF9pbmZvX0VOKHJlcywgQ09MVU1OU19JU19OVUxMQUJMRSwgUEdfVFlQRV9WQVJD SEFSLCBJTkZPX1ZBUkNIQVJfU0laRSk7CgoJLyogVXNlciBkZWZpbmVkIGZpZWxkcyAqLwoJUVJf c2V0X2ZpZWxkX2luZm9fRU4ocmVzLCBDT0xVTU5TX0RJU1BMQVlfU0laRSwgUEdfVFlQRV9JTlQ0 LCA0KTsKCVFSX3NldF9maWVsZF9pbmZvX0VOKHJlcywgQ09MVU1OU19GSUVMRF9UWVBFLCBQR19U WVBFX0lOVDQsIDQpOwoJUVJfc2V0X2ZpZWxkX2luZm9fRU4ocmVzLCBDT0xVTU5TX0FVVE9fSU5D UkVNRU5ULCBQR19UWVBFX0lOVDQsIDQpOwoJUVJfc2V0X2ZpZWxkX2luZm9fRU4ocmVzLCBDT0xV TU5TX1BIWVNJQ0FMX05VTUJFUiwgUEdfVFlQRV9JTlQyLCAyKTsKCVFSX3NldF9maWVsZF9pbmZv X0VOKHJlcywgQ09MVU1OU19UQUJMRV9PSUQsIFBHX1RZUEVfT0lELCA0KTsKCVFSX3NldF9maWVs ZF9pbmZvX0VOKHJlcywgQ09MVU1OU19CQVNFX1RZUEVJRCwgUEdfVFlQRV9PSUQsIDQpOwoJUVJf c2V0X2ZpZWxkX2luZm9fRU4ocmVzLCBDT0xVTU5TX0FUVFRZUE1PRCwgUEdfVFlQRV9JTlQ0LCA0 KTsKCVFSX3NldF9maWVsZF9pbmZvX0VOKHJlcywgQ09MVU1OU19UQUJMRV9JTkZPLCBQR19UWVBF X0lOVDQsIDQpOwoKCW9yZGluYWwgPSAxOwoJcmVzdWx0ID0gUEdBUElfRmV0Y2goY29sX3N0bXQp OwoKCS8qCgkgKiBPbmx5IHNob3cgb2lkIGlmIG9wdGlvbiBBTkQgdGhlcmUgYXJlIG90aGVyIGNv bHVtbnMgQU5EIGl0J3Mgbm90CgkgKiBiZWluZyBjYWxsZWQgYnkgU1FMU3RhdGlzdGljcyAuIEFs d2F5cyBzaG93IE9JRCBpZiBpdCdzIGEgc3lzdGVtCgkgKiB0YWJsZQoJICovCglyZWxpc2F2aWV3 ID0gKHJlbGtpbmRbMF0gPT0gJ3YnKTsKCglpZiAoU1FMX1NVQ0NFRURFRChyZXN1bHQpKQoJewoJ CWlmIChyZWxoYXNvaWRzKQoJCQl0YWJsZV9pbmZvIHw9IFRCSU5GT19IQVNPSURTOwoJCWlmIChy ZWxoYXNzdWJjbGFzcykKCQkJdGFibGVfaW5mbyB8PSBUQklORk9fSEFTU1VCQ0xBU1M7CgkJaWYg KCFyZWxpc2F2aWV3ICYmCgkJCXJlbGhhc29pZHMgJiYKCQkJKHNob3dfb2lkX2NvbHVtbiB8fAoJ CQkgc3RybmNtcCh0YWJsZV9uYW1lLCBQT1NUR1JFU19TWVNfUFJFRklYLCBzdHJsZW4oUE9TVEdS RVNfU1lTX1BSRUZJWCkpID09IDApICYmCgkJCShOVUxMID09IGVzY0NvbHVtbk5hbWUgfHwKCQkJ IDAgPT0gc3RyY21wKGVzY0NvbHVtbk5hbWUsIE9JRF9OQU1FKSkpCgkJewoJCQljb25zdCBjaGFy ICp0eXBuYW1lOwoKCQkJLyogRm9yIE9JRCBmaWVsZHMgKi8KCQkJdHVwbGUgPSBRUl9BZGROZXco cmVzKTsKCgkJCWlmIChDQ19mYWtlX21zcyhjb25uKSkKCQkJewoJCQkJdHlwbmFtZSA9ICJPSUQg aWRlbnRpdHkiOwoJCQkJc2V0SWRlbnRpdHkgPSBUUlVFOwoJCQl9CgkJCWVsc2UKCQkJCXR5cG5h bWUgPSBPSURfTkFNRTsKCQkJYWRkX3R1cGxlX2Zvcl9vaWRfb3JfeG1pbih0dXBsZSwgb3JkaW5h bCwgT0lEX05BTUUsIFBHX1RZUEVfT0lELCB0eXBuYW1lLCBjb25uLCB0YWJsZV9vd25lciwgdGFi bGVfbmFtZSwgZ3JlbG9pZCwgT0lEX0FUVE5VTSwgVFJVRSwgdGFibGVfaW5mbyk7CgkJCW9yZGlu YWwrKzsKCQl9Cgl9CgoJd2hpbGUgKFNRTF9TVUNDRUVERUQocmVzdWx0KSkKCXsKCQlpbnQJYXV0 b191bmlxdWU7CgkJU1FMTEVOCWxlbl9uZWVkZWQ7CgkJY2hhcgkqYXR0ZGVmOwoKCQlhdHRkZWYg PSBOVUxMOwoJCVBHQVBJX1NldFBvcyhjb2xfc3RtdCwgMSwgU1FMX1BPU0lUSU9OLCAwKTsKCQlQ R0FQSV9HZXREYXRhKGNvbF9zdG10LCAxMywgaW50ZXJuYWxfYXNpc190eXBlLCBOVUxMLCAwLCAm bGVuX25lZWRlZCk7CgkJaWYgKGxlbl9uZWVkZWQgPiAwKQoJCXsKTVlMT0coMCwgImxlbl9uZWVk ZWQ9IiBGT1JNQVRfTEVOICJcbiIsIGxlbl9uZWVkZWQpOwoJCQlhdHRkZWYgPSBtYWxsb2MobGVu X25lZWRlZCArIDEpOwoJCQlpZiAoIWF0dGRlZikKCQkJewoJCQkJU0Nfc2V0X2Vycm9yKHN0bXQs IFNUTVRfTk9fTUVNT1JZX0VSUk9SLCAiQ291bGRuJ3QgYWxsb2NhdGUgbWVtb3J5IGZvciBhdHRk ZWYuIiwgZnVuYyk7CgkJCQlnb3RvIGNsZWFudXA7CgkJCX0KCgkJCVBHQVBJX0dldERhdGEoY29s X3N0bXQsIDEzLCBpbnRlcm5hbF9hc2lzX3R5cGUsIGF0dGRlZiwgbGVuX25lZWRlZCArIDEsICZs ZW5fbmVlZGVkKTsKTVlMT0coMCwgIiBhbmQgdGhlIGRhdGE9JXNcbiIsIGF0dGRlZik7CgkJfQoJ CXR1cGxlID0gUVJfQWRkTmV3KHJlcyk7CgoJCXNxbHR5cGUgPSBTUUxfVFlQRV9OVUxMOwkvKiB1 bnNwZWNpZmllZCAqLwoJCXNldF90dXBsZWZpZWxkX3N0cmluZygmdHVwbGVbQ09MVU1OU19DQVRB TE9HX05BTUVdLCBDdXJyQ2F0KGNvbm4pKTsKCQkvKiBzZWUgbm90ZSBpbiBTUUxUYWJsZXMoKSAq LwoJCXNldF90dXBsZWZpZWxkX3N0cmluZygmdHVwbGVbQ09MVU1OU19TQ0hFTUFfTkFNRV0sIEdF VF9TQ0hFTUFfTkFNRSh0YWJsZV9vd25lcikpOwoJCXNldF90dXBsZWZpZWxkX3N0cmluZygmdHVw bGVbQ09MVU1OU19UQUJMRV9OQU1FXSwgdGFibGVfbmFtZSk7CgkJc2V0X3R1cGxlZmllbGRfc3Ry aW5nKCZ0dXBsZVtDT0xVTU5TX0NPTFVNTl9OQU1FXSwgZmllbGRfbmFtZSk7CgkJYXV0b191bmlx dWUgPSBTUUxfRkFMU0U7CgkJaWYgKGZpZWxkX3R5cGUgPSBwZ190cnVlX3R5cGUoY29ubiwgZmll bGRfdHlwZSwgYmFzZXR5cGUpLCBmaWVsZF90eXBlID09IGJhc2V0eXBlKQoJCQltb2RfbGVuZ3Ro ID0gdHlwbW9kOwoJCXN3aXRjaCAoZmllbGRfdHlwZSkKCQl7CgkJCWNhc2UgUEdfVFlQRV9PSUQ6 CgkJCQlpZiAoMCAhPSBhdG9pKGNpLT5mYWtlX29pZF9pbmRleCkpCgkJCQl7CgkJCQkJYXV0b191 bmlxdWUgPSBTUUxfVFJVRTsKCQkJCQlzZXRfdHVwbGVmaWVsZF9zdHJpbmcoJnR1cGxlW0NPTFVN TlNfVFlQRV9OQU1FXSwgImlkZW50aXR5Iik7CgkJCQkJYnJlYWs7CgkJCQl9CgkJCWNhc2UgUEdf VFlQRV9JTlQ0OgoJCQljYXNlIFBHX1RZUEVfSU5UODoKCQkJCWlmIChhdHRpZGVudGl0eVswXSAh PSAwIHx8CgkJCQkgICAgKGF0dGRlZiAmJiBzdHJuaWNtcChhdHRkZWYsICJuZXh0dmFsKCIsIDgp ID09IDAgJiYKCQkJCSAgICAgbm90X251bGxbMF0gIT0gJzAnKSkKCQkJCXsKCQkJCQlhdXRvX3Vu aXF1ZSA9IFNRTF9UUlVFOwoJCQkJCWlmICghc2V0SWRlbnRpdHkgJiYKCQkJCQkgICAgQ0NfZmFr ZV9tc3MoY29ubikpCgkJCQkJewoJCQkJCQljaGFyCXRtcFsyNTZdOwoKCQkJCQkJU1BSSU5URl9G SVhFRCh0bXAsICIlcyBpZGVudGl0eSIsIGZpZWxkX3R5cGVfbmFtZSk7CgkJCQkJCXNldF90dXBs ZWZpZWxkX3N0cmluZygmdHVwbGVbQ09MVU1OU19UWVBFX05BTUVdLCB0bXApOwoJCQkJCQlicmVh azsKCQkJCQl9CgkJCQl9CgkJCWRlZmF1bHQ6CgkJCQlzZXRfdHVwbGVmaWVsZF9zdHJpbmcoJnR1 cGxlW0NPTFVNTlNfVFlQRV9OQU1FXSwgZmllbGRfdHlwZV9uYW1lKTsKCQkJCWJyZWFrOwoJCX0K CgkJLyotLS0tLS0tLS0tCgkJICogU29tZSBOb3RlcyBhYm91dCBQb3N0Z3JlcyBEYXRhIFR5cGVz OgoJCSAqCgkJICogVkFSQ0hBUiAtIHRoZSBsZW5ndGggaXMgc3RvcmVkIGluIHRoZSBwZ19hdHRy aWJ1dGUuYXR0dHlwbW9kIGZpZWxkCgkJICogQlBDSEFSICAtIHRoZSBsZW5ndGggaXMgYWxzbyBz dG9yZWQgYXMgdmFyY2hhciBpcwoJCSAqCgkJICogTlVNRVJJQyAtIHRoZSBkZWNpbWFsX2RpZ2l0 cyBpcyBzdG9yZWQgaW4gYXR0dHlwbW9kIGFzIGZvbGxvd3M6CgkJICoKCQkgKgljb2x1bW5fc2l6 ZSA9KChhdHR0eXBtb2QgLSBWQVJIRFJTWikgPj4gMTYpICYgMHhmZmZmCgkJICoJZGVjaW1hbF9k aWdpdHMJID0gKGF0dHR5cG1vZCAtIFZBUkhEUlNaKSAmIDB4ZmZmZgoJCSAqCgkJICotLS0tLS0t LS0tCgkJICovCgkJTVlMT0coMCwgInRhYmxlPSclcycsZmllbGRfbmFtZT0nJXMnLHR5cGU9JWQs bmFtZT0nJXMnXG4iLAoJCQkgdGFibGVfbmFtZSwgZmllbGRfbmFtZSwgZmllbGRfdHlwZSwgZmll bGRfdHlwZV9uYW1lKTsKCgkJLyogU3VidHJhY3QgdGhlIGhlYWRlciBsZW5ndGggKi8KCQlzd2l0 Y2ggKGZpZWxkX3R5cGUpCgkJewoJCQljYXNlIFBHX1RZUEVfREFURVRJTUU6CgkJCWNhc2UgUEdf VFlQRV9USU1FU1RBTVBfTk9fVE1aT05FOgoJCQljYXNlIFBHX1RZUEVfVElNRToKCQkJY2FzZSBQ R19UWVBFX1RJTUVfV0lUSF9UTVpPTkU6CgkJCWNhc2UgUEdfVFlQRV9CSVQ6CgkJCQlicmVhazsK CQkJZGVmYXVsdDoKCQkJCWlmIChtb2RfbGVuZ3RoID49IDQpCgkJCQkJbW9kX2xlbmd0aCAtPSA0 OwoJCX0KCQlzZXRfdHVwbGVmaWVsZF9pbnQ0KCZ0dXBsZVtDT0xVTU5TX1BSRUNJU0lPTl0sIFBH VFlQRV9BVFRSX0NPTFVNTl9TSVpFKGNvbm4sIGZpZWxkX3R5cGUsIG1vZF9sZW5ndGgpKTsKCQlz ZXRfdHVwbGVmaWVsZF9pbnQ0KCZ0dXBsZVtDT0xVTU5TX0xFTkdUSF0sIFBHVFlQRV9BVFRSX0JV RkZFUl9MRU5HVEgoY29ubiwgZmllbGRfdHlwZSwgbW9kX2xlbmd0aCkpOwoJCXNldF90dXBsZWZp ZWxkX2ludDQoJnR1cGxlW0NPTFVNTlNfRElTUExBWV9TSVpFXSwgUEdUWVBFX0FUVFJfRElTUExB WV9TSVpFKGNvbm4sIGZpZWxkX3R5cGUsIG1vZF9sZW5ndGgpKTsKCQlzZXRfbnVsbGZpZWxkX2lu dDIoJnR1cGxlW0NPTFVNTlNfU0NBTEVdLCBQR1RZUEVfQVRUUl9ERUNJTUFMX0RJR0lUUyhjb25u LCBmaWVsZF90eXBlLCBtb2RfbGVuZ3RoKSk7CgoJCXNxbHR5cGUgPSBQR1RZUEVfQVRUUl9UT19D T05DSVNFX1RZUEUoY29ubiwgZmllbGRfdHlwZSwgbW9kX2xlbmd0aCk7CgkJY29uY2lzZV90eXBl ID0gUEdUWVBFX0FUVFJfVE9fU1FMREVTQ1RZUEUoY29ubiwgZmllbGRfdHlwZSwgbW9kX2xlbmd0 aCk7CgoJCXNldF90dXBsZWZpZWxkX2ludDIoJnR1cGxlW0NPTFVNTlNfREFUQV9UWVBFXSwgc3Fs dHlwZSk7CgoJCXNldF9udWxsZmllbGRfaW50MigmdHVwbGVbQ09MVU1OU19SQURJWF0sIHBndHlw ZV9yYWRpeChjb25uLCBmaWVsZF90eXBlKSk7CgkJc2V0X3R1cGxlZmllbGRfaW50MigmdHVwbGVb Q09MVU1OU19OVUxMQUJMRV0sIChJbnQyKSAobm90X251bGxbMF0gIT0gJzAnID8gU1FMX05PX05V TExTIDogcGd0eXBlX251bGxhYmxlKGNvbm4sIGZpZWxkX3R5cGUpKSk7CgkJc2V0X3R1cGxlZmll bGRfc3RyaW5nKCZ0dXBsZVtDT0xVTU5TX1JFTUFSS1NdLCBOVUxMX1NUUklORyk7CgkJaWYgKGF0 dGRlZiAmJiBzdHJsZW4oYXR0ZGVmKSA+IElORk9fVkFSQ0hBUl9TSVpFKQoJCQlzZXRfdHVwbGVm aWVsZF9zdHJpbmcoJnR1cGxlW0NPTFVNTlNfQ09MVU1OX0RFRl0sICJUUlVOQ0FURSIpOwoJCWVs c2UKCQkJc2V0X3R1cGxlZmllbGRfc3RyaW5nKCZ0dXBsZVtDT0xVTU5TX0NPTFVNTl9ERUZdLCBh dHRkZWYpOwoJCXNldF90dXBsZWZpZWxkX2ludDIoJnR1cGxlW0NPTFVNTlNfU1FMX0RBVEFfVFlQ RV0sIGNvbmNpc2VfdHlwZSk7CgkJc2V0X251bGxmaWVsZF9pbnQyKCZ0dXBsZVtDT0xVTU5TX1NR TF9EQVRFVElNRV9TVUJdLCBwZ3R5cGVfYXR0cl90b19kYXRldGltZV9zdWIoY29ubiwgZmllbGRf dHlwZSwgbW9kX2xlbmd0aCkpOwoJCXNldF90dXBsZWZpZWxkX2ludDQoJnR1cGxlW0NPTFVNTlNf Q0hBUl9PQ1RFVF9MRU5HVEhdLCBQR1RZUEVfQVRUUl9UUkFOU0ZFUl9PQ1RFVF9MRU5HVEgoY29u biwgZmllbGRfdHlwZSwgbW9kX2xlbmd0aCkpOwoJCXNldF90dXBsZWZpZWxkX2ludDQoJnR1cGxl W0NPTFVNTlNfT1JESU5BTF9QT1NJVElPTl0sIG9yZGluYWwpOwoJCXNldF90dXBsZWZpZWxkX251 bGwoJnR1cGxlW0NPTFVNTlNfSVNfTlVMTEFCTEVdKTsKCQlzZXRfdHVwbGVmaWVsZF9pbnQ0KCZ0 dXBsZVtDT0xVTU5TX0ZJRUxEX1RZUEVdLCBmaWVsZF90eXBlKTsKCQlzZXRfdHVwbGVmaWVsZF9p bnQ0KCZ0dXBsZVtDT0xVTU5TX0FVVE9fSU5DUkVNRU5UXSwgYXV0b191bmlxdWUpOwoJCXNldF90 dXBsZWZpZWxkX2ludDIoJnR1cGxlW0NPTFVNTlNfUEhZU0lDQUxfTlVNQkVSXSwgZmllbGRfbnVt YmVyKTsKCQlzZXRfdHVwbGVmaWVsZF9pbnQ0KCZ0dXBsZVtDT0xVTU5TX1RBQkxFX09JRF0sIGdy ZWxvaWQpOwoJCXNldF90dXBsZWZpZWxkX2ludDQoJnR1cGxlW0NPTFVNTlNfQkFTRV9UWVBFSURd LCBiYXNldHlwZSk7CgkJc2V0X3R1cGxlZmllbGRfaW50NCgmdHVwbGVbQ09MVU1OU19BVFRUWVBN T0RdLCBtb2RfbGVuZ3RoKTsKCQlzZXRfdHVwbGVmaWVsZF9pbnQ0KCZ0dXBsZVtDT0xVTU5TX1RB QkxFX0lORk9dLCB0YWJsZV9pbmZvKTsKCQlvcmRpbmFsKys7CgoJCXJlc3VsdCA9IFBHQVBJX0Zl dGNoKGNvbF9zdG10KTsKCQlpZiAoYXR0ZGVmKQoJCQlmcmVlKGF0dGRlZik7Cgl9CglpZiAocmVz dWx0ICE9IFNRTF9OT19EQVRBX0ZPVU5EKQoJewoJCVNDX2Z1bGxfZXJyb3JfY29weShzdG10LCBj b2xfc3RtdCwgRkFMU0UpOwoJCWdvdG8gY2xlYW51cDsKCX0KCgkvKgoJICogUHV0IHRoZSByb3cg dmVyc2lvbiBjb2x1bW4gYXQgdGhlIGVuZCBzbyBpdCBtaWdodCBub3QgYmUgbWlzdGFrZW4KCSAq IGZvciBhIGtleSBmaWVsZC4KCSAqLwoJaWYgKCFyZWxpc2F2aWV3ICYmIHJvd192ZXJzaW9uaW5n ICYmCgkJKE5VTEwgPT0gZXNjQ29sdW1uTmFtZSB8fAoJCSAwID09IHN0cmNtcChlc2NDb2x1bW5O YW1lLCBYTUlOX05BTUUpKSkKCXsKCQkvKiBGb3IgUm93IFZlcnNpb25pbmcgZmllbGRzICovCgkJ dHVwbGUgPSBRUl9BZGROZXcocmVzKTsKCgkJYWRkX3R1cGxlX2Zvcl9vaWRfb3JfeG1pbih0dXBs ZSwgb3JkaW5hbCwgWE1JTl9OQU1FLCBQR19UWVBFX1hJRCwgInhpZCIsIGNvbm4sIHRhYmxlX293 bmVyLCB0YWJsZV9uYW1lLCBncmVsb2lkLCBYTUlOX0FUVE5VTSwgRkFMU0UsIHRhYmxlX2luZm8p OwoJCW9yZGluYWwrKzsKCX0KCXJldCA9IFNRTF9TVUNDRVNTOwoKY2xlYW51cDoKI3VuZGVmCXJl dHVybgoJLyoKCSAqIGFsc28sIHRoaW5ncyBuZWVkIHRvIHRoaW5rIHRoYXQgdGhpcyBzdGF0ZW1l bnQgaXMgZmluaXNoZWQgc28gdGhlCgkgKiByZXN1bHRzIGNhbiBiZSByZXRyaWV2ZWQuCgkgKi8K CXN0bXQtPnN0YXR1cyA9IFNUTVRfRklOSVNIRUQ7CglzdG10LT5jYXRhbG9nX3Jlc3VsdCA9IFRS VUU7CgoJaWYgKCFTUUxfU1VDQ0VFREVEKHJldCkgJiYgMCA+PSBTQ19nZXRfZXJyb3JudW1iZXIo c3RtdCkpCgkJU0NfZXJyb3JfY29weShzdG10LCBjb2xfc3RtdCwgVFJVRSk7CgkvKiBzZXQgdXAg dGhlIGN1cnJlbnQgdHVwbGUgcG9pbnRlciBmb3IgU1FMRmV0Y2ggKi8KCXN0bXQtPmN1cnJUdXBs ZSA9IC0xOwoJU0Nfc2V0X3Jvd3NldF9zdGFydChzdG10LCAtMSwgRkFMU0UpOwoJU0Nfc2V0X2N1 cnJlbnRfY29sKHN0bXQsIC0xKTsKCglpZiAoIVBRRXhwQnVmZmVyRGF0YUJyb2tlbihjb2x1bW5z X3F1ZXJ5KSkKCQl0ZXJtUFFFeHBCdWZmZXIoJmNvbHVtbnNfcXVlcnkpOwoJaWYgKGVzY1NjaGVt YU5hbWUpCgkJZnJlZShlc2NTY2hlbWFOYW1lKTsKCWlmIChlc2NUYWJsZU5hbWUpCgkJZnJlZShl c2NUYWJsZU5hbWUpOwoJaWYgKGVzY0NvbHVtbk5hbWUpCgkJZnJlZShlc2NDb2x1bW5OYW1lKTsK CWlmIChjb2xfc3RtdCkKCQlQR0FQSV9GcmVlU3RtdChjb2xfc3RtdCwgU1FMX0RST1ApOwoJTVlM T0coMCwgImxlYXZpbmcgc3RtdD0lcFxuIiwgc3RtdCk7CglyZXR1cm4gcmV0Owp9CgoKUkVUQ09E RQkJU1FMX0FQSQpQR0FQSV9TcGVjaWFsQ29sdW1ucyhIU1RNVCBoc3RtdCwKCQkJCQkgU1FMVVNN QUxMSU5UIGZDb2xUeXBlLAoJCQkJCSBjb25zdCBTUUxDSEFSICogc3pUYWJsZVF1YWxpZmllciwK CQkJCQkgU1FMU01BTExJTlQgY2JUYWJsZVF1YWxpZmllciwKCQkJCQkgY29uc3QgU1FMQ0hBUiAq IHN6VGFibGVPd25lciwgLyogT0EgRSovCgkJCQkJIFNRTFNNQUxMSU5UIGNiVGFibGVPd25lciwK CQkJCQkgY29uc3QgU1FMQ0hBUiAqIHN6VGFibGVOYW1lLCAvKiBPQShSKSBFKi8KCQkJCQkgU1FM U01BTExJTlQgY2JUYWJsZU5hbWUsCgkJCQkJIFNRTFVTTUFMTElOVCBmU2NvcGUsCgkJCQkJIFNR TFVTTUFMTElOVCBmTnVsbGFibGUpCnsKCUNTVFIgZnVuYyA9ICJQR0FQSV9TcGVjaWFsQ29sdW1u cyI7CglUdXBsZUZpZWxkCSp0dXBsZTsKCVN0YXRlbWVudENsYXNzICpzdG10ID0gKFN0YXRlbWVu dENsYXNzICopIGhzdG10OwoJQ29ubmVjdGlvbkNsYXNzICpjb25uOwoJUVJlc3VsdENsYXNzCSpy ZXM7CglTdGF0ZW1lbnRDbGFzcyAqY29sX3N0bXQgPSBOVUxMOwoJUFFFeHBCdWZmZXJEYXRhCQlj b2x1bW5zX3F1ZXJ5ID0gezB9OwoJY2hhcgkJKmVzY1NjaGVtYU5hbWUgPSBOVUxMLCAqZXNjVGFi bGVOYW1lID0gTlVMTDsKCVJFVENPREUJCXJldCA9IFNRTF9FUlJPUiwgcmVzdWx0OwoJY2hhcgkJ cmVsaGFzcnVsZXNbTUFYX0lORk9fU1RSSU5HXSwgcmVsa2luZFs4XSwgcmVsaGFzb2lkc1s4XTsK CUJPT0wJCXJlbGlzYXZpZXc7CglTUUxTTUFMTElOVAlpbnRlcm5hbF9hc2lzX3R5cGUgPSBTUUxf Q19DSEFSLCBjYlNjaGVtYU5hbWU7Cgljb25zdCBTUUxDSEFSCSpzelNjaGVtYU5hbWU7Cgljb25z dCBjaGFyICplcV9zdHJpbmc7CglpbnQJCXJlc3VsdF9jb2xzOwoKCXN0YXRpYyBjb25zdCBjaGFy ICpjYXRjbltdWzJdID0gewoJCXsiU0NPUEUiLCAiU0NPUEUifSwKCQl7IkNPTFVNTl9OQU1FIiwg IkNPTFVNTl9OQU1FIn0sCgkJeyJEQVRBX1RZUEUiLCAiREFUQV9UWVBFIn0sCgkJeyJUWVBFX05B TUUiLCAiVFlQRV9OQU1FIn0sCgkJeyJDT0xVTU5fU0laRSIsICJQUkVDSVNJT04ifSwKCQl7IkJV RkZFUl9MRU5HVEgiLCAiTEVOR1RIIn0sCgkJeyJERUNJTUFMX0RJR0lUUyIsICJTQ0FMRSJ9LAoJ CXsiUFNFVURPX0NPTFVNTiIsICJQU0VVRE9fQ09MVU1OIn19OwoJRW52aXJvbm1lbnRDbGFzcwkq ZW52OwoJQk9PTCBpc19PREJDMjsKCglNWUxPRygwLCAiZW50ZXJpbmcuLi5zdG10PSVwIHNjbm09 JXAgbGVuPSVkIGNvbFR5cGU9JWQgc2NvcGU9JWRcbiIsIHN0bXQsIHN6VGFibGVPd25lciwgY2JU YWJsZU93bmVyLCBmQ29sVHlwZSwgZlNjb3BlKTsKCglpZiAocmVzdWx0ID0gU0NfaW5pdGlhbGl6 ZV9hbmRfcmVjeWNsZShzdG10KSwgU1FMX1NVQ0NFU1MgIT0gcmVzdWx0KQoJCXJldHVybiByZXN1 bHQ7Cgljb25uID0gU0NfZ2V0X2Nvbm4oc3RtdCk7CgllbnYgPSBDQ19nZXRfZW52KGNvbm4pOwoJ aXNfT0RCQzIgPSBFTl9pc19vZGJjMihlbnYpOwojaWZkZWYJVU5JQ09ERV9TVVBQT1JUCglpZiAo Q0NfaXNfaW5fdW5pY29kZV9kcml2ZXIoY29ubikpCgkJaW50ZXJuYWxfYXNpc190eXBlID0gSU5U RVJOQUxfQVNJU19UWVBFOwojZW5kaWYgLyogVU5JQ09ERV9TVVBQT1JUICovCgoJc3pTY2hlbWFO YW1lID0gc3pUYWJsZU93bmVyOwoJY2JTY2hlbWFOYW1lID0gY2JUYWJsZU93bmVyOwoKCWVzY1Rh YmxlTmFtZSA9IHNpbXBsZUNhdGFsb2dFc2NhcGUoc3pUYWJsZU5hbWUsIGNiVGFibGVOYW1lLCBj b25uKTsKCWlmICghZXNjVGFibGVOYW1lKQoJewoJCVNDX3NldF9lcnJvcihzdG10LCBTVE1UX0lO VkFMSURfTlVMTF9BUkcsICJUaGUgdGFibGUgbmFtZSBpcyByZXF1aXJlZCIsIGZ1bmMpOwoJCXJl dHVybiBTUUxfRVJST1I7Cgl9CiNkZWZpbmUJcmV0dXJuCURPTlRfQ0FMTF9SRVRVUk5fRlJPTV9I RVJFPz8/CgpyZXRyeV9wdWJsaWNfc2NoZW1hOgoJaWYgKGVzY1NjaGVtYU5hbWUpCgkJZnJlZShl c2NTY2hlbWFOYW1lKTsKCWVzY1NjaGVtYU5hbWUgPSBzaW1wbGVDYXRhbG9nRXNjYXBlKHN6U2No ZW1hTmFtZSwgY2JTY2hlbWFOYW1lLCBjb25uKTsKCWVxX3N0cmluZyA9IGdlbl9vcGVzdHIoZXFv cCwgY29ubik7Cglpbml0UFFFeHBCdWZmZXIoJmNvbHVtbnNfcXVlcnkpOwojZGVmaW5lCXJldHVy bglET05UX0NBTExfUkVUVVJOX0ZST01fSEVSRT8/PwoJLyoKCSAqIENyZWF0ZSB0aGUgcXVlcnkg dG8gZmluZCBvdXQgaWYgdGhpcyBpcyBhIHZpZXcgb3Igbm90Li4uCgkgKi8KCWFwcGVuZFBRRXhw QnVmZmVyU3RyKCZjb2x1bW5zX3F1ZXJ5LCAic2VsZWN0IGMucmVsaGFzcnVsZXMsIGMucmVsa2lu ZCIpOwogICBpZiAoUEdfVkVSU0lPTl9MVChjb25uLCAxMi4wKSkKICAgICAgIGFwcGVuZFBRRXhw QnVmZmVyU3RyKCZjb2x1bW5zX3F1ZXJ5LCAiLCBjLnJlbGhhc29pZHMiKTsKICAgZWxzZQogICAg ICAgYXBwZW5kUFFFeHBCdWZmZXJTdHIoJmNvbHVtbnNfcXVlcnksICIsIDAgYXMgcmVsaGFzb2lk cyIpOwoJYXBwZW5kUFFFeHBCdWZmZXJTdHIoJmNvbHVtbnNfcXVlcnksICIgZnJvbSBwZ19jYXRh bG9nLnBnX25hbWVzcGFjZSB1LCIKCQkJCQkiIHBnX2NhdGFsb2cucGdfY2xhc3MgYyB3aGVyZSAi CgkJCQkJInUub2lkID0gYy5yZWxuYW1lc3BhY2UiKTsKCgkvKiBUYWJsZU5hbWUgY2Fubm90IGNv bnRhaW4gYSBzdHJpbmcgc2VhcmNoIHBhdHRlcm4gKi8KCWlmIChlc2NUYWJsZU5hbWUpCgkJYXBw ZW5kUFFFeHBCdWZmZXIoJmNvbHVtbnNfcXVlcnksCgkJCQkJICIgYW5kIGMucmVsbmFtZSAlcycl cyciLCBlcV9zdHJpbmcsIGVzY1RhYmxlTmFtZSk7CgkvKiBTY2hlbWFOYW1lIGNhbm5vdCBjb250 YWluIGEgc3RyaW5nIHNlYXJjaCBwYXR0ZXJuICovCglzY2hlbWFfYXBwZW5kUFFFeHBCdWZmZXIx KCZjb2x1bW5zX3F1ZXJ5LCAiIGFuZCB1Lm5zcG5hbWUgJXMnJS4qcyciLCBlcV9zdHJpbmcsIGVz Y1NjaGVtYU5hbWUsIFRBQkxFX0lTX1ZBTElEKHN6VGFibGVOYW1lLCBjYlRhYmxlTmFtZSksIGNv bm4pOwoKCXJlc3VsdCA9IFBHQVBJX0FsbG9jU3RtdChjb25uLCAoSFNUTVQgKikgJmNvbF9zdG10 LCAwKTsKCWlmICghU1FMX1NVQ0NFRURFRChyZXN1bHQpKQoJewoJCVNDX3NldF9lcnJvcihzdG10 LCBTVE1UX05PX01FTU9SWV9FUlJPUiwgIkNvdWxkbid0IGFsbG9jYXRlIHN0YXRlbWVudCBmb3Ig U1FMU3BlY2lhbENvbHVtbnMgcmVzdWx0LiIsIGZ1bmMpOwoJCWdvdG8gY2xlYW51cDsKCX0KCglN WUxPRygwLCAiY29sX3N0bXQgPSAlcFxuIiwgY29sX3N0bXQpOwoKCWlmIChQUUV4cEJ1ZmZlckRh dGFCcm9rZW4oY29sdW1uc19xdWVyeSkpCgl7CgkJU0Nfc2V0X2Vycm9yKHN0bXQsIFNUTVRfTk9f TUVNT1JZX0VSUk9SLCAiT3V0IG9mIG1lbW9yeSBpbiBQR0FQSV9TcGVjaWFsQ29sdW1ucygpIiwg ZnVuYyk7CgkJZ290byBjbGVhbnVwOwoJfQoJcmVzdWx0ID0gUEdBUElfRXhlY0RpcmVjdChjb2xf c3RtdCwgKFNRTENIQVIgKikgY29sdW1uc19xdWVyeS5kYXRhLCBTUUxfTlRTLCBQT0RCQ19SRE9O TFkpOwoJaWYgKCFTUUxfU1VDQ0VFREVEKHJlc3VsdCkpCgl7CgkJU0NfZnVsbF9lcnJvcl9jb3B5 KHN0bXQsIGNvbF9zdG10LCBGQUxTRSk7CgkJZ290byBjbGVhbnVwOwoJfQoKCS8qIElmIG5vdCBm b3VuZCAqLwoJaWYgKChyZXMgPSBTQ19nZXRfUmVzdWx0KGNvbF9zdG10KSkgJiYKCSAgICAwID09 IFFSX2dldF9udW1fdG90YWxfdHVwbGVzKHJlcykpCgl7CgkJaWYgKGFsbG93X3B1YmxpY19zY2hl bWEoY29ubiwgc3pTY2hlbWFOYW1lLCBjYlNjaGVtYU5hbWUpKQoJCXsKCQkJUEdBUElfRnJlZVN0 bXQoY29sX3N0bXQsIFNRTF9EUk9QKTsKCQkJY29sX3N0bXQgPSBOVUxMOwoJCQlzelNjaGVtYU5h bWUgPSBwdWJzdHI7CgkJCWNiU2NoZW1hTmFtZSA9IFNRTF9OVFM7CgkJCWdvdG8gcmV0cnlfcHVi bGljX3NjaGVtYTsKCQl9CgoJCVNDX3NldF9lcnJvcihzdG10LCBERVNDX0JBRF9QQVJBTUVURVJf TlVNQkVSX0VSUk9SLCAiVGhlIHNwZWNpZmllZCB0YWJsZSBkb2VzIG5vdCBleGlzdCIsIGZ1bmMp OwoJCWdvdG8gY2xlYW51cDsKCX0KCglyZXN1bHQgPSBQR0FQSV9CaW5kQ29sKGNvbF9zdG10LCAx LCBpbnRlcm5hbF9hc2lzX3R5cGUsCgkJCQkJcmVsaGFzcnVsZXMsIHNpemVvZihyZWxoYXNydWxl cyksIE5VTEwpOwoJaWYgKCFTUUxfU1VDQ0VFREVEKHJlc3VsdCkpCgl7CgkJZ290byBjbGVhbnVw OwoJfQoKCXJlc3VsdCA9IFBHQVBJX0JpbmRDb2woY29sX3N0bXQsIDIsIGludGVybmFsX2FzaXNf dHlwZSwKCQkJCQlyZWxraW5kLCBzaXplb2YocmVsa2luZCksIE5VTEwpOwoJaWYgKCFTUUxfU1VD Q0VFREVEKHJlc3VsdCkpCgl7CgkJZ290byBjbGVhbnVwOwoJfQoJcmVsaGFzb2lkc1swXSA9ICcx JzsKCXJlc3VsdCA9IFBHQVBJX0JpbmRDb2woY29sX3N0bXQsIDMsIGludGVybmFsX2FzaXNfdHlw ZSwKCQkJCXJlbGhhc29pZHMsIHNpemVvZihyZWxoYXNvaWRzKSwgTlVMTCk7CglpZiAoIVNRTF9T VUNDRUVERUQocmVzdWx0KSkKCXsKCQlnb3RvIGNsZWFudXA7Cgl9CgoJcmVzdWx0ID0gUEdBUElf RmV0Y2goY29sX3N0bXQpOwoJcmVsaXNhdmlldyA9IChyZWxraW5kWzBdID09ICd2Jyk7CglQR0FQ SV9GcmVlU3RtdChjb2xfc3RtdCwgU1FMX0RST1ApOwoJY29sX3N0bXQgPSBOVUxMOwoKCXJlcyA9 IFFSX0NvbnN0cnVjdG9yKCk7CglpZiAoIXJlcykKCXsKCQlTQ19zZXRfZXJyb3Ioc3RtdCwgU1RN VF9OT19NRU1PUllfRVJST1IsICJDb3VsZG4ndCBhbGxvY2F0ZSBtZW1vcnkgZm9yIHF1ZXJ5LiIs IGZ1bmMpOwoJCWdvdG8gY2xlYW51cDsKCX0KCVNDX3NldF9SZXN1bHQoc3RtdCwgcmVzKTsKCWV4 dGVuZF9jb2x1bW5fYmluZGluZ3MoU0NfZ2V0X0FSREYoc3RtdCksIDgpOwoKCXN0bXQtPmNhdGFs b2dfcmVzdWx0ID0gVFJVRTsKCXJlc3VsdF9jb2xzID0gTlVNX09GX1NQRUNPTFNfRklFTERTOwoJ UVJfc2V0X251bV9maWVsZHMocmVzLCByZXN1bHRfY29scyk7CglRUl9zZXRfZmllbGRfaW5mb19F TihyZXMsIDAsIFBHX1RZUEVfSU5UMiwgMik7CglRUl9zZXRfZmllbGRfaW5mb19FTihyZXMsIDEs IFBHX1RZUEVfVkFSQ0hBUiwgTUFYX0lORk9fU1RSSU5HKTsKCVFSX3NldF9maWVsZF9pbmZvX0VO KHJlcywgMiwgUEdfVFlQRV9JTlQyLCAyKTsKCVFSX3NldF9maWVsZF9pbmZvX0VOKHJlcywgMywg UEdfVFlQRV9WQVJDSEFSLCBNQVhfSU5GT19TVFJJTkcpOwoJUVJfc2V0X2ZpZWxkX2luZm9fRU4o cmVzLCA0LCBQR19UWVBFX0lOVDQsIDQpOwoJUVJfc2V0X2ZpZWxkX2luZm9fRU4ocmVzLCA1LCBQ R19UWVBFX0lOVDQsIDQpOwoJUVJfc2V0X2ZpZWxkX2luZm9fRU4ocmVzLCA2LCBQR19UWVBFX0lO VDIsIDIpOwoJUVJfc2V0X2ZpZWxkX2luZm9fRU4ocmVzLCA3LCBQR19UWVBFX0lOVDIsIDIpOwoK CWlmIChyZWxpc2F2aWV3KQoJewoJCS8qIHRoZXJlJ3Mgbm8gb2lkIGZvciB2aWV3cyAqLwoJCWlm IChmQ29sVHlwZSA9PSBTUUxfQkVTVF9ST1dJRCkKCQl7CgkJCXJldCA9IFNRTF9TVUNDRVNTOwoJ CQlnb3RvIGNsZWFudXA7CgkJfQoJCWVsc2UgaWYgKGZDb2xUeXBlID09IFNRTF9ST1dWRVIpCgkJ ewoJCQlJbnQyCQl0aGVfdHlwZSA9IFBHX1RZUEVfVElEOwoJCQlpbnQJYXR0dHlwbW9kID0gLTE7 CgoJCQl0dXBsZSA9IFFSX0FkZE5ldyhyZXMpOwoKCQkJc2V0X3R1cGxlZmllbGRfbnVsbCgmdHVw bGVbU1BFQ09MU19TQ09QRV0pOwoJCQlzZXRfdHVwbGVmaWVsZF9zdHJpbmcoJnR1cGxlW1NQRUNP TFNfQ09MVU1OX05BTUVdLCAiY3RpZCIpOwoJCQlzZXRfdHVwbGVmaWVsZF9pbnQyKCZ0dXBsZVtT UEVDT0xTX0RBVEFfVFlQRV0sIFBHVFlQRV9BVFRSX1RPX0NPTkNJU0VfVFlQRShjb25uLCB0aGVf dHlwZSwgYXR0dHlwbW9kKSk7CgkJCXNldF90dXBsZWZpZWxkX3N0cmluZygmdHVwbGVbU1BFQ09M U19UWVBFX05BTUVdLCBwZ3R5cGVfYXR0cl90b19uYW1lKGNvbm4sIHRoZV90eXBlLCBhdHR0eXBt b2QsIEZBTFNFKSk7CgkJCXNldF90dXBsZWZpZWxkX2ludDQoJnR1cGxlW1NQRUNPTFNfQ09MVU1O X1NJWkVdLCBQR1RZUEVfQVRUUl9DT0xVTU5fU0laRShjb25uLCB0aGVfdHlwZSwgYXR0dHlwbW9k KSk7CgkJCXNldF90dXBsZWZpZWxkX2ludDQoJnR1cGxlW1NQRUNPTFNfQlVGRkVSX0xFTkdUSF0s IFBHVFlQRV9BVFRSX0JVRkZFUl9MRU5HVEgoY29ubiwgdGhlX3R5cGUsIGF0dHR5cG1vZCkpOwoJ CQlzZXRfdHVwbGVmaWVsZF9pbnQyKCZ0dXBsZVtTUEVDT0xTX0RFQ0lNQUxfRElHSVRTXSwgUEdU WVBFX0FUVFJfREVDSU1BTF9ESUdJVFMoY29ubiwgdGhlX3R5cGUsIGF0dHR5cG1vZCkpOwoJCQlz ZXRfdHVwbGVmaWVsZF9pbnQyKCZ0dXBsZVtTUEVDT0xTX1BTRVVET19DT0xVTU5dLCBTUUxfUENf Tk9UX1BTRVVETyk7Ck1ZTE9HKERFVEFJTF9MT0dfTEVWRUwsICJBZGQgY3RpZFxuIik7CgkJfQoJ fQoJZWxzZQoJewoJCS8qIHVzZSB0aGUgb2lkIHZhbHVlIGZvciB0aGUgcm93aWQgKi8KCQlpZiAo ZkNvbFR5cGUgPT0gU1FMX0JFU1RfUk9XSUQpCgkJewoJCQlJbnQyCXRoZV90eXBlID0gUEdfVFlQ RV9PSUQ7CgkJCWludAlhdHR0eXBtb2QgPSAtMTsKCgkJCWlmIChyZWxoYXNvaWRzWzBdICE9ICcx JykKCQkJewoJCQkJcmV0ID0gU1FMX1NVQ0NFU1M7CgkJCQlnb3RvIGNsZWFudXA7CgkJCX0KCQkJ dHVwbGUgPSBRUl9BZGROZXcocmVzKTsKCgkJCXNldF90dXBsZWZpZWxkX2ludDIoJnR1cGxlW1NQ RUNPTFNfU0NPUEVdLCBTUUxfU0NPUEVfU0VTU0lPTik7CgkJCXNldF90dXBsZWZpZWxkX3N0cmlu ZygmdHVwbGVbU1BFQ09MU19DT0xVTU5fTkFNRV0sIE9JRF9OQU1FKTsKCQkJc2V0X3R1cGxlZmll bGRfaW50MigmdHVwbGVbU1BFQ09MU19EQVRBX1RZUEVdLCBQR1RZUEVfQVRUUl9UT19DT05DSVNF X1RZUEUoY29ubiwgdGhlX3R5cGUsIGF0dHR5cG1vZCkpOwoJCQlzZXRfdHVwbGVmaWVsZF9zdHJp bmcoJnR1cGxlW1NQRUNPTFNfVFlQRV9OQU1FXSwgcGd0eXBlX2F0dHJfdG9fbmFtZShjb25uLCB0 aGVfdHlwZSwgYXR0dHlwbW9kLCBUUlVFKSk7CgkJCXNldF90dXBsZWZpZWxkX2ludDQoJnR1cGxl W1NQRUNPTFNfQ09MVU1OX1NJWkVdLCBQR1RZUEVfQVRUUl9DT0xVTU5fU0laRShjb25uLCB0aGVf dHlwZSwgYXR0dHlwbW9kKSk7CgkJCXNldF90dXBsZWZpZWxkX2ludDQoJnR1cGxlW1NQRUNPTFNf QlVGRkVSX0xFTkdUSF0sIFBHVFlQRV9BVFRSX0JVRkZFUl9MRU5HVEgoY29ubiwgdGhlX3R5cGUs IGF0dHR5cG1vZCkpOwoJCQlzZXRfdHVwbGVmaWVsZF9pbnQyKCZ0dXBsZVtTUEVDT0xTX0RFQ0lN QUxfRElHSVRTXSwgUEdUWVBFX0FUVFJfREVDSU1BTF9ESUdJVFMoY29ubiwgdGhlX3R5cGUsIGF0 dHR5cG1vZCkpOwoJCQlzZXRfdHVwbGVmaWVsZF9pbnQyKCZ0dXBsZVtTUEVDT0xTX1BTRVVET19D T0xVTU5dLCBTUUxfUENfUFNFVURPKTsKCQl9CgkJZWxzZSBpZiAoZkNvbFR5cGUgPT0gU1FMX1JP V1ZFUikKCQl7CgkJCUludDIJCXRoZV90eXBlID0gUEdfVFlQRV9YSUQ7CgkJCWludAlhdHR0eXBt b2QgPSAtMTsKCgkJCXR1cGxlID0gUVJfQWRkTmV3KHJlcyk7CgoJCQlzZXRfdHVwbGVmaWVsZF9u dWxsKCZ0dXBsZVtTUEVDT0xTX1NDT1BFXSk7CgkJCXNldF90dXBsZWZpZWxkX3N0cmluZygmdHVw bGVbU1BFQ09MU19DT0xVTU5fTkFNRV0sIFhNSU5fTkFNRSk7CgkJCXNldF90dXBsZWZpZWxkX2lu dDIoJnR1cGxlW1NQRUNPTFNfREFUQV9UWVBFXSwgUEdUWVBFX0FUVFJfVE9fQ09OQ0lTRV9UWVBF KGNvbm4sIHRoZV90eXBlLCBhdHR0eXBtb2QpKTsKCQkJc2V0X3R1cGxlZmllbGRfc3RyaW5nKCZ0 dXBsZVtTUEVDT0xTX1RZUEVfTkFNRV0sIHBndHlwZV9hdHRyX3RvX25hbWUoY29ubiwgdGhlX3R5 cGUsIGF0dHR5cG1vZCwgRkFMU0UpKTsKCQkJc2V0X3R1cGxlZmllbGRfaW50NCgmdHVwbGVbU1BF Q09MU19DT0xVTU5fU0laRV0sIFBHVFlQRV9BVFRSX0NPTFVNTl9TSVpFKGNvbm4sIHRoZV90eXBl LCBhdHR0eXBtb2QpKTsKCQkJc2V0X3R1cGxlZmllbGRfaW50NCgmdHVwbGVbU1BFQ09MU19CVUZG RVJfTEVOR1RIXSwgUEdUWVBFX0FUVFJfQlVGRkVSX0xFTkdUSChjb25uLCB0aGVfdHlwZSwgYXR0 dHlwbW9kKSk7CgkJCXNldF90dXBsZWZpZWxkX2ludDIoJnR1cGxlW1NQRUNPTFNfREVDSU1BTF9E SUdJVFNdLCBQR1RZUEVfQVRUUl9ERUNJTUFMX0RJR0lUUyhjb25uLCB0aGVfdHlwZSwgYXR0dHlw bW9kKSk7CgkJCXNldF90dXBsZWZpZWxkX2ludDIoJnR1cGxlW1NQRUNPTFNfUFNFVURPX0NPTFVN Tl0sIFNRTF9QQ19QU0VVRE8pOwoJCX0KCX0KCXJldCA9IFNRTF9TVUNDRVNTOwoKY2xlYW51cDoK I3VuZGVmCXJldHVybgoJaWYgKCFTUUxfU1VDQ0VFREVEKHJldCkgJiYgMCA+PSBTQ19nZXRfZXJy b3JudW1iZXIoc3RtdCkpCgkJU0NfZXJyb3JfY29weShzdG10LCBjb2xfc3RtdCwgVFJVRSk7Cglp ZiAoIVBRRXhwQnVmZmVyRGF0YUJyb2tlbihjb2x1bW5zX3F1ZXJ5KSkKCQl0ZXJtUFFFeHBCdWZm ZXIoJmNvbHVtbnNfcXVlcnkpOwoJaWYgKGVzY1NjaGVtYU5hbWUpCgkJZnJlZShlc2NTY2hlbWFO YW1lKTsKCWlmIChlc2NUYWJsZU5hbWUpCgkJZnJlZShlc2NUYWJsZU5hbWUpOwoJc3RtdC0+c3Rh dHVzID0gU1RNVF9GSU5JU0hFRDsKCXN0bXQtPmN1cnJUdXBsZSA9IC0xOwoJU0Nfc2V0X3Jvd3Nl dF9zdGFydChzdG10LCAtMSwgRkFMU0UpOwoJU0Nfc2V0X2N1cnJlbnRfY29sKHN0bXQsIC0xKTsK CWlmIChjb2xfc3RtdCkKCQlQR0FQSV9GcmVlU3RtdChjb2xfc3RtdCwgU1FMX0RST1ApOwoJTVlM T0coMCwgImxlYXZpbmcgIHN0bXQ9JXBcbiIsIHN0bXQpOwoJcmV0dXJuIHJldDsKfQoKCiNkZWZp bmUgSU5ET1BUSU9OX0RFU0MJCTB4MDAwMQkvKiB2YWx1ZXMgYXJlIGluIHJldmVyc2Ugb3JkZXIg Ki8KUkVUQ09ERQkJU1FMX0FQSQpQR0FQSV9TdGF0aXN0aWNzKEhTVE1UIGhzdG10LAoJCQkJIGNv bnN0IFNRTENIQVIgKiBzelRhYmxlUXVhbGlmaWVyLCAvKiBPQSBYKi8KCQkJCSBTUUxTTUFMTElO VCBjYlRhYmxlUXVhbGlmaWVyLAoJCQkJIGNvbnN0IFNRTENIQVIgKiBzelRhYmxlT3duZXIsIC8q IE9BIEUqLwoJCQkJIFNRTFNNQUxMSU5UIGNiVGFibGVPd25lciwKCQkJCSBjb25zdCBTUUxDSEFS ICogc3pUYWJsZU5hbWUsIC8qIE9BKFIpIEUqLwoJCQkJIFNRTFNNQUxMSU5UIGNiVGFibGVOYW1l LAoJCQkJIFNRTFVTTUFMTElOVCBmVW5pcXVlLAoJCQkJIFNRTFVTTUFMTElOVCBmQWNjdXJhY3kp CnsKCUNTVFIgZnVuYyA9ICJQR0FQSV9TdGF0aXN0aWNzIjsKCVN0YXRlbWVudENsYXNzICpzdG10 ID0gKFN0YXRlbWVudENsYXNzICopIGhzdG10OwoJQ29ubmVjdGlvbkNsYXNzICpjb25uOwoJUVJl c3VsdENsYXNzCSpyZXM7CglQUUV4cEJ1ZmZlckRhdGEJCWluZGV4X3F1ZXJ5ID0gezB9OwoJUkVU Q09ERQkJcmV0ID0gU1FMX0VSUk9SLCByZXN1bHQ7CgljaGFyCQkqZXNjU2NoZW1hTmFtZSA9IE5V TEwsICp0YWJsZV9uYW1lID0gTlVMTCwgKmVzY1RhYmxlTmFtZSA9IE5VTEw7CgljaGFyCQlpbmRl eF9uYW1lW01BWF9JTkZPX1NUUklOR107CglzaG9ydAkJZmllbGRzX3ZlY3RvcltJTkRFWF9LRVlT X1NUT1JBR0VfQ09VTlQgKyAxXTsKCXNob3J0CQlpbmRvcHRfdmVjdG9yW0lOREVYX0tFWVNfU1RP UkFHRV9DT1VOVCArIDFdOwoJY2hhcgkJaXN1bmlxdWVbMTBdLAoJCQkJaXNjbHVzdGVyZWRbMTBd LAoJCQkJaXNoYXNoW01BWF9JTkZPX1NUUklOR107CglTUUxMRU4JCWluZGV4X25hbWVfbGVuLCBm aWVsZHNfdmVjdG9yX2xlbjsKCVR1cGxlRmllbGQJKnR1cGxlOwoJaW50CQkJaTsKCVN0YXRlbWVu dENsYXNzICpjb2xfc3RtdCA9IE5VTEwsICppbmR4X3N0bXQgPSBOVUxMOwoJY2hhcgkJY29sdW1u X25hbWVbTUFYX0lORk9fU1RSSU5HXSwKCQkJdGFibGVfc2NoZW1hbmFtZVtNQVhfSU5GT19TVFJJ TkddLAoJCQkJcmVsaGFzcnVsZXNbMTBdOwoJc3RydWN0IGNvbHVtbnNfaWR4IHsKCQlpbnQJcG51 bTsKCQljaGFyCSpjb2xfbmFtZTsKCX0gKmNvbHVtbl9uYW1lcyA9IE5VTEw7CgkvKiBjaGFyCSAg Kipjb2x1bW5fbmFtZXMgPSBOVUxMOyAqLwoJU1FMTEVOCQljb2x1bW5fbmFtZV9sZW47CglpbnQJ CXRvdGFsX2NvbHVtbnMgPSAwLCBhbGNvdW50OwoJQ29ubkluZm8gICAqY2k7CgljaGFyCQlidWZb MjU2XTsKCVNRTFNNQUxMSU5UCWludGVybmFsX2FzaXNfdHlwZSA9IFNRTF9DX0NIQVIsIGNiU2No ZW1hTmFtZSwgZmllbGRfbnVtYmVyOwoJY29uc3QgU1FMQ0hBUiAqc3pTY2hlbWFOYW1lOwoJY29u c3QgY2hhciAqZXFfc3RyaW5nOwoJT0lECQlpb2lkOwoJSW50NAkJcmVsaGFzb2lkczsKCglzdGF0 aWMgY29uc3QgY2hhciAqY2F0Y25bXVsyXSA9IHsKCQl7IlRBQkxFX0NBVCIsICJUQUJMRV9RVUFM SUZJRVIifSwKCQl7IlRBQkxFX1NDSEVNIiwgIlRBQkxFX09XTkVSIn0sCgkJeyJUQUJMRV9OQU1F IiwgIlRBQkxFX05BTUUifSwKCQl7Ik5PTl9VTklRVUUiICwgIk5PTl9VTklRVUUifSwKCQl7IklO REVYX1FVQUxJRklFUiIsICJJTkRFWF9RVUFMSUZJRVIifSwKCQl7IklOREVYX05BTUUiLCAiSU5E RVhfTkFNRSJ9LAoJCXsiVFlQRSIsICJUWVBFIn0sCgkJeyJPUkRJTkFMX1BPU0lUSU9OIiwgIlNF UV9JTl9JTkRFWCJ9LAoJCXsiQ09MVU1OX05BTUUiLCAiQ09MVU1OX05BTUUifSwKCQl7IkFTQ19P Ul9ERVNDIiwgIkNPTExBVElPTiJ9LAoJCXsiQ0FSRElOQUxJVFkiLCAiQ0FSRElOQUxJVFkifSwK CQl7IlBBR0VTIiwgIlBBR0VTIn0sCgkJeyJGSUxURVJfQ09ORElUSU9OIiwgIkZJTFRFUl9DT05E SVRJT04ifX07CglFbnZpcm9ubWVudENsYXNzICplbnY7CglCT09MIGlzX09EQkMyOwoKCglNWUxP RygwLCAiZW50ZXJpbmcuLi5zdG10PSVwIHNjbm09JXAgbGVuPSVkXG4iLCBzdG10LCBzelRhYmxl T3duZXIsIGNiVGFibGVPd25lcik7CgoJaWYgKHJlc3VsdCA9IFNDX2luaXRpYWxpemVfYW5kX3Jl Y3ljbGUoc3RtdCksIFNRTF9TVUNDRVNTICE9IHJlc3VsdCkKCQlyZXR1cm4gcmVzdWx0OwoKCXRh YmxlX25hbWUgPSBtYWtlX3N0cmluZyhzelRhYmxlTmFtZSwgY2JUYWJsZU5hbWUsIE5VTEwsIDAp OwoJaWYgKCF0YWJsZV9uYW1lKQoJewoJCVNDX3NldF9lcnJvcihzdG10LCBTVE1UX0lOVkFMSURf TlVMTF9BUkcsICJUaGUgdGFibGUgbmFtZSBpcyByZXF1aXJlZCIsIGZ1bmMpOwoJCXJldHVybiBy ZXN1bHQ7Cgl9Cgljb25uID0gU0NfZ2V0X2Nvbm4oc3RtdCk7CgljaSA9ICYoY29ubi0+Y29ubklu Zm8pOwoJZW52ID0gQ0NfZ2V0X2Vudihjb25uKTsKCWlzX09EQkMyID0gRU5faXNfb2RiYzIoZW52 KTsKI2lmZGVmCVVOSUNPREVfU1VQUE9SVAoJaWYgKENDX2lzX2luX3VuaWNvZGVfZHJpdmVyKGNv bm4pKQoJCWludGVybmFsX2FzaXNfdHlwZSA9IElOVEVSTkFMX0FTSVNfVFlQRTsKI2VuZGlmIC8q IFVOSUNPREVfU1VQUE9SVCAqLwoKCWlmIChyZXMgPSBRUl9Db25zdHJ1Y3RvcigpLCAhcmVzKQoJ ewoJCVNDX3NldF9lcnJvcihzdG10LCBTVE1UX05PX01FTU9SWV9FUlJPUiwgIkNvdWxkbid0IGFs bG9jYXRlIG1lbW9yeSBmb3IgUEdBUElfU3RhdGlzdGljcyByZXN1bHQuIiwgZnVuYyk7CgkJZnJl ZSh0YWJsZV9uYW1lKTsKCQlyZXR1cm4gU1FMX0VSUk9SOwoJfQoJU0Nfc2V0X1Jlc3VsdChzdG10 LCByZXMpOwoKCS8qIHRoZSBiaW5kaW5nIHN0cnVjdHVyZSBmb3IgYSBzdGF0ZW1lbnQgaXMgbm90 IHNldCB1cCB1bnRpbCAqLwoKCS8qCgkgKiBhIHN0YXRlbWVudCBpcyBhY3R1YWxseSBleGVjdXRl ZCwgc28gd2UnbGwgaGF2ZSB0byBkbyB0aGlzCgkgKiBvdXJzZWx2ZXMuCgkgKi8KCWV4dGVuZF9j b2x1bW5fYmluZGluZ3MoU0NfZ2V0X0FSREYoc3RtdCksIDEzKTsKCglzdG10LT5jYXRhbG9nX3Jl c3VsdCA9IFRSVUU7CgkvKiBzZXQgdGhlIGZpZWxkIG5hbWVzICovCglRUl9zZXRfbnVtX2ZpZWxk cyhyZXMsIE5VTV9PRl9TVEFUU19GSUVMRFMpOwoJUVJfc2V0X2ZpZWxkX2luZm9fRU4ocmVzLCBT VEFUU19DQVRBTE9HX05BTUUsIFBHX1RZUEVfVkFSQ0hBUiwgTUFYX0lORk9fU1RSSU5HKTsKCVFS X3NldF9maWVsZF9pbmZvX0VOKHJlcywgU1RBVFNfU0NIRU1BX05BTUUsIFBHX1RZUEVfVkFSQ0hB UiwgTUFYX0lORk9fU1RSSU5HKTsKCVFSX3NldF9maWVsZF9pbmZvX0VOKHJlcywgU1RBVFNfVEFC TEVfTkFNRSwgUEdfVFlQRV9WQVJDSEFSLCBNQVhfSU5GT19TVFJJTkcpOwoJUVJfc2V0X2ZpZWxk X2luZm9fRU4ocmVzLCBTVEFUU19OT05fVU5JUVVFLCBQR19UWVBFX0lOVDIsIDIpOwoJUVJfc2V0 X2ZpZWxkX2luZm9fRU4ocmVzLCBTVEFUU19JTkRFWF9RVUFMSUZJRVIsIFBHX1RZUEVfVkFSQ0hB UiwgTUFYX0lORk9fU1RSSU5HKTsKCVFSX3NldF9maWVsZF9pbmZvX0VOKHJlcywgU1RBVFNfSU5E RVhfTkFNRSwgUEdfVFlQRV9WQVJDSEFSLCBNQVhfSU5GT19TVFJJTkcpOwoJUVJfc2V0X2ZpZWxk X2luZm9fRU4ocmVzLCBTVEFUU19UWVBFLCBQR19UWVBFX0lOVDIsIDIpOwoJUVJfc2V0X2ZpZWxk X2luZm9fRU4ocmVzLCBTVEFUU19TRVFfSU5fSU5ERVgsIFBHX1RZUEVfSU5UMiwgMik7CglRUl9z ZXRfZmllbGRfaW5mb19FTihyZXMsIFNUQVRTX0NPTFVNTl9OQU1FLCBQR19UWVBFX1ZBUkNIQVIs IE1BWF9JTkZPX1NUUklORyk7CglRUl9zZXRfZmllbGRfaW5mb19FTihyZXMsIFNUQVRTX0NPTExB VElPTiwgUEdfVFlQRV9DSEFSLCAxKTsKCVFSX3NldF9maWVsZF9pbmZvX0VOKHJlcywgU1RBVFNf Q0FSRElOQUxJVFksIFBHX1RZUEVfSU5UNCwgNCk7CglRUl9zZXRfZmllbGRfaW5mb19FTihyZXMs IFNUQVRTX1BBR0VTLCBQR19UWVBFX0lOVDQsIDQpOwoJUVJfc2V0X2ZpZWxkX2luZm9fRU4ocmVz LCBTVEFUU19GSUxURVJfQ09ORElUSU9OLCBQR19UWVBFX1ZBUkNIQVIsIE1BWF9JTkZPX1NUUklO Ryk7CgojZGVmaW5lCXJldHVybglET05UX0NBTExfUkVUVVJOX0ZST01fSEVSRT8/PwoJc3pTY2hl bWFOYW1lID0gc3pUYWJsZU93bmVyOwoJY2JTY2hlbWFOYW1lID0gY2JUYWJsZU93bmVyOwoKCXRh YmxlX3NjaGVtYW5hbWVbMF0gPSAnXDAnOwoJc2NoZW1hX3N0cih0YWJsZV9zY2hlbWFuYW1lLCBz aXplb2YodGFibGVfc2NoZW1hbmFtZSksIHN6U2NoZW1hTmFtZSwgY2JTY2hlbWFOYW1lLCBUQUJM RV9JU19WQUxJRChzelRhYmxlTmFtZSwgY2JUYWJsZU5hbWUpLCBjb25uKTsKCgkvKgoJICogd2Ug bmVlZCB0byBnZXQgYSBsaXN0IG9mIHRoZSBmaWVsZCBuYW1lcyBmaXJzdCwgc28gd2UgY2FuIHJl dHVybgoJICogdGhlbSBsYXRlci4KCSAqLwoJcmVzdWx0ID0gUEdBUElfQWxsb2NTdG10KGNvbm4s IChIU1RNVCAqKSAmY29sX3N0bXQsIDApOwoJaWYgKCFTUUxfU1VDQ0VFREVEKHJlc3VsdCkpCgl7 CgkJU0Nfc2V0X2Vycm9yKHN0bXQsIFNUTVRfTk9fTUVNT1JZX0VSUk9SLCAiUEdBUElfQWxsb2NT dG10IGZhaWxlZCBpbiBQR0FQSV9TdGF0aXN0aWNzIGZvciBjb2x1bW5zLiIsIGZ1bmMpOwoJCWdv dG8gY2xlYW51cDsKCX0KCgkvKgoJICogdGFibGVfbmFtZSBwYXJhbWV0ZXIgY2Fubm90IGNvbnRh aW4gYSBzdHJpbmcgc2VhcmNoIHBhdHRlcm4uCgkgKi8KCXJlc3VsdCA9IFBHQVBJX0NvbHVtbnMo Y29sX3N0bXQsCgkJCQkJCSAgIE5VTEwsIDAsCgkJCQkJCSAgIChTUUxDSEFSICopIHRhYmxlX3Nj aGVtYW5hbWUsIFNRTF9OVFMsCgkJCQkJCSAgIChTUUxDSEFSICopIHRhYmxlX25hbWUsIFNRTF9O VFMsCgkJCQkJCSAgIE5VTEwsIDAsCgkJCQkJCSAgIFBPREJDX05PVF9TRUFSQ0hfUEFUVEVSTiB8 IFBPREJDX1NFQVJDSF9QVUJMSUNfU0NIRU1BLCAwLCAwKTsKCglpZiAoIVNRTF9TVUNDRUVERUQo cmVzdWx0KSkKCXsKCQlnb3RvIGNsZWFudXA7Cgl9CglyZXN1bHQgPSBQR0FQSV9CaW5kQ29sKGNv bF9zdG10LCBDT0xVTU5TX0NPTFVNTl9OQU1FICsgMSwgaW50ZXJuYWxfYXNpc190eXBlLAoJCQkJ CQkgY29sdW1uX25hbWUsIHNpemVvZihjb2x1bW5fbmFtZSksICZjb2x1bW5fbmFtZV9sZW4pOwoJ aWYgKCFTUUxfU1VDQ0VFREVEKHJlc3VsdCkpCgl7CgkJZ290byBjbGVhbnVwOwoJfQoJcmVzdWx0 ID0gUEdBUElfQmluZENvbChjb2xfc3RtdCwgQ09MVU1OU19QSFlTSUNBTF9OVU1CRVIgKyAxLCBT UUxfQ19TSE9SVCwKCQkJJmZpZWxkX251bWJlciwgc2l6ZW9mKGZpZWxkX251bWJlciksIE5VTEwp OwoJaWYgKCFTUUxfU1VDQ0VFREVEKHJlc3VsdCkpCgl7CgkJZ290byBjbGVhbnVwOwoJfQoKCWFs Y291bnQgPSAwOwoJcmVzdWx0ID0gUEdBUElfRmV0Y2goY29sX3N0bXQpOwoJd2hpbGUgKFNRTF9T VUNDRUVERUQocmVzdWx0KSkKCXsKCQlpZiAoMCA9PSB0b3RhbF9jb2x1bW5zKQoJCQlQR0FQSV9H ZXREYXRhKGNvbF9zdG10LCAyLCBpbnRlcm5hbF9hc2lzX3R5cGUsIHRhYmxlX3NjaGVtYW5hbWUs IHNpemVvZih0YWJsZV9zY2hlbWFuYW1lKSwgTlVMTCk7CgoJCWlmICh0b3RhbF9jb2x1bW5zID49 IGFsY291bnQpCgkJewoJCQlpZiAoMCA9PSBhbGNvdW50KQoJCQkJYWxjb3VudCA9IDQ7CgkJCWVs c2UKCQkJCWFsY291bnQgKj0gMjsKCQkJU0NfUkVBTExPQ19nZXhpdF93aXRoX2Vycm9yKGNvbHVt bl9uYW1lcywgc3RydWN0IGNvbHVtbnNfaWR4LCBhbGNvdW50ICogc2l6ZW9mKHN0cnVjdCBjb2x1 bW5zX2lkeCksIHN0bXQsICJDb3VsZG4ndCBhbGxvY2F0ZSBtZW1vcnkgZm9yIGNvbHVtbiBuYW1l cy4iLCAocmVzdWx0ID0gU1FMX0VSUk9SKSk7CgkJfQoJCWNvbHVtbl9uYW1lc1t0b3RhbF9jb2x1 bW5zXS5jb2xfbmFtZSA9IHN0cmR1cChjb2x1bW5fbmFtZSk7CgkJaWYgKCFjb2x1bW5fbmFtZXNb dG90YWxfY29sdW1uc10uY29sX25hbWUpCgkJewoJCQlTQ19zZXRfZXJyb3Ioc3RtdCwgU1RNVF9O T19NRU1PUllfRVJST1IsICJDb3VsZG4ndCBhbGxvY2F0ZSBtZW1vcnkgZm9yIGNvbHVtbiBuYW1l LiIsIGZ1bmMpOwoJCQlnb3RvIGNsZWFudXA7CgkJfQoJCWNvbHVtbl9uYW1lc1t0b3RhbF9jb2x1 bW5zXS5wbnVtID0gZmllbGRfbnVtYmVyOwoJCXRvdGFsX2NvbHVtbnMrKzsKCgkJTVlMT0coMCwg ImNvbHVtbl9uYW1lID0gJyVzJ1xuIiwgY29sdW1uX25hbWUpOwoKCQlyZXN1bHQgPSBQR0FQSV9G ZXRjaChjb2xfc3RtdCk7Cgl9CgoJaWYgKHJlc3VsdCAhPSBTUUxfTk9fREFUQV9GT1VORCkKCXsK CQlTQ19mdWxsX2Vycm9yX2NvcHkoc3RtdCwgY29sX3N0bXQsIEZBTFNFKTsKCQlnb3RvIGNsZWFu dXA7Cgl9CglQR0FQSV9GcmVlU3RtdChjb2xfc3RtdCwgU1FMX0RST1ApOwoJY29sX3N0bXQgPSBO VUxMOwoJaWYgKHRvdGFsX2NvbHVtbnMgPT0gMCkKCXsKCQkvKiBDb3VsZG4ndCBnZXQgY29sdW1u IG5hbWVzIGluIFNRTFN0YXRpc3RpY3MuOyAqLwoJCXJldCA9IFNRTF9TVUNDRVNTOwoJCWdvdG8g Y2xlYW51cDsKCX0KCgkvKiBnZXQgYSBsaXN0IG9mIGluZGV4ZXMgb24gdGhpcyB0YWJsZSAqLwoJ cmVzdWx0ID0gUEdBUElfQWxsb2NTdG10KGNvbm4sIChIU1RNVCAqKSAmaW5keF9zdG10LCAwKTsK CWlmICghU1FMX1NVQ0NFRURFRChyZXN1bHQpKQoJewoJCVNDX3NldF9lcnJvcihzdG10LCBTVE1U X05PX01FTU9SWV9FUlJPUiwgIlBHQVBJX0FsbG9jU3RtdCBmYWlsZWQgaW4gU1FMU3RhdGlzdGlj cyBmb3IgaW5kaWNlcy4iLCBmdW5jKTsKCQlnb3RvIGNsZWFudXA7CgoJfQoKCS8qIFRhYmxlTmFt ZSBjYW5ub3QgY29udGFpbiBhIHN0cmluZyBzZWFyY2ggcGF0dGVybiAqLwoJZXNjVGFibGVOYW1l ID0gc2ltcGxlQ2F0YWxvZ0VzY2FwZSgoU1FMQ0hBUiAqKSB0YWJsZV9uYW1lLCBTUUxfTlRTLCBj b25uKTsKCWVxX3N0cmluZyA9IGdlbl9vcGVzdHIoZXFvcCwgY29ubik7Cgllc2NTY2hlbWFOYW1l ID0gc2ltcGxlQ2F0YWxvZ0VzY2FwZSgoU1FMQ0hBUiAqKSB0YWJsZV9zY2hlbWFuYW1lLCBTUUxf TlRTLCBjb25uKTsKCWluaXRQUUV4cEJ1ZmZlcigmaW5kZXhfcXVlcnkpOwoJcHJpbnRmUFFFeHBC dWZmZXIoJmluZGV4X3F1ZXJ5LCAic2VsZWN0IGMucmVsbmFtZSwgaS5pbmRrZXksIGkuaW5kaXN1 bmlxdWUiCgkJIiwgaS5pbmRpc2NsdXN0ZXJlZCwgYS5hbW5hbWUsIGMucmVsaGFzcnVsZXMsIG4u bnNwbmFtZSIKCQkiLCBjLm9pZCwgJXMsICVzIgoJCSIgZnJvbSBwZ19jYXRhbG9nLnBnX2luZGV4 IGksIHBnX2NhdGFsb2cucGdfY2xhc3MgYywiCgkJIiBwZ19jYXRhbG9nLnBnX2NsYXNzIGQsIHBn X2NhdGFsb2cucGdfYW0gYSwiCgkJIiBwZ19jYXRhbG9nLnBnX25hbWVzcGFjZSBuIgoJCSIgd2hl cmUgZC5yZWxuYW1lICVzJyVzJyIKCQkiIGFuZCBuLm5zcG5hbWUgJXMnJXMnIgoJCSIgYW5kIG4u b2lkID0gZC5yZWxuYW1lc3BhY2UiCgkJIiBhbmQgZC5vaWQgPSBpLmluZHJlbGlkIgoJCSIgYW5k IGkuaW5kZXhyZWxpZCA9IGMub2lkIgoJCSIgYW5kIGMucmVsYW0gPSBhLm9pZCBvcmRlciBieSIK ICAgICAgICAsIFBHX1ZFUlNJT05fTFQoY29ubiwgMTIuMCkgPyAiZC5yZWxoYXNvaWRzIiA6ICIw IgoJCSwgUEdfVkVSU0lPTl9HRShjb25uLCA4LjMpID8gImkuaW5kb3B0aW9uIiA6ICIwIgoJCSwg ZXFfc3RyaW5nLCBlc2NUYWJsZU5hbWUsIGVxX3N0cmluZywgZXNjU2NoZW1hTmFtZSk7CglhcHBl bmRQUUV4cEJ1ZmZlclN0cigmaW5kZXhfcXVlcnksICIgaS5pbmRpc3ByaW1hcnkgZGVzYywiKTsK CWFwcGVuZFBRRXhwQnVmZmVyU3RyKCZpbmRleF9xdWVyeSwgIiBpLmluZGlzdW5pcXVlLCBuLm5z cG5hbWUsIGMucmVsbmFtZSIpOwoJaWYgKFBRRXhwQnVmZmVyRGF0YUJyb2tlbihpbmRleF9xdWVy eSkpCgl7CgkJU0Nfc2V0X2Vycm9yKHN0bXQsIFNUTVRfTk9fTUVNT1JZX0VSUk9SLCAiT3V0IG9m IG1lbW9yeSBpbiBQR0FQSV9Db2x1bW5zKCkiLCBmdW5jKTsKCQlnb3RvIGNsZWFudXA7Cgl9CgoJ cmVzdWx0ID0gUEdBUElfRXhlY0RpcmVjdChpbmR4X3N0bXQsIChTUUxDSEFSICopIGluZGV4X3F1 ZXJ5LmRhdGEsIFNRTF9OVFMsIFBPREJDX1JET05MWSk7CglpZiAoIVNRTF9TVUNDRUVERUQocmVz dWx0KSkKCXsKCQkvKgoJCSAqICJDb3VsZG4ndCBleGVjdXRlIGluZGV4IHF1ZXJ5ICh3L1NRTEV4 ZWNEaXJlY3QpIGluCgkJICogU1FMU3RhdGlzdGljcy4iOwoJCSAqLwoJCVNDX2Z1bGxfZXJyb3Jf Y29weShzdG10LCBpbmR4X3N0bXQsIEZBTFNFKTsKCQlnb3RvIGNsZWFudXA7Cgl9CgoJLyogYmlu ZCB0aGUgaW5kZXggbmFtZSBjb2x1bW4gKi8KCXJlc3VsdCA9IFBHQVBJX0JpbmRDb2woaW5keF9z dG10LCAxLCBpbnRlcm5hbF9hc2lzX3R5cGUsCgkJCQkJCSAgIGluZGV4X25hbWUsIE1BWF9JTkZP X1NUUklORywgJmluZGV4X25hbWVfbGVuKTsKCWlmICghU1FMX1NVQ0NFRURFRChyZXN1bHQpKQoJ ewoJCWdvdG8gY2xlYW51cDsKCgl9CgkvKiBiaW5kIHRoZSB2ZWN0b3IgY29sdW1uICovCglyZXN1 bHQgPSBQR0FQSV9CaW5kQ29sKGluZHhfc3RtdCwgMiwgU1FMX0NfREVGQVVMVCwKCQkJZmllbGRz X3ZlY3Rvciwgc2l6ZW9mKGZpZWxkc192ZWN0b3IpLCAmZmllbGRzX3ZlY3Rvcl9sZW4pOwoJaWYg KCFTUUxfU1VDQ0VFREVEKHJlc3VsdCkpCgl7CgkJZ290byBjbGVhbnVwOwoKCX0KCS8qIGJpbmQg dGhlICJpcyB1bmlxdWUiIGNvbHVtbiAqLwoJcmVzdWx0ID0gUEdBUElfQmluZENvbChpbmR4X3N0 bXQsIDMsIGludGVybmFsX2FzaXNfdHlwZSwKCQkJCQkJICAgaXN1bmlxdWUsIHNpemVvZihpc3Vu aXF1ZSksIE5VTEwpOwoJaWYgKCFTUUxfU1VDQ0VFREVEKHJlc3VsdCkpCgl7CgkJZ290byBjbGVh bnVwOwoJfQoKCS8qIGJpbmQgdGhlICJpcyBjbHVzdGVyZWQiIGNvbHVtbiAqLwoJcmVzdWx0ID0g UEdBUElfQmluZENvbChpbmR4X3N0bXQsIDQsIGludGVybmFsX2FzaXNfdHlwZSwKCQkJCQkJICAg aXNjbHVzdGVyZWQsIHNpemVvZihpc2NsdXN0ZXJlZCksIE5VTEwpOwoJaWYgKCFTUUxfU1VDQ0VF REVEKHJlc3VsdCkpCgl7CgkJZ290byBjbGVhbnVwOwoKCX0KCgkvKiBiaW5kIHRoZSAiaXMgaGFz aCIgY29sdW1uICovCglyZXN1bHQgPSBQR0FQSV9CaW5kQ29sKGluZHhfc3RtdCwgNSwgaW50ZXJu YWxfYXNpc190eXBlLAoJCQkJCQkgICBpc2hhc2gsIHNpemVvZihpc2hhc2gpLCBOVUxMKTsKCWlm ICghU1FMX1NVQ0NFRURFRChyZXN1bHQpKQoJewoJCWdvdG8gY2xlYW51cDsKCgl9CgoJcmVzdWx0 ID0gUEdBUElfQmluZENvbChpbmR4X3N0bXQsIDYsIGludGVybmFsX2FzaXNfdHlwZSwKCQkJCQly ZWxoYXNydWxlcywgc2l6ZW9mKHJlbGhhc3J1bGVzKSwgTlVMTCk7CglpZiAoIVNRTF9TVUNDRUVE RUQocmVzdWx0KSkKCXsKCQlnb3RvIGNsZWFudXA7Cgl9CgoJcmVzdWx0ID0gUEdBUElfQmluZENv bChpbmR4X3N0bXQsIDgsIFNRTF9DX1VMT05HLAoJCQkJCSZpb2lkLCBzaXplb2YoaW9pZCksIE5V TEwpOwoJaWYgKCFTUUxfU1VDQ0VFREVEKHJlc3VsdCkpCgl7CgkJZ290byBjbGVhbnVwOwoJfQoK CXJlc3VsdCA9IFBHQVBJX0JpbmRDb2woaW5keF9zdG10LCA5LCBTUUxfQ19VTE9ORywKCQkJCQkm cmVsaGFzb2lkcywgc2l6ZW9mKHJlbGhhc29pZHMpLCBOVUxMKTsKCWlmICghU1FMX1NVQ0NFRURF RChyZXN1bHQpKQoJewoJCWdvdG8gY2xlYW51cDsKCX0KCgkvKiBiaW5kIHRoZSB2ZWN0b3IgY29s dW1uICovCglyZXN1bHQgPSBQR0FQSV9CaW5kQ29sKGluZHhfc3RtdCwgMTAsIFNRTF9DX0RFRkFV TFQsCgkJCWluZG9wdF92ZWN0b3IsIHNpemVvZihmaWVsZHNfdmVjdG9yKSwgJmZpZWxkc192ZWN0 b3JfbGVuKTsKCWlmICghU1FMX1NVQ0NFRURFRChyZXN1bHQpKQoJewoJCWdvdG8gY2xlYW51cDsK Cgl9CgoJcmVsaGFzcnVsZXNbMF0gPSAnMCc7CglyZXN1bHQgPSBQR0FQSV9GZXRjaChpbmR4X3N0 bXQpOwoJLyogZmFrZSBpbmRleCBvZiBPSUQgKi8KCWlmIChyZWxoYXNvaWRzICYmIHJlbGhhc3J1 bGVzWzBdICE9ICcxJyAmJiBhdG9pKGNpLT5zaG93X29pZF9jb2x1bW4pICYmIGF0b2koY2ktPmZh a2Vfb2lkX2luZGV4KSkKCXsKCQl0dXBsZSA9IFFSX0FkZE5ldyhyZXMpOwoKCQkvKiBubyB0YWJs ZSBxdWFsaWZpZXIgKi8KCQlzZXRfdHVwbGVmaWVsZF9zdHJpbmcoJnR1cGxlW1NUQVRTX0NBVEFM T0dfTkFNRV0sIEN1cnJDYXQoY29ubikpOwoJCS8qIGRvbid0IHNldCB0aGUgdGFibGUgb3duZXIs IGVsc2UgQWNjZXNzIHRyaWVzIHRvIHVzZSBpdCAqLwoJCXNldF90dXBsZWZpZWxkX3N0cmluZygm dHVwbGVbU1RBVFNfU0NIRU1BX05BTUVdLCBHRVRfU0NIRU1BX05BTUUodGFibGVfc2NoZW1hbmFt ZSkpOwoJCXNldF90dXBsZWZpZWxkX3N0cmluZygmdHVwbGVbU1RBVFNfVEFCTEVfTkFNRV0sIHRh YmxlX25hbWUpOwoKCQkvKiBub24tdW5pcXVlIGluZGV4PyAqLwoJCXNldF90dXBsZWZpZWxkX2lu dDIoJnR1cGxlW1NUQVRTX05PTl9VTklRVUVdLCAoSW50MikgKGNpLT5kcml2ZXJzLnVuaXF1ZV9p bmRleCA/IEZBTFNFIDogVFJVRSkpOwoKCQkvKiBubyBpbmRleCBxdWFsaWZpZXIgKi8KCQlzZXRf dHVwbGVmaWVsZF9zdHJpbmcoJnR1cGxlW1NUQVRTX0lOREVYX1FVQUxJRklFUl0sIEdFVF9TQ0hF TUFfTkFNRSh0YWJsZV9zY2hlbWFuYW1lKSk7CgoJCVNQUklOVEZfRklYRUQoYnVmLCAiJXNfaWR4 X2Zha2Vfb2lkIiwgdGFibGVfbmFtZSk7CgkJc2V0X3R1cGxlZmllbGRfc3RyaW5nKCZ0dXBsZVtT VEFUU19JTkRFWF9OQU1FXSwgYnVmKTsKCgkJLyoKCQkgKiBDbHVzdGVyZWQvSEFTSCBpbmRleD8K CQkgKi8KCQlzZXRfdHVwbGVmaWVsZF9pbnQyKCZ0dXBsZVtTVEFUU19UWVBFXSwgKEludDIpIFNR TF9JTkRFWF9PVEhFUik7CgkJc2V0X3R1cGxlZmllbGRfaW50MigmdHVwbGVbU1RBVFNfU0VRX0lO X0lOREVYXSwgKEludDIpIDEpOwoKCQlzZXRfdHVwbGVmaWVsZF9zdHJpbmcoJnR1cGxlW1NUQVRT X0NPTFVNTl9OQU1FXSwgT0lEX05BTUUpOwoJCXNldF90dXBsZWZpZWxkX3N0cmluZygmdHVwbGVb U1RBVFNfQ09MTEFUSU9OXSwgIkEiKTsKCQlzZXRfdHVwbGVmaWVsZF9udWxsKCZ0dXBsZVtTVEFU U19DQVJESU5BTElUWV0pOwoJCXNldF90dXBsZWZpZWxkX251bGwoJnR1cGxlW1NUQVRTX1BBR0VT XSk7CgkJc2V0X3R1cGxlZmllbGRfbnVsbCgmdHVwbGVbU1RBVFNfRklMVEVSX0NPTkRJVElPTl0p OwoJfQoKCXdoaWxlIChTUUxfU1VDQ0VFREVEKHJlc3VsdCkpCgl7CgkJLyogSWYgb25seSByZXF1 ZXN0aW5nIHVuaXF1ZSBpbmRleHMsIHRoZW4ganVzdCByZXR1cm4gdGhvc2UuICovCgkJaWYgKGZV bmlxdWUgPT0gU1FMX0lOREVYX0FMTCB8fAoJCQkoZlVuaXF1ZSA9PSBTUUxfSU5ERVhfVU5JUVVF ICYmIGF0b2koaXN1bmlxdWUpKSkKCQl7CgkJCWludAljb2xjbnQsIGF0dG51bTsKCgkJCS8qIGFk ZCBhIHJvdyBpbiB0aGlzIHRhYmxlIGZvciBlYWNoIGZpZWxkIGluIHRoZSBpbmRleCAqLwoJCQlj b2xjbnQgPSBmaWVsZHNfdmVjdG9yWzBdOwoJCQlmb3IgKGkgPSAxOyBpIDw9IGNvbGNudDsgaSsr KQoJCQl7CgkJCQl0dXBsZSA9IFFSX0FkZE5ldyhyZXMpOwoKCQkJCS8qIG5vIHRhYmxlIHF1YWxp ZmllciAqLwoJCQkJc2V0X3R1cGxlZmllbGRfc3RyaW5nKCZ0dXBsZVtTVEFUU19DQVRBTE9HX05B TUVdLCBDdXJyQ2F0KGNvbm4pKTsKCQkJCS8qIGRvbid0IHNldCB0aGUgdGFibGUgb3duZXIsIGVs c2UgQWNjZXNzIHRyaWVzIHRvIHVzZSBpdCAqLwoJCQkJc2V0X3R1cGxlZmllbGRfc3RyaW5nKCZ0 dXBsZVtTVEFUU19TQ0hFTUFfTkFNRV0sIEdFVF9TQ0hFTUFfTkFNRSh0YWJsZV9zY2hlbWFuYW1l KSk7CgkJCQlzZXRfdHVwbGVmaWVsZF9zdHJpbmcoJnR1cGxlW1NUQVRTX1RBQkxFX05BTUVdLCB0 YWJsZV9uYW1lKTsKCgkJCQkvKiBub24tdW5pcXVlIGluZGV4PyAqLwoJCQkJaWYgKGNpLT5kcml2 ZXJzLnVuaXF1ZV9pbmRleCkKCQkJCQlzZXRfdHVwbGVmaWVsZF9pbnQyKCZ0dXBsZVtTVEFUU19O T05fVU5JUVVFXSwgKEludDIpIChhdG9pKGlzdW5pcXVlKSA/IEZBTFNFIDogVFJVRSkpOwoJCQkJ ZWxzZQoJCQkJCXNldF90dXBsZWZpZWxkX2ludDIoJnR1cGxlW1NUQVRTX05PTl9VTklRVUVdLCBU UlVFKTsKCgkJCQkvKiBubyBpbmRleCBxdWFsaWZpZXIgKi8KCQkJCXNldF90dXBsZWZpZWxkX3N0 cmluZygmdHVwbGVbU1RBVFNfSU5ERVhfUVVBTElGSUVSXSwgR0VUX1NDSEVNQV9OQU1FKHRhYmxl X3NjaGVtYW5hbWUpKTsKCQkJCXNldF90dXBsZWZpZWxkX3N0cmluZygmdHVwbGVbU1RBVFNfSU5E RVhfTkFNRV0sIGluZGV4X25hbWUpOwoKCQkJCS8qCgkJCQkgKiBDbHVzdGVyZWQvSEFTSCBpbmRl eD8KCQkJCSAqLwoJCQkJc2V0X3R1cGxlZmllbGRfaW50MigmdHVwbGVbU1RBVFNfVFlQRV0sIChJ bnQyKQoJCQkJCQkJICAgKGF0b2koaXNjbHVzdGVyZWQpID8gU1FMX0lOREVYX0NMVVNURVJFRCA6 CgkJCQkJCQkJKCFzdHJuY21wKGlzaGFzaCwgImhhc2giLCA0KSkgPyBTUUxfSU5ERVhfSEFTSEVE IDogU1FMX0lOREVYX09USEVSKSk7CgkJCQlzZXRfdHVwbGVmaWVsZF9pbnQyKCZ0dXBsZVtTVEFU U19TRVFfSU5fSU5ERVhdLCAoSW50MikgaSk7CgoJCQkJYXR0bnVtID0gZmllbGRzX3ZlY3Rvcltp XTsKCQkJCWlmIChPSURfQVRUTlVNID09IGF0dG51bSkKCQkJCXsKCQkJCQlzZXRfdHVwbGVmaWVs ZF9zdHJpbmcoJnR1cGxlW1NUQVRTX0NPTFVNTl9OQU1FXSwgT0lEX05BTUUpOwoJCQkJCU1ZTE9H KDAsICJjb2x1bW4gbmFtZSA9IG9pZFxuIik7CgkJCQl9CgkJCQllbHNlIGlmICgwID09IGF0dG51 bSkKCQkJCXsKCQkJCQljaGFyCWNtZFs2NF07CgoJCQkJCVFSZXN1bHRDbGFzcyAqcmVzOwoKCQkJ CQlTUFJJTlRGX0ZJWEVEKGNtZCwgInNlbGVjdCBwZ19nZXRfaW5kZXhkZWYoJXUsICVkLCB0cnVl KSIsIGlvaWQsIGkpOwoJCQkJCXJlcyA9IENDX3NlbmRfcXVlcnkoY29ubiwgY21kLCBOVUxMLCBS RUFEX09OTFlfUVVFUlksIHN0bXQpOwoJCQkJCWlmIChRUl9jb21tYW5kX21heWJlX3N1Y2Nlc3Nm dWwocmVzKSkKCQkJCQkJc2V0X3R1cGxlZmllbGRfc3RyaW5nKCZ0dXBsZVtTVEFUU19DT0xVTU5f TkFNRV0sIFFSX2dldF92YWx1ZV9iYWNrZW5kX3RleHQocmVzLCAwLCAwKSk7CgkJCQkJUVJfRGVz dHJ1Y3RvcihyZXMpOwoJCQkJfQoJCQkJZWxzZQoJCQkJewoJCQkJCWludCBqLCBtYXRjaGlkeDsK CQkJCQlCT09MCXVua25vd25mID0gVFJVRTsKCgkJCQkJaWYgKGF0dG51bSA+IDApCgkJCQkJewoJ CQkJCQlmb3IgKGogPSAwOyBqIDwgdG90YWxfY29sdW1uczsgaisrKQoJCQkJCQl7CgkJCQkJCQlp ZiAoYXR0bnVtID09IGNvbHVtbl9uYW1lc1tqXS5wbnVtKQoJCQkJCQkJewoJCQkJCQkJCW1hdGNo aWR4ID0gajsKCQkJCQkJCQl1bmtub3duZiA9IEZBTFNFOwoJCQkJCQkJCWJyZWFrOwoJCQkJCQkJ fQoJCQkJCQl9CgkJCQkJfQoJCQkJCWlmICh1bmtub3duZikKCQkJCQl7CgkJCQkJCXNldF90dXBs ZWZpZWxkX3N0cmluZygmdHVwbGVbU1RBVFNfQ09MVU1OX05BTUVdLCAiVU5LTk9XTiIpOwoJCQkJ CQlNWUxPRygwLCAiY29sdW1uIG5hbWUgPSBVTktOT1dOXG4iKTsKCQkJCQl9CgkJCQkJZWxzZQoJ CQkJCXsKCQkJCQkJc2V0X3R1cGxlZmllbGRfc3RyaW5nKCZ0dXBsZVtTVEFUU19DT0xVTU5fTkFN RV0sIGNvbHVtbl9uYW1lc1ttYXRjaGlkeF0uY29sX25hbWUpOwoJCQkJCQlNWUxPRygwLCAiY29s dW1uIG5hbWUgPSAnJXMnXG4iLCBjb2x1bW5fbmFtZXNbbWF0Y2hpZHhdLmNvbF9uYW1lKTsKCQkJ CQl9CgkJCQl9CgoJCQkJaWYgKGkgPD0gaW5kb3B0X3ZlY3RvclswXSAmJgoJCQkJICAgIChpbmRv cHRfdmVjdG9yW2ldICYgSU5ET1BUSU9OX0RFU0MpICE9IDApCgkJCQkJc2V0X3R1cGxlZmllbGRf c3RyaW5nKCZ0dXBsZVtTVEFUU19DT0xMQVRJT05dLCAiRCIpOwoJCQkJZWxzZQoJCQkJCXNldF90 dXBsZWZpZWxkX3N0cmluZygmdHVwbGVbU1RBVFNfQ09MTEFUSU9OXSwgIkEiKTsKCQkJCXNldF90 dXBsZWZpZWxkX251bGwoJnR1cGxlW1NUQVRTX0NBUkRJTkFMSVRZXSk7CgkJCQlzZXRfdHVwbGVm aWVsZF9udWxsKCZ0dXBsZVtTVEFUU19QQUdFU10pOwoJCQkJc2V0X3R1cGxlZmllbGRfbnVsbCgm dHVwbGVbU1RBVFNfRklMVEVSX0NPTkRJVElPTl0pOwoJCQl9CgkJfQoKCQlyZXN1bHQgPSBQR0FQ SV9GZXRjaChpbmR4X3N0bXQpOwoJfQoJaWYgKHJlc3VsdCAhPSBTUUxfTk9fREFUQV9GT1VORCkK CXsKCQkvKiAiU1FMRmV0Y2ggZmFpbGVkIGluIFNRTFN0YXRpc3RpY3MuIjsgKi8KCQlTQ19mdWxs X2Vycm9yX2NvcHkoc3RtdCwgaW5keF9zdG10LCBGQUxTRSk7CgkJZ290byBjbGVhbnVwOwoJfQoJ cmV0ID0gU1FMX1NVQ0NFU1M7CgpjbGVhbnVwOgojdW5kZWYJcmV0dXJuCgkvKgoJICogYWxzbywg dGhpbmdzIG5lZWQgdG8gdGhpbmsgdGhhdCB0aGlzIHN0YXRlbWVudCBpcyBmaW5pc2hlZCBzbyB0 aGUKCSAqIHJlc3VsdHMgY2FuIGJlIHJldHJpZXZlZC4KCSAqLwoJc3RtdC0+c3RhdHVzID0gU1RN VF9GSU5JU0hFRDsKCglpZiAoIVNRTF9TVUNDRUVERUQocmV0KSAmJiAwID49IFNDX2dldF9lcnJv cm51bWJlcihzdG10KSkKCXsKCQlTQ19lcnJvcl9jb3B5KHN0bXQsIGNvbF9zdG10LCBUUlVFKTsK CQlpZiAoMCA+PSBTQ19nZXRfZXJyb3JudW1iZXIoc3RtdCkpCgkJCVNDX2Vycm9yX2NvcHkoc3Rt dCwgaW5keF9zdG10LCBUUlVFKTsKCX0KCglpZiAoY29sX3N0bXQpCgkJUEdBUElfRnJlZVN0bXQo Y29sX3N0bXQsIFNRTF9EUk9QKTsKCWlmIChpbmR4X3N0bXQpCgkJUEdBUElfRnJlZVN0bXQoaW5k eF9zdG10LCBTUUxfRFJPUCk7CgkvKiBUaGVzZSB0aGluZ3Mgc2hvdWxkIGJlIGZyZWVkIG9uIGFu eSBlcnJvciBBTFNPISAqLwoJaWYgKCFQUUV4cEJ1ZmZlckRhdGFCcm9rZW4oaW5kZXhfcXVlcnkp KQoJCXRlcm1QUUV4cEJ1ZmZlcigmaW5kZXhfcXVlcnkpOwoJaWYgKHRhYmxlX25hbWUpCgkJZnJl ZSh0YWJsZV9uYW1lKTsKCWlmIChlc2NUYWJsZU5hbWUpCgkJZnJlZShlc2NUYWJsZU5hbWUpOwoJ aWYgKGVzY1NjaGVtYU5hbWUpCgkJZnJlZShlc2NTY2hlbWFOYW1lKTsKCWlmIChjb2x1bW5fbmFt ZXMpCgl7CgkJZm9yIChpID0gMDsgaSA8IHRvdGFsX2NvbHVtbnM7IGkrKykKCQkJZnJlZShjb2x1 bW5fbmFtZXNbaV0uY29sX25hbWUpOwoJCWZyZWUoY29sdW1uX25hbWVzKTsKCX0KCgkvKiBzZXQg dXAgdGhlIGN1cnJlbnQgdHVwbGUgcG9pbnRlciBmb3IgU1FMRmV0Y2ggKi8KCXN0bXQtPmN1cnJU dXBsZSA9IC0xOwoJU0Nfc2V0X3Jvd3NldF9zdGFydChzdG10LCAtMSwgRkFMU0UpOwoJU0Nfc2V0 X2N1cnJlbnRfY29sKHN0bXQsIC0xKTsKCglNWUxPRygwLCAibGVhdmluZyBzdG10PSVwLCByZXQ9 JWRcbiIsIHN0bXQsIHJldCk7CgoJcmV0dXJuIHJldDsKfQoKClJFVENPREUJCVNRTF9BUEkKUEdB UElfQ29sdW1uUHJpdmlsZWdlcyhIU1RNVCBoc3RtdCwKCQkJCQkgICBjb25zdCBTUUxDSEFSICog c3pUYWJsZVF1YWxpZmllciwgLyogT0EgWCovCgkJCQkJICAgU1FMU01BTExJTlQgY2JUYWJsZVF1 YWxpZmllciwKCQkJCQkgICBjb25zdCBTUUxDSEFSICogc3pUYWJsZU93bmVyLCAvKiBPQSBFKi8K CQkJCQkgICBTUUxTTUFMTElOVCBjYlRhYmxlT3duZXIsCgkJCQkJICAgY29uc3QgU1FMQ0hBUiAq IHN6VGFibGVOYW1lLCAvKiBPQShSKSBFKi8KCQkJCQkgICBTUUxTTUFMTElOVCBjYlRhYmxlTmFt ZSwKCQkJCQkgICBjb25zdCBTUUxDSEFSICogc3pDb2x1bW5OYW1lLCAvKiBQViBFKi8KCQkJCQkg ICBTUUxTTUFMTElOVCBjYkNvbHVtbk5hbWUsCgkJCQkJICAgVVdPUkQgZmxhZykKewoJQ1NUUiBm dW5jID0gIlBHQVBJX0NvbHVtblByaXZpbGVnZXMiOwoJU3RhdGVtZW50Q2xhc3MJKnN0bXQgPSAo U3RhdGVtZW50Q2xhc3MgKikgaHN0bXQ7CglDb25uZWN0aW9uQ2xhc3MJKmNvbm4gPSBTQ19nZXRf Y29ubihzdG10KTsKCVJFVENPREUJcmV0ID0gU1FMX0VSUk9SOwoJY2hhcgkqZXNjU2NoZW1hTmFt ZSA9IE5VTEwsICplc2NUYWJsZU5hbWUgPSBOVUxMLCAqZXNjQ29sdW1uTmFtZSA9IE5VTEw7Cglj b25zdCBjaGFyCSpsaWtlX29yX2VxLCAqb3Bfc3RyaW5nLCAqZXFfc3RyaW5nOwoJUFFFeHBCdWZm ZXJEYXRhCWNvbHVtbl9xdWVyeSA9IHswfTsKCUJPT0wJc2VhcmNoX3BhdHRlcm47CglRUmVzdWx0 Q2xhc3MJKnJlcyA9IE5VTEw7CgoJTVlMT0coMCwgImVudGVyaW5nLi4uXG4iKTsKCgkvKiBOZWl0 aGVyIEFjY2VzcyBvciBCb3JsYW5kIGNhcmUgYWJvdXQgdGhpcy4gKi8KCglpZiAoU0NfaW5pdGlh bGl6ZV9hbmRfcmVjeWNsZShzdG10KSAhPSBTUUxfU1VDQ0VTUykKCQlyZXR1cm4gU1FMX0VSUk9S OwoJZXNjU2NoZW1hTmFtZSA9IHNpbXBsZUNhdGFsb2dFc2NhcGUoc3pUYWJsZU93bmVyLCBjYlRh YmxlT3duZXIsIGNvbm4pOwoJZXNjVGFibGVOYW1lID0gc2ltcGxlQ2F0YWxvZ0VzY2FwZShzelRh YmxlTmFtZSwgY2JUYWJsZU5hbWUsIGNvbm4pOwoJc2VhcmNoX3BhdHRlcm4gPSAoMCA9PSAoZmxh ZyAmIFBPREJDX05PVF9TRUFSQ0hfUEFUVEVSTikpOwoJaWYgKHNlYXJjaF9wYXR0ZXJuKQoJewoJ CWxpa2Vfb3JfZXEgPSBsaWtlb3A7CgkJZXNjQ29sdW1uTmFtZSA9IGFkanVzdExpa2VQYXR0ZXJu KHN6Q29sdW1uTmFtZSwgY2JDb2x1bW5OYW1lLCBjb25uKTsKCX0KCWVsc2UKCXsKCQlsaWtlX29y X2VxID0gZXFvcDsKCQllc2NDb2x1bW5OYW1lID0gc2ltcGxlQ2F0YWxvZ0VzY2FwZShzekNvbHVt bk5hbWUsIGNiQ29sdW1uTmFtZSwgY29ubik7Cgl9Cglpbml0UFFFeHBCdWZmZXIoJmNvbHVtbl9x dWVyeSk7CiNkZWZpbmUJcmV0dXJuCURPTlRfQ0FMTF9SRVRVUk5fRlJPTV9IRVJFPz8/CglhcHBl bmRQUUV4cEJ1ZmZlclN0cigmY29sdW1uX3F1ZXJ5LCAic2VsZWN0IHRhYmxlX2NhdGFsb2cgYXMg VEFCTEVfQ0FULCB0YWJsZV9zY2hlbWEgYXMgVEFCTEVfU0NIRU0sIgoJCQkiIHRhYmxlX25hbWUs IGNvbHVtbl9uYW1lLCBncmFudG9yLCBncmFudGVlLCIKCQkJIiBwcml2aWxlZ2VfdHlwZSBhcyBQ UklWSUxFR0UsIGlzX2dyYW50YWJsZSBmcm9tIgoJCQkiIGluZm9ybWF0aW9uX3NjaGVtYS5jb2x1 bW5fcHJpdmlsZWdlcyB3aGVyZSB0cnVlIik7CgkvKiBjcV9sZW4gPSBzdHJsZW4oY29sdW1uX3F1 ZXJ5KTsKCWNxX3NpemUgPSBzaXplb2YoY29sdW1uX3F1ZXJ5KTsKCWNvbF9xdWVyeSA9IGNvbHVt bl9xdWVyeTsgKi8KCW9wX3N0cmluZyA9IGdlbl9vcGVzdHIobGlrZV9vcl9lcSwgY29ubik7Cgll cV9zdHJpbmcgPSBnZW5fb3Blc3RyKGVxb3AsIGNvbm4pOwoJaWYgKGVzY1NjaGVtYU5hbWUpCgkJ YXBwZW5kUFFFeHBCdWZmZXIoJmNvbHVtbl9xdWVyeSwgIiBhbmQgdGFibGVfc2NoZW1hICVzJyVz JyIsIGVxX3N0cmluZywgZXNjU2NoZW1hTmFtZSk7CglpZiAoZXNjVGFibGVOYW1lKQoJCWFwcGVu ZFBRRXhwQnVmZmVyKCZjb2x1bW5fcXVlcnksICIgYW5kIHRhYmxlX25hbWUgJXMnJXMnIiwgZXFf c3RyaW5nLCBlc2NUYWJsZU5hbWUpOwoJaWYgKGVzY0NvbHVtbk5hbWUpCgkJYXBwZW5kUFFFeHBC dWZmZXIoJmNvbHVtbl9xdWVyeSwgIiBhbmQgY29sdW1uX25hbWUgJXMnJXMnIiwgb3Bfc3RyaW5n LCBlc2NDb2x1bW5OYW1lKTsKCWlmIChQUUV4cEJ1ZmZlckRhdGFCcm9rZW4oY29sdW1uX3F1ZXJ5 KSkKCXsKCQlTQ19zZXRfZXJyb3Ioc3RtdCwgU1RNVF9OT19NRU1PUllfRVJST1IsICJPdXQgb2Yg bWVtb3J5IGluIFBHQVBJX0NvbHVtblByaXZpbGVzKCkiLCBmdW5jKTsKCQlnb3RvIGNsZWFudXA7 Cgl9CglpZiAocmVzID0gQ0Nfc2VuZF9xdWVyeShjb25uLCBjb2x1bW5fcXVlcnkuZGF0YSwgTlVM TCwgUkVBRF9PTkxZX1FVRVJZLCBzdG10KSwgIVFSX2NvbW1hbmRfbWF5YmVfc3VjY2Vzc2Z1bChy ZXMpKQoJewoJCVNDX3NldF9lcnJvcihzdG10LCBTVE1UX0VYRUNfRVJST1IsICJQR0FQSV9Db2x1 bW5Qcml2aWxlZ2VzIHF1ZXJ5IGVycm9yIiwgZnVuYyk7CgkJZ290byBjbGVhbnVwOwoJfQoJU0Nf c2V0X1Jlc3VsdChzdG10LCByZXMpOwoKCS8qCgkgKiBhbHNvLCB0aGluZ3MgbmVlZCB0byB0aGlu ayB0aGF0IHRoaXMgc3RhdGVtZW50IGlzIGZpbmlzaGVkIHNvIHRoZQoJICogcmVzdWx0cyBjYW4g YmUgcmV0cmlldmVkLgoJICovCglleHRlbmRfY29sdW1uX2JpbmRpbmdzKFNDX2dldF9BUkRGKHN0 bXQpLCA4KTsKCS8qIHNldCB1cCB0aGUgY3VycmVudCB0dXBsZSBwb2ludGVyIGZvciBTUUxGZXRj aCAqLwoJcmV0ID0gU1FMX1NVQ0NFU1M7CmNsZWFudXA6CiN1bmRlZiByZXR1cm4KCWlmICghU1FM X1NVQ0NFRURFRChyZXQpKQoJCVFSX0Rlc3RydWN0b3IocmVzKTsKCS8qIHNldCB1cCB0aGUgY3Vy cmVudCB0dXBsZSBwb2ludGVyIGZvciBTUUxGZXRjaCAqLwoJc3RtdC0+c3RhdHVzID0gU1RNVF9G SU5JU0hFRDsKCXN0bXQtPmN1cnJUdXBsZSA9IC0xOwoJU0Nfc2V0X3Jvd3NldF9zdGFydChzdG10 LCAtMSwgRkFMU0UpOwoJaWYgKCFQUUV4cEJ1ZmZlckRhdGFCcm9rZW4oY29sdW1uX3F1ZXJ5KSkK CQl0ZXJtUFFFeHBCdWZmZXIoJmNvbHVtbl9xdWVyeSk7CglpZiAoZXNjU2NoZW1hTmFtZSkKCQlm cmVlKGVzY1NjaGVtYU5hbWUpOwoJaWYgKGVzY1RhYmxlTmFtZSkKCQlmcmVlKGVzY1RhYmxlTmFt ZSk7CglpZiAoZXNjQ29sdW1uTmFtZSkKCQlmcmVlKGVzY0NvbHVtbk5hbWUpOwoJcmV0dXJuIHJl dDsKfQoKCi8qCiAqCVNRTFByaW1hcnlLZXlzKCkKICoKICoJUmV0cmlldmUgdGhlIHByaW1hcnkg a2V5IGNvbHVtbnMgZm9yIHRoZSBzcGVjaWZpZWQgdGFibGUuCiAqLwpSRVRDT0RFCQlTUUxfQVBJ ClBHQVBJX1ByaW1hcnlLZXlzKEhTVE1UIGhzdG10LAoJCQkJICBjb25zdCBTUUxDSEFSICogc3pU YWJsZVF1YWxpZmllciwgLyogT0EgWCovCgkJCQkgIFNRTFNNQUxMSU5UIGNiVGFibGVRdWFsaWZp ZXIsCgkJCQkgIGNvbnN0IFNRTENIQVIgKiBzelRhYmxlT3duZXIsIC8qIE9BIEUqLwoJCQkJICBT UUxTTUFMTElOVCBjYlRhYmxlT3duZXIsCgkJCQkgIGNvbnN0IFNRTENIQVIgKiBzelRhYmxlTmFt ZSwgLyogT0EoUikgRSovCgkJCQkgIFNRTFNNQUxMSU5UIGNiVGFibGVOYW1lLAoJCQkJICBPSUQJ cmVsb2lkKQp7CglDU1RSIGZ1bmMgPSAiUEdBUElfUHJpbWFyeUtleXMiOwoJU3RhdGVtZW50Q2xh c3MgKnN0bXQgPSAoU3RhdGVtZW50Q2xhc3MgKikgaHN0bXQ7CglRUmVzdWx0Q2xhc3MJKnJlczsK CUNvbm5lY3Rpb25DbGFzcyAqY29ubjsKCVR1cGxlRmllbGQJKnR1cGxlOwoJUkVUQ09ERQkJcmV0 ID0gU1FMX0VSUk9SLCByZXN1bHQ7CglpbnQJCQlzZXEgPSAwOwoJU3RhdGVtZW50Q2xhc3MgKnRi bF9zdG10ID0gTlVMTDsKCVBRRXhwQnVmZmVyRGF0YQkJdGFibGVzX3F1ZXJ5ID0gezB9OwoJY2hh cgkJYXR0bmFtZVtNQVhfSU5GT19TVFJJTkddOwoJU1FMTEVOCQlhdHRuYW1lX2xlbjsKCWNoYXIJ CSpwa3RhYiA9IE5VTEwsICpwa3RibmFtZTsKCWNoYXIJCXBrc2NtW1NDSEVNQV9OQU1FX1NUT1JB R0VfTEVOICsgMV07CglTUUxMRU4JCXBrc2NtX2xlbjsKCWNoYXIJCXRhYm5hbWVbVEFCTEVfTkFN RV9TVE9SQUdFX0xFTiArIDFdOwoJU1FMTEVOCQl0YWJuYW1lX2xlbjsKCWNoYXIJCXBrbmFtZVtU QUJMRV9OQU1FX1NUT1JBR0VfTEVOICsgMV07CglJbnQyCQlyZXN1bHRfY29sczsKCWludAkJCXFu bywKCQkJCXFzdGFydCwKCQkJCXFlbmQ7CglTUUxTTUFMTElOVAlpbnRlcm5hbF9hc2lzX3R5cGUg PSBTUUxfQ19DSEFSLCBjYlNjaGVtYU5hbWU7Cgljb25zdCBTUUxDSEFSICpzelNjaGVtYU5hbWU7 Cgljb25zdCBjaGFyICplcV9zdHJpbmc7CgljaGFyCSplc2NTY2hlbWFOYW1lID0gTlVMTCwgKmVz Y1RhYmxlTmFtZSA9IE5VTEw7CglzdGF0aWMgY29uc3QgY2hhciAqY2F0Y25bXVsyXSA9IHsKCQl7 IlRBQkxFX0NBVCIsICJUQUJMRV9RVUFMSUZJRVIifSwKCQl7IlRBQkxFX1NDSEVNIiwgIlRBQkxF X09XTkVSIn0sCgkJeyJUQUJMRV9OQU1FIiwgIlRBQkxFX05BTUUifSwKCQl7IkNPTFVNTl9OQU1F IiwgIkNPTFVNTl9OQU1FIn0sCgkJeyJLRVlfU0VRIiwgIktFWV9TRVEifSwKCQl7IlBLX05BTUUi LCAiUEtfTkFNRSJ9fTsKCUVudmlyb25tZW50Q2xhc3MgKmVudjsKCUJPT0wgaXNfT0RCQzI7CgoJ TVlMT0coMCwgImVudGVyaW5nLi4uc3RtdD0lcCBzY25tPSVwIGxlbj0lZFxuIiwgc3RtdCwgc3pU YWJsZU93bmVyLCBjYlRhYmxlT3duZXIpOwoKCWlmIChyZXN1bHQgPSBTQ19pbml0aWFsaXplX2Fu ZF9yZWN5Y2xlKHN0bXQpLCBTUUxfU1VDQ0VTUyAhPSByZXN1bHQpCgkJcmV0dXJuIHJlc3VsdDsK CglpZiAocmVzID0gUVJfQ29uc3RydWN0b3IoKSwgIXJlcykKCXsKCQlTQ19zZXRfZXJyb3Ioc3Rt dCwgU1RNVF9OT19NRU1PUllfRVJST1IsICJDb3VsZG4ndCBhbGxvY2F0ZSBtZW1vcnkgZm9yIFBH QVBJX1ByaW1hcnlLZXlzIHJlc3VsdC4iLCBmdW5jKTsKCQlyZXR1cm4gU1FMX0VSUk9SOwoJfQoJ U0Nfc2V0X1Jlc3VsdChzdG10LCByZXMpOwoKCS8qIHRoZSBiaW5kaW5nIHN0cnVjdHVyZSBmb3Ig YSBzdGF0ZW1lbnQgaXMgbm90IHNldCB1cCB1bnRpbAoJICoKCSAqIGEgc3RhdGVtZW50IGlzIGFj dHVhbGx5IGV4ZWN1dGVkLCBzbyB3ZSdsbCBoYXZlIHRvIGRvIHRoaXMKCSAqIG91cnNlbHZlcy4K CSAqLwoJcmVzdWx0X2NvbHMgPSBOVU1fT0ZfUEtTX0ZJRUxEUzsKCWV4dGVuZF9jb2x1bW5fYmlu ZGluZ3MoU0NfZ2V0X0FSREYoc3RtdCksIHJlc3VsdF9jb2xzKTsKCglzdG10LT5jYXRhbG9nX3Jl c3VsdCA9IFRSVUU7Cgljb25uID0gU0NfZ2V0X2Nvbm4oc3RtdCk7CgllbnYgPSBDQ19nZXRfZW52 KGNvbm4pOwoJaXNfT0RCQzIgPSBFTl9pc19vZGJjMihlbnYpOwoJLyogc2V0IHRoZSBmaWVsZCBu YW1lcyAqLwoJUVJfc2V0X251bV9maWVsZHMocmVzLCByZXN1bHRfY29scyk7CglRUl9zZXRfZmll bGRfaW5mb19FTihyZXMsIFBLU19UQUJMRV9DQVQsIFBHX1RZUEVfVkFSQ0hBUiwgTUFYX0lORk9f U1RSSU5HKTsKCVFSX3NldF9maWVsZF9pbmZvX0VOKHJlcywgUEtTX1RBQkxFX1NDSEVNLCBQR19U WVBFX1ZBUkNIQVIsIE1BWF9JTkZPX1NUUklORyk7CglRUl9zZXRfZmllbGRfaW5mb19FTihyZXMs IFBLU19UQUJMRV9OQU1FLCBQR19UWVBFX1ZBUkNIQVIsIE1BWF9JTkZPX1NUUklORyk7CglRUl9z ZXRfZmllbGRfaW5mb19FTihyZXMsIFBLU19DT0xVTU5fTkFNRSwgUEdfVFlQRV9WQVJDSEFSLCBN QVhfSU5GT19TVFJJTkcpOwoJUVJfc2V0X2ZpZWxkX2luZm9fRU4ocmVzLCBQS1NfS0VZX1NRLCBQ R19UWVBFX0lOVDIsIDIpOwoJUVJfc2V0X2ZpZWxkX2luZm9fRU4ocmVzLCBQS1NfUEtfTkFNRSwg UEdfVFlQRV9WQVJDSEFSLCBNQVhfSU5GT19TVFJJTkcpOwoKCXJlc3VsdCA9IFBHQVBJX0FsbG9j U3RtdChjb25uLCAoSFNUTVQgKikgJnRibF9zdG10LCAwKTsKCWlmICghU1FMX1NVQ0NFRURFRChy ZXN1bHQpKQoJewoJCVNDX3NldF9lcnJvcihzdG10LCBTVE1UX05PX01FTU9SWV9FUlJPUiwgIkNv dWxkbid0IGFsbG9jYXRlIHN0YXRlbWVudCBmb3IgUHJpbWFyeSBLZXkgcmVzdWx0LiIsIGZ1bmMp OwoJCWdvdG8gY2xlYW51cDsKCX0KCiNpZmRlZglVTklDT0RFX1NVUFBPUlQKCWlmIChDQ19pc19p bl91bmljb2RlX2RyaXZlcihjb25uKSkKCQlpbnRlcm5hbF9hc2lzX3R5cGUgPSBJTlRFUk5BTF9B U0lTX1RZUEU7CiNlbmRpZiAvKiBVTklDT0RFX1NVUFBPUlQgKi8KCiNkZWZpbmUJcmV0dXJuCURP TlRfQ0FMTF9SRVRVUk5fRlJPTV9IRVJFPz8/CglpZiAoMCAhPSByZWxvaWQpCgl7CgkJc3pTY2hl bWFOYW1lID0gTlVMTDsKCQljYlNjaGVtYU5hbWUgPSBTUUxfTlVMTF9EQVRBOwoJfQoJZWxzZQoJ ewoJCXBrdGFiID0gbWFrZV9zdHJpbmcoc3pUYWJsZU5hbWUsIGNiVGFibGVOYW1lLCBOVUxMLCAw KTsKCQlpZiAoIXBrdGFiIHx8IHBrdGFiWzBdID09ICdcMCcpCgkJewoJCQlTQ19zZXRfZXJyb3Io c3RtdCwgU1RNVF9JTlRFUk5BTF9FUlJPUiwgIk5vIFRhYmxlIHNwZWNpZmllZCB0byBQR0FQSV9Q cmltYXJ5S2V5cy4iLCBmdW5jKTsKCQkJZ290byBjbGVhbnVwOwoJCX0KCQlzelNjaGVtYU5hbWUg PSBzelRhYmxlT3duZXI7CgkJY2JTY2hlbWFOYW1lID0gY2JUYWJsZU93bmVyOwoJCWVzY1RhYmxl TmFtZSA9IHNpbXBsZUNhdGFsb2dFc2NhcGUoc3pUYWJsZU5hbWUsIGNiVGFibGVOYW1lLCBjb25u KTsKCX0KCWVxX3N0cmluZyA9IGdlbl9vcGVzdHIoZXFvcCwgY29ubik7CgpyZXRyeV9wdWJsaWNf c2NoZW1hOgoJcGtzY21bMF0gPSAnXDAnOwoJaWYgKDAgPT0gcmVsb2lkKQoJewoJCWlmIChlc2NT Y2hlbWFOYW1lKQoJCQlmcmVlKGVzY1NjaGVtYU5hbWUpOwoJCWVzY1NjaGVtYU5hbWUgPSBzaW1w bGVDYXRhbG9nRXNjYXBlKHN6U2NoZW1hTmFtZSwgY2JTY2hlbWFOYW1lLCBjb25uKTsKCQlzY2hl bWFfc3RyKHBrc2NtLCBzaXplb2YocGtzY20pLCAoU1FMQ0hBUiAqKSBlc2NTY2hlbWFOYW1lLCBT UUxfTlRTLCBUQUJMRV9JU19WQUxJRChzelRhYmxlTmFtZSwgY2JUYWJsZU5hbWUpLCBjb25uKTsK CX0KCglyZXN1bHQgPSBQR0FQSV9CaW5kQ29sKHRibF9zdG10LCAxLCBpbnRlcm5hbF9hc2lzX3R5 cGUsCgkJCQkJCSAgIGF0dG5hbWUsIE1BWF9JTkZPX1NUUklORywgJmF0dG5hbWVfbGVuKTsKCWlm ICghU1FMX1NVQ0NFRURFRChyZXN1bHQpKQoJewoJCWdvdG8gY2xlYW51cDsKCX0KCXJlc3VsdCA9 IFBHQVBJX0JpbmRDb2wodGJsX3N0bXQsIDMsIGludGVybmFsX2FzaXNfdHlwZSwKCQkJcGtuYW1l LCBUQUJMRV9OQU1FX1NUT1JBR0VfTEVOLCBOVUxMKTsKCWlmICghU1FMX1NVQ0NFRURFRChyZXN1 bHQpKQoJewoJCWdvdG8gY2xlYW51cDsKCX0KCXJlc3VsdCA9IFBHQVBJX0JpbmRDb2wodGJsX3N0 bXQsIDQsIGludGVybmFsX2FzaXNfdHlwZSwKCQkJcGtzY20sIFNDSEVNQV9OQU1FX1NUT1JBR0Vf TEVOLCAmcGtzY21fbGVuKTsKCWlmICghU1FMX1NVQ0NFRURFRChyZXN1bHQpKQoJewoJCWdvdG8g Y2xlYW51cDsKCX0KCXJlc3VsdCA9IFBHQVBJX0JpbmRDb2wodGJsX3N0bXQsIDUsIGludGVybmFs X2FzaXNfdHlwZSwKCQkJdGFibmFtZSwgVEFCTEVfTkFNRV9TVE9SQUdFX0xFTiwgJnRhYm5hbWVf bGVuKTsKCWlmICghU1FMX1NVQ0NFRURFRChyZXN1bHQpKQoJewoJCWdvdG8gY2xlYW51cDsKCX0K Cglpbml0UFFFeHBCdWZmZXIoJnRhYmxlc19xdWVyeSk7Cglxc3RhcnQgPSAxOwoJaWYgKDAgPT0g cmVsb2lkKQoJCXFlbmQgPSAyOwoJZWxzZQoJCXFlbmQgPSAxOwoJZm9yIChxbm8gPSBxc3RhcnQ7 IHFubyA8PSBxZW5kOyBxbm8rKykKCXsKCQlyZXNldFBRRXhwQnVmZmVyKCZ0YWJsZXNfcXVlcnkp OwoJCXN3aXRjaCAocW5vKQoJCXsKCQkJY2FzZSAxOgoKCQkJCS8qCgkJCQkgKiBTaW1wbGlmaWVk IHF1ZXJ5IHRvIHJlbW92ZSBhc3N1bXB0aW9ucyBhYm91dCBudW1iZXIgb2YKCQkJCSAqIHBvc3Np YmxlIGluZGV4IGNvbHVtbnMuIENvdXJ0ZXN5IG9mIFRvbSBMYW5lIC0gdGhvbWFzCgkJCQkgKiAy MDAwLTAzLTIxCgkJCQkgKi8KCQkJCWFwcGVuZFBRRXhwQnVmZmVyU3RyKCZ0YWJsZXNfcXVlcnks CgkJCQkJInNlbGVjdCB0YS5hdHRuYW1lLCBpYS5hdHRudW0sIGljLnJlbG5hbWUsIG4ubnNwbmFt ZSwgdGMucmVsbmFtZSIKCQkJCQkiIGZyb20gcGdfY2F0YWxvZy5wZ19hdHRyaWJ1dGUgdGEsIgoJ CQkJCSIgcGdfY2F0YWxvZy5wZ19hdHRyaWJ1dGUgaWEsIHBnX2NhdGFsb2cucGdfY2xhc3MgdGMs IgoJCQkJCSIgcGdfY2F0YWxvZy5wZ19pbmRleCBpLCBwZ19jYXRhbG9nLnBnX25hbWVzcGFjZSBu IgoJCQkJCSIsIHBnX2NhdGFsb2cucGdfY2xhc3MgaWMiKTsKCQkJCWlmICgwID09IHJlbG9pZCkK CQkJCQlhcHBlbmRQUUV4cEJ1ZmZlcigmdGFibGVzX3F1ZXJ5LAoJCQkJCSIgd2hlcmUgdGMucmVs bmFtZSAlcyclcyciCgkJCQkJIiBBTkQgbi5uc3BuYW1lICVzJyVzJyIKCQkJCQksIGVxX3N0cmlu ZywgZXNjVGFibGVOYW1lLCBlcV9zdHJpbmcsIHBrc2NtKTsKCQkJCWVsc2UKCQkJCQlhcHBlbmRQ UUV4cEJ1ZmZlcigmdGFibGVzX3F1ZXJ5LCAiIHdoZXJlIHRjLm9pZCA9ICV1IiwgcmVsb2lkKTsK CgkJCQlhcHBlbmRQUUV4cEJ1ZmZlclN0cigmdGFibGVzX3F1ZXJ5LAoJCQkJCSIgQU5EIHRjLm9p ZCA9IGkuaW5kcmVsaWQiCgkJCQkJIiBBTkQgbi5vaWQgPSB0Yy5yZWxuYW1lc3BhY2UiCgkJCQkJ IiBBTkQgaS5pbmRpc3ByaW1hcnkgPSAndCciCgkJCQkJIiBBTkQgaWEuYXR0cmVsaWQgPSBpLmlu ZGV4cmVsaWQiCgkJCQkJIiBBTkQgdGEuYXR0cmVsaWQgPSBpLmluZHJlbGlkIgoJCQkJCSIgQU5E IHRhLmF0dG51bSA9IGkuaW5ka2V5W2lhLmF0dG51bS0xXSIKCQkJCQkiIEFORCAoTk9UIHRhLmF0 dGlzZHJvcHBlZCkiCgkJCQkJIiBBTkQgKE5PVCBpYS5hdHRpc2Ryb3BwZWQpIgoJCQkJCSIgQU5E IGljLm9pZCA9IGkuaW5kZXhyZWxpZCIKCQkJCQkiIG9yZGVyIGJ5IGlhLmF0dG51bSIpOwoJCQkJ YnJlYWs7CgkJCWNhc2UgMjoKCgkJCQkvKgoJCQkJICogU2ltcGxpZmllZCBxdWVyeSB0byBzZWFy Y2ggb2xkIGZhc2hvbmVkIHByaW1hcnkga2V5CgkJCQkgKi8KCQkJCWFwcGVuZFBRRXhwQnVmZmVy KCZ0YWJsZXNfcXVlcnksICJzZWxlY3QgdGEuYXR0bmFtZSwgaWEuYXR0bnVtLCBpYy5yZWxuYW1l LCBuLm5zcG5hbWUsIE5VTEwiCgkJCQkJIiBmcm9tIHBnX2NhdGFsb2cucGdfYXR0cmlidXRlIHRh LCIKCQkJCQkiIHBnX2NhdGFsb2cucGdfYXR0cmlidXRlIGlhLCBwZ19jYXRhbG9nLnBnX2NsYXNz IGljLCIKCQkJCQkiIHBnX2NhdGFsb2cucGdfaW5kZXggaSwgcGdfY2F0YWxvZy5wZ19uYW1lc3Bh Y2UgbiIKCQkJCQkiIHdoZXJlIGljLnJlbG5hbWUgJXMnJXNfcGtleSciCgkJCQkJIiBBTkQgbi5u c3BuYW1lICVzJyVzJyIKCQkJCQkiIEFORCBpYy5vaWQgPSBpLmluZGV4cmVsaWQiCgkJCQkJIiBB TkQgbi5vaWQgPSBpYy5yZWxuYW1lc3BhY2UiCgkJCQkJIiBBTkQgaWEuYXR0cmVsaWQgPSBpLmlu ZGV4cmVsaWQiCgkJCQkJIiBBTkQgdGEuYXR0cmVsaWQgPSBpLmluZHJlbGlkIgoJCQkJCSIgQU5E IHRhLmF0dG51bSA9IGkuaW5ka2V5W2lhLmF0dG51bS0xXSIKCQkJCQkiIEFORCAoTk9UIHRhLmF0 dGlzZHJvcHBlZCkiCgkJCQkJIiBBTkQgKE5PVCBpYS5hdHRpc2Ryb3BwZWQpIgoJCQkJCSIgb3Jk ZXIgYnkgaWEuYXR0bnVtIiwgZXFfc3RyaW5nLCBlc2NUYWJsZU5hbWUsIGVxX3N0cmluZywgcGtz Y20pOwoJCQkJYnJlYWs7CgkJfQoJCWlmIChQUUV4cEJ1ZmZlckRhdGFCcm9rZW4odGFibGVzX3F1 ZXJ5KSkKCQl7CgkJCVNDX3NldF9lcnJvcihzdG10LCBTVE1UX05PX01FTU9SWV9FUlJPUiwgIk91 dCBvZiBtZW1vcnkgaW4gUEdBUElfUHJpbWFyeUtleXMoKSIsIGZ1bmMpOwoJCQlnb3RvIGNsZWFu dXA7CgkJfQoJCU1ZTE9HKDAsICJ0YWJsZXNfcXVlcnk9JyVzJ1xuIiwgdGFibGVzX3F1ZXJ5LmRh dGEpOwoKCQlyZXN1bHQgPSBQR0FQSV9FeGVjRGlyZWN0KHRibF9zdG10LCAoU1FMQ0hBUiAqKSB0 YWJsZXNfcXVlcnkuZGF0YSwgU1FMX05UUywgUE9EQkNfUkRPTkxZKTsKCQlpZiAoIVNRTF9TVUND RUVERUQocmVzdWx0KSkKCQl7CgkJCVNDX2Z1bGxfZXJyb3JfY29weShzdG10LCB0Ymxfc3RtdCwg RkFMU0UpOwoJCQlnb3RvIGNsZWFudXA7CgkJfQoKCQlyZXN1bHQgPSBQR0FQSV9GZXRjaCh0Ymxf c3RtdCk7CgkJaWYgKHJlc3VsdCAhPSBTUUxfTk9fREFUQV9GT1VORCkKCQkJYnJlYWs7Cgl9CgoJ LyogSWYgbm90IGZvdW5kICovCglpZiAoU1FMX05PX0RBVEFfRk9VTkQgPT0gcmVzdWx0KQoJewoJ CWlmICgwID09IHJlbG9pZCAmJgoJCSAgICBhbGxvd19wdWJsaWNfc2NoZW1hKGNvbm4sIHN6U2No ZW1hTmFtZSwgY2JTY2hlbWFOYW1lKSkKCQl7CgkJCXN6U2NoZW1hTmFtZSA9IHB1YnN0cjsKCQkJ Y2JTY2hlbWFOYW1lID0gU1FMX05UUzsKCQkJZ290byByZXRyeV9wdWJsaWNfc2NoZW1hOwoJCX0K CX0KCgl3aGlsZSAoU1FMX1NVQ0NFRURFRChyZXN1bHQpKQoJewoJCXR1cGxlID0gUVJfQWRkTmV3 KHJlcyk7CgoJCXNldF90dXBsZWZpZWxkX3N0cmluZygmdHVwbGVbUEtTX1RBQkxFX0NBVF0sIEN1 cnJDYXQoY29ubikpOwoKCQkvKgoJCSAqIEkgaGF2ZSB0byBoaWRlIHRoZSB0YWJsZSBvd25lciBm cm9tIEFjY2Vzcywgb3RoZXJ3aXNlIGl0CgkJICogaW5zaXN0cyBvbiByZWZlcnJpbmcgdG8gdGhl IHRhYmxlIGFzICdvd25lci50YWJsZScuICh0aGlzIGlzCgkJICogdmFsaWQgYWNjb3JkaW5nIHRv IHRoZSBPREJDIFNRTCBncmFtbWFyLCBidXQgUG9zdGdyZXMgd29uJ3QKCQkgKiBzdXBwb3J0IGl0 LikKCQkgKi8KCQlpZiAoU1FMX05VTExfREFUQSA9PSBwa3NjbV9sZW4pCgkJCXBrc2NtWzBdID0g J1wwJzsKCQlzZXRfdHVwbGVmaWVsZF9zdHJpbmcoJnR1cGxlW1BLU19UQUJMRV9TQ0hFTV0sIEdF VF9TQ0hFTUFfTkFNRShwa3NjbSkpOwoJCWlmIChTUUxfTlVMTF9EQVRBID09IHRhYm5hbWVfbGVu KQoJCQl0YWJuYW1lWzBdID0gJ1wwJzsKCQlwa3RibmFtZSA9IHBrdGFiID8gcGt0YWIgOiB0YWJu YW1lOwoJCXNldF90dXBsZWZpZWxkX3N0cmluZygmdHVwbGVbUEtTX1RBQkxFX05BTUVdLCBwa3Ri bmFtZSk7CgkJc2V0X3R1cGxlZmllbGRfc3RyaW5nKCZ0dXBsZVtQS1NfQ09MVU1OX05BTUVdLCBh dHRuYW1lKTsKCQlzZXRfdHVwbGVmaWVsZF9pbnQyKCZ0dXBsZVtQS1NfS0VZX1NRXSwgKEludDIp ICgrK3NlcSkpOwoJCXNldF90dXBsZWZpZWxkX3N0cmluZygmdHVwbGVbUEtTX1BLX05BTUVdLCBw a25hbWUpOwoKCQlNWUxPRygwLCAiPj4gcHJpbWFyeUtleXM6IHNjaGVtYSA9JyVzJywgcGt0YWIg PSAnJXMnLCBhdHRuYW1lID0gJyVzJywgc2VxID0gJWRcbiIsIHBrc2NtLCBwa3RibmFtZSwgYXR0 bmFtZSwgc2VxKTsKCgkJcmVzdWx0ID0gUEdBUElfRmV0Y2godGJsX3N0bXQpOwoJfQoKCWlmIChy ZXN1bHQgIT0gU1FMX05PX0RBVEFfRk9VTkQpCgl7CgkJU0NfZnVsbF9lcnJvcl9jb3B5KHN0bXQs IHRibF9zdG10LCBGQUxTRSk7CgkJZ290byBjbGVhbnVwOwoJfQoJcmV0ID0gU1FMX1NVQ0NFU1M7 CgpjbGVhbnVwOgojdW5kZWYJcmV0dXJuCgkvKgoJICogYWxzbywgdGhpbmdzIG5lZWQgdG8gdGhp bmsgdGhhdCB0aGlzIHN0YXRlbWVudCBpcyBmaW5pc2hlZCBzbyB0aGUKCSAqIHJlc3VsdHMgY2Fu IGJlIHJldHJpZXZlZC4KCSAqLwoJc3RtdC0+c3RhdHVzID0gU1RNVF9GSU5JU0hFRDsKCglpZiAo IVNRTF9TVUNDRUVERUQocmV0KSAmJiAwID49IFNDX2dldF9lcnJvcm51bWJlcihzdG10KSkKCQlT Q19lcnJvcl9jb3B5KHN0bXQsIHRibF9zdG10LCBUUlVFKTsKCglpZiAodGJsX3N0bXQpCgkJUEdB UElfRnJlZVN0bXQodGJsX3N0bXQsIFNRTF9EUk9QKTsKCglpZiAoIVBRRXhwQnVmZmVyRGF0YUJy b2tlbih0YWJsZXNfcXVlcnkpKQoJCXRlcm1QUUV4cEJ1ZmZlcigmdGFibGVzX3F1ZXJ5KTsKCWlm IChwa3RhYikKCQlmcmVlKHBrdGFiKTsKCWlmIChlc2NTY2hlbWFOYW1lKQoJCWZyZWUoZXNjU2No ZW1hTmFtZSk7CglpZiAoZXNjVGFibGVOYW1lKQoJCWZyZWUoZXNjVGFibGVOYW1lKTsKCS8qIHNl dCB1cCB0aGUgY3VycmVudCB0dXBsZSBwb2ludGVyIGZvciBTUUxGZXRjaCAqLwoJc3RtdC0+Y3Vy clR1cGxlID0gLTE7CglTQ19zZXRfcm93c2V0X3N0YXJ0KHN0bXQsIC0xLCBGQUxTRSk7CglTQ19z ZXRfY3VycmVudF9jb2woc3RtdCwgLTEpOwoKCU1ZTE9HKDAsICJsZWF2aW5nIHN0bXQ9JXAsIHJl dD0lZFxuIiwgc3RtdCwgcmV0KTsKCXJldHVybiByZXQ7Cn0KCgovKgogKglNdWx0aWJ5dGUgc3Vw cG9ydCBzdHVmZiBmb3IgU1FMRm9yZWlnbktleXMoKS4KICoJVGhlcmUgbWF5IGJlIG11Y2ggbW9y ZSBlZmZlY3RpdmUgd2F5IGluIHRoZQogKglmdXR1cmUgdmVyc2lvbi4gVGhlIHdheSBpcyB2ZXJ5 IGZvcmNpYmxlIGN1cnJlbnRseS4KICovCnN0YXRpYyBCT09MCmlzTXVsdGlieXRlKGNvbnN0IGNo YXIgKnN0cikKewoJZm9yICg7ICpzdHI7IHN0cisrKQoJewoJCWlmICgodW5zaWduZWQgY2hhcikg KnN0ciA+PSAweDgwKQoJCQlyZXR1cm4gVFJVRTsKCX0KCXJldHVybiBGQUxTRTsKfQpzdGF0aWMg Y2hhciAqCmdldENsaWVudENvbHVtbk5hbWUoQ29ubmVjdGlvbkNsYXNzICpjb25uLCBVSW50NCBy ZWxpZCwgY2hhciAqc2VydmVyQ29sdW1uTmFtZSwgQk9PTCAqbmFtZUFsbG9jZWQpCnsKCWNoYXIJ CXF1ZXJ5WzEwMjRdLCBzYXZlYXR0bnVtWzE2XSwKCQkJICAgKnJldCA9IHNlcnZlckNvbHVtbk5h bWU7Cgljb25zdCBjaGFyICplcV9zdHJpbmc7CglCT09MCQljb250aW51ZUV4ZWMgPSBUUlVFLAoJ CQkJYkVycm9yID0gRkFMU0U7CglRUmVzdWx0Q2xhc3MgKnJlcyA9IE5VTEw7CglVV09SRAlmbGFn ID0gUkVBRF9PTkxZX1FVRVJZOwoKCSpuYW1lQWxsb2NlZCA9IEZBTFNFOwoJaWYgKCFjb25uLT5v cmlnaW5hbF9jbGllbnRfZW5jb2RpbmcgfHwgIWlzTXVsdGlieXRlKHNlcnZlckNvbHVtbk5hbWUp KQoJCXJldHVybiByZXQ7CglpZiAoIWNvbm4tPnNlcnZlcl9lbmNvZGluZykKCXsKCQlpZiAocmVz ID0gQ0Nfc2VuZF9xdWVyeShjb25uLCAic2VsZWN0IGdldGRhdGFiYXNlZW5jb2RpbmcoKSIsIE5V TEwsIGZsYWcsIE5VTEwpLCBRUl9jb21tYW5kX21heWJlX3N1Y2Nlc3NmdWwocmVzKSkKCQl7CgkJ CWlmIChRUl9nZXRfbnVtX2NhY2hlZF90dXBsZXMocmVzKSA+IDApCgkJCQljb25uLT5zZXJ2ZXJf ZW5jb2RpbmcgPSBzdHJkdXAoUVJfZ2V0X3ZhbHVlX2JhY2tlbmRfdGV4dChyZXMsIDAsIDApKTsK CQl9CgkJUVJfRGVzdHJ1Y3RvcihyZXMpOwoJCXJlcyA9IE5VTEw7Cgl9CglpZiAoIWNvbm4tPnNl cnZlcl9lbmNvZGluZykKCQlyZXR1cm4gcmV0OwoJU1BSSU5URl9GSVhFRChxdWVyeSwgIlNFVCBD TElFTlRfRU5DT0RJTkcgVE8gJyVzJyIsIGNvbm4tPnNlcnZlcl9lbmNvZGluZyk7CgliRXJyb3Ig PSAoIVFSX2NvbW1hbmRfbWF5YmVfc3VjY2Vzc2Z1bCgocmVzID0gQ0Nfc2VuZF9xdWVyeShjb25u LCBxdWVyeSwgTlVMTCwgZmxhZywgTlVMTCkpKSk7CglRUl9EZXN0cnVjdG9yKHJlcyk7CgllcV9z dHJpbmcgPSBnZW5fb3Blc3RyKGVxb3AsIGNvbm4pOwoJaWYgKCFiRXJyb3IgJiYgY29udGludWVF eGVjKQoJewoJCVNQUklOVEZfRklYRUQocXVlcnksICJzZWxlY3QgYXR0bnVtIGZyb20gcGdfYXR0 cmlidXRlICIKCQkJIndoZXJlIGF0dHJlbGlkID0gJXUgYW5kIGF0dG5hbWUgJXMnJXMnIiwKCQkJ cmVsaWQsIGVxX3N0cmluZywgc2VydmVyQ29sdW1uTmFtZSk7CgkJaWYgKHJlcyA9IENDX3NlbmRf cXVlcnkoY29ubiwgcXVlcnksIE5VTEwsIGZsYWcsIE5VTEwpLCBRUl9jb21tYW5kX21heWJlX3N1 Y2Nlc3NmdWwocmVzKSkKCQl7CgkJCWlmIChRUl9nZXRfbnVtX2NhY2hlZF90dXBsZXMocmVzKSA+ IDApCgkJCXsKCQkJCVNUUkNQWV9GSVhFRChzYXZlYXR0bnVtLCBRUl9nZXRfdmFsdWVfYmFja2Vu ZF90ZXh0KHJlcywgMCwgMCkpOwoJCQl9CgkJCWVsc2UKCQkJCWNvbnRpbnVlRXhlYyA9IEZBTFNF OwoJCX0KCQllbHNlCgkJCWJFcnJvciA9IFRSVUU7CgkJUVJfRGVzdHJ1Y3RvcihyZXMpOwoJfQoJ Y29udGludWVFeGVjID0gKGNvbnRpbnVlRXhlYyAmJiAhYkVycm9yKTsKCS8qIHJlc3RvcmUgdGhl IGNsZWludCBlbmNvZGluZyAqLwoJU1BSSU5URl9GSVhFRChxdWVyeSwgIlNFVCBDTElFTlRfRU5D T0RJTkcgVE8gJyVzJyIsIGNvbm4tPm9yaWdpbmFsX2NsaWVudF9lbmNvZGluZyk7CgliRXJyb3Ig PSAoIVFSX2NvbW1hbmRfbWF5YmVfc3VjY2Vzc2Z1bCgocmVzID0gQ0Nfc2VuZF9xdWVyeShjb25u LCBxdWVyeSwgTlVMTCwgZmxhZywgTlVMTCkpKSk7CglRUl9EZXN0cnVjdG9yKHJlcyk7CglpZiAo YkVycm9yIHx8ICFjb250aW51ZUV4ZWMpCgkJcmV0dXJuIHJldDsKCVNQUklOVEZfRklYRUQocXVl cnksICJzZWxlY3QgYXR0bmFtZSBmcm9tIHBnX2F0dHJpYnV0ZSB3aGVyZSBhdHRyZWxpZCA9ICV1 IGFuZCBhdHRudW0gPSAlcyIsIHJlbGlkLCBzYXZlYXR0bnVtKTsKCWlmIChyZXMgPSBDQ19zZW5k X3F1ZXJ5KGNvbm4sIHF1ZXJ5LCBOVUxMLCBmbGFnLCBOVUxMKSwgUVJfY29tbWFuZF9tYXliZV9z dWNjZXNzZnVsKHJlcykpCgl7CgkJaWYgKFFSX2dldF9udW1fY2FjaGVkX3R1cGxlcyhyZXMpID4g MCkKCQl7CgkJCWNoYXIgKnRtcDsKCgkJCXRtcCA9IHN0cmR1cChRUl9nZXRfdmFsdWVfYmFja2Vu ZF90ZXh0KHJlcywgMCwgMCkpOwoJCQlpZiAodG1wKQoJCQl7CgkJCQlyZXQgPSB0bXA7CgkJCQkq bmFtZUFsbG9jZWQgPSBUUlVFOwoJCQl9CgkJfQoJfQoJUVJfRGVzdHJ1Y3RvcihyZXMpOwoJcmV0 dXJuIHJldDsKfQoKc3RhdGljIFJFVENPREUgICAgICAgICAgU1FMX0FQSQpQR0FQSV9Gb3JlaWdu S2V5c19uZXcoSFNUTVQgaHN0bXQsCgkJCQkJICBjb25zdCBTUUxDSEFSICogc3pQa1RhYmxlUXVh bGlmaWVyLCAvKiBPQSBYKi8KCQkJCQkgIFNRTFNNQUxMSU5UIGNiUGtUYWJsZVF1YWxpZmllciwK CQkJCQkgIGNvbnN0IFNRTENIQVIgKiBzelBrVGFibGVPd25lciwgLyogT0EgRSovCgkJCQkJICBT UUxTTUFMTElOVCBjYlBrVGFibGVPd25lciwKCQkJCQkgIGNvbnN0IFNRTENIQVIgKiBzelBrVGFi bGVOYW1lLCAvKiBPQShSKSBFKi8KCQkJCQkgIFNRTFNNQUxMSU5UIGNiUGtUYWJsZU5hbWUsCgkJ CQkJICBjb25zdCBTUUxDSEFSICogc3pGa1RhYmxlUXVhbGlmaWVyLCAvKiBPQSBYKi8KCQkJCQkg IFNRTFNNQUxMSU5UIGNiRmtUYWJsZVF1YWxpZmllciwKCQkJCQkgIGNvbnN0IFNRTENIQVIgKiBz ekZrVGFibGVPd25lciwgLyogT0EgRSovCgkJCQkJICBTUUxTTUFMTElOVCBjYkZrVGFibGVPd25l ciwKCQkJCQkgIGNvbnN0IFNRTENIQVIgKiBzekZrVGFibGVOYW1lLCAvKiBPQShSKSBFKi8KCQkJ CQkgIFNRTFNNQUxMSU5UIGNiRmtUYWJsZU5hbWUpOwoKc3RhdGljIFJFVENPREUJCVNRTF9BUEkK UEdBUElfRm9yZWlnbktleXNfb2xkKEhTVE1UIGhzdG10LAoJCQkJCSAgY29uc3QgU1FMQ0hBUiAq IHN6UGtUYWJsZVF1YWxpZmllciwgLyogT0EgWCovCgkJCQkJICBTUUxTTUFMTElOVCBjYlBrVGFi bGVRdWFsaWZpZXIsCgkJCQkJICBjb25zdCBTUUxDSEFSICogc3pQa1RhYmxlT3duZXIsIC8qIE9B IEUqLwoJCQkJCSAgU1FMU01BTExJTlQgY2JQa1RhYmxlT3duZXIsCgkJCQkJICBjb25zdCBTUUxD SEFSICogc3pQa1RhYmxlTmFtZSwgLyogT0EoUikgRSovCgkJCQkJICBTUUxTTUFMTElOVCBjYlBr VGFibGVOYW1lLAoJCQkJCSAgY29uc3QgU1FMQ0hBUiAqIHN6RmtUYWJsZVF1YWxpZmllciwgLyog T0EgWCovCgkJCQkJICBTUUxTTUFMTElOVCBjYkZrVGFibGVRdWFsaWZpZXIsCgkJCQkJICBjb25z dCBTUUxDSEFSICogc3pGa1RhYmxlT3duZXIsIC8qIE9BIEUqLwoJCQkJCSAgU1FMU01BTExJTlQg Y2JGa1RhYmxlT3duZXIsCgkJCQkJICBjb25zdCBTUUxDSEFSICogc3pGa1RhYmxlTmFtZSwgLyog T0EoUikgRSovCgkJCQkJICBTUUxTTUFMTElOVCBjYkZrVGFibGVOYW1lKQp7CglDU1RSIGZ1bmMg PSAiUEdBUElfRm9yZWlnbktleXMiOwoJU3RhdGVtZW50Q2xhc3MgKnN0bXQgPSAoU3RhdGVtZW50 Q2xhc3MgKikgaHN0bXQ7CglRUmVzdWx0Q2xhc3MJKnJlczsKCVR1cGxlRmllbGQJKnR1cGxlOwoJ SFNUTVQJCWhwa2V5X3N0bXQgPSBOVUxMOwoJU3RhdGVtZW50Q2xhc3MgKnRibF9zdG10ID0gTlVM TDsKCVJFVENPREUJCXJldCA9IFNRTF9FUlJPUiwgcmVzdWx0LCBrZXlyZXN1bHQ7CglQUUV4cEJ1 ZmZlckRhdGEJCXRhYmxlc19xdWVyeSA9IHswfTsKCWNoYXIJCXRyaWdfZGVmZXJyYWJsZVsyXTsK CWNoYXIJCXRyaWdfaW5pdGRlZmVycmVkWzJdOwoJY2hhcgkJdHJpZ19hcmdzWzEwMjRdOwoJY2hh cgkJdXBkX3J1bGVbVEFCTEVfTkFNRV9TVE9SQUdFX0xFTl0sCgkJCQlkZWxfcnVsZVtUQUJMRV9O QU1FX1NUT1JBR0VfTEVOXTsKCWNoYXIJCSpwa190YWJsZV9uZWVkZWQgPSBOVUxMLCAqZXNjUGtU YWJsZU5hbWUgPSBOVUxMOwoJY2hhcgkJZmtfdGFibGVfZmV0Y2hlZFtUQUJMRV9OQU1FX1NUT1JB R0VfTEVOICsgMV07CgljaGFyCQkqZmtfdGFibGVfbmVlZGVkID0gTlVMTCwgKmVzY0ZrVGFibGVO YW1lID0gTlVMTDsKCWNoYXIJCXBrX3RhYmxlX2ZldGNoZWRbVEFCTEVfTkFNRV9TVE9SQUdFX0xF TiArIDFdOwoJY2hhcgkJc2NoZW1hX25lZWRlZFtTQ0hFTUFfTkFNRV9TVE9SQUdFX0xFTiArIDFd OwoJY2hhcgkJc2NoZW1hX2ZldGNoZWRbU0NIRU1BX05BTUVfU1RPUkFHRV9MRU4gKyAxXTsKCWNo YXIJCWNvbnN0cm5hbWVbTkFNRVNUT1JBR0VMRU4gKyAxXSwgcGtuYW1lW1RBQkxFX05BTUVfU1RP UkFHRV9MRU4gKyAxXTsKCWNoYXIJICAgKnBrZXlfcHRyLAoJCQkgICAqcGtleV90ZXh0ID0gTlVM TCwKCQkJICAgKmZrZXlfcHRyLAoJCQkgICAqZmtleV90ZXh0ID0gTlVMTDsKCglDb25uZWN0aW9u Q2xhc3MgKmNvbm47CglCT09MCQlwa2V5X2FsbG9jZWQsCgkJCWZrZXlfYWxsb2NlZCwgZ290X3Br bmFtZTsKCWludAkJCWksCgkJCQlqLAoJCQkJaywKCQkJCW51bV9rZXlzOwoJU1FMU01BTExJTlQJ CXRyaWdfbmFyZ3MsCgkJCQl1cGRfcnVsZV90eXBlID0gMCwKCQkJCWRlbF9ydWxlX3R5cGUgPSAw OwoJU1FMU01BTExJTlQJaW50ZXJuYWxfYXNpc190eXBlID0gU1FMX0NfQ0hBUjsKCVNRTFNNQUxM SU5UCWRlZmVyX3R5cGU7CgljaGFyCQlwa2V5W01BWF9JTkZPX1NUUklOR107CglJbnQyCQlyZXN1 bHRfY29sczsKCVVJbnQ0CQlyZWxpZDEsIHJlbGlkMjsKCWNvbnN0IGNoYXIgKmVxX3N0cmluZzsK CglNWUxPRygwLCAiZW50ZXJpbmcuLi5zdG10PSVwXG4iLCBzdG10KTsKCglpZiAocmVzdWx0ID0g U0NfaW5pdGlhbGl6ZV9hbmRfcmVjeWNsZShzdG10KSwgU1FMX1NVQ0NFU1MgIT0gcmVzdWx0KQoJ CXJldHVybiByZXN1bHQ7CgoJaWYgKHJlcyA9IFFSX0NvbnN0cnVjdG9yKCksICFyZXMpCgl7CgkJ U0Nfc2V0X2Vycm9yKHN0bXQsIFNUTVRfTk9fTUVNT1JZX0VSUk9SLCAiQ291bGRuJ3QgYWxsb2Nh dGUgbWVtb3J5IGZvciBQR0FQSV9Gb3JlaWduS2V5cyByZXN1bHQuIiwgZnVuYyk7CgkJcmV0dXJu IFNRTF9FUlJPUjsKCX0KCVNDX3NldF9SZXN1bHQoc3RtdCwgcmVzKTsKCgkvKiB0aGUgYmluZGlu ZyBzdHJ1Y3R1cmUgZm9yIGEgc3RhdGVtZW50IGlzIG5vdCBzZXQgdXAgdW50aWwgKi8KCgkvKgoJ ICogYSBzdGF0ZW1lbnQgaXMgYWN0dWFsbHkgZXhlY3V0ZWQsIHNvIHdlJ2xsIGhhdmUgdG8gZG8g dGhpcwoJICogb3Vyc2VsdmVzLgoJICovCglyZXN1bHRfY29scyA9IE5VTV9PRl9GS1NfRklFTERT OwoJZXh0ZW5kX2NvbHVtbl9iaW5kaW5ncyhTQ19nZXRfQVJERihzdG10KSwgcmVzdWx0X2NvbHMp OwoKCXN0bXQtPmNhdGFsb2dfcmVzdWx0ID0gVFJVRTsKCS8qIHNldCB0aGUgZmllbGQgbmFtZXMg Ki8KCVFSX3NldF9udW1fZmllbGRzKHJlcywgcmVzdWx0X2NvbHMpOwoJUVJfc2V0X2ZpZWxkX2lu Zm9fdihyZXMsIEZLU19QS1RBQkxFX0NBVCwgIlBLVEFCTEVfUVVBTElGSUVSIiwgUEdfVFlQRV9W QVJDSEFSLCBNQVhfSU5GT19TVFJJTkcpOwoJUVJfc2V0X2ZpZWxkX2luZm9fdihyZXMsIEZLU19Q S1RBQkxFX1NDSEVNLCAiUEtUQUJMRV9PV05FUiIsIFBHX1RZUEVfVkFSQ0hBUiwgTUFYX0lORk9f U1RSSU5HKTsKCVFSX3NldF9maWVsZF9pbmZvX3YocmVzLCBGS1NfUEtUQUJMRV9OQU1FLCAiUEtU QUJMRV9OQU1FIiwgUEdfVFlQRV9WQVJDSEFSLCBNQVhfSU5GT19TVFJJTkcpOwoJUVJfc2V0X2Zp ZWxkX2luZm9fdihyZXMsIEZLU19QS0NPTFVNTl9OQU1FLCAiUEtDT0xVTU5fTkFNRSIsIFBHX1RZ UEVfVkFSQ0hBUiwgTUFYX0lORk9fU1RSSU5HKTsKCVFSX3NldF9maWVsZF9pbmZvX3YocmVzLCBG S1NfRktUQUJMRV9DQVQsICJGS1RBQkxFX1FVQUxJRklFUiIsIFBHX1RZUEVfVkFSQ0hBUiwgTUFY X0lORk9fU1RSSU5HKTsKCVFSX3NldF9maWVsZF9pbmZvX3YocmVzLCBGS1NfRktUQUJMRV9TQ0hF TSwgIkZLVEFCTEVfT1dORVIiLCBQR19UWVBFX1ZBUkNIQVIsIE1BWF9JTkZPX1NUUklORyk7CglR Ul9zZXRfZmllbGRfaW5mb192KHJlcywgRktTX0ZLVEFCTEVfTkFNRSwgIkZLVEFCTEVfTkFNRSIs IFBHX1RZUEVfVkFSQ0hBUiwgTUFYX0lORk9fU1RSSU5HKTsKCVFSX3NldF9maWVsZF9pbmZvX3Yo cmVzLCBGS1NfRktDT0xVTU5fTkFNRSwgIkZLQ09MVU1OX05BTUUiLCBQR19UWVBFX1ZBUkNIQVIs IE1BWF9JTkZPX1NUUklORyk7CglRUl9zZXRfZmllbGRfaW5mb192KHJlcywgRktTX0tFWV9TRVEs ICJLRVlfU0VRIiwgUEdfVFlQRV9JTlQyLCAyKTsKCVFSX3NldF9maWVsZF9pbmZvX3YocmVzLCBG S1NfVVBEQVRFX1JVTEUsICJVUERBVEVfUlVMRSIsIFBHX1RZUEVfSU5UMiwgMik7CglRUl9zZXRf ZmllbGRfaW5mb192KHJlcywgRktTX0RFTEVURV9SVUxFLCAiREVMRVRFX1JVTEUiLCBQR19UWVBF X0lOVDIsIDIpOwoJUVJfc2V0X2ZpZWxkX2luZm9fdihyZXMsIEZLU19GS19OQU1FLCAiRktfTkFN RSIsIFBHX1RZUEVfVkFSQ0hBUiwgTUFYX0lORk9fU1RSSU5HKTsKCVFSX3NldF9maWVsZF9pbmZv X3YocmVzLCBGS1NfUEtfTkFNRSwgIlBLX05BTUUiLCBQR19UWVBFX1ZBUkNIQVIsIE1BWF9JTkZP X1NUUklORyk7CglRUl9zZXRfZmllbGRfaW5mb192KHJlcywgRktTX0RFRkVSUkFCSUxJVFksICJE RUZFUlJBQklMSVRZIiwgUEdfVFlQRV9JTlQyLCAyKTsKCVFSX3NldF9maWVsZF9pbmZvX3YocmVz LCBGS1NfVFJJR0dFUl9OQU1FLCAiVFJJR0dFUl9OQU1FIiwgUEdfVFlQRV9WQVJDSEFSLCBNQVhf SU5GT19TVFJJTkcpOwoKCS8qCgkgKiBhbHNvLCB0aGluZ3MgbmVlZCB0byB0aGluayB0aGF0IHRo aXMgc3RhdGVtZW50IGlzIGZpbmlzaGVkIHNvIHRoZQoJICogcmVzdWx0cyBjYW4gYmUgcmV0cmll dmVkLgoJICovCglzdG10LT5zdGF0dXMgPSBTVE1UX0ZJTklTSEVEOwoKCS8qIHNldCB1cCB0aGUg Y3VycmVudCB0dXBsZSBwb2ludGVyIGZvciBTUUxGZXRjaCAqLwoJc3RtdC0+Y3VyclR1cGxlID0g LTE7CglTQ19zZXRfcm93c2V0X3N0YXJ0KHN0bXQsIC0xLCBGQUxTRSk7CglTQ19zZXRfY3VycmVu dF9jb2woc3RtdCwgLTEpOwoKCWNvbm4gPSBTQ19nZXRfY29ubihzdG10KTsKCXJlc3VsdCA9IFBH QVBJX0FsbG9jU3RtdChjb25uLCAoSFNUTVQgKikgJnRibF9zdG10LCAwKTsKCWlmICghU1FMX1NV Q0NFRURFRChyZXN1bHQpKQoJewoJCVNDX3NldF9lcnJvcihzdG10LCBTVE1UX05PX01FTU9SWV9F UlJPUiwgIkNvdWxkbid0IGFsbG9jYXRlIHN0YXRlbWVudCBmb3IgUEdBUElfRm9yZWlnbktleXMg cmVzdWx0LiIsIGZ1bmMpOwoJCXJldHVybiBTUUxfRVJST1I7Cgl9CgojZGVmaW5lCXJldHVybglE T05UX0NBTExfUkVUVVJOX0ZST01fSEVSRT8/PwoKCXNjaGVtYV9uZWVkZWRbMF0gPSAnXDAnOwoJ c2NoZW1hX2ZldGNoZWRbMF0gPSAnXDAnOwoKCXBrX3RhYmxlX25lZWRlZCA9IG1ha2Vfc3RyaW5n KHN6UGtUYWJsZU5hbWUsIGNiUGtUYWJsZU5hbWUsIE5VTEwsIDApOwoJZmtfdGFibGVfbmVlZGVk ID0gbWFrZV9zdHJpbmcoc3pGa1RhYmxlTmFtZSwgY2JGa1RhYmxlTmFtZSwgTlVMTCwgMCk7Cgoj aWZkZWYJVU5JQ09ERV9TVVBQT1JUCglpZiAoQ0NfaXNfaW5fdW5pY29kZV9kcml2ZXIoY29ubikp CgkJaW50ZXJuYWxfYXNpc190eXBlID0gSU5URVJOQUxfQVNJU19UWVBFOwojZW5kaWYgLyogVU5J Q09ERV9TVVBQT1JUICovCglwa2V5X2FsbG9jZWQgPSBma2V5X2FsbG9jZWQgPSBGQUxTRTsKCgll cV9zdHJpbmcgPSBnZW5fb3Blc3RyKGVxb3AsIGNvbm4pOwoJaW5pdFBRRXhwQnVmZmVyKCZ0YWJs ZXNfcXVlcnkpOwoJLyoKCSAqIENhc2UgIzIgLS0gR2V0IHRoZSBmb3JlaWduIGtleXMgaW4gdGhl IHNwZWNpZmllZCB0YWJsZSAoZmt0YWIpIHRoYXQKCSAqIHJlZmVyIHRvIHRoZSBwcmltYXJ5IGtl eXMgb2Ygb3RoZXIgdGFibGUocykuCgkgKi8KCWlmIChma190YWJsZV9uZWVkZWQgJiYgZmtfdGFi bGVfbmVlZGVkWzBdICE9ICdcMCcpCgl7CgkJY2hhciAgICAqZXNjU2NoZW1hTmFtZTsKCgkJTVlM T0coMCwgIiBGb3JlaWduIEtleSBDYXNlICMyXG4iKTsKCQllc2NGa1RhYmxlTmFtZSA9IHNpbXBs ZUNhdGFsb2dFc2NhcGUoKFNRTENIQVIgKikgZmtfdGFibGVfbmVlZGVkLCBTUUxfTlRTLCBjb25u KTsKCQlzY2hlbWFfc3RyKHNjaGVtYV9uZWVkZWQsIHNpemVvZihzY2hlbWFfbmVlZGVkKSwgc3pG a1RhYmxlT3duZXIsIGNiRmtUYWJsZU93bmVyLCBUQUJMRV9JU19WQUxJRChzekZrVGFibGVOYW1l LCBjYkZrVGFibGVOYW1lKSwgY29ubik7CgkJZXNjU2NoZW1hTmFtZSA9IHNpbXBsZUNhdGFsb2dF c2NhcGUoKFNRTENIQVIgKikgc2NoZW1hX25lZWRlZCwgU1FMX05UUywgY29ubik7CgkJcHJpbnRm UFFFeHBCdWZmZXIoJnRhYmxlc19xdWVyeSwgIlNFTEVDVAlwdC50Z2FyZ3MsICIKCQkJIgkJcHQu dGduYXJncywgIgoJCQkiCQlwdC50Z2RlZmVycmFibGUsICIKCQkJIgkJcHQudGdpbml0ZGVmZXJy ZWQsICIKCQkJIgkJcHAxLnByb25hbWUsICIKCQkJIgkJcHAyLnByb25hbWUsICIKCQkJIgkJcGMu b2lkLCAiCgkJCSIJCXBjMS5vaWQsICIKCQkJIgkJcGMxLnJlbG5hbWUsICIKCQkJIgkJcHQudGdj b25zdHJuYW1lLCBwbi5uc3BuYW1lICIKCQkJIkZST00JcGdfY2F0YWxvZy5wZ19jbGFzcyBwYywg IgoJCQkiCQlwZ19jYXRhbG9nLnBnX3Byb2MgcHAxLCAiCgkJCSIJCXBnX2NhdGFsb2cucGdfcHJv YyBwcDIsICIKCQkJIgkJcGdfY2F0YWxvZy5wZ190cmlnZ2VyIHB0MSwgIgoJCQkiCQlwZ19jYXRh bG9nLnBnX3RyaWdnZXIgcHQyLCAiCgkJCSIJCXBnX2NhdGFsb2cucGdfcHJvYyBwcCwgIgoJCQki CQlwZ19jYXRhbG9nLnBnX3RyaWdnZXIgcHQsICIKCQkJIgkJcGdfY2F0YWxvZy5wZ19jbGFzcyBw YzEsICIKCQkJIgkJcGdfY2F0YWxvZy5wZ19uYW1lc3BhY2UgcG4sICIKCQkJIgkJcGdfY2F0YWxv Zy5wZ19uYW1lc3BhY2UgcG4xICIKCQkJIldIRVJFCXB0LnRncmVsaWQgPSBwYy5vaWQgIgoJCQki QU5EIHBwLm9pZCA9IHB0LnRnZm9pZCAiCgkJCSJBTkQgcHQxLnRnY29uc3RycmVsaWQgPSBwYy5v aWQgIgoJCQkiQU5EIHBwMS5vaWQgPSBwdDEudGdmb2lkICIKCQkJIkFORCBwdDIudGdmb2lkID0g cHAyLm9pZCAiCgkJCSJBTkQgcHQyLnRnY29uc3RycmVsaWQgPSBwYy5vaWQgIgoJCQkiQU5EICgo cGMucmVsbmFtZSAlcyclcycpICIKCQkJIkFORCAocG4xLm9pZCA9IHBjLnJlbG5hbWVzcGFjZSkg IgoJCQkiQU5EIChwbjEubnNwbmFtZSAlcyclcycpICIKCQkJIkFORCAocHAucHJvbmFtZSBMSUtF ICclJWlucycpICIKCQkJIkFORCAocHAxLnByb25hbWUgTElLRSAnJSV1cGQnKSAiCgkJCSJBTkQg KHBwMS5wcm9uYW1lIG5vdCBMSUtFICclJWNoZWNrJSUnKSAiCgkJCSJBTkQgKHBwMi5wcm9uYW1l IExJS0UgJyUlZGVsJykgIgoJCQkiQU5EIChwdDEudGdyZWxpZD1wdC50Z2NvbnN0cnJlbGlkKSAi CgkJCSJBTkQgKHB0MS50Z2NvbnN0cm5hbWU9cHQudGdjb25zdHJuYW1lKSAiCgkJCSJBTkQgKHB0 Mi50Z3JlbGlkPXB0LnRnY29uc3RycmVsaWQpICIKCQkJIkFORCAocHQyLnRnY29uc3RybmFtZT1w dC50Z2NvbnN0cm5hbWUpICIKCQkJIkFORCAocHQudGdjb25zdHJyZWxpZD1wYzEub2lkKSAiCgkJ CSJBTkQgKHBjMS5yZWxuYW1lc3BhY2U9cG4ub2lkKSkiCgkJCSIgb3JkZXIgYnkgcHQudGdjb25z dHJuYW1lIiwKCQkJZXFfc3RyaW5nLCBlc2NGa1RhYmxlTmFtZSwgZXFfc3RyaW5nLCBlc2NTY2hl bWFOYW1lKTsKCQlmcmVlKGVzY1NjaGVtYU5hbWUpOwoJCWlmIChQUUV4cEJ1ZmZlckRhdGFCcm9r ZW4odGFibGVzX3F1ZXJ5KSkKCQl7CgkJCVNDX3NldF9lcnJvcihzdG10LCBTVE1UX05PX01FTU9S WV9FUlJPUiwgIk91dCBvZiBtZW1vcnkgaW4gUEdBUElfRm9yZWlnbktleXMoKSIsIGZ1bmMpOwoJ CQlnb3RvIGNsZWFudXA7CgkJfQoKCQlyZXN1bHQgPSBQR0FQSV9FeGVjRGlyZWN0KHRibF9zdG10 LCAoU1FMQ0hBUiAqKSB0YWJsZXNfcXVlcnkuZGF0YSwgU1FMX05UUywgUE9EQkNfUkRPTkxZKTsK CgkJaWYgKCFTUUxfU1VDQ0VFREVEKHJlc3VsdCkpCgkJewoJCQlTQ19mdWxsX2Vycm9yX2NvcHko c3RtdCwgdGJsX3N0bXQsIEZBTFNFKTsKCQkJZ290byBjbGVhbnVwOwoJCX0KCgkJcmVzdWx0ID0g UEdBUElfQmluZENvbCh0Ymxfc3RtdCwgMSwgU1FMX0NfQklOQVJZLAoJCQkJCQkJICAgdHJpZ19h cmdzLCBzaXplb2YodHJpZ19hcmdzKSwgTlVMTCk7CgkJaWYgKCFTUUxfU1VDQ0VFREVEKHJlc3Vs dCkpCgkJewoJCQlnb3RvIGNsZWFudXA7CgkJfQoKCQlyZXN1bHQgPSBQR0FQSV9CaW5kQ29sKHRi bF9zdG10LCAyLCBTUUxfQ19TSE9SVCwKCQkJCQkJCSAgICZ0cmlnX25hcmdzLCAwLCBOVUxMKTsK CQlpZiAoIVNRTF9TVUNDRUVERUQocmVzdWx0KSkKCQl7CgkJCWdvdG8gY2xlYW51cDsKCQl9CgoJ CXJlc3VsdCA9IFBHQVBJX0JpbmRDb2wodGJsX3N0bXQsIDMsIGludGVybmFsX2FzaXNfdHlwZSwK CQkJCQkJIHRyaWdfZGVmZXJyYWJsZSwgc2l6ZW9mKHRyaWdfZGVmZXJyYWJsZSksIE5VTEwpOwoJ CWlmICghU1FMX1NVQ0NFRURFRChyZXN1bHQpKQoJCXsKCQkJZ290byBjbGVhbnVwOwoJCX0KCgkJ cmVzdWx0ID0gUEdBUElfQmluZENvbCh0Ymxfc3RtdCwgNCwgaW50ZXJuYWxfYXNpc190eXBlLAoJ CQkJCSB0cmlnX2luaXRkZWZlcnJlZCwgc2l6ZW9mKHRyaWdfaW5pdGRlZmVycmVkKSwgTlVMTCk7 CgkJaWYgKCFTUUxfU1VDQ0VFREVEKHJlc3VsdCkpCgkJewoJCQlnb3RvIGNsZWFudXA7CgkJfQoK CQlyZXN1bHQgPSBQR0FQSV9CaW5kQ29sKHRibF9zdG10LCA1LCBpbnRlcm5hbF9hc2lzX3R5cGUs CgkJCQkJCQkgICB1cGRfcnVsZSwgc2l6ZW9mKHVwZF9ydWxlKSwgTlVMTCk7CgkJaWYgKCFTUUxf U1VDQ0VFREVEKHJlc3VsdCkpCgkJewoJCQlnb3RvIGNsZWFudXA7CgkJfQoKCQlyZXN1bHQgPSBQ R0FQSV9CaW5kQ29sKHRibF9zdG10LCA2LCBpbnRlcm5hbF9hc2lzX3R5cGUsCgkJCQkJCQkgICBk ZWxfcnVsZSwgc2l6ZW9mKGRlbF9ydWxlKSwgTlVMTCk7CgkJaWYgKCFTUUxfU1VDQ0VFREVEKHJl c3VsdCkpCgkJewoJCQlnb3RvIGNsZWFudXA7CgkJfQoKCQlyZXN1bHQgPSBQR0FQSV9CaW5kQ29s KHRibF9zdG10LCA3LCBTUUxfQ19VTE9ORywKCQkJCQkJCSAgICZyZWxpZDEsIHNpemVvZihyZWxp ZDEpLCBOVUxMKTsKCQlpZiAoIVNRTF9TVUNDRUVERUQocmVzdWx0KSkKCQl7CgkJCWdvdG8gY2xl YW51cDsKCQl9CgkJcmVzdWx0ID0gUEdBUElfQmluZENvbCh0Ymxfc3RtdCwgOCwgU1FMX0NfVUxP TkcsCgkJCQkJCQkgICAmcmVsaWQyLCBzaXplb2YocmVsaWQyKSwgTlVMTCk7CgkJaWYgKCFTUUxf U1VDQ0VFREVEKHJlc3VsdCkpCgkJewoJCQlnb3RvIGNsZWFudXA7CgkJfQoJCXJlc3VsdCA9IFBH QVBJX0JpbmRDb2wodGJsX3N0bXQsIDksIGludGVybmFsX2FzaXNfdHlwZSwKCQkJCQlwa190YWJs ZV9mZXRjaGVkLCBUQUJMRV9OQU1FX1NUT1JBR0VfTEVOLCBOVUxMKTsKCQlpZiAoIVNRTF9TVUND RUVERUQocmVzdWx0KSkKCQl7CgkJCWdvdG8gY2xlYW51cDsKCQl9CgkJcmVzdWx0ID0gUEdBUElf QmluZENvbCh0Ymxfc3RtdCwgMTAsIGludGVybmFsX2FzaXNfdHlwZSwKCQkJCQljb25zdHJuYW1l LCBOQU1FU1RPUkFHRUxFTiwgTlVMTCk7CgkJaWYgKCFTUUxfU1VDQ0VFREVEKHJlc3VsdCkpCgkJ ewoJCQlnb3RvIGNsZWFudXA7CgkJfQoKCQlyZXN1bHQgPSBQR0FQSV9CaW5kQ29sKHRibF9zdG10 LCAxMSwgaW50ZXJuYWxfYXNpc190eXBlLAoJCQkJc2NoZW1hX2ZldGNoZWQsIFNDSEVNQV9OQU1F X1NUT1JBR0VfTEVOLCBOVUxMKTsKCQlpZiAoIVNRTF9TVUNDRUVERUQocmVzdWx0KSkKCQl7CgkJ CWdvdG8gY2xlYW51cDsKCQl9CgoJCXJlc3VsdCA9IFBHQVBJX0ZldGNoKHRibF9zdG10KTsKCQlp ZiAocmVzdWx0ID09IFNRTF9OT19EQVRBX0ZPVU5EKQoJCXsKCQkJcmV0ID0gU1FMX1NVQ0NFU1M7 CgkJCWdvdG8gY2xlYW51cDsKCQl9CgoJCWlmIChyZXN1bHQgIT0gU1FMX1NVQ0NFU1MpCgkJewoJ CQlTQ19mdWxsX2Vycm9yX2NvcHkoc3RtdCwgdGJsX3N0bXQsIEZBTFNFKTsKCQkJZ290byBjbGVh bnVwOwoJCX0KCgkJa2V5cmVzdWx0ID0gUEdBUElfQWxsb2NTdG10KGNvbm4sICZocGtleV9zdG10 LCAwKTsKCQlpZiAoIVNRTF9TVUNDRUVERUQoa2V5cmVzdWx0KSkKCQl7CgkJCVNDX3NldF9lcnJv cihzdG10LCBTVE1UX05PX01FTU9SWV9FUlJPUiwgIkNvdWxkbid0IGFsbG9jYXRlIHN0YXRlbWVu dCBmb3IgUEdBUElfRm9yZWlnbktleXMgKHBrZXlzKSByZXN1bHQuIiwgZnVuYyk7CgkJCWdvdG8g Y2xlYW51cDsKCQl9CgoJCWtleXJlc3VsdCA9IFBHQVBJX0JpbmRDb2woaHBrZXlfc3RtdCwgNCwg aW50ZXJuYWxfYXNpc190eXBlLAoJCQkJCQkJCSAgcGtleSwgc2l6ZW9mKHBrZXkpLCBOVUxMKTsK CQlpZiAoa2V5cmVzdWx0ICE9IFNRTF9TVUNDRVNTKQoJCXsKCQkJU0Nfc2V0X2Vycm9yKHN0bXQs IFNUTVRfTk9fTUVNT1JZX0VSUk9SLCAiQ291bGRuJ3QgYmluZGNvbCBmb3IgcHJpbWFyeSBrZXlz IGZvciBQR0FQSV9Gb3JlaWduS2V5cyByZXN1bHQuIiwgZnVuYyk7CgkJCWdvdG8gY2xlYW51cDsK CQl9CgoJCXdoaWxlIChyZXN1bHQgPT0gU1FMX1NVQ0NFU1MpCgkJewoJCQkvKiBDb21wdXRlIHRo ZSBudW1iZXIgb2Yga2V5cGFydHMuICovCgkJCW51bV9rZXlzID0gKHRyaWdfbmFyZ3MgLSA0KSAv IDI7CgoJCQlNWUxPRygwLCAiRm9yZWlnbiBLZXkgQ2FzZSMyOiB0cmlnX25hcmdzID0gJWQsIG51 bV9rZXlzID0gJWRcbiIsIHRyaWdfbmFyZ3MsIG51bV9rZXlzKTsKCgkJCS8qIElmIHRoZXJlIGlz IGEgcGsgdGFibGUgc3BlY2lmaWVkLCB0aGVuIGNoZWNrIGl0LiAqLwoJCQlpZiAocGtfdGFibGVf bmVlZGVkICYmIHBrX3RhYmxlX25lZWRlZFswXSAhPSAnXDAnKQoJCQl7CgkJCQkvKiBJZiBpdCBk b2Vzbid0IG1hdGNoLCB0aGVuIGNvbnRpbnVlICovCgkJCQlpZiAoc3RyY21wKHBrX3RhYmxlX2Zl dGNoZWQsIHBrX3RhYmxlX25lZWRlZCkpCgkJCQl7CgkJCQkJcmVzdWx0ID0gUEdBUElfRmV0Y2go dGJsX3N0bXQpOwoJCQkJCWNvbnRpbnVlOwoJCQkJfQoJCQl9CgoJCQlnb3RfcGtuYW1lID0gRkFM U0U7CgkJCWtleXJlc3VsdCA9IFBHQVBJX1ByaW1hcnlLZXlzKGhwa2V5X3N0bXQsIE5VTEwsIDAs CgkJCQkJCQkJCQkgIChTUUxDSEFSICopIHNjaGVtYV9mZXRjaGVkLCBTUUxfTlRTLAoJCQkJCQkJ CQkJICAoU1FMQ0hBUiAqKSBwa190YWJsZV9mZXRjaGVkLCBTUUxfTlRTLAoJCQkJCQkJCQkJICAw KTsKCQkJaWYgKGtleXJlc3VsdCAhPSBTUUxfU1VDQ0VTUykKCQkJewoJCQkJU0Nfc2V0X2Vycm9y KHN0bXQsIFNUTVRfTk9fTUVNT1JZX0VSUk9SLCAiQ291bGRuJ3QgZ2V0IHByaW1hcnkga2V5cyBm b3IgUEdBUElfRm9yZWlnbktleXMgcmVzdWx0LiIsIGZ1bmMpOwoJCQkJZ290byBjbGVhbnVwOwoJ CQl9CgoJCQkvKiBHZXQgdG8gZmlyc3QgcHJpbWFyeSBrZXkgKi8KCQkJcGtleV9wdHIgPSB0cmln X2FyZ3M7CgkJCWZvciAoaSA9IDA7IGkgPCA1OyBpKyspCgkJCQlwa2V5X3B0ciArPSBzdHJsZW4o cGtleV9wdHIpICsgMTsKCgkJCWZvciAoayA9IDA7IGsgPCBudW1fa2V5czsgaysrKQoJCQl7CgkJ CQkvKiBDaGVjayB0aGF0IHRoZSBrZXkgbGlzdGVkIGlzIHRoZSBwcmltYXJ5IGtleSAqLwoJCQkJ a2V5cmVzdWx0ID0gUEdBUElfRmV0Y2goaHBrZXlfc3RtdCk7CgkJCQlpZiAoa2V5cmVzdWx0ICE9 IFNRTF9TVUNDRVNTKQoJCQkJewoJCQkJCW51bV9rZXlzID0gMDsKCQkJCQlicmVhazsKCQkJCX0K CQkJCWlmICghZ290X3BrbmFtZSkKCQkJCXsKCQkJCQlQR0FQSV9HZXREYXRhKGhwa2V5X3N0bXQs IDYsIGludGVybmFsX2FzaXNfdHlwZSwgcGtuYW1lLCBzaXplb2YocGtuYW1lKSwgTlVMTCk7CgkJ CQkJZ290X3BrbmFtZSA9IFRSVUU7CgkJCQl9CgkJCQlwa2V5X3RleHQgPSBnZXRDbGllbnRDb2x1 bW5OYW1lKGNvbm4sIHJlbGlkMiwgcGtleV9wdHIsICZwa2V5X2FsbG9jZWQpOwoJCQkJTVlMT0co MCwgInBrZXlfcHRyPSclcycsIHBrZXk9JyVzJ1xuIiwgcGtleV90ZXh0LCBwa2V5KTsKCQkJCWlm IChzdHJjbXAocGtleV90ZXh0LCBwa2V5KSkKCQkJCXsKCQkJCQludW1fa2V5cyA9IDA7CgkJCQkJ YnJlYWs7CgkJCQl9CgkJCQlpZiAocGtleV9hbGxvY2VkKQoJCQkJCWZyZWUocGtleV90ZXh0KTsK CQkJCXBrZXlfYWxsb2NlZCA9IEZBTFNFOwoJCQkJLyogR2V0IHRvIG5leHQgcHJpbWFyeSBrZXkg Ki8KCQkJCWZvciAoayA9IDA7IGsgPCAyOyBrKyspCgkJCQkJcGtleV9wdHIgKz0gc3RybGVuKHBr ZXlfcHRyKSArIDE7CgoJCQl9CgkJCVBHQVBJX0ZyZWVTdG10KGhwa2V5X3N0bXQsIFNRTF9DTE9T RSk7CgoJCQkvKiBTZXQgdG8gZmlyc3QgZmsgY29sdW1uICovCgkJCWZrZXlfcHRyID0gdHJpZ19h cmdzOwoJCQlmb3IgKGsgPSAwOyBrIDwgNDsgaysrKQoJCQkJZmtleV9wdHIgKz0gc3RybGVuKGZr ZXlfcHRyKSArIDE7CgoJCQkvKiBTZXQgdXBkYXRlIGFuZCBkZWxldGUgYWN0aW9ucyBmb3IgZm9y ZWlnbiBrZXlzICovCgkJCWlmICghc3RyY21wKHVwZF9ydWxlLCAiUklfRktleV9jYXNjYWRlX3Vw ZCIpKQoJCQkJdXBkX3J1bGVfdHlwZSA9IFNRTF9DQVNDQURFOwoJCQllbHNlIGlmICghc3RyY21w KHVwZF9ydWxlLCAiUklfRktleV9ub2FjdGlvbl91cGQiKSkKCQkJCXVwZF9ydWxlX3R5cGUgPSBT UUxfTk9fQUNUSU9OOwoJCQllbHNlIGlmICghc3RyY21wKHVwZF9ydWxlLCAiUklfRktleV9yZXN0 cmljdF91cGQiKSkKCQkJCXVwZF9ydWxlX3R5cGUgPSBTUUxfTk9fQUNUSU9OOwoJCQllbHNlIGlm ICghc3RyY21wKHVwZF9ydWxlLCAiUklfRktleV9zZXRkZWZhdWx0X3VwZCIpKQoJCQkJdXBkX3J1 bGVfdHlwZSA9IFNRTF9TRVRfREVGQVVMVDsKCQkJZWxzZSBpZiAoIXN0cmNtcCh1cGRfcnVsZSwg IlJJX0ZLZXlfc2V0bnVsbF91cGQiKSkKCQkJCXVwZF9ydWxlX3R5cGUgPSBTUUxfU0VUX05VTEw7 CgoJCQlpZiAoIXN0cmNtcChkZWxfcnVsZSwgIlJJX0ZLZXlfY2FzY2FkZV9kZWwiKSkKCQkJCWRl bF9ydWxlX3R5cGUgPSBTUUxfQ0FTQ0FERTsKCQkJZWxzZSBpZiAoIXN0cmNtcChkZWxfcnVsZSwg IlJJX0ZLZXlfbm9hY3Rpb25fZGVsIikpCgkJCQlkZWxfcnVsZV90eXBlID0gU1FMX05PX0FDVElP TjsKCQkJZWxzZSBpZiAoIXN0cmNtcChkZWxfcnVsZSwgIlJJX0ZLZXlfcmVzdHJpY3RfZGVsIikp CgkJCQlkZWxfcnVsZV90eXBlID0gU1FMX05PX0FDVElPTjsKCQkJZWxzZSBpZiAoIXN0cmNtcChk ZWxfcnVsZSwgIlJJX0ZLZXlfc2V0ZGVmYXVsdF9kZWwiKSkKCQkJCWRlbF9ydWxlX3R5cGUgPSBT UUxfU0VUX0RFRkFVTFQ7CgkJCWVsc2UgaWYgKCFzdHJjbXAoZGVsX3J1bGUsICJSSV9GS2V5X3Nl dG51bGxfZGVsIikpCgkJCQlkZWxfcnVsZV90eXBlID0gU1FMX1NFVF9OVUxMOwoKCQkJLyogU2V0 IGRlZmVycmFiaWxpdHkgdHlwZSAqLwoJCQlpZiAoIXN0cmNtcCh0cmlnX2luaXRkZWZlcnJlZCwg InkiKSkKCQkJCWRlZmVyX3R5cGUgPSBTUUxfSU5JVElBTExZX0RFRkVSUkVEOwoJCQllbHNlIGlm ICghc3RyY21wKHRyaWdfZGVmZXJyYWJsZSwgInkiKSkKCQkJCWRlZmVyX3R5cGUgPSBTUUxfSU5J VElBTExZX0lNTUVESUFURTsKCQkJZWxzZQoJCQkJZGVmZXJfdHlwZSA9IFNRTF9OT1RfREVGRVJS QUJMRTsKCgkJCS8qIEdldCB0byBmaXJzdCBwcmltYXJ5IGtleSAqLwoJCQlwa2V5X3B0ciA9IHRy aWdfYXJnczsKCQkJZm9yIChpID0gMDsgaSA8IDU7IGkrKykKCQkJCXBrZXlfcHRyICs9IHN0cmxl bihwa2V5X3B0cikgKyAxOwoKCQkJZm9yIChrID0gMDsgayA8IG51bV9rZXlzOyBrKyspCgkJCXsK CQkJCXR1cGxlID0gUVJfQWRkTmV3KHJlcyk7CgoJCQkJcGtleV90ZXh0ID0gZ2V0Q2xpZW50Q29s dW1uTmFtZShjb25uLCByZWxpZDIsIHBrZXlfcHRyLCAmcGtleV9hbGxvY2VkKTsKCQkJCWZrZXlf dGV4dCA9IGdldENsaWVudENvbHVtbk5hbWUoY29ubiwgcmVsaWQxLCBma2V5X3B0ciwgJmZrZXlf YWxsb2NlZCk7CgoJCQkJTVlMT0coMCwgInBrX3RhYmxlID0gJyVzJywgcGtleV9wdHIgPSAnJXMn XG4iLCBwa190YWJsZV9mZXRjaGVkLCBwa2V5X3RleHQpOwoJCQkJc2V0X3R1cGxlZmllbGRfc3Ry aW5nKCZ0dXBsZVtGS1NfUEtUQUJMRV9DQVRdLCBDdXJyQ2F0KGNvbm4pKTsKCQkJCXNldF90dXBs ZWZpZWxkX3N0cmluZygmdHVwbGVbRktTX1BLVEFCTEVfU0NIRU1dLCBHRVRfU0NIRU1BX05BTUUo c2NoZW1hX2ZldGNoZWQpKTsKCQkJCXNldF90dXBsZWZpZWxkX3N0cmluZygmdHVwbGVbRktTX1BL VEFCTEVfTkFNRV0sIHBrX3RhYmxlX2ZldGNoZWQpOwoJCQkJc2V0X3R1cGxlZmllbGRfc3RyaW5n KCZ0dXBsZVtGS1NfUEtDT0xVTU5fTkFNRV0sIHBrZXlfdGV4dCk7CgoJCQkJTVlMT0coMCwgImZr X3RhYmxlX25lZWRlZCA9ICclcycsIGZrZXlfcHRyID0gJyVzJ1xuIiwgZmtfdGFibGVfbmVlZGVk LCBma2V5X3RleHQpOwoJCQkJc2V0X3R1cGxlZmllbGRfc3RyaW5nKCZ0dXBsZVtGS1NfRktUQUJM RV9DQVRdLCBDdXJyQ2F0KGNvbm4pKTsKCQkJCXNldF90dXBsZWZpZWxkX3N0cmluZygmdHVwbGVb RktTX0ZLVEFCTEVfU0NIRU1dLCBHRVRfU0NIRU1BX05BTUUoc2NoZW1hX25lZWRlZCkpOwoJCQkJ c2V0X3R1cGxlZmllbGRfc3RyaW5nKCZ0dXBsZVtGS1NfRktUQUJMRV9OQU1FXSwgZmtfdGFibGVf bmVlZGVkKTsKCQkJCXNldF90dXBsZWZpZWxkX3N0cmluZygmdHVwbGVbRktTX0ZLQ09MVU1OX05B TUVdLCBma2V5X3RleHQpOwoKCQkJCU1ZTE9HKDAsICJ1cGRfcnVsZV90eXBlID0gJyVpJywgZGVs X3J1bGVfdHlwZSA9ICclaSdcbiwgdHJpZ19uYW1lID0gJyVzJyIsIHVwZF9ydWxlX3R5cGUsIGRl bF9ydWxlX3R5cGUsIHRyaWdfYXJncyk7CgkJCQlzZXRfdHVwbGVmaWVsZF9pbnQyKCZ0dXBsZVtG S1NfS0VZX1NFUV0sIChJbnQyKSAoayArIDEpKTsKCQkJCXNldF90dXBsZWZpZWxkX2ludDIoJnR1 cGxlW0ZLU19VUERBVEVfUlVMRV0sIHVwZF9ydWxlX3R5cGUpOwoJCQkJc2V0X3R1cGxlZmllbGRf aW50MigmdHVwbGVbRktTX0RFTEVURV9SVUxFXSwgZGVsX3J1bGVfdHlwZSk7CgkJCQlzZXRfdHVw bGVmaWVsZF9zdHJpbmcoJnR1cGxlW0ZLU19GS19OQU1FXSwgY29uc3RybmFtZSk7CgkJCQlzZXRf dHVwbGVmaWVsZF9zdHJpbmcoJnR1cGxlW0ZLU19QS19OQU1FXSwgcGtuYW1lKTsKCQkJCXNldF90 dXBsZWZpZWxkX2ludDIoJnR1cGxlW0ZLU19ERUZFUlJBQklMSVRZXSwgZGVmZXJfdHlwZSk7CgkJ CQlzZXRfdHVwbGVmaWVsZF9zdHJpbmcoJnR1cGxlW0ZLU19UUklHR0VSX05BTUVdLCB0cmlnX2Fy Z3MpOwoKCQkJCWlmIChma2V5X2FsbG9jZWQpCgkJCQkJZnJlZShma2V5X3RleHQpOwoJCQkJZmtl eV9hbGxvY2VkID0gRkFMU0U7CgkJCQlpZiAocGtleV9hbGxvY2VkKQoJCQkJCWZyZWUocGtleV90 ZXh0KTsKCQkJCXBrZXlfYWxsb2NlZCA9IEZBTFNFOwoJCQkJLyogbmV4dCBwcmltYXJ5L2ZvcmVp Z24ga2V5ICovCgkJCQlmb3IgKGkgPSAwOyBpIDwgMjsgaSsrKQoJCQkJewoJCQkJCWZrZXlfcHRy ICs9IHN0cmxlbihma2V5X3B0cikgKyAxOwoJCQkJCXBrZXlfcHRyICs9IHN0cmxlbihwa2V5X3B0 cikgKyAxOwoJCQkJfQoJCQl9CgoJCQlyZXN1bHQgPSBQR0FQSV9GZXRjaCh0Ymxfc3RtdCk7CgkJ fQoJfQoKCS8qCgkgKiBDYXNlICMxIC0tIEdldCB0aGUgZm9yZWlnbiBrZXlzIGluIG90aGVyIHRh YmxlcyB0aGF0IHJlZmVyIHRvIHRoZQoJICogcHJpbWFyeSBrZXkgaW4gdGhlIHNwZWNpZmllZCB0 YWJsZSAocGt0YWIpLglpLmUuLCBXaG8gcG9pbnRzIHRvCgkgKiBtZT8KCSAqLwoJZWxzZSBpZiAo cGtfdGFibGVfbmVlZGVkWzBdICE9ICdcMCcpCgl7CgkJY2hhcgkqZXNjU2NoZW1hTmFtZTsKCgkJ ZXNjUGtUYWJsZU5hbWUgPSBzaW1wbGVDYXRhbG9nRXNjYXBlKChTUUxDSEFSICopIHBrX3RhYmxl X25lZWRlZCwgU1FMX05UUywgY29ubik7CgkJc2NoZW1hX3N0cihzY2hlbWFfbmVlZGVkLCBzaXpl b2Yoc2NoZW1hX25lZWRlZCksIHN6UGtUYWJsZU93bmVyLCBjYlBrVGFibGVPd25lciwgVEFCTEVf SVNfVkFMSUQoc3pQa1RhYmxlTmFtZSwgY2JQa1RhYmxlTmFtZSksIGNvbm4pOwoJCWVzY1NjaGVt YU5hbWUgPSBzaW1wbGVDYXRhbG9nRXNjYXBlKChTUUxDSEFSICopIHNjaGVtYV9uZWVkZWQsIFNR TF9OVFMsIGNvbm4pOwoJCXByaW50ZlBRRXhwQnVmZmVyKCZ0YWJsZXNfcXVlcnksICJTRUxFQ1QJ cHQudGdhcmdzLCAiCgkJCSIJcHQudGduYXJncywgIgoJCQkiCXB0LnRnZGVmZXJyYWJsZSwgIgoJ CQkiCXB0LnRnaW5pdGRlZmVycmVkLCAiCgkJCSIJcHAxLnByb25hbWUsICIKCQkJIglwcDIucHJv bmFtZSwgIgoJCQkiCXBjLm9pZCwgIgoJCQkiCXBjMS5vaWQsICIKCQkJIglwYzEucmVsbmFtZSwg IgoJCQkiCXB0LnRnY29uc3RybmFtZSwgcG4xLm5zcG5hbWUgIgoJCQkiRlJPTQlwZ19jYXRhbG9n LnBnX2NsYXNzIHBjLCAiCgkJCSIJcGdfY2F0YWxvZy5wZ19jbGFzcyBwYzEsICIKCQkJIglwZ19j YXRhbG9nLnBnX3Byb2MgcHAsICIKCQkJIglwZ19jYXRhbG9nLnBnX3Byb2MgcHAxLCAiCgkJCSIJ cGdfY2F0YWxvZy5wZ19wcm9jIHBwMiwgIgoJCQkiCXBnX2NhdGFsb2cucGdfdHJpZ2dlciBwdCwg IgoJCQkiCXBnX2NhdGFsb2cucGdfdHJpZ2dlciBwdDEsICIKCQkJIglwZ19jYXRhbG9nLnBnX3Ry aWdnZXIgcHQyLCAiCgkJCSIJcGdfY2F0YWxvZy5wZ19uYW1lc3BhY2UgcG4sICIKCQkJIglwZ19j YXRhbG9nLnBnX25hbWVzcGFjZSBwbjEgIgoJCQkiV0hFUkUgIHBjLnJlbG5hbWUgJXMnJXMnICIK CQkJIglBTkQgcG4ubnNwbmFtZSAlcyclcycgIgoJCQkiCUFORCBwYy5yZWxuYW1lc3BhY2UgPSBw bi5vaWQgIgoJCQkiCUFORCBwdC50Z2NvbnN0cnJlbGlkID0gcGMub2lkICIKCQkJIglBTkQgcHAu b2lkID0gcHQudGdmb2lkICIKCQkJIglBTkQgcHAucHJvbmFtZSBMaWtlICclJWlucycgIgoJCQki CUFORCBwdDEudGdjb25zdHJuYW1lID0gcHQudGdjb25zdHJuYW1lICIKCQkJIglBTkQgcHQxLnRn Y29uc3RycmVsaWQgPSBwdC50Z3JlbGlkICIKCQkJIglBTkQgcHQxLnRncmVsaWQgPSBwYy5vaWQg IgoJCQkiCUFORCBwYzEub2lkID0gcHQudGdyZWxpZCAiCgkJCSIJQU5EIHBwMS5vaWQgPSBwdDEu dGdmb2lkICIKCQkJIglBTkQgcHAxLnByb25hbWUgbGlrZSAnJSV1cGQnICIKCQkJIglBTkQgKHBw MS5wcm9uYW1lIG5vdCBsaWtlICclJWNoZWNrJSUnKSAiCgkJCSIJQU5EIHB0Mi50Z2NvbnN0cm5h bWUgPSBwdC50Z2NvbnN0cm5hbWUgIgoJCQkiCUFORCBwdDIudGdjb25zdHJyZWxpZCA9IHB0LnRn cmVsaWQgIgoJCQkiCUFORCBwdDIudGdyZWxpZCA9IHBjLm9pZCAiCgkJCSIJQU5EIHBwMi5vaWQg PSBwdDIudGdmb2lkICIKCQkJIglBTkQgcHAyLnByb25hbWUgTGlrZSAnJSVkZWwnICIKCQkJIglB TkQgcG4xLm9pZCA9IHBjMS5yZWxuYW1lc3BhY2UgIgoJCQkiIG9yZGVyIGJ5IHB0LnRnY29uc3Ry bmFtZSIsCgkJCWVxX3N0cmluZywgZXNjUGtUYWJsZU5hbWUsIGVxX3N0cmluZywgZXNjU2NoZW1h TmFtZSk7CgkJZnJlZShlc2NTY2hlbWFOYW1lKTsKCQlpZiAoUFFFeHBCdWZmZXJEYXRhQnJva2Vu KHRhYmxlc19xdWVyeSkpCgkJewoJCQlTQ19zZXRfZXJyb3Ioc3RtdCwgU1RNVF9OT19NRU1PUllf RVJST1IsICJPdXQgb2YgbWVtb3J5IGluIFBHQVBJX0ZvcmVpZ25LZXlzKCkiLCBmdW5jKTsKCQkJ Z290byBjbGVhbnVwOwoJCX0KCgkJcmVzdWx0ID0gUEdBUElfRXhlY0RpcmVjdCh0Ymxfc3RtdCwg KFNRTENIQVIgKikgdGFibGVzX3F1ZXJ5LmRhdGEsIFNRTF9OVFMsIFBPREJDX1JET05MWSk7CgkJ aWYgKCFTUUxfU1VDQ0VFREVEKHJlc3VsdCkpCgkJewoJCQlnb3RvIGNsZWFudXA7CgkJfQoKCQly ZXN1bHQgPSBQR0FQSV9CaW5kQ29sKHRibF9zdG10LCAxLCBTUUxfQ19CSU5BUlksCgkJCQkJCQkg ICB0cmlnX2FyZ3MsIHNpemVvZih0cmlnX2FyZ3MpLCBOVUxMKTsKCQlpZiAoIVNRTF9TVUNDRUVE RUQocmVzdWx0KSkKCQl7CgkJCWdvdG8gY2xlYW51cDsKCQl9CgoJCXJlc3VsdCA9IFBHQVBJX0Jp bmRDb2wodGJsX3N0bXQsIDIsIFNRTF9DX1NIT1JULAoJCQkJCQkJICAgJnRyaWdfbmFyZ3MsIDAs IE5VTEwpOwoJCWlmICghU1FMX1NVQ0NFRURFRChyZXN1bHQpKQoJCXsKCQkJZ290byBjbGVhbnVw OwoJCX0KCgkJcmVzdWx0ID0gUEdBUElfQmluZENvbCh0Ymxfc3RtdCwgMywgaW50ZXJuYWxfYXNp c190eXBlLAoJCQkJCQkgdHJpZ19kZWZlcnJhYmxlLCBzaXplb2YodHJpZ19kZWZlcnJhYmxlKSwg TlVMTCk7CgkJaWYgKCFTUUxfU1VDQ0VFREVEKHJlc3VsdCkpCgkJewoJCQlnb3RvIGNsZWFudXA7 CgkJfQoKCQlyZXN1bHQgPSBQR0FQSV9CaW5kQ29sKHRibF9zdG10LCA0LCBpbnRlcm5hbF9hc2lz X3R5cGUsCgkJCQkJIHRyaWdfaW5pdGRlZmVycmVkLCBzaXplb2YodHJpZ19pbml0ZGVmZXJyZWQp LCBOVUxMKTsKCQlpZiAoIVNRTF9TVUNDRUVERUQocmVzdWx0KSkKCQl7CgkJCWdvdG8gY2xlYW51 cDsKCQl9CgoJCXJlc3VsdCA9IFBHQVBJX0JpbmRDb2wodGJsX3N0bXQsIDUsIGludGVybmFsX2Fz aXNfdHlwZSwKCQkJCQkJCSAgIHVwZF9ydWxlLCBzaXplb2YodXBkX3J1bGUpLCBOVUxMKTsKCQlp ZiAoIVNRTF9TVUNDRUVERUQocmVzdWx0KSkKCQl7CgkJCWdvdG8gY2xlYW51cDsKCQl9CgoJCXJl c3VsdCA9IFBHQVBJX0JpbmRDb2wodGJsX3N0bXQsIDYsIGludGVybmFsX2FzaXNfdHlwZSwKCQkJ CQkJCSAgIGRlbF9ydWxlLCBzaXplb2YoZGVsX3J1bGUpLCBOVUxMKTsKCQlpZiAoIVNRTF9TVUND RUVERUQocmVzdWx0KSkKCQl7CgkJCWdvdG8gY2xlYW51cDsKCQl9CgoJCXJlc3VsdCA9IFBHQVBJ X0JpbmRDb2wodGJsX3N0bXQsIDcsIFNRTF9DX1VMT05HLAoJCQkJCQkmcmVsaWQxLCBzaXplb2Yo cmVsaWQxKSwgTlVMTCk7CgkJaWYgKCFTUUxfU1VDQ0VFREVEKHJlc3VsdCkpCgkJewoJCQlnb3Rv IGNsZWFudXA7CgkJfQoJCXJlc3VsdCA9IFBHQVBJX0JpbmRDb2wodGJsX3N0bXQsIDgsIFNRTF9D X1VMT05HLAoJCQkJCQkmcmVsaWQyLCBzaXplb2YocmVsaWQyKSwgTlVMTCk7CgkJaWYgKCFTUUxf U1VDQ0VFREVEKHJlc3VsdCkpCgkJewoJCQlnb3RvIGNsZWFudXA7CgkJfQoJCXJlc3VsdCA9IFBH QVBJX0JpbmRDb2wodGJsX3N0bXQsIDksIGludGVybmFsX2FzaXNfdHlwZSwKCQkJCQlma190YWJs ZV9mZXRjaGVkLCBUQUJMRV9OQU1FX1NUT1JBR0VfTEVOLCBOVUxMKTsKCQlpZiAoIVNRTF9TVUND RUVERUQocmVzdWx0KSkKCQl7CgkJCWdvdG8gY2xlYW51cDsKCQl9CgkJcmVzdWx0ID0gUEdBUElf QmluZENvbCh0Ymxfc3RtdCwgMTAsIGludGVybmFsX2FzaXNfdHlwZSwKCQkJCQljb25zdHJuYW1l LCBOQU1FU1RPUkFHRUxFTiwgTlVMTCk7CgkJaWYgKCFTUUxfU1VDQ0VFREVEKHJlc3VsdCkpCgkJ ewoJCQlnb3RvIGNsZWFudXA7CgkJfQoKCQlyZXN1bHQgPSBQR0FQSV9CaW5kQ29sKHRibF9zdG10 LCAxMSwgaW50ZXJuYWxfYXNpc190eXBlLAoJCQkJc2NoZW1hX2ZldGNoZWQsIFNDSEVNQV9OQU1F X1NUT1JBR0VfTEVOLCBOVUxMKTsKCQlpZiAoIVNRTF9TVUNDRUVERUQocmVzdWx0KSkKCQl7CgkJ CWdvdG8gY2xlYW51cDsKCQl9CgoJCXJlc3VsdCA9IFBHQVBJX0ZldGNoKHRibF9zdG10KTsKCQlp ZiAocmVzdWx0ID09IFNRTF9OT19EQVRBX0ZPVU5EKQoJCXsKCQkJcmV0ID0gU1FMX1NVQ0NFU1M7 CgkJCWdvdG8gY2xlYW51cDsKCQl9CgoJCWlmIChyZXN1bHQgIT0gU1FMX1NVQ0NFU1MpCgkJewoJ CQlTQ19mdWxsX2Vycm9yX2NvcHkoc3RtdCwgdGJsX3N0bXQsIEZBTFNFKTsKCQkJZ290byBjbGVh bnVwOwoJCX0KCgkJLyoKCQkgKglnZXQgcGtfbmFtZSBoZXJlCgkJICovCgkJa2V5cmVzdWx0ID0g UEdBUElfQWxsb2NTdG10KGNvbm4sICZocGtleV9zdG10LCAwKTsKCQlpZiAoIVNRTF9TVUNDRUVE RUQoa2V5cmVzdWx0KSkKCQl7CgkJCVNDX3NldF9lcnJvcihzdG10LCBTVE1UX05PX01FTU9SWV9F UlJPUiwgIkNvdWxkbid0IGFsbG9jYXRlIHN0YXRlbWVudCBmb3IgUEdBUElfRm9yZWlnbktleXMg KHBrZXlzKSByZXN1bHQuIiwgZnVuYyk7CgkJCWdvdG8gY2xlYW51cDsKCQl9CgkJa2V5cmVzdWx0 ID0gUEdBUElfQmluZENvbChocGtleV9zdG10LCA2LCBpbnRlcm5hbF9hc2lzX3R5cGUsCgkJCQlw a25hbWUsIHNpemVvZihwa25hbWUpLCBOVUxMKTsKCQlpZiAoa2V5cmVzdWx0ICE9IFNRTF9TVUND RVNTKQoJCXsKCQkJU0Nfc2V0X2Vycm9yKHN0bXQsIFNUTVRfTk9fTUVNT1JZX0VSUk9SLCAiQ291 bGRuJ3QgYmluZGNvbCBmb3IgcHJpbWFyeSBrZXlzIGZvciBQR0FQSV9Gb3JlaWduS2V5cyByZXN1 bHQuIiwgZnVuYyk7CgkJCWdvdG8gY2xlYW51cDsKCQl9CgkJa2V5cmVzdWx0ID0gUEdBUElfUHJp bWFyeUtleXMoaHBrZXlfc3RtdCwgTlVMTCwgMCwKCQkJCQkJCQkJICAoU1FMQ0hBUiAqKSBzY2hl bWFfbmVlZGVkLCBTUUxfTlRTLAoJCQkJCQkJCQkgIChTUUxDSEFSICopIHBrX3RhYmxlX25lZWRl ZCwgU1FMX05UUywgMCk7CgkJaWYgKGtleXJlc3VsdCAhPSBTUUxfU1VDQ0VTUykKCQl7CgkJCVND X3NldF9lcnJvcihzdG10LCBTVE1UX05PX01FTU9SWV9FUlJPUiwgIkNvdWxkbid0IGdldCBwcmlt YXJ5IGtleXMgZm9yIFBHQVBJX0ZvcmVpZ25LZXlzIHJlc3VsdC4iLCBmdW5jKTsKCQkJZ290byBj bGVhbnVwOwoJCX0KCQlwa25hbWVbMF0gPSAnXDAnOwoJCWtleXJlc3VsdCA9IFBHQVBJX0ZldGNo KGhwa2V5X3N0bXQpOwoJCVBHQVBJX0ZyZWVTdG10KGhwa2V5X3N0bXQsIFNRTF9DTE9TRSk7CgkJ d2hpbGUgKHJlc3VsdCA9PSBTUUxfU1VDQ0VTUykKCQl7CgkJCS8qIENhbGN1bGF0ZSB0aGUgbnVt YmVyIG9mIGtleSBwYXJ0cyAqLwoJCQludW1fa2V5cyA9ICh0cmlnX25hcmdzIC0gNCkgLyAyOzsK CgkJCS8qIEhhbmRsZSBhY3Rpb24gKGkuZS4sICdjYXNjYWRlJywgJ3Jlc3RyaWN0JywgJ3NldG51 bGwnKSAqLwoJCQlpZiAoIXN0cmNtcCh1cGRfcnVsZSwgIlJJX0ZLZXlfY2FzY2FkZV91cGQiKSkK CQkJCXVwZF9ydWxlX3R5cGUgPSBTUUxfQ0FTQ0FERTsKCQkJZWxzZSBpZiAoIXN0cmNtcCh1cGRf cnVsZSwgIlJJX0ZLZXlfbm9hY3Rpb25fdXBkIikpCgkJCQl1cGRfcnVsZV90eXBlID0gU1FMX05P X0FDVElPTjsKCQkJZWxzZSBpZiAoIXN0cmNtcCh1cGRfcnVsZSwgIlJJX0ZLZXlfcmVzdHJpY3Rf dXBkIikpCgkJCQl1cGRfcnVsZV90eXBlID0gU1FMX05PX0FDVElPTjsKCQkJZWxzZSBpZiAoIXN0 cmNtcCh1cGRfcnVsZSwgIlJJX0ZLZXlfc2V0ZGVmYXVsdF91cGQiKSkKCQkJCXVwZF9ydWxlX3R5 cGUgPSBTUUxfU0VUX0RFRkFVTFQ7CgkJCWVsc2UgaWYgKCFzdHJjbXAodXBkX3J1bGUsICJSSV9G S2V5X3NldG51bGxfdXBkIikpCgkJCQl1cGRfcnVsZV90eXBlID0gU1FMX1NFVF9OVUxMOwoKCQkJ aWYgKCFzdHJjbXAoZGVsX3J1bGUsICJSSV9GS2V5X2Nhc2NhZGVfZGVsIikpCgkJCQlkZWxfcnVs ZV90eXBlID0gU1FMX0NBU0NBREU7CgkJCWVsc2UgaWYgKCFzdHJjbXAoZGVsX3J1bGUsICJSSV9G S2V5X25vYWN0aW9uX2RlbCIpKQoJCQkJZGVsX3J1bGVfdHlwZSA9IFNRTF9OT19BQ1RJT047CgkJ CWVsc2UgaWYgKCFzdHJjbXAoZGVsX3J1bGUsICJSSV9GS2V5X3Jlc3RyaWN0X2RlbCIpKQoJCQkJ ZGVsX3J1bGVfdHlwZSA9IFNRTF9OT19BQ1RJT047CgkJCWVsc2UgaWYgKCFzdHJjbXAoZGVsX3J1 bGUsICJSSV9GS2V5X3NldGRlZmF1bHRfZGVsIikpCgkJCQlkZWxfcnVsZV90eXBlID0gU1FMX1NF VF9ERUZBVUxUOwoJCQllbHNlIGlmICghc3RyY21wKGRlbF9ydWxlLCAiUklfRktleV9zZXRudWxs X2RlbCIpKQoJCQkJZGVsX3J1bGVfdHlwZSA9IFNRTF9TRVRfTlVMTDsKCgkJCS8qIFNldCBkZWZl cnJhYmlsaXR5IHR5cGUgKi8KCQkJaWYgKCFzdHJjbXAodHJpZ19pbml0ZGVmZXJyZWQsICJ5Iikp CgkJCQlkZWZlcl90eXBlID0gU1FMX0lOSVRJQUxMWV9ERUZFUlJFRDsKCQkJZWxzZSBpZiAoIXN0 cmNtcCh0cmlnX2RlZmVycmFibGUsICJ5IikpCgkJCQlkZWZlcl90eXBlID0gU1FMX0lOSVRJQUxM WV9JTU1FRElBVEU7CgkJCWVsc2UKCQkJCWRlZmVyX3R5cGUgPSBTUUxfTk9UX0RFRkVSUkFCTEU7 CgoJCQlNWUxPRygwLCAiRm9yZWlnbiBLZXkgQ2FzZSMxOiB0cmlnX25hcmdzID0gJWQsIG51bV9r ZXlzID0gJWRcbiIsIHRyaWdfbmFyZ3MsIG51bV9rZXlzKTsKCgkJCS8qIEdldCB0byBmaXJzdCBw cmltYXJ5IGtleSAqLwoJCQlwa2V5X3B0ciA9IHRyaWdfYXJnczsKCQkJZm9yIChpID0gMDsgaSA8 IDU7IGkrKykKCQkJCXBrZXlfcHRyICs9IHN0cmxlbihwa2V5X3B0cikgKyAxOwoKCQkJLyogR2V0 IHRvIGZpcnN0IGZvcmVpZ24ga2V5ICovCgkJCWZrZXlfcHRyID0gdHJpZ19hcmdzOwoJCQlmb3Ig KGsgPSAwOyBrIDwgNDsgaysrKQoJCQkJZmtleV9wdHIgKz0gc3RybGVuKGZrZXlfcHRyKSArIDE7 CgoJCQlmb3IgKGsgPSAwOyBrIDwgbnVtX2tleXM7IGsrKykKCQkJewoJCQkJcGtleV90ZXh0ID0g Z2V0Q2xpZW50Q29sdW1uTmFtZShjb25uLCByZWxpZDEsIHBrZXlfcHRyLCAmcGtleV9hbGxvY2Vk KTsKCQkJCWZrZXlfdGV4dCA9IGdldENsaWVudENvbHVtbk5hbWUoY29ubiwgcmVsaWQyLCBma2V5 X3B0ciwgJmZrZXlfYWxsb2NlZCk7CgoJCQkJTVlMT0coMCwgInBrZXlfcHRyID0gJyVzJywgZmtf dGFibGUgPSAnJXMnLCBma2V5X3B0ciA9ICclcydcbiIsIHBrZXlfdGV4dCwgZmtfdGFibGVfZmV0 Y2hlZCwgZmtleV90ZXh0KTsKCgkJCQl0dXBsZSA9IFFSX0FkZE5ldyhyZXMpOwoKCQkJCU1ZTE9H KDAsICJwa190YWJsZV9uZWVkZWQgPSAnJXMnLCBwa2V5X3B0ciA9ICclcydcbiIsIHBrX3RhYmxl X25lZWRlZCwgcGtleV90ZXh0KTsKCQkJCXNldF90dXBsZWZpZWxkX3N0cmluZygmdHVwbGVbRktT X1BLVEFCTEVfQ0FUXSwgQ3VyckNhdChjb25uKSk7CgkJCQlzZXRfdHVwbGVmaWVsZF9zdHJpbmco JnR1cGxlW0ZLU19QS1RBQkxFX1NDSEVNXSwgR0VUX1NDSEVNQV9OQU1FKHNjaGVtYV9uZWVkZWQp KTsKCQkJCXNldF90dXBsZWZpZWxkX3N0cmluZygmdHVwbGVbRktTX1BLVEFCTEVfTkFNRV0sIHBr X3RhYmxlX25lZWRlZCk7CgkJCQlzZXRfdHVwbGVmaWVsZF9zdHJpbmcoJnR1cGxlW0ZLU19QS0NP TFVNTl9OQU1FXSwgcGtleV90ZXh0KTsKCgkJCQlNWUxPRygwLCAiZmtfdGFibGUgPSAnJXMnLCBm a2V5X3B0ciA9ICclcydcbiIsIGZrX3RhYmxlX2ZldGNoZWQsIGZrZXlfdGV4dCk7CgkJCQlzZXRf dHVwbGVmaWVsZF9zdHJpbmcoJnR1cGxlW0ZLU19GS1RBQkxFX0NBVF0sIEN1cnJDYXQoY29ubikp OwoJCQkJc2V0X3R1cGxlZmllbGRfc3RyaW5nKCZ0dXBsZVtGS1NfRktUQUJMRV9TQ0hFTV0sIEdF VF9TQ0hFTUFfTkFNRShzY2hlbWFfZmV0Y2hlZCkpOwoJCQkJc2V0X3R1cGxlZmllbGRfc3RyaW5n KCZ0dXBsZVtGS1NfRktUQUJMRV9OQU1FXSwgZmtfdGFibGVfZmV0Y2hlZCk7CgkJCQlzZXRfdHVw bGVmaWVsZF9zdHJpbmcoJnR1cGxlW0ZLU19GS0NPTFVNTl9OQU1FXSwgZmtleV90ZXh0KTsKCgkJ CQlzZXRfdHVwbGVmaWVsZF9pbnQyKCZ0dXBsZVtGS1NfS0VZX1NFUV0sIChJbnQyKSAoayArIDEp KTsKCgkJCQlNWUxPRygwLCAidXBkX3J1bGUgPSAlZCwgZGVsX3J1bGU9ICVkIiwgdXBkX3J1bGVf dHlwZSwgZGVsX3J1bGVfdHlwZSk7CgkJCQlzZXRfbnVsbGZpZWxkX2ludDIoJnR1cGxlW0ZLU19V UERBVEVfUlVMRV0sIHVwZF9ydWxlX3R5cGUpOwoJCQkJc2V0X251bGxmaWVsZF9pbnQyKCZ0dXBs ZVtGS1NfREVMRVRFX1JVTEVdLCBkZWxfcnVsZV90eXBlKTsKCgkJCQlzZXRfdHVwbGVmaWVsZF9z dHJpbmcoJnR1cGxlW0ZLU19GS19OQU1FXSwgY29uc3RybmFtZSk7CgkJCQlzZXRfdHVwbGVmaWVs ZF9zdHJpbmcoJnR1cGxlW0ZLU19QS19OQU1FXSwgcGtuYW1lKTsKCgkJCQlzZXRfdHVwbGVmaWVs ZF9zdHJpbmcoJnR1cGxlW0ZLU19UUklHR0VSX05BTUVdLCB0cmlnX2FyZ3MpOwoKCQkJCU1ZUFJJ TlRGKDAsICIgZGVmZXJfdHlwZSA9ICVkXG4iLCBkZWZlcl90eXBlKTsKCQkJCXNldF90dXBsZWZp ZWxkX2ludDIoJnR1cGxlW0ZLU19ERUZFUlJBQklMSVRZXSwgZGVmZXJfdHlwZSk7CgoJCQkJaWYg KHBrZXlfYWxsb2NlZCkKCQkJCQlmcmVlKHBrZXlfdGV4dCk7CgkJCQlwa2V5X2FsbG9jZWQgPSBG QUxTRTsKCQkJCWlmIChma2V5X2FsbG9jZWQpCgkJCQkJZnJlZShma2V5X3RleHQpOwoJCQkJZmtl eV9hbGxvY2VkID0gRkFMU0U7CgoJCQkJLyogbmV4dCBwcmltYXJ5L2ZvcmVpZ24ga2V5ICovCgkJ CQlmb3IgKGogPSAwOyBqIDwgMjsgaisrKQoJCQkJewoJCQkJCXBrZXlfcHRyICs9IHN0cmxlbihw a2V5X3B0cikgKyAxOwoJCQkJCWZrZXlfcHRyICs9IHN0cmxlbihma2V5X3B0cikgKyAxOwoJCQkJ fQoJCQl9CgkJCXJlc3VsdCA9IFBHQVBJX0ZldGNoKHRibF9zdG10KTsKCQl9Cgl9CgllbHNlCgl7 CgkJU0Nfc2V0X2Vycm9yKHN0bXQsIFNUTVRfSU5URVJOQUxfRVJST1IsICJObyB0YWJsZXMgc3Bl Y2lmaWVkIHRvIFBHQVBJX0ZvcmVpZ25LZXlzLiIsIGZ1bmMpOwoJCWdvdG8gY2xlYW51cDsKCX0K CXJldCA9IFNRTF9TVUNDRVNTOwoKY2xlYW51cDoKI3VuZGVmCXJldHVybgoJLyoKCSAqIGFsc28s IHRoaW5ncyBuZWVkIHRvIHRoaW5rIHRoYXQgdGhpcyBzdGF0ZW1lbnQgaXMgZmluaXNoZWQgc28g dGhlCgkgKiByZXN1bHRzIGNhbiBiZSByZXRyaWV2ZWQuCgkgKi8KCXN0bXQtPnN0YXR1cyA9IFNU TVRfRklOSVNIRUQ7CgoJaWYgKCFTUUxfU1VDQ0VFREVEKHJldCkgJiYgMCA+PSBTQ19nZXRfZXJy b3JudW1iZXIoc3RtdCkpCgkJU0NfZXJyb3JfY29weShzdG10LCB0Ymxfc3RtdCwgVFJVRSk7CgoJ aWYgKCFQUUV4cEJ1ZmZlckRhdGFCcm9rZW4odGFibGVzX3F1ZXJ5KSkKCQl0ZXJtUFFFeHBCdWZm ZXIoJnRhYmxlc19xdWVyeSk7CglpZiAocGtleV9hbGxvY2VkKQoJCWZyZWUocGtleV90ZXh0KTsK CWlmIChma2V5X2FsbG9jZWQpCgkJZnJlZShma2V5X3RleHQpOwoJaWYgKHBrX3RhYmxlX25lZWRl ZCkKCQlmcmVlKHBrX3RhYmxlX25lZWRlZCk7CglpZiAoZXNjUGtUYWJsZU5hbWUpCgkJZnJlZShl c2NQa1RhYmxlTmFtZSk7CglpZiAoZmtfdGFibGVfbmVlZGVkKQoJCWZyZWUoZmtfdGFibGVfbmVl ZGVkKTsKCWlmIChlc2NGa1RhYmxlTmFtZSkKCQlmcmVlKGVzY0ZrVGFibGVOYW1lKTsKCglpZiAo dGJsX3N0bXQpCgkJUEdBUElfRnJlZVN0bXQodGJsX3N0bXQsIFNRTF9EUk9QKTsKCWlmIChocGtl eV9zdG10KQoJCVBHQVBJX0ZyZWVTdG10KGhwa2V5X3N0bXQsIFNRTF9EUk9QKTsKCgkvKiBzZXQg dXAgdGhlIGN1cnJlbnQgdHVwbGUgcG9pbnRlciBmb3IgU1FMRmV0Y2ggKi8KCXN0bXQtPmN1cnJU dXBsZSA9IC0xOwoJU0Nfc2V0X3Jvd3NldF9zdGFydChzdG10LCAtMSwgRkFMU0UpOwoJU0Nfc2V0 X2N1cnJlbnRfY29sKHN0bXQsIC0xKTsKCglNWUxPRygwLCAibGVhdmluZyBzdG10PSVwLCByZXQ9 JWRcbiIsIHN0bXQsIHJldCk7CglyZXR1cm4gcmV0Owp9CgpSRVRDT0RFCQlTUUxfQVBJClBHQVBJ X0ZvcmVpZ25LZXlzKEhTVE1UIGhzdG10LAoJCQkJICBjb25zdCBTUUxDSEFSICogc3pQa1RhYmxl UXVhbGlmaWVyLCAvKiBPQSBYKi8KCQkJCSAgU1FMU01BTExJTlQgY2JQa1RhYmxlUXVhbGlmaWVy LAoJCQkJICBjb25zdCBTUUxDSEFSICogc3pQa1RhYmxlT3duZXIsIC8qIE9BIEUqLwoJCQkJICBT UUxTTUFMTElOVCBjYlBrVGFibGVPd25lciwKCQkJCSAgY29uc3QgU1FMQ0hBUiAqIHN6UGtUYWJs ZU5hbWUsIC8qIE9BKFIpIEUqLwoJCQkJICBTUUxTTUFMTElOVCBjYlBrVGFibGVOYW1lLAoJCQkJ ICBjb25zdCBTUUxDSEFSICogc3pGa1RhYmxlUXVhbGlmaWVyLCAvKiBPQSBYKi8KCQkJCSAgU1FM U01BTExJTlQgY2JGa1RhYmxlUXVhbGlmaWVyLAoJCQkJICBjb25zdCBTUUxDSEFSICogc3pGa1Rh YmxlT3duZXIsIC8qIE9BIEUqLwoJCQkJICBTUUxTTUFMTElOVCBjYkZrVGFibGVPd25lciwKCQkJ CSAgY29uc3QgU1FMQ0hBUiAqIHN6RmtUYWJsZU5hbWUsIC8qIE9BKFIpIEUqLwoJCQkJICBTUUxT TUFMTElOVCBjYkZrVGFibGVOYW1lKQp7CglDb25uZWN0aW9uQ2xhc3MJKmNvbm4gPSBTQ19nZXRf Y29ubigoKFN0YXRlbWVudENsYXNzICopIGhzdG10KSk7CglpZiAoUEdfVkVSU0lPTl9HRShjb25u LCA4LjEpKQoJCXJldHVybiBQR0FQSV9Gb3JlaWduS2V5c19uZXcoaHN0bXQsCgkJCQlzelBrVGFi bGVRdWFsaWZpZXIsIGNiUGtUYWJsZVF1YWxpZmllciwKCQkJCXN6UGtUYWJsZU93bmVyLCBjYlBr VGFibGVPd25lciwKCQkJCXN6UGtUYWJsZU5hbWUsIGNiUGtUYWJsZU5hbWUsCgkJCQlzekZrVGFi bGVRdWFsaWZpZXIsIGNiRmtUYWJsZVF1YWxpZmllciwKCQkJCXN6RmtUYWJsZU93bmVyLCBjYkZr VGFibGVPd25lciwKCQkJCXN6RmtUYWJsZU5hbWUsIGNiRmtUYWJsZU5hbWUpOwoJZWxzZQoJCXJl dHVybiBQR0FQSV9Gb3JlaWduS2V5c19vbGQoaHN0bXQsCgkJCQlzelBrVGFibGVRdWFsaWZpZXIs IGNiUGtUYWJsZVF1YWxpZmllciwKCQkJCXN6UGtUYWJsZU93bmVyLCBjYlBrVGFibGVPd25lciwK CQkJCXN6UGtUYWJsZU5hbWUsIGNiUGtUYWJsZU5hbWUsCgkJCQlzekZrVGFibGVRdWFsaWZpZXIs IGNiRmtUYWJsZVF1YWxpZmllciwKCQkJCXN6RmtUYWJsZU93bmVyLCBjYkZrVGFibGVPd25lciwK CQkJCXN6RmtUYWJsZU5hbWUsIGNiRmtUYWJsZU5hbWUpOwp9CgoKI2RlZmluZQlQUk9SRVRfQ09V TlQKI2RlZmluZQlESVNQTEFZX0FSR05BTUUKc3RhdGljIEJPT0wKaGFzX291dHBhcmFtKGNvbnN0 IGNoYXIgKnByb2FyZ21vZGVzKQp7Cgljb25zdCBjaGFyICpwdHI7CgoJaWYgKCFwcm9hcmdtb2Rl cykKCQlyZXR1cm4gRkFMU0U7Cglmb3IgKHB0ciA9IHByb2FyZ21vZGVzOyAqcHRyOyBwdHIrKykK CXsKCQlzd2l0Y2ggKCpwdHIpCgkJewoJCQljYXNlICdvJzoKCQkJY2FzZSAnYic6CgkJCWNhc2Ug J3QnOgoJCQkJcmV0dXJuIFRSVUU7CgkJfQoJfQoKCXJldHVybiBGQUxTRTsKfQoKUkVUQ09ERQkJ U1FMX0FQSQpQR0FQSV9Qcm9jZWR1cmVDb2x1bW5zKEhTVE1UIGhzdG10LAoJCQkJCSAgIGNvbnN0 IFNRTENIQVIgKiBzelByb2NRdWFsaWZpZXIsIC8qIE9BIFgqLwoJCQkJCSAgIFNRTFNNQUxMSU5U IGNiUHJvY1F1YWxpZmllciwKCQkJCQkgICBjb25zdCBTUUxDSEFSICogc3pQcm9jT3duZXIsIC8q IFBWIEUqLwoJCQkJCSAgIFNRTFNNQUxMSU5UIGNiUHJvY093bmVyLAoJCQkJCSAgIGNvbnN0IFNR TENIQVIgKiBzelByb2NOYW1lLCAvKiBQViBFKi8KCQkJCQkgICBTUUxTTUFMTElOVCBjYlByb2NO YW1lLAoJCQkJCSAgIGNvbnN0IFNRTENIQVIgKiBzekNvbHVtbk5hbWUsIC8qIFBWIFgqLwoJCQkJ CSAgIFNRTFNNQUxMSU5UIGNiQ29sdW1uTmFtZSwKCQkJCQkgICBVV09SRCBmbGFnKQp7CglDU1RS IGZ1bmMgPSAiUEdBUElfUHJvY2VkdXJlQ29sdW1ucyI7CglTdGF0ZW1lbnRDbGFzcwkqc3RtdCA9 IChTdGF0ZW1lbnRDbGFzcyAqKSBoc3RtdDsKCUNvbm5lY3Rpb25DbGFzcyAqY29ubiA9IFNDX2dl dF9jb25uKHN0bXQpOwoJUFFFeHBCdWZmZXJEYXRhCQlwcm9jX3F1ZXJ5ID0gezB9OwoJSW50MgkJ cmVzdWx0X2NvbHM7CglUdXBsZUZpZWxkCSp0dXBsZTsKCWNoYXIJCSpzY2hlbWFfbmFtZSwgKnBy b2NuYW1lOwoJY2hhcgkJKmVzY1NjaGVtYU5hbWUgPSBOVUxMLCAqZXNjUHJvY05hbWUgPSBOVUxM OwoJY2hhcgkJKnBhcmFtcywgKnByb2FyZ25hbWVzOwoJY2hhcgkJKnByb2FyZ21vZGVzOwoJY2hh cgkJKmRlbGltID0gTlVMTDsKCWNoYXIJCSphdHR0eXBpZCwgKmF0dG5hbWUsICpjb2x1bW5fbmFt ZTsKCVFSZXN1bHRDbGFzcyAqcmVzLCAqdHJlcyA9IE5VTEw7CglTUUxMRU4JCXRjb3VudDsKCU9J RAkJCXBndHlwZTsKCUludDQJCXBhcmFtY291bnQsIGNvbHVtbl9zaXplLCBpLCBqOwoJUkVUQ09E RQkJcmV0ID0gU1FMX0VSUk9SLCByZXN1bHQ7CglCT09MCQlzZWFyY2hfcGF0dGVybiwgYlJldHNl dCwgb3V0cGFyYV9leGlzdDsKCWNvbnN0IGNoYXIJKmxpa2Vfb3JfZXEsICpvcF9zdHJpbmcsICpy ZXRzZXQ7CglpbnQJCXJldF9jb2wgPSAtMSwgZXh0X3BvcyA9IC0xLCBwb2lkX3BvcyA9IC0xLCBh dHRpZF9wb3MgPSAtMSwgYXR0bmFtZV9wb3MgPSAtMTsKCVVJbnQ0CQlwb2lkID0gMCwgbmV3cG9p ZDsKCglNWUxPRygwLCAiZW50ZXJpbmcuLi5cbiIpOwoKCWlmIChyZXN1bHQgPSBTQ19pbml0aWFs aXplX2FuZF9yZWN5Y2xlKHN0bXQpLCBTUUxfU1VDQ0VTUyAhPSByZXN1bHQpCgkJcmV0dXJuIHJl c3VsdDsKCXNlYXJjaF9wYXR0ZXJuID0gKDAgPT0gKGZsYWcgJiBQT0RCQ19OT1RfU0VBUkNIX1BB VFRFUk4pKTsKCWlmIChzZWFyY2hfcGF0dGVybikKCXsKCQlsaWtlX29yX2VxID0gbGlrZW9wOwoJ CWVzY1NjaGVtYU5hbWUgPSBhZGp1c3RMaWtlUGF0dGVybihzelByb2NPd25lciwgY2JQcm9jT3du ZXIsIGNvbm4pOwoJCWVzY1Byb2NOYW1lID0gYWRqdXN0TGlrZVBhdHRlcm4oc3pQcm9jTmFtZSwg Y2JQcm9jTmFtZSwgY29ubik7Cgl9CgllbHNlCgl7CgkJbGlrZV9vcl9lcSA9IGVxb3A7CgkJZXNj U2NoZW1hTmFtZSA9IHNpbXBsZUNhdGFsb2dFc2NhcGUoc3pQcm9jT3duZXIsIGNiUHJvY093bmVy LCBjb25uKTsKCQllc2NQcm9jTmFtZSA9IHNpbXBsZUNhdGFsb2dFc2NhcGUoc3pQcm9jTmFtZSwg Y2JQcm9jTmFtZSwgY29ubik7Cgl9CglvcF9zdHJpbmcgPSBnZW5fb3Blc3RyKGxpa2Vfb3JfZXEs IGNvbm4pOwoJaW5pdFBRRXhwQnVmZmVyKCZwcm9jX3F1ZXJ5KTsKI2RlZmluZQlyZXR1cm4JRE9O VF9DQUxMX1JFVFVSTl9GUk9NX0hFUkU/Pz8KCWFwcGVuZFBRRXhwQnVmZmVyU3RyKCZwcm9jX3F1 ZXJ5LCAic2VsZWN0IHByb25hbWUsIHByb3JldHNldCwgcHJvcmV0dHlwZSwgIgoJCQkicHJvbmFy Z3MsIHByb2FyZ3R5cGVzLCBuc3BuYW1lLCBwLm9pZCIpOwoJcmV0X2NvbCA9IGV4dF9wb3MgPSA3 OwoJcG9pZF9wb3MgPSA2OwojaWZkZWYJUFJPUkVUX0NPVU5UCglhcHBlbmRQUUV4cEJ1ZmZlclN0 cigmcHJvY19xdWVyeSwgIiwgYXR0dHlwaWQsIGF0dG5hbWUiKTsKCWF0dGlkX3BvcyA9IGV4dF9w b3M7CglhdHRuYW1lX3BvcyA9IGV4dF9wb3MgKyAxOwoJcmV0X2NvbCArPSAyOwoJZXh0X3BvcyA9 IHJldF9jb2w7CiNlbmRpZiAvKiBQUk9SRVRfQ09VTlQgKi8KCWlmIChQR19WRVJTSU9OX0dFKGNv bm4sIDguMCkpCgl7CgkJYXBwZW5kUFFFeHBCdWZmZXJTdHIoJnByb2NfcXVlcnksICIsIHByb2Fy Z25hbWVzIik7CgkJcmV0X2NvbCsrOwoJfQoJaWYgKFBHX1ZFUlNJT05fR0UoY29ubiwgOC4xKSkK CXsKCQlhcHBlbmRQUUV4cEJ1ZmZlclN0cigmcHJvY19xdWVyeSwgIiwgcHJvYXJnbW9kZXMsIHBy b2FsbGFyZ3R5cGVzIik7CgkJcmV0X2NvbCArPSAyOwoJfQojaWZkZWYJUFJPUkVUX0NPVU5UCglh cHBlbmRQUUV4cEJ1ZmZlclN0cigmcHJvY19xdWVyeSwgIiBmcm9tICgocGdfY2F0YWxvZy5wZ19u YW1lc3BhY2UgbiBpbm5lciBqb2luIgoJCQkgICAiIHBnX2NhdGFsb2cucGdfcHJvYyBwIG9uIHAu cHJvbmFtZXNwYWNlID0gbi5vaWQpIgoJCSIgaW5uZXIgam9pbiBwZ190eXBlIHQgb24gdC5vaWQg PSBwLnByb3JldHR5cGUpIgoJCSIgbGVmdCBvdXRlciBqb2luIHBnX2F0dHJpYnV0ZSBhIG9uIGEu YXR0cmVsaWQgPSB0LnR5cHJlbGlkICIKCQkiIGFuZCBhdHRudW0gPiAwIGFuZCBub3QgYXR0aXNk cm9wcGVkIHdoZXJlIik7CiNlbHNlCglhcHBlbmRQUUV4cEJ1ZmZlclN0cigmcHJvY19xdWVyeSwg IiBmcm9tIHBnX2NhdGFsb2cucGdfbmFtZXNwYWNlIG4sIgoJCQkgICAiIHBnX2NhdGFsb2cucGdf cHJvYyBwIHdoZXJlIik7CgkJCSAgICIgcC5wcm9uYW1lc3BhY2UgPSBuLm9pZCAgYW5kIgoJCQkg ICAiIChub3QgcHJvcmV0c2V0KSBhbmQiKTsKI2VuZGlmIC8qIFBST1JFVF9DT1VOVCAqLwoJYXBw ZW5kUFFFeHBCdWZmZXIoJnByb2NfcXVlcnksCgkJCQkgIiBoYXNfZnVuY3Rpb25fcHJpdmlsZWdl KHAub2lkLCAnRVhFQ1VURScpIik7CglpZiAoSVNfVkFMSURfTkFNRShlc2NTY2hlbWFOYW1lKSkK CQlhcHBlbmRQUUV4cEJ1ZmZlcigmcHJvY19xdWVyeSwKCQkJCSAiIGFuZCBuc3BuYW1lICVzJyVz JyIsCgkJCQkgb3Bfc3RyaW5nLCBlc2NTY2hlbWFOYW1lKTsKCWlmIChlc2NQcm9jTmFtZSkKCQlh cHBlbmRQUUV4cEJ1ZmZlcigmcHJvY19xdWVyeSwKCQkJCQkgIiBhbmQgcHJvbmFtZSAlcyclcyci LCBvcF9zdHJpbmcsIGVzY1Byb2NOYW1lKTsKCWFwcGVuZFBRRXhwQnVmZmVyKCZwcm9jX3F1ZXJ5 LAoJCQkJICIgb3JkZXIgYnkgbnNwbmFtZSwgcHJvbmFtZSwgcC5vaWQsIGF0dG51bSIpOwoKCWlm IChlc2NTY2hlbWFOYW1lKQoJCWZyZWUoZXNjU2NoZW1hTmFtZSk7CglpZiAoZXNjUHJvY05hbWUp CgkJZnJlZShlc2NQcm9jTmFtZSk7CgoJaWYgKFBRRXhwQnVmZmVyRGF0YUJyb2tlbihwcm9jX3F1 ZXJ5KSkKCXsKCQlTQ19zZXRfZXJyb3Ioc3RtdCwgU1RNVF9OT19NRU1PUllfRVJST1IsICJPdXQg b2YgbWVtb3J5IGluIFBHQVBJX1Byb2NlZHVyZUNvbHVtbnMoKSIsIGZ1bmMpOwoJCWdvdG8gY2xl YW51cDsKCX0KCXRyZXMgPSBDQ19zZW5kX3F1ZXJ5KGNvbm4sIHByb2NfcXVlcnkuZGF0YSwgTlVM TCwgUkVBRF9PTkxZX1FVRVJZLCBzdG10KTsKCWlmICghUVJfY29tbWFuZF9tYXliZV9zdWNjZXNz ZnVsKHRyZXMpKQoJewoJCVNDX3NldF9lcnJvcihzdG10LCBTVE1UX0VYRUNfRVJST1IsICJQR0FQ SV9Qcm9jZWR1cmVDb2x1bW5zIHF1ZXJ5IGVycm9yIiwgZnVuYyk7CgkJUVJfRGVzdHJ1Y3Rvcih0 cmVzKTsKCQlnb3RvIGNsZWFudXA7Cgl9CgoJaWYgKHJlcyA9IFFSX0NvbnN0cnVjdG9yKCksICFy ZXMpCgl7CgkJU0Nfc2V0X2Vycm9yKHN0bXQsIFNUTVRfTk9fTUVNT1JZX0VSUk9SLCAiQ291bGRu J3QgYWxsb2NhdGUgbWVtb3J5IGZvciBQR0FQSV9Qcm9jZWR1cmVDb2x1bW5zIHJlc3VsdC4iLCBm dW5jKTsKCQlnb3RvIGNsZWFudXA7Cgl9CglTQ19zZXRfUmVzdWx0KHN0bXQsIHJlcyk7CgoJLyoK CSAqIHRoZSBiaW5kaW5nIHN0cnVjdHVyZSBmb3IgYSBzdGF0ZW1lbnQgaXMgbm90IHNldCB1cCB1 bnRpbAoJICogYSBzdGF0ZW1lbnQgaXMgYWN0dWFsbHkgZXhlY3V0ZWQsIHNvIHdlJ2xsIGhhdmUg dG8gZG8gdGhpcwoJICogb3Vyc2VsdmVzLgoJICovCglyZXN1bHRfY29scyA9IE5VTV9PRl9QUk9D T0xTX0ZJRUxEUzsKCWV4dGVuZF9jb2x1bW5fYmluZGluZ3MoU0NfZ2V0X0FSREYoc3RtdCksIHJl c3VsdF9jb2xzKTsKCglzdG10LT5jYXRhbG9nX3Jlc3VsdCA9IFRSVUU7CgkvKiBzZXQgdGhlIGZp ZWxkIG5hbWVzICovCglRUl9zZXRfbnVtX2ZpZWxkcyhyZXMsIHJlc3VsdF9jb2xzKTsKCVFSX3Nl dF9maWVsZF9pbmZvX3YocmVzLCBQUk9DT0xTX1BST0NFRFVSRV9DQVQsICJQUk9DRURVUkVfQ0FU IiwgUEdfVFlQRV9WQVJDSEFSLCBNQVhfSU5GT19TVFJJTkcpOwoJUVJfc2V0X2ZpZWxkX2luZm9f dihyZXMsIFBST0NPTFNfUFJPQ0VEVVJFX1NDSEVNLCAiUFJPQ0VEVVJfU0NIRU0iLCBQR19UWVBF X1ZBUkNIQVIsIE1BWF9JTkZPX1NUUklORyk7CglRUl9zZXRfZmllbGRfaW5mb192KHJlcywgUFJP Q09MU19QUk9DRURVUkVfTkFNRSwgIlBST0NFRFVSRV9OQU1FIiwgUEdfVFlQRV9WQVJDSEFSLCBN QVhfSU5GT19TVFJJTkcpOwoJUVJfc2V0X2ZpZWxkX2luZm9fdihyZXMsIFBST0NPTFNfQ09MVU1O X05BTUUsICJDT0xVTU5fTkFNRSIsIFBHX1RZUEVfVkFSQ0hBUiwgTUFYX0lORk9fU1RSSU5HKTsK CVFSX3NldF9maWVsZF9pbmZvX3YocmVzLCBQUk9DT0xTX0NPTFVNTl9UWVBFLCAiQ09MVU1OX1RZ UEUiLCBQR19UWVBFX0lOVDIsIDIpOwoJUVJfc2V0X2ZpZWxkX2luZm9fdihyZXMsIFBST0NPTFNf REFUQV9UWVBFLCAiREFUQV9UWVBFIiwgUEdfVFlQRV9JTlQyLCAyKTsKCVFSX3NldF9maWVsZF9p bmZvX3YocmVzLCBQUk9DT0xTX1RZUEVfTkFNRSwgIlRZUEVfTkFNRSIsIFBHX1RZUEVfVkFSQ0hB UiwgTUFYX0lORk9fU1RSSU5HKTsKCVFSX3NldF9maWVsZF9pbmZvX3YocmVzLCBQUk9DT0xTX0NP TFVNTl9TSVpFLCAiQ09MVU1OX1NJWkUiLCBQR19UWVBFX0lOVDQsIDQpOwoJUVJfc2V0X2ZpZWxk X2luZm9fdihyZXMsIFBST0NPTFNfQlVGRkVSX0xFTkdUSCwgIkJVRkZFUl9MRU5HVEgiLCBQR19U WVBFX0lOVDQsIDQpOwoJUVJfc2V0X2ZpZWxkX2luZm9fdihyZXMsIFBST0NPTFNfREVDSU1BTF9E SUdJVFMsICJERUNJTUFMX0RJR0lUUyIsIFBHX1RZUEVfSU5UMiwgMik7CglRUl9zZXRfZmllbGRf aW5mb192KHJlcywgUFJPQ09MU19OVU1fUFJFQ19SQURJWCwgIk5VTV9QUkVDX1JBRElYIiwgUEdf VFlQRV9JTlQyLCAyKTsKCVFSX3NldF9maWVsZF9pbmZvX3YocmVzLCBQUk9DT0xTX05VTExBQkxF LCAiTlVMTEFCTEUiLCBQR19UWVBFX0lOVDIsIDIpOwoJUVJfc2V0X2ZpZWxkX2luZm9fdihyZXMs IFBST0NPTFNfUkVNQVJLUywgIlJFTUFSS1MiLCBQR19UWVBFX1ZBUkNIQVIsIE1BWF9JTkZPX1NU UklORyk7CglRUl9zZXRfZmllbGRfaW5mb192KHJlcywgUFJPQ09MU19DT0xVTU5fREVGLCAiQ09M VU1OX0RFRiIsIFBHX1RZUEVfVkFSQ0hBUiwgTUFYX0lORk9fU1RSSU5HKTsKCVFSX3NldF9maWVs ZF9pbmZvX3YocmVzLCBQUk9DT0xTX1NRTF9EQVRBX1RZUEUsICJTUUxfREFUQV9UWVBFIiwgUEdf VFlQRV9JTlQyLCAyKTsKCVFSX3NldF9maWVsZF9pbmZvX3YocmVzLCBQUk9DT0xTX1NRTF9EQVRF VElNRV9TVUIsICJTUUxfREFURVRJTUVfU1VCIiwgUEdfVFlQRV9JTlQyLCAyKTsKCVFSX3NldF9m aWVsZF9pbmZvX3YocmVzLCBQUk9DT0xTX0NIQVJfT0NURVRfTEVOR1RILCAiQ0hBUl9PQ1RFVF9M RU5HVEgiLCBQR19UWVBFX0lOVDQsIDQpOwoJUVJfc2V0X2ZpZWxkX2luZm9fdihyZXMsIFBST0NP TFNfT1JESU5BTF9QT1NJVElPTiwgIk9SRElOQUxfUE9TSVRJT04iLCBQR19UWVBFX0lOVDQsIDQp OwoJUVJfc2V0X2ZpZWxkX2luZm9fdihyZXMsIFBST0NPTFNfSVNfTlVMTEFCTEUsICJJU19OVUxM QUJMRSIsIFBHX1RZUEVfVkFSQ0hBUiwgTUFYX0lORk9fU1RSSU5HKTsKCgljb2x1bW5fbmFtZSA9 IG1ha2Vfc3RyaW5nKHN6Q29sdW1uTmFtZSwgY2JDb2x1bW5OYW1lLCBOVUxMLCAwKTsKCWlmIChj b2x1bW5fbmFtZSkgLyogY29sdW1uX25hbWUgaXMgdW5hdmFpbGFibGUgbm93ICovCgl7CgkJdGNv dW50ID0gMDsKCQlmcmVlKGNvbHVtbl9uYW1lKTsKCX0KCWVsc2UKCQl0Y291bnQgPSBRUl9nZXRf bnVtX3RvdGFsX3R1cGxlcyh0cmVzKTsKCWZvciAoaSA9IDAsIHBvaWQgPSAwOyBpIDwgdGNvdW50 OyBpKyspCgl7CgkJc2NoZW1hX25hbWUgPSBHRVRfU0NIRU1BX05BTUUoUVJfZ2V0X3ZhbHVlX2Jh Y2tlbmRfdGV4dCh0cmVzLCBpLCA1KSk7CgkJcHJvY25hbWUgPSBRUl9nZXRfdmFsdWVfYmFja2Vu ZF90ZXh0KHRyZXMsIGksIDApOwoJCXJldHNldCA9IFFSX2dldF92YWx1ZV9iYWNrZW5kX3RleHQo dHJlcywgaSwgMSk7CgkJcGd0eXBlID0gUVJfZ2V0X3ZhbHVlX2JhY2tlbmRfaW50KHRyZXMsIGks IDIsIE5VTEwpOwoJCWJSZXRzZXQgPSByZXRzZXQgJiYgKHJldHNldFswXSA9PSAndCcgfHwgcmV0 c2V0WzBdID09ICd5Jyk7CgkJb3V0cGFyYV9leGlzdCA9IEZBTFNFOwoJCW5ld3BvaWQgPSAwOwoJ CWlmIChwb2lkX3BvcyA+PSAwKQoJCQluZXdwb2lkID0gUVJfZ2V0X3ZhbHVlX2JhY2tlbmRfaW50 KHRyZXMsIGksIHBvaWRfcG9zLCBOVUxMKTsKTVlMT0coMCwgIm5ld3BvaWQ9JWRcbiIsIG5ld3Bv aWQpOwoJCWF0dHR5cGlkID0gTlVMTDsKCQlpZiAoYXR0aWRfcG9zID49IDApCgkJewoJCQlhdHR0 eXBpZCA9IFFSX2dldF92YWx1ZV9iYWNrZW5kX3RleHQodHJlcywgaSwgYXR0aWRfcG9zKTsKTVlM T0coMCwgImF0dHR5cGlkPSVzXG4iLCBhdHR0eXBpZCA/IGF0dHR5cGlkIDogIihudWxsKSIpOwoJ CX0KCQlpZiAocG9pZCA9PSAwIHx8IG5ld3BvaWQgIT0gcG9pZCkKCQl7CgkJCXBvaWQgPSBuZXdw b2lkOwoJCQlwcm9hcmdtb2RlcyA9IE5VTEw7CgkJCXByb2FyZ25hbWVzID0gTlVMTDsKCQkJaWYg KGV4dF9wb3MgPj0wKQoJCQl7CiNpZmRlZglESVNQTEFZX0FSR05BTUUgLyogISEgbmFtZWQgcGFy YW1ldGVyIGlzIHVuYXZhaWxhYmxlICEhICovCgkJCQlpZiAoUEdfVkVSU0lPTl9HRShjb25uLCA4 LjApKQoJCQkJCXByb2FyZ25hbWVzID0gUVJfZ2V0X3ZhbHVlX2JhY2tlbmRfdGV4dCh0cmVzLCBp LCBleHRfcG9zKTsKI2VuZGlmIC8qIERJU1BMQVlfQVJHTkFNRSAqLwoJCQkJaWYgKFBHX1ZFUlNJ T05fR0UoY29ubiwgOC4xKSkKCQkJCQlwcm9hcmdtb2RlcyA9IFFSX2dldF92YWx1ZV9iYWNrZW5k X3RleHQodHJlcywgaSwgZXh0X3BvcyArIDEpOwoJCQl9CgkJCW91dHBhcmFfZXhpc3QgPSBoYXNf b3V0cGFyYW0ocHJvYXJnbW9kZXMpOwoJCQkvKiBSRVRVUk5fVkFMVUUgaW5mbyAqLwoJCQlpZiAo MCAhPSBwZ3R5cGUgJiYgUEdfVFlQRV9WT0lEICE9IHBndHlwZSAmJiAhYlJldHNldCAmJiAhYXR0 dHlwaWQgJiYgIW91dHBhcmFfZXhpc3QpCgkJCXsKCQkJCXR1cGxlID0gUVJfQWRkTmV3KHJlcyk7 CgkJCQlzZXRfdHVwbGVmaWVsZF9zdHJpbmcoJnR1cGxlW1BST0NPTFNfUFJPQ0VEVVJFX0NBVF0s IEN1cnJDYXQoY29ubikpOwoJCQkJc2V0X251bGxmaWVsZF9zdHJpbmcoJnR1cGxlW1BST0NPTFNf UFJPQ0VEVVJFX1NDSEVNXSwgc2NoZW1hX25hbWUpOwoJCQkJc2V0X3R1cGxlZmllbGRfc3RyaW5n KCZ0dXBsZVtQUk9DT0xTX1BST0NFRFVSRV9OQU1FXSwgcHJvY25hbWUpOwoJCQkJc2V0X3R1cGxl ZmllbGRfc3RyaW5nKCZ0dXBsZVtQUk9DT0xTX0NPTFVNTl9OQU1FXSwgTlVMTF9TVFJJTkcpOwoJ CQkJc2V0X3R1cGxlZmllbGRfaW50MigmdHVwbGVbUFJPQ09MU19DT0xVTU5fVFlQRV0sIFNRTF9S RVRVUk5fVkFMVUUpOwoJCQkJc2V0X3R1cGxlZmllbGRfaW50MigmdHVwbGVbUFJPQ09MU19EQVRB X1RZUEVdLCBQR1RZUEVfVE9fQ09OQ0lTRV9UWVBFKGNvbm4sIHBndHlwZSkpOwoJCQkJc2V0X3R1 cGxlZmllbGRfc3RyaW5nKCZ0dXBsZVtQUk9DT0xTX1RZUEVfTkFNRV0sIFBHVFlQRV9UT19OQU1F KGNvbm4sIHBndHlwZSwgRkFMU0UpKTsKCQkJCWNvbHVtbl9zaXplID0gUEdUWVBFX0NPTFVNTl9T SVpFKGNvbm4sIHBndHlwZSk7CgkJCQlzZXRfbnVsbGZpZWxkX2ludDQoJnR1cGxlW1BST0NPTFNf Q09MVU1OX1NJWkVdLCBjb2x1bW5fc2l6ZSk7CgkJCQlzZXRfdHVwbGVmaWVsZF9pbnQ0KCZ0dXBs ZVtQUk9DT0xTX0JVRkZFUl9MRU5HVEhdLCBQR1RZUEVfQlVGRkVSX0xFTkdUSChjb25uLCBwZ3R5 cGUpKTsKCQkJCXNldF9udWxsZmllbGRfaW50MigmdHVwbGVbUFJPQ09MU19ERUNJTUFMX0RJR0lU U10sIFBHVFlQRV9ERUNJTUFMX0RJR0lUUyhjb25uLCBwZ3R5cGUpKTsKCQkJCXNldF9udWxsZmll bGRfaW50MigmdHVwbGVbUFJPQ09MU19OVU1fUFJFQ19SQURJWF0sIHBndHlwZV9yYWRpeChjb25u LCBwZ3R5cGUpKTsKCQkJCXNldF90dXBsZWZpZWxkX2ludDIoJnR1cGxlW1BST0NPTFNfTlVMTEFC TEVdLCBTUUxfTlVMTEFCTEVfVU5LTk9XTik7CgkJCQlzZXRfdHVwbGVmaWVsZF9udWxsKCZ0dXBs ZVtQUk9DT0xTX1JFTUFSS1NdKTsKCQkJCXNldF90dXBsZWZpZWxkX251bGwoJnR1cGxlW1BST0NP TFNfQ09MVU1OX0RFRl0pOwoJCQkJc2V0X3R1cGxlZmllbGRfaW50MigmdHVwbGVbUFJPQ09MU19T UUxfREFUQV9UWVBFXSwgUEdUWVBFX1RPX1NRTERFU0NUWVBFKGNvbm4sIHBndHlwZSkpOwoJCQkJ c2V0X251bGxmaWVsZF9pbnQyKCZ0dXBsZVtQUk9DT0xTX1NRTF9EQVRFVElNRV9TVUJdLCBQR1RZ UEVfVE9fREFURVRJTUVfU1VCKGNvbm4sIHBndHlwZSkpOwoJCQkJc2V0X251bGxmaWVsZF9pbnQ0 KCZ0dXBsZVtQUk9DT0xTX0NIQVJfT0NURVRfTEVOR1RIXSwgUEdUWVBFX1RSQU5TRkVSX09DVEVU X0xFTkdUSChjb25uLCBwZ3R5cGUpKTsKCQkJCXNldF90dXBsZWZpZWxkX2ludDQoJnR1cGxlW1BS T0NPTFNfT1JESU5BTF9QT1NJVElPTl0sIDApOwoJCQkJc2V0X3R1cGxlZmllbGRfc3RyaW5nKCZ0 dXBsZVtQUk9DT0xTX0lTX05VTExBQkxFXSwgTlVMTF9TVFJJTkcpOwoJCQl9CgkJCXBhcmFtY291 bnQgPSAwOwoJCQlwYXJhbXMgPSBOVUxMOwoJCQlpZiAocHJvYXJnbW9kZXMpCgkJCXsKCQkJCWNv bnN0IGNoYXIgKnA7CgoJCQkJZm9yIChwID0gcHJvYXJnbW9kZXM7ICpwOyBwKyspCgkJCQl7CgkJ CQkJaWYgKCcsJyA9PSAoKnApKQoJCQkJCQlwYXJhbWNvdW50Kys7CgkJCQl9CgkJCQlwYXJhbWNv dW50Kys7CgkJCQlwYXJhbXMgPSBRUl9nZXRfdmFsdWVfYmFja2VuZF90ZXh0KHRyZXMsIGksIGV4 dF9wb3MgKyAyKTsgLy8gcHJvYWxsYXJndHlwZXMgLSBvaWRhcnJheQoJCQkJaWYgKCd7JyA9PSAq cHJvYXJnbW9kZXMpCgkJCQkJcHJvYXJnbW9kZXMrKzsKCQkJfQoJCQlpZiAoMCA9PSBwYXJhbWNv dW50KQoJCQkJcGFyYW1jb3VudCA9IFFSX2dldF92YWx1ZV9iYWNrZW5kX2ludCh0cmVzLCBpLCAz LCBOVUxMKTsKCQkJaWYgKDAgPCBwYXJhbWNvdW50ICYmIE5VTEwgPT0gcGFyYW1zKQoJCQkJcGFy YW1zID0gUVJfZ2V0X3ZhbHVlX2JhY2tlbmRfdGV4dCh0cmVzLCBpLCA0KTsgLy8gcHJvYXJndHlw ZXMgLSBvaWR2ZWN0b3IKCQkJaWYgKHByb2FyZ25hbWVzKQoJCQl7CgkJCQlpZiAoJ3snID09ICpw cm9hcmduYW1lcykKCQkJCQlwcm9hcmduYW1lcysrOwoJCQl9CgkJCWlmIChwYXJhbXMgJiYgJ3sn ID09ICpwYXJhbXMpCgkJCQlwYXJhbXMrKzsKCQkJLyogUEFSQU1FVEVSUyBpbmZvICovCgkJCWZv ciAoaiA9IDA7IGogPCBwYXJhbWNvdW50OyBqKyspCgkJCXsKCQkJCS8qIFBHIHR5cGUgb2YgcGFy YW1ldGVycyAqLwoJCQkJcGd0eXBlID0gMDsKCQkJCWlmIChwYXJhbXMpCgkJCQl7CgkJCQkJd2hp bGUgKGlzc3BhY2UoKHVuc2lnbmVkIGNoYXIpICpwYXJhbXMpIHx8ICcsJyA9PSAqcGFyYW1zKQoJ CQkJCQlwYXJhbXMrKzsKCQkJCQlpZiAoJ1wwJyA9PSAqcGFyYW1zIHx8ICd9JyA9PSAqcGFyYW1z KQoJCQkJCQlwYXJhbXMgPSBOVUxMOwoJCQkJCWVsc2UKCQkJCQl7CgkJCQkJCXNzY2FuZihwYXJh bXMsICIldSIsICZwZ3R5cGUpOwoJCQkJCQl3aGlsZSAoaXNkaWdpdCgodW5zaWduZWQgY2hhcikg KnBhcmFtcykpCgkJCQkJCQlwYXJhbXMrKzsKCQkJCQl9CgkJCQl9CgkJCQkvKiBpbnB1dC9vdXRw dXQgdHlwZSBvZiBwYXJhbWV0ZXJzICovCgkJCQlpZiAocHJvYXJnbW9kZXMpCgkJCQl7CgkJCQkJ d2hpbGUgKGlzc3BhY2UoKHVuc2lnbmVkIGNoYXIpICpwcm9hcmdtb2RlcykgfHwgJywnID09ICpw cm9hcmdtb2RlcykKCQkJCQkJcHJvYXJnbW9kZXMrKzsKCQkJCQlpZiAoJ1wwJyA9PSAqcHJvYXJn bW9kZXMgfHwgJ30nID09ICpwcm9hcmdtb2RlcykKCQkJCQkJcHJvYXJnbW9kZXMgPSBOVUxMOwoJ CQkJfQoJCQkJLyogbmFtZSBvZiBwYXJhbWV0ZXJzICovCgkJCQlpZiAocHJvYXJnbmFtZXMpCgkJ CQl7CgkJCQkJd2hpbGUgKGlzc3BhY2UoKHVuc2lnbmVkIGNoYXIpICpwcm9hcmduYW1lcykgfHwg JywnID09ICpwcm9hcmduYW1lcykKCQkJCQkJcHJvYXJnbmFtZXMrKzsKCQkJCQlpZiAoJ1wwJyA9 PSAqcHJvYXJnbmFtZXMgfHwgJ30nID09ICpwcm9hcmduYW1lcykKCQkJCQkJcHJvYXJnbmFtZXMg PSBOVUxMOwoJCQkJCWVsc2UgaWYgKCciJyA9PSAqcHJvYXJnbmFtZXMpCgkJCQkJewoJCQkJCQlw cm9hcmduYW1lcysrOwoJCQkJCQlmb3IgKGRlbGltID0gcHJvYXJnbmFtZXM7ICpkZWxpbSAmJiAq ZGVsaW0gIT0gJyInOyBkZWxpbSsrKQoJCQkJCQkJOwoJCQkJCX0KCQkJCQllbHNlCgkJCQkJewoJ CQkJCQlmb3IgKGRlbGltID0gcHJvYXJnbmFtZXM7IElTX05PVF9TUEFDRSgqZGVsaW0pICYmICcs JyAhPSAqZGVsaW0gJiYgJ30nICE9ICpkZWxpbTsgZGVsaW0rKykKCQkJCQkJCTsKCQkJCQl9CgkJ CQkJaWYgKHByb2FyZ25hbWVzICYmICdcMCcgPT0gKmRlbGltKSAvKiBkaXNjYXJkIHRoZSBpbmNv bXBsZXRlIG5hbWUgKi8KCQkJCQkJcHJvYXJnbmFtZXMgPSBOVUxMOwoJCQkJfQoKCQkJCXR1cGxl ID0gUVJfQWRkTmV3KHJlcyk7CgkJCQlzZXRfdHVwbGVmaWVsZF9zdHJpbmcoJnR1cGxlW1BST0NP TFNfUFJPQ0VEVVJFX0NBVF0sIEN1cnJDYXQoY29ubikpOwoJCQkJc2V0X251bGxmaWVsZF9zdHJp bmcoJnR1cGxlW1BST0NPTFNfUFJPQ0VEVVJFX1NDSEVNXSwgc2NoZW1hX25hbWUpOwoJCQkJc2V0 X3R1cGxlZmllbGRfc3RyaW5nKCZ0dXBsZVtQUk9DT0xTX1BST0NFRFVSRV9OQU1FXSwgcHJvY25h bWUpOwoJCQkJaWYgKHByb2FyZ25hbWVzKQoJCQkJewoJCQkJCSpkZWxpbSA9ICdcMCc7CgkJCQkJ c2V0X3R1cGxlZmllbGRfc3RyaW5nKCZ0dXBsZVtQUk9DT0xTX0NPTFVNTl9OQU1FXSwgcHJvYXJn bmFtZXMpOwoJCQkJCXByb2FyZ25hbWVzID0gZGVsaW0gKyAxOwoJCQkJfQoJCQkJZWxzZQoJCQkJ CXNldF90dXBsZWZpZWxkX3N0cmluZygmdHVwbGVbUFJPQ09MU19DT0xVTU5fTkFNRV0sIE5VTExf U1RSSU5HKTsKCQkJCWlmIChwcm9hcmdtb2RlcykKCQkJCXsKCQkJCQlpbnQJcHR5cGU7CgoJCQkJ CXN3aXRjaCAoKnByb2FyZ21vZGVzKQoJCQkJCXsKCQkJCQkJY2FzZSAnbyc6CgkJCQkJCWNhc2Ug J3QnOgoJCQkJCQkJcHR5cGUgPSBiUmV0c2V0ID8gU1FMX1JFU1VMVF9DT0wgOiBTUUxfUEFSQU1f T1VUUFVUOwoJCQkJCQkJYnJlYWs7CgkJCQkJCWNhc2UgJ2InOgoJCQkJCQkJcHR5cGUgPSBTUUxf UEFSQU1fSU5QVVRfT1VUUFVUOwoJCQkJCQkJYnJlYWs7CgkJCQkJCWRlZmF1bHQ6CgkJCQkJCQlw dHlwZSA9IFNRTF9QQVJBTV9JTlBVVDsKCQkJCQkJCWJyZWFrOwoJCQkJCX0KCQkJCQlzZXRfdHVw bGVmaWVsZF9pbnQyKCZ0dXBsZVtQUk9DT0xTX0NPTFVNTl9UWVBFXSwgcHR5cGUpOwoJCQkJCXBy b2FyZ21vZGVzKys7CgkJCQl9CgkJCQllbHNlCgkJCQkJc2V0X3R1cGxlZmllbGRfaW50MigmdHVw bGVbUFJPQ09MU19DT0xVTU5fVFlQRV0sIFNRTF9QQVJBTV9JTlBVVCk7CgkJCQlzZXRfdHVwbGVm aWVsZF9pbnQyKCZ0dXBsZVtQUk9DT0xTX0RBVEFfVFlQRV0sIFBHVFlQRV9UT19DT05DSVNFX1RZ UEUoY29ubiwgcGd0eXBlKSk7CgkJCQlzZXRfdHVwbGVmaWVsZF9zdHJpbmcoJnR1cGxlW1BST0NP TFNfVFlQRV9OQU1FXSwgUEdUWVBFX1RPX05BTUUoY29ubiwgcGd0eXBlLCBGQUxTRSkpOwoJCQkJ Y29sdW1uX3NpemUgPSBQR1RZUEVfQ09MVU1OX1NJWkUoY29ubiwgcGd0eXBlKTsKCQkJCXNldF9u dWxsZmllbGRfaW50NCgmdHVwbGVbUFJPQ09MU19DT0xVTU5fU0laRV0sIGNvbHVtbl9zaXplKTsK CQkJCXNldF90dXBsZWZpZWxkX2ludDQoJnR1cGxlW1BST0NPTFNfQlVGRkVSX0xFTkdUSF0sIFBH VFlQRV9CVUZGRVJfTEVOR1RIKGNvbm4sIHBndHlwZSkpOwoJCQkJc2V0X251bGxmaWVsZF9pbnQy KCZ0dXBsZVtQUk9DT0xTX0RFQ0lNQUxfRElHSVRTXSwgUEdUWVBFX0RFQ0lNQUxfRElHSVRTKGNv bm4sIHBndHlwZSkpOwoJCQkJc2V0X251bGxmaWVsZF9pbnQyKCZ0dXBsZVtQUk9DT0xTX05VTV9Q UkVDX1JBRElYXSwgcGd0eXBlX3JhZGl4KGNvbm4sIHBndHlwZSkpOwoJCQkJc2V0X3R1cGxlZmll bGRfaW50MigmdHVwbGVbUFJPQ09MU19OVUxMQUJMRV0sIFNRTF9OVUxMQUJMRV9VTktOT1dOKTsK CQkJCXNldF90dXBsZWZpZWxkX251bGwoJnR1cGxlW1BST0NPTFNfUkVNQVJLU10pOwoJCQkJc2V0 X3R1cGxlZmllbGRfbnVsbCgmdHVwbGVbUFJPQ09MU19DT0xVTU5fREVGXSk7CgkJCQlzZXRfdHVw bGVmaWVsZF9pbnQyKCZ0dXBsZVtQUk9DT0xTX1NRTF9EQVRBX1RZUEVdLCBQR1RZUEVfVE9fU1FM REVTQ1RZUEUoY29ubiwgcGd0eXBlKSk7CgkJCQlzZXRfbnVsbGZpZWxkX2ludDIoJnR1cGxlW1BS T0NPTFNfU1FMX0RBVEVUSU1FX1NVQl0sIFBHVFlQRV9UT19EQVRFVElNRV9TVUIoY29ubiwgcGd0 eXBlKSk7CgkJCQlzZXRfbnVsbGZpZWxkX2ludDQoJnR1cGxlW1BST0NPTFNfQ0hBUl9PQ1RFVF9M RU5HVEhdLCBQR1RZUEVfVFJBTlNGRVJfT0NURVRfTEVOR1RIKGNvbm4sIHBndHlwZSkpOwoJCQkJ c2V0X3R1cGxlZmllbGRfaW50NCgmdHVwbGVbUFJPQ09MU19PUkRJTkFMX1BPU0lUSU9OXSwgaiAr IDEpOwoJCQkJc2V0X3R1cGxlZmllbGRfc3RyaW5nKCZ0dXBsZVtQUk9DT0xTX0lTX05VTExBQkxF XSwgTlVMTF9TVFJJTkcpOwoJCQl9CgkJfQoJCS8qIFJFU1VMVCBDb2x1bW5zIGluZm8gKi8KCQlp ZiAoIW91dHBhcmFfZXhpc3QgJiYKCQkgICAgKE5VTEwgIT0gYXR0dHlwaWQgfHwgYlJldHNldCkp CgkJewoJCQlpbnQJdHlwaWQ7CgoJCQlpZiAoIWF0dHR5cGlkKQoJCQl7CgkJCQl0eXBpZCA9IHBn dHlwZTsKCQkJCWF0dG5hbWUgPSBOVUxMOwoJCQl9CgkJCWVsc2UKCQkJewoJCQkJdHlwaWQgPSBh dG9pKGF0dHR5cGlkKTsKCQkJCWF0dG5hbWUgPSBRUl9nZXRfdmFsdWVfYmFja2VuZF90ZXh0KHRy ZXMsIGksIGF0dG5hbWVfcG9zKTsKCQkJfQoJCQl0dXBsZSA9IFFSX0FkZE5ldyhyZXMpOwoJCQlz ZXRfdHVwbGVmaWVsZF9zdHJpbmcoJnR1cGxlW1BST0NPTFNfUFJPQ0VEVVJFX0NBVF0sIEN1cnJD YXQoY29ubikpOwoJCQlzZXRfbnVsbGZpZWxkX3N0cmluZygmdHVwbGVbUFJPQ09MU19QUk9DRURV UkVfU0NIRU1dLCBzY2hlbWFfbmFtZSk7CgkJCXNldF90dXBsZWZpZWxkX3N0cmluZygmdHVwbGVb UFJPQ09MU19QUk9DRURVUkVfTkFNRV0sIHByb2NuYW1lKTsKCQkJc2V0X3R1cGxlZmllbGRfc3Ry aW5nKCZ0dXBsZVtQUk9DT0xTX0NPTFVNTl9OQU1FXSwgYXR0bmFtZSk7CgkJCXNldF90dXBsZWZp ZWxkX2ludDIoJnR1cGxlW1BST0NPTFNfQ09MVU1OX1RZUEVdLCBiUmV0c2V0ID8gU1FMX1JFU1VM VF9DT0wgOiBTUUxfUEFSQU1fT1VUUFVUKTsKCQkJc2V0X3R1cGxlZmllbGRfaW50MigmdHVwbGVb UFJPQ09MU19EQVRBX1RZUEVdLCBQR1RZUEVfVE9fQ09OQ0lTRV9UWVBFKGNvbm4sIHR5cGlkKSk7 CgkJCXNldF90dXBsZWZpZWxkX3N0cmluZygmdHVwbGVbUFJPQ09MU19UWVBFX05BTUVdLCBQR1RZ UEVfVE9fTkFNRShjb25uLCB0eXBpZCwgRkFMU0UpKTsKCQkJY29sdW1uX3NpemUgPSBQR1RZUEVf Q09MVU1OX1NJWkUoY29ubiwgdHlwaWQpOwoJCQlzZXRfbnVsbGZpZWxkX2ludDQoJnR1cGxlW1BS T0NPTFNfQ09MVU1OX1NJWkVdLCBjb2x1bW5fc2l6ZSk7CgkJCXNldF90dXBsZWZpZWxkX2ludDQo JnR1cGxlW1BST0NPTFNfQlVGRkVSX0xFTkdUSF0sIFBHVFlQRV9CVUZGRVJfTEVOR1RIKGNvbm4s IHR5cGlkKSk7CgkJCXNldF9udWxsZmllbGRfaW50MigmdHVwbGVbUFJPQ09MU19ERUNJTUFMX0RJ R0lUU10sIFBHVFlQRV9ERUNJTUFMX0RJR0lUUyhjb25uLCB0eXBpZCkpOwoJCQlzZXRfbnVsbGZp ZWxkX2ludDIoJnR1cGxlW1BST0NPTFNfTlVNX1BSRUNfUkFESVhdLCBwZ3R5cGVfcmFkaXgoY29u biwgdHlwaWQpKTsKCQkJc2V0X3R1cGxlZmllbGRfaW50MigmdHVwbGVbUFJPQ09MU19OVUxMQUJM RV0sIFNRTF9OVUxMQUJMRV9VTktOT1dOKTsKCQkJc2V0X3R1cGxlZmllbGRfbnVsbCgmdHVwbGVb UFJPQ09MU19SRU1BUktTXSk7CgkJCXNldF90dXBsZWZpZWxkX251bGwoJnR1cGxlW1BST0NPTFNf Q09MVU1OX0RFRl0pOwoJCQlzZXRfdHVwbGVmaWVsZF9pbnQyKCZ0dXBsZVtQUk9DT0xTX1NRTF9E QVRBX1RZUEVdLCBQR1RZUEVfVE9fU1FMREVTQ1RZUEUoY29ubiwgdHlwaWQpKTsKCQkJc2V0X251 bGxmaWVsZF9pbnQyKCZ0dXBsZVtQUk9DT0xTX1NRTF9EQVRFVElNRV9TVUJdLCBQR1RZUEVfVE9f REFURVRJTUVfU1VCKGNvbm4sIHR5cGlkKSk7CgkJCXNldF9udWxsZmllbGRfaW50NCgmdHVwbGVb UFJPQ09MU19DSEFSX09DVEVUX0xFTkdUSF0sIFBHVFlQRV9UUkFOU0ZFUl9PQ1RFVF9MRU5HVEgo Y29ubiwgdHlwaWQpKTsKCQkJc2V0X3R1cGxlZmllbGRfaW50NCgmdHVwbGVbUFJPQ09MU19PUkRJ TkFMX1BPU0lUSU9OXSwgMCk7CgkJCXNldF90dXBsZWZpZWxkX3N0cmluZygmdHVwbGVbUFJPQ09M U19JU19OVUxMQUJMRV0sIE5VTExfU1RSSU5HKTsKCQl9Cgl9CglyZXQgPSBTUUxfU1VDQ0VTUzsK Y2xlYW51cDoKI3VuZGVmIHJldHVybgoJaWYgKHRyZXMpCgkJUVJfRGVzdHJ1Y3Rvcih0cmVzKTsK CWlmICghUFFFeHBCdWZmZXJEYXRhQnJva2VuKHByb2NfcXVlcnkpKQoJCXRlcm1QUUV4cEJ1ZmZl cigmcHJvY19xdWVyeSk7CgkvKgoJICogYWxzbywgdGhpbmdzIG5lZWQgdG8gdGhpbmsgdGhhdCB0 aGlzIHN0YXRlbWVudCBpcyBmaW5pc2hlZCBzbyB0aGUKCSAqIHJlc3VsdHMgY2FuIGJlIHJldHJp ZXZlZC4KCSAqLwoJc3RtdC0+c3RhdHVzID0gU1RNVF9GSU5JU0hFRDsKCS8qIHNldCB1cCB0aGUg Y3VycmVudCB0dXBsZSBwb2ludGVyIGZvciBTUUxGZXRjaCAqLwoJc3RtdC0+Y3VyclR1cGxlID0g LTE7CglTQ19zZXRfcm93c2V0X3N0YXJ0KHN0bXQsIC0xLCBGQUxTRSk7CglTQ19zZXRfY3VycmVu dF9jb2woc3RtdCwgLTEpOwoKCXJldHVybiByZXQ7Cn0KCgpSRVRDT0RFCQlTUUxfQVBJClBHQVBJ X1Byb2NlZHVyZXMoSFNUTVQgaHN0bXQsCgkJCQkgY29uc3QgU1FMQ0hBUiAqIHN6UHJvY1F1YWxp ZmllciwgLyogT0EgWCovCgkJCQkgU1FMU01BTExJTlQgY2JQcm9jUXVhbGlmaWVyLAoJCQkJIGNv bnN0IFNRTENIQVIgKiBzelByb2NPd25lciwgLyogUFYgRSovCgkJCQkgU1FMU01BTExJTlQgY2JQ cm9jT3duZXIsCgkJCQkgY29uc3QgU1FMQ0hBUiAqIHN6UHJvY05hbWUsIC8qIFBWIEUqLwoJCQkJ IFNRTFNNQUxMSU5UIGNiUHJvY05hbWUsCgkJCQkgVVdPUkQgZmxhZykKewoJQ1NUUiBmdW5jID0g IlBHQVBJX1Byb2NlZHVyZXMiOwoJU3RhdGVtZW50Q2xhc3MgKnN0bXQgPSAoU3RhdGVtZW50Q2xh c3MgKikgaHN0bXQ7CglDb25uZWN0aW9uQ2xhc3MgKmNvbm4gPSBTQ19nZXRfY29ubihzdG10KTsK CVBRRXhwQnVmZmVyRGF0YQkJcHJvY19xdWVyeSA9IHswfTsKCWNoYXIJKmVzY1NjaGVtYU5hbWUg PSBOVUxMLCAqZXNjUHJvY05hbWUgPSBOVUxMOwoJUVJlc3VsdENsYXNzICpyZXM7CglSRVRDT0RF CQlyZXQgPSBTUUxfRVJST1IsIHJlc3VsdDsKCWNvbnN0IGNoYXIJKmxpa2Vfb3JfZXEsICpvcF9z dHJpbmc7CglCT09MCXNlYXJjaF9wYXR0ZXJuOwoKCU1ZTE9HKDAsICJlbnRlcmluZy4uLiBzY25t PSVwIGxlbj0lZFxuIiwgc3pQcm9jT3duZXIsIGNiUHJvY093bmVyKTsKCglpZiAocmVzdWx0ID0g U0NfaW5pdGlhbGl6ZV9hbmRfcmVjeWNsZShzdG10KSwgU1FMX1NVQ0NFU1MgIT0gcmVzdWx0KQoJ CXJldHVybiByZXN1bHQ7CgoJc2VhcmNoX3BhdHRlcm4gPSAoMCA9PSAoZmxhZyAmIFBPREJDX05P VF9TRUFSQ0hfUEFUVEVSTikpOwoJaWYgKHNlYXJjaF9wYXR0ZXJuKQoJewoJCWxpa2Vfb3JfZXEg PSBsaWtlb3A7CgkJZXNjU2NoZW1hTmFtZSA9IGFkanVzdExpa2VQYXR0ZXJuKHN6UHJvY093bmVy LCBjYlByb2NPd25lciwgY29ubik7CgkJZXNjUHJvY05hbWUgPSBhZGp1c3RMaWtlUGF0dGVybihz elByb2NOYW1lLCBjYlByb2NOYW1lLCBjb25uKTsKCX0KCWVsc2UKCXsKCQlsaWtlX29yX2VxID0g ZXFvcDsKCQllc2NTY2hlbWFOYW1lID0gc2ltcGxlQ2F0YWxvZ0VzY2FwZShzelByb2NPd25lciwg Y2JQcm9jT3duZXIsIGNvbm4pOwoJCWVzY1Byb2NOYW1lID0gc2ltcGxlQ2F0YWxvZ0VzY2FwZShz elByb2NOYW1lLCBjYlByb2NOYW1lLCBjb25uKTsKCX0KCS8qCgkgKiBUaGUgZm9sbG93aW5nIHNl ZW1zIHRoZSBzaW1wbGVzdCBpbXBsZW1lbnRhdGlvbgoJICovCglvcF9zdHJpbmcgPSBnZW5fb3Bl c3RyKGxpa2Vfb3JfZXEsIGNvbm4pOwoJaW5pdFBRRXhwQnVmZmVyKCZwcm9jX3F1ZXJ5KTsKI2Rl ZmluZQlyZXR1cm4JRE9OVF9DQUxMX1JFVFVSTl9GUk9NX0hFUkU/Pz8KLy8JYXBwZW5kUFFFeHBC dWZmZXJTdHIoJnByb2NfcXVlcnksICJzZWxlY3QgJyc6OnZhcmNoYXIgYXMgIiAiUFJPQ0VEVVJF X0NBVCIgIiwgbnNwbmFtZSBhcyAiICJQUk9DRURVUkVfU0NIRU0iICIsIgogICAgICAgIGFwcGVu ZFBRRXhwQnVmZmVyU3RyKCZwcm9jX3F1ZXJ5LCAic2VsZWN0IiAgIihzZWxlY3QgY3VycmVudF9j YXRhbG9nKSIgIiBhcyAiICJQUk9DRURVUkVfQ0FUIiAiLCBuc3BuYW1lIGFzICIgIlBST0NFRFVS RV9TQ0hFTSIgIiwiCgkiIHByb25hbWUgYXMgIiAiUFJPQ0VEVVJFX05BTUUiICIsICcnOjp2YXJj aGFyIGFzICIgIk5VTV9JTlBVVF9QQVJBTVMiICIsIgoJICAgIiAnJzo6dmFyY2hhciBhcyAiICJO VU1fT1VUUFVUX1BBUkFNUyIgIiwgJyc6OnZhcmNoYXIgYXMgIiAiTlVNX1JFU1VMVF9TRVRTIiAi LCIKCSAgICIgJyc6OnZhcmNoYXIgYXMgIiAiUkVNQVJLUyIgIiwiCgkgICAiIGNhc2Ugd2hlbiBw cm9yZXR0eXBlID0gMCB0aGVuIDE6OmludDIgZWxzZSAyOjppbnQyIGVuZCIKCSAgICIgYXMgIgkJ ICAiUFJPQ0VEVVJFX1RZUEUiICIgZnJvbSBwZ19jYXRhbG9nLnBnX25hbWVzcGFjZSwiCgkgICAi IHBnX2NhdGFsb2cucGdfcHJvYyIKCSAgIiB3aGVyZSBwZ19wcm9jLnByb25hbWVzcGFjZSA9IHBn X25hbWVzcGFjZS5vaWQiKTsKICAgICAgICBpZiAoZXNjU2NoZW1hTmFtZSkKICAgICAgICAJc2No ZW1hX2FwcGVuZFBRRXhwQnVmZmVyMSgmcHJvY19xdWVyeSwgIiBhbmQgbnNwbmFtZSAlcyclLipz JyIsIG9wX3N0cmluZywgZXNjU2NoZW1hTmFtZSwgVEFCTEVfSVNfVkFMSUQoc3pQcm9jTmFtZSwg Y2JQcm9jTmFtZSksIGNvbm4pOwoJaWYgKElTX1ZBTElEX05BTUUoZXNjUHJvY05hbWUpKQoJCWFw cGVuZFBRRXhwQnVmZmVyKCZwcm9jX3F1ZXJ5LAoJCQkJICIgYW5kIHByb25hbWUgJXMnJXMnIiwg b3Bfc3RyaW5nLCBlc2NQcm9jTmFtZSk7CgoJaWYgKFBRRXhwQnVmZmVyRGF0YUJyb2tlbihwcm9j X3F1ZXJ5KSkKCXsKCQlTQ19zZXRfZXJyb3Ioc3RtdCwgU1RNVF9OT19NRU1PUllfRVJST1IsICJP dXQgb2YgbWVtb3J5IGluIFBHQVBJX1Byb2NlZHVyZXMoKSIsIGZ1bmMpOwoJCWdvdG8gY2xlYW51 cDsKCX0KCXJlcyA9IENDX3NlbmRfcXVlcnkoY29ubiwgcHJvY19xdWVyeS5kYXRhLCBOVUxMLCBS RUFEX09OTFlfUVVFUlksIHN0bXQpOwoJaWYgKCFRUl9jb21tYW5kX21heWJlX3N1Y2Nlc3NmdWwo cmVzKSkKCXsKCQlTQ19zZXRfZXJyb3Ioc3RtdCwgU1RNVF9FWEVDX0VSUk9SLCAiUEdBUElfUHJv Y2VkdXJlcyBxdWVyeSBlcnJvciIsIGZ1bmMpOwoJCVFSX0Rlc3RydWN0b3IocmVzKTsKCQlnb3Rv IGNsZWFudXA7Cgl9CglTQ19zZXRfUmVzdWx0KHN0bXQsIHJlcyk7CgoJcmV0ID0gU1FMX1NVQ0NF U1M7CgkvKgoJICogYWxzbywgdGhpbmdzIG5lZWQgdG8gdGhpbmsgdGhhdCB0aGlzIHN0YXRlbWVu dCBpcyBmaW5pc2hlZCBzbyB0aGUKCSAqIHJlc3VsdHMgY2FuIGJlIHJldHJpZXZlZC4KCSAqLwpj bGVhbnVwOgojdW5kZWYgcmV0dXJuCglzdG10LT5zdGF0dXMgPSBTVE1UX0ZJTklTSEVEOwoJZXh0 ZW5kX2NvbHVtbl9iaW5kaW5ncyhTQ19nZXRfQVJERihzdG10KSwgOCk7CglpZiAoZXNjU2NoZW1h TmFtZSkKCQlmcmVlKGVzY1NjaGVtYU5hbWUpOwoJaWYgKGVzY1Byb2NOYW1lKQoJCWZyZWUoZXNj UHJvY05hbWUpOwoJaWYgKCFQUUV4cEJ1ZmZlckRhdGFCcm9rZW4ocHJvY19xdWVyeSkpCgkJdGVy bVBRRXhwQnVmZmVyKCZwcm9jX3F1ZXJ5KTsKCS8qIHNldCB1cCB0aGUgY3VycmVudCB0dXBsZSBw b2ludGVyIGZvciBTUUxGZXRjaCAqLwoJc3RtdC0+Y3VyclR1cGxlID0gLTE7CglTQ19zZXRfcm93 c2V0X3N0YXJ0KHN0bXQsIC0xLCBGQUxTRSk7CglTQ19zZXRfY3VycmVudF9jb2woc3RtdCwgLTEp OwoKCXJldHVybiByZXQ7Cn0KCgojZGVmaW5lCUFDTE1BWAk4CiNkZWZpbmUgQUxMX1BSSVZJTElH RVMgImFyd2RSeHQiCnN0YXRpYyBpbnQKdXNyYWNsX2F1dGgoY2hhciAqdXNyYWNsLCBjb25zdCBj aGFyICphdXRoKQp7CglpbnQJaSwgaiwgYWRkY250ID0gMDsKCglmb3IgKGkgPSAwOyBhdXRoW2ld OyBpKyspCgl7CgkJZm9yIChqID0gMDsgaiA8IEFDTE1BWDsgaisrKQoJCXsKCQkJaWYgKHVzcmFj bFtqXSA9PSBhdXRoW2ldKQoJCQkJYnJlYWs7CgkJCWVsc2UgaWYgKCF1c3JhY2xbal0pCgkJCXsK CQkJCXVzcmFjbFtqXT0gYXV0aFtpXTsKCQkJCWFkZGNudCsrOwoJCQkJYnJlYWs7CgkJCX0KCQl9 Cgl9CglyZXR1cm4gYWRkY250Owp9CnN0YXRpYyB2b2lkCnVzZXJhY2xfdXBkKGNoYXIgKCp1c2Vy YWNsKVtBQ0xNQVhdLCBRUmVzdWx0Q2xhc3MgKmFsbHVyZXMsIGNvbnN0IGNoYXIgKnVzZXIsIGNv bnN0IGNoYXIgKmF1dGgpCnsKCWludCB1c2VyY291bnQgPSAoaW50KSBRUl9nZXRfbnVtX2NhY2hl ZF90dXBsZXMoYWxsdXJlcyksIGksIGFkZGNudCA9IDA7CgpNWUxPRygwLCAidXNlcj0lcyBhdXRo PSVzXG4iLCB1c2VyLCBhdXRoKTsKCWlmICh1c2VyWzBdKQoJCWZvciAoaSA9IDA7IGkgPCB1c2Vy Y291bnQ7IGkrKykKCQl7CgkJCWlmIChzdHJjbXAoUVJfZ2V0X3ZhbHVlX2JhY2tlbmRfdGV4dChh bGx1cmVzLCBpLCAwKSwgdXNlcikgPT0gMCkKCQkJewoJCQkJYWRkY250ICs9IHVzcmFjbF9hdXRo KHVzZXJhY2xbaV0sIGF1dGgpOwoJCQkJYnJlYWs7CgkJCX0KCQl9CgllbHNlCgkJZm9yIChpID0g MDsgaSA8IHVzZXJjb3VudDsgaSsrKQoJCXsKCQkJYWRkY250ICs9IHVzcmFjbF9hdXRoKHVzZXJh Y2xbaV0sIGF1dGgpOwoJCX0KCU1ZTE9HKDAsICJhZGRjbnQ9JWRcbiIsIGFkZGNudCk7Cn0KClJF VENPREUJCVNRTF9BUEkKUEdBUElfVGFibGVQcml2aWxlZ2VzKEhTVE1UIGhzdG10LAoJCQkJCSAg Y29uc3QgU1FMQ0hBUiAqIHN6VGFibGVRdWFsaWZpZXIsIC8qIE9BIFgqLwoJCQkJCSAgU1FMU01B TExJTlQgY2JUYWJsZVF1YWxpZmllciwKCQkJCQkgIGNvbnN0IFNRTENIQVIgKiBzelRhYmxlT3du ZXIsIC8qIFBWIEUqLwoJCQkJCSAgU1FMU01BTExJTlQgY2JUYWJsZU93bmVyLAoJCQkJCSAgY29u c3QgU1FMQ0hBUiAqIHN6VGFibGVOYW1lLCAvKiBQViBFKi8KCQkJCQkgIFNRTFNNQUxMSU5UIGNi VGFibGVOYW1lLAoJCQkJCSAgVVdPUkQgZmxhZykKewoJU3RhdGVtZW50Q2xhc3MgKnN0bXQgPSAo U3RhdGVtZW50Q2xhc3MgKikgaHN0bXQ7CglDU1RSIGZ1bmMgPSAiUEdBUElfVGFibGVQcml2aWxl Z2VzIjsKCUNvbm5lY3Rpb25DbGFzcyAqY29ubiA9IFNDX2dldF9jb25uKHN0bXQpOwoJSW50MgkJ cmVzdWx0X2NvbHM7CglQUUV4cEJ1ZmZlckRhdGEJCXByb2NfcXVlcnkgPSB7MH07CglRUmVzdWx0 Q2xhc3MJKnJlcywgKndyZXMgPSBOVUxMLCAqYWxsdXJlcyA9IE5VTEw7CglUdXBsZUZpZWxkCSp0 dXBsZTsKCUludDQJCXRhYmxlY291bnQsIHVzZXJjb3VudCwgaSwgaiwgazsKCUJPT0wJCWdycGF1 dGgsIHN5cywgc3U7CgljaGFyCQkoKnVzZXJhY2wpW0FDTE1BWF0gPSBOVUxMLCAqYWNsLCAqdXNl ciwgKmRlbGltLCAqYXV0aDsKCWNvbnN0IGNoYXIJKnJlbG4sICpvd25lciwgKnByaXYsICpzY2hu bSA9IE5VTEw7CglSRVRDT0RFCQlyZXN1bHQsIHJldCA9IFNRTF9FUlJPUjsKCWNvbnN0IGNoYXIJ Kmxpa2Vfb3JfZXEsICpvcF9zdHJpbmc7Cgljb25zdCBTUUxDSEFSICpzelNjaGVtYU5hbWU7CglT UUxTTUFMTElOVAljYlNjaGVtYU5hbWU7CgljaGFyCQkqZXNjU2NoZW1hTmFtZSA9IE5VTEwsICpl c2NUYWJsZU5hbWUgPSBOVUxMOwoJQk9PTAkJc2VhcmNoX3BhdHRlcm47CgoJTVlMT0coMCwgImVu dGVyaW5nLi4uIHNjbm09JXAgbGVuLSVkXG4iLCBzelRhYmxlT3duZXIsIGNiVGFibGVPd25lcik7 CglpZiAocmVzdWx0ID0gU0NfaW5pdGlhbGl6ZV9hbmRfcmVjeWNsZShzdG10KSwgU1FMX1NVQ0NF U1MgIT0gcmVzdWx0KQoJCXJldHVybiByZXN1bHQ7CgoJLyoKCSAqIGEgc3RhdGVtZW50IGlzIGFj dHVhbGx5IGV4ZWN1dGVkLCBzbyB3ZSdsbCBoYXZlIHRvIGRvIHRoaXMKCSAqIG91cnNlbHZlcy4K CSAqLwoJcmVzdWx0X2NvbHMgPSBOVU1fT0ZfVEFCUFJJVl9GSUVMRFM7CglleHRlbmRfY29sdW1u X2JpbmRpbmdzKFNDX2dldF9BUkRGKHN0bXQpLCByZXN1bHRfY29scyk7CgoJc3RtdC0+Y2F0YWxv Z19yZXN1bHQgPSBUUlVFOwoJLyogc2V0IHRoZSBmaWVsZCBuYW1lcyAqLwoJcmVzID0gUVJfQ29u c3RydWN0b3IoKTsKCWlmICghcmVzKQoJewoJCVNDX3NldF9lcnJvcihzdG10LCBTVE1UX05PX01F TU9SWV9FUlJPUiwgIkNvdWxkbid0IGFsbG9jYXRlIG1lbW9yeSBmb3IgcXVlcnkuIiwgZnVuYyk7 CgkJcmV0dXJuIFNRTF9FUlJPUjsKCX0KCVNDX3NldF9SZXN1bHQoc3RtdCwgcmVzKTsKCVFSX3Nl dF9udW1fZmllbGRzKHJlcywgcmVzdWx0X2NvbHMpOwoJUVJfc2V0X2ZpZWxkX2luZm9fdihyZXMs IDAsICJUQUJMRV9DQVQiLCBQR19UWVBFX1ZBUkNIQVIsIE1BWF9JTkZPX1NUUklORyk7CglRUl9z ZXRfZmllbGRfaW5mb192KHJlcywgMSwgIlRBQkxFX1NDSEVNIiwgUEdfVFlQRV9WQVJDSEFSLCBN QVhfSU5GT19TVFJJTkcpOwoJUVJfc2V0X2ZpZWxkX2luZm9fdihyZXMsIDIsICJUQUJMRV9OQU1F IiwgUEdfVFlQRV9WQVJDSEFSLCBNQVhfSU5GT19TVFJJTkcpOwoJUVJfc2V0X2ZpZWxkX2luZm9f dihyZXMsIDMsICJHUkFOVE9SIiwgUEdfVFlQRV9WQVJDSEFSLCBNQVhfSU5GT19TVFJJTkcpOwoJ UVJfc2V0X2ZpZWxkX2luZm9fdihyZXMsIDQsICJHUkFOVEVFIiwgUEdfVFlQRV9WQVJDSEFSLCBN QVhfSU5GT19TVFJJTkcpOwoJUVJfc2V0X2ZpZWxkX2luZm9fdihyZXMsIDUsICJQUklWSUxFR0Ui LCBQR19UWVBFX1ZBUkNIQVIsIE1BWF9JTkZPX1NUUklORyk7CglRUl9zZXRfZmllbGRfaW5mb192 KHJlcywgNiwgIklTX0dSQU5UQUJMRSIsIFBHX1RZUEVfVkFSQ0hBUiwgTUFYX0lORk9fU1RSSU5H KTsKCgkvKgoJICogYWxzbywgdGhpbmdzIG5lZWQgdG8gdGhpbmsgdGhhdCB0aGlzIHN0YXRlbWVu dCBpcyBmaW5pc2hlZCBzbyB0aGUKCSAqIHJlc3VsdHMgY2FuIGJlIHJldHJpZXZlZC4KCSAqLwoJ c3RtdC0+c3RhdHVzID0gU1RNVF9GSU5JU0hFRDsKCS8qIHNldCB1cCB0aGUgY3VycmVudCB0dXBs ZSBwb2ludGVyIGZvciBTUUxGZXRjaCAqLwoJc3RtdC0+Y3VyclR1cGxlID0gLTE7CglTQ19zZXRf cm93c2V0X3N0YXJ0KHN0bXQsIC0xLCBGQUxTRSk7CglTQ19zZXRfY3VycmVudF9jb2woc3RtdCwg LTEpOwoJc3pTY2hlbWFOYW1lID0gc3pUYWJsZU93bmVyOwoJY2JTY2hlbWFOYW1lID0gY2JUYWJs ZU93bmVyOwoKI2RlZmluZQlyZXR1cm4JRE9OVF9DQUxMX1JFVFVSTl9GUk9NX0hFUkU/Pz8KCXNl YXJjaF9wYXR0ZXJuID0gKDAgPT0gKGZsYWcgJiBQT0RCQ19OT1RfU0VBUkNIX1BBVFRFUk4pKTsK CWlmIChzZWFyY2hfcGF0dGVybikKCXsKCQlsaWtlX29yX2VxID0gbGlrZW9wOwoJCWVzY1RhYmxl TmFtZSA9IGFkanVzdExpa2VQYXR0ZXJuKHN6VGFibGVOYW1lLCBjYlRhYmxlTmFtZSwgY29ubik7 Cgl9CgllbHNlCgl7CgkJbGlrZV9vcl9lcSA9IGVxb3A7CgkJZXNjVGFibGVOYW1lID0gc2ltcGxl Q2F0YWxvZ0VzY2FwZShzelRhYmxlTmFtZSwgY2JUYWJsZU5hbWUsIGNvbm4pOwoJfQoKcmV0cnlf cHVibGljX3NjaGVtYToKCWlmIChlc2NTY2hlbWFOYW1lKQoJCWZyZWUoZXNjU2NoZW1hTmFtZSk7 CglpZiAoc2VhcmNoX3BhdHRlcm4pCgkJZXNjU2NoZW1hTmFtZSA9IGFkanVzdExpa2VQYXR0ZXJu KHN6U2NoZW1hTmFtZSwgY2JTY2hlbWFOYW1lLCBjb25uKTsKCWVsc2UKCQllc2NTY2hlbWFOYW1l ID0gc2ltcGxlQ2F0YWxvZ0VzY2FwZShzelNjaGVtYU5hbWUsIGNiU2NoZW1hTmFtZSwgY29ubik7 CgoJb3Bfc3RyaW5nID0gZ2VuX29wZXN0cihsaWtlX29yX2VxLCBjb25uKTsKCWluaXRQUUV4cEJ1 ZmZlcigmcHJvY19xdWVyeSk7CglhcHBlbmRQUUV4cEJ1ZmZlclN0cigmcHJvY19xdWVyeSwgInNl bGVjdCByZWxuYW1lLCB1c2VuYW1lLCByZWxhY2wsIG5zcG5hbWUiCgkiIGZyb20gcGdfY2F0YWxv Zy5wZ19uYW1lc3BhY2UsIHBnX2NhdGFsb2cucGdfY2xhc3MgLCIKCSIgcGdfY2F0YWxvZy5wZ191 c2VyIHdoZXJlIik7CglpZiAoZXNjU2NoZW1hTmFtZSkKCQlzY2hlbWFfYXBwZW5kUFFFeHBCdWZm ZXIxKCZwcm9jX3F1ZXJ5LCAiIG5zcG5hbWUgJXMnJS4qcycgYW5kIiwgb3Bfc3RyaW5nLCBlc2NT Y2hlbWFOYW1lLCBUQUJMRV9JU19WQUxJRChzelRhYmxlTmFtZSwgY2JUYWJsZU5hbWUpLCBjb25u KTsKCglpZiAoZXNjVGFibGVOYW1lKQoJCWFwcGVuZFBRRXhwQnVmZmVyKCZwcm9jX3F1ZXJ5LCAi IHJlbG5hbWUgJXMnJXMnIGFuZCIsIG9wX3N0cmluZywgZXNjVGFibGVOYW1lKTsKCWFwcGVuZFBR RXhwQnVmZmVyU3RyKCZwcm9jX3F1ZXJ5LCAiIHBnX25hbWVzcGFjZS5vaWQgPSByZWxuYW1lc3Bh Y2UgYW5kIHJlbGtpbmQgaW4gIiBUQUJMRV9JTl9SRUxLSU5EICIgYW5kIik7CglpZiAoKCFlc2NU YWJsZU5hbWUpICYmICghZXNjU2NoZW1hTmFtZSkpCgkJYXBwZW5kUFFFeHBCdWZmZXJTdHIoJnBy b2NfcXVlcnksICIgbnNwbmFtZSBub3QgaW4gKCdwZ19jYXRhbG9nJywgJ2luZm9ybWF0aW9uX3Nj aGVtYScpIGFuZCIpOwoKCWFwcGVuZFBRRXhwQnVmZmVyU3RyKCZwcm9jX3F1ZXJ5LCAiIHBnX3Vz ZXIudXNlc3lzaWQgPSByZWxvd25lciIpOwoJaWYgKFBRRXhwQnVmZmVyRGF0YUJyb2tlbihwcm9j X3F1ZXJ5KSkKCXsKCQlTQ19zZXRfZXJyb3Ioc3RtdCwgU1RNVF9OT19NRU1PUllfRVJST1IsICJP dXQgb2YgbWVtb3J5IGluIFBHQVBJX1RhYmxlUHJpdmlsZWdlcygpIiwgZnVuYyk7CgkJZ290byBj bGVhbnVwOwoJfQoJaWYgKHdyZXMgPSBDQ19zZW5kX3F1ZXJ5KGNvbm4sIHByb2NfcXVlcnkuZGF0 YSwgTlVMTCwgUkVBRF9PTkxZX1FVRVJZLCBzdG10KSwgIVFSX2NvbW1hbmRfbWF5YmVfc3VjY2Vz c2Z1bCh3cmVzKSkKCXsKCQlTQ19zZXRfZXJyb3Ioc3RtdCwgU1RNVF9FWEVDX0VSUk9SLCAiUEdB UElfVGFibGVQcml2aWxlZ2VzIHF1ZXJ5IGVycm9yIiwgZnVuYyk7CgkJZ290byBjbGVhbnVwOwoJ fQoJdGFibGVjb3VudCA9IChJbnQ0KSBRUl9nZXRfbnVtX2NhY2hlZF90dXBsZXMod3Jlcyk7Cgkv KiBJZiBub3QgZm91bmQgKi8KCWlmICgoZmxhZyAmIFBPREJDX1NFQVJDSF9QVUJMSUNfU0NIRU1B KSAhPSAwICYmCgkgICAgMCA9PSB0YWJsZWNvdW50KQoJewoJCWlmIChhbGxvd19wdWJsaWNfc2No ZW1hKGNvbm4sIHN6U2NoZW1hTmFtZSwgY2JTY2hlbWFOYW1lKSkKCQl7CgkJCVFSX0Rlc3RydWN0 b3Iod3Jlcyk7CgkJCXdyZXMgPSBOVUxMOwoJCQlzelNjaGVtYU5hbWUgPSBwdWJzdHI7CgkJCWNi U2NoZW1hTmFtZSA9IFNRTF9OVFM7CgkJCWdvdG8gcmV0cnlfcHVibGljX3NjaGVtYTsKCQl9Cgl9 CgoJcmVzZXRQUUV4cEJ1ZmZlcigmcHJvY19xdWVyeSk7CglhcHBlbmRQUUV4cEJ1ZmZlclN0cigm cHJvY19xdWVyeSwgInNlbGVjdCB1c2VuYW1lLCB1c2VzeXNpZCwgdXNlc3VwZXIgZnJvbSBwZ191 c2VyIik7CglpZiAoUFFFeHBCdWZmZXJEYXRhQnJva2VuKHByb2NfcXVlcnkpKQoJewoJCVNDX3Nl dF9lcnJvcihzdG10LCBTVE1UX05PX01FTU9SWV9FUlJPUiwgIk91dCBvZiBtZW1vcnkgaW4gUEdB UElfVGFibGVQcml2aWxlZ2VzKCkiLCBmdW5jKTsKCQlnb3RvIGNsZWFudXA7Cgl9CglpZiAoYWxs dXJlcyA9IENDX3NlbmRfcXVlcnkoY29ubiwgcHJvY19xdWVyeS5kYXRhLCBOVUxMLCBSRUFEX09O TFlfUVVFUlksIHN0bXQpLCAhUVJfY29tbWFuZF9tYXliZV9zdWNjZXNzZnVsKGFsbHVyZXMpKQoJ ewoJCVNDX3NldF9lcnJvcihzdG10LCBTVE1UX0VYRUNfRVJST1IsICJQR0FQSV9UYWJsZVByaXZp bGVnZXMgcXVlcnkgZXJyb3IiLCBmdW5jKTsKCQlnb3RvIGNsZWFudXA7Cgl9Cgl1c2VyY291bnQg PSAoSW50NCkgUVJfZ2V0X251bV9jYWNoZWRfdHVwbGVzKGFsbHVyZXMpOwoJdXNlcmFjbCA9IChj aGFyICgqKVtBQ0xNQVhdKSBtYWxsb2ModXNlcmNvdW50ICogc2l6ZW9mKGNoYXIgW0FDTE1BWF0p KTsKCWlmICghdXNlcmFjbCkKCXsKCQlTQ19zZXRfZXJyb3Ioc3RtdCwgU1RNVF9OT19NRU1PUllf RVJST1IsICJDb3VsZG4ndCBhbGxvY2F0ZSBtZW1vcnkgZm9yIHVzZXIgYWNsLiIsIGZ1bmMpOwoJ CWdvdG8gY2xlYW51cDsKCX0KCWZvciAoaSA9IDA7IGkgPCB0YWJsZWNvdW50OyBpKyspCgl7CgkJ bWVtc2V0KHVzZXJhY2wsIDAsIHVzZXJjb3VudCAqIHNpemVvZihjaGFyW0FDTE1BWF0pKTsKCQlh Y2wgPSAoY2hhciAqKSBRUl9nZXRfdmFsdWVfYmFja2VuZF90ZXh0KHdyZXMsIGksIDIpOwoJCWlm IChhY2wgJiYgYWNsWzBdID09ICd7JykKCQkJdXNlciA9IGFjbCArIDE7CgkJZWxzZQoJCQl1c2Vy ID0gTlVMTDsKCQlmb3IgKDsgdXNlciAmJiAqdXNlcjspCgkJewoJCQlncnBhdXRoID0gRkFMU0U7 CgkJCWlmICh1c2VyWzBdID09ICciJyAmJiBzdHJuY21wKHVzZXIgKyAxLCAiZ3JvdXAgIiwgNikg PT0gMCkKCQkJewoJCQkJdXNlciArPSA3OwoJCQkJZ3JwYXV0aCA9IFRSVUU7CgkJCX0KCQkJaWYg KGRlbGltID0gc3RyY2hyKHVzZXIsICc9JyksICFkZWxpbSkKCQkJCWJyZWFrOwoJCQkqZGVsaW0g PSAnXDAnOwoJCQlhdXRoID0gZGVsaW0gKyAxOwoJCQlpZiAoZ3JwYXV0aCkKCQkJewoJCQkJaWYg KGRlbGltID0gc3RyY2hyKGF1dGgsICciJyksIGRlbGltKQoJCQkJewoJCQkJCSpkZWxpbSA9ICdc MCc7CgkJCQkJZGVsaW0rKzsKCQkJCX0KCQkJfQoJCQllbHNlIGlmIChkZWxpbSA9IHN0cmNocihh dXRoLCAnLCcpLCBkZWxpbSkKCQkJCSpkZWxpbSA9ICdcMCc7CgkJCWVsc2UgaWYgKGRlbGltID0g c3RyY2hyKGF1dGgsICd9JyksIGRlbGltKQoJCQkJKmRlbGltID0gJ1wwJzsKCQkJaWYgKGdycGF1 dGgpIC8qIGhhbmRsZSBncm91cCBwcml2aWxlZ2UgKi8KCQkJewoJCQkJUVJlc3VsdENsYXNzCSpn cmVzOwoJCQkJaW50CQlpOwoJCQkJY2hhcgkqZ3JvbGlzdCwgKnVpZCwgKmRlbG07CgoJCQkJcmVz ZXRQUUV4cEJ1ZmZlcigmcHJvY19xdWVyeSk7CgkJCQlhcHBlbmRQUUV4cEJ1ZmZlcigmcHJvY19x dWVyeSwgInNlbGVjdCBncm9saXN0IGZyb20gcGdfZ3JvdXAgd2hlcmUgZ3JvbmFtZSA9ICclcyci LCB1c2VyKTsKCQkJCWlmIChQUUV4cEJ1ZmZlckRhdGFCcm9rZW4ocHJvY19xdWVyeSkpCgkJCQl7 CgkJCQkJU0Nfc2V0X2Vycm9yKHN0bXQsIFNUTVRfTk9fTUVNT1JZX0VSUk9SLCAiT3V0IG9mIG1l bW9yeSBpbiBQR0FQSV9UYWJsZVByaXZpbGVnZXMoKSIsIGZ1bmMpOwoJCQkJCWdvdG8gY2xlYW51 cDsKCQkJCX0KCQkJCWlmIChncmVzID0gQ0Nfc2VuZF9xdWVyeShjb25uLCBwcm9jX3F1ZXJ5LmRh dGEsIE5VTEwsIFJFQURfT05MWV9RVUVSWSwgc3RtdCksICFRUl9jb21tYW5kX21heWJlX3N1Y2Nl c3NmdWwoZ3JlcykpCgkJCQl7CgkJCQkJZ3JvbGlzdCA9IFFSX2dldF92YWx1ZV9iYWNrZW5kX3Rl eHQoZ3JlcywgMCwgMCk7CgkJCQkJaWYgKGdyb2xpc3QgJiYgZ3JvbGlzdFswXSA9PSAneycpCgkJ CQkJewoJCQkJCQlmb3IgKHVpZCA9IGdyb2xpc3QgKyAxOyAqdWlkOykKCQkJCQkJewoJCQkJCQkJ aWYgKGRlbG0gPSBzdHJjaHIodWlkLCAnLCcpLCBkZWxtKQoJCQkJCQkJCSpkZWxtID0gJ1wwJzsK CQkJCQkJCWVsc2UgaWYgKGRlbG0gPSBzdHJjaHIodWlkLCAnfScpLCBkZWxtKQoJCQkJCQkJCSpk ZWxtID0gJ1wwJzsKTVlMT0coMCwgImd1aWQ9JXNcbiIsIHVpZCk7CgkJCQkJCQlmb3IgKGkgPSAw OyBpIDwgdXNlcmNvdW50OyBpKyspCgkJCQkJCQl7CgkJCQkJCQkJaWYgKHN0cmNtcChRUl9nZXRf dmFsdWVfYmFja2VuZF90ZXh0KGFsbHVyZXMsIGksIDEpLCB1aWQpID09IDApCgkJCQkJCQkJCXVz ZXJhY2xfdXBkKHVzZXJhY2wsIGFsbHVyZXMsIFFSX2dldF92YWx1ZV9iYWNrZW5kX3RleHQoYWxs dXJlcywgaSwgMCksIGF1dGgpOwoJCQkJCQkJfQoJCQkJCQkJdWlkID0gZGVsbSArIDE7CgkJCQkJ CX0KCQkJCQl9CgkJCQl9CgkJCQlRUl9EZXN0cnVjdG9yKGdyZXMpOwoJCQl9CgkJCWVsc2UKCQkJ CXVzZXJhY2xfdXBkKHVzZXJhY2wsIGFsbHVyZXMsIHVzZXIsIGF1dGgpOwoJCQlpZiAoIWRlbGlt KQoJCQkJYnJlYWs7CgkJCXVzZXIgPSBkZWxpbSArIDE7CgkJfQoJCXJlbG4gPSBRUl9nZXRfdmFs dWVfYmFja2VuZF90ZXh0KHdyZXMsIGksIDApOwoJCW93bmVyID0gUVJfZ2V0X3ZhbHVlX2JhY2tl bmRfdGV4dCh3cmVzLCBpLCAxKTsKCQlzY2hubSA9IFFSX2dldF92YWx1ZV9iYWNrZW5kX3RleHQo d3JlcywgaSwgMyk7CgkJLyogVGhlIG93bmVyIGhhcyBhbGwgcHJpdmlsZWdlcyAqLwoJCXVzZXJh Y2xfdXBkKHVzZXJhY2wsIGFsbHVyZXMsIG93bmVyLCBBTExfUFJJVklMSUdFUyk7CgkJZm9yIChq ID0gMDsgaiA8IHVzZXJjb3VudDsgaisrKQoJCXsKCQkJdXNlciA9IFFSX2dldF92YWx1ZV9iYWNr ZW5kX3RleHQoYWxsdXJlcywgaiwgMCk7CgkJCXN1ID0gKHN0cmNtcChRUl9nZXRfdmFsdWVfYmFj a2VuZF90ZXh0KGFsbHVyZXMsIGosIDIpLCAidCIpID09IDApOwoJCQlzeXMgPSAoc3RyY21wKHVz ZXIsIG93bmVyKSA9PSAwKTsKCQkJLyogU3VwZXIgdXNlciBoYXMgYWxsIHByaXZpbGVnZXMgKi8K CQkJaWYgKHN1KQoJCQkJdXNlcmFjbF91cGQodXNlcmFjbCwgYWxsdXJlcywgdXNlciwgQUxMX1BS SVZJTElHRVMpOwoJCQlmb3IgKGsgPSAwOyBrIDwgQUNMTUFYOyBrKyspCgkJCXsKCQkJCWlmICgh dXNlcmFjbFtqXVtrXSkKCQkJCQlicmVhazsKCQkJCXN3aXRjaCAodXNlcmFjbFtqXVtrXSkKCQkJ CXsKCQkJCQljYXNlICdSJzogLyogcnVsZSAqLwoJCQkJCWNhc2UgJ3QnOiAvKiB0cmlnZ2VyICov CgkJCQkJCWNvbnRpbnVlOwoJCQkJfQoJCQkJdHVwbGUgPSBRUl9BZGROZXcocmVzKTsKCQkJCXNl dF90dXBsZWZpZWxkX3N0cmluZygmdHVwbGVbVEFCUFJJVl9UQUJMRV9DQVRdLCBDdXJyQ2F0KGNv bm4pKTsKCQkJCXNldF90dXBsZWZpZWxkX3N0cmluZygmdHVwbGVbVEFCUFJJVl9UQUJMRV9TQ0hF TV0sIEdFVF9TQ0hFTUFfTkFNRShzY2hubSkpOwoJCQkJc2V0X3R1cGxlZmllbGRfc3RyaW5nKCZ0 dXBsZVtUQUJQUklWX1RBQkxFX05BTUVdLCByZWxuKTsKCQkJCWlmIChzdSB8fCBzeXMpCgkJCQkJ c2V0X3R1cGxlZmllbGRfc3RyaW5nKCZ0dXBsZVtUQUJQUklWX0dSQU5UT1JdLCAiX1NZU1RFTSIp OwoJCQkJZWxzZQoJCQkJCXNldF90dXBsZWZpZWxkX3N0cmluZygmdHVwbGVbVEFCUFJJVl9HUkFO VE9SXSwgb3duZXIpOwoJCQkJTVlMT0coMCwgInVzZXI9JXNcbiIsIHVzZXIpOwoJCQkJc2V0X3R1 cGxlZmllbGRfc3RyaW5nKCZ0dXBsZVtUQUJQUklWX0dSQU5URUVdLCB1c2VyKTsKCQkJCXN3aXRj aCAodXNlcmFjbFtqXVtrXSkKCQkJCXsKCQkJCQljYXNlICdhJzoKCQkJCQkJcHJpdiA9ICJJTlNF UlQiOwoJCQkJCQlicmVhazsKCQkJCQljYXNlICdyJzoKCQkJCQkJcHJpdiA9ICJTRUxFQ1QiOwoJ CQkJCQlicmVhazsKCQkJCQljYXNlICd3JzoKCQkJCQkJcHJpdiA9ICJVUERBVEUiOwoJCQkJCQli cmVhazsKCQkJCQljYXNlICdkJzoKCQkJCQkJcHJpdiA9ICJERUxFVEUiOwoJCQkJCQlicmVhazsK CQkJCQljYXNlICd4JzoKCQkJCQkJcHJpdiA9ICJSRUZFUkVOQ0VTIjsKCQkJCQkJYnJlYWs7CgkJ CQkJZGVmYXVsdDoKCQkJCQkJcHJpdiA9IE5VTExfU1RSSU5HOwoJCQkJfQoJCQkJc2V0X3R1cGxl ZmllbGRfc3RyaW5nKCZ0dXBsZVtUQUJQUklWX1BSSVZJTEVHRV0sIHByaXYpOwoJCQkJLyogVGhl IG93bmVyIGFuZCB0aGUgc3VwZXIgdXNlciBhcmUgZ3JhbnRhYmxlICovCgkJCQlpZiAoc3lzIHx8 IHN1KQoJCQkJCXNldF90dXBsZWZpZWxkX3N0cmluZygmdHVwbGVbVEFCUFJJVl9JU19HUkFOVEFC TEVdLCAiWUVTIik7CgkJCQllbHNlCgkJCQkJc2V0X3R1cGxlZmllbGRfc3RyaW5nKCZ0dXBsZVtU QUJQUklWX0lTX0dSQU5UQUJMRV0sICJOTyIpOwoJCQl9CgkJfQoJfQoJcmV0ID0gU1FMX1NVQ0NF U1M7CgpjbGVhbnVwOgojdW5kZWYJcmV0dXJuCglpZiAoZXNjU2NoZW1hTmFtZSkKCQlmcmVlKGVz Y1NjaGVtYU5hbWUpOwoJaWYgKGVzY1RhYmxlTmFtZSkKCQlmcmVlKGVzY1RhYmxlTmFtZSk7Cglp ZiAodXNlcmFjbCkKCQlmcmVlKHVzZXJhY2wpOwoJaWYgKCFQUUV4cEJ1ZmZlckRhdGFCcm9rZW4o cHJvY19xdWVyeSkpCgkJdGVybVBRRXhwQnVmZmVyKCZwcm9jX3F1ZXJ5KTsKCWlmICh3cmVzKQoJ CVFSX0Rlc3RydWN0b3Iod3Jlcyk7CglpZiAoYWxsdXJlcykKCQlRUl9EZXN0cnVjdG9yKGFsbHVy ZXMpOwoJcmV0dXJuIHJldDsKfQoKCnN0YXRpYyBSRVRDT0RFCQlTUUxfQVBJClBHQVBJX0ZvcmVp Z25LZXlzX25ldyhIU1RNVCBoc3RtdCwKCQkJCQkgIGNvbnN0IFNRTENIQVIgKiBzelBrVGFibGVR dWFsaWZpZXIsIC8qIE9BIFgqLwoJCQkJCSAgU1FMU01BTExJTlQgY2JQa1RhYmxlUXVhbGlmaWVy LAoJCQkJCSAgY29uc3QgU1FMQ0hBUiAqIHN6UGtUYWJsZU93bmVyLCAvKiBPQSBFKi8KCQkJCQkg IFNRTFNNQUxMSU5UIGNiUGtUYWJsZU93bmVyLAoJCQkJCSAgY29uc3QgU1FMQ0hBUiAqIHN6UGtU YWJsZU5hbWUsIC8qIE9BKFIpIEUqLwoJCQkJCSAgU1FMU01BTExJTlQgY2JQa1RhYmxlTmFtZSwK CQkJCQkgIGNvbnN0IFNRTENIQVIgKiBzekZrVGFibGVRdWFsaWZpZXIsIC8qIE9BIFgqLwoJCQkJ CSAgU1FMU01BTExJTlQgY2JGa1RhYmxlUXVhbGlmaWVyLAoJCQkJCSAgY29uc3QgU1FMQ0hBUiAq IHN6RmtUYWJsZU93bmVyLCAvKiBPQSBFKi8KCQkJCQkgIFNRTFNNQUxMSU5UIGNiRmtUYWJsZU93 bmVyLAoJCQkJCSAgY29uc3QgU1FMQ0hBUiAqIHN6RmtUYWJsZU5hbWUsIC8qIE9BKFIpIEUqLwoJ CQkJCSAgU1FMU01BTExJTlQgY2JGa1RhYmxlTmFtZSkKewoJQ1NUUiBmdW5jID0gIlBHQVBJX0Zv cmVpZ25LZXlzIjsKCVN0YXRlbWVudENsYXNzCSpzdG10ID0gKFN0YXRlbWVudENsYXNzICopIGhz dG10OwoJUVJlc3VsdENsYXNzCSpyZXMgPSBOVUxMOwoJUkVUQ09ERQkJcmV0ID0gU1FMX0VSUk9S LCByZXN1bHQ7CglQUUV4cEJ1ZmZlckRhdGEJCXRhYmxlc19xdWVyeSA9IHswfTsKCWNoYXIJCSpw a190YWJsZV9uZWVkZWQgPSBOVUxMLCAqZXNjVGFibGVOYW1lID0gTlVMTDsKCWNoYXIJCSpma190 YWJsZV9uZWVkZWQgPSBOVUxMOwoJY2hhcgkJc2NoZW1hX25lZWRlZFtTQ0hFTUFfTkFNRV9TVE9S QUdFX0xFTiArIDFdOwoJY2hhcgkJKmVzY1NjaGVtYU5hbWU7CgljaGFyCQljYXROYW1lW1NDSEVN QV9OQU1FX1NUT1JBR0VfTEVOXSwKCQkJc2NtTmFtZTFbU0NIRU1BX05BTUVfU1RPUkFHRV9MRU5d LAoJCQlzY21OYW1lMltTQ0hFTUFfTkFNRV9TVE9SQUdFX0xFTl07Cgljb25zdCBjaGFyCSpyZWxx dWFsOwoJQ29ubmVjdGlvbkNsYXNzICpjb25uID0gU0NfZ2V0X2Nvbm4oc3RtdCk7CgoJY29uc3Qg Y2hhciAqZXFfc3RyaW5nOwoKCU1ZTE9HKDAsICJlbnRlcmluZy4uLnN0bXQ9JXBcbiIsIHN0bXQp OwoKCWlmIChyZXN1bHQgPSBTQ19pbml0aWFsaXplX2FuZF9yZWN5Y2xlKHN0bXQpLCBTUUxfU1VD Q0VTUyAhPSByZXN1bHQpCgkJcmV0dXJuIHJlc3VsdDsKCglzY2hlbWFfbmVlZGVkWzBdID0gJ1ww JzsKI2RlZmluZQlyZXR1cm4JRE9OVF9DQUxMX1JFVFVSTl9GUk9NX0hFUkU/Pz8KCglwa190YWJs ZV9uZWVkZWQgPSBtYWtlX3N0cmluZyhzelBrVGFibGVOYW1lLCBjYlBrVGFibGVOYW1lLCBOVUxM LCAwKTsKCWZrX3RhYmxlX25lZWRlZCA9IG1ha2Vfc3RyaW5nKHN6RmtUYWJsZU5hbWUsIGNiRmtU YWJsZU5hbWUsIE5VTEwsIDApOwoKCWVxX3N0cmluZyA9IGdlbl9vcGVzdHIoZXFvcCwgY29ubik7 CgoJLyoKCSAqIENhc2UgIzIgLS0gR2V0IHRoZSBmb3JlaWduIGtleXMgaW4gdGhlIHNwZWNpZmll ZCB0YWJsZSAoZmt0YWIpIHRoYXQKCSAqIHJlZmVyIHRvIHRoZSBwcmltYXJ5IGtleXMgb2Ygb3Ro ZXIgdGFibGUocykuCgkgKi8KCWlmIChOVUxMICE9IGZrX3RhYmxlX25lZWRlZCkKCXsKCQlNWUxP RygwLCAiIEZvcmVpZ24gS2V5IENhc2UgIzJcbiIpOwoJCWVzY1RhYmxlTmFtZSA9IHNpbXBsZUNh dGFsb2dFc2NhcGUoKFNRTENIQVIgKikgZmtfdGFibGVfbmVlZGVkLCBTUUxfTlRTLCBjb25uKTsK CQlzY2hlbWFfc3RyKHNjaGVtYV9uZWVkZWQsIHNpemVvZihzY2hlbWFfbmVlZGVkKSwgc3pGa1Rh YmxlT3duZXIsIGNiRmtUYWJsZU93bmVyLCBUQUJMRV9JU19WQUxJRChzekZrVGFibGVOYW1lLCBj YkZrVGFibGVOYW1lKSwgY29ubik7CgkJcmVscXVhbCA9ICJcbiAgIGFuZCAgY29ucmVsaWQgPSBj Lm9pZCI7Cgl9CgkvKgoJICogQ2FzZSAjMSAtLSBHZXQgdGhlIGZvcmVpZ24ga2V5cyBpbiBvdGhl ciB0YWJsZXMgdGhhdCByZWZlciB0byB0aGUKCSAqIHByaW1hcnkga2V5IGluIHRoZSBzcGVjaWZp ZWQgdGFibGUgKHBrdGFiKS4JaS5lLiwgV2hvIHBvaW50cyB0bwoJICogbWU/CgkgKi8KCWVsc2Ug aWYgKE5VTEwgIT0gcGtfdGFibGVfbmVlZGVkKQoJewoJCWVzY1RhYmxlTmFtZSA9IHNpbXBsZUNh dGFsb2dFc2NhcGUoKFNRTENIQVIgKikgcGtfdGFibGVfbmVlZGVkLCBTUUxfTlRTLCBjb25uKTsK CQlzY2hlbWFfc3RyKHNjaGVtYV9uZWVkZWQsIHNpemVvZihzY2hlbWFfbmVlZGVkKSwgc3pQa1Rh YmxlT3duZXIsIGNiUGtUYWJsZU93bmVyLCBUQUJMRV9JU19WQUxJRChzelBrVGFibGVOYW1lLCBj YlBrVGFibGVOYW1lKSwgY29ubik7CgkJcmVscXVhbCA9ICJcbiAgIGFuZCAgY29uZnJlbGlkID0g Yy5vaWQiOwoJfQoJZWxzZQoJewoJCVNDX3NldF9lcnJvcihzdG10LCBTVE1UX0lOVEVSTkFMX0VS Uk9SLCAiTm8gdGFibGVzIHNwZWNpZmllZCB0byBQR0FQSV9Gb3JlaWduS2V5cy4iLCBmdW5jKTsK CQlnb3RvIGNsZWFudXA7Cgl9CgoJaWYgKE5VTEwgIT0gQ3VyckNhdChjb25uKSkKCQlTUFJJTlRG X0ZJWEVEKGNhdE5hbWUsICInJXMnOjpuYW1lIiwgQ3VyckNhdChjb25uKSk7CgllbHNlCgkJU1RS Q1BZX0ZJWEVEKGNhdE5hbWUsICJOVUxMOjpuYW1lIik7CglTVFJDUFlfRklYRUQoc2NtTmFtZTEs ICJuMi5uc3BuYW1lIik7CglTVFJDUFlfRklYRUQoc2NtTmFtZTIsICJuMS5uc3BuYW1lIik7Cgll c2NTY2hlbWFOYW1lID0gc2ltcGxlQ2F0YWxvZ0VzY2FwZSgoU1FMQ0hBUiAqKSBzY2hlbWFfbmVl ZGVkLCBTUUxfTlRTLCBjb25uKTsKCglpbml0UFFFeHBCdWZmZXIoJnRhYmxlc19xdWVyeSk7CiNk ZWZpbmUJcmV0dXJuCURPTlRfQ0FMTF9SRVRVUk5fRlJPTV9IRVJFPz8/CglwcmludGZQUUV4cEJ1 ZmZlcigmdGFibGVzX3F1ZXJ5LAoJCSJzZWxlY3QiCgkJIgklcyBhcyBcIlBLVEFCTEVfQ0FUXCIi CgkJIixcbgklcyBhcyBcIlBLVEFCTEVfU0NIRU1cIiIKCQkiLFxuCWMyLnJlbG5hbWUgYXMgXCJQ S1RBQkxFX05BTUVcIiIKCQkiLFxuCWEyLmF0dG5hbWUgYXMgXCJQS0NPTFVNTl9OQU1FXCIiCgkJ IixcbgklcyBhcyBcIkZLVEFCTEVfQ0FUXCIiCgkJIixcbgklcyBhcyBcIkZLVEFCTEVfU0NIRU1c IiIKCQkiLFxuCWMxLnJlbG5hbWUgYXMgXCJGS1RBQkxFX05BTUVcIiIKCQkiLFxuCWExLmF0dG5h bWUgYXMgXCJGS0NPTFVNTl9OQU1FXCIiCgkJIixcbglpOjppbnQyIGFzIFwiS0VZX1NFUVwiIgoJ CSIsXG4JY2FzZSByZWYuY29uZnVwZHR5cGUiCgkJIlxuCQl3aGVuICdjJyB0aGVuICVkOjppbnQy IgoJCSJcbgkJd2hlbiAnbicgdGhlbiAlZDo6aW50MiIKCQkiXG4JCXdoZW4gJ2QnIHRoZW4gJWQ6 OmludDIiCgkJIlxuCQl3aGVuICdyJyB0aGVuICVkOjppbnQyIgoJCSJcbgkJZWxzZSAlZDo6aW50 MiIKCQkiXG4JZW5kIGFzIFwiVVBEQVRFX1JVTEVcIiIKCQkiLFxuCWNhc2UgcmVmLmNvbmZkZWx0 eXBlIgoJCSJcbgkJd2hlbiAnYycgdGhlbiAlZDo6aW50MiIKCQkiXG4JCXdoZW4gJ24nIHRoZW4g JWQ6OmludDIiCgkJIlxuCQl3aGVuICdkJyB0aGVuICVkOjppbnQyIgoJCSJcbgkJd2hlbiAncicg dGhlbiAlZDo6aW50MiIKCQkiXG4JCWVsc2UgJWQ6OmludDIiCgkJIlxuCWVuZCBhcyBcIkRFTEVU RV9SVUxFXCIiCgkJIixcbglyZWYuY29ubmFtZSBhcyBcIkZLX05BTUVcIiIKCQkiLFxuCWNuLmNv bm5hbWUgYXMgXCJQS19OQU1FXCIiCgkJIixcbgljYXNlIgoJCSJcbgkJd2hlbiByZWYuY29uZGVm ZXJyYWJsZSB0aGVuIgoJCSJcbgkJCWNhc2UiCgkJIlxuCQkJd2hlbiByZWYuY29uZGVmZXJyZWQg dGhlbiAlZDo6aW50MiIKCQkiXG4JCQllbHNlICVkOjppbnQyIgoJCSJcbgkJCWVuZCIKCQkiXG4J CWVsc2UgJWQ6OmludDIiCgkJIlxuCWVuZCBhcyBcIkRFRkVSUkFCSUxJVFlcIiIKCQkiXG4gZnJv bSIKCQkiXG4gKCgoKCgoKCIKCQkiIChzZWxlY3QgY24ub2lkLCBjb25yZWxpZCwgY29ua2V5LCBj b25mcmVsaWQsIGNvbmZrZXkiCgkJIixcbgkgZ2VuZXJhdGVfc2VyaWVzKGFycmF5X2xvd2VyKGNv bmtleSwgMSksIGFycmF5X3VwcGVyKGNvbmtleSwgMSkpIGFzIGkiCgkJIixcbgkgY29uZnVwZHR5 cGUsIGNvbmZkZWx0eXBlLCBjb25uYW1lIgoJCSIsXG4JIGNvbmRlZmVycmFibGUsIGNvbmRlZmVy cmVkIgoJCSJcbiAgZnJvbSBwZ19jYXRhbG9nLnBnX2NvbnN0cmFpbnQgY24iCgkJIixcbglwZ19j YXRhbG9nLnBnX2NsYXNzIGMiCgkJIixcbglwZ19jYXRhbG9nLnBnX25hbWVzcGFjZSBuIgoJCSJc biAgd2hlcmUgY29udHlwZSA9ICdmJyAlcyIKCQkiXG4gICBhbmQgIHJlbG5hbWUgJXMnJXMnIgoJ CSJcbiAgIGFuZCAgbi5vaWQgPSBjLnJlbG5hbWVzcGFjZSIKCQkiXG4gICBhbmQgIG4ubnNwbmFt ZSAlcyclcyciCgkJIlxuICkgcmVmIgoJCSJcbiBpbm5lciBqb2luIHBnX2NhdGFsb2cucGdfY2xh c3MgYzEiCgkJIlxuICBvbiBjMS5vaWQgPSByZWYuY29ucmVsaWQpIgoJCSJcbiBpbm5lciBqb2lu IHBnX2NhdGFsb2cucGdfbmFtZXNwYWNlIG4xIgoJCSJcbiAgb24gIG4xLm9pZCA9IGMxLnJlbG5h bWVzcGFjZSkiCgkJIlxuIGlubmVyIGpvaW4gcGdfY2F0YWxvZy5wZ19hdHRyaWJ1dGUgYTEiCgkJ IlxuICBvbiAgYTEuYXR0cmVsaWQgPSBjMS5vaWQiCgkJIlxuICBhbmQgIGExLmF0dG51bSA9IGNv bmtleVtpXSkiCgkJIlxuIGlubmVyIGpvaW4gcGdfY2F0YWxvZy5wZ19jbGFzcyBjMiIKCQkiXG4g IG9uICBjMi5vaWQgPSByZWYuY29uZnJlbGlkKSIKCQkiXG4gaW5uZXIgam9pbiBwZ19jYXRhbG9n LnBnX25hbWVzcGFjZSBuMiIKCQkiXG4gIG9uICBuMi5vaWQgPSBjMi5yZWxuYW1lc3BhY2UpIgoJ CSJcbiBpbm5lciBqb2luIHBnX2NhdGFsb2cucGdfYXR0cmlidXRlIGEyIgoJCSJcbiAgb24gIGEy LmF0dHJlbGlkID0gYzIub2lkIgoJCSJcbiAgYW5kICBhMi5hdHRudW0gPSBjb25ma2V5W2ldKSIK CQkiXG4gbGVmdCBvdXRlciBqb2luIHBnX2NhdGFsb2cucGdfY29uc3RyYWludCBjbiIKCQkiXG4g IG9uIGNuLmNvbnJlbGlkID0gcmVmLmNvbmZyZWxpZCIKCQkiXG4gIGFuZCBjbi5jb250eXBlID0g J3AnKSIKCQksIGNhdE5hbWUKCQksIHNjbU5hbWUxCgkJLCBjYXROYW1lCgkJLCBzY21OYW1lMgoJ CSwgU1FMX0NBU0NBREUKCQksIFNRTF9TRVRfTlVMTAoJCSwgU1FMX1NFVF9ERUZBVUxUCgkJLCBT UUxfUkVTVFJJQ1QKCQksIFNRTF9OT19BQ1RJT04KCQksIFNRTF9DQVNDQURFCgkJLCBTUUxfU0VU X05VTEwKCQksIFNRTF9TRVRfREVGQVVMVAoJCSwgU1FMX1JFU1RSSUNUCgkJLCBTUUxfTk9fQUNU SU9OCgkJLCBTUUxfSU5JVElBTExZX0RFRkVSUkVECgkJLCBTUUxfSU5JVElBTExZX0lNTUVESUFU RQoJCSwgU1FMX05PVF9ERUZFUlJBQkxFCgkJLCByZWxxdWFsCgkJLCBlcV9zdHJpbmcsIGVzY1Rh YmxlTmFtZQoJCSwgZXFfc3RyaW5nLCBlc2NTY2hlbWFOYW1lKTsKCglmcmVlKGVzY1NjaGVtYU5h bWUpOwoJaWYgKE5VTEwgIT0gcGtfdGFibGVfbmVlZGVkICYmCgkgICAgTlVMTCAhPSBma190YWJs ZV9uZWVkZWQpCgl7CgkJZnJlZShlc2NUYWJsZU5hbWUpOwoJCWVzY1RhYmxlTmFtZSA9IHNpbXBs ZUNhdGFsb2dFc2NhcGUoKFNRTENIQVIgKikgcGtfdGFibGVfbmVlZGVkLCBTUUxfTlRTLCBjb25u KTsKCQlhcHBlbmRQUUV4cEJ1ZmZlcigmdGFibGVzX3F1ZXJ5LAoJCQkJIlxuIHdoZXJlIGMyLnJl bG5hbWUgJXMnJXMnIiwKCQkJCWVxX3N0cmluZywgZXNjVGFibGVOYW1lKTsKCX0KCWFwcGVuZFBR RXhwQnVmZmVyU3RyKCZ0YWJsZXNfcXVlcnksICJcbiAgb3JkZXIgYnkgcmVmLm9pZCwgcmVmLmki KTsKCglpZiAoUFFFeHBCdWZmZXJEYXRhQnJva2VuKHRhYmxlc19xdWVyeSkpCgl7CgkJU0Nfc2V0 X2Vycm9yKHN0bXQsIFNUTVRfTk9fTUVNT1JZX0VSUk9SLCAiT3V0IG9mIG1lbW9yeSBpbiBQR0FQ SV9TcGVjaWFsQ29sdW1ucygpIiwgZnVuYyk7CgkJZ290byBjbGVhbnVwOwoJfQoJaWYgKHJlcyA9 IENDX3NlbmRfcXVlcnkoY29ubiwgdGFibGVzX3F1ZXJ5LmRhdGEsIE5VTEwsIFJFQURfT05MWV9R VUVSWSwgc3RtdCksICFRUl9jb21tYW5kX21heWJlX3N1Y2Nlc3NmdWwocmVzKSkKCXsKCQlTQ19z ZXRfZXJyb3Ioc3RtdCwgU1RNVF9FWEVDX0VSUk9SLCAiUEdBUElfRm9yZWlnbktleXMgcXVlcnkg ZXJyb3IiLCBmdW5jKTsKCQlRUl9EZXN0cnVjdG9yKHJlcyk7CgkJZ290byBjbGVhbnVwOwoJfQoJ U0Nfc2V0X1Jlc3VsdChzdG10LCByZXMpOwoJcmV0ID0gU1FMX1NVQ0NFU1M7CgpjbGVhbnVwOgoj dW5kZWYJcmV0dXJuCgoJLyoKCSAqIGFsc28sIHRoaW5ncyBuZWVkIHRvIHRoaW5rIHRoYXQgdGhp cyBzdGF0ZW1lbnQgaXMgZmluaXNoZWQgc28gdGhlCgkgKiByZXN1bHRzIGNhbiBiZSByZXRyaWV2 ZWQuCgkgKi8KCWlmIChTUUxfU1VDQ0VFREVEKHJldCkpCgl7CgkJc3RtdC0+c3RhdHVzID0gU1RN VF9GSU5JU0hFRDsKCQlleHRlbmRfY29sdW1uX2JpbmRpbmdzKFNDX2dldF9BUkRGKHN0bXQpLCBR Ul9OdW1SZXN1bHRDb2xzKHJlcykpOwoJfQoJaWYgKHBrX3RhYmxlX25lZWRlZCkKCQlmcmVlKHBr X3RhYmxlX25lZWRlZCk7CglpZiAoZXNjVGFibGVOYW1lKQoJCWZyZWUoZXNjVGFibGVOYW1lKTsK CWlmIChma190YWJsZV9uZWVkZWQpCgkJZnJlZShma190YWJsZV9uZWVkZWQpOwoJaWYgKCFQUUV4 cEJ1ZmZlckRhdGFCcm9rZW4odGFibGVzX3F1ZXJ5KSkKCQl0ZXJtUFFFeHBCdWZmZXIoJnRhYmxl c19xdWVyeSk7CgkvKiBzZXQgdXAgdGhlIGN1cnJlbnQgdHVwbGUgcG9pbnRlciBmb3IgU1FMRmV0 Y2ggKi8KCXN0bXQtPmN1cnJUdXBsZSA9IC0xOwoJU0Nfc2V0X3Jvd3NldF9zdGFydChzdG10LCAt MSwgRkFMU0UpOwoJU0Nfc2V0X2N1cnJlbnRfY29sKHN0bXQsIC0xKTsKCglNWUxPRygwLCAibGVh dmluZyBzdG10PSVwLCByZXQ9JWRcbiIsIHN0bXQsIHJldCk7CglyZXR1cm4gcmV0Owp9Cg== ------=_Part_96870_920188474.1697026578197 Content-Type: text/x-c; name=catalogfunctions-test.c Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="catalogfunctions-test.c" LyoKICogVGhpcyB0ZXN0IGlzIHVzZWQgdG8gY2hlY2sgdGhlIG91dHB1dCBhbmQgcHJvY2Vzc2lu ZyBvZiB0aGUgY2F0YWxvZwogKiBmdW5jdGlvbnMgbGlzdGVkIGFzIGJlbG93OgogKiAtIFNRTEdl dFR5cGVJbmZvCiAqIC0gU1FMVGFibGVzCiAqIC0gU1FMQ29sdW1ucwogKiAtIFNRTFNwZWNpYWxD b2x1bW5zCiAqIC0gU1FMU3RhdGlzdGljcwogKiAtIFNRTFByaW1hcnlLZXlzCiAqIC0gU1FMRm9y ZWlnbktleXMKICogLSBTUUxQcm9jZWR1cmVDb2x1bW5zCiAqIC0gU1FMVGFibGVQcml2aWxlZ2Vz CiAqIC0gU1FMQ29sdW1uUHJpdmlsZWdlcwogKiAtIFNRTFByb2NlZHVyZXMKICogLSBTUUxHZXRJ bmZvCiAqLwojaW5jbHVkZSA8c3RyaW5nLmg+CiNpbmNsdWRlIDxzdGRpby5oPgojaW5jbHVkZSA8 c3RkbGliLmg+CgojaW5jbHVkZSAiY29tbW9uLmgiCgovKiBkZWZpbmUgYSBtYWNybyB0byBzaW1w bGlmeSBmdW5jdGlvbiBjYWxscyAqLwojZGVmaW5lIFBSSU5UX1JFU1VMVF9TRVJJRVMoaHN0bXQs IGlkYXJyYXksIHJvd2NvdW50KSBwcmludF9yZXN1bHRfc2VyaWVzKGhzdG10LCBpZGFycmF5LCBz aXplb2YoaWRhcnJheSkvc2l6ZW9mKGlkYXJyYXlbMF0pLCByb3djb3VudCwgRkFMU0UpCgppbnQK bWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCnsKCWludAkJCXJjOwoJSFNUTVQJCWhzdG10ID0g U1FMX05VTExfSFNUTVQ7CgkvKiBDYXNlcyB3aGVyZSBvdXRwdXQgaXMgbGltaXRlZCB0byByZWxl dmFudCBpbmZvcm1hdGlvbiBvbmx5ICovCglTUUxTTUFMTElOVCBzcWxfdGFiX3ByaXZpbGVnZXNf aWRzWzZdID0gezEsIDIsIDMsIDQsIDYsIDd9OwoJU1FMU01BTExJTlQgc3FsX2NvbHVtbl9wcml2 aWxlZ2VzX2lkc1s2XSA9IHsxLCAyLCAzLCA0LCA3LCA4fTsKCVNRTFNNQUxMSU5UIHNxbF9jb2x1 bW5faWRzWzZdID0gezEsIDIsIDMsIDQsIDUsIDZ9OwoJU1FMU01BTExJTlQgc3FsX3Byb19jb2x1 bW5faWRzW10gPSB7MSwgMiwgMywgNCwgNSwgNiwgN307CgljaGFyCQlidWZbMTAwMF07CgljaGFy CQl1c2VybmFtZVsxMDBdOwoJU1FMU01BTExJTlQJbGVuOwoJaW50CQkJaTsKCgl0ZXN0X2Nvbm5l Y3QoKTsKCglyYyA9IFNRTEFsbG9jSGFuZGxlKFNRTF9IQU5ETEVfU1RNVCwgY29ubiwgJmhzdG10 KTsKCWlmICghU1FMX1NVQ0NFRURFRChyYykpCgl7CgkJcHJpbnRfZGlhZygiZmFpbGVkIHRvIGFs bG9jYXRlIHN0bXQgaGFuZGxlIiwgU1FMX0hBTkRMRV9EQkMsIGNvbm4pOwoJCWV4aXQoMSk7Cgl9 CgoJU1FMRXhlY0RpcmVjdChoc3RtdCwgKFNRTENIQVIgKikgImRyb3AgdGFibGUgaWYgZXhpc3Rz IHRlc3R0YWIyIiwgU1FMX05UUyk7CgkvKiBDaGVjayBmb3IgU1FMR2V0VHlwZUluZm8gKi8KCXBy aW50ZigiQ2hlY2sgZm9yIFNRTFR5cGVJbmZvXG4iKTsKCXJjID0gU1FMR2V0VHlwZUluZm8oaHN0 bXQsIFNRTF9WQVJDSEFSKTsKCUNIRUNLX1NUTVRfUkVTVUxUKHJjLCAiU1FMR2V0VHlwZUluZm8g ZmFpbGVkIiwgaHN0bXQpOwoJcHJpbnRfcmVzdWx0X21ldGEoaHN0bXQpOwoJcHJpbnRfcmVzdWx0 KGhzdG10KTsKCXJjID0gU1FMRnJlZVN0bXQoaHN0bXQsIFNRTF9DTE9TRSk7CglDSEVDS19TVE1U X1JFU1VMVChyYywgIlNRTEZyZWVTdG10IGZhaWxlZCIsIGhzdG10KTsKCgkvKiBDaGVjayBmb3Ig U1FMVGFibGVzICovCglwcmludGYoIkNoZWNrIGZvciBTUUxUYWJsZXNcbiIpOwoJcmMgPSBTUUxU YWJsZXMoaHN0bXQsIE5VTEwsIDAsCgkJCQkgICAoU1FMQ0hBUiAqKSAicHVibGljIiwgU1FMX05U UywKCQkJCSAgIChTUUxDSEFSICopICIlIiwgU1FMX05UUywKCQkJCSAgIChTUUxDSEFSICopICJU QUJMRSIsIFNRTF9OVFMpOwoJQ0hFQ0tfU1RNVF9SRVNVTFQocmMsICJTUUxUYWJsZXMgZmFpbGVk IiwgaHN0bXQpOwoJcHJpbnRfcmVzdWx0X21ldGEoaHN0bXQpOwoJcHJpbnRfcmVzdWx0KGhzdG10 KTsKCXJjID0gU1FMRnJlZVN0bXQoaHN0bXQsIFNRTF9DTE9TRSk7CglDSEVDS19TVE1UX1JFU1VM VChyYywgIlNRTEZyZWVTdG10IGZhaWxlZCIsIGhzdG10KTsKCgkvKiBDaGVjayBmb3IgU1FMQ29s dW1ucyAqLwoJcHJpbnRmKCJDaGVjayBmb3IgU1FMQ29sdW1uc1xuIik7CglyYyA9IFNRTENvbHVt bnMoaHN0bXQsCgkJCQkJTlVMTCwgMCwKCQkJCQkoU1FMQ0hBUiAqKSAicHVibGljIiwgU1FMX05U UywKCQkJCQkoU1FMQ0hBUiAqKSAiJSIsIFNRTF9OVFMsCgkJCQkJTlVMTCwgMCk7CglDSEVDS19T VE1UX1JFU1VMVChyYywgIlNRTENvbHVtbnMgZmFpbGVkIiwgaHN0bXQpOwoJcHJpbnRfcmVzdWx0 X21ldGEoaHN0bXQpOwoJLyoKCSAqIFByaW50IG9ubHkgdGhlIDYgZmlyc3QgY29sdW1ucywgd2Ug ZG8gbm90IHdhbnQgZm9yIGV4YW1wbGUKCSAqIHRvIGdldCB0aGUgT0lEIGluIG91dHB1dCwgYW5k IHRoaXMgaW5mb3JtYXRpb24gbG9va3MgdG8gYmUKCSAqIGVub3VnaC4KCSAqLwoJUFJJTlRfUkVT VUxUX1NFUklFUyhoc3RtdCwgc3FsX2NvbHVtbl9pZHMsIC0xKTsKCXJjID0gU1FMRnJlZVN0bXQo aHN0bXQsIFNRTF9DTE9TRSk7CglDSEVDS19TVE1UX1JFU1VMVChyYywgIlNRTEZyZWVTdG10IGZh aWxlZCIsIGhzdG10KTsKCgkvKiBDaGVjayBmb3IgU1FMQ29sdW1uUHJpdmlsZWdlcyAqLwoJcHJp bnRmKCJDaGVjayBmb3IgU1FMQ29sdW1uUHJpdmlsZWdlc1xuIik7CglyYyA9IFNRTENvbHVtblBy aXZpbGVnZXMoaHN0bXQsCgkJCQkJCQkgTlVMTCwgMCwKCQkJCQkJCSAoU1FMQ0hBUiAqKSAicHVi bGljIiwgU1FMX05UUywKCQkJCQkJCSAoU1FMQ0hBUiAqKSAidGVzdHRhYjEiLCBTUUxfTlRTLAoJ CQkJCQkJIChTUUxDSEFSICopICJpZCIsIFNRTF9OVFMpOwoJQ0hFQ0tfU1RNVF9SRVNVTFQocmMs ICJTUUxDb2x1bW5Qcml2aWxlZ2VzIGZhaWxlZCIsIGhzdG10KTsKCXByaW50X3Jlc3VsdF9tZXRh KGhzdG10KTsKCVBSSU5UX1JFU1VMVF9TRVJJRVMoaHN0bXQsIHNxbF9jb2x1bW5fcHJpdmlsZWdl c19pZHMsIC0xKTsKCXJjID0gU1FMRnJlZVN0bXQoaHN0bXQsIFNRTF9DTE9TRSk7CglDSEVDS19T VE1UX1JFU1VMVChyYywgIlNRTEZyZWVTdG10IGZhaWxlZCIsIGhzdG10KTsKCgkvKiBDaGVjayBm b3IgU1FMU3BlY2lhbENvbHVtbnMgKi8KCXByaW50ZigiQ2hlY2sgZm9yIFNRTFNwZWNpYWxDb2x1 bW5zXG4iKTsKCXJjID0gU1FMU3BlY2lhbENvbHVtbnMoaHN0bXQsIFNRTF9ST1dWRVIsCgkJCQkJ CSAgIE5VTEwsIDAsCgkJCQkJCSAgIChTUUxDSEFSICopICJwdWJsaWMiLCBTUUxfTlRTLAoJCQkJ CQkgICAoU1FMQ0hBUiAqKSAidGVzdHRhYjEiLCBTUUxfTlRTLAoJCQkJCQkgICBTUUxfU0NPUEVf U0VTU0lPTiwKCQkJCQkJICAgU1FMX05PX05VTExTKTsKCUNIRUNLX1NUTVRfUkVTVUxUKHJjLCAi U1FMU3BlY2lhbENvbHVtbnMgZmFpbGVkIiwgaHN0bXQpOwoJcHJpbnRfcmVzdWx0X21ldGEoaHN0 bXQpOwoJcHJpbnRfcmVzdWx0KGhzdG10KTsKCXJjID0gU1FMRnJlZVN0bXQoaHN0bXQsIFNRTF9D TE9TRSk7CglDSEVDS19TVE1UX1JFU1VMVChyYywgIlNRTEZyZWVTdG10IGZhaWxlZCIsIGhzdG10 KTsKCgkvKgoJICogQ2hlY2sgZm9yIFNRTFN0YXRpc3RpY3MuIEl0IGlzIGltcG9ydGFudCB0byBu b3RlIHRoYXQgdGhpcyBmdW5jdGlvbgoJICogcmV0dXJucyBzdGF0aXN0aWNzIGxpa2UgdGhlIG51 bWJlciBvZiBwYWdlcyB1c2VkIGFuZCB0aGUgbnVtYmVyIG9mCgkgKiBpbmRleCBzY2Fucy4KCSAq LwoJcHJpbnRmKCJDaGVjayBmb3IgU1FMU3RhdGlzdGljc1xuIik7CglyYyA9IFNRTFN0YXRpc3Rp Y3MoaHN0bXQsCgkJCQkJICAgTlVMTCwgMCwKCQkJCQkgICAoU1FMQ0hBUiAqKSAicHVibGljIiwg U1FMX05UUywKCQkJCQkgICAoU1FMQ0hBUiAqKSAidGVzdHRhYjEiLCBTUUxfTlRTLAoJCQkJCSAg IDAsIDApOwoJQ0hFQ0tfU1RNVF9SRVNVTFQocmMsICJTUUxTdGF0aXN0aWNzIGZhaWxlZCIsIGhz dG10KTsKCXByaW50X3Jlc3VsdF9tZXRhKGhzdG10KTsKCXByaW50X3Jlc3VsdChoc3RtdCk7Cgly YyA9IFNRTEZyZWVTdG10KGhzdG10LCBTUUxfQ0xPU0UpOwoJQ0hFQ0tfU1RNVF9SRVNVTFQocmMs ICJTUUxGcmVlU3RtdCBmYWlsZWQiLCBoc3RtdCk7CgoJLyogQ2hlY2sgZm9yIFNRTFByaW1hcnlL ZXlzICovCglwcmludGYoIkNoZWNrIGZvciBTUUxQcmltYXJ5S2V5c1xuIik7CglyYyA9IFNRTFBy aW1hcnlLZXlzKGhzdG10LAoJCQkJCQlOVUxMLCAwLAoJCQkJCQkoU1FMQ0hBUiAqKSAicHVibGlj IiwgU1FMX05UUywKCQkJCQkJKFNRTENIQVIgKikgInRlc3R0YWIxIiwgU1FMX05UUyk7CglDSEVD S19TVE1UX1JFU1VMVChyYywgIlNRTFByaW1hcnlLZXlzIGZhaWxlZCIsIGhzdG10KTsKCXByaW50 X3Jlc3VsdF9tZXRhKGhzdG10KTsKCXByaW50X3Jlc3VsdChoc3RtdCk7CglyYyA9IFNRTEZyZWVT dG10KGhzdG10LCBTUUxfQ0xPU0UpOwoJQ0hFQ0tfU1RNVF9SRVNVTFQocmMsICJTUUxGcmVlU3Rt dCBmYWlsZWQiLCBoc3RtdCk7CgoJLyogQ2hlY2sgZm9yIFNRTEZvcmVpZ25LZXlzICovCglwcmlu dGYoIkNoZWNrIGZvciBTUUxGb3JlaWduS2V5c1xuIik7CglyYyA9IFNRTEZvcmVpZ25LZXlzKGhz dG10LAoJCQkJCQlOVUxMLCAwLAoJCQkJCQkoU1FMQ0hBUiAqKSAicHVibGljIiwgU1FMX05UUywK CQkJCQkJKFNRTENIQVIgKikgInRlc3R0YWIxIiwgU1FMX05UUywKCQkJCQkJTlVMTCwgMCwKCQkJ CQkJKFNRTENIQVIgKikgInB1YmxpYyIsIFNRTF9OVFMsCgkJCQkJCShTUUxDSEFSICopICJ0ZXN0 dGFiX2ZrIiwgU1FMX05UUyk7CglDSEVDS19TVE1UX1JFU1VMVChyYywgIlNRTEZvcmVpZ25LZXlz IGZhaWxlZCIsIGhzdG10KTsKCXByaW50X3Jlc3VsdF9tZXRhKGhzdG10KTsKCXByaW50X3Jlc3Vs dChoc3RtdCk7CglyYyA9IFNRTEZyZWVTdG10KGhzdG10LCBTUUxfQ0xPU0UpOwoJQ0hFQ0tfU1RN VF9SRVNVTFQocmMsICJTUUxGcmVlU3RtdCBmYWlsZWQiLCBoc3RtdCk7CgoJLyogQ2hlY2sgZm9y IFNRTFByb2NlZHVyZXMgKi8KCXByaW50ZigiQ2hlY2sgZm9yIFNRTFByb2NlZHVyZXNcbiIpOwoJ cmMgPSBTUUxQcm9jZWR1cmVzKGhzdG10LAoJCQkJCSAgIE5VTEwsIDAsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCAwLAovLwkJCQkJICAgKFNRTENIQVIg KikgInB1YmxpYyIsIFNRTF9OVFMsCgkJCQkJICAgKFNRTENIQVIgKikgInByb2NlX25vYnVibGlj IiwgU1FMX05UUyk7CglDSEVDS19TVE1UX1JFU1VMVChyYywgIlNRTFByb2NlZHVyZXMgZmFpbGVk IiwgaHN0bXQpOwoJcHJpbnRfcmVzdWx0X21ldGEoaHN0bXQpOwoJcHJpbnRfcmVzdWx0KGhzdG10 KTsKCXJjID0gU1FMRnJlZVN0bXQoaHN0bXQsIFNRTF9DTE9TRSk7CglDSEVDS19TVE1UX1JFU1VM VChyYywgIlNRTEZyZWVTdG10IGZhaWxlZCIsIGhzdG10KTsKCgkvKiBDaGVjayBmb3IgU1FMUHJv Y2VkdXJlQ29sdW1ucyAqLwoJcHJpbnRmKCJDaGVjayBmb3IgU1FMUHJvY2VkdXJlQ29sdW1uc1xu Iik7CglyYyA9IFNRTFByb2NlZHVyZUNvbHVtbnMoaHN0bXQsCgkJCQkJCQkgTlVMTCwgMCwKCQkJ CQkJCSAoU1FMQ0hBUiAqKSAicHVibGljIiwgU1FMX05UUywKCQkJCQkJCSAoU1FMQ0hBUiAqKSAi c2ltcGxlX2FkZCIsIFNRTF9OVFMsCgkJCQkJCQkgTlVMTCwgMCk7CglDSEVDS19TVE1UX1JFU1VM VChyYywgIlNRTFByb2NlZHVyZUNvbHVtbnMgZmFpbGVkIiwgaHN0bXQpOwoJcHJpbnRfcmVzdWx0 X21ldGEoaHN0bXQpOwoJcHJpbnRfcmVzdWx0KGhzdG10KTsKCXJjID0gU1FMRnJlZVN0bXQoaHN0 bXQsIFNRTF9DTE9TRSk7CglDSEVDS19TVE1UX1JFU1VMVChyYywgIlNRTEZyZWVTdG10IGZhaWxl ZCIsIGhzdG10KTsKCS8qCgkgKiBDaGVjayBmb3IgU1FMUHJvY2VkdXJlQ29sdW1ucyBmb3IgYSBm dW5jdGlvbgoJICogCXJldHVybmluZyBub3JtYWwgdHlwZQoJICovCglyYyA9IFNRTFByb2NlZHVy ZUNvbHVtbnMoaHN0bXQsIE5VTEwsIDAsCgkJCQkgTlVMTCwgMCwKCQkJCSAoU1FMQ0hBUiAqKSAi c2V0X2J5dGUiLCBTUUxfTlRTLAoJCQkJIE5VTEwsIDApOwoJQ0hFQ0tfU1RNVF9SRVNVTFQocmMs ICJTUUxQcm9jZWR1cmVDb2x1bW5zIGZhaWxlZCIsIGhzdG10KTsKCVBSSU5UX1JFU1VMVF9TRVJJ RVMoaHN0bXQsIHNxbF9wcm9fY29sdW1uX2lkcywgLTEpOwoJcmMgPSBTUUxGcmVlU3RtdChoc3Rt dCwgU1FMX0NMT1NFKTsKCUNIRUNLX1NUTVRfUkVTVUxUKHJjLCAiU1FMRnJlZVN0bXQgZmFpbGVk IiwgaHN0bXQpOwoJLyoKCSAqIENoZWNrIGZvciBTUUxQcm9jZWR1cmVDb2x1bW5zIGZvciBhIGZ1 bmN0aW9uCgkgKiAJcmV0dXJuaW5nIGNvbXBvc2l0ZSB0eXBlCgkgKi8KCXJjID0gU1FMUHJvY2Vk dXJlQ29sdW1ucyhoc3RtdCwgTlVMTCwgMCwKCQkJCSAoU1FMQ0hBUiAqKSAicHVibGljIiwgU1FM X05UUywKCQkJCSAoU1FMQ0hBUiAqKSAiZ2V0Zm9vIiwgU1FMX05UUywKCQkJCSBOVUxMLCAwKTsK CUNIRUNLX1NUTVRfUkVTVUxUKHJjLCAiU1FMUHJvY2VkdXJlQ29sdW1ucyBmYWlsZWQiLCBoc3Rt dCk7CglQUklOVF9SRVNVTFRfU0VSSUVTKGhzdG10LCBzcWxfcHJvX2NvbHVtbl9pZHMsIC0xKTsK CXJjID0gU1FMRnJlZVN0bXQoaHN0bXQsIFNRTF9DTE9TRSk7CglDSEVDS19TVE1UX1JFU1VMVChy YywgIlNRTEZyZWVTdG10IGZhaWxlZCIsIGhzdG10KTsKCS8qCgkgKiBDaGVjayBmb3IgU1FMUHJv Y2VkdXJlQ29sdW1ucyBmb3IgYSBmdW5jdGlvbgoJICogCXJldHVybmluZyBzZXRvZiBjb21wb3Np dGUgdHlwZQoJICovCglyYyA9IFNRTFByb2NlZHVyZUNvbHVtbnMoaHN0bXQsIE5VTEwsIDAsCgkJ CQkgKFNRTENIQVIgKikgInB1YmxpYyIsIFNRTF9OVFMsCgkJCQkgKFNRTENIQVIgKikgImdldGJv byIsIFNRTF9OVFMsCgkJCQkgTlVMTCwgMCk7CglDSEVDS19TVE1UX1JFU1VMVChyYywgIlNRTFBy b2NlZHVyZUNvbHVtbnMgZmFpbGVkIiwgaHN0bXQpOwoJUFJJTlRfUkVTVUxUX1NFUklFUyhoc3Rt dCwgc3FsX3Byb19jb2x1bW5faWRzLCAtMSk7CglyYyA9IFNRTEZyZWVTdG10KGhzdG10LCBTUUxf Q0xPU0UpOwoJQ0hFQ0tfU1RNVF9SRVNVTFQocmMsICJTUUxGcmVlU3RtdCBmYWlsZWQiLCBoc3Rt dCk7CgkvKgoJICogQ2hlY2sgZm9yIFNRTFByb2NlZHVyZUNvbHVtbnMgZm9yIGEgZnVuY3Rpb24K CSAqIAlyZXR1cm5pbmcgdGFibGUKCSAqLwoJcmMgPSBTUUxQcm9jZWR1cmVDb2x1bW5zKGhzdG10 LCBOVUxMLCAwLAoJCQkJIChTUUxDSEFSICopICJwdWJsaWMiLCBTUUxfTlRTLAoJCQkJIChTUUxD SEFSICopICJ0YmxfYXJnIiwgU1FMX05UUywKCQkJCSBOVUxMLCAwKTsKCUNIRUNLX1NUTVRfUkVT VUxUKHJjLCAiU1FMUHJvY2VkdXJlQ29sdW1ucyBmYWlsZWQiLCBoc3RtdCk7CglQUklOVF9SRVNV TFRfU0VSSUVTKGhzdG10LCBzcWxfcHJvX2NvbHVtbl9pZHMsIC0xKTsKCXJjID0gU1FMRnJlZVN0 bXQoaHN0bXQsIFNRTF9DTE9TRSk7CglDSEVDS19TVE1UX1JFU1VMVChyYywgIlNRTEZyZWVTdG10 IGZhaWxlZCIsIGhzdG10KTsKCS8qCgkgKiBDaGVjayBmb3IgU1FMUHJvY2VkdXJlQ29sdW1ucyBm b3IgYSBmdW5jdGlvbiB3aXRoIE9VVAoJICogCXBhcmFtZXRlcnMgcmV0dXJuaW5nIHNldG9mCgkg KglUaGlzIGlzIGVxdWl2YWxlbnQgdG8gdGJsX2FyZy4KCSAqLwoJcmMgPSBTUUxQcm9jZWR1cmVD b2x1bW5zKGhzdG10LCBOVUxMLCAwLAoJCQkJIChTUUxDSEFSICopICJwdWJsaWMiLCBTUUxfTlRT LAoJCQkJIChTUUxDSEFSICopICJzZXRfb2YiLCBTUUxfTlRTLAoJCQkJIE5VTEwsIDApOwoJQ0hF Q0tfU1RNVF9SRVNVTFQocmMsICJTUUxQcm9jZWR1cmVDb2x1bW5zIGZhaWxlZCIsIGhzdG10KTsK CVBSSU5UX1JFU1VMVF9TRVJJRVMoaHN0bXQsIHNxbF9wcm9fY29sdW1uX2lkcywgLTEpOwoJcmMg PSBTUUxGcmVlU3RtdChoc3RtdCwgU1FMX0NMT1NFKTsKCUNIRUNLX1NUTVRfUkVTVUxUKHJjLCAi U1FMRnJlZVN0bXQgZmFpbGVkIiwgaHN0bXQpOwoKCS8qIENoZWNrIGZvciBTUUxUYWJsZVByaXZp bGVnZXMgKi8KCXByaW50ZigiQ2hlY2sgZm9yIFNRTFRhYmxlUHJpdmlsZWdlc1xuIik7CglyYyA9 IFNRTFRhYmxlUHJpdmlsZWdlcyhoc3RtdCwKCQkJCQkJCU5VTEwsIDAsCgkJCQkJCQkoU1FMQ0hB UiAqKSAicHVibGljIiwgMCwKCQkJCQkJCShTUUxDSEFSICopICJ0ZXN0dGFiMSIsIFNRTF9OVFMp OwoJQ0hFQ0tfU1RNVF9SRVNVTFQocmMsICJTUUxUYWJsZVByaXZpbGVnZXMgZmFpbGVkIiwgaHN0 bXQpOwoJcHJpbnRfcmVzdWx0X21ldGEoaHN0bXQpOwoJUFJJTlRfUkVTVUxUX1NFUklFUyhoc3Rt dCwgc3FsX3RhYl9wcml2aWxlZ2VzX2lkcywgNSk7CglyYyA9IFNRTEZyZWVTdG10KGhzdG10LCBT UUxfQ0xPU0UpOwoJQ0hFQ0tfU1RNVF9SRVNVTFQocmMsICJTUUxGcmVlU3RtdCBmYWlsZWQiLCBo c3RtdCk7CgoJLyogVGVzdCBTUUxHZXRJbmZvICovCglwcmludGYoIkNoZWNrIGZvciBTUUxHZXRJ bmZvXG4iKTsKCXJjID0gU1FMR2V0SW5mbyhjb25uLCBTUUxfVEFCTEVfVEVSTSwgYnVmLCBzaXpl b2YoYnVmKSwgJmxlbik7CglDSEVDS19TVE1UX1JFU1VMVChyYywgIlNRTEdldEluZm8gZmFpbGVk IiwgaHN0bXQpOwoJcHJpbnRmKCJUZXJtIGZvciBcInRhYmxlXCI6ICVzXG4iLCBidWYpOwoKCS8q KioqCgkgKiBNaXNjIGV4dHJhIHRlc3RzLgoJICovCgoJLyoKCSAqIE9sZGVyIHZlcnNpb25zIG9m IHRoZSBkcml2ZXIgaGFkIGEgYnVnIGluIGhhbmRsaW5nIHRhYmxlLXR5cGVzIGxpc3RzCgkgKiBs b25nZXIgdGhhbiAzMiBlbnRyaWVzLiBDaGVjayBmb3IgdGhhdC4KCSAqLwoJcmMgPSBTUUxUYWJs ZXMoaHN0bXQsICIiLCBTUUxfTlRTLAoJCQkJICAgInB1YmxpYyIsIFNRTF9OVFMsCgkJCQkgICAi dGVzdHRhYiUiLCBTUUxfTlRTLAoJCQkJICAgIjEsMiwzLDQsNSw2LDcsOCw5LDAsMSwyLDMsNCw1 LDYsNyw4LDksMCwxLDIsMyw0LDUsNiw3LDgsOSwwLDEsMiwzLDQsNSwgVEFCTEVTIiwgU1FMX05U Uyk7CgoJQ0hFQ0tfU1RNVF9SRVNVTFQocmMsICJTUUxUYWJsZXMgZmFpbGVkIiwgaHN0bXQpOwoJ cHJpbnRfcmVzdWx0KGhzdG10KTsKCglyYyA9IFNRTEZyZWVTdG10KGhzdG10LCBTUUxfQ0xPU0Up OwoJQ0hFQ0tfU1RNVF9SRVNVTFQocmMsICJTUUxGcmVlU3RtdCBmYWlsZWQiLCBoc3RtdCk7CgoJ LyoKCSAqIE9sZGVyIHZlcnNpb25zIG9mIHRoZSBkcml2ZXIgaGFkIGEgYnVmZmVyIG92ZXJmbG93 IGJ1ZyBpbiBoYW5kbGluZyB0YWJsZQoJICogcGF0dGVybnMgd2l0aCBsb3RzIG9mIGVzY2FwZXMs IHdpdGggc3RhbmRhcmRfY29uZm9ybWluZ19zdHJpbmdzPW9mZi4KCSAqIENoZWNrIGZvciB0aGF0 LgoJICovCglmb3IgKGkgPSAwOyBpIDwgc2l6ZW9mKGJ1ZikgLSAxOyBpKyspCgkJYnVmW2ldID0g J1xcJzsKCWJ1ZltpXSA9ICdcMCc7CglyYyA9IFNRTFRhYmxlcyhoc3RtdCwgIiIsIFNRTF9OVFMs CgkJCQkgICAicHVibGljIiwgU1FMX05UUywKCQkJCSAgIGJ1ZiwgU1FMX05UUywKCQkJCSAgICJU QUJMRVMiLCBTUUxfTlRTKTsKCglDSEVDS19TVE1UX1JFU1VMVChyYywgIlNRTFRhYmxlcyBmYWls ZWQiLCBoc3RtdCk7CglwcmludF9yZXN1bHQoaHN0bXQpOwoKCXJjID0gU1FMRnJlZVN0bXQoaHN0 bXQsIFNRTF9DTE9TRSk7CglDSEVDS19TVE1UX1JFU1VMVChyYywgIlNRTEZyZWVTdG10IGZhaWxl ZCIsIGhzdG10KTsKCgkvKgoJICogQ2hlY2sgdGhhdCB0aGluZ3Mgd29yayB3aXRoIGFuIGludmFs aWQgc2VhcmNoX3BhdGguIGN1cnJlbnRfc2NoZW1hKCkKCSAqIHJldHVybnMgTlVMTCBpbiB0aGF0 IGNhc2UsIHdoaWNoIHVzZWQgdG8gY2F1c2UgYSBzZWdmYXVsdC4KCSAqCgkgKiBQZXJmb3JtIHRo ZXNlIHRlc3RzIGluIGEgZnJlc2ggY29ubmVjdGlvbiwgc28gdGhhdCB3ZSBkb24ndCB1c2UgYQoJ ICogY2FjaGVkIGN1cnJlbnRfc2NoZW1hIHZhbHVlLgoJICovCgl0ZXN0X2Rpc2Nvbm5lY3QoKTsK CXRlc3RfY29ubmVjdCgpOwoJcmMgPSBTUUxBbGxvY0hhbmRsZShTUUxfSEFORExFX1NUTVQsIGNv bm4sICZoc3RtdCk7CglDSEVDS19DT05OX1JFU1VMVChyYywgImZhaWxlZCB0byBhbGxvY2F0ZSBz dG10IGhhbmRsZSIsIGNvbm4pOwoKCXJjID0gU1FMRXhlY0RpcmVjdChoc3RtdCwgKFNRTENIQVIg KikgInNldCBzZWFyY2hfcGF0aD0nYm9ndXNfc2NoZW1hJyIsIFNRTF9OVFMpOwoJQ0hFQ0tfU1RN VF9SRVNVTFQocmMsICJTUUxFeGVjRGlyZWN0IGZhaWxlZCIsIGhzdG10KTsKCglyYyA9IFNRTEdl dEluZm8oY29ubiwgU1FMX1VTRVJfTkFNRSwgdXNlcm5hbWUsIHNpemVvZih1c2VybmFtZSksICZs ZW4pOwoJQ0hFQ0tfU1RNVF9SRVNVTFQocmMsICJTUUxHZXRJbmZvIGZhaWxlZCIsIGhzdG10KTsK CglyYyA9IFNRTFRhYmxlcyhoc3RtdCwgIiIsIFNRTF9OVFMsCgkJCQkgICB1c2VybmFtZSwgU1FM X05UUywKCQkJCSAgICJ0ZXN0dGFiJSIsIFNRTF9OVFMsCgkJCQkgICAiIiwgU1FMX05UUyk7CgoJ Q0hFQ0tfU1RNVF9SRVNVTFQocmMsICJTUUxUYWJsZXMgZmFpbGVkIiwgaHN0bXQpOwoJcHJpbnRf cmVzdWx0KGhzdG10KTsKCglyYyA9IFNRTEZyZWVTdG10KGhzdG10LCBTUUxfQ0xPU0UpOwoJQ0hF Q0tfU1RNVF9SRVNVTFQocmMsICJTUUxGcmVlU3RtdCBmYWlsZWQiLCBoc3RtdCk7CgoJLyogQ2xl YW4gdXAgKi8KCXRlc3RfZGlzY29ubmVjdCgpOwoKCXJldHVybiAwOwp9Cg== ------=_Part_96870_920188474.1697026578197 Content-Type: application/x-sql; name=sampletables.sql Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="sampletables.sql" LS0gVGhpcyBmaWxlIGNyZWF0ZXMgc29tZSB0YWJsZXMgdG8gYmUgdXNlZCBpbiB0aGUgdGVzdHMu Ci0tCi0tIE5vdGUgdGhhdCB0aGUgcmVzZXQtZGIgcHJvZ3JhbSB0aGF0IHJlYWRzIHRoaXMgZmls ZSBpcyBkdW1iIGFuZCByZWFkcwotLSBpdCBvbmUgbGluZSBhdCBhIHRpbWUuIEhlbmNlIGVhY2gg c3RhdGVtZW50IG11c3QgYmUgb24gYSBzaW5nbGUgbGluZS4KCi0tIFNjaGVtYQpjcmVhdGUgc2No ZW1hIHRlc3RzY2hlbTsKCkNSRUFURSBUQUJMRSB0ZXN0dGFiMSAoaWQgaW50ZWdlciBQUklNQVJZ IEtFWSwgdCB2YXJjaGFyKDIwKSk7CklOU0VSVCBJTlRPIHRlc3R0YWIxIFZBTFVFUyAoMSwgJ2Zv bycpOwpJTlNFUlQgSU5UTyB0ZXN0dGFiMSBWQUxVRVMgKDIsICdiYXInKTsKSU5TRVJUIElOVE8g dGVzdHRhYjEgVkFMVUVTICgzLCAnZm9vYmFyJyk7CgpDUkVBVEUgVEFCTEUgdGVzdHRhYl9mayAo aWQgaW50ZWdlciBSRUZFUkVOQ0VTIHRlc3R0YWIxLCB0IHZhcmNoYXIoMjApKTsKSU5TRVJUIElO VE8gdGVzdHRhYl9mayBWQUxVRVMgKDEsICdob2dlJyk7CklOU0VSVCBJTlRPIHRlc3R0YWJfZmsg VkFMVUVTICgyLCAncG9nbm8nKTsKSU5TRVJUIElOVE8gdGVzdHRhYl9mayBWQUxVRVMgKDMsICdw b2NvJyk7CgpDUkVBVEUgVEFCTEUgYnl0ZWF0YWIgKGlkIGludGVnZXIsIHQgYnl0ZWEpOwpJTlNF UlQgSU5UTyBieXRlYXRhYiBWQUxVRVMgKDEsIEUnXFwwMDFcXDAwMlxcMDAzXFwwMDRcXDAwNVxc MDA2XFwwMDdcXDAxMCc6OmJ5dGVhKTsKSU5TRVJUIElOVE8gYnl0ZWF0YWIgVkFMVUVTICgyLCAn YmFyJyk7CklOU0VSVCBJTlRPIGJ5dGVhdGFiIFZBTFVFUyAoMywgJ2Zvb2JhcicpOwpJTlNFUlQg SU5UTyBieXRlYXRhYiBWQUxVRVMgKDQsICdmb28nKTsKSU5TRVJUIElOVE8gYnl0ZWF0YWIgVkFM VUVTICg1LCAnYmFyZicpOwoKQ1JFQVRFIFRBQkxFIGludGVydmFsdGFibGUoaWQgaW50ZWdlciwg aXYgaW50ZXJ2YWwsIGQgdmFyY2hhcigxMDApKTsKSU5TRVJUIElOVE8gaW50ZXJ2YWx0YWJsZSBW QUxVRVMgKDEsICcxIGRheScsICdvbmUgZGF5Jyk7CklOU0VSVCBJTlRPIGludGVydmFsdGFibGUg VkFMVUVTICgyLCAnMTAgc2Vjb25kcycsICd0ZW4gc2VjcycpOwpJTlNFUlQgSU5UTyBpbnRlcnZh bHRhYmxlIFZBTFVFUyAoMywgJzEwMCB5ZWFycycsICdodW5kcmVkIHllYXJzJyk7CgpDUkVBVEUg VEFCTEUgYm9vbHRhYiAoaWQgaW50ZWdlciwgdCB2YXJjaGFyKDUpLCBiIGJvb2xlYW4pOwpJTlNF UlQgSU5UTyBib29sdGFiIFZBTFVFUyAoMSwgJ3llYWgnLCB0cnVlKTsKSU5TRVJUIElOVE8gYm9v bHRhYiBWQUxVRVMgKDIsICd5ZXMnLCB0cnVlKTsKSU5TRVJUIElOVE8gYm9vbHRhYiBWQUxVRVMg KDMsICd0cnVlJywgdHJ1ZSk7CklOU0VSVCBJTlRPIGJvb2x0YWIgVkFMVUVTICg0LCAnZmFsc2Un LCBmYWxzZSk7CklOU0VSVCBJTlRPIGJvb2x0YWIgVkFMVUVTICg1LCAnbm90JywgZmFsc2UpOwoK LS0gVmlldwpDUkVBVEUgVklFVyB0ZXN0dmlldyBBUyBTRUxFQ1QgKiBGUk9NIHRlc3R0YWIxOwoK LS0gTWF0ZXJpYWxpemVkIHZpZXcKQ1JFQVRFIE1BVEVSSUFMSVpFRCBWSUVXIHRlc3RtYXR2aWV3 IEFTIFNFTEVDVCAqIEZST00gdGVzdHRhYjE7CgotLSBGb3JlaWduIHRhYmxlCkNSRUFURSBGT1JF SUdOIERBVEEgV1JBUFBFUiB0ZXN0ZmR3OwpDUkVBVEUgU0VSVkVSIHRlc3RzZXJ2ZXIgRk9SRUlH TiBEQVRBIFdSQVBQRVIgdGVzdGZkdzsKQ1JFQVRFIEZPUkVJR04gVEFCTEUgdGVzdGZvcmVpZ24g KGMxIGludCkgU0VSVkVSIHRlc3RzZXJ2ZXI7CgotLSBQcm9jZWR1cmUgZm9yIGNhdGFsb2cgbm8g dW5kZXIgcHVibGljIGZ1bmN0aW9uIGNoZWNrcwpDUkVBVEUgRlVOQ1RJT04gdGVzdHNjaGVtLnBy b2NlX25vYnVibGljKGluIGludCwgaW4gaW50LCBvdXQgaW50KSBBUyAkJCBTRUxFQ1QgJDEgKyAk MjsgJCQgTEFOR1VBR0UgU1FMOwotLSBQcm9jZWR1cmUgZm9yIGNhdGFsb2cgZnVuY3Rpb24gY2hl Y2tzCkNSRUFURSBGVU5DVElPTiBzaW1wbGVfYWRkKGluIGludCwgaW4gaW50LCBvdXQgaW50KSBB UyAkJCBTRUxFQ1QgJDEgKyAkMjsgJCQgTEFOR1VBR0UgU1FMOwotLSAJRnVuY3Rpb24gUmV0dXJu aW5nIGNvbXBvc2l0ZSB0eXBlCkNSRUFURSBGVU5DVElPTiBnZXRmb28oaW50KSBSRVRVUk5TIGJv b2x0YWIgQVMgJCQgU0VMRUNUICogRlJPTSBib29sdGFiIFdIRVJFIGlkID0gJDE7ICQkIExBTkdV QUdFIFNRTDsKLS0JRnVuY3Rpb24gUmV0dXJuaW5nIHNldCBvZiBjb21wb3NpdGUgdHlwZQpDUkVB VEUgRlVOQ1RJT04gZ2V0Ym9vKGludCkgUkVUVVJOUyBTRVRPRiBib29sdGFiIEFTICQkIFNFTEVD VCAqIEZST00gYm9vbHRhYiBXSEVSRSBpZCA9ICQxOyAkJCBMQU5HVUFHRSBTUUw7Ci0tCUZ1bmN0 aW9uIFJldHVybmluZyB0YWJsZQpDUkVBVEUgRlVOQ1RJT04gdGJsX2FyZyhpbiBwX2YxIGludCkg cmV0dXJucyB0YWJsZShwX2YyIHRleHQsIHBfZjMgYm9vbGVhbikgQVMgJCQgU0VMRUNUIHQsIGIg ZnJvbSBib29sdGFiIHdoZXJlIGlkID0gcF9mMTsgJCQgTEFOR1VBR0UgU1FMOwotLQlUaGUgcHJl dmlvdXMgb25lIGlzIGVxdWl2YWxlbnQgdG8gdXNpbmcgb25lIG9yIG1vcmUgT1VUIHBhcmFtZXRl cnMKLS0JcGx1cyBtYXJraW5nIHRoZSBmdW5jdGlvbiBhcyByZXR1cm5pbmcgU0VUT0YgcmVjb3Jk IChvciBTRVRPRiBhIHNpbmdsZQotLQlvdXRwdXQgcGFyYW1ldGVyJ3MgdHlwZSwgYXMgYXBwcm9w cmlhdGUpLgpDUkVBVEUgRlVOQ1RJT04gc2V0X29mKGluIHBfZjEgaW50LCBvdXQgcF9mMiB0ZXh0 LCBvdXQgcF9mMyBib29sZWFuKSByZXR1cm5zIHNldG9mIHJlY29yZCBBUyAkJCBTRUxFQ1QgdCwg YiBmcm9tIGJvb2x0YWIgd2hlcmUgaWQgPSBwX2YxOyAkJCBMQU5HVUFHRSBTUUw7CgotLSBMYXJn ZSBvYmplY3Qgc3VwcG9ydApDUkVBVEUgRE9NQUlOIGxvIEFTIG9pZDsKQ1JFQVRFIFRBQkxFIGxv X3Rlc3RfdGFiIChpZCBpbnQ0LCBsYXJnZV9kYXRhIGxvKTsK ------=_Part_96870_920188474.1697026578197--