From owner-freebsd-current@FreeBSD.ORG Tue Feb 26 11:39:28 2013 Return-Path: Delivered-To: freebsd-current@freebsd.org Received: from mx1.freebsd.org (mx1.FreeBSD.org [8.8.178.115]) by hub.freebsd.org (Postfix) with ESMTP id C753F2A3 for ; Tue, 26 Feb 2013 11:39:28 +0000 (UTC) (envelope-from pluknet@gmail.com) Received: from mail-wi0-f172.google.com (mail-wi0-f172.google.com [209.85.212.172]) by mx1.freebsd.org (Postfix) with ESMTP id 357ADDAD for ; Tue, 26 Feb 2013 11:39:27 +0000 (UTC) Received: by mail-wi0-f172.google.com with SMTP id ez12so4698137wid.17 for ; Tue, 26 Feb 2013 03:39:27 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:x-received:date:message-id:subject:from:to :content-type; bh=u1sCx8XHH2zSanW1e6TH41eCGUIluABJcz6P059U6Tw=; b=mReI8+m9XuodKt1LFjFCRYNVJxQXR9qXJvbPNI8qyPgnz+ylFefh3kBp5RanErp2Wo yyt6nZGx9oB1lm534IAiRMZQGBa9MVlC3sCFVAKCXEqBP8iJL4yNgZXRgN/Dmh6HbMKZ LnPnMzy4aJHAyuCLLZTmQOeQZFQsLfkDi2YpcGie3siCkMvfxZHXcOnumZNi71cTGK5m O3OrXGHa1ZW/ZO/vMr9DQUc29s0dmxkGoOHAoaKnV4CN3InhBTVg/K1e8f/dBEjZsw6p zJ4OiktvZyjUUnUe9QKIUuHhaJEMxpIwPKkv5N32rRmlVByUmmlFuvIKZFc+wrSSznuM 4MCQ== MIME-Version: 1.0 X-Received: by 10.194.6.2 with SMTP id w2mr1313521wjw.10.1361878767019; Tue, 26 Feb 2013 03:39:27 -0800 (PST) Received: by 10.194.86.167 with HTTP; Tue, 26 Feb 2013 03:39:26 -0800 (PST) Date: Tue, 26 Feb 2013 14:39:26 +0300 Message-ID: Subject: [patch] Proposal: move getmntopts(3) into libutil From: Sergey Kandaurov To: FreeBSD Current Content-Type: multipart/mixed; boundary=047d7b5d2e2022af2f04d69f1c80 X-BeenThere: freebsd-current@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: Discussions about the use of FreeBSD-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 26 Feb 2013 11:39:28 -0000 --047d7b5d2e2022af2f04d69f1c80 Content-Type: text/plain; charset=ISO-8859-1 Hi. The functions from sbin/mount/getmntopts.c are used in a bunch of other stuff like mount_* utilities which have to suck them in as their own functions in quite a hackish way. getmntopts.c copies are compiled in to an every utility-consumer instead of being present in one place. Looks like getmntopts.c was brought together with mount_ufs.c in 4.4BSD-Lite. After that other mount_* were converted to use getmntopts(). The utilities consuming getmntopts.c as currently present in HEAD: mount_smbfs fsck_ffs growfs mksnap_ffs mount mount_cd9660 mount_ext2fs mount_fusefs mount_hpfs mount_msdosfs mount_nfs mount_nullfs mount_reiserfs mount_std mount_udf mount_unionfs mount_nwfs mount_portalfs mount_smbfs mountd External mount-like utilities may also have difficulties with building to get getmntopts.c source as this requires /usr/src presence which is in sync with installed world. Look how mount_fusefs from ports compiles: # mount_fusefs needs mntopts.h and getmntopts.c from src/sbin/mount/ The attached patch moves them to the IMHO architecturally more correct place: a separate library -lutil. sbin/mount/mntopts.h -> include/mntopts.h sbin/mount/getmntopts.[3c] -> lib/libutil/getmntopts.[3c] The full list of functions in getmntopts.c: getmntopts() rmslashes() checkpath() build_iovec() build_iovec_argf() This will eventually give them public and documented status. It will also bring back to live its semi-dead man page getmntopts(3) currently disconnected from build, that will force us to update (and use) it which is also a goody. getmntopts.3 was never installed. As a bonus, it will bring us in sync with others BSDs. The attached patch was buildworld-tested and contains only minimal changes; getmntopts(3) updates and other improvements could be made separately. - rearrange files from sbin/mount/ to the new place - update Makefiles's of mount_* to use getmntopts(3) from libutil - #include "mntopts.h" -> #include Well, the include changes should be safe to commit as is. Below is a changelist from svn stat, for convenience 'sake. M contrib/smbfs/mount_smbfs/mount_smbfs.c M include/Makefile A + include/mntopts.h M lib/libutil/Makefile A + lib/libutil/getmntopts.3 A + lib/libutil/getmntopts.c M sbin/fsck_ffs/Makefile M sbin/growfs/Makefile M sbin/mksnap_ffs/Makefile M sbin/mount/Makefile D sbin/mount/getmntopts.3 D sbin/mount/getmntopts.c D sbin/mount/mntopts.h M sbin/mount/mount.c M sbin/mount/mount_fs.c M sbin/mount_cd9660/Makefile M sbin/mount_cd9660/mount_cd9660.c M sbin/mount_ext2fs/Makefile M sbin/mount_ext2fs/mount_ext2fs.c M sbin/mount_fusefs/Makefile M sbin/mount_fusefs/mount_fusefs.c M sbin/mount_hpfs/Makefile M sbin/mount_hpfs/mount_hpfs.c M sbin/mount_msdosfs/Makefile M sbin/mount_msdosfs/mount_msdosfs.c M sbin/mount_nfs/Makefile M sbin/mount_nfs/mount_nfs.c M sbin/mount_ntfs/Makefile M sbin/mount_ntfs/mount_ntfs.c M sbin/mount_nullfs/Makefile M sbin/mount_nullfs/mount_nullfs.c M sbin/mount_reiserfs/Makefile M sbin/mount_reiserfs/mount_reiserfs.c M sbin/mount_std/Makefile M sbin/mount_std/mount_std.c M sbin/mount_udf/Makefile M sbin/mount_udf/mount_udf.c M sbin/mount_unionfs/Makefile M sbin/mount_unionfs/mount_unionfs.c M usr.sbin/mount_nwfs/Makefile M usr.sbin/mount_nwfs/mount_nwfs.c M usr.sbin/mount_portalfs/Makefile M usr.sbin/mount_portalfs/mount_portalfs.c M usr.sbin/mount_smbfs/Makefile M usr.sbin/mountd/Makefile M usr.sbin/mountd/mountd.c -- wbr, pluknet --047d7b5d2e2022af2f04d69f1c80 Content-Type: application/octet-stream; name="getmntopts.patch" Content-Disposition: attachment; filename="getmntopts.patch" Content-Transfer-Encoding: base64 X-Attachment-Id: f_hdmyh1c80 SW5kZXg6IGNvbnRyaWIvc21iZnMvbW91bnRfc21iZnMvbW91bnRfc21iZnMuYwo9PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 Ci0tLSBjb250cmliL3NtYmZzL21vdW50X3NtYmZzL21vdW50X3NtYmZzLmMJKHJldmlzaW9uIDI0 NzE0OSkKKysrIGNvbnRyaWIvc21iZnMvbW91bnRfc21iZnMvbW91bnRfc21iZnMuYwkod29ya2lu ZyBjb3B5KQpAQCAtNDcsNiArNDcsNyBAQAogI2luY2x1ZGUgPHN0ZGxpYi5oPgogI2luY2x1ZGUg PGVyci5oPgogI2luY2x1ZGUgPHN5c2V4aXRzLmg+CisjaW5jbHVkZSA8bW50b3B0cy5oPgogCiAj aW5jbHVkZSA8Y2ZsaWIuaD4KIApAQCAtNTYsOCArNTcsNiBAQAogCiAjaW5jbHVkZSA8ZnMvc21i ZnMvc21iZnMuaD4KIAotI2luY2x1ZGUgIm1udG9wdHMuaCIKLQogc3RhdGljIGNoYXIgbW91bnRf cG9pbnRbTUFYUEFUSExFTiArIDFdOwogc3RhdGljIHZvaWQgdXNhZ2Uodm9pZCk7CiAKSW5kZXg6 IGluY2x1ZGUvTWFrZWZpbGUKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gaW5jbHVkZS9NYWtlZmlsZQkocmV2aXNp b24gMjQ3MTQ5KQorKysgaW5jbHVkZS9NYWtlZmlsZQkod29ya2luZyBjb3B5KQpAQCAtMTMsOCAr MTMsOCBAQAogCWZ0cy5oIGZ0dy5oIGdldG9wdC5oIGdsb2IuaCBncnAuaCBnc3NhcGkuaCBcCiAJ aWVlZWZwLmggaWZhZGRycy5oIFwKIAlpbnR0eXBlcy5oIGlzbzY0Ni5oIGtlbnYuaCBsYW5naW5m by5oIGxpYmdlbi5oIGxpbWl0cy5oIGxpbmsuaCBcCi0JbG9jYWxlLmggbWFsbG9jLmggbWFsbG9j X25wLmggbWVtb3J5LmggbW9uZXRhcnkuaCBtcG9vbC5oIG1xdWV1ZS5oIFwKLQluZGJtLmggbmV0 Y29uZmlnLmggXAorCWxvY2FsZS5oIG1hbGxvYy5oIG1hbGxvY19ucC5oIG1lbW9yeS5oIG1udG9w dHMuaCBcCisJbW9uZXRhcnkuaCBtcG9vbC5oIG1xdWV1ZS5oIG5kYm0uaCBuZXRjb25maWcuaCBc CiAJbmV0ZGIuaCBubF90eXBlcy5oIG5saXN0LmggbnNzLmggbnNzd2l0Y2guaCBwYXRocy5oIFwK IAlwcmludGYuaCBwcm9jX3NlcnZpY2UuaCBwdGhyZWFkLmggXAogCXB0aHJlYWRfbnAuaCBwd2Qu aCByYW5saWIuaCByZWFkcGFzc3BocmFzZS5oIHJlZ2V4LmggXApJbmRleDogbGliL2xpYnV0aWwv TWFrZWZpbGUKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PQotLS0gbGliL2xpYnV0aWwvTWFrZWZpbGUJKHJldmlzaW9uIDI0 NzE0OSkKKysrIGxpYi9saWJ1dGlsL01ha2VmaWxlCSh3b3JraW5nIGNvcHkpCkBAIC04LDcgKzgs OCBAQAogTElCPQl1dGlsCiBTSExJQl9NQUpPUj0gOQogCi1TUkNTPQlfc2VjdXJlX3BhdGguYyBh dXRoLmMgZXhwYW5kX251bWJlci5jIGZsb3Blbi5jIGZwYXJzZWxuLmMgZ3JfdXRpbC5jIFwKK1NS Q1M9CV9zZWN1cmVfcGF0aC5jIGF1dGguYyBleHBhbmRfbnVtYmVyLmMgZmxvcGVuLmMgZnBhcnNl bG4uYyBcCisJZ2V0bW50b3B0cy5jIGdyX3V0aWwuYyBcCiAJaGV4ZHVtcC5jIGh1bWFuaXplX251 bWJlci5jIGtpbmZvX2dldGZpbGUuYyBraW5mb19nZXRmaWxlLmMgXAogCWtpbmZvX2dldGFsbHBy b2MuYyBraW5mb19nZXRwcm9jLmMga2luZm9fZ2V0dm1tYXAuYyBrbGQuYyBcCiAJbG9naW5fYXV0 aC5jIGxvZ2luX2NhcC5jIFwKQEAgLTI1LDcgKzI2LDcgQEAKIAogQ0ZMQUdTKz0gLUkkey5DVVJE SVJ9IC1JJHsuQ1VSRElSfS8uLi9saWJjL2dlbi8KIAotTUFOKz0JZXhwYW5kX251bWJlci4zIGZs b3Blbi4zIGZwYXJzZWxuLjMgaGV4ZHVtcC4zIFwKK01BTis9CWV4cGFuZF9udW1iZXIuMyBmbG9w ZW4uMyBmcGFyc2Vsbi4zIGdldG1udG9wdHMuMyBoZXhkdW1wLjMgXAogCWh1bWFuaXplX251bWJl ci4zIGtpbmZvX2dldGFsbHByb2MuMyBraW5mb19nZXRmaWxlLjMgXAogCWtpbmZvX2dldHByb2Mu MyBraW5mb19nZXR2bW1hcC4zIGtsZC4zIGxvZ2luX2F1dGguMyBsb2dpbl9jYXAuMyBcCiAJbG9n aW5fY2xhc3MuMyBsb2dpbl9vay4zIGxvZ2luX3RpbWVzLjMgbG9naW5fdHR5LjMgcGlkZmlsZS4z IFwKSW5kZXg6IHNiaW4vZnNja19mZnMvTWFrZWZpbGUKPT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gc2Jpbi9mc2Nr X2Zmcy9NYWtlZmlsZQkocmV2aXNpb24gMjQ3MjU2KQorKysgc2Jpbi9mc2NrX2Zmcy9NYWtlZmls ZQkod29ya2luZyBjb3B5KQpAQCAtNywxMiArNywxMiBAQAogTUFOPQlmc2NrX2Zmcy44CiBNTElO S1M9CWZzY2tfZmZzLjggZnNja191ZnMuOCBmc2NrX2Zmcy44IGZzY2tfNC4yYnNkLjgKIFNSQ1M9 CWRpci5jIGVhLmMgZnN1dGlsLmMgaW5vZGUuYyBtYWluLmMgcGFzczEuYyBwYXNzMWIuYyBwYXNz Mi5jIHBhc3MzLmMgXAotCXBhc3M0LmMgcGFzczUuYyBzZXR1cC5jIHN1ai5jIHV0aWxpdGllcy5j IGdqb3VybmFsLmMgZ2V0bW50b3B0cy5jCi1EUEFERD0JJHtMSUJVRlN9Ci1MREFERD0JLWx1ZnMK KwlwYXNzNC5jIHBhc3M1LmMgc2V0dXAuYyBzdWouYyB1dGlsaXRpZXMuYyBnam91cm5hbC5jCitE UEFERD0JJHtMSUJVRlN9ICR7TElCVVRJTH0KK0xEQUREPQktbHVmcyAtbHV0aWwKIFdBUk5TPz0J MgotQ0ZMQUdTKz0gLUkkey5DVVJESVJ9IC1JJHsuQ1VSRElSfS8uLi9tb3VudAorQ0ZMQUdTKz0g LUkkey5DVVJESVJ9CiAKLS5QQVRIOgkkey5DVVJESVJ9Ly4uLy4uL3N5cy91ZnMvZmZzICR7LkNV UkRJUn0vLi4vbW91bnQKKy5QQVRIOgkkey5DVVJESVJ9Ly4uLy4uL3N5cy91ZnMvZmZzCiAKIC5p bmNsdWRlIDxic2QucHJvZy5taz4KSW5kZXg6IHNiaW4vZ3Jvd2ZzL01ha2VmaWxlCj09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT0KLS0tIHNiaW4vZ3Jvd2ZzL01ha2VmaWxlCShyZXZpc2lvbiAyNDcxNDkpCisrKyBzYmluL2dy b3dmcy9NYWtlZmlsZQkod29ya2luZyBjb3B5KQpAQCAtNiwxMiArNiw5IEBACiAKICNHRlNEQkc9 CiAKLS5QQVRIOgkkey5DVVJESVJ9Ly4uL21vdW50Ci0KIFBST0c9ICAgZ3Jvd2ZzCi1TUkNTPSAg IGdyb3dmcy5jIGdldG1udG9wdHMuYworU1JDUz0gICBncm93ZnMuYwogTUFOPQlncm93ZnMuOAot Q0ZMQUdTKz0tSSR7LkNVUkRJUn0vLi4vbW91bnQKIAogLmlmIGRlZmluZWQoR0ZTREJHKQogU1JD Uys9ICBkZWJ1Zy5jCkluZGV4OiBzYmluL21rc25hcF9mZnMvTWFrZWZpbGUKPT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot LS0gc2Jpbi9ta3NuYXBfZmZzL01ha2VmaWxlCShyZXZpc2lvbiAyNDcxNDkpCisrKyBzYmluL21r c25hcF9mZnMvTWFrZWZpbGUJKHdvcmtpbmcgY29weSkKQEAgLTMsMTIgKzMsMTMgQEAKIC5QQVRI Ogkkey5DVVJESVJ9Ly4uL21vdW50CiAKIFBST0c9CW1rc25hcF9mZnMKLVNSQ1M9CW1rc25hcF9m ZnMuYyBnZXRtbnRvcHRzLmMKIE1BTj0JbWtzbmFwX2Zmcy44CiAKIFdBUk5TPz0JMgotQ0ZMQUdT Kz0tSSR7LkNVUkRJUn0vLi4vbW91bnQKIAorRFBBREQ9CSR7TElCVVRJTH0KK0xEQUREPQktbHV0 aWwKKwogLmlmIGRlZmluZWQoTk9TVUlEKQogQklOTU9ERT01NTAKIC5lbHNlCkluZGV4OiBzYmlu L21vdW50L01ha2VmaWxlCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHNiaW4vbW91bnQvTWFrZWZpbGUJKHJldmlz aW9uIDI0NzE0OSkKKysrIHNiaW4vbW91bnQvTWFrZWZpbGUJKHdvcmtpbmcgY29weSkKQEAgLTIs OSArMiw4IEBACiAjICRGcmVlQlNEJAogCiBQUk9HPQltb3VudAotU1JDUz0JbW91bnQuYyBtb3Vu dF9mcy5jIGdldG1udG9wdHMuYyB2ZnNsaXN0LmMKK1NSQ1M9CW1vdW50LmMgbW91bnRfZnMuYyB2 ZnNsaXN0LmMKIE1BTj0JbW91bnQuOAotIyBXZSBkbyBOT1QgaW5zdGFsbCB0aGUgZ2V0bW50b3B0 cy4zIG1hbiBwYWdlLgogCiBEUEFERD0JJHtMSUJVVElMfQogTERBREQ9CS1sdXRpbApJbmRleDog c2Jpbi9tb3VudC9nZXRtbnRvcHRzLjMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gc2Jpbi9tb3VudC9nZXRtbnRv cHRzLjMJKHJldmlzaW9uIDI0NzE0OSkKKysrIHNiaW4vbW91bnQvZ2V0bW50b3B0cy4zCSh3b3Jr aW5nIGNvcHkpCkBAIC0xLDE4MSArMCwwIEBACi0uXCIgQ29weXJpZ2h0IChjKSAxOTk0Ci0uXCIJ VGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMg cmVzZXJ2ZWQuCi0uXCIKLS5cIiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLS5cIiBtb2RpZmljYXRpb24sIGFyZSBwZXJt aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLS5cIiBhcmUgbWV0 OgotLlwiIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg YWJvdmUgY29weXJpZ2h0Ci0uXCIgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotLlwiIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0uXCIgICAgbm90 aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy IGluIHRoZQotLlwiICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92 aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0uXCIgNC4gTmVpdGhlciB0aGUgbmFtZSBvZiB0 aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKLS5cIiAgICBt YXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRo aXMgc29mdHdhcmUKLS5cIiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlz c2lvbi4KLS5cIgotLlwiIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMg QU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECi0uXCIgQU5ZIEVYUFJFU1MgT1IgSU1QTElF RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0uXCIgSU1Q TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU SUNVTEFSIFBVUlBPU0UKLS5cIiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRI RSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKLS5cIiBGT1IgQU5ZIERJUkVDVCwg SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB TAotLlwiIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO VCBPRiBTVUJTVElUVVRFIEdPT0RTCi0uXCIgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCi0uXCIgSE9XRVZFUiBDQVVT RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT VFJJQ1QKLS5cIiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCi0uXCIgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotLlwiIFNVQ0gg REFNQUdFLgotLlwiCi0uXCIJQCgjKWdldG1udG9wdHMuMwk4LjMgKEJlcmtlbGV5KSAzLzMwLzk1 Ci0uXCIgJEZyZWVCU0QkCi0uXCIKLS5EZCBGZWJydWFyeSAxNywgMjAwOAotLkR0IEdFVE1OVE9Q VFMgMwotLk9zCi0uU2ggTkFNRQotLk5tIGdldG1udG9wdHMKLS5OZCBzY2FuIG1vdW50IG9wdGlv bnMKLS5TaCBTWU5PUFNJUwotLkZkICNpbmNsdWRlIFwmIm1udG9wdHMuaCIKLS5GdCB2b2lkCi0u Rm8gZ2V0bW50b3B0cwotLkZhICJjb25zdCBjaGFyICpvcHRpb25zIiAiY29uc3Qgc3RydWN0IG1u dG9wdCAqbW9wdHMiCi0uRmEgImludCAqZmxhZ3AiICJpbnQgKmFsdGZsYWdwIgotLkZjCi0uU2gg REVTQ1JJUFRJT04KLVRoZQotLkZuIGdldG1udG9wdHMKLWZ1bmN0aW9uIHRha2VzIGEgY29tbWEg c2VwYXJhdGVkIG9wdGlvbiBsaXN0IGFuZCBhIGxpc3QKLW9mIHZhbGlkIG9wdGlvbiBuYW1lcywg YW5kIGNvbXB1dGVzIHRoZSBiaXRtYXNrCi1jb3JyZXNwb25kaW5nIHRvIHRoZSByZXF1ZXN0ZWQg c2V0IG9mIG9wdGlvbnMuCi0uUHAKLVRoZSBzdHJpbmcKLS5GYSBvcHRpb25zCi1pcyBicm9rZW4g ZG93biBpbnRvIGEgc2VxdWVuY2Ugb2YgY29tbWEgc2VwYXJhdGVkIHRva2Vucy4KLUVhY2ggdG9r ZW4gaXMgbG9va2VkIHVwIGluIHRoZSB0YWJsZSBkZXNjcmliZWQgYnkKLS5GYSBtb3B0cwotYW5k IHRoZSBiaXRzIGluCi10aGUgd29yZCByZWZlcmVuY2VkIGJ5IGVpdGhlcgotLkZhIGZsYWdwCi1v cgotLkZhIGFsdGZsYWdwCi0oZGVwZW5kaW5nIG9uIHRoZQotLlZhIG1fYWx0bG9jCi1maWVsZCBv ZiB0aGUgb3B0aW9uJ3MgdGFibGUgZW50cnkpCi1hcmUgdXBkYXRlZC4KLVRoZSBmbGFnIHdvcmRz IGFyZSBub3QgaW5pdGlhbGl6ZWQgYnkKLS5GbiBnZXRtbnRvcHRzIC4KLVRoZSB0YWJsZSwKLS5G YSBtb3B0cyAsCi1oYXMgdGhlIGZvbGxvd2luZyBmb3JtYXQ6Ci0uQmQgLWxpdGVyYWwKLXN0cnVj dCBtbnRvcHQgewotCWNoYXIgKm1fb3B0aW9uOwkJLyogb3B0aW9uIG5hbWUgKi8KLQlpbnQgbV9p bnZlcnNlOwkJLyogaXMgdGhpcyBhIG5lZ2F0aXZlIG9wdGlvbiwgZS5nLiwgImRldiIgKi8KLQlp bnQgbV9mbGFnOwkJLyogYml0IHRvIHNldCwgZS5nLiwgTU5UX1JET05MWSAqLwotCWludCBtX2Fs dGxvYzsJCS8qIG5vbi16ZXJvIHRvIHVzZSBhbHRmbGFncCByYXRoZXIgdGhhbiBmbGFncCAqLwot fTsKLS5FZAotLlBwCi1UaGUgbWVtYmVycyBvZiB0aGlzIHN0cnVjdHVyZSBhcmU6Ci0uQmwgLXRh ZyAtd2lkdGggbV9pbnZlcnNlCi0uSXQgVmEgbV9vcHRpb24KLXRoZSBvcHRpb24gbmFtZSwKLWZv ciBleGFtcGxlCi0uRHEgTGkgc3VpZCAuCi0uSXQgVmEgbV9pbnZlcnNlCi10ZWxscwotLkZuIGdl dG1udG9wdHMKLXRoYXQgdGhlIG5hbWUgaGFzIHRoZSBpbnZlcnNlIG1lYW5pbmcgb2YgdGhlCi1i aXQuCi1Gb3IgZXhhbXBsZSwKLS5EcSBMaSBzdWlkCi1pcyB0aGUgc3RyaW5nLCB3aGVyZWFzIHRo ZQotbW91bnQgZmxhZyBpcwotLkR2IE1OVF9OT1NVSUQgLgotSW4gdGhpcyBjYXNlLCB0aGUgc2Vu c2Ugb2YgdGhlIHN0cmluZyBhbmQgdGhlIGZsYWcKLWFyZSBpbnZlcnRlZCwgc28gdGhlCi0uVmEg bV9pbnZlcnNlCi1mbGFnIHNob3VsZCBiZSBzZXQuCi0uSXQgVmEgbV9mbGFnCi10aGUgdmFsdWUg b2YgdGhlIGJpdCB0byBiZSBzZXQgb3IgY2xlYXJlZCBpbgotdGhlIGZsYWcgd29yZCB3aGVuIHRo ZSBvcHRpb24gaXMgcmVjb2duaXplZC4KLVRoZSBiaXQgaXMgc2V0IHdoZW4gdGhlIG9wdGlvbiBp cyBkaXNjb3ZlcmVkLAotYnV0IGNsZWFyZWQgaWYgdGhlIG9wdGlvbiBuYW1lIHdhcyBwcmVjZWRl ZAotYnkgdGhlIGxldHRlcnMKLS5EcSBMaSBubyAuCi1UaGUKLS5WYSBtX2ludmVyc2UKLWZsYWcg Y2F1c2VzIHRoZXNlIHR3byBvcGVyYXRpb25zIHRvIGJlIHJldmVyc2VkLgotLkl0IFZhIG1fYWx0 bG9jCi10aGUgYml0IHNob3VsZCBiZSBzZXQgb3IgY2xlYXJlZCBpbgotLkZhIGFsdGZsYWdwCi1y YXRoZXIgdGhhbgotLkZhIGZsYWdwIC4KLS5FbAotLlBwCi1FYWNoIG9mIHRoZSB1c2VyIHZpc2li bGUKLS5EdiBNTlRfCi1mbGFncyBoYXMgYSBjb3JyZXNwb25kaW5nCi0uRHYgTU9QVF8KLW1hY3Jv IHdoaWNoIGRlZmluZXMgYW4gYXBwcm9wcmlhdGUKLS5WdCAic3RydWN0IG1udG9wdCIKLWVudHJ5 LgotVG8gc2ltcGxpZnkgdGhlIHByb2dyYW0gaW50ZXJmYWNlIGFuZCBlbnN1cmUgY29uc2lzdGVu Y3kgYWNyb3NzIGFsbAotcHJvZ3JhbXMsIGEgZ2VuZXJhbCBwdXJwb3NlIG1hY3JvLAotLkR2IE1P UFRfU1RET1BUUyAsCi1pcyBkZWZpbmVkIHdoaWNoCi1jb250YWlucyBhbiBlbnRyeSBmb3IgYWxs IHRoZSBnZW5lcmljIFZGUyBvcHRpb25zLgotSW4gYWRkaXRpb24sIHRoZSBtYWNyb3MKLS5EdiBN T1BUX0ZPUkNFCi1hbmQKLS5EdiBNT1BUX1VQREFURQotZXhpc3QgdG8gZW5hYmxlIHRoZQotLkR2 IE1OVF9GT1JDRQotYW5kCi0uRHYgTU5UX1VQREFURQotZmxhZ3MgdG8gYmUgc2V0LgotRmluYWxs eSwgdGhlIHRhYmxlIG11c3QgYmUgdGVybWluYXRlZCBieSBhbiBlbnRyeSB3aXRoIGEKLS5EdiBO VUxMCi1maXJzdCBlbGVtZW50LgotLlNoIEVYQU1QTEVTCi1Nb3N0IGNvbW1hbmRzIHdpbGwgdXNl IHRoZSBzdGFuZGFyZCBvcHRpb24gc2V0LgotTG9jYWwgZmlsZSBzeXN0ZW1zIHdoaWNoIHN1cHBv cnQgdGhlCi0uRHYgTU5UX1VQREFURQotZmxhZywgd291bGQgYWxzbyBoYXZlIGFuCi0uRHYgTU9Q VF9VUERBVEUKLWVudHJ5LgotVGhpcyBjYW4gYmUgZGVjbGFyZWQgYW5kIHVzZWQgYXMgZm9sbG93 czoKLS5CZCAtbGl0ZXJhbAotI2luY2x1ZGUgIm1udG9wdHMuaCIKLQotc3RydWN0IG1udG9wdCBt b3B0c1tdID0gewotCU1PUFRfU1RET1BUUywKLQlNT1BUX1VQREFURSwKLQl7IE5VTEwgfQotfTsK LQotCS4uLgotCW1udGZsYWdzID0gbW50YWx0ZmxhZ3MgPSAwOwotCS4uLgotCWdldG1udG9wdHMo b3B0aW9ucywgbW9wdHMsICZtbnRmbGFncywgJm1udGFsdGZsYWdzKTsKLQkuLi4KLS5FZAotLlNo IERJQUdOT1NUSUNTCi1JZiB0aGUgZXh0ZXJuYWwgaW50ZWdlciB2YXJpYWJsZQotLlZhIGdldG1u dF9zaWxlbnQKLWlzIHplcm8sIHRoZW4gdGhlCi0uRm4gZ2V0bW50b3B0cwotZnVuY3Rpb24gZGlz cGxheXMgYW4gZXJyb3IgbWVzc2FnZSBhbmQgZXhpdHMgaWYgYW4KLXVucmVjb2duaXplZCBvcHRp b24gaXMgZW5jb3VudGVyZWQuCi1PdGhlcndpc2UgdW5yZWNvZ25pemVkIG9wdGlvbnMgYXJlIHNp bGVudGx5IGlnbm9yZWQuCi1CeSBkZWZhdWx0Ci0uVmEgZ2V0bW50X3NpbGVudAotaXMgemVyby4K LS5TaCBTRUUgQUxTTwotLlhyIGVyciAzICwKLS5YciBtb3VudCA4Ci0uU2ggSElTVE9SWQotVGhl Ci0uRm4gZ2V0bW50b3B0cwotZnVuY3Rpb24gYXBwZWFyZWQgaW4KLS5CeCA0LjQgLgpJbmRleDog c2Jpbi9tb3VudC9nZXRtbnRvcHRzLmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gc2Jpbi9tb3VudC9nZXRtbnRv cHRzLmMJKHJldmlzaW9uIDI0NzE0OSkKKysrIHNiaW4vbW91bnQvZ2V0bW50b3B0cy5jCSh3b3Jr aW5nIGNvcHkpCkBAIC0xLDE4MyArMCwwIEBACi0vKi0KLSAqIENvcHlyaWdodCAoYykgMTk5NAot ICoJVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdo dHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6 Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0 aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3 aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiA0LiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2 ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycwotICogICAgbWF5IGJlIHVz ZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3 YXJlCi0gKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAq Ci0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklC VVRPUlMgYGBBUyBJUycnIEFORAotICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJ RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T RQotICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBD T05UUklCVVRPUlMgQkUgTElBQkxFCi0gKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAotICogREFNQUdFUyAo SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg R09PRFMKLSAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig QlVTSU5FU1MgSU5URVJSVVBUSU9OKQotICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKLSAqIExJQUJJTElU WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO IEFOWSBXQVkKLSAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSAqIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZiAw Ci0jaWZuZGVmIGxpbnQKLXN0YXRpYyBjaGFyIHNjY3NpZFtdID0gIkAoIylnZXRtbnRvcHRzLmMJ OC4zIChCZXJrZWxleSkgMy8yOS85NSI7Ci0jZW5kaWYgLyogbm90IGxpbnQgKi8KLSNlbmRpZgot I2luY2x1ZGUgPHN5cy9jZGVmcy5oPgotX19GQlNESUQoIiRGcmVlQlNEJCIpOwotCi0jaW5jbHVk ZSA8c3lzL3BhcmFtLmg+Ci0jaW5jbHVkZSA8c3lzL21vdW50Lmg+Ci0jaW5jbHVkZSA8c3lzL3N0 YXQuaD4KLSNpbmNsdWRlIDxzeXMvdWlvLmg+Ci0KLSNpbmNsdWRlIDxlcnIuaD4KLSNpbmNsdWRl IDxlcnJuby5oPgotI2luY2x1ZGUgPHN0ZGFyZy5oPgotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0jaW5j bHVkZSA8c3RkbGliLmg+Ci0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0KLSNpbmNsdWRlICJtbnRvcHRz LmgiCi0KLWludCBnZXRtbnRfc2lsZW50ID0gMDsKLQotdm9pZAotZ2V0bW50b3B0cyhjb25zdCBj aGFyICpvcHRpb25zLCBjb25zdCBzdHJ1Y3QgbW50b3B0ICptMCwgaW50ICpmbGFncCwKLQlpbnQg KmFsdGZsYWdwKQotewotCWNvbnN0IHN0cnVjdCBtbnRvcHQgKm07Ci0JaW50IG5lZ2F0aXZlLCBs ZW47Ci0JY2hhciAqb3B0LCAqb3B0YnVmLCAqcDsKLQlpbnQgKnRoaXNmbGFncDsKLQotCS8qIENv cHkgb3B0aW9uIHN0cmluZywgc2luY2UgaXQgaXMgYWJvdXQgdG8gYmUgdG9ybiBhc3VuZGVyLi4u ICovCi0JaWYgKChvcHRidWYgPSBzdHJkdXAob3B0aW9ucykpID09IE5VTEwpCi0JCWVycigxLCBO VUxMKTsKLQotCWZvciAob3B0ID0gb3B0YnVmOyAob3B0ID0gc3RydG9rKG9wdCwgIiwiKSkgIT0g TlVMTDsgb3B0ID0gTlVMTCkgewotCQkvKiBDaGVjayBmb3IgIm5vIiBwcmVmaXguICovCi0JCWlm IChvcHRbMF0gPT0gJ24nICYmIG9wdFsxXSA9PSAnbycpIHsKLQkJCW5lZ2F0aXZlID0gMTsKLQkJ CW9wdCArPSAyOwotCQl9IGVsc2UKLQkJCW5lZ2F0aXZlID0gMDsKLQotCQkvKgotCQkgKiBmb3Ig b3B0aW9ucyB3aXRoIGFzc2lnbm1lbnRzIGluIHRoZW0gKGllLiBxdW90YXMpCi0JCSAqIGlnbm9y ZSB0aGUgYXNzaWdubWVudCBhcyBpdCdzIGhhbmRsZWQgZWxzZXdoZXJlCi0JCSAqLwotCQlwID0g c3RyY2hyKG9wdCwgJz0nKTsKLQkJaWYgKHAgIT0gTlVMTCkKLQkJCSAqKytwID0gJ1wwJzsKLQot CQkvKiBTY2FuIG9wdGlvbiB0YWJsZS4gKi8KLQkJZm9yIChtID0gbTA7IG0tPm1fb3B0aW9uICE9 IE5VTEw7ICsrbSkgewotCQkJbGVuID0gc3RybGVuKG0tPm1fb3B0aW9uKTsKLQkJCWlmIChzdHJu Y2FzZWNtcChvcHQsIG0tPm1fb3B0aW9uLCBsZW4pID09IDApCi0JCQkJaWYgKG9wdFtsZW5dID09 ICdcMCcgfHwgb3B0W2xlbl0gPT0gJz0nKQotCQkJCQlicmVhazsKLQkJfQotCi0JCS8qIFNhdmUg ZmxhZywgb3IgZmFpbCBpZiBvcHRpb24gaXMgbm90IHJlY29nbml6ZWQuICovCi0JCWlmIChtLT5t X29wdGlvbikgewotCQkJdGhpc2ZsYWdwID0gbS0+bV9hbHRsb2MgPyBhbHRmbGFncCA6IGZsYWdw OwotCQkJaWYgKG5lZ2F0aXZlID09IG0tPm1faW52ZXJzZSkKLQkJCQkqdGhpc2ZsYWdwIHw9IG0t Pm1fZmxhZzsKLQkJCWVsc2UKLQkJCQkqdGhpc2ZsYWdwICY9IH5tLT5tX2ZsYWc7Ci0JCX0gZWxz ZSBpZiAoIWdldG1udF9zaWxlbnQpIHsKLQkJCWVycngoMSwgIi1vICVzOiBvcHRpb24gbm90IHN1 cHBvcnRlZCIsIG9wdCk7Ci0JCX0KLQl9Ci0KLQlmcmVlKG9wdGJ1Zik7Ci19Ci0KLXZvaWQKLXJt c2xhc2hlcyhjaGFyICpycnBpbiwgY2hhciAqcnJwb3V0KQotewotCWNoYXIgKnJycG91dHN0YXJ0 OwotCi0JKnJycG91dCA9ICpycnBpbjsKLQlmb3IgKHJycG91dHN0YXJ0ID0gcnJwb3V0OyAqcnJw aW4gIT0gJ1wwJzsgKnJycG91dCsrID0gKnJycGluKyspIHsKLQotCQkvKiBza2lwIGFsbCBkb3Vi bGUgc2xhc2hlcyAqLwotCQl3aGlsZSAoKnJycGluID09ICcvJyAmJiAqKHJycGluICsgMSkgPT0g Jy8nKQotCQkJIHJycGluKys7Ci0JfQotCi0JLyogcmVtb3ZlIHRyYWlsaW5nIHNsYXNoIGlmIG5l Y2Vzc2FyeSAqLwotCWlmIChycnBvdXQgLSBycnBvdXRzdGFydCA+IDEgJiYgKihycnBvdXQgLSAx KSA9PSAnLycpCi0JCSoocnJwb3V0IC0gMSkgPSAnXDAnOwotCWVsc2UKLQkJKnJycG91dCA9ICdc MCc7Ci19Ci0KLWludAotY2hlY2twYXRoKGNvbnN0IGNoYXIgKnBhdGgsIGNoYXIgKnJlc29sdmVk KQotewotCXN0cnVjdCBzdGF0IHNiOwotCi0JaWYgKHJlYWxwYXRoKHBhdGgsIHJlc29sdmVkKSA9 PSBOVUxMIHx8IHN0YXQocmVzb2x2ZWQsICZzYikgIT0gMCkKLQkJcmV0dXJuICgxKTsKLQlpZiAo IVNfSVNESVIoc2Iuc3RfbW9kZSkpIHsKLQkJZXJybm8gPSBFTk9URElSOwotCQlyZXR1cm4gKDEp OwotCX0KLQlyZXR1cm4gKDApOwotfQotCi12b2lkCi1idWlsZF9pb3ZlYyhzdHJ1Y3QgaW92ZWMg Kippb3YsIGludCAqaW92bGVuLCBjb25zdCBjaGFyICpuYW1lLCB2b2lkICp2YWwsCi0JICAgIHNp emVfdCBsZW4pCi17Ci0JaW50IGk7Ci0KLQlpZiAoKmlvdmxlbiA8IDApCi0JCXJldHVybjsKLQlp ID0gKmlvdmxlbjsKLQkqaW92ID0gcmVhbGxvYygqaW92LCBzaXplb2YgKippb3YgKiAoaSArIDIp KTsKLQlpZiAoKmlvdiA9PSBOVUxMKSB7Ci0JCSppb3ZsZW4gPSAtMTsKLQkJcmV0dXJuOwotCX0K LQkoKmlvdilbaV0uaW92X2Jhc2UgPSBzdHJkdXAobmFtZSk7Ci0JKCppb3YpW2ldLmlvdl9sZW4g PSBzdHJsZW4obmFtZSkgKyAxOwotCWkrKzsKLQkoKmlvdilbaV0uaW92X2Jhc2UgPSB2YWw7Ci0J aWYgKGxlbiA9PSAoc2l6ZV90KS0xKSB7Ci0JCWlmICh2YWwgIT0gTlVMTCkKLQkJCWxlbiA9IHN0 cmxlbih2YWwpICsgMTsKLQkJZWxzZQotCQkJbGVuID0gMDsKLQl9Ci0JKCppb3YpW2ldLmlvdl9s ZW4gPSAoaW50KWxlbjsKLQkqaW92bGVuID0gKytpOwotfQotCi0vKgotICogVGhpcyBmdW5jdGlv biBpcyBuZWVkZWQgZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBwYXJhbWV0ZXJzCi0gKiB3aGljaCB1 c2VkIHRvIHVzZSB0aGUgbW91bnRfYXJnZigpIGNvbW1hbmQgZm9yIHRoZSBvbGQgbW91bnQoKSBz eXNjYWxsLgotICovCi12b2lkCi1idWlsZF9pb3ZlY19hcmdmKHN0cnVjdCBpb3ZlYyAqKmlvdiwg aW50ICppb3ZsZW4sIGNvbnN0IGNoYXIgKm5hbWUsCi0gICAgY29uc3QgY2hhciAqZm10LCAuLi4p Ci17Ci0JdmFfbGlzdCBhcDsKLQljaGFyIHZhbFsyNTVdID0geyAwIH07Ci0KLQl2YV9zdGFydChh cCwgZm10KTsKLQl2c25wcmludGYodmFsLCBzaXplb2YodmFsKSwgZm10LCBhcCk7Ci0JdmFfZW5k KGFwKTsKLQlidWlsZF9pb3ZlYyhpb3YsIGlvdmxlbiwgbmFtZSwgc3RyZHVwKHZhbCksIChzaXpl X3QpLTEpOwotfQpJbmRleDogc2Jpbi9tb3VudC9tbnRvcHRzLmgKPT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gc2Jp bi9tb3VudC9tbnRvcHRzLmgJKHJldmlzaW9uIDI0NzE0OSkKKysrIHNiaW4vbW91bnQvbW50b3B0 cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDk5ICswLDAgQEAKLS8qLQotICogQ29weXJpZ2h0IChj KSAxOTk0Ci0gKiAgICAgIFRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3Ju aWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0 aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z Ci0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0 aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp c2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogNC4gTmVpdGhlciB0aGUgbmFt ZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKLSAq ICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZy b20gdGhpcyBzb2Z0d2FyZQotICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBl cm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5U UyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKLSAqIEFOWSBFWFBSRVNTIE9SIElNUExJ RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1Q TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU SUNVTEFSIFBVUlBPU0UKLSAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhF IFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQotICogRk9SIEFOWSBESVJFQ1QsIElO RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwK LSAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP RiBTVUJTVElUVVRFIEdPT0RTCi0gKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSAqIEhPV0VWRVIgQ0FVU0VEIEFO RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU Ci0gKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT RSkgQVJJU0lORyBJTiBBTlkgV0FZCi0gKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0gKiBTVUNIIERBTUFHRS4K LSAqCi0gKglAKCMpbW50b3B0cy5oCTguNyAoQmVya2VsZXkpIDMvMjkvOTUKLSAqICRGcmVlQlNE JAotICovCi0KLXN0cnVjdCBtbnRvcHQgewotCWNvbnN0IGNoYXIgKm1fb3B0aW9uOwkvKiBvcHRp b24gbmFtZSAqLwotCWludCBtX2ludmVyc2U7CQkvKiBpZiBhIG5lZ2F0aXZlIG9wdGlvbiwgZS5n LiAiYXRpbWUiICovCi0JaW50IG1fZmxhZzsJCS8qIGJpdCB0byBzZXQsIGUuZy4gTU5UX1JET05M WSAqLwotCWludCBtX2FsdGxvYzsJCS8qIDEgPT4gc2V0IGJpdCBpbiBhbHRmbGFncyAqLwotfTsK LQotLyogVXNlci12aXNpYmxlIE1OVF8gZmxhZ3MuICovCi0jZGVmaW5lIE1PUFRfQVNZTkMJCXsg ImFzeW5jIiwJMCwgTU5UX0FTWU5DLCAwIH0KLSNkZWZpbmUgTU9QVF9OT0FUSU1FCQl7ICJhdGlt ZSIsCTEsIE1OVF9OT0FUSU1FLCAwIH0KLSNkZWZpbmUgTU9QVF9OT0VYRUMJCXsgImV4ZWMiLAkx LCBNTlRfTk9FWEVDLCAwIH0KLSNkZWZpbmUgTU9QVF9OT1NVSUQJCXsgInN1aWQiLAkxLCBNTlRf Tk9TVUlELCAwIH0KLSNkZWZpbmUgTU9QVF9OT1NZTUZPTExPVwl7ICJzeW1mb2xsb3ciLCAgMSwg TU5UX05PU1lNRk9MTE9XLCAwIH0KLSNkZWZpbmUgTU9QVF9SRE9OTFkJCXsgInJkb25seSIsCTAs IE1OVF9SRE9OTFksIDAgfQotI2RlZmluZSBNT1BUX1NZTkMJCXsgInN5bmMiLAkwLCBNTlRfU1lO Q0hST05PVVMsIDAgfQotI2RlZmluZSBNT1BUX1VOSU9OCQl7ICJ1bmlvbiIsCTAsIE1OVF9VTklP TiwgMCB9Ci0jZGVmaW5lIE1PUFRfVVNFUlFVT1RBCQl7ICJ1c2VycXVvdGEiLAkwLCAwLCAwIH0K LSNkZWZpbmUgTU9QVF9HUk9VUFFVT1RBCQl7ICJncm91cHF1b3RhIiwJMCwgMCwgMCB9Ci0jZGVm aW5lIE1PUFRfTk9DTFVTVEVSUgkJeyAiY2x1c3RlcnIiLAkxLCBNTlRfTk9DTFVTVEVSUiwgMCB9 Ci0jZGVmaW5lIE1PUFRfTk9DTFVTVEVSVwkJeyAiY2x1c3RlcnciLAkxLCBNTlRfTk9DTFVTVEVS VywgMCB9Ci0jZGVmaW5lIE1PUFRfU1VJRERJUgkJeyAic3VpZGRpciIsCTAsIE1OVF9TVUlERElS LCAwIH0KLSNkZWZpbmUgTU9QVF9TTkFQU0hPVAkJeyAic25hcHNob3QiLAkwLCBNTlRfU05BUFNI T1QsIDAgfQotI2RlZmluZSBNT1BUX01VTFRJTEFCRUwJCXsgIm11bHRpbGFiZWwiLAkwLCBNTlRf TVVMVElMQUJFTCwgMCB9Ci0jZGVmaW5lIE1PUFRfQUNMUwkJeyAiYWNscyIsCTAsIE1OVF9BQ0xT LCAwIH0KLSNkZWZpbmUgTU9QVF9ORlM0QUNMUwkJeyAibmZzdjRhY2xzIiwJMCwgTU5UX05GUzRB Q0xTLCAwIH0KLQotLyogQ29udHJvbCBmbGFncy4gKi8KLSNkZWZpbmUgTU9QVF9GT1JDRQkJeyAi Zm9yY2UiLAkwLCBNTlRfRk9SQ0UsIDAgfQotI2RlZmluZSBNT1BUX1VQREFURQkJeyAidXBkYXRl IiwJMCwgTU5UX1VQREFURSwgMCB9Ci0jZGVmaW5lIE1PUFRfUk8JCQl7ICJybyIsCQkwLCBNTlRf UkRPTkxZLCAwIH0KLSNkZWZpbmUgTU9QVF9SVwkJCXsgInJ3IiwJCTEsIE1OVF9SRE9OTFksIDAg fQotCi0vKiBUaGlzIGlzIHBhcnNlZCBieSBtb3VudCg4KSwgYnV0IGlzIGlnbm9yZWQgYnkgc3Bl Y2lmaWMgbW91bnRfKig4KXMuICovCi0jZGVmaW5lIE1PUFRfQVVUTwkJeyAiYXV0byIsCTAsIDAs IDAgfQotCi0vKiBBIGhhbmR5IG1hY3JvIGFzIHRlcm1pbmF0b3Igb2YgTU5UXyBhcnJheS4gKi8K LSNkZWZpbmUgTU9QVF9FTkQJCXsgTlVMTCwJCTAsIDAsIDAgfQotCi0jZGVmaW5lIE1PUFRfRlNU QUJfQ09NUEFUCQkJCQkJXAotCU1PUFRfUk8sCQkJCQkJCVwKLQlNT1BUX1JXLAkJCQkJCQlcCi0J TU9QVF9BVVRPCi0KLS8qIFN0YW5kYXJkIG9wdGlvbnMgd2hpY2ggYWxsIG1vdW50cyBjYW4gdW5k ZXJzdGFuZC4gKi8KLSNkZWZpbmUgTU9QVF9TVERPUFRTCQkJCQkJCVwKLQlNT1BUX1VTRVJRVU9U QSwJCQkJCQkJXAotCU1PUFRfR1JPVVBRVU9UQSwJCQkJCQlcCi0JTU9QVF9GU1RBQl9DT01QQVQs CQkJCQkJXAotCU1PUFRfTk9BVElNRSwJCQkJCQkJXAotCU1PUFRfTk9FWEVDLAkJCQkJCQlcCi0J TU9QVF9TVUlERElSLAkJLyogbXVzdCBiZSBiZWZvcmUgTU9QVF9OT1NVSUQgKi8JXAotCU1PUFRf Tk9TVUlELAkJCQkJCQlcCi0JTU9QVF9OT1NZTUZPTExPVywJCQkJCQlcCi0JTU9QVF9SRE9OTFks CQkJCQkJCVwKLQlNT1BUX1VOSU9OLAkJCQkJCQlcCi0JTU9QVF9OT0NMVVNURVJSLAkJCQkJCVwK LQlNT1BUX05PQ0xVU1RFUlcsCQkJCQkJXAotCU1PUFRfTVVMVElMQUJFTCwJCQkJCQlcCi0JTU9Q VF9BQ0xTLAkJCQkJCQlcCi0JTU9QVF9ORlM0QUNMUwotCi12b2lkIGdldG1udG9wdHMoY29uc3Qg Y2hhciAqLCBjb25zdCBzdHJ1Y3QgbW50b3B0ICosIGludCAqLCBpbnQgKik7Ci12b2lkIHJtc2xh c2hlcyhjaGFyICosIGNoYXIgKik7Ci1pbnQgY2hlY2twYXRoKGNvbnN0IGNoYXIgKiwgY2hhciBy ZXNvbHZlZF9wYXRoW10pOwotZXh0ZXJuIGludCBnZXRtbnRfc2lsZW50Owotdm9pZCBidWlsZF9p b3ZlYyhzdHJ1Y3QgaW92ZWMgKippb3YsIGludCAqaW92bGVuLCBjb25zdCBjaGFyICpuYW1lLCB2 b2lkICp2YWwsIHNpemVfdCBsZW4pOwotdm9pZCBidWlsZF9pb3ZlY19hcmdmKHN0cnVjdCBpb3Zl YyAqKmlvdiwgaW50ICppb3ZsZW4sIGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKmZtdCwg Li4uKTsKSW5kZXg6IHNiaW4vbW91bnQvbW91bnQuYwo9PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBzYmluL21vdW50 L21vdW50LmMJKHJldmlzaW9uIDI0NzE0OSkKKysrIHNiaW4vbW91bnQvbW91bnQuYwkod29ya2lu ZyBjb3B5KQpAQCAtNDgsNiArNDgsNyBAQAogI2luY2x1ZGUgPGVyci5oPgogI2luY2x1ZGUgPGVy cm5vLmg+CiAjaW5jbHVkZSA8ZnN0YWIuaD4KKyNpbmNsdWRlIDxtbnRvcHRzLmg+CiAjaW5jbHVk ZSA8cGF0aHMuaD4KICNpbmNsdWRlIDxwd2QuaD4KICNpbmNsdWRlIDxzaWduYWwuaD4KQEAgLTU5 LDcgKzYwLDYgQEAKICNpbmNsdWRlIDxsaWJ1dGlsLmg+CiAKICNpbmNsdWRlICJleHRlcm4uaCIK LSNpbmNsdWRlICJtbnRvcHRzLmgiCiAjaW5jbHVkZSAicGF0aG5hbWVzLmgiCiAKIC8qIGBtZXRh JyBvcHRpb25zICovCkluZGV4OiBzYmluL21vdW50L21vdW50X2ZzLmMKPT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g c2Jpbi9tb3VudC9tb3VudF9mcy5jCShyZXZpc2lvbiAyNDcxNDkpCisrKyBzYmluL21vdW50L21v dW50X2ZzLmMJKHdvcmtpbmcgY29weSkKQEAgLTUwLDEzICs1MCwxMyBAQAogI2luY2x1ZGUgPGVy ci5oPgogI2luY2x1ZGUgPGdldG9wdC5oPgogI2luY2x1ZGUgPGxpYmdlbi5oPgorI2luY2x1ZGUg PG1udG9wdHMuaD4KICNpbmNsdWRlIDxzdGRpby5oPgogI2luY2x1ZGUgPHN0ZGxpYi5oPgogI2lu Y2x1ZGUgPHN0cmluZy5oPgogI2luY2x1ZGUgPHVuaXN0ZC5oPgogCiAjaW5jbHVkZSAiZXh0ZXJu LmgiCi0jaW5jbHVkZSAibW50b3B0cy5oIgogCiBzdGF0aWMgc3RydWN0IG1udG9wdCBtb3B0c1td ID0gewogCU1PUFRfU1RET1BUUywKSW5kZXg6IHNiaW4vbW91bnRfY2Q5NjYwL01ha2VmaWxlCj09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT0KLS0tIHNiaW4vbW91bnRfY2Q5NjYwL01ha2VmaWxlCShyZXZpc2lvbiAyNDcxNDkp CisrKyBzYmluL21vdW50X2NkOTY2MC9NYWtlZmlsZQkod29ya2luZyBjb3B5KQpAQCAtMiwxOCAr MiwxMiBAQAogIyAkRnJlZUJTRCQKIAogUFJPRz0JbW91bnRfY2Q5NjYwCi1TUkNTPQltb3VudF9j ZDk2NjAuYyBnZXRtbnRvcHRzLmMKIE1BTj0JbW91bnRfY2Q5NjYwLjgKLURQQUREPQkke0xJQktJ Q09OVn0KLUxEQUREPQktbGtpY29udgorRFBBREQ9CSR7TElCS0lDT05WfSAke0xJQlVUSUx9CitM REFERD0JLWxraWNvbnYgLWx1dGlsCiAKLU1PVU5UPQkkey5DVVJESVJ9Ly4uL21vdW50Ci1DRkxB R1MrPSAtSSR7TU9VTlR9Ci0KICMgTmVlZHMgdG8gYmUgZHluYW1pY2FsbHkgbGlua2VkIGZvciBv cHRpb25hbCBkbG9wZW4oKSBhY2Nlc3MgdG8KICMgdXNlcmxhbmQgbGliaWNvbnYKIE5PX1NIQVJF RD89CU5PCiAKLS5QQVRIOgkke01PVU5UfQotCiAuaW5jbHVkZSA8YnNkLnByb2cubWs+CkluZGV4 OiBzYmluL21vdW50X2NkOTY2MC9tb3VudF9jZDk2NjAuYwo9PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBzYmluL21v dW50X2NkOTY2MC9tb3VudF9jZDk2NjAuYwkocmV2aXNpb24gMjQ3MTQ5KQorKysgc2Jpbi9tb3Vu dF9jZDk2NjAvbW91bnRfY2Q5NjYwLmMJKHdvcmtpbmcgY29weSkKQEAgLTYwLDE0ICs2MCwxMyBA QAogCiAjaW5jbHVkZSA8ZXJyLmg+CiAjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxtbnRv cHRzLmg+CiAjaW5jbHVkZSA8c3RkbGliLmg+CiAjaW5jbHVkZSA8c3RkaW8uaD4KICNpbmNsdWRl IDxzdHJpbmcuaD4KICNpbmNsdWRlIDxzeXNleGl0cy5oPgogI2luY2x1ZGUgPHVuaXN0ZC5oPgog Ci0jaW5jbHVkZSAibW50b3B0cy5oIgotCiBzdGF0aWMgc3RydWN0IG1udG9wdCBtb3B0c1tdID0g ewogCU1PUFRfU1RET1BUUywKIAlNT1BUX1VQREFURSwKSW5kZXg6IHNiaW4vbW91bnRfZXh0MmZz L01ha2VmaWxlCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT0KLS0tIHNiaW4vbW91bnRfZXh0MmZzL01ha2VmaWxlCShyZXZp c2lvbiAyNDcxNDkpCisrKyBzYmluL21vdW50X2V4dDJmcy9NYWtlZmlsZQkod29ya2luZyBjb3B5 KQpAQCAtMiwxMyArMiwxMSBAQAogIyAkRnJlZUJTRCQKIAogUFJPRz0JbW91bnRfZXh0MmZzCi1T UkNTPQltb3VudF9leHQyZnMuYyBnZXRtbnRvcHRzLmMKIE1BTj0JbW91bnRfZXh0MmZzLjgKIAog V0FSTlM/PQkyCi1NT1VOVD0JJHsuQ1VSRElSfS8uLi9tb3VudAotQ0ZMQUdTKz0gLUkke01PVU5U fQogCi0uUEFUSDoJJHtNT1VOVH0KK0RQQUREPQkke0xJQlVUSUx9CitMREFERD0JLWx1dGlsCiAK IC5pbmNsdWRlIDxic2QucHJvZy5taz4KSW5kZXg6IHNiaW4vbW91bnRfZXh0MmZzL21vdW50X2V4 dDJmcy5jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT0KLS0tIHNiaW4vbW91bnRfZXh0MmZzL21vdW50X2V4dDJmcy5jCShy ZXZpc2lvbiAyNDcxNDkpCisrKyBzYmluL21vdW50X2V4dDJmcy9tb3VudF9leHQyZnMuYwkod29y a2luZyBjb3B5KQpAQCAtNDYsMTQgKzQ2LDEzIEBACiAjaW5jbHVkZSA8c3lzL3Vpby5oPgogCiAj aW5jbHVkZSA8ZXJyLmg+CisjaW5jbHVkZSA8bW50b3B0cy5oPgogI2luY2x1ZGUgPHN0ZGlvLmg+ CiAjaW5jbHVkZSA8c3RkbGliLmg+CiAjaW5jbHVkZSA8c3RyaW5nLmg+CiAjaW5jbHVkZSA8c3lz ZXhpdHMuaD4KICNpbmNsdWRlIDx1bmlzdGQuaD4KIAotI2luY2x1ZGUgIm1udG9wdHMuaCIKLQog c3RhdGljIHZvaWQJdXNhZ2Uodm9pZCk7CiAKIGludApJbmRleDogc2Jpbi9tb3VudF9mdXNlZnMv TWFrZWZpbGUKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PQotLS0gc2Jpbi9tb3VudF9mdXNlZnMvTWFrZWZpbGUJKHJldmlz aW9uIDI0NzE0OSkKKysrIHNiaW4vbW91bnRfZnVzZWZzL01ha2VmaWxlCSh3b3JraW5nIGNvcHkp CkBAIC0yMSwxMyArMjEsMTAgQEAKIC5lbmRpZgogCiBQUk9HPQltb3VudF9mdXNlZnMKLVNSQ1M9 CW1vdW50X2Z1c2Vmcy5jIGdldG1udG9wdHMuYwogTUFOOD0JbW91bnRfZnVzZWZzLjgKIE5PX01B TkNPTVBSRVNTPz0JeWVzCiAKLU1PVU5UPQkkey5DVVJESVJ9Ly4uL21vdW50Ci1DRkxBR1MrPQkt SSR7TU9VTlR9CitEUEFERD0JJHtMSUJVVElMfQorTERBREQ9CS1sdXRpbAogCi0uUEFUSDogJHtN T1VOVH0KLQogLmluY2x1ZGUgPGJzZC5wcm9nLm1rPgpJbmRleDogc2Jpbi9tb3VudF9mdXNlZnMv bW91bnRfZnVzZWZzLmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gc2Jpbi9tb3VudF9mdXNlZnMvbW91bnRfZnVz ZWZzLmMJKHJldmlzaW9uIDI0NzE0OSkKKysrIHNiaW4vbW91bnRfZnVzZWZzL21vdW50X2Z1c2Vm cy5jCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw2ICszNiw3IEBACiAjaW5jbHVkZSA8c3lzL3N5c2N0 bC5oPgogCiAjaW5jbHVkZSA8ZXJyLmg+CisjaW5jbHVkZSA8bW50b3B0cy5oPgogI2luY2x1ZGUg PHN0ZGlvLmg+CiAjaW5jbHVkZSA8c3RkbGliLmg+CiAjaW5jbHVkZSA8c3RyaW5nLmg+CkBAIC00 OCw4ICs0OSw2IEBACiAjaW5jbHVkZSA8b3NyZWxkYXRlLmg+CiAjaW5jbHVkZSA8cGF0aHMuaD4K IAotI2luY2x1ZGUgIm1udG9wdHMuaCIKLQogI2lmbmRlZiBGVVNFNEJTRF9WRVJTSU9OCiAjZGVm aW5lCUZVU0U0QlNEX1ZFUlNJT04JIjAuMy45LXByZTEiCiAjZW5kaWYKSW5kZXg6IHNiaW4vbW91 bnRfaHBmcy9NYWtlZmlsZQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBzYmluL21vdW50X2hwZnMvTWFrZWZpbGUJ KHJldmlzaW9uIDI0NzE0OSkKKysrIHNiaW4vbW91bnRfaHBmcy9NYWtlZmlsZQkod29ya2luZyBj b3B5KQpAQCAtMywxMiArMywxMSBAQAogIwogCiBQUk9HPQltb3VudF9ocGZzCi1TUkNTPQltb3Vu dF9ocGZzLmMgZ2V0bW50b3B0cy5jCiBNQU49CW1vdW50X2hwZnMuOAogCi1NT1VOVD0JJHsuQ1VS RElSfS8uLi9tb3VudAotQ0ZMQUdTKz0gLUkke01PVU5UfSAtREhQRlMKK0NGTEFHUys9IC1ESFBG UwogCi0uUEFUSDoJJHtNT1VOVH0KK0RQQUREPQkke0xJQlVUSUx9CitMREFERD0JLWx1dGlsCiAK IC5pbmNsdWRlIDxic2QucHJvZy5taz4KSW5kZXg6IHNiaW4vbW91bnRfaHBmcy9tb3VudF9ocGZz LmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PQotLS0gc2Jpbi9tb3VudF9ocGZzL21vdW50X2hwZnMuYwkocmV2aXNpb24g MjQ3MTQ5KQorKysgc2Jpbi9tb3VudF9ocGZzL21vdW50X2hwZnMuYwkod29ya2luZyBjb3B5KQpA QCAtMzksNiArMzksNyBAQAogI2luY2x1ZGUgPGN0eXBlLmg+CiAjaW5jbHVkZSA8ZXJyLmg+CiAj aW5jbHVkZSA8Z3JwLmg+CisjaW5jbHVkZSA8bW50b3B0cy5oPgogI2luY2x1ZGUgPHB3ZC5oPgog I2luY2x1ZGUgPHN0ZGlvLmg+CiAjaW5jbHVkZSA8c3RkbGliLmg+CkBAIC00Niw4ICs0Nyw2IEBA CiAjaW5jbHVkZSA8c3lzZXhpdHMuaD4KICNpbmNsdWRlIDx1bmlzdGQuaD4KIAotI2luY2x1ZGUg Im1udG9wdHMuaCIKLQogc3RhdGljIHN0cnVjdCBtbnRvcHQgbW9wdHNbXSA9IHsKIAlNT1BUX1NU RE9QVFMsCiAJTU9QVF9FTkQKSW5kZXg6IHNiaW4vbW91bnRfbXNkb3Nmcy9NYWtlZmlsZQo9PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09Ci0tLSBzYmluL21vdW50X21zZG9zZnMvTWFrZWZpbGUJKHJldmlzaW9uIDI0NzE0OSkK KysrIHNiaW4vbW91bnRfbXNkb3Nmcy9NYWtlZmlsZQkod29ya2luZyBjb3B5KQpAQCAtMywxOCAr MywxMiBAQAogIwogCiBQUk9HPQltb3VudF9tc2Rvc2ZzCi1TUkNTPQltb3VudF9tc2Rvc2ZzLmMg Z2V0bW50b3B0cy5jCiBNQU49CW1vdW50X21zZG9zZnMuOAotRFBBREQ9CSR7TElCS0lDT05WfQot TERBREQ9CS1sa2ljb252CitEUEFERD0JJHtMSUJLSUNPTlZ9ICR7TElCVVRJTH0KK0xEQUREPQkt bGtpY29udiAtbHV0aWwKIAotTU9VTlQ9CSR7LkNVUkRJUn0vLi4vbW91bnQKLUNGTEFHUys9IC1J JHtNT1VOVH0KLQogIyBOZWVkcyB0byBiZSBkeW5hbWljYWxseSBsaW5rZWQgZm9yIG9wdGlvbmFs IGRsb3BlbigpIGFjY2VzcyB0bwogIyB1c2VybGFuZCBsaWJpY29udgogTk9fU0hBUkVEPz0JTk8K IAotLlBBVEg6CSR7TU9VTlR9Ci0KIC5pbmNsdWRlIDxic2QucHJvZy5taz4KSW5kZXg6IHNiaW4v bW91bnRfbXNkb3Nmcy9tb3VudF9tc2Rvc2ZzLmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gc2Jpbi9tb3VudF9t c2Rvc2ZzL21vdW50X21zZG9zZnMuYwkocmV2aXNpb24gMjQ3MTQ5KQorKysgc2Jpbi9tb3VudF9t c2Rvc2ZzL21vdW50X21zZG9zZnMuYwkod29ya2luZyBjb3B5KQpAQCAtNDYsNiArNDYsNyBAQAog I2luY2x1ZGUgPGVyci5oPgogI2luY2x1ZGUgPGdycC5oPgogI2luY2x1ZGUgPGxvY2FsZS5oPgor I2luY2x1ZGUgPG1udG9wdHMuaD4KICNpbmNsdWRlIDxwd2QuaD4KICNpbmNsdWRlIDxzdGRpby5o PgogLyogbXVzdCBiZSBhZnRlciBzdGRpbyB0byBkZWNsYXJlIGZwYXJzZWxuICovCkBAIC01NSw4 ICs1Niw2IEBACiAjaW5jbHVkZSA8c3lzZXhpdHMuaD4KICNpbmNsdWRlIDx1bmlzdGQuaD4KIAot I2luY2x1ZGUgIm1udG9wdHMuaCIKLQogc3RhdGljIGdpZF90CWFfZ2lkKGNoYXIgKik7CiBzdGF0 aWMgdWlkX3QJYV91aWQoY2hhciAqKTsKIHN0YXRpYyBtb2RlX3QJYV9tYXNrKGNoYXIgKik7Cklu ZGV4OiBzYmluL21vdW50X25mcy9NYWtlZmlsZQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBzYmluL21vdW50X25m cy9NYWtlZmlsZQkocmV2aXNpb24gMjQ3MTQ5KQorKysgc2Jpbi9tb3VudF9uZnMvTWFrZWZpbGUJ KHdvcmtpbmcgY29weSkKQEAgLTMsMTcgKzMsMTkgQEAKICMgJEZyZWVCU0QkCiAKIFBST0c9CW1v dW50X25mcwotU1JDUz0JbW91bnRfbmZzLmMgZ2V0bW50b3B0cy5jIG1vdW50dGFiLmMKK1NSQ1M9 CW1vdW50X25mcy5jIG1vdW50dGFiLmMKIE1BTj0JbW91bnRfbmZzLjgKIE1MSU5LUz0JbW91bnRf bmZzLjggbW91bnRfb2xkbmZzLjgKIAotTU9VTlQ9CSR7LkNVUkRJUn0vLi4vbW91bnQKIFVNTlRB TEw9ICR7LkNVUkRJUn0vLi4vLi4vdXNyLnNiaW4vcnBjLnVtbnRhbGwKLUNGTEFHUys9IC1ETkZT IC1JJHtNT1VOVH0gLUkke1VNTlRBTEx9CitDRkxBR1MrPSAtRE5GUyAtSSR7VU1OVEFMTH0KIFdB Uk5TPz0JMwogCitEUEFERD0JJHtMSUJVVElMfQorTERBREQ9CS1sdXRpbAorCiBMSU5LUz0JJHtC SU5ESVJ9L21vdW50X25mcyAke0JJTkRJUn0vbW91bnRfb2xkbmZzCiAKLS5QQVRIOiAke01PVU5U fSAke1VNTlRBTEx9CisuUEFUSDogJHtVTU5UQUxMfQogCiAuaW5jbHVkZSA8YnNkLnByb2cubWs+ CkluZGV4OiBzYmluL21vdW50X25mcy9tb3VudF9uZnMuYwo9PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBzYmluL21v dW50X25mcy9tb3VudF9uZnMuYwkocmV2aXNpb24gMjQ3MTQ5KQorKysgc2Jpbi9tb3VudF9uZnMv bW91bnRfbmZzLmMJKHdvcmtpbmcgY29weSkKQEAgLTY3LDYgKzY3LDcgQEAKICNpbmNsdWRlIDxl cnIuaD4KICNpbmNsdWRlIDxlcnJuby5oPgogI2luY2x1ZGUgPGZjbnRsLmg+CisjaW5jbHVkZSA8 bW50b3B0cy5oPgogI2luY2x1ZGUgPG5ldGRiLmg+CiAjaW5jbHVkZSA8c3RkaW8uaD4KICNpbmNs dWRlIDxzdGRsaWIuaD4KQEAgLTc1LDcgKzc2LDYgQEAKICNpbmNsdWRlIDxzeXNleGl0cy5oPgog I2luY2x1ZGUgPHVuaXN0ZC5oPgogCi0jaW5jbHVkZSAibW50b3B0cy5oIgogI2luY2x1ZGUgIm1v dW50dGFiLmgiCiAKIC8qIFRhYmxlIGZvciBhZixzb3R5cGUgLT4gbmV0aWQgY29udmVyc2lvbnMu ICovCkluZGV4OiBzYmluL21vdW50X250ZnMvTWFrZWZpbGUKPT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gc2Jpbi9t b3VudF9udGZzL01ha2VmaWxlCShyZXZpc2lvbiAyNDcxNDkpCisrKyBzYmluL21vdW50X250ZnMv TWFrZWZpbGUJKHdvcmtpbmcgY29weSkKQEAgLTMsMTggKzMsMTIgQEAKICMKIAogUFJPRz0JbW91 bnRfbnRmcwotU1JDUz0JbW91bnRfbnRmcy5jIGdldG1udG9wdHMuYwogTUFOPQltb3VudF9udGZz LjgKLURQQUREPQkke0xJQktJQ09OVn0KLUxEQUREPQktbGtpY29udgorRFBBREQ9CSR7TElCS0lD T05WfSAke0xJQlVUSUx9CitMREFERD0JLWxraWNvbnYgLWx1dGlsCiAKLU1PVU5UPQkkey5DVVJE SVJ9Ly4uL21vdW50Ci1DRkxBR1MrPSAtSSR7TU9VTlR9Ci0KICMgTmVlZHMgdG8gYmUgZHluYW1p Y2FsbHkgbGlua2VkIGZvciBvcHRpb25hbCBkbG9wZW4oKSBhY2Nlc3MgdG8KICMgdXNlcmxhbmQg bGliaWNvbnYKIE5PX1NIQVJFRD89CU5PCiAKLS5QQVRIOgkke01PVU5UfQotCiAuaW5jbHVkZSA8 YnNkLnByb2cubWs+CkluZGV4OiBzYmluL21vdW50X250ZnMvbW91bnRfbnRmcy5jCj09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT0KLS0tIHNiaW4vbW91bnRfbnRmcy9tb3VudF9udGZzLmMJKHJldmlzaW9uIDI0NzE0OSkKKysr IHNiaW4vbW91bnRfbnRmcy9tb3VudF9udGZzLmMJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDYgKzQ0 LDcgQEAKICNpbmNsdWRlIDxjdHlwZS5oPgogI2luY2x1ZGUgPGVyci5oPgogI2luY2x1ZGUgPGdy cC5oPgorI2luY2x1ZGUgPG1udG9wdHMuaD4KICNpbmNsdWRlIDxwd2QuaD4KICNpbmNsdWRlIDxz dGRpby5oPgogI2luY2x1ZGUgPHN0ZGxpYi5oPgpAQCAtNTIsOCArNTMsNiBAQAogI2luY2x1ZGUg PHVuaXN0ZC5oPgogI2luY2x1ZGUgPGxpYnV0aWwuaD4KIAotI2luY2x1ZGUgIm1udG9wdHMuaCIK LQogI2RlZmluZSBUUkFOU0lUSU9OX1BFUklPRF9IQUNLCiAKIHN0YXRpYyBzdHJ1Y3QgbW50b3B0 IG1vcHRzW10gPSB7CkluZGV4OiBzYmluL21vdW50X251bGxmcy9NYWtlZmlsZQo9PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 Ci0tLSBzYmluL21vdW50X251bGxmcy9NYWtlZmlsZQkocmV2aXNpb24gMjQ3MTQ5KQorKysgc2Jp bi9tb3VudF9udWxsZnMvTWFrZWZpbGUJKHdvcmtpbmcgY29weSkKQEAgLTIsMTIgKzIsOSBAQAog IyAkRnJlZUJTRCQKIAogUFJPRz0JbW91bnRfbnVsbGZzCi1TUkNTPQltb3VudF9udWxsZnMuYyBn ZXRtbnRvcHRzLmMKIE1BTj0JbW91bnRfbnVsbGZzLjgKIAotTU9VTlQ9CSR7LkNVUkRJUn0vLi4v bW91bnQKLUNGTEFHUys9LUkke01PVU5UfQorRFBBREQ9CSR7TElCVVRJTH0KK0xEQUREPQktbHV0 aWwKIAotLlBBVEg6CSR7TU9VTlR9Ci0KIC5pbmNsdWRlIDxic2QucHJvZy5taz4KSW5kZXg6IHNi aW4vbW91bnRfbnVsbGZzL21vdW50X251bGxmcy5jCj09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHNiaW4vbW91bnRf bnVsbGZzL21vdW50X251bGxmcy5jCShyZXZpc2lvbiAyNDcxNDkpCisrKyBzYmluL21vdW50X251 bGxmcy9tb3VudF9udWxsZnMuYwkod29ya2luZyBjb3B5KQpAQCAtNDksMTQgKzQ5LDEzIEBACiAj aW5jbHVkZSA8c3lzL3Vpby5oPgogCiAjaW5jbHVkZSA8ZXJyLmg+CisjaW5jbHVkZSA8bW50b3B0 cy5oPgogI2luY2x1ZGUgPHN0ZGlvLmg+CiAjaW5jbHVkZSA8c3RkbGliLmg+CiAjaW5jbHVkZSA8 c3RyaW5nLmg+CiAjaW5jbHVkZSA8c3lzZXhpdHMuaD4KICNpbmNsdWRlIDx1bmlzdGQuaD4KIAot I2luY2x1ZGUgIm1udG9wdHMuaCIKLQogaW50CXN1YmRpcihjb25zdCBjaGFyICosIGNvbnN0IGNo YXIgKik7CiBzdGF0aWMgdm9pZAl1c2FnZSh2b2lkKSBfX2RlYWQyOwogCkluZGV4OiBzYmluL21v dW50X3JlaXNlcmZzL01ha2VmaWxlCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHNiaW4vbW91bnRfcmVpc2VyZnMv TWFrZWZpbGUJKHJldmlzaW9uIDI0NzE0OSkKKysrIHNiaW4vbW91bnRfcmVpc2VyZnMvTWFrZWZp bGUJKHdvcmtpbmcgY29weSkKQEAgLTEsMTMgKzEsOSBAQAogIyAkRnJlZUJTRCQKIAogUFJPRyA9 IG1vdW50X3JlaXNlcmZzCi1TUkNTID0gbW91bnRfcmVpc2VyZnMuYyBnZXRtbnRvcHRzLmMKIE1B TiAgPSBtb3VudF9yZWlzZXJmcy44CiAKLSMgbW91bnRfcmVpc2VyZnMgbmVlZHMgbW50b3B0cy5o IGFuZCBnZXRtbnRvcHRzLmMgZnJvbSBzcmMvc2Jpbi9tb3VudC8KLU1PVU5UICA/PSAkey5DVVJE SVJ9Ly4uL21vdW50Ci1DRkxBR1MgKz0gLUkke01PVU5UfQorRFBBREQ9CSR7TElCVVRJTH0KK0xE QUREPQktbHV0aWwKIAotLlBBVEg6ICR7TU9VTlR9Ci0KIC5pbmNsdWRlIDxic2QucHJvZy5taz4K SW5kZXg6IHNiaW4vbW91bnRfcmVpc2VyZnMvbW91bnRfcmVpc2VyZnMuYwo9PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t LSBzYmluL21vdW50X3JlaXNlcmZzL21vdW50X3JlaXNlcmZzLmMJKHJldmlzaW9uIDI0NzE0OSkK KysrIHNiaW4vbW91bnRfcmVpc2VyZnMvbW91bnRfcmVpc2VyZnMuYwkod29ya2luZyBjb3B5KQpA QCAtMzEsMTQgKzMxLDEzIEBACiAjaW5jbHVkZSA8c3lzL3Vpby5oPgogCiAjaW5jbHVkZSA8ZXJy Lmg+CisjaW5jbHVkZSA8bW50b3B0cy5oPgogI2luY2x1ZGUgPHN0ZGlvLmg+CiAjaW5jbHVkZSA8 c3RkbGliLmg+CiAjaW5jbHVkZSA8c3RyaW5nLmg+CiAjaW5jbHVkZSA8c3lzZXhpdHMuaD4KICNp bmNsdWRlIDx1bmlzdGQuaD4KIAotI2luY2x1ZGUgIm1udG9wdHMuaCIKLQogc3RydWN0IG1udG9w dCBtb3B0c1tdID0gewogCU1PUFRfU1RET1BUUywKIAlNT1BUX0VORApJbmRleDogc2Jpbi9tb3Vu dF9zdGQvTWFrZWZpbGUKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gc2Jpbi9tb3VudF9zdGQvTWFrZWZpbGUJKHJl dmlzaW9uIDI0NzE0OSkKKysrIHNiaW4vbW91bnRfc3RkL01ha2VmaWxlCSh3b3JraW5nIGNvcHkp CkBAIC0yLDE4ICsyLDE2IEBACiAjCSRGcmVlQlNEJAogCiBQUk9HPQltb3VudF9zdGQKLVNSQ1M9 CW1vdW50X3N0ZC5jIGdldG1udG9wdHMuYwogTUFOPQltb3VudF9zdGQuOAogTUxJTktTPQltb3Vu dF9zdGQuOCBtb3VudF9kZXZmcy44IFwKIAltb3VudF9zdGQuOCBtb3VudF9mZGVzY2ZzLjggXAog CW1vdW50X3N0ZC44IG1vdW50X2xpbnByb2Nmcy44IFwKIAltb3VudF9zdGQuOCBtb3VudF9wcm9j ZnMuOAogCi1NT1VOVD0JJHsuQ1VSRElSfS8uLi9tb3VudAotQ0ZMQUdTKz0gLUkke01PVU5UfQog V0FSTlM/PQkzCiAKLS5QQVRIOgkke01PVU5UfQorRFBBREQ9CSR7TElCVVRJTH0KK0xEQUREPQkt bHV0aWwKIAogTElOS1M9CSR7QklORElSfS9tb3VudF9zdGQgJHtCSU5ESVJ9L21vdW50X2RldmZz IFwKIAkke0JJTkRJUn0vbW91bnRfc3RkICR7QklORElSfS9tb3VudF9mZGVzY2ZzIFwKSW5kZXg6 IHNiaW4vbW91bnRfc3RkL21vdW50X3N0ZC5jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHNiaW4vbW91bnRfc3Rk L21vdW50X3N0ZC5jCShyZXZpc2lvbiAyNDcxNDkpCisrKyBzYmluL21vdW50X3N0ZC9tb3VudF9z dGQuYwkod29ya2luZyBjb3B5KQpAQCAtNDYsNiArNDYsNyBAQAogCiAjaW5jbHVkZSA8ZXJyLmg+ CiAjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxtbnRvcHRzLmg+CiAjaW5jbHVkZSA8c3Rk aW8uaD4KICNpbmNsdWRlIDxzaWduYWwuaD4KICNpbmNsdWRlIDxzdGRsaWIuaD4KQEAgLTUzLDgg KzU0LDYgQEAKICNpbmNsdWRlIDxzeXNleGl0cy5oPgogI2luY2x1ZGUgPHVuaXN0ZC5oPgogCi0j aW5jbHVkZSAibW50b3B0cy5oIgotCiBzdGF0aWMgc3RydWN0IG1udG9wdCBtb3B0c1tdID0gewog CU1PUFRfU1RET1BUUywKIAlNT1BUX0VORApJbmRleDogc2Jpbi9tb3VudF91ZGYvTWFrZWZpbGUK PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PQotLS0gc2Jpbi9tb3VudF91ZGYvTWFrZWZpbGUJKHJldmlzaW9uIDI0NzE0OSkK KysrIHNiaW4vbW91bnRfdWRmL01ha2VmaWxlCSh3b3JraW5nIGNvcHkpCkBAIC0xLDE0ICsxLDEx IEBACiAjICRGcmVlQlNEJAogCiBQUk9HPQltb3VudF91ZGYKLVNSQ1M9CW1vdW50X3VkZi5jIGdl dG1udG9wdHMuYwogTUFOPQltb3VudF91ZGYuOAotRFBBREQ9CSR7TElCS0lDT05WfQotTERBREQ9 CS1sa2ljb252CitEUEFERD0JJHtMSUJLSUNPTlZ9ICR7TElCVVRJTH0KK0xEQUREPQktbGtpY29u diAtbHV0aWwKIAotTU9VTlQ9CSR7LkNVUkRJUn0vLi4vbW91bnQKLUNGTEFHUys9IC1JJHtNT1VO VH0gLUkkey5DVVJESVJ9Ly4uLy4uL3N5cwotLlBBVEg6CSR7TU9VTlR9CitDRkxBR1MrPSAtSSR7 LkNVUkRJUn0vLi4vLi4vc3lzCiBXQVJOUz89IDEKIAogIyBOZWVkcyB0byBiZSBkeW5hbWljYWxs eSBsaW5rZWQgZm9yIG9wdGlvbmFsIGRsb3BlbigpIGFjY2VzcyB0bwpJbmRleDogc2Jpbi9tb3Vu dF91ZGYvbW91bnRfdWRmLmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gc2Jpbi9tb3VudF91ZGYvbW91bnRfdWRm LmMJKHJldmlzaW9uIDI0NzE0OSkKKysrIHNiaW4vbW91bnRfdWRmL21vdW50X3VkZi5jCSh3b3Jr aW5nIGNvcHkpCkBAIC01MywxNCArNTMsMTMgQEAKIAogI2luY2x1ZGUgPGVyci5oPgogI2luY2x1 ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8bW50b3B0cy5oPgogI2luY2x1ZGUgPHN0ZGxpYi5oPgog I2luY2x1ZGUgPHN0ZGlvLmg+CiAjaW5jbHVkZSA8c3RyaW5nLmg+CiAjaW5jbHVkZSA8c3lzZXhp dHMuaD4KICNpbmNsdWRlIDx1bmlzdGQuaD4KIAotI2luY2x1ZGUgIm1udG9wdHMuaCIKLQogc3Rh dGljIHN0cnVjdCBtbnRvcHQgbW9wdHNbXSA9IHsKIAlNT1BUX1NURE9QVFMsCiAJTU9QVF9VUERB VEUsCkluZGV4OiBzYmluL21vdW50X3VuaW9uZnMvTWFrZWZpbGUKPT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gc2Jp bi9tb3VudF91bmlvbmZzL01ha2VmaWxlCShyZXZpc2lvbiAyNDcxNDkpCisrKyBzYmluL21vdW50 X3VuaW9uZnMvTWFrZWZpbGUJKHdvcmtpbmcgY29weSkKQEAgLTIsMTIgKzIsOSBAQAogIyAkRnJl ZUJTRCQKIAogUFJPRz0JbW91bnRfdW5pb25mcwotU1JDUz0JbW91bnRfdW5pb25mcy5jIGdldG1u dG9wdHMuYwogTUFOPQltb3VudF91bmlvbmZzLjgKIAotTU9VTlQ9CSR7LkNVUkRJUn0vLi4vbW91 bnQKLUNGTEFHUys9LUkke01PVU5UfQorRFBBREQ9CSR7TElCVVRJTH0KK0xEQUREPQktbHV0aWwK IAotLlBBVEg6CSR7TU9VTlR9Ci0KIC5pbmNsdWRlIDxic2QucHJvZy5taz4KSW5kZXg6IHNiaW4v bW91bnRfdW5pb25mcy9tb3VudF91bmlvbmZzLmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gc2Jpbi9tb3VudF91 bmlvbmZzL21vdW50X3VuaW9uZnMuYwkocmV2aXNpb24gMjQ3MTQ5KQorKysgc2Jpbi9tb3VudF91 bmlvbmZzL21vdW50X3VuaW9uZnMuYwkod29ya2luZyBjb3B5KQpAQCAtNTQsNiArNTQsNyBAQAog I2luY2x1ZGUgPHN5cy9lcnJuby5oPgogCiAjaW5jbHVkZSA8ZXJyLmg+CisjaW5jbHVkZSA8bW50 b3B0cy5oPgogI2luY2x1ZGUgPHN0ZGlvLmg+CiAjaW5jbHVkZSA8c3RkbGliLmg+CiAjaW5jbHVk ZSA8c3RyaW5nLmg+CkBAIC02Miw4ICs2Myw2IEBACiAjaW5jbHVkZSA8Z3JwLmg+CiAjaW5jbHVk ZSA8cHdkLmg+CiAKLSNpbmNsdWRlICJtbnRvcHRzLmgiCi0KIHN0YXRpYyBpbnQgCiBzdWJkaXIo Y29uc3QgY2hhciAqcCwgY29uc3QgY2hhciAqZGlyKQogewpJbmRleDogdXNyLnNiaW4vbW91bnRf bndmcy9NYWtlZmlsZQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSB1c3Iuc2Jpbi9tb3VudF9ud2ZzL01ha2VmaWxl CShyZXZpc2lvbiAyNDcxNDkpCisrKyB1c3Iuc2Jpbi9tb3VudF9ud2ZzL01ha2VmaWxlCSh3b3Jr aW5nIGNvcHkpCkBAIC0xLDE1ICsxLDExIEBACiAjICRGcmVlQlNEJAogCiBQUk9HPQltb3VudF9u d2ZzCi1TUkNTPQltb3VudF9ud2ZzLmMgZ2V0bW50b3B0cy5jCiBNQU49CW1vdW50X253ZnMuOAog Ci1NT1VOVD0JJHsuQ1VSRElSfS8uLi8uLi9zYmluL21vdW50Ci1DRkxBR1MrPSAtRE5XRlMgLUkk e01PVU5UfQorQ0ZMQUdTKz0gLUROV0ZTCiAKLS5QQVRIOgkke01PVU5UfQorRFBBREQ9CSR7TElC TkNQfSAke0xJQklQWH0gJHtMSUJVVElMfQorTERBREQ9CS1sbmNwIC1saXB4IC1sdXRpbAogCi1E UEFERD0JJHtMSUJOQ1B9ICR7TElCSVBYfQotTERBREQ9CS1sbmNwIC1saXB4Ci0KIC5pbmNsdWRl IDxic2QucHJvZy5taz4KSW5kZXg6IHVzci5zYmluL21vdW50X253ZnMvbW91bnRfbndmcy5jCj09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT0KLS0tIHVzci5zYmluL21vdW50X253ZnMvbW91bnRfbndmcy5jCShyZXZpc2lvbiAy NDcxNDkpCisrKyB1c3Iuc2Jpbi9tb3VudF9ud2ZzL21vdW50X253ZnMuYwkod29ya2luZyBjb3B5 KQpAQCAtNDgsMTEgKzQ4LDExIEBACiAjaW5jbHVkZSA8ZXJyLmg+CiAjaW5jbHVkZSA8c3lzZXhp dHMuaD4KICNpbmNsdWRlIDx0aW1lLmg+CisjaW5jbHVkZSA8bW50b3B0cy5oPgogCiAjaW5jbHVk ZSA8bmV0bmNwL25jcF9saWIuaD4KICNpbmNsdWRlIDxuZXRuY3AvbmNwX3JjZmlsZS5oPgogI2lu Y2x1ZGUgPGZzL253ZnMvbndmc19tb3VudC5oPgotI2luY2x1ZGUgIm1udG9wdHMuaCIKIAogI2Rl ZmluZQlOV0ZTX1ZGU05BTUUJIm53ZnMiCiAKSW5kZXg6IHVzci5zYmluL21vdW50X3BvcnRhbGZz L01ha2VmaWxlCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT0KLS0tIHVzci5zYmluL21vdW50X3BvcnRhbGZzL01ha2VmaWxl CShyZXZpc2lvbiAyNDcxNDkpCisrKyB1c3Iuc2Jpbi9tb3VudF9wb3J0YWxmcy9NYWtlZmlsZQko d29ya2luZyBjb3B5KQpAQCAtMiwxNCArMiwxMyBAQAogIyAkRnJlZUJTRCQKIAogUFJPRz0JbW91 bnRfcG9ydGFsZnMKLVNSQ1M9CW1vdW50X3BvcnRhbGZzLmMgYWN0aXZhdGUuYyBjb25mLmMgY3Jl ZC5jIGdldG1udG9wdHMuYyBwdF9jb25mLmMgXAorU1JDUz0JbW91bnRfcG9ydGFsZnMuYyBhY3Rp dmF0ZS5jIGNvbmYuYyBjcmVkLmMgcHRfY29uZi5jIFwKIAlwdF9leGVjLmMgcHRfZmlsZS5jIHB0 X3BpcGUuYyBwdF90Y3AuYyBwdF90Y3BsaXN0ZW4uYwogTUFOPQltb3VudF9wb3J0YWxmcy44CiAK LU1PVU5UPQkkey5DVVJESVJ9Ly4uLy4uL3NiaW4vbW91bnQKLUNGTEFHUys9LUkke01PVU5UfQog V0FSTlM/PQkzCiAKLS5QQVRIOgkke01PVU5UfQorRFBBREQ9CSR7TElCVVRJTH0KK0xEQUREPQkt bHV0aWwKIAogLmluY2x1ZGUgPGJzZC5wcm9nLm1rPgpJbmRleDogdXNyLnNiaW4vbW91bnRfcG9y dGFsZnMvbW91bnRfcG9ydGFsZnMuYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSB1c3Iuc2Jpbi9tb3VudF9wb3J0 YWxmcy9tb3VudF9wb3J0YWxmcy5jCShyZXZpc2lvbiAyNDcxNDkpCisrKyB1c3Iuc2Jpbi9tb3Vu dF9wb3J0YWxmcy9tb3VudF9wb3J0YWxmcy5jCSh3b3JraW5nIGNvcHkpCkBAIC01MywxMyArNTMs MTMgQEAKIAogI2luY2x1ZGUgPGVyci5oPgogI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8 bW50b3B0cy5oPgogI2luY2x1ZGUgPHN0ZGlvLmg+CiAjaW5jbHVkZSA8c3RkbGliLmg+CiAjaW5j bHVkZSA8c3RyaW5nLmg+CiAjaW5jbHVkZSA8c3lzZXhpdHMuaD4KICNpbmNsdWRlIDx1bmlzdGQu aD4KIAotI2luY2x1ZGUgIm1udG9wdHMuaCIKICNpbmNsdWRlICJwYXRobmFtZXMuaCIKICNpbmNs dWRlICJwb3J0YWxkLmgiCiAKSW5kZXg6IHVzci5zYmluL21vdW50X3NtYmZzL01ha2VmaWxlCj09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT0KLS0tIHVzci5zYmluL21vdW50X3NtYmZzL01ha2VmaWxlCShyZXZpc2lvbiAyNDcx NDkpCisrKyB1c3Iuc2Jpbi9tb3VudF9zbWJmcy9NYWtlZmlsZQkod29ya2luZyBjb3B5KQpAQCAt MSwxNSArMSwxMyBAQAogIyAkRnJlZUJTRCQKIAogUFJPRz0JbW91bnRfc21iZnMKLVNSQ1M9CW1v dW50X3NtYmZzLmMgZ2V0bW50b3B0cy5jCiBNQU49CW1vdW50X3NtYmZzLjgKIAotTU9VTlRESVI9 CSR7LkNVUkRJUn0vLi4vLi4vc2Jpbi9tb3VudAogQ09OVFJJQkRJUj0JJHsuQ1VSRElSfS8uLi8u Li9jb250cmliL3NtYmZzCi1DRkxBR1MrPQktRFNNQkZTIC1JJHtNT1VOVERJUn0gLUkke0NPTlRS SUJESVJ9L2luY2x1ZGUKK0NGTEFHUys9CS1EU01CRlMgLUkke0NPTlRSSUJESVJ9L2luY2x1ZGUK IAotTERBREQ9CS1sc21iIC1sa2ljb252Ci1EUEFERD0JJHtMSUJTTUJ9ICR7TElCS0lDT05WfQor TERBREQ9CS1sc21iIC1sa2ljb252IC1sdXRpbAorRFBBREQ9CSR7TElCU01CfSAke0xJQktJQ09O Vn0gJHtMSUJVVElMfQogCiAjIE5lZWRzIHRvIGJlIGR5bmFtaWNhbGx5IGxpbmtlZCBmb3Igb3B0 aW9uYWwgZGxvcGVuKCkgYWNjZXNzIHRvCiAjIHVzZXJsYW5kIGxpYmljb252IChzZWUgdGhlIC1F IG9wdGlvbikuCkBAIC0xNyw2ICsxNSw1IEBACiBOT19TSEFSRUQ/PQlOTwogCiAuUEFUSDoJJHtD T05UUklCRElSfS9tb3VudF9zbWJmcwotLlBBVEg6ICAke01PVU5URElSfQogCiAuaW5jbHVkZSA8 YnNkLnByb2cubWs+CkluZGV4OiB1c3Iuc2Jpbi9tb3VudGQvTWFrZWZpbGUKPT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot LS0gdXNyLnNiaW4vbW91bnRkL01ha2VmaWxlCShyZXZpc2lvbiAyNDcxNDkpCisrKyB1c3Iuc2Jp bi9tb3VudGQvTWFrZWZpbGUJKHdvcmtpbmcgY29weSkKQEAgLTIsMTUgKzIsMTAgQEAKICMgJEZy ZWVCU0QkCiAKIFBST0c9CW1vdW50ZAotU1JDUz0JbW91bnRkLmMgZ2V0bW50b3B0cy5jCiBNQU49 CWV4cG9ydHMuNSBuZXRncm91cC41IG1vdW50ZC44CiAKLU1PVU5UPSAgJHsuQ1VSRElSfS8uLi8u Li9zYmluL21vdW50Ci1DRkxBR1MrPSAtSSR7TU9VTlR9CiBXQVJOUz89IDIKIAotLlBBVEg6ICR7 TU9VTlR9Ci0KIERQQUREPQkke0xJQlVUSUx9CiBMREFERD0JLWx1dGlsCiAKSW5kZXg6IHVzci5z YmluL21vdW50ZC9tb3VudGQuYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSB1c3Iuc2Jpbi9tb3VudGQvbW91bnRk LmMJKHJldmlzaW9uIDI0NzE0OSkKKysrIHVzci5zYmluL21vdW50ZC9tb3VudGQuYwkod29ya2lu ZyBjb3B5KQpAQCAtNzMsNiArNzMsNyBAQAogI2luY2x1ZGUgPGdycC5oPgogI2luY2x1ZGUgPGxp YnV0aWwuaD4KICNpbmNsdWRlIDxsaW1pdHMuaD4KKyNpbmNsdWRlIDxtbnRvcHRzLmg+CiAjaW5j bHVkZSA8bmV0ZGIuaD4KICNpbmNsdWRlIDxwd2QuaD4KICNpbmNsdWRlIDxzaWduYWwuaD4KQEAg LTgxLDcgKzgyLDYgQEAKICNpbmNsdWRlIDxzdHJpbmcuaD4KICNpbmNsdWRlIDx1bmlzdGQuaD4K ICNpbmNsdWRlICJwYXRobmFtZXMuaCIKLSNpbmNsdWRlICJtbnRvcHRzLmgiCiAKICNpZmRlZiBE RUJVRwogI2luY2x1ZGUgPHN0ZGFyZy5oPgo= --047d7b5d2e2022af2f04d69f1c80--