From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 19526 invoked by alias); 8 Nov 2002 10:16:08 -0000 Mailing-List: contact gcc-prs-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-prs-owner@gcc.gnu.org Received: (qmail 19503 invoked by uid 71); 8 Nov 2002 10:16:08 -0000 Resent-Date: 8 Nov 2002 10:16:08 -0000 Resent-Message-ID: <20021108101608.19502.qmail@sources.redhat.com> Resent-From: gcc-gnats@gcc.gnu.org (GNATS Filer) Resent-Cc: gcc-prs@gcc.gnu.org, gcc-bugs@gcc.gnu.org Resent-Reply-To: gcc-gnats@gcc.gnu.org, jh@suse.cz Received: (qmail 17726 invoked by uid 61); 8 Nov 2002 10:08:29 -0000 Message-Id: <20021108100829.17725.qmail@sources.redhat.com> Date: Fri, 08 Nov 2002 02:16:00 -0000 From: jh@suse.cz Reply-To: jh@suse.cz To: gcc-gnats@gcc.gnu.org X-Send-Pr-Version: gnatsweb-2.9.3 (1.1.1.1.2.31) Subject: c/8499: [mainline regression] Tree checking failure on after error reported X-SW-Source: 2002-11/txt/msg00402.txt.bz2 List-Id: >Number: 8499 >Category: c >Synopsis: [mainline regression] Tree checking failure on after error reported >Confidential: no >Severity: serious >Priority: medium >Responsible: unassigned >State: open >Class: ice-on-illegal-code >Submitter-Id: net >Arrival-Date: Fri Nov 08 02:16:06 PST 2002 >Closed-Date: >Last-Modified: >Originator: jh@suse.cz >Release: mainline >Organization: >Environment: mainline/x86-64 >Description: Parser gets confused by invalid code >How-To-Repeat: gcc -O2 qq.i >Fix: >Release-Note: >Audit-Trail: >Unformatted: ----gnatsweb-attachment---- Content-Type: application/octet-stream; name="qq.i" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="qq.i" IyAxICJ2ZnByaW50Zi5jIgojIDEgIjxidWlsdC1pbj4iCiMgMSAiPGNvbW1hbmQgbGluZT4iCgoK CgoKCiMgMSAiLi4vaW5jbHVkZS9saWJjLXN5bWJvbHMuaCIgMQojIDU2ICIuLi9pbmNsdWRlL2xp YmMtc3ltYm9scy5oIgojIDEgIi91c3Ivc3JjL3BhY2thZ2VzL0JVSUxEL2dsaWJjLTIuMy9jYy9j b25maWcuaCIgMQojIDU3ICIuLi9pbmNsdWRlL2xpYmMtc3ltYm9scy5oIiAyCiMgOCAiPGNvbW1h bmQgbGluZT4iIDIKIyAxICJ2ZnByaW50Zi5jIgojIDE5ICJ2ZnByaW50Zi5jIgojIDEgIi4uL2lu Y2x1ZGUvY3R5cGUuaCIgMQoKCmV4dGVybiBpbnQgX19pc2N0eXBlIChpbnQgX19jLCBpbnQgX19t YXNrKTsKIyAxNCAiLi4vaW5jbHVkZS9jdHlwZS5oIgojIDEgIi4uL2xvY2FsZS9sb2NhbGVpbmZv LmgiIDEKIyAyMyAiLi4vbG9jYWxlL2xvY2FsZWluZm8uaCIKIyAxICIvdXNyL2xpYjY0L2djYy1s aWIveDg2XzY0LXN1c2UtbGludXgvMy4zL2luY2x1ZGUvc3RkZGVmLmgiIDEgMyA0CiMgMTUxICIv dXNyL2xpYjY0L2djYy1saWIveDg2XzY0LXN1c2UtbGludXgvMy4zL2luY2x1ZGUvc3RkZGVmLmgi IDMgNAp0eXBlZGVmIGxvbmcgaW50IHB0cmRpZmZfdDsKIyAyMTMgIi91c3IvbGliNjQvZ2NjLWxp Yi94ODZfNjQtc3VzZS1saW51eC8zLjMvaW5jbHVkZS9zdGRkZWYuaCIgMyA0CnR5cGVkZWYgbG9u ZyB1bnNpZ25lZCBpbnQgc2l6ZV90OwojIDMyNSAiL3Vzci9saWI2NC9nY2MtbGliL3g4Nl82NC1z dXNlLWxpbnV4LzMuMy9pbmNsdWRlL3N0ZGRlZi5oIiAzIDQKdHlwZWRlZiBpbnQgd2NoYXJfdDsK IyAyNCAiLi4vbG9jYWxlL2xvY2FsZWluZm8uaCIgMgojIDEgIi4uL2luY2x1ZGUvbGFuZ2luZm8u aCIgMQoKCiMgMSAiLi4vbG9jYWxlL2xhbmdpbmZvLmgiIDEKIyAyNCAiLi4vbG9jYWxlL2xhbmdp bmZvLmgiCiMgMSAiLi4vaW5jbHVkZS9ubF90eXBlcy5oIiAxCiMgMSAiLi4vY2F0Z2V0cy9ubF90 eXBlcy5oIiAxCiMgMjIgIi4uL2NhdGdldHMvbmxfdHlwZXMuaCIKIyAxICIuLi9pbmNsdWRlL2Zl YXR1cmVzLmgiIDEKIyAyOTEgIi4uL2luY2x1ZGUvZmVhdHVyZXMuaCIKIyAxICIuLi9pbmNsdWRl L3N5cy9jZGVmcy5oIiAxCiMgMSAiLi4vbWlzYy9zeXMvY2RlZnMuaCIgMQojIDIgIi4uL2luY2x1 ZGUvc3lzL2NkZWZzLmgiIDIKIyAyOTIgIi4uL2luY2x1ZGUvZmVhdHVyZXMuaCIgMgojIDMxNCAi Li4vaW5jbHVkZS9mZWF0dXJlcy5oIgojIDEgIi4uL2luY2x1ZGUvZ251L3N0dWJzLmgiIDEKIyAz MTUgIi4uL2luY2x1ZGUvZmVhdHVyZXMuaCIgMgojIDIzICIuLi9jYXRnZXRzL25sX3R5cGVzLmgi IDIKIyAzMSAiLi4vY2F0Z2V0cy9ubF90eXBlcy5oIgoKCgp0eXBlZGVmIHZvaWQgKm5sX2NhdGQ7 CgoKdHlwZWRlZiBpbnQgbmxfaXRlbTsKCgpleHRlcm4gbmxfY2F0ZCBjYXRvcGVuIChfX2NvbnN0 IGNoYXIgKl9fY2F0X25hbWUsIGludCBfX2ZsYWcpIDsKCgoKZXh0ZXJuIGNoYXIgKmNhdGdldHMg KG5sX2NhdGQgX19jYXRhbG9nLCBpbnQgX19zZXQsIGludCBfX251bWJlciwKICAgICAgICAgICAg ICAgICAgICAgIF9fY29uc3QgY2hhciAqX19zdHJpbmcpIDsKCgpleHRlcm4gaW50IGNhdGNsb3Nl IChubF9jYXRkIF9fY2F0YWxvZykgOwoKCiMgMiAiLi4vaW5jbHVkZS9ubF90eXBlcy5oIiAyCiMg MjUgIi4uL2xvY2FsZS9sYW5naW5mby5oIiAyCgojIDEgIi4uL2luY2x1ZGUvYml0cy9sb2NhbGUu aCIgMQojIDEgIi4uL2xvY2FsZS9iaXRzL2xvY2FsZS5oIiAxCiMgMjcgIi4uL2xvY2FsZS9iaXRz L2xvY2FsZS5oIgplbnVtCnsKICBfX0xDX0NUWVBFID0gMCwKICBfX0xDX05VTUVSSUMgPSAxLAog IF9fTENfVElNRSA9IDIsCiAgX19MQ19DT0xMQVRFID0gMywKICBfX0xDX01PTkVUQVJZID0gNCwK ICBfX0xDX01FU1NBR0VTID0gNSwKICBfX0xDX0FMTCA9IDYsCiAgX19MQ19QQVBFUiA9IDcsCiAg X19MQ19OQU1FID0gOCwKICBfX0xDX0FERFJFU1MgPSA5LAogIF9fTENfVEVMRVBIT05FID0gMTAs CiAgX19MQ19NRUFTVVJFTUVOVCA9IDExLAogIF9fTENfSURFTlRJRklDQVRJT04gPSAxMgp9Owoj IDIgIi4uL2luY2x1ZGUvYml0cy9sb2NhbGUuaCIgMgojIDI3ICIuLi9sb2NhbGUvbGFuZ2luZm8u aCIgMgoKCgojIDQzICIuLi9sb2NhbGUvbGFuZ2luZm8uaCIKZW51bQp7CgoKCiAgQUJEQVlfMSA9 ICgoKF9fTENfVElNRSkgPDwgMTYpIHwgKDApKSwKCiAgQUJEQVlfMiwKCiAgQUJEQVlfMywKCiAg QUJEQVlfNCwKCiAgQUJEQVlfNSwKCiAgQUJEQVlfNiwKCiAgQUJEQVlfNywKCgoKICBEQVlfMSwK CiAgREFZXzIsCgogIERBWV8zLAoKICBEQVlfNCwKCiAgREFZXzUsCgogIERBWV82LAoKICBEQVlf NywKCgoKICBBQk1PTl8xLAoKICBBQk1PTl8yLAoKICBBQk1PTl8zLAoKICBBQk1PTl80LAoKICBB Qk1PTl81LAoKICBBQk1PTl82LAoKICBBQk1PTl83LAoKICBBQk1PTl84LAoKICBBQk1PTl85LAoK ICBBQk1PTl8xMCwKCiAgQUJNT05fMTEsCgogIEFCTU9OXzEyLAoKCgogIE1PTl8xLAoKICBNT05f MiwKCiAgTU9OXzMsCgogIE1PTl80LAoKICBNT05fNSwKCiAgTU9OXzYsCgogIE1PTl83LAoKICBN T05fOCwKCiAgTU9OXzksCgogIE1PTl8xMCwKCiAgTU9OXzExLAoKICBNT05fMTIsCgoKICBBTV9T VFIsCgogIFBNX1NUUiwKCgogIERfVF9GTVQsCgogIERfRk1ULAoKICBUX0ZNVCwKCiAgVF9GTVRf QU1QTSwKCgogIEVSQSwKCiAgX19FUkFfWUVBUiwKCgoKICBFUkFfRF9GTVQsCgogIEFMVF9ESUdJ VFMsCgogIEVSQV9EX1RfRk1ULAoKICBFUkFfVF9GTVQsCgoKICBfTkxfVElNRV9FUkFfTlVNX0VO VFJJRVMsCiAgX05MX1RJTUVfRVJBX0VOVFJJRVMsCgogIF9OTF9XQUJEQVlfMSwKICBfTkxfV0FC REFZXzIsCiAgX05MX1dBQkRBWV8zLAogIF9OTF9XQUJEQVlfNCwKICBfTkxfV0FCREFZXzUsCiAg X05MX1dBQkRBWV82LAogIF9OTF9XQUJEQVlfNywKCgogIF9OTF9XREFZXzEsCiAgX05MX1dEQVlf MiwKICBfTkxfV0RBWV8zLAogIF9OTF9XREFZXzQsCiAgX05MX1dEQVlfNSwKICBfTkxfV0RBWV82 LAogIF9OTF9XREFZXzcsCgoKICBfTkxfV0FCTU9OXzEsCiAgX05MX1dBQk1PTl8yLAogIF9OTF9X QUJNT05fMywKICBfTkxfV0FCTU9OXzQsCiAgX05MX1dBQk1PTl81LAogIF9OTF9XQUJNT05fNiwK ICBfTkxfV0FCTU9OXzcsCiAgX05MX1dBQk1PTl84LAogIF9OTF9XQUJNT05fOSwKICBfTkxfV0FC TU9OXzEwLAogIF9OTF9XQUJNT05fMTEsCiAgX05MX1dBQk1PTl8xMiwKCgogIF9OTF9XTU9OXzEs CiAgX05MX1dNT05fMiwKICBfTkxfV01PTl8zLAogIF9OTF9XTU9OXzQsCiAgX05MX1dNT05fNSwK ICBfTkxfV01PTl82LAogIF9OTF9XTU9OXzcsCiAgX05MX1dNT05fOCwKICBfTkxfV01PTl85LAog IF9OTF9XTU9OXzEwLAogIF9OTF9XTU9OXzExLAogIF9OTF9XTU9OXzEyLAoKICBfTkxfV0FNX1NU UiwKICBfTkxfV1BNX1NUUiwKCiAgX05MX1dEX1RfRk1ULAogIF9OTF9XRF9GTVQsCiAgX05MX1dU X0ZNVCwKICBfTkxfV1RfRk1UX0FNUE0sCgogIF9OTF9XRVJBX1lFQVIsCiAgX05MX1dFUkFfRF9G TVQsCiAgX05MX1dBTFRfRElHSVRTLAogIF9OTF9XRVJBX0RfVF9GTVQsCiAgX05MX1dFUkFfVF9G TVQsCgogIF9OTF9USU1FX1dFRUtfTkRBWVMsCiAgX05MX1RJTUVfV0VFS18xU1REQVksCiAgX05M X1RJTUVfV0VFS18xU1RXRUVLLAogIF9OTF9USU1FX0ZJUlNUX1dFRUtEQVksCiAgX05MX1RJTUVf RklSU1RfV09SS0RBWSwKICBfTkxfVElNRV9DQUxfRElSRUNUSU9OLAogIF9OTF9USU1FX1RJTUVa T05FLAoKICBfREFURV9GTVQsCgogIF9OTF9XX0RBVEVfRk1ULAoKICBfTkxfVElNRV9DT0RFU0VU LAoKICBfTkxfTlVNX0xDX1RJTUUsCgoKCgogIF9OTF9DT0xMQVRFX05SVUxFUyA9ICgoKF9fTENf Q09MTEFURSkgPDwgMTYpIHwgKDApKSwKICBfTkxfQ09MTEFURV9SVUxFU0VUUywKICBfTkxfQ09M TEFURV9UQUJMRU1CLAogIF9OTF9DT0xMQVRFX1dFSUdIVE1CLAogIF9OTF9DT0xMQVRFX0VYVFJB TUIsCiAgX05MX0NPTExBVEVfSU5ESVJFQ1RNQiwKICBfTkxfQ09MTEFURV9HQVAxLAogIF9OTF9D T0xMQVRFX0dBUDIsCiAgX05MX0NPTExBVEVfR0FQMywKICBfTkxfQ09MTEFURV9UQUJMRVdDLAog IF9OTF9DT0xMQVRFX1dFSUdIVFdDLAogIF9OTF9DT0xMQVRFX0VYVFJBV0MsCiAgX05MX0NPTExB VEVfSU5ESVJFQ1RXQywKICBfTkxfQ09MTEFURV9TWU1CX0hBU0hfU0laRU1CLAogIF9OTF9DT0xM QVRFX1NZTUJfVEFCTEVNQiwKICBfTkxfQ09MTEFURV9TWU1CX0VYVFJBTUIsCiAgX05MX0NPTExB VEVfQ09MTFNFUU1CLAogIF9OTF9DT0xMQVRFX0NPTExTRVFXQywKICBfTkxfQ09MTEFURV9DT0RF U0VULAogIF9OTF9OVU1fTENfQ09MTEFURSwKCgoKCiAgX05MX0NUWVBFX0NMQVNTID0gKCgoX19M Q19DVFlQRSkgPDwgMTYpIHwgKDApKSwKICBfTkxfQ1RZUEVfVE9VUFBFUiwKICBfTkxfQ1RZUEVf R0FQMSwKICBfTkxfQ1RZUEVfVE9MT1dFUiwKICBfTkxfQ1RZUEVfR0FQMiwKICBfTkxfQ1RZUEVf Q0xBU1MzMiwKICBfTkxfQ1RZUEVfR0FQMywKICBfTkxfQ1RZUEVfR0FQNCwKICBfTkxfQ1RZUEVf R0FQNSwKICBfTkxfQ1RZUEVfR0FQNiwKICBfTkxfQ1RZUEVfQ0xBU1NfTkFNRVMsCiAgX05MX0NU WVBFX01BUF9OQU1FUywKICBfTkxfQ1RZUEVfV0lEVEgsCiAgX05MX0NUWVBFX01CX0NVUl9NQVgs CiAgX05MX0NUWVBFX0NPREVTRVRfTkFNRSwKICBDT0RFU0VUID0gX05MX0NUWVBFX0NPREVTRVRf TkFNRSwKCiAgX05MX0NUWVBFX1RPVVBQRVIzMiwKICBfTkxfQ1RZUEVfVE9MT1dFUjMyLAogIF9O TF9DVFlQRV9DTEFTU19PRkZTRVQsCiAgX05MX0NUWVBFX01BUF9PRkZTRVQsCiAgX05MX0NUWVBF X0lORElHSVRTX01CX0xFTiwKICBfTkxfQ1RZUEVfSU5ESUdJVFMwX01CLAogIF9OTF9DVFlQRV9J TkRJR0lUUzFfTUIsCiAgX05MX0NUWVBFX0lORElHSVRTMl9NQiwKICBfTkxfQ1RZUEVfSU5ESUdJ VFMzX01CLAogIF9OTF9DVFlQRV9JTkRJR0lUUzRfTUIsCiAgX05MX0NUWVBFX0lORElHSVRTNV9N QiwKICBfTkxfQ1RZUEVfSU5ESUdJVFM2X01CLAogIF9OTF9DVFlQRV9JTkRJR0lUUzdfTUIsCiAg X05MX0NUWVBFX0lORElHSVRTOF9NQiwKICBfTkxfQ1RZUEVfSU5ESUdJVFM5X01CLAogIF9OTF9D VFlQRV9JTkRJR0lUU19XQ19MRU4sCiAgX05MX0NUWVBFX0lORElHSVRTMF9XQywKICBfTkxfQ1RZ UEVfSU5ESUdJVFMxX1dDLAogIF9OTF9DVFlQRV9JTkRJR0lUUzJfV0MsCiAgX05MX0NUWVBFX0lO RElHSVRTM19XQywKICBfTkxfQ1RZUEVfSU5ESUdJVFM0X1dDLAogIF9OTF9DVFlQRV9JTkRJR0lU UzVfV0MsCiAgX05MX0NUWVBFX0lORElHSVRTNl9XQywKICBfTkxfQ1RZUEVfSU5ESUdJVFM3X1dD LAogIF9OTF9DVFlQRV9JTkRJR0lUUzhfV0MsCiAgX05MX0NUWVBFX0lORElHSVRTOV9XQywKICBf TkxfQ1RZUEVfT1VURElHSVQwX01CLAogIF9OTF9DVFlQRV9PVVRESUdJVDFfTUIsCiAgX05MX0NU WVBFX09VVERJR0lUMl9NQiwKICBfTkxfQ1RZUEVfT1VURElHSVQzX01CLAogIF9OTF9DVFlQRV9P VVRESUdJVDRfTUIsCiAgX05MX0NUWVBFX09VVERJR0lUNV9NQiwKICBfTkxfQ1RZUEVfT1VURElH SVQ2X01CLAogIF9OTF9DVFlQRV9PVVRESUdJVDdfTUIsCiAgX05MX0NUWVBFX09VVERJR0lUOF9N QiwKICBfTkxfQ1RZUEVfT1VURElHSVQ5X01CLAogIF9OTF9DVFlQRV9PVVRESUdJVDBfV0MsCiAg X05MX0NUWVBFX09VVERJR0lUMV9XQywKICBfTkxfQ1RZUEVfT1VURElHSVQyX1dDLAogIF9OTF9D VFlQRV9PVVRESUdJVDNfV0MsCiAgX05MX0NUWVBFX09VVERJR0lUNF9XQywKICBfTkxfQ1RZUEVf T1VURElHSVQ1X1dDLAogIF9OTF9DVFlQRV9PVVRESUdJVDZfV0MsCiAgX05MX0NUWVBFX09VVERJ R0lUN19XQywKICBfTkxfQ1RZUEVfT1VURElHSVQ4X1dDLAogIF9OTF9DVFlQRV9PVVRESUdJVDlf V0MsCiAgX05MX0NUWVBFX1RSQU5TTElUX1RBQl9TSVpFLAogIF9OTF9DVFlQRV9UUkFOU0xJVF9G Uk9NX0lEWCwKICBfTkxfQ1RZUEVfVFJBTlNMSVRfRlJPTV9UQkwsCiAgX05MX0NUWVBFX1RSQU5T TElUX1RPX0lEWCwKICBfTkxfQ1RZUEVfVFJBTlNMSVRfVE9fVEJMLAogIF9OTF9DVFlQRV9UUkFO U0xJVF9ERUZBVUxUX01JU1NJTkdfTEVOLAogIF9OTF9DVFlQRV9UUkFOU0xJVF9ERUZBVUxUX01J U1NJTkcsCiAgX05MX0NUWVBFX1RSQU5TTElUX0lHTk9SRV9MRU4sCiAgX05MX0NUWVBFX1RSQU5T TElUX0lHTk9SRSwKICBfTkxfQ1RZUEVfRVhUUkFfTUFQXzEsCiAgX05MX0NUWVBFX0VYVFJBX01B UF8yLAogIF9OTF9DVFlQRV9FWFRSQV9NQVBfMywKICBfTkxfQ1RZUEVfRVhUUkFfTUFQXzQsCiAg X05MX0NUWVBFX0VYVFJBX01BUF81LAogIF9OTF9DVFlQRV9FWFRSQV9NQVBfNiwKICBfTkxfQ1RZ UEVfRVhUUkFfTUFQXzcsCiAgX05MX0NUWVBFX0VYVFJBX01BUF84LAogIF9OTF9DVFlQRV9FWFRS QV9NQVBfOSwKICBfTkxfQ1RZUEVfRVhUUkFfTUFQXzEwLAogIF9OTF9DVFlQRV9FWFRSQV9NQVBf MTEsCiAgX05MX0NUWVBFX0VYVFJBX01BUF8xMiwKICBfTkxfQ1RZUEVfRVhUUkFfTUFQXzEzLAog IF9OTF9DVFlQRV9FWFRSQV9NQVBfMTQsCiAgX05MX05VTV9MQ19DVFlQRSwKCgoKCiAgX19JTlRf Q1VSUl9TWU1CT0wgPSAoKChfX0xDX01PTkVUQVJZKSA8PCAxNikgfCAoMCkpLAoKCgogIF9fQ1VS UkVOQ1lfU1lNQk9MLAoKCgogIF9fTU9OX0RFQ0lNQUxfUE9JTlQsCgoKCiAgX19NT05fVEhPVVNB TkRTX1NFUCwKCgoKICBfX01PTl9HUk9VUElORywKCgoKICBfX1BPU0lUSVZFX1NJR04sCgoKCiAg X19ORUdBVElWRV9TSUdOLAoKCgogIF9fSU5UX0ZSQUNfRElHSVRTLAoKCgogIF9fRlJBQ19ESUdJ VFMsCgoKCiAgX19QX0NTX1BSRUNFREVTLAoKCgogIF9fUF9TRVBfQllfU1BBQ0UsCgoKCiAgX19O X0NTX1BSRUNFREVTLAoKCgogIF9fTl9TRVBfQllfU1BBQ0UsCgoKCiAgX19QX1NJR05fUE9TTiwK CgoKICBfX05fU0lHTl9QT1NOLAoKCgogIF9OTF9NT05FVEFSWV9DUk5DWVNUUiwKCiAgX19JTlRf UF9DU19QUkVDRURFUywKCgoKICBfX0lOVF9QX1NFUF9CWV9TUEFDRSwKCgoKICBfX0lOVF9OX0NT X1BSRUNFREVTLAoKCgogIF9fSU5UX05fU0VQX0JZX1NQQUNFLAoKCgogIF9fSU5UX1BfU0lHTl9Q T1NOLAoKCgogIF9fSU5UX05fU0lHTl9QT1NOLAoKCgogIF9OTF9NT05FVEFSWV9EVU9fSU5UX0NV UlJfU1lNQk9MLAogIF9OTF9NT05FVEFSWV9EVU9fQ1VSUkVOQ1lfU1lNQk9MLAogIF9OTF9NT05F VEFSWV9EVU9fSU5UX0ZSQUNfRElHSVRTLAogIF9OTF9NT05FVEFSWV9EVU9fRlJBQ19ESUdJVFMs CiAgX05MX01PTkVUQVJZX0RVT19QX0NTX1BSRUNFREVTLAogIF9OTF9NT05FVEFSWV9EVU9fUF9T RVBfQllfU1BBQ0UsCiAgX05MX01PTkVUQVJZX0RVT19OX0NTX1BSRUNFREVTLAogIF9OTF9NT05F VEFSWV9EVU9fTl9TRVBfQllfU1BBQ0UsCiAgX05MX01PTkVUQVJZX0RVT19JTlRfUF9DU19QUkVD RURFUywKICBfTkxfTU9ORVRBUllfRFVPX0lOVF9QX1NFUF9CWV9TUEFDRSwKICBfTkxfTU9ORVRB UllfRFVPX0lOVF9OX0NTX1BSRUNFREVTLAogIF9OTF9NT05FVEFSWV9EVU9fSU5UX05fU0VQX0JZ X1NQQUNFLAogIF9OTF9NT05FVEFSWV9EVU9fUF9TSUdOX1BPU04sCiAgX05MX01PTkVUQVJZX0RV T19OX1NJR05fUE9TTiwKICBfTkxfTU9ORVRBUllfRFVPX0lOVF9QX1NJR05fUE9TTiwKICBfTkxf TU9ORVRBUllfRFVPX0lOVF9OX1NJR05fUE9TTiwKICBfTkxfTU9ORVRBUllfVU5PX1ZBTElEX0ZS T00sCiAgX05MX01PTkVUQVJZX1VOT19WQUxJRF9UTywKICBfTkxfTU9ORVRBUllfRFVPX1ZBTElE X0ZST00sCiAgX05MX01PTkVUQVJZX0RVT19WQUxJRF9UTywKICBfTkxfTU9ORVRBUllfQ09OVkVS U0lPTl9SQVRFLAogIF9OTF9NT05FVEFSWV9ERUNJTUFMX1BPSU5UX1dDLAogIF9OTF9NT05FVEFS WV9USE9VU0FORFNfU0VQX1dDLAogIF9OTF9NT05FVEFSWV9DT0RFU0VULAogIF9OTF9OVU1fTENf TU9ORVRBUlksCgoKCiAgX19ERUNJTUFMX1BPSU5UID0gKCgoX19MQ19OVU1FUklDKSA8PCAxNikg fCAoMCkpLAoKCgogIFJBRElYQ0hBUiA9IF9fREVDSU1BTF9QT0lOVCwKCiAgX19USE9VU0FORFNf U0VQLAoKCgogIFRIT1VTRVAgPSBfX1RIT1VTQU5EU19TRVAsCgogIF9fR1JPVVBJTkcsCgoKCiAg X05MX05VTUVSSUNfREVDSU1BTF9QT0lOVF9XQywKICBfTkxfTlVNRVJJQ19USE9VU0FORFNfU0VQ X1dDLAogIF9OTF9OVU1FUklDX0NPREVTRVQsCiAgX05MX05VTV9MQ19OVU1FUklDLAoKICBfX1lF U0VYUFIgPSAoKChfX0xDX01FU1NBR0VTKSA8PCAxNikgfCAoMCkpLAoKICBfX05PRVhQUiwKCiAg X19ZRVNTVFIsCgoKCiAgX19OT1NUUiwKCgoKICBfTkxfTUVTU0FHRVNfQ09ERVNFVCwKICBfTkxf TlVNX0xDX01FU1NBR0VTLAoKICBfTkxfUEFQRVJfSEVJR0hUID0gKCgoX19MQ19QQVBFUikgPDwg MTYpIHwgKDApKSwKICBfTkxfUEFQRVJfV0lEVEgsCiAgX05MX1BBUEVSX0NPREVTRVQsCiAgX05M X05VTV9MQ19QQVBFUiwKCiAgX05MX05BTUVfTkFNRV9GTVQgPSAoKChfX0xDX05BTUUpIDw8IDE2 KSB8ICgwKSksCiAgX05MX05BTUVfTkFNRV9HRU4sCiAgX05MX05BTUVfTkFNRV9NUiwKICBfTkxf TkFNRV9OQU1FX01SUywKICBfTkxfTkFNRV9OQU1FX01JU1MsCiAgX05MX05BTUVfTkFNRV9NUywK ICBfTkxfTkFNRV9DT0RFU0VULAogIF9OTF9OVU1fTENfTkFNRSwKCiAgX05MX0FERFJFU1NfUE9T VEFMX0ZNVCA9ICgoKF9fTENfQUREUkVTUykgPDwgMTYpIHwgKDApKSwKICBfTkxfQUREUkVTU19D T1VOVFJZX05BTUUsCiAgX05MX0FERFJFU1NfQ09VTlRSWV9QT1NULAogIF9OTF9BRERSRVNTX0NP VU5UUllfQUIyLAogIF9OTF9BRERSRVNTX0NPVU5UUllfQUIzLAogIF9OTF9BRERSRVNTX0NPVU5U UllfQ0FSLAogIF9OTF9BRERSRVNTX0NPVU5UUllfTlVNLAogIF9OTF9BRERSRVNTX0NPVU5UUllf SVNCTiwKICBfTkxfQUREUkVTU19MQU5HX05BTUUsCiAgX05MX0FERFJFU1NfTEFOR19BQiwKICBf TkxfQUREUkVTU19MQU5HX1RFUk0sCiAgX05MX0FERFJFU1NfTEFOR19MSUIsCiAgX05MX0FERFJF U1NfQ09ERVNFVCwKICBfTkxfTlVNX0xDX0FERFJFU1MsCgogIF9OTF9URUxFUEhPTkVfVEVMX0lO VF9GTVQgPSAoKChfX0xDX1RFTEVQSE9ORSkgPDwgMTYpIHwgKDApKSwKICBfTkxfVEVMRVBIT05F X1RFTF9ET01fRk1ULAogIF9OTF9URUxFUEhPTkVfSU5UX1NFTEVDVCwKICBfTkxfVEVMRVBIT05F X0lOVF9QUkVGSVgsCiAgX05MX1RFTEVQSE9ORV9DT0RFU0VULAogIF9OTF9OVU1fTENfVEVMRVBI T05FLAoKICBfTkxfTUVBU1VSRU1FTlRfTUVBU1VSRU1FTlQgPSAoKChfX0xDX01FQVNVUkVNRU5U KSA8PCAxNikgfCAoMCkpLAogIF9OTF9NRUFTVVJFTUVOVF9DT0RFU0VULAogIF9OTF9OVU1fTENf TUVBU1VSRU1FTlQsCgogIF9OTF9JREVOVElGSUNBVElPTl9USVRMRSA9ICgoKF9fTENfSURFTlRJ RklDQVRJT04pIDw8IDE2KSB8ICgwKSksCiAgX05MX0lERU5USUZJQ0FUSU9OX1NPVVJDRSwKICBf TkxfSURFTlRJRklDQVRJT05fQUREUkVTUywKICBfTkxfSURFTlRJRklDQVRJT05fQ09OVEFDVCwK ICBfTkxfSURFTlRJRklDQVRJT05fRU1BSUwsCiAgX05MX0lERU5USUZJQ0FUSU9OX1RFTCwKICBf TkxfSURFTlRJRklDQVRJT05fRkFYLAogIF9OTF9JREVOVElGSUNBVElPTl9MQU5HVUFHRSwKICBf TkxfSURFTlRJRklDQVRJT05fVEVSUklUT1JZLAogIF9OTF9JREVOVElGSUNBVElPTl9BVURJRU5D RSwKICBfTkxfSURFTlRJRklDQVRJT05fQVBQTElDQVRJT04sCiAgX05MX0lERU5USUZJQ0FUSU9O X0FCQlJFVklBVElPTiwKICBfTkxfSURFTlRJRklDQVRJT05fUkVWSVNJT04sCiAgX05MX0lERU5U SUZJQ0FUSU9OX0RBVEUsCiAgX05MX0lERU5USUZJQ0FUSU9OX0NBVEVHT1JZLAogIF9OTF9JREVO VElGSUNBVElPTl9DT0RFU0VULAogIF9OTF9OVU1fTENfSURFTlRJRklDQVRJT04sCgoKICBfTkxf TlVNCn07CiMgNTc1ICIuLi9sb2NhbGUvbGFuZ2luZm8uaCIKZXh0ZXJuIGNoYXIgKm5sX2xhbmdp bmZvIChubF9pdGVtIF9faXRlbSkgOwoKCgoKCgoKIyAxICIuLi9pbmNsdWRlL3hsb2NhbGUuaCIg MQojIDEgIi4uL2xvY2FsZS94bG9jYWxlLmgiIDEKIyAyOCAiLi4vbG9jYWxlL3hsb2NhbGUuaCIK dHlwZWRlZiBzdHJ1Y3QgX19sb2NhbGVfc3RydWN0CnsKCiAgc3RydWN0IGxvY2FsZV9kYXRhICpf X2xvY2FsZXNbMTNdOwoKCiAgY29uc3QgdW5zaWduZWQgc2hvcnQgaW50ICpfX2N0eXBlX2I7CiAg Y29uc3QgaW50ICpfX2N0eXBlX3RvbG93ZXI7CiAgY29uc3QgaW50ICpfX2N0eXBlX3RvdXBwZXI7 CgoKICBjb25zdCBjaGFyICpfX25hbWVzWzEzXTsKfSAqX19sb2NhbGVfdDsKIyAyICIuLi9pbmNs dWRlL3hsb2NhbGUuaCIgMgojIDU4NCAiLi4vbG9jYWxlL2xhbmdpbmZvLmgiIDIKCgpleHRlcm4g Y2hhciAqbmxfbGFuZ2luZm9fbCAobmxfaXRlbSBfX2l0ZW0sIF9fbG9jYWxlX3QgbCk7CgoKCiMg NCAiLi4vaW5jbHVkZS9sYW5naW5mby5oIiAyCgpleHRlcm4gX190eXBlb2YgKG5sX2xhbmdpbmZv KSBfX0dJX25sX2xhbmdpbmZvOyBleHRlcm4gX190eXBlb2YgKG5sX2xhbmdpbmZvKSBubF9sYW5n aW5mbyBfX2FzbV9fICgiIiAiX19HSV9ubF9sYW5naW5mbyIpIF9fYXR0cmlidXRlX18gKCh2aXNp YmlsaXR5ICgiaGlkZGVuIikpKTsKCmV4dGVybiBfX3R5cGVvZiAobmxfbGFuZ2luZm9fbCkgX19u bF9sYW5naW5mb19sOwojIDI1ICIuLi9sb2NhbGUvbG9jYWxlaW5mby5oIiAyCiMgMSAiLi4vaW5j bHVkZS9saW1pdHMuaCIgMQojIDEyNCAiLi4vaW5jbHVkZS9saW1pdHMuaCIKIyAxICIvdXNyL2xp YjY0L2djYy1saWIveDg2XzY0LXN1c2UtbGludXgvMy4zL2luY2x1ZGUvbGltaXRzLmgiIDEgMyA0 CiMgMTI1ICIuLi9pbmNsdWRlL2xpbWl0cy5oIiAyCiMgMTQ0ICIuLi9pbmNsdWRlL2xpbWl0cy5o IgojIDEgIi4uL2luY2x1ZGUvYml0cy9wb3NpeDFfbGltLmgiIDEKIyAxICIuLi9wb3NpeC9iaXRz L3Bvc2l4MV9saW0uaCIgMQojIDEyNiAiLi4vcG9zaXgvYml0cy9wb3NpeDFfbGltLmgiCiMgMSAi Li4vbGludXh0aHJlYWRzL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L2JpdHMvbG9jYWxfbGltLmgi IDEKIyAzNiAiLi4vbGludXh0aHJlYWRzL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L2JpdHMvbG9j YWxfbGltLmgiCiMgMSAiL3Vzci9zcmMvcGFja2FnZXMvQlVJTEQva2VybmVsLWhlYWRlcnMvbGlu dXgvbGltaXRzLmgiIDEgMyA0CiMgMzcgIi4uL2xpbnV4dGhyZWFkcy9zeXNkZXBzL3VuaXgvc3lz di9saW51eC9iaXRzL2xvY2FsX2xpbS5oIiAyCiMgMTI3ICIuLi9wb3NpeC9iaXRzL3Bvc2l4MV9s aW0uaCIgMgojIDIgIi4uL2luY2x1ZGUvYml0cy9wb3NpeDFfbGltLmgiIDIKIyAxNDUgIi4uL2lu Y2x1ZGUvbGltaXRzLmgiIDIKCgoKIyAxICIuLi9pbmNsdWRlL2JpdHMvcG9zaXgyX2xpbS5oIiAx CiMgMSAiLi4vcG9zaXgvYml0cy9wb3NpeDJfbGltLmgiIDEKIyAyICIuLi9pbmNsdWRlL2JpdHMv cG9zaXgyX2xpbS5oIiAyCiMgMTQ5ICIuLi9pbmNsdWRlL2xpbWl0cy5oIiAyCgoKCiMgMSAiLi4v aW5jbHVkZS9iaXRzL3hvcGVuX2xpbS5oIiAxCiMgMzQgIi4uL2luY2x1ZGUvYml0cy94b3Blbl9s aW0uaCIKIyAxICIvdXNyL3NyYy9wYWNrYWdlcy9CVUlMRC9nbGliYy0yLjMvY2MvYml0cy9zdGRp b19saW0uaCIgMQojIDM1ICIuLi9pbmNsdWRlL2JpdHMveG9wZW5fbGltLmgiIDIKIyAxNTMgIi4u L2luY2x1ZGUvbGltaXRzLmgiIDIKIyAyNiAiLi4vbG9jYWxlL2xvY2FsZWluZm8uaCIgMgojIDEg Ii4uL2luY2x1ZGUvbG9jYWxlLmgiIDEKCiMgMSAiLi4vbG9jYWxlL2xvY2FsZS5oIiAxCiMgMjkg Ii4uL2xvY2FsZS9sb2NhbGUuaCIKIyAxICIvdXNyL2xpYjY0L2djYy1saWIveDg2XzY0LXN1c2Ut bGludXgvMy4zL2luY2x1ZGUvc3RkZGVmLmgiIDEgMyA0CiMgMzAgIi4uL2xvY2FsZS9sb2NhbGUu aCIgMgojIDEgIi4uL2luY2x1ZGUvYml0cy9sb2NhbGUuaCIgMQojIDEgIi4uL2xvY2FsZS9iaXRz L2xvY2FsZS5oIiAxCiMgMiAiLi4vaW5jbHVkZS9iaXRzL2xvY2FsZS5oIiAyCiMgMzEgIi4uL2xv Y2FsZS9sb2NhbGUuaCIgMgoKCiMgNTIgIi4uL2xvY2FsZS9sb2NhbGUuaCIKc3RydWN0IGxjb252 CnsKCgogIGNoYXIgKmRlY2ltYWxfcG9pbnQ7CiAgY2hhciAqdGhvdXNhbmRzX3NlcDsKCgoKCgog IGNoYXIgKmdyb3VwaW5nOwoKCgoKCiAgY2hhciAqaW50X2N1cnJfc3ltYm9sOwogIGNoYXIgKmN1 cnJlbmN5X3N5bWJvbDsKICBjaGFyICptb25fZGVjaW1hbF9wb2ludDsKICBjaGFyICptb25fdGhv dXNhbmRzX3NlcDsKICBjaGFyICptb25fZ3JvdXBpbmc7CiAgY2hhciAqcG9zaXRpdmVfc2lnbjsK ICBjaGFyICpuZWdhdGl2ZV9zaWduOwogIGNoYXIgaW50X2ZyYWNfZGlnaXRzOwogIGNoYXIgZnJh Y19kaWdpdHM7CgogIGNoYXIgcF9jc19wcmVjZWRlczsKCiAgY2hhciBwX3NlcF9ieV9zcGFjZTsK CiAgY2hhciBuX2NzX3ByZWNlZGVzOwoKICBjaGFyIG5fc2VwX2J5X3NwYWNlOwoKCgoKCgogIGNo YXIgcF9zaWduX3Bvc247CiAgY2hhciBuX3NpZ25fcG9zbjsKCgogIGNoYXIgaW50X3BfY3NfcHJl Y2VkZXM7CgogIGNoYXIgaW50X3Bfc2VwX2J5X3NwYWNlOwoKICBjaGFyIGludF9uX2NzX3ByZWNl ZGVzOwoKICBjaGFyIGludF9uX3NlcF9ieV9zcGFjZTsKCgoKCgoKICBjaGFyIGludF9wX3NpZ25f cG9zbjsKICBjaGFyIGludF9uX3NpZ25fcG9zbjsKIyAxMTkgIi4uL2xvY2FsZS9sb2NhbGUuaCIK fTsKCgoKCgpleHRlcm4gY2hhciAqc2V0bG9jYWxlIChpbnQgX19jYXRlZ29yeSwgX19jb25zdCBj aGFyICpfX2xvY2FsZSkgOwoKCmV4dGVybiBzdHJ1Y3QgbGNvbnYgKmxvY2FsZWNvbnYgKHZvaWQp IDsKCgojIDE0NiAiLi4vbG9jYWxlL2xvY2FsZS5oIgojIDEgIi4uL2luY2x1ZGUveGxvY2FsZS5o IiAxCiMgMTQ3ICIuLi9sb2NhbGUvbG9jYWxlLmgiIDIKCnR5cGVkZWYgX19sb2NhbGVfdCBsb2Nh bGVfdDsKCgoKCgpleHRlcm4gX19sb2NhbGVfdCBuZXdsb2NhbGUgKGludCBfX2NhdGVnb3J5X21h c2ssIF9fY29uc3QgY2hhciAqX19sb2NhbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg X19sb2NhbGVfdCBfX2Jhc2UpIDsKIyAxODkgIi4uL2xvY2FsZS9sb2NhbGUuaCIKZXh0ZXJuIF9f bG9jYWxlX3QgZHVwbG9jYWxlIChfX2xvY2FsZV90IF9fZGF0YXNldCkgOwoKCgpleHRlcm4gdm9p ZCBmcmVlbG9jYWxlIChfX2xvY2FsZV90IF9fZGF0YXNldCkgOwoKCgoKCgpleHRlcm4gX19sb2Nh bGVfdCB1c2Vsb2NhbGUgKF9fbG9jYWxlX3QgX19kYXRhc2V0KSA7CgoKCgoKCgoKIyAzICIuLi9p bmNsdWRlL2xvY2FsZS5oIiAyCgpleHRlcm4gX190eXBlb2YgKHVzZWxvY2FsZSkgX191c2Vsb2Nh bGU7CgpleHRlcm4gX190eXBlb2YgKHNldGxvY2FsZSkgX19HSV9zZXRsb2NhbGU7IGV4dGVybiBf X3R5cGVvZiAoc2V0bG9jYWxlKSBzZXRsb2NhbGUgX19hc21fXyAoIiIgIl9fR0lfc2V0bG9jYWxl IikgX19hdHRyaWJ1dGVfXyAoKHZpc2liaWxpdHkgKCJoaWRkZW4iKSkpOwoKCgoKZXh0ZXJuIHN0 cnVjdCBsb2FkZWRfbDEwbmZpbGUgKl9ubF9sb2NhbGVfZmlsZV9saXN0W10gX19hdHRyaWJ1dGVf XyAoKHZpc2liaWxpdHkgKCJoaWRkZW4iKSkpOwoKCmV4dGVybiBzdHJ1Y3QgX19sb2NhbGVfc3Ry dWN0IF9ubF9DX2xvY29iaiBfX2F0dHJpYnV0ZV9fICgodmlzaWJpbGl0eSAoImhpZGRlbiIpKSk7 CgoKZXh0ZXJuIHN0cnVjdCBsY29udiAqX19sb2NhbGVjb252ICh2b2lkKTsKCgpleHRlcm4gY29u c3QgY2hhciAqX19jdXJyZW50X2xvY2FsZV9uYW1lIChpbnQgY2F0ZWdvcnkpIF9fYXR0cmlidXRl X18gKCh2aXNpYmlsaXR5ICgiaGlkZGVuIikpKTsKIyAyNyAiLi4vbG9jYWxlL2xvY2FsZWluZm8u aCIgMgojIDEgIi4uL2luY2x1ZGUvdGltZS5oIiAxCgoKCgojIDEgIi4uL3RpbWUvdGltZS5oIiAx CiMgMzAgIi4uL3RpbWUvdGltZS5oIgoKCgoKCgoKCiMgMSAiL3Vzci9saWI2NC9nY2MtbGliL3g4 Nl82NC1zdXNlLWxpbnV4LzMuMy9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMgNAojIDM5ICIuLi90aW1l L3RpbWUuaCIgMgoKCgojIDEgIi4uL3N5c2RlcHMvZ2VuZXJpYy9iaXRzL3RpbWUuaCIgMQojIDQz ICIuLi90aW1lL3RpbWUuaCIgMgojIDU2ICIuLi90aW1lL3RpbWUuaCIKIyAxICIuLi9zeXNkZXBz L2dlbmVyaWMvYml0cy90eXBlcy5oIiAxCiMgMjggIi4uL3N5c2RlcHMvZ2VuZXJpYy9iaXRzL3R5 cGVzLmgiCiMgMSAiLi4vc3lzZGVwcy94ODZfNjQvYml0cy93b3Jkc2l6ZS5oIiAxCiMgMjkgIi4u L3N5c2RlcHMvZ2VuZXJpYy9iaXRzL3R5cGVzLmgiIDIKCgojIDEgIi91c3IvbGliNjQvZ2NjLWxp Yi94ODZfNjQtc3VzZS1saW51eC8zLjMvaW5jbHVkZS9zdGRkZWYuaCIgMSAzIDQKIyAzMiAiLi4v c3lzZGVwcy9nZW5lcmljL2JpdHMvdHlwZXMuaCIgMgoKCnR5cGVkZWYgdW5zaWduZWQgY2hhciBf X3VfY2hhcjsKdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBpbnQgX191X3Nob3J0Owp0eXBlZGVmIHVu c2lnbmVkIGludCBfX3VfaW50Owp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgaW50IF9fdV9sb25nOwoK CnR5cGVkZWYgc2lnbmVkIGNoYXIgX19pbnQ4X3Q7CnR5cGVkZWYgdW5zaWduZWQgY2hhciBfX3Vp bnQ4X3Q7CnR5cGVkZWYgc2lnbmVkIHNob3J0IGludCBfX2ludDE2X3Q7CnR5cGVkZWYgdW5zaWdu ZWQgc2hvcnQgaW50IF9fdWludDE2X3Q7CnR5cGVkZWYgc2lnbmVkIGludCBfX2ludDMyX3Q7CnR5 cGVkZWYgdW5zaWduZWQgaW50IF9fdWludDMyX3Q7Cgp0eXBlZGVmIHNpZ25lZCBsb25nIGludCBf X2ludDY0X3Q7CnR5cGVkZWYgdW5zaWduZWQgbG9uZyBpbnQgX191aW50NjRfdDsKIyA1NyAiLi4v c3lzZGVwcy9nZW5lcmljL2JpdHMvdHlwZXMuaCIKX19leHRlbnNpb25fXyB0eXBlZGVmIGxvbmcg bG9uZyBpbnQgX19xdWFkX3Q7Cl9fZXh0ZW5zaW9uX18gdHlwZWRlZiB1bnNpZ25lZCBsb25nIGxv bmcgaW50IF9fdV9xdWFkX3Q7CiMgMTI4ICIuLi9zeXNkZXBzL2dlbmVyaWMvYml0cy90eXBlcy5o IgojIDEgIi4uL3N5c2RlcHMvZ2VuZXJpYy9iaXRzL3R5cGVzaXplcy5oIiAxCiMgMTI5ICIuLi9z eXNkZXBzL2dlbmVyaWMvYml0cy90eXBlcy5oIiAyCgoKdHlwZWRlZiB1bnNpZ25lZCBsb25nIGxv bmcgaW50IF9fZGV2X3Q7CnR5cGVkZWYgdW5zaWduZWQgaW50IF9fdWlkX3Q7CnR5cGVkZWYgdW5z aWduZWQgaW50IF9fZ2lkX3Q7CnR5cGVkZWYgdW5zaWduZWQgbG9uZyBpbnQgX19pbm9fdDsKdHlw ZWRlZiB1bnNpZ25lZCBsb25nIGxvbmcgaW50IF9faW5vNjRfdDsKdHlwZWRlZiB1bnNpZ25lZCBp bnQgX19tb2RlX3Q7CnR5cGVkZWYgdW5zaWduZWQgbG9uZyBpbnQgX19ubGlua190Owp0eXBlZGVm IGxvbmcgaW50IF9fb2ZmX3Q7CnR5cGVkZWYgbG9uZyBsb25nIGludCBfX29mZjY0X3Q7CnR5cGVk ZWYgaW50IF9fcGlkX3Q7CnR5cGVkZWYgc3RydWN0IHsgaW50IF9fdmFsWzJdOyB9IF9fZnNpZF90 Owp0eXBlZGVmIGxvbmcgaW50IF9fY2xvY2tfdDsKdHlwZWRlZiB1bnNpZ25lZCBsb25nIGludCBf X3JsaW1fdDsKdHlwZWRlZiB1bnNpZ25lZCBsb25nIGxvbmcgaW50IF9fcmxpbTY0X3Q7CnR5cGVk ZWYgdW5zaWduZWQgaW50IF9faWRfdDsKdHlwZWRlZiBsb25nIGludCBfX3RpbWVfdDsKdHlwZWRl ZiB1bnNpZ25lZCBpbnQgX191c2Vjb25kc190Owp0eXBlZGVmIGxvbmcgaW50IF9fc3VzZWNvbmRz X3Q7Cgp0eXBlZGVmIGludCBfX2RhZGRyX3Q7CnR5cGVkZWYgbG9uZyBpbnQgX19zd2Jsa190Owp0 eXBlZGVmIGludCBfX2tleV90OwoKCnR5cGVkZWYgaW50IF9fY2xvY2tpZF90OwoKCnR5cGVkZWYg aW50IF9fdGltZXJfdDsKCgp0eXBlZGVmIGxvbmcgaW50IF9fYmxrc2l6ZV90OwoKCgoKdHlwZWRl ZiBsb25nIGludCBfX2Jsa2NudF90Owp0eXBlZGVmIGxvbmcgbG9uZyBpbnQgX19ibGtjbnQ2NF90 OwoKCnR5cGVkZWYgdW5zaWduZWQgbG9uZyBpbnQgX19mc2Jsa2NudF90Owp0eXBlZGVmIHVuc2ln bmVkIGxvbmcgbG9uZyBpbnQgX19mc2Jsa2NudDY0X3Q7CgoKdHlwZWRlZiB1bnNpZ25lZCBsb25n IGludCBfX2ZzZmlsY250X3Q7CnR5cGVkZWYgdW5zaWduZWQgbG9uZyBsb25nIGludCBfX2ZzZmls Y250NjRfdDsKCgoKCnR5cGVkZWYgbG9uZyBpbnQgX19zc2l6ZV90Owp0eXBlZGVmIF9fb2ZmNjRf dCBfX2xvZmZfdDsKdHlwZWRlZiBfX3F1YWRfdCAqX19xYWRkcl90Owp0eXBlZGVmIGNoYXIgKl9f Y2FkZHJfdDsKCgp0eXBlZGVmIGxvbmcgaW50IF9faW50cHRyX3Q7CgoKdHlwZWRlZiB1bnNpZ25l ZCBpbnQgX19zb2NrbGVuX3Q7CiMgNTcgIi4uL3RpbWUvdGltZS5oIiAyCgoKCnR5cGVkZWYgX19j bG9ja190IGNsb2NrX3Q7CgoKCiMgNzQgIi4uL3RpbWUvdGltZS5oIgoKCnR5cGVkZWYgX190aW1l X3QgdGltZV90OwoKCgojIDkyICIuLi90aW1lL3RpbWUuaCIKdHlwZWRlZiBfX2Nsb2NraWRfdCBj bG9ja2lkX3Q7CiMgMTA0ICIuLi90aW1lL3RpbWUuaCIKdHlwZWRlZiBfX3RpbWVyX3QgdGltZXJf dDsKIyAxMTYgIi4uL3RpbWUvdGltZS5oIgpzdHJ1Y3QgdGltZXNwZWMKICB7CiAgICBfX3RpbWVf dCB0dl9zZWM7CiAgICBsb25nIGludCB0dl9uc2VjOwogIH07CgoKCgoKCgoKc3RydWN0IHRtCnsK ICBpbnQgdG1fc2VjOwogIGludCB0bV9taW47CiAgaW50IHRtX2hvdXI7CiAgaW50IHRtX21kYXk7 CiAgaW50IHRtX21vbjsKICBpbnQgdG1feWVhcjsKICBpbnQgdG1fd2RheTsKICBpbnQgdG1feWRh eTsKICBpbnQgdG1faXNkc3Q7CgoKICBsb25nIGludCB0bV9nbXRvZmY7CiAgX19jb25zdCBjaGFy ICp0bV96b25lOwoKCgoKfTsKCgoKCgoKCgpzdHJ1Y3QgaXRpbWVyc3BlYwogIHsKICAgIHN0cnVj dCB0aW1lc3BlYyBpdF9pbnRlcnZhbDsKICAgIHN0cnVjdCB0aW1lc3BlYyBpdF92YWx1ZTsKICB9 OwoKCnN0cnVjdCBzaWdldmVudDsKCgoKCgp0eXBlZGVmIF9fcGlkX3QgcGlkX3Q7CgoKCgoKCgoK ZXh0ZXJuIGNsb2NrX3QgY2xvY2sgKHZvaWQpIDsKCgpleHRlcm4gdGltZV90IHRpbWUgKHRpbWVf dCAqX190aW1lcikgOwoKCmV4dGVybiBkb3VibGUgZGlmZnRpbWUgKHRpbWVfdCBfX3RpbWUxLCB0 aW1lX3QgX190aW1lMCkKICAgICBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKZXh0ZXJu IHRpbWVfdCBta3RpbWUgKHN0cnVjdCB0bSAqX190cCkgOwoKCgoKCmV4dGVybiBzaXplX3Qgc3Ry ZnRpbWUgKGNoYXIgKl9fcmVzdHJpY3QgX19zLCBzaXplX3QgX19tYXhzaXplLAogICAgICAgICAg ICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsCiAgICAgICAg ICAgICAgICAgICAgICAgIF9fY29uc3Qgc3RydWN0IHRtICpfX3Jlc3RyaWN0IF9fdHApIDsKCgoK CgpleHRlcm4gY2hhciAqc3RycHRpbWUgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX3MsCiAg ICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm10LCBzdHJ1 Y3QgdG0gKl9fdHApCiAgICAgOwoKCgoKCiMgMSAiLi4vaW5jbHVkZS94bG9jYWxlLmgiIDEKIyAy MTIgIi4uL3RpbWUvdGltZS5oIiAyCgpleHRlcm4gc2l6ZV90IHN0cmZ0aW1lX2wgKGNoYXIgKl9f cmVzdHJpY3QgX19zLCBzaXplX3QgX19tYXhzaXplLAogICAgICAgICAgICAgICAgICAgICAgICAg IF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwKICAgICAgICAgICAgICAgICAgICAg ICAgICBfX2NvbnN0IHN0cnVjdCB0bSAqX19yZXN0cmljdCBfX3RwLAogICAgICAgICAgICAgICAg ICAgICAgICAgIF9fbG9jYWxlX3QgX19sb2MpIDsKCmV4dGVybiBjaGFyICpzdHJwdGltZV9sIChf X2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zLAogICAgICAgICAgICAgICAgICAgICAgICAgX19j b25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm10LCBzdHJ1Y3QgdG0gKl9fdHAsCiAgICAgICAgICAg ICAgICAgICAgICAgICBfX2xvY2FsZV90IF9fbG9jKSA7CgoKCgoKCmV4dGVybiBzdHJ1Y3QgdG0g KmdtdGltZSAoX19jb25zdCB0aW1lX3QgKl9fdGltZXIpIDsKCgoKZXh0ZXJuIHN0cnVjdCB0bSAq bG9jYWx0aW1lIChfX2NvbnN0IHRpbWVfdCAqX190aW1lcikgOwoKCgoKCmV4dGVybiBzdHJ1Y3Qg dG0gKmdtdGltZV9yIChfX2NvbnN0IHRpbWVfdCAqX19yZXN0cmljdCBfX3RpbWVyLAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHRtICpfX3Jlc3RyaWN0IF9fdHApIDsKCgoKZXh0 ZXJuIHN0cnVjdCB0bSAqbG9jYWx0aW1lX3IgKF9fY29uc3QgdGltZV90ICpfX3Jlc3RyaWN0IF9f dGltZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgdG0gKl9fcmVzdHJp Y3QgX190cCkgOwoKCgoKCmV4dGVybiBjaGFyICphc2N0aW1lIChfX2NvbnN0IHN0cnVjdCB0bSAq X190cCkgOwoKCmV4dGVybiBjaGFyICpjdGltZSAoX19jb25zdCB0aW1lX3QgKl9fdGltZXIpIDsK CgoKCgoKCmV4dGVybiBjaGFyICphc2N0aW1lX3IgKF9fY29uc3Qgc3RydWN0IHRtICpfX3Jlc3Ry aWN0IF9fdHAsCiAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKl9fcmVzdHJpY3QgX19idWYp IDsKCgpleHRlcm4gY2hhciAqY3RpbWVfciAoX19jb25zdCB0aW1lX3QgKl9fcmVzdHJpY3QgX190 aW1lciwKICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKl9fcmVzdHJpY3QgX19idWYpIDsKCgoK CmV4dGVybiBjaGFyICpfX3R6bmFtZVsyXTsKZXh0ZXJuIGludCBfX2RheWxpZ2h0OwpleHRlcm4g bG9uZyBpbnQgX190aW1lem9uZTsKCgoKCmV4dGVybiBjaGFyICp0em5hbWVbMl07CgoKCmV4dGVy biB2b2lkIHR6c2V0ICh2b2lkKSA7CgoKCmV4dGVybiBpbnQgZGF5bGlnaHQ7CmV4dGVybiBsb25n IGludCB0aW1lem9uZTsKCgoKCgpleHRlcm4gaW50IHN0aW1lIChfX2NvbnN0IHRpbWVfdCAqX193 aGVuKSA7CiMgMzA3ICIuLi90aW1lL3RpbWUuaCIKZXh0ZXJuIHRpbWVfdCB0aW1lZ20gKHN0cnVj dCB0bSAqX190cCkgOwoKCmV4dGVybiB0aW1lX3QgdGltZWxvY2FsIChzdHJ1Y3QgdG0gKl9fdHAp IDsKCgpleHRlcm4gaW50IGR5c2l6ZSAoaW50IF9feWVhcikgX19hdHRyaWJ1dGVfXyAoKF9fY29u c3RfXykpOwoKCgoKCmV4dGVybiBpbnQgbmFub3NsZWVwIChfX2NvbnN0IHN0cnVjdCB0aW1lc3Bl YyAqX19yZXF1ZXN0ZWRfdGltZSwKICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB0aW1lc3Bl YyAqX19yZW1haW5pbmcpIDsKCgoKZXh0ZXJuIGludCBjbG9ja19nZXRyZXMgKGNsb2NraWRfdCBf X2Nsb2NrX2lkLCBzdHJ1Y3QgdGltZXNwZWMgKl9fcmVzKSA7CgoKZXh0ZXJuIGludCBjbG9ja19n ZXR0aW1lIChjbG9ja2lkX3QgX19jbG9ja19pZCwgc3RydWN0IHRpbWVzcGVjICpfX3RwKSA7CgoK ZXh0ZXJuIGludCBjbG9ja19zZXR0aW1lIChjbG9ja2lkX3QgX19jbG9ja19pZCwgX19jb25zdCBz dHJ1Y3QgdGltZXNwZWMgKl9fdHApCiAgICAgOwoKCgpleHRlcm4gaW50IGNsb2NrX25hbm9zbGVl cCAoY2xvY2tpZF90IF9fY2xvY2tfaWQsIGludCBfX2ZsYWdzLAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgX19jb25zdCBzdHJ1Y3QgdGltZXNwZWMgKl9fcmVxLAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgc3RydWN0IHRpbWVzcGVjICpfX3JlbSkgOwoKCmV4dGVybiBpbnQgY2xvY2tf Z2V0Y3B1Y2xvY2tpZCAocGlkX3QgX19waWQsIGNsb2NraWRfdCAqX19jbG9ja19pZCkgOwoKCgoK ZXh0ZXJuIGludCB0aW1lcl9jcmVhdGUgKGNsb2NraWRfdCBfX2Nsb2NrX2lkLAogICAgICAgICAg ICAgICAgICAgICAgICAgc3RydWN0IHNpZ2V2ZW50ICpfX3Jlc3RyaWN0IF9fZXZwLAogICAgICAg ICAgICAgICAgICAgICAgICAgdGltZXJfdCAqX19yZXN0cmljdCBfX3RpbWVyaWQpIDsKCgpleHRl cm4gaW50IHRpbWVyX2RlbGV0ZSAodGltZXJfdCBfX3RpbWVyaWQpIDsKCgpleHRlcm4gaW50IHRp bWVyX3NldHRpbWUgKHRpbWVyX3QgX190aW1lcmlkLCBpbnQgX19mbGFncywKICAgICAgICAgICAg ICAgICAgICAgICAgICBfX2NvbnN0IHN0cnVjdCBpdGltZXJzcGVjICpfX3Jlc3RyaWN0IF9fdmFs dWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGl0aW1lcnNwZWMgKl9fcmVzdHJp Y3QgX19vdmFsdWUpIDsKCgpleHRlcm4gaW50IHRpbWVyX2dldHRpbWUgKHRpbWVyX3QgX190aW1l cmlkLCBzdHJ1Y3QgaXRpbWVyc3BlYyAqX192YWx1ZSkKICAgICA7CgoKZXh0ZXJuIGludCB0aW1l cl9nZXRvdmVycnVuICh0aW1lcl90IF9fdGltZXJpZCkgOwojIDM3OCAiLi4vdGltZS90aW1lLmgi CmV4dGVybiBpbnQgZ2V0ZGF0ZV9lcnI7CgoKCgoKZXh0ZXJuIHN0cnVjdCB0bSAqZ2V0ZGF0ZSAo X19jb25zdCBjaGFyICpfX3N0cmluZykgOwojIDM5MyAiLi4vdGltZS90aW1lLmgiCmV4dGVybiBp bnQgZ2V0ZGF0ZV9yIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zdHJpbmcsCiAgICAgICAg ICAgICAgICAgICAgICBzdHJ1Y3QgdG0gKl9fcmVzdHJpY3QgX19yZXNidWZwKSA7CgoKCiMgNiAi Li4vaW5jbHVkZS90aW1lLmgiIDIKCmV4dGVybiBfX3R5cGVvZiAoc3RyZnRpbWVfbCkgX19zdHJm dGltZV9sOwpleHRlcm4gX190eXBlb2YgKHN0cnB0aW1lX2wpIF9fc3RycHRpbWVfbDsKCmV4dGVy biBfX3R5cGVvZiAodGltZSkgX19HSV90aW1lOyBleHRlcm4gX190eXBlb2YgKHRpbWUpIHRpbWUg X19hc21fXyAoIiIgIl9fR0lfdGltZSIpIF9fYXR0cmlidXRlX18gKCh2aXNpYmlsaXR5ICgiaGlk ZGVuIikpKTsKZXh0ZXJuIF9fdHlwZW9mIChhc2N0aW1lKSBfX0dJX2FzY3RpbWU7IGV4dGVybiBf X3R5cGVvZiAoYXNjdGltZSkgYXNjdGltZSBfX2FzbV9fICgiIiAiX19HSV9hc2N0aW1lIikgX19h dHRyaWJ1dGVfXyAoKHZpc2liaWxpdHkgKCJoaWRkZW4iKSkpOwpleHRlcm4gX190eXBlb2YgKG1r dGltZSkgX19HSV9ta3RpbWU7IGV4dGVybiBfX3R5cGVvZiAobWt0aW1lKSBta3RpbWUgX19hc21f XyAoIiIgIl9fR0lfbWt0aW1lIikgX19hdHRyaWJ1dGVfXyAoKHZpc2liaWxpdHkgKCJoaWRkZW4i KSkpOwpleHRlcm4gX190eXBlb2YgKHRpbWVsb2NhbCkgX19HSV90aW1lbG9jYWw7IGV4dGVybiBf X3R5cGVvZiAodGltZWxvY2FsKSB0aW1lbG9jYWwgX19hc21fXyAoIiIgIl9fR0lfdGltZWxvY2Fs IikgX19hdHRyaWJ1dGVfXyAoKHZpc2liaWxpdHkgKCJoaWRkZW4iKSkpOwpleHRlcm4gX190eXBl b2YgKGxvY2FsdGltZSkgX19HSV9sb2NhbHRpbWU7IGV4dGVybiBfX3R5cGVvZiAobG9jYWx0aW1l KSBsb2NhbHRpbWUgX19hc21fXyAoIiIgIl9fR0lfbG9jYWx0aW1lIikgX19hdHRyaWJ1dGVfXyAo KHZpc2liaWxpdHkgKCJoaWRkZW4iKSkpOwpleHRlcm4gX190eXBlb2YgKHN0cmZ0aW1lKSBfX0dJ X3N0cmZ0aW1lOyBleHRlcm4gX190eXBlb2YgKHN0cmZ0aW1lKSBzdHJmdGltZSBfX2FzbV9fICgi IiAiX19HSV9zdHJmdGltZSIpIF9fYXR0cmlidXRlX18gKCh2aXNpYmlsaXR5ICgiaGlkZGVuIikp KTsKZXh0ZXJuIF9fdHlwZW9mIChzdHJwdGltZSkgX19HSV9zdHJwdGltZTsgZXh0ZXJuIF9fdHlw ZW9mIChzdHJwdGltZSkgc3RycHRpbWUgX19hc21fXyAoIiIgIl9fR0lfc3RycHRpbWUiKSBfX2F0 dHJpYnV0ZV9fICgodmlzaWJpbGl0eSAoImhpZGRlbiIpKSk7CgoKc3RydWN0IHRtOwoKCmV4dGVy biBjb25zdCB1bnNpZ25lZCBzaG9ydCBpbnQgX19tb25feWRheVsyXVsxM10gX19hdHRyaWJ1dGVf XyAoKHZpc2liaWxpdHkgKCJoaWRkZW4iKSkpOwoKCmV4dGVybiBzdHJ1Y3QgdG0gX3RtYnVmIF9f YXR0cmlidXRlX18gKCh2aXNpYmlsaXR5ICgiaGlkZGVuIikpKTsKCgpleHRlcm4gY2hhciAqX190 enN0cmluZyAoY29uc3QgY2hhciAqc3RyaW5nKTsKCgpleHRlcm4gc2l6ZV90IF9fdHpuYW1lX2N1 cl9tYXggX19hdHRyaWJ1dGVfXyAoKHZpc2liaWxpdHkgKCJoaWRkZW4iKSkpOwoKCmV4dGVybiBp bnQgX191c2VfdHpmaWxlIF9fYXR0cmlidXRlX18gKCh2aXNpYmlsaXR5ICgiaGlkZGVuIikpKTsK CmV4dGVybiB2b2lkIF9fdHpmaWxlX3JlYWQgKGNvbnN0IGNoYXIgKmZpbGUsIHNpemVfdCBleHRy YSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKmV4dHJhcCk7CmV4dGVybiBpbnQg X190emZpbGVfY29tcHV0ZSAodGltZV90IHRpbWVyLCBpbnQgdXNlX2xvY2FsdGltZSwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBsb25nIGludCAqbGVhcF9jb3JyZWN0LCBpbnQgKmxlYXBf aGl0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB0bSAqdHApOwpleHRlcm4g dm9pZCBfX3R6ZmlsZV9kZWZhdWx0IChjb25zdCBjaGFyICpzdGQsIGNvbnN0IGNoYXIgKmRzdCwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBpbnQgc3Rkb2ZmLCBsb25nIGludCBk c3RvZmYpOwoKCgoKZXh0ZXJuIHRpbWVfdCBfX21rdGltZV9pbnRlcm5hbCAoc3RydWN0IHRtICpf X3RwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgdG0gKigqX19mdW5j KSAoY29uc3QgdGltZV90ICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBzdHJ1Y3QgdG0gKiksCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHRpbWVfdCAqX19vZmZzZXQpOwpleHRlcm4gc3RydWN0IHRtICpfX2xvY2FsdGltZV9y IChfX2NvbnN0IHRpbWVfdCAqX190aW1lciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgc3RydWN0IHRtICpfX3RwKSBfX2F0dHJpYnV0ZV9fICgodmlzaWJpbGl0eSAoImhpZGRlbiIp KSk7CgpleHRlcm4gc3RydWN0IHRtICpfX2dtdGltZV9yIChfX2NvbnN0IHRpbWVfdCAqX19yZXN0 cmljdCBfX3RpbWVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgdG0gKl9f cmVzdHJpY3QgX190cCk7CmV4dGVybiBfX3R5cGVvZiAoX19nbXRpbWVfcikgX19HSV9fX2dtdGlt ZV9yOyBleHRlcm4gX190eXBlb2YgKF9fZ210aW1lX3IpIF9fZ210aW1lX3IgX19hc21fXyAoIiIg Il9fR0lfX19nbXRpbWVfciIpIF9fYXR0cmlidXRlX18gKCh2aXNpYmlsaXR5ICgiaGlkZGVuIikp KTsKCgoKCgpleHRlcm4gaW50IF9fb2ZmdGltZSAoX19jb25zdCB0aW1lX3QgKl9fdGltZXIsCiAg ICAgICAgICAgICAgICAgICAgICBsb25nIGludCBfX29mZnNldCwKICAgICAgICAgICAgICAgICAg ICAgIHN0cnVjdCB0bSAqX190cCk7CgpleHRlcm4gY2hhciAqX19hc2N0aW1lX3IgKF9fY29uc3Qg c3RydWN0IHRtICpfX3RwLCBjaGFyICpfX2J1Zik7CmV4dGVybiB2b2lkIF9fdHpzZXQgKHZvaWQp OwoKCmV4dGVybiBzdHJ1Y3QgdG0gKl9fdHpfY29udmVydCAoY29uc3QgdGltZV90ICp0aW1lciwg aW50IHVzZV9sb2NhbHRpbWUsIHN0cnVjdCB0bSAqdHApOwoKCgpleHRlcm4gbG9uZyBpbnQgX190 em5hbWVfbWF4ICh2b2lkKTsKCmV4dGVybiBpbnQgX19uYW5vc2xlZXAgKF9fY29uc3Qgc3RydWN0 IHRpbWVzcGVjICpfX3JlcXVlc3RlZF90aW1lLAogICAgICAgICAgICAgICAgICAgICAgICBzdHJ1 Y3QgdGltZXNwZWMgKl9fcmVtYWluaW5nKTsKZXh0ZXJuIGludCBfX2dldGRhdGVfciAoX19jb25z dCBjaGFyICpfX3N0cmluZywgc3RydWN0IHRtICpfX3Jlc2J1ZnApOwoKCgpleHRlcm4gaW50IF9f Z2V0Y2xrdGNrICh2b2lkKTsKIyAyOCAiLi4vbG9jYWxlL2xvY2FsZWluZm8uaCIgMgojIDEgIi4u L3N5c2RlcHMvZ2VuZXJpYy9zdGRpbnQuaCIgMQojIDI3ICIuLi9zeXNkZXBzL2dlbmVyaWMvc3Rk aW50LmgiCiMgMSAiLi4vc3lzZGVwcy9nZW5lcmljL2JpdHMvd2NoYXIuaCIgMQojIDI4ICIuLi9z eXNkZXBzL2dlbmVyaWMvc3RkaW50LmgiIDIKIyAxICIuLi9zeXNkZXBzL3g4Nl82NC9iaXRzL3dv cmRzaXplLmgiIDEKIyAyOSAiLi4vc3lzZGVwcy9nZW5lcmljL3N0ZGludC5oIiAyCiMgMzcgIi4u L3N5c2RlcHMvZ2VuZXJpYy9zdGRpbnQuaCIKdHlwZWRlZiBzaWduZWQgY2hhciBpbnQ4X3Q7CnR5 cGVkZWYgc2hvcnQgaW50IGludDE2X3Q7CnR5cGVkZWYgaW50IGludDMyX3Q7Cgp0eXBlZGVmIGxv bmcgaW50IGludDY0X3Q7CgoKCgoKCgp0eXBlZGVmIHVuc2lnbmVkIGNoYXIgdWludDhfdDsKdHlw ZWRlZiB1bnNpZ25lZCBzaG9ydCBpbnQgdWludDE2X3Q7Cgp0eXBlZGVmIHVuc2lnbmVkIGludCB1 aW50MzJfdDsKCgoKdHlwZWRlZiB1bnNpZ25lZCBsb25nIGludCB1aW50NjRfdDsKIyA2NiAiLi4v c3lzZGVwcy9nZW5lcmljL3N0ZGludC5oIgp0eXBlZGVmIHNpZ25lZCBjaGFyIGludF9sZWFzdDhf dDsKdHlwZWRlZiBzaG9ydCBpbnQgaW50X2xlYXN0MTZfdDsKdHlwZWRlZiBpbnQgaW50X2xlYXN0 MzJfdDsKCnR5cGVkZWYgbG9uZyBpbnQgaW50X2xlYXN0NjRfdDsKCgoKCgoKdHlwZWRlZiB1bnNp Z25lZCBjaGFyIHVpbnRfbGVhc3Q4X3Q7CnR5cGVkZWYgdW5zaWduZWQgc2hvcnQgaW50IHVpbnRf bGVhc3QxNl90Owp0eXBlZGVmIHVuc2lnbmVkIGludCB1aW50X2xlYXN0MzJfdDsKCnR5cGVkZWYg dW5zaWduZWQgbG9uZyBpbnQgdWludF9sZWFzdDY0X3Q7CiMgOTEgIi4uL3N5c2RlcHMvZ2VuZXJp Yy9zdGRpbnQuaCIKdHlwZWRlZiBzaWduZWQgY2hhciBpbnRfZmFzdDhfdDsKCnR5cGVkZWYgbG9u ZyBpbnQgaW50X2Zhc3QxNl90Owp0eXBlZGVmIGxvbmcgaW50IGludF9mYXN0MzJfdDsKdHlwZWRl ZiBsb25nIGludCBpbnRfZmFzdDY0X3Q7CiMgMTA0ICIuLi9zeXNkZXBzL2dlbmVyaWMvc3RkaW50 LmgiCnR5cGVkZWYgdW5zaWduZWQgY2hhciB1aW50X2Zhc3Q4X3Q7Cgp0eXBlZGVmIHVuc2lnbmVk IGxvbmcgaW50IHVpbnRfZmFzdDE2X3Q7CnR5cGVkZWYgdW5zaWduZWQgbG9uZyBpbnQgdWludF9m YXN0MzJfdDsKdHlwZWRlZiB1bnNpZ25lZCBsb25nIGludCB1aW50X2Zhc3Q2NF90OwojIDEyMCAi Li4vc3lzZGVwcy9nZW5lcmljL3N0ZGludC5oIgp0eXBlZGVmIGxvbmcgaW50IGludHB0cl90OwoK CnR5cGVkZWYgdW5zaWduZWQgbG9uZyBpbnQgdWludHB0cl90OwojIDEzNSAiLi4vc3lzZGVwcy9n ZW5lcmljL3N0ZGludC5oIgp0eXBlZGVmIGxvbmcgaW50IGludG1heF90Owp0eXBlZGVmIHVuc2ln bmVkIGxvbmcgaW50IHVpbnRtYXhfdDsKIyAyOSAiLi4vbG9jYWxlL2xvY2FsZWluZm8uaCIgMgoj IDEgIi4uL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDEKIyAxICIuLi9wb3NpeC9zeXMvdHlwZXMuaCIg MQojIDI5ICIuLi9wb3NpeC9zeXMvdHlwZXMuaCIKCgoKCgoKdHlwZWRlZiBfX3VfY2hhciB1X2No YXI7CnR5cGVkZWYgX191X3Nob3J0IHVfc2hvcnQ7CnR5cGVkZWYgX191X2ludCB1X2ludDsKdHlw ZWRlZiBfX3VfbG9uZyB1X2xvbmc7CnR5cGVkZWYgX19xdWFkX3QgcXVhZF90Owp0eXBlZGVmIF9f dV9xdWFkX3QgdV9xdWFkX3Q7CnR5cGVkZWYgX19mc2lkX3QgZnNpZF90OwoKCgoKdHlwZWRlZiBf X2xvZmZfdCBsb2ZmX3Q7CgoKCnR5cGVkZWYgX19pbm9fdCBpbm9fdDsKCgoKCgoKdHlwZWRlZiBf X2lubzY0X3QgaW5vNjRfdDsKCgoKCnR5cGVkZWYgX19kZXZfdCBkZXZfdDsKCgoKCnR5cGVkZWYg X19naWRfdCBnaWRfdDsKCgoKCnR5cGVkZWYgX19tb2RlX3QgbW9kZV90OwoKCgoKdHlwZWRlZiBf X25saW5rX3QgbmxpbmtfdDsKCgoKCnR5cGVkZWYgX191aWRfdCB1aWRfdDsKCgoKCgp0eXBlZGVm IF9fb2ZmX3Qgb2ZmX3Q7CgoKCgoKCnR5cGVkZWYgX19vZmY2NF90IG9mZjY0X3Q7CiMgMTA1ICIu Li9wb3NpeC9zeXMvdHlwZXMuaCIKdHlwZWRlZiBfX2lkX3QgaWRfdDsKCgoKCnR5cGVkZWYgX19z c2l6ZV90IHNzaXplX3Q7CgoKCgoKdHlwZWRlZiBfX2RhZGRyX3QgZGFkZHJfdDsKdHlwZWRlZiBf X2NhZGRyX3QgY2FkZHJfdDsKCgoKCgp0eXBlZGVmIF9fa2V5X3Qga2V5X3Q7CiMgMTM3ICIuLi9w b3NpeC9zeXMvdHlwZXMuaCIKdHlwZWRlZiBfX3VzZWNvbmRzX3QgdXNlY29uZHNfdDsKCgoKdHlw ZWRlZiBfX3N1c2Vjb25kc190IHN1c2Vjb25kc190OwoKCgoKCiMgMSAiL3Vzci9saWI2NC9nY2Mt bGliL3g4Nl82NC1zdXNlLWxpbnV4LzMuMy9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMgNAojIDE0OCAi Li4vcG9zaXgvc3lzL3R5cGVzLmgiIDIKCgoKdHlwZWRlZiB1bnNpZ25lZCBsb25nIGludCB1bG9u ZzsKdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBpbnQgdXNob3J0Owp0eXBlZGVmIHVuc2lnbmVkIGlu dCB1aW50OwojIDE5NyAiLi4vcG9zaXgvc3lzL3R5cGVzLmgiCnR5cGVkZWYgdW5zaWduZWQgaW50 IHVfaW50OF90IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAoX19RSV9fKSkpOwp0eXBlZGVmIHVu c2lnbmVkIGludCB1X2ludDE2X3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChfX0hJX18pKSk7 CnR5cGVkZWYgdW5zaWduZWQgaW50IHVfaW50MzJfdCBfX2F0dHJpYnV0ZV9fICgoX19tb2RlX18g KF9fU0lfXykpKTsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgdV9pbnQ2NF90IF9fYXR0cmlidXRlX18g KChfX21vZGVfXyAoX19ESV9fKSkpOwoKdHlwZWRlZiBpbnQgcmVnaXN0ZXJfdCBfX2F0dHJpYnV0 ZV9fICgoX19tb2RlX18gKF9fd29yZF9fKSkpOwojIDIxMyAiLi4vcG9zaXgvc3lzL3R5cGVzLmgi CiMgMSAiLi4vaW5jbHVkZS9lbmRpYW4uaCIgMQojIDEgIi4uL3N0cmluZy9lbmRpYW4uaCIgMQoj IDM3ICIuLi9zdHJpbmcvZW5kaWFuLmgiCiMgMSAiLi4vc3lzZGVwcy94ODZfNjQvYml0cy9lbmRp YW4uaCIgMQojIDM4ICIuLi9zdHJpbmcvZW5kaWFuLmgiIDIKIyAyICIuLi9pbmNsdWRlL2VuZGlh bi5oIiAyCiMgMjE0ICIuLi9wb3NpeC9zeXMvdHlwZXMuaCIgMgoKCiMgMSAiLi4vaW5jbHVkZS9z eXMvc2VsZWN0LmgiIDEKCiMgMSAiLi4vbWlzYy9zeXMvc2VsZWN0LmgiIDEKIyAzMSAiLi4vbWlz Yy9zeXMvc2VsZWN0LmgiCiMgMSAiLi4vc3lzZGVwcy9nZW5lcmljL2JpdHMvc2VsZWN0LmgiIDEK IyAzMiAiLi4vbWlzYy9zeXMvc2VsZWN0LmgiIDIKCgojIDEgIi4uL3N5c2RlcHMvdW5peC9zeXN2 L2xpbnV4L2JpdHMvc2lnc2V0LmgiIDEKIyAyMyAiLi4vc3lzZGVwcy91bml4L3N5c3YvbGludXgv Yml0cy9zaWdzZXQuaCIKdHlwZWRlZiBpbnQgX19zaWdfYXRvbWljX3Q7CgoKCgp0eXBlZGVmIHN0 cnVjdAogIHsKICAgIHVuc2lnbmVkIGxvbmcgaW50IF9fdmFsWygxMDI0IC8gKDggKiBzaXplb2Yg KHVuc2lnbmVkIGxvbmcgaW50KSkpXTsKICB9IF9fc2lnc2V0X3Q7CiMgMzUgIi4uL21pc2Mvc3lz L3NlbGVjdC5oIiAyCgoKCnR5cGVkZWYgX19zaWdzZXRfdCBzaWdzZXRfdDsKCgoKCgoKCiMgMSAi Li4vc3lzZGVwcy9nZW5lcmljL2JpdHMvdGltZS5oIiAxCiMgNjcgIi4uL3N5c2RlcHMvZ2VuZXJp Yy9iaXRzL3RpbWUuaCIKc3RydWN0IHRpbWV2YWwKICB7CiAgICBfX3RpbWVfdCB0dl9zZWM7CiAg ICBfX3N1c2Vjb25kc190IHR2X3VzZWM7CiAgfTsKIyA0NyAiLi4vbWlzYy9zeXMvc2VsZWN0Lmgi IDIKIyA1NSAiLi4vbWlzYy9zeXMvc2VsZWN0LmgiCnR5cGVkZWYgbG9uZyBpbnQgX19mZF9tYXNr OwojIDY3ICIuLi9taXNjL3N5cy9zZWxlY3QuaCIKdHlwZWRlZiBzdHJ1Y3QKICB7CgoKCiAgICBf X2ZkX21hc2sgZmRzX2JpdHNbMTAyNCAvICg4ICogc2l6ZW9mIChfX2ZkX21hc2spKV07CgoKCgoK ICB9IGZkX3NldDsKCgoKCgoKdHlwZWRlZiBfX2ZkX21hc2sgZmRfbWFzazsKIyA5OSAiLi4vbWlz Yy9zeXMvc2VsZWN0LmgiCgoKCgoKCgpleHRlcm4gaW50IHNlbGVjdCAoaW50IF9fbmZkcywgZmRf c2V0ICpfX3Jlc3RyaWN0IF9fcmVhZGZkcywKICAgICAgICAgICAgICAgICAgIGZkX3NldCAqX19y ZXN0cmljdCBfX3dyaXRlZmRzLAogICAgICAgICAgICAgICAgICAgZmRfc2V0ICpfX3Jlc3RyaWN0 IF9fZXhjZXB0ZmRzLAogICAgICAgICAgICAgICAgICAgc3RydWN0IHRpbWV2YWwgKl9fcmVzdHJp Y3QgX190aW1lb3V0KSA7CgoKCgoKZXh0ZXJuIGludCBwc2VsZWN0IChpbnQgX19uZmRzLCBmZF9z ZXQgKl9fcmVzdHJpY3QgX19yZWFkZmRzLAogICAgICAgICAgICAgICAgICAgIGZkX3NldCAqX19y ZXN0cmljdCBfX3dyaXRlZmRzLAogICAgICAgICAgICAgICAgICAgIGZkX3NldCAqX19yZXN0cmlj dCBfX2V4Y2VwdGZkcywKICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3QgdGltZXNwZWMg Kl9fcmVzdHJpY3QgX190aW1lb3V0LAogICAgICAgICAgICAgICAgICAgIGNvbnN0IF9fc2lnc2V0 X3QgKl9fcmVzdHJpY3QgX19zaWdtYXNrKSA7CgoKCiMgMyAiLi4vaW5jbHVkZS9zeXMvc2VsZWN0 LmgiIDIKCgpleHRlcm4gaW50IF9fcHNlbGVjdCAoaW50IF9fbmZkcywgZmRfc2V0ICpfX3JlYWRm ZHMsCiAgICAgICAgICAgICAgICAgICAgICBmZF9zZXQgKl9fd3JpdGVmZHMsIGZkX3NldCAqX19l eGNlcHRmZHMsCiAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3QgdGltZXNwZWMgKl9f dGltZW91dCwKICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9fc2lnc2V0X3QgKl9fc2lnbWFz ayk7CgpleHRlcm4gaW50IF9fc2VsZWN0IChpbnQgX19uZmRzLCBmZF9zZXQgKl9fcmVzdHJpY3Qg X19yZWFkZmRzLAogICAgICAgICAgICAgICAgICAgICBmZF9zZXQgKl9fcmVzdHJpY3QgX193cml0 ZWZkcywKICAgICAgICAgICAgICAgICAgICAgZmRfc2V0ICpfX3Jlc3RyaWN0IF9fZXhjZXB0ZmRz LAogICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgdGltZXZhbCAqX19yZXN0cmljdCBfX3RpbWVv dXQpOwpleHRlcm4gX190eXBlb2YgKF9fc2VsZWN0KSBfX0dJX19fc2VsZWN0OyBleHRlcm4gX190 eXBlb2YgKF9fc2VsZWN0KSBfX3NlbGVjdCBfX2FzbV9fICgiIiAiX19HSV9fX3NlbGVjdCIpIF9f YXR0cmlidXRlX18gKCh2aXNpYmlsaXR5ICgiaGlkZGVuIikpKTsKIyAyMTcgIi4uL3Bvc2l4L3N5 cy90eXBlcy5oIiAyCgoKIyAxICIuLi9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9zeXMvc3lzbWFj cm9zLmgiIDEKIyAyMjAgIi4uL3Bvc2l4L3N5cy90eXBlcy5oIiAyCgoKCgp0eXBlZGVmIF9fYmxr c2l6ZV90IGJsa3NpemVfdDsKCgoKCgoKdHlwZWRlZiBfX2Jsa2NudF90IGJsa2NudF90OwoKCgp0 eXBlZGVmIF9fZnNibGtjbnRfdCBmc2Jsa2NudF90OwoKCgp0eXBlZGVmIF9fZnNmaWxjbnRfdCBm c2ZpbGNudF90OwojIDI1OCAiLi4vcG9zaXgvc3lzL3R5cGVzLmgiCnR5cGVkZWYgX19ibGtjbnQ2 NF90IGJsa2NudDY0X3Q7CnR5cGVkZWYgX19mc2Jsa2NudDY0X3QgZnNibGtjbnQ2NF90Owp0eXBl ZGVmIF9fZnNmaWxjbnQ2NF90IGZzZmlsY250NjRfdDsKCgoKCgojIDEgIi4uL2xpbnV4dGhyZWFk cy9zeXNkZXBzL3B0aHJlYWQvYml0cy9wdGhyZWFkdHlwZXMuaCIgMQojIDIzICIuLi9saW51eHRo cmVhZHMvc3lzZGVwcy9wdGhyZWFkL2JpdHMvcHRocmVhZHR5cGVzLmgiCiMgMSAiLi4vc3lzZGVw cy91bml4L3N5c3YvbGludXgvYml0cy9zY2hlZC5oIiAxCiMgNjggIi4uL3N5c2RlcHMvdW5peC9z eXN2L2xpbnV4L2JpdHMvc2NoZWQuaCIKc3RydWN0IF9fc2NoZWRfcGFyYW0KICB7CiAgICBpbnQg X19zY2hlZF9wcmlvcml0eTsKICB9OwojIDI0ICIuLi9saW51eHRocmVhZHMvc3lzZGVwcy9wdGhy ZWFkL2JpdHMvcHRocmVhZHR5cGVzLmgiIDIKCgpzdHJ1Y3QgX3B0aHJlYWRfZmFzdGxvY2sKewog IGxvbmcgaW50IF9fc3RhdHVzOwogIGludCBfX3NwaW5sb2NrOwoKfTsKCgoKdHlwZWRlZiBzdHJ1 Y3QgX3B0aHJlYWRfZGVzY3Jfc3RydWN0ICpfcHRocmVhZF9kZXNjcjsKCgoKCgp0eXBlZGVmIHN0 cnVjdCBfX3B0aHJlYWRfYXR0cl9zCnsKICBpbnQgX19kZXRhY2hzdGF0ZTsKICBpbnQgX19zY2hl ZHBvbGljeTsKICBzdHJ1Y3QgX19zY2hlZF9wYXJhbSBfX3NjaGVkcGFyYW07CiAgaW50IF9faW5o ZXJpdHNjaGVkOwogIGludCBfX3Njb3BlOwogIHNpemVfdCBfX2d1YXJkc2l6ZTsKICBpbnQgX19z dGFja2FkZHJfc2V0OwogIHZvaWQgKl9fc3RhY2thZGRyOwogIHNpemVfdCBfX3N0YWNrc2l6ZTsK fSBwdGhyZWFkX2F0dHJfdDsKCgoKdHlwZWRlZiBzdHJ1Y3QKewogIHN0cnVjdCBfcHRocmVhZF9m YXN0bG9jayBfX2NfbG9jazsKICBfcHRocmVhZF9kZXNjciBfX2Nfd2FpdGluZzsKfSBwdGhyZWFk X2NvbmRfdDsKCgoKdHlwZWRlZiBzdHJ1Y3QKewogIGludCBfX2R1bW15Owp9IHB0aHJlYWRfY29u ZGF0dHJfdDsKCgp0eXBlZGVmIHVuc2lnbmVkIGludCBwdGhyZWFkX2tleV90OwoKCgoKCnR5cGVk ZWYgc3RydWN0CnsKICBpbnQgX19tX3Jlc2VydmVkOwogIGludCBfX21fY291bnQ7CiAgX3B0aHJl YWRfZGVzY3IgX19tX293bmVyOwogIGludCBfX21fa2luZDsKICBzdHJ1Y3QgX3B0aHJlYWRfZmFz dGxvY2sgX19tX2xvY2s7Cn0gcHRocmVhZF9tdXRleF90OwoKCgp0eXBlZGVmIHN0cnVjdAp7CiAg aW50IF9fbXV0ZXhraW5kOwp9IHB0aHJlYWRfbXV0ZXhhdHRyX3Q7CgoKCnR5cGVkZWYgaW50IHB0 aHJlYWRfb25jZV90OwoKCgoKdHlwZWRlZiBzdHJ1Y3QgX3B0aHJlYWRfcndsb2NrX3QKewogIHN0 cnVjdCBfcHRocmVhZF9mYXN0bG9jayBfX3J3X2xvY2s7CiAgaW50IF9fcndfcmVhZGVyczsKICBf cHRocmVhZF9kZXNjciBfX3J3X3dyaXRlcjsKICBfcHRocmVhZF9kZXNjciBfX3J3X3JlYWRfd2Fp dGluZzsKICBfcHRocmVhZF9kZXNjciBfX3J3X3dyaXRlX3dhaXRpbmc7CiAgaW50IF9fcndfa2lu ZDsKICBpbnQgX19yd19wc2hhcmVkOwp9IHB0aHJlYWRfcndsb2NrX3Q7CgoKCnR5cGVkZWYgc3Ry dWN0CnsKICBpbnQgX19sb2Nra2luZDsKICBpbnQgX19wc2hhcmVkOwp9IHB0aHJlYWRfcndsb2Nr YXR0cl90OwoKCgoKdHlwZWRlZiB2b2xhdGlsZSBpbnQgcHRocmVhZF9zcGlubG9ja190OwoKCnR5 cGVkZWYgc3RydWN0IHsKICBzdHJ1Y3QgX3B0aHJlYWRfZmFzdGxvY2sgX19iYV9sb2NrOwogIGlu dCBfX2JhX3JlcXVpcmVkOwogIGludCBfX2JhX3ByZXNlbnQ7CiAgX3B0aHJlYWRfZGVzY3IgX19i YV93YWl0aW5nOwp9IHB0aHJlYWRfYmFycmllcl90OwoKCnR5cGVkZWYgc3RydWN0IHsKICBpbnQg X19wc2hhcmVkOwp9IHB0aHJlYWRfYmFycmllcmF0dHJfdDsKCgoKCgp0eXBlZGVmIHVuc2lnbmVk IGxvbmcgaW50IHB0aHJlYWRfdDsKIyAyNjcgIi4uL3Bvc2l4L3N5cy90eXBlcy5oIiAyCgoKCiMg MiAiLi4vaW5jbHVkZS9zeXMvdHlwZXMuaCIgMgojIDMwICIuLi9sb2NhbGUvbG9jYWxlaW5mby5o IiAyCgojIDEgIi4uL2ludGwvbG9hZGluZm8uaCIgMQojIDQ4ICIuLi9pbnRsL2xvYWRpbmZvLmgi CnN0cnVjdCBsb2FkZWRfbDEwbmZpbGUKewogIGNvbnN0IGNoYXIgKmZpbGVuYW1lOwogIGludCBk ZWNpZGVkOwoKICBjb25zdCB2b2lkICpkYXRhOwoKICBzdHJ1Y3QgbG9hZGVkX2wxMG5maWxlICpu ZXh0OwogIHN0cnVjdCBsb2FkZWRfbDEwbmZpbGUgKnN1Y2Nlc3NvclsxXTsKfTsKCgoKCgoKZXh0 ZXJuIGNvbnN0IGNoYXIgKl9ubF9ub3JtYWxpemVfY29kZXNldCAoY29uc3QgY2hhciAqY29kZXNl dCwgc2l6ZV90IG5hbWVfbGVuKTsKCgpleHRlcm4gc3RydWN0IGxvYWRlZF9sMTBuZmlsZSAqCl9u bF9tYWtlX2wxMG5mbGlzdCAoc3RydWN0IGxvYWRlZF9sMTBuZmlsZSAqKmwxMG5maWxlX2xpc3Qs IGNvbnN0IGNoYXIgKmRpcmxpc3QsIHNpemVfdCBkaXJsaXN0X2xlbiwgaW50IG1hc2ssIGNvbnN0 IGNoYXIgKmxhbmd1YWdlLCBjb25zdCBjaGFyICp0ZXJyaXRvcnksIGNvbnN0IGNoYXIgKmNvZGVz ZXQsIGNvbnN0IGNoYXIgKm5vcm1hbGl6ZWRfY29kZXNldCwgY29uc3QgY2hhciAqbW9kaWZpZXIs IGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBpbnQgZG9fYWxsb2NhdGUpOwojIDc3ICIuLi9pbnRsL2xv YWRpbmZvLmgiCmV4dGVybiBjb25zdCBjaGFyICpfbmxfZXhwYW5kX2FsaWFzIChjb25zdCBjaGFy ICpuYW1lKTsKCgoKZXh0ZXJuIGludCBfbmxfZXhwbG9kZV9uYW1lIChjaGFyICpuYW1lLCBjb25z dCBjaGFyICoqbGFuZ3VhZ2UsIGNvbnN0IGNoYXIgKiptb2RpZmllciwgY29uc3QgY2hhciAqKnRl cnJpdG9yeSwgY29uc3QgY2hhciAqKmNvZGVzZXQsIGNvbnN0IGNoYXIgKipub3JtYWxpemVkX2Nv ZGVzZXQpOwoKCgoKCmV4dGVybiBjaGFyICpfbmxfZmluZF9sYW5ndWFnZSAoY29uc3QgY2hhciAq bmFtZSk7CiMgMzIgIi4uL2xvY2FsZS9sb2NhbGVpbmZvLmgiIDIKIyA0NSAiLi4vbG9jYWxlL2xv Y2FsZWluZm8uaCIKc3RydWN0IGxvY2FsZV9kYXRhCnsKICBjb25zdCBjaGFyICpuYW1lOwogIGNv bnN0IGNoYXIgKmZpbGVkYXRhOwogIG9mZl90IGZpbGVzaXplOwogIGVudW0KICB7CiAgICBsZF9t YWxsb2NlZCwKICAgIGxkX21hcHBlZCwKICAgIGxkX2FyY2hpdmUKICB9IGFsbG9jOwoKCgoKICBz dHJ1Y3QKICB7CiAgICB2b2lkICgqY2xlYW51cCkgKHN0cnVjdCBsb2NhbGVfZGF0YSAqKSA7CiAg ICB1bmlvbgogICAgewogICAgICB2b2lkICpkYXRhOwogICAgICBzdHJ1Y3QgbGNfdGltZV9kYXRh ICp0aW1lOwogICAgICBjb25zdCBzdHJ1Y3QgZ2NvbnZfZmN0cyAqY3R5cGU7CiAgICB9OwogIH0g cHJpdmF0ZTsKCiAgdW5zaWduZWQgaW50IHVzYWdlX2NvdW50OwoKICBpbnQgdXNlX3RyYW5zbGl0 OwoKCiAgdW5zaWduZWQgaW50IG5zdHJpbmdzOwogIHVuaW9uIGxvY2FsZV9kYXRhX3ZhbHVlCiAg ewogICAgY29uc3QgdWludDMyX3QgKndzdHI7CiAgICBjb25zdCBjaGFyICpzdHJpbmc7CiAgICB1 bnNpZ25lZCBpbnQgd29yZDsKICB9CiAgdmFsdWVzIFtdOwp9OwoKCmVudW0gY29sbF9zb3J0X3J1 bGUKewogIGlsbGVnYWxfMF9fLAogIHNvcnRfZm9yd2FyZCwKICBzb3J0X2JhY2t3YXJkLAogIGls bGVnYWxfM19fLAogIHNvcnRfcG9zaXRpb24sCiAgc29ydF9mb3J3YXJkX3Bvc2l0aW9uLAogIHNv cnRfYmFja3dhcmRfcG9zaXRpb24sCiAgc29ydF9tYXNrCn07CgoKZW51bSB2YWx1ZV90eXBlCnsK ICBub25lLAogIHN0cmluZywKICBzdHJpbmdhcnJheSwKICBieXRlLAogIGJ5dGVhcnJheSwKICB3 b3JkLAogIHN0cmluZ2xpc3QsCiAgd29yZGFycmF5LAogIHdzdHJpbmcsCiAgd3N0cmluZ2FycmF5 LAogIHdzdHJpbmdsaXN0Cn07CiMgMTI1ICIuLi9sb2NhbGUvbG9jYWxlaW5mby5oIgpzdHJ1Y3Qg ZXJhX2VudHJ5CnsKICB1aW50MzJfdCBkaXJlY3Rpb247CiAgaW50MzJfdCBvZmZzZXQ7CiAgaW50 MzJfdCBzdGFydF9kYXRlWzNdOwogIGludDMyX3Qgc3RvcF9kYXRlWzNdOwogIGNvbnN0IGNoYXIg KmVyYV9uYW1lOwogIGNvbnN0IGNoYXIgKmVyYV9mb3JtYXQ7CiAgY29uc3Qgd2NoYXJfdCAqZXJh X3duYW1lOwogIGNvbnN0IHdjaGFyX3QgKmVyYV93Zm9ybWF0OwogIGludCBhYnNvbHV0ZV9kaXJl Y3Rpb247CgoKCn07CgoKCnN0cnVjdCBsY190aW1lX2RhdGEKewogIHN0cnVjdCBlcmFfZW50cnkg KmVyYXM7CiAgc2l6ZV90IG51bV9lcmFzOwogIGludCBlcmFfaW5pdGlhbGl6ZWQ7CgogIGNvbnN0 IGNoYXIgKiphbHRfZGlnaXRzOwogIGNvbnN0IHdjaGFyX3QgKip3YWx0X2RpZ2l0czsKICBpbnQg YWx0X2RpZ2l0c19pbml0aWFsaXplZDsKICBpbnQgd2FsdF9kaWdpdHNfaW5pdGlhbGl6ZWQ7Cn07 CgoKCgplbnVtCnsKICBfX1RPV190b3VwcGVyID0gMCwKICBfX1RPV190b2xvd2VyID0gMQp9Owoj IDE3MiAiLi4vbG9jYWxlL2xvY2FsZWluZm8uaCIKZXh0ZXJuIGNvbnN0IGNoYXIgKmNvbnN0IF9u bF9jYXRlZ29yeV9uYW1lc1sxM10gX19hdHRyaWJ1dGVfXyAoKHZpc2liaWxpdHkgKCJoaWRkZW4i KSkpOwpleHRlcm4gY29uc3Qgc2l6ZV90IF9ubF9jYXRlZ29yeV9uYW1lX3NpemVzWzEzXSBfX2F0 dHJpYnV0ZV9fICgodmlzaWJpbGl0eSAoImhpZGRlbiIpKSk7CgoKZXh0ZXJuIGNvbnN0IGNoYXIg X25sX0NfbmFtZVtdIF9fYXR0cmlidXRlX18gKCh2aXNpYmlsaXR5ICgiaGlkZGVuIikpKTsKZXh0 ZXJuIGNvbnN0IGNoYXIgX25sX1BPU0lYX25hbWVbXSBfX2F0dHJpYnV0ZV9fICgodmlzaWJpbGl0 eSAoImhpZGRlbiIpKSk7CgoKZXh0ZXJuIGNvbnN0IGNoYXIgX25sX0NfY29kZXNldFtdIF9fYXR0 cmlidXRlX18gKCh2aXNpYmlsaXR5ICgiaGlkZGVuIikpKTsKCgoKCmV4dGVybiBzdHJ1Y3QgX19s b2NhbGVfc3RydWN0IF9ubF9nbG9iYWxfbG9jYWxlIF9fYXR0cmlidXRlX18gKCh2aXNpYmlsaXR5 ICgiaGlkZGVuIikpKTsKCgoKCiMgMSAiLi4vbGludXh0aHJlYWRzL3N5c2RlcHMvcHRocmVhZC9i aXRzL2xpYmMtdHNkLmgiIDEKIyAyNCAiLi4vbGludXh0aHJlYWRzL3N5c2RlcHMvcHRocmVhZC9i aXRzL2xpYmMtdHNkLmgiCmVudW0gX19saWJjX3RzZF9rZXlfdCB7IF9MSUJDX1RTRF9LRVlfTUFM TE9DID0gMCwKICAgICAgICAgICAgICAgICAgICAgICAgX0xJQkNfVFNEX0tFWV9ETF9FUlJPUiwK ICAgICAgICAgICAgICAgICAgICAgICAgX0xJQkNfVFNEX0tFWV9SUENfVkFSUywKICAgICAgICAg ICAgICAgICAgICAgICAgX0xJQkNfVFNEX0tFWV9MT0NBTEUsCiAgICAgICAgICAgICAgICAgICAg ICAgIF9MSUJDX1RTRF9LRVlfQ1RZUEVfQiwKICAgICAgICAgICAgICAgICAgICAgICAgX0xJQkNf VFNEX0tFWV9DVFlQRV9UT0xPV0VSLAogICAgICAgICAgICAgICAgICAgICAgICBfTElCQ19UU0Rf S0VZX0NUWVBFX1RPVVBQRVIsCiAgICAgICAgICAgICAgICAgICAgICAgIF9MSUJDX1RTRF9LRVlf TiB9OwoKIyAxICIuLi9pbmNsdWRlL3Rscy5oIiAxCgoKIyAxICIuLi9saW51eHRocmVhZHMvc3lz ZGVwcy94ODZfNjQvdGxzLmgiIDEKIyAyNSAiLi4vbGludXh0aHJlYWRzL3N5c2RlcHMveDg2XzY0 L3Rscy5oIgojIDEgIi4uL2xpbnV4dGhyZWFkcy9zeXNkZXBzL3g4Nl82NC9wdC1tYWNoaW5lLmgi IDEKIyAyNCAiLi4vbGludXh0aHJlYWRzL3N5c2RlcHMveDg2XzY0L3B0LW1hY2hpbmUuaCIKIyAx ICIvdXNyL2xpYjY0L2djYy1saWIveDg2XzY0LXN1c2UtbGludXgvMy4zL2luY2x1ZGUvc3RkZGVm LmgiIDEgMyA0CiMgMjUgIi4uL2xpbnV4dGhyZWFkcy9zeXNkZXBzL3g4Nl82NC9wdC1tYWNoaW5l LmgiIDIKIyAxICIuLi9pbmNsdWRlL3N0ZGxpYi5oIiAxCgoKCgoKCiMgMSAiL3Vzci9saWI2NC9n Y2MtbGliL3g4Nl82NC1zdXNlLWxpbnV4LzMuMy9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMgNAojIDgg Ii4uL2luY2x1ZGUvc3RkbGliLmgiIDIKIyAxICIuLi9zdGRsaWIvc3RkbGliLmgiIDEKIyAzMyAi Li4vc3RkbGliL3N0ZGxpYi5oIgojIDEgIi91c3IvbGliNjQvZ2NjLWxpYi94ODZfNjQtc3VzZS1s aW51eC8zLjMvaW5jbHVkZS9zdGRkZWYuaCIgMSAzIDQKIyAzNCAiLi4vc3RkbGliL3N0ZGxpYi5o IiAyCgoKCgoKCgoKIyAxICIuLi9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9iaXRzL3dhaXRmbGFn cy5oIiAxCiMgNDMgIi4uL3N0ZGxpYi9zdGRsaWIuaCIgMgojIDEgIi4uL3N5c2RlcHMvZ2VuZXJp Yy9iaXRzL3dhaXRzdGF0dXMuaCIgMQojIDYzICIuLi9zeXNkZXBzL2dlbmVyaWMvYml0cy93YWl0 c3RhdHVzLmgiCiMgMSAiLi4vaW5jbHVkZS9lbmRpYW4uaCIgMQojIDY0ICIuLi9zeXNkZXBzL2dl bmVyaWMvYml0cy93YWl0c3RhdHVzLmgiIDIKCnVuaW9uIHdhaXQKICB7CiAgICBpbnQgd19zdGF0 dXM7CiAgICBzdHJ1Y3QKICAgICAgewoKICAgICAgICB1bnNpZ25lZCBpbnQgX193X3Rlcm1zaWc6 NzsKICAgICAgICB1bnNpZ25lZCBpbnQgX193X2NvcmVkdW1wOjE7CiAgICAgICAgdW5zaWduZWQg aW50IF9fd19yZXRjb2RlOjg7CiAgICAgICAgdW5zaWduZWQgaW50OjE2OwoKCgoKCgoKICAgICAg fSBfX3dhaXRfdGVybWluYXRlZDsKICAgIHN0cnVjdAogICAgICB7CgogICAgICAgIHVuc2lnbmVk IGludCBfX3dfc3RvcHZhbDo4OwogICAgICAgIHVuc2lnbmVkIGludCBfX3dfc3RvcHNpZzo4Owog ICAgICAgIHVuc2lnbmVkIGludDoxNjsKCgoKCgoKICAgICAgfSBfX3dhaXRfc3RvcHBlZDsKICB9 OwojIDQ0ICIuLi9zdGRsaWIvc3RkbGliLmgiIDIKIyA2OCAiLi4vc3RkbGliL3N0ZGxpYi5oIgp0 eXBlZGVmIHVuaW9uCiAgewogICAgdW5pb24gd2FpdCAqX191cHRyOwogICAgaW50ICpfX2lwdHI7 CiAgfSBfX1dBSVRfU1RBVFVTIF9fYXR0cmlidXRlX18gKChfX3RyYW5zcGFyZW50X3VuaW9uX18p KTsKIyA5MyAiLi4vc3RkbGliL3N0ZGxpYi5oIgoKCnR5cGVkZWYgc3RydWN0CiAgewogICAgaW50 IHF1b3Q7CiAgICBpbnQgcmVtOwogIH0gZGl2X3Q7CgoKCnR5cGVkZWYgc3RydWN0CiAgewogICAg bG9uZyBpbnQgcXVvdDsKICAgIGxvbmcgaW50IHJlbTsKICB9IGxkaXZfdDsKCgoKCgoKCl9fZXh0 ZW5zaW9uX18gdHlwZWRlZiBzdHJ1Y3QKICB7CiAgICBsb25nIGxvbmcgaW50IHF1b3Q7CiAgICBs b25nIGxvbmcgaW50IHJlbTsKICB9IGxsZGl2X3Q7CgoKIyAxMzcgIi4uL3N0ZGxpYi9zdGRsaWIu aCIKZXh0ZXJuIHNpemVfdCBfX2N0eXBlX2dldF9tYl9jdXJfbWF4ICh2b2lkKSA7CgoKCgpleHRl cm4gZG91YmxlIGF0b2YgKF9fY29uc3QgY2hhciAqX19ucHRyKSBfX2F0dHJpYnV0ZV9fICgoX19w dXJlX18pKTsKCmV4dGVybiBpbnQgYXRvaSAoX19jb25zdCBjaGFyICpfX25wdHIpIF9fYXR0cmli dXRlX18gKChfX3B1cmVfXykpOwoKZXh0ZXJuIGxvbmcgaW50IGF0b2wgKF9fY29uc3QgY2hhciAq X19ucHRyKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgoKCgpfX2V4dGVuc2lvbl9fIGV4 dGVybiBsb25nIGxvbmcgaW50IGF0b2xsIChfX2NvbnN0IGNoYXIgKl9fbnB0cikKICAgICBfX2F0 dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgoKCgpleHRlcm4gZG91YmxlIHN0cnRvZCAoX19jb25z dCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipf X3Jlc3RyaWN0IF9fZW5kcHRyKSA7CgoKCgoKZXh0ZXJuIGZsb2F0IHN0cnRvZiAoX19jb25zdCBj aGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVz dHJpY3QgX19lbmRwdHIpIDsKCmV4dGVybiBsb25nIGRvdWJsZSBzdHJ0b2xkIChfX2NvbnN0IGNo YXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAq Kl9fcmVzdHJpY3QgX19lbmRwdHIpIDsKCgoKCgpleHRlcm4gbG9uZyBpbnQgc3RydG9sIChfX2Nv bnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICBjaGFy ICoqX19yZXN0cmljdCBfX2VuZHB0ciwgaW50IF9fYmFzZSkgOwoKZXh0ZXJuIHVuc2lnbmVkIGxv bmcgaW50IHN0cnRvdWwgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwgaW50 IF9fYmFzZSkKICAgICA7CgoKCgpfX2V4dGVuc2lvbl9fCmV4dGVybiBsb25nIGxvbmcgaW50IHN0 cnRvcSAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwgaW50IF9fYmFzZSkgOwoKX19l eHRlbnNpb25fXwpleHRlcm4gdW5zaWduZWQgbG9uZyBsb25nIGludCBzdHJ0b3VxIChfX2NvbnN0 IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwgaW50IF9fYmFzZSkKICAgICA7CgoK CgoKX19leHRlbnNpb25fXwpleHRlcm4gbG9uZyBsb25nIGludCBzdHJ0b2xsIChfX2NvbnN0IGNo YXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFy ICoqX19yZXN0cmljdCBfX2VuZHB0ciwgaW50IF9fYmFzZSkgOwoKX19leHRlbnNpb25fXwpleHRl cm4gdW5zaWduZWQgbG9uZyBsb25nIGludCBzdHJ0b3VsbCAoX19jb25zdCBjaGFyICpfX3Jlc3Ry aWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIg KipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQgX19iYXNlKQogICAgIDsKCiMgMjI1ICIuLi9zdGRs aWIvc3RkbGliLmgiCiMgMSAiLi4vaW5jbHVkZS94bG9jYWxlLmgiIDEKIyAyMjYgIi4uL3N0ZGxp Yi9zdGRsaWIuaCIgMgoKCgpleHRlcm4gbG9uZyBpbnQgc3RydG9sX2wgKF9fY29uc3QgY2hhciAq X19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVz dHJpY3QgX19lbmRwdHIsIGludCBfX2Jhc2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgX19s b2NhbGVfdCBfX2xvYykgOwoKZXh0ZXJuIHVuc2lnbmVkIGxvbmcgaW50IHN0cnRvdWxfbCAoX19j b25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGludCBfX2Jhc2UsIF9fbG9jYWxlX3QgX19sb2MpIDsKCl9fZXh0ZW5z aW9uX18KZXh0ZXJuIGxvbmcgbG9uZyBpbnQgc3RydG9sbF9sIChfX2NvbnN0IGNoYXIgKl9fcmVz dHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jl c3RyaWN0IF9fZW5kcHRyLCBpbnQgX19iYXNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIF9fbG9jYWxlX3QgX19sb2MpIDsKCl9fZXh0ZW5zaW9uX18KZXh0ZXJuIHVuc2lnbmVkIGxv bmcgbG9uZyBpbnQgc3RydG91bGxfbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJp Y3QgX19lbmRwdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlu dCBfX2Jhc2UsIF9fbG9jYWxlX3QgX19sb2MpCiAgICAgOwoKZXh0ZXJuIGRvdWJsZSBzdHJ0b2Rf bCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAg ICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIF9fbG9jYWxlX3QgX19sb2MpCiAgICAgOwoK ZXh0ZXJuIGZsb2F0IHN0cnRvZl9sIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAog ICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBfX2xvY2Fs ZV90IF9fbG9jKSA7CgpleHRlcm4gbG9uZyBkb3VibGUgc3RydG9sZF9sIChfX2NvbnN0IGNoYXIg Kl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoq X19yZXN0cmljdCBfX2VuZHB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19sb2Nh bGVfdCBfX2xvYykgOwoKCgoKCgpleHRlcm4gZG91YmxlIF9fc3RydG9kX2ludGVybmFsIChfX2Nv bnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwgaW50IF9fZ3JvdXApCiAgICAgOwpleHRl cm4gZmxvYXQgX19zdHJ0b2ZfaW50ZXJuYWwgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25w dHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19l bmRwdHIsIGludCBfX2dyb3VwKQogICAgIDsKZXh0ZXJuIGxvbmcgZG91YmxlIF9fc3RydG9sZF9p bnRlcm5hbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBfX2dyb3VwKSA7CgpleHRlcm4g bG9uZyBpbnQgX19zdHJ0b2xfaW50ZXJuYWwgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25w dHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3Qg X19lbmRwdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9fYmFzZSwg aW50IF9fZ3JvdXApIDsKCgoKZXh0ZXJuIHVuc2lnbmVkIGxvbmcgaW50IF9fc3RydG91bF9pbnRl cm5hbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBfX2Jhc2UsIGlu dCBfX2dyb3VwKSA7CgoKCgpfX2V4dGVuc2lvbl9fCmV4dGVybiBsb25nIGxvbmcgaW50IF9fc3Ry dG9sbF9pbnRlcm5hbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0 ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19iYXNlLCBp bnQgX19ncm91cCkgOwoKCgpfX2V4dGVuc2lvbl9fCmV4dGVybiB1bnNpZ25lZCBsb25nIGxvbmcg aW50IF9fc3RydG91bGxfaW50ZXJuYWwgKF9fY29uc3QgY2hhciAqCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fcmVzdHJpY3QgX19ucHRyLAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19y ZXN0cmljdCBfX2VuZHB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgaW50IF9fYmFzZSwgaW50IF9fZ3JvdXApCiAgICAgOwoKCgoKCgoKCmV4dGVy biBfX2lubGluZSBkb3VibGUKc3RydG9kIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRy LCBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0cikKewogIHJldHVybiBfX3N0cnRvZF9pbnRlcm5h bCAoX19ucHRyLCBfX2VuZHB0ciwgMCk7Cn0KZXh0ZXJuIF9faW5saW5lIGxvbmcgaW50CnN0cnRv bCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwgY2hhciAqKl9fcmVzdHJpY3QgX19l bmRwdHIsCiAgICAgICAgaW50IF9fYmFzZSkKewogIHJldHVybiBfX3N0cnRvbF9pbnRlcm5hbCAo X19ucHRyLCBfX2VuZHB0ciwgX19iYXNlLCAwKTsKfQpleHRlcm4gX19pbmxpbmUgdW5zaWduZWQg bG9uZyBpbnQKc3RydG91bCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwgY2hhciAq Kl9fcmVzdHJpY3QgX19lbmRwdHIsCiAgICAgICAgIGludCBfX2Jhc2UpCnsKICByZXR1cm4gX19z dHJ0b3VsX2ludGVybmFsIChfX25wdHIsIF9fZW5kcHRyLCBfX2Jhc2UsIDApOwp9CgoKCgpleHRl cm4gX19pbmxpbmUgZmxvYXQKc3RydG9mIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRy LCBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0cikKewogIHJldHVybiBfX3N0cnRvZl9pbnRlcm5h bCAoX19ucHRyLCBfX2VuZHB0ciwgMCk7Cn0KZXh0ZXJuIF9faW5saW5lIGxvbmcgZG91YmxlCnN0 cnRvbGQgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsIGNoYXIgKipfX3Jlc3RyaWN0 IF9fZW5kcHRyKQp7CiAgcmV0dXJuIF9fc3RydG9sZF9pbnRlcm5hbCAoX19ucHRyLCBfX2VuZHB0 ciwgMCk7Cn0KCgoKCl9fZXh0ZW5zaW9uX18gZXh0ZXJuIF9faW5saW5lIGxvbmcgbG9uZyBpbnQK c3RydG9xIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLCBjaGFyICoqX19yZXN0cmlj dCBfX2VuZHB0ciwKICAgICAgICBpbnQgX19iYXNlKQp7CiAgcmV0dXJuIF9fc3RydG9sbF9pbnRl cm5hbCAoX19ucHRyLCBfX2VuZHB0ciwgX19iYXNlLCAwKTsKfQpfX2V4dGVuc2lvbl9fIGV4dGVy biBfX2lubGluZSB1bnNpZ25lZCBsb25nIGxvbmcgaW50CnN0cnRvdXEgKF9fY29uc3QgY2hhciAq X19yZXN0cmljdCBfX25wdHIsIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLAogICAgICAgICBp bnQgX19iYXNlKQp7CiAgcmV0dXJuIF9fc3RydG91bGxfaW50ZXJuYWwgKF9fbnB0ciwgX19lbmRw dHIsIF9fYmFzZSwgMCk7Cn0KCgoKCl9fZXh0ZW5zaW9uX18gZXh0ZXJuIF9faW5saW5lIGxvbmcg bG9uZyBpbnQKc3RydG9sbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwgY2hhciAq Kl9fcmVzdHJpY3QgX19lbmRwdHIsCiAgICAgICAgIGludCBfX2Jhc2UpCnsKICByZXR1cm4gX19z dHJ0b2xsX2ludGVybmFsIChfX25wdHIsIF9fZW5kcHRyLCBfX2Jhc2UsIDApOwp9Cl9fZXh0ZW5z aW9uX18gZXh0ZXJuIF9faW5saW5lIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQKc3RydG91bGwgKF9f Y29uc3QgY2hhciAqIF9fcmVzdHJpY3QgX19ucHRyLCBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0 ciwKICAgICAgICAgIGludCBfX2Jhc2UpCnsKICByZXR1cm4gX19zdHJ0b3VsbF9pbnRlcm5hbCAo X19ucHRyLCBfX2VuZHB0ciwgX19iYXNlLCAwKTsKfQoKCgoKZXh0ZXJuIF9faW5saW5lIGRvdWJs ZQphdG9mIChfX2NvbnN0IGNoYXIgKl9fbnB0cikKewogIHJldHVybiBzdHJ0b2QgKF9fbnB0ciwg KGNoYXIgKiopICgodm9pZCAqKTApKTsKfQpleHRlcm4gX19pbmxpbmUgaW50CmF0b2kgKF9fY29u c3QgY2hhciAqX19ucHRyKQp7CiAgcmV0dXJuIChpbnQpIHN0cnRvbCAoX19ucHRyLCAoY2hhciAq KikgKCh2b2lkICopMCksIDEwKTsKfQpleHRlcm4gX19pbmxpbmUgbG9uZyBpbnQKYXRvbCAoX19j b25zdCBjaGFyICpfX25wdHIpCnsKICByZXR1cm4gc3RydG9sIChfX25wdHIsIChjaGFyICoqKSAo KHZvaWQgKikwKSwgMTApOwp9CgoKCgpfX2V4dGVuc2lvbl9fIGV4dGVybiBfX2lubGluZSBsb25n IGxvbmcgaW50CmF0b2xsIChfX2NvbnN0IGNoYXIgKl9fbnB0cikKewogIHJldHVybiBzdHJ0b2xs IChfX25wdHIsIChjaGFyICoqKSAoKHZvaWQgKikwKSwgMTApOwp9CgojIDQwOCAiLi4vc3RkbGli L3N0ZGxpYi5oIgpleHRlcm4gY2hhciAqbDY0YSAobG9uZyBpbnQgX19uKSA7CgoKZXh0ZXJuIGxv bmcgaW50IGE2NGwgKF9fY29uc3QgY2hhciAqX19zKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18p KTsKCgojIDEgIi4uL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDEKIyA0MTUgIi4uL3N0ZGxpYi9zdGRs aWIuaCIgMgoKCgoKCgpleHRlcm4gbG9uZyBpbnQgcmFuZG9tICh2b2lkKSA7CgoKZXh0ZXJuIHZv aWQgc3JhbmRvbSAodW5zaWduZWQgaW50IF9fc2VlZCkgOwoKCgoKCmV4dGVybiBjaGFyICppbml0 c3RhdGUgKHVuc2lnbmVkIGludCBfX3NlZWQsIGNoYXIgKl9fc3RhdGVidWYsCiAgICAgICAgICAg ICAgICAgICAgICAgIHNpemVfdCBfX3N0YXRlbGVuKSA7CgoKCmV4dGVybiBjaGFyICpzZXRzdGF0 ZSAoY2hhciAqX19zdGF0ZWJ1ZikgOwoKCgoKCgoKc3RydWN0IHJhbmRvbV9kYXRhCiAgewogICAg aW50MzJfdCAqZnB0cjsKICAgIGludDMyX3QgKnJwdHI7CiAgICBpbnQzMl90ICpzdGF0ZTsKICAg IGludCByYW5kX3R5cGU7CiAgICBpbnQgcmFuZF9kZWc7CiAgICBpbnQgcmFuZF9zZXA7CiAgICBp bnQzMl90ICplbmRfcHRyOwogIH07CgpleHRlcm4gaW50IHJhbmRvbV9yIChzdHJ1Y3QgcmFuZG9t X2RhdGEgKl9fcmVzdHJpY3QgX19idWYsCiAgICAgICAgICAgICAgICAgICAgIGludDMyX3QgKl9f cmVzdHJpY3QgX19yZXN1bHQpIDsKCmV4dGVybiBpbnQgc3JhbmRvbV9yICh1bnNpZ25lZCBpbnQg X19zZWVkLCBzdHJ1Y3QgcmFuZG9tX2RhdGEgKl9fYnVmKSA7CgpleHRlcm4gaW50IGluaXRzdGF0 ZV9yICh1bnNpZ25lZCBpbnQgX19zZWVkLCBjaGFyICpfX3Jlc3RyaWN0IF9fc3RhdGVidWYsCiAg ICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX3N0YXRlbGVuLAogICAgICAgICAgICAgICAg ICAgICAgICBzdHJ1Y3QgcmFuZG9tX2RhdGEgKl9fcmVzdHJpY3QgX19idWYpIDsKCmV4dGVybiBp bnQgc2V0c3RhdGVfciAoY2hhciAqX19yZXN0cmljdCBfX3N0YXRlYnVmLAogICAgICAgICAgICAg ICAgICAgICAgIHN0cnVjdCByYW5kb21fZGF0YSAqX19yZXN0cmljdCBfX2J1ZikgOwoKCgoKCgpl eHRlcm4gaW50IHJhbmQgKHZvaWQpIDsKCmV4dGVybiB2b2lkIHNyYW5kICh1bnNpZ25lZCBpbnQg X19zZWVkKSA7CgoKCgpleHRlcm4gaW50IHJhbmRfciAodW5zaWduZWQgaW50ICpfX3NlZWQpIDsK CgoKCgoKCmV4dGVybiBkb3VibGUgZHJhbmQ0OCAodm9pZCkgOwpleHRlcm4gZG91YmxlIGVyYW5k NDggKHVuc2lnbmVkIHNob3J0IGludCBfX3hzdWJpWzNdKSA7CgoKZXh0ZXJuIGxvbmcgaW50IGxy YW5kNDggKHZvaWQpIDsKZXh0ZXJuIGxvbmcgaW50IG5yYW5kNDggKHVuc2lnbmVkIHNob3J0IGlu dCBfX3hzdWJpWzNdKSA7CgoKZXh0ZXJuIGxvbmcgaW50IG1yYW5kNDggKHZvaWQpIDsKZXh0ZXJu IGxvbmcgaW50IGpyYW5kNDggKHVuc2lnbmVkIHNob3J0IGludCBfX3hzdWJpWzNdKSA7CgoKZXh0 ZXJuIHZvaWQgc3JhbmQ0OCAobG9uZyBpbnQgX19zZWVkdmFsKSA7CmV4dGVybiB1bnNpZ25lZCBz aG9ydCBpbnQgKnNlZWQ0OCAodW5zaWduZWQgc2hvcnQgaW50IF9fc2VlZDE2dlszXSkgOwpleHRl cm4gdm9pZCBsY29uZzQ4ICh1bnNpZ25lZCBzaG9ydCBpbnQgX19wYXJhbVs3XSkgOwoKCgoKCnN0 cnVjdCBkcmFuZDQ4X2RhdGEKICB7CiAgICB1bnNpZ25lZCBzaG9ydCBpbnQgX194WzNdOwogICAg dW5zaWduZWQgc2hvcnQgaW50IF9fb2xkX3hbM107CiAgICB1bnNpZ25lZCBzaG9ydCBpbnQgX19j OwogICAgdW5zaWduZWQgc2hvcnQgaW50IF9faW5pdDsKICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBp bnQgX19hOwogIH07CgoKZXh0ZXJuIGludCBkcmFuZDQ4X3IgKHN0cnVjdCBkcmFuZDQ4X2RhdGEg Kl9fcmVzdHJpY3QgX19idWZmZXIsCiAgICAgICAgICAgICAgICAgICAgICBkb3VibGUgKl9fcmVz dHJpY3QgX19yZXN1bHQpIDsKZXh0ZXJuIGludCBlcmFuZDQ4X3IgKHVuc2lnbmVkIHNob3J0IGlu dCBfX3hzdWJpWzNdLAogICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGRyYW5kNDhfZGF0YSAq X19yZXN0cmljdCBfX2J1ZmZlciwKICAgICAgICAgICAgICAgICAgICAgIGRvdWJsZSAqX19yZXN0 cmljdCBfX3Jlc3VsdCkgOwoKCmV4dGVybiBpbnQgbHJhbmQ0OF9yIChzdHJ1Y3QgZHJhbmQ0OF9k YXRhICpfX3Jlc3RyaWN0IF9fYnVmZmVyLAogICAgICAgICAgICAgICAgICAgICAgbG9uZyBpbnQg Kl9fcmVzdHJpY3QgX19yZXN1bHQpIDsKZXh0ZXJuIGludCBucmFuZDQ4X3IgKHVuc2lnbmVkIHNo b3J0IGludCBfX3hzdWJpWzNdLAogICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGRyYW5kNDhf ZGF0YSAqX19yZXN0cmljdCBfX2J1ZmZlciwKICAgICAgICAgICAgICAgICAgICAgIGxvbmcgaW50 ICpfX3Jlc3RyaWN0IF9fcmVzdWx0KSA7CgoKZXh0ZXJuIGludCBtcmFuZDQ4X3IgKHN0cnVjdCBk cmFuZDQ4X2RhdGEgKl9fcmVzdHJpY3QgX19idWZmZXIsCiAgICAgICAgICAgICAgICAgICAgICBs b25nIGludCAqX19yZXN0cmljdCBfX3Jlc3VsdCkgOwpleHRlcm4gaW50IGpyYW5kNDhfciAodW5z aWduZWQgc2hvcnQgaW50IF9feHN1YmlbM10sCiAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qg ZHJhbmQ0OF9kYXRhICpfX3Jlc3RyaWN0IF9fYnVmZmVyLAogICAgICAgICAgICAgICAgICAgICAg bG9uZyBpbnQgKl9fcmVzdHJpY3QgX19yZXN1bHQpIDsKCgpleHRlcm4gaW50IHNyYW5kNDhfciAo bG9uZyBpbnQgX19zZWVkdmFsLCBzdHJ1Y3QgZHJhbmQ0OF9kYXRhICpfX2J1ZmZlcikKICAgICA7 CgpleHRlcm4gaW50IHNlZWQ0OF9yICh1bnNpZ25lZCBzaG9ydCBpbnQgX19zZWVkMTZ2WzNdLAog ICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgZHJhbmQ0OF9kYXRhICpfX2J1ZmZlcikgOwoKZXh0 ZXJuIGludCBsY29uZzQ4X3IgKHVuc2lnbmVkIHNob3J0IGludCBfX3BhcmFtWzddLAogICAgICAg ICAgICAgICAgICAgICAgc3RydWN0IGRyYW5kNDhfZGF0YSAqX19idWZmZXIpIDsKCgoKCgoKCgoK ZXh0ZXJuIHZvaWQgKm1hbGxvYyAoc2l6ZV90IF9fc2l6ZSkgX19hdHRyaWJ1dGVfXyAoKF9fbWFs bG9jX18pKTsKCmV4dGVybiB2b2lkICpjYWxsb2MgKHNpemVfdCBfX25tZW1iLCBzaXplX3QgX19z aXplKQogICAgIF9fYXR0cmlidXRlX18gKChfX21hbGxvY19fKSk7CgoKCgoKCgpleHRlcm4gdm9p ZCAqcmVhbGxvYyAodm9pZCAqX19wdHIsIHNpemVfdCBfX3NpemUpIF9fYXR0cmlidXRlX18gKChf X21hbGxvY19fKSk7CgpleHRlcm4gdm9pZCBmcmVlICh2b2lkICpfX3B0cikgOwoKCgoKZXh0ZXJu IHZvaWQgY2ZyZWUgKHZvaWQgKl9fcHRyKSA7CgoKCiMgMSAiLi4vaW5jbHVkZS9hbGxvY2EuaCIg MQoKCiMgMSAiLi4vc3RkbGliL2FsbG9jYS5oIiAxCiMgMjUgIi4uL3N0ZGxpYi9hbGxvY2EuaCIK IyAxICIvdXNyL2xpYjY0L2djYy1saWIveDg2XzY0LXN1c2UtbGludXgvMy4zL2luY2x1ZGUvc3Rk ZGVmLmgiIDEgMyA0CiMgMjYgIi4uL3N0ZGxpYi9hbGxvY2EuaCIgMgoKCgoKCgoKZXh0ZXJuIHZv aWQgKmFsbG9jYSAoc2l6ZV90IF9fc2l6ZSkgOwoKCgoKCgojIDQgIi4uL2luY2x1ZGUvYWxsb2Nh LmgiIDIKCgoKCmV4dGVybiB2b2lkICpfX2FsbG9jYSAoc2l6ZV90IF9fc2l6ZSk7CgoKCgoKZXh0 ZXJuIGludCBfX2xpYmNfdXNlX2FsbG9jYSAoc2l6ZV90IHNpemUpIF9fYXR0cmlidXRlX18gKChj b25zdCkpOwpleHRlcm4gaW50IF9fbGliY19hbGxvY2FfY3V0b2ZmIChzaXplX3Qgc2l6ZSkgX19h dHRyaWJ1dGVfXyAoKGNvbnN0KSk7CgoKCiMgMSAiLi4vbGludXh0aHJlYWRzL3N5c2RlcHMvdW5p eC9zeXN2L2xpbnV4L2FsbG9jYWxpbS5oIiAxCiMgMjAgIi4uL2xpbnV4dGhyZWFkcy9zeXNkZXBz L3VuaXgvc3lzdi9saW51eC9hbGxvY2FsaW0uaCIKIyAxICIuLi9pbmNsdWRlL2xpbWl0cy5oIiAx CiMgMTQ0ICIuLi9pbmNsdWRlL2xpbWl0cy5oIgojIDEgIi4uL2luY2x1ZGUvYml0cy9wb3NpeDFf bGltLmgiIDEKIyAxNDUgIi4uL2luY2x1ZGUvbGltaXRzLmgiIDIKCgoKIyAxICIuLi9pbmNsdWRl L2JpdHMvcG9zaXgyX2xpbS5oIiAxCiMgMTQ5ICIuLi9pbmNsdWRlL2xpbWl0cy5oIiAyCiMgMjEg Ii4uL2xpbnV4dGhyZWFkcy9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9hbGxvY2FsaW0uaCIgMgoK ZXh0ZXJuIGlubGluZSBpbnQgX19saWJjX3VzZV9hbGxvY2EgKHNpemVfdCBzaXplKQp7CiAgcmV0 dXJuIChfX2J1aWx0aW5fZXhwZWN0IChzaXplIDw9IDE2Mzg0IC8gNCwgMSkKICAgICAgICAgIHx8 IF9fbGliY19hbGxvY2FfY3V0b2ZmIChzaXplKSk7Cn0KIyAyMCAiLi4vaW5jbHVkZS9hbGxvY2Eu aCIgMgojIDU3NyAiLi4vc3RkbGliL3N0ZGxpYi5oIiAyCgoKCgpleHRlcm4gdm9pZCAqdmFsbG9j IChzaXplX3QgX19zaXplKSBfX2F0dHJpYnV0ZV9fICgoX19tYWxsb2NfXykpOwoKCgoKZXh0ZXJu IGludCBwb3NpeF9tZW1hbGlnbiAodm9pZCAqKl9fbWVtcHRyLCBzaXplX3QgX19hbGlnbm1lbnQs IHNpemVfdCBfX3NpemUpCiAgICAgX19hdHRyaWJ1dGVfXyAoKF9fbWFsbG9jX18pKTsKCgoKCmV4 dGVybiB2b2lkIGFib3J0ICh2b2lkKSBfX2F0dHJpYnV0ZV9fICgoX19ub3JldHVybl9fKSk7CgoK CmV4dGVybiBpbnQgYXRleGl0ICh2b2lkICgqX19mdW5jKSAodm9pZCkpIDsKCgoKCgpleHRlcm4g aW50IG9uX2V4aXQgKHZvaWQgKCpfX2Z1bmMpIChpbnQgX19zdGF0dXMsIHZvaWQgKl9fYXJnKSwg dm9pZCAqX19hcmcpCiAgICAgOwoKCgoKCgpleHRlcm4gdm9pZCBleGl0IChpbnQgX19zdGF0dXMp IF9fYXR0cmlidXRlX18gKChfX25vcmV0dXJuX18pKTsKCgoKCgoKZXh0ZXJuIHZvaWQgX0V4aXQg KGludCBfX3N0YXR1cykgX19hdHRyaWJ1dGVfXyAoKF9fbm9yZXR1cm5fXykpOwoKCgoKCgpleHRl cm4gY2hhciAqZ2V0ZW52IChfX2NvbnN0IGNoYXIgKl9fbmFtZSkgOwoKCgoKZXh0ZXJuIGNoYXIg Kl9fc2VjdXJlX2dldGVudiAoX19jb25zdCBjaGFyICpfX25hbWUpIDsKCgoKCgpleHRlcm4gaW50 IHB1dGVudiAoY2hhciAqX19zdHJpbmcpIDsKCgoKCgpleHRlcm4gaW50IHNldGVudiAoX19jb25z dCBjaGFyICpfX25hbWUsIF9fY29uc3QgY2hhciAqX192YWx1ZSwgaW50IF9fcmVwbGFjZSkKICAg ICA7CgoKZXh0ZXJuIGludCB1bnNldGVudiAoX19jb25zdCBjaGFyICpfX25hbWUpIDsKCgoKCgoK ZXh0ZXJuIGludCBjbGVhcmVudiAodm9pZCkgOwojIDY2MSAiLi4vc3RkbGliL3N0ZGxpYi5oIgpl eHRlcm4gY2hhciAqbWt0ZW1wIChjaGFyICpfX3RlbXBsYXRlKSA7CgoKCgoKCgpleHRlcm4gaW50 IG1rc3RlbXAgKGNoYXIgKl9fdGVtcGxhdGUpIDsKIyA2NzggIi4uL3N0ZGxpYi9zdGRsaWIuaCIK ZXh0ZXJuIGludCBta3N0ZW1wNjQgKGNoYXIgKl9fdGVtcGxhdGUpIDsKIyA2ODggIi4uL3N0ZGxp Yi9zdGRsaWIuaCIKZXh0ZXJuIGNoYXIgKm1rZHRlbXAgKGNoYXIgKl9fdGVtcGxhdGUpIDsKCgoK CgpleHRlcm4gaW50IHN5c3RlbSAoX19jb25zdCBjaGFyICpfX2NvbW1hbmQpIDsKCgoKCgoKCmV4 dGVybiBjaGFyICpjYW5vbmljYWxpemVfZmlsZV9uYW1lIChfX2NvbnN0IGNoYXIgKl9fbmFtZSkg OwojIDcxMiAiLi4vc3RkbGliL3N0ZGxpYi5oIgpleHRlcm4gY2hhciAqcmVhbHBhdGggKF9fY29u c3QgY2hhciAqX19yZXN0cmljdCBfX25hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgY2hhciAq X19yZXN0cmljdCBfX3Jlc29sdmVkKSA7CgoKCgoKCnR5cGVkZWYgaW50ICgqX19jb21wYXJfZm5f dCkgKF9fY29uc3Qgdm9pZCAqLCBfX2NvbnN0IHZvaWQgKik7CgoKdHlwZWRlZiBfX2NvbXBhcl9m bl90IGNvbXBhcmlzb25fZm5fdDsKCgoKCgoKZXh0ZXJuIHZvaWQgKmJzZWFyY2ggKF9fY29uc3Qg dm9pZCAqX19rZXksIF9fY29uc3Qgdm9pZCAqX19iYXNlLAogICAgICAgICAgICAgICAgICAgICAg c2l6ZV90IF9fbm1lbWIsIHNpemVfdCBfX3NpemUsIF9fY29tcGFyX2ZuX3QgX19jb21wYXIpOwoK CgpleHRlcm4gdm9pZCBxc29ydCAodm9pZCAqX19iYXNlLCBzaXplX3QgX19ubWVtYiwgc2l6ZV90 IF9fc2l6ZSwKICAgICAgICAgICAgICAgICAgIF9fY29tcGFyX2ZuX3QgX19jb21wYXIpOwoKCgpl eHRlcm4gaW50IGFicyAoaW50IF9feCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwpleHRl cm4gbG9uZyBpbnQgbGFicyAobG9uZyBpbnQgX194KSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9f KSk7CgoKCl9fZXh0ZW5zaW9uX18gZXh0ZXJuIGxvbmcgbG9uZyBpbnQgbGxhYnMgKGxvbmcgbG9u ZyBpbnQgX194KQogICAgIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgoKCgoKCmV4dGVy biBkaXZfdCBkaXYgKGludCBfX251bWVyLCBpbnQgX19kZW5vbSkKICAgICBfX2F0dHJpYnV0ZV9f ICgoX19jb25zdF9fKSk7CmV4dGVybiBsZGl2X3QgbGRpdiAobG9uZyBpbnQgX19udW1lciwgbG9u ZyBpbnQgX19kZW5vbSkKICAgICBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKCgpfX2V4 dGVuc2lvbl9fIGV4dGVybiBsbGRpdl90IGxsZGl2IChsb25nIGxvbmcgaW50IF9fbnVtZXIsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgbG9uZyBpbnQgX19kZW5vbSkK ICAgICBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgojIDc3NiAiLi4vc3RkbGliL3N0ZGxp Yi5oIgpleHRlcm4gY2hhciAqZWN2dCAoZG91YmxlIF9fdmFsdWUsIGludCBfX25kaWdpdCwgaW50 ICpfX3Jlc3RyaWN0IF9fZGVjcHQsCiAgICAgICAgICAgICAgICAgICBpbnQgKl9fcmVzdHJpY3Qg X19zaWduKSA7CgoKCgpleHRlcm4gY2hhciAqZmN2dCAoZG91YmxlIF9fdmFsdWUsIGludCBfX25k aWdpdCwgaW50ICpfX3Jlc3RyaWN0IF9fZGVjcHQsCiAgICAgICAgICAgICAgICAgICBpbnQgKl9f cmVzdHJpY3QgX19zaWduKSA7CgoKCgpleHRlcm4gY2hhciAqZ2N2dCAoZG91YmxlIF9fdmFsdWUs IGludCBfX25kaWdpdCwgY2hhciAqX19idWYpIDsKCgoKCmV4dGVybiBjaGFyICpxZWN2dCAobG9u ZyBkb3VibGUgX192YWx1ZSwgaW50IF9fbmRpZ2l0LAogICAgICAgICAgICAgICAgICAgIGludCAq X19yZXN0cmljdCBfX2RlY3B0LCBpbnQgKl9fcmVzdHJpY3QgX19zaWduKSA7CmV4dGVybiBjaGFy ICpxZmN2dCAobG9uZyBkb3VibGUgX192YWx1ZSwgaW50IF9fbmRpZ2l0LAogICAgICAgICAgICAg ICAgICAgIGludCAqX19yZXN0cmljdCBfX2RlY3B0LCBpbnQgKl9fcmVzdHJpY3QgX19zaWduKSA7 CmV4dGVybiBjaGFyICpxZ2N2dCAobG9uZyBkb3VibGUgX192YWx1ZSwgaW50IF9fbmRpZ2l0LCBj aGFyICpfX2J1ZikgOwoKCgoKZXh0ZXJuIGludCBlY3Z0X3IgKGRvdWJsZSBfX3ZhbHVlLCBpbnQg X19uZGlnaXQsIGludCAqX19yZXN0cmljdCBfX2RlY3B0LAogICAgICAgICAgICAgICAgICAgaW50 ICpfX3Jlc3RyaWN0IF9fc2lnbiwgY2hhciAqX19yZXN0cmljdCBfX2J1ZiwKICAgICAgICAgICAg ICAgICAgIHNpemVfdCBfX2xlbikgOwpleHRlcm4gaW50IGZjdnRfciAoZG91YmxlIF9fdmFsdWUs IGludCBfX25kaWdpdCwgaW50ICpfX3Jlc3RyaWN0IF9fZGVjcHQsCiAgICAgICAgICAgICAgICAg ICBpbnQgKl9fcmVzdHJpY3QgX19zaWduLCBjaGFyICpfX3Jlc3RyaWN0IF9fYnVmLAogICAgICAg ICAgICAgICAgICAgc2l6ZV90IF9fbGVuKSA7CgpleHRlcm4gaW50IHFlY3Z0X3IgKGxvbmcgZG91 YmxlIF9fdmFsdWUsIGludCBfX25kaWdpdCwKICAgICAgICAgICAgICAgICAgICBpbnQgKl9fcmVz dHJpY3QgX19kZWNwdCwgaW50ICpfX3Jlc3RyaWN0IF9fc2lnbiwKICAgICAgICAgICAgICAgICAg ICBjaGFyICpfX3Jlc3RyaWN0IF9fYnVmLCBzaXplX3QgX19sZW4pIDsKZXh0ZXJuIGludCBxZmN2 dF9yIChsb25nIGRvdWJsZSBfX3ZhbHVlLCBpbnQgX19uZGlnaXQsCiAgICAgICAgICAgICAgICAg ICAgaW50ICpfX3Jlc3RyaWN0IF9fZGVjcHQsIGludCAqX19yZXN0cmljdCBfX3NpZ24sCiAgICAg ICAgICAgICAgICAgICAgY2hhciAqX19yZXN0cmljdCBfX2J1Ziwgc2l6ZV90IF9fbGVuKSA7CgoK CgoKCgpleHRlcm4gaW50IG1ibGVuIChfX2NvbnN0IGNoYXIgKl9fcywgc2l6ZV90IF9fbikgOwoK CmV4dGVybiBpbnQgbWJ0b3djICh3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fcHdjLAogICAgICAgICAg ICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fcywgc2l6ZV90IF9fbikgOwoKCmV4 dGVybiBpbnQgd2N0b21iIChjaGFyICpfX3MsIHdjaGFyX3QgX193Y2hhcikgOwoKCgpleHRlcm4g c2l6ZV90IG1ic3Rvd2NzICh3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fcHdjcywKICAgICAgICAgICAg ICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fcywgc2l6ZV90IF9fbikgOwoK ZXh0ZXJuIHNpemVfdCB3Y3N0b21icyAoY2hhciAqX19yZXN0cmljdCBfX3MsCiAgICAgICAgICAg ICAgICAgICAgICAgIF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX3B3Y3MsIHNpemVfdCBf X24pCiAgICAgOwoKCgoKCgoKCmV4dGVybiBpbnQgcnBtYXRjaCAoX19jb25zdCBjaGFyICpfX3Jl c3BvbnNlKSA7CiMgODU4ICIuLi9zdGRsaWIvc3RkbGliLmgiCmV4dGVybiBpbnQgZ2V0c3Vib3B0 IChjaGFyICoqX19yZXN0cmljdCBfX29wdGlvbnAsCiAgICAgICAgICAgICAgICAgICAgICBjaGFy ICpfX2NvbnN0ICpfX3Jlc3RyaWN0IF9fdG9rZW5zLAogICAgICAgICAgICAgICAgICAgICAgY2hh ciAqKl9fcmVzdHJpY3QgX192YWx1ZXApIDsKCgoKCgpleHRlcm4gdm9pZCBzZXRrZXkgKF9fY29u c3QgY2hhciAqX19rZXkpIDsKCgoKCgoKCmV4dGVybiBpbnQgcG9zaXhfb3BlbnB0IChpbnQgX19v ZmxhZykgOwoKCgoKCgoKZXh0ZXJuIGludCBncmFudHB0IChpbnQgX19mZCkgOwoKCgpleHRlcm4g aW50IHVubG9ja3B0IChpbnQgX19mZCkgOwoKCgoKZXh0ZXJuIGNoYXIgKnB0c25hbWUgKGludCBf X2ZkKSA7CgoKCgoKCmV4dGVybiBpbnQgcHRzbmFtZV9yIChpbnQgX19mZCwgY2hhciAqX19idWYs IHNpemVfdCBfX2J1ZmxlbikgOwoKCmV4dGVybiBpbnQgZ2V0cHQgKHZvaWQpIDsKCgoKCgoKZXh0 ZXJuIGludCBnZXRsb2FkYXZnIChkb3VibGUgX19sb2FkYXZnW10sIGludCBfX25lbGVtKSA7CgoK CgoKCiMgOSAiLi4vaW5jbHVkZS9zdGRsaWIuaCIgMgoKCgoKZXh0ZXJuIF9fdHlwZW9mIChzdHJ0 b2xfbCkgX19zdHJ0b2xfbDsKZXh0ZXJuIF9fdHlwZW9mIChzdHJ0b3VsX2wpIF9fc3RydG91bF9s OwpleHRlcm4gX190eXBlb2YgKHN0cnRvbGxfbCkgX19zdHJ0b2xsX2w7CmV4dGVybiBfX3R5cGVv ZiAoc3RydG91bGxfbCkgX19zdHJ0b3VsbF9sOwpleHRlcm4gX190eXBlb2YgKHN0cnRvZF9sKSBf X3N0cnRvZF9sOwpleHRlcm4gX190eXBlb2YgKHN0cnRvZl9sKSBfX3N0cnRvZl9sOwpleHRlcm4g X190eXBlb2YgKHN0cnRvbGRfbCkgX19zdHJ0b2xkX2w7CgpleHRlcm4gX190eXBlb2YgKGV4aXQp IF9fR0lfZXhpdDsgZXh0ZXJuIF9fdHlwZW9mIChleGl0KSBleGl0IF9fYXNtX18gKCIiICJfX0dJ X2V4aXQiKSBfX2F0dHJpYnV0ZV9fICgodmlzaWJpbGl0eSAoImhpZGRlbiIpKSk7CmV4dGVybiBf X3R5cGVvZiAoYWJvcnQpIF9fR0lfYWJvcnQ7IGV4dGVybiBfX3R5cGVvZiAoYWJvcnQpIGFib3J0 IF9fYXNtX18gKCIiICJfX0dJX2Fib3J0IikgX19hdHRyaWJ1dGVfXyAoKHZpc2liaWxpdHkgKCJo aWRkZW4iKSkpOwpleHRlcm4gX190eXBlb2YgKGdldGVudikgX19HSV9nZXRlbnY7IGV4dGVybiBf X3R5cGVvZiAoZ2V0ZW52KSBnZXRlbnYgX19hc21fXyAoIiIgIl9fR0lfZ2V0ZW52IikgX19hdHRy aWJ1dGVfXyAoKHZpc2liaWxpdHkgKCJoaWRkZW4iKSkpOwpleHRlcm4gX190eXBlb2YgKGJzZWFy Y2gpIF9fR0lfYnNlYXJjaDsgZXh0ZXJuIF9fdHlwZW9mIChic2VhcmNoKSBic2VhcmNoIF9fYXNt X18gKCIiICJfX0dJX2JzZWFyY2giKSBfX2F0dHJpYnV0ZV9fICgodmlzaWJpbGl0eSAoImhpZGRl biIpKSk7CmV4dGVybiBfX3R5cGVvZiAocXNvcnQpIF9fR0lfcXNvcnQ7IGV4dGVybiBfX3R5cGVv ZiAocXNvcnQpIHFzb3J0IF9fYXNtX18gKCIiICJfX0dJX3Fzb3J0IikgX19hdHRyaWJ1dGVfXyAo KHZpc2liaWxpdHkgKCJoaWRkZW4iKSkpOwpleHRlcm4gX190eXBlb2YgKGVjdnRfcikgX19HSV9l Y3Z0X3I7IGV4dGVybiBfX3R5cGVvZiAoZWN2dF9yKSBlY3Z0X3IgX19hc21fXyAoIiIgIl9fR0lf ZWN2dF9yIikgX19hdHRyaWJ1dGVfXyAoKHZpc2liaWxpdHkgKCJoaWRkZW4iKSkpOwpleHRlcm4g X190eXBlb2YgKGZjdnRfcikgX19HSV9mY3Z0X3I7IGV4dGVybiBfX3R5cGVvZiAoZmN2dF9yKSBm Y3Z0X3IgX19hc21fXyAoIiIgIl9fR0lfZmN2dF9yIikgX19hdHRyaWJ1dGVfXyAoKHZpc2liaWxp dHkgKCJoaWRkZW4iKSkpOwpleHRlcm4gX190eXBlb2YgKHFlY3Z0X3IpIF9fR0lfcWVjdnRfcjsg ZXh0ZXJuIF9fdHlwZW9mIChxZWN2dF9yKSBxZWN2dF9yIF9fYXNtX18gKCIiICJfX0dJX3FlY3Z0 X3IiKSBfX2F0dHJpYnV0ZV9fICgodmlzaWJpbGl0eSAoImhpZGRlbiIpKSk7CmV4dGVybiBfX3R5 cGVvZiAocWZjdnRfcikgX19HSV9xZmN2dF9yOyBleHRlcm4gX190eXBlb2YgKHFmY3Z0X3IpIHFm Y3Z0X3IgX19hc21fXyAoIiIgIl9fR0lfcWZjdnRfciIpIF9fYXR0cmlidXRlX18gKCh2aXNpYmls aXR5ICgiaGlkZGVuIikpKTsKZXh0ZXJuIF9fdHlwZW9mIChscmFuZDQ4X3IpIF9fR0lfbHJhbmQ0 OF9yOyBleHRlcm4gX190eXBlb2YgKGxyYW5kNDhfcikgbHJhbmQ0OF9yIF9fYXNtX18gKCIiICJf X0dJX2xyYW5kNDhfciIpIF9fYXR0cmlidXRlX18gKCh2aXNpYmlsaXR5ICgiaGlkZGVuIikpKTsK ZXh0ZXJuIF9fdHlwZW9mICh3Y3RvbWIpIF9fR0lfd2N0b21iOyBleHRlcm4gX190eXBlb2YgKHdj dG9tYikgd2N0b21iIF9fYXNtX18gKCIiICJfX0dJX3djdG9tYiIpIF9fYXR0cmlidXRlX18gKCh2 aXNpYmlsaXR5ICgiaGlkZGVuIikpKTsKZXh0ZXJuIF9fdHlwZW9mIChfX3NlY3VyZV9nZXRlbnYp IF9fR0lfX19zZWN1cmVfZ2V0ZW52OyBleHRlcm4gX190eXBlb2YgKF9fc2VjdXJlX2dldGVudikg X19zZWN1cmVfZ2V0ZW52IF9fYXNtX18gKCIiICJfX0dJX19fc2VjdXJlX2dldGVudiIpIF9fYXR0 cmlidXRlX18gKCh2aXNpYmlsaXR5ICgiaGlkZGVuIikpKTsKZXh0ZXJuIF9fdHlwZW9mIChfX3N0 cnRvZl9pbnRlcm5hbCkgX19HSV9fX3N0cnRvZl9pbnRlcm5hbDsgZXh0ZXJuIF9fdHlwZW9mIChf X3N0cnRvZl9pbnRlcm5hbCkgX19zdHJ0b2ZfaW50ZXJuYWwgX19hc21fXyAoIiIgIl9fR0lfX19z dHJ0b2ZfaW50ZXJuYWwiKSBfX2F0dHJpYnV0ZV9fICgodmlzaWJpbGl0eSAoImhpZGRlbiIpKSk7 CmV4dGVybiBfX3R5cGVvZiAoX19zdHJ0b2RfaW50ZXJuYWwpIF9fR0lfX19zdHJ0b2RfaW50ZXJu YWw7IGV4dGVybiBfX3R5cGVvZiAoX19zdHJ0b2RfaW50ZXJuYWwpIF9fc3RydG9kX2ludGVybmFs IF9fYXNtX18gKCIiICJfX0dJX19fc3RydG9kX2ludGVybmFsIikgX19hdHRyaWJ1dGVfXyAoKHZp c2liaWxpdHkgKCJoaWRkZW4iKSkpOwpleHRlcm4gX190eXBlb2YgKF9fc3RydG9sZF9pbnRlcm5h bCkgX19HSV9fX3N0cnRvbGRfaW50ZXJuYWw7IGV4dGVybiBfX3R5cGVvZiAoX19zdHJ0b2xkX2lu dGVybmFsKSBfX3N0cnRvbGRfaW50ZXJuYWwgX19hc21fXyAoIiIgIl9fR0lfX19zdHJ0b2xkX2lu dGVybmFsIikgX19hdHRyaWJ1dGVfXyAoKHZpc2liaWxpdHkgKCJoaWRkZW4iKSkpOwpleHRlcm4g X190eXBlb2YgKF9fc3RydG9sX2ludGVybmFsKSBfX0dJX19fc3RydG9sX2ludGVybmFsOyBleHRl cm4gX190eXBlb2YgKF9fc3RydG9sX2ludGVybmFsKSBfX3N0cnRvbF9pbnRlcm5hbCBfX2FzbV9f ICgiIiAiX19HSV9fX3N0cnRvbF9pbnRlcm5hbCIpIF9fYXR0cmlidXRlX18gKCh2aXNpYmlsaXR5 ICgiaGlkZGVuIikpKTsKZXh0ZXJuIF9fdHlwZW9mIChfX3N0cnRvbGxfaW50ZXJuYWwpIF9fR0lf X19zdHJ0b2xsX2ludGVybmFsOyBleHRlcm4gX190eXBlb2YgKF9fc3RydG9sbF9pbnRlcm5hbCkg X19zdHJ0b2xsX2ludGVybmFsIF9fYXNtX18gKCIiICJfX0dJX19fc3RydG9sbF9pbnRlcm5hbCIp IF9fYXR0cmlidXRlX18gKCh2aXNpYmlsaXR5ICgiaGlkZGVuIikpKTsKZXh0ZXJuIF9fdHlwZW9m IChfX3N0cnRvdWxfaW50ZXJuYWwpIF9fR0lfX19zdHJ0b3VsX2ludGVybmFsOyBleHRlcm4gX190 eXBlb2YgKF9fc3RydG91bF9pbnRlcm5hbCkgX19zdHJ0b3VsX2ludGVybmFsIF9fYXNtX18gKCIi ICJfX0dJX19fc3RydG91bF9pbnRlcm5hbCIpIF9fYXR0cmlidXRlX18gKCh2aXNpYmlsaXR5ICgi aGlkZGVuIikpKTsKZXh0ZXJuIF9fdHlwZW9mIChfX3N0cnRvdWxsX2ludGVybmFsKSBfX0dJX19f c3RydG91bGxfaW50ZXJuYWw7IGV4dGVybiBfX3R5cGVvZiAoX19zdHJ0b3VsbF9pbnRlcm5hbCkg X19zdHJ0b3VsbF9pbnRlcm5hbCBfX2FzbV9fICgiIiAiX19HSV9fX3N0cnRvdWxsX2ludGVybmFs IikgX19hdHRyaWJ1dGVfXyAoKHZpc2liaWxpdHkgKCJoaWRkZW4iKSkpOwoKZXh0ZXJuIGxvbmcg aW50IF9fcmFuZG9tICh2b2lkKTsKZXh0ZXJuIHZvaWQgX19zcmFuZG9tICh1bnNpZ25lZCBpbnQg X19zZWVkKTsKZXh0ZXJuIGNoYXIgKl9faW5pdHN0YXRlICh1bnNpZ25lZCBpbnQgX19zZWVkLCBj aGFyICpfX3N0YXRlYnVmLAogICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX3N0YXRl bGVuKTsKZXh0ZXJuIGNoYXIgKl9fc2V0c3RhdGUgKGNoYXIgKl9fc3RhdGVidWYpOwpleHRlcm4g aW50IF9fcmFuZG9tX3IgKHN0cnVjdCByYW5kb21fZGF0YSAqX19idWYsIGludDMyX3QgKl9fcmVz dWx0KTsKZXh0ZXJuIGludCBfX3NyYW5kb21fciAodW5zaWduZWQgaW50IF9fc2VlZCwgc3RydWN0 IHJhbmRvbV9kYXRhICpfX2J1Zik7CmV4dGVybiBpbnQgX19pbml0c3RhdGVfciAodW5zaWduZWQg aW50IF9fc2VlZCwgY2hhciAqX19zdGF0ZWJ1ZiwKICAgICAgICAgICAgICAgICAgICAgICAgICBz aXplX3QgX19zdGF0ZWxlbiwgc3RydWN0IHJhbmRvbV9kYXRhICpfX2J1Zik7CmV4dGVybiBpbnQg X19zZXRzdGF0ZV9yIChjaGFyICpfX3N0YXRlYnVmLCBzdHJ1Y3QgcmFuZG9tX2RhdGEgKl9fYnVm KTsKZXh0ZXJuIGludCBfX3JhbmRfciAodW5zaWduZWQgaW50ICpfX3NlZWQpOwpleHRlcm4gaW50 IF9fZXJhbmQ0OF9yICh1bnNpZ25lZCBzaG9ydCBpbnQgX194c3ViaVszXSwKICAgICAgICAgICAg ICAgICAgICAgICAgc3RydWN0IGRyYW5kNDhfZGF0YSAqX19idWZmZXIsIGRvdWJsZSAqX19yZXN1 bHQpOwpleHRlcm4gaW50IF9fbnJhbmQ0OF9yICh1bnNpZ25lZCBzaG9ydCBpbnQgX194c3ViaVsz XSwKICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGRyYW5kNDhfZGF0YSAqX19idWZmZXIs CiAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgaW50ICpfX3Jlc3VsdCk7CmV4dGVybiBpbnQg X19qcmFuZDQ4X3IgKHVuc2lnbmVkIHNob3J0IGludCBfX3hzdWJpWzNdLAogICAgICAgICAgICAg ICAgICAgICAgICBzdHJ1Y3QgZHJhbmQ0OF9kYXRhICpfX2J1ZmZlciwKICAgICAgICAgICAgICAg ICAgICAgICAgbG9uZyBpbnQgKl9fcmVzdWx0KTsKZXh0ZXJuIGludCBfX3NyYW5kNDhfciAobG9u ZyBpbnQgX19zZWVkdmFsLAogICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgZHJhbmQ0OF9k YXRhICpfX2J1ZmZlcik7CmV4dGVybiBpbnQgX19zZWVkNDhfciAodW5zaWduZWQgc2hvcnQgaW50 IF9fc2VlZDE2dlszXSwKICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgZHJhbmQ0OF9kYXRh ICpfX2J1ZmZlcik7CmV4dGVybiBpbnQgX19sY29uZzQ4X3IgKHVuc2lnbmVkIHNob3J0IGludCBf X3BhcmFtWzddLAogICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgZHJhbmQ0OF9kYXRhICpf X2J1ZmZlcik7CgoKZXh0ZXJuIGludCBfX2RyYW5kNDhfaXRlcmF0ZSAodW5zaWduZWQgc2hvcnQg aW50IF9feHN1YmlbM10sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBkcmFu ZDQ4X2RhdGEgKl9fYnVmZmVyKTsKCgpleHRlcm4gc3RydWN0IGRyYW5kNDhfZGF0YSBfX2xpYmNf ZHJhbmQ0OF9kYXRhIF9fYXR0cmlidXRlX18gKCh2aXNpYmlsaXR5ICgiaGlkZGVuIikpKTsKCmV4 dGVybiBpbnQgX19zZXRlbnYgKF9fY29uc3QgY2hhciAqX19uYW1lLCBfX2NvbnN0IGNoYXIgKl9f dmFsdWUsCiAgICAgICAgICAgICAgICAgICAgIGludCBfX3JlcGxhY2UpOwpleHRlcm4gaW50IF9f dW5zZXRlbnYgKF9fY29uc3QgY2hhciAqX19uYW1lKTsKZXh0ZXJuIGludCBfX2NsZWFyZW52ICh2 b2lkKTsKZXh0ZXJuIGNoYXIgKl9fY2Fub25pY2FsaXplX2ZpbGVfbmFtZSAoX19jb25zdCBjaGFy ICpfX25hbWUpOwpleHRlcm4gY2hhciAqX19yZWFscGF0aCAoX19jb25zdCBjaGFyICpfX25hbWUs IGNoYXIgKl9fcmVzb2x2ZWQpOwpleHRlcm4gaW50IF9fcHRzbmFtZV9yIChpbnQgX19mZCwgY2hh ciAqX19idWYsIHNpemVfdCBfX2J1Zmxlbik7CmV4dGVybiBpbnQgX19nZXRwdCAodm9pZCk7CmV4 dGVybiBpbnQgX19wb3NpeF9vcGVucHQgKGludCBfX29mbGFnKTsKCmV4dGVybiBpbnQgX19hZGRf dG9fZW52aXJvbiAoY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqdmFsdWUsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqY29tYmluZXMsIGludCByZXBsYWNlKTsK CmV4dGVybiB2b2lkIF9xdWlja3NvcnQgKHZvaWQgKmNvbnN0IHBiYXNlLCBzaXplX3QgdG90YWxf ZWxlbXMsCiAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBzaXplLCBfX2NvbXBhcl9mbl90 IGNtcCk7CgpleHRlcm4gaW50IF9fb25fZXhpdCAodm9pZCAoKl9fZnVuYykgKGludCBfX3N0YXR1 cywgdm9pZCAqX19hcmcpLCB2b2lkICpfX2FyZyk7CgpleHRlcm4gaW50IF9fY3hhX2F0ZXhpdCAo dm9pZCAoKmZ1bmMpICh2b2lkICopLCB2b2lkICphcmcsIHZvaWQgKmQpOwpleHRlcm4gaW50IF9f Y3hhX2F0ZXhpdF9pbnRlcm5hbCAodm9pZCAoKmZ1bmMpICh2b2lkICopLCB2b2lkICphcmcsIHZv aWQgKmQpCiAgICAgX19hdHRyaWJ1dGVfXyAoKHZpc2liaWxpdHkgKCJoaWRkZW4iKSkpOwoKZXh0 ZXJuIHZvaWQgX19jeGFfZmluYWxpemUgKHZvaWQgKmQpOwoKZXh0ZXJuIGludCBfX3Bvc2l4X21l bWFsaWduICh2b2lkICoqbWVtcHRyLCBzaXplX3QgYWxpZ25tZW50LCBzaXplX3Qgc2l6ZSkKICAg ICBfX2F0dHJpYnV0ZV9fICgoX19tYWxsb2NfXykpOwpleHRlcm4gdm9pZCAqX19saWJjX21lbWFs aWduIChzaXplX3QgYWxpZ25tZW50LCBzaXplX3Qgc2l6ZSkKICAgICBfX2F0dHJpYnV0ZV9fICgo X19tYWxsb2NfXykpOwoKZXh0ZXJuIGludCBfX2xpYmNfc3lzdGVtIChjb25zdCBjaGFyICpsaW5l KTsKCmV4dGVybiBkb3VibGUgX19fX3N0cnRvZF9sX2ludGVybmFsIChfX2NvbnN0IGNoYXIgKl9f cmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hh ciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2dyb3VwLAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgX19sb2NhbGVfdCBfX2xvYykgOwpleHRlcm4gZmxvYXQgX19fX3N0 cnRvZl9sX2ludGVybmFsIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwg aW50IF9fZ3JvdXAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbG9jYWxl X3QgX19sb2MpIDsKZXh0ZXJuIGxvbmcgZG91YmxlIF9fX19zdHJ0b2xkX2xfaW50ZXJuYWwgKF9f Y29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBfX2dyb3VwLCBfX2xvY2FsZV90IF9f bG9jKQogICAgIDsKZXh0ZXJuIGxvbmcgaW50IF9fX19zdHJ0b2xfbF9pbnRlcm5hbCAoX19jb25z dCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGludCBfX2Jhc2UsIGludCBfX2dyb3VwLAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBfX2xvY2FsZV90IF9fbG9jKSA7CmV4dGVybiB1bnNp Z25lZCBsb25nIGludCBfX19fc3RydG91bF9sX2ludGVybmFsIChfX2NvbnN0IGNoYXIgKgogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19yZXN0cmljdCBf X25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj aGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGludCBfX2Jhc2UsIGludCBfX2dyb3VwLAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19sb2NhbGVfdCBfX2xvYykgOwpf X2V4dGVuc2lvbl9fCmV4dGVybiBsb25nIGxvbmcgaW50IF9fX19zdHJ0b2xsX2xfaW50ZXJuYWwg KF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19iYXNlLCBpbnQgX19n cm91cCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19sb2Nh bGVfdCBfX2xvYykgOwpfX2V4dGVuc2lvbl9fCmV4dGVybiB1bnNpZ25lZCBsb25nIGxvbmcgaW50 IF9fX19zdHJ0b3VsbF9sX2ludGVybmFsIChfX2NvbnN0IGNoYXIgKgogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19yZXN0cmljdCBfX25wdHIs CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj aGFyICoqCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBfX3Jlc3RyaWN0IF9fZW5kcHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9fYmFzZSwgaW50IF9fZ3JvdXAsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2xvY2FsZV90 IF9fbG9jKQogICAgIDsKCmV4dGVybiBfX3R5cGVvZiAoX19fX3N0cnRvZl9sX2ludGVybmFsKSBf X0dJX19fX19zdHJ0b2ZfbF9pbnRlcm5hbDsgZXh0ZXJuIF9fdHlwZW9mIChfX19fc3RydG9mX2xf aW50ZXJuYWwpIF9fX19zdHJ0b2ZfbF9pbnRlcm5hbCBfX2FzbV9fICgiIiAiX19HSV9fX19fc3Ry dG9mX2xfaW50ZXJuYWwiKSBfX2F0dHJpYnV0ZV9fICgodmlzaWJpbGl0eSAoImhpZGRlbiIpKSk7 CmV4dGVybiBfX3R5cGVvZiAoX19fX3N0cnRvZF9sX2ludGVybmFsKSBfX0dJX19fX19zdHJ0b2Rf bF9pbnRlcm5hbDsgZXh0ZXJuIF9fdHlwZW9mIChfX19fc3RydG9kX2xfaW50ZXJuYWwpIF9fX19z dHJ0b2RfbF9pbnRlcm5hbCBfX2FzbV9fICgiIiAiX19HSV9fX19fc3RydG9kX2xfaW50ZXJuYWwi KSBfX2F0dHJpYnV0ZV9fICgodmlzaWJpbGl0eSAoImhpZGRlbiIpKSk7CmV4dGVybiBfX3R5cGVv ZiAoX19fX3N0cnRvbGRfbF9pbnRlcm5hbCkgX19HSV9fX19fc3RydG9sZF9sX2ludGVybmFsOyBl eHRlcm4gX190eXBlb2YgKF9fX19zdHJ0b2xkX2xfaW50ZXJuYWwpIF9fX19zdHJ0b2xkX2xfaW50 ZXJuYWwgX19hc21fXyAoIiIgIl9fR0lfX19fX3N0cnRvbGRfbF9pbnRlcm5hbCIpIF9fYXR0cmli dXRlX18gKCh2aXNpYmlsaXR5ICgiaGlkZGVuIikpKTsKZXh0ZXJuIF9fdHlwZW9mIChfX19fc3Ry dG9sX2xfaW50ZXJuYWwpIF9fR0lfX19fX3N0cnRvbF9sX2ludGVybmFsOyBleHRlcm4gX190eXBl b2YgKF9fX19zdHJ0b2xfbF9pbnRlcm5hbCkgX19fX3N0cnRvbF9sX2ludGVybmFsIF9fYXNtX18g KCIiICJfX0dJX19fX19zdHJ0b2xfbF9pbnRlcm5hbCIpIF9fYXR0cmlidXRlX18gKCh2aXNpYmls aXR5ICgiaGlkZGVuIikpKTsKZXh0ZXJuIF9fdHlwZW9mIChfX19fc3RydG9sbF9sX2ludGVybmFs KSBfX0dJX19fX19zdHJ0b2xsX2xfaW50ZXJuYWw7IGV4dGVybiBfX3R5cGVvZiAoX19fX3N0cnRv bGxfbF9pbnRlcm5hbCkgX19fX3N0cnRvbGxfbF9pbnRlcm5hbCBfX2FzbV9fICgiIiAiX19HSV9f X19fc3RydG9sbF9sX2ludGVybmFsIikgX19hdHRyaWJ1dGVfXyAoKHZpc2liaWxpdHkgKCJoaWRk ZW4iKSkpOwpleHRlcm4gX190eXBlb2YgKF9fX19zdHJ0b3VsX2xfaW50ZXJuYWwpIF9fR0lfX19f X3N0cnRvdWxfbF9pbnRlcm5hbDsgZXh0ZXJuIF9fdHlwZW9mIChfX19fc3RydG91bF9sX2ludGVy bmFsKSBfX19fc3RydG91bF9sX2ludGVybmFsIF9fYXNtX18gKCIiICJfX0dJX19fX19zdHJ0b3Vs X2xfaW50ZXJuYWwiKSBfX2F0dHJpYnV0ZV9fICgodmlzaWJpbGl0eSAoImhpZGRlbiIpKSk7CmV4 dGVybiBfX3R5cGVvZiAoX19fX3N0cnRvdWxsX2xfaW50ZXJuYWwpIF9fR0lfX19fX3N0cnRvdWxs X2xfaW50ZXJuYWw7IGV4dGVybiBfX3R5cGVvZiAoX19fX3N0cnRvdWxsX2xfaW50ZXJuYWwpIF9f X19zdHJ0b3VsbF9sX2ludGVybmFsIF9fYXNtX18gKCIiICJfX0dJX19fX19zdHJ0b3VsbF9sX2lu dGVybmFsIikgX19hdHRyaWJ1dGVfXyAoKHZpc2liaWxpdHkgKCJoaWRkZW4iKSkpOwoKZXh0ZXJu IF9faW5saW5lIGRvdWJsZQpfX3N0cnRvZF9sIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19u cHRyLCBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwKICAgICAgICAgICAgX19sb2NhbGVfdCBf X2xvYykKewogIHJldHVybiBfX19fc3RydG9kX2xfaW50ZXJuYWwgKF9fbnB0ciwgX19lbmRwdHIs IDAsIF9fbG9jKTsKfQpleHRlcm4gX19pbmxpbmUgbG9uZyBpbnQKX19zdHJ0b2xfbCAoX19jb25z dCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsCiAg ICAgICAgICAgIGludCBfX2Jhc2UsIF9fbG9jYWxlX3QgX19sb2MpCnsKICByZXR1cm4gX19fX3N0 cnRvbF9sX2ludGVybmFsIChfX25wdHIsIF9fZW5kcHRyLCBfX2Jhc2UsIDAsIF9fbG9jKTsKfQpl eHRlcm4gX19pbmxpbmUgdW5zaWduZWQgbG9uZyBpbnQKX19zdHJ0b3VsX2wgKF9fY29uc3QgY2hh ciAqX19yZXN0cmljdCBfX25wdHIsIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLAogICAgICAg ICAgICAgaW50IF9fYmFzZSwgX19sb2NhbGVfdCBfX2xvYykKewogIHJldHVybiBfX19fc3RydG91 bF9sX2ludGVybmFsIChfX25wdHIsIF9fZW5kcHRyLCBfX2Jhc2UsIDAsIF9fbG9jKTsKfQpleHRl cm4gX19pbmxpbmUgZmxvYXQKX19zdHJ0b2ZfbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9f bnB0ciwgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsCiAgICAgICAgICAgIF9fbG9jYWxlX3Qg X19sb2MpCnsKICByZXR1cm4gX19fX3N0cnRvZl9sX2ludGVybmFsIChfX25wdHIsIF9fZW5kcHRy LCAwLCBfX2xvYyk7Cn0KZXh0ZXJuIF9faW5saW5lIGxvbmcgZG91YmxlCl9fc3RydG9sZF9sIChf X2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLCBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0 ciwKICAgICAgICAgICAgIF9fbG9jYWxlX3QgX19sb2MpCnsKICByZXR1cm4gX19fX3N0cnRvbGRf bF9pbnRlcm5hbCAoX19ucHRyLCBfX2VuZHB0ciwgMCwgX19sb2MpOwp9Cl9fZXh0ZW5zaW9uX18g ZXh0ZXJuIF9faW5saW5lIGxvbmcgbG9uZyBpbnQKX19zdHJ0b2xsX2wgKF9fY29uc3QgY2hhciAq X19yZXN0cmljdCBfX25wdHIsIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLAogICAgICAgICAg ICAgaW50IF9fYmFzZSwgX19sb2NhbGVfdCBfX2xvYykKewogIHJldHVybiBfX19fc3RydG9sbF9s X2ludGVybmFsIChfX25wdHIsIF9fZW5kcHRyLCBfX2Jhc2UsIDAsIF9fbG9jKTsKfQpfX2V4dGVu c2lvbl9fIGV4dGVybiBfX2lubGluZSB1bnNpZ25lZCBsb25nIGxvbmcgaW50Cl9fc3RydG91bGxf bCAoX19jb25zdCBjaGFyICogX19yZXN0cmljdCBfX25wdHIsIGNoYXIgKipfX3Jlc3RyaWN0IF9f ZW5kcHRyLAogICAgICAgICAgICAgIGludCBfX2Jhc2UsIF9fbG9jYWxlX3QgX19sb2MpCnsKICBy ZXR1cm4gX19fX3N0cnRvdWxsX2xfaW50ZXJuYWwgKF9fbnB0ciwgX19lbmRwdHIsIF9fYmFzZSwg MCwgX19sb2MpOwp9CiMgMTk5ICIuLi9pbmNsdWRlL3N0ZGxpYi5oIgpleHRlcm4gdm9pZCAqIF9f ZGVmYXVsdF9tb3JlY29yZSAocHRyZGlmZl90KTsKZXh0ZXJuIF9fdHlwZW9mIChfX2RlZmF1bHRf bW9yZWNvcmUpIF9fR0lfX19kZWZhdWx0X21vcmVjb3JlOyBleHRlcm4gX190eXBlb2YgKF9fZGVm YXVsdF9tb3JlY29yZSkgX19kZWZhdWx0X21vcmVjb3JlIF9fYXNtX18gKCIiICJfX0dJX19fZGVm YXVsdF9tb3JlY29yZSIpIF9fYXR0cmlidXRlX18gKCh2aXNpYmlsaXR5ICgiaGlkZGVuIikpKTsK IyAyNiAiLi4vbGludXh0aHJlYWRzL3N5c2RlcHMveDg2XzY0L3B0LW1hY2hpbmUuaCIgMgojIDEg Ii91c3Ivc3JjL3BhY2thZ2VzL0JVSUxEL2tlcm5lbC1oZWFkZXJzL2FzbS9wcmN0bC5oIiAxIDMg NAoKCgojIDEgIi91c3Ivc3JjL3BhY2thZ2VzL0JVSUxEL2tlcm5lbC1oZWFkZXJzL2FzbS14ODZf NjQvcHJjdGwuaCIgMSAzIDQKIyA1ICIvdXNyL3NyYy9wYWNrYWdlcy9CVUlMRC9rZXJuZWwtaGVh ZGVycy9hc20vcHJjdGwuaCIgMiAzIDQKIyAyNyAiLi4vbGludXh0aHJlYWRzL3N5c2RlcHMveDg2 XzY0L3B0LW1hY2hpbmUuaCIgMgoKCgoKCgpleHRlcm4gbG9uZyBpbnQgdGVzdGFuZHNldCAoaW50 ICpzcGlubG9jayk7CmV4dGVybiBpbnQgX19jb21wYXJlX2FuZF9zd2FwIChsb25nIGludCAqcCwg bG9uZyBpbnQgb2xkdmFsLCBsb25nIGludCBuZXd2YWwpOwoKCgoKcmVnaXN0ZXIgY2hhciAqIHN0 YWNrX3BvaW50ZXIgX19hc21fXyAoIiVyc3AiKTsKCgoKZXh0ZXJuIGlubGluZSBsb25nIGludAp0 ZXN0YW5kc2V0IChpbnQgKnNwaW5sb2NrKQp7CiAgbG9uZyBpbnQgcmV0OwoKICBfX2FzbV9fIF9f dm9sYXRpbGVfXyAoCiAgICAgICAgInhjaGdsICVrMCwgJTEiCiAgICAgICAgOiAiPXIiKHJldCks ICI9bSIoKnNwaW5sb2NrKQogICAgICAgIDogIjAiKDEpLCAibSIoKnNwaW5sb2NrKQogICAgICAg IDogIm1lbW9yeSIpOwoKICByZXR1cm4gcmV0Owp9CgoKCgoKZXh0ZXJuIGlubGluZSBpbnQKX19j b21wYXJlX2FuZF9zd2FwIChsb25nIGludCAqcCwgbG9uZyBpbnQgb2xkdmFsLCBsb25nIGludCBu ZXd2YWwpCnsKICBjaGFyIHJldDsKICBsb25nIGludCByZWFkdmFsOwoKICBfX2FzbV9fIF9fdm9s YXRpbGVfXyAoImxvY2s7IGNtcHhjaGdxICUzLCAlMTsgc2V0ZSAlMCIKICAgICAgICAgICAgICAg ICAgICAgICAgOiAiPXEiIChyZXQpLCAiPW0iICgqcCksICI9YSIgKHJlYWR2YWwpCiAgICAgICAg ICAgICAgICAgICAgICAgIDogInIiIChuZXd2YWwpLCAibSIgKCpwKSwgImEiIChvbGR2YWwpCiAg ICAgICAgICAgICAgICAgICAgICAgIDogIm1lbW9yeSIpOwogIHJldHVybiByZXQ7Cn0KIyA5MCAi Li4vbGludXh0aHJlYWRzL3N5c2RlcHMveDg2XzY0L3B0LW1hY2hpbmUuaCIKZXh0ZXJuIGludCBf X2FyY2hfcHJjdGwgKGludCBfX2NvZGUsIHVuc2lnbmVkIGxvbmcgX19hZGRyKTsKIyAyNiAiLi4v bGludXh0aHJlYWRzL3N5c2RlcHMveDg2XzY0L3Rscy5oIiAyCiMgMSAiL3Vzci9saWI2NC9nY2Mt bGliL3g4Nl82NC1zdXNlLWxpbnV4LzMuMy9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMgNAojIDI3ICIu Li9saW51eHRocmVhZHMvc3lzZGVwcy94ODZfNjQvdGxzLmgiIDIKCgp0eXBlZGVmIHVuaW9uIGR0 dgp7CiAgc2l6ZV90IGNvdW50ZXI7CiAgdm9pZCAqcG9pbnRlcjsKfSBkdHZfdDsKCgp0eXBlZGVm IHN0cnVjdAp7CiAgdm9pZCAqdGNiOwoKICBkdHZfdCAqZHR2OwogIHZvaWQgKnNlbGY7Cn0gdGNi aGVhZF90OwojIDQgIi4uL2luY2x1ZGUvdGxzLmgiIDIKIyAzNCAiLi4vbGludXh0aHJlYWRzL3N5 c2RlcHMvcHRocmVhZC9iaXRzL2xpYmMtdHNkLmgiIDIKIyA0MiAiLi4vbGludXh0aHJlYWRzL3N5 c2RlcHMvcHRocmVhZC9iaXRzL2xpYmMtdHNkLmgiCmV4dGVybiB2b2lkICooKl9fbGliY19pbnRl cm5hbF90c2RfZ2V0KSAoZW51bSBfX2xpYmNfdHNkX2tleV90KSA7CmV4dGVybiBpbnQgKCpfX2xp YmNfaW50ZXJuYWxfdHNkX3NldCkgKGVudW0gX19saWJjX3RzZF9rZXlfdCwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCB2b2lkICopIDsKZXh0ZXJuIHZvaWQg KiooKmNvbnN0IF9fbGliY19pbnRlcm5hbF90c2RfYWRkcmVzcykgKGVudW0gX19saWJjX3RzZF9r ZXlfdCkKICAgICBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CiMgMTkxICIuLi9sb2NhbGUv bG9jYWxlaW5mby5oIiAyCmV4dGVybiB2b2lkICpfX2xpYmNfdHNkX0xPQ0FMRV9kYXRhOwojIDI4 MSAiLi4vbG9jYWxlL2xvY2FsZWluZm8uaCIKZXh0ZXJuIGNvbnN0IGNoYXIgX25sX2RlZmF1bHRf bG9jYWxlX3BhdGhbXSBfX2F0dHJpYnV0ZV9fICgodmlzaWJpbGl0eSAoImhpZGRlbiIpKSk7CgoK CgoKCgpleHRlcm4gc3RydWN0IGxvY2FsZV9kYXRhICpfbmxfZmluZF9sb2NhbGUgKGNvbnN0IGNo YXIgKmxvY2FsZV9wYXRoLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHNpemVfdCBsb2NhbGVfcGF0aF9sZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgaW50IGNhdGVnb3J5LCBjb25zdCBjaGFyICoqbmFtZSkKICAgICBfX2F0 dHJpYnV0ZV9fICgodmlzaWJpbGl0eSAoImhpZGRlbiIpKSk7CgoKZXh0ZXJuIHZvaWQgX25sX2xv YWRfbG9jYWxlIChzdHJ1Y3QgbG9hZGVkX2wxMG5maWxlICpmaWxlLCBpbnQgY2F0ZWdvcnkpCiAg ICAgX19hdHRyaWJ1dGVfXyAoKHZpc2liaWxpdHkgKCJoaWRkZW4iKSkpOwoKCmV4dGVybiB2b2lk IF9ubF91bmxvYWRfbG9jYWxlIChzdHJ1Y3QgbG9jYWxlX2RhdGEgKmxvY2FsZSkKICAgICBfX2F0 dHJpYnV0ZV9fICgodmlzaWJpbGl0eSAoImhpZGRlbiIpKSk7CgoKZXh0ZXJuIHZvaWQgX25sX3Jl bW92ZV9sb2NhbGUgKGludCBsb2NhbGUsIHN0cnVjdCBsb2NhbGVfZGF0YSAqZGF0YSkKICAgICBf X2F0dHJpYnV0ZV9fICgodmlzaWJpbGl0eSAoImhpZGRlbiIpKSk7CgoKCgoKCmV4dGVybiBzdHJ1 Y3QgbG9jYWxlX2RhdGEgKl9ubF9sb2FkX2xvY2FsZV9mcm9tX2FyY2hpdmUgKGludCBjYXRlZ29y eSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgY29uc3QgY2hhciAqKm5hbWVwKQogICAgIF9fYXR0cmlidXRlX18gKCh2aXNpYmlsaXR5ICgi aGlkZGVuIikpKTsKCgpleHRlcm4gdm9pZCBfbmxfYXJjaGl2ZV9zdWJmcmVlcmVzICh2b2lkKSBf X2F0dHJpYnV0ZV9fICgodmlzaWJpbGl0eSAoImhpZGRlbiIpKSk7CgoKCgoKCmV4dGVybiBzdHJ1 Y3QgbG9jYWxlX2RhdGEgKl9ubF9pbnRlcm5fbG9jYWxlX2RhdGEgKGludCBjYXRlZ29yeSwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgdm9p ZCAqZGF0YSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgc2l6ZV90IGRhdGFzaXplKQogICAgIF9fYXR0cmlidXRlX18gKCh2aXNpYmlsaXR5ICgiaGlk ZGVuIikpKTsKCgoKZXh0ZXJuIHN0cnVjdCBlcmFfZW50cnkgKl9ubF9nZXRfZXJhX2VudHJ5IChj b25zdCBzdHJ1Y3QgdG0gKnRwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHN0cnVjdCBsb2NhbGVfZGF0YSAqbGNfdGltZSkKICAgICBfX2F0dHJpYnV0ZV9fICgo dmlzaWJpbGl0eSAoImhpZGRlbiIpKSk7CgoKZXh0ZXJuIHN0cnVjdCBlcmFfZW50cnkgKl9ubF9z ZWxlY3RfZXJhX2VudHJ5IChpbnQgY250LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHN0cnVjdCBsb2NhbGVfZGF0YSAqbGNfdGltZSkKICAgICAgICAgIF9f YXR0cmlidXRlX18gKCh2aXNpYmlsaXR5ICgiaGlkZGVuIikpKTsKCgpleHRlcm4gY29uc3QgY2hh ciAqX25sX2dldF9hbHRfZGlnaXQgKHVuc2lnbmVkIGludCBudW1iZXIsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGxvY2FsZV9kYXRhICpsY190aW1lKQogICAg ICAgICAgX19hdHRyaWJ1dGVfXyAoKHZpc2liaWxpdHkgKCJoaWRkZW4iKSkpOwoKCmV4dGVybiBj b25zdCB3Y2hhcl90ICpfbmxfZ2V0X3dhbHRfZGlnaXQgKHVuc2lnbmVkIGludCBudW1iZXIsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBsb2NhbGVfZGF0 YSAqbGNfdGltZSkKICAgICBfX2F0dHJpYnV0ZV9fICgodmlzaWJpbGl0eSAoImhpZGRlbiIpKSk7 CgoKZXh0ZXJuIGludCBfbmxfcGFyc2VfYWx0X2RpZ2l0IChjb25zdCBjaGFyICoqc3RycCwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgbG9jYWxlX2RhdGEgKmxjX3RpbWUp CiAgICAgX19hdHRyaWJ1dGVfXyAoKHZpc2liaWxpdHkgKCJoaWRkZW4iKSkpOwoKCmV4dGVybiB2 b2lkIF9ubF9wb3N0bG9hZF9jdHlwZSAodm9pZCk7CgoKZXh0ZXJuIHZvaWQgX25sX2NsZWFudXBf dGltZSAoc3RydWN0IGxvY2FsZV9kYXRhICopCiAgICAgX19hdHRyaWJ1dGVfXyAoKHZpc2liaWxp dHkgKCJoaWRkZW4iKSkpOwojIDE1ICIuLi9pbmNsdWRlL2N0eXBlLmgiIDIKCgoKCgoKZXh0ZXJu IHZvaWQgKl9fbGliY190c2RfQ1RZUEVfQl9kYXRhOwpleHRlcm4gdm9pZCAqX19saWJjX3RzZF9D VFlQRV9UT1VQUEVSX2RhdGE7CmV4dGVybiB2b2lkICpfX2xpYmNfdHNkX0NUWVBFX1RPTE9XRVJf ZGF0YTsKCmV4dGVybiBpbmxpbmUgY29uc3QgdWludDE2X3QgKiogX19hdHRyaWJ1dGVfXyAoKGNv bnN0KSkKX19jdHlwZV9iX2xvYyAodm9pZCkKewogIGNvbnN0IHVpbnQxNl90ICoqdGFibGVwID0K ICAgIChjb25zdCB1aW50MTZfdCAqKikgKF9fbGliY19pbnRlcm5hbF90c2RfYWRkcmVzcyAhPSAo KHZvaWQgKikwKSA/IF9fbGliY19pbnRlcm5hbF90c2RfYWRkcmVzcyAoX0xJQkNfVFNEX0tFWV9D VFlQRV9CKSA6ICZfX2xpYmNfdHNkX0NUWVBFX0JfZGF0YSk7CiAgaWYgKF9fYnVpbHRpbl9leHBl Y3QgKCp0YWJsZXAgPT0gKCh2b2lkICopMCksIDApKQogICAgKnRhYmxlcCA9IChjb25zdCB1aW50 MTZfdCAqKSAoKCgoX19sb2NhbGVfdCkgKF9fbGliY19pbnRlcm5hbF90c2RfZ2V0ICE9ICgodm9p ZCAqKTApID8gX19saWJjX2ludGVybmFsX3RzZF9nZXQgKF9MSUJDX1RTRF9LRVlfTE9DQUxFKSA6 IF9fbGliY190c2RfTE9DQUxFX2RhdGEpKS0+X19sb2NhbGVzW19fTENfQ1RZUEVdKS0+dmFsdWVz WygoaW50KSAoX05MX0NUWVBFX0NMQVNTKSAmIDB4ZmZmZildLnN0cmluZykgKyAxMjg7CiAgcmV0 dXJuIHRhYmxlcDsKfQoKZXh0ZXJuIGlubGluZSBjb25zdCBpbnQzMl90ICoqIF9fYXR0cmlidXRl X18gKChjb25zdCkpCl9fY3R5cGVfdG91cHBlcl9sb2MgKHZvaWQpCnsKICBjb25zdCBpbnQzMl90 ICoqdGFibGVwID0KICAgIChjb25zdCBpbnQzMl90ICoqKSAoX19saWJjX2ludGVybmFsX3RzZF9h ZGRyZXNzICE9ICgodm9pZCAqKTApID8gX19saWJjX2ludGVybmFsX3RzZF9hZGRyZXNzIChfTElC Q19UU0RfS0VZX0NUWVBFX1RPVVBQRVIpIDogJl9fbGliY190c2RfQ1RZUEVfVE9VUFBFUl9kYXRh KTsKICBpZiAoX19idWlsdGluX2V4cGVjdCAoKnRhYmxlcCA9PSAoKHZvaWQgKikwKSwgMCkpCiAg ICAqdGFibGVwID0gKChpbnQzMl90ICopICgoKChfX2xvY2FsZV90KSAoX19saWJjX2ludGVybmFs X3RzZF9nZXQgIT0gKCh2b2lkICopMCkgPyBfX2xpYmNfaW50ZXJuYWxfdHNkX2dldCAoX0xJQkNf VFNEX0tFWV9MT0NBTEUpIDogX19saWJjX3RzZF9MT0NBTEVfZGF0YSkpLT5fX2xvY2FsZXNbX19M Q19DVFlQRV0pLT52YWx1ZXNbKChpbnQpIChfTkxfQ1RZUEVfVE9VUFBFUikgJiAweGZmZmYpXS5z dHJpbmcpICsgMTI4KTsKICByZXR1cm4gdGFibGVwOwp9CgpleHRlcm4gaW5saW5lIGNvbnN0IGlu dDMyX3QgKiogX19hdHRyaWJ1dGVfXyAoKGNvbnN0KSkKX19jdHlwZV90b2xvd2VyX2xvYyAodm9p ZCkKewogIGNvbnN0IGludDMyX3QgKip0YWJsZXAgPQogICAgKGNvbnN0IGludDMyX3QgKiopIChf X2xpYmNfaW50ZXJuYWxfdHNkX2FkZHJlc3MgIT0gKCh2b2lkICopMCkgPyBfX2xpYmNfaW50ZXJu YWxfdHNkX2FkZHJlc3MgKF9MSUJDX1RTRF9LRVlfQ1RZUEVfVE9MT1dFUikgOiAmX19saWJjX3Rz ZF9DVFlQRV9UT0xPV0VSX2RhdGEpOwogIGlmIChfX2J1aWx0aW5fZXhwZWN0ICgqdGFibGVwID09 ICgodm9pZCAqKTApLCAwKSkKICAgICp0YWJsZXAgPSAoKGludDMyX3QgKikgKCgoKF9fbG9jYWxl X3QpIChfX2xpYmNfaW50ZXJuYWxfdHNkX2dldCAhPSAoKHZvaWQgKikwKSA/IF9fbGliY19pbnRl cm5hbF90c2RfZ2V0IChfTElCQ19UU0RfS0VZX0xPQ0FMRSkgOiBfX2xpYmNfdHNkX0xPQ0FMRV9k YXRhKSktPl9fbG9jYWxlc1tfX0xDX0NUWVBFXSktPnZhbHVlc1soKGludCkgKF9OTF9DVFlQRV9U T0xPV0VSKSAmIDB4ZmZmZildLnN0cmluZykgKyAxMjgpOwogIHJldHVybiB0YWJsZXA7Cn0KCgoK IyAxICIuLi9jdHlwZS9jdHlwZS5oIiAxCiMgMzAgIi4uL2N0eXBlL2N0eXBlLmgiCgojIDQxICIu Li9jdHlwZS9jdHlwZS5oIgojIDEgIi4uL2luY2x1ZGUvZW5kaWFuLmgiIDEKIyA0MiAiLi4vY3R5 cGUvY3R5cGUuaCIgMgoKCgoKCgplbnVtCnsKICBfSVN1cHBlciA9ICgoMCkgPCA4ID8gKCgxIDw8 ICgwKSkgPDwgOCkgOiAoKDEgPDwgKDApKSA+PiA4KSksCiAgX0lTbG93ZXIgPSAoKDEpIDwgOCA/ ICgoMSA8PCAoMSkpIDw8IDgpIDogKCgxIDw8ICgxKSkgPj4gOCkpLAogIF9JU2FscGhhID0gKCgy KSA8IDggPyAoKDEgPDwgKDIpKSA8PCA4KSA6ICgoMSA8PCAoMikpID4+IDgpKSwKICBfSVNkaWdp dCA9ICgoMykgPCA4ID8gKCgxIDw8ICgzKSkgPDwgOCkgOiAoKDEgPDwgKDMpKSA+PiA4KSksCiAg X0lTeGRpZ2l0ID0gKCg0KSA8IDggPyAoKDEgPDwgKDQpKSA8PCA4KSA6ICgoMSA8PCAoNCkpID4+ IDgpKSwKICBfSVNzcGFjZSA9ICgoNSkgPCA4ID8gKCgxIDw8ICg1KSkgPDwgOCkgOiAoKDEgPDwg KDUpKSA+PiA4KSksCiAgX0lTcHJpbnQgPSAoKDYpIDwgOCA/ICgoMSA8PCAoNikpIDw8IDgpIDog KCgxIDw8ICg2KSkgPj4gOCkpLAogIF9JU2dyYXBoID0gKCg3KSA8IDggPyAoKDEgPDwgKDcpKSA8 PCA4KSA6ICgoMSA8PCAoNykpID4+IDgpKSwKICBfSVNibGFuayA9ICgoOCkgPCA4ID8gKCgxIDw8 ICg4KSkgPDwgOCkgOiAoKDEgPDwgKDgpKSA+PiA4KSksCiAgX0lTY250cmwgPSAoKDkpIDwgOCA/ ICgoMSA8PCAoOSkpIDw8IDgpIDogKCgxIDw8ICg5KSkgPj4gOCkpLAogIF9JU3B1bmN0ID0gKCgx MCkgPCA4ID8gKCgxIDw8ICgxMCkpIDw8IDgpIDogKCgxIDw8ICgxMCkpID4+IDgpKSwKICBfSVNh bG51bSA9ICgoMTEpIDwgOCA/ICgoMSA8PCAoMTEpKSA8PCA4KSA6ICgoMSA8PCAoMTEpKSA+PiA4 KSkKfTsKIyA4MSAiLi4vY3R5cGUvY3R5cGUuaCIKZXh0ZXJuIF9fY29uc3QgdW5zaWduZWQgc2hv cnQgaW50ICoqX19jdHlwZV9iX2xvYyAodm9pZCkKICAgICBfX2F0dHJpYnV0ZV9fICgoX19jb25z dCkpOwpleHRlcm4gX19jb25zdCBfX2ludDMyX3QgKipfX2N0eXBlX3RvbG93ZXJfbG9jICh2b2lk KQogICAgIF9fYXR0cmlidXRlX18gKChfX2NvbnN0KSk7CmV4dGVybiBfX2NvbnN0IF9faW50MzJf dCAqKl9fY3R5cGVfdG91cHBlcl9sb2MgKHZvaWQpCiAgICAgX19hdHRyaWJ1dGVfXyAoKF9fY29u c3QpKTsKIyA5NiAiLi4vY3R5cGUvY3R5cGUuaCIKCgoKCgoKZXh0ZXJuIGludCBpc2FsbnVtIChp bnQpIDsKZXh0ZXJuIGludCBpc2FscGhhIChpbnQpIDsKZXh0ZXJuIGludCBpc2NudHJsIChpbnQp IDsKZXh0ZXJuIGludCBpc2RpZ2l0IChpbnQpIDsKZXh0ZXJuIGludCBpc2xvd2VyIChpbnQpIDsK ZXh0ZXJuIGludCBpc2dyYXBoIChpbnQpIDsKZXh0ZXJuIGludCBpc3ByaW50IChpbnQpIDsKZXh0 ZXJuIGludCBpc3B1bmN0IChpbnQpIDsKZXh0ZXJuIGludCBpc3NwYWNlIChpbnQpIDsKZXh0ZXJu IGludCBpc3VwcGVyIChpbnQpIDsKZXh0ZXJuIGludCBpc3hkaWdpdCAoaW50KSA7CgoKCmV4dGVy biBpbnQgdG9sb3dlciAoaW50IF9fYykgOwoKCmV4dGVybiBpbnQgdG91cHBlciAoaW50IF9fYykg OwoKCgoKCgoKCmV4dGVybiBpbnQgaXNibGFuayAoaW50KSA7CgoKCgoKCmV4dGVybiBpbnQgaXNj dHlwZSAoaW50IF9fYywgaW50IF9fbWFzaykgOwoKCgoKCgpleHRlcm4gaW50IGlzYXNjaWkgKGlu dCBfX2MpIDsKCgoKZXh0ZXJuIGludCB0b2FzY2lpIChpbnQgX19jKSA7CgoKCmV4dGVybiBpbnQg X3RvdXBwZXIgKGludCkgOwpleHRlcm4gaW50IF90b2xvd2VyIChpbnQpIDsKIyAxOTAgIi4uL2N0 eXBlL2N0eXBlLmgiCmV4dGVybiBfX2lubGluZSBpbnQKdG9sb3dlciAoaW50IF9fYykKewogIHJl dHVybiBfX2MgPj0gLTEyOCAmJiBfX2MgPCAyNTYgPyAoKl9fY3R5cGVfdG9sb3dlcl9sb2MgKCkp W19fY10gOiBfX2M7Cn0KCmV4dGVybiBfX2lubGluZSBpbnQKdG91cHBlciAoaW50IF9fYykKewog IHJldHVybiBfX2MgPj0gLTEyOCAmJiBfX2MgPCAyNTYgPyAoKl9fY3R5cGVfdG91cHBlcl9sb2Mg KCkpW19fY10gOiBfX2M7Cn0KIyAyMzMgIi4uL2N0eXBlL2N0eXBlLmgiCiMgMSAiLi4vaW5jbHVk ZS94bG9jYWxlLmgiIDEKIyAyMzQgIi4uL2N0eXBlL2N0eXBlLmgiIDIKIyAyNDcgIi4uL2N0eXBl L2N0eXBlLmgiCmV4dGVybiBpbnQgaXNhbG51bV9sIChpbnQsIF9fbG9jYWxlX3QpIDsKZXh0ZXJu IGludCBpc2FscGhhX2wgKGludCwgX19sb2NhbGVfdCkgOwpleHRlcm4gaW50IGlzY250cmxfbCAo aW50LCBfX2xvY2FsZV90KSA7CmV4dGVybiBpbnQgaXNkaWdpdF9sIChpbnQsIF9fbG9jYWxlX3Qp IDsKZXh0ZXJuIGludCBpc2xvd2VyX2wgKGludCwgX19sb2NhbGVfdCkgOwpleHRlcm4gaW50IGlz Z3JhcGhfbCAoaW50LCBfX2xvY2FsZV90KSA7CmV4dGVybiBpbnQgaXNwcmludF9sIChpbnQsIF9f bG9jYWxlX3QpIDsKZXh0ZXJuIGludCBpc3B1bmN0X2wgKGludCwgX19sb2NhbGVfdCkgOwpleHRl cm4gaW50IGlzc3BhY2VfbCAoaW50LCBfX2xvY2FsZV90KSA7CmV4dGVybiBpbnQgaXN1cHBlcl9s IChpbnQsIF9fbG9jYWxlX3QpIDsKZXh0ZXJuIGludCBpc3hkaWdpdF9sIChpbnQsIF9fbG9jYWxl X3QpIDsKCmV4dGVybiBpbnQgaXNibGFua19sIChpbnQsIF9fbG9jYWxlX3QpIDsKCgoKZXh0ZXJu IGludCBfX3RvbG93ZXJfbCAoaW50IF9fYywgX19sb2NhbGVfdCBfX2wpIDsKZXh0ZXJuIGludCB0 b2xvd2VyX2wgKGludCBfX2MsIF9fbG9jYWxlX3QgX19sKSA7CgoKZXh0ZXJuIGludCBfX3RvdXBw ZXJfbCAoaW50IF9fYywgX19sb2NhbGVfdCBfX2wpIDsKZXh0ZXJuIGludCB0b3VwcGVyX2wgKGlu dCBfX2MsIF9fbG9jYWxlX3QgX19sKSA7CiMgMzIzICIuLi9jdHlwZS9jdHlwZS5oIgoKIyA1OCAi Li4vaW5jbHVkZS9jdHlwZS5oIiAyCiMgMjAgInZmcHJpbnRmLmMiIDIKIyAxICIuLi9pbmNsdWRl L2xpbWl0cy5oIiAxCiMgMTQ0ICIuLi9pbmNsdWRlL2xpbWl0cy5oIgojIDEgIi4uL2luY2x1ZGUv Yml0cy9wb3NpeDFfbGltLmgiIDEKIyAxNDUgIi4uL2luY2x1ZGUvbGltaXRzLmgiIDIKCgoKIyAx ICIuLi9pbmNsdWRlL2JpdHMvcG9zaXgyX2xpbS5oIiAxCiMgMTQ5ICIuLi9pbmNsdWRlL2xpbWl0 cy5oIiAyCiMgMjEgInZmcHJpbnRmLmMiIDIKIyAxICIuLi9pbmNsdWRlL3ByaW50Zi5oIiAxCgoK IyAxICIuLi9zdGRpby1jb21tb24vcHJpbnRmLmgiIDEKIyAyNCAiLi4vc3RkaW8tY29tbW9uL3By aW50Zi5oIgoKCgojIDEgIi4uL2luY2x1ZGUvc3RkaW8uaCIgMQoKCiMgMSAiLi4vbGliaW8vc3Rk aW8uaCIgMQojIDQ0ICIuLi9saWJpby9zdGRpby5oIgoKCnR5cGVkZWYgc3RydWN0IF9JT19GSUxF IEZJTEU7CgoKCgoKIyA0ICIuLi9pbmNsdWRlL3N0ZGlvLmgiIDIKIyAyOCAiLi4vc3RkaW8tY29t bW9uL3ByaW50Zi5oIiAyCgoKIyAxICIvdXNyL2xpYjY0L2djYy1saWIveDg2XzY0LXN1c2UtbGlu dXgvMy4zL2luY2x1ZGUvc3RkZGVmLmgiIDEgMyA0CiMgMzEgIi4uL3N0ZGlvLWNvbW1vbi9wcmlu dGYuaCIgMgoKCnN0cnVjdCBwcmludGZfaW5mbwp7CiAgaW50IHByZWM7CiAgaW50IHdpZHRoOwog IHdjaGFyX3Qgc3BlYzsKICB1bnNpZ25lZCBpbnQgaXNfbG9uZ19kb3VibGU6MTsKICB1bnNpZ25l ZCBpbnQgaXNfc2hvcnQ6MTsKICB1bnNpZ25lZCBpbnQgaXNfbG9uZzoxOwogIHVuc2lnbmVkIGlu dCBhbHQ6MTsKICB1bnNpZ25lZCBpbnQgc3BhY2U6MTsKICB1bnNpZ25lZCBpbnQgbGVmdDoxOwog IHVuc2lnbmVkIGludCBzaG93c2lnbjoxOwogIHVuc2lnbmVkIGludCBncm91cDoxOwogIHVuc2ln bmVkIGludCBleHRyYToxOwogIHVuc2lnbmVkIGludCBpc19jaGFyOjE7CiAgdW5zaWduZWQgaW50 IHdpZGU6MTsKICB1bnNpZ25lZCBpbnQgaTE4bjoxOwogIHdjaGFyX3QgcGFkOwp9OwojIDY0ICIu Li9zdGRpby1jb21tb24vcHJpbnRmLmgiCnR5cGVkZWYgaW50IHByaW50Zl9mdW5jdGlvbiAoRklM RSAqX19zdHJlYW0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBzdHJ1Y3Qg cHJpbnRmX2luZm8gKl9faW5mbywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0 IHZvaWQgKl9fY29uc3QgKl9fYXJncyk7CgoKCgoKdHlwZWRlZiBpbnQgcHJpbnRmX2FyZ2luZm9f ZnVuY3Rpb24gKF9fY29uc3Qgc3RydWN0IHByaW50Zl9pbmZvICpfX2luZm8sCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19uLCBpbnQgKl9fYXJndHlwZXMpOwoK CgoKCgpleHRlcm4gaW50IHJlZ2lzdGVyX3ByaW50Zl9mdW5jdGlvbiAoaW50IF9fc3BlYywgcHJp bnRmX2Z1bmN0aW9uIF9fZnVuYywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHByaW50Zl9hcmdpbmZvX2Z1bmN0aW9uIF9fYXJnaW5mbyk7CiMgOTUgIi4uL3N0ZGlvLWNvbW1v bi9wcmludGYuaCIKZXh0ZXJuIHNpemVfdCBwYXJzZV9wcmludGZfZm9ybWF0IChfX2NvbnN0IGNo YXIgKl9fcmVzdHJpY3QgX19mbXQsIHNpemVfdCBfX24sCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgaW50ICpfX3Jlc3RyaWN0IF9fYXJndHlwZXMpIDsKCgoKCgoKCmVudW0Kewog IFBBX0lOVCwKICBQQV9DSEFSLAogIFBBX1dDSEFSLAogIFBBX1NUUklORywKICBQQV9XU1RSSU5H LAogIFBBX1BPSU5URVIsCiAgUEFfRkxPQVQsCiAgUEFfRE9VQkxFLAogIFBBX0xBU1QKfTsKIyAx MzMgIi4uL3N0ZGlvLWNvbW1vbi9wcmludGYuaCIKZXh0ZXJuIGludCBwcmludGZfc2l6ZSAoRklM RSAqX19yZXN0cmljdCBfX2ZwLAogICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHN0cnVj dCBwcmludGZfaW5mbyAqX19pbmZvLAogICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHZv aWQgKl9fY29uc3QgKl9fcmVzdHJpY3QgX19hcmdzKSA7CgoKZXh0ZXJuIGludCBwcmludGZfc2l6 ZV9pbmZvIChfX2NvbnN0IHN0cnVjdCBwcmludGZfaW5mbyAqX19yZXN0cmljdAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgIF9faW5mbywgc2l6ZV90IF9fbiwgaW50ICpfX3Jlc3RyaWN0IF9f YXJndHlwZXMpCiAgICAgOwoKCgojIDQgIi4uL2luY2x1ZGUvcHJpbnRmLmgiIDIKCgpleHRlcm4g aW50IF9fcHJpbnRmX2ZwaGV4IChGSUxFICosIGNvbnN0IHN0cnVjdCBwcmludGZfaW5mbyAqLAog ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2b2lkICpjb25zdCAqKTsKZXh0ZXJuIGlu dCBfX3ByaW50Zl9mcCAoRklMRSAqLCBjb25zdCBzdHJ1Y3QgcHJpbnRmX2luZm8gKiwKICAgICAg ICAgICAgICAgICAgICAgICAgY29uc3Qgdm9pZCAqY29uc3QgKik7CmV4dGVybiBfX3R5cGVvZiAo X19wcmludGZfZnApIF9fR0lfX19wcmludGZfZnA7IGV4dGVybiBfX3R5cGVvZiAoX19wcmludGZf ZnApIF9fcHJpbnRmX2ZwIF9fYXNtX18gKCIiICJfX0dJX19fcHJpbnRmX2ZwIikgX19hdHRyaWJ1 dGVfXyAoKHZpc2liaWxpdHkgKCJoaWRkZW4iKSkpOwojIDIyICJ2ZnByaW50Zi5jIiAyCiMgMSAi L3Vzci9saWI2NC9nY2MtbGliL3g4Nl82NC1zdXNlLWxpbnV4LzMuMy9pbmNsdWRlL3N0ZGFyZy5o IiAxIDMgNAojIDQzICIvdXNyL2xpYjY0L2djYy1saWIveDg2XzY0LXN1c2UtbGludXgvMy4zL2lu Y2x1ZGUvc3RkYXJnLmgiIDMgNAp0eXBlZGVmIF9fYnVpbHRpbl92YV9saXN0IF9fZ251Y192YV9s aXN0OwojIDEwNSAiL3Vzci9saWI2NC9nY2MtbGliL3g4Nl82NC1zdXNlLWxpbnV4LzMuMy9pbmNs dWRlL3N0ZGFyZy5oIiAzIDQKdHlwZWRlZiBfX2dudWNfdmFfbGlzdCB2YV9saXN0OwojIDIzICJ2 ZnByaW50Zi5jIiAyCgoKIyAxICIuLi9pbmNsdWRlL3N0cmluZy5oIiAxCgoKIyAxICIuLi9pbmNs dWRlL3N5cy90eXBlcy5oIiAxCiMgNCAiLi4vaW5jbHVkZS9zdHJpbmcuaCIgMgoKZXh0ZXJuIHZv aWQgKl9fbWVtY2NweSAodm9pZCAqX19kZXN0LCBfX2NvbnN0IHZvaWQgKl9fc3JjLAogICAgICAg ICAgICAgICAgICAgICAgICAgIGludCBfX2MsIHNpemVfdCBfX24pOwoKZXh0ZXJuIHNpemVfdCBf X3N0cm5sZW4gKF9fY29uc3QgY2hhciAqX19zdHJpbmcsIHNpemVfdCBfX21heGxlbikKICAgICBf X2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCmV4dGVybiBjaGFyICpfX3N0cnNlcCAoY2hhciAq Kl9fc3RyaW5ncCwgX19jb25zdCBjaGFyICpfX2RlbGltKTsKCmV4dGVybiBpbnQgX19zdHJ2ZXJz Y21wIChfX2NvbnN0IGNoYXIgKl9fczEsIF9fY29uc3QgY2hhciAqX19zMikKICAgICBfX2F0dHJp YnV0ZV9fICgoX19wdXJlX18pKTsKCmV4dGVybiBpbnQgX19zdHJuY2FzZWNtcCAoX19jb25zdCBj aGFyICpfX3MxLCBfX2NvbnN0IGNoYXIgKl9fczIsCiAgICAgICAgICAgICAgICAgICAgICAgICAg c2l6ZV90IF9fbikKICAgICBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCmV4dGVybiBpbnQg X19zdHJjYXNlY21wIChfX2NvbnN0IGNoYXIgKl9fczEsIF9fY29uc3QgY2hhciAqX19zMikKICAg ICBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCmV4dGVybiBjaGFyICpfX3N0cmNhc2VzdHIg KF9fY29uc3QgY2hhciAqX19oYXlzdGFjaywgX19jb25zdCBjaGFyICpfX25lZWRsZSkKICAgICBf X2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCmV4dGVybiBjaGFyICpfX3N0cmR1cCAoX19jb25z dCBjaGFyICpfX3N0cmluZykKICAgICBfX2F0dHJpYnV0ZV9fICgoX19tYWxsb2NfXykpOwpleHRl cm4gY2hhciAqX19zdHJuZHVwIChfX2NvbnN0IGNoYXIgKl9fc3RyaW5nLCBzaXplX3QgX19uKQog ICAgIF9fYXR0cmlidXRlX18gKChfX21hbGxvY19fKSk7CgpleHRlcm4gdm9pZCAqX19yYXdtZW1j aHIgKF9fY29uc3Qgdm9pZCAqX19zLCBpbnQgX19jKQogICAgIF9fYXR0cmlidXRlX18gKChfX3B1 cmVfXykpOwoKZXh0ZXJuIGNoYXIgKl9fc3RyY2hybnVsIChfX2NvbnN0IGNoYXIgKl9fcywgaW50 IF9fYykKICAgICBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCmV4dGVybiB2b2lkICpfX21l bXJjaHIgKF9fY29uc3Qgdm9pZCAqX19zLCBpbnQgX19jLCBzaXplX3QgX19uKQogICAgIF9fYXR0 cmlidXRlX18gKChfX3B1cmVfXykpOwoKZXh0ZXJuIHZvaWQgKl9fbWVtY2hyIChfX2NvbnN0IHZv aWQgKl9fcywgaW50IF9fYywgc2l6ZV90IF9fbikKICAgICBfX2F0dHJpYnV0ZV9fICgoX19wdXJl X18pKTsKCmV4dGVybiBpbnQgX19mZnMgKGludCBfX2kpIF9fYXR0cmlidXRlX18gKChjb25zdCkp OwoKZXh0ZXJuIGNoYXIgKl9fc3RyZXJyb3JfciAoaW50IF9fZXJybnVtLCBjaGFyICpfX2J1Ziwg c2l6ZV90IF9fYnVmbGVuKTsKCgoKIyAxICIuLi9zdHJpbmcvc3RyaW5nLmgiIDEKIyAyOCAiLi4v c3RyaW5nL3N0cmluZy5oIgoKCgoKCiMgMSAiL3Vzci9saWI2NC9nY2MtbGliL3g4Nl82NC1zdXNl LWxpbnV4LzMuMy9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMgNAojIDM0ICIuLi9zdHJpbmcvc3RyaW5n LmgiIDIKCgoKCmV4dGVybiB2b2lkICptZW1jcHkgKHZvaWQgKl9fcmVzdHJpY3QgX19kZXN0LAog ICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHZvaWQgKl9fcmVzdHJpY3QgX19zcmMsIHNpemVf dCBfX24pIDsKCgpleHRlcm4gdm9pZCAqbWVtbW92ZSAodm9pZCAqX19kZXN0LCBfX2NvbnN0IHZv aWQgKl9fc3JjLCBzaXplX3QgX19uKQogICAgIDsKCgoKCgoKZXh0ZXJuIHZvaWQgKm1lbWNjcHkg KHZvaWQgKl9fcmVzdHJpY3QgX19kZXN0LCBfX2NvbnN0IHZvaWQgKl9fcmVzdHJpY3QgX19zcmMs CiAgICAgICAgICAgICAgICAgICAgICBpbnQgX19jLCBzaXplX3QgX19uKQogICAgIDsKCgoKCgpl eHRlcm4gdm9pZCAqbWVtc2V0ICh2b2lkICpfX3MsIGludCBfX2MsIHNpemVfdCBfX24pIDsKCgpl eHRlcm4gaW50IG1lbWNtcCAoX19jb25zdCB2b2lkICpfX3MxLCBfX2NvbnN0IHZvaWQgKl9fczIs IHNpemVfdCBfX24pCiAgICAgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKZXh0ZXJuIHZv aWQgKm1lbWNociAoX19jb25zdCB2b2lkICpfX3MsIGludCBfX2MsIHNpemVfdCBfX24pCiAgICAg IF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCgoKCmV4dGVybiB2b2lkICpyYXdtZW1jaHIg KF9fY29uc3Qgdm9pZCAqX19zLCBpbnQgX19jKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsK CgpleHRlcm4gdm9pZCAqbWVtcmNociAoX19jb25zdCB2b2lkICpfX3MsIGludCBfX2MsIHNpemVf dCBfX24pCiAgICAgIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCgoKCmV4dGVybiBjaGFy ICpzdHJjcHkgKGNoYXIgKl9fcmVzdHJpY3QgX19kZXN0LCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJp Y3QgX19zcmMpCiAgICAgOwoKZXh0ZXJuIGNoYXIgKnN0cm5jcHkgKGNoYXIgKl9fcmVzdHJpY3Qg X19kZXN0LAogICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9f c3JjLCBzaXplX3QgX19uKSA7CgoKZXh0ZXJuIGNoYXIgKnN0cmNhdCAoY2hhciAqX19yZXN0cmlj dCBfX2Rlc3QsIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX3NyYykKICAgICA7CgpleHRlcm4g Y2hhciAqc3RybmNhdCAoY2hhciAqX19yZXN0cmljdCBfX2Rlc3QsIF9fY29uc3QgY2hhciAqX19y ZXN0cmljdCBfX3NyYywKICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX24pIDsKCgpleHRl cm4gaW50IHN0cmNtcCAoX19jb25zdCBjaGFyICpfX3MxLCBfX2NvbnN0IGNoYXIgKl9fczIpCiAg ICAgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgpleHRlcm4gaW50IHN0cm5jbXAgKF9fY29u c3QgY2hhciAqX19zMSwgX19jb25zdCBjaGFyICpfX3MyLCBzaXplX3QgX19uKQogICAgIF9fYXR0 cmlidXRlX18gKChfX3B1cmVfXykpOwoKCmV4dGVybiBpbnQgc3RyY29sbCAoX19jb25zdCBjaGFy ICpfX3MxLCBfX2NvbnN0IGNoYXIgKl9fczIpCiAgICAgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9f KSk7CgpleHRlcm4gc2l6ZV90IHN0cnhmcm0gKGNoYXIgKl9fcmVzdHJpY3QgX19kZXN0LAogICAg ICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX3NyYywgc2l6ZV90 IF9fbikgOwoKCgoKCgojIDEgIi4uL2luY2x1ZGUveGxvY2FsZS5oIiAxCiMgMTE1ICIuLi9zdHJp bmcvc3RyaW5nLmgiIDIKCgpleHRlcm4gaW50IHN0cmNvbGxfbCAoX19jb25zdCBjaGFyICpfX3Mx LCBfX2NvbnN0IGNoYXIgKl9fczIsIF9fbG9jYWxlX3QgX19sKQogICAgIF9fYXR0cmlidXRlX18g KChfX3B1cmVfXykpOwoKZXh0ZXJuIHNpemVfdCBzdHJ4ZnJtX2wgKGNoYXIgKl9fZGVzdCwgX19j b25zdCBjaGFyICpfX3NyYywgc2l6ZV90IF9fbiwKICAgICAgICAgICAgICAgICAgICAgICAgIF9f bG9jYWxlX3QgX19sKSA7CgoKCgpleHRlcm4gY2hhciAqc3RyZHVwIChfX2NvbnN0IGNoYXIgKl9f cykgX19hdHRyaWJ1dGVfXyAoKF9fbWFsbG9jX18pKTsKCgoKCgoKZXh0ZXJuIGNoYXIgKnN0cm5k dXAgKF9fY29uc3QgY2hhciAqX19zdHJpbmcsIHNpemVfdCBfX24pCiAgICAgX19hdHRyaWJ1dGVf XyAoKF9fbWFsbG9jX18pKTsKIyAxNjAgIi4uL3N0cmluZy9zdHJpbmcuaCIKCgpleHRlcm4gY2hh ciAqc3RyY2hyIChfX2NvbnN0IGNoYXIgKl9fcywgaW50IF9fYykgX19hdHRyaWJ1dGVfXyAoKF9f cHVyZV9fKSk7CgpleHRlcm4gY2hhciAqc3RycmNociAoX19jb25zdCBjaGFyICpfX3MsIGludCBf X2MpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCgoKCmV4dGVybiBjaGFyICpzdHJjaHJu dWwgKF9fY29uc3QgY2hhciAqX19zLCBpbnQgX19jKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18p KTsKCgoKCgpleHRlcm4gc2l6ZV90IHN0cmNzcG4gKF9fY29uc3QgY2hhciAqX19zLCBfX2NvbnN0 IGNoYXIgKl9fcmVqZWN0KQogICAgIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCmV4dGVy biBzaXplX3Qgc3Ryc3BuIChfX2NvbnN0IGNoYXIgKl9fcywgX19jb25zdCBjaGFyICpfX2FjY2Vw dCkKICAgICBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCmV4dGVybiBjaGFyICpzdHJwYnJr IChfX2NvbnN0IGNoYXIgKl9fcywgX19jb25zdCBjaGFyICpfX2FjY2VwdCkKICAgICBfX2F0dHJp YnV0ZV9fICgoX19wdXJlX18pKTsKCmV4dGVybiBjaGFyICpzdHJzdHIgKF9fY29uc3QgY2hhciAq X19oYXlzdGFjaywgX19jb25zdCBjaGFyICpfX25lZWRsZSkKICAgICBfX2F0dHJpYnV0ZV9fICgo X19wdXJlX18pKTsKCgoKZXh0ZXJuIGNoYXIgKnN0cnRvayAoY2hhciAqX19yZXN0cmljdCBfX3Ms IF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2RlbGltKQogICAgIDsKCgoKCmV4dGVybiBjaGFy ICpfX3N0cnRva19yIChjaGFyICpfX3Jlc3RyaWN0IF9fcywKICAgICAgICAgICAgICAgICAgICAg ICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2RlbGltLAogICAgICAgICAgICAgICAgICAg ICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19zYXZlX3B0cikgOwoKZXh0ZXJuIGNoYXIgKnN0cnRv a19yIChjaGFyICpfX3Jlc3RyaWN0IF9fcywgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZGVs aW0sCiAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19zYXZlX3B0cikg OwoKCgoKZXh0ZXJuIGNoYXIgKnN0cmNhc2VzdHIgKF9fY29uc3QgY2hhciAqX19oYXlzdGFjaywg X19jb25zdCBjaGFyICpfX25lZWRsZSkKICAgICBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsK CgoKCgoKZXh0ZXJuIHZvaWQgKm1lbW1lbSAoX19jb25zdCB2b2lkICpfX2hheXN0YWNrLCBzaXpl X3QgX19oYXlzdGFja2xlbiwKICAgICAgICAgICAgICAgICAgICAgX19jb25zdCB2b2lkICpfX25l ZWRsZSwgc2l6ZV90IF9fbmVlZGxlbGVuKQogICAgIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykp OwoKCgpleHRlcm4gdm9pZCAqX19tZW1wY3B5ICh2b2lkICpfX3Jlc3RyaWN0IF9fZGVzdCwKICAg ICAgICAgICAgICAgICAgICAgICAgX19jb25zdCB2b2lkICpfX3Jlc3RyaWN0IF9fc3JjLCBzaXpl X3QgX19uKSA7CmV4dGVybiB2b2lkICptZW1wY3B5ICh2b2lkICpfX3Jlc3RyaWN0IF9fZGVzdCwK ICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgdm9pZCAqX19yZXN0cmljdCBfX3NyYywgc2l6 ZV90IF9fbikgOwoKCgoKCmV4dGVybiBzaXplX3Qgc3RybGVuIChfX2NvbnN0IGNoYXIgKl9fcykg X19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKCgoKZXh0ZXJuIHNpemVfdCBzdHJubGVuIChf X2NvbnN0IGNoYXIgKl9fc3RyaW5nLCBzaXplX3QgX19tYXhsZW4pCiAgICAgX19hdHRyaWJ1dGVf XyAoKF9fcHVyZV9fKSk7CgoKCgoKZXh0ZXJuIGNoYXIgKnN0cmVycm9yIChpbnQgX19lcnJudW0p IDsKCgoKCmV4dGVybiBjaGFyICpzdHJlcnJvcl9yIChpbnQgX19lcnJudW0sIGNoYXIgKl9fYnVm LCBzaXplX3QgX19idWZsZW4pIDsKCgoKCmV4dGVybiB2b2lkIF9fYnplcm8gKHZvaWQgKl9fcywg c2l6ZV90IF9fbikgOwoKCgpleHRlcm4gdm9pZCBiY29weSAoX19jb25zdCB2b2lkICpfX3NyYywg dm9pZCAqX19kZXN0LCBzaXplX3QgX19uKSA7CgoKZXh0ZXJuIHZvaWQgYnplcm8gKHZvaWQgKl9f cywgc2l6ZV90IF9fbikgOwoKCmV4dGVybiBpbnQgYmNtcCAoX19jb25zdCB2b2lkICpfX3MxLCBf X2NvbnN0IHZvaWQgKl9fczIsIHNpemVfdCBfX24pCiAgICAgX19hdHRyaWJ1dGVfXyAoKF9fcHVy ZV9fKSk7CgoKZXh0ZXJuIGNoYXIgKmluZGV4IChfX2NvbnN0IGNoYXIgKl9fcywgaW50IF9fYykg X19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKZXh0ZXJuIGNoYXIgKnJpbmRleCAoX19jb25z dCBjaGFyICpfX3MsIGludCBfX2MpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCgpleHRl cm4gaW50IGZmcyAoaW50IF9faSkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCgoKZXh0 ZXJuIGludCBmZnNsIChsb25nIGludCBfX2wpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsK Cl9fZXh0ZW5zaW9uX18gZXh0ZXJuIGludCBmZnNsbCAobG9uZyBsb25nIGludCBfX2xsKQogICAg IF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgoKCmV4dGVybiBpbnQgc3RyY2FzZWNtcCAo X19jb25zdCBjaGFyICpfX3MxLCBfX2NvbnN0IGNoYXIgKl9fczIpCiAgICAgX19hdHRyaWJ1dGVf XyAoKF9fcHVyZV9fKSk7CgoKZXh0ZXJuIGludCBzdHJuY2FzZWNtcCAoX19jb25zdCBjaGFyICpf X3MxLCBfX2NvbnN0IGNoYXIgKl9fczIsIHNpemVfdCBfX24pCiAgICAgX19hdHRyaWJ1dGVfXyAo KF9fcHVyZV9fKSk7CgoKCgoKZXh0ZXJuIGludCBzdHJjYXNlY21wX2wgKF9fY29uc3QgY2hhciAq X19zMSwgX19jb25zdCBjaGFyICpfX3MyLAogICAgICAgICAgICAgICAgICAgICAgICAgX19sb2Nh bGVfdCBfX2xvYykgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgpleHRlcm4gaW50IHN0cm5j YXNlY21wX2wgKF9fY29uc3QgY2hhciAqX19zMSwgX19jb25zdCBjaGFyICpfX3MyLAogICAgICAg ICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX24sIF9fbG9jYWxlX3QgX19sb2MpCiAgICAgX19h dHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKCgoKZXh0ZXJuIGNoYXIgKnN0cnNlcCAoY2hhciAq Kl9fcmVzdHJpY3QgX19zdHJpbmdwLAogICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIg Kl9fcmVzdHJpY3QgX19kZWxpbSkgOwoKCgoKZXh0ZXJuIGludCBzdHJ2ZXJzY21wIChfX2NvbnN0 IGNoYXIgKl9fczEsIF9fY29uc3QgY2hhciAqX19zMikKICAgICBfX2F0dHJpYnV0ZV9fICgoX19w dXJlX18pKTsKCgpleHRlcm4gY2hhciAqc3Ryc2lnbmFsIChpbnQgX19zaWcpIDsKCgpleHRlcm4g Y2hhciAqX19zdHBjcHkgKGNoYXIgKl9fcmVzdHJpY3QgX19kZXN0LCBfX2NvbnN0IGNoYXIgKl9f cmVzdHJpY3QgX19zcmMpCiAgICAgOwpleHRlcm4gY2hhciAqc3RwY3B5IChjaGFyICpfX3Jlc3Ry aWN0IF9fZGVzdCwgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fc3JjKQogICAgIDsKCgoKZXh0 ZXJuIGNoYXIgKl9fc3RwbmNweSAoY2hhciAqX19yZXN0cmljdCBfX2Rlc3QsCiAgICAgICAgICAg ICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX3NyYywgc2l6ZV90IF9fbikg OwpleHRlcm4gY2hhciAqc3RwbmNweSAoY2hhciAqX19yZXN0cmljdCBfX2Rlc3QsCiAgICAgICAg ICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zcmMsIHNpemVfdCBfX24p IDsKCgpleHRlcm4gY2hhciAqc3RyZnJ5IChjaGFyICpfX3N0cmluZykgOwoKCmV4dGVybiB2b2lk ICptZW1mcm9iICh2b2lkICpfX3MsIHNpemVfdCBfX24pIDsKCgoKCgoKZXh0ZXJuIGNoYXIgKmJh c2VuYW1lIChfX2NvbnN0IGNoYXIgKl9fZmlsZW5hbWUpIDsKIyAzNzIgIi4uL3N0cmluZy9zdHJp bmcuaCIKIyAxICIuLi9zeXNkZXBzL3g4Nl82NC9iaXRzL3N0cmluZy5oIiAxCiMgMzczICIuLi9z dHJpbmcvc3RyaW5nLmgiIDIKCgojIDEgIi4uL2luY2x1ZGUvYml0cy9zdHJpbmcyLmgiIDEKIyAx ICIuLi9zdHJpbmcvYml0cy9zdHJpbmcyLmgiIDEKIyA1MiAiLi4vc3RyaW5nL2JpdHMvc3RyaW5n Mi5oIgojIDEgIi4uL2luY2x1ZGUvZW5kaWFuLmgiIDEKIyA1MyAiLi4vc3RyaW5nL2JpdHMvc3Ry aW5nMi5oIiAyCiMgMzg5ICIuLi9zdHJpbmcvYml0cy9zdHJpbmcyLmgiCmV4dGVybiB2b2lkICpf X3Jhd21lbWNociAoY29uc3Qgdm9pZCAqX19zLCBpbnQgX19jKTsKIyA5MTkgIi4uL3N0cmluZy9i aXRzL3N0cmluZzIuaCIKZXh0ZXJuIF9faW5saW5lIHNpemVfdCBfX3N0cmNzcG5fYzEgKF9fY29u c3QgY2hhciAqX19zLCBpbnQgX19yZWplY3QpOwpleHRlcm4gX19pbmxpbmUgc2l6ZV90Cl9fc3Ry Y3Nwbl9jMSAoX19jb25zdCBjaGFyICpfX3MsIGludCBfX3JlamVjdCkKewogIHJlZ2lzdGVyIHNp emVfdCBfX3Jlc3VsdCA9IDA7CiAgd2hpbGUgKF9fc1tfX3Jlc3VsdF0gIT0gJ1wwJyAmJiBfX3Nb X19yZXN1bHRdICE9IF9fcmVqZWN0KQogICAgKytfX3Jlc3VsdDsKICByZXR1cm4gX19yZXN1bHQ7 Cn0KCmV4dGVybiBfX2lubGluZSBzaXplX3QgX19zdHJjc3BuX2MyIChfX2NvbnN0IGNoYXIgKl9f cywgaW50IF9fcmVqZWN0MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlu dCBfX3JlamVjdDIpOwpleHRlcm4gX19pbmxpbmUgc2l6ZV90Cl9fc3RyY3Nwbl9jMiAoX19jb25z dCBjaGFyICpfX3MsIGludCBfX3JlamVjdDEsIGludCBfX3JlamVjdDIpCnsKICByZWdpc3RlciBz aXplX3QgX19yZXN1bHQgPSAwOwogIHdoaWxlIChfX3NbX19yZXN1bHRdICE9ICdcMCcgJiYgX19z W19fcmVzdWx0XSAhPSBfX3JlamVjdDEKICAgICAgICAgJiYgX19zW19fcmVzdWx0XSAhPSBfX3Jl amVjdDIpCiAgICArK19fcmVzdWx0OwogIHJldHVybiBfX3Jlc3VsdDsKfQoKZXh0ZXJuIF9faW5s aW5lIHNpemVfdCBfX3N0cmNzcG5fYzMgKF9fY29uc3QgY2hhciAqX19zLCBpbnQgX19yZWplY3Qx LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9fcmVqZWN0MiwgaW50 IF9fcmVqZWN0Myk7CmV4dGVybiBfX2lubGluZSBzaXplX3QKX19zdHJjc3BuX2MzIChfX2NvbnN0 IGNoYXIgKl9fcywgaW50IF9fcmVqZWN0MSwgaW50IF9fcmVqZWN0MiwKICAgICAgICAgICAgICBp bnQgX19yZWplY3QzKQp7CiAgcmVnaXN0ZXIgc2l6ZV90IF9fcmVzdWx0ID0gMDsKICB3aGlsZSAo X19zW19fcmVzdWx0XSAhPSAnXDAnICYmIF9fc1tfX3Jlc3VsdF0gIT0gX19yZWplY3QxCiAgICAg ICAgICYmIF9fc1tfX3Jlc3VsdF0gIT0gX19yZWplY3QyICYmIF9fc1tfX3Jlc3VsdF0gIT0gX19y ZWplY3QzKQogICAgKytfX3Jlc3VsdDsKICByZXR1cm4gX19yZXN1bHQ7Cn0KIyA5NzYgIi4uL3N0 cmluZy9iaXRzL3N0cmluZzIuaCIKZXh0ZXJuIF9faW5saW5lIHNpemVfdCBfX3N0cnNwbl9jMSAo X19jb25zdCBjaGFyICpfX3MsIGludCBfX2FjY2VwdCk7CmV4dGVybiBfX2lubGluZSBzaXplX3QK X19zdHJzcG5fYzEgKF9fY29uc3QgY2hhciAqX19zLCBpbnQgX19hY2NlcHQpCnsKICByZWdpc3Rl ciBzaXplX3QgX19yZXN1bHQgPSAwOwoKICB3aGlsZSAoX19zW19fcmVzdWx0XSA9PSBfX2FjY2Vw dCkKICAgICsrX19yZXN1bHQ7CiAgcmV0dXJuIF9fcmVzdWx0Owp9CgpleHRlcm4gX19pbmxpbmUg c2l6ZV90IF9fc3Ryc3BuX2MyIChfX2NvbnN0IGNoYXIgKl9fcywgaW50IF9fYWNjZXB0MSwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9fYWNjZXB0Mik7CmV4dGVybiBf X2lubGluZSBzaXplX3QKX19zdHJzcG5fYzIgKF9fY29uc3QgY2hhciAqX19zLCBpbnQgX19hY2Nl cHQxLCBpbnQgX19hY2NlcHQyKQp7CiAgcmVnaXN0ZXIgc2l6ZV90IF9fcmVzdWx0ID0gMDsKCiAg d2hpbGUgKF9fc1tfX3Jlc3VsdF0gPT0gX19hY2NlcHQxIHx8IF9fc1tfX3Jlc3VsdF0gPT0gX19h Y2NlcHQyKQogICAgKytfX3Jlc3VsdDsKICByZXR1cm4gX19yZXN1bHQ7Cn0KCmV4dGVybiBfX2lu bGluZSBzaXplX3QgX19zdHJzcG5fYzMgKF9fY29uc3QgY2hhciAqX19zLCBpbnQgX19hY2NlcHQx LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19hY2NlcHQyLCBpbnQg X19hY2NlcHQzKTsKZXh0ZXJuIF9faW5saW5lIHNpemVfdApfX3N0cnNwbl9jMyAoX19jb25zdCBj aGFyICpfX3MsIGludCBfX2FjY2VwdDEsIGludCBfX2FjY2VwdDIsIGludCBfX2FjY2VwdDMpCnsK ICByZWdpc3RlciBzaXplX3QgX19yZXN1bHQgPSAwOwoKICB3aGlsZSAoX19zW19fcmVzdWx0XSA9 PSBfX2FjY2VwdDEgfHwgX19zW19fcmVzdWx0XSA9PSBfX2FjY2VwdDIKICAgICAgICAgfHwgX19z W19fcmVzdWx0XSA9PSBfX2FjY2VwdDMpCiAgICArK19fcmVzdWx0OwogIHJldHVybiBfX3Jlc3Vs dDsKfQojIDEwMzMgIi4uL3N0cmluZy9iaXRzL3N0cmluZzIuaCIKZXh0ZXJuIF9faW5saW5lIGNo YXIgKl9fc3RycGJya19jMiAoX19jb25zdCBjaGFyICpfX3MsIGludCBfX2FjY2VwdDEsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19hY2NlcHQyKTsKZXh0ZXJuIF9f aW5saW5lIGNoYXIgKgpfX3N0cnBicmtfYzIgKF9fY29uc3QgY2hhciAqX19zLCBpbnQgX19hY2Nl cHQxLCBpbnQgX19hY2NlcHQyKQp7CgogIHdoaWxlICgqX19zICE9ICdcMCcgJiYgKl9fcyAhPSBf X2FjY2VwdDEgJiYgKl9fcyAhPSBfX2FjY2VwdDIpCiAgICArK19fczsKICByZXR1cm4gKl9fcyA9 PSAnXDAnID8gKCh2b2lkICopMCkgOiAoY2hhciAqKSAoc2l6ZV90KSBfX3M7Cn0KCmV4dGVybiBf X2lubGluZSBjaGFyICpfX3N0cnBicmtfYzMgKF9fY29uc3QgY2hhciAqX19zLCBpbnQgX19hY2Nl cHQxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9fYWNjZXB0Miwg aW50IF9fYWNjZXB0Myk7CmV4dGVybiBfX2lubGluZSBjaGFyICoKX19zdHJwYnJrX2MzIChfX2Nv bnN0IGNoYXIgKl9fcywgaW50IF9fYWNjZXB0MSwgaW50IF9fYWNjZXB0MiwKICAgICAgICAgICAg ICBpbnQgX19hY2NlcHQzKQp7CgogIHdoaWxlICgqX19zICE9ICdcMCcgJiYgKl9fcyAhPSBfX2Fj Y2VwdDEgJiYgKl9fcyAhPSBfX2FjY2VwdDIKICAgICAgICAgJiYgKl9fcyAhPSBfX2FjY2VwdDMp CiAgICArK19fczsKICByZXR1cm4gKl9fcyA9PSAnXDAnID8gKCh2b2lkICopMCkgOiAoY2hhciAq KSAoc2l6ZV90KSBfX3M7Cn0KIyAxMDg1ICIuLi9zdHJpbmcvYml0cy9zdHJpbmcyLmgiCmV4dGVy biBfX2lubGluZSBjaGFyICpfX3N0cnRva19yXzFjIChjaGFyICpfX3MsIGNoYXIgX19zZXAsIGNo YXIgKipfX25leHRwKTsKZXh0ZXJuIF9faW5saW5lIGNoYXIgKgpfX3N0cnRva19yXzFjIChjaGFy ICpfX3MsIGNoYXIgX19zZXAsIGNoYXIgKipfX25leHRwKQp7CiAgY2hhciAqX19yZXN1bHQ7CiAg aWYgKF9fcyA9PSAoKHZvaWQgKikwKSkKICAgIF9fcyA9ICpfX25leHRwOwogIHdoaWxlICgqX19z ID09IF9fc2VwKQogICAgKytfX3M7CiAgX19yZXN1bHQgPSAoKHZvaWQgKikwKTsKICBpZiAoKl9f cyAhPSAnXDAnKQogICAgewogICAgICBfX3Jlc3VsdCA9IF9fcysrOwogICAgICB3aGlsZSAoKl9f cyAhPSAnXDAnKQogICAgICAgIGlmICgqX19zKysgPT0gX19zZXApCiAgICAgICAgICB7CiAgICAg ICAgICAgIF9fc1stMV0gPSAnXDAnOwogICAgICAgICAgICBicmVhazsKICAgICAgICAgIH0KICAg ICAgKl9fbmV4dHAgPSBfX3M7CiAgICB9CiAgcmV0dXJuIF9fcmVzdWx0Owp9CiMgMTExNyAiLi4v c3RyaW5nL2JpdHMvc3RyaW5nMi5oIgpleHRlcm4gY2hhciAqX19zdHJzZXBfZyAoY2hhciAqKl9f c3RyaW5ncCwgX19jb25zdCBjaGFyICpfX2RlbGltKTsKIyAxMTM1ICIuLi9zdHJpbmcvYml0cy9z dHJpbmcyLmgiCmV4dGVybiBfX2lubGluZSBjaGFyICpfX3N0cnNlcF8xYyAoY2hhciAqKl9fcywg Y2hhciBfX3JlamVjdCk7CmV4dGVybiBfX2lubGluZSBjaGFyICoKX19zdHJzZXBfMWMgKGNoYXIg KipfX3MsIGNoYXIgX19yZWplY3QpCnsKICByZWdpc3RlciBjaGFyICpfX3JldHZhbCA9ICpfX3M7 CiAgaWYgKF9fcmV0dmFsICE9ICgodm9pZCAqKTApICYmICgqX19zID0gKF9fZXh0ZW5zaW9uX18g KF9fYnVpbHRpbl9jb25zdGFudF9wIChfX3JlamVjdCkgJiYgKF9fcmVqZWN0KSA9PSAnXDAnID8g KGNoYXIgKikgX19yYXdtZW1jaHIgKF9fcmV0dmFsLCBfX3JlamVjdCkgOiBzdHJjaHIgKF9fcmV0 dmFsLCBfX3JlamVjdCkpKSkgIT0gKCh2b2lkICopMCkpCiAgICAqKCpfX3MpKysgPSAnXDAnOwog IHJldHVybiBfX3JldHZhbDsKfQoKZXh0ZXJuIF9faW5saW5lIGNoYXIgKl9fc3Ryc2VwXzJjIChj aGFyICoqX19zLCBjaGFyIF9fcmVqZWN0MSwgY2hhciBfX3JlamVjdDIpOwpleHRlcm4gX19pbmxp bmUgY2hhciAqCl9fc3Ryc2VwXzJjIChjaGFyICoqX19zLCBjaGFyIF9fcmVqZWN0MSwgY2hhciBf X3JlamVjdDIpCnsKICByZWdpc3RlciBjaGFyICpfX3JldHZhbCA9ICpfX3M7CiAgaWYgKF9fcmV0 dmFsICE9ICgodm9pZCAqKTApKQogICAgewogICAgICByZWdpc3RlciBjaGFyICpfX2NwID0gX19y ZXR2YWw7CiAgICAgIHdoaWxlICgxKQogICAgICAgIHsKICAgICAgICAgIGlmICgqX19jcCA9PSAn XDAnKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgX19jcCA9ICgodm9pZCAqKTApOwogICAg ICAgICAgYnJlYWs7CiAgICAgICAgICAgIH0KICAgICAgICAgIGlmICgqX19jcCA9PSBfX3JlamVj dDEgfHwgKl9fY3AgPT0gX19yZWplY3QyKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgKl9f Y3ArKyA9ICdcMCc7CiAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIH0KICAgICAgICAg ICsrX19jcDsKICAgICAgICB9CiAgICAgICpfX3MgPSBfX2NwOwogICAgfQogIHJldHVybiBfX3Jl dHZhbDsKfQoKZXh0ZXJuIF9faW5saW5lIGNoYXIgKl9fc3Ryc2VwXzNjIChjaGFyICoqX19zLCBj aGFyIF9fcmVqZWN0MSwgY2hhciBfX3JlamVjdDIsCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgY2hhciBfX3JlamVjdDMpOwpleHRlcm4gX19pbmxpbmUgY2hhciAqCl9fc3Ryc2Vw XzNjIChjaGFyICoqX19zLCBjaGFyIF9fcmVqZWN0MSwgY2hhciBfX3JlamVjdDIsIGNoYXIgX19y ZWplY3QzKQp7CiAgcmVnaXN0ZXIgY2hhciAqX19yZXR2YWwgPSAqX19zOwogIGlmIChfX3JldHZh bCAhPSAoKHZvaWQgKikwKSkKICAgIHsKICAgICAgcmVnaXN0ZXIgY2hhciAqX19jcCA9IF9fcmV0 dmFsOwogICAgICB3aGlsZSAoMSkKICAgICAgICB7CiAgICAgICAgICBpZiAoKl9fY3AgPT0gJ1ww JykKICAgICAgICAgICAgewogICAgICAgICAgICAgIF9fY3AgPSAoKHZvaWQgKikwKTsKICAgICAg ICAgIGJyZWFrOwogICAgICAgICAgICB9CiAgICAgICAgICBpZiAoKl9fY3AgPT0gX19yZWplY3Qx IHx8ICpfX2NwID09IF9fcmVqZWN0MiB8fCAqX19jcCA9PSBfX3JlamVjdDMpCiAgICAgICAgICAg IHsKICAgICAgICAgICAgICAqX19jcCsrID0gJ1wwJzsKICAgICAgICAgICAgICBicmVhazsKICAg ICAgICAgICAgfQogICAgICAgICAgKytfX2NwOwogICAgICAgIH0KICAgICAgKl9fcyA9IF9fY3A7 CiAgICB9CiAgcmV0dXJuIF9fcmV0dmFsOwp9CiMgMTIxNiAiLi4vc3RyaW5nL2JpdHMvc3RyaW5n Mi5oIgpleHRlcm4gY2hhciAqX19zdHJkdXAgKF9fY29uc3QgY2hhciAqX19zdHJpbmcpIF9fYXR0 cmlidXRlX18gKChfX21hbGxvY19fKSk7CiMgMTIzNSAiLi4vc3RyaW5nL2JpdHMvc3RyaW5nMi5o IgpleHRlcm4gY2hhciAqX19zdHJuZHVwIChfX2NvbnN0IGNoYXIgKl9fc3RyaW5nLCBzaXplX3Qg X19uKQogICAgIF9fYXR0cmlidXRlX18gKChfX21hbGxvY19fKSk7CiMgMiAiLi4vaW5jbHVkZS9i aXRzL3N0cmluZzIuaCIgMgojIDM3NiAiLi4vc3RyaW5nL3N0cmluZy5oIiAyCgoKCgojIDUwICIu Li9pbmNsdWRlL3N0cmluZy5oIiAyCgpleHRlcm4gX190eXBlb2YgKHN0cmNvbGxfbCkgX19zdHJj b2xsX2w7CmV4dGVybiBfX3R5cGVvZiAoc3RyeGZybV9sKSBfX3N0cnhmcm1fbDsKZXh0ZXJuIF9f dHlwZW9mIChzdHJjYXNlY21wX2wpIF9fc3RyY2FzZWNtcF9sOwpleHRlcm4gX190eXBlb2YgKHN0 cm5jYXNlY21wX2wpIF9fc3RybmNhc2VjbXBfbDsKIyA2OCAiLi4vaW5jbHVkZS9zdHJpbmcuaCIK ZXh0ZXJuIF9fdHlwZW9mIChfX21lbXBjcHkpIF9fR0lfX19tZW1wY3B5OyBleHRlcm4gX190eXBl b2YgKF9fbWVtcGNweSkgX19tZW1wY3B5IF9fYXNtX18gKCIiICJfX0dJX19fbWVtcGNweSIpIF9f YXR0cmlidXRlX18gKCh2aXNpYmlsaXR5ICgiaGlkZGVuIikpKTsKZXh0ZXJuIF9fdHlwZW9mIChf X3N0cGNweSkgX19HSV9fX3N0cGNweTsgZXh0ZXJuIF9fdHlwZW9mIChfX3N0cGNweSkgX19zdHBj cHkgX19hc21fXyAoIiIgIl9fR0lfX19zdHBjcHkiKSBfX2F0dHJpYnV0ZV9fICgodmlzaWJpbGl0 eSAoImhpZGRlbiIpKSk7CmV4dGVybiBfX3R5cGVvZiAoX19zdHBuY3B5KSBfX0dJX19fc3RwbmNw eTsgZXh0ZXJuIF9fdHlwZW9mIChfX3N0cG5jcHkpIF9fc3RwbmNweSBfX2FzbV9fICgiIiAiX19H SV9fX3N0cG5jcHkiKSBfX2F0dHJpYnV0ZV9fICgodmlzaWJpbGl0eSAoImhpZGRlbiIpKSk7CmV4 dGVybiBfX3R5cGVvZiAoX19yYXdtZW1jaHIpIF9fR0lfX19yYXdtZW1jaHI7IGV4dGVybiBfX3R5 cGVvZiAoX19yYXdtZW1jaHIpIF9fcmF3bWVtY2hyIF9fYXNtX18gKCIiICJfX0dJX19fcmF3bWVt Y2hyIikgX19hdHRyaWJ1dGVfXyAoKHZpc2liaWxpdHkgKCJoaWRkZW4iKSkpOwpleHRlcm4gX190 eXBlb2YgKF9fc3RyY2FzZWNtcCkgX19HSV9fX3N0cmNhc2VjbXA7IGV4dGVybiBfX3R5cGVvZiAo X19zdHJjYXNlY21wKSBfX3N0cmNhc2VjbXAgX19hc21fXyAoIiIgIl9fR0lfX19zdHJjYXNlY21w IikgX19hdHRyaWJ1dGVfXyAoKHZpc2liaWxpdHkgKCJoaWRkZW4iKSkpOwpleHRlcm4gX190eXBl b2YgKF9fc3RyY2FzZWNtcF9sKSBfX0dJX19fc3RyY2FzZWNtcF9sOyBleHRlcm4gX190eXBlb2Yg KF9fc3RyY2FzZWNtcF9sKSBfX3N0cmNhc2VjbXBfbCBfX2FzbV9fICgiIiAiX19HSV9fX3N0cmNh c2VjbXBfbCIpIF9fYXR0cmlidXRlX18gKCh2aXNpYmlsaXR5ICgiaGlkZGVuIikpKTsKZXh0ZXJu IF9fdHlwZW9mIChfX3N0cm5jYXNlY21wX2wpIF9fR0lfX19zdHJuY2FzZWNtcF9sOyBleHRlcm4g X190eXBlb2YgKF9fc3RybmNhc2VjbXBfbCkgX19zdHJuY2FzZWNtcF9sIF9fYXNtX18gKCIiICJf X0dJX19fc3RybmNhc2VjbXBfbCIpIF9fYXR0cmlidXRlX18gKCh2aXNpYmlsaXR5ICgiaGlkZGVu IikpKTsKZXh0ZXJuIF9fdHlwZW9mIChfX3N0cmR1cCkgX19HSV9fX3N0cmR1cDsgZXh0ZXJuIF9f dHlwZW9mIChfX3N0cmR1cCkgX19zdHJkdXAgX19hc21fXyAoIiIgIl9fR0lfX19zdHJkdXAiKSBf X2F0dHJpYnV0ZV9fICgodmlzaWJpbGl0eSAoImhpZGRlbiIpKSk7CmV4dGVybiBfX3R5cGVvZiAo X19zdHJuZHVwKSBfX0dJX19fc3RybmR1cDsgZXh0ZXJuIF9fdHlwZW9mIChfX3N0cm5kdXApIF9f c3RybmR1cCBfX2FzbV9fICgiIiAiX19HSV9fX3N0cm5kdXAiKSBfX2F0dHJpYnV0ZV9fICgodmlz aWJpbGl0eSAoImhpZGRlbiIpKSk7CmV4dGVybiBfX3R5cGVvZiAoX19zdHJlcnJvcl9yKSBfX0dJ X19fc3RyZXJyb3JfcjsgZXh0ZXJuIF9fdHlwZW9mIChfX3N0cmVycm9yX3IpIF9fc3RyZXJyb3Jf ciBfX2FzbV9fICgiIiAiX19HSV9fX3N0cmVycm9yX3IiKSBfX2F0dHJpYnV0ZV9fICgodmlzaWJp bGl0eSAoImhpZGRlbiIpKSk7CmV4dGVybiBfX3R5cGVvZiAoX19zdHJ2ZXJzY21wKSBfX0dJX19f c3RydmVyc2NtcDsgZXh0ZXJuIF9fdHlwZW9mIChfX3N0cnZlcnNjbXApIF9fc3RydmVyc2NtcCBf X2FzbV9fICgiIiAiX19HSV9fX3N0cnZlcnNjbXAiKSBfX2F0dHJpYnV0ZV9fICgodmlzaWJpbGl0 eSAoImhpZGRlbiIpKSk7CmV4dGVybiBfX3R5cGVvZiAoYmFzZW5hbWUpIF9fR0lfYmFzZW5hbWU7 IGV4dGVybiBfX3R5cGVvZiAoYmFzZW5hbWUpIGJhc2VuYW1lIF9fYXNtX18gKCIiICJfX0dJX2Jh c2VuYW1lIikgX19hdHRyaWJ1dGVfXyAoKHZpc2liaWxpdHkgKCJoaWRkZW4iKSkpOwpleHRlcm4g X190eXBlb2YgKHN0cmNvbGwpIF9fR0lfc3RyY29sbDsgZXh0ZXJuIF9fdHlwZW9mIChzdHJjb2xs KSBzdHJjb2xsIF9fYXNtX18gKCIiICJfX0dJX3N0cmNvbGwiKSBfX2F0dHJpYnV0ZV9fICgodmlz aWJpbGl0eSAoImhpZGRlbiIpKSk7CiMgMjYgInZmcHJpbnRmLmMiIDIKIyAxICIuLi9pbmNsdWRl L2Vycm5vLmgiIDEKCgojIDEgIi4uL3N0ZGxpYi9lcnJuby5oIiAxCiMgMzIgIi4uL3N0ZGxpYi9l cnJuby5oIgoKCgoKIyAxICIuLi9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9iaXRzL2Vycm5vLmgi IDEKIyAyNSAiLi4vc3lzZGVwcy91bml4L3N5c3YvbGludXgvYml0cy9lcnJuby5oIgojIDEgIi91 c3Ivc3JjL3BhY2thZ2VzL0JVSUxEL2tlcm5lbC1oZWFkZXJzL2xpbnV4L2Vycm5vLmgiIDEgMyA0 CgoKCiMgMSAiL3Vzci9zcmMvcGFja2FnZXMvQlVJTEQva2VybmVsLWhlYWRlcnMvYXNtL2Vycm5v LmgiIDEgMyA0CgoKCiMgMSAiL3Vzci9zcmMvcGFja2FnZXMvQlVJTEQva2VybmVsLWhlYWRlcnMv YXNtLXg4Nl82NC9lcnJuby5oIiAxIDMgNAojIDUgIi91c3Ivc3JjL3BhY2thZ2VzL0JVSUxEL2tl cm5lbC1oZWFkZXJzL2FzbS9lcnJuby5oIiAyIDMgNAojIDUgIi91c3Ivc3JjL3BhY2thZ2VzL0JV SUxEL2tlcm5lbC1oZWFkZXJzL2xpbnV4L2Vycm5vLmgiIDIgMyA0CiMgMjYgIi4uL3N5c2RlcHMv dW5peC9zeXN2L2xpbnV4L2JpdHMvZXJybm8uaCIgMgojIDM4ICIuLi9zeXNkZXBzL3VuaXgvc3lz di9saW51eC9iaXRzL2Vycm5vLmgiCmV4dGVybiBpbnQgKl9fZXJybm9fbG9jYXRpb24gKHZvaWQp IF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKIyAzNyAiLi4vc3RkbGliL2Vycm5vLmgiIDIK IyA1NSAiLi4vc3RkbGliL2Vycm5vLmgiCmV4dGVybiBjaGFyICpwcm9ncmFtX2ludm9jYXRpb25f bmFtZSwgKnByb2dyYW1faW52b2NhdGlvbl9zaG9ydF9uYW1lOwoKCgoKIyA2OSAiLi4vc3RkbGli L2Vycm5vLmgiCnR5cGVkZWYgaW50IGVycm9yX3Q7CiMgNCAiLi4vaW5jbHVkZS9lcnJuby5oIiAy CiMgMjMgIi4uL2luY2x1ZGUvZXJybm8uaCIKIyAxICIuLi9pbmNsdWRlL3Rscy5oIiAxCiMgMjQg Ii4uL2luY2x1ZGUvZXJybm8uaCIgMgojIDI3ICJ2ZnByaW50Zi5jIiAyCiMgMSAiLi4vaW5jbHVk ZS93Y2hhci5oIiAxCgojIDEgIi4uL3djc21icy93Y2hhci5oIiAxCiMgMzcgIi4uL3djc21icy93 Y2hhci5oIgojIDEgIi4uL2luY2x1ZGUvc3RkaW8uaCIgMQoKCiMgMSAiLi4vbGliaW8vc3RkaW8u aCIgMQojIDYyICIuLi9saWJpby9zdGRpby5oIgp0eXBlZGVmIHN0cnVjdCBfSU9fRklMRSBfX0ZJ TEU7CiMgNCAiLi4vaW5jbHVkZS9zdGRpby5oIiAyCiMgMzggIi4uL3djc21icy93Y2hhci5oIiAy CiMgNDggIi4uL3djc21icy93Y2hhci5oIgojIDEgIi91c3IvbGliNjQvZ2NjLWxpYi94ODZfNjQt c3VzZS1saW51eC8zLjMvaW5jbHVkZS9zdGRkZWYuaCIgMSAzIDQKIyAzNTQgIi91c3IvbGliNjQv Z2NjLWxpYi94ODZfNjQtc3VzZS1saW51eC8zLjMvaW5jbHVkZS9zdGRkZWYuaCIgMyA0CnR5cGVk ZWYgdW5zaWduZWQgaW50IHdpbnRfdDsKIyA0OSAiLi4vd2NzbWJzL3djaGFyLmgiIDIKIyA2MyAi Li4vd2NzbWJzL3djaGFyLmgiCgoKCgoKCgoKdHlwZWRlZiBzdHJ1Y3QKewogIGludCBfX2NvdW50 OwogIHVuaW9uCiAgewogICAgd2ludF90IF9fd2NoOwogICAgY2hhciBfX3djaGJbNF07CiAgfSBf X3ZhbHVlOwp9IF9fbWJzdGF0ZV90OwojIDg4ICIuLi93Y3NtYnMvd2NoYXIuaCIKCgp0eXBlZGVm IF9fbWJzdGF0ZV90IG1ic3RhdGVfdDsKCgoKIyAxMTMgIi4uL3djc21icy93Y2hhci5oIgoKCgoK CnN0cnVjdCB0bTsKCgoKCgoKCgoKZXh0ZXJuIHdjaGFyX3QgKndjc2NweSAod2NoYXJfdCAqX19y ZXN0cmljdCBfX2Rlc3QsCiAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgd2NoYXJfdCAq X19yZXN0cmljdCBfX3NyYykgOwoKZXh0ZXJuIHdjaGFyX3QgKndjc25jcHkgKHdjaGFyX3QgKl9f cmVzdHJpY3QgX19kZXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCB3Y2hhcl90 ICpfX3Jlc3RyaWN0IF9fc3JjLCBzaXplX3QgX19uKQogICAgIDsKCgpleHRlcm4gd2NoYXJfdCAq d2NzY2F0ICh3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fZGVzdCwKICAgICAgICAgICAgICAgICAgICAg ICAgX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fc3JjKSA7CgpleHRlcm4gd2NoYXJfdCAq d2NzbmNhdCAod2NoYXJfdCAqX19yZXN0cmljdCBfX2Rlc3QsCiAgICAgICAgICAgICAgICAgICAg ICAgICBfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19zcmMsIHNpemVfdCBfX24pCiAgICAg OwoKCmV4dGVybiBpbnQgd2NzY21wIChfX2NvbnN0IHdjaGFyX3QgKl9fczEsIF9fY29uc3Qgd2No YXJfdCAqX19zMikKICAgICBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCmV4dGVybiBpbnQg d2NzbmNtcCAoX19jb25zdCB3Y2hhcl90ICpfX3MxLCBfX2NvbnN0IHdjaGFyX3QgKl9fczIsIHNp emVfdCBfX24pCiAgICAgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKCgpleHRlcm4gaW50 IHdjc2Nhc2VjbXAgKF9fY29uc3Qgd2NoYXJfdCAqX19zMSwgX19jb25zdCB3Y2hhcl90ICpfX3My KSA7CgoKZXh0ZXJuIGludCB3Y3NuY2FzZWNtcCAoX19jb25zdCB3Y2hhcl90ICpfX3MxLCBfX2Nv bnN0IHdjaGFyX3QgKl9fczIsCiAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX24pIDsK CgoKIyAxICIuLi9pbmNsdWRlL3hsb2NhbGUuaCIgMQojIDE2MiAiLi4vd2NzbWJzL3djaGFyLmgi IDIKCmV4dGVybiBpbnQgd2NzY2FzZWNtcF9sIChfX2NvbnN0IHdjaGFyX3QgKl9fczEsIF9fY29u c3Qgd2NoYXJfdCAqX19zMiwKICAgICAgICAgICAgICAgICAgICAgICAgIF9fbG9jYWxlX3QgX19s b2MpIDsKCmV4dGVybiBpbnQgd2NzbmNhc2VjbXBfbCAoX19jb25zdCB3Y2hhcl90ICpfX3MxLCBf X2NvbnN0IHdjaGFyX3QgKl9fczIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IF9f biwgX19sb2NhbGVfdCBfX2xvYykgOwoKCgoKCmV4dGVybiBpbnQgd2NzY29sbCAoX19jb25zdCB3 Y2hhcl90ICpfX3MxLCBfX2NvbnN0IHdjaGFyX3QgKl9fczIpIDsKCgoKZXh0ZXJuIHNpemVfdCB3 Y3N4ZnJtICh3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fczEsCiAgICAgICAgICAgICAgICAgICAgICAg X19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fczIsIHNpemVfdCBfX24pIDsKCgoKCgoKCgpl eHRlcm4gaW50IHdjc2NvbGxfbCAoX19jb25zdCB3Y2hhcl90ICpfX3MxLCBfX2NvbnN0IHdjaGFy X3QgKl9fczIsCiAgICAgICAgICAgICAgICAgICAgICBfX2xvY2FsZV90IF9fbG9jKSA7CgoKCgpl eHRlcm4gc2l6ZV90IHdjc3hmcm1fbCAod2NoYXJfdCAqX19zMSwgX19jb25zdCB3Y2hhcl90ICpf X3MyLAogICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IF9fbiwgX19sb2NhbGVfdCBfX2xv YykgOwoKCmV4dGVybiB3Y2hhcl90ICp3Y3NkdXAgKF9fY29uc3Qgd2NoYXJfdCAqX19zKSBfX2F0 dHJpYnV0ZV9fICgoX19tYWxsb2NfXykpOwoKCgoKZXh0ZXJuIHdjaGFyX3QgKndjc2NociAoX19j b25zdCB3Y2hhcl90ICpfX3djcywgd2NoYXJfdCBfX3djKQogICAgIF9fYXR0cmlidXRlX18gKChf X3B1cmVfXykpOwoKZXh0ZXJuIHdjaGFyX3QgKndjc3JjaHIgKF9fY29uc3Qgd2NoYXJfdCAqX193 Y3MsIHdjaGFyX3QgX193YykKICAgICBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgoKCgpl eHRlcm4gd2NoYXJfdCAqd2NzY2hybnVsIChfX2NvbnN0IHdjaGFyX3QgKl9fcywgd2NoYXJfdCBf X3djKQogICAgIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCgoKCmV4dGVybiBzaXplX3Qg d2NzY3NwbiAoX19jb25zdCB3Y2hhcl90ICpfX3djcywgX19jb25zdCB3Y2hhcl90ICpfX3JlamVj dCkKICAgICBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgpleHRlcm4gc2l6ZV90IHdjc3Nw biAoX19jb25zdCB3Y2hhcl90ICpfX3djcywgX19jb25zdCB3Y2hhcl90ICpfX2FjY2VwdCkKICAg ICBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCmV4dGVybiB3Y2hhcl90ICp3Y3NwYnJrIChf X2NvbnN0IHdjaGFyX3QgKl9fd2NzLCBfX2NvbnN0IHdjaGFyX3QgKl9fYWNjZXB0KQogICAgIF9f YXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKZXh0ZXJuIHdjaGFyX3QgKndjc3N0ciAoX19jb25z dCB3Y2hhcl90ICpfX2hheXN0YWNrLCBfX2NvbnN0IHdjaGFyX3QgKl9fbmVlZGxlKQogICAgIF9f YXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCmV4dGVybiB3Y2hhcl90ICp3Y3N0b2sgKHdjaGFy X3QgKl9fcmVzdHJpY3QgX19zLAogICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHdjaGFy X3QgKl9fcmVzdHJpY3QgX19kZWxpbSwKICAgICAgICAgICAgICAgICAgICAgICAgd2NoYXJfdCAq Kl9fcmVzdHJpY3QgX19wdHIpIDsKCgpleHRlcm4gc2l6ZV90IHdjc2xlbiAoX19jb25zdCB3Y2hh cl90ICpfX3MpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCgoKZXh0ZXJuIHdjaGFyX3Qg Kndjc3djcyAoX19jb25zdCB3Y2hhcl90ICpfX2hheXN0YWNrLCBfX2NvbnN0IHdjaGFyX3QgKl9f bmVlZGxlKQogICAgIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCgoKZXh0ZXJuIHNpemVf dCB3Y3NubGVuIChfX2NvbnN0IHdjaGFyX3QgKl9fcywgc2l6ZV90IF9fbWF4bGVuKQogICAgIF9f YXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCgoKCmV4dGVybiB3Y2hhcl90ICp3bWVtY2hyIChf X2NvbnN0IHdjaGFyX3QgKl9fcywgd2NoYXJfdCBfX2MsIHNpemVfdCBfX24pCiAgICAgX19hdHRy aWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKZXh0ZXJuIGludCB3bWVtY21wIChfX2NvbnN0IHdjaGFy X3QgKl9fcmVzdHJpY3QgX19zMSwKICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHdjaGFyX3Qg Kl9fcmVzdHJpY3QgX19zMiwgc2l6ZV90IF9fbikKICAgICBfX2F0dHJpYnV0ZV9fICgoX19wdXJl X18pKTsKCgpleHRlcm4gd2NoYXJfdCAqd21lbWNweSAod2NoYXJfdCAqX19yZXN0cmljdCBfX3Mx LAogICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9f czIsIHNpemVfdCBfX24pIDsKCgoKZXh0ZXJuIHdjaGFyX3QgKndtZW1tb3ZlICh3Y2hhcl90ICpf X3MxLCBfX2NvbnN0IHdjaGFyX3QgKl9fczIsIHNpemVfdCBfX24pCiAgICAgOwoKCmV4dGVybiB3 Y2hhcl90ICp3bWVtc2V0ICh3Y2hhcl90ICpfX3MsIHdjaGFyX3QgX19jLCBzaXplX3QgX19uKSA7 CgoKCgoKZXh0ZXJuIHdjaGFyX3QgKndtZW1wY3B5ICh3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fczEs CiAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9f czIsIHNpemVfdCBfX24pCiAgICAgOwoKCgoKCgpleHRlcm4gd2ludF90IGJ0b3djIChpbnQgX19j KSA7CgoKCmV4dGVybiBpbnQgd2N0b2IgKHdpbnRfdCBfX2MpIDsKCgoKZXh0ZXJuIGludCBtYnNp bml0IChfX2NvbnN0IG1ic3RhdGVfdCAqX19wcykgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7 CgoKCmV4dGVybiBzaXplX3QgbWJydG93YyAod2NoYXJfdCAqX19yZXN0cmljdCBfX3B3YywKICAg ICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zLCBzaXplX3Qg X19uLAogICAgICAgICAgICAgICAgICAgICAgIG1ic3RhdGVfdCAqX19wKSA7CgoKZXh0ZXJuIHNp emVfdCB3Y3J0b21iIChjaGFyICpfX3Jlc3RyaWN0IF9fcywgd2NoYXJfdCBfX3djLAogICAgICAg ICAgICAgICAgICAgICAgIG1ic3RhdGVfdCAqX19yZXN0cmljdCBfX3BzKSA7CgoKZXh0ZXJuIHNp emVfdCBfX21icmxlbiAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fcywgc2l6ZV90IF9fbiwK ICAgICAgICAgICAgICAgICAgICAgICAgbWJzdGF0ZV90ICpfX3Jlc3RyaWN0IF9fcHMpIDsKZXh0 ZXJuIHNpemVfdCBtYnJsZW4gKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX3MsIHNpemVfdCBf X24sCiAgICAgICAgICAgICAgICAgICAgICBtYnN0YXRlX3QgKl9fcmVzdHJpY3QgX19wcykgOwoK CgoKZXh0ZXJuIF9faW5saW5lIHNpemVfdCBtYnJsZW4gKF9fY29uc3QgY2hhciAqX19yZXN0cmlj dCBfX3MsIHNpemVfdCBfX24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYnN0YXRl X3QgKl9fcmVzdHJpY3QgX19wcykKeyByZXR1cm4gKF9fcHMgIT0gKCh2b2lkICopMCkKICAgICAg ICAgID8gbWJydG93YyAoKCh2b2lkICopMCksIF9fcywgX19uLCBfX3BzKSA6IF9fbWJybGVuIChf X3MsIF9fbiwgKCh2b2lkICopMCkpKTsgfQoKCgoKCmV4dGVybiBzaXplX3QgbWJzcnRvd2NzICh3 Y2hhcl90ICpfX3Jlc3RyaWN0IF9fZHN0LAogICAgICAgICAgICAgICAgICAgICAgICAgX19jb25z dCBjaGFyICoqX19yZXN0cmljdCBfX3NyYywgc2l6ZV90IF9fbGVuLAogICAgICAgICAgICAgICAg ICAgICAgICAgbWJzdGF0ZV90ICpfX3Jlc3RyaWN0IF9fcHMpIDsKCgoKZXh0ZXJuIHNpemVfdCB3 Y3NydG9tYnMgKGNoYXIgKl9fcmVzdHJpY3QgX19kc3QsCiAgICAgICAgICAgICAgICAgICAgICAg ICBfX2NvbnN0IHdjaGFyX3QgKipfX3Jlc3RyaWN0IF9fc3JjLCBzaXplX3QgX19sZW4sCiAgICAg ICAgICAgICAgICAgICAgICAgICBtYnN0YXRlX3QgKl9fcmVzdHJpY3QgX19wcykgOwoKCgoKCgpl eHRlcm4gc2l6ZV90IG1ic25ydG93Y3MgKHdjaGFyX3QgKl9fcmVzdHJpY3QgX19kc3QsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICoqX19yZXN0cmljdCBfX3NyYywgc2l6 ZV90IF9fbm1jLAogICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX2xlbiwgbWJzdGF0 ZV90ICpfX3Jlc3RyaWN0IF9fcHMpIDsKCgoKZXh0ZXJuIHNpemVfdCB3Y3NucnRvbWJzIChjaGFy ICpfX3Jlc3RyaWN0IF9fZHN0LAogICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgd2No YXJfdCAqKl9fcmVzdHJpY3QgX19zcmMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90 IF9fbndjLCBzaXplX3QgX19sZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgbWJzdGF0ZV90 ICpfX3Jlc3RyaWN0IF9fcHMpIDsKCgoKCgoKZXh0ZXJuIGludCB3Y3dpZHRoICh3Y2hhcl90IF9f YykgOwoKCgpleHRlcm4gaW50IHdjc3dpZHRoIChfX2NvbnN0IHdjaGFyX3QgKl9fcywgc2l6ZV90 IF9fbikgOwoKCgoKCgpleHRlcm4gZG91YmxlIHdjc3RvZCAoX19jb25zdCB3Y2hhcl90ICpfX3Jl c3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgIHdjaGFyX3QgKipfX3Jlc3RyaWN0 IF9fZW5kcHRyKSA7CgoKCmV4dGVybiBmbG9hdCB3Y3N0b2YgKF9fY29uc3Qgd2NoYXJfdCAqX19y ZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgIHdjaGFyX3QgKipfX3Jlc3RyaWN0 IF9fZW5kcHRyKSA7CmV4dGVybiBsb25nIGRvdWJsZSB3Y3N0b2xkIChfX2NvbnN0IHdjaGFyX3Qg Kl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgd2NoYXJfdCAq Kl9fcmVzdHJpY3QgX19lbmRwdHIpIDsKCgoKCgpleHRlcm4gbG9uZyBpbnQgd2NzdG9sIChfX2Nv bnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICB3 Y2hhcl90ICoqX19yZXN0cmljdCBfX2VuZHB0ciwgaW50IF9fYmFzZSkgOwoKCgpleHRlcm4gdW5z aWduZWQgbG9uZyBpbnQgd2NzdG91bCAoX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fbnB0 ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdjaGFyX3QgKipfX3Jlc3RyaWN0 IF9fZW5kcHRyLCBpbnQgX19iYXNlKQogICAgIDsKCgoKCl9fZXh0ZW5zaW9uX18KZXh0ZXJuIGxv bmcgbG9uZyBpbnQgd2NzdG9sbCAoX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fbnB0ciwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2NoYXJfdCAqKl9fcmVzdHJpY3QgX19lbmRw dHIsIGludCBfX2Jhc2UpCiAgICAgOwoKCgpfX2V4dGVuc2lvbl9fCmV4dGVybiB1bnNpZ25lZCBs b25nIGxvbmcgaW50IHdjc3RvdWxsIChfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19ucHRy LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2NoYXJfdCAqKl9fcmVz dHJpY3QgX19lbmRwdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp bnQgX19iYXNlKSA7CgoKCgoKCl9fZXh0ZW5zaW9uX18KZXh0ZXJuIGxvbmcgbG9uZyBpbnQgd2Nz dG9xIChfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHdjaGFyX3QgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQgX19iYXNlKQog ICAgIDsKCgoKX19leHRlbnNpb25fXwpleHRlcm4gdW5zaWduZWQgbG9uZyBsb25nIGludCB3Y3N0 b3VxIChfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICB3Y2hhcl90ICoqX19yZXN0cmljdCBfX2VuZHB0ciwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9fYmFzZSkgOwojIDQzOSAi Li4vd2NzbWJzL3djaGFyLmgiCiMgMSAiLi4vaW5jbHVkZS94bG9jYWxlLmgiIDEKIyA0NDAgIi4u L3djc21icy93Y2hhci5oIiAyCgoKCmV4dGVybiBsb25nIGludCB3Y3N0b2xfbCAoX19jb25zdCB3 Y2hhcl90ICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICB3Y2hh cl90ICoqX19yZXN0cmljdCBfX2VuZHB0ciwgaW50IF9fYmFzZSwKICAgICAgICAgICAgICAgICAg ICAgICAgICBfX2xvY2FsZV90IF9fbG9jKSA7CgpleHRlcm4gdW5zaWduZWQgbG9uZyBpbnQgd2Nz dG91bF9sIChfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICB3Y2hhcl90ICoqX19yZXN0cmljdCBfX2VuZHB0ciwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9fYmFzZSwgX19sb2NhbGVfdCBf X2xvYykgOwoKX19leHRlbnNpb25fXwpleHRlcm4gbG9uZyBsb25nIGludCB3Y3N0b2xsX2wgKF9f Y29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgd2NoYXJfdCAqKl9fcmVzdHJpY3QgX19lbmRwdHIsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgaW50IF9fYmFzZSwgX19sb2NhbGVfdCBfX2xvYykgOwoKX19leHRlbnNp b25fXwpleHRlcm4gdW5zaWduZWQgbG9uZyBsb25nIGludCB3Y3N0b3VsbF9sIChfX2NvbnN0IHdj aGFyX3QgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICB3Y2hhcl90ICoqX19yZXN0cmljdCBfX2VuZHB0ciwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9fYmFzZSwgX19sb2NhbGVfdCBfX2xvYykK ICAgICA7CgpleHRlcm4gZG91YmxlIHdjc3RvZF9sIChfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJp Y3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICB3Y2hhcl90ICoqX19yZXN0cmljdCBf X2VuZHB0ciwgX19sb2NhbGVfdCBfX2xvYykKICAgICA7CgpleHRlcm4gZmxvYXQgd2NzdG9mX2wg KF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAg ICAgd2NoYXJfdCAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIF9fbG9jYWxlX3QgX19sb2MpCiAgICAg OwoKZXh0ZXJuIGxvbmcgZG91YmxlIHdjc3RvbGRfbCAoX19jb25zdCB3Y2hhcl90ICpfX3Jlc3Ry aWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2NoYXJfdCAqKl9fcmVz dHJpY3QgX19lbmRwdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbG9jYWxlX3Qg X19sb2MpIDsKCgoKCgpleHRlcm4gZG91YmxlIF9fd2NzdG9kX2ludGVybmFsIChfX2NvbnN0IHdj aGFyX3QgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICB3Y2hhcl90ICoqX19yZXN0cmljdCBfX2VuZHB0ciwgaW50IF9fZ3JvdXApCiAgICAgOwpleHRl cm4gZmxvYXQgX193Y3N0b2ZfaW50ZXJuYWwgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBf X25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2NoYXJfdCAqKl9fcmVzdHJp Y3QgX19lbmRwdHIsIGludCBfX2dyb3VwKQogICAgIDsKZXh0ZXJuIGxvbmcgZG91YmxlIF9fd2Nz dG9sZF9pbnRlcm5hbCAoX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2NoYXJfdCAqKl9fcmVzdHJpY3QgX19l bmRwdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBfX2dyb3Vw KSA7CgoKZXh0ZXJuIGxvbmcgaW50IF9fd2NzdG9sX2ludGVybmFsIChfX2NvbnN0IHdjaGFyX3Qg Kl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdj aGFyX3QgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGludCBfX2Jhc2UsIGludCBfX2dyb3VwKSA7CgoKCmV4dGVybiB1bnNpZ25lZCBsb25n IGludCBfX3djc3RvdWxfaW50ZXJuYWwgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX25w dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2NoYXJfdCAq Kl9fcmVzdHJpY3QgX19lbmRwdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGludCBfX2Jhc2UsIGludCBfX2dyb3VwKSA7CgoKCl9fZXh0ZW5zaW9uX18KZXh0 ZXJuIGxvbmcgbG9uZyBpbnQgX193Y3N0b2xsX2ludGVybmFsIChfX2NvbnN0IHdjaGFyX3QgKl9f cmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHdjaGFyX3QgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGludCBfX2Jhc2UsIGludCBfX2dyb3VwKSA7CgoKCl9fZXh0ZW5zaW9u X18KZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQgX193Y3N0b3VsbF9pbnRlcm5hbCAoX19j b25zdCB3Y2hhcl90ICoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHdjaGFyX3QgKioKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgX19yZXN0cmljdCBfX2VuZHB0ciwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9fYmFzZSwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9fZ3Jv dXApIDsKCgoKCgoKCgpleHRlcm4gX19pbmxpbmUgZG91YmxlIHdjc3RvZCAoX19jb25zdCB3Y2hh cl90ICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdj aGFyX3QgKipfX3Jlc3RyaWN0IF9fZW5kcHRyKQp7IHJldHVybiBfX3djc3RvZF9pbnRlcm5hbCAo X19ucHRyLCBfX2VuZHB0ciwgMCk7IH0KZXh0ZXJuIF9faW5saW5lIGxvbmcgaW50IHdjc3RvbCAo X19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgd2NoYXJfdCAqKl9fcmVzdHJpY3QgX19lbmRwdHIsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGludCBfX2Jhc2UpCnsgcmV0dXJuIF9fd2NzdG9sX2ludGVybmFs IChfX25wdHIsIF9fZW5kcHRyLCBfX2Jhc2UsIDApOyB9CmV4dGVybiBfX2lubGluZSB1bnNpZ25l ZCBsb25nIGludCB3Y3N0b3VsIChfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19ucHRyLAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2NoYXJfdCAqKl9fcmVz dHJpY3QgX19lbmRwdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBpbnQgX19iYXNlKQp7IHJldHVybiBfX3djc3RvdWxfaW50ZXJuYWwgKF9fbnB0ciwgX19lbmRw dHIsIF9fYmFzZSwgMCk7IH0KCgoKZXh0ZXJuIF9faW5saW5lIGZsb2F0IHdjc3RvZiAoX19jb25z dCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgd2NoYXJfdCAqKl9fcmVzdHJpY3QgX19lbmRwdHIpCnsgcmV0dXJuIF9fd2NzdG9mX2ludGVy bmFsIChfX25wdHIsIF9fZW5kcHRyLCAwKTsgfQpleHRlcm4gX19pbmxpbmUgbG9uZyBkb3VibGUg d2NzdG9sZCAoX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHdjaGFyX3QgKipfX3Jlc3RyaWN0IF9fZW5kcHRyKQp7 IHJldHVybiBfX3djc3RvbGRfaW50ZXJuYWwgKF9fbnB0ciwgX19lbmRwdHIsIDApOyB9CgoKX19l eHRlbnNpb25fXwpleHRlcm4gX19pbmxpbmUgbG9uZyBsb25nIGludCB3Y3N0b3EgKF9fY29uc3Qg d2NoYXJfdCAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgd2NoYXJfdCAqKl9fcmVzdHJpY3QgX19lbmRwdHIsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgaW50IF9fYmFzZSkKeyByZXR1cm4gX193Y3N0b2xsX2ludGVy bmFsIChfX25wdHIsIF9fZW5kcHRyLCBfX2Jhc2UsIDApOyB9Cl9fZXh0ZW5zaW9uX18KZXh0ZXJu IF9faW5saW5lIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQgd2NzdG91cSAoX19jb25zdCB3Y2hhcl90 ICoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19yZXN0 cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHdjaGFyX3QgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19iYXNlKQp7IHJldHVybiBfX3djc3RvdWxs X2ludGVybmFsIChfX25wdHIsIF9fZW5kcHRyLCBfX2Jhc2UsIDApOyB9CgoKCgoKCgpleHRlcm4g d2NoYXJfdCAqd2NwY3B5ICh3Y2hhcl90ICpfX2Rlc3QsIF9fY29uc3Qgd2NoYXJfdCAqX19zcmMp IDsKCgoKZXh0ZXJuIHdjaGFyX3QgKndjcG5jcHkgKHdjaGFyX3QgKl9fZGVzdCwgX19jb25zdCB3 Y2hhcl90ICpfX3NyYywgc2l6ZV90IF9fbikKICAgICA7CgoKCgoKCgoKZXh0ZXJuIGludCBmd2lk ZSAoX19GSUxFICpfX2ZwLCBpbnQgX19tb2RlKSA7CgoKCmV4dGVybiBpbnQgZndwcmludGYgKF9f RklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSwKICAgICAgICAgICAgICAgICAgICAgX19jb25zdCB3 Y2hhcl90ICpfX3Jlc3RyaWN0IF9fZm9ybWF0LCAuLi4pCiAgICAgOwoKZXh0ZXJuIGludCB3cHJp bnRmIChfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19mb3JtYXQsIC4uLikKICAgICA7Cgpl eHRlcm4gaW50IHN3cHJpbnRmICh3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fcywgc2l6ZV90IF9fbiwK ICAgICAgICAgICAgICAgICAgICAgX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fZm9ybWF0 LCAuLi4pCiAgICAgOwoKCmV4dGVybiBpbnQgdmZ3cHJpbnRmIChfX0ZJTEUgKl9fcmVzdHJpY3Qg X19zLAogICAgICAgICAgICAgICAgICAgICAgX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9f Zm9ybWF0LAogICAgICAgICAgICAgICAgICAgICAgX19nbnVjX3ZhX2xpc3QgX19hcmcpCiAgICAg OwoKZXh0ZXJuIGludCB2d3ByaW50ZiAoX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fZm9y bWF0LAogICAgICAgICAgICAgICAgICAgICBfX2dudWNfdmFfbGlzdCBfX2FyZykKICAgICA7CgoK ZXh0ZXJuIGludCB2c3dwcmludGYgKHdjaGFyX3QgKl9fcmVzdHJpY3QgX19zLCBzaXplX3QgX19u LAogICAgICAgICAgICAgICAgICAgICAgX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fZm9y bWF0LAogICAgICAgICAgICAgICAgICAgICAgX19nbnVjX3ZhX2xpc3QgX19hcmcpCiAgICAgOwoK CgpleHRlcm4gaW50IGZ3c2NhbmYgKF9fRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSwKICAgICAg ICAgICAgICAgICAgICBfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19mb3JtYXQsIC4uLikK ICAgICA7CgpleHRlcm4gaW50IHdzY2FuZiAoX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9f Zm9ybWF0LCAuLi4pCiAgICAgOwoKZXh0ZXJuIGludCBzd3NjYW5mIChfX2NvbnN0IHdjaGFyX3Qg Kl9fcmVzdHJpY3QgX19zLAogICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgd2NoYXJfdCAqX19y ZXN0cmljdCBfX2Zvcm1hdCwgLi4uKQogICAgIDsKCgoKCgoKCgpleHRlcm4gaW50IHZmd3NjYW5m IChfX0ZJTEUgKl9fcmVzdHJpY3QgX19zLAogICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHdj aGFyX3QgKl9fcmVzdHJpY3QgX19mb3JtYXQsCiAgICAgICAgICAgICAgICAgICAgIF9fZ251Y192 YV9saXN0IF9fYXJnKQogICAgIDsKCmV4dGVybiBpbnQgdndzY2FuZiAoX19jb25zdCB3Y2hhcl90 ICpfX3Jlc3RyaWN0IF9fZm9ybWF0LAogICAgICAgICAgICAgICAgICAgIF9fZ251Y192YV9saXN0 IF9fYXJnKQogICAgIDsKCmV4dGVybiBpbnQgdnN3c2NhbmYgKF9fY29uc3Qgd2NoYXJfdCAqX19y ZXN0cmljdCBfX3MsCiAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0 cmljdCBfX2Zvcm1hdCwKICAgICAgICAgICAgICAgICAgICAgX19nbnVjX3ZhX2xpc3QgX19hcmcp CiAgICAgOwoKCgoKCgoKZXh0ZXJuIHdpbnRfdCBmZ2V0d2MgKF9fRklMRSAqX19zdHJlYW0pIDsK ZXh0ZXJuIHdpbnRfdCBnZXR3YyAoX19GSUxFICpfX3N0cmVhbSkgOwoKCmV4dGVybiB3aW50X3Qg Z2V0d2NoYXIgKHZvaWQpIDsKCgoKZXh0ZXJuIHdpbnRfdCBmcHV0d2MgKHdjaGFyX3QgX193Yywg X19GSUxFICpfX3N0cmVhbSkgOwpleHRlcm4gd2ludF90IHB1dHdjICh3Y2hhcl90IF9fd2MsIF9f RklMRSAqX19zdHJlYW0pIDsKCgpleHRlcm4gd2ludF90IHB1dHdjaGFyICh3Y2hhcl90IF9fd2Mp IDsKCgoKCmV4dGVybiB3Y2hhcl90ICpmZ2V0d3MgKHdjaGFyX3QgKl9fcmVzdHJpY3QgX193cywg aW50IF9fbiwKICAgICAgICAgICAgICAgICAgICAgICAgX19GSUxFICpfX3Jlc3RyaWN0IF9fc3Ry ZWFtKSA7CgoKZXh0ZXJuIGludCBmcHV0d3MgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBf X3dzLAogICAgICAgICAgICAgICAgICAgX19GSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtKSA7CgoK CmV4dGVybiB3aW50X3QgdW5nZXR3YyAod2ludF90IF9fd2MsIF9fRklMRSAqX19zdHJlYW0pIDsK CgoKCgoKZXh0ZXJuIHdpbnRfdCBnZXR3Y191bmxvY2tlZCAoX19GSUxFICpfX3N0cmVhbSkgOwpl eHRlcm4gd2ludF90IGdldHdjaGFyX3VubG9ja2VkICh2b2lkKSA7CgoKZXh0ZXJuIHdpbnRfdCBm Z2V0d2NfdW5sb2NrZWQgKF9fRklMRSAqX19zdHJlYW0pIDsKCgpleHRlcm4gd2ludF90IGZwdXR3 Y191bmxvY2tlZCAod2NoYXJfdCBfX3djLCBfX0ZJTEUgKl9fc3RyZWFtKSA7CgoKCmV4dGVybiB3 aW50X3QgcHV0d2NfdW5sb2NrZWQgKHdjaGFyX3QgX193YywgX19GSUxFICpfX3N0cmVhbSkgOwpl eHRlcm4gd2ludF90IHB1dHdjaGFyX3VubG9ja2VkICh3Y2hhcl90IF9fd2MpIDsKCgoKZXh0ZXJu IHdjaGFyX3QgKmZnZXR3c191bmxvY2tlZCAod2NoYXJfdCAqX19yZXN0cmljdCBfX3dzLCBpbnQg X19uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX0ZJTEUgKl9fcmVzdHJpY3Qg X19zdHJlYW0pIDsKCgpleHRlcm4gaW50IGZwdXR3c191bmxvY2tlZCAoX19jb25zdCB3Y2hhcl90 ICpfX3Jlc3RyaWN0IF9fd3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX0ZJTEUgKl9f cmVzdHJpY3QgX19zdHJlYW0pIDsKCgoKCgoKCmV4dGVybiBzaXplX3Qgd2NzZnRpbWUgKHdjaGFy X3QgKl9fcmVzdHJpY3QgX19zLCBzaXplX3QgX19tYXhzaXplLAogICAgICAgICAgICAgICAgICAg ICAgICBfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19mb3JtYXQsCiAgICAgICAgICAgICAg ICAgICAgICAgIF9fY29uc3Qgc3RydWN0IHRtICpfX3Jlc3RyaWN0IF9fdHApIDsKCgoKIyAxICIu Li9pbmNsdWRlL3hsb2NhbGUuaCIgMQojIDcxNyAiLi4vd2NzbWJzL3djaGFyLmgiIDIKCgoKZXh0 ZXJuIHNpemVfdCB3Y3NmdGltZV9sICh3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fcywgc2l6ZV90IF9f bWF4c2l6ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHdjaGFyX3QgKl9fcmVz dHJpY3QgX19mb3JtYXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBzdHJ1Y3Qg dG0gKl9fcmVzdHJpY3QgX190cCwKICAgICAgICAgICAgICAgICAgICAgICAgICBfX2xvY2FsZV90 IF9fbG9jKSA7CiMgNzM3ICIuLi93Y3NtYnMvd2NoYXIuaCIKCiMgMyAiLi4vaW5jbHVkZS93Y2hh ci5oIiAyCgoKCmV4dGVybiBfX3R5cGVvZiAod2NzY2FzZWNtcF9sKSBfX3djc2Nhc2VjbXBfbDsK ZXh0ZXJuIF9fdHlwZW9mICh3Y3NuY2FzZWNtcF9sKSBfX3djc25jYXNlY21wX2w7CmV4dGVybiBf X3R5cGVvZiAod2NzY29sbF9sKSBfX3djc2NvbGxfbDsKZXh0ZXJuIF9fdHlwZW9mICh3Y3N4ZnJt X2wpIF9fd2NzeGZybV9sOwpleHRlcm4gX190eXBlb2YgKHdjc3RvbF9sKSBfX3djc3RvbF9sOwpl eHRlcm4gX190eXBlb2YgKHdjc3RvdWxfbCkgX193Y3N0b3VsX2w7CmV4dGVybiBfX3R5cGVvZiAo d2NzdG9sbF9sKSBfX3djc3RvbGxfbDsKZXh0ZXJuIF9fdHlwZW9mICh3Y3N0b3VsbF9sKSBfX3dj c3RvdWxsX2w7CmV4dGVybiBfX3R5cGVvZiAod2NzdG9kX2wpIF9fd2NzdG9kX2w7CmV4dGVybiBf X3R5cGVvZiAod2NzdG9mX2wpIF9fd2NzdG9mX2w7CmV4dGVybiBfX3R5cGVvZiAod2NzdG9sZF9s KSBfX3djc3RvbGRfbDsKZXh0ZXJuIF9fdHlwZW9mICh3Y3NmdGltZV9sKSBfX3djc2Z0aW1lX2w7 CgoKZXh0ZXJuIF9fdHlwZW9mIChfX3djc3RvZl9pbnRlcm5hbCkgX19HSV9fX3djc3RvZl9pbnRl cm5hbDsgZXh0ZXJuIF9fdHlwZW9mIChfX3djc3RvZl9pbnRlcm5hbCkgX193Y3N0b2ZfaW50ZXJu YWwgX19hc21fXyAoIiIgIl9fR0lfX193Y3N0b2ZfaW50ZXJuYWwiKSBfX2F0dHJpYnV0ZV9fICgo dmlzaWJpbGl0eSAoImhpZGRlbiIpKSk7CmV4dGVybiBfX3R5cGVvZiAoX193Y3N0b2RfaW50ZXJu YWwpIF9fR0lfX193Y3N0b2RfaW50ZXJuYWw7IGV4dGVybiBfX3R5cGVvZiAoX193Y3N0b2RfaW50 ZXJuYWwpIF9fd2NzdG9kX2ludGVybmFsIF9fYXNtX18gKCIiICJfX0dJX19fd2NzdG9kX2ludGVy bmFsIikgX19hdHRyaWJ1dGVfXyAoKHZpc2liaWxpdHkgKCJoaWRkZW4iKSkpOwpleHRlcm4gX190 eXBlb2YgKF9fd2NzdG9sZF9pbnRlcm5hbCkgX19HSV9fX3djc3RvbGRfaW50ZXJuYWw7IGV4dGVy biBfX3R5cGVvZiAoX193Y3N0b2xkX2ludGVybmFsKSBfX3djc3RvbGRfaW50ZXJuYWwgX19hc21f XyAoIiIgIl9fR0lfX193Y3N0b2xkX2ludGVybmFsIikgX19hdHRyaWJ1dGVfXyAoKHZpc2liaWxp dHkgKCJoaWRkZW4iKSkpOwpleHRlcm4gX190eXBlb2YgKF9fd2NzdG9sX2ludGVybmFsKSBfX0dJ X19fd2NzdG9sX2ludGVybmFsOyBleHRlcm4gX190eXBlb2YgKF9fd2NzdG9sX2ludGVybmFsKSBf X3djc3RvbF9pbnRlcm5hbCBfX2FzbV9fICgiIiAiX19HSV9fX3djc3RvbF9pbnRlcm5hbCIpIF9f YXR0cmlidXRlX18gKCh2aXNpYmlsaXR5ICgiaGlkZGVuIikpKTsKZXh0ZXJuIF9fdHlwZW9mIChf X3djc3RvbGxfaW50ZXJuYWwpIF9fR0lfX193Y3N0b2xsX2ludGVybmFsOyBleHRlcm4gX190eXBl b2YgKF9fd2NzdG9sbF9pbnRlcm5hbCkgX193Y3N0b2xsX2ludGVybmFsIF9fYXNtX18gKCIiICJf X0dJX19fd2NzdG9sbF9pbnRlcm5hbCIpIF9fYXR0cmlidXRlX18gKCh2aXNpYmlsaXR5ICgiaGlk ZGVuIikpKTsKZXh0ZXJuIF9fdHlwZW9mIChfX3djc3RvdWxfaW50ZXJuYWwpIF9fR0lfX193Y3N0 b3VsX2ludGVybmFsOyBleHRlcm4gX190eXBlb2YgKF9fd2NzdG91bF9pbnRlcm5hbCkgX193Y3N0 b3VsX2ludGVybmFsIF9fYXNtX18gKCIiICJfX0dJX19fd2NzdG91bF9pbnRlcm5hbCIpIF9fYXR0 cmlidXRlX18gKCh2aXNpYmlsaXR5ICgiaGlkZGVuIikpKTsKZXh0ZXJuIF9fdHlwZW9mIChfX3dj c3RvdWxsX2ludGVybmFsKSBfX0dJX19fd2NzdG91bGxfaW50ZXJuYWw7IGV4dGVybiBfX3R5cGVv ZiAoX193Y3N0b3VsbF9pbnRlcm5hbCkgX193Y3N0b3VsbF9pbnRlcm5hbCBfX2FzbV9fICgiIiAi X19HSV9fX3djc3RvdWxsX2ludGVybmFsIikgX19hdHRyaWJ1dGVfXyAoKHZpc2liaWxpdHkgKCJo aWRkZW4iKSkpOwoKZXh0ZXJuIF9fdHlwZW9mIChfX3djc2Nhc2VjbXBfbCkgX19HSV9fX3djc2Nh c2VjbXBfbDsgZXh0ZXJuIF9fdHlwZW9mIChfX3djc2Nhc2VjbXBfbCkgX193Y3NjYXNlY21wX2wg X19hc21fXyAoIiIgIl9fR0lfX193Y3NjYXNlY21wX2wiKSBfX2F0dHJpYnV0ZV9fICgodmlzaWJp bGl0eSAoImhpZGRlbiIpKSk7CmV4dGVybiBfX3R5cGVvZiAoX193Y3NuY2FzZWNtcF9sKSBfX0dJ X19fd2NzbmNhc2VjbXBfbDsgZXh0ZXJuIF9fdHlwZW9mIChfX3djc25jYXNlY21wX2wpIF9fd2Nz bmNhc2VjbXBfbCBfX2FzbV9fICgiIiAiX19HSV9fX3djc25jYXNlY21wX2wiKSBfX2F0dHJpYnV0 ZV9fICgodmlzaWJpbGl0eSAoImhpZGRlbiIpKSk7CgpleHRlcm4gX190eXBlb2YgKGZwdXR3c191 bmxvY2tlZCkgX19HSV9mcHV0d3NfdW5sb2NrZWQ7IGV4dGVybiBfX3R5cGVvZiAoZnB1dHdzX3Vu bG9ja2VkKSBmcHV0d3NfdW5sb2NrZWQgX19hc21fXyAoIiIgIl9fR0lfZnB1dHdzX3VubG9ja2Vk IikgX19hdHRyaWJ1dGVfXyAoKHZpc2liaWxpdHkgKCJoaWRkZW4iKSkpOwpleHRlcm4gX190eXBl b2YgKHB1dHdjX3VubG9ja2VkKSBfX0dJX3B1dHdjX3VubG9ja2VkOyBleHRlcm4gX190eXBlb2Yg KHB1dHdjX3VubG9ja2VkKSBwdXR3Y191bmxvY2tlZCBfX2FzbV9fICgiIiAiX19HSV9wdXR3Y191 bmxvY2tlZCIpIF9fYXR0cmlidXRlX18gKCh2aXNpYmlsaXR5ICgiaGlkZGVuIikpKTsKZXh0ZXJu IF9fdHlwZW9mIChwdXR3YykgX19HSV9wdXR3YzsgZXh0ZXJuIF9fdHlwZW9mIChwdXR3YykgcHV0 d2MgX19hc21fXyAoIiIgIl9fR0lfcHV0d2MiKSBfX2F0dHJpYnV0ZV9fICgodmlzaWJpbGl0eSAo ImhpZGRlbiIpKSk7CgpleHRlcm4gX190eXBlb2YgKHZzd3NjYW5mKSBfX0dJX3Zzd3NjYW5mOyBl eHRlcm4gX190eXBlb2YgKHZzd3NjYW5mKSB2c3dzY2FuZiBfX2FzbV9fICgiIiAiX19HSV92c3dz Y2FuZiIpIF9fYXR0cmlidXRlX18gKCh2aXNpYmlsaXR5ICgiaGlkZGVuIikpKTsKCmV4dGVybiBf X3R5cGVvZiAobWJydG93YykgX19HSV9tYnJ0b3djOyBleHRlcm4gX190eXBlb2YgKG1icnRvd2Mp IG1icnRvd2MgX19hc21fXyAoIiIgIl9fR0lfbWJydG93YyIpIF9fYXR0cmlidXRlX18gKCh2aXNp YmlsaXR5ICgiaGlkZGVuIikpKTsKZXh0ZXJuIF9fdHlwZW9mICh3Y3J0b21iKSBfX0dJX3djcnRv bWI7IGV4dGVybiBfX3R5cGVvZiAod2NydG9tYikgd2NydG9tYiBfX2FzbV9fICgiIiAiX19HSV93 Y3J0b21iIikgX19hdHRyaWJ1dGVfXyAoKHZpc2liaWxpdHkgKCJoaWRkZW4iKSkpOwpleHRlcm4g X190eXBlb2YgKHdjc2NtcCkgX19HSV93Y3NjbXA7IGV4dGVybiBfX3R5cGVvZiAod2NzY21wKSB3 Y3NjbXAgX19hc21fXyAoIiIgIl9fR0lfd2NzY21wIikgX19hdHRyaWJ1dGVfXyAoKHZpc2liaWxp dHkgKCJoaWRkZW4iKSkpOwpleHRlcm4gX190eXBlb2YgKHdjc2Z0aW1lKSBfX0dJX3djc2Z0aW1l OyBleHRlcm4gX190eXBlb2YgKHdjc2Z0aW1lKSB3Y3NmdGltZSBfX2FzbV9fICgiIiAiX19HSV93 Y3NmdGltZSIpIF9fYXR0cmlidXRlX18gKCh2aXNpYmlsaXR5ICgiaGlkZGVuIikpKTsKZXh0ZXJu IF9fdHlwZW9mICh3Y3NzcG4pIF9fR0lfd2Nzc3BuOyBleHRlcm4gX190eXBlb2YgKHdjc3Nwbikg d2Nzc3BuIF9fYXNtX18gKCIiICJfX0dJX3djc3NwbiIpIF9fYXR0cmlidXRlX18gKCh2aXNpYmls aXR5ICgiaGlkZGVuIikpKTsKZXh0ZXJuIF9fdHlwZW9mICh3Y3NjaHIpIF9fR0lfd2NzY2hyOyBl eHRlcm4gX190eXBlb2YgKHdjc2Nocikgd2NzY2hyIF9fYXNtX18gKCIiICJfX0dJX3djc2NociIp IF9fYXR0cmlidXRlX18gKCh2aXNpYmlsaXR5ICgiaGlkZGVuIikpKTsKZXh0ZXJuIF9fdHlwZW9m ICh3Y3Njb2xsKSBfX0dJX3djc2NvbGw7IGV4dGVybiBfX3R5cGVvZiAod2NzY29sbCkgd2NzY29s bCBfX2FzbV9fICgiIiAiX19HSV93Y3Njb2xsIikgX19hdHRyaWJ1dGVfXyAoKHZpc2liaWxpdHkg KCJoaWRkZW4iKSkpOwpleHRlcm4gX190eXBlb2YgKHdjc3BicmspIF9fR0lfd2NzcGJyazsgZXh0 ZXJuIF9fdHlwZW9mICh3Y3NwYnJrKSB3Y3NwYnJrIF9fYXNtX18gKCIiICJfX0dJX3djc3Bicmsi KSBfX2F0dHJpYnV0ZV9fICgodmlzaWJpbGl0eSAoImhpZGRlbiIpKSk7CgpleHRlcm4gX190eXBl b2YgKHdtZW1jaHIpIF9fR0lfd21lbWNocjsgZXh0ZXJuIF9fdHlwZW9mICh3bWVtY2hyKSB3bWVt Y2hyIF9fYXNtX18gKCIiICJfX0dJX3dtZW1jaHIiKSBfX2F0dHJpYnV0ZV9fICgodmlzaWJpbGl0 eSAoImhpZGRlbiIpKSk7CmV4dGVybiBfX3R5cGVvZiAod21lbXNldCkgX19HSV93bWVtc2V0OyBl eHRlcm4gX190eXBlb2YgKHdtZW1zZXQpIHdtZW1zZXQgX19hc21fXyAoIiIgIl9fR0lfd21lbXNl dCIpIF9fYXR0cmlidXRlX18gKCh2aXNpYmlsaXR5ICgiaGlkZGVuIikpKTsKCgpleHRlcm4gaW50 IF9fd2NzY2FzZWNtcCAoX19jb25zdCB3Y2hhcl90ICpfX3MxLCBfX2NvbnN0IHdjaGFyX3QgKl9f czIpCiAgICAgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CmV4dGVybiBpbnQgX193Y3NuY2Fz ZWNtcCAoX19jb25zdCB3Y2hhcl90ICpfX3MxLCBfX2NvbnN0IHdjaGFyX3QgKl9fczIsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IF9fbikKICAgICBfX2F0dHJpYnV0ZV9fICgoX19w dXJlX18pKTsKZXh0ZXJuIGludCBfX3djc2NvbGwgKF9fY29uc3Qgd2NoYXJfdCAqX19zMSwgX19j b25zdCB3Y2hhcl90ICpfX3MyKTsKZXh0ZXJuIHNpemVfdCBfX3djc2xlbiAoX19jb25zdCB3Y2hh cl90ICpfX3MpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwpleHRlcm4gc2l6ZV90IF9fd2Nz bmxlbiAoX19jb25zdCB3Y2hhcl90ICpfX3MsIHNpemVfdCBfX21heGxlbikKICAgICBfX2F0dHJp YnV0ZV9fICgoX19wdXJlX18pKTsKZXh0ZXJuIHdjaGFyX3QgKl9fd2NzY2F0ICh3Y2hhcl90ICpk ZXN0LCBjb25zdCB3Y2hhcl90ICpzcmMpOwpleHRlcm4gd2ludF90IF9fYnRvd2MgKGludCBfX2Mp OwpleHRlcm4gaW50IF9fbWJzaW5pdCAoX19jb25zdCBfX21ic3RhdGVfdCAqX19wcyk7CmV4dGVy biBzaXplX3QgX19tYnJ0b3djICh3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fcHdjLAogICAgICAgICAg ICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fcywgc2l6ZV90IF9fbiwK ICAgICAgICAgICAgICAgICAgICAgICAgIF9fbWJzdGF0ZV90ICpfX3Jlc3RyaWN0IF9fcCk7CmV4 dGVybiBfX3R5cGVvZiAoX19tYnJ0b3djKSBfX0dJX19fbWJydG93YzsgZXh0ZXJuIF9fdHlwZW9m IChfX21icnRvd2MpIF9fbWJydG93YyBfX2FzbV9fICgiIiAiX19HSV9fX21icnRvd2MiKSBfX2F0 dHJpYnV0ZV9fICgodmlzaWJpbGl0eSAoImhpZGRlbiIpKSk7CmV4dGVybiBfX3R5cGVvZiAoX19t YnJsZW4pIF9fR0lfX19tYnJsZW47IGV4dGVybiBfX3R5cGVvZiAoX19tYnJsZW4pIF9fbWJybGVu IF9fYXNtX18gKCIiICJfX0dJX19fbWJybGVuIikgX19hdHRyaWJ1dGVfXyAoKHZpc2liaWxpdHkg KCJoaWRkZW4iKSkpOwpleHRlcm4gc2l6ZV90IF9fd2NydG9tYiAoY2hhciAqX19yZXN0cmljdCBf X3MsIHdjaGFyX3QgX193YywKICAgICAgICAgICAgICAgICAgICAgICAgIF9fbWJzdGF0ZV90ICpf X3Jlc3RyaWN0IF9fcHMpOwpleHRlcm4gc2l6ZV90IF9fbWJzcnRvd2NzICh3Y2hhcl90ICpfX3Jl c3RyaWN0IF9fZHN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKipf X3Jlc3RyaWN0IF9fc3JjLAogICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19sZW4s IF9fbWJzdGF0ZV90ICpfX3Jlc3RyaWN0IF9fcHMpOwpleHRlcm4gc2l6ZV90IF9fd2NzcnRvbWJz IChjaGFyICpfX3Jlc3RyaWN0IF9fZHN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICBfX2Nv bnN0IHdjaGFyX3QgKipfX3Jlc3RyaWN0IF9fc3JjLAogICAgICAgICAgICAgICAgICAgICAgICAg ICBzaXplX3QgX19sZW4sIF9fbWJzdGF0ZV90ICpfX3Jlc3RyaWN0IF9fcHMpOwpleHRlcm4gc2l6 ZV90IF9fbWJzbnJ0b3djcyAod2NoYXJfdCAqX19yZXN0cmljdCBfX2RzdCwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqKl9fcmVzdHJpY3QgX19zcmMsIHNpemVfdCBf X25tYywKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX2xlbiwgX19tYnN0YXRl X3QgKl9fcmVzdHJpY3QgX19wcyk7CmV4dGVybiBzaXplX3QgX193Y3NucnRvbWJzIChjaGFyICpf X3Jlc3RyaWN0IF9fZHN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCB3Y2hh cl90ICoqX19yZXN0cmljdCBfX3NyYywKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVf dCBfX253Yywgc2l6ZV90IF9fbGVuLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgX19tYnN0 YXRlX3QgKl9fcmVzdHJpY3QgX19wcyk7CmV4dGVybiB3Y2hhcl90ICpfX3djcGNweSAod2NoYXJf dCAqX19kZXN0LCBfX2NvbnN0IHdjaGFyX3QgKl9fc3JjKTsKZXh0ZXJuIHdjaGFyX3QgKl9fd2Nw bmNweSAod2NoYXJfdCAqX19kZXN0LCBfX2NvbnN0IHdjaGFyX3QgKl9fc3JjLAogICAgICAgICAg ICAgICAgICAgICAgICAgICBzaXplX3QgX19uKTsKZXh0ZXJuIHdjaGFyX3QgKl9fd21lbWNweSAo d2NoYXJfdCAqX19zMSwgX19jb25zdCB3Y2hhcl90ICpzMiwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgc2l6ZV90IF9fbik7CmV4dGVybiB3Y2hhcl90ICpfX3dtZW1wY3B5ICh3Y2hhcl90ICpf X3Jlc3RyaWN0IF9fczEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHdjaGFy X3QgKl9fcmVzdHJpY3QgX19zMiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBf X24pOwpleHRlcm4gd2NoYXJfdCAqX193bWVtbW92ZSAod2NoYXJfdCAqX19zMSwgX19jb25zdCB3 Y2hhcl90ICpfX3MyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IF9fbik7CmV4 dGVybiB3Y2hhcl90ICpfX3djc2Nocm51bCAoX19jb25zdCB3Y2hhcl90ICpfX3MsIHdjaGFyX3Qg X193YykKICAgICBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCmV4dGVybiBpbnQgX192Zndz Y2FuZiAoX19GSUxFICpfX3Jlc3RyaWN0IF9fcywKICAgICAgICAgICAgICAgICAgICAgICBfX2Nv bnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19mb3JtYXQsCiAgICAgICAgICAgICAgICAgICAgICAg X19nbnVjX3ZhX2xpc3QgX19hcmcpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIDsKZXh0ZXJuIGludCBfX3Zzd3ByaW50ZiAod2NoYXJfdCAq X19yZXN0cmljdCBfX3MsIHNpemVfdCBfX24sCiAgICAgICAgICAgICAgICAgICAgICAgIF9fY29u c3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX2Zvcm1hdCwKICAgICAgICAgICAgICAgICAgICAgICAg X19nbnVjX3ZhX2xpc3QgX19hcmcpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgOwpleHRlcm4gaW50IF9fZndwcmludGYgKF9fRklMRSAq X19yZXN0cmljdCBfX3MsCiAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCB3Y2hhcl90ICpf X3Jlc3RyaWN0IF9fZm9ybWF0LCAuLi4pCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgOwpleHRlcm4gaW50IF9fdmZ3cHJpbnRmIChfX0ZJ TEUgKl9fcmVzdHJpY3QgX19zLAogICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHdjaGFy X3QgKl9fcmVzdHJpY3QgX19mb3JtYXQsCiAgICAgICAgICAgICAgICAgICAgICAgIF9fZ251Y192 YV9saXN0IF9fYXJnKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIDsKCgoKZXh0ZXJuIHNpemVfdCBfX21ic3J0b3djc19sICh3Y2hhcl90 ICpkc3QsIGNvbnN0IGNoYXIgKipzcmMsIHNpemVfdCBsZW4sCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgbWJzdGF0ZV90ICpwcywgX19sb2NhbGVfdCBsKSBfX2F0dHJpYnV0ZV9fICgodmlz aWJpbGl0eSAoImhpZGRlbiIpKSk7CiMgMjggInZmcHJpbnRmLmMiIDIKIyAxICIuLi9saW51eHRo cmVhZHMvc3lzZGVwcy9wdGhyZWFkL2JpdHMvbGliYy1sb2NrLmgiIDEKIyAyNCAiLi4vbGludXh0 aHJlYWRzL3N5c2RlcHMvcHRocmVhZC9iaXRzL2xpYmMtbG9jay5oIgojIDEgIi4uL2luY2x1ZGUv cHRocmVhZC5oIiAxCiMgMSAiLi4vbGludXh0aHJlYWRzL3N5c2RlcHMvcHRocmVhZC9wdGhyZWFk LmgiIDEKIyAyMCAiLi4vbGludXh0aHJlYWRzL3N5c2RlcHMvcHRocmVhZC9wdGhyZWFkLmgiCiMg MSAiLi4vaW5jbHVkZS9zY2hlZC5oIiAxCgojIDEgIi4uL3Bvc2l4L3NjaGVkLmgiIDEKIyAzMiAi Li4vcG9zaXgvc2NoZWQuaCIKIyAxICIuLi9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9iaXRzL3Nj aGVkLmgiIDEKIyA0NyAiLi4vc3lzZGVwcy91bml4L3N5c3YvbGludXgvYml0cy9zY2hlZC5oIgpz dHJ1Y3Qgc2NoZWRfcGFyYW0KICB7CiAgICBpbnQgX19zY2hlZF9wcmlvcml0eTsKICB9OwoKCgoK CmV4dGVybiBpbnQgY2xvbmUgKGludCAoKl9fZm4pICh2b2lkICpfX2FyZyksIHZvaWQgKl9fY2hp bGRfc3RhY2ssCiAgICAgICAgICAgICAgICAgIGludCBfX2ZsYWdzLCB2b2lkICpfX2FyZykgOwoK CgojIDMzICIuLi9wb3NpeC9zY2hlZC5oIiAyCgoKCgoKCgpleHRlcm4gaW50IHNjaGVkX3NldHBh cmFtIChfX3BpZF90IF9fcGlkLCBfX2NvbnN0IHN0cnVjdCBzY2hlZF9wYXJhbSAqX19wYXJhbSkK ICAgICA7CgoKZXh0ZXJuIGludCBzY2hlZF9nZXRwYXJhbSAoX19waWRfdCBfX3BpZCwgc3RydWN0 IHNjaGVkX3BhcmFtICpfX3BhcmFtKSA7CgoKZXh0ZXJuIGludCBzY2hlZF9zZXRzY2hlZHVsZXIg KF9fcGlkX3QgX19waWQsIGludCBfX3BvbGljeSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIF9fY29uc3Qgc3RydWN0IHNjaGVkX3BhcmFtICpfX3BhcmFtKSA7CgoKZXh0ZXJuIGludCBz Y2hlZF9nZXRzY2hlZHVsZXIgKF9fcGlkX3QgX19waWQpIDsKCgpleHRlcm4gaW50IHNjaGVkX3lp ZWxkICh2b2lkKSA7CgoKZXh0ZXJuIGludCBzY2hlZF9nZXRfcHJpb3JpdHlfbWF4IChpbnQgX19h bGdvcml0aG0pIDsKCgpleHRlcm4gaW50IHNjaGVkX2dldF9wcmlvcml0eV9taW4gKGludCBfX2Fs Z29yaXRobSkgOwoKCmV4dGVybiBpbnQgc2NoZWRfcnJfZ2V0X2ludGVydmFsIChfX3BpZF90IF9f cGlkLCBzdHJ1Y3QgdGltZXNwZWMgKl9fdCkgOwoKCgoKZXh0ZXJuIGludCBzY2hlZF9zZXRhZmZp bml0eSAoX19waWRfdCBfX3BpZCwgdW5zaWduZWQgbG9uZyBpbnQgX19sZW4sCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgaW50ICpfX21hc2spIDsKCgpleHRlcm4g aW50IHNjaGVkX2dldGFmZmluaXR5IChfX3BpZF90IF9fcGlkLCB1bnNpZ25lZCBsb25nIGludCBf X2xlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBpbnQgKl9f bWFzaykgOwoKCgojIDMgIi4uL2luY2x1ZGUvc2NoZWQuaCIgMgoKCmV4dGVybiBpbnQgX19zY2hl ZF9zZXRwYXJhbSAoX19waWRfdCBfX3BpZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBf X2NvbnN0IHN0cnVjdCBzY2hlZF9wYXJhbSAqX19wYXJhbSk7CmV4dGVybiBpbnQgX19zY2hlZF9n ZXRwYXJhbSAoX19waWRfdCBfX3BpZCwgc3RydWN0IHNjaGVkX3BhcmFtICpfX3BhcmFtKTsKZXh0 ZXJuIGludCBfX3NjaGVkX3NldHNjaGVkdWxlciAoX19waWRfdCBfX3BpZCwgaW50IF9fcG9saWN5 LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHN0cnVjdCBzY2hlZF9w YXJhbSAqX19wYXJhbSk7CmV4dGVybiBfX3R5cGVvZiAoX19zY2hlZF9zZXRzY2hlZHVsZXIpIF9f R0lfX19zY2hlZF9zZXRzY2hlZHVsZXI7IGV4dGVybiBfX3R5cGVvZiAoX19zY2hlZF9zZXRzY2hl ZHVsZXIpIF9fc2NoZWRfc2V0c2NoZWR1bGVyIF9fYXNtX18gKCIiICJfX0dJX19fc2NoZWRfc2V0 c2NoZWR1bGVyIikgX19hdHRyaWJ1dGVfXyAoKHZpc2liaWxpdHkgKCJoaWRkZW4iKSkpOwpleHRl cm4gaW50IF9fc2NoZWRfZ2V0c2NoZWR1bGVyIChfX3BpZF90IF9fcGlkKTsKZXh0ZXJuIGludCBf X3NjaGVkX3lpZWxkICh2b2lkKTsKZXh0ZXJuIGludCBfX3NjaGVkX2dldF9wcmlvcml0eV9tYXgg KGludCBfX2FsZ29yaXRobSk7CmV4dGVybiBpbnQgX19zY2hlZF9nZXRfcHJpb3JpdHlfbWluIChp bnQgX19hbGdvcml0aG0pOwpleHRlcm4gaW50IF9fc2NoZWRfcnJfZ2V0X2ludGVydmFsIChfX3Bp ZF90IF9fcGlkLCBzdHJ1Y3QgdGltZXNwZWMgKl9fdCk7CgoKZXh0ZXJuIGludCBfX2Nsb25lIChp bnQgKCpfX2ZuKSAodm9pZCAqX19hcmcpLCB2b2lkICpfX2NoaWxkX3N0YWNrLAogICAgICAgICAg ICAgICAgICAgIGludCBfX2ZsYWdzLCB2b2lkICpfX2FyZywgLi4uKTsKZXh0ZXJuIGludCBfX2Ns b25lMiAoaW50ICgqX19mbikgKHZvaWQgKl9fYXJnKSwgdm9pZCAqX19jaGlsZF9zdGFja19iYXNl LAogICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19jaGlsZF9zdGFja19zaXplLCBpbnQgX19m bGFncywgdm9pZCAqX19hcmcpOwojIDIxICIuLi9saW51eHRocmVhZHMvc3lzZGVwcy9wdGhyZWFk L3B0aHJlYWQuaCIgMgoKCgojIDEgIi4uL2luY2x1ZGUvc2lnbmFsLmgiIDEKCgojIDEgIi4uL3Np Z25hbC9zaWduYWwuaCIgMQojIDMxICIuLi9zaWduYWwvc2lnbmFsLmgiCgoKIyAxICIuLi9zeXNk ZXBzL3VuaXgvc3lzdi9saW51eC9iaXRzL3NpZ3NldC5oIiAxCiMgMzQgIi4uL3NpZ25hbC9zaWdu YWwuaCIgMgojIDM3OCAiLi4vc2lnbmFsL3NpZ25hbC5oIgoKIyA0ICIuLi9pbmNsdWRlL3NpZ25h bC5oIiAyCiMgMjUgIi4uL2xpbnV4dGhyZWFkcy9zeXNkZXBzL3B0aHJlYWQvcHRocmVhZC5oIiAy CiMgMSAiLi4vbGludXh0aHJlYWRzL3N5c2RlcHMvcHRocmVhZC9iaXRzL3B0aHJlYWR0eXBlcy5o IiAxCiMgMjYgIi4uL2xpbnV4dGhyZWFkcy9zeXNkZXBzL3B0aHJlYWQvcHRocmVhZC5oIiAyCiMg MSAiLi4vbGludXh0aHJlYWRzL3N5c2RlcHMvcHRocmVhZC9iaXRzL2luaXRzcGluLmgiIDEKIyAy NyAiLi4vbGludXh0aHJlYWRzL3N5c2RlcHMvcHRocmVhZC9wdGhyZWFkLmgiIDIKCgoKIyA1OSAi Li4vbGludXh0aHJlYWRzL3N5c2RlcHMvcHRocmVhZC9wdGhyZWFkLmgiCmVudW0KewogIFBUSFJF QURfQ1JFQVRFX0pPSU5BQkxFLAoKICBQVEhSRUFEX0NSRUFURV9ERVRBQ0hFRAoKfTsKCmVudW0K ewogIFBUSFJFQURfSU5IRVJJVF9TQ0hFRCwKCiAgUFRIUkVBRF9FWFBMSUNJVF9TQ0hFRAoKfTsK CmVudW0KewogIFBUSFJFQURfU0NPUEVfU1lTVEVNLAoKICBQVEhSRUFEX1NDT1BFX1BST0NFU1MK Cn07CgplbnVtCnsKICBQVEhSRUFEX01VVEVYX1RJTUVEX05QLAogIFBUSFJFQURfTVVURVhfUkVD VVJTSVZFX05QLAogIFBUSFJFQURfTVVURVhfRVJST1JDSEVDS19OUCwKICBQVEhSRUFEX01VVEVY X0FEQVBUSVZFX05QCgogICwKICBQVEhSRUFEX01VVEVYX05PUk1BTCA9IFBUSFJFQURfTVVURVhf VElNRURfTlAsCiAgUFRIUkVBRF9NVVRFWF9SRUNVUlNJVkUgPSBQVEhSRUFEX01VVEVYX1JFQ1VS U0lWRV9OUCwKICBQVEhSRUFEX01VVEVYX0VSUk9SQ0hFQ0sgPSBQVEhSRUFEX01VVEVYX0VSUk9S Q0hFQ0tfTlAsCiAgUFRIUkVBRF9NVVRFWF9ERUZBVUxUID0gUFRIUkVBRF9NVVRFWF9OT1JNQUwK CgoKICAsIFBUSFJFQURfTVVURVhfRkFTVF9OUCA9IFBUSFJFQURfTVVURVhfQURBUFRJVkVfTlAK Cn07CgplbnVtCnsKICBQVEhSRUFEX1BST0NFU1NfUFJJVkFURSwKCiAgUFRIUkVBRF9QUk9DRVNT X1NIQVJFRAoKfTsKCgplbnVtCnsKICBQVEhSRUFEX1JXTE9DS19QUkVGRVJfUkVBREVSX05QLAog IFBUSFJFQURfUldMT0NLX1BSRUZFUl9XUklURVJfTlAsCiAgUFRIUkVBRF9SV0xPQ0tfUFJFRkVS X1dSSVRFUl9OT05SRUNVUlNJVkVfTlAsCiAgUFRIUkVBRF9SV0xPQ0tfREVGQVVMVF9OUCA9IFBU SFJFQURfUldMT0NLX1BSRUZFUl9XUklURVJfTlAKfTsKIyAxMzEgIi4uL2xpbnV4dGhyZWFkcy9z eXNkZXBzL3B0aHJlYWQvcHRocmVhZC5oIgpzdHJ1Y3QgX3B0aHJlYWRfY2xlYW51cF9idWZmZXIK ewogIHZvaWQgKCpfX3JvdXRpbmUpICh2b2lkICopOwogIHZvaWQgKl9fYXJnOwogIGludCBfX2Nh bmNlbHR5cGU7CiAgc3RydWN0IF9wdGhyZWFkX2NsZWFudXBfYnVmZmVyICpfX3ByZXY7Cn07CgoK CmVudW0KewogIFBUSFJFQURfQ0FOQ0VMX0VOQUJMRSwKCiAgUFRIUkVBRF9DQU5DRUxfRElTQUJM RQoKfTsKZW51bQp7CiAgUFRIUkVBRF9DQU5DRUxfREVGRVJSRUQsCgogIFBUSFJFQURfQ0FOQ0VM X0FTWU5DSFJPTk9VUwoKfTsKIyAxNjMgIi4uL2xpbnV4dGhyZWFkcy9zeXNkZXBzL3B0aHJlYWQv cHRocmVhZC5oIgpleHRlcm4gaW50IHB0aHJlYWRfY3JlYXRlIChwdGhyZWFkX3QgKl9fcmVzdHJp Y3QgX190aHJlYWRwLAogICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHB0aHJlYWRf YXR0cl90ICpfX3Jlc3RyaWN0IF9fYXR0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9p ZCAqKCpfX3N0YXJ0X3JvdXRpbmUpICh2b2lkICopLAogICAgICAgICAgICAgICAgICAgICAgICAg ICB2b2lkICpfX3Jlc3RyaWN0IF9fYXJnKSA7CgoKZXh0ZXJuIHB0aHJlYWRfdCBwdGhyZWFkX3Nl bGYgKHZvaWQpIDsKCgpleHRlcm4gaW50IHB0aHJlYWRfZXF1YWwgKHB0aHJlYWRfdCBfX3RocmVh ZDEsIHB0aHJlYWRfdCBfX3RocmVhZDIpIDsKCgpleHRlcm4gdm9pZCBwdGhyZWFkX2V4aXQgKHZv aWQgKl9fcmV0dmFsKQogICAgIF9fYXR0cmlidXRlX18gKChfX25vcmV0dXJuX18pKTsKCgoKCmV4 dGVybiBpbnQgcHRocmVhZF9qb2luIChwdGhyZWFkX3QgX190aCwgdm9pZCAqKl9fdGhyZWFkX3Jl dHVybikgOwoKCgoKCmV4dGVybiBpbnQgcHRocmVhZF9kZXRhY2ggKHB0aHJlYWRfdCBfX3RoKSA7 CgoKCgoKCgpleHRlcm4gaW50IHB0aHJlYWRfYXR0cl9pbml0IChwdGhyZWFkX2F0dHJfdCAqX19h dHRyKSA7CgoKZXh0ZXJuIGludCBwdGhyZWFkX2F0dHJfZGVzdHJveSAocHRocmVhZF9hdHRyX3Qg Kl9fYXR0cikgOwoKCmV4dGVybiBpbnQgcHRocmVhZF9hdHRyX3NldGRldGFjaHN0YXRlIChwdGhy ZWFkX2F0dHJfdCAqX19hdHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgaW50IF9fZGV0YWNoc3RhdGUpIDsKCgpleHRlcm4gaW50IHB0aHJlYWRfYXR0cl9nZXRkZXRh Y2hzdGF0ZSAoX19jb25zdCBwdGhyZWFkX2F0dHJfdCAqX19hdHRyLAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgaW50ICpfX2RldGFjaHN0YXRlKSA7CgoKZXh0ZXJuIGlu dCBwdGhyZWFkX2F0dHJfc2V0c2NoZWRwYXJhbSAocHRocmVhZF9hdHRyX3QgKl9fcmVzdHJpY3Qg X19hdHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHN0 cnVjdCBzY2hlZF9wYXJhbSAqX19yZXN0cmljdAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBfX3BhcmFtKSA7CgoKZXh0ZXJuIGludCBwdGhyZWFkX2F0dHJfZ2V0c2NoZWRw YXJhbSAoX19jb25zdCBwdGhyZWFkX2F0dHJfdCAqX19yZXN0cmljdAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBfX2F0dHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHN0cnVjdCBzY2hlZF9wYXJhbSAqX19yZXN0cmljdCBfX3BhcmFtKQogICAg IDsKCgpleHRlcm4gaW50IHB0aHJlYWRfYXR0cl9zZXRzY2hlZHBvbGljeSAocHRocmVhZF9hdHRy X3QgKl9fYXR0ciwgaW50IF9fcG9saWN5KQogICAgIDsKCgpleHRlcm4gaW50IHB0aHJlYWRfYXR0 cl9nZXRzY2hlZHBvbGljeSAoX19jb25zdCBwdGhyZWFkX2F0dHJfdCAqX19yZXN0cmljdAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19hdHRyLCBpbnQgKl9fcmVzdHJp Y3QgX19wb2xpY3kpCiAgICAgOwoKCmV4dGVybiBpbnQgcHRocmVhZF9hdHRyX3NldGluaGVyaXRz Y2hlZCAocHRocmVhZF9hdHRyX3QgKl9fYXR0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBpbnQgX19pbmhlcml0KSA7CgoKZXh0ZXJuIGludCBwdGhyZWFkX2F0dHJf Z2V0aW5oZXJpdHNjaGVkIChfX2NvbnN0IHB0aHJlYWRfYXR0cl90ICpfX3Jlc3RyaWN0CiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19hdHRyLCBpbnQgKl9fcmVzdHJp Y3QgX19pbmhlcml0KQogICAgIDsKCgpleHRlcm4gaW50IHB0aHJlYWRfYXR0cl9zZXRzY29wZSAo cHRocmVhZF9hdHRyX3QgKl9fYXR0ciwgaW50IF9fc2NvcGUpCiAgICAgOwoKCmV4dGVybiBpbnQg cHRocmVhZF9hdHRyX2dldHNjb3BlIChfX2NvbnN0IHB0aHJlYWRfYXR0cl90ICpfX3Jlc3RyaWN0 IF9fYXR0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqX19yZXN0cmlj dCBfX3Njb3BlKSA7CgoKCmV4dGVybiBpbnQgcHRocmVhZF9hdHRyX3NldGd1YXJkc2l6ZSAocHRo cmVhZF9hdHRyX3QgKl9fYXR0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBzaXplX3QgX19ndWFyZHNpemUpIDsKCgpleHRlcm4gaW50IHB0aHJlYWRfYXR0cl9nZXRndWFy ZHNpemUgKF9fY29uc3QgcHRocmVhZF9hdHRyX3QgKl9fcmVzdHJpY3QKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBfX2F0dHIsIHNpemVfdCAqX19yZXN0cmljdCBfX2d1YXJk c2l6ZSkKICAgICA7CgoKCgoKCmV4dGVybiBpbnQgcHRocmVhZF9hdHRyX3NldHN0YWNrYWRkciAo cHRocmVhZF9hdHRyX3QgKl9fYXR0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICB2b2lkICpfX3N0YWNrYWRkcikgOwoKCmV4dGVybiBpbnQgcHRocmVhZF9hdHRyX2dldHN0 YWNrYWRkciAoX19jb25zdCBwdGhyZWFkX2F0dHJfdCAqX19yZXN0cmljdAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIF9fYXR0ciwgdm9pZCAqKl9fcmVzdHJpY3QgX19zdGFj a2FkZHIpCiAgICAgOwoKCgoKCmV4dGVybiBpbnQgcHRocmVhZF9hdHRyX3NldHN0YWNrIChwdGhy ZWFkX2F0dHJfdCAqX19hdHRyLCB2b2lkICpfX3N0YWNrYWRkciwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHNpemVfdCBfX3N0YWNrc2l6ZSkgOwoKCmV4dGVybiBpbnQgcHRocmVh ZF9hdHRyX2dldHN0YWNrIChfX2NvbnN0IHB0aHJlYWRfYXR0cl90ICpfX3Jlc3RyaWN0IF9fYXR0 ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKipfX3Jlc3RyaWN0IF9f c3RhY2thZGRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICpfX3Jl c3RyaWN0IF9fc3RhY2tzaXplKSA7CgoKCgoKZXh0ZXJuIGludCBwdGhyZWFkX2F0dHJfc2V0c3Rh Y2tzaXplIChwdGhyZWFkX2F0dHJfdCAqX19hdHRyLAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHNpemVfdCBfX3N0YWNrc2l6ZSkgOwoKCmV4dGVybiBpbnQgcHRocmVhZF9h dHRyX2dldHN0YWNrc2l6ZSAoX19jb25zdCBwdGhyZWFkX2F0dHJfdCAqX19yZXN0cmljdAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fYXR0ciwgc2l6ZV90ICpfX3Jlc3Ry aWN0IF9fc3RhY2tzaXplKQogICAgIDsKCgoKZXh0ZXJuIGludCBwdGhyZWFkX2dldGF0dHJfbnAg KHB0aHJlYWRfdCBfX3RoLCBwdGhyZWFkX2F0dHJfdCAqX19hdHRyKSA7CgoKCgoKCmV4dGVybiBp bnQgcHRocmVhZF9zZXRzY2hlZHBhcmFtIChwdGhyZWFkX3QgX190YXJnZXRfdGhyZWFkLCBpbnQg X19wb2xpY3ksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHN0cnVj dCBzY2hlZF9wYXJhbSAqX19wYXJhbSkKICAgICA7CgoKZXh0ZXJuIGludCBwdGhyZWFkX2dldHNj aGVkcGFyYW0gKHB0aHJlYWRfdCBfX3RhcmdldF90aHJlYWQsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBpbnQgKl9fcmVzdHJpY3QgX19wb2xpY3ksCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc2NoZWRfcGFyYW0gKl9fcmVzdHJpY3QgX19wYXJhbSkK ICAgICA7CgoKCmV4dGVybiBpbnQgcHRocmVhZF9nZXRjb25jdXJyZW5jeSAodm9pZCkgOwoKCmV4 dGVybiBpbnQgcHRocmVhZF9zZXRjb25jdXJyZW5jeSAoaW50IF9fbGV2ZWwpIDsKCgoKCgoKCmV4 dGVybiBpbnQgcHRocmVhZF95aWVsZCAodm9pZCkgOwoKCgoKCgpleHRlcm4gaW50IHB0aHJlYWRf bXV0ZXhfaW5pdCAocHRocmVhZF9tdXRleF90ICpfX3Jlc3RyaWN0IF9fbXV0ZXgsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHB0aHJlYWRfbXV0ZXhhdHRyX3QgKl9fcmVz dHJpY3QKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbXV0ZXhfYXR0cikgOwoKCmV4 dGVybiBpbnQgcHRocmVhZF9tdXRleF9kZXN0cm95IChwdGhyZWFkX211dGV4X3QgKl9fbXV0ZXgp IDsKCgpleHRlcm4gaW50IHB0aHJlYWRfbXV0ZXhfdHJ5bG9jayAocHRocmVhZF9tdXRleF90ICpf X211dGV4KSA7CgoKZXh0ZXJuIGludCBwdGhyZWFkX211dGV4X2xvY2sgKHB0aHJlYWRfbXV0ZXhf dCAqX19tdXRleCkgOwoKCgpleHRlcm4gaW50IHB0aHJlYWRfbXV0ZXhfdGltZWRsb2NrIChwdGhy ZWFkX211dGV4X3QgKl9fcmVzdHJpY3QgX19tdXRleCwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgX19jb25zdCBzdHJ1Y3QgdGltZXNwZWMgKl9fcmVzdHJpY3QKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgX19hYnN0aW1lKSA7CgoKCmV4dGVybiBpbnQgcHRo cmVhZF9tdXRleF91bmxvY2sgKHB0aHJlYWRfbXV0ZXhfdCAqX19tdXRleCkgOwoKCgoKCgpleHRl cm4gaW50IHB0aHJlYWRfbXV0ZXhhdHRyX2luaXQgKHB0aHJlYWRfbXV0ZXhhdHRyX3QgKl9fYXR0 cikgOwoKCmV4dGVybiBpbnQgcHRocmVhZF9tdXRleGF0dHJfZGVzdHJveSAocHRocmVhZF9tdXRl eGF0dHJfdCAqX19hdHRyKSA7CgoKZXh0ZXJuIGludCBwdGhyZWFkX211dGV4YXR0cl9nZXRwc2hh cmVkIChfX2NvbnN0IHB0aHJlYWRfbXV0ZXhhdHRyX3QgKgogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIF9fcmVzdHJpY3QgX19hdHRyLAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGludCAqX19yZXN0cmljdCBfX3BzaGFyZWQpIDsKCgpleHRl cm4gaW50IHB0aHJlYWRfbXV0ZXhhdHRyX3NldHBzaGFyZWQgKHB0aHJlYWRfbXV0ZXhhdHRyX3Qg Kl9fYXR0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19w c2hhcmVkKSA7CgoKCgoKZXh0ZXJuIGludCBwdGhyZWFkX211dGV4YXR0cl9zZXR0eXBlIChwdGhy ZWFkX211dGV4YXR0cl90ICpfX2F0dHIsIGludCBfX2tpbmQpCiAgICAgOwoKCmV4dGVybiBpbnQg cHRocmVhZF9tdXRleGF0dHJfZ2V0dHlwZSAoX19jb25zdCBwdGhyZWFkX211dGV4YXR0cl90ICpf X3Jlc3RyaWN0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19hdHRyLCBp bnQgKl9fcmVzdHJpY3QgX19raW5kKSA7CgoKCgoKCgpleHRlcm4gaW50IHB0aHJlYWRfY29uZF9p bml0IChwdGhyZWFkX2NvbmRfdCAqX19yZXN0cmljdCBfX2NvbmQsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIF9fY29uc3QgcHRocmVhZF9jb25kYXR0cl90ICpfX3Jlc3RyaWN0CiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uZF9hdHRyKSA7CgoKZXh0ZXJuIGludCBwdGhy ZWFkX2NvbmRfZGVzdHJveSAocHRocmVhZF9jb25kX3QgKl9fY29uZCkgOwoKCmV4dGVybiBpbnQg cHRocmVhZF9jb25kX3NpZ25hbCAocHRocmVhZF9jb25kX3QgKl9fY29uZCkgOwoKCmV4dGVybiBp bnQgcHRocmVhZF9jb25kX2Jyb2FkY2FzdCAocHRocmVhZF9jb25kX3QgKl9fY29uZCkgOwoKCgpl eHRlcm4gaW50IHB0aHJlYWRfY29uZF93YWl0IChwdGhyZWFkX2NvbmRfdCAqX19yZXN0cmljdCBf X2NvbmQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB0aHJlYWRfbXV0ZXhfdCAqX19y ZXN0cmljdCBfX211dGV4KSA7CgoKCgoKZXh0ZXJuIGludCBwdGhyZWFkX2NvbmRfdGltZWR3YWl0 IChwdGhyZWFkX2NvbmRfdCAqX19yZXN0cmljdCBfX2NvbmQsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgcHRocmVhZF9tdXRleF90ICpfX3Jlc3RyaWN0IF9fbXV0ZXgsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBzdHJ1Y3QgdGltZXNwZWMgKl9f cmVzdHJpY3QKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2Fic3RpbWUpIDsK CgoKCmV4dGVybiBpbnQgcHRocmVhZF9jb25kYXR0cl9pbml0IChwdGhyZWFkX2NvbmRhdHRyX3Qg Kl9fYXR0cikgOwoKCmV4dGVybiBpbnQgcHRocmVhZF9jb25kYXR0cl9kZXN0cm95IChwdGhyZWFk X2NvbmRhdHRyX3QgKl9fYXR0cikgOwoKCmV4dGVybiBpbnQgcHRocmVhZF9jb25kYXR0cl9nZXRw c2hhcmVkIChfX2NvbnN0IHB0aHJlYWRfY29uZGF0dHJfdCAqCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBfX3Jlc3RyaWN0IF9fYXR0ciwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGludCAqX19yZXN0cmljdCBfX3BzaGFyZWQpIDsKCgpleHRl cm4gaW50IHB0aHJlYWRfY29uZGF0dHJfc2V0cHNoYXJlZCAocHRocmVhZF9jb25kYXR0cl90ICpf X2F0dHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19wc2hh cmVkKSA7CgoKCgoKCgpleHRlcm4gaW50IHB0aHJlYWRfcndsb2NrX2luaXQgKHB0aHJlYWRfcnds b2NrX3QgKl9fcmVzdHJpY3QgX19yd2xvY2ssCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgX19jb25zdCBwdGhyZWFkX3J3bG9ja2F0dHJfdCAqX19yZXN0cmljdAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIF9fYXR0cikgOwoKCmV4dGVybiBpbnQgcHRocmVhZF9yd2xvY2tf ZGVzdHJveSAocHRocmVhZF9yd2xvY2tfdCAqX19yd2xvY2spIDsKCgpleHRlcm4gaW50IHB0aHJl YWRfcndsb2NrX3JkbG9jayAocHRocmVhZF9yd2xvY2tfdCAqX19yd2xvY2spIDsKCgpleHRlcm4g aW50IHB0aHJlYWRfcndsb2NrX3RyeXJkbG9jayAocHRocmVhZF9yd2xvY2tfdCAqX19yd2xvY2sp IDsKCgoKZXh0ZXJuIGludCBwdGhyZWFkX3J3bG9ja190aW1lZHJkbG9jayAocHRocmVhZF9yd2xv Y2tfdCAqX19yZXN0cmljdCBfX3J3bG9jaywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgX19jb25zdCBzdHJ1Y3QgdGltZXNwZWMgKl9fcmVzdHJpY3QKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgX19hYnN0aW1lKSA7CgoKCmV4dGVybiBpbnQgcHRo cmVhZF9yd2xvY2tfd3Jsb2NrIChwdGhyZWFkX3J3bG9ja190ICpfX3J3bG9jaykgOwoKCmV4dGVy biBpbnQgcHRocmVhZF9yd2xvY2tfdHJ5d3Jsb2NrIChwdGhyZWFkX3J3bG9ja190ICpfX3J3bG9j aykgOwoKCgpleHRlcm4gaW50IHB0aHJlYWRfcndsb2NrX3RpbWVkd3Jsb2NrIChwdGhyZWFkX3J3 bG9ja190ICpfX3Jlc3RyaWN0IF9fcndsb2NrLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBfX2NvbnN0IHN0cnVjdCB0aW1lc3BlYyAqX19yZXN0cmljdAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2Fic3RpbWUpIDsKCgoKZXh0ZXJuIGludCBw dGhyZWFkX3J3bG9ja191bmxvY2sgKHB0aHJlYWRfcndsb2NrX3QgKl9fcndsb2NrKSA7CgoKCgoK ZXh0ZXJuIGludCBwdGhyZWFkX3J3bG9ja2F0dHJfaW5pdCAocHRocmVhZF9yd2xvY2thdHRyX3Qg Kl9fYXR0cikgOwoKCmV4dGVybiBpbnQgcHRocmVhZF9yd2xvY2thdHRyX2Rlc3Ryb3kgKHB0aHJl YWRfcndsb2NrYXR0cl90ICpfX2F0dHIpIDsKCgpleHRlcm4gaW50IHB0aHJlYWRfcndsb2NrYXR0 cl9nZXRwc2hhcmVkIChfX2NvbnN0IHB0aHJlYWRfcndsb2NrYXR0cl90ICoKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19yZXN0cmljdCBfX2F0dHIsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqX19yZXN0cmljdCBfX3BzaGFy ZWQpIDsKCgpleHRlcm4gaW50IHB0aHJlYWRfcndsb2NrYXR0cl9zZXRwc2hhcmVkIChwdGhyZWFk X3J3bG9ja2F0dHJfdCAqX19hdHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBpbnQgX19wc2hhcmVkKSA7CgoKZXh0ZXJuIGludCBwdGhyZWFkX3J3bG9ja2F0dHJf Z2V0a2luZF9ucCAoX19jb25zdCBwdGhyZWFkX3J3bG9ja2F0dHJfdCAqX19hdHRyLAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKl9fcHJlZikgOwoKCmV4dGVy biBpbnQgcHRocmVhZF9yd2xvY2thdHRyX3NldGtpbmRfbnAgKHB0aHJlYWRfcndsb2NrYXR0cl90 ICpfX2F0dHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBf X3ByZWYpIDsKIyA1MDkgIi4uL2xpbnV4dGhyZWFkcy9zeXNkZXBzL3B0aHJlYWQvcHRocmVhZC5o IgpleHRlcm4gaW50IHB0aHJlYWRfc3Bpbl9pbml0IChwdGhyZWFkX3NwaW5sb2NrX3QgKl9fbG9j aywgaW50IF9fcHNoYXJlZCkKICAgICA7CgoKZXh0ZXJuIGludCBwdGhyZWFkX3NwaW5fZGVzdHJv eSAocHRocmVhZF9zcGlubG9ja190ICpfX2xvY2spIDsKCgpleHRlcm4gaW50IHB0aHJlYWRfc3Bp bl9sb2NrIChwdGhyZWFkX3NwaW5sb2NrX3QgKl9fbG9jaykgOwoKCmV4dGVybiBpbnQgcHRocmVh ZF9zcGluX3RyeWxvY2sgKHB0aHJlYWRfc3BpbmxvY2tfdCAqX19sb2NrKSA7CgoKZXh0ZXJuIGlu dCBwdGhyZWFkX3NwaW5fdW5sb2NrIChwdGhyZWFkX3NwaW5sb2NrX3QgKl9fbG9jaykgOwoKCgoK ZXh0ZXJuIGludCBwdGhyZWFkX2JhcnJpZXJfaW5pdCAocHRocmVhZF9iYXJyaWVyX3QgKl9fcmVz dHJpY3QgX19iYXJyaWVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0 IHB0aHJlYWRfYmFycmllcmF0dHJfdCAqX19yZXN0cmljdAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBfX2F0dHIsIHVuc2lnbmVkIGludCBfX2NvdW50KSA7CgpleHRlcm4gaW50IHB0 aHJlYWRfYmFycmllcl9kZXN0cm95IChwdGhyZWFkX2JhcnJpZXJfdCAqX19iYXJyaWVyKSA7Cgpl eHRlcm4gaW50IHB0aHJlYWRfYmFycmllcmF0dHJfaW5pdCAocHRocmVhZF9iYXJyaWVyYXR0cl90 ICpfX2F0dHIpIDsKCmV4dGVybiBpbnQgcHRocmVhZF9iYXJyaWVyYXR0cl9kZXN0cm95IChwdGhy ZWFkX2JhcnJpZXJhdHRyX3QgKl9fYXR0cikgOwoKZXh0ZXJuIGludCBwdGhyZWFkX2JhcnJpZXJh dHRyX2dldHBzaGFyZWQgKF9fY29uc3QgcHRocmVhZF9iYXJyaWVyYXR0cl90ICoKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fcmVzdHJpY3QgX19hdHRyLAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICpfX3Jlc3RyaWN0IF9f cHNoYXJlZCkgOwoKZXh0ZXJuIGludCBwdGhyZWFkX2JhcnJpZXJhdHRyX3NldHBzaGFyZWQgKHB0 aHJlYWRfYmFycmllcmF0dHJfdCAqX19hdHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgaW50IF9fcHNoYXJlZCkgOwoKZXh0ZXJuIGludCBwdGhyZWFkX2JhcnJp ZXJfd2FpdCAocHRocmVhZF9iYXJyaWVyX3QgKl9fYmFycmllcikgOwojIDU1NiAiLi4vbGludXh0 aHJlYWRzL3N5c2RlcHMvcHRocmVhZC9wdGhyZWFkLmgiCmV4dGVybiBpbnQgcHRocmVhZF9rZXlf Y3JlYXRlIChwdGhyZWFkX2tleV90ICpfX2tleSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHZvaWQgKCpfX2Rlc3RyX2Z1bmN0aW9uKSAodm9pZCAqKSkgOwoKCmV4dGVybiBpbnQgcHRo cmVhZF9rZXlfZGVsZXRlIChwdGhyZWFkX2tleV90IF9fa2V5KSA7CgoKZXh0ZXJuIGludCBwdGhy ZWFkX3NldHNwZWNpZmljIChwdGhyZWFkX2tleV90IF9fa2V5LAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIF9fY29uc3Qgdm9pZCAqX19wb2ludGVyKSA7CgoKZXh0ZXJuIHZvaWQgKnB0 aHJlYWRfZ2V0c3BlY2lmaWMgKHB0aHJlYWRfa2V5X3QgX19rZXkpIDsKIyA1NzYgIi4uL2xpbnV4 dGhyZWFkcy9zeXNkZXBzL3B0aHJlYWQvcHRocmVhZC5oIgpleHRlcm4gaW50IHB0aHJlYWRfb25j ZSAocHRocmVhZF9vbmNlX3QgKl9fb25jZV9jb250cm9sLAogICAgICAgICAgICAgICAgICAgICAg ICAgdm9pZCAoKl9faW5pdF9yb3V0aW5lKSAodm9pZCkpIDsKCgoKCgoKZXh0ZXJuIGludCBwdGhy ZWFkX3NldGNhbmNlbHN0YXRlIChpbnQgX19zdGF0ZSwgaW50ICpfX29sZHN0YXRlKSA7CgoKCmV4 dGVybiBpbnQgcHRocmVhZF9zZXRjYW5jZWx0eXBlIChpbnQgX190eXBlLCBpbnQgKl9fb2xkdHlw ZSkgOwoKCmV4dGVybiBpbnQgcHRocmVhZF9jYW5jZWwgKHB0aHJlYWRfdCBfX2NhbmNlbHRocmVh ZCkgOwoKCgoKZXh0ZXJuIHZvaWQgcHRocmVhZF90ZXN0Y2FuY2VsICh2b2lkKSA7CiMgNjEwICIu Li9saW51eHRocmVhZHMvc3lzZGVwcy9wdGhyZWFkL3B0aHJlYWQuaCIKZXh0ZXJuIHZvaWQgX3B0 aHJlYWRfY2xlYW51cF9wdXNoIChzdHJ1Y3QgX3B0aHJlYWRfY2xlYW51cF9idWZmZXIgKl9fYnVm ZmVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKCpfX3JvdXRpbmUp ICh2b2lkICopLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKl9fYXJn KSA7CgoKCgoKCgpleHRlcm4gdm9pZCBfcHRocmVhZF9jbGVhbnVwX3BvcCAoc3RydWN0IF9wdGhy ZWFkX2NsZWFudXBfYnVmZmVyICpfX2J1ZmZlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGludCBfX2V4ZWN1dGUpIDsKIyA2MzEgIi4uL2xpbnV4dGhyZWFkcy9zeXNkZXBzL3B0 aHJlYWQvcHRocmVhZC5oIgpleHRlcm4gdm9pZCBfcHRocmVhZF9jbGVhbnVwX3B1c2hfZGVmZXIg KHN0cnVjdCBfcHRocmVhZF9jbGVhbnVwX2J1ZmZlciAqX19idWZmZXIsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAoKl9fcm91dGluZSkgKHZvaWQgKiksCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqX19hcmcpIDsKIyA2 NDIgIi4uL2xpbnV4dGhyZWFkcy9zeXNkZXBzL3B0aHJlYWQvcHRocmVhZC5oIgpleHRlcm4gdm9p ZCBfcHRocmVhZF9jbGVhbnVwX3BvcF9yZXN0b3JlIChzdHJ1Y3QgX3B0aHJlYWRfY2xlYW51cF9i dWZmZXIgKl9fYnVmZmVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBpbnQgX19leGVjdXRlKSA7CgoKCgoKZXh0ZXJuIGludCBwdGhyZWFkX2dldGNwdWNsb2NraWQg KHB0aHJlYWRfdCBfX3RocmVhZF9pZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGNsb2NraWRfdCAqX19jbG9ja19pZCkgOwoKCgoKIyAxICIuLi9saW51eHRocmVhZHMvc3lzZGVw cy91bml4L3N5c3YvbGludXgvYml0cy9zaWd0aHJlYWQuaCIgMQojIDMxICIuLi9saW51eHRocmVh ZHMvc3lzZGVwcy91bml4L3N5c3YvbGludXgvYml0cy9zaWd0aHJlYWQuaCIKZXh0ZXJuIGludCBw dGhyZWFkX3NpZ21hc2sgKGludCBfX2hvdywKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9f Y29uc3QgX19zaWdzZXRfdCAqX19yZXN0cmljdCBfX25ld21hc2ssCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICBfX3NpZ3NldF90ICpfX3Jlc3RyaWN0IF9fb2xkbWFzayk7CgoKZXh0ZXJuIGlu dCBwdGhyZWFkX2tpbGwgKHB0aHJlYWRfdCBfX3RocmVhZGlkLCBpbnQgX19zaWdubykgOwojIDY1 NiAiLi4vbGludXh0aHJlYWRzL3N5c2RlcHMvcHRocmVhZC9wdGhyZWFkLmgiIDIKIyA2NzEgIi4u L2xpbnV4dGhyZWFkcy9zeXNkZXBzL3B0aHJlYWQvcHRocmVhZC5oIgpleHRlcm4gaW50IHB0aHJl YWRfYXRmb3JrICh2b2lkICgqX19wcmVwYXJlKSAodm9pZCksCiAgICAgICAgICAgICAgICAgICAg ICAgICAgIHZvaWQgKCpfX3BhcmVudCkgKHZvaWQpLAogICAgICAgICAgICAgICAgICAgICAgICAg ICB2b2lkICgqX19jaGlsZCkgKHZvaWQpKSA7CgoKCgpleHRlcm4gdm9pZCBwdGhyZWFkX2tpbGxf b3RoZXJfdGhyZWFkc19ucCAodm9pZCkgOwoKCiMgMiAiLi4vaW5jbHVkZS9wdGhyZWFkLmgiIDIK CgpleHRlcm4gdm9pZCBfX3B0aHJlYWRfaW5pdGlhbGl6ZSAodm9pZCkgX19hdHRyaWJ1dGVfXyAo KHdlYWspKTsKIyAyNSAiLi4vbGludXh0aHJlYWRzL3N5c2RlcHMvcHRocmVhZC9iaXRzL2xpYmMt bG9jay5oIiAyCgoKCnR5cGVkZWYgcHRocmVhZF9tdXRleF90IF9fbGliY19sb2NrX3Q7CnR5cGVk ZWYgc3RydWN0IHsgcHRocmVhZF9tdXRleF90IG11dGV4OyB9IF9fbGliY19sb2NrX3JlY3Vyc2l2 ZV90OwoKdHlwZWRlZiBwdGhyZWFkX3J3bG9ja190IF9fbGliY19yd2xvY2tfdDsKIyA0MiAiLi4v bGludXh0aHJlYWRzL3N5c2RlcHMvcHRocmVhZC9iaXRzL2xpYmMtbG9jay5oIgp0eXBlZGVmIHB0 aHJlYWRfa2V5X3QgX19saWJjX2tleV90OwojIDIyMSAiLi4vbGludXh0aHJlYWRzL3N5c2RlcHMv cHRocmVhZC9iaXRzL2xpYmMtbG9jay5oIgpleHRlcm4gaW50IF9fcHRocmVhZF9tdXRleF9pbml0 IChwdGhyZWFkX211dGV4X3QgKl9fbXV0ZXgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIF9fY29uc3QgcHRocmVhZF9tdXRleGF0dHJfdCAqX19tdXRleF9hdHRyKTsKCmV4dGVybiBp bnQgX19wdGhyZWFkX211dGV4X2Rlc3Ryb3kgKHB0aHJlYWRfbXV0ZXhfdCAqX19tdXRleCk7Cgpl eHRlcm4gaW50IF9fcHRocmVhZF9tdXRleF90cnlsb2NrIChwdGhyZWFkX211dGV4X3QgKl9fbXV0 ZXgpOwoKZXh0ZXJuIGludCBfX3B0aHJlYWRfbXV0ZXhfbG9jayAocHRocmVhZF9tdXRleF90ICpf X211dGV4KTsKCmV4dGVybiBpbnQgX19wdGhyZWFkX211dGV4X3VubG9jayAocHRocmVhZF9tdXRl eF90ICpfX211dGV4KTsKCmV4dGVybiBpbnQgX19wdGhyZWFkX211dGV4YXR0cl9pbml0IChwdGhy ZWFkX211dGV4YXR0cl90ICpfX2F0dHIpOwoKZXh0ZXJuIGludCBfX3B0aHJlYWRfbXV0ZXhhdHRy X2Rlc3Ryb3kgKHB0aHJlYWRfbXV0ZXhhdHRyX3QgKl9fYXR0cik7CgpleHRlcm4gaW50IF9fcHRo cmVhZF9tdXRleGF0dHJfc2V0dHlwZSAocHRocmVhZF9tdXRleGF0dHJfdCAqX19hdHRyLAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9fa2luZCk7CgoKZXh0ZXJu IGludCBfX3B0aHJlYWRfcndsb2NrX2luaXQgKHB0aHJlYWRfcndsb2NrX3QgKl9fcndsb2NrLAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBwdGhyZWFkX3J3bG9ja2F0 dHJfdCAqX19hdHRyKTsKCmV4dGVybiBpbnQgX19wdGhyZWFkX3J3bG9ja19kZXN0cm95IChwdGhy ZWFkX3J3bG9ja190ICpfX3J3bG9jayk7CgpleHRlcm4gaW50IF9fcHRocmVhZF9yd2xvY2tfcmRs b2NrIChwdGhyZWFkX3J3bG9ja190ICpfX3J3bG9jayk7CgpleHRlcm4gaW50IF9fcHRocmVhZF9y d2xvY2tfdHJ5cmRsb2NrIChwdGhyZWFkX3J3bG9ja190ICpfX3J3bG9jayk7CgpleHRlcm4gaW50 IF9fcHRocmVhZF9yd2xvY2tfd3Jsb2NrIChwdGhyZWFkX3J3bG9ja190ICpfX3J3bG9jayk7Cgpl eHRlcm4gaW50IF9fcHRocmVhZF9yd2xvY2tfdHJ5d3Jsb2NrIChwdGhyZWFkX3J3bG9ja190ICpf X3J3bG9jayk7CgpleHRlcm4gaW50IF9fcHRocmVhZF9yd2xvY2tfdW5sb2NrIChwdGhyZWFkX3J3 bG9ja190ICpfX3J3bG9jayk7CgoKZXh0ZXJuIGludCBfX3B0aHJlYWRfa2V5X2NyZWF0ZSAocHRo cmVhZF9rZXlfdCAqX19rZXksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQg KCpfX2Rlc3RyX2Z1bmN0aW9uKSAodm9pZCAqKSk7CgpleHRlcm4gaW50IF9fcHRocmVhZF9zZXRz cGVjaWZpYyAocHRocmVhZF9rZXlfdCBfX2tleSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIF9fY29uc3Qgdm9pZCAqX19wb2ludGVyKTsKCmV4dGVybiB2b2lkICpfX3B0aHJlYWRf Z2V0c3BlY2lmaWMgKHB0aHJlYWRfa2V5X3QgX19rZXkpOwoKZXh0ZXJuIGludCBfX3B0aHJlYWRf b25jZSAocHRocmVhZF9vbmNlX3QgKl9fb25jZV9jb250cm9sLAogICAgICAgICAgICAgICAgICAg ICAgICAgICB2b2lkICgqX19pbml0X3JvdXRpbmUpICh2b2lkKSk7CgpleHRlcm4gaW50IF9fcHRo cmVhZF9hdGZvcmsgKHZvaWQgKCpfX3ByZXBhcmUpICh2b2lkKSwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICB2b2lkICgqX19wYXJlbnQpICh2b2lkKSwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICB2b2lkICgqX19jaGlsZCkgKHZvaWQpKTsKIyAyNzggIi4uL2xpbnV4dGhyZWFkcy9z eXNkZXBzL3B0aHJlYWQvYml0cy9saWJjLWxvY2suaCIKIyAxICIuLi9zeXNkZXBzL2dlbmVyaWMv YnAtc3ltLmgiIDEKIyAyNzkgIi4uL2xpbnV4dGhyZWFkcy9zeXNkZXBzL3B0aHJlYWQvYml0cy9s aWJjLWxvY2suaCIgMgoKCgphc20gKCIud2VhayAiICJfX3B0aHJlYWRfbXV0ZXhfaW5pdCIpOwph c20gKCIud2VhayAiICJfX3B0aHJlYWRfbXV0ZXhfZGVzdHJveSIpOwphc20gKCIud2VhayAiICJf X3B0aHJlYWRfbXV0ZXhfbG9jayIpOwphc20gKCIud2VhayAiICJfX3B0aHJlYWRfbXV0ZXhfdHJ5 bG9jayIpOwphc20gKCIud2VhayAiICJfX3B0aHJlYWRfbXV0ZXhfdW5sb2NrIik7CmFzbSAoIi53 ZWFrICIgIl9fcHRocmVhZF9tdXRleGF0dHJfaW5pdCIpOwphc20gKCIud2VhayAiICJfX3B0aHJl YWRfbXV0ZXhhdHRyX2Rlc3Ryb3kiKTsKYXNtICgiLndlYWsgIiAiX19wdGhyZWFkX211dGV4YXR0 cl9zZXR0eXBlIik7CmFzbSAoIi53ZWFrICIgIl9fcHRocmVhZF9yd2xvY2tfaW5pdCIpOwphc20g KCIud2VhayAiICJfX3B0aHJlYWRfcndsb2NrX2Rlc3Ryb3kiKTsKYXNtICgiLndlYWsgIiAiX19w dGhyZWFkX3J3bG9ja19yZGxvY2siKTsKYXNtICgiLndlYWsgIiAiX19wdGhyZWFkX3J3bG9ja190 cnlyZGxvY2siKTsKYXNtICgiLndlYWsgIiAiX19wdGhyZWFkX3J3bG9ja193cmxvY2siKTsKYXNt ICgiLndlYWsgIiAiX19wdGhyZWFkX3J3bG9ja190cnl3cmxvY2siKTsKYXNtICgiLndlYWsgIiAi X19wdGhyZWFkX3J3bG9ja191bmxvY2siKTsKYXNtICgiLndlYWsgIiAiX19wdGhyZWFkX2tleV9j cmVhdGUiKTsKYXNtICgiLndlYWsgIiAiX19wdGhyZWFkX3NldHNwZWNpZmljIik7CmFzbSAoIi53 ZWFrICIgIl9fcHRocmVhZF9nZXRzcGVjaWZpYyIpOwphc20gKCIud2VhayAiICJfX3B0aHJlYWRf b25jZSIpOwphc20gKCIud2VhayAiICJfX3B0aHJlYWRfaW5pdGlhbGl6ZSIpOwphc20gKCIud2Vh ayAiICJfX3B0aHJlYWRfYXRmb3JrIik7CmFzbSAoIi53ZWFrICIgIl9wdGhyZWFkX2NsZWFudXBf cHVzaF9kZWZlciIpOwphc20gKCIud2VhayAiICJfcHRocmVhZF9jbGVhbnVwX3BvcF9yZXN0b3Jl Iik7CiMgMjkgInZmcHJpbnRmLmMiIDIKIyAxICIuLi9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9z eXMvcGFyYW0uaCIgMQojIDIyICIuLi9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9zeXMvcGFyYW0u aCIKIyAxICIuLi9pbmNsdWRlL2xpbWl0cy5oIiAxCiMgMTQ0ICIuLi9pbmNsdWRlL2xpbWl0cy5o IgojIDEgIi4uL2luY2x1ZGUvYml0cy9wb3NpeDFfbGltLmgiIDEKIyAxNDUgIi4uL2luY2x1ZGUv bGltaXRzLmgiIDIKCgoKIyAxICIuLi9pbmNsdWRlL2JpdHMvcG9zaXgyX2xpbS5oIiAxCiMgMTQ5 ICIuLi9pbmNsdWRlL2xpbWl0cy5oIiAyCiMgMjMgIi4uL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4 L3N5cy9wYXJhbS5oIiAyCgojIDEgIi91c3Ivc3JjL3BhY2thZ2VzL0JVSUxEL2tlcm5lbC1oZWFk ZXJzL2xpbnV4L3BhcmFtLmgiIDEgMyA0CgoKCiMgMSAiL3Vzci9zcmMvcGFja2FnZXMvQlVJTEQv a2VybmVsLWhlYWRlcnMvYXNtL3BhcmFtLmgiIDEgMyA0CgoKCiMgMSAiL3Vzci9zcmMvcGFja2Fn ZXMvQlVJTEQva2VybmVsLWhlYWRlcnMvYXNtLXg4Nl82NC9wYXJhbS5oIiAxIDMgNAojIDUgIi91 c3Ivc3JjL3BhY2thZ2VzL0JVSUxEL2tlcm5lbC1oZWFkZXJzL2FzbS9wYXJhbS5oIiAyIDMgNAoj IDUgIi91c3Ivc3JjL3BhY2thZ2VzL0JVSUxEL2tlcm5lbC1oZWFkZXJzL2xpbnV4L3BhcmFtLmgi IDIgMyA0CiMgMjUgIi4uL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L3N5cy9wYXJhbS5oIiAyCiMg NDIgIi4uL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L3N5cy9wYXJhbS5oIgojIDEgIi4uL2luY2x1 ZGUvc3lzL3R5cGVzLmgiIDEKIyA0MyAiLi4vc3lzZGVwcy91bml4L3N5c3YvbGludXgvc3lzL3Bh cmFtLmgiIDIKIyAzMCAidmZwcmludGYuYyIgMgojIDEgIl9pdG9hLmgiIDEKIyAyMiAiX2l0b2Eu aCIKIyAxICIuLi9pbmNsdWRlL3N5cy9jZGVmcy5oIiAxCiMgMjMgIl9pdG9hLmgiIDIKCgoKCgoK ZXh0ZXJuIGNoYXIgKl9pdG9hICh1bnNpZ25lZCBsb25nIGxvbmcgaW50IHZhbHVlLCBjaGFyICpi dWZsaW0sCiAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGJhc2UsIGludCB1cHBlcl9j YXNlKTsKCmV4dGVybiBjb25zdCBjaGFyIF9pdG9hX3VwcGVyX2RpZ2l0c1tdOwpleHRlcm4gY29u c3QgY2hhciBfaXRvYV91cHBlcl9kaWdpdHNfaW50ZXJuYWxbXSBfX2F0dHJpYnV0ZV9fICgodmlz aWJpbGl0eSAoImhpZGRlbiIpKSk7CmV4dGVybiBjb25zdCBjaGFyIF9pdG9hX2xvd2VyX2RpZ2l0 c1tdOwpleHRlcm4gY29uc3QgY2hhciBfaXRvYV9sb3dlcl9kaWdpdHNfaW50ZXJuYWxbXSBfX2F0 dHJpYnV0ZV9fICgodmlzaWJpbGl0eSAoImhpZGRlbiIpKSk7CgpzdGF0aWMgaW5saW5lIGNoYXIg KiBfX2F0dHJpYnV0ZV9fICgodW51c2VkKSkKX2l0b2Ffd29yZCAodW5zaWduZWQgbG9uZyB2YWx1 ZSwgY2hhciAqYnVmbGltLAogICAgICAgICAgICB1bnNpZ25lZCBpbnQgYmFzZSwgaW50IHVwcGVy X2Nhc2UpCnsKICBjb25zdCBjaGFyICpkaWdpdHMgPSAodXBwZXJfY2FzZQoKICAgICAgICAgICAg ICAgICAgICAgICAgPyBfaXRvYV91cHBlcl9kaWdpdHNfaW50ZXJuYWwKICAgICAgICAgICAgICAg ICAgICAgICAgOiBfaXRvYV9sb3dlcl9kaWdpdHNfaW50ZXJuYWwKCgoKCiAgICAgICAgICAgICAg ICAgICAgICAgKTsKCiAgc3dpdGNoIChiYXNlKQogICAgewoKCgoKCgoKICAgICAgY2FzZSAxMDog ZG8gKi0tYnVmbGltID0gZGlnaXRzW3ZhbHVlICUgMTBdOyB3aGlsZSAoKHZhbHVlIC89IDEwKSAh PSAwKTsgYnJlYWs7CiAgICAgIGNhc2UgMTY6IGRvICotLWJ1ZmxpbSA9IGRpZ2l0c1t2YWx1ZSAl IDE2XTsgd2hpbGUgKCh2YWx1ZSAvPSAxNikgIT0gMCk7IGJyZWFrOwogICAgICBjYXNlIDg6IGRv ICotLWJ1ZmxpbSA9IGRpZ2l0c1t2YWx1ZSAlIDhdOyB3aGlsZSAoKHZhbHVlIC89IDgpICE9IDAp OyBicmVhazsKICAgIGRlZmF1bHQ6CiAgICAgIGRvCiAgICAgICAgKi0tYnVmbGltID0gZGlnaXRz W3ZhbHVlICUgYmFzZV07CiAgICAgIHdoaWxlICgodmFsdWUgLz0gYmFzZSkgIT0gMCk7CiAgICB9 CiAgcmV0dXJuIGJ1ZmxpbTsKfQoKCnN0YXRpYyBpbmxpbmUgY2hhciAqIF9fYXR0cmlidXRlX18g KCh1bnVzZWQpKQpfZml0b2Ffd29yZCAodW5zaWduZWQgbG9uZyB2YWx1ZSwgY2hhciAqYnVmLCB1 bnNpZ25lZCBpbnQgYmFzZSwgaW50IHVwcGVyX2Nhc2UpCnsKICBjaGFyIHRtcGJ1ZltzaXplb2Yg KHZhbHVlKSAqIDRdOwogIGNoYXIgKmNwID0gX2l0b2Ffd29yZCAodmFsdWUsIHRtcGJ1ZiArIHNp emVvZiAodmFsdWUpICogNCwgYmFzZSwgdXBwZXJfY2FzZSk7CiAgd2hpbGUgKGNwIDwgdG1wYnVm ICsgc2l6ZW9mICh2YWx1ZSkgKiA0KQogICAgKmJ1ZisrID0gKmNwKys7CiAgcmV0dXJuIGJ1ZjsK fQoKc3RhdGljIGlubGluZSBjaGFyICogX19hdHRyaWJ1dGVfXyAoKHVudXNlZCkpCl9maXRvYSAo dW5zaWduZWQgbG9uZyBsb25nIHZhbHVlLCBjaGFyICpidWYsIHVuc2lnbmVkIGludCBiYXNlLCBp bnQgdXBwZXJfY2FzZSkKewogIGNoYXIgdG1wYnVmW3NpemVvZiAodmFsdWUpICogNF07CiAgY2hh ciAqY3AgPSBfaXRvYSAodmFsdWUsIHRtcGJ1ZiArIHNpemVvZiAodmFsdWUpICogNCwgYmFzZSwg dXBwZXJfY2FzZSk7CiAgd2hpbGUgKGNwIDwgdG1wYnVmICsgc2l6ZW9mICh2YWx1ZSkgKiA0KQog ICAgKmJ1ZisrID0gKmNwKys7CiAgcmV0dXJuIGJ1ZjsKfQojIDMxICJ2ZnByaW50Zi5jIiAyCgoj IDEgIi4uL2luY2x1ZGUvc3RkaW8uaCIgMQoKCgoKIyAxICIuLi9saWJpby9zdGRpby5oIiAxCiMg MzAgIi4uL2xpYmlvL3N0ZGlvLmgiCgoKCgojIDEgIi91c3IvbGliNjQvZ2NjLWxpYi94ODZfNjQt c3VzZS1saW51eC8zLjMvaW5jbHVkZS9zdGRkZWYuaCIgMSAzIDQKIyAzNSAiLi4vbGliaW8vc3Rk aW8uaCIgMgojIDcyICIuLi9saWJpby9zdGRpby5oIgojIDEgIi4uL2luY2x1ZGUvbGliaW8uaCIg MQojIDEgIi4uL2xpYmlvL2xpYmlvLmgiIDEKIyAzMiAiLi4vbGliaW8vbGliaW8uaCIKIyAxICIu Li9zeXNkZXBzL2dudS9fR19jb25maWcuaCIgMQojIDE0ICIuLi9zeXNkZXBzL2dudS9fR19jb25m aWcuaCIKIyAxICIvdXNyL2xpYjY0L2djYy1saWIveDg2XzY0LXN1c2UtbGludXgvMy4zL2luY2x1 ZGUvc3RkZGVmLmgiIDEgMyA0CiMgMTUgIi4uL3N5c2RlcHMvZ251L19HX2NvbmZpZy5oIiAyCiMg MjYgIi4uL3N5c2RlcHMvZ251L19HX2NvbmZpZy5oIgp0eXBlZGVmIHN0cnVjdAp7CiAgX19vZmZf dCBfX3BvczsKICBfX21ic3RhdGVfdCBfX3N0YXRlOwp9IF9HX2Zwb3NfdDsKdHlwZWRlZiBzdHJ1 Y3QKewogIF9fb2ZmNjRfdCBfX3BvczsKICBfX21ic3RhdGVfdCBfX3N0YXRlOwp9IF9HX2Zwb3M2 NF90OwojIDQ0ICIuLi9zeXNkZXBzL2dudS9fR19jb25maWcuaCIKIyAxICIuLi9pbmNsdWRlL2dj b252LmgiIDEKIyAxICIuLi9pY29udi9nY29udi5oIiAxCiMgMzEgIi4uL2ljb252L2djb252Lmgi CiMgMSAiL3Vzci9saWI2NC9nY2MtbGliL3g4Nl82NC1zdXNlLWxpbnV4LzMuMy9pbmNsdWRlL3N0 ZGRlZi5oIiAxIDMgNAojIDMyICIuLi9pY29udi9nY29udi5oIiAyCgoKCgoKZW51bQp7CiAgX19H Q09OVl9PSyA9IDAsCiAgX19HQ09OVl9OT0NPTlYsCiAgX19HQ09OVl9OT0RCLAogIF9fR0NPTlZf Tk9NRU0sCgogIF9fR0NPTlZfRU1QVFlfSU5QVVQsCiAgX19HQ09OVl9GVUxMX09VVFBVVCwKICBf X0dDT05WX0lMTEVHQUxfSU5QVVQsCiAgX19HQ09OVl9JTkNPTVBMRVRFX0lOUFVULAoKICBfX0dD T05WX0lMTEVHQUxfREVTQ1JJUFRPUiwKICBfX0dDT05WX0lOVEVSTkFMX0VSUk9SCn07CgoKCmVu dW0KewogIF9fR0NPTlZfSVNfTEFTVCA9IDB4MDAwMSwKICBfX0dDT05WX0lHTk9SRV9FUlJPUlMg PSAweDAwMDIKfTsKCgoKc3RydWN0IF9fZ2NvbnZfc3RlcDsKc3RydWN0IF9fZ2NvbnZfc3RlcF9k YXRhOwpzdHJ1Y3QgX19nY29udl9sb2FkZWRfb2JqZWN0OwpzdHJ1Y3QgX19nY29udl90cmFuc19k YXRhOwoKCgp0eXBlZGVmIGludCAoKl9fZ2NvbnZfZmN0KSAoc3RydWN0IF9fZ2NvbnZfc3RlcCAq LCBzdHJ1Y3QgX19nY29udl9zdGVwX2RhdGEgKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAg IF9fY29uc3QgdW5zaWduZWQgY2hhciAqKiwgX19jb25zdCB1bnNpZ25lZCBjaGFyICosCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICoqLCBzaXplX3QgKiwgaW50LCBp bnQpOwoKCnR5cGVkZWYgaW50ICgqX19nY29udl9pbml0X2ZjdCkgKHN0cnVjdCBfX2djb252X3N0 ZXAgKik7CnR5cGVkZWYgdm9pZCAoKl9fZ2NvbnZfZW5kX2ZjdCkgKHN0cnVjdCBfX2djb252X3N0 ZXAgKik7CgoKCnR5cGVkZWYgaW50ICgqX19nY29udl90cmFuc19mY3QpIChzdHJ1Y3QgX19nY29u dl9zdGVwICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgX19nY29u dl9zdGVwX2RhdGEgKiwgdm9pZCAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg X19jb25zdCB1bnNpZ25lZCBjaGFyICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKiosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKiwgdW5zaWduZWQgY2hhciAqKiwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAqKTsKCgp0eXBlZGVmIGludCAoKl9fZ2Nv bnZfdHJhbnNfY29udGV4dF9mY3QpICh2b2lkICosIF9fY29uc3QgdW5zaWduZWQgY2hhciAqLAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHVuc2lnbmVk IGNoYXIgKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWdu ZWQgY2hhciAqLCB1bnNpZ25lZCBjaGFyICopOwoKCnR5cGVkZWYgaW50ICgqX19nY29udl90cmFu c19xdWVyeV9mY3QpIChfX2NvbnN0IGNoYXIgKiwgX19jb25zdCBjaGFyICoqKiwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAqKTsKCgp0eXBlZGVmIGludCAo Kl9fZ2NvbnZfdHJhbnNfaW5pdF9mY3QpICh2b2lkICoqLCBjb25zdCBjaGFyICopOwp0eXBlZGVm IHZvaWQgKCpfX2djb252X3RyYW5zX2VuZF9mY3QpICh2b2lkICopOwoKc3RydWN0IF9fZ2NvbnZf dHJhbnNfZGF0YQp7CgogIF9fZ2NvbnZfdHJhbnNfZmN0IF9fdHJhbnNfZmN0OwogIF9fZ2NvbnZf dHJhbnNfY29udGV4dF9mY3QgX190cmFuc19jb250ZXh0X2ZjdDsKICBfX2djb252X3RyYW5zX2Vu ZF9mY3QgX190cmFuc19lbmRfZmN0OwogIHZvaWQgKl9fZGF0YTsKICBzdHJ1Y3QgX19nY29udl90 cmFuc19kYXRhICpfX25leHQ7Cn07CgoKCnN0cnVjdCBfX2djb252X3N0ZXAKewogIHN0cnVjdCBf X2djb252X2xvYWRlZF9vYmplY3QgKl9fc2hsaWJfaGFuZGxlOwogIF9fY29uc3QgY2hhciAqX19t b2RuYW1lOwoKICBpbnQgX19jb3VudGVyOwoKICBjaGFyICpfX2Zyb21fbmFtZTsKICBjaGFyICpf X3RvX25hbWU7CgogIF9fZ2NvbnZfZmN0IF9fZmN0OwogIF9fZ2NvbnZfaW5pdF9mY3QgX19pbml0 X2ZjdDsKICBfX2djb252X2VuZF9mY3QgX19lbmRfZmN0OwoKCgogIGludCBfX21pbl9uZWVkZWRf ZnJvbTsKICBpbnQgX19tYXhfbmVlZGVkX2Zyb207CiAgaW50IF9fbWluX25lZWRlZF90bzsKICBp bnQgX19tYXhfbmVlZGVkX3RvOwoKCiAgaW50IF9fc3RhdGVmdWw7CgogIHZvaWQgKl9fZGF0YTsK fTsKCgoKc3RydWN0IF9fZ2NvbnZfc3RlcF9kYXRhCnsKICB1bnNpZ25lZCBjaGFyICpfX291dGJ1 ZjsKICB1bnNpZ25lZCBjaGFyICpfX291dGJ1ZmVuZDsKCgoKICBpbnQgX19mbGFnczsKCgoKICBp bnQgX19pbnZvY2F0aW9uX2NvdW50ZXI7CgoKCiAgaW50IF9faW50ZXJuYWxfdXNlOwoKICBfX21i c3RhdGVfdCAqX19zdGF0ZXA7CiAgX19tYnN0YXRlX3QgX19zdGF0ZTsKCgoKICBzdHJ1Y3QgX19n Y29udl90cmFuc19kYXRhICpfX3RyYW5zOwp9OwoKCgp0eXBlZGVmIHN0cnVjdCBfX2djb252X2lu Zm8KewogIHNpemVfdCBfX25zdGVwczsKICBzdHJ1Y3QgX19nY29udl9zdGVwICpfX3N0ZXBzOwog IF9fZXh0ZW5zaW9uX18gc3RydWN0IF9fZ2NvbnZfc3RlcF9kYXRhIF9fZGF0YSBbXTsKfSAqX19n Y29udl90OwojIDIgIi4uL2luY2x1ZGUvZ2NvbnYuaCIgMgojIDQ1ICIuLi9zeXNkZXBzL2dudS9f R19jb25maWcuaCIgMgp0eXBlZGVmIHVuaW9uCnsKICBzdHJ1Y3QgX19nY29udl9pbmZvIF9fY2Q7 CiAgc3RydWN0CiAgewogICAgc3RydWN0IF9fZ2NvbnZfaW5mbyBfX2NkOwogICAgc3RydWN0IF9f Z2NvbnZfc3RlcF9kYXRhIF9fZGF0YTsKICB9IF9fY29tYmluZWQ7Cn0gX0dfaWNvbnZfdDsKCnR5 cGVkZWYgaW50IF9HX2ludDE2X3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChfX0hJX18pKSk7 CnR5cGVkZWYgaW50IF9HX2ludDMyX3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChfX1NJX18p KSk7CnR5cGVkZWYgdW5zaWduZWQgaW50IF9HX3VpbnQxNl90IF9fYXR0cmlidXRlX18gKChfX21v ZGVfXyAoX19ISV9fKSkpOwp0eXBlZGVmIHVuc2lnbmVkIGludCBfR191aW50MzJfdCBfX2F0dHJp YnV0ZV9fICgoX19tb2RlX18gKF9fU0lfXykpKTsKIyAzMyAiLi4vbGliaW8vbGliaW8uaCIgMgoj IDE2MiAiLi4vbGliaW8vbGliaW8uaCIKc3RydWN0IF9JT19qdW1wX3Q7IHN0cnVjdCBfSU9fRklM RTsKIyAxNzIgIi4uL2xpYmlvL2xpYmlvLmgiCnR5cGVkZWYgdm9pZCBfSU9fbG9ja190OwoKCgoK CnN0cnVjdCBfSU9fbWFya2VyIHsKICBzdHJ1Y3QgX0lPX21hcmtlciAqX25leHQ7CiAgc3RydWN0 IF9JT19GSUxFICpfc2J1ZjsKCgoKICBpbnQgX3BvczsKIyAxOTUgIi4uL2xpYmlvL2xpYmlvLmgi Cn07CgoKZW51bSBfX2NvZGVjdnRfcmVzdWx0CnsKICBfX2NvZGVjdnRfb2ssCiAgX19jb2RlY3Z0 X3BhcnRpYWwsCiAgX19jb2RlY3Z0X2Vycm9yLAogIF9fY29kZWN2dF9ub2NvbnYKfTsKCgoKCnN0 cnVjdCBfSU9fY29kZWN2dAp7CiAgdm9pZCAoKl9fY29kZWN2dF9kZXN0cikgKHN0cnVjdCBfSU9f Y29kZWN2dCAqKTsKICBlbnVtIF9fY29kZWN2dF9yZXN1bHQgKCpfX2NvZGVjdnRfZG9fb3V0KSAo c3RydWN0IF9JT19jb2RlY3Z0ICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIF9fbWJzdGF0ZV90ICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGNvbnN0IHdjaGFyX3QgKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgY29uc3Qgd2NoYXJfdCAqLAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB3Y2hhcl90ICoqLCBjaGFyICosCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKiwgY2hhciAqKik7CiAg ZW51bSBfX2NvZGVjdnRfcmVzdWx0ICgqX19jb2RlY3Z0X2RvX3Vuc2hpZnQpIChzdHJ1Y3QgX0lP X2NvZGVjdnQgKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIF9fbWJzdGF0ZV90ICosIGNoYXIgKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGNoYXIgKiwgY2hhciAqKik7CiAgZW51bSBfX2NvZGVjdnRfcmVz dWx0ICgqX19jb2RlY3Z0X2RvX2luKSAoc3RydWN0IF9JT19jb2RlY3Z0ICosCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19tYnN0YXRlX3QgKiwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICosIGNvbnN0IGNo YXIgKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBj aGFyICoqLCB3Y2hhcl90ICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgd2NoYXJfdCAqLCB3Y2hhcl90ICoqKTsKICBpbnQgKCpfX2NvZGVjdnRfZG9fZW5jb2Rp bmcpIChzdHJ1Y3QgX0lPX2NvZGVjdnQgKik7CiAgaW50ICgqX19jb2RlY3Z0X2RvX2Fsd2F5c19u b2NvbnYpIChzdHJ1Y3QgX0lPX2NvZGVjdnQgKik7CiAgaW50ICgqX19jb2RlY3Z0X2RvX2xlbmd0 aCkgKHN0cnVjdCBfSU9fY29kZWN2dCAqLCBfX21ic3RhdGVfdCAqLAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiwgc2l6ZV90KTsKICBpbnQg KCpfX2NvZGVjdnRfZG9fbWF4X2xlbmd0aCkgKHN0cnVjdCBfSU9fY29kZWN2dCAqKTsKCiAgX0df aWNvbnZfdCBfX2NkX2luOwogIF9HX2ljb252X3QgX19jZF9vdXQ7Cn07CgoKc3RydWN0IF9JT193 aWRlX2RhdGEKewogIHdjaGFyX3QgKl9JT19yZWFkX3B0cjsKICB3Y2hhcl90ICpfSU9fcmVhZF9l bmQ7CiAgd2NoYXJfdCAqX0lPX3JlYWRfYmFzZTsKICB3Y2hhcl90ICpfSU9fd3JpdGVfYmFzZTsK ICB3Y2hhcl90ICpfSU9fd3JpdGVfcHRyOwogIHdjaGFyX3QgKl9JT193cml0ZV9lbmQ7CiAgd2No YXJfdCAqX0lPX2J1Zl9iYXNlOwogIHdjaGFyX3QgKl9JT19idWZfZW5kOwoKICB3Y2hhcl90ICpf SU9fc2F2ZV9iYXNlOwogIHdjaGFyX3QgKl9JT19iYWNrdXBfYmFzZTsKCiAgd2NoYXJfdCAqX0lP X3NhdmVfZW5kOwoKICBfX21ic3RhdGVfdCBfSU9fc3RhdGU7CiAgX19tYnN0YXRlX3QgX0lPX2xh c3Rfc3RhdGU7CiAgc3RydWN0IF9JT19jb2RlY3Z0IF9jb2RlY3Z0OwoKICB3Y2hhcl90IF9zaG9y dGJ1ZlsxXTsKCiAgc3RydWN0IF9JT19qdW1wX3QgKl93aWRlX3Z0YWJsZTsKfTsKCgpzdHJ1Y3Qg X0lPX0ZJTEUgewogIGludCBfZmxhZ3M7CgoKCgogIGNoYXIqIF9JT19yZWFkX3B0cjsKICBjaGFy KiBfSU9fcmVhZF9lbmQ7CiAgY2hhciogX0lPX3JlYWRfYmFzZTsKICBjaGFyKiBfSU9fd3JpdGVf YmFzZTsKICBjaGFyKiBfSU9fd3JpdGVfcHRyOwogIGNoYXIqIF9JT193cml0ZV9lbmQ7CiAgY2hh ciogX0lPX2J1Zl9iYXNlOwogIGNoYXIqIF9JT19idWZfZW5kOwoKICBjaGFyICpfSU9fc2F2ZV9i YXNlOwogIGNoYXIgKl9JT19iYWNrdXBfYmFzZTsKICBjaGFyICpfSU9fc2F2ZV9lbmQ7CgogIHN0 cnVjdCBfSU9fbWFya2VyICpfbWFya2VyczsKCiAgc3RydWN0IF9JT19GSUxFICpfY2hhaW47Cgog IGludCBfZmlsZW5vOwoKCgogIGludCBfZmxhZ3MyOwoKICBfX29mZl90IF9vbGRfb2Zmc2V0OwoK CgogIHVuc2lnbmVkIHNob3J0IF9jdXJfY29sdW1uOwogIHNpZ25lZCBjaGFyIF92dGFibGVfb2Zm c2V0OwogIGNoYXIgX3Nob3J0YnVmWzFdOwoKCgogIF9JT19sb2NrX3QgKl9sb2NrOwojIDMxMSAi Li4vbGliaW8vbGliaW8uaCIKICBfX29mZjY0X3QgX29mZnNldDsKCgogIHN0cnVjdCBfSU9fY29k ZWN2dCAqX2NvZGVjdnQ7CiAgc3RydWN0IF9JT193aWRlX2RhdGEgKl93aWRlX2RhdGE7CgoKCgog IGludCBfbW9kZTsKCiAgY2hhciBfdW51c2VkMlsxNSAqIHNpemVvZiAoaW50KSAtIDIgKiBzaXpl b2YgKHZvaWQgKildOwoKfTsKCgp0eXBlZGVmIHN0cnVjdCBfSU9fRklMRSBfSU9fRklMRTsKCgpz dHJ1Y3QgX0lPX0ZJTEVfcGx1czsKCmV4dGVybiBzdHJ1Y3QgX0lPX0ZJTEVfcGx1cyBfSU9fMl8x X3N0ZGluXzsKZXh0ZXJuIHN0cnVjdCBfSU9fRklMRV9wbHVzIF9JT18yXzFfc3Rkb3V0XzsKZXh0 ZXJuIHN0cnVjdCBfSU9fRklMRV9wbHVzIF9JT18yXzFfc3RkZXJyXzsKCgoKCgpleHRlcm4gX0lP X0ZJTEUgKl9JT19zdGRpbiBfX2F0dHJpYnV0ZV9fICgodmlzaWJpbGl0eSAoImhpZGRlbiIpKSk7 CmV4dGVybiBfSU9fRklMRSAqX0lPX3N0ZG91dCBfX2F0dHJpYnV0ZV9fICgodmlzaWJpbGl0eSAo ImhpZGRlbiIpKSk7CmV4dGVybiBfSU9fRklMRSAqX0lPX3N0ZGVyciBfX2F0dHJpYnV0ZV9fICgo dmlzaWJpbGl0eSAoImhpZGRlbiIpKSk7CgoKCgoKCgp0eXBlZGVmIF9fc3NpemVfdCBfX2lvX3Jl YWRfZm4gKHZvaWQgKl9fY29va2llLCBjaGFyICpfX2J1Ziwgc2l6ZV90IF9fbmJ5dGVzKTsKCgoK CgoKCnR5cGVkZWYgX19zc2l6ZV90IF9faW9fd3JpdGVfZm4gKHZvaWQgKl9fY29va2llLCBfX2Nv bnN0IGNoYXIgKl9fYnVmLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3Qg X19uKTsKCgoKCgoKCnR5cGVkZWYgaW50IF9faW9fc2Vla19mbiAodm9pZCAqX19jb29raWUsIF9f b2ZmNjRfdCAqX19wb3MsIGludCBfX3cpOwoKCnR5cGVkZWYgaW50IF9faW9fY2xvc2VfZm4gKHZv aWQgKl9fY29va2llKTsKCgoKCnR5cGVkZWYgX19pb19yZWFkX2ZuIGNvb2tpZV9yZWFkX2Z1bmN0 aW9uX3Q7CnR5cGVkZWYgX19pb193cml0ZV9mbiBjb29raWVfd3JpdGVfZnVuY3Rpb25fdDsKdHlw ZWRlZiBfX2lvX3NlZWtfZm4gY29va2llX3NlZWtfZnVuY3Rpb25fdDsKdHlwZWRlZiBfX2lvX2Ns b3NlX2ZuIGNvb2tpZV9jbG9zZV9mdW5jdGlvbl90OwoKCnR5cGVkZWYgc3RydWN0CnsKICBfX2lv X3JlYWRfZm4gKnJlYWQ7CiAgX19pb193cml0ZV9mbiAqd3JpdGU7CiAgX19pb19zZWVrX2ZuICpz ZWVrOwogIF9faW9fY2xvc2VfZm4gKmNsb3NlOwp9IF9JT19jb29raWVfaW9fZnVuY3Rpb25zX3Q7 CnR5cGVkZWYgX0lPX2Nvb2tpZV9pb19mdW5jdGlvbnNfdCBjb29raWVfaW9fZnVuY3Rpb25zX3Q7 CgpzdHJ1Y3QgX0lPX2Nvb2tpZV9maWxlOwoKCmV4dGVybiB2b2lkIF9JT19jb29raWVfaW5pdCAo c3RydWN0IF9JT19jb29raWVfZmlsZSAqX19jZmlsZSwgaW50IF9fcmVhZF93cml0ZSwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpfX2Nvb2tpZSwgX0lPX2Nvb2tpZV9pb19mdW5j dGlvbnNfdCBfX2Zucyk7CgoKCgoKCgpleHRlcm4gaW50IF9fdW5kZXJmbG93IChfSU9fRklMRSAq KSA7CmV4dGVybiBpbnQgX191ZmxvdyAoX0lPX0ZJTEUgKikgOwpleHRlcm4gaW50IF9fb3ZlcmZs b3cgKF9JT19GSUxFICosIGludCkgOwpleHRlcm4gd2ludF90IF9fd3VuZGVyZmxvdyAoX0lPX0ZJ TEUgKikgOwpleHRlcm4gd2ludF90IF9fd3VmbG93IChfSU9fRklMRSAqKSA7CmV4dGVybiB3aW50 X3QgX193b3ZlcmZsb3cgKF9JT19GSUxFICosIHdpbnRfdCkgOwojIDQzMiAiLi4vbGliaW8vbGli aW8uaCIKZXh0ZXJuIGludCBfSU9fZ2V0YyAoX0lPX0ZJTEUgKl9fZnApIDsKZXh0ZXJuIGludCBf SU9fcHV0YyAoaW50IF9fYywgX0lPX0ZJTEUgKl9fZnApIDsKZXh0ZXJuIGludCBfSU9fZmVvZiAo X0lPX0ZJTEUgKl9fZnApIDsKZXh0ZXJuIGludCBfSU9fZmVycm9yIChfSU9fRklMRSAqX19mcCkg OwoKZXh0ZXJuIGludCBfSU9fcGVla2NfbG9ja2VkIChfSU9fRklMRSAqX19mcCkgOwoKCgoKCmV4 dGVybiB2b2lkIF9JT19mbG9ja2ZpbGUgKF9JT19GSUxFICopIDsKZXh0ZXJuIHZvaWQgX0lPX2Z1 bmxvY2tmaWxlIChfSU9fRklMRSAqKSA7CmV4dGVybiBpbnQgX0lPX2Z0cnlsb2NrZmlsZSAoX0lP X0ZJTEUgKikgOwojIDQ2MiAiLi4vbGliaW8vbGliaW8uaCIKZXh0ZXJuIGludCBfSU9fdmZzY2Fu ZiAoX0lPX0ZJTEUgKiBfX3Jlc3RyaWN0LCBjb25zdCBjaGFyICogX19yZXN0cmljdCwKICAgICAg ICAgICAgICAgICAgICAgICAgX19nbnVjX3ZhX2xpc3QsIGludCAqX19yZXN0cmljdCkgOwpleHRl cm4gaW50IF9JT192ZnByaW50ZiAoX0lPX0ZJTEUgKl9fcmVzdHJpY3QsIGNvbnN0IGNoYXIgKl9f cmVzdHJpY3QsCiAgICAgICAgICAgICAgICAgICAgICAgICBfX2dudWNfdmFfbGlzdCkgOwpleHRl cm4gX19zc2l6ZV90IF9JT19wYWRuIChfSU9fRklMRSAqLCBpbnQsIF9fc3NpemVfdCkgOwpleHRl cm4gc2l6ZV90IF9JT19zZ2V0biAoX0lPX0ZJTEUgKiwgdm9pZCAqLCBzaXplX3QpIDsKCmV4dGVy biBfX29mZjY0X3QgX0lPX3NlZWtvZmYgKF9JT19GSUxFICosIF9fb2ZmNjRfdCwgaW50LCBpbnQp IDsKZXh0ZXJuIF9fb2ZmNjRfdCBfSU9fc2Vla3BvcyAoX0lPX0ZJTEUgKiwgX19vZmY2NF90LCBp bnQpIDsKCmV4dGVybiB2b2lkIF9JT19mcmVlX2JhY2t1cF9hcmVhIChfSU9fRklMRSAqKSA7CgoK ZXh0ZXJuIHdpbnRfdCBfSU9fZ2V0d2MgKF9JT19GSUxFICpfX2ZwKSA7CmV4dGVybiB3aW50X3Qg X0lPX3B1dHdjICh3Y2hhcl90IF9fd2MsIF9JT19GSUxFICpfX2ZwKSA7CmV4dGVybiBpbnQgX0lP X2Z3aWRlIChfSU9fRklMRSAqX19mcCwgaW50IF9fbW9kZSkgOwoKCgoKIyAxICIuLi9pbmNsdWRl L3NobGliLWNvbXBhdC5oIiAxCiMgMjYgIi4uL2luY2x1ZGUvc2hsaWItY29tcGF0LmgiCiMgMSAi L3Vzci9zcmMvcGFja2FnZXMvQlVJTEQvZ2xpYmMtMi4zL2NjL2FiaS12ZXJzaW9ucy5oIiAxCiMg MjcgIi4uL2luY2x1ZGUvc2hsaWItY29tcGF0LmgiIDIKIyA0ODMgIi4uL2xpYmlvL2xpYmlvLmgi IDIKIyA1MTEgIi4uL2xpYmlvL2xpYmlvLmgiCmV4dGVybiBpbnQgX0lPX3Zmd3NjYW5mIChfSU9f RklMRSAqIF9fcmVzdHJpY3QsIGNvbnN0IHdjaGFyX3QgKiBfX3Jlc3RyaWN0LAogICAgICAgICAg ICAgICAgICAgICAgICAgX19nbnVjX3ZhX2xpc3QsIGludCAqX19yZXN0cmljdCkgOwpleHRlcm4g aW50IF9JT192ZndwcmludGYgKF9JT19GSUxFICpfX3Jlc3RyaWN0LCBjb25zdCB3Y2hhcl90ICpf X3Jlc3RyaWN0LAogICAgICAgICAgICAgICAgICAgICAgICAgIF9fZ251Y192YV9saXN0KSA7CmV4 dGVybiBfX3NzaXplX3QgX0lPX3dwYWRuIChfSU9fRklMRSAqLCB3aW50X3QsIF9fc3NpemVfdCkg OwpleHRlcm4gdm9pZCBfSU9fZnJlZV93YmFja3VwX2FyZWEgKF9JT19GSUxFICopIDsKIyAyICIu Li9pbmNsdWRlL2xpYmlvLmgiIDIKCgoKCmV4dGVybiBfX3R5cGVvZiAoX19vdmVyZmxvdykgX19H SV9fX292ZXJmbG93OyBleHRlcm4gX190eXBlb2YgKF9fb3ZlcmZsb3cpIF9fb3ZlcmZsb3cgX19h c21fXyAoIiIgIl9fR0lfX19vdmVyZmxvdyIpIF9fYXR0cmlidXRlX18gKCh2aXNpYmlsaXR5ICgi aGlkZGVuIikpKTsKZXh0ZXJuIF9fdHlwZW9mIChfX3VuZGVyZmxvdykgX19HSV9fX3VuZGVyZmxv dzsgZXh0ZXJuIF9fdHlwZW9mIChfX3VuZGVyZmxvdykgX191bmRlcmZsb3cgX19hc21fXyAoIiIg Il9fR0lfX191bmRlcmZsb3ciKSBfX2F0dHJpYnV0ZV9fICgodmlzaWJpbGl0eSAoImhpZGRlbiIp KSk7CmV4dGVybiBfX3R5cGVvZiAoX191ZmxvdykgX19HSV9fX3VmbG93OyBleHRlcm4gX190eXBl b2YgKF9fdWZsb3cpIF9fdWZsb3cgX19hc21fXyAoIiIgIl9fR0lfX191ZmxvdyIpIF9fYXR0cmli dXRlX18gKCh2aXNpYmlsaXR5ICgiaGlkZGVuIikpKTsKZXh0ZXJuIF9fdHlwZW9mIChfX3dvdmVy ZmxvdykgX19HSV9fX3dvdmVyZmxvdzsgZXh0ZXJuIF9fdHlwZW9mIChfX3dvdmVyZmxvdykgX193 b3ZlcmZsb3cgX19hc21fXyAoIiIgIl9fR0lfX193b3ZlcmZsb3ciKSBfX2F0dHJpYnV0ZV9fICgo dmlzaWJpbGl0eSAoImhpZGRlbiIpKSk7CmV4dGVybiBfX3R5cGVvZiAoX193dW5kZXJmbG93KSBf X0dJX19fd3VuZGVyZmxvdzsgZXh0ZXJuIF9fdHlwZW9mIChfX3d1bmRlcmZsb3cpIF9fd3VuZGVy ZmxvdyBfX2FzbV9fICgiIiAiX19HSV9fX3d1bmRlcmZsb3ciKSBfX2F0dHJpYnV0ZV9fICgodmlz aWJpbGl0eSAoImhpZGRlbiIpKSk7CmV4dGVybiBfX3R5cGVvZiAoX193dWZsb3cpIF9fR0lfX193 dWZsb3c7IGV4dGVybiBfX3R5cGVvZiAoX193dWZsb3cpIF9fd3VmbG93IF9fYXNtX18gKCIiICJf X0dJX19fd3VmbG93IikgX19hdHRyaWJ1dGVfXyAoKHZpc2liaWxpdHkgKCJoaWRkZW4iKSkpOwoj IDczICIuLi9saWJpby9zdGRpby5oIiAyCiMgODYgIi4uL2xpYmlvL3N0ZGlvLmgiCgoKdHlwZWRl ZiBfR19mcG9zX3QgZnBvc190OwoKCgoKCnR5cGVkZWYgX0dfZnBvczY0X3QgZnBvczY0X3Q7CiMg MTM4ICIuLi9saWJpby9zdGRpby5oIgojIDEgIi91c3Ivc3JjL3BhY2thZ2VzL0JVSUxEL2dsaWJj LTIuMy9jYy9iaXRzL3N0ZGlvX2xpbS5oIiAxCiMgMTM5ICIuLi9saWJpby9zdGRpby5oIiAyCgoK CmV4dGVybiBzdHJ1Y3QgX0lPX0ZJTEUgKnN0ZGluOwpleHRlcm4gc3RydWN0IF9JT19GSUxFICpz dGRvdXQ7CmV4dGVybiBzdHJ1Y3QgX0lPX0ZJTEUgKnN0ZGVycjsKCgoKCgoKCmV4dGVybiBpbnQg cmVtb3ZlIChfX2NvbnN0IGNoYXIgKl9fZmlsZW5hbWUpIDsKCmV4dGVybiBpbnQgcmVuYW1lIChf X2NvbnN0IGNoYXIgKl9fb2xkLCBfX2NvbnN0IGNoYXIgKl9fbmV3KSA7CgoKCgoKCmV4dGVybiBG SUxFICp0bXBmaWxlICh2b2lkKSA7CiMgMTcxICIuLi9saWJpby9zdGRpby5oIgpleHRlcm4gY2hh ciAqdG1wbmFtIChjaGFyICpfX3MpIDsKCgoKZXh0ZXJuIEZJTEUgKnRtcGZpbGU2NCAodm9pZCkg OwoKCgoKCmV4dGVybiBjaGFyICp0bXBuYW1fciAoY2hhciAqX19zKSA7CiMgMTkzICIuLi9saWJp by9zdGRpby5oIgpleHRlcm4gY2hhciAqdGVtcG5hbSAoX19jb25zdCBjaGFyICpfX2RpciwgX19j b25zdCBjaGFyICpfX3BmeCkKICAgICBfX2F0dHJpYnV0ZV9fICgoX19tYWxsb2NfXykpOwoKCgoK CmV4dGVybiBpbnQgZmNsb3NlIChGSUxFICpfX3N0cmVhbSkgOwoKZXh0ZXJuIGludCBmZmx1c2gg KEZJTEUgKl9fc3RyZWFtKSA7CgoKCgpleHRlcm4gaW50IGZmbHVzaF91bmxvY2tlZCAoRklMRSAq X19zdHJlYW0pIDsKCgoKCmV4dGVybiBpbnQgZmNsb3NlYWxsICh2b2lkKSA7CgoKCgoKCmV4dGVy biBGSUxFICpmb3BlbiAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZmlsZW5hbWUsCiAgICAg ICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbW9kZXMpIDsKCmV4dGVy biBGSUxFICpmcmVvcGVuIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19maWxlbmFtZSwKICAg ICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX21vZGVzLAogICAg ICAgICAgICAgICAgICAgICAgRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSkgOwojIDIzOSAiLi4v bGliaW8vc3RkaW8uaCIKCgpleHRlcm4gRklMRSAqZm9wZW42NCAoX19jb25zdCBjaGFyICpfX3Jl c3RyaWN0IF9fZmlsZW5hbWUsCiAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9f cmVzdHJpY3QgX19tb2RlcykgOwpleHRlcm4gRklMRSAqZnJlb3BlbjY0IChfX2NvbnN0IGNoYXIg Kl9fcmVzdHJpY3QgX19maWxlbmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBj aGFyICpfX3Jlc3RyaWN0IF9fbW9kZXMsCiAgICAgICAgICAgICAgICAgICAgICAgIEZJTEUgKl9f cmVzdHJpY3QgX19zdHJlYW0pIDsKCgoKCmV4dGVybiBGSUxFICpmZG9wZW4gKGludCBfX2ZkLCBf X2NvbnN0IGNoYXIgKl9fbW9kZXMpIDsKCgoKCgpleHRlcm4gRklMRSAqZm9wZW5jb29raWUgKHZv aWQgKl9fcmVzdHJpY3QgX19tYWdpY19jb29raWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAg X19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbW9kZXMsCiAgICAgICAgICAgICAgICAgICAgICAg ICAgX0lPX2Nvb2tpZV9pb19mdW5jdGlvbnNfdCBfX2lvX2Z1bmNzKSA7CgoKZXh0ZXJuIEZJTEUg KmZtZW1vcGVuICh2b2lkICpfX3MsIHNpemVfdCBfX2xlbiwgX19jb25zdCBjaGFyICpfX21vZGVz KSA7CgoKCgpleHRlcm4gRklMRSAqb3Blbl9tZW1zdHJlYW0gKGNoYXIgKipfX3Jlc3RyaWN0IF9f YnVmbG9jLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAqX19yZXN0cmljdCBf X3NpemVsb2MpIDsKCgoKCgoKZXh0ZXJuIHZvaWQgc2V0YnVmIChGSUxFICpfX3Jlc3RyaWN0IF9f c3RyZWFtLCBjaGFyICpfX3Jlc3RyaWN0IF9fYnVmKSA7CgoKCmV4dGVybiBpbnQgc2V0dmJ1ZiAo RklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSwgY2hhciAqX19yZXN0cmljdCBfX2J1ZiwKICAgICAg ICAgICAgICAgICAgICBpbnQgX19tb2Rlcywgc2l6ZV90IF9fbikgOwoKCgoKCmV4dGVybiB2b2lk IHNldGJ1ZmZlciAoRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSwgY2hhciAqX19yZXN0cmljdCBf X2J1ZiwKICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19zaXplKSA7CgoKZXh0ZXJuIHZv aWQgc2V0bGluZWJ1ZiAoRklMRSAqX19zdHJlYW0pIDsKCgoKCgpleHRlcm4gaW50IGZwcmludGYg KEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0sCiAgICAgICAgICAgICAgICAgICAgX19jb25zdCBj aGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0LCAuLi4pIDsKCmV4dGVybiBpbnQgcHJpbnRmIChfX2Nv bnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsIC4uLikgOwoKZXh0ZXJuIGludCBzcHJpbnRm IChjaGFyICpfX3Jlc3RyaWN0IF9fcywKICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIg Kl9fcmVzdHJpY3QgX19mb3JtYXQsIC4uLikgOwoKCmV4dGVybiBpbnQgdmZwcmludGYgKEZJTEUg Kl9fcmVzdHJpY3QgX19zLCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsCiAgICAg ICAgICAgICAgICAgICAgIF9fZ251Y192YV9saXN0IF9fYXJnKSA7CgpleHRlcm4gaW50IHZwcmlu dGYgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwgX19nbnVjX3ZhX2xpc3QgX19h cmcpCiAgICAgOwoKZXh0ZXJuIGludCB2c3ByaW50ZiAoY2hhciAqX19yZXN0cmljdCBfX3MsIF9f Y29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwKICAgICAgICAgICAgICAgICAgICAgX19n bnVjX3ZhX2xpc3QgX19hcmcpIDsKCgoKCgpleHRlcm4gaW50IHNucHJpbnRmIChjaGFyICpfX3Jl c3RyaWN0IF9fcywgc2l6ZV90IF9fbWF4bGVuLAogICAgICAgICAgICAgICAgICAgICBfX2NvbnN0 IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsIC4uLikKICAgICBfX2F0dHJpYnV0ZV9fICgoX19m b3JtYXRfXyAoX19wcmludGZfXywgMywgNCkpKTsKCmV4dGVybiBpbnQgdnNucHJpbnRmIChjaGFy ICpfX3Jlc3RyaWN0IF9fcywgc2l6ZV90IF9fbWF4bGVuLAogICAgICAgICAgICAgICAgICAgICAg X19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0LCBfX2dudWNfdmFfbGlzdCBfX2FyZykK ICAgICBfX2F0dHJpYnV0ZV9fICgoX19mb3JtYXRfXyAoX19wcmludGZfXywgMywgMCkpKTsKCgoK CgoKZXh0ZXJuIGludCB2YXNwcmludGYgKGNoYXIgKipfX3Jlc3RyaWN0IF9fcHRyLCBfX2NvbnN0 IGNoYXIgKl9fcmVzdHJpY3QgX19mLAogICAgICAgICAgICAgICAgICAgICAgX19nbnVjX3ZhX2xp c3QgX19hcmcpCiAgICAgX19hdHRyaWJ1dGVfXyAoKF9fZm9ybWF0X18gKF9fcHJpbnRmX18sIDIs IDApKSk7CmV4dGVybiBpbnQgX19hc3ByaW50ZiAoY2hhciAqKl9fcmVzdHJpY3QgX19wdHIsCiAg ICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm10LCAuLi4p CiAgICAgX19hdHRyaWJ1dGVfXyAoKF9fZm9ybWF0X18gKF9fcHJpbnRmX18sIDIsIDMpKSk7CmV4 dGVybiBpbnQgYXNwcmludGYgKGNoYXIgKipfX3Jlc3RyaWN0IF9fcHRyLAogICAgICAgICAgICAg ICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mbXQsIC4uLikKICAgICBfX2F0dHJp YnV0ZV9fICgoX19mb3JtYXRfXyAoX19wcmludGZfXywgMiwgMykpKTsKCgpleHRlcm4gaW50IHZk cHJpbnRmIChpbnQgX19mZCwgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm10LAogICAgICAg ICAgICAgICAgICAgICBfX2dudWNfdmFfbGlzdCBfX2FyZykKICAgICBfX2F0dHJpYnV0ZV9fICgo X19mb3JtYXRfXyAoX19wcmludGZfXywgMiwgMCkpKTsKZXh0ZXJuIGludCBkcHJpbnRmIChpbnQg X19mZCwgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm10LCAuLi4pCiAgICAgX19hdHRyaWJ1 dGVfXyAoKF9fZm9ybWF0X18gKF9fcHJpbnRmX18sIDIsIDMpKSk7CgoKCgoKZXh0ZXJuIGludCBm c2NhbmYgKEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0sCiAgICAgICAgICAgICAgICAgICBfX2Nv bnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsIC4uLikgOwoKZXh0ZXJuIGludCBzY2FuZiAo X19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0LCAuLi4pIDsKCmV4dGVybiBpbnQgc3Nj YW5mIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zLAogICAgICAgICAgICAgICAgICAgX19j b25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0LCAuLi4pIDsKCgoKCgpleHRlcm4gaW50IHZm c2NhbmYgKEZJTEUgKl9fcmVzdHJpY3QgX19zLCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19m b3JtYXQsCiAgICAgICAgICAgICAgICAgICAgX19nbnVjX3ZhX2xpc3QgX19hcmcpCiAgICAgX19h dHRyaWJ1dGVfXyAoKF9fZm9ybWF0X18gKF9fc2NhbmZfXywgMiwgMCkpKTsKCgpleHRlcm4gaW50 IHZzY2FuZiAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0LCBfX2dudWNfdmFfbGlz dCBfX2FyZykKICAgICBfX2F0dHJpYnV0ZV9fICgoX19mb3JtYXRfXyAoX19zY2FuZl9fLCAxLCAw KSkpOwoKCmV4dGVybiBpbnQgdnNzY2FuZiAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fcywK ICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsIF9f Z251Y192YV9saXN0IF9fYXJnKQogICAgIF9fYXR0cmlidXRlX18gKChfX2Zvcm1hdF9fIChfX3Nj YW5mX18sIDIsIDApKSk7CgoKCgoKCmV4dGVybiBpbnQgZmdldGMgKEZJTEUgKl9fc3RyZWFtKSA7 CmV4dGVybiBpbnQgZ2V0YyAoRklMRSAqX19zdHJlYW0pIDsKCgpleHRlcm4gaW50IGdldGNoYXIg KHZvaWQpIDsKCgoKCgoKCgpleHRlcm4gaW50IGdldGNfdW5sb2NrZWQgKEZJTEUgKl9fc3RyZWFt KSA7CmV4dGVybiBpbnQgZ2V0Y2hhcl91bmxvY2tlZCAodm9pZCkgOwoKCgoKZXh0ZXJuIGludCBm Z2V0Y191bmxvY2tlZCAoRklMRSAqX19zdHJlYW0pIDsKCgoKCgpleHRlcm4gaW50IGZwdXRjIChp bnQgX19jLCBGSUxFICpfX3N0cmVhbSkgOwpleHRlcm4gaW50IHB1dGMgKGludCBfX2MsIEZJTEUg Kl9fc3RyZWFtKSA7CgoKZXh0ZXJuIGludCBwdXRjaGFyIChpbnQgX19jKSA7CgoKCgoKCgoKZXh0 ZXJuIGludCBmcHV0Y191bmxvY2tlZCAoaW50IF9fYywgRklMRSAqX19zdHJlYW0pIDsKCgoKCmV4 dGVybiBpbnQgcHV0Y191bmxvY2tlZCAoaW50IF9fYywgRklMRSAqX19zdHJlYW0pIDsKZXh0ZXJu IGludCBwdXRjaGFyX3VubG9ja2VkIChpbnQgX19jKSA7CgoKCgoKZXh0ZXJuIGludCBnZXR3IChG SUxFICpfX3N0cmVhbSkgOwoKCmV4dGVybiBpbnQgcHV0dyAoaW50IF9fdywgRklMRSAqX19zdHJl YW0pIDsKCgoKCgpleHRlcm4gY2hhciAqZmdldHMgKGNoYXIgKl9fcmVzdHJpY3QgX19zLCBpbnQg X19uLCBGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtKQogICAgIDsKCgoKZXh0ZXJuIGNoYXIgKmdl dHMgKGNoYXIgKl9fcykgOwoKCgoKZXh0ZXJuIGNoYXIgKmZnZXRzX3VubG9ja2VkIChjaGFyICpf X3Jlc3RyaWN0IF9fcywgaW50IF9fbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGSUxF ICpfX3Jlc3RyaWN0IF9fc3RyZWFtKSA7CiMgNDYxICIuLi9saWJpby9zdGRpby5oIgpleHRlcm4g X19zc2l6ZV90IF9fZ2V0ZGVsaW0gKGNoYXIgKipfX3Jlc3RyaWN0IF9fbGluZXB0ciwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAqX19yZXN0cmljdCBfX24sIGludCBfX2Rl bGltaXRlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZJTEUgKl9fcmVzdHJpY3Qg X19zdHJlYW0pIDsKZXh0ZXJuIF9fc3NpemVfdCBnZXRkZWxpbSAoY2hhciAqKl9fcmVzdHJpY3Qg X19saW5lcHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAqX19yZXN0cmlj dCBfX24sIGludCBfX2RlbGltaXRlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGSUxF ICpfX3Jlc3RyaWN0IF9fc3RyZWFtKSA7CgoKZXh0ZXJuIF9fc3NpemVfdCBnZXRsaW5lIChjaGFy ICoqX19yZXN0cmljdCBfX2xpbmVwdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXpl X3QgKl9fcmVzdHJpY3QgX19uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgRklMRSAqX19y ZXN0cmljdCBfX3N0cmVhbSkgOwoKCgoKCmV4dGVybiBpbnQgZnB1dHMgKF9fY29uc3QgY2hhciAq X19yZXN0cmljdCBfX3MsIEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0pCiAgICAgOwoKCmV4dGVy biBpbnQgcHV0cyAoX19jb25zdCBjaGFyICpfX3MpIDsKCgoKZXh0ZXJuIGludCB1bmdldGMgKGlu dCBfX2MsIEZJTEUgKl9fc3RyZWFtKSA7CgoKCmV4dGVybiBzaXplX3QgZnJlYWQgKHZvaWQgKl9f cmVzdHJpY3QgX19wdHIsIHNpemVfdCBfX3NpemUsCiAgICAgICAgICAgICAgICAgICAgIHNpemVf dCBfX24sIEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0pIDsKCmV4dGVybiBzaXplX3QgZndyaXRl IChfX2NvbnN0IHZvaWQgKl9fcmVzdHJpY3QgX19wdHIsIHNpemVfdCBfX3NpemUsCiAgICAgICAg ICAgICAgICAgICAgICBzaXplX3QgX19uLCBGSUxFICpfX3Jlc3RyaWN0IF9fcykgOwoKCgoKZXh0 ZXJuIGludCBmcHV0c191bmxvY2tlZCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fcywKICAg ICAgICAgICAgICAgICAgICAgICAgICAgRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSkgOwoKCgoK ZXh0ZXJuIHNpemVfdCBmcmVhZF91bmxvY2tlZCAodm9pZCAqX19yZXN0cmljdCBfX3B0ciwgc2l6 ZV90IF9fc2l6ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IF9fbiwgRklM RSAqX19yZXN0cmljdCBfX3N0cmVhbSkgOwpleHRlcm4gc2l6ZV90IGZ3cml0ZV91bmxvY2tlZCAo X19jb25zdCB2b2lkICpfX3Jlc3RyaWN0IF9fcHRyLCBzaXplX3QgX19zaXplLAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IF9fbiwgRklMRSAqX19yZXN0cmljdCBfX3N0cmVh bSkgOwoKCgoKCmV4dGVybiBpbnQgZnNlZWsgKEZJTEUgKl9fc3RyZWFtLCBsb25nIGludCBfX29m ZiwgaW50IF9fd2hlbmNlKSA7CgpleHRlcm4gbG9uZyBpbnQgZnRlbGwgKEZJTEUgKl9fc3RyZWFt KSA7CgpleHRlcm4gdm9pZCByZXdpbmQgKEZJTEUgKl9fc3RyZWFtKSA7CgojIDUyOCAiLi4vbGli aW8vc3RkaW8uaCIKZXh0ZXJuIGludCBmc2Vla28gKEZJTEUgKl9fc3RyZWFtLCBfX29mZl90IF9f b2ZmLCBpbnQgX193aGVuY2UpIDsKCmV4dGVybiBfX29mZl90IGZ0ZWxsbyAoRklMRSAqX19zdHJl YW0pIDsKIyA1NDQgIi4uL2xpYmlvL3N0ZGlvLmgiCgoKCmV4dGVybiBpbnQgZmdldHBvcyAoRklM RSAqX19yZXN0cmljdCBfX3N0cmVhbSwgZnBvc190ICpfX3Jlc3RyaWN0IF9fcG9zKQogICAgIDsK CmV4dGVybiBpbnQgZnNldHBvcyAoRklMRSAqX19zdHJlYW0sIF9fY29uc3QgZnBvc190ICpfX3Bv cykgOwojIDU2MyAiLi4vbGliaW8vc3RkaW8uaCIKCgoKZXh0ZXJuIGludCBmc2Vla282NCAoRklM RSAqX19zdHJlYW0sIF9fb2ZmNjRfdCBfX29mZiwgaW50IF9fd2hlbmNlKSA7CmV4dGVybiBfX29m ZjY0X3QgZnRlbGxvNjQgKEZJTEUgKl9fc3RyZWFtKSA7CmV4dGVybiBpbnQgZmdldHBvczY0IChG SUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtLCBmcG9zNjRfdCAqX19yZXN0cmljdCBfX3BvcykKICAg ICA7CmV4dGVybiBpbnQgZnNldHBvczY0IChGSUxFICpfX3N0cmVhbSwgX19jb25zdCBmcG9zNjRf dCAqX19wb3MpIDsKCgoKCmV4dGVybiB2b2lkIGNsZWFyZXJyIChGSUxFICpfX3N0cmVhbSkgOwoK ZXh0ZXJuIGludCBmZW9mIChGSUxFICpfX3N0cmVhbSkgOwoKZXh0ZXJuIGludCBmZXJyb3IgKEZJ TEUgKl9fc3RyZWFtKSA7CgoKCgpleHRlcm4gdm9pZCBjbGVhcmVycl91bmxvY2tlZCAoRklMRSAq X19zdHJlYW0pIDsKZXh0ZXJuIGludCBmZW9mX3VubG9ja2VkIChGSUxFICpfX3N0cmVhbSkgOwpl eHRlcm4gaW50IGZlcnJvcl91bmxvY2tlZCAoRklMRSAqX19zdHJlYW0pIDsKCgoKCgpleHRlcm4g dm9pZCBwZXJyb3IgKF9fY29uc3QgY2hhciAqX19zKSA7CgoKCgoKCiMgMSAiLi4vc3lzZGVwcy91 bml4L3N5c3YvbGludXgvYml0cy9zeXNfZXJybGlzdC5oIiAxCiMgMjcgIi4uL3N5c2RlcHMvdW5p eC9zeXN2L2xpbnV4L2JpdHMvc3lzX2Vycmxpc3QuaCIKZXh0ZXJuIGludCBzeXNfbmVycjsKZXh0 ZXJuIF9fY29uc3QgY2hhciAqX19jb25zdCBzeXNfZXJybGlzdFtdOwoKCmV4dGVybiBpbnQgX3N5 c19uZXJyOwpleHRlcm4gX19jb25zdCBjaGFyICpfX2NvbnN0IF9zeXNfZXJybGlzdFtdOwojIDYw MCAiLi4vbGliaW8vc3RkaW8uaCIgMgoKCgoKZXh0ZXJuIGludCBmaWxlbm8gKEZJTEUgKl9fc3Ry ZWFtKSA7CgoKCgpleHRlcm4gaW50IGZpbGVub191bmxvY2tlZCAoRklMRSAqX19zdHJlYW0pIDsK CgoKCgoKZXh0ZXJuIEZJTEUgKnBvcGVuIChfX2NvbnN0IGNoYXIgKl9fY29tbWFuZCwgX19jb25z dCBjaGFyICpfX21vZGVzKSA7CgoKZXh0ZXJuIGludCBwY2xvc2UgKEZJTEUgKl9fc3RyZWFtKSA7 CgoKCgoKZXh0ZXJuIGNoYXIgKmN0ZXJtaWQgKGNoYXIgKl9fcykgOwoKCgoKCmV4dGVybiBjaGFy ICpjdXNlcmlkIChjaGFyICpfX3MpIDsKCgoKCnN0cnVjdCBvYnN0YWNrOwoKCmV4dGVybiBpbnQg b2JzdGFja19wcmludGYgKHN0cnVjdCBvYnN0YWNrICpfX3Jlc3RyaWN0IF9fb2JzdGFjaywKICAg ICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0 LCAuLi4pCiAgICAgX19hdHRyaWJ1dGVfXyAoKF9fZm9ybWF0X18gKF9fcHJpbnRmX18sIDIsIDMp KSk7CmV4dGVybiBpbnQgb2JzdGFja192cHJpbnRmIChzdHJ1Y3Qgb2JzdGFjayAqX19yZXN0cmlj dCBfX29ic3RhY2ssCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9f cmVzdHJpY3QgX19mb3JtYXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2dudWNfdmFf bGlzdCBfX2FyZ3MpCiAgICAgX19hdHRyaWJ1dGVfXyAoKF9fZm9ybWF0X18gKF9fcHJpbnRmX18s IDIsIDApKSk7CgoKCgoKCgpleHRlcm4gdm9pZCBmbG9ja2ZpbGUgKEZJTEUgKl9fc3RyZWFtKSA7 CgoKCmV4dGVybiBpbnQgZnRyeWxvY2tmaWxlIChGSUxFICpfX3N0cmVhbSkgOwoKCmV4dGVybiB2 b2lkIGZ1bmxvY2tmaWxlIChGSUxFICpfX3N0cmVhbSkgOwojIDY3NCAiLi4vbGliaW8vc3RkaW8u aCIKIyAxICIuLi9saWJpby9iaXRzL3N0ZGlvLmgiIDEKIyAzMyAiLi4vbGliaW8vYml0cy9zdGRp by5oIgpleHRlcm4gX19pbmxpbmUgaW50CnZwcmludGYgKF9fY29uc3QgY2hhciAqX19yZXN0cmlj dCBfX2ZtdCwgX19nbnVjX3ZhX2xpc3QgX19hcmcpCnsKICByZXR1cm4gdmZwcmludGYgKHN0ZG91 dCwgX19mbXQsIF9fYXJnKTsKfQoKCmV4dGVybiBfX2lubGluZSBpbnQKZ2V0Y2hhciAodm9pZCkK ewogIHJldHVybiBfSU9fZ2V0YyAoc3RkaW4pOwp9CgoKCgpleHRlcm4gX19pbmxpbmUgaW50Cmdl dGNfdW5sb2NrZWQgKEZJTEUgKl9fZnApCnsKICByZXR1cm4gKChfX2ZwKS0+X0lPX3JlYWRfcHRy ID49IChfX2ZwKS0+X0lPX3JlYWRfZW5kID8gX191ZmxvdyAoX19mcCkgOiAqKHVuc2lnbmVkIGNo YXIgKikgKF9fZnApLT5fSU9fcmVhZF9wdHIrKyk7Cn0KCgpleHRlcm4gX19pbmxpbmUgaW50Cmdl dGNoYXJfdW5sb2NrZWQgKHZvaWQpCnsKICByZXR1cm4gKChzdGRpbiktPl9JT19yZWFkX3B0ciA+ PSAoc3RkaW4pLT5fSU9fcmVhZF9lbmQgPyBfX3VmbG93IChzdGRpbikgOiAqKHVuc2lnbmVkIGNo YXIgKikgKHN0ZGluKS0+X0lPX3JlYWRfcHRyKyspOwp9CgoKCgpleHRlcm4gX19pbmxpbmUgaW50 CnB1dGNoYXIgKGludCBfX2MpCnsKICByZXR1cm4gX0lPX3B1dGMgKF9fYywgc3Rkb3V0KTsKfQoK CgoKZXh0ZXJuIF9faW5saW5lIGludApmcHV0Y191bmxvY2tlZCAoaW50IF9fYywgRklMRSAqX19z dHJlYW0pCnsKICByZXR1cm4gKCgoX19zdHJlYW0pLT5fSU9fd3JpdGVfcHRyID49IChfX3N0cmVh bSktPl9JT193cml0ZV9lbmQpID8gX19vdmVyZmxvdyAoX19zdHJlYW0sICh1bnNpZ25lZCBjaGFy KSAoX19jKSkgOiAodW5zaWduZWQgY2hhcikgKCooX19zdHJlYW0pLT5fSU9fd3JpdGVfcHRyKysg PSAoX19jKSkpOwp9CgoKCgoKZXh0ZXJuIF9faW5saW5lIGludApwdXRjX3VubG9ja2VkIChpbnQg X19jLCBGSUxFICpfX3N0cmVhbSkKewogIHJldHVybiAoKChfX3N0cmVhbSktPl9JT193cml0ZV9w dHIgPj0gKF9fc3RyZWFtKS0+X0lPX3dyaXRlX2VuZCkgPyBfX292ZXJmbG93IChfX3N0cmVhbSwg KHVuc2lnbmVkIGNoYXIpIChfX2MpKSA6ICh1bnNpZ25lZCBjaGFyKSAoKihfX3N0cmVhbSktPl9J T193cml0ZV9wdHIrKyA9IChfX2MpKSk7Cn0KCgpleHRlcm4gX19pbmxpbmUgaW50CnB1dGNoYXJf dW5sb2NrZWQgKGludCBfX2MpCnsKICByZXR1cm4gKCgoc3Rkb3V0KS0+X0lPX3dyaXRlX3B0ciA+ PSAoc3Rkb3V0KS0+X0lPX3dyaXRlX2VuZCkgPyBfX292ZXJmbG93IChzdGRvdXQsICh1bnNpZ25l ZCBjaGFyKSAoX19jKSkgOiAodW5zaWduZWQgY2hhcikgKCooc3Rkb3V0KS0+X0lPX3dyaXRlX3B0 cisrID0gKF9fYykpKTsKfQoKCgoKCmV4dGVybiBfX2lubGluZSBfX3NzaXplX3QKZ2V0bGluZSAo Y2hhciAqKl9fbGluZXB0ciwgc2l6ZV90ICpfX24sIEZJTEUgKl9fc3RyZWFtKQp7CiAgcmV0dXJu IF9fZ2V0ZGVsaW0gKF9fbGluZXB0ciwgX19uLCAnXG4nLCBfX3N0cmVhbSk7Cn0KCgoKCgpleHRl cm4gX19pbmxpbmUgaW50CmZlb2ZfdW5sb2NrZWQgKEZJTEUgKl9fc3RyZWFtKQp7CiAgcmV0dXJu ICgoKF9fc3RyZWFtKS0+X2ZsYWdzICYgMHgxMCkgIT0gMCk7Cn0KCgpleHRlcm4gX19pbmxpbmUg aW50CmZlcnJvcl91bmxvY2tlZCAoRklMRSAqX19zdHJlYW0pCnsKICByZXR1cm4gKCgoX19zdHJl YW0pLT5fZmxhZ3MgJiAweDIwKSAhPSAwKTsKfQojIDY3NSAiLi4vbGliaW8vc3RkaW8uaCIgMgoK CgojIDYgIi4uL2luY2x1ZGUvc3RkaW8uaCIgMgoKCmV4dGVybiBpbnQgX19mY2xvc2VhbGwgKHZv aWQpOwpleHRlcm4gaW50IF9fc25wcmludGYgKGNoYXIgKl9fcmVzdHJpY3QgX19zLCBzaXplX3Qg X19tYXhsZW4sCiAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0 IF9fZm9ybWF0LCAuLi4pCiAgICAgX19hdHRyaWJ1dGVfXyAoKF9fZm9ybWF0X18gKF9fcHJpbnRm X18sIDMsIDQpKSk7CmV4dGVybiBpbnQgX192c25wcmludGYgKGNoYXIgKl9fcmVzdHJpY3QgX19z LCBzaXplX3QgX19tYXhsZW4sCiAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAq X19yZXN0cmljdCBfX2Zvcm1hdCwgX19nbnVjX3ZhX2xpc3QgX19hcmcpCiAgICAgX19hdHRyaWJ1 dGVfXyAoKF9fZm9ybWF0X18gKF9fcHJpbnRmX18sIDMsIDApKSk7CmV4dGVybiBpbnQgX192ZnNj YW5mIChGSUxFICpfX3Jlc3RyaWN0IF9fcywKICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qg Y2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwKICAgICAgICAgICAgICAgICAgICAgIF9fZ251Y192 YV9saXN0IF9fYXJnKQogICAgIF9fYXR0cmlidXRlX18gKChfX2Zvcm1hdF9fIChfX3NjYW5mX18s IDIsIDApKSk7CmV4dGVybiBfX3R5cGVvZiAoX192ZnNjYW5mKSBfX0dJX19fdmZzY2FuZjsgZXh0 ZXJuIF9fdHlwZW9mIChfX3Zmc2NhbmYpIF9fdmZzY2FuZiBfX2FzbV9fICgiIiAiX19HSV9fX3Zm c2NhbmYiKSBfX2F0dHJpYnV0ZV9fICgodmlzaWJpbGl0eSAoImhpZGRlbiIpKSk7CmV4dGVybiBp bnQgX192c2NhbmYgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwKICAgICAgICAg ICAgICAgICAgICAgX19nbnVjX3ZhX2xpc3QgX19hcmcpCiAgICAgX19hdHRyaWJ1dGVfXyAoKF9f Zm9ybWF0X18gKF9fc2NhbmZfXywgMSwgMCkpKTsKZXh0ZXJuIF9fc3NpemVfdCBfX2dldGxpbmUg KGNoYXIgKipfX2xpbmVwdHIsIHNpemVfdCAqX19uLAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBGSUxFICpfX3N0cmVhbSk7CmV4dGVybiBpbnQgX192c3NjYW5mIChfX2NvbnN0IGNoYXIg Kl9fcmVzdHJpY3QgX19zLAogICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jl c3RyaWN0IF9fZm9ybWF0LAogICAgICAgICAgICAgICAgICAgICAgX19nbnVjX3ZhX2xpc3QgX19h cmcpCiAgICAgX19hdHRyaWJ1dGVfXyAoKF9fZm9ybWF0X18gKF9fc2NhbmZfXywgMiwgMCkpKTsK CgpleHRlcm4gRklMRSAqX19uZXdfdG1wZmlsZSAodm9pZCk7CmV4dGVybiBGSUxFICpfX29sZF90 bXBmaWxlICh2b2lkKTsKCgoKCiMgMSAiL3Vzci9saWI2NC9nY2MtbGliL3g4Nl82NC1zdXNlLWxp bnV4LzMuMy9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMgNAojIDM4ICIuLi9pbmNsdWRlL3N0ZGlvLmgi IDIKCmV4dGVybiBpbnQgX19wYXRoX3NlYXJjaCAoY2hhciAqX190bXBsLCBzaXplX3QgX190bXBs X2xlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fZGlyLCBfX2Nv bnN0IGNoYXIgKl9fcGZ4LAogICAgICAgICAgICAgICAgICAgICAgICAgIGludCBfX3RyeV90ZW1w ZGlyKTsKCmV4dGVybiBpbnQgX19nZW5fdGVtcG5hbWUgKGNoYXIgKl9fdG1wbCwgaW50IF9fa2lu ZCk7CgoKCgoKCgpleHRlcm4gdm9pZCBfX2xpYmNfZmF0YWwgKF9fY29uc3QgY2hhciAqX19tZXNz YWdlKQogICAgIF9fYXR0cmlidXRlX18gKChfX25vcmV0dXJuX18pKTsKCgpleHRlcm4gdm9pZCBf X2Zsb2NrZmlsZSAoRklMRSAqX19zdHJlYW0pOwoKCmV4dGVybiB2b2lkIF9fZnVubG9ja2ZpbGUg KEZJTEUgKl9fc3RyZWFtKTsKCgoKZXh0ZXJuIGludCBfX2Z0cnlsb2NrZmlsZSAoRklMRSAqX19z dHJlYW0pOwoKZXh0ZXJuIGludCBfX2dldGNfdW5sb2NrZWQgKEZJTEUgKl9fZnApOwpleHRlcm4g d2ludF90IF9fZ2V0d2NfdW5sb2NrZWQgKEZJTEUgKl9fZnApOwoKCmV4dGVybiBfX2NvbnN0IGNo YXIgKl9fY29uc3QgX3N5c19lcnJsaXN0X2ludGVybmFsW10gX19hdHRyaWJ1dGVfXyAoKHZpc2li aWxpdHkgKCJoaWRkZW4iKSkpOwpleHRlcm4gaW50IF9zeXNfbmVycl9pbnRlcm5hbCBfX2F0dHJp YnV0ZV9fICgodmlzaWJpbGl0eSAoImhpZGRlbiIpKSk7CgpleHRlcm4gaW50IF9fYXNwcmludGZf aW50ZXJuYWwgKGNoYXIgKipfX3Jlc3RyaWN0IF9fcHRyLAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2ZtdCwgLi4uKQogICAgIF9fYXR0 cmlidXRlX18gKCh2aXNpYmlsaXR5ICgiaGlkZGVuIikpKSBfX2F0dHJpYnV0ZV9fICgoX19mb3Jt YXRfXyAoX19wcmludGZfXywgMiwgMykpKTsKCgoKCmV4dGVybiBfSU9fRklMRSAqX0lPX25ld19m b3BlbiAoY29uc3QgY2hhciosIGNvbnN0IGNoYXIqKSA7CgpleHRlcm4gX0lPX0ZJTEUgKl9JT19u ZXdfZmRvcGVuIChpbnQsIGNvbnN0IGNoYXIqKSA7CgpleHRlcm4gaW50IF9JT19uZXdfZmNsb3Nl IChfSU9fRklMRSopIDsKCmV4dGVybiBpbnQgX0lPX2ZwdXRzIChjb25zdCBjaGFyKiwgX0lPX0ZJ TEUqKSA7CmV4dGVybiBfX3R5cGVvZiAoX0lPX2ZwdXRzKSBfX0dJX19JT19mcHV0czsgZXh0ZXJu IF9fdHlwZW9mIChfSU9fZnB1dHMpIF9JT19mcHV0cyBfX2FzbV9fICgiIiAiX19HSV9fSU9fZnB1 dHMiKSBfX2F0dHJpYnV0ZV9fICgodmlzaWJpbGl0eSAoImhpZGRlbiIpKSk7CgpleHRlcm4gaW50 IF9JT19uZXdfZnNldHBvcyAoX0lPX0ZJTEUgKiwgY29uc3QgX0dfZnBvc190ICopIDsKCmV4dGVy biBpbnQgX0lPX25ld19mZ2V0cG9zIChfSU9fRklMRSAqLCBfR19mcG9zX3QgKikgOwoKCgpleHRl cm4gX190eXBlb2YgKGRwcmludGYpIF9fR0lfZHByaW50ZjsgZXh0ZXJuIF9fdHlwZW9mIChkcHJp bnRmKSBkcHJpbnRmIF9fYXNtX18gKCIiICJfX0dJX2RwcmludGYiKSBfX2F0dHJpYnV0ZV9fICgo dmlzaWJpbGl0eSAoImhpZGRlbiIpKSk7CmV4dGVybiBfX3R5cGVvZiAoZnByaW50ZikgX19HSV9m cHJpbnRmOyBleHRlcm4gX190eXBlb2YgKGZwcmludGYpIGZwcmludGYgX19hc21fXyAoIiIgIl9f R0lfZnByaW50ZiIpIF9fYXR0cmlidXRlX18gKCh2aXNpYmlsaXR5ICgiaGlkZGVuIikpKTsKZXh0 ZXJuIF9fdHlwZW9mICh2ZnByaW50ZikgX19HSV92ZnByaW50ZjsgZXh0ZXJuIF9fdHlwZW9mICh2 ZnByaW50ZikgdmZwcmludGYgX19hc21fXyAoIiIgIl9fR0lfdmZwcmludGYiKSBfX2F0dHJpYnV0 ZV9fICgodmlzaWJpbGl0eSAoImhpZGRlbiIpKSk7CmV4dGVybiBfX3R5cGVvZiAoc3ByaW50Zikg X19HSV9zcHJpbnRmOyBleHRlcm4gX190eXBlb2YgKHNwcmludGYpIHNwcmludGYgX19hc21fXyAo IiIgIl9fR0lfc3ByaW50ZiIpIF9fYXR0cmlidXRlX18gKCh2aXNpYmlsaXR5ICgiaGlkZGVuIikp KTsKZXh0ZXJuIF9fdHlwZW9mIChzc2NhbmYpIF9fR0lfc3NjYW5mOyBleHRlcm4gX190eXBlb2Yg KHNzY2FuZikgc3NjYW5mIF9fYXNtX18gKCIiICJfX0dJX3NzY2FuZiIpIF9fYXR0cmlidXRlX18g KCh2aXNpYmlsaXR5ICgiaGlkZGVuIikpKTsKZXh0ZXJuIF9fdHlwZW9mIChmd3JpdGUpIF9fR0lf ZndyaXRlOyBleHRlcm4gX190eXBlb2YgKGZ3cml0ZSkgZndyaXRlIF9fYXNtX18gKCIiICJfX0dJ X2Z3cml0ZSIpIF9fYXR0cmlidXRlX18gKCh2aXNpYmlsaXR5ICgiaGlkZGVuIikpKTsKZXh0ZXJu IF9fdHlwZW9mIChwZXJyb3IpIF9fR0lfcGVycm9yOyBleHRlcm4gX190eXBlb2YgKHBlcnJvcikg cGVycm9yIF9fYXNtX18gKCIiICJfX0dJX3BlcnJvciIpIF9fYXR0cmlidXRlX18gKCh2aXNpYmls aXR5ICgiaGlkZGVuIikpKTsKZXh0ZXJuIF9fdHlwZW9mIChyZW1vdmUpIF9fR0lfcmVtb3ZlOyBl eHRlcm4gX190eXBlb2YgKHJlbW92ZSkgcmVtb3ZlIF9fYXNtX18gKCIiICJfX0dJX3JlbW92ZSIp IF9fYXR0cmlidXRlX18gKCh2aXNpYmlsaXR5ICgiaGlkZGVuIikpKTsKZXh0ZXJuIF9fdHlwZW9m IChyZXdpbmQpIF9fR0lfcmV3aW5kOyBleHRlcm4gX190eXBlb2YgKHJld2luZCkgcmV3aW5kIF9f YXNtX18gKCIiICJfX0dJX3Jld2luZCIpIF9fYXR0cmlidXRlX18gKCh2aXNpYmlsaXR5ICgiaGlk ZGVuIikpKTsKZXh0ZXJuIF9fdHlwZW9mIChmaWxlbm8pIF9fR0lfZmlsZW5vOyBleHRlcm4gX190 eXBlb2YgKGZpbGVubykgZmlsZW5vIF9fYXNtX18gKCIiICJfX0dJX2ZpbGVubyIpIF9fYXR0cmli dXRlX18gKCh2aXNpYmlsaXR5ICgiaGlkZGVuIikpKTsKZXh0ZXJuIF9fdHlwZW9mIChmd3JpdGUp IF9fR0lfZndyaXRlOyBleHRlcm4gX190eXBlb2YgKGZ3cml0ZSkgZndyaXRlIF9fYXNtX18gKCIi ICJfX0dJX2Z3cml0ZSIpIF9fYXR0cmlidXRlX18gKCh2aXNpYmlsaXR5ICgiaGlkZGVuIikpKTsK ZXh0ZXJuIF9fdHlwZW9mIChmc2VlaykgX19HSV9mc2VlazsgZXh0ZXJuIF9fdHlwZW9mIChmc2Vl aykgZnNlZWsgX19hc21fXyAoIiIgIl9fR0lfZnNlZWsiKSBfX2F0dHJpYnV0ZV9fICgodmlzaWJp bGl0eSAoImhpZGRlbiIpKSk7CmV4dGVybiBfX3R5cGVvZiAoZmZsdXNoX3VubG9ja2VkKSBfX0dJ X2ZmbHVzaF91bmxvY2tlZDsgZXh0ZXJuIF9fdHlwZW9mIChmZmx1c2hfdW5sb2NrZWQpIGZmbHVz aF91bmxvY2tlZCBfX2FzbV9fICgiIiAiX19HSV9mZmx1c2hfdW5sb2NrZWQiKSBfX2F0dHJpYnV0 ZV9fICgodmlzaWJpbGl0eSAoImhpZGRlbiIpKSk7CmV4dGVybiBfX3R5cGVvZiAoZnJlYWRfdW5s b2NrZWQpIF9fR0lfZnJlYWRfdW5sb2NrZWQ7IGV4dGVybiBfX3R5cGVvZiAoZnJlYWRfdW5sb2Nr ZWQpIGZyZWFkX3VubG9ja2VkIF9fYXNtX18gKCIiICJfX0dJX2ZyZWFkX3VubG9ja2VkIikgX19h dHRyaWJ1dGVfXyAoKHZpc2liaWxpdHkgKCJoaWRkZW4iKSkpOwpleHRlcm4gX190eXBlb2YgKGZ3 cml0ZV91bmxvY2tlZCkgX19HSV9md3JpdGVfdW5sb2NrZWQ7IGV4dGVybiBfX3R5cGVvZiAoZndy aXRlX3VubG9ja2VkKSBmd3JpdGVfdW5sb2NrZWQgX19hc21fXyAoIiIgIl9fR0lfZndyaXRlX3Vu bG9ja2VkIikgX19hdHRyaWJ1dGVfXyAoKHZpc2liaWxpdHkgKCJoaWRkZW4iKSkpOwpleHRlcm4g X190eXBlb2YgKGZnZXRzX3VubG9ja2VkKSBfX0dJX2ZnZXRzX3VubG9ja2VkOyBleHRlcm4gX190 eXBlb2YgKGZnZXRzX3VubG9ja2VkKSBmZ2V0c191bmxvY2tlZCBfX2FzbV9fICgiIiAiX19HSV9m Z2V0c191bmxvY2tlZCIpIF9fYXR0cmlidXRlX18gKCh2aXNpYmlsaXR5ICgiaGlkZGVuIikpKTsK ZXh0ZXJuIF9fdHlwZW9mIChmcHV0c191bmxvY2tlZCkgX19HSV9mcHV0c191bmxvY2tlZDsgZXh0 ZXJuIF9fdHlwZW9mIChmcHV0c191bmxvY2tlZCkgZnB1dHNfdW5sb2NrZWQgX19hc21fXyAoIiIg Il9fR0lfZnB1dHNfdW5sb2NrZWQiKSBfX2F0dHJpYnV0ZV9fICgodmlzaWJpbGl0eSAoImhpZGRl biIpKSk7CmV4dGVybiBfX3R5cGVvZiAob3Blbl9tZW1zdHJlYW0pIF9fR0lfb3Blbl9tZW1zdHJl YW07IGV4dGVybiBfX3R5cGVvZiAob3Blbl9tZW1zdHJlYW0pIG9wZW5fbWVtc3RyZWFtIF9fYXNt X18gKCIiICJfX0dJX29wZW5fbWVtc3RyZWFtIikgX19hdHRyaWJ1dGVfXyAoKHZpc2liaWxpdHkg KCJoaWRkZW4iKSkpOwojIDMzICJ2ZnByaW50Zi5jIiAyCiMgNDQgInZmcHJpbnRmLmMiCiMgMSAi Li4vbGliaW8vbGliaW9QLmgiIDEKIyAzOCAiLi4vbGliaW8vbGliaW9QLmgiCiMgMSAiLi4vbGli aW8vaW9saWJpby5oIiAxCiMgMSAiLi4vaW5jbHVkZS9saWJpby5oIiAxCiMgMiAiLi4vbGliaW8v aW9saWJpby5oIiAyCiMgMTAgIi4uL2xpYmlvL2lvbGliaW8uaCIKZXh0ZXJuIGludCBfSU9fZmNs b3NlIChfSU9fRklMRSopIDsKZXh0ZXJuIGludCBfSU9fbmV3X2ZjbG9zZSAoX0lPX0ZJTEUqKSA7 CmV4dGVybiBpbnQgX0lPX29sZF9mY2xvc2UgKF9JT19GSUxFKikgOwpleHRlcm4gX0lPX0ZJTEUg Kl9JT19mZG9wZW4gKGludCwgY29uc3QgY2hhciopIDsKZXh0ZXJuIF9JT19GSUxFICpfSU9fb2xk X2Zkb3BlbiAoaW50LCBjb25zdCBjaGFyKikgOwpleHRlcm4gX0lPX0ZJTEUgKl9JT19uZXdfZmRv cGVuIChpbnQsIGNvbnN0IGNoYXIqKSA7CmV4dGVybiBpbnQgX0lPX2ZmbHVzaCAoX0lPX0ZJTEUq KSA7CmV4dGVybiBpbnQgX0lPX2ZnZXRwb3MgKF9JT19GSUxFKiwgX0dfZnBvc190KikgOwpleHRl cm4gaW50IF9JT19mZ2V0cG9zNjQgKF9JT19GSUxFKiwgX0dfZnBvczY0X3QqKSA7CmV4dGVybiBj aGFyKiBfSU9fZmdldHMgKGNoYXIqLCBpbnQsIF9JT19GSUxFKikgOwpleHRlcm4gX0lPX0ZJTEUg Kl9JT19mb3BlbiAoY29uc3QgY2hhciosIGNvbnN0IGNoYXIqKSA7CmV4dGVybiBfSU9fRklMRSAq X0lPX29sZF9mb3BlbiAoY29uc3QgY2hhciosIGNvbnN0IGNoYXIqKSA7CmV4dGVybiBfSU9fRklM RSAqX0lPX25ld19mb3BlbiAoY29uc3QgY2hhciosIGNvbnN0IGNoYXIqKSA7CmV4dGVybiBfSU9f RklMRSAqX0lPX2ZvcGVuNjQgKGNvbnN0IGNoYXIqLCBjb25zdCBjaGFyKikgOwpleHRlcm4gX0lP X0ZJTEUgKl9fZm9wZW5faW50ZXJuYWwgKGNvbnN0IGNoYXIqLCBjb25zdCBjaGFyKiwgaW50KSA7 CmV4dGVybiBfSU9fRklMRSAqX19mb3Blbl9tYXliZV9tbWFwIChfSU9fRklMRSAqKSA7CmV4dGVy biBpbnQgX0lPX2ZwcmludGYgKF9JT19GSUxFKiwgY29uc3QgY2hhciosIC4uLikgOwpleHRlcm4g aW50IF9JT19mcHV0cyAoY29uc3QgY2hhciosIF9JT19GSUxFKikgOwpleHRlcm4gX190eXBlb2Yg KF9JT19mcHV0cykgX19HSV9fSU9fZnB1dHM7IGV4dGVybiBfX3R5cGVvZiAoX0lPX2ZwdXRzKSBf SU9fZnB1dHMgX19hc21fXyAoIiIgIl9fR0lfX0lPX2ZwdXRzIikgX19hdHRyaWJ1dGVfXyAoKHZp c2liaWxpdHkgKCJoaWRkZW4iKSkpOwpleHRlcm4gaW50IF9JT19mc2V0cG9zIChfSU9fRklMRSos IGNvbnN0IF9HX2Zwb3NfdCAqKSA7CmV4dGVybiBpbnQgX0lPX2ZzZXRwb3M2NCAoX0lPX0ZJTEUq LCBjb25zdCBfR19mcG9zNjRfdCAqKSA7CmV4dGVybiBsb25nIGludCBfSU9fZnRlbGwgKF9JT19G SUxFKikgOwpleHRlcm4gc2l6ZV90IF9JT19mcmVhZCAodm9pZCosIHNpemVfdCwgc2l6ZV90LCBf SU9fRklMRSopIDsKZXh0ZXJuIHNpemVfdCBfSU9fZndyaXRlIChjb25zdCB2b2lkKiwgc2l6ZV90 LCBzaXplX3QsIF9JT19GSUxFKikgOwoKZXh0ZXJuIGNoYXIqIF9JT19nZXRzIChjaGFyKikgOwpl eHRlcm4gdm9pZCBfSU9fcGVycm9yIChjb25zdCBjaGFyKikgOwpleHRlcm4gaW50IF9JT19wcmlu dGYgKGNvbnN0IGNoYXIqLCAuLi4pIDsKZXh0ZXJuIGludCBfSU9fcHV0cyAoY29uc3QgY2hhciop IDsKZXh0ZXJuIGludCBfSU9fc2NhbmYgKGNvbnN0IGNoYXIqLCAuLi4pIDsKZXh0ZXJuIHZvaWQg X0lPX3NldGJ1ZmZlciAoX0lPX0ZJTEUgKiwgY2hhciosIHNpemVfdCkgOwpleHRlcm4gaW50IF9J T19zZXR2YnVmIChfSU9fRklMRSosIGNoYXIqLCBpbnQsIHNpemVfdCkgOwpleHRlcm4gaW50IF9J T19zc2NhbmYgKGNvbnN0IGNoYXIqLCBjb25zdCBjaGFyKiwgLi4uKSA7CmV4dGVybiBpbnQgX0lP X3NwcmludGYgKGNoYXIgKiwgY29uc3QgY2hhciosIC4uLikgOwpleHRlcm4gaW50IF9JT191bmdl dGMgKGludCwgX0lPX0ZJTEUqKSA7CmV4dGVybiBpbnQgX0lPX3Zzc2NhbmYgKGNvbnN0IGNoYXIg KiwgY29uc3QgY2hhciAqLCBfX2dudWNfdmFfbGlzdCkgOwpleHRlcm4gaW50IF9JT192c3ByaW50 ZiAoY2hhciosIGNvbnN0IGNoYXIqLCBfX2dudWNfdmFfbGlzdCkgOwpleHRlcm4gaW50IF9JT192 c3dwcmludGYgKHdjaGFyX3QqLCBzaXplX3QsIGNvbnN0IHdjaGFyX3QqLCBfX2dudWNfdmFfbGlz dCkgOwoKCnN0cnVjdCBvYnN0YWNrOwpleHRlcm4gaW50IF9JT19vYnN0YWNrX3ZwcmludGYgKHN0 cnVjdCBvYnN0YWNrICosIGNvbnN0IGNoYXIgKiwgX19nbnVjX3ZhX2xpc3QpIDsKCmV4dGVybiBp bnQgX0lPX29ic3RhY2tfcHJpbnRmIChzdHJ1Y3Qgb2JzdGFjayAqLCBjb25zdCBjaGFyICosIC4u LikgOwojIDc0ICIuLi9saWJpby9pb2xpYmlvLmgiCmV4dGVybiBfSU9fRklMRSogX0lPX3BvcGVu IChjb25zdCBjaGFyKiwgY29uc3QgY2hhciopIDsKZXh0ZXJuIF9JT19GSUxFKiBfSU9fbmV3X3Bv cGVuIChjb25zdCBjaGFyKiwgY29uc3QgY2hhciopIDsKZXh0ZXJuIF9JT19GSUxFKiBfSU9fb2xk X3BvcGVuIChjb25zdCBjaGFyKiwgY29uc3QgY2hhciopIDsKZXh0ZXJuIGludCBfX25ld19wY2xv c2UgKF9JT19GSUxFICopIDsKZXh0ZXJuIGludCBfX29sZF9wY2xvc2UgKF9JT19GSUxFICopIDsK CgoKCl9JT19GSUxFICpfX25ld19mcmVvcGVuIChjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiwg X0lPX0ZJTEUgKikgOwpfSU9fRklMRSAqX19vbGRfZnJlb3BlbiAoY29uc3QgY2hhciAqLCBjb25z dCBjaGFyICosIF9JT19GSUxFICopIDsKCgpleHRlcm4gdm9pZCBfSU9fc2V0YnVmZmVyX2ludGVy bmFsIChfSU9fRklMRSAqLCBjaGFyKiwgc2l6ZV90KSA7CmV4dGVybiBzaXplX3QgX0lPX2ZyZWFk X2ludGVybmFsICh2b2lkKiwgc2l6ZV90LCBzaXplX3QsIF9JT19GSUxFKikgOwoKZXh0ZXJuIF9J T19GSUxFICpfSU9fZmRvcGVuX2ludGVybmFsIChpbnQsIGNvbnN0IGNoYXIqKSA7CmV4dGVybiBp bnQgX0lPX3ZzcHJpbnRmX2ludGVybmFsIChjaGFyKiwgY29uc3QgY2hhciosIF9fZ251Y192YV9s aXN0KSA7CmV4dGVybiBpbnQgX0lPX2ZmbHVzaF9pbnRlcm5hbCAoX0lPX0ZJTEUqKSA7CmV4dGVy biBzaXplX3QgX0lPX2Z3cml0ZV9pbnRlcm5hbCAoY29uc3Qgdm9pZCosIHNpemVfdCwgc2l6ZV90 LCBfSU9fRklMRSopIDsKCmV4dGVybiBsb25nIGludCBfSU9fZnRlbGxfaW50ZXJuYWwgKF9JT19G SUxFKikgOwpleHRlcm4gaW50IF9JT19mcHV0c19pbnRlcm5hbCAoY29uc3QgY2hhciosIF9JT19G SUxFKikgOwpleHRlcm4gaW50IF9JT19zZXR2YnVmX2ludGVybmFsIChfSU9fRklMRSosIGNoYXIq LCBpbnQsIHNpemVfdCkgOwojIDM5ICIuLi9saWJpby9saWJpb1AuaCIgMgojIDEzOSAiLi4vbGli aW8vbGliaW9QLmgiCnR5cGVkZWYgdm9pZCAoKl9JT19maW5pc2hfdCkgKF9JT19GSUxFICosIGlu dCk7CgoKCgoKCnR5cGVkZWYgaW50ICgqX0lPX292ZXJmbG93X3QpIChfSU9fRklMRSAqLCBpbnQp OwoKCgoKCgoKdHlwZWRlZiBpbnQgKCpfSU9fdW5kZXJmbG93X3QpIChfSU9fRklMRSAqKTsKIyAx NjggIi4uL2xpYmlvL2xpYmlvUC5oIgp0eXBlZGVmIGludCAoKl9JT19wYmFja2ZhaWxfdCkgKF9J T19GSUxFICosIGludCk7CgoKCgoKCnR5cGVkZWYgc2l6ZV90ICgqX0lPX3hzcHV0bl90KSAoX0lP X0ZJTEUgKkZQLCBjb25zdCB2b2lkICpEQVRBLCBzaXplX3QgTik7CgoKCgoKCgp0eXBlZGVmIHNp emVfdCAoKl9JT194c2dldG5fdCkgKF9JT19GSUxFICpGUCwgdm9pZCAqREFUQSwgc2l6ZV90IE4p OwojIDE5MyAiLi4vbGliaW8vbGliaW9QLmgiCnR5cGVkZWYgX19vZmY2NF90ICgqX0lPX3NlZWtv ZmZfdCkgKF9JT19GSUxFICpGUCwgX19vZmY2NF90IE9GRiwgaW50IERJUiwgaW50IE1PREUpOwoj IDIwMyAiLi4vbGliaW8vbGliaW9QLmgiCnR5cGVkZWYgX19vZmY2NF90ICgqX0lPX3NlZWtwb3Nf dCkgKF9JT19GSUxFICosIF9fb2ZmNjRfdCwgaW50KTsKCgoKCgp0eXBlZGVmIF9JT19GSUxFKiAo Kl9JT19zZXRidWZfdCkgKF9JT19GSUxFICosIGNoYXIgKiwgX19zc2l6ZV90KTsKCgoKCgoKdHlw ZWRlZiBpbnQgKCpfSU9fc3luY190KSAoX0lPX0ZJTEUgKik7CgoKCgoKCnR5cGVkZWYgaW50ICgq X0lPX2RvYWxsb2NhdGVfdCkgKF9JT19GSUxFICopOwojIDI0MiAiLi4vbGliaW8vbGliaW9QLmgi CnR5cGVkZWYgX19zc2l6ZV90ICgqX0lPX3JlYWRfdCkgKF9JT19GSUxFICosIHZvaWQgKiwgX19z c2l6ZV90KTsKCgoKCgoKCnR5cGVkZWYgX19zc2l6ZV90ICgqX0lPX3dyaXRlX3QpIChfSU9fRklM RSAqLCBjb25zdCB2b2lkICosIF9fc3NpemVfdCk7CiMgMjU5ICIuLi9saWJpby9saWJpb1AuaCIK dHlwZWRlZiBfX29mZjY0X3QgKCpfSU9fc2Vla190KSAoX0lPX0ZJTEUgKiwgX19vZmY2NF90LCBp bnQpOwoKCgoKCgoKdHlwZWRlZiBpbnQgKCpfSU9fY2xvc2VfdCkgKF9JT19GSUxFICopOwoKCgoK CgoKdHlwZWRlZiBpbnQgKCpfSU9fc3RhdF90KSAoX0lPX0ZJTEUgKiwgdm9pZCAqKTsKCgoKCgoK dHlwZWRlZiBpbnQgKCpfSU9fc2hvd21hbnljX3QpIChfSU9fRklMRSAqKTsKCgoKCgp0eXBlZGVm IHZvaWQgKCpfSU9faW1idWVfdCkgKF9JT19GSUxFICosIHZvaWQgKik7CgoKCgoKCgpzdHJ1Y3Qg X0lPX2p1bXBfdAp7CiAgICBzaXplX3QgX19kdW1teTsKCiAgICBzaXplX3QgX19kdW1teTI7Cgog ICAgX0lPX2ZpbmlzaF90IF9fZmluaXNoOwogICAgX0lPX292ZXJmbG93X3QgX19vdmVyZmxvdzsK ICAgIF9JT191bmRlcmZsb3dfdCBfX3VuZGVyZmxvdzsKICAgIF9JT191bmRlcmZsb3dfdCBfX3Vm bG93OwogICAgX0lPX3BiYWNrZmFpbF90IF9fcGJhY2tmYWlsOwoKICAgIF9JT194c3B1dG5fdCBf X3hzcHV0bjsKICAgIF9JT194c2dldG5fdCBfX3hzZ2V0bjsKICAgIF9JT19zZWVrb2ZmX3QgX19z ZWVrb2ZmOwogICAgX0lPX3NlZWtwb3NfdCBfX3NlZWtwb3M7CiAgICBfSU9fc2V0YnVmX3QgX19z ZXRidWY7CiAgICBfSU9fc3luY190IF9fc3luYzsKICAgIF9JT19kb2FsbG9jYXRlX3QgX19kb2Fs bG9jYXRlOwogICAgX0lPX3JlYWRfdCBfX3JlYWQ7CiAgICBfSU9fd3JpdGVfdCBfX3dyaXRlOwog ICAgX0lPX3NlZWtfdCBfX3NlZWs7CiAgICBfSU9fY2xvc2VfdCBfX2Nsb3NlOwogICAgX0lPX3N0 YXRfdCBfX3N0YXQ7CiAgICBfSU9fc2hvd21hbnljX3QgX19zaG93bWFueWM7CiAgICBfSU9faW1i dWVfdCBfX2ltYnVlOwoKCgoKfTsKCgoKCgoKc3RydWN0IF9JT19GSUxFX3BsdXMKewogIF9JT19G SUxFIGZpbGU7CiAgY29uc3Qgc3RydWN0IF9JT19qdW1wX3QgKnZ0YWJsZTsKfTsKCgpzdHJ1Y3Qg X0lPX2Nvb2tpZV9maWxlCnsKICBzdHJ1Y3QgX0lPX0ZJTEVfcGx1cyBfX2ZwOwogIHZvaWQgKl9f Y29va2llOwogIF9JT19jb29raWVfaW9fZnVuY3Rpb25zX3QgX19pb19mdW5jdGlvbnM7Cn07Cgpf SU9fRklMRSAqX0lPX2ZvcGVuY29va2llICh2b2lkICpjb29raWUsIGNvbnN0IGNoYXIgKm1vZGUs CiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9JT19jb29raWVfaW9fZnVuY3Rpb25zX3QgaW9f ZnVuY3Rpb25zKTsKCgoKCnR5cGVkZWYgc3RydWN0IF9JT19GSUxFICpfSU9fSVRFUjsKCgoKZXh0 ZXJuIHZvaWQgX0lPX3N3aXRjaF90b19tYWluX2dldF9hcmVhIChfSU9fRklMRSAqKSA7CmV4dGVy biB2b2lkIF9JT19zd2l0Y2hfdG9fYmFja3VwX2FyZWEgKF9JT19GSUxFICopIDsKZXh0ZXJuIGlu dCBfSU9fc3dpdGNoX3RvX2dldF9tb2RlIChfSU9fRklMRSAqKSA7CmV4dGVybiB2b2lkIF9JT19p bml0IChfSU9fRklMRSAqLCBpbnQpIDsKZXh0ZXJuIGludCBfSU9fc3B1dGJhY2tjIChfSU9fRklM RSAqLCBpbnQpIDsKZXh0ZXJuIGludCBfSU9fc3VuZ2V0YyAoX0lPX0ZJTEUgKikgOwpleHRlcm4g dm9pZCBfSU9fdW5fbGluayAoc3RydWN0IF9JT19GSUxFX3BsdXMgKikgOwpleHRlcm4gdm9pZCBf SU9fbGlua19pbiAoc3RydWN0IF9JT19GSUxFX3BsdXMgKikgOwpleHRlcm4gdm9pZCBfSU9fZG9h bGxvY2J1ZiAoX0lPX0ZJTEUgKikgOwpleHRlcm4gdm9pZCBfSU9fdW5zYXZlX21hcmtlcnMgKF9J T19GSUxFICopIDsKZXh0ZXJuIHZvaWQgX0lPX3NldGIgKF9JT19GSUxFICosIGNoYXIgKiwgY2hh ciAqLCBpbnQpIDsKZXh0ZXJuIHVuc2lnbmVkIF9JT19hZGp1c3RfY29sdW1uICh1bnNpZ25lZCwg Y29uc3QgY2hhciAqLCBpbnQpIDsKCgpleHRlcm4gdm9pZCBfSU9fc3dpdGNoX3RvX21haW5fd2dl dF9hcmVhIChfSU9fRklMRSAqKSA7CmV4dGVybiB2b2lkIF9JT19zd2l0Y2hfdG9fd2JhY2t1cF9h cmVhIChfSU9fRklMRSAqKSA7CmV4dGVybiBpbnQgX0lPX3N3aXRjaF90b193Z2V0X21vZGUgKF9J T19GSUxFICopIDsKZXh0ZXJuIHZvaWQgX0lPX3dzZXRiIChfSU9fRklMRSAqLCB3Y2hhcl90ICos IHdjaGFyX3QgKiwgaW50KSA7CmV4dGVybiB3aW50X3QgX0lPX3NwdXRiYWNrd2MgKF9JT19GSUxF ICosIHdpbnRfdCkgOwpleHRlcm4gd2ludF90IF9JT19zdW5nZXR3YyAoX0lPX0ZJTEUgKikgOwpl eHRlcm4gdm9pZCBfSU9fd2RvYWxsb2NidWYgKF9JT19GSUxFICopIDsKZXh0ZXJuIHZvaWQgX0lP X3Vuc2F2ZV93bWFya2VycyAoX0lPX0ZJTEUgKikgOwpleHRlcm4gdW5zaWduZWQgX0lPX2FkanVz dF93Y29sdW1uICh1bnNpZ25lZCwgY29uc3Qgd2NoYXJfdCAqLCBpbnQpIDsKCgoKZXh0ZXJuIHZv aWQgX0lPX2luaXRfbWFya2VyIChzdHJ1Y3QgX0lPX21hcmtlciAqLCBfSU9fRklMRSAqKSA7CmV4 dGVybiB2b2lkIF9JT19pbml0X3dtYXJrZXIgKHN0cnVjdCBfSU9fbWFya2VyICosIF9JT19GSUxF ICopIDsKZXh0ZXJuIHZvaWQgX0lPX3JlbW92ZV9tYXJrZXIgKHN0cnVjdCBfSU9fbWFya2VyICop IDsKZXh0ZXJuIGludCBfSU9fbWFya2VyX2RpZmZlcmVuY2UgKHN0cnVjdCBfSU9fbWFya2VyICos IHN0cnVjdCBfSU9fbWFya2VyICopIDsKCmV4dGVybiBpbnQgX0lPX21hcmtlcl9kZWx0YSAoc3Ry dWN0IF9JT19tYXJrZXIgKikgOwpleHRlcm4gaW50IF9JT193bWFya2VyX2RlbHRhIChzdHJ1Y3Qg X0lPX21hcmtlciAqKSA7CmV4dGVybiBpbnQgX0lPX3NlZWttYXJrIChfSU9fRklMRSAqLCBzdHJ1 Y3QgX0lPX21hcmtlciAqLCBpbnQpIDsKZXh0ZXJuIGludCBfSU9fc2Vla3dtYXJrIChfSU9fRklM RSAqLCBzdHJ1Y3QgX0lPX21hcmtlciAqLCBpbnQpIDsKCgoKCmV4dGVybiBfSU9fSVRFUiBfSU9f aXRlcl9iZWdpbiAodm9pZCkgOwpleHRlcm4gX0lPX0lURVIgX0lPX2l0ZXJfZW5kICh2b2lkKSA7 CmV4dGVybiBfSU9fSVRFUiBfSU9faXRlcl9uZXh0IChfSU9fSVRFUikgOwpleHRlcm4gX0lPX0ZJ TEUgKl9JT19pdGVyX2ZpbGUgKF9JT19JVEVSKSA7CmV4dGVybiB2b2lkIF9JT19saXN0X2xvY2sg KHZvaWQpIDsKZXh0ZXJuIHZvaWQgX0lPX2xpc3RfdW5sb2NrICh2b2lkKSA7CmV4dGVybiB2b2lk IF9JT19saXN0X3Jlc2V0bG9jayAodm9pZCkgOwoKCgpleHRlcm4gaW50IF9JT19kZWZhdWx0X3Vu ZGVyZmxvdyAoX0lPX0ZJTEUgKikgOwpleHRlcm4gaW50IF9JT19kZWZhdWx0X3VmbG93IChfSU9f RklMRSAqKSA7CmV4dGVybiB3aW50X3QgX0lPX3dkZWZhdWx0X3VmbG93IChfSU9fRklMRSAqKSA7 CmV4dGVybiBpbnQgX0lPX2RlZmF1bHRfZG9hbGxvY2F0ZSAoX0lPX0ZJTEUgKikgOwpleHRlcm4g aW50IF9JT193ZGVmYXVsdF9kb2FsbG9jYXRlIChfSU9fRklMRSAqKSA7CmV4dGVybiB2b2lkIF9J T19kZWZhdWx0X2ZpbmlzaCAoX0lPX0ZJTEUgKiwgaW50KSA7CmV4dGVybiB2b2lkIF9JT193ZGVm YXVsdF9maW5pc2ggKF9JT19GSUxFICosIGludCkgOwpleHRlcm4gaW50IF9JT19kZWZhdWx0X3Bi YWNrZmFpbCAoX0lPX0ZJTEUgKiwgaW50KSA7CmV4dGVybiB3aW50X3QgX0lPX3dkZWZhdWx0X3Bi YWNrZmFpbCAoX0lPX0ZJTEUgKiwgd2ludF90KSA7CmV4dGVybiBfSU9fRklMRSogX0lPX2RlZmF1 bHRfc2V0YnVmIChfSU9fRklMRSAqLCBjaGFyICosIF9fc3NpemVfdCkgOwpleHRlcm4gc2l6ZV90 IF9JT19kZWZhdWx0X3hzcHV0biAoX0lPX0ZJTEUgKiwgY29uc3Qgdm9pZCAqLCBzaXplX3QpIDsK CmV4dGVybiBzaXplX3QgX0lPX3dkZWZhdWx0X3hzcHV0biAoX0lPX0ZJTEUgKiwgY29uc3Qgdm9p ZCAqLCBzaXplX3QpIDsKCmV4dGVybiBzaXplX3QgX0lPX2RlZmF1bHRfeHNnZXRuIChfSU9fRklM RSAqLCB2b2lkICosIHNpemVfdCkgOwpleHRlcm4gc2l6ZV90IF9JT193ZGVmYXVsdF94c2dldG4g KF9JT19GSUxFICosIHZvaWQgKiwgc2l6ZV90KSA7CmV4dGVybiBfX29mZjY0X3QgX0lPX2RlZmF1 bHRfc2Vla29mZiAoX0lPX0ZJTEUgKiwgX19vZmY2NF90LCBpbnQsIGludCkgOwoKZXh0ZXJuIF9f b2ZmNjRfdCBfSU9fZGVmYXVsdF9zZWVrcG9zIChfSU9fRklMRSAqLCBfX29mZjY0X3QsIGludCkg OwpleHRlcm4gX19zc2l6ZV90IF9JT19kZWZhdWx0X3dyaXRlIChfSU9fRklMRSAqLCBjb25zdCB2 b2lkICosIF9fc3NpemVfdCkgOwoKZXh0ZXJuIF9fc3NpemVfdCBfSU9fZGVmYXVsdF9yZWFkIChf SU9fRklMRSAqLCB2b2lkICosIF9fc3NpemVfdCkgOwpleHRlcm4gaW50IF9JT19kZWZhdWx0X3N0 YXQgKF9JT19GSUxFICosIHZvaWQgKikgOwpleHRlcm4gX19vZmY2NF90IF9JT19kZWZhdWx0X3Nl ZWsgKF9JT19GSUxFICosIF9fb2ZmNjRfdCwgaW50KSA7CmV4dGVybiBpbnQgX0lPX2RlZmF1bHRf c3luYyAoX0lPX0ZJTEUgKikgOwoKZXh0ZXJuIGludCBfSU9fZGVmYXVsdF9zaG93bWFueWMgKF9J T19GSUxFICopIDsKZXh0ZXJuIHZvaWQgX0lPX2RlZmF1bHRfaW1idWUgKF9JT19GSUxFICosIHZv aWQgKikgOwoKZXh0ZXJuIHN0cnVjdCBfSU9fanVtcF90IF9JT19maWxlX2p1bXBzOwpleHRlcm4g c3RydWN0IF9JT19qdW1wX3QgX0lPX2ZpbGVfanVtcHNfbW1hcCBfX2F0dHJpYnV0ZV9fICgodmlz aWJpbGl0eSAoImhpZGRlbiIpKSk7CmV4dGVybiBzdHJ1Y3QgX0lPX2p1bXBfdCBfSU9fZmlsZV9q dW1wc19tYXliZV9tbWFwIF9fYXR0cmlidXRlX18gKCh2aXNpYmlsaXR5ICgiaGlkZGVuIikpKTsK ZXh0ZXJuIHN0cnVjdCBfSU9fanVtcF90IF9JT193ZmlsZV9qdW1wcyBfX2F0dHJpYnV0ZV9fICgo dmlzaWJpbGl0eSAoImhpZGRlbiIpKSk7CmV4dGVybiBzdHJ1Y3QgX0lPX2p1bXBfdCBfSU9fd2Zp bGVfanVtcHNfbW1hcCBfX2F0dHJpYnV0ZV9fICgodmlzaWJpbGl0eSAoImhpZGRlbiIpKSk7CmV4 dGVybiBzdHJ1Y3QgX0lPX2p1bXBfdCBfSU9fd2ZpbGVfanVtcHNfbWF5YmVfbW1hcCBfX2F0dHJp YnV0ZV9fICgodmlzaWJpbGl0eSAoImhpZGRlbiIpKSk7CmV4dGVybiBzdHJ1Y3QgX0lPX2p1bXBf dCBfSU9fb2xkX2ZpbGVfanVtcHMgX19hdHRyaWJ1dGVfXyAoKHZpc2liaWxpdHkgKCJoaWRkZW4i KSkpOwpleHRlcm4gc3RydWN0IF9JT19qdW1wX3QgX0lPX3N0cmVhbWJ1Zl9qdW1wczsKZXh0ZXJu IHN0cnVjdCBfSU9fanVtcF90IF9JT19wcm9jX2p1bXBzIF9fYXR0cmlidXRlX18gKCh2aXNpYmls aXR5ICgiaGlkZGVuIikpKTsKZXh0ZXJuIHN0cnVjdCBfSU9fanVtcF90IF9JT19vbGRfcHJvY19q dW1wcyBfX2F0dHJpYnV0ZV9fICgodmlzaWJpbGl0eSAoImhpZGRlbiIpKSk7CmV4dGVybiBzdHJ1 Y3QgX0lPX2p1bXBfdCBfSU9fc3RyX2p1bXBzIF9fYXR0cmlidXRlX18gKCh2aXNpYmlsaXR5ICgi aGlkZGVuIikpKTsKZXh0ZXJuIHN0cnVjdCBfSU9fanVtcF90IF9JT193c3RyX2p1bXBzIF9fYXR0 cmlidXRlX18gKCh2aXNpYmlsaXR5ICgiaGlkZGVuIikpKTsKZXh0ZXJuIHN0cnVjdCBfSU9fY29k ZWN2dCBfX2xpYmlvX2NvZGVjdnQgX19hdHRyaWJ1dGVfXyAoKHZpc2liaWxpdHkgKCJoaWRkZW4i KSkpOwpleHRlcm4gaW50IF9JT19kb193cml0ZSAoX0lPX0ZJTEUgKiwgY29uc3QgY2hhciAqLCBz aXplX3QpIDsKZXh0ZXJuIGludCBfSU9fbmV3X2RvX3dyaXRlIChfSU9fRklMRSAqLCBjb25zdCBj aGFyICosIHNpemVfdCkgOwpleHRlcm4gaW50IF9JT19vbGRfZG9fd3JpdGUgKF9JT19GSUxFICos IGNvbnN0IGNoYXIgKiwgc2l6ZV90KSA7CmV4dGVybiBpbnQgX0lPX3dkb193cml0ZSAoX0lPX0ZJ TEUgKiwgY29uc3Qgd2NoYXJfdCAqLCBzaXplX3QpIDsKZXh0ZXJuIGludCBfSU9fZmx1c2hfYWxs X2xvY2twIChpbnQpIDsKZXh0ZXJuIGludCBfSU9fZmx1c2hfYWxsICh2b2lkKSA7CmV4dGVybiBp bnQgX0lPX2NsZWFudXAgKHZvaWQpIDsKZXh0ZXJuIHZvaWQgX0lPX2ZsdXNoX2FsbF9saW5lYnVm ZmVyZWQgKHZvaWQpIDsKZXh0ZXJuIGludCBfSU9fbmV3X2ZnZXRwb3MgKF9JT19GSUxFICosIF9H X2Zwb3NfdCAqKSA7CmV4dGVybiBpbnQgX0lPX29sZF9mZ2V0cG9zIChfSU9fRklMRSAqLCBfR19m cG9zX3QgKikgOwpleHRlcm4gaW50IF9JT19uZXdfZnNldHBvcyAoX0lPX0ZJTEUgKiwgY29uc3Qg X0dfZnBvc190ICopIDsKZXh0ZXJuIGludCBfSU9fb2xkX2ZzZXRwb3MgKF9JT19GSUxFICosIGNv bnN0IF9HX2Zwb3NfdCAqKSA7CmV4dGVybiBpbnQgX0lPX25ld19mZ2V0cG9zNjQgKF9JT19GSUxF ICosIF9HX2Zwb3M2NF90ICopIDsKZXh0ZXJuIGludCBfSU9fb2xkX2ZnZXRwb3M2NCAoX0lPX0ZJ TEUgKiwgX0dfZnBvczY0X3QgKikgOwpleHRlcm4gaW50IF9JT19uZXdfZnNldHBvczY0IChfSU9f RklMRSAqLCBjb25zdCBfR19mcG9zNjRfdCAqKSA7CmV4dGVybiBpbnQgX0lPX29sZF9mc2V0cG9z NjQgKF9JT19GSUxFICosIGNvbnN0IF9HX2Zwb3M2NF90ICopIDsKIyA1MDcgIi4uL2xpYmlvL2xp YmlvUC5oIgpleHRlcm4gaW50IF9JT19maWxlX2RvYWxsb2NhdGUgKF9JT19GSUxFICopIDsKZXh0 ZXJuIF9JT19GSUxFKiBfSU9fZmlsZV9zZXRidWYgKF9JT19GSUxFICosIGNoYXIgKiwgX19zc2l6 ZV90KSA7CmV4dGVybiBfX29mZjY0X3QgX0lPX2ZpbGVfc2Vla29mZiAoX0lPX0ZJTEUgKiwgX19v ZmY2NF90LCBpbnQsIGludCkgOwpleHRlcm4gX19vZmY2NF90IF9JT19maWxlX3NlZWtvZmZfbW1h cCAoX0lPX0ZJTEUgKiwgX19vZmY2NF90LCBpbnQsIGludCkgOwoKZXh0ZXJuIF9fb2ZmNjRfdCBf SU9fZmlsZV9zZWVrb2ZmX21heWJlX21tYXAgKF9JT19GSUxFICosIF9fb2ZmNjRfdCwgaW50LCBp bnQpIDsKCmV4dGVybiBzaXplX3QgX0lPX2ZpbGVfeHNwdXRuIChfSU9fRklMRSAqLCBjb25zdCB2 b2lkICosIHNpemVfdCkgOwpleHRlcm4gc2l6ZV90IF9JT19maWxlX3hzZ2V0biAoX0lPX0ZJTEUg Kiwgdm9pZCAqLCBzaXplX3QpIDsKZXh0ZXJuIGludCBfSU9fZmlsZV9zdGF0IChfSU9fRklMRSAq LCB2b2lkICopIDsKZXh0ZXJuIGludCBfSU9fZmlsZV9jbG9zZSAoX0lPX0ZJTEUgKikgOwpleHRl cm4gaW50IF9JT19maWxlX2Nsb3NlX21tYXAgKF9JT19GSUxFICopIDsKZXh0ZXJuIGludCBfSU9f ZmlsZV91bmRlcmZsb3cgKF9JT19GSUxFICopIDsKZXh0ZXJuIGludCBfSU9fZmlsZV91bmRlcmZs b3dfbW1hcCAoX0lPX0ZJTEUgKikgOwpleHRlcm4gaW50IF9JT19maWxlX3VuZGVyZmxvd19tYXli ZV9tbWFwIChfSU9fRklMRSAqKSA7CmV4dGVybiBpbnQgX0lPX2ZpbGVfb3ZlcmZsb3cgKF9JT19G SUxFICosIGludCkgOwoKZXh0ZXJuIHZvaWQgX0lPX2ZpbGVfaW5pdCAoc3RydWN0IF9JT19GSUxF X3BsdXMgKikgOwpleHRlcm4gX0lPX0ZJTEUqIF9JT19maWxlX2F0dGFjaCAoX0lPX0ZJTEUgKiwg aW50KSA7CmV4dGVybiBfSU9fRklMRSogX0lPX2ZpbGVfb3BlbiAoX0lPX0ZJTEUgKiwgY29uc3Qg Y2hhciAqLCBpbnQsIGludCwgaW50LCBpbnQpIDsKCmV4dGVybiBfSU9fRklMRSogX0lPX2ZpbGVf Zm9wZW4gKF9JT19GSUxFICosIGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqLCBpbnQpIDsKCmV4 dGVybiBfX3NzaXplX3QgX0lPX2ZpbGVfd3JpdGUgKF9JT19GSUxFICosIGNvbnN0IHZvaWQgKiwg X19zc2l6ZV90KSA7CgpleHRlcm4gX19zc2l6ZV90IF9JT19maWxlX3JlYWQgKF9JT19GSUxFICos IHZvaWQgKiwgX19zc2l6ZV90KSA7CmV4dGVybiBpbnQgX0lPX2ZpbGVfc3luYyAoX0lPX0ZJTEUg KikgOwpleHRlcm4gaW50IF9JT19maWxlX2Nsb3NlX2l0IChfSU9fRklMRSAqKSA7CmV4dGVybiBf X29mZjY0X3QgX0lPX2ZpbGVfc2VlayAoX0lPX0ZJTEUgKiwgX19vZmY2NF90LCBpbnQpIDsKZXh0 ZXJuIHZvaWQgX0lPX2ZpbGVfZmluaXNoIChfSU9fRklMRSAqLCBpbnQpIDsKCmV4dGVybiBfSU9f RklMRSogX0lPX25ld19maWxlX2F0dGFjaCAoX0lPX0ZJTEUgKiwgaW50KSA7CmV4dGVybiBpbnQg X0lPX25ld19maWxlX2Nsb3NlX2l0IChfSU9fRklMRSAqKSA7CmV4dGVybiB2b2lkIF9JT19uZXdf ZmlsZV9maW5pc2ggKF9JT19GSUxFICosIGludCkgOwpleHRlcm4gX0lPX0ZJTEUqIF9JT19uZXdf ZmlsZV9mb3BlbiAoX0lPX0ZJTEUgKiwgY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICosIGludCkg OwoKZXh0ZXJuIHZvaWQgX0lPX25vX2luaXQgKF9JT19GSUxFICosIGludCwgaW50LCBzdHJ1Y3Qg X0lPX3dpZGVfZGF0YSAqLCBzdHJ1Y3QgX0lPX2p1bXBfdCAqKSA7CgpleHRlcm4gdm9pZCBfSU9f bmV3X2ZpbGVfaW5pdCAoc3RydWN0IF9JT19GSUxFX3BsdXMgKikgOwpleHRlcm4gX0lPX0ZJTEUq IF9JT19uZXdfZmlsZV9zZXRidWYgKF9JT19GSUxFICosIGNoYXIgKiwgX19zc2l6ZV90KSA7CmV4 dGVybiBfSU9fRklMRSogX0lPX2ZpbGVfc2V0YnVmX21tYXAgKF9JT19GSUxFICosIGNoYXIgKiwg X19zc2l6ZV90KSA7CmV4dGVybiBpbnQgX0lPX25ld19maWxlX3N5bmMgKF9JT19GSUxFICopIDsK ZXh0ZXJuIGludCBfSU9fbmV3X2ZpbGVfdW5kZXJmbG93IChfSU9fRklMRSAqKSA7CmV4dGVybiBp bnQgX0lPX25ld19maWxlX292ZXJmbG93IChfSU9fRklMRSAqLCBpbnQpIDsKZXh0ZXJuIF9fb2Zm NjRfdCBfSU9fbmV3X2ZpbGVfc2Vla29mZiAoX0lPX0ZJTEUgKiwgX19vZmY2NF90LCBpbnQsIGlu dCkgOwpleHRlcm4gX19zc2l6ZV90IF9JT19uZXdfZmlsZV93cml0ZSAoX0lPX0ZJTEUgKiwgY29u c3Qgdm9pZCAqLCBfX3NzaXplX3QpIDsKCmV4dGVybiBzaXplX3QgX0lPX25ld19maWxlX3hzcHV0 biAoX0lPX0ZJTEUgKiwgY29uc3Qgdm9pZCAqLCBzaXplX3QpIDsKCmV4dGVybiBfSU9fRklMRSog X0lPX29sZF9maWxlX3NldGJ1ZiAoX0lPX0ZJTEUgKiwgY2hhciAqLCBfX3NzaXplX3QpIDsKZXh0 ZXJuIF9fb2ZmNjRfdCBfSU9fb2xkX2ZpbGVfc2Vla29mZiAoX0lPX0ZJTEUgKiwgX19vZmY2NF90 LCBpbnQsIGludCkgOwoKZXh0ZXJuIHNpemVfdCBfSU9fb2xkX2ZpbGVfeHNwdXRuIChfSU9fRklM RSAqLCBjb25zdCB2b2lkICosIHNpemVfdCkgOwoKZXh0ZXJuIGludCBfSU9fb2xkX2ZpbGVfdW5k ZXJmbG93IChfSU9fRklMRSAqKSA7CmV4dGVybiBpbnQgX0lPX29sZF9maWxlX292ZXJmbG93IChf SU9fRklMRSAqLCBpbnQpIDsKZXh0ZXJuIHZvaWQgX0lPX29sZF9maWxlX2luaXQgKHN0cnVjdCBf SU9fRklMRV9wbHVzICopIDsKZXh0ZXJuIF9JT19GSUxFKiBfSU9fb2xkX2ZpbGVfYXR0YWNoIChf SU9fRklMRSAqLCBpbnQpIDsKZXh0ZXJuIF9JT19GSUxFKiBfSU9fb2xkX2ZpbGVfZm9wZW4gKF9J T19GSUxFICosIGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqKSA7CgpleHRlcm4gX19zc2l6ZV90 IF9JT19vbGRfZmlsZV93cml0ZSAoX0lPX0ZJTEUgKiwgY29uc3Qgdm9pZCAqLCBfX3NzaXplX3Qp IDsKCmV4dGVybiBpbnQgX0lPX29sZF9maWxlX3N5bmMgKF9JT19GSUxFICopIDsKZXh0ZXJuIGlu dCBfSU9fb2xkX2ZpbGVfY2xvc2VfaXQgKF9JT19GSUxFICopIDsKZXh0ZXJuIHZvaWQgX0lPX29s ZF9maWxlX2ZpbmlzaCAoX0lPX0ZJTEUgKiwgaW50KSA7CgpleHRlcm4gaW50IF9JT193ZmlsZV9k b2FsbG9jYXRlIChfSU9fRklMRSAqKSA7CmV4dGVybiBzaXplX3QgX0lPX3dmaWxlX3hzcHV0biAo X0lPX0ZJTEUgKiwgY29uc3Qgdm9pZCAqLCBzaXplX3QpIDsKCmV4dGVybiBfSU9fRklMRSogX0lP X3dmaWxlX3NldGJ1ZiAoX0lPX0ZJTEUgKiwgd2NoYXJfdCAqLCBfX3NzaXplX3QpIDsKZXh0ZXJu IHdpbnRfdCBfSU9fd2ZpbGVfc3luYyAoX0lPX0ZJTEUgKikgOwpleHRlcm4gd2ludF90IF9JT193 ZmlsZV91bmRlcmZsb3cgKF9JT19GSUxFICopIDsKZXh0ZXJuIHdpbnRfdCBfSU9fd2ZpbGVfb3Zl cmZsb3cgKF9JT19GSUxFICosIHdpbnRfdCkgOwpleHRlcm4gX19vZmY2NF90IF9JT193ZmlsZV9z ZWVrb2ZmIChfSU9fRklMRSAqLCBfX29mZjY0X3QsIGludCwgaW50KSA7CgoKZXh0ZXJuIF9JT19G SUxFKiBfSU9fcHJvY19vcGVuIChfSU9fRklMRSAqLCBjb25zdCBjaGFyICosIGNvbnN0IGNoYXIg KikgOwpleHRlcm4gX0lPX0ZJTEUqIF9JT19uZXdfcHJvY19vcGVuIChfSU9fRklMRSAqLCBjb25z dCBjaGFyICosIGNvbnN0IGNoYXIgKikgOwpleHRlcm4gX0lPX0ZJTEUqIF9JT19vbGRfcHJvY19v cGVuIChfSU9fRklMRSAqLCBjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKikgOwpleHRlcm4gaW50 IF9JT19wcm9jX2Nsb3NlIChfSU9fRklMRSAqKSA7CmV4dGVybiBpbnQgX0lPX25ld19wcm9jX2Ns b3NlIChfSU9fRklMRSAqKSA7CmV4dGVybiBpbnQgX0lPX29sZF9wcm9jX2Nsb3NlIChfSU9fRklM RSAqKSA7CgoKZXh0ZXJuIGludCBfSU9fc3RyX3VuZGVyZmxvdyAoX0lPX0ZJTEUgKikgOwpleHRl cm4gaW50IF9JT19zdHJfb3ZlcmZsb3cgKF9JT19GSUxFICosIGludCkgOwpleHRlcm4gaW50IF9J T19zdHJfcGJhY2tmYWlsIChfSU9fRklMRSAqLCBpbnQpIDsKZXh0ZXJuIF9fb2ZmNjRfdCBfSU9f c3RyX3NlZWtvZmYgKF9JT19GSUxFICosIF9fb2ZmNjRfdCwgaW50LCBpbnQpIDsKZXh0ZXJuIHZv aWQgX0lPX3N0cl9maW5pc2ggKF9JT19GSUxFICosIGludCkgOwoKCnN0cnVjdCBfSU9fc3RyZmls ZV87CmV4dGVybiB2b2lkIF9JT19zdHJfaW5pdF9zdGF0aWMgKHN0cnVjdCBfSU9fc3RyZmlsZV8g KiwgY2hhciAqLCBpbnQsIGNoYXIgKikgOwpleHRlcm4gdm9pZCBfSU9fc3RyX2luaXRfcmVhZG9u bHkgKHN0cnVjdCBfSU9fc3RyZmlsZV8gKiwgY29uc3QgY2hhciAqLCBpbnQpIDsKZXh0ZXJuIF9f c3NpemVfdCBfSU9fc3RyX2NvdW50IChfSU9fRklMRSAqKSA7CgoKZXh0ZXJuIHZvaWQgX0lPX3dz dHJfaW5pdF9zdGF0aWMgKF9JT19GSUxFICosIHdjaGFyX3QgKiwgaW50LCB3Y2hhcl90ICopIDsK ZXh0ZXJuIHZvaWQgX0lPX3dzdHJfaW5pdF9yZWFkb25seSAoX0lPX0ZJTEUgKiwgY29uc3QgY2hh ciAqLCBpbnQpIDsKZXh0ZXJuIF9fc3NpemVfdCBfSU9fd3N0cl9jb3VudCAoX0lPX0ZJTEUgKikg OwpleHRlcm4gd2ludF90IF9JT193c3RyX292ZXJmbG93IChfSU9fRklMRSAqLCB3aW50X3QpIDsK ZXh0ZXJuIHdpbnRfdCBfSU9fd3N0cl91bmRlcmZsb3cgKF9JT19GSUxFICopIDsKZXh0ZXJuIF9f b2ZmNjRfdCBfSU9fd3N0cl9zZWVrb2ZmIChfSU9fRklMRSAqLCBfX29mZjY0X3QsIGludCwgaW50 KSA7CmV4dGVybiB3aW50X3QgX0lPX3dzdHJfcGJhY2tmYWlsIChfSU9fRklMRSAqLCB3aW50X3Qp IDsKZXh0ZXJuIHZvaWQgX0lPX3dzdHJfZmluaXNoIChfSU9fRklMRSAqLCBpbnQpIDsKCmV4dGVy biBpbnQgX0lPX3Zhc3ByaW50ZiAoY2hhciAqKnJlc3VsdF9wdHIsIF9fY29uc3QgY2hhciAqZm9y bWF0LCBfX2dudWNfdmFfbGlzdCBhcmdzKSA7CgpleHRlcm4gaW50IF9JT192ZHByaW50ZiAoaW50 IGQsIF9fY29uc3QgY2hhciAqZm9ybWF0LCBfX2dudWNfdmFfbGlzdCBhcmcpIDsKZXh0ZXJuIGlu dCBfSU9fdnNucHJpbnRmIChjaGFyICpzdHJpbmcsIHNpemVfdCBtYXhsZW4sIF9fY29uc3QgY2hh ciAqZm9ybWF0LCBfX2dudWNfdmFfbGlzdCBhcmdzKSA7CgoKCmV4dGVybiBzaXplX3QgX0lPX2dl dGxpbmUgKF9JT19GSUxFICosY2hhciAqLCBzaXplX3QsIGludCwgaW50KSA7CmV4dGVybiBzaXpl X3QgX0lPX2dldGxpbmVfaW5mbyAoX0lPX0ZJTEUgKixjaGFyICosIHNpemVfdCwgaW50LCBpbnQs IGludCAqKSA7CgpleHRlcm4gX19zc2l6ZV90IF9JT19nZXRkZWxpbSAoY2hhciAqKiwgc2l6ZV90 ICosIGludCwgX0lPX0ZJTEUgKikgOwpleHRlcm4gc2l6ZV90IF9JT19nZXR3bGluZSAoX0lPX0ZJ TEUgKix3Y2hhcl90ICosIHNpemVfdCwgd2ludF90LCBpbnQpIDsKCmV4dGVybiBzaXplX3QgX0lP X2dldHdsaW5lX2luZm8gKF9JT19GSUxFICosd2NoYXJfdCAqLCBzaXplX3QsIHdpbnRfdCwgaW50 LCB3aW50X3QgKikgOwoKZXh0ZXJuIGRvdWJsZSBfSU9fc3RydG9kIChjb25zdCBjaGFyICosIGNo YXIgKiopIDsKZXh0ZXJuIGNoYXIgKl9JT19kdG9hIChkb3VibGUgX19kLCBpbnQgX19tb2RlLCBp bnQgX19uZGlnaXRzLCBpbnQgKl9fZGVjcHQsIGludCAqX19zaWduLCBjaGFyICoqX19ydmUpIDsK CmV4dGVybiBpbnQgX0lPX291dGZsb2F0IChkb3VibGUgX192YWx1ZSwgX0lPX0ZJTEUgKl9fc2Is IGludCBfX3R5cGUsIGludCBfX3dpZHRoLCBpbnQgX19wcmVjaXNpb24sIGludCBfX2ZsYWdzLCBp bnQgX19zaWduX21vZGUsIGludCBfX2ZpbGwpIDsKCgoKZXh0ZXJuIHN0cnVjdCBfSU9fRklMRV9w bHVzICpfSU9fbGlzdF9hbGw7CmV4dGVybiB2b2lkICgqX0lPX2NsZWFudXBfcmVnaXN0cmF0aW9u X25lZWRlZCkgKHZvaWQpOwoKCmV4dGVybiBpbnQgX0lPX2ZsdXNoX2FsbF9pbnRlcm5hbCAodm9p ZCkgOwpleHRlcm4gdW5zaWduZWQgX0lPX2FkanVzdF9jb2x1bW5faW50ZXJuYWwgKHVuc2lnbmVk LCBjb25zdCBjaGFyICosIGludCkgOwoKZXh0ZXJuIGludCBfSU9fZGVmYXVsdF91Zmxvd19pbnRl cm5hbCAoX0lPX0ZJTEUgKikgOwpleHRlcm4gdm9pZCBfSU9fZGVmYXVsdF9maW5pc2hfaW50ZXJu YWwgKF9JT19GSUxFICosIGludCkgOwpleHRlcm4gaW50IF9JT19kZWZhdWx0X3BiYWNrZmFpbF9p bnRlcm5hbCAoX0lPX0ZJTEUgKiwgaW50KSA7CmV4dGVybiBzaXplX3QgX0lPX2RlZmF1bHRfeHNw dXRuX2ludGVybmFsIChfSU9fRklMRSAqLCBjb25zdCB2b2lkICosIHNpemVfdCkgOwoKZXh0ZXJu IHNpemVfdCBfSU9fZGVmYXVsdF94c2dldG5faW50ZXJuYWwgKF9JT19GSUxFICosIHZvaWQgKiwg c2l6ZV90KSA7CgpleHRlcm4gaW50IF9JT19kZWZhdWx0X2RvYWxsb2NhdGVfaW50ZXJuYWwgKF9J T19GSUxFICopIDsKZXh0ZXJuIHZvaWQgX0lPX3dkZWZhdWx0X2ZpbmlzaF9pbnRlcm5hbCAoX0lP X0ZJTEUgKiwgaW50KSA7CmV4dGVybiB3aW50X3QgX0lPX3dkZWZhdWx0X3BiYWNrZmFpbF9pbnRl cm5hbCAoX0lPX0ZJTEUgKiwgd2ludF90KSA7CmV4dGVybiBzaXplX3QgX0lPX3dkZWZhdWx0X3hz cHV0bl9pbnRlcm5hbCAoX0lPX0ZJTEUgKiwgY29uc3Qgdm9pZCAqLCBzaXplX3QpIDsKCmV4dGVy biBzaXplX3QgX0lPX3dkZWZhdWx0X3hzZ2V0bl9pbnRlcm5hbCAoX0lPX0ZJTEUgKiwgdm9pZCAq LCBzaXplX3QpIDsKCmV4dGVybiBpbnQgX0lPX3dkZWZhdWx0X2RvYWxsb2NhdGVfaW50ZXJuYWwg KF9JT19GSUxFICopIDsKZXh0ZXJuIHdpbnRfdCBfSU9fd2RlZmF1bHRfdWZsb3dfaW50ZXJuYWwg KF9JT19GSUxFICopIDsKCmV4dGVybiBpbnQgX0lPX2ZpbGVfZG9hbGxvY2F0ZV9pbnRlcm5hbCAo X0lPX0ZJTEUgKikgOwpleHRlcm4gX0lPX0ZJTEUqIF9JT19maWxlX3NldGJ1Zl9pbnRlcm5hbCAo X0lPX0ZJTEUgKiwgY2hhciAqLCBfX3NzaXplX3QpIDsKCmV4dGVybiBfX29mZjY0X3QgX0lPX2Zp bGVfc2Vla29mZl9pbnRlcm5hbCAoX0lPX0ZJTEUgKiwgX19vZmY2NF90LCBpbnQsIGludCkgOwoK ZXh0ZXJuIHNpemVfdCBfSU9fZmlsZV94c3B1dG5faW50ZXJuYWwgKF9JT19GSUxFICosIGNvbnN0 IHZvaWQgKiwgc2l6ZV90KSA7CgpleHRlcm4gc2l6ZV90IF9JT19maWxlX3hzZ2V0bl9pbnRlcm5h bCAoX0lPX0ZJTEUgKiwgdm9pZCAqLCBzaXplX3QpIDsKCmV4dGVybiBpbnQgX0lPX2ZpbGVfc3Rh dF9pbnRlcm5hbCAoX0lPX0ZJTEUgKiwgdm9pZCAqKSA7CmV4dGVybiBpbnQgX0lPX2ZpbGVfY2xv c2VfaW50ZXJuYWwgKF9JT19GSUxFICopIDsKZXh0ZXJuIGludCBfSU9fZmlsZV9jbG9zZV9pdF9p bnRlcm5hbCAoX0lPX0ZJTEUgKikgOwpleHRlcm4gaW50IF9JT19maWxlX3VuZGVyZmxvd19pbnRl cm5hbCAoX0lPX0ZJTEUgKikgOwpleHRlcm4gaW50IF9JT19maWxlX292ZXJmbG93X2ludGVybmFs IChfSU9fRklMRSAqLCBpbnQpIDsKZXh0ZXJuIHZvaWQgX0lPX2ZpbGVfaW5pdF9pbnRlcm5hbCAo c3RydWN0IF9JT19GSUxFX3BsdXMgKikgOwpleHRlcm4gX0lPX0ZJTEUqIF9JT19maWxlX2F0dGFj aF9pbnRlcm5hbCAoX0lPX0ZJTEUgKiwgaW50KSA7CmV4dGVybiBfSU9fRklMRSogX0lPX2ZpbGVf Zm9wZW5faW50ZXJuYWwgKF9JT19GSUxFICosIGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqLCBp bnQpIDsKCmV4dGVybiBfX3NzaXplX3QgX0lPX2ZpbGVfcmVhZF9pbnRlcm5hbCAoX0lPX0ZJTEUg Kiwgdm9pZCAqLCBfX3NzaXplX3QpIDsKCmV4dGVybiBpbnQgX0lPX2ZpbGVfc3luY19pbnRlcm5h bCAoX0lPX0ZJTEUgKikgOwpleHRlcm4gX19vZmY2NF90IF9JT19maWxlX3NlZWtfaW50ZXJuYWwg KF9JT19GSUxFICosIF9fb2ZmNjRfdCwgaW50KSA7CmV4dGVybiB2b2lkIF9JT19maWxlX2Zpbmlz aF9pbnRlcm5hbCAoX0lPX0ZJTEUgKiwgaW50KSA7CgpleHRlcm4gc2l6ZV90IF9JT193ZmlsZV94 c3B1dG5faW50ZXJuYWwgKF9JT19GSUxFICosIGNvbnN0IHZvaWQgKiwgc2l6ZV90KSA7CgpleHRl cm4gX19vZmY2NF90IF9JT193ZmlsZV9zZWVrb2ZmX2ludGVybmFsIChfSU9fRklMRSAqLCBfX29m ZjY0X3QsIGludCwgaW50KSA7CgpleHRlcm4gd2ludF90IF9JT193ZmlsZV9zeW5jX2ludGVybmFs IChfSU9fRklMRSAqKSA7CgpleHRlcm4gaW50IF9JT19zdHJfdW5kZXJmbG93X2ludGVybmFsIChf SU9fRklMRSAqKSA7CmV4dGVybiBpbnQgX0lPX3N0cl9vdmVyZmxvd19pbnRlcm5hbCAoX0lPX0ZJ TEUgKiwgaW50KSA7CmV4dGVybiBpbnQgX0lPX3N0cl9wYmFja2ZhaWxfaW50ZXJuYWwgKF9JT19G SUxFICosIGludCkgOwpleHRlcm4gX19vZmY2NF90IF9JT19zdHJfc2Vla29mZl9pbnRlcm5hbCAo X0lPX0ZJTEUgKiwgX19vZmY2NF90LCBpbnQsIGludCkgOwoKZXh0ZXJuIHZvaWQgX0lPX3N0cl9p bml0X3N0YXRpY19pbnRlcm5hbCAoc3RydWN0IF9JT19zdHJmaWxlXyAqLCBjaGFyICosIGludCwg Y2hhciAqKSA7CgoKZXh0ZXJuIHN0cnVjdCBfSU9fanVtcF90IF9JT19maWxlX2p1bXBzX2ludGVy bmFsIF9fYXR0cmlidXRlX18gKCh2aXNpYmlsaXR5ICgiaGlkZGVuIikpKTsKZXh0ZXJuIHN0cnVj dCBfSU9fanVtcF90IF9JT193ZmlsZV9qdW1wc19pbnRlcm5hbCBfX2F0dHJpYnV0ZV9fICgodmlz aWJpbGl0eSAoImhpZGRlbiIpKSk7CgpleHRlcm4gc3RydWN0IF9JT19GSUxFX3BsdXMgKl9JT19s aXN0X2FsbF9pbnRlcm5hbCBfX2F0dHJpYnV0ZV9fICgodmlzaWJpbGl0eSAoImhpZGRlbiIpKSk7 CgpleHRlcm4gdm9pZCBfSU9fbGlua19pbl9pbnRlcm5hbCAoc3RydWN0IF9JT19GSUxFX3BsdXMg KikgOwpleHRlcm4gaW50IF9JT19zcHV0YmFja2NfaW50ZXJuYWwgKF9JT19GSUxFICosIGludCkg OwpleHRlcm4gdm9pZCBfSU9fd2RvYWxsb2NidWZfaW50ZXJuYWwgKF9JT19GSUxFICopIDsKCmV4 dGVybiBzaXplX3QgX0lPX3NnZXRuX2ludGVybmFsIChfSU9fRklMRSAqLCB2b2lkICosIHNpemVf dCk7CmV4dGVybiB2b2lkIF9JT19mbHVzaF9hbGxfbGluZWJ1ZmZlcmVkX2ludGVybmFsICh2b2lk KSA7CmV4dGVybiBpbnQgX0lPX3N3aXRjaF90b193Z2V0X21vZGVfaW50ZXJuYWwgKF9JT19GSUxF ICopIDsKZXh0ZXJuIHZvaWQgX0lPX3Vuc2F2ZV9tYXJrZXJzX2ludGVybmFsIChfSU9fRklMRSAq KSA7CmV4dGVybiB2b2lkIF9JT19zd2l0Y2hfdG9fbWFpbl93Z2V0X2FyZWFfaW50ZXJuYWwgKF9J T19GSUxFICopIDsKZXh0ZXJuIGludCBfSU9fd2RvX3dyaXRlX2ludGVybmFsIChfSU9fRklMRSAq LCBjb25zdCB3Y2hhcl90ICosIHNpemVfdCkgOwoKZXh0ZXJuIGludCBfSU9fZG9fd3JpdGVfaW50 ZXJuYWwgKF9JT19GSUxFICosIGNvbnN0IGNoYXIgKiwgc2l6ZV90KSA7CmV4dGVybiBfX3NzaXpl X3QgX0lPX3BhZG5faW50ZXJuYWwgKF9JT19GSUxFICosIGludCwgX19zc2l6ZV90KTsKZXh0ZXJu IHNpemVfdCBfSU9fZ2V0bGluZV9pbmZvX2ludGVybmFsIChfSU9fRklMRSAqLGNoYXIgKiwgc2l6 ZV90LCBpbnQsIGludCwgaW50ICopIDsKCgpleHRlcm4gc2l6ZV90IF9JT19nZXRsaW5lX2ludGVy bmFsIChfSU9fRklMRSAqLCBjaGFyICosIHNpemVfdCwgaW50LCBpbnQpIDsKCmV4dGVybiB2b2lk IF9JT19mcmVlX3diYWNrdXBfYXJlYV9pbnRlcm5hbCAoX0lPX0ZJTEUgKik7CmV4dGVybiB2b2lk IF9JT19mcmVlX2JhY2t1cF9hcmVhX2ludGVybmFsIChfSU9fRklMRSAqKTsKZXh0ZXJuIHZvaWQg X0lPX3N3aXRjaF90b193YmFja3VwX2FyZWFfaW50ZXJuYWwgKF9JT19GSUxFICopIDsKZXh0ZXJu IHZvaWQgX0lPX3NldGJfaW50ZXJuYWwgKF9JT19GSUxFICosIGNoYXIgKiwgY2hhciAqLCBpbnQp IDsKZXh0ZXJuIHdpbnRfdCBfSU9fc3B1dGJhY2t3Y19pbnRlcm5hbCAoX0lPX0ZJTEUgKiwgd2lu dF90KSA7CmV4dGVybiBpbnQgX0lPX3N3aXRjaF90b19nZXRfbW9kZV9pbnRlcm5hbCAoX0lPX0ZJ TEUgKikgOwpleHRlcm4gaW50IF9JT192ZnNjYW5mX2ludGVybmFsIChfSU9fRklMRSAqIF9fcmVz dHJpY3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKiBfX3Jl c3RyaWN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2dudWNfdmFfbGlzdCwg aW50ICpfX3Jlc3RyaWN0KTsKZXh0ZXJuIGludCBfSU9fdmZwcmludGZfaW50ZXJuYWwgKF9JT19G SUxFICpfX3Jlc3RyaWN0LCBjb25zdCBjaGFyICpfX3Jlc3RyaWN0LAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgX19nbnVjX3ZhX2xpc3QpOwpleHRlcm4gdm9pZCBfSU9fZG9hbGxv Y2J1Zl9pbnRlcm5hbCAoX0lPX0ZJTEUgKikgOwpleHRlcm4gdm9pZCBfSU9fd3NldGJfaW50ZXJu YWwgKF9JT19GSUxFICosIHdjaGFyX3QgKiwgd2NoYXJfdCAqLCBpbnQpIDsKZXh0ZXJuIF9fb2Zm NjRfdCBfSU9fc2Vla29mZl91bmxvY2tlZCAoX0lPX0ZJTEUgKiwgX19vZmY2NF90LCBpbnQsIGlu dCkKICAgICBfX2F0dHJpYnV0ZV9fICgodmlzaWJpbGl0eSAoImhpZGRlbiIpKSk7CmV4dGVybiBf X29mZjY0X3QgX0lPX3NlZWtwb3NfdW5sb2NrZWQgKF9JT19GSUxFICosIF9fb2ZmNjRfdCwgaW50 KQogICAgIF9fYXR0cmlidXRlX18gKCh2aXNpYmlsaXR5ICgiaGlkZGVuIikpKTsKZXh0ZXJuIGlu dCBfSU9fcHV0Y19pbnRlcm5hbCAoaW50IF9fYywgX0lPX0ZJTEUgKl9fZnApOwpleHRlcm4gdm9p ZCBfSU9faW5pdF9pbnRlcm5hbCAoX0lPX0ZJTEUgKiwgaW50KSA7CmV4dGVybiB2b2lkIF9JT191 bl9saW5rX2ludGVybmFsIChzdHJ1Y3QgX0lPX0ZJTEVfcGx1cyAqKSA7CiMgNzU5ICIuLi9saWJp by9saWJpb1AuaCIKIyAxICIuLi9pbmNsdWRlL3VuaXN0ZC5oIiAxCgojIDEgIi4uL3Bvc2l4L3Vu aXN0ZC5oIiAxCiMgMjggIi4uL3Bvc2l4L3VuaXN0ZC5oIgoKIyAxNzUgIi4uL3Bvc2l4L3VuaXN0 ZC5oIgojIDEgIi4uL2xpbnV4dGhyZWFkcy9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9iaXRzL3Bv c2l4X29wdC5oIiAxCiMgMTc2ICIuLi9wb3NpeC91bmlzdGQuaCIgMgoKCgojIDEgIi4uL3N5c2Rl cHMvZ2VuZXJpYy9iaXRzL2Vudmlyb25tZW50cy5oIiAxCiMgMjMgIi4uL3N5c2RlcHMvZ2VuZXJp Yy9iaXRzL2Vudmlyb25tZW50cy5oIgojIDEgIi4uL3N5c2RlcHMveDg2XzY0L2JpdHMvd29yZHNp emUuaCIgMQojIDI0ICIuLi9zeXNkZXBzL2dlbmVyaWMvYml0cy9lbnZpcm9ubWVudHMuaCIgMgoj IDE4MCAiLi4vcG9zaXgvdW5pc3RkLmgiIDIKIyAxOTkgIi4uL3Bvc2l4L3VuaXN0ZC5oIgojIDEg Ii91c3IvbGliNjQvZ2NjLWxpYi94ODZfNjQtc3VzZS1saW51eC8zLjMvaW5jbHVkZS9zdGRkZWYu aCIgMSAzIDQKIyAyMDAgIi4uL3Bvc2l4L3VuaXN0ZC5oIiAyCiMgMjQ3ICIuLi9wb3NpeC91bmlz dGQuaCIKdHlwZWRlZiBfX3NvY2tsZW5fdCBzb2NrbGVuX3Q7CiMgMjYwICIuLi9wb3NpeC91bmlz dGQuaCIKZXh0ZXJuIGludCBhY2Nlc3MgKF9fY29uc3QgY2hhciAqX19uYW1lLCBpbnQgX190eXBl KSA7CgoKCgpleHRlcm4gaW50IGV1aWRhY2Nlc3MgKF9fY29uc3QgY2hhciAqX19uYW1lLCBpbnQg X190eXBlKSA7CiMgMjkwICIuLi9wb3NpeC91bmlzdGQuaCIKZXh0ZXJuIF9fb2ZmX3QgbHNlZWsg KGludCBfX2ZkLCBfX29mZl90IF9fb2Zmc2V0LCBpbnQgX193aGVuY2UpIDsKIyAzMDIgIi4uL3Bv c2l4L3VuaXN0ZC5oIgpleHRlcm4gX19vZmY2NF90IGxzZWVrNjQgKGludCBfX2ZkLCBfX29mZjY0 X3QgX19vZmZzZXQsIGludCBfX3doZW5jZSkgOwoKCgpleHRlcm4gaW50IGNsb3NlIChpbnQgX19m ZCkgOwoKCgpleHRlcm4gc3NpemVfdCByZWFkIChpbnQgX19mZCwgdm9pZCAqX19idWYsIHNpemVf dCBfX25ieXRlcykgOwoKCmV4dGVybiBzc2l6ZV90IHdyaXRlIChpbnQgX19mZCwgX19jb25zdCB2 b2lkICpfX2J1Ziwgc2l6ZV90IF9fbikgOwoKCgpleHRlcm4gc3NpemVfdCBwcmVhZCAoaW50IF9f ZmQsIHZvaWQgKl9fYnVmLCBzaXplX3QgX19uYnl0ZXMsIF9fb2ZmX3QgX19vZmZzZXQpCiAgICAg OwpleHRlcm4gc3NpemVfdCBwd3JpdGUgKGludCBfX2ZkLCBfX2NvbnN0IHZvaWQgKl9fYnVmLCBz aXplX3QgX19uLAogICAgICAgICAgICAgICAgICAgICAgIF9fb2ZmX3QgX19vZmZzZXQpIDsKIyAz NDAgIi4uL3Bvc2l4L3VuaXN0ZC5oIgpleHRlcm4gc3NpemVfdCBwcmVhZDY0IChpbnQgX19mZCwg dm9pZCAqX19idWYsIHNpemVfdCBfX25ieXRlcywKICAgICAgICAgICAgICAgICAgICAgICAgX19v ZmY2NF90IF9fb2Zmc2V0KSA7CgoKZXh0ZXJuIHNzaXplX3QgcHdyaXRlNjQgKGludCBfX2ZkLCBf X2NvbnN0IHZvaWQgKl9fYnVmLCBzaXplX3QgX19uLAogICAgICAgICAgICAgICAgICAgICAgICAg X19vZmY2NF90IF9fb2Zmc2V0KSA7CgoKCgoKCgpleHRlcm4gaW50IHBpcGUgKGludCBfX3BpcGVk ZXNbMl0pIDsKIyAzNjIgIi4uL3Bvc2l4L3VuaXN0ZC5oIgpleHRlcm4gdW5zaWduZWQgaW50IGFs YXJtICh1bnNpZ25lZCBpbnQgX19zZWNvbmRzKSA7CiMgMzcxICIuLi9wb3NpeC91bmlzdGQuaCIK ZXh0ZXJuIHVuc2lnbmVkIGludCBzbGVlcCAodW5zaWduZWQgaW50IF9fc2Vjb25kcykgOwoKCgoK CgpleHRlcm4gX191c2Vjb25kc190IHVhbGFybSAoX191c2Vjb25kc190IF9fdmFsdWUsIF9fdXNl Y29uZHNfdCBfX2ludGVydmFsKQogICAgIDsKCgoKZXh0ZXJuIGludCB1c2xlZXAgKF9fdXNlY29u ZHNfdCBfX3VzZWNvbmRzKSA7CgoKCgoKZXh0ZXJuIGludCBwYXVzZSAodm9pZCkgOwoKCgpleHRl cm4gaW50IGNob3duIChfX2NvbnN0IGNoYXIgKl9fZmlsZSwgX191aWRfdCBfX293bmVyLCBfX2dp ZF90IF9fZ3JvdXApCiAgICAgOwoKCgpleHRlcm4gaW50IGZjaG93biAoaW50IF9fZmQsIF9fdWlk X3QgX19vd25lciwgX19naWRfdCBfX2dyb3VwKSA7CgoKCgpleHRlcm4gaW50IGxjaG93biAoX19j b25zdCBjaGFyICpfX2ZpbGUsIF9fdWlkX3QgX19vd25lciwgX19naWRfdCBfX2dyb3VwKQogICAg IDsKCgoKCmV4dGVybiBpbnQgY2hkaXIgKF9fY29uc3QgY2hhciAqX19wYXRoKSA7CgoKCmV4dGVy biBpbnQgZmNoZGlyIChpbnQgX19mZCkgOwojIDQyMyAiLi4vcG9zaXgvdW5pc3RkLmgiCmV4dGVy biBjaGFyICpnZXRjd2QgKGNoYXIgKl9fYnVmLCBzaXplX3QgX19zaXplKSA7CgoKCgoKZXh0ZXJu IGNoYXIgKmdldF9jdXJyZW50X2Rpcl9uYW1lICh2b2lkKSA7CgoKCgoKCmV4dGVybiBjaGFyICpn ZXR3ZCAoY2hhciAqX19idWYpIDsKCgoKCmV4dGVybiBpbnQgZHVwIChpbnQgX19mZCkgOwoKCmV4 dGVybiBpbnQgZHVwMiAoaW50IF9fZmQsIGludCBfX2ZkMikgOwoKCmV4dGVybiBjaGFyICoqX19l bnZpcm9uOwoKZXh0ZXJuIGNoYXIgKiplbnZpcm9uOwoKCgoKCmV4dGVybiBpbnQgZXhlY3ZlIChf X2NvbnN0IGNoYXIgKl9fcGF0aCwgY2hhciAqX19jb25zdCBfX2FyZ3ZbXSwKICAgICAgICAgICAg ICAgICAgIGNoYXIgKl9fY29uc3QgX19lbnZwW10pIDsKCgoKCmV4dGVybiBpbnQgZmV4ZWN2ZSAo aW50IF9fZmQsIGNoYXIgKl9fY29uc3QgX19hcmd2W10sIGNoYXIgKl9fY29uc3QgX19lbnZwW10p CiAgICAgOwoKCgoKZXh0ZXJuIGludCBleGVjdiAoX19jb25zdCBjaGFyICpfX3BhdGgsIGNoYXIg Kl9fY29uc3QgX19hcmd2W10pIDsKCgoKZXh0ZXJuIGludCBleGVjbGUgKF9fY29uc3QgY2hhciAq X19wYXRoLCBfX2NvbnN0IGNoYXIgKl9fYXJnLCAuLi4pIDsKCgoKZXh0ZXJuIGludCBleGVjbCAo X19jb25zdCBjaGFyICpfX3BhdGgsIF9fY29uc3QgY2hhciAqX19hcmcsIC4uLikgOwoKCgpleHRl cm4gaW50IGV4ZWN2cCAoX19jb25zdCBjaGFyICpfX2ZpbGUsIGNoYXIgKl9fY29uc3QgX19hcmd2 W10pIDsKCgoKCmV4dGVybiBpbnQgZXhlY2xwIChfX2NvbnN0IGNoYXIgKl9fZmlsZSwgX19jb25z dCBjaGFyICpfX2FyZywgLi4uKSA7CgoKCgpleHRlcm4gaW50IG5pY2UgKGludCBfX2luYykgOwoK CgoKZXh0ZXJuIHZvaWQgX2V4aXQgKGludCBfX3N0YXR1cykgX19hdHRyaWJ1dGVfXyAoKF9fbm9y ZXR1cm5fXykpOwoKCgoKCiMgMSAiLi4vc3lzZGVwcy9nZW5lcmljL2JpdHMvY29uZm5hbWUuaCIg MQojIDI1ICIuLi9zeXNkZXBzL2dlbmVyaWMvYml0cy9jb25mbmFtZS5oIgplbnVtCiAgewogICAg X1BDX0xJTktfTUFYLAoKICAgIF9QQ19NQVhfQ0FOT04sCgogICAgX1BDX01BWF9JTlBVVCwKCiAg ICBfUENfTkFNRV9NQVgsCgogICAgX1BDX1BBVEhfTUFYLAoKICAgIF9QQ19QSVBFX0JVRiwKCiAg ICBfUENfQ0hPV05fUkVTVFJJQ1RFRCwKCiAgICBfUENfTk9fVFJVTkMsCgogICAgX1BDX1ZESVNB QkxFLAoKICAgIF9QQ19TWU5DX0lPLAoKICAgIF9QQ19BU1lOQ19JTywKCiAgICBfUENfUFJJT19J TywKCiAgICBfUENfU09DS19NQVhCVUYsCgogICAgX1BDX0ZJTEVTSVpFQklUUywKCiAgICBfUENf UkVDX0lOQ1JfWEZFUl9TSVpFLAoKICAgIF9QQ19SRUNfTUFYX1hGRVJfU0laRSwKCiAgICBfUENf UkVDX01JTl9YRkVSX1NJWkUsCgogICAgX1BDX1JFQ19YRkVSX0FMSUdOLAoKICAgIF9QQ19BTExP Q19TSVpFX01JTiwKCiAgICBfUENfU1lNTElOS19NQVgKCiAgfTsKCgplbnVtCiAgewogICAgX1ND X0FSR19NQVgsCgogICAgX1NDX0NISUxEX01BWCwKCiAgICBfU0NfQ0xLX1RDSywKCiAgICBfU0Nf TkdST1VQU19NQVgsCgogICAgX1NDX09QRU5fTUFYLAoKICAgIF9TQ19TVFJFQU1fTUFYLAoKICAg IF9TQ19UWk5BTUVfTUFYLAoKICAgIF9TQ19KT0JfQ09OVFJPTCwKCiAgICBfU0NfU0FWRURfSURT LAoKICAgIF9TQ19SRUFMVElNRV9TSUdOQUxTLAoKICAgIF9TQ19QUklPUklUWV9TQ0hFRFVMSU5H LAoKICAgIF9TQ19USU1FUlMsCgogICAgX1NDX0FTWU5DSFJPTk9VU19JTywKCiAgICBfU0NfUFJJ T1JJVElaRURfSU8sCgogICAgX1NDX1NZTkNIUk9OSVpFRF9JTywKCiAgICBfU0NfRlNZTkMsCgog ICAgX1NDX01BUFBFRF9GSUxFUywKCiAgICBfU0NfTUVNTE9DSywKCiAgICBfU0NfTUVNTE9DS19S QU5HRSwKCiAgICBfU0NfTUVNT1JZX1BST1RFQ1RJT04sCgogICAgX1NDX01FU1NBR0VfUEFTU0lO RywKCiAgICBfU0NfU0VNQVBIT1JFUywKCiAgICBfU0NfU0hBUkVEX01FTU9SWV9PQkpFQ1RTLAoK ICAgIF9TQ19BSU9fTElTVElPX01BWCwKCiAgICBfU0NfQUlPX01BWCwKCiAgICBfU0NfQUlPX1BS SU9fREVMVEFfTUFYLAoKICAgIF9TQ19ERUxBWVRJTUVSX01BWCwKCiAgICBfU0NfTVFfT1BFTl9N QVgsCgogICAgX1NDX01RX1BSSU9fTUFYLAoKICAgIF9TQ19WRVJTSU9OLAoKICAgIF9TQ19QQUdF U0laRSwKCgogICAgX1NDX1JUU0lHX01BWCwKCiAgICBfU0NfU0VNX05TRU1TX01BWCwKCiAgICBf U0NfU0VNX1ZBTFVFX01BWCwKCiAgICBfU0NfU0lHUVVFVUVfTUFYLAoKICAgIF9TQ19USU1FUl9N QVgsCgoKCgogICAgX1NDX0JDX0JBU0VfTUFYLAoKICAgIF9TQ19CQ19ESU1fTUFYLAoKICAgIF9T Q19CQ19TQ0FMRV9NQVgsCgogICAgX1NDX0JDX1NUUklOR19NQVgsCgogICAgX1NDX0NPTExfV0VJ R0hUU19NQVgsCgogICAgX1NDX0VRVUlWX0NMQVNTX01BWCwKCiAgICBfU0NfRVhQUl9ORVNUX01B WCwKCiAgICBfU0NfTElORV9NQVgsCgogICAgX1NDX1JFX0RVUF9NQVgsCgogICAgX1NDX0NIQVJD TEFTU19OQU1FX01BWCwKCgogICAgX1NDXzJfVkVSU0lPTiwKCiAgICBfU0NfMl9DX0JJTkQsCgog ICAgX1NDXzJfQ19ERVYsCgogICAgX1NDXzJfRk9SVF9ERVYsCgogICAgX1NDXzJfRk9SVF9SVU4s CgogICAgX1NDXzJfU1dfREVWLAoKICAgIF9TQ18yX0xPQ0FMRURFRiwKCgogICAgX1NDX1BJSSwK CiAgICBfU0NfUElJX1hUSSwKCiAgICBfU0NfUElJX1NPQ0tFVCwKCiAgICBfU0NfUElJX0lOVEVS TkVULAoKICAgIF9TQ19QSUlfT1NJLAoKICAgIF9TQ19QT0xMLAoKICAgIF9TQ19TRUxFQ1QsCgog ICAgX1NDX1VJT19NQVhJT1YsCgogICAgX1NDX0lPVl9NQVggPSBfU0NfVUlPX01BWElPViwKCiAg ICBfU0NfUElJX0lOVEVSTkVUX1NUUkVBTSwKCiAgICBfU0NfUElJX0lOVEVSTkVUX0RHUkFNLAoK ICAgIF9TQ19QSUlfT1NJX0NPVFMsCgogICAgX1NDX1BJSV9PU0lfQ0xUUywKCiAgICBfU0NfUElJ X09TSV9NLAoKICAgIF9TQ19UX0lPVl9NQVgsCgoKCiAgICBfU0NfVEhSRUFEUywKCiAgICBfU0Nf VEhSRUFEX1NBRkVfRlVOQ1RJT05TLAoKICAgIF9TQ19HRVRHUl9SX1NJWkVfTUFYLAoKICAgIF9T Q19HRVRQV19SX1NJWkVfTUFYLAoKICAgIF9TQ19MT0dJTl9OQU1FX01BWCwKCiAgICBfU0NfVFRZ X05BTUVfTUFYLAoKICAgIF9TQ19USFJFQURfREVTVFJVQ1RPUl9JVEVSQVRJT05TLAoKICAgIF9T Q19USFJFQURfS0VZU19NQVgsCgogICAgX1NDX1RIUkVBRF9TVEFDS19NSU4sCgogICAgX1NDX1RI UkVBRF9USFJFQURTX01BWCwKCiAgICBfU0NfVEhSRUFEX0FUVFJfU1RBQ0tBRERSLAoKICAgIF9T Q19USFJFQURfQVRUUl9TVEFDS1NJWkUsCgogICAgX1NDX1RIUkVBRF9QUklPUklUWV9TQ0hFRFVM SU5HLAoKICAgIF9TQ19USFJFQURfUFJJT19JTkhFUklULAoKICAgIF9TQ19USFJFQURfUFJJT19Q Uk9URUNULAoKICAgIF9TQ19USFJFQURfUFJPQ0VTU19TSEFSRUQsCgoKICAgIF9TQ19OUFJPQ0VT U09SU19DT05GLAoKICAgIF9TQ19OUFJPQ0VTU09SU19PTkxOLAoKICAgIF9TQ19QSFlTX1BBR0VT LAoKICAgIF9TQ19BVlBIWVNfUEFHRVMsCgogICAgX1NDX0FURVhJVF9NQVgsCgogICAgX1NDX1BB U1NfTUFYLAoKCiAgICBfU0NfWE9QRU5fVkVSU0lPTiwKCiAgICBfU0NfWE9QRU5fWENVX1ZFUlNJ T04sCgogICAgX1NDX1hPUEVOX1VOSVgsCgogICAgX1NDX1hPUEVOX0NSWVBULAoKICAgIF9TQ19Y T1BFTl9FTkhfSTE4TiwKCiAgICBfU0NfWE9QRU5fU0hNLAoKCiAgICBfU0NfMl9DSEFSX1RFUk0s CgogICAgX1NDXzJfQ19WRVJTSU9OLAoKICAgIF9TQ18yX1VQRSwKCgogICAgX1NDX1hPUEVOX1hQ RzIsCgogICAgX1NDX1hPUEVOX1hQRzMsCgogICAgX1NDX1hPUEVOX1hQRzQsCgoKICAgIF9TQ19D SEFSX0JJVCwKCiAgICBfU0NfQ0hBUl9NQVgsCgogICAgX1NDX0NIQVJfTUlOLAoKICAgIF9TQ19J TlRfTUFYLAoKICAgIF9TQ19JTlRfTUlOLAoKICAgIF9TQ19MT05HX0JJVCwKCiAgICBfU0NfV09S RF9CSVQsCgogICAgX1NDX01CX0xFTl9NQVgsCgogICAgX1NDX05aRVJPLAoKICAgIF9TQ19TU0la RV9NQVgsCgogICAgX1NDX1NDSEFSX01BWCwKCiAgICBfU0NfU0NIQVJfTUlOLAoKICAgIF9TQ19T SFJUX01BWCwKCiAgICBfU0NfU0hSVF9NSU4sCgogICAgX1NDX1VDSEFSX01BWCwKCiAgICBfU0Nf VUlOVF9NQVgsCgogICAgX1NDX1VMT05HX01BWCwKCiAgICBfU0NfVVNIUlRfTUFYLAoKCiAgICBf U0NfTkxfQVJHTUFYLAoKICAgIF9TQ19OTF9MQU5HTUFYLAoKICAgIF9TQ19OTF9NU0dNQVgsCgog ICAgX1NDX05MX05NQVgsCgogICAgX1NDX05MX1NFVE1BWCwKCiAgICBfU0NfTkxfVEVYVE1BWCwK CgogICAgX1NDX1hCUzVfSUxQMzJfT0ZGMzIsCgogICAgX1NDX1hCUzVfSUxQMzJfT0ZGQklHLAoK ICAgIF9TQ19YQlM1X0xQNjRfT0ZGNjQsCgogICAgX1NDX1hCUzVfTFBCSUdfT0ZGQklHLAoKCiAg ICBfU0NfWE9QRU5fTEVHQUNZLAoKICAgIF9TQ19YT1BFTl9SRUFMVElNRSwKCiAgICBfU0NfWE9Q RU5fUkVBTFRJTUVfVEhSRUFEUywKCgogICAgX1NDX0FEVklTT1JZX0lORk8sCgogICAgX1NDX0JB UlJJRVJTLAoKICAgIF9TQ19CQVNFLAoKICAgIF9TQ19DX0xBTkdfU1VQUE9SVCwKCiAgICBfU0Nf Q19MQU5HX1NVUFBPUlRfUiwKCiAgICBfU0NfQ0xPQ0tfU0VMRUNUSU9OLAoKICAgIF9TQ19DUFVU SU1FLAoKICAgIF9TQ19USFJFQURfQ1BVVElNRSwKCiAgICBfU0NfREVWSUNFX0lPLAoKICAgIF9T Q19ERVZJQ0VfU1BFQ0lGSUMsCgogICAgX1NDX0RFVklDRV9TUEVDSUZJQ19SLAoKICAgIF9TQ19G RF9NR01ULAoKICAgIF9TQ19GSUZPLAoKICAgIF9TQ19QSVBFLAoKICAgIF9TQ19GSUxFX0FUVFJJ QlVURVMsCgogICAgX1NDX0ZJTEVfTE9DS0lORywKCiAgICBfU0NfRklMRV9TWVNURU0sCgogICAg X1NDX01PTk9UT05JQ19DTE9DSywKCiAgICBfU0NfTVVMVElfUFJPQ0VTUywKCiAgICBfU0NfU0lO R0xFX1BST0NFU1MsCgogICAgX1NDX05FVFdPUktJTkcsCgogICAgX1NDX1JFQURFUl9XUklURVJf TE9DS1MsCgogICAgX1NDX1NQSU5fTE9DS1MsCgogICAgX1NDX1JFR0VYUCwKCiAgICBfU0NfUkVH RVhfVkVSU0lPTiwKCiAgICBfU0NfU0hFTEwsCgogICAgX1NDX1NJR05BTFMsCgogICAgX1NDX1NQ QVdOLAoKICAgIF9TQ19TUE9SQURJQ19TRVJWRVIsCgogICAgX1NDX1RIUkVBRF9TUE9SQURJQ19T RVJWRVIsCgogICAgX1NDX1NZU1RFTV9EQVRBQkFTRSwKCiAgICBfU0NfU1lTVEVNX0RBVEFCQVNF X1IsCgogICAgX1NDX1RJTUVPVVRTLAoKICAgIF9TQ19UWVBFRF9NRU1PUllfT0JKRUNUUywKCiAg ICBfU0NfVVNFUl9HUk9VUFMsCgogICAgX1NDX1VTRVJfR1JPVVBTX1IsCgogICAgX1NDXzJfUEJT LAoKICAgIF9TQ18yX1BCU19BQ0NPVU5USU5HLAoKICAgIF9TQ18yX1BCU19MT0NBVEUsCgogICAg X1NDXzJfUEJTX01FU1NBR0UsCgogICAgX1NDXzJfUEJTX1RSQUNLLAoKICAgIF9TQ19TWU1MT09Q X01BWCwKCiAgICBfU0NfU1RSRUFNUywKCiAgICBfU0NfMl9QQlNfQ0hFQ0tQT0lOVCwKCgogICAg X1NDX1Y2X0lMUDMyX09GRjMyLAoKICAgIF9TQ19WNl9JTFAzMl9PRkZCSUcsCgogICAgX1NDX1Y2 X0xQNjRfT0ZGNjQsCgogICAgX1NDX1Y2X0xQQklHX09GRkJJRywKCgogICAgX1NDX0hPU1RfTkFN RV9NQVgsCgogICAgX1NDX1RSQUNFLAoKICAgIF9TQ19UUkFDRV9FVkVOVF9GSUxURVIsCgogICAg X1NDX1RSQUNFX0lOSEVSSVQsCgogICAgX1NDX1RSQUNFX0xPRwoKICB9OwoKCgoKCmVudW0KICB7 CiAgICBfQ1NfUEFUSCwKCgoKCiAgICBfQ1NfTEZTX0NGTEFHUyA9IDEwMDAsCgogICAgX0NTX0xG U19MREZMQUdTLAoKICAgIF9DU19MRlNfTElCUywKCiAgICBfQ1NfTEZTX0xJTlRGTEFHUywKCiAg ICBfQ1NfTEZTNjRfQ0ZMQUdTLAoKICAgIF9DU19MRlM2NF9MREZMQUdTLAoKICAgIF9DU19MRlM2 NF9MSUJTLAoKICAgIF9DU19MRlM2NF9MSU5URkxBR1MsCgoKCgogICAgX0NTX1hCUzVfSUxQMzJf T0ZGMzJfQ0ZMQUdTID0gMTEwMCwKCiAgICBfQ1NfWEJTNV9JTFAzMl9PRkYzMl9MREZMQUdTLAoK ICAgIF9DU19YQlM1X0lMUDMyX09GRjMyX0xJQlMsCgogICAgX0NTX1hCUzVfSUxQMzJfT0ZGMzJf TElOVEZMQUdTLAoKICAgIF9DU19YQlM1X0lMUDMyX09GRkJJR19DRkxBR1MsCgogICAgX0NTX1hC UzVfSUxQMzJfT0ZGQklHX0xERkxBR1MsCgogICAgX0NTX1hCUzVfSUxQMzJfT0ZGQklHX0xJQlMs CgogICAgX0NTX1hCUzVfSUxQMzJfT0ZGQklHX0xJTlRGTEFHUywKCiAgICBfQ1NfWEJTNV9MUDY0 X09GRjY0X0NGTEFHUywKCiAgICBfQ1NfWEJTNV9MUDY0X09GRjY0X0xERkxBR1MsCgogICAgX0NT X1hCUzVfTFA2NF9PRkY2NF9MSUJTLAoKICAgIF9DU19YQlM1X0xQNjRfT0ZGNjRfTElOVEZMQUdT LAoKICAgIF9DU19YQlM1X0xQQklHX09GRkJJR19DRkxBR1MsCgogICAgX0NTX1hCUzVfTFBCSUdf T0ZGQklHX0xERkxBR1MsCgogICAgX0NTX1hCUzVfTFBCSUdfT0ZGQklHX0xJQlMsCgogICAgX0NT X1hCUzVfTFBCSUdfT0ZGQklHX0xJTlRGTEFHUywKCgoKICAgIF9DU19QT1NJWF9WNl9JTFAzMl9P RkYzMl9DRkxBR1MsCgogICAgX0NTX1BPU0lYX1Y2X0lMUDMyX09GRjMyX0xERkxBR1MsCgogICAg X0NTX1BPU0lYX1Y2X0lMUDMyX09GRjMyX0xJQlMsCgogICAgX0NTX1BPU0lYX1Y2X0lMUDMyX09G RjMyX0xJTlRGTEFHUywKCiAgICBfQ1NfUE9TSVhfVjZfSUxQMzJfT0ZGQklHX0NGTEFHUywKCiAg ICBfQ1NfUE9TSVhfVjZfSUxQMzJfT0ZGQklHX0xERkxBR1MsCgogICAgX0NTX1BPU0lYX1Y2X0lM UDMyX09GRkJJR19MSUJTLAoKICAgIF9DU19QT1NJWF9WNl9JTFAzMl9PRkZCSUdfTElOVEZMQUdT LAoKICAgIF9DU19QT1NJWF9WNl9MUDY0X09GRjY0X0NGTEFHUywKCiAgICBfQ1NfUE9TSVhfVjZf TFA2NF9PRkY2NF9MREZMQUdTLAoKICAgIF9DU19QT1NJWF9WNl9MUDY0X09GRjY0X0xJQlMsCgog ICAgX0NTX1BPU0lYX1Y2X0xQNjRfT0ZGNjRfTElOVEZMQUdTLAoKICAgIF9DU19QT1NJWF9WNl9M UEJJR19PRkZCSUdfQ0ZMQUdTLAoKICAgIF9DU19QT1NJWF9WNl9MUEJJR19PRkZCSUdfTERGTEFH UywKCiAgICBfQ1NfUE9TSVhfVjZfTFBCSUdfT0ZGQklHX0xJQlMsCgogICAgX0NTX1BPU0lYX1Y2 X0xQQklHX09GRkJJR19MSU5URkxBR1MsCgoKCiAgICBfQ1NfVjZfV0lEVEhfUkVTVFJJQ1RFRF9F TlZTCgogIH07CiMgNTAxICIuLi9wb3NpeC91bmlzdGQuaCIgMgoKCmV4dGVybiBsb25nIGludCBw YXRoY29uZiAoX19jb25zdCBjaGFyICpfX3BhdGgsIGludCBfX25hbWUpIDsKCgpleHRlcm4gbG9u ZyBpbnQgZnBhdGhjb25mIChpbnQgX19mZCwgaW50IF9fbmFtZSkgOwoKCmV4dGVybiBsb25nIGlu dCBzeXNjb25mIChpbnQgX19uYW1lKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKCmV4 dGVybiBzaXplX3QgY29uZnN0ciAoaW50IF9fbmFtZSwgY2hhciAqX19idWYsIHNpemVfdCBfX2xl bikgOwoKCgoKZXh0ZXJuIF9fcGlkX3QgZ2V0cGlkICh2b2lkKSA7CgoKZXh0ZXJuIF9fcGlkX3Qg Z2V0cHBpZCAodm9pZCkgOwoKCgoKZXh0ZXJuIF9fcGlkX3QgZ2V0cGdycCAodm9pZCkgOwojIDUz NiAiLi4vcG9zaXgvdW5pc3RkLmgiCmV4dGVybiBfX3BpZF90IF9fZ2V0cGdpZCAoX19waWRfdCBf X3BpZCkgOwoKZXh0ZXJuIF9fcGlkX3QgZ2V0cGdpZCAoX19waWRfdCBfX3BpZCkgOwoKCgoKCgpl eHRlcm4gaW50IHNldHBnaWQgKF9fcGlkX3QgX19waWQsIF9fcGlkX3QgX19wZ2lkKSA7CiMgNTYy ICIuLi9wb3NpeC91bmlzdGQuaCIKZXh0ZXJuIGludCBzZXRwZ3JwICh2b2lkKSA7CiMgNTgwICIu Li9wb3NpeC91bmlzdGQuaCIKZXh0ZXJuIF9fcGlkX3Qgc2V0c2lkICh2b2lkKSA7CgoKCmV4dGVy biBfX3BpZF90IGdldHNpZCAoX19waWRfdCBfX3BpZCkgOwoKCgpleHRlcm4gX191aWRfdCBnZXR1 aWQgKHZvaWQpIDsKCgpleHRlcm4gX191aWRfdCBnZXRldWlkICh2b2lkKSA7CgoKZXh0ZXJuIF9f Z2lkX3QgZ2V0Z2lkICh2b2lkKSA7CgoKZXh0ZXJuIF9fZ2lkX3QgZ2V0ZWdpZCAodm9pZCkgOwoK CgoKZXh0ZXJuIGludCBnZXRncm91cHMgKGludCBfX3NpemUsIF9fZ2lkX3QgX19saXN0W10pIDsK CgoKZXh0ZXJuIGludCBncm91cF9tZW1iZXIgKF9fZ2lkX3QgX19naWQpIDsKCgoKCgoKZXh0ZXJu IGludCBzZXR1aWQgKF9fdWlkX3QgX191aWQpIDsKCgoKCmV4dGVybiBpbnQgc2V0cmV1aWQgKF9f dWlkX3QgX19ydWlkLCBfX3VpZF90IF9fZXVpZCkgOwoKCgoKZXh0ZXJuIGludCBzZXRldWlkIChf X3VpZF90IF9fdWlkKSA7CgoKCgoKCmV4dGVybiBpbnQgc2V0Z2lkIChfX2dpZF90IF9fZ2lkKSA7 CgoKCgpleHRlcm4gaW50IHNldHJlZ2lkIChfX2dpZF90IF9fcmdpZCwgX19naWRfdCBfX2VnaWQp IDsKCgoKCmV4dGVybiBpbnQgc2V0ZWdpZCAoX19naWRfdCBfX2dpZCkgOwoKCgoKCmV4dGVybiBp bnQgZ2V0cmVzdWlkIChfX3VpZF90ICpfX2V1aWQsIF9fdWlkX3QgKl9fcnVpZCwgX191aWRfdCAq X19zdWlkKTsKCgoKZXh0ZXJuIGludCBnZXRyZXNnaWQgKF9fZ2lkX3QgKl9fZWdpZCwgX19naWRf dCAqX19yZ2lkLCBfX2dpZF90ICpfX3NnaWQpOwoKCgpleHRlcm4gaW50IHNldHJlc3VpZCAoX191 aWRfdCBfX2V1aWQsIF9fdWlkX3QgX19ydWlkLCBfX3VpZF90IF9fc3VpZCk7CgoKCmV4dGVybiBp bnQgc2V0cmVzZ2lkIChfX2dpZF90IF9fZWdpZCwgX19naWRfdCBfX3JnaWQsIF9fZ2lkX3QgX19z Z2lkKTsKCgoKCgoKZXh0ZXJuIF9fcGlkX3QgZm9yayAodm9pZCkgOwoKCgoKCgpleHRlcm4gX19w aWRfdCB2Zm9yayAodm9pZCkgOwoKCgoKCmV4dGVybiBjaGFyICp0dHluYW1lIChpbnQgX19mZCkg OwoKCgpleHRlcm4gaW50IHR0eW5hbWVfciAoaW50IF9fZmQsIGNoYXIgKl9fYnVmLCBzaXplX3Qg X19idWZsZW4pIDsKCgoKZXh0ZXJuIGludCBpc2F0dHkgKGludCBfX2ZkKSA7CgoKCgoKZXh0ZXJu IGludCB0dHlzbG90ICh2b2lkKSA7CgoKCgpleHRlcm4gaW50IGxpbmsgKF9fY29uc3QgY2hhciAq X19mcm9tLCBfX2NvbnN0IGNoYXIgKl9fdG8pIDsKCgoKZXh0ZXJuIGludCBzeW1saW5rIChfX2Nv bnN0IGNoYXIgKl9fZnJvbSwgX19jb25zdCBjaGFyICpfX3RvKSA7CgoKCgpleHRlcm4gaW50IHJl YWRsaW5rIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19wYXRoLCBjaGFyICpfX3Jlc3RyaWN0 IF9fYnVmLAogICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19sZW4pIDsKCgoKZXh0ZXJuIGlu dCB1bmxpbmsgKF9fY29uc3QgY2hhciAqX19uYW1lKSA7CgoKZXh0ZXJuIGludCBybWRpciAoX19j b25zdCBjaGFyICpfX3BhdGgpIDsKCgoKZXh0ZXJuIF9fcGlkX3QgdGNnZXRwZ3JwIChpbnQgX19m ZCkgOwoKCmV4dGVybiBpbnQgdGNzZXRwZ3JwIChpbnQgX19mZCwgX19waWRfdCBfX3BncnBfaWQp IDsKCgoKZXh0ZXJuIGNoYXIgKmdldGxvZ2luICh2b2lkKSA7CgoKCgpleHRlcm4gaW50IGdldGxv Z2luX3IgKGNoYXIgKl9fbmFtZSwgc2l6ZV90IF9fbmFtZV9sZW4pIDsKCgoKCmV4dGVybiBpbnQg c2V0bG9naW4gKF9fY29uc3QgY2hhciAqX19uYW1lKSA7CiMgNzQ0ICIuLi9wb3NpeC91bmlzdGQu aCIKIyAxICIuLi9pbmNsdWRlL2dldG9wdC5oIiAxCgoKCiMgMSAiLi4vcG9zaXgvZ2V0b3B0Lmgi IDEKIyA0NyAiLi4vcG9zaXgvZ2V0b3B0LmgiCmV4dGVybiBjaGFyICpvcHRhcmc7CiMgNjEgIi4u L3Bvc2l4L2dldG9wdC5oIgpleHRlcm4gaW50IG9wdGluZDsKCgoKCmV4dGVybiBpbnQgb3B0ZXJy OwoKCgpleHRlcm4gaW50IG9wdG9wdDsKIyAxNDUgIi4uL3Bvc2l4L2dldG9wdC5oIgpleHRlcm4g aW50IGdldG9wdCAoaW50IF9fX2FyZ2MsIGNoYXIgKmNvbnN0ICpfX19hcmd2LCBjb25zdCBjaGFy ICpfX3Nob3J0b3B0cyk7CiMgNSAiLi4vaW5jbHVkZS9nZXRvcHQuaCIgMgojIDc0NSAiLi4vcG9z aXgvdW5pc3RkLmgiIDIKCgoKCgoKCmV4dGVybiBpbnQgZ2V0aG9zdG5hbWUgKGNoYXIgKl9fbmFt ZSwgc2l6ZV90IF9fbGVuKSA7CgoKCgoKCmV4dGVybiBpbnQgc2V0aG9zdG5hbWUgKF9fY29uc3Qg Y2hhciAqX19uYW1lLCBzaXplX3QgX19sZW4pIDsKCgoKZXh0ZXJuIGludCBzZXRob3N0aWQgKGxv bmcgaW50IF9faWQpIDsKCgoKCgpleHRlcm4gaW50IGdldGRvbWFpbm5hbWUgKGNoYXIgKl9fbmFt ZSwgc2l6ZV90IF9fbGVuKSA7CmV4dGVybiBpbnQgc2V0ZG9tYWlubmFtZSAoX19jb25zdCBjaGFy ICpfX25hbWUsIHNpemVfdCBfX2xlbikgOwoKCgoKCmV4dGVybiBpbnQgdmhhbmd1cCAodm9pZCkg OwoKCmV4dGVybiBpbnQgcmV2b2tlIChfX2NvbnN0IGNoYXIgKl9fZmlsZSkgOwoKCgoKCgoKZXh0 ZXJuIGludCBwcm9maWwgKHVuc2lnbmVkIHNob3J0IGludCAqX19zYW1wbGVfYnVmZmVyLCBzaXpl X3QgX19zaXplLAogICAgICAgICAgICAgICAgICAgc2l6ZV90IF9fb2Zmc2V0LCB1bnNpZ25lZCBp bnQgX19zY2FsZSkgOwoKCgoKCmV4dGVybiBpbnQgYWNjdCAoX19jb25zdCBjaGFyICpfX25hbWUp IDsKCgoKZXh0ZXJuIGNoYXIgKmdldHVzZXJzaGVsbCAodm9pZCkgOwpleHRlcm4gdm9pZCBlbmR1 c2Vyc2hlbGwgKHZvaWQpIDsKZXh0ZXJuIHZvaWQgc2V0dXNlcnNoZWxsICh2b2lkKSA7CgoKCgoK ZXh0ZXJuIGludCBkYWVtb24gKGludCBfX25vY2hkaXIsIGludCBfX25vY2xvc2UpIDsKCgoKCgoK ZXh0ZXJuIGludCBjaHJvb3QgKF9fY29uc3QgY2hhciAqX19wYXRoKSA7CgoKCmV4dGVybiBjaGFy ICpnZXRwYXNzIChfX2NvbnN0IGNoYXIgKl9fcHJvbXB0KSA7CgoKCgoKZXh0ZXJuIGludCBmc3lu YyAoaW50IF9fZmQpIDsKCgoKCgoKZXh0ZXJuIGxvbmcgaW50IGdldGhvc3RpZCAodm9pZCkgOwoK CmV4dGVybiB2b2lkIHN5bmMgKHZvaWQpIDsKCgoKCmV4dGVybiBpbnQgZ2V0cGFnZXNpemUgKHZv aWQpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgoKCmV4dGVybiBpbnQgdHJ1bmNhdGUg KF9fY29uc3QgY2hhciAqX19maWxlLCBfX29mZl90IF9fbGVuZ3RoKSA7CiMgODU0ICIuLi9wb3Np eC91bmlzdGQuaCIKZXh0ZXJuIGludCB0cnVuY2F0ZTY0IChfX2NvbnN0IGNoYXIgKl9fZmlsZSwg X19vZmY2NF90IF9fbGVuZ3RoKSA7CgoKCgpleHRlcm4gaW50IGZ0cnVuY2F0ZSAoaW50IF9fZmQs IF9fb2ZmX3QgX19sZW5ndGgpIDsKIyA4NjkgIi4uL3Bvc2l4L3VuaXN0ZC5oIgpleHRlcm4gaW50 IGZ0cnVuY2F0ZTY0IChpbnQgX19mZCwgX19vZmY2NF90IF9fbGVuZ3RoKSA7CgoKCgoKZXh0ZXJu IGludCBnZXRkdGFibGVzaXplICh2b2lkKSA7CiMgODg0ICIuLi9wb3NpeC91bmlzdGQuaCIKZXh0 ZXJuIGludCBicmsgKHZvaWQgKl9fYWRkcikgOwoKCgoKCmV4dGVybiB2b2lkICpzYnJrIChpbnRw dHJfdCBfX2RlbHRhKSA7CiMgOTA1ICIuLi9wb3NpeC91bmlzdGQuaCIKZXh0ZXJuIGxvbmcgaW50 IHN5c2NhbGwgKGxvbmcgaW50IF9fc3lzbm8sIC4uLikgOwojIDkyNSAiLi4vcG9zaXgvdW5pc3Rk LmgiCmV4dGVybiBpbnQgbG9ja2YgKGludCBfX2ZkLCBpbnQgX19jbWQsIF9fb2ZmX3QgX19sZW4p IDsKIyA5MzUgIi4uL3Bvc2l4L3VuaXN0ZC5oIgpleHRlcm4gaW50IGxvY2tmNjQgKGludCBfX2Zk LCBpbnQgX19jbWQsIF9fb2ZmNjRfdCBfX2xlbikgOwojIDk1NiAiLi4vcG9zaXgvdW5pc3RkLmgi CmV4dGVybiBpbnQgZmRhdGFzeW5jIChpbnQgX19maWxkZXMpIDsKCgoKCgoKCmV4dGVybiBjaGFy ICpjcnlwdCAoX19jb25zdCBjaGFyICpfX2tleSwgX19jb25zdCBjaGFyICpfX3NhbHQpIDsKCgoK ZXh0ZXJuIHZvaWQgZW5jcnlwdCAoY2hhciAqX19ibG9jaywgaW50IF9fZWRmbGFnKSA7CgoKCgoK CmV4dGVybiB2b2lkIHN3YWIgKF9fY29uc3Qgdm9pZCAqX19yZXN0cmljdCBfX2Zyb20sIHZvaWQg Kl9fcmVzdHJpY3QgX190bywKICAgICAgICAgICAgICAgICAgc3NpemVfdCBfX24pIDsKCgoKCgoK CmV4dGVybiBjaGFyICpjdGVybWlkIChjaGFyICpfX3MpIDsKIyAxMDAxICIuLi9wb3NpeC91bmlz dGQuaCIKZXh0ZXJuIGludCBwdGhyZWFkX2F0Zm9yayAodm9pZCAoKl9fcHJlcGFyZSkgKHZvaWQp LAogICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICgqX19wYXJlbnQpICh2b2lkKSwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAoKl9fY2hpbGQpICh2b2lkKSkgOwoKCgojIDMg Ii4uL2luY2x1ZGUvdW5pc3RkLmgiIDIKCmV4dGVybiBfX3R5cGVvZiAoX2V4aXQpIF9fR0lfX2V4 aXQ7IGV4dGVybiBfX3R5cGVvZiAoX2V4aXQpIF9leGl0IF9fYXNtX18gKCIiICJfX0dJX19leGl0 IikgX19hdHRyaWJ1dGVfXyAoKHZpc2liaWxpdHkgKCJoaWRkZW4iKSwgX19ub3JldHVybl9fKSk7 CmV4dGVybiBfX3R5cGVvZiAoYWxhcm0pIF9fR0lfYWxhcm07IGV4dGVybiBfX3R5cGVvZiAoYWxh cm0pIGFsYXJtIF9fYXNtX18gKCIiICJfX0dJX2FsYXJtIikgX19hdHRyaWJ1dGVfXyAoKHZpc2li aWxpdHkgKCJoaWRkZW4iKSkpOwpleHRlcm4gX190eXBlb2YgKGNvbmZzdHIpIF9fR0lfY29uZnN0 cjsgZXh0ZXJuIF9fdHlwZW9mIChjb25mc3RyKSBjb25mc3RyIF9fYXNtX18gKCIiICJfX0dJX2Nv bmZzdHIiKSBfX2F0dHJpYnV0ZV9fICgodmlzaWJpbGl0eSAoImhpZGRlbiIpKSk7CmV4dGVybiBf X3R5cGVvZiAoZXhlY2wpIF9fR0lfZXhlY2w7IGV4dGVybiBfX3R5cGVvZiAoZXhlY2wpIGV4ZWNs IF9fYXNtX18gKCIiICJfX0dJX2V4ZWNsIikgX19hdHRyaWJ1dGVfXyAoKHZpc2liaWxpdHkgKCJo aWRkZW4iKSkpOwpleHRlcm4gX190eXBlb2YgKGV4ZWNsZSkgX19HSV9leGVjbGU7IGV4dGVybiBf X3R5cGVvZiAoZXhlY2xlKSBleGVjbGUgX19hc21fXyAoIiIgIl9fR0lfZXhlY2xlIikgX19hdHRy aWJ1dGVfXyAoKHZpc2liaWxpdHkgKCJoaWRkZW4iKSkpOwpleHRlcm4gX190eXBlb2YgKGV4ZWNs cCkgX19HSV9leGVjbHA7IGV4dGVybiBfX3R5cGVvZiAoZXhlY2xwKSBleGVjbHAgX19hc21fXyAo IiIgIl9fR0lfZXhlY2xwIikgX19hdHRyaWJ1dGVfXyAoKHZpc2liaWxpdHkgKCJoaWRkZW4iKSkp OwpleHRlcm4gX190eXBlb2YgKGV4ZWN2cCkgX19HSV9leGVjdnA7IGV4dGVybiBfX3R5cGVvZiAo ZXhlY3ZwKSBleGVjdnAgX19hc21fXyAoIiIgIl9fR0lfZXhlY3ZwIikgX19hdHRyaWJ1dGVfXyAo KHZpc2liaWxpdHkgKCJoaWRkZW4iKSkpOwpleHRlcm4gX190eXBlb2YgKGdldHBpZCkgX19HSV9n ZXRwaWQ7IGV4dGVybiBfX3R5cGVvZiAoZ2V0cGlkKSBnZXRwaWQgX19hc21fXyAoIiIgIl9fR0lf Z2V0cGlkIikgX19hdHRyaWJ1dGVfXyAoKHZpc2liaWxpdHkgKCJoaWRkZW4iKSkpOwpleHRlcm4g X190eXBlb2YgKGdldHNpZCkgX19HSV9nZXRzaWQ7IGV4dGVybiBfX3R5cGVvZiAoZ2V0c2lkKSBn ZXRzaWQgX19hc21fXyAoIiIgIl9fR0lfZ2V0c2lkIikgX19hdHRyaWJ1dGVfXyAoKHZpc2liaWxp dHkgKCJoaWRkZW4iKSkpOwpleHRlcm4gX190eXBlb2YgKGdldGRvbWFpbm5hbWUpIF9fR0lfZ2V0 ZG9tYWlubmFtZTsgZXh0ZXJuIF9fdHlwZW9mIChnZXRkb21haW5uYW1lKSBnZXRkb21haW5uYW1l IF9fYXNtX18gKCIiICJfX0dJX2dldGRvbWFpbm5hbWUiKSBfX2F0dHJpYnV0ZV9fICgodmlzaWJp bGl0eSAoImhpZGRlbiIpKSk7CmV4dGVybiBfX3R5cGVvZiAoZ2V0bG9naW5fcikgX19HSV9nZXRs b2dpbl9yOyBleHRlcm4gX190eXBlb2YgKGdldGxvZ2luX3IpIGdldGxvZ2luX3IgX19hc21fXyAo IiIgIl9fR0lfZ2V0bG9naW5fciIpIF9fYXR0cmlidXRlX18gKCh2aXNpYmlsaXR5ICgiaGlkZGVu IikpKTsKZXh0ZXJuIF9fdHlwZW9mIChzZXRldWlkKSBfX0dJX3NldGV1aWQ7IGV4dGVybiBfX3R5 cGVvZiAoc2V0ZXVpZCkgc2V0ZXVpZCBfX2FzbV9fICgiIiAiX19HSV9zZXRldWlkIikgX19hdHRy aWJ1dGVfXyAoKHZpc2liaWxpdHkgKCJoaWRkZW4iKSkpOwpleHRlcm4gX190eXBlb2YgKHNldGVn aWQpIF9fR0lfc2V0ZWdpZDsgZXh0ZXJuIF9fdHlwZW9mIChzZXRlZ2lkKSBzZXRlZ2lkIF9fYXNt X18gKCIiICJfX0dJX3NldGVnaWQiKSBfX2F0dHJpYnV0ZV9fICgodmlzaWJpbGl0eSAoImhpZGRl biIpKSk7CmV4dGVybiBfX3R5cGVvZiAodGNnZXRwZ3JwKSBfX0dJX3RjZ2V0cGdycDsgZXh0ZXJu IF9fdHlwZW9mICh0Y2dldHBncnApIHRjZ2V0cGdycCBfX2FzbV9fICgiIiAiX19HSV90Y2dldHBn cnAiKSBfX2F0dHJpYnV0ZV9fICgodmlzaWJpbGl0eSAoImhpZGRlbiIpKSk7CgoKZXh0ZXJuIGlu dCBfX2FjY2VzcyAoX19jb25zdCBjaGFyICpfX25hbWUsIGludCBfX3R5cGUpOwpleHRlcm4gaW50 IF9fZXVpZGFjY2VzcyAoX19jb25zdCBjaGFyICpfX25hbWUsIGludCBfX3R5cGUpOwpleHRlcm4g X19vZmY2NF90IF9fbHNlZWs2NCAoaW50IF9fZmQsIF9fb2ZmNjRfdCBfX29mZnNldCwgaW50IF9f d2hlbmNlKTsKZXh0ZXJuIF9fb2ZmX3QgX19sc2VlayAoaW50IF9fZmQsIF9fb2ZmX3QgX19vZmZz ZXQsIGludCBfX3doZW5jZSk7CmV4dGVybiBfX29mZl90IF9fbGliY19sc2VlayAoaW50IF9fZmQs IF9fb2ZmX3QgX19vZmZzZXQsIGludCBfX3doZW5jZSk7CmV4dGVybiBfX29mZjY0X3QgX19saWJj X2xzZWVrNjQgKGludCBfX2ZkLCBfX29mZjY0X3QgX19vZmZzZXQsIGludCBfX3doZW5jZSk7CmV4 dGVybiBzc2l6ZV90IF9fcHJlYWQgKGludCBfX2ZkLCB2b2lkICpfX2J1Ziwgc2l6ZV90IF9fbmJ5 dGVzLAogICAgICAgICAgICAgICAgICAgICAgICBfX29mZl90IF9fb2Zmc2V0KTsKZXh0ZXJuIHNz aXplX3QgX19saWJjX3ByZWFkIChpbnQgX19mZCwgdm9pZCAqX19idWYsIHNpemVfdCBfX25ieXRl cywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX29mZl90IF9fb2Zmc2V0KTsKZXh0ZXJu IHNzaXplX3QgX19wcmVhZDY0IChpbnQgX19mZCwgdm9pZCAqX19idWYsIHNpemVfdCBfX25ieXRl cywKICAgICAgICAgICAgICAgICAgICAgICAgICBfX29mZjY0X3QgX19vZmZzZXQpOwpleHRlcm4g c3NpemVfdCBfX2xpYmNfcHJlYWQ2NCAoaW50IF9fZmQsIHZvaWQgKl9fYnVmLCBzaXplX3QgX19u Ynl0ZXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX29mZjY0X3QgX19vZmZzZXQp OwpleHRlcm4gc3NpemVfdCBfX3B3cml0ZSAoaW50IF9fZmQsIF9fY29uc3Qgdm9pZCAqX19idWYs IHNpemVfdCBfX24sCiAgICAgICAgICAgICAgICAgICAgICAgICBfX29mZl90IF9fb2Zmc2V0KTsK ZXh0ZXJuIHNzaXplX3QgX19saWJjX3B3cml0ZSAoaW50IF9fZmQsIF9fY29uc3Qgdm9pZCAqX19i dWYsIHNpemVfdCBfX24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fb2ZmX3QgX19v ZmZzZXQpOwpleHRlcm4gc3NpemVfdCBfX3B3cml0ZTY0IChpbnQgX19mZCwgX19jb25zdCB2b2lk ICpfX2J1Ziwgc2l6ZV90IF9fbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgX19vZmY2NF90 IF9fb2Zmc2V0KTsKZXh0ZXJuIF9fdHlwZW9mIChfX3B3cml0ZTY0KSBfX0dJX19fcHdyaXRlNjQ7 IGV4dGVybiBfX3R5cGVvZiAoX19wd3JpdGU2NCkgX19wd3JpdGU2NCBfX2FzbV9fICgiIiAiX19H SV9fX3B3cml0ZTY0IikgX19hdHRyaWJ1dGVfXyAoKHZpc2liaWxpdHkgKCJoaWRkZW4iKSkpOwpl eHRlcm4gc3NpemVfdCBfX2xpYmNfcHdyaXRlNjQgKGludCBfX2ZkLCBfX2NvbnN0IHZvaWQgKl9f YnVmLCBzaXplX3QgX19uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fb2ZmNjRf dCBfX29mZnNldCk7CmV4dGVybiBzc2l6ZV90IF9fbGliY19yZWFkIChpbnQgX19mZCwgdm9pZCAq X19idWYsIHNpemVfdCBfX24pOwpleHRlcm4gX190eXBlb2YgKF9fbGliY19yZWFkKSBfX0dJX19f bGliY19yZWFkOyBleHRlcm4gX190eXBlb2YgKF9fbGliY19yZWFkKSBfX2xpYmNfcmVhZCBfX2Fz bV9fICgiIiAiX19HSV9fX2xpYmNfcmVhZCIpIF9fYXR0cmlidXRlX18gKCh2aXNpYmlsaXR5ICgi aGlkZGVuIikpKTsKZXh0ZXJuIHNzaXplX3QgX19saWJjX3dyaXRlIChpbnQgX19mZCwgX19jb25z dCB2b2lkICpfX2J1Ziwgc2l6ZV90IF9fbik7CmV4dGVybiBfX3R5cGVvZiAoX19saWJjX3dyaXRl KSBfX0dJX19fbGliY193cml0ZTsgZXh0ZXJuIF9fdHlwZW9mIChfX2xpYmNfd3JpdGUpIF9fbGli Y193cml0ZSBfX2FzbV9fICgiIiAiX19HSV9fX2xpYmNfd3JpdGUiKSBfX2F0dHJpYnV0ZV9fICgo dmlzaWJpbGl0eSAoImhpZGRlbiIpKSk7CmV4dGVybiBpbnQgX19waXBlIChpbnQgX19waXBlZGVz WzJdKTsKZXh0ZXJuIF9fdHlwZW9mIChfX3BpcGUpIF9fR0lfX19waXBlOyBleHRlcm4gX190eXBl b2YgKF9fcGlwZSkgX19waXBlIF9fYXNtX18gKCIiICJfX0dJX19fcGlwZSIpIF9fYXR0cmlidXRl X18gKCh2aXNpYmlsaXR5ICgiaGlkZGVuIikpKTsKZXh0ZXJuIHVuc2lnbmVkIGludCBfX3NsZWVw ICh1bnNpZ25lZCBpbnQgX19zZWNvbmRzKTsKZXh0ZXJuIGludCBfX2Nob3duIChfX2NvbnN0IGNo YXIgKl9fZmlsZSwKICAgICAgICAgICAgICAgICAgICBfX3VpZF90IF9fb3duZXIsIF9fZ2lkX3Qg X19ncm91cCk7CmV4dGVybiBfX3R5cGVvZiAoX19jaG93bikgX19HSV9fX2Nob3duOyBleHRlcm4g X190eXBlb2YgKF9fY2hvd24pIF9fY2hvd24gX19hc21fXyAoIiIgIl9fR0lfX19jaG93biIpIF9f YXR0cmlidXRlX18gKCh2aXNpYmlsaXR5ICgiaGlkZGVuIikpKTsKZXh0ZXJuIGludCBfX2ZjaG93 biAoaW50IF9fZmQsCiAgICAgICAgICAgICAgICAgICAgIF9fdWlkX3QgX19vd25lciwgX19naWRf dCBfX2dyb3VwKTsKZXh0ZXJuIGludCBfX2xjaG93biAoX19jb25zdCBjaGFyICpfX2ZpbGUsIF9f dWlkX3QgX19vd25lciwKICAgICAgICAgICAgICAgICAgICAgX19naWRfdCBfX2dyb3VwKTsKZXh0 ZXJuIGludCBfX2NoZGlyIChfX2NvbnN0IGNoYXIgKl9fcGF0aCk7CmV4dGVybiBpbnQgX19mY2hk aXIgKGludCBfX2ZkKTsKZXh0ZXJuIGNoYXIgKl9fZ2V0Y3dkIChjaGFyICpfX2J1Ziwgc2l6ZV90 IF9fc2l6ZSk7CmV4dGVybiBpbnQgX19ybWRpciAoY29uc3QgY2hhciAqX19wYXRoKTsKCgoKCgoK CmNoYXIgKl9fY2Fub25pY2FsaXplX2RpcmVjdG9yeV9uYW1lX2ludGVybmFsIChfX2NvbnN0IGNo YXIgKl9fdGhpc2RpciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGNoYXIgKl9fYnVmLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgc2l6ZV90IF9fc2l6ZSkgX19hdHRyaWJ1dGVfXyAoKHZpc2liaWxpdHkgKCJoaWRkZW4i KSkpOwoKZXh0ZXJuIGludCBfX2R1cCAoaW50IF9fZmQpOwpleHRlcm4gaW50IF9fZHVwMiAoaW50 IF9fZmQsIGludCBfX2ZkMik7CmV4dGVybiBfX3R5cGVvZiAoX19kdXAyKSBfX0dJX19fZHVwMjsg ZXh0ZXJuIF9fdHlwZW9mIChfX2R1cDIpIF9fZHVwMiBfX2FzbV9fICgiIiAiX19HSV9fX2R1cDIi KSBfX2F0dHJpYnV0ZV9fICgodmlzaWJpbGl0eSAoImhpZGRlbiIpKSk7CmV4dGVybiBpbnQgX19l eGVjdmUgKF9fY29uc3QgY2hhciAqX19wYXRoLCBjaGFyICpfX2NvbnN0IF9fYXJndltdLAogICAg ICAgICAgICAgICAgICAgICBjaGFyICpfX2NvbnN0IF9fZW52cFtdKTsKZXh0ZXJuIGxvbmcgaW50 IF9fcGF0aGNvbmYgKF9fY29uc3QgY2hhciAqX19wYXRoLCBpbnQgX19uYW1lKTsKZXh0ZXJuIGxv bmcgaW50IF9fZnBhdGhjb25mIChpbnQgX19mZCwgaW50IF9fbmFtZSk7CmV4dGVybiBsb25nIGlu dCBfX3N5c2NvbmYgKGludCBfX25hbWUpOwpleHRlcm4gX190eXBlb2YgKF9fc3lzY29uZikgX19H SV9fX3N5c2NvbmY7IGV4dGVybiBfX3R5cGVvZiAoX19zeXNjb25mKSBfX3N5c2NvbmYgX19hc21f XyAoIiIgIl9fR0lfX19zeXNjb25mIikgX19hdHRyaWJ1dGVfXyAoKHZpc2liaWxpdHkgKCJoaWRk ZW4iKSkpOwpleHRlcm4gX19waWRfdCBfX2dldHBpZCAodm9pZCk7CmV4dGVybiBfX3R5cGVvZiAo X19nZXRwaWQpIF9fR0lfX19nZXRwaWQ7IGV4dGVybiBfX3R5cGVvZiAoX19nZXRwaWQpIF9fZ2V0 cGlkIF9fYXNtX18gKCIiICJfX0dJX19fZ2V0cGlkIikgX19hdHRyaWJ1dGVfXyAoKHZpc2liaWxp dHkgKCJoaWRkZW4iKSkpOwpleHRlcm4gX19waWRfdCBfX2dldHBwaWQgKHZvaWQpOwpleHRlcm4g X19waWRfdCBfX3NldHNpZCAodm9pZCk7CmV4dGVybiBfX3VpZF90IF9fZ2V0dWlkICh2b2lkKTsK ZXh0ZXJuIF9fdWlkX3QgX19nZXRldWlkICh2b2lkKTsKZXh0ZXJuIF9fZ2lkX3QgX19nZXRnaWQg KHZvaWQpOwpleHRlcm4gX19naWRfdCBfX2dldGVnaWQgKHZvaWQpOwpleHRlcm4gaW50IF9fZ2V0 Z3JvdXBzIChpbnQgX19zaXplLCBfX2dpZF90IF9fbGlzdFtdKTsKZXh0ZXJuIF9fdHlwZW9mIChf X2dldHBnaWQpIF9fR0lfX19nZXRwZ2lkOyBleHRlcm4gX190eXBlb2YgKF9fZ2V0cGdpZCkgX19n ZXRwZ2lkIF9fYXNtX18gKCIiICJfX0dJX19fZ2V0cGdpZCIpIF9fYXR0cmlidXRlX18gKCh2aXNp YmlsaXR5ICgiaGlkZGVuIikpKTsKZXh0ZXJuIGludCBfX2dyb3VwX21lbWJlciAoX19naWRfdCBf X2dpZCk7CmV4dGVybiBpbnQgX19zZXR1aWQgKF9fdWlkX3QgX191aWQpOwpleHRlcm4gaW50IF9f c2V0cmV1aWQgKF9fdWlkX3QgX19ydWlkLCBfX3VpZF90IF9fZXVpZCk7CmV4dGVybiBpbnQgX19z ZXRnaWQgKF9fZ2lkX3QgX19naWQpOwpleHRlcm4gaW50IF9fc2V0cGdpZCAoX19waWRfdCBfX3Bp ZCwgX19waWRfdCBfX3BnaWQpOwpleHRlcm4gX190eXBlb2YgKF9fc2V0cGdpZCkgX19HSV9fX3Nl dHBnaWQ7IGV4dGVybiBfX3R5cGVvZiAoX19zZXRwZ2lkKSBfX3NldHBnaWQgX19hc21fXyAoIiIg Il9fR0lfX19zZXRwZ2lkIikgX19hdHRyaWJ1dGVfXyAoKHZpc2liaWxpdHkgKCJoaWRkZW4iKSkp OwpleHRlcm4gaW50IF9fc2V0cmVnaWQgKF9fZ2lkX3QgX19yZ2lkLCBfX2dpZF90IF9fZWdpZCk7 CmV4dGVybiBpbnQgX19nZXRyZXN1aWQgKF9fdWlkX3QgKl9fZXVpZCwgX191aWRfdCAqX19ydWlk LCBfX3VpZF90ICpfX3N1aWQpOwpleHRlcm4gaW50IF9fZ2V0cmVzZ2lkIChfX2dpZF90ICpfX2Vn aWQsIF9fZ2lkX3QgKl9fcmdpZCwgX19naWRfdCAqX19zZ2lkKTsKZXh0ZXJuIGludCBfX3NldHJl c3VpZCAoX191aWRfdCBfX2V1aWQsIF9fdWlkX3QgX19ydWlkLCBfX3VpZF90IF9fc3VpZCk7CmV4 dGVybiBpbnQgX19zZXRyZXNnaWQgKF9fZ2lkX3QgX19lZ2lkLCBfX2dpZF90IF9fcmdpZCwgX19n aWRfdCBfX3NnaWQpOwpleHRlcm4gX190eXBlb2YgKF9fZ2V0cmVzdWlkKSBfX0dJX19fZ2V0cmVz dWlkOyBleHRlcm4gX190eXBlb2YgKF9fZ2V0cmVzdWlkKSBfX2dldHJlc3VpZCBfX2FzbV9fICgi IiAiX19HSV9fX2dldHJlc3VpZCIpIF9fYXR0cmlidXRlX18gKCh2aXNpYmlsaXR5ICgiaGlkZGVu IikpKTsKZXh0ZXJuIF9fdHlwZW9mIChfX2dldHJlc2dpZCkgX19HSV9fX2dldHJlc2dpZDsgZXh0 ZXJuIF9fdHlwZW9mIChfX2dldHJlc2dpZCkgX19nZXRyZXNnaWQgX19hc21fXyAoIiIgIl9fR0lf X19nZXRyZXNnaWQiKSBfX2F0dHJpYnV0ZV9fICgodmlzaWJpbGl0eSAoImhpZGRlbiIpKSk7CmV4 dGVybiBfX3R5cGVvZiAoX19zZXRyZXN1aWQpIF9fR0lfX19zZXRyZXN1aWQ7IGV4dGVybiBfX3R5 cGVvZiAoX19zZXRyZXN1aWQpIF9fc2V0cmVzdWlkIF9fYXNtX18gKCIiICJfX0dJX19fc2V0cmVz dWlkIikgX19hdHRyaWJ1dGVfXyAoKHZpc2liaWxpdHkgKCJoaWRkZW4iKSkpOwpleHRlcm4gX190 eXBlb2YgKF9fc2V0cmVzZ2lkKSBfX0dJX19fc2V0cmVzZ2lkOyBleHRlcm4gX190eXBlb2YgKF9f c2V0cmVzZ2lkKSBfX3NldHJlc2dpZCBfX2FzbV9fICgiIiAiX19HSV9fX3NldHJlc2dpZCIpIF9f YXR0cmlidXRlX18gKCh2aXNpYmlsaXR5ICgiaGlkZGVuIikpKTsKZXh0ZXJuIF9fcGlkX3QgX192 Zm9yayAodm9pZCk7CmV4dGVybiBpbnQgX190dHluYW1lX3IgKGludCBfX2ZkLCBjaGFyICpfX2J1 Ziwgc2l6ZV90IF9fYnVmbGVuKTsKZXh0ZXJuIGludCBfX2lzYXR0eSAoaW50IF9fZmQpOwpleHRl cm4gaW50IF9fbGluayAoX19jb25zdCBjaGFyICpfX2Zyb20sIF9fY29uc3QgY2hhciAqX190byk7 CmV4dGVybiBpbnQgX19zeW1saW5rIChfX2NvbnN0IGNoYXIgKl9fZnJvbSwgX19jb25zdCBjaGFy ICpfX3RvKTsKZXh0ZXJuIGludCBfX3JlYWRsaW5rIChfX2NvbnN0IGNoYXIgKl9fcGF0aCwgY2hh ciAqX19idWYsIHNpemVfdCBfX2xlbik7CmV4dGVybiBpbnQgX191bmxpbmsgKF9fY29uc3QgY2hh ciAqX19uYW1lKTsKZXh0ZXJuIGludCBfX2dldGhvc3RuYW1lIChjaGFyICpfX25hbWUsIHNpemVf dCBfX2xlbik7CmV4dGVybiBpbnQgX19wcm9maWwgKHVuc2lnbmVkIHNob3J0IGludCAqX19zYW1w bGVfYnVmZmVyLCBzaXplX3QgX19zaXplLAogICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19v ZmZzZXQsIHVuc2lnbmVkIGludCBfX3NjYWxlKTsKZXh0ZXJuIGludCBfX2dldGR0YWJsZXNpemUg KHZvaWQpOwpleHRlcm4gaW50IF9fYnJrICh2b2lkICpfX2FkZHIpOwpleHRlcm4gaW50IF9fY2xv c2UgKGludCBfX2ZkKTsKZXh0ZXJuIF9fdHlwZW9mIChfX2Nsb3NlKSBfX0dJX19fY2xvc2U7IGV4 dGVybiBfX3R5cGVvZiAoX19jbG9zZSkgX19jbG9zZSBfX2FzbV9fICgiIiAiX19HSV9fX2Nsb3Nl IikgX19hdHRyaWJ1dGVfXyAoKHZpc2liaWxpdHkgKCJoaWRkZW4iKSkpOwpleHRlcm4gc3NpemVf dCBfX3JlYWQgKGludCBfX2ZkLCB2b2lkICpfX2J1Ziwgc2l6ZV90IF9fbmJ5dGVzKTsKZXh0ZXJu IF9fdHlwZW9mIChfX3JlYWQpIF9fR0lfX19yZWFkOyBleHRlcm4gX190eXBlb2YgKF9fcmVhZCkg X19yZWFkIF9fYXNtX18gKCIiICJfX0dJX19fcmVhZCIpIF9fYXR0cmlidXRlX18gKCh2aXNpYmls aXR5ICgiaGlkZGVuIikpKTsKZXh0ZXJuIHNzaXplX3QgX193cml0ZSAoaW50IF9fZmQsIF9fY29u c3Qgdm9pZCAqX19idWYsIHNpemVfdCBfX24pOwpleHRlcm4gX190eXBlb2YgKF9fd3JpdGUpIF9f R0lfX193cml0ZTsgZXh0ZXJuIF9fdHlwZW9mIChfX3dyaXRlKSBfX3dyaXRlIF9fYXNtX18gKCIi ICJfX0dJX19fd3JpdGUiKSBfX2F0dHJpYnV0ZV9fICgodmlzaWJpbGl0eSAoImhpZGRlbiIpKSk7 CmV4dGVybiBfX3BpZF90IF9fZm9yayAodm9pZCk7CmV4dGVybiBpbnQgX19nZXRwYWdlc2l6ZSAo dm9pZCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwpleHRlcm4gX190eXBlb2YgKF9fZ2V0 cGFnZXNpemUpIF9fR0lfX19nZXRwYWdlc2l6ZTsgZXh0ZXJuIF9fdHlwZW9mIChfX2dldHBhZ2Vz aXplKSBfX2dldHBhZ2VzaXplIF9fYXNtX18gKCIiICJfX0dJX19fZ2V0cGFnZXNpemUiKSBfX2F0 dHJpYnV0ZV9fICgodmlzaWJpbGl0eSAoImhpZGRlbiIpKSk7CmV4dGVybiBpbnQgX19mdHJ1bmNh dGUgKGludCBfX2ZkLCBfX29mZl90IF9fbGVuZ3RoKTsKZXh0ZXJuIGludCBfX2Z0cnVuY2F0ZTY0 IChpbnQgX19mZCwgX19vZmY2NF90IF9fbGVuZ3RoKTsKZXh0ZXJuIHZvaWQgKl9fc2JyayAoaW50 cHRyX3QgX19kZWx0YSk7CmV4dGVybiBfX3R5cGVvZiAoX19zYnJrKSBfX0dJX19fc2JyazsgZXh0 ZXJuIF9fdHlwZW9mIChfX3NicmspIF9fc2JyayBfX2FzbV9fICgiIiAiX19HSV9fX3NicmsiKSBf X2F0dHJpYnV0ZV9fICgodmlzaWJpbGl0eSAoImhpZGRlbiIpKSk7CgoKCgoKCgpleHRlcm4gaW50 IF9fbGliY19lbmFibGVfc2VjdXJlOwoKCgoKCgoKZXh0ZXJuIHZvaWQgX19saWJjX2NoZWNrX3N0 YW5kYXJkX2ZkcyAodm9pZCk7CgoKCmV4dGVybiB2b2lkIF9fZXhpdF90aHJlYWQgKGludCB2YWwp IF9fYXR0cmlidXRlX18gKChub3JldHVybikpOwoKCmV4dGVybiBfX3BpZF90IF9fbGliY19mb3Jr ICh2b2lkKTsKCgoKZXh0ZXJuIGludCBfX2xpYmNfcGF1c2UgKHZvaWQpOwojIDc2MCAiLi4vbGli aW8vbGliaW9QLmgiIDIKIyAxICIuLi9pbmNsdWRlL2ZjbnRsLmgiIDEKCiMgMSAiLi4vaW8vZmNu dGwuaCIgMQojIDI5ICIuLi9pby9mY250bC5oIgoKCgoKIyAxICIuLi9zeXNkZXBzL3VuaXgvc3lz di9saW51eC94ODZfNjQvYml0cy9mY250bC5oIiAxCiMgMjUgIi4uL3N5c2RlcHMvdW5peC9zeXN2 L2xpbnV4L3g4Nl82NC9iaXRzL2ZjbnRsLmgiCiMgMSAiLi4vaW5jbHVkZS9zeXMvdHlwZXMuaCIg MQojIDI2ICIuLi9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC94ODZfNjQvYml0cy9mY250bC5oIiAy CiMgMSAiLi4vc3lzZGVwcy94ODZfNjQvYml0cy93b3Jkc2l6ZS5oIiAxCiMgMjcgIi4uL3N5c2Rl cHMvdW5peC9zeXN2L2xpbnV4L3g4Nl82NC9iaXRzL2ZjbnRsLmgiIDIKIyAxNDAgIi4uL3N5c2Rl cHMvdW5peC9zeXN2L2xpbnV4L3g4Nl82NC9iaXRzL2ZjbnRsLmgiCnN0cnVjdCBmbG9jawogIHsK ICAgIHNob3J0IGludCBsX3R5cGU7CiAgICBzaG9ydCBpbnQgbF93aGVuY2U7CgogICAgX19vZmZf dCBsX3N0YXJ0OwogICAgX19vZmZfdCBsX2xlbjsKCgoKCiAgICBfX3BpZF90IGxfcGlkOwogIH07 CgoKc3RydWN0IGZsb2NrNjQKICB7CiAgICBzaG9ydCBpbnQgbF90eXBlOwogICAgc2hvcnQgaW50 IGxfd2hlbmNlOwogICAgX19vZmY2NF90IGxfc3RhcnQ7CiAgICBfX29mZjY0X3QgbF9sZW47CiAg ICBfX3BpZF90IGxfcGlkOwogIH07CiMgMzQgIi4uL2lvL2ZjbnRsLmgiIDIKCgoKIyAxICIuLi9p bmNsdWRlL3N5cy9zdGF0LmgiIDEKCiMgMSAiLi4vaW8vc3lzL3N0YXQuaCIgMQojIDk3ICIuLi9p by9zeXMvc3RhdC5oIgoKCiMgMSAiLi4vc3lzZGVwcy91bml4L3N5c3YvbGludXgveDg2XzY0L2Jp dHMvc3RhdC5oIiAxCiMgNDEgIi4uL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L3g4Nl82NC9iaXRz L3N0YXQuaCIKc3RydWN0IHN0YXQKICB7CiAgICBfX2Rldl90IHN0X2RldjsKCgoKCiAgICBfX2lu b190IHN0X2lubzsKCgoKCgoKCiAgICBfX25saW5rX3Qgc3Rfbmxpbms7CiAgICBfX21vZGVfdCBz dF9tb2RlOwoKICAgIF9fdWlkX3Qgc3RfdWlkOwogICAgX19naWRfdCBzdF9naWQ7CgogICAgaW50 IHBhZDA7CgogICAgX19kZXZfdCBzdF9yZGV2OwoKCgoKICAgIF9fb2ZmX3Qgc3Rfc2l6ZTsKCgoK ICAgIF9fYmxrc2l6ZV90IHN0X2Jsa3NpemU7CgogICAgX19ibGtjbnRfdCBzdF9ibG9ja3M7CgoK CiAgICBfX3RpbWVfdCBzdF9hdGltZTsKICAgIGxvbmcgaW50IF9fcmVzZXJ2ZWQwOwogICAgX190 aW1lX3Qgc3RfbXRpbWU7CiAgICBsb25nIGludCBfX3Jlc2VydmVkMTsKICAgIF9fdGltZV90IHN0 X2N0aW1lOwogICAgbG9uZyBpbnQgX19yZXNlcnZlZDI7CgogICAgbG9uZyBpbnQgX191bnVzZWRb M107CiMgOTUgIi4uL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L3g4Nl82NC9iaXRzL3N0YXQuaCIK ICB9OwoKCgpzdHJ1Y3Qgc3RhdDY0CiAgewogICAgX19kZXZfdCBzdF9kZXY7CgogICAgX19pbm82 NF90IHN0X2lubzsKICAgIF9fbmxpbmtfdCBzdF9ubGluazsKICAgIF9fbW9kZV90IHN0X21vZGU7 CgoKCgoKCiAgICBfX3VpZF90IHN0X3VpZDsKICAgIF9fZ2lkX3Qgc3RfZ2lkOwoKICAgIGludCBw YWQwOwogICAgX19kZXZfdCBzdF9yZGV2OwogICAgX19vZmZfdCBzdF9zaXplOwoKCgoKCiAgICBf X2Jsa3NpemVfdCBzdF9ibGtzaXplOwogICAgX19ibGtjbnQ2NF90IHN0X2Jsb2NrczsKICAgIF9f dGltZV90IHN0X2F0aW1lOwogICAgbG9uZyBpbnQgX19yZXNlcnZlZDA7CiAgICBfX3RpbWVfdCBz dF9tdGltZTsKICAgIGxvbmcgaW50IF9fcmVzZXJ2ZWQxOwogICAgX190aW1lX3Qgc3RfY3RpbWU7 CiAgICBsb25nIGludCBfX3Jlc2VydmVkMjsKCiAgICBsb25nIGludCBfX3VudXNlZFszXTsKCgoK ICB9OwojIDEwMCAiLi4vaW8vc3lzL3N0YXQuaCIgMgojIDIwMSAiLi4vaW8vc3lzL3N0YXQuaCIK ZXh0ZXJuIGludCBzdGF0IChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19maWxlLAogICAgICAg ICAgICAgICAgIHN0cnVjdCBzdGF0ICpfX3Jlc3RyaWN0IF9fYnVmKSA7CgoKCmV4dGVybiBpbnQg ZnN0YXQgKGludCBfX2ZkLCBzdHJ1Y3Qgc3RhdCAqX19idWYpIDsKIyAyMjAgIi4uL2lvL3N5cy9z dGF0LmgiCmV4dGVybiBpbnQgc3RhdDY0IChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19maWxl LAogICAgICAgICAgICAgICAgICAgc3RydWN0IHN0YXQ2NCAqX19yZXN0cmljdCBfX2J1ZikgOwpl eHRlcm4gaW50IGZzdGF0NjQgKGludCBfX2ZkLCBzdHJ1Y3Qgc3RhdDY0ICpfX2J1ZikgOwoKCgoK CgpleHRlcm4gaW50IGxzdGF0IChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19maWxlLAogICAg ICAgICAgICAgICAgICBzdHJ1Y3Qgc3RhdCAqX19yZXN0cmljdCBfX2J1ZikgOwojIDI0MiAiLi4v aW8vc3lzL3N0YXQuaCIKZXh0ZXJuIGludCBsc3RhdDY0IChfX2NvbnN0IGNoYXIgKl9fcmVzdHJp Y3QgX19maWxlLAogICAgICAgICAgICAgICAgICAgIHN0cnVjdCBzdGF0NjQgKl9fcmVzdHJpY3Qg X19idWYpIDsKCgoKCgpleHRlcm4gaW50IGNobW9kIChfX2NvbnN0IGNoYXIgKl9fZmlsZSwgX19t b2RlX3QgX19tb2RlKSA7CgoKCgoKZXh0ZXJuIGludCBsY2htb2QgKF9fY29uc3QgY2hhciAqX19m aWxlLCBfX21vZGVfdCBfX21vZGUpIDsKCgoKCmV4dGVybiBpbnQgZmNobW9kIChpbnQgX19mZCwg X19tb2RlX3QgX19tb2RlKSA7CgoKCgoKZXh0ZXJuIF9fbW9kZV90IHVtYXNrIChfX21vZGVfdCBf X21hc2spIDsKCgoKCmV4dGVybiBfX21vZGVfdCBnZXR1bWFzayAodm9pZCkgOwoKCgpleHRlcm4g aW50IG1rZGlyIChfX2NvbnN0IGNoYXIgKl9fcGF0aCwgX19tb2RlX3QgX19tb2RlKSA7CgoKCgoK ZXh0ZXJuIGludCBta25vZCAoX19jb25zdCBjaGFyICpfX3BhdGgsIF9fbW9kZV90IF9fbW9kZSwg X19kZXZfdCBfX2RldikKICAgICA7CgoKCgpleHRlcm4gaW50IG1rZmlmbyAoX19jb25zdCBjaGFy ICpfX3BhdGgsIF9fbW9kZV90IF9fbW9kZSkgOwojIDMxMyAiLi4vaW8vc3lzL3N0YXQuaCIKZXh0 ZXJuIGludCBfX2Z4c3RhdCAoaW50IF9fdmVyLCBpbnQgX19maWxkZXMsIHN0cnVjdCBzdGF0ICpf X3N0YXRfYnVmKSA7CmV4dGVybiBpbnQgX194c3RhdCAoaW50IF9fdmVyLCBfX2NvbnN0IGNoYXIg Kl9fZmlsZW5hbWUsCiAgICAgICAgICAgICAgICAgICAgc3RydWN0IHN0YXQgKl9fc3RhdF9idWYp IDsKZXh0ZXJuIGludCBfX2x4c3RhdCAoaW50IF9fdmVyLCBfX2NvbnN0IGNoYXIgKl9fZmlsZW5h bWUsCiAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBzdGF0ICpfX3N0YXRfYnVmKSA7CiMgMzM3 ICIuLi9pby9zeXMvc3RhdC5oIgpleHRlcm4gaW50IF9fZnhzdGF0NjQgKGludCBfX3ZlciwgaW50 IF9fZmlsZGVzLCBzdHJ1Y3Qgc3RhdDY0ICpfX3N0YXRfYnVmKQogICAgIDsKZXh0ZXJuIGludCBf X3hzdGF0NjQgKGludCBfX3ZlciwgX19jb25zdCBjaGFyICpfX2ZpbGVuYW1lLAogICAgICAgICAg ICAgICAgICAgICAgc3RydWN0IHN0YXQ2NCAqX19zdGF0X2J1ZikgOwpleHRlcm4gaW50IF9fbHhz dGF0NjQgKGludCBfX3ZlciwgX19jb25zdCBjaGFyICpfX2ZpbGVuYW1lLAogICAgICAgICAgICAg ICAgICAgICAgIHN0cnVjdCBzdGF0NjQgKl9fc3RhdF9idWYpIDsKCmV4dGVybiBpbnQgX194bWtu b2QgKGludCBfX3ZlciwgX19jb25zdCBjaGFyICpfX3BhdGgsIF9fbW9kZV90IF9fbW9kZSwKICAg ICAgICAgICAgICAgICAgICAgX19kZXZfdCAqX19kZXYpIDsKCgoKCmV4dGVybiBfX2lubGluZV9f IGludCBzdGF0IChfX2NvbnN0IGNoYXIgKl9fcGF0aCwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHN0cnVjdCBzdGF0ICpfX3N0YXRidWYpCnsKICByZXR1cm4gX194c3RhdCAoMSwgX19wYXRo LCBfX3N0YXRidWYpOwp9CgoKZXh0ZXJuIF9faW5saW5lX18gaW50IGxzdGF0IChfX2NvbnN0IGNo YXIgKl9fcGF0aCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc3RhdCAqX19z dGF0YnVmKQp7CiAgcmV0dXJuIF9fbHhzdGF0ICgxLCBfX3BhdGgsIF9fc3RhdGJ1Zik7Cn0KCgpl eHRlcm4gX19pbmxpbmVfXyBpbnQgZnN0YXQgKGludCBfX2ZkLCBzdHJ1Y3Qgc3RhdCAqX19zdGF0 YnVmKQp7CiAgcmV0dXJuIF9fZnhzdGF0ICgxLCBfX2ZkLCBfX3N0YXRidWYpOwp9CgoKZXh0ZXJu IF9faW5saW5lX18gaW50IG1rbm9kIChfX2NvbnN0IGNoYXIgKl9fcGF0aCwgX19tb2RlX3QgX19t b2RlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZGV2X3QgX19kZXYpCnsKICByZXR1 cm4gX194bWtub2QgKDAsIF9fcGF0aCwgX19tb2RlLCAmX19kZXYpOwp9CgoKCgoKZXh0ZXJuIF9f aW5saW5lX18gaW50IHN0YXQ2NCAoX19jb25zdCBjaGFyICpfX3BhdGgsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHN0cnVjdCBzdGF0NjQgKl9fc3RhdGJ1ZikKewogIHJldHVybiBfX3hz dGF0NjQgKDEsIF9fcGF0aCwgX19zdGF0YnVmKTsKfQoKCmV4dGVybiBfX2lubGluZV9fIGludCBs c3RhdDY0IChfX2NvbnN0IGNoYXIgKl9fcGF0aCwKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHN0cnVjdCBzdGF0NjQgKl9fc3RhdGJ1ZikKewogIHJldHVybiBfX2x4c3RhdDY0ICgxLCBf X3BhdGgsIF9fc3RhdGJ1Zik7Cn0KCgpleHRlcm4gX19pbmxpbmVfXyBpbnQgZnN0YXQ2NCAoaW50 IF9fZmQsIHN0cnVjdCBzdGF0NjQgKl9fc3RhdGJ1ZikKewogIHJldHVybiBfX2Z4c3RhdDY0ICgx LCBfX2ZkLCBfX3N0YXRidWYpOwp9CgoKCgoKIyAzICIuLi9pbmNsdWRlL3N5cy9zdGF0LmgiIDIK CgpleHRlcm4gaW50IF9fc3RhdCAoX19jb25zdCBjaGFyICpfX2ZpbGUsIHN0cnVjdCBzdGF0ICpf X2J1Zik7CmV4dGVybiBpbnQgX19mc3RhdCAoaW50IF9fZmQsIHN0cnVjdCBzdGF0ICpfX2J1Zik7 CmV4dGVybiBpbnQgX19sc3RhdCAoX19jb25zdCBjaGFyICpfX2ZpbGUsIHN0cnVjdCBzdGF0ICpf X2J1Zik7CmV4dGVybiBpbnQgX19jaG1vZCAoX19jb25zdCBjaGFyICpfX2ZpbGUsIF9fbW9kZV90 IF9fbW9kZSk7CmV4dGVybiBpbnQgX19mY2htb2QgKGludCBfX2ZkLCBfX21vZGVfdCBfX21vZGUp OwpleHRlcm4gX19tb2RlX3QgX191bWFzayAoX19tb2RlX3QgX19tYXNrKTsKZXh0ZXJuIGludCBf X21rZGlyIChfX2NvbnN0IGNoYXIgKl9fcGF0aCwgX19tb2RlX3QgX19tb2RlKTsKZXh0ZXJuIGlu dCBfX21rbm9kIChfX2NvbnN0IGNoYXIgKl9fcGF0aCwKICAgICAgICAgICAgICAgICAgICBfX21v ZGVfdCBfX21vZGUsIF9fZGV2X3QgX19kZXYpOwoKZXh0ZXJuIF9fdHlwZW9mIChfX2Z4c3RhdCkg X19HSV9fX2Z4c3RhdDsgZXh0ZXJuIF9fdHlwZW9mIChfX2Z4c3RhdCkgX19meHN0YXQgX19hc21f XyAoIiIgIl9fR0lfX19meHN0YXQiKSBfX2F0dHJpYnV0ZV9fICgodmlzaWJpbGl0eSAoImhpZGRl biIpKSk7CmV4dGVybiBfX3R5cGVvZiAoX19meHN0YXQ2NCkgX19HSV9fX2Z4c3RhdDY0OyBleHRl cm4gX190eXBlb2YgKF9fZnhzdGF0NjQpIF9fZnhzdGF0NjQgX19hc21fXyAoIiIgIl9fR0lfX19m eHN0YXQ2NCIpIF9fYXR0cmlidXRlX18gKCh2aXNpYmlsaXR5ICgiaGlkZGVuIikpKTsKZXh0ZXJu IF9fdHlwZW9mIChfX2x4c3RhdCkgX19HSV9fX2x4c3RhdDsgZXh0ZXJuIF9fdHlwZW9mIChfX2x4 c3RhdCkgX19seHN0YXQgX19hc21fXyAoIiIgIl9fR0lfX19seHN0YXQiKSBfX2F0dHJpYnV0ZV9f ICgodmlzaWJpbGl0eSAoImhpZGRlbiIpKSk7CmV4dGVybiBfX3R5cGVvZiAoX19seHN0YXQ2NCkg X19HSV9fX2x4c3RhdDY0OyBleHRlcm4gX190eXBlb2YgKF9fbHhzdGF0NjQpIF9fbHhzdGF0NjQg X19hc21fXyAoIiIgIl9fR0lfX19seHN0YXQ2NCIpIF9fYXR0cmlidXRlX18gKCh2aXNpYmlsaXR5 ICgiaGlkZGVuIikpKTsKZXh0ZXJuIF9fdHlwZW9mIChfX3hzdGF0KSBfX0dJX19feHN0YXQ7IGV4 dGVybiBfX3R5cGVvZiAoX194c3RhdCkgX194c3RhdCBfX2FzbV9fICgiIiAiX19HSV9fX3hzdGF0 IikgX19hdHRyaWJ1dGVfXyAoKHZpc2liaWxpdHkgKCJoaWRkZW4iKSkpOwpleHRlcm4gX190eXBl b2YgKF9feHN0YXQ2NCkgX19HSV9fX3hzdGF0NjQ7IGV4dGVybiBfX3R5cGVvZiAoX194c3RhdDY0 KSBfX3hzdGF0NjQgX19hc21fXyAoIiIgIl9fR0lfX194c3RhdDY0IikgX19hdHRyaWJ1dGVfXyAo KHZpc2liaWxpdHkgKCJoaWRkZW4iKSkpOwoKZXh0ZXJuIF9faW5saW5lX18gaW50IF9fc3RhdCAo X19jb25zdCBjaGFyICpfX3BhdGgsIHN0cnVjdCBzdGF0ICpfX3N0YXRidWYpCnsKICByZXR1cm4g X194c3RhdCAoMSwgX19wYXRoLCBfX3N0YXRidWYpOwp9CmV4dGVybiBfX3R5cGVvZiAoX194bWtu b2QpIF9fR0lfX194bWtub2Q7IGV4dGVybiBfX3R5cGVvZiAoX194bWtub2QpIF9feG1rbm9kIF9f YXNtX18gKCIiICJfX0dJX19feG1rbm9kIikgX19hdHRyaWJ1dGVfXyAoKHZpc2liaWxpdHkgKCJo aWRkZW4iKSkpOwpleHRlcm4gX19pbmxpbmVfXyBpbnQgX19ta25vZCAoX19jb25zdCBjaGFyICpf X3BhdGgsIF9fbW9kZV90IF9fbW9kZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9f ZGV2X3QgX19kZXYpCnsKICByZXR1cm4gX194bWtub2QgKDAsIF9fcGF0aCwgX19tb2RlLCAmX19k ZXYpOwp9CiMgMzggIi4uL2lvL2ZjbnRsLmgiIDIKIyA2MCAiLi4vaW8vZmNudGwuaCIKZXh0ZXJu IGludCBmY250bCAoaW50IF9fZmQsIGludCBfX2NtZCwgLi4uKSA7CgoKCgoKZXh0ZXJuIGludCBv cGVuIChfX2NvbnN0IGNoYXIgKl9fZmlsZSwgaW50IF9fb2ZsYWcsIC4uLikgOwojIDc2ICIuLi9p by9mY250bC5oIgpleHRlcm4gaW50IG9wZW42NCAoX19jb25zdCBjaGFyICpfX2ZpbGUsIGludCBf X29mbGFnLCAuLi4pIDsKCgoKCgoKZXh0ZXJuIGludCBjcmVhdCAoX19jb25zdCBjaGFyICpfX2Zp bGUsIF9fbW9kZV90IF9fbW9kZSkgOwojIDkzICIuLi9pby9mY250bC5oIgpleHRlcm4gaW50IGNy ZWF0NjQgKF9fY29uc3QgY2hhciAqX19maWxlLCBfX21vZGVfdCBfX21vZGUpIDsKIyAxMzAgIi4u L2lvL2ZjbnRsLmgiCmV4dGVybiBpbnQgcG9zaXhfZmFkdmlzZSAoaW50IF9fZmQsIF9fb2ZmX3Qg X19vZmZzZXQsIHNpemVfdCBfX2xlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19h ZHZpc2UpIDsKIyAxNDIgIi4uL2lvL2ZjbnRsLmgiCmV4dGVybiBpbnQgcG9zaXhfZmFkdmlzZTY0 IChpbnQgX19mZCwgX19vZmY2NF90IF9fb2Zmc2V0LCBzaXplX3QgX19sZW4sCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICBpbnQgX19hZHZpc2UpIDsKCgoKCgpleHRlcm4gaW50IHBvc2l4X2Zh bGxvY2F0ZSAoaW50IF9fZmQsIF9fb2ZmX3QgX19vZmZzZXQsIHNpemVfdCBfX2xlbikgOwojIDE2 MCAiLi4vaW8vZmNudGwuaCIKZXh0ZXJuIGludCBwb3NpeF9mYWxsb2NhdGU2NCAoaW50IF9fZmQs IF9fb2ZmNjRfdCBfX29mZnNldCwgc2l6ZV90IF9fbGVuKQogICAgIDsKCgoKCiMgMyAiLi4vaW5j bHVkZS9mY250bC5oIiAyCgoKZXh0ZXJuIGludCBfX29wZW42NCAoX19jb25zdCBjaGFyICpfX2Zp bGUsIGludCBfX29mbGFnLCAuLi4pOwpleHRlcm4gX190eXBlb2YgKF9fb3BlbjY0KSBfX0dJX19f b3BlbjY0OyBleHRlcm4gX190eXBlb2YgKF9fb3BlbjY0KSBfX29wZW42NCBfX2FzbV9fICgiIiAi X19HSV9fX29wZW42NCIpIF9fYXR0cmlidXRlX18gKCh2aXNpYmlsaXR5ICgiaGlkZGVuIikpKTsK ZXh0ZXJuIGludCBfX2xpYmNfb3BlbjY0IChjb25zdCBjaGFyICpmaWxlLCBpbnQgb2ZsYWcsIC4u Lik7CmV4dGVybiBpbnQgX19saWJjX29wZW4gKGNvbnN0IGNoYXIgKmZpbGUsIGludCBvZmxhZywg Li4uKTsKZXh0ZXJuIF9fdHlwZW9mIChfX2xpYmNfb3BlbikgX19HSV9fX2xpYmNfb3BlbjsgZXh0 ZXJuIF9fdHlwZW9mIChfX2xpYmNfb3BlbikgX19saWJjX29wZW4gX19hc21fXyAoIiIgIl9fR0lf X19saWJjX29wZW4iKSBfX2F0dHJpYnV0ZV9fICgodmlzaWJpbGl0eSAoImhpZGRlbiIpKSk7CmV4 dGVybiBpbnQgX19saWJjX2ZjbnRsIChpbnQgZmQsIGludCBjbWQsIC4uLik7CmV4dGVybiBfX3R5 cGVvZiAoX19saWJjX2ZjbnRsKSBfX0dJX19fbGliY19mY250bDsgZXh0ZXJuIF9fdHlwZW9mIChf X2xpYmNfZmNudGwpIF9fbGliY19mY250bCBfX2FzbV9fICgiIiAiX19HSV9fX2xpYmNfZmNudGwi KSBfX2F0dHJpYnV0ZV9fICgodmlzaWJpbGl0eSAoImhpZGRlbiIpKSk7CmV4dGVybiBpbnQgX19v cGVuIChfX2NvbnN0IGNoYXIgKl9fZmlsZSwgaW50IF9fb2ZsYWcsIC4uLik7CmV4dGVybiBfX3R5 cGVvZiAoX19vcGVuKSBfX0dJX19fb3BlbjsgZXh0ZXJuIF9fdHlwZW9mIChfX29wZW4pIF9fb3Bl biBfX2FzbV9fICgiIiAiX19HSV9fX29wZW4iKSBfX2F0dHJpYnV0ZV9fICgodmlzaWJpbGl0eSAo ImhpZGRlbiIpKSk7CmV4dGVybiBpbnQgX19mY250bCAoaW50IF9fZmQsIGludCBfX2NtZCwgLi4u KTsKZXh0ZXJuIF9fdHlwZW9mIChfX2ZjbnRsKSBfX0dJX19fZmNudGw7IGV4dGVybiBfX3R5cGVv ZiAoX19mY250bCkgX19mY250bCBfX2FzbV9fICgiIiAiX19HSV9fX2ZjbnRsIikgX19hdHRyaWJ1 dGVfXyAoKHZpc2liaWxpdHkgKCJoaWRkZW4iKSkpOwojIDc2MSAiLi4vbGliaW8vbGliaW9QLmgi IDIKIyAxICIuLi9pbmNsdWRlL3N5cy9tbWFuLmgiIDEKCiMgMSAiLi4vbWlzYy9zeXMvbW1hbi5o IiAxCiMgMjYgIi4uL21pc2Mvc3lzL21tYW4uaCIKIyAxICIvdXNyL2xpYjY0L2djYy1saWIveDg2 XzY0LXN1c2UtbGludXgvMy4zL2luY2x1ZGUvc3RkZGVmLmgiIDEgMyA0CiMgMjcgIi4uL21pc2Mv c3lzL21tYW4uaCIgMgojIDQyICIuLi9taXNjL3N5cy9tbWFuLmgiCiMgMSAiLi4vc3lzZGVwcy91 bml4L3N5c3YvbGludXgveDg2XzY0L2JpdHMvbW1hbi5oIiAxCiMgNDMgIi4uL21pc2Mvc3lzL21t YW4uaCIgMgoKCgoKCiMgNTggIi4uL21pc2Mvc3lzL21tYW4uaCIKZXh0ZXJuIHZvaWQgKm1tYXAg KHZvaWQgKl9fYWRkciwgc2l6ZV90IF9fbGVuLCBpbnQgX19wcm90LAogICAgICAgICAgICAgICAg ICAgaW50IF9fZmxhZ3MsIGludCBfX2ZkLCBfX29mZl90IF9fb2Zmc2V0KSA7CiMgNzEgIi4uL21p c2Mvc3lzL21tYW4uaCIKZXh0ZXJuIHZvaWQgKm1tYXA2NCAodm9pZCAqX19hZGRyLCBzaXplX3Qg X19sZW4sIGludCBfX3Byb3QsCiAgICAgICAgICAgICAgICAgICAgIGludCBfX2ZsYWdzLCBpbnQg X19mZCwgX19vZmY2NF90IF9fb2Zmc2V0KSA7CgoKCgpleHRlcm4gaW50IG11bm1hcCAodm9pZCAq X19hZGRyLCBzaXplX3QgX19sZW4pIDsKCgoKCmV4dGVybiBpbnQgbXByb3RlY3QgKHZvaWQgKl9f YWRkciwgc2l6ZV90IF9fbGVuLCBpbnQgX19wcm90KSA7CgoKCgpleHRlcm4gaW50IG1zeW5jICh2 b2lkICpfX2FkZHIsIHNpemVfdCBfX2xlbiwgaW50IF9fZmxhZ3MpIDsKCgoKCmV4dGVybiBpbnQg bWFkdmlzZSAodm9pZCAqX19hZGRyLCBzaXplX3QgX19sZW4sIGludCBfX2FkdmljZSkgOwoKCgpl eHRlcm4gaW50IHBvc2l4X21hZHZpc2UgKHZvaWQgKl9fYWRkciwgc2l6ZV90IF9fbGVuLCBpbnQg X19hZHZpY2UpIDsKCgoKCmV4dGVybiBpbnQgbWxvY2sgKF9fY29uc3Qgdm9pZCAqX19hZGRyLCBz aXplX3QgX19sZW4pIDsKCgpleHRlcm4gaW50IG11bmxvY2sgKF9fY29uc3Qgdm9pZCAqX19hZGRy LCBzaXplX3QgX19sZW4pIDsKCgoKCmV4dGVybiBpbnQgbWxvY2thbGwgKGludCBfX2ZsYWdzKSA7 CgoKCmV4dGVybiBpbnQgbXVubG9ja2FsbCAodm9pZCkgOwoKCgoKCmV4dGVybiB2b2lkICptcmVt YXAgKHZvaWQgKl9fYWRkciwgc2l6ZV90IF9fb2xkX2xlbiwgc2l6ZV90IF9fbmV3X2xlbiwKICAg ICAgICAgICAgICAgICAgICAgaW50IF9fbWF5X21vdmUpIDsKCgoKCgoKZXh0ZXJuIGludCBtaW5j b3JlICh2b2lkICpfX3N0YXJ0LCBzaXplX3QgX19sZW4sIHVuc2lnbmVkIGNoYXIgKl9fdmVjKTsK CgoKCmV4dGVybiBpbnQgc2htX29wZW4gKF9fY29uc3QgY2hhciAqX19uYW1lLCBpbnQgX19vZmxh ZywgbW9kZV90IF9fbW9kZSk7CgoKZXh0ZXJuIGludCBzaG1fdW5saW5rIChfX2NvbnN0IGNoYXIg Kl9fbmFtZSk7CgoKIyAzICIuLi9pbmNsdWRlL3N5cy9tbWFuLmgiIDIKCgpleHRlcm4gdm9pZCAq X19tbWFwICh2b2lkICpfX2FkZHIsIHNpemVfdCBfX2xlbiwgaW50IF9fcHJvdCwKICAgICAgICAg ICAgICAgICAgICAgaW50IF9fZmxhZ3MsIGludCBfX2ZkLCBfX29mZl90IF9fb2Zmc2V0KTsKZXh0 ZXJuIHZvaWQgKl9fbW1hcDY0ICh2b2lkICpfX2FkZHIsIHNpemVfdCBfX2xlbiwgaW50IF9fcHJv dCwKICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19mbGFncywgaW50IF9fZmQsIF9fb2ZmNjRf dCBfX29mZnNldCk7CmV4dGVybiBpbnQgX19tdW5tYXAgKHZvaWQgKl9fYWRkciwgc2l6ZV90IF9f bGVuKTsKZXh0ZXJuIGludCBfX21wcm90ZWN0ICh2b2lkICpfX2FkZHIsIHNpemVfdCBfX2xlbiwg aW50IF9fcHJvdCk7CgoKZXh0ZXJuIHZvaWQgKl9fbXJlbWFwICh2b2lkICpfX2FkZHIsIHNpemVf dCBfX29sZF9sZW4sCiAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IF9fbmV3X2xlbiwgaW50 IF9fbWF5X21vdmUpOwojIDc2MiAiLi4vbGliaW8vbGliaW9QLmgiIDIKIyA4MjggIi4uL2xpYmlv L2xpYmlvUC5oIgpzdHJ1Y3Qgc3RhdDsKZXh0ZXJuIF9fc3NpemVfdCBfSU9fcmVhZCAoaW50LCB2 b2lkICosIHNpemVfdCkgOwpleHRlcm4gX19zc2l6ZV90IF9JT193cml0ZSAoaW50LCBjb25zdCB2 b2lkICosIHNpemVfdCkgOwpleHRlcm4gX19vZmY2NF90IF9JT19sc2VlayAoaW50LCBfX29mZjY0 X3QsIGludCkgOwpleHRlcm4gaW50IF9JT19jbG9zZSAoaW50KSA7CmV4dGVybiBpbnQgX0lPX2Zz dGF0IChpbnQsIHN0cnVjdCBzdGF0ICopIDsKZXh0ZXJuIGludCBfSU9fdnNjYW5mIChjb25zdCBj aGFyICosIF9fZ251Y192YV9saXN0KSA7CiMgOTI4ICIuLi9saWJpby9saWJpb1AuaCIKZXh0ZXJu IHN0cnVjdCBfSU9fZmFrZV9zdGRpb2J1ZiBfSU9fc3RkaW5fYnVmLCBfSU9fc3Rkb3V0X2J1Ziwg X0lPX3N0ZGVycl9idWY7CiMgNDUgInZmcHJpbnRmLmMiIDIKIyAxNTYgInZmcHJpbnRmLmMiCiMg MSAiX2kxOG5fbnVtYmVyLmgiIDEKIyAyMCAiX2kxOG5fbnVtYmVyLmgiCiMgMSAiLi4vbG9jYWxl L291dGRpZ2l0cy5oIiAxCiMgMjAgIi4uL2xvY2FsZS9vdXRkaWdpdHMuaCIKIyAxICIuLi9pbmNs dWRlL2Fzc2VydC5oIiAxCiMgMSAiLi4vYXNzZXJ0L2Fzc2VydC5oIiAxCiMgNjUgIi4uL2Fzc2Vy dC9hc3NlcnQuaCIKCgoKZXh0ZXJuIHZvaWQgX19hc3NlcnRfZmFpbCAoX19jb25zdCBjaGFyICpf X2Fzc2VydGlvbiwgX19jb25zdCBjaGFyICpfX2ZpbGUsCiAgICAgICAgICAgICAgICAgICAgICAg ICAgIHVuc2lnbmVkIGludCBfX2xpbmUsIF9fY29uc3QgY2hhciAqX19mdW5jdGlvbikKICAgICBf X2F0dHJpYnV0ZV9fICgoX19ub3JldHVybl9fKSk7CgoKZXh0ZXJuIHZvaWQgX19hc3NlcnRfcGVy cm9yX2ZhaWwgKGludCBfX2Vycm51bSwgX19jb25zdCBjaGFyICpfX2ZpbGUsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgX19saW5lLAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX2Z1bmN0aW9uKQogICAgIF9fYXR0 cmlidXRlX18gKChfX25vcmV0dXJuX18pKTsKCgoKCmV4dGVybiB2b2lkIF9fYXNzZXJ0IChjb25z dCBjaGFyICpfX2Fzc2VydGlvbiwgY29uc3QgY2hhciAqX19maWxlLCBpbnQgX19saW5lKQogICAg IF9fYXR0cmlidXRlX18gKChfX25vcmV0dXJuX18pKTsKCgoKIyAyICIuLi9pbmNsdWRlL2Fzc2Vy dC5oIiAyCgoKCgpleHRlcm4gdm9pZCBfX2Fzc2VydF9mYWlsIChfX2NvbnN0IGNoYXIgKl9fYXNz ZXJ0aW9uLCBfX2NvbnN0IGNoYXIgKl9fZmlsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg dW5zaWduZWQgaW50IF9fbGluZSwgX19jb25zdCBjaGFyICpfX2Z1bmN0aW9uKQogIF9fYXR0cmli dXRlX18gKChfX25vcmV0dXJuX18pKTsKCgpleHRlcm4gdm9pZCBfX2Fzc2VydF9wZXJyb3JfZmFp bCAoaW50IF9fZXJybnVtLCBfX2NvbnN0IGNoYXIgKl9fZmlsZSwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBfX2xpbmUsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fZnVuY3Rpb24pCiAgICAgX19hdHRyaWJ1dGVf XyAoKF9fbm9yZXR1cm5fXykpOwoKCmV4dGVybiBfX3R5cGVvZiAoX19hc3NlcnRfZmFpbCkgX19H SV9fX2Fzc2VydF9mYWlsOyBleHRlcm4gX190eXBlb2YgKF9fYXNzZXJ0X2ZhaWwpIF9fYXNzZXJ0 X2ZhaWwgX19hc21fXyAoIiIgIl9fR0lfX19hc3NlcnRfZmFpbCIpIF9fYXR0cmlidXRlX18gKCh2 aXNpYmlsaXR5ICgiaGlkZGVuIikpKTsKZXh0ZXJuIF9fdHlwZW9mIChfX2Fzc2VydF9wZXJyb3Jf ZmFpbCkgX19HSV9fX2Fzc2VydF9wZXJyb3JfZmFpbDsgZXh0ZXJuIF9fdHlwZW9mIChfX2Fzc2Vy dF9wZXJyb3JfZmFpbCkgX19hc3NlcnRfcGVycm9yX2ZhaWwgX19hc21fXyAoIiIgIl9fR0lfX19h c3NlcnRfcGVycm9yX2ZhaWwiKSBfX2F0dHJpYnV0ZV9fICgodmlzaWJpbGl0eSAoImhpZGRlbiIp KSk7CiMgMjEgIi4uL2xvY2FsZS9vdXRkaWdpdHMuaCIgMgojIDMwICIuLi9sb2NhbGUvb3V0ZGln aXRzLmgiCnN0YXRpYyBpbmxpbmUgY2hhciAqCm91dGRpZ2l0X3ZhbHVlIChjaGFyICpzLCBpbnQg bikKewogIGNvbnN0IGNoYXIgKm91dGRpZ2l0OwogIHNpemVfdCBkbGVuOwoKICAoKHZvaWQpICgo MCA8PSBuICYmIG4gPD0gOSkgPyAwIDogKF9fYXNzZXJ0X2ZhaWwgKCIwIDw9IG4gJiYgbiA8PSA5 IiwgIi4uL2xvY2FsZS9vdXRkaWdpdHMuaCIsIDM2LCBfX1BSRVRUWV9GVU5DVElPTl9fKSwgMCkp KTsKICBvdXRkaWdpdCA9ICgoKChfX2xvY2FsZV90KSAoX19saWJjX2ludGVybmFsX3RzZF9nZXQg IT0gKCh2b2lkICopMCkgPyBfX2xpYmNfaW50ZXJuYWxfdHNkX2dldCAoX0xJQkNfVFNEX0tFWV9M T0NBTEUpIDogX19saWJjX3RzZF9MT0NBTEVfZGF0YSkpLT5fX2xvY2FsZXNbX19MQ19DVFlQRV0p LT52YWx1ZXNbKChpbnQpIChfTkxfQ1RZUEVfT1VURElHSVQwX01CICsgbikgJiAweGZmZmYpXS5z dHJpbmcpOwogIGRsZW4gPSBzdHJsZW4gKG91dGRpZ2l0KTsKCiAgcyAtPSBkbGVuOwogIHdoaWxl IChkbGVuLS0gPiAwKQogICAgc1tkbGVuXSA9IG91dGRpZ2l0W2RsZW5dOwoKICByZXR1cm4gczsK fQojIDIxICJfaTE4bl9udW1iZXIuaCIgMgojIDEgIi4uL2xvY2FsZS9vdXRkaWdpdHN3Yy5oIiAx CiMgMjAgIi4uL2xvY2FsZS9vdXRkaWdpdHN3Yy5oIgojIDEgIi4uL2luY2x1ZGUvYXNzZXJ0Lmgi IDEKIyAxICIuLi9hc3NlcnQvYXNzZXJ0LmgiIDEKIyA2NSAiLi4vYXNzZXJ0L2Fzc2VydC5oIgoK CgpleHRlcm4gdm9pZCBfX2Fzc2VydF9mYWlsIChfX2NvbnN0IGNoYXIgKl9fYXNzZXJ0aW9uLCBf X2NvbnN0IGNoYXIgKl9fZmlsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQg aW50IF9fbGluZSwgX19jb25zdCBjaGFyICpfX2Z1bmN0aW9uKQogICAgIF9fYXR0cmlidXRlX18g KChfX25vcmV0dXJuX18pKTsKCgpleHRlcm4gdm9pZCBfX2Fzc2VydF9wZXJyb3JfZmFpbCAoaW50 IF9fZXJybnVtLCBfX2NvbnN0IGNoYXIgKl9fZmlsZSwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHVuc2lnbmVkIGludCBfX2xpbmUsCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBfX2NvbnN0IGNoYXIgKl9fZnVuY3Rpb24pCiAgICAgX19hdHRyaWJ1dGVfXyAoKF9f bm9yZXR1cm5fXykpOwoKCgoKZXh0ZXJuIHZvaWQgX19hc3NlcnQgKGNvbnN0IGNoYXIgKl9fYXNz ZXJ0aW9uLCBjb25zdCBjaGFyICpfX2ZpbGUsIGludCBfX2xpbmUpCiAgICAgX19hdHRyaWJ1dGVf XyAoKF9fbm9yZXR1cm5fXykpOwoKCgojIDIgIi4uL2luY2x1ZGUvYXNzZXJ0LmgiIDIKCgoKCmV4 dGVybiB2b2lkIF9fYXNzZXJ0X2ZhaWwgKF9fY29uc3QgY2hhciAqX19hc3NlcnRpb24sIF9fY29u c3QgY2hhciAqX19maWxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQg X19saW5lLCBfX2NvbnN0IGNoYXIgKl9fZnVuY3Rpb24pCiAgX19hdHRyaWJ1dGVfXyAoKF9fbm9y ZXR1cm5fXykpOwoKCmV4dGVybiB2b2lkIF9fYXNzZXJ0X3BlcnJvcl9mYWlsIChpbnQgX19lcnJu dW0sIF9fY29uc3QgY2hhciAqX19maWxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgdW5zaWduZWQgaW50IF9fbGluZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IF9fY29uc3QgY2hhciAqX19mdW5jdGlvbikKICAgICBfX2F0dHJpYnV0ZV9fICgoX19ub3JldHVy bl9fKSk7CgoKZXh0ZXJuIF9fdHlwZW9mIChfX2Fzc2VydF9mYWlsKSBfX0dJX19fYXNzZXJ0X2Zh aWw7IGV4dGVybiBfX3R5cGVvZiAoX19hc3NlcnRfZmFpbCkgX19hc3NlcnRfZmFpbCBfX2FzbV9f ICgiIiAiX19HSV9fX2Fzc2VydF9mYWlsIikgX19hdHRyaWJ1dGVfXyAoKHZpc2liaWxpdHkgKCJo aWRkZW4iKSkpOwpleHRlcm4gX190eXBlb2YgKF9fYXNzZXJ0X3BlcnJvcl9mYWlsKSBfX0dJX19f YXNzZXJ0X3BlcnJvcl9mYWlsOyBleHRlcm4gX190eXBlb2YgKF9fYXNzZXJ0X3BlcnJvcl9mYWls KSBfX2Fzc2VydF9wZXJyb3JfZmFpbCBfX2FzbV9fICgiIiAiX19HSV9fX2Fzc2VydF9wZXJyb3Jf ZmFpbCIpIF9fYXR0cmlidXRlX18gKCh2aXNpYmlsaXR5ICgiaGlkZGVuIikpKTsKIyAyMSAiLi4v bG9jYWxlL291dGRpZ2l0c3djLmgiIDIKIyAyOSAiLi4vbG9jYWxlL291dGRpZ2l0c3djLmgiCnN0 YXRpYyBpbmxpbmUgd2NoYXJfdApvdXRkaWdpdHdjX3ZhbHVlIChpbnQgbikKewogICgodm9pZCkg KCgwIDw9IG4gJiYgbiA8PSA5KSA/IDAgOiAoX19hc3NlcnRfZmFpbCAoIjAgPD0gbiAmJiBuIDw9 IDkiLCAiLi4vbG9jYWxlL291dGRpZ2l0c3djLmgiLCAzMiwgX19QUkVUVFlfRlVOQ1RJT05fXyks IDApKSk7CgogIHJldHVybiAoKCgoX19sb2NhbGVfdCkgKF9fbGliY19pbnRlcm5hbF90c2RfZ2V0 ICE9ICgodm9pZCAqKTApID8gX19saWJjX2ludGVybmFsX3RzZF9nZXQgKF9MSUJDX1RTRF9LRVlf TE9DQUxFKSA6IF9fbGliY190c2RfTE9DQUxFX2RhdGEpKS0+X19sb2NhbGVzW19fTENfQ1RZUEVd KS0+dmFsdWVzWygoaW50KSAoX05MX0NUWVBFX09VVERJR0lUMF9XQyArIG4pICYgMHhmZmZmKV0u d29yZCk7Cn0KIyAyMiAiX2kxOG5fbnVtYmVyLmgiIDIKCnN0YXRpYyBjaGFyICoKX2kxOG5fbnVt YmVyX3Jld3JpdGUgKGNoYXIgKncsIGNoYXIgKnJlYXJfcHRyKQp7CiAgY2hhciAqc3JjLCAqczsK CgogIHNyYyA9IChjaGFyICopIF9fYnVpbHRpbl9hbGxvY2EgKChyZWFyX3B0ciAtIHcpICogc2l6 ZW9mIChjaGFyKSk7CiAgcyA9IChjaGFyICopIChfX2V4dGVuc2lvbl9fIChfX2J1aWx0aW5fY29u c3RhbnRfcCAodykgJiYgX19idWlsdGluX2NvbnN0YW50X3AgKChyZWFyX3B0ciAtIHcpICogc2l6 ZW9mIChjaGFyKSkgJiYgKChzaXplX3QpKGNvbnN0IHZvaWQgKikoKHcpICsgMSkgLSAoc2l6ZV90 KShjb25zdCB2b2lkICopKHcpID09IDEpICYmIChyZWFyX3B0ciAtIHcpICogc2l6ZW9mIChjaGFy KSA8PSA4ID8gX19idWlsdGluX21lbWNweSAoc3JjLCB3LCAocmVhcl9wdHIgLSB3KSAqIHNpemVv ZiAoY2hhcikpICsgKChyZWFyX3B0ciAtIHcpICogc2l6ZW9mIChjaGFyKSkgOiBfX21lbXBjcHkg KHNyYywgdywgKHJlYXJfcHRyIC0gdykgKiBzaXplb2YgKGNoYXIpKSkpOwoKICB3ID0gcmVhcl9w dHI7CgoKICB3aGlsZSAoLS1zID49IHNyYykKICAgIHsKICAgICAgaWYgKCpzID49ICcwJyAmJiAq cyA8PSAnOScpCiAgICAgICAgewogICAgICAgICAgaWYgKHNpemVvZiAoY2hhcikgPT0gMSkKICAg ICAgICAgICAgdyA9IChjaGFyICopIG91dGRpZ2l0X3ZhbHVlICgoY2hhciAqKSB3LCAqcyAtICcw Jyk7CiAgICAgICAgICBlbHNlCiAgICAgICAgICAgICotLXcgPSAoY2hhcikgb3V0ZGlnaXR3Y192 YWx1ZSAoKnMgLSAnMCcpOwogICAgICAgIH0KICAgICAgZWxzZQogICAgICAgICotLXcgPSAqczsK ICAgIH0KCiAgcmV0dXJuIHc7Cn0KIyAxNTcgInZmcHJpbnRmLmMiIDIKCgojIDEgInByaW50Zi1w YXJzZS5oIiAxCiMgMjEgInByaW50Zi1wYXJzZS5oIgojIDEgIi4uL2luY2x1ZGUvbGltaXRzLmgi IDEKIyAxNDQgIi4uL2luY2x1ZGUvbGltaXRzLmgiCiMgMSAiLi4vaW5jbHVkZS9iaXRzL3Bvc2l4 MV9saW0uaCIgMQojIDE0NSAiLi4vaW5jbHVkZS9saW1pdHMuaCIgMgoKCgojIDEgIi4uL2luY2x1 ZGUvYml0cy9wb3NpeDJfbGltLmgiIDEKIyAxNDkgIi4uL2luY2x1ZGUvbGltaXRzLmgiIDIKIyAy MiAicHJpbnRmLXBhcnNlLmgiIDIKCgojIDEgIi91c3IvbGliNjQvZ2NjLWxpYi94ODZfNjQtc3Vz ZS1saW51eC8zLjMvaW5jbHVkZS9zdGRkZWYuaCIgMSAzIDQKIyAyNSAicHJpbnRmLXBhcnNlLmgi IDIKCgoKIyAxICIuLi9pbmNsdWRlL2Fzc2VydC5oIiAxCiMgMSAiLi4vYXNzZXJ0L2Fzc2VydC5o IiAxCiMgMiAiLi4vaW5jbHVkZS9hc3NlcnQuaCIgMgoKCgoKZXh0ZXJuIHZvaWQgX19hc3NlcnRf ZmFpbCAoX19jb25zdCBjaGFyICpfX2Fzc2VydGlvbiwgX19jb25zdCBjaGFyICpfX2ZpbGUsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBfX2xpbmUsIF9fY29uc3QgY2hh ciAqX19mdW5jdGlvbikKICBfX2F0dHJpYnV0ZV9fICgoX19ub3JldHVybl9fKSk7CgoKZXh0ZXJu IHZvaWQgX19hc3NlcnRfcGVycm9yX2ZhaWwgKGludCBfX2Vycm51bSwgX19jb25zdCBjaGFyICpf X2ZpbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgX19s aW5lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX2Z1 bmN0aW9uKQogICAgIF9fYXR0cmlidXRlX18gKChfX25vcmV0dXJuX18pKTsKCgpleHRlcm4gX190 eXBlb2YgKF9fYXNzZXJ0X2ZhaWwpIF9fR0lfX19hc3NlcnRfZmFpbDsgZXh0ZXJuIF9fdHlwZW9m IChfX2Fzc2VydF9mYWlsKSBfX2Fzc2VydF9mYWlsIF9fYXNtX18gKCIiICJfX0dJX19fYXNzZXJ0 X2ZhaWwiKSBfX2F0dHJpYnV0ZV9fICgodmlzaWJpbGl0eSAoImhpZGRlbiIpKSk7CmV4dGVybiBf X3R5cGVvZiAoX19hc3NlcnRfcGVycm9yX2ZhaWwpIF9fR0lfX19hc3NlcnRfcGVycm9yX2ZhaWw7 IGV4dGVybiBfX3R5cGVvZiAoX19hc3NlcnRfcGVycm9yX2ZhaWwpIF9fYXNzZXJ0X3BlcnJvcl9m YWlsIF9fYXNtX18gKCIiICJfX0dJX19fYXNzZXJ0X3BlcnJvcl9mYWlsIikgX19hdHRyaWJ1dGVf XyAoKHZpc2liaWxpdHkgKCJoaWRkZW4iKSkpOwojIDI5ICJwcmludGYtcGFyc2UuaCIgMgoKCnN0 cnVjdCBwcmludGZfc3BlYwogIHsKCiAgICBzdHJ1Y3QgcHJpbnRmX2luZm8gaW5mbzsKCgoKICAg IGNvbnN0IHVuc2lnbmVkIGNoYXIgKmVuZF9vZl9mbXQsICpuZXh0X2ZtdDsKCgoKICAgIGludCBw cmVjX2FyZywgd2lkdGhfYXJnOwoKICAgIGludCBkYXRhX2FyZzsKICAgIGludCBkYXRhX2FyZ190 eXBlOwoKICAgIHNpemVfdCBuZGF0YV9hcmdzOwogIH07CgoKCnVuaW9uIHByaW50Zl9hcmcKICB7 CiAgICB1bnNpZ25lZCBjaGFyIHBhX2NoYXI7CiAgICB3Y2hhcl90IHBhX3djaGFyOwogICAgc2hv cnQgaW50IHBhX3Nob3J0X2ludDsKICAgIGludCBwYV9pbnQ7CiAgICBsb25nIGludCBwYV9sb25n X2ludDsKICAgIGxvbmcgbG9uZyBpbnQgcGFfbG9uZ19sb25nX2ludDsKICAgIHVuc2lnbmVkIHNo b3J0IGludCBwYV91X3Nob3J0X2ludDsKICAgIHVuc2lnbmVkIGludCBwYV91X2ludDsKICAgIHVu c2lnbmVkIGxvbmcgaW50IHBhX3VfbG9uZ19pbnQ7CiAgICB1bnNpZ25lZCBsb25nIGxvbmcgaW50 IHBhX3VfbG9uZ19sb25nX2ludDsKICAgIGZsb2F0IHBhX2Zsb2F0OwogICAgZG91YmxlIHBhX2Rv dWJsZTsKICAgIGxvbmcgZG91YmxlIHBhX2xvbmdfZG91YmxlOwogICAgY29uc3QgY2hhciAqcGFf c3RyaW5nOwogICAgY29uc3Qgd2NoYXJfdCAqcGFfd3N0cmluZzsKICAgIHZvaWQgKnBhX3BvaW50 ZXI7CiAgfTsKCgoKCnN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50CnJlYWRfaW50IChjb25zdCB1 bnNpZ25lZCBjaGFyICogKnBzdHIpCnsKICB1bnNpZ25lZCBpbnQgcmV0dmFsID0gKipwc3RyIC0g JzAnOwoKICB3aGlsZSAoKCh1bnNpZ25lZCBpbnQpICgoKisrKCpwc3RyKSkgLSAnMCcpIDwgMTAp KQogICAgewogICAgICByZXR2YWwgKj0gMTA7CiAgICAgIHJldHZhbCArPSAqKnBzdHIgLSAnMCc7 CiAgICB9CgogIHJldHVybiByZXR2YWw7Cn0KCgoKCgpzdGF0aWMgaW5saW5lIGNvbnN0IHVuc2ln bmVkIGNoYXIgKgoKCgpmaW5kX3NwZWMgKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmZvcm1hdCwgbWJz dGF0ZV90ICpwcykKCnsKCgoKICB3aGlsZSAoKmZvcm1hdCAhPSAnXDAnICYmICpmb3JtYXQgIT0g JyUnKQogICAgewogICAgICBpbnQgbGVuOwoKCiAgICAgIHBzLT5fX2NvdW50ID0gMDsKICAgICAg aWYgKCEgKCgoKmZvcm1hdCkgJiB+MHg3ZikgPT0gMCkgJiYgKGxlbiA9IF9fbWJybGVuIChmb3Jt YXQsICgoKCgoX19sb2NhbGVfdCkgKF9fbGliY19pbnRlcm5hbF90c2RfZ2V0ICE9ICgodm9pZCAq KTApID8gX19saWJjX2ludGVybmFsX3RzZF9nZXQgKF9MSUJDX1RTRF9LRVlfTE9DQUxFKSA6IF9f bGliY190c2RfTE9DQUxFX2RhdGEpKS0+X19sb2NhbGVzW19fTENfQ1RZUEVdKS0+dmFsdWVzWygo aW50KSAoX05MX0NUWVBFX01CX0NVUl9NQVgpICYgMHhmZmZmKV0ud29yZCkpLCBwcykpID4gMCkK ICAgICAgICBmb3JtYXQgKz0gbGVuOwogICAgICBlbHNlCiAgICAgICAgKytmb3JtYXQ7CiAgICB9 CiAgcmV0dXJuIGZvcm1hdDsKCn0KCgoKZXh0ZXJuIHByaW50Zl9hcmdpbmZvX2Z1bmN0aW9uICoq X19wcmludGZfYXJnaW5mb190YWJsZSBfX2F0dHJpYnV0ZV9fICgodmlzaWJpbGl0eSAoImhpZGRl biIpKSk7CmV4dGVybiBwcmludGZfZnVuY3Rpb24gKipfX3ByaW50Zl9mdW5jdGlvbl90YWJsZSBf X2F0dHJpYnV0ZV9fICgodmlzaWJpbGl0eSAoImhpZGRlbiIpKSk7CgoKCgoKCgpzdGF0aWMgaW5s aW5lIHNpemVfdAoKCgoKcGFyc2Vfb25lX3NwZWMgKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmZvcm1h dCwgc2l6ZV90IHBvc24sIHN0cnVjdCBwcmludGZfc3BlYyAqc3BlYywKICAgICAgICAgICAgICAg IHNpemVfdCAqbWF4X3JlZl9hcmcsIG1ic3RhdGVfdCAqcHMpCgp7CiAgdW5zaWduZWQgaW50IG47 CiAgc2l6ZV90IG5hcmdzID0gMDsKCgogICsrZm9ybWF0OwoKCiAgc3BlYy0+ZGF0YV9hcmcgPSAt MTsKICBzcGVjLT5pbmZvLmFsdCA9IDA7CiAgc3BlYy0+aW5mby5zcGFjZSA9IDA7CiAgc3BlYy0+ aW5mby5sZWZ0ID0gMDsKICBzcGVjLT5pbmZvLnNob3dzaWduID0gMDsKICBzcGVjLT5pbmZvLmdy b3VwID0gMDsKICBzcGVjLT5pbmZvLmkxOG4gPSAwOwogIHNwZWMtPmluZm8ucGFkID0gJyAnOwog IHNwZWMtPmluZm8ud2lkZSA9IHNpemVvZiAodW5zaWduZWQgY2hhcikgPiAxOwoKCiAgaWYgKCgo dW5zaWduZWQgaW50KSAoKCpmb3JtYXQpIC0gJzAnKSA8IDEwKSkKICAgIHsKICAgICAgY29uc3Qg dW5zaWduZWQgY2hhciAqYmVnaW4gPSBmb3JtYXQ7CgogICAgICBuID0gcmVhZF9pbnQgKCZmb3Jt YXQpOwoKICAgICAgaWYgKG4gPiAwICYmICpmb3JtYXQgPT0gJyQnKQoKICAgICAgICB7CiAgICAg ICAgICArK2Zvcm1hdDsKICAgICAgICAgIHNwZWMtPmRhdGFfYXJnID0gbiAtIDE7CiAgICAgICAg ICAqbWF4X3JlZl9hcmcgPSAoKCgqbWF4X3JlZl9hcmcpPihuKSk/KCptYXhfcmVmX2FyZyk6KG4p KTsKICAgICAgICB9CiAgICAgIGVsc2UKCgogICAgICAgIGZvcm1hdCA9IGJlZ2luOwogICAgfQoK CiAgZG8KICAgIHsKICAgICAgc3dpdGNoICgqZm9ybWF0KQogICAgICAgIHsKICAgICAgICBjYXNl ICcgJzoKCiAgICAgICAgICBzcGVjLT5pbmZvLnNwYWNlID0gMTsKICAgICAgICAgIGNvbnRpbnVl OwogICAgICAgIGNhc2UgJysnOgoKICAgICAgICAgIHNwZWMtPmluZm8uc2hvd3NpZ24gPSAxOwog ICAgICAgICAgY29udGludWU7CiAgICAgICAgY2FzZSAnLSc6CgogICAgICAgICAgc3BlYy0+aW5m by5sZWZ0ID0gMTsKICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgIGNhc2UgJyMnOgoKCiAgICAg ICAgICBzcGVjLT5pbmZvLmFsdCA9IDE7CiAgICAgICAgICBjb250aW51ZTsKICAgICAgICBjYXNl ICcwJzoKCiAgICAgICAgICBzcGVjLT5pbmZvLnBhZCA9ICcwJzsKICAgICAgICAgIGNvbnRpbnVl OwogICAgICAgIGNhc2UgJ1wnJzoKCgogICAgICAgICAgc3BlYy0+aW5mby5ncm91cCA9IDE7CiAg ICAgICAgICBjb250aW51ZTsKICAgICAgICBjYXNlICdJJzoKCgogICAgICAgICAgc3BlYy0+aW5m by5pMThuID0gMTsKICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgIGRlZmF1bHQ6CiAgICAgICAg ICBicmVhazsKICAgICAgICB9CiAgICAgIGJyZWFrOwogICAgfQogIHdoaWxlICgqKytmb3JtYXQp OwoKICBpZiAoc3BlYy0+aW5mby5sZWZ0KQogICAgc3BlYy0+aW5mby5wYWQgPSAnICc7CgoKICBz cGVjLT53aWR0aF9hcmcgPSAtMTsKICBzcGVjLT5pbmZvLndpZHRoID0gMDsKICBpZiAoKmZvcm1h dCA9PSAnKicpCiAgICB7CgoKICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqYmVnaW4gPSArK2Zv cm1hdDsKCiAgICAgIGlmICgoKHVuc2lnbmVkIGludCkgKCgqZm9ybWF0KSAtICcwJykgPCAxMCkp CiAgICAgICAgewoKICAgICAgICAgIG4gPSByZWFkX2ludCAoJmZvcm1hdCk7CgogICAgICAgICAg aWYgKG4gPiAwICYmICpmb3JtYXQgPT0gJyQnKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAg c3BlYy0+d2lkdGhfYXJnID0gbiAtIDE7CiAgICAgICAgICAgICAgKm1heF9yZWZfYXJnID0gKCgo Km1heF9yZWZfYXJnKT4obikpPygqbWF4X3JlZl9hcmcpOihuKSk7CiAgICAgICAgICAgICAgKytm b3JtYXQ7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICBpZiAoc3BlYy0+d2lkdGhfYXJn IDwgMCkKICAgICAgICB7CgogICAgICAgICAgc3BlYy0+d2lkdGhfYXJnID0gcG9zbisrOwogICAg ICAgICAgKytuYXJnczsKICAgICAgICAgIGZvcm1hdCA9IGJlZ2luOwogICAgICAgIH0KICAgIH0K ICBlbHNlIGlmICgoKHVuc2lnbmVkIGludCkgKCgqZm9ybWF0KSAtICcwJykgPCAxMCkpCgogICAg c3BlYy0+aW5mby53aWR0aCA9IHJlYWRfaW50ICgmZm9ybWF0KTsKCgogIHNwZWMtPnByZWNfYXJn ID0gLTE7CgogIHNwZWMtPmluZm8ucHJlYyA9IC0xOwogIGlmICgqZm9ybWF0ID09ICcuJykKICAg IHsKICAgICAgKytmb3JtYXQ7CiAgICAgIGlmICgqZm9ybWF0ID09ICcqJykKICAgICAgICB7Cgog ICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqYmVnaW4gPSArK2Zvcm1hdDsKCiAgICAgICAg ICBpZiAoKCh1bnNpZ25lZCBpbnQpICgoKmZvcm1hdCkgLSAnMCcpIDwgMTApKQogICAgICAgICAg ICB7CiAgICAgICAgICAgICAgbiA9IHJlYWRfaW50ICgmZm9ybWF0KTsKCiAgICAgICAgICAgICAg aWYgKG4gPiAwICYmICpmb3JtYXQgPT0gJyQnKQogICAgICAgICAgICAgICAgewogICAgICAgICAg ICAgICAgICBzcGVjLT5wcmVjX2FyZyA9IG4gLSAxOwogICAgICAgICAgICAgICAgICAqbWF4X3Jl Zl9hcmcgPSAoKCgqbWF4X3JlZl9hcmcpPihuKSk/KCptYXhfcmVmX2FyZyk6KG4pKTsKICAgICAg ICAgICAgICAgICAgKytmb3JtYXQ7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAg ICAgICAgICBpZiAoc3BlYy0+cHJlY19hcmcgPCAwKQogICAgICAgICAgICB7CgogICAgICAgICAg ICAgIHNwZWMtPnByZWNfYXJnID0gcG9zbisrOwogICAgICAgICAgICAgICsrbmFyZ3M7CiAgICAg ICAgICAgICAgZm9ybWF0ID0gYmVnaW47CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIGVs c2UgaWYgKCgodW5zaWduZWQgaW50KSAoKCpmb3JtYXQpIC0gJzAnKSA8IDEwKSkKICAgICAgICBz cGVjLT5pbmZvLnByZWMgPSByZWFkX2ludCAoJmZvcm1hdCk7CiAgICAgIGVsc2UKCiAgICAgICAg c3BlYy0+aW5mby5wcmVjID0gMDsKICAgIH0KCgogIHNwZWMtPmluZm8uaXNfbG9uZ19kb3VibGUg PSAwOwogIHNwZWMtPmluZm8uaXNfc2hvcnQgPSAwOwogIHNwZWMtPmluZm8uaXNfbG9uZyA9IDA7 CiAgc3BlYy0+aW5mby5pc19jaGFyID0gMDsKCiAgc3dpdGNoICgqZm9ybWF0KyspCiAgICB7CiAg ICBjYXNlICdoJzoKCiAgICAgIGlmICgqZm9ybWF0ICE9ICdoJykKICAgICAgICBzcGVjLT5pbmZv LmlzX3Nob3J0ID0gMTsKICAgICAgZWxzZQogICAgICAgIHsKICAgICAgICAgICsrZm9ybWF0Owog ICAgICAgICAgc3BlYy0+aW5mby5pc19jaGFyID0gMTsKICAgICAgICB9CiAgICAgIGJyZWFrOwog ICAgY2FzZSAnbCc6CgogICAgICBzcGVjLT5pbmZvLmlzX2xvbmcgPSAxOwogICAgICBpZiAoKmZv cm1hdCAhPSAnbCcpCiAgICAgICAgYnJlYWs7CiAgICAgICsrZm9ybWF0OwoKICAgIGNhc2UgJ0wn OgoKICAgIGNhc2UgJ3EnOgoKICAgICAgc3BlYy0+aW5mby5pc19sb25nX2RvdWJsZSA9IDE7CiAg ICAgIGJyZWFrOwogICAgY2FzZSAneic6CiAgICBjYXNlICdaJzoKCiAgICAgICgodm9pZCkgKDAp KTsKCgoKICAgICAgc3BlYy0+aW5mby5pc19sb25nID0gc2l6ZW9mIChzaXplX3QpID4gc2l6ZW9m ICh1bnNpZ25lZCBpbnQpOwogICAgICBicmVhazsKICAgIGNhc2UgJ3QnOgogICAgICAoKHZvaWQp ICgwKSk7CgoKCiAgICAgIHNwZWMtPmluZm8uaXNfbG9uZyA9IHNpemVvZiAocHRyZGlmZl90KSA+ IHNpemVvZiAoaW50KTsKICAgICAgYnJlYWs7CiAgICBjYXNlICdqJzoKICAgICAgKCh2b2lkKSAo MCkpOwoKCgoKICAgICAgc3BlYy0+aW5mby5pc19sb25nID0gc2l6ZW9mICh1aW50bWF4X3QpID4g c2l6ZW9mICh1bnNpZ25lZCBpbnQpOwogICAgICBicmVhazsKICAgIGRlZmF1bHQ6CgogICAgICAt LWZvcm1hdDsKICAgICAgYnJlYWs7CiAgICB9CgoKICBzcGVjLT5pbmZvLnNwZWMgPSAod2NoYXJf dCkgKmZvcm1hdCsrOwogIGlmIChfX2J1aWx0aW5fZXhwZWN0IChfX3ByaW50Zl9mdW5jdGlvbl90 YWJsZSAhPSAoKHZvaWQgKikwKSwgMCkKICAgICAgJiYgc3BlYy0+aW5mby5zcGVjIDw9ICgxMjcg KiAyICsgMSkKICAgICAgJiYgX19wcmludGZfYXJnaW5mb190YWJsZVtzcGVjLT5pbmZvLnNwZWNd ICE9ICgodm9pZCAqKTApKQoKCiAgICBzcGVjLT5uZGF0YV9hcmdzID0gKCpfX3ByaW50Zl9hcmdp bmZvX3RhYmxlW3NwZWMtPmluZm8uc3BlY10pCiAgICAgICgmc3BlYy0+aW5mbywgMSwgJnNwZWMt PmRhdGFfYXJnX3R5cGUpOwogIGVsc2UKICAgIHsKCiAgICAgIHNwZWMtPm5kYXRhX2FyZ3MgPSAx OwoKICAgICAgc3dpdGNoIChzcGVjLT5pbmZvLnNwZWMpCiAgICAgICAgewogICAgICAgIGNhc2Ug TCdpJzoKICAgICAgICBjYXNlIEwnZCc6CiAgICAgICAgY2FzZSBMJ3UnOgogICAgICAgIGNhc2Ug TCdvJzoKICAgICAgICBjYXNlIEwnWCc6CiAgICAgICAgY2FzZSBMJ3gnOgoKCgoKCiAgICAgICAg ICAgIGlmIChzcGVjLT5pbmZvLmlzX2xvbmcpCiAgICAgICAgICAgICAgc3BlYy0+ZGF0YV9hcmdf dHlwZSA9IFBBX0lOVHwoMSA8PCA5KTsKICAgICAgICAgICAgZWxzZSBpZiAoc3BlYy0+aW5mby5p c19zaG9ydCkKICAgICAgICAgICAgICBzcGVjLT5kYXRhX2FyZ190eXBlID0gUEFfSU5UfCgxIDw8 IDEwKTsKICAgICAgICAgICAgZWxzZSBpZiAoc3BlYy0+aW5mby5pc19jaGFyKQogICAgICAgICAg ICAgIHNwZWMtPmRhdGFfYXJnX3R5cGUgPSBQQV9DSEFSOwogICAgICAgICAgICBlbHNlCiAgICAg ICAgICAgICAgc3BlYy0+ZGF0YV9hcmdfdHlwZSA9IFBBX0lOVDsKICAgICAgICAgIGJyZWFrOwog ICAgICAgIGNhc2UgTCdlJzoKICAgICAgICBjYXNlIEwnRSc6CiAgICAgICAgY2FzZSBMJ2YnOgog ICAgICAgIGNhc2UgTCdGJzoKICAgICAgICBjYXNlIEwnZyc6CiAgICAgICAgY2FzZSBMJ0cnOgog ICAgICAgIGNhc2UgTCdhJzoKICAgICAgICBjYXNlIEwnQSc6CiAgICAgICAgICBpZiAoc3BlYy0+ aW5mby5pc19sb25nX2RvdWJsZSkKICAgICAgICAgICAgc3BlYy0+ZGF0YV9hcmdfdHlwZSA9IFBB X0RPVUJMRXwoMSA8PCA4KTsKICAgICAgICAgIGVsc2UKICAgICAgICAgICAgc3BlYy0+ZGF0YV9h cmdfdHlwZSA9IFBBX0RPVUJMRTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgTCdjJzoK ICAgICAgICAgIHNwZWMtPmRhdGFfYXJnX3R5cGUgPSBQQV9DSEFSOwogICAgICAgICAgYnJlYWs7 CiAgICAgICAgY2FzZSBMJ0MnOgogICAgICAgICAgc3BlYy0+ZGF0YV9hcmdfdHlwZSA9IFBBX1dD SEFSOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSBMJ3MnOgogICAgICAgICAgc3BlYy0+ ZGF0YV9hcmdfdHlwZSA9IFBBX1NUUklORzsKICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2Ug TCdTJzoKICAgICAgICAgIHNwZWMtPmRhdGFfYXJnX3R5cGUgPSBQQV9XU1RSSU5HOwogICAgICAg ICAgYnJlYWs7CiAgICAgICAgY2FzZSBMJ3AnOgogICAgICAgICAgc3BlYy0+ZGF0YV9hcmdfdHlw ZSA9IFBBX1BPSU5URVI7CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlIEwnbic6CiAgICAg ICAgICBzcGVjLT5kYXRhX2FyZ190eXBlID0gUEFfSU5UfCgxIDw8IDExKTsKICAgICAgICAgIGJy ZWFrOwoKICAgICAgICBjYXNlIEwnbSc6CiAgICAgICAgZGVmYXVsdDoKCiAgICAgICAgICBzcGVj LT5uZGF0YV9hcmdzID0gMDsKICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgIH0KCiAgaWYg KHNwZWMtPmRhdGFfYXJnID09IC0xICYmIHNwZWMtPm5kYXRhX2FyZ3MgPiAwKQogICAgewoKCiAg ICAgIHNwZWMtPmRhdGFfYXJnID0gcG9zbjsKICAgICAgbmFyZ3MgKz0gc3BlYy0+bmRhdGFfYXJn czsKICAgIH0KCiAgaWYgKHNwZWMtPmluZm8uc3BlYyA9PSBMJ1wwJykKCiAgICBzcGVjLT5lbmRf b2ZfZm10ID0gc3BlYy0+bmV4dF9mbXQgPSBmb3JtYXQgLSAxOwogIGVsc2UKICAgIHsKCiAgICAg IHNwZWMtPmVuZF9vZl9mbXQgPSBmb3JtYXQ7CgoKCiAgICAgIHNwZWMtPm5leHRfZm10ID0gZmlu ZF9zcGVjIChmb3JtYXQsIHBzKTsKCiAgICB9CgogIHJldHVybiBuYXJnczsKfQojIDE2MCAidmZw cmludGYuYyIgMgojIDIwNyAidmZwcmludGYuYyIKc3RhdGljIGNvbnN0IGNoYXIgbnVsbFtdID0g IihudWxsKSI7CgoKCnN0YXRpYyBpbnQgYnVmZmVyZWRfdmZwcmludGYgKF9JT19GSUxFICpzdHJl YW0sIGNvbnN0IGNoYXIgKmZtdCwgX19nbnVjX3ZhX2xpc3QpCiAgICAgOwoKCnN0YXRpYyBpbnQg cHJpbnRmX3Vua25vd24gKF9JT19GSUxFICosIGNvbnN0IHN0cnVjdCBwcmludGZfaW5mbyAqLCBj b25zdCB2b2lkICpjb25zdCAqKSA7CgoKCgoKCgpzdGF0aWMgY2hhciAqZ3JvdXBfbnVtYmVyIChj aGFyICosIGNoYXIgKiwgY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICopIDsKCgoKCgppbnQKX0lP X3ZmcHJpbnRmIChfSU9fRklMRSAqcywgY29uc3QgY2hhciAqZm9ybWF0LCBfX2dudWNfdmFfbGlz dCBhcCkKewoKCgoKICBjb25zdCBjaGFyICp0aG91c2FuZHNfc2VwID0gKCh2b2lkICopMCk7CgoK CiAgY29uc3QgY2hhciAqZ3JvdXBpbmc7CgoKICBpbnQgZG9uZTsKCgogIGNvbnN0IHVuc2lnbmVk IGNoYXIgKmY7CgoKICBjb25zdCB1bnNpZ25lZCBjaGFyICpsZWFkX3N0cl9lbmQ7CgoKICBjb25z dCB1bnNpZ25lZCBjaGFyICplbmRfb2Zfc3BlYzsKCgogIGNoYXIgd29ya19idWZmZXJbMTAwMF07 CiAgY2hhciAqd29ya3N0YXJ0ID0gKCh2b2lkICopMCk7CiAgY2hhciAqd29ya2VuZDsKCgoKICBt YnN0YXRlX3QgbWJzdGF0ZTsKCgoKICBfX2dudWNfdmFfbGlzdCBhcF9zYXZlOwoKCiAgaW50IG5z cGVjc19kb25lOwoKCiAgaW50IHNhdmVfZXJybm8gPSAoKl9fZXJybm9fbG9jYXRpb24gKCkpOwoK CgoKCiAgc3RhdGljIGNvbnN0IGludCBqdW1wX3RhYmxlW10gPQogIHsKICAgICAgICAgICAgICAg MSwgMCwgMCwgNCwKICAgICAgICAgICAgICAgMCwgMTQsIDAsIDYsCiAgICAgICAgICAgICAgIDAs IDAsIDcsIDIsCiAgICAgICAgICAgICAgIDAsIDMsIDksIDAsCiAgICAgICAgICAgICAgIDUsIDgs IDgsIDgsCiAgICAgICAgICAgICAgIDgsIDgsIDgsIDgsCiAgICAgICAgICAgICAgIDgsIDgsIDAs IDAsCiAgICAgICAgICAgICAgIDAsIDAsIDAsIDAsCiAgICAgICAgICAgICAgIDAsIDI2LCAwLCAy NSwKICAgICAgICAgICAgICAgMCwgMTksIDE5LCAxOSwKICAgICAgICAgICAgICAgMCwgMjksIDAs IDAsCiAgICAgICAgICAgICAgMTIsIDAsIDAsIDAsCiAgICAgICAgICAgICAgIDAsIDAsIDAsIDIx LAogICAgICAgICAgICAgICAwLCAwLCAwLCAwLAogICAgICAgICAgICAgIDE4LCAwLCAxMywgMCwK ICAgICAgICAgICAgICAgMCwgMCwgMCwgMCwKICAgICAgICAgICAgICAgMCwgMjYsIDAsIDIwLAog ICAgICAgICAgICAgIDE1LCAxOSwgMTksIDE5LAogICAgICAgICAgICAgIDEwLCAxNSwgMjgsIDAs CiAgICAgICAgICAgICAgMTEsIDI0LCAyMywgMTcsCiAgICAgICAgICAgICAgMjIsIDEyLCAwLCAy MSwKICAgICAgICAgICAgICAyNywgMTYsIDAsIDAsCiAgICAgICAgICAgICAgMTgsIDAsIDEzCiAg fTsKIyAxMjYyICJ2ZnByaW50Zi5jIgogIGlmIChzLT5fdnRhYmxlX29mZnNldCA9PSAwICYmICh7 IGludCBfX3Jlc3VsdCA9ICgtMSk7IGlmIChfX3Jlc3VsdCA8IDAgJiYgISAoMCkpIHsgaWYgKChz KS0+X21vZGUgPT0gMCkgKHMpLT5fbW9kZSA9IC0xOyBfX3Jlc3VsdCA9IChzKS0+X21vZGU7IH0g ZWxzZSBpZiAoX19idWlsdGluX2NvbnN0YW50X3AgKC0xKSAmJiAoLTEpID09IDApIF9fcmVzdWx0 ID0gKHMpLT5fbW9kZTsgZWxzZSBfX3Jlc3VsdCA9IF9JT19md2lkZSAocywgX19yZXN1bHQpOyBf X3Jlc3VsdDsgfSkgIT0gLTEpIHJldHVybiAtMTsKCgoKICBkbyB7IDsgaWYgKHMtPl9mbGFncyAm IDgpIHsgKCpfX2Vycm5vX2xvY2F0aW9uICgpKSA9ICg5KTsgcmV0dXJuIC0xOyB9IGlmIChmb3Jt YXQgPT0gKCh2b2lkICopMCkpIHsgKCpfX2Vycm5vX2xvY2F0aW9uICgpKSA9ICgyMik7IHJldHVy biAtMTsgfSB9IHdoaWxlICgwKTsKCgoKICBpZiAoCgogICAgICBzLT5fdnRhYmxlX29mZnNldCA9 PSAwICYmCgogICAgICAoeyBpbnQgX19yZXN1bHQgPSAoc2l6ZW9mIChjaGFyKSA9PSAxID8gLTEg OiAxKTsgaWYgKF9fcmVzdWx0IDwgMCAmJiAhICgwKSkgeyBpZiAoKHMpLT5fbW9kZSA9PSAwKSAo cyktPl9tb2RlID0gLTE7IF9fcmVzdWx0ID0gKHMpLT5fbW9kZTsgfSBlbHNlIGlmIChfX2J1aWx0 aW5fY29uc3RhbnRfcCAoc2l6ZW9mIChjaGFyKSA9PSAxID8gLTEgOiAxKSAmJiAoc2l6ZW9mIChj aGFyKSA9PSAxID8gLTEgOiAxKSA9PSAwKSBfX3Jlc3VsdCA9IChzKS0+X21vZGU7IGVsc2UgX19y ZXN1bHQgPSBfSU9fZndpZGUgKHMsIF9fcmVzdWx0KTsgX19yZXN1bHQ7IH0pCiAgICAgICE9IChz aXplb2YgKGNoYXIpID09IDEgPyAtMSA6IDEpKQoKICAgIHJldHVybiAoLTEpOwoKCiAgaWYgKCgo cyktPl9mbGFncyAmIDIpKQoKCiAgICByZXR1cm4gYnVmZmVyZWRfdmZwcmludGYgKHMsIGZvcm1h dCwgYXApOwoKCiAgZG9uZSA9IDA7CiAgZ3JvdXBpbmcgPSAoY29uc3QgY2hhciAqKSAtMTsKCgoK ICBfX2J1aWx0aW5fdmFfY29weShhcF9zYXZlLGFwKTsKCgoKICBuc3BlY3NfZG9uZSA9IDA7CgoK CgoKCiAgKF9fZXh0ZW5zaW9uX18gKF9fYnVpbHRpbl9jb25zdGFudF9wIChzaXplb2YgKG1ic3Rh dGVfdCkpICYmIChzaXplb2YgKG1ic3RhdGVfdCkpIDw9IDE2ID8gKChzaXplb2YgKG1ic3RhdGVf dCkpID09IDEgPyAoeyB2b2lkICpfX3MgPSAoJm1ic3RhdGUpOyAqKChfX3VpbnQ4X3QgKikgX19z KSA9IChfX3VpbnQ4X3QpICdcMCc7IF9fczsgfSkgOiAoeyB2b2lkICpfX3MgPSAoJm1ic3RhdGUp OyB1bmlvbiB7IHVuc2lnbmVkIGludCBfX3VpOyB1bnNpZ25lZCBzaG9ydCBpbnQgX191c2k7IHVu c2lnbmVkIGNoYXIgX191YzsgfSAqX191ID0gX19zOyBfX3VpbnQ4X3QgX19jID0gKF9fdWludDhf dCkgKCdcMCcpOyBzd2l0Y2ggKCh1bnNpZ25lZCBpbnQpIChzaXplb2YgKG1ic3RhdGVfdCkpKSB7 IGNhc2UgMTU6IF9fdS0+X191aSA9IF9fYyAqIDB4MDEwMTAxMDE7IF9fdSA9IF9fZXh0ZW5zaW9u X18gKCh2b2lkICopIF9fdSArIDQpOyBjYXNlIDExOiBfX3UtPl9fdWkgPSBfX2MgKiAweDAxMDEw MTAxOyBfX3UgPSBfX2V4dGVuc2lvbl9fICgodm9pZCAqKSBfX3UgKyA0KTsgY2FzZSA3OiBfX3Ut Pl9fdWkgPSBfX2MgKiAweDAxMDEwMTAxOyBfX3UgPSBfX2V4dGVuc2lvbl9fICgodm9pZCAqKSBf X3UgKyA0KTsgY2FzZSAzOiBfX3UtPl9fdXNpID0gKHVuc2lnbmVkIHNob3J0IGludCkgX19jICog MHgwMTAxOyBfX3UgPSBfX2V4dGVuc2lvbl9fICgodm9pZCAqKSBfX3UgKyAyKTsgX191LT5fX3Vj ID0gKHVuc2lnbmVkIGNoYXIpIF9fYzsgYnJlYWs7IGNhc2UgMTQ6IF9fdS0+X191aSA9IF9fYyAq IDB4MDEwMTAxMDE7IF9fdSA9IF9fZXh0ZW5zaW9uX18gKCh2b2lkICopIF9fdSArIDQpOyBjYXNl IDEwOiBfX3UtPl9fdWkgPSBfX2MgKiAweDAxMDEwMTAxOyBfX3UgPSBfX2V4dGVuc2lvbl9fICgo dm9pZCAqKSBfX3UgKyA0KTsgY2FzZSA2OiBfX3UtPl9fdWkgPSBfX2MgKiAweDAxMDEwMTAxOyBf X3UgPSBfX2V4dGVuc2lvbl9fICgodm9pZCAqKSBfX3UgKyA0KTsgY2FzZSAyOiBfX3UtPl9fdXNp ID0gKHVuc2lnbmVkIHNob3J0IGludCkgX19jICogMHgwMTAxOyBicmVhazsgY2FzZSAxMzogX191 LT5fX3VpID0gX19jICogMHgwMTAxMDEwMTsgX191ID0gX19leHRlbnNpb25fXyAoKHZvaWQgKikg X191ICsgNCk7IGNhc2UgOTogX191LT5fX3VpID0gX19jICogMHgwMTAxMDEwMTsgX191ID0gX19l eHRlbnNpb25fXyAoKHZvaWQgKikgX191ICsgNCk7IGNhc2UgNTogX191LT5fX3VpID0gX19jICog MHgwMTAxMDEwMTsgX191ID0gX19leHRlbnNpb25fXyAoKHZvaWQgKikgX191ICsgNCk7IGNhc2Ug MTogX191LT5fX3VjID0gKHVuc2lnbmVkIGNoYXIpIF9fYzsgYnJlYWs7IGNhc2UgMTY6IF9fdS0+ X191aSA9IF9fYyAqIDB4MDEwMTAxMDE7IF9fdSA9IF9fZXh0ZW5zaW9uX18gKCh2b2lkICopIF9f dSArIDQpOyBjYXNlIDEyOiBfX3UtPl9fdWkgPSBfX2MgKiAweDAxMDEwMTAxOyBfX3UgPSBfX2V4 dGVuc2lvbl9fICgodm9pZCAqKSBfX3UgKyA0KTsgY2FzZSA4OiBfX3UtPl9fdWkgPSBfX2MgKiAw eDAxMDEwMTAxOyBfX3UgPSBfX2V4dGVuc2lvbl9fICgodm9pZCAqKSBfX3UgKyA0KTsgY2FzZSA0 OiBfX3UtPl9fdWkgPSBfX2MgKiAweDAxMDEwMTAxOyBjYXNlIDA6IGJyZWFrOyB9IF9fczsgfSkp IDogKF9fYnVpbHRpbl9jb25zdGFudF9wICgnXDAnKSAmJiAoJ1wwJykgPT0gJ1wwJyA/ICh7IHZv aWQgKl9fcyA9ICgmbWJzdGF0ZSk7IF9fYnVpbHRpbl9tZW1zZXQgKF9fcywgJ1wwJywgc2l6ZW9m IChtYnN0YXRlX3QpKTsgX19zOyB9KSA6IG1lbXNldCAoJm1ic3RhdGUsICdcMCcsIHNpemVvZiAo bWJzdGF0ZV90KSkpKSk7CgoKICBmID0gbGVhZF9zdHJfZW5kID0gZmluZF9zcGVjIChmb3JtYXQs ICZtYnN0YXRlKTsKCgoKCiAgeyBzdHJ1Y3QgX3B0aHJlYWRfY2xlYW51cF9idWZmZXIgX2J1ZmZl cjsgaW50IF9hdmFpbCA9ICgxKSAmJiBfcHRocmVhZF9jbGVhbnVwX3B1c2hfZGVmZXIgIT0gKCh2 b2lkICopMCk7IGlmIChfYXZhaWwpIHsgX3B0aHJlYWRfY2xlYW51cF9wdXNoX2RlZmVyICgmX2J1 ZmZlciwgKCh2b2lkICgqKSAodm9pZCAqKSkgJl9JT19mdW5sb2NrZmlsZSksIChzKSk7IH07CiAg OwoKCgoKCgogIGRvIHsgaWYgKChzaXplX3QpICgoKihzdHJ1Y3QgX0lPX2p1bXBfdCAqKikgKCh2 b2lkICopICYoKHN0cnVjdCBfSU9fRklMRV9wbHVzICopICgocykpKS0+dnRhYmxlICsgKChzKSkt Pl92dGFibGVfb2Zmc2V0KSktPl9feHNwdXRuKSAoKHMpLCAoKChjb25zdCB1bnNpZ25lZCBjaGFy ICopIGZvcm1hdCkpLCAoKGxlYWRfc3RyX2VuZCAtIChjb25zdCB1bnNpZ25lZCBjaGFyICopIGZv cm1hdCkpKSAhPSAoc2l6ZV90KSAobGVhZF9zdHJfZW5kIC0gKGNvbnN0IHVuc2lnbmVkIGNoYXIg KikgZm9ybWF0KSkgeyBkb25lID0gLTE7IGdvdG8gYWxsX2RvbmU7IH0gZG9uZSArPSAobGVhZF9z dHJfZW5kIC0gKGNvbnN0IHVuc2lnbmVkIGNoYXIgKikgZm9ybWF0KTsgfSB3aGlsZSAoMCk7CgoK CiAgaWYgKCpmID09ICdcMCcpCiAgICBnb3RvIGFsbF9kb25lOwoKCiAgZG8KICAgIHsKCgoKCgoK ICAgICAgc3RhdGljIGNvbnN0IGludCBzdGVwMF9qdW1wc1szMF0gPSB7ICYmZG9fZm9ybV91bmtu b3duIC0gJiZkb19mb3JtX3Vua25vd24sICYmZG9fZmxhZ19zcGFjZSAtICYmZG9fZm9ybV91bmtu b3duLCAmJmRvX2ZsYWdfcGx1cyAtICYmZG9fZm9ybV91bmtub3duLCAmJmRvX2ZsYWdfbWludXMg LSAmJmRvX2Zvcm1fdW5rbm93biwgJiZkb19mbGFnX2hhc2ggLSAmJmRvX2Zvcm1fdW5rbm93biwg JiZkb19mbGFnX3plcm8gLSAmJmRvX2Zvcm1fdW5rbm93biwgJiZkb19mbGFnX3F1b3RlIC0gJiZk b19mb3JtX3Vua25vd24sICYmZG9fd2lkdGhfYXN0ZXJpY3MgLSAmJmRvX2Zvcm1fdW5rbm93biwg JiZkb193aWR0aCAtICYmZG9fZm9ybV91bmtub3duLCAmJmRvX3ByZWNpc2lvbiAtICYmZG9fZm9y bV91bmtub3duLCAmJmRvX21vZF9oYWxmIC0gJiZkb19mb3JtX3Vua25vd24sICYmZG9fbW9kX2xv bmcgLSAmJmRvX2Zvcm1fdW5rbm93biwgJiZkb19tb2RfbG9uZ2xvbmcgLSAmJmRvX2Zvcm1fdW5r bm93biwgJiZkb19tb2Rfc2l6ZV90IC0gJiZkb19mb3JtX3Vua25vd24sICYmZG9fZm9ybV9wZXJj ZW50IC0gJiZkb19mb3JtX3Vua25vd24sICYmZG9fZm9ybV9pbnRlZ2VyIC0gJiZkb19mb3JtX3Vu a25vd24sICYmZG9fZm9ybV91bnNpZ25lZCAtICYmZG9fZm9ybV91bmtub3duLCAmJmRvX2Zvcm1f b2N0YWwgLSAmJmRvX2Zvcm1fdW5rbm93biwgJiZkb19mb3JtX2hleGEgLSAmJmRvX2Zvcm1fdW5r bm93biwgJiZkb19mb3JtX2Zsb2F0IC0gJiZkb19mb3JtX3Vua25vd24sICYmZG9fZm9ybV9jaGFy YWN0ZXIgLSAmJmRvX2Zvcm1fdW5rbm93biwgJiZkb19mb3JtX3N0cmluZyAtICYmZG9fZm9ybV91 bmtub3duLCAmJmRvX2Zvcm1fcG9pbnRlciAtICYmZG9fZm9ybV91bmtub3duLCAmJmRvX2Zvcm1f bnVtYmVyIC0gJiZkb19mb3JtX3Vua25vd24sICYmZG9fZm9ybV9zdHJlcnJvciAtICYmZG9fZm9y bV91bmtub3duLCAmJmRvX2Zvcm1fd2NoYXJhY3RlciAtICYmZG9fZm9ybV91bmtub3duLCAmJmRv X2Zvcm1fZmxvYXRoZXggLSAmJmRvX2Zvcm1fdW5rbm93biwgJiZkb19tb2RfcHRyZGlmZl90IC0g JiZkb19mb3JtX3Vua25vd24sICYmZG9fbW9kX2ludG1heF90IC0gJiZkb19mb3JtX3Vua25vd24s ICYmZG9fZmxhZ19pMThuIC0gJiZkb19mb3JtX3Vua25vd24sIH07IHN0YXRpYyBjb25zdCBpbnQg c3RlcDFfanVtcHNbMzBdID0geyAmJmRvX2Zvcm1fdW5rbm93biAtICYmZG9fZm9ybV91bmtub3du LCAmJmRvX2Zvcm1fdW5rbm93biAtICYmZG9fZm9ybV91bmtub3duLCAmJmRvX2Zvcm1fdW5rbm93 biAtICYmZG9fZm9ybV91bmtub3duLCAmJmRvX2Zvcm1fdW5rbm93biAtICYmZG9fZm9ybV91bmtu b3duLCAmJmRvX2Zvcm1fdW5rbm93biAtICYmZG9fZm9ybV91bmtub3duLCAmJmRvX2Zvcm1fdW5r bm93biAtICYmZG9fZm9ybV91bmtub3duLCAmJmRvX2Zvcm1fdW5rbm93biAtICYmZG9fZm9ybV91 bmtub3duLCAmJmRvX2Zvcm1fdW5rbm93biAtICYmZG9fZm9ybV91bmtub3duLCAmJmRvX2Zvcm1f dW5rbm93biAtICYmZG9fZm9ybV91bmtub3duLCAmJmRvX3ByZWNpc2lvbiAtICYmZG9fZm9ybV91 bmtub3duLCAmJmRvX21vZF9oYWxmIC0gJiZkb19mb3JtX3Vua25vd24sICYmZG9fbW9kX2xvbmcg LSAmJmRvX2Zvcm1fdW5rbm93biwgJiZkb19tb2RfbG9uZ2xvbmcgLSAmJmRvX2Zvcm1fdW5rbm93 biwgJiZkb19tb2Rfc2l6ZV90IC0gJiZkb19mb3JtX3Vua25vd24sICYmZG9fZm9ybV9wZXJjZW50 IC0gJiZkb19mb3JtX3Vua25vd24sICYmZG9fZm9ybV9pbnRlZ2VyIC0gJiZkb19mb3JtX3Vua25v d24sICYmZG9fZm9ybV91bnNpZ25lZCAtICYmZG9fZm9ybV91bmtub3duLCAmJmRvX2Zvcm1fb2N0 YWwgLSAmJmRvX2Zvcm1fdW5rbm93biwgJiZkb19mb3JtX2hleGEgLSAmJmRvX2Zvcm1fdW5rbm93 biwgJiZkb19mb3JtX2Zsb2F0IC0gJiZkb19mb3JtX3Vua25vd24sICYmZG9fZm9ybV9jaGFyYWN0 ZXIgLSAmJmRvX2Zvcm1fdW5rbm93biwgJiZkb19mb3JtX3N0cmluZyAtICYmZG9fZm9ybV91bmtu b3duLCAmJmRvX2Zvcm1fcG9pbnRlciAtICYmZG9fZm9ybV91bmtub3duLCAmJmRvX2Zvcm1fbnVt YmVyIC0gJiZkb19mb3JtX3Vua25vd24sICYmZG9fZm9ybV9zdHJlcnJvciAtICYmZG9fZm9ybV91 bmtub3duLCAmJmRvX2Zvcm1fd2NoYXJhY3RlciAtICYmZG9fZm9ybV91bmtub3duLCAmJmRvX2Zv cm1fZmxvYXRoZXggLSAmJmRvX2Zvcm1fdW5rbm93biwgJiZkb19tb2RfcHRyZGlmZl90IC0gJiZk b19mb3JtX3Vua25vd24sICYmZG9fbW9kX2ludG1heF90IC0gJiZkb19mb3JtX3Vua25vd24sICYm ZG9fZmxhZ19pMThuIC0gJiZkb19mb3JtX3Vua25vd24gfTsgc3RhdGljIGNvbnN0IGludCBzdGVw Ml9qdW1wc1szMF0gPSB7ICYmZG9fZm9ybV91bmtub3duIC0gJiZkb19mb3JtX3Vua25vd24sICYm ZG9fZm9ybV91bmtub3duIC0gJiZkb19mb3JtX3Vua25vd24sICYmZG9fZm9ybV91bmtub3duIC0g JiZkb19mb3JtX3Vua25vd24sICYmZG9fZm9ybV91bmtub3duIC0gJiZkb19mb3JtX3Vua25vd24s ICYmZG9fZm9ybV91bmtub3duIC0gJiZkb19mb3JtX3Vua25vd24sICYmZG9fZm9ybV91bmtub3du IC0gJiZkb19mb3JtX3Vua25vd24sICYmZG9fZm9ybV91bmtub3duIC0gJiZkb19mb3JtX3Vua25v d24sICYmZG9fZm9ybV91bmtub3duIC0gJiZkb19mb3JtX3Vua25vd24sICYmZG9fZm9ybV91bmtu b3duIC0gJiZkb19mb3JtX3Vua25vd24sICYmZG9fZm9ybV91bmtub3duIC0gJiZkb19mb3JtX3Vu a25vd24sICYmZG9fbW9kX2hhbGYgLSAmJmRvX2Zvcm1fdW5rbm93biwgJiZkb19tb2RfbG9uZyAt ICYmZG9fZm9ybV91bmtub3duLCAmJmRvX21vZF9sb25nbG9uZyAtICYmZG9fZm9ybV91bmtub3du LCAmJmRvX21vZF9zaXplX3QgLSAmJmRvX2Zvcm1fdW5rbm93biwgJiZkb19mb3JtX3BlcmNlbnQg LSAmJmRvX2Zvcm1fdW5rbm93biwgJiZkb19mb3JtX2ludGVnZXIgLSAmJmRvX2Zvcm1fdW5rbm93 biwgJiZkb19mb3JtX3Vuc2lnbmVkIC0gJiZkb19mb3JtX3Vua25vd24sICYmZG9fZm9ybV9vY3Rh bCAtICYmZG9fZm9ybV91bmtub3duLCAmJmRvX2Zvcm1faGV4YSAtICYmZG9fZm9ybV91bmtub3du LCAmJmRvX2Zvcm1fZmxvYXQgLSAmJmRvX2Zvcm1fdW5rbm93biwgJiZkb19mb3JtX2NoYXJhY3Rl ciAtICYmZG9fZm9ybV91bmtub3duLCAmJmRvX2Zvcm1fc3RyaW5nIC0gJiZkb19mb3JtX3Vua25v d24sICYmZG9fZm9ybV9wb2ludGVyIC0gJiZkb19mb3JtX3Vua25vd24sICYmZG9fZm9ybV9udW1i ZXIgLSAmJmRvX2Zvcm1fdW5rbm93biwgJiZkb19mb3JtX3N0cmVycm9yIC0gJiZkb19mb3JtX3Vu a25vd24sICYmZG9fZm9ybV93Y2hhcmFjdGVyIC0gJiZkb19mb3JtX3Vua25vd24sICYmZG9fZm9y bV9mbG9hdGhleCAtICYmZG9fZm9ybV91bmtub3duLCAmJmRvX21vZF9wdHJkaWZmX3QgLSAmJmRv X2Zvcm1fdW5rbm93biwgJiZkb19tb2RfaW50bWF4X3QgLSAmJmRvX2Zvcm1fdW5rbm93biwgJiZk b19mbGFnX2kxOG4gLSAmJmRvX2Zvcm1fdW5rbm93biB9OyBzdGF0aWMgY29uc3QgaW50IHN0ZXAz YV9qdW1wc1szMF0gPSB7ICYmZG9fZm9ybV91bmtub3duIC0gJiZkb19mb3JtX3Vua25vd24sICYm ZG9fZm9ybV91bmtub3duIC0gJiZkb19mb3JtX3Vua25vd24sICYmZG9fZm9ybV91bmtub3duIC0g JiZkb19mb3JtX3Vua25vd24sICYmZG9fZm9ybV91bmtub3duIC0gJiZkb19mb3JtX3Vua25vd24s ICYmZG9fZm9ybV91bmtub3duIC0gJiZkb19mb3JtX3Vua25vd24sICYmZG9fZm9ybV91bmtub3du IC0gJiZkb19mb3JtX3Vua25vd24sICYmZG9fZm9ybV91bmtub3duIC0gJiZkb19mb3JtX3Vua25v d24sICYmZG9fZm9ybV91bmtub3duIC0gJiZkb19mb3JtX3Vua25vd24sICYmZG9fZm9ybV91bmtu b3duIC0gJiZkb19mb3JtX3Vua25vd24sICYmZG9fZm9ybV91bmtub3duIC0gJiZkb19mb3JtX3Vu a25vd24sICYmZG9fbW9kX2hhbGZoYWxmIC0gJiZkb19mb3JtX3Vua25vd24sICYmZG9fZm9ybV91 bmtub3duIC0gJiZkb19mb3JtX3Vua25vd24sICYmZG9fZm9ybV91bmtub3duIC0gJiZkb19mb3Jt X3Vua25vd24sICYmZG9fZm9ybV91bmtub3duIC0gJiZkb19mb3JtX3Vua25vd24sICYmZG9fZm9y bV9wZXJjZW50IC0gJiZkb19mb3JtX3Vua25vd24sICYmZG9fZm9ybV9pbnRlZ2VyIC0gJiZkb19m b3JtX3Vua25vd24sICYmZG9fZm9ybV91bnNpZ25lZCAtICYmZG9fZm9ybV91bmtub3duLCAmJmRv X2Zvcm1fb2N0YWwgLSAmJmRvX2Zvcm1fdW5rbm93biwgJiZkb19mb3JtX2hleGEgLSAmJmRvX2Zv cm1fdW5rbm93biwgJiZkb19mb3JtX3Vua25vd24gLSAmJmRvX2Zvcm1fdW5rbm93biwgJiZkb19m b3JtX3Vua25vd24gLSAmJmRvX2Zvcm1fdW5rbm93biwgJiZkb19mb3JtX3Vua25vd24gLSAmJmRv X2Zvcm1fdW5rbm93biwgJiZkb19mb3JtX3Vua25vd24gLSAmJmRvX2Zvcm1fdW5rbm93biwgJiZk b19mb3JtX251bWJlciAtICYmZG9fZm9ybV91bmtub3duLCAmJmRvX2Zvcm1fdW5rbm93biAtICYm ZG9fZm9ybV91bmtub3duLCAmJmRvX2Zvcm1fdW5rbm93biAtICYmZG9fZm9ybV91bmtub3duLCAm JmRvX2Zvcm1fdW5rbm93biAtICYmZG9fZm9ybV91bmtub3duLCAmJmRvX2Zvcm1fdW5rbm93biAt ICYmZG9fZm9ybV91bmtub3duLCAmJmRvX2Zvcm1fdW5rbm93biAtICYmZG9fZm9ybV91bmtub3du LCAmJmRvX2Zvcm1fdW5rbm93biAtICYmZG9fZm9ybV91bmtub3duIH07IHN0YXRpYyBjb25zdCBp bnQgc3RlcDNiX2p1bXBzWzMwXSA9IHsgJiZkb19mb3JtX3Vua25vd24gLSAmJmRvX2Zvcm1fdW5r bm93biwgJiZkb19mb3JtX3Vua25vd24gLSAmJmRvX2Zvcm1fdW5rbm93biwgJiZkb19mb3JtX3Vu a25vd24gLSAmJmRvX2Zvcm1fdW5rbm93biwgJiZkb19mb3JtX3Vua25vd24gLSAmJmRvX2Zvcm1f dW5rbm93biwgJiZkb19mb3JtX3Vua25vd24gLSAmJmRvX2Zvcm1fdW5rbm93biwgJiZkb19mb3Jt X3Vua25vd24gLSAmJmRvX2Zvcm1fdW5rbm93biwgJiZkb19mb3JtX3Vua25vd24gLSAmJmRvX2Zv cm1fdW5rbm93biwgJiZkb19mb3JtX3Vua25vd24gLSAmJmRvX2Zvcm1fdW5rbm93biwgJiZkb19m b3JtX3Vua25vd24gLSAmJmRvX2Zvcm1fdW5rbm93biwgJiZkb19mb3JtX3Vua25vd24gLSAmJmRv X2Zvcm1fdW5rbm93biwgJiZkb19mb3JtX3Vua25vd24gLSAmJmRvX2Zvcm1fdW5rbm93biwgJiZk b19tb2RfbG9uZ2xvbmcgLSAmJmRvX2Zvcm1fdW5rbm93biwgJiZkb19mb3JtX3Vua25vd24gLSAm JmRvX2Zvcm1fdW5rbm93biwgJiZkb19mb3JtX3Vua25vd24gLSAmJmRvX2Zvcm1fdW5rbm93biwg JiZkb19mb3JtX3BlcmNlbnQgLSAmJmRvX2Zvcm1fdW5rbm93biwgJiZkb19mb3JtX2ludGVnZXIg LSAmJmRvX2Zvcm1fdW5rbm93biwgJiZkb19mb3JtX3Vuc2lnbmVkIC0gJiZkb19mb3JtX3Vua25v d24sICYmZG9fZm9ybV9vY3RhbCAtICYmZG9fZm9ybV91bmtub3duLCAmJmRvX2Zvcm1faGV4YSAt ICYmZG9fZm9ybV91bmtub3duLCAmJmRvX2Zvcm1fZmxvYXQgLSAmJmRvX2Zvcm1fdW5rbm93biwg JiZkb19mb3JtX2NoYXJhY3RlciAtICYmZG9fZm9ybV91bmtub3duLCAmJmRvX2Zvcm1fc3RyaW5n IC0gJiZkb19mb3JtX3Vua25vd24sICYmZG9fZm9ybV9wb2ludGVyIC0gJiZkb19mb3JtX3Vua25v d24sICYmZG9fZm9ybV9udW1iZXIgLSAmJmRvX2Zvcm1fdW5rbm93biwgJiZkb19mb3JtX3N0cmVy cm9yIC0gJiZkb19mb3JtX3Vua25vd24sICYmZG9fZm9ybV93Y2hhcmFjdGVyIC0gJiZkb19mb3Jt X3Vua25vd24sICYmZG9fZm9ybV9mbG9hdGhleCAtICYmZG9fZm9ybV91bmtub3duLCAmJmRvX2Zv cm1fdW5rbm93biAtICYmZG9fZm9ybV91bmtub3duLCAmJmRvX2Zvcm1fdW5rbm93biAtICYmZG9f Zm9ybV91bmtub3duLCAmJmRvX2Zvcm1fdW5rbm93biAtICYmZG9fZm9ybV91bmtub3duIH07CiAg ICAgIHN0YXRpYyBjb25zdCBpbnQgc3RlcDRfanVtcHNbMzBdID0geyAmJmRvX2Zvcm1fdW5rbm93 biAtICYmZG9fZm9ybV91bmtub3duLCAmJmRvX2Zvcm1fdW5rbm93biAtICYmZG9fZm9ybV91bmtu b3duLCAmJmRvX2Zvcm1fdW5rbm93biAtICYmZG9fZm9ybV91bmtub3duLCAmJmRvX2Zvcm1fdW5r bm93biAtICYmZG9fZm9ybV91bmtub3duLCAmJmRvX2Zvcm1fdW5rbm93biAtICYmZG9fZm9ybV91 bmtub3duLCAmJmRvX2Zvcm1fdW5rbm93biAtICYmZG9fZm9ybV91bmtub3duLCAmJmRvX2Zvcm1f dW5rbm93biAtICYmZG9fZm9ybV91bmtub3duLCAmJmRvX2Zvcm1fdW5rbm93biAtICYmZG9fZm9y bV91bmtub3duLCAmJmRvX2Zvcm1fdW5rbm93biAtICYmZG9fZm9ybV91bmtub3duLCAmJmRvX2Zv cm1fdW5rbm93biAtICYmZG9fZm9ybV91bmtub3duLCAmJmRvX2Zvcm1fdW5rbm93biAtICYmZG9f Zm9ybV91bmtub3duLCAmJmRvX2Zvcm1fdW5rbm93biAtICYmZG9fZm9ybV91bmtub3duLCAmJmRv X2Zvcm1fdW5rbm93biAtICYmZG9fZm9ybV91bmtub3duLCAmJmRvX2Zvcm1fdW5rbm93biAtICYm ZG9fZm9ybV91bmtub3duLCAmJmRvX2Zvcm1fcGVyY2VudCAtICYmZG9fZm9ybV91bmtub3duLCAm JmRvX2Zvcm1faW50ZWdlciAtICYmZG9fZm9ybV91bmtub3duLCAmJmRvX2Zvcm1fdW5zaWduZWQg LSAmJmRvX2Zvcm1fdW5rbm93biwgJiZkb19mb3JtX29jdGFsIC0gJiZkb19mb3JtX3Vua25vd24s ICYmZG9fZm9ybV9oZXhhIC0gJiZkb19mb3JtX3Vua25vd24sICYmZG9fZm9ybV9mbG9hdCAtICYm ZG9fZm9ybV91bmtub3duLCAmJmRvX2Zvcm1fY2hhcmFjdGVyIC0gJiZkb19mb3JtX3Vua25vd24s ICYmZG9fZm9ybV9zdHJpbmcgLSAmJmRvX2Zvcm1fdW5rbm93biwgJiZkb19mb3JtX3BvaW50ZXIg LSAmJmRvX2Zvcm1fdW5rbm93biwgJiZkb19mb3JtX251bWJlciAtICYmZG9fZm9ybV91bmtub3du LCAmJmRvX2Zvcm1fc3RyZXJyb3IgLSAmJmRvX2Zvcm1fdW5rbm93biwgJiZkb19mb3JtX3djaGFy YWN0ZXIgLSAmJmRvX2Zvcm1fdW5rbm93biwgJiZkb19mb3JtX2Zsb2F0aGV4IC0gJiZkb19mb3Jt X3Vua25vd24sICYmZG9fZm9ybV91bmtub3duIC0gJiZkb19mb3JtX3Vua25vd24sICYmZG9fZm9y bV91bmtub3duIC0gJiZkb19mb3JtX3Vua25vd24sICYmZG9fZm9ybV91bmtub3duIC0gJiZkb19m b3JtX3Vua25vd24gfTsKCiAgICAgIHVuaW9uIHByaW50Zl9hcmcgKmFyZ3NfdmFsdWU7CiAgICAg IGludCBpc19uZWdhdGl2ZTsKICAgICAgdW5pb24KICAgICAgewogICAgICAgIHVuc2lnbmVkIGxv bmcgbG9uZyBpbnQgbG9uZ2xvbmc7CiAgICAgICAgdW5zaWduZWQgbG9uZyBpbnQgd29yZDsKICAg ICAgfSBudW1iZXI7CiAgICAgIGludCBiYXNlOwogICAgICB1bmlvbiBwcmludGZfYXJnIHRoZV9h cmc7CiAgICAgIGNoYXIgKnN0cmluZzsKICAgICAgaW50IGFsdCA9IDA7CiAgICAgIGludCBzcGFj ZSA9IDA7CiAgICAgIGludCBsZWZ0ID0gMDsKICAgICAgaW50IHNob3dzaWduID0gMDsKICAgICAg aW50IGdyb3VwID0gMDsKICAgICAgaW50IGlzX2xvbmdfZG91YmxlID0gMDsKICAgICAgaW50IGlz X3Nob3J0ID0gMDsKICAgICAgaW50IGlzX2xvbmcgPSAwOwogICAgICBpbnQgaXNfY2hhciA9IDA7 CiAgICAgIGludCB3aWR0aCA9IDA7CiAgICAgIGludCBwcmVjID0gLTE7CgoKICAgICAgaW50IHVz ZV9vdXRkaWdpdHMgPSAwOwogICAgICB1bnNpZ25lZCBjaGFyIHBhZCA9ICcgJzsKICAgICAgY2hh ciBzcGVjOwoKICAgICAgd29ya3N0YXJ0ID0gKCh2b2lkICopMCk7CiAgICAgIHdvcmtlbmQgPSAm d29ya19idWZmZXJbc2l6ZW9mICh3b3JrX2J1ZmZlcikgLyBzaXplb2YgKGNoYXIpXTsKCgogICAg ICBkbyB7IGludCBvZmZzZXQ7IHZvaWQgKiBwdHI7IHNwZWMgPSAoKisrZik7IG9mZnNldCA9ICgo c3BlYykgPCAnICcgfHwgKHNwZWMpID4gJ3onKSA/ICYmZG9fZm9ybV91bmtub3duIC0gJiZkb19m b3JtX3Vua25vd24gOiBzdGVwMF9qdW1wc1soanVtcF90YWJsZVsoaW50KSAoc3BlYykgLSAnICdd KV07IHB0ciA9ICYmZG9fZm9ybV91bmtub3duICsgb2Zmc2V0OyBnb3RvICpwdHI7IH0gd2hpbGUg KDApOwoKCiAgICBkb19mbGFnX3NwYWNlOgogICAgICBzcGFjZSA9IDE7CiAgICAgIGRvIHsgaW50 IG9mZnNldDsgdm9pZCAqIHB0cjsgc3BlYyA9ICgqKytmKTsgb2Zmc2V0ID0gKChzcGVjKSA8ICcg JyB8fCAoc3BlYykgPiAneicpID8gJiZkb19mb3JtX3Vua25vd24gLSAmJmRvX2Zvcm1fdW5rbm93 biA6IHN0ZXAwX2p1bXBzWyhqdW1wX3RhYmxlWyhpbnQpIChzcGVjKSAtICcgJ10pXTsgcHRyID0g JiZkb19mb3JtX3Vua25vd24gKyBvZmZzZXQ7IGdvdG8gKnB0cjsgfSB3aGlsZSAoMCk7CgoKICAg IGRvX2ZsYWdfcGx1czoKICAgICAgc2hvd3NpZ24gPSAxOwogICAgICBkbyB7IGludCBvZmZzZXQ7 IHZvaWQgKiBwdHI7IHNwZWMgPSAoKisrZik7IG9mZnNldCA9ICgoc3BlYykgPCAnICcgfHwgKHNw ZWMpID4gJ3onKSA/ICYmZG9fZm9ybV91bmtub3duIC0gJiZkb19mb3JtX3Vua25vd24gOiBzdGVw MF9qdW1wc1soanVtcF90YWJsZVsoaW50KSAoc3BlYykgLSAnICddKV07IHB0ciA9ICYmZG9fZm9y bV91bmtub3duICsgb2Zmc2V0OyBnb3RvICpwdHI7IH0gd2hpbGUgKDApOwoKCiAgICBkb19mbGFn X21pbnVzOgogICAgICBsZWZ0ID0gMTsKICAgICAgcGFkID0gJyAnOwogICAgICBkbyB7IGludCBv ZmZzZXQ7IHZvaWQgKiBwdHI7IHNwZWMgPSAoKisrZik7IG9mZnNldCA9ICgoc3BlYykgPCAnICcg fHwgKHNwZWMpID4gJ3onKSA/ICYmZG9fZm9ybV91bmtub3duIC0gJiZkb19mb3JtX3Vua25vd24g OiBzdGVwMF9qdW1wc1soanVtcF90YWJsZVsoaW50KSAoc3BlYykgLSAnICddKV07IHB0ciA9ICYm ZG9fZm9ybV91bmtub3duICsgb2Zmc2V0OyBnb3RvICpwdHI7IH0gd2hpbGUgKDApOwoKCiAgICBk b19mbGFnX2hhc2g6CiAgICAgIGFsdCA9IDE7CiAgICAgIGRvIHsgaW50IG9mZnNldDsgdm9pZCAq IHB0cjsgc3BlYyA9ICgqKytmKTsgb2Zmc2V0ID0gKChzcGVjKSA8ICcgJyB8fCAoc3BlYykgPiAn eicpID8gJiZkb19mb3JtX3Vua25vd24gLSAmJmRvX2Zvcm1fdW5rbm93biA6IHN0ZXAwX2p1bXBz WyhqdW1wX3RhYmxlWyhpbnQpIChzcGVjKSAtICcgJ10pXTsgcHRyID0gJiZkb19mb3JtX3Vua25v d24gKyBvZmZzZXQ7IGdvdG8gKnB0cjsgfSB3aGlsZSAoMCk7CgoKICAgIGRvX2ZsYWdfemVybzoK ICAgICAgaWYgKCFsZWZ0KQogICAgICAgIHBhZCA9ICcwJzsKICAgICAgZG8geyBpbnQgb2Zmc2V0 OyB2b2lkICogcHRyOyBzcGVjID0gKCorK2YpOyBvZmZzZXQgPSAoKHNwZWMpIDwgJyAnIHx8IChz cGVjKSA+ICd6JykgPyAmJmRvX2Zvcm1fdW5rbm93biAtICYmZG9fZm9ybV91bmtub3duIDogc3Rl cDBfanVtcHNbKGp1bXBfdGFibGVbKGludCkgKHNwZWMpIC0gJyAnXSldOyBwdHIgPSAmJmRvX2Zv cm1fdW5rbm93biArIG9mZnNldDsgZ290byAqcHRyOyB9IHdoaWxlICgwKTsKCgogICAgZG9fZmxh Z19xdW90ZToKICAgICAgZ3JvdXAgPSAxOwoKICAgICAgaWYgKGdyb3VwaW5nID09IChjb25zdCBj aGFyICopIC0xKQogICAgICAgIHsKCgoKCiAgICAgICAgICB0aG91c2FuZHNfc2VwID0gKCgoKF9f bG9jYWxlX3QpIChfX2xpYmNfaW50ZXJuYWxfdHNkX2dldCAhPSAoKHZvaWQgKikwKSA/IF9fbGli Y19pbnRlcm5hbF90c2RfZ2V0IChfTElCQ19UU0RfS0VZX0xPQ0FMRSkgOiBfX2xpYmNfdHNkX0xP Q0FMRV9kYXRhKSktPl9fbG9jYWxlc1tfX0xDX05VTUVSSUNdKS0+dmFsdWVzWygoaW50KSAoX19U SE9VU0FORFNfU0VQKSAmIDB4ZmZmZildLnN0cmluZyk7CgoKICAgICAgICAgIGdyb3VwaW5nID0g KCgoKF9fbG9jYWxlX3QpIChfX2xpYmNfaW50ZXJuYWxfdHNkX2dldCAhPSAoKHZvaWQgKikwKSA/ IF9fbGliY19pbnRlcm5hbF90c2RfZ2V0IChfTElCQ19UU0RfS0VZX0xPQ0FMRSkgOiBfX2xpYmNf dHNkX0xPQ0FMRV9kYXRhKSktPl9fbG9jYWxlc1tfX0xDX05VTUVSSUNdKS0+dmFsdWVzWygoaW50 KSAoX19HUk9VUElORykgJiAweGZmZmYpXS5zdHJpbmcpOwogICAgICAgICAgaWYgKCpncm91cGlu ZyA9PSAnXDAnIHx8ICpncm91cGluZyA9PSAxMjcKCgoKICAgICAgICAgICAgICB8fCAqdGhvdXNh bmRzX3NlcCA9PSAnXDAnCgogICAgICAgICAgICAgICkKICAgICAgICAgICAgZ3JvdXBpbmcgPSAo KHZvaWQgKikwKTsKICAgICAgICB9CiAgICAgIGRvIHsgaW50IG9mZnNldDsgdm9pZCAqIHB0cjsg c3BlYyA9ICgqKytmKTsgb2Zmc2V0ID0gKChzcGVjKSA8ICcgJyB8fCAoc3BlYykgPiAneicpID8g JiZkb19mb3JtX3Vua25vd24gLSAmJmRvX2Zvcm1fdW5rbm93biA6IHN0ZXAwX2p1bXBzWyhqdW1w X3RhYmxlWyhpbnQpIChzcGVjKSAtICcgJ10pXTsgcHRyID0gJiZkb19mb3JtX3Vua25vd24gKyBv ZmZzZXQ7IGdvdG8gKnB0cjsgfSB3aGlsZSAoMCk7CgogICAgZG9fZmxhZ19pMThuOgogICAgICB1 c2Vfb3V0ZGlnaXRzID0gMTsKICAgICAgZG8geyBpbnQgb2Zmc2V0OyB2b2lkICogcHRyOyBzcGVj ID0gKCorK2YpOyBvZmZzZXQgPSAoKHNwZWMpIDwgJyAnIHx8IChzcGVjKSA+ICd6JykgPyAmJmRv X2Zvcm1fdW5rbm93biAtICYmZG9fZm9ybV91bmtub3duIDogc3RlcDBfanVtcHNbKGp1bXBfdGFi bGVbKGludCkgKHNwZWMpIC0gJyAnXSldOyBwdHIgPSAmJmRvX2Zvcm1fdW5rbm93biArIG9mZnNl dDsgZ290byAqcHRyOyB9IHdoaWxlICgwKTsKCgogICAgZG9fd2lkdGhfYXN0ZXJpY3M6CiAgICAg IHsKICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICp0bXA7CgogICAgICAgIHRtcCA9ICsrZjsK ICAgICAgICBpZiAoKCh1bnNpZ25lZCBpbnQpICgoKnRtcCkgLSAnMCcpIDwgMTApICYmIHJlYWRf aW50ICgmdG1wKSAmJiAqdG1wID09ICckJykKCiAgICAgICAgICBnb3RvIGRvX3Bvc2l0aW9uYWw7 CgogICAgICAgIHdpZHRoID0gX19idWlsdGluX3ZhX2FyZyhhcCxpbnQpOwoKCiAgICAgICAgaWYg KHdpZHRoIDwgMCkKICAgICAgICAgIHsKICAgICAgICAgICAgd2lkdGggPSAtd2lkdGg7CiAgICAg ICAgICAgIHBhZCA9ICcgJzsKICAgICAgICAgICAgbGVmdCA9IDE7CiAgICAgICAgICB9CgogICAg ICAgIGlmICh3aWR0aCArIDMyID49IChpbnQpIChzaXplb2YgKHdvcmtfYnVmZmVyKQogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAvIHNpemVvZiAod29ya19idWZmZXJbMF0pKSkKICAg ICAgICAgIHsKCgogICAgICAgICAgICBpZiAoX19saWJjX3VzZV9hbGxvY2EgKCh3aWR0aCArIDMy KSAqIHNpemVvZiAoY2hhcikpKQogICAgICAgICAgICAgIHdvcmtlbmQgPSAoKGNoYXIgKikgX19i dWlsdGluX2FsbG9jYSAoKHdpZHRoICsgMzIpICogc2l6ZW9mIChjaGFyKSkKICAgICAgICAgICAg ICAgICAgICAgICAgICsgKHdpZHRoICsgMzIpKTsKICAgICAgICAgICAgZWxzZQogICAgICAgICAg ICAgIHsKICAgICAgICAgICAgICAgIHdvcmtzdGFydCA9IChjaGFyICopIG1hbGxvYyAoKHdpZHRo ICsgMzIpICogc2l6ZW9mIChjaGFyKSk7CiAgICAgICAgICAgICAgICBpZiAod29ya3N0YXJ0ID09 ICgodm9pZCAqKTApKQogICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgZG9u ZSA9IC0xOwogICAgICAgICAgICAgICAgICAgIGdvdG8gYWxsX2RvbmU7CiAgICAgICAgICAgICAg ICAgIH0KICAgICAgICAgICAgICAgIHdvcmtlbmQgPSB3b3Jrc3RhcnQgKyAod2lkdGggKyAzMik7 CiAgICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICB9CiAgICAgIGRvIHsgaW50IG9mZnNl dDsgdm9pZCAqIHB0cjsgc3BlYyA9ICgqZik7IG9mZnNldCA9ICgoc3BlYykgPCAnICcgfHwgKHNw ZWMpID4gJ3onKSA/ICYmZG9fZm9ybV91bmtub3duIC0gJiZkb19mb3JtX3Vua25vd24gOiBzdGVw MV9qdW1wc1soanVtcF90YWJsZVsoaW50KSAoc3BlYykgLSAnICddKV07IHB0ciA9ICYmZG9fZm9y bV91bmtub3duICsgb2Zmc2V0OyBnb3RvICpwdHI7IH0gd2hpbGUgKDApOwoKCiAgICBkb193aWR0 aDoKICAgICAgd2lkdGggPSByZWFkX2ludCAoJmYpOwoKICAgICAgaWYgKHdpZHRoICsgMzIgPj0g KGludCkgKHNpemVvZiAod29ya19idWZmZXIpIC8gc2l6ZW9mICh3b3JrX2J1ZmZlclswXSkpKQog ICAgICAgIHsKCgogICAgICAgICAgaWYgKF9fbGliY191c2VfYWxsb2NhICgod2lkdGggKyAzMikg KiBzaXplb2YgKGNoYXIpKSkKICAgICAgICAgICAgd29ya2VuZCA9ICgoY2hhciAqKSBfX2J1aWx0 aW5fYWxsb2NhICgod2lkdGggKyAzMikgKiBzaXplb2YgKGNoYXIpKQogICAgICAgICAgICAgICAg ICAgICAgICsgKHdpZHRoICsgMzIpKTsKICAgICAgICAgIGVsc2UKICAgICAgICAgICAgewogICAg ICAgICAgICAgIHdvcmtzdGFydCA9IChjaGFyICopIG1hbGxvYyAoKHdpZHRoICsgMzIpICogc2l6 ZW9mIChjaGFyKSk7CiAgICAgICAgICAgICAgaWYgKHdvcmtzdGFydCA9PSAoKHZvaWQgKikwKSkK ICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgZG9uZSA9IC0xOwogICAgICAgICAg ICAgICAgICBnb3RvIGFsbF9kb25lOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIHdv cmtlbmQgPSB3b3Jrc3RhcnQgKyAod2lkdGggKyAzMik7CiAgICAgICAgICAgIH0KICAgICAgICB9 CiAgICAgIGlmICgqZiA9PSAnJCcpCgogICAgICAgIGdvdG8gZG9fcG9zaXRpb25hbDsKICAgICAg ZG8geyBpbnQgb2Zmc2V0OyB2b2lkICogcHRyOyBzcGVjID0gKCpmKTsgb2Zmc2V0ID0gKChzcGVj KSA8ICcgJyB8fCAoc3BlYykgPiAneicpID8gJiZkb19mb3JtX3Vua25vd24gLSAmJmRvX2Zvcm1f dW5rbm93biA6IHN0ZXAxX2p1bXBzWyhqdW1wX3RhYmxlWyhpbnQpIChzcGVjKSAtICcgJ10pXTsg cHRyID0gJiZkb19mb3JtX3Vua25vd24gKyBvZmZzZXQ7IGdvdG8gKnB0cjsgfSB3aGlsZSAoMCk7 CgogICAgZG9fcHJlY2lzaW9uOgogICAgICArK2Y7CiAgICAgIGlmICgqZiA9PSAnKicpCiAgICAg ICAgewogICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqdG1wOwoKICAgICAgICAgIHRtcCA9 ICsrZjsKICAgICAgICAgIGlmICgoKHVuc2lnbmVkIGludCkgKCgqdG1wKSAtICcwJykgPCAxMCkg JiYgcmVhZF9pbnQgKCZ0bXApID4gMCAmJiAqdG1wID09ICckJykKCiAgICAgICAgICAgIGdvdG8g ZG9fcG9zaXRpb25hbDsKCiAgICAgICAgICBwcmVjID0gX19idWlsdGluX3ZhX2FyZyhhcCxpbnQp OwoKCiAgICAgICAgICBpZiAocHJlYyA8IDApCiAgICAgICAgICAgIHByZWMgPSAtMTsKICAgICAg ICB9CiAgICAgIGVsc2UgaWYgKCgodW5zaWduZWQgaW50KSAoKCpmKSAtICcwJykgPCAxMCkpCiAg ICAgICAgcHJlYyA9IHJlYWRfaW50ICgmZik7CiAgICAgIGVsc2UKICAgICAgICBwcmVjID0gMDsK ICAgICAgaWYgKHByZWMgPiB3aWR0aAogICAgICAgICAgJiYgcHJlYyArIDMyID4gKGludCkoc2l6 ZW9mICh3b3JrX2J1ZmZlcikgLyBzaXplb2YgKHdvcmtfYnVmZmVyWzBdKSkpCiAgICAgICAgewog ICAgICAgICAgaWYgKF9fbGliY191c2VfYWxsb2NhICgocHJlYyArIDMyKSAqIHNpemVvZiAoY2hh cikpKQogICAgICAgICAgICB3b3JrZW5kID0gKChjaGFyICopIF9fYnVpbHRpbl9hbGxvY2EgKChw cmVjICsgMzIpICogc2l6ZW9mIChjaGFyKSkpCiAgICAgICAgICAgICAgICAgICAgICArIChwcmVj ICsgMzIpOwogICAgICAgICAgZWxzZQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgd29ya3N0 YXJ0ID0gKGNoYXIgKikgbWFsbG9jICgocHJlYyArIDMyKSAqIHNpemVvZiAoY2hhcikpOwogICAg ICAgICAgICAgIGlmICh3b3Jrc3RhcnQgPT0gKCh2b2lkICopMCkpCiAgICAgICAgICAgICAgICB7 CiAgICAgICAgICAgICAgICAgIGRvbmUgPSAtMTsKICAgICAgICAgICAgICAgICAgZ290byBhbGxf ZG9uZTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICB3b3JrZW5kID0gd29ya3N0YXJ0 ICsgKHByZWMgKyAzMik7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIGRvIHsgaW50IG9m ZnNldDsgdm9pZCAqIHB0cjsgc3BlYyA9ICgqZik7IG9mZnNldCA9ICgoc3BlYykgPCAnICcgfHwg KHNwZWMpID4gJ3onKSA/ICYmZG9fZm9ybV91bmtub3duIC0gJiZkb19mb3JtX3Vua25vd24gOiBz dGVwMl9qdW1wc1soanVtcF90YWJsZVsoaW50KSAoc3BlYykgLSAnICddKV07IHB0ciA9ICYmZG9f Zm9ybV91bmtub3duICsgb2Zmc2V0OyBnb3RvICpwdHI7IH0gd2hpbGUgKDApOwoKCiAgICBkb19t b2RfaGFsZjoKICAgICAgaXNfc2hvcnQgPSAxOwogICAgICBkbyB7IGludCBvZmZzZXQ7IHZvaWQg KiBwdHI7IHNwZWMgPSAoKisrZik7IG9mZnNldCA9ICgoc3BlYykgPCAnICcgfHwgKHNwZWMpID4g J3onKSA/ICYmZG9fZm9ybV91bmtub3duIC0gJiZkb19mb3JtX3Vua25vd24gOiBzdGVwM2FfanVt cHNbKGp1bXBfdGFibGVbKGludCkgKHNwZWMpIC0gJyAnXSldOyBwdHIgPSAmJmRvX2Zvcm1fdW5r bm93biArIG9mZnNldDsgZ290byAqcHRyOyB9IHdoaWxlICgwKTsKCgogICAgZG9fbW9kX2hhbGZo YWxmOgogICAgICBpc19zaG9ydCA9IDA7CiAgICAgIGlzX2NoYXIgPSAxOwogICAgICBkbyB7IGlu dCBvZmZzZXQ7IHZvaWQgKiBwdHI7IHNwZWMgPSAoKisrZik7IG9mZnNldCA9ICgoc3BlYykgPCAn ICcgfHwgKHNwZWMpID4gJ3onKSA/ICYmZG9fZm9ybV91bmtub3duIC0gJiZkb19mb3JtX3Vua25v d24gOiBzdGVwNF9qdW1wc1soanVtcF90YWJsZVsoaW50KSAoc3BlYykgLSAnICddKV07IHB0ciA9 ICYmZG9fZm9ybV91bmtub3duICsgb2Zmc2V0OyBnb3RvICpwdHI7IH0gd2hpbGUgKDApOwoKCiAg ICBkb19tb2RfbG9uZzoKICAgICAgaXNfbG9uZyA9IDE7CiAgICAgIGRvIHsgaW50IG9mZnNldDsg dm9pZCAqIHB0cjsgc3BlYyA9ICgqKytmKTsgb2Zmc2V0ID0gKChzcGVjKSA8ICcgJyB8fCAoc3Bl YykgPiAneicpID8gJiZkb19mb3JtX3Vua25vd24gLSAmJmRvX2Zvcm1fdW5rbm93biA6IHN0ZXAz Yl9qdW1wc1soanVtcF90YWJsZVsoaW50KSAoc3BlYykgLSAnICddKV07IHB0ciA9ICYmZG9fZm9y bV91bmtub3duICsgb2Zmc2V0OyBnb3RvICpwdHI7IH0gd2hpbGUgKDApOwoKCgogICAgZG9fbW9k X2xvbmdsb25nOgogICAgICBpc19sb25nX2RvdWJsZSA9IDE7CiAgICAgIGlzX2xvbmcgPSAxOwog ICAgICBkbyB7IGludCBvZmZzZXQ7IHZvaWQgKiBwdHI7IHNwZWMgPSAoKisrZik7IG9mZnNldCA9 ICgoc3BlYykgPCAnICcgfHwgKHNwZWMpID4gJ3onKSA/ICYmZG9fZm9ybV91bmtub3duIC0gJiZk b19mb3JtX3Vua25vd24gOiBzdGVwNF9qdW1wc1soanVtcF90YWJsZVsoaW50KSAoc3BlYykgLSAn ICddKV07IHB0ciA9ICYmZG9fZm9ybV91bmtub3duICsgb2Zmc2V0OyBnb3RvICpwdHI7IH0gd2hp bGUgKDApOwoKICAgIGRvX21vZF9zaXplX3Q6CiAgICAgIGlzX2xvbmdfZG91YmxlID0gc2l6ZW9m IChzaXplX3QpID4gc2l6ZW9mICh1bnNpZ25lZCBsb25nIGludCk7CiAgICAgIGlzX2xvbmcgPSBz aXplb2YgKHNpemVfdCkgPiBzaXplb2YgKHVuc2lnbmVkIGludCk7CiAgICAgIGRvIHsgaW50IG9m ZnNldDsgdm9pZCAqIHB0cjsgc3BlYyA9ICgqKytmKTsgb2Zmc2V0ID0gKChzcGVjKSA8ICcgJyB8 fCAoc3BlYykgPiAneicpID8gJiZkb19mb3JtX3Vua25vd24gLSAmJmRvX2Zvcm1fdW5rbm93biA6 IHN0ZXA0X2p1bXBzWyhqdW1wX3RhYmxlWyhpbnQpIChzcGVjKSAtICcgJ10pXTsgcHRyID0gJiZk b19mb3JtX3Vua25vd24gKyBvZmZzZXQ7IGdvdG8gKnB0cjsgfSB3aGlsZSAoMCk7CgogICAgZG9f bW9kX3B0cmRpZmZfdDoKICAgICAgaXNfbG9uZ19kb3VibGUgPSBzaXplb2YgKHB0cmRpZmZfdCkg PiBzaXplb2YgKHVuc2lnbmVkIGxvbmcgaW50KTsKICAgICAgaXNfbG9uZyA9IHNpemVvZiAocHRy ZGlmZl90KSA+IHNpemVvZiAodW5zaWduZWQgaW50KTsKICAgICAgZG8geyBpbnQgb2Zmc2V0OyB2 b2lkICogcHRyOyBzcGVjID0gKCorK2YpOyBvZmZzZXQgPSAoKHNwZWMpIDwgJyAnIHx8IChzcGVj KSA+ICd6JykgPyAmJmRvX2Zvcm1fdW5rbm93biAtICYmZG9fZm9ybV91bmtub3duIDogc3RlcDRf anVtcHNbKGp1bXBfdGFibGVbKGludCkgKHNwZWMpIC0gJyAnXSldOyBwdHIgPSAmJmRvX2Zvcm1f dW5rbm93biArIG9mZnNldDsgZ290byAqcHRyOyB9IHdoaWxlICgwKTsKCiAgICBkb19tb2RfaW50 bWF4X3Q6CiAgICAgIGlzX2xvbmdfZG91YmxlID0gc2l6ZW9mIChpbnRtYXhfdCkgPiBzaXplb2Yg KHVuc2lnbmVkIGxvbmcgaW50KTsKICAgICAgaXNfbG9uZyA9IHNpemVvZiAoaW50bWF4X3QpID4g c2l6ZW9mICh1bnNpZ25lZCBpbnQpOwogICAgICBkbyB7IGludCBvZmZzZXQ7IHZvaWQgKiBwdHI7 IHNwZWMgPSAoKisrZik7IG9mZnNldCA9ICgoc3BlYykgPCAnICcgfHwgKHNwZWMpID4gJ3onKSA/ ICYmZG9fZm9ybV91bmtub3duIC0gJiZkb19mb3JtX3Vua25vd24gOiBzdGVwNF9qdW1wc1soanVt cF90YWJsZVsoaW50KSAoc3BlYykgLSAnICddKV07IHB0ciA9ICYmZG9fZm9ybV91bmtub3duICsg b2Zmc2V0OyBnb3RvICpwdHI7IH0gd2hpbGUgKDApOwoKCiAgICAgIHdoaWxlICgxKQogICAgICAg IHsKICAgICAgICAgIGRvX2Zvcm1fcGVyY2VudDogZG8geyByZWdpc3RlciBjb25zdCBpbnQgb3V0 YyA9ICgnJScpOyBpZiAoKCgocyktPl9JT193cml0ZV9wdHIgPj0gKHMpLT5fSU9fd3JpdGVfZW5k KSA/IF9fb3ZlcmZsb3cgKHMsICh1bnNpZ25lZCBjaGFyKSAob3V0YykpIDogKHVuc2lnbmVkIGNo YXIpICgqKHMpLT5fSU9fd3JpdGVfcHRyKysgPSAob3V0YykpKSA9PSAoLTEpKSB7IGRvbmUgPSAt MTsgZ290byBhbGxfZG9uZTsgfSBlbHNlICsrZG9uZTsgfSB3aGlsZSAoMCk7IGJyZWFrOyBkb19m b3JtX2ludGVnZXI6IGJhc2UgPSAxMDsgaWYgKDApIHsgbG9uZyBsb25nIGludCBzaWduZWRfbnVt YmVyOyBpZiAoKChzdHJ1Y3QgcHJpbnRmX3NwZWMgKikgKCh2b2lkICopMCkpID09ICgodm9pZCAq KTApKSBzaWduZWRfbnVtYmVyID0gX19idWlsdGluX3ZhX2FyZyhhcCxsb25nIGxvbmcgaW50KTsg ZWxzZSBzaWduZWRfbnVtYmVyID0gYXJnc192YWx1ZVsoKHN0cnVjdCBwcmludGZfc3BlYyAqKSAo KHZvaWQgKikwKSktPmRhdGFfYXJnXS5wYV9sb25nX2xvbmdfaW50OyBpc19uZWdhdGl2ZSA9IHNp Z25lZF9udW1iZXIgPCAwOyBudW1iZXIubG9uZ2xvbmcgPSBpc19uZWdhdGl2ZSA/ICgtIHNpZ25l ZF9udW1iZXIpIDogc2lnbmVkX251bWJlcjsgZ290byBkb19sb25nbG9uZ19udW1iZXI7IH0gZWxz ZSB7IGxvbmcgaW50IHNpZ25lZF9udW1iZXI7IGlmICgoKHN0cnVjdCBwcmludGZfc3BlYyAqKSAo KHZvaWQgKikwKSkgPT0gKCh2b2lkICopMCkpIHsgaWYgKGlzX2xvbmcpIHNpZ25lZF9udW1iZXIg PSBfX2J1aWx0aW5fdmFfYXJnKGFwLGxvbmcgaW50KTsgZWxzZSBzaWduZWRfbnVtYmVyID0gX19i dWlsdGluX3ZhX2FyZyhhcCxpbnQpOyB9IGVsc2UgaWYgKGlzX2xvbmcpIHNpZ25lZF9udW1iZXIg PSBhcmdzX3ZhbHVlWygoc3RydWN0IHByaW50Zl9zcGVjICopICgodm9pZCAqKTApKS0+ZGF0YV9h cmddLnBhX2xvbmdfaW50OyBlbHNlIGlmICghaXNfc2hvcnQpIHNpZ25lZF9udW1iZXIgPSBhcmdz X3ZhbHVlWygoc3RydWN0IHByaW50Zl9zcGVjICopICgodm9pZCAqKTApKS0+ZGF0YV9hcmddLnBh X2ludDsgZWxzZSBzaWduZWRfbnVtYmVyID0gYXJnc192YWx1ZVsoKHN0cnVjdCBwcmludGZfc3Bl YyAqKSAoKHZvaWQgKikwKSktPmRhdGFfYXJnXS5wYV9zaG9ydF9pbnQ7IGlzX25lZ2F0aXZlID0g c2lnbmVkX251bWJlciA8IDA7IG51bWJlci53b3JkID0gaXNfbmVnYXRpdmUgPyAoLSBzaWduZWRf bnVtYmVyKSA6IHNpZ25lZF9udW1iZXI7IGdvdG8gZG9fbnVtYmVyOyB9IGRvX2Zvcm1fdW5zaWdu ZWQ6IGJhc2UgPSAxMDsgZ290byBkb191bnNpZ25lZF9udW1iZXI7IGRvX2Zvcm1fb2N0YWw6IGJh c2UgPSA4OyBnb3RvIGRvX3Vuc2lnbmVkX251bWJlcjsgZG9fZm9ybV9oZXhhOiBiYXNlID0gMTY7 IGRvX3Vuc2lnbmVkX251bWJlcjogaXNfbmVnYXRpdmUgPSAwOyBzaG93c2lnbiA9IDA7IHNwYWNl ID0gMDsgaWYgKDApIHsgaWYgKCgoc3RydWN0IHByaW50Zl9zcGVjICopICgodm9pZCAqKTApKSA9 PSAoKHZvaWQgKikwKSkgbnVtYmVyLmxvbmdsb25nID0gX19idWlsdGluX3ZhX2FyZyhhcCx1bnNp Z25lZCBsb25nIGxvbmcgaW50KTsgZWxzZSBudW1iZXIubG9uZ2xvbmcgPSBhcmdzX3ZhbHVlWygo c3RydWN0IHByaW50Zl9zcGVjICopICgodm9pZCAqKTApKS0+ZGF0YV9hcmddLnBhX3VfbG9uZ19s b25nX2ludDsgZG9fbG9uZ2xvbmdfbnVtYmVyOiBpZiAocHJlYyA8IDApIHByZWMgPSAxOyBlbHNl IHBhZCA9ICcgJzsgaWYgKHByZWMgPT0gMCAmJiBudW1iZXIubG9uZ2xvbmcgPT0gMCkgeyBzdHJp bmcgPSB3b3JrZW5kOyBpZiAoYmFzZSA9PSA4ICYmIGFsdCkgKi0tc3RyaW5nID0gJzAnOyB9IGVs c2UgeyBzdHJpbmcgPSBfaXRvYSAobnVtYmVyLmxvbmdsb25nLCB3b3JrZW5kLCBiYXNlLCBzcGVj ID09ICdYJyk7IGlmIChncm91cCAmJiBncm91cGluZykgc3RyaW5nID0gZ3JvdXBfbnVtYmVyIChz dHJpbmcsIHdvcmtlbmQsIGdyb3VwaW5nLCB0aG91c2FuZHNfc2VwKTsgaWYgKHVzZV9vdXRkaWdp dHMgJiYgYmFzZSA9PSAxMCkgc3RyaW5nID0gX2kxOG5fbnVtYmVyX3Jld3JpdGUgKHN0cmluZywg d29ya2VuZCk7IH0gbnVtYmVyLndvcmQgPSBudW1iZXIubG9uZ2xvbmcgIT0gMDsgfSBlbHNlIHsg aWYgKCgoc3RydWN0IHByaW50Zl9zcGVjICopICgodm9pZCAqKTApKSA9PSAoKHZvaWQgKikwKSkg eyBpZiAoaXNfbG9uZykgbnVtYmVyLndvcmQgPSBfX2J1aWx0aW5fdmFfYXJnKGFwLHVuc2lnbmVk IGxvbmcgaW50KTsgZWxzZSBpZiAoaXNfY2hhcikgbnVtYmVyLndvcmQgPSAodW5zaWduZWQgY2hh cikgX19idWlsdGluX3ZhX2FyZyhhcCx1bnNpZ25lZCBpbnQpOyBlbHNlIGlmICghaXNfc2hvcnQp IG51bWJlci53b3JkID0gX19idWlsdGluX3ZhX2FyZyhhcCx1bnNpZ25lZCBpbnQpOyBlbHNlIG51 bWJlci53b3JkID0gKHVuc2lnbmVkIHNob3J0IGludCkgX19idWlsdGluX3ZhX2FyZyhhcCx1bnNp Z25lZCBpbnQpOyB9IGVsc2UgaWYgKGlzX2xvbmcpIG51bWJlci53b3JkID0gYXJnc192YWx1ZVso KHN0cnVjdCBwcmludGZfc3BlYyAqKSAoKHZvaWQgKikwKSktPmRhdGFfYXJnXS5wYV91X2xvbmdf aW50OyBlbHNlIGlmIChpc19jaGFyKSBudW1iZXIud29yZCA9ICh1bnNpZ25lZCBjaGFyKSBhcmdz X3ZhbHVlWygoc3RydWN0IHByaW50Zl9zcGVjICopICgodm9pZCAqKTApKS0+ZGF0YV9hcmddLnBh X2NoYXI7IGVsc2UgaWYgKCFpc19zaG9ydCkgbnVtYmVyLndvcmQgPSBhcmdzX3ZhbHVlWygoc3Ry dWN0IHByaW50Zl9zcGVjICopICgodm9pZCAqKTApKS0+ZGF0YV9hcmddLnBhX3VfaW50OyBlbHNl IG51bWJlci53b3JkID0gKHVuc2lnbmVkIHNob3J0IGludCkgYXJnc192YWx1ZVsoKHN0cnVjdCBw cmludGZfc3BlYyAqKSAoKHZvaWQgKikwKSktPmRhdGFfYXJnXS5wYV91X3Nob3J0X2ludDsgZG9f bnVtYmVyOiBpZiAocHJlYyA8IDApIHByZWMgPSAxOyBlbHNlIHBhZCA9ICcgJzsgaWYgKHByZWMg PT0gMCAmJiBudW1iZXIud29yZCA9PSAwKSB7IHN0cmluZyA9IHdvcmtlbmQ7IGlmIChiYXNlID09 IDggJiYgYWx0KSAqLS1zdHJpbmcgPSAnMCc7IH0gZWxzZSB7IHN0cmluZyA9IF9pdG9hX3dvcmQg KG51bWJlci53b3JkLCB3b3JrZW5kLCBiYXNlLCBzcGVjID09ICdYJyk7IGlmIChncm91cCAmJiBn cm91cGluZykgc3RyaW5nID0gZ3JvdXBfbnVtYmVyIChzdHJpbmcsIHdvcmtlbmQsIGdyb3VwaW5n LCB0aG91c2FuZHNfc2VwKTsgaWYgKHVzZV9vdXRkaWdpdHMgJiYgYmFzZSA9PSAxMCkgc3RyaW5n ID0gX2kxOG5fbnVtYmVyX3Jld3JpdGUgKHN0cmluZywgd29ya2VuZCk7IH0gfSBpZiAocHJlYyA8 PSB3b3JrZW5kIC0gc3RyaW5nICYmIG51bWJlci53b3JkICE9IDAgJiYgYWx0ICYmIGJhc2UgPT0g OCkgKi0tc3RyaW5nID0gJzAnOyBwcmVjID0gKCgoMCk+KHByZWMgLSAod29ya2VuZCAtIHN0cmlu ZykpKT8oMCk6KHByZWMgLSAod29ya2VuZCAtIHN0cmluZykpKTsgaWYgKCFsZWZ0KSB7IHdpZHRo IC09IHdvcmtlbmQgLSBzdHJpbmcgKyBwcmVjOyBpZiAobnVtYmVyLndvcmQgIT0gMCAmJiBhbHQg JiYgYmFzZSA9PSAxNikgd2lkdGggLT0gMjsgaWYgKGlzX25lZ2F0aXZlIHx8IHNob3dzaWduIHx8 IHNwYWNlKSAtLXdpZHRoOyBpZiAocGFkID09ICcgJykgeyBpZiAod2lkdGggPiAwKSBkb25lICs9 IF9JT19wYWRuX2ludGVybmFsIChzLCAoJyAnKSwgd2lkdGgpOyB3aWR0aCA9IDA7IH0gaWYgKGlz X25lZ2F0aXZlKSBkbyB7IHJlZ2lzdGVyIGNvbnN0IGludCBvdXRjID0gKCctJyk7IGlmICgoKChz KS0+X0lPX3dyaXRlX3B0ciA+PSAocyktPl9JT193cml0ZV9lbmQpID8gX19vdmVyZmxvdyAocywg KHVuc2lnbmVkIGNoYXIpIChvdXRjKSkgOiAodW5zaWduZWQgY2hhcikgKCoocyktPl9JT193cml0 ZV9wdHIrKyA9IChvdXRjKSkpID09ICgtMSkpIHsgZG9uZSA9IC0xOyBnb3RvIGFsbF9kb25lOyB9 IGVsc2UgKytkb25lOyB9IHdoaWxlICgwKTsgZWxzZSBpZiAoc2hvd3NpZ24pIGRvIHsgcmVnaXN0 ZXIgY29uc3QgaW50IG91dGMgPSAoJysnKTsgaWYgKCgoKHMpLT5fSU9fd3JpdGVfcHRyID49IChz KS0+X0lPX3dyaXRlX2VuZCkgPyBfX292ZXJmbG93IChzLCAodW5zaWduZWQgY2hhcikgKG91dGMp KSA6ICh1bnNpZ25lZCBjaGFyKSAoKihzKS0+X0lPX3dyaXRlX3B0cisrID0gKG91dGMpKSkgPT0g KC0xKSkgeyBkb25lID0gLTE7IGdvdG8gYWxsX2RvbmU7IH0gZWxzZSArK2RvbmU7IH0gd2hpbGUg KDApOyBlbHNlIGlmIChzcGFjZSkgZG8geyByZWdpc3RlciBjb25zdCBpbnQgb3V0YyA9ICgnICcp OyBpZiAoKCgocyktPl9JT193cml0ZV9wdHIgPj0gKHMpLT5fSU9fd3JpdGVfZW5kKSA/IF9fb3Zl cmZsb3cgKHMsICh1bnNpZ25lZCBjaGFyKSAob3V0YykpIDogKHVuc2lnbmVkIGNoYXIpICgqKHMp LT5fSU9fd3JpdGVfcHRyKysgPSAob3V0YykpKSA9PSAoLTEpKSB7IGRvbmUgPSAtMTsgZ290byBh bGxfZG9uZTsgfSBlbHNlICsrZG9uZTsgfSB3aGlsZSAoMCk7IGlmIChudW1iZXIud29yZCAhPSAw ICYmIGFsdCAmJiBiYXNlID09IDE2KSB7IGRvIHsgcmVnaXN0ZXIgY29uc3QgaW50IG91dGMgPSAo JzAnKTsgaWYgKCgoKHMpLT5fSU9fd3JpdGVfcHRyID49IChzKS0+X0lPX3dyaXRlX2VuZCkgPyBf X292ZXJmbG93IChzLCAodW5zaWduZWQgY2hhcikgKG91dGMpKSA6ICh1bnNpZ25lZCBjaGFyKSAo KihzKS0+X0lPX3dyaXRlX3B0cisrID0gKG91dGMpKSkgPT0gKC0xKSkgeyBkb25lID0gLTE7IGdv dG8gYWxsX2RvbmU7IH0gZWxzZSArK2RvbmU7IH0gd2hpbGUgKDApOyBkbyB7IHJlZ2lzdGVyIGNv bnN0IGludCBvdXRjID0gKHNwZWMpOyBpZiAoKCgocyktPl9JT193cml0ZV9wdHIgPj0gKHMpLT5f SU9fd3JpdGVfZW5kKSA/IF9fb3ZlcmZsb3cgKHMsICh1bnNpZ25lZCBjaGFyKSAob3V0YykpIDog KHVuc2lnbmVkIGNoYXIpICgqKHMpLT5fSU9fd3JpdGVfcHRyKysgPSAob3V0YykpKSA9PSAoLTEp KSB7IGRvbmUgPSAtMTsgZ290byBhbGxfZG9uZTsgfSBlbHNlICsrZG9uZTsgfSB3aGlsZSAoMCk7 IH0gd2lkdGggKz0gcHJlYzsgaWYgKHdpZHRoID4gMCkgZG9uZSArPSBfSU9fcGFkbl9pbnRlcm5h bCAocywgKCcwJyksIHdpZHRoKTsgZG8geyBpZiAoKHNpemVfdCkgKCgqKHN0cnVjdCBfSU9fanVt cF90ICoqKSAoKHZvaWQgKikgJigoc3RydWN0IF9JT19GSUxFX3BsdXMgKikgKChzKSkpLT52dGFi bGUgKyAoKHMpKS0+X3Z0YWJsZV9vZmZzZXQpKS0+X194c3B1dG4pICgocyksICgoc3RyaW5nKSks ICgod29ya2VuZCAtIHN0cmluZykpKSAhPSAoc2l6ZV90KSAod29ya2VuZCAtIHN0cmluZykpIHsg ZG9uZSA9IC0xOyBnb3RvIGFsbF9kb25lOyB9IGRvbmUgKz0gKHdvcmtlbmQgLSBzdHJpbmcpOyB9 IHdoaWxlICgwKTsgYnJlYWs7IH0gZWxzZSB7IGlmIChpc19uZWdhdGl2ZSkgeyBkbyB7IHJlZ2lz dGVyIGNvbnN0IGludCBvdXRjID0gKCctJyk7IGlmICgoKChzKS0+X0lPX3dyaXRlX3B0ciA+PSAo cyktPl9JT193cml0ZV9lbmQpID8gX19vdmVyZmxvdyAocywgKHVuc2lnbmVkIGNoYXIpIChvdXRj KSkgOiAodW5zaWduZWQgY2hhcikgKCoocyktPl9JT193cml0ZV9wdHIrKyA9IChvdXRjKSkpID09 ICgtMSkpIHsgZG9uZSA9IC0xOyBnb3RvIGFsbF9kb25lOyB9IGVsc2UgKytkb25lOyB9IHdoaWxl ICgwKTsgLS13aWR0aDsgfSBlbHNlIGlmIChzaG93c2lnbikgeyBkbyB7IHJlZ2lzdGVyIGNvbnN0 IGludCBvdXRjID0gKCcrJyk7IGlmICgoKChzKS0+X0lPX3dyaXRlX3B0ciA+PSAocyktPl9JT193 cml0ZV9lbmQpID8gX19vdmVyZmxvdyAocywgKHVuc2lnbmVkIGNoYXIpIChvdXRjKSkgOiAodW5z aWduZWQgY2hhcikgKCoocyktPl9JT193cml0ZV9wdHIrKyA9IChvdXRjKSkpID09ICgtMSkpIHsg ZG9uZSA9IC0xOyBnb3RvIGFsbF9kb25lOyB9IGVsc2UgKytkb25lOyB9IHdoaWxlICgwKTsgLS13 aWR0aDsgfSBlbHNlIGlmIChzcGFjZSkgeyBkbyB7IHJlZ2lzdGVyIGNvbnN0IGludCBvdXRjID0g KCcgJyk7IGlmICgoKChzKS0+X0lPX3dyaXRlX3B0ciA+PSAocyktPl9JT193cml0ZV9lbmQpID8g X19vdmVyZmxvdyAocywgKHVuc2lnbmVkIGNoYXIpIChvdXRjKSkgOiAodW5zaWduZWQgY2hhcikg KCoocyktPl9JT193cml0ZV9wdHIrKyA9IChvdXRjKSkpID09ICgtMSkpIHsgZG9uZSA9IC0xOyBn b3RvIGFsbF9kb25lOyB9IGVsc2UgKytkb25lOyB9IHdoaWxlICgwKTsgLS13aWR0aDsgfSBpZiAo bnVtYmVyLndvcmQgIT0gMCAmJiBhbHQgJiYgYmFzZSA9PSAxNikgeyBkbyB7IHJlZ2lzdGVyIGNv bnN0IGludCBvdXRjID0gKCcwJyk7IGlmICgoKChzKS0+X0lPX3dyaXRlX3B0ciA+PSAocyktPl9J T193cml0ZV9lbmQpID8gX19vdmVyZmxvdyAocywgKHVuc2lnbmVkIGNoYXIpIChvdXRjKSkgOiAo dW5zaWduZWQgY2hhcikgKCoocyktPl9JT193cml0ZV9wdHIrKyA9IChvdXRjKSkpID09ICgtMSkp IHsgZG9uZSA9IC0xOyBnb3RvIGFsbF9kb25lOyB9IGVsc2UgKytkb25lOyB9IHdoaWxlICgwKTsg ZG8geyByZWdpc3RlciBjb25zdCBpbnQgb3V0YyA9IChzcGVjKTsgaWYgKCgoKHMpLT5fSU9fd3Jp dGVfcHRyID49IChzKS0+X0lPX3dyaXRlX2VuZCkgPyBfX292ZXJmbG93IChzLCAodW5zaWduZWQg Y2hhcikgKG91dGMpKSA6ICh1bnNpZ25lZCBjaGFyKSAoKihzKS0+X0lPX3dyaXRlX3B0cisrID0g KG91dGMpKSkgPT0gKC0xKSkgeyBkb25lID0gLTE7IGdvdG8gYWxsX2RvbmU7IH0gZWxzZSArK2Rv bmU7IH0gd2hpbGUgKDApOyB3aWR0aCAtPSAyOyB9IHdpZHRoIC09IHdvcmtlbmQgLSBzdHJpbmcg KyBwcmVjOyBpZiAocHJlYyA+IDApIHsgaW50IHRlbXAgPSB3aWR0aDsgd2lkdGggPSBwcmVjOyBp ZiAod2lkdGggPiAwKSBkb25lICs9IF9JT19wYWRuX2ludGVybmFsIChzLCAoJzAnKSwgd2lkdGgp Ozsgd2lkdGggPSB0ZW1wOyB9IGRvIHsgaWYgKChzaXplX3QpICgoKihzdHJ1Y3QgX0lPX2p1bXBf dCAqKikgKCh2b2lkICopICYoKHN0cnVjdCBfSU9fRklMRV9wbHVzICopICgocykpKS0+dnRhYmxl ICsgKChzKSktPl92dGFibGVfb2Zmc2V0KSktPl9feHNwdXRuKSAoKHMpLCAoKHN0cmluZykpLCAo KHdvcmtlbmQgLSBzdHJpbmcpKSkgIT0gKHNpemVfdCkgKHdvcmtlbmQgLSBzdHJpbmcpKSB7IGRv bmUgPSAtMTsgZ290byBhbGxfZG9uZTsgfSBkb25lICs9ICh3b3JrZW5kIC0gc3RyaW5nKTsgfSB3 aGlsZSAoMCk7IGlmICh3aWR0aCA+IDApIGRvbmUgKz0gX0lPX3BhZG5faW50ZXJuYWwgKHMsICgn ICcpLCB3aWR0aCk7IGJyZWFrOyB9IGRvX2Zvcm1fZmxvYXQ6IHsgY29uc3Qgdm9pZCAqcHRyOyBp bnQgZnVuY3Rpb25fZG9uZTsgaWYgKCgoc3RydWN0IHByaW50Zl9zcGVjICopICgodm9pZCAqKTAp KSA9PSAoKHZvaWQgKikwKSkgeyBzdHJ1Y3QgcHJpbnRmX2luZm8gaW5mbyA9IHsgcHJlYzogcHJl Yywgd2lkdGg6IHdpZHRoLCBzcGVjOiBzcGVjLCBpc19sb25nX2RvdWJsZTogaXNfbG9uZ19kb3Vi bGUsIGlzX3Nob3J0OiBpc19zaG9ydCwgaXNfbG9uZzogaXNfbG9uZywgYWx0OiBhbHQsIHNwYWNl OiBzcGFjZSwgbGVmdDogbGVmdCwgc2hvd3NpZ246IHNob3dzaWduLCBncm91cDogZ3JvdXAsIHBh ZDogcGFkLCBleHRyYTogMCwgd2lkZTogc2l6ZW9mIChjaGFyKSAhPSAxIH07IGlmIChpc19sb25n X2RvdWJsZSkgdGhlX2FyZy5wYV9sb25nX2RvdWJsZSA9IF9fYnVpbHRpbl92YV9hcmcoYXAsbG9u ZyBkb3VibGUpOyBlbHNlIHRoZV9hcmcucGFfZG91YmxlID0gX19idWlsdGluX3ZhX2FyZyhhcCxk b3VibGUpOyBwdHIgPSAoY29uc3Qgdm9pZCAqKSAmdGhlX2FyZzsgZnVuY3Rpb25fZG9uZSA9IF9f cHJpbnRmX2ZwIChzLCAmaW5mbywgJnB0cik7IH0gZWxzZSB7IHB0ciA9IChjb25zdCB2b2lkICop ICZhcmdzX3ZhbHVlWygoc3RydWN0IHByaW50Zl9zcGVjICopICgodm9pZCAqKTApKS0+ZGF0YV9h cmddOyBmdW5jdGlvbl9kb25lID0gX19wcmludGZfZnAgKHMsICYoKHN0cnVjdCBwcmludGZfc3Bl YyAqKSAoKHZvaWQgKikwKSktPmluZm8sICZwdHIpOyB9IGlmIChmdW5jdGlvbl9kb25lIDwgMCkg eyBkb25lID0gLTE7IGdvdG8gYWxsX2RvbmU7IH0gZG9uZSArPSBmdW5jdGlvbl9kb25lOyB9IGJy ZWFrOyBkb19mb3JtX2Zsb2F0aGV4OiB7IGNvbnN0IHZvaWQgKnB0cjsgaW50IGZ1bmN0aW9uX2Rv bmU7IGlmICgoKHN0cnVjdCBwcmludGZfc3BlYyAqKSAoKHZvaWQgKikwKSkgPT0gKCh2b2lkICop MCkpIHsgc3RydWN0IHByaW50Zl9pbmZvIGluZm8gPSB7IHByZWM6IHByZWMsIHdpZHRoOiB3aWR0 aCwgc3BlYzogc3BlYywgaXNfbG9uZ19kb3VibGU6IGlzX2xvbmdfZG91YmxlLCBpc19zaG9ydDog aXNfc2hvcnQsIGlzX2xvbmc6IGlzX2xvbmcsIGFsdDogYWx0LCBzcGFjZTogc3BhY2UsIGxlZnQ6 IGxlZnQsIHNob3dzaWduOiBzaG93c2lnbiwgZ3JvdXA6IGdyb3VwLCBwYWQ6IHBhZCwgZXh0cmE6 IDAsIHdpZGU6IHNpemVvZiAoY2hhcikgIT0gMSB9OyBpZiAoaXNfbG9uZ19kb3VibGUpIHRoZV9h cmcucGFfbG9uZ19kb3VibGUgPSBfX2J1aWx0aW5fdmFfYXJnKGFwLGxvbmcgZG91YmxlKTsgZWxz ZSB0aGVfYXJnLnBhX2RvdWJsZSA9IF9fYnVpbHRpbl92YV9hcmcoYXAsZG91YmxlKTsgcHRyID0g KGNvbnN0IHZvaWQgKikgJnRoZV9hcmc7IGZ1bmN0aW9uX2RvbmUgPSBfX3ByaW50Zl9mcGhleCAo cywgJmluZm8sICZwdHIpOyB9IGVsc2UgeyBwdHIgPSAoY29uc3Qgdm9pZCAqKSAmYXJnc192YWx1 ZVsoKHN0cnVjdCBwcmludGZfc3BlYyAqKSAoKHZvaWQgKikwKSktPmRhdGFfYXJnXTsgZnVuY3Rp b25fZG9uZSA9IF9fcHJpbnRmX2ZwaGV4IChzLCAmKChzdHJ1Y3QgcHJpbnRmX3NwZWMgKikgKCh2 b2lkICopMCkpLT5pbmZvLCAmcHRyKTsgfSBpZiAoZnVuY3Rpb25fZG9uZSA8IDApIHsgZG9uZSA9 IC0xOyBnb3RvIGFsbF9kb25lOyB9IGRvbmUgKz0gZnVuY3Rpb25fZG9uZTsgfSBicmVhazsgZG9f Zm9ybV9wb2ludGVyOiB7IGNvbnN0IHZvaWQgKnB0cjsgaWYgKCgoc3RydWN0IHByaW50Zl9zcGVj ICopICgodm9pZCAqKTApKSA9PSAoKHZvaWQgKikwKSkgcHRyID0gX19idWlsdGluX3ZhX2FyZyhh cCx2b2lkICopOyBlbHNlIHB0ciA9IGFyZ3NfdmFsdWVbKChzdHJ1Y3QgcHJpbnRmX3NwZWMgKikg KCh2b2lkICopMCkpLT5kYXRhX2FyZ10ucGFfcG9pbnRlcjsgaWYgKHB0ciAhPSAoKHZvaWQgKikw KSkgeyBiYXNlID0gMTY7IG51bWJlci53b3JkID0gKHVuc2lnbmVkIGxvbmcgaW50KSBwdHI7IGlz X25lZ2F0aXZlID0gMDsgYWx0ID0gMTsgZ3JvdXAgPSAwOyBzcGVjID0gJ3gnOyBnb3RvIGRvX251 bWJlcjsgfSBlbHNlIHsgc3RyaW5nID0gKGNoYXIgKikgIihuaWwpIjsgaWYgKHByZWMgPCA1KSBw cmVjID0gNTsgaXNfbG9uZyA9IDA7IGdvdG8gZG9fcHJpbnRfc3RyaW5nOyB9IH0gZG9fZm9ybV9u dW1iZXI6IGlmICgoKHN0cnVjdCBwcmludGZfc3BlYyAqKSAoKHZvaWQgKikwKSkgPT0gKCh2b2lk ICopMCkpIHsgaWYgKDApICoobG9uZyBsb25nIGludCAqKSBfX2J1aWx0aW5fdmFfYXJnKGFwLHZv aWQgKikgPSBkb25lOyBlbHNlIGlmIChpc19sb25nKSAqKGxvbmcgaW50ICopIF9fYnVpbHRpbl92 YV9hcmcoYXAsdm9pZCAqKSA9IGRvbmU7IGVsc2UgaWYgKGlzX2NoYXIpICooY2hhciAqKSBfX2J1 aWx0aW5fdmFfYXJnKGFwLHZvaWQgKikgPSBkb25lOyBlbHNlIGlmICghaXNfc2hvcnQpICooaW50 ICopIF9fYnVpbHRpbl92YV9hcmcoYXAsdm9pZCAqKSA9IGRvbmU7IGVsc2UgKihzaG9ydCBpbnQg KikgX19idWlsdGluX3ZhX2FyZyhhcCx2b2lkICopID0gZG9uZTsgfSBlbHNlIGlmICgwKSAqKGxv bmcgbG9uZyBpbnQgKikgYXJnc192YWx1ZVsoKHN0cnVjdCBwcmludGZfc3BlYyAqKSAoKHZvaWQg KikwKSktPmRhdGFfYXJnXS5wYV9wb2ludGVyID0gZG9uZTsgZWxzZSBpZiAoaXNfbG9uZykgKihs b25nIGludCAqKSBhcmdzX3ZhbHVlWygoc3RydWN0IHByaW50Zl9zcGVjICopICgodm9pZCAqKTAp KS0+ZGF0YV9hcmddLnBhX3BvaW50ZXIgPSBkb25lOyBlbHNlIGlmIChpc19jaGFyKSAqKGNoYXIg KikgYXJnc192YWx1ZVsoKHN0cnVjdCBwcmludGZfc3BlYyAqKSAoKHZvaWQgKikwKSktPmRhdGFf YXJnXS5wYV9wb2ludGVyID0gZG9uZTsgZWxzZSBpZiAoIWlzX3Nob3J0KSAqKGludCAqKSBhcmdz X3ZhbHVlWygoc3RydWN0IHByaW50Zl9zcGVjICopICgodm9pZCAqKTApKS0+ZGF0YV9hcmddLnBh X3BvaW50ZXIgPSBkb25lOyBlbHNlICooc2hvcnQgaW50ICopIGFyZ3NfdmFsdWVbKChzdHJ1Y3Qg cHJpbnRmX3NwZWMgKikgKCh2b2lkICopMCkpLT5kYXRhX2FyZ10ucGFfcG9pbnRlciA9IGRvbmU7 IGJyZWFrOyBkb19mb3JtX3N0cmVycm9yOiBzdHJpbmcgPSAoY2hhciAqKSBfX3N0cmVycm9yX3Ig KHNhdmVfZXJybm8sIChjaGFyICopIHdvcmtfYnVmZmVyLCBzaXplb2Ygd29ya19idWZmZXIpOyBp c19sb25nID0gMDsgZ290byBkb19wcmludF9zdHJpbmc7CiAgICAgICAgICBkb19mb3JtX2NoYXJh Y3RlcjogaWYgKGlzX2xvbmcpIGdvdG8gZG9fZm9ybV93Y2hhcmFjdGVyOyAtLXdpZHRoOyBpZiAo IWxlZnQpIGlmICh3aWR0aCA+IDApIGRvbmUgKz0gX0lPX3BhZG5faW50ZXJuYWwgKHMsICgnICcp LCB3aWR0aCk7IGlmICgoKHN0cnVjdCBwcmludGZfc3BlYyAqKSAoKHZvaWQgKikwKSkgPT0gKCh2 b2lkICopMCkpIGRvIHsgcmVnaXN0ZXIgY29uc3QgaW50IG91dGMgPSAoKHVuc2lnbmVkIGNoYXIp IF9fYnVpbHRpbl92YV9hcmcoYXAsaW50KSk7IGlmICgoKChzKS0+X0lPX3dyaXRlX3B0ciA+PSAo cyktPl9JT193cml0ZV9lbmQpID8gX19vdmVyZmxvdyAocywgKHVuc2lnbmVkIGNoYXIpIChvdXRj KSkgOiAodW5zaWduZWQgY2hhcikgKCoocyktPl9JT193cml0ZV9wdHIrKyA9IChvdXRjKSkpID09 ICgtMSkpIHsgZG9uZSA9IC0xOyBnb3RvIGFsbF9kb25lOyB9IGVsc2UgKytkb25lOyB9IHdoaWxl ICgwKTsgZWxzZSBkbyB7IHJlZ2lzdGVyIGNvbnN0IGludCBvdXRjID0gKCh1bnNpZ25lZCBjaGFy KSBhcmdzX3ZhbHVlWygoc3RydWN0IHByaW50Zl9zcGVjICopICgodm9pZCAqKTApKS0+ZGF0YV9h cmddLnBhX2NoYXIpOyBpZiAoKCgocyktPl9JT193cml0ZV9wdHIgPj0gKHMpLT5fSU9fd3JpdGVf ZW5kKSA/IF9fb3ZlcmZsb3cgKHMsICh1bnNpZ25lZCBjaGFyKSAob3V0YykpIDogKHVuc2lnbmVk IGNoYXIpICgqKHMpLT5fSU9fd3JpdGVfcHRyKysgPSAob3V0YykpKSA9PSAoLTEpKSB7IGRvbmUg PSAtMTsgZ290byBhbGxfZG9uZTsgfSBlbHNlICsrZG9uZTsgfSB3aGlsZSAoMCk7IGlmIChsZWZ0 KSBpZiAod2lkdGggPiAwKSBkb25lICs9IF9JT19wYWRuX2ludGVybmFsIChzLCAoJyAnKSwgd2lk dGgpOyBicmVhazsgZG9fZm9ybV93Y2hhcmFjdGVyOiB7IGNoYXIgYnVmWygoKCgoX19sb2NhbGVf dCkgKF9fbGliY19pbnRlcm5hbF90c2RfZ2V0ICE9ICgodm9pZCAqKTApID8gX19saWJjX2ludGVy bmFsX3RzZF9nZXQgKF9MSUJDX1RTRF9LRVlfTE9DQUxFKSA6IF9fbGliY190c2RfTE9DQUxFX2Rh dGEpKS0+X19sb2NhbGVzW19fTENfQ1RZUEVdKS0+dmFsdWVzWygoaW50KSAoX05MX0NUWVBFX01C X0NVUl9NQVgpICYgMHhmZmZmKV0ud29yZCkpXTsgbWJzdGF0ZV90IG1ic3RhdGU7IHNpemVfdCBs ZW47IChfX2V4dGVuc2lvbl9fIChfX2J1aWx0aW5fY29uc3RhbnRfcCAoc2l6ZW9mIChtYnN0YXRl X3QpKSAmJiAoc2l6ZW9mIChtYnN0YXRlX3QpKSA8PSAxNiA/ICgoc2l6ZW9mIChtYnN0YXRlX3Qp KSA9PSAxID8gKHsgdm9pZCAqX19zID0gKCZtYnN0YXRlKTsgKigoX191aW50OF90ICopIF9fcykg PSAoX191aW50OF90KSAnXDAnOyBfX3M7IH0pIDogKHsgdm9pZCAqX19zID0gKCZtYnN0YXRlKTsg dW5pb24geyB1bnNpZ25lZCBpbnQgX191aTsgdW5zaWduZWQgc2hvcnQgaW50IF9fdXNpOyB1bnNp Z25lZCBjaGFyIF9fdWM7IH0gKl9fdSA9IF9fczsgX191aW50OF90IF9fYyA9IChfX3VpbnQ4X3Qp ICgnXDAnKTsgc3dpdGNoICgodW5zaWduZWQgaW50KSAoc2l6ZW9mIChtYnN0YXRlX3QpKSkgeyBj YXNlIDE1OiBfX3UtPl9fdWkgPSBfX2MgKiAweDAxMDEwMTAxOyBfX3UgPSBfX2V4dGVuc2lvbl9f ICgodm9pZCAqKSBfX3UgKyA0KTsgY2FzZSAxMTogX191LT5fX3VpID0gX19jICogMHgwMTAxMDEw MTsgX191ID0gX19leHRlbnNpb25fXyAoKHZvaWQgKikgX191ICsgNCk7IGNhc2UgNzogX191LT5f X3VpID0gX19jICogMHgwMTAxMDEwMTsgX191ID0gX19leHRlbnNpb25fXyAoKHZvaWQgKikgX191 ICsgNCk7IGNhc2UgMzogX191LT5fX3VzaSA9ICh1bnNpZ25lZCBzaG9ydCBpbnQpIF9fYyAqIDB4 MDEwMTsgX191ID0gX19leHRlbnNpb25fXyAoKHZvaWQgKikgX191ICsgMik7IF9fdS0+X191YyA9 ICh1bnNpZ25lZCBjaGFyKSBfX2M7IGJyZWFrOyBjYXNlIDE0OiBfX3UtPl9fdWkgPSBfX2MgKiAw eDAxMDEwMTAxOyBfX3UgPSBfX2V4dGVuc2lvbl9fICgodm9pZCAqKSBfX3UgKyA0KTsgY2FzZSAx MDogX191LT5fX3VpID0gX19jICogMHgwMTAxMDEwMTsgX191ID0gX19leHRlbnNpb25fXyAoKHZv aWQgKikgX191ICsgNCk7IGNhc2UgNjogX191LT5fX3VpID0gX19jICogMHgwMTAxMDEwMTsgX191 ID0gX19leHRlbnNpb25fXyAoKHZvaWQgKikgX191ICsgNCk7IGNhc2UgMjogX191LT5fX3VzaSA9 ICh1bnNpZ25lZCBzaG9ydCBpbnQpIF9fYyAqIDB4MDEwMTsgYnJlYWs7IGNhc2UgMTM6IF9fdS0+ X191aSA9IF9fYyAqIDB4MDEwMTAxMDE7IF9fdSA9IF9fZXh0ZW5zaW9uX18gKCh2b2lkICopIF9f dSArIDQpOyBjYXNlIDk6IF9fdS0+X191aSA9IF9fYyAqIDB4MDEwMTAxMDE7IF9fdSA9IF9fZXh0 ZW5zaW9uX18gKCh2b2lkICopIF9fdSArIDQpOyBjYXNlIDU6IF9fdS0+X191aSA9IF9fYyAqIDB4 MDEwMTAxMDE7IF9fdSA9IF9fZXh0ZW5zaW9uX18gKCh2b2lkICopIF9fdSArIDQpOyBjYXNlIDE6 IF9fdS0+X191YyA9ICh1bnNpZ25lZCBjaGFyKSBfX2M7IGJyZWFrOyBjYXNlIDE2OiBfX3UtPl9f dWkgPSBfX2MgKiAweDAxMDEwMTAxOyBfX3UgPSBfX2V4dGVuc2lvbl9fICgodm9pZCAqKSBfX3Ug KyA0KTsgY2FzZSAxMjogX191LT5fX3VpID0gX19jICogMHgwMTAxMDEwMTsgX191ID0gX19leHRl bnNpb25fXyAoKHZvaWQgKikgX191ICsgNCk7IGNhc2UgODogX191LT5fX3VpID0gX19jICogMHgw MTAxMDEwMTsgX191ID0gX19leHRlbnNpb25fXyAoKHZvaWQgKikgX191ICsgNCk7IGNhc2UgNDog X191LT5fX3VpID0gX19jICogMHgwMTAxMDEwMTsgY2FzZSAwOiBicmVhazsgfSBfX3M7IH0pKSA6 IChfX2J1aWx0aW5fY29uc3RhbnRfcCAoJ1wwJykgJiYgKCdcMCcpID09ICdcMCcgPyAoeyB2b2lk ICpfX3MgPSAoJm1ic3RhdGUpOyBfX2J1aWx0aW5fbWVtc2V0IChfX3MsICdcMCcsIHNpemVvZiAo bWJzdGF0ZV90KSk7IF9fczsgfSkgOiBtZW1zZXQgKCZtYnN0YXRlLCAnXDAnLCBzaXplb2YgKG1i c3RhdGVfdCkpKSkpOyBsZW4gPSBfX3djcnRvbWIgKGJ1ZiwgKCgoc3RydWN0IHByaW50Zl9zcGVj ICopICgodm9pZCAqKTApKSA9PSAoKHZvaWQgKikwKSA/IF9fYnVpbHRpbl92YV9hcmcoYXAsd2No YXJfdCkgOiBhcmdzX3ZhbHVlWygoc3RydWN0IHByaW50Zl9zcGVjICopICgodm9pZCAqKTApKS0+ ZGF0YV9hcmddLnBhX3djaGFyKSwgJm1ic3RhdGUpOyBpZiAobGVuID09IChzaXplX3QpIC0xKSB7 IGRvbmUgPSAtMTsgZ290byBhbGxfZG9uZTsgfSB3aWR0aCAtPSBsZW47IGlmICghbGVmdCkgaWYg KHdpZHRoID4gMCkgZG9uZSArPSBfSU9fcGFkbl9pbnRlcm5hbCAocywgKCcgJyksIHdpZHRoKTsg ZG8geyBpZiAoKHNpemVfdCkgKCgqKHN0cnVjdCBfSU9fanVtcF90ICoqKSAoKHZvaWQgKikgJigo c3RydWN0IF9JT19GSUxFX3BsdXMgKikgKChzKSkpLT52dGFibGUgKyAoKHMpKS0+X3Z0YWJsZV9v ZmZzZXQpKS0+X194c3B1dG4pICgocyksICgoYnVmKSksICgobGVuKSkpICE9IChzaXplX3QpIChs ZW4pKSB7IGRvbmUgPSAtMTsgZ290byBhbGxfZG9uZTsgfSBkb25lICs9IChsZW4pOyB9IHdoaWxl ICgwKTsgaWYgKGxlZnQpIGlmICh3aWR0aCA+IDApIGRvbmUgKz0gX0lPX3BhZG5faW50ZXJuYWwg KHMsICgnICcpLCB3aWR0aCk7IH0gYnJlYWs7IGRvX2Zvcm1fc3RyaW5nOiB7IHNpemVfdCBsZW47 IGludCBzdHJpbmdfbWFsbG9jZWQ7IGlmICgoKHN0cnVjdCBwcmludGZfc3BlYyAqKSAoKHZvaWQg KikwKSkgPT0gKCh2b2lkICopMCkpIHN0cmluZyA9IChjaGFyICopIF9fYnVpbHRpbl92YV9hcmco YXAsY29uc3QgY2hhciAqKTsgZWxzZSBzdHJpbmcgPSAoY2hhciAqKSBhcmdzX3ZhbHVlWygoc3Ry dWN0IHByaW50Zl9zcGVjICopICgodm9pZCAqKTApKS0+ZGF0YV9hcmddLnBhX3N0cmluZzsgZG9f cHJpbnRfc3RyaW5nOiBzdHJpbmdfbWFsbG9jZWQgPSAwOyBpZiAoc3RyaW5nID09ICgodm9pZCAq KTApKSB7IGlmIChwcmVjID09IC0xIHx8IHByZWMgPj0gKGludCkgc2l6ZW9mIChudWxsKSAtIDEp IHsgc3RyaW5nID0gKGNoYXIgKikgbnVsbDsgbGVuID0gc2l6ZW9mIChudWxsKSAtIDE7IH0gZWxz ZSB7IHN0cmluZyA9IChjaGFyICopICIiOyBsZW4gPSAwOyB9IH0gZWxzZSBpZiAoIWlzX2xvbmcg JiYgc3BlYyAhPSAnUycpIHsgaWYgKHByZWMgIT0gLTEpIHsgaWYgKCgoKChfX2xvY2FsZV90KSAo X19saWJjX2ludGVybmFsX3RzZF9nZXQgIT0gKCh2b2lkICopMCkgPyBfX2xpYmNfaW50ZXJuYWxf dHNkX2dldCAoX0xJQkNfVFNEX0tFWV9MT0NBTEUpIDogX19saWJjX3RzZF9MT0NBTEVfZGF0YSkp LT5fX2xvY2FsZXNbX19MQ19DVFlQRV0pLT52YWx1ZXNbKChpbnQpIChfTkxfQ1RZUEVfTUJfQ1VS X01BWCkgJiAweGZmZmYpXS53b3JkKSA9PSAxKSBsZW4gPSBfX3N0cm5sZW4gKHN0cmluZywgcHJl Yyk7IGVsc2UgeyB3Y2hhcl90IGlnbm9yZVtwcmVjXTsgY29uc3QgY2hhciAqc3RyMiA9IHN0cmlu ZzsgbWJzdGF0ZV90IHBzOyAoX19leHRlbnNpb25fXyAoX19idWlsdGluX2NvbnN0YW50X3AgKHNp emVvZiAocHMpKSAmJiAoc2l6ZW9mIChwcykpIDw9IDE2ID8gKChzaXplb2YgKHBzKSkgPT0gMSA/ ICh7IHZvaWQgKl9fcyA9ICgmcHMpOyAqKChfX3VpbnQ4X3QgKikgX19zKSA9IChfX3VpbnQ4X3Qp ICdcMCc7IF9fczsgfSkgOiAoeyB2b2lkICpfX3MgPSAoJnBzKTsgdW5pb24geyB1bnNpZ25lZCBp bnQgX191aTsgdW5zaWduZWQgc2hvcnQgaW50IF9fdXNpOyB1bnNpZ25lZCBjaGFyIF9fdWM7IH0g Kl9fdSA9IF9fczsgX191aW50OF90IF9fYyA9IChfX3VpbnQ4X3QpICgnXDAnKTsgc3dpdGNoICgo dW5zaWduZWQgaW50KSAoc2l6ZW9mIChwcykpKSB7IGNhc2UgMTU6IF9fdS0+X191aSA9IF9fYyAq IDB4MDEwMTAxMDE7IF9fdSA9IF9fZXh0ZW5zaW9uX18gKCh2b2lkICopIF9fdSArIDQpOyBjYXNl IDExOiBfX3UtPl9fdWkgPSBfX2MgKiAweDAxMDEwMTAxOyBfX3UgPSBfX2V4dGVuc2lvbl9fICgo dm9pZCAqKSBfX3UgKyA0KTsgY2FzZSA3OiBfX3UtPl9fdWkgPSBfX2MgKiAweDAxMDEwMTAxOyBf X3UgPSBfX2V4dGVuc2lvbl9fICgodm9pZCAqKSBfX3UgKyA0KTsgY2FzZSAzOiBfX3UtPl9fdXNp ID0gKHVuc2lnbmVkIHNob3J0IGludCkgX19jICogMHgwMTAxOyBfX3UgPSBfX2V4dGVuc2lvbl9f ICgodm9pZCAqKSBfX3UgKyAyKTsgX191LT5fX3VjID0gKHVuc2lnbmVkIGNoYXIpIF9fYzsgYnJl YWs7IGNhc2UgMTQ6IF9fdS0+X191aSA9IF9fYyAqIDB4MDEwMTAxMDE7IF9fdSA9IF9fZXh0ZW5z aW9uX18gKCh2b2lkICopIF9fdSArIDQpOyBjYXNlIDEwOiBfX3UtPl9fdWkgPSBfX2MgKiAweDAx MDEwMTAxOyBfX3UgPSBfX2V4dGVuc2lvbl9fICgodm9pZCAqKSBfX3UgKyA0KTsgY2FzZSA2OiBf X3UtPl9fdWkgPSBfX2MgKiAweDAxMDEwMTAxOyBfX3UgPSBfX2V4dGVuc2lvbl9fICgodm9pZCAq KSBfX3UgKyA0KTsgY2FzZSAyOiBfX3UtPl9fdXNpID0gKHVuc2lnbmVkIHNob3J0IGludCkgX19j ICogMHgwMTAxOyBicmVhazsgY2FzZSAxMzogX191LT5fX3VpID0gX19jICogMHgwMTAxMDEwMTsg X191ID0gX19leHRlbnNpb25fXyAoKHZvaWQgKikgX191ICsgNCk7IGNhc2UgOTogX191LT5fX3Vp ID0gX19jICogMHgwMTAxMDEwMTsgX191ID0gX19leHRlbnNpb25fXyAoKHZvaWQgKikgX191ICsg NCk7IGNhc2UgNTogX191LT5fX3VpID0gX19jICogMHgwMTAxMDEwMTsgX191ID0gX19leHRlbnNp b25fXyAoKHZvaWQgKikgX191ICsgNCk7IGNhc2UgMTogX191LT5fX3VjID0gKHVuc2lnbmVkIGNo YXIpIF9fYzsgYnJlYWs7IGNhc2UgMTY6IF9fdS0+X191aSA9IF9fYyAqIDB4MDEwMTAxMDE7IF9f dSA9IF9fZXh0ZW5zaW9uX18gKCh2b2lkICopIF9fdSArIDQpOyBjYXNlIDEyOiBfX3UtPl9fdWkg PSBfX2MgKiAweDAxMDEwMTAxOyBfX3UgPSBfX2V4dGVuc2lvbl9fICgodm9pZCAqKSBfX3UgKyA0 KTsgY2FzZSA4OiBfX3UtPl9fdWkgPSBfX2MgKiAweDAxMDEwMTAxOyBfX3UgPSBfX2V4dGVuc2lv bl9fICgodm9pZCAqKSBfX3UgKyA0KTsgY2FzZSA0OiBfX3UtPl9fdWkgPSBfX2MgKiAweDAxMDEw MTAxOyBjYXNlIDA6IGJyZWFrOyB9IF9fczsgfSkpIDogKF9fYnVpbHRpbl9jb25zdGFudF9wICgn XDAnKSAmJiAoJ1wwJykgPT0gJ1wwJyA/ICh7IHZvaWQgKl9fcyA9ICgmcHMpOyBfX2J1aWx0aW5f bWVtc2V0IChfX3MsICdcMCcsIHNpemVvZiAocHMpKTsgX19zOyB9KSA6IG1lbXNldCAoJnBzLCAn XDAnLCBzaXplb2YgKHBzKSkpKSk7IGlmIChfX21ic25ydG93Y3MgKGlnbm9yZSwgJnN0cjIsIHBy ZWMsIHByZWMsICZwcykgPT0gKHNpemVfdCkgLTEpIHsgZG9uZSA9IC0xOyBnb3RvIGFsbF9kb25l OyB9IGlmIChzdHIyID09ICgodm9pZCAqKTApKSBsZW4gPSBzdHJsZW4gKHN0cmluZyk7IGVsc2Ug bGVuID0gc3RyMiAtIHN0cmluZyAtIChwcy5fX2NvdW50KTsgfSB9IGVsc2UgbGVuID0gc3RybGVu IChzdHJpbmcpOyB9IGVsc2UgeyBjb25zdCB3Y2hhcl90ICpzMiA9IChjb25zdCB3Y2hhcl90ICop IHN0cmluZzsgbWJzdGF0ZV90IG1ic3RhdGU7IChfX2V4dGVuc2lvbl9fIChfX2J1aWx0aW5fY29u c3RhbnRfcCAoc2l6ZW9mIChtYnN0YXRlX3QpKSAmJiAoc2l6ZW9mIChtYnN0YXRlX3QpKSA8PSAx NiA/ICgoc2l6ZW9mIChtYnN0YXRlX3QpKSA9PSAxID8gKHsgdm9pZCAqX19zID0gKCZtYnN0YXRl KTsgKigoX191aW50OF90ICopIF9fcykgPSAoX191aW50OF90KSAnXDAnOyBfX3M7IH0pIDogKHsg dm9pZCAqX19zID0gKCZtYnN0YXRlKTsgdW5pb24geyB1bnNpZ25lZCBpbnQgX191aTsgdW5zaWdu ZWQgc2hvcnQgaW50IF9fdXNpOyB1bnNpZ25lZCBjaGFyIF9fdWM7IH0gKl9fdSA9IF9fczsgX191 aW50OF90IF9fYyA9IChfX3VpbnQ4X3QpICgnXDAnKTsgc3dpdGNoICgodW5zaWduZWQgaW50KSAo c2l6ZW9mIChtYnN0YXRlX3QpKSkgeyBjYXNlIDE1OiBfX3UtPl9fdWkgPSBfX2MgKiAweDAxMDEw MTAxOyBfX3UgPSBfX2V4dGVuc2lvbl9fICgodm9pZCAqKSBfX3UgKyA0KTsgY2FzZSAxMTogX191 LT5fX3VpID0gX19jICogMHgwMTAxMDEwMTsgX191ID0gX19leHRlbnNpb25fXyAoKHZvaWQgKikg X191ICsgNCk7IGNhc2UgNzogX191LT5fX3VpID0gX19jICogMHgwMTAxMDEwMTsgX191ID0gX19l eHRlbnNpb25fXyAoKHZvaWQgKikgX191ICsgNCk7IGNhc2UgMzogX191LT5fX3VzaSA9ICh1bnNp Z25lZCBzaG9ydCBpbnQpIF9fYyAqIDB4MDEwMTsgX191ID0gX19leHRlbnNpb25fXyAoKHZvaWQg KikgX191ICsgMik7IF9fdS0+X191YyA9ICh1bnNpZ25lZCBjaGFyKSBfX2M7IGJyZWFrOyBjYXNl IDE0OiBfX3UtPl9fdWkgPSBfX2MgKiAweDAxMDEwMTAxOyBfX3UgPSBfX2V4dGVuc2lvbl9fICgo dm9pZCAqKSBfX3UgKyA0KTsgY2FzZSAxMDogX191LT5fX3VpID0gX19jICogMHgwMTAxMDEwMTsg X191ID0gX19leHRlbnNpb25fXyAoKHZvaWQgKikgX191ICsgNCk7IGNhc2UgNjogX191LT5fX3Vp ID0gX19jICogMHgwMTAxMDEwMTsgX191ID0gX19leHRlbnNpb25fXyAoKHZvaWQgKikgX191ICsg NCk7IGNhc2UgMjogX191LT5fX3VzaSA9ICh1bnNpZ25lZCBzaG9ydCBpbnQpIF9fYyAqIDB4MDEw MTsgYnJlYWs7IGNhc2UgMTM6IF9fdS0+X191aSA9IF9fYyAqIDB4MDEwMTAxMDE7IF9fdSA9IF9f ZXh0ZW5zaW9uX18gKCh2b2lkICopIF9fdSArIDQpOyBjYXNlIDk6IF9fdS0+X191aSA9IF9fYyAq IDB4MDEwMTAxMDE7IF9fdSA9IF9fZXh0ZW5zaW9uX18gKCh2b2lkICopIF9fdSArIDQpOyBjYXNl IDU6IF9fdS0+X191aSA9IF9fYyAqIDB4MDEwMTAxMDE7IF9fdSA9IF9fZXh0ZW5zaW9uX18gKCh2 b2lkICopIF9fdSArIDQpOyBjYXNlIDE6IF9fdS0+X191YyA9ICh1bnNpZ25lZCBjaGFyKSBfX2M7 IGJyZWFrOyBjYXNlIDE2OiBfX3UtPl9fdWkgPSBfX2MgKiAweDAxMDEwMTAxOyBfX3UgPSBfX2V4 dGVuc2lvbl9fICgodm9pZCAqKSBfX3UgKyA0KTsgY2FzZSAxMjogX191LT5fX3VpID0gX19jICog MHgwMTAxMDEwMTsgX191ID0gX19leHRlbnNpb25fXyAoKHZvaWQgKikgX191ICsgNCk7IGNhc2Ug ODogX191LT5fX3VpID0gX19jICogMHgwMTAxMDEwMTsgX191ID0gX19leHRlbnNpb25fXyAoKHZv aWQgKikgX191ICsgNCk7IGNhc2UgNDogX191LT5fX3VpID0gX19jICogMHgwMTAxMDEwMTsgY2Fz ZSAwOiBicmVhazsgfSBfX3M7IH0pKSA6IChfX2J1aWx0aW5fY29uc3RhbnRfcCAoJ1wwJykgJiYg KCdcMCcpID09ICdcMCcgPyAoeyB2b2lkICpfX3MgPSAoJm1ic3RhdGUpOyBfX2J1aWx0aW5fbWVt c2V0IChfX3MsICdcMCcsIHNpemVvZiAobWJzdGF0ZV90KSk7IF9fczsgfSkgOiBtZW1zZXQgKCZt YnN0YXRlLCAnXDAnLCBzaXplb2YgKG1ic3RhdGVfdCkpKSkpOyBpZiAocHJlYyA+PSAwKSB7IGlm IChfX2xpYmNfdXNlX2FsbG9jYSAocHJlYykpIHN0cmluZyA9IChjaGFyICopIF9fYnVpbHRpbl9h bGxvY2EgKHByZWMpOyBlbHNlIGlmICgoc3RyaW5nID0gKGNoYXIgKikgbWFsbG9jIChwcmVjKSkg PT0gKCh2b2lkICopMCkpIHsgZG9uZSA9IC0xOyBnb3RvIGFsbF9kb25lOyB9IGVsc2Ugc3RyaW5n X21hbGxvY2VkID0gMTsgbGVuID0gX193Y3NydG9tYnMgKHN0cmluZywgJnMyLCBwcmVjLCAmbWJz dGF0ZSk7IH0gZWxzZSB7IGxlbiA9IF9fd2NzcnRvbWJzICgoKHZvaWQgKikwKSwgJnMyLCAwLCAm bWJzdGF0ZSk7IGlmIChsZW4gIT0gKHNpemVfdCkgLTEpIHsgKCh2b2lkKSAoMCkpOyBzMiA9IChj b25zdCB3Y2hhcl90ICopIHN0cmluZzsgaWYgKF9fbGliY191c2VfYWxsb2NhIChsZW4gKyAxKSkg c3RyaW5nID0gKGNoYXIgKikgX19idWlsdGluX2FsbG9jYSAobGVuICsgMSk7IGVsc2UgaWYgKChz dHJpbmcgPSAoY2hhciAqKSBtYWxsb2MgKGxlbiArIDEpKSA9PSAoKHZvaWQgKikwKSkgeyBkb25l ID0gLTE7IGdvdG8gYWxsX2RvbmU7IH0gZWxzZSBzdHJpbmdfbWFsbG9jZWQgPSAxOyAodm9pZCkg X193Y3NydG9tYnMgKHN0cmluZywgJnMyLCBsZW4gKyAxLCAmbWJzdGF0ZSk7IH0gfSBpZiAobGVu ID09IChzaXplX3QpIC0xKSB7IGRvbmUgPSAtMTsgZ290byBhbGxfZG9uZTsgfSB9IGlmICgod2lk dGggLT0gbGVuKSA8IDApIHsgZG8geyBpZiAoKHNpemVfdCkgKCgqKHN0cnVjdCBfSU9fanVtcF90 ICoqKSAoKHZvaWQgKikgJigoc3RydWN0IF9JT19GSUxFX3BsdXMgKikgKChzKSkpLT52dGFibGUg KyAoKHMpKS0+X3Z0YWJsZV9vZmZzZXQpKS0+X194c3B1dG4pICgocyksICgoc3RyaW5nKSksICgo bGVuKSkpICE9IChzaXplX3QpIChsZW4pKSB7IGRvbmUgPSAtMTsgZ290byBhbGxfZG9uZTsgfSBk b25lICs9IChsZW4pOyB9IHdoaWxlICgwKTsgYnJlYWs7IH0gaWYgKCFsZWZ0KSBpZiAod2lkdGgg PiAwKSBkb25lICs9IF9JT19wYWRuX2ludGVybmFsIChzLCAoJyAnKSwgd2lkdGgpOyBkbyB7IGlm ICgoc2l6ZV90KSAoKCooc3RydWN0IF9JT19qdW1wX3QgKiopICgodm9pZCAqKSAmKChzdHJ1Y3Qg X0lPX0ZJTEVfcGx1cyAqKSAoKHMpKSktPnZ0YWJsZSArICgocykpLT5fdnRhYmxlX29mZnNldCkp LT5fX3hzcHV0bikgKChzKSwgKChzdHJpbmcpKSwgKChsZW4pKSkgIT0gKHNpemVfdCkgKGxlbikp IHsgZG9uZSA9IC0xOyBnb3RvIGFsbF9kb25lOyB9IGRvbmUgKz0gKGxlbik7IH0gd2hpbGUgKDAp OyBpZiAobGVmdCkgaWYgKHdpZHRoID4gMCkgZG9uZSArPSBfSU9fcGFkbl9pbnRlcm5hbCAocywg KCcgJyksIHdpZHRoKTsgaWYgKF9fYnVpbHRpbl9leHBlY3QgKHN0cmluZ19tYWxsb2NlZCwgMCkp IGZyZWUgKHN0cmluZyk7IH0gYnJlYWs7OwoKICAgICAgICBkb19mb3JtX3Vua25vd246CiAgICAg ICAgICBpZiAoc3BlYyA9PSAnXDAnKQogICAgICAgICAgICB7CgogICAgICAgICAgICAgIGRvbmUg PSAtMTsKICAgICAgICAgICAgICBnb3RvIGFsbF9kb25lOwogICAgICAgICAgICB9CgoKCiAgICAg ICAgICBnb3RvIGRvX3Bvc2l0aW9uYWw7CiAgICAgICAgfQoKCiAgICAgICsrbnNwZWNzX2RvbmU7 CgogICAgICBpZiAoX19idWlsdGluX2V4cGVjdCAod29ya3N0YXJ0ICE9ICgodm9pZCAqKTApLCAw KSkKICAgICAgICBmcmVlICh3b3Jrc3RhcnQpOwogICAgICB3b3Jrc3RhcnQgPSAoKHZvaWQgKikw KTsKCgoKCgogICAgICBmID0gZmluZF9zcGVjICgoZW5kX29mX3NwZWMgPSArK2YpLCAmbWJzdGF0 ZSk7CgoKCiAgICAgIGRvIHsgaWYgKChzaXplX3QpICgoKihzdHJ1Y3QgX0lPX2p1bXBfdCAqKikg KCh2b2lkICopICYoKHN0cnVjdCBfSU9fRklMRV9wbHVzICopICgocykpKS0+dnRhYmxlICsgKChz KSktPl92dGFibGVfb2Zmc2V0KSktPl9feHNwdXRuKSAoKHMpLCAoKGVuZF9vZl9zcGVjKSksICgo ZiAtIGVuZF9vZl9zcGVjKSkpICE9IChzaXplX3QpIChmIC0gZW5kX29mX3NwZWMpKSB7IGRvbmUg PSAtMTsgZ290byBhbGxfZG9uZTsgfSBkb25lICs9IChmIC0gZW5kX29mX3NwZWMpOyB9IHdoaWxl ICgwKTsKICAgIH0KICB3aGlsZSAoKmYgIT0gJ1wwJyk7CgoKICBnb3RvIGFsbF9kb25lOwoKCmRv X3Bvc2l0aW9uYWw6CiAgewoKCiAgICBzaXplX3QgbnNwZWNzID0gMDsKICAgIHNpemVfdCBuc3Bl Y3NfbWF4ID0gMzI7CiAgICBzdHJ1Y3QgcHJpbnRmX3NwZWMgKnNwZWNzCiAgICAgID0gX19idWls dGluX2FsbG9jYSAobnNwZWNzX21heCAqIHNpemVvZiAoc3RydWN0IHByaW50Zl9zcGVjKSk7CgoK CgogICAgc2l6ZV90IG5hcmdzID0gMDsKICAgIGludCAqYXJnc190eXBlOwogICAgdW5pb24gcHJp bnRmX2FyZyAqYXJnc192YWx1ZSA9ICgodm9pZCAqKTApOwoKCgoKICAgIHNpemVfdCBtYXhfcmVm X2FyZyA9IDA7CgoKICAgIHNpemVfdCBjbnQ7CgoKICAgIGlmIChncm91cGluZyA9PSAoY29uc3Qg Y2hhciAqKSAtMSkKICAgICAgewoKCgoKICAgICAgICB0aG91c2FuZHNfc2VwID0gKCgoKF9fbG9j YWxlX3QpIChfX2xpYmNfaW50ZXJuYWxfdHNkX2dldCAhPSAoKHZvaWQgKikwKSA/IF9fbGliY19p bnRlcm5hbF90c2RfZ2V0IChfTElCQ19UU0RfS0VZX0xPQ0FMRSkgOiBfX2xpYmNfdHNkX0xPQ0FM RV9kYXRhKSktPl9fbG9jYWxlc1tfX0xDX05VTUVSSUNdKS0+dmFsdWVzWygoaW50KSAoX19USE9V U0FORFNfU0VQKSAmIDB4ZmZmZildLnN0cmluZyk7CgoKICAgICAgICBncm91cGluZyA9ICgoKChf X2xvY2FsZV90KSAoX19saWJjX2ludGVybmFsX3RzZF9nZXQgIT0gKCh2b2lkICopMCkgPyBfX2xp YmNfaW50ZXJuYWxfdHNkX2dldCAoX0xJQkNfVFNEX0tFWV9MT0NBTEUpIDogX19saWJjX3RzZF9M T0NBTEVfZGF0YSkpLT5fX2xvY2FsZXNbX19MQ19OVU1FUklDXSktPnZhbHVlc1soKGludCkgKF9f R1JPVVBJTkcpICYgMHhmZmZmKV0uc3RyaW5nKTsKICAgICAgICBpZiAoKmdyb3VwaW5nID09ICdc MCcgfHwgKmdyb3VwaW5nID09IDEyNykKICAgICAgICAgIGdyb3VwaW5nID0gKCh2b2lkICopMCk7 CiAgICAgIH0KCiAgICBmb3IgKGYgPSBsZWFkX3N0cl9lbmQ7ICpmICE9ICdcMCc7IGYgPSBzcGVj c1tuc3BlY3MrK10ubmV4dF9mbXQpCiAgICAgIHsKICAgICAgICBpZiAobnNwZWNzID49IG5zcGVj c19tYXgpCiAgICAgICAgICB7CgogICAgICAgICAgICBzdHJ1Y3QgcHJpbnRmX3NwZWMgKm9sZCA9 IHNwZWNzOwoKICAgICAgICAgICAgbnNwZWNzX21heCAqPSAyOwogICAgICAgICAgICBzcGVjcyA9 IF9fYnVpbHRpbl9hbGxvY2EgKG5zcGVjc19tYXggKiBzaXplb2YgKHN0cnVjdCBwcmludGZfc3Bl YykpOwoKICAgICAgICAgICAgaWYgKHNwZWNzID09ICZvbGRbbnNwZWNzXSkKCgogICAgICAgICAg ICAgIG5zcGVjc19tYXggKz0gbnNwZWNzX21heCAvIDI7CiAgICAgICAgICAgIGVsc2UKICAgICAg ICAgICAgICB7CgogICAgICAgICAgICAgICAgbWVtY3B5IChzcGVjcywgb2xkLCBuc3BlY3MgKiBz aXplb2YgKHN0cnVjdCBwcmludGZfc3BlYykpOwogICAgICAgICAgICAgICAgaWYgKG9sZCA9PSAm c3BlY3NbbnNwZWNzXSkKCgoKICAgICAgICAgICAgICAgICAgbnNwZWNzX21heCArPSBuc3BlY3Nf bWF4IC8gMjsKICAgICAgICAgICAgICB9CiAgICAgICAgICB9CgoKCgoKICAgICAgICBuYXJncyAr PSBwYXJzZV9vbmVfc3BlYyAoZiwgbmFyZ3MsICZzcGVjc1tuc3BlY3NdLCAmbWF4X3JlZl9hcmcs CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZtYnN0YXRlKTsKCiAgICAgIH0KCgog ICAgbmFyZ3MgPSAoKChuYXJncyk+KG1heF9yZWZfYXJnKSk/KG5hcmdzKToobWF4X3JlZl9hcmcp KTsKCgogICAgYXJnc190eXBlID0gX19idWlsdGluX2FsbG9jYSAobmFyZ3MgKiBzaXplb2YgKGlu dCkpOwogICAgKF9fZXh0ZW5zaW9uX18gKF9fYnVpbHRpbl9jb25zdGFudF9wIChuYXJncyAqIHNp emVvZiAoaW50KSkgJiYgKG5hcmdzICogc2l6ZW9mIChpbnQpKSA8PSAxNiA/ICgobmFyZ3MgKiBz aXplb2YgKGludCkpID09IDEgPyAoeyB2b2lkICpfX3MgPSAoYXJnc190eXBlKTsgKigoX191aW50 OF90ICopIF9fcykgPSAoX191aW50OF90KSAwOyBfX3M7IH0pIDogKHsgdm9pZCAqX19zID0gKGFy Z3NfdHlwZSk7IHVuaW9uIHsgdW5zaWduZWQgaW50IF9fdWk7IHVuc2lnbmVkIHNob3J0IGludCBf X3VzaTsgdW5zaWduZWQgY2hhciBfX3VjOyB9ICpfX3UgPSBfX3M7IF9fdWludDhfdCBfX2MgPSAo X191aW50OF90KSAoMCk7IHN3aXRjaCAoKHVuc2lnbmVkIGludCkgKG5hcmdzICogc2l6ZW9mIChp bnQpKSkgeyBjYXNlIDE1OiBfX3UtPl9fdWkgPSBfX2MgKiAweDAxMDEwMTAxOyBfX3UgPSBfX2V4 dGVuc2lvbl9fICgodm9pZCAqKSBfX3UgKyA0KTsgY2FzZSAxMTogX191LT5fX3VpID0gX19jICog MHgwMTAxMDEwMTsgX191ID0gX19leHRlbnNpb25fXyAoKHZvaWQgKikgX191ICsgNCk7IGNhc2Ug NzogX191LT5fX3VpID0gX19jICogMHgwMTAxMDEwMTsgX191ID0gX19leHRlbnNpb25fXyAoKHZv aWQgKikgX191ICsgNCk7IGNhc2UgMzogX191LT5fX3VzaSA9ICh1bnNpZ25lZCBzaG9ydCBpbnQp IF9fYyAqIDB4MDEwMTsgX191ID0gX19leHRlbnNpb25fXyAoKHZvaWQgKikgX191ICsgMik7IF9f dS0+X191YyA9ICh1bnNpZ25lZCBjaGFyKSBfX2M7IGJyZWFrOyBjYXNlIDE0OiBfX3UtPl9fdWkg PSBfX2MgKiAweDAxMDEwMTAxOyBfX3UgPSBfX2V4dGVuc2lvbl9fICgodm9pZCAqKSBfX3UgKyA0 KTsgY2FzZSAxMDogX191LT5fX3VpID0gX19jICogMHgwMTAxMDEwMTsgX191ID0gX19leHRlbnNp b25fXyAoKHZvaWQgKikgX191ICsgNCk7IGNhc2UgNjogX191LT5fX3VpID0gX19jICogMHgwMTAx MDEwMTsgX191ID0gX19leHRlbnNpb25fXyAoKHZvaWQgKikgX191ICsgNCk7IGNhc2UgMjogX191 LT5fX3VzaSA9ICh1bnNpZ25lZCBzaG9ydCBpbnQpIF9fYyAqIDB4MDEwMTsgYnJlYWs7IGNhc2Ug MTM6IF9fdS0+X191aSA9IF9fYyAqIDB4MDEwMTAxMDE7IF9fdSA9IF9fZXh0ZW5zaW9uX18gKCh2 b2lkICopIF9fdSArIDQpOyBjYXNlIDk6IF9fdS0+X191aSA9IF9fYyAqIDB4MDEwMTAxMDE7IF9f dSA9IF9fZXh0ZW5zaW9uX18gKCh2b2lkICopIF9fdSArIDQpOyBjYXNlIDU6IF9fdS0+X191aSA9 IF9fYyAqIDB4MDEwMTAxMDE7IF9fdSA9IF9fZXh0ZW5zaW9uX18gKCh2b2lkICopIF9fdSArIDQp OyBjYXNlIDE6IF9fdS0+X191YyA9ICh1bnNpZ25lZCBjaGFyKSBfX2M7IGJyZWFrOyBjYXNlIDE2 OiBfX3UtPl9fdWkgPSBfX2MgKiAweDAxMDEwMTAxOyBfX3UgPSBfX2V4dGVuc2lvbl9fICgodm9p ZCAqKSBfX3UgKyA0KTsgY2FzZSAxMjogX191LT5fX3VpID0gX19jICogMHgwMTAxMDEwMTsgX191 ID0gX19leHRlbnNpb25fXyAoKHZvaWQgKikgX191ICsgNCk7IGNhc2UgODogX191LT5fX3VpID0g X19jICogMHgwMTAxMDEwMTsgX191ID0gX19leHRlbnNpb25fXyAoKHZvaWQgKikgX191ICsgNCk7 IGNhc2UgNDogX191LT5fX3VpID0gX19jICogMHgwMTAxMDEwMTsgY2FzZSAwOiBicmVhazsgfSBf X3M7IH0pKSA6IChfX2J1aWx0aW5fY29uc3RhbnRfcCAoMCkgJiYgKDApID09ICdcMCcgPyAoeyB2 b2lkICpfX3MgPSAoYXJnc190eXBlKTsgX19idWlsdGluX21lbXNldCAoX19zLCAnXDAnLCBuYXJn cyAqIHNpemVvZiAoaW50KSk7IF9fczsgfSkgOiBtZW1zZXQgKGFyZ3NfdHlwZSwgMCwgbmFyZ3Mg KiBzaXplb2YgKGludCkpKSkpOwogICAgYXJnc192YWx1ZSA9IF9fYnVpbHRpbl9hbGxvY2EgKG5h cmdzICogc2l6ZW9mICh1bmlvbiBwcmludGZfYXJnKSk7CgoKCgoKCiAgICBmb3IgKGNudCA9IDA7 IGNudCA8IG5zcGVjczsgKytjbnQpCiAgICAgIHsKCiAgICAgICAgaWYgKHNwZWNzW2NudF0ud2lk dGhfYXJnICE9IC0xKQogICAgICAgICAgYXJnc190eXBlW3NwZWNzW2NudF0ud2lkdGhfYXJnXSA9 IFBBX0lOVDsKCgogICAgICAgIGlmIChzcGVjc1tjbnRdLnByZWNfYXJnICE9IC0xKQogICAgICAg ICAgYXJnc190eXBlW3NwZWNzW2NudF0ucHJlY19hcmddID0gUEFfSU5UOwoKICAgICAgICBzd2l0 Y2ggKHNwZWNzW2NudF0ubmRhdGFfYXJncykKICAgICAgICAgIHsKICAgICAgICAgIGNhc2UgMDoK ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICBjYXNlIDE6CiAgICAgICAgICAgIGFyZ3NfdHlw ZVtzcGVjc1tjbnRdLmRhdGFfYXJnXSA9IHNwZWNzW2NudF0uZGF0YV9hcmdfdHlwZTsKICAgICAg ICAgICAgYnJlYWs7CiAgICAgICAgICBkZWZhdWx0OgoKCgogICAgICAgICAgICAodm9pZCkgKCpf X3ByaW50Zl9hcmdpbmZvX3RhYmxlW3NwZWNzW2NudF0uaW5mby5zcGVjXSkKICAgICAgICAgICAg ICAoJnNwZWNzW2NudF0uaW5mbywKICAgICAgICAgICAgICAgc3BlY3NbY250XS5uZGF0YV9hcmdz LCAmYXJnc190eXBlW3NwZWNzW2NudF0uZGF0YV9hcmddKTsKICAgICAgICAgICAgYnJlYWs7CiAg ICAgICAgICB9CiAgICAgIH0KCgoKICAgIGZvciAoY250ID0gMDsgY250IDwgbmFyZ3M7ICsrY250 KQogICAgICBzd2l0Y2ggKGFyZ3NfdHlwZVtjbnRdKQogICAgICAgIHsKCgoKCgogICAgICAgIGNh c2UgUEFfQ0hBUjogYXJnc192YWx1ZVtjbnRdLnBhX2NoYXIgPSBfX2J1aWx0aW5fdmFfYXJnKGFw X3NhdmUsaW50KTsgYnJlYWs7CiAgICAgICAgY2FzZSBQQV9XQ0hBUjogYXJnc192YWx1ZVtjbnRd LnBhX3djaGFyID0gX19idWlsdGluX3ZhX2FyZyhhcF9zYXZlLHdpbnRfdCk7IGJyZWFrOwogICAg ICAgIGNhc2UgUEFfSU5UfCgxIDw8IDEwKTogYXJnc192YWx1ZVtjbnRdLnBhX3Nob3J0X2ludCA9 IF9fYnVpbHRpbl92YV9hcmcoYXBfc2F2ZSxpbnQpOyBicmVhazsKICAgICAgICBjYXNlIFBBX0lO VDogYXJnc192YWx1ZVtjbnRdLnBhX2ludCA9IF9fYnVpbHRpbl92YV9hcmcoYXBfc2F2ZSxpbnQp OyBicmVhazsKICAgICAgICBjYXNlIFBBX0lOVHwoMSA8PCA5KTogYXJnc192YWx1ZVtjbnRdLnBh X2xvbmdfaW50ID0gX19idWlsdGluX3ZhX2FyZyhhcF9zYXZlLGxvbmcgaW50KTsgYnJlYWs7CiAg ICAgICAgY2FzZSBQQV9JTlR8KDEgPDwgOCk6IGFyZ3NfdmFsdWVbY250XS5wYV9sb25nX2xvbmdf aW50ID0gX19idWlsdGluX3ZhX2FyZyhhcF9zYXZlLGxvbmcgbG9uZyBpbnQpOyBicmVhazsKICAg ICAgICBjYXNlIFBBX0ZMT0FUOiBhcmdzX3ZhbHVlW2NudF0ucGFfZmxvYXQgPSBfX2J1aWx0aW5f dmFfYXJnKGFwX3NhdmUsZG91YmxlKTsgYnJlYWs7CiAgICAgICAgY2FzZSBQQV9ET1VCTEU6IGFy Z3NfdmFsdWVbY250XS5wYV9kb3VibGUgPSBfX2J1aWx0aW5fdmFfYXJnKGFwX3NhdmUsZG91Ymxl KTsgYnJlYWs7CiAgICAgICAgY2FzZSBQQV9ET1VCTEV8KDEgPDwgOCk6IGFyZ3NfdmFsdWVbY250 XS5wYV9sb25nX2RvdWJsZSA9IF9fYnVpbHRpbl92YV9hcmcoYXBfc2F2ZSxsb25nIGRvdWJsZSk7 IGJyZWFrOwogICAgICAgIGNhc2UgUEFfU1RSSU5HOiBhcmdzX3ZhbHVlW2NudF0ucGFfc3RyaW5n ID0gX19idWlsdGluX3ZhX2FyZyhhcF9zYXZlLGNvbnN0IGNoYXIgKik7IGJyZWFrOwogICAgICAg IGNhc2UgUEFfV1NUUklORzogYXJnc192YWx1ZVtjbnRdLnBhX3dzdHJpbmcgPSBfX2J1aWx0aW5f dmFfYXJnKGFwX3NhdmUsY29uc3Qgd2NoYXJfdCAqKTsgYnJlYWs7CiAgICAgICAgY2FzZSBQQV9Q T0lOVEVSOiBhcmdzX3ZhbHVlW2NudF0ucGFfcG9pbnRlciA9IF9fYnVpbHRpbl92YV9hcmcoYXBf c2F2ZSx2b2lkICopOyBicmVhazsKCiAgICAgICAgZGVmYXVsdDoKICAgICAgICAgIGlmICgoYXJn c190eXBlW2NudF0gJiAoMSA8PCAxMSkpICE9IDApCiAgICAgICAgICAgIGFyZ3NfdmFsdWVbY250 XS5wYV9wb2ludGVyID0gX19idWlsdGluX3ZhX2FyZyhhcF9zYXZlLHZvaWQgKik7CiAgICAgICAg ICBlbHNlCiAgICAgICAgICAgIGFyZ3NfdmFsdWVbY250XS5wYV9sb25nX2RvdWJsZSA9IDAuMDsK ICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KCgogICAgZm9yICg7IChzaXplX3QpIG5zcGVjc19k b25lIDwgbnNwZWNzOyArK25zcGVjc19kb25lKQogICAgICB7CiMgMTc3MiAidmZwcmludGYuYyIK ICAgICAgICBzdGF0aWMgY29uc3QgaW50IHN0ZXA0X2p1bXBzWzMwXSA9IHsgJiZkbzJfZm9ybV91 bmtub3duIC0gJiZkb19mb3JtX3Vua25vd24sICYmZG8yX2Zvcm1fdW5rbm93biAtICYmZG9fZm9y bV91bmtub3duLCAmJmRvMl9mb3JtX3Vua25vd24gLSAmJmRvX2Zvcm1fdW5rbm93biwgJiZkbzJf Zm9ybV91bmtub3duIC0gJiZkb19mb3JtX3Vua25vd24sICYmZG8yX2Zvcm1fdW5rbm93biAtICYm ZG9fZm9ybV91bmtub3duLCAmJmRvMl9mb3JtX3Vua25vd24gLSAmJmRvX2Zvcm1fdW5rbm93biwg JiZkbzJfZm9ybV91bmtub3duIC0gJiZkb19mb3JtX3Vua25vd24sICYmZG8yX2Zvcm1fdW5rbm93 biAtICYmZG9fZm9ybV91bmtub3duLCAmJmRvMl9mb3JtX3Vua25vd24gLSAmJmRvX2Zvcm1fdW5r bm93biwgJiZkbzJfZm9ybV91bmtub3duIC0gJiZkb19mb3JtX3Vua25vd24sICYmZG8yX2Zvcm1f dW5rbm93biAtICYmZG9fZm9ybV91bmtub3duLCAmJmRvMl9mb3JtX3Vua25vd24gLSAmJmRvX2Zv cm1fdW5rbm93biwgJiZkbzJfZm9ybV91bmtub3duIC0gJiZkb19mb3JtX3Vua25vd24sICYmZG8y X2Zvcm1fdW5rbm93biAtICYmZG9fZm9ybV91bmtub3duLCAmJmRvMl9mb3JtX3BlcmNlbnQgLSAm JmRvX2Zvcm1fdW5rbm93biwgJiZkbzJfZm9ybV9pbnRlZ2VyIC0gJiZkb19mb3JtX3Vua25vd24s ICYmZG8yX2Zvcm1fdW5zaWduZWQgLSAmJmRvX2Zvcm1fdW5rbm93biwgJiZkbzJfZm9ybV9vY3Rh bCAtICYmZG9fZm9ybV91bmtub3duLCAmJmRvMl9mb3JtX2hleGEgLSAmJmRvX2Zvcm1fdW5rbm93 biwgJiZkbzJfZm9ybV9mbG9hdCAtICYmZG9fZm9ybV91bmtub3duLCAmJmRvMl9mb3JtX2NoYXJh Y3RlciAtICYmZG9fZm9ybV91bmtub3duLCAmJmRvMl9mb3JtX3N0cmluZyAtICYmZG9fZm9ybV91 bmtub3duLCAmJmRvMl9mb3JtX3BvaW50ZXIgLSAmJmRvX2Zvcm1fdW5rbm93biwgJiZkbzJfZm9y bV9udW1iZXIgLSAmJmRvX2Zvcm1fdW5rbm93biwgJiZkbzJfZm9ybV9zdHJlcnJvciAtICYmZG9f Zm9ybV91bmtub3duLCAmJmRvMl9mb3JtX3djaGFyYWN0ZXIgLSAmJmRvX2Zvcm1fdW5rbm93biwg JiZkbzJfZm9ybV9mbG9hdGhleCAtICYmZG9fZm9ybV91bmtub3duLCAmJmRvMl9mb3JtX3Vua25v d24gLSAmJmRvX2Zvcm1fdW5rbm93biwgJiZkbzJfZm9ybV91bmtub3duIC0gJiZkb19mb3JtX3Vu a25vd24sICYmZG8yX2Zvcm1fdW5rbm93biAtICYmZG9fZm9ybV91bmtub3duIH07CgogICAgICAg IGludCBpc19uZWdhdGl2ZTsKICAgICAgICB1bmlvbgogICAgICAgIHsKICAgICAgICAgIHVuc2ln bmVkIGxvbmcgbG9uZyBpbnQgbG9uZ2xvbmc7CiAgICAgICAgICB1bnNpZ25lZCBsb25nIGludCB3 b3JkOwogICAgICAgIH0gbnVtYmVyOwogICAgICAgIGludCBiYXNlOwogICAgICAgIHVuaW9uIHBy aW50Zl9hcmcgdGhlX2FyZzsKICAgICAgICBjaGFyICpzdHJpbmc7CgoKICAgICAgICBpbnQgYWx0 ID0gc3BlY3NbbnNwZWNzX2RvbmVdLmluZm8uYWx0OwogICAgICAgIGludCBzcGFjZSA9IHNwZWNz W25zcGVjc19kb25lXS5pbmZvLnNwYWNlOwogICAgICAgIGludCBsZWZ0ID0gc3BlY3NbbnNwZWNz X2RvbmVdLmluZm8ubGVmdDsKICAgICAgICBpbnQgc2hvd3NpZ24gPSBzcGVjc1tuc3BlY3NfZG9u ZV0uaW5mby5zaG93c2lnbjsKICAgICAgICBpbnQgZ3JvdXAgPSBzcGVjc1tuc3BlY3NfZG9uZV0u aW5mby5ncm91cDsKICAgICAgICBpbnQgaXNfbG9uZ19kb3VibGUgPSBzcGVjc1tuc3BlY3NfZG9u ZV0uaW5mby5pc19sb25nX2RvdWJsZTsKICAgICAgICBpbnQgaXNfc2hvcnQgPSBzcGVjc1tuc3Bl Y3NfZG9uZV0uaW5mby5pc19zaG9ydDsKICAgICAgICBpbnQgaXNfY2hhciA9IHNwZWNzW25zcGVj c19kb25lXS5pbmZvLmlzX2NoYXI7CiAgICAgICAgaW50IGlzX2xvbmcgPSBzcGVjc1tuc3BlY3Nf ZG9uZV0uaW5mby5pc19sb25nOwogICAgICAgIGludCB3aWR0aCA9IHNwZWNzW25zcGVjc19kb25l XS5pbmZvLndpZHRoOwogICAgICAgIGludCBwcmVjID0gc3BlY3NbbnNwZWNzX2RvbmVdLmluZm8u cHJlYzsKICAgICAgICBpbnQgdXNlX291dGRpZ2l0cyA9IHNwZWNzW25zcGVjc19kb25lXS5pbmZv LmkxOG47CiAgICAgICAgY2hhciBwYWQgPSBzcGVjc1tuc3BlY3NfZG9uZV0uaW5mby5wYWQ7CiAg ICAgICAgY2hhciBzcGVjID0gc3BlY3NbbnNwZWNzX2RvbmVdLmluZm8uc3BlYzsKICAgICAgICBj aGFyICp3b3Jrc3RhcnQgPSAoKHZvaWQgKikwKTsKCgogICAgICAgIGlmIChzcGVjc1tuc3BlY3Nf ZG9uZV0ud2lkdGhfYXJnICE9IC0xKQogICAgICAgICAgewoKICAgICAgICAgICAgc3BlY3NbbnNw ZWNzX2RvbmVdLmluZm8ud2lkdGggPQogICAgICAgICAgICAgIGFyZ3NfdmFsdWVbc3BlY3NbbnNw ZWNzX2RvbmVdLndpZHRoX2FyZ10ucGFfaW50OwoKICAgICAgICAgICAgaWYgKHNwZWNzW25zcGVj c19kb25lXS5pbmZvLndpZHRoIDwgMCkKCgogICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAg IHNwZWNzW25zcGVjc19kb25lXS5pbmZvLndpZHRoICo9IC0xOwogICAgICAgICAgICAgICAgbGVm dCA9IHNwZWNzW25zcGVjc19kb25lXS5pbmZvLmxlZnQgPSAxOwogICAgICAgICAgICAgIH0KICAg ICAgICAgICAgd2lkdGggPSBzcGVjc1tuc3BlY3NfZG9uZV0uaW5mby53aWR0aDsKICAgICAgICAg IH0KCiAgICAgICAgaWYgKHNwZWNzW25zcGVjc19kb25lXS5wcmVjX2FyZyAhPSAtMSkKICAgICAg ICAgIHsKCiAgICAgICAgICAgIHNwZWNzW25zcGVjc19kb25lXS5pbmZvLnByZWMgPQogICAgICAg ICAgICAgIGFyZ3NfdmFsdWVbc3BlY3NbbnNwZWNzX2RvbmVdLnByZWNfYXJnXS5wYV9pbnQ7Cgog ICAgICAgICAgICBpZiAoc3BlY3NbbnNwZWNzX2RvbmVdLmluZm8ucHJlYyA8IDApCgoKICAgICAg ICAgICAgICBzcGVjc1tuc3BlY3NfZG9uZV0uaW5mby5wcmVjID0gLTE7CgogICAgICAgICAgICBw cmVjID0gc3BlY3NbbnNwZWNzX2RvbmVdLmluZm8ucHJlYzsKICAgICAgICAgIH0KCgogICAgICAg IGlmICgoKChwcmVjKT4od2lkdGgpKT8ocHJlYyk6KHdpZHRoKSkgKyAzMiA+IChpbnQpIChzaXpl b2YgKHdvcmtfYnVmZmVyKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIC8gc2l6ZW9mIChjaGFyKSkpCiAgICAgICAgICB7CiAgICAgICAgICAgIGlmIChfX2xpYmNf dXNlX2FsbG9jYSAoKCgoKHByZWMpPih3aWR0aCkpPyhwcmVjKTood2lkdGgpKSArIDMyKQogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogc2l6ZW9mIChjaGFyKSkpCiAgICAgICAg ICAgICAgd29ya2VuZCA9ICgoY2hhciAqKSBfX2J1aWx0aW5fYWxsb2NhICgoKCgocHJlYyk+KHdp ZHRoKSk/KHByZWMpOih3aWR0aCkpICsgMzIpICogc2l6ZW9mIChjaGFyKSkKCiAgICAgICAgICAg ICAgICAgICAgICAgICArICgoKChwcmVjKT4od2lkdGgpKT8ocHJlYyk6KHdpZHRoKSkgKyAzMikp OwogICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgd29ya3N0 YXJ0ID0gKGNoYXIgKikgbWFsbG9jICgoKCgocHJlYyk+KHdpZHRoKSk/KHByZWMpOih3aWR0aCkp ICsgMzIpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBz aXplb2YgKGNoYXIpKTsKICAgICAgICAgICAgICAgIHdvcmtlbmQgPSB3b3Jrc3RhcnQgKyAoKCgo cHJlYyk+KHdpZHRoKSk/KHByZWMpOih3aWR0aCkpICsgMzIpOwogICAgICAgICAgICAgIH0KICAg ICAgICAgIH0KCgogICAgICAgIHdoaWxlICgxKQogICAgICAgICAgewogICAgICAgICAgICBkbyB7 IGludCBvZmZzZXQ7IHZvaWQgKiBwdHI7IHNwZWMgPSAoc3BlYyk7IG9mZnNldCA9ICgoc3BlYykg PCAnICcgfHwgKHNwZWMpID4gJ3onKSA/ICYmZG8yX2Zvcm1fdW5rbm93biAtICYmZG9fZm9ybV91 bmtub3duIDogc3RlcDRfanVtcHNbKGp1bXBfdGFibGVbKGludCkgKHNwZWMpIC0gJyAnXSldOyBw dHIgPSAmJmRvX2Zvcm1fdW5rbm93biArIG9mZnNldDsgZ290byAqcHRyOyB9IHdoaWxlICgwKTsK CiAgICAgICAgICAgIGRvMl9mb3JtX3BlcmNlbnQ6IGRvIHsgcmVnaXN0ZXIgY29uc3QgaW50IG91 dGMgPSAoJyUnKTsgaWYgKCgoKHMpLT5fSU9fd3JpdGVfcHRyID49IChzKS0+X0lPX3dyaXRlX2Vu ZCkgPyBfX292ZXJmbG93IChzLCAodW5zaWduZWQgY2hhcikgKG91dGMpKSA6ICh1bnNpZ25lZCBj aGFyKSAoKihzKS0+X0lPX3dyaXRlX3B0cisrID0gKG91dGMpKSkgPT0gKC0xKSkgeyBkb25lID0g LTE7IGdvdG8gYWxsX2RvbmU7IH0gZWxzZSArK2RvbmU7IH0gd2hpbGUgKDApOyBicmVhazsgZG8y X2Zvcm1faW50ZWdlcjogYmFzZSA9IDEwOyBpZiAoMCkgeyBsb25nIGxvbmcgaW50IHNpZ25lZF9u dW1iZXI7IGlmICgoJnNwZWNzW25zcGVjc19kb25lXSkgPT0gKCh2b2lkICopMCkpIHNpZ25lZF9u dW1iZXIgPSBfX2J1aWx0aW5fdmFfYXJnKGFwLGxvbmcgbG9uZyBpbnQpOyBlbHNlIHNpZ25lZF9u dW1iZXIgPSBhcmdzX3ZhbHVlWygmc3BlY3NbbnNwZWNzX2RvbmVdKS0+ZGF0YV9hcmddLnBhX2xv bmdfbG9uZ19pbnQ7IGlzX25lZ2F0aXZlID0gc2lnbmVkX251bWJlciA8IDA7IG51bWJlci5sb25n bG9uZyA9IGlzX25lZ2F0aXZlID8gKC0gc2lnbmVkX251bWJlcikgOiBzaWduZWRfbnVtYmVyOyBn b3RvIGRvMl9sb25nbG9uZ19udW1iZXI7IH0gZWxzZSB7IGxvbmcgaW50IHNpZ25lZF9udW1iZXI7 IGlmICgoJnNwZWNzW25zcGVjc19kb25lXSkgPT0gKCh2b2lkICopMCkpIHsgaWYgKGlzX2xvbmcp IHNpZ25lZF9udW1iZXIgPSBfX2J1aWx0aW5fdmFfYXJnKGFwLGxvbmcgaW50KTsgZWxzZSBzaWdu ZWRfbnVtYmVyID0gX19idWlsdGluX3ZhX2FyZyhhcCxpbnQpOyB9IGVsc2UgaWYgKGlzX2xvbmcp IHNpZ25lZF9udW1iZXIgPSBhcmdzX3ZhbHVlWygmc3BlY3NbbnNwZWNzX2RvbmVdKS0+ZGF0YV9h cmddLnBhX2xvbmdfaW50OyBlbHNlIGlmICghaXNfc2hvcnQpIHNpZ25lZF9udW1iZXIgPSBhcmdz X3ZhbHVlWygmc3BlY3NbbnNwZWNzX2RvbmVdKS0+ZGF0YV9hcmddLnBhX2ludDsgZWxzZSBzaWdu ZWRfbnVtYmVyID0gYXJnc192YWx1ZVsoJnNwZWNzW25zcGVjc19kb25lXSktPmRhdGFfYXJnXS5w YV9zaG9ydF9pbnQ7IGlzX25lZ2F0aXZlID0gc2lnbmVkX251bWJlciA8IDA7IG51bWJlci53b3Jk ID0gaXNfbmVnYXRpdmUgPyAoLSBzaWduZWRfbnVtYmVyKSA6IHNpZ25lZF9udW1iZXI7IGdvdG8g ZG8yX251bWJlcjsgfSBkbzJfZm9ybV91bnNpZ25lZDogYmFzZSA9IDEwOyBnb3RvIGRvMl91bnNp Z25lZF9udW1iZXI7IGRvMl9mb3JtX29jdGFsOiBiYXNlID0gODsgZ290byBkbzJfdW5zaWduZWRf bnVtYmVyOyBkbzJfZm9ybV9oZXhhOiBiYXNlID0gMTY7IGRvMl91bnNpZ25lZF9udW1iZXI6IGlz X25lZ2F0aXZlID0gMDsgc2hvd3NpZ24gPSAwOyBzcGFjZSA9IDA7IGlmICgwKSB7IGlmICgoJnNw ZWNzW25zcGVjc19kb25lXSkgPT0gKCh2b2lkICopMCkpIG51bWJlci5sb25nbG9uZyA9IF9fYnVp bHRpbl92YV9hcmcoYXAsdW5zaWduZWQgbG9uZyBsb25nIGludCk7IGVsc2UgbnVtYmVyLmxvbmds b25nID0gYXJnc192YWx1ZVsoJnNwZWNzW25zcGVjc19kb25lXSktPmRhdGFfYXJnXS5wYV91X2xv bmdfbG9uZ19pbnQ7IGRvMl9sb25nbG9uZ19udW1iZXI6IGlmIChwcmVjIDwgMCkgcHJlYyA9IDE7 IGVsc2UgcGFkID0gJyAnOyBpZiAocHJlYyA9PSAwICYmIG51bWJlci5sb25nbG9uZyA9PSAwKSB7 IHN0cmluZyA9IHdvcmtlbmQ7IGlmIChiYXNlID09IDggJiYgYWx0KSAqLS1zdHJpbmcgPSAnMCc7 IH0gZWxzZSB7IHN0cmluZyA9IF9pdG9hIChudW1iZXIubG9uZ2xvbmcsIHdvcmtlbmQsIGJhc2Us IHNwZWMgPT0gJ1gnKTsgaWYgKGdyb3VwICYmIGdyb3VwaW5nKSBzdHJpbmcgPSBncm91cF9udW1i ZXIgKHN0cmluZywgd29ya2VuZCwgZ3JvdXBpbmcsIHRob3VzYW5kc19zZXApOyBpZiAodXNlX291 dGRpZ2l0cyAmJiBiYXNlID09IDEwKSBzdHJpbmcgPSBfaTE4bl9udW1iZXJfcmV3cml0ZSAoc3Ry aW5nLCB3b3JrZW5kKTsgfSBudW1iZXIud29yZCA9IG51bWJlci5sb25nbG9uZyAhPSAwOyB9IGVs c2UgeyBpZiAoKCZzcGVjc1tuc3BlY3NfZG9uZV0pID09ICgodm9pZCAqKTApKSB7IGlmIChpc19s b25nKSBudW1iZXIud29yZCA9IF9fYnVpbHRpbl92YV9hcmcoYXAsdW5zaWduZWQgbG9uZyBpbnQp OyBlbHNlIGlmIChpc19jaGFyKSBudW1iZXIud29yZCA9ICh1bnNpZ25lZCBjaGFyKSBfX2J1aWx0 aW5fdmFfYXJnKGFwLHVuc2lnbmVkIGludCk7IGVsc2UgaWYgKCFpc19zaG9ydCkgbnVtYmVyLndv cmQgPSBfX2J1aWx0aW5fdmFfYXJnKGFwLHVuc2lnbmVkIGludCk7IGVsc2UgbnVtYmVyLndvcmQg PSAodW5zaWduZWQgc2hvcnQgaW50KSBfX2J1aWx0aW5fdmFfYXJnKGFwLHVuc2lnbmVkIGludCk7 IH0gZWxzZSBpZiAoaXNfbG9uZykgbnVtYmVyLndvcmQgPSBhcmdzX3ZhbHVlWygmc3BlY3NbbnNw ZWNzX2RvbmVdKS0+ZGF0YV9hcmddLnBhX3VfbG9uZ19pbnQ7IGVsc2UgaWYgKGlzX2NoYXIpIG51 bWJlci53b3JkID0gKHVuc2lnbmVkIGNoYXIpIGFyZ3NfdmFsdWVbKCZzcGVjc1tuc3BlY3NfZG9u ZV0pLT5kYXRhX2FyZ10ucGFfY2hhcjsgZWxzZSBpZiAoIWlzX3Nob3J0KSBudW1iZXIud29yZCA9 IGFyZ3NfdmFsdWVbKCZzcGVjc1tuc3BlY3NfZG9uZV0pLT5kYXRhX2FyZ10ucGFfdV9pbnQ7IGVs c2UgbnVtYmVyLndvcmQgPSAodW5zaWduZWQgc2hvcnQgaW50KSBhcmdzX3ZhbHVlWygmc3BlY3Nb bnNwZWNzX2RvbmVdKS0+ZGF0YV9hcmddLnBhX3Vfc2hvcnRfaW50OyBkbzJfbnVtYmVyOiBpZiAo cHJlYyA8IDApIHByZWMgPSAxOyBlbHNlIHBhZCA9ICcgJzsgaWYgKHByZWMgPT0gMCAmJiBudW1i ZXIud29yZCA9PSAwKSB7IHN0cmluZyA9IHdvcmtlbmQ7IGlmIChiYXNlID09IDggJiYgYWx0KSAq LS1zdHJpbmcgPSAnMCc7IH0gZWxzZSB7IHN0cmluZyA9IF9pdG9hX3dvcmQgKG51bWJlci53b3Jk LCB3b3JrZW5kLCBiYXNlLCBzcGVjID09ICdYJyk7IGlmIChncm91cCAmJiBncm91cGluZykgc3Ry aW5nID0gZ3JvdXBfbnVtYmVyIChzdHJpbmcsIHdvcmtlbmQsIGdyb3VwaW5nLCB0aG91c2FuZHNf c2VwKTsgaWYgKHVzZV9vdXRkaWdpdHMgJiYgYmFzZSA9PSAxMCkgc3RyaW5nID0gX2kxOG5fbnVt YmVyX3Jld3JpdGUgKHN0cmluZywgd29ya2VuZCk7IH0gfSBpZiAocHJlYyA8PSB3b3JrZW5kIC0g c3RyaW5nICYmIG51bWJlci53b3JkICE9IDAgJiYgYWx0ICYmIGJhc2UgPT0gOCkgKi0tc3RyaW5n ID0gJzAnOyBwcmVjID0gKCgoMCk+KHByZWMgLSAod29ya2VuZCAtIHN0cmluZykpKT8oMCk6KHBy ZWMgLSAod29ya2VuZCAtIHN0cmluZykpKTsgaWYgKCFsZWZ0KSB7IHdpZHRoIC09IHdvcmtlbmQg LSBzdHJpbmcgKyBwcmVjOyBpZiAobnVtYmVyLndvcmQgIT0gMCAmJiBhbHQgJiYgYmFzZSA9PSAx Nikgd2lkdGggLT0gMjsgaWYgKGlzX25lZ2F0aXZlIHx8IHNob3dzaWduIHx8IHNwYWNlKSAtLXdp ZHRoOyBpZiAocGFkID09ICcgJykgeyBpZiAod2lkdGggPiAwKSBkb25lICs9IF9JT19wYWRuX2lu dGVybmFsIChzLCAoJyAnKSwgd2lkdGgpOyB3aWR0aCA9IDA7IH0gaWYgKGlzX25lZ2F0aXZlKSBk byB7IHJlZ2lzdGVyIGNvbnN0IGludCBvdXRjID0gKCctJyk7IGlmICgoKChzKS0+X0lPX3dyaXRl X3B0ciA+PSAocyktPl9JT193cml0ZV9lbmQpID8gX19vdmVyZmxvdyAocywgKHVuc2lnbmVkIGNo YXIpIChvdXRjKSkgOiAodW5zaWduZWQgY2hhcikgKCoocyktPl9JT193cml0ZV9wdHIrKyA9IChv dXRjKSkpID09ICgtMSkpIHsgZG9uZSA9IC0xOyBnb3RvIGFsbF9kb25lOyB9IGVsc2UgKytkb25l OyB9IHdoaWxlICgwKTsgZWxzZSBpZiAoc2hvd3NpZ24pIGRvIHsgcmVnaXN0ZXIgY29uc3QgaW50 IG91dGMgPSAoJysnKTsgaWYgKCgoKHMpLT5fSU9fd3JpdGVfcHRyID49IChzKS0+X0lPX3dyaXRl X2VuZCkgPyBfX292ZXJmbG93IChzLCAodW5zaWduZWQgY2hhcikgKG91dGMpKSA6ICh1bnNpZ25l ZCBjaGFyKSAoKihzKS0+X0lPX3dyaXRlX3B0cisrID0gKG91dGMpKSkgPT0gKC0xKSkgeyBkb25l ID0gLTE7IGdvdG8gYWxsX2RvbmU7IH0gZWxzZSArK2RvbmU7IH0gd2hpbGUgKDApOyBlbHNlIGlm IChzcGFjZSkgZG8geyByZWdpc3RlciBjb25zdCBpbnQgb3V0YyA9ICgnICcpOyBpZiAoKCgocykt Pl9JT193cml0ZV9wdHIgPj0gKHMpLT5fSU9fd3JpdGVfZW5kKSA/IF9fb3ZlcmZsb3cgKHMsICh1 bnNpZ25lZCBjaGFyKSAob3V0YykpIDogKHVuc2lnbmVkIGNoYXIpICgqKHMpLT5fSU9fd3JpdGVf cHRyKysgPSAob3V0YykpKSA9PSAoLTEpKSB7IGRvbmUgPSAtMTsgZ290byBhbGxfZG9uZTsgfSBl bHNlICsrZG9uZTsgfSB3aGlsZSAoMCk7IGlmIChudW1iZXIud29yZCAhPSAwICYmIGFsdCAmJiBi YXNlID09IDE2KSB7IGRvIHsgcmVnaXN0ZXIgY29uc3QgaW50IG91dGMgPSAoJzAnKTsgaWYgKCgo KHMpLT5fSU9fd3JpdGVfcHRyID49IChzKS0+X0lPX3dyaXRlX2VuZCkgPyBfX292ZXJmbG93IChz LCAodW5zaWduZWQgY2hhcikgKG91dGMpKSA6ICh1bnNpZ25lZCBjaGFyKSAoKihzKS0+X0lPX3dy aXRlX3B0cisrID0gKG91dGMpKSkgPT0gKC0xKSkgeyBkb25lID0gLTE7IGdvdG8gYWxsX2RvbmU7 IH0gZWxzZSArK2RvbmU7IH0gd2hpbGUgKDApOyBkbyB7IHJlZ2lzdGVyIGNvbnN0IGludCBvdXRj ID0gKHNwZWMpOyBpZiAoKCgocyktPl9JT193cml0ZV9wdHIgPj0gKHMpLT5fSU9fd3JpdGVfZW5k KSA/IF9fb3ZlcmZsb3cgKHMsICh1bnNpZ25lZCBjaGFyKSAob3V0YykpIDogKHVuc2lnbmVkIGNo YXIpICgqKHMpLT5fSU9fd3JpdGVfcHRyKysgPSAob3V0YykpKSA9PSAoLTEpKSB7IGRvbmUgPSAt MTsgZ290byBhbGxfZG9uZTsgfSBlbHNlICsrZG9uZTsgfSB3aGlsZSAoMCk7IH0gd2lkdGggKz0g cHJlYzsgaWYgKHdpZHRoID4gMCkgZG9uZSArPSBfSU9fcGFkbl9pbnRlcm5hbCAocywgKCcwJyks IHdpZHRoKTsgZG8geyBpZiAoKHNpemVfdCkgKCgqKHN0cnVjdCBfSU9fanVtcF90ICoqKSAoKHZv aWQgKikgJigoc3RydWN0IF9JT19GSUxFX3BsdXMgKikgKChzKSkpLT52dGFibGUgKyAoKHMpKS0+ X3Z0YWJsZV9vZmZzZXQpKS0+X194c3B1dG4pICgocyksICgoc3RyaW5nKSksICgod29ya2VuZCAt IHN0cmluZykpKSAhPSAoc2l6ZV90KSAod29ya2VuZCAtIHN0cmluZykpIHsgZG9uZSA9IC0xOyBn b3RvIGFsbF9kb25lOyB9IGRvbmUgKz0gKHdvcmtlbmQgLSBzdHJpbmcpOyB9IHdoaWxlICgwKTsg YnJlYWs7IH0gZWxzZSB7IGlmIChpc19uZWdhdGl2ZSkgeyBkbyB7IHJlZ2lzdGVyIGNvbnN0IGlu dCBvdXRjID0gKCctJyk7IGlmICgoKChzKS0+X0lPX3dyaXRlX3B0ciA+PSAocyktPl9JT193cml0 ZV9lbmQpID8gX19vdmVyZmxvdyAocywgKHVuc2lnbmVkIGNoYXIpIChvdXRjKSkgOiAodW5zaWdu ZWQgY2hhcikgKCoocyktPl9JT193cml0ZV9wdHIrKyA9IChvdXRjKSkpID09ICgtMSkpIHsgZG9u ZSA9IC0xOyBnb3RvIGFsbF9kb25lOyB9IGVsc2UgKytkb25lOyB9IHdoaWxlICgwKTsgLS13aWR0 aDsgfSBlbHNlIGlmIChzaG93c2lnbikgeyBkbyB7IHJlZ2lzdGVyIGNvbnN0IGludCBvdXRjID0g KCcrJyk7IGlmICgoKChzKS0+X0lPX3dyaXRlX3B0ciA+PSAocyktPl9JT193cml0ZV9lbmQpID8g X19vdmVyZmxvdyAocywgKHVuc2lnbmVkIGNoYXIpIChvdXRjKSkgOiAodW5zaWduZWQgY2hhcikg KCoocyktPl9JT193cml0ZV9wdHIrKyA9IChvdXRjKSkpID09ICgtMSkpIHsgZG9uZSA9IC0xOyBn b3RvIGFsbF9kb25lOyB9IGVsc2UgKytkb25lOyB9IHdoaWxlICgwKTsgLS13aWR0aDsgfSBlbHNl IGlmIChzcGFjZSkgeyBkbyB7IHJlZ2lzdGVyIGNvbnN0IGludCBvdXRjID0gKCcgJyk7IGlmICgo KChzKS0+X0lPX3dyaXRlX3B0ciA+PSAocyktPl9JT193cml0ZV9lbmQpID8gX19vdmVyZmxvdyAo cywgKHVuc2lnbmVkIGNoYXIpIChvdXRjKSkgOiAodW5zaWduZWQgY2hhcikgKCoocyktPl9JT193 cml0ZV9wdHIrKyA9IChvdXRjKSkpID09ICgtMSkpIHsgZG9uZSA9IC0xOyBnb3RvIGFsbF9kb25l OyB9IGVsc2UgKytkb25lOyB9IHdoaWxlICgwKTsgLS13aWR0aDsgfSBpZiAobnVtYmVyLndvcmQg IT0gMCAmJiBhbHQgJiYgYmFzZSA9PSAxNikgeyBkbyB7IHJlZ2lzdGVyIGNvbnN0IGludCBvdXRj ID0gKCcwJyk7IGlmICgoKChzKS0+X0lPX3dyaXRlX3B0ciA+PSAocyktPl9JT193cml0ZV9lbmQp ID8gX19vdmVyZmxvdyAocywgKHVuc2lnbmVkIGNoYXIpIChvdXRjKSkgOiAodW5zaWduZWQgY2hh cikgKCoocyktPl9JT193cml0ZV9wdHIrKyA9IChvdXRjKSkpID09ICgtMSkpIHsgZG9uZSA9IC0x OyBnb3RvIGFsbF9kb25lOyB9IGVsc2UgKytkb25lOyB9IHdoaWxlICgwKTsgZG8geyByZWdpc3Rl ciBjb25zdCBpbnQgb3V0YyA9IChzcGVjKTsgaWYgKCgoKHMpLT5fSU9fd3JpdGVfcHRyID49IChz KS0+X0lPX3dyaXRlX2VuZCkgPyBfX292ZXJmbG93IChzLCAodW5zaWduZWQgY2hhcikgKG91dGMp KSA6ICh1bnNpZ25lZCBjaGFyKSAoKihzKS0+X0lPX3dyaXRlX3B0cisrID0gKG91dGMpKSkgPT0g KC0xKSkgeyBkb25lID0gLTE7IGdvdG8gYWxsX2RvbmU7IH0gZWxzZSArK2RvbmU7IH0gd2hpbGUg KDApOyB3aWR0aCAtPSAyOyB9IHdpZHRoIC09IHdvcmtlbmQgLSBzdHJpbmcgKyBwcmVjOyBpZiAo cHJlYyA+IDApIHsgaW50IHRlbXAgPSB3aWR0aDsgd2lkdGggPSBwcmVjOyBpZiAod2lkdGggPiAw KSBkb25lICs9IF9JT19wYWRuX2ludGVybmFsIChzLCAoJzAnKSwgd2lkdGgpOzsgd2lkdGggPSB0 ZW1wOyB9IGRvIHsgaWYgKChzaXplX3QpICgoKihzdHJ1Y3QgX0lPX2p1bXBfdCAqKikgKCh2b2lk ICopICYoKHN0cnVjdCBfSU9fRklMRV9wbHVzICopICgocykpKS0+dnRhYmxlICsgKChzKSktPl92 dGFibGVfb2Zmc2V0KSktPl9feHNwdXRuKSAoKHMpLCAoKHN0cmluZykpLCAoKHdvcmtlbmQgLSBz dHJpbmcpKSkgIT0gKHNpemVfdCkgKHdvcmtlbmQgLSBzdHJpbmcpKSB7IGRvbmUgPSAtMTsgZ290 byBhbGxfZG9uZTsgfSBkb25lICs9ICh3b3JrZW5kIC0gc3RyaW5nKTsgfSB3aGlsZSAoMCk7IGlm ICh3aWR0aCA+IDApIGRvbmUgKz0gX0lPX3BhZG5faW50ZXJuYWwgKHMsICgnICcpLCB3aWR0aCk7 IGJyZWFrOyB9IGRvMl9mb3JtX2Zsb2F0OiB7IGNvbnN0IHZvaWQgKnB0cjsgaW50IGZ1bmN0aW9u X2RvbmU7IGlmICgoJnNwZWNzW25zcGVjc19kb25lXSkgPT0gKCh2b2lkICopMCkpIHsgc3RydWN0 IHByaW50Zl9pbmZvIGluZm8gPSB7IHByZWM6IHByZWMsIHdpZHRoOiB3aWR0aCwgc3BlYzogc3Bl YywgaXNfbG9uZ19kb3VibGU6IGlzX2xvbmdfZG91YmxlLCBpc19zaG9ydDogaXNfc2hvcnQsIGlz X2xvbmc6IGlzX2xvbmcsIGFsdDogYWx0LCBzcGFjZTogc3BhY2UsIGxlZnQ6IGxlZnQsIHNob3dz aWduOiBzaG93c2lnbiwgZ3JvdXA6IGdyb3VwLCBwYWQ6IHBhZCwgZXh0cmE6IDAsIHdpZGU6IHNp emVvZiAoY2hhcikgIT0gMSB9OyBpZiAoaXNfbG9uZ19kb3VibGUpIHRoZV9hcmcucGFfbG9uZ19k b3VibGUgPSBfX2J1aWx0aW5fdmFfYXJnKGFwLGxvbmcgZG91YmxlKTsgZWxzZSB0aGVfYXJnLnBh X2RvdWJsZSA9IF9fYnVpbHRpbl92YV9hcmcoYXAsZG91YmxlKTsgcHRyID0gKGNvbnN0IHZvaWQg KikgJnRoZV9hcmc7IGZ1bmN0aW9uX2RvbmUgPSBfX3ByaW50Zl9mcCAocywgJmluZm8sICZwdHIp OyB9IGVsc2UgeyBwdHIgPSAoY29uc3Qgdm9pZCAqKSAmYXJnc192YWx1ZVsoJnNwZWNzW25zcGVj c19kb25lXSktPmRhdGFfYXJnXTsgZnVuY3Rpb25fZG9uZSA9IF9fcHJpbnRmX2ZwIChzLCAmKCZz cGVjc1tuc3BlY3NfZG9uZV0pLT5pbmZvLCAmcHRyKTsgfSBpZiAoZnVuY3Rpb25fZG9uZSA8IDAp IHsgZG9uZSA9IC0xOyBnb3RvIGFsbF9kb25lOyB9IGRvbmUgKz0gZnVuY3Rpb25fZG9uZTsgfSBi cmVhazsgZG8yX2Zvcm1fZmxvYXRoZXg6IHsgY29uc3Qgdm9pZCAqcHRyOyBpbnQgZnVuY3Rpb25f ZG9uZTsgaWYgKCgmc3BlY3NbbnNwZWNzX2RvbmVdKSA9PSAoKHZvaWQgKikwKSkgeyBzdHJ1Y3Qg cHJpbnRmX2luZm8gaW5mbyA9IHsgcHJlYzogcHJlYywgd2lkdGg6IHdpZHRoLCBzcGVjOiBzcGVj LCBpc19sb25nX2RvdWJsZTogaXNfbG9uZ19kb3VibGUsIGlzX3Nob3J0OiBpc19zaG9ydCwgaXNf bG9uZzogaXNfbG9uZywgYWx0OiBhbHQsIHNwYWNlOiBzcGFjZSwgbGVmdDogbGVmdCwgc2hvd3Np Z246IHNob3dzaWduLCBncm91cDogZ3JvdXAsIHBhZDogcGFkLCBleHRyYTogMCwgd2lkZTogc2l6 ZW9mIChjaGFyKSAhPSAxIH07IGlmIChpc19sb25nX2RvdWJsZSkgdGhlX2FyZy5wYV9sb25nX2Rv dWJsZSA9IF9fYnVpbHRpbl92YV9hcmcoYXAsbG9uZyBkb3VibGUpOyBlbHNlIHRoZV9hcmcucGFf ZG91YmxlID0gX19idWlsdGluX3ZhX2FyZyhhcCxkb3VibGUpOyBwdHIgPSAoY29uc3Qgdm9pZCAq KSAmdGhlX2FyZzsgZnVuY3Rpb25fZG9uZSA9IF9fcHJpbnRmX2ZwaGV4IChzLCAmaW5mbywgJnB0 cik7IH0gZWxzZSB7IHB0ciA9IChjb25zdCB2b2lkICopICZhcmdzX3ZhbHVlWygmc3BlY3NbbnNw ZWNzX2RvbmVdKS0+ZGF0YV9hcmddOyBmdW5jdGlvbl9kb25lID0gX19wcmludGZfZnBoZXggKHMs ICYoJnNwZWNzW25zcGVjc19kb25lXSktPmluZm8sICZwdHIpOyB9IGlmIChmdW5jdGlvbl9kb25l IDwgMCkgeyBkb25lID0gLTE7IGdvdG8gYWxsX2RvbmU7IH0gZG9uZSArPSBmdW5jdGlvbl9kb25l OyB9IGJyZWFrOyBkbzJfZm9ybV9wb2ludGVyOiB7IGNvbnN0IHZvaWQgKnB0cjsgaWYgKCgmc3Bl Y3NbbnNwZWNzX2RvbmVdKSA9PSAoKHZvaWQgKikwKSkgcHRyID0gX19idWlsdGluX3ZhX2FyZyhh cCx2b2lkICopOyBlbHNlIHB0ciA9IGFyZ3NfdmFsdWVbKCZzcGVjc1tuc3BlY3NfZG9uZV0pLT5k YXRhX2FyZ10ucGFfcG9pbnRlcjsgaWYgKHB0ciAhPSAoKHZvaWQgKikwKSkgeyBiYXNlID0gMTY7 IG51bWJlci53b3JkID0gKHVuc2lnbmVkIGxvbmcgaW50KSBwdHI7IGlzX25lZ2F0aXZlID0gMDsg YWx0ID0gMTsgZ3JvdXAgPSAwOyBzcGVjID0gJ3gnOyBnb3RvIGRvMl9udW1iZXI7IH0gZWxzZSB7 IHN0cmluZyA9IChjaGFyICopICIobmlsKSI7IGlmIChwcmVjIDwgNSkgcHJlYyA9IDU7IGlzX2xv bmcgPSAwOyBnb3RvIGRvMl9wcmludF9zdHJpbmc7IH0gfSBkbzJfZm9ybV9udW1iZXI6IGlmICgo JnNwZWNzW25zcGVjc19kb25lXSkgPT0gKCh2b2lkICopMCkpIHsgaWYgKDApICoobG9uZyBsb25n IGludCAqKSBfX2J1aWx0aW5fdmFfYXJnKGFwLHZvaWQgKikgPSBkb25lOyBlbHNlIGlmIChpc19s b25nKSAqKGxvbmcgaW50ICopIF9fYnVpbHRpbl92YV9hcmcoYXAsdm9pZCAqKSA9IGRvbmU7IGVs c2UgaWYgKGlzX2NoYXIpICooY2hhciAqKSBfX2J1aWx0aW5fdmFfYXJnKGFwLHZvaWQgKikgPSBk b25lOyBlbHNlIGlmICghaXNfc2hvcnQpICooaW50ICopIF9fYnVpbHRpbl92YV9hcmcoYXAsdm9p ZCAqKSA9IGRvbmU7IGVsc2UgKihzaG9ydCBpbnQgKikgX19idWlsdGluX3ZhX2FyZyhhcCx2b2lk ICopID0gZG9uZTsgfSBlbHNlIGlmICgwKSAqKGxvbmcgbG9uZyBpbnQgKikgYXJnc192YWx1ZVso JnNwZWNzW25zcGVjc19kb25lXSktPmRhdGFfYXJnXS5wYV9wb2ludGVyID0gZG9uZTsgZWxzZSBp ZiAoaXNfbG9uZykgKihsb25nIGludCAqKSBhcmdzX3ZhbHVlWygmc3BlY3NbbnNwZWNzX2RvbmVd KS0+ZGF0YV9hcmddLnBhX3BvaW50ZXIgPSBkb25lOyBlbHNlIGlmIChpc19jaGFyKSAqKGNoYXIg KikgYXJnc192YWx1ZVsoJnNwZWNzW25zcGVjc19kb25lXSktPmRhdGFfYXJnXS5wYV9wb2ludGVy ID0gZG9uZTsgZWxzZSBpZiAoIWlzX3Nob3J0KSAqKGludCAqKSBhcmdzX3ZhbHVlWygmc3BlY3Nb bnNwZWNzX2RvbmVdKS0+ZGF0YV9hcmddLnBhX3BvaW50ZXIgPSBkb25lOyBlbHNlICooc2hvcnQg aW50ICopIGFyZ3NfdmFsdWVbKCZzcGVjc1tuc3BlY3NfZG9uZV0pLT5kYXRhX2FyZ10ucGFfcG9p bnRlciA9IGRvbmU7IGJyZWFrOyBkbzJfZm9ybV9zdHJlcnJvcjogc3RyaW5nID0gKGNoYXIgKikg X19zdHJlcnJvcl9yIChzYXZlX2Vycm5vLCAoY2hhciAqKSB3b3JrX2J1ZmZlciwgc2l6ZW9mIHdv cmtfYnVmZmVyKTsgaXNfbG9uZyA9IDA7IGdvdG8gZG8yX3ByaW50X3N0cmluZzsKICAgICAgICAg ICAgZG8yX2Zvcm1fY2hhcmFjdGVyOiBpZiAoaXNfbG9uZykgZ290byBkbzJfZm9ybV93Y2hhcmFj dGVyOyAtLXdpZHRoOyBpZiAoIWxlZnQpIGlmICh3aWR0aCA+IDApIGRvbmUgKz0gX0lPX3BhZG5f aW50ZXJuYWwgKHMsICgnICcpLCB3aWR0aCk7IGlmICgoJnNwZWNzW25zcGVjc19kb25lXSkgPT0g KCh2b2lkICopMCkpIGRvIHsgcmVnaXN0ZXIgY29uc3QgaW50IG91dGMgPSAoKHVuc2lnbmVkIGNo YXIpIF9fYnVpbHRpbl92YV9hcmcoYXAsaW50KSk7IGlmICgoKChzKS0+X0lPX3dyaXRlX3B0ciA+ PSAocyktPl9JT193cml0ZV9lbmQpID8gX19vdmVyZmxvdyAocywgKHVuc2lnbmVkIGNoYXIpIChv dXRjKSkgOiAodW5zaWduZWQgY2hhcikgKCoocyktPl9JT193cml0ZV9wdHIrKyA9IChvdXRjKSkp ID09ICgtMSkpIHsgZG9uZSA9IC0xOyBnb3RvIGFsbF9kb25lOyB9IGVsc2UgKytkb25lOyB9IHdo aWxlICgwKTsgZWxzZSBkbyB7IHJlZ2lzdGVyIGNvbnN0IGludCBvdXRjID0gKCh1bnNpZ25lZCBj aGFyKSBhcmdzX3ZhbHVlWygmc3BlY3NbbnNwZWNzX2RvbmVdKS0+ZGF0YV9hcmddLnBhX2NoYXIp OyBpZiAoKCgocyktPl9JT193cml0ZV9wdHIgPj0gKHMpLT5fSU9fd3JpdGVfZW5kKSA/IF9fb3Zl cmZsb3cgKHMsICh1bnNpZ25lZCBjaGFyKSAob3V0YykpIDogKHVuc2lnbmVkIGNoYXIpICgqKHMp LT5fSU9fd3JpdGVfcHRyKysgPSAob3V0YykpKSA9PSAoLTEpKSB7IGRvbmUgPSAtMTsgZ290byBh bGxfZG9uZTsgfSBlbHNlICsrZG9uZTsgfSB3aGlsZSAoMCk7IGlmIChsZWZ0KSBpZiAod2lkdGgg PiAwKSBkb25lICs9IF9JT19wYWRuX2ludGVybmFsIChzLCAoJyAnKSwgd2lkdGgpOyBicmVhazsg ZG8yX2Zvcm1fd2NoYXJhY3RlcjogeyBjaGFyIGJ1ZlsoKCgoKF9fbG9jYWxlX3QpIChfX2xpYmNf aW50ZXJuYWxfdHNkX2dldCAhPSAoKHZvaWQgKikwKSA/IF9fbGliY19pbnRlcm5hbF90c2RfZ2V0 IChfTElCQ19UU0RfS0VZX0xPQ0FMRSkgOiBfX2xpYmNfdHNkX0xPQ0FMRV9kYXRhKSktPl9fbG9j YWxlc1tfX0xDX0NUWVBFXSktPnZhbHVlc1soKGludCkgKF9OTF9DVFlQRV9NQl9DVVJfTUFYKSAm IDB4ZmZmZildLndvcmQpKV07IG1ic3RhdGVfdCBtYnN0YXRlOyBzaXplX3QgbGVuOyAoX19leHRl bnNpb25fXyAoX19idWlsdGluX2NvbnN0YW50X3AgKHNpemVvZiAobWJzdGF0ZV90KSkgJiYgKHNp emVvZiAobWJzdGF0ZV90KSkgPD0gMTYgPyAoKHNpemVvZiAobWJzdGF0ZV90KSkgPT0gMSA/ICh7 IHZvaWQgKl9fcyA9ICgmbWJzdGF0ZSk7ICooKF9fdWludDhfdCAqKSBfX3MpID0gKF9fdWludDhf dCkgJ1wwJzsgX19zOyB9KSA6ICh7IHZvaWQgKl9fcyA9ICgmbWJzdGF0ZSk7IHVuaW9uIHsgdW5z aWduZWQgaW50IF9fdWk7IHVuc2lnbmVkIHNob3J0IGludCBfX3VzaTsgdW5zaWduZWQgY2hhciBf X3VjOyB9ICpfX3UgPSBfX3M7IF9fdWludDhfdCBfX2MgPSAoX191aW50OF90KSAoJ1wwJyk7IHN3 aXRjaCAoKHVuc2lnbmVkIGludCkgKHNpemVvZiAobWJzdGF0ZV90KSkpIHsgY2FzZSAxNTogX191 LT5fX3VpID0gX19jICogMHgwMTAxMDEwMTsgX191ID0gX19leHRlbnNpb25fXyAoKHZvaWQgKikg X191ICsgNCk7IGNhc2UgMTE6IF9fdS0+X191aSA9IF9fYyAqIDB4MDEwMTAxMDE7IF9fdSA9IF9f ZXh0ZW5zaW9uX18gKCh2b2lkICopIF9fdSArIDQpOyBjYXNlIDc6IF9fdS0+X191aSA9IF9fYyAq IDB4MDEwMTAxMDE7IF9fdSA9IF9fZXh0ZW5zaW9uX18gKCh2b2lkICopIF9fdSArIDQpOyBjYXNl IDM6IF9fdS0+X191c2kgPSAodW5zaWduZWQgc2hvcnQgaW50KSBfX2MgKiAweDAxMDE7IF9fdSA9 IF9fZXh0ZW5zaW9uX18gKCh2b2lkICopIF9fdSArIDIpOyBfX3UtPl9fdWMgPSAodW5zaWduZWQg Y2hhcikgX19jOyBicmVhazsgY2FzZSAxNDogX191LT5fX3VpID0gX19jICogMHgwMTAxMDEwMTsg X191ID0gX19leHRlbnNpb25fXyAoKHZvaWQgKikgX191ICsgNCk7IGNhc2UgMTA6IF9fdS0+X191 aSA9IF9fYyAqIDB4MDEwMTAxMDE7IF9fdSA9IF9fZXh0ZW5zaW9uX18gKCh2b2lkICopIF9fdSAr IDQpOyBjYXNlIDY6IF9fdS0+X191aSA9IF9fYyAqIDB4MDEwMTAxMDE7IF9fdSA9IF9fZXh0ZW5z aW9uX18gKCh2b2lkICopIF9fdSArIDQpOyBjYXNlIDI6IF9fdS0+X191c2kgPSAodW5zaWduZWQg c2hvcnQgaW50KSBfX2MgKiAweDAxMDE7IGJyZWFrOyBjYXNlIDEzOiBfX3UtPl9fdWkgPSBfX2Mg KiAweDAxMDEwMTAxOyBfX3UgPSBfX2V4dGVuc2lvbl9fICgodm9pZCAqKSBfX3UgKyA0KTsgY2Fz ZSA5OiBfX3UtPl9fdWkgPSBfX2MgKiAweDAxMDEwMTAxOyBfX3UgPSBfX2V4dGVuc2lvbl9fICgo dm9pZCAqKSBfX3UgKyA0KTsgY2FzZSA1OiBfX3UtPl9fdWkgPSBfX2MgKiAweDAxMDEwMTAxOyBf X3UgPSBfX2V4dGVuc2lvbl9fICgodm9pZCAqKSBfX3UgKyA0KTsgY2FzZSAxOiBfX3UtPl9fdWMg PSAodW5zaWduZWQgY2hhcikgX19jOyBicmVhazsgY2FzZSAxNjogX191LT5fX3VpID0gX19jICog MHgwMTAxMDEwMTsgX191ID0gX19leHRlbnNpb25fXyAoKHZvaWQgKikgX191ICsgNCk7IGNhc2Ug MTI6IF9fdS0+X191aSA9IF9fYyAqIDB4MDEwMTAxMDE7IF9fdSA9IF9fZXh0ZW5zaW9uX18gKCh2 b2lkICopIF9fdSArIDQpOyBjYXNlIDg6IF9fdS0+X191aSA9IF9fYyAqIDB4MDEwMTAxMDE7IF9f dSA9IF9fZXh0ZW5zaW9uX18gKCh2b2lkICopIF9fdSArIDQpOyBjYXNlIDQ6IF9fdS0+X191aSA9 IF9fYyAqIDB4MDEwMTAxMDE7IGNhc2UgMDogYnJlYWs7IH0gX19zOyB9KSkgOiAoX19idWlsdGlu X2NvbnN0YW50X3AgKCdcMCcpICYmICgnXDAnKSA9PSAnXDAnID8gKHsgdm9pZCAqX19zID0gKCZt YnN0YXRlKTsgX19idWlsdGluX21lbXNldCAoX19zLCAnXDAnLCBzaXplb2YgKG1ic3RhdGVfdCkp OyBfX3M7IH0pIDogbWVtc2V0ICgmbWJzdGF0ZSwgJ1wwJywgc2l6ZW9mIChtYnN0YXRlX3QpKSkp KTsgbGVuID0gX193Y3J0b21iIChidWYsICgoJnNwZWNzW25zcGVjc19kb25lXSkgPT0gKCh2b2lk ICopMCkgPyBfX2J1aWx0aW5fdmFfYXJnKGFwLHdjaGFyX3QpIDogYXJnc192YWx1ZVsoJnNwZWNz W25zcGVjc19kb25lXSktPmRhdGFfYXJnXS5wYV93Y2hhciksICZtYnN0YXRlKTsgaWYgKGxlbiA9 PSAoc2l6ZV90KSAtMSkgeyBkb25lID0gLTE7IGdvdG8gYWxsX2RvbmU7IH0gd2lkdGggLT0gbGVu OyBpZiAoIWxlZnQpIGlmICh3aWR0aCA+IDApIGRvbmUgKz0gX0lPX3BhZG5faW50ZXJuYWwgKHMs ICgnICcpLCB3aWR0aCk7IGRvIHsgaWYgKChzaXplX3QpICgoKihzdHJ1Y3QgX0lPX2p1bXBfdCAq KikgKCh2b2lkICopICYoKHN0cnVjdCBfSU9fRklMRV9wbHVzICopICgocykpKS0+dnRhYmxlICsg KChzKSktPl92dGFibGVfb2Zmc2V0KSktPl9feHNwdXRuKSAoKHMpLCAoKGJ1ZikpLCAoKGxlbikp KSAhPSAoc2l6ZV90KSAobGVuKSkgeyBkb25lID0gLTE7IGdvdG8gYWxsX2RvbmU7IH0gZG9uZSAr PSAobGVuKTsgfSB3aGlsZSAoMCk7IGlmIChsZWZ0KSBpZiAod2lkdGggPiAwKSBkb25lICs9IF9J T19wYWRuX2ludGVybmFsIChzLCAoJyAnKSwgd2lkdGgpOyB9IGJyZWFrOyBkbzJfZm9ybV9zdHJp bmc6IHsgc2l6ZV90IGxlbjsgaW50IHN0cmluZ19tYWxsb2NlZDsgaWYgKCgmc3BlY3NbbnNwZWNz X2RvbmVdKSA9PSAoKHZvaWQgKikwKSkgc3RyaW5nID0gKGNoYXIgKikgX19idWlsdGluX3ZhX2Fy ZyhhcCxjb25zdCBjaGFyICopOyBlbHNlIHN0cmluZyA9IChjaGFyICopIGFyZ3NfdmFsdWVbKCZz cGVjc1tuc3BlY3NfZG9uZV0pLT5kYXRhX2FyZ10ucGFfc3RyaW5nOyBkbzJfcHJpbnRfc3RyaW5n OiBzdHJpbmdfbWFsbG9jZWQgPSAwOyBpZiAoc3RyaW5nID09ICgodm9pZCAqKTApKSB7IGlmIChw cmVjID09IC0xIHx8IHByZWMgPj0gKGludCkgc2l6ZW9mIChudWxsKSAtIDEpIHsgc3RyaW5nID0g KGNoYXIgKikgbnVsbDsgbGVuID0gc2l6ZW9mIChudWxsKSAtIDE7IH0gZWxzZSB7IHN0cmluZyA9 IChjaGFyICopICIiOyBsZW4gPSAwOyB9IH0gZWxzZSBpZiAoIWlzX2xvbmcgJiYgc3BlYyAhPSAn UycpIHsgaWYgKHByZWMgIT0gLTEpIHsgaWYgKCgoKChfX2xvY2FsZV90KSAoX19saWJjX2ludGVy bmFsX3RzZF9nZXQgIT0gKCh2b2lkICopMCkgPyBfX2xpYmNfaW50ZXJuYWxfdHNkX2dldCAoX0xJ QkNfVFNEX0tFWV9MT0NBTEUpIDogX19saWJjX3RzZF9MT0NBTEVfZGF0YSkpLT5fX2xvY2FsZXNb X19MQ19DVFlQRV0pLT52YWx1ZXNbKChpbnQpIChfTkxfQ1RZUEVfTUJfQ1VSX01BWCkgJiAweGZm ZmYpXS53b3JkKSA9PSAxKSBsZW4gPSBfX3N0cm5sZW4gKHN0cmluZywgcHJlYyk7IGVsc2UgeyB3 Y2hhcl90IGlnbm9yZVtwcmVjXTsgY29uc3QgY2hhciAqc3RyMiA9IHN0cmluZzsgbWJzdGF0ZV90 IHBzOyAoX19leHRlbnNpb25fXyAoX19idWlsdGluX2NvbnN0YW50X3AgKHNpemVvZiAocHMpKSAm JiAoc2l6ZW9mIChwcykpIDw9IDE2ID8gKChzaXplb2YgKHBzKSkgPT0gMSA/ICh7IHZvaWQgKl9f cyA9ICgmcHMpOyAqKChfX3VpbnQ4X3QgKikgX19zKSA9IChfX3VpbnQ4X3QpICdcMCc7IF9fczsg fSkgOiAoeyB2b2lkICpfX3MgPSAoJnBzKTsgdW5pb24geyB1bnNpZ25lZCBpbnQgX191aTsgdW5z aWduZWQgc2hvcnQgaW50IF9fdXNpOyB1bnNpZ25lZCBjaGFyIF9fdWM7IH0gKl9fdSA9IF9fczsg X191aW50OF90IF9fYyA9IChfX3VpbnQ4X3QpICgnXDAnKTsgc3dpdGNoICgodW5zaWduZWQgaW50 KSAoc2l6ZW9mIChwcykpKSB7IGNhc2UgMTU6IF9fdS0+X191aSA9IF9fYyAqIDB4MDEwMTAxMDE7 IF9fdSA9IF9fZXh0ZW5zaW9uX18gKCh2b2lkICopIF9fdSArIDQpOyBjYXNlIDExOiBfX3UtPl9f dWkgPSBfX2MgKiAweDAxMDEwMTAxOyBfX3UgPSBfX2V4dGVuc2lvbl9fICgodm9pZCAqKSBfX3Ug KyA0KTsgY2FzZSA3OiBfX3UtPl9fdWkgPSBfX2MgKiAweDAxMDEwMTAxOyBfX3UgPSBfX2V4dGVu c2lvbl9fICgodm9pZCAqKSBfX3UgKyA0KTsgY2FzZSAzOiBfX3UtPl9fdXNpID0gKHVuc2lnbmVk IHNob3J0IGludCkgX19jICogMHgwMTAxOyBfX3UgPSBfX2V4dGVuc2lvbl9fICgodm9pZCAqKSBf X3UgKyAyKTsgX191LT5fX3VjID0gKHVuc2lnbmVkIGNoYXIpIF9fYzsgYnJlYWs7IGNhc2UgMTQ6 IF9fdS0+X191aSA9IF9fYyAqIDB4MDEwMTAxMDE7IF9fdSA9IF9fZXh0ZW5zaW9uX18gKCh2b2lk ICopIF9fdSArIDQpOyBjYXNlIDEwOiBfX3UtPl9fdWkgPSBfX2MgKiAweDAxMDEwMTAxOyBfX3Ug PSBfX2V4dGVuc2lvbl9fICgodm9pZCAqKSBfX3UgKyA0KTsgY2FzZSA2OiBfX3UtPl9fdWkgPSBf X2MgKiAweDAxMDEwMTAxOyBfX3UgPSBfX2V4dGVuc2lvbl9fICgodm9pZCAqKSBfX3UgKyA0KTsg Y2FzZSAyOiBfX3UtPl9fdXNpID0gKHVuc2lnbmVkIHNob3J0IGludCkgX19jICogMHgwMTAxOyBi cmVhazsgY2FzZSAxMzogX191LT5fX3VpID0gX19jICogMHgwMTAxMDEwMTsgX191ID0gX19leHRl bnNpb25fXyAoKHZvaWQgKikgX191ICsgNCk7IGNhc2UgOTogX191LT5fX3VpID0gX19jICogMHgw MTAxMDEwMTsgX191ID0gX19leHRlbnNpb25fXyAoKHZvaWQgKikgX191ICsgNCk7IGNhc2UgNTog X191LT5fX3VpID0gX19jICogMHgwMTAxMDEwMTsgX191ID0gX19leHRlbnNpb25fXyAoKHZvaWQg KikgX191ICsgNCk7IGNhc2UgMTogX191LT5fX3VjID0gKHVuc2lnbmVkIGNoYXIpIF9fYzsgYnJl YWs7IGNhc2UgMTY6IF9fdS0+X191aSA9IF9fYyAqIDB4MDEwMTAxMDE7IF9fdSA9IF9fZXh0ZW5z aW9uX18gKCh2b2lkICopIF9fdSArIDQpOyBjYXNlIDEyOiBfX3UtPl9fdWkgPSBfX2MgKiAweDAx MDEwMTAxOyBfX3UgPSBfX2V4dGVuc2lvbl9fICgodm9pZCAqKSBfX3UgKyA0KTsgY2FzZSA4OiBf X3UtPl9fdWkgPSBfX2MgKiAweDAxMDEwMTAxOyBfX3UgPSBfX2V4dGVuc2lvbl9fICgodm9pZCAq KSBfX3UgKyA0KTsgY2FzZSA0OiBfX3UtPl9fdWkgPSBfX2MgKiAweDAxMDEwMTAxOyBjYXNlIDA6 IGJyZWFrOyB9IF9fczsgfSkpIDogKF9fYnVpbHRpbl9jb25zdGFudF9wICgnXDAnKSAmJiAoJ1ww JykgPT0gJ1wwJyA/ICh7IHZvaWQgKl9fcyA9ICgmcHMpOyBfX2J1aWx0aW5fbWVtc2V0IChfX3Ms ICdcMCcsIHNpemVvZiAocHMpKTsgX19zOyB9KSA6IG1lbXNldCAoJnBzLCAnXDAnLCBzaXplb2Yg KHBzKSkpKSk7IGlmIChfX21ic25ydG93Y3MgKGlnbm9yZSwgJnN0cjIsIHByZWMsIHByZWMsICZw cykgPT0gKHNpemVfdCkgLTEpIHsgZG9uZSA9IC0xOyBnb3RvIGFsbF9kb25lOyB9IGlmIChzdHIy ID09ICgodm9pZCAqKTApKSBsZW4gPSBzdHJsZW4gKHN0cmluZyk7IGVsc2UgbGVuID0gc3RyMiAt IHN0cmluZyAtIChwcy5fX2NvdW50KTsgfSB9IGVsc2UgbGVuID0gc3RybGVuIChzdHJpbmcpOyB9 IGVsc2UgeyBjb25zdCB3Y2hhcl90ICpzMiA9IChjb25zdCB3Y2hhcl90ICopIHN0cmluZzsgbWJz dGF0ZV90IG1ic3RhdGU7IChfX2V4dGVuc2lvbl9fIChfX2J1aWx0aW5fY29uc3RhbnRfcCAoc2l6 ZW9mIChtYnN0YXRlX3QpKSAmJiAoc2l6ZW9mIChtYnN0YXRlX3QpKSA8PSAxNiA/ICgoc2l6ZW9m IChtYnN0YXRlX3QpKSA9PSAxID8gKHsgdm9pZCAqX19zID0gKCZtYnN0YXRlKTsgKigoX191aW50 OF90ICopIF9fcykgPSAoX191aW50OF90KSAnXDAnOyBfX3M7IH0pIDogKHsgdm9pZCAqX19zID0g KCZtYnN0YXRlKTsgdW5pb24geyB1bnNpZ25lZCBpbnQgX191aTsgdW5zaWduZWQgc2hvcnQgaW50 IF9fdXNpOyB1bnNpZ25lZCBjaGFyIF9fdWM7IH0gKl9fdSA9IF9fczsgX191aW50OF90IF9fYyA9 IChfX3VpbnQ4X3QpICgnXDAnKTsgc3dpdGNoICgodW5zaWduZWQgaW50KSAoc2l6ZW9mIChtYnN0 YXRlX3QpKSkgeyBjYXNlIDE1OiBfX3UtPl9fdWkgPSBfX2MgKiAweDAxMDEwMTAxOyBfX3UgPSBf X2V4dGVuc2lvbl9fICgodm9pZCAqKSBfX3UgKyA0KTsgY2FzZSAxMTogX191LT5fX3VpID0gX19j ICogMHgwMTAxMDEwMTsgX191ID0gX19leHRlbnNpb25fXyAoKHZvaWQgKikgX191ICsgNCk7IGNh c2UgNzogX191LT5fX3VpID0gX19jICogMHgwMTAxMDEwMTsgX191ID0gX19leHRlbnNpb25fXyAo KHZvaWQgKikgX191ICsgNCk7IGNhc2UgMzogX191LT5fX3VzaSA9ICh1bnNpZ25lZCBzaG9ydCBp bnQpIF9fYyAqIDB4MDEwMTsgX191ID0gX19leHRlbnNpb25fXyAoKHZvaWQgKikgX191ICsgMik7 IF9fdS0+X191YyA9ICh1bnNpZ25lZCBjaGFyKSBfX2M7IGJyZWFrOyBjYXNlIDE0OiBfX3UtPl9f dWkgPSBfX2MgKiAweDAxMDEwMTAxOyBfX3UgPSBfX2V4dGVuc2lvbl9fICgodm9pZCAqKSBfX3Ug KyA0KTsgY2FzZSAxMDogX191LT5fX3VpID0gX19jICogMHgwMTAxMDEwMTsgX191ID0gX19leHRl bnNpb25fXyAoKHZvaWQgKikgX191ICsgNCk7IGNhc2UgNjogX191LT5fX3VpID0gX19jICogMHgw MTAxMDEwMTsgX191ID0gX19leHRlbnNpb25fXyAoKHZvaWQgKikgX191ICsgNCk7IGNhc2UgMjog X191LT5fX3VzaSA9ICh1bnNpZ25lZCBzaG9ydCBpbnQpIF9fYyAqIDB4MDEwMTsgYnJlYWs7IGNh c2UgMTM6IF9fdS0+X191aSA9IF9fYyAqIDB4MDEwMTAxMDE7IF9fdSA9IF9fZXh0ZW5zaW9uX18g KCh2b2lkICopIF9fdSArIDQpOyBjYXNlIDk6IF9fdS0+X191aSA9IF9fYyAqIDB4MDEwMTAxMDE7 IF9fdSA9IF9fZXh0ZW5zaW9uX18gKCh2b2lkICopIF9fdSArIDQpOyBjYXNlIDU6IF9fdS0+X191 aSA9IF9fYyAqIDB4MDEwMTAxMDE7IF9fdSA9IF9fZXh0ZW5zaW9uX18gKCh2b2lkICopIF9fdSAr IDQpOyBjYXNlIDE6IF9fdS0+X191YyA9ICh1bnNpZ25lZCBjaGFyKSBfX2M7IGJyZWFrOyBjYXNl IDE2OiBfX3UtPl9fdWkgPSBfX2MgKiAweDAxMDEwMTAxOyBfX3UgPSBfX2V4dGVuc2lvbl9fICgo dm9pZCAqKSBfX3UgKyA0KTsgY2FzZSAxMjogX191LT5fX3VpID0gX19jICogMHgwMTAxMDEwMTsg X191ID0gX19leHRlbnNpb25fXyAoKHZvaWQgKikgX191ICsgNCk7IGNhc2UgODogX191LT5fX3Vp ID0gX19jICogMHgwMTAxMDEwMTsgX191ID0gX19leHRlbnNpb25fXyAoKHZvaWQgKikgX191ICsg NCk7IGNhc2UgNDogX191LT5fX3VpID0gX19jICogMHgwMTAxMDEwMTsgY2FzZSAwOiBicmVhazsg fSBfX3M7IH0pKSA6IChfX2J1aWx0aW5fY29uc3RhbnRfcCAoJ1wwJykgJiYgKCdcMCcpID09ICdc MCcgPyAoeyB2b2lkICpfX3MgPSAoJm1ic3RhdGUpOyBfX2J1aWx0aW5fbWVtc2V0IChfX3MsICdc MCcsIHNpemVvZiAobWJzdGF0ZV90KSk7IF9fczsgfSkgOiBtZW1zZXQgKCZtYnN0YXRlLCAnXDAn LCBzaXplb2YgKG1ic3RhdGVfdCkpKSkpOyBpZiAocHJlYyA+PSAwKSB7IGlmIChfX2xpYmNfdXNl X2FsbG9jYSAocHJlYykpIHN0cmluZyA9IChjaGFyICopIF9fYnVpbHRpbl9hbGxvY2EgKHByZWMp OyBlbHNlIGlmICgoc3RyaW5nID0gKGNoYXIgKikgbWFsbG9jIChwcmVjKSkgPT0gKCh2b2lkICop MCkpIHsgZG9uZSA9IC0xOyBnb3RvIGFsbF9kb25lOyB9IGVsc2Ugc3RyaW5nX21hbGxvY2VkID0g MTsgbGVuID0gX193Y3NydG9tYnMgKHN0cmluZywgJnMyLCBwcmVjLCAmbWJzdGF0ZSk7IH0gZWxz ZSB7IGxlbiA9IF9fd2NzcnRvbWJzICgoKHZvaWQgKikwKSwgJnMyLCAwLCAmbWJzdGF0ZSk7IGlm IChsZW4gIT0gKHNpemVfdCkgLTEpIHsgKCh2b2lkKSAoMCkpOyBzMiA9IChjb25zdCB3Y2hhcl90 ICopIHN0cmluZzsgaWYgKF9fbGliY191c2VfYWxsb2NhIChsZW4gKyAxKSkgc3RyaW5nID0gKGNo YXIgKikgX19idWlsdGluX2FsbG9jYSAobGVuICsgMSk7IGVsc2UgaWYgKChzdHJpbmcgPSAoY2hh ciAqKSBtYWxsb2MgKGxlbiArIDEpKSA9PSAoKHZvaWQgKikwKSkgeyBkb25lID0gLTE7IGdvdG8g YWxsX2RvbmU7IH0gZWxzZSBzdHJpbmdfbWFsbG9jZWQgPSAxOyAodm9pZCkgX193Y3NydG9tYnMg KHN0cmluZywgJnMyLCBsZW4gKyAxLCAmbWJzdGF0ZSk7IH0gfSBpZiAobGVuID09IChzaXplX3Qp IC0xKSB7IGRvbmUgPSAtMTsgZ290byBhbGxfZG9uZTsgfSB9IGlmICgod2lkdGggLT0gbGVuKSA8 IDApIHsgZG8geyBpZiAoKHNpemVfdCkgKCgqKHN0cnVjdCBfSU9fanVtcF90ICoqKSAoKHZvaWQg KikgJigoc3RydWN0IF9JT19GSUxFX3BsdXMgKikgKChzKSkpLT52dGFibGUgKyAoKHMpKS0+X3Z0 YWJsZV9vZmZzZXQpKS0+X194c3B1dG4pICgocyksICgoc3RyaW5nKSksICgobGVuKSkpICE9IChz aXplX3QpIChsZW4pKSB7IGRvbmUgPSAtMTsgZ290byBhbGxfZG9uZTsgfSBkb25lICs9IChsZW4p OyB9IHdoaWxlICgwKTsgYnJlYWs7IH0gaWYgKCFsZWZ0KSBpZiAod2lkdGggPiAwKSBkb25lICs9 IF9JT19wYWRuX2ludGVybmFsIChzLCAoJyAnKSwgd2lkdGgpOyBkbyB7IGlmICgoc2l6ZV90KSAo KCooc3RydWN0IF9JT19qdW1wX3QgKiopICgodm9pZCAqKSAmKChzdHJ1Y3QgX0lPX0ZJTEVfcGx1 cyAqKSAoKHMpKSktPnZ0YWJsZSArICgocykpLT5fdnRhYmxlX29mZnNldCkpLT5fX3hzcHV0bikg KChzKSwgKChzdHJpbmcpKSwgKChsZW4pKSkgIT0gKHNpemVfdCkgKGxlbikpIHsgZG9uZSA9IC0x OyBnb3RvIGFsbF9kb25lOyB9IGRvbmUgKz0gKGxlbik7IH0gd2hpbGUgKDApOyBpZiAobGVmdCkg aWYgKHdpZHRoID4gMCkgZG9uZSArPSBfSU9fcGFkbl9pbnRlcm5hbCAocywgKCcgJyksIHdpZHRo KTsgaWYgKF9fYnVpbHRpbl9leHBlY3QgKHN0cmluZ19tYWxsb2NlZCwgMCkpIGZyZWUgKHN0cmlu Zyk7IH0gYnJlYWs7OwoKICAgICAgICAgIGRvMl9mb3JtX3Vua25vd246CiAgICAgICAgICAgIHsK ICAgICAgICAgICAgICBleHRlcm4gcHJpbnRmX2Z1bmN0aW9uICoqX19wcmludGZfZnVuY3Rpb25f dGFibGU7CiAgICAgICAgICAgICAgaW50IGZ1bmN0aW9uX2RvbmU7CiAgICAgICAgICAgICAgcHJp bnRmX2Z1bmN0aW9uICpmdW5jdGlvbjsKICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgaTsKICAg ICAgICAgICAgICBjb25zdCB2b2lkICoqcHRyOwoKICAgICAgICAgICAgICBmdW5jdGlvbiA9CiAg ICAgICAgICAgICAgICAoX19wcmludGZfZnVuY3Rpb25fdGFibGUgPT0gKCh2b2lkICopMCkgPyAo KHZvaWQgKikwKSA6CiAgICAgICAgICAgICAgICAgX19wcmludGZfZnVuY3Rpb25fdGFibGVbc3Bl Y3NbbnNwZWNzX2RvbmVdLmluZm8uc3BlY10pOwoKICAgICAgICAgICAgICBpZiAoZnVuY3Rpb24g PT0gKCh2b2lkICopMCkpCiAgICAgICAgICAgICAgICBmdW5jdGlvbiA9ICZwcmludGZfdW5rbm93 bjsKCiAgICAgICAgICAgICAgcHRyID0gX19idWlsdGluX2FsbG9jYSAoc3BlY3NbbnNwZWNzX2Rv bmVdLm5kYXRhX2FyZ3MgKiBzaXplb2YgKGNvbnN0IHZvaWQgKikpOwoKCgogICAgICAgICAgICAg IGZvciAoaSA9IDA7IGkgPCBzcGVjc1tuc3BlY3NfZG9uZV0ubmRhdGFfYXJnczsgKytpKQogICAg ICAgICAgICAgICAgcHRyW2ldID0gJmFyZ3NfdmFsdWVbc3BlY3NbbnNwZWNzX2RvbmVdLmRhdGFf YXJnICsgaV07CgoKICAgICAgICAgICAgICBmdW5jdGlvbl9kb25lID0gKCpmdW5jdGlvbikgKHMs ICZzcGVjc1tuc3BlY3NfZG9uZV0uaW5mbywgcHRyKTsKCgoKICAgICAgICAgICAgICBpZiAoZnVu Y3Rpb25fZG9uZSA8IDApCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgIGRvbmUg PSAtMTsKICAgICAgICAgICAgICAgICAgZ290byBhbGxfZG9uZTsKICAgICAgICAgICAgICAgIH0K CiAgICAgICAgICAgICAgZG9uZSArPSBmdW5jdGlvbl9kb25lOwogICAgICAgICAgICB9CiAgICAg ICAgICAgIGJyZWFrOwogICAgICAgICAgfQoKICAgICAgICBpZiAoX19idWlsdGluX2V4cGVjdCAo d29ya3N0YXJ0ICE9ICgodm9pZCAqKTApLCAwKSkKICAgICAgICAgIGZyZWUgKHdvcmtzdGFydCk7 CiAgICAgICAgd29ya3N0YXJ0ID0gKCh2b2lkICopMCk7CgoKICAgICAgICBkbyB7IGlmICgoc2l6 ZV90KSAoKCooc3RydWN0IF9JT19qdW1wX3QgKiopICgodm9pZCAqKSAmKChzdHJ1Y3QgX0lPX0ZJ TEVfcGx1cyAqKSAoKHMpKSktPnZ0YWJsZSArICgocykpLT5fdnRhYmxlX29mZnNldCkpLT5fX3hz cHV0bikgKChzKSwgKChzcGVjc1tuc3BlY3NfZG9uZV0uZW5kX29mX2ZtdCkpLCAoKHNwZWNzW25z cGVjc19kb25lXS5uZXh0X2ZtdCAtIHNwZWNzW25zcGVjc19kb25lXS5lbmRfb2ZfZm10KSkpICE9 IChzaXplX3QpIChzcGVjc1tuc3BlY3NfZG9uZV0ubmV4dF9mbXQgLSBzcGVjc1tuc3BlY3NfZG9u ZV0uZW5kX29mX2ZtdCkpIHsgZG9uZSA9IC0xOyBnb3RvIGFsbF9kb25lOyB9IGRvbmUgKz0gKHNw ZWNzW25zcGVjc19kb25lXS5uZXh0X2ZtdCAtIHNwZWNzW25zcGVjc19kb25lXS5lbmRfb2ZfZm10 KTsgfSB3aGlsZSAoMCk7CgoKICAgICAgfQogIH0KCmFsbF9kb25lOgogIGlmIChfX2J1aWx0aW5f ZXhwZWN0ICh3b3Jrc3RhcnQgIT0gKCh2b2lkICopMCksIDApKQogICAgZnJlZSAod29ya3N0YXJ0 KTsKCgogIDsKCgoKICBpZiAoX2F2YWlsKSB7IF9wdGhyZWFkX2NsZWFudXBfcG9wX3Jlc3RvcmUg KCZfYnVmZmVyLCAoMCkpOyB9IH07CgogIHJldHVybiBkb25lOwp9CgoKCnN0YXRpYyBpbnQKcHJp bnRmX3Vua25vd24gKF9JT19GSUxFICpzLCBjb25zdCBzdHJ1Y3QgcHJpbnRmX2luZm8gKmluZm8s CiAgICAgICAgICAgICAgICBjb25zdCB2b2lkICpjb25zdCAqYXJncykKCnsKICBpbnQgZG9uZSA9 IDA7CiAgY2hhciB3b3JrX2J1ZmZlclsoKChpbmZvLT53aWR0aCk+KGluZm8tPnNwZWMpKT8oaW5m by0+d2lkdGgpOihpbmZvLT5zcGVjKSkgKyAzMl07CiAgY2hhciAqY29uc3Qgd29ya2VuZAogICAg PSAmd29ya19idWZmZXJbc2l6ZW9mICh3b3JrX2J1ZmZlcikgLyBzaXplb2YgKGNoYXIpXTsKICBy ZWdpc3RlciBjaGFyICp3OwoKICBkbyB7IHJlZ2lzdGVyIGNvbnN0IGludCBvdXRjID0gKCclJyk7 IGlmICgoKChzKS0+X0lPX3dyaXRlX3B0ciA+PSAocyktPl9JT193cml0ZV9lbmQpID8gX19vdmVy ZmxvdyAocywgKHVuc2lnbmVkIGNoYXIpIChvdXRjKSkgOiAodW5zaWduZWQgY2hhcikgKCoocykt Pl9JT193cml0ZV9wdHIrKyA9IChvdXRjKSkpID09ICgtMSkpIHsgZG9uZSA9IC0xOyBnb3RvIGFs bF9kb25lOyB9IGVsc2UgKytkb25lOyB9IHdoaWxlICgwKTsKCiAgaWYgKGluZm8tPmFsdCkKICAg IGRvIHsgcmVnaXN0ZXIgY29uc3QgaW50IG91dGMgPSAoJyMnKTsgaWYgKCgoKHMpLT5fSU9fd3Jp dGVfcHRyID49IChzKS0+X0lPX3dyaXRlX2VuZCkgPyBfX292ZXJmbG93IChzLCAodW5zaWduZWQg Y2hhcikgKG91dGMpKSA6ICh1bnNpZ25lZCBjaGFyKSAoKihzKS0+X0lPX3dyaXRlX3B0cisrID0g KG91dGMpKSkgPT0gKC0xKSkgeyBkb25lID0gLTE7IGdvdG8gYWxsX2RvbmU7IH0gZWxzZSArK2Rv bmU7IH0gd2hpbGUgKDApOwogIGlmIChpbmZvLT5ncm91cCkKICAgIGRvIHsgcmVnaXN0ZXIgY29u c3QgaW50IG91dGMgPSAoJ1wnJyk7IGlmICgoKChzKS0+X0lPX3dyaXRlX3B0ciA+PSAocyktPl9J T193cml0ZV9lbmQpID8gX19vdmVyZmxvdyAocywgKHVuc2lnbmVkIGNoYXIpIChvdXRjKSkgOiAo dW5zaWduZWQgY2hhcikgKCoocyktPl9JT193cml0ZV9wdHIrKyA9IChvdXRjKSkpID09ICgtMSkp IHsgZG9uZSA9IC0xOyBnb3RvIGFsbF9kb25lOyB9IGVsc2UgKytkb25lOyB9IHdoaWxlICgwKTsK ICBpZiAoaW5mby0+c2hvd3NpZ24pCiAgICBkbyB7IHJlZ2lzdGVyIGNvbnN0IGludCBvdXRjID0g KCcrJyk7IGlmICgoKChzKS0+X0lPX3dyaXRlX3B0ciA+PSAocyktPl9JT193cml0ZV9lbmQpID8g X19vdmVyZmxvdyAocywgKHVuc2lnbmVkIGNoYXIpIChvdXRjKSkgOiAodW5zaWduZWQgY2hhcikg KCoocyktPl9JT193cml0ZV9wdHIrKyA9IChvdXRjKSkpID09ICgtMSkpIHsgZG9uZSA9IC0xOyBn b3RvIGFsbF9kb25lOyB9IGVsc2UgKytkb25lOyB9IHdoaWxlICgwKTsKICBlbHNlIGlmIChpbmZv LT5zcGFjZSkKICAgIGRvIHsgcmVnaXN0ZXIgY29uc3QgaW50IG91dGMgPSAoJyAnKTsgaWYgKCgo KHMpLT5fSU9fd3JpdGVfcHRyID49IChzKS0+X0lPX3dyaXRlX2VuZCkgPyBfX292ZXJmbG93IChz LCAodW5zaWduZWQgY2hhcikgKG91dGMpKSA6ICh1bnNpZ25lZCBjaGFyKSAoKihzKS0+X0lPX3dy aXRlX3B0cisrID0gKG91dGMpKSkgPT0gKC0xKSkgeyBkb25lID0gLTE7IGdvdG8gYWxsX2RvbmU7 IH0gZWxzZSArK2RvbmU7IH0gd2hpbGUgKDApOwogIGlmIChpbmZvLT5sZWZ0KQogICAgZG8geyBy ZWdpc3RlciBjb25zdCBpbnQgb3V0YyA9ICgnLScpOyBpZiAoKCgocyktPl9JT193cml0ZV9wdHIg Pj0gKHMpLT5fSU9fd3JpdGVfZW5kKSA/IF9fb3ZlcmZsb3cgKHMsICh1bnNpZ25lZCBjaGFyKSAo b3V0YykpIDogKHVuc2lnbmVkIGNoYXIpICgqKHMpLT5fSU9fd3JpdGVfcHRyKysgPSAob3V0Yykp KSA9PSAoLTEpKSB7IGRvbmUgPSAtMTsgZ290byBhbGxfZG9uZTsgfSBlbHNlICsrZG9uZTsgfSB3 aGlsZSAoMCk7CiAgaWYgKGluZm8tPnBhZCA9PSAnMCcpCiAgICBkbyB7IHJlZ2lzdGVyIGNvbnN0 IGludCBvdXRjID0gKCcwJyk7IGlmICgoKChzKS0+X0lPX3dyaXRlX3B0ciA+PSAocyktPl9JT193 cml0ZV9lbmQpID8gX19vdmVyZmxvdyAocywgKHVuc2lnbmVkIGNoYXIpIChvdXRjKSkgOiAodW5z aWduZWQgY2hhcikgKCoocyktPl9JT193cml0ZV9wdHIrKyA9IChvdXRjKSkpID09ICgtMSkpIHsg ZG9uZSA9IC0xOyBnb3RvIGFsbF9kb25lOyB9IGVsc2UgKytkb25lOyB9IHdoaWxlICgwKTsKICBp ZiAoaW5mby0+aTE4bikKICAgIGRvIHsgcmVnaXN0ZXIgY29uc3QgaW50IG91dGMgPSAoJ0knKTsg aWYgKCgoKHMpLT5fSU9fd3JpdGVfcHRyID49IChzKS0+X0lPX3dyaXRlX2VuZCkgPyBfX292ZXJm bG93IChzLCAodW5zaWduZWQgY2hhcikgKG91dGMpKSA6ICh1bnNpZ25lZCBjaGFyKSAoKihzKS0+ X0lPX3dyaXRlX3B0cisrID0gKG91dGMpKSkgPT0gKC0xKSkgeyBkb25lID0gLTE7IGdvdG8gYWxs X2RvbmU7IH0gZWxzZSArK2RvbmU7IH0gd2hpbGUgKDApOwoKICBpZiAoaW5mby0+d2lkdGggIT0g MCkKICAgIHsKICAgICAgdyA9IF9pdG9hX3dvcmQgKGluZm8tPndpZHRoLCB3b3JrZW5kLCAxMCwg MCk7CiAgICAgIHdoaWxlICh3IDwgd29ya2VuZCkKICAgICAgICBkbyB7IHJlZ2lzdGVyIGNvbnN0 IGludCBvdXRjID0gKCp3KyspOyBpZiAoKCgocyktPl9JT193cml0ZV9wdHIgPj0gKHMpLT5fSU9f d3JpdGVfZW5kKSA/IF9fb3ZlcmZsb3cgKHMsICh1bnNpZ25lZCBjaGFyKSAob3V0YykpIDogKHVu c2lnbmVkIGNoYXIpICgqKHMpLT5fSU9fd3JpdGVfcHRyKysgPSAob3V0YykpKSA9PSAoLTEpKSB7 IGRvbmUgPSAtMTsgZ290byBhbGxfZG9uZTsgfSBlbHNlICsrZG9uZTsgfSB3aGlsZSAoMCk7CiAg ICB9CgogIGlmIChpbmZvLT5wcmVjICE9IC0xKQogICAgewogICAgICBkbyB7IHJlZ2lzdGVyIGNv bnN0IGludCBvdXRjID0gKCcuJyk7IGlmICgoKChzKS0+X0lPX3dyaXRlX3B0ciA+PSAocyktPl9J T193cml0ZV9lbmQpID8gX19vdmVyZmxvdyAocywgKHVuc2lnbmVkIGNoYXIpIChvdXRjKSkgOiAo dW5zaWduZWQgY2hhcikgKCoocyktPl9JT193cml0ZV9wdHIrKyA9IChvdXRjKSkpID09ICgtMSkp IHsgZG9uZSA9IC0xOyBnb3RvIGFsbF9kb25lOyB9IGVsc2UgKytkb25lOyB9IHdoaWxlICgwKTsK ICAgICAgdyA9IF9pdG9hX3dvcmQgKGluZm8tPnByZWMsIHdvcmtlbmQsIDEwLCAwKTsKICAgICAg d2hpbGUgKHcgPCB3b3JrZW5kKQogICAgICAgIGRvIHsgcmVnaXN0ZXIgY29uc3QgaW50IG91dGMg PSAoKncrKyk7IGlmICgoKChzKS0+X0lPX3dyaXRlX3B0ciA+PSAocyktPl9JT193cml0ZV9lbmQp ID8gX19vdmVyZmxvdyAocywgKHVuc2lnbmVkIGNoYXIpIChvdXRjKSkgOiAodW5zaWduZWQgY2hh cikgKCoocyktPl9JT193cml0ZV9wdHIrKyA9IChvdXRjKSkpID09ICgtMSkpIHsgZG9uZSA9IC0x OyBnb3RvIGFsbF9kb25lOyB9IGVsc2UgKytkb25lOyB9IHdoaWxlICgwKTsKICAgIH0KCiAgaWYg KGluZm8tPnNwZWMgIT0gJ1wwJykKICAgIGRvIHsgcmVnaXN0ZXIgY29uc3QgaW50IG91dGMgPSAo aW5mby0+c3BlYyk7IGlmICgoKChzKS0+X0lPX3dyaXRlX3B0ciA+PSAocyktPl9JT193cml0ZV9l bmQpID8gX19vdmVyZmxvdyAocywgKHVuc2lnbmVkIGNoYXIpIChvdXRjKSkgOiAodW5zaWduZWQg Y2hhcikgKCoocyktPl9JT193cml0ZV9wdHIrKyA9IChvdXRjKSkpID09ICgtMSkpIHsgZG9uZSA9 IC0xOyBnb3RvIGFsbF9kb25lOyB9IGVsc2UgKytkb25lOyB9IHdoaWxlICgwKTsKCiBhbGxfZG9u ZToKICByZXR1cm4gZG9uZTsKfQoKCgpzdGF0aWMgY2hhciAqCgpncm91cF9udW1iZXIgKGNoYXIg KncsIGNoYXIgKnJlYXJfcHRyLCBjb25zdCBjaGFyICpncm91cGluZywKCgoKICAgICAgICAgICAg ICBjb25zdCBjaGFyICp0aG91c2FuZHNfc2VwCgogICAgICAgICAgICAgICkKewogIGludCBsZW47 CiAgY2hhciAqc3JjLCAqczsKCiAgaW50IHRsZW4gPSBzdHJsZW4gKHRob3VzYW5kc19zZXApOwoK CgoKICBpZiAoKmdyb3VwaW5nID09IDEyNyB8fCAqZ3JvdXBpbmcgPD0gMCkKCiAgICByZXR1cm4g dzsKCiAgbGVuID0gKmdyb3VwaW5nOwoKCiAgc3JjID0gKGNoYXIgKikgX19idWlsdGluX2FsbG9j YSAoKHJlYXJfcHRyIC0gdykgKiBzaXplb2YgKGNoYXIpKTsKICBzID0gKGNoYXIgKikgKF9fZXh0 ZW5zaW9uX18gKF9fYnVpbHRpbl9jb25zdGFudF9wICh3KSAmJiBfX2J1aWx0aW5fY29uc3RhbnRf cCAoKHJlYXJfcHRyIC0gdykgKiBzaXplb2YgKGNoYXIpKSAmJiAoKHNpemVfdCkoY29uc3Qgdm9p ZCAqKSgodykgKyAxKSAtIChzaXplX3QpKGNvbnN0IHZvaWQgKikodykgPT0gMSkgJiYgKHJlYXJf cHRyIC0gdykgKiBzaXplb2YgKGNoYXIpIDw9IDggPyBfX2J1aWx0aW5fbWVtY3B5IChzcmMsIHcs IChyZWFyX3B0ciAtIHcpICogc2l6ZW9mIChjaGFyKSkgKyAoKHJlYXJfcHRyIC0gdykgKiBzaXpl b2YgKGNoYXIpKSA6IF9fbWVtcGNweSAoc3JjLCB3LCAocmVhcl9wdHIgLSB3KSAqIHNpemVvZiAo Y2hhcikpKSk7CgogIHcgPSByZWFyX3B0cjsKCgogIHdoaWxlIChzID4gc3JjKQogICAgewogICAg ICAqLS13ID0gKi0tczsKCiAgICAgIGlmICgtLWxlbiA9PSAwICYmIHMgPiBzcmMpCiAgICAgICAg ewoKCgoKICAgICAgICAgIGludCBjbnQgPSB0bGVuOwogICAgICAgICAgZG8KICAgICAgICAgICAg Ki0tdyA9IHRob3VzYW5kc19zZXBbLS1jbnRdOwogICAgICAgICAgd2hpbGUgKGNudCA+IDApOwoK CiAgICAgICAgICBsZW4gPSAqZ3JvdXBpbmcrKzsKICAgICAgICAgIGlmICgqZ3JvdXBpbmcgPT0g J1wwJykKCiAgICAgICAgICAgIC0tZ3JvdXBpbmc7CiAgICAgICAgICBlbHNlIGlmICgqZ3JvdXBp bmcgPT0gMTI3CgogICAgICAgICAgICAgICAgICAgfHwgKmdyb3VwaW5nIDwgMAoKICAgICAgICAg ICAgICAgICAgICkKICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAgZG8KICAgICAgICAgICAg ICAgICotLXcgPSAqLS1zOwogICAgICAgICAgICAgIHdoaWxlIChzID4gc3JjKTsKICAgICAgICAg ICAgICBicmVhazsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KICByZXR1cm4gdzsKfQoK CgpzdHJ1Y3QgaGVscGVyX2ZpbGUKICB7CiAgICBzdHJ1Y3QgX0lPX0ZJTEVfcGx1cyBfZjsKCgoK ICAgIF9JT19GSUxFICpfcHV0X3N0cmVhbTsKCgoKICB9OwoKc3RhdGljIGludApfSU9faGVscGVy X292ZXJmbG93IChfSU9fRklMRSAqcywgaW50IGMpCnsKICBfSU9fRklMRSAqdGFyZ2V0ID0gKChz dHJ1Y3QgaGVscGVyX2ZpbGUqKSBzKS0+X3B1dF9zdHJlYW07CiMgMjA3MCAidmZwcmludGYuYyIK ICBpbnQgdXNlZCA9IHMtPl9JT193cml0ZV9wdHIgLSBzLT5fSU9fd3JpdGVfYmFzZTsKICBpZiAo dXNlZCkKICAgIHsKICAgICAgc2l6ZV90IHdyaXR0ZW4gPSAoKCooc3RydWN0IF9JT19qdW1wX3Qg KiopICgodm9pZCAqKSAmKChzdHJ1Y3QgX0lPX0ZJTEVfcGx1cyAqKSAodGFyZ2V0KSktPnZ0YWJs ZSArICh0YXJnZXQpLT5fdnRhYmxlX29mZnNldCkpLT5fX3hzcHV0bikgKHRhcmdldCwgcy0+X0lP X3dyaXRlX2Jhc2UsIHVzZWQpOwogICAgICBzLT5fSU9fd3JpdGVfcHRyIC09IHdyaXR0ZW47CiAg ICB9CgogIHJldHVybiAoKChzKS0+X0lPX3dyaXRlX3B0ciA+PSAocyktPl9JT193cml0ZV9lbmQp ID8gX19vdmVyZmxvdyAocywgKHVuc2lnbmVkIGNoYXIpIChjKSkgOiAodW5zaWduZWQgY2hhcikg KCoocyktPl9JT193cml0ZV9wdHIrKyA9IChjKSkpOwp9CiMgMjEwMyAidmZwcmludGYuYyIKc3Rh dGljIGNvbnN0IHN0cnVjdCBfSU9fanVtcF90IF9JT19oZWxwZXJfanVtcHMgPQp7CiAgMCwgMCwK ICBfSU9fZGVmYXVsdF9maW5pc2hfaW50ZXJuYWwsCiAgX0lPX2hlbHBlcl9vdmVyZmxvdywKICBf SU9fZGVmYXVsdF91bmRlcmZsb3csCiAgX0lPX2RlZmF1bHRfdWZsb3dfaW50ZXJuYWwsCiAgX0lP X2RlZmF1bHRfcGJhY2tmYWlsX2ludGVybmFsLAogIF9JT19kZWZhdWx0X3hzcHV0bl9pbnRlcm5h bCwKICBfSU9fZGVmYXVsdF94c2dldG5faW50ZXJuYWwsCiAgX0lPX2RlZmF1bHRfc2Vla29mZiwK ICBfSU9fZGVmYXVsdF9zZWVrcG9zLAogIF9JT19kZWZhdWx0X3NldGJ1ZiwKICBfSU9fZGVmYXVs dF9zeW5jLAogIF9JT19kZWZhdWx0X2RvYWxsb2NhdGVfaW50ZXJuYWwsCiAgX0lPX2RlZmF1bHRf cmVhZCwKICBfSU9fZGVmYXVsdF93cml0ZSwKICBfSU9fZGVmYXVsdF9zZWVrLAogICgoX0lPX2Ns b3NlX3QpIF9JT19kZWZhdWx0X3N5bmMpLAogIF9JT19kZWZhdWx0X3N0YXQKfTsKCgpzdGF0aWMg aW50CgpidWZmZXJlZF92ZnByaW50ZiAocmVnaXN0ZXIgX0lPX0ZJTEUgKnMsIGNvbnN0IGNoYXIg KmZvcm1hdCwKICAgICAgICAgICAgICAgICAgIF9fZ251Y192YV9saXN0IGFyZ3MpCnsKICBjaGFy IGJ1Zls4MTkyXTsKICBzdHJ1Y3QgaGVscGVyX2ZpbGUgaGVscGVyOwogIHJlZ2lzdGVyIF9JT19G SUxFICpocCA9IChfSU9fRklMRSAqKSAmaGVscGVyLl9mOwogIGludCByZXN1bHQsIHRvX2ZsdXNo OwoKCgogIGlmIChzLT5fdnRhYmxlX29mZnNldCA9PSAwICYmICh7IGludCBfX3Jlc3VsdCA9ICgt MSk7IGlmIChfX3Jlc3VsdCA8IDAgJiYgISAoMCkpIHsgaWYgKChzKS0+X21vZGUgPT0gMCkgKHMp LT5fbW9kZSA9IC0xOyBfX3Jlc3VsdCA9IChzKS0+X21vZGU7IH0gZWxzZSBpZiAoX19idWlsdGlu X2NvbnN0YW50X3AgKC0xKSAmJiAoLTEpID09IDApIF9fcmVzdWx0ID0gKHMpLT5fbW9kZTsgZWxz ZSBfX3Jlc3VsdCA9IF9JT19md2lkZSAocywgX19yZXN1bHQpOyBfX3Jlc3VsdDsgfSkgIT0gLTEp IHJldHVybiAtMTsKCgoKICBoZWxwZXIuX3B1dF9zdHJlYW0gPSBzOwoKCgoKCiAgKChocCktPl9J T193cml0ZV9iYXNlID0gKGhwKS0+X0lPX3dyaXRlX3B0ciA9IGJ1ZiwgKGhwKS0+X0lPX3dyaXRl X2VuZCA9IChidWYgKyBzaXplb2YgYnVmKSk7CiAgaHAtPl9tb2RlID0gLTE7CgogIGhwLT5fZmxh Z3MgPSAweEZCQUQwMDAwfDR8MHg4MDAwOwoKICBocC0+X3Z0YWJsZV9vZmZzZXQgPSAwOwoKCgoK ICAoJmhlbHBlci5fZiktPnZ0YWJsZSA9IChzdHJ1Y3QgX0lPX2p1bXBfdCAqKSAmX0lPX2hlbHBl cl9qdW1wczsKCgoKICByZXN1bHQgPSBfSU9fdmZwcmludGZfaW50ZXJuYWwgKGhwLCBmb3JtYXQs IGFyZ3MpOwoKCgoKCiAgeyBzdHJ1Y3QgX3B0aHJlYWRfY2xlYW51cF9idWZmZXIgX2J1ZmZlcjsg aW50IF9hdmFpbCA9ICgxKSAmJiBfcHRocmVhZF9jbGVhbnVwX3B1c2hfZGVmZXIgIT0gKCh2b2lk ICopMCk7IGlmIChfYXZhaWwpIHsgX3B0aHJlYWRfY2xlYW51cF9wdXNoX2RlZmVyICgmX2J1ZmZl ciwgKCh2b2lkICgqKSAodm9pZCAqKSkgJl9JT19mdW5sb2NrZmlsZSksIChzKSk7IH07CiAgOwoj IDIxODEgInZmcHJpbnRmLmMiCiAgaWYgKCh0b19mbHVzaCA9IGhwLT5fSU9fd3JpdGVfcHRyIC0g aHAtPl9JT193cml0ZV9iYXNlKSA+IDApCiAgICB7CiAgICAgIGlmICgoaW50KSAoKCooc3RydWN0 IF9JT19qdW1wX3QgKiopICgodm9pZCAqKSAmKChzdHJ1Y3QgX0lPX0ZJTEVfcGx1cyAqKSAocykp LT52dGFibGUgKyAocyktPl92dGFibGVfb2Zmc2V0KSktPl9feHNwdXRuKSAocywgaHAtPl9JT193 cml0ZV9iYXNlLCB0b19mbHVzaCkgIT0gdG9fZmx1c2gpCiAgICAgICAgcmVzdWx0ID0gLTE7CiAg ICB9CgoKCiAgOwogIGlmIChfYXZhaWwpIHsgX3B0aHJlYWRfY2xlYW51cF9wb3BfcmVzdG9yZSAo Jl9idWZmZXIsICgwKSk7IH0gfTsKCiAgcmV0dXJuIHJlc3VsdDsKfQojIDIyNjcgInZmcHJpbnRm LmMiCmV4dGVybiBfX3R5cGVvZiAoX0lPX3ZmcHJpbnRmKSB2ZnByaW50ZiBfX2F0dHJpYnV0ZV9f ICgoYWxpYXMgKCJfSU9fdmZwcmludGYiKSkpOzsKX19hc21fXyAoIi5nbG9ibCB2ZnByaW50ZiA7 IC5zZXQgdmZwcmludGYsIF9fR0lfdmZwcmludGYiKTsKZXh0ZXJuIF9fdHlwZW9mIChfSU9fdmZw cmludGYpIF9JT192ZnByaW50Zl9pbnRlcm5hbCBfX2F0dHJpYnV0ZV9fICgoYWxpYXMgKCJfSU9f dmZwcmludGYiKSkpOwo=