From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from outgoing2021.csail.mit.edu (outgoing2021.csail.mit.edu [128.30.2.78]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id DEC3C2DF3D1 for ; Wed, 10 Sep 2025 21:47:37 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=128.30.2.78 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1757540860; cv=none; b=pmgU4Sqyw254lYen30D4LiUYuJgjcARBTtqnZK9OR9jZOzFHHctngHOKMC4oMqHD9AgPGc2RUZhMPoLNhkjDro8TpNxvNgJh833DVEPJYpY+ZP3LNOE0lPVIvQkxqaFJUGU1SHImqWdR4oQKf7E5I/TD6MgX9cN31MEL8mX/x9Q= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1757540860; c=relaxed/simple; bh=o9TPaNgvdrD7522EsoK6nd4a9XXohVB7QHXxlXS7yn0=; h=To:cc:From:Subject:MIME-Version:Content-Type:Date:Message-ID; b=nKfyQnsFnQhY8ZBzVniUT/zYUYWQItvWOrTIsMA+K4l9Qcqz41WgOGzz9DDI5B/y7pcAAw/iv4tmxH5nXaAOBguGcEDhiL/rwE1t+AF39wrjU9BGQ8+WkbkmFiOUzK1LTUCsML532H+JGRArHyb3Fx8BCAmVyeYE2nvemzPdA4A= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=csail.mit.edu; spf=pass smtp.mailfrom=csail.mit.edu; dkim=pass (2048-bit key) header.d=outgoing.csail.mit.edu header.i=@outgoing.csail.mit.edu header.b=LNA8EmL+; arc=none smtp.client-ip=128.30.2.78 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=csail.mit.edu Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=csail.mit.edu Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=outgoing.csail.mit.edu header.i=@outgoing.csail.mit.edu header.b="LNA8EmL+" DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=outgoing.csail.mit.edu; s=test20231205; h=Message-ID:Date:Content-Type: MIME-Version:Subject:Reply-To:From:cc:To:Sender:Content-Transfer-Encoding: Content-ID:Content-Description:Resent-Date:Resent-From:Resent-Sender: Resent-To:Resent-Cc:Resent-Message-ID:In-Reply-To:References:List-Id: List-Help:List-Unsubscribe:List-Subscribe:List-Post:List-Owner:List-Archive; bh=ADrnZYXMHHnrxq/fejeIzwX/StqVuWyu3cuNoNx/2NA=; t=1757540857; x=1758404857; b=LNA8EmL+8g6BvxajawIyvcDoGtgNqcx7kQeCITXBK3ABJl661gSVo7RiluyDGFJoYBKNQ+AC0J8 TWUpcGQjhevTdHticfM+ohVHsOl5gzxJQChL26MwrkkP3nYjuXi1NLpVkYQaJfkzHSx0mljboqJnM oYzi8h36BKxQPJg5Qk1sNr5vS+4i9Nu67hjXcHO1zYxaMHryv/5WCLcaqU0pOX+DlQa072gXhOYOX 6Fu3cCjSnWjWHqCU13cxEibxvKNojqqrS2lttBeVwov/MW6FI32wN+gA9VWIq9UaK8WJfBSKtjv9X FzKvhXLkGE/DlYQd+V/OFpcN9ssJ+abFtlvQ==; Received: from [24.147.175.133] (helo=crash.local) by outgoing2021.csail.mit.edu with esmtpsa (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.95) (envelope-from ) id 1uwSf2-00ATJB-Hs; Wed, 10 Sep 2025 17:47:28 -0400 Received: from localhost (localhost [127.0.0.1]) by crash.local (Postfix) with ESMTP id DF6AB289EFDA; Wed, 10 Sep 2025 17:47:27 -0400 (EDT) To: Chuck Lever , Jeff Layton cc: NeilBrown , Olga Kornievskaia , Dai Ngo , Tom Talpey , linux-nfs@vger.kernel.org From: rtm@csail.mit.edu Reply-To: rtm@csail.mit.edu Subject: nfsd's ff_layout_ops.proc_layoutcommit is NULL Precedence: bulk X-Mailing-List: linux-nfs@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="=-=-=" Date: Wed, 10 Sep 2025 17:47:27 -0400 Message-ID: <55792.1757540847@localhost> --=-=-= Content-Type: text/plain So if a client sends a flexfile LAYOUTCOMMIT to a pNFS server, it will crash here in nfsd4_layoutcommit(): nfserr = ops->proc_layoutcommit(inode, lcp); I've attached a demo: # cc nfsd155a.c # ./a.out ... [ 643.202841] BUG: kernel NULL pointer dereference, address: 0000000000000000 [ 643.203679] CPU: 8 UID: 0 PID: 1115 Comm: nfsd Not tainted 6.17.0-rc4-00231-gc8ed9b5c02a5 #28 PREEMPT(voluntary) #0 nfsd4_layoutcommit (rqstp=0xffffffd6047cd000, cstate=0xffffffd60a062028, u=0xffffffd60a022720) at fs/nfsd/nfs4proc.c:2529 #1 0xffffffff804b9768 in nfsd4_proc_compound (rqstp=0xffffffd6047cd000) at fs/nfsd/nfs4proc.c:2888 #2 0xffffffff804a0558 in nfsd_dispatch (rqstp=0xffffffd6047cd000) at fs/nfsd/nfssvc.c:991 #3 0xffffffff81034022 in svc_process_common ( rqstp=rqstp@entry=0xffffffd6047cd000) at net/sunrpc/svc.c:1428 #4 0xffffffff81034522 in svc_process (rqstp=rqstp@entry=0xffffffd6047cd000) at net/sunrpc/svc.c:1568 #5 0xffffffff810469a0 in svc_handle_xprt (xprt=0xffffffd60449d800, rqstp=0xffffffd6047cd000) at net/sunrpc/svc_xprt.c:817 #6 svc_recv (rqstp=rqstp@entry=0xffffffd6047cd000) at net/sunrpc/svc_xprt.c:874 #7 0xffffffff8049f58c in nfsd (vrqstp=0xffffffd6047cd000) at fs/nfsd/nfssvc.c:926 (gdb) print ops $1 = (const struct nfsd4_layout_ops *) 0xffffffff81366130 (gdb) print ops->proc_layoutcommit $2 = (__be32 (*)(struct inode *, struct nfsd4_layoutcommit *)) 0x0 Robert Morris rtm@mit.edu --=-=-= Content-Type: application/octet-stream Content-Disposition: attachment; filename=nfsd155a.c Content-Transfer-Encoding: base64 I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdHJpbmcuaD4KI2luY2x1ZGUgPHN0ZGxpYi5o PgojaW5jbHVkZSA8dW5pc3RkLmg+CiNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CiNpbmNsdWRlIDxz eXMvaW9jdGwuaD4KI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KI2luY2x1ZGUgPHN5cy93YWl0Lmg+ CiNpbmNsdWRlIDxzeXMvcmVzb3VyY2UuaD4KI2luY2x1ZGUgPGFycGEvaW5ldC5oPgojaW5jbHVk ZSA8YXNzZXJ0Lmg+CgpjaGFyIG9idWZbMTAyNDBdOwppbnQgb2kgPSAwOwoKaW50IHM7IC8vIHNv Y2tldCBmZAppbnQgeGlkID0gMTsKdW5zaWduZWQgbG9uZyBsb25nIGNsaWVudGlkOyAvLyBzZXJ2 ZXIgdGVsbHMgdXMgaW4gZXhjaGFuZ2VfaWQgcmVwbHkKdW5zaWduZWQgaW50IHNlcXVlbmNlaWQ7 CnVuc2lnbmVkIGludCBzbG90MHNlcXVlbmNlaWQgPSAxOwpjaGFyIHNlc3Npb25pZFsxNl07Cgpz dHJ1Y3Qgc3RhdGVpZCB7CiAgaW50IHNlcWlkOwogIGNoYXIgb3RoZXJbMTJdOwp9OwpzdHJ1Y3Qg c3RhdGVpZCBzaWQ7IC8vIG1vc3QgcmVjZW50IHJlY2VpdmVkCgpzdHJ1Y3QgZmggewogIGludCBs ZW47CiAgY2hhciBmaFsyNTZdOwp9OwpzdHJ1Y3QgZmggZmg7IC8vIG1vc3QgcmVjZW50IHJlY2Vp dmVkCgp2b2lkCnN5cyhjb25zdCBjaGFyICpjbWQpCnsKICB2b2xhdGlsZSBpbnQganVuayA9IHN5 c3RlbShjbWQpOwogICh2b2lkKSBqdW5rOwp9CgpzdGF0aWMgdW5zaWduZWQgbG9uZyBzeW14KCkg ewogIHJldHVybiAwOwp9CgppbnQgc3ltc3RhcnQgPSAtMTsKCnZvaWQgcHV0X2ZhdHRyNF9vbmUo KTsKdm9pZCBwdXRfZmF0dHI0X21hbnkoKTsKCnZvaWQKcHV0MzIodW5zaWduZWQgaW50IHgpCnsK ICBhc3NlcnQoKG9pICUgNCkgPT0gMCk7CiAgKihpbnQqKShvYnVmK29pKSA9IGh0b25sKHgpOwog IG9pICs9IDQ7Cn0KCnZvaWQKcHV0NjQodW5zaWduZWQgbG9uZyBsb25nIHgpCnsKICBwdXQzMih4 ID4+IDMyKTsKICBwdXQzMih4KTsKfQoKdm9pZApwdXRfb3BhcXVlKGludCBuLCBjb25zdCBjaGFy ICpidWYpCnsKICBwdXQzMihuKTsKICBmb3IoaW50IGkgPSAwOyBpIDwgbjsgaSsrKQogICAgb2J1 ZltvaSsrXSA9IChidWYgPyBidWZbaV0gOiAwKTsKICB3aGlsZShuICYgMyl7CiAgICBvYnVmW29p KytdID0gMDsKICAgIG4rKzsKICB9Cn0KCnZvaWQKcHV0X29wYXF1ZV9yZXBlYXQoaW50IG4sIGNo YXIgYykKewogIHB1dDMyKG4pOwogIGZvcihpbnQgaSA9IDA7IGkgPCBuOyBpKyspCiAgICBvYnVm W29pKytdID0gYzsKICB3aGlsZSgobiU0KSE9MCl7CiAgICBvYnVmW29pKytdID0gMDsKICAgIG4r KzsKICB9Cn0KCnZvaWQKcHV0X3Nlc3Npb25pZChjb25zdCBjaGFyICpzaWQpCnsKICBmb3IoaW50 IGkgPSAwOyBpIDwgMTY7IGkrKyl7CiAgICBvYnVmW29pKytdID0gKHNpZCA/IHNpZFtpXSA6IDAp OwogIH0KfQoKdm9pZApwdXRfcmVzZXQoKQp7CiAgb2kgPSA0OyAvLyBsZWF2ZSByb29tIGZvciBw YWNrZXQgbGVuZ3RoCn0KCnZvaWQKc2VuZF9zZW5kKCkKewogIGFzc2VydChvaSA+PSA0KTsKICBh c3NlcnQoKG9pICUgNCkgPT0gMCk7CiAgYXNzZXJ0KG9pIDw9IHNpemVvZihvYnVmKSk7CiAgZm9y KGludCBpID0gMDsgaSA8IDE2OyBpKyspCiAgICBwdXQzMigweGZmZmZmZmZmKTsKICBpZihzeW1z dGFydCAhPSAtMSl7CiAgICBmb3IoaW50IGkgPSBzeW1zdGFydDsgaSA8IG9pOyBpICs9IDgpCiAg ICAgICoobG9uZyBsb25nICopKG9idWYgKyBpKSBePSBzeW14KCk7CiAgfQogICooaW50Kikob2J1 ZiswKSA9IGh0b25sKChvaSAtIDQpIHwgMHg4MDAwMDAwMCk7CiAgcHJpbnRmKCJ3cml0aW5nICVk IHhpZCAlZFxuIiwgb2ksIG50b2hsKCooaW50Kikob2J1Zis0KSkpOwogIGlmKHdyaXRlKHMsIG9i dWYsIG9pKSA8PSAwKSBwZXJyb3IoIndyaXRlIik7CiAgb2kgPSAwOwogIHN5bXN0YXJ0ID0gLTE7 Cn0KCnZvaWQKcHV0X3JwY19oZWFkZXIoaW50IHByb2MpCnsKICBwdXRfcmVzZXQoKTsKICBwdXQz Mih4aWQrKyk7CiAgcHV0MzIoMCk7IC8vIG10eXBlPUNBTEwKICBwdXQzMigyKTsgLy8gcnBjIHZl cnNpb24KICBwdXQzMigxMDAwMDMpOyAvLyBwcm9nICMKICBwdXQzMig0KTsgLy8gcHJvZyB2ZXJz CiAgcHV0MzIocHJvYyk7IC8vIHByb2MKICBpZihwcm9jID09IDApewogICAgcHV0MzIoMCk7IC8v IGNyZWQgdHlwZQogICAgcHV0MzIoMCk7IC8vIGNyZWQgbGVuCiAgfSBlbHNlIHsKICAgIHB1dDMy KDEpOyAvLyBjcmVkIHR5cGUgQVVUSF9TWVMgLyBBVVRIX1VOSVgKICAgIHB1dDMyKDMyKTsgLy8g Y3JlZCBsZW5ndGgKICAgIHB1dDMyKDApOyAvLyBzdGFtcAogICAgcHV0X29wYXF1ZSg5LCAibG9j YWxob3N0Iik7CiAgICBwdXQzMig2NTUzNCk7IC8vIHVpZAogICAgcHV0MzIoNjU1MzQpOyAvLyBn aWQKICAgIHB1dDMyKDApOyAvLyAjIGdpZHMKICB9CiAgcHV0MzIoMCk7IC8vIHZlcmYgdHlwZQog IHB1dDMyKDApOyAvLyB2ZXJmIGxlbgp9Cgp2b2lkCnB1dF9jb21wb3VuZChpbnQgbikKewogIHB1 dF9ycGNfaGVhZGVyKDEpOwoKICAvLyBjb21wb3VuZCBoZWFkZXIKICBwdXRfb3BhcXVlKDAsICIi KTsgLy8gdGFnCiAgcHV0MzIoMik7IC8vIG1pbm9yIHZlcnNpb24KICBwdXQzMihuKTsgLy8gIyBv cGVyYXRpb25zIGluIHRoZSBjb21wb3VuZAp9CgovLyBtb3N0IENPTVBPVU5EcyBhcmUgcmVxdWly ZWQgdG8gc3RhcnQgd2l0aCBhIFNFUVVFTkNFLgp2b2lkCnB1dF9zZXF1ZW5jZSgpCnsKICBwdXQz Mig1Myk7IC8vIFNFUVVFTkNFCiAgcHV0X3Nlc3Npb25pZChzZXNzaW9uaWQpOyAvLyBzZXNzaW9u aWQgKDE2IGJ5dGVzKQogIHB1dDMyKHNsb3Qwc2VxdWVuY2VpZCsrKTsgLy8gc2VxdWVuY2VpZCA/ Pz8KICBwdXQzMigwKTsgLy8gc2xvdGlkCiAgcHV0MzIoMCk7IC8vIGhpZ2hlc3Rfc2xvdGlkCiAg cHV0MzIoMCk7IC8vIGNhY2hldGhpcwp9Cgp2b2lkCnB1dF9yZWNsYWltX2NvbXBsZXRlKCkKewog IHB1dDMyKDU4KTsgLy8gUkVDTEFJTV9DT01QTEVURQogIHB1dDMyKDApOyAvLyAwIG1lYW5zIGds b2JhbCwgMSBtZWFucyBqdXN0IGN1cnJlbnQgZmgKfQoKCmNoYXIgaWJ1ZlsxMDI0MF07CmludCBp aTsKaW50IGlsZW47CgppbnQKcmVhZG4oaW50IGZkLCB2b2lkICp4YnVmLCBpbnQgbikKewogIGNo YXIgKmJ1ZiA9IChjaGFyICopIHhidWY7CiAgaW50IG9yaWcgPSBuOwogIHdoaWxlKG4gPiAwKXsK ICAgIGludCBjYyA9IHJlYWQoZmQsIGJ1Ziwgbik7CiAgICBpZihjYyA8PSAwKSB7IHBlcnJvcigi cmVhZCIpOyByZXR1cm4gLTE7IH0KICAgIG4gLT0gY2M7CiAgICBidWYgKz0gY2M7CiAgfQogIHJl dHVybiBvcmlnOwp9Cgp1bnNpZ25lZCBpbnQKcGFyc2UzMigpCnsKICBpZihpaSA+PSBpbGVuKXsK ICAgIHByaW50ZigicGFyc2VkIGJleW9uZCB0aGUgZW5kIG9mIHRoZSBpbnB1dFxuIik7CiAgICBy ZXR1cm4gMDsKICB9CiAgdW5zaWduZWQgaW50IHggPSAqKGludCopKGlidWYraWkpOwogIGlpICs9 IDQ7CiAgcmV0dXJuIG50b2hsKHgpOwp9Cgp1bnNpZ25lZCBsb25nIGxvbmcKcGFyc2U2NCgpCnsK ICB1bnNpZ25lZCBsb25nIGxvbmcgaGkgPSBwYXJzZTMyKCk7CiAgdW5zaWduZWQgbG9uZyBsb25n IGxvID0gcGFyc2UzMigpOwogIHJldHVybiAoaGkgPDwgMzIpIHwgbG87Cn0KCi8vIHNlc3Npb25p ZDQgLS0gMTYgYnl0ZXMKdm9pZApwYXJzZV9zZXNzaW9uaWQoY2hhciAqc2lkKQp7CiAgZm9yKGlu dCBpID0gMDsgaSA8IDE2OyBpKyspewogICAgaWYoc2lkKQogICAgICBzaWRbaV0gPSBpYnVmW2lp XTsKICAgIGlpKys7CiAgfQp9Cgp2b2lkCnB1dF9zaWQoY2hhciAqc2lkKQp7CiAgZm9yKGludCBp ID0gMDsgaSA8IDE2OyBpKyspewogICAgb2J1ZltvaSsrXSA9IChzaWQgPyBzaWRbaV0gOiAwKTsK ICB9Cn0KCi8vIHNlc3Npb25pZDQgLS0gMTYgYnl0ZXMKdm9pZApwYXJzZV9zaWQoY2hhciAqc2lk KQp7CiAgZm9yKGludCBpID0gMDsgaSA8IDE2OyBpKyspewogICAgaWYoc2lkKQogICAgICBzaWRb aV0gPSBpYnVmW2lpXTsKICAgIGlpKys7CiAgfQp9Cgp1bnNpZ25lZCBpbnQKcGFyc2Vfb3BhcXVl KGNoYXIgKmJ1ZikKewogIGlmKGJ1ZikKICAgIGJ1ZlswXSA9IDA7CiAgaW50IG5vbWluYWxfbiA9 IHBhcnNlMzIoKTsKICBpZihub21pbmFsX24gPiA0MDk2KXsKICAgIHByaW50ZigiY3Jhenkgb3Bh cXVlIGxlbmd0aCAlZFxuIiwgbm9taW5hbF9uKTsKICAgIHJldHVybiAwOwogIH0KICBpbnQgcmVh bF9uID0gbm9taW5hbF9uOwogIHdoaWxlKChyZWFsX24lNCkgIT0gMCkgcmVhbF9uICs9IDE7CiAg Zm9yKGludCBpID0gMDsgaSA8IHJlYWxfbjsgaSsrKXsKICAgIGlmKGJ1ZiAmJiBpIDwgcmVhbF9u KQogICAgICBidWZbaV0gPSBpYnVmW2lpXTsKICAgIGlpKys7CiAgfQogIHJldHVybiBub21pbmFs X247Cn0KCnZvaWQKcGFyc2VfZXhjaGFuZ2VfaWRfcmVwbHkoKQp7CiAgaW50IHN0YXR1cyA9IHBh cnNlMzIoKTsKICBpZihzdGF0dXMgIT0gMCkKICAgIHByaW50ZigiZXhjaGFuZ2VfaWQgcmVwbHkg c3RhdHVzICVkLCBub3QgMFxuIiwgc3RhdHVzKTsKICBjbGllbnRpZCA9IHBhcnNlNjQoKTsKICBz ZXF1ZW5jZWlkID0gcGFyc2UzMigpOwogIHByaW50ZigiZXhjaGFuZ2VfaWQgY2xpZW50aWQgMHgl bGx4IHNlcXVlbmNlaWQgMHgleFxuIiwgY2xpZW50aWQsIHNlcXVlbmNlaWQpOwp9Cgp2b2lkCnBh cnNlX2NyZWF0ZV9zZXNzaW9uX3JlcGx5KCkKewogIGludCBzdGF0dXMgPSBwYXJzZTMyKCk7CiAg aWYoc3RhdHVzICE9IDApCiAgICBwcmludGYoImNyZWF0ZV9zZXNzaW9uIHJlcGx5IHN0YXR1cyAl ZCwgbm90IDBcbiIsIHN0YXR1cyk7CiAgcGFyc2Vfc2Vzc2lvbmlkKHNlc3Npb25pZCk7Cn0KCnZv aWQKcGFyc2Vfc2VxdWVuY2VfcmVwbHkoKQp7CiAgaW50IHN0YXR1cyA9IHBhcnNlMzIoKTsKICBp ZihzdGF0dXMgIT0gMCkKICAgIHByaW50Zigic2VxdWVuY2UgcmVwbHkgc3RhdHVzICVkLCBub3Qg MFxuIiwgc3RhdHVzKTsKICBwYXJzZV9zZXNzaW9uaWQoMCk7CiAgcGFyc2UzMigpOyAvLyBzZXF1 ZW5jZWlkCiAgcGFyc2UzMigpOyAvLyBzbG90aWQKICBwYXJzZTMyKCk7IC8vIGhpZ2hlc3Rfc2xv dGlkCiAgcGFyc2UzMigpOyAvLyB0YXJnZXRfaGlnaGVzdF9zbG90aWQKICBwYXJzZTMyKCk7IC8v IHN0YXR1c19mbGFncwp9Cgp2b2lkCnBhcnNlX3B1dHJvb3RmaF9yZXBseSgpCnsKICBpbnQgc3Rh dHVzID0gcGFyc2UzMigpOwogIGlmKHN0YXR1cyAhPSAwKQogICAgcHJpbnRmKCJwdXRyb290Zmhf cmVwbHkgc3RhdHVzICVkXG4iLCBzdGF0dXMpOwp9Cgp2b2lkCnBhcnNlX2xvb2t1cF9yZXBseSgp CnsKICBpbnQgc3RhdHVzID0gcGFyc2UzMigpOwogIGlmKHN0YXR1cyAhPSAwKQogICAgcHJpbnRm KCJsb29rdXBfcmVwbHkgc3RhdHVzICVkXG4iLCBzdGF0dXMpOwp9Cgp2b2lkCnBhcnNlX3N0YXRl aWQoKQp7CiAgc2lkLnNlcWlkID0gcGFyc2UzMigpOwogIGZvcihpbnQgaSA9IDA7IGkgPCAxMjsg aSsrKQogICAgc2lkLm90aGVyW2ldID0gaWJ1ZltpaSsrXTsKfQoKdm9pZApwYXJzZV9vcGVuX3Jl cGx5KCkKewogIGludCBzdGF0dXMgPSBwYXJzZTMyKCk7CiAgaWYoc3RhdHVzICE9IDApewogICAg cHJpbnRmKCJvcGVuIHN0YXR1cyAlZFxuIiwgc3RhdHVzKTsKICAgIHJldHVybjsKICB9CiAgcGFy c2Vfc3RhdGVpZCgpOwogIHBhcnNlMzIoKTsgLy8gY2hhbmdlX2luZm8gYXRvbWljCiAgcGFyc2U2 NCgpOyAvLyBjaGFuZ2VfaW5mbyBiZWZvcmUKICBwYXJzZTY0KCk7IC8vIGNoYW5nZV9pbmZvIGFm dGVyCiAgcGFyc2UzMigpOyAvLyByZmxhZ3MKICB1bnNpZ25lZCBpbnQgYml0d29yZHMgPSBwYXJz ZTMyKCk7IC8vIGF0dHJzZXQKICBmb3IoaW50IGkgPSAwOyBpIDwgYml0d29yZHM7IGkrKykKICAg IHBhcnNlMzIoKTsKICBpbnQgZGVsZWdhdGlvbl90eXBlID0gcGFyc2UzMigpOyAvLyBvcGVuX2Rl bGVnYXRpb240CiAgaWYoZGVsZWdhdGlvbl90eXBlID09IDApewogICAgLy8gT1BFTl9ERUxFR0FU RV9OT05FCiAgfSBlbHNlIGlmKGRlbGVnYXRpb25fdHlwZSA9PSAxKXsKICAgIC8vIE9QRU5fREVM RUdBVEVfUkVBRAogICAgLy8gb3Blbl9yZWFkX2RlbGVnYXRpb240CiAgICBwYXJzZTMyKCk7IC8v IHN0YXRlaWQgc2VxaWQKICAgIHBhcnNlMzIoKTsgLy8gb3RoZXIKICAgIHBhcnNlMzIoKTsgLy8g b3RoZXIKICAgIHBhcnNlMzIoKTsgLy8gb3RoZXIKICAgIHBhcnNlMzIoKTsgLy8gcmVjYWxsCiAg ICAvLyBuZnNhY2U0CiAgICBwYXJzZTMyKCk7IC8vIG5mc2FjZTQgdHlwZQogICAgcGFyc2UzMigp OyAvLyBuZnNhY2U0IGZsYWcKICAgIHBhcnNlMzIoKTsgLy8gbmZzYWNlNCBhY2Nlc3NfbWFyawog ICAgcGFyc2Vfb3BhcXVlKDApOyAvLyBuZnNhY2U0IHdobwogIH0gZWxzZSBpZihkZWxlZ2F0aW9u X3R5cGUgPT0gMil7CiAgICAvLyBPUEVOX0RFTEVHQVRFX1dSSVRFCiAgICBwYXJzZTMyKCk7IC8v IHN0YXRlaWQgc2VxaWQKICAgIHBhcnNlMzIoKTsgLy8gb3RoZXIKICAgIHBhcnNlMzIoKTsgLy8g b3RoZXIKICAgIHBhcnNlMzIoKTsgLy8gb3RoZXIKICAgIHBhcnNlMzIoKTsgLy8gcmVjYWxsCiAg ICAvLyBuZnNfc3BhY2VfbGltaXQ0CiAgICBpbnQgbGltaXRieSA9IHBhcnNlMzIoKTsKICAgIGlm KGxpbWl0YnkgPT0gMSl7CiAgICAgIC8vIE5GU19MSU1JVF9TSVpFCiAgICAgIHBhcnNlNjQoKTsg Ly8gZmlsZXNpemUKICAgIH0gZWxzZSBpZihsaW1pdGJ5ID09IDIpewogICAgICAvLyBORlNfTElN SVRfQkxPQ0tTCiAgICAgIHBhcnNlMzIoKTsgLy8gbnVtX2Jsb2NrcwogICAgICBwYXJzZTMyKCk7 IC8vIGJ5dGVzX3Blcl9ibG9jawogICAgfSBlbHNlIHsKICAgICAgcHJpbnRmKCJvcGVuIHJlcGx5 LCB1bmtub3duIGxpbWl0YnkgJWRcbiIsIGxpbWl0YnkpOwogICAgfQogICAgLy8gbmZzYWNlNAog ICAgcGFyc2UzMigpOyAvLyBuZnNhY2U0IHR5cGUKICAgIHBhcnNlMzIoKTsgLy8gbmZzYWNlNCBm bGFnCiAgICBwYXJzZTMyKCk7IC8vIG5mc2FjZTQgYWNjZXNzX21hcmsKICAgIHBhcnNlX29wYXF1 ZSgwKTsgLy8gbmZzYWNlNCB3aG8KICB9IGVsc2UgewogICAgcHJpbnRmKCJESUQgTk9UIHVuZGVy c3RhbmQgZGVsZWdhdGlvbl90eXBlICVkXG4iLCBkZWxlZ2F0aW9uX3R5cGUpOwogIH0KfQoKdm9p ZApwYXJzZV9jb21wb3VuZF9yZXBseSgpCnsKICBpbnQgc3RhdCA9IHBhcnNlMzIoKTsgLy8gT0sK ICBwYXJzZV9vcGFxdWUoMCk7CiAgaW50IG5vcHMgPSBwYXJzZTMyKCk7CiAgcHJpbnRmKCJjb21w b3VuZCByZXBseSwgbm9wcyAlZCwgc3RhdCAlZCIsIG5vcHMsIHN0YXQpOwogIGlmKHN0YXQgPiAw ICYmIHN0YXQgPCAyMDApewogICAgcHJpbnRmKCIgJXMiLCBzdHJlcnJvcihzdGF0KSk7CiAgfQog IHByaW50ZigiXG4iKTsKICBmb3IoaW50IG9waSA9IDA7IG9waSA8IG5vcHMgJiYgaWkgPCBpbGVu OyBvcGkrKyl7CiAgICBpbnQgb3AgPSBwYXJzZTMyKCk7CiAgICBwcmludGYoInJlcGx5IGZvciBv cCAlZFxuIiwgb3ApOwogICAgaWYob3AgPT0gNTMpewogICAgICBwYXJzZV9zZXF1ZW5jZV9yZXBs eSgpOwogICAgfSBlbHNlIGlmKG9wID09IDQyKXsKICAgICAgcGFyc2VfZXhjaGFuZ2VfaWRfcmVw bHkoKTsKICAgIH0gZWxzZSBpZihvcCA9PSA0Myl7CiAgICAgIHBhcnNlX2NyZWF0ZV9zZXNzaW9u X3JlcGx5KCk7CiAgICB9IGVsc2UgaWYob3AgPT0gMjQpewogICAgICBwYXJzZV9wdXRyb290Zmhf cmVwbHkoKTsKICAgIH0gZWxzZSBpZihvcCA9PSAxNSl7CiAgICAgIHBhcnNlX2xvb2t1cF9yZXBs eSgpOwogICAgfSBlbHNlIGlmKG9wID09IDE4KXsKICAgICAgcGFyc2Vfb3Blbl9yZXBseSgpOwog ICAgfSBlbHNlIGlmKG9wID09IDI2KXsKICAgICAgaW50IHN0YXR1cyA9IHBhcnNlMzIoKTsKICAg ICAgaWYoc3RhdHVzICE9IDApewogICAgICAgIHByaW50ZigicmVhZGRpciBzdGF0dXMgJWRcbiIs IHN0YXR1cyk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgbG9uZyBsb25nIHZlcmYgPSBwYXJzZTY0 KCk7CiAgICAgICAgaW50IG5lbnRyaWVzID0gcGFyc2UzMigpOwogICAgICAgIGxvbmcgbG9uZyBj b29raWUgPSBwYXJzZTY0KCk7CiAgICAgICAgY2hhciBuYW1lWzEwMjRdOwogICAgICAgIG1lbXNl dChuYW1lLCAwLCBzaXplb2YobmFtZSkpOwogICAgICAgIHBhcnNlX29wYXF1ZShuYW1lKTsKICAg ICAgICAvL3ByaW50ZigidmVyZiAlbGx4ICplbnRyaWVzICVkIGNvb2tpZSAlbGx4IG5hbWUgJXNc biIsIHZlcmYsIG5lbnRyaWVzLCBjb29raWUsIG5hbWUpOwogICAgICB9CiAgICAgIGJyZWFrOwog ICAgfSBlbHNlIGlmKG9wID09IDM0KXsKICAgICAgaW50IHN0YXR1cyA9IHBhcnNlMzIoKTsKICAg ICAgcHJpbnRmKCJzZXRhdHRyIHN0YXR1cyAlZFxuIiwgc3RhdHVzKTsKICAgICAgYnJlYWs7CiAg ICB9IGVsc2UgaWYob3AgPT0gMjIpewogICAgICAvLyBwdXRmaAogICAgICBpbnQgc3RhdHVzID0g cGFyc2UzMigpOwogICAgICBpZihzdGF0dXMgIT0gMCkKICAgICAgICBwcmludGYoInB1dGZoIHN0 YXR1cyAlZFxuIiwgc3RhdHVzKTsKICAgIH0gZWxzZSBpZihvcCA9PSAzMil7CiAgICAgIC8vIHNh dmVmaAogICAgICBpbnQgc3RhdHVzID0gcGFyc2UzMigpOwogICAgICBpZihzdGF0dXMgIT0gMCkK ICAgICAgICBwcmludGYoInNhdmVmaCBzdGF0dXMgJWRcbiIsIHN0YXR1cyk7CiAgICB9IGVsc2Ug aWYob3AgPT0gMTApewogICAgICAvLyBnZXRmaAogICAgICBpbnQgc3RhdHVzID0gcGFyc2UzMigp OwogICAgICBpZihzdGF0dXMgPT0gMCl7CiAgICAgICAgZmgubGVuID0gcGFyc2Vfb3BhcXVlKGZo LmZoKTsKICAgICAgfSBlbHNlIHsKICAgICAgICBwcmludGYoImdldGZoIHN0YXR1cyAlZFxuIiwg c3RhdHVzKTsKICAgICAgfQogICAgfSBlbHNlIGlmKG9wID09IDYwKXsKICAgICAgLy8gY29weQog ICAgICBpbnQgc3RhdHVzID0gcGFyc2UzMigpOwogICAgICBpZihzdGF0dXMgIT0gMCl7CiAgICAg ICAgcHJpbnRmKCJjb3B5IHN0YXR1cyAlZFxuIiwgc3RhdHVzKTsKICAgICAgfSBlbHNlIHsKICAg ICAgICBpbnQgbmlkID0gcGFyc2UzMigpOwogICAgICAgIGlmKG5pZCA+IDApCiAgICAgICAgICBw YXJzZV9zdGF0ZWlkKCk7CiAgICAgIH0KICAgIH0gZWxzZSBpZihvcCA9PSA2KXsKICAgICAgLy8g Q1JFQVRFCiAgICAgIGludCBzdGF0dXMgPSBwYXJzZTMyKCk7CiAgICAgIGlmKHN0YXR1cyAhPSAw KXsKICAgICAgICBwcmludGYoImNyZWF0ZSBzdGF0dXMgJWRcbiIsIHN0YXR1cyk7CiAgICAgIH0g ZWxzZSB7CiAgICAgICAgcGFyc2UzMigpOyAvLyBjaGFuZ2VfaW5mbyBhdG9taWMKICAgICAgICBw YXJzZTY0KCk7IC8vIGNoYW5nZV9pbmZvIGJlZm9yZQogICAgICAgIHBhcnNlNjQoKTsgLy8gY2hh bmdlX2luZm8gYWZ0ZXIKICAgICAgICBpbnQgbmEgPSBwYXJzZTMyKCk7IC8vIGJpdG1hcDQgc2l6 ZQogICAgICAgIGZvcihpbnQgaSA9IDA7IGkgPCBuYTsgaSsrKQogICAgICAgICAgcGFyc2UzMigp OwogICAgICB9CiAgICB9IGVsc2UgaWYob3AgPT0gNzQpewogICAgICAvLyBMSVNUWEFUVFJTCiAg ICAgIGludCBzdGF0dXMgPSBwYXJzZTMyKCk7CiAgICAgIGlmKHN0YXR1cyAhPSAwKXsKICAgICAg ICBwcmludGYoImxpc3R4YXR0cnMgc3RhdHVzICVkXG4iLCBzdGF0dXMpOwogICAgICB9IGVsc2Ug ewogICAgICAgIHBhcnNlNjQoKTsgLy8gbmZzX2Nvb2tpZTQKICAgICAgICBpbnQgbm5hbWVzID0g cGFyc2UzMigpOwogICAgICAgIGZvcihpbnQgaSA9IDA7IGkgPCBubmFtZXM7IGkrKyl7CiAgICAg ICAgICBjaGFyIG5hbWVbMTAyNF07CiAgICAgICAgICBpbnQgbGVuID0gcGFyc2Vfb3BhcXVlKG5h bWUpOwogICAgICAgICAgbmFtZVtsZW5dID0gJ1wwJzsKICAgICAgICAgIC8vIHByaW50ZigieGF0 dHIgJXNcbiIsIG5hbWUpOwogICAgICAgIH0KICAgICAgICBwYXJzZTMyKCk7IC8vIGJvb2wgbHhy X2VvZgogICAgICB9CiAgICB9IGVsc2UgaWYob3AgPT0gNTApewogICAgICAvLyBMQVlPVVRHRVQK ICAgICAgaW50IHN0YXR1cyA9IHBhcnNlMzIoKTsKICAgICAgaWYoc3RhdHVzKXsKICAgICAgICBw cmludGYoImxheW91dGdldCBzdGF0dXMgJWRcbiIsIHN0YXR1cyk7CiAgICAgIH0gZWxzZSB7CiAg ICAgICAgcGFyc2UzMigpOyAvLyBib29sIGxvZ3JfcmV0dXJuX29uX2Nsb3NlCiAgICAgICAgcGFy c2Vfc3RhdGVpZCgpOwogICAgICB9CiAgICB9IGVsc2UgewogICAgICBwcmludGYoInJlcGx5IGZv ciB1bmtub3duIG9wICVkXG4iLCBvcCk7CiAgICAgIGJyZWFrOwogICAgfQogIH0KfQoKdm9pZApw YXJzZV9jYWxsYmFjayhpbnQgeGlkKQp7CiAgcGFyc2UzMigpOyAvLyBycGMgdmVyc2lvbgogIHBh cnNlMzIoKTsgLy8gcHJvZyAjCiAgcGFyc2UzMigpOyAvLyBwcm9nIHZlcnMKICBpbnQgcHJvYyA9 IHBhcnNlMzIoKTsgLy8gcHJvYwogIHBhcnNlMzIoKTsgLy8gYXV0aCBmbGF2b3IKICBwYXJzZV9v cGFxdWUoMCk7IC8vIGF1dGgKICBwYXJzZTMyKCk7IC8vIHZlcmYgZmxhdm9yCiAgcGFyc2Vfb3Bh cXVlKDApOyAvLyB2ZXJmCiAgcHJpbnRmKCJjYWxsYmFjayBwcm9jPSVkXG4iLCBwcm9jKTsKCiAg b2kgPSAwOwogIHB1dDMyKDApOyAvLyBwbGFjZWhvbGRlcgogIHB1dDMyKHhpZCk7CiAgcHV0MzIo MSk7IC8vIFJFUExZCiAgcHV0MzIoMCk7IC8vIE1TR19BQ0NFUFRFRAogIHB1dDMyKDApOyAvLyBv cGFxdWVfYXV0aCBmbGF2b3IgPSBBVVRIX05VTEwKICBwdXQzMigwKTsgLy8gb3BhcXVlX2F1dGgg bGVuZ3RoCiAgcHV0MzIoMCk7IC8vIFNVQ0NFU1MKICBpbnQgeG9pID0gb2k7CiAgaWYocHJvYyA9 PSAwKXsKICAgIC8vIG5vcAogIH0gZWxzZSBpZihwcm9jID09IDEpewogICAgLy8gY29tcG91bmQK ICAgIHBhcnNlX29wYXF1ZSgwKTsgLy8gdGFnCiAgICBwYXJzZTMyKCk7IC8vIG1pbm9ydmVyc2lv bgogICAgcGFyc2UzMigpOyAvLyBjYWxsYmFja19pZGVudAogICAgaW50IG5vcHMgPSBwYXJzZTMy KCk7CiAgICBwdXQzMigwKTsgLy8gc3RhdHVzCiAgICBwdXRfb3BhcXVlKDAsICIiKTsgLy8gdGFn CiAgICBwdXQzMihub3BzKTsKICAgIGZvcihpbnQgb3BpID0gMDsgb3BpIDwgbm9wczsgb3BpKysp ewogICAgICBpbnQgb3AgPSBwYXJzZTMyKCk7CiAgICAgIHhvaSA9IG9pOwogICAgICBwdXQzMihv cCk7CiAgICAgIGlmKG9wID09IDExKXsKICAgICAgICAvLyBDQl9TRVFVRU5DRQogICAgICAgIGNo YXIgc2lkWzE2XTsKICAgICAgICBwYXJzZV9zaWQoc2lkKTsKICAgICAgICBpbnQgc2VxID0gcGFy c2UzMigpOyAvLyBzZXF1ZW5jZWlkCiAgICAgICAgaW50IHNsb3QgPSBwYXJzZTMyKCk7IC8vIHNs b3RpZAogICAgICAgIGludCBoaXNsb3QgPSBwYXJzZTMyKCk7IC8vIGhpZ2hlc3Rfc2xvdGlkCiAg ICAgICAgcGFyc2UzMigpOyAvLyBjYWNoZXRoaXMKICAgICAgICBpbnQgbnJjbCA9IHBhcnNlMzIo KTsgLy8gY3NhX3JlZmVycmluZ19jYWxsX2xpc3RzPD4KICAgICAgICBmb3IoaW50IHJjaSA9IDA7 IHJjaSA8IG5yY2w7IHJjaSsrKXsKICAgICAgICAgIHBhcnNlMzIoKTsgLy8gc2Vzc2lvbmlkCiAg ICAgICAgICBwYXJzZTMyKCk7CiAgICAgICAgICBwYXJzZTMyKCk7CiAgICAgICAgICBwYXJzZTMy KCk7CiAgICAgICAgICBpbnQgbnh4eCA9IHBhcnNlMzIoKTsgLy8gcmNsX3JlZmVycmluZ19jYWxs czw+CiAgICAgICAgICBmb3IoaW50IHhpID0gMDsgeGkgPCBueHh4OyB4aSsrKXsKICAgICAgICAg ICAgcGFyc2UzMigpOyAvLyBzZXF1ZW5jZWlkCiAgICAgICAgICAgIHBhcnNlMzIoKTsgLy8gc2xv dGlkCiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHB1dF9zaWQoc2lkKTsKICAgICAgICBw dXQzMihzZXEpOyAvLyBzZXF1ZW5jZWlkCiAgICAgICAgcHV0MzIoc2xvdCk7IC8vIHNsb3RpZAog ICAgICAgIHB1dDMyKGhpc2xvdCk7IC8vIGhpZ2hlc3Rfc2xvdGlkCiAgICAgICAgcHV0MzIoaGlz bG90KTsgLy8gdGFyZ2V0X2hpZ2hlc3Rfc2xvdGlkCiAgICAgIH0gZWxzZSBpZihvcCA9PSA0KXsK ICAgICAgICBwcmludGYoIkNCX1JFQ0FMTFxuIik7CiAgICAgICAgLy8gc3RhdGVpZDQKICAgICAg ICBwYXJzZTMyKCk7IC8vIHNlcWlkCiAgICAgICAgcGFyc2UzMigpOyAvLyBvdGhlcgogICAgICAg IHBhcnNlMzIoKTsKICAgICAgICBwYXJzZTMyKCk7CiAgICAgICAgcGFyc2UzMigpOyAvLyB0cnVu Y2F0ZQogICAgICAgIHBhcnNlX29wYXF1ZSgwKTsgLy8gZmgKICAgICAgICBwdXQzMigwKTsgLy8g T0sKICAgICAgfSBlbHNlIHsKICAgICAgICBwcmludGYoImNhbGxiYWNrIHVua25vd24gb3AgJWRc biIsIG9wKTsKICAgICAgICBicmVhazsKICAgICAgfQogICAgfQogIH0gZWxzZSB7CiAgICBwcmlu dGYoImNhbGxiYWNrOiB1bmtub3duIHByb2MgJWRcbiIsIHByb2MpOwogIH0KICBzZW5kX3NlbmQo KTsKfQoKdm9pZApwYXJzZV9yZXBseShpbnQgcHJvYykKewogIGludCBkZXNpcmVkX3hpZCA9IHhp ZCAtIDE7CiBhZ2FpbjoKICBpZihyZWFkbihzLCAmaWxlbiwgNCkgPCAwKQogICAgcmV0dXJuOwog IGlsZW4gPSBudG9obChpbGVuKTsKICBpZigoaWxlbiAmIDB4ODAwMDAwMDApID09IDApCiAgICBw cmludGYoImlsZW4gaXMgbWlzc2luZyAweDgwMDAwMDAwXG4iKTsKICBpbGVuICY9IDB4N2ZmZmZm ZmY7CiAgaWYoaWxlbiA+IHNpemVvZihpYnVmKSl7CiAgICBwcmludGYoImh1Z2UgcGFja2V0ICVk XG4iLCBpbGVuKTsKICAgIHJldHVybjsKICB9CiAgaWYocmVhZG4ocywgaWJ1ZiwgaWxlbikgPCAw KQogICAgcmV0dXJuOwogIGlpID0gMDsKICBpbnQgeHhpZCA9IHBhcnNlMzIoKTsgLy8geGlkCiAg aW50IG10eXBlID0gcGFyc2UzMigpOyAvLyAxID0gUkVQTFkKICBpZihtdHlwZSA9PSAwKXsKICAg IC8vIENBTEwgLS0gYSBjYWxsYmFjawogICAgcGFyc2VfY2FsbGJhY2soeHhpZCk7CiAgICBnb3Rv IGFnYWluOwogIH0KICBpZih4eGlkICE9IGRlc2lyZWRfeGlkKXsKICAgIHByaW50ZigieGlkIG1p c21hdGNoLCB3YW50ZWQgMHgleCwgZ290IDB4JXgsIGlsZW4gJWQsIGlpICVkXG4iLCBkZXNpcmVk X3hpZCwgeHhpZCwgaWxlbiwgaWkpOwogIH0KICBpZihtdHlwZSAhPSAxKQogICAgcHJpbnRmKCJ1 bmV4cGVjdGVkIG10eXBlICVkLCBleHBlY3RlZCAxIC8gUkVQTFlcbiIsIG10eXBlKTsKICBpbnQg c3RhdCA9IHBhcnNlMzIoKTsgLy8gTVNHX0FDQ0VQVEVECiAgaWYoc3RhdCAhPSAwKQogICAgcHJp bnRmKCJ1bmV4cGVjdGVkIHJlcGx5IHN0YXQgJWQsIGV4cGVjdGVkIDAgLyBNU0dfQUNDRVBURURc biIsIHN0YXQpOwogIGludCBmbGF2b3IgPSBwYXJzZTMyKCk7IC8vIGF1dGggZmxhdm9yCiAgaWYo Zmxhdm9yICE9IDApCiAgICBwcmludGYoInVuZXhwZWN0ZWQgYXV0aF9mbGF2b3IgJWQsIGV4cGVj dGluZyAwIC8gQVVUSF9OT05FXG4iLCBmbGF2b3IpOwogIHBhcnNlX29wYXF1ZSgwKTsgLy8gdmVy ZgogIHN0YXQgPSBwYXJzZTMyKCk7IC8vIFNVQ0NFU1MKICBpZihzdGF0ICE9IDApCiAgICBwcmlu dGYoInVuZXhwZWN0ZWQgc3RhdCAlZCwgZXhwZWN0ZWQgMCAvIFNVQ0NFU1NcbiIsIHN0YXQpOwoK ICBpZihwcm9jID09IDApewogICAgcHJpbnRmKCJnb3QgcmVwbHkgZm9yIHByb2MgJWRcbiIsIHBy b2MpOwogIH0gZWxzZSBpZihwcm9jID09IDEpewogICAgcGFyc2VfY29tcG91bmRfcmVwbHkoKTsK ICB9IGVsc2UgewogICAgcHJpbnRmKCJnb3QgdW5leHBlY3RlZCByZXBseSBmb3IgcHJvYyAlZCB4 aWQgJWRcbiIsIHByb2MsIHh4aWQpOwogIH0KfQoKdm9pZApzZW5kX25vcCgpCnsKICBwdXRfcnBj X2hlYWRlcigwKTsKICBzZW5kX3NlbmQoKTsKICBwYXJzZV9yZXBseSgwKTsKfQoKdm9pZApzZW5k X2V4Y2hhbmdlX2lkKGludCBkb3N5bSkKewogIHB1dF9jb21wb3VuZCgxKTsKICBpZihkb3N5bSAm JiBzeW1zdGFydCA9PSAtMSkKICAgIHN5bXN0YXJ0ID0gb2k7CiAgcHV0MzIoNDIpOyAvLyBvcGVy YXRpb24gNDI6IEVYQ0hBTkdFX0lECiAgaW50IGNvX3ZlcmlmaWVyID0gMTsKI2lmICFTWU0KICBj b192ZXJpZmllciA9IGdldHBpZCgpOyAvLyBuZWVkcyB0byBiZSB1bmlxdWUKI2VuZGlmCiAgcHV0 NjQoY29fdmVyaWZpZXIpOyAvLyB2ZXJpZmllcjQKICBwdXRfb3BhcXVlKDIyLCAiTGludXggTkZT djQuMiB4eXp6eSIpOyAvLyBjb19vd25lcmlkCiAgcHV0MzIoMHgxMDMpOyAgLy8gZmxhZ3MKICBw dXQzMigwKTsgLy8gU1A0X05PTkUKICBwdXQzMigxKTsgLy8gbGVuZ3RoIG9mIGNsaWVudF9pbXBs X2lkCiAgcHV0X29wYXF1ZSgxMCwgImtlcm5lbC5vcmciKTsgLy8gbmlpX2RvbWFpbgogIHB1dF9v cGFxdWUoNCwgImJsYWgiKTsgLy8gbmlpX25hbWUKICBwdXQ2NCgwKTsgLy8gbmZzdGltZTQKICBw dXQzMigwKTsgLy8gbmZzdGltZTQKICBzZW5kX3NlbmQoKTsKICBwYXJzZV9yZXBseSgxKTsKfQoK dm9pZApzZW5kX2V4Y2hhbmdlX2lkX3N5bSgpCnsKICBwdXRfY29tcG91bmQoMSk7CiAgcHV0MzIo NDIpOyAvLyBvcGVyYXRpb24gNDI6IEVYQ0hBTkdFX0lECiAgcHV0NjQoMSk7IC8vIHZlcmlmaWVy NAogIHB1dF9vcGFxdWUoMjIsICJMaW51eCBORlN2NC4yIHh5enp5Iik7IC8vIGNvX293bmVyaWQK ICBwdXQzMigweDEwMyBeIHN5bXgoKSk7ICAvLyBmbGFncwogIHVuc2lnbmVkIGludCBob3cgPSBz eW14KCk7CiAgcHV0MzIoaG93KTsKICBpbnQgeG9pID0gb2k7CiAgaWYoaG93ID09IDApeyAvLyBT UDRfTk9ORQogIH0gZWxzZSBpZihob3cgPT0gMSl7IC8vIFNQNF9NQUNIX0NSRUQKICAgIHB1dDMy KDMpOwogICAgcHV0MzIoMHhmZmZmZmZmZik7CiAgICBwdXQzMigweGZmZmZmZmZmKTsKICAgIHB1 dDMyKDB4ZmZmZmZmZmYpOwogICAgcHV0MzIoMyk7CiAgICBwdXQzMigweGZmZmZmZmZmKTsKICAg IHB1dDMyKDB4ZmZmZmZmZmYpOwogICAgcHV0MzIoMHhmZmZmZmZmZik7CiAgfSBlbHNlIGlmKGhv dyA9PSAyKXsgLy8gU1A0X1NTVgogICAgLy8gc3NwX29wcwogICAgcHV0MzIoMyk7CiAgICBwdXQz MigweGZmZmZmZmZmKTsKICAgIHB1dDMyKDB4ZmZmZmZmZmYpOwogICAgcHV0MzIoMHhmZmZmZmZm Zik7CiAgICAvLyBzc3BfaGFzaF9hbGdzPD4KICAgIHB1dDMyKDIpOwogICAgcHV0X29wYXF1ZSg4 LCAiMTIzNDU2NzgiKTsKICAgIHB1dF9vcGFxdWUoOCwgIjFiY2RlZmdoIik7CiAgICAvLyBzc3Bf ZW5jcl9hbGdzPD4KICAgIHB1dDMyKDIpOwogICAgcHV0X29wYXF1ZSg4LCAiMTIzNDU2NzgiKTsK ICAgIHB1dF9vcGFxdWUoOCwgIjFiY2RlZmdoIik7CiAgICBwdXQzMig5OSk7IC8vIHNzcF93aW5k b3cKICAgIHB1dDMyKDk5KTsgLy8gc3NwX251bV9nc3NfaGFuZGxlcwogIH0KICB1bnNpZ25lZCBp bnQgbiA9IHN5bXgoKTsKICBpZihuID4gMjApIG4gPSAyMDsKICBwdXQzMihuKTsgLy8gbGVuZ3Ro IG9mIGNsaWVudF9pbXBsX2lkCiAgZm9yKGludCBpID0geG9pOyBpIDwgb2k7IGkgKz0gOCkKICAg ICoobG9uZyBsb25nICopKG9idWYraSkgXj0gc3lteCgpOwogIGZvcihpbnQgaSA9IDA7IGkgPCBu OyBpKyspewogICAgcHV0X29wYXF1ZV9yZXBlYXQoc3lteCgpICYgMHhmZiwgJ3gnKTsgLy8gbmlp X2RvbWFpbgogICAgcHV0X29wYXF1ZV9yZXBlYXQoc3lteCgpICYgMHhmZiwgJ3knKTsgLy8gbmlp X25hbWUKICAgIHB1dDY0KDApOyAvLyBuZnN0aW1lNAogICAgcHV0MzIoMCk7IC8vIG5mc3RpbWU0 CiAgfQogIHNlbmRfc2VuZCgpOwogIHBhcnNlX3JlcGx5KDEpOwp9Cgp2b2lkCnNlbmRfY3JlYXRl X3Nlc3Npb24oaW50IGRvc3ltKQp7CiAgcHV0X2NvbXBvdW5kKDEpOwogIHB1dDMyKDQzKTsgLy8g Q1JFQVRFX1NFU1NJT04KICBwdXQ2NChjbGllbnRpZCk7CiAgcHV0MzIoc2VxdWVuY2VpZCsrKTsK ICBpZihkb3N5bSAmJiBzeW1zdGFydCA9PSAtMSkKICAgIHN5bXN0YXJ0ID0gb2k7CiAgcHV0MzIo Myk7IC8vIGZsYWdzLCAxPUZMQUdfUEVSU0lTVCwgMj1DT05OX0JBQ0tfQ0hBTgogIC8vIGNzYV9m b3JlX2NoYW5fYXR0cnMsIGNzYV9iYWNrX2NoYW5fYXR0cnMKICBmb3IoaW50IGkgPSAwOyBpIDwg MjsgaSsrKXsKICAgIHB1dDMyKDApOyAvLyBoZWFkZXJwYWRzaXplCiAgICBwdXQzMig0MDk2KTsg Ly8gbWF4cmVxdWVzdHNpemUKICAgIHB1dDMyKDQwOTYpOyAvLyBtYXhyZXNwb25zZXNpemUKICAg IHB1dDMyKDQwOTYpOyAvLyBtYXhyZXNwb25zZXNpemVfY2FjaGVkCiAgICBwdXQzMigxMik7IC8v IG1heG9wZXJhdGlvbnMKICAgIHB1dDMyKDE2KTsgLy8gbWF4cmVxdWVzdHMKICAgIHB1dDMyKDAp OyAvLyBjYV9yZG1hX2lyZDw+CiAgfQogIHB1dDMyKDB4NDAwMDAwMDApOyAvLyBjc2FfY2JfcHJv Z3JhbQogIHB1dDMyKDEpOyAvLyBsZW5ndGggb2YgY3NhX3NlY19wYXJtcwojaWYgMAogIHB1dDMy KDApOyAvLyBBVVRIX05PTkUKI2Vsc2UKICBwdXQzMigxKTsgLy8gZmxhdm9yIEFVVEhfU1lTCiAg cHV0MzIoMCk7IC8vIHN0YW1wCiAgcHV0X29wYXF1ZSg5LCAibG9jYWxob3N0Iik7CiAgcHV0MzIo NjU1MzQpOyAvLyB1aWQKICBwdXQzMig2NTUzNCk7IC8vIGdpZAogIHB1dDMyKDApOyAvLyAjIGdp ZHMKI2VuZGlmCiAgc2VuZF9zZW5kKCk7CiAgcGFyc2VfcmVwbHkoMSk7Cn0KCnZvaWQKc2VuZF9z ZXF1ZW5jZSgpCnsKICBwdXRfY29tcG91bmQoMSk7CiAgcHV0X3NlcXVlbmNlKCk7CiAgc2VuZF9z ZW5kKCk7CiAgcGFyc2VfcmVwbHkoMSk7Cn0KCnZvaWQKc2VuZF9yZWNsYWltX2NvbXBsZXRlKCkK ewogIHB1dF9jb21wb3VuZCgyKTsKICBwdXRfc2VxdWVuY2UoKTsKICBwdXRfcmVjbGFpbV9jb21w bGV0ZSgpOwogIHNlbmRfc2VuZCgpOwogIHBhcnNlX3JlcGx5KDEpOwp9Cgp2b2lkCnB1dF9yb290 ZmgoKQp7CiAgcHV0MzIoMjQpOwp9CgovLyBzdHJ1Y3QgT1BFTjRhcmdzIHsKLy8gICBzZXFpZDQg ICAgICAgICAgc2VxaWQ7Ci8vICAgdWludDMyX3QgICAgICAgIHNoYXJlX2FjY2VzczsKLy8gICB1 aW50MzJfdCAgICAgICAgc2hhcmVfZGVueTsKLy8gICBvcGVuX293bmVyNCAgICAgb3duZXI7Ci8v ICAgb3BlbmZsYWc0ICAgICAgIG9wZW5ob3c7Ci8vICAgb3Blbl9jbGFpbTQgICAgIGNsYWltOwov LyB9OwoKdm9pZApwdXRfb3Blbl9leGlzdGluZyhjb25zdCBjaGFyICpmaWxlbmFtZSwgaW50IHNo YXJlKQp7CiAgcHV0MzIoMTgpOwogIHB1dDMyKDApOyAvLyBzZXFpZAogIHB1dDMyKHNoYXJlKTsg Ly8gc2hhcmVfYWNjZXNzIDE9UkVBRCAzPUJPVEgKICBwdXQzMigwKTsgLy8gc2hhcmVfZGVueQog IHB1dDY0KGNsaWVudGlkKTsgLy8gb3duZXIKICBwdXRfb3BhcXVlKDIyLCAiTGludXggTkZTdjQu MiB4eXp6eSIpOyAvLyBvd25lcgogIHB1dDMyKDApOyAvLyBvcGVuaG93IE9QRU40X05PQ1JFQVRF CiAgcHV0MzIoMCk7IC8vIENMQUlNX05VTEwKICBwdXRfb3BhcXVlKHN0cmxlbihmaWxlbmFtZSks IGZpbGVuYW1lKTsKfQoKdm9pZApwdXRfb3Blbl9jcmVhdGUoY2hhciAqbmFtZSwgaW50IGRvc3lt KQp7CiAgcHV0MzIoMTgpOwogIHB1dDMyKDApOyAvLyBzZXFpZAogIHB1dDMyKDMpOyAvLyBzaGFy ZV9hY2Nlc3MgQk9USAogIHB1dDMyKDApOyAvLyBzaGFyZV9kZW55CiAgcHV0NjQoY2xpZW50aWQp OyAvLyBvd25lcgogIHB1dF9vcGFxdWUoMjIsICJMaW51eCBORlN2NC4yIHh5enp5Iik7IC8vIG93 bmVyCiAgcHV0MzIoMSk7IC8vIG9wZW5ob3cgT1BFTjRfQ1JFQVRFCiAgdW5zaWduZWQgaW50IG1v ZGUgPSAwOyAvLyBVTkNIRUNLRUQ0CiAgaWYoZG9zeW0pCiAgICBtb2RlIF49IHN5bXgoKTsKICBw dXQzMihtb2RlKTsKICBpZihtb2RlID09IDIgfHwgbW9kZSA9PSAzKXsKICAgIHB1dDY0KDApOyAv LyB2ZXJpZmllcgogIH0KICBpZihtb2RlICE9IDIpewogICAgaWYoZG9zeW0pewogICAgICAvL3B1 dF9mYXR0cjRfb25lKCk7CiAgICAgIHB1dDMyKDIpOwogICAgICBwdXQ2NChzeW14KCkpOwogICAg ICBwdXQzMigxNio4KTsKICAgICAgZm9yKGludCBpID0gMDsgaSA8IDE2OyBpKyspCiAgICAgICAg cHV0NjQoc3lteCgpKTsKICAgIH0gZWxzZSB7CiAgICAgIHB1dDMyKDIpOyAvLyBhdHRyIGJpdG1h cCBsZW5ndGgKICAgICAgcHV0MzIoMTYpOyAvLyBhdHRyIGJpdHMKICAgICAgcHV0MzIoMik7IC8v IGF0dHIgYml0cwogICAgICBwdXQzMigxMik7IC8vIGF0dHIgbGVuCiAgICAgIHB1dDMyKDApOwog ICAgICBwdXQzMigwKTsKICAgICAgcHV0MzIoNDIwKTsKICAgIH0KICB9CiAgdW5zaWduZWQgaW50 IGNsYWltX3R5cGUgPSAwOyAvLyBDTEFJTV9OVUxMCiAgaWYoZG9zeW0pCiAgICBjbGFpbV90eXBl IF49IHN5bXgoKTsKICBwdXQzMihjbGFpbV90eXBlKTsKICB7CiAgICBjaGFyIGZmWzI1Nl07CiAg ICBzcHJpbnRmKGZmLCAiL3RtcC8lcyIsIG5hbWUpOwogICAgdW5saW5rKGZmKTsKICB9CiAgaWYo Y2xhaW1fdHlwZSA9PSAwIHx8IGNsYWltX3R5cGUgPT0gMyl7CiAgICBwdXRfb3BhcXVlKHN0cmxl bihuYW1lKSwgbmFtZSk7CiAgfSBlbHNlIGlmKGNsYWltX3R5cGUgPT0gMSl7IC8vIENMQUlNX1BS RVZJT1VTCiAgICBwdXQzMihzeW14KCkpOwogIH0gZWxzZSBpZihjbGFpbV90eXBlID09IDIpeyAv LyBDTEFJTV9ERUxFR0FURV9DVVIKICAgIC8vIHN0YXRlaWQ0CiAgICBwdXQzMihzaWQuc2VxaWQp OyAvLyBvcGVuX3N0YXRlaWQsIGZyb20gcHJldmlvdXMgT1BFTgogICAgZm9yKGludCBpID0gMDsg aSA8IDEyOyBpKyspCiAgICAgIG9idWZbb2krK10gPSBzaWQub3RoZXJbaV07CiAgICBwdXRfb3Bh cXVlKHN0cmxlbihuYW1lKSwgbmFtZSk7CiAgfSBlbHNlIGlmKGNsYWltX3R5cGUgPT0gNCl7IC8v IENMQUlNX0ZICiAgfSBlbHNlIGlmKGNsYWltX3R5cGUgPT0gNSl7IC8vIENVUl9GSAogICAgcHV0 MzIoc2lkLnNlcWlkKTsgLy8gb3Blbl9zdGF0ZWlkLCBmcm9tIHByZXZpb3VzIE9QRU4KICAgIGZv cihpbnQgaSA9IDA7IGkgPCAxMjsgaSsrKQogICAgICBvYnVmW29pKytdID0gc2lkLm90aGVyW2ld OwogIH0gZWxzZSBpZihjbGFpbV90eXBlID09IDYpeyAvLyBQUkVWX0ZICiAgfQp9Cgp2b2lkCnB1 dF9yZWFkZGlyKGludCBkb3N5bSkKewogIHB1dDMyKDI2KTsKICBpZihkb3N5bSAmJiBzeW1zdGFy dCA9PSAtMSkKICAgIHN5bXN0YXJ0ID0gb2k7CiAgcHV0NjQoMCk7IC8vIGNvb2tpZQogIHB1dDY0 KDApOyAvLyBjb29raWV2ZXJmCiAgcHV0MzIoNTEyKTsgLy8gZGlyY291bnQgKGJ5dGVzKQogIHB1 dDMyKDUxMik7IC8vIG1heGNvdW50IChieXRlcykKICAvLyBiaXRtYXAKICBwdXQzMigzKTsKICBw dXQzMigweDAwMTgwOTFhKTsKICBwdXQzMigweDAwYjBhMjNhKTsKICBwdXQzMigwKTsKfQoKdm9p ZApwdXRfbG9va3VwKGNvbnN0IGNoYXIgKm5hbWUpCnsKICBwdXQzMigxNSk7CiAgcHV0X29wYXF1 ZShzdHJsZW4obmFtZSksIG5hbWUpOwp9CgovLwovLyBnZW5lcmF0ZXMgYSBmYXR0cjQgKGJpdG1h cDQgdGhlbiBhdHRybGlzdDQpLgovLwp2b2lkCnB1dF9mYXR0cjQoaW50IHh3b3Jkc1tdLCBpbnQg ZmgpCnsKICBpbnQgd29yZHNbM107CiAgZm9yKGludCBpID0gMDsgaSA8IDM7IGkrKyl7CiAgICB3 b3Jkc1tpXSA9IHh3b3Jkc1tpXTsKICB9CiAgaW50IGJpdHdvcmRzID0gMzsKICBwdXQzMihiaXR3 b3Jkcyk7CiAgaW50IHdvcmQwaSA9IG9pOwogIGZvcihpbnQgaSA9IDA7IGkgPCBiaXR3b3Jkczsg aSsrKQogICAgcHV0MzIod29yZHNbaV0pOwogIGludCBsZW5pID0gb2k7CiAgcHV0MzIoMCk7IC8v IHBsYWNlaG9sZGVyIGZvciB0b3RhbCBsZW5ndGggb2YgYXR0cnMKICBmb3IoaW50IGEgPSAwOyBh IDwgYml0d29yZHMqMzI7IGErKyl7CiAgICBpZih3b3Jkc1thLzMyXSAmICgxIDw8IChhICUgMzIp KSl7CiAgICAgIGludCB4b2kgPSBvaTsKICAgICAgaWYoYSA9PSAwKXsKICAgICAgICBwdXQzMigy KTsgLy8gIyBiaXRtYXAgd29yZHMgb2Ygc3VwcG9ydGVkIGF0dHJzCiAgICAgICAgcHV0MzIoMHhm ZmZmZmZmZik7CiAgICAgICAgcHV0MzIoMHhmZmZmZmZmZik7CiAgICAgIH0gZWxzZSBpZihhID09 IDEpewogICAgICAgIGludCB0eXBlID0gMTsKICAgICAgICBpZihmaCA9PSAwIHx8IGZoID09IDEp CiAgICAgICAgICB0eXBlID0gMjsKICAgICAgICBwdXQzMih0eXBlKTsgLy8gTkY0RElSPTIgb3Ig TkY0UkVHPTEKICAgICAgfSBlbHNlIGlmKGEgPT0gMil7CiAgICAgICAgcHV0MzIoMCk7IC8vIGZo X2V4cGlyZV90eXBlCiAgICAgIH0gZWxzZSBpZihhID09IDMpewogICAgICAgIHB1dDY0KDApOyAv LyBjaGFuZ2UKICAgICAgfSBlbHNlIGlmKGEgPT0gNCl7CiAgICAgICAgcHV0NjQoNDA5NioxMCk7 IC8vIHNpemUKICAgICAgfSBlbHNlIGlmKGEgPT0gNSl7CiAgICAgICAgcHV0MzIoMSk7IC8vIGxp bmsgc3VwcG9ydAogICAgICB9IGVsc2UgaWYoYSA9PSA2KXsKICAgICAgICBwdXQzMigxKTsgLy8g c3ltbGluayBzdXBwb3J0CiAgICAgIH0gZWxzZSBpZihhID09IDgpewogICAgICAgIHB1dDY0KDEp OyAvLyBmc2lkIG1ham9yCiAgICAgICAgcHV0NjQoMSk7IC8vIGZzaWQgbWlub3IKICAgICAgfSBl bHNlIGlmKGEgPT0gMTApewogICAgICAgIHB1dDMyKDEpOyAvLyBsZWFzZSB0aW1lCiAgICAgIH0g ZWxzZSBpZihhID09IDExKXsKICAgICAgICBwdXQzMigwKTsgLy8gcmRhdHRyX2Vycm9yCiAgICAg IH0gZWxzZSBpZihhID09IDEyKXsKICAgICAgICAvLyBBQ0wKICAgICAgICBpbnQgbiA9IDI7CiAg ICAgICAgcHV0MzIobik7CiAgICAgICAgZm9yKGludCBpID0gMDsgaSA8IG47IGkrKyl7CiAgICAg ICAgICBwdXQzMigwKTsgLy8gdHlwZQogICAgICAgICAgcHV0MzIoMCk7IC8vIGZsYWcKICAgICAg ICAgIHB1dDMyKDApOyAvLyBtYXNrCiAgICAgICAgICBjaGFyIHdob1szMl07CiAgICAgICAgICBt ZW1zZXQod2hvLCAwLCBzaXplb2Yod2hvKSk7CiAgICAgICAgICAvL3N0cmNweSh3aG8sICIxIik7 CiAgICAgICAgICAvL3N0cmNweSh3aG8sICJPV05FUkAiKTsKICAgICAgICAgIC8vc3RyY3B5KHdo bywgIkdST1VQQCIpOwogICAgICAgICAgc3RyY3B5KHdobywgImJpbkB4LmNvbSIpOwogICAgICAg ICAgcHV0X29wYXF1ZShzdHJsZW4od2hvKSwgd2hvKTsKICAgICAgICB9CiAgICAgIH0gZWxzZSBp ZihhID09IDEzKXsKICAgICAgICBwdXQzMigweGYpOyAvLyBhY2xzdXBwb3J0CiAgICAgIH0gZWxz ZSBpZihhID09IDE5KXsKICAgICAgICAvLyBmaWxlaGFuZGxlCiAgICAgICAgaW50IHhmaCA9IGZo OwogICAgICAgIHB1dF9vcGFxdWUoNCwgKGNoYXIqKSZ4ZmgpOyAvLyBmaAogICAgICB9IGVsc2Ug aWYoYSA9PSAyMCl7CiAgICAgICAgcHV0NjQoZmgpOyAvLyBmaWxlaWQKICAgICAgfSBlbHNlIGlm KGEgPT0gMjQpewogICAgICAgIC8vIGZzX2xvY2F0aW9ucwogICAgICAgIHB1dDMyKDEpOwogICAg ICAgIHB1dF9vcGFxdWUoMTAsICJhYmNkZTEyMzQ1Iik7IC8vIHBhdGhuYW1lNAogICAgICAgIHB1 dDMyKDEpOyAvLyBsb2NhdGlvbnM8PgogICAgICAgIHB1dF9vcGFxdWUoMTAsICJhYmNkZTEyMzQ1 Iik7IC8vIHNlcnZlcgogICAgICAgIHB1dDMyKDEpOwogICAgICAgIHB1dF9vcGFxdWUoMTAsICJh YmNkZTEyMzQ1Iik7IC8vIHJvb3RwYXRoCiAgICAgIH0gZWxzZSBpZihhID09IDI3KXsKICAgICAg ICBwdXQ2NCgweGZmZmZmZmZmZmZmZik7IC8vIG1heCBmaWxlIHNpemUKICAgICAgfSBlbHNlIGlm KGEgPT0gMjgpewogICAgICAgIHB1dDMyKDB4ZmZmZik7IC8vIG1heCBsaW5rCiAgICAgIH0gZWxz ZSBpZihhID09IDI5KXsKICAgICAgICBwdXQzMigyNTYpOyAvLyBtYXggbmFtZQogICAgICB9IGVs c2UgaWYoYSA9PSAzMCl7CiAgICAgICAgcHV0NjQoMTAqNDA5Nik7IC8vIG1heCByZWFkCiAgICAg IH0gZWxzZSBpZihhID09IDMxKXsKICAgICAgICBwdXQ2NCgxMCo0MDk2KTsgLy8gbWF4IHdyaXRl CiAgICAgIH0gZWxzZSBpZihhID09IDMzKXsKICAgICAgICBwdXQzMigwNzc3KTsgLy8gbW9kZQog ICAgICB9IGVsc2UgaWYoYSA9PSAzNSl7CiAgICAgICAgcHV0MzIoMyk7IC8vIG51bWxpbmtzCiAg ICAgIH0gZWxzZSBpZihhID09IDM2KXsKICAgICAgICBwdXRfb3BhcXVlKDYsICJvdGhlciIpOyAv LyBvd25lcgogICAgICB9IGVsc2UgaWYoYSA9PSAzNyl7CiAgICAgICAgcHV0X29wYXF1ZSg2LCAi b3RoZXIiKTsgLy8gb3duZXJfZ3JvdXAKICAgICAgfSBlbHNlIGlmKGEgPT0gNDEpewogICAgICAg IHB1dDMyKDEpOyAvLyByYXdkZXYgbWFqb3IKICAgICAgICBwdXQzMigxKTsgLy8gcmF3ZGV2IG1p bm9yCiAgICAgIH0gZWxzZSBpZihhID09IDQ1KXsKICAgICAgICBwdXQ2NCg0MDk2KjEwKTsgLy8g c3BhY2UgdXNlZAogICAgICB9IGVsc2UgaWYoYSA9PSA0Nyl7CiAgICAgICAgcHV0NjQoMCk7IC8v IHRpbWUgYWNjZXNzIHNlY29uZHMKICAgICAgICBwdXQzMigwKTsgLy8gbnNlY29uZHMKICAgICAg fSBlbHNlIGlmKGEgPT0gNTEpewogICAgICAgIHB1dDY0KDApOyAvLyB0aW1lIGRlbHRhIHNlY29u ZHMKICAgICAgICBwdXQzMigwKTsgLy8gbnNlY29uZHMKICAgICAgfSBlbHNlIGlmKGEgPT0gNTIp ewogICAgICAgIHB1dDY0KDApOyAvLyB0aW1lIG1ldGFkYXRhIHNlY29uZHMKICAgICAgICBwdXQz MigwKTsgLy8gbnNlY29uZHMKICAgICAgfSBlbHNlIGlmKGEgPT0gNTMpewogICAgICAgIHB1dDY0 KDApOyAvLyB0aW1lIG1vZGlmeSBzZWNvbmRzCiAgICAgICAgcHV0MzIoMCk7IC8vIG5zZWNvbmRz CiAgICAgIH0gZWxzZSBpZihhID09IDU1KXsKICAgICAgICBwdXQ2NCgwKTsgLy8gbW91bnRlZF9v bl9maWxlaWQgPz8/CiAgICAgIH0gZWxzZSBpZihhID09IDYyKXsKICAgICAgICAvLyBmc19sYXlv dXRfdHlwZXMKICAgICAgICBwdXQzMigxKTsKICAgICAgICBwdXQzMigxKTsgLy8gTEFZT1VUNF9O RlNWNF8xX0ZJTEVTCiAgICAgIH0gZWxzZSBpZihhID09IDc1KXsKICAgICAgICAvLyBGQVRUUjRf U1VQUEFUVFJfRVhDTENSRUFUCiAgICAgICAgcHV0MzIoMik7IC8vIGJpdG1hcCBsZW5ndGgKICAg ICAgICBwdXQzMigweGZmZmZmZmZmKTsKICAgICAgICBwdXQzMigweGZmZmZmZmZmKTsKICAgICAg fSBlbHNlIHsKICAgICAgICAvLyB1bmtub3duIGF0dHIsIGRlbGV0ZSBmcm9tIGJpdG1hcC4KICAg ICAgICB3b3Jkc1thLzMyXSAmPSB+KDEgPDwgKGEgJSAzMikpOwogICAgICAgICooaW50Kikob2J1 ZiArIHdvcmQwaSArIDQqKGEvMzIpKSA9IGh0b25sKHdvcmRzW2EvMzJdKTsKICAgICAgfQogICAg fQogIH0KICBmb3IoaW50IGkgPSAwOyBpIDwgMTY7IGkrKykKICAgIHB1dDMyKDB4ZmZmZmZmZmYp OwogICooaW50Kikob2J1ZitsZW5pKSA9IGh0b25sKG9pIC0gbGVuaSAtIDQpOwp9Cgp2b2lkCnB1 dF9mYXR0cjRfaW5uZXIoaW50IHdvcmRzW10pCnsKICBpbnQgYml0d29yZHMgPSAzOwogIHB1dDMy KGJpdHdvcmRzKTsKICBpbnQgd29yZDBpID0gb2k7CiAgZm9yKGludCBpID0gMDsgaSA8IGJpdHdv cmRzOyBpKyspCiAgICBwdXQzMih3b3Jkc1tpXSk7CiAgaW50IGxlbmkgPSBvaTsKICBwdXQzMigw KTsgLy8gcGxhY2Vob2xkZXIgZm9yIHRvdGFsIGxlbmd0aCBvZiBhdHRycwogIGZvcihpbnQgYSA9 IDA7IGEgPCBiaXR3b3JkcyozMjsgYSsrKXsKICAgIGlmKHdvcmRzW2EvMzJdICYgKDEgPDwgKGEg JSAzMikpKXsKICAgICAgaWYoYSA9PSAwKXsKICAgICAgICBpbnQgbiA9IDMgXiAoc3lteCgpICYg MHhmKTsKICAgICAgICBwdXQzMihuKTsgLy8gIyBiaXRtYXAgd29yZHMgb2Ygc3VwcG9ydGVkIGF0 dHJzCiAgICAgICAgZm9yKGludCBpID0gMDsgaSA8IG47IGkrKyl7CiAgICAgICAgICBwdXQzMigw eGZmZmZmZmZmIF4gc3lteCgpKTsKICAgICAgICB9CiAgICAgIH0gZWxzZSBpZihhID09IDEpewog ICAgICAgIHB1dDMyKDEgXiBzeW14KCkpOyAvLyBORjRESVI9MiBvciBORjRSRUc9MQogICAgICB9 IGVsc2UgaWYoYSA9PSAyKXsKICAgICAgICBwdXQzMihzeW14KCkpOyAvLyBmaF9leHBpcmVfdHlw ZQogICAgICB9IGVsc2UgaWYoYSA9PSAzKXsKICAgICAgICBwdXQ2NChzeW14KCkpOyAvLyBjaGFu Z2UKICAgICAgfSBlbHNlIGlmKGEgPT0gNCl7CiAgICAgICAgcHV0NjQoMTAzIF4gc3lteCgpKTsg Ly8gc2l6ZQogICAgICB9IGVsc2UgaWYoYSA9PSA1KXsKICAgICAgICBwdXQzMihzeW14KCkpOyAv LyBsaW5rIHN1cHBvcnQKICAgICAgfSBlbHNlIGlmKGEgPT0gNil7CiAgICAgICAgcHV0MzIoc3lt eCgpKTsgLy8gc3ltbGluayBzdXBwb3J0CiAgICAgIH0gZWxzZSBpZihhID09IDgpewogICAgICAg IHB1dDY0KHN5bXgoKSk7IC8vIGZzaWQgbWFqb3IKICAgICAgICBwdXQ2NChzeW14KCkpOyAvLyBm c2lkIG1pbm9yCiAgICAgIH0gZWxzZSBpZihhID09IDEwKXsKICAgICAgICBwdXQzMihzeW14KCkp OyAvLyBsZWFzZSB0aW1lCiAgICAgIH0gZWxzZSBpZihhID09IDExKXsKICAgICAgICBwdXQzMihz eW14KCkpOyAvLyByZGF0dHJfZXJyb3IKICAgICAgfSBlbHNlIGlmKGEgPT0gMTIpewogICAgICAg IC8vIEFDTAogICAgICAgIGludCBuID0gMSBeIHN5bXgoKTsKICAgICAgICBwdXQzMihuKTsKICAg ICAgICBmb3IoaW50IGkgPSAwOyBpIDwgbiAmJiBpIDwgMjsgaSsrKXsKICAgICAgICAgIHB1dDMy KHN5bXgoKSk7IC8vIHR5cGUKICAgICAgICAgIHB1dDMyKHN5bXgoKSk7IC8vIGZsYWcKICAgICAg ICAgIHB1dDMyKHN5bXgoKSk7IC8vIG1hc2sKICAgICAgICAgIGNoYXIgd2hvWzMyXTsKICAgICAg ICAgIG1lbXNldCh3aG8sIDAsIHNpemVvZih3aG8pKTsKICAgICAgICAgIC8vIHN0cmNweSh3aG8s ICI2NTUzNCIpOwogICAgICAgICAgLy9zdHJjcHkod2hvLCAiT1dORVJAIik7CiAgICAgICAgICBz dHJjcHkod2hvLCAiYmluQHguY29tIik7CiAgICAgICAgICAqKGxvbmcgbG9uZyopd2hvIF49IHN5 bXgoKTsKICAgICAgICAgIHB1dF9vcGFxdWUoc3RybGVuKHdobyksIHdobyk7CiAgICAgICAgfQog ICAgICB9IGVsc2UgaWYoYSA9PSAxMyl7CiAgICAgICAgcHV0MzIoMHhmIF4gc3lteCgpKTsgLy8g YWNsc3VwcG9ydAogICAgICB9IGVsc2UgaWYoYSA9PSAxOSl7CiAgICAgICAgLy8gZmlsZWhhbmRs ZQogICAgICAgIGludCBuID0gc3lteCgpICYgMHhmZjsKICAgICAgICBwdXRfb3BhcXVlX3JlcGVh dChuLCAneCcpOwogICAgICB9IGVsc2UgaWYoYSA9PSAyMCl7CiAgICAgICAgcHV0NjQoc3lteCgp ICYgMHgzKTsgLy8gZmlsZWlkCiAgICAgIH0gZWxzZSBpZihhID09IDI0KXsKICAgICAgICAvLyBm c19sb2NhdGlvbnMKICAgICAgICBwdXRfb3BhcXVlKDEwLCAiYWJjZGUxMjM0NSIpOyAvLyBwYXRo bmFtZTQKICAgICAgICBpbnQgbiA9IHN5bXgoKSAmIDB4MWY7CiAgICAgICAgcHV0MzIobik7IC8v IGxvY2F0aW9uczw+CiAgICAgICAgZm9yKGludCBpID0gMDsgaSA8IG47IGkrKyl7CiAgICAgICAg ICBwdXRfb3BhcXVlX3JlcGVhdChzeW14KCkgJiAweDFmZiwgJ3gnKTsgLy8gc2VydmVyCiAgICAg ICAgICBwdXRfb3BhcXVlX3JlcGVhdChzeW14KCkgJiAweDFmZiwgJ3knKTsgLy8gcm9vdHBhdGgK ICAgICAgICB9CiAgICAgIH0gZWxzZSBpZihhID09IDI3KXsKICAgICAgICBwdXQ2NChzeW14KCkp OyAvLyBtYXggZmlsZSBzaXplCiAgICAgIH0gZWxzZSBpZihhID09IDI4KXsKICAgICAgICBwdXQz MihzeW14KCkpOyAvLyBtYXggbGluawogICAgICB9IGVsc2UgaWYoYSA9PSAyOSl7CiAgICAgICAg cHV0MzIoc3lteCgpKTsgLy8gbWF4IG5hbWUKICAgICAgfSBlbHNlIGlmKGEgPT0gMzApewogICAg ICAgIHB1dDY0KHN5bXgoKSk7IC8vIG1heCByZWFkCiAgICAgIH0gZWxzZSBpZihhID09IDMxKXsK ICAgICAgICBwdXQ2NChzeW14KCkpOyAvLyBtYXggd3JpdGUKICAgICAgfSBlbHNlIGlmKGEgPT0g MzMpewogICAgICAgIHB1dDMyKHN5bXgoKSk7IC8vIG1vZGUKICAgICAgfSBlbHNlIGlmKGEgPT0g MzUpewogICAgICAgIHB1dDMyKHN5bXgoKSk7IC8vIG51bWxpbmtzCiAgICAgIH0gZWxzZSBpZihh ID09IDM2KXsKICAgICAgICBwdXRfb3BhcXVlX3JlcGVhdChzeW14KCkgJiAweDFmZiwgJ3onKTsg Ly8gb3duZXIKICAgICAgfSBlbHNlIGlmKGEgPT0gMzcpewogICAgICAgIHB1dF9vcGFxdWVfcmVw ZWF0KHN5bXgoKSAmIDB4MWZmLCAneicpOyAvLyBvd25lcl9ncm91cAogICAgICB9IGVsc2UgaWYo YSA9PSA0MSl7CiAgICAgICAgcHV0MzIoc3lteCgpKTsgLy8gcmF3ZGV2IG1ham9yCiAgICAgICAg cHV0MzIoc3lteCgpKTsgLy8gcmF3ZGV2IG1pbm9yCiAgICAgIH0gZWxzZSBpZihhID09IDQ1KXsK ICAgICAgICBwdXQ2NChzeW14KCkpOyAvLyBzcGFjZSB1c2VkCiAgICAgIH0gZWxzZSBpZihhID09 IDQ3KXsKICAgICAgICBwdXQ2NCgwKTsgLy8gdGltZSBhY2Nlc3Mgc2Vjb25kcwogICAgICAgIHB1 dDMyKDApOyAvLyBuc2Vjb25kcwogICAgICB9IGVsc2UgaWYoYSA9PSA1MSl7CiAgICAgICAgcHV0 NjQoc3lteCgpKTsgLy8gdGltZSBkZWx0YSBzZWNvbmRzCiAgICAgICAgcHV0MzIoc3lteCgpKTsg Ly8gbnNlY29uZHMKICAgICAgfSBlbHNlIGlmKGEgPT0gNTIpewogICAgICAgIHB1dDY0KDApOyAv LyB0aW1lIG1ldGFkYXRhIHNlY29uZHMKICAgICAgICBwdXQzMigwKTsgLy8gbnNlY29uZHMKICAg ICAgfSBlbHNlIGlmKGEgPT0gNTMpewogICAgICAgIHB1dDY0KDApOyAvLyB0aW1lIG1vZGlmeSBz ZWNvbmRzCiAgICAgICAgcHV0MzIoMCk7IC8vIG5zZWNvbmRzCiAgICAgIH0gZWxzZSBpZihhID09 IDU1KXsKICAgICAgICBwdXQ2NChzeW14KCkpOyAvLyBtb3VudGVkX29uX2ZpbGVpZCA/Pz8KICAg ICAgfSBlbHNlIGlmKGEgPT0gNjIpewogICAgICAgIC8vIGZzX2xheW91dF90eXBlcwogICAgICAg IHB1dDMyKHN5bXgoKSk7CiAgICAgICAgcHV0MzIoc3lteCgpKTsgLy8gTEFZT1VUNF9ORlNWNF8x X0ZJTEVTCiAgICAgIH0gZWxzZSBpZihhID09IDc1KXsKICAgICAgICAvLyBGQVRUUjRfU1VQUEFU VFJfRVhDTENSRUFUCiAgICAgICAgaW50IG4gPSBzeW14KCkgJiAweGY7CiAgICAgICAgcHV0MzIo bik7IC8vICMgYml0bWFwIHdvcmRzIG9mIHN1cHBvcnRlZCBhdHRycwogICAgICAgIGZvcihpbnQg aSA9IDA7IGkgPCBuOyBpKyspewogICAgICAgICAgcHV0MzIoc3lteCgpKTsKICAgICAgICB9CiAg ICAgIH0gZWxzZSB7CiAgICAgICAgLy8gdW5rbm93biBhdHRyLCBkZWxldGUgZnJvbSBiaXRtYXAu CiAgICAgICAgd29yZHNbYS8zMl0gJj0gfigxIDw8IChhICUgMzIpKTsKICAgICAgICAqKGludCop KG9idWYgKyB3b3JkMGkgKyA0KihhLzMyKSkgPSBodG9ubCh3b3Jkc1thLzMyXSk7CiAgICAgIH0K ICAgIH0KICB9CiAgZm9yKGludCBpID0gMDsgaSA8IDE2OyBpKyspCiAgICBwdXQzMigweGZmZmZm ZmZmKTsKICAqKGludCopKG9idWYrbGVuaSkgPSBodG9ubChvaSAtIGxlbmkgLSA0KTsKfQoKLy8K Ly8gZ2VuZXJhdGUgYSBzeW1ib2xpYyBmYXR0cjQsIHdpdGggbXVsdGlwbGUgZWxlbWVudHMuCi8v IHRyaWVzIHRvIGF2b2lkIGdlbmVyYXRpbmcgaWxsZWdhbCBYRFIuCi8vCnZvaWQKcHV0X2ZhdHRy NF9tYW55KCkKewogIGludCBiaXR3b3JkcyA9IDM7CiAgaW50IHdvcmRzWzRdOwogIG1lbXNldCh3 b3JkcywgMCwgc2l6ZW9mKHdvcmRzKSk7CiAgaW50IHNldG1lW10gPSB7IC0xIH07CiAgZm9yKGlu dCBpID0gMDsgc2V0bWVbaV0gPj0gMDsgaSsrKXsKICAgIGludCBhID0gc2V0bWVbaV07CiAgICB3 b3Jkc1thLzMyXSB8PSAxIDw8IChhICUgMzIpOwogIH0KICBmb3IoaW50IGkgPSAwOyBpIDwgYml0 d29yZHM7IGkrKyl7CiAgICB3b3Jkc1tpXSBePSBzeW14KCk7CiAgfQogIHB1dF9mYXR0cjRfaW5u ZXIod29yZHMpOwp9CgovLwovLyBhIHN5bWJvbGljIGZhdHRyNCB3aXRoIGp1c3Qgb25lIGl0ZW0g c2V0LgovLwp2b2lkCnB1dF9mYXR0cjRfb25lKCkKewogIGludCBiaXR3b3JkcyA9IDM7CiAgaW50 IHdvcmRzWzRdOwogIG1lbXNldCh3b3JkcywgMCwgc2l6ZW9mKHdvcmRzKSk7CiAgdW5zaWduZWQg aW50IGJpdCA9IHN5bXgoKTsKICBpZihiaXQgPj0gMyozMikKICAgIGJpdCA9IDQ7CiAgd29yZHNb Yml0LzMyXSB8PSAxIDw8IChiaXQgJSAzMik7CiAgcHV0X2ZhdHRyNF9pbm5lcih3b3Jkcyk7Cn0K CnZvaWQKcHV0X2dldGZoKCkKewogIHB1dDMyKDEwKTsKfQoKdm9pZApwdXRfc2V0YXR0cihpbnQg ZG9zeW0pCnsKICBwdXQzMigzNCk7CiAgcHV0MzIoc2lkLnNlcWlkKTsgLy8gb3Blbl9zdGF0ZWlk LCBmcm9tIHByZXZpb3VzIE9QRU4KICBmb3IoaW50IGkgPSAwOyBpIDwgMTI7IGkrKykKICAgIG9i dWZbb2krK10gPSBzaWQub3RoZXJbaV07CiNpZiAwCiAgaWYoZG9zeW0gJiYgc3ltc3RhcnQgPT0g LTEpCiAgICBzeW1zdGFydCA9IG9pICsgNDsKICBpbnQgd29yZHNbM107CiAgd29yZHNbMF0gPSB3 b3Jkc1sxXSA9IHdvcmRzWzJdID0gMDsKICB3b3Jkc1swXSB8PSAoMSA8PCAxMik7IC8vIGFjbAog IHB1dF9mYXR0cjQod29yZHMsIDEpOwojZWxzZQogIHB1dF9mYXR0cjRfb25lKCk7CiNlbmRpZgp9 Cgp2b2lkCnB1dF9zYXZlZmgoKQp7CiAgcHV0MzIoMzIpOwp9CgovLyBzaGFyaW5nIHNob3VsZCBu b3QgYmUgemVyby4Kdm9pZApzZW5kX29wZW5fZXhpc3RpbmcoY29uc3QgY2hhciAqZmlsZW5hbWUs IGludCBzaGFyaW5nKQp7CiAgcHV0X2NvbXBvdW5kKDUpOwogIHB1dF9zZXF1ZW5jZSgpOwogIHB1 dF9yb290ZmgoKTsKICBwdXRfbG9va3VwKCJ0bXAiKTsKICBwdXRfb3Blbl9leGlzdGluZyhmaWxl bmFtZSwgc2hhcmluZyk7CiAgcHV0X2dldGZoKCk7CiAgc2VuZF9zZW5kKCk7CiAgcGFyc2VfcmVw bHkoMSk7Cn0KCnZvaWQKc2VuZF9vcGVuX2NyZWF0ZShjaGFyICpuYW1lLCBpbnQgZG9zeW0pCnsK ICBwdXRfY29tcG91bmQoNSk7CiAgcHV0X3NlcXVlbmNlKCk7CiAgcHV0X3Jvb3RmaCgpOwogIHB1 dF9sb29rdXAoInRtcCIpOwogIHB1dF9vcGVuX2NyZWF0ZShuYW1lLCBkb3N5bSk7CiAgcHV0X2dl dGZoKCk7CiAgc2VuZF9zZW5kKCk7CiAgcGFyc2VfcmVwbHkoMSk7Cn0KCnZvaWQKcHV0X2NyZWF0 ZV94eHgoKQp7CiAgcHV0MzIoNik7CiAgaW50IHR5cGUgPSA1OyAvLyBORlM0TE5LCiAgdHlwZSBe PSBzeW14KCk7CiAgcHV0MzIodHlwZSk7CiAgaWYodHlwZSA9PSA1KXsKICAgIHB1dF9vcGFxdWUo MTYsICJhYmNkZWZnaDEyMzQ1Njc4Iik7CiAgfSBlbHNlIGlmKHR5cGUgPT0gNCB8fCB0eXBlID09 IDMpeyAvLyBDSFIsIEJMSwogICAgcHV0MzIoc3lteCgpKTsgLy8gbWFqb3IKICAgIHB1dDMyKHN5 bXgoKSk7IC8vIG1pbm9yCiAgfQogIHVubGluaygiL3RtcC9uZXdsaW5rIik7CiAgcHV0X29wYXF1 ZSg3LCAibmV3bGluayIpOwogIHB1dF9mYXR0cjRfb25lKCk7CiAgaWYoMCl7CiAgICBwdXQzMigz KTsgLy8gZmF0dHI0IGJpdG1hcCBzaXplCiAgICBwdXQzMigwKTsKICAgIHB1dDMyKDApOwogICAg cHV0MzIoMCk7CiAgICBwdXQzMigwKTsgLy8gb3BhcXVlIGZhdHRyNCBzaXplCiAgfQp9Cgp2b2lk CnNlbmRfY3JlYXRlKCkKewogIHB1dF9jb21wb3VuZCg0KTsKICBwdXRfc2VxdWVuY2UoKTsKICBw dXRfcm9vdGZoKCk7CiAgcHV0X2xvb2t1cCgidG1wIik7CiAgcHV0X2NyZWF0ZV94eHgoKTsKICBz ZW5kX3NlbmQoKTsKICBwYXJzZV9yZXBseSgxKTsKfQoKdm9pZApwdXRfbWtkaXIoY2hhciAqbmFt ZSwgaW50IGRvc3ltKQp7CiAgcHV0MzIoNik7IC8vIENSRUFURQogIGlmKGRvc3ltICYmIHN5bXN0 YXJ0ID09IC0xKQogICAgc3ltc3RhcnQgPSBvaTsKICBwdXQzMigyKTsgLy8gY3JlYXRldHlwZTQg TkZTNERJUgogIHB1dF9vcGFxdWUoc3RybGVuKG5hbWUpLCBuYW1lKTsgLy8gY29tcG9uZW50NAog IHB1dDMyKDMpOyAvLyBmYXR0cjQgYml0bWFwIHNpemUKICBwdXQzMigwKTsKICBwdXQzMigwKTsK ICBwdXQzMigwKTsKICBwdXQzMigwKTsgLy8gYXR0cmxpc3Q0LCB0b3RhbCBsZW5ndGggb2YgZmF0 dHJzCn0KCnZvaWQKc2VuZF9ta2RpcihjaGFyICpuYW1lLCBpbnQgZG9zeW0pCnsKICBwdXRfY29t cG91bmQoNSk7CiAgcHV0X3NlcXVlbmNlKCk7CiAgcHV0X3Jvb3RmaCgpOwogIHB1dF9sb29rdXAo InRtcCIpOwogIHB1dF9ta2RpcihuYW1lLCBkb3N5bSk7CiAgcHV0X2dldGZoKCk7CiAgc2VuZF9z ZW5kKCk7CiAgcGFyc2VfcmVwbHkoMSk7Cn0KCnZvaWQKcHV0X3B1dGZoKHN0cnVjdCBmaCBmaHgs IGludCBkb3N5bSkKewogIHB1dDMyKDIyKTsKCiAgY2hhciB0bXBbNTEyXTsKICBtZW1jcHkodG1w LCBmaHguZmgsIGZoeC5sZW4pOwogIGlmKGRvc3ltKXsKICAgIGZvcihpbnQgaSA9IDA7IGkgPCBm aHgubGVuOyBpICs9IDgpCiAgICAgICoobG9uZyopKHRtcCtpKSBePSBzeW14KCk7CiAgfQogIAog IHB1dF9vcGFxdWUoZmh4LmxlbiwgdG1wKTsKfQoKdm9pZApzZW5kX3NldGF0dHIoaW50IGRvc3lt KQp7CiAgcHV0X2NvbXBvdW5kKDMpOwogIHB1dF9zZXF1ZW5jZSgpOwogIHB1dF9wdXRmaChmaCwg MCk7CiAgcHV0X3NldGF0dHIoZG9zeW0pOwogIHNlbmRfc2VuZCgpOwogIHBhcnNlX3JlcGx5KDEp Owp9Cgp2b2lkCnB1dF9qdW5rX3NldGF0dHIoKQp7CiAgcHV0MzIoMzQpOwogIHB1dDMyKHNpZC5z ZXFpZCk7IC8vIG9wZW5fc3RhdGVpZCwgZnJvbSBwcmV2aW91cyBPUEVOCiAgZm9yKGludCBpID0g MDsgaSA8IDEyOyBpKyspCiAgICBvYnVmW29pKytdID0gc2lkLm90aGVyW2ldOwogIHB1dDMyKDMp OwogIHB1dDMyKHN5bXgoKSk7CiAgcHV0MzIoc3lteCgpKTsKICBwdXQzMihzeW14KCkpOwogIHB1 dDMyKHN5bXgoKSAmIDEyNyk7CiAgaWYoc3ltc3RhcnQgPT0gLTEpCiAgICBzeW1zdGFydCA9IG9p OwogIGZvcihpbnQgaSA9IDA7IGkgPCAxMjgvNDsgaSsrKQogICAgcHV0MzIoMHhmZmZmZmZmZik7 Cn0KCnZvaWQKc2VuZF9qdW5rX3NldGF0dHIoKQp7CiAgcHV0X2NvbXBvdW5kKDMpOwogIHB1dF9z ZXF1ZW5jZSgpOwogIHB1dF9wdXRmaChmaCwgMCk7CiAgcHV0X2p1bmtfc2V0YXR0cigpOwogIHNl bmRfc2VuZCgpOwogIHBhcnNlX3JlcGx5KDEpOwp9Cgp2b2lkCnB1dF9zZXRfYWNsKGludCBkb3N5 bSkKewogIHB1dDMyKDM0KTsKICBwdXQzMihzaWQuc2VxaWQpOyAvLyBvcGVuX3N0YXRlaWQsIGZy b20gcHJldmlvdXMgT1BFTgogIGZvcihpbnQgaSA9IDA7IGkgPCAxMjsgaSsrKQogICAgb2J1Zltv aSsrXSA9IHNpZC5vdGhlcltpXTsKICBpbnQgd29yZHNbM107CiAgd29yZHNbMF0gPSB3b3Jkc1sx XSA9IHdvcmRzWzJdID0gMDsKICB3b3Jkc1swXSB8PSAoMSA8PCAxMik7IC8vIGFjbAogIGlmKGRv c3ltICYmIHN5bXN0YXJ0ID09IC0xKQogICAgc3ltc3RhcnQgPSBvaSArIDQqNDsgLy8gc2tpcCBv dmVyIEZBVFRSNCBiaXRtYXAKICBwdXRfZmF0dHI0KHdvcmRzLCAxKTsKfQoKdm9pZApwdXRfZ2V0 YXR0cigpCnsKICBwdXQzMig5KTsKICBwdXQzMigzKTsKICBwdXQzMigxIDw8IDEyKTsKICBwdXQz MigwKTsKICBwdXQzMigwKTsKfQoKdm9pZApzZW5kX3NldF9hY2woY2hhciAqbmFtZSwgaW50IGRv c3ltKQp7CiAgcHV0X2NvbXBvdW5kKDYpOwogIHB1dF9zZXF1ZW5jZSgpOwogIHB1dF9yb290Zmgo KTsKICBwdXRfbG9va3VwKCJ0bXAiKTsKICBwdXRfbG9va3VwKG5hbWUpOwogIHB1dF9zZXRfYWNs KGRvc3ltKTsKICBwdXRfZ2V0YXR0cigpOwogIHNlbmRfc2VuZCgpOwogIHBhcnNlX3JlcGx5KDEp Owp9Cgp2b2lkCnNlbmRfcHV0Zmgoc3RydWN0IGZoIGZoeCkKewogIHB1dF9jb21wb3VuZCgyKTsK ICBwdXRfc2VxdWVuY2UoKTsKICBwdXRfcHV0ZmgoZmh4LCAwKTsKICBzZW5kX3NlbmQoKTsKICBw YXJzZV9yZXBseSgxKTsKfQoKdm9pZApzZW5kX2xvb2t1cCgpCnsKICBwdXRfY29tcG91bmQoNCk7 CiAgcHV0X3NlcXVlbmNlKCk7CiAgcHV0X3Jvb3RmaCgpOwogIHB1dF9sb29rdXAoInRtcCIpOwog IHB1dF9nZXRmaCgpOwogIHNlbmRfc2VuZCgpOwogIHBhcnNlX3JlcGx5KDEpOwp9Cgp2b2lkCnNl bmRfcmVhZGRpcihpbnQgZG9zeW0pCnsKICBwdXRfY29tcG91bmQoNCk7CiAgcHV0X3NlcXVlbmNl KCk7CiAgcHV0X3Jvb3RmaCgpOwogIHB1dF9sb29rdXAoInRtcCIpOwogIHB1dF9yZWFkZGlyKGRv c3ltKTsKICBzZW5kX3NlbmQoKTsKICBwYXJzZV9yZXBseSgxKTsKfQoKdm9pZApwdXRfcm9vdF9s aXN0eGF0dHJzKCkKewogIHB1dDMyKDc0KTsKICBwdXQ2NCgwKTsgLy8gY29va2llCiAgcHV0MzIo MTYzODQpOyAvLyBtYXhjb3VudAp9Cgp2b2lkCnNlbmRfcm9vdF9saXN0eGF0dHJzKCkKewogIHB1 dF9jb21wb3VuZCg0KTsKICBwdXRfc2VxdWVuY2UoKTsKICBwdXRfcm9vdGZoKCk7CiAgcHV0X2xv b2t1cCgidG1wIik7CiAgcHV0X3Jvb3RfbGlzdHhhdHRycygpOwogIHNlbmRfc2VuZCgpOwogIHBh cnNlX3JlcGx5KDEpOwp9Cgp2b2lkCnB1dF91bmxvY2soaW50IGRvc3ltKQp7CiAgcHV0MzIoMTQp OwogIGlmKGRvc3ltICYmIHN5bXN0YXJ0ID09IC0xKQogICAgc3ltc3RhcnQgPSBvaTsKICBwdXQz MigxKTsgLy8gUkVBRF9MVAogIHB1dDMyKDApOyAvLyBvcGVuX3NlcWlkCiAgcHV0MzIoc2lkLnNl cWlkKTsgLy8gb3Blbl9zdGF0ZWlkLCBmcm9tIHByZXZpb3VzIE9QRU4KICBmb3IoaW50IGkgPSAw OyBpIDwgMTI7IGkrKykKICAgIG9idWZbb2krK10gPSBzaWQub3RoZXJbaV07CiAgcHV0NjQoMCk7 IC8vIG9mZnNldAogIHB1dDY0KDEpOyAvLyBsZW5ndGgKfQoKdm9pZApzZW5kX3VubG9ja19sb2Nr ZmlsZShpbnQgZG9zeW0pCnsKICBwdXRfY29tcG91bmQoNSk7CiAgcHV0X3NlcXVlbmNlKCk7CiAg cHV0X3Jvb3RmaCgpOwogIHB1dF9sb29rdXAoInRtcCIpOwogIHB1dF9sb29rdXAoImxvY2tmaWxl Iik7CiAgcHV0X3VubG9jayhkb3N5bSk7CiAgc2VuZF9zZW5kKCk7CiAgcGFyc2VfcmVwbHkoMSk7 Cn0KCnZvaWQKcHV0X2xvY2soaW50IGRvc3ltKQp7CiAgcHV0MzIoMTIpOwogIGlmKGRvc3ltICYm IHN5bXN0YXJ0ID09IC0xKQogICAgc3ltc3RhcnQgPSBvaTsKICBwdXQzMigxKTsgLy8gUkVBRF9M VAogIHB1dDMyKDApOyAvLyByZWNsYWltCiAgcHV0NjQoMCk7IC8vIG9mZnNldAogIHB1dDY0KDIp OyAvLyBsZW5ndGgKICBwdXQzMigxKTsgLy8gbmV3X2xvY2tfb3duZXIKICBwdXQzMigwKTsgLy8g b3Blbl9zZXFpZAogIHB1dDMyKHNpZC5zZXFpZCk7IC8vIG9wZW5fc3RhdGVpZCwgZnJvbSBwcmV2 aW91cyBPUEVOCiAgZm9yKGludCBpID0gMDsgaSA8IDEyOyBpKyspCiAgICBvYnVmW29pKytdID0g c2lkLm90aGVyW2ldOwogIHB1dDMyKDApOyAvLyBsb2NrX3NlcWlkCiAgcHV0NjQoY2xpZW50aWQp OyAvLyBjbGllbnRpZAogIHB1dF9vcGFxdWUoMjIsICJMaW51eCBORlN2NC4yIHh5enp5Iik7IC8v IG93bmVyCn0KCnZvaWQKc2VuZF9sb2NrX2xvY2tmaWxlKGludCBkb3N5bSkKewogIHB1dF9jb21w b3VuZCg1KTsKICBwdXRfc2VxdWVuY2UoKTsKICBwdXRfcm9vdGZoKCk7CiAgcHV0X2xvb2t1cCgi dG1wIik7CiAgcHV0X2xvb2t1cCgibG9ja2ZpbGUiKTsKICBwdXRfbG9jayhkb3N5bSk7CiAgc2Vu ZF9zZW5kKCk7CiAgcGFyc2VfcmVwbHkoMSk7Cn0KCnZvaWQKc2VuZF9sb2NrKGludCBkb3N5bSkK ewogIHB1dF9jb21wb3VuZCgzKTsKICBwdXRfc2VxdWVuY2UoKTsKICBwdXRfcHV0ZmgoZmgsIDAp OwogIHB1dF9sb2NrKGRvc3ltKTsKICBzZW5kX3NlbmQoKTsKICBwYXJzZV9yZXBseSgxKTsKfQoK dm9pZApwdXRfZGlyX2RlbGVnYXRpb24oaW50IGRvc3ltKQp7CiAgcHV0MzIoNDYpOwogIGlmKGRv c3ltICYmIHN5bXN0YXJ0ID09IC0xKQogICAgc3ltc3RhcnQgPSBvaTsKICBwdXQzMigwKTsgLy8g c2lnbmFsX2RlbGVnX2F2YWlsCiAgcHV0MzIoMyk7IC8vIG5vdGlmaWNhdGlvbl90eXBlcyBiaXRt YXAgbGVuZ3RoCiAgcHV0MzIoMHhmZmZmZmZmZik7CiAgcHV0MzIoMHhmZmZmZmZmZik7CiAgcHV0 MzIoMHhmZmZmZmZmZik7CiAgcHV0NjQoMCk7IC8vIGNoaWxkX2F0dHJfZGVsYXkKICBwdXQzMigw KTsgLy8gY2hpbGRfYXR0cl9kZWxheQogIHB1dDY0KDApOyAvLyBkaXJfYXR0cl9kZWxheQogIHB1 dDMyKDApOyAvLyBkaXJfYXR0cl9kZWxheQogIHB1dDMyKDMpOyAvLyBjaGlsZF9hdHRyaWJ1dGVz IGJpdG1hcCBsZW5ndGgKICBwdXQzMigweGZmZmZmZmZmKTsKICBwdXQzMigweGZmZmZmZmZmKTsK ICBwdXQzMigweGZmZmZmZmZmKTsKICBwdXQzMigzKTsgLy8gZGlyX2F0dHJpYnV0ZXMgYml0bWFw IGxlbmd0aAogIHB1dDMyKDB4ZmZmZmZmZmYpOwogIHB1dDMyKDB4ZmZmZmZmZmYpOwogIHB1dDMy KDB4ZmZmZmZmZmYpOwp9Cgp2b2lkCnNlbmRfZGlyX2RlbGVnYXRpb24oaW50IGRvc3ltKQp7CiAg cHV0X2NvbXBvdW5kKDQpOwogIHB1dF9zZXF1ZW5jZSgpOwogIHB1dF9yb290ZmgoKTsKICBwdXRf bG9va3VwKCJ0bXAiKTsKICBwdXRfZGlyX2RlbGVnYXRpb24oZG9zeW0pOwogIHNlbmRfc2VuZCgp OwogIHBhcnNlX3JlcGx5KDEpOwp9Cgp2b2lkCnB1dF92ZXJpZnkoaW50IGRvc3ltKQp7CiAgcHV0 MzIoMzcpOwogIHB1dDMyKDMpOwogIGlmKGRvc3ltICYmIHN5bXN0YXJ0ID09IC0xKQogICAgc3lt c3RhcnQgPSBvaTsKICBwdXQzMigwKTsKICBwdXQzMigwKTsKICBwdXQzMigwKTsKICBwdXQzMigy NTYpOwogIGZvcihpbnQgaSA9IDA7IGkgPCAyNTYvNDsgaSsrKQogICAgcHV0MzIoMHhmZmZmZmZm Zik7Cn0KCnZvaWQKc2VuZF92ZXJpZnkoaW50IGRvc3ltKQp7CiAgcHV0X2NvbXBvdW5kKDMpOwog IHB1dF9zZXF1ZW5jZSgpOwogIHB1dF9wdXRmaChmaCwgMCk7CiAgcHV0X3ZlcmlmeShkb3N5bSk7 CiAgc2VuZF9zZW5kKCk7CiAgcGFyc2VfcmVwbHkoMSk7Cn0KCnZvaWQKcHV0X3NldHhhdHRyKGlu dCBkb3N5bSkKewogIHB1dDMyKDczKTsKICBpZihkb3N5bSA9PSAyKXsKICAgIHB1dDMyKDApOyAv LyBTRVRYQVRUUjRfRUlUSEVSCiAgICB1bnNpZ25lZCBpbnQga2xlbiA9IHN5bXgoKSAmIDB4ZmZm OwogICAgdW5zaWduZWQgaW50IHZsZW4gPSBzeW14KCkgJiAweGZmZjsKICAgIGZvcihpbnQgaSA9 IG9pOyBpKzggPD0gc2l6ZW9mKG9idWYpOyBpICs9IDgpCiAgICAgICoodW5zaWduZWQgbG9uZyBs b25nICopKG9idWYgKyBpKSA9IDB4NDQ0NDQ0NDQ0NDQ0NDQ0NGxsIF4gc3lteCgpOwogICAgaWYo a2xlbiA8IDEpIGtsZW4gPSAxOwogICAgcHV0MzIoa2xlbik7CiAgICBvaSArPSBrbGVuOwogICAg d2hpbGUoKG9pICUgNCkgIT0gMCkgb2krKzsKICAgIHB1dDMyKHZsZW4pOwogICAgb2kgKz0gdmxl bjsKICAgIHdoaWxlKChvaSAlIDQpICE9IDApIG9pKys7CiAgfSBlbHNlIGlmKGRvc3ltID09IDMp IHsKICAgIHB1dDMyKDApOyAvLyBTRVRYQVRUUjRfRUlUSEVSCiAgICBwdXQzMigyNCk7IC8vIGts ZW4KICAgIGZvcihpbnQgaSA9IDA7IGkgPCAzOyBpKyspewogICAgICAqKGxvbmcgbG9uZyAqKShv YnVmICsgb2kpID0gMHg0NDQ0NDQ0NDQ0NDQ0NDQ0bGwgXiBzeW14KCk7CiAgICAgIG9pICs9IDg7 CiAgICB9CiAgICBwdXQzMigyNCk7IC8vIHZsZW4KICAgIGZvcihpbnQgaSA9IDA7IGkgPCAzOyBp KyspewogICAgICAqKGxvbmcgbG9uZyAqKShvYnVmICsgb2kpID0gMHg0NDQ0NDQ0NDQ0NDQ0NDQ0 bGwgXiBzeW14KCk7CiAgICAgIG9pICs9IDg7CiAgICB9CiAgfSBlbHNlIHsKICAgIGlmKGRvc3lt ICYmIHN5bXN0YXJ0ID09IC0xKQogICAgICBzeW1zdGFydCA9IG9pOwogICAgcHV0MzIoMCk7IC8v IFNFVFhBVFRSNF9FSVRIRVIKICAgIHB1dF9vcGFxdWUoMjQsICIxMjM0NTY3OGFiY2RlZmdoMTIz NDU2NzgiKTsgLy8ga2V5CiAgICBwdXRfb3BhcXVlKDE2LCAiYWJjZGVmZ2gxMjM0NTY3OCIpOyAv LyB2YWx1ZQogIH0KfQoKdm9pZApzZW5kX3NldHhhdHRyKGludCBkb3N5bSkKewogIHB1dF9jb21w b3VuZCg0KTsKICBwdXRfc2VxdWVuY2UoKTsKICBwdXRfcHV0ZmgoZmgsIDApOwogIHB1dF9zZXR4 YXR0cihkb3N5bSk7CiAgc2VuZF9zZW5kKCk7CiAgcGFyc2VfcmVwbHkoMSk7Cn0KCnZvaWQKcHV0 X3JlbW92ZShjaGFyICpuYW1lKQp7CiAgcHV0MzIoMjgpOwogIHB1dF9vcGFxdWUoc3RybGVuKG5h bWUpLCBuYW1lKTsKfQoKdm9pZApzZW5kX3JlbW92ZShjaGFyICpuYW1lKQp7CiAgcHV0X2NvbXBv dW5kKDQpOwogIHB1dF9zZXF1ZW5jZSgpOwogIHB1dF9yb290ZmgoKTsKICBwdXRfbG9va3VwKCJ0 bXAiKTsKICBwdXRfcmVtb3ZlKG5hbWUpOwogIHNlbmRfc2VuZCgpOwogIHBhcnNlX3JlcGx5KDEp Owp9Cgp2b2lkCnB1dF9qdW5rKGludCBvcCwgaW50IHdvcmRzKQp7CiAgcHV0MzIob3ApOwogIGlm KHN5bXN0YXJ0ICE9IC0xKQogICAgc3ltc3RhcnQgPSBvaTsKICBmb3IoaW50IGkgPSAwOyBpIDwg d29yZHM7IGkrKykKICAgIHB1dDMyKDApOwp9Cgp2b2lkCnNlbmRfcm9vdF9qdW5rKGludCBvcCwg aW50IHdvcmRzKQp7CiAgcHV0X2NvbXBvdW5kKDQpOwogIHB1dF9zZXF1ZW5jZSgpOwogIHB1dF9y b290ZmgoKTsKICBwdXRfbG9va3VwKCJ0bXAiKTsKICBwdXRfanVuayhvcCwgd29yZHMpOwogIHNl bmRfc2VuZCgpOwogIHBhcnNlX3JlcGx5KDEpOwp9Cgp2b2lkCnB1dF9sYXlvdXRnZXQoaW50IGRv c3ltKQp7CiAgcHV0MzIoNTApOwogIGlmKGRvc3ltICYmIHN5bXN0YXJ0ID09IC0xKQogICAgc3lt c3RhcnQgPSBvaTsKICBwdXQzMigxKTsgLy8gc2lnbmFsX2xheW91dF9hdmFpbAogIHB1dDMyKDQp OyAvLyBsYXlvdXRfdHlwZSwgRkxFWEZJTEUKICBwdXQzMigyKTsgLy8gaW9tb2RlLCAxPVJFQUQs IDI9UlcsIDM9QU5ZCiAgcHV0NjQoMCk7IC8vIG9mZnNldAogIHB1dDY0KDgpOyAvLyBsZW5ndGgK ICBwdXQ2NCg4KTsgLy8gbWlubGVuZ3RoCiAgcHV0MzIoc2lkLnNlcWlkKTsgLy8gc3RhdGVpZCBz ZXEKICBmb3IoaW50IGkgPSAwOyBpIDwgMTI7IGkrKykKICAgIG9idWZbb2krK10gPSBzaWQub3Ro ZXJbaV07CiAgcHV0MzIoNDA5Nik7IC8vIG1heGNvdW50Cn0KCnZvaWQKc2VuZF9sYXlvdXRnZXRf eHh4KGludCBkb3N5bSkKewogIHN5cygiZWNobyAxMjM0NTY3ODkwMTIzNDU2ID4gL3RtcC9vdXQi KTsKICBzeXMoImNob3duIG5vYm9keSAvdG1wL291dCIpOwogIHB1dF9jb21wb3VuZCg1KTsKICBw dXRfc2VxdWVuY2UoKTsKICBwdXRfcm9vdGZoKCk7CiAgcHV0X2xvb2t1cCgidG1wIik7CiAgcHV0 X29wZW5fZXhpc3RpbmcoIm91dCIsIDMpOwogIHB1dF9sYXlvdXRnZXQoZG9zeW0pOwogIHNlbmRf c2VuZCgpOwogIHBhcnNlX3JlcGx5KDEpOwp9Cgp2b2lkCnNlbmRfbGF5b3V0Z2V0KGludCBkb3N5 bSkKewogIHB1dF9jb21wb3VuZCgzKTsKICBwdXRfc2VxdWVuY2UoKTsKICBwdXRfcHV0ZmgoZmgs IDApOwogIHB1dF9sYXlvdXRnZXQoZG9zeW0pOwogIHNlbmRfc2VuZCgpOwogIHBhcnNlX3JlcGx5 KDEpOwp9Cgp2b2lkCnB1dF9sYXlvdXRjb21taXQoaW50IGRvc3ltKQp7CiAgcHV0MzIoNDkpOwog IGlmKGRvc3ltICYmIHN5bXN0YXJ0ID09IC0xKQogICAgc3ltc3RhcnQgPSBvaTsKICBwdXQ2NCgw KTsgLy8gb2Zmc2V0NCBsb2NhX29mZnNldAogIHB1dDY0KDEpOyAvLyBsZW5ndGg0IGxvY2FfbGVu Z3RoCiAgcHV0MzIoMSk7IC8vIGJvb2wgbG9jYV9yZWNsYWltCiAgcHV0MzIoc2lkLnNlcWlkKTsg Ly8gc3RhdGVpZCBzZXEKICBmb3IoaW50IGkgPSAwOyBpIDwgMTI7IGkrKykKICAgIG9idWZbb2kr K10gPSBzaWQub3RoZXJbaV07CiAgcHV0MzIoMSk7IC8vIG5ld29mZnNldDQKICBwdXQ2NCgwKTsg Ly8gb2Zmc2V0NCBub19vZmZzZXQKICBwdXQzMigxKTsgLy8gYm9vbCBudF90aW1lY2hhbmdlZAog IHB1dDY0KDApOyAvLyBuZnN0aW1lNAogIHB1dDMyKDApOwogIC8vIGxheW91dHVwZGF0ZTQKICBw dXQzMig0KTsgLy8gbGF5b3V0dHlwZTQgND1MQVlPVVRfRkxFWF9GSUxFUwogIHB1dF9vcGFxdWUo NCwgInh5enoiKTsgLy8gbG91X2JvZHkKfQoKdm9pZApzZW5kX2xheW91dGNvbW1pdChpbnQgZG9z eW0pCnsKICBwdXRfY29tcG91bmQoMyk7CiAgcHV0X3NlcXVlbmNlKCk7CiAgcHV0X3B1dGZoKGZo LCAwKTsKICBwdXRfbGF5b3V0Y29tbWl0KGRvc3ltKTsKICBzZW5kX3NlbmQoKTsKICBwYXJzZV9y ZXBseSgxKTsKfQoKdm9pZApwdXRfbGF5b3V0cmV0dXJuKGludCBkb3N5bSkKewogIHB1dDMyKDUx KTsKICBpZihkb3N5bSAmJiBzeW1zdGFydCA9PSAtMSkKICAgIHN5bXN0YXJ0ID0gb2k7CiAgcHV0 MzIoMSk7IC8vIHJlY2xhaW0KICBwdXQzMig0KTsgLy8gbGF5b3V0X3R5cGUsIEZMRVhGSUxFCiAg cHV0MzIoMyk7IC8vIGlvbW9kZSwgQU5ZCiAgcHV0MzIoMSk7IC8vIHJldHVybnR5cGUsIEZJTEUK ICBwdXQ2NCgwKTsgLy8gb2Zmc2V0CiAgcHV0NjQoOCk7IC8vIGxlbmd0aAogIHB1dDMyKDEpOyAv LyBzdGF0ZWlkIHNlcSAtLSBzcGVjaWFsIGN1cnJlbnQgc3RhdGVpZAogIGZvcihpbnQgaSA9IDA7 IGkgPCAxMjsgaSsrKQogICAgb2J1ZltvaSsrXSA9IDA7CiAgcHV0X29wYXF1ZV9yZXBlYXQoNjQs ICd4Jyk7IC8vIGxyZl9ib2R5PD4KfQoKdm9pZApzZW5kX2xheW91dHJldHVybihpbnQgZG9zeW0p CnsKICBzeXMoImVjaG8gMTIzNDU2Nzg5MDEyMzQ1NiA+IC90bXAvb3V0Iik7CiAgc3lzKCJjaG93 biBub2JvZHkgL3RtcC9vdXQiKTsKICBwdXRfY29tcG91bmQoNSk7CiAgcHV0X3NlcXVlbmNlKCk7 CiAgcHV0X3Jvb3RmaCgpOwogIHB1dF9sb29rdXAoInRtcCIpOwogIHB1dF9vcGVuX2V4aXN0aW5n KCJvdXQiLCAzKTsKICBwdXRfbGF5b3V0cmV0dXJuKGRvc3ltKTsKICBzZW5kX3NlbmQoKTsKICBw YXJzZV9yZXBseSgxKTsKfQoKdm9pZApwdXRfc2VjaW5mb19ub19uYW1lKGludCBkb3N5bSkKewog IHB1dDMyKDUyKTsKICBwdXQzMigxKTsgLy8gMD1DVVJSRU5UX0ZILCAxPVBBUkVOVAp9Cgp2b2lk CnNlbmRfc2VjaW5mb19ub19uYW1lKGludCBkb3N5bSkKewogIHN5cygiZWNobyAxMjM0NTY3ODkw MTIzNDU2ID4gL3RtcC9vdXQiKTsKICBzeXMoImNob3duIG5vYm9keSAvdG1wL291dCIpOwogIHB1 dF9jb21wb3VuZCg1KTsKICBwdXRfc2VxdWVuY2UoKTsKICBwdXRfcm9vdGZoKCk7CiAgcHV0X2xv b2t1cCgidG1wIik7CiAgcHV0X29wZW5fZXhpc3RpbmcoIm91dCIsIDMpOwogIHB1dF9zZWNpbmZv X25vX25hbWUoZG9zeW0pOwogIHNlbmRfc2VuZCgpOwogIHBhcnNlX3JlcGx5KDEpOwp9Cgp2b2lk Cnh4eF9wdXRfZ2V0X2Rpcl9kZWxlZ2F0aW9uKGludCBkb3N5bSkKewogIHB1dDMyKDQ2KTsKICBp Zihkb3N5bSAmJiBzeW1zdGFydCA9PSAtMSkKICAgIHN5bXN0YXJ0ID0gb2k7CiAgcHV0MzIoMSk7 IC8vIHNpZ25hbF9kZWxldF9hdmFpbAogIHB1dDMyKDMpOyAvLyBub3RpZmljYXRpb25fdHlwZXMg Yml0bWFwIGxlbmd0aAogIHB1dDMyKDB4ZmZmZmZmZmYpOwogIHB1dDMyKDB4ZmZmZmZmZmYpOwog IHB1dDMyKDB4ZmZmZmZmZmYpOwogIHB1dDY0KDApOyAvLyBjaGlsZF9hdHRyX2RlbGF5CiAgcHV0 NjQoMCk7CiAgcHV0NjQoMCk7IC8vIGRpcl9hdHRyX2RlbGF5CiAgcHV0NjQoMCk7CiAgcHV0MzIo Myk7IC8vIGNoaWxkX2F0dHJpYnV0ZXMgYml0bWFwIGxlbmd0aAogIHB1dDMyKDB4ZmZmZmZmZmYp OwogIHB1dDMyKDB4ZmZmZmZmZmYpOwogIHB1dDMyKDB4ZmZmZmZmZmYpOwogIHB1dDMyKDMpOyAv LyBkaXJfYXR0cmlidXRlcyBiaXRtYXAgbGVuZ3RoCiAgcHV0MzIoMHhmZmZmZmZmZik7CiAgcHV0 MzIoMHhmZmZmZmZmZik7CiAgcHV0MzIoMHhmZmZmZmZmZik7Cn0KCnZvaWQKeHh4X3NlbmRfZ2V0 X2Rpcl9kZWxlZ2F0aW9uKGludCBkb3N5bSkKewogIHB1dF9jb21wb3VuZCg0KTsKICBwdXRfc2Vx dWVuY2UoKTsKICBwdXRfcm9vdGZoKCk7CiAgcHV0X2xvb2t1cCgidG1wIik7CiAgeHh4X3B1dF9n ZXRfZGlyX2RlbGVnYXRpb24oZG9zeW0pOwogIHNlbmRfc2VuZCgpOwogIHBhcnNlX3JlcGx5KDEp Owp9Cgp2b2lkCnNlbmRfcm9vdF9ibGFoKCkKewogIHB1dF9jb21wb3VuZCg0KTsKICBwdXRfc2Vx dWVuY2UoKTsKICBwdXRfcm9vdGZoKCk7CiAgcHV0X2xvb2t1cCgidG1wIik7CiAgc3ltc3RhcnQg PSBvaTsKICBmb3IoaW50IGkgPSAwOyBpIDwgMzI7IGkrKykKICAgIHB1dDMyKDB4ZmZmZmZmZmYp OwogIHNlbmRfc2VuZCgpOwogIHBhcnNlX3JlcGx5KDEpOwp9Cgp2b2lkCnNlbmRfY3VyX2JsYWgo KQp7CiAgcHV0X2NvbXBvdW5kKDQpOwogIHB1dF9zZXF1ZW5jZSgpOwogIHB1dF9wdXRmaChmaCwg MCk7CiAgcHV0X3NhdmVmaCgpOwogIHN5bXN0YXJ0ID0gb2k7CiAgZm9yKGludCBpID0gMDsgaSA8 IDMyOyBpKyspCiAgICBwdXQzMigweGZmZmZmZmZmKTsKICBzZW5kX3NlbmQoKTsKICBwYXJzZV9y ZXBseSgxKTsKfQoKdm9pZApwdXRfcmVhZChpbnQgZG9zeW0pCnsKICBwdXQzMigyNSk7CiAgaWYo ZG9zeW0gJiYgc3ltc3RhcnQgPT0gLTEpCiAgICBzeW1zdGFydCA9IG9pOwogIHB1dDMyKHNpZC5z ZXFpZCk7IC8vIG9wZW5fc3RhdGVpZCwgZnJvbSBwcmV2aW91cyBPUEVOCiAgZm9yKGludCBpID0g MDsgaSA8IDEyOyBpKyspCiAgICBvYnVmW29pKytdID0gc2lkLm90aGVyW2ldOwogIHB1dDY0KDAp OyAvLyBvZmZzZXQKICBwdXQzMig1MTIpOyAvLyBjb3VudAp9Cgp2b2lkCnNlbmRfcmVhZChpbnQg ZG9zeW0pCnsKICBwdXRfY29tcG91bmQoMyk7CiAgcHV0X3NlcXVlbmNlKCk7CiAgcHV0X3B1dGZo KGZoLCAwKTsKICBwdXRfcmVhZChkb3N5bSk7CiAgc2VuZF9zZW5kKCk7CiAgcGFyc2VfcmVwbHko MSk7Cn0KCnZvaWQKcHV0X3dyaXRlKGludCBkb3N5bSkKewogIHB1dDMyKDM4KTsKICBpZihkb3N5 bSAmJiBzeW1zdGFydCA9PSAtMSkKICAgIHN5bXN0YXJ0ID0gb2k7CiAgcHV0MzIoc2lkLnNlcWlk KTsgLy8gb3Blbl9zdGF0ZWlkLCBmcm9tIHByZXZpb3VzIE9QRU4KICBmb3IoaW50IGkgPSAwOyBp IDwgMTI7IGkrKykKICAgIG9idWZbb2krK10gPSBzaWQub3RoZXJbaV07CiAgcHV0NjQoMCk7IC8v IG9mZnNldAogIHB1dDMyKDApOyAvLyBzdGFibGVfaG93CiAgcHV0X29wYXF1ZSg2LCAiaGVsbG9c biIpOyAvLyBkYXRhCn0KCnZvaWQKc2VuZF93cml0ZShpbnQgZG9zeW0pCnsKICBwdXRfY29tcG91 bmQoMyk7CiAgcHV0X3NlcXVlbmNlKCk7CiAgcHV0X3B1dGZoKGZoLCAwKTsKICBwdXRfd3JpdGUo ZG9zeW0pOwogIHNlbmRfc2VuZCgpOwogIHBhcnNlX3JlcGx5KDEpOwp9Cgp2b2lkCnB1dF9kZWFs bG9jYXRlKGludCBkb3N5bSkKewogIHB1dDMyKDYyKTsKICBpZihkb3N5bSAmJiBzeW1zdGFydCA9 PSAtMSkKICAgIHN5bXN0YXJ0ID0gb2k7CiAgcHV0MzIoc2lkLnNlcWlkKTsgLy8gb3Blbl9zdGF0 ZWlkLCBmcm9tIHByZXZpb3VzIE9QRU4KICBmb3IoaW50IGkgPSAwOyBpIDwgMTI7IGkrKykKICAg IG9idWZbb2krK10gPSBzaWQub3RoZXJbaV07CiAgcHV0NjQoMCk7IC8vIG9mZnNldDQKICBwdXQ2 NCgxKTsgLy8gbGVuZ3RoNAp9Cgp2b2lkCnNlbmRfZGVhbGxvY2F0ZShpbnQgZG9zeW0pCnsKICBw dXRfY29tcG91bmQoMyk7CiAgcHV0X3NlcXVlbmNlKCk7CiAgcHV0X3B1dGZoKGZoLCAwKTsKICBw dXRfZGVhbGxvY2F0ZShkb3N5bSk7CiAgc2VuZF9zZW5kKCk7CiAgcGFyc2VfcmVwbHkoMSk7Cn0K Ci8vIGFzc3VtZXMgdGhhdCBzZXJ2ZXIncyBzYXZlZF9maCBpcyBhbHJlYWR5Ci8vIHNvdXJjZSBm aWxlLCBhbmQgY3VycmVudF9maCBpcyBhbHJlYWR5IGRlc3RpbmF0aW9uIGZpbGUuCnZvaWQKcHV0 X2NvcHkoc3RydWN0IHN0YXRlaWQgc3JjLCBzdHJ1Y3Qgc3RhdGVpZCBkc3QsIGludCBpbnRlciwg aW50IGRvc3ltKQp7CiAgcHV0MzIoNjApOwogIGlmKGRvc3ltICYmIHN5bXN0YXJ0ID09IC0xKQog ICAgc3ltc3RhcnQgPSBvaTsKCiAgLy8gc3JjX3N0YXRlaWQKICBwdXQzMihzcmMuc2VxaWQpOyAv LyBmcm9tIHByZXZpb3VzIHNlbmRfb3Blbl9leGlzdGluZygpCiAgZm9yKGludCBpID0gMDsgaSA8 IDEyOyBpKyspCiAgICBvYnVmW29pKytdID0gc3JjLm90aGVyW2ldOwoKICAvLyBkc3Rfc3RhdGVp ZAogIHB1dDMyKGRzdC5zZXFpZCk7CiAgZm9yKGludCBpID0gMDsgaSA8IDEyOyBpKyspCiAgICBv YnVmW29pKytdID0gZHN0Lm90aGVyW2ldOwoKICBwdXQ2NCgwKTsgLy8gc3JjX29mZnNldAogIHB1 dDY0KDApOyAvLyBkc3Rfb2Zmc2V0CiAgcHV0NjQoNCk7IC8vIGNvdW50CiAgcHV0MzIoMSk7IC8v IGNvbnNlY3V0aXZlCiAgcHV0MzIoMCk7IC8vIHN5bmNocm9ub3VzCgogIC8vIG5ldGxvYzQgY2Ff c291cmNlX3NlcnZlcjw+CiAgaWYoaW50ZXIpewogICAgcHV0MzIoMSk7CiAgICBwdXQzMigzKTsg Ly8gTkw0X05FVEFERFIKICAgIC8vIG5ldGFkZHI0CiAgICBwdXRfb3BhcXVlKDMsICJ0Y3AiKTsg Ly8gbmV0aWQKICAgIHB1dF9vcGFxdWUoMTIsICIxMjcuMC4wLjEuOC4xIik7IC8vIGFkZHIKICB9 IGVsc2UgewogICAgcHV0MzIoMCk7CiAgfQp9Cgp2b2lkCnNlbmRfY29weShzdHJ1Y3QgZmggc3Jj X2ZoLCBzdHJ1Y3Qgc3RhdGVpZCBzcmNfc2lkLAogICAgICAgICAgc3RydWN0IGZoIGRzdF9maCwg IHN0cnVjdCBzdGF0ZWlkIGRzdF9zaWQsCiAgICAgICAgICBpbnQgaW50ZXIsCiAgICAgICAgICBp bnQgZG9zeW0pCnsKICBwdXRfY29tcG91bmQoNSk7CiAgcHV0X3NlcXVlbmNlKCk7CiAgcHV0X3B1 dGZoKHNyY19maCwgMCk7CiAgcHV0X3NhdmVmaCgpOwogIHB1dF9wdXRmaChkc3RfZmgsIDApOwog IHB1dF9jb3B5KHNyY19zaWQsIGRzdF9zaWQsIGludGVyLCBkb3N5bSk7CiAgc2VuZF9zZW5kKCk7 CiAgcGFyc2VfcmVwbHkoMSk7Cn0KCnZvaWQKcHV0X29mZmxvYWRfY2FuY2VsKGludCBkb3N5bSkK ewogIHB1dDMyKDY2KTsKICBpZihkb3N5bSAmJiBzeW1zdGFydCA9PSAtMSkKICAgIHN5bXN0YXJ0 ID0gb2k7CiAgLy8gc3RhdGVpZAogIHB1dDMyKHNpZC5zZXFpZCk7CiAgZm9yKGludCBpID0gMDsg aSA8IDEyOyBpKyspCiAgICBvYnVmW29pKytdID0gc2lkLm90aGVyW2ldOwp9Cgp2b2lkCnNlbmRf b2ZmbG9hZF9jYW5jZWwoaW50IGRvc3ltKQp7CiAgcHV0X2NvbXBvdW5kKDMpOwogIHB1dF9zZXF1 ZW5jZSgpOwogIHB1dF9wdXRmaChmaCwgZG9zeW0pOwogIHB1dF9vZmZsb2FkX2NhbmNlbChkb3N5 bSk7CiAgc2VuZF9zZW5kKCk7CiAgcGFyc2VfcmVwbHkoMSk7Cn0KCnZvaWQKcHV0X29mZmxvYWRf c3RhdHVzKGludCBkb3N5bSkKewogIHB1dDMyKDY3KTsKICBpZihkb3N5bSAmJiBzeW1zdGFydCA9 PSAtMSkKICAgIHN5bXN0YXJ0ID0gb2k7CiAgLy8gc3RhdGVpZAogIHB1dDMyKHNpZC5zZXFpZCk7 CiAgZm9yKGludCBpID0gMDsgaSA8IDEyOyBpKyspCiAgICBvYnVmW29pKytdID0gc2lkLm90aGVy W2ldOwp9Cgp2b2lkCnNlbmRfb2ZmbG9hZF9zdGF0dXMoaW50IGRvc3ltKQp7CiAgcHV0X2NvbXBv dW5kKDMpOwogIHB1dF9zZXF1ZW5jZSgpOwogIHB1dF9wdXRmaChmaCwgMCk7CiAgcHV0X29mZmxv YWRfc3RhdHVzKGRvc3ltKTsKICBzZW5kX3NlbmQoKTsKICBwYXJzZV9yZXBseSgxKTsKfQoKLy8g YXNzdW1lcyB0aGF0IHNlcnZlcidzIHNhdmVkX2ZoIGlzIGFscmVhZHkKLy8gc291cmNlIGZpbGUs IGFuZCBjdXJyZW50X2ZoIGlzIGFscmVhZHkgZGVzdGluYXRpb24gZmlsZS4Kdm9pZApwdXRfY2xv bmUoc3RydWN0IHN0YXRlaWQgc3JjLCBzdHJ1Y3Qgc3RhdGVpZCBkc3QsIGludCBkb3N5bSkKewog IHB1dDMyKDcxKTsKICBpZihkb3N5bSAmJiBzeW1zdGFydCA9PSAtMSkKICAgIHN5bXN0YXJ0ID0g b2k7CgogIC8vIHNyY19zdGF0ZWlkCiAgcHV0MzIoc3JjLnNlcWlkKTsgLy8gZnJvbSBwcmV2aW91 cyBzZW5kX29wZW5fZXhpc3RpbmcoKQogIGZvcihpbnQgaSA9IDA7IGkgPCAxMjsgaSsrKQogICAg b2J1ZltvaSsrXSA9IHNyYy5vdGhlcltpXTsKCiAgLy8gZHN0X3N0YXRlaWQKICBwdXQzMihkc3Qu c2VxaWQpOwogIGZvcihpbnQgaSA9IDA7IGkgPCAxMjsgaSsrKQogICAgb2J1ZltvaSsrXSA9IGRz dC5vdGhlcltpXTsKCiAgcHV0NjQoMCk7IC8vIHNyY19vZmZzZXQKICBwdXQ2NCgwKTsgLy8gZHN0 X29mZnNldAogIHB1dDY0KDQpOyAvLyBjb3VudAp9Cgp2b2lkCnNlbmRfY2xvbmUoc3RydWN0IGZo IHNyY19maCwgc3RydWN0IHN0YXRlaWQgc3JjX3NpZCwKICAgICAgICAgIHN0cnVjdCBmaCBkc3Rf ZmgsICBzdHJ1Y3Qgc3RhdGVpZCBkc3Rfc2lkLAogICAgICAgICAgaW50IGRvc3ltKQp7CiAgcHV0 X2NvbXBvdW5kKDUpOwogIHB1dF9zZXF1ZW5jZSgpOwogIHB1dF9wdXRmaChzcmNfZmgsIDApOwog IHB1dF9zYXZlZmgoKTsKICBwdXRfcHV0ZmgoZHN0X2ZoLCAwKTsKICBwdXRfY2xvbmUoc3JjX3Np ZCwgZHN0X3NpZCwgZG9zeW0pOwogIHNlbmRfc2VuZCgpOwogIHBhcnNlX3JlcGx5KDEpOwp9Cgp2 b2lkCnB1dF9jb3B5X25vdGlmeShpbnQgZG9zeW0pCnsKICBwdXQzMig2MSk7CiAgaWYoZG9zeW0g JiYgc3ltc3RhcnQgPT0gLTEpCiAgICBzeW1zdGFydCA9IG9pOwoKICAvLyBzcmNfc3RhdGVpZAog IHB1dDMyKHNpZC5zZXFpZCk7CiAgZm9yKGludCBpID0gMDsgaSA8IDEyOyBpKyspCiAgICBvYnVm W29pKytdID0gc2lkLm90aGVyW2ldOwoKICAvLyBuZXRsb2M0IGRlc3RpbmF0aW9uX3NlcnZlcgog IHB1dDMyKDMpOyAvLyBOTDRfTkVUQUREUgogIHB1dF9vcGFxdWUoMywgInRjcCIpOwogIHB1dF9v cGFxdWUoMTIsICIxMjcuMC4wLjEuOC4xIik7IC8vIGFkZHIKfQoKdm9pZApzZW5kX2NvcHlfbm90 aWZ5KGludCBkb3N5bSkKewogIHB1dF9jb21wb3VuZCgzKTsKICBwdXRfc2VxdWVuY2UoKTsKICBw dXRfcHV0ZmgoZmgsIDApOwogIHB1dF9jb3B5X25vdGlmeShkb3N5bSk7CiAgc2VuZF9zZW5kKCk7 CiAgcGFyc2VfcmVwbHkoMSk7Cn0KCnZvaWQKcHV0X2dldF9kaXJfZGVsZWdhdGlvbihpbnQgZG9z eW0pCnsKICBwdXQzMig0Nik7CiAgaWYoZG9zeW0gJiYgc3ltc3RhcnQgPT0gLTEpCiAgICBzeW1z dGFydCA9IG9pOwogIHB1dDMyKDEpOyAvLyBnZGRhX3NpZ25hbF9kZWxlZ19hdmFpbAogIHB1dDMy KDEpOyAvLyBsZW5ndGggb2YgZ2RkYV9ub3RpZmljYXRpb25fdHlwZXMgYml0bWFwNAogIHB1dDMy KDApOwogIHB1dDY0KDApOyAvLyBuZnN0aW1lNCBnZGRhX2NoaWxkX2F0dHJfZGVsYXkKICBwdXQz MigwKTsgLy8gbmZzdGltZTQKICBwdXQ2NCgwKTsgLy8gbmZzdGltZTQgZ2RkYV9kaXJfYXR0cl9k ZWxheQogIHB1dDMyKDApOyAvLyBuZnN0aW1lNAogIHB1dDMyKDMpOyAvLyBnZGRhX2NoaWxkX2F0 dHJpYnV0ZXMgYml0bWFwNAogIHB1dDMyKDApOwogIHB1dDMyKDApOwogIHB1dDMyKDApOwogIHB1 dDMyKDMpOyAvLyBnZGRhX2Rpcl9hdHRyaWJ1dGVzIGJpdG1hcDQKICBwdXQzMigwKTsKICBwdXQz MigwKTsKICBwdXQzMigwKTsKfQoKdm9pZApzZW5kX2dldF9kaXJfZGVsZWdhdGlvbihpbnQgZG9z eW0pCnsKICBwdXRfY29tcG91bmQoNCk7CiAgcHV0X3NlcXVlbmNlKCk7CiAgcHV0X3Jvb3RmaCgp OwogIHB1dF9sb29rdXAoInRtcCIpOwogIHB1dF9nZXRfZGlyX2RlbGVnYXRpb24oZG9zeW0pOwog IHNlbmRfc2VuZCgpOwogIHBhcnNlX3JlcGx5KDEpOwp9Cgp2b2lkCnB1dF9kZXN0cm95X2NsaWVu dGlkKGludCBkb3N5bSkKewogIHB1dDMyKDU3KTsKICBpZihkb3N5bSAmJiBzeW1zdGFydCA9PSAt MSkKICAgIHN5bXN0YXJ0ID0gb2k7CiAgLy8gc3RhdGVpZAogIHB1dDMyKHNpZC5zZXFpZCk7CiAg Zm9yKGludCBpID0gMDsgaSA8IDEyOyBpKyspCiAgICBvYnVmW29pKytdID0gc2lkLm90aGVyW2ld Owp9Cgp2b2lkCnNlbmRfZGVzdHJveV9jbGllbnRpZChpbnQgZG9zeW0pCnsKICBwdXRfY29tcG91 bmQoMik7CiAgcHV0X3NlcXVlbmNlKCk7CiAgcHV0X2Rlc3Ryb3lfY2xpZW50aWQoZG9zeW0pOwog IHNlbmRfc2VuZCgpOwogIHBhcnNlX3JlcGx5KDEpOwp9Cgp2b2lkCnB1dF90ZXN0X3N0YXRlaWQo aW50IGRvc3ltKQp7CiAgcHV0MzIoNTUpOwogIHB1dDMyKDEpOyAvLyBjb3VudAogIGlmKGRvc3lt ICYmIHN5bXN0YXJ0ID09IC0xKQogICAgc3ltc3RhcnQgPSBvaTsKICAvLyBzdGF0ZWlkCiAgcHV0 MzIoc2lkLnNlcWlkKTsKICBmb3IoaW50IGkgPSAwOyBpIDwgMTI7IGkrKykKICAgIG9idWZbb2kr K10gPSBzaWQub3RoZXJbaV07Cn0KCnZvaWQKc2VuZF90ZXN0X3N0YXRlaWQoaW50IGRvc3ltKQp7 CiAgcHV0X2NvbXBvdW5kKDIpOwogIHB1dF9zZXF1ZW5jZSgpOwogIHB1dF90ZXN0X3N0YXRlaWQo ZG9zeW0pOwogIHNlbmRfc2VuZCgpOwogIHBhcnNlX3JlcGx5KDEpOwp9Cgp2b2lkCnB1dF9zZWVr KGludCBkb3N5bSkKewogIHB1dDMyKDY5KTsKICBpZihkb3N5bSAmJiBzeW1zdGFydCA9PSAtMSkK ICAgIHN5bXN0YXJ0ID0gb2k7CiAgLy8gc3RhdGVpZDQKICBwdXQzMihzaWQuc2VxaWQpOwogIGZv cihpbnQgaSA9IDA7IGkgPCAxMjsgaSsrKQogICAgb2J1ZltvaSsrXSA9IHNpZC5vdGhlcltpXTsK ICBwdXQ2NCgxKTsgLy8gc2Ffb2Zmc2V0CiAgcHV0MzIoMCk7IC8vIE5GUzRfQ09OVEVOVF9EQVRB Cn0KCnZvaWQKc2VuZF9zZWVrKGludCBkb3N5bSkKewogIHB1dF9jb21wb3VuZCgzKTsKICBwdXRf c2VxdWVuY2UoKTsKICBwdXRfcHV0ZmgoZmgsIDApOwogIHB1dF9zZWVrKGRvc3ltKTsKICBzZW5k X3NlbmQoKTsKICBwYXJzZV9yZXBseSgxKTsKfQoKdm9pZApwdXRfbGlzdHhhdHRycyhpbnQgZG9z eW0pCnsKICBwdXQzMig3NCk7CiAgaWYoZG9zeW0gJiYgc3ltc3RhcnQgPT0gLTEpCiAgICBzeW1z dGFydCA9IG9pOwogIHB1dDY0KDApOyAvLyBuZnNfY29va2llNAogIHB1dDMyKDQwOTYpOyAvLyBj b3VudDQKfSAKCnZvaWQKc2VuZF9saXN0eGF0dHJzKGludCBkb3N5bSkKewogIHB1dF9jb21wb3Vu ZCgzKTsKICBwdXRfc2VxdWVuY2UoKTsKICBwdXRfcHV0ZmgoZmgsIDApOwogIHB1dF9saXN0eGF0 dHJzKGRvc3ltKTsKICBzZW5kX3NlbmQoKTsKICBwYXJzZV9yZXBseSgxKTsKfQoKaW50Cm1haW4o KQp7CiAgLy8gL2V0Yy9leHBvcnRzCiAgLy8gL3RtcCAxMjcuMC4wLjEocncsc3VidHJlZV9jaGVj ayxwbmZzKQoKICBzeXMoIi91c3Ivc2Jpbi9ycGNiaW5kIC1mIC13ICYiKTsKICBzbGVlcCgxKTsK ICBzeXMoIm1vdW50IC10IHJwY19waXBlZnMgcnBjX3BpcGVmcyAvdmFyL2xpYi9uZnMvcnBjX3Bp cGVmcyIpOwogIHN5cygibW91bnQgLXQgbmZzZCBuZnNkIC9wcm9jL2ZzL25mc2QiKTsKICBzbGVl cCgyKTsKICBzeXMoIi91c3Ivc2Jpbi9ycGMubmZzZCAtLWxlYXNlLXRpbWUgMTAgLS1ncmFjZS10 aW1lIDEwIDEiKTsKICBzbGVlcCgyKTsKICBzeXMoIi91c3Ivc2Jpbi9ycGMubW91bnRkIC0tbWFu YWdlLWdpZHMiKTsKICBzbGVlcCgyKTsKICBzeXMoIi91c3Ivc2Jpbi9ycGMuaWRtYXBkIC1wIC92 YXIvbGliL25mcy9ycGNfcGlwZWZzIik7CiAgc3lzKCJleHBvcnRmcyAtYXUiKTsKICBzeXMoImV4 cG9ydGZzIC1mIik7CiAgc3lzKCJleHBvcnRmcyAtciIpOwogIHN5cygiZXhwb3J0ZnMgLXYiKTsK CiAgc3lzKCJlY2hvIFkgPiAvc3lzL21vZHVsZS9uZnNkL3BhcmFtZXRlcnMvaW50ZXJfY29weV9v ZmZsb2FkX2VuYWJsZSIpOwoKICBzID0gc29ja2V0KEFGX0lORVQsIFNPQ0tfU1RSRUFNLCAwKTsK ICBpbnQgeWVzID0gMTsKICBpZihzZXRzb2Nrb3B0KHMsIFNPTF9TT0NLRVQsIFNPX1JFVVNFQURE UiwgJnllcywgc2l6ZW9mKHllcykpIDwgMCkKICAgIHBlcnJvcigiU09fUkVVU0VBRERSIik7CiAg c3RydWN0IHNvY2thZGRyX2luIHNpbjsKICBtZW1zZXQoJnNpbiwgMCwgc2l6ZW9mKHNpbikpOwog IHNpbi5zaW5fZmFtaWx5ID0gQUZfSU5FVDsKICBzaW4uc2luX2FkZHIuc19hZGRyID0gaW5ldF9h ZGRyKCIxMjcuMC4wLjEiKTsKICBmb3IoaW50IGkgPSAxMDA7IGkgPCAxMDI0OyBpKyspewogICAg c2luLnNpbl9wb3J0ID0gaHRvbnMoaSk7CiAgICBpZihiaW5kKHMsIChzdHJ1Y3Qgc29ja2FkZHIg Kikmc2luLCBzaXplb2Yoc2luKSkgPT0gMCl7CiAgICAgIGJyZWFrOwogICAgfQogIH0KICBzaW4u c2luX3BvcnQgPSBodG9ucygyMDQ5KTsKCiAgc3luYygpOwogIHNsZWVwKDExKTsgLy8gZ3JhY2Ug cGVyaW9kCgogIGlmKGNvbm5lY3QocywgKHN0cnVjdCBzb2NrYWRkciAqKSZzaW4sIHNpemVvZihz aW4pKSA8IDApIHsKICAgIHBlcnJvcigiY29ubmVjdCIpOwogICAgZXhpdCgxKTsKICB9CgogIGlu dCBwaWQgPSBmb3JrKCk7CiAgaWYocGlkID09IDApewogICAgc2VuZF9ub3AoKTsKICAgIAogICAg Ly8gc2VuZF9leGNoYW5nZV9pZF9zeW0oKTsKICAgIHNlbmRfZXhjaGFuZ2VfaWQoMCk7CiAgICAK ICAgIHNlbmRfY3JlYXRlX3Nlc3Npb24oMCk7CgogICAgc2VuZF9yZWNsYWltX2NvbXBsZXRlKCk7 CiAgICAKICAgIC8vIHNlcnZlciBtYXkgbWlzcyB0aGUgZmlyc3QgdGltZSwgeWllbGRpbmcgMTAw MDggTkZTNEVSUl9ERUxBWS4KICAgIC8vIHNvIHRyaWdnZXIgdGhlIHVwY2FsbCB0byBycGMubW91 bnRkIGFuZCB3YWl0IGEgYml0LgogICAgc2VuZF9sb29rdXAoKTsKICAgIHNsZWVwKDIpOwoKICAg IHsKCiAgICAgIHVubGluaygiL3RtcC94eDEiKTsgCiAgICAgIHVubGluaygiL3RtcC94eDIiKTsg CiAgICAgIHVubGluaygiL3RtcC94eDMiKTsgCiAgICAgIHVubGluaygiL3RtcC94eDQiKTsgCiAg ICAgIHN5cygicm0gLXJmIC90bXAvZHh4eDEiKTsKICAgICAgCiAgICAgIHNlbmRfb3Blbl9jcmVh dGUoInh4MSIsIDApOwogICAgICBzZW5kX3dyaXRlKDApOwogICAgICBzZW5kX2RlYWxsb2NhdGUo MCk7CiAgICAgIHNlbmRfanVua19zZXRhdHRyKCk7CgogICAgICBzZW5kX29wZW5fY3JlYXRlKCJ4 eDIiLCAwKTsKICAgICAgc2VuZF9sb2NrKDApOwoKICAgICAgc2VuZF9vcGVuX2NyZWF0ZSgieHgz IiwgMCk7CiAgICAgIHNlbmRfbGF5b3V0Z2V0KDApOwogICAgICBzZW5kX2xheW91dGNvbW1pdCgw KTsKICAgICAgZXhpdCgxKTsKICAgIH0KICB9CiAgY2xvc2Uocyk7CgogIGZvcihpbnQgaSA9IDA7 IGkgPCA2MDsgaSsrKXsKICAgIHNsZWVwKDEpOwogICAgaW50IHN0OwogICAgaW50IHJldCA9IHdh aXRwaWQocGlkLCAmc3QsIFdOT0hBTkcpOwogICAgaWYocmV0ID09IHBpZCkKICAgICAgYnJlYWs7 CiAgfQogIGtpbGwocGlkLCA5KTsKICBzbGVlcCgxKTsKfQo= --=-=-=--