From mboxrd@z Thu Jan 1 00:00:00 1970 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on inbox.vuxu.org X-Spam-Level: X-Spam-Status: No, score=-3.3 required=5.0 tests=DKIM_SIGNED,DKIM_VALID, MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED autolearn=ham autolearn_force=no version=3.4.4 Received: (qmail 27299 invoked from network); 6 Feb 2023 02:22:14 -0000 Received: from zero.zsh.org (2a02:898:31:0:48:4558:7a:7368) by inbox.vuxu.org with ESMTPUTF8; 6 Feb 2023 02:22:14 -0000 ARC-Seal: i=1; cv=none; a=rsa-sha256; d=zsh.org; s=rsa-20210803; t=1675650134; b=cDWS1GlHIDwRsvRsqs03Pv8QOIfyXFoK4BlthZJ6L8X2zumvRNCxw9ORpg8nVA9PhEqj9I0OJB jJtWyjzp4/Mlj95XuQBGaLR5z5O7aTnwLEQrR3kMIdlw2Cd+N90/kkhUdMydVde4W6X3fsTk7d SmBabbZ2Em6wHk27LCYRskBfMnxAOErHXyD6EMtIc91pLZhAjxd2RSVVusscIziP42PdCa7yr3 hwKjDNbHEXpygLLZlSdJWo8zXXg3FO3Ho4cTdYwf9apr/MSse5G0ugh62nkFCjvyukkjnEoHtm 03+KagJUZww6NeDRocczY5QJZhvG4x2CnM7F/8GfbpKivg==; ARC-Authentication-Results: i=1; zsh.org; iprev=pass (mail-ej1-f49.google.com) smtp.remote-ip=209.85.218.49; dkim=pass header.d=brasslantern-com.20210112.gappssmtp.com header.s=20210112 header.a=rsa-sha256; dmarc=none header.from=brasslantern.com; arc=none ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed; d=zsh.org; s=rsa-20210803; t=1675650134; bh=O/AG+VmRu1MmzaxGl2tn2N6yI8pTCjK43+1L68agCIk=; h=List-Archive:List-Owner:List-Post:List-Unsubscribe:List-Subscribe:List-Help: List-Id:Sender:Content-Type:To:Subject:Message-ID:Date:From:MIME-Version: DKIM-Signature:DKIM-Signature; b=Mb8pH3bZYen/+Q0hSnanMi47H6psUccR6RdbyKI046lcSujBdlnQrzB3N8ei1MdWCevpd6WBjn 3owzlFq5Slhz864R0BoP26g3xfNpJg1e+LMyAauGm7jOln2xQvX/1vZYBcxiLz0fVaEZcyDc2E Yg9oRmYvsxO1Vj5JHtOGMbIXYObUQaJLJGLHr3mvfGdKBiVSlyOtS+RFI/mUEF9M4ECiykV0gb VpoRWl53uSFum5jjbmGqsmapDjPcTLurdA7CWgGNKqwdYnkWQlBkKysZiIss3neMC3FhrICkLI Y/bYAnQCMMqqucxEURVcO28cYk8bN8Ojn+DSQxAW5nKq0g==; DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=zsh.org; s=rsa-20210803; h=List-Archive:List-Owner:List-Post:List-Unsubscribe: List-Subscribe:List-Help:List-Id:Sender:Content-Type:To:Subject:Message-ID: Date:From:MIME-Version:Reply-To:Cc:Content-Transfer-Encoding:Content-ID: Content-Description:Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc :Resent-Message-ID:In-Reply-To:References; bh=ByUbxCk1A4yddjDnAGLMHzj0Susgw1VOAbXkhqg4nQs=; b=T9Q+zgS1aBcMGE5MyMkhuQ07tQ P9VnlLkQHzlOoWVxVsMzmmytTnWAhOd9biiRU5792zKBdJ9Vbo3RmV7udxHZuGEpWyefRjw50FC/D bTCFMzQrLZRcLrbtoVPuvliQPFb54IDS3/VNjSdOcz9ZlS5xPrhxxtwB3KoOj2wAFtIqxFy5NoW/u U5dMcK/hqUX9JBm1ijaAbqLlKXnR4dPrrJYiHsWppYGatxlfJwMC9++pCcmY6/UXwvLkp/qtnPla8 dq/b+0bcikdWKCmyPNIIP9UIImVh6qTRqluvihnpuEHsUB4TMYl1wYrVkri9cyIOjwx83M3nfPRR3 lgXs8zEQ==; Received: by zero.zsh.org with local id 1pOr92-000C3s-Oz; Mon, 06 Feb 2023 02:22:12 +0000 Authentication-Results: zsh.org; iprev=pass (mail-ej1-f49.google.com) smtp.remote-ip=209.85.218.49; dkim=pass header.d=brasslantern-com.20210112.gappssmtp.com header.s=20210112 header.a=rsa-sha256; dmarc=none header.from=brasslantern.com; arc=none Received: from mail-ej1-f49.google.com ([209.85.218.49]:36757) by zero.zsh.org with esmtps (TLS1.3:TLS_AES_128_GCM_SHA256:128) id 1pOr8P-000Bir-Nf; Mon, 06 Feb 2023 02:21:35 +0000 Received: by mail-ej1-f49.google.com with SMTP id lu11so30327469ejb.3 for ; Sun, 05 Feb 2023 18:21:33 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=brasslantern-com.20210112.gappssmtp.com; s=20210112; h=to:subject:message-id:date:from:mime-version:from:to:cc:subject :date:message-id:reply-to; bh=ByUbxCk1A4yddjDnAGLMHzj0Susgw1VOAbXkhqg4nQs=; b=oQLT1eVVs2l9/m9fkso6Zmdulf4qszxCa3nhr7o92yMLsJhuhFUbhRHOc3l5f6EkrU 49NVfBDFMMV5WD05hh/rY6A8HRkSg7aCMytS9oTUIkiqoOgbt0zGmlZ9P5paJ9ubCXbh I8e0ukiJepmMpvsd8Rs8vdya7MN8jnOjNRqy05/d6ygtxgpexWGy8tR/CvE5/38InVif 7K16FXm3DSwX3ZPLUUGQfLq9JA1zrez2DvEnC0MZxmLgmVYzZwmfLO5R9Ko40Mk4ivsY y4CfBsrY1vuR2FZXpKlhZ5F/oFKfMgx9aKELIdEc8BxkSXKk/P7lRMX8c0h7eSwyLM5E 55dQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=to:subject:message-id:date:from:mime-version:x-gm-message-state :from:to:cc:subject:date:message-id:reply-to; bh=ByUbxCk1A4yddjDnAGLMHzj0Susgw1VOAbXkhqg4nQs=; b=qRs6GeNKfDtbqh7/A//bUeNrLli9Id6yMt4Q7R/eGrZ47lnMbrg2yhscempwnsKpWv cx3r/o1fckpXr+C59pMCoHNZdEkpBsyM2keO+4WyCUzlNQyHyfM5I2tiYl+tdFHYS9ro QV9rJ8qkW+IyNOCIXorowwZseAPeTIWXAloyCD7+tTYl5XBW3VxuM2Sjkt5VlPye+CNR H1X/btynV9TXDI2AEeJquBm75udx6ayo1H1zULFTOkxxtqxKgHWq394rlgYkv4MmL75N KS+b1HDu371FckgIsHQyphgM2wj0bd2W8cFMBgrxeicnBXVthMcvraDEBBU4mikBrjXk h1vw== X-Gm-Message-State: AO0yUKWaMEjWboCs+VlCT/1eEzJLppMmKbRv+56kQes7y4fo6PryGvVU qDrylZfYYLNE/cAZ9jq+KyDjdUSMpgx/1jHsVPUWkGOEFL9R9U8B X-Google-Smtp-Source: AK7set8QYQJPcLXTpAgaGE52rkgfZezsnvr/L1N+YH9RR4pDQi/EbpYeGnY6Od+GWA0F1JhaUhhTdbrb1O24UXKNroU= X-Received: by 2002:a17:906:c5b:b0:877:e1ef:e49a with SMTP id t27-20020a1709060c5b00b00877e1efe49amr4999190ejf.147.1675650093229; Sun, 05 Feb 2023 18:21:33 -0800 (PST) MIME-Version: 1.0 From: Bart Schaefer Date: Sun, 5 Feb 2023 18:21:21 -0800 Message-ID: Subject: [PATCH 1/3]: Add named references To: Zsh hackers list Content-Type: multipart/mixed; boundary="00000000000093515c05f3feb0ea" X-Seq: 51360 Archived-At: X-Loop: zsh-workers@zsh.org Errors-To: zsh-workers-owner@zsh.org Precedence: list Precedence: bulk Sender: zsh-workers-request@zsh.org X-no-archive: yes List-Id: List-Help: , List-Subscribe: , List-Unsubscribe: , List-Post: List-Owner: List-Archive: --00000000000093515c05f3feb0ea Content-Type: text/plain; charset="UTF-8" This has been my weekend/evening project the past 10 days or so. I compared to ksh93 (from the Ubuntu software store) wherever there weren't conflicts with zsh-native features, even managing to crash ksh93 several times in the process. Attached is the patch with the C code changes. It'd be nice, Roman, if you could run your benchmarks on this to see if I've slowed down any other shell operations. The next two patches will cover tests and documentation. When a reference is created, it's necessary to determine the scope in which to find the referenced parameter. Since a reference can name an array element, this involves separating the base parameter name from the subscript. I've overloaded the "base" and "width" fields in struct param to save both the scope (locallevel) and the offset of the subscript, to avoid having to search for the subscript again when the reference is expanded. There is a little redundant scanning to validate subscripts when the reference is created; this follows ksh93 (the alternative would be to fail at the time of expansion). One difference from ksh93 is that you can't convert scalars into namerefs, e.g., both with this and in ksh93: typeset -n foo=bar typeset +n nameref leaves behind a scalar $foo with value bar. but only in ksh93: foo=bar typeset -n foo foo=thing assigns bar=thing. In this implementation typeset -n first unsets foo, so instead of foo "pointing at" bar, it ends up "pointing at" thing. This eliminates a bunch of special cases for exported and tied parameters, etc., and it seems easy enough to write: typeset +n foo typeset -n foo=$foo if that's what you wanted. If I have a sudden inspiration I'll do a follow-up patch. Named references can't have any other attributes, and attempting to add an attribute to a named reference generates a warning. However, existing prohibited attribute changes (such as trying to turn a special scalar into an array) are fatal errors, so I've left comments wondering whether that would instead be appropriate here. With respect to zsh/param/private parameters, it's presently prohibited to have a "public" reference to a private parameter. It might be possible to change this if someone can think of a use case. There is one glitch: if the reference is created before the parameter is declared private, and the private local is NOT hiding something in an outer scope, then the reference does not retroactively generate an error and assignments to the reference are silent no-ops. I moved around a little bit of not-directly-related signal handling in params.c so that we're not calling zfree() outside of queue_signals() blocks. That makes the order of unqueue_signals() and zfree() consistent at least throughout assignsparam(). I also removed "kz" from TYPESET_OPTSTR in zsh.h -- as far as I can tell they should never have been there in the first place. --00000000000093515c05f3feb0ea Content-Type: text/plain; charset="US-ASCII"; name="nameref-1-code.txt" Content-Disposition: attachment; filename="nameref-1-code.txt" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_lds6lwkz0 ZGlmZiAtLWdpdCBhL1NyYy9Nb2R1bGVzL3BhcmFtX3ByaXZhdGUuYyBiL1NyYy9Nb2R1bGVzL3Bh cmFtX3ByaXZhdGUuYwppbmRleCAwNjVmYTYzZDIuLjcwZjM2Y2ViMSAxMDA2NDQKLS0tIGEvU3Jj L01vZHVsZXMvcGFyYW1fcHJpdmF0ZS5jCisrKyBiL1NyYy9Nb2R1bGVzL3BhcmFtX3ByaXZhdGUu YwpAQCAtNTEyLDkgKzUxMiwxNiBAQCBzdGF0aWMgR2V0Tm9kZUZ1bmMgZ2V0cGFyYW1ub2RlOwog c3RhdGljIEhhc2hOb2RlCiBnZXRwcml2YXRlbm9kZShIYXNoVGFibGUgaHQsIGNvbnN0IGNoYXIg Km5hbSkKIHsKLSAgICBIYXNoTm9kZSBobiA9IGdldHBhcmFtbm9kZShodCwgbmFtKTsKKyAgICAv KiBnZXRwYXJhbW5vZGUoKSB3b3VsZCBmb2xsb3cgbmFtZXJlZnMsIHdlIG11c3Qgbm90IGRvIHRo YXQgaGVyZSAqLworICAgIEhhc2hOb2RlIGhuID0gZ2V0aGFzaG5vZGUyKGh0LCBuYW0pOwogICAg IFBhcmFtIHBtID0gKFBhcmFtKSBobjsKIAorICAgIC8qIGF1dG9sb2FkIGhhcyBwcmVjZWRlbmNl IG92ZXIgbmFtZXJlZiwgc28gZ2V0cGFyYW1ub2RlKCkgKi8KKyAgICBpZiAocG0gJiYgKHBtLT5u b2RlLmZsYWdzICYgUE1fQVVUT0xPQUQpKSB7CisJaG4gPSBnZXRwYXJhbW5vZGUoaHQsIG5hbSk7 CisJcG0gPSAoUGFyYW0pIGhuOworCS8qIGhvdyB3b3VsZCBhbiBhdXRvbG9hZGVkIHByaXZhdGUg YmVoYXZlPyAgcmV0dXJuIGhlcmU/ICovCisgICAgfQogICAgIHdoaWxlICghZmFrZWxldmVsICYm IHBtICYmIGxvY2FsbGV2ZWwgPiBwbS0+bGV2ZWwgJiYgaXNfcHJpdmF0ZShwbSkpIHsKIAlpZiAo IShwbS0+bm9kZS5mbGFncyAmIFBNX1VOU0VUKSkgewogCSAgICAvKgpAQCAtNTMzLDYgKzU0MCwx MiBAQCBnZXRwcml2YXRlbm9kZShIYXNoVGFibGUgaHQsIGNvbnN0IGNoYXIgKm5hbSkKIAl9CiAJ cG0gPSBwbS0+b2xkOwogICAgIH0KKworICAgIC8qIHJlc29sdmUgbmFtZXJlZiBhZnRlciBza2lw cGluZyBwcml2YXRlIHBhcmFtZXRlcnMgKi8KKyAgICBpZiAocG0gJiYgKHBtLT5ub2RlLmZsYWdz ICYgUE1fTkFNRVJFRikgJiYKKwkocG0tPnUuc3RyIHx8IChwbS0+bm9kZS5mbGFncyAmIFBNX1VO U0VUKSkpCisJcG0gPSAoUGFyYW0pIHJlc29sdmVfbmFtZXJlZihwbSwgTlVMTCk7CisKICAgICBy ZXR1cm4gKEhhc2hOb2RlKXBtOwogfQogCkBAIC01NzEsNyArNTg0LDcgQEAgcHJpbnRwcml2YXRl bm9kZShIYXNoTm9kZSBobiwgaW50IHByaW50ZmxhZ3MpCiAKIHN0YXRpYyBzdHJ1Y3QgYnVpbHRp biBiaW50YWJbXSA9IHsKICAgICAvKiBDb3BpZWQgZnJvbSBCVUlMVElOKCJsb2NhbCIpLCAiUCIg YWRkZWQgKi8KLSAgICBCVUlMVElOKCJwcml2YXRlIiwgQklORl9QTFVTT1BUUyB8IEJJTkZfTUFH SUNFUVVBTFMgfCBCSU5GX1BTUEVDSUFMIHwgQklORl9BU1NJR04sIChIYW5kbGVyRnVuYyliaW5f cHJpdmF0ZSwgMCwgLTEsIDAsICJBRTolRjolSEw6JVBSOiVUVVo6JWFoaTolbG1wcnR1eCIsICJQ IikKKyAgICBCVUlMVElOKCJwcml2YXRlIiwgQklORl9QTFVTT1BUUyB8IEJJTkZfTUFHSUNFUVVB TFMgfCBCSU5GX1BTUEVDSUFMIHwgQklORl9BU1NJR04sIChIYW5kbGVyRnVuYyliaW5fcHJpdmF0 ZSwgMCwgLTEsIDAsICJBRTolRjolSEw6JVBSOiVUVVo6JWFoaTolbG5tcHJ0dXgiLCAiUCIpCiB9 OwogCiBzdGF0aWMgc3RydWN0IGZlYXR1cmVzIG1vZHVsZV9mZWF0dXJlcyA9IHsKZGlmZiAtLWdp dCBhL1NyYy9Nb2R1bGVzL3BhcmFtZXRlci5jIGIvU3JjL01vZHVsZXMvcGFyYW1ldGVyLmMKaW5k ZXggZGJiNjFlNDc0Li41YmY2NzVlMmEgMTAwNjQ0Ci0tLSBhL1NyYy9Nb2R1bGVzL3BhcmFtZXRl ci5jCisrKyBiL1NyYy9Nb2R1bGVzL3BhcmFtZXRlci5jCkBAIC00OSwxMyArNDksMTUgQEAgcGFy YW10eXBlc3RyKFBhcmFtIHBtKQogCWlmIChwbS0+bm9kZS5mbGFncyAmIFBNX0FVVE9MT0FEKQog CSAgICByZXR1cm4gZHVwc3RyaW5nKCJ1bmRlZmluZWQiKTsKIAotCXN3aXRjaCAoUE1fVFlQRShm KSkgeworCS8qIEZvciBzaW1wbGljaXR5IHdlIHRyZWF0IFBNX05BTUVSRUYgYXMgUE1fVFlQRShQ TV9TQ0FMQVIpICovCisJc3dpdGNoIChQTV9UWVBFKGYpfChmICYgUE1fTkFNRVJFRikpIHsKIAlj YXNlIFBNX1NDQUxBUjogIHZhbCA9ICJzY2FsYXIiOyBicmVhazsKIAljYXNlIFBNX0FSUkFZOiAg IHZhbCA9ICJhcnJheSI7IGJyZWFrOwogCWNhc2UgUE1fSU5URUdFUjogdmFsID0gImludGVnZXIi OyBicmVhazsKIAljYXNlIFBNX0VGTE9BVDoKIAljYXNlIFBNX0ZGTE9BVDogIHZhbCA9ICJmbG9h dCI7IGJyZWFrOwogCWNhc2UgUE1fSEFTSEVEOiAgdmFsID0gImFzc29jaWF0aW9uIjsgYnJlYWs7 CisJY2FzZSBQTV9OQU1FUkVGOiB2YWwgPSAibmFtZXJlZiI7IGJyZWFrOwogCX0KIAlEUFVUUygh dmFsLCAiQlVHOiB0eXBlIG5vdCBoYW5kbGVkIGluIHBhcmFtZXRlciIpOwogCXZhbCA9IGR1cHN0 cmluZyh2YWwpOwpkaWZmIC0tZ2l0IGEvU3JjL2J1aWx0aW4uYyBiL1NyYy9idWlsdGluLmMKaW5k ZXggNGMyOTVkMTFmLi44MDM5YjY0NGUgMTAwNjQ0Ci0tLSBhL1NyYy9idWlsdGluLmMKKysrIGIv U3JjL2J1aWx0aW4uYwpAQCAtNTUsNyArNTUsNyBAQCBzdGF0aWMgc3RydWN0IGJ1aWx0aW4gYnVp bHRpbnNbXSA9CiAgICAgQlVJTFRJTigiY2QiLCBCSU5GX1NLSVBJTlZBTElEIHwgQklORl9TS0lQ REFTSCB8IEJJTkZfREFTSERBU0hWQUxJRCwgYmluX2NkLCAwLCAyLCBCSU5fQ0QsICJxc1BMIiwg TlVMTCksCiAgICAgQlVJTFRJTigiY2hkaXIiLCBCSU5GX1NLSVBJTlZBTElEIHwgQklORl9TS0lQ REFTSCB8IEJJTkZfREFTSERBU0hWQUxJRCwgYmluX2NkLCAwLCAyLCBCSU5fQ0QsICJxc1BMIiwg TlVMTCksCiAgICAgQlVJTFRJTigiY29udGludWUiLCBCSU5GX1BTUEVDSUFMLCBiaW5fYnJlYWss IDAsIDEsIEJJTl9DT05USU5VRSwgTlVMTCwgTlVMTCksCi0gICAgQlVJTFRJTigiZGVjbGFyZSIs IEJJTkZfUExVU09QVFMgfCBCSU5GX01BR0lDRVFVQUxTIHwgQklORl9QU1BFQ0lBTCB8IEJJTkZf QVNTSUdOLCAoSGFuZGxlckZ1bmMpYmluX3R5cGVzZXQsIDAsIC0xLCAwLCAiQUU6JUY6JUhMOiVS OiVUVVo6JWFmZ2hpOiVrbG1wOiVydHV4eiIsIE5VTEwpLAorICAgIEJVSUxUSU4oImRlY2xhcmUi LCBCSU5GX1BMVVNPUFRTIHwgQklORl9NQUdJQ0VRVUFMUyB8IEJJTkZfUFNQRUNJQUwgfCBCSU5G X0FTU0lHTiwgKEhhbmRsZXJGdW5jKWJpbl90eXBlc2V0LCAwLCAtMSwgMCwgIkFFOiVGOiVITDol UjolVFVaOiVhZmdoaTola2xtbnA6JXJ0dXh6IiwgTlVMTCksCiAgICAgQlVJTFRJTigiZGlycyIs IDAsIGJpbl9kaXJzLCAwLCAtMSwgMCwgImNscHYiLCBOVUxMKSwKICAgICBCVUlMVElOKCJkaXNh YmxlIiwgMCwgYmluX2VuYWJsZSwgMCwgLTEsIEJJTl9ESVNBQkxFLCAiYWZtcHJzIiwgTlVMTCks CiAgICAgQlVJTFRJTigiZGlzb3duIiwgMCwgYmluX2ZnLCAwLCAtMSwgQklOX0RJU09XTiwgTlVM TCwgTlVMTCksCkBAIC04OCw3ICs4OCw3IEBAIHN0YXRpYyBzdHJ1Y3QgYnVpbHRpbiBidWlsdGlu c1tdID0KICAgICBCVUlMVElOKCJqb2JzIiwgMCwgYmluX2ZnLCAwLCAtMSwgQklOX0pPQlMsICJk bHBacnMiLCBOVUxMKSwKICAgICBCVUlMVElOKCJraWxsIiwgQklORl9IQU5ETEVTX09QVFMsIGJp bl9raWxsLCAwLCAtMSwgMCwgTlVMTCwgTlVMTCksCiAgICAgQlVJTFRJTigibGV0IiwgMCwgYmlu X2xldCwgMSwgLTEsIDAsIE5VTEwsIE5VTEwpLAotICAgIEJVSUxUSU4oImxvY2FsIiwgQklORl9Q TFVTT1BUUyB8IEJJTkZfTUFHSUNFUVVBTFMgfCBCSU5GX1BTUEVDSUFMIHwgQklORl9BU1NJR04s IChIYW5kbGVyRnVuYyliaW5fdHlwZXNldCwgMCwgLTEsIDAsICJBRTolRjolSEw6JVI6JVRVWjol YWhpOiVscDolcnR1eCIsIE5VTEwpLAorICAgIEJVSUxUSU4oImxvY2FsIiwgQklORl9QTFVTT1BU UyB8IEJJTkZfTUFHSUNFUVVBTFMgfCBCSU5GX1BTUEVDSUFMIHwgQklORl9BU1NJR04sIChIYW5k bGVyRnVuYyliaW5fdHlwZXNldCwgMCwgLTEsIDAsICJBRTolRjolSEw6JVI6JVRVWjolYWhpOiVs bnA6JXJ0dXgiLCBOVUxMKSwKICAgICBCVUlMVElOKCJsb2dvdXQiLCAwLCBiaW5fYnJlYWssIDAs IDEsIEJJTl9MT0dPVVQsIE5VTEwsIE5VTEwpLAogCiAjaWYgZGVmaW5lZChaU0hfTUVNKSAmIGRl ZmluZWQoWlNIX01FTV9ERUJVRykKQEAgLTEyMSw3ICsxMjEsNyBAQCBzdGF0aWMgc3RydWN0IGJ1 aWx0aW4gYnVpbHRpbnNbXSA9CiAgICAgQlVJTFRJTigidHJhcCIsIEJJTkZfUFNQRUNJQUwgfCBC SU5GX0hBTkRMRVNfT1BUUywgYmluX3RyYXAsIDAsIC0xLCAwLCBOVUxMLCBOVUxMKSwKICAgICBC VUlMVElOKCJ0cnVlIiwgMCwgYmluX3RydWUsIDAsIC0xLCAwLCBOVUxMLCBOVUxMKSwKICAgICBC VUlMVElOKCJ0eXBlIiwgMCwgYmluX3doZW5jZSwgMCwgLTEsIDAsICJhbXBmc1N3IiwgInYiKSwK LSAgICBCVUlMVElOKCJ0eXBlc2V0IiwgQklORl9QTFVTT1BUUyB8IEJJTkZfTUFHSUNFUVVBTFMg fCBCSU5GX1BTUEVDSUFMIHwgQklORl9BU1NJR04sIChIYW5kbGVyRnVuYyliaW5fdHlwZXNldCwg MCwgLTEsIDAsICJBRTolRjolSEw6JVI6JVRVWjolYWZnaGk6JWtscDolcnR1eG16IiwgTlVMTCks CisgICAgQlVJTFRJTigidHlwZXNldCIsIEJJTkZfUExVU09QVFMgfCBCSU5GX01BR0lDRVFVQUxT IHwgQklORl9QU1BFQ0lBTCB8IEJJTkZfQVNTSUdOLCAoSGFuZGxlckZ1bmMpYmluX3R5cGVzZXQs IDAsIC0xLCAwLCAiQUU6JUY6JUhMOiVSOiVUVVo6JWFmZ2hpOiVrbHA6JXJ0dXhtbnoiLCBOVUxM KSwKICAgICBCVUlMVElOKCJ1bWFzayIsIDAsIGJpbl91bWFzaywgMCwgMSwgMCwgIlMiLCBOVUxM KSwKICAgICBCVUlMVElOKCJ1bmFsaWFzIiwgMCwgYmluX3VuaGFzaCwgMCwgLTEsIEJJTl9VTkFM SUFTLCAiYW1zIiwgTlVMTCksCiAgICAgQlVJTFRJTigidW5mdW5jdGlvbiIsIDAsIGJpbl91bmhh c2gsIDEsIC0xLCBCSU5fVU5GVU5DVElPTiwgIm0iLCAiZiIpLApAQCAtMjAzMCw2ICsyMDMwLDE5 IEBAIHR5cGVzZXRfc2luZ2xlKGNoYXIgKmNuYW1lLCBjaGFyICpwbmFtZSwgUGFyYW0gcG0sIGlu dCBmdW5jLAogICAgIGludCB1c2VwbSwgdGMsIGtlZXBsb2NhbCA9IDAsIG5ld3NwZWNpYWwgPSBO U19OT05FLCByZWFkb25seSwgZG9udF9zZXQgPSAwOwogICAgIGNoYXIgKnN1YnNjcmlwdDsKIAor ICAgIGlmIChwbSAmJiAocG0tPm5vZGUuZmxhZ3MgJiBQTV9OQU1FUkVGKSAmJiAhKChvZmZ8b24p ICYgUE1fTkFNRVJFRikpIHsKKwlpZiAoIShvZmYgJiBQTV9OQU1FUkVGKSkKKwkgICAgcG0gPSAo UGFyYW0pcmVzb2x2ZV9uYW1lcmVmKHBtLCBOVUxMKTsKKwlpZiAocG0gJiYgKHBtLT5ub2RlLmZs YWdzICYgUE1fTkFNRVJFRikgJiYKKwkgICAgKG9uICYgfihQTV9OQU1FUkVGfFBNX0xPQ0FMKSkp IHsKKwkgICAgLyogQ2hhbmdpbmcgdHlwZSBvZiBQTV9TUEVDSUFMfFBNX0FVVE9MT0FEIGlzIGEg ZmF0YWwgZXJyb3IuICAqCisJICAgICAqIFNob3VsZCB0aGlzIGJlIGEgZmF0YWwgZXJyb3IgYXMg d2VsbCwgcmF0aGVyIHRoYW4gd2FybmluZz8gKi8KKwkgICAgendhcm5uYW0oY25hbWUsICIlczog Y2FuJ3QgY2hhbmdlIHR5cGUgb2YgYSBuYW1lZCByZWZlcmVuY2UiLAorCQkgICAgIHBuYW1lKTsK KwkgICAgcmV0dXJuIE5VTEw7CisJfQorICAgIH0KKwogICAgIC8qCiAgICAgICogRG8gd2UgdXNl IHRoZSBleGlzdGluZyBwbT8gIE5vdGUgdGhhdCB0aGlzIGlzbid0IHRoZSBlbmQgb2YgdGhlCiAg ICAgICogc3RvcnksIGJlY2F1c2UgaWYgd2UgdHJ5IGFuZCBjcmVhdGUgYSBuZXcgcG0gYXQgdGhl IHNhbWUKQEAgLTI0MDYsNiArMjQxOSwxMSBAQCB0eXBlc2V0X3NpbmdsZShjaGFyICpjbmFtZSwg Y2hhciAqcG5hbWUsIFBhcmFtIHBtLCBpbnQgZnVuYywKIAkJcmV0dXJuIE5VTEw7CiAJfQogICAg IH0gZWxzZSBpZiAoKHN1YnNjcmlwdCA9IHN0cmNocihwbmFtZSwgJ1snKSkpIHsKKwlpZiAob24g JiBQTV9OQU1FUkVGKSB7CisJICAgIHplcnJuYW0oY25hbWUsCisJCSAgICAiJXM6IHJlZmVyZW5j ZSB2YXJpYWJsZSBjYW5ub3QgYmUgYW4gYXJyYXkiLCBwbmFtZSk7CisJICAgIHJldHVybiBOVUxM OworCX0KIAlpZiAob24gJiBQTV9SRUFET05MWSkgewogCSAgICB6ZXJybmFtKGNuYW1lLAogCQkg ICAgIiVzOiBjYW4ndCBjcmVhdGUgcmVhZG9ubHkgYXJyYXkgZWxlbWVudHMiLCBwbmFtZSk7CkBA IC0yNjQwLDYgKzI2NTgsMTQgQEAgYmluX3R5cGVzZXQoY2hhciAqbmFtZSwgY2hhciAqKmFyZ3Ys IExpbmtMaXN0IGFzc2lnbnMsIE9wdGlvbnMgb3BzLCBpbnQgZnVuYykKIAllbHNlIGlmIChPUFRf UExVUyhvcHMsb3B0dmFsKSkKIAkgICAgb2ZmIHw9IGJpdDsKICAgICB9CisgICAgaWYgKE9QVF9N SU5VUyhvcHMsJ24nKSkgeworCWlmIChvbnxvZmYpIHsKKwkgICAgendhcm5uYW0obmFtZSwgIm5v IG90aGVyIGF0dHJpYnV0ZXMgYWxsb3dlZCB3aXRoIC1uIik7CisJICAgIHJldHVybiAxOworCX0K KwlvbiB8PSBQTV9OQU1FUkVGOworICAgIH0gZWxzZSBpZiAoT1BUX1BMVVMob3BzLCduJykpCisJ b2ZmIHw9IFBNX05BTUVSRUY7CiAgICAgcm9mZiA9IG9mZjsKIAogICAgIC8qIFNhbml0eSBjaGVj a3Mgb24gdGhlIG9wdGlvbnMuICBSZW1vdmUgY29uZmxpY3Rpbmcgb3B0aW9ucy4gKi8KQEAgLTMw MjIsNiArMzA0OCwyNyBAQCBiaW5fdHlwZXNldChjaGFyICpuYW1lLCBjaGFyICoqYXJndiwgTGlu a0xpc3QgYXNzaWducywgT3B0aW9ucyBvcHMsIGludCBmdW5jKQogCSAgICB9CiAJICAgIGNvbnRp bnVlOwogCX0KKworCWlmIChvbiAmIFBNX05BTUVSRUYpIHsKKwkgICAgaWYgKGFzZy0+dmFsdWUu c2NhbGFyICYmCisJCShzdHJjbXAoYXNnLT5uYW1lLCBhc2ctPnZhbHVlLnNjYWxhcikgPT0gMCB8 fAorCQkgKChwbSA9IChQYXJhbSlyZXNvbHZlX25hbWVyZWYoKFBhcmFtKWhuLCBhc2cpKSAmJgor CQkgIChwbS0+bm9kZS5mbGFncyAmIFBNX05BTUVSRUYpKSkpIHsKKwkJaWYgKHBtLT5ub2RlLmZs YWdzICYgUE1fU1BFQ0lBTCkKKwkJICAgIHp3YXJubmFtKG5hbWUsICIlczogaW52YWxpZCByZWZl cmVuY2UiLCBwbS0+bm9kZS5uYW0pOworCQllbHNlCisJCSAgICB6d2Fybm5hbShuYW1lLCAiJXM6 IGludmFsaWQgc2VsZiByZWZlcmVuY2UiLCBhc2ctPm5hbWUpOworCQlyZXR1cm52YWwgPSAxOwor CQljb250aW51ZTsKKwkgICAgfQorCSAgICBpZiAoaG4pIHsKKwkJLyogbmFtZXJlZnMgYWx3YXlz IHN0YXJ0IG92ZXIgZnJlc2ggKi8KKwkJaWYgKCgoUGFyYW0paG4pLT5sZXZlbCA+PSBsb2NhbGxl dmVsKQorCQkgICAgdW5zZXRwYXJhbV9wbSgoUGFyYW0paG4sIDAsIDEpOworCQlobiA9IE5VTEw7 CisJICAgIH0KKwl9CisKIAlpZiAoIXR5cGVzZXRfc2luZ2xlKG5hbWUsIGFzZy0+bmFtZSwgKFBh cmFtKWhuLAogCQkJICAgIGZ1bmMsIG9uLCBvZmYsIHJvZmYsIGFzZywgTlVMTCwKIAkJCSAgICBv cHMsIDApKQpAQCAtMzgwNSw3ICszODUyLDggQEAgYmluX3Vuc2V0KGNoYXIgKm5hbWUsIGNoYXIg Kiphcmd2LCBPcHRpb25zIG9wcywgaW50IGZ1bmMpCiAJCXJldHVybnZhbCA9IDE7CiAJICAgIH0K IAl9IGVsc2UgewotCSAgICBpZiAodW5zZXRwYXJhbV9wbShwbSwgMCwgMSkpCisJICAgIGlmICgo cG0gPSAoUGFyYW0pcmVzb2x2ZV9uYW1lcmVmKHBtLCBOVUxMKSkgJiYKKwkJdW5zZXRwYXJhbV9w bShwbSwgMCwgMSkpCiAJCXJldHVybnZhbCA9IDE7CiAJfQogCWlmIChzcykKZGlmZiAtLWdpdCBh L1NyYy9wYXJhbXMuYyBiL1NyYy9wYXJhbXMuYwppbmRleCA2MzYyYjM4MmMuLjY5YjdmNDg0ZiAx MDA2NDQKLS0tIGEvU3JjL3BhcmFtcy5jCisrKyBiL1NyYy9wYXJhbXMuYwpAQCAtNTM2LDYgKzUz Niw5IEBAIGdldHBhcmFtbm9kZShIYXNoVGFibGUgaHQsIGNvbnN0IGNoYXIgKm5hbSkKIAkJIG5h bSk7CiAJfQogICAgIH0KKworICAgIGlmIChobiAmJiBodCA9PSByZWFscGFyYW10YWIpCisJaG4g PSByZXNvbHZlX25hbWVyZWYocG0sIE5VTEwpOwogICAgIHJldHVybiBobjsKIH0KIApAQCAtOTkz LDYgKzk5NiwzNCBAQCBjcmVhdGVwYXJhbShjaGFyICpuYW1lLCBpbnQgZmxhZ3MpCiAJCQkgZ2V0 aGFzaG5vZGUyKHBhcmFtdGFiLCBuYW1lKSA6CiAJCQkgcGFyYW10YWItPmdldG5vZGUocGFyYW10 YWIsIG5hbWUpKTsKIAorCWlmIChvbGRwbSAmJiAob2xkcG0tPm5vZGUuZmxhZ3MgJiBQTV9OQU1F UkVGKSAmJgorCSAgICAhKGZsYWdzICYgUE1fTkFNRVJFRikpIHsKKwkgICAgUGFyYW0gbGFzdHBt OworCSAgICBzdHJ1Y3QgYXNnbWVudCBzdG9wOworCSAgICBzdG9wLmZsYWdzID0gUE1fTkFNRVJF RiB8IChmbGFncyAmIFBNX0xPQ0FMKTsKKwkgICAgc3RvcC5uYW1lID0gb2xkcG0tPm5vZGUubmFt OworCSAgICBzdG9wLnZhbHVlLnNjYWxhciA9IG9sZHBtLT51LnN0cjsKKwkgICAgbGFzdHBtID0g KFBhcmFtKXJlc29sdmVfbmFtZXJlZihvbGRwbSwgJnN0b3ApOworCSAgICBpZiAobGFzdHBtKSB7 CisJCWlmIChsYXN0cG0tPm5vZGUuZmxhZ3MgJiBQTV9OQU1FUkVGKSB7CisJCSAgICBpZiAobGFz dHBtLT51LnN0ciAmJiAqKGxhc3RwbS0+dS5zdHIpKSB7CisJCQluYW1lID0gbGFzdHBtLT51LnN0 cjsKKwkJCW9sZHBtID0gTlVMTDsKKwkJICAgIH0gZWxzZSB7CisJCQlpZiAoIShsYXN0cG0tPm5v ZGUuZmxhZ3MgJiBQTV9SRUFET05MWSkpCisJCQkgICAgbGFzdHBtLT5ub2RlLmZsYWdzIHw9IFBN X1VOU0VUOworCQkJcmV0dXJuIGxhc3RwbTsKKwkJICAgIH0KKwkJfSBlbHNlIHsKKwkJICAgIC8q IG5hbWVyZWYgcG9pbnRpbmcgdG8gYW4gdW5zZXQgbG9jYWwgKi8KKwkJICAgIERQVVRTKCEobGFz dHBtLT5ub2RlLmZsYWdzICYgUE1fVU5TRVQpLAorCQkJICAiQlVHOiBsb2NhbCBwYXJhbWV0ZXIg aXMgbm90IHVuc2V0Iik7CisJCSAgICBvbGRwbSA9IGxhc3RwbTsKKwkJfQorCSAgICB9IGVsc2UK KwkJZmxhZ3MgfD0gUE1fTkFNRVJFRjsKKwl9CisKIAlEUFVUUyhvbGRwbSAmJiBvbGRwbS0+bGV2 ZWwgPiBsb2NhbGxldmVsLAogCSAgICAgICJCVUc6IG9sZCBsb2NhbCBwYXJhbWV0ZXIgbm90IGRl bGV0ZWQiKTsKIAlpZiAob2xkcG0gJiYgKG9sZHBtLT5sZXZlbCA9PSBsb2NhbGxldmVsIHx8ICEo ZmxhZ3MgJiBQTV9MT0NBTCkpKSB7CkBAIC0yMTA5LDYgKzIxNDAsMjMgQEAgZmV0Y2h2YWx1ZShW YWx1ZSB2LCBjaGFyICoqcHB0ciwgaW50IGJyYWNrcywgaW50IGZsYWdzKQogCSAgICBtZW1zZXQo diwgMCwgc2l6ZW9mKCp2KSk7CiAJZWxzZQogCSAgICB2ID0gKFZhbHVlKSBoY2FsbG9jKHNpemVv ZiAqdik7CisJaWYgKChwbS0+bm9kZS5mbGFncyAmIFBNX05BTUVSRUYpICYmIHBtLT51LnN0ciAm JiAqKHBtLT51LnN0cikpIHsKKwkgICAgLyogb25seSBoYXBwZW5zIGZvciBuYW1lcmVmcyBwb2lu dGluZyB0byBhcnJheSBlbGVtZW50cyAqLworCSAgICBjaGFyICpyZWYgPSBkdXBzdHJpbmcocG0t PnUuc3RyKTsKKwkgICAgY2hhciAqc3MgPSBwbS0+d2lkdGggPyByZWYgKyBwbS0+d2lkdGggOiBO VUxMOworCSAgICBpZiAoc3MpIHsKKwkJc2F2ID0gKnNzOworCQkqc3MgPSAwOworCSAgICB9CisJ ICAgIFBhcmFtIHAxID0gKFBhcmFtKWdldGhhc2hub2RlMihwYXJhbXRhYiwgcmVmKTsKKwkgICAg aWYgKCEocDEgJiYgKHBtID0gdXBzY29wZShwMSwgcG0tPmJhc2UpKSkgfHwKKwkJKChwbS0+bm9k ZS5mbGFncyAmIFBNX1VOU0VUKSAmJgorCQkhKHBtLT5ub2RlLmZsYWdzICYgUE1fREVDTEFSRUQp KSkKKwkJcmV0dXJuIE5VTEw7CisJICAgIGlmIChzcykKKwkJKnNzID0gc2F2OworCSAgICBzID0g c3M7CisJfQogCWlmIChQTV9UWVBFKHBtLT5ub2RlLmZsYWdzKSAmIChQTV9BUlJBWXxQTV9IQVNI RUQpKSB7CiAJICAgIC8qIE92ZXJsb2FkIHYtPmlzYXJyIGFzIHRoZSBmbGFnIGJpdHMgZm9yIGhh c2hlZCBhcnJheXMuICovCiAJICAgIHYtPmlzYXJyID0gZmxhZ3MgfCAoaXN2YXJhdCA/IFNDQU5Q TV9JU1ZBUl9BVCA6IDApOwpAQCAtMjY3Nyw2ICsyNzI1LDcgQEAgYXNzaWduc3RydmFsdWUoVmFs dWUgdiwgY2hhciAqdmFsLCBpbnQgZmxhZ3MpCiAgICAgICAgIH0KIAlicmVhazsKICAgICB9Cisg ICAgc2V0c2NvcGUodi0+cG0pOwogICAgIGlmICgoIXYtPnBtLT5lbnYgJiYgISh2LT5wbS0+bm9k ZS5mbGFncyAmIFBNX0VYUE9SVEVEKSAmJgogCSAhKGlzc2V0KEFMTEVYUE9SVCkgJiYgISh2LT5w bS0+bm9kZS5mbGFncyAmIFBNX0hBU0hFTEVNKSkpIHx8CiAJKHYtPnBtLT5ub2RlLmZsYWdzICYg UE1fQVJSQVkpIHx8IHYtPnBtLT5lbmFtZSkKQEAgLTMwODQsMTEgKzMxMzMsMjAgQEAgYXNzaWdu c3BhcmFtKGNoYXIgKnMsIGNoYXIgKnZhbCwgaW50IGZsYWdzKQogCX0KICAgICB9CiAgICAgaWYg KCF2ICYmICEodiA9IGdldHZhbHVlKCZ2YnVmLCAmdCwgMSkpKSB7Ci0JdW5xdWV1ZV9zaWduYWxz KCk7CiAJenNmcmVlKHZhbCk7CisJdW5xdWV1ZV9zaWduYWxzKCk7CiAJLyogZXJyZmxhZyB8PSBF UlJGTEFHX0VSUk9SOyAqLwogCXJldHVybiBOVUxMOwogICAgIH0KKyAgICBpZiAoKnZhbCAmJiAo di0+cG0tPm5vZGUuZmxhZ3MgJiBQTV9OQU1FUkVGKSkgeworCWlmICghdmFsaWRfcmVmbmFtZSh2 YWwpKSB7CisJICAgIHplcnIoImludmFsaWQgdmFyaWFibGUgbmFtZTogJXMiLCB2YWwpOworCSAg ICB6c2ZyZWUodmFsKTsKKwkgICAgdW5xdWV1ZV9zaWduYWxzKCk7CisJICAgIGVycmZsYWcgfD0g RVJSRkxBR19FUlJPUjsKKwkgICAgcmV0dXJuIE5VTEw7CisJfQorICAgIH0KICAgICBpZiAoZmxh Z3MgJiBBU1NQTV9XQVJOKQogCWNoZWNrX3dhcm5fcG0odi0+cG0sICJzY2FsYXIiLCBjcmVhdGVk LCAxKTsKICAgICB2LT5wbS0+bm9kZS5mbGFncyAmPSB+UE1fREVGQVVMVEVEOwpAQCAtMzExNSw4 ICszMTczLDggQEAgYXNzaWduc3BhcmFtKGNoYXIgKnMsIGNoYXIgKnZhbCwgaW50IGZsYWdzKQog CQkJbGhzLnUubCA9IGxocy51LmwgKyAoemxvbmcpcmhzLnUuZDsKIAkJfQogCQlzZXRudW12YWx1 ZSh2LCBsaHMpOwotICAgIAkgICAgCXVucXVldWVfc2lnbmFscygpOwogCQl6c2ZyZWUodmFsKTsK KyAgICAJICAgIAl1bnF1ZXVlX3NpZ25hbHMoKTsKIAkJcmV0dXJuIHYtPnBtOyAvKiBhdm9pZCBs YXRlciBzZXRzdHJ2YWx1ZSgpIGNhbGwgKi8KIAkgICAgY2FzZSBQTV9BUlJBWToKIAkgICAgCWlm ICh1bnNldChLU0hBUlJBWVMpKSB7CkBAIC0zMTQxLDkgKzMxOTksOSBAQCBhc3NpZ25zcGFyYW0o Y2hhciAqcywgY2hhciAqdmFsLCBpbnQgZmxhZ3MpCiAJICAgIGNhc2UgUE1fSU5URUdFUjoKIAkg ICAgY2FzZSBQTV9FRkxPQVQ6CiAJICAgIGNhc2UgUE1fRkZMT0FUOgorCQl6c2ZyZWUodmFsKTsK IAkJdW5xdWV1ZV9zaWduYWxzKCk7CiAJCXplcnIoImF0dGVtcHQgdG8gYWRkIHRvIHNsaWNlIG9m IGEgbnVtZXJpYyB2YXJpYWJsZSIpOwotCQl6c2ZyZWUodmFsKTsKIAkJcmV0dXJuIE5VTEw7CiAJ ICAgIGNhc2UgUE1fQVJSQVk6CiAJICAgICAga3NoYXBwZW5kOgpAQCAtMzYwMiw3ICszNjYwLDgg QEAgdW5zZXRwYXJhbShjaGFyICpzKQogICAgIGlmICgocG0gPSAoUGFyYW0pIChwYXJhbXRhYiA9 PSByZWFscGFyYW10YWIgPwogCQkgICAgICAgLyogZ2V0bm9kZTIoKSB0byBhdm9pZCBhdXRvbG9h ZGluZyAqLwogCQkgICAgICAgcGFyYW10YWItPmdldG5vZGUyKHBhcmFtdGFiLCBzKSA6Ci0JCSAg ICAgICBwYXJhbXRhYi0+Z2V0bm9kZShwYXJhbXRhYiwgcykpKSkKKwkJICAgICAgIHBhcmFtdGFi LT5nZXRub2RlKHBhcmFtdGFiLCBzKSkpICYmCisJIShwbS0+bm9kZS5mbGFncyAmIFBNX05BTUVS RUYpKQogCXVuc2V0cGFyYW1fcG0ocG0sIDAsIDEpOwogICAgIHVucXVldWVfc2lnbmFscygpOwog fQpAQCAtNTc4Myw3ICs1ODQyLDggQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBwYXJhbXR5cGVzIHBt dHlwZXNbXSA9IHsKICAgICB7IFBNX1RBR0dFRCwgInRhZ2dlZCIsICd0JywgMH0sCiAgICAgeyBQ TV9FWFBPUlRFRCwgImV4cG9ydGVkIiwgJ3gnLCAwfSwKICAgICB7IFBNX1VOSVFVRSwgInVuaXF1 ZSIsICdVJywgMH0sCi0gICAgeyBQTV9USUVELCAidGllZCIsICdUJywgMH0KKyAgICB7IFBNX1RJ RUQsICJ0aWVkIiwgJ1QnLCAwfSwKKyAgICB7IFBNX05BTUVSRUYsICJuYW1yZWYiLCAnbicsIDB9 CiB9OwogCiAjZGVmaW5lIFBNVFlQRVNfU0laRSAoKGludCkoc2l6ZW9mKHBtdHlwZXMpL3NpemVv ZihzdHJ1Y3QgcGFyYW10eXBlcykpKQpAQCAtNjAzNywzICs2MDk3LDEyMyBAQCBwcmludHBhcmFt bm9kZShIYXNoTm9kZSBobiwgaW50IHByaW50ZmxhZ3MpCiAgICAgZWxzZSBpZiAoIShwcmludGZs YWdzICYgUFJJTlRfS1ZfUEFJUikpCiAJcHV0Y2hhcignXG4nKTsKIH0KKworLyoqLworbW9kX2V4 cG9ydCBIYXNoTm9kZQorcmVzb2x2ZV9uYW1lcmVmKFBhcmFtIHBtLCBjb25zdCBBc2dtZW50IHN0 b3ApCit7CisgICAgSGFzaE5vZGUgaG4gPSAoSGFzaE5vZGUpcG07CisgICAgY29uc3QgY2hhciAq c2VlayA9IHN0b3AgPyBzdG9wLT52YWx1ZS5zY2FsYXIgOiBOVUxMOworCisgICAgaWYgKHBtICYm IChwbS0+bm9kZS5mbGFncyAmIFBNX05BTUVSRUYpKSB7CisJaWYgKHBtICYmIChwbS0+bm9kZS5m bGFncyAmIChQTV9VTlNFVHxQTV9UQUdHRUQpKSkgeworCSAgICAvKiBTZW1hcGhvcmUgd2l0aCBj cmVhdGVwYXJhbSgpICovCisJICAgIHBtLT5ub2RlLmZsYWdzICY9IH5QTV9VTlNFVDsKKwkgICAg LyogU2VlIFYxMHByaXZhdGUuenRzdCBlbmQgaXMgaW4gc2NvcGUgYnV0IHByaXZhdGU6CisJICAg IGlmIChwbS0+bm9kZS5mbGFncyAmIFBNX1NQRUNJQUwpCisJCXJldHVybiBOVUxMOworCSAgICAq LworCSAgICByZXR1cm4gKEhhc2hOb2RlKSBwbTsKKwl9IGVsc2UgaWYgKHBtLT51LnN0cikgewor CSAgICBpZiAoKHBtLT5ub2RlLmZsYWdzICYgUE1fVEFHR0VEKSB8fAorCQkoc3RvcCAmJiBzdHJj bXAocG0tPnUuc3RyLCBzdG9wLT5uYW1lKSA9PSAwKSkgeworCQkvKiB6d2Fybm5hbShwbS0+dS5z dHIsICJpbnZhbGlkIHNlbGYgcmVmZXJlbmNlIik7ICovCisJCXJldHVybiBzdG9wID8gKEhhc2hO b2RlKXBtIDogTlVMTDsKKwkgICAgfQorCSAgICBpZiAoKihwbS0+dS5zdHIpKQorCQlzZWVrID0g cG0tPnUuc3RyOworCX0KKyAgICB9CisgICAgZWxzZSBpZiAocG0gJiYgIShzdG9wICYmIChzdG9w LT5mbGFncyAmIFBNX05BTUVSRUYpKSkKKwlyZXR1cm4gKEhhc2hOb2RlKXBtOworICAgIGlmIChz ZWVrKSB7CisJcXVldWVfc2lnbmFscygpOworCS8qIHBtLT53aWR0aCBpcyB0aGUgb2Zmc2V0IG9m IGFueSBzdWJzY3JpcHQgKi8KKwlpZiAocG0gJiYgKHBtLT5ub2RlLmZsYWdzICYgUE1fTkFNRVJF RikgJiYgcG0tPndpZHRoKSB7CisJICAgIGlmIChzdG9wKSB7CisJCWlmIChzdG9wLT5mbGFncyAm IFBNX05BTUVSRUYpCisJCSAgICBobiA9IChIYXNoTm9kZSlwbTsKKwkJZWxzZQorCQkgICAgaG4g PSBOVUxMOworCSAgICB9IGVsc2UgeworCQkvKiB0aGlzIGhhcyB0byBiZSB0aGUgZW5kIG9mIGFu eSBjaGFpbiAqLworCQlobiA9IChIYXNoTm9kZSlwbTsJLyogc2VlIGZldGNodmFsdWUoKSAqLwor CSAgICB9CisJfSBlbHNlIGlmICgoaG4gPSBnZXRoYXNobm9kZTIocmVhbHBhcmFtdGFiLCBzZWVr KSkpIHsKKwkgICAgaWYgKHBtKSB7CisJCWlmICghKHN0b3AgJiYgKHN0b3AtPmZsYWdzICYgKFBN X0xPQ0FMKSkpKQorCQkgICAgaG4gPSAoSGFzaE5vZGUpdXBzY29wZSgoUGFyYW0paG4sCisJCQkJ CSAgICgocG0tPm5vZGUuZmxhZ3MgJiBQTV9OQU1FUkVGKSA/CisJCQkJCSAgICBwbS0+YmFzZSA6 ICgoUGFyYW0paG4pLT5sZXZlbCkpOworCQkvKiB1c2VyIGNhbid0IHRhZyBhIG5hbWVyZWYsIHNh ZmUgZm9yIGxvb3AgZGV0ZWN0aW9uICovCisJCXBtLT5ub2RlLmZsYWdzIHw9IFBNX1RBR0dFRDsK KwkgICAgfQorCSAgICBpZiAoaG4pIHsKKwkJaWYgKGhuLT5mbGFncyAmIFBNX0FVVE9MT0FEKQor CQkgICAgaG4gPSBnZXRwYXJhbW5vZGUocmVhbHBhcmFtdGFiLCBzZWVrKTsKKwkJaWYgKCEoaG4t PmZsYWdzICYgUE1fVU5TRVQpKQorCQkgICAgaG4gPSByZXNvbHZlX25hbWVyZWYoKFBhcmFtKWhu LCBzdG9wKTsKKwkgICAgfQorCSAgICBpZiAocG0pCisJCXBtLT5ub2RlLmZsYWdzICY9IH5QTV9U QUdHRUQ7CisJfSBlbHNlIGlmIChzdG9wICYmIChzdG9wLT5mbGFncyAmIFBNX05BTUVSRUYpKQor CSAgICBobiA9IChIYXNoTm9kZSlwbTsKKwl1bnF1ZXVlX3NpZ25hbHMoKTsKKyAgICB9CisKKyAg ICByZXR1cm4gaG47Cit9CisKKy8qKi8KK3N0YXRpYyB2b2lkCitzZXRzY29wZShQYXJhbSBwbSkK K3sKKyAgICBpZiAocG0tPm5vZGUuZmxhZ3MgJiBQTV9OQU1FUkVGKSB7CisJUGFyYW0gYmFzZXBt OworCWNoYXIgKnQgPSBwbS0+dS5zdHIgPyBpdHlwZV9lbmQocG0tPnUuc3RyLCBJSURFTlQsIDAp IDogTlVMTDsKKworCS8qIFRlbXBvcmFyaWx5IGNoYW5nZSBuYW1lcmVmIHRvIGFycmF5IHBhcmFt ZXRlciBpdHNlbGYgKi8KKwlpZiAodCAmJiAqdCA9PSAnWycpCisJICAgICp0ID0gMDsKKwllbHNl CisJICAgIHQgPSAwOworCWJhc2VwbSA9IChQYXJhbSlyZXNvbHZlX25hbWVyZWYocG0sIE5VTEwp OworCWlmICh0KSB7CisJICAgIHBtLT53aWR0aCA9IHQgLSBwbS0+dS5zdHI7CisJICAgICp0ID0g J1snOworCX0KKwlpZiAoYmFzZXBtKQorCSAgICBwbS0+YmFzZSA9ICgoYmFzZXBtLT5ub2RlLmZs YWdzICYgUE1fTkFNRVJFRikgPworCQkJYmFzZXBtLT5iYXNlIDogYmFzZXBtLT5sZXZlbCk7Cisg ICAgfQorfQorCisvKiovCittb2RfZXhwb3J0IFBhcmFtCit1cHNjb3BlKFBhcmFtIHBtLCBpbnQg cmVmbGV2ZWwpCit7CisgICAgUGFyYW0gdXAgPSBwbS0+b2xkOworICAgIHdoaWxlIChwbSAmJiB1 cCAmJiB1cC0+bGV2ZWwgPj0gcmVmbGV2ZWwpIHsKKwlwbSA9IHVwOworCWlmICh1cCkKKwkgICAg dXAgPSB1cC0+b2xkOworICAgIH0KKyAgICByZXR1cm4gcG07Cit9CisKKy8qKi8KK21vZF9leHBv cnQgaW50Cit2YWxpZF9yZWZuYW1lKGNoYXIgKnZhbCkKK3sKKyAgICBjaGFyICp0ID0gaXR5cGVf ZW5kKHZhbCwgSUlERU5ULCAwKTsKKworICAgIGlmICgqdCAhPSAwKSB7CisJaWYgKCp0ID09ICdb JykgeworCSAgICB0b2tlbml6ZSh0ID0gZHVwc3RyaW5nKHQrMSkpOworCSAgICB0ID0gcGFyc2Vf c3Vic2NyaXB0KHQsIDAsICddJyk7CisJfSBlbHNlIHsKKwkgICAgdCA9IE5VTEw7CisJfQorICAg IH0KKyAgICByZXR1cm4gISF0OworfQpkaWZmIC0tZ2l0IGEvU3JjL3N1YnN0LmMgYi9TcmMvc3Vi c3QuYwppbmRleCA0YWQ5ZmVlMWEuLjdiYTg0Y2JhOCAxMDA2NDQKLS0tIGEvU3JjL3N1YnN0LmMK KysrIGIvU3JjL3N1YnN0LmMKQEAgLTI1NzMsMTMgKzI1NzMsMTQgQEAgcGFyYW1zdWJzdChMaW5r TGlzdCBsLCBMaW5rTm9kZSBuLCBjaGFyICoqc3RyLCBpbnQgcXQsIGludCBwZl9mbGFncywKIAkJ CSAgICAgICAhKHYtPnBtLT5ub2RlLmZsYWdzICYgUE1fVU5TRVQpKSkgewogCQlpbnQgZiA9IHYt PnBtLT5ub2RlLmZsYWdzOwogCi0JCXN3aXRjaCAoUE1fVFlQRShmKSkgeworCQlzd2l0Y2ggKFBN X1RZUEUoZil8KGYgJiBQTV9OQU1FUkVGKSkgewogCQljYXNlIFBNX1NDQUxBUjogIHZhbCA9ICJz Y2FsYXIiOyBicmVhazsKIAkJY2FzZSBQTV9BUlJBWTogICB2YWwgPSAiYXJyYXkiOyBicmVhazsK IAkJY2FzZSBQTV9JTlRFR0VSOiB2YWwgPSAiaW50ZWdlciI7IGJyZWFrOwogCQljYXNlIFBNX0VG TE9BVDoKIAkJY2FzZSBQTV9GRkxPQVQ6ICB2YWwgPSAiZmxvYXQiOyBicmVhazsKIAkJY2FzZSBQ TV9IQVNIRUQ6ICB2YWwgPSAiYXNzb2NpYXRpb24iOyBicmVhazsKKwkJY2FzZSBQTV9OQU1FUkVG OiB2YWwgPSAibmFtZXJlZiI7IGJyZWFrOwogCQl9CiAJCXZhbCA9IGR1cHN0cmluZyh2YWwpOwog CQlpZiAodi0+cG0tPmxldmVsKQpkaWZmIC0tZ2l0IGEvU3JjL3pzaC5oIGIvU3JjL3pzaC5oCmlu ZGV4IGY4MmU3NmU0Yi4uMWUzNWJkMzNlIDEwMDY0NAotLS0gYS9TcmMvenNoLmgKKysrIGIvU3Jj L3pzaC5oCkBAIC0xODUyLDggKzE4NTIsOSBAQCBzdHJ1Y3QgcGFyYW0gewogCUdzdUhhc2ggaDsK ICAgICB9IGdzdTsKIAotICAgIGludCBiYXNlOwkJCS8qIG91dHB1dCBiYXNlIG9yIGZsb2F0aW5n IHBvaW50IHByZWMgICAgKi8KLSAgICBpbnQgd2lkdGg7CQkJLyogZmllbGQgd2lkdGggICAgICAg ICAgICAgICAgICAgICAgICAgICAqLworICAgIGludCBiYXNlOwkJCS8qIG91dHB1dCBiYXNlIG9y IGZsb2F0aW5nIHBvaW50IHByZWMgb3IgKi8KKyAJCQkJLyogZm9yIG5hbWVyZWZzLCBsb2NhbGxl dmVsIG9mIHJlZmVyZW5jZSAqLworICAgIGludCB3aWR0aDsJCQkvKiBmaWVsZCB3aWR0aCBvciBu YW1lcmVmIHN1YnNjcmlwdCBpZHggICovCiAgICAgY2hhciAqZW52OwkJCS8qIGxvY2F0aW9uIGlu IGVudmlyb25tZW50LCBpZiBleHBvcnRlZCAgKi8KICAgICBjaGFyICplbmFtZTsJCS8qIG5hbWUg b2YgY29ycmVzcG9uZGluZyBlbnZpcm9ubWVudCB2YXIgKi8KICAgICBQYXJhbSBvbGQ7CQkJLyog b2xkIHN0cnVjdCBmb3IgdXNlIHdpdGggbG9jYWwgICAgICAgICAqLwpAQCAtMTkzMiw5ICsxOTMz LDEwIEBAIHN0cnVjdCB0aWVkZGF0YSB7CiAJCQkJICovCiAjZGVmaW5lIFBNX0hBU0hFTEVNICAg ICAoMTw8MjgpIC8qIGlzIGEgaGFzaC1lbGVtZW50ICovCiAjZGVmaW5lIFBNX05BTUVERElSICAg ICAoMTw8MjkpIC8qIGhhcyBhIGNvcnJlc3BvbmRpbmcgbmFtZWRkaXJ0YWIgZW50cnkgICAgKi8K KyNkZWZpbmUgUE1fTkFNRVJFRiAgICAgICgxPDwzMCkgLyogcG9pbnRlciB0byBhIGRpZmZlcmVu dCBwYXJhbWV0ZXIgICAgICAgICAqLwogCiAvKiBUaGUgb3B0aW9uIHN0cmluZyBjb3JyZXNwb25k cyB0byB0aGUgZmlyc3Qgb2YgdGhlIHZhcmlhYmxlcyBhYm92ZSAqLwotI2RlZmluZSBUWVBFU0VU X09QVFNUUiAiYWlFRkFMUlpsdXJ0eFVoSFRreiIKKyNkZWZpbmUgVFlQRVNFVF9PUFRTVFIgImFp RUZBTFJabHVydHhVaEhUIgogCiAvKiBUaGVzZSB0eXBlc2V0IG9wdGlvbnMgdGFrZSBhbiBvcHRp b25hbCBudW1lcmljIGFyZ3VtZW50ICovCiAjZGVmaW5lIFRZUEVTRVRfT1BUTlVNICJMUlppRUYi Cg== --00000000000093515c05f3feb0ea--