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.129.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 84820C6379F for ; Tue, 31 Jan 2023 07:47:30 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1675151249; 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=92j1Yrr/kzZmW0emKP5E606L51bkwh7Hu95Yxatp1sA=; b=SFtmXCYquybOoYkACMFWjKPd9NyEDPqDpoNl2nM3KRj66eYrTRSnAufG1N9VElRJ7Z12QW 7W6l1uhRKzPDLQ5Hwqh0KgxLIg1Mk6s1wcnN9c9QIlbwvl99kqkBF6hyeza3FqZGgrXATW lYL8lvv3clUkYEXbJacZLCjXKt0yGIs= Received: from mimecast-mx02.redhat.com (mimecast-mx02.redhat.com [66.187.233.88]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id us-mta-613-A4zjfrDUOZ-MzXEPyOiXlQ-1; Tue, 31 Jan 2023 02:47:26 -0500 X-MC-Unique: A4zjfrDUOZ-MzXEPyOiXlQ-1 Received: from smtp.corp.redhat.com (int-mx06.intmail.prod.int.rdu2.redhat.com [10.11.54.6]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id 1ADD8801CF7; Tue, 31 Jan 2023 07:47:21 +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 C370E2166B37; Tue, 31 Jan 2023 07:47:20 +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 D192A1946A45; Tue, 31 Jan 2023 07:47:19 +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 12FBF1946595 for ; Mon, 30 Jan 2023 23:06:43 +0000 (UTC) Received: by smtp.corp.redhat.com (Postfix) id EA24340C2004; Mon, 30 Jan 2023 23:06:42 +0000 (UTC) Received: from mimecast-mx02.redhat.com (mimecast07.extmail.prod.ext.rdu2.redhat.com [10.11.55.23]) by smtp.corp.redhat.com (Postfix) with ESMTPS id E174E40C2064 for ; Mon, 30 Jan 2023 23:06:42 +0000 (UTC) Received: from us-smtp-1.mimecast.com (us-smtp-delivery-1.mimecast.com [207.211.31.120]) (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 9E2C53C0E45F for ; Mon, 30 Jan 2023 23:06:42 +0000 (UTC) Received: from linux.microsoft.com (linux.microsoft.com [13.77.154.182]) by relay.mimecast.com with ESMTP id us-mta-345-0hmy_Z3tPn6bu55IcVio6Q-1; Mon, 30 Jan 2023 18:06:38 -0500 X-MC-Unique: 0hmy_Z3tPn6bu55IcVio6Q-1 Received: by linux.microsoft.com (Postfix, from userid 1052) id C89B620EA21E; Mon, 30 Jan 2023 14:58:42 -0800 (PST) DKIM-Filter: OpenDKIM Filter v2.11.0 linux.microsoft.com C89B620EA21E From: Fan Wu To: corbet@lwn.net, zohar@linux.ibm.com, jmorris@namei.org, serge@hallyn.com, tytso@mit.edu, ebiggers@kernel.org, axboe@kernel.dk, agk@redhat.com, snitzer@kernel.org, eparis@redhat.com, paul@paul-moore.com Date: Mon, 30 Jan 2023 14:57:31 -0800 Message-Id: <1675119451-23180-17-git-send-email-wufan@linux.microsoft.com> In-Reply-To: <1675119451-23180-1-git-send-email-wufan@linux.microsoft.com> References: <1675119451-23180-1-git-send-email-wufan@linux.microsoft.com> MIME-Version: 1.0 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: Tue, 31 Jan 2023 07:47:17 +0000 Subject: [dm-devel] [RFC PATCH v9 16/16] documentation: add ipe documentation X-BeenThere: dm-devel@redhat.com X-Mailman-Version: 2.1.29 Precedence: list List-Id: device-mapper development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Fan Wu , dm-devel@redhat.com, linux-doc@vger.kernel.org, Deven Bowers , roberto.sassu@huawei.com, linux-security-module@vger.kernel.org, linux-kernel@vger.kernel.org, linux-block@vger.kernel.org, linux-fscrypt@vger.kernel.org, linux-audit@redhat.com, linux-integrity@vger.kernel.org Errors-To: dm-devel-bounces@redhat.com Sender: "dm-devel" X-Scanned-By: MIMEDefang 3.1 on 10.11.54.6 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 RnJvbTogRGV2ZW4gQm93ZXJzIDxkZXZlbi5kZXNhaUBsaW51eC5taWNyb3NvZnQuY29tPgoKQWRk IElQRSdzIGFkbWluIGFuZCBkZXZlbG9wZXIgZG9jdW1lbnRhdGlvbiB0byB0aGUga2VybmVsIHRy ZWUuCgpDby1kZXZlbG9wZWQtYnk6IEZhbiBXdSA8d3VmYW5AbGludXgubWljcm9zb2Z0LmNvbT4K U2lnbmVkLW9mZi1ieTogRGV2ZW4gQm93ZXJzIDxkZXZlbi5kZXNhaUBsaW51eC5taWNyb3NvZnQu Y29tPgpTaWduZWQtb2ZmLWJ5OiBGYW4gV3UgPHd1ZmFuQGxpbnV4Lm1pY3Jvc29mdC5jb20+Ci0t LQp2MjoKICArIE5vIENoYW5nZXMKCnYzOgogICsgQWRkIEFja2VkLWJ5CiAgKyBGaXh1cCBjb2Rl IGJsb2NrIHN5bnRheAogICsgRml4IGEgbWlub3IgZ3JhbW1hdGljYWwgaXNzdWUuCgp2NDoKICAr IFVwZGF0ZSBkb2N1bWVudGF0aW9uIHdpdGggdGhlIHJlc3VsdHMgb2Ygb3RoZXIKICAgIGNvZGUg Y2hhbmdlcy4KCnY1OgogICsgTm8gY2hhbmdlcwoKdjY6CiAgKyBObyBjaGFuZ2VzCgp2NzoKICAr IEFkZCBhZGRpdGlvbmFsIGRldmVsb3Blci1sZXZlbCBkb2N1bWVudGF0aW9uCiAgKyBVcGRhdGUg YWRtaW4tZ3VpZGUgZG9jcyB0byByZWZsZWN0IGNoYW5nZXMuCiAgKyBEcm9wIEFja2VkLWJ5IGR1 ZSB0byBzaWduaWZpY2FudCBjaGFuZ2VzCiAgKyBBZGRlZCBzZWN0aW9uIGFib3V0IGF1ZGl0IGV2 ZW50cyBpbiBhZG1pbi1ndWlkZQoKdjg6CiAgKyBDb3JyZWN0IHRlcm1pbm9sb2d5IGZyb20gImF1 ZGl0IGV2ZW50IiB0byAiYXVkaXQgcmVjb3JkIgogICsgQWRkIGFzc29jaWF0ZWQgZG9jdW1lbnRh dGlvbiB3aXRoIHRoZSBjb3JyZWN0ICJhdWRpdCBldmVudCIKICAgIHRlcm1pbm9sb2d5LgogICsg QWRkIHNvbWUgY29udGV4dCB0byB0aGUgaGlzdG9yaWNhbCBtb3RpdmF0aW9uIGZvciBJUEUgYW5k IGRlc2lnbgogICAgcGhpbG9zb3BoeS4KICArIEFkZCBzb21lIGNvbnRlbnQgYWJvdXQgdGhlIHNl Y3VyaXR5ZnMgbGF5b3V0IGluIHRoZSBwb2xpY2llcwogICAgZGlyZWN0b3J5LgogICsgVmFyaW91 cyBzcGVsbGluZyBhbmQgZ3JhbW1hdGljYWwgY29ycmVjdGlvbnMuCgp2OToKICArIENvcnJlY3Qg c3BlbGxpbmcgb2YgInBpdGZhbGxzIgogICsgVXBkYXRlIHRoZSBkb2NzIHcuci50IHRoZSBuZXcg cGFyc2VyIGFuZCBuZXcgYXVkaXQgZm9ybWF0cwotLS0KIERvY3VtZW50YXRpb24vYWRtaW4tZ3Vp ZGUvTFNNL2luZGV4LnJzdCAgICAgICB8ICAgMSArCiBEb2N1bWVudGF0aW9uL2FkbWluLWd1aWRl L0xTTS9pcGUucnN0ICAgICAgICAgfCA3MjkgKysrKysrKysrKysrKysrKysrCiAuLi4vYWRtaW4t Z3VpZGUva2VybmVsLXBhcmFtZXRlcnMudHh0ICAgICAgICAgfCAgMTIgKwogRG9jdW1lbnRhdGlv bi9zZWN1cml0eS9pbmRleC5yc3QgICAgICAgICAgICAgIHwgICAxICsKIERvY3VtZW50YXRpb24v c2VjdXJpdHkvaXBlLnJzdCAgICAgICAgICAgICAgICB8IDQzNiArKysrKysrKysrKwogTUFJTlRB SU5FUlMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAyICsKIDYgZmlsZXMg Y2hhbmdlZCwgMTE4MSBpbnNlcnRpb25zKCspCiBjcmVhdGUgbW9kZSAxMDA2NDQgRG9jdW1lbnRh dGlvbi9hZG1pbi1ndWlkZS9MU00vaXBlLnJzdAogY3JlYXRlIG1vZGUgMTAwNjQ0IERvY3VtZW50 YXRpb24vc2VjdXJpdHkvaXBlLnJzdAoKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vYWRtaW4t Z3VpZGUvTFNNL2luZGV4LnJzdCBiL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvTFNNL2luZGV4 LnJzdAppbmRleCBhNmJhOTVmYmFhOWYuLmNlNjNiZTZkNjRhZCAxMDA2NDQKLS0tIGEvRG9jdW1l bnRhdGlvbi9hZG1pbi1ndWlkZS9MU00vaW5kZXgucnN0CisrKyBiL0RvY3VtZW50YXRpb24vYWRt aW4tZ3VpZGUvTFNNL2luZGV4LnJzdApAQCAtNDcsMyArNDcsNCBAQCBzdWJkaXJlY3Rvcmllcy4K ICAgIHRvbW95bwogICAgWWFtYQogICAgU2FmZVNldElECisgICBpcGUKZGlmZiAtLWdpdCBhL0Rv Y3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvTFNNL2lwZS5yc3QgYi9Eb2N1bWVudGF0aW9uL2FkbWlu LWd1aWRlL0xTTS9pcGUucnN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw MC4uYjY3NmNlYTYyYjJlCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9hZG1pbi1n dWlkZS9MU00vaXBlLnJzdApAQCAtMCwwICsxLDcyOSBAQAorLi4gU1BEWC1MaWNlbnNlLUlkZW50 aWZpZXI6IEdQTC0yLjAKKworSW50ZWdyaXR5IFBvbGljeSBFbmZvcmNlbWVudCAoSVBFKQorPT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisuLiBOT1RFOjoKKworICAgVGhpcyBp cyB0aGUgZG9jdW1lbnRhdGlvbiBmb3IgYWRtaW5zLCBzeXN0ZW0gYnVpbGRlcnMsIG9yIGluZGl2 aWR1YWxzCisgICBhdHRlbXB0aW5nIHRvIHVzZSBJUEUuIElmIHlvdSdyZSBsb29raW5nIGZvciBt b3JlIGRldmVsb3Blci1mb2N1c2VkCisgICBkb2N1bWVudGF0aW9uIGFib3V0IElQRSBwbGVhc2Ug c2VlIGBEb2N1bWVudGF0aW9uL3NlY3VyaXR5L2lwZS5yc3RgCisKK092ZXJ2aWV3CistLS0tLS0t LQorCitJUEUgaXMgYSBMaW51eCBTZWN1cml0eSBNb2R1bGUgd2hpY2ggdGFrZXMgYSBjb21wbGlt ZW50YXJ5IGFwcHJvYWNoIHRvCithY2Nlc3MgY29udHJvbC4gV2hlcmVhcyBleGlzdGluZyBtYW5k YXRvcnkgYWNjZXNzIGNvbnRyb2wgbWVjaGFuaXNtcworYmFzZSB0aGVpciBkZWNpc2lvbnMgb24g bGFiZWxzIGFuZCBwYXRocywgSVBFIGluc3RlYWQgZGV0ZXJtaW5lcword2hldGhlciBvciBub3Qg YW4gb3BlcmF0aW9uIHNob3VsZCBiZSBhbGxvd2VkIGJhc2VkIG9uIGltbXV0YWJsZQorc2VjdXJp dHkgcHJvcGVydGllcyBvZiB0aGUgc3lzdGVtIGNvbXBvbmVudCB0aGUgb3BlcmF0aW9uIGlzIGJl aW5nCitwZXJmb3JtZWQgb24uCisKK0lQRSBpdHNlbGYgZG9lcyBub3QgbWFuZGF0ZSBob3cgdGhl IHNlY3VyaXR5IHByb3BlcnR5IHNob3VsZCBiZQorZXZhbHVhdGVkLCBidXQgcmVsaWVzIG9uIGFu IGV4dGVuc2libGUgc2V0IG9mIGV4dGVybmFsIHByb3BlcnR5IHByb3ZpZGVycwordG8gZXZhbHVh dGUgdGhlIGNvbXBvbmVudC4gSVBFIG1ha2VzIGl0cyBkZWNpc2lvbiBiYXNlZCBvbiByZWZlcmVu Y2UKK3ZhbHVlcyBmb3IgdGhlIHNlbGVjdGVkIHByb3BlcnRpZXMsIHNwZWNpZmllZCBpbiB0aGUg SVBFIHBvbGljeS4KKworVGhlIHJlZmVyZW5jZSB2YWx1ZXMgcmVwcmVzZW50IHRoZSB2YWx1ZSB0 aGF0IHRoZSBwb2xpY3kgd3JpdGVyIGFuZCB0aGUKK2xvY2FsIHN5c3RlbSBhZG1pbmlzdHJhdG9y IChiYXNlZCBvbiB0aGUgcG9saWN5IHNpZ25hdHVyZSkgdHJ1c3QgZm9yIHRoZQorc3lzdGVtIHRv IGFjY29tcGxpc2ggdGhlIGRlc2lyZWQgdGFza3MuCisKK09uZSBzdWNoIHByb3ZpZGVyIGlzIGZv ciBleGFtcGxlIGRtLXZlcml0eSwgd2hpY2ggaXMgYWJsZSB0byByZXByZXNlbnQKK3RoZSBpbnRl Z3JpdHkgcHJvcGVydHkgb2YgYSBwYXJ0aXRpb24gKGl0cyBpbW11dGFibGUgc3RhdGUpIHdpdGgg YSBkaWdlc3QuCisKK0lQRSBpcyBjb21waWxlZCB1bmRlciBgYENPTkZJR19TRUNVUklUWV9JUEVg YCAoU2VjdXJpdHkgLT4gSW50ZWdyaXR5IFBvbGljeSBFbmZvcmNlbWVudCAoSVBFKSkuCisKK1Vz ZSBDYXNlcworLS0tLS0tLS0tCisKK0lQRSB3b3JrcyBiZXN0IGluIGZpeGVkLWZ1bmN0aW9uIGRl dmljZXM6IGRldmljZXMgaW4gd2hpY2ggdGhlaXIgcHVycG9zZQoraXMgY2xlYXJseSBkZWZpbmVk IGFuZCBub3Qgc3VwcG9zZWQgdG8gYmUgY2hhbmdlZCAoZS5nLiBuZXR3b3JrIGZpcmV3YWxsCitk ZXZpY2UgaW4gYSBkYXRhIGNlbnRlciwgYW4gSW9UIGRldmljZSwgZXRjZXRlcmEpLCB3aGVyZSBh bGwgc29mdHdhcmUgYW5kCitjb25maWd1cmF0aW9uIGlzIGJ1aWx0IGFuZCBwcm92aXNpb25lZCBi eSB0aGUgc3lzdGVtIG93bmVyLgorCitJUEUgaXMgYSBsb25nLXdheSBvZmYgZm9yIHVzZSBpbiBn ZW5lcmFsLXB1cnBvc2UgY29tcHV0aW5nOiB0aGUgTGludXgKK2NvbW11bml0eSBhcyBhIHdob2xl IHRlbmRzIHRvIGZvbGxvdyBhIGRlY2VudHJhbGl6ZWQgdHJ1c3QgbW9kZWwsCitrbm93biBhcyB0 aGUgd2ViIG9mIHRydXN0LCB3aGljaCBJUEUgaGFzIG5vIHN1cHBvcnQgZm9yIGFzIG9mIHlldC4K KworSVBFLCBpbnN0ZWFkIG9mIHN1cHBvcnRpbmcgd2ViIG9mIHRydXN0LCBzdXBwb3J0cyBQS0ks IHdoaWNoIGdlbmVyYWxseQorZGVzaWduYXRlcyBhIHNldCBvZiBlbnRpdGllcyB0aGF0IHByb3Zp ZGUgYSBtZWFzdXJlIG9mIGFic29sdXRlIHRydXN0LgorCitBZGRpdGlvbmFsbHksIHdoaWxlIG1v c3QgcGFja2FnZXMgYXJlIHNpZ25lZCB0b2RheSwgdGhlIGZpbGVzIGluc2lkZQordGhlIHBhY2th Z2VzIChmb3IgaW5zdGFuY2UsIHRoZSBleGVjdXRhYmxlcyksIHRlbmQgdG8gYmUgdW5zaWduZWQu IFRoaXMKK21ha2VzIGl0IGRpZmZpY3VsdCB0byB1dGlsaXplIElQRSBpbiBzeXN0ZW1zIHdoZXJl IGEgcGFja2FnZSBtYW5hZ2VyIGlzCitleHBlY3RlZCB0byBiZSBmdW5jdGlvbmFsLCB3aXRob3V0 IG1ham9yIGNoYW5nZXMgdG8gdGhlIHBhY2thZ2UgbWFuYWdlcgorYW5kIGVjb3N5c3RlbSBiZWhp bmQgaXQuCisKK0RJR0xJTSBbI2RpZ2xpbV1fIGlzIGEgc3lzdGVtIHRoYXQgd2hlbiBjb21iaW5l ZCB3aXRoIElQRSwgY291bGQgYmUgdXNlZCB0bworZW5hYmxlIGdlbmVyYWwgcHVycG9zZSBjb21w dXRpbmcgc2NlbmFyaW9zLgorCitLbm93biBHYXBzCistLS0tLS0tLS0tCisKK0lQRSBjYW5ub3Qg dmVyaWZ5IHRoZSBpbnRlZ3JpdHkgb2YgYW5vbnltb3VzIGV4ZWN1dGFibGUgbWVtb3J5LCBzdWNo IGFzCit0aGUgdHJhbXBvbGluZXMgY3JlYXRlZCBieSBnY2MgY2xvc3VyZXMgYW5kIGxpYmZmaSAo PDMuNC4yKSwgb3IgSklUJ2QgY29kZS4KK1VuZm9ydHVuYXRlbHksIGFzIHRoaXMgaXMgZHluYW1p Y2FsbHkgZ2VuZXJhdGVkIGNvZGUsIHRoZXJlIGlzIG5vIHdheQorZm9yIElQRSB0byBlbnN1cmUg dGhlIGludGVncml0eSBvZiB0aGlzIGNvZGUgdG8gZm9ybSBhIHRydXN0IGJhc2lzLiBJbiBhbGwK K2Nhc2VzLCB0aGUgcmV0dXJuIHJlc3VsdCBmb3IgdGhlc2Ugb3BlcmF0aW9ucyB3aWxsIGJlIHdo YXRldmVyIHRoZSBhZG1pbgorY29uZmlndXJlcyBhcyB0aGUgYGBERUZBVUxUYGAgYWN0aW9uIGZv ciBgYEVYRUNVVEVgYC4KKworSVBFIGNhbm5vdCB2ZXJpZnkgdGhlIGludGVncml0eSBvZiBpbnRl cnByZXRlZCBsYW5ndWFnZXMnIHByb2dyYW1zIHdoZW4KK3RoZXNlIHNjcmlwdHMgYXJlIGludm9r ZWQgdmlhIGBgPGludGVycHJldGVyPiA8ZmlsZT5gYC4gVGhpcyBpcyBiZWNhdXNlCit0aGUgd2F5 IGludGVycHJldGVycyBleGVjdXRlIHRoZXNlIGZpbGVzLCB0aGUgc2NyaXB0cyB0aGVtc2VsdmVz IGFyZSBub3QKK2V2YWx1YXRlZCBhcyBleGVjdXRhYmxlIGNvZGUgdGhyb3VnaCBvbmUgb2YgSVBF J3MgaG9va3MsIGFzIHRoZXkgYXJlIG1lcmVseQorZmlsZXMgdGhhdCBhcmUgcmVhZCAoYXMgb3Bw b3NlZCB0byBleGVjdXRhYmxlIGNvZGUpIFsjaW50ZXJwcmV0ZXJzXV8uCisKK1RocmVhdCBNb2Rl bAorLS0tLS0tLS0tLS0tCisKK1RoZSB0aHJlYXQgdHlwZSBhZGRyZXNzZWQgYnkgSVBFIGlzIHRh bXBlcmluZyBvZiBleGVjdXRhYmxlIHVzZXJzcGFjZQorY29kZSBiZXlvbmQgdGhlIGluaXRpYWxs eSBib290ZWQga2VybmVsLCBhbmQgdGhlIGluaXRpYWwgdmVyaWZpY2F0aW9uIG9mCitrZXJuZWwg bW9kdWxlcyB0aGF0IGFyZSBsb2FkZWQgaW4gdXNlcnNwYWNlIHRocm91Z2ggYGBtb2Rwcm9iZWBg IG9yCitgYGluc21vZGBgLgorCitBIGJhcmUtbWluaW11bSBleGFtcGxlIG9mIGEgdGhyZWF0IHRo YXQgc2hvdWxkIGJlIG1pdGlnYXRlZCBieSBJUEUsIGlzCithIGhvc3RpbGUgYmluYXJ5IGlzIGRv d25sb2FkZWQgd2l0aCBhbGwgcmVxdWlyZWQgYmluYXJpZXMgKGluY2x1ZGluZworYSBsb2FkZXIs IGxpYmMsIGV0YykuIFdpdGggSVBFLCB0aGlzIGhvc3RpbGUgYmluYXJ5IHNob3VsZCBub3QgYWJs ZSB0bworYmUgZXhlY3V0ZWQsIG5vciBhbnkgb2YgdGhlIGRvd25sb2FkZWQgYmluYXJpZXMuCisK K1RhbXBlcmluZyB2aW9sYXRlcyBpbnRlZ3JpdHksIGFuZCBiZWluZyB1bmFibGUgdG8gdmVyaWZ5 IHRoZSBpbnRlZ3JpdHksCityZXN1bHRzIGluIGEgbGFjayBvZiB0cnVzdC4gSVBFJ3Mgcm9sZSBp biBtaXRpZ2F0aW5nIHRoaXMgdGhyZWF0IGlzIHRvCit2ZXJpZnkgdGhlIGludGVncml0eSAoYW5k IGF1dGhlbnRpY2l0eSkgb2YgYWxsIGV4ZWN1dGFibGUgY29kZSBhbmQgdG8KK2RlbnkgdGhlaXIg dXNlIGlmIHRoZXkgY2Fubm90IGJlIHRydXN0ZWQgKGFzIGludGVncml0eSB2ZXJpZmljYXRpb24g ZmFpbHMsCitvciB0aGUgYXV0aG9yaXphdGlvbiBjaGVjayBmYWlscyBhZ2FpbnN0IHRoZSByZWZl cmVuY2UgdmFsdWUgaW4gdGhlIHBvbGljeSkuCitJUEUgZ2VuZXJhdGVzIGF1ZGl0IGxvZ3Mgd2hp Y2ggbWF5IGJlIHV0aWxpemVkIHRvIGRldGVjdCBmYWlsdXJlcyByZXN1bHRpbmcKK2Zyb20gZmFp bHVyZSB0byBwYXNzIHBvbGljeS4KKworVGFtcGVyaW5nIHRocmVhdCBzY2VuYXJpb3MgaW5jbHVk ZSBtb2RpZmljYXRpb24gb3IgcmVwbGFjZW1lbnQgb2YKK2V4ZWN1dGFibGUgY29kZSBieSBhIHJh bmdlIG9mIGFjdG9ycyBpbmNsdWRpbmc6CisKKy0gIEFjdG9ycyB3aXRoIHBoeXNpY2FsIGFjY2Vz cyB0byB0aGUgaGFyZHdhcmUKKy0gIEFjdG9ycyB3aXRoIGxvY2FsIG5ldHdvcmsgYWNjZXNzIHRv IHRoZSBzeXN0ZW0KKy0gIEFjdG9ycyB3aXRoIGFjY2VzcyB0byB0aGUgZGVwbG95bWVudCBzeXN0 ZW0KKy0gIENvbXByb21pc2VkIGludGVybmFsIHN5c3RlbXMgdW5kZXIgZXh0ZXJuYWwgY29udHJv bAorLSAgTWFsaWNpb3VzIGVuZCB1c2VycyBvZiB0aGUgc3lzdGVtCistICBDb21wcm9taXNlZCBl bmQgdXNlcnMgb2YgdGhlIHN5c3RlbQorLSAgUmVtb3RlIChleHRlcm5hbCkgY29tcHJvbWlzZSBv ZiB0aGUgc3lzdGVtCisKK0lQRSBkb2VzIG5vdCBtaXRpZ2F0ZSB0aHJlYXRzIGFyaXNpbmcgZnJv bSBtYWxpY2lvdXMgYXV0aG9yaXplZAorZGV2ZWxvcGVycyAod2l0aCBhY2Nlc3MgdG8gYSBzaWdu aW5nIGNlcnRpZmljYXRlKSwgb3IgY29tcHJvbWlzZWQKK2RldmVsb3BlciB0b29scyB1c2VkIGJ5 IGF1dGhvcml6ZWQgZGV2ZWxvcGVycyAoaS5lLiBSZXR1cm4gT3JpZW50ZWQKK1Byb2dyYW1taW5n IGF0dGFja3MpLiBBZGRpdGlvbmFsbHksIElQRSBkcmF3cyBoYXJkIHNlY3VyaXR5IGJvdW5kYXJ5 CitiZXR3ZWVuIHVzZXJzcGFjZSBhbmQga2VybmVsc3BhY2UuIEFzIGEgcmVzdWx0LCBJUEUgZG9l cyBub3QgcHJvdmlkZQorYW55IHByb3RlY3Rpb25zIGFnYWluc3QgYSBrZXJuZWwgbGV2ZWwgZXhw bG9pdCwgYW5kIGEga2VybmVsLWxldmVsCitleHBsb2l0IGNhbiBkaXNhYmxlIG9yIHRhbXBlciB3 aXRoIElQRSdzIHByb3RlY3Rpb25zLgorCitQb2xpY3kKKy0tLS0tLQorCitJUEUgcG9saWN5IGlz IGEgcGxhaW4tdGV4dCBbI2RldmRvY11fIHBvbGljeSBjb21wb3NlZCBvZiBtdWx0aXBsZSBzdGF0 ZW1lbnRzCitvdmVyIHNldmVyYWwgbGluZXMuIFRoZXJlIGlzIG9uZSByZXF1aXJlZCBsaW5lLCBh dCB0aGUgdG9wIG9mIHRoZQorcG9saWN5LCBpbmRpY2F0aW5nIHRoZSBwb2xpY3kgbmFtZSwgYW5k IHRoZSBwb2xpY3kgdmVyc2lvbiwgZm9yCitpbnN0YW5jZTo6CisKKyAgIHBvbGljeV9uYW1lPUV4 X1BvbGljeSBwb2xpY3lfdmVyc2lvbj0wLjAuMAorCitUaGUgcG9saWN5IG5hbWUgaXMgYSB1bmlx dWUga2V5IGlkZW50aWZ5aW5nIHRoaXMgcG9saWN5IGluIGEgaHVtYW4KK3JlYWRhYmxlIG5hbWUu IFRoaXMgaXMgdXNlZCB0byBjcmVhdGUgbm9kZXMgdW5kZXIgc2VjdXJpdHlmcyBhcyB3ZWxsIGFz Cit1bmlxdWVseSBpZGVudGlmeSBwb2xpY2llcyB0byBkZXBsb3kgbmV3IHBvbGljaWVzIHZzIHVw ZGF0ZSBleGlzdGluZworcG9saWNpZXMuCisKK1RoZSBwb2xpY3kgdmVyc2lvbiBpbmRpY2F0ZXMg dGhlIGN1cnJlbnQgdmVyc2lvbiBvZiB0aGUgcG9saWN5IChOT1QgdGhlCitwb2xpY3kgc3ludGF4 IHZlcnNpb24pLiBUaGlzIGlzIHVzZWQgdG8gcHJldmVudCByb2xsYmFjayBvZiBwb2xpY3kgdG8K K3BvdGVudGlhbGx5IGluc2VjdXJlIHByZXZpb3VzIHZlcnNpb25zIG9mIHRoZSBwb2xpY3kuCisK K1RoZSBuZXh0IHBvcnRpb24gb2YgSVBFIHBvbGljeSBhcmUgcnVsZXMuIFJ1bGVzIGFyZSBmb3Jt ZWQgYnkga2V5PXZhbHVlCitwYWlycywga25vd24gYXMgcHJvcGVydGllcy4gSVBFIHJ1bGVzIHJl cXVpcmUgdHdvIHByb3BlcnRpZXM6ICJhY3Rpb24iLAord2hpY2ggZGV0ZXJtaW5lcyB3aGF0IElQ RSBkb2VzIHdoZW4gaXQgZW5jb3VudGVycyBhIG1hdGNoIGFnYWluc3QgdGhlCitydWxlLCBhbmQg Im9wIiwgd2hpY2ggZGV0ZXJtaW5lcyB3aGVuIHRoYXQgcnVsZSBzaG91bGQgYmUgZXZhbHVhdGVk LgorVGhlIG9yZGVyaW5nIGlzIHNpZ25pZmljYW50LCBhIHJ1bGUgbXVzdCBzdGFydCB3aXRoICJv cCIsIGFuZCBlbmQgd2l0aAorImFjdGlvbiIuIFRodXMsIGEgbWluaW1hbCBydWxlIGlzOjoKKwor ICAgb3A9RVhFQ1VURSBhY3Rpb249QUxMT1cKKworVGhpcyBleGFtcGxlIHdpbGwgYWxsb3cgYW55 IGV4ZWN1dGlvbi4gQWRkaXRpb25hbCBwcm9wZXJ0aWVzIGFyZSB1c2VkIHRvCityZXN0cmljdCBh dHRyaWJ1dGVzIGFib3V0IHRoZSBmaWxlcyBiZWluZyBldmFsdWF0ZWQuIFRoZXNlIHByb3BlcnRp ZXMKK2FyZSBpbnRlbmRlZCB0byBiZSBkZXNjcmlwdGlvbnMgb2Ygc3lzdGVtcyB3aXRoaW4gdGhl IGtlcm5lbCB0aGF0IGNhbgorcHJvdmlkZSBhIG1lYXN1cmUgb2YgaW50ZWdyaXR5IHZlcmlmaWNh dGlvbiwgc3VjaCB0aGF0IElQRSBjYW4gZGV0ZXJtaW5lCit0aGUgdHJ1c3Qgb2YgdGhlIHJlc291 cmNlIGJhc2VkIG9uIHRoZSAidmFsdWUiIGhhbGYgb2YgdGhlIHByb3BlcnR5LgorCitSdWxlcyBh cmUgZXZhbHVhdGVkIHRvcC10by1ib3R0b20uIEFzIGEgcmVzdWx0LCBhbnkgcmV2b2NhdGlvbiBy dWxlcywKK29yIGRlbmllcyBzaG91bGQgYmUgcGxhY2VkIGVhcmx5IGluIHRoZSBmaWxlIHRvIGVu c3VyZSB0aGF0IHRoZXNlIHJ1bGVzCithcmUgZXZhbHVhdGVkIGJlZm9yZSBhIHJ1bGUgd2l0aCAi YWN0aW9uPUFMTE9XIiBpcyBoaXQuCisKK0lQRSBwb2xpY3kgc3VwcG9ydHMgY29tbWVudHMuIFRo ZSBjaGFyYWN0ZXIgJyMnIHdpbGwgZnVuY3Rpb24gYXMgYQorY29tbWVudCwgaWdub3JpbmcgYWxs IGNoYXJhY3RlcnMgdG8gdGhlIHJpZ2h0IG9mICcjJyB1bnRpbCB0aGUgbmV3bGluZS4KKworVGhl IGRlZmF1bHQgYmVoYXZpb3Igb2YgSVBFIGV2YWx1YXRpb25zIGNhbiBhbHNvIGJlIGV4cHJlc3Nl ZCBpbiBwb2xpY3ksCit0aHJvdWdoIHRoZSBgYERFRkFVTFRgYCBzdGF0ZW1lbnQuIFRoaXMgY2Fu IGJlIGRvbmUgYXQgYSBnbG9iYWwgbGV2ZWwsCitvciBhIHBlci1vcGVyYXRpb24gbGV2ZWw6Ogor CisgICAjIEdsb2JhbAorICAgREVGQVVMVCBhY3Rpb249QUxMT1cKKworICAgIyBPcGVyYXRpb24g U3BlY2lmaWMKKyAgIERFRkFVTFQgb3A9RVhFQ1VURSBhY3Rpb249QUxMT1cKKworQSBkZWZhdWx0 IG11c3QgYmUgc2V0IGZvciBhbGwga25vd24gb3BlcmF0aW9ucyBpbiBJUEUuIElmIHlvdSB3YW50 IHRvCitwcmVzZXJ2ZSBvbGRlciBwb2xpY2llcyBiZWluZyBjb21wYXRpYmxlIHdpdGggbmV3ZXIg a2VybmVscyB0aGF0IGNhbiBpbnRyb2R1Y2UKK25ldyBvcGVyYXRpb25zLCBwbGVhc2Ugc2V0IGEg Z2xvYmFsIGRlZmF1bHQgb2YgJ0FMTE9XJywgYW5kIG92ZXJyaWRlIHRoZQorZGVmYXVsdHMgb24g YSBwZXItb3BlcmF0aW9uIGJhc2lzLgorCitXaXRoIGNvbmZpZ3VyYWJsZSBwb2xpY3ktYmFzZWQg TFNNcywgdGhlcmUncyBzZXZlcmFsIGlzc3VlcyB3aXRoCitlbmZvcmNpbmcgdGhlIGNvbmZpZ3Vy YWJsZSBwb2xpY2llcyBhdCBzdGFydHVwLCBhcm91bmQgcmVhZGluZyBhbmQKK3BhcnNpbmcgdGhl IHBvbGljeToKKworMS4gVGhlIGtlcm5lbCAqc2hvdWxkKiBub3QgcmVhZCBmaWxlcyBmcm9tIHVz ZXJzcGFjZSwgc28gZGlyZWN0bHkgcmVhZGluZworICAgdGhlIHBvbGljeSBmaWxlIGlzIHByb2hp Yml0ZWQuCisyLiBUaGUga2VybmVsIGNvbW1hbmQgbGluZSBoYXMgYSBjaGFyYWN0ZXIgbGltaXQs IGFuZCBvbmUga2VybmVsIG1vZHVsZQorICAgc2hvdWxkIG5vdCByZXNlcnZlIHRoZSBlbnRpcmUg Y2hhcmFjdGVyIGxpbWl0IGZvciBpdHMgb3duCisgICBjb25maWd1cmF0aW9uLgorMy4gVGhlcmUg YXJlIHZhcmlvdXMgYm9vdCBsb2FkZXJzIGluIHRoZSBrZXJuZWwgZWNvc3lzdGVtLCBzbyBoYW5k aW5nCisgICBvZmYgYSBtZW1vcnkgYmxvY2sgd291bGQgYmUgY29zdGx5IHRvIG1haW50YWluLgor CitBcyBhIHJlc3VsdCwgSVBFIGhhcyBhZGRyZXNzZWQgdGhpcyBwcm9ibGVtIHRocm91Z2ggYSBj b25jZXB0IG9mIGEgImJvb3QKK3BvbGljeSIuIEEgYm9vdCBwb2xpY3kgaXMgYSBtaW5pbWFsIHBv bGljeSwgY29tcGlsZWQgaW50byB0aGUga2VybmVsLgorVGhpcyBwb2xpY3kgaXMgaW50ZW5kZWQg dG8gZ2V0IHRoZSBzeXN0ZW0gdG8gYSBzdGF0ZSB3aGVyZSB1c2Vyc3BhY2UgaXMKK3NldCB1cCBh bmQgcmVhZHkgdG8gcmVjZWl2ZSBjb21tYW5kcywgYXQgd2hpY2ggcG9pbnQgYSBtb3JlIGNvbXBs ZXgKK3BvbGljeSBjYW4gYmUgZGVwbG95ZWQgdmlhIHNlY3VyaXR5ZnMuIFRoZSBib290IHBvbGlj eSBjYW4gYmUgc3BlY2lmaWVkCit2aWEgdGhlIEtjb25maWcsIGBgU0VDVVJJVFlfSVBFX0JPT1Rf UE9MSUNZYGAsIHdoaWNoIGFjY2VwdHMgYSBwYXRoIHRvCithIHBsYWluLXRleHQgdmVyc2lvbiBv ZiB0aGUgSVBFIHBvbGljeSB0byBhcHBseS4gVGhpcyBwb2xpY3kgd2lsbCBiZQorY29tcGlsZWQg aW50byB0aGUga2VybmVsLiBJZiBub3Qgc3BlY2lmaWVkLCBJUEUgd2lsbCBiZSBkaXNhYmxlZCB1 bnRpbAorYSBwb2xpY3kgaXMgZGVwbG95ZWQgYW5kIGFjdGl2YXRlZCB0aHJvdWdoIHNlY3VyaXR5 ZnMuCisKK0RlcGxveWluZyBQb2xpY2llcworfn5+fn5+fn5+fn5+fn5+fn5+CisKK1BvbGljaWVz IGNhbiBiZSBkZXBsb3llZCBmcm9tIHVzZXJzcGFjZSB0aHJvdWdoIHNlY3VyaXR5ZnMuIFRoZXNl IHBvbGljaWVzCithcmUgc2lnbmVkIHRocm91Z2ggdGhlIFBLQ1MjNyBtZXNzYWdlIGZvcm1hdCB0 byBlbmZvcmNlIHNvbWUgbGV2ZWwgb2YKK2F1dGhvcml6YXRpb24gb2YgdGhlIHBvbGljaWVzIChw cm9oaWJpdGluZyBhbiBhdHRhY2tlciBmcm9tIGdhaW5pbmcKK3VuY29uc3RyYWluZWQgcm9vdCwg YW5kIGRlcGxveWluZyBhbiAiYWxsb3cgYWxsIiBwb2xpY3kpLiBUaGVzZQorcG9saWNpZXMgbXVz dCBiZSBzaWduZWQgYnkgYSBjZXJ0aWZpY2F0ZSB0aGF0IGNoYWlucyB0byB0aGUKK2BgU1lTVEVN X1RSVVNURURfS0VZUklOR2BgLiBUaHJvdWdoIG9wZW5zc2wsIHRoZSBzaWduaW5nIGNhbiBiZSBk b25lIHZpYTo6CisKKyAgIG9wZW5zc2wgc21pbWUgLXNpZ24gXAorICAgICAgLWluICIkTVlfUE9M SUNZIiBcCisgICAgICAtc2lnbmVyICIkTVlfQ0VSVElGSUNBVEUiIFwKKyAgICAgIC1pbmtleSAi JE1ZX1BSSVZBVEVfS0VZIiBcCisgICAgICAtbm9hdHRyIFwKKyAgICAgIC1ub2RldGFjaCBcCisg ICAgICAtbm9zbWltZWNhcCBcCisgICAgICAtb3V0Zm9ybSBkZXIgXAorICAgICAgLW91dCAiJE1Z X1BPTElDWS5wN2IiCisKK0RlcGxveWluZyB0aGUgcG9saWNpZXMgaXMgZG9uZSB0aHJvdWdoIHNl Y3VyaXR5ZnMsIHRocm91Z2ggdGhlCitgYG5ld19wb2xpY3lgYCBub2RlLiBUbyBkZXBsb3kgYSBw b2xpY3ksIHNpbXBseSBjYXQgdGhlIGZpbGUgaW50byB0aGUKK3NlY3VyaXR5ZnMgbm9kZTo6CisK KyAgIGNhdCAiJE1ZX1BPTElDWS5wN2IiID4gL3N5cy9rZXJuZWwvc2VjdXJpdHkvaXBlL25ld19w b2xpY3kKKworVXBvbiBzdWNjZXNzLCB0aGlzIHdpbGwgY3JlYXRlIG9uZSBzdWJkaXJlY3Rvcnkg dW5kZXIKK2BgL3N5cy9rZXJuZWwvc2VjdXJpdHkvaXBlL3BvbGljaWVzL2BgLiBUaGUgc3ViZGly ZWN0b3J5IHdpbGwgYmUgdGhlCitgYHBvbGljeV9uYW1lYGAgZmllbGQgb2YgdGhlIHBvbGljeSBk ZXBsb3llZCwgc28gZm9yIHRoZSBleGFtcGxlIGFib3ZlLAordGhlIGRpcmVjdG9yeSB3aWxsIGJl IGBgL3N5cy9rZXJuZWwvc2VjdXJpdHkvaXBlL3BvbGljaWVzL0V4X1BvbGljeWBgLgorV2l0aGlu IHRoaXMgZGlyZWN0b3J5LCB0aGVyZSB3aWxsIGJlIGZpdmUgZmlsZXM6IGBgcGtjczdgYCwgYGBw b2xpY3lgYCwKK2BgYWN0aXZlYGAsIGBgdXBkYXRlYGAsIGFuZCBgYGRlbGV0ZWBgLgorCitUaGUg YGBwa2NzN2BgIGZpbGUgaXMgcmVhZCBvbmx5LiBSZWFkaW5nIHdpbGwgcHJvdmlkZSB0aGUgcmF3 IFBLQ1MjNyBkYXRhCit0aGF0IHdhcyBwcm92aWRlZCB0byB0aGUga2VybmVsLCByZXByZXNlbnRp bmcgdGhlIHBvbGljeS4gV3JpdGluZywgd2lsbAorZGVwbG95IGFuIGluLXBsYWNlIHBvbGljeSB1 cGRhdGUuSWYgdGhlIHBvbGljeSBiZWluZyByZWFkIGlzIHRoZSBib290Citwb2xpY3ksIHdoZW4g cmVhZCwgdGhpcyB3aWxsIHJldHVybiBFTk9FTlQsIGFzIHRoaXMgcG9saWN5IGlzIG5vdCBzaWdu ZWQuCisKK1RoZSBgYHBvbGljeWBgIGZpbGUgaXMgcmVhZCBvbmx5LiBSZWFkaW5nIHdpbGwgcHJv dmlkZSB0aGUgUEtDUyM3IGlubmVyCitjb250ZW50IG9mIHRoZSBwb2xpY3ksIHdoaWNoIHdpbGwg YmUgdGhlIHBsYWluIHRleHQgcG9saWN5LgorCitUaGUgYGBhY3RpdmVgYCBmaWxlIGlzIHVzZWQg dG8gc2V0IGEgcG9saWN5IGFzIHRoZSBjdXJyZW50bHkgYWN0aXZlIHBvbGljeS4KK1RoaXMgZmls ZSBpcyBydywgYW5kIGFjY2VwdHMgYSB2YWx1ZSBvZiBgYCIxImBgIHRvIHNldCB0aGUgcG9saWN5 IGFzIGFjdGl2ZS4KK1NpbmNlIG9ubHkgYSBzaW5nbGUgcG9saWN5IGNhbiBiZSBhY3RpdmUgYXQg b25lIHRpbWUsIGFsbCBvdGhlciBwb2xpY2llcword2lsbCBiZSBtYXJrZWQgaW5hY3RpdmUuIFRo ZSBwb2xpY3kgYmVpbmcgbWFya2VkIGFjdGl2ZSBtdXN0IGhhdmUgYSBwb2xpY3kKK3ZlcnNpb24g Z3JlYXRlciBvciBlcXVhbCB0byB0aGUgY3VycmVudGx5LXJ1bm5pbmcgdmVyc2lvbi4KKworVGhl IGBgdXBkYXRlYGAgZmlsZSBpcyB1c2VkIHRvIHVwZGF0ZSBhIHBvbGljeSB0aGF0IGlzIGFscmVh ZHkgcHJlc2VudCBpbgordGhlIGtlcm5lbC4gVGhpcyBmaWxlIGlzIHdyaXRlLW9ubHkgYW5kIGFj Y2VwdHMgYSBQS0NTIzcgc2lnbmVkIHBvbGljeS4KK09uZSBjaGVjayB3aWxsIGFsd2F5cyBiZSBw ZXJmb3JtZWQgb24gdGhpcyBwb2xpY3k6IHRoZSBwb2xpY3lfbmFtZXMgbXVzdAorbWF0Y2ggd2l0 aCB0aGUgdXBkYXRlZCB2ZXJzaW9uIGFuZCB0aGUgZXhpc3RpbmcgdmVyc2lvbi4gT25lIGFkZGl0 aW9uYWwgY2hlY2sKK21heSBiZSBtYWRlOiBJZiB0aGUgcG9saWN5IGJlaW5nIHVwZGF0ZWQgaXMg dGhlIGFjdGl2ZSBwb2xpY3ksIHRoZSB1cGRhdGVkCitwb2xpY3kgbXVzdCBoYXZlIGEgcG9saWN5 IHZlcnNpb24gZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIHRoZSBjdXJyZW50bHktcnVubmluZwor dmVyc2lvbjsgVGhpcyBpcyB0byBwcmV2ZW50IHJvbGxiYWNrIGF0dGFja3MuCisKK1RoZSBgYGRl bGV0ZWBgIGZpbGUgaXMgdXNlZCB0byByZW1vdmUgYSBwb2xpY3kgdGhhdCBpcyBubyBsb25nZXIg bmVlZGVkLgorVGhpcyBmaWxlIGlzIHdyaXRlLW9ubHkgYW5kIGFjY2VwdHMgYSB2YWx1ZSBvZiBg YDFgYCB0byBkZWxldGUgdGhlIHBvbGljeS4KK09uIGRlbGV0aW9uLCB0aGUgc2VjdXJpdHlmcyBu b2RlIHJlcHJlc2VudGluZyB0aGUgcG9saWN5IHdpbGwgYmUgcmVtb3ZlZC4KK1RoZSBwb2xpY3kg dGhhdCBpcyBjdXJyZW50bHkgYWN0aXZlIGNhbm5vdCBiZSBkZWxldGVkLgorCitTaW1pbGFybHks IHRoZSB3cml0ZXMgdG8gYm90aCBgYHVwZGF0ZWBgIGFuZCBgYG5ld19wb2xpY3lgYCBhYm92ZSB3 aWxsCityZXN1bHQgaW4gYW4gZXJyb3IgdXBvbiBzeW50YWN0aWNhbGx5IGludmFsaWQgb3IgdW50 cnVzdGVkIHBvbGljaWVzLgorSW4gdGhlIGNhc2Ugb2YgYGBuZXdfcG9saWN5YGAsIGl0IHdpbGwg YWxzbyBlcnJvciBpZiBhIHBvbGljeSBhbHJlYWR5CitleGlzdHMgd2l0aCB0aGUgc2FtZSBgYHBv bGljeV9uYW1lYGAuCisKK0RlcGxveWluZyB0aGVzZSBwb2xpY2llcyB3aWxsICpub3QqIGNhdXNl IElQRSB0byBzdGFydCBlbmZvcmNpbmcgdGhpcworcG9saWN5LiBPbmNlIGRlcGxveW1lbnQgaXMg c3VjY2Vzc2Z1bCwgYSBwb2xpY3kgY2FuIGJlIG1hcmtlZCBhcyBhY3RpdmUsCit2aWEgYGAvc3lz L2tlcm5lbC9zZWN1cml0eS9pcGUvJHBvbGljeV9uYW1lL2FjdGl2ZWBgLiBJUEUgd2lsbCBlbmZv cmNlCit3aGF0ZXZlciBwb2xpY3kgaXMgbWFya2VkIGFzIGFjdGl2ZS4gRm9yIG91ciBleGFtcGxl LCB3ZSBjYW4gYWN0aXZhdGUKK3RoZSBgYEV4X1BvbGljeWBgIHZpYTo6CisKKyAgIGVjaG8gMSA+ ICIvc3lzL2tlcm5lbC9zZWN1cml0eS9pcGUvRXhfUG9saWN5L2FjdGl2ZSIKKworQXQgd2hpY2gg cG9pbnQsIGBgRXhfUG9saWN5YGAgd2lsbCBub3cgYmUgdGhlIGVuZm9yY2VkIHBvbGljeSBvbiB0 aGUKK3N5c3RlbS4KKworSVBFIGFsc28gcHJvdmlkZXMgYSB3YXkgdG8gZGVsZXRlIHBvbGljaWVz LiBUaGlzIGNhbiBiZSBkb25lIHZpYSB0aGUKK2BgZGVsZXRlYGAgc2VjdXJpdHlmcyBub2RlLCBg YC9zeXMva2VybmVsL3NlY3VyaXR5L2lwZS8kcG9saWN5X25hbWUvZGVsZXRlYGAuCitXcml0aW5n IGBgMWBgIHRvIHRoYXQgZmlsZSB3aWxsIGRlbGV0ZSB0aGF0IG5vZGU6OgorCisgICBlY2hvIDEg PiAiL3N5cy9rZXJuZWwvc2VjdXJpdHkvaXBlLyRwb2xpY3lfbmFtZS9kZWxldGUiCisKK1RoZXJl IGlzIG9ubHkgb25lIHJlcXVpcmVtZW50IHRvIGRlbGV0ZSBhIHBvbGljeToKKworMS4gVGhlIHBv bGljeSBiZWluZyBkZWxldGVkIG11c3Qgbm90IGJlIHRoZSBhY3RpdmUgcG9saWN5LgorCisuLiBO T1RFOjoKKworICAgSWYgYSB0cmFkaXRpb25hbCBNQUMgc3lzdGVtIGlzIGVuYWJsZWQgKFNFTGlu dXgsIGFwcGFybW9yLCBzbWFjayksIGFsbAorICAgd3JpdGVzIHRvIGlwZSdzIHNlY3VyaXR5ZnMg bm9kZXMgcmVxdWlyZSBgYENBUF9NQUNfQURNSU5gYC4KKworTW9kZXMKK35+fn5+CisKK0lQRSBz dXBwb3J0cyB0d28gbW9kZXMgb2Ygb3BlcmF0aW9uOiBwZXJtaXNzaXZlIChzaW1pbGFyIHRvIFNF TGludXgncworcGVybWlzc2l2ZSBtb2RlKSBhbmQgZW5mb3JjZS4gUGVybWlzc2l2ZSBtb2RlIHBl cmZvcm1zIHRoZSBzYW1lIGNoZWNrcworYXMgZW5mb3JjZSBtb2RlLCBhbmQgbG9ncyBwb2xpY3kg dmlvbGF0aW9ucywgYnV0IHdpbGwgbm90IGVuZm9yY2UgdGhlCitwb2xpY3kuIFRoaXMgYWxsb3dz IHVzZXJzIHRvIHRlc3QgcG9saWNpZXMgYmVmb3JlIGVuZm9yY2luZyB0aGVtLgorCitUaGUgZGVm YXVsdCBtb2RlIGlzIGVuZm9yY2UsIGFuZCBjYW4gYmUgY2hhbmdlZCB2aWEgdGhlIGtlcm5lbCBj b21tYW5kCitsaW5lIHBhcmFtZXRlciBgYGlwZS5lbmZvcmNlPSgwfDEpYGAsIG9yIHRoZSBzZWN1 cml0eWZzIG5vZGUKK2BgL3N5cy9rZXJuZWwvc2VjdXJpdHkvaXBlL2VuZm9yY2VgYC4KKworLi4g Tk9URTo6CisKKyAgIElmIGEgdHJhZGl0aW9uYWwgTUFDIHN5c3RlbSBpcyBlbmFibGVkIChTRUxp bnV4LCBhcHBhcm1vciwgc21hY2ssIGV0Y2V0ZXJhKSwKKyAgIGFsbCB3cml0ZXMgdG8gaXBlJ3Mg c2VjdXJpdHlmcyBub2RlcyByZXF1aXJlIGBgQ0FQX01BQ19BRE1JTmBgLgorCitBdWRpdCBFdmVu dHMKK35+fn5+fn5+fn5+fgorCisxNDIwIEFVRElUX0lQRV9BQ0NFU1MKK15eXl5eXl5eXl5eXl5e Xl5eXl5eXgorRXZlbnQgRXhhbXBsZXM6OgorCisgICB0eXBlPTE0MjAgYXVkaXQoMTY1MzM2NDM3 MC4wNjc6NjEpOiBwYXRoPSIvcm9vdC9mcy9ydy9wbGFpbi9leGVjdmUiIGRldj0idmRjMSIgaW5v PTE2IHJ1bGU9IkRFRkFVTFQgb3A9RVhFQ1VURSBhY3Rpb249REVOWSIKKyAgIHR5cGU9MTMwMCBh dWRpdCgxNjUzMzY0MzcwLjA2Nzo2MSk6IGFyY2g9YzAwMDAwM2Ugc3lzY2FsbD0xMCBzdWNjZXNz PW5vIGV4aXQ9LTEzIGEwPTdmMGJmMDY0NDAwMCBhMT00ZjgwIGEyPTUgYTM9N2YwYmYwNDNkMzAw IGl0ZW1zPTAgcHBpZD00NTUgcGlkPTczNyBhdWlkPTAgdWlkPTAgZ2lkPTAgZXVpZD0wIHN1aWQ9 MCBmc3VpZD0wIGVnaWQ9MCBzZ2lkPTAgZnNnaWQ9MCB0dHk9dHR5UzAgc2VzPTMgY29tbT0ibXBy b3RlY3QiIGV4ZT0iL3Jvb3QvaG9zdC9tcHJvdGVjdCIgc3Viaj1rZXJuZWwga2V5PShudWxsKQor ICAgdHlwZT0xMzI3IGF1ZGl0KDE2NTMzNjQzNzAuMDY3OjYxKTogcHJvY3RpdGxlPTY4NkY3Mzc0 MkY2RDcwNzI2Rjc0NjU2Mzc0MDA1MzQ4MDA1MjdDNTcwMDUyN0M1ODAwNzA2QzYxNjk2RTJGNjU3 ODY1NjM3NjY1CisKKyAgIHR5cGU9MTQyMCBhdWRpdCgxNjUzMzY0NzM1LjE2MTo2NCk6IHJ1bGU9 IkRFRkFVTFQgb3A9RVhFQ1VURSBhY3Rpb249REVOWSIKKyAgIHR5cGU9MTMwMCBhdWRpdCgxNjUz MzY0NzM1LjE2MTo2NCk6IGFyY2g9YzAwMDAwM2Ugc3lzY2FsbD05IHN1Y2Nlc3M9bm8gZXhpdD0t MTMgYTA9MCBhMT0xMDAwIGEyPTQgYTM9MjAgaXRlbXM9MCBwcGlkPTQ1NSBwaWQ9Nzc0IGF1aWQ9 MCB1aWQ9MCBnaWQ9MCBldWlkPTAgc3VpZD0wIGZzdWlkPTAgZWdpZD0wIHNnaWQ9MCBmc2dpZD0w IHR0eT10dHlTMCBzZXM9MyBjb21tPSJtbWFwIiBleGU9Ii9yb290L2hvc3QvbW1hcCIgc3Viaj1r ZXJuZWwga2V5PShudWxsKQorICAgdHlwZT0xMzI3IGF1ZGl0KDE2NTMzNjQ3MzUuMTYxOjY0KTog cHJvY3RpdGxlPTY4NkY3Mzc0MkY2RDZENjE3MDAwNDEwMDU44o+OCisKK1RoaXMgZXZlbnQgaW5k aWNhdGVzIHRoYXQgSVBFIG1hZGUgYW4gYWNjZXNzIGNvbnRyb2wgZGVjaXNpb247IHRoZSBJUEUg c3BlY2lmaWMKK3JlY29yZCAoMTQyMCkgd2lsbCBhbHdheXMgYmUgZW1pdHRlZCBpbiBjb25qdW5j dGlvbiB3aXRoIGEgYGBBVURJVFNZU0NBTExgYCByZWNvcmQuCisKK0RldGVybWluaW5nIHdoZXRo ZXIgSVBFIGlzIGluIHBlcm1pc3NpdmUgY2FuIGJlIGRlcml2ZWQgZnJvbSB0aGUgc3VjY2VzcyBh bmQgZXhpdAorZmllbGQgb2YgdGhlIEFVRElUU1lTQ0FMTCByZWNvcmQKKworCisKK0ZpZWxkIGRl c2NyaXB0aW9uczoKKworKy0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0r LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLSsKK3wgRmllbGQgICAgICAgICB8IFZhbHVlIFR5cGUgfCBPcHRpb25h bD8gfCBEZXNjcmlwdGlvbiBvZiBWYWx1ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICB8CisrPT09PT09PT09PT09PT09Kz09PT09PT09PT09PSs9PT09 PT09PT09PSs9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09KworfCBwYXRoICAgICAgICAgIHwgc3RyaW5nICAgICB8 IFllcyAgICAgICB8IFRoZSBhYnNvbHV0ZSBwYXRoIHRvIHRoZSBmaWxlIHRoYXQgd2FzIHRoZSBz dWJqZWN0IG9mIHRoZSBldmFsdWF0aW9uICAgIHwKKystLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0t LS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IGlubyAgICAgICAgICAgfCBpbnRl Z2VyICAgIHwgWWVzICAgICAgIHwgVGhlIGlub2RlIG51bWJlciBvZiB0aGUgZmlsZSB0aGF0IHdh cyB0aGUgc3ViamVjdCBvZiB0aGUgZXZhbHVhdGlvbiAgICAgfAorKy0tLS0tLS0tLS0tLS0tLSst LS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgZGV2ICAgICAgICAg ICB8IHN0cmluZyAgICAgfCBZZXMgICAgICAgfCBUaGUgZGV2aWNlIG5hbWUgdGhhdCB0aGUgZmls ZSB1bmRlciBldmFsdWF0aW9uIGJlbG9uZ3MgdG8sIGUuZy4gdmRhICAgICB8CisrLS0tLS0tLS0t LS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBydWxl ICAgICAgICAgIHwgc3RyaW5nICAgICB8IE5vICAgICAgICB8IFRoZSBleGFjdCBydWxlIGluIElQ RSdzIHBvbGljeSB0aGF0IHRoZSBldmFsdWF0aW9uIG1hdGNoZWQgICAgICAgICAgICAgIHwKKyst LS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0r CisKKzE0MDMgQVVESVRfTUFDX1BPTElDWV9MT0FECiteXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5e XgorCitFdmVudCBFeGFtcGxlOjoKKworICAgdHlwZT0xNDAzIGF1ZGl0KDE2NTM0MjU1MjkuOTI3 OjUzKTogcG9saWN5X25hbWU9ImRtdmVyaXR5X3Jvb3RoYXNoIiBwb2xpY3lfdmVyc2lvbj0wLjAu MCBzaGEyNTY9REM2N0FDMTlFMDU4OTRFRkIzMTcwQThFNTVERTUyOTc5NEUyNDhDMiBhdWlkPTQy OTQ5NjcyOTUgc2VzPTQyOTQ5NjcyOTUgbHNtPWlwZSByZXM9MQorICAgdHlwZT0xMzAwIGF1ZGl0 KDE2NTM0MjU1MjkuOTI3OjUzKTogYXJjaD1jMDAwMDAzZSBzeXNjYWxsPTEgc3VjY2Vzcz15ZXMg ZXhpdD0yNTY3IGEwPTMgYTE9NTU5NmZjYWUxZmIwIGEyPWEwNyBhMz0yIGl0ZW1zPTAgcHBpZD0x ODQgcGlkPTIyOSBhdWlkPTQyOTQ5NjcyOTUgdWlkPTAgZ2lkPTAgZXVpZD0wIHN1aWQ9MCBmc3Vp ZD0wIGVnaWQ9MCBzZ2lkPTAgZnNnaWQ9MCB0dHk9cHRzMCBzZXM9NDI5NDk2NzI5NSBjb21tPSJw eXRob24zIiBleGU9Ii91c3IvYmluL3B5dGhvbjMuMTAiIGtleT0obnVsbCkKKyAgIHR5cGU9MTMy NyBhdWRpdCgxNjUzNDI1NTI5LjkyNzo1Myk6IFBST0NUSVRMRSBwcm9jdGl0bGU9NzA3OTc0Njg2 RjZFMzMwMDc0NjU3Mzc0MkY2RDYxNjk2RTJFNzA3OTAwMkQ2NjAwMkUyRQorCitUaGlzIHJlY29y ZCB3aWxsIGFsd2F5cyBiZSBlbWl0dGVkIGluIGNvbmp1bmN0aW9uIHdpdGggYSBgYEFVRElUU1lT Q0FMTGBgIHJlY29yZCBmb3IgdGhlIGBgd3JpdGVgYCBzeXNjYWxsLgorCisrLS0tLS0tLS0tLS0t LS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IEZpZWxkICAgICAgICAgIHwg VmFsdWUgVHlwZSB8IE9wdGlvbmFsPyB8IERlc2NyaXB0aW9uIG9mIFZhbHVlICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrPT09PT09PT09PT09PT09PSs9PT09PT09 PT09PT0rPT09PT09PT09PT0rPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT0rCit8IHBvbGljeV9uYW1lICAgIHwgc3RyaW5nICAgICB8 IE5vICAgICAgICB8IFRoZSBwb2xpY3lfbmFtZSBmaWVsZCBvZiB0aGUgcG9saWN5LiAgICAgICAg ICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0t LS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0rCit8IHBvbGljeV92ZXJzaW9uIHwgc3RyaW5nICAgICB8IE5vICAgICAgICB8 IFRoZSBwb2xpY3lfdmVyc2lvbiBmaWVsZCBvZiB0aGUgcG9saWN5ICAgICAgICAgICAgICAgICAg ICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0r Cit8IHNoYTI1NiAgICAgICAgIHwgc3RyaW5nICAgICB8IFllcyogICAgICB8IEEgZmxhdCBoYXNo IG9mIHRoZSBwb2xpY3kuIENhbiBiZSB1c2VkIHRvIGlkZW50aWZ5IGEgcG9saWN5LiB8CisrLS0t LS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IGF1aWQgICAg ICAgICAgIHwgaW50ZWdlciAgICB8IE5vICAgICAgICB8IFRoZSBhdWRpdCB1c2VyIElELiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0t LSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IHNlcyAgICAgICAgICAgIHwgaW50 ZWdlciAgICB8IE5vICAgICAgICB8IFRoZSBzZXNzaW9uIElELiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0t LS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IGxzbSAgICAgICAgICAgIHwgc3RyaW5nICAgICB8IE5v ICAgICAgICB8IFRoZSBsc20gbmFtZSBhc3NvY2lhdGVkIHdpdGggdGhlIGV2ZW50LiAgICAgICAg ICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0t LS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0rCit8IHJlcyAgICAgICAgICAgIHwgaW50ZWdlciAgICB8IE5vICAgICAgICB8IFRo ZSBvcGVyYXRpb24gcmVzdWx0LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICB8CisrLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisK KzE0MDUgQVVESVRfTUFDX0NPTkZJR19DSEFOR0UKK15eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5e Xl4KKworRXZlbnQgRXhhbXBsZTo6CisKKyAgIHR5cGU9MTQwNSBhdWRpdCgxNjUzNDI1NTgzLjEz Njo1NCk6IG9sZF9hY3RpdmVfcG9sX25hbWU9IkFsbG93X0FsbCIgb2xkX2FjdGl2ZV9wb2xfdmVy c2lvbj0wLjAuMCBvbGRfc2hhMjU2PURBMzlBM0VFNUU2QjRCMEQzMjU1QkZFRjk1NjAxODkwQUZE ODA3MDkgbmV3X2FjdGl2ZV9wb2xfbmFtZT0iZG12ZXJpdHlfcm9vdGhhc2giIG5ld19hY3RpdmVf cG9sX3ZlcnNpb249MC4wLjAgbmV3X3NoYTI1Nj1EQzY3QUMxOUUwNTg5NEVGQjMxNzBBOEU1NURF NTI5Nzk0RTI0OEMyIGF1aWQ9NDI5NDk2NzI5NSBzZXM9NDI5NDk2NzI5NSBsc209aXBlIHJlcz0x CisgICB0eXBlPTEzMDAgYXVkaXQoMTY1MzQyNTU4My4xMzY6NTQpOiBTWVNDQUxMIGFyY2g9YzAw MDAwM2Ugc3lzY2FsbD0xIHN1Y2Nlc3M9eWVzIGV4aXQ9MiBhMD0zIGExPTU1OTZmY2FlMWZiMCBh Mj0yIGEzPTIgaXRlbXM9MCBwcGlkPTE4NCBwaWQ9MjI5IGF1aWQ9NDI5NDk2NzI5NSB1aWQ9MCBn aWQ9MCBldWlkPTAgc3VpZD0wIGZzdWlkPTAgZWdpZD0wIHNnaWQ9MCBmc2dpZD0wIHR0eT1wdHMw IHNlcz00Mjk0OTY3Mjk1IGNvbW09InB5dGhvbjMiIGV4ZT0iL3Vzci9iaW4vcHl0aG9uMy4xMCIg a2V5PShudWxsKQorICAgdHlwZT0xMzI3IGF1ZGl0KDE2NTM0MjU1ODMuMTM2OjU0KTogUFJPQ1RJ VExFIHByb2N0aXRsZT03MDc5NzQ2ODZGNkUzMzAwNzQ2NTczNzQyRjZENjE2OTZFMkU3MDc5MDAy RDY2MDAyRTIKKworVGhpcyByZWNvcmQgd2lsbCBhbHdheXMgYmUgZW1pdHRlZCBpbiBjb25qdW5j dGlvbiB3aXRoIGEgYGBBVURJVFNZU0NBTExgYCByZWNvcmQgZm9yIHRoZSBgYHdyaXRlYGAgc3lz Y2FsbC4KKworKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0t LS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsK K3wgRmllbGQgICAgICAgICAgICAgICAgICB8IFZhbHVlIFR5cGUgfCBPcHRpb25hbD8gfCBEZXNj cmlwdGlvbiBvZiBWYWx1ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrPT09PT09 PT09PT09PT09PT09PT09PT09Kz09PT09PT09PT09PSs9PT09PT09PT09PSs9PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09KworfCBvbGRfYWN0aXZlX3Bv bF9uYW1lICAgIHwgc3RyaW5nICAgICB8IE5vICAgICAgICB8IFRoZSBwb2xpY3lfbmFtZSBmaWVs ZCBvZiB0aGUgb2xkIGFjdGl2ZSBwb2xpY3kuICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IG9sZF9hY3RpdmVfcG9sX3ZlcnNpb24gfCBzdHJp bmcgICAgIHwgTm8gICAgICAgIHwgVGhlIHBvbGljeV92ZXJzaW9uIGZpZWxkIG9mIHRoZSBvbGQg YWN0aXZlIHBvbGljeS4gfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0r LS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLSsKK3wgb2xkX3NoYTI1NiAgICAgICAgICAgICB8IHN0cmluZyAgICAgfCBZZXMqICAg ICAgfCBBIGZsYXQgaGFzaCBvZiB0aGUgb2xkIGFjdGl2ZSBwb2xpY3kuICAgICAgICAgICAgICB8 CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBuZXdf YWN0aXZlX3BvbF9uYW1lICAgIHwgc3RyaW5nICAgICB8IE5vICAgICAgICB8IFRoZSBwb2xpY3lf bmFtZSBmaWVsZCBvZiB0aGUgbmV3IGFjdGl2ZSBwb2xpY3kuICAgIHwKKystLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IG5ld19hY3RpdmVfcG9sX3ZlcnNp b24gfCBzdHJpbmcgICAgIHwgTm8gICAgICAgIHwgVGhlIHBvbGljeV92ZXJzaW9uIGZpZWxkIG9m IHRoZSBuZXcgYWN0aXZlIHBvbGljeS4gfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0t LS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLSsKK3wgbmV3X3NoYTI1NiAgICAgICAgICAgICB8IHN0cmluZyAgICAg fCBZZXMqICAgICAgfCBBIGZsYXQgaGFzaCBvZiB0aGUgbmV3IGFjdGl2ZSBwb2xpY3kuICAgICAg ICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0t LS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t KworfCBhdWlkICAgICAgICAgICAgICAgICAgIHwgaW50ZWdlciAgICB8IE5vICAgICAgICB8IFRo ZSBhdWRpdCB1c2VyIElELiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IHNlcyAgICAgICAg ICAgICAgICAgICAgfCBpbnRlZ2VyICAgIHwgTm8gICAgICAgIHwgVGhlIHNlc3Npb24gSUQuICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgbHNtICAgICAgICAgICAgICAgICAgICB8IHN0 cmluZyAgICAgfCBObyAgICAgICAgfCBUaGUgbHNtIG5hbWUgYXNzb2NpYXRlZCB3aXRoIHRoZSBl dmVudC4gICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0t LSstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tKworfCByZXMgICAgICAgICAgICAgICAgICAgIHwgaW50ZWdlciAgICB8IE5vICAg ICAgICB8IFRoZSBvcGVyYXRpb24gcmVzdWx0LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisKKzE0 MDQgQVVESVRfTUFDX1NUQVRVUworXl5eXl5eXl5eXl5eXl5eXl5eXl5eCisKK0V2ZW50IEV4YW1w bGVzOjoKKworICAgdHlwZT0xNDA0IGF1ZGl0KDE2NTM0MjU2ODkuMDA4OjU1KTogcGVybWlzc2l2 ZT0xIGF1aWQ9MCBzZXM9NDI5NDk2NzI5NSBsc209aXBlIHJlcz0xCisgICB0eXBlPTEzMDAgYXVk aXQoMTY1MzQyNTY4OS4wMDg6NTUpOiBhcmNoPWMwMDAwMDNlIHN5c2NhbGw9MSBzdWNjZXNzPXll cyBleGl0PTIgYTA9MSBhMT01NWMxMDY1ZTVjNjAgYTI9MiBhMz0wIGl0ZW1zPTAgcHBpZD00MDUg cGlkPTQ0MSBhdWlkPTAgdWlkPTAgZ2lkPTAgZXVpZD0wIHN1aWQ9MCBmc3VpZD0wIGVnaWQ9MCBz Z2lkPSkKKyAgIHR5cGU9MTMyNyBhdWRpdCgxNjUzNDI1Njg5LjAwODo1NSk6IHByb2N0aXRsZT0i LWJhc2giCisKKyAgIHR5cGU9MTQwNCBhdWRpdCgxNjUzNDI1Njg5LjAwODo1NSk6IHBlcm1pc3Np dmU9MCBhdWlkPTAgc2VzPTQyOTQ5NjcyOTUgbHNtPWlwZSByZXM9MQorICAgdHlwZT0xMzAwIGF1 ZGl0KDE2NTM0MjU2ODkuMDA4OjU1KTogYXJjaD1jMDAwMDAzZSBzeXNjYWxsPTEgc3VjY2Vzcz15 ZXMgZXhpdD0yIGEwPTEgYTE9NTVjMTA2NWU1YzYwIGEyPTIgYTM9MCBpdGVtcz0wIHBwaWQ9NDA1 IHBpZD00NDEgYXVpZD0wIHVpZD0wIGdpZD0wIGV1aWQ9MCBzdWlkPTAgZnN1aWQ9MCBlZ2lkPTAg c2dpZD0pCisgICB0eXBlPTEzMjcgYXVkaXQoMTY1MzQyNTY4OS4wMDg6NTUpOiBwcm9jdGl0bGU9 Ii1iYXNoIgorCitUaGlzIHJlY29yZCB3aWxsIGFsd2F5cyBiZSBlbWl0dGVkIGluIGNvbmp1bmN0 aW9uIHdpdGggYSBgYEFVRElUU1lTQ0FMTGBgIHJlY29yZCBmb3IgdGhlIGBgd3JpdGVgYCBzeXNj YWxsLgorCisrLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t KworfCBGaWVsZCAgICAgIHwgVmFsdWUgVHlwZSB8IE9wdGlvbmFsPyB8IERlc2NyaXB0aW9uIG9m IFZhbHVlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKys9 PT09PT09PT09PT0rPT09PT09PT09PT09Kz09PT09PT09PT09Kz09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0rCit8IHBlcm1p c3NpdmUgfCBpbnRlZ2VyICAgIHwgTm8gICAgICAgIHwgVGhlIHN0YXRlIElQRSBpcyBiZWluZyBz d2l0Y2hlZCB0by4gMSBpcyBwZXJtaXNzaXZlLCAwIGlzIGVuZm9yY2UgfAorKy0tLS0tLS0tLS0t LSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgYXVpZCAgICAgICB8IGlu dGVnZXIgICAgfCBObyAgICAgICAgfCBUaGUgYXVkaXQgdXNlciBJRC4gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tKy0tLS0tLS0t LS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBzZXMgICAgICAgIHwgaW50ZWdlciAgICB8 IE5vICAgICAgICB8IFRoZSBzZXNzaW9uIElELiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0t LS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0rCit8IGxzbSAgICAgICAgfCBzdHJpbmcgICAgIHwgTm8gICAgICAg IHwgVGhlIGxzbSBuYW1lIGFzc29jaWF0ZWQgd2l0aCB0aGUgZXZlbnQuICAgICAgICAgICAgICAg ICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLSsKK3wgcmVzICAgICAgICB8IGludGVnZXIgICAgfCBObyAgICAgICAgfCBUaGUgb3Bl cmF0aW9uIHJlc3VsdC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICB8CisrLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwor CitTdWNjZXNzIEF1ZGl0aW5nCiteXl5eXl5eXl5eXl5eXl5eCisKK0lQRSBzdXBwb3J0cyBzdWNj ZXNzIGF1ZGl0aW5nLiBXaGVuIGVuYWJsZWQsIGFsbCBldmVudHMgdGhhdCBwYXNzIElQRQorcG9s aWN5IGFuZCBhcmUgbm90IGJsb2NrZWQgd2lsbCBlbWl0IGFuIGF1ZGl0IGV2ZW50LiBUaGlzIGlz IGRpc2FibGVkIGJ5CitkZWZhdWx0LCBhbmQgY2FuIGJlIGVuYWJsZWQgdmlhIHRoZSBrZXJuZWwg Y29tbWFuZCBsaW5lCitgYGlwZS5zdWNjZXNzX2F1ZGl0PSgwfDEpYGAgb3IgdGhlIHNlY3VyaXR5 ZnMgbm9kZSwKK2BgL3N5cy9rZXJuZWwvc2VjdXJpdHkvaXBlL3N1Y2Nlc3NfYXVkaXRgYC4KKwor VGhpcyBpcyAqdmVyeSogbm9pc3ksIGFzIElQRSB3aWxsIGNoZWNrIGV2ZXJ5IHVzZXJzcGFjZSBi aW5hcnkgb24gdGhlCitzeXN0ZW0sIGJ1dCBpcyB1c2VmdWwgZm9yIGRlYnVnZ2luZyBwb2xpY2ll cy4KKworLi4gTk9URTo6CisKKyAgIElmIGEgdHJhZGl0aW9uYWwgTUFDIHN5c3RlbSBpcyBlbmFi bGVkIChTRUxpbnV4LCBhcHBhcm1vciwgc21hY2ssIGV0Y2V0ZXJhKSwKKyAgIGFsbCB3cml0ZXMg dG8gaXBlJ3Mgc2VjdXJpdHlmcyBub2RlcyByZXF1aXJlIGBgQ0FQX01BQ19BRE1JTmBgLgorCitQ cm9wZXJ0aWVzCistLS0tLS0tLS0tCisKK0FzIGV4cGxhaW5lZCBhYm92ZSwgSVBFIHByb3BlcnRp ZXMgYXJlIGBga2V5PXZhbHVlYGAgcGFpcnMgZXhwcmVzc2VkIGluCitJUEUgcG9saWN5LiBUd28g cHJvcGVydGllcyBhcmUgYnVpbHQtaW50byB0aGUgcG9saWN5IHBhcnNlcjogJ29wJyBhbmQKKydh Y3Rpb24nLiBUaGUgb3RoZXIgcHJvcGVydGllcyBhcmUgZGV0ZXJtaW5zdGljIGF0dHJpYnV0ZXMg dG8gZXhwcmVzcworYWNyb3NzIGZpbGVzLiBDdXJyZW50bHkgdGhvc2UgcHJvcGVydGllcyBhcmU6 ICdgYGJvb3RfdmVyaWZpZWRgYCcsCisnYGBkbXZlcml0eV9zaWduYXR1cmVgYCcsICdgYGRtdmVy aXR5X3Jvb3RoYXNoYGAnLCAnYGBmc3Zlcml0eV9zaWduYXR1cmVgYCcsCisnYGBmc3Zlcml0eV9k aWdlc3RgYCcuIEEgZGVzY3JpcHRpb24gb2YgYWxsIHByb3BlcnRpZXMgc3VwcG9ydGVkIGJ5IElQ RQorYXJlIGxpc3RlZCBiZWxvdzoKKworb3AKK35+CisKK0luZGljYXRlcyB0aGUgb3BlcmF0aW9u IGZvciBhIHJ1bGUgdG8gYXBwbHkgdG8uIE11c3QgYmUgaW4gZXZlcnkgcnVsZSwKK2FzIHRoZSBm aXJzdCB0b2tlbi4gSVBFIHN1cHBvcnRzIHRoZSBmb2xsb3dpbmcgb3BlcmF0aW9uczoKKworICAg YGBFWEVDVVRFYGAKKworICAgICAgUGVydGFpbnMgdG8gYW55IGZpbGUgYXR0ZW1wdGluZyB0byBi ZSBleGVjdXRlZCwgb3IgbG9hZGVkIGFzIGFuCisgICAgICBleGVjdXRhYmxlLgorCisgICBgYEZJ Uk1XQVJFYGA6CisKKyAgICAgIFBlcnRhaW5zIHRvIGZpcm13YXJlIGJlaW5nIGxvYWRlZCB2aWEg dGhlIGZpcm13YXJlX2NsYXNzIGludGVyZmFjZS4KKyAgICAgIFRoaXMgY292ZXJzIGJvdGggdGhl IHByZWFsbG9jYXRlZCBidWZmZXIgYW5kIHRoZSBmaXJtd2FyZSBmaWxlCisgICAgICBpdHNlbGYu CisKKyAgIGBgS01PRFVMRWBgOgorCisgICAgICBQZXJ0YWlucyB0byBsb2FkaW5nIGtlcm5lbCBt b2R1bGVzIHZpYSBgYG1vZHByb2JlYGAgb3IgYGBpbnNtb2RgYC4KKworICAgYGBLRVhFQ19JTUFH RWBgOgorCisgICAgICBQZXJ0YWlucyB0byBrZXJuZWwgaW1hZ2VzIGxvYWRpbmcgdmlhIGBga2V4 ZWNgYC4KKworICAgYGBLRVhFQ19JTklUUkFNRlNgYAorCisgICAgICBQZXJ0YWlucyB0byBpbml0 cmQgaW1hZ2VzIGxvYWRpbmcgdmlhIGBga2V4ZWMgLS1pbml0cmRgYC4KKworICAgYGBQT0xJQ1lg YDoKKworICAgICAgQ29udHJvbHMgbG9hZGluZyBwb2xjaWVzIHZpYSByZWFkaW5nIGEga2VybmVs LXNwYWNlIGluaXRpYXRlZCByZWFkLgorCisgICAgICBBbiBleGFtcGxlIG9mIHN1Y2ggaXMgbG9h ZGluZyBJTUEgcG9saWNpZXMgYnkgd3JpdGluZyB0aGUgcGF0aAorICAgICAgdG8gdGhlIHBvbGlj eSBmaWxlIHRvIGBgJHNlY3VyaXR5ZnMvaW1hL3BvbGljeWBgCisKKyAgIGBgWDUwOV9DRVJUYGA6 CisKKyAgICAgIENvbnRyb2xzIGxvYWRpbmcgSU1BIGNlcnRpZmljYXRlcyB0aHJvdWdoIHRoZSBL Y29uZmlncywKKyAgICAgIGBgQ09ORklHX0lNQV9YNTA5X1BBVEhgYCBhbmQgYGBDT05GSUdfRVZN X1g1MDlfUEFUSGBgLgorCithY3Rpb24KK35+fn5+fgorCisgICBEZXRlcm1pbmVzIHdoYXQgSVBF IHNob3VsZCBkbyB3aGVuIGEgcnVsZSBtYXRjaGVzLiBNdXN0IGJlIGluIGV2ZXJ5CisgICBydWxl LCBhcyB0aGUgZmluYWwgY2xhdXNlLiBDYW4gYmUgb25lIG9mOgorCisgICBgYEFMTE9XYGA6CisK KyAgICAgIElmIHRoZSBydWxlIG1hdGNoZXMsIGV4cGxpY2l0bHkgYWxsb3cgYWNjZXNzIHRvIHRo ZSByZXNvdXJjZSB0byBwcm9jZWVkCisgICAgICB3aXRob3V0IGV4ZWN1dGluZyBhbnkgbW9yZSBy dWxlcy4KKworICAgYGBERU5ZYGA6CisKKyAgICAgIElmIHRoZSBydWxlIG1hdGNoZXMsIGV4cGxp Y2l0bHkgcHJvaGliaXQgYWNjZXNzIHRvIHRoZSByZXNvdXJjZSB0bworICAgICAgcHJvY2VlZCB3 aXRob3V0IGV4ZWN1dGluZyBhbnkgbW9yZSBydWxlcy4KKworYm9vdF92ZXJpZmllZAorfn5+fn5+ fn5+fn5+fgorCisgICBUaGlzIHByb3BlcnR5IGNhbiBiZSB1dGlsaXplZCBmb3IgYXV0aG9yaXph dGlvbiBvZiB0aGUgZmlyc3Qgc3VwZXItYmxvY2sKKyAgIHRoYXQgZXhlY3V0ZXMgYSBmaWxlLiBU aGlzIGlzIGFsbW9zdCBhbHdheXMgaW5pdC4gVHlwaWNhbGx5IHRoaXMgaXMgdXNlZAorICAgZm9y IHN5c3RlbXMgd2l0aCBhbiBpbml0cmFtZnMgb3Igb3RoZXIgaW5pdGlhbCBkaXNrLCB3aGVyZSB0 aGlzIGlzIHVubW91bnRlZAorICAgYmVmb3JlIHRoZSBzeXN0ZW0gYmVjb21lcyBhdmFpbGFibGUs IGFuZCBpcyBub3QgY292ZXJlZCBieSBhbnkgb3RoZXIgcHJvcGVydHkuCisgICBUaGUgZm9ybWF0 IG9mIHRoaXMgcHJvcGVydHkgaXM6OgorCisgICAgICAgICBib290X3ZlcmlmaWVkPShUUlVFfEZB TFNFKQorCisKKyAgIC4uIFdBUk5JTkc6OgorCisgICAgICBUaGlzIHByb3BlcnR5IHdpbGwgdHJ1 c3QgYW55IGRpc2sgd2hlcmUgdGhlIGZpcnN0IGV4ZWN1dGlvbiBldmFsdWF0aW9uCisgICAgICBv Y2N1cnMuIElmIHlvdSBkbyAqTk9UKiBoYXZlIGEgc3RhcnR1cCBkaXNrIHRoYXQgaXMgdW5wYWNr ZWQgYW5kIHVubW91bnRlZAorICAgICAgKGxpa2UgaW5pdHJhbWZzKSwgdGhlbiBpdCB3aWxsIGF1 dG9tYXRpY2FsbHkgdHJ1c3QgdGhlIHJvb3QgZmlsZXN5c3RlbSBhbmQKKyAgICAgIHBvdGVudGlh bGx5IG92ZXJhdXRob3JpemUgdGhlIGVudGlyZSBkaXNrLgorCitkbXZlcml0eV9yb290aGFzaAor fn5+fn5+fn5+fn5+fn5+fn4KKworICAgVGhpcyBwcm9wZXJ0eSBjYW4gYmUgdXRpbGl6ZWQgZm9y IGF1dGhvcml6YXRpb24gb3IgcmV2b2NhdGlvbiBvZgorICAgc3BlY2lmaWMgZG0tdmVyaXR5IHZv bHVtZXMsIGlkZW50aWZpZWQgdmlhIHJvb3QgaGFzaC4gSXQgaGFzIGEKKyAgIGRlcGVuZGVuY3kg b24gdGhlIERNX1ZFUklUWSBtb2R1bGUuIFRoaXMgcHJvcGVydHkgaXMgY29udHJvbGxlZCBieSB0 aGUKKyAgIEtjb25maWcgYGBDT05GSUdfSVBFX1BST1BfRE1fVkVSSVRZYGAuIFRoZSBmb3JtYXQg b2YgdGhpcyBwcm9wZXJ0eQorICAgaXM6OgorCisgICAgICBkbXZlcml0eV9yb290aGFzaD1EaWdl c3ROYW1lOkhleGFkZWNpbWFsU3RyaW5nCisKKyAgIFRoZSBzdXBwb3J0ZWQgRGlnZXN0TmFtZXMg Zm9yIGRtdmVyaXR5X3Jvb3RoYXNoIGFyZSBbI2RtdmVyaXR5ZGlnZXN0c11fIFsjc2VjdXJlZGln ZXN0XV8gOgorCisgICAgICArIGJsYWtlMmItNTEyCisgICAgICArIGJsYWtlMnMtMjU2CisgICAg ICArIHNoYTEKKyAgICAgICsgc2hhMjU2CisgICAgICArIHNoYTM4NAorICAgICAgKyBzaGE1MTIK KyAgICAgICsgc2hhMy0yMjQKKyAgICAgICsgc2hhMy0yNTYKKyAgICAgICsgc2hhMy0zODQKKyAg ICAgICsgc2hhMy01MTIKKyAgICAgICsgbWQ0CisgICAgICArIG1kNQorICAgICAgKyBzbTMKKyAg ICAgICsgcm1kMTYwCisKK2RtdmVyaXR5X3NpZ25hdHVyZQorfn5+fn5+fn5+fn5+fn5+fn5+CisK KyAgIFRoaXMgcHJvcGVydHkgY2FuIGJlIHV0aWxpemVkIGZvciBhdXRob3JpemF0aW9uIG9mIGFs bCBkbS12ZXJpdHkgdm9sdW1lcworICAgdGhhdCBoYXZlIGEgc2lnbmVkIHJvb3RoYXNoIHRoYXQg Y2hhaW5zIHRvIGEga2V5cmluZyBzcGVjaWZpZWQgYnkgZG0tdmVyaXR5J3MKKyAgIGNvbmZpZ3Vy YXRpb24sIGVpdGhlciB0aGUgc3lzdGVtIHRydXN0ZWQga2V5cmluZywgb3IgdGhlIHNlY29uZGFy eSBrZXlyaW5nLgorICAgSXQgaGFzIGFuIGFkZGl0aW9uYWwgZGVwZW5kZW5jeSBvbiB0aGUgYGBE TV9WRVJJVFlfVkVSSUZZX1JPT1RIQVNIX1NJR2BgCisgICBLY29uZmlnLiBUaGlzIHByb3BlcnR5 IGlzIGNvbnRyb2xsZWQgYnkgdGhlIEtjb25maWcKKyAgIGBgQ09ORklHX0lQRV9QUk9QX0RNX1ZF UklUWWBgLiBUaGUgZm9ybWF0IG9mIHRoaXMgcHJvcGVydHkgaXM6OgorCisgICAgICBkbXZlcml0 eV9zaWduYXR1cmU9KFRSVUV8RkFMU0UpCisKK2ZzdmVyaXR5X2RpZ2VzdAorfn5+fn5+fn5+fn5+ fn5+CisKKyAgIFRoaXMgcHJvcGVydHkgY2FuIGJlIHV0aWxpemVkIGZvciBhdXRob3JpemF0aW9u IG9yIHJldm9jYXRpb24gb2YKKyAgIHNwZWNpZmljIGZzdmVyaXR5IGVuYWJsZWQgZmlsZSwgaWRl bnRpZmllZCB2aWEgaXRzIGZzdmVyaXR5IGRpZ2VzdC4KKyAgIEl0IGhhcyBhIGRlcGVuZGVuY3kg b24gdGhlIEZTX1ZFUklUWSBtb2R1bGUuIFRoaXMgcHJvcGVydHkgaXMKKyAgIGNvbnRyb2xsZWQg YnkgdGhlIEtjb25maWcgYGBDT05GSUdfSVBFX1BST1BfRlNfVkVSSVRZYGAuCisgICBUaGUgZm9y bWF0IG9mIHRoaXMgcHJvcGVydHkgaXM6OgorCisgICAgICBmc3Zlcml0eV9kaWdlc3Q9RGlnZXN0 TmFtZTpIZXhhZGVjaW1hbFN0cmluZworCisgICBUaGUgc3VwcG9ydGVkIERpZ2VzdE5hbWVzIGZv ciBkbXZlcml0eV9yb290aGFzaCBhcmUgWyNmc3Zlcml0eWRpZ2VzdF0gWyNzZWN1cmVkaWdlc3Rd XyA6CisKKyAgICAgICsgc2hhMjU2CisgICAgICArIHNoYTUxMgorCitmc3Zlcml0eV9zaWduYXR1 cmUKK35+fn5+fn5+fn5+fn5+fn5+fgorCitWZXJzaW9uIDEKKworICAgVGhpcyBwcm9wZXJ0eSBj YW4gYmUgdXRpbGl6ZWQgZm9yIGF1dGhvcml6YXRpb24gb2YgYWxsIGZzdmVyaXR5IGVuYWJsZWQK KyAgIGZpbGVzIHRoYXQgaXMgdmVyaWZpZWQgYnkgZnN2ZXJpdHkuIFRoZSBrZXlyaW5nIHRoYXQg dGhlIHNpZ25hdHVyZSBpcworICAgdmVyaWZpZWQgYWdhaW5zdCBpcyBzdWJqZWN0IHRvIGZzdmVy aXR5J3MgY29uZmlndXJhdGlvbiwgdHlwaWNhbGx5IHRoZSBmc3Zlcml0eQorICAga2V5cmluZy4g SXQgaGFzIGEgZGVwZW5kZW5jeSBvbiB0aGUgYGBDT05GSUdfRlNfVkVSSVRZX0JVSUxUSU5fU0lH TkFUVVJFU2BgCisgICBLY29uZmlnLiBUaGlzIHByb3BlcnR5IGlzIGNvbnRyb2xsZWQgYnkgdGhl IEtjb25maWcKKyAgIGBgQ09ORklHX0lQRV9QUk9QX0ZTX1ZFUklUWWBgLiBUaGUgZm9ybWF0IG9m IHRoaXMgcHJvcGVydHkgaXM6OgorCisgICAgICBmc3Zlcml0eV9zaWduYXR1cmU9KFRSVUV8RkFM U0UpCisKK1BvbGljeSBFeGFtcGxlcworLS0tLS0tLS0tLS0tLS0tCisKK0FsbG93IGFsbAorfn5+ fn5+fn5+CisKKzo6CisKKyAgIHBvbGljeV9uYW1lPUFsbG93X0FsbCBwb2xpY3lfdmVyc2lvbj0w LjAuMAorICAgREVGQVVMVCBhY3Rpb249QUxMT1cKKworQWxsb3cgb25seSBpbml0aWFsIHN1cGVy YmxvY2sKK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CisKKzo6CisKKyAgIHBvbGljeV9u YW1lPUFsbG93X0FsbF9Jbml0aWFsX1NCIHBvbGljeV92ZXJzaW9uPTAuMC4wCisgICBERUZBVUxU IGFjdGlvbj1ERU5ZCisKKyAgIG9wPUVYRUNVVEUgYm9vdF92ZXJpZmllZD1UUlVFIGFjdGlvbj1B TExPVworCitBbGxvdyBhbnkgc2lnbmVkIGRtLXZlcml0eSB2b2x1bWUgYW5kIHRoZSBpbml0aWFs IHN1cGVyYmxvY2sKK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+ fn5+fn5+fn5+fn5+fn5+fgorCis6OgorCisgICBwb2xpY3lfbmFtZT1BbGxvd1NpZ25lZEFuZElu aXRpYWwgcG9saWN5X3ZlcnNpb249MC4wLjAKKyAgIERFRkFVTFQgYWN0aW9uPURFTlkKKworICAg b3A9RVhFQ1VURSBib290X3ZlcmlmaWVkPVRSVUUgYWN0aW9uPUFMTE9XCisgICBvcD1FWEVDVVRF IGRtdmVyaXR5X3NpZ25hdHVyZT1UUlVFIGFjdGlvbj1BTExPVworCitQcm9oaWJpdCBleGVjdXRp b24gZnJvbSBhIHNwZWNpZmljIGRtLXZlcml0eSB2b2x1bWUKK35+fn5+fn5+fn5+fn5+fn5+fn5+ fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorCis6OgorCisgICBwb2xpY3lfbmFtZT1B bGxvd1NpZ25lZEFuZEluaXRpYWwgcG9saWN5X3ZlcnNpb249MC4wLjAKKyAgIERFRkFVTFQgYWN0 aW9uPURFTlkKKworICAgb3A9RVhFQ1VURSBkbXZlcml0eV9yb290aGFzaD1zaGEyNTY6Y2QyYzVi YWU3YzZjNTc5ZWRhYWU0MzUzMDQ5ZDU4ZWI1ZjJlOGJlMDI0NGJmMDUzNDViYzhlNWVkMjU3YmFm ZiBhY3Rpb249REVOWQorCisgICBvcD1FWEVDVVRFIGJvb3RfdmVyaWZpZWQ9VFJVRSBhY3Rpb249 QUxMT1cKKyAgIG9wPUVYRUNVVEUgZG12ZXJpdHlfc2lnbmF0dXJlPVRSVUUgYWN0aW9uPUFMTE9X CisKK0FsbG93IG9ubHkgYSBzcGVjaWZpYyBkbS12ZXJpdHkgdm9sdW1lCit+fn5+fn5+fn5+fn5+ fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorCis6OgorCisgICBwb2xpY3lfbmFtZT1BbGxvd1Np Z25lZEFuZEluaXRpYWwgcG9saWN5X3ZlcnNpb249MC4wLjAKKyAgIERFRkFVTFQgYWN0aW9uPURF TlkKKworICAgb3A9RVhFQ1VURSBkbXZlcml0eV9yb290aGFzaD1zaGEyNTY6NDAxZmNlYzU5NDQ4 MjNhZTEyZjYyNzI2ZTgxODQ0MDdhNWZhOTU5OTc4M2YwMzBkZWMxNDY5MzggYWN0aW9uPUFMTE9X CisKK0FsbG93IGFueSBzaWduZWQgZnMtdmVyaXR5IGZpbGUKK35+fn5+fn5+fn5+fn5+fn5+fn5+ fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorCis6OgorCisgICBwb2xp Y3lfbmFtZT1BbGxvd1NpZ25lZEZTVmVyaXR5IHBvbGljeV92ZXJzaW9uPTAuMC4wCisgICBERUZB VUxUIGFjdGlvbj1ERU5ZCisKKyAgIG9wPUVYRUNVVEUgZnN2ZXJpdHlfc2lnbmF0dXJlPVRSVUUg YWN0aW9uPUFMTE9XCisKK1Byb2hpYml0IGV4ZWN1dGlvbiBvZiBhIHNwZWNpZmljIGZzLXZlcml0 eSBmaWxlCit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+ fn4KKworOjoKKworICAgcG9saWN5X25hbWU9UHJvaGliaXRTcGVjaWZpY0ZTVkYgcG9saWN5X3Zl cnNpb249MC4wLjAKKyAgIERFRkFVTFQgYWN0aW9uPURFTlkKKworICAgb3A9RVhFQ1VURSBmc3Zl cml0eV9kaWdlc3Q9c2hhMjU2OmZkODhmMmI4ODI0ZTE5N2Y4NTBiZjRjNTEwOWJlYTVjZjBlZTM4 MTA0ZjcxMDg0M2JiNzJkYTc5NmJhNWFmOWUgYWN0aW9uPURFTlkKKyAgIG9wPUVYRUNVVEUgYm9v dF92ZXJpZmllZD1UUlVFIGFjdGlvbj1BTExPVworICAgb3A9RVhFQ1VURSBkbXZlcml0eV9zaWdu YXR1cmU9VFJVRSBhY3Rpb249QUxMT1cKKworQWRkaXRpb25hbCBJbmZvcm1hdGlvbgorLS0tLS0t LS0tLS0tLS0tLS0tLS0tLQorCistIGBHaXRodWIgUmVwb3NpdG9yeSA8aHR0cHM6Ly9naXRodWIu Y29tL21pY3Jvc29mdC9pcGU+YF8KKy0gYERlc2lnbiBEb2N1bWVudGF0aW9uIDwvc2VjdXJpdHkv aXBlPmBfCisKK0ZBUQorLS0tCisKK1E6CisgICBXaGF0J3MgdGhlIGRpZmZlcmVuY2UgYmV0d2Vl biBvdGhlciBMU01zIHdoaWNoIHByb3ZpZGUgYSBtZWFzdXJlIG9mCisgICB0cnVzdC1iYXNlZCBh Y2Nlc3MgY29udHJvbD8KKworQToKKworICAgSW4gZ2VuZXJhbCwgdGhlcmUncyB0d28gb3RoZXIg TFNNcyB0aGF0IGNhbiBwcm92aWRlIHNpbWlsYXIgZnVuY3Rpb25hbGl0eToKKyAgIElNQSwgYW5k IExvYWRwaW4uCisKKyAgIElNQSBhbmQgSVBFIGFyZSBmdW5jdGlvbmFsbHkgdmVyeSBzaW1pbGFy LiBUaGUgc2lnbmlmaWNhbnQgZGlmZmVyZW5jZSBiZXR3ZWVuCisgICB0aGUgdHdvIGlzIHRoZSBw b2xpY3kuIFsjZGV2ZG9jXV8KKworICAgTG9hZHBpbiBhbmQgSVBFIGRpZmZlciBmYWlybHkgZHJh bWF0aWNhbGx5LCBhcyBMb2FkcGluIGNvbnRyb2xzIG9ubHkgdGhlIElQRQorICAgZXF1aXZhbGVu dCBvZiBgYEtFUk5FTF9SRUFEYGAsIHdoZXJlYXMgSVBFIGlzIGNhcGFibGUgb2YgY29udHJvbGxp bmcgZXhlY3V0aW9uLAorICAgb24gdG9wIG9mIGBgS0VSTkVMX1JFQURgYC4gVGhlIHRydXN0IG1v ZGVsIGlzIGFsc28gZGlmZmVyZW50OyBMb2FkcGluIHJvb3RzIGl0cworICAgdHJ1c3QgaW4gdGhl IGluaXRpYWwgc3VwZXItYmxvY2ssIGluc3RlYWQsIElQRSByb290cyBpdHMgdHJ1c3QgaW4gdGhl IGtlcm5lbAorICAgaXRzZWxmICh2aWEgYGBTWVNURU1fVFJVU1RFRF9LRVlTYGApLgorCistLS0t LS0tLS0tLQorCisuLiBbI2RpZ2xpbV0gMTogaHR0cHM6Ly9sb3JlLmtlcm5lbC5vcmcvYnBmLzRk NjkzMmU5NmQ3NzQyMjdiNDI3MjFkOWY2NDViYTUxQGh1YXdlaS5jb20vVC8KKworLi4gWyNpbnRl cnByZXRlcnNdIFRoZXJlIGlzIGBzb21lIGludGVyZXN0IGluIHNvbHZpbmcgdGhpcyBpc3N1ZSA8 aHR0cHM6Ly9sb3JlLmtlcm5lbC5vcmcvbGttbC8yMDIyMDMyMTE2MTU1Ny40OTUzODgtMS1taWNA ZGlnaWtvZC5uZXQvPmBfLgorCisuLiBbI2RldmRvY10gUGxlYXNlIHNlZSBgRG9jdW1lbnRhdGlv bi9zZWN1cml0eS9pcGUucnN0YCBmb3IgbW9yZSBvbiB0aGlzIHRvcGljLgorCisuLiBbI2ZzdmVy aXR5ZGlnZXN0XSBUaGVzZSBoYXNoIGFsZ29yaXRobXMgYXJlIGJhc2VkIG9uIHZhbHVlcyBhY2Nl cHRlZCBieSBmc3Zlcml0eS11dGlsczsKKyAgICAgICAgICAgICAgICAgICAgIElQRSBkb2VzIG5v dCBpbXBvc2UgYW55IHJlc3RyaWN0aW9ucyBvbiB0aGUgZGlnZXN0IGFsZ29yaXRobSBpdHNlbGY7 CisgICAgICAgICAgICAgICAgICAgICB0aHVzLCB0aGlzIGxpc3QgbWF5IGJlIG91dCBvZiBkYXRl LgorCisuLiBbI2RtdmVyaXR5ZGlnZXN0c10gVGhlc2UgaGFzaCBhbGdvcml0aG1zIGFyZSBiYXNl ZCBvbiB2YWx1ZXMgYWNjZXB0ZWQgYnkgZG0tdmVyaXR5LAorICAgICAgICAgICAgICAgICAgICAg IHNwZWNpZmljYWxseSBgYGNyeXB0b19hbGxvY19haGFzaGBgIGluIGBgdmVyaXR5X2N0cmBgOyBg YHZlcml0eXNldHVwYGAKKyAgICAgICAgICAgICAgICAgICAgICBkb2VzIHN1cHBvcnQgbW9yZSBh bGdvcml0aG1zIHRoYW4gdGhlIGxpc3QgYWJvdmUuIElQRSBkb2VzIG5vdCBpbXBvc2UKKyAgICAg ICAgICAgICAgICAgICAgICBhbnkgcmVzdHJpY3Rpb25zIG9uIHRoZSBkaWdlc3QgYWxnb3JpdGht IGl0c2VsZjsgdGh1cywgdGhpcyBsaXN0CisgICAgICAgICAgICAgICAgICAgICAgbWF5IGJlIG91 dCBvZiBkYXRlLgorCisuLiBbI3NlY3VyZWRpZ2VzdF0gUGxlYXNlIGVuc3VyZSB5b3UgYXJlIHVz aW5nIGNyeXB0b2dyYXBoaWNhbGx5IHNlY3VyZSBoYXNoIGZ1bmN0aW9uczsKKyAgICAgICAgICAg ICAgICAgICBqdXN0IGJlY2F1c2Ugc29tZXRoaW5nIGlzICpzdXBwb3J0ZWQqIGRvZXMgbm90IG1l YW4gaXQgaXMgKnNlY3VyZSouCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRl L2tlcm5lbC1wYXJhbWV0ZXJzLnR4dCBiL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUva2VybmVs LXBhcmFtZXRlcnMudHh0CmluZGV4IDZjZmE2ZTM5OTZjZi4uNmYyODY4MTEzMTM1IDEwMDY0NAot LS0gYS9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dAorKysg Yi9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dApAQCAtMjIw OSw2ICsyMjA5LDE4IEBACiAJaXBjbW5pX2V4dGVuZAlbS05MXSBFeHRlbmQgdGhlIG1heGltdW0g bnVtYmVyIG9mIHVuaXF1ZSBTeXN0ZW0gVgogCQkJSVBDIGlkZW50aWZpZXJzIGZyb20gMzIsNzY4 IHRvIDE2LDc3NywyMTYuCiAKKwlpcGUuZW5mb3JjZT0JW0lQRV0KKwkJCUZvcm1hdDogPGJvb2w+ CisJCQlEZXRlcm1pbmUgd2hldGhlciBJUEUgc3RhcnRzIGluIHBlcm1pc3NpdmUgKDApIG9yCisJ CQllbmZvcmNlICgxKSBtb2RlLiBUaGUgZGVmYXVsdCBpcyBlbmZvcmNlLgorCisJaXBlLnN1Y2Nl c3NfYXVkaXQ9CisJCQlbSVBFXQorCQkJRm9ybWF0OiA8Ym9vbD4KKwkJCVN0YXJ0IElQRSB3aXRo IHN1Y2Nlc3MgYXVkaXRpbmcgZW5hYmxlZCwgZW1pdHRpbmcKKwkJCWFuIGF1ZGl0IGV2ZW50IHdo ZW4gYSBiaW5hcnkgaXMgYWxsb3dlZC4gVGhlIGRlZmF1bHQKKwkJCWlzIDAuCisKIAlpcnFhZmZp bml0eT0JW1NNUF0gU2V0IHRoZSBkZWZhdWx0IGlycSBhZmZpbml0eSBtYXNrCiAJCQlUaGUgYXJn dW1lbnQgaXMgYSBjcHUgbGlzdCwgYXMgZGVzY3JpYmVkIGFib3ZlLgogCmRpZmYgLS1naXQgYS9E b2N1bWVudGF0aW9uL3NlY3VyaXR5L2luZGV4LnJzdCBiL0RvY3VtZW50YXRpb24vc2VjdXJpdHkv aW5kZXgucnN0CmluZGV4IDZlZDhkMmZhNmY5ZS4uYTUyNDhkNGZkNTEwIDEwMDY0NAotLS0gYS9E b2N1bWVudGF0aW9uL3NlY3VyaXR5L2luZGV4LnJzdAorKysgYi9Eb2N1bWVudGF0aW9uL3NlY3Vy aXR5L2luZGV4LnJzdApAQCAtMTgsMyArMTgsNCBAQCBTZWN1cml0eSBEb2N1bWVudGF0aW9uCiAg ICBkaWdzaWcKICAgIGxhbmRsb2NrCiAgICBzZWNyZXRzL2luZGV4CisgICBpcGUKZGlmZiAtLWdp dCBhL0RvY3VtZW50YXRpb24vc2VjdXJpdHkvaXBlLnJzdCBiL0RvY3VtZW50YXRpb24vc2VjdXJp dHkvaXBlLnJzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjg1ZTE3 MGNlODY0YQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vc2VjdXJpdHkvaXBlLnJz dApAQCAtMCwwICsxLDQzNiBAQAorLi4gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAK KworSW50ZWdyaXR5IFBvbGljeSBFbmZvcmNlbWVudCAoSVBFKSAtIEtlcm5lbCBEb2N1bWVudGF0 aW9uCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT0KKworLi4gTk9URTo6CisKKyAgIFRoaXMgaXMgZG9jdW1lbnRhdGlvbiB0YXJnZXRlZCBh dCBkZXZlbG9wZXJzLCBpbnN0ZWFkIG9mIGFkbWluaXN0cmF0b3JzLgorICAgSWYgeW91J3JlIGxv b2tpbmcgZm9yIGRvY3VtZW50YXRpb24gb24gdGhlIHVzYWdlIG9mIElQRSwgcGxlYXNlIHNlZQor ICAgYERvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvTFNNL2lwZS5yc3RgCisKK0hpc3RvcmljYWwg TW90aXZhdGlvbgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSBvcmlnaW5hbCBpc3N1ZSB0 aGF0IHByb21wdGVkIElQRSdzIGltcGxlbWVudGF0aW9uIHdhcyB0aGUgY3JlYXRpb24KK29mIGEg bG9ja2VkLWRvd24gc3lzdGVtLiBUaGlzIHN5c3RlbSB3b3VsZCBiZSBib3JuLXNlY3VyZSwgYW5k IGhhdmUKK3N0cm9uZyBpbnRlZ3JpdHkgZ3VhcmFudGVlcyBvdmVyIGJvdGggdGhlIGV4ZWN1dGFi bGUgY29kZSwgYW5kIHNwZWNpZmljCisqZGF0YSBmaWxlcyogb24gdGhlIHN5c3RlbSwgdGhhdCB3 ZXJlIGNyaXRpY2FsIHRvIGl0cyBmdW5jdGlvbi4gVGhlc2UKK3NwZWNpZmljIGRhdGEgZmlsZXMg d291bGQgbm90IGJlIHJlYWRhYmxlIHVubGVzcyB0aGV5IHBhc3NlZCBpbnRlZ3JpdHkKK3BvbGlj eS4gQSBtYW5kYXRvcnkgYWNjZXNzIGNvbnRyb2wgc3lzdGVtIHdvdWxkIGJlIHByZXNlbnQsIGFu ZAorYXMgYSByZXN1bHQsIHhhdHRycyB3b3VsZCBoYXZlIHRvIGJlIHByb3RlY3RlZC4gVGhpcyBs ZWFkIHRvIGEgc2VsZWN0aW9uCitvZiB3aGF0IHdvdWxkIHByb3ZpZGUgdGhlIGludGVncml0eSBj bGFpbXMuIEF0IHRoZSB0aW1lLCB0aGVyZSB3ZXJlIHR3bworbWFpbiBtZWNoYW5pc21zIGNvbnNp ZGVyZWQgdGhhdCBjb3VsZCBndWFyYW50ZWUgaW50ZWdyaXR5IGZvciB0aGUgc3lzdGVtCit3aXRo IHRoZXNlIHJlcXVpcmVtZW50czoKKworICAxLiBJTUEgKyBFVk0gU2lnbmF0dXJlcworICAyLiBE TS1WZXJpdHkKKworQm90aCBvcHRpb25zIHdlcmUgY2FyZWZ1bGx5IGNvbnNpZGVyZWQsIGhvd2V2 ZXIgdGhlIGNob2ljZSB0byB1c2UgRE0tVmVyaXR5CitvdmVyIElNQStFVk0gYXMgdGhlICppbnRl Z3JpdHkgbWVjaGFuaXNtKiBpbiB0aGUgb3JpZ2luYWwgdXNlIGNhc2Ugb2YgSVBFCit3YXMgZHVl IHRvIHRocmVlIG1haW4gcmVhc29uczoKKworICAxLiBQcm90ZWN0aW9uIG9mIGFkZGl0aW9uYWwg YXR0YWNrIHZlY3RvcnM6CisKKyAgICAqIFdpdGggSU1BK0VWTSwgd2l0aG91dCBhbiBlbmNyeXB0 aW9uIHNvbHV0aW9uLCB0aGUgc3lzdGVtIGlzIHZ1bG5lcmFibGUKKyAgICAgIHRvIG9mZmxpbmUg YXR0YWNrIGFnYWluc3QgdGhlIGFmb3JlbWV0aW9uZWQgc3BlY2lmaWMgZGF0YSBmaWxlcy4KKwor ICAgICAgVW5saWtlIGV4ZWN1dGFibGVzLCByZWFkIG9wZXJhdGlvbnMgKGxpa2UgdGhvc2Ugb24g dGhlIHByb3RlY3RlZCBkYXRhCisgICAgICBmaWxlcyksIGNhbm5vdCBiZSBlbmZvcmNlZCB0byBi ZSBnbG9iYWxseSBpbnRlZ3J0aXkgdmVyaWZpZWQuIFRoaXMgbWVhbnMKKyAgICAgIHRoZXJlIG11 c3QgYmUgc29tZSBmb3JtIG9mIHNlbGVjdG9yIHRvIGRldGVybWluZSB3aGV0aGVyIGEgcmVhZCBz aG91bGQKKyAgICAgIGVuZm9yY2UgdGhlIGludGVncml0eSBwb2xpY3ksIG9yIGl0IHNob3VsZCBu b3QuCisKKyAgICAgIEF0IHRoZSB0aW1lLCB0aGlzIHdhcyBkb25lIHdpdGggbWFuZGF0b3J5IGFj Y2VzcyBjb250cm9sIGxhYmVscy4gQW4gSU1BCisgICAgICBwb2xpY3kgd291bGQgaW5kaWNhdGUg d2hhdCBsYWJlbHMgcmVxdWlyZWQgaW50ZWdyaXR5IHZlcmlmaWNhdGlvbiwgd2hpY2gKKyAgICAg IHByZXNlbnRlZCBhbiBpc3N1ZTogRVZNIHdvdWxkIHByb3RlY3QgdGhlIGxhYmVsLCBidXQgaWYg YW4gYXR0YWNrZXIgY291bGQKKyAgICAgIG1vZGlmeSBmaWxlc3lzdGVtIG9mZmxpbmUsIHRoZSBh dHRhY2tlciBjb3VsZCB3aXBlIGFsbCB0aGUgeGF0dHJzIC0KKyAgICAgIGluY2x1ZGluZyB0aGUg U0VMaW51eCBsYWJlbHMgdGhhdCB3b3VsZCBiZSB1c2VkIHRvIGRldGVybWluZSB3aGV0aGVyIHRo ZQorICAgICAgZmlsZSBzaG91bGQgYmUgc3ViamVjdCB0byBpbnRlZ3JpdHkgcG9saWN5LgorCisg ICAgICBXaXRoIERNLVZlcml0eSwgYXMgdGhlIHhhdHRycyBhcmUgc2F2ZWQgYXMgcGFydCBvZiB0 aGUgbWVya2VsIHRyZWUsIGlmCisgICAgICBvZmZsaW5lIG1vdW50IG9jY3VycyBhZ2FpbnN0IHRo ZSBmaWxlc3lzdGVtIHByb3RlY3RlZCBieSBkbS12ZXJpdHksIHRoZQorICAgICAgY2hlY2tzdW0g bm8gbG9uZ2VyIG1hdGNoZXMgYW5kIHRoZSBmaWxlIGZhaWxzIHRvIGJlIHJlYWQuCisKKyAgICAq IEFzIHVzZXJzcGFjZSBiaW5hcmllcyBhcmUgcGFnZWQgaW4gTGludXgsIGRtLXZlcml0eSBhbHNv IG9mZmVycyB0aGUKKyAgICAgIGFkZGl0aW9uYWwgcHJvdGVjdGlvbiBhZ2FpbnN0IGEgaG9zdGls ZSBibG9jayBkZXZpY2UuIEluIHN1Y2ggYW4gYXR0YWNrLAorICAgICAgdGhlIGJsb2NrIGRldmlj ZSByZXBvcnRzIHRoZSBhcHByb3ByaWF0ZSBjb250ZW50IGZvciB0aGUgSU1BIGhhc2gKKyAgICAg IGluaXRpYWxseSwgcGFzc2luZyB0aGUgcmVxdWlyZWQgaW50ZWdyaXR5IGNoZWNrLiBUaGVuLCBv biB0aGUgcGFnZSBmYXVsdAorICAgICAgdGhhdCBhY2Nlc3NlcyB0aGUgcmVhbCBkYXRhLCB3aWxs IHJlcG9ydCB0aGUgYXR0YWNrZXIncyBwYXlsb2FkLiBTaW5jZQorICAgICAgZG0tdmVyaXR5IHdp bGwgY2hlY2sgdGhlIGRhdGEgd2hlbiB0aGUgcGFnZSBmYXVsdCBvY2N1cnMgKGFuZCB0aGUgZGlz aworICAgICAgYWNjZXNzKSwgdGhpcyBhdHRhY2sgaXMgbWl0aWdhdGVkLgorCisgIDIuIFBlcmZv cm1hbmNlOgorCisgICAgKiBkbS12ZXJpdHkgcHJvdmlkZXMgaW50ZWdyaXR5IHZlcmlmaWNhdGlv biBvbiBkZW1hbmQgYXMgYmxvY2tzIGFyZQorICAgICAgcmVhZCB2ZXJzdXMgcmVxdWlyaW5nIHRo ZSBlbnRpcmUgZmlsZSBiZWluZyByZWFkIGludG8gbWVtb3J5IGZvcgorICAgICAgdmFsaWRhdGlv bi4KKworICAzLiBTaW1wbGljaXR5IG9mIHNpZ25pbmc6CisKKyAgICAqIE5vIG5lZWQgZm9yIHR3 byBzaWduYXR1cmVzIChJTUEsIHRoZW4gRVZNKTogb25lIHNpZ25hdHVyZSBjb3ZlcnMKKyAgICAg IGFuIGVudGlyZSBibG9jayBkZXZpY2UuCisgICAgKiBTaWduYXR1cmVzIGNhbiBiZSBzdG9yZWQg ZXh0ZXJuYWxseSB0byB0aGUgZmlsZXN5c3RlbSBtZXRhZGF0YS4KKyAgICAqIFRoZSBzaWduYXR1 cmUgc3VwcG9ydHMgYW4geC41MDktYmFzZWQgc2lnbmluZyBpbmZyYXN0cnVjdHVyZS4KKworVGhl IG5leHQgc3RlcCB3YXMgdG8gY2hvb3NlIGEgKnBvbGljeSogdG8gZW5mb3JjZSB0aGUgaW50ZWdy aXR5IG1lY2hhbmlzbS4KK1RoZSBtaW5pbXVtIHJlcXVpcmVtZW50cyBmb3IgdGhlIHBvbGljeSB3 ZXJlOgorCisgIDEuIFRoZSBwb2xpY3kgaXRzZWxmIG11c3QgYmUgaW50ZWdyaXR5IHZlcmlmaWVk IChwcmV2ZW50aW5nIHRyaXZpYWwKKyAgICAgYXR0YWNrIGFnYWluc3QgaXQpLgorICAyLiBUaGUg cG9saWN5IGl0c2VsZiBtdXN0IGJlIHJlc2lzdGFudCB0byByb2xsYmFjayBhdHRhY2tzLgorICAz LiBUaGUgcG9saWN5IGVuZm9yY2VtZW50IG11c3QgaGF2ZSBhIHBlcm1pc3NpdmUtbGlrZSBtb2Rl LgorICA0LiBUaGUgcG9saWN5IG11c3QgYmUgYWJsZSB0byBiZSB1cGRhdGVkLCBpbiBpdHMgZW50 aXJldHksIHdpdGhvdXQKKyAgICAgYSByZWJvb3QuCisgIDUuIFBvbGljeSB1cGRhdGVzIG11c3Qg YmUgYXRvbWljLgorICA2LiBUaGUgcG9saWN5IG11c3Qgc3VwcG9ydCAqcmV2b2NhdGlvbnMqIG9m IHByZXZpb3VzbHkgYXV0aG9yZWQKKyAgICAgY29tcG9uZW50cy4KKyAgNy4gVGhlIHBvbGljeSBt dXN0IGJlIGF1ZGl0YWJsZSwgYXQgYW55IHBvaW50LW9mLXRpbWUuCisKK0lNQSwgYXMgdGhlIG9u bHkgaW50ZWdyaXR5IHBvbGljeSBtZWNoYW5pc20gYXQgdGhlIHRpbWUsIHdhcworY29uc2lkZXJl ZCBhZ2FpbnN0IHRoZXNlIGxpc3Qgb2YgcmVxdWlyZW1lbnRzLCBhbmQgZGlkIG5vdCBmdWxmaWxs CithbGwgb2YgdGhlIG1pbmltdW0gcmVxdWlyZW1lbnRzLiBFeHRlbmRpbmcgSU1BIHRvIGNvdmVy IHRoZXNlCityZXF1aXJlbWVudHMgd2FzIGNvbnNpZGVyZWQsIGJ1dCB1bHRpbWF0ZWx5IGRpc2Nh cmRlZCBmb3IgYQordHdvIHJlYXNvbnM6CisKKyAgMS4gUmVncmVzc2lvbiByaXNrOyBtYW55IG9m IHRoZXNlIGNoYW5nZXMgd291bGQgcmVzdWx0IGluCisgICAgIGRyYW1hdGljIGNvZGUgY2hhbmdl cyB0byBJTUEsIHdoaWNoIGlzIGFscmVhZHkgcHJlc2VudCBpbiB0aGUKKyAgICAga2VybmVsLCBh bmQgdGhlcmVmb3JlIG1pZ2h0IGltcGFjdCB1c2Vycy4KKworICAyLiBJTUEgd2FzIHVzZWQgaW4g dGhlIHN5c3RlbSBmb3IgbWVhc3VyZW1lbnQgYW5kIGF0dGVzdGF0aW9uOworICAgICBzZXBhcmF0 aW9uIG9mIG1lYXN1cmVtZW50IHBvbGljeSBmcm9tIGxvY2FsIGludGVncml0eSBwb2xpY3kKKyAg ICAgZW5mb3JjZW1lbnQgd2FzIGNvbnNpZGVyZWQgZmF2b3JhYmxlLgorCitEdWUgdG8gdGhlc2Ug cmVhc29ucywgaXQgd2FzIGRlY2lkZWQgdGhhdCBhIG5ldyBMU00gc2hvdWxkIGJlIGNyZWF0ZWQs Cit3aG9zZSByZXNwb25zaWJpbGl0eSB3b3VsZCBiZSBvbmx5IHRoZSBsb2NhbCBpbnRlZ3JpdHkg cG9saWN5IGVuZm9yY2VtZW50LgorCitSb2xlIGFuZCBTY29wZQorLS0tLS0tLS0tLS0tLS0KKwor SVBFLCBhcyBpdHMgbmFtZSBpbXBsaWVzLCBpcyBmdW5kYW1lbnRhbGx5IGFuIGludGVncml0eSBw b2xpY3kgZW5mb3JjZW1lbnQKK3NvbHV0aW9uOyBJUEUgZG9lcyBub3QgbWFuZGF0ZSBob3cgaW50 ZWdyaXR5IGlzIHByb3ZpZGVkLCBidXQgaW5zdGVhZAorbGVhdmVzIHRoYXQgZGVjaXNpb24gdG8g dGhlIHN5c3RlbSBhZG1pbmlzdHJhdG9yIHRvIHNldCB0aGUgc2VjdXJpdHkgYmFyLAordmlhIHRo ZSBtZWNoYW5pc21zIHRoYXQgdGhleSBzZWxlY3QgdGhhdCBzdWl0IHRoZWlyIGluZGl2aWR1YWwg bmVlZHMuCitUaGVyZSBhcmUgc2V2ZXJhbCBkaWZmZXJlbnQgaW50ZWdyaXR5IHNvbHV0aW9ucyB0 aGF0IHByb3ZpZGUgYSBkaWZmZXJlbnQKK2xldmVsIG9mIHNlY3VyaXR5IGd1YXJhbnRlZXM7IGFu ZCBJUEUgYWxsb3dzIHN5c2FkbWlucyB0byBleHByZXNzIHBvbGljeSBmb3IKK3RoZW9yZXRpY2Fs bHkgYWxsIG9mIHRoZW0uCisKK0lQRSBhZGRpdGlvbmFsbHkgZG9lcyBub3QgcHJvdmlkZSBhIG1l Y2hhbmlzbSB0aGF0IHByb3ZpZGVzIGludGVncml0eQorYnkgaXRzZWxmOiB0aGVyZSBhcmUgYmV0 dGVyIGxheWVycyB0byBjcmVhdGUgc3VjaCBzeXN0ZW1zLCBhbmQgYSBtZWNoYW5pc20KK29mIHBy b3ZpbmcgaW50ZWdyaXR5IGhhcyBuZXh0IHRvIG5vdGhpbmcgdG8gZG8gd2l0aCB0aGUgcG9saWN5 IG9mIGVuZm9yY2luZwordGhhdCBpbnRlZ3JpdHkgY2xhaW0uCisKK1RoZXJlZm9yZSwgSVBFIHdh cyBkZXNpZ25lZCBhcm91bmQ6CisKKyAgMS4gRWFzeSBpbnRlZ3JhdGlvbnMgd2l0aCBpbnRlZ3Jp dHkgcHJvdmlkZXJzLgorICAyLiBFYXNlIG9mIHVzZSBmb3IgcGxhdGZvcm0gYWRtaW5pc3RyYXRv cnMvc3lzYWRtaW5zLgorCitEZXNpZ24gUmF0aW9uYWxlOgorLS0tLS0tLS0tLS0tLS0tLS0KKwor SVBFIHdhcyBkZXNpZ25lZCBhZnRlciBldmx1YXRpbmcgZXhpc3RpbmcgaW50ZWdyaXR5IHBvbGlj eSBzb2x1dGlvbnMKK2luIG90aGVyIG9wZXJhdGluZyBzeXN0ZW1zIGFuZCBlbnZpcm9ubWVudHMu IEluIHRoaXMgc3VydmV5IG9mIG90aGVyCitpbXBsZW1lbnRhdGlvbnMsIHRoZXJlIHdlcmUgYSBm ZXcgcGl0ZmFsbHMgaWRlbnRpZmllZDoKKworICAxLiBQb2xpY2llcyB3ZXJlIG5vdCByZWFkYWJs ZSBieSBodW1hbnMsIHVzdWFsbHkgcmVxdWlyaW5nIGEgYmluYXJ5CisgICAgIGludGVybWVkaWFy eSBmb3JtYXQuCisgIDIuIEEgc2luZ2xlLCBub24tY3VzdG9taXphYmxlIGFjdGlvbiB3YXMgaW1w bGljaXRseSB0YWtlbiBhcyBhIGRlZmF1bHQuCisgIDMuIERlYnVnZ2luZyB0aGUgcG9saWN5IHJl cXVpcmVkIG1hbnVhbCBzdGVwcyB0byBkZXRlcm1pbmUgd2hhdCBydWxlIHdhcyB2aW9sYXRlZC4K KyAgNC4gQXV0aG9yaW5nIGEgcG9saWN5IHJlcXVpcmVkIGFuIGluLWRlcHRoIGtub3dsZWRnZSBv ZiB0aGUgbGFyZ2VyIHN5c3RlbSwKKyAgICAgb3Igb3BlcmF0aW5nIHN5c3RlbS4KKworSVBFIGF0 dGVtcHRzIHRvIGF2b2lkIGFsbCBvZiB0aGVzZSBwaXRmYWxscy4KKworUG9saWN5Cit+fn5+fn4K KworUGxhaW4gVGV4dAorXl5eXl5eXl5eXgorCitJUEUncyBwb2xpY3kgaXMgcGxhaW4tdGV4dC4g VGhpcyBpbnRyb2R1Y2VzIHNsaWdodGx5IGxhcmdlciBwb2xpY3kgZmlsZXMgdGhhbgorb3RoZXIg TFNNcywgYnV0IHNvbHZlcyB0d28gbWFqb3IgcHJvYmxlbXMgdGhhdCBvY2N1cnMgd2l0aCBzb21l IGludGVncml0eSBwb2xpY3kKK3NvbHV0aW9ucyBvbiBvdGhlciBwbGF0Zm9ybXMuCisKK1RoZSBm aXJzdCBpc3N1ZSBpcyBvbmUgb2YgY29kZSBtYWludGVuYW5jZSBhbmQgZHVwbGljYXRpb24uIFRv IGF1dGhvciBwb2xpY2llcywKK3RoZSBwb2xpY3kgaGFzIHRvIGJlIHNvbWUgZm9ybSBvZiBzdHJp bmcgcmVwcmVzZW50YXRpb24gKGJlIGl0IHN0cnVjdHVyZWQsCit0aHJvdWdoIFhNTCwgSlNPTiwg WUFNTCwgZXRjZXRlcmEpLCB0byBhbGxvdyB0aGUgcG9saWN5IGF1dGhvciB0byB1bmRlcnN0YW5k Cit3aGF0IGlzIGJlaW5nIHdyaXR0ZW4uIEluIGEgaHlwb3RoZXRpY2FsIGJpbmFyeSBwb2xpY3kg ZGVzaWduLCBhIHNlcmlhbGl6ZXIKK2lzIG5lY2Vzc2FyeSB0byB3cml0ZSB0aGUgcG9saWN5IGZy b20gdGhlIGh1bWFuIHJlYWRhYmxlIGZvcm0sIHRvIHRoZSBiaW5hcnkKK2Zvcm0sIGFuZCBhIGRl c2VyaWFsaXplciBpcyBuZWVkZWQgdG8gaW50ZXJwcmV0IHRoZSBiaW5hcnkgZm9ybSBpbnRvIGEg ZGF0YQorc3RydWN0dXJlIGluIHRoZSBrZXJuZWwuCisKK0V2ZW50dWFsbHksIGFub3RoZXIgZGVz ZXJpYWxpemVyIHdpbGwgYmUgbmVlZGVkIHRvIHRyYW5zZm9ybSB0aGUgYmluYXJ5IGZyb20KK2Jh Y2sgaW50byB0aGUgaHVtYW4tcmVhZGFibGUgZm9ybSB3aXRoIGFzIG11Y2ggaW5mb3JtYXRpb24g cHJlc2VydmVkLiBUaGlzIGlzIGJlY2F1c2UgYQordXNlciBvZiB0aGlzIGFjY2VzcyBjb250cm9s IHN5c3RlbSB3aWxsIGhhdmUgdG8ga2VlcCBhIGxvb2t1cCB0YWJsZSBvZiBhIGNoZWNrc3VtCith bmQgdGhlIG9yaWdpbmFsIGZpbGUgaXRzZWxmIHRvIHRyeSB0byB1bmRlcnN0YW5kIHdoYXQgcG9s aWNpZXMgaGF2ZSBiZWVuIGRlcGxveWVkCitvbiB0aGlzIHN5c3RlbSBhbmQgd2hhdCBwb2xpY2ll cyBoYXZlIG5vdC4gRm9yIGEgc2luZ2xlIHVzZXIsIHRoaXMgbWF5IGJlIGFscmlnaHQsCithcyBv bGQgcG9saWNpZXMgY2FuIGJlIGRpc2NhcmRlZCBhbG1vc3QgaW1tZWRpYXRlbHkgYWZ0ZXIgdGhl IHVwZGF0ZSB0YWtlcyBob2xkLgorRm9yIHVzZXJzIHRoYXQgbWFuYWdlIGNvbXB1dGVyIGZsZWV0 cyBpbiB0aGUgdGhvdXNhbmRzLCBpZiBub3QgaHVuZHJlZHMgb2YgdGhvdXNhbmRzLAord2l0aCBt dWx0aXBsZSBkaWZmZXJlbnQgb3BlcmF0aW5nIHN5c3RlbXMsIGFuZCBtdWx0aXBsZSBkaWZmZXJl bnQgb3BlcmF0aW9uYWwgbmVlZHMsCit0aGlzIHF1aWNrbHkgYmVjb21lcyBhbiBpc3N1ZSwgYXMg c3RhbGUgcG9saWNpZXMgZnJvbSB5ZWFycyBhZ28gbWF5IGJlIHByZXNlbnQsCitxdWlja2x5IHJl c3VsdGluZyBpbiB0aGUgbmVlZCB0byByZWNvdmVyIHRoZSBwb2xpY3kgb3IgZnVuZCBleHRlbnNp dmUgaW5mcmFzdHJ1Y3R1cmUKK3RvIHRyYWNrIHdoYXQgZWFjaCBwb2xpY3kgY29udGFpbnMuCisK K1dpdGggbm93IHRocmVlIHNlcGFyYXRlIHNlcmlhbGl6ZXIvZGVzZXJpYWxpemVycywgbWFpbnRl bmFuY2UgYmVjb21lcyBjb3N0bHkuIElmIHRoZQorcG9saWN5IGF2b2lkcyB0aGUgYmluYXJ5IGZv cm1hdCwgdGhlcmUgaXMgb25seSBvbmUgcmVxdWlyZWQgc2VyaWFsaXplcjogZnJvbSB0aGUKK2h1 bWFuLXJlYWRhYmxlIGZvcm0gdG8gdGhlIGRhdGEgc3RydWN0dXJlIGluZSBrZXJuZWwsIHNhdmlu ZyBvbiBjb2RlIG1haW50ZW5hbmNlLAorYW5kIHJldGFpbmluZyBvcGVyYWJpbGl0eS4KKworVGhl IHNlY29uZCBpc3N1ZSB3aXRoIGEgYmluYXJ5IGZvcm1hdCBpcyBvbmUgb2YgdHJhbnNwYXJlbmN5 LiBBcyBJUEUgY29udHJvbHMKK2FjY2VzcyBiYXNlZCBvbiB0aGUgdHJ1c3Qgb2YgdGhlIHN5c3Rl bSdzIHJlc291cmNlcywgaXQncyBwb2xpY3kgbXVzdCBhbHNvIGJlCit0cnVzdGVkIHRvIGJlIGNo YW5nZWQuIFRoaXMgaXMgZG9uZSB0aHJvdWdoIHNpZ25hdHVyZXMsIHJlc3VsdGluZyBpbiBuZWVk aW5nCitzaWduaW5nIGFzIGEgcHJvY2Vzcy4gU2lnbmluZywgYXMgYSBwcm9jZXNzLCBpcyB0eXBp Y2FsbHkgZG9uZSB3aXRoIGEKK2hpZ2ggc2VjdXJpdHkgYmFyLCBhcyBhbnl0aGluZyBzaWduZWQg Y2FuIGJlIHVzZWQgdG8gYXR0YWNrIGludGVncml0eQorZW5mb3JjZW1lbnQgc3lzdGVtcy4gSXQg aXMgYWxzbyBpbXBvcnRhbnQgdGhhdCwgd2hlbiBzaWduaW5nIHNvbWV0aGluZywgdGhhdAordGhl IHNpZ25lciBpcyBhd2FyZSBvZiB3aGF0IHRoZXkgYXJlIHNpZ25pbmcuIEEgYmluYXJ5IHBvbGlj eSBjYW4gY2F1c2UKK29iZnVzY2F0aW9uIG9mIHRoYXQgZmFjdDsgd2hhdCBzaWduZXJzIHNlZSBp cyBhbiBvcGFxdWUgYmluYXJ5IGJsb2IuIEEKK3BsYWluLXRleHQgcG9saWN5LCBvbiB0aGUgb3Ro ZXIgaGFuZCwgdGhlIHNpZ25lcnMgc2VlIHRoZSBhY3R1YWwgcG9saWN5CitzdWJtaXR0ZWQgZm9y IHNpZ25pbmcuCisKK0Jvb3QgUG9saWN5Cit+fn5+fn5+fn5+fgorCitJUEUsIGlmIGNvbmZpZ3Vy ZWQgYXBwcm9wcmlhdGVseSwgaXMgYWJsZSB0byBlbmZvcmNlIGEgcG9saWN5IGFzIHNvb24gYXMg YQora2VybmVsIGlzIGJvb3RlZCBhbmQgdXNlcm1vZGUgc3RhcnRzLiBUaGF0IGltcGxpZXMgc29t ZSBsZXZlbCBvZiBzdG9yYWdlCitvZiB0aGUgcG9saWN5IHRvIGFwcGx5IHRoZSBtaW51dGUgdXNl cm1vZGUgc3RhcnRzLiBHZW5lcmFsbHksIHRoYXQgc3RvcmFnZQorY2FuIGJlIGhhbmRsZWQgaW4g b25lIG9mIHRocmVlIHdheXM6CisKKyAgMS4gVGhlIHBvbGljeSBmaWxlKHMpIGxpdmUgb24gZGlz ayBhbmQgdGhlIGtlcm5lbCBsb2FkcyB0aGUgcG9saWN5IHByaW9yCisgICAgIHRvIGFuIGNvZGUg cGF0aCB0aGF0IHdvdWxkIHJlc3VsdCBpbiBhbiBlbmZvcmNlbWVudCBkZWNpc2lvbi4KKyAgMi4g VGhlIHBvbGljeSBmaWxlKHMpIGFyZSBwYXNzZWQgYnkgdGhlIGJvb3Rsb2FkZXIgdG8gdGhlIGtl cm5lbCwgd2hvCisgICAgIHBhcnNlcyB0aGUgcG9saWN5LgorICAzLiBUaGVyZSBpcyBhIHBvbGlj eSBmaWxlIHRoYXQgaXMgY29tcGlsZWQgaW50byB0aGUga2VybmVsIHRoYXQgaXMKKyAgICAgcGFy c2VkIGFuZCBlbmZvcmNlZCBvbiBpbml0aWFsaXphdGlvbi4KKworVGhlIGZpcnN0IG9wdGlvbiBo YXMgcHJvYmxlbXM6IHRoZSBrZXJuZWwgcmVhZGluZyBmaWxlcyBmcm9tIHVzZXJzcGFjZQoraXMg dHlwaWNhbGx5IGRpc2NvdXJhZ2VkIGFuZCB2ZXJ5IHVuY29tbW9uIGluIHRoZSBrZXJuZWwuCisK K1RoZSBzZWNvbmQgb3B0aW9uIGFsc28gaGFzIHByb2JsZW1zOiBMaW51eCBzdXBwb3J0cyBhIHZh cmlldHkgb2YgYm9vdGxvYWRlcnMKK2Fjcm9zcyBpdHMgZW50aXJlIGVjb3N5c3RlbSAtIGV2ZXJ5 IGJvb3Rsb2FkZXIgd291bGQgaGF2ZSB0byBzdXBwb3J0IHRoaXMKK25ldyBtZXRob2RvbG9neSBv ciB0aGVyZSBtdXN0IGJlIGFuIGluZGVwZW5kZW50IHNvdXJjZS4gSXQgd291bGQgbGlrZWx5City ZXN1bHQgaW4gbW9yZSBkcmFzdGljIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCBzdGFydHVwIHRoYW4g bmVjZXNzYXJ5LgorCitUaGUgdGhpcmQgb3B0aW9uIGlzIHRoZSBiZXN0IGJ1dCBpdCdzIGltcG9y dGFudCB0byBiZSBhd2FyZSB0aGF0IHRoZSBwb2xpY3kKK3dpbGwgdGFrZSBkaXNrIHNwYWNlIGFn YWluc3QgdGhlIGtlcm5lbCBpdCdzIGNvbXBpbGVkIGluLiBJdCdzIGltcG9ydGFudCB0bwora2Vl cCB0aGlzIHBvbGljeSBnZW5lcmFsaXplZCBlbm91Z2ggdGhhdCB1c2Vyc3BhY2UgY2FuIGxvYWQg YSBuZXcsIG1vcmUKK2NvbXBsaWNhdGVkIHBvbGljeSwgYnV0IHJlc3RyaWN0aXZlIGVub3VnaCB0 aGF0IGl0IHdpbGwgbm90IG92ZXJhdXRob3JpemUKK2FuZCBjYXVzZSBzZWN1cml0eSBpc3N1ZXMu CisKK1RoZSBpbml0cmFtZnMgcHJvdmlkZXMgYSB3YXkgdGhhdCB0aGlzIGJvb3R1cCBwYXRoIGNh biBiZSBlc3RhYmxpc2hlZC4gVGhlCitrZXJuZWwgc3RhcnRzIHdpdGggYSBtaW5pbWFsIHBvbGlj eSwgdGhhdCB0cnVzdHMgdGhlIGluaXRyYW1mcyBvbmx5LiBJbnNpZGUKK3RoZSBpbml0cmFtZnMs IHdoZW4gdGhlIHJlYWwgcm9vdGZzIGlzIG1vdW50ZWQsIGJ1dCBub3QgeWV0IHRyYW5zZmVycmVk IHRvLAoraXQgZGVwbG95cyBhbmQgYWN0aXZhdGVzIGEgcG9saWN5IHRoYXQgdHJ1c3RzIHRoZSBu ZXcgcm9vdCBmaWxlc3lzdGVtLgorVGhpcyBwcmV2ZW50cyBvdmVyYXV0aG9yaXphdGlvbiBhdCBh bnkgc3RlcCwgYW5kIGtlZXBzIHRoZSBrZXJuZWwgcG9saWN5Cit0byBhIG1pbmltYWwgc2l6ZS4K KworU3RhcnR1cAorXl5eXl5eXgorCitOb3QgZXZlcnkgc3lzdGVtLCBob3dldmVyIHN0YXJ0cyB3 aXRoIGFuIGluaXRyYW1mcywgc28gdGhlIHN0YXJ0dXAgcG9saWN5Citjb21waWxlZCBpbnRvIHRo ZSBrZXJuZWwgd2lsbCBuZWVkIHNvbWUgZmxleGliaWxpdHkgdG8gZXhwcmVzcyBob3cgdHJ1c3QK K2lzIGVzdGFibGlzaGVkIGZvciB0aGUgbmV4dCBwaGFzZSBvZiB0aGUgYm9vdHVwLiBUbyB0aGlz IGVuZCwgaWYgd2UganVzdAorbWFrZSB0aGUgY29tcGlsZWQtaW4gcG9saWN5IGEgZnVsbCBJUEUg cG9saWN5LCBpdCBhbGxvd3Mgc3lzdGVtIGJ1aWxkZXJzCit0byBleHByZXNzIHRoZSBmaXJzdCBz dGFnZSBib290dXAgcmVxdWlyZW1lbnRzIGFwcHJvcHJpYXRlbHkuCisKK1VwZGF0YWJsZSwgUmVi b290bGVzcyBQb2xpY3kKK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKworQXMgcmVxdWly ZW1lbnRzIGNoYW5nZSBvdmVyIHRpbWUgKHZ1bG5lcmFiaWxpdGllcyBhcmUgZm91bmQgaW4gcHJl dmlvdXNseQordHJ1c3RlZCBhcHBsY2F0aW9ucywga2V5cyByb2xsLCBldGNldGVyYSkuIFVwZGF0 aW5nIGEga2VybmVsIHRvIGNoYW5nZSB0aGUKK21lZXQgdGhvc2Ugc2VjdXJpdHkgZ29hbHMgaXMg bm90IGFsd2F5cyBhIHN1aXRhYmxlIG9wdGlvbiwgYXMgdXBkYXRlcyBhcmUgbm90CithbHdheXMg cmlzay1mcmVlLCBhbmQgYmxvY2tpbmcgYSBzZWN1cml0eSB1cGRhdGUgbGVhdmVzIHN5c3RlbXMg dnVsbmVyYWJsZS4KK1RoaXMgbWVhbnMgSVBFIHJlcXVpcmVzIGEgcG9saWN5IHRoYXQgY2FuIGJl IGNvbXBsZXRlbHkgdXBkYXRlZCAoYWxsb3dpbmcKK3Jldm9jYXRpb25zIG9mIGV4aXN0aW5nIHBv bGljeSkgZnJvbSBhIHNvdXJjZSBleHRlcm5hbCB0byB0aGUga2VybmVsIChhbGxvd2luZworcG9s aWNpZXMgdG8gYmUgdXBkYXRlZCB3aXRob3V0IHVwZGF0aW5nIHRoZSBrZXJuZWwpLgorCitBZGRp dGlvbmFsbHksIHNpbmNlIHRoZSBrZXJuZWwgaXMgc3RhdGVsZXNzIGJldHdlZW4gaW52b2NhdGlv bnMsIGFuZCByZWFkaW5nCitwb2xpY3kgZmlsZXMgb2ZmIHRoZSBkaXNrIGZyb20ga2VybmVsIHNw YWNlIGlzIGEgYmFkIGlkZWEodG0pLCB0aGVuIHRoZQorcG9saWN5IHVwZGF0ZXMgaGF2ZSB0byBi ZSBkb25lIHJlYm9vdGxlc3NseS4KKworVG8gYWxsb3cgYW4gdXBkYXRlIGZyb20gYW4gZXh0ZXJu YWwgc291cmNlLCBpdCBjb3VsZCBiZSBwb3RlbnRpYWxseSBtYWxpY2lvdXMsCitzbyB0aGlzIHBv bGljeSBuZWVkcyB0byBoYXZlIGEgd2F5IHRvIGJlIGlkZW50aWZpZWQgYXMgdHJ1c3RlZC4gVGhp cyBpcworZG9uZSB2aWEgYSBzaWduYXR1cmUgY2hhaW5lZCB0byBhIHRydXN0IHNvdXJjZSBpbiB0 aGUga2VybmVsLiBBcmJpdHJhcmlseSwKK3RoaXMgaXMgIHRoZSBgYFNZU1RFTV9UUlVTVEVEX0tF WVJJTkdgYCwgYSBrZXlyaW5nIHRoYXQgaXMgaW5pdGlhbGx5Citwb3B1bGF0ZWQgYXQga2VybmVs IGNvbXBpbGUtdGltZSwgYXMgdGhpcyBtYXRjaGVzIHRoZSBleHBlY3RhdGlvbiB0aGF0IHRoZQor YXV0aG9yIG9mIHRoZSBjb21waWxlZC1pbiBwb2xpY3kgZGVzY3JpYmVkIGFib3ZlIGlzIHRoZSBz YW1lIGVudGl0eSB0aGF0IGNhbgorZGVwbG95IHBvbGljeSB1cGRhdGVzLgorCitBbnRpLVJvbGxi YWNrIC8gQW50aS1SZXBsYXkKK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorCitPdmVyIHRp bWUsIHZ1bG5lcmFiaWxpdGllcyBhcmUgZm91bmQgYW5kIHRydXN0ZWQgcmVzb3VyY2VzIG1heSBu b3QgYmUKK3RydXN0ZWQgYW55bW9yZS4gSVBFJ3MgcG9saWN5IGhhcyBubyBleGNlcHRpb24gdG8g dGhpcy4gVGhlcmUgY2FuIGJlCitpbnN0YW5jZXMgd2hlcmUgYSBtaXN0YWtlbiBwb2xpY3kgYXV0 aG9yIGRlcGxveXMgYW4gaW5zZWN1cmUgcG9saWN5LAorYmVmb3JlIGNvcnJlY3RpbmcgaXQgd2l0 aCBhIHNlY3VyZSBwb2xpY3kuCisKK0Fzc3VtaW5nIHRoYXQgYXMgc29vbiBhcyB0aGUgaW5zZWN1 cmUgcG9saWN5IGlzIHNpZ25lZCwgYW5kIGFuIGF0dGFja2VyCithY3F1aXJlcyB0aGUgaW5zZWN1 cmUgcG9saWN5LCBJUEUgbmVlZHMgYSB3YXkgdG8gcHJldmVudCByb2xsYmFjaworZnJvbSB0aGUg c2VjdXJlIHBvbGljeSB1cGRhdGUgdG8gdGhlIGluc2VjdXJlIHBvbGljeSB1cGRhdGUuCisKK0lu aXRpYWxseSwgSVBFJ3MgcG9saWN5IGNhbiBoYXZlIGEgcG9saWN5X3ZlcnNpb24gdGhhdCBzdGF0 ZXMgdGhlCittaW5pbXVtIHJlcXVpcmVkIHZlcnNpb24gYWNyb3NzIGFsbCBwb2xpY2llcyB0aGF0 IGNhbiBiZSBhY3RpdmUgb24KK3RoZSBzeXN0ZW0uIFRoaXMgd2lsbCBwcmV2ZW50IHJvbGxiYWNr IHdoaWxlIHRoZSBzeXN0ZW0gaXMgbGl2ZS4KKworLi4gV0FSTklORzo6CisKKyAgSG93ZXZlciwg c2luY2UgdGhlIGtlcm5lbCBpcyBzdGF0ZWxlc3MgYWNyb3NzIGJvb3RzLCB0aGlzIHBvbGljeQor ICB2ZXJzaW9uIHdpbGwgYmUgcmVzZXQgdG8gMC4wLjAgb24gdGhlIG5leHQgYm9vdC4gU3lzdGVt IGJ1aWxkZXJzCisgIG5lZWQgdG8gYmUgYXdhcmUgb2YgdGhpcywgYW5kIGVuc3VyZSB0aGUgbmV3 IHNlY3VyZSBwb2xpY2llcyBhcmUKKyAgZGVwbG95ZWQgQVNBUCBhZnRlciBhIGJvb3QgdG8gZW5z dXJlIHRoYXQgdGhlIHdpbmRvdyBvZgorICBvcHBvcnR1bml0eSBpcyBtaW5pbWFsIGZvciBhbiBh dHRhY2tlciB0byBkZXBsb3kgdGhlIGluc2VjdXJlIHBvbGljeS4KKworSW1wbGljaXQgQWN0aW9u czoKK35+fn5+fn5+fn5+fn5+fn5+CisKK1RoZSBpc3N1ZSBvZiBpbXBpY2l0IGFjdGlvbnMgb25s eSBiZWNvbWVzIHZpc2libGUgd2hlbiB5b3UgY29uc2lkZXIKK2EgbWl4ZWQgbGV2ZWwgb2Ygc2Vj dXJpdHkgYmFycyBhY3Jvc3MgbXVsdGlwbGUgb3BlcmF0aW9ucyBpbiBhIHN5c3RlbS4KK0ZvciBl eGFtcGxlLCBjb25zaWRlciBhIHN5c3RlbSB0aGF0IGhhcyBzdHJvbmcgaW50ZWdyaXR5IGd1YXJh bnRlZXMKK292ZXIgYm90aCB0aGUgZXhlY3V0YWJsZSBjb2RlLCBhbmQgc3BlY2lmaWMgKmRhdGEg ZmlsZXMqIG9uIHRoZSBzeXN0ZW0sCit0aGF0IHdlcmUgY3JpdGljYWwgdG8gaXRzIGZ1bmN0aW9u LiBJbiB0aGlzIHN5c3RlbSwgdGhyZWUgdHlwZXMgb2YgcG9saWNpZXMKK2FyZSBwb3NzaWJsZToK KworICAxLiBBIHBvbGljeSBpbiB3aGljaCBmYWlsdXJlIHRvIG1hdGNoIGFueSBydWxlcyBpbiB0 aGUgcG9saWN5IHJlc3VsdHMKKyAgICAgaW4gdGhlIGFjdGlvbiBiZWluZyBkZW5pZWQuCisgIDIu IEEgcG9saWN5IGluIHdoaWNoIGZhaWx1cmUgdG8gbWF0Y2ggYW55IHJ1bGVzIGluIHRoZSBwb2xp Y3kgcmVzdWx0cworICAgICBpbiB0aGUgYWN0aW9uIGJlaW5nIGFsbG93ZWQuCisgIDMuIEEgcG9s aWN5IGluIHdoaWNoIHRoZSBhY3Rpb24gdGFrZW4gd2hlbiBubyBydWxlcyBhcmUgbWF0Y2hlZCBp cworICAgICBzcGVjaWZpZWQgYnkgdGhlIHBvbGljeSBhdXRob3IuCisKK1RoZSBmaXJzdCBvcHRp b24gY291bGQgbWFrZSBhIHBvbGljeSBsaWtlIHRoaXM6OgorCisgIG9wPUVYRUNVVEUgaW50ZWdy aXR5X3ZlcmlmaWVkPVlFUyBhY3Rpb249REVOWQorCitJbiB0aGUgZXhhbXBsZSBzeXN0ZW0sIHRo aXMgd29ya3Mgd2VsbCBmb3IgdGhlIGV4ZWN1dGFibGVzLCBhcyBhbGwKK2V4ZWN1dGFibGVzIHNo b3VsZCBoYXZlIGludGVncml0eSBndWFyYW50ZWVzLCB3aXRob3V0IGV4Y2VwdGlvbi4gVGhlCitp c3N1ZSBiZWNvbWVzIHdpdGggdGhlIHNlY29uZCByZXF1aXJlbWVudCBhYm91dCBzcGVjaWZpYyBk YXRhIGZpbGVzLgorVGhpcyB3b3VsZCByZXN1bHQgaW4gYSBwb2xpY3kgbGlrZSB0aGlzIChhc3N1 bWluZyBlYWNoIGxpbmUgaXMKK2V2YWx1YXRlZCBpbiBvcmRlcik6OgorCisgIG9wPUVYRUNVVEUg aW50ZWdyaXR5X3ZlcmlmaWVkPVlFUyBhY3Rpb249REVOWQorCisgIG9wPVJFQUQgaW50ZWdyaXR5 X3ZlcmlmaWVkPU5PIGxhYmVsPWNyaXRpY2FsX3QgYWN0aW9uPURFTlkKKyAgb3A9UkVBRCBhY3Rp b249QUxMT1cKKworVGhpcyBpcyBzb21ld2hhdCBjbGVhciBpZiB5b3UgcmVhZCB0aGUgZG9jcywg dW5kZXJzdGFuZCB0aGUgcG9saWN5CitpcyBleGVjdXRlZCBpbiBvcmRlciBhbmQgdGhhdCB0aGUg ZGVmYXVsdCBpcyBhIGRlbmlhbDsgaG93ZXZlciwgdGhlCitsYXN0IGxpbmUgZWZmZWN0aXZlbHkg Y2hhbmdlcyB0aGF0IGRlZmF1bHQgdG8gYW4gQUxMT1cuIFRoaXMgaXMKK3JlcXVpcmVkLCBiZWNh dXNlIGluIGEgcmVhbGlzdGljIHN5c3RlbSwgdGhlcmUgYXJlIHNvbWUgdW52ZXJpZmllZAorcmVh ZHMgKGltYWdpbmUgYXBwZW5kaW5nIHRvIGEgbG9nIGZpbGUpLgorCitUaGUgc2Vjb25kIG9wdGlv biwgbWF0Y2hpbmcgbm8gcnVsZXMgcmVzdWx0cyBpbiBhbiBhbGxvdywgaXMgY2xlYXJlcgorZm9y IHRoZSBzcGVjaWZpYyBkYXRhIGZpbGVzOjoKKworICBvcD1SRUFEIGludGVncml0eV92ZXJpZmll ZD1OTyBsYWJlbD1jcml0aWNhbF90IGFjdGlvbj1ERU5ZCisKK0FuZCwgbGlrZSB0aGUgZmlyc3Qg b3B0aW9uLCBmYWxscyBzaG9ydCB3aXRoIHRoZSBvcHBvc2l0ZSBzY2VuYXJpbywKK2VmZmVjdGl2 ZWx5IG5lZWRpbmcgdG8gb3ZlcnJpZGUgdGhlIGRlZmF1bHQ6OgorCisgIG9wPUVYRUNVVEUgaW50 ZWdyaXR5X3ZlcmlmaWVkPVlFUyBhY3Rpb249QUxMT1cKKyAgb3A9RVhFQ1VURSBhY3Rpb249REVO WQorCisgIG9wPVJFQUQgaW50ZWdyaXR5X3ZlcmlmaWVkPU5PIGxhYmVsPWNyaXRpY2FsX3QgYWN0 aW9uPURFTlkKKworVGhpcyBsZWF2ZXMgdGhlIHRoaXJkIG9wdGlvbi4gSW5zdGVhZCBvZiBtYWtp bmcgdXNlcnMgYmUgY2xldmVyCithbmQgb3ZlcnJpZGUgdGhlIGRlZmF1bHQgd2l0aCBhbiBlbXB0 eSBydWxlLCBmb3JjZSB0aGUgZW5kLXVzZXIKK3RvIGNvbnNpZGVyIHdoYXQgdGhlIGFwcHJvcHJp YXRlIGRlZmF1bHQgc2hvdWxkIGJlIGZvciB0aGVpcgorc2NlbmFyaW8gYW5kIGV4cGxpY2l0bHkg c3RhdGUgaXQ6OgorCisgIERFRkFVTFQgb3A9RVhFQ1VURSBhY3Rpb249REVOWQorICBvcD1FWEVD VVRFIGludGVncml0eV92ZXJpZmllZD1ZRVMgYWN0aW9uPUFMTE9XCisKKyAgREVGQVVMVCBvcD1S RUFEIGFjdGlvbj1BTExPVworICBvcD1SRUFEIGludGVncml0eV92ZXJpZmllZD1OTyBsYWJlbD1j cml0aWNhbF90IGFjdGlvbj1ERU5ZCisKK1BvbGljeSBEZWJ1Z2dpbmc6Cit+fn5+fn5+fn5+fn5+ fn5+fgorCitXaGVuIGRldmVsb3BpbmcgYSBwb2xpY3ksIGl0IGlzIHVzZWZ1bCB0byBrbm93IHdo YXQgbGluZSBvZiB0aGUgcG9saWN5CitpcyBiZWluZyB2aW9sYXRlZCB0byByZWR1Y2UgZGVidWdn aW5nIGNvc3RzOyBuYXJyb3dpbmcgdGhlIHNjb3BlIG9mIHRoZQoraW52ZXN0aWdhdGlvbiB0byB0 aGUgZXhhY3QgbGluZSB0aGF0IHJlc3VsdGVkIGluIHRoZSBhY3Rpb24uIFNvbWUgaW50ZWdyaXR5 Citwb2xpY3kgc3lzdGVtcyBkbyBub3QgcHJvdmlkZSB0aGlzIGluZm9ybWF0aW9uLCBpbnN0ZWFk IHByb3ZpZGluZyB0aGUKK2luZm9ybWF0aW9uIHRoYXQgd2FzIHVzZWQgaW4gdGhlIGV2YWx1YXRp b24uIFRoaXMgdGhlbiByZXF1aXJlcyBhIGNvcnJlbGF0aW9uCit3aXRoIHRoZSBwb2xpY3kgdG8g ZXZhbHVhdGUgd2hhdCB3ZW50IHdyb25nLgorCitJbnN0ZWFkLCBJUEUganVzdCBlbWl0cyB0aGUg cnVsZSB0aGF0IHdhcyBtYXRjaGVkLiBUaGlzIGxpbWl0cyB0aGUgc2NvcGUKK29mIHRoZSBpbnZl c3RpZ2F0aW9uIHRvIHRoZSBleGFjdCBwb2xpY3kgbGluZSAoaW4gdGhlIGNhc2Ugb2YgYSBzcGVj aWZpYworcnVsZSksIG9yIHRoZSBzZWN0aW9uIChpbiB0aGUgY2FzZSBvZiBhIERFRkFVTFQpLiBU aGlzIGRlY3JlYXNlcyBpdGVyYXRpb24KK2FuZCBpbnZlc3RpZ2F0aW9uIHRpbWVzIHdoZW4gcG9s aWN5IGZhaWx1cmVzIGFyZSBvYnNlcnZlZCB3aGlsZSBldmFsdWF0aW5nCitwb2xpY2llcy4KKwor SVBFJ3MgcG9saWN5IGVuZ2luZSBpcyBhbHNvIGRlc2lnbmVkIGluIGEgd2F5IHRoYXQgaXQgbWFr ZXMgaXQgb2J2aW91cyB0bworYSBodW1hbiBvZiBob3cgdG8gaW52ZXN0aWdhdGUgYSBwb2xpY3kg ZmFpbHVyZS4gRWFjaCBsaW5lIGlzIGV2YWx1YXRlZCBpbgordGhlIHNlcXVlbmNlIHRoYXQgaXMg d3JpdHRlbiwgc28gdGhlIGFsZ29yaXRobSBpcyB2ZXJ5IHNpbXBsZSB0byBmb2xsb3cKK2ZvciBo dW1hbnMgdG8gcmVjcmVhdGUgdGhlIHN0ZXBzIGFuZCBjb3VsZCBoYXZlIGNhdXNlZCB0aGUgZmFp bHVyZS4gSW4gb3RoZXIKK3N1cnZleWVkIHN5c3RlbXMsIG9wdGltaXphdGlvbnMgb2NjdXIgKHNv cnRpbmcgcnVsZXMsIGZvciBpbnN0YW5jZSkgd2hlbiBsb2FkaW5nCit0aGUgcG9saWN5LiBJbiB0 aG9zZSBzeXN0ZW1zLCBpdCByZXF1aXJlcyBtdWx0aXBsZSBzdGVwcyB0byBkZWJ1ZywgYW5kIHRo ZQorYWxnb3JpdGhtIG1heSBub3QgYWx3YXlzIGJlIGNsZWFyIHRvIHRoZSBlbmQtdXNlciB3aXRo b3V0IHJlYWRpbmcgdGhlIGNvZGUgZmlyc3QuCisKK1NpbXBsaWZpZWQgUG9saWN5Ogorfn5+fn5+ fn5+fn5+fn5+fn5+CisKK0ZpbmFsbHksIElQRSdzIHBvbGljeSBpcyBkZXNpZ25lZCBmb3Igc3lz YWRtaW5zLCBub3Qga2VybmVsIGRldmVsb3BlcnMuIEluc3RlYWQKK29mIGNvdmVyaW5nIGluZGl2 aWR1YWwgTFNNIGhvb2tzIChvciBzeXNjYWxscyksIElQRSBjb3ZlcnMgb3BlcmF0aW9ucy4gVGhp cyBtZWFucworaW5zdGVhZCBvZiBzeXNhZG1pbnMgbmVlZGluZyB0byBrbm93IHRoYXQgdGhlIHN5 c2NhbGxzIGBgbW1hcGBgLCBgYG1wcm90ZWN0YGAsCitgYGV4ZWN2ZWBgLCBhbmQgYGB1c2VsaWJg YCBtdXN0IGhhdmUgcnVsZXMgcHJvdGVjdGluZyB0aGVtLCB0aGV5IG11c3Qgc2ltcGxlIGtub3cK K3RoYXQgdGhleSB3YW50IHRvIHJlc3RyaWN0IGNvZGUgZXhlY3V0aW9uLiBUaGlzIGxpbWl0cyB0 aGUgYW1vdW50IG9mIGJ5cGFzc2VzIHRoYXQKK2NvdWxkIG9jY3VyIGR1ZSB0byBhIGxhY2sgb2Yg a25vd2xlZGdlIG9mIHRoZSB1bmRlcmx5aW5nIHN5c3RlbTsgd2hlcmVhcyB0aGUKK21haW50YWlu ZXJzIG9mIElQRSwgYmVpbmcga2VybmVsIGRldmVsb3BlcnMgY2FuIG1ha2UgdGhlIGNvcnJlY3Qg Y2hvaWNlIHRvIGRldGVybWluZQord2hldGhlciBzb21ldGhpbmcgbWFwcyB0byB0aGVzZSBvcGVy YXRpb25zLCBhbmQgdW5kZXIgd2hhdCBjb25kaXRpb25zLgorCitJbXBsZW1lbnRhdGlvbiBOb3Rl cworLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQW5vbnltb3VzIE1lbW9yeQorfn5+fn5+fn5+fn5+ fn5+fgorCitBbm9ueW1vdXMgbWVtb3J5IGlzbid0IHRyZWF0ZWQgYW55IGRpZmZlcmVudGx5IGZy b20gYW55IG90aGVyIGFjY2VzcyBpbiBJUEUuCitXaGVuIGFub255bW91cyBtZW1vcnkgaXMgbWFw cGVkIHdpdGggYGArWGBgLCBpdCBzdGlsbCBjb21lcyBpbnRvIHRoZSBgYGZpbGVfbW1hcGBgCitv ciBgYGZpbGVfbXByb3RlY3RgYCBob29rLCBidXQgd2l0aCBhIGBgTlVMTGBgIGZpbGUgb2JqZWN0 LiBUaGlzIGlzIHN1Ym1pdHRlZCB0bwordGhlIGV2YWx1YXRpb24sIGxpa2UgYW55IG90aGVyIGZp bGUsIGhvd2V2ZXIsIGFsbCBjdXJyZW50IHRydXN0IG1lY2hhbmlzbXMgd2lsbAorcmV0dXJuIGZh bHNlIGFzIHRoZXJlIGlzIG5vdGhpbmcgdG8gZXZhbHVhdGUuIFRoaXMgbWVhbnMgYW5vbnltb3Vz IG1lbW9yeQorZXhlY3V0aW9uIGlzIHN1YmplY3QgdG8gd2hhdGV2ZXIgdGhlIGBgREVGQVVMVGBg IGlzIGZvciBgYEVYRUNVVEVgYC4KKworLi4gV0FSTklORzo6CisKKyAgVGhpcyBhbHNvIG9jY3Vy cyB3aXRoIHRoZSBgYGtlcm5lbF9sb2FkX2RhdGFgYCBob29rLCB3aGljaCBpcyB1c2VkIGJ5IHNp Z25lZAorICBhbmQgY29tcHJlc3NlZCBrZXJuZWwgbW9kdWxlcy4gVXNpbmcgc2lnbmVkIGFuZCBj b21wcmVzc2VkIGtlcm5lbCBtb2R1bGVzIHdpdGgKKyAgSVBFIHdpbGwgYWx3YXlzIHJlc3VsdCBp biB0aGUgYGBERUZBVUxUYGAgYWN0aW9uIGZvciBgYEtNT0RVTEVgYC4KKworU2VjdXJpdHlmcyBJ bnRlcmZhY2UKK35+fn5+fn5+fn5+fn5+fn5+fn5+CisKK1RoZSBwZXItcG9saWN5IHNlY3VyaXR5 ZnMgdHJlZSBpcyBzb21ld2hhdCB1bmlxdWUuIEZvciBleGFtcGxlLCBmb3IKK2Egc3RhbmRhcmQg c2VjdXJpdHlmcyBwb2xpY3kgdHJlZTo6CisKKyAgTXlQb2xpY3kKKyAgICB8LSBhY3RpdmUKKyAg ICB8LSByYXcKKyAgICB8LSBwb2xpY3kKKyAgICB8LSBuYW1lCisgICAgfC0gdmVyc2lvbgorICAg IHwtIHVwZGF0ZQorCitUaGUgcG9saWN5IGlzIHN0b3JlZCBpbiB0aGUgYGAtPmlfcHJpdmF0ZWBg IGRhdGEgb2YgdGhlIE15UG9saWN5IGlub2RlLAord2hpbGUgZWFjaCBjaGlsZCdzIGBgLT5pX3By aXZhdGVgYCwgaXQgc3RvcmVzIHRoZSBNeVBvbGljeSBpbm9kZS4gVGhpcworc2ltcGxpZmllcyBw b2xpY3kgdXBkYXRlcyBtYXNzaXZlbHksIGFzIHRoZSBhbHRlcm5hdGl2ZSBkZXNpZ25zIGFyZSB0 bzoKKworICAxLiBVc2UgZF9wYXJlbnQsIHdoaWNoIGhhcyBwb3RlbnRpYWwgaXNzdWVzIHdpdGgg ZmxleGliaWxpdHksIGlmIHRoZXJlCisgICAgIGV2ZW50dWFsbHkgYmVjb21lcyBhIHN1YmRpcmVj dG9yeSB1bmRlcm5lYXRoIE15UG9saWN5OyBhcyBpdCdzIHVuY2xlYXIKKyAgICAgaG93IG1hbnkg bGV2ZWxzIG9mIGBgZF9wYXJlbnRgYCB5b3UgaGF2ZSB0byBpdGVyYXRlIHVwIHRvLgorCisgIDIu IFN0b3JlIHRoZSBwb2xpY3kgZGF0YSBpbiBlYWNoIGlub2RlJ3MgYGAtPmlfcHJpdmF0ZWBgLiBU aGlzIGhhcyBpc3N1ZXMKKyAgICAgd2hlbiBpdCBjb21lcyB0byB1cGRhdGluZyBhIHBvbGljeSAt IGV2ZXJ5IHVwZGF0ZSBuZWVkcyB0byBjYXNjYWRlIHRvCisgICAgIGVhY2ggYGAtPmlfcHJpdmF0 ZWBgLCBhbmQgaWYgaXQgZmFpbHMsIGZvciB3aGF0ZXZlciByZWFzb24sIHRoZQorICAgICBvcGVy YXRpb24gaGFzIHRvIGJlIHJldmVydGVkIG9uIGVhY2ggaW5vZGUuCisKK1dpdGggdGhpcyBpbXBs ZW1lbnRhdGlvbiwgeW91IGNhbiBzb2x2ZSB0aGUgZmxleGliaWxpdHkgcHJvYmxlbSBvZiAxLCBh cworbm93IHdoZW4geW91IGNyZWF0ZSBhIHRoZW9yZXRpY2FsIHN1YmRpcmVjdG9yeSB5b3UganVz dCBzZXQgdGhlCitgYC0+aV9wcml2YXRlYGAgZGF0YSBhcHByb3ByaWF0ZWx5LiBZb3UgYWxzbyBz b2x2ZSB0aGUgdXBkYXRlIHByb2JsZW0gb2YKK3R3bywgYXMgeW91IHNpbXBseSB1cGRhdGUgb3Ig cmV2ZXJ0IG9uIHRoZSBvbmUgaW5vZGUgdGhhdCBhbGwgb3RoZXIgaW5vZGVzCityZWZlcmVuY2Uu CisKK1Rlc3RzCistLS0tLQorCitJUEUgaGFzIEtVbml0IFRlc3RzLCB0ZXN0aW5nIHByaW1hcmls eSB0aGUgcGFyc2VyLiBJbiBhZGRpdGlvbiwgSVBFIGhhcyBhCitweXRob24gYmFzZWQgaW50ZWdy YXRpb24gdGVzdCBzdWl0cyB0aGF0IGNhbiB0ZXN0IGJvdGggdXNlciBpbnRlcmZhY2VzIGFuZAor ZW5mb3JjZW1lbnQgZnVuY3Rpb25hbGl0aWVzLgpkaWZmIC0tZ2l0IGEvTUFJTlRBSU5FUlMgYi9N QUlOVEFJTkVSUwppbmRleCBkNWI0YTY2MzZiMGQuLjk2OWM2YTc4NDVlZCAxMDA2NDQKLS0tIGEv TUFJTlRBSU5FUlMKKysrIGIvTUFJTlRBSU5FUlMKQEAgLTEwMjc2LDYgKzEwMjc2LDggQEAgRjoJ c2VjdXJpdHkvaW50ZWdyaXR5LwogSU5URUdSSVRZIFBPTElDWSBFTkZPUkNFTUVOVCAoSVBFKQog TToJRmFuIFd1IDx3dWZhbkBsaW51eC5taWNyb3NvZnQuY29tPgogUzoJU3VwcG9ydGVkCitGOglE b2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL0xTTS9pcGUucnN0CitGOglEb2N1bWVudGF0aW9uL3Nl Y3VyaXR5L2lwZS5yc3QKIEY6CXNjcmlwdHMvaXBlLwogRjoJc2VjdXJpdHkvaXBlLwogCi0tIAoy LjM5LjAKCi0tCmRtLWRldmVsIG1haWxpbmcgbGlzdApkbS1kZXZlbEByZWRoYXQuY29tCmh0dHBz Oi8vbGlzdG1hbi5yZWRoYXQuY29tL21haWxtYW4vbGlzdGluZm8vZG0tZGV2ZWwK 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 9ED6CC64EC5 for ; Tue, 31 Jan 2023 13:51:36 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1675173095; 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=tm/q8lSDCUj/eRzrxgmdrVNmGmKeJDGeSZ/xlNSJHBw=; b=QKyvdCS42EGyx3Y9bbssoPZhX9hSKueWQufGxvq7Rha1t9YZDEMGChJtdAqUJ+elsF7ABg RvEOmOIOSXIhNRblaN/chwHWnq2nKke95iAPoEiIwYUOQTjJYqcWJR20jzI4hHNSa2OLeA FomyOcP9zHUcb4NJTsaH+0V1p3UEviw= 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-632-sDdfRFpzOzWyHn4EfmjtbQ-1; Tue, 31 Jan 2023 08:51:28 -0500 X-MC-Unique: sDdfRFpzOzWyHn4EfmjtbQ-1 Received: from smtp.corp.redhat.com (int-mx04.intmail.prod.int.rdu2.redhat.com [10.11.54.4]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id CB14E1C08973; Tue, 31 Jan 2023 13:51:26 +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 5DE832026D4B; Tue, 31 Jan 2023 13:51:26 +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 6CCBC1946A40; Tue, 31 Jan 2023 13:51:25 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx05.intmail.prod.int.rdu2.redhat.com [10.11.54.5]) by mm-prod-listman-01.mail-001.prod.us-east-1.aws.redhat.com (Postfix) with ESMTP id 21D9C1946589 for ; Mon, 30 Jan 2023 23:06:42 +0000 (UTC) Received: by smtp.corp.redhat.com (Postfix) id 18527175AD; Mon, 30 Jan 2023 23:06:42 +0000 (UTC) Received: from mimecast-mx02.redhat.com (mimecast01.extmail.prod.ext.rdu2.redhat.com [10.11.55.17]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 10055422F2 for ; Mon, 30 Jan 2023 23:06:42 +0000 (UTC) Received: from us-smtp-1.mimecast.com (us-smtp-delivery-1.mimecast.com [207.211.31.120]) (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 D9BBE858F09 for ; Mon, 30 Jan 2023 23:06:41 +0000 (UTC) Received: from linux.microsoft.com (linux.microsoft.com [13.77.154.182]) by relay.mimecast.com with ESMTP id us-mta-345-0hmy_Z3tPn6bu55IcVio6Q-1; Mon, 30 Jan 2023 18:06:38 -0500 X-MC-Unique: 0hmy_Z3tPn6bu55IcVio6Q-1 Received: by linux.microsoft.com (Postfix, from userid 1052) id C89B620EA21E; Mon, 30 Jan 2023 14:58:42 -0800 (PST) DKIM-Filter: OpenDKIM Filter v2.11.0 linux.microsoft.com C89B620EA21E From: Fan Wu To: corbet@lwn.net, zohar@linux.ibm.com, jmorris@namei.org, serge@hallyn.com, tytso@mit.edu, ebiggers@kernel.org, axboe@kernel.dk, agk@redhat.com, snitzer@kernel.org, eparis@redhat.com, paul@paul-moore.com Subject: [RFC PATCH v9 16/16] documentation: add ipe documentation Date: Mon, 30 Jan 2023 14:57:31 -0800 Message-Id: <1675119451-23180-17-git-send-email-wufan@linux.microsoft.com> In-Reply-To: <1675119451-23180-1-git-send-email-wufan@linux.microsoft.com> References: <1675119451-23180-1-git-send-email-wufan@linux.microsoft.com> MIME-Version: 1.0 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.5 X-Mailman-Approved-At: Tue, 31 Jan 2023 13:51: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: Fan Wu , dm-devel@redhat.com, linux-doc@vger.kernel.org, Deven Bowers , roberto.sassu@huawei.com, linux-security-module@vger.kernel.org, linux-kernel@vger.kernel.org, linux-block@vger.kernel.org, linux-fscrypt@vger.kernel.org, linux-audit@redhat.com, linux-integrity@vger.kernel.org Errors-To: linux-audit-bounces@redhat.com Sender: "Linux-audit" X-Scanned-By: MIMEDefang 3.1 on 10.11.54.4 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 RnJvbTogRGV2ZW4gQm93ZXJzIDxkZXZlbi5kZXNhaUBsaW51eC5taWNyb3NvZnQuY29tPgoKQWRk IElQRSdzIGFkbWluIGFuZCBkZXZlbG9wZXIgZG9jdW1lbnRhdGlvbiB0byB0aGUga2VybmVsIHRy ZWUuCgpDby1kZXZlbG9wZWQtYnk6IEZhbiBXdSA8d3VmYW5AbGludXgubWljcm9zb2Z0LmNvbT4K U2lnbmVkLW9mZi1ieTogRGV2ZW4gQm93ZXJzIDxkZXZlbi5kZXNhaUBsaW51eC5taWNyb3NvZnQu Y29tPgpTaWduZWQtb2ZmLWJ5OiBGYW4gV3UgPHd1ZmFuQGxpbnV4Lm1pY3Jvc29mdC5jb20+Ci0t LQp2MjoKICArIE5vIENoYW5nZXMKCnYzOgogICsgQWRkIEFja2VkLWJ5CiAgKyBGaXh1cCBjb2Rl IGJsb2NrIHN5bnRheAogICsgRml4IGEgbWlub3IgZ3JhbW1hdGljYWwgaXNzdWUuCgp2NDoKICAr IFVwZGF0ZSBkb2N1bWVudGF0aW9uIHdpdGggdGhlIHJlc3VsdHMgb2Ygb3RoZXIKICAgIGNvZGUg Y2hhbmdlcy4KCnY1OgogICsgTm8gY2hhbmdlcwoKdjY6CiAgKyBObyBjaGFuZ2VzCgp2NzoKICAr IEFkZCBhZGRpdGlvbmFsIGRldmVsb3Blci1sZXZlbCBkb2N1bWVudGF0aW9uCiAgKyBVcGRhdGUg YWRtaW4tZ3VpZGUgZG9jcyB0byByZWZsZWN0IGNoYW5nZXMuCiAgKyBEcm9wIEFja2VkLWJ5IGR1 ZSB0byBzaWduaWZpY2FudCBjaGFuZ2VzCiAgKyBBZGRlZCBzZWN0aW9uIGFib3V0IGF1ZGl0IGV2 ZW50cyBpbiBhZG1pbi1ndWlkZQoKdjg6CiAgKyBDb3JyZWN0IHRlcm1pbm9sb2d5IGZyb20gImF1 ZGl0IGV2ZW50IiB0byAiYXVkaXQgcmVjb3JkIgogICsgQWRkIGFzc29jaWF0ZWQgZG9jdW1lbnRh dGlvbiB3aXRoIHRoZSBjb3JyZWN0ICJhdWRpdCBldmVudCIKICAgIHRlcm1pbm9sb2d5LgogICsg QWRkIHNvbWUgY29udGV4dCB0byB0aGUgaGlzdG9yaWNhbCBtb3RpdmF0aW9uIGZvciBJUEUgYW5k IGRlc2lnbgogICAgcGhpbG9zb3BoeS4KICArIEFkZCBzb21lIGNvbnRlbnQgYWJvdXQgdGhlIHNl Y3VyaXR5ZnMgbGF5b3V0IGluIHRoZSBwb2xpY2llcwogICAgZGlyZWN0b3J5LgogICsgVmFyaW91 cyBzcGVsbGluZyBhbmQgZ3JhbW1hdGljYWwgY29ycmVjdGlvbnMuCgp2OToKICArIENvcnJlY3Qg c3BlbGxpbmcgb2YgInBpdGZhbGxzIgogICsgVXBkYXRlIHRoZSBkb2NzIHcuci50IHRoZSBuZXcg cGFyc2VyIGFuZCBuZXcgYXVkaXQgZm9ybWF0cwotLS0KIERvY3VtZW50YXRpb24vYWRtaW4tZ3Vp ZGUvTFNNL2luZGV4LnJzdCAgICAgICB8ICAgMSArCiBEb2N1bWVudGF0aW9uL2FkbWluLWd1aWRl L0xTTS9pcGUucnN0ICAgICAgICAgfCA3MjkgKysrKysrKysrKysrKysrKysrCiAuLi4vYWRtaW4t Z3VpZGUva2VybmVsLXBhcmFtZXRlcnMudHh0ICAgICAgICAgfCAgMTIgKwogRG9jdW1lbnRhdGlv bi9zZWN1cml0eS9pbmRleC5yc3QgICAgICAgICAgICAgIHwgICAxICsKIERvY3VtZW50YXRpb24v c2VjdXJpdHkvaXBlLnJzdCAgICAgICAgICAgICAgICB8IDQzNiArKysrKysrKysrKwogTUFJTlRB SU5FUlMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAyICsKIDYgZmlsZXMg Y2hhbmdlZCwgMTE4MSBpbnNlcnRpb25zKCspCiBjcmVhdGUgbW9kZSAxMDA2NDQgRG9jdW1lbnRh dGlvbi9hZG1pbi1ndWlkZS9MU00vaXBlLnJzdAogY3JlYXRlIG1vZGUgMTAwNjQ0IERvY3VtZW50 YXRpb24vc2VjdXJpdHkvaXBlLnJzdAoKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vYWRtaW4t Z3VpZGUvTFNNL2luZGV4LnJzdCBiL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvTFNNL2luZGV4 LnJzdAppbmRleCBhNmJhOTVmYmFhOWYuLmNlNjNiZTZkNjRhZCAxMDA2NDQKLS0tIGEvRG9jdW1l bnRhdGlvbi9hZG1pbi1ndWlkZS9MU00vaW5kZXgucnN0CisrKyBiL0RvY3VtZW50YXRpb24vYWRt aW4tZ3VpZGUvTFNNL2luZGV4LnJzdApAQCAtNDcsMyArNDcsNCBAQCBzdWJkaXJlY3Rvcmllcy4K ICAgIHRvbW95bwogICAgWWFtYQogICAgU2FmZVNldElECisgICBpcGUKZGlmZiAtLWdpdCBhL0Rv Y3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvTFNNL2lwZS5yc3QgYi9Eb2N1bWVudGF0aW9uL2FkbWlu LWd1aWRlL0xTTS9pcGUucnN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw MC4uYjY3NmNlYTYyYjJlCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9hZG1pbi1n dWlkZS9MU00vaXBlLnJzdApAQCAtMCwwICsxLDcyOSBAQAorLi4gU1BEWC1MaWNlbnNlLUlkZW50 aWZpZXI6IEdQTC0yLjAKKworSW50ZWdyaXR5IFBvbGljeSBFbmZvcmNlbWVudCAoSVBFKQorPT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisuLiBOT1RFOjoKKworICAgVGhpcyBp cyB0aGUgZG9jdW1lbnRhdGlvbiBmb3IgYWRtaW5zLCBzeXN0ZW0gYnVpbGRlcnMsIG9yIGluZGl2 aWR1YWxzCisgICBhdHRlbXB0aW5nIHRvIHVzZSBJUEUuIElmIHlvdSdyZSBsb29raW5nIGZvciBt b3JlIGRldmVsb3Blci1mb2N1c2VkCisgICBkb2N1bWVudGF0aW9uIGFib3V0IElQRSBwbGVhc2Ug c2VlIGBEb2N1bWVudGF0aW9uL3NlY3VyaXR5L2lwZS5yc3RgCisKK092ZXJ2aWV3CistLS0tLS0t LQorCitJUEUgaXMgYSBMaW51eCBTZWN1cml0eSBNb2R1bGUgd2hpY2ggdGFrZXMgYSBjb21wbGlt ZW50YXJ5IGFwcHJvYWNoIHRvCithY2Nlc3MgY29udHJvbC4gV2hlcmVhcyBleGlzdGluZyBtYW5k YXRvcnkgYWNjZXNzIGNvbnRyb2wgbWVjaGFuaXNtcworYmFzZSB0aGVpciBkZWNpc2lvbnMgb24g bGFiZWxzIGFuZCBwYXRocywgSVBFIGluc3RlYWQgZGV0ZXJtaW5lcword2hldGhlciBvciBub3Qg YW4gb3BlcmF0aW9uIHNob3VsZCBiZSBhbGxvd2VkIGJhc2VkIG9uIGltbXV0YWJsZQorc2VjdXJp dHkgcHJvcGVydGllcyBvZiB0aGUgc3lzdGVtIGNvbXBvbmVudCB0aGUgb3BlcmF0aW9uIGlzIGJl aW5nCitwZXJmb3JtZWQgb24uCisKK0lQRSBpdHNlbGYgZG9lcyBub3QgbWFuZGF0ZSBob3cgdGhl IHNlY3VyaXR5IHByb3BlcnR5IHNob3VsZCBiZQorZXZhbHVhdGVkLCBidXQgcmVsaWVzIG9uIGFu IGV4dGVuc2libGUgc2V0IG9mIGV4dGVybmFsIHByb3BlcnR5IHByb3ZpZGVycwordG8gZXZhbHVh dGUgdGhlIGNvbXBvbmVudC4gSVBFIG1ha2VzIGl0cyBkZWNpc2lvbiBiYXNlZCBvbiByZWZlcmVu Y2UKK3ZhbHVlcyBmb3IgdGhlIHNlbGVjdGVkIHByb3BlcnRpZXMsIHNwZWNpZmllZCBpbiB0aGUg SVBFIHBvbGljeS4KKworVGhlIHJlZmVyZW5jZSB2YWx1ZXMgcmVwcmVzZW50IHRoZSB2YWx1ZSB0 aGF0IHRoZSBwb2xpY3kgd3JpdGVyIGFuZCB0aGUKK2xvY2FsIHN5c3RlbSBhZG1pbmlzdHJhdG9y IChiYXNlZCBvbiB0aGUgcG9saWN5IHNpZ25hdHVyZSkgdHJ1c3QgZm9yIHRoZQorc3lzdGVtIHRv IGFjY29tcGxpc2ggdGhlIGRlc2lyZWQgdGFza3MuCisKK09uZSBzdWNoIHByb3ZpZGVyIGlzIGZv ciBleGFtcGxlIGRtLXZlcml0eSwgd2hpY2ggaXMgYWJsZSB0byByZXByZXNlbnQKK3RoZSBpbnRl Z3JpdHkgcHJvcGVydHkgb2YgYSBwYXJ0aXRpb24gKGl0cyBpbW11dGFibGUgc3RhdGUpIHdpdGgg YSBkaWdlc3QuCisKK0lQRSBpcyBjb21waWxlZCB1bmRlciBgYENPTkZJR19TRUNVUklUWV9JUEVg YCAoU2VjdXJpdHkgLT4gSW50ZWdyaXR5IFBvbGljeSBFbmZvcmNlbWVudCAoSVBFKSkuCisKK1Vz ZSBDYXNlcworLS0tLS0tLS0tCisKK0lQRSB3b3JrcyBiZXN0IGluIGZpeGVkLWZ1bmN0aW9uIGRl dmljZXM6IGRldmljZXMgaW4gd2hpY2ggdGhlaXIgcHVycG9zZQoraXMgY2xlYXJseSBkZWZpbmVk IGFuZCBub3Qgc3VwcG9zZWQgdG8gYmUgY2hhbmdlZCAoZS5nLiBuZXR3b3JrIGZpcmV3YWxsCitk ZXZpY2UgaW4gYSBkYXRhIGNlbnRlciwgYW4gSW9UIGRldmljZSwgZXRjZXRlcmEpLCB3aGVyZSBh bGwgc29mdHdhcmUgYW5kCitjb25maWd1cmF0aW9uIGlzIGJ1aWx0IGFuZCBwcm92aXNpb25lZCBi eSB0aGUgc3lzdGVtIG93bmVyLgorCitJUEUgaXMgYSBsb25nLXdheSBvZmYgZm9yIHVzZSBpbiBn ZW5lcmFsLXB1cnBvc2UgY29tcHV0aW5nOiB0aGUgTGludXgKK2NvbW11bml0eSBhcyBhIHdob2xl IHRlbmRzIHRvIGZvbGxvdyBhIGRlY2VudHJhbGl6ZWQgdHJ1c3QgbW9kZWwsCitrbm93biBhcyB0 aGUgd2ViIG9mIHRydXN0LCB3aGljaCBJUEUgaGFzIG5vIHN1cHBvcnQgZm9yIGFzIG9mIHlldC4K KworSVBFLCBpbnN0ZWFkIG9mIHN1cHBvcnRpbmcgd2ViIG9mIHRydXN0LCBzdXBwb3J0cyBQS0ks IHdoaWNoIGdlbmVyYWxseQorZGVzaWduYXRlcyBhIHNldCBvZiBlbnRpdGllcyB0aGF0IHByb3Zp ZGUgYSBtZWFzdXJlIG9mIGFic29sdXRlIHRydXN0LgorCitBZGRpdGlvbmFsbHksIHdoaWxlIG1v c3QgcGFja2FnZXMgYXJlIHNpZ25lZCB0b2RheSwgdGhlIGZpbGVzIGluc2lkZQordGhlIHBhY2th Z2VzIChmb3IgaW5zdGFuY2UsIHRoZSBleGVjdXRhYmxlcyksIHRlbmQgdG8gYmUgdW5zaWduZWQu IFRoaXMKK21ha2VzIGl0IGRpZmZpY3VsdCB0byB1dGlsaXplIElQRSBpbiBzeXN0ZW1zIHdoZXJl IGEgcGFja2FnZSBtYW5hZ2VyIGlzCitleHBlY3RlZCB0byBiZSBmdW5jdGlvbmFsLCB3aXRob3V0 IG1ham9yIGNoYW5nZXMgdG8gdGhlIHBhY2thZ2UgbWFuYWdlcgorYW5kIGVjb3N5c3RlbSBiZWhp bmQgaXQuCisKK0RJR0xJTSBbI2RpZ2xpbV1fIGlzIGEgc3lzdGVtIHRoYXQgd2hlbiBjb21iaW5l ZCB3aXRoIElQRSwgY291bGQgYmUgdXNlZCB0bworZW5hYmxlIGdlbmVyYWwgcHVycG9zZSBjb21w dXRpbmcgc2NlbmFyaW9zLgorCitLbm93biBHYXBzCistLS0tLS0tLS0tCisKK0lQRSBjYW5ub3Qg dmVyaWZ5IHRoZSBpbnRlZ3JpdHkgb2YgYW5vbnltb3VzIGV4ZWN1dGFibGUgbWVtb3J5LCBzdWNo IGFzCit0aGUgdHJhbXBvbGluZXMgY3JlYXRlZCBieSBnY2MgY2xvc3VyZXMgYW5kIGxpYmZmaSAo PDMuNC4yKSwgb3IgSklUJ2QgY29kZS4KK1VuZm9ydHVuYXRlbHksIGFzIHRoaXMgaXMgZHluYW1p Y2FsbHkgZ2VuZXJhdGVkIGNvZGUsIHRoZXJlIGlzIG5vIHdheQorZm9yIElQRSB0byBlbnN1cmUg dGhlIGludGVncml0eSBvZiB0aGlzIGNvZGUgdG8gZm9ybSBhIHRydXN0IGJhc2lzLiBJbiBhbGwK K2Nhc2VzLCB0aGUgcmV0dXJuIHJlc3VsdCBmb3IgdGhlc2Ugb3BlcmF0aW9ucyB3aWxsIGJlIHdo YXRldmVyIHRoZSBhZG1pbgorY29uZmlndXJlcyBhcyB0aGUgYGBERUZBVUxUYGAgYWN0aW9uIGZv ciBgYEVYRUNVVEVgYC4KKworSVBFIGNhbm5vdCB2ZXJpZnkgdGhlIGludGVncml0eSBvZiBpbnRl cnByZXRlZCBsYW5ndWFnZXMnIHByb2dyYW1zIHdoZW4KK3RoZXNlIHNjcmlwdHMgYXJlIGludm9r ZWQgdmlhIGBgPGludGVycHJldGVyPiA8ZmlsZT5gYC4gVGhpcyBpcyBiZWNhdXNlCit0aGUgd2F5 IGludGVycHJldGVycyBleGVjdXRlIHRoZXNlIGZpbGVzLCB0aGUgc2NyaXB0cyB0aGVtc2VsdmVz IGFyZSBub3QKK2V2YWx1YXRlZCBhcyBleGVjdXRhYmxlIGNvZGUgdGhyb3VnaCBvbmUgb2YgSVBF J3MgaG9va3MsIGFzIHRoZXkgYXJlIG1lcmVseQorZmlsZXMgdGhhdCBhcmUgcmVhZCAoYXMgb3Bw b3NlZCB0byBleGVjdXRhYmxlIGNvZGUpIFsjaW50ZXJwcmV0ZXJzXV8uCisKK1RocmVhdCBNb2Rl bAorLS0tLS0tLS0tLS0tCisKK1RoZSB0aHJlYXQgdHlwZSBhZGRyZXNzZWQgYnkgSVBFIGlzIHRh bXBlcmluZyBvZiBleGVjdXRhYmxlIHVzZXJzcGFjZQorY29kZSBiZXlvbmQgdGhlIGluaXRpYWxs eSBib290ZWQga2VybmVsLCBhbmQgdGhlIGluaXRpYWwgdmVyaWZpY2F0aW9uIG9mCitrZXJuZWwg bW9kdWxlcyB0aGF0IGFyZSBsb2FkZWQgaW4gdXNlcnNwYWNlIHRocm91Z2ggYGBtb2Rwcm9iZWBg IG9yCitgYGluc21vZGBgLgorCitBIGJhcmUtbWluaW11bSBleGFtcGxlIG9mIGEgdGhyZWF0IHRo YXQgc2hvdWxkIGJlIG1pdGlnYXRlZCBieSBJUEUsIGlzCithIGhvc3RpbGUgYmluYXJ5IGlzIGRv d25sb2FkZWQgd2l0aCBhbGwgcmVxdWlyZWQgYmluYXJpZXMgKGluY2x1ZGluZworYSBsb2FkZXIs IGxpYmMsIGV0YykuIFdpdGggSVBFLCB0aGlzIGhvc3RpbGUgYmluYXJ5IHNob3VsZCBub3QgYWJs ZSB0bworYmUgZXhlY3V0ZWQsIG5vciBhbnkgb2YgdGhlIGRvd25sb2FkZWQgYmluYXJpZXMuCisK K1RhbXBlcmluZyB2aW9sYXRlcyBpbnRlZ3JpdHksIGFuZCBiZWluZyB1bmFibGUgdG8gdmVyaWZ5 IHRoZSBpbnRlZ3JpdHksCityZXN1bHRzIGluIGEgbGFjayBvZiB0cnVzdC4gSVBFJ3Mgcm9sZSBp biBtaXRpZ2F0aW5nIHRoaXMgdGhyZWF0IGlzIHRvCit2ZXJpZnkgdGhlIGludGVncml0eSAoYW5k IGF1dGhlbnRpY2l0eSkgb2YgYWxsIGV4ZWN1dGFibGUgY29kZSBhbmQgdG8KK2RlbnkgdGhlaXIg dXNlIGlmIHRoZXkgY2Fubm90IGJlIHRydXN0ZWQgKGFzIGludGVncml0eSB2ZXJpZmljYXRpb24g ZmFpbHMsCitvciB0aGUgYXV0aG9yaXphdGlvbiBjaGVjayBmYWlscyBhZ2FpbnN0IHRoZSByZWZl cmVuY2UgdmFsdWUgaW4gdGhlIHBvbGljeSkuCitJUEUgZ2VuZXJhdGVzIGF1ZGl0IGxvZ3Mgd2hp Y2ggbWF5IGJlIHV0aWxpemVkIHRvIGRldGVjdCBmYWlsdXJlcyByZXN1bHRpbmcKK2Zyb20gZmFp bHVyZSB0byBwYXNzIHBvbGljeS4KKworVGFtcGVyaW5nIHRocmVhdCBzY2VuYXJpb3MgaW5jbHVk ZSBtb2RpZmljYXRpb24gb3IgcmVwbGFjZW1lbnQgb2YKK2V4ZWN1dGFibGUgY29kZSBieSBhIHJh bmdlIG9mIGFjdG9ycyBpbmNsdWRpbmc6CisKKy0gIEFjdG9ycyB3aXRoIHBoeXNpY2FsIGFjY2Vz cyB0byB0aGUgaGFyZHdhcmUKKy0gIEFjdG9ycyB3aXRoIGxvY2FsIG5ldHdvcmsgYWNjZXNzIHRv IHRoZSBzeXN0ZW0KKy0gIEFjdG9ycyB3aXRoIGFjY2VzcyB0byB0aGUgZGVwbG95bWVudCBzeXN0 ZW0KKy0gIENvbXByb21pc2VkIGludGVybmFsIHN5c3RlbXMgdW5kZXIgZXh0ZXJuYWwgY29udHJv bAorLSAgTWFsaWNpb3VzIGVuZCB1c2VycyBvZiB0aGUgc3lzdGVtCistICBDb21wcm9taXNlZCBl bmQgdXNlcnMgb2YgdGhlIHN5c3RlbQorLSAgUmVtb3RlIChleHRlcm5hbCkgY29tcHJvbWlzZSBv ZiB0aGUgc3lzdGVtCisKK0lQRSBkb2VzIG5vdCBtaXRpZ2F0ZSB0aHJlYXRzIGFyaXNpbmcgZnJv bSBtYWxpY2lvdXMgYXV0aG9yaXplZAorZGV2ZWxvcGVycyAod2l0aCBhY2Nlc3MgdG8gYSBzaWdu aW5nIGNlcnRpZmljYXRlKSwgb3IgY29tcHJvbWlzZWQKK2RldmVsb3BlciB0b29scyB1c2VkIGJ5 IGF1dGhvcml6ZWQgZGV2ZWxvcGVycyAoaS5lLiBSZXR1cm4gT3JpZW50ZWQKK1Byb2dyYW1taW5n IGF0dGFja3MpLiBBZGRpdGlvbmFsbHksIElQRSBkcmF3cyBoYXJkIHNlY3VyaXR5IGJvdW5kYXJ5 CitiZXR3ZWVuIHVzZXJzcGFjZSBhbmQga2VybmVsc3BhY2UuIEFzIGEgcmVzdWx0LCBJUEUgZG9l cyBub3QgcHJvdmlkZQorYW55IHByb3RlY3Rpb25zIGFnYWluc3QgYSBrZXJuZWwgbGV2ZWwgZXhw bG9pdCwgYW5kIGEga2VybmVsLWxldmVsCitleHBsb2l0IGNhbiBkaXNhYmxlIG9yIHRhbXBlciB3 aXRoIElQRSdzIHByb3RlY3Rpb25zLgorCitQb2xpY3kKKy0tLS0tLQorCitJUEUgcG9saWN5IGlz IGEgcGxhaW4tdGV4dCBbI2RldmRvY11fIHBvbGljeSBjb21wb3NlZCBvZiBtdWx0aXBsZSBzdGF0 ZW1lbnRzCitvdmVyIHNldmVyYWwgbGluZXMuIFRoZXJlIGlzIG9uZSByZXF1aXJlZCBsaW5lLCBh dCB0aGUgdG9wIG9mIHRoZQorcG9saWN5LCBpbmRpY2F0aW5nIHRoZSBwb2xpY3kgbmFtZSwgYW5k IHRoZSBwb2xpY3kgdmVyc2lvbiwgZm9yCitpbnN0YW5jZTo6CisKKyAgIHBvbGljeV9uYW1lPUV4 X1BvbGljeSBwb2xpY3lfdmVyc2lvbj0wLjAuMAorCitUaGUgcG9saWN5IG5hbWUgaXMgYSB1bmlx dWUga2V5IGlkZW50aWZ5aW5nIHRoaXMgcG9saWN5IGluIGEgaHVtYW4KK3JlYWRhYmxlIG5hbWUu IFRoaXMgaXMgdXNlZCB0byBjcmVhdGUgbm9kZXMgdW5kZXIgc2VjdXJpdHlmcyBhcyB3ZWxsIGFz Cit1bmlxdWVseSBpZGVudGlmeSBwb2xpY2llcyB0byBkZXBsb3kgbmV3IHBvbGljaWVzIHZzIHVw ZGF0ZSBleGlzdGluZworcG9saWNpZXMuCisKK1RoZSBwb2xpY3kgdmVyc2lvbiBpbmRpY2F0ZXMg dGhlIGN1cnJlbnQgdmVyc2lvbiBvZiB0aGUgcG9saWN5IChOT1QgdGhlCitwb2xpY3kgc3ludGF4 IHZlcnNpb24pLiBUaGlzIGlzIHVzZWQgdG8gcHJldmVudCByb2xsYmFjayBvZiBwb2xpY3kgdG8K K3BvdGVudGlhbGx5IGluc2VjdXJlIHByZXZpb3VzIHZlcnNpb25zIG9mIHRoZSBwb2xpY3kuCisK K1RoZSBuZXh0IHBvcnRpb24gb2YgSVBFIHBvbGljeSBhcmUgcnVsZXMuIFJ1bGVzIGFyZSBmb3Jt ZWQgYnkga2V5PXZhbHVlCitwYWlycywga25vd24gYXMgcHJvcGVydGllcy4gSVBFIHJ1bGVzIHJl cXVpcmUgdHdvIHByb3BlcnRpZXM6ICJhY3Rpb24iLAord2hpY2ggZGV0ZXJtaW5lcyB3aGF0IElQ RSBkb2VzIHdoZW4gaXQgZW5jb3VudGVycyBhIG1hdGNoIGFnYWluc3QgdGhlCitydWxlLCBhbmQg Im9wIiwgd2hpY2ggZGV0ZXJtaW5lcyB3aGVuIHRoYXQgcnVsZSBzaG91bGQgYmUgZXZhbHVhdGVk LgorVGhlIG9yZGVyaW5nIGlzIHNpZ25pZmljYW50LCBhIHJ1bGUgbXVzdCBzdGFydCB3aXRoICJv cCIsIGFuZCBlbmQgd2l0aAorImFjdGlvbiIuIFRodXMsIGEgbWluaW1hbCBydWxlIGlzOjoKKwor ICAgb3A9RVhFQ1VURSBhY3Rpb249QUxMT1cKKworVGhpcyBleGFtcGxlIHdpbGwgYWxsb3cgYW55 IGV4ZWN1dGlvbi4gQWRkaXRpb25hbCBwcm9wZXJ0aWVzIGFyZSB1c2VkIHRvCityZXN0cmljdCBh dHRyaWJ1dGVzIGFib3V0IHRoZSBmaWxlcyBiZWluZyBldmFsdWF0ZWQuIFRoZXNlIHByb3BlcnRp ZXMKK2FyZSBpbnRlbmRlZCB0byBiZSBkZXNjcmlwdGlvbnMgb2Ygc3lzdGVtcyB3aXRoaW4gdGhl IGtlcm5lbCB0aGF0IGNhbgorcHJvdmlkZSBhIG1lYXN1cmUgb2YgaW50ZWdyaXR5IHZlcmlmaWNh dGlvbiwgc3VjaCB0aGF0IElQRSBjYW4gZGV0ZXJtaW5lCit0aGUgdHJ1c3Qgb2YgdGhlIHJlc291 cmNlIGJhc2VkIG9uIHRoZSAidmFsdWUiIGhhbGYgb2YgdGhlIHByb3BlcnR5LgorCitSdWxlcyBh cmUgZXZhbHVhdGVkIHRvcC10by1ib3R0b20uIEFzIGEgcmVzdWx0LCBhbnkgcmV2b2NhdGlvbiBy dWxlcywKK29yIGRlbmllcyBzaG91bGQgYmUgcGxhY2VkIGVhcmx5IGluIHRoZSBmaWxlIHRvIGVu c3VyZSB0aGF0IHRoZXNlIHJ1bGVzCithcmUgZXZhbHVhdGVkIGJlZm9yZSBhIHJ1bGUgd2l0aCAi YWN0aW9uPUFMTE9XIiBpcyBoaXQuCisKK0lQRSBwb2xpY3kgc3VwcG9ydHMgY29tbWVudHMuIFRo ZSBjaGFyYWN0ZXIgJyMnIHdpbGwgZnVuY3Rpb24gYXMgYQorY29tbWVudCwgaWdub3JpbmcgYWxs IGNoYXJhY3RlcnMgdG8gdGhlIHJpZ2h0IG9mICcjJyB1bnRpbCB0aGUgbmV3bGluZS4KKworVGhl IGRlZmF1bHQgYmVoYXZpb3Igb2YgSVBFIGV2YWx1YXRpb25zIGNhbiBhbHNvIGJlIGV4cHJlc3Nl ZCBpbiBwb2xpY3ksCit0aHJvdWdoIHRoZSBgYERFRkFVTFRgYCBzdGF0ZW1lbnQuIFRoaXMgY2Fu IGJlIGRvbmUgYXQgYSBnbG9iYWwgbGV2ZWwsCitvciBhIHBlci1vcGVyYXRpb24gbGV2ZWw6Ogor CisgICAjIEdsb2JhbAorICAgREVGQVVMVCBhY3Rpb249QUxMT1cKKworICAgIyBPcGVyYXRpb24g U3BlY2lmaWMKKyAgIERFRkFVTFQgb3A9RVhFQ1VURSBhY3Rpb249QUxMT1cKKworQSBkZWZhdWx0 IG11c3QgYmUgc2V0IGZvciBhbGwga25vd24gb3BlcmF0aW9ucyBpbiBJUEUuIElmIHlvdSB3YW50 IHRvCitwcmVzZXJ2ZSBvbGRlciBwb2xpY2llcyBiZWluZyBjb21wYXRpYmxlIHdpdGggbmV3ZXIg a2VybmVscyB0aGF0IGNhbiBpbnRyb2R1Y2UKK25ldyBvcGVyYXRpb25zLCBwbGVhc2Ugc2V0IGEg Z2xvYmFsIGRlZmF1bHQgb2YgJ0FMTE9XJywgYW5kIG92ZXJyaWRlIHRoZQorZGVmYXVsdHMgb24g YSBwZXItb3BlcmF0aW9uIGJhc2lzLgorCitXaXRoIGNvbmZpZ3VyYWJsZSBwb2xpY3ktYmFzZWQg TFNNcywgdGhlcmUncyBzZXZlcmFsIGlzc3VlcyB3aXRoCitlbmZvcmNpbmcgdGhlIGNvbmZpZ3Vy YWJsZSBwb2xpY2llcyBhdCBzdGFydHVwLCBhcm91bmQgcmVhZGluZyBhbmQKK3BhcnNpbmcgdGhl IHBvbGljeToKKworMS4gVGhlIGtlcm5lbCAqc2hvdWxkKiBub3QgcmVhZCBmaWxlcyBmcm9tIHVz ZXJzcGFjZSwgc28gZGlyZWN0bHkgcmVhZGluZworICAgdGhlIHBvbGljeSBmaWxlIGlzIHByb2hp Yml0ZWQuCisyLiBUaGUga2VybmVsIGNvbW1hbmQgbGluZSBoYXMgYSBjaGFyYWN0ZXIgbGltaXQs IGFuZCBvbmUga2VybmVsIG1vZHVsZQorICAgc2hvdWxkIG5vdCByZXNlcnZlIHRoZSBlbnRpcmUg Y2hhcmFjdGVyIGxpbWl0IGZvciBpdHMgb3duCisgICBjb25maWd1cmF0aW9uLgorMy4gVGhlcmUg YXJlIHZhcmlvdXMgYm9vdCBsb2FkZXJzIGluIHRoZSBrZXJuZWwgZWNvc3lzdGVtLCBzbyBoYW5k aW5nCisgICBvZmYgYSBtZW1vcnkgYmxvY2sgd291bGQgYmUgY29zdGx5IHRvIG1haW50YWluLgor CitBcyBhIHJlc3VsdCwgSVBFIGhhcyBhZGRyZXNzZWQgdGhpcyBwcm9ibGVtIHRocm91Z2ggYSBj b25jZXB0IG9mIGEgImJvb3QKK3BvbGljeSIuIEEgYm9vdCBwb2xpY3kgaXMgYSBtaW5pbWFsIHBv bGljeSwgY29tcGlsZWQgaW50byB0aGUga2VybmVsLgorVGhpcyBwb2xpY3kgaXMgaW50ZW5kZWQg dG8gZ2V0IHRoZSBzeXN0ZW0gdG8gYSBzdGF0ZSB3aGVyZSB1c2Vyc3BhY2UgaXMKK3NldCB1cCBh bmQgcmVhZHkgdG8gcmVjZWl2ZSBjb21tYW5kcywgYXQgd2hpY2ggcG9pbnQgYSBtb3JlIGNvbXBs ZXgKK3BvbGljeSBjYW4gYmUgZGVwbG95ZWQgdmlhIHNlY3VyaXR5ZnMuIFRoZSBib290IHBvbGlj eSBjYW4gYmUgc3BlY2lmaWVkCit2aWEgdGhlIEtjb25maWcsIGBgU0VDVVJJVFlfSVBFX0JPT1Rf UE9MSUNZYGAsIHdoaWNoIGFjY2VwdHMgYSBwYXRoIHRvCithIHBsYWluLXRleHQgdmVyc2lvbiBv ZiB0aGUgSVBFIHBvbGljeSB0byBhcHBseS4gVGhpcyBwb2xpY3kgd2lsbCBiZQorY29tcGlsZWQg aW50byB0aGUga2VybmVsLiBJZiBub3Qgc3BlY2lmaWVkLCBJUEUgd2lsbCBiZSBkaXNhYmxlZCB1 bnRpbAorYSBwb2xpY3kgaXMgZGVwbG95ZWQgYW5kIGFjdGl2YXRlZCB0aHJvdWdoIHNlY3VyaXR5 ZnMuCisKK0RlcGxveWluZyBQb2xpY2llcworfn5+fn5+fn5+fn5+fn5+fn5+CisKK1BvbGljaWVz IGNhbiBiZSBkZXBsb3llZCBmcm9tIHVzZXJzcGFjZSB0aHJvdWdoIHNlY3VyaXR5ZnMuIFRoZXNl IHBvbGljaWVzCithcmUgc2lnbmVkIHRocm91Z2ggdGhlIFBLQ1MjNyBtZXNzYWdlIGZvcm1hdCB0 byBlbmZvcmNlIHNvbWUgbGV2ZWwgb2YKK2F1dGhvcml6YXRpb24gb2YgdGhlIHBvbGljaWVzIChw cm9oaWJpdGluZyBhbiBhdHRhY2tlciBmcm9tIGdhaW5pbmcKK3VuY29uc3RyYWluZWQgcm9vdCwg YW5kIGRlcGxveWluZyBhbiAiYWxsb3cgYWxsIiBwb2xpY3kpLiBUaGVzZQorcG9saWNpZXMgbXVz dCBiZSBzaWduZWQgYnkgYSBjZXJ0aWZpY2F0ZSB0aGF0IGNoYWlucyB0byB0aGUKK2BgU1lTVEVN X1RSVVNURURfS0VZUklOR2BgLiBUaHJvdWdoIG9wZW5zc2wsIHRoZSBzaWduaW5nIGNhbiBiZSBk b25lIHZpYTo6CisKKyAgIG9wZW5zc2wgc21pbWUgLXNpZ24gXAorICAgICAgLWluICIkTVlfUE9M SUNZIiBcCisgICAgICAtc2lnbmVyICIkTVlfQ0VSVElGSUNBVEUiIFwKKyAgICAgIC1pbmtleSAi JE1ZX1BSSVZBVEVfS0VZIiBcCisgICAgICAtbm9hdHRyIFwKKyAgICAgIC1ub2RldGFjaCBcCisg ICAgICAtbm9zbWltZWNhcCBcCisgICAgICAtb3V0Zm9ybSBkZXIgXAorICAgICAgLW91dCAiJE1Z X1BPTElDWS5wN2IiCisKK0RlcGxveWluZyB0aGUgcG9saWNpZXMgaXMgZG9uZSB0aHJvdWdoIHNl Y3VyaXR5ZnMsIHRocm91Z2ggdGhlCitgYG5ld19wb2xpY3lgYCBub2RlLiBUbyBkZXBsb3kgYSBw b2xpY3ksIHNpbXBseSBjYXQgdGhlIGZpbGUgaW50byB0aGUKK3NlY3VyaXR5ZnMgbm9kZTo6CisK KyAgIGNhdCAiJE1ZX1BPTElDWS5wN2IiID4gL3N5cy9rZXJuZWwvc2VjdXJpdHkvaXBlL25ld19w b2xpY3kKKworVXBvbiBzdWNjZXNzLCB0aGlzIHdpbGwgY3JlYXRlIG9uZSBzdWJkaXJlY3Rvcnkg dW5kZXIKK2BgL3N5cy9rZXJuZWwvc2VjdXJpdHkvaXBlL3BvbGljaWVzL2BgLiBUaGUgc3ViZGly ZWN0b3J5IHdpbGwgYmUgdGhlCitgYHBvbGljeV9uYW1lYGAgZmllbGQgb2YgdGhlIHBvbGljeSBk ZXBsb3llZCwgc28gZm9yIHRoZSBleGFtcGxlIGFib3ZlLAordGhlIGRpcmVjdG9yeSB3aWxsIGJl IGBgL3N5cy9rZXJuZWwvc2VjdXJpdHkvaXBlL3BvbGljaWVzL0V4X1BvbGljeWBgLgorV2l0aGlu IHRoaXMgZGlyZWN0b3J5LCB0aGVyZSB3aWxsIGJlIGZpdmUgZmlsZXM6IGBgcGtjczdgYCwgYGBw b2xpY3lgYCwKK2BgYWN0aXZlYGAsIGBgdXBkYXRlYGAsIGFuZCBgYGRlbGV0ZWBgLgorCitUaGUg YGBwa2NzN2BgIGZpbGUgaXMgcmVhZCBvbmx5LiBSZWFkaW5nIHdpbGwgcHJvdmlkZSB0aGUgcmF3 IFBLQ1MjNyBkYXRhCit0aGF0IHdhcyBwcm92aWRlZCB0byB0aGUga2VybmVsLCByZXByZXNlbnRp bmcgdGhlIHBvbGljeS4gV3JpdGluZywgd2lsbAorZGVwbG95IGFuIGluLXBsYWNlIHBvbGljeSB1 cGRhdGUuSWYgdGhlIHBvbGljeSBiZWluZyByZWFkIGlzIHRoZSBib290Citwb2xpY3ksIHdoZW4g cmVhZCwgdGhpcyB3aWxsIHJldHVybiBFTk9FTlQsIGFzIHRoaXMgcG9saWN5IGlzIG5vdCBzaWdu ZWQuCisKK1RoZSBgYHBvbGljeWBgIGZpbGUgaXMgcmVhZCBvbmx5LiBSZWFkaW5nIHdpbGwgcHJv dmlkZSB0aGUgUEtDUyM3IGlubmVyCitjb250ZW50IG9mIHRoZSBwb2xpY3ksIHdoaWNoIHdpbGwg YmUgdGhlIHBsYWluIHRleHQgcG9saWN5LgorCitUaGUgYGBhY3RpdmVgYCBmaWxlIGlzIHVzZWQg dG8gc2V0IGEgcG9saWN5IGFzIHRoZSBjdXJyZW50bHkgYWN0aXZlIHBvbGljeS4KK1RoaXMgZmls ZSBpcyBydywgYW5kIGFjY2VwdHMgYSB2YWx1ZSBvZiBgYCIxImBgIHRvIHNldCB0aGUgcG9saWN5 IGFzIGFjdGl2ZS4KK1NpbmNlIG9ubHkgYSBzaW5nbGUgcG9saWN5IGNhbiBiZSBhY3RpdmUgYXQg b25lIHRpbWUsIGFsbCBvdGhlciBwb2xpY2llcword2lsbCBiZSBtYXJrZWQgaW5hY3RpdmUuIFRo ZSBwb2xpY3kgYmVpbmcgbWFya2VkIGFjdGl2ZSBtdXN0IGhhdmUgYSBwb2xpY3kKK3ZlcnNpb24g Z3JlYXRlciBvciBlcXVhbCB0byB0aGUgY3VycmVudGx5LXJ1bm5pbmcgdmVyc2lvbi4KKworVGhl IGBgdXBkYXRlYGAgZmlsZSBpcyB1c2VkIHRvIHVwZGF0ZSBhIHBvbGljeSB0aGF0IGlzIGFscmVh ZHkgcHJlc2VudCBpbgordGhlIGtlcm5lbC4gVGhpcyBmaWxlIGlzIHdyaXRlLW9ubHkgYW5kIGFj Y2VwdHMgYSBQS0NTIzcgc2lnbmVkIHBvbGljeS4KK09uZSBjaGVjayB3aWxsIGFsd2F5cyBiZSBw ZXJmb3JtZWQgb24gdGhpcyBwb2xpY3k6IHRoZSBwb2xpY3lfbmFtZXMgbXVzdAorbWF0Y2ggd2l0 aCB0aGUgdXBkYXRlZCB2ZXJzaW9uIGFuZCB0aGUgZXhpc3RpbmcgdmVyc2lvbi4gT25lIGFkZGl0 aW9uYWwgY2hlY2sKK21heSBiZSBtYWRlOiBJZiB0aGUgcG9saWN5IGJlaW5nIHVwZGF0ZWQgaXMg dGhlIGFjdGl2ZSBwb2xpY3ksIHRoZSB1cGRhdGVkCitwb2xpY3kgbXVzdCBoYXZlIGEgcG9saWN5 IHZlcnNpb24gZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIHRoZSBjdXJyZW50bHktcnVubmluZwor dmVyc2lvbjsgVGhpcyBpcyB0byBwcmV2ZW50IHJvbGxiYWNrIGF0dGFja3MuCisKK1RoZSBgYGRl bGV0ZWBgIGZpbGUgaXMgdXNlZCB0byByZW1vdmUgYSBwb2xpY3kgdGhhdCBpcyBubyBsb25nZXIg bmVlZGVkLgorVGhpcyBmaWxlIGlzIHdyaXRlLW9ubHkgYW5kIGFjY2VwdHMgYSB2YWx1ZSBvZiBg YDFgYCB0byBkZWxldGUgdGhlIHBvbGljeS4KK09uIGRlbGV0aW9uLCB0aGUgc2VjdXJpdHlmcyBu b2RlIHJlcHJlc2VudGluZyB0aGUgcG9saWN5IHdpbGwgYmUgcmVtb3ZlZC4KK1RoZSBwb2xpY3kg dGhhdCBpcyBjdXJyZW50bHkgYWN0aXZlIGNhbm5vdCBiZSBkZWxldGVkLgorCitTaW1pbGFybHks IHRoZSB3cml0ZXMgdG8gYm90aCBgYHVwZGF0ZWBgIGFuZCBgYG5ld19wb2xpY3lgYCBhYm92ZSB3 aWxsCityZXN1bHQgaW4gYW4gZXJyb3IgdXBvbiBzeW50YWN0aWNhbGx5IGludmFsaWQgb3IgdW50 cnVzdGVkIHBvbGljaWVzLgorSW4gdGhlIGNhc2Ugb2YgYGBuZXdfcG9saWN5YGAsIGl0IHdpbGwg YWxzbyBlcnJvciBpZiBhIHBvbGljeSBhbHJlYWR5CitleGlzdHMgd2l0aCB0aGUgc2FtZSBgYHBv bGljeV9uYW1lYGAuCisKK0RlcGxveWluZyB0aGVzZSBwb2xpY2llcyB3aWxsICpub3QqIGNhdXNl IElQRSB0byBzdGFydCBlbmZvcmNpbmcgdGhpcworcG9saWN5LiBPbmNlIGRlcGxveW1lbnQgaXMg c3VjY2Vzc2Z1bCwgYSBwb2xpY3kgY2FuIGJlIG1hcmtlZCBhcyBhY3RpdmUsCit2aWEgYGAvc3lz L2tlcm5lbC9zZWN1cml0eS9pcGUvJHBvbGljeV9uYW1lL2FjdGl2ZWBgLiBJUEUgd2lsbCBlbmZv cmNlCit3aGF0ZXZlciBwb2xpY3kgaXMgbWFya2VkIGFzIGFjdGl2ZS4gRm9yIG91ciBleGFtcGxl LCB3ZSBjYW4gYWN0aXZhdGUKK3RoZSBgYEV4X1BvbGljeWBgIHZpYTo6CisKKyAgIGVjaG8gMSA+ ICIvc3lzL2tlcm5lbC9zZWN1cml0eS9pcGUvRXhfUG9saWN5L2FjdGl2ZSIKKworQXQgd2hpY2gg cG9pbnQsIGBgRXhfUG9saWN5YGAgd2lsbCBub3cgYmUgdGhlIGVuZm9yY2VkIHBvbGljeSBvbiB0 aGUKK3N5c3RlbS4KKworSVBFIGFsc28gcHJvdmlkZXMgYSB3YXkgdG8gZGVsZXRlIHBvbGljaWVz LiBUaGlzIGNhbiBiZSBkb25lIHZpYSB0aGUKK2BgZGVsZXRlYGAgc2VjdXJpdHlmcyBub2RlLCBg YC9zeXMva2VybmVsL3NlY3VyaXR5L2lwZS8kcG9saWN5X25hbWUvZGVsZXRlYGAuCitXcml0aW5n IGBgMWBgIHRvIHRoYXQgZmlsZSB3aWxsIGRlbGV0ZSB0aGF0IG5vZGU6OgorCisgICBlY2hvIDEg PiAiL3N5cy9rZXJuZWwvc2VjdXJpdHkvaXBlLyRwb2xpY3lfbmFtZS9kZWxldGUiCisKK1RoZXJl IGlzIG9ubHkgb25lIHJlcXVpcmVtZW50IHRvIGRlbGV0ZSBhIHBvbGljeToKKworMS4gVGhlIHBv bGljeSBiZWluZyBkZWxldGVkIG11c3Qgbm90IGJlIHRoZSBhY3RpdmUgcG9saWN5LgorCisuLiBO T1RFOjoKKworICAgSWYgYSB0cmFkaXRpb25hbCBNQUMgc3lzdGVtIGlzIGVuYWJsZWQgKFNFTGlu dXgsIGFwcGFybW9yLCBzbWFjayksIGFsbAorICAgd3JpdGVzIHRvIGlwZSdzIHNlY3VyaXR5ZnMg bm9kZXMgcmVxdWlyZSBgYENBUF9NQUNfQURNSU5gYC4KKworTW9kZXMKK35+fn5+CisKK0lQRSBz dXBwb3J0cyB0d28gbW9kZXMgb2Ygb3BlcmF0aW9uOiBwZXJtaXNzaXZlIChzaW1pbGFyIHRvIFNF TGludXgncworcGVybWlzc2l2ZSBtb2RlKSBhbmQgZW5mb3JjZS4gUGVybWlzc2l2ZSBtb2RlIHBl cmZvcm1zIHRoZSBzYW1lIGNoZWNrcworYXMgZW5mb3JjZSBtb2RlLCBhbmQgbG9ncyBwb2xpY3kg dmlvbGF0aW9ucywgYnV0IHdpbGwgbm90IGVuZm9yY2UgdGhlCitwb2xpY3kuIFRoaXMgYWxsb3dz IHVzZXJzIHRvIHRlc3QgcG9saWNpZXMgYmVmb3JlIGVuZm9yY2luZyB0aGVtLgorCitUaGUgZGVm YXVsdCBtb2RlIGlzIGVuZm9yY2UsIGFuZCBjYW4gYmUgY2hhbmdlZCB2aWEgdGhlIGtlcm5lbCBj b21tYW5kCitsaW5lIHBhcmFtZXRlciBgYGlwZS5lbmZvcmNlPSgwfDEpYGAsIG9yIHRoZSBzZWN1 cml0eWZzIG5vZGUKK2BgL3N5cy9rZXJuZWwvc2VjdXJpdHkvaXBlL2VuZm9yY2VgYC4KKworLi4g Tk9URTo6CisKKyAgIElmIGEgdHJhZGl0aW9uYWwgTUFDIHN5c3RlbSBpcyBlbmFibGVkIChTRUxp bnV4LCBhcHBhcm1vciwgc21hY2ssIGV0Y2V0ZXJhKSwKKyAgIGFsbCB3cml0ZXMgdG8gaXBlJ3Mg c2VjdXJpdHlmcyBub2RlcyByZXF1aXJlIGBgQ0FQX01BQ19BRE1JTmBgLgorCitBdWRpdCBFdmVu dHMKK35+fn5+fn5+fn5+fgorCisxNDIwIEFVRElUX0lQRV9BQ0NFU1MKK15eXl5eXl5eXl5eXl5e Xl5eXl5eXgorRXZlbnQgRXhhbXBsZXM6OgorCisgICB0eXBlPTE0MjAgYXVkaXQoMTY1MzM2NDM3 MC4wNjc6NjEpOiBwYXRoPSIvcm9vdC9mcy9ydy9wbGFpbi9leGVjdmUiIGRldj0idmRjMSIgaW5v PTE2IHJ1bGU9IkRFRkFVTFQgb3A9RVhFQ1VURSBhY3Rpb249REVOWSIKKyAgIHR5cGU9MTMwMCBh dWRpdCgxNjUzMzY0MzcwLjA2Nzo2MSk6IGFyY2g9YzAwMDAwM2Ugc3lzY2FsbD0xMCBzdWNjZXNz PW5vIGV4aXQ9LTEzIGEwPTdmMGJmMDY0NDAwMCBhMT00ZjgwIGEyPTUgYTM9N2YwYmYwNDNkMzAw IGl0ZW1zPTAgcHBpZD00NTUgcGlkPTczNyBhdWlkPTAgdWlkPTAgZ2lkPTAgZXVpZD0wIHN1aWQ9 MCBmc3VpZD0wIGVnaWQ9MCBzZ2lkPTAgZnNnaWQ9MCB0dHk9dHR5UzAgc2VzPTMgY29tbT0ibXBy b3RlY3QiIGV4ZT0iL3Jvb3QvaG9zdC9tcHJvdGVjdCIgc3Viaj1rZXJuZWwga2V5PShudWxsKQor ICAgdHlwZT0xMzI3IGF1ZGl0KDE2NTMzNjQzNzAuMDY3OjYxKTogcHJvY3RpdGxlPTY4NkY3Mzc0 MkY2RDcwNzI2Rjc0NjU2Mzc0MDA1MzQ4MDA1MjdDNTcwMDUyN0M1ODAwNzA2QzYxNjk2RTJGNjU3 ODY1NjM3NjY1CisKKyAgIHR5cGU9MTQyMCBhdWRpdCgxNjUzMzY0NzM1LjE2MTo2NCk6IHJ1bGU9 IkRFRkFVTFQgb3A9RVhFQ1VURSBhY3Rpb249REVOWSIKKyAgIHR5cGU9MTMwMCBhdWRpdCgxNjUz MzY0NzM1LjE2MTo2NCk6IGFyY2g9YzAwMDAwM2Ugc3lzY2FsbD05IHN1Y2Nlc3M9bm8gZXhpdD0t MTMgYTA9MCBhMT0xMDAwIGEyPTQgYTM9MjAgaXRlbXM9MCBwcGlkPTQ1NSBwaWQ9Nzc0IGF1aWQ9 MCB1aWQ9MCBnaWQ9MCBldWlkPTAgc3VpZD0wIGZzdWlkPTAgZWdpZD0wIHNnaWQ9MCBmc2dpZD0w IHR0eT10dHlTMCBzZXM9MyBjb21tPSJtbWFwIiBleGU9Ii9yb290L2hvc3QvbW1hcCIgc3Viaj1r ZXJuZWwga2V5PShudWxsKQorICAgdHlwZT0xMzI3IGF1ZGl0KDE2NTMzNjQ3MzUuMTYxOjY0KTog cHJvY3RpdGxlPTY4NkY3Mzc0MkY2RDZENjE3MDAwNDEwMDU44o+OCisKK1RoaXMgZXZlbnQgaW5k aWNhdGVzIHRoYXQgSVBFIG1hZGUgYW4gYWNjZXNzIGNvbnRyb2wgZGVjaXNpb247IHRoZSBJUEUg c3BlY2lmaWMKK3JlY29yZCAoMTQyMCkgd2lsbCBhbHdheXMgYmUgZW1pdHRlZCBpbiBjb25qdW5j dGlvbiB3aXRoIGEgYGBBVURJVFNZU0NBTExgYCByZWNvcmQuCisKK0RldGVybWluaW5nIHdoZXRo ZXIgSVBFIGlzIGluIHBlcm1pc3NpdmUgY2FuIGJlIGRlcml2ZWQgZnJvbSB0aGUgc3VjY2VzcyBh bmQgZXhpdAorZmllbGQgb2YgdGhlIEFVRElUU1lTQ0FMTCByZWNvcmQKKworCisKK0ZpZWxkIGRl c2NyaXB0aW9uczoKKworKy0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0r LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLSsKK3wgRmllbGQgICAgICAgICB8IFZhbHVlIFR5cGUgfCBPcHRpb25h bD8gfCBEZXNjcmlwdGlvbiBvZiBWYWx1ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICB8CisrPT09PT09PT09PT09PT09Kz09PT09PT09PT09PSs9PT09 PT09PT09PSs9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09KworfCBwYXRoICAgICAgICAgIHwgc3RyaW5nICAgICB8 IFllcyAgICAgICB8IFRoZSBhYnNvbHV0ZSBwYXRoIHRvIHRoZSBmaWxlIHRoYXQgd2FzIHRoZSBz dWJqZWN0IG9mIHRoZSBldmFsdWF0aW9uICAgIHwKKystLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0t LS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IGlubyAgICAgICAgICAgfCBpbnRl Z2VyICAgIHwgWWVzICAgICAgIHwgVGhlIGlub2RlIG51bWJlciBvZiB0aGUgZmlsZSB0aGF0IHdh cyB0aGUgc3ViamVjdCBvZiB0aGUgZXZhbHVhdGlvbiAgICAgfAorKy0tLS0tLS0tLS0tLS0tLSst LS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgZGV2ICAgICAgICAg ICB8IHN0cmluZyAgICAgfCBZZXMgICAgICAgfCBUaGUgZGV2aWNlIG5hbWUgdGhhdCB0aGUgZmls ZSB1bmRlciBldmFsdWF0aW9uIGJlbG9uZ3MgdG8sIGUuZy4gdmRhICAgICB8CisrLS0tLS0tLS0t LS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBydWxl ICAgICAgICAgIHwgc3RyaW5nICAgICB8IE5vICAgICAgICB8IFRoZSBleGFjdCBydWxlIGluIElQ RSdzIHBvbGljeSB0aGF0IHRoZSBldmFsdWF0aW9uIG1hdGNoZWQgICAgICAgICAgICAgIHwKKyst LS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0r CisKKzE0MDMgQVVESVRfTUFDX1BPTElDWV9MT0FECiteXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5e XgorCitFdmVudCBFeGFtcGxlOjoKKworICAgdHlwZT0xNDAzIGF1ZGl0KDE2NTM0MjU1MjkuOTI3 OjUzKTogcG9saWN5X25hbWU9ImRtdmVyaXR5X3Jvb3RoYXNoIiBwb2xpY3lfdmVyc2lvbj0wLjAu MCBzaGEyNTY9REM2N0FDMTlFMDU4OTRFRkIzMTcwQThFNTVERTUyOTc5NEUyNDhDMiBhdWlkPTQy OTQ5NjcyOTUgc2VzPTQyOTQ5NjcyOTUgbHNtPWlwZSByZXM9MQorICAgdHlwZT0xMzAwIGF1ZGl0 KDE2NTM0MjU1MjkuOTI3OjUzKTogYXJjaD1jMDAwMDAzZSBzeXNjYWxsPTEgc3VjY2Vzcz15ZXMg ZXhpdD0yNTY3IGEwPTMgYTE9NTU5NmZjYWUxZmIwIGEyPWEwNyBhMz0yIGl0ZW1zPTAgcHBpZD0x ODQgcGlkPTIyOSBhdWlkPTQyOTQ5NjcyOTUgdWlkPTAgZ2lkPTAgZXVpZD0wIHN1aWQ9MCBmc3Vp ZD0wIGVnaWQ9MCBzZ2lkPTAgZnNnaWQ9MCB0dHk9cHRzMCBzZXM9NDI5NDk2NzI5NSBjb21tPSJw eXRob24zIiBleGU9Ii91c3IvYmluL3B5dGhvbjMuMTAiIGtleT0obnVsbCkKKyAgIHR5cGU9MTMy NyBhdWRpdCgxNjUzNDI1NTI5LjkyNzo1Myk6IFBST0NUSVRMRSBwcm9jdGl0bGU9NzA3OTc0Njg2 RjZFMzMwMDc0NjU3Mzc0MkY2RDYxNjk2RTJFNzA3OTAwMkQ2NjAwMkUyRQorCitUaGlzIHJlY29y ZCB3aWxsIGFsd2F5cyBiZSBlbWl0dGVkIGluIGNvbmp1bmN0aW9uIHdpdGggYSBgYEFVRElUU1lT Q0FMTGBgIHJlY29yZCBmb3IgdGhlIGBgd3JpdGVgYCBzeXNjYWxsLgorCisrLS0tLS0tLS0tLS0t LS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IEZpZWxkICAgICAgICAgIHwg VmFsdWUgVHlwZSB8IE9wdGlvbmFsPyB8IERlc2NyaXB0aW9uIG9mIFZhbHVlICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrPT09PT09PT09PT09PT09PSs9PT09PT09 PT09PT0rPT09PT09PT09PT0rPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT0rCit8IHBvbGljeV9uYW1lICAgIHwgc3RyaW5nICAgICB8 IE5vICAgICAgICB8IFRoZSBwb2xpY3lfbmFtZSBmaWVsZCBvZiB0aGUgcG9saWN5LiAgICAgICAg ICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0t LS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0rCit8IHBvbGljeV92ZXJzaW9uIHwgc3RyaW5nICAgICB8IE5vICAgICAgICB8 IFRoZSBwb2xpY3lfdmVyc2lvbiBmaWVsZCBvZiB0aGUgcG9saWN5ICAgICAgICAgICAgICAgICAg ICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0r Cit8IHNoYTI1NiAgICAgICAgIHwgc3RyaW5nICAgICB8IFllcyogICAgICB8IEEgZmxhdCBoYXNo IG9mIHRoZSBwb2xpY3kuIENhbiBiZSB1c2VkIHRvIGlkZW50aWZ5IGEgcG9saWN5LiB8CisrLS0t LS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IGF1aWQgICAg ICAgICAgIHwgaW50ZWdlciAgICB8IE5vICAgICAgICB8IFRoZSBhdWRpdCB1c2VyIElELiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0t LSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IHNlcyAgICAgICAgICAgIHwgaW50 ZWdlciAgICB8IE5vICAgICAgICB8IFRoZSBzZXNzaW9uIElELiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0t LS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IGxzbSAgICAgICAgICAgIHwgc3RyaW5nICAgICB8IE5v ICAgICAgICB8IFRoZSBsc20gbmFtZSBhc3NvY2lhdGVkIHdpdGggdGhlIGV2ZW50LiAgICAgICAg ICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0t LS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0rCit8IHJlcyAgICAgICAgICAgIHwgaW50ZWdlciAgICB8IE5vICAgICAgICB8IFRo ZSBvcGVyYXRpb24gcmVzdWx0LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICB8CisrLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisK KzE0MDUgQVVESVRfTUFDX0NPTkZJR19DSEFOR0UKK15eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5e Xl4KKworRXZlbnQgRXhhbXBsZTo6CisKKyAgIHR5cGU9MTQwNSBhdWRpdCgxNjUzNDI1NTgzLjEz Njo1NCk6IG9sZF9hY3RpdmVfcG9sX25hbWU9IkFsbG93X0FsbCIgb2xkX2FjdGl2ZV9wb2xfdmVy c2lvbj0wLjAuMCBvbGRfc2hhMjU2PURBMzlBM0VFNUU2QjRCMEQzMjU1QkZFRjk1NjAxODkwQUZE ODA3MDkgbmV3X2FjdGl2ZV9wb2xfbmFtZT0iZG12ZXJpdHlfcm9vdGhhc2giIG5ld19hY3RpdmVf cG9sX3ZlcnNpb249MC4wLjAgbmV3X3NoYTI1Nj1EQzY3QUMxOUUwNTg5NEVGQjMxNzBBOEU1NURF NTI5Nzk0RTI0OEMyIGF1aWQ9NDI5NDk2NzI5NSBzZXM9NDI5NDk2NzI5NSBsc209aXBlIHJlcz0x CisgICB0eXBlPTEzMDAgYXVkaXQoMTY1MzQyNTU4My4xMzY6NTQpOiBTWVNDQUxMIGFyY2g9YzAw MDAwM2Ugc3lzY2FsbD0xIHN1Y2Nlc3M9eWVzIGV4aXQ9MiBhMD0zIGExPTU1OTZmY2FlMWZiMCBh Mj0yIGEzPTIgaXRlbXM9MCBwcGlkPTE4NCBwaWQ9MjI5IGF1aWQ9NDI5NDk2NzI5NSB1aWQ9MCBn aWQ9MCBldWlkPTAgc3VpZD0wIGZzdWlkPTAgZWdpZD0wIHNnaWQ9MCBmc2dpZD0wIHR0eT1wdHMw IHNlcz00Mjk0OTY3Mjk1IGNvbW09InB5dGhvbjMiIGV4ZT0iL3Vzci9iaW4vcHl0aG9uMy4xMCIg a2V5PShudWxsKQorICAgdHlwZT0xMzI3IGF1ZGl0KDE2NTM0MjU1ODMuMTM2OjU0KTogUFJPQ1RJ VExFIHByb2N0aXRsZT03MDc5NzQ2ODZGNkUzMzAwNzQ2NTczNzQyRjZENjE2OTZFMkU3MDc5MDAy RDY2MDAyRTIKKworVGhpcyByZWNvcmQgd2lsbCBhbHdheXMgYmUgZW1pdHRlZCBpbiBjb25qdW5j dGlvbiB3aXRoIGEgYGBBVURJVFNZU0NBTExgYCByZWNvcmQgZm9yIHRoZSBgYHdyaXRlYGAgc3lz Y2FsbC4KKworKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0t LS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsK K3wgRmllbGQgICAgICAgICAgICAgICAgICB8IFZhbHVlIFR5cGUgfCBPcHRpb25hbD8gfCBEZXNj cmlwdGlvbiBvZiBWYWx1ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrPT09PT09 PT09PT09PT09PT09PT09PT09Kz09PT09PT09PT09PSs9PT09PT09PT09PSs9PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09KworfCBvbGRfYWN0aXZlX3Bv bF9uYW1lICAgIHwgc3RyaW5nICAgICB8IE5vICAgICAgICB8IFRoZSBwb2xpY3lfbmFtZSBmaWVs ZCBvZiB0aGUgb2xkIGFjdGl2ZSBwb2xpY3kuICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IG9sZF9hY3RpdmVfcG9sX3ZlcnNpb24gfCBzdHJp bmcgICAgIHwgTm8gICAgICAgIHwgVGhlIHBvbGljeV92ZXJzaW9uIGZpZWxkIG9mIHRoZSBvbGQg YWN0aXZlIHBvbGljeS4gfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0r LS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLSsKK3wgb2xkX3NoYTI1NiAgICAgICAgICAgICB8IHN0cmluZyAgICAgfCBZZXMqICAg ICAgfCBBIGZsYXQgaGFzaCBvZiB0aGUgb2xkIGFjdGl2ZSBwb2xpY3kuICAgICAgICAgICAgICB8 CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBuZXdf YWN0aXZlX3BvbF9uYW1lICAgIHwgc3RyaW5nICAgICB8IE5vICAgICAgICB8IFRoZSBwb2xpY3lf bmFtZSBmaWVsZCBvZiB0aGUgbmV3IGFjdGl2ZSBwb2xpY3kuICAgIHwKKystLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IG5ld19hY3RpdmVfcG9sX3ZlcnNp b24gfCBzdHJpbmcgICAgIHwgTm8gICAgICAgIHwgVGhlIHBvbGljeV92ZXJzaW9uIGZpZWxkIG9m IHRoZSBuZXcgYWN0aXZlIHBvbGljeS4gfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0t LS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLSsKK3wgbmV3X3NoYTI1NiAgICAgICAgICAgICB8IHN0cmluZyAgICAg fCBZZXMqICAgICAgfCBBIGZsYXQgaGFzaCBvZiB0aGUgbmV3IGFjdGl2ZSBwb2xpY3kuICAgICAg ICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0t LS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t KworfCBhdWlkICAgICAgICAgICAgICAgICAgIHwgaW50ZWdlciAgICB8IE5vICAgICAgICB8IFRo ZSBhdWRpdCB1c2VyIElELiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IHNlcyAgICAgICAg ICAgICAgICAgICAgfCBpbnRlZ2VyICAgIHwgTm8gICAgICAgIHwgVGhlIHNlc3Npb24gSUQuICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgbHNtICAgICAgICAgICAgICAgICAgICB8IHN0 cmluZyAgICAgfCBObyAgICAgICAgfCBUaGUgbHNtIG5hbWUgYXNzb2NpYXRlZCB3aXRoIHRoZSBl dmVudC4gICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0t LSstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tKworfCByZXMgICAgICAgICAgICAgICAgICAgIHwgaW50ZWdlciAgICB8IE5vICAg ICAgICB8IFRoZSBvcGVyYXRpb24gcmVzdWx0LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisKKzE0 MDQgQVVESVRfTUFDX1NUQVRVUworXl5eXl5eXl5eXl5eXl5eXl5eXl5eCisKK0V2ZW50IEV4YW1w bGVzOjoKKworICAgdHlwZT0xNDA0IGF1ZGl0KDE2NTM0MjU2ODkuMDA4OjU1KTogcGVybWlzc2l2 ZT0xIGF1aWQ9MCBzZXM9NDI5NDk2NzI5NSBsc209aXBlIHJlcz0xCisgICB0eXBlPTEzMDAgYXVk aXQoMTY1MzQyNTY4OS4wMDg6NTUpOiBhcmNoPWMwMDAwMDNlIHN5c2NhbGw9MSBzdWNjZXNzPXll cyBleGl0PTIgYTA9MSBhMT01NWMxMDY1ZTVjNjAgYTI9MiBhMz0wIGl0ZW1zPTAgcHBpZD00MDUg cGlkPTQ0MSBhdWlkPTAgdWlkPTAgZ2lkPTAgZXVpZD0wIHN1aWQ9MCBmc3VpZD0wIGVnaWQ9MCBz Z2lkPSkKKyAgIHR5cGU9MTMyNyBhdWRpdCgxNjUzNDI1Njg5LjAwODo1NSk6IHByb2N0aXRsZT0i LWJhc2giCisKKyAgIHR5cGU9MTQwNCBhdWRpdCgxNjUzNDI1Njg5LjAwODo1NSk6IHBlcm1pc3Np dmU9MCBhdWlkPTAgc2VzPTQyOTQ5NjcyOTUgbHNtPWlwZSByZXM9MQorICAgdHlwZT0xMzAwIGF1 ZGl0KDE2NTM0MjU2ODkuMDA4OjU1KTogYXJjaD1jMDAwMDAzZSBzeXNjYWxsPTEgc3VjY2Vzcz15 ZXMgZXhpdD0yIGEwPTEgYTE9NTVjMTA2NWU1YzYwIGEyPTIgYTM9MCBpdGVtcz0wIHBwaWQ9NDA1 IHBpZD00NDEgYXVpZD0wIHVpZD0wIGdpZD0wIGV1aWQ9MCBzdWlkPTAgZnN1aWQ9MCBlZ2lkPTAg c2dpZD0pCisgICB0eXBlPTEzMjcgYXVkaXQoMTY1MzQyNTY4OS4wMDg6NTUpOiBwcm9jdGl0bGU9 Ii1iYXNoIgorCitUaGlzIHJlY29yZCB3aWxsIGFsd2F5cyBiZSBlbWl0dGVkIGluIGNvbmp1bmN0 aW9uIHdpdGggYSBgYEFVRElUU1lTQ0FMTGBgIHJlY29yZCBmb3IgdGhlIGBgd3JpdGVgYCBzeXNj YWxsLgorCisrLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t KworfCBGaWVsZCAgICAgIHwgVmFsdWUgVHlwZSB8IE9wdGlvbmFsPyB8IERlc2NyaXB0aW9uIG9m IFZhbHVlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKys9 PT09PT09PT09PT0rPT09PT09PT09PT09Kz09PT09PT09PT09Kz09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0rCit8IHBlcm1p c3NpdmUgfCBpbnRlZ2VyICAgIHwgTm8gICAgICAgIHwgVGhlIHN0YXRlIElQRSBpcyBiZWluZyBz d2l0Y2hlZCB0by4gMSBpcyBwZXJtaXNzaXZlLCAwIGlzIGVuZm9yY2UgfAorKy0tLS0tLS0tLS0t LSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgYXVpZCAgICAgICB8IGlu dGVnZXIgICAgfCBObyAgICAgICAgfCBUaGUgYXVkaXQgdXNlciBJRC4gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tKy0tLS0tLS0t LS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBzZXMgICAgICAgIHwgaW50ZWdlciAgICB8 IE5vICAgICAgICB8IFRoZSBzZXNzaW9uIElELiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0t LS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0rCit8IGxzbSAgICAgICAgfCBzdHJpbmcgICAgIHwgTm8gICAgICAg IHwgVGhlIGxzbSBuYW1lIGFzc29jaWF0ZWQgd2l0aCB0aGUgZXZlbnQuICAgICAgICAgICAgICAg ICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLSsKK3wgcmVzICAgICAgICB8IGludGVnZXIgICAgfCBObyAgICAgICAgfCBUaGUgb3Bl cmF0aW9uIHJlc3VsdC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICB8CisrLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwor CitTdWNjZXNzIEF1ZGl0aW5nCiteXl5eXl5eXl5eXl5eXl5eCisKK0lQRSBzdXBwb3J0cyBzdWNj ZXNzIGF1ZGl0aW5nLiBXaGVuIGVuYWJsZWQsIGFsbCBldmVudHMgdGhhdCBwYXNzIElQRQorcG9s aWN5IGFuZCBhcmUgbm90IGJsb2NrZWQgd2lsbCBlbWl0IGFuIGF1ZGl0IGV2ZW50LiBUaGlzIGlz IGRpc2FibGVkIGJ5CitkZWZhdWx0LCBhbmQgY2FuIGJlIGVuYWJsZWQgdmlhIHRoZSBrZXJuZWwg Y29tbWFuZCBsaW5lCitgYGlwZS5zdWNjZXNzX2F1ZGl0PSgwfDEpYGAgb3IgdGhlIHNlY3VyaXR5 ZnMgbm9kZSwKK2BgL3N5cy9rZXJuZWwvc2VjdXJpdHkvaXBlL3N1Y2Nlc3NfYXVkaXRgYC4KKwor VGhpcyBpcyAqdmVyeSogbm9pc3ksIGFzIElQRSB3aWxsIGNoZWNrIGV2ZXJ5IHVzZXJzcGFjZSBi aW5hcnkgb24gdGhlCitzeXN0ZW0sIGJ1dCBpcyB1c2VmdWwgZm9yIGRlYnVnZ2luZyBwb2xpY2ll cy4KKworLi4gTk9URTo6CisKKyAgIElmIGEgdHJhZGl0aW9uYWwgTUFDIHN5c3RlbSBpcyBlbmFi bGVkIChTRUxpbnV4LCBhcHBhcm1vciwgc21hY2ssIGV0Y2V0ZXJhKSwKKyAgIGFsbCB3cml0ZXMg dG8gaXBlJ3Mgc2VjdXJpdHlmcyBub2RlcyByZXF1aXJlIGBgQ0FQX01BQ19BRE1JTmBgLgorCitQ cm9wZXJ0aWVzCistLS0tLS0tLS0tCisKK0FzIGV4cGxhaW5lZCBhYm92ZSwgSVBFIHByb3BlcnRp ZXMgYXJlIGBga2V5PXZhbHVlYGAgcGFpcnMgZXhwcmVzc2VkIGluCitJUEUgcG9saWN5LiBUd28g cHJvcGVydGllcyBhcmUgYnVpbHQtaW50byB0aGUgcG9saWN5IHBhcnNlcjogJ29wJyBhbmQKKydh Y3Rpb24nLiBUaGUgb3RoZXIgcHJvcGVydGllcyBhcmUgZGV0ZXJtaW5zdGljIGF0dHJpYnV0ZXMg dG8gZXhwcmVzcworYWNyb3NzIGZpbGVzLiBDdXJyZW50bHkgdGhvc2UgcHJvcGVydGllcyBhcmU6 ICdgYGJvb3RfdmVyaWZpZWRgYCcsCisnYGBkbXZlcml0eV9zaWduYXR1cmVgYCcsICdgYGRtdmVy aXR5X3Jvb3RoYXNoYGAnLCAnYGBmc3Zlcml0eV9zaWduYXR1cmVgYCcsCisnYGBmc3Zlcml0eV9k aWdlc3RgYCcuIEEgZGVzY3JpcHRpb24gb2YgYWxsIHByb3BlcnRpZXMgc3VwcG9ydGVkIGJ5IElQ RQorYXJlIGxpc3RlZCBiZWxvdzoKKworb3AKK35+CisKK0luZGljYXRlcyB0aGUgb3BlcmF0aW9u IGZvciBhIHJ1bGUgdG8gYXBwbHkgdG8uIE11c3QgYmUgaW4gZXZlcnkgcnVsZSwKK2FzIHRoZSBm aXJzdCB0b2tlbi4gSVBFIHN1cHBvcnRzIHRoZSBmb2xsb3dpbmcgb3BlcmF0aW9uczoKKworICAg YGBFWEVDVVRFYGAKKworICAgICAgUGVydGFpbnMgdG8gYW55IGZpbGUgYXR0ZW1wdGluZyB0byBi ZSBleGVjdXRlZCwgb3IgbG9hZGVkIGFzIGFuCisgICAgICBleGVjdXRhYmxlLgorCisgICBgYEZJ Uk1XQVJFYGA6CisKKyAgICAgIFBlcnRhaW5zIHRvIGZpcm13YXJlIGJlaW5nIGxvYWRlZCB2aWEg dGhlIGZpcm13YXJlX2NsYXNzIGludGVyZmFjZS4KKyAgICAgIFRoaXMgY292ZXJzIGJvdGggdGhl IHByZWFsbG9jYXRlZCBidWZmZXIgYW5kIHRoZSBmaXJtd2FyZSBmaWxlCisgICAgICBpdHNlbGYu CisKKyAgIGBgS01PRFVMRWBgOgorCisgICAgICBQZXJ0YWlucyB0byBsb2FkaW5nIGtlcm5lbCBt b2R1bGVzIHZpYSBgYG1vZHByb2JlYGAgb3IgYGBpbnNtb2RgYC4KKworICAgYGBLRVhFQ19JTUFH RWBgOgorCisgICAgICBQZXJ0YWlucyB0byBrZXJuZWwgaW1hZ2VzIGxvYWRpbmcgdmlhIGBga2V4 ZWNgYC4KKworICAgYGBLRVhFQ19JTklUUkFNRlNgYAorCisgICAgICBQZXJ0YWlucyB0byBpbml0 cmQgaW1hZ2VzIGxvYWRpbmcgdmlhIGBga2V4ZWMgLS1pbml0cmRgYC4KKworICAgYGBQT0xJQ1lg YDoKKworICAgICAgQ29udHJvbHMgbG9hZGluZyBwb2xjaWVzIHZpYSByZWFkaW5nIGEga2VybmVs LXNwYWNlIGluaXRpYXRlZCByZWFkLgorCisgICAgICBBbiBleGFtcGxlIG9mIHN1Y2ggaXMgbG9h ZGluZyBJTUEgcG9saWNpZXMgYnkgd3JpdGluZyB0aGUgcGF0aAorICAgICAgdG8gdGhlIHBvbGlj eSBmaWxlIHRvIGBgJHNlY3VyaXR5ZnMvaW1hL3BvbGljeWBgCisKKyAgIGBgWDUwOV9DRVJUYGA6 CisKKyAgICAgIENvbnRyb2xzIGxvYWRpbmcgSU1BIGNlcnRpZmljYXRlcyB0aHJvdWdoIHRoZSBL Y29uZmlncywKKyAgICAgIGBgQ09ORklHX0lNQV9YNTA5X1BBVEhgYCBhbmQgYGBDT05GSUdfRVZN X1g1MDlfUEFUSGBgLgorCithY3Rpb24KK35+fn5+fgorCisgICBEZXRlcm1pbmVzIHdoYXQgSVBF IHNob3VsZCBkbyB3aGVuIGEgcnVsZSBtYXRjaGVzLiBNdXN0IGJlIGluIGV2ZXJ5CisgICBydWxl LCBhcyB0aGUgZmluYWwgY2xhdXNlLiBDYW4gYmUgb25lIG9mOgorCisgICBgYEFMTE9XYGA6CisK KyAgICAgIElmIHRoZSBydWxlIG1hdGNoZXMsIGV4cGxpY2l0bHkgYWxsb3cgYWNjZXNzIHRvIHRo ZSByZXNvdXJjZSB0byBwcm9jZWVkCisgICAgICB3aXRob3V0IGV4ZWN1dGluZyBhbnkgbW9yZSBy dWxlcy4KKworICAgYGBERU5ZYGA6CisKKyAgICAgIElmIHRoZSBydWxlIG1hdGNoZXMsIGV4cGxp Y2l0bHkgcHJvaGliaXQgYWNjZXNzIHRvIHRoZSByZXNvdXJjZSB0bworICAgICAgcHJvY2VlZCB3 aXRob3V0IGV4ZWN1dGluZyBhbnkgbW9yZSBydWxlcy4KKworYm9vdF92ZXJpZmllZAorfn5+fn5+ fn5+fn5+fgorCisgICBUaGlzIHByb3BlcnR5IGNhbiBiZSB1dGlsaXplZCBmb3IgYXV0aG9yaXph dGlvbiBvZiB0aGUgZmlyc3Qgc3VwZXItYmxvY2sKKyAgIHRoYXQgZXhlY3V0ZXMgYSBmaWxlLiBU aGlzIGlzIGFsbW9zdCBhbHdheXMgaW5pdC4gVHlwaWNhbGx5IHRoaXMgaXMgdXNlZAorICAgZm9y IHN5c3RlbXMgd2l0aCBhbiBpbml0cmFtZnMgb3Igb3RoZXIgaW5pdGlhbCBkaXNrLCB3aGVyZSB0 aGlzIGlzIHVubW91bnRlZAorICAgYmVmb3JlIHRoZSBzeXN0ZW0gYmVjb21lcyBhdmFpbGFibGUs IGFuZCBpcyBub3QgY292ZXJlZCBieSBhbnkgb3RoZXIgcHJvcGVydHkuCisgICBUaGUgZm9ybWF0 IG9mIHRoaXMgcHJvcGVydHkgaXM6OgorCisgICAgICAgICBib290X3ZlcmlmaWVkPShUUlVFfEZB TFNFKQorCisKKyAgIC4uIFdBUk5JTkc6OgorCisgICAgICBUaGlzIHByb3BlcnR5IHdpbGwgdHJ1 c3QgYW55IGRpc2sgd2hlcmUgdGhlIGZpcnN0IGV4ZWN1dGlvbiBldmFsdWF0aW9uCisgICAgICBv Y2N1cnMuIElmIHlvdSBkbyAqTk9UKiBoYXZlIGEgc3RhcnR1cCBkaXNrIHRoYXQgaXMgdW5wYWNr ZWQgYW5kIHVubW91bnRlZAorICAgICAgKGxpa2UgaW5pdHJhbWZzKSwgdGhlbiBpdCB3aWxsIGF1 dG9tYXRpY2FsbHkgdHJ1c3QgdGhlIHJvb3QgZmlsZXN5c3RlbSBhbmQKKyAgICAgIHBvdGVudGlh bGx5IG92ZXJhdXRob3JpemUgdGhlIGVudGlyZSBkaXNrLgorCitkbXZlcml0eV9yb290aGFzaAor fn5+fn5+fn5+fn5+fn5+fn4KKworICAgVGhpcyBwcm9wZXJ0eSBjYW4gYmUgdXRpbGl6ZWQgZm9y IGF1dGhvcml6YXRpb24gb3IgcmV2b2NhdGlvbiBvZgorICAgc3BlY2lmaWMgZG0tdmVyaXR5IHZv bHVtZXMsIGlkZW50aWZpZWQgdmlhIHJvb3QgaGFzaC4gSXQgaGFzIGEKKyAgIGRlcGVuZGVuY3kg b24gdGhlIERNX1ZFUklUWSBtb2R1bGUuIFRoaXMgcHJvcGVydHkgaXMgY29udHJvbGxlZCBieSB0 aGUKKyAgIEtjb25maWcgYGBDT05GSUdfSVBFX1BST1BfRE1fVkVSSVRZYGAuIFRoZSBmb3JtYXQg b2YgdGhpcyBwcm9wZXJ0eQorICAgaXM6OgorCisgICAgICBkbXZlcml0eV9yb290aGFzaD1EaWdl c3ROYW1lOkhleGFkZWNpbWFsU3RyaW5nCisKKyAgIFRoZSBzdXBwb3J0ZWQgRGlnZXN0TmFtZXMg Zm9yIGRtdmVyaXR5X3Jvb3RoYXNoIGFyZSBbI2RtdmVyaXR5ZGlnZXN0c11fIFsjc2VjdXJlZGln ZXN0XV8gOgorCisgICAgICArIGJsYWtlMmItNTEyCisgICAgICArIGJsYWtlMnMtMjU2CisgICAg ICArIHNoYTEKKyAgICAgICsgc2hhMjU2CisgICAgICArIHNoYTM4NAorICAgICAgKyBzaGE1MTIK KyAgICAgICsgc2hhMy0yMjQKKyAgICAgICsgc2hhMy0yNTYKKyAgICAgICsgc2hhMy0zODQKKyAg ICAgICsgc2hhMy01MTIKKyAgICAgICsgbWQ0CisgICAgICArIG1kNQorICAgICAgKyBzbTMKKyAg ICAgICsgcm1kMTYwCisKK2RtdmVyaXR5X3NpZ25hdHVyZQorfn5+fn5+fn5+fn5+fn5+fn5+CisK KyAgIFRoaXMgcHJvcGVydHkgY2FuIGJlIHV0aWxpemVkIGZvciBhdXRob3JpemF0aW9uIG9mIGFs bCBkbS12ZXJpdHkgdm9sdW1lcworICAgdGhhdCBoYXZlIGEgc2lnbmVkIHJvb3RoYXNoIHRoYXQg Y2hhaW5zIHRvIGEga2V5cmluZyBzcGVjaWZpZWQgYnkgZG0tdmVyaXR5J3MKKyAgIGNvbmZpZ3Vy YXRpb24sIGVpdGhlciB0aGUgc3lzdGVtIHRydXN0ZWQga2V5cmluZywgb3IgdGhlIHNlY29uZGFy eSBrZXlyaW5nLgorICAgSXQgaGFzIGFuIGFkZGl0aW9uYWwgZGVwZW5kZW5jeSBvbiB0aGUgYGBE TV9WRVJJVFlfVkVSSUZZX1JPT1RIQVNIX1NJR2BgCisgICBLY29uZmlnLiBUaGlzIHByb3BlcnR5 IGlzIGNvbnRyb2xsZWQgYnkgdGhlIEtjb25maWcKKyAgIGBgQ09ORklHX0lQRV9QUk9QX0RNX1ZF UklUWWBgLiBUaGUgZm9ybWF0IG9mIHRoaXMgcHJvcGVydHkgaXM6OgorCisgICAgICBkbXZlcml0 eV9zaWduYXR1cmU9KFRSVUV8RkFMU0UpCisKK2ZzdmVyaXR5X2RpZ2VzdAorfn5+fn5+fn5+fn5+ fn5+CisKKyAgIFRoaXMgcHJvcGVydHkgY2FuIGJlIHV0aWxpemVkIGZvciBhdXRob3JpemF0aW9u IG9yIHJldm9jYXRpb24gb2YKKyAgIHNwZWNpZmljIGZzdmVyaXR5IGVuYWJsZWQgZmlsZSwgaWRl bnRpZmllZCB2aWEgaXRzIGZzdmVyaXR5IGRpZ2VzdC4KKyAgIEl0IGhhcyBhIGRlcGVuZGVuY3kg b24gdGhlIEZTX1ZFUklUWSBtb2R1bGUuIFRoaXMgcHJvcGVydHkgaXMKKyAgIGNvbnRyb2xsZWQg YnkgdGhlIEtjb25maWcgYGBDT05GSUdfSVBFX1BST1BfRlNfVkVSSVRZYGAuCisgICBUaGUgZm9y bWF0IG9mIHRoaXMgcHJvcGVydHkgaXM6OgorCisgICAgICBmc3Zlcml0eV9kaWdlc3Q9RGlnZXN0 TmFtZTpIZXhhZGVjaW1hbFN0cmluZworCisgICBUaGUgc3VwcG9ydGVkIERpZ2VzdE5hbWVzIGZv ciBkbXZlcml0eV9yb290aGFzaCBhcmUgWyNmc3Zlcml0eWRpZ2VzdF0gWyNzZWN1cmVkaWdlc3Rd XyA6CisKKyAgICAgICsgc2hhMjU2CisgICAgICArIHNoYTUxMgorCitmc3Zlcml0eV9zaWduYXR1 cmUKK35+fn5+fn5+fn5+fn5+fn5+fgorCitWZXJzaW9uIDEKKworICAgVGhpcyBwcm9wZXJ0eSBj YW4gYmUgdXRpbGl6ZWQgZm9yIGF1dGhvcml6YXRpb24gb2YgYWxsIGZzdmVyaXR5IGVuYWJsZWQK KyAgIGZpbGVzIHRoYXQgaXMgdmVyaWZpZWQgYnkgZnN2ZXJpdHkuIFRoZSBrZXlyaW5nIHRoYXQg dGhlIHNpZ25hdHVyZSBpcworICAgdmVyaWZpZWQgYWdhaW5zdCBpcyBzdWJqZWN0IHRvIGZzdmVy aXR5J3MgY29uZmlndXJhdGlvbiwgdHlwaWNhbGx5IHRoZSBmc3Zlcml0eQorICAga2V5cmluZy4g SXQgaGFzIGEgZGVwZW5kZW5jeSBvbiB0aGUgYGBDT05GSUdfRlNfVkVSSVRZX0JVSUxUSU5fU0lH TkFUVVJFU2BgCisgICBLY29uZmlnLiBUaGlzIHByb3BlcnR5IGlzIGNvbnRyb2xsZWQgYnkgdGhl IEtjb25maWcKKyAgIGBgQ09ORklHX0lQRV9QUk9QX0ZTX1ZFUklUWWBgLiBUaGUgZm9ybWF0IG9m IHRoaXMgcHJvcGVydHkgaXM6OgorCisgICAgICBmc3Zlcml0eV9zaWduYXR1cmU9KFRSVUV8RkFM U0UpCisKK1BvbGljeSBFeGFtcGxlcworLS0tLS0tLS0tLS0tLS0tCisKK0FsbG93IGFsbAorfn5+ fn5+fn5+CisKKzo6CisKKyAgIHBvbGljeV9uYW1lPUFsbG93X0FsbCBwb2xpY3lfdmVyc2lvbj0w LjAuMAorICAgREVGQVVMVCBhY3Rpb249QUxMT1cKKworQWxsb3cgb25seSBpbml0aWFsIHN1cGVy YmxvY2sKK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CisKKzo6CisKKyAgIHBvbGljeV9u YW1lPUFsbG93X0FsbF9Jbml0aWFsX1NCIHBvbGljeV92ZXJzaW9uPTAuMC4wCisgICBERUZBVUxU IGFjdGlvbj1ERU5ZCisKKyAgIG9wPUVYRUNVVEUgYm9vdF92ZXJpZmllZD1UUlVFIGFjdGlvbj1B TExPVworCitBbGxvdyBhbnkgc2lnbmVkIGRtLXZlcml0eSB2b2x1bWUgYW5kIHRoZSBpbml0aWFs IHN1cGVyYmxvY2sKK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+ fn5+fn5+fn5+fn5+fn5+fgorCis6OgorCisgICBwb2xpY3lfbmFtZT1BbGxvd1NpZ25lZEFuZElu aXRpYWwgcG9saWN5X3ZlcnNpb249MC4wLjAKKyAgIERFRkFVTFQgYWN0aW9uPURFTlkKKworICAg b3A9RVhFQ1VURSBib290X3ZlcmlmaWVkPVRSVUUgYWN0aW9uPUFMTE9XCisgICBvcD1FWEVDVVRF IGRtdmVyaXR5X3NpZ25hdHVyZT1UUlVFIGFjdGlvbj1BTExPVworCitQcm9oaWJpdCBleGVjdXRp b24gZnJvbSBhIHNwZWNpZmljIGRtLXZlcml0eSB2b2x1bWUKK35+fn5+fn5+fn5+fn5+fn5+fn5+ fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorCis6OgorCisgICBwb2xpY3lfbmFtZT1B bGxvd1NpZ25lZEFuZEluaXRpYWwgcG9saWN5X3ZlcnNpb249MC4wLjAKKyAgIERFRkFVTFQgYWN0 aW9uPURFTlkKKworICAgb3A9RVhFQ1VURSBkbXZlcml0eV9yb290aGFzaD1zaGEyNTY6Y2QyYzVi YWU3YzZjNTc5ZWRhYWU0MzUzMDQ5ZDU4ZWI1ZjJlOGJlMDI0NGJmMDUzNDViYzhlNWVkMjU3YmFm ZiBhY3Rpb249REVOWQorCisgICBvcD1FWEVDVVRFIGJvb3RfdmVyaWZpZWQ9VFJVRSBhY3Rpb249 QUxMT1cKKyAgIG9wPUVYRUNVVEUgZG12ZXJpdHlfc2lnbmF0dXJlPVRSVUUgYWN0aW9uPUFMTE9X CisKK0FsbG93IG9ubHkgYSBzcGVjaWZpYyBkbS12ZXJpdHkgdm9sdW1lCit+fn5+fn5+fn5+fn5+ fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorCis6OgorCisgICBwb2xpY3lfbmFtZT1BbGxvd1Np Z25lZEFuZEluaXRpYWwgcG9saWN5X3ZlcnNpb249MC4wLjAKKyAgIERFRkFVTFQgYWN0aW9uPURF TlkKKworICAgb3A9RVhFQ1VURSBkbXZlcml0eV9yb290aGFzaD1zaGEyNTY6NDAxZmNlYzU5NDQ4 MjNhZTEyZjYyNzI2ZTgxODQ0MDdhNWZhOTU5OTc4M2YwMzBkZWMxNDY5MzggYWN0aW9uPUFMTE9X CisKK0FsbG93IGFueSBzaWduZWQgZnMtdmVyaXR5IGZpbGUKK35+fn5+fn5+fn5+fn5+fn5+fn5+ fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorCis6OgorCisgICBwb2xp Y3lfbmFtZT1BbGxvd1NpZ25lZEZTVmVyaXR5IHBvbGljeV92ZXJzaW9uPTAuMC4wCisgICBERUZB VUxUIGFjdGlvbj1ERU5ZCisKKyAgIG9wPUVYRUNVVEUgZnN2ZXJpdHlfc2lnbmF0dXJlPVRSVUUg YWN0aW9uPUFMTE9XCisKK1Byb2hpYml0IGV4ZWN1dGlvbiBvZiBhIHNwZWNpZmljIGZzLXZlcml0 eSBmaWxlCit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+ fn4KKworOjoKKworICAgcG9saWN5X25hbWU9UHJvaGliaXRTcGVjaWZpY0ZTVkYgcG9saWN5X3Zl cnNpb249MC4wLjAKKyAgIERFRkFVTFQgYWN0aW9uPURFTlkKKworICAgb3A9RVhFQ1VURSBmc3Zl cml0eV9kaWdlc3Q9c2hhMjU2OmZkODhmMmI4ODI0ZTE5N2Y4NTBiZjRjNTEwOWJlYTVjZjBlZTM4 MTA0ZjcxMDg0M2JiNzJkYTc5NmJhNWFmOWUgYWN0aW9uPURFTlkKKyAgIG9wPUVYRUNVVEUgYm9v dF92ZXJpZmllZD1UUlVFIGFjdGlvbj1BTExPVworICAgb3A9RVhFQ1VURSBkbXZlcml0eV9zaWdu YXR1cmU9VFJVRSBhY3Rpb249QUxMT1cKKworQWRkaXRpb25hbCBJbmZvcm1hdGlvbgorLS0tLS0t LS0tLS0tLS0tLS0tLS0tLQorCistIGBHaXRodWIgUmVwb3NpdG9yeSA8aHR0cHM6Ly9naXRodWIu Y29tL21pY3Jvc29mdC9pcGU+YF8KKy0gYERlc2lnbiBEb2N1bWVudGF0aW9uIDwvc2VjdXJpdHkv aXBlPmBfCisKK0ZBUQorLS0tCisKK1E6CisgICBXaGF0J3MgdGhlIGRpZmZlcmVuY2UgYmV0d2Vl biBvdGhlciBMU01zIHdoaWNoIHByb3ZpZGUgYSBtZWFzdXJlIG9mCisgICB0cnVzdC1iYXNlZCBh Y2Nlc3MgY29udHJvbD8KKworQToKKworICAgSW4gZ2VuZXJhbCwgdGhlcmUncyB0d28gb3RoZXIg TFNNcyB0aGF0IGNhbiBwcm92aWRlIHNpbWlsYXIgZnVuY3Rpb25hbGl0eToKKyAgIElNQSwgYW5k IExvYWRwaW4uCisKKyAgIElNQSBhbmQgSVBFIGFyZSBmdW5jdGlvbmFsbHkgdmVyeSBzaW1pbGFy LiBUaGUgc2lnbmlmaWNhbnQgZGlmZmVyZW5jZSBiZXR3ZWVuCisgICB0aGUgdHdvIGlzIHRoZSBw b2xpY3kuIFsjZGV2ZG9jXV8KKworICAgTG9hZHBpbiBhbmQgSVBFIGRpZmZlciBmYWlybHkgZHJh bWF0aWNhbGx5LCBhcyBMb2FkcGluIGNvbnRyb2xzIG9ubHkgdGhlIElQRQorICAgZXF1aXZhbGVu dCBvZiBgYEtFUk5FTF9SRUFEYGAsIHdoZXJlYXMgSVBFIGlzIGNhcGFibGUgb2YgY29udHJvbGxp bmcgZXhlY3V0aW9uLAorICAgb24gdG9wIG9mIGBgS0VSTkVMX1JFQURgYC4gVGhlIHRydXN0IG1v ZGVsIGlzIGFsc28gZGlmZmVyZW50OyBMb2FkcGluIHJvb3RzIGl0cworICAgdHJ1c3QgaW4gdGhl IGluaXRpYWwgc3VwZXItYmxvY2ssIGluc3RlYWQsIElQRSByb290cyBpdHMgdHJ1c3QgaW4gdGhl IGtlcm5lbAorICAgaXRzZWxmICh2aWEgYGBTWVNURU1fVFJVU1RFRF9LRVlTYGApLgorCistLS0t LS0tLS0tLQorCisuLiBbI2RpZ2xpbV0gMTogaHR0cHM6Ly9sb3JlLmtlcm5lbC5vcmcvYnBmLzRk NjkzMmU5NmQ3NzQyMjdiNDI3MjFkOWY2NDViYTUxQGh1YXdlaS5jb20vVC8KKworLi4gWyNpbnRl cnByZXRlcnNdIFRoZXJlIGlzIGBzb21lIGludGVyZXN0IGluIHNvbHZpbmcgdGhpcyBpc3N1ZSA8 aHR0cHM6Ly9sb3JlLmtlcm5lbC5vcmcvbGttbC8yMDIyMDMyMTE2MTU1Ny40OTUzODgtMS1taWNA ZGlnaWtvZC5uZXQvPmBfLgorCisuLiBbI2RldmRvY10gUGxlYXNlIHNlZSBgRG9jdW1lbnRhdGlv bi9zZWN1cml0eS9pcGUucnN0YCBmb3IgbW9yZSBvbiB0aGlzIHRvcGljLgorCisuLiBbI2ZzdmVy aXR5ZGlnZXN0XSBUaGVzZSBoYXNoIGFsZ29yaXRobXMgYXJlIGJhc2VkIG9uIHZhbHVlcyBhY2Nl cHRlZCBieSBmc3Zlcml0eS11dGlsczsKKyAgICAgICAgICAgICAgICAgICAgIElQRSBkb2VzIG5v dCBpbXBvc2UgYW55IHJlc3RyaWN0aW9ucyBvbiB0aGUgZGlnZXN0IGFsZ29yaXRobSBpdHNlbGY7 CisgICAgICAgICAgICAgICAgICAgICB0aHVzLCB0aGlzIGxpc3QgbWF5IGJlIG91dCBvZiBkYXRl LgorCisuLiBbI2RtdmVyaXR5ZGlnZXN0c10gVGhlc2UgaGFzaCBhbGdvcml0aG1zIGFyZSBiYXNl ZCBvbiB2YWx1ZXMgYWNjZXB0ZWQgYnkgZG0tdmVyaXR5LAorICAgICAgICAgICAgICAgICAgICAg IHNwZWNpZmljYWxseSBgYGNyeXB0b19hbGxvY19haGFzaGBgIGluIGBgdmVyaXR5X2N0cmBgOyBg YHZlcml0eXNldHVwYGAKKyAgICAgICAgICAgICAgICAgICAgICBkb2VzIHN1cHBvcnQgbW9yZSBh bGdvcml0aG1zIHRoYW4gdGhlIGxpc3QgYWJvdmUuIElQRSBkb2VzIG5vdCBpbXBvc2UKKyAgICAg ICAgICAgICAgICAgICAgICBhbnkgcmVzdHJpY3Rpb25zIG9uIHRoZSBkaWdlc3QgYWxnb3JpdGht IGl0c2VsZjsgdGh1cywgdGhpcyBsaXN0CisgICAgICAgICAgICAgICAgICAgICAgbWF5IGJlIG91 dCBvZiBkYXRlLgorCisuLiBbI3NlY3VyZWRpZ2VzdF0gUGxlYXNlIGVuc3VyZSB5b3UgYXJlIHVz aW5nIGNyeXB0b2dyYXBoaWNhbGx5IHNlY3VyZSBoYXNoIGZ1bmN0aW9uczsKKyAgICAgICAgICAg ICAgICAgICBqdXN0IGJlY2F1c2Ugc29tZXRoaW5nIGlzICpzdXBwb3J0ZWQqIGRvZXMgbm90IG1l YW4gaXQgaXMgKnNlY3VyZSouCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRl L2tlcm5lbC1wYXJhbWV0ZXJzLnR4dCBiL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUva2VybmVs LXBhcmFtZXRlcnMudHh0CmluZGV4IDZjZmE2ZTM5OTZjZi4uNmYyODY4MTEzMTM1IDEwMDY0NAot LS0gYS9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dAorKysg Yi9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dApAQCAtMjIw OSw2ICsyMjA5LDE4IEBACiAJaXBjbW5pX2V4dGVuZAlbS05MXSBFeHRlbmQgdGhlIG1heGltdW0g bnVtYmVyIG9mIHVuaXF1ZSBTeXN0ZW0gVgogCQkJSVBDIGlkZW50aWZpZXJzIGZyb20gMzIsNzY4 IHRvIDE2LDc3NywyMTYuCiAKKwlpcGUuZW5mb3JjZT0JW0lQRV0KKwkJCUZvcm1hdDogPGJvb2w+ CisJCQlEZXRlcm1pbmUgd2hldGhlciBJUEUgc3RhcnRzIGluIHBlcm1pc3NpdmUgKDApIG9yCisJ CQllbmZvcmNlICgxKSBtb2RlLiBUaGUgZGVmYXVsdCBpcyBlbmZvcmNlLgorCisJaXBlLnN1Y2Nl c3NfYXVkaXQ9CisJCQlbSVBFXQorCQkJRm9ybWF0OiA8Ym9vbD4KKwkJCVN0YXJ0IElQRSB3aXRo IHN1Y2Nlc3MgYXVkaXRpbmcgZW5hYmxlZCwgZW1pdHRpbmcKKwkJCWFuIGF1ZGl0IGV2ZW50IHdo ZW4gYSBiaW5hcnkgaXMgYWxsb3dlZC4gVGhlIGRlZmF1bHQKKwkJCWlzIDAuCisKIAlpcnFhZmZp bml0eT0JW1NNUF0gU2V0IHRoZSBkZWZhdWx0IGlycSBhZmZpbml0eSBtYXNrCiAJCQlUaGUgYXJn dW1lbnQgaXMgYSBjcHUgbGlzdCwgYXMgZGVzY3JpYmVkIGFib3ZlLgogCmRpZmYgLS1naXQgYS9E b2N1bWVudGF0aW9uL3NlY3VyaXR5L2luZGV4LnJzdCBiL0RvY3VtZW50YXRpb24vc2VjdXJpdHkv aW5kZXgucnN0CmluZGV4IDZlZDhkMmZhNmY5ZS4uYTUyNDhkNGZkNTEwIDEwMDY0NAotLS0gYS9E b2N1bWVudGF0aW9uL3NlY3VyaXR5L2luZGV4LnJzdAorKysgYi9Eb2N1bWVudGF0aW9uL3NlY3Vy aXR5L2luZGV4LnJzdApAQCAtMTgsMyArMTgsNCBAQCBTZWN1cml0eSBEb2N1bWVudGF0aW9uCiAg ICBkaWdzaWcKICAgIGxhbmRsb2NrCiAgICBzZWNyZXRzL2luZGV4CisgICBpcGUKZGlmZiAtLWdp dCBhL0RvY3VtZW50YXRpb24vc2VjdXJpdHkvaXBlLnJzdCBiL0RvY3VtZW50YXRpb24vc2VjdXJp dHkvaXBlLnJzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjg1ZTE3 MGNlODY0YQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vc2VjdXJpdHkvaXBlLnJz dApAQCAtMCwwICsxLDQzNiBAQAorLi4gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAK KworSW50ZWdyaXR5IFBvbGljeSBFbmZvcmNlbWVudCAoSVBFKSAtIEtlcm5lbCBEb2N1bWVudGF0 aW9uCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT0KKworLi4gTk9URTo6CisKKyAgIFRoaXMgaXMgZG9jdW1lbnRhdGlvbiB0YXJnZXRlZCBh dCBkZXZlbG9wZXJzLCBpbnN0ZWFkIG9mIGFkbWluaXN0cmF0b3JzLgorICAgSWYgeW91J3JlIGxv b2tpbmcgZm9yIGRvY3VtZW50YXRpb24gb24gdGhlIHVzYWdlIG9mIElQRSwgcGxlYXNlIHNlZQor ICAgYERvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvTFNNL2lwZS5yc3RgCisKK0hpc3RvcmljYWwg TW90aXZhdGlvbgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSBvcmlnaW5hbCBpc3N1ZSB0 aGF0IHByb21wdGVkIElQRSdzIGltcGxlbWVudGF0aW9uIHdhcyB0aGUgY3JlYXRpb24KK29mIGEg bG9ja2VkLWRvd24gc3lzdGVtLiBUaGlzIHN5c3RlbSB3b3VsZCBiZSBib3JuLXNlY3VyZSwgYW5k IGhhdmUKK3N0cm9uZyBpbnRlZ3JpdHkgZ3VhcmFudGVlcyBvdmVyIGJvdGggdGhlIGV4ZWN1dGFi bGUgY29kZSwgYW5kIHNwZWNpZmljCisqZGF0YSBmaWxlcyogb24gdGhlIHN5c3RlbSwgdGhhdCB3 ZXJlIGNyaXRpY2FsIHRvIGl0cyBmdW5jdGlvbi4gVGhlc2UKK3NwZWNpZmljIGRhdGEgZmlsZXMg d291bGQgbm90IGJlIHJlYWRhYmxlIHVubGVzcyB0aGV5IHBhc3NlZCBpbnRlZ3JpdHkKK3BvbGlj eS4gQSBtYW5kYXRvcnkgYWNjZXNzIGNvbnRyb2wgc3lzdGVtIHdvdWxkIGJlIHByZXNlbnQsIGFu ZAorYXMgYSByZXN1bHQsIHhhdHRycyB3b3VsZCBoYXZlIHRvIGJlIHByb3RlY3RlZC4gVGhpcyBs ZWFkIHRvIGEgc2VsZWN0aW9uCitvZiB3aGF0IHdvdWxkIHByb3ZpZGUgdGhlIGludGVncml0eSBj bGFpbXMuIEF0IHRoZSB0aW1lLCB0aGVyZSB3ZXJlIHR3bworbWFpbiBtZWNoYW5pc21zIGNvbnNp ZGVyZWQgdGhhdCBjb3VsZCBndWFyYW50ZWUgaW50ZWdyaXR5IGZvciB0aGUgc3lzdGVtCit3aXRo IHRoZXNlIHJlcXVpcmVtZW50czoKKworICAxLiBJTUEgKyBFVk0gU2lnbmF0dXJlcworICAyLiBE TS1WZXJpdHkKKworQm90aCBvcHRpb25zIHdlcmUgY2FyZWZ1bGx5IGNvbnNpZGVyZWQsIGhvd2V2 ZXIgdGhlIGNob2ljZSB0byB1c2UgRE0tVmVyaXR5CitvdmVyIElNQStFVk0gYXMgdGhlICppbnRl Z3JpdHkgbWVjaGFuaXNtKiBpbiB0aGUgb3JpZ2luYWwgdXNlIGNhc2Ugb2YgSVBFCit3YXMgZHVl IHRvIHRocmVlIG1haW4gcmVhc29uczoKKworICAxLiBQcm90ZWN0aW9uIG9mIGFkZGl0aW9uYWwg YXR0YWNrIHZlY3RvcnM6CisKKyAgICAqIFdpdGggSU1BK0VWTSwgd2l0aG91dCBhbiBlbmNyeXB0 aW9uIHNvbHV0aW9uLCB0aGUgc3lzdGVtIGlzIHZ1bG5lcmFibGUKKyAgICAgIHRvIG9mZmxpbmUg YXR0YWNrIGFnYWluc3QgdGhlIGFmb3JlbWV0aW9uZWQgc3BlY2lmaWMgZGF0YSBmaWxlcy4KKwor ICAgICAgVW5saWtlIGV4ZWN1dGFibGVzLCByZWFkIG9wZXJhdGlvbnMgKGxpa2UgdGhvc2Ugb24g dGhlIHByb3RlY3RlZCBkYXRhCisgICAgICBmaWxlcyksIGNhbm5vdCBiZSBlbmZvcmNlZCB0byBi ZSBnbG9iYWxseSBpbnRlZ3J0aXkgdmVyaWZpZWQuIFRoaXMgbWVhbnMKKyAgICAgIHRoZXJlIG11 c3QgYmUgc29tZSBmb3JtIG9mIHNlbGVjdG9yIHRvIGRldGVybWluZSB3aGV0aGVyIGEgcmVhZCBz aG91bGQKKyAgICAgIGVuZm9yY2UgdGhlIGludGVncml0eSBwb2xpY3ksIG9yIGl0IHNob3VsZCBu b3QuCisKKyAgICAgIEF0IHRoZSB0aW1lLCB0aGlzIHdhcyBkb25lIHdpdGggbWFuZGF0b3J5IGFj Y2VzcyBjb250cm9sIGxhYmVscy4gQW4gSU1BCisgICAgICBwb2xpY3kgd291bGQgaW5kaWNhdGUg d2hhdCBsYWJlbHMgcmVxdWlyZWQgaW50ZWdyaXR5IHZlcmlmaWNhdGlvbiwgd2hpY2gKKyAgICAg IHByZXNlbnRlZCBhbiBpc3N1ZTogRVZNIHdvdWxkIHByb3RlY3QgdGhlIGxhYmVsLCBidXQgaWYg YW4gYXR0YWNrZXIgY291bGQKKyAgICAgIG1vZGlmeSBmaWxlc3lzdGVtIG9mZmxpbmUsIHRoZSBh dHRhY2tlciBjb3VsZCB3aXBlIGFsbCB0aGUgeGF0dHJzIC0KKyAgICAgIGluY2x1ZGluZyB0aGUg U0VMaW51eCBsYWJlbHMgdGhhdCB3b3VsZCBiZSB1c2VkIHRvIGRldGVybWluZSB3aGV0aGVyIHRo ZQorICAgICAgZmlsZSBzaG91bGQgYmUgc3ViamVjdCB0byBpbnRlZ3JpdHkgcG9saWN5LgorCisg ICAgICBXaXRoIERNLVZlcml0eSwgYXMgdGhlIHhhdHRycyBhcmUgc2F2ZWQgYXMgcGFydCBvZiB0 aGUgbWVya2VsIHRyZWUsIGlmCisgICAgICBvZmZsaW5lIG1vdW50IG9jY3VycyBhZ2FpbnN0IHRo ZSBmaWxlc3lzdGVtIHByb3RlY3RlZCBieSBkbS12ZXJpdHksIHRoZQorICAgICAgY2hlY2tzdW0g bm8gbG9uZ2VyIG1hdGNoZXMgYW5kIHRoZSBmaWxlIGZhaWxzIHRvIGJlIHJlYWQuCisKKyAgICAq IEFzIHVzZXJzcGFjZSBiaW5hcmllcyBhcmUgcGFnZWQgaW4gTGludXgsIGRtLXZlcml0eSBhbHNv IG9mZmVycyB0aGUKKyAgICAgIGFkZGl0aW9uYWwgcHJvdGVjdGlvbiBhZ2FpbnN0IGEgaG9zdGls ZSBibG9jayBkZXZpY2UuIEluIHN1Y2ggYW4gYXR0YWNrLAorICAgICAgdGhlIGJsb2NrIGRldmlj ZSByZXBvcnRzIHRoZSBhcHByb3ByaWF0ZSBjb250ZW50IGZvciB0aGUgSU1BIGhhc2gKKyAgICAg IGluaXRpYWxseSwgcGFzc2luZyB0aGUgcmVxdWlyZWQgaW50ZWdyaXR5IGNoZWNrLiBUaGVuLCBv biB0aGUgcGFnZSBmYXVsdAorICAgICAgdGhhdCBhY2Nlc3NlcyB0aGUgcmVhbCBkYXRhLCB3aWxs IHJlcG9ydCB0aGUgYXR0YWNrZXIncyBwYXlsb2FkLiBTaW5jZQorICAgICAgZG0tdmVyaXR5IHdp bGwgY2hlY2sgdGhlIGRhdGEgd2hlbiB0aGUgcGFnZSBmYXVsdCBvY2N1cnMgKGFuZCB0aGUgZGlz aworICAgICAgYWNjZXNzKSwgdGhpcyBhdHRhY2sgaXMgbWl0aWdhdGVkLgorCisgIDIuIFBlcmZv cm1hbmNlOgorCisgICAgKiBkbS12ZXJpdHkgcHJvdmlkZXMgaW50ZWdyaXR5IHZlcmlmaWNhdGlv biBvbiBkZW1hbmQgYXMgYmxvY2tzIGFyZQorICAgICAgcmVhZCB2ZXJzdXMgcmVxdWlyaW5nIHRo ZSBlbnRpcmUgZmlsZSBiZWluZyByZWFkIGludG8gbWVtb3J5IGZvcgorICAgICAgdmFsaWRhdGlv bi4KKworICAzLiBTaW1wbGljaXR5IG9mIHNpZ25pbmc6CisKKyAgICAqIE5vIG5lZWQgZm9yIHR3 byBzaWduYXR1cmVzIChJTUEsIHRoZW4gRVZNKTogb25lIHNpZ25hdHVyZSBjb3ZlcnMKKyAgICAg IGFuIGVudGlyZSBibG9jayBkZXZpY2UuCisgICAgKiBTaWduYXR1cmVzIGNhbiBiZSBzdG9yZWQg ZXh0ZXJuYWxseSB0byB0aGUgZmlsZXN5c3RlbSBtZXRhZGF0YS4KKyAgICAqIFRoZSBzaWduYXR1 cmUgc3VwcG9ydHMgYW4geC41MDktYmFzZWQgc2lnbmluZyBpbmZyYXN0cnVjdHVyZS4KKworVGhl IG5leHQgc3RlcCB3YXMgdG8gY2hvb3NlIGEgKnBvbGljeSogdG8gZW5mb3JjZSB0aGUgaW50ZWdy aXR5IG1lY2hhbmlzbS4KK1RoZSBtaW5pbXVtIHJlcXVpcmVtZW50cyBmb3IgdGhlIHBvbGljeSB3 ZXJlOgorCisgIDEuIFRoZSBwb2xpY3kgaXRzZWxmIG11c3QgYmUgaW50ZWdyaXR5IHZlcmlmaWVk IChwcmV2ZW50aW5nIHRyaXZpYWwKKyAgICAgYXR0YWNrIGFnYWluc3QgaXQpLgorICAyLiBUaGUg cG9saWN5IGl0c2VsZiBtdXN0IGJlIHJlc2lzdGFudCB0byByb2xsYmFjayBhdHRhY2tzLgorICAz LiBUaGUgcG9saWN5IGVuZm9yY2VtZW50IG11c3QgaGF2ZSBhIHBlcm1pc3NpdmUtbGlrZSBtb2Rl LgorICA0LiBUaGUgcG9saWN5IG11c3QgYmUgYWJsZSB0byBiZSB1cGRhdGVkLCBpbiBpdHMgZW50 aXJldHksIHdpdGhvdXQKKyAgICAgYSByZWJvb3QuCisgIDUuIFBvbGljeSB1cGRhdGVzIG11c3Qg YmUgYXRvbWljLgorICA2LiBUaGUgcG9saWN5IG11c3Qgc3VwcG9ydCAqcmV2b2NhdGlvbnMqIG9m IHByZXZpb3VzbHkgYXV0aG9yZWQKKyAgICAgY29tcG9uZW50cy4KKyAgNy4gVGhlIHBvbGljeSBt dXN0IGJlIGF1ZGl0YWJsZSwgYXQgYW55IHBvaW50LW9mLXRpbWUuCisKK0lNQSwgYXMgdGhlIG9u bHkgaW50ZWdyaXR5IHBvbGljeSBtZWNoYW5pc20gYXQgdGhlIHRpbWUsIHdhcworY29uc2lkZXJl ZCBhZ2FpbnN0IHRoZXNlIGxpc3Qgb2YgcmVxdWlyZW1lbnRzLCBhbmQgZGlkIG5vdCBmdWxmaWxs CithbGwgb2YgdGhlIG1pbmltdW0gcmVxdWlyZW1lbnRzLiBFeHRlbmRpbmcgSU1BIHRvIGNvdmVy IHRoZXNlCityZXF1aXJlbWVudHMgd2FzIGNvbnNpZGVyZWQsIGJ1dCB1bHRpbWF0ZWx5IGRpc2Nh cmRlZCBmb3IgYQordHdvIHJlYXNvbnM6CisKKyAgMS4gUmVncmVzc2lvbiByaXNrOyBtYW55IG9m IHRoZXNlIGNoYW5nZXMgd291bGQgcmVzdWx0IGluCisgICAgIGRyYW1hdGljIGNvZGUgY2hhbmdl cyB0byBJTUEsIHdoaWNoIGlzIGFscmVhZHkgcHJlc2VudCBpbiB0aGUKKyAgICAga2VybmVsLCBh bmQgdGhlcmVmb3JlIG1pZ2h0IGltcGFjdCB1c2Vycy4KKworICAyLiBJTUEgd2FzIHVzZWQgaW4g dGhlIHN5c3RlbSBmb3IgbWVhc3VyZW1lbnQgYW5kIGF0dGVzdGF0aW9uOworICAgICBzZXBhcmF0 aW9uIG9mIG1lYXN1cmVtZW50IHBvbGljeSBmcm9tIGxvY2FsIGludGVncml0eSBwb2xpY3kKKyAg ICAgZW5mb3JjZW1lbnQgd2FzIGNvbnNpZGVyZWQgZmF2b3JhYmxlLgorCitEdWUgdG8gdGhlc2Ug cmVhc29ucywgaXQgd2FzIGRlY2lkZWQgdGhhdCBhIG5ldyBMU00gc2hvdWxkIGJlIGNyZWF0ZWQs Cit3aG9zZSByZXNwb25zaWJpbGl0eSB3b3VsZCBiZSBvbmx5IHRoZSBsb2NhbCBpbnRlZ3JpdHkg cG9saWN5IGVuZm9yY2VtZW50LgorCitSb2xlIGFuZCBTY29wZQorLS0tLS0tLS0tLS0tLS0KKwor SVBFLCBhcyBpdHMgbmFtZSBpbXBsaWVzLCBpcyBmdW5kYW1lbnRhbGx5IGFuIGludGVncml0eSBw b2xpY3kgZW5mb3JjZW1lbnQKK3NvbHV0aW9uOyBJUEUgZG9lcyBub3QgbWFuZGF0ZSBob3cgaW50 ZWdyaXR5IGlzIHByb3ZpZGVkLCBidXQgaW5zdGVhZAorbGVhdmVzIHRoYXQgZGVjaXNpb24gdG8g dGhlIHN5c3RlbSBhZG1pbmlzdHJhdG9yIHRvIHNldCB0aGUgc2VjdXJpdHkgYmFyLAordmlhIHRo ZSBtZWNoYW5pc21zIHRoYXQgdGhleSBzZWxlY3QgdGhhdCBzdWl0IHRoZWlyIGluZGl2aWR1YWwg bmVlZHMuCitUaGVyZSBhcmUgc2V2ZXJhbCBkaWZmZXJlbnQgaW50ZWdyaXR5IHNvbHV0aW9ucyB0 aGF0IHByb3ZpZGUgYSBkaWZmZXJlbnQKK2xldmVsIG9mIHNlY3VyaXR5IGd1YXJhbnRlZXM7IGFu ZCBJUEUgYWxsb3dzIHN5c2FkbWlucyB0byBleHByZXNzIHBvbGljeSBmb3IKK3RoZW9yZXRpY2Fs bHkgYWxsIG9mIHRoZW0uCisKK0lQRSBhZGRpdGlvbmFsbHkgZG9lcyBub3QgcHJvdmlkZSBhIG1l Y2hhbmlzbSB0aGF0IHByb3ZpZGVzIGludGVncml0eQorYnkgaXRzZWxmOiB0aGVyZSBhcmUgYmV0 dGVyIGxheWVycyB0byBjcmVhdGUgc3VjaCBzeXN0ZW1zLCBhbmQgYSBtZWNoYW5pc20KK29mIHBy b3ZpbmcgaW50ZWdyaXR5IGhhcyBuZXh0IHRvIG5vdGhpbmcgdG8gZG8gd2l0aCB0aGUgcG9saWN5 IG9mIGVuZm9yY2luZwordGhhdCBpbnRlZ3JpdHkgY2xhaW0uCisKK1RoZXJlZm9yZSwgSVBFIHdh cyBkZXNpZ25lZCBhcm91bmQ6CisKKyAgMS4gRWFzeSBpbnRlZ3JhdGlvbnMgd2l0aCBpbnRlZ3Jp dHkgcHJvdmlkZXJzLgorICAyLiBFYXNlIG9mIHVzZSBmb3IgcGxhdGZvcm0gYWRtaW5pc3RyYXRv cnMvc3lzYWRtaW5zLgorCitEZXNpZ24gUmF0aW9uYWxlOgorLS0tLS0tLS0tLS0tLS0tLS0KKwor SVBFIHdhcyBkZXNpZ25lZCBhZnRlciBldmx1YXRpbmcgZXhpc3RpbmcgaW50ZWdyaXR5IHBvbGlj eSBzb2x1dGlvbnMKK2luIG90aGVyIG9wZXJhdGluZyBzeXN0ZW1zIGFuZCBlbnZpcm9ubWVudHMu IEluIHRoaXMgc3VydmV5IG9mIG90aGVyCitpbXBsZW1lbnRhdGlvbnMsIHRoZXJlIHdlcmUgYSBm ZXcgcGl0ZmFsbHMgaWRlbnRpZmllZDoKKworICAxLiBQb2xpY2llcyB3ZXJlIG5vdCByZWFkYWJs ZSBieSBodW1hbnMsIHVzdWFsbHkgcmVxdWlyaW5nIGEgYmluYXJ5CisgICAgIGludGVybWVkaWFy eSBmb3JtYXQuCisgIDIuIEEgc2luZ2xlLCBub24tY3VzdG9taXphYmxlIGFjdGlvbiB3YXMgaW1w bGljaXRseSB0YWtlbiBhcyBhIGRlZmF1bHQuCisgIDMuIERlYnVnZ2luZyB0aGUgcG9saWN5IHJl cXVpcmVkIG1hbnVhbCBzdGVwcyB0byBkZXRlcm1pbmUgd2hhdCBydWxlIHdhcyB2aW9sYXRlZC4K KyAgNC4gQXV0aG9yaW5nIGEgcG9saWN5IHJlcXVpcmVkIGFuIGluLWRlcHRoIGtub3dsZWRnZSBv ZiB0aGUgbGFyZ2VyIHN5c3RlbSwKKyAgICAgb3Igb3BlcmF0aW5nIHN5c3RlbS4KKworSVBFIGF0 dGVtcHRzIHRvIGF2b2lkIGFsbCBvZiB0aGVzZSBwaXRmYWxscy4KKworUG9saWN5Cit+fn5+fn4K KworUGxhaW4gVGV4dAorXl5eXl5eXl5eXgorCitJUEUncyBwb2xpY3kgaXMgcGxhaW4tdGV4dC4g VGhpcyBpbnRyb2R1Y2VzIHNsaWdodGx5IGxhcmdlciBwb2xpY3kgZmlsZXMgdGhhbgorb3RoZXIg TFNNcywgYnV0IHNvbHZlcyB0d28gbWFqb3IgcHJvYmxlbXMgdGhhdCBvY2N1cnMgd2l0aCBzb21l IGludGVncml0eSBwb2xpY3kKK3NvbHV0aW9ucyBvbiBvdGhlciBwbGF0Zm9ybXMuCisKK1RoZSBm aXJzdCBpc3N1ZSBpcyBvbmUgb2YgY29kZSBtYWludGVuYW5jZSBhbmQgZHVwbGljYXRpb24uIFRv IGF1dGhvciBwb2xpY2llcywKK3RoZSBwb2xpY3kgaGFzIHRvIGJlIHNvbWUgZm9ybSBvZiBzdHJp bmcgcmVwcmVzZW50YXRpb24gKGJlIGl0IHN0cnVjdHVyZWQsCit0aHJvdWdoIFhNTCwgSlNPTiwg WUFNTCwgZXRjZXRlcmEpLCB0byBhbGxvdyB0aGUgcG9saWN5IGF1dGhvciB0byB1bmRlcnN0YW5k Cit3aGF0IGlzIGJlaW5nIHdyaXR0ZW4uIEluIGEgaHlwb3RoZXRpY2FsIGJpbmFyeSBwb2xpY3kg ZGVzaWduLCBhIHNlcmlhbGl6ZXIKK2lzIG5lY2Vzc2FyeSB0byB3cml0ZSB0aGUgcG9saWN5IGZy b20gdGhlIGh1bWFuIHJlYWRhYmxlIGZvcm0sIHRvIHRoZSBiaW5hcnkKK2Zvcm0sIGFuZCBhIGRl c2VyaWFsaXplciBpcyBuZWVkZWQgdG8gaW50ZXJwcmV0IHRoZSBiaW5hcnkgZm9ybSBpbnRvIGEg ZGF0YQorc3RydWN0dXJlIGluIHRoZSBrZXJuZWwuCisKK0V2ZW50dWFsbHksIGFub3RoZXIgZGVz ZXJpYWxpemVyIHdpbGwgYmUgbmVlZGVkIHRvIHRyYW5zZm9ybSB0aGUgYmluYXJ5IGZyb20KK2Jh Y2sgaW50byB0aGUgaHVtYW4tcmVhZGFibGUgZm9ybSB3aXRoIGFzIG11Y2ggaW5mb3JtYXRpb24g cHJlc2VydmVkLiBUaGlzIGlzIGJlY2F1c2UgYQordXNlciBvZiB0aGlzIGFjY2VzcyBjb250cm9s IHN5c3RlbSB3aWxsIGhhdmUgdG8ga2VlcCBhIGxvb2t1cCB0YWJsZSBvZiBhIGNoZWNrc3VtCith bmQgdGhlIG9yaWdpbmFsIGZpbGUgaXRzZWxmIHRvIHRyeSB0byB1bmRlcnN0YW5kIHdoYXQgcG9s aWNpZXMgaGF2ZSBiZWVuIGRlcGxveWVkCitvbiB0aGlzIHN5c3RlbSBhbmQgd2hhdCBwb2xpY2ll cyBoYXZlIG5vdC4gRm9yIGEgc2luZ2xlIHVzZXIsIHRoaXMgbWF5IGJlIGFscmlnaHQsCithcyBv bGQgcG9saWNpZXMgY2FuIGJlIGRpc2NhcmRlZCBhbG1vc3QgaW1tZWRpYXRlbHkgYWZ0ZXIgdGhl IHVwZGF0ZSB0YWtlcyBob2xkLgorRm9yIHVzZXJzIHRoYXQgbWFuYWdlIGNvbXB1dGVyIGZsZWV0 cyBpbiB0aGUgdGhvdXNhbmRzLCBpZiBub3QgaHVuZHJlZHMgb2YgdGhvdXNhbmRzLAord2l0aCBt dWx0aXBsZSBkaWZmZXJlbnQgb3BlcmF0aW5nIHN5c3RlbXMsIGFuZCBtdWx0aXBsZSBkaWZmZXJl bnQgb3BlcmF0aW9uYWwgbmVlZHMsCit0aGlzIHF1aWNrbHkgYmVjb21lcyBhbiBpc3N1ZSwgYXMg c3RhbGUgcG9saWNpZXMgZnJvbSB5ZWFycyBhZ28gbWF5IGJlIHByZXNlbnQsCitxdWlja2x5IHJl c3VsdGluZyBpbiB0aGUgbmVlZCB0byByZWNvdmVyIHRoZSBwb2xpY3kgb3IgZnVuZCBleHRlbnNp dmUgaW5mcmFzdHJ1Y3R1cmUKK3RvIHRyYWNrIHdoYXQgZWFjaCBwb2xpY3kgY29udGFpbnMuCisK K1dpdGggbm93IHRocmVlIHNlcGFyYXRlIHNlcmlhbGl6ZXIvZGVzZXJpYWxpemVycywgbWFpbnRl bmFuY2UgYmVjb21lcyBjb3N0bHkuIElmIHRoZQorcG9saWN5IGF2b2lkcyB0aGUgYmluYXJ5IGZv cm1hdCwgdGhlcmUgaXMgb25seSBvbmUgcmVxdWlyZWQgc2VyaWFsaXplcjogZnJvbSB0aGUKK2h1 bWFuLXJlYWRhYmxlIGZvcm0gdG8gdGhlIGRhdGEgc3RydWN0dXJlIGluZSBrZXJuZWwsIHNhdmlu ZyBvbiBjb2RlIG1haW50ZW5hbmNlLAorYW5kIHJldGFpbmluZyBvcGVyYWJpbGl0eS4KKworVGhl IHNlY29uZCBpc3N1ZSB3aXRoIGEgYmluYXJ5IGZvcm1hdCBpcyBvbmUgb2YgdHJhbnNwYXJlbmN5 LiBBcyBJUEUgY29udHJvbHMKK2FjY2VzcyBiYXNlZCBvbiB0aGUgdHJ1c3Qgb2YgdGhlIHN5c3Rl bSdzIHJlc291cmNlcywgaXQncyBwb2xpY3kgbXVzdCBhbHNvIGJlCit0cnVzdGVkIHRvIGJlIGNo YW5nZWQuIFRoaXMgaXMgZG9uZSB0aHJvdWdoIHNpZ25hdHVyZXMsIHJlc3VsdGluZyBpbiBuZWVk aW5nCitzaWduaW5nIGFzIGEgcHJvY2Vzcy4gU2lnbmluZywgYXMgYSBwcm9jZXNzLCBpcyB0eXBp Y2FsbHkgZG9uZSB3aXRoIGEKK2hpZ2ggc2VjdXJpdHkgYmFyLCBhcyBhbnl0aGluZyBzaWduZWQg Y2FuIGJlIHVzZWQgdG8gYXR0YWNrIGludGVncml0eQorZW5mb3JjZW1lbnQgc3lzdGVtcy4gSXQg aXMgYWxzbyBpbXBvcnRhbnQgdGhhdCwgd2hlbiBzaWduaW5nIHNvbWV0aGluZywgdGhhdAordGhl IHNpZ25lciBpcyBhd2FyZSBvZiB3aGF0IHRoZXkgYXJlIHNpZ25pbmcuIEEgYmluYXJ5IHBvbGlj eSBjYW4gY2F1c2UKK29iZnVzY2F0aW9uIG9mIHRoYXQgZmFjdDsgd2hhdCBzaWduZXJzIHNlZSBp cyBhbiBvcGFxdWUgYmluYXJ5IGJsb2IuIEEKK3BsYWluLXRleHQgcG9saWN5LCBvbiB0aGUgb3Ro ZXIgaGFuZCwgdGhlIHNpZ25lcnMgc2VlIHRoZSBhY3R1YWwgcG9saWN5CitzdWJtaXR0ZWQgZm9y IHNpZ25pbmcuCisKK0Jvb3QgUG9saWN5Cit+fn5+fn5+fn5+fgorCitJUEUsIGlmIGNvbmZpZ3Vy ZWQgYXBwcm9wcmlhdGVseSwgaXMgYWJsZSB0byBlbmZvcmNlIGEgcG9saWN5IGFzIHNvb24gYXMg YQora2VybmVsIGlzIGJvb3RlZCBhbmQgdXNlcm1vZGUgc3RhcnRzLiBUaGF0IGltcGxpZXMgc29t ZSBsZXZlbCBvZiBzdG9yYWdlCitvZiB0aGUgcG9saWN5IHRvIGFwcGx5IHRoZSBtaW51dGUgdXNl cm1vZGUgc3RhcnRzLiBHZW5lcmFsbHksIHRoYXQgc3RvcmFnZQorY2FuIGJlIGhhbmRsZWQgaW4g b25lIG9mIHRocmVlIHdheXM6CisKKyAgMS4gVGhlIHBvbGljeSBmaWxlKHMpIGxpdmUgb24gZGlz ayBhbmQgdGhlIGtlcm5lbCBsb2FkcyB0aGUgcG9saWN5IHByaW9yCisgICAgIHRvIGFuIGNvZGUg cGF0aCB0aGF0IHdvdWxkIHJlc3VsdCBpbiBhbiBlbmZvcmNlbWVudCBkZWNpc2lvbi4KKyAgMi4g VGhlIHBvbGljeSBmaWxlKHMpIGFyZSBwYXNzZWQgYnkgdGhlIGJvb3Rsb2FkZXIgdG8gdGhlIGtl cm5lbCwgd2hvCisgICAgIHBhcnNlcyB0aGUgcG9saWN5LgorICAzLiBUaGVyZSBpcyBhIHBvbGlj eSBmaWxlIHRoYXQgaXMgY29tcGlsZWQgaW50byB0aGUga2VybmVsIHRoYXQgaXMKKyAgICAgcGFy c2VkIGFuZCBlbmZvcmNlZCBvbiBpbml0aWFsaXphdGlvbi4KKworVGhlIGZpcnN0IG9wdGlvbiBo YXMgcHJvYmxlbXM6IHRoZSBrZXJuZWwgcmVhZGluZyBmaWxlcyBmcm9tIHVzZXJzcGFjZQoraXMg dHlwaWNhbGx5IGRpc2NvdXJhZ2VkIGFuZCB2ZXJ5IHVuY29tbW9uIGluIHRoZSBrZXJuZWwuCisK K1RoZSBzZWNvbmQgb3B0aW9uIGFsc28gaGFzIHByb2JsZW1zOiBMaW51eCBzdXBwb3J0cyBhIHZh cmlldHkgb2YgYm9vdGxvYWRlcnMKK2Fjcm9zcyBpdHMgZW50aXJlIGVjb3N5c3RlbSAtIGV2ZXJ5 IGJvb3Rsb2FkZXIgd291bGQgaGF2ZSB0byBzdXBwb3J0IHRoaXMKK25ldyBtZXRob2RvbG9neSBv ciB0aGVyZSBtdXN0IGJlIGFuIGluZGVwZW5kZW50IHNvdXJjZS4gSXQgd291bGQgbGlrZWx5City ZXN1bHQgaW4gbW9yZSBkcmFzdGljIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCBzdGFydHVwIHRoYW4g bmVjZXNzYXJ5LgorCitUaGUgdGhpcmQgb3B0aW9uIGlzIHRoZSBiZXN0IGJ1dCBpdCdzIGltcG9y dGFudCB0byBiZSBhd2FyZSB0aGF0IHRoZSBwb2xpY3kKK3dpbGwgdGFrZSBkaXNrIHNwYWNlIGFn YWluc3QgdGhlIGtlcm5lbCBpdCdzIGNvbXBpbGVkIGluLiBJdCdzIGltcG9ydGFudCB0bwora2Vl cCB0aGlzIHBvbGljeSBnZW5lcmFsaXplZCBlbm91Z2ggdGhhdCB1c2Vyc3BhY2UgY2FuIGxvYWQg YSBuZXcsIG1vcmUKK2NvbXBsaWNhdGVkIHBvbGljeSwgYnV0IHJlc3RyaWN0aXZlIGVub3VnaCB0 aGF0IGl0IHdpbGwgbm90IG92ZXJhdXRob3JpemUKK2FuZCBjYXVzZSBzZWN1cml0eSBpc3N1ZXMu CisKK1RoZSBpbml0cmFtZnMgcHJvdmlkZXMgYSB3YXkgdGhhdCB0aGlzIGJvb3R1cCBwYXRoIGNh biBiZSBlc3RhYmxpc2hlZC4gVGhlCitrZXJuZWwgc3RhcnRzIHdpdGggYSBtaW5pbWFsIHBvbGlj eSwgdGhhdCB0cnVzdHMgdGhlIGluaXRyYW1mcyBvbmx5LiBJbnNpZGUKK3RoZSBpbml0cmFtZnMs IHdoZW4gdGhlIHJlYWwgcm9vdGZzIGlzIG1vdW50ZWQsIGJ1dCBub3QgeWV0IHRyYW5zZmVycmVk IHRvLAoraXQgZGVwbG95cyBhbmQgYWN0aXZhdGVzIGEgcG9saWN5IHRoYXQgdHJ1c3RzIHRoZSBu ZXcgcm9vdCBmaWxlc3lzdGVtLgorVGhpcyBwcmV2ZW50cyBvdmVyYXV0aG9yaXphdGlvbiBhdCBh bnkgc3RlcCwgYW5kIGtlZXBzIHRoZSBrZXJuZWwgcG9saWN5Cit0byBhIG1pbmltYWwgc2l6ZS4K KworU3RhcnR1cAorXl5eXl5eXgorCitOb3QgZXZlcnkgc3lzdGVtLCBob3dldmVyIHN0YXJ0cyB3 aXRoIGFuIGluaXRyYW1mcywgc28gdGhlIHN0YXJ0dXAgcG9saWN5Citjb21waWxlZCBpbnRvIHRo ZSBrZXJuZWwgd2lsbCBuZWVkIHNvbWUgZmxleGliaWxpdHkgdG8gZXhwcmVzcyBob3cgdHJ1c3QK K2lzIGVzdGFibGlzaGVkIGZvciB0aGUgbmV4dCBwaGFzZSBvZiB0aGUgYm9vdHVwLiBUbyB0aGlz IGVuZCwgaWYgd2UganVzdAorbWFrZSB0aGUgY29tcGlsZWQtaW4gcG9saWN5IGEgZnVsbCBJUEUg cG9saWN5LCBpdCBhbGxvd3Mgc3lzdGVtIGJ1aWxkZXJzCit0byBleHByZXNzIHRoZSBmaXJzdCBz dGFnZSBib290dXAgcmVxdWlyZW1lbnRzIGFwcHJvcHJpYXRlbHkuCisKK1VwZGF0YWJsZSwgUmVi b290bGVzcyBQb2xpY3kKK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKworQXMgcmVxdWly ZW1lbnRzIGNoYW5nZSBvdmVyIHRpbWUgKHZ1bG5lcmFiaWxpdGllcyBhcmUgZm91bmQgaW4gcHJl dmlvdXNseQordHJ1c3RlZCBhcHBsY2F0aW9ucywga2V5cyByb2xsLCBldGNldGVyYSkuIFVwZGF0 aW5nIGEga2VybmVsIHRvIGNoYW5nZSB0aGUKK21lZXQgdGhvc2Ugc2VjdXJpdHkgZ29hbHMgaXMg bm90IGFsd2F5cyBhIHN1aXRhYmxlIG9wdGlvbiwgYXMgdXBkYXRlcyBhcmUgbm90CithbHdheXMg cmlzay1mcmVlLCBhbmQgYmxvY2tpbmcgYSBzZWN1cml0eSB1cGRhdGUgbGVhdmVzIHN5c3RlbXMg dnVsbmVyYWJsZS4KK1RoaXMgbWVhbnMgSVBFIHJlcXVpcmVzIGEgcG9saWN5IHRoYXQgY2FuIGJl IGNvbXBsZXRlbHkgdXBkYXRlZCAoYWxsb3dpbmcKK3Jldm9jYXRpb25zIG9mIGV4aXN0aW5nIHBv bGljeSkgZnJvbSBhIHNvdXJjZSBleHRlcm5hbCB0byB0aGUga2VybmVsIChhbGxvd2luZworcG9s aWNpZXMgdG8gYmUgdXBkYXRlZCB3aXRob3V0IHVwZGF0aW5nIHRoZSBrZXJuZWwpLgorCitBZGRp dGlvbmFsbHksIHNpbmNlIHRoZSBrZXJuZWwgaXMgc3RhdGVsZXNzIGJldHdlZW4gaW52b2NhdGlv bnMsIGFuZCByZWFkaW5nCitwb2xpY3kgZmlsZXMgb2ZmIHRoZSBkaXNrIGZyb20ga2VybmVsIHNw YWNlIGlzIGEgYmFkIGlkZWEodG0pLCB0aGVuIHRoZQorcG9saWN5IHVwZGF0ZXMgaGF2ZSB0byBi ZSBkb25lIHJlYm9vdGxlc3NseS4KKworVG8gYWxsb3cgYW4gdXBkYXRlIGZyb20gYW4gZXh0ZXJu YWwgc291cmNlLCBpdCBjb3VsZCBiZSBwb3RlbnRpYWxseSBtYWxpY2lvdXMsCitzbyB0aGlzIHBv bGljeSBuZWVkcyB0byBoYXZlIGEgd2F5IHRvIGJlIGlkZW50aWZpZWQgYXMgdHJ1c3RlZC4gVGhp cyBpcworZG9uZSB2aWEgYSBzaWduYXR1cmUgY2hhaW5lZCB0byBhIHRydXN0IHNvdXJjZSBpbiB0 aGUga2VybmVsLiBBcmJpdHJhcmlseSwKK3RoaXMgaXMgIHRoZSBgYFNZU1RFTV9UUlVTVEVEX0tF WVJJTkdgYCwgYSBrZXlyaW5nIHRoYXQgaXMgaW5pdGlhbGx5Citwb3B1bGF0ZWQgYXQga2VybmVs IGNvbXBpbGUtdGltZSwgYXMgdGhpcyBtYXRjaGVzIHRoZSBleHBlY3RhdGlvbiB0aGF0IHRoZQor YXV0aG9yIG9mIHRoZSBjb21waWxlZC1pbiBwb2xpY3kgZGVzY3JpYmVkIGFib3ZlIGlzIHRoZSBz YW1lIGVudGl0eSB0aGF0IGNhbgorZGVwbG95IHBvbGljeSB1cGRhdGVzLgorCitBbnRpLVJvbGxi YWNrIC8gQW50aS1SZXBsYXkKK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorCitPdmVyIHRp bWUsIHZ1bG5lcmFiaWxpdGllcyBhcmUgZm91bmQgYW5kIHRydXN0ZWQgcmVzb3VyY2VzIG1heSBu b3QgYmUKK3RydXN0ZWQgYW55bW9yZS4gSVBFJ3MgcG9saWN5IGhhcyBubyBleGNlcHRpb24gdG8g dGhpcy4gVGhlcmUgY2FuIGJlCitpbnN0YW5jZXMgd2hlcmUgYSBtaXN0YWtlbiBwb2xpY3kgYXV0 aG9yIGRlcGxveXMgYW4gaW5zZWN1cmUgcG9saWN5LAorYmVmb3JlIGNvcnJlY3RpbmcgaXQgd2l0 aCBhIHNlY3VyZSBwb2xpY3kuCisKK0Fzc3VtaW5nIHRoYXQgYXMgc29vbiBhcyB0aGUgaW5zZWN1 cmUgcG9saWN5IGlzIHNpZ25lZCwgYW5kIGFuIGF0dGFja2VyCithY3F1aXJlcyB0aGUgaW5zZWN1 cmUgcG9saWN5LCBJUEUgbmVlZHMgYSB3YXkgdG8gcHJldmVudCByb2xsYmFjaworZnJvbSB0aGUg c2VjdXJlIHBvbGljeSB1cGRhdGUgdG8gdGhlIGluc2VjdXJlIHBvbGljeSB1cGRhdGUuCisKK0lu aXRpYWxseSwgSVBFJ3MgcG9saWN5IGNhbiBoYXZlIGEgcG9saWN5X3ZlcnNpb24gdGhhdCBzdGF0 ZXMgdGhlCittaW5pbXVtIHJlcXVpcmVkIHZlcnNpb24gYWNyb3NzIGFsbCBwb2xpY2llcyB0aGF0 IGNhbiBiZSBhY3RpdmUgb24KK3RoZSBzeXN0ZW0uIFRoaXMgd2lsbCBwcmV2ZW50IHJvbGxiYWNr IHdoaWxlIHRoZSBzeXN0ZW0gaXMgbGl2ZS4KKworLi4gV0FSTklORzo6CisKKyAgSG93ZXZlciwg c2luY2UgdGhlIGtlcm5lbCBpcyBzdGF0ZWxlc3MgYWNyb3NzIGJvb3RzLCB0aGlzIHBvbGljeQor ICB2ZXJzaW9uIHdpbGwgYmUgcmVzZXQgdG8gMC4wLjAgb24gdGhlIG5leHQgYm9vdC4gU3lzdGVt IGJ1aWxkZXJzCisgIG5lZWQgdG8gYmUgYXdhcmUgb2YgdGhpcywgYW5kIGVuc3VyZSB0aGUgbmV3 IHNlY3VyZSBwb2xpY2llcyBhcmUKKyAgZGVwbG95ZWQgQVNBUCBhZnRlciBhIGJvb3QgdG8gZW5z dXJlIHRoYXQgdGhlIHdpbmRvdyBvZgorICBvcHBvcnR1bml0eSBpcyBtaW5pbWFsIGZvciBhbiBh dHRhY2tlciB0byBkZXBsb3kgdGhlIGluc2VjdXJlIHBvbGljeS4KKworSW1wbGljaXQgQWN0aW9u czoKK35+fn5+fn5+fn5+fn5+fn5+CisKK1RoZSBpc3N1ZSBvZiBpbXBpY2l0IGFjdGlvbnMgb25s eSBiZWNvbWVzIHZpc2libGUgd2hlbiB5b3UgY29uc2lkZXIKK2EgbWl4ZWQgbGV2ZWwgb2Ygc2Vj dXJpdHkgYmFycyBhY3Jvc3MgbXVsdGlwbGUgb3BlcmF0aW9ucyBpbiBhIHN5c3RlbS4KK0ZvciBl eGFtcGxlLCBjb25zaWRlciBhIHN5c3RlbSB0aGF0IGhhcyBzdHJvbmcgaW50ZWdyaXR5IGd1YXJh bnRlZXMKK292ZXIgYm90aCB0aGUgZXhlY3V0YWJsZSBjb2RlLCBhbmQgc3BlY2lmaWMgKmRhdGEg ZmlsZXMqIG9uIHRoZSBzeXN0ZW0sCit0aGF0IHdlcmUgY3JpdGljYWwgdG8gaXRzIGZ1bmN0aW9u LiBJbiB0aGlzIHN5c3RlbSwgdGhyZWUgdHlwZXMgb2YgcG9saWNpZXMKK2FyZSBwb3NzaWJsZToK KworICAxLiBBIHBvbGljeSBpbiB3aGljaCBmYWlsdXJlIHRvIG1hdGNoIGFueSBydWxlcyBpbiB0 aGUgcG9saWN5IHJlc3VsdHMKKyAgICAgaW4gdGhlIGFjdGlvbiBiZWluZyBkZW5pZWQuCisgIDIu IEEgcG9saWN5IGluIHdoaWNoIGZhaWx1cmUgdG8gbWF0Y2ggYW55IHJ1bGVzIGluIHRoZSBwb2xp Y3kgcmVzdWx0cworICAgICBpbiB0aGUgYWN0aW9uIGJlaW5nIGFsbG93ZWQuCisgIDMuIEEgcG9s aWN5IGluIHdoaWNoIHRoZSBhY3Rpb24gdGFrZW4gd2hlbiBubyBydWxlcyBhcmUgbWF0Y2hlZCBp cworICAgICBzcGVjaWZpZWQgYnkgdGhlIHBvbGljeSBhdXRob3IuCisKK1RoZSBmaXJzdCBvcHRp b24gY291bGQgbWFrZSBhIHBvbGljeSBsaWtlIHRoaXM6OgorCisgIG9wPUVYRUNVVEUgaW50ZWdy aXR5X3ZlcmlmaWVkPVlFUyBhY3Rpb249REVOWQorCitJbiB0aGUgZXhhbXBsZSBzeXN0ZW0sIHRo aXMgd29ya3Mgd2VsbCBmb3IgdGhlIGV4ZWN1dGFibGVzLCBhcyBhbGwKK2V4ZWN1dGFibGVzIHNo b3VsZCBoYXZlIGludGVncml0eSBndWFyYW50ZWVzLCB3aXRob3V0IGV4Y2VwdGlvbi4gVGhlCitp c3N1ZSBiZWNvbWVzIHdpdGggdGhlIHNlY29uZCByZXF1aXJlbWVudCBhYm91dCBzcGVjaWZpYyBk YXRhIGZpbGVzLgorVGhpcyB3b3VsZCByZXN1bHQgaW4gYSBwb2xpY3kgbGlrZSB0aGlzIChhc3N1 bWluZyBlYWNoIGxpbmUgaXMKK2V2YWx1YXRlZCBpbiBvcmRlcik6OgorCisgIG9wPUVYRUNVVEUg aW50ZWdyaXR5X3ZlcmlmaWVkPVlFUyBhY3Rpb249REVOWQorCisgIG9wPVJFQUQgaW50ZWdyaXR5 X3ZlcmlmaWVkPU5PIGxhYmVsPWNyaXRpY2FsX3QgYWN0aW9uPURFTlkKKyAgb3A9UkVBRCBhY3Rp b249QUxMT1cKKworVGhpcyBpcyBzb21ld2hhdCBjbGVhciBpZiB5b3UgcmVhZCB0aGUgZG9jcywg dW5kZXJzdGFuZCB0aGUgcG9saWN5CitpcyBleGVjdXRlZCBpbiBvcmRlciBhbmQgdGhhdCB0aGUg ZGVmYXVsdCBpcyBhIGRlbmlhbDsgaG93ZXZlciwgdGhlCitsYXN0IGxpbmUgZWZmZWN0aXZlbHkg Y2hhbmdlcyB0aGF0IGRlZmF1bHQgdG8gYW4gQUxMT1cuIFRoaXMgaXMKK3JlcXVpcmVkLCBiZWNh dXNlIGluIGEgcmVhbGlzdGljIHN5c3RlbSwgdGhlcmUgYXJlIHNvbWUgdW52ZXJpZmllZAorcmVh ZHMgKGltYWdpbmUgYXBwZW5kaW5nIHRvIGEgbG9nIGZpbGUpLgorCitUaGUgc2Vjb25kIG9wdGlv biwgbWF0Y2hpbmcgbm8gcnVsZXMgcmVzdWx0cyBpbiBhbiBhbGxvdywgaXMgY2xlYXJlcgorZm9y IHRoZSBzcGVjaWZpYyBkYXRhIGZpbGVzOjoKKworICBvcD1SRUFEIGludGVncml0eV92ZXJpZmll ZD1OTyBsYWJlbD1jcml0aWNhbF90IGFjdGlvbj1ERU5ZCisKK0FuZCwgbGlrZSB0aGUgZmlyc3Qg b3B0aW9uLCBmYWxscyBzaG9ydCB3aXRoIHRoZSBvcHBvc2l0ZSBzY2VuYXJpbywKK2VmZmVjdGl2 ZWx5IG5lZWRpbmcgdG8gb3ZlcnJpZGUgdGhlIGRlZmF1bHQ6OgorCisgIG9wPUVYRUNVVEUgaW50 ZWdyaXR5X3ZlcmlmaWVkPVlFUyBhY3Rpb249QUxMT1cKKyAgb3A9RVhFQ1VURSBhY3Rpb249REVO WQorCisgIG9wPVJFQUQgaW50ZWdyaXR5X3ZlcmlmaWVkPU5PIGxhYmVsPWNyaXRpY2FsX3QgYWN0 aW9uPURFTlkKKworVGhpcyBsZWF2ZXMgdGhlIHRoaXJkIG9wdGlvbi4gSW5zdGVhZCBvZiBtYWtp bmcgdXNlcnMgYmUgY2xldmVyCithbmQgb3ZlcnJpZGUgdGhlIGRlZmF1bHQgd2l0aCBhbiBlbXB0 eSBydWxlLCBmb3JjZSB0aGUgZW5kLXVzZXIKK3RvIGNvbnNpZGVyIHdoYXQgdGhlIGFwcHJvcHJp YXRlIGRlZmF1bHQgc2hvdWxkIGJlIGZvciB0aGVpcgorc2NlbmFyaW8gYW5kIGV4cGxpY2l0bHkg c3RhdGUgaXQ6OgorCisgIERFRkFVTFQgb3A9RVhFQ1VURSBhY3Rpb249REVOWQorICBvcD1FWEVD VVRFIGludGVncml0eV92ZXJpZmllZD1ZRVMgYWN0aW9uPUFMTE9XCisKKyAgREVGQVVMVCBvcD1S RUFEIGFjdGlvbj1BTExPVworICBvcD1SRUFEIGludGVncml0eV92ZXJpZmllZD1OTyBsYWJlbD1j cml0aWNhbF90IGFjdGlvbj1ERU5ZCisKK1BvbGljeSBEZWJ1Z2dpbmc6Cit+fn5+fn5+fn5+fn5+ fn5+fgorCitXaGVuIGRldmVsb3BpbmcgYSBwb2xpY3ksIGl0IGlzIHVzZWZ1bCB0byBrbm93IHdo YXQgbGluZSBvZiB0aGUgcG9saWN5CitpcyBiZWluZyB2aW9sYXRlZCB0byByZWR1Y2UgZGVidWdn aW5nIGNvc3RzOyBuYXJyb3dpbmcgdGhlIHNjb3BlIG9mIHRoZQoraW52ZXN0aWdhdGlvbiB0byB0 aGUgZXhhY3QgbGluZSB0aGF0IHJlc3VsdGVkIGluIHRoZSBhY3Rpb24uIFNvbWUgaW50ZWdyaXR5 Citwb2xpY3kgc3lzdGVtcyBkbyBub3QgcHJvdmlkZSB0aGlzIGluZm9ybWF0aW9uLCBpbnN0ZWFk IHByb3ZpZGluZyB0aGUKK2luZm9ybWF0aW9uIHRoYXQgd2FzIHVzZWQgaW4gdGhlIGV2YWx1YXRp b24uIFRoaXMgdGhlbiByZXF1aXJlcyBhIGNvcnJlbGF0aW9uCit3aXRoIHRoZSBwb2xpY3kgdG8g ZXZhbHVhdGUgd2hhdCB3ZW50IHdyb25nLgorCitJbnN0ZWFkLCBJUEUganVzdCBlbWl0cyB0aGUg cnVsZSB0aGF0IHdhcyBtYXRjaGVkLiBUaGlzIGxpbWl0cyB0aGUgc2NvcGUKK29mIHRoZSBpbnZl c3RpZ2F0aW9uIHRvIHRoZSBleGFjdCBwb2xpY3kgbGluZSAoaW4gdGhlIGNhc2Ugb2YgYSBzcGVj aWZpYworcnVsZSksIG9yIHRoZSBzZWN0aW9uIChpbiB0aGUgY2FzZSBvZiBhIERFRkFVTFQpLiBU aGlzIGRlY3JlYXNlcyBpdGVyYXRpb24KK2FuZCBpbnZlc3RpZ2F0aW9uIHRpbWVzIHdoZW4gcG9s aWN5IGZhaWx1cmVzIGFyZSBvYnNlcnZlZCB3aGlsZSBldmFsdWF0aW5nCitwb2xpY2llcy4KKwor SVBFJ3MgcG9saWN5IGVuZ2luZSBpcyBhbHNvIGRlc2lnbmVkIGluIGEgd2F5IHRoYXQgaXQgbWFr ZXMgaXQgb2J2aW91cyB0bworYSBodW1hbiBvZiBob3cgdG8gaW52ZXN0aWdhdGUgYSBwb2xpY3kg ZmFpbHVyZS4gRWFjaCBsaW5lIGlzIGV2YWx1YXRlZCBpbgordGhlIHNlcXVlbmNlIHRoYXQgaXMg d3JpdHRlbiwgc28gdGhlIGFsZ29yaXRobSBpcyB2ZXJ5IHNpbXBsZSB0byBmb2xsb3cKK2ZvciBo dW1hbnMgdG8gcmVjcmVhdGUgdGhlIHN0ZXBzIGFuZCBjb3VsZCBoYXZlIGNhdXNlZCB0aGUgZmFp bHVyZS4gSW4gb3RoZXIKK3N1cnZleWVkIHN5c3RlbXMsIG9wdGltaXphdGlvbnMgb2NjdXIgKHNv cnRpbmcgcnVsZXMsIGZvciBpbnN0YW5jZSkgd2hlbiBsb2FkaW5nCit0aGUgcG9saWN5LiBJbiB0 aG9zZSBzeXN0ZW1zLCBpdCByZXF1aXJlcyBtdWx0aXBsZSBzdGVwcyB0byBkZWJ1ZywgYW5kIHRo ZQorYWxnb3JpdGhtIG1heSBub3QgYWx3YXlzIGJlIGNsZWFyIHRvIHRoZSBlbmQtdXNlciB3aXRo b3V0IHJlYWRpbmcgdGhlIGNvZGUgZmlyc3QuCisKK1NpbXBsaWZpZWQgUG9saWN5Ogorfn5+fn5+ fn5+fn5+fn5+fn5+CisKK0ZpbmFsbHksIElQRSdzIHBvbGljeSBpcyBkZXNpZ25lZCBmb3Igc3lz YWRtaW5zLCBub3Qga2VybmVsIGRldmVsb3BlcnMuIEluc3RlYWQKK29mIGNvdmVyaW5nIGluZGl2 aWR1YWwgTFNNIGhvb2tzIChvciBzeXNjYWxscyksIElQRSBjb3ZlcnMgb3BlcmF0aW9ucy4gVGhp cyBtZWFucworaW5zdGVhZCBvZiBzeXNhZG1pbnMgbmVlZGluZyB0byBrbm93IHRoYXQgdGhlIHN5 c2NhbGxzIGBgbW1hcGBgLCBgYG1wcm90ZWN0YGAsCitgYGV4ZWN2ZWBgLCBhbmQgYGB1c2VsaWJg YCBtdXN0IGhhdmUgcnVsZXMgcHJvdGVjdGluZyB0aGVtLCB0aGV5IG11c3Qgc2ltcGxlIGtub3cK K3RoYXQgdGhleSB3YW50IHRvIHJlc3RyaWN0IGNvZGUgZXhlY3V0aW9uLiBUaGlzIGxpbWl0cyB0 aGUgYW1vdW50IG9mIGJ5cGFzc2VzIHRoYXQKK2NvdWxkIG9jY3VyIGR1ZSB0byBhIGxhY2sgb2Yg a25vd2xlZGdlIG9mIHRoZSB1bmRlcmx5aW5nIHN5c3RlbTsgd2hlcmVhcyB0aGUKK21haW50YWlu ZXJzIG9mIElQRSwgYmVpbmcga2VybmVsIGRldmVsb3BlcnMgY2FuIG1ha2UgdGhlIGNvcnJlY3Qg Y2hvaWNlIHRvIGRldGVybWluZQord2hldGhlciBzb21ldGhpbmcgbWFwcyB0byB0aGVzZSBvcGVy YXRpb25zLCBhbmQgdW5kZXIgd2hhdCBjb25kaXRpb25zLgorCitJbXBsZW1lbnRhdGlvbiBOb3Rl cworLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQW5vbnltb3VzIE1lbW9yeQorfn5+fn5+fn5+fn5+ fn5+fgorCitBbm9ueW1vdXMgbWVtb3J5IGlzbid0IHRyZWF0ZWQgYW55IGRpZmZlcmVudGx5IGZy b20gYW55IG90aGVyIGFjY2VzcyBpbiBJUEUuCitXaGVuIGFub255bW91cyBtZW1vcnkgaXMgbWFw cGVkIHdpdGggYGArWGBgLCBpdCBzdGlsbCBjb21lcyBpbnRvIHRoZSBgYGZpbGVfbW1hcGBgCitv ciBgYGZpbGVfbXByb3RlY3RgYCBob29rLCBidXQgd2l0aCBhIGBgTlVMTGBgIGZpbGUgb2JqZWN0 LiBUaGlzIGlzIHN1Ym1pdHRlZCB0bwordGhlIGV2YWx1YXRpb24sIGxpa2UgYW55IG90aGVyIGZp bGUsIGhvd2V2ZXIsIGFsbCBjdXJyZW50IHRydXN0IG1lY2hhbmlzbXMgd2lsbAorcmV0dXJuIGZh bHNlIGFzIHRoZXJlIGlzIG5vdGhpbmcgdG8gZXZhbHVhdGUuIFRoaXMgbWVhbnMgYW5vbnltb3Vz IG1lbW9yeQorZXhlY3V0aW9uIGlzIHN1YmplY3QgdG8gd2hhdGV2ZXIgdGhlIGBgREVGQVVMVGBg IGlzIGZvciBgYEVYRUNVVEVgYC4KKworLi4gV0FSTklORzo6CisKKyAgVGhpcyBhbHNvIG9jY3Vy cyB3aXRoIHRoZSBgYGtlcm5lbF9sb2FkX2RhdGFgYCBob29rLCB3aGljaCBpcyB1c2VkIGJ5IHNp Z25lZAorICBhbmQgY29tcHJlc3NlZCBrZXJuZWwgbW9kdWxlcy4gVXNpbmcgc2lnbmVkIGFuZCBj b21wcmVzc2VkIGtlcm5lbCBtb2R1bGVzIHdpdGgKKyAgSVBFIHdpbGwgYWx3YXlzIHJlc3VsdCBp biB0aGUgYGBERUZBVUxUYGAgYWN0aW9uIGZvciBgYEtNT0RVTEVgYC4KKworU2VjdXJpdHlmcyBJ bnRlcmZhY2UKK35+fn5+fn5+fn5+fn5+fn5+fn5+CisKK1RoZSBwZXItcG9saWN5IHNlY3VyaXR5 ZnMgdHJlZSBpcyBzb21ld2hhdCB1bmlxdWUuIEZvciBleGFtcGxlLCBmb3IKK2Egc3RhbmRhcmQg c2VjdXJpdHlmcyBwb2xpY3kgdHJlZTo6CisKKyAgTXlQb2xpY3kKKyAgICB8LSBhY3RpdmUKKyAg ICB8LSByYXcKKyAgICB8LSBwb2xpY3kKKyAgICB8LSBuYW1lCisgICAgfC0gdmVyc2lvbgorICAg IHwtIHVwZGF0ZQorCitUaGUgcG9saWN5IGlzIHN0b3JlZCBpbiB0aGUgYGAtPmlfcHJpdmF0ZWBg IGRhdGEgb2YgdGhlIE15UG9saWN5IGlub2RlLAord2hpbGUgZWFjaCBjaGlsZCdzIGBgLT5pX3By aXZhdGVgYCwgaXQgc3RvcmVzIHRoZSBNeVBvbGljeSBpbm9kZS4gVGhpcworc2ltcGxpZmllcyBw b2xpY3kgdXBkYXRlcyBtYXNzaXZlbHksIGFzIHRoZSBhbHRlcm5hdGl2ZSBkZXNpZ25zIGFyZSB0 bzoKKworICAxLiBVc2UgZF9wYXJlbnQsIHdoaWNoIGhhcyBwb3RlbnRpYWwgaXNzdWVzIHdpdGgg ZmxleGliaWxpdHksIGlmIHRoZXJlCisgICAgIGV2ZW50dWFsbHkgYmVjb21lcyBhIHN1YmRpcmVj dG9yeSB1bmRlcm5lYXRoIE15UG9saWN5OyBhcyBpdCdzIHVuY2xlYXIKKyAgICAgaG93IG1hbnkg bGV2ZWxzIG9mIGBgZF9wYXJlbnRgYCB5b3UgaGF2ZSB0byBpdGVyYXRlIHVwIHRvLgorCisgIDIu IFN0b3JlIHRoZSBwb2xpY3kgZGF0YSBpbiBlYWNoIGlub2RlJ3MgYGAtPmlfcHJpdmF0ZWBgLiBU aGlzIGhhcyBpc3N1ZXMKKyAgICAgd2hlbiBpdCBjb21lcyB0byB1cGRhdGluZyBhIHBvbGljeSAt IGV2ZXJ5IHVwZGF0ZSBuZWVkcyB0byBjYXNjYWRlIHRvCisgICAgIGVhY2ggYGAtPmlfcHJpdmF0 ZWBgLCBhbmQgaWYgaXQgZmFpbHMsIGZvciB3aGF0ZXZlciByZWFzb24sIHRoZQorICAgICBvcGVy YXRpb24gaGFzIHRvIGJlIHJldmVydGVkIG9uIGVhY2ggaW5vZGUuCisKK1dpdGggdGhpcyBpbXBs ZW1lbnRhdGlvbiwgeW91IGNhbiBzb2x2ZSB0aGUgZmxleGliaWxpdHkgcHJvYmxlbSBvZiAxLCBh cworbm93IHdoZW4geW91IGNyZWF0ZSBhIHRoZW9yZXRpY2FsIHN1YmRpcmVjdG9yeSB5b3UganVz dCBzZXQgdGhlCitgYC0+aV9wcml2YXRlYGAgZGF0YSBhcHByb3ByaWF0ZWx5LiBZb3UgYWxzbyBz b2x2ZSB0aGUgdXBkYXRlIHByb2JsZW0gb2YKK3R3bywgYXMgeW91IHNpbXBseSB1cGRhdGUgb3Ig cmV2ZXJ0IG9uIHRoZSBvbmUgaW5vZGUgdGhhdCBhbGwgb3RoZXIgaW5vZGVzCityZWZlcmVuY2Uu CisKK1Rlc3RzCistLS0tLQorCitJUEUgaGFzIEtVbml0IFRlc3RzLCB0ZXN0aW5nIHByaW1hcmls eSB0aGUgcGFyc2VyLiBJbiBhZGRpdGlvbiwgSVBFIGhhcyBhCitweXRob24gYmFzZWQgaW50ZWdy YXRpb24gdGVzdCBzdWl0cyB0aGF0IGNhbiB0ZXN0IGJvdGggdXNlciBpbnRlcmZhY2VzIGFuZAor ZW5mb3JjZW1lbnQgZnVuY3Rpb25hbGl0aWVzLgpkaWZmIC0tZ2l0IGEvTUFJTlRBSU5FUlMgYi9N QUlOVEFJTkVSUwppbmRleCBkNWI0YTY2MzZiMGQuLjk2OWM2YTc4NDVlZCAxMDA2NDQKLS0tIGEv TUFJTlRBSU5FUlMKKysrIGIvTUFJTlRBSU5FUlMKQEAgLTEwMjc2LDYgKzEwMjc2LDggQEAgRjoJ c2VjdXJpdHkvaW50ZWdyaXR5LwogSU5URUdSSVRZIFBPTElDWSBFTkZPUkNFTUVOVCAoSVBFKQog TToJRmFuIFd1IDx3dWZhbkBsaW51eC5taWNyb3NvZnQuY29tPgogUzoJU3VwcG9ydGVkCitGOglE b2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL0xTTS9pcGUucnN0CitGOglEb2N1bWVudGF0aW9uL3Nl Y3VyaXR5L2lwZS5yc3QKIEY6CXNjcmlwdHMvaXBlLwogRjoJc2VjdXJpdHkvaXBlLwogCi0tIAoy LjM5LjAKCi0tCkxpbnV4LWF1ZGl0IG1haWxpbmcgbGlzdApMaW51eC1hdWRpdEByZWRoYXQuY29t Cmh0dHBzOi8vbGlzdG1hbi5yZWRoYXQuY29tL21haWxtYW4vbGlzdGluZm8vbGludXgtYXVkaXQK 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 vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id C5645C64EC6 for ; Mon, 30 Jan 2023 22:59:02 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229973AbjA3W7A (ORCPT ); Mon, 30 Jan 2023 17:59:00 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:55416 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230296AbjA3W6x (ORCPT ); Mon, 30 Jan 2023 17:58:53 -0500 Received: from linux.microsoft.com (linux.microsoft.com [13.77.154.182]) by lindbergh.monkeyblade.net (Postfix) with ESMTP id AB7FF20D07; Mon, 30 Jan 2023 14:58:45 -0800 (PST) Received: by linux.microsoft.com (Postfix, from userid 1052) id C89B620EA21E; Mon, 30 Jan 2023 14:58:42 -0800 (PST) DKIM-Filter: OpenDKIM Filter v2.11.0 linux.microsoft.com C89B620EA21E DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linux.microsoft.com; s=default; t=1675119522; bh=+LdVC6z9OyxIWBfOr/G61NDWU7NfZa8uBaskkt9ZgDQ=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=GG5bd2V+RORBF4NU7bvCatIIzV1VUOBVUcGOQbNifHy/LuzkMGcZLsfg1fmT/weNA d2NNSmwdSzHR7vAAJfsekBMvo6F8paGqaaNo1OB8baET9mC6mUfO8pxCEuaKfbn1j3 QPDIzOrTleSG2MhE9dTPGla8nAkbmrol3M4ARAag= From: Fan Wu To: corbet@lwn.net, zohar@linux.ibm.com, jmorris@namei.org, serge@hallyn.com, tytso@mit.edu, ebiggers@kernel.org, axboe@kernel.dk, agk@redhat.com, snitzer@kernel.org, eparis@redhat.com, paul@paul-moore.com Cc: linux-doc@vger.kernel.org, linux-integrity@vger.kernel.org, linux-security-module@vger.kernel.org, linux-fscrypt@vger.kernel.org, linux-block@vger.kernel.org, dm-devel@redhat.com, linux-audit@redhat.com, roberto.sassu@huawei.com, linux-kernel@vger.kernel.org, Deven Bowers , Fan Wu Subject: [RFC PATCH v9 16/16] documentation: add ipe documentation Date: Mon, 30 Jan 2023 14:57:31 -0800 Message-Id: <1675119451-23180-17-git-send-email-wufan@linux.microsoft.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1675119451-23180-1-git-send-email-wufan@linux.microsoft.com> References: <1675119451-23180-1-git-send-email-wufan@linux.microsoft.com> MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-block@vger.kernel.org From: Deven Bowers Add IPE's admin and developer documentation to the kernel tree. Co-developed-by: Fan Wu Signed-off-by: Deven Bowers Signed-off-by: Fan Wu --- v2: + No Changes v3: + Add Acked-by + Fixup code block syntax + Fix a minor grammatical issue. v4: + Update documentation with the results of other code changes. v5: + No changes v6: + No changes v7: + Add additional developer-level documentation + Update admin-guide docs to reflect changes. + Drop Acked-by due to significant changes + Added section about audit events in admin-guide v8: + Correct terminology from "audit event" to "audit record" + Add associated documentation with the correct "audit event" terminology. + Add some context to the historical motivation for IPE and design philosophy. + Add some content about the securityfs layout in the policies directory. + Various spelling and grammatical corrections. v9: + Correct spelling of "pitfalls" + Update the docs w.r.t the new parser and new audit formats --- Documentation/admin-guide/LSM/index.rst | 1 + Documentation/admin-guide/LSM/ipe.rst | 729 ++++++++++++++++++ .../admin-guide/kernel-parameters.txt | 12 + Documentation/security/index.rst | 1 + Documentation/security/ipe.rst | 436 +++++++++++ MAINTAINERS | 2 + 6 files changed, 1181 insertions(+) create mode 100644 Documentation/admin-guide/LSM/ipe.rst create mode 100644 Documentation/security/ipe.rst diff --git a/Documentation/admin-guide/LSM/index.rst b/Documentation/admin-guide/LSM/index.rst index a6ba95fbaa9f..ce63be6d64ad 100644 --- a/Documentation/admin-guide/LSM/index.rst +++ b/Documentation/admin-guide/LSM/index.rst @@ -47,3 +47,4 @@ subdirectories. tomoyo Yama SafeSetID + ipe diff --git a/Documentation/admin-guide/LSM/ipe.rst b/Documentation/admin-guide/LSM/ipe.rst new file mode 100644 index 000000000000..b676cea62b2e --- /dev/null +++ b/Documentation/admin-guide/LSM/ipe.rst @@ -0,0 +1,729 @@ +.. SPDX-License-Identifier: GPL-2.0 + +Integrity Policy Enforcement (IPE) +================================== + +.. NOTE:: + + This is the documentation for admins, system builders, or individuals + attempting to use IPE. If you're looking for more developer-focused + documentation about IPE please see `Documentation/security/ipe.rst` + +Overview +-------- + +IPE is a Linux Security Module which takes a complimentary approach to +access control. Whereas existing mandatory access control mechanisms +base their decisions on labels and paths, IPE instead determines +whether or not an operation should be allowed based on immutable +security properties of the system component the operation is being +performed on. + +IPE itself does not mandate how the security property should be +evaluated, but relies on an extensible set of external property providers +to evaluate the component. IPE makes its decision based on reference +values for the selected properties, specified in the IPE policy. + +The reference values represent the value that the policy writer and the +local system administrator (based on the policy signature) trust for the +system to accomplish the desired tasks. + +One such provider is for example dm-verity, which is able to represent +the integrity property of a partition (its immutable state) with a digest. + +IPE is compiled under ``CONFIG_SECURITY_IPE`` (Security -> Integrity Policy Enforcement (IPE)). + +Use Cases +--------- + +IPE works best in fixed-function devices: devices in which their purpose +is clearly defined and not supposed to be changed (e.g. network firewall +device in a data center, an IoT device, etcetera), where all software and +configuration is built and provisioned by the system owner. + +IPE is a long-way off for use in general-purpose computing: the Linux +community as a whole tends to follow a decentralized trust model, +known as the web of trust, which IPE has no support for as of yet. + +IPE, instead of supporting web of trust, supports PKI, which generally +designates a set of entities that provide a measure of absolute trust. + +Additionally, while most packages are signed today, the files inside +the packages (for instance, the executables), tend to be unsigned. This +makes it difficult to utilize IPE in systems where a package manager is +expected to be functional, without major changes to the package manager +and ecosystem behind it. + +DIGLIM [#diglim]_ is a system that when combined with IPE, could be used to +enable general purpose computing scenarios. + +Known Gaps +---------- + +IPE cannot verify the integrity of anonymous executable memory, such as +the trampolines created by gcc closures and libffi (<3.4.2), or JIT'd code. +Unfortunately, as this is dynamically generated code, there is no way +for IPE to ensure the integrity of this code to form a trust basis. In all +cases, the return result for these operations will be whatever the admin +configures as the ``DEFAULT`` action for ``EXECUTE``. + +IPE cannot verify the integrity of interpreted languages' programs when +these scripts are invoked via `` ``. This is because +the way interpreters execute these files, the scripts themselves are not +evaluated as executable code through one of IPE's hooks, as they are merely +files that are read (as opposed to executable code) [#interpreters]_. + +Threat Model +------------ + +The threat type addressed by IPE is tampering of executable userspace +code beyond the initially booted kernel, and the initial verification of +kernel modules that are loaded in userspace through ``modprobe`` or +``insmod``. + +A bare-minimum example of a threat that should be mitigated by IPE, is +a hostile binary is downloaded with all required binaries (including +a loader, libc, etc). With IPE, this hostile binary should not able to +be executed, nor any of the downloaded binaries. + +Tampering violates integrity, and being unable to verify the integrity, +results in a lack of trust. IPE's role in mitigating this threat is to +verify the integrity (and authenticity) of all executable code and to +deny their use if they cannot be trusted (as integrity verification fails, +or the authorization check fails against the reference value in the policy). +IPE generates audit logs which may be utilized to detect failures resulting +from failure to pass policy. + +Tampering threat scenarios include modification or replacement of +executable code by a range of actors including: + +- Actors with physical access to the hardware +- Actors with local network access to the system +- Actors with access to the deployment system +- Compromised internal systems under external control +- Malicious end users of the system +- Compromised end users of the system +- Remote (external) compromise of the system + +IPE does not mitigate threats arising from malicious authorized +developers (with access to a signing certificate), or compromised +developer tools used by authorized developers (i.e. Return Oriented +Programming attacks). Additionally, IPE draws hard security boundary +between userspace and kernelspace. As a result, IPE does not provide +any protections against a kernel level exploit, and a kernel-level +exploit can disable or tamper with IPE's protections. + +Policy +------ + +IPE policy is a plain-text [#devdoc]_ policy composed of multiple statements +over several lines. There is one required line, at the top of the +policy, indicating the policy name, and the policy version, for +instance:: + + policy_name=Ex_Policy policy_version=0.0.0 + +The policy name is a unique key identifying this policy in a human +readable name. This is used to create nodes under securityfs as well as +uniquely identify policies to deploy new policies vs update existing +policies. + +The policy version indicates the current version of the policy (NOT the +policy syntax version). This is used to prevent rollback of policy to +potentially insecure previous versions of the policy. + +The next portion of IPE policy are rules. Rules are formed by key=value +pairs, known as properties. IPE rules require two properties: "action", +which determines what IPE does when it encounters a match against the +rule, and "op", which determines when that rule should be evaluated. +The ordering is significant, a rule must start with "op", and end with +"action". Thus, a minimal rule is:: + + op=EXECUTE action=ALLOW + +This example will allow any execution. Additional properties are used to +restrict attributes about the files being evaluated. These properties +are intended to be descriptions of systems within the kernel that can +provide a measure of integrity verification, such that IPE can determine +the trust of the resource based on the "value" half of the property. + +Rules are evaluated top-to-bottom. As a result, any revocation rules, +or denies should be placed early in the file to ensure that these rules +are evaluated before a rule with "action=ALLOW" is hit. + +IPE policy supports comments. The character '#' will function as a +comment, ignoring all characters to the right of '#' until the newline. + +The default behavior of IPE evaluations can also be expressed in policy, +through the ``DEFAULT`` statement. This can be done at a global level, +or a per-operation level:: + + # Global + DEFAULT action=ALLOW + + # Operation Specific + DEFAULT op=EXECUTE action=ALLOW + +A default must be set for all known operations in IPE. If you want to +preserve older policies being compatible with newer kernels that can introduce +new operations, please set a global default of 'ALLOW', and override the +defaults on a per-operation basis. + +With configurable policy-based LSMs, there's several issues with +enforcing the configurable policies at startup, around reading and +parsing the policy: + +1. The kernel *should* not read files from userspace, so directly reading + the policy file is prohibited. +2. The kernel command line has a character limit, and one kernel module + should not reserve the entire character limit for its own + configuration. +3. There are various boot loaders in the kernel ecosystem, so handing + off a memory block would be costly to maintain. + +As a result, IPE has addressed this problem through a concept of a "boot +policy". A boot policy is a minimal policy, compiled into the kernel. +This policy is intended to get the system to a state where userspace is +set up and ready to receive commands, at which point a more complex +policy can be deployed via securityfs. The boot policy can be specified +via the Kconfig, ``SECURITY_IPE_BOOT_POLICY``, which accepts a path to +a plain-text version of the IPE policy to apply. This policy will be +compiled into the kernel. If not specified, IPE will be disabled until +a policy is deployed and activated through securityfs. + +Deploying Policies +~~~~~~~~~~~~~~~~~~ + +Policies can be deployed from userspace through securityfs. These policies +are signed through the PKCS#7 message format to enforce some level of +authorization of the policies (prohibiting an attacker from gaining +unconstrained root, and deploying an "allow all" policy). These +policies must be signed by a certificate that chains to the +``SYSTEM_TRUSTED_KEYRING``. Through openssl, the signing can be done via:: + + openssl smime -sign \ + -in "$MY_POLICY" \ + -signer "$MY_CERTIFICATE" \ + -inkey "$MY_PRIVATE_KEY" \ + -noattr \ + -nodetach \ + -nosmimecap \ + -outform der \ + -out "$MY_POLICY.p7b" + +Deploying the policies is done through securityfs, through the +``new_policy`` node. To deploy a policy, simply cat the file into the +securityfs node:: + + cat "$MY_POLICY.p7b" > /sys/kernel/security/ipe/new_policy + +Upon success, this will create one subdirectory under +``/sys/kernel/security/ipe/policies/``. The subdirectory will be the +``policy_name`` field of the policy deployed, so for the example above, +the directory will be ``/sys/kernel/security/ipe/policies/Ex_Policy``. +Within this directory, there will be five files: ``pkcs7``, ``policy``, +``active``, ``update``, and ``delete``. + +The ``pkcs7`` file is read only. Reading will provide the raw PKCS#7 data +that was provided to the kernel, representing the policy. Writing, will +deploy an in-place policy update.If the policy being read is the boot +policy, when read, this will return ENOENT, as this policy is not signed. + +The ``policy`` file is read only. Reading will provide the PKCS#7 inner +content of the policy, which will be the plain text policy. + +The ``active`` file is used to set a policy as the currently active policy. +This file is rw, and accepts a value of ``"1"`` to set the policy as active. +Since only a single policy can be active at one time, all other policies +will be marked inactive. The policy being marked active must have a policy +version greater or equal to the currently-running version. + +The ``update`` file is used to update a policy that is already present in +the kernel. This file is write-only and accepts a PKCS#7 signed policy. +One check will always be performed on this policy: the policy_names must +match with the updated version and the existing version. One additional check +may be made: If the policy being updated is the active policy, the updated +policy must have a policy version greater than or equal to the currently-running +version; This is to prevent rollback attacks. + +The ``delete`` file is used to remove a policy that is no longer needed. +This file is write-only and accepts a value of ``1`` to delete the policy. +On deletion, the securityfs node representing the policy will be removed. +The policy that is currently active cannot be deleted. + +Similarly, the writes to both ``update`` and ``new_policy`` above will +result in an error upon syntactically invalid or untrusted policies. +In the case of ``new_policy``, it will also error if a policy already +exists with the same ``policy_name``. + +Deploying these policies will *not* cause IPE to start enforcing this +policy. Once deployment is successful, a policy can be marked as active, +via ``/sys/kernel/security/ipe/$policy_name/active``. IPE will enforce +whatever policy is marked as active. For our example, we can activate +the ``Ex_Policy`` via:: + + echo 1 > "/sys/kernel/security/ipe/Ex_Policy/active" + +At which point, ``Ex_Policy`` will now be the enforced policy on the +system. + +IPE also provides a way to delete policies. This can be done via the +``delete`` securityfs node, ``/sys/kernel/security/ipe/$policy_name/delete``. +Writing ``1`` to that file will delete that node:: + + echo 1 > "/sys/kernel/security/ipe/$policy_name/delete" + +There is only one requirement to delete a policy: + +1. The policy being deleted must not be the active policy. + +.. NOTE:: + + If a traditional MAC system is enabled (SELinux, apparmor, smack), all + writes to ipe's securityfs nodes require ``CAP_MAC_ADMIN``. + +Modes +~~~~~ + +IPE supports two modes of operation: permissive (similar to SELinux's +permissive mode) and enforce. Permissive mode performs the same checks +as enforce mode, and logs policy violations, but will not enforce the +policy. This allows users to test policies before enforcing them. + +The default mode is enforce, and can be changed via the kernel command +line parameter ``ipe.enforce=(0|1)``, or the securityfs node +``/sys/kernel/security/ipe/enforce``. + +.. NOTE:: + + If a traditional MAC system is enabled (SELinux, apparmor, smack, etcetera), + all writes to ipe's securityfs nodes require ``CAP_MAC_ADMIN``. + +Audit Events +~~~~~~~~~~~~ + +1420 AUDIT_IPE_ACCESS +^^^^^^^^^^^^^^^^^^^^^ +Event Examples:: + + type=1420 audit(1653364370.067:61): path="/root/fs/rw/plain/execve" dev="vdc1" ino=16 rule="DEFAULT op=EXECUTE action=DENY" + type=1300 audit(1653364370.067:61): arch=c000003e syscall=10 success=no exit=-13 a0=7f0bf0644000 a1=4f80 a2=5 a3=7f0bf043d300 items=0 ppid=455 pid=737 auid=0 uid=0 gid=0 euid=0 suid=0 fsuid=0 egid=0 sgid=0 fsgid=0 tty=ttyS0 ses=3 comm="mprotect" exe="/root/host/mprotect" subj=kernel key=(null) + type=1327 audit(1653364370.067:61): proctitle=686F73742F6D70726F7465637400534800527C5700527C5800706C61696E2F657865637665 + + type=1420 audit(1653364735.161:64): rule="DEFAULT op=EXECUTE action=DENY" + type=1300 audit(1653364735.161:64): arch=c000003e syscall=9 success=no exit=-13 a0=0 a1=1000 a2=4 a3=20 items=0 ppid=455 pid=774 auid=0 uid=0 gid=0 euid=0 suid=0 fsuid=0 egid=0 sgid=0 fsgid=0 tty=ttyS0 ses=3 comm="mmap" exe="/root/host/mmap" subj=kernel key=(null) + type=1327 audit(1653364735.161:64): proctitle=686F73742F6D6D617000410058⏎ + +This event indicates that IPE made an access control decision; the IPE specific +record (1420) will always be emitted in conjunction with a ``AUDITSYSCALL`` record. + +Determining whether IPE is in permissive can be derived from the success and exit +field of the AUDITSYSCALL record + + + +Field descriptions: + ++---------------+------------+-----------+-------------------------------------------------------------------------+ +| Field | Value Type | Optional? | Description of Value | ++===============+============+===========+=========================================================================+ +| path | string | Yes | The absolute path to the file that was the subject of the evaluation | ++---------------+------------+-----------+-------------------------------------------------------------------------+ +| ino | integer | Yes | The inode number of the file that was the subject of the evaluation | ++---------------+------------+-----------+-------------------------------------------------------------------------+ +| dev | string | Yes | The device name that the file under evaluation belongs to, e.g. vda | ++---------------+------------+-----------+-------------------------------------------------------------------------+ +| rule | string | No | The exact rule in IPE's policy that the evaluation matched | ++---------------+------------+-----------+-------------------------------------------------------------------------+ + +1403 AUDIT_MAC_POLICY_LOAD +^^^^^^^^^^^^^^^^^^^^^^^^^^ + +Event Example:: + + type=1403 audit(1653425529.927:53): policy_name="dmverity_roothash" policy_version=0.0.0 sha256=DC67AC19E05894EFB3170A8E55DE529794E248C2 auid=4294967295 ses=4294967295 lsm=ipe res=1 + type=1300 audit(1653425529.927:53): arch=c000003e syscall=1 success=yes exit=2567 a0=3 a1=5596fcae1fb0 a2=a07 a3=2 items=0 ppid=184 pid=229 auid=4294967295 uid=0 gid=0 euid=0 suid=0 fsuid=0 egid=0 sgid=0 fsgid=0 tty=pts0 ses=4294967295 comm="python3" exe="/usr/bin/python3.10" key=(null) + type=1327 audit(1653425529.927:53): PROCTITLE proctitle=707974686F6E3300746573742F6D61696E2E7079002D66002E2E + +This record will always be emitted in conjunction with a ``AUDITSYSCALL`` record for the ``write`` syscall. + ++----------------+------------+-----------+--------------------------------------------------------------+ +| Field | Value Type | Optional? | Description of Value | ++================+============+===========+==============================================================+ +| policy_name | string | No | The policy_name field of the policy. | ++----------------+------------+-----------+--------------------------------------------------------------+ +| policy_version | string | No | The policy_version field of the policy | ++----------------+------------+-----------+--------------------------------------------------------------+ +| sha256 | string | Yes* | A flat hash of the policy. Can be used to identify a policy. | ++----------------+------------+-----------+--------------------------------------------------------------+ +| auid | integer | No | The audit user ID. | ++----------------+------------+-----------+--------------------------------------------------------------+ +| ses | integer | No | The session ID. | ++----------------+------------+-----------+--------------------------------------------------------------+ +| lsm | string | No | The lsm name associated with the event. | ++----------------+------------+-----------+--------------------------------------------------------------+ +| res | integer | No | The operation result. | ++----------------+------------+-----------+--------------------------------------------------------------+ + +1405 AUDIT_MAC_CONFIG_CHANGE +^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +Event Example:: + + type=1405 audit(1653425583.136:54): old_active_pol_name="Allow_All" old_active_pol_version=0.0.0 old_sha256=DA39A3EE5E6B4B0D3255BFEF95601890AFD80709 new_active_pol_name="dmverity_roothash" new_active_pol_version=0.0.0 new_sha256=DC67AC19E05894EFB3170A8E55DE529794E248C2 auid=4294967295 ses=4294967295 lsm=ipe res=1 + type=1300 audit(1653425583.136:54): SYSCALL arch=c000003e syscall=1 success=yes exit=2 a0=3 a1=5596fcae1fb0 a2=2 a3=2 items=0 ppid=184 pid=229 auid=4294967295 uid=0 gid=0 euid=0 suid=0 fsuid=0 egid=0 sgid=0 fsgid=0 tty=pts0 ses=4294967295 comm="python3" exe="/usr/bin/python3.10" key=(null) + type=1327 audit(1653425583.136:54): PROCTITLE proctitle=707974686F6E3300746573742F6D61696E2E7079002D66002E2 + +This record will always be emitted in conjunction with a ``AUDITSYSCALL`` record for the ``write`` syscall. + ++------------------------+------------+-----------+----------------------------------------------------+ +| Field | Value Type | Optional? | Description of Value | ++========================+============+===========+====================================================+ +| old_active_pol_name | string | No | The policy_name field of the old active policy. | ++------------------------+------------+-----------+----------------------------------------------------+ +| old_active_pol_version | string | No | The policy_version field of the old active policy. | ++------------------------+------------+-----------+----------------------------------------------------+ +| old_sha256 | string | Yes* | A flat hash of the old active policy. | ++------------------------+------------+-----------+----------------------------------------------------+ +| new_active_pol_name | string | No | The policy_name field of the new active policy. | ++------------------------+------------+-----------+----------------------------------------------------+ +| new_active_pol_version | string | No | The policy_version field of the new active policy. | ++------------------------+------------+-----------+----------------------------------------------------+ +| new_sha256 | string | Yes* | A flat hash of the new active policy. | ++------------------------+------------+-----------+----------------------------------------------------+ +| auid | integer | No | The audit user ID. | ++------------------------+------------+-----------+----------------------------------------------------+ +| ses | integer | No | The session ID. | ++------------------------+------------+-----------+----------------------------------------------------+ +| lsm | string | No | The lsm name associated with the event. | ++------------------------+------------+-----------+----------------------------------------------------+ +| res | integer | No | The operation result. | ++------------------------+------------+-----------+----------------------------------------------------+ + +1404 AUDIT_MAC_STATUS +^^^^^^^^^^^^^^^^^^^^^ + +Event Examples:: + + type=1404 audit(1653425689.008:55): permissive=1 auid=0 ses=4294967295 lsm=ipe res=1 + type=1300 audit(1653425689.008:55): arch=c000003e syscall=1 success=yes exit=2 a0=1 a1=55c1065e5c60 a2=2 a3=0 items=0 ppid=405 pid=441 auid=0 uid=0 gid=0 euid=0 suid=0 fsuid=0 egid=0 sgid=) + type=1327 audit(1653425689.008:55): proctitle="-bash" + + type=1404 audit(1653425689.008:55): permissive=0 auid=0 ses=4294967295 lsm=ipe res=1 + type=1300 audit(1653425689.008:55): arch=c000003e syscall=1 success=yes exit=2 a0=1 a1=55c1065e5c60 a2=2 a3=0 items=0 ppid=405 pid=441 auid=0 uid=0 gid=0 euid=0 suid=0 fsuid=0 egid=0 sgid=) + type=1327 audit(1653425689.008:55): proctitle="-bash" + +This record will always be emitted in conjunction with a ``AUDITSYSCALL`` record for the ``write`` syscall. + ++------------+------------+-----------+-------------------------------------------------------------------+ +| Field | Value Type | Optional? | Description of Value | ++============+============+===========+===================================================================+ +| permissive | integer | No | The state IPE is being switched to. 1 is permissive, 0 is enforce | ++------------+------------+-----------+-------------------------------------------------------------------+ +| auid | integer | No | The audit user ID. | ++------------+------------+-----------+-------------------------------------------------------------------+ +| ses | integer | No | The session ID. | ++------------+------------+-----------+-------------------------------------------------------------------+ +| lsm | string | No | The lsm name associated with the event. | ++------------+------------+-----------+-------------------------------------------------------------------+ +| res | integer | No | The operation result. | ++------------+------------+-----------+-------------------------------------------------------------------+ + +Success Auditing +^^^^^^^^^^^^^^^^ + +IPE supports success auditing. When enabled, all events that pass IPE +policy and are not blocked will emit an audit event. This is disabled by +default, and can be enabled via the kernel command line +``ipe.success_audit=(0|1)`` or the securityfs node, +``/sys/kernel/security/ipe/success_audit``. + +This is *very* noisy, as IPE will check every userspace binary on the +system, but is useful for debugging policies. + +.. NOTE:: + + If a traditional MAC system is enabled (SELinux, apparmor, smack, etcetera), + all writes to ipe's securityfs nodes require ``CAP_MAC_ADMIN``. + +Properties +---------- + +As explained above, IPE properties are ``key=value`` pairs expressed in +IPE policy. Two properties are built-into the policy parser: 'op' and +'action'. The other properties are determinstic attributes to express +across files. Currently those properties are: '``boot_verified``', +'``dmverity_signature``', '``dmverity_roothash``', '``fsverity_signature``', +'``fsverity_digest``'. A description of all properties supported by IPE +are listed below: + +op +~~ + +Indicates the operation for a rule to apply to. Must be in every rule, +as the first token. IPE supports the following operations: + + ``EXECUTE`` + + Pertains to any file attempting to be executed, or loaded as an + executable. + + ``FIRMWARE``: + + Pertains to firmware being loaded via the firmware_class interface. + This covers both the preallocated buffer and the firmware file + itself. + + ``KMODULE``: + + Pertains to loading kernel modules via ``modprobe`` or ``insmod``. + + ``KEXEC_IMAGE``: + + Pertains to kernel images loading via ``kexec``. + + ``KEXEC_INITRAMFS`` + + Pertains to initrd images loading via ``kexec --initrd``. + + ``POLICY``: + + Controls loading polcies via reading a kernel-space initiated read. + + An example of such is loading IMA policies by writing the path + to the policy file to ``$securityfs/ima/policy`` + + ``X509_CERT``: + + Controls loading IMA certificates through the Kconfigs, + ``CONFIG_IMA_X509_PATH`` and ``CONFIG_EVM_X509_PATH``. + +action +~~~~~~ + + Determines what IPE should do when a rule matches. Must be in every + rule, as the final clause. Can be one of: + + ``ALLOW``: + + If the rule matches, explicitly allow access to the resource to proceed + without executing any more rules. + + ``DENY``: + + If the rule matches, explicitly prohibit access to the resource to + proceed without executing any more rules. + +boot_verified +~~~~~~~~~~~~~ + + This property can be utilized for authorization of the first super-block + that executes a file. This is almost always init. Typically this is used + for systems with an initramfs or other initial disk, where this is unmounted + before the system becomes available, and is not covered by any other property. + The format of this property is:: + + boot_verified=(TRUE|FALSE) + + + .. WARNING:: + + This property will trust any disk where the first execution evaluation + occurs. If you do *NOT* have a startup disk that is unpacked and unmounted + (like initramfs), then it will automatically trust the root filesystem and + potentially overauthorize the entire disk. + +dmverity_roothash +~~~~~~~~~~~~~~~~~ + + This property can be utilized for authorization or revocation of + specific dm-verity volumes, identified via root hash. It has a + dependency on the DM_VERITY module. This property is controlled by the + Kconfig ``CONFIG_IPE_PROP_DM_VERITY``. The format of this property + is:: + + dmverity_roothash=DigestName:HexadecimalString + + The supported DigestNames for dmverity_roothash are [#dmveritydigests]_ [#securedigest]_ : + + + blake2b-512 + + blake2s-256 + + sha1 + + sha256 + + sha384 + + sha512 + + sha3-224 + + sha3-256 + + sha3-384 + + sha3-512 + + md4 + + md5 + + sm3 + + rmd160 + +dmverity_signature +~~~~~~~~~~~~~~~~~~ + + This property can be utilized for authorization of all dm-verity volumes + that have a signed roothash that chains to a keyring specified by dm-verity's + configuration, either the system trusted keyring, or the secondary keyring. + It has an additional dependency on the ``DM_VERITY_VERIFY_ROOTHASH_SIG`` + Kconfig. This property is controlled by the Kconfig + ``CONFIG_IPE_PROP_DM_VERITY``. The format of this property is:: + + dmverity_signature=(TRUE|FALSE) + +fsverity_digest +~~~~~~~~~~~~~~~ + + This property can be utilized for authorization or revocation of + specific fsverity enabled file, identified via its fsverity digest. + It has a dependency on the FS_VERITY module. This property is + controlled by the Kconfig ``CONFIG_IPE_PROP_FS_VERITY``. + The format of this property is:: + + fsverity_digest=DigestName:HexadecimalString + + The supported DigestNames for dmverity_roothash are [#fsveritydigest] [#securedigest]_ : + + + sha256 + + sha512 + +fsverity_signature +~~~~~~~~~~~~~~~~~~ + +Version 1 + + This property can be utilized for authorization of all fsverity enabled + files that is verified by fsverity. The keyring that the signature is + verified against is subject to fsverity's configuration, typically the fsverity + keyring. It has a dependency on the ``CONFIG_FS_VERITY_BUILTIN_SIGNATURES`` + Kconfig. This property is controlled by the Kconfig + ``CONFIG_IPE_PROP_FS_VERITY``. The format of this property is:: + + fsverity_signature=(TRUE|FALSE) + +Policy Examples +--------------- + +Allow all +~~~~~~~~~ + +:: + + policy_name=Allow_All policy_version=0.0.0 + DEFAULT action=ALLOW + +Allow only initial superblock +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +:: + + policy_name=Allow_All_Initial_SB policy_version=0.0.0 + DEFAULT action=DENY + + op=EXECUTE boot_verified=TRUE action=ALLOW + +Allow any signed dm-verity volume and the initial superblock +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +:: + + policy_name=AllowSignedAndInitial policy_version=0.0.0 + DEFAULT action=DENY + + op=EXECUTE boot_verified=TRUE action=ALLOW + op=EXECUTE dmverity_signature=TRUE action=ALLOW + +Prohibit execution from a specific dm-verity volume +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +:: + + policy_name=AllowSignedAndInitial policy_version=0.0.0 + DEFAULT action=DENY + + op=EXECUTE dmverity_roothash=sha256:cd2c5bae7c6c579edaae4353049d58eb5f2e8be0244bf05345bc8e5ed257baff action=DENY + + op=EXECUTE boot_verified=TRUE action=ALLOW + op=EXECUTE dmverity_signature=TRUE action=ALLOW + +Allow only a specific dm-verity volume +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +:: + + policy_name=AllowSignedAndInitial policy_version=0.0.0 + DEFAULT action=DENY + + op=EXECUTE dmverity_roothash=sha256:401fcec5944823ae12f62726e8184407a5fa9599783f030dec146938 action=ALLOW + +Allow any signed fs-verity file +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +:: + + policy_name=AllowSignedFSVerity policy_version=0.0.0 + DEFAULT action=DENY + + op=EXECUTE fsverity_signature=TRUE action=ALLOW + +Prohibit execution of a specific fs-verity file +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +:: + + policy_name=ProhibitSpecificFSVF policy_version=0.0.0 + DEFAULT action=DENY + + op=EXECUTE fsverity_digest=sha256:fd88f2b8824e197f850bf4c5109bea5cf0ee38104f710843bb72da796ba5af9e action=DENY + op=EXECUTE boot_verified=TRUE action=ALLOW + op=EXECUTE dmverity_signature=TRUE action=ALLOW + +Additional Information +---------------------- + +- `Github Repository `_ +- `Design Documentation `_ + +FAQ +--- + +Q: + What's the difference between other LSMs which provide a measure of + trust-based access control? + +A: + + In general, there's two other LSMs that can provide similar functionality: + IMA, and Loadpin. + + IMA and IPE are functionally very similar. The significant difference between + the two is the policy. [#devdoc]_ + + Loadpin and IPE differ fairly dramatically, as Loadpin controls only the IPE + equivalent of ``KERNEL_READ``, whereas IPE is capable of controlling execution, + on top of ``KERNEL_READ``. The trust model is also different; Loadpin roots its + trust in the initial super-block, instead, IPE roots its trust in the kernel + itself (via ``SYSTEM_TRUSTED_KEYS``). + +----------- + +.. [#diglim] 1: https://lore.kernel.org/bpf/4d6932e96d774227b42721d9f645ba51@huawei.com/T/ + +.. [#interpreters] There is `some interest in solving this issue `_. + +.. [#devdoc] Please see `Documentation/security/ipe.rst` for more on this topic. + +.. [#fsveritydigest] These hash algorithms are based on values accepted by fsverity-utils; + IPE does not impose any restrictions on the digest algorithm itself; + thus, this list may be out of date. + +.. [#dmveritydigests] These hash algorithms are based on values accepted by dm-verity, + specifically ``crypto_alloc_ahash`` in ``verity_ctr``; ``veritysetup`` + does support more algorithms than the list above. IPE does not impose + any restrictions on the digest algorithm itself; thus, this list + may be out of date. + +.. [#securedigest] Please ensure you are using cryptographically secure hash functions; + just because something is *supported* does not mean it is *secure*. diff --git a/Documentation/admin-guide/kernel-parameters.txt b/Documentation/admin-guide/kernel-parameters.txt index 6cfa6e3996cf..6f2868113135 100644 --- a/Documentation/admin-guide/kernel-parameters.txt +++ b/Documentation/admin-guide/kernel-parameters.txt @@ -2209,6 +2209,18 @@ ipcmni_extend [KNL] Extend the maximum number of unique System V IPC identifiers from 32,768 to 16,777,216. + ipe.enforce= [IPE] + Format: + Determine whether IPE starts in permissive (0) or + enforce (1) mode. The default is enforce. + + ipe.success_audit= + [IPE] + Format: + Start IPE with success auditing enabled, emitting + an audit event when a binary is allowed. The default + is 0. + irqaffinity= [SMP] Set the default irq affinity mask The argument is a cpu list, as described above. diff --git a/Documentation/security/index.rst b/Documentation/security/index.rst index 6ed8d2fa6f9e..a5248d4fd510 100644 --- a/Documentation/security/index.rst +++ b/Documentation/security/index.rst @@ -18,3 +18,4 @@ Security Documentation digsig landlock secrets/index + ipe diff --git a/Documentation/security/ipe.rst b/Documentation/security/ipe.rst new file mode 100644 index 000000000000..85e170ce864a --- /dev/null +++ b/Documentation/security/ipe.rst @@ -0,0 +1,436 @@ +.. SPDX-License-Identifier: GPL-2.0 + +Integrity Policy Enforcement (IPE) - Kernel Documentation +========================================================= + +.. NOTE:: + + This is documentation targeted at developers, instead of administrators. + If you're looking for documentation on the usage of IPE, please see + `Documentation/admin-guide/LSM/ipe.rst` + +Historical Motivation +--------------------- + +The original issue that prompted IPE's implementation was the creation +of a locked-down system. This system would be born-secure, and have +strong integrity guarantees over both the executable code, and specific +*data files* on the system, that were critical to its function. These +specific data files would not be readable unless they passed integrity +policy. A mandatory access control system would be present, and +as a result, xattrs would have to be protected. This lead to a selection +of what would provide the integrity claims. At the time, there were two +main mechanisms considered that could guarantee integrity for the system +with these requirements: + + 1. IMA + EVM Signatures + 2. DM-Verity + +Both options were carefully considered, however the choice to use DM-Verity +over IMA+EVM as the *integrity mechanism* in the original use case of IPE +was due to three main reasons: + + 1. Protection of additional attack vectors: + + * With IMA+EVM, without an encryption solution, the system is vulnerable + to offline attack against the aforemetioned specific data files. + + Unlike executables, read operations (like those on the protected data + files), cannot be enforced to be globally integrtiy verified. This means + there must be some form of selector to determine whether a read should + enforce the integrity policy, or it should not. + + At the time, this was done with mandatory access control labels. An IMA + policy would indicate what labels required integrity verification, which + presented an issue: EVM would protect the label, but if an attacker could + modify filesystem offline, the attacker could wipe all the xattrs - + including the SELinux labels that would be used to determine whether the + file should be subject to integrity policy. + + With DM-Verity, as the xattrs are saved as part of the merkel tree, if + offline mount occurs against the filesystem protected by dm-verity, the + checksum no longer matches and the file fails to be read. + + * As userspace binaries are paged in Linux, dm-verity also offers the + additional protection against a hostile block device. In such an attack, + the block device reports the appropriate content for the IMA hash + initially, passing the required integrity check. Then, on the page fault + that accesses the real data, will report the attacker's payload. Since + dm-verity will check the data when the page fault occurs (and the disk + access), this attack is mitigated. + + 2. Performance: + + * dm-verity provides integrity verification on demand as blocks are + read versus requiring the entire file being read into memory for + validation. + + 3. Simplicity of signing: + + * No need for two signatures (IMA, then EVM): one signature covers + an entire block device. + * Signatures can be stored externally to the filesystem metadata. + * The signature supports an x.509-based signing infrastructure. + +The next step was to choose a *policy* to enforce the integrity mechanism. +The minimum requirements for the policy were: + + 1. The policy itself must be integrity verified (preventing trivial + attack against it). + 2. The policy itself must be resistant to rollback attacks. + 3. The policy enforcement must have a permissive-like mode. + 4. The policy must be able to be updated, in its entirety, without + a reboot. + 5. Policy updates must be atomic. + 6. The policy must support *revocations* of previously authored + components. + 7. The policy must be auditable, at any point-of-time. + +IMA, as the only integrity policy mechanism at the time, was +considered against these list of requirements, and did not fulfill +all of the minimum requirements. Extending IMA to cover these +requirements was considered, but ultimately discarded for a +two reasons: + + 1. Regression risk; many of these changes would result in + dramatic code changes to IMA, which is already present in the + kernel, and therefore might impact users. + + 2. IMA was used in the system for measurement and attestation; + separation of measurement policy from local integrity policy + enforcement was considered favorable. + +Due to these reasons, it was decided that a new LSM should be created, +whose responsibility would be only the local integrity policy enforcement. + +Role and Scope +-------------- + +IPE, as its name implies, is fundamentally an integrity policy enforcement +solution; IPE does not mandate how integrity is provided, but instead +leaves that decision to the system administrator to set the security bar, +via the mechanisms that they select that suit their individual needs. +There are several different integrity solutions that provide a different +level of security guarantees; and IPE allows sysadmins to express policy for +theoretically all of them. + +IPE additionally does not provide a mechanism that provides integrity +by itself: there are better layers to create such systems, and a mechanism +of proving integrity has next to nothing to do with the policy of enforcing +that integrity claim. + +Therefore, IPE was designed around: + + 1. Easy integrations with integrity providers. + 2. Ease of use for platform administrators/sysadmins. + +Design Rationale: +----------------- + +IPE was designed after evluating existing integrity policy solutions +in other operating systems and environments. In this survey of other +implementations, there were a few pitfalls identified: + + 1. Policies were not readable by humans, usually requiring a binary + intermediary format. + 2. A single, non-customizable action was implicitly taken as a default. + 3. Debugging the policy required manual steps to determine what rule was violated. + 4. Authoring a policy required an in-depth knowledge of the larger system, + or operating system. + +IPE attempts to avoid all of these pitfalls. + +Policy +~~~~~~ + +Plain Text +^^^^^^^^^^ + +IPE's policy is plain-text. This introduces slightly larger policy files than +other LSMs, but solves two major problems that occurs with some integrity policy +solutions on other platforms. + +The first issue is one of code maintenance and duplication. To author policies, +the policy has to be some form of string representation (be it structured, +through XML, JSON, YAML, etcetera), to allow the policy author to understand +what is being written. In a hypothetical binary policy design, a serializer +is necessary to write the policy from the human readable form, to the binary +form, and a deserializer is needed to interpret the binary form into a data +structure in the kernel. + +Eventually, another deserializer will be needed to transform the binary from +back into the human-readable form with as much information preserved. This is because a +user of this access control system will have to keep a lookup table of a checksum +and the original file itself to try to understand what policies have been deployed +on this system and what policies have not. For a single user, this may be alright, +as old policies can be discarded almost immediately after the update takes hold. +For users that manage computer fleets in the thousands, if not hundreds of thousands, +with multiple different operating systems, and multiple different operational needs, +this quickly becomes an issue, as stale policies from years ago may be present, +quickly resulting in the need to recover the policy or fund extensive infrastructure +to track what each policy contains. + +With now three separate serializer/deserializers, maintenance becomes costly. If the +policy avoids the binary format, there is only one required serializer: from the +human-readable form to the data structure ine kernel, saving on code maintenance, +and retaining operability. + +The second issue with a binary format is one of transparency. As IPE controls +access based on the trust of the system's resources, it's policy must also be +trusted to be changed. This is done through signatures, resulting in needing +signing as a process. Signing, as a process, is typically done with a +high security bar, as anything signed can be used to attack integrity +enforcement systems. It is also important that, when signing something, that +the signer is aware of what they are signing. A binary policy can cause +obfuscation of that fact; what signers see is an opaque binary blob. A +plain-text policy, on the other hand, the signers see the actual policy +submitted for signing. + +Boot Policy +~~~~~~~~~~~ + +IPE, if configured appropriately, is able to enforce a policy as soon as a +kernel is booted and usermode starts. That implies some level of storage +of the policy to apply the minute usermode starts. Generally, that storage +can be handled in one of three ways: + + 1. The policy file(s) live on disk and the kernel loads the policy prior + to an code path that would result in an enforcement decision. + 2. The policy file(s) are passed by the bootloader to the kernel, who + parses the policy. + 3. There is a policy file that is compiled into the kernel that is + parsed and enforced on initialization. + +The first option has problems: the kernel reading files from userspace +is typically discouraged and very uncommon in the kernel. + +The second option also has problems: Linux supports a variety of bootloaders +across its entire ecosystem - every bootloader would have to support this +new methodology or there must be an independent source. It would likely +result in more drastic changes to the kernel startup than necessary. + +The third option is the best but it's important to be aware that the policy +will take disk space against the kernel it's compiled in. It's important to +keep this policy generalized enough that userspace can load a new, more +complicated policy, but restrictive enough that it will not overauthorize +and cause security issues. + +The initramfs provides a way that this bootup path can be established. The +kernel starts with a minimal policy, that trusts the initramfs only. Inside +the initramfs, when the real rootfs is mounted, but not yet transferred to, +it deploys and activates a policy that trusts the new root filesystem. +This prevents overauthorization at any step, and keeps the kernel policy +to a minimal size. + +Startup +^^^^^^^ + +Not every system, however starts with an initramfs, so the startup policy +compiled into the kernel will need some flexibility to express how trust +is established for the next phase of the bootup. To this end, if we just +make the compiled-in policy a full IPE policy, it allows system builders +to express the first stage bootup requirements appropriately. + +Updatable, Rebootless Policy +~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +As requirements change over time (vulnerabilities are found in previously +trusted applcations, keys roll, etcetera). Updating a kernel to change the +meet those security goals is not always a suitable option, as updates are not +always risk-free, and blocking a security update leaves systems vulnerable. +This means IPE requires a policy that can be completely updated (allowing +revocations of existing policy) from a source external to the kernel (allowing +policies to be updated without updating the kernel). + +Additionally, since the kernel is stateless between invocations, and reading +policy files off the disk from kernel space is a bad idea(tm), then the +policy updates have to be done rebootlessly. + +To allow an update from an external source, it could be potentially malicious, +so this policy needs to have a way to be identified as trusted. This is +done via a signature chained to a trust source in the kernel. Arbitrarily, +this is the ``SYSTEM_TRUSTED_KEYRING``, a keyring that is initially +populated at kernel compile-time, as this matches the expectation that the +author of the compiled-in policy described above is the same entity that can +deploy policy updates. + +Anti-Rollback / Anti-Replay +~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Over time, vulnerabilities are found and trusted resources may not be +trusted anymore. IPE's policy has no exception to this. There can be +instances where a mistaken policy author deploys an insecure policy, +before correcting it with a secure policy. + +Assuming that as soon as the insecure policy is signed, and an attacker +acquires the insecure policy, IPE needs a way to prevent rollback +from the secure policy update to the insecure policy update. + +Initially, IPE's policy can have a policy_version that states the +minimum required version across all policies that can be active on +the system. This will prevent rollback while the system is live. + +.. WARNING:: + + However, since the kernel is stateless across boots, this policy + version will be reset to 0.0.0 on the next boot. System builders + need to be aware of this, and ensure the new secure policies are + deployed ASAP after a boot to ensure that the window of + opportunity is minimal for an attacker to deploy the insecure policy. + +Implicit Actions: +~~~~~~~~~~~~~~~~~ + +The issue of impicit actions only becomes visible when you consider +a mixed level of security bars across multiple operations in a system. +For example, consider a system that has strong integrity guarantees +over both the executable code, and specific *data files* on the system, +that were critical to its function. In this system, three types of policies +are possible: + + 1. A policy in which failure to match any rules in the policy results + in the action being denied. + 2. A policy in which failure to match any rules in the policy results + in the action being allowed. + 3. A policy in which the action taken when no rules are matched is + specified by the policy author. + +The first option could make a policy like this:: + + op=EXECUTE integrity_verified=YES action=DENY + +In the example system, this works well for the executables, as all +executables should have integrity guarantees, without exception. The +issue becomes with the second requirement about specific data files. +This would result in a policy like this (assuming each line is +evaluated in order):: + + op=EXECUTE integrity_verified=YES action=DENY + + op=READ integrity_verified=NO label=critical_t action=DENY + op=READ action=ALLOW + +This is somewhat clear if you read the docs, understand the policy +is executed in order and that the default is a denial; however, the +last line effectively changes that default to an ALLOW. This is +required, because in a realistic system, there are some unverified +reads (imagine appending to a log file). + +The second option, matching no rules results in an allow, is clearer +for the specific data files:: + + op=READ integrity_verified=NO label=critical_t action=DENY + +And, like the first option, falls short with the opposite scenario, +effectively needing to override the default:: + + op=EXECUTE integrity_verified=YES action=ALLOW + op=EXECUTE action=DENY + + op=READ integrity_verified=NO label=critical_t action=DENY + +This leaves the third option. Instead of making users be clever +and override the default with an empty rule, force the end-user +to consider what the appropriate default should be for their +scenario and explicitly state it:: + + DEFAULT op=EXECUTE action=DENY + op=EXECUTE integrity_verified=YES action=ALLOW + + DEFAULT op=READ action=ALLOW + op=READ integrity_verified=NO label=critical_t action=DENY + +Policy Debugging: +~~~~~~~~~~~~~~~~~ + +When developing a policy, it is useful to know what line of the policy +is being violated to reduce debugging costs; narrowing the scope of the +investigation to the exact line that resulted in the action. Some integrity +policy systems do not provide this information, instead providing the +information that was used in the evaluation. This then requires a correlation +with the policy to evaluate what went wrong. + +Instead, IPE just emits the rule that was matched. This limits the scope +of the investigation to the exact policy line (in the case of a specific +rule), or the section (in the case of a DEFAULT). This decreases iteration +and investigation times when policy failures are observed while evaluating +policies. + +IPE's policy engine is also designed in a way that it makes it obvious to +a human of how to investigate a policy failure. Each line is evaluated in +the sequence that is written, so the algorithm is very simple to follow +for humans to recreate the steps and could have caused the failure. In other +surveyed systems, optimizations occur (sorting rules, for instance) when loading +the policy. In those systems, it requires multiple steps to debug, and the +algorithm may not always be clear to the end-user without reading the code first. + +Simplified Policy: +~~~~~~~~~~~~~~~~~~ + +Finally, IPE's policy is designed for sysadmins, not kernel developers. Instead +of covering individual LSM hooks (or syscalls), IPE covers operations. This means +instead of sysadmins needing to know that the syscalls ``mmap``, ``mprotect``, +``execve``, and ``uselib`` must have rules protecting them, they must simple know +that they want to restrict code execution. This limits the amount of bypasses that +could occur due to a lack of knowledge of the underlying system; whereas the +maintainers of IPE, being kernel developers can make the correct choice to determine +whether something maps to these operations, and under what conditions. + +Implementation Notes +-------------------- + +Anonymous Memory +~~~~~~~~~~~~~~~~ + +Anonymous memory isn't treated any differently from any other access in IPE. +When anonymous memory is mapped with ``+X``, it still comes into the ``file_mmap`` +or ``file_mprotect`` hook, but with a ``NULL`` file object. This is submitted to +the evaluation, like any other file, however, all current trust mechanisms will +return false as there is nothing to evaluate. This means anonymous memory +execution is subject to whatever the ``DEFAULT`` is for ``EXECUTE``. + +.. WARNING:: + + This also occurs with the ``kernel_load_data`` hook, which is used by signed + and compressed kernel modules. Using signed and compressed kernel modules with + IPE will always result in the ``DEFAULT`` action for ``KMODULE``. + +Securityfs Interface +~~~~~~~~~~~~~~~~~~~~ + +The per-policy securityfs tree is somewhat unique. For example, for +a standard securityfs policy tree:: + + MyPolicy + |- active + |- raw + |- policy + |- name + |- version + |- update + +The policy is stored in the ``->i_private`` data of the MyPolicy inode, +while each child's ``->i_private``, it stores the MyPolicy inode. This +simplifies policy updates massively, as the alternative designs are to: + + 1. Use d_parent, which has potential issues with flexibility, if there + eventually becomes a subdirectory underneath MyPolicy; as it's unclear + how many levels of ``d_parent`` you have to iterate up to. + + 2. Store the policy data in each inode's ``->i_private``. This has issues + when it comes to updating a policy - every update needs to cascade to + each ``->i_private``, and if it fails, for whatever reason, the + operation has to be reverted on each inode. + +With this implementation, you can solve the flexibility problem of 1, as +now when you create a theoretical subdirectory you just set the +``->i_private`` data appropriately. You also solve the update problem of +two, as you simply update or revert on the one inode that all other inodes +reference. + +Tests +----- + +IPE has KUnit Tests, testing primarily the parser. In addition, IPE has a +python based integration test suits that can test both user interfaces and +enforcement functionalities. diff --git a/MAINTAINERS b/MAINTAINERS index d5b4a6636b0d..969c6a7845ed 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -10276,6 +10276,8 @@ F: security/integrity/ INTEGRITY POLICY ENFORCEMENT (IPE) M: Fan Wu S: Supported +F: Documentation/admin-guide/LSM/ipe.rst +F: Documentation/security/ipe.rst F: scripts/ipe/ F: security/ipe/ -- 2.39.0