From mboxrd@z Thu Jan 1 00:00:00 1970 From: Brendan Higgins Subject: [PATCH v6 15/18] Documentation: kunit: add documentation for KUnit Date: Wed, 3 Jul 2019 17:36:12 -0700 Message-ID: <20190704003615.204860-16-brendanhiggins@google.com> References: <20190704003615.204860-1-brendanhiggins@google.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <20190704003615.204860-1-brendanhiggins@google.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: frowand.list@gmail.com, gregkh@linuxfoundation.org, jpoimboe@redhat.com, keescook@google.com, kieran.bingham@ideasonboard.com, mcgrof@kernel.org, peterz@infradead.org, robh@kernel.org, sboyd@kernel.org, shuah@kernel.org, tytso@mit.edu, yamada.masahiro@socionext.com, Jonathan Corbet Cc: pmladek@suse.com, linux-doc@vger.kernel.org, amir73il@gmail.com, Brendan Higgins , dri-devel@lists.freedesktop.org, Alexander.Levin@microsoft.com, linux-kselftest@vger.kernel.org, linux-nvdimm@lists.01.org, khilman@baylibre.com, knut.omang@oracle.com, Felix Guo , wfg@linux.intel.com, joel@jms.id.au, rientjes@google.com, jdike@addtoit.com, dan.carpenter@oracle.com, devicetree@vger.kernel.org, linux-kbuild@vger.kernel.org, Tim.Bird@sony.com, linux-um@lists.infradead.org, rostedt@goodmis.org, julia.lawall@lip6.fr, kunit-dev@googlegroups.com, richard@nod.at, rdunlap@infradead.org, linux-kernel@vger.kernel.org, mpe@ellerman.id.au, linux-fsdevel@vger.kernel.org, logang@deltatee.com List-Id: linux-nvdimm@lists.01.org QWRkIGRvY3VtZW50YXRpb24gZm9yIEtVbml0LCB0aGUgTGludXgga2VybmVsIHVuaXQgdGVzdGlu ZyBmcmFtZXdvcmsuCi0gQWRkIGludHJvIGFuZCB1c2FnZSBndWlkZSBmb3IgS1VuaXQKLSBBZGQg QVBJIHJlZmVyZW5jZQoKU2lnbmVkLW9mZi1ieTogRmVsaXggR3VvIDxmZWxpeGd1b3hpdXBpbmdA Z21haWwuY29tPgpTaWduZWQtb2ZmLWJ5OiBCcmVuZGFuIEhpZ2dpbnMgPGJyZW5kYW5oaWdnaW5z QGdvb2dsZS5jb20+ClJldmlld2VkLWJ5OiBHcmVnIEtyb2FoLUhhcnRtYW4gPGdyZWdraEBsaW51 eGZvdW5kYXRpb24ub3JnPgpSZXZpZXdlZC1ieTogTG9nYW4gR3VudGhvcnBlIDxsb2dhbmdAZGVs dGF0ZWUuY29tPgotLS0KQ2hhbmdlcyBTaW5jZSBMYXN0IFJldmlzaW9uOgotIEZpeGVkIGEgYnJv a2VuIGV4YW1wbGUgb2YgaG93IHRvIHVzZSBrdW5pdF90b29sLiAtIFBvaW50ZWQgb3V0IGJ5IFRl ZAotLS0KIERvY3VtZW50YXRpb24vZGV2LXRvb2xzL2luZGV4LnJzdCAgICAgICAgICAgfCAgIDEg KwogRG9jdW1lbnRhdGlvbi9kZXYtdG9vbHMva3VuaXQvYXBpL2luZGV4LnJzdCB8ICAxNiArCiBE b2N1bWVudGF0aW9uL2Rldi10b29scy9rdW5pdC9hcGkvdGVzdC5yc3QgIHwgIDE0ICsKIERvY3Vt ZW50YXRpb24vZGV2LXRvb2xzL2t1bml0L2ZhcS5yc3QgICAgICAgfCAgNjIgKysrCiBEb2N1bWVu dGF0aW9uL2Rldi10b29scy9rdW5pdC9pbmRleC5yc3QgICAgIHwgIDc5ICsrKwogRG9jdW1lbnRh dGlvbi9kZXYtdG9vbHMva3VuaXQvc3RhcnQucnN0ICAgICB8IDE4MCArKysrKysKIERvY3VtZW50 YXRpb24vZGV2LXRvb2xzL2t1bml0L3VzYWdlLnJzdCAgICAgfCA1NzUgKysrKysrKysrKysrKysr KysrKysKIDcgZmlsZXMgY2hhbmdlZCwgOTI3IGluc2VydGlvbnMoKykKIGNyZWF0ZSBtb2RlIDEw MDY0NCBEb2N1bWVudGF0aW9uL2Rldi10b29scy9rdW5pdC9hcGkvaW5kZXgucnN0CiBjcmVhdGUg bW9kZSAxMDA2NDQgRG9jdW1lbnRhdGlvbi9kZXYtdG9vbHMva3VuaXQvYXBpL3Rlc3QucnN0CiBj cmVhdGUgbW9kZSAxMDA2NDQgRG9jdW1lbnRhdGlvbi9kZXYtdG9vbHMva3VuaXQvZmFxLnJzdAog Y3JlYXRlIG1vZGUgMTAwNjQ0IERvY3VtZW50YXRpb24vZGV2LXRvb2xzL2t1bml0L2luZGV4LnJz dAogY3JlYXRlIG1vZGUgMTAwNjQ0IERvY3VtZW50YXRpb24vZGV2LXRvb2xzL2t1bml0L3N0YXJ0 LnJzdAogY3JlYXRlIG1vZGUgMTAwNjQ0IERvY3VtZW50YXRpb24vZGV2LXRvb2xzL2t1bml0L3Vz YWdlLnJzdAoKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZGV2LXRvb2xzL2luZGV4LnJzdCBi L0RvY3VtZW50YXRpb24vZGV2LXRvb2xzL2luZGV4LnJzdAppbmRleCBiMDUyMmE0ZGQxMDczLi4w OWRlZTEwZDI1OTI4IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2Rldi10b29scy9pbmRleC5y c3QKKysrIGIvRG9jdW1lbnRhdGlvbi9kZXYtdG9vbHMvaW5kZXgucnN0CkBAIC0yNCw2ICsyNCw3 IEBAIHdob2xlOyBwYXRjaGVzIHdlbGNvbWUhCiAgICBnZGIta2VybmVsLWRlYnVnZ2luZwogICAg a2dkYgogICAga3NlbGZ0ZXN0CisgICBrdW5pdC9pbmRleAogCiAKIC4uIG9ubHk6OiAgc3VicHJv amVjdCBhbmQgaHRtbApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kZXYtdG9vbHMva3VuaXQv YXBpL2luZGV4LnJzdCBiL0RvY3VtZW50YXRpb24vZGV2LXRvb2xzL2t1bml0L2FwaS9pbmRleC5y c3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMC4uOWI5YmZmZTVkNDFh MAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZGV2LXRvb2xzL2t1bml0L2FwaS9p bmRleC5yc3QKQEAgLTAsMCArMSwxNiBAQAorLi4gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQ TC0yLjAKKworPT09PT09PT09PT09PQorQVBJIFJlZmVyZW5jZQorPT09PT09PT09PT09PQorLi4g dG9jdHJlZTo6CisKKwl0ZXN0CisKK1RoaXMgc2VjdGlvbiBkb2N1bWVudHMgdGhlIEtVbml0IGtl cm5lbCB0ZXN0aW5nIEFQSS4gSXQgaXMgZGl2aWRlZCBpbnRvIHRoZQorZm9sbG93aW5nIHNlY3Rp b25zOgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gPT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorOmRvYzpgdGVzdGAgICAgICAgICAgICAg ICAgICAgICAgIGRvY3VtZW50cyBhbGwgb2YgdGhlIHN0YW5kYXJkIHRlc3RpbmcgQVBJCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhjbHVkaW5nIG1vY2tpbmcgb3IgbW9ja2lu ZyByZWxhdGVkIGZlYXR1cmVzLgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ID09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KZGlmZiAtLWdpdCBh L0RvY3VtZW50YXRpb24vZGV2LXRvb2xzL2t1bml0L2FwaS90ZXN0LnJzdCBiL0RvY3VtZW50YXRp b24vZGV2LXRvb2xzL2t1bml0L2FwaS90ZXN0LnJzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl eCAwMDAwMDAwMDAwMDAwLi5kMGNlMTliMWUxMTg1Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1l bnRhdGlvbi9kZXYtdG9vbHMva3VuaXQvYXBpL3Rlc3QucnN0CkBAIC0wLDAgKzEsMTQgQEAKKy4u IFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCisKKz09PT09PT09CitUZXN0IEFQSQor PT09PT09PT0KKworVGhpcyBmaWxlIGRvY3VtZW50cyBhbGwgb2YgdGhlIHN0YW5kYXJkIHRlc3Rp bmcgQVBJIGV4Y2x1ZGluZyBtb2NraW5nIG9yIG1vY2tpbmcKK3JlbGF0ZWQgZmVhdHVyZXMuCisK Ky4uIGtlcm5lbC1kb2M6OiBpbmNsdWRlL2t1bml0L3Rlc3QuaAorICAgOmludGVybmFsOgorCisu LiBrZXJuZWwtZG9jOjogaW5jbHVkZS9rdW5pdC9rdW5pdC1zdHJlYW0uaAorICAgOmludGVybmFs OgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kZXYtdG9vbHMva3VuaXQvZmFxLnJzdCBiL0Rv Y3VtZW50YXRpb24vZGV2LXRvb2xzL2t1bml0L2ZhcS5yc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQK aW5kZXggMDAwMDAwMDAwMDAwMC4uYmYyMDk1MTEyZDg5OQotLS0gL2Rldi9udWxsCisrKyBiL0Rv Y3VtZW50YXRpb24vZGV2LXRvb2xzL2t1bml0L2ZhcS5yc3QKQEAgLTAsMCArMSw2MiBAQAorLi4g U1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKKworPT09PT09PT09PT09PT09PT09PT09 PT09PT0KK0ZyZXF1ZW50bHkgQXNrZWQgUXVlc3Rpb25zCis9PT09PT09PT09PT09PT09PT09PT09 PT09PQorCitIb3cgaXMgdGhpcyBkaWZmZXJlbnQgZnJvbSBBdXRvdGVzdCwga3NlbGZ0ZXN0LCBl dGM/Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 CitLVW5pdCBpcyBhIHVuaXQgdGVzdGluZyBmcmFtZXdvcmsuIEF1dG90ZXN0LCBrc2VsZnRlc3Qg KGFuZCBzb21lIG90aGVycykgYXJlCitub3QuCisKK0EgYHVuaXQgdGVzdCA8aHR0cHM6Ly9tYXJ0 aW5mb3dsZXIuY29tL2JsaWtpL1VuaXRUZXN0Lmh0bWw+YF8gaXMgc3VwcG9zZWQgdG8KK3Rlc3Qg YSBzaW5nbGUgdW5pdCBvZiBjb2RlIGluIGlzb2xhdGlvbiwgaGVuY2UgdGhlIG5hbWUuIEEgdW5p dCB0ZXN0IHNob3VsZCBiZQordGhlIGZpbmVzdCBncmFudWxhcml0eSBvZiB0ZXN0aW5nIGFuZCBh cyBzdWNoIHNob3VsZCBhbGxvdyBhbGwgcG9zc2libGUgY29kZQorcGF0aHMgdG8gYmUgdGVzdGVk IGluIHRoZSBjb2RlIHVuZGVyIHRlc3Q7IHRoaXMgaXMgb25seSBwb3NzaWJsZSBpZiB0aGUgY29k ZQordW5kZXIgdGVzdCBpcyB2ZXJ5IHNtYWxsIGFuZCBkb2VzIG5vdCBoYXZlIGFueSBleHRlcm5h bCBkZXBlbmRlbmNpZXMgb3V0c2lkZSBvZgordGhlIHRlc3QncyBjb250cm9sIGxpa2UgaGFyZHdh cmUuCisKK1RoZXJlIGFyZSBubyB0ZXN0aW5nIGZyYW1ld29ya3MgY3VycmVudGx5IGF2YWlsYWJs ZSBmb3IgdGhlIGtlcm5lbCB0aGF0IGRvIG5vdAorcmVxdWlyZSBpbnN0YWxsaW5nIHRoZSBrZXJu ZWwgb24gYSB0ZXN0IG1hY2hpbmUgb3IgaW4gYSBWTSBhbmQgYWxsIHJlcXVpcmUKK3Rlc3RzIHRv IGJlIHdyaXR0ZW4gaW4gdXNlcnNwYWNlIGFuZCBydW4gb24gdGhlIGtlcm5lbCB1bmRlciB0ZXN0 OyB0aGlzIGlzIHRydWUKK2ZvciBBdXRvdGVzdCwga3NlbGZ0ZXN0LCBhbmQgc29tZSBvdGhlcnMs IGRpc3F1YWxpZnlpbmcgYW55IG9mIHRoZW0gZnJvbSBiZWluZworY29uc2lkZXJlZCB1bml0IHRl c3RpbmcgZnJhbWV3b3Jrcy4KKworRG9lcyBLVW5pdCBzdXBwb3J0IHJ1bm5pbmcgb24gYXJjaGl0 ZWN0dXJlcyBvdGhlciB0aGFuIFVNTD8KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK1llcywgd2VsbCwgbW9zdGx5LgorCitGb3Ig dGhlIG1vc3QgcGFydCwgdGhlIEtVbml0IGNvcmUgZnJhbWV3b3JrICh3aGF0IHlvdSB1c2UgdG8g d3JpdGUgdGhlIHRlc3RzKQorY2FuIGNvbXBpbGUgdG8gYW55IGFyY2hpdGVjdHVyZTsgaXQgY29t cGlsZXMgbGlrZSBqdXN0IGFub3RoZXIgcGFydCBvZiB0aGUKK2tlcm5lbCBhbmQgcnVucyB3aGVu IHRoZSBrZXJuZWwgYm9vdHMuIEhvd2V2ZXIsIHRoZXJlIGlzIHNvbWUgaW5mcmFzdHJ1Y3R1cmUs CitsaWtlIHRoZSBLVW5pdCBXcmFwcGVyIChgYHRvb2xzL3Rlc3Rpbmcva3VuaXQva3VuaXQucHlg YCkgdGhhdCBkb2VzIG5vdCBzdXBwb3J0CitvdGhlciBhcmNoaXRlY3R1cmVzLgorCitJbiBzaG9y dCwgdGhpcyBtZWFucyB0aGF0LCB5ZXMsIHlvdSBjYW4gcnVuIEtVbml0IG9uIG90aGVyIGFyY2hp dGVjdHVyZXMsIGJ1dAoraXQgbWlnaHQgcmVxdWlyZSBtb3JlIHdvcmsgdGhhbiB1c2luZyBLVW5p dCBvbiBVTUwuCisKK0ZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgOnJlZjpga3VuaXQtb24tbm9u LXVtbGAuCisKK1doYXQgaXMgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiBhIHVuaXQgdGVzdCBhbmQg dGhlc2Ugb3RoZXIga2luZHMgb2YgdGVzdHM/Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorTW9zdCBleGlz dGluZyB0ZXN0cyBmb3IgdGhlIExpbnV4IGtlcm5lbCB3b3VsZCBiZSBjYXRlZ29yaXplZCBhcyBh biBpbnRlZ3JhdGlvbgordGVzdCwgb3IgYW4gZW5kLXRvLWVuZCB0ZXN0LgorCistIEEgdW5pdCB0 ZXN0IGlzIHN1cHBvc2VkIHRvIHRlc3QgYSBzaW5nbGUgdW5pdCBvZiBjb2RlIGluIGlzb2xhdGlv biwgaGVuY2UgdGhlCisgIG5hbWUuIEEgdW5pdCB0ZXN0IHNob3VsZCBiZSB0aGUgZmluZXN0IGdy YW51bGFyaXR5IG9mIHRlc3RpbmcgYW5kIGFzIHN1Y2gKKyAgc2hvdWxkIGFsbG93IGFsbCBwb3Nz aWJsZSBjb2RlIHBhdGhzIHRvIGJlIHRlc3RlZCBpbiB0aGUgY29kZSB1bmRlciB0ZXN0OyB0aGlz CisgIGlzIG9ubHkgcG9zc2libGUgaWYgdGhlIGNvZGUgdW5kZXIgdGVzdCBpcyB2ZXJ5IHNtYWxs IGFuZCBkb2VzIG5vdCBoYXZlIGFueQorICBleHRlcm5hbCBkZXBlbmRlbmNpZXMgb3V0c2lkZSBv ZiB0aGUgdGVzdCdzIGNvbnRyb2wgbGlrZSBoYXJkd2FyZS4KKy0gQW4gaW50ZWdyYXRpb24gdGVz dCB0ZXN0cyB0aGUgaW50ZXJhY3Rpb24gYmV0d2VlbiBhIG1pbmltYWwgc2V0IG9mIGNvbXBvbmVu dHMsCisgIHVzdWFsbHkganVzdCB0d28gb3IgdGhyZWUuIEZvciBleGFtcGxlLCBzb21lb25lIG1p Z2h0IHdyaXRlIGFuIGludGVncmF0aW9uCisgIHRlc3QgdG8gdGVzdCB0aGUgaW50ZXJhY3Rpb24g YmV0d2VlbiBhIGRyaXZlciBhbmQgYSBwaWVjZSBvZiBoYXJkd2FyZSwgb3IgdG8KKyAgdGVzdCB0 aGUgaW50ZXJhY3Rpb24gYmV0d2VlbiB0aGUgdXNlcnNwYWNlIGxpYnJhcmllcyB0aGUga2VybmVs IHByb3ZpZGVzIGFuZAorICB0aGUga2VybmVsIGl0c2VsZjsgaG93ZXZlciwgb25lIG9mIHRoZXNl IHRlc3RzIHdvdWxkIHByb2JhYmx5IG5vdCB0ZXN0IHRoZQorICBlbnRpcmUga2VybmVsIGFsb25n IHdpdGggaGFyZHdhcmUgaW50ZXJhY3Rpb25zIGFuZCBpbnRlcmFjdGlvbnMgd2l0aCB0aGUKKyAg dXNlcnNwYWNlLgorLSBBbiBlbmQtdG8tZW5kIHRlc3QgdXN1YWxseSB0ZXN0cyB0aGUgZW50aXJl IHN5c3RlbSBmcm9tIHRoZSBwZXJzcGVjdGl2ZSBvZiB0aGUKKyAgY29kZSB1bmRlciB0ZXN0LiBG b3IgZXhhbXBsZSwgc29tZW9uZSBtaWdodCB3cml0ZSBhbiBlbmQtdG8tZW5kIHRlc3QgZm9yIHRo ZQorICBrZXJuZWwgYnkgaW5zdGFsbGluZyBhIHByb2R1Y3Rpb24gY29uZmlndXJhdGlvbiBvZiB0 aGUga2VybmVsIG9uIHByb2R1Y3Rpb24KKyAgaGFyZHdhcmUgd2l0aCBhIHByb2R1Y3Rpb24gdXNl cnNwYWNlIGFuZCB0aGVuIHRyeWluZyB0byBleGVyY2lzZSBzb21lIGJlaGF2aW9yCisgIHRoYXQg ZGVwZW5kcyBvbiBpbnRlcmFjdGlvbnMgYmV0d2VlbiB0aGUgaGFyZHdhcmUsIHRoZSBrZXJuZWws IGFuZCB1c2Vyc3BhY2UuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2Rldi10b29scy9rdW5p dC9pbmRleC5yc3QgYi9Eb2N1bWVudGF0aW9uL2Rldi10b29scy9rdW5pdC9pbmRleC5yc3QKbmV3 IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMC4uYTMxN2FiNDViZmUyZAotLS0g L2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZGV2LXRvb2xzL2t1bml0L2luZGV4LnJzdApA QCAtMCwwICsxLDc5IEBACisuLiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAorCis9 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorS1VuaXQgLSBVbml0IFRl c3RpbmcgZm9yIHRoZSBMaW51eCBLZXJuZWwKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09CisKKy4uIHRvY3RyZWU6OgorCTptYXhkZXB0aDogMgorCisJc3RhcnQKKwl1 c2FnZQorCWFwaS9pbmRleAorCWZhcQorCitXaGF0IGlzIEtVbml0PworPT09PT09PT09PT09PT0K KworS1VuaXQgaXMgYSBsaWdodHdlaWdodCB1bml0IHRlc3RpbmcgYW5kIG1vY2tpbmcgZnJhbWV3 b3JrIGZvciB0aGUgTGludXgga2VybmVsLgorVGhlc2UgdGVzdHMgYXJlIGFibGUgdG8gYmUgcnVu IGxvY2FsbHkgb24gYSBkZXZlbG9wZXIncyB3b3Jrc3RhdGlvbiB3aXRob3V0IGEgVk0KK29yIHNw ZWNpYWwgaGFyZHdhcmUuCisKK0tVbml0IGlzIGhlYXZpbHkgaW5zcGlyZWQgYnkgSlVuaXQsIFB5 dGhvbidzIHVuaXR0ZXN0Lm1vY2ssIGFuZAorR29vZ2xldGVzdC9Hb29nbGVtb2NrIGZvciBDKysu IEtVbml0IHByb3ZpZGVzIGZhY2lsaXRpZXMgZm9yIGRlZmluaW5nIHVuaXQgdGVzdAorY2FzZXMs IGdyb3VwaW5nIHJlbGF0ZWQgdGVzdCBjYXNlcyBpbnRvIHRlc3Qgc3VpdGVzLCBwcm92aWRpbmcg Y29tbW9uCitpbmZyYXN0cnVjdHVyZSBmb3IgcnVubmluZyB0ZXN0cywgYW5kIG11Y2ggbW9yZS4K KworR2V0IHN0YXJ0ZWQgbm93OiA6ZG9jOmBzdGFydGAKKworV2h5IEtVbml0PworPT09PT09PT09 PQorCitBIHVuaXQgdGVzdCBpcyBzdXBwb3NlZCB0byB0ZXN0IGEgc2luZ2xlIHVuaXQgb2YgY29k ZSBpbiBpc29sYXRpb24sIGhlbmNlIHRoZQorbmFtZS4gQSB1bml0IHRlc3Qgc2hvdWxkIGJlIHRo ZSBmaW5lc3QgZ3JhbnVsYXJpdHkgb2YgdGVzdGluZyBhbmQgYXMgc3VjaCBzaG91bGQKK2FsbG93 IGFsbCBwb3NzaWJsZSBjb2RlIHBhdGhzIHRvIGJlIHRlc3RlZCBpbiB0aGUgY29kZSB1bmRlciB0 ZXN0OyB0aGlzIGlzIG9ubHkKK3Bvc3NpYmxlIGlmIHRoZSBjb2RlIHVuZGVyIHRlc3QgaXMgdmVy eSBzbWFsbCBhbmQgZG9lcyBub3QgaGF2ZSBhbnkgZXh0ZXJuYWwKK2RlcGVuZGVuY2llcyBvdXRz aWRlIG9mIHRoZSB0ZXN0J3MgY29udHJvbCBsaWtlIGhhcmR3YXJlLgorCitPdXRzaWRlIG9mIEtV bml0LCB0aGVyZSBhcmUgbm8gdGVzdGluZyBmcmFtZXdvcmtzIGN1cnJlbnRseQorYXZhaWxhYmxl IGZvciB0aGUga2VybmVsIHRoYXQgZG8gbm90IHJlcXVpcmUgaW5zdGFsbGluZyB0aGUga2VybmVs IG9uIGEgdGVzdAorbWFjaGluZSBvciBpbiBhIFZNIGFuZCBhbGwgcmVxdWlyZSB0ZXN0cyB0byBi ZSB3cml0dGVuIGluIHVzZXJzcGFjZSBydW5uaW5nIG9uCit0aGUga2VybmVsOyB0aGlzIGlzIHRy dWUgZm9yIEF1dG90ZXN0LCBhbmQga3NlbGZ0ZXN0LCBkaXNxdWFsaWZ5aW5nCithbnkgb2YgdGhl bSBmcm9tIGJlaW5nIGNvbnNpZGVyZWQgdW5pdCB0ZXN0aW5nIGZyYW1ld29ya3MuCisKK0tVbml0 IGFkZHJlc3NlcyB0aGUgcHJvYmxlbSBvZiBiZWluZyBhYmxlIHRvIHJ1biB0ZXN0cyB3aXRob3V0 IG5lZWRpbmcgYSB2aXJ0dWFsCittYWNoaW5lIG9yIGFjdHVhbCBoYXJkd2FyZSB3aXRoIFVzZXIg TW9kZSBMaW51eC4gVXNlciBNb2RlIExpbnV4IGlzIGEgTGludXgKK2FyY2hpdGVjdHVyZSwgbGlr ZSBBUk0gb3IgeDg2OyBob3dldmVyLCB1bmxpa2Ugb3RoZXIgYXJjaGl0ZWN0dXJlcyBpdCBjb21w aWxlcwordG8gYSBzdGFuZGFsb25lIHByb2dyYW0gdGhhdCBjYW4gYmUgcnVuIGxpa2UgYW55IG90 aGVyIHByb2dyYW0gZGlyZWN0bHkgaW5zaWRlCitvZiBhIGhvc3Qgb3BlcmF0aW5nIHN5c3RlbTsg dG8gYmUgY2xlYXIsIGl0IGRvZXMgbm90IHJlcXVpcmUgYW55IHZpcnR1YWxpemF0aW9uCitzdXBw b3J0OyBpdCBpcyBqdXN0IGEgcmVndWxhciBwcm9ncmFtLgorCitLVW5pdCBpcyBmYXN0LiBFeGNs dWRpbmcgYnVpbGQgdGltZSwgZnJvbSBpbnZvY2F0aW9uIHRvIGNvbXBsZXRpb24gS1VuaXQgY2Fu IHJ1bgorc2V2ZXJhbCBkb3plbiB0ZXN0cyBpbiBvbmx5IDEwIHRvIDIwIHNlY29uZHM7IHRoaXMg bWlnaHQgbm90IHNvdW5kIGxpa2UgYSBiaWcKK2RlYWwgdG8gc29tZSBwZW9wbGUsIGJ1dCBoYXZp bmcgc3VjaCBmYXN0IGFuZCBlYXN5IHRvIHJ1biB0ZXN0cyBmdW5kYW1lbnRhbGx5CitjaGFuZ2Vz IHRoZSB3YXkgeW91IGdvIGFib3V0IHRlc3RpbmcgYW5kIGV2ZW4gd3JpdGluZyBjb2RlIGluIHRo ZSBmaXJzdCBwbGFjZS4KK0xpbnVzIGhpbXNlbGYgc2FpZCBpbiBoaXMgYGdpdCB0YWxrIGF0IEdv b2dsZQorPGh0dHBzOi8vZ2lzdC5naXRodWIuY29tL2xvcm4vMTI3MjY4Ni9yZXZpc2lvbnMjZGlm Zi01M2M2NTU3MjEyNzg1NWYxYjAwM2RiNDA2NGE5NDU3M1I4NzQ+YF86CisKKwkiLi4uIGEgbG90 IG9mIHBlb3BsZSBzZWVtIHRvIHRoaW5rIHRoYXQgcGVyZm9ybWFuY2UgaXMgYWJvdXQgZG9pbmcg dGhlCisJc2FtZSB0aGluZywganVzdCBkb2luZyBpdCBmYXN0ZXIsIGFuZCB0aGF0IGlzIG5vdCB0 cnVlLiBUaGF0IGlzIG5vdCB3aGF0CisJcGVyZm9ybWFuY2UgaXMgYWxsIGFib3V0LiBJZiB5b3Ug Y2FuIGRvIHNvbWV0aGluZyByZWFsbHkgZmFzdCwgcmVhbGx5CisJd2VsbCwgcGVvcGxlIHdpbGwg c3RhcnQgdXNpbmcgaXQgZGlmZmVyZW50bHkuIgorCitJbiB0aGlzIGNvbnRleHQgTGludXMgd2Fz IHRhbGtpbmcgYWJvdXQgYnJhbmNoaW5nIGFuZCBtZXJnaW5nLAorYnV0IHRoaXMgcG9pbnQgYWxz byBhcHBsaWVzIHRvIHRlc3RpbmcuIElmIHlvdXIgdGVzdHMgYXJlIHNsb3csIHVucmVsaWFibGUs IGFyZQorZGlmZmljdWx0IHRvIHdyaXRlLCBhbmQgcmVxdWlyZSBhIHNwZWNpYWwgc2V0dXAgb3Ig c3BlY2lhbCBoYXJkd2FyZSB0byBydW4sCit0aGVuIHlvdSB3YWl0IGEgbG90IGxvbmdlciB0byB3 cml0ZSB0ZXN0cywgYW5kIHlvdSB3YWl0IGEgbG90IGxvbmdlciB0byBydW4KK3Rlc3RzOyB0aGlz IG1lYW5zIHRoYXQgdGVzdHMgYXJlIGxpa2VseSB0byBicmVhaywgdW5saWtlbHkgdG8gdGVzdCBh IGxvdCBvZgordGhpbmdzLCBhbmQgYXJlIHVubGlrZWx5IHRvIGJlIHJlcnVuIG9uY2UgdGhleSBw YXNzLiBJZiB5b3VyIHRlc3RzIGFyZSByZWFsbHkKK2Zhc3QsIHlvdSBydW4gdGhlbSBhbGwgdGhl IHRpbWUsIGV2ZXJ5IHRpbWUgeW91IG1ha2UgYSBjaGFuZ2UsIGFuZCBldmVyeSB0aW1lCitzb21l b25lIHNlbmRzIHlvdSBzb21lIGNvZGUuIFdoeSB0cnVzdCB0aGF0IHNvbWVvbmUgcmFuIGFsbCB0 aGVpciB0ZXN0cworY29ycmVjdGx5IG9uIGV2ZXJ5IGNoYW5nZSB3aGVuIHlvdSBjYW4ganVzdCBy dW4gdGhlbSB5b3Vyc2VsZiBpbiBsZXNzIHRpbWUgdGhhbgoraXQgdGFrZXMgdG8gcmVhZCBoaXMg LyBoZXIgdGVzdCBsb2c/CisKK0hvdyBkbyBJIHVzZSBpdD8KKz09PT09PT09PT09PT09PT0KKwor KiAgIDpkb2M6YHN0YXJ0YCAtIGZvciBuZXcgdXNlcnMgb2YgS1VuaXQKKyogICA6ZG9jOmB1c2Fn ZWAgLSBmb3IgYSBtb3JlIGRldGFpbGVkIGV4cGxhbmF0aW9uIG9mIEtVbml0IGZlYXR1cmVzCisq ICAgOmRvYzpgYXBpL2luZGV4YCAtIGZvciB0aGUgbGlzdCBvZiBLVW5pdCBBUElzIHVzZWQgZm9y IHRlc3RpbmcKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZGV2LXRvb2xzL2t1bml0L3N0YXJ0 LnJzdCBiL0RvY3VtZW50YXRpb24vZGV2LXRvb2xzL2t1bml0L3N0YXJ0LnJzdApuZXcgZmlsZSBt b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwLi42ZGMyMjllNDZiYjM0Ci0tLSAvZGV2L251 bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9kZXYtdG9vbHMva3VuaXQvc3RhcnQucnN0CkBAIC0wLDAg KzEsMTgwIEBACisuLiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAorCis9PT09PT09 PT09PT09PT0KK0dldHRpbmcgU3RhcnRlZAorPT09PT09PT09PT09PT09CisKK0luc3RhbGxpbmcg ZGVwZW5kZW5jaWVzCis9PT09PT09PT09PT09PT09PT09PT09PQorS1VuaXQgaGFzIHRoZSBzYW1l IGRlcGVuZGVuY2llcyBhcyB0aGUgTGludXgga2VybmVsLiBBcyBsb25nIGFzIHlvdSBjYW4gYnVp bGQKK3RoZSBrZXJuZWwsIHlvdSBjYW4gcnVuIEtVbml0LgorCitLVW5pdCBXcmFwcGVyCis9PT09 PT09PT09PT09CitJbmNsdWRlZCB3aXRoIEtVbml0IGlzIGEgc2ltcGxlIFB5dGhvbiB3cmFwcGVy IHRoYXQgaGVscHMgZm9ybWF0IHRoZSBvdXRwdXQgdG8KK2Vhc2lseSB1c2UgYW5kIHJlYWQgS1Vu aXQgb3V0cHV0LiBJdCBoYW5kbGVzIGJ1aWxkaW5nIGFuZCBydW5uaW5nIHRoZSBrZXJuZWwsIGFz Cit3ZWxsIGFzIGZvcm1hdHRpbmcgdGhlIG91dHB1dC4KKworVGhlIHdyYXBwZXIgY2FuIGJlIHJ1 biB3aXRoOgorCisuLiBjb2RlLWJsb2NrOjogYmFzaAorCisgICAuL3Rvb2xzL3Rlc3Rpbmcva3Vu aXQva3VuaXQucHkgcnVuCisKK0NyZWF0aW5nIGEga3VuaXRjb25maWcKKz09PT09PT09PT09PT09 PT09PT09PT0KK1RoZSBQeXRob24gc2NyaXB0IGlzIGEgdGhpbiB3cmFwcGVyIGFyb3VuZCBLYnVp bGQgYXMgc3VjaCwgaXQgbmVlZHMgdG8gYmUKK2NvbmZpZ3VyZWQgd2l0aCBhIGBga3VuaXRjb25m aWdgYCBmaWxlLiBUaGlzIGZpbGUgZXNzZW50aWFsbHkgY29udGFpbnMgdGhlCityZWd1bGFyIEtl cm5lbCBjb25maWcsIHdpdGggdGhlIHNwZWNpZmljIHRlc3QgdGFyZ2V0cyBhcyB3ZWxsLgorCisu LiBjb2RlLWJsb2NrOjogYmFzaAorCisJZ2l0IGNsb25lIC1iIG1hc3RlciBodHRwczovL2t1bml0 Lmdvb2dsZXNvdXJjZS5jb20va3VuaXRjb25maWcgJFBBVEhfVE9fS1VOSVRDT05GSUdfUkVQTwor CWNkICRQQVRIX1RPX0xJTlVYX1JFUE8KKwlsbiAtcyAkUEFUSF9UT19LVU5JVF9DT05GSUdfUkVQ Ty9rdW5pdGNvbmZpZyBrdW5pdGNvbmZpZworCitZb3UgbWF5IHdhbnQgdG8gYWRkIGt1bml0Y29u ZmlnIHRvIHlvdXIgbG9jYWwgZ2l0aWdub3JlLgorCitWZXJpZnlpbmcgS1VuaXQgV29ya3MKKy0t LS0tLS0tLS0tLS0tLS0tLS0tLQorCitUbyBtYWtlIHN1cmUgdGhhdCBldmVyeXRoaW5nIGlzIHNl dCB1cCBjb3JyZWN0bHksIHNpbXBseSBpbnZva2UgdGhlIFB5dGhvbgord3JhcHBlciBmcm9tIHlv dXIga2VybmVsIHJlcG86CisKKy4uIGNvZGUtYmxvY2s6OiBiYXNoCisKKwkuL3Rvb2xzL3Rlc3Rp bmcva3VuaXQva3VuaXQucHkKKworLi4gbm90ZTo6CisgICBZb3UgbWF5IHdhbnQgdG8gcnVuIGBg bWFrZSBtcnByb3BlcmBgIGZpcnN0LgorCitJZiBldmVyeXRoaW5nIHdvcmtlZCBjb3JyZWN0bHks IHlvdSBzaG91bGQgc2VlIHRoZSBmb2xsb3dpbmc6CisKKy4uIGNvZGUtYmxvY2s6OiBiYXNoCisK KwlHZW5lcmF0aW5nIC5jb25maWcgLi4uCisJQnVpbGRpbmcgS1VuaXQgS2VybmVsIC4uLgorCVN0 YXJ0aW5nIEtVbml0IEtlcm5lbCAuLi4KKworZm9sbG93ZWQgYnkgYSBsaXN0IG9mIHRlc3RzIHRo YXQgYXJlIHJ1bi4gQWxsIG9mIHRoZW0gc2hvdWxkIGJlIHBhc3NpbmcuCisKKy4uIG5vdGU6Ogor ICAgQmVjYXVzZSBpdCBpcyBidWlsZGluZyBhIGxvdCBvZiBzb3VyY2VzIGZvciB0aGUgZmlyc3Qg dGltZSwgdGhlIGBgQnVpbGRpbmcKKyAgIGt1bml0IGtlcm5lbGBgIHN0ZXAgbWF5IHRha2UgYSB3 aGlsZS4KKworV3JpdGluZyB5b3VyIGZpcnN0IHRlc3QKKz09PT09PT09PT09PT09PT09PT09PT09 CisKK0luIHlvdXIga2VybmVsIHJlcG8gbGV0J3MgYWRkIHNvbWUgY29kZSB0aGF0IHdlIGNhbiB0 ZXN0LiBDcmVhdGUgYSBmaWxlCitgYGRyaXZlcnMvbWlzYy9leGFtcGxlLmhgYCB3aXRoIHRoZSBj b250ZW50czoKKworLi4gY29kZS1ibG9jazo6IGMKKworCWludCBtaXNjX2V4YW1wbGVfYWRkKGlu dCBsZWZ0LCBpbnQgcmlnaHQpOworCitjcmVhdGUgYSBmaWxlIGBgZHJpdmVycy9taXNjL2V4YW1w bGUuY2BgOgorCisuLiBjb2RlLWJsb2NrOjogYworCisJI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+ CisKKwkjaW5jbHVkZSAiZXhhbXBsZS5oIgorCisJaW50IG1pc2NfZXhhbXBsZV9hZGQoaW50IGxl ZnQsIGludCByaWdodCkKKwl7CisJCXJldHVybiBsZWZ0ICsgcmlnaHQ7CisJfQorCitOb3cgYWRk IHRoZSBmb2xsb3dpbmcgbGluZXMgdG8gYGBkcml2ZXJzL21pc2MvS2NvbmZpZ2BgOgorCisuLiBj b2RlLWJsb2NrOjoga2NvbmZpZworCisJY29uZmlnIE1JU0NfRVhBTVBMRQorCQlib29sICJNeSBl eGFtcGxlIgorCithbmQgdGhlIGZvbGxvd2luZyBsaW5lcyB0byBgYGRyaXZlcnMvbWlzYy9NYWtl ZmlsZWBgOgorCisuLiBjb2RlLWJsb2NrOjogbWFrZQorCisJb2JqLSQoQ09ORklHX01JU0NfRVhB TVBMRSkgKz0gZXhhbXBsZS5vCisKK05vdyB3ZSBhcmUgcmVhZHkgdG8gd3JpdGUgdGhlIHRlc3Qu IFRoZSB0ZXN0IHdpbGwgYmUgaW4KK2BgZHJpdmVycy9taXNjL2V4YW1wbGUtdGVzdC5jYGA6CisK Ky4uIGNvZGUtYmxvY2s6OiBjCisKKwkjaW5jbHVkZSA8a3VuaXQvdGVzdC5oPgorCSNpbmNsdWRl ICJleGFtcGxlLmgiCisKKwkvKiBEZWZpbmUgdGhlIHRlc3QgY2FzZXMuICovCisKKwlzdGF0aWMg dm9pZCBtaXNjX2V4YW1wbGVfYWRkX3Rlc3RfYmFzaWMoc3RydWN0IGt1bml0ICp0ZXN0KQorCXsK KwkJS1VOSVRfRVhQRUNUX0VRKHRlc3QsIDEsIG1pc2NfZXhhbXBsZV9hZGQoMSwgMCkpOworCQlL VU5JVF9FWFBFQ1RfRVEodGVzdCwgMiwgbWlzY19leGFtcGxlX2FkZCgxLCAxKSk7CisJCUtVTklU X0VYUEVDVF9FUSh0ZXN0LCAwLCBtaXNjX2V4YW1wbGVfYWRkKC0xLCAxKSk7CisJCUtVTklUX0VY UEVDVF9FUSh0ZXN0LCBJTlRfTUFYLCBtaXNjX2V4YW1wbGVfYWRkKDAsIElOVF9NQVgpKTsKKwkJ S1VOSVRfRVhQRUNUX0VRKHRlc3QsIC0xLCBtaXNjX2V4YW1wbGVfYWRkKElOVF9NQVgsIElOVF9N SU4pKTsKKwl9CisKKwlzdGF0aWMgdm9pZCBtaXNjX2V4YW1wbGVfdGVzdF9mYWlsdXJlKHN0cnVj dCBrdW5pdCAqdGVzdCkKKwl7CisJCUtVTklUX0ZBSUwodGVzdCwgIlRoaXMgdGVzdCBuZXZlciBw YXNzZXMuIik7CisJfQorCisJc3RhdGljIHN0cnVjdCBrdW5pdF9jYXNlIG1pc2NfZXhhbXBsZV90 ZXN0X2Nhc2VzW10gPSB7CisJCUtVTklUX0NBU0UobWlzY19leGFtcGxlX2FkZF90ZXN0X2Jhc2lj KSwKKwkJS1VOSVRfQ0FTRShtaXNjX2V4YW1wbGVfdGVzdF9mYWlsdXJlKSwKKwkJe30KKwl9Owor CisJc3RhdGljIHN0cnVjdCBrdW5pdF9zdWl0ZSBtaXNjX2V4YW1wbGVfdGVzdF9zdWl0ZSA9IHsK KwkJLm5hbWUgPSAibWlzYy1leGFtcGxlIiwKKwkJLnRlc3RfY2FzZXMgPSBtaXNjX2V4YW1wbGVf dGVzdF9jYXNlcywKKwl9OworCWt1bml0X3Rlc3Rfc3VpdGUobWlzY19leGFtcGxlX3Rlc3Rfc3Vp dGUpOworCitOb3cgYWRkIHRoZSBmb2xsb3dpbmcgdG8gYGBkcml2ZXJzL21pc2MvS2NvbmZpZ2Bg OgorCisuLiBjb2RlLWJsb2NrOjoga2NvbmZpZworCisJY29uZmlnIE1JU0NfRVhBTVBMRV9URVNU CisJCWJvb2wgIlRlc3QgZm9yIG15IGV4YW1wbGUiCisJCWRlcGVuZHMgb24gTUlTQ19FWEFNUExF ICYmIEtVTklUCisKK2FuZCB0aGUgZm9sbG93aW5nIHRvIGBgZHJpdmVycy9taXNjL01ha2VmaWxl YGA6CisKKy4uIGNvZGUtYmxvY2s6OiBtYWtlCisKKwlvYmotJChDT05GSUdfTUlTQ19FWEFNUExF X1RFU1QpICs9IGV4YW1wbGUtdGVzdC5vCisKK05vdyBhZGQgaXQgdG8geW91ciBgYGt1bml0Y29u ZmlnYGA6CisKKy4uIGNvZGUtYmxvY2s6OiBub25lCisKKwlDT05GSUdfTUlTQ19FWEFNUExFPXkK KwlDT05GSUdfTUlTQ19FWEFNUExFX1RFU1Q9eQorCitOb3cgeW91IGNhbiBydW4gdGhlIHRlc3Q6 CisKKy4uIGNvZGUtYmxvY2s6OiBiYXNoCisKKwkuL3Rvb2xzL3Rlc3Rpbmcva3VuaXQva3VuaXQu cHkKKworWW91IHNob3VsZCBzZWUgdGhlIGZvbGxvd2luZyBmYWlsdXJlOgorCisuLiBjb2RlLWJs b2NrOjogbm9uZQorCisJLi4uCisJWzE2OjA4OjU3XSBbUEFTU0VEXSBtaXNjLWV4YW1wbGU6bWlz Y19leGFtcGxlX2FkZF90ZXN0X2Jhc2ljCisJWzE2OjA4OjU3XSBbRkFJTEVEXSBtaXNjLWV4YW1w bGU6bWlzY19leGFtcGxlX3Rlc3RfZmFpbHVyZQorCVsxNjowODo1N10gRVhQRUNUQVRJT04gRkFJ TEVEIGF0IGRyaXZlcnMvbWlzYy9leGFtcGxlLXRlc3QuYzoxNworCVsxNjowODo1N10gCVRoaXMg dGVzdCBuZXZlciBwYXNzZXMuCisJLi4uCisKK0NvbmdyYXRzISBZb3UganVzdCB3cm90ZSB5b3Vy IGZpcnN0IEtVbml0IHRlc3QhCisKK05leHQgU3RlcHMKKz09PT09PT09PT0KKyogICBDaGVjayBv dXQgdGhlIDpkb2M6YHVzYWdlYCBwYWdlIGZvciBhIG1vcmUKKyAgICBpbi1kZXB0aCBleHBsYW5h dGlvbiBvZiBLVW5pdC4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZGV2LXRvb2xzL2t1bml0 L3VzYWdlLnJzdCBiL0RvY3VtZW50YXRpb24vZGV2LXRvb2xzL2t1bml0L3VzYWdlLnJzdApuZXcg ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwLi4wNDk4ODYwMDZkYmNlCi0tLSAv ZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9kZXYtdG9vbHMva3VuaXQvdXNhZ2UucnN0CkBA IC0wLDAgKzEsNTc1IEBACisuLiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAorCis9 PT09PT09PT09PQorVXNpbmcgS1VuaXQKKz09PT09PT09PT09CisKK1RoZSBwdXJwb3NlIG9mIHRo aXMgZG9jdW1lbnQgaXMgdG8gZGVzY3JpYmUgd2hhdCBLVW5pdCBpcywgaG93IGl0IHdvcmtzLCBo b3cgaXQKK2lzIGludGVuZGVkIHRvIGJlIHVzZWQsIGFuZCBhbGwgdGhlIGNvbmNlcHRzIGFuZCB0 ZXJtaW5vbG9neSB0aGF0IGFyZSBuZWVkZWQgdG8KK3VuZGVyc3RhbmQgaXQuIFRoaXMgZ3VpZGUg YXNzdW1lcyBhIHdvcmtpbmcga25vd2xlZGdlIG9mIHRoZSBMaW51eCBrZXJuZWwgYW5kCitzb21l IGJhc2ljIGtub3dsZWRnZSBvZiB0ZXN0aW5nLgorCitGb3IgYSBoaWdoIGxldmVsIGludHJvZHVj dGlvbiB0byBLVW5pdCwgaW5jbHVkaW5nIHNldHRpbmcgdXAgS1VuaXQgZm9yIHlvdXIKK3Byb2pl Y3QsIHNlZSA6ZG9jOmBzdGFydGAuCisKK09yZ2FuaXphdGlvbiBvZiB0aGlzIGRvY3VtZW50Cis9 PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitUaGlzIGRvY3VtZW50IGlzIG9yZ2FuaXpl ZCBpbnRvIHR3byBtYWluIHNlY3Rpb25zOiBUZXN0aW5nIGFuZCBJc29sYXRpbmcKK0JlaGF2aW9y LiBUaGUgZmlyc3QgY292ZXJzIHdoYXQgYSB1bml0IHRlc3QgaXMgYW5kIGhvdyB0byB1c2UgS1Vu aXQgdG8gd3JpdGUKK3RoZW0uIFRoZSBzZWNvbmQgY292ZXJzIGhvdyB0byB1c2UgS1VuaXQgdG8g aXNvbGF0ZSBjb2RlIGFuZCBtYWtlIGl0IHBvc3NpYmxlCit0byB1bml0IHRlc3QgY29kZSB0aGF0 IHdhcyBvdGhlcndpc2UgdW4tdW5pdC10ZXN0YWJsZS4KKworVGVzdGluZworPT09PT09PQorCitX aGF0IGlzIEtVbml0PworLS0tLS0tLS0tLS0tLS0KKworIksiIGlzIHNob3J0IGZvciAia2VybmVs IiBzbyAiS1VuaXQiIGlzIHRoZSAiKExpbnV4KSBLZXJuZWwgVW5pdCBUZXN0aW5nCitGcmFtZXdv cmsuIiBLVW5pdCBpcyBpbnRlbmRlZCBmaXJzdCBhbmQgZm9yZW1vc3QgZm9yIHdyaXRpbmcgdW5p dCB0ZXN0czsgaXQgaXMKK2dlbmVyYWwgZW5vdWdoIHRoYXQgaXQgY2FuIGJlIHVzZWQgdG8gd3Jp dGUgaW50ZWdyYXRpb24gdGVzdHM7IGhvd2V2ZXIsIHRoaXMgaXMKK2Egc2Vjb25kYXJ5IGdvYWwu IEtVbml0IGhhcyBubyBhbWJpdGlvbiBvZiBiZWluZyB0aGUgb25seSB0ZXN0aW5nIGZyYW1ld29y ayBmb3IKK3RoZSBrZXJuZWw7IGZvciBleGFtcGxlLCBpdCBkb2VzIG5vdCBpbnRlbmQgdG8gYmUg YW4gZW5kLXRvLWVuZCB0ZXN0aW5nCitmcmFtZXdvcmsuCisKK1doYXQgaXMgVW5pdCBUZXN0aW5n PworLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0EgYHVuaXQgdGVzdCA8aHR0cHM6Ly9tYXJ0aW5m b3dsZXIuY29tL2JsaWtpL1VuaXRUZXN0Lmh0bWw+YF8gaXMgYSB0ZXN0IHRoYXQKK3Rlc3RzIGNv ZGUgYXQgdGhlIHNtYWxsZXN0IHBvc3NpYmxlIHNjb3BlLCBhICp1bml0KiBvZiBjb2RlLiBJbiB0 aGUgQworcHJvZ3JhbW1pbmcgbGFuZ3VhZ2UgdGhhdCdzIGEgZnVuY3Rpb24uCisKK1VuaXQgdGVz dHMgc2hvdWxkIGJlIHdyaXR0ZW4gZm9yIGFsbCB0aGUgcHVibGljbHkgZXhwb3NlZCBmdW5jdGlv bnMgaW4gYQorY29tcGlsYXRpb24gdW5pdDsgc28gdGhhdCBpcyBhbGwgdGhlIGZ1bmN0aW9ucyB0 aGF0IGFyZSBleHBvcnRlZCBpbiBlaXRoZXIgYQorKmNsYXNzKiAoZGVmaW5lZCBiZWxvdykgb3Ig YWxsIGZ1bmN0aW9ucyB3aGljaCBhcmUgKipub3QqKiBzdGF0aWMuCisKK1dyaXRpbmcgVGVzdHMK Ky0tLS0tLS0tLS0tLS0KKworVGVzdCBDYXNlcworfn5+fn5+fn5+fgorCitUaGUgZnVuZGFtZW50 YWwgdW5pdCBpbiBLVW5pdCBpcyB0aGUgdGVzdCBjYXNlLiBBIHRlc3QgY2FzZSBpcyBhIGZ1bmN0 aW9uIHdpdGgKK3RoZSBzaWduYXR1cmUgYGB2b2lkICgqKShzdHJ1Y3Qga3VuaXQgKnRlc3QpYGAu IEl0IGNhbGxzIGEgZnVuY3Rpb24gdG8gYmUgdGVzdGVkCithbmQgdGhlbiBzZXRzICpleHBlY3Rh dGlvbnMqIGZvciB3aGF0IHNob3VsZCBoYXBwZW4uIEZvciBleGFtcGxlOgorCisuLiBjb2RlLWJs b2NrOjogYworCisJdm9pZCBleGFtcGxlX3Rlc3Rfc3VjY2VzcyhzdHJ1Y3Qga3VuaXQgKnRlc3Qp CisJeworCX0KKworCXZvaWQgZXhhbXBsZV90ZXN0X2ZhaWx1cmUoc3RydWN0IGt1bml0ICp0ZXN0 KQorCXsKKwkJS1VOSVRfRkFJTCh0ZXN0LCAiVGhpcyB0ZXN0IG5ldmVyIHBhc3Nlcy4iKTsKKwl9 CisKK0luIHRoZSBhYm92ZSBleGFtcGxlIGBgZXhhbXBsZV90ZXN0X3N1Y2Nlc3NgYCBhbHdheXMg cGFzc2VzIGJlY2F1c2UgaXQgZG9lcworbm90aGluZzsgbm8gZXhwZWN0YXRpb25zIGFyZSBzZXQs IHNvIGFsbCBleHBlY3RhdGlvbnMgcGFzcy4gT24gdGhlIG90aGVyIGhhbmQKK2BgZXhhbXBsZV90 ZXN0X2ZhaWx1cmVgYCBhbHdheXMgZmFpbHMgYmVjYXVzZSBpdCBjYWxscyBgYEtVTklUX0ZBSUxg YCwgd2hpY2ggaXMKK2Egc3BlY2lhbCBleHBlY3RhdGlvbiB0aGF0IGxvZ3MgYSBtZXNzYWdlIGFu ZCBjYXVzZXMgdGhlIHRlc3QgY2FzZSB0byBmYWlsLgorCitFeHBlY3RhdGlvbnMKK35+fn5+fn5+ fn5+fgorQW4gKmV4cGVjdGF0aW9uKiBpcyBhIHdheSB0byBzcGVjaWZ5IHRoYXQgeW91IGV4cGVj dCBhIHBpZWNlIG9mIGNvZGUgdG8gZG8KK3NvbWV0aGluZyBpbiBhIHRlc3QuIEFuIGV4cGVjdGF0 aW9uIGlzIGNhbGxlZCBsaWtlIGEgZnVuY3Rpb24uIEEgdGVzdCBpcyBtYWRlCitieSBzZXR0aW5n IGV4cGVjdGF0aW9ucyBhYm91dCB0aGUgYmVoYXZpb3Igb2YgYSBwaWVjZSBvZiBjb2RlIHVuZGVy IHRlc3Q7IHdoZW4KK29uZSBvciBtb3JlIG9mIHRoZSBleHBlY3RhdGlvbnMgZmFpbCwgdGhlIHRl c3QgY2FzZSBmYWlscyBhbmQgaW5mb3JtYXRpb24gYWJvdXQKK3RoZSBmYWlsdXJlIGlzIGxvZ2dl ZC4gRm9yIGV4YW1wbGU6CisKKy4uIGNvZGUtYmxvY2s6OiBjCisKKwl2b2lkIGFkZF90ZXN0X2Jh c2ljKHN0cnVjdCBrdW5pdCAqdGVzdCkKKwl7CisJCUtVTklUX0VYUEVDVF9FUSh0ZXN0LCAxLCBh ZGQoMSwgMCkpOworCQlLVU5JVF9FWFBFQ1RfRVEodGVzdCwgMiwgYWRkKDEsIDEpKTsKKwl9CisK K0luIHRoZSBhYm92ZSBleGFtcGxlIGBgYWRkX3Rlc3RfYmFzaWNgYCBtYWtlcyBhIG51bWJlciBv ZiBhc3NlcnRpb25zIGFib3V0IHRoZQorYmVoYXZpb3Igb2YgYSBmdW5jdGlvbiBjYWxsZWQgYGBh ZGRgYDsgdGhlIGZpcnN0IHBhcmFtZXRlciBpcyBhbHdheXMgb2YgdHlwZQorYGBzdHJ1Y3Qga3Vu aXQgKmBgLCB3aGljaCBjb250YWlucyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgY3VycmVudCB0ZXN0 IGNvbnRleHQ7Cit0aGUgc2Vjb25kIHBhcmFtZXRlciwgaW4gdGhpcyBjYXNlLCBpcyB3aGF0IHRo ZSB2YWx1ZSBpcyBleHBlY3RlZCB0byBiZTsgdGhlCitsYXN0IHZhbHVlIGlzIHdoYXQgdGhlIHZh bHVlIGFjdHVhbGx5IGlzLiBJZiBgYGFkZGBgIHBhc3NlcyBhbGwgb2YgdGhlc2UKK2V4cGVjdGF0 aW9ucywgdGhlIHRlc3QgY2FzZSwgYGBhZGRfdGVzdF9iYXNpY2BgIHdpbGwgcGFzczsgaWYgYW55 IG9uZSBvZiB0aGVzZQorZXhwZWN0YXRpb25zIGZhaWwsIHRoZSB0ZXN0IGNhc2Ugd2lsbCBmYWls LgorCitJdCBpcyBpbXBvcnRhbnQgdG8gdW5kZXJzdGFuZCB0aGF0IGEgdGVzdCBjYXNlICpmYWls cyogd2hlbiBhbnkgZXhwZWN0YXRpb24gaXMKK3Zpb2xhdGVkOyBob3dldmVyLCB0aGUgdGVzdCB3 aWxsIGNvbnRpbnVlIHJ1bm5pbmcsIHBvdGVudGlhbGx5IHRyeWluZyBvdGhlcgorZXhwZWN0YXRp b25zIHVudGlsIHRoZSB0ZXN0IGNhc2UgZW5kcyBvciBpcyBvdGhlcndpc2UgdGVybWluYXRlZC4g VGhpcyBpcyBhcworb3Bwb3NlZCB0byAqYXNzZXJ0aW9ucyogd2hpY2ggYXJlIGRpc2N1c3NlZCBs YXRlci4KKworVG8gbGVhcm4gYWJvdXQgbW9yZSBleHBlY3RhdGlvbnMgc3VwcG9ydGVkIGJ5IEtV bml0LCBzZWUgOmRvYzpgYXBpL3Rlc3RgLgorCisuLiBub3RlOjoKKyAgIEEgc2luZ2xlIHRlc3Qg Y2FzZSBzaG91bGQgYmUgcHJldHR5IHNob3J0LCBwcmV0dHkgZWFzeSB0byB1bmRlcnN0YW5kLAor ICAgZm9jdXNlZCBvbiBhIHNpbmdsZSBiZWhhdmlvci4KKworRm9yIGV4YW1wbGUsIGlmIHdlIHdh bnRlZCB0byBwcm9wZXJseSB0ZXN0IHRoZSBhZGQgZnVuY3Rpb24gYWJvdmUsIHdlIHdvdWxkCitj cmVhdGUgYWRkaXRpb25hbCB0ZXN0cyBjYXNlcyB3aGljaCB3b3VsZCBlYWNoIHRlc3QgYSBkaWZm ZXJlbnQgcHJvcGVydHkgdGhhdCBhbgorYWRkIGZ1bmN0aW9uIHNob3VsZCBoYXZlIGxpa2UgdGhp czoKKworLi4gY29kZS1ibG9jazo6IGMKKworCXZvaWQgYWRkX3Rlc3RfYmFzaWMoc3RydWN0IGt1 bml0ICp0ZXN0KQorCXsKKwkJS1VOSVRfRVhQRUNUX0VRKHRlc3QsIDEsIGFkZCgxLCAwKSk7CisJ CUtVTklUX0VYUEVDVF9FUSh0ZXN0LCAyLCBhZGQoMSwgMSkpOworCX0KKworCXZvaWQgYWRkX3Rl c3RfbmVnYXRpdmUoc3RydWN0IGt1bml0ICp0ZXN0KQorCXsKKwkJS1VOSVRfRVhQRUNUX0VRKHRl c3QsIDAsIGFkZCgtMSwgMSkpOworCX0KKworCXZvaWQgYWRkX3Rlc3RfbWF4KHN0cnVjdCBrdW5p dCAqdGVzdCkKKwl7CisJCUtVTklUX0VYUEVDVF9FUSh0ZXN0LCBJTlRfTUFYLCBhZGQoMCwgSU5U X01BWCkpOworCQlLVU5JVF9FWFBFQ1RfRVEodGVzdCwgLTEsIGFkZChJTlRfTUFYLCBJTlRfTUlO KSk7CisJfQorCisJdm9pZCBhZGRfdGVzdF9vdmVyZmxvdyhzdHJ1Y3Qga3VuaXQgKnRlc3QpCisJ eworCQlLVU5JVF9FWFBFQ1RfRVEodGVzdCwgSU5UX01JTiwgYWRkKElOVF9NQVgsIDEpKTsKKwl9 CisKK05vdGljZSBob3cgaXQgaXMgaW1tZWRpYXRlbHkgb2J2aW91cyB3aGF0IGFsbCB0aGUgcHJv cGVydGllcyB0aGF0IHdlIGFyZSB0ZXN0aW5nCitmb3IgYXJlLgorCitBc3NlcnRpb25zCit+fn5+ fn5+fn5+CisKK0tVbml0IGFsc28gaGFzIHRoZSBjb25jZXB0IG9mIGFuICphc3NlcnRpb24qLiBB biBhc3NlcnRpb24gaXMganVzdCBsaWtlIGFuCitleHBlY3RhdGlvbiBleGNlcHQgdGhlIGFzc2Vy dGlvbiBpbW1lZGlhdGVseSB0ZXJtaW5hdGVzIHRoZSB0ZXN0IGNhc2UgaWYgaXQgaXMKK25vdCBz YXRpc2ZpZWQuCisKK0ZvciBleGFtcGxlOgorCisuLiBjb2RlLWJsb2NrOjogYworCisJc3RhdGlj IHZvaWQgbW9ja190ZXN0X2RvX2V4cGVjdF9kZWZhdWx0X3JldHVybihzdHJ1Y3Qga3VuaXQgKnRl c3QpCisJeworCQlzdHJ1Y3QgbW9ja190ZXN0X2NvbnRleHQgKmN0eCA9IHRlc3QtPnByaXY7CisJ CXN0cnVjdCBtb2NrICptb2NrID0gY3R4LT5tb2NrOworCQlpbnQgcGFyYW0wID0gNSwgcGFyYW0x ID0gLTU7CisJCWNvbnN0IGNoYXIgKnR3b19wYXJhbV90eXBlc1tdID0geyJpbnQiLCAiaW50In07 CisJCWNvbnN0IHZvaWQgKnR3b19wYXJhbXNbXSA9IHsmcGFyYW0wLCAmcGFyYW0xfTsKKwkJY29u c3Qgdm9pZCAqcmV0OworCisJCXJldCA9IG1vY2stPmRvX2V4cGVjdChtb2NrLAorCQkJCSAgICAg ICJ0ZXN0X3ByaW50ayIsIHRlc3RfcHJpbnRrLAorCQkJCSAgICAgIHR3b19wYXJhbV90eXBlcywg dHdvX3BhcmFtcywKKwkJCQkgICAgICBBUlJBWV9TSVpFKHR3b19wYXJhbXMpKTsKKwkJS1VOSVRf QVNTRVJUX05PVF9FUlJfT1JfTlVMTCh0ZXN0LCByZXQpOworCQlLVU5JVF9FWFBFQ1RfRVEodGVz dCwgLTQsICooKGludCAqKSByZXQpKTsKKwl9CisKK0luIHRoaXMgZXhhbXBsZSwgdGhlIG1ldGhv ZCB1bmRlciB0ZXN0IHNob3VsZCByZXR1cm4gYSBwb2ludGVyIHRvIGEgdmFsdWUsIHNvCitpZiB0 aGUgcG9pbnRlciByZXR1cm5lZCBieSB0aGUgbWV0aG9kIGlzIG51bGwgb3IgYW4gZXJybm8sIHdl IGRvbid0IHdhbnQgdG8KK2JvdGhlciBjb250aW51aW5nIHRoZSB0ZXN0IHNpbmNlIHRoZSBmb2xs b3dpbmcgZXhwZWN0YXRpb24gY291bGQgY3Jhc2ggdGhlIHRlc3QKK2Nhc2UuIGBBU1NFUlRfTk9U X0VSUl9PUl9OVUxMKC4uLilgIGFsbG93cyB1cyB0byBiYWlsIG91dCBvZiB0aGUgdGVzdCBjYXNl IGlmCit0aGUgYXBwcm9wcmlhdGUgY29uZGl0aW9ucyBoYXZlIG5vdCBiZWVuIHNhdGlzZmllZCB0 byBjb21wbGV0ZSB0aGUgdGVzdC4KKworVGVzdCBTdWl0ZXMKK35+fn5+fn5+fn5+CisKK05vdyBv YnZpb3VzbHkgb25lIHVuaXQgdGVzdCBpc24ndCB2ZXJ5IGhlbHBmdWw7IHRoZSBwb3dlciBjb21l cyBmcm9tIGhhdmluZworbWFueSB0ZXN0IGNhc2VzIGNvdmVyaW5nIGFsbCBvZiB5b3VyIGJlaGF2 aW9ycy4gQ29uc2VxdWVudGx5IGl0IGlzIGNvbW1vbiB0bworaGF2ZSBtYW55ICpzaW1pbGFyKiB0 ZXN0czsgaW4gb3JkZXIgdG8gcmVkdWNlIGR1cGxpY2F0aW9uIGluIHRoZXNlIGNsb3NlbHkKK3Jl bGF0ZWQgdGVzdHMgbW9zdCB1bml0IHRlc3RpbmcgZnJhbWV3b3JrcyBwcm92aWRlIHRoZSBjb25j ZXB0IG9mIGEgKnRlc3QKK3N1aXRlKiwgaW4gS1VuaXQgd2UgY2FsbCBpdCBhICp0ZXN0IHN1aXRl KjsgYWxsIGl0IGlzIGlzIGp1c3QgYSBjb2xsZWN0aW9uIG9mCit0ZXN0IGNhc2VzIGZvciBhIHVu aXQgb2YgY29kZSB3aXRoIGEgc2V0IHVwIGZ1bmN0aW9uIHRoYXQgZ2V0cyBpbnZva2VkIGJlZm9y ZQorZXZlcnkgdGVzdCBjYXNlcyBhbmQgdGhlbiBhIHRlYXIgZG93biBmdW5jdGlvbiB0aGF0IGdl dHMgaW52b2tlZCBhZnRlciBldmVyeQordGVzdCBjYXNlIGNvbXBsZXRlcy4KKworRXhhbXBsZToK KworLi4gY29kZS1ibG9jazo6IGMKKworCXN0YXRpYyBzdHJ1Y3Qga3VuaXRfY2FzZSBleGFtcGxl X3Rlc3RfY2FzZXNbXSA9IHsKKwkJS1VOSVRfQ0FTRShleGFtcGxlX3Rlc3RfZm9vKSwKKwkJS1VO SVRfQ0FTRShleGFtcGxlX3Rlc3RfYmFyKSwKKwkJS1VOSVRfQ0FTRShleGFtcGxlX3Rlc3RfYmF6 KSwKKwkJe30KKwl9OworCisJc3RhdGljIHN0cnVjdCBrdW5pdF9zdWl0ZSBleGFtcGxlX3Rlc3Rf c3VpdGUgPSB7CisJCS5uYW1lID0gImV4YW1wbGUiLAorCQkuaW5pdCA9IGV4YW1wbGVfdGVzdF9p bml0LAorCQkuZXhpdCA9IGV4YW1wbGVfdGVzdF9leGl0LAorCQkudGVzdF9jYXNlcyA9IGV4YW1w bGVfdGVzdF9jYXNlcywKKwl9OworCWt1bml0X3Rlc3Rfc3VpdGUoZXhhbXBsZV90ZXN0X3N1aXRl KTsKKworSW4gdGhlIGFib3ZlIGV4YW1wbGUgdGhlIHRlc3Qgc3VpdGUsIGBgZXhhbXBsZV90ZXN0 X3N1aXRlYGAsIHdvdWxkIHJ1biB0aGUgdGVzdAorY2FzZXMgYGBleGFtcGxlX3Rlc3RfZm9vYGAs IGBgZXhhbXBsZV90ZXN0X2JhcmBgLCBhbmQgYGBleGFtcGxlX3Rlc3RfYmF6YGAsCitlYWNoIHdv dWxkIGhhdmUgYGBleGFtcGxlX3Rlc3RfaW5pdGBgIGNhbGxlZCBpbW1lZGlhdGVseSBiZWZvcmUg aXQgYW5kIHdvdWxkCitoYXZlIGBgZXhhbXBsZV90ZXN0X2V4aXRgYCBjYWxsZWQgaW1tZWRpYXRl bHkgYWZ0ZXIgaXQuCitgYGt1bml0X3Rlc3Rfc3VpdGUoZXhhbXBsZV90ZXN0X3N1aXRlKWBgIHJl Z2lzdGVycyB0aGUgdGVzdCBzdWl0ZSB3aXRoIHRoZQorS1VuaXQgdGVzdCBmcmFtZXdvcmsuCisK Ky4uIG5vdGU6OgorICAgQSB0ZXN0IGNhc2Ugd2lsbCBvbmx5IGJlIHJ1biBpZiBpdCBpcyBhc3Nv Y2lhdGVkIHdpdGggYSB0ZXN0IHN1aXRlLgorCitGb3IgYSBtb3JlIGluZm9ybWF0aW9uIG9uIHRo ZXNlIHR5cGVzIG9mIHRoaW5ncyBzZWUgdGhlIDpkb2M6YGFwaS90ZXN0YC4KKworSXNvbGF0aW5n IEJlaGF2aW9yCis9PT09PT09PT09PT09PT09PT0KKworVGhlIG1vc3QgaW1wb3J0YW50IGFzcGVj dCBvZiB1bml0IHRlc3RpbmcgdGhhdCBvdGhlciBmb3JtcyBvZiB0ZXN0aW5nIGRvIG5vdAorcHJv dmlkZSBpcyB0aGUgYWJpbGl0eSB0byBsaW1pdCB0aGUgYW1vdW50IG9mIGNvZGUgdW5kZXIgdGVz dCB0byBhIHNpbmdsZSB1bml0LgorSW4gcHJhY3RpY2UsIHRoaXMgaXMgb25seSBwb3NzaWJsZSBi eSBiZWluZyBhYmxlIHRvIGNvbnRyb2wgd2hhdCBjb2RlIGdldHMgcnVuCit3aGVuIHRoZSB1bml0 IHVuZGVyIHRlc3QgY2FsbHMgYSBmdW5jdGlvbiBhbmQgdGhpcyBpcyB1c3VhbGx5IGFjY29tcGxp c2hlZAordGhyb3VnaCBzb21lIHNvcnQgb2YgaW5kaXJlY3Rpb24gd2hlcmUgYSBmdW5jdGlvbiBp cyBleHBvc2VkIGFzIHBhcnQgb2YgYW4gQVBJCitzdWNoIHRoYXQgdGhlIGRlZmluaXRpb24gb2Yg dGhhdCBmdW5jdGlvbiBjYW4gYmUgY2hhbmdlZCB3aXRob3V0IGFmZmVjdGluZyB0aGUKK3Jlc3Qg b2YgdGhlIGNvZGUgYmFzZS4gSW4gdGhlIGtlcm5lbCB0aGlzIHByaW1hcmlseSBjb21lcyBmcm9t IHR3byBjb25zdHJ1Y3RzLAorY2xhc3Nlcywgc3RydWN0cyB0aGF0IGNvbnRhaW4gZnVuY3Rpb24g cG9pbnRlcnMgdGhhdCBhcmUgcHJvdmlkZWQgYnkgdGhlCitpbXBsZW1lbnRlciwgYW5kIGFyY2hp dGVjdHVyZSBzcGVjaWZpYyBmdW5jdGlvbnMgd2hpY2ggaGF2ZSBkZWZpbml0aW9ucyBzZWxlY3Rl ZAorYXQgY29tcGlsZSB0aW1lLgorCitDbGFzc2VzCistLS0tLS0tCisKK0NsYXNzZXMgYXJlIG5v dCBhIGNvbnN0cnVjdCB0aGF0IGlzIGJ1aWx0IGludG8gdGhlIEMgcHJvZ3JhbW1pbmcgbGFuZ3Vh Z2U7Citob3dldmVyLCBpdCBpcyBhbiBlYXNpbHkgZGVyaXZlZCBjb25jZXB0LiBBY2NvcmRpbmds eSwgcHJldHR5IG11Y2ggZXZlcnkgcHJvamVjdAordGhhdCBkb2VzIG5vdCB1c2UgYSBzdGFuZGFy ZGl6ZWQgb2JqZWN0IG9yaWVudGVkIGxpYnJhcnkgKGxpa2UgR05PTUUncyBHT2JqZWN0KQoraGFz IHRoZWlyIG93biBzbGlnaHRseSBkaWZmZXJlbnQgd2F5IG9mIGRvaW5nIG9iamVjdCBvcmllbnRl ZCBwcm9ncmFtbWluZzsgdGhlCitMaW51eCBrZXJuZWwgaXMgbm8gZXhjZXB0aW9uLgorCitUaGUg Y2VudHJhbCBjb25jZXB0IGluIGtlcm5lbCBvYmplY3Qgb3JpZW50ZWQgcHJvZ3JhbW1pbmcgaXMg dGhlIGNsYXNzLiBJbiB0aGUKK2tlcm5lbCwgYSAqY2xhc3MqIGlzIGEgc3RydWN0IHRoYXQgY29u dGFpbnMgZnVuY3Rpb24gcG9pbnRlcnMuIFRoaXMgY3JlYXRlcyBhCitjb250cmFjdCBiZXR3ZWVu ICppbXBsZW1lbnRlcnMqIGFuZCAqdXNlcnMqIHNpbmNlIGl0IGZvcmNlcyB0aGVtIHRvIHVzZSB0 aGUKK3NhbWUgZnVuY3Rpb24gc2lnbmF0dXJlIHdpdGhvdXQgaGF2aW5nIHRvIGNhbGwgdGhlIGZ1 bmN0aW9uIGRpcmVjdGx5LiBJbiBvcmRlcgorZm9yIGl0IHRvIHRydWx5IGJlIGEgY2xhc3MsIHRo ZSBmdW5jdGlvbiBwb2ludGVycyBtdXN0IHNwZWNpZnkgdGhhdCBhIHBvaW50ZXIKK3RvIHRoZSBj bGFzcywga25vd24gYXMgYSAqY2xhc3MgaGFuZGxlKiwgYmUgb25lIG9mIHRoZSBwYXJhbWV0ZXJz OyB0aGlzIG1ha2VzCitpdCBwb3NzaWJsZSBmb3IgdGhlIG1lbWJlciBmdW5jdGlvbnMgKGFsc28g a25vd24gYXMgKm1ldGhvZHMqKSB0byBoYXZlIGFjY2VzcwordG8gbWVtYmVyIHZhcmlhYmxlcyAo bW9yZSBjb21tb25seSBrbm93biBhcyAqZmllbGRzKikgYWxsb3dpbmcgdGhlIHNhbWUKK2ltcGxl bWVudGF0aW9uIHRvIGhhdmUgbXVsdGlwbGUgKmluc3RhbmNlcyouCisKK1R5cGljYWxseSBhIGNs YXNzIGNhbiBiZSAqb3ZlcnJpZGRlbiogYnkgKmNoaWxkIGNsYXNzZXMqIGJ5IGVtYmVkZGluZyB0 aGUKKypwYXJlbnQgY2xhc3MqIGluIHRoZSBjaGlsZCBjbGFzcy4gVGhlbiB3aGVuIGEgbWV0aG9k IHByb3ZpZGVkIGJ5IHRoZSBjaGlsZAorY2xhc3MgaXMgY2FsbGVkLCB0aGUgY2hpbGQgaW1wbGVt ZW50YXRpb24ga25vd3MgdGhhdCB0aGUgcG9pbnRlciBwYXNzZWQgdG8gaXQgaXMKK29mIGEgcGFy ZW50IGNvbnRhaW5lZCB3aXRoaW4gdGhlIGNoaWxkOyBiZWNhdXNlIG9mIHRoaXMsIHRoZSBjaGls ZCBjYW4gY29tcHV0ZQordGhlIHBvaW50ZXIgdG8gaXRzZWxmIGJlY2F1c2UgdGhlIHBvaW50ZXIg dG8gdGhlIHBhcmVudCBpcyBhbHdheXMgYSBmaXhlZCBvZmZzZXQKK2Zyb20gdGhlIHBvaW50ZXIg dG8gdGhlIGNoaWxkOyB0aGlzIG9mZnNldCBpcyB0aGUgb2Zmc2V0IG9mIHRoZSBwYXJlbnQgY29u dGFpbmVkCitpbiB0aGUgY2hpbGQgc3RydWN0LiBGb3IgZXhhbXBsZToKKworLi4gY29kZS1ibG9j azo6IGMKKworCXN0cnVjdCBzaGFwZSB7CisJCWludCAoKmFyZWEpKHN0cnVjdCBzaGFwZSAqdGhp cyk7CisJfTsKKworCXN0cnVjdCByZWN0YW5nbGUgeworCQlzdHJ1Y3Qgc2hhcGUgcGFyZW50Owor CQlpbnQgbGVuZ3RoOworCQlpbnQgd2lkdGg7CisJfTsKKworCWludCByZWN0YW5nbGVfYXJlYShz dHJ1Y3Qgc2hhcGUgKnRoaXMpCisJeworCQlzdHJ1Y3QgcmVjdGFuZ2xlICpzZWxmID0gY29udGFp bmVyX29mKHRoaXMsIHN0cnVjdCBzaGFwZSwgcGFyZW50KTsKKworCQlyZXR1cm4gc2VsZi0+bGVu Z3RoICogc2VsZi0+d2lkdGg7CisJfTsKKworCXZvaWQgcmVjdGFuZ2xlX25ldyhzdHJ1Y3QgcmVj dGFuZ2xlICpzZWxmLCBpbnQgbGVuZ3RoLCBpbnQgd2lkdGgpCisJeworCQlzZWxmLT5wYXJlbnQu YXJlYSA9IHJlY3RhbmdsZV9hcmVhOworCQlzZWxmLT5sZW5ndGggPSBsZW5ndGg7CisJCXNlbGYt PndpZHRoID0gd2lkdGg7CisJfQorCitJbiB0aGlzIGV4YW1wbGUgKGFzIGluIG1vc3Qga2VybmVs IGNvZGUpIHRoZSBvcGVyYXRpb24gb2YgY29tcHV0aW5nIHRoZSBwb2ludGVyCit0byB0aGUgY2hp bGQgZnJvbSB0aGUgcG9pbnRlciB0byB0aGUgcGFyZW50IGlzIGRvbmUgYnkgYGBjb250YWluZXJf b2ZgYC4KKworRmFraW5nIENsYXNzZXMKK35+fn5+fn5+fn5+fn5+CisKK0luIG9yZGVyIHRvIHVu aXQgdGVzdCBhIHBpZWNlIG9mIGNvZGUgdGhhdCBjYWxscyBhIG1ldGhvZCBpbiBhIGNsYXNzLCB0 aGUKK2JlaGF2aW9yIG9mIHRoZSBtZXRob2QgbXVzdCBiZSBjb250cm9sbGFibGUsIG90aGVyd2lz ZSB0aGUgdGVzdCBjZWFzZXMgdG8gYmUgYQordW5pdCB0ZXN0IGFuZCBiZWNvbWVzIGFuIGludGVn cmF0aW9uIHRlc3QuCisKK0EgZmFrZSBqdXN0IHByb3ZpZGVzIGFuIGltcGxlbWVudGF0aW9uIG9m IGEgcGllY2Ugb2YgY29kZSB0aGF0IGlzIGRpZmZlcmVudCB0aGFuCit3aGF0IHJ1bnMgaW4gYSBw cm9kdWN0aW9uIGluc3RhbmNlLCBidXQgYmVoYXZlcyBpZGVudGljYWxseSBmcm9tIHRoZSBzdGFu ZHBvaW50CitvZiB0aGUgY2FsbGVyczsgdGhpcyBpcyB1c3VhbGx5IGRvbmUgdG8gcmVwbGFjZSBh IGRlcGVuZGVuY3kgdGhhdCBpcyBoYXJkIHRvCitkZWFsIHdpdGgsIG9yIGlzIHNsb3cuCisKK0Eg Z29vZCBleGFtcGxlIGZvciB0aGlzIG1pZ2h0IGJlIGltcGxlbWVudGluZyBhIGZha2UgRUVQUk9N IHRoYXQganVzdCBzdG9yZXMgdGhlCisiY29udGVudHMiIGluIGFuIGludGVybmFsIGJ1ZmZlci4g Rm9yIGV4YW1wbGUsIGxldCdzIGFzc3VtZSB3ZSBoYXZlIGEgY2xhc3MgdGhhdAorcmVwcmVzZW50 cyBhbiBFRVBST006CisKKy4uIGNvZGUtYmxvY2s6OiBjCisKKwlzdHJ1Y3QgZWVwcm9tIHsKKwkJ c3NpemVfdCAoKnJlYWQpKHN0cnVjdCBlZXByb20gKnRoaXMsIHNpemVfdCBvZmZzZXQsIGNoYXIg KmJ1ZmZlciwgc2l6ZV90IGNvdW50KTsKKwkJc3NpemVfdCAoKndyaXRlKShzdHJ1Y3QgZWVwcm9t ICp0aGlzLCBzaXplX3Qgb2Zmc2V0LCBjb25zdCBjaGFyICpidWZmZXIsIHNpemVfdCBjb3VudCk7 CisJfTsKKworQW5kIHdlIHdhbnQgdG8gdGVzdCBzb21lIGNvZGUgdGhhdCBidWZmZXJzIHdyaXRl cyB0byB0aGUgRUVQUk9NOgorCisuLiBjb2RlLWJsb2NrOjogYworCisJc3RydWN0IGVlcHJvbV9i dWZmZXIgeworCQlzc2l6ZV90ICgqd3JpdGUpKHN0cnVjdCBlZXByb21fYnVmZmVyICp0aGlzLCBj b25zdCBjaGFyICpidWZmZXIsIHNpemVfdCBjb3VudCk7CisJCWludCBmbHVzaChzdHJ1Y3QgZWVw cm9tX2J1ZmZlciAqdGhpcyk7CisJCXNpemVfdCBmbHVzaF9jb3VudDsgLyogRmx1c2hlcyB3aGVu IGJ1ZmZlciBleGNlZWRzIGZsdXNoX2NvdW50LiAqLworCX07CisKKwlzdHJ1Y3QgZWVwcm9tX2J1 ZmZlciAqbmV3X2VlcHJvbV9idWZmZXIoc3RydWN0IGVlcHJvbSAqZWVwcm9tKTsKKwl2b2lkIGRl c3Ryb3lfZWVwcm9tX2J1ZmZlcihzdHJ1Y3QgZWVwcm9tICplZXByb20pOworCitXZSBjYW4gZWFz aWx5IHRlc3QgdGhpcyBjb2RlIGJ5ICpmYWtpbmcgb3V0KiB0aGUgdW5kZXJseWluZyBFRVBST006 CisKKy4uIGNvZGUtYmxvY2s6OiBjCisKKwlzdHJ1Y3QgZmFrZV9lZXByb20geworCQlzdHJ1Y3Qg ZWVwcm9tIHBhcmVudDsKKwkJY2hhciBjb250ZW50c1tGQUtFX0VFUFJPTV9DT05URU5UU19TSVpF XTsKKwl9OworCisJc3NpemVfdCBmYWtlX2VlcHJvbV9yZWFkKHN0cnVjdCBlZXByb20gKnBhcmVu dCwgc2l6ZV90IG9mZnNldCwgY2hhciAqYnVmZmVyLCBzaXplX3QgY291bnQpCisJeworCQlzdHJ1 Y3QgZmFrZV9lZXByb20gKnRoaXMgPSBjb250YWluZXJfb2YocGFyZW50LCBzdHJ1Y3QgZmFrZV9l ZXByb20sIHBhcmVudCk7CisKKwkJY291bnQgPSBtaW4oY291bnQsIEZBS0VfRUVQUk9NX0NPTlRF TlRTX1NJWkUgLSBvZmZzZXQpOworCQltZW1jcHkoYnVmZmVyLCB0aGlzLT5jb250ZW50cyArIG9m ZnNldCwgY291bnQpOworCisJCXJldHVybiBjb3VudDsKKwl9CisKKwlzc2l6ZV90IGZha2VfZWVw cm9tX3dyaXRlKHN0cnVjdCBlZXByb20gKnRoaXMsIHNpemVfdCBvZmZzZXQsIGNvbnN0IGNoYXIg KmJ1ZmZlciwgc2l6ZV90IGNvdW50KQorCXsKKwkJc3RydWN0IGZha2VfZWVwcm9tICp0aGlzID0g Y29udGFpbmVyX29mKHBhcmVudCwgc3RydWN0IGZha2VfZWVwcm9tLCBwYXJlbnQpOworCisJCWNv dW50ID0gbWluKGNvdW50LCBGQUtFX0VFUFJPTV9DT05URU5UU19TSVpFIC0gb2Zmc2V0KTsKKwkJ bWVtY3B5KHRoaXMtPmNvbnRlbnRzICsgb2Zmc2V0LCBidWZmZXIsIGNvdW50KTsKKworCQlyZXR1 cm4gY291bnQ7CisJfQorCisJdm9pZCBmYWtlX2VlcHJvbV9pbml0KHN0cnVjdCBmYWtlX2VlcHJv bSAqdGhpcykKKwl7CisJCXRoaXMtPnBhcmVudC5yZWFkID0gZmFrZV9lZXByb21fcmVhZDsKKwkJ dGhpcy0+cGFyZW50LndyaXRlID0gZmFrZV9lZXByb21fd3JpdGU7CisJCW1lbXNldCh0aGlzLT5j b250ZW50cywgMCwgRkFLRV9FRVBST01fQ09OVEVOVFNfU0laRSk7CisJfQorCitXZSBjYW4gbm93 IHVzZSBpdCB0byB0ZXN0IGBgc3RydWN0IGVlcHJvbV9idWZmZXJgYDoKKworLi4gY29kZS1ibG9j azo6IGMKKworCXN0cnVjdCBlZXByb21fYnVmZmVyX3Rlc3QgeworCQlzdHJ1Y3QgZmFrZV9lZXBy b20gKmZha2VfZWVwcm9tOworCQlzdHJ1Y3QgZWVwcm9tX2J1ZmZlciAqZWVwcm9tX2J1ZmZlcjsK Kwl9OworCisJc3RhdGljIHZvaWQgZWVwcm9tX2J1ZmZlcl90ZXN0X2RvZXNfbm90X3dyaXRlX3Vu dGlsX2ZsdXNoKHN0cnVjdCBrdW5pdCAqdGVzdCkKKwl7CisJCXN0cnVjdCBlZXByb21fYnVmZmVy X3Rlc3QgKmN0eCA9IHRlc3QtPnByaXY7CisJCXN0cnVjdCBlZXByb21fYnVmZmVyICplZXByb21f YnVmZmVyID0gY3R4LT5lZXByb21fYnVmZmVyOworCQlzdHJ1Y3QgZmFrZV9lZXByb20gKmZha2Vf ZWVwcm9tID0gY3R4LT5mYWtlX2VlcHJvbTsKKwkJY2hhciBidWZmZXJbXSA9IHsweGZmfTsKKwor CQllZXByb21fYnVmZmVyLT5mbHVzaF9jb3VudCA9IFNJWkVfTUFYOworCisJCWVlcHJvbV9idWZm ZXItPndyaXRlKGVlcHJvbV9idWZmZXIsIGJ1ZmZlciwgMSk7CisJCUtVTklUX0VYUEVDVF9FUSh0 ZXN0LCBmYWtlX2VlcHJvbS0+Y29udGVudHNbMF0sIDApOworCisJCWVlcHJvbV9idWZmZXItPndy aXRlKGVlcHJvbV9idWZmZXIsIGJ1ZmZlciwgMSk7CisJCUtVTklUX0VYUEVDVF9FUSh0ZXN0LCBm YWtlX2VlcHJvbS0+Y29udGVudHNbMV0sIDApOworCisJCWVlcHJvbV9idWZmZXItPmZsdXNoKGVl cHJvbV9idWZmZXIpOworCQlLVU5JVF9FWFBFQ1RfRVEodGVzdCwgZmFrZV9lZXByb20tPmNvbnRl bnRzWzBdLCAweGZmKTsKKwkJS1VOSVRfRVhQRUNUX0VRKHRlc3QsIGZha2VfZWVwcm9tLT5jb250 ZW50c1sxXSwgMHhmZik7CisJfQorCisJc3RhdGljIHZvaWQgZWVwcm9tX2J1ZmZlcl90ZXN0X2Zs dXNoZXNfYWZ0ZXJfZmx1c2hfY291bnRfbWV0KHN0cnVjdCBrdW5pdCAqdGVzdCkKKwl7CisJCXN0 cnVjdCBlZXByb21fYnVmZmVyX3Rlc3QgKmN0eCA9IHRlc3QtPnByaXY7CisJCXN0cnVjdCBlZXBy b21fYnVmZmVyICplZXByb21fYnVmZmVyID0gY3R4LT5lZXByb21fYnVmZmVyOworCQlzdHJ1Y3Qg ZmFrZV9lZXByb20gKmZha2VfZWVwcm9tID0gY3R4LT5mYWtlX2VlcHJvbTsKKwkJY2hhciBidWZm ZXJbXSA9IHsweGZmfTsKKworCQllZXByb21fYnVmZmVyLT5mbHVzaF9jb3VudCA9IDI7CisKKwkJ ZWVwcm9tX2J1ZmZlci0+d3JpdGUoZWVwcm9tX2J1ZmZlciwgYnVmZmVyLCAxKTsKKwkJS1VOSVRf RVhQRUNUX0VRKHRlc3QsIGZha2VfZWVwcm9tLT5jb250ZW50c1swXSwgMCk7CisKKwkJZWVwcm9t X2J1ZmZlci0+d3JpdGUoZWVwcm9tX2J1ZmZlciwgYnVmZmVyLCAxKTsKKwkJS1VOSVRfRVhQRUNU X0VRKHRlc3QsIGZha2VfZWVwcm9tLT5jb250ZW50c1swXSwgMHhmZik7CisJCUtVTklUX0VYUEVD VF9FUSh0ZXN0LCBmYWtlX2VlcHJvbS0+Y29udGVudHNbMV0sIDB4ZmYpOworCX0KKworCXN0YXRp YyB2b2lkIGVlcHJvbV9idWZmZXJfdGVzdF9mbHVzaGVzX2luY3JlbWVudHNfb2ZfZmx1c2hfY291 bnQoc3RydWN0IGt1bml0ICp0ZXN0KQorCXsKKwkJc3RydWN0IGVlcHJvbV9idWZmZXJfdGVzdCAq Y3R4ID0gdGVzdC0+cHJpdjsKKwkJc3RydWN0IGVlcHJvbV9idWZmZXIgKmVlcHJvbV9idWZmZXIg PSBjdHgtPmVlcHJvbV9idWZmZXI7CisJCXN0cnVjdCBmYWtlX2VlcHJvbSAqZmFrZV9lZXByb20g PSBjdHgtPmZha2VfZWVwcm9tOworCQljaGFyIGJ1ZmZlcltdID0gezB4ZmYsIDB4ZmZ9OworCisJ CWVlcHJvbV9idWZmZXItPmZsdXNoX2NvdW50ID0gMjsKKworCQllZXByb21fYnVmZmVyLT53cml0 ZShlZXByb21fYnVmZmVyLCBidWZmZXIsIDEpOworCQlLVU5JVF9FWFBFQ1RfRVEodGVzdCwgZmFr ZV9lZXByb20tPmNvbnRlbnRzWzBdLCAwKTsKKworCQllZXByb21fYnVmZmVyLT53cml0ZShlZXBy b21fYnVmZmVyLCBidWZmZXIsIDIpOworCQlLVU5JVF9FWFBFQ1RfRVEodGVzdCwgZmFrZV9lZXBy b20tPmNvbnRlbnRzWzBdLCAweGZmKTsKKwkJS1VOSVRfRVhQRUNUX0VRKHRlc3QsIGZha2VfZWVw cm9tLT5jb250ZW50c1sxXSwgMHhmZik7CisJCS8qIFNob3VsZCBoYXZlIG9ubHkgZmx1c2hlZCB0 aGUgZmlyc3QgdHdvIGJ5dGVzLiAqLworCQlLVU5JVF9FWFBFQ1RfRVEodGVzdCwgZmFrZV9lZXBy b20tPmNvbnRlbnRzWzJdLCAwKTsKKwl9CisKKwlzdGF0aWMgaW50IGVlcHJvbV9idWZmZXJfdGVz dF9pbml0KHN0cnVjdCBrdW5pdCAqdGVzdCkKKwl7CisJCXN0cnVjdCBlZXByb21fYnVmZmVyX3Rl c3QgKmN0eDsKKworCQljdHggPSBrdW5pdF9remFsbG9jKHRlc3QsIHNpemVvZigqY3R4KSwgR0ZQ X0tFUk5FTCk7CisJCUFTU0VSVF9OT1RfRVJSX09SX05VTEwodGVzdCwgY3R4KTsKKworCQljdHgt PmZha2VfZWVwcm9tID0ga3VuaXRfa3phbGxvYyh0ZXN0LCBzaXplb2YoKmN0eC0+ZmFrZV9lZXBy b20pLCBHRlBfS0VSTkVMKTsKKwkJQVNTRVJUX05PVF9FUlJfT1JfTlVMTCh0ZXN0LCBjdHgtPmZh a2VfZWVwcm9tKTsKKworCQljdHgtPmVlcHJvbV9idWZmZXIgPSBuZXdfZWVwcm9tX2J1ZmZlcigm Y3R4LT5mYWtlX2VlcHJvbS0+cGFyZW50KTsKKwkJQVNTRVJUX05PVF9FUlJfT1JfTlVMTCh0ZXN0 LCBjdHgtPmVlcHJvbV9idWZmZXIpOworCisJCXRlc3QtPnByaXYgPSBjdHg7CisKKwkJcmV0dXJu IDA7CisJfQorCisJc3RhdGljIHZvaWQgZWVwcm9tX2J1ZmZlcl90ZXN0X2V4aXQoc3RydWN0IGt1 bml0ICp0ZXN0KQorCXsKKwkJc3RydWN0IGVlcHJvbV9idWZmZXJfdGVzdCAqY3R4ID0gdGVzdC0+ cHJpdjsKKworCQlkZXN0cm95X2VlcHJvbV9idWZmZXIoY3R4LT5lZXByb21fYnVmZmVyKTsKKwl9 CisKKy4uIF9rdW5pdC1vbi1ub24tdW1sOgorCitLVW5pdCBvbiBub24tVU1MIGFyY2hpdGVjdHVy ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitCeSBkZWZhdWx0IEtVbml0IHVz ZXMgVU1MIGFzIGEgd2F5IHRvIHByb3ZpZGUgZGVwZW5kZW5jaWVzIGZvciBjb2RlIHVuZGVyIHRl c3QuCitVbmRlciBtb3N0IGNpcmN1bXN0YW5jZXMgS1VuaXQncyB1c2FnZSBvZiBVTUwgc2hvdWxk IGJlIHRyZWF0ZWQgYXMgYW4KK2ltcGxlbWVudGF0aW9uIGRldGFpbCBvZiBob3cgS1VuaXQgd29y a3MgdW5kZXIgdGhlIGhvb2QuIE5ldmVydGhlbGVzcywgdGhlcmUKK2FyZSBpbnN0YW5jZXMgd2hl cmUgYmVpbmcgYWJsZSB0byBydW4gYXJjaGl0ZWN0dXJlIHNwZWNpZmljIGNvZGUsIG9yIHRlc3QK K2FnYWluc3QgcmVhbCBoYXJkd2FyZSBpcyBkZXNpcmFibGUuIEZvciB0aGVzZSByZWFzb25zIEtV bml0IHN1cHBvcnRzIHJ1bm5pbmcgb24KK290aGVyIGFyY2hpdGVjdHVyZXMuCisKK1J1bm5pbmcg ZXhpc3RpbmcgS1VuaXQgdGVzdHMgb24gbm9uLVVNTCBhcmNoaXRlY3R1cmVzCistLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGVyZSBhcmUg c29tZSBzcGVjaWFsIGNvbnNpZGVyYXRpb25zIHdoZW4gcnVubmluZyBleGlzdGluZyBLVW5pdCB0 ZXN0cyBvbgorbm9uLVVNTCBhcmNoaXRlY3R1cmVzOgorCisqICAgSGFyZHdhcmUgbWF5IG5vdCBi ZSBkZXRlcm1pbmlzdGljLCBzbyBhIHRlc3QgdGhhdCBhbHdheXMgcGFzc2VzIG9yIGZhaWxzCisg ICAgd2hlbiBydW4gdW5kZXIgVU1MIG1heSBub3QgYWx3YXlzIGRvIHNvIG9uIHJlYWwgaGFyZHdh cmUuCisqICAgSGFyZHdhcmUgYW5kIFZNIGVudmlyb25tZW50cyBtYXkgbm90IGJlIGhlcm1ldGlj LiBLVW5pdCB0cmllcyBpdHMgYmVzdCB0bworICAgIHByb3ZpZGUgYSBoZXJtZXRpYyBlbnZpcm9u bWVudCB0byBydW4gdGVzdHM7IGhvd2V2ZXIsIGl0IGNhbm5vdCBtYW5hZ2Ugc3RhdGUKKyAgICB0 aGF0IGl0IGRvZXNuJ3Qga25vdyBhYm91dCBvdXRzaWRlIG9mIHRoZSBrZXJuZWwuIENvbnNlcXVl bnRseSwgdGVzdHMgdGhhdAorICAgIG1heSBiZSBoZXJtZXRpYyBvbiBVTUwgbWF5IG5vdCBiZSBo ZXJtZXRpYyBvbiBvdGhlciBhcmNoaXRlY3R1cmVzLgorKiAgIFNvbWUgZmVhdHVyZXMgYW5kIHRv b2xpbmcgbWF5IG5vdCBiZSBzdXBwb3J0ZWQgb3V0c2lkZSBvZiBVTUwuCisqICAgSGFyZHdhcmUg YW5kIFZNcyBhcmUgc2xvd2VyIHRoYW4gVU1MLgorCitOb25lIG9mIHRoZXNlIGFyZSByZWFzb25z IG5vdCB0byBydW4geW91ciBLVW5pdCB0ZXN0cyBvbiByZWFsIGhhcmR3YXJlOyB0aGV5IGFyZQor b25seSB0aGluZ3MgdG8gYmUgYXdhcmUgb2Ygd2hlbiBkb2luZyBzby4KKworVGhlIGJpZ2dlc3Qg aW1wZWRpbWVudCB3aWxsIGxpa2VseSBiZSB0aGF0IGNlcnRhaW4gS1VuaXQgZmVhdHVyZXMgYW5k CitpbmZyYXN0cnVjdHVyZSBtYXkgbm90IHN1cHBvcnQgeW91ciB0YXJnZXQgZW52aXJvbm1lbnQu IEZvciBleGFtcGxlLCBhdCB0aGlzCit0aW1lIHRoZSBLVW5pdCBXcmFwcGVyIChgYHRvb2xzL3Rl c3Rpbmcva3VuaXQva3VuaXQucHlgYCkgZG9lcyBub3Qgd29yayBvdXRzaWRlCitvZiBVTUwuIFVu Zm9ydHVuYXRlbHksIHRoZXJlIGlzIG5vIHdheSBhcm91bmQgdGhpcy4gVXNpbmcgVU1MIChvciBl dmVuIGp1c3QgYQorcGFydGljdWxhciBhcmNoaXRlY3R1cmUpIGFsbG93cyB1cyB0byBtYWtlIGEg bG90IG9mIGFzc3VtcHRpb25zIHRoYXQgbWFrZSBpdAorcG9zc2libGUgdG8gZG8gdGhpbmdzIHdo aWNoIG1pZ2h0IG90aGVyd2lzZSBiZSBpbXBvc3NpYmxlLgorCitOZXZlcnRoZWxlc3MsIGFsbCBj b3JlIEtVbml0IGZyYW1ld29yayBmZWF0dXJlcyBhcmUgZnVsbHkgc3VwcG9ydGVkIG9uIGFsbAor YXJjaGl0ZWN0dXJlcywgYW5kIHVzaW5nIHRoZW0gaXMgc3RyYWlnaHRmb3J3YXJkOiBhbGwgeW91 IG5lZWQgdG8gZG8gaXMgdG8gdGFrZQoreW91ciBrdW5pdGNvbmZpZywgeW91ciBLY29uZmlnIG9w dGlvbnMgZm9yIHRoZSB0ZXN0cyB5b3Ugd291bGQgbGlrZSB0byBydW4sIGFuZAorbWVyZ2UgdGhl bSBpbnRvIHdoYXRldmVyIGNvbmZpZyB5b3VyIGFyZSB1c2luZyBmb3IgeW91ciBwbGF0Zm9ybS4g VGhhdCdzIGl0IQorCitGb3IgZXhhbXBsZSwgbGV0J3Mgc2F5IHlvdSBoYXZlIHRoZSBmb2xsb3dp bmcga3VuaXRjb25maWc6CisKKy4uIGNvZGUtYmxvY2s6OiBub25lCisKKwlDT05GSUdfS1VOSVQ9 eQorCUNPTkZJR19LVU5JVF9FWEFNUExFX1RFU1Q9eQorCitJZiB5b3Ugd2FudGVkIHRvIHJ1biB0 aGlzIHRlc3Qgb24gYW4geDg2IFZNLCB5b3UgbWlnaHQgYWRkIHRoZSBmb2xsb3dpbmcgY29uZmln CitvcHRpb25zIHRvIHlvdXIgYGAuY29uZmlnYGA6CisKKy4uIGNvZGUtYmxvY2s6OiBub25lCisK KwlDT05GSUdfS1VOSVQ9eQorCUNPTkZJR19LVU5JVF9FWEFNUExFX1RFU1Q9eQorCUNPTkZJR19T RVJJQUxfODI1MD15CisJQ09ORklHX1NFUklBTF84MjUwX0NPTlNPTEU9eQorCitBbGwgdGhlc2Ug bmV3IG9wdGlvbnMgZG8gaXMgZW5hYmxlIHN1cHBvcnQgZm9yIGEgY29tbW9uIHNlcmlhbCBjb25z b2xlIG5lZWRlZAorZm9yIGxvZ2dpbmcuCisKK05leHQsIHlvdSBjb3VsZCBidWlsZCBhIGtlcm5l bCB3aXRoIHRoZXNlIHRlc3RzIGFzIGZvbGxvd3M6CisKKworLi4gY29kZS1ibG9jazo6IGJhc2gK KworCW1ha2UgQVJDSD14ODYgb2xkZGVmY29uZmlnCisJbWFrZSBBUkNIPXg4NgorCitPbmNlIHlv dSBoYXZlIGJ1aWx0IGEga2VybmVsLCB5b3UgY291bGQgcnVuIGl0IG9uIFFFTVUgYXMgZm9sbG93 czoKKworLi4gY29kZS1ibG9jazo6IGJhc2gKKworCXFlbXUtc3lzdGVtLXg4Nl82NCAtZW5hYmxl LWt2bSBcCisJCQkgICAtbSAxMDI0IFwKKwkJCSAgIC1rZXJuZWwgYXJjaC94ODZfNjQvYm9vdC9i ekltYWdlIFwKKwkJCSAgIC1hcHBlbmQgJ2NvbnNvbGU9dHR5UzAnIFwKKwkJCSAgIC0tbm9ncmFw aGljCisKK0ludGVyc3BlcnNlZCBpbiB0aGUga2VybmVsIGxvZ3MgeW91IG1pZ2h0IHNlZSB0aGUg Zm9sbG93aW5nOgorCisuLiBjb2RlLWJsb2NrOjogbm9uZQorCisJVEFQIHZlcnNpb24gMTQKKwkJ IyBTdWJ0ZXN0OiBleGFtcGxlCisJCTEuLjEKKwkJIyBleGFtcGxlX3NpbXBsZV90ZXN0OiBpbml0 aWFsaXppbmcKKwkJb2sgMSAtIGV4YW1wbGVfc2ltcGxlX3Rlc3QKKwlvayAxIC0gZXhhbXBsZQor CitDb25ncmF0dWxhdGlvbnMsIHlvdSBqdXN0IHJhbiBhIEtVbml0IHRlc3Qgb24gdGhlIHg4NiBh cmNoaXRlY3R1cmUhCisKK1dyaXRpbmcgbmV3IHRlc3RzIGZvciBvdGhlciBhcmNoaXRlY3R1cmVz CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgZmlyc3Qg dGhpbmcgeW91IG11c3QgZG8gaXMgYXNrIHlvdXJzZWxmIHdoZXRoZXIgaXQgaXMgbmVjZXNzYXJ5 IHRvIHdyaXRlIGEKK0tVbml0IHRlc3QgZm9yIGEgc3BlY2lmaWMgYXJjaGl0ZWN0dXJlLCBhbmQg dGhlbiB3aGV0aGVyIGl0IGlzIG5lY2Vzc2FyeSB0bword3JpdGUgdGhhdCB0ZXN0IGZvciBhIHBh cnRpY3VsYXIgcGllY2Ugb2YgaGFyZHdhcmUuIEluIGdlbmVyYWwsIHdyaXRpbmcgYSB0ZXN0Cit0 aGF0IGRlcGVuZHMgb24gaGF2aW5nIGFjY2VzcyB0byBhIHBhcnRpY3VsYXIgcGllY2Ugb2YgaGFy ZHdhcmUgb3Igc29mdHdhcmUgKG5vdAoraW5jbHVkZWQgaW4gdGhlIExpbnV4IHNvdXJjZSByZXBv KSBzaG91bGQgYmUgYXZvaWRlZCBhdCBhbGwgY29zdHMuCisKK0V2ZW4gaWYgeW91IG9ubHkgZXZl ciBwbGFuIG9uIHJ1bm5pbmcgeW91ciBLVW5pdCB0ZXN0IG9uIHlvdXIgaGFyZHdhcmUKK2NvbmZp Z3VyYXRpb24sIG90aGVyIHBlb3BsZSBtYXkgd2FudCB0byBydW4geW91ciB0ZXN0cyBhbmQgbWF5 IG5vdCBoYXZlIGFjY2VzcwordG8geW91ciBoYXJkd2FyZS4gSWYgeW91IHdyaXRlIHlvdXIgdGVz dCB0byBydW4gb24gVU1MLCB0aGVuIGFueW9uZSBjYW4gcnVuIHlvdXIKK3Rlc3RzIHdpdGhvdXQg a25vd2luZyBhbnl0aGluZyBhYm91dCB5b3VyIHBhcnRpY3VsYXIgc2V0dXAsIGFuZCB5b3UgY2Fu IHN0aWxsCitydW4geW91ciB0ZXN0cyBvbiB5b3VyIGhhcmR3YXJlIHNldHVwIGp1c3QgYnkgY29t cGlsaW5nIGZvciB5b3VyIGFyY2hpdGVjdHVyZS4KKworLi4gaW1wb3J0YW50OjoKKyAgIEFsd2F5 cyBwcmVmZXIgdGVzdHMgdGhhdCBydW4gb24gVU1MIHRvIHRlc3RzIHRoYXQgb25seSBydW4gdW5k ZXIgYSBwYXJ0aWN1bGFyCisgICBhcmNoaXRlY3R1cmUsIGFuZCBhbHdheXMgcHJlZmVyIHRlc3Rz IHRoYXQgcnVuIHVuZGVyIFFFTVUgb3IgYW5vdGhlciBlYXN5CisgICAoYW5kIG1vbml0YXJpbHkg ZnJlZSkgdG8gb2J0YWluIHNvZnR3YXJlIGVudmlyb25tZW50IHRvIGEgc3BlY2lmaWMgcGllY2Ug b2YKKyAgIGhhcmR3YXJlLgorCitOZXZlcnRoZWxlc3MsIHRoZXJlIGFyZSBzdGlsbCB2YWxpZCBy ZWFzb25zIHRvIHdyaXRlIGFuIGFyY2hpdGVjdHVyZSBvciBoYXJkd2FyZQorc3BlY2lmaWMgdGVz dDogZm9yIGV4YW1wbGUsIHlvdSBtaWdodCB3YW50IHRvIHRlc3Qgc29tZSBjb2RlIHRoYXQgcmVh bGx5IGJlbG9uZ3MKK2luIGBgYXJjaC9zb21lLWFyY2gvKmBgLiBFdmVuIHNvLCB0cnkgeW91ciBi ZXN0IHRvIHdyaXRlIHRoZSB0ZXN0IHNvIHRoYXQgaXQKK2RvZXMgbm90IGRlcGVuZCBvbiBwaHlz aWNhbCBoYXJkd2FyZTogaWYgc29tZSBvZiB5b3VyIHRlc3QgY2FzZXMgZG9uJ3QgbmVlZCB0aGUK K2hhcmR3YXJlLCBvbmx5IHJlcXVpcmUgdGhlIGhhcmR3YXJlIGZvciB0ZXN0cyB0aGF0IGFjdHVh bGx5IG5lZWQgaXQuCisKK05vdyB0aGF0IHlvdSBoYXZlIG5hcnJvd2VkIGRvd24gZXhhY3RseSB3 aGF0IGJpdHMgYXJlIGhhcmR3YXJlIHNwZWNpZmljLCB0aGUKK2FjdHVhbCBwcm9jZWR1cmUgZm9y IHdyaXRpbmcgYW5kIHJ1bm5pbmcgdGhlIHRlc3RzIGlzIHByZXR0eSBtdWNoIHRoZSBzYW1lIGFz Cit3cml0aW5nIG5vcm1hbCBLVW5pdCB0ZXN0cy4gT25lIHNwZWNpYWwgY2F2ZWF0IGlzIHRoYXQg eW91IGhhdmUgdG8gcmVzZXQKK2hhcmR3YXJlIHN0YXRlIGluIGJldHdlZW4gdGVzdCBjYXNlczsg aWYgdGhpcyBpcyBub3QgcG9zc2libGUsIHlvdSBtYXkgb25seSBiZQorYWJsZSB0byBydW4gb25l IHRlc3QgY2FzZSBwZXIgaW52b2NhdGlvbi4KKworLi4gVE9ETyhicmVuZGFuaGlnZ2luc0Bnb29n bGUuY29tKTogQWRkIGFuIGFjdHVhbCBleGFtcGxlIG9mIGFuIGFyY2hpdGVjdHVyZQorICAgZGVw ZW5kZW50IEtVbml0IHRlc3QuCi0tIAoyLjIyLjAuNDEwLmdkOGZkYmUyMWI1LWdvb2cKCl9fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmRyaS1kZXZlbCBtYWls aW5nIGxpc3QKZHJpLWRldmVsQGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZy ZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2RyaS1kZXZlbA==