From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [216.205.24.124]) by gabe.freedesktop.org (Postfix) with ESMTPS id B0A276E7FE for ; Wed, 30 Sep 2020 17:32:05 +0000 (UTC) From: Lyude Date: Wed, 30 Sep 2020 13:31:50 -0400 Message-Id: <20200930173150.431995-6-lyude@redhat.com> In-Reply-To: <20200930173150.431995-1-lyude@redhat.com> References: <20200930173150.431995-1-lyude@redhat.com> MIME-Version: 1.0 Subject: [igt-dev] [PATCH i-g-t v5 5/5] tests: Add nouveau-crc tests List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: igt-dev-bounces@lists.freedesktop.org Sender: "igt-dev" To: igt-dev@lists.freedesktop.org Cc: nouveau@lists.freedesktop.org List-ID: RnJvbTogTHl1ZGUgUGF1bCA8bHl1ZGVAcmVkaGF0LmNvbT4KCldlJ3JlIGZpbmFsbHkgZ2V0dGlu ZyBDUkMgc3VwcG9ydCBpbiBub3V2ZWF1LCBzbyBsZXQncyBzdGFydCB0ZXN0aW5nCnRoaXMgaW4g aWd0IGFzIHdlbGwhIFdoaWxlIHRoZSBub3JtYWwgQ1JDIGNhcHR1cmUgdGVzdHMgYXJlIG5pY2Us CnRoZXJlJ3MgYSBudW1iZXIgb2YgTnZpZGlhLXNwZWNpZmljIGhhcmR3YXJlIGNoYXJhY3Rlcmlz dGljcyB0aGF0IHdlCm5lZWQgdG8gdGVzdCBhcyB3ZWxsLgoKVGhlIG1vc3QgaW1wb3J0YW50IG9u ZSBpcyBrbm93biBhcyBhICJub3RpZmllciBjb250ZXh0IGZsaXAiLiBCYXNpY2FsbHksCk52aWRp YSBHUFVzIHN0b3JlIGdlbmVyYXRlZCBDUkNzIGluIGFuIGFsbG9jYXRlZCBtZW1vcnkgcmVnaW9u LCByZWZlcnJlZAp0byBhcyB0aGUgbm90aWZpZXIgY29udGV4dCwgdGhhdCB0aGUgZHJpdmVyIHBy b2dyYW1zIGl0c2VsZi4gU3RyYW5nZWx5LAp0aGlzIHJlZ2lvbiBjYW4gb25seSBob2xkIGEgbGlt aXRlZCBudW1iZXIgb2YgQ1JDIGVudHJpZXMsIGFuZCBvbmNlIGl0CnJ1bnMgb3V0IG9mIGF2YWls YWJsZSBlbnRyaWVzIHRoZSBoYXJkd2FyZSBzaW1wbHkgc2V0cyBhbiBvdmVycnVuIGJpdAphbmQg c3RvcHMgd3JpdGluZyBhbnkgbmV3IENSQyBlbnRyaWVzLgoKU2luY2UgaWd0LWdwdS10b29scyBk b2Vzbid0IHJlYWxseSBoYXZlIGFuIGV4cGVjdGF0aW9uIG9mIG9ubHkgYmVpbmcKYWJsZSB0byBn cmFiIGEgbGltaXRlZCBudW1iZXIgb2YgQ1JDcywgd2Ugd29yayBhcm91bmQgdGhpcyBpbiBub3V2 ZWF1IGJ5CmFsbG9jYXRpbmcgdHdvIHNlcGFyYXRlIENSQyBub3RpZmllciByZWdpb25zIGVhY2gg dGltZSB3ZSBzdGFydApjYXB0dXJpbmcgQ1JDcywgYW5kIHRoZW4gZmxpcCBiZXR3ZWVuIHRoZW0g d2hlbmV2ZXIgd2UgZ2V0IGNsb3NlIHRvCmZpbGxpbmcgb3VyIGN1cnJlbnRseSBwcm9ncmFtbWVk IG5vdGlmaWVyIGNvbnRleHQuIFdoaWxlIHRoaXMga2VlcHMgdGhlCm51bWJlciBvZiBDUkMgZW50 cmllcyB3ZSBsb3NlIHRvIGFuIGFic29sdXRlIG1pbmltdW0sIHdlIGFyZSBndWFyYW50ZWVkCnRv IGxvc2UgZXhhY3RseSBvbmUgQ1JDIGVudHJ5IGJldHdlZW4gY29udGV4dCBmbGlwcy4gVGh1cywg d2UgYWRkIHNvbWUKdGVzdHMgdG8gZW5zdXJlIHRoYXQgbm91dmVhdSBoYW5kbGVzIHRoZXNlIGZs aXBzIGNvcnJlY3RseQoocGlwZS1bQS1GXS1jdHgtZmxpcC1kZXRlY3Rpb24pLCBhbmQgdGhhdCBp Z3QgaXRzZWxmIGlzIGFsc28gYWJsZSB0bwpoYW5kbGUgdGhlbSBjb3JyZWN0bHkgKHBpcGUtW0Et Rl0tY3R4LWZsaXAtc2tpcC1jdXJyZW50LWZyYW1lKS4gU2luY2UKdGhlc2UgdGVzdHMgdXNlIGEg ZGVidWdmcyBpbnRlcmZhY2UgdG8gbWFudWFsbHkgY29udHJvbCB0aGUgbm90aWZpZXIKY29udGV4 dCBmbGlwIHRocmVzaG9sZCwgd2UgYWxzbyBhZGQgb25lIHRlc3QgdG8gZW5zdXJlIHRoYXQgYW55 IGZsaXAKdGhyZXNob2xkcyB3ZSBzZXQgYXJlIGNsZWFyZWQgYWZ0ZXIgYSBzaW5nbGUgQ1JDIGNh cHR1cmUKKGN0eC1mbGlwLXRocmVzaG9sZC1yZXNldC1hZnRlci1jYXB0dXJlKS4KCkluIGFkZGl0 aW9uLCB3ZSBhbHNvIGFkZCBzb21lIHNpbXBsZSB0ZXN0cyB0byB0ZXN0IE52aWRpYS1zcGVjaWZp YyBDUkMKc291cmNlcy4KCkNoYW5nZXMgc2luY2UgdjQ6CiogRG9uJ3QgY2xlYXIgdGhlIGN1cnJl bnRseSBzZXQgZGlzcGxheSBwaXBlIGF0IHRoZSBlbmQgb2YgZWFjaCBpdGVyYXRpb24gb2YKICBw aXBlIHRlc3RzLCBvdGhlcndpc2Ugd2UnbGwgYWNjaWRlbnRhbGx5IGxlYXZlIG91cnNlbHZlcyB3 aXRoIG5vIGNvbmZpZ3VyZWQKICBDUlRDcyB3aGVuIHRoZSB0ZXN0IGV4aXRzLiBJbnN0ZWFkIGNs ZWFyIGl0IGF0IHRoZSBzdGFydCBvZiBlYWNoIGl0ZXJhdGlvbiBvZgogIHBpcGUgdGVzdHMgYnV0 IG9ubHkgaWYgd2UganVzdCBmaW5pc2hlZCB0ZXN0aW5nIGEgZGlmZmVyZW50IHBpcGUuCiogR2V0 IHJpZCBvZiBvdXRkYXRlZCBjb21tZW50IGFib3V0IHRlc3RfY3R4X2ZsaXBfZGV0ZWN0aW9uKCkg YmVpbmcgbGltaXRlZCB0byBhCiAgc2luZ2xlIHBpcGUKKiBDbGFyaWZ5IGNvbW1lbnRzIGRlc2Ny aWJpbmcgZ3VhcmRpbmcgYWdhaW5zdCBDUkMgY29sbGlzaW9ucyBpbgogIHRlc3RfY3R4X2ZsaXBf ZGV0ZWN0aW9uKCkKKiBNYWtlIGEgc21hbGwgZG9jIGJsdXJiIGZvciB0ZXN0X2N0eF9mbGlwX2Rl dGVjdGlvbigpLCBpdCdzIGEgcmF0aGVyIHVudXN1YWwKICBhbmQgbnZpZGlhLXNwZWNpZmljIGJl aGF2aW9yCiogTWVudGlvbiBpbiB0ZXN0X2N0eF9mbGlwX2RldGVjdGlvbigpIHRoYXQgd2UgYWxz byBleHBsaWNpdGx5IGNoZWNrIHRoYXQgd2UndmUKICBza2lwcGVkIC1leGFjdGx5LSBvbmUgZnJh bWUuIHRsO2RyIG1vcmUgdGhlbiBvbmUgZnJhbWUgaXMgdG9vIHNsb3csIGxlc3MgdGhlbgogIG9u ZSBmcmFtZSBtZWFucyBhIGNvbnRleHQgZmxpcCBqdXN0IGRpZG4ndCBoYXBwZW4gd2hlbiBpdCBz aG91bGQgaGF2ZS4KKiBBbHNvIGNoZWNrIHRoYXQgdGhlIGZsaXAgdGhyZXNob2xkIHdlIHNldCBp bgogIHRlc3RfY3R4X2ZsaXBfdGhyZXNob2xkX3Jlc2V0X2FmdGVyX2NhcHR1cmUoKSBpc24ndCBp Z25vcmVkIGJ5IHRoZSBkcml2ZXIKKiBzLyhjcmVhdGV8ZGVzdHJveSlfY29sb3JzKCkvXDFfY3Jj X2NvbG9ycy9nCkNoYW5nZXMgc2luY2UgdjM6CiogVXBkYXRlIC5naXRsYWItY2kueW1sIHRvIG1h a2Ugbm91dmVhdSBleGVtcHQgZnJvbSB0aGUgdGVzdC1saXN0LWRpZmYKICB0ZXN0LCBzaW5jZSBh bGwgdGhlIGNvb2wga2lkcyBhcmUgZG9pbmcgaXQgYW5kIHdlIGRvbid0IGNhcmUgYWJvdXQKICBh dXRvdG9vbHMgZm9yIG5vdXZlYXUKQ2hhbmdlcyBzaW5jZSB2MjoKKiBGaXggbWlzc2luZyBpbmNs dWRlIGluIHRlc3RzL25vdXZlYXVfY3JjLmMsIHRoaXMgc2hvdWxkIGZpeCBidWlsZHMgZm9yCiAg YWFyY2g2NApDaGFuZ2VzIHNpbmNlIHYxOgoqIEZpeCBjb3B5cmlnaHQgeWVhciBpbiBub3V2ZWF1 X2NyYy5jCgpTaWduZWQtb2ZmLWJ5OiBMeXVkZSBQYXVsIDxseXVkZUByZWRoYXQuY29tPgotLS0K IC5naXRsYWItY2kueW1sICAgICAgfCAgIDIgKy0KIGxpYi9kcm10ZXN0LmMgICAgICAgfCAgMTAg KysKIGxpYi9kcm10ZXN0LmggICAgICAgfCAgIDIgKwogdGVzdHMvbWVzb24uYnVpbGQgICB8ICAg MSArCiB0ZXN0cy9ub3V2ZWF1X2NyYy5jIHwgNDE0ICsrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrCiA1IGZpbGVzIGNoYW5nZWQsIDQyOCBpbnNlcnRpb25zKCspLCAx IGRlbGV0aW9uKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgdGVzdHMvbm91dmVhdV9jcmMuYwoKZGlm ZiAtLWdpdCBhLy5naXRsYWItY2kueW1sIGIvLmdpdGxhYi1jaS55bWwKaW5kZXggZDdmZGJmZGUu LmUyMjZkOWQ3IDEwMDY0NAotLS0gYS8uZ2l0bGFiLWNpLnltbAorKysgYi8uZ2l0bGFiLWNpLnlt bApAQCAtMjQxLDcgKzI0MSw3IEBAIHRlc3Q6dGVzdC1saXN0LWRpZmY6CiAgICAgLSBidWlsZDp0 ZXN0cy1kZWJpYW4tYXV0b3Rvb2xzCiAgICAgLSBidWlsZDp0ZXN0cy1kZWJpYW4tbWVzb24KICAg c3RhZ2U6IHRlc3QKLSAgc2NyaXB0OiBkaWZmIDwoc2VkICJzLyAvXG4vZyIgbWVzb24tdGVzdC1s aXN0LnR4dHwgZ3JlcCAtdiAndmM0XHx2M2RcfHBhbmZyb3N0JyB8IHNvcnQpIDwoc2VkICJzLyAv XG4vZyIgYXV0b3Rvb2xzLXRlc3QtbGlzdC50eHQgfCBzb3J0KQorICBzY3JpcHQ6IGRpZmYgPChz ZWQgInMvIC9cbi9nIiBtZXNvbi10ZXN0LWxpc3QudHh0fCBncmVwIC12ICd2YzRcfHYzZFx8cGFu ZnJvc3RcfG5vdXZlYXUnIHwgc29ydCkgPChzZWQgInMvIC9cbi9nIiBhdXRvdG9vbHMtdGVzdC1s aXN0LnR4dCB8IHNvcnQpCiAKIHRlc3Q6bGlzdC11bmRvY3VtZW50ZWQtdGVzdHM6CiAgIGRlcGVu ZGVuY2llczoKZGlmZiAtLWdpdCBhL2xpYi9kcm10ZXN0LmMgYi9saWIvZHJtdGVzdC5jCmluZGV4 IGM3MzJkMWRkLi40NDdmNTQzNSAxMDA2NDQKLS0tIGEvbGliL2RybXRlc3QuYworKysgYi9saWIv ZHJtdGVzdC5jCkBAIC0xMTQsNiArMTE0LDExIEBAIGJvb2wgaXNfaTkxNV9kZXZpY2UoaW50IGZk KQogCXJldHVybiBfX2lzX2RldmljZShmZCwgImk5MTUiKTsKIH0KIAorYm9vbCBpc19ub3V2ZWF1 X2RldmljZShpbnQgZmQpCit7CisJcmV0dXJuIF9faXNfZGV2aWNlKGZkLCAibm91dmVhdSIpOwor fQorCiBib29sIGlzX3ZjNF9kZXZpY2UoaW50IGZkKQogewogCXJldHVybiBfX2lzX2RldmljZShm ZCwgInZjNCIpOwpAQCAtNjIyLDYgKzYyNywxMSBAQCB2b2lkIGlndF9yZXF1aXJlX2ludGVsKGlu dCBmZCkKIAlpZ3RfcmVxdWlyZShpc19pOTE1X2RldmljZShmZCkpOwogfQogCit2b2lkIGlndF9y ZXF1aXJlX25vdXZlYXUoaW50IGZkKQoreworCWlndF9yZXF1aXJlKGlzX25vdXZlYXVfZGV2aWNl KGZkKSk7Cit9CisKIHZvaWQgaWd0X3JlcXVpcmVfdmM0KGludCBmZCkKIHsKIAlpZ3RfcmVxdWly ZShpc192YzRfZGV2aWNlKGZkKSk7CmRpZmYgLS1naXQgYS9saWIvZHJtdGVzdC5oIGIvbGliL2Ry bXRlc3QuaAppbmRleCBjNTZiZmFmYS4uZGQ0Y2QzODQgMTAwNjQ0Ci0tLSBhL2xpYi9kcm10ZXN0 LmgKKysrIGIvbGliL2RybXRlc3QuaApAQCAtOTYsMTAgKzk2LDEyIEBAIGludCBfX2RybV9vcGVu X2RyaXZlcl9yZW5kZXIoaW50IGNoaXBzZXQpOwogCiB2b2lkIGlndF9yZXF1aXJlX2FtZGdwdShp bnQgZmQpOwogdm9pZCBpZ3RfcmVxdWlyZV9pbnRlbChpbnQgZmQpOwordm9pZCBpZ3RfcmVxdWly ZV9ub3V2ZWF1KGludCBmZCk7CiB2b2lkIGlndF9yZXF1aXJlX3ZjNChpbnQgZmQpOwogCiBib29s IGlzX2FtZGdwdV9kZXZpY2UoaW50IGZkKTsKIGJvb2wgaXNfaTkxNV9kZXZpY2UoaW50IGZkKTsK K2Jvb2wgaXNfbm91dmVhdV9kZXZpY2UoaW50IGZkKTsKIGJvb2wgaXNfdmM0X2RldmljZShpbnQg ZmQpOwogCiAvKioKZGlmZiAtLWdpdCBhL3Rlc3RzL21lc29uLmJ1aWxkIGIvdGVzdHMvbWVzb24u YnVpbGQKaW5kZXggNTE1Zjc1MjguLjMyZjAxMWU5IDEwMDY0NAotLS0gYS90ZXN0cy9tZXNvbi5i dWlsZAorKysgYi90ZXN0cy9tZXNvbi5idWlsZApAQCAtNzYsNiArNzYsNyBAQCB0ZXN0X3Byb2dz ID0gWwogCSdrbXNfdnJyJywKIAkna21zX3dyaXRlYmFjaycsCiAJJ21ldGFfdGVzdCcsCisJJ25v dXZlYXVfY3JjJywKIAkncGFuZnJvc3RfZ2V0X3BhcmFtJywKIAkncGFuZnJvc3RfZ2VtX25ldycs CiAJJ3BhbmZyb3N0X3ByaW1lJywKZGlmZiAtLWdpdCBhL3Rlc3RzL25vdXZlYXVfY3JjLmMgYi90 ZXN0cy9ub3V2ZWF1X2NyYy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwLi5m ODcwNWI1ZQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL25vdXZlYXVfY3JjLmMKQEAgLTAsMCAr MSw0MTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgwqkgMjAyMCBSZWQgSGF0IEluYy4KKyAqCisgKiBQ ZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNv biBvYnRhaW5pbmcgYQorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRv Y3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKKyAqIHRvIGRlYWwgaW4gdGhlIFNv ZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24K KyAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0 cmlidXRlLCBzdWJsaWNlbnNlLAorICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2Fy ZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCisgKiBTb2Z0d2FyZSBpcyBmdXJu aXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoK KyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNl IChpbmNsdWRpbmcgdGhlIG5leHQKKyAqIHBhcmFncmFwaCkgc2hhbGwgYmUgaW5jbHVkZWQgaW4g YWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUKKyAqIFNvZnR3YXJlLgor ICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZ IE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBM SU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1Mg Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVO VCBTSEFMTAorICogVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZP UiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBB TiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HCisgKiBGUk9N LCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9S IE9USEVSIERFQUxJTkdTCisgKiBJTiBUSEUgU09GVFdBUkUuCisgKgorICovCisKKyNpbmNsdWRl IDxmY250bC5oPgorI2luY2x1ZGUgImlndC5oIgorI2luY2x1ZGUgImlndF9zeXNmcy5oIgorCitJ R1RfVEVTVF9ERVNDUklQVElPTigKKyJUZXN0cyBjZXJ0YWluIGFzcGVjdHMgb2YgQ1JDIGNhcHR1 cmUgdGhhdCBhcmUgZXhjbHVzaXZlIHRvIG52aWRpYSBoYXJkd2FyZSwgIgorInN1Y2ggYXMgY29u dGV4dCBmbGlwcGluZy4iKTsKKwordHlwZWRlZiBzdHJ1Y3QgeworCWludCBwaXBlOworCWludCBk cm1fZmQ7CisJaW50IG52X2NyY19kaXI7CisJaWd0X2Rpc3BsYXlfdCBkaXNwbGF5OworCWlndF9v dXRwdXRfdCAqb3V0cHV0OworCWlndF9wbGFuZV90ICpwcmltYXJ5OworCWRybU1vZGVNb2RlSW5m byAqbW9kZTsKKwlpZ3RfZmJfdCBkZWZhdWx0X2ZiOworfSBkYXRhX3Q7CisKK3N0cnVjdCBjb2xv cl9mYiB7CisJZG91YmxlIHIsIGcsIGI7CisJaWd0X2NyY190IGNyYzsKKwlpZ3RfZmJfdCBmYjsK K307CisKKyNkZWZpbmUgSEVYX0NPTE9SKHJfLCBnXywgYl8pIFwKKwl7IC5yID0gKHJfIC8gMjU1 LjApLCAuZyA9IChnXyAvIDI1NS4wKSwgLmIgPSAoYl8gLyAyNTUuMCkgfQorCitzdGF0aWMgdm9p ZCBzZXRfY3JjX2ZsaXBfdGhyZXNob2xkKGRhdGFfdCAqZGF0YSwgdW5zaWduZWQgaW50IHRocmVz aG9sZCkKK3sKKwlpZ3RfZGVidWcoIlNldHRpbmcgQ1JDIG5vdGlmaWVyIGZsaXAgdGhyZXNob2xk IHRvICVkXG4iLCB0aHJlc2hvbGQpOworCWlndF9hc3NlcnRfbHQoMCwgaWd0X3N5c2ZzX3ByaW50 ZihkYXRhLT5udl9jcmNfZGlyLCAiZmxpcF90aHJlc2hvbGQiLCAiJWQiLCB0aHJlc2hvbGQpKTsK K30KKworLyogSW5pdGlhbGl6ZSBlYWNoIGNvbG9yX2ZiIGFsb25nIHdpdGggaXRzIHJlc3BlY3Rp dmUgQ1JDICovCitzdGF0aWMgdm9pZCBjcmVhdGVfY3JjX2NvbG9ycyhkYXRhX3QgKmRhdGEsCisJ CQkgICAgICBzdHJ1Y3QgY29sb3JfZmIgKmNvbG9ycywKKwkJCSAgICAgIHNpemVfdCBsZW4sCisJ CQkgICAgICBpZ3RfcGlwZV9jcmNfdCAqcGlwZV9jcmMpCit7CisJY2hhciAqY3JjX3N0cjsKKwor CWlndF9waXBlX2NyY19zdGFydChwaXBlX2NyYyk7CisKKwlmb3IgKGludCBpID0gMDsgaSA8IGxl bjsgaSsrKSB7CisJCWlndF9jcmVhdGVfY29sb3JfZmIoZGF0YS0+ZHJtX2ZkLAorCQkJCSAgICBk YXRhLT5tb2RlLT5oZGlzcGxheSwKKwkJCQkgICAgZGF0YS0+bW9kZS0+dmRpc3BsYXksCisJCQkJ ICAgIERSTV9GT1JNQVRfWFJHQjg4ODgsCisJCQkJICAgIExPQ0FMX0RSTV9GT1JNQVRfTU9EX05P TkUsCisJCQkJICAgIGNvbG9yc1tpXS5yLCBjb2xvcnNbaV0uZywgY29sb3JzW2ldLmIsCisJCQkJ ICAgICZjb2xvcnNbaV0uZmIpOworCisJCWlndF9wbGFuZV9zZXRfZmIoZGF0YS0+cHJpbWFyeSwg JmNvbG9yc1tpXS5mYik7CisJCWlndF9kaXNwbGF5X2NvbW1pdCgmZGF0YS0+ZGlzcGxheSk7CisJ CWlndF9waXBlX2NyY19nZXRfY3VycmVudChkYXRhLT5kcm1fZmQsIHBpcGVfY3JjLCAmY29sb3Jz W2ldLmNyYyk7CisKKwkJY3JjX3N0ciA9IGlndF9jcmNfdG9fc3RyaW5nKCZjb2xvcnNbaV0uY3Jj KTsKKwkJaWd0X2RlYnVnKCJDUkMgZm9yIGZyYW1lICVkIG9mIHBhdHRlcm46ICVzXG4iLAorCQkJ ICBpLCBjcmNfc3RyKTsKKwkJZnJlZShjcmNfc3RyKTsKKwl9CisKKwlpZ3RfcGlwZV9jcmNfc3Rv cChwaXBlX2NyYyk7Cit9CisKK3N0YXRpYyB2b2lkIGRlc3Ryb3lfY3JjX2NvbG9ycyhkYXRhX3Qg KmRhdGEsIHN0cnVjdCBjb2xvcl9mYiAqY29sb3JzLCBzaXplX3QgbGVuKQoreworCS8qIFNvIHdl IGRvbid0IHR1cm4gb2ZmIHRoZSBwaXBlIGlmIHdlIHJlbW92ZSBpdCdzIGN1cnJlbnQgZmIgKi8K KwlpZ3RfcGxhbmVfc2V0X2ZiKGRhdGEtPnByaW1hcnksICZkYXRhLT5kZWZhdWx0X2ZiKTsKKwor CWZvciAoaW50IGkgPSAwOyBpIDwgbGVuOyBpKyspCisJCWlndF9yZW1vdmVfZmIoZGF0YS0+ZHJt X2ZkLCAmY29sb3JzW2ldLmZiKTsKK30KKworLyoKKyAqIE52aWRpYSBHUFVzIHN0b3JlIENSQ3Mg aW4gYSBsaW1pdGVkIG1lbW9yeSB0cmVnaW9uIGNhbGxlZCB0aGUgQ1JDIG5vdGlmaWVyIGNvbnRl eHQuIFdoZW4gdGhpcworICogcmVnaW9uIGZpbGxzLCBuZXcgQ1JDcyBhcmUgbm90IHJlcG9ydGVk LiBOb3V2ZWF1IHdvcmtzIGFyb3VuZCB0aGlzIGJ5IGFsbG9jYXRpbmcgdHdvIG5vdGlmaWVyCisg KiBjb250ZW50cywgYW5kIHRoZW4gZmxpcHMgYmV0d2VlbiB0aGVtIHdoZW5ldmVyIHdlIHBhc3Mg YSBzcGVjaWZpYyB0aHJlc2hvbGQuIE5vdGUgdGhhdCBldmVuIHdpdGgKKyAqIHRoaXMgYXBwcm9h Y2gsIGEgc2luZ2xlIGZyYW1lIGlzIGxvc3QgZHVyaW5nIHRoZSBjb250ZXh0IGZsaXAuCisgKi8K K3N0YXRpYyB2b2lkIHRlc3RfY3R4X2ZsaXBfZGV0ZWN0aW9uKGRhdGFfdCAqZGF0YSkKK3sKKwlz dHJ1Y3QgY29sb3JfZmIgY29sb3JzW10gPSB7CisJCUhFWF9DT0xPUigweEZGLCAweDAwLCAweDE4 KSwKKwkJSEVYX0NPTE9SKDB4RkYsIDB4QTUsIDB4MkMpLAorCQlIRVhfQ09MT1IoMHhGRiwgMHhG RiwgMHg0MSksCisJCUhFWF9DT0xPUigweDAwLCAweDgwLCAweDE4KSwKKwkJSEVYX0NPTE9SKDB4 MDAsIDB4MDAsIDB4RjkpLAorCQlIRVhfQ09MT1IoMHg4NiwgMHgwMCwgMHg3RCksCisJfTsKKwlp Z3Rfb3V0cHV0X3QgKm91dHB1dCA9IGRhdGEtPm91dHB1dDsKKwlpZ3RfcGxhbmVfdCAqcHJpbWFy eSA9IGRhdGEtPnByaW1hcnk7CisJaWd0X3BpcGVfY3JjX3QgKnBpcGVfY3JjOworCWNvbnN0IGlu dCBuX2NvbG9ycyA9IEFSUkFZX1NJWkUoY29sb3JzKTsKKwljb25zdCBpbnQgbl9jcmNzID0gMjA7 CisJaWd0X2NyY190ICpjcmNzID0gTlVMTDsKKwlpbnQgc3RhcnQgPSAtMSwgZnJhbWUsIHN0YXJ0 X2NvbG9yID0gLTEsIGk7CisJYm9vbCBmb3VuZF9za2lwID0gZmFsc2U7CisKKwlwaXBlX2NyYyA9 IGlndF9waXBlX2NyY19uZXcoZGF0YS0+ZHJtX2ZkLCBkYXRhLT5waXBlLCAiYXV0byIpOworCisJ Y3JlYXRlX2NyY19jb2xvcnMoZGF0YSwgY29sb3JzLCBuX2NvbG9ycywgcGlwZV9jcmMpOworCisJ c2V0X2NyY19mbGlwX3RocmVzaG9sZChkYXRhLCBuX2NyY3MgLyAyKTsKKwlpZ3RfcGlwZV9jcmNf c3RhcnQocGlwZV9jcmMpOworCisJZm9yIChpID0gMDsgaSA8IG5fY3JjczsgaSsrKSB7CisJCWNv bnN0IGludCBjb2xvcl9pZHggPSBpICUgbl9jb2xvcnM7CisKKwkJaWd0X3BsYW5lX3NldF9mYihw cmltYXJ5LCAmY29sb3JzW2NvbG9yX2lkeF0uZmIpOworCQlkb19vcl9kaWUoZHJtTW9kZVBhZ2VG bGlwKGRhdGEtPmRybV9mZCwKKwkJCQkJICBvdXRwdXQtPmNvbmZpZy5jcnRjLT5jcnRjX2lkLAor CQkJCQkgIGNvbG9yc1tjb2xvcl9pZHhdLmZiLmZiX2lkLAorCQkJCQkgIERSTV9NT0RFX1BBR0Vf RkxJUF9FVkVOVCwKKwkJCQkJICBOVUxMKSk7CisJCWttc3Rlc3Rfd2FpdF9mb3JfcGFnZWZsaXAo ZGF0YS0+ZHJtX2ZkKTsKKwl9CisKKwlpZ3RfcGlwZV9jcmNfZ2V0X2NyY3MocGlwZV9jcmMsIG5f Y3JjcywgJmNyY3MpOworCWlndF9waXBlX2NyY19zdG9wKHBpcGVfY3JjKTsKKworCS8qCisJICog R3VhcmQgYWdhaW5zdCBDUkMgY29sbGlzaW9ucyBpbiB0aGUgY29sb3IgZnJhbWVidWZmZXJzIGJ5 IGZpbmRpbmcgdGhlIGZpcnN0IGNvbG9yIGluIG91cgorCSAqIHBhdHRlcm4gd2l0aCBhIENSQyB0 aGF0IGRpZmZlcnMgZnJvbSB0aGUgbGFzdCBDUkMuIFRoYXQgQ1JDIGNhbiB0aGVuIGJlIHVzZWQg dG8gZmluZCB0aGUKKwkgKiBzdGFydCBvZiB0aGUgcGF0dGVybgorCSAqLworCWZvciAoaSA9IDA7 IGkgPCBuX2NvbG9ycyAtIDE7IGkrKykgeworCQlpZiAoaWd0X2NoZWNrX2NyY19lcXVhbCgmY29s b3JzW2ldLmNyYywgJmNvbG9yc1tuX2NvbG9ycyAtIDFdLmNyYykpCisJCQljb250aW51ZTsKKwor CQlpZ3RfZGVidWcoIlVzaW5nIGZyYW1lICVkIG9mIHBhdHRlcm4gZm9yIGZpbmRpbmcgc3RhcnRc biIsIGkpOworCQlzdGFydF9jb2xvciA9IGk7CisJCWJyZWFrOworCX0KKwlpZ3RfYXNzZXJ0X2x0 ZSgwLCBzdGFydF9jb2xvcik7CisKKwkvKiBOb3csIGZpZ3VyZSBvdXQgd2hlcmUgdGhlIHBhdHRl cm4gc3RhcnRzICovCisJZm9yIChpID0gMDsgaSA8IG5fY3JjczsgaSsrKSB7CisJCWlmICghaWd0 X2NoZWNrX2NyY19lcXVhbCgmY29sb3JzW3N0YXJ0X2NvbG9yXS5jcmMsICZjcmNzW2ldKSkKKwkJ CWNvbnRpbnVlOworCisJCXN0YXJ0ID0gaSAtIHN0YXJ0X2NvbG9yOworCQlmcmFtZSA9IGNyY3Nb aV0uZnJhbWU7CisJCWlndF9kZWJ1ZygiUGF0dGVybiBzdGFydGVkIG9uIGZyYW1lICVkXG4iLCBm cmFtZSk7CisJCWJyZWFrOworCX0KKwlpZ3RfYXNzZXJ0X2x0ZSgwLCBzdGFydCk7CisKKwkvKiBB bmQgZmluYWxseSwgYXNzZXJ0IHRoYXQgYWNjb3JkaW5nIHRvIHRoZSBDUkNzIGV4YWN0bHkgYWxs IGJ1dCBvbmUKKwkgKiBmcmFtZSB3YXMgZGlzcGxheWVkIGluIG9yZGVyLiBUaGUgbWlzc2luZyBm cmFtZSBjb21lcyBmcm9tCisJICogKGluZXZpdGFibHkpIGxvc2luZyBhIHNpbmdsZSBDUkMgZXZl bnQgd2hlbiBub3V2ZWF1IHN3aXRjaGVzIG5vdGlmaWVyCisJICogY29udGV4dHMKKwkgKi8KKwlm b3IgKGkgPSBzdGFydDsgaSA8IG5fY3JjczsgaSsrLCBmcmFtZSsrKSB7CisJCWlndF9jcmNfdCAq Y3JjID0gJmNyY3NbaV07CisJCWNoYXIgKmNyY19zdHI7CisJCWludCBjb2xvcl9pZHg7CisKKwkJ Y3JjX3N0ciA9IGlndF9jcmNfdG9fc3RyaW5nKGNyYyk7CisJCWlndF9kZWJ1ZygiQ1JDICVkOiB2 Ymw9JWQgdmFsPSVzXG4iLCBpLCBjcmMtPmZyYW1lLCBjcmNfc3RyKTsKKwkJZnJlZShjcmNfc3Ry KTsKKworCQlpZiAoIWZvdW5kX3NraXAgJiYgY3JjLT5mcmFtZSAhPSBmcmFtZSkgeworCQkJaWd0 X2RlYnVnKCJeXl4gRm91bmQgZXhwZWN0ZWQgc2tpcHBlZCBDUkMgJWQgXl5eXG4iLAorCQkJCSAg Y3JjLT5mcmFtZSAtIDEpOworCQkJZm91bmRfc2tpcCA9IHRydWU7CisJCQlmcmFtZSsrOworCQl9 CisKKwkJLyogV2Ugc2hvdWxkIG5ldmVyIHNraXAgbW9yZSB0aGVuIG9uZSBmcmFtZSwgYXMgd2l0 aCBub3V2ZWF1J3MgY3VycmVudCBDUkMKKwkJICogaW1wbGVtZW50YXRpb24gdGhpcyB3b3VsZCBt ZWFuIHRoYXQgd2UndmUgbG9zdCB0cmFjayBvZiB3aGljaCBDUkMgY29ycmVzcG9uZHMgdG8KKwkJ ICogd2hpY2ggZnJhbWUsIG1ha2luZyBvdXIgZnJhbWUgaW5kZXggdW5yZWxpYWJsZS4gU28sIHdl IGFsc28gY2hlY2sgZWFjaCBmcmFtZSB0aGF0CisJCSAqIGNvbWVzIGFmdGVyIHRoZSBza2lwLCBh bmQgZW5zdXJlIHRoYXQgaXQgbWF0Y2hlcyB0aGUgY29sb3JzIHRoYXQgd2UgZXhwZWN0LgorCQkg Ki8KKwkJaWYgKGZvdW5kX3NraXApIHsKKwkJCWlndF9hc3NlcnRfZXEoY3JjLT5mcmFtZSwgZnJh bWUpOworCQkJY29sb3JfaWR4ID0gKGkgLSBzdGFydCArIDEpICUgbl9jb2xvcnM7CisJCX0gZWxz ZSB7CisJCQljb2xvcl9pZHggPSAoaSAtIHN0YXJ0KSAlIG5fY29sb3JzOworCQl9CisKKwkJaWd0 X2Fzc2VydF9jcmNfZXF1YWwoY3JjLCAmY29sb3JzW2NvbG9yX2lkeF0uY3JjKTsKKwl9CisJLyog QWxzbywgaWYgd2UgbmV2ZXIgZm91bmQgYSBza2lwIGluIHRoZSBmaXJzdCBwbGFjZSB0aGVuIHNv bWV0aGluZydzIGJyb2tlbiBhbmQgdGhlIENSQworCSAqIHRocmVzaG9sZCB3ZSBzZXQgd2FzIGln bm9yZWQgYnkgdGhlIGRyaXZlciwgb3IgdGhlIGRyaXZlciBmYWlsZWQgdG8gZmxpcCBjb250ZXh0 cyAqLworCWlndF9hc3NlcnQoZm91bmRfc2tpcCk7CisKKwlmcmVlKGNyY3MpOworCWlndF9waXBl X2NyY19mcmVlKHBpcGVfY3JjKTsKKwlkZXN0cm95X2NyY19jb2xvcnMoZGF0YSwgY29sb3JzLCBB UlJBWV9TSVpFKGNvbG9ycykpOworfQorCisvKiBUZXN0IHdoZXRoZXIgb3Igbm90IElHVCBpcyBh YmxlIHRvIGhhbmRsZSBmcmFtZSBza2lwcyB3aGVuIHJlcXVlc3RpbmcgdGhlCisgKiBDUkMgZm9y IHRoZSBjdXJyZW50IGZyYW1lCisgKi8KK3N0YXRpYyB2b2lkIHRlc3RfY3R4X2ZsaXBfc2tpcF9j dXJyZW50X2ZyYW1lKGRhdGFfdCAqZGF0YSkKK3sKKwlzdHJ1Y3QgY29sb3JfZmIgY29sb3JzW10g PSB7CisJCXsgLnIgPSAxLjAsIC5nID0gMC4wLCAuYiA9IDAuMCB9LAorCQl7IC5yID0gMC4wLCAu ZyA9IDEuMCwgLmIgPSAwLjAgfSwKKwkJeyAuciA9IDAuMCwgLmcgPSAwLjAsIC5iID0gMS4wIH0s CisJfTsKKwlpZ3Rfb3V0cHV0X3QgKm91dHB1dCA9IGRhdGEtPm91dHB1dDsKKwlpZ3RfcGlwZV9j cmNfdCAqcGlwZV9jcmM7CisJaWd0X3BsYW5lX3QgKnByaW1hcnkgPSBkYXRhLT5wcmltYXJ5Owor CWNvbnN0IGludCBmZCA9IGRhdGEtPmRybV9mZDsKKwljb25zdCBpbnQgbl9jb2xvcnMgPSBBUlJB WV9TSVpFKGNvbG9ycyk7CisJY29uc3QgaW50IG5fY3JjcyA9IDMwOworCisJcGlwZV9jcmMgPSBp Z3RfcGlwZV9jcmNfbmV3KGZkLCBkYXRhLT5waXBlLCAiYXV0byIpOworCWNyZWF0ZV9jcmNfY29s b3JzKGRhdGEsIGNvbG9ycywgbl9jb2xvcnMsIHBpcGVfY3JjKTsKKworCXNldF9jcmNfZmxpcF90 aHJlc2hvbGQoZGF0YSwgNSk7CisJaWd0X3BpcGVfY3JjX3N0YXJ0KHBpcGVfY3JjKTsKKworCWZv ciAoaW50IGkgPSAwOyBpIDwgbl9jcmNzOyBpKyspIHsKKwkJaWd0X2NyY190IGNyYzsKKwkJY29u c3QgaW50IGNvbG9yX2lkeCA9IGkgJSBuX2NvbG9yczsKKworCQlpZ3RfcGxhbmVfc2V0X2ZiKHBy aW1hcnksICZjb2xvcnNbY29sb3JfaWR4XS5mYik7CisJCWRvX29yX2RpZShkcm1Nb2RlUGFnZUZs aXAoZmQsCisJCQkJCSAgb3V0cHV0LT5jb25maWcuY3J0Yy0+Y3J0Y19pZCwKKwkJCQkJICBjb2xv cnNbY29sb3JfaWR4XS5mYi5mYl9pZCwKKwkJCQkJICBEUk1fTU9ERV9QQUdFX0ZMSVBfRVZFTlQs CisJCQkJCSAgTlVMTCkpOworCQlrbXN0ZXN0X3dhaXRfZm9yX3BhZ2VmbGlwKGZkKTsKKworCQlp Z3RfcGlwZV9jcmNfZ2V0X2N1cnJlbnQoZmQsIHBpcGVfY3JjLCAmY3JjKTsKKwkJaWd0X2Fzc2Vy dF9jcmNfZXF1YWwoJmNvbG9yc1tjb2xvcl9pZHhdLmNyYywgJmNyYyk7CisJfQorCisJaWd0X3Bp cGVfY3JjX3N0b3AocGlwZV9jcmMpOworCWlndF9waXBlX2NyY19mcmVlKHBpcGVfY3JjKTsKKwlk ZXN0cm95X2NyY19jb2xvcnMoZGF0YSwgY29sb3JzLCBuX2NvbG9ycyk7Cit9CisKK3N0YXRpYyB2 b2lkIHRlc3RfY3R4X2ZsaXBfdGhyZXNob2xkX3Jlc2V0X2FmdGVyX2NhcHR1cmUoZGF0YV90ICpk YXRhKQoreworCWlndF9waXBlX2NyY190ICpwaXBlX2NyYzsKKwljb25zdCBpbnQgZmQgPSBkYXRh LT5kcm1fZmQ7CisKKwlwaXBlX2NyYyA9IGlndF9waXBlX2NyY19uZXcoZmQsIGRhdGEtPnBpcGUs ICJhdXRvIik7CisKKwlzZXRfY3JjX2ZsaXBfdGhyZXNob2xkKGRhdGEsIDUpOworCWlndF9waXBl X2NyY19zdGFydChwaXBlX2NyYyk7CisJaWd0X2Fzc2VydF9lcShpZ3Rfc3lzZnNfZ2V0X3UzMihk YXRhLT5udl9jcmNfZGlyLCAiZmxpcF90aHJlc2hvbGQiKSwgNSk7CisJaWd0X3BpcGVfY3JjX3N0 b3AocGlwZV9jcmMpOworCisJaWd0X2Fzc2VydF9uZXEoaWd0X3N5c2ZzX2dldF91MzIoZGF0YS0+ bnZfY3JjX2RpciwgImZsaXBfdGhyZXNob2xkIiksIDUpOworCWlndF9waXBlX2NyY19mcmVlKHBp cGVfY3JjKTsKK30KKworc3RhdGljIHZvaWQgdGVzdF9zb3VyY2UoZGF0YV90ICpkYXRhLCBjb25z dCBjaGFyICpzb3VyY2UpCit7CisJaWd0X3BpcGVfY3JjX3QgKnBpcGVfY3JjID0gaWd0X3BpcGVf Y3JjX25ldyhkYXRhLT5kcm1fZmQsIGRhdGEtPnBpcGUsIHNvdXJjZSk7CisJaWd0X2NyY190ICpj cmNzOworCisJaWd0X3BpcGVfY3JjX3N0YXJ0KHBpcGVfY3JjKTsKKwlpZ3RfcGlwZV9jcmNfZ2V0 X2NyY3MocGlwZV9jcmMsIDIsICZjcmNzKTsKKwlpZ3RfcGlwZV9jcmNfc3RvcChwaXBlX2NyYyk7 CisKKwkvKiBUaGUgQ1JDIHNob3VsZG4ndCBjaGFuZ2UgaWYgdGhlIHNvdXJjZSBjb250ZW50IGhh c24ndCBjaGFuZ2VkICovCisJaWd0X2Fzc2VydF9jcmNfZXF1YWwoJmNyY3NbMF0sICZjcmNzWzFd KTsKKworCWlndF9waXBlX2NyY19mcmVlKHBpcGVfY3JjKTsKKwlmcmVlKGNyY3MpOworfQorCitz dGF0aWMgdm9pZCB0ZXN0X3NvdXJjZV9vdXRwX2luYWN0aXZlKGRhdGFfdCAqZGF0YSkKK3sKKwlz dHJ1Y3QgY29sb3JfZmIgY29sb3JzW10gPSB7CisJCXsgLnIgPSAxLjAsIC5nID0gMC4wLCAuYiA9 IDAuMCB9LAorCQl7IC5yID0gMC4wLCAuZyA9IDEuMCwgLmIgPSAwLjAgfSwKKwl9OworCWlndF9w aXBlX2NyY190ICpwaXBlX2NyYzsKKwljb25zdCBpbnQgZmQgPSBkYXRhLT5kcm1fZmQ7CisJY29u c3QgaW50IG5fY29sb3JzID0gQVJSQVlfU0laRShjb2xvcnMpOworCisJcGlwZV9jcmMgPSBpZ3Rf cGlwZV9jcmNfbmV3KGZkLCBkYXRhLT5waXBlLCAib3V0cC1pbmFjdGl2ZSIpOworCWNyZWF0ZV9j cmNfY29sb3JzKGRhdGEsIGNvbG9ycywgbl9jb2xvcnMsIHBpcGVfY3JjKTsKKworCS8qIENoYW5n aW5nIHRoZSBjb2xvciBzaG91bGQgbm90IGNoYW5nZSB3aGF0J3Mgb3V0c2lkZSB0aGUgYWN0aXZl IHJhc3RlciAqLworCWlndF9hc3NlcnRfY3JjX2VxdWFsKCZjb2xvcnNbMF0uY3JjLCAmY29sb3Jz WzFdLmNyYyk7CisKKwlpZ3RfcGlwZV9jcmNfZnJlZShwaXBlX2NyYyk7CisJZGVzdHJveV9jcmNf Y29sb3JzKGRhdGEsIGNvbG9ycywgbl9jb2xvcnMpOworfQorCitkYXRhX3QgZGF0YSA9IHswfTsK KworI2RlZmluZSBwaXBlX3Rlc3QobmFtZSkgaWd0X3N1YnRlc3RfZigicGlwZS0lcy0iIG5hbWUs IGttc3Rlc3RfcGlwZV9uYW1lKHBpcGUpKQoraWd0X21haW4KK3sKKwlpbnQgcGlwZTsKKworCWln dF9maXh0dXJlIHsKKwkJZGF0YS5kcm1fZmQgPSBkcm1fb3Blbl9kcml2ZXJfbWFzdGVyKERSSVZF Ul9BTlkpOworCQlpZ3RfcmVxdWlyZV9ub3V2ZWF1KGRhdGEuZHJtX2ZkKTsKKworCQlrbXN0ZXN0 X3NldF92dF9ncmFwaGljc19tb2RlKCk7CisKKwkJaWd0X3JlcXVpcmVfcGlwZV9jcmMoZGF0YS5k cm1fZmQpOworCQlpZ3RfZGlzcGxheV9yZXF1aXJlKCZkYXRhLmRpc3BsYXksIGRhdGEuZHJtX2Zk KTsKKwkJaWd0X2Rpc3BsYXlfcmVzZXQoJmRhdGEuZGlzcGxheSk7CisJfQorCisJZm9yX2VhY2hf cGlwZV9zdGF0aWMocGlwZSkgeworCQlpZ3RfZml4dHVyZSB7CisJCQlpbnQgZGlyOworCisJCQlk YXRhLnBpcGUgPSBwaXBlOworCQkJaWd0X2Rpc3BsYXlfcmVxdWlyZV9vdXRwdXRfb25fcGlwZSgm ZGF0YS5kaXNwbGF5LCBwaXBlKTsKKworCQkJLyogRGlzYWJsZSB0aGUgb3V0cHV0IGZyb20gdGhl IHByZXZpb3VzIGl0ZXJhdGlvbiBvZiBwaXBlIHRlc3RzLCBpZiB0aGVyZSBpcworCQkJICogb25l CisJCQkgKi8KKwkJCWlmIChkYXRhLm91dHB1dCkgeworCQkJCWlndF9vdXRwdXRfc2V0X3BpcGUo ZGF0YS5vdXRwdXQsIFBJUEVfTk9ORSk7CisJCQkJaWd0X2Rpc3BsYXlfY29tbWl0KCZkYXRhLmRp c3BsYXkpOworCQkJfQorCisJCQlkYXRhLm91dHB1dCA9IGlndF9nZXRfc2luZ2xlX291dHB1dF9m b3JfcGlwZSgmZGF0YS5kaXNwbGF5LCBwaXBlKTsKKwkJCWRhdGEubW9kZSA9IGlndF9vdXRwdXRf Z2V0X21vZGUoZGF0YS5vdXRwdXQpOworCisJCQkvKiBOb25lIG9mIHRoZXNlIHRlc3RzIG5lZWQg dG8gcGVyZm9ybSBtb2Rlc2V0cywganVzdCBwYWdlIGZsaXBzLiBTbyBydW5uaW5nCisJCQkgKiBk aXNwbGF5IHNldHVwIGhlcmUgaXMgZmluZQorCQkJICovCisJCQlpZ3Rfb3V0cHV0X3NldF9waXBl KGRhdGEub3V0cHV0LCBwaXBlKTsKKwkJCWRhdGEucHJpbWFyeSA9IGlndF9vdXRwdXRfZ2V0X3Bs YW5lKGRhdGEub3V0cHV0LCAwKTsKKwkJCWlndF9jcmVhdGVfY29sb3JfZmIoZGF0YS5kcm1fZmQs CisJCQkJCSAgICBkYXRhLm1vZGUtPmhkaXNwbGF5LAorCQkJCQkgICAgZGF0YS5tb2RlLT52ZGlz cGxheSwKKwkJCQkJICAgIERSTV9GT1JNQVRfWFJHQjg4ODgsCisJCQkJCSAgICBMT0NBTF9EUk1f Rk9STUFUX01PRF9OT05FLAorCQkJCQkgICAgMC4wLCAwLjAsIDAuMCwKKwkJCQkJICAgICZkYXRh LmRlZmF1bHRfZmIpOworCQkJaWd0X3BsYW5lX3NldF9mYihkYXRhLnByaW1hcnksICZkYXRhLmRl ZmF1bHRfZmIpOworCQkJaWd0X2Rpc3BsYXlfY29tbWl0KCZkYXRhLmRpc3BsYXkpOworCisJCQlk aXIgPSBpZ3RfZGVidWdmc19waXBlX2RpcihkYXRhLmRybV9mZCwgcGlwZSwgT19ESVJFQ1RPUlkp OworCQkJaWd0X3JlcXVpcmVfZmQoZGlyKTsKKwkJCWRhdGEubnZfY3JjX2RpciA9IG9wZW5hdChk aXIsICJudl9jcmMiLCBPX0RJUkVDVE9SWSk7CisJCQljbG9zZShkaXIpOworCQkJaWd0X3JlcXVp cmVfZmQoZGF0YS5udl9jcmNfZGlyKTsKKwkJfQorCisJCS8qIFdlIGRvbid0IG5lZWQgdG8gdGVz dCB0aGlzIG9uIGV2ZXJ5IHBpcGUsIGJ1dCB0aGUgc2V0dXAgaXMgdGhlIHNhbWUgKi8KKwkJaWYg KHBpcGUgPT0gUElQRV9BKSB7CisJCQlpZ3RfZGVzY3JpYmUoIk1ha2Ugc3VyZSB0aGF0IHRoZSBD UkMgbm90aWZpZXIgY29udGV4dCBmbGlwIHRocmVzaG9sZCAiCisJCQkJICAgICAiaXMgcmVzZXQg dG8gaXRzIGRlZmF1bHQgdmFsdWUgYWZ0ZXIgYSBzaW5nbGUgY2FwdHVyZS4iKTsKKwkJCWlndF9z dWJ0ZXN0KCJjdHgtZmxpcC10aHJlc2hvbGQtcmVzZXQtYWZ0ZXItY2FwdHVyZSIpCisJCQkJdGVz dF9jdHhfZmxpcF90aHJlc2hvbGRfcmVzZXRfYWZ0ZXJfY2FwdHVyZSgmZGF0YSk7CisJCX0KKwor CQlpZ3RfZGVzY3JpYmUoIk1ha2Ugc3VyZSB0aGUgYXNzb2NpYXRpb24gYmV0d2VlbiBlYWNoIENS QyBhbmQgaXRzICIKKwkJCSAgICAgInJlc3BlY3RpdmUgZnJhbWUgaW5kZXggaXMgbm90IGJyb2tl biB3aGVuIHRoZSBkcml2ZXIgIgorCQkJICAgICAicGVyZm9ybXMgYSBub3RpZmllciBjb250ZXh0 IGZsaXAuIik7CisJCXBpcGVfdGVzdCgiY3R4LWZsaXAtZGV0ZWN0aW9uIikKKwkJCXRlc3RfY3R4 X2ZsaXBfZGV0ZWN0aW9uKCZkYXRhKTsKKworCQlpZ3RfZGVzY3JpYmUoIk1ha2Ugc3VyZSB0aGF0 IGlndF9waXBlX2NyY19nZXRfY3VycmVudCgpIHdvcmtzIGV2ZW4gIgorCQkJICAgICAid2hlbiB0 aGUgQ1JDIGZvciB0aGUgY3VycmVudCBmcmFtZSBpbmRleCBpcyBsb3N0LiIpOworCQlwaXBlX3Rl c3QoImN0eC1mbGlwLXNraXAtY3VycmVudC1mcmFtZSIpCisJCQl0ZXN0X2N0eF9mbGlwX3NraXBf Y3VycmVudF9mcmFtZSgmZGF0YSk7CisKKwkJaWd0X2Rlc2NyaWJlKCJDaGVjayB0aGF0IGJhc2lj IENSQyByZWFkYmFjayB1c2luZyB0aGUgb3V0cC1jb21wbGV0ZSAiCisJCQkgICAgICJzb3VyY2Ug d29ya3MuIik7CisJCXBpcGVfdGVzdCgic291cmNlLW91dHAtY29tcGxldGUiKQorCQkJdGVzdF9z b3VyY2UoJmRhdGEsICJvdXRwLWNvbXBsZXRlIik7CisKKwkJaWd0X2Rlc2NyaWJlKCJDaGVjayB0 aGF0IGJhc2ljIENSQyByZWFkYmFjayB1c2luZyB0aGUgcmcgc291cmNlICIKKwkJCSAgICAgIndv cmtzLiIpOworCQlwaXBlX3Rlc3QoInNvdXJjZS1yZyIpCisJCQl0ZXN0X3NvdXJjZSgmZGF0YSwg InJnIik7CisKKwkJaWd0X2Rlc2NyaWJlKCJNYWtlIHN1cmUgdGhhdCB0aGUgb3V0cC1pbmFjdGl2 ZSBzb3VyY2UgaXMgYWN0dWFsbHkgIgorCQkJICAgICAiY2FwdHVyaW5nIHRoZSBpbmFjdGl2ZSBy YXN0ZXIuIik7CisJCXBpcGVfdGVzdCgic291cmNlLW91dHAtaW5hY3RpdmUiKQorCQkJdGVzdF9z b3VyY2Vfb3V0cF9pbmFjdGl2ZSgmZGF0YSk7CisKKwkJaWd0X2ZpeHR1cmUgeworCQkJaWd0X3Jl bW92ZV9mYihkYXRhLmRybV9mZCwgJmRhdGEuZGVmYXVsdF9mYik7CisJCQljbG9zZShkYXRhLm52 X2NyY19kaXIpOworCQl9CisJfQorCWlndF9maXh0dXJlCisJCWlndF9kaXNwbGF5X2ZpbmkoJmRh dGEuZGlzcGxheSk7CisKK30KLS0gCjIuMjYuMgoKX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX18KaWd0LWRldiBtYWlsaW5nIGxpc3QKaWd0LWRldkBsaXN0cy5m cmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0 aW5mby9pZ3QtZGV2Cg==