From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 66227C6FD1F for ; Sat, 4 Mar 2023 20:55:35 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1677963334; h=from:from:sender:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:list-id:list-help: list-unsubscribe:list-subscribe:list-post; bh=QOx/6KLHjlu4tVk14Cx0pmfI88d97c/GXOnyksG5Eeo=; b=brEwA3zgzLtdOaXE6Oqs5txO+CIB3IZ1ndolZt/1wFxivnIaa0VVGk/bi6b6lk3N4pflxe sWsbA+OylFkihrJPaLPA4IjVdKQaXSJDqVQbOcXlGasb7e02Q1vUKaVIfuGW4jWSqDgbJM 9YJ4dW39mfK/XqaioBTqsU/h4eTZEE0= Received: from mimecast-mx02.redhat.com (mx3-rdu2.redhat.com [66.187.233.73]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id us-mta-448-gAdEI-YjNLSCp2tgDn5FLQ-1; Sat, 04 Mar 2023 15:55:31 -0500 X-MC-Unique: gAdEI-YjNLSCp2tgDn5FLQ-1 Received: from smtp.corp.redhat.com (int-mx09.intmail.prod.int.rdu2.redhat.com [10.11.54.9]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id 039BE1C05B05; Sat, 4 Mar 2023 20:55:29 +0000 (UTC) Received: from mm-prod-listman-01.mail-001.prod.us-east-1.aws.redhat.com (unknown [10.30.29.100]) by smtp.corp.redhat.com (Postfix) with ESMTP id E72F4492C18; Sat, 4 Mar 2023 20:55:28 +0000 (UTC) Received: from mm-prod-listman-01.mail-001.prod.us-east-1.aws.redhat.com (localhost [IPv6:::1]) by mm-prod-listman-01.mail-001.prod.us-east-1.aws.redhat.com (Postfix) with ESMTP id 7622E19466DF; Sat, 4 Mar 2023 20:55:28 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx01.intmail.prod.int.rdu2.redhat.com [10.11.54.1]) by mm-prod-listman-01.mail-001.prod.us-east-1.aws.redhat.com (Postfix) with ESMTP id 8B6D919452CD for ; Thu, 2 Mar 2023 19:02:49 +0000 (UTC) Received: by smtp.corp.redhat.com (Postfix) id 6C996400EA93; Thu, 2 Mar 2023 19:02:49 +0000 (UTC) Received: from mimecast-mx02.redhat.com (mimecast03.extmail.prod.ext.rdu2.redhat.com [10.11.55.19]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 6455C40C83B6 for ; Thu, 2 Mar 2023 19:02:49 +0000 (UTC) Received: from us-smtp-1.mimecast.com (us-smtp-1.mimecast.com [207.211.31.81]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id 3E2D287A9E3 for ; Thu, 2 Mar 2023 19:02:49 +0000 (UTC) Received: from mail-pf1-f172.google.com (mail-pf1-f172.google.com [209.85.210.172]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-245-G1FI8jA3NuWNDSjeU5ZfyA-1; Thu, 02 Mar 2023 14:02:45 -0500 X-MC-Unique: G1FI8jA3NuWNDSjeU5ZfyA-1 Received: by mail-pf1-f172.google.com with SMTP id cp12so88384pfb.5 for ; Thu, 02 Mar 2023 11:02:44 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; t=1677783764; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=7eNgkNkO7kUzRzMyg6Huq3bqtBmJhOsXt5NyJWkplV0=; b=oKEWHv+bOicefrWhNq5u+I3TX0yfCY24c7qZV3NAuIeN6Jk/utQyknf/dP8640QtJ/ slWF4qExVuaAcpQJBUrANteyroZSKcp4rPMBvo3bghMt9l1986cx9rI/rwUxlWeYa50d i5Ig/kS+gtKdMTcmGI8H8ZEfEXPzTw7wa3NRlcDL08kIaeiBrYql3sERhuV24jcwdbCz No/D53xsSxBki1MPh8hhiL9qSGn643A6SxoB+vSvfUuPXFO/cHVIADTQv3YoqlLagANp t21vqaqujcwKl5KjMb7gqtiHOhv9JDKzcr/3I9WQ2DJh8fKq7K/Da6Bi1waRH+aq6nxL N18g== X-Gm-Message-State: AO0yUKXz6SryQVHm8WC9MIpgaigBiOeaTZOEqd0kcA0+2FWSIBSCjDXJ YF/lyVeLK7gonG37evnZ5CPTQai+XdyXpXzCecLg X-Google-Smtp-Source: AK7set/ZgQ1PLxjzqfjnZhDwNZUZSnS+oEiRfFID9zN0H+NiVUb8QA+kx+QEtd5OoGJV/vgGc+ziesiZ5qkQNGGFv8w= X-Received: by 2002:a63:e113:0:b0:4f0:2691:a0ee with SMTP id z19-20020a63e113000000b004f02691a0eemr1157233pgh.0.1677783763707; Thu, 02 Mar 2023 11:02:43 -0800 (PST) MIME-Version: 1.0 References: <1675119451-23180-1-git-send-email-wufan@linux.microsoft.com> <1675119451-23180-3-git-send-email-wufan@linux.microsoft.com> In-Reply-To: <1675119451-23180-3-git-send-email-wufan@linux.microsoft.com> From: Paul Moore Date: Thu, 2 Mar 2023 14:02:32 -0500 Message-ID: Subject: Re: [RFC PATCH v9 02/16] ipe: add policy parser To: Fan Wu X-Mimecast-Impersonation-Protect: Policy=CLT - Impersonation Protection Definition; Similar Internal Domain=false; Similar Monitored External Domain=false; Custom External Domain=false; Mimecast External Domain=false; Newly Observed Domain=false; Internal User Name=false; Custom Display Name List=false; Reply-to Address Mismatch=false; Targeted Threat Dictionary=false; Mimecast Threat Dictionary=false; Custom Threat Dictionary=false X-Scanned-By: MIMEDefang 3.1 on 10.11.54.1 X-Mailman-Approved-At: Sat, 04 Mar 2023 20:55:24 +0000 X-BeenThere: linux-audit@redhat.com X-Mailman-Version: 2.1.29 Precedence: list List-Id: Linux Audit Discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: axboe@kernel.dk, linux-block@vger.kernel.org, tytso@mit.edu, dm-devel@redhat.com, corbet@lwn.net, roberto.sassu@huawei.com, Deven Bowers , linux-doc@vger.kernel.org, snitzer@kernel.org, jmorris@namei.org, zohar@linux.ibm.com, linux-kernel@vger.kernel.org, ebiggers@kernel.org, linux-security-module@vger.kernel.org, linux-audit@redhat.com, eparis@redhat.com, linux-fscrypt@vger.kernel.org, linux-integrity@vger.kernel.org, agk@redhat.com, serge@hallyn.com Errors-To: linux-audit-bounces@redhat.com Sender: "Linux-audit" X-Scanned-By: MIMEDefang 3.1 on 10.11.54.9 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 T24gTW9uLCBKYW4gMzAsIDIwMjMgYXQgNTo1OOKAr1BNIEZhbiBXdSA8d3VmYW5AbGludXgubWlj cm9zb2Z0LmNvbT4gd3JvdGU6Cj4KPiBGcm9tOiBEZXZlbiBCb3dlcnMgPGRldmVuLmRlc2FpQGxp bnV4Lm1pY3Jvc29mdC5jb20+Cj4KPiBJUEUncyBpbnRlcnByZXRhdGlvbiBvZiB0aGUgd2hhdCB0 aGUgdXNlciB0cnVzdHMgaXMgYWNjb21wbGlzaGVkIHRocm91Z2gKPiBpdHMgcG9saWN5LiBJUEUn cyBkZXNpZ24gaXMgdG8gbm90IHByb3ZpZGUgc3VwcG9ydCBmb3IgYSBzaW5nbGUgdHJ1c3QKPiBw cm92aWRlciwgYnV0IHRvIHN1cHBvcnQgbXVsdGlwbGUgcHJvdmlkZXJzIHRvIGVuYWJsZSB0aGUg ZW5kLXVzZXIgdG8KPiBjaG9vc2UgdGhlIGJlc3Qgb25lIHRvIHNlZWsgdGhlaXIgbmVlZHMuCj4K PiBUaGlzIHJlcXVpcmVzIHRoZSBwb2xpY3kgdG8gYmUgcmF0aGVyIGZsZXhpYmxlIGFuZCBtb2R1 bGFyIHNvIHRoYXQKPiBpbnRlZ3JpdHkgcHJvdmlkZXJzLCBsaWtlIGZzLXZlcml0eSwgZG0tdmVy aXR5LCBkbS1pbnRlZ3JpdHksIG9yCj4gc29tZSBvdGhlciBzeXN0ZW0sIGNhbiBwbHVnIGludG8g dGhlIHBvbGljeSB3aXRoIG1pbmltYWwgY29kZSBjaGFuZ2VzLgo+Cj4gU2lnbmVkLW9mZi1ieTog RGV2ZW4gQm93ZXJzIDxkZXZlbi5kZXNhaUBsaW51eC5taWNyb3NvZnQuY29tPgo+IFNpZ25lZC1v ZmYtYnk6IEZhbiBXdSA8d3VmYW5AbGludXgubWljcm9zb2Z0LmNvbT4KCi4uLgoKPiAtLS0KPiAg c2VjdXJpdHkvaXBlL01ha2VmaWxlICAgICAgICB8ICAgMiArCj4gIHNlY3VyaXR5L2lwZS9wb2xp Y3kuYyAgICAgICAgfCAgOTkgKysrKysrKwo+ICBzZWN1cml0eS9pcGUvcG9saWN5LmggICAgICAg IHwgIDc3ICsrKysrKwo+ICBzZWN1cml0eS9pcGUvcG9saWN5X3BhcnNlci5jIHwgNTE1ICsrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCj4gIHNlY3VyaXR5L2lwZS9wb2xpY3lfcGFy c2VyLmggfCAgMTEgKwo+ICA1IGZpbGVzIGNoYW5nZWQsIDcwNCBpbnNlcnRpb25zKCspCj4gIGNy ZWF0ZSBtb2RlIDEwMDY0NCBzZWN1cml0eS9pcGUvcG9saWN5LmMKPiAgY3JlYXRlIG1vZGUgMTAw NjQ0IHNlY3VyaXR5L2lwZS9wb2xpY3kuaAo+ICBjcmVhdGUgbW9kZSAxMDA2NDQgc2VjdXJpdHkv aXBlL3BvbGljeV9wYXJzZXIuYwo+ICBjcmVhdGUgbW9kZSAxMDA2NDQgc2VjdXJpdHkvaXBlL3Bv bGljeV9wYXJzZXIuaAo+Cj4gZGlmZiAtLWdpdCBhL3NlY3VyaXR5L2lwZS9NYWtlZmlsZSBiL3Nl Y3VyaXR5L2lwZS9NYWtlZmlsZQo+IGluZGV4IDU3MTY0ODU3OTk5MS4uMTZiYmU4MDk5MWYxIDEw MDY0NAo+IC0tLSBhL3NlY3VyaXR5L2lwZS9NYWtlZmlsZQo+ICsrKyBiL3NlY3VyaXR5L2lwZS9N YWtlZmlsZQo+IEBAIC04LDMgKzgsNSBAQAo+ICBvYmotJChDT05GSUdfU0VDVVJJVFlfSVBFKSAr PSBcCj4gICAgICAgICBob29rcy5vIFwKPiAgICAgICAgIGlwZS5vIFwKPiArICAgICAgIHBvbGlj eS5vIFwKPiArICAgICAgIHBvbGljeV9wYXJzZXIubyBcCj4gZGlmZiAtLWdpdCBhL3NlY3VyaXR5 L2lwZS9wb2xpY3kuYyBiL3NlY3VyaXR5L2lwZS9wb2xpY3kuYwo+IG5ldyBmaWxlIG1vZGUgMTAw NjQ0Cj4gaW5kZXggMDAwMDAwMDAwMDAwLi5lNDQ2ZjRiODQxNTIKPiAtLS0gL2Rldi9udWxsCj4g KysrIGIvc2VjdXJpdHkvaXBlL3BvbGljeS5jCj4gQEAgLTAsMCArMSw5OSBAQAo+ICsvLyBTUERY LUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAo+ICsvKgo+ICsgKiBDb3B5cmlnaHQgKEMpIE1p Y3Jvc29mdCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KPiArICovCj4gKwo+ICsj aW5jbHVkZSAiaXBlLmgiCj4gKyNpbmNsdWRlICJwb2xpY3kuaCIKPiArI2luY2x1ZGUgInBvbGlj eV9wYXJzZXIuaCIKPiArI2luY2x1ZGUgImRpZ2VzdC5oIgo+ICsKPiArI2luY2x1ZGUgPGxpbnV4 L3ZlcmlmaWNhdGlvbi5oPgoKR2VuZXJhbGx5IHNwZWFraW5nIHRoZSBzeXN0ZW0va2VybmVsLXdp ZGUgaGVhZGVyIGZpbGVzLCBlLmcuIGhlYWRlcnMKdXNpbmcgJzwuLi4+JywgdGVuZCB0byBjb21l IGJlZm9yZSB0aGUgbG9jYWwgaGVhZGVyIGZpbGVzLCBlLmcuCmhlYWRlcnMgdXNpbmcgJyIuLi4i Jy4gIEkgd291bGRuJ3QgY29uc2lkZXIgdGhpcyBhIGhhcmQgcnVsZSwgYnV0CnVubGVzcyB5b3Ug aGF2ZSBhIHJlYXNvbiB0byBwdXQgdGhlIGxvY2FsIGhlYWRlciBmaWxlcyBmaXJzdCBJIHdvdWxk CnN0aWNrIHdpdGggY29udmVudGlvbiBoZXJlLgoKPiArLyoqCj4gKyAqIGlwZV9mcmVlX3BvbGlj eSAtIERlYWxsb2NhdGUgYSBnaXZlbiBJUEUgcG9saWN5Lgo+ICsgKiBAcDogU3VwcGxpZXMgdGhl IHBvbGljeSB0byBmcmVlLgo+ICsgKgo+ICsgKiBTYWZlIHRvIGNhbGwgb24gSVNfRVJSL05VTEwu Cj4gKyAqLwo+ICt2b2lkIGlwZV9mcmVlX3BvbGljeShzdHJ1Y3QgaXBlX3BvbGljeSAqcCkKPiAr ewo+ICsgICAgICAgaWYgKElTX0VSUl9PUl9OVUxMKHApKQo+ICsgICAgICAgICAgICAgICByZXR1 cm47Cj4gKwo+ICsgICAgICAgZnJlZV9wYXJzZWRfcG9saWN5KHAtPnBhcnNlZCk7Cj4gKyAgICAg ICBpZiAoIXAtPnBrY3M3KQo+ICsgICAgICAgICAgICAgICBrZnJlZShwLT50ZXh0KTsKPiArICAg ICAgIGtmcmVlKHAtPnBrY3M3KTsKPiArICAgICAgIGtmcmVlKHApOwo+ICt9Cj4gKwo+ICtzdGF0 aWMgaW50IHNldF9wa2NzN19kYXRhKHZvaWQgKmN0eCwgY29uc3Qgdm9pZCAqZGF0YSwgc2l6ZV90 IGxlbiwKPiArICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBhc24xaGRybGVuKQo+ICt7 Cj4gKyAgICAgICBzdHJ1Y3QgaXBlX3BvbGljeSAqcCA9IGN0eDsKPiArCj4gKyAgICAgICBwLT50 ZXh0ID0gKGNvbnN0IGNoYXIgKilkYXRhOwo+ICsgICAgICAgcC0+dGV4dGxlbiA9IGxlbjsKPiAr Cj4gKyAgICAgICByZXR1cm4gMDsKPiArfQo+ICsKPiArLyoqCj4gKyAqIGlwZV9uZXdfcG9saWN5 IC0gQWxsb2NhdGUgYW5kIHBhcnNlIGFuIGlwZV9wb2xpY3kgc3RydWN0dXJlLgo+ICsgKgo+ICsg KiBAdGV4dDogU3VwcGxpZXMgYSBwb2ludGVyIHRvIHRoZSBwbGFpbi10ZXh0IHBvbGljeSB0byBw YXJzZS4KPiArICogQHRleHRsZW46IFN1cHBsaWVzIHRoZSBsZW5ndGggb2YgQHRleHQuCj4gKyAq IEBwa2NzNzogU3VwcGxpZXMgYSBwb2ludGVyIHRvIGEgcGtjczctc2lnbmVkIElQRSBwb2xpY3ku Cj4gKyAqIEBwa2NzN2xlbjogU3VwcGxpZXMgdGhlIGxlbmd0aCBvZiBAcGtjczcuCj4gKyAqCj4g KyAqIEB0ZXh0L0B0ZXh0bGVuIFNob3VsZCBiZSBOVUxMLzAgaWYgQHBrY3M3L0Bwa2NzN2xlbiBp cyBzZXQuCj4gKyAqCj4gKyAqIFRoZSByZXN1bHQgd2lsbCBzdGlsbCBuZWVkIHRvIGJlIGFzc29j aWF0ZWQgd2l0aCBhIGNvbnRleHQgdmlhCj4gKyAqIGlwZV9hZGRfcG9saWN5Lgo+ICsgKgo+ICsg KiBSZXR1cm46Cj4gKyAqICogIUlTX0VSUiAgIC0gU3VjY2Vzcwo+ICsgKiAqIC1FQkFETVNHICAt IFBvbGljeSBpcyBpbnZhbGlkCj4gKyAqICogLUVOT01FTSAgIC0gT3V0IG9mIG1lbW9yeQo+ICsg Ki8KPiArc3RydWN0IGlwZV9wb2xpY3kgKmlwZV9uZXdfcG9saWN5KGNvbnN0IGNoYXIgKnRleHQs IHNpemVfdCB0ZXh0bGVuLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z dCBjaGFyICpwa2NzNywgc2l6ZV90IHBrY3M3bGVuKQo+ICt7Cj4gKyAgICAgICBpbnQgcmMgPSAw Owo+ICsgICAgICAgc3RydWN0IGlwZV9wb2xpY3kgKm5ldyA9IE5VTEw7Cj4gKwo+ICsgICAgICAg bmV3ID0ga3phbGxvYyhzaXplb2YoKm5ldyksIEdGUF9LRVJORUwpOwo+ICsgICAgICAgaWYgKCFu ZXcpCj4gKyAgICAgICAgICAgICAgIHJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwo+ICsKPiArICAg ICAgIGlmICghdGV4dCkgewo+ICsgICAgICAgICAgICAgICBuZXctPnBrY3M3bGVuID0gcGtjczds ZW47Cj4gKyAgICAgICAgICAgICAgIG5ldy0+cGtjczcgPSBrbWVtZHVwKHBrY3M3LCBwa2NzN2xl biwgR0ZQX0tFUk5FTCk7Cj4gKyAgICAgICAgICAgICAgIGlmICghbmV3LT5wa2NzNykgewo+ICsg ICAgICAgICAgICAgICAgICAgICAgIHJjID0gLUVOT01FTTsKPiArICAgICAgICAgICAgICAgICAg ICAgICBnb3RvIGVycjsKCkFzIFJvYmVydG8gYWxyZWFkeSBwb2ludGVkIG91dCwgYW5kIHlvdSBh Y2tub3dsZWRnZWQsIHRoaXMgbGVha3MgQG5ldy4KSG93ZXZlciwgYXMgYSBGWUkgZm9yIGZ1dHVy ZSB3b3JrLCBpZiB5b3UgaGF2ZSBhIGxhYmVsIHdpdGggb25seSBvbmUKcmV0dXJuIGluc3RydWN0 aW9uIGFmdGVyIHRoZSBqdW1wLCBlLmcuIHRoZSAnZXJyJyBsYWJlbCBoZXJlLCB5b3UKc2hvdWxk IHJlcGxhY2UgdGhlICdnb3RvJyB3aXRoIHRoZSBzaW5nbGUgcmV0dXJuIGluc3RydWN0aW9uLiAg SnVtcGluZwpqdXN0IHRvIGltbWVkaWF0ZWx5IHJldHVybiBpcyBhIGJpdCBzaWxseSwgYnV0IGlm IHlvdSBhbHNvIG5lZWQgdG8KY2xlYW51cCwgZS5nLiBmcmVlIHNvbWUgbWVtb3J5LCB0aGF0J3Mg b2theSB0byB1c2UgdGhlIGdvdG8vanVtcC4KCj4gKyAgICAgICAgICAgICAgIH0KPiArCj4gKyAg ICAgICAgICAgICAgIHJjID0gdmVyaWZ5X3BrY3M3X3NpZ25hdHVyZShOVUxMLCAwLCBuZXctPnBr Y3M3LCBwa2NzN2xlbiwgTlVMTCwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFZFUklGWUlOR19VTlNQRUNJRklFRF9TSUdOQVRVUkUsCj4gKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRfcGtjczdfZGF0YSwgbmV3KTsKPiAr ICAgICAgICAgICAgICAgaWYgKHJjKQo+ICsgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gZXJy Owo+ICsgICAgICAgfSBlbHNlIHsKPiArICAgICAgICAgICAgICAgbmV3LT50ZXh0bGVuID0gdGV4 dGxlbjsKPiArICAgICAgICAgICAgICAgbmV3LT50ZXh0ID0ga3N0cmR1cCh0ZXh0LCBHRlBfS0VS TkVMKTsKPiArICAgICAgICAgICAgICAgaWYgKCFuZXctPnRleHQpIHsKPiArICAgICAgICAgICAg ICAgICAgICAgICByYyA9IC1FTk9NRU07Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgZ290byBl cnI7Cj4gKyAgICAgICAgICAgICAgIH0KPiArICAgICAgIH0KPiArCj4gKyAgICAgICByYyA9IHBh cnNlX3BvbGljeShuZXcpOwo+ICsgICAgICAgaWYgKHJjKQo+ICsgICAgICAgICAgICAgICBnb3Rv IGVycjsKPiArCj4gKyAgICAgICByZXR1cm4gbmV3Owo+ICtlcnI6Cj4gKyAgICAgICByZXR1cm4g RVJSX1BUUihyYyk7Cj4gK30KCi4uLgoKPiBkaWZmIC0tZ2l0IGEvc2VjdXJpdHkvaXBlL3BvbGlj eS5oIGIvc2VjdXJpdHkvaXBlL3BvbGljeS5oCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiBpbmRl eCAwMDAwMDAwMDAwMDAuLjZhZjJkOWE4MTFlYwo+IC0tLSAvZGV2L251bGwKPiArKysgYi9zZWN1 cml0eS9pcGUvcG9saWN5LmgKPiBAQCAtMCwwICsxLDc3IEBACj4gKy8qIFNQRFgtTGljZW5zZS1J ZGVudGlmaWVyOiBHUEwtMi4wICovCj4gKy8qCj4gKyAqIENvcHlyaWdodCAoQykgTWljcm9zb2Z0 IENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgo+ICsgKi8KPiArI2lmbmRlZiBJUEVf UE9MSUNZX0gKPiArI2RlZmluZSBJUEVfUE9MSUNZX0gKPiArCj4gKyNpbmNsdWRlIDxsaW51eC9s aXN0Lmg+Cj4gKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgo+ICsKPiArZW51bSBpcGVfb3BfdHlw ZSB7Cj4gKyAgICAgICBpcGVfb3BfZXhlYyA9IDAsCj4gKyAgICAgICBpcGVfb3BfZmlybXdhcmUs Cj4gKyAgICAgICBpcGVfb3Bfa2VybmVsX21vZHVsZSwKPiArICAgICAgIGlwZV9vcF9rZXhlY19p bWFnZSwKPiArICAgICAgIGlwZV9vcF9rZXhlY19pbml0cmFtZnMsCj4gKyAgICAgICBpcGVfb3Bf aW1hX3BvbGljeSwKPiArICAgICAgIGlwZV9vcF9pbWFfeDUwOSwKPiArICAgICAgIGlwZV9vcF9t YXgKPiArfTsKCkknbSB1c2VkIHRvIHNlZWluZyBlbnVtIHZhbHVlcyBkZWZpbmVkIGluIEFMTF9D QVBTIHRvIGhlbHAgdmlzdWFsbHkKZGlzdGluZ3Vpc2ggdGhlbSBmcm9tIHZhcmlhYmxlcyBhbmQg b3RoZXIgYXNzb3J0ZWQgc3ltYm9scywgZm9yCmV4YW1wbGU6CgogIGVudW0gaXBlX29wX3R5cGUg ewogICAgSVBFX09QX0VYRUMgPSAwLAogICAgLi4uCiAgICBJUEVfT1BfTUFYLAogIH07CgpZb3Ug bWlnaHQgYWxzbyB3YW50IHRvIGNvbnNpZGVyIHByZWZpeGluZyBJUEVfT1BfTUFYIHdpdGggYSBj b3VwbGUKdW5kZXJzY29yZXMsIGUuZy4gX19JUEVfT1BfTUFYLCB0byBoZWxwIGRpc3Rpbmd1aXNo IGl0IGFzIGEgc2VudGluZWwKdmFsdWUgYW5kIHByb3ZpZGUgc29tZSBwcm90ZWN0aW9uIGluIGNh c2UgeW91IHRoaW5rIHlvdSBtaWdodCBldmVyCndhbnQgYW4gb3AgbmFtZWQgIm1heCIuICBIb3dl dmVyLCB0aGlzIHJlYWxseSBpcyBhIGp1ZGdlbWVudCBjYWxsIHRoYXQKaXMgdXAgdG8geW91LgoK KFNpbWlsYXIgY29tbWVudHMgYXBwbHkgdG8gdGhlIG90aGVyIElQRSBlbnVtcykKCj4gK2VudW0g aXBlX2FjdGlvbl90eXBlIHsKPiArICAgICAgIGlwZV9hY3Rpb25fYWxsb3cgPSAwLAo+ICsgICAg ICAgaXBlX2FjdGlvbl9kZW55LAo+ICsgICAgICAgaXBlX2FjdGlvbl9tYXgKPiArfTsKPiArCj4g K2VudW0gaXBlX3Byb3BfdHlwZSB7Cj4gKyAgICAgICBpcGVfcHJvcF9tYXgKPiArfTsKPiArCj4g K3N0cnVjdCBpcGVfcHJvcCB7Cj4gKyAgICAgICBzdHJ1Y3QgbGlzdF9oZWFkIG5leHQ7Cj4gKyAg ICAgICBlbnVtIGlwZV9wcm9wX3R5cGUgdHlwZTsKPiArICAgICAgIHZvaWQgKnZhbHVlOwo+ICt9 Owo+ICsKPiArc3RydWN0IGlwZV9ydWxlIHsKPiArICAgICAgIGVudW0gaXBlX29wX3R5cGUgb3A7 Cj4gKyAgICAgICBlbnVtIGlwZV9hY3Rpb25fdHlwZSBhY3Rpb247Cj4gKyAgICAgICBzdHJ1Y3Qg bGlzdF9oZWFkIHByb3BzOwo+ICsgICAgICAgc3RydWN0IGxpc3RfaGVhZCBuZXh0Owo+ICt9Owo+ ICsKPiArc3RydWN0IGlwZV9vcF90YWJsZSB7Cj4gKyAgICAgICBzdHJ1Y3QgbGlzdF9oZWFkIHJ1 bGVzOwo+ICsgICAgICAgZW51bSBpcGVfYWN0aW9uX3R5cGUgZGVmYXVsdF9hY3Rpb247Cj4gK307 Cj4gKwo+ICtzdHJ1Y3QgaXBlX3BhcnNlZF9wb2xpY3kgewo+ICsgICAgICAgY29uc3QgY2hhciAq bmFtZTsKPiArICAgICAgIHN0cnVjdCB7Cj4gKyAgICAgICAgICAgICAgIHUxNiBtYWpvcjsKPiAr ICAgICAgICAgICAgICAgdTE2IG1pbm9yOwo+ICsgICAgICAgICAgICAgICB1MTYgcmV2Owo+ICsg ICAgICAgfSB2ZXJzaW9uOwo+ICsKPiArICAgICAgIGVudW0gaXBlX2FjdGlvbl90eXBlIGdsb2Jh bF9kZWZhdWx0X2FjdGlvbjsKPiArCj4gKyAgICAgICBzdHJ1Y3QgaXBlX29wX3RhYmxlIHJ1bGVz W2lwZV9vcF9tYXhdOwo+ICt9Owo+ICsKPiArc3RydWN0IGlwZV9wb2xpY3kgewo+ICsgICAgICAg Y29uc3QgY2hhciAgICAgKnBrY3M3Owo+ICsgICAgICAgc2l6ZV90ICAgICAgICAgIHBrY3M3bGVu Owo+ICsKPiArICAgICAgIGNvbnN0IGNoYXIgICAgICp0ZXh0Owo+ICsgICAgICAgc2l6ZV90ICAg ICAgICAgIHRleHRsZW47Cj4gKwo+ICsgICAgICAgc3RydWN0IGlwZV9wYXJzZWRfcG9saWN5ICpw YXJzZWQ7Cj4gK307CgpOb25lIG9mIHRoZSBvdGhlciBzdHJ1Y3RzIGluIHRoaXMgaGVhZGVyIGZp bGUgaGF2ZSBob3Jpem9udGFsbHkKYWxpZ25lZCB2YXJpYWJsZSBuYW1lcywgeW91IHNob3VsZCBw aWNrIG9uZSBzdHlsZSBhbmQgc3RpY2sgd2l0aCBpdAouLi4gYW5kIHRoYXQgc3R5bGUgc2hvdWxk IGJlIHRoZSB1bi1hbGlnbmVkIHN0eWxlLCBlLmcuIHdoYXQgd2FzIHVzZWQKaW4gJ3N0cnVjdCBp cGVfcnVsZScKCj4gK3N0cnVjdCBpcGVfcG9saWN5ICppcGVfbmV3X3BvbGljeShjb25zdCBjaGFy ICp0ZXh0LCBzaXplX3QgdGV4dGxlbiwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgY29uc3QgY2hhciAqcGtjczcsIHNpemVfdCBwa2NzN2xlbik7Cj4gK3ZvaWQgaXBlX2ZyZWVf cG9saWN5KHN0cnVjdCBpcGVfcG9saWN5ICpwb2wpOwo+ICsKPiArI2VuZGlmIC8qIElQRV9QT0xJ Q1lfSCAqLwo+IGRpZmYgLS1naXQgYS9zZWN1cml0eS9pcGUvcG9saWN5X3BhcnNlci5jIGIvc2Vj dXJpdHkvaXBlL3BvbGljeV9wYXJzZXIuYwo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gaW5kZXgg MDAwMDAwMDAwMDAwLi5jN2JhMGU4NjUzNjYKPiAtLS0gL2Rldi9udWxsCj4gKysrIGIvc2VjdXJp dHkvaXBlL3BvbGljeV9wYXJzZXIuYwo+IEBAIC0wLDAgKzEsNTE1IEBACj4gKy8vIFNQRFgtTGlj ZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCj4gKy8qCj4gKyAqIENvcHlyaWdodCAoQykgTWljcm9z b2Z0IENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgo+ICsgKi8KPiArCj4gKyNpbmNs dWRlICJwb2xpY3kuaCIKPiArI2luY2x1ZGUgInBvbGljeV9wYXJzZXIuaCIKPiArI2luY2x1ZGUg ImRpZ2VzdC5oIgo+ICsKPiArI2luY2x1ZGUgPGxpbnV4L3BhcnNlci5oPgo+ICsKPiArI2RlZmlu ZSBTVEFSVF9DT01NRU5UICAnIycKPiArCj4gKy8qKgo+ICsgKiBuZXdfcGFyc2VkX3BvbGljeSAt IEFsbG9jYXRlIGFuZCBpbml0aWFsaXplIGEgcGFyc2VkIHBvbGljeS4KPiArICoKPiArICogUmV0 dXJuOgo+ICsgKiAqICFJU19FUlIgICAtIE9LCj4gKyAqICogLUVOT01FTSAgIC0gT3V0IG9mIG1l bW9yeQo+ICsgKi8KPiArc3RhdGljIHN0cnVjdCBpcGVfcGFyc2VkX3BvbGljeSAqbmV3X3BhcnNl ZF9wb2xpY3kodm9pZCkKPiArewo+ICsgICAgICAgc2l6ZV90IGkgPSAwOwo+ICsgICAgICAgc3Ry dWN0IGlwZV9wYXJzZWRfcG9saWN5ICpwID0gTlVMTDsKPiArICAgICAgIHN0cnVjdCBpcGVfb3Bf dGFibGUgKnQgPSBOVUxMOwo+ICsKPiArICAgICAgIHAgPSBremFsbG9jKHNpemVvZigqcCksIEdG UF9LRVJORUwpOwo+ICsgICAgICAgaWYgKCFwKQo+ICsgICAgICAgICAgICAgICByZXR1cm4gRVJS X1BUUigtRU5PTUVNKTsKPiArCj4gKyAgICAgICBwLT5nbG9iYWxfZGVmYXVsdF9hY3Rpb24gPSBp cGVfYWN0aW9uX21heDsKCkknbSBhc3N1bWluZyB5b3UncmUgdXNpbmcgdGhlICJpcGVfYWN0aW9u X21heCIgYXMgYW4gaW50ZW50aW9uYWwgYm9ndXMKcGxhY2Vob2xkZXIgdmFsdWUgaGVyZSwgeWVz PyAgSWYgdGhhdCBpcyB0aGUgY2FzZSwgaGF2ZSB5b3UgY29uc2lkZXJlZApjcmVhdGluZyBhbiAi aW52YWxpZCIgZW51bSB3aXRoIGFuIGV4cGxpY2l0IHplcm8gdmFsdWUgdG8gc2F2ZSB5b3UKdGhp cyBhZGRpdGlvbmFsIGFzc2lnbm1lbnQgKHlvdSBhcmUgYWxyZWFkeSB1c2luZyBremFsbG9jKCkp PyAgRm9yCmV4YW1wbGU6CgogIGVudW0gaXBlX29wX3R5cGUgewogICAgSVBFX09QX0lOVkFMSUQg PSAwLAogICAgSVBFX09QX0VYRUMsCiAgICAuLi4KICAgIElQRV9PUF9NQVgsCiAgfTsKCiAgZW51 bSBpcGVfYWN0aW9uX3R5cGUgewogICAgSVBFX0FDVElPTl9JTlZBTElEID0gMCwKICAgIElQRV9B Q1RJT05fQUxMT1csCiAgICAuLi4KICAgIElQRV9BQ1RJT05fTUFYLAogIH07Cgo+ICsgICAgICAg Zm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUocC0+cnVsZXMpOyArK2kpIHsKPiArICAgICAgICAg ICAgICAgdCA9ICZwLT5ydWxlc1tpXTsKPiArCj4gKyAgICAgICAgICAgICAgIHQtPmRlZmF1bHRf YWN0aW9uID0gaXBlX2FjdGlvbl9tYXg7Cj4gKyAgICAgICAgICAgICAgIElOSVRfTElTVF9IRUFE KCZ0LT5ydWxlcyk7Cj4gKyAgICAgICB9Cj4gKwo+ICsgICAgICAgcmV0dXJuIHA7Cj4gK30KPiAr Cj4gKy8qKgo+ICsgKiByZW1vdmVfY29tbWVudCAtIFRydW5jYXRlIGFsbCBjaGFycyBmb2xsb3dp bmcgU1RBUlRfQ09NTUVOVCBpbiBhIHN0cmluZy4KPiArICoKPiArICogQGxpbmU6IFN1cHBsaWVz IGEgcG9pbGN5IGxpbmUgc3RyaW5nIGZvciBwcmVwcm9jZXNzaW5nLgoKInBvbGljeSIgOikKCkkn bSBkZWZpbml0ZWx5IGd1aWx0eSBvZiBhZGRpbmcgYSBsb3Qgb2Ygc2lsbHkgc3BlbGxpbmcgZXJy b3JzIHRvCmNvZGViYXNlcyBvdmVyIHRoZSB5ZWFycywgc28gbm8gd29ycmllcyBoZXJlLCBidXQg aW4gY2FzZSB5b3UgaGF2ZW4ndApzZWVuIHRoZSBjb2Rlc3BlbGwgdG9vbCBhbHJlYWR5LCBpdCBt aWdodCBiZSBzb21ldGhpbmcgd29ydGggdGFraW5nIGEKbG9vayBhdCBzb21ldGltZS4KCiogaHR0 cHM6Ly9naXRodWIuY29tL2NvZGVzcGVsbC1wcm9qZWN0L2NvZGVzcGVsbAoKPiArICovCj4gK3N0 YXRpYyB2b2lkIHJlbW92ZV9jb21tZW50KGNoYXIgKmxpbmUpCj4gK3sKPiArICAgICAgIHNpemVf dCBpLCBsZW4gPSAwOwo+ICsKPiArICAgICAgIGxlbiA9IHN0cmxlbihsaW5lKTsKPiArICAgICAg IGZvciAoaSA9IDA7IGkgPCBsZW4gJiYgbGluZVtpXSAhPSBTVEFSVF9DT01NRU5UOyArK2kpCj4g KyAgICAgICAgICAgICAgIDsKClRoZSBrZXJuZWwgaGFzIGEgc3RyY2hyKCkgaW1wbGVtZW50YXRp b24gd2hpY2ggY291bGQgc2ltcGxpZnkgdGhpcywKYW5kIHBvc3NpYmx5IHNwZWVkIHRoaW5ncyB1 cCBpZiB0aGVyZSBpcyBhbiBhcmNoIHNwZWNpZmljIG9wdGltaXplZAppbXBsZW1lbnRhdGlvbi4K Cj4gKyAgICAgICBsaW5lW2ldID0gJ1wwJzsKPiArfQo+ICsKPiArLyoqCj4gKyAqIHJlbW92ZV90 cmFpbGluZ19zcGFjZXMgLSBUcnVuY2F0ZSBhbGwgdHJhaWxpbmcgc3BhY2VzIGluIGEgc3RyaW5n Lgo+ICsgKgo+ICsgKiBAbGluZTogU3VwcGxpZXMgYSBwb2lsY3kgbGluZSBzdHJpbmcgZm9yIHBy ZXByb2Nlc3NpbmcuCj4gKyAqLwo+ICtzdGF0aWMgdm9pZCByZW1vdmVfdHJhaWxpbmdfc3BhY2Vz KGNoYXIgKmxpbmUpCj4gK3sKPiArICAgICAgIHNpemVfdCBpLCBsZW4gPSAwOwo+ICsKPiArICAg ICAgIGxlbiA9IHN0cmxlbihsaW5lKTsKPiArICAgICAgIGZvciAoaSA9IGxlbjsgaSA+IDAgJiYg KGxpbmVbaSAtIDFdID09ICcgJyB8fCBsaW5lW2kgLSAxXSA9PSAnXHQnKTsgLS1pKQo+ICsgICAg ICAgICAgICAgICA7CgpZb3UgY2FuIHByb2JhYmx5IGRyb3AgdGhlIEBsZW4gdmFyaWFibGUgYW5k IGp1c3QgYXNzaWduICdpID0Kc3RybGVuKGxpbmUpJyBpbiB0aGUgZm9yLWxvb3AgaW5pdGlhbGl6 ZXIuCgo+ICsgICAgICAgbGluZVtpXSA9ICdcMCc7Cj4gK30KPiArCj4gKy8qKgo+ICsgKiBwYXJz ZV92ZXJzaW9uIC0gUGFyc2UgcG9saWN5IHZlcnNpb24uCj4gKyAqIEB2ZXI6IFN1cHBsaWVzIGEg dmVyc2lvbiBzdHJpbmcgdG8gYmUgcGFyc2VkLgo+ICsgKiBAcDogU3VwcGxpZXMgdGhlIHBhcnRp YWwgcGFyc2VkIHBvbGljeS4KPiArICoKPiArICogUmV0dXJuOgo+ICsgKiAqIDAgLSBPSwo+ICsg KiAqICEwICAgICAgICAtIFN0YW5kYXJkIGVycm5vCj4gKyAqLwo+ICtzdGF0aWMgaW50IHBhcnNl X3ZlcnNpb24oY2hhciAqdmVyLCBzdHJ1Y3QgaXBlX3BhcnNlZF9wb2xpY3kgKnApCj4gK3sKPiAr ICAgICAgIGludCByYyA9IDA7Cj4gKyAgICAgICBzaXplX3Qgc2VwX2NvdW50ID0gMDsKPiArICAg ICAgIGNoYXIgKnRva2VuOwo+ICsgICAgICAgdTE2ICpjb25zdCBjdltdID0geyAmcC0+dmVyc2lv bi5tYWpvciwgJnAtPnZlcnNpb24ubWlub3IsICZwLT52ZXJzaW9uLnJldiB9Owo+ICsKPiArICAg ICAgIHdoaWxlICgodG9rZW4gPSBzdHJzZXAoJnZlciwgIi4iKSkgIT0gTlVMTCkgewo+ICsgICAg ICAgICAgICAgICAvKiBwcmV2ZW50IG92ZXJmbG93ICovCj4gKyAgICAgICAgICAgICAgIGlmIChz ZXBfY291bnQgPj0gQVJSQVlfU0laRShjdikpIHsKPiArICAgICAgICAgICAgICAgICAgICAgICBy YyA9IC1FQkFETVNHOwo+ICsgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gZXJyOwoKUmVtZW1i ZXIgd2hhdCBJIHNhaWQgYWJvdmUgYWJvdXQgbm90IG5lZWRpbmcgYSAnZ290bycgaGVyZT8gOykK Cj4gKyAgICAgICAgICAgICAgIH0KPiArCj4gKyAgICAgICAgICAgICAgIHJjID0ga3N0cnRvdTE2 KHRva2VuLCAxMCwgY3Zbc2VwX2NvdW50XSk7Cj4gKyAgICAgICAgICAgICAgIGlmIChyYykKPiAr ICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGVycjsKPiArCj4gKyAgICAgICAgICAgICAgICsr c2VwX2NvdW50Owo+ICsgICAgICAgfQo+ICsKPiArICAgICAgIC8qIHByZXZlbnQgdW5kZXJmbG93 ICovCj4gKyAgICAgICBpZiAoc2VwX2NvdW50ICE9IEFSUkFZX1NJWkUoY3YpKQo+ICsgICAgICAg ICAgICAgICByYyA9IC1FQkFETVNHOwo+ICsKPiArZXJyOgo+ICsgICAgICAgcmV0dXJuIHJjOwo+ ICt9Cj4gKwo+ICtlbnVtIGhlYWRlcl9vcHQgewo+ICsgICAgICAgaXBlX2hlYWRlcl9wb2xpY3lf bmFtZSA9IDAsCj4gKyAgICAgICBpcGVfaGVhZGVyX3BvbGljeV92ZXJzaW9uLAo+ICsgICAgICAg aXBlX2hlYWRlcl9tYXgKPiArfTsKPiArCj4gK3N0YXRpYyBjb25zdCBtYXRjaF90YWJsZV90IGhl YWRlcl90b2tlbnMgPSB7Cj4gKyAgICAgICB7aXBlX2hlYWRlcl9wb2xpY3lfbmFtZSwgICAgICAg ICJwb2xpY3lfbmFtZT0lcyJ9LAo+ICsgICAgICAge2lwZV9oZWFkZXJfcG9saWN5X3ZlcnNpb24s ICAgICAicG9saWN5X3ZlcnNpb249JXMifSwKPiArICAgICAgIHtpcGVfaGVhZGVyX21heCwgICAg ICAgICAgICAgICAgTlVMTH0KPiArfTsKPiArCj4gKy8qKgo+ICsgKiBwYXJzZV9oZWFkZXIgLSBQ YXJzZSBwb2xpY3kgaGVhZGVyIGluZm9ybWF0aW9uLgo+ICsgKiBAbGluZTogU3VwcGxpZXMgaGVh ZGVyIGxpbmUgdG8gYmUgcGFyc2VkLgo+ICsgKiBAcDogU3VwcGxpZXMgdGhlIHBhcnRpYWwgcGFy c2VkIHBvbGljeS4KPiArICoKPiArICogUmV0dXJuOgo+ICsgKiAqIDAgLSBPSwo+ICsgKiAqICEw ICAgICAgICAtIFN0YW5kYXJkIGVycm5vCj4gKyAqLwo+ICtzdGF0aWMgaW50IHBhcnNlX2hlYWRl cihjaGFyICpsaW5lLCBzdHJ1Y3QgaXBlX3BhcnNlZF9wb2xpY3kgKnApCj4gK3sKPiArICAgICAg IGludCByYyA9IDA7Cj4gKyAgICAgICBjaGFyICp0LCAqdmVyID0gTlVMTDsKPiArICAgICAgIHN1 YnN0cmluZ190IGFyZ3NbTUFYX09QVF9BUkdTXTsKPiArICAgICAgIHNpemVfdCBpZHggPSAwOwo+ ICsKPiArICAgICAgIHdoaWxlICgodCA9IHN0cnNlcCgmbGluZSwgIiBcdCIpKSAhPSBOVUxMKSB7 Cj4gKyAgICAgICAgICAgICAgIGludCB0b2tlbjsKPiArCj4gKyAgICAgICAgICAgICAgIGlmICgq dCA9PSAnXDAnKQo+ICsgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwo+ICsgICAgICAg ICAgICAgICBpZiAoaWR4ID49IGlwZV9oZWFkZXJfbWF4KSB7Cj4gKyAgICAgICAgICAgICAgICAg ICAgICAgcmMgPSAtRUJBRE1TRzsKPiArICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGVycjsK PiArICAgICAgICAgICAgICAgfQo+ICsKPiArICAgICAgICAgICAgICAgdG9rZW4gPSBtYXRjaF90 b2tlbih0LCBoZWFkZXJfdG9rZW5zLCBhcmdzKTsKPiArICAgICAgICAgICAgICAgaWYgKHRva2Vu ICE9IGlkeCkgewo+ICsgICAgICAgICAgICAgICAgICAgICAgIHJjID0gLUVCQURNU0c7Cj4gKyAg ICAgICAgICAgICAgICAgICAgICAgZ290byBlcnI7Cj4gKyAgICAgICAgICAgICAgIH0KPiArCj4g KyAgICAgICAgICAgICAgIHN3aXRjaCAodG9rZW4pIHsKPiArICAgICAgICAgICAgICAgY2FzZSBp cGVfaGVhZGVyX3BvbGljeV9uYW1lOgo+ICsgICAgICAgICAgICAgICAgICAgICAgIHAtPm5hbWUg PSBtYXRjaF9zdHJkdXAoJmFyZ3NbMF0pOwo+ICsgICAgICAgICAgICAgICAgICAgICAgIGlmICgh cC0+bmFtZSkKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJjID0gLUVOT01FTTsK PiArICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKPiArICAgICAgICAgICAgICAgY2FzZSBp cGVfaGVhZGVyX3BvbGljeV92ZXJzaW9uOgo+ICsgICAgICAgICAgICAgICAgICAgICAgIHZlciA9 IG1hdGNoX3N0cmR1cCgmYXJnc1swXSk7Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF2 ZXIpIHsKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJjID0gLUVOT01FTTsKPiAr ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwo+ICsgICAgICAgICAgICAgICAg ICAgICAgIH0KPiArICAgICAgICAgICAgICAgICAgICAgICByYyA9IHBhcnNlX3ZlcnNpb24odmVy LCBwKTsKPiArICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKPiArICAgICAgICAgICAgICAg ZGVmYXVsdDoKPiArICAgICAgICAgICAgICAgICAgICAgICByYyA9IC1FQkFETVNHOwo+ICsgICAg ICAgICAgICAgICB9Cj4gKyAgICAgICAgICAgICAgIGlmIChyYykKPiArICAgICAgICAgICAgICAg ICAgICAgICBnb3RvIGVycjsKPiArICAgICAgICAgICAgICAgKytpZHg7Cj4gKyAgICAgICB9Cj4g Kwo+ICsgICAgICAgaWYgKGlkeCAhPSBpcGVfaGVhZGVyX21heCkgewo+ICsgICAgICAgICAgICAg ICByYyA9IC1FQkFETVNHOwo+ICsgICAgICAgICAgICAgICBnb3RvIGVycjsKPiArICAgICAgIH0K PiArICAgICAgIGdvdG8gb3V0OwoKR2VuZXJhbGx5IHRoZSBub3JtYWwsIG5vbi1lcnJvciBjYXNl IGlzIHN0cnVjdHVyZWQgc28gdGhhdCB0aGUKZnVuY3Rpb24gY2FuIGNvbnRpbnVlIHRvIGZhbGwg dGhyb3VnaCB0byB0aGUgY29ycmVjdCBjb2RlIHdpdGhvdXQKbmVlZGVkIGEgJ2dvdG8nLiAgSSB3 b3VsZCBzdWdnZXN0IG1vdmluZyB0aGUgJ2VycicgbGFiZWwvY29kZSAqYWZ0ZXIqCnRoZSAnb3V0 JyBsYWJlbC9jb2RlIHNvIHRoZSBub3JtYWwgY2FzZSBjYW4ganVzdCBmYWxsIHRocm91Z2ggd2l0 aG91dAp0aGUgZ290bzsgeW91IHdpbGwgaGF2ZSB0byBhZGQgYSAnZ290byBvdXQnIGF0IHRoZSBl bmQgb2YgJ2VycicsIGJ1dAp0aGF0J3MgdGhlIGVycm9yIGNhc2Ugc28gd2UgYXJlbid0IGdvaW5n IHRvIHdvcnJ5IHRvbyBtdWNoIGFib3V0IHRoYXQuCgpQdXQgYW5vdGhlciAoc2hvcnRlcikgd2F5 LCBzdHJ1Y3R1cmUgeW91ciBjb2RlIHRvIG9wdGltaXplIGZvciB0aGUKY29tbW9uLCBub24tZXJy b3IgY2FzZS4KCk5lZWRsZXNzIHRvIHNheSwgdGhpcyBhcHBsaWVzIHRvIG90aGVyIGZ1bmN0aW9u cyBpbiB0aGlzIHBhdGNoKHNldCkuCgo+ICtlcnI6Cj4gKyAgICAgICBrZnJlZShwLT5uYW1lKTsK PiArICAgICAgIHAtPm5hbWUgPSBOVUxMOwo+ICtvdXQ6Cj4gKyAgICAgICBrZnJlZSh2ZXIpOwo+ ICsgICAgICAgcmV0dXJuIHJjOwo+ICt9Cj4gKwo+ICsvKioKPiArICogaXNfZGVmYXVsdCAtIERl dGVybWluZSBpZiB0aGUgZ2l2ZW4gdG9rZW4gaXMgIkRFRkFVTFQiLgo+ICsgKiBAdG9rZW46IFN1 cHBsaWVzIHRoZSB0b2tlbiBzdHJpbmcgdG8gYmUgY29tcGFyZWQuCj4gKyAqCj4gKyAqIFJldHVy bjoKPiArICogKiAwIC0gVGhlIHRva2VuIGlzIG5vdCAiREVGQVVMVCIKPiArICogKiAhMCAgICAg ICAgLSBUaGUgdG9rZW4gaXMgIkRFRkFVTFQiCj4gKyAqLwo+ICtzdGF0aWMgYm9vbCBpc19kZWZh dWx0KGNoYXIgKnRva2VuKQo+ICt7Cj4gKyAgICAgICByZXR1cm4gIXN0cmNtcCh0b2tlbiwgIkRF RkFVTFQiKTsKPiArfQoKTGV0J3MgYmUgaG9uZXN0LCAiaXNfZGVmYXVsdCgpIiBpc24ndCBhIGdy ZWF0IG5hbWUsIGFuZCBpdCdzIGEgcHJldHR5CnRyaXZpYWwgZnVuY3Rpb24gdG9vOyBJJ20gd29u ZGVyaW5nIGlmIGhpZGluZyB0aGUgc2ltcGxlIHN0cmNtcCgpCmJlaGluZCBhbiBvZGRseSBuYW1l ZCBmdW5jdGlvbiBpcyByZWFsbHkgYWxsIHRoYXQgaGVscGZ1bC4gIEknbSBva2F5CmlmIHlvdSB3 YW50IHRvIGtlZXAgdGhlIGZ1bmN0aW9uLCBidXQgY2FuIHdlIG5hbWUgaXQgc29tZXRoaW5nIGVs c2U/Ck1heWJlICJ0b2tlbl9kZWZhdWx0KC4uLikiIG9yIHNvbWV0aGluZyBzaW1pbGFyPwoKPiAr LyoqCj4gKyAqIGZyZWVfcnVsZSAtIEZyZWUgdGhlIHN1cHBsaWVkIGlwZV9ydWxlIHN0cnVjdC4K PiArICogQHI6IFN1cHBsaWVzIHRoZSBpcGVfcnVsZSBzdHJ1Y3QgdG8gYmUgZnJlZWQuCj4gKyAq LwoKSXQgbWlnaHQgYmUgd29ydGggbWVudGlvbmluZyB0aGF0IEByIHNob3VsZCBiZSByZW1vdmVk IGZyb20gYW55IGxpc3RzLAplLmcuIGxpc3RfZW1wdHkoKSBpcyB0cnVlLgoKPiArc3RhdGljIHZv aWQgZnJlZV9ydWxlKHN0cnVjdCBpcGVfcnVsZSAqcikKPiArewo+ICsgICAgICAgc3RydWN0IGlw ZV9wcm9wICpwLCAqdDsKPiArCj4gKyAgICAgICBpZiAoSVNfRVJSX09SX05VTEwocikpCj4gKyAg ICAgICAgICAgICAgIHJldHVybjsKPiArCj4gKyAgICAgICBsaXN0X2Zvcl9lYWNoX2VudHJ5X3Nh ZmUocCwgdCwgJnItPnByb3BzLCBuZXh0KSB7Cj4gKyAgICAgICAgICAgICAgIGtmcmVlKHApOwo+ ICsgICAgICAgfQoKVGhhdCdzIGludGVyZXN0aW5nLCBJJ20gdXNlZCB0byBzZWVpbmcgYSAnbGlz dF9kZWwoKScgY2FsbCAob3IKc2ltaWxhcikgYmVmb3JlIHRoZSBsaXN0IGVudHJ5IGlzIGZyZWVk LiAgQWx0aG91Z2ggbG9va2luZyBhdApsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoKSBJIGd1ZXNz IGl0IGlzIHNhZmUgd2l0aCB0aGUgY3VycmVudAppbXBsZW1lbnRhdGlvbiAuLi4gZGlkIHlvdSBz ZWUgdGhpcyBwYXR0ZXJuIGVsc2V3aGVyZSBpbiB0aGUga2VybmVsPwpJZiBzbywgd2hlcmU/CgpV bmxlc3MgdGhpcyBpcyBwZXJmb3JtYW5jZSBjcml0aWNhbCAoSSBkb24ndCB0aGluayBpdCBpcz8p LCBpdCBtaWdodApiZSBzYWZlciB0byBkbyBhbiBleHBsaWNpdCBgbGlzdF9kZWwoKWAgYmVmb3Jl IGZyZWUnaW5nIHRoZSBlbnRyaWVzCi4uLiB1bmxlc3MgdGhpcyBpcyBub3cgYSBjb21tb24gcGF0 dGVybiBpbiB0aGUga2VybmVsIGFuZCBJIGp1c3QKbWlzc2VkIHRoZSBtZW1vLgoKPiArICAgICAg IGtmcmVlKHIpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgY29uc3QgbWF0Y2hfdGFibGVfdCBvcGVyYXRp b25fdG9rZW5zID0gewo+ICsgICAgICAge2lwZV9vcF9leGVjLCAgICAgICAgICAgICAgICAgICAi b3A9RVhFQ1VURSJ9LAo+ICsgICAgICAge2lwZV9vcF9maXJtd2FyZSwgICAgICAgICAgICAgICAi b3A9RklSTVdBUkUifSwKPiArICAgICAgIHtpcGVfb3Bfa2VybmVsX21vZHVsZSwgICAgICAgICAg Im9wPUtNT0RVTEUifSwKPiArICAgICAgIHtpcGVfb3Bfa2V4ZWNfaW1hZ2UsICAgICAgICAgICAg Im9wPUtFWEVDX0lNQUdFIn0sCj4gKyAgICAgICB7aXBlX29wX2tleGVjX2luaXRyYW1mcywgICAg ICAgICJvcD1LRVhFQ19JTklUUkFNRlMifSwKPiArICAgICAgIHtpcGVfb3BfaW1hX3BvbGljeSwg ICAgICAgICAgICAgIm9wPUlNQV9QT0xJQ1kifSwKPiArICAgICAgIHtpcGVfb3BfaW1hX3g1MDks ICAgICAgICAgICAgICAgIm9wPUlNQV9YNTA5X0NFUlQifSwKPiArICAgICAgIHtpcGVfb3BfbWF4 LCAgICAgICAgICAgICAgICAgICAgTlVMTH0KPiArfTsKPiArCj4gKy8qKgo+ICsgKiBwYXJzZV9v cGVyYXRpb24gLSBQYXJzZSB0aGUgb3BlYXJ0aW9uIHR5cGUgZ2l2ZW4gYSB0b2tlbiBzdHJpbmcu Cj4gKyAqIEB0OiBTdXBwbGllcyB0aGUgdG9rZW4gc3RyaW5nIHRvIGJlIHBhcnNlZC4KPiArICoK PiArICogUmV0dXJuOiBUaGUgcGFyc2VkIG9wZWFydGlvbiB0eXBlLgo+ICsgKi8KPiArc3RhdGlj IGVudW0gaXBlX29wX3R5cGUgcGFyc2Vfb3BlcmF0aW9uKGNoYXIgKnQpCj4gK3sKPiArICAgICAg IHN1YnN0cmluZ190IGFyZ3NbTUFYX09QVF9BUkdTXTsKPiArCj4gKyAgICAgICByZXR1cm4gbWF0 Y2hfdG9rZW4odCwgb3BlcmF0aW9uX3Rva2VucywgYXJncyk7Cj4gK30KPiArCj4gK3N0YXRpYyBj b25zdCBtYXRjaF90YWJsZV90IGFjdGlvbl90b2tlbnMgPSB7Cj4gKyAgICAgICB7aXBlX2FjdGlv bl9hbGxvdywgICAgICAiYWN0aW9uPUFMTE9XIn0sCj4gKyAgICAgICB7aXBlX2FjdGlvbl9kZW55 LCAgICAgICAiYWN0aW9uPURFTlkifSwKPiArICAgICAgIHtpcGVfYWN0aW9uX21heCwgICAgICAg IE5VTEx9Cj4gK307Cj4gKwo+ICsvKioKPiArICogcGFyc2VfYWN0aW9uIC0gUGFyc2UgdGhlIGFj dGlvbiB0eXBlIGdpdmVuIGEgdG9rZW4gc3RyaW5nLgo+ICsgKiBAdDogU3VwcGxpZXMgdGhlIHRv a2VuIHN0cmluZyB0byBiZSBwYXJzZWQuCj4gKyAqCj4gKyAqIFJldHVybjogVGhlIHBhcnNlZCBh Y3Rpb24gdHlwZS4KPiArICovCj4gK3N0YXRpYyBlbnVtIGlwZV9hY3Rpb25fdHlwZSBwYXJzZV9h Y3Rpb24oY2hhciAqdCkKPiArewo+ICsgICAgICAgc3Vic3RyaW5nX3QgYXJnc1tNQVhfT1BUX0FS R1NdOwo+ICsKPiArICAgICAgIHJldHVybiBtYXRjaF90b2tlbih0LCBhY3Rpb25fdG9rZW5zLCBh cmdzKTsKPiArfQo+ICsKPiArc3RhdGljIGNvbnN0IG1hdGNoX3RhYmxlX3QgcHJvcGVydHlfdG9r ZW5zID0gewo+ICsgICAgICAge2lwZV9wcm9wX21heCwgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgTlVMTH0KPiArfTsKPiArCj4gKy8qKgo+ICsgKiBwYXJzZV9wcm9wZXJ0eSAtIFBh cnNlIHRoZSBwcm9wZXJ0eSB0eXBlIGdpdmVuIGEgdG9rZW4gc3RyaW5nLgo+ICsgKiBAdDogU3Vw cGxpZXMgdGhlIHRva2VuIHN0cmluZyB0byBiZSBwYXJzZWQuCj4gKyAqIEByOiBTdXBwbGllcyB0 aGUgaXBlX3J1bGUgdGhlIHBhcnNlZCBwcm9wZXJ0eSB3aWxsIGJlIGFzc29jaWF0ZWQgd2l0aC4K PiArICoKPiArICogUmV0dXJuOgo+ICsgKiAqICFJU19FUlIgICAtIE9LCj4gKyAqICogLUVOT01F TSAgIC0gT3V0IG9mIG1lbW9yeQo+ICsgKiAqIC1FQkFETVNHICAtIFRoZSBzdXBwbGllZCB0b2tl biBjYW5ub3QgYmUgcGFyc2VkCj4gKyAqLwo+ICtpbnQgcGFyc2VfcHJvcGVydHkoY2hhciAqdCwg c3RydWN0IGlwZV9ydWxlICpyKQo+ICt7Cj4gKyAgICAgICBzdWJzdHJpbmdfdCBhcmdzW01BWF9P UFRfQVJHU107Cj4gKyAgICAgICBzdHJ1Y3QgaXBlX3Byb3AgKnAgPSBOVUxMOwo+ICsgICAgICAg aW50IHJjID0gMDsKPiArICAgICAgIGludCB0b2tlbjsKPiArICAgICAgIGNoYXIgKmR1cCA9IE5V TEw7Cj4gKwo+ICsgICAgICAgcCA9IGt6YWxsb2Moc2l6ZW9mKCpwKSwgR0ZQX0tFUk5FTCk7Cj4g KyAgICAgICBpZiAoIXApIHsKPiArICAgICAgICAgICAgICAgcmMgPSAtRU5PTUVNOwo+ICsgICAg ICAgICAgICAgICBnb3RvIGVycjsKPiArICAgICAgIH0KPiArCj4gKyAgICAgICB0b2tlbiA9IG1h dGNoX3Rva2VuKHQsIHByb3BlcnR5X3Rva2VucywgYXJncyk7Cj4gKwo+ICsgICAgICAgc3dpdGNo ICh0b2tlbikgewo+ICsgICAgICAgY2FzZSBpcGVfcHJvcF9tYXg6Cj4gKyAgICAgICBkZWZhdWx0 Ogo+ICsgICAgICAgICAgICAgICByYyA9IC1FQkFETVNHOwo+ICsgICAgICAgICAgICAgICBicmVh azsKPiArICAgICAgIH0KPiArICAgICAgIGxpc3RfYWRkX3RhaWwoJnAtPm5leHQsICZyLT5wcm9w cyk7Cj4gKwo+ICtlcnI6Cj4gKyAgICAgICBrZnJlZShkdXApOwo+ICsgICAgICAgcmV0dXJuIHJj Owo+ICt9CgpUaGVyZSBpcyBhIGxvdCBvZiBzdHVmZiBpbiAncGFyc2VfcHJvcGVydHkoKScgdGhh dCBkb2Vzbid0IG1ha2Ugc2Vuc2UKYXQgdGhpcyBwb2ludCBpbiB0aGUgcGF0Y2hzZXQsIGluY2x1 ZGluZyBsb3RzIG9mIHVudXNlZCB2YXJpYWJsZXMuCkNvbnNpZGVyaW5nIHRoYXQgbm8gdmFsaWQg cHJvcGVydGllcyBhcmUgZGVmaW5lZCB5ZXQsIHdoeSBub3QganVzdAptYWtlIHRoaXMgZnVuY3Rp b24gcmV0dXJuIC1FQkFETVNHIGluIHRoaXMgcGF0Y2g/ICBZb3UgY2FuIGFsd2F5cwpwb3B1bGF0 ZSBpdCBsYXRlciB3aGVuIGl0IGJlY29tZXMgdXNlZnVsLgoKaW50IHBhcnNlX3Byb3BlcnR5KC4u LikKewogIHJldHVybiAtRUJBRE1TRzsKfQoKPiArLyoqCj4gKyAqIHBhcnNlX3J1bGUgLSBwYXJz ZSBhIHBvbGljeSBydWxlIGxpbmUuCj4gKyAqIEBsaW5lOiBTdXBwbGllcyBydWxlIGxpbmUgdG8g YmUgcGFyc2VkLgo+ICsgKiBAcDogU3VwcGxpZXMgdGhlIHBhcnRpYWwgcGFyc2VkIHBvbGljeS4K PiArICoKPiArICogUmV0dXJuOgo+ICsgKiAqICFJU19FUlIgICAtIE9LCj4gKyAqICogLUVOT01F TSAgIC0gT3V0IG9mIG1lbW9yeQo+ICsgKiAqIC1FQkFETVNHICAtIFBvbGljeSBzeW50YXggZXJy b3IKPiArICovCj4gK3N0YXRpYyBpbnQgcGFyc2VfcnVsZShjaGFyICpsaW5lLCBzdHJ1Y3QgaXBl X3BhcnNlZF9wb2xpY3kgKnApCj4gK3sKPiArICAgICAgIGludCByYyA9IDA7Cj4gKyAgICAgICBi b29sIGZpcnN0X3Rva2VuID0gdHJ1ZSwgaXNfZGVmYXVsdF9ydWxlID0gZmFsc2U7Cj4gKyAgICAg ICBib29sIG9wX3BhcnNlZCA9IGZhbHNlOwo+ICsgICAgICAgZW51bSBpcGVfb3BfdHlwZSBvcCA9 IGlwZV9vcF9tYXg7Cj4gKyAgICAgICBlbnVtIGlwZV9hY3Rpb25fdHlwZSBhY3Rpb24gPSBpcGVf YWN0aW9uX21heDsKPiArICAgICAgIHN0cnVjdCBpcGVfcnVsZSAqciA9IE5VTEw7Cj4gKyAgICAg ICBjaGFyICp0Owo+ICsKPiArICAgICAgIHIgPSBremFsbG9jKHNpemVvZigqciksIEdGUF9LRVJO RUwpOwo+ICsgICAgICAgaWYgKCFyKSB7Cj4gKyAgICAgICAgICAgICAgIHJjID0gLUVOT01FTTsK PiArICAgICAgICAgICAgICAgZ290byBlcnI7Cj4gKyAgICAgICB9Cj4gKwo+ICsgICAgICAgSU5J VF9MSVNUX0hFQUQoJnItPm5leHQpOwo+ICsgICAgICAgSU5JVF9MSVNUX0hFQUQoJnItPnByb3Bz KTsKPiArCj4gKyAgICAgICB3aGlsZSAodCA9IHN0cnNlcCgmbGluZSwgIiBcdCIpLCBsaW5lKSB7 Cj4gKyAgICAgICAgICAgICAgIGlmICgqdCA9PSAnXDAnKQo+ICsgICAgICAgICAgICAgICAgICAg ICAgIGNvbnRpbnVlOwo+ICsgICAgICAgICAgICAgICBpZiAoZmlyc3RfdG9rZW4gJiYgaXNfZGVm YXVsdCh0KSkgewo+ICsgICAgICAgICAgICAgICAgICAgICAgIGlzX2RlZmF1bHRfcnVsZSA9IHRy dWU7Cj4gKyAgICAgICAgICAgICAgIH0gZWxzZSB7Cj4gKyAgICAgICAgICAgICAgICAgICAgICAg aWYgKCFvcF9wYXJzZWQpIHsKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wID0g cGFyc2Vfb3BlcmF0aW9uKHQpOwo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYg KG9wID09IGlwZV9vcF9tYXgpCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHJjID0gLUVCQURNU0c7Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNl Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wX3BhcnNlZCA9IHRy dWU7Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKPiArICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHJjID0gcGFyc2VfcHJvcGVydHkodCwgcik7Cj4gKyAgICAgICAgICAg ICAgICAgICAgICAgfQo+ICsgICAgICAgICAgICAgICB9Cj4gKwo+ICsgICAgICAgICAgICAgICBp ZiAocmMpCj4gKyAgICAgICAgICAgICAgICAgICAgICAgZ290byBlcnI7Cj4gKyAgICAgICAgICAg ICAgIGZpcnN0X3Rva2VuID0gZmFsc2U7Cj4gKyAgICAgICB9Cj4gKwo+ICsgICAgICAgYWN0aW9u ID0gcGFyc2VfYWN0aW9uKHQpOwo+ICsgICAgICAgaWYgKGFjdGlvbiA9PSBpcGVfYWN0aW9uX21h eCkgewo+ICsgICAgICAgICAgICAgICByYyA9IC1FQkFETVNHOwo+ICsgICAgICAgICAgICAgICBn b3RvIGVycjsKPiArICAgICAgIH0KPiArCj4gKyAgICAgICBpZiAoaXNfZGVmYXVsdF9ydWxlKSB7 Cj4gKyAgICAgICAgICAgICAgIGlmIChvcCA9PSBpcGVfb3BfbWF4KSB7Cj4gKyAgICAgICAgICAg ICAgICAgICAgICAgaWYgKHAtPmdsb2JhbF9kZWZhdWx0X2FjdGlvbiAhPSBpcGVfYWN0aW9uX21h eCkKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJjID0gLUVCQURNU0c7Cj4gKyAg ICAgICAgICAgICAgICAgICAgICAgZWxzZQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgcC0+Z2xvYmFsX2RlZmF1bHRfYWN0aW9uID0gYWN0aW9uOwo+ICsgICAgICAgICAgICAgICB9 IGVsc2Ugewo+ICsgICAgICAgICAgICAgICAgICAgICAgIGlmIChwLT5ydWxlc1tvcF0uZGVmYXVs dF9hY3Rpb24gIT0gaXBlX2FjdGlvbl9tYXgpCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICByYyA9IC1FQkFETVNHOwo+ICsgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKPiArICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHAtPnJ1bGVzW29wXS5kZWZhdWx0X2FjdGlvbiA9 IGFjdGlvbjsKPiArICAgICAgICAgICAgICAgfQo+ICsgICAgICAgICAgICAgICBmcmVlX3J1bGUo cik7Cj4gKyAgICAgICB9IGVsc2UgaWYgKG9wICE9IGlwZV9vcF9tYXggJiYgYWN0aW9uICE9IGlw ZV9hY3Rpb25fbWF4KSB7Cj4gKyAgICAgICAgICAgICAgIHItPm9wID0gb3A7Cj4gKyAgICAgICAg ICAgICAgIHItPmFjdGlvbiA9IGFjdGlvbjsKPiArICAgICAgICAgICAgICAgbGlzdF9hZGRfdGFp bCgmci0+bmV4dCwgJnAtPnJ1bGVzW29wXS5ydWxlcyk7CgpUaGVyZSBpcyBubyB3YXkgQHJjIGNv dWxkIGJlIG5vbi16ZXJvIGhlcmUsIHJpZ2h0PyAgSWYgdGhlcmUgaXMgc29tZQpjaGFuY2Ugb2Yg aXQgYmVpbmcgbm9uLXplcm8gd2UgY291bGQgaGF2ZSBhIHByb2JsZW0gd2l0aCB0aGUgQHJjIGNo ZWNrCmJlbG93IGp1bXBpbmcgdXMgdG8gdGhlICdlcnInIGxhYmVsIGFuZCBmcmVlJ2luZyBhIHJ1 bGUgdGhhdCBoYXMgYmVlbgphZGRlZCB0byB0aGUgbGlzdC4KCkl0IG1pZ2h0IGJlIGJldHRlciB0 byBtb3ZlIHRoZSBsaXN0IGFkZGl0aW9uIGFmdGVyIHRoZSBsYXN0IGVycm9yIGNoZWNrLgoKPiAr ICAgICAgIH0gZWxzZSB7Cj4gKyAgICAgICAgICAgICAgIHJjID0gLUVCQURNU0c7Cj4gKyAgICAg ICB9Cj4gKwo+ICsgICAgICAgaWYgKHJjKQo+ICsgICAgICAgICAgICAgICBnb3RvIGVycjsKPiAr Cj4gKyAgICAgICBnb3RvIG91dDsKPiArCj4gK2VycjoKPiArICAgICAgIGZyZWVfcnVsZShyKTsK PiArb3V0Ogo+ICsgICAgICAgcmV0dXJuIHJjOwo+ICt9Cj4gKwo+ICsvKioKPiArICogZnJlZV9w YXJzZWRfcG9saWN5IC0gZnJlZSBhIHBhcnNlZCBwb2xpY3kgc3RydWN0dXJlLgo+ICsgKiBAcDog U3VwcGxpZXMgdGhlIHBhcnNlZCBwb2xpY3kuCj4gKyAqLwo+ICt2b2lkIGZyZWVfcGFyc2VkX3Bv bGljeShzdHJ1Y3QgaXBlX3BhcnNlZF9wb2xpY3kgKnApCj4gK3sKPiArICAgICAgIHNpemVfdCBp ID0gMDsKPiArICAgICAgIHN0cnVjdCBpcGVfcnVsZSAqcHAsICp0Owo+ICsKPiArICAgICAgIGlm IChJU19FUlJfT1JfTlVMTChwKSkKPiArICAgICAgICAgICAgICAgcmV0dXJuOwo+ICsKPiArICAg ICAgIGZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHAtPnJ1bGVzKTsgKytpKQo+ICsgICAgICAg ICAgICAgICBsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocHAsIHQsICZwLT5ydWxlc1tpXS5ydWxl cywgbmV4dCkKPiArICAgICAgICAgICAgICAgICAgICAgICBmcmVlX3J1bGUocHApOwo+ICsKPiAr ICAgICAgIGtmcmVlKHApOwo+ICt9Cj4gKwo+ICsvKioKPiArICogdmFsaWRhdGVfcG9saWN5IC0g dmFsaWRhdGUgYSBwYXJzZWQgcG9saWN5Lgo+ICsgKiBAcDogU3VwcGxpZXMgdGhlIGZ1bGx5IHBh cnNlZCBwb2xpY3kuCj4gKyAqCj4gKyAqIEdpdmVuIGEgcG9saWN5IHN0cnVjdHVyZSB0aGF0IHdh cyBqdXN0IHBhcnNlZCwgdmFsaWRhdGUgdGhhdCBhbGwKPiArICogbmVjZXNzYXJ5IGZpZWxkcyBh cmUgcHJlc2VudCwgaW5pdGlhbGl6ZWQgY29ycmVjdGx5LCBhbmQgYWxsIGxpbmVzCj4gKyAqIHBh cnNlZCBhcmUgaGF2ZSBiZWVuIGNvbnN1bWVkLgo+ICsgKgo+ICsgKiBBIHBhcnNlZCBwb2xpY3kg Y2FuIGJlIGFuIGludmFsaWQgc3RhdGUgZm9yIHVzZSAoYSBkZWZhdWx0IHdhcwo+ICsgKiB1bmRl ZmluZWQsIGEgaGVhZGVyIHdhcyB1bmRlZmluZWQpIGJ5IGp1c3QgcGFyc2luZyB0aGUgcG9saWN5 Lgo+ICsgKgo+ICsgKiBSZXR1cm46Cj4gKyAqICogMCAgICAgICAgIC0gT0sKPiArICogKiAtRUJB RE1TRyAgLSBQb2xpY3kgaXMgaW52YWxpZAo+ICsgKi8KPiArc3RhdGljIGludCB2YWxpZGF0ZV9w b2xpY3koY29uc3Qgc3RydWN0IGlwZV9wYXJzZWRfcG9saWN5ICpwKQo+ICt7Cj4gKyAgICAgICBp bnQgaSA9IDA7Cj4gKwo+ICsgICAgICAgaWYgKHAtPmdsb2JhbF9kZWZhdWx0X2FjdGlvbiAhPSBp cGVfYWN0aW9uX21heCkKPiArICAgICAgICAgICAgICAgcmV0dXJuIDA7Cj4gKwo+ICsgICAgICAg Zm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUocC0+cnVsZXMpOyArK2kpIHsKPiArICAgICAgICAg ICAgICAgaWYgKHAtPnJ1bGVzW2ldLmRlZmF1bHRfYWN0aW9uID09IGlwZV9hY3Rpb25fbWF4KQo+ ICsgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtRUJBRE1TRzsKPiArICAgICAgIH0KPiAr Cj4gKyAgICAgICByZXR1cm4gMDsKPiArfQo+ICsKPiArLyoqCj4gKyAqIHBhcnNlX3BvbGljeSAt IEdpdmVuIGEgc3RyaW5nLCBwYXJzZSB0aGUgc3RyaW5nIGludG8gYW4gSVBFIHBvbGljeS4KPiAr ICogQHA6IHBhcnRpYWxseSBmaWxsZWQgaXBlX3BvbGljeSBzdHJ1Y3R1cmUgdG8gcG9wdWxhdGUg d2l0aCB0aGUgcmVzdWx0Lgo+ICsgKiAgICAgaXQgbXVzdCBoYXZlIHRleHQgYW5kIHRleHRsZW4g c2V0Lgo+ICsgKgo+ICsgKiBSZXR1cm46Cj4gKyAqICogMCAgICAgICAgIC0gT0sKPiArICogKiAt RUJBRE1TRyAgLSBQb2xpY3kgaXMgaW52YWxpZAo+ICsgKiAqIC1FTk9NRU0gICAtIE91dCBvZiBN ZW1vcnkKPiArICovCj4gK2ludCBwYXJzZV9wb2xpY3koc3RydWN0IGlwZV9wb2xpY3kgKnApCj4g K3sKPiArICAgICAgIGludCByYyA9IDA7Cj4gKyAgICAgICBzaXplX3QgbGVuOwo+ICsgICAgICAg Y2hhciAqcG9saWN5ID0gTlVMTCwgKmR1cCA9IE5VTEw7Cj4gKyAgICAgICBjaGFyICpsaW5lID0g TlVMTDsKPiArICAgICAgIGJvb2wgaGVhZGVyX3BhcnNlZCA9IGZhbHNlOwo+ICsgICAgICAgc3Ry dWN0IGlwZV9wYXJzZWRfcG9saWN5ICpwcCA9IE5VTEw7Cj4gKwo+ICsgICAgICAgaWYgKCFwLT50 ZXh0bGVuKQo+ICsgICAgICAgICAgICAgICByZXR1cm4gLUVCQURNU0c7Cj4gKwo+ICsgICAgICAg cG9saWN5ID0ga21lbWR1cF9udWwocC0+dGV4dCwgcC0+dGV4dGxlbiwgR0ZQX0tFUk5FTCk7Cj4g KyAgICAgICBpZiAoIXBvbGljeSkKPiArICAgICAgICAgICAgICAgcmV0dXJuIC1FTk9NRU07Cj4g KyAgICAgICBkdXAgPSBwb2xpY3k7Cj4gKwo+ICsgICAgICAgcHAgPSBuZXdfcGFyc2VkX3BvbGlj eSgpOwo+ICsgICAgICAgaWYgKElTX0VSUihwcCkpIHsKPiArICAgICAgICAgICAgICAgcmMgPSBQ VFJfRVJSKHBwKTsKPiArICAgICAgICAgICAgICAgZ290byBvdXQ7Cj4gKyAgICAgICB9Cj4gKwo+ ICsgICAgICAgd2hpbGUgKChsaW5lID0gc3Ryc2VwKCZwb2xpY3ksICJcblxyIikpICE9IE5VTEwp IHsKPiArICAgICAgICAgICAgICAgcmVtb3ZlX2NvbW1lbnQobGluZSk7Cj4gKyAgICAgICAgICAg ICAgIHJlbW92ZV90cmFpbGluZ19zcGFjZXMobGluZSk7CgpJIHRoaW5rIGl0IG1pZ2h0IGJlIHZl cnkgZWFzeSBmb3IgJ3JlbW92ZV90cmFpbGluZ19zcGFjZXMoKScgdG8gcmV0dXJuCnRoZSBsZW5n dGggb2YgdGhlIHN0cmluZyBhcyBpdCBhbHJlYWR5IGtub3dzIHdoZXJlIHRoZSBzdHJpbmcgZW5k czsKcGVyaGFwcyB0aGUgZnVuY3Rpb24gY291bGQgcmV0dXJuIHRoZSBzdHJpbmcgbGVuZ3RoIGFu ZCB3ZSBjb3VsZCBnZXQKcmlkIG9mIHRoZSAnc3RybGVuKCknIGNhbGwgYmVsb3c/Cgo+ICsgICAg ICAgICAgICAgICBsZW4gPSBzdHJsZW4obGluZSk7Cj4gKyAgICAgICAgICAgICAgIGlmICghbGVu KQo+ICsgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwo+ICsKPiArICAgICAgICAgICAg ICAgaWYgKCFoZWFkZXJfcGFyc2VkKSB7Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgcmMgPSBw YXJzZV9oZWFkZXIobGluZSwgcHApOwo+ICsgICAgICAgICAgICAgICAgICAgICAgIGlmIChyYykK PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gZXJyOwo+ICsgICAgICAgICAg ICAgICAgICAgICAgIGhlYWRlcl9wYXJzZWQgPSB0cnVlOwo+ICsgICAgICAgICAgICAgICAgICAg ICAgIGNvbnRpbnVlOwoKSW5zdGVhZCBvZiB0aGUgJ2NvbnRpbnVlJyBhYm92ZSwgd2h5IG5vdCBq dXN0IHB1dCB0aGUgJ3BhcnNlX3J1bGUoKScKY2FsbCBpbnRvIHRoZSAnZWxzZScgYmxvY2sgb2Yg dGhpcyBpZi10aGVuLWVsc2U/Cgo+ICsgICAgICAgICAgICAgICB9Cj4gKwo+ICsgICAgICAgICAg ICAgICByYyA9IHBhcnNlX3J1bGUobGluZSwgcHApOwo+ICsgICAgICAgICAgICAgICBpZiAocmMp Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgZ290byBlcnI7Cj4gKyAgICAgICB9Cj4gKwo+ICsg ICAgICAgaWYgKCFoZWFkZXJfcGFyc2VkIHx8IHZhbGlkYXRlX3BvbGljeShwcCkpIHsKPiArICAg ICAgICAgICAgICAgcmMgPSAtRUJBRE1TRzsKPiArICAgICAgICAgICAgICAgZ290byBlcnI7Cj4g KyAgICAgICB9Cj4gKwo+ICsgICAgICAgcC0+cGFyc2VkID0gcHA7Cj4gKwo+ICsgICAgICAgZ290 byBvdXQ7Cj4gK2VycjoKPiArICAgICAgIGZyZWVfcGFyc2VkX3BvbGljeShwcCk7Cj4gK291dDoK PiArICAgICAgIGtmcmVlKGR1cCk7Cj4gKwo+ICsgICAgICAgcmV0dXJuIHJjOwo+ICt9Cj4gZGlm ZiAtLWdpdCBhL3NlY3VyaXR5L2lwZS9wb2xpY3lfcGFyc2VyLmggYi9zZWN1cml0eS9pcGUvcG9s aWN5X3BhcnNlci5oCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiBpbmRleCAwMDAwMDAwMDAwMDAu LjY5OWNhNThhNWEzMgo+IC0tLSAvZGV2L251bGwKPiArKysgYi9zZWN1cml0eS9pcGUvcG9saWN5 X3BhcnNlci5oCj4gQEAgLTAsMCArMSwxMSBAQAo+ICsvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmll cjogR1BMLTIuMCAqLwo+ICsvKgo+ICsgKiBDb3B5cmlnaHQgKEMpIE1pY3Jvc29mdCBDb3Jwb3Jh dGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KPiArICovCj4gKyNpZm5kZWYgSVBFX1BPTElDWV9Q QVJTRVJfSAo+ICsjZGVmaW5lIElQRV9QT0xJQ1lfUEFSU0VSX0gKPiArCj4gK2ludCBwYXJzZV9w b2xpY3koc3RydWN0IGlwZV9wb2xpY3kgKnApOwo+ICt2b2lkIGZyZWVfcGFyc2VkX3BvbGljeShz dHJ1Y3QgaXBlX3BhcnNlZF9wb2xpY3kgKnApOwo+ICsKPiArI2VuZGlmIC8qIElQRV9QT0xJQ1lf UEFSU0VSICovCj4gLS0KPiAyLjM5LjAKCi0tCnBhdWwtbW9vcmUuY29tCgotLQpMaW51eC1hdWRp dCBtYWlsaW5nIGxpc3QKTGludXgtYXVkaXRAcmVkaGF0LmNvbQpodHRwczovL2xpc3RtYW4ucmVk aGF0LmNvbS9tYWlsbWFuL2xpc3RpbmZvL2xpbnV4LWF1ZGl0Cg==