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 X-Spam-Level: X-Spam-Status: No, score=-15.7 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER, INCLUDES_PATCH,MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED autolearn=unavailable autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 7D6E9C433F5 for ; Thu, 9 Sep 2021 12:47:10 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 5E4D66115B for ; Thu, 9 Sep 2021 12:47:10 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S240828AbhIIMsS (ORCPT ); Thu, 9 Sep 2021 08:48:18 -0400 Received: from Galois.linutronix.de ([193.142.43.55]:59440 "EHLO galois.linutronix.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1353467AbhIIMgP (ORCPT ); Thu, 9 Sep 2021 08:36:15 -0400 Message-ID: <20210909123212.489059409@linutronix.de> DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linutronix.de; s=2020; t=1631190899; h=from:from: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; bh=Wwh5TcyWNEY2JaZiEspRpuvydnUIA9MC1FFhWXyW3+Q=; b=sgjiPuq921xEFqd9EP9m/t1IsZEeRw269Py4Q5ZwRIOkwfv3TO6mAHf/+2vKwc3EtLLDji P6nt05/YhG8Y8xcQDiSn7YLmdX2zmc702ZyBPgbHQ8+K9CNS7RNusbR1ply49aLHWD9FF6 ss0O30gm56OTcNUbtRunWAofn3ENP2zOVzYzhBtmm3vsISIbp+1pXKAUvGkKekPHuV4KJv hhzxbK55thB7OPLVCUOlN2adfp19GacB8waTcZmN17Z7VyEZ8mX5Pf0Fq/XNuih4c27q7T trfRH9HxfmLcZBb1FJnXWKqBzr1/AiEWS9MMtdKcT8HwnmQveiMuHxyoyk9v6A== DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed; d=linutronix.de; s=2020e; t=1631190899; h=from:from: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; bh=Wwh5TcyWNEY2JaZiEspRpuvydnUIA9MC1FFhWXyW3+Q=; b=DSw2kU1cwpLq0UjFcKGpnulVrk2H/n6ip8KGGUKO8NYrYjw6UqC92Ap61SyTtj6cfS+P2U UhZv1SVRRErt1+Dw== From: Thomas Gleixner To: LKML Cc: Dave Chinner , Randy Dunlap , Jonathan Corbet , Sebastian Andrzej Siewior , linux-doc@vger.kernel.org, Peter Zijlstra Subject: [patch] Documentation: core-api/cpuhotplug: Rewrite the API section MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Date: Thu, 9 Sep 2021 14:34:59 +0200 (CEST) Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org RGF2ZSBzdHVtYmxlZCBvdmVyIHRoZSBpbmNvbXBsZXRlIGFuZCBjb25mdXNpbmcgZG9jdW1lbnRh dGlvbiBvZiB0aGUgQ1BVCmhvdHBsdWcgQVBJLgoKUmV3cml0ZSBpdCwgYWRkIHRoZSBtaXNzaW5n IGZ1bmN0aW9uIGRvY3VtZW50YXRpb25zIGFuZCBjb3JyZWN0IHRoZQpleGlzdGluZyBvbmVzLgoK UmVwb3J0ZWQtYnk6IERhdmUgQ2hpbm5lciA8ZGF2aWRAZnJvbW9yYml0LmNvbT4KU2lnbmVkLW9m Zi1ieTogVGhvbWFzIEdsZWl4bmVyIDx0Z2x4QGxpbnV0cm9uaXguZGU+CkNjOiBSYW5keSBEdW5s YXAgPHJkdW5sYXBAaW5mcmFkZWFkLm9yZz4KQ2M6IEpvbmF0aGFuIENvcmJldCA8Y29yYmV0QGx3 bi5uZXQ+CkNjOiBTZWJhc3RpYW4gQW5kcnplaiBTaWV3aW9yIDxiaWdlYXN5QGxpbnV0cm9uaXgu ZGU+CkNjOiBsaW51eC1kb2NAdmdlci5rZXJuZWwub3JnCkNjOiBQZXRlciBaaWpsc3RyYSA8cGV0 ZXJ6QGluZnJhZGVhZC5vcmc+Ci0tLQogRG9jdW1lbnRhdGlvbi9jb3JlLWFwaS9jcHVfaG90cGx1 Zy5yc3QgfCAgNTc3ICsrKysrKysrKysrKysrKysrKysrKysrKysrKy0tLS0tLQogaW5jbHVkZS9s aW51eC9jcHVob3RwbHVnLmggICAgICAgICAgICAgfCAgMTMyICsrKysrKy0KIDIgZmlsZXMgY2hh bmdlZCwgNTg5IGluc2VydGlvbnMoKyksIDEyMCBkZWxldGlvbnMoLSkKCi0tLSBhL0RvY3VtZW50 YXRpb24vY29yZS1hcGkvY3B1X2hvdHBsdWcucnN0CisrKyBiL0RvY3VtZW50YXRpb24vY29yZS1h cGkvY3B1X2hvdHBsdWcucnN0CkBAIC0yLDEyICsyLDEzIEBACiBDUFUgaG90cGx1ZyBpbiB0aGUg S2VybmVsCiA9PT09PT09PT09PT09PT09PT09PT09PT09CiAKLTpEYXRlOiBEZWNlbWJlciwgMjAx NgorOkRhdGU6IFNlcHRlbWJlciwgMjAyMQogOkF1dGhvcjogU2ViYXN0aWFuIEFuZHJ6ZWogU2ll d2lvciA8YmlnZWFzeUBsaW51dHJvbml4LmRlPiwKLSAgICAgICAgICBSdXN0eSBSdXNzZWxsIDxy dXN0eUBydXN0Y29ycC5jb20uYXU+LAotICAgICAgICAgIFNyaXZhdHNhIFZhZGRhZ2lyaSA8dmF0 c2FAaW4uaWJtLmNvbT4sCi0gICAgICAgICAgQXNob2sgUmFqIDxhc2hvay5yYWpAaW50ZWwuY29t PiwKLSAgICAgICAgICBKb2VsIFNjaG9wcCA8anNjaG9wcEBhdXN0aW4uaWJtLmNvbT4KKyAgICAg ICAgIFJ1c3R5IFJ1c3NlbGwgPHJ1c3R5QHJ1c3Rjb3JwLmNvbS5hdT4sCisgICAgICAgICBTcml2 YXRzYSBWYWRkYWdpcmkgPHZhdHNhQGluLmlibS5jb20+LAorICAgICAgICAgQXNob2sgUmFqIDxh c2hvay5yYWpAaW50ZWwuY29tPiwKKyAgICAgICAgIEpvZWwgU2Nob3BwIDxqc2Nob3BwQGF1c3Rp bi5pYm0uY29tPiwKKwkgVGhvbWFzIEdsZWl4bmVyIDx0Z2x4QGxpbnV0cm9uaXguZGU+CiAKIElu dHJvZHVjdGlvbgogPT09PT09PT09PT09CkBAIC0xNTgsMTAwICsxNTksNDgwIEBAIGhvdHBsdWcg c3RhdGVzIHdpbGwgYmUgaW52b2tlZCwgc3RhcnRpbmcKICogT25jZSBhbGwgc2VydmljZXMgYXJl IG1pZ3JhdGVkLCBrZXJuZWwgY2FsbHMgYW4gYXJjaCBzcGVjaWZpYyByb3V0aW5lCiAgIGBgX19j cHVfZGlzYWJsZSgpYGAgdG8gcGVyZm9ybSBhcmNoIHNwZWNpZmljIGNsZWFudXAuCiAKLVVzaW5n IHRoZSBob3RwbHVnIEFQSQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLUl0IGlzIHBvc3NpYmxl IHRvIHJlY2VpdmUgbm90aWZpY2F0aW9ucyBvbmNlIGEgQ1BVIGlzIG9mZmxpbmUgb3Igb25saW5l ZC4gVGhpcwotbWlnaHQgYmUgaW1wb3J0YW50IHRvIGNlcnRhaW4gZHJpdmVycyB3aGljaCBuZWVk IHRvIHBlcmZvcm0gc29tZSBraW5kIG9mIHNldHVwCi1vciBjbGVhbiB1cCBmdW5jdGlvbnMgYmFz ZWQgb24gdGhlIG51bWJlciBvZiBhdmFpbGFibGUgQ1BVczo6Ci0KLSAgI2luY2x1ZGUgPGxpbnV4 L2NwdWhvdHBsdWcuaD4KLQotICByZXQgPSBjcHVocF9zZXR1cF9zdGF0ZShDUFVIUF9BUF9PTkxJ TkVfRFlOLCAiWC9ZOm9ubGluZSIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIFlfb25saW5l LCBZX3ByZXBhcmVfZG93bik7Ci0KLSpYKiBpcyB0aGUgc3Vic3lzdGVtIGFuZCAqWSogdGhlIHBh cnRpY3VsYXIgZHJpdmVyLiBUaGUgKllfb25saW5lKiBjYWxsYmFjawotd2lsbCBiZSBpbnZva2Vk IGR1cmluZyByZWdpc3RyYXRpb24gb24gYWxsIG9ubGluZSBDUFVzLiBJZiBhbiBlcnJvcgotb2Nj dXJzIGR1cmluZyB0aGUgb25saW5lIGNhbGxiYWNrIHRoZSAqWV9wcmVwYXJlX2Rvd24qIGNhbGxi YWNrIHdpbGwgYmUKLWludm9rZWQgb24gYWxsIENQVXMgb24gd2hpY2ggdGhlIG9ubGluZSBjYWxs YmFjayB3YXMgcHJldmlvdXNseSBpbnZva2VkLgotQWZ0ZXIgcmVnaXN0cmF0aW9uIGNvbXBsZXRl ZCwgdGhlICpZX29ubGluZSogY2FsbGJhY2sgd2lsbCBiZSBpbnZva2VkCi1vbmNlIGEgQ1BVIGlz IGJyb3VnaHQgb25saW5lIGFuZCAqWV9wcmVwYXJlX2Rvd24qIHdpbGwgYmUgaW52b2tlZCB3aGVu IGEKLUNQVSBpcyBzaHV0ZG93bi4gQWxsIHJlc291cmNlcyB3aGljaCB3ZXJlIHByZXZpb3VzbHkg YWxsb2NhdGVkIGluCi0qWV9vbmxpbmUqIHNob3VsZCBiZSByZWxlYXNlZCBpbiAqWV9wcmVwYXJl X2Rvd24qLgotVGhlIHJldHVybiB2YWx1ZSAqcmV0KiBpcyBuZWdhdGl2ZSBpZiBhbiBlcnJvciBv Y2N1cnJlZCBkdXJpbmcgdGhlCi1yZWdpc3RyYXRpb24gcHJvY2Vzcy4gT3RoZXJ3aXNlIGEgcG9z aXRpdmUgdmFsdWUgaXMgcmV0dXJuZWQgd2hpY2gKLWNvbnRhaW5zIHRoZSBhbGxvY2F0ZWQgaG90 cGx1ZyBmb3IgZHluYW1pY2FsbHkgYWxsb2NhdGVkIHN0YXRlcwotKCpDUFVIUF9BUF9PTkxJTkVf RFlOKikuIEl0IHdpbGwgcmV0dXJuIHplcm8gZm9yIHByZWRlZmluZWQgc3RhdGVzLgotCi1UaGUg Y2FsbGJhY2sgY2FuIGJlIHJlbW92ZSBieSBpbnZva2luZyBgYGNwdWhwX3JlbW92ZV9zdGF0ZSgp YGAuIEluIGNhc2Ugb2YgYQotZHluYW1pY2FsbHkgYWxsb2NhdGVkIHN0YXRlICgqQ1BVSFBfQVBf T05MSU5FX0RZTiopIHVzZSB0aGUgcmV0dXJuZWQgc3RhdGUuCi1EdXJpbmcgdGhlIHJlbW92YWwg b2YgYSBob3RwbHVnIHN0YXRlIHRoZSB0ZWFyZG93biBjYWxsYmFjayB3aWxsIGJlIGludm9rZWQu Ci0KLU11bHRpcGxlIGluc3RhbmNlcwotfn5+fn5+fn5+fn5+fn5+fn5+Ci0KLUlmIGEgZHJpdmVy IGhhcyBtdWx0aXBsZSBpbnN0YW5jZXMgYW5kIGVhY2ggaW5zdGFuY2UgbmVlZHMgdG8gcGVyZm9y bSB0aGUKLWNhbGxiYWNrIGluZGVwZW5kZW50bHkgdGhlbiBpdCBpcyBsaWtlbHkgdGhhdCBhICcn bXVsdGktc3RhdGUnJyBzaG91bGQgYmUgdXNlZC4KLUZpcnN0IGEgbXVsdGktc3RhdGUgc3RhdGUg bmVlZHMgdG8gYmUgcmVnaXN0ZXJlZDo6Ci0KLSAgcmV0ID0gY3B1aHBfc2V0dXBfc3RhdGVfbXVs dGkoQ1BVSFBfQVBfT05MSU5FX0RZTiwgIlgvWTpvbmxpbmUsCi0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFlfb25saW5lLCBZX3ByZXBhcmVfZG93bik7Ci0gIFlfaHBfb25saW5lID0g cmV0OwotCi1UaGUgYGBjcHVocF9zZXR1cF9zdGF0ZV9tdWx0aSgpYGAgYmVoYXZlcyBzaW1pbGFy IHRvIGBgY3B1aHBfc2V0dXBfc3RhdGUoKWBgCi1leGNlcHQgaXQgcHJlcGFyZXMgdGhlIGNhbGxi YWNrcyBmb3IgYSBtdWx0aSBzdGF0ZSBhbmQgZG9lcyBub3QgaW52b2tlCi10aGUgY2FsbGJhY2tz LiBUaGlzIGlzIGEgb25lIHRpbWUgc2V0dXAuCi1PbmNlIGEgbmV3IGluc3RhbmNlIGlzIGFsbG9j YXRlZCwgeW91IG5lZWQgdG8gcmVnaXN0ZXIgdGhpcyBuZXcgaW5zdGFuY2U6OgotCi0gIHJldCA9 IGNwdWhwX3N0YXRlX2FkZF9pbnN0YW5jZShZX2hwX29ubGluZSwgJmQtPm5vZGUpOwotCi1UaGlz IGZ1bmN0aW9uIHdpbGwgYWRkIHRoaXMgaW5zdGFuY2UgdG8geW91ciBwcmV2aW91c2x5IGFsbG9j YXRlZAotKllfaHBfb25saW5lKiBzdGF0ZSBhbmQgaW52b2tlIHRoZSBwcmV2aW91c2x5IHJlZ2lz dGVyZWQgY2FsbGJhY2sKLSgqWV9vbmxpbmUqKSBvbiBhbGwgb25saW5lIENQVXMuIFRoZSAqbm9k ZSogZWxlbWVudCBpcyBhIGBgc3RydWN0Ci1obGlzdF9ub2RlYGAgbWVtYmVyIG9mIHlvdXIgcGVy LWluc3RhbmNlIGRhdGEgc3RydWN0dXJlLgotCi1PbiByZW1vdmFsIG9mIHRoZSBpbnN0YW5jZTo6 Ci0KLSAgY3B1aHBfc3RhdGVfcmVtb3ZlX2luc3RhbmNlKFlfaHBfb25saW5lLCAmZC0+bm9kZSkK LQotc2hvdWxkIGJlIGludm9rZWQgd2hpY2ggd2lsbCBpbnZva2UgdGhlIHRlYXJkb3duIGNhbGxi YWNrIG9uIGFsbCBvbmxpbmUKLUNQVXMuCi0KLU1hbnVhbCBzZXR1cAotfn5+fn5+fn5+fn5+Ci0K LVVzdWFsbHkgaXQgaXMgaGFuZHkgdG8gaW52b2tlIHNldHVwIGFuZCB0ZWFyZG93biBjYWxsYmFj a3Mgb24gcmVnaXN0cmF0aW9uIG9yCi1yZW1vdmFsIG9mIGEgc3RhdGUgYmVjYXVzZSB1c3VhbGx5 IHRoZSBvcGVyYXRpb24gbmVlZHMgdG8gcGVyZm9ybWVkIG9uY2UgYSBDUFUKLWdvZXMgb25saW5l IChvZmZsaW5lKSBhbmQgZHVyaW5nIGluaXRpYWwgc2V0dXAgKHNodXRkb3duKSBvZiB0aGUgZHJp dmVyLiBIb3dldmVyCi1lYWNoIHJlZ2lzdHJhdGlvbiBhbmQgcmVtb3ZhbCBmdW5jdGlvbiBpcyBh bHNvIGF2YWlsYWJsZSB3aXRoIGEgYGBfbm9jYWxsc2BgCi1zdWZmaXggd2hpY2ggZG9lcyBub3Qg aW52b2tlIHRoZSBwcm92aWRlZCBjYWxsYmFja3MgaWYgdGhlIGludm9jYXRpb24gb2YgdGhlCi1j YWxsYmFja3MgaXMgbm90IGRlc2lyZWQuIER1cmluZyB0aGUgbWFudWFsIHNldHVwIChvciB0ZWFy ZG93bikgdGhlIGZ1bmN0aW9ucwotYGBjcHVzX3JlYWRfbG9jaygpYGAgYW5kIGBgY3B1c19yZWFk X3VubG9jaygpYGAgc2hvdWxkIGJlIHVzZWQgdG8gaW5oaWJpdCBDUFUKLWhvdHBsdWcgb3BlcmF0 aW9ucy4KLQotCi1UaGUgb3JkZXJpbmcgb2YgdGhlIGV2ZW50cwotLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0KLQotVGhlIGhvdHBsdWcgc3RhdGVzIGFyZSBkZWZpbmVkIGluIGBgaW5jbHVkZS9s aW51eC9jcHVob3RwbHVnLmhgYDoKLQotKiBUaGUgc3RhdGVzICpDUFVIUF9PRkZMSU5FKiDigKYg KkNQVUhQX0FQX09GRkxJTkUqIGFyZSBpbnZva2VkIGJlZm9yZSB0aGUKLSAgQ1BVIGlzIHVwLgot KiBUaGUgc3RhdGVzICpDUFVIUF9BUF9PRkZMSU5FKiDigKYgKkNQVUhQX0FQX09OTElORSogYXJl IGludm9rZWQKLSAganVzdCB0aGUgYWZ0ZXIgdGhlIENQVSBoYXMgYmVlbiBicm91Z2h0IHVwLiBU aGUgaW50ZXJydXB0cyBhcmUgb2ZmIGFuZAotICB0aGUgc2NoZWR1bGVyIGlzIG5vdCB5ZXQgYWN0 aXZlIG9uIHRoaXMgQ1BVLiBTdGFydGluZyB3aXRoICpDUFVIUF9BUF9PRkZMSU5FKgotICB0aGUg Y2FsbGJhY2tzIGFyZSBpbnZva2VkIG9uIHRoZSB0YXJnZXQgQ1BVLgotKiBUaGUgc3RhdGVzIGJl dHdlZW4gKkNQVUhQX0FQX09OTElORV9EWU4qIGFuZCAqQ1BVSFBfQVBfT05MSU5FX0RZTl9FTkQq IGFyZQotICByZXNlcnZlZCBmb3IgdGhlIGR5bmFtaWMgYWxsb2NhdGlvbi4KLSogVGhlIHN0YXRl cyBhcmUgaW52b2tlZCBpbiB0aGUgcmV2ZXJzZSBvcmRlciBvbiBDUFUgc2h1dGRvd24gc3RhcnRp bmcgd2l0aAotICAqQ1BVSFBfT05MSU5FKiBhbmQgc3RvcHBpbmcgYXQgKkNQVUhQX09GRkxJTkUq LiBIZXJlIHRoZSBjYWxsYmFja3MgYXJlCi0gIGludm9rZWQgb24gdGhlIENQVSB0aGF0IHdpbGwg YmUgc2h1dGRvd24gdW50aWwgKkNQVUhQX0FQX09GRkxJTkUqLgotCi1BIGR5bmFtaWNhbGx5IGFs bG9jYXRlZCBzdGF0ZSB2aWEgKkNQVUhQX0FQX09OTElORV9EWU4qIGlzIG9mdGVuIGVub3VnaC4K LUhvd2V2ZXIgaWYgYW4gZWFybGllciBpbnZvY2F0aW9uIGR1cmluZyB0aGUgYnJpbmcgdXAgb3Ig c2h1dGRvd24gaXMgcmVxdWlyZWQKLXRoZW4gYW4gZXhwbGljaXQgc3RhdGUgc2hvdWxkIGJlIGFj cXVpcmVkLiBBbiBleHBsaWNpdCBzdGF0ZSBtaWdodCBhbHNvIGJlCi1yZXF1aXJlZCBpZiB0aGUg aG90cGx1ZyBldmVudCByZXF1aXJlcyBzcGVjaWZpYyBvcmRlcmluZyBpbiByZXNwZWN0IHRvCi1h bm90aGVyIGhvdHBsdWcgZXZlbnQuCitUaGUgQ1BVIGhvdHBsdWcgQVBJCis9PT09PT09PT09PT09 PT09PT09CisKK0NQVSBob3RwbHVnIHN0YXRlIG1hY2hpbmUKKy0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0KKworQ1BVIGhvdHBsdWcgdXNlcyBhIHRyaXZpYWwgc3RhdGUgbWFjaGluZSB3aXRoIGEg bGluZWFyIHN0YXRlIHNwYWNlIGZyb20KK0NQVUhQX09GRkxJTkUgdG8gQ1BVSFBfT05MSU5FLiBF YWNoIHN0YXRlIGhhcyBhIHN0YXJ0dXAgYW5kIGEgdGVhcmRvd24KK2NhbGxiYWNrLgorCitXaGVu IGEgQ1BVIGlzIG9ubGluZWQsIHRoZSBzdGFydHVwIGNhbGxiYWNrcyBhcmUgaW52b2tlZCBzZXF1 ZW50aWFsbHkgdW50aWwKK3RoZSBzdGF0ZSBDUFVIUF9PTkxJTkUgaXMgcmVhY2hlZC4gVGhleSBj YW4gYWxzbyBiZSBpbnZva2VkIHdoZW4gdGhlCitjYWxsYmFja3Mgb2YgYSBzdGF0ZSBhcmUgc2V0 IHVwIG9yIGFuIGluc3RhbmNlIGlzIGFkZGVkIHRvIGEgbXVsdGktaW5zdGFuY2UKK3N0YXRlLgor CitXaGVuIGEgQ1BVIGlzIG9mZmxpbmVkIHRoZSB0ZWFyZG93biBjYWxsYmFja3MgYXJlIGludm9r ZWQgaW4gdGhlIHJldmVyc2UKK29yZGVyIHNlcXVlbnRpYWxseSB1bnRpbCB0aGUgc3RhdGUgQ1BV SFBfT0ZGTElORSBpcyByZWFjaGVkLiBUaGV5IGNhbiBhbHNvCitiZSBpbnZva2VkIHdoZW4gdGhl IGNhbGxiYWNrcyBvZiBhIHN0YXRlIGFyZSByZW1vdmVkIG9yIGFuIGluc3RhbmNlIGlzCityZW1v dmVkIGZyb20gYSBtdWx0aS1pbnN0YW5jZSBzdGF0ZS4KKworSWYgYSB1c2FnZSBzaXRlIHJlcXVp cmVzIG9ubHkgYSBjYWxsYmFjayBpbiBvbmUgZGlyZWN0aW9uIG9mIHRoZSBob3RwbHVnCitvcGVy YXRpb25zIChDUFUgb25saW5lIG9yIENQVSBvZmZsaW5lKSB0aGVuIHRoZSBvdGhlciBub3QtcmVx dWlyZWQgY2FsbGJhY2sKK2NhbiBiZSBzZXQgdG8gTlVMTCB3aGVuIHRoZSBzdGF0ZSBpcyBzZXQg dXAuCisKK1RoZSBzdGF0ZSBzcGFjZSBpcyBkaXZpZGVkIGludG8gdGhyZWUgc2VjdGlvbnM6CisK KyogVGhlIFBSRVBBUkUgc2VjdGlvbgorCisgIFRoZSBQUkVQQVJFIHNlY3Rpb24gY292ZXJzIHRo ZSBzdGF0ZSBzcGFjZSBmcm9tIENQVUhQX09GRkxJTkUgdG8KKyAgQ1BVSFBfQlJJTkdVUF9DUFUu CisKKyAgVGhlIHN0YXJ0dXAgY2FsbGJhY2tzIGluIHRoaXMgc2VjdGlvbiBhcmUgaW52b2tlZCBi ZWZvcmUgdGhlIENQVSBpcworICBzdGFydGVkIGR1cmluZyBhIENQVSBvbmxpbmUgb3BlcmF0aW9u LiBUaGUgdGVhcmRvd24gY2FsbGJhY2tzIGFyZSBpbnZva2VkCisgIGFmdGVyIHRoZSBDUFUgaGFz IGJlY29tZSBkeXNmdW5jdGlvbmFsIGR1cmluZyBhIENQVSBvZmZsaW5lIG9wZXJhdGlvbi4KKwor ICBUaGUgY2FsbGJhY2tzIGFyZSBpbnZva2VkIG9uIGEgY29udHJvbCBDUFUgYXMgdGhleSBjYW4n dCBvYnZpb3VzbHkgcnVuIG9uCisgIHRoZSBob3RwbHVnZ2VkIENQVSB3aGljaCBpcyBlaXRoZXIg bm90IHlldCBzdGFydGVkIG9yIGhhcyBiZWNvbWUKKyAgZHlzZnVuY3Rpb25hbCBhbHJlYWR5Lgor CisgIFRoZSBzdGFydHVwIGNhbGxiYWNrcyBhcmUgdXNlZCB0byBzZXR1cCByZXNvdXJjZXMgd2hp Y2ggYXJlIHJlcXVpcmVkIHRvCisgIGJyaW5nIGEgQ1BVIHN1Y2Nlc3NmdWxseSBvbmxpbmUuIFRo ZSB0ZWFyZG93biBjYWxsYmFja3MgYXJlIHVzZWQgdG8gZnJlZQorICByZXNvdXJjZXMgb3IgdG8g bW92ZSBwZW5kaW5nIHdvcmsgdG8gYW4gb25saW5lIENQVSBhZnRlciB0aGUgaG90cGx1Z2dlZAor ICBDUFUgYmVjYW1lIGR5c2Z1bmN0aW9uYWwuCisKKyAgVGhlIHN0YXJ0dXAgY2FsbGJhY2tzIGFy ZSBhbGxvd2VkIHRvIGZhaWwuIElmIGEgY2FsbGJhY2sgZmFpbHMsIHRoZSBDUFUKKyAgb25saW5l IG9wZXJhdGlvbiBpcyBhYm9ydGVkIGFuZCB0aGUgQ1BVIGlzIGJyb3VnaHQgZG93biB0byB0aGUg cHJldmlvdXMKKyAgc3RhdGUgKHVzdWFsbHkgQ1BVSFBfT0ZGTElORSkgYWdhaW4uCisKKyAgVGhl IHRlYXJkb3duIGNhbGxiYWNrcyBpbiB0aGlzIHNlY3Rpb24gYXJlIG5vdCBhbGxvd2VkIHRvIGZh aWwuCisKKyogVGhlIFNUQVJUSU5HIHNlY3Rpb24KKworICBUaGUgU1RBUlRJTkcgc2VjdGlvbiBj b3ZlcnMgdGhlIHN0YXRlIHNwYWNlIGJldHdlZW4gQ1BVSFBfQlJJTkdVUF9DUFUgKyAxCisgIGFu ZCBDUFVIUF9BUF9PTkxJTkUuCisKKyAgVGhlIHN0YXJ0dXAgY2FsbGJhY2tzIGluIHRoaXMgc2Vj dGlvbiBhcmUgaW52b2tlZCBvbiB0aGUgaG90cGx1Z2dlZCBDUFUKKyAgd2l0aCBpbnRlcnJ1cHRz IGRpc2FibGVkIGR1cmluZyBhIENQVSBvbmxpbmUgb3BlcmF0aW9uIGluIHRoZSBlYXJseSBDUFUK KyAgc2V0dXAgY29kZS4gVGhlIHRlYXJkb3duIGNhbGxiYWNrcyBhcmUgaW52b2tlZCB3aXRoIGlu dGVycnVwdHMgZGlzYWJsZWQKKyAgb24gdGhlIGhvdHBsdWdnZWQgQ1BVIGR1cmluZyBhIENQVSBv ZmZsaW5lIG9wZXJhdGlvbiBzaG9ydGx5IGJlZm9yZSB0aGUKKyAgQ1BVIGlzIGNvbXBsZXRlbHkg c2h1dCBkb3duLgorCisgIFRoZSBjYWxsYmFja3MgaW4gdGhpcyBzZWN0aW9uIGFyZSBub3QgYWxs b3dlZCB0byBmYWlsLgorCisgIFRoZSBjYWxsYmFja3MgYXJlIHVzZWQgZm9yIGxvdyBsZXZlbCBo YXJkd2FyZSBpbml0aWFsaXphdGlvbi9zaHV0ZG93biBhbmQKKyAgZm9yIGNvcmUgc3Vic3lzdGVt cy4KKworKiBUaGUgT05MSU5FIHNlY3Rpb24KKworICBUaGUgT05MSU5FIHNlY3Rpb24gY292ZXJz IHRoZSBzdGF0ZSBzcGFjZSBiZXR3ZWVuIENQVUhQX0FQX09OTElORSArIDEgYW5kCisgIENQVUhQ X09OTElORS4KKworICBUaGUgc3RhcnR1cCBjYWxsYmFja3MgaW4gdGhpcyBzZWN0aW9uIGFyZSBp bnZva2VkIG9uIHRoZSBob3RwbHVnZ2VkIENQVQorICBkdXJpbmcgYSBDUFUgb25saW5lIG9wZXJh dGlvbi4gVGhlIHRlYXJkb3duIGNhbGxiYWNrcyBhcmUgaW52b2tlZCBvbiB0aGUKKyAgaG90cGx1 Z2dlZCBDUFUgZHVyaW5nIGEgQ1BVIG9mZmxpbmUgb3BlcmF0aW9uLgorCisgIFRoZSBjYWxsYmFj a3MgYXJlIGludm9rZWQgaW4gdGhlIGNvbnRleHQgb2YgdGhlIHBlciBDUFUgaG90cGx1ZyB0aHJl YWQsCisgIHdoaWNoIGlzIHBpbm5lZCBvbiB0aGUgaG90cGx1Z2dlZCBDUFUuIFRoZSBjYWxsYmFj a3MgYXJlIGludm9rZWQgd2l0aAorICBpbnRlcnJ1cHRzIGFuZCBwcmVlbXB0aW9uIGVuYWJsZWQu CisKKyAgVGhlIGNhbGxiYWNrcyBhcmUgYWxsb3dlZCB0byBmYWlsLiBXaGVuIGEgY2FsbGJhY2sg ZmFpbHMgdGhlIGhvdHBsdWcKKyAgb3BlcmF0aW9uIGlzIGFib3J0ZWQgYW5kIHRoZSBDUFUgaXMg YnJvdWdodCBiYWNrIHRvIHRoZSBwcmV2aW91cyBzdGF0ZS4KKworQ1BVIG9ubGluZS9vZmZsaW5l IG9wZXJhdGlvbnMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0Egc3VjY2Vzc2Z1 bCBvbmxpbmUgb3BlcmF0aW9uIGxvb2tzIGxpa2UgdGhpczo6CisKKyAgW0NQVUhQX09GRkxJTkVd CisgIFtDUFVIUF9PRkZMSU5FICsgMV0tPnN0YXJ0dXAoKSAgICAgICAtPiBzdWNjZXNzCisgIFtD UFVIUF9PRkZMSU5FICsgMl0tPnN0YXJ0dXAoKSAgICAgICAtPiBzdWNjZXNzCisgIFtDUFVIUF9P RkZMSU5FICsgM10gICAgICAgICAgICAgICAgICAtPiBza2lwcGVkIGJlY2F1c2Ugc3RhcnR1cCA9 PSBOVUxMCisgIC4uLgorICBbQ1BVSFBfQlJJTkdVUF9DUFVdLT5zdGFydHVwKCkgICAgICAgLT4g c3VjY2VzcworICA9PT0gRW5kIG9mIFBSRVBBUkUgc2VjdGlvbgorICBbQ1BVSFBfQlJJTkdVUF9D UFUgKyAxXS0+c3RhcnR1cCgpICAgLT4gc3VjY2VzcworICAuLi4KKyAgW0NQVUhQX0FQX09OTElO RV0tPnN0YXJ0dXAoKSAgICAgICAgIC0+IHN1Y2Nlc3MKKyAgPT09IEVuZCBvZiBTVEFSVFVQIHNl Y3Rpb24KKyAgW0NQVUhQX0FQX09OTElORSArIDFdLT5zdGFydHVwKCkgICAgIC0+IHN1Y2Nlc3MK KyAgLi4uCisgIFtDUFVIUF9PTkxJTkUgLSAxXS0+c3RhcnR1cCgpICAgICAgICAtPiBzdWNjZXNz CisgIFtDUFVIUF9PTkxJTkVdCisKK0Egc3VjY2Vzc2Z1bCBvZmZsaW5lIG9wZXJhdGlvbiBsb29r cyBsaWtlIHRoaXM6OgorCisgIFtDUFVIUF9PTkxJTkVdCisgIFtDUFVIUF9PTkxJTkUgLSAxXS0+ dGVhcmRvd24oKSAgICAgICAtPiBzdWNjZXNzCisgIC4uLgorICBbQ1BVSFBfQVBfT05MSU5FICsg MV0tPnRlYXJkb3duKCkgICAgLT4gc3VjY2VzcworICA9PT0gU3RhcnQgb2YgU1RBUlRVUCBzZWN0 aW9uCisgIFtDUFVIUF9BUF9PTkxJTkVdLT50ZWFyZG93bigpICAgICAgICAtPiBzdWNjZXNzCisg IC4uLgorICBbQ1BVSFBfQlJJTkdVUF9PTkxJTkUgLSAxXS0+dGVhcmRvd24oKQorICAuLi4KKyAg PT09IFN0YXJ0IG9mIFBSRVBBUkUgc2VjdGlvbgorICBbQ1BVSFBfQlJJTkdVUF9DUFVdLT50ZWFy ZG93bigpCisgIFtDUFVIUF9PRkZMSU5FICsgM10tPnRlYXJkb3duKCkKKyAgW0NQVUhQX09GRkxJ TkUgKyAyXSAgICAgICAgICAgICAgICAgIC0+IHNraXBwZWQgYmVjYXVzZSB0ZWFyZG93biA9PSBO VUxMCisgIFtDUFVIUF9PRkZMSU5FICsgMV0tPnRlYXJkb3duKCkKKyAgW0NQVUhQX09GRkxJTkVd CisKK0EgZmFpbGVkIG9ubGluZSBvcGVyYXRpb24gbG9va3MgbGlrZSB0aGlzOjoKKworICBbQ1BV SFBfT0ZGTElORV0KKyAgW0NQVUhQX09GRkxJTkUgKyAxXS0+c3RhcnR1cCgpICAgICAgIC0+IHN1 Y2Nlc3MKKyAgW0NQVUhQX09GRkxJTkUgKyAyXS0+c3RhcnR1cCgpICAgICAgIC0+IHN1Y2Nlc3MK KyAgW0NQVUhQX09GRkxJTkUgKyAzXSAgICAgICAgICAgICAgICAgIC0+IHNraXBwZWQgYmVjYXVz ZSBzdGFydHVwID09IE5VTEwKKyAgLi4uCisgIFtDUFVIUF9CUklOR1VQX0NQVV0tPnN0YXJ0dXAo KSAgICAgICAtPiBzdWNjZXNzCisgID09PSBFbmQgb2YgUFJFUEFSRSBzZWN0aW9uCisgIFtDUFVI UF9CUklOR1VQX0NQVSArIDFdLT5zdGFydHVwKCkgICAtPiBzdWNjZXNzCisgIC4uLgorICBbQ1BV SFBfQVBfT05MSU5FXS0+c3RhcnR1cCgpICAgICAgICAgLT4gc3VjY2VzcworICA9PT0gRW5kIG9m IFNUQVJUVVAgc2VjdGlvbgorICBbQ1BVSFBfQVBfT05MSU5FICsgMV0tPnN0YXJ0dXAoKSAgICAg LT4gc3VjY2VzcworICAtLS0KKyAgW0NQVUhQX0FQX09OTElORSArIE5dLT5zdGFydHVwKCkgICAg IC0+IGZhaWwKKyAgW0NQVUhQX0FQX09OTElORSArIChOIC0gMSldLT50ZWFyZG93bigpCisgIC4u LgorICBbQ1BVSFBfQVBfT05MSU5FICsgMV0tPnRlYXJkb3duKCkKKyAgPT09IFN0YXJ0IG9mIFNU QVJUVVAgc2VjdGlvbgorICBbQ1BVSFBfQVBfT05MSU5FXS0+dGVhcmRvd24oKQorICAuLi4KKyAg W0NQVUhQX0JSSU5HVVBfT05MSU5FIC0gMV0tPnRlYXJkb3duKCkKKyAgLi4uCisgID09PSBTdGFy dCBvZiBQUkVQQVJFIHNlY3Rpb24KKyAgW0NQVUhQX0JSSU5HVVBfQ1BVXS0+dGVhcmRvd24oKQor ICBbQ1BVSFBfT0ZGTElORSArIDNdLT50ZWFyZG93bigpCisgIFtDUFVIUF9PRkZMSU5FICsgMl0g ICAgICAgICAgICAgICAgICAtPiBza2lwcGVkIGJlY2F1c2UgdGVhcmRvd24gPT0gTlVMTAorICBb Q1BVSFBfT0ZGTElORSArIDFdLT50ZWFyZG93bigpCisgIFtDUFVIUF9PRkZMSU5FXQorCitBIGZh aWxlZCBvZmZsaW5lIG9wZXJhdGlvbiBsb29rcyBsaWtlIHRoaXM6OgorCisgIFtDUFVIUF9PTkxJ TkVdCisgIFtDUFVIUF9PTkxJTkUgLSAxXS0+dGVhcmRvd24oKSAgICAgICAtPiBzdWNjZXNzCisg IC4uLgorICBbQ1BVSFBfT05MSU5FIC0gTl0tPnRlYXJkb3duKCkgICAgICAgLT4gZmFpbAorICBb Q1BVSFBfT05MSU5FIC0gKE4gLSAxKV0tPnN0YXJ0dXAoKQorICAuLi4KKyAgW0NQVUhQX09OTElO RSAtIDFdLT5zdGFydHVwKCkKKyAgW0NQVUhQX09OTElORV0KKworUmVjdXJzaXZlIGZhaWx1cmVz IGNhbm5vdCBiZSBoYW5kbGVkIHNlbnNpYmx5LiBMb29rIGF0IHRoZSBmb2xsb3dpbmcKK2V4YW1w bGUgb2YgYSByZWN1cnNpdmUgZmFpbCBkdWUgdG8gYSBmYWlsZWQgb2ZmbGluZSBvcGVyYXRpb246 IDo6CisKKyAgW0NQVUhQX09OTElORV0KKyAgW0NQVUhQX09OTElORSAtIDFdLT50ZWFyZG93bigp ICAgICAgIC0+IHN1Y2Nlc3MKKyAgLi4uCisgIFtDUFVIUF9PTkxJTkUgLSBOXS0+dGVhcmRvd24o KSAgICAgICAtPiBmYWlsCisgIFtDUFVIUF9PTkxJTkUgLSAoTiAtIDEpXS0+c3RhcnR1cCgpICAt PiBzdWNjZXNzCisgIFtDUFVIUF9PTkxJTkUgLSAoTiAtIDIpXS0+c3RhcnR1cCgpICAtPiBmYWls CisKK1RoZSBDUFUgaG90cGx1ZyBzdGF0ZSBtYWNoaW5lIHN0b3BzIHJpZ2h0IGhlcmUgYW5kIGRv ZXMgbm90IHRyeSB0byBnbyBiYWNrCitkb3duIGFnYWluIGJlY2F1c2UgdGhhdCB3b3VsZCBsaWtl bHkgcmVzdWx0IGluIGFuIGVuZGxlc3MgbG9vcDo6CisKKyAgW0NQVUhQX09OTElORSAtIChOIC0g MSldLT50ZWFyZG93bigpIC0+IHN1Y2Nlc3MKKyAgW0NQVUhQX09OTElORSAtIE5dLT50ZWFyZG93 bigpICAgICAgIC0+IGZhaWwKKyAgW0NQVUhQX09OTElORSAtIChOIC0gMSldLT5zdGFydHVwKCkg IC0+IHN1Y2Nlc3MKKyAgW0NQVUhQX09OTElORSAtIChOIC0gMildLT5zdGFydHVwKCkgIC0+IGZh aWwKKyAgW0NQVUhQX09OTElORSAtIChOIC0gMSldLT50ZWFyZG93bigpIC0+IHN1Y2Nlc3MKKyAg W0NQVUhQX09OTElORSAtIE5dLT50ZWFyZG93bigpICAgICAgIC0+IGZhaWwKKworTGF0aGVyLCBy aW5zZSBhbmQgcmVwZWF0LiBJbiB0aGlzIGNhc2UgdGhlIENQVSBsZWZ0IGluIHN0YXRlOjoKKwor ICBbQ1BVSFBfT05MSU5FIC0gKE4gLSAxKV0KKword2hpY2ggYXQgbGVhc3QgbGV0cyB0aGUgc3lz dGVtIG1ha2UgcHJvZ3Jlc3MgYW5kIGdpdmVzIHRoZSB1c2VyIGEgY2hhbmNlIHRvCitkZWJ1ZyBv ciBldmVuIHJlc29sdmUgdGhlIHNpdHVhdGlvbi4KKworQWxsb2NhdGluZyBhIHN0YXRlCistLS0t LS0tLS0tLS0tLS0tLS0KKworVGhlcmUgYXJlIHR3byB3YXlzIHRvIGFsbG9jYXRlIGEgQ1BVIGhv dHBsdWcgc3RhdGU6CisKKyogU3RhdGljIGFsbG9jYXRpb24KKworICBTdGF0aWMgYWxsb2NhdGlv biBoYXMgdG8gYmUgdXNlZCB3aGVuIHRoZSBzdWJzeXN0ZW0gb3IgZHJpdmVyIGhhcworICBvcmRl cmluZyByZXF1aXJlbWVudHMgdmVyc3VzIG90aGVyIENQVSBob3RwbHVnIHN0YXRlcy4gRS5nLiB0 aGUgUEVSRiBjb3JlCisgIHN0YXJ0dXAgY2FsbGJhY2sgaGFzIHRvIGJlIGludm9rZWQgYmVmb3Jl IHRoZSBQRVJGIGRyaXZlciBzdGFydHVwCisgIGNhbGxiYWNrcyBkdXJpbmcgYSBDUFUgb25saW5l IG9wZXJhdGlvbi4gRHVyaW5nIGEgQ1BVIG9mZmxpbmUgb3BlcmF0aW9uCisgIHRoZSBkcml2ZXIg dGVhcmRvd24gY2FsbGJhY2tzIGhhdmUgdG8gYmUgaW52b2tlZCBiZWZvcmUgdGhlIGNvcmUgdGVh cmRvd24KKyAgY2FsbGJhY2suIFRoZSBzdGF0aWNhbGx5IGFsbG9jYXRlZCBzdGF0ZXMgYXJlIGRl c2NyaWJlZCBieSBjb25zdGFudHMgaW4KKyAgdGhlIGNwdWhwX3N0YXRlIGVudW0gd2hpY2ggY2Fu IGJlIGZvdW5kIGluIGluY2x1ZGUvbGludXgvY3B1aG90cGx1Zy5oLgorCisgIEluc2VydCB0aGUg c3RhdGUgaW50byB0aGUgZW51bSBhdCB0aGUgcHJvcGVyIHBsYWNlIHNvIHRoZSBvcmRlcmluZwor ICByZXF1aXJlbWVudHMgYXJlIGZ1bGZpbGxlZC4gVGhlIHN0YXRlIGNvbnN0YW50IGhhcyB0byBi ZSB1c2VkIGZvciBzdGF0ZQorICBzZXR1cCBhbmQgcmVtb3ZhbC4KKworICBTdGF0aWMgYWxsb2Nh dGlvbiBpcyBhbHNvIHJlcXVpcmVkIHdoZW4gdGhlIHN0YXRlIGNhbGxiYWNrcyBhcmUgbm90IHNl dAorICB1cCBhdCBydW50aW1lIGFuZCBhcmUgcGFydCBvZiB0aGUgaW5pdGlhbGl6ZXIgb2YgdGhl IENQVSBob3RwbHVnIHN0YXRlCisgIGFycmF5IGluIGtlcm5lbC9jcHUuYy4KKworKiBEeW5hbWlj IGFsbG9jYXRpb24KKworICBXaGVuIHRoZXJlIGFyZSBubyBvcmRlcmluZyByZXF1aXJlbWVudHMg Zm9yIHRoZSBzdGF0ZSBjYWxsYmFja3MgdGhlbgorICBkeW5hbWljIGFsbG9jYXRpb24gaXMgdGhl IHByZWZlcnJlZCBtZXRob2QuIFRoZSBzdGF0ZSBudW1iZXIgaXMgYWxsb2NhdGVkCisgIGJ5IHRo ZSBzZXR1cCBmdW5jdGlvbiBhbmQgcmV0dXJuZWQgdG8gdGhlIGNhbGxlciBvbiBzdWNjZXNzLgor CisgIE9ubHkgdGhlIFBSRVBBUkUgYW5kIE9OTElORSBzZWN0aW9ucyBwcm92aWRlIGEgZHluYW1p YyBhbGxvY2F0aW9uCisgIHJhbmdlLiBUaGUgU1RBUlRJTkcgc2VjdGlvbiBkb2VzIG5vdCBhcyBt b3N0IG9mIHRoZSBjYWxsYmFja3MgaW4gdGhhdAorICBzZWN0aW9uIGhhdmUgZXhwbGljaXQgb3Jk ZXJpbmcgcmVxdWlyZW1lbnRzLgorCitTZXR1cCBvZiBhIENQVSBob3RwbHVnIHN0YXRlCistLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSBjb3JlIGNvZGUgcHJvdmlkZXMgdGhlIGZv bGxvd2luZyBmdW5jdGlvbnMgdG8gc2V0dXAgYSBzdGF0ZToKKworKiBjcHVocF9zZXR1cF9zdGF0 ZShzdGF0ZSwgbmFtZSwgc3RhcnR1cCwgdGVhcmRvd24pCisqIGNwdWhwX3NldHVwX3N0YXRlX25v Y2FsbHMoc3RhdGUsIG5hbWUsIHN0YXJ0dXAsIHRlYXJkb3duKQorKiBjcHVocF9zZXR1cF9zdGF0 ZV9jcHVzbG9ja2VkKHN0YXRlLCBuYW1lLCBzdGFydHVwLCB0ZWFyZG93bikKKyogY3B1aHBfc2V0 dXBfc3RhdGVfbm9jYWxsc19jcHVzbG9ja2VkKHN0YXRlLCBuYW1lLCBzdGFydHVwLCB0ZWFyZG93 bikKKworRm9yIGNhc2VzIHdoZXJlIGEgZHJpdmVyIG9yIGEgc3Vic3lzdGVtIGhhcyBtdWx0aXBs ZSBpbnN0YW5jZXMgYW5kIHRoZSBzYW1lCitDUFUgaG90cGx1ZyBzdGF0ZSBjYWxsYmFja3MgbmVl ZCB0byBiZSBpbnZva2VkIGZvciBlYWNoIGluc3RhbmNlLCB0aGUgQ1BVCitob3RwbHVnIGNvcmUg cHJvdmlkZXMgbXVsdGktaW5zdGFuY2Ugc3VwcG9ydC4gVGhlIGFkdmFudGFnZSBvdmVyIGRyaXZl cgorc3BlY2lmaWMgaW5zdGFuY2UgbGlzdHMgaXMgdGhhdCB0aGUgaW5zdGFuY2UgcmVsYXRlZCBm dW5jdGlvbnMgYXJlIGZ1bGx5CitzZXJpYWxpemVkIGFnYWluc3QgQ1BVIGhvdHBsdWcgb3BlcmF0 aW9ucyBhbmQgcHJvdmlkZSB0aGUgYXV0b21hdGljCitpbnZvY2F0aW9ucyBvZiB0aGUgc3RhdGUg Y2FsbGJhY2tzIG9uIGFkZCBhbmQgcmVtb3ZhbC4gVG8gc2V0IHVwIHN1Y2ggYQorbXVsdGktaW5z dGFuY2Ugc3RhdGUgdGhlIGZvbGxvd2luZyBmdW5jdGlvbiBpcyBhdmFpbGFibGU6CisKKyogY3B1 aHBfc2V0dXBfc3RhdGVfbXVsdGkoc3RhdGUsIG5hbWUsIHN0YXJ0dXAsIHRlYXJkb3duKQorCitU aGUgQHN0YXRlIGFyZ3VtZW50IGlzIGVpdGhlciBhIHN0YXRpY2FsbHkgYWxsb2NhdGVkIHN0YXRl IG9yIG9uZSBvZiB0aGUKK2NvbnN0YW50cyBmb3IgZHluYW1pY2FsbHkgYWxsb2NhdGVkIHN0YXRl cyAtIENQVUhQX1BSRVBBUkVfRFlOLAorQ1BVSFBfT05MSU5FX0RZTiAtIGRlcGVuZGluZyBvbiB0 aGUgc3RhdGUgc2VjdGlvbiAoUFJFUEFSRSwgT05MSU5FKSBmb3IKK3doaWNoIGEgZHluYW1pYyBz dGF0ZSBzaG91bGQgYmUgYWxsb2NhdGVkLgorCitUaGUgQG5hbWUgYXJndW1lbnQgaXMgdXNlZCBm b3Igc3lzZnMgb3V0cHV0IGFuZCBmb3IgaW5zdHJ1bWVudGF0aW9uLiBUaGUKK25hbWluZyBjb252 ZW50aW9uIGlzICJzdWJzeXM6bW9kZSIgb3IgInN1YnN5cy9kcml2ZXI6bW9kZSIsCitlLmcuICJw ZXJmOm1vZGUiIG9yICJwZXJmL3g4Njptb2RlIi4gVGhlIGNvbW1vbiBtb2RlIG5hbWVzIGFyZToK KworPT09PT09PT0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PQorcHJlcGFyZSAgRm9yIHN0YXRlcyBpbiB0aGUgUFJFUEFSRSBzZWN0aW9uCisK K2RlYWQgICAgIEZvciBzdGF0ZXMgaW4gdGhlIFBSRVBBUkUgc2VjdGlvbiB3aGljaCBkbyBub3Qg cHJvdmlkZQorICAgICAgICAgYSBzdGFydHVwIGNhbGxiYWNrCisKK3N0YXJ0aW5nIEZvciBzdGF0 ZXMgaW4gdGhlIFNUQVJUSU5HIHNlY3Rpb24KKworZHlpbmcgICAgRm9yIHN0YXRlcyBpbiB0aGUg U1RBUlRJTkcgc2VjdGlvbiB3aGljaCBkbyBub3QgcHJvdmlkZQorICAgICAgICAgYSBzdGFydHVw IGNhbGxiYWNrCisKK29ubGluZSAgIEZvciBzdGF0ZXMgaW4gdGhlIE9OTElORSBzZWN0aW9uCisK K29mZmxpbmUgIEZvciBzdGF0ZXMgaW4gdGhlIE9OTElORSBzZWN0aW9uIHdoaWNoIGRvIG5vdCBw cm92aWRlCisgICAgICAgICBhIHN0YXJ0dXAgY2FsbGJhY2sKKz09PT09PT09ID09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworQXMgdGhlIEBu YW1lIGFyZ3VtZW50IGlzIG9ubHkgdXNlZCBmb3Igc3lzZnMgYW5kIGluc3RydW1lbnRhdGlvbiBv dGhlciBtb2RlCitkZXNjcmlwdG9ycyBjYW4gYmUgdXNlZCBhcyB3ZWxsIGlmIHRoZXkgZGVzY3Jp YmUgdGhlIG5hdHVyZSBvZiB0aGUgc3RhdGUKK2JldHRlciB0aGFuIHRoZSBjb21tb24gb25lcy4K KworRXhhbXBsZXMgZm9yIEBuYW1lIGFyZ3VtZW50czogInBlcmYvb25saW5lIiwgInBlcmYveDg2 OnByZXBhcmUiLAorIlJDVS90cmVlOmR5aW5nIiwgInNjaGVkL3dhaXRlbXB0eSIKKworVGhlIEBz dGFydHVwIGFyZ3VtZW50IGlzIGEgZnVuY3Rpb24gcG9pbnRlciB0byB0aGUgY2FsbGJhY2sgd2hp Y2ggc2hvdWxkIGJlCitpbnZva2VkIGR1cmluZyBhIENQVSBvbmxpbmUgb3BlcmF0aW9uLiBJZiB0 aGUgdXNhZ2Ugc2l0ZSBkb2VzIG5vdCByZXF1aXJlIGEKK3N0YXJ0dXAgY2FsbGJhY2sgc2V0IHRo ZSBwb2ludGVyIHRvIE5VTEwuCisKK1RoZSBAdGVhcmRvd24gYXJndW1lbnQgaXMgYSBmdW5jdGlv biBwb2ludGVyIHRvIHRoZSBjYWxsYmFjayB3aGljaCBzaG91bGQKK2JlIGludm9rZWQgZHVyaW5n IGEgQ1BVIG9mZmxpbmUgb3BlcmF0aW9uLiBJZiB0aGUgdXNhZ2Ugc2l0ZSBkb2VzIG5vdAorcmVx dWlyZSBhIHRlYXJkb3duIGNhbGxiYWNrIHNldCB0aGUgcG9pbnRlciB0byBOVUxMLgorCitUaGUg ZnVuY3Rpb25zIGRpZmZlciBpbiB0aGUgd2F5IGhvdyB0aGUgaW5zdGFsbGVkIGNhbGxiYWNrcyBh cmUgdHJlYXRlZDoKKworICAqIGNwdWhwX3NldHVwX3N0YXRlX25vY2FsbHMoKSwgY3B1aHBfc2V0 dXBfc3RhdGVfbm9jYWxsc19jcHVzbG9ja2VkKCkKKyAgICBhbmQgY3B1aHBfc2V0dXBfc3RhdGVf bXVsdGkoKSBvbmx5IGluc3RhbGwgdGhlIGNhbGxiYWNrcworCisgICogY3B1aHBfc2V0dXBfc3Rh dGUoKSBhbmQgY3B1aHBfc2V0dXBfc3RhdGVfY3B1c2xvY2tlZCgpIGluc3RhbGwgdGhlCisgICAg Y2FsbGJhY2tzIGFuZCBpbnZva2UgdGhlIEBzdGFydHVwIGNhbGxiYWNrIChpZiBub3QgTlVMTCkg Zm9yIGFsbCBvbmxpbmUKKyAgICBDUFVzIHdoaWNoIGhhdmUgY3VycmVudGx5IGEgc3RhdGUgZ3Jl YXRlciB0aGFuIHRoZSBuZXdseSBpbnN0YWxsZWQKKyAgICBzdGF0ZS4gRGVwZW5kaW5nIG9uIHRo ZSBzdGF0ZSBzZWN0aW9uIHRoZSBjYWxsYmFjayBpcyBlaXRoZXIgaW52b2tlZCBvbgorICAgIHRo ZSBjdXJyZW50IENQVSAoUFJFUEFSRSBzZWN0aW9uKSBvciBvbiBlYWNoIG9ubGluZSBDUFUgKE9O TElORQorICAgIHNlY3Rpb24pIGluIHRoZSBjb250ZXh0IG9mIHRoZSBDUFUncyBob3RwbHVnIHRo cmVhZC4KKworICAgIElmIGEgY2FsbGJhY2sgZmFpbHMgZm9yIENQVSBOIHRoZW4gdGhlIHRlYXJk b3duIGNhbGxiYWNrIGZvciBDUFUKKyAgICAwIC4uIE4tMSBpcyBpbnZva2VkIHRvIHJvbGxiYWNr IHRoZSBvcGVyYXRpb24uIFRoZSBzdGF0ZSBzZXR1cCBmYWlscywKKyAgICB0aGUgY2FsbGJhY2tz IGZvciB0aGUgc3RhdGUgYXJlIG5vdCBpbnN0YWxsZWQgYW5kIGluIGNhc2Ugb2YgZHluYW1pYwor ICAgIGFsbG9jYXRpb24gdGhlIGFsbG9jYXRlZCBzdGF0ZSBpcyBmcmVlZC4KKworVGhlIHN0YXRl IHNldHVwIGFuZCB0aGUgY2FsbGJhY2sgaW52b2NhdGlvbnMgYXJlIHNlcmlhbGl6ZWQgYWdhaW5z dCBDUFUKK2hvdHBsdWcgb3BlcmF0aW9ucy4gSWYgdGhlIHNldHVwIGZ1bmN0aW9uIGhhcyB0byBi ZSBjYWxsZWQgZnJvbSBhIENQVQoraG90cGx1ZyByZWFkIGxvY2tlZCByZWdpb24sIHRoZW4gdGhl IF9jcHVzbG9ja2VkKCkgdmFyaWFudHMgaGF2ZSB0byBiZQordXNlZC4gVGhlc2UgZnVuY3Rpb25z IGNhbm5vdCBiZSB1c2VkIGZyb20gd2l0aGluIENQVSBob3RwbHVnIGNhbGxiYWNrcy4KKworVGhl IGZ1bmN0aW9uIHJldHVybiB2YWx1ZXM6CisgID09PT09PT09ID09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgMCAgICAg ICAgU3RhdGljYWxseSBhbGxvY2F0ZWQgc3RhdGUgd2FzIHN1Y2Nlc3NmdWxseSBzZXQgdXAKKwor ICA+MCAgICAgICBEeW5hbWljYWxseSBhbGxvY2F0ZWQgc3RhdGUgd2FzIHN1Y2Nlc3NmdWxseSBz ZXQgdXAuCisKKyAgICAgICAgICAgVGhlIHJldHVybmVkIG51bWJlciBpcyB0aGUgc3RhdGUgbnVt YmVyIHdoaWNoIHdhcyBhbGxvY2F0ZWQuIElmCisgICAgICAgICAgIHRoZSBzdGF0ZSBjYWxsYmFj a3MgaGF2ZSB0byBiZSByZW1vdmVkIGxhdGVyLCBlLmcuIG1vZHVsZQorICAgICAgICAgICByZW1v dmFsLCB0aGVuIHRoaXMgbnVtYmVyIGhhcyB0byBiZSBzYXZlZCBieSB0aGUgY2FsbGVyIGFuZCB1 c2VkCisgICAgICAgICAgIGFzIEBzdGF0ZSBhcmd1bWVudCBmb3IgdGhlIHN0YXRlIHJlbW92ZSBm dW5jdGlvbi4gRm9yCisgICAgICAgICAgIG11bHRpLWluc3RhbmNlIHN0YXRlcyB0aGUgZHluYW1p Y2FsbHkgYWxsb2NhdGVkIHN0YXRlIG51bWJlciBpcworICAgICAgICAgICBhbHNvIHJlcXVpcmVk IGFzIEBzdGF0ZSBhcmd1bWVudCBmb3IgdGhlIGluc3RhbmNlIGFkZC9yZW1vdmUKKyAgICAgICAg ICAgb3BlcmF0aW9ucy4KKworICA8MAkgICBPcGVyYXRpb24gZmFpbGVkCisgID09PT09PT09ID09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT0KKworUmVtb3ZhbCBvZiBhIENQVSBob3RwbHVnIHN0YXRlCistLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0KKworVG8gcmVtb3ZlIGEgcHJldmlvdXNseSBzZXQgdXAgc3RhdGUs IHRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zIGFyZSBwcm92aWRlZDoKKworKiBjcHVocF9yZW1vdmVf c3RhdGUoc3RhdGUpCisqIGNwdWhwX3JlbW92ZV9zdGF0ZV9ub2NhbGxzKHN0YXRlKQorKiBjcHVo cF9yZW1vdmVfc3RhdGVfbm9jYWxsc19jcHVzbG9ja2VkKHN0YXRlKQorKiBjcHVocF9yZW1vdmVf bXVsdGlfc3RhdGUoc3RhdGUpCisKK1RoZSBAc3RhdGUgYXJndW1lbnQgaXMgZWl0aGVyIGEgc3Rh dGljYWxseSBhbGxvY2F0ZWQgc3RhdGUgb3IgdGhlIHN0YXRlCitudW1iZXIgd2hpY2ggd2FzIGFs bG9jYXRlZCBpbiB0aGUgZHluYW1pYyByYW5nZSBieSBjcHVocF9zZXR1cF9zdGF0ZSooKS4gSWYK K3RoZSBzdGF0ZSBpcyBpbiB0aGUgZHluYW1pYyByYW5nZSwgdGhlbiB0aGUgc3RhdGUgbnVtYmVy IGlzIGZyZWVkIGFuZAorYXZhaWxhYmxlIGZvciBkeW5hbWljIGFsbG9jYXRpb24gYWdhaW4uCisK K1RoZSBmdW5jdGlvbnMgZGlmZmVyIGluIHRoZSB3YXkgaG93IHRoZSBpbnN0YWxsZWQgY2FsbGJh Y2tzIGFyZSB0cmVhdGVkOgorCisgICogY3B1aHBfcmVtb3ZlX3N0YXRlX25vY2FsbHMoKSwgY3B1 aHBfcmVtb3ZlX3N0YXRlX25vY2FsbHNfY3B1c2xvY2tlZCgpCisgICAgYW5kIGNwdWhwX3JlbW92 ZV9tdWx0aV9zdGF0ZSgpIG9ubHkgcmVtb3ZlIHRoZSBjYWxsYmFja3MuCisKKyAgKiBjcHVocF9y ZW1vdmVfc3RhdGUoKSByZW1vdmVzIHRoZSBjYWxsYmFja3MgYW5kIGludm9rZXMgdGhlIHRlYXJk b3duCisgICAgY2FsbGJhY2sgKGlmIG5vdCBOVUxMKSBmb3IgYWxsIG9ubGluZSBDUFVzIHdoaWNo IGhhdmUgY3VycmVudGx5IGEgc3RhdGUKKyAgICBncmVhdGVyIHRoYW4gdGhlIHJlbW92ZWQgc3Rh dGUuIERlcGVuZGluZyBvbiB0aGUgc3RhdGUgc2VjdGlvbiB0aGUKKyAgICBjYWxsYmFjayBpcyBl aXRoZXIgaW52b2tlZCBvbiB0aGUgY3VycmVudCBDUFUgKFBSRVBBUkUgc2VjdGlvbikgb3Igb24K KyAgICBlYWNoIG9ubGluZSBDUFUgKE9OTElORSBzZWN0aW9uKSBpbiB0aGUgY29udGV4dCBvZiB0 aGUgQ1BVJ3MgaG90cGx1ZworICAgIHRocmVhZC4KKworICAgIEluIG9yZGVyIHRvIGNvbXBsZXRl IHRoZSByZW1vdmFsLCB0aGUgdGVhcmRvd24gY2FsbGJhY2sgc2hvdWxkIG5vdCBmYWlsLgorCitU aGUgc3RhdGUgcmVtb3ZhbCBhbmQgdGhlIGNhbGxiYWNrIGludm9jYXRpb25zIGFyZSBzZXJpYWxp emVkIGFnYWluc3QgQ1BVCitob3RwbHVnIG9wZXJhdGlvbnMuIElmIHRoZSByZW1vdmUgZnVuY3Rp b24gaGFzIHRvIGJlIGNhbGxlZCBmcm9tIGEgQ1BVCitob3RwbHVnIHJlYWQgbG9ja2VkIHJlZ2lv biwgdGhlbiB0aGUgX2NwdXNsb2NrZWQoKSB2YXJpYW50cyBoYXZlIHRvIGJlCit1c2VkLiBUaGVz ZSBmdW5jdGlvbnMgY2Fubm90IGJlIHVzZWQgZnJvbSB3aXRoaW4gQ1BVIGhvdHBsdWcgY2FsbGJh Y2tzLgorCitJZiBhIG11bHRpLWluc3RhbmNlIHN0YXRlIGlzIHJlbW92ZWQgdGhlbiB0aGUgY2Fs bGVyIGhhcyB0byByZW1vdmUgYWxsCitpbnN0YW5jZXMgZmlyc3QuCisKK011bHRpLUluc3RhbmNl IHN0YXRlIGluc3RhbmNlIG1hbmFnZW1lbnQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0KKworT25jZSB0aGUgbXVsdGktaW5zdGFuY2Ugc3RhdGUgaXMgc2V0IHVwLCBp bnN0YW5jZXMgY2FuIGJlIGFkZGVkIHRvIHRoZQorc3RhdGU6CisKKyAgKiBjcHVocF9zdGF0ZV9h ZGRfaW5zdGFuY2Uoc3RhdGUsIG5vZGUpCisgICogY3B1aHBfc3RhdGVfYWRkX2luc3RhbmNlX25v Y2FsbHMoc3RhdGUsIG5vZGUpCisKK1RoZSBAc3RhdGUgYXJndW1lbnQgaXMgZWl0aGVyIGEgc3Rh dGljYWxseSBhbGxvY2F0ZWQgc3RhdGUgb3IgdGhlIHN0YXRlCitudW1iZXIgd2hpY2ggd2FzIGFs bG9jYXRlZCBpbiB0aGUgZHluYW1pYyByYW5nZSBieSBjcHVocF9zZXR1cF9zdGF0ZV9tdWx0aSgp LgorCitUaGUgQG5vZGUgYXJndW1lbnQgaXMgYSBwb2ludGVyIHRvIGFuIGhsaXN0X25vZGUgd2hp Y2ggaXMgZW1iZWRkZWQgaW4gdGhlCitpbnN0YW5jZSdzIGRhdGEgc3RydWN0dXJlLiBUaGUgcG9p bnRlciBpcyBoYW5kZWQgdG8gdGhlIG11bHRpLWluc3RhbmNlCitzdGF0ZSBjYWxsYmFja3MgYW5k IGNhbiBiZSB1c2VkIGJ5IHRoZSBjYWxsYmFjayB0byByZXRyaWV2ZSB0aGUgaW5zdGFuY2UKK3Zp YSBjb250YWluZXJfb2YoKS4KKworVGhlIGZ1bmN0aW9ucyBkaWZmZXIgaW4gdGhlIHdheSBob3cg dGhlIGluc3RhbGxlZCBjYWxsYmFja3MgYXJlIHRyZWF0ZWQ6CisKKyAgKiBjcHVocF9zdGF0ZV9h ZGRfaW5zdGFuY2Vfbm9jYWxscygpIGFuZCBvbmx5IGFkZHMgdGhlIGluc3RhbmNlIHRvIHRoZQor ICAgIG11bHRpLWluc3RhbmNlIHN0YXRlJ3Mgbm9kZSBsaXN0LgorCisgICogY3B1aHBfc3RhdGVf YWRkX2luc3RhbmNlKCkgYWRkcyB0aGUgaW5zdGFuY2UgYW5kIGludm9rZXMgdGhlIHN0YXJ0dXAK KyAgICBjYWxsYmFjayAoaWYgbm90IE5VTEwpIGFzc29jaWF0ZWQgd2l0aCBAc3RhdGUgZm9yIGFs bCBvbmxpbmUgQ1BVcyB3aGljaAorICAgIGhhdmUgY3VycmVudGx5IGEgc3RhdGUgZ3JlYXRlciB0 aGFuIEBzdGF0ZS4gVGhlIGNhbGxiYWNrIGlzIG9ubHkKKyAgICBpbnZva2VkIGZvciB0aGUgdG8g YmUgYWRkZWQgaW5zdGFuY2UuIERlcGVuZGluZyBvbiB0aGUgc3RhdGUgc2VjdGlvbgorICAgIHRo ZSBjYWxsYmFjayBpcyBlaXRoZXIgaW52b2tlZCBvbiB0aGUgY3VycmVudCBDUFUgKFBSRVBBUkUg c2VjdGlvbikgb3IKKyAgICBvbiBlYWNoIG9ubGluZSBDUFUgKE9OTElORSBzZWN0aW9uKSBpbiB0 aGUgY29udGV4dCBvZiB0aGUgQ1BVJ3MgaG90cGx1ZworICAgIHRocmVhZC4KKworICAgIElmIGEg Y2FsbGJhY2sgZmFpbHMgZm9yIENQVSBOIHRoZW4gdGhlIHRlYXJkb3duIGNhbGxiYWNrIGZvciBD UFUKKyAgICAwIC4uIE4tMSBpcyBpbnZva2VkIHRvIHJvbGxiYWNrIHRoZSBvcGVyYXRpb24sIHRo ZSBmdW5jdGlvbiBmYWlscyBhbmQKKyAgICB0aGUgaW5zdGFuY2UgaXMgbm90IGFkZGVkIHRvIHRo ZSBub2RlIGxpc3Qgb2YgdGhlIG11bHRpLWluc3RhbmNlIHN0YXRlLgorCitUbyByZW1vdmUgYW4g aW5zdGFuY2UgZnJvbSB0aGUgc3RhdGUncyBub2RlIGxpc3QgdGhlc2UgZnVuY3Rpb25zIGFyZQor YXZhaWxhYmxlOgorCisgICogY3B1aHBfc3RhdGVfcmVtb3ZlX2luc3RhbmNlKHN0YXRlLCBub2Rl KQorICAqIGNwdWhwX3N0YXRlX3JlbW92ZV9pbnN0YW5jZV9ub2NhbGxzKHN0YXRlLCBub2RlKQor CitUaGUgYXJndW1lbnRzIGFyZSB0aGUgc2FtZSBhcyBmb3IgdGhlIHRoZSBjcHVocF9zdGF0ZV9h ZGRfaW5zdGFuY2UqKCkKK3ZhcmlhbnRzIGFib3ZlLgorCitUaGUgZnVuY3Rpb25zIGRpZmZlciBp biB0aGUgd2F5IGhvdyB0aGUgaW5zdGFsbGVkIGNhbGxiYWNrcyBhcmUgdHJlYXRlZDoKKworICAq IGNwdWhwX3N0YXRlX3JlbW92ZV9pbnN0YW5jZV9ub2NhbGxzKCkgb25seSByZW1vdmVzIHRoZSBp bnN0YW5jZSBmcm9tIHRoZQorICAgIHN0YXRlJ3Mgbm9kZSBsaXN0LgorCisgICogY3B1aHBfc3Rh dGVfcmVtb3ZlX2luc3RhbmNlKCkgcmVtb3ZlcyB0aGUgaW5zdGFuY2UgYW5kIGludm9rZXMgdGhl CisgICAgdGVhcmRvd24gY2FsbGJhY2sgKGlmIG5vdCBOVUxMKSBhc3NvY2lhdGVkIHdpdGggQHN0 YXRlIGZvciBhbGwgb25saW5lCisgICAgQ1BVcyB3aGljaCBoYXZlIGN1cnJlbnRseSBhIHN0YXRl IGdyZWF0ZXIgdGhhbiBAc3RhdGUuICBUaGUgY2FsbGJhY2sgaXMKKyAgICBvbmx5IGludm9rZWQg Zm9yIHRoZSB0byBiZSByZW1vdmVkIGluc3RhbmNlLiAgRGVwZW5kaW5nIG9uIHRoZSBzdGF0ZQor ICAgIHNlY3Rpb24gdGhlIGNhbGxiYWNrIGlzIGVpdGhlciBpbnZva2VkIG9uIHRoZSBjdXJyZW50 IENQVSAoUFJFUEFSRQorICAgIHNlY3Rpb24pIG9yIG9uIGVhY2ggb25saW5lIENQVSAoT05MSU5F IHNlY3Rpb24pIGluIHRoZSBjb250ZXh0IG9mIHRoZQorICAgIENQVSdzIGhvdHBsdWcgdGhyZWFk LgorCisgICAgSW4gb3JkZXIgdG8gY29tcGxldGUgdGhlIHJlbW92YWwsIHRoZSB0ZWFyZG93biBj YWxsYmFjayBzaG91bGQgbm90IGZhaWwuCisKK1RoZSBub2RlIGxpc3QgYWRkL3JlbW92ZSBvcGVy YXRpb25zIGFuZCB0aGUgY2FsbGJhY2sgaW52b2NhdGlvbnMgYXJlCitzZXJpYWxpemVkIGFnYWlu c3QgQ1BVIGhvdHBsdWcgb3BlcmF0aW9ucy4gVGhlc2UgZnVuY3Rpb25zIGNhbm5vdCBiZSB1c2Vk Citmcm9tIHdpdGhpbiBDUFUgaG90cGx1ZyBjYWxsYmFja3MgYW5kIENQVSBob3RwbHVnIHJlYWQg bG9ja2VkIHJlZ2lvbnMuCisKK0V4YW1wbGVzCistLS0tLS0tLQorCitTZXR1cCBhbmQgdGVhcmRv d24gYSBzdGF0aWNhbGx5IGFsbG9jYXRlZCBzdGF0ZSBpbiB0aGUgU1RBUlRJTkcgc2VjdGlvbiBm b3IKK25vdGlmaWNhdGlvbnMgb24gb25saW5lIGFuZCBvZmZsaW5lIG9wZXJhdGlvbnM6OgorCisg ICByZXQgPSBjcHVocF9zZXR1cF9zdGF0ZShDUFVIUF9TVUJTWVNfU1RBUlRJTkcsICJzdWJzeXM6 c3RhcnRpbmciLCBzdWJzeXNfY3B1X3N0YXJ0aW5nLCBzdWJzeXNfY3B1X2R5aW5nKTsKKyAgIGlm IChyZXQgPCAwKQorICAgICAgICByZXR1cm4gcmV0OworICAgLi4uLgorICAgY3B1aHBfcmVtb3Zl X3N0YXRlKENQVUhQX1NVQlNZU19TVEFSVElORyk7CisKK1NldHVwIGFuZCB0ZWFyZG93biBhIGR5 bmFtaWNhbGx5IGFsbG9jYXRlZCBzdGF0ZSBpbiB0aGUgT05MSU5FIHNlY3Rpb24KK2ZvciBub3Rp ZmljYXRpb25zIG9uIG9mZmxpbmUgb3BlcmF0aW9uczo6CisKKyAgIHN0YXRlID0gY3B1aHBfc2V0 dXBfc3RhdGUoQ1BVSFBfT05MSU5FX0RZTiwgInN1YnN5czpvZmZsaW5lIiwgTlVMTCwgc3Vic3lz X2NwdV9vZmZsaW5lKTsKKyAgIGlmIChzdGF0ZSA8IDApCisgICAgICAgcmV0dXJuIHN0YXRlOwor ICAgLi4uLgorICAgY3B1aHBfcmVtb3ZlX3N0YXRlKHN0YXRlKTsKKworU2V0dXAgYW5kIHRlYXJk b3duIGEgZHluYW1pY2FsbHkgYWxsb2NhdGVkIHN0YXRlIGluIHRoZSBPTkxJTkUgc2VjdGlvbgor Zm9yIG5vdGlmaWNhdGlvbnMgb24gb25saW5lIG9wZXJhdGlvbnMgd2l0aG91dCBpbnZva2luZyB0 aGUgY2FsbGJhY2tzOjoKKworICAgc3RhdGUgPSBjcHVocF9zZXR1cF9zdGF0ZV9ub2NhbGxzKENQ VUhQX09OTElORV9EWU4sICJzdWJzeXM6b25saW5lIiwgc3Vic3lzX2NwdV9vbmxpbmUsIE5VTEwp OworICAgaWYgKHN0YXRlIDwgMCkKKyAgICAgICByZXR1cm4gc3RhdGU7CisgICAuLi4uCisgICBj cHVocF9yZW1vdmVfc3RhdGVfbm9jYWxscyhzdGF0ZSk7CisKK1NldHVwLCB1c2UgYW5kIHRlYXJk b3duIGEgZHluYW1pY2FsbHkgYWxsb2NhdGVkIG11bHRpLWluc3RhbmNlIHN0YXRlIGluIHRoZQor T05MSU5FIHNlY3Rpb24gZm9yIG5vdGlmaWNhdGlvbnMgb24gb25saW5lIGFuZCBvZmZsaW5lIG9w ZXJhdGlvbjo6CisKKyAgIHN0YXRlID0gY3B1aHBfc2V0dXBfc3RhdGVfbXVsdGkoQ1BVSFBfT05M SU5FX0RZTiwgInN1YnN5czpvbmxpbmUiLCBzdWJzeXNfY3B1X29ubGluZSwgc3Vic3lzX2NwdV9v ZmZsaW5lKTsKKyAgIGlmIChzdGF0ZSA8IDApCisgICAgICAgcmV0dXJuIHN0YXRlOworICAgLi4u LgorICAgcmV0ID0gY3B1aHBfc3RhdGVfYWRkX2luc3RhbmNlKHN0YXRlLCAmaW5zdDEtPm5vZGUp OworICAgaWYgKHJldCkKKyAgICAgICAgcmV0dXJuIHJldDsKKyAgIC4uLi4KKyAgIHJldCA9IGNw dWhwX3N0YXRlX2FkZF9pbnN0YW5jZShzdGF0ZSwgJmluc3QyLT5ub2RlKTsKKyAgIGlmIChyZXQp CisgICAgICAgIHJldHVybiByZXQ7CisgICAuLi4uCisgICBjcHVocF9yZW1vdmVfaW5zdGFuY2Uo c3RhdGUsICZpbnN0MS0+bm9kZSk7CisgICAuLi4uCisgICBjcHVocF9yZW1vdmVfaW5zdGFuY2Uo c3RhdGUsICZpbnN0Mi0+bm9kZSk7CisgICAuLi4uCisgICByZW1vdmVfbXVsdGlfc3RhdGUoc3Rh dGUpOworCiAKIFRlc3Rpbmcgb2YgaG90cGx1ZyBzdGF0ZXMKID09PT09PT09PT09PT09PT09PT09 PT09PT0KLS0tIGEvaW5jbHVkZS9saW51eC9jcHVob3RwbHVnLmgKKysrIGIvaW5jbHVkZS9saW51 eC9jcHVob3RwbHVnLmgKQEAgLTIyLDggKzIyLDQyIEBACiAgKiAgICAgICAgICAgICAgQVBfQUNU SVZFCQkJQVBfQUNUSVZFCiAgKi8KIAorLyoKKyAqIENQVSBob3RwbHVnIHN0YXRlcy4gVGhlIHN0 YXRlIG1hY2hpbmUgaW52b2tlcyB0aGUgaW5zdGFsbGVkIHN0YXRlCisgKiBzdGFydHVwIGNhbGxi YWNrcyBzZXF1ZW50aWFsbHkgZnJvbSBDUFVIUF9PRkZMSU5FICsgMSB0byBDUFVIUF9PTkxJTkUK KyAqIGR1cmluZyBhIENQVSBvbmxpbmUgb3BlcmF0aW9uLiBEdXJpbmcgYSBDUFUgb2ZmbGluZSBv cGVyYXRpb24gdGhlCisgKiBpbnN0YWxsZWQgdGVhcmRvd24gY2FsbGJhY2tzIGFyZSBpbnZva2Vk IGluIHRoZSByZXZlcnNlIG9yZGVyIGZyb20KKyAqIENQVV9PTkxJTkUgLSAxIGRvd24gdG8gQ1BV SFBfT0ZGTElORS4KKyAqCisgKiBUaGUgc3RhdGUgc3BhY2UgaGFzIHRocmVlIHNlY3Rpb25zOiBQ UkVQQVJFLCBTVEFSVElORyBhbmQgT05MSU5FLgorICoKKyAqIFBSRVBBUkU6IFRoZSBjYWxsYmFj a3MgYXJlIGludm9rZWQgb24gYSBjb250cm9sIENQVSBiZWZvcmUgdGhlCisgKiBob3RwbHVnZ2Vk IENQVSBpcyBzdGFydGVkIHVwIG9yIGFmdGVyIHRoZSBob3RwbHVnZ2VkIENQVSBoYXMgZGllZC4K KyAqCisgKiBTVEFSVElORzogVGhlIGNhbGxiYWNrcyBhcmUgaW52b2tlZCBvbiB0aGUgaG90cGx1 Z2dlZCBDUFUgZnJvbSB0aGUgbG93IGxldmVsCisgKiBob3RwbHVnIHN0YXJ0dXAvdGVhcmRvd24g Y29kZSB3aXRoIGludGVycnVwdHMgZGlzYWJsZWQuCisgKgorICogT05MSU5FOiBUaGUgY2FsbGJh Y2tzIGFyZSBpbnZva2VkIG9uIHRoZSBob3RwbHVnZ2VkIENQVSBmcm9tIHRoZSBwZXIgQ1BVCisg KiBob3RwbHVnIHRocmVhZCB3aXRoIGludGVycnVwdHMgYW5kIHByZWVtcHRpb24gZW5hYmxlZC4K KyAqCisgKiBBZGRpbmcgZXhwbGljaXQgc3RhdGVzIHRvIHRoaXMgZW51bSBpcyBvbmx5IG5lY2Vz c2FyeSB3aGVuOgorICoKKyAqIDEpIFRoZSBzdGF0ZSBpcyB3aXRoaW4gdGhlIFNUQVJUSU5HIHNl Y3Rpb24KKyAqCisgKiAyKSBUaGUgc3RhdGUgaGFzIG9yZGVyaW5nIGNvbnN0cmFpbnRzIHZzLiBv dGhlciBzdGF0ZXMgaW4gdGhlCisgKiAgICBzYW1lIHNlY3Rpb24uCisgKgorICogSWYgbmVpdGhl ciAjMSBub3IgIzIgYXBwbHksIHBsZWFzZSB1c2UgdGhlIGR5bmFtaWMgc3RhdGUgc3BhY2Ugd2hl bgorICogc2V0dGluZyB1cCBhIHN0YXRlIGJ5IHVzaW5nIENQVUhQX1BSRVBBUkVfRFlOIG9yIENQ VUhQX1BSRVBBUkVfT05MSU5FCisgKiBmb3IgdGhlIEBzdGF0ZSBhcmd1bWVudCBvZiB0aGUgc2V0 dXAgZnVuY3Rpb24uCisgKgorICogU2VlIERvY3VtZW50YXRpb24vY29yZS1hcGkvY3B1X2hvdHBs dWcucnN0IGZvciBmdXJ0aGVyIGluZm9ybWF0aW9uIGFuZAorICogZXhhbXBsZXMuCisgKi8KIGVu dW0gY3B1aHBfc3RhdGUgewogCUNQVUhQX0lOVkFMSUQgPSAtMSwKKworCS8qIFBSRVBBUkUgc2Vj dGlvbiBpbnZva2VkIG9uIGEgY29udHJvbCBDUFUgKi8KIAlDUFVIUF9PRkZMSU5FID0gMCwKIAlD UFVIUF9DUkVBVEVfVEhSRUFEUywKIAlDUFVIUF9QRVJGX1BSRVBBUkUsCkBAIC05NSw2ICsxMjks MTEgQEAgZW51bSBjcHVocF9zdGF0ZSB7CiAJQ1BVSFBfQlBfUFJFUEFSRV9EWU4sCiAJQ1BVSFBf QlBfUFJFUEFSRV9EWU5fRU5ECQk9IENQVUhQX0JQX1BSRVBBUkVfRFlOICsgMjAsCiAJQ1BVSFBf QlJJTkdVUF9DUFUsCisKKwkvKgorCSAqIFNUQVJUSU5HIHNlY3Rpb24gaW52b2tlZCBvbiB0aGUg aG90cGx1Z2dlZCBDUFUgaW4gbG93IGxldmVsCisJICogYnJpbmd1cCBhbmQgdGVhcmRvd24gY29k ZS4KKwkgKi8KIAlDUFVIUF9BUF9JRExFX0RFQUQsCiAJQ1BVSFBfQVBfT0ZGTElORSwKIAlDUFVI UF9BUF9TQ0hFRF9TVEFSVElORywKQEAgLTE1NSw2ICsxOTQsOCBAQCBlbnVtIGNwdWhwX3N0YXRl IHsKIAlDUFVIUF9BUF9BUk1fQ0FDSEVfQjE1X1JBQ19EWUlORywKIAlDUFVIUF9BUF9PTkxJTkUs CiAJQ1BVSFBfVEVBUkRPV05fQ1BVLAorCisJLyogT25saW5lIHNlY3Rpb24gaW52b2tlZCBvbiB0 aGUgaG90cGx1Z2dlZCBDUFUgZnJvbSB0aGUgaG90cGx1ZyB0aHJlYWQgKi8KIAlDUFVIUF9BUF9P TkxJTkVfSURMRSwKIAlDUFVIUF9BUF9TQ0hFRF9XQUlUX0VNUFRZLAogCUNQVUhQX0FQX1NNUEJP T1RfVEhSRUFEUywKQEAgLTIxNiwxNCArMjU3LDE1IEBAIGludCBfX2NwdWhwX3NldHVwX3N0YXRl X2NwdXNsb2NrZWQoZW51bQogCQkJCSAgIGludCAoKnRlYXJkb3duKSh1bnNpZ25lZCBpbnQgY3B1 KSwKIAkJCQkgICBib29sIG11bHRpX2luc3RhbmNlKTsKIC8qKgotICogY3B1aHBfc2V0dXBfc3Rh dGUgLSBTZXR1cCBob3RwbHVnIHN0YXRlIGNhbGxiYWNrcyB3aXRoIGNhbGxpbmcgdGhlIGNhbGxi YWNrcworICogY3B1aHBfc2V0dXBfc3RhdGUgLSBTZXR1cCBob3RwbHVnIHN0YXRlIGNhbGxiYWNr cyB3aXRoIGNhbGxpbmcgdGhlIEBzdGFydHVwCisgKiAgICAgICAgICAgICAgICAgICAgIGNhbGxi YWNrCiAgKiBAc3RhdGU6CVRoZSBzdGF0ZSBmb3Igd2hpY2ggdGhlIGNhbGxzIGFyZSBpbnN0YWxs ZWQKICAqIEBuYW1lOglOYW1lIG9mIHRoZSBjYWxsYmFjayAod2lsbCBiZSB1c2VkIGluIGRlYnVn IG91dHB1dCkKLSAqIEBzdGFydHVwOglzdGFydHVwIGNhbGxiYWNrIGZ1bmN0aW9uCi0gKiBAdGVh cmRvd246CXRlYXJkb3duIGNhbGxiYWNrIGZ1bmN0aW9uCisgKiBAc3RhcnR1cDoJc3RhcnR1cCBj YWxsYmFjayBmdW5jdGlvbiBvciBOVUxMIGlmIG5vdCByZXF1aXJlZAorICogQHRlYXJkb3duOgl0 ZWFyZG93biBjYWxsYmFjayBmdW5jdGlvbiBvciBOVUxMIGlmIG5vdCByZXF1aXJlZAogICoKLSAq IEluc3RhbGxzIHRoZSBjYWxsYmFjayBmdW5jdGlvbnMgYW5kIGludm9rZXMgdGhlIHN0YXJ0dXAg Y2FsbGJhY2sgb24KLSAqIHRoZSBwcmVzZW50IGNwdXMgd2hpY2ggaGF2ZSBhbHJlYWR5IHJlYWNo ZWQgdGhlIEBzdGF0ZS4KKyAqIEluc3RhbGxzIHRoZSBjYWxsYmFjayBmdW5jdGlvbnMgYW5kIGlu dm9rZXMgdGhlIEBzdGFydHVwIGNhbGxiYWNrIG9uCisgKiB0aGUgb25saW5lIGNwdXMgd2hpY2gg aGF2ZSBhbHJlYWR5IHJlYWNoZWQgdGhlIEBzdGF0ZS4KICAqLwogc3RhdGljIGlubGluZSBpbnQg Y3B1aHBfc2V0dXBfc3RhdGUoZW51bSBjcHVocF9zdGF0ZSBzdGF0ZSwKIAkJCQkgICAgY29uc3Qg Y2hhciAqbmFtZSwKQEAgLTIzMyw2ICsyNzUsMTggQEAgc3RhdGljIGlubGluZSBpbnQgY3B1aHBf c2V0dXBfc3RhdGUoZW51bQogCXJldHVybiBfX2NwdWhwX3NldHVwX3N0YXRlKHN0YXRlLCBuYW1l LCB0cnVlLCBzdGFydHVwLCB0ZWFyZG93biwgZmFsc2UpOwogfQogCisvKioKKyAqIGNwdWhwX3Nl dHVwX3N0YXRlX2NwdXNsb2NrZWQgLSBTZXR1cCBob3RwbHVnIHN0YXRlIGNhbGxiYWNrcyB3aXRo IGNhbGxpbmcKKyAqCQkJCSAgQHN0YXJ0dXAgY2FsbGJhY2sgZnJvbSBhIGNwdXNfcmVhZF9sb2Nr KCkKKyAqCQkJCSAgaGVsZCByZWdpb24KKyAqIEBzdGF0ZToJVGhlIHN0YXRlIGZvciB3aGljaCB0 aGUgY2FsbHMgYXJlIGluc3RhbGxlZAorICogQG5hbWU6CU5hbWUgb2YgdGhlIGNhbGxiYWNrICh3 aWxsIGJlIHVzZWQgaW4gZGVidWcgb3V0cHV0KQorICogQHN0YXJ0dXA6CXN0YXJ0dXAgY2FsbGJh Y2sgZnVuY3Rpb24gb3IgTlVMTCBpZiBub3QgcmVxdWlyZWQKKyAqIEB0ZWFyZG93bjoJdGVhcmRv d24gY2FsbGJhY2sgZnVuY3Rpb24gb3IgTlVMTCBpZiBub3QgcmVxdWlyZWQKKyAqCisgKiBTYW1l IGFzIGNwdWhwX3NldHVwX3N0YXRlKCkgZXhjZXB0IHRoYXQgaXQgbXVzdCBiZSBpbnZva2VkIGZy b20gd2l0aGluIGEKKyAqIGNwdXNfcmVhZF9sb2NrKCkgaGVsZCByZWdpb24uCisgKi8KIHN0YXRp YyBpbmxpbmUgaW50IGNwdWhwX3NldHVwX3N0YXRlX2NwdXNsb2NrZWQoZW51bSBjcHVocF9zdGF0 ZSBzdGF0ZSwKIAkJCQkJICAgICAgIGNvbnN0IGNoYXIgKm5hbWUsCiAJCQkJCSAgICAgICBpbnQg KCpzdGFydHVwKSh1bnNpZ25lZCBpbnQgY3B1KSwKQEAgLTI0NCwxNCArMjk4LDE0IEBAIHN0YXRp YyBpbmxpbmUgaW50IGNwdWhwX3NldHVwX3N0YXRlX2NwdXMKIAogLyoqCiAgKiBjcHVocF9zZXR1 cF9zdGF0ZV9ub2NhbGxzIC0gU2V0dXAgaG90cGx1ZyBzdGF0ZSBjYWxsYmFja3Mgd2l0aG91dCBj YWxsaW5nIHRoZQotICoJCQkgICAgICAgY2FsbGJhY2tzCisgKgkJCSAgICAgICBAc3RhcnR1cCBj YWxsYmFjawogICogQHN0YXRlOglUaGUgc3RhdGUgZm9yIHdoaWNoIHRoZSBjYWxscyBhcmUgaW5z dGFsbGVkCiAgKiBAbmFtZToJTmFtZSBvZiB0aGUgY2FsbGJhY2suCi0gKiBAc3RhcnR1cDoJc3Rh cnR1cCBjYWxsYmFjayBmdW5jdGlvbgotICogQHRlYXJkb3duOgl0ZWFyZG93biBjYWxsYmFjayBm dW5jdGlvbgorICogQHN0YXJ0dXA6CXN0YXJ0dXAgY2FsbGJhY2sgZnVuY3Rpb24gb3IgTlVMTCBp ZiBub3QgcmVxdWlyZWQKKyAqIEB0ZWFyZG93bjoJdGVhcmRvd24gY2FsbGJhY2sgZnVuY3Rpb24g b3IgTlVMTCBpZiBub3QgcmVxdWlyZWQKICAqCi0gKiBTYW1lIGFzIEBjcHVocF9zZXR1cF9zdGF0 ZSBleGNlcHQgdGhhdCBubyBjYWxscyBhcmUgZXhlY3V0ZWQgYXJlIGludm9rZWQKLSAqIGR1cmlu ZyBpbnN0YWxsYXRpb24gb2YgdGhpcyBjYWxsYmFjay4gTk9QIGlmIFNNUD1uIG9yIEhPVFBMVUdf Q1BVPW4uCisgKiBTYW1lIGFzIGNwdWhwX3NldHVwX3N0YXRlKCkgZXhjZXB0IHRoYXQgdGhlIEBz dGFydHVwIGNhbGxiYWNrIGlzIG5vdAorICogaW52b2tlZCBkdXJpbmcgaW5zdGFsbGF0aW9uLiBO T1AgaWYgU01QPW4gb3IgSE9UUExVR19DUFU9bi4KICAqLwogc3RhdGljIGlubGluZSBpbnQgY3B1 aHBfc2V0dXBfc3RhdGVfbm9jYWxscyhlbnVtIGNwdWhwX3N0YXRlIHN0YXRlLAogCQkJCQkgICAg Y29uc3QgY2hhciAqbmFtZSwKQEAgLTI2Miw2ICszMTYsMTkgQEAgc3RhdGljIGlubGluZSBpbnQg Y3B1aHBfc2V0dXBfc3RhdGVfbm9jYQogCQkJCSAgIGZhbHNlKTsKIH0KIAorLyoqCisgKiBjcHVo cF9zZXR1cF9zdGF0ZV9ub2NhbGxzX2NwdXNsb2NrZWQgLSBTZXR1cCBob3RwbHVnIHN0YXRlIGNh bGxiYWNrcyB3aXRob3V0CisgKgkJCQkJICBpbnZva2luZyB0aGUgQHN0YXJ0dXAgY2FsbGJhY2sg ZnJvbQorICoJCQkJCSAgYSBjcHVzX3JlYWRfbG9jaygpIGhlbGQgcmVnaW9uCisgKgkJCSAgICAg ICBjYWxsYmFja3MKKyAqIEBzdGF0ZToJVGhlIHN0YXRlIGZvciB3aGljaCB0aGUgY2FsbHMgYXJl IGluc3RhbGxlZAorICogQG5hbWU6CU5hbWUgb2YgdGhlIGNhbGxiYWNrLgorICogQHN0YXJ0dXA6 CXN0YXJ0dXAgY2FsbGJhY2sgZnVuY3Rpb24gb3IgTlVMTCBpZiBub3QgcmVxdWlyZWQKKyAqIEB0 ZWFyZG93bjoJdGVhcmRvd24gY2FsbGJhY2sgZnVuY3Rpb24gb3IgTlVMTCBpZiBub3QgcmVxdWly ZWQKKyAqCisgKiBTYW1lIGFzIGNwdWhwX3NldHVwX3N0YXRlX25vY2FsbHMoKSBleGNlcHQgdGhh dCBpdCBtdXN0IGJlIGludm9rZWQgZnJvbQorICogd2l0aGluIGEgY3B1c19yZWFkX2xvY2soKSBo ZWxkIHJlZ2lvbi4KKyAqLwogc3RhdGljIGlubGluZSBpbnQgY3B1aHBfc2V0dXBfc3RhdGVfbm9j YWxsc19jcHVzbG9ja2VkKGVudW0gY3B1aHBfc3RhdGUgc3RhdGUsCiAJCQkJCQkgICAgIGNvbnN0 IGNoYXIgKm5hbWUsCiAJCQkJCQkgICAgIGludCAoKnN0YXJ0dXApKHVuc2lnbmVkIGludCBjcHUp LApAQCAtMjc1LDEzICszNDIsMTMgQEAgc3RhdGljIGlubGluZSBpbnQgY3B1aHBfc2V0dXBfc3Rh dGVfbm9jYQogICogY3B1aHBfc2V0dXBfc3RhdGVfbXVsdGkgLSBBZGQgY2FsbGJhY2tzIGZvciBt dWx0aSBzdGF0ZQogICogQHN0YXRlOglUaGUgc3RhdGUgZm9yIHdoaWNoIHRoZSBjYWxscyBhcmUg aW5zdGFsbGVkCiAgKiBAbmFtZToJTmFtZSBvZiB0aGUgY2FsbGJhY2suCi0gKiBAc3RhcnR1cDoJ c3RhcnR1cCBjYWxsYmFjayBmdW5jdGlvbgotICogQHRlYXJkb3duOgl0ZWFyZG93biBjYWxsYmFj ayBmdW5jdGlvbgorICogQHN0YXJ0dXA6CXN0YXJ0dXAgY2FsbGJhY2sgZnVuY3Rpb24gb3IgTlVM TCBpZiBub3QgcmVxdWlyZWQKKyAqIEB0ZWFyZG93bjoJdGVhcmRvd24gY2FsbGJhY2sgZnVuY3Rp b24gb3IgTlVMTCBpZiBub3QgcmVxdWlyZWQKICAqCiAgKiBTZXRzIHRoZSBpbnRlcm5hbCBtdWx0 aV9pbnN0YW5jZSBmbGFnIGFuZCBwcmVwYXJlcyBhIHN0YXRlIHRvIHdvcmsgYXMgYSBtdWx0aQog ICogaW5zdGFuY2UgY2FsbGJhY2suIE5vIGNhbGxiYWNrcyBhcmUgaW52b2tlZCBhdCB0aGlzIHBv aW50LiBUaGUgY2FsbGJhY2tzIGFyZQogICogaW52b2tlZCBvbmNlIGFuIGluc3RhbmNlIGZvciB0 aGlzIHN0YXRlIGFyZSByZWdpc3RlcmVkIHZpYQotICogQGNwdWhwX3N0YXRlX2FkZF9pbnN0YW5j ZSBvciBAY3B1aHBfc3RhdGVfYWRkX2luc3RhbmNlX25vY2FsbHMuCisgKiBjcHVocF9zdGF0ZV9h ZGRfaW5zdGFuY2UoKSBvciBjcHVocF9zdGF0ZV9hZGRfaW5zdGFuY2Vfbm9jYWxscygpCiAgKi8K IHN0YXRpYyBpbmxpbmUgaW50IGNwdWhwX3NldHVwX3N0YXRlX211bHRpKGVudW0gY3B1aHBfc3Rh dGUgc3RhdGUsCiAJCQkJCSAgY29uc3QgY2hhciAqbmFtZSwKQEAgLTMwNiw5ICszNzMsMTAgQEAg aW50IF9fY3B1aHBfc3RhdGVfYWRkX2luc3RhbmNlX2NwdXNsb2NrZQogICogQHN0YXRlOglUaGUg c3RhdGUgZm9yIHdoaWNoIHRoZSBpbnN0YW5jZSBpcyBpbnN0YWxsZWQKICAqIEBub2RlOglUaGUg bm9kZSBmb3IgdGhpcyBpbmRpdmlkdWFsIHN0YXRlLgogICoKLSAqIEluc3RhbGxzIHRoZSBpbnN0 YW5jZSBmb3IgdGhlIEBzdGF0ZSBhbmQgaW52b2tlcyB0aGUgc3RhcnR1cCBjYWxsYmFjayBvbgot ICogdGhlIHByZXNlbnQgY3B1cyB3aGljaCBoYXZlIGFscmVhZHkgcmVhY2hlZCB0aGUgQHN0YXRl LiBUaGUgQHN0YXRlIG11c3QgaGF2ZQotICogYmVlbiBlYXJsaWVyIG1hcmtlZCBhcyBtdWx0aS1p bnN0YW5jZSBieSBAY3B1aHBfc2V0dXBfc3RhdGVfbXVsdGkuCisgKiBJbnN0YWxscyB0aGUgaW5z dGFuY2UgZm9yIHRoZSBAc3RhdGUgYW5kIGludm9rZXMgdGhlIHJlZ2lzdGVyZWQgc3RhcnR1cAor ICogY2FsbGJhY2sgb24gdGhlIG9ubGluZSBjcHVzIHdoaWNoIGhhdmUgYWxyZWFkeSByZWFjaGVk IHRoZSBAc3RhdGUuIFRoZQorICogQHN0YXRlIG11c3QgaGF2ZSBiZWVuIGVhcmxpZXIgbWFya2Vk IGFzIG11bHRpLWluc3RhbmNlIGJ5CisgKiBjcHVocF9zZXR1cF9zdGF0ZV9tdWx0aSgpLgogICov CiBzdGF0aWMgaW5saW5lIGludCBjcHVocF9zdGF0ZV9hZGRfaW5zdGFuY2UoZW51bSBjcHVocF9z dGF0ZSBzdGF0ZSwKIAkJCQkJICAgc3RydWN0IGhsaXN0X25vZGUgKm5vZGUpCkBAIC0zMjIsOCAr MzkwLDkgQEAgc3RhdGljIGlubGluZSBpbnQgY3B1aHBfc3RhdGVfYWRkX2luc3RhbgogICogQHN0 YXRlOglUaGUgc3RhdGUgZm9yIHdoaWNoIHRoZSBpbnN0YW5jZSBpcyBpbnN0YWxsZWQKICAqIEBu b2RlOglUaGUgbm9kZSBmb3IgdGhpcyBpbmRpdmlkdWFsIHN0YXRlLgogICoKLSAqIEluc3RhbGxz IHRoZSBpbnN0YW5jZSBmb3IgdGhlIEBzdGF0ZSBUaGUgQHN0YXRlIG11c3QgaGF2ZSBiZWVuIGVh cmxpZXIKLSAqIG1hcmtlZCBhcyBtdWx0aS1pbnN0YW5jZSBieSBAY3B1aHBfc2V0dXBfc3RhdGVf bXVsdGkuCisgKiBJbnN0YWxscyB0aGUgaW5zdGFuY2UgZm9yIHRoZSBAc3RhdGUuIFRoZSBAc3Rh dGUgbXVzdCBoYXZlIGJlZW4gZWFybGllcgorICogbWFya2VkIGFzIG11bHRpLWluc3RhbmNlIGJ5 IGNwdWhwX3NldHVwX3N0YXRlX211bHRpLiBOT1AgaWYgU01QPW4gb3IKKyAqIEhPVFBMVUdfQ1BV PW4uCiAgKi8KIHN0YXRpYyBpbmxpbmUgaW50IGNwdWhwX3N0YXRlX2FkZF9pbnN0YW5jZV9ub2Nh bGxzKGVudW0gY3B1aHBfc3RhdGUgc3RhdGUsCiAJCQkJCQkgICBzdHJ1Y3QgaGxpc3Rfbm9kZSAq bm9kZSkKQEAgLTMzMSw2ICs0MDAsMTcgQEAgc3RhdGljIGlubGluZSBpbnQgY3B1aHBfc3RhdGVf YWRkX2luc3RhbgogCXJldHVybiBfX2NwdWhwX3N0YXRlX2FkZF9pbnN0YW5jZShzdGF0ZSwgbm9k ZSwgZmFsc2UpOwogfQogCisvKioKKyAqIGNwdWhwX3N0YXRlX2FkZF9pbnN0YW5jZV9ub2NhbGxz X2NwdXNsb2NrZWQgLSBBZGQgYW4gaW5zdGFuY2UgZm9yIGEgc3RhdGUKKyAqCQkJCQkJIHdpdGhv dXQgaW52b2tpbmcgdGhlIHN0YXJ0dXAKKyAqCQkJCQkJIGNhbGxiYWNrIGZyb20gYSBjcHVzX3Jl YWRfbG9jaygpCisgKgkJCQkJCSBoZWxkIHJlZ2lvbi4KKyAqIEBzdGF0ZToJVGhlIHN0YXRlIGZv ciB3aGljaCB0aGUgaW5zdGFuY2UgaXMgaW5zdGFsbGVkCisgKiBAbm9kZToJVGhlIG5vZGUgZm9y IHRoaXMgaW5kaXZpZHVhbCBzdGF0ZS4KKyAqCisgKiBTYW1lIGFzIGNwdWhwX3N0YXRlX2FkZF9p bnN0YW5jZV9ub2NhbGxzKCkgZXhjZXB0IHRoYXQgaXQgbXVzdCBiZQorICogaW52b2tlZCBmcm9t IHdpdGhpbiBhIGNwdXNfcmVhZF9sb2NrKCkgaGVsZCByZWdpb24uCisgKi8KIHN0YXRpYyBpbmxp bmUgaW50CiBjcHVocF9zdGF0ZV9hZGRfaW5zdGFuY2Vfbm9jYWxsc19jcHVzbG9ja2VkKGVudW0g Y3B1aHBfc3RhdGUgc3RhdGUsCiAJCQkJCSAgICBzdHJ1Y3QgaGxpc3Rfbm9kZSAqbm9kZSkKQEAg LTM0Niw3ICs0MjYsNyBAQCB2b2lkIF9fY3B1aHBfcmVtb3ZlX3N0YXRlX2NwdXNsb2NrZWQoZW51 CiAgKiBAc3RhdGU6CVRoZSBzdGF0ZSBmb3Igd2hpY2ggdGhlIGNhbGxzIGFyZSByZW1vdmVkCiAg KgogICogUmVtb3ZlcyB0aGUgY2FsbGJhY2sgZnVuY3Rpb25zIGFuZCBpbnZva2VzIHRoZSB0ZWFy ZG93biBjYWxsYmFjayBvbgotICogdGhlIHByZXNlbnQgY3B1cyB3aGljaCBoYXZlIGFscmVhZHkg cmVhY2hlZCB0aGUgQHN0YXRlLgorICogdGhlIG9ubGluZSBjcHVzIHdoaWNoIGhhdmUgYWxyZWFk eSByZWFjaGVkIHRoZSBAc3RhdGUuCiAgKi8KIHN0YXRpYyBpbmxpbmUgdm9pZCBjcHVocF9yZW1v dmVfc3RhdGUoZW51bSBjcHVocF9zdGF0ZSBzdGF0ZSkKIHsKQEAgLTM1NSw3ICs0MzUsNyBAQCBz dGF0aWMgaW5saW5lIHZvaWQgY3B1aHBfcmVtb3ZlX3N0YXRlKGVuCiAKIC8qKgogICogY3B1aHBf cmVtb3ZlX3N0YXRlX25vY2FsbHMgLSBSZW1vdmUgaG90cGx1ZyBzdGF0ZSBjYWxsYmFja3Mgd2l0 aG91dCBpbnZva2luZwotICoJCQkJdGVhcmRvd24KKyAqCQkJCXRoZSB0ZWFyZG93biBjYWxsYmFj awogICogQHN0YXRlOglUaGUgc3RhdGUgZm9yIHdoaWNoIHRoZSBjYWxscyBhcmUgcmVtb3ZlZAog ICovCiBzdGF0aWMgaW5saW5lIHZvaWQgY3B1aHBfcmVtb3ZlX3N0YXRlX25vY2FsbHMoZW51bSBj cHVocF9zdGF0ZSBzdGF0ZSkKQEAgLTM2Myw2ICs0NDMsMTQgQEAgc3RhdGljIGlubGluZSB2b2lk IGNwdWhwX3JlbW92ZV9zdGF0ZV9ubwogCV9fY3B1aHBfcmVtb3ZlX3N0YXRlKHN0YXRlLCBmYWxz ZSk7CiB9CiAKKy8qKgorICogY3B1aHBfcmVtb3ZlX3N0YXRlX25vY2FsbHNfY3B1c2xvY2tlZCAt IFJlbW92ZSBob3RwbHVnIHN0YXRlIGNhbGxiYWNrcyB3aXRob3V0IGludm9raW5nCisgKgkJCQkJ ICAgdGVhcmRvd24gZnJvbSBhIGNwdXNfcmVhZF9sb2NrKCkgaGVsZCByZWdpb24uCisgKiBAc3Rh dGU6CVRoZSBzdGF0ZSBmb3Igd2hpY2ggdGhlIGNhbGxzIGFyZSByZW1vdmVkCisgKgorICogU2Ft ZSBhcyBjcHVocF9yZW1vdmVfc3RhdGUgbm9jYWxscygpIGV4Y2VwdCB0aGF0IGl0IG11c3QgYmUg aW52b2tlZAorICogZnJvbSB3aXRoaW4gYSBjcHVzX3JlYWRfbG9jaygpIGhlbGQgcmVnaW9uLgor ICovCiBzdGF0aWMgaW5saW5lIHZvaWQgY3B1aHBfcmVtb3ZlX3N0YXRlX25vY2FsbHNfY3B1c2xv Y2tlZChlbnVtIGNwdWhwX3N0YXRlIHN0YXRlKQogewogCV9fY3B1aHBfcmVtb3ZlX3N0YXRlX2Nw dXNsb2NrZWQoc3RhdGUsIGZhbHNlKTsKQEAgLTM5MCw4ICs0NzgsOCBAQCBpbnQgX19jcHVocF9z dGF0ZV9yZW1vdmVfaW5zdGFuY2UoZW51bSBjCiAgKiBAc3RhdGU6CVRoZSBzdGF0ZSBmcm9tIHdo aWNoIHRoZSBpbnN0YW5jZSBpcyByZW1vdmVkCiAgKiBAbm9kZToJVGhlIG5vZGUgZm9yIHRoaXMg aW5kaXZpZHVhbCBzdGF0ZS4KICAqCi0gKiBSZW1vdmVzIHRoZSBpbnN0YW5jZSBhbmQgaW52b2tl cyB0aGUgdGVhcmRvd24gY2FsbGJhY2sgb24gdGhlIHByZXNlbnQgY3B1cwotICogd2hpY2ggaGF2 ZSBhbHJlYWR5IHJlYWNoZWQgdGhlIEBzdGF0ZS4KKyAqIFJlbW92ZXMgdGhlIGluc3RhbmNlIGFu ZCBpbnZva2VzIHRoZSB0ZWFyZG93biBjYWxsYmFjayBvbiB0aGUgb25saW5lIGNwdXMKKyAqIHdo aWNoIGhhdmUgYWxyZWFkeSByZWFjaGVkIEBzdGF0ZS4KICAqLwogc3RhdGljIGlubGluZSBpbnQg Y3B1aHBfc3RhdGVfcmVtb3ZlX2luc3RhbmNlKGVudW0gY3B1aHBfc3RhdGUgc3RhdGUsCiAJCQkJ CSAgICAgIHN0cnVjdCBobGlzdF9ub2RlICpub2RlKQoK