From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga12.intel.com (mga12.intel.com [192.55.52.136]) by gabe.freedesktop.org (Postfix) with ESMTPS id 6BC9C6E027 for ; Wed, 17 Apr 2019 08:39:54 +0000 (UTC) From: Simon Ser Date: Wed, 17 Apr 2019 11:40:08 +0300 Message-Id: <20190417084008.2834-1-simon.ser@intel.com> MIME-Version: 1.0 Subject: [igt-dev] [PATCH i-g-t v5] tests/kms_chamelium: add dp-audio test 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 List-ID: VGhpcyBuZXcgdGVzdCBlbnN1cmVzIERpc3BsYXlQb3J0IGF1ZGlvIHdvcmtzIGJ5IHVzaW5nIHRo ZSBDaGFtZWxpdW0uCgpJdCBlbmFibGVzIHRoZSBEaXNwbGF5UG9ydCBvdXRwdXQgYW5kIHNlbmRz IGFuIGF1ZGlvIHNpZ25hbCBjb250YWluaW5nIGEgc2V0IG9mCmZyZXF1ZW5jaWVzIHdlIGNob29z ZSB0byBhbGwgSERNSS9EaXNwbGF5UG9ydCBhdWRpbyBkZXZpY2VzLiBJdCBzdGFydHMKcmVjb3Jk aW5nIGF1ZGlvIG9uIHRoZSBDaGFtZWxpdW0gZGV2aWNlIGFuZCB1c2VzIHRoZSBzdHJlYW0gc2Vy dmVyIHRvIHJldHJpZXZlCmNhcHR1cmVkIGF1ZGlvIHBhZ2VzLiBJdCB0aGVuIGNoZWNrcyB0aGF0 IHRoZSBjYXB0dXJlIGF1ZGlvIHNpZ25hbCBjb250YWlucyB0aGUKZnJlcXVlbmNpZXMgd2Ugc2Vu dCwgYW5kIG9ubHkgdGhvc2UsIGJ5IGNvbXB1dGluZyBhIEZGVC4KCkEgbmV3IGxpYnJhcnkgaGFz IGJlZW4gYWRkZWQgdG8gbGliaWd0IHRvIGNvbW11bmljYXRlIHdpdGggdGhlIHN0cmVhbSBzZXJ2 ZXIuCkl0IGltcGxlbWVudHMgYSBzaW1wbGUgY3VzdG9tIFRDUCBwcm90b2NvbC4KCkluIGNhc2Ug dGhlIHRlc3QgZmFpbHMsIGEgV0FWIGZpbGUgd2l0aCB0aGUgY2FwdHVyZWQgZGF0YSBpcyBzYXZl ZCBvbiBkaXNrLgoKUmlnaHQgbm93IHRoZSB0ZXN0IGhhcyBhIGZldyBsaW1pdGF0aW9uczoKCi0g T25seSB0aGUgZmlyc3QgY2hhbm5lbCBpcyBjaGVja2VkCi0gSUdUIG9ubHkgZ2VuZXJhdGVzIGF1 ZGlvIHdpdGggYSBzaW5nbGUgc2FtcGxpbmcgcmF0ZSAoNDggS0h6KQotIEF1ZGlvIGRhdGEgaXMg bm90IGNhcHR1cmVkIGluIHJlYWwtdGltZQoKVGhlc2UgbGltaXRhdGlvbnMgd2lsbCBiZSBsaWZ0 ZWQgaW4gZnV0dXJlIHBhdGNoZXMuCgpQdWxzZUF1ZGlvIG11c3Qgbm90IHJ1biBkdXJpbmcgdGhl IHRlc3RzIHNpbmNlIEFMU0EgaXMgdXNlZCBkaXJlY3RseS4gVG8gZW5zdXJlCnRoaXMsIGVkaXQg L2V0Yy9wdWxzZS9jbGllbnQuY29uZiBhbmQgYWRkIGBhdXRvc3Bhd249bm9gLiBUaGVuIHJ1bgpg cHVsc2VhdWRpbyAtLWtpbGxgLgoKVGhpcyBjb21taXQgZGVsZXRlcyB0aGUgZXhpc3RpbmcgYXVk aW8gdGVzdHMuIFRoZXkgd2VyZW4ndCBydW4gYW5kIHJlcXVpcmVkIGFuCmV4b3RpYyBjb25maWd1 cmF0aW9uIChIRE1JIGF1ZGlvIHNwbGl0dGVyLCBkdW1teSBIRE1JIHNpbmsgYW5kIGEgbGluZS1p biBwb3J0Cm9uIHRoZSBEVVQpLgoKVGhpcyBwYXRjaCBkZXBlbmRzIG9uIHRoZSBmb2xsb3dpbmcg Q2hhbWVsZW9uIGJ1Z3M6CgotIGh0dHBzOi8vY3JidWcuY29tLzk0ODA2MAotIGh0dHBzOi8vY3Ji dWcuY29tLzk1MDg1NwoKU2lnbmVkLW9mZi1ieTogU2ltb24gU2VyIDxzaW1vbi5zZXJAaW50ZWwu Y29tPgotLS0KCkNoYW5nZXMgaW4gdjU6IGFkZHJlc3MgTWFydGluJ3MgY29tbWVudHMKCiBkb2Nz L2F1ZGlvLnR4dCAgICAgICAgICAgICB8ICA0NSAtLS0KIGRvY3MvY2hhbWVsaXVtLnR4dCAgICAg ICAgIHwgIDM0ICsrLQogbGliL2lndC5oICAgICAgICAgICAgICAgICAgfCAgIDEgKwogbGliL2ln dF9hbHNhLmMgICAgICAgICAgICAgfCAgNDIgKystCiBsaWIvaWd0X2Fsc2EuaCAgICAgICAgICAg ICB8ICAgMSArCiBsaWIvaWd0X2F1ZGlvLmMgICAgICAgICAgICB8IDMxMyArKysrKysrKysrKysr Ky0tLS0tLQogbGliL2lndF9hdWRpby5oICAgICAgICAgICAgfCAgMTIgKy0KIGxpYi9pZ3RfYXV4 LmMgICAgICAgICAgICAgIHwgIDMxICsrCiBsaWIvaWd0X2F1eC5oICAgICAgICAgICAgICB8ICAg MSArCiBsaWIvaWd0X2NoYW1lbGl1bS5jICAgICAgICB8IDEwMSArKysrKysrCiBsaWIvaWd0X2No YW1lbGl1bS5oICAgICAgICB8ICAxMSArCiBsaWIvaWd0X2NoYW1lbGl1bV9zdHJlYW0uYyB8IDU4 OSArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCiBsaWIvaWd0X2NoYW1lbGl1 bV9zdHJlYW0uaCB8ICA1MiArKysrCiBsaWIvbWVzb24uYnVpbGQgICAgICAgICAgICB8ICAgNSAr LQogbWVzb24uYnVpbGQgICAgICAgICAgICAgICAgfCAgNTIgKystLQogbWVzb25fb3B0aW9ucy50 eHQgICAgICAgICAgfCAgIDYgLQogdGVzdHMvYXVkaW8uYyAgICAgICAgICAgICAgfCAxOTMgLS0t LS0tLS0tLS0tCiB0ZXN0cy9rbXNfY2hhbWVsaXVtLmMgICAgICB8IDI3NiArKysrKysrKysrKysr KysrLQogdGVzdHMvbWVzb24uYnVpbGQgICAgICAgICAgfCAgIDkgKy0KIDE5IGZpbGVzIGNoYW5n ZWQsIDEzODIgaW5zZXJ0aW9ucygrKSwgMzkyIGRlbGV0aW9ucygtKQogZGVsZXRlIG1vZGUgMTAw NjQ0IGRvY3MvYXVkaW8udHh0CiBjcmVhdGUgbW9kZSAxMDA2NDQgbGliL2lndF9jaGFtZWxpdW1f c3RyZWFtLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWIvaWd0X2NoYW1lbGl1bV9zdHJlYW0uaAog ZGVsZXRlIG1vZGUgMTAwNjQ0IHRlc3RzL2F1ZGlvLmMKCmRpZmYgLS1naXQgYS9kb2NzL2F1ZGlv LnR4dCBiL2RvY3MvYXVkaW8udHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNThh ZDVkMS4uMDAwMDAwMDAKLS0tIGEvZG9jcy9hdWRpby50eHQKKysrIC9kZXYvbnVsbApAQCAtMSw0 NSArMCwwIEBACi1BdWRpbyBTdXBwb3J0IGluIElHVAotPT09PT09PT09PT09PT09PT09PT0KLQot VGhpcyBkb2N1bWVudCBwcm92aWRlcyBpbmZvcm1hdGlvbiBhbmQgaW5zdHJ1Y3Rpb25zIGFib3V0 IGF1ZGlvIHN1cHBvcnQgaW4gSUdULgotCi1JbnRyb2R1Y3Rpb24KLS0tLS0tLS0tLS0tLQotCi1U aGUgYXVkaW8gdGVzdCBpcyBhaW1lZCBhdCB0ZXN0aW5nIHRoZSBhdWRpbyBmZWF0dXJlcyBvZiBk aXNwbGF5IGNvbm5lY3RvcnMsCi1zdWNoIGFzIEhETUkuCi0KLVRlc3Qgc2V0dXAKLS0tLS0tLS0t LS0KLQotVGhlIHNldHVwIHJlcXVpcmVkIGZvciB0aGUgYXVkaW8gdGVzdCBjb25zaXN0cyBvZiB1 c2luZyBhbiBIRE1JLVZHQSBhZGFwdGVyIHdpdGgKLWFuIGF1ZGlvLW91dCAzLjUgbW0gamFjayB0 byBleHRyYWN0IHRoZSBhdWRpbyBmcm9tIHRoZSBIRE1JIGludGVyZmFjZS4KLVRoZSBhdWRpby1v dXQgamFjayBpcyBjb25uZWN0ZWQgYmFjayB0byB0aGUgZGV2aWNlLXVuZGVyLXRlc3QncyBsaW5l LWluLgotCi1EZXBlbmRpbmcgb24gdGhlIGJlaGF2aW9yIG9mIHRoZSBhZGFwdGVyLCBpdCBtYXkg YmUgbmVjZXNzYXJ5IHRvIGNvbm5lY3QgYQotZ2hvc3QgVkdBIGRvbmdsZSB0byBpdCAoaW4gb3Jk ZXIgdG8gZW11bGF0ZSBhIGNvbm5lY3RlZCBkaXNwbGF5KSB0byBlbmFibGUgdGhlCi1hdWRpbyBv dXRwdXQuIFRoZXJlIGFyZSBndWlkZXMgYXZhaWxhYmxlIGRldGFpbGluZyBob3cgdG8gYnVpbGQg dGhlc2UuCi0KLVdoZW4gZXhlY3V0ZWQsIHRoZSB0ZXN0IHdpbGwgYXV0b21hdGljYWxseSBzZW5k IHRoZSB0ZXN0IGF1ZGlvIHNpZ25hbCB0byBhbGwKLUFMU0EgYXVkaW8gSERNSSBvdXRwdXRzIGFu ZCByZWNvcmQgZnJvbSB0aGUgc3RhbmRhcmQgQUxTQSBjYXB0dXJlIGRldmljZS4KLQotQ29uZmln dXJhdGlvbgotLS0tLS0tLS0tLS0tLQotCi1JbiBvcmRlciB0byBkZXBsb3kgdGhlIHRlc3QsIEFM U0EgY29udHJvbHMgaGF2ZSB0byBiZSBjb25maWd1cmVkIHRvIHNldCB0aGUKLUFMU0EgY2FwdHVy ZSBzb3VyY2UgdG8gbGluZS1pbi4gT24gSW50ZWwgeDg2IHN5c3RlbXMsIHRoaXMgY2FuIGJlIGFj aGlldmVkCi13aXRoIHRoZSBmb2xsb3dpbmcgY2FsbHMgdG8gdGhlIGFtaXhlciB1dGlsaXR5Ogot IyBhbWl4ZXIgc3NldCBMaW5lIDMxIG9uCi0jIGFtaXhlciBzc2V0ICJJbnB1dCBTb3VyY2UiIExp bmUKLQotSXQgaXMgdGhlbiB1c2VmdWwgdG8gc3RvcmUgdGhlIEFMU0Egc3RhdGUgcGVybWFuZW50 bHkgd2l0aCB0aGUgYWxzYWN0bCB1dGlsaXR5OgotIyBhbHNhY3RsIHN0b3JlCi0KLVRoZXNlIHNl dHRpbmdzIGNhbiBiZSByZXN0b3JlZCB3aXRoIHRoZSBhbHNhY3RsIHV0aWxpdHk6Ci0jIGFsc2Fj dGwgcmVzdG9yZQotCi1JdCBpcyBkZXNpcmFibGUgdG8gZW5zdXJlIHRoYXQgdGhlIGFsc2EtcmVz dG9yZSBhbmQgYWxzYS1zdGF0ZSBzeXN0ZW1kIHNlcnZpY2VzCi1hcmUgZW5hYmxlZCB0byBkbyB0 aGlzIGpvYiBhdXRvbWF0aWNhbGx5LCBlc3BlY2lhbGx5IGluIHRoZSBjYXNlIG9mIGFuCi1hdXRv bWF0ZWQgdGVzdGluZyBzeXN0ZW06Ci0jIHN5c3RlbWN0bCBlbmFibGUgYWxzYS1yZXN0b3JlCi0j IHN5c3RlbWN0bCBlbmFibGUgYWxzYS1zdGF0ZQpkaWZmIC0tZ2l0IGEvZG9jcy9jaGFtZWxpdW0u dHh0IGIvZG9jcy9jaGFtZWxpdW0udHh0CmluZGV4IDBjYWJjZGM2Li41Y2M4NWQ2ZSAxMDA2NDQK LS0tIGEvZG9jcy9jaGFtZWxpdW0udHh0CisrKyBiL2RvY3MvY2hhbWVsaXVtLnR4dApAQCAtMTM5 LDYgKzEzOSwyMyBAQCAkIG1ha2UgcmVtb3RlLWluc3RhbGwgQ0hBTUVMRU9OX0hPU1Q9MTkyLjE2 OC43Mi4xCiAKIFRoZSBwcm9jZXNzIHJlcXVpcmVzIHRoZSBDaGFtZWxpdW0gdG8gYmUgY29ubmVj dGVkIHRvIHRoZSBJbnRlcm5ldCB0byBzdWNjZWVkLgogCitBdWRpbyBDYXB0dXJlCistLS0tLS0t LS0tLS0tCisKK1RoZSBDaGFtZWxpdW0gc3VwcG9ydHMgYXVkaW8gY2FwdHVyZS4gSUdUIHRlc3Rz IHRha2UgYWR2YW50YWdlIG9mIHRoZQorQ2hhbWVsaXVtIHN0cmVhbWluZyBzZXJ2ZXIgdG8gZG93 bmxvYWQgYXVkaW8gc2FtcGxlcyBmcm9tIHRoZSBDaGFtZWxpdW0uCisKK0lHVCBuZWVkcyBkaXJl Y3QgYWNjZXNzIHRvIGF1ZGlvIGRldmljZXMgdGhyb3VnaCBBTFNBLCBzbyBQdWxzZUF1ZGlvIG5l ZWRzIHRvCitiZSBzdG9wcGVkIChvdGhlcndpc2UgYXVkaW8gdGVzdHMgd2lsbCBhdXRvbWF0aWNh bGx5IGdldCBza2lwcGVkKS4gVG8gbWFrZSBzdXJlCitQdWxzZUF1ZGlvIGlzbid0IHJ1bm5pbmc6 CisKKy0gRWRpdCAvZXRjL3B1bHNlL2NsaWVudC5jb25mIGFuZCBhZGQgYXV0b3NwYXduPW5vCist IFJ1biBgcHVsc2VhdWRpbyAtLWtpbGxgIChpZiBpdCBzdWNjZWVkcywgaXQgbWVhbnMgUHVsc2VB dWRpbyB3YXMgcnVubmluZykKKy0gTWFrZSBzdXJlIGEgREUgdGhhdCBhdXRvbWF0aWNhbGx5IHNw YXducyBQdWxzZUF1ZGlvIGlzbid0IHJ1bm5pbmcKKworSW4gY2FzZSBhIHRlc3QgZmFpbHMsIHRo ZSByYXcgY2FwdHVyZWQgYXVkaW8gZmlsZXMgd2lsbCBiZSBkdW1wZWQgaW4gYSBXQVYKK2ZpbGUu CisKIENvbnRyaWJ1dGluZyBDaGFuZ2VzIHRvIHRoZSBEYWVtb24KIC0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0KIApAQCAtMTQ2LDEwICsxNjMsMTEgQEAgQ29udHJpYnV0aW9ucyB0 byB0aGUgQ2hhbWVsaXVtIGRhZW1vbiwganVzdCBsaWtlIGFueSBjb250cmlidXRpb24gdG8gQ2hy b21pdW1PUywKIGFyZSBzdWJtaXR0ZWQgYW5kIHJldmlld2VkIGF0OiBodHRwczovL2Nocm9taXVt LXJldmlldy5nb29nbGVzb3VyY2UuY29tLwogCiBUaGUgQ2hyb21pdW1PUyBwcm9qZWN0IHByb3Zp ZGVzIGFuIGV4dGVuc2l2ZSBkZXZlbG9wZXIgZ3VpZGU6Ci1odHRwczovL3d3dy5jaHJvbWl1bS5v cmcvY2hyb21pdW0tb3MvZGV2ZWxvcGVyLWd1aWRlIHRoYXQgYXNzdW1lcyBydW5uaW5nIHdpdGhp bgotdGhlIENocm9taXVtT1MgYnVpbGQgc3lzdGVtLiBTaW5jZSB0aGlzIGlzIGxpa2VseSBub3Qg dGhlIGNhc2UgZm9yIGNvbnRyaWJ1dGluZwotdG8gdGhlIENoYW1lbGl1bSBkYWVtb24sIG9ubHkg dGhlIHBhcnQgYWJvdXQgdXBsb2FkaW5nIGNoYW5nZXMgaXMgcmVsZXZhbnQ6Ci1odHRwczovL3d3 dy5jaHJvbWl1bS5vcmcvY2hyb21pdW0tb3MvZGV2ZWxvcGVyLWd1aWRlI1RPQy1VcGxvYWQteW91 ci1jaGFuZ2VzLWFuZC1nZXQtYS1jb2RlLXJldmlldworaHR0cHM6Ly9jaHJvbWl1bS5nb29nbGVz b3VyY2UuY29tL2Nocm9taXVtb3MvZG9jcy8rL21hc3Rlci9kZXZlbG9wZXJfZ3VpZGUubWQKK0l0 IGFzc3VtZXMgcnVubmluZyB3aXRoaW4gdGhlIENocm9taXVtT1MgYnVpbGQgc3lzdGVtLiBTaW5j ZSB0aGlzIGlzIGxpa2VseSBub3QKK3RoZSBjYXNlIGZvciBjb250cmlidXRpbmcgdG8gdGhlIENo YW1lbGl1bSBkYWVtb24sIG9ubHkgdGhlIHBhcnQgYWJvdXQKK3VwbG9hZGluZyBjaGFuZ2VzIGlz IHJlbGV2YW50OgoraHR0cHM6Ly9jaHJvbWl1bS5nb29nbGVzb3VyY2UuY29tL2Nocm9taXVtb3Mv ZG9jcy8rL21hc3Rlci9kZXZlbG9wZXJfZ3VpZGUubWQjVXBsb2FkLXlvdXItY2hhbmdlcy1hbmQt Z2V0LWEtY29kZS1yZXZpZXcKIAogTW9zdCBvZiB0aGUgcHJvY2VzcyBpcyBhYm91dCB1c2luZyB0 aGUgR2Vycml0IHdlYiBpbnRlcmZhY2UgZm9yIHN1Ym1pdHRpbmcgYW5kCiBoYXZpbmcgdGhlIGNo YW5nZSByZXZpZXdlZCBhbmQgbm90IGZvcmdldHRpbmcgdGhlIENoYW5nZS1JZCwgVEVTVD0gYW5k IEJVRz0KQEAgLTE2Miw3ICsxODAsNyBAQCBTdXBwb3J0IGZvciB0aGUgQ2hhbWVsaXVtIHBsYXRm b3JtIGluIElHVCBpcyBmb3VuZCBpbiB0aGUgZm9sbG93aW5nIHBsYWNlczoKICogbGliL2lndF9j aGFtZWxpdW0uYzogbGlicmFyeSB3aXRoIENoYW1lbGl1bS1yZWxhdGVkIGhlbHBlcnMKICogdGVz dHMva21zX2NoYW1lbGl1bS5jOiBzdWItdGVzdHMgdXNpbmcgdGhlIENoYW1lbGl1bQogCi1BcyBv ZiBsYXRlIEF1Z3VzdCAyMDE3LCB0aGUgZm9sbG93aW5nIGZlYXR1cmVzIGFyZSB0ZXN0ZWQgYnkg SUdUOgorQXMgb2YgZWFybHkgQXByaWwgMjAxOSwgdGhlIGZvbGxvd2luZyBmZWF0dXJlcyBhcmUg dGVzdGVkIGJ5IElHVDoKICogUGl4ZWwtYnktcGl4ZWwgZnJhbWUgaW50ZWdyaXR5IHRlc3RzIGZv ciBEUCBhbmQgSERNSQogKiBFcnJvci10cmVuZC1iYXNlZCBmcmFtZSBpbnRlZ3JpdHkgdGVzdHMg Zm9yIFZHQQogKiBDUkMtYmFzZWQgZnJhbWUgaW50ZWdyaXR5IHRlc3RzIGZvciBEUCBhbmQgSERN SQpAQCAtMTczLDYgKzE5MSw3IEBAIEFzIG9mIGxhdGUgQXVndXN0IDIwMTcsIHRoZSBmb2xsb3dp bmcgZmVhdHVyZXMgYXJlIHRlc3RlZCBieSBJR1Q6CiAgIGVhY2ggaW50ZXJmYWNlIG9yIGNvbWJp bmVkCiAqIEVESUQgZGlzcGxheSBpZGVudGlmaWVyIGludGVncml0eSBjaGVjayBmb3IgYWxsIGlu dGVyZmFjZXMKICogRURJRCBkaXNwbGF5IGlkZW50aWZpZXIgY2hhbmdlIGR1cmluZyBzdXNwZW5k IGZvciBhbGwgaW50ZXJmYWNlcworKiBBdWRpbyBGb3VyaWVyLWJhc2VkIHRlc3RzIGZvciBEUCBh dCA0OEtIegogCiBGdXR1cmUgRGV2ZWxvcG1lbnRzCiAtLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC0x ODAsNyArMTk5LDEwIEBAIEZ1dHVyZSBEZXZlbG9wbWVudHMKIFdpdGggdGhlIGN1cnJlbnQgZ2Vu ZXJhdGlvbiBvZiB0aGUgaGFyZHdhcmUgcGxhdGZvcm0sIHN1cHBvcnQgZm9yIHRlc3RpbmcgYQog bnVtYmVyIG9mIGFkZGl0aW9uYWwgZGlzcGxheSBmZWF0dXJlcyBjb3VsZCBiZSBpbmNsdWRlZCBh cyBmdXR1cmUgZGV2ZWxvcG1lbnRzLAogaW5jbHVkaW5nOgotKiBBdWRpbyBjYXB0dXJlIGZyb20g SERNSSBhbmQgRFAKKyogQXVkaW8gY2FwdHVyZSBmcm9tIEhETUkKKyogQ2hlY2sgYWxsIGNoYW5u ZWxzIGFyZSBpbmRlcGVuZGVudCBmcm9tIGVhY2ggb3RoZXIKKyogUGxheWJhY2sgdXNpbmcgbW9y ZSB0aGFuIDIgY2hhbm5lbHMsIGRpZmZlcmVudCBzYW1wbGluZyByYXRlcyBhbmQgZGlmZmVyZW50 CisgIHNhbXBsZSBzaXplcwogKiBIaWdoLWJhbmR3aWR0aCBEaWdpdGFsIENvbnRlbnQgUHJvdGVj dGlvbiAoSERDUCkgc3RyZWFtaW5nIHRvIHRoZSBkaXNwbGF5CiAqIFJlbW90ZSBjb250cm9sIGZv cndhcmRpbmcgKENFQykgc2VudCBmcm9tIHRoZSBkaXNwbGF5CiAqIFlVViBjb2xvcnNwYWNlIGZv ciBIRE1JLCBpbnN0ZWFkIG9mIFJHQgpkaWZmIC0tZ2l0IGEvbGliL2lndC5oIGIvbGliL2lndC5o CmluZGV4IDY2NTRhNjU5Li41ODUyZDU1NyAxMDA2NDQKLS0tIGEvbGliL2lndC5oCisrKyBiL2xp Yi9pZ3QuaApAQCAtNDMsNiArNDMsNyBAQAogI2luY2x1ZGUgImlndF9zdGF0cy5oIgogI2lmZGVm IEhBVkVfQ0hBTUVMSVVNCiAjaW5jbHVkZSAiaWd0X2NoYW1lbGl1bS5oIgorI2luY2x1ZGUgImln dF9jaGFtZWxpdW1fc3RyZWFtLmgiCiAjZW5kaWYKICNpbmNsdWRlICJpbnN0ZG9uZS5oIgogI2lu Y2x1ZGUgImludGVsX2JhdGNoYnVmZmVyLmgiCmRpZmYgLS1naXQgYS9saWIvaWd0X2Fsc2EuYyBi L2xpYi9pZ3RfYWxzYS5jCmluZGV4IGJiNjY4MmNjLi4yMjA4OTg4MSAxMDA2NDQKLS0tIGEvbGli L2lndF9hbHNhLmMKKysrIGIvbGliL2lndF9hbHNhLmMKQEAgLTI2LDkgKzI2LDExIEBACiAKICNp bmNsdWRlICJjb25maWcuaCIKIAorI2luY2x1ZGUgPGxpbWl0cy5oPgogI2luY2x1ZGUgPGFsc2Ev YXNvdW5kbGliLmg+CiAKICNpbmNsdWRlICJpZ3RfYWxzYS5oIgorI2luY2x1ZGUgImlndF9hdXgu aCIKICNpbmNsdWRlICJpZ3RfY29yZS5oIgogCiAjZGVmaW5lIEhBTkRMRVNfTUFYCTgKQEAgLTYx LDYgKzYzLDI2IEBAIHN0cnVjdCBhbHNhIHsKIAlpbnQgaW5wdXRfc2FtcGxlc190cmlnZ2VyOwog fTsKIAorLyoqCisgKiBhbHNhX2hhc19leGNsdXNpdmVfYWNjZXNzOgorICogQ2hlY2sgd2hldGhl ciBBTFNBIGhhcyBleGNsdXNpdmUgYWNjZXNzIHRvIGF1ZGlvIGRldmljZXMuIEZhaWxzIGlmCisg KiBQdWxzZUF1ZGlvIGlzIHJ1bm5pbmcuCisgKi8KK2Jvb2wgYWxzYV9oYXNfZXhjbHVzaXZlX2Fj Y2Vzcyh2b2lkKQoreworCWlmIChpZ3RfaXNfcHJvY2Vzc19ydW5uaW5nKCJwdWxzZWF1ZGlvIikp IHsKKwkJaWd0X3dhcm4oImFsc2EgZG9lc24ndCBoYXZlIGV4Y2x1c2l2ZSBhY2Nlc3MgdG8gYXVk aW8gZGV2aWNlc1xuIik7CisJCWlndF93YXJuKCJJdCBzZWVtcyB0aGF0IFB1bHNlQXVkaW8gaXMg cnVubmluZy4gQXVkaW8gdGVzdHMgIgorCQkJICJuZWVkIGRpcmVjdCBhY2Nlc3MgdG8gYXVkaW8g ZGV2aWNlcywgc28gUHVsc2VBdWRpbyAiCisJCQkgIm5lZWRzIHRvIGJlIHN0b3BwZWQuIFlvdSBj YW4gZG8gc28gYnkgcnVubmluZyAiCisJCQkgImBwdWxzZWF1ZGlvIC0ta2lsbGAuIEFsc28gbWFr ZSBzdXJlIHRvIGFkZCAiCisJCQkgImF1dG9zcGF3bj1ubyB0byAvZXRjL3B1bHNlL2NsaWVudC5j b25mXG4iKTsKKwkJcmV0dXJuIGZhbHNlOworCX0KKworCXJldHVybiB0cnVlOworfQorCiBzdGF0 aWMgdm9pZCBhbHNhX2Vycm9yX2hhbmRsZXIoY29uc3QgY2hhciAqZmlsZSwgaW50IGxpbmUsIGNv bnN0IGNoYXIgKmZ1bmN0aW9uLAogCQkJICAgICAgIGludCBlcnIsIGNvbnN0IGNoYXIgKmZtdCwg Li4uKQogewpAQCAtNzgsNiArMTAwLDEwIEBAIHN0cnVjdCBhbHNhICphbHNhX2luaXQodm9pZCkK IHsKIAlzdHJ1Y3QgYWxzYSAqYWxzYTsKIAorCWlmICghYWxzYV9oYXNfZXhjbHVzaXZlX2FjY2Vz cygpKSB7CisJCXJldHVybiBOVUxMOworCX0KKwogCWFsc2EgPSBtYWxsb2Moc2l6ZW9mKHN0cnVj dCBhbHNhKSk7CiAJbWVtc2V0KGFsc2EsIDAsIHNpemVvZihzdHJ1Y3QgYWxzYSkpOwogCkBAIC01 NTMsMTYgKzU3OSwyMCBAQCBpbnQgYWxzYV9ydW4oc3RydWN0IGFsc2EgKmFsc2EsIGludCBkdXJh dGlvbl9tcykKIAkJCQkJaWYgKHJldCA8IDApIHsKIAkJCQkJCXJldCA9IHNuZF9wY21fcmVjb3Zl cihoYW5kbGUsCiAJCQkJCQkJCSAgICAgIHJldCwgMCk7Ci0JCQkJCQlpZiAocmV0IDwgMCkKKwkJ CQkJCWlmIChyZXQgPCAwKSB7CisJCQkJCQkJaWd0X2RlYnVnKCJzbmRfcGNtX3JlY292ZXIgYWZ0 ZXIgc25kX3BjbV93cml0ZWkgZmFpbGVkIik7CiAJCQkJCQkJZ290byBjb21wbGV0ZTsKKwkJCQkJ CX0KIAkJCQkJfQogCiAJCQkJCW91dHB1dF9jb3VudHNbaV0gKz0gcmV0OwogCQkJCX0gZWxzZSBp ZiAob3V0cHV0X2NvdW50c1tpXSA8IG91dHB1dF90cmlnZ2VyICYmCiAJCQkJCSAgIHJldCA8IDAp IHsKIAkJCQkJcmV0ID0gc25kX3BjbV9yZWNvdmVyKGhhbmRsZSwgcmV0LCAwKTsKLQkJCQkJaWYg KHJldCA8IDApCisJCQkJCWlmIChyZXQgPCAwKSB7CisJCQkJCQlpZ3RfZGVidWcoInNuZF9wY21f cmVjb3ZlciBmYWlsZWQiKTsKIAkJCQkJCWdvdG8gY29tcGxldGU7CisJCQkJCX0KIAkJCQl9CiAJ CQl9CiAKQEAgLTYwOSwxNiArNjM5LDIwIEBAIGludCBhbHNhX3J1bihzdHJ1Y3QgYWxzYSAqYWxz YSwgaW50IGR1cmF0aW9uX21zKQogCQkJCQlyZXQgPSAwOwogCQkJCX0gZWxzZSBpZiAocmV0IDwg MCkgewogCQkJCQlyZXQgPSBzbmRfcGNtX3JlY292ZXIoaGFuZGxlLCByZXQsIDApOwotCQkJCQlp ZiAocmV0IDwgMCkKKwkJCQkJaWYgKHJldCA8IDApIHsKKwkJCQkJCWlndF9kZWJ1Zygic25kX3Bj bV9yZWNvdmVyIGFmdGVyIHNuZF9wY21fcmVhZGkgZmFpbGVkIik7CiAJCQkJCQlnb3RvIGNvbXBs ZXRlOworCQkJCQl9CiAJCQkJfQogCiAJCQkJaW5wdXRfY291bnQgKz0gcmV0OwogCQkJCWlucHV0 X3RvdGFsICs9IHJldDsKIAkJCX0gZWxzZSBpZiAoaW5wdXRfY291bnQgPCBpbnB1dF90cmlnZ2Vy ICYmIHJldCA8IDApIHsKIAkJCQlyZXQgPSBzbmRfcGNtX3JlY292ZXIoaGFuZGxlLCByZXQsIDAp OwotCQkJCWlmIChyZXQgPCAwKQorCQkJCWlmIChyZXQgPCAwKSB7CisJCQkJCWlndF9kZWJ1Zygi c25kX3BjbV9yZWNvdmVyIGZhaWxlZCIpOwogCQkJCQlnb3RvIGNvbXBsZXRlOworCQkJCX0KIAkJ CX0KIAkJfQogCX0gd2hpbGUgKCFyZWFjaGVkKTsKZGlmZiAtLWdpdCBhL2xpYi9pZ3RfYWxzYS5o IGIvbGliL2lndF9hbHNhLmgKaW5kZXggNTA3OTUxMzAuLjVjODA0YjQ2IDEwMDY0NAotLS0gYS9s aWIvaWd0X2Fsc2EuaAorKysgYi9saWIvaWd0X2Fsc2EuaApAQCAtMzMsNiArMzMsNyBAQAogCiBz dHJ1Y3QgYWxzYTsKIAorYm9vbCBhbHNhX2hhc19leGNsdXNpdmVfYWNjZXNzKHZvaWQpOwogc3Ry dWN0IGFsc2EgKmFsc2FfaW5pdCh2b2lkKTsKIGludCBhbHNhX29wZW5fb3V0cHV0KHN0cnVjdCBh bHNhICphbHNhLCBjb25zdCBjaGFyICpkZXZpY2VfbmFtZSk7CiBpbnQgYWxzYV9vcGVuX2lucHV0 KHN0cnVjdCBhbHNhICphbHNhLCBjb25zdCBjaGFyICpkZXZpY2VfbmFtZSk7CmRpZmYgLS1naXQg YS9saWIvaWd0X2F1ZGlvLmMgYi9saWIvaWd0X2F1ZGlvLmMKaW5kZXggYTA1OTJkNTMuLjc2MjRm NTY1IDEwMDY0NAotLS0gYS9saWIvaWd0X2F1ZGlvLmMKKysrIGIvbGliL2lndF9hdWRpby5jCkBA IC0yNiw4ICsyNiwxMSBAQAogCiAjaW5jbHVkZSAiY29uZmlnLmgiCiAKLSNpbmNsdWRlIDxtYXRo Lmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxmY250bC5oPgogI2luY2x1ZGUgPGdz bC9nc2xfZmZ0X3JlYWwuaD4KKyNpbmNsdWRlIDxtYXRoLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+ CiAKICNpbmNsdWRlICJpZ3RfYXVkaW8uaCIKICNpbmNsdWRlICJpZ3RfY29yZS5oIgpAQCAtMTI4 LDcgKzEzMSw3IEBAIGludCBhdWRpb19zaWduYWxfYWRkX2ZyZXF1ZW5jeShzdHJ1Y3QgYXVkaW9f c2lnbmFsICpzaWduYWwsIGludCBmcmVxdWVuY3kpCiAgKi8KIHZvaWQgYXVkaW9fc2lnbmFsX3N5 bnRoZXNpemUoc3RydWN0IGF1ZGlvX3NpZ25hbCAqc2lnbmFsKQogewotCXNob3J0ICpwZXJpb2Q7 CisJaW50MTZfdCAqcGVyaW9kOwogCWRvdWJsZSB2YWx1ZTsKIAlpbnQgZnJhbWVzOwogCWludCBm cmVxOwpAQCAtMTQ1LDkgKzE0OCw5IEBAIHZvaWQgYXVkaW9fc2lnbmFsX3N5bnRoZXNpemUoc3Ry dWN0IGF1ZGlvX3NpZ25hbCAqc2lnbmFsKQogCiAJCWZvciAoaiA9IDA7IGogPCBmcmFtZXM7IGor KykgewogCQkJdmFsdWUgPSAyLjAgKiBNX1BJICogZnJlcSAvIHNpZ25hbC0+c2FtcGxpbmdfcmF0 ZSAqIGo7Ci0JCQl2YWx1ZSA9IHNpbih2YWx1ZSkgKiBTSFJUX01BWCAvIHNpZ25hbC0+ZnJlcXNf Y291bnQ7CisJCQl2YWx1ZSA9IHNpbih2YWx1ZSkgKiBJTlQxNl9NQVggLyBzaWduYWwtPmZyZXFz X2NvdW50OwogCi0JCQlwZXJpb2Rbal0gPSAoc2hvcnQpIHZhbHVlOworCQkJcGVyaW9kW2pdID0g KGludDE2X3QpIHZhbHVlOwogCQl9CiAKIAkJc2lnbmFsLT5mcmVxc1tpXS5wZXJpb2QgPSBwZXJp b2Q7CkBAIC0xODYsMTcgKzE4OSwxNiBAQCB2b2lkIGF1ZGlvX3NpZ25hbF9jbGVhbihzdHJ1Y3Qg YXVkaW9fc2lnbmFsICpzaWduYWwpCiAgKiBzaWduYWwgZGF0YSAoaW4gaW50ZXJsZWF2ZWQgUzE2 X0xFIGZvcm1hdCksIGF0IHRoZSByZXF1ZXN0ZWQgc2FtcGxpbmcgcmF0ZQogICogYW5kIG51bWJl ciBvZiBjaGFubmVscy4KICAqLwotdm9pZCBhdWRpb19zaWduYWxfZmlsbChzdHJ1Y3QgYXVkaW9f c2lnbmFsICpzaWduYWwsIHNob3J0ICpidWZmZXIsIGludCBmcmFtZXMpCit2b2lkIGF1ZGlvX3Np Z25hbF9maWxsKHN0cnVjdCBhdWRpb19zaWduYWwgKnNpZ25hbCwgaW50MTZfdCAqYnVmZmVyLCBp bnQgZnJhbWVzKQogewotCXNob3J0ICpkZXN0aW5hdGlvbjsKLQlzaG9ydCAqc291cmNlOworCWlu dDE2X3QgKmRlc3RpbmF0aW9uLCAqc291cmNlOwogCWludCB0b3RhbDsKIAlpbnQgZnJlcV9mcmFt ZXM7CiAJaW50IGZyZXFfb2Zmc2V0OwogCWludCBjb3VudDsKIAlpbnQgaSwgaiwgazsKIAotCW1l bXNldChidWZmZXIsIDAsIHNpemVvZihzaG9ydCkgKiBzaWduYWwtPmNoYW5uZWxzICogZnJhbWVz KTsKKwltZW1zZXQoYnVmZmVyLCAwLCBzaXplb2YoaW50MTZfdCkgKiBzaWduYWwtPmNoYW5uZWxz ICogZnJhbWVzKTsKIAogCWZvciAoaSA9IDA7IGkgPCBzaWduYWwtPmZyZXFzX2NvdW50OyBpKysp IHsKIAkJdG90YWwgPSAwOwpAQCAtMjI5LDk3ICsyMzEsMjM2IEBAIHZvaWQgYXVkaW9fc2lnbmFs X2ZpbGwoc3RydWN0IGF1ZGlvX3NpZ25hbCAqc2lnbmFsLCBzaG9ydCAqYnVmZmVyLCBpbnQgZnJh bWVzKQogfQogCiAvKioKLSAqIGF1ZGlvX3NpZ25hbF9kZXRlY3Q6Ci0gKiBAc2lnbmFsOiBUaGUg dGFyZ2V0IHNpZ25hbCBzdHJ1Y3R1cmUKLSAqIEBjaGFubmVsczogVGhlIGlucHV0IGRhdGEncyBu dW1iZXIgb2YgY2hhbm5lbHMKLSAqIEBzYW1wbGluZ19yYXRlOiBUaGUgaW5wdXQgZGF0YSdzIHNh bXBsaW5nIHJhdGUKLSAqIEBidWZmZXI6IFRoZSBpbnB1dCBkYXRhJ3MgYnVmZmVyCi0gKiBAZnJh bWVzOiBUaGUgaW5wdXQgZGF0YSdzIG51bWJlciBvZiBmcmFtZXMKLSAqCi0gKiBEZXRlY3QgdGhh dCB0aGUgZnJlcXVlbmNpZXMgc3BlY2lmaWVkIGluIEBzaWduYWwsIGFuZCBvbmx5IHRob3NlLCBh cmUKLSAqIHByZXNlbnQgaW4gdGhlIGlucHV0IGRhdGEuIFRoZSBpbnB1dCBkYXRhJ3MgZm9ybWF0 IGlzIHJlcXVpcmVkIHRvIGJlIFMxNl9MRS4KKyAqIENoZWNrcyB0aGF0IGZyZXF1ZW5jaWVzIHNw ZWNpZmllZCBpbiBzaWduYWwsIGFuZCBvbmx5IHRob3NlLCBhcmUgaW5jbHVkZWQKKyAqIGluIHRo ZSBpbnB1dCBkYXRhLgogICoKLSAqIFJldHVybnM6IEEgYm9vbGVhbiBpbmRpY2F0aW5nIHdoZXRo ZXIgdGhlIGRldGVjdGlvbiB3YXMgc3VjY2Vzc2Z1bAorICogc2FtcGxpbmdfcmF0ZSBpcyBnaXZl biBpbiBIei4gZGF0YV9sZW4gaXMgdGhlIG51bWJlciBvZiBlbGVtZW50cyBpbiBkYXRhLgogICov Ci1ib29sIGF1ZGlvX3NpZ25hbF9kZXRlY3Qoc3RydWN0IGF1ZGlvX3NpZ25hbCAqc2lnbmFsLCBp bnQgY2hhbm5lbHMsCi0JCQkgaW50IHNhbXBsaW5nX3JhdGUsIHNob3J0ICpidWZmZXIsIGludCBm cmFtZXMpCitib29sIGF1ZGlvX3NpZ25hbF9kZXRlY3Qoc3RydWN0IGF1ZGlvX3NpZ25hbCAqc2ln bmFsLCBpbnQgc2FtcGxpbmdfcmF0ZSwKKwkJCSBkb3VibGUgKmRhdGEsIHNpemVfdCBkYXRhX2xl bikKIHsKLQlkb3VibGUgZGF0YVtmcmFtZXNdOwotCWludCBhbXBsaXR1ZGVbZnJhbWVzIC8gMl07 CisJc2l6ZV90IGJpbl9wb3dlcl9sZW4gPSBkYXRhX2xlbiAvIDIgKyAxOworCWRvdWJsZSBiaW5f cG93ZXJbYmluX3Bvd2VyX2xlbl07CiAJYm9vbCBkZXRlY3RlZFtzaWduYWwtPmZyZXFzX2NvdW50 XTsKLQlpbnQgdGhyZXNob2xkOwotCWJvb2wgYWJvdmU7Ci0JaW50IGVycm9yOwotCWludCBmcmVx ID0gMDsKLQlpbnQgbWF4OwotCWludCBjLCBpLCBqOworCWludCByZXQsIGZyZXFfYWNjdXJhY3ks IGZyZXEsIGxvY2FsX21heF9mcmVxOworCWRvdWJsZSBtYXgsIGxvY2FsX21heCwgdGhyZXNob2xk OworCXNpemVfdCBpLCBqOworCWJvb2wgYWJvdmUsIHN1Y2Nlc3M7CisKKwkvKiBBbGxvd2VkIGVy cm9yIGluIEh6IGR1ZSB0byBGRlQgc3RlcCAqLworCWZyZXFfYWNjdXJhY3kgPSBzYW1wbGluZ19y YXRlIC8gZGF0YV9sZW47CisJaWd0X2RlYnVnKCJBbGxvd2VkIGZyZXEuIGVycm9yOiAlZCBIelxu IiwgZnJlcV9hY2N1cmFjeSk7CisKKwlyZXQgPSBnc2xfZmZ0X3JlYWxfcmFkaXgyX3RyYW5zZm9y bShkYXRhLCAxLCBkYXRhX2xlbik7CisJaWd0X2Fzc2VydChyZXQgPT0gMCk7CisKKwkvKiBDb21w dXRlIHRoZSBwb3dlciByZWNlaXZlZCBieSBldmVyeSBiaW4gb2YgdGhlIEZGVCwgYW5kIHJlY29y ZCB0aGUKKwkgKiBtYXhpbXVtIHBvd2VyIHJlY2VpdmVkIGFzIGEgd2F5IHRvIG5vcm1hbGl6ZSBh bGwgdGhlIG90aGVycy4KKwkgKgorCSAqIEZvciBpIDwgZGF0YV9sZW4gLyAyLCB0aGUgcmVhbCBw YXJ0IG9mIHRoZSBpLXRoIHRlcm0gaXMgc3RvcmVkIGF0CisJICogZGF0YVtpXSBhbmQgaXRzIGlt YWdpbmFyeSBwYXJ0IGlzIHN0b3JlZCBhdCBkYXRhW2RhdGFfbGVuIC0gaV0uCisJICogaSA9IDAg YW5kIGkgPSBkYXRhX2xlbiAvIDIgYXJlIHNwZWNpYWwgY2FzZXMsIHRoZXkgYXJlIHB1cmVseSBy ZWFsCisJICogc28gdGhlaXIgaW1hZ2luYXJ5IHBhcnQgaXNuJ3Qgc3RvcmVkLgorCSAqCisJICog VGhlIHBvd2VyIGlzIGVuY29kZWQgYXMgdGhlIG1hZ25pdHVkZSBvZiB0aGUgY29tcGxleCBudW1i ZXIgYW5kIHRoZQorCSAqIHBoYXNlIGlzIGVuY29kZWQgYXMgaXRzIGFuZ2xlLgorCSAqLworCW1h eCA9IDA7CisJYmluX3Bvd2VyWzBdID0gZGF0YVswXTsKKwlmb3IgKGkgPSAxOyBpIDwgYmluX3Bv d2VyX2xlbiAtIDE7IGkrKykgeworCQliaW5fcG93ZXJbaV0gPSBoeXBvdChkYXRhW2ldLCBkYXRh W2RhdGFfbGVuIC0gaV0pOworCQlpZiAoYmluX3Bvd2VyW2ldID4gbWF4KQorCQkJbWF4ID0gYmlu X3Bvd2VyW2ldOworCX0KKwliaW5fcG93ZXJbYmluX3Bvd2VyX2xlbiAtIDFdID0gZGF0YVtkYXRh X2xlbiAvIDJdOworCisJZm9yIChpID0gMDsgaSA8IHNpZ25hbC0+ZnJlcXNfY291bnQ7IGkrKykK KwkJZGV0ZWN0ZWRbaV0gPSBmYWxzZTsKKworCS8qIERvIGEgbGluZWFyIHNlYXJjaCB0aHJvdWdo IHRoZSBGRlQgYmlucycgcG93ZXIgdG8gZmluZCB0aGUgdGhlIGxvY2FsCisJICogbWF4aW11bXMg dGhhdCBleGNlZWQgaGFsZiBvZiB0aGUgYWJzb2x1dGUgbWF4aW11bSB0aGF0IHdlIHByZXZpb3Vz bHkKKwkgKiBjYWxjdWxhdGVkLgorCSAqCisJICogU2luY2UgdGhlIGZyZXF1ZW5jaWVzIG1pZ2h0 IG5vdCBiZSBwZXJmZWN0bHkgYWxpZ25lZCB3aXRoIHRoZSBiaW5zIG9mCisJICogdGhlIEZGVCwg d2UgbmVlZCB0byBmaW5kIHRoZSBsb2NhbCBtYXhpbXVtIGFjcm9zcyBzb21lIGNvbnNlY3V0aXZl CisJICogYmlucy4gT25jZSB0aGUgcG93ZXIgcmV0dXJucyB1bmRlciB0aGUgcG93ZXIgdGhyZXNo b2xkLCB3ZSBjb21wYXJlCisJICogdGhlIGZyZXF1ZW5jeSBvZiB0aGUgYmluIHRoYXQgcmVjZWl2 ZWQgdGhlIG1heGltdW0gcG93ZXIgdG8gdGhlCisJICogZXhwZWN0ZWQgZnJlcXVlbmNpZXMuIElm IGZvdW5kLCB3ZSBtYXJrIHRoaXMgZnJlcXVlbmN5IGFzIHN1Y2gsCisJICogb3RoZXJ3aXNlIHdl IHdhcm4gdGhhdCBhbiB1bmV4cGVjdGVkIGZyZXF1ZW5jeSB3YXMgZm91bmQuCisJICovCisJdGhy ZXNob2xkID0gbWF4IC8gMjsKKwlzdWNjZXNzID0gdHJ1ZTsKKwlhYm92ZSA9IGZhbHNlOworCWxv Y2FsX21heCA9IDA7CisJbG9jYWxfbWF4X2ZyZXEgPSAtMTsKKwlmb3IgKGkgPSAwOyBpIDwgYmlu X3Bvd2VyX2xlbjsgaSsrKSB7CisJCWZyZXEgPSBzYW1wbGluZ19yYXRlICogaSAvIGRhdGFfbGVu OworCisJCWlmIChiaW5fcG93ZXJbaV0gPiB0aHJlc2hvbGQpCisJCQlhYm92ZSA9IHRydWU7CisK KwkJaWYgKCFhYm92ZSkgeworCQkJY29udGludWU7CisJCX0KIAotCS8qIEFsbG93ZWQgZXJyb3Ig aW4gSHogZHVlIHRvIEZGVCBzdGVwLiAqLwotCWVycm9yID0gc2FtcGxpbmdfcmF0ZSAvIGZyYW1l czsKKwkJLyogSWYgd2Ugd2VyZSBhYm92ZSB0aGUgdGhyZXNob2xkIGFuZCB3ZSdyZSBub3QgYW55 bW9yZSwgaXQncworCQkgKiB0aW1lIHRvIGRlY2lkZSB3aGV0aGVyIHRoZSBwZWFrIGZyZXF1ZW5j eSBpcyBjb3JyZWN0IG9yCisJCSAqIGludmFsaWQuICovCisJCWlmIChiaW5fcG93ZXJbaV0gPCB0 aHJlc2hvbGQpIHsKKwkJCWZvciAoaiA9IDA7IGogPCBzaWduYWwtPmZyZXFzX2NvdW50OyBqKysp IHsKKwkJCQlpZiAoc2lnbmFsLT5mcmVxc1tqXS5mcmVxID4KKwkJCQkgICAgbG9jYWxfbWF4X2Zy ZXEgLSBmcmVxX2FjY3VyYWN5ICYmCisJCQkJICAgIHNpZ25hbC0+ZnJlcXNbal0uZnJlcSA8CisJ CQkJICAgIGxvY2FsX21heF9mcmVxICsgZnJlcV9hY2N1cmFjeSkgeworCQkJCQlkZXRlY3RlZFtq XSA9IHRydWU7CisJCQkJCWlndF9kZWJ1ZygiRnJlcXVlbmN5ICVkIGRldGVjdGVkXG4iLAorCQkJ CQkJICBsb2NhbF9tYXhfZnJlcSk7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCX0KIAotCWZvciAo YyA9IDA7IGMgPCBjaGFubmVsczsgYysrKSB7Ci0JCWZvciAoaSA9IDA7IGkgPCBmcmFtZXM7IGkr KykKLQkJCWRhdGFbaV0gPSAoZG91YmxlKSBidWZmZXJbaSAqIGNoYW5uZWxzICsgY107CisJCQkv KiBXZSBoYXZlbid0IGdlbmVyYXRlZCB0aGlzIGZyZXF1ZW5jeSwgYnV0IHdlIGRldGVjdGVkCisJ CQkgKiBpdC4gKi8KKwkJCWlmIChqID09IHNpZ25hbC0+ZnJlcXNfY291bnQpIHsKKwkJCQlpZ3Rf ZGVidWcoIkRldGVjdGVkIGFkZGl0aW9uYWwgZnJlcXVlbmN5OiAlZFxuIiwKKwkJCQkJICBsb2Nh bF9tYXhfZnJlcSk7CisJCQkJc3VjY2VzcyA9IGZhbHNlOworCQkJfQogCi0JCWdzbF9mZnRfcmVh bF9yYWRpeDJfdHJhbnNmb3JtKGRhdGEsIDEsIGZyYW1lcyk7CisJCQlhYm92ZSA9IGZhbHNlOwor CQkJbG9jYWxfbWF4ID0gMDsKKwkJCWxvY2FsX21heF9mcmVxID0gLTE7CisJCX0KIAotCQltYXgg PSAwOworCQlpZiAoYmluX3Bvd2VyW2ldID4gbG9jYWxfbWF4KSB7CisJCQlsb2NhbF9tYXggPSBi aW5fcG93ZXJbaV07CisJCQlsb2NhbF9tYXhfZnJlcSA9IGZyZXE7CisJCX0KKwl9CiAKLQkJZm9y IChpID0gMDsgaSA8IGZyYW1lcyAvIDI7IGkrKykgewotCQkJYW1wbGl0dWRlW2ldID0gaHlwb3Qo ZGF0YVtpXSwgZGF0YVtmcmFtZXMgLSBpXSk7Ci0JCQlpZiAoYW1wbGl0dWRlW2ldID4gbWF4KQot CQkJCW1heCA9IGFtcGxpdHVkZVtpXTsKKwkvKiBDaGVjayB0aGF0IGFsbCBmcmVxdWVuY2llcyB3 ZSBnZW5lcmF0ZWQgaGF2ZSBiZWVuIGRldGVjdGVkLiAqLworCWZvciAoaSA9IDA7IGkgPCBzaWdu YWwtPmZyZXFzX2NvdW50OyBpKyspIHsKKwkJaWYgKCFkZXRlY3RlZFtpXSkgeworCQkJaWd0X2Rl YnVnKCJNaXNzaW5nIGZyZXF1ZW5jeTogJWRcbiIsCisJCQkJICBzaWduYWwtPmZyZXFzW2ldLmZy ZXEpOworCQkJc3VjY2VzcyA9IGZhbHNlOwogCQl9CisJfQogCi0JCWZvciAoaSA9IDA7IGkgPCBz aWduYWwtPmZyZXFzX2NvdW50OyBpKyspCi0JCQlkZXRlY3RlZFtpXSA9IGZhbHNlOwotCi0JCXRo cmVzaG9sZCA9IG1heCAvIDI7Ci0JCWFib3ZlID0gZmFsc2U7Ci0JCW1heCA9IDA7Ci0KLQkJZm9y IChpID0gMDsgaSA8IGZyYW1lcyAvIDI7IGkrKykgewotCQkJaWYgKGFtcGxpdHVkZVtpXSA+IHRo cmVzaG9sZCkKLQkJCQlhYm92ZSA9IHRydWU7Ci0KLQkJCWlmIChhYm92ZSkgewotCQkJCWlmIChh bXBsaXR1ZGVbaV0gPCB0aHJlc2hvbGQpIHsKLQkJCQkJYWJvdmUgPSBmYWxzZTsKLQkJCQkJbWF4 ID0gMDsKLQotCQkJCQlmb3IgKGogPSAwOyBqIDwgc2lnbmFsLT5mcmVxc19jb3VudDsgaisrKSB7 Ci0JCQkJCQlpZiAoc2lnbmFsLT5mcmVxc1tqXS5mcmVxID4KLQkJCQkJCSAgICBmcmVxIC0gZXJy b3IgJiYKLQkJCQkJCSAgICBzaWduYWwtPmZyZXFzW2pdLmZyZXEgPAotCQkJCQkJICAgIGZyZXEg KyBlcnJvcikgewotCQkJCQkJCWRldGVjdGVkW2pdID0gdHJ1ZTsKLQkJCQkJCQlicmVhazsKLQkJ CQkJCX0KLQkJCQkJfQotCi0JCQkJCS8qIERldGVjdGVkIGZyZXF1ZW5jeSB3YXMgbm90IGdlbmVy YXRlZC4gKi8KLQkJCQkJaWYgKGogPT0gc2lnbmFsLT5mcmVxc19jb3VudCkgewotCQkJCQkJaWd0 X2RlYnVnKCJEZXRlY3RlZCBhZGRpdGlvbmFsIGZyZXF1ZW5jeTogJWRcbiIsCi0JCQkJCQkJICBm cmVxKTsKLQkJCQkJCXJldHVybiBmYWxzZTsKLQkJCQkJfQotCQkJCX0KKwlyZXR1cm4gc3VjY2Vz czsKK30KIAotCQkJCWlmIChhbXBsaXR1ZGVbaV0gPiBtYXgpIHsKLQkJCQkJbWF4ID0gYW1wbGl0 dWRlW2ldOwotCQkJCQlmcmVxID0gc2FtcGxpbmdfcmF0ZSAqIGkgLyBmcmFtZXM7Ci0JCQkJfQot CQkJfQotCQl9CisvKioKKyAqIEV4dHJhY3RzIGEgc2luZ2xlIGNoYW5uZWwgZnJvbSBhIG11bHRp LWNoYW5uZWwgUzMyX0xFIGlucHV0IGJ1ZmZlci4KKyAqLworc2l6ZV90IGF1ZGlvX2V4dHJhY3Rf Y2hhbm5lbF9zMzJfbGUoZG91YmxlICpkc3QsIHNpemVfdCBkc3RfY2FwLAorCQkJCSAgICBpbnQz Ml90ICpzcmMsIHNpemVfdCBzcmNfbGVuLAorCQkJCSAgICBpbnQgbl9jaGFubmVscywgaW50IGNo YW5uZWwpCit7CisJc2l6ZV90IGRzdF9sZW4sIGk7CiAKLQkJZm9yIChpID0gMDsgaSA8IHNpZ25h bC0+ZnJlcXNfY291bnQ7IGkrKykgewotCQkJaWYgKCFkZXRlY3RlZFtpXSkgewotCQkJCWlndF9k ZWJ1ZygiTWlzc2luZyBmcmVxdWVuY3k6ICVkXG4iLAotCQkJCQkgIHNpZ25hbC0+ZnJlcXNbaV0u ZnJlcSk7Ci0JCQkJcmV0dXJuIGZhbHNlOwotCQkJfQotCQl9CisJaWd0X2Fzc2VydChjaGFubmVs IDwgbl9jaGFubmVscyk7CisJaWd0X2Fzc2VydChzcmNfbGVuICUgbl9jaGFubmVscyA9PSAwKTsK Kwlkc3RfbGVuID0gc3JjX2xlbiAvIG5fY2hhbm5lbHM7CisJaWd0X2Fzc2VydChkc3RfbGVuIDw9 IGRzdF9jYXApOworCWZvciAoaSA9IDA7IGkgPCBkc3RfbGVuOyBpKyspCisJCWRzdFtpXSA9IChk b3VibGUpIHNyY1tpICogbl9jaGFubmVscyArIGNoYW5uZWxdOworCisJcmV0dXJuIGRzdF9sZW47 Cit9CisKKyNkZWZpbmUgUklGRl9UQUcgIlJJRkYiCisjZGVmaW5lIFdBVkVfVEFHICJXQVZFIgor I2RlZmluZSBGTVRfVEFHICJmbXQgIgorI2RlZmluZSBEQVRBX1RBRyAiZGF0YSIKKworc3RhdGlj IHZvaWQKK2FwcGVuZF90b19idWZmZXIoY2hhciAqZHN0LCBzaXplX3QgKmksIGNvbnN0IHZvaWQg KnNyYywgc2l6ZV90IHNyY19zaXplKQoreworCW1lbWNweSgmZHN0WyppXSwgc3JjLCBzcmNfc2l6 ZSk7CisJKmkgKz0gc3JjX3NpemU7Cit9CisKKy8qKgorICogYXVkaW9fY3JlYXRlX3dhdl9maWxl X3MzMl9sZToKKyAqIEBxdWFsaWZpZXI6IHRoZSBiYXNlbmFtZSBvZiB0aGUgZmlsZSAodGhlIHRl c3QgbmFtZSB3aWxsIGJlIHByZXBlbmRlZCwgYW5kCisgKiB0aGUgZmlsZSBleHRlbnNpb24gd2ls bCBiZSBhcHBlbmRlZCkKKyAqIEBzYW1wbGVfcmF0ZTogdGhlIHNhbXBsZSByYXRlIGluIEh6Cisg KiBAY2hhbm5lbHM6IHRoZSBudW1iZXIgb2YgY2hhbm5lbHMKKyAqIEBwYXRoOiBpZiBub24tTlVM TCwgd2lsbCBiZSBzZXQgdG8gYSBwb2ludGVyIHRvIHRoZSBuZXcgZmlsZSBwYXRoICh0aGUKKyAq IGNhbGxlciBpcyByZXNwb25zaWJsZSBmb3IgZnJlZS1pbmcgaXQpCisgKgorICogQ3JlYXRlcyBh IG5ldyBXQVYgZmlsZS4KKyAqCisgKiBBZnRlciBjYWxsaW5nIHRoaXMgZnVuY3Rpb24sIHRoZSBj YWxsZXIgaXMgZXhwZWN0ZWQgdG8gd3JpdGUgUzMyX0xFIFBDTSBkYXRhCisgKiB0byB0aGUgcmV0 dXJuZWQgZmlsZSBkZXNjcmlwdG9yLgorICoKKyAqIFNlZSBodHRwOi8vd3d3LW1tc3AuZWNlLm1j Z2lsbC5jYS9Eb2N1bWVudHMvQXVkaW9Gb3JtYXRzL1dBVkUvV0FWRS5odG1sIGZvcgorICogYSBX QVYgZmlsZSBmb3JtYXQgc3BlY2lmaWNhdGlvbi4KKyAqCisgKiBSZXR1cm5zOiBhIGZpbGUgZGVz Y3JpcHRvciB0byB0aGUgbmV3bHkgY3JlYXRlZCBmaWxlLCBvciAtMSBvbiBlcnJvci4KKyAqLwor aW50IGF1ZGlvX2NyZWF0ZV93YXZfZmlsZV9zMzJfbGUoY29uc3QgY2hhciAqcXVhbGlmaWVyLCB1 aW50MzJfdCBzYW1wbGVfcmF0ZSwKKwkJCQkgdWludDE2X3QgY2hhbm5lbHMsIGNoYXIgKipwYXRo KQoreworCWNoYXIgX3BhdGhbUEFUSF9NQVhdOworCWNvbnN0IGNoYXIgKnRlc3RfbmFtZSwgKnN1 YnRlc3RfbmFtZTsKKwlpbnQgZmQ7CisJY2hhciBoZWFkZXJbNDRdOworCXNpemVfdCBpID0gMDsK Kwl1aW50MzJfdCBmaWxlX3NpemUsIGNodW5rX3NpemUsIGJ5dGVfcmF0ZTsKKwl1aW50MTZfdCBm b3JtYXQsIGJsb2NrX2FsaWduLCBiaXRzX3Blcl9zYW1wbGU7CisKKwl0ZXN0X25hbWUgPSBpZ3Rf dGVzdF9uYW1lKCk7CisJc3VidGVzdF9uYW1lID0gaWd0X3N1YnRlc3RfbmFtZSgpOworCisJaWd0 X2Fzc2VydChpZ3RfZnJhbWVfZHVtcF9wYXRoKTsKKwlzbnByaW50ZihfcGF0aCwgc2l6ZW9mKF9w YXRoKSwgIiVzL2F1ZGlvLSVzLSVzLSVzLndhdiIsCisJCSBpZ3RfZnJhbWVfZHVtcF9wYXRoLCB0 ZXN0X25hbWUsIHN1YnRlc3RfbmFtZSwgcXVhbGlmaWVyKTsKKworCWlmIChwYXRoKQorCQkqcGF0 aCA9IHN0cmR1cChfcGF0aCk7CisKKwlpZ3RfZGVidWcoIkR1bXBpbmcgJXMgYXVkaW8gdG8gJXNc biIsIHF1YWxpZmllciwgX3BhdGgpOworCWZkID0gb3BlbihfcGF0aCwgT19XUk9OTFkgfCBPX0NS RUFUIHwgT19UUlVOQyk7CisJaWYgKGZkIDwgMCkgeworCQlpZ3Rfd2Fybigib3BlbiBmYWlsZWQ6 ICVzXG4iLCBzdHJlcnJvcihlcnJubykpOworCQlyZXR1cm4gLTE7CisJfQorCisJLyogRmlsZSBo ZWFkZXIgKi8KKwlmaWxlX3NpemUgPSBVSU5UMzJfTUFYOyAvKiB1bmtub3duIGZpbGUgc2l6ZSAq LworCWFwcGVuZF90b19idWZmZXIoaGVhZGVyLCAmaSwgUklGRl9UQUcsIHN0cmxlbihSSUZGX1RB RykpOworCWFwcGVuZF90b19idWZmZXIoaGVhZGVyLCAmaSwgJmZpbGVfc2l6ZSwgc2l6ZW9mKGZp bGVfc2l6ZSkpOworCWFwcGVuZF90b19idWZmZXIoaGVhZGVyLCAmaSwgV0FWRV9UQUcsIHN0cmxl bihXQVZFX1RBRykpOworCisJLyogRm9ybWF0IGNodW5rICovCisJY2h1bmtfc2l6ZSA9IDE2Owor CWZvcm1hdCA9IDE7IC8qIFBDTSAqLworCWJpdHNfcGVyX3NhbXBsZSA9IDMyOyAvKiBTMzJfTEUg Ki8KKwlieXRlX3JhdGUgPSBzYW1wbGVfcmF0ZSAqIGNoYW5uZWxzICogYml0c19wZXJfc2FtcGxl IC8gODsKKwlibG9ja19hbGlnbiA9IGNoYW5uZWxzICogYml0c19wZXJfc2FtcGxlIC8gODsKKwlh cHBlbmRfdG9fYnVmZmVyKGhlYWRlciwgJmksIEZNVF9UQUcsIHN0cmxlbihGTVRfVEFHKSk7CisJ YXBwZW5kX3RvX2J1ZmZlcihoZWFkZXIsICZpLCAmY2h1bmtfc2l6ZSwgc2l6ZW9mKGNodW5rX3Np emUpKTsKKwlhcHBlbmRfdG9fYnVmZmVyKGhlYWRlciwgJmksICZmb3JtYXQsIHNpemVvZihmb3Jt YXQpKTsKKwlhcHBlbmRfdG9fYnVmZmVyKGhlYWRlciwgJmksICZjaGFubmVscywgc2l6ZW9mKGNo YW5uZWxzKSk7CisJYXBwZW5kX3RvX2J1ZmZlcihoZWFkZXIsICZpLCAmc2FtcGxlX3JhdGUsIHNp emVvZihzYW1wbGVfcmF0ZSkpOworCWFwcGVuZF90b19idWZmZXIoaGVhZGVyLCAmaSwgJmJ5dGVf cmF0ZSwgc2l6ZW9mKGJ5dGVfcmF0ZSkpOworCWFwcGVuZF90b19idWZmZXIoaGVhZGVyLCAmaSwg JmJsb2NrX2FsaWduLCBzaXplb2YoYmxvY2tfYWxpZ24pKTsKKwlhcHBlbmRfdG9fYnVmZmVyKGhl YWRlciwgJmksICZiaXRzX3Blcl9zYW1wbGUsIHNpemVvZihiaXRzX3Blcl9zYW1wbGUpKTsKKwor CS8qIERhdGEgY2h1bmsgKi8KKwljaHVua19zaXplID0gVUlOVDMyX01BWDsgLyogdW5rbm93biBj aHVuayBzaXplICovCisJYXBwZW5kX3RvX2J1ZmZlcihoZWFkZXIsICZpLCBEQVRBX1RBRywgc3Ry bGVuKERBVEFfVEFHKSk7CisJYXBwZW5kX3RvX2J1ZmZlcihoZWFkZXIsICZpLCAmY2h1bmtfc2l6 ZSwgc2l6ZW9mKGNodW5rX3NpemUpKTsKKworCWlndF9hc3NlcnQoaSA9PSBzaXplb2YoaGVhZGVy KSk7CisKKwlpZiAod3JpdGUoZmQsIGhlYWRlciwgc2l6ZW9mKGhlYWRlcikpICE9IHNpemVvZiho ZWFkZXIpKSB7CisJCWlndF93YXJuKCJ3cml0ZSBmYWlsZWQ6ICVzJ24iLCBzdHJlcnJvcihlcnJu bykpOworCQljbG9zZShmZCk7CisJCXJldHVybiAtMTsKIAl9CiAKLQlyZXR1cm4gdHJ1ZTsKKwly ZXR1cm4gZmQ7CiB9CmRpZmYgLS1naXQgYS9saWIvaWd0X2F1ZGlvLmggYi9saWIvaWd0X2F1ZGlv LmgKaW5kZXggYjNiNjU4YTQuLjRhYTQzZTY5IDEwMDY0NAotLS0gYS9saWIvaWd0X2F1ZGlvLmgK KysrIGIvbGliL2lndF9hdWRpby5oCkBAIC0zMCw2ICszMCw3IEBACiAjaW5jbHVkZSAiY29uZmln LmgiCiAKICNpbmNsdWRlIDxzdGRib29sLmg+CisjaW5jbHVkZSA8c3RkaW50Lmg+CiAKIHN0cnVj dCBhdWRpb19zaWduYWw7CiAKQEAgLTM3LDggKzM4LDEzIEBAIHN0cnVjdCBhdWRpb19zaWduYWwg KmF1ZGlvX3NpZ25hbF9pbml0KGludCBjaGFubmVscywgaW50IHNhbXBsaW5nX3JhdGUpOwogaW50 IGF1ZGlvX3NpZ25hbF9hZGRfZnJlcXVlbmN5KHN0cnVjdCBhdWRpb19zaWduYWwgKnNpZ25hbCwg aW50IGZyZXF1ZW5jeSk7CiB2b2lkIGF1ZGlvX3NpZ25hbF9zeW50aGVzaXplKHN0cnVjdCBhdWRp b19zaWduYWwgKnNpZ25hbCk7CiB2b2lkIGF1ZGlvX3NpZ25hbF9jbGVhbihzdHJ1Y3QgYXVkaW9f c2lnbmFsICpzaWduYWwpOwotdm9pZCBhdWRpb19zaWduYWxfZmlsbChzdHJ1Y3QgYXVkaW9fc2ln bmFsICpzaWduYWwsIHNob3J0ICpidWZmZXIsIGludCBmcmFtZXMpOwotYm9vbCBhdWRpb19zaWdu YWxfZGV0ZWN0KHN0cnVjdCBhdWRpb19zaWduYWwgKnNpZ25hbCwgaW50IGNoYW5uZWxzLAotCQkJ IGludCBzYW1wbGluZ19yYXRlLCBzaG9ydCAqYnVmZmVyLCBpbnQgZnJhbWVzKTsKK3ZvaWQgYXVk aW9fc2lnbmFsX2ZpbGwoc3RydWN0IGF1ZGlvX3NpZ25hbCAqc2lnbmFsLCBpbnQxNl90ICpidWZm ZXIsIGludCBmcmFtZXMpOworYm9vbCBhdWRpb19zaWduYWxfZGV0ZWN0KHN0cnVjdCBhdWRpb19z aWduYWwgKnNpZ25hbCwgaW50IHNhbXBsaW5nX3JhdGUsCisJCQkgZG91YmxlICpkYXRhLCBzaXpl X3QgZGF0YV9sZW4pOworc2l6ZV90IGF1ZGlvX2V4dHJhY3RfY2hhbm5lbF9zMzJfbGUoZG91Ymxl ICpkc3QsIHNpemVfdCBkc3RfY2FwLAorCQkJCSAgICBpbnQzMl90ICpzcmMsIHNpemVfdCBzcmNf bGVuLAorCQkJCSAgICBpbnQgbl9jaGFubmVscywgaW50IGNoYW5uZWwpOworaW50IGF1ZGlvX2Ny ZWF0ZV93YXZfZmlsZV9zMzJfbGUoY29uc3QgY2hhciAqcXVhbGlmaWVyLCB1aW50MzJfdCBzYW1w bGVfcmF0ZSwKKwkJCQkgdWludDE2X3QgY2hhbm5lbHMsIGNoYXIgKipwYXRoKTsKIAogI2VuZGlm CmRpZmYgLS1naXQgYS9saWIvaWd0X2F1eC5jIGIvbGliL2lndF9hdXguYwppbmRleCAwNTUyODM1 Mi4uM2RkNjhkOTUgMTAwNjQ0Ci0tLSBhL2xpYi9pZ3RfYXV4LmMKKysrIGIvbGliL2lndF9hdXgu YwpAQCAtMTI1OSw2ICsxMjU5LDM3IEBAIHZvaWQgaWd0X3NldF9tb2R1bGVfcGFyYW1faW50KGNv bnN0IGNoYXIgKm5hbWUsIGludCB2YWwpCiAJaWd0X3NldF9tb2R1bGVfcGFyYW0obmFtZSwgc3Ry KTsKIH0KIAorLyoqCisgKiBpZ3RfaXNfcHJvY2Vzc19ydW5uaW5nOgorICogQGNvbW06IE5hbWUg b2YgcHJvY2VzcyBpbiB0aGUgZm9ybSBmb3VuZCBpbiAvcHJvYy9waWQvY29tbSAobGltaXRlZCB0 byAxNQorICogY2hhcnMpCisgKgorICogUmV0dXJuczogdHJ1ZSBpbiBjYXNlIHRoZSBwcm9jZXNz IGhhcyBiZWVuIGZvdW5kLCBmYWxzZSBvdGhlcndpc2UuCisgKgorICogVGhpcyBmdW5jdGlvbiBj aGVja3MgaW4gdGhlIHByb2Nlc3MgdGFibGUgZm9yIGFuIGVudHJ5IHdpdGggdGhlIG5hbWUgQGNv bW0uCisgKi8KK2ludCBpZ3RfaXNfcHJvY2Vzc19ydW5uaW5nKGNvbnN0IGNoYXIgKmNvbW0pCit7 CisJUFJPQ1RBQiAqcHJvYzsKKwlwcm9jX3QgKnByb2NfaW5mbzsKKwlib29sIGZvdW5kID0gZmFs c2U7CisKKwlwcm9jID0gb3BlbnByb2MoUFJPQ19GSUxMQ09NIHwgUFJPQ19GSUxMU1RBVCk7CisJ aWd0X2Fzc2VydChwcm9jICE9IE5VTEwpOworCisJd2hpbGUgKChwcm9jX2luZm8gPSByZWFkcHJv Yyhwcm9jLCBOVUxMKSkpIHsKKwkJaWYgKCFzdHJuY2FzZWNtcChwcm9jX2luZm8tPmNtZCwgY29t bSwgc2l6ZW9mKHByb2NfaW5mby0+Y21kKSkpIHsKKwkJCWZyZWVwcm9jKHByb2NfaW5mbyk7CisJ CQlmb3VuZCA9IHRydWU7CisJCQlicmVhazsKKwkJfQorCQlmcmVlcHJvYyhwcm9jX2luZm8pOwor CX0KKworCWNsb3NlcHJvYyhwcm9jKTsKKwlyZXR1cm4gZm91bmQ7Cit9CisKIC8qKgogICogaWd0 X3Rlcm1pbmF0ZV9wcm9jZXNzOgogICogQHNpZzogU2lnbmFsIHRvIHNlbmQKZGlmZiAtLWdpdCBh L2xpYi9pZ3RfYXV4LmggYi9saWIvaWd0X2F1eC5oCmluZGV4IDU1MzkyNzkwLi5kYmQ4OGI2NyAx MDA2NDQKLS0tIGEvbGliL2lndF9hdXguaAorKysgYi9saWIvaWd0X2F1eC5oCkBAIC0yNzksNiAr Mjc5LDcgQEAgYm9vbCBpZ3RfYWxsb3dfdW5saW1pdGVkX2ZpbGVzKHZvaWQpOwogdm9pZCBpZ3Rf c2V0X21vZHVsZV9wYXJhbShjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICp2YWwpOwogdm9p ZCBpZ3Rfc2V0X21vZHVsZV9wYXJhbV9pbnQoY29uc3QgY2hhciAqbmFtZSwgaW50IHZhbCk7CiAK K2ludCBpZ3RfaXNfcHJvY2Vzc19ydW5uaW5nKGNvbnN0IGNoYXIgKmNvbW0pOwogaW50IGlndF90 ZXJtaW5hdGVfcHJvY2VzcyhpbnQgc2lnLCBjb25zdCBjaGFyICpjb21tKTsKIHZvaWQgaWd0X2xz b2YoY29uc3QgY2hhciAqZHBhdGgpOwogCmRpZmYgLS1naXQgYS9saWIvaWd0X2NoYW1lbGl1bS5j IGIvbGliL2lndF9jaGFtZWxpdW0uYwppbmRleCAwMmNjOWIyYy4uN2M5MDMwZDEgMTAwNjQ0Ci0t LSBhL2xpYi9pZ3RfY2hhbWVsaXVtLmMKKysrIGIvbGliL2lndF9jaGFtZWxpdW0uYwpAQCAtMjE4 LDYgKzIxOCwxMiBAQCB2b2lkIGNoYW1lbGl1bV9kZXN0cm95X2ZyYW1lX2R1bXAoc3RydWN0IGNo YW1lbGl1bV9mcmFtZV9kdW1wICpkdW1wKQogCWZyZWUoZHVtcCk7CiB9CiAKK3ZvaWQgY2hhbWVs aXVtX2Rlc3Ryb3lfYXVkaW9fZmlsZShzdHJ1Y3QgY2hhbWVsaXVtX2F1ZGlvX2ZpbGUgKmF1ZGlv X2ZpbGUpCit7CisJZnJlZShhdWRpb19maWxlLT5wYXRoKTsKKwlmcmVlKGF1ZGlvX2ZpbGUpOwor fQorCiBzdHJ1Y3QgZnNtX21vbml0b3JfYXJncyB7CiAJc3RydWN0IGNoYW1lbGl1bSAqY2hhbWVs aXVtOwogCXN0cnVjdCBjaGFtZWxpdW1fcG9ydCAqcG9ydDsKQEAgLTkyNCw2ICs5MzAsMTAxIEBA IGludCBjaGFtZWxpdW1fZ2V0X2NhcHR1cmVkX2ZyYW1lX2NvdW50KHN0cnVjdCBjaGFtZWxpdW0g KmNoYW1lbGl1bSkKIAlyZXR1cm4gcmV0OwogfQogCisvKioKKyAqIGNoYW1lbGl1bV9zdGFydF9j YXB0dXJpbmdfYXVkaW86CisgKiBAY2hhbWVsaXVtOiB0aGUgQ2hhbWVsaXVtIGluc3RhbmNlCisg KiBAcG9ydDogdGhlIHBvcnQgdG8gY2FwdHVyZSBhdWRpbyBmcm9tIChpdCBtdXN0IHN1cHBvcnQg YXVkaW8pCisgKiBAc2F2ZV90b19maWxlOiB3aGV0aGVyIHRoZSBjYXB0dXJlZCBhdWRpbyBkYXRh IHNob3VsZCBiZSBzYXZlZCB0byBhIGZpbGUgb24KKyAqIHRoZSBDaGFtZWxpdW0gZGV2aWNlCisg KgorICogU3RhcnRzIGNhcHR1cmluZyBhdWRpbyBmcm9tIGEgQ2hhbWVsaXVtIHBvcnQuIFRvIHN0 b3AgdGhlIGNhcHR1cmUsIHVzZQorICogI2NoYW1lbGl1bV9zdG9wX2NhcHR1cmluZ19hdWRpby4g VG8gcmV0cmlldmUgdGhlIGF1ZGlvIGRhdGEsIGVpdGhlciB1c2UgdGhlCisgKiBzdHJlYW0gc2Vy dmVyIG9yIGVuYWJsZSBAc2F2ZV90b19maWxlICh0aGUgbGF0dGVyIGlzIG1haW5seSB1c2VmdWwg Zm9yCisgKiBkZWJ1Z2dpbmcgcHVycG9zZXMpLgorICoKKyAqIEl0IGlzbid0IHBvc3NpYmxlIHRv IGNhcHR1cmUgYXVkaW8gZnJvbSBtdWx0aXBsZSBwb3J0cyBhdCB0aGUgc2FtZSB0aW1lLgorICov Cit2b2lkIGNoYW1lbGl1bV9zdGFydF9jYXB0dXJpbmdfYXVkaW8oc3RydWN0IGNoYW1lbGl1bSAq Y2hhbWVsaXVtLAorCQkJCSAgICBzdHJ1Y3QgY2hhbWVsaXVtX3BvcnQgKnBvcnQsCisJCQkJICAg IGJvb2wgc2F2ZV90b19maWxlKQoreworCXhtbHJwY192YWx1ZSAqcmVzOworCisJcmVzID0gY2hh bWVsaXVtX3JwYyhjaGFtZWxpdW0sIHBvcnQsICJTdGFydENhcHR1cmluZ0F1ZGlvIiwgIihpYiki LAorCQkJICAgIHBvcnQtPmlkLCBzYXZlX3RvX2ZpbGUpOworCXhtbHJwY19ERUNSRUYocmVzKTsK K30KKworc3RhdGljIHZvaWQgYXVkaW9fZm9ybWF0X2Zyb21feG1sKHN0cnVjdCBjaGFtZWxpdW0g KmNoYW1lbGl1bSwKKwkJCQkgIHhtbHJwY192YWx1ZSAqcmVzLCBpbnQgKnJhdGUsIGludCAqY2hh bm5lbHMpCit7CisJeG1scnBjX3ZhbHVlICpyZXNfdHlwZSwgKnJlc19yYXRlLCAqcmVzX3NhbXBs ZV9mb3JtYXQsICpyZXNfY2hhbm5lbDsKKwljaGFyICp0eXBlLCAqc2FtcGxlX2Zvcm1hdDsKKwor CXhtbHJwY19zdHJ1Y3RfZmluZF92YWx1ZSgmY2hhbWVsaXVtLT5lbnYsIHJlcywgImZpbGVfdHlw ZSIsICZyZXNfdHlwZSk7CisJeG1scnBjX3N0cnVjdF9maW5kX3ZhbHVlKCZjaGFtZWxpdW0tPmVu diwgcmVzLCAicmF0ZSIsICZyZXNfcmF0ZSk7CisJeG1scnBjX3N0cnVjdF9maW5kX3ZhbHVlKCZj aGFtZWxpdW0tPmVudiwgcmVzLCAic2FtcGxlX2Zvcm1hdCIsICZyZXNfc2FtcGxlX2Zvcm1hdCk7 CisJeG1scnBjX3N0cnVjdF9maW5kX3ZhbHVlKCZjaGFtZWxpdW0tPmVudiwgcmVzLCAiY2hhbm5l bCIsICZyZXNfY2hhbm5lbCk7CisKKwl4bWxycGNfcmVhZF9zdHJpbmcoJmNoYW1lbGl1bS0+ZW52 LCByZXNfdHlwZSwgKGNvbnN0IGNoYXIgKiopICZ0eXBlKTsKKwlpZ3RfYXNzZXJ0KHN0cmNtcCh0 eXBlLCAicmF3IikgPT0gMCk7CisJZnJlZSh0eXBlKTsKKworCXhtbHJwY19yZWFkX3N0cmluZygm Y2hhbWVsaXVtLT5lbnYsIHJlc19zYW1wbGVfZm9ybWF0LCAoY29uc3QgY2hhciAqKikgJnNhbXBs ZV9mb3JtYXQpOworCWlndF9hc3NlcnQoc3RyY21wKHNhbXBsZV9mb3JtYXQsICJTMzJfTEUiKSA9 PSAwKTsKKwlmcmVlKHNhbXBsZV9mb3JtYXQpOworCisJeG1scnBjX3JlYWRfaW50KCZjaGFtZWxp dW0tPmVudiwgcmVzX3JhdGUsIHJhdGUpOworCXhtbHJwY19yZWFkX2ludCgmY2hhbWVsaXVtLT5l bnYsIHJlc19jaGFubmVsLCBjaGFubmVscyk7CisKKwl4bWxycGNfREVDUkVGKHJlc19jaGFubmVs KTsKKwl4bWxycGNfREVDUkVGKHJlc19zYW1wbGVfZm9ybWF0KTsKKwl4bWxycGNfREVDUkVGKHJl c19yYXRlKTsKKwl4bWxycGNfREVDUkVGKHJlc190eXBlKTsKK30KKworLyoqCisgKiBjaGFtZWxp dW1fc3RvcF9jYXB0dXJpbmdfYXVkaW86CisgKiBAY2hhbWVsaXVtOiB0aGUgQ2hhbWVsaXVtIGlu c3RhbmNlCisgKiBAcG9ydDogdGhlIHBvcnQgZnJvbSB3aGljaCBhdWRpbyBpcyBiZWluZyBjYXB0 dXJlZAorICoKKyAqIFN0b3BzIGNhcHR1cmluZyBhdWRpbyBmcm9tIGEgQ2hhbWVsaXVtIHBvcnQu IElmCisgKiAjY2hhbWVsaXVtX3N0YXJ0X2NhcHR1cmluZ19hdWRpbyBoYXMgYmVlbiBjYWxsZWQg d2l0aCBAc2F2ZV90b19maWxlIGVuYWJsZWQsCisgKiB0aGlzIGZ1bmN0aW9uIHdpbGwgcmV0dXJu IGEgI2NoYW1lbGl1bV9hdWRpb19maWxlIHN0cnVjdCBjb250YWluaW5nIGRldGFpbHMKKyAqIGFi b3V0IHRoZSBhdWRpbyBmaWxlLiBPbmNlIHRoZSBjYWxsZXIgaXMgZG9uZSB3aXRoIHRoZSBzdHJ1 Y3QsIHRoZXkgc2hvdWxkCisgKiByZWxlYXNlIGl0IHdpdGggI2NoYW1lbGl1bV9kZXN0cm95X2F1 ZGlvX2ZpbGUuCisgKi8KK3N0cnVjdCBjaGFtZWxpdW1fYXVkaW9fZmlsZSAqY2hhbWVsaXVtX3N0 b3BfY2FwdHVyaW5nX2F1ZGlvKHN0cnVjdCBjaGFtZWxpdW0gKmNoYW1lbGl1bSwKKwkJCQkJCQkg ICAgc3RydWN0IGNoYW1lbGl1bV9wb3J0ICpwb3J0KQoreworCXhtbHJwY192YWx1ZSAqcmVzLCAq cmVzX3BhdGgsICpyZXNfcHJvcHM7CisJc3RydWN0IGNoYW1lbGl1bV9hdWRpb19maWxlICpmaWxl ID0gTlVMTDsKKwljaGFyICpwYXRoOworCisJcmVzID0gY2hhbWVsaXVtX3JwYyhjaGFtZWxpdW0s IE5VTEwsICJTdG9wQ2FwdHVyaW5nQXVkaW8iLCAiKGkpIiwKKwkJCSAgICBwb3J0LT5pZCk7CisJ eG1scnBjX2FycmF5X3JlYWRfaXRlbSgmY2hhbWVsaXVtLT5lbnYsIHJlcywgMCwgJnJlc19wYXRo KTsKKwl4bWxycGNfYXJyYXlfcmVhZF9pdGVtKCZjaGFtZWxpdW0tPmVudiwgcmVzLCAxLCAmcmVz X3Byb3BzKTsKKworCXhtbHJwY19yZWFkX3N0cmluZygmY2hhbWVsaXVtLT5lbnYsIHJlc19wYXRo LCAoY29uc3QgY2hhciAqKikgJnBhdGgpOworCisJaWYgKHN0cmxlbihwYXRoKSA+IDApIHsKKwkJ ZmlsZSA9IGNhbGxvYygxLCBzaXplb2YoKmZpbGUpKTsKKwkJZmlsZS0+cGF0aCA9IHBhdGg7CisK KwkJYXVkaW9fZm9ybWF0X2Zyb21feG1sKGNoYW1lbGl1bSwgcmVzX3Byb3BzLAorCQkJCSAgICAg ICZmaWxlLT5yYXRlLCAmZmlsZS0+Y2hhbm5lbHMpOworCX0gZWxzZSB7CisJCWZyZWUocGF0aCk7 CisJfQorCisJeG1scnBjX0RFQ1JFRihyZXNfcHJvcHMpOworCXhtbHJwY19ERUNSRUYocmVzX3Bh dGgpOworCXhtbHJwY19ERUNSRUYocmVzKTsKKworCXJldHVybiBmaWxlOworfQorCiBzdGF0aWMg cGl4bWFuX2ltYWdlX3QgKmNvbnZlcnRfZnJhbWVfZm9ybWF0KHBpeG1hbl9pbWFnZV90ICpzcmMs CiAJCQkJCSAgICBpbnQgZm9ybWF0KQogewpkaWZmIC0tZ2l0IGEvbGliL2lndF9jaGFtZWxpdW0u aCBiL2xpYi9pZ3RfY2hhbWVsaXVtLmgKaW5kZXggMjMzZWFkODUuLjA0N2Y4YzVkIDEwMDY0NAot LS0gYS9saWIvaWd0X2NoYW1lbGl1bS5oCisrKyBiL2xpYi9pZ3RfY2hhbWVsaXVtLmgKQEAgLTUz LDYgKzUzLDEyIEBAIGVudW0gY2hhbWVsaXVtX2NoZWNrIHsKIAlDSEFNRUxJVU1fQ0hFQ0tfQ1JD LAogfTsKIAorc3RydWN0IGNoYW1lbGl1bV9hdWRpb19maWxlIHsKKwljaGFyICpwYXRoOworCWlu dCByYXRlOyAvKiBIeiAqLworCWludCBjaGFubmVsczsKK307CisKIHN0cnVjdCBjaGFtZWxpdW0g KmNoYW1lbGl1bV9pbml0KGludCBkcm1fZmQpOwogdm9pZCBjaGFtZWxpdW1fZGVpbml0KHN0cnVj dCBjaGFtZWxpdW0gKmNoYW1lbGl1bSk7CiB2b2lkIGNoYW1lbGl1bV9yZXNldChzdHJ1Y3QgY2hh bWVsaXVtICpjaGFtZWxpdW0pOwpAQCAtMTAwLDYgKzEwNiwxMCBAQCB2b2lkIGNoYW1lbGl1bV9z dGFydF9jYXB0dXJlKHN0cnVjdCBjaGFtZWxpdW0gKmNoYW1lbGl1bSwKIHZvaWQgY2hhbWVsaXVt X3N0b3BfY2FwdHVyZShzdHJ1Y3QgY2hhbWVsaXVtICpjaGFtZWxpdW0sIGludCBmcmFtZV9jb3Vu dCk7CiB2b2lkIGNoYW1lbGl1bV9jYXB0dXJlKHN0cnVjdCBjaGFtZWxpdW0gKmNoYW1lbGl1bSwg c3RydWN0IGNoYW1lbGl1bV9wb3J0ICpwb3J0LAogCQkgICAgICAgaW50IHgsIGludCB5LCBpbnQg dywgaW50IGgsIGludCBmcmFtZV9jb3VudCk7Cit2b2lkIGNoYW1lbGl1bV9zdGFydF9jYXB0dXJp bmdfYXVkaW8oc3RydWN0IGNoYW1lbGl1bSAqY2hhbWVsaXVtLAorCQkJCSAgICBzdHJ1Y3QgY2hh bWVsaXVtX3BvcnQgKnBvcnQsIGJvb2wgc2F2ZV90b19maWxlKTsKK3N0cnVjdCBjaGFtZWxpdW1f YXVkaW9fZmlsZSAqY2hhbWVsaXVtX3N0b3BfY2FwdHVyaW5nX2F1ZGlvKHN0cnVjdCBjaGFtZWxp dW0gKmNoYW1lbGl1bSwKKwkJCQkJCQkgICAgc3RydWN0IGNoYW1lbGl1bV9wb3J0ICpwb3J0KTsK IGlndF9jcmNfdCAqY2hhbWVsaXVtX3JlYWRfY2FwdHVyZWRfY3JjcyhzdHJ1Y3QgY2hhbWVsaXVt ICpjaGFtZWxpdW0sCiAJCQkJCWludCAqZnJhbWVfY291bnQpOwogc3RydWN0IGNoYW1lbGl1bV9m cmFtZV9kdW1wICpjaGFtZWxpdW1fcmVhZF9jYXB0dXJlZF9mcmFtZShzdHJ1Y3QgY2hhbWVsaXVt ICpjaGFtZWxpdW0sCkBAIC0xMzEsNSArMTQxLDYgQEAgdm9pZCBjaGFtZWxpdW1fYXNzZXJ0X2Zy YW1lX21hdGNoX29yX2R1bXAoc3RydWN0IGNoYW1lbGl1bSAqY2hhbWVsaXVtLAogdm9pZCBjaGFt ZWxpdW1fY3JvcF9hbmFsb2dfZnJhbWUoc3RydWN0IGNoYW1lbGl1bV9mcmFtZV9kdW1wICpkdW1w LCBpbnQgd2lkdGgsCiAJCQkJIGludCBoZWlnaHQpOwogdm9pZCBjaGFtZWxpdW1fZGVzdHJveV9m cmFtZV9kdW1wKHN0cnVjdCBjaGFtZWxpdW1fZnJhbWVfZHVtcCAqZHVtcCk7Cit2b2lkIGNoYW1l bGl1bV9kZXN0cm95X2F1ZGlvX2ZpbGUoc3RydWN0IGNoYW1lbGl1bV9hdWRpb19maWxlICphdWRp b19maWxlKTsKIAogI2VuZGlmIC8qIElHVF9DSEFNRUxJVU1fSCAqLwpkaWZmIC0tZ2l0IGEvbGli L2lndF9jaGFtZWxpdW1fc3RyZWFtLmMgYi9saWIvaWd0X2NoYW1lbGl1bV9zdHJlYW0uYwpuZXcg ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMC4uNjhkZGIyMTcKLS0tIC9kZXYvbnVsbAor KysgYi9saWIvaWd0X2NoYW1lbGl1bV9zdHJlYW0uYwpAQCAtMCwwICsxLDU4OSBAQAorLyoKKyAq IENvcHlyaWdodCDCqSAyMDE5IEludGVsIENvcnBvcmF0aW9uCisgKgorICogUGVybWlzc2lvbiBp cyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5n IGEKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9u IGZpbGVzICh0aGUgIlNvZnR3YXJlIiksCisgKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRo b3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCisgKiB0aGUgcmln aHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3Vi bGljZW5zZSwKKyAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBw ZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQorICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRv IHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJv dmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSAoaW5jbHVkaW5n IHRoZSBuZXh0CisgKiBwYXJhZ3JhcGgpIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMg b3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlCisgKiBTb2Z0d2FyZS4KKyAqCisgKiBUSEUg U09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lO RCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBU SEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJ Q1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwKKyAq IFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlN LCBEQU1BR0VTIE9SIE9USEVSCisgKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9G IENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORworICogRlJPTSwgT1VUIE9GIE9S IElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFM SU5HUworICogSU4gVEhFIFNPRlRXQVJFLgorICoKKyAqIEF1dGhvcnM6IFNpbW9uIFNlciA8c2lt b24uc2VyQGludGVsLmNvbT4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRl IDxhcnBhL2luZXQuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPG5ldGRiLmg+Cisj aW5jbHVkZSA8c3RkYm9vbC5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN5cy90 eXBlcy5oPgorI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKworI2luY2x1ZGUgImlndF9jaGFtZWxp dW1fc3RyZWFtLmgiCisjaW5jbHVkZSAiaWd0X2NvcmUuaCIKKyNpbmNsdWRlICJpZ3RfcmMuaCIK KworI2RlZmluZSBTVFJFQU1fUE9SVCA5OTk0CisjZGVmaW5lIFNUUkVBTV9WRVJTSU9OX01BSk9S IDEKKyNkZWZpbmUgU1RSRUFNX1ZFUlNJT05fTUlOT1IgMAorCitlbnVtIHN0cmVhbV9lcnJvciB7 CisJU1RSRUFNX0VSUk9SX05PTkUgPSAwLAorCVNUUkVBTV9FUlJPUl9DT01NQU5EID0gMSwKKwlT VFJFQU1fRVJST1JfQVJHVU1FTlQgPSAyLAorCVNUUkVBTV9FUlJPUl9FWElTVFMgPSAzLAorCVNU UkVBTV9FUlJPUl9WSURFT19NRU1fT1ZFUkZMT1dfU1RPUCA9IDQsCisJU1RSRUFNX0VSUk9SX1ZJ REVPX01FTV9PVkVSRkxPV19EUk9QID0gNSwKKwlTVFJFQU1fRVJST1JfQVVESU9fTUVNX09WRVJG TE9XX1NUT1AgPSA2LAorCVNUUkVBTV9FUlJPUl9BVURJT19NRU1fT1ZFUkZMT1dfRFJPUCA9IDcs CisJU1RSRUFNX0VSUk9SX05PX01FTSA9IDgsCit9OworCitlbnVtIHN0cmVhbV9tZXNzYWdlX2tp bmQgeworCVNUUkVBTV9NRVNTQUdFX1JFUVVFU1QgPSAwLAorCVNUUkVBTV9NRVNTQUdFX1JFU1BP TlNFID0gMSwKKwlTVFJFQU1fTUVTU0FHRV9EQVRBID0gMiwKK307CisKK2VudW0gc3RyZWFtX21l c3NhZ2VfdHlwZSB7CisJU1RSRUFNX01FU1NBR0VfUkVTRVQgPSAwLAorCVNUUkVBTV9NRVNTQUdF X0dFVF9WRVJTSU9OID0gMSwKKwlTVFJFQU1fTUVTU0FHRV9WSURFT19TVFJFQU0gPSAyLAorCVNU UkVBTV9NRVNTQUdFX1NIUklOS19WSURFTyA9IDMsCisJU1RSRUFNX01FU1NBR0VfVklERU9fRlJB TUUgPSA0LAorCVNUUkVBTV9NRVNTQUdFX0RVTVBfUkVBTFRJTUVfVklERU8gPSA1LAorCVNUUkVB TV9NRVNTQUdFX1NUT1BfRFVNUF9WSURFTyA9IDYsCisJU1RSRUFNX01FU1NBR0VfRFVNUF9SRUFM VElNRV9BVURJTyA9IDcsCisJU1RSRUFNX01FU1NBR0VfU1RPUF9EVU1QX0FVRElPID0gOCwKK307 CisKK3N0cnVjdCBjaGFtZWxpdW1fc3RyZWFtIHsKKwljaGFyICpob3N0OworCXVuc2lnbmVkIGlu dCBwb3J0OworCisJaW50IGZkOworfTsKKworc3RhdGljIGNvbnN0IGNoYXIgKnN0cmVhbV9lcnJv cl9zdHIoZW51bSBzdHJlYW1fZXJyb3IgZXJyKQoreworCXN3aXRjaCAoZXJyKSB7CisJY2FzZSBT VFJFQU1fRVJST1JfTk9ORToKKwkJcmV0dXJuICJubyBlcnJvciI7CisJY2FzZSBTVFJFQU1fRVJS T1JfQ09NTUFORDoKKwkJcmV0dXJuICJpbnZhbGlkIGNvbW1hbmQiOworCWNhc2UgU1RSRUFNX0VS Uk9SX0FSR1VNRU5UOgorCQlyZXR1cm4gImludmFsaWQgYXJndW1lbnRzIjsKKwljYXNlIFNUUkVB TV9FUlJPUl9FWElTVFM6CisJCXJldHVybiAiZHVtcCBhbHJlYWR5IHN0YXJ0ZWQiOworCWNhc2Ug U1RSRUFNX0VSUk9SX1ZJREVPX01FTV9PVkVSRkxPV19TVE9QOgorCQlyZXR1cm4gInZpZGVvIGR1 bXAgc3RvcHBlZCBhZnRlciBvdmVyZmxvdyI7CisJY2FzZSBTVFJFQU1fRVJST1JfVklERU9fTUVN X09WRVJGTE9XX0RST1A6CisJCXJldHVybiAidmlkZW8gZnJhbWUgZHJvcHBlZCBhZnRlciBvdmVy ZmxvdyI7CisJY2FzZSBTVFJFQU1fRVJST1JfQVVESU9fTUVNX09WRVJGTE9XX1NUT1A6CisJCXJl dHVybiAiYXVkaW8gZHVtcCBzdG9wcHJlZCBhZnRlciBvdmVyZmxvdyI7CisJY2FzZSBTVFJFQU1f RVJST1JfQVVESU9fTUVNX09WRVJGTE9XX0RST1A6CisJCXJldHVybiAiYXVkaW8gcGFnZSBkcm9w cGVkIGFmdGVyIG92ZXJmbG93IjsKKwljYXNlIFNUUkVBTV9FUlJPUl9OT19NRU06CisJCXJldHVy biAib3V0IG9mIG1lbW9yeSI7CisJfQorCXJldHVybiAidW5rbm93biBlcnJvciI7Cit9CisKKy8q KgorICogVGhlIENoYW1lbGl1bSBVUkwgaXMgc3BlY2lmaWVkIGluIHRoZSBjb25maWd1cmF0aW9u IGZpbGUuIFdlIG5lZWQgdG8gZXh0cmFjdAorICogdGhlIGhvc3QgdG8gY29ubmVjdCB0byB0aGUg c3RyZWFtIHNlcnZlci4KKyAqLworc3RhdGljIGNoYXIgKnBhcnNlX3VybF9ob3N0KGNvbnN0IGNo YXIgKnVybCkKK3sKKwlzdGF0aWMgY29uc3QgY2hhciBwcmVmaXhbXSA9ICJodHRwOi8vIjsKKwlj aGFyICpjb2xvbjsKKworCWlmIChzdHJzdHIodXJsLCBwcmVmaXgpICE9IHVybCkKKwkJcmV0dXJu IE5VTEw7CisJdXJsICs9IHN0cmxlbihwcmVmaXgpOworCisJY29sb24gPSBzdHJjaHIodXJsLCAn OicpOworCWlmICghY29sb24pCisJCXJldHVybiBOVUxMOworCisJcmV0dXJuIHN0cm5kdXAodXJs LCBjb2xvbiAtIHVybCk7Cit9CisKK3N0YXRpYyBib29sIGNoYW1lbGl1bV9zdHJlYW1fcmVhZF9j b25maWcoc3RydWN0IGNoYW1lbGl1bV9zdHJlYW0gKmNsaWVudCkKK3sKKwlHRXJyb3IgKmVycm9y ID0gTlVMTDsKKwlnY2hhciAqY2hhbWVsaXVtX3VybDsKKworCWlmICghaWd0X2tleV9maWxlKSB7 CisJCWlndF93YXJuKCJObyBjb25maWd1cmF0aW9uIGZpbGUgYXZhaWxhYmxlIGZvciBjaGFtZWxp dW1cbiIpOworCQlyZXR1cm4gZmFsc2U7CisJfQorCisJY2hhbWVsaXVtX3VybCA9IGdfa2V5X2Zp bGVfZ2V0X3N0cmluZyhpZ3Rfa2V5X2ZpbGUsICJDaGFtZWxpdW0iLCAiVVJMIiwKKwkJCQkJICAg ICAgJmVycm9yKTsKKwlpZiAoIWNoYW1lbGl1bV91cmwpIHsKKwkJaWd0X3dhcm4oIkNvdWxkbid0 IHJlYWQgQ2hhbWVsaXVtIFVSTCBmcm9tIGNvbmZpZyBmaWxlOiAlc1xuIiwKKwkJCSBlcnJvci0+ bWVzc2FnZSk7CisJCXJldHVybiBmYWxzZTsKKwl9CisKKwljbGllbnQtPmhvc3QgPSBwYXJzZV91 cmxfaG9zdChjaGFtZWxpdW1fdXJsKTsKKwlpZiAoIWNsaWVudC0+aG9zdCkgeworCQlpZ3Rfd2Fy bigiSW52YWxpZCBDaGFtZWxpdW0gVVJMIGluIGNvbmZpZyBmaWxlOiAlc1xuIiwKKwkJCSBjaGFt ZWxpdW1fdXJsKTsKKwkJcmV0dXJuIGZhbHNlOworCX0KKwljbGllbnQtPnBvcnQgPSBTVFJFQU1f UE9SVDsKKworCXJldHVybiB0cnVlOworfQorCitzdGF0aWMgYm9vbCBjaGFtZWxpdW1fc3RyZWFt X2Nvbm5lY3Qoc3RydWN0IGNoYW1lbGl1bV9zdHJlYW0gKmNsaWVudCkKK3sKKwlpbnQgcmV0Owor CWNoYXIgcG9ydF9zdHJbMTZdOworCXN0cnVjdCBhZGRyaW5mbyBoaW50cyA9IHt9OworCXN0cnVj dCBhZGRyaW5mbyAqcmVzdWx0cywgKmFpOworCXN0cnVjdCB0aW1ldmFsIHR2ID0ge307CisKKwlp Z3RfZGVidWcoIkNvbm5lY3RpbmcgdG8gQ2hhbWVsaXVtIHN0cmVhbSBzZXJ2ZXI6IHRjcDovLyVz OiV1XG4iLAorCQkgIGNsaWVudC0+aG9zdCwgY2xpZW50LT5wb3J0KTsKKworCXNucHJpbnRmKHBv cnRfc3RyLCBzaXplb2YocG9ydF9zdHIpLCAiJXUiLCBjbGllbnQtPnBvcnQpOworCisJaGludHMu YWlfZmFtaWx5ID0gQUZfVU5TUEVDOworCWhpbnRzLmFpX3NvY2t0eXBlID0gU09DS19TVFJFQU07 CisJcmV0ID0gZ2V0YWRkcmluZm8oY2xpZW50LT5ob3N0LCBwb3J0X3N0ciwgJmhpbnRzLCAmcmVz dWx0cyk7CisJaWYgKHJldCAhPSAwKSB7CisJCWlndF93YXJuKCJnZXRhZGRyaW5mbyBmYWlsZWQ6 ICVzXG4iLCBnYWlfc3RyZXJyb3IocmV0KSk7CisJCXJldHVybiBmYWxzZTsKKwl9CisKKwljbGll bnQtPmZkID0gLTE7CisJZm9yIChhaSA9IHJlc3VsdHM7IGFpICE9IE5VTEw7IGFpID0gYWktPmFp X25leHQpIHsKKwkJY2xpZW50LT5mZCA9IHNvY2tldChhaS0+YWlfZmFtaWx5LCBhaS0+YWlfc29j a3R5cGUsCisJCQkJICAgIGFpLT5haV9wcm90b2NvbCk7CisJCWlmIChjbGllbnQtPmZkID09IC0x KQorCQkJY29udGludWU7CisKKwkJaWYgKGNvbm5lY3QoY2xpZW50LT5mZCwgYWktPmFpX2FkZHIs IGFpLT5haV9hZGRybGVuKSA9PSAtMSkgeworCQkJY2xvc2UoY2xpZW50LT5mZCk7CisJCQljbGll bnQtPmZkID0gLTE7CisJCQljb250aW51ZTsKKwkJfQorCisJCWJyZWFrOworCX0KKworCWZyZWVh ZGRyaW5mbyhyZXN1bHRzKTsKKworCWlmIChjbGllbnQtPmZkIDwgMCkgeworCQlpZ3Rfd2Fybigi RmFpbGVkIHRvIGNvbm5lY3QgdG8gQ2hhbWVsaXVtIHN0cmVhbSBzZXJ2ZXJcbiIpOworCQlyZXR1 cm4gZmFsc2U7CisJfQorCisJLyogU2V0IGEgcmVhZCBhbmQgd3JpdGUgdGltZW91dCBvZiA1IHNl Y29uZHMuICovCisJdHYudHZfc2VjID0gNTsKKwlzZXRzb2Nrb3B0KGNsaWVudC0+ZmQsIFNPTF9T T0NLRVQsIFNPX1JDVlRJTUVPLCAmdHYsIHNpemVvZih0dikpOworCXNldHNvY2tvcHQoY2xpZW50 LT5mZCwgU09MX1NPQ0tFVCwgU09fU05EVElNRU8sICZ0diwgc2l6ZW9mKHR2KSk7CisKKwlyZXR1 cm4gdHJ1ZTsKK30KKworc3RhdGljIGJvb2wgcmVhZF93aG9sZShpbnQgZmQsIHZvaWQgKmJ1Ziwg c2l6ZV90IGJ1Zl9sZW4pCit7CisJc3NpemVfdCByZXQ7CisJc2l6ZV90IG4gPSAwOworCWNoYXIg KnB0cjsKKworCXdoaWxlIChuIDwgYnVmX2xlbikgeworCQlwdHIgPSAoY2hhciAqKSBidWYgKyBu OworCQlyZXQgPSByZWFkKGZkLCBwdHIsIGJ1Zl9sZW4gLSBuKTsKKwkJaWYgKHJldCA8IDApIHsK KwkJCWlndF93YXJuKCJyZWFkIGZhaWxlZDogJXNcbiIsIHN0cmVycm9yKGVycm5vKSk7CisJCQly ZXR1cm4gZmFsc2U7CisJCX0gZWxzZSBpZiAocmV0ID09IDApIHsKKwkJCWlndF93YXJuKCJzaG9y dCByZWFkXG4iKTsKKwkJCXJldHVybiBmYWxzZTsKKwkJfQorCQluICs9IHJldDsKKwl9CisKKwly ZXR1cm4gdHJ1ZTsKK30KKworc3RhdGljIGJvb2wgd3JpdGVfd2hvbGUoaW50IGZkLCB2b2lkICpi dWYsIHNpemVfdCBidWZfbGVuKQoreworCXNzaXplX3QgcmV0OworCXNpemVfdCBuID0gMDsKKwlj aGFyICpwdHI7CisKKwl3aGlsZSAobiA8IGJ1Zl9sZW4pIHsKKwkJcHRyID0gKGNoYXIgKikgYnVm ICsgbjsKKwkJcmV0ID0gd3JpdGUoZmQsIHB0ciwgYnVmX2xlbiAtIG4pOworCQlpZiAocmV0IDwg MCkgeworCQkJaWd0X3dhcm4oIndyaXRlIGZhaWxlZDogJXNcbiIsIHN0cmVycm9yKGVycm5vKSk7 CisJCQlyZXR1cm4gZmFsc2U7CisJCX0gZWxzZSBpZiAocmV0ID09IDApIHsKKwkJCWlndF93YXJu KCJzaG9ydCB3cml0ZVxuIik7CisJCQlyZXR1cm4gZmFsc2U7CisJCX0KKwkJbiArPSByZXQ7CisJ fQorCisJcmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyBib29sIHJlYWRfYW5kX2Rpc2NhcmQoaW50 IGZkLCBzaXplX3QgbGVuKQoreworCWNoYXIgYnVmWzEwMjRdOworCXNpemVfdCBuOworCisJd2hp bGUgKGxlbiA+IDApIHsKKwkJbiA9IGxlbjsKKwkJaWYgKG4gPiBzaXplb2YoYnVmKSkKKwkJCW4g PSBzaXplb2YoYnVmKTsKKworCQlpZiAoIXJlYWRfd2hvbGUoZmQsIGJ1ZiwgbikpCisJCQlyZXR1 cm4gZmFsc2U7CisKKwkJbGVuIC09IG47CisJfQorCisJcmV0dXJuIHRydWU7Cit9CisKKy8qKiBS ZWFkIGEgbWVzc2FnZSBoZWFkZXIgZnJvbSB0aGUgc29ja2V0LgorICoKKyAqIFRoZSBoZWFkZXIg aXMgbGFpZCBvdXQgYXMgZm9sbG93czoKKyAqIC0gdTE2OiBtZXNzYWdlIHR5cGUKKyAqIC0gdTE2 OiBlcnJvciBjb2RlCisgKiAtIHUzMjogbWVzc2FnZSBsZW5ndGgKKyAqLworc3RhdGljIGJvb2wg Y2hhbWVsaXVtX3N0cmVhbV9yZWFkX2hlYWRlcihzdHJ1Y3QgY2hhbWVsaXVtX3N0cmVhbSAqY2xp ZW50LAorCQkJCQkgZW51bSBzdHJlYW1fbWVzc2FnZV9raW5kICpraW5kLAorCQkJCQkgZW51bSBz dHJlYW1fbWVzc2FnZV90eXBlICp0eXBlLAorCQkJCQkgZW51bSBzdHJlYW1fZXJyb3IgKmVyciwK KwkJCQkJIHNpemVfdCAqbGVuKQoreworCXVpbnQxNl90IF90eXBlOworCWNoYXIgYnVmWzhdOwor CisJaWYgKCFyZWFkX3dob2xlKGNsaWVudC0+ZmQsIGJ1Ziwgc2l6ZW9mKGJ1ZikpKQorCQlyZXR1 cm4gZmFsc2U7CisKKwlfdHlwZSA9IG50b2hzKCoodWludDE2X3QgKikgJmJ1ZlswXSk7CisJKnR5 cGUgPSBfdHlwZSAmIDB4RkY7CisJKmtpbmQgPSBfdHlwZSA+PiA4OworCSplcnIgPSBudG9ocygq KHVpbnQxNl90ICopICZidWZbMl0pOworCSpsZW4gPSBudG9obCgqKHVpbnQzMl90ICopICZidWZb NF0pOworCisJcmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyBib29sIGNoYW1lbGl1bV9zdHJlYW1f d3JpdGVfaGVhZGVyKHN0cnVjdCBjaGFtZWxpdW1fc3RyZWFtICpjbGllbnQsCisJCQkJCSAgZW51 bSBzdHJlYW1fbWVzc2FnZV90eXBlIHR5cGUsCisJCQkJCSAgZW51bSBzdHJlYW1fZXJyb3IgZXJy LAorCQkJCQkgIHNpemVfdCBsZW4pCit7CisJY2hhciBidWZbOF07CisJdWludDE2X3QgX3R5cGU7 CisKKwlfdHlwZSA9IHR5cGUgfCAoU1RSRUFNX01FU1NBR0VfUkVRVUVTVCA8PCA4KTsKKworCSoo dWludDE2X3QgKikgJmJ1ZlswXSA9IGh0b25zKF90eXBlKTsKKwkqKHVpbnQxNl90ICopICZidWZb Ml0gPSBodG9ucyhlcnIpOworCSoodWludDMyX3QgKikgJmJ1Zls0XSA9IGh0b25sKGxlbik7CisK KwlyZXR1cm4gd3JpdGVfd2hvbGUoY2xpZW50LT5mZCwgYnVmLCBzaXplb2YoYnVmKSk7Cit9CisK K3N0YXRpYyBib29sIGNoYW1lbGl1bV9zdHJlYW1fcmVhZF9yZXNwb25zZShzdHJ1Y3QgY2hhbWVs aXVtX3N0cmVhbSAqY2xpZW50LAorCQkJCQkgICBlbnVtIHN0cmVhbV9tZXNzYWdlX3R5cGUgdHlw ZSwKKwkJCQkJICAgdm9pZCAqYnVmLCBzaXplX3QgYnVmX2xlbikKK3sKKwllbnVtIHN0cmVhbV9t ZXNzYWdlX2tpbmQgcmVhZF9raW5kOworCWVudW0gc3RyZWFtX21lc3NhZ2VfdHlwZSByZWFkX3R5 cGU7CisJZW51bSBzdHJlYW1fZXJyb3IgcmVhZF9lcnI7CisJc2l6ZV90IHJlYWRfbGVuOworCisJ aWYgKCFjaGFtZWxpdW1fc3RyZWFtX3JlYWRfaGVhZGVyKGNsaWVudCwgJnJlYWRfa2luZCwgJnJl YWRfdHlwZSwKKwkJCQkJICAmcmVhZF9lcnIsICZyZWFkX2xlbikpCisJCXJldHVybiBmYWxzZTsK KworCWlmIChyZWFkX2tpbmQgIT0gU1RSRUFNX01FU1NBR0VfUkVTUE9OU0UpIHsKKwkJaWd0X3dh cm4oIkV4cGVjdGVkIGEgcmVzcG9uc2UsIGdvdCBraW5kICVkXG4iLCByZWFkX2tpbmQpOworCQly ZXR1cm4gZmFsc2U7CisJfQorCWlmIChyZWFkX3R5cGUgIT0gdHlwZSkgeworCQlpZ3Rfd2Fybigi RXhwZWN0ZWQgbWVzc2FnZSB0eXBlICVkLCBnb3QgJWRcbiIsCisJCQkgdHlwZSwgcmVhZF90eXBl KTsKKwkJcmV0dXJuIGZhbHNlOworCX0KKwlpZiAocmVhZF9lcnIgIT0gU1RSRUFNX0VSUk9SX05P TkUpIHsKKwkJaWd0X3dhcm4oIlJlY2VpdmVkIGVycm9yOiAlcyAoJWQpXG4iLAorCQkJIHN0cmVh bV9lcnJvcl9zdHIocmVhZF9lcnIpLCByZWFkX2Vycik7CisJCXJldHVybiBmYWxzZTsKKwl9CisJ aWYgKGJ1Zl9sZW4gIT0gcmVhZF9sZW4pIHsKKwkJaWd0X3dhcm4oIlJlY2VpdmVkIGludmFsaWQg bWVzc2FnZSBib2R5IHNpemUgIgorCQkJICIoZ290ICV6dSBieXRlcywgd2FudCAlenUgYnl0ZXMp XG4iLAorCQkJIHJlYWRfbGVuLCBidWZfbGVuKTsKKwkJcmV0dXJuIGZhbHNlOworCX0KKworCXJl dHVybiByZWFkX3dob2xlKGNsaWVudC0+ZmQsIGJ1ZiwgYnVmX2xlbik7Cit9CisKK3N0YXRpYyBi b29sIGNoYW1lbGl1bV9zdHJlYW1fd3JpdGVfcmVxdWVzdChzdHJ1Y3QgY2hhbWVsaXVtX3N0cmVh bSAqY2xpZW50LAorCQkJCQkgICBlbnVtIHN0cmVhbV9tZXNzYWdlX3R5cGUgdHlwZSwKKwkJCQkJ ICAgdm9pZCAqYnVmLCBzaXplX3QgYnVmX2xlbikKK3sKKwlpZiAoIWNoYW1lbGl1bV9zdHJlYW1f d3JpdGVfaGVhZGVyKGNsaWVudCwgdHlwZSwgU1RSRUFNX0VSUk9SX05PTkUsCisJCQkJCSAgIGJ1 Zl9sZW4pKQorCQlyZXR1cm4gZmFsc2U7CisKKwlpZiAoYnVmX2xlbiA9PSAwKQorCQlyZXR1cm4g dHJ1ZTsKKworCXJldHVybiB3cml0ZV93aG9sZShjbGllbnQtPmZkLCBidWYsIGJ1Zl9sZW4pOwor fQorCitzdGF0aWMgYm9vbCBjaGFtZWxpdW1fc3RyZWFtX2NhbGwoc3RydWN0IGNoYW1lbGl1bV9z dHJlYW0gKmNsaWVudCwKKwkJCQkgIGVudW0gc3RyZWFtX21lc3NhZ2VfdHlwZSB0eXBlLAorCQkJ CSAgdm9pZCAqcmVxX2J1Ziwgc2l6ZV90IHJlcV9sZW4sCisJCQkJICB2b2lkICpyZXNwX2J1Ziwg c2l6ZV90IHJlc3BfbGVuKQoreworCWlmICghY2hhbWVsaXVtX3N0cmVhbV93cml0ZV9yZXF1ZXN0 KGNsaWVudCwgdHlwZSwgcmVxX2J1ZiwgcmVxX2xlbikpCisJCXJldHVybiBmYWxzZTsKKworCXJl dHVybiBjaGFtZWxpdW1fc3RyZWFtX3JlYWRfcmVzcG9uc2UoY2xpZW50LCB0eXBlLCByZXNwX2J1 ZiwgcmVzcF9sZW4pOworfQorCitzdGF0aWMgYm9vbCBjaGFtZWxpdW1fc3RyZWFtX2NoZWNrX3Zl cnNpb24oc3RydWN0IGNoYW1lbGl1bV9zdHJlYW0gKmNsaWVudCkKK3sKKwljaGFyIHJlc3BbMl07 CisJdWludDhfdCBtYWpvciwgbWlub3I7CisKKwlpZiAoIWNoYW1lbGl1bV9zdHJlYW1fY2FsbChj bGllbnQsIFNUUkVBTV9NRVNTQUdFX0dFVF9WRVJTSU9OLAorCQkJCSAgIE5VTEwsIDAsIHJlc3As IHNpemVvZihyZXNwKSkpCisJCXJldHVybiBmYWxzZTsKKworCW1ham9yID0gcmVzcFswXTsKKwlt aW5vciA9IHJlc3BbMV07CisJaWYgKG1ham9yICE9IFNUUkVBTV9WRVJTSU9OX01BSk9SIHx8IG1p bm9yIDwgU1RSRUFNX1ZFUlNJT05fTUlOT1IpIHsKKwkJaWd0X3dhcm4oIlZlcnNpb24gbWlzbWF0 Y2ggKHdhbnQgJWQuJWQsIGdvdCAlZC4lZClcbiIsCisJCQkgU1RSRUFNX1ZFUlNJT05fTUFKT1Is IFNUUkVBTV9WRVJTSU9OX01JTk9SLAorCQkJIG1ham9yLCBtaW5vcik7CisJCXJldHVybiBmYWxz ZTsKKwl9CisKKwlyZXR1cm4gdHJ1ZTsKK30KKworLyoqCisgKiBjaGFtZWxpdW1fc3RyZWFtX2R1 bXBfcmVhbHRpbWVfYXVkaW86CisgKgorICogU3RhcnRzIGF1ZGlvIGNhcHR1cmUuIFRoZSBjYWxs ZXIgY2FuIHRoZW4gY2FsbAorICogI2NoYW1lbGl1bV9zdHJlYW1fcmVjZWl2ZV9yZWFsdGltZV9h dWRpbyB0byByZWNlaXZlIGF1ZGlvIHBhZ2VzLgorICovCitib29sIGNoYW1lbGl1bV9zdHJlYW1f ZHVtcF9yZWFsdGltZV9hdWRpbyhzdHJ1Y3QgY2hhbWVsaXVtX3N0cmVhbSAqY2xpZW50LAorCQkJ CQkgIGVudW0gY2hhbWVsaXVtX3N0cmVhbV9yZWFsdGltZV9tb2RlIG1vZGUpCit7CisJY2hhciBy ZXFbMV07CisKKwlpZ3RfZGVidWcoIlN0YXJ0aW5nIHJlYWwtdGltZSBhdWRpbyBjYXB0dXJlXG4i KTsKKworCXJlcVswXSA9IG1vZGU7CisJcmV0dXJuIGNoYW1lbGl1bV9zdHJlYW1fY2FsbChjbGll bnQsIFNUUkVBTV9NRVNTQUdFX0RVTVBfUkVBTFRJTUVfQVVESU8sCisJCQkJICAgICByZXEsIHNp emVvZihyZXEpLCBOVUxMLCAwKTsKK30KKworLyoqCisgKiBjaGFtZWxpdW1fc3RyZWFtX3JlY2Vp dmVfcmVhbHRpbWVfYXVkaW86CisgKiBAcGFnZV9jb3VudDogaWYgbm9uLU5VTEwsIHdpbGwgYmUg c2V0IHRvIHRoZSBkdW1wZWQgcGFnZSBudW1iZXIKKyAqIEBidWY6IG11c3QgZWl0aGVyIHBvaW50 IHRvIGEgZHluYW1pY2FsbHkgYWxsb2NhdGVkIG1lbW9yeSByZWdpb24gb3IgTlVMTAorICogQGJ1 Zl9sZW46IG51bWJlciBvZiBlbGVtZW50cyBvZiAqQGJ1ZiwgZm9yIHplcm8gaWYgQGJ1ZiBpcyBO VUxMCisgKgorICogUmVjZWl2ZXMgb25lIGF1ZGlvIHBhZ2UgZnJvbSB0aGUgc3RyZWFtaW5nIHNl cnZlci4KKyAqCisgKiBJbiAiYmVzdCBlZmZvcnQiIG1vZGUsIHNvbWUgcGFnZXMgY2FuIGJlIGRy b3BwZWQuIFRoaXMgY2FuIGJlIGRldGVjdGVkIHZpYQorICogdGhlIHBhZ2UgY291bnQuCisgKgor ICogYnVmX2xlbiB3aWxsIGJlIHNldCB0byB0aGUgc2l6ZSBvZiB0aGUgcGFnZS4gVGhlIGNhbGxl ciBpcyByZXNwb25zaWJsZSBmb3IKKyAqIGNhbGxpbmcgZnJlZSgzKSBvbiAqYnVmLgorICovCiti b29sIGNoYW1lbGl1bV9zdHJlYW1fcmVjZWl2ZV9yZWFsdGltZV9hdWRpbyhzdHJ1Y3QgY2hhbWVs aXVtX3N0cmVhbSAqY2xpZW50LAorCQkJCQkgICAgIHNpemVfdCAqcGFnZV9jb3VudCwKKwkJCQkJ ICAgICBpbnQzMl90ICoqYnVmLCBzaXplX3QgKmJ1Zl9sZW4pCit7CisJZW51bSBzdHJlYW1fbWVz c2FnZV9raW5kIGtpbmQ7CisJZW51bSBzdHJlYW1fbWVzc2FnZV90eXBlIHR5cGU7CisJZW51bSBz dHJlYW1fZXJyb3IgZXJyOworCXNpemVfdCBib2R5X2xlbjsKKwljaGFyIHBhZ2VfY291bnRfYnVm WzRdOworCWludDMyX3QgKnB0cjsKKworCXdoaWxlICh0cnVlKSB7CisJCWlmICghY2hhbWVsaXVt X3N0cmVhbV9yZWFkX2hlYWRlcihjbGllbnQsICZraW5kLCAmdHlwZSwKKwkJCQkJCSAgJmVyciwg JmJvZHlfbGVuKSkKKwkJCXJldHVybiBmYWxzZTsKKworCQlpZiAoa2luZCAhPSBTVFJFQU1fTUVT U0FHRV9EQVRBKSB7CisJCQlpZ3Rfd2FybigiRXhwZWN0ZWQgYSBkYXRhIG1lc3NhZ2UsIGdvdCBr aW5kICVkXG4iLCBraW5kKTsKKwkJCXJldHVybiBmYWxzZTsKKwkJfQorCQlpZiAodHlwZSAhPSBT VFJFQU1fTUVTU0FHRV9EVU1QX1JFQUxUSU1FX0FVRElPKSB7CisJCQlpZ3Rfd2FybigiRXhwZWN0 ZWQgcmVhbC10aW1lIGF1ZGlvIGR1bXAgbWVzc2FnZSwgIgorCQkJCSAiZ290IHR5cGUgJWRcbiIs IHR5cGUpOworCQkJcmV0dXJuIGZhbHNlOworCQl9CisKKwkJaWYgKGVyciA9PSBTVFJFQU1fRVJS T1JfTk9ORSkKKwkJCWJyZWFrOworCQllbHNlIGlmIChlcnIgIT0gU1RSRUFNX0VSUk9SX0FVRElP X01FTV9PVkVSRkxPV19EUk9QKSB7CisJCQlpZ3Rfd2FybigiUmVjZWl2ZWQgZXJyb3I6ICVzICgl ZClcbiIsCisJCQkJIHN0cmVhbV9lcnJvcl9zdHIoZXJyKSwgZXJyKTsKKwkJCXJldHVybiBmYWxz ZTsKKwkJfQorCisJCWlndF9kZWJ1ZygiRHJvcHBlZCBhbiBhdWRpbyBwYWdlIGJlY2F1c2Ugb2Yg YW4gb3ZlcmZsb3dcbiIpOworCQlpZ3RfYXNzZXJ0KGJvZHlfbGVuID09IDApOworCX0KKworCWln dF9hc3NlcnQoYm9keV9sZW4gPj0gc2l6ZW9mKHBhZ2VfY291bnRfYnVmKSk7CisKKwlpZiAoIXJl YWRfd2hvbGUoY2xpZW50LT5mZCwgcGFnZV9jb3VudF9idWYsIHNpemVvZihwYWdlX2NvdW50X2J1 ZikpKQorCQlyZXR1cm4gZmFsc2U7CisJaWYgKHBhZ2VfY291bnQpCisJCSpwYWdlX2NvdW50ID0g bnRvaGwoKih1aW50MzJfdCAqKSAmcGFnZV9jb3VudF9idWZbMF0pOworCWJvZHlfbGVuIC09IHNp emVvZihwYWdlX2NvdW50X2J1Zik7CisKKwlpZ3RfYXNzZXJ0KGJvZHlfbGVuICUgc2l6ZW9mKGlu dDMyX3QpID09IDApOworCWlmICgqYnVmX2xlbiAqIHNpemVvZihpbnQzMl90KSAhPSBib2R5X2xl bikgeworCQlwdHIgPSByZWFsbG9jKCpidWYsIGJvZHlfbGVuKTsKKwkJaWYgKCFwdHIpIHsKKwkJ CWlndF93YXJuKCJyZWFsbG9jIGZhaWxlZDogJXNcbiIsIHN0cmVycm9yKGVycm5vKSk7CisJCQly ZXR1cm4gZmFsc2U7CisJCX0KKwkJKmJ1ZiA9IHB0cjsKKwkJKmJ1Zl9sZW4gPSBib2R5X2xlbiAv IHNpemVvZihpbnQzMl90KTsKKwl9CisKKwlyZXR1cm4gcmVhZF93aG9sZShjbGllbnQtPmZkLCAq YnVmLCBib2R5X2xlbik7Cit9CisKKy8qKgorICogY2hhbWVsaXVtX3N0cmVhbV9zdG9wX3JlYWx0 aW1lX2F1ZGlvOgorICoKKyAqIFN0b3BzIHJlYWwtdGltZSBhdWRpbyBjYXB0dXJlLiBUaGlzIGFs c28gZHJvcHMgYW55IGJ1ZmZlcmVkIGF1ZGlvIHBhZ2VzLgorICogVGhlIGNhbGxlciBzaG91bGRu J3QgY2FsbCAjY2hhbWVsaXVtX3N0cmVhbV9yZWNlaXZlX3JlYWx0aW1lX2F1ZGlvIGFmdGVyCisg KiBzdG9wcGluZyBhdWRpbyBjYXB0dXJlLgorICovCitib29sIGNoYW1lbGl1bV9zdHJlYW1fc3Rv cF9yZWFsdGltZV9hdWRpbyhzdHJ1Y3QgY2hhbWVsaXVtX3N0cmVhbSAqY2xpZW50KQoreworCWVu dW0gc3RyZWFtX21lc3NhZ2Vfa2luZCBraW5kOworCWVudW0gc3RyZWFtX21lc3NhZ2VfdHlwZSB0 eXBlOworCWVudW0gc3RyZWFtX2Vycm9yIGVycjsKKwlzaXplX3QgbGVuOworCisJaWd0X2RlYnVn KCJTdG9wcGluZyByZWFsLXRpbWUgYXVkaW8gY2FwdHVyZVxuIik7CisKKwlpZiAoIWNoYW1lbGl1 bV9zdHJlYW1fd3JpdGVfcmVxdWVzdChjbGllbnQsCisJCQkJCSAgICBTVFJFQU1fTUVTU0FHRV9T VE9QX0RVTVBfQVVESU8sCisJCQkJCSAgICBOVUxMLCAwKSkKKwkJcmV0dXJuIGZhbHNlOworCisJ d2hpbGUgKHRydWUpIHsKKwkJaWYgKCFjaGFtZWxpdW1fc3RyZWFtX3JlYWRfaGVhZGVyKGNsaWVu dCwgJmtpbmQsICZ0eXBlLAorCQkJCQkJICAmZXJyLCAmbGVuKSkKKwkJCXJldHVybiBmYWxzZTsK KworCQlpZiAoa2luZCA9PSBTVFJFQU1fTUVTU0FHRV9SRVNQT05TRSkKKwkJCWJyZWFrOworCisJ CWlmICghcmVhZF9hbmRfZGlzY2FyZChjbGllbnQtPmZkLCBsZW4pKQorCQkJcmV0dXJuIGZhbHNl OworCX0KKworCWlmICh0eXBlICE9IFNUUkVBTV9NRVNTQUdFX1NUT1BfRFVNUF9BVURJTykgewor CQlpZ3Rfd2FybigiVW5leHBlY3RlZCByZXNwb25zZSB0eXBlICVkXG4iLCB0eXBlKTsKKwkJcmV0 dXJuIGZhbHNlOworCX0KKwlpZiAoZXJyICE9IFNUUkVBTV9FUlJPUl9OT05FKSB7CisJCWlndF93 YXJuKCJSZWNlaXZlZCBlcnJvcjogJXMgKCVkKVxuIiwKKwkJCSBzdHJlYW1fZXJyb3Jfc3RyKGVy ciksIGVycik7CisJCXJldHVybiBmYWxzZTsKKwl9CisJaWYgKGxlbiAhPSAwKSB7CisJCWlndF93 YXJuKCJFeHBlY3RlZCBhbiBlbXB0eSByZXNwb25zZSwgZ290ICV6dSBieXRlc1xuIiwgbGVuKTsK KwkJcmV0dXJuIGZhbHNlOworCX0KKworCXJldHVybiB0cnVlOworfQorCisvKioKKyAqIGNoYW1l bGl1bV9zdHJlYW1fYXVkaW9fZm9ybWF0OgorICoKKyAqIEdldHMgdGhlIGZvcm1hdCB1c2VkIGZv ciBhdWRpbyBwYWdlcy4KKyAqCisgKiBEYXRhIHdpbGwgYWx3YXlzIGJlIGNhcHR1cmVkIGluIHJh dyBwYWdlcyBvZiBTMzJfTEUgZWxlbWVudHMuIFRoaXMgZnVuY3Rpb24KKyAqIGV4cG9zZXMgdGhl IHNhbXBsaW5nIHJhdGUgYW5kIHRoZSBudW1iZXIgb2YgY2hhbm5lbHMuCisgKi8KK3ZvaWQgY2hh bWVsaXVtX3N0cmVhbV9hdWRpb19mb3JtYXQoc3RydWN0IGNoYW1lbGl1bV9zdHJlYW0gKnN0cmVh bSwKKwkJCQkgICBpbnQgKnJhdGUsIGludCAqY2hhbm5lbHMpCit7CisJLyogVE9ETzogdGhlIENo YW1lbGl1bSBzdHJlYW1pbmcgc2VydmVyIGRvZXNuJ3QgZXhwb3NlIHRob3NlIHlldC4KKwkgKiBK dXN0IGhhcmRjb2RlIHRoZSB2YWx1ZXMgZm9yIG5vdy4gKi8KKwkqcmF0ZSA9IDQ4MDAwOworCSpj aGFubmVscyA9IDg7Cit9CisKKy8qKgorICogY2hhbWVsaXVtX3N0cmVhbV9pbml0OgorICoKKyAq IENvbm5lY3RzIHRvIHRoZSBDaGFtZWxpdW0gc3RyZWFtaW5nIHNlcnZlci4KKyAqLworc3RydWN0 IGNoYW1lbGl1bV9zdHJlYW0gKmNoYW1lbGl1bV9zdHJlYW1faW5pdCh2b2lkKQoreworCXN0cnVj dCBjaGFtZWxpdW1fc3RyZWFtICpjbGllbnQ7CisKKwljbGllbnQgPSBjYWxsb2MoMSwgc2l6ZW9m KCpjbGllbnQpKTsKKworCWlmICghY2hhbWVsaXVtX3N0cmVhbV9yZWFkX2NvbmZpZyhjbGllbnQp KQorCQlnb3RvIGVycm9yX2NsaWVudDsKKwlpZiAoIWNoYW1lbGl1bV9zdHJlYW1fY29ubmVjdChj bGllbnQpKQorCQlnb3RvIGVycm9yX2NsaWVudDsKKwlpZiAoIWNoYW1lbGl1bV9zdHJlYW1fY2hl Y2tfdmVyc2lvbihjbGllbnQpKQorCQlnb3RvIGVycm9yX2ZkOworCisJcmV0dXJuIGNsaWVudDsK KworZXJyb3JfZmQ6CisJY2xvc2UoY2xpZW50LT5mZCk7CitlcnJvcl9jbGllbnQ6CisJZnJlZShj bGllbnQpOworCXJldHVybiBOVUxMOworfQorCit2b2lkIGNoYW1lbGl1bV9zdHJlYW1fZGVpbml0 KHN0cnVjdCBjaGFtZWxpdW1fc3RyZWFtICpjbGllbnQpCit7CisJaWYgKGNsb3NlKGNsaWVudC0+ ZmQpICE9IDApCisJCWlndF93YXJuKCJjbG9zZSBmYWlsZWQ6ICVzXG4iLCBzdHJlcnJvcihlcnJu bykpOworCWZyZWUoY2xpZW50KTsKK30KZGlmZiAtLWdpdCBhL2xpYi9pZ3RfY2hhbWVsaXVtX3N0 cmVhbS5oIGIvbGliL2lndF9jaGFtZWxpdW1fc3RyZWFtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQK aW5kZXggMDAwMDAwMDAuLmRlNGU5OTMxCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2lndF9jaGFt ZWxpdW1fc3RyZWFtLmgKQEAgLTAsMCArMSw1MiBAQAorLyoKKyAqIENvcHlyaWdodCDCqSAyMDE5 IEludGVsIENvcnBvcmF0aW9uCisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwg ZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEKKyAqIGNvcHkgb2YgdGhp cyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3 YXJlIiksCisgKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBp bmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCisgKiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwg bW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwKKyAqIGFuZC9v ciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3 aG9tIHRoZQorICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRo ZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGlj ZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSAoaW5jbHVkaW5nIHRoZSBuZXh0CisgKiBwYXJh Z3JhcGgpIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9y dGlvbnMgb2YgdGhlCisgKiBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklE RUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorICog SU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBN RVJDSEFOVEFCSUxJVFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQg Tk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwKKyAqIFRIRSBBVVRIT1JTIE9SIENP UFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVS CisgKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9S IE9USEVSV0lTRSwgQVJJU0lORworICogRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lU SCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUworICogSU4gVEhFIFNP RlRXQVJFLgorICoKKyAqIEF1dGhvcnM6IFNpbW9uIFNlciA8c2ltb24uc2VyQGludGVsLmNvbT4K KyAqLworCisjaWZuZGVmIElHVF9DSEFNRUxJVU1fU1RSRUFNX0gKKyNkZWZpbmUgSUdUX0NIQU1F TElVTV9TVFJFQU1fSAorCisjaW5jbHVkZSAiY29uZmlnLmgiCisKK2VudW0gY2hhbWVsaXVtX3N0 cmVhbV9yZWFsdGltZV9tb2RlIHsKKwlDSEFNRUxJVU1fU1RSRUFNX1JFQUxUSU1FX05PTkUgPSAw LAorCS8qIHN0b3AgZHVtcGluZyB3aGVuIG92ZXJmbG93ICovCisJQ0hBTUVMSVVNX1NUUkVBTV9S RUFMVElNRV9TVE9QX1dIRU5fT1ZFUkZMT1cgPSAxLAorCS8qIGRyb3AgZGF0YSBvbiBvdmVyZmxv dyAqLworCUNIQU1FTElVTV9TVFJFQU1fUkVBTFRJTUVfQkVTVF9FRkZPUlQgPSAyLAorfTsKKwor c3RydWN0IGNoYW1lbGl1bV9zdHJlYW07CisKK3N0cnVjdCBjaGFtZWxpdW1fc3RyZWFtICpjaGFt ZWxpdW1fc3RyZWFtX2luaXQodm9pZCk7Cit2b2lkIGNoYW1lbGl1bV9zdHJlYW1fZGVpbml0KHN0 cnVjdCBjaGFtZWxpdW1fc3RyZWFtICpjbGllbnQpOworYm9vbCBjaGFtZWxpdW1fc3RyZWFtX2R1 bXBfcmVhbHRpbWVfYXVkaW8oc3RydWN0IGNoYW1lbGl1bV9zdHJlYW0gKmNsaWVudCwKKwkJCQkJ ICBlbnVtIGNoYW1lbGl1bV9zdHJlYW1fcmVhbHRpbWVfbW9kZSBtb2RlKTsKK3ZvaWQgY2hhbWVs aXVtX3N0cmVhbV9hdWRpb19mb3JtYXQoc3RydWN0IGNoYW1lbGl1bV9zdHJlYW0gKnN0cmVhbSwK KwkJCQkgICBpbnQgKnJhdGUsIGludCAqY2hhbm5lbHMpOworYm9vbCBjaGFtZWxpdW1fc3RyZWFt X3JlY2VpdmVfcmVhbHRpbWVfYXVkaW8oc3RydWN0IGNoYW1lbGl1bV9zdHJlYW0gKmNsaWVudCwK KwkJCQkJICAgICBzaXplX3QgKnBhZ2VfY291bnQsCisJCQkJCSAgICAgaW50MzJfdCAqKmJ1Ziwg c2l6ZV90ICpidWZfbGVuKTsKK2Jvb2wgY2hhbWVsaXVtX3N0cmVhbV9zdG9wX3JlYWx0aW1lX2F1 ZGlvKHN0cnVjdCBjaGFtZWxpdW1fc3RyZWFtICpjbGllbnQpOworCisjZW5kaWYKZGlmZiAtLWdp dCBhL2xpYi9tZXNvbi5idWlsZCBiL2xpYi9tZXNvbi5idWlsZAppbmRleCBhODQ2MjkzMy4uZWVh ZDBhZmIgMTAwNjQ0Ci0tLSBhL2xpYi9tZXNvbi5idWlsZAorKysgYi9saWIvbWVzb24uYnVpbGQK QEAgLTkyLDcgKzkyLDcgQEAgaWYgdmFsZ3JpbmQuZm91bmQoKQogZW5kaWYKIAogaWYgZ3NsLmZv dW5kKCkKLQlsaWJfZGVwcyArPSBbIGdzbCBdCisJbGliX2RlcHMgKz0gZ3NsCiAJbGliX3NvdXJj ZXMgKz0gWyAnaWd0X2ZyYW1lLmMnLCAnaWd0X2F1ZGlvLmMnIF0KIGVuZGlmCiAKQEAgLTEwMSw5 ICsxMDEsMTAgQEAgaWYgYWxzYS5mb3VuZCgpCiAJbGliX3NvdXJjZXMgKz0gJ2lndF9hbHNhLmMn CiBlbmRpZgogCi1pZiBjaGFtZWxpdW0uZm91bmQoKQoraWYgY2hhbWVsaXVtX2ZvdW5kCiAJbGli X2RlcHMgKz0gY2hhbWVsaXVtCiAJbGliX3NvdXJjZXMgKz0gJ2lndF9jaGFtZWxpdW0uYycKKwls aWJfc291cmNlcyArPSAnaWd0X2NoYW1lbGl1bV9zdHJlYW0uYycKIGVuZGlmCiAKIHNyY2RpciA9 IGpvaW5fcGF0aHMobWVzb24uc291cmNlX3Jvb3QoKSwgJ3Rlc3RzJykKZGlmZiAtLWdpdCBhL21l c29uLmJ1aWxkIGIvbWVzb24uYnVpbGQKaW5kZXggNTU3NDAwYTUuLmJlNmRmZjlkIDEwMDY0NAot LS0gYS9tZXNvbi5idWlsZAorKysgYi9tZXNvbi5idWlsZApAQCAtNjQsOCArNjQsNiBAQCBfYnVp bGRfb3ZlcmxheSA9IGZhbHNlCiBfb3ZlcmxheV9yZXF1aXJlZCA9IGZhbHNlCiBfYnVpbGRfbWFu ID0gZmFsc2UKIF9tYW5fcmVxdWlyZWQgPSBmYWxzZQotX2J1aWxkX2F1ZGlvID0gZmFsc2UKLV9h dWRpb19yZXF1aXJlZCA9IGZhbHNlCiBfYnVpbGRfY2hhbWVsaXVtID0gZmFsc2UKIF9jaGFtZWxp dW1fcmVxdWlyZWQgPSBmYWxzZQogX2J1aWxkX2RvY3MgPSBmYWxzZQpAQCAtNzksNyArNzcsNiBA QCBidWlsZF9vdmVybGF5ID0gZ2V0X29wdGlvbignYnVpbGRfb3ZlcmxheScpCiBvdmVybGF5X2Jh Y2tlbmRzID0gZ2V0X29wdGlvbignb3ZlcmxheV9iYWNrZW5kcycpCiBidWlsZF9tYW4gPSBnZXRf b3B0aW9uKCdidWlsZF9tYW4nKQogd2l0aF92YWxncmluZCA9IGdldF9vcHRpb24oJ3dpdGhfdmFs Z3JpbmQnKQotYnVpbGRfYXVkaW8gPSBnZXRfb3B0aW9uKCdidWlsZF9hdWRpbycpCiBidWlsZF9j aGFtZWxpdW0gPSBnZXRfb3B0aW9uKCdidWlsZF9jaGFtZWxpdW0nKQogYnVpbGRfZG9jcyA9IGdl dF9vcHRpb24oJ2J1aWxkX2RvY3MnKQogYnVpbGRfdGVzdHMgPSBnZXRfb3B0aW9uKCdidWlsZF90 ZXN0cycpCkBAIC05MSw4ICs4OCw2IEBAIF9idWlsZF9vdmVybGF5ID0gYnVpbGRfb3ZlcmxheSAh PSAnZmFsc2UnCiBfb3ZlcmxheV9yZXF1aXJlZCA9IGJ1aWxkX292ZXJsYXkgPT0gJ3RydWUnCiBf YnVpbGRfbWFuID0gYnVpbGRfbWFuICE9ICdmYWxzZScKIF9tYW5fcmVxdWlyZWQgPSBidWlsZF9t YW4gPT0gJ3RydWUnCi1fYnVpbGRfYXVkaW8gPSBidWlsZF9hdWRpbyAhPSAnZmFsc2UnCi1fYXVk aW9fcmVxdWlyZWQgPSBidWlsZF9hdWRpbyA9PSAndHJ1ZScKIF9idWlsZF9jaGFtZWxpdW0gPSBi dWlsZF9jaGFtZWxpdW0gIT0gJ2ZhbHNlJwogX2NoYW1lbGl1bV9yZXF1aXJlZCA9IGJ1aWxkX2No YW1lbGl1bSA9PSAndHJ1ZScKIF9idWlsZF9kb2NzID0gYnVpbGRfZG9jcyAhPSAnZmFsc2UnCkBA IC0xNjYsMjYgKzE2MSw2IEBAIGNhaXJvID0gZGVwZW5kZW5jeSgnY2Fpcm8nLCB2ZXJzaW9uIDog Jz4xLjEyLjAnLCByZXF1aXJlZCA6IHRydWUpCiBsaWJ1ZGV2ID0gZGVwZW5kZW5jeSgnbGlidWRl dicsIHJlcXVpcmVkIDogdHJ1ZSkKIGdsaWIgPSBkZXBlbmRlbmN5KCdnbGliLTIuMCcsIHJlcXVp cmVkIDogdHJ1ZSkKIAotZ3NsID0gbnVsbF9kZXAKLWFsc2EgPSBudWxsX2RlcAotaWYgX2J1aWxk X2F1ZGlvIG9yIF9idWlsZF9jaGFtZWxpdW0KLQlnc2wgPSBkZXBlbmRlbmN5KCdnc2wnLCByZXF1 aXJlZCA6IF9hdWRpb19yZXF1aXJlZCBvciBfY2hhbWVsaXVtX3JlcXVpcmVkKQotZW5kaWYKLWlm IF9idWlsZF9hdWRpbwotCWFsc2EgPSBkZXBlbmRlbmN5KCdhbHNhJywgcmVxdWlyZWQgOiBfYXVk aW9fcmVxdWlyZWQpCi1lbmRpZgotCi1hdWRpb2luZm8gPSAnTm8nCi1pZiBfYnVpbGRfYXVkaW8g YW5kIGFsc2EuZm91bmQoKSBhbmQgZ3NsLmZvdW5kKCkKLQlhdWRpb2luZm8gPSAnWWVzJwotZWxz ZQotCWlmIF9hdWRpb19yZXF1aXJlZAotCQllcnJvcignQ2Fubm90IGJ1aWxkIGF1ZGlvIHRlc3Qg ZHVlIHRvIG1pc3NpbmcgZGVwZW5kZW5jaWVzJykKLQllbmRpZgotCV9idWlsZF9hdWRpbyA9IGZh bHNlCi1lbmRpZgotYnVpbGRfaW5mbyArPSAnQnVpbGQgYXVkaW8gdGVzdDogJyArIGF1ZGlvaW5m bwotCiB4bWxycGMgPSBkZXBlbmRlbmN5KCd4bWxycGMnLCByZXF1aXJlZCA6IGZhbHNlKQogeG1s cnBjX3V0aWwgPSBkZXBlbmRlbmN5KCd4bWxycGNfdXRpbCcsIHJlcXVpcmVkIDogZmFsc2UpCiB4 bWxycGNfY2xpZW50ID0gZGVwZW5kZW5jeSgneG1scnBjX2NsaWVudCcsIHJlcXVpcmVkIDogZmFs c2UpCkBAIC0xOTcsMjEgKzE3MiwzMiBAQCBpZiBub3QgeG1scnBjLmZvdW5kKCkgYW5kIHhtbHJw Y19jbWQuZm91bmQoKQogCiAJaWYgbGlic19jbWQucmV0dXJuY29kZSgpID09IDAgYW5kIGNmbGFn c19jbWQucmV0dXJuY29kZSgpID09IDAKIAkJeG1scnBjID0gZGVjbGFyZV9kZXBlbmRlbmN5KGNv bXBpbGVfYXJnczogY2ZsYWdzX2NtZC5zdGRvdXQoKS5zdHJpcCgpLnNwbGl0KCksCi0JCQkJCSAg IGxpbmtfYXJncyA6IGxpYnNfY21kLnN0ZG91dCgpLnN0cmlwKCkuc3BsaXQoKSkKKwkJCQkJICAg IGxpbmtfYXJncyA6IGxpYnNfY21kLnN0ZG91dCgpLnN0cmlwKCkuc3BsaXQoKSkKIAkJeG1scnBj X3V0aWwgPSBkZWNsYXJlX2RlcGVuZGVuY3koKQogCQl4bWxycGNfY2xpZW50ID0gZGVjbGFyZV9k ZXBlbmRlbmN5KCkKIAllbmRpZgogZW5kaWYKIAorZ3NsID0gbnVsbF9kZXAKK2Fsc2EgPSBudWxs X2RlcAogY2hhbWVsaXVtID0gbnVsbF9kZXAKK2NoYW1lbGl1bV9mb3VuZCA9IGZhbHNlICMgVE9E TzogdXNlIGEgZGlzYWJsZXIgb2JqZWN0IGluc3RlYWQKIGNoYW1lbGl1bWluZm8gPSAnTm8nCi1p ZiBfYnVpbGRfY2hhbWVsaXVtIGFuZCBnc2wuZm91bmQoKSBhbmQgeG1scnBjLmZvdW5kKCkgYW5k IHhtbHJwY191dGlsLmZvdW5kKCkgYW5kIHhtbHJwY19jbGllbnQuZm91bmQoKQotCWNoYW1lbGl1 bSA9IGRlY2xhcmVfZGVwZW5kZW5jeShkZXBlbmRlbmNpZXMgOiBbIHhtbHJwYywKLQkJCQkJCQl4 bWxycGNfdXRpbCwgeG1scnBjX2NsaWVudF0pCi0JY29uZmlnLnNldCgnSEFWRV9DSEFNRUxJVU0n LCAxKQotCWNoYW1lbGl1bWluZm8gPSAnWWVzJwotZWxpZiBfY2hhbWVsaXVtX3JlcXVpcmVkCi0J ZXJyb3IoJ0Nhbm5vdCBidWlsZCBjaGFtZWxpdW0gdGVzdCBkdWUgdG8gbWlzc2luZyBkZXBlbmRl bmNpZXMnKQoraWYgX2J1aWxkX2NoYW1lbGl1bQorCWdzbCA9IGRlcGVuZGVuY3koJ2dzbCcsIHJl cXVpcmVkIDogX2NoYW1lbGl1bV9yZXF1aXJlZCkKKwlhbHNhID0gZGVwZW5kZW5jeSgnYWxzYScs IHJlcXVpcmVkIDogX2NoYW1lbGl1bV9yZXF1aXJlZCkKKwljaGFtZWxpdW0gPSBkZWNsYXJlX2Rl cGVuZGVuY3koZGVwZW5kZW5jaWVzIDogWworCQl4bWxycGMsCisJCXhtbHJwY191dGlsLAorCQl4 bWxycGNfY2xpZW50LAorCQlnc2wsCisJCWFsc2EsCisJXSwgcmVxdWlyZWQgOiBfY2hhbWVsaXVt X3JlcXVpcmVkKQorCWlmIHhtbHJwYy5mb3VuZCgpIGFuZCB4bWxycGNfdXRpbC5mb3VuZCgpIGFu ZCB4bWxycGNfY2xpZW50LmZvdW5kKCkgYW5kIGdzbC5mb3VuZCgpIGFuZCBhbHNhLmZvdW5kKCkK KwkJY29uZmlnLnNldCgnSEFWRV9DSEFNRUxJVU0nLCAxKQorCQljaGFtZWxpdW1pbmZvID0gJ1ll cycKKwkJY2hhbWVsaXVtX2ZvdW5kID0gdHJ1ZQorCWVuZGlmCiBlbmRpZgogYnVpbGRfaW5mbyAr PSAnQnVpbGQgQ2hhbWVsaXVtIHRlc3Q6ICcgKyBjaGFtZWxpdW1pbmZvCiAKZGlmZiAtLWdpdCBh L21lc29uX29wdGlvbnMudHh0IGIvbWVzb25fb3B0aW9ucy50eHQKaW5kZXggMGNkM2IzNTAuLjg4 OGVmZTU2IDEwMDY0NAotLS0gYS9tZXNvbl9vcHRpb25zLnR4dAorKysgYi9tZXNvbl9vcHRpb25z LnR4dApAQCAtMTAsMTIgKzEwLDYgQEAgb3B0aW9uKCdvdmVybGF5X2JhY2tlbmRzJywKICAgICAg ICBjaG9pY2VzIDogWyAnYXV0bycsICd4JywgJ3h2JyBdLAogICAgICAgIGRlc2NyaXB0aW9uIDog J092ZXJsYXkgYmFja2VuZHMgdG8gZW5hYmxlJykKIAotb3B0aW9uKCdidWlsZF9hdWRpbycsCi0g ICAgICAgdHlwZSA6ICdjb21ibycsCi0gICAgICAgdmFsdWUgOiAnYXV0bycsCi0gICAgICAgY2hv aWNlcyA6IFsnYXV0bycsICd0cnVlJywgJ2ZhbHNlJ10sCi0gICAgICAgZGVzY3JpcHRpb24gOiAn QnVpbGQgYXVkaW8gdGVzdCcpCi0KIG9wdGlvbignYnVpbGRfY2hhbWVsaXVtJywKICAgICAgICB0 eXBlIDogJ2NvbWJvJywKICAgICAgICB2YWx1ZSA6ICdhdXRvJywKZGlmZiAtLWdpdCBhL3Rlc3Rz L2F1ZGlvLmMgYi90ZXN0cy9hdWRpby5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1 NjA4NzZhMy4uMDAwMDAwMDAKLS0tIGEvdGVzdHMvYXVkaW8uYworKysgL2Rldi9udWxsCkBAIC0x LDE5MyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IMKpIDIwMTcgSW50ZWwgQ29ycG9yYXRpb24K LSAqCi0gKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8g YW55IHBlcnNvbiBvYnRhaW5pbmcgYQotICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3Nv Y2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKLSAqIHRvIGRlYWwg aW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxp bWl0YXRpb24KLSAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJs aXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLAotICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRo ZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCi0gKiBTb2Z0d2Fy ZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRp b25zOgotICoKLSAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Np b24gbm90aWNlIChpbmNsdWRpbmcgdGhlIG5leHQKLSAqIHBhcmFncmFwaCkgc2hhbGwgYmUgaW5j bHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUKLSAqIFNv ZnR3YXJlLgotICoKLSAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VU IFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCi0gKiBJTVBMSUVELCBJTkNMVURJTkcg QlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKLSAq IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJ TiBOTyBFVkVOVCBTSEFMTAotICogVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUg TElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKLSAqIExJQUJJTElUWSwgV0hF VEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5H Ci0gKiBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBU SEUgVVNFIE9SIE9USEVSIERFQUxJTkdTCi0gKiBJTiBUSEUgU09GVFdBUkUuCi0gKgotICogQXV0 aG9yczoKLSAqICBQYXVsIEtvY2lhbGtvd3NraSA8cGF1bC5rb2NpYWxrb3dza2lAbGludXguaW50 ZWwuY29tPgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJpZ3QuaCIKLQot I2RlZmluZSBQTEFZQkFDS19DSEFOTkVMUwkyCi0jZGVmaW5lIFBMQVlCQUNLX0ZSQU1FUwkJMTAy NAotCi0jZGVmaW5lIENBUFRVUkVfU0FNUExFX1JBVEUJNDgwMDAKLSNkZWZpbmUgQ0FQVFVSRV9D SEFOTkVMUwkyCi0jZGVmaW5lIENBUFRVUkVfREVWSUNFX05BTUUJImRlZmF1bHQiCi0jZGVmaW5l IENBUFRVUkVfRlJBTUVTCQkyMDQ4Ci0KLSNkZWZpbmUgUlVOX1RJTUVPVVQJCTIwMDAKLQotc3Ry dWN0IHRlc3RfZGF0YSB7Ci0Jc3RydWN0IGFsc2EgKmFsc2E7Ci0Jc3RydWN0IGF1ZGlvX3NpZ25h bCAqc2lnbmFsOwotCi0JaW50IHN0cmVhazsKLX07Ci0KLXN0YXRpYyBpbnQgc2FtcGxpbmdfcmF0 ZXNbXSA9IHsKLQkzMjAwMCwKLQk0NDEwMCwKLQk0ODAwMCwKLQk4ODIwMCwKLQk5NjAwMCwKLQkx NzY0MDAsCi0JMTkyMDAwLAotfTsKLQotc3RhdGljIGludCBzYW1wbGluZ19yYXRlc19jb3VudCA9 IHNpemVvZihzYW1wbGluZ19yYXRlcykgLyBzaXplb2YoaW50KTsKLQotc3RhdGljIGludCB0ZXN0 X2ZyZXF1ZW5jaWVzW10gPSB7Ci0JMzAwLAotCTYwMCwKLQkxMjAwLAotCTgwMDAwLAotCTEwMDAw LAotfTsKLQotc3RhdGljIGludCB0ZXN0X2ZyZXF1ZW5jaWVzX2NvdW50ID0gc2l6ZW9mKHRlc3Rf ZnJlcXVlbmNpZXMpIC8gc2l6ZW9mKGludCk7Ci0KLXN0YXRpYyBpbnQgb3V0cHV0X2NhbGxiYWNr KHZvaWQgKmRhdGEsIHNob3J0ICpidWZmZXIsIGludCBmcmFtZXMpCi17Ci0Jc3RydWN0IHRlc3Rf ZGF0YSAqdGVzdF9kYXRhID0gKHN0cnVjdCB0ZXN0X2RhdGEgKikgZGF0YTsKLQotCWF1ZGlvX3Np Z25hbF9maWxsKHRlc3RfZGF0YS0+c2lnbmFsLCBidWZmZXIsIGZyYW1lcyk7Ci0KLQlyZXR1cm4g MDsKLX0KLQotc3RhdGljIGludCBpbnB1dF9jYWxsYmFjayh2b2lkICpkYXRhLCBzaG9ydCAqYnVm ZmVyLCBpbnQgZnJhbWVzKQotewotCXN0cnVjdCB0ZXN0X2RhdGEgKnRlc3RfZGF0YSA9IChzdHJ1 Y3QgdGVzdF9kYXRhICopIGRhdGE7Ci0JYm9vbCBkZXRlY3Q7Ci0KLQlkZXRlY3QgPSBhdWRpb19z aWduYWxfZGV0ZWN0KHRlc3RfZGF0YS0+c2lnbmFsLCBDQVBUVVJFX0NIQU5ORUxTLAotCQkJCSAg ICAgQ0FQVFVSRV9TQU1QTEVfUkFURSwgYnVmZmVyLCBmcmFtZXMpOwotCWlmIChkZXRlY3QpCi0J CXRlc3RfZGF0YS0+c3RyZWFrKys7Ci0JZWxzZQotCQl0ZXN0X2RhdGEtPnN0cmVhayA9IDA7Ci0K LQkvKiBBIHN0cmVhayBvZiAzIGdpdmVzIGNvbmZpZGVuY2UgdGhhdCB0aGUgc2lnbmFsIGlzIGdv b2QuICovCi0JaWYgKHRlc3RfZGF0YS0+c3RyZWFrID09IDMpCi0JCXJldHVybiAxOwotCi0JcmV0 dXJuIDA7Ci19Ci0KLXN0YXRpYyB2b2lkIHRlc3RfaW50ZWdyaXR5KGNvbnN0IGNoYXIgKmRldmlj ZV9uYW1lKQotewotCXN0cnVjdCB0ZXN0X2RhdGEgZGF0YTsKLQlpbnQgc2FtcGxpbmdfcmF0ZTsK LQlib29sIHJ1biA9IGZhbHNlOwotCWJvb2wgdGVzdDsKLQlpbnQgaSwgajsKLQlpbnQgcmV0Owot Ci0JZGF0YS5hbHNhID0gYWxzYV9pbml0KCk7Ci0JaWd0X2Fzc2VydChkYXRhLmFsc2EpOwotCi0J cmV0ID0gYWxzYV9vcGVuX2lucHV0KGRhdGEuYWxzYSwgQ0FQVFVSRV9ERVZJQ0VfTkFNRSk7Ci0J aWd0X2Fzc2VydChyZXQgPj0gMCk7Ci0KLQlhbHNhX2NvbmZpZ3VyZV9pbnB1dChkYXRhLmFsc2Es IENBUFRVUkVfQ0hBTk5FTFMsCi0JCQkgICAgIENBUFRVUkVfU0FNUExFX1JBVEUpOwotCi0JYWxz YV9yZWdpc3Rlcl9pbnB1dF9jYWxsYmFjayhkYXRhLmFsc2EsIGlucHV0X2NhbGxiYWNrLCAmZGF0 YSwKLQkJCQkgICAgIENBUFRVUkVfRlJBTUVTKTsKLQotCWZvciAoaSA9IDA7IGkgPCBzYW1wbGlu Z19yYXRlc19jb3VudDsgaSsrKSB7Ci0JCXJldCA9IGFsc2Ffb3Blbl9vdXRwdXQoZGF0YS5hbHNh LCBkZXZpY2VfbmFtZSk7Ci0JCWlndF9hc3NlcnQocmV0ID49IDApOwotCi0JCXNhbXBsaW5nX3Jh dGUgPSBzYW1wbGluZ19yYXRlc1tpXTsKLQotCQl0ZXN0ID0gYWxzYV90ZXN0X291dHB1dF9jb25m aWd1cmF0aW9uKGRhdGEuYWxzYSwKLQkJCQkJCSAgICAgIFBMQVlCQUNLX0NIQU5ORUxTLAotCQkJ CQkJICAgICAgc2FtcGxpbmdfcmF0ZSk7Ci0JCWlmICghdGVzdCkgewotCQkJYWxzYV9jbG9zZV9v dXRwdXQoZGF0YS5hbHNhKTsKLQkJCWNvbnRpbnVlOwotCQl9Ci0KLQkJaWd0X2RlYnVnKCJUZXN0 aW5nIHdpdGggc2FtcGxpbmcgcmF0ZSAlZFxuIiwgc2FtcGxpbmdfcmF0ZSk7Ci0KLQkJYWxzYV9j b25maWd1cmVfb3V0cHV0KGRhdGEuYWxzYSwgUExBWUJBQ0tfQ0hBTk5FTFMsCi0JCQkJICAgICAg IHNhbXBsaW5nX3JhdGUpOwotCi0JCWRhdGEuc2lnbmFsID0gYXVkaW9fc2lnbmFsX2luaXQoUExB WUJBQ0tfQ0hBTk5FTFMsCi0JCQkJCQlzYW1wbGluZ19yYXRlKTsKLQkJaWd0X2Fzc2VydChkYXRh LnNpZ25hbCk7Ci0KLQkJZm9yIChqID0gMDsgaiA8IHRlc3RfZnJlcXVlbmNpZXNfY291bnQ7IGor KykKLQkJCWF1ZGlvX3NpZ25hbF9hZGRfZnJlcXVlbmN5KGRhdGEuc2lnbmFsLAotCQkJCQkJICAg dGVzdF9mcmVxdWVuY2llc1tqXSk7Ci0KLQkJYXVkaW9fc2lnbmFsX3N5bnRoZXNpemUoZGF0YS5z aWduYWwpOwotCi0JCWFsc2FfcmVnaXN0ZXJfb3V0cHV0X2NhbGxiYWNrKGRhdGEuYWxzYSwgb3V0 cHV0X2NhbGxiYWNrLAotCQkJCQkgICAgICAmZGF0YSwgUExBWUJBQ0tfRlJBTUVTKTsKLQotCQlk YXRhLnN0cmVhayA9IDA7Ci0KLQkJcmV0ID0gYWxzYV9ydW4oZGF0YS5hbHNhLCBSVU5fVElNRU9V VCk7Ci0JCWlndF9hc3NlcnQocmV0ID4gMCk7Ci0KLQkJYXVkaW9fc2lnbmFsX2NsZWFuKGRhdGEu c2lnbmFsKTsKLQkJZnJlZShkYXRhLnNpZ25hbCk7Ci0KLQkJYWxzYV9jbG9zZV9vdXRwdXQoZGF0 YS5hbHNhKTsKLQotCQlydW4gPSB0cnVlOwotCX0KLQotCS8qIE1ha2Ugc3VyZSB3ZSB0ZXN0ZWQg YXQgbGVhc3Qgb25lIGZyZXF1ZW5jeSAqLwotCWlndF9hc3NlcnQocnVuKTsKLQotCWFsc2FfY2xv c2VfaW5wdXQoZGF0YS5hbHNhKTsKLQlmcmVlKGRhdGEuYWxzYSk7Ci19Ci0KLXN0YXRpYyB2b2lk IHRlc3Rfc3VzcGVuZF9yZXN1bWVfaW50ZWdyaXR5KGNvbnN0IGNoYXIgKmRldmljZV9uYW1lLAot CQkJCQkgIGVudW0gaWd0X3N1c3BlbmRfc3RhdGUgc3RhdGUsCi0JCQkJCSAgZW51bSBpZ3Rfc3Vz cGVuZF90ZXN0IHRlc3QpCi17Ci0JdGVzdF9pbnRlZ3JpdHkoZGV2aWNlX25hbWUpOwotCi0JaWd0 X3N5c3RlbV9zdXNwZW5kX2F1dG9yZXN1bWUoc3RhdGUsIHRlc3QpOwotCi0JdGVzdF9pbnRlZ3Jp dHkoZGV2aWNlX25hbWUpOwotfQotCi1pZ3RfbWFpbgotewotCWlndF9zdWJ0ZXN0KCJoZG1pLWlu dGVncml0eSIpCi0JCXRlc3RfaW50ZWdyaXR5KCJIRE1JIik7Ci0KLQlpZ3Rfc3VidGVzdCgiaGRt aS1pbnRlZ3JpdHktYWZ0ZXItc3VzcGVuZCIpCi0JCXRlc3Rfc3VzcGVuZF9yZXN1bWVfaW50ZWdy aXR5KCJIRE1JIiwgU1VTUEVORF9TVEFURV9NRU0sCi0JCQkJCSAgICAgIFNVU1BFTkRfVEVTVF9O T05FKTsKLQotCWlndF9zdWJ0ZXN0KCJoZG1pLWludGVncml0eS1hZnRlci1oaWJlcm5hdGUiKQot CQl0ZXN0X3N1c3BlbmRfcmVzdW1lX2ludGVncml0eSgiSERNSSIsIFNVU1BFTkRfU1RBVEVfRElT SywKLQkJCQkJICAgICAgU1VTUEVORF9URVNUX0RFVklDRVMpOwotfQpkaWZmIC0tZ2l0IGEvdGVz dHMva21zX2NoYW1lbGl1bS5jIGIvdGVzdHMva21zX2NoYW1lbGl1bS5jCmluZGV4IDJkYzEwNDlk Li5hNzEyMjUwYSAxMDA2NDQKLS0tIGEvdGVzdHMva21zX2NoYW1lbGl1bS5jCisrKyBiL3Rlc3Rz L2ttc19jaGFtZWxpdW0uYwpAQCAtNDEzLDcgKzQxMyw3IEBAIHRlc3Rfc3VzcGVuZF9yZXN1bWVf ZWRpZF9jaGFuZ2UoZGF0YV90ICpkYXRhLCBzdHJ1Y3QgY2hhbWVsaXVtX3BvcnQgKnBvcnQsCiAK IHN0YXRpYyBpZ3Rfb3V0cHV0X3QgKgogcHJlcGFyZV9vdXRwdXQoZGF0YV90ICpkYXRhLAotCSAg ICAgICBzdHJ1Y3QgY2hhbWVsaXVtX3BvcnQgKnBvcnQpCisJICAgICAgIHN0cnVjdCBjaGFtZWxp dW1fcG9ydCAqcG9ydCwgYm9vbCBzZXRfZWRpZCkKIHsKIAlpZ3RfZGlzcGxheV90ICpkaXNwbGF5 ID0gJmRhdGEtPmRpc3BsYXk7CiAJaWd0X291dHB1dF90ICpvdXRwdXQ7CkBAIC00MjgsNyArNDI4 LDggQEAgcHJlcGFyZV9vdXRwdXQoZGF0YV90ICpkYXRhLAogCS8qIFRoZSBjaGFtZWxpdW0ncyBk ZWZhdWx0IEVESUQgaGFzIGEgbG90IG9mIHJlc29sdXRpb25zLCB3YXkgbW9yZSB0aGVuCiAJICog d2UgbmVlZCB0byB0ZXN0CiAJICovCi0JY2hhbWVsaXVtX3BvcnRfc2V0X2VkaWQoZGF0YS0+Y2hh bWVsaXVtLCBwb3J0LCBkYXRhLT5lZGlkX2lkKTsKKwlpZiAoc2V0X2VkaWQpCisJCWNoYW1lbGl1 bV9wb3J0X3NldF9lZGlkKGRhdGEtPmNoYW1lbGl1bSwgcG9ydCwgZGF0YS0+ZWRpZF9pZCk7CiAK IAljaGFtZWxpdW1fcGx1ZyhkYXRhLT5jaGFtZWxpdW0sIHBvcnQpOwogCXdhaXRfZm9yX2Nvbm5l Y3RvcihkYXRhLCBwb3J0LCBEUk1fTU9ERV9DT05ORUNURUQpOwpAQCAtNjEzLDcgKzYxNCw3IEBA IHN0YXRpYyB2b2lkIHRlc3RfZGlzcGxheV9vbmVfbW9kZShkYXRhX3QgKmRhdGEsIHN0cnVjdCBj aGFtZWxpdW1fcG9ydCAqcG9ydCwKIAogCXJlc2V0X3N0YXRlKGRhdGEsIHBvcnQpOwogCi0Jb3V0 cHV0ID0gcHJlcGFyZV9vdXRwdXQoZGF0YSwgcG9ydCk7CisJb3V0cHV0ID0gcHJlcGFyZV9vdXRw dXQoZGF0YSwgcG9ydCwgdHJ1ZSk7CiAJY29ubmVjdG9yID0gY2hhbWVsaXVtX3BvcnRfZ2V0X2Nv bm5lY3RvcihkYXRhLT5jaGFtZWxpdW0sIHBvcnQsIGZhbHNlKTsKIAlwcmltYXJ5ID0gaWd0X291 dHB1dF9nZXRfcGxhbmVfdHlwZShvdXRwdXQsIERSTV9QTEFORV9UWVBFX1BSSU1BUlkpOwogCWln dF9hc3NlcnQocHJpbWFyeSk7CkBAIC02NDQsNyArNjQ1LDcgQEAgc3RhdGljIHZvaWQgdGVzdF9k aXNwbGF5X2FsbF9tb2RlcyhkYXRhX3QgKmRhdGEsIHN0cnVjdCBjaGFtZWxpdW1fcG9ydCAqcG9y dCwKIAogCXJlc2V0X3N0YXRlKGRhdGEsIHBvcnQpOwogCi0Jb3V0cHV0ID0gcHJlcGFyZV9vdXRw dXQoZGF0YSwgcG9ydCk7CisJb3V0cHV0ID0gcHJlcGFyZV9vdXRwdXQoZGF0YSwgcG9ydCwgdHJ1 ZSk7CiAJY29ubmVjdG9yID0gY2hhbWVsaXVtX3BvcnRfZ2V0X2Nvbm5lY3RvcihkYXRhLT5jaGFt ZWxpdW0sIHBvcnQsIGZhbHNlKTsKIAlwcmltYXJ5ID0gaWd0X291dHB1dF9nZXRfcGxhbmVfdHlw ZShvdXRwdXQsIERSTV9QTEFORV9UWVBFX1BSSU1BUlkpOwogCWlndF9hc3NlcnQocHJpbWFyeSk7 CkBAIC02NzksNyArNjgwLDcgQEAgdGVzdF9kaXNwbGF5X2ZyYW1lX2R1bXAoZGF0YV90ICpkYXRh LCBzdHJ1Y3QgY2hhbWVsaXVtX3BvcnQgKnBvcnQpCiAKIAlyZXNldF9zdGF0ZShkYXRhLCBwb3J0 KTsKIAotCW91dHB1dCA9IHByZXBhcmVfb3V0cHV0KGRhdGEsIHBvcnQpOworCW91dHB1dCA9IHBy ZXBhcmVfb3V0cHV0KGRhdGEsIHBvcnQsIHRydWUpOwogCWNvbm5lY3RvciA9IGNoYW1lbGl1bV9w b3J0X2dldF9jb25uZWN0b3IoZGF0YS0+Y2hhbWVsaXVtLCBwb3J0LCBmYWxzZSk7CiAJcHJpbWFy eSA9IGlndF9vdXRwdXRfZ2V0X3BsYW5lX3R5cGUob3V0cHV0LCBEUk1fUExBTkVfVFlQRV9QUklN QVJZKTsKIAlpZ3RfYXNzZXJ0KHByaW1hcnkpOwpAQCAtNzEwLDYgKzcxMSwyNjYgQEAgdGVzdF9k aXNwbGF5X2ZyYW1lX2R1bXAoZGF0YV90ICpkYXRhLCBzdHJ1Y3QgY2hhbWVsaXVtX3BvcnQgKnBv cnQpCiAJZHJtTW9kZUZyZWVDb25uZWN0b3IoY29ubmVjdG9yKTsKIH0KIAorCisvKiBQbGF5YmFj ayBwYXJhbWV0ZXJzIGNvbnRyb2wgdGhlIGF1ZGlvIHNpZ25hbCB3ZSBzeW50aGVzaXplIGFuZCBz ZW5kICovCisjZGVmaW5lIFBMQVlCQUNLX0NIQU5ORUxTIDIKKyNkZWZpbmUgUExBWUJBQ0tfU0FN UExFUyAxMDI0CisKKy8qIENhcHR1cmUgcGFyZW1ldGVycyBjb250cm9sIHRoZSBhdWRpbyBzaWdu YWwgd2UgcmVjZWl2ZSAqLworI2RlZmluZSBDQVBUVVJFX1NBTVBMRVMgMjA0OAorCisjZGVmaW5l IEFVRElPX0RVUkFUSU9OIDIwMDAgLyogbXMgKi8KKy8qIEEgc3RyZWFrIG9mIDMgZ2l2ZXMgY29u ZmlkZW5jZSB0aGF0IHRoZSBzaWduYWwgaXMgZ29vZC4gKi8KKyNkZWZpbmUgTUlOX1NUUkVBSyAz CisKKy8qIFRPRE86IENoYW1lbGl1bSBvbmx5IHN1cHBvcnRzIDQ4S0h6IGZvciBub3cgKi8KK3N0 YXRpYyBpbnQgc2FtcGxpbmdfcmF0ZXNbXSA9IHsKKy8qCTMyMDAwLCAqLworLyoJNDQxMDAsICov CisJNDgwMDAsCisvKgk4ODIwMCwgKi8KKy8qCTk2MDAwLCAqLworLyoJMTc2NDAwLCAqLworLyoJ MTkyMDAwLCAqLworfTsKKworc3RhdGljIGludCBzYW1wbGluZ19yYXRlc19jb3VudCA9IHNpemVv ZihzYW1wbGluZ19yYXRlcykgLyBzaXplb2YoaW50KTsKKworc3RhdGljIGludCB0ZXN0X2ZyZXF1 ZW5jaWVzW10gPSB7CisJMzAwLAorCTYwMCwKKwkxMjAwLAorCTgwMDAwLAorCTEwMDAwLAorfTsK Kworc3RhdGljIGludCB0ZXN0X2ZyZXF1ZW5jaWVzX2NvdW50ID0gc2l6ZW9mKHRlc3RfZnJlcXVl bmNpZXMpIC8gc2l6ZW9mKGludCk7CisKK3N0YXRpYyBpbnQKK291dHB1dF9jYWxsYmFjayh2b2lk ICpkYXRhLCBzaG9ydCAqYnVmZmVyLCBpbnQgZnJhbWVzKQoreworCXN0cnVjdCBhdWRpb19zaWdu YWwgKnNpZ25hbCA9IChzdHJ1Y3QgYXVkaW9fc2lnbmFsICopIGRhdGE7CisKKwlhdWRpb19zaWdu YWxfZmlsbChzaWduYWwsIGJ1ZmZlciwgZnJhbWVzKTsKKworCXJldHVybiAwOworfQorCitzdGF0 aWMgYm9vbAorZG9fdGVzdF9kaXNwbGF5X2F1ZGlvKGRhdGFfdCAqZGF0YSwgc3RydWN0IGNoYW1l bGl1bV9wb3J0ICpwb3J0LAorCQkgICAgICBzdHJ1Y3QgYWxzYSAqYWxzYSwgaW50IHBsYXliYWNr X2NoYW5uZWxzLAorCQkgICAgICBpbnQgcGxheWJhY2tfcmF0ZSkKK3sKKwlpbnQgcmV0LCBjYXB0 dXJlX3JhdGUsIGNhcHR1cmVfY2hhbm5lbHMsIG1zZWM7CisJc3RydWN0IGNoYW1lbGl1bV9hdWRp b19maWxlICphdWRpb19maWxlOworCXN0cnVjdCBjaGFtZWxpdW1fc3RyZWFtICpzdHJlYW07CisJ ZW51bSBjaGFtZWxpdW1fc3RyZWFtX3JlYWx0aW1lX21vZGUgc3RyZWFtX21vZGU7CisJc3RydWN0 IGF1ZGlvX3NpZ25hbCAqc2lnbmFsOworCWludDMyX3QgKnJlY3YsICpidWY7CisJZG91YmxlICpj aGFubmVsOworCXNpemVfdCBpLCBzdHJlYWssIHBhZ2VfY291bnQ7CisJc2l6ZV90IHJlY3ZfbGVu LCBidWZfbGVuLCBidWZfY2FwLCBidWZfc2l6ZSwgY2hhbm5lbF9sZW47CisJYm9vbCBvazsKKwlj aGFyIGR1bXBfc3VmZml4WzY0XTsKKwljaGFyICpkdW1wX3BhdGggPSBOVUxMOworCWludCBkdW1w X2ZkID0gLTE7CisKKwlpZiAoIWFsc2FfdGVzdF9vdXRwdXRfY29uZmlndXJhdGlvbihhbHNhLCBw bGF5YmFja19jaGFubmVscywKKwkJCQkJICAgIHBsYXliYWNrX3JhdGUpKQorCQlyZXR1cm4gZmFs c2U7CisKKwlpZ3RfZGVidWcoIlRlc3Rpbmcgd2l0aCBwbGF5YmFjayBzYW1wbGluZyByYXRlICVk XG4iLCBwbGF5YmFja19yYXRlKTsKKwlhbHNhX2NvbmZpZ3VyZV9vdXRwdXQoYWxzYSwgcGxheWJh Y2tfY2hhbm5lbHMsIHBsYXliYWNrX3JhdGUpOworCisJY2hhbWVsaXVtX3N0YXJ0X2NhcHR1cmlu Z19hdWRpbyhkYXRhLT5jaGFtZWxpdW0sIHBvcnQsIGZhbHNlKTsKKworCXN0cmVhbSA9IGNoYW1l bGl1bV9zdHJlYW1faW5pdCgpOworCWlndF9hc3NlcnQoc3RyZWFtKTsKKworCXN0cmVhbV9tb2Rl ID0gQ0hBTUVMSVVNX1NUUkVBTV9SRUFMVElNRV9TVE9QX1dIRU5fT1ZFUkZMT1c7CisJb2sgPSBj aGFtZWxpdW1fc3RyZWFtX2R1bXBfcmVhbHRpbWVfYXVkaW8oc3RyZWFtLCBzdHJlYW1fbW9kZSk7 CisJaWd0X2Fzc2VydChvayk7CisKKwljaGFtZWxpdW1fc3RyZWFtX2F1ZGlvX2Zvcm1hdChzdHJl YW0sICZjYXB0dXJlX3JhdGUsICZjYXB0dXJlX2NoYW5uZWxzKTsKKworCWlmIChpZ3RfZnJhbWVf ZHVtcF9pc19lbmFibGVkKCkpIHsKKwkJc25wcmludGYoZHVtcF9zdWZmaXgsIHNpemVvZihkdW1w X3N1ZmZpeCksICJjYXB0dXJlLSVkY2gtJWQiLAorCQkJIHBsYXliYWNrX2NoYW5uZWxzLCBwbGF5 YmFja19yYXRlKTsKKworCQlkdW1wX2ZkID0gYXVkaW9fY3JlYXRlX3dhdl9maWxlX3MzMl9sZShk dW1wX3N1ZmZpeCwKKwkJCQkJCSAgICAgICBjYXB0dXJlX3JhdGUsCisJCQkJCQkgICAgICAgY2Fw dHVyZV9jaGFubmVscywKKwkJCQkJCSAgICAgICAmZHVtcF9wYXRoKTsKKwkJaWd0X2Fzc2VydChk dW1wX2ZkID49IDApOworCX0KKworCXNpZ25hbCA9IGF1ZGlvX3NpZ25hbF9pbml0KHBsYXliYWNr X2NoYW5uZWxzLCBwbGF5YmFja19yYXRlKTsKKwlpZ3RfYXNzZXJ0KHNpZ25hbCk7CisKKwlmb3Ig KGkgPSAwOyBpIDwgdGVzdF9mcmVxdWVuY2llc19jb3VudDsgaSsrKQorCQlhdWRpb19zaWduYWxf YWRkX2ZyZXF1ZW5jeShzaWduYWwsIHRlc3RfZnJlcXVlbmNpZXNbaV0pOworCWF1ZGlvX3NpZ25h bF9zeW50aGVzaXplKHNpZ25hbCk7CisKKwlhbHNhX3JlZ2lzdGVyX291dHB1dF9jYWxsYmFjayhh bHNhLCBvdXRwdXRfY2FsbGJhY2ssIHNpZ25hbCwKKwkJCQkgICAgICBQTEFZQkFDS19TQU1QTEVT KTsKKworCS8qIFRPRE86IGRldGVjdCBzaWduYWwgaW4gcmVhbC10aW1lICovCisJcmV0ID0gYWxz YV9ydW4oYWxzYSwgQVVESU9fRFVSQVRJT04pOworCWlndF9hc3NlcnQocmV0ID09IDApOworCisJ YWxzYV9jbG9zZV9vdXRwdXQoYWxzYSk7CisKKwkvKiBOZWVkcyB0byBiZSBhIG11bHRpcGxlIG9m IDEyOCwgYmVjYXVzZSB0aGF0J3MgdGhlIG51bWJlciBvZiBzYW1wbGVzCisJICogd2UgZ2V0IHBl ciBjaGFubmVsIGVhY2ggdGltZSB3ZSByZWNlaXZlIGFuIGF1ZGlvIHBhZ2UgZnJvbSB0aGUKKwkg KiBDaGFtZWxpdW0gZGV2aWNlLiAqLworCWNoYW5uZWxfbGVuID0gQ0FQVFVSRV9TQU1QTEVTOwor CWNoYW5uZWwgPSBtYWxsb2Moc2l6ZW9mKGRvdWJsZSkgKiBjaGFubmVsX2xlbik7CisKKwlidWZf Y2FwID0gY2FwdHVyZV9jaGFubmVscyAqIGNoYW5uZWxfbGVuOworCWJ1ZiA9IG1hbGxvYyhzaXpl b2YoaW50MzJfdCkgKiBidWZfY2FwKTsKKwlidWZfbGVuID0gMDsKKworCXJlY3YgPSBOVUxMOwor CXJlY3ZfbGVuID0gMDsKKworCXN0cmVhayA9IDA7CisJbXNlYyA9IDA7CisJaSA9IDA7CisJd2hp bGUgKHN0cmVhayA8IE1JTl9TVFJFQUsgJiYgbXNlYyA8IEFVRElPX0RVUkFUSU9OKSB7CisJCW9r ID0gY2hhbWVsaXVtX3N0cmVhbV9yZWNlaXZlX3JlYWx0aW1lX2F1ZGlvKHN0cmVhbSwKKwkJCQkJ CQkgICAgICZwYWdlX2NvdW50LAorCQkJCQkJCSAgICAgJnJlY3YsICZyZWN2X2xlbik7CisJCWln dF9hc3NlcnQob2spOworCisJCW1lbWNweSgmYnVmW2J1Zl9sZW5dLCByZWN2LCByZWN2X2xlbiAq IHNpemVvZihpbnQzMl90KSk7CisJCWJ1Zl9sZW4gKz0gcmVjdl9sZW47CisKKwkJaWYgKGJ1Zl9s ZW4gPCBidWZfY2FwKQorCQkJY29udGludWU7CisJCWlndF9hc3NlcnQoYnVmX2xlbiA9PSBidWZf Y2FwKTsKKworCQlpZiAoZHVtcF9mZCA+PSAwKSB7CisJCQlidWZfc2l6ZSA9IGJ1Zl9sZW4gKiBz aXplb2YoaW50MzJfdCk7CisJCQlpZ3RfYXNzZXJ0KHdyaXRlKGR1bXBfZmQsIGJ1ZiwgYnVmX3Np emUpID09IGJ1Zl9zaXplKTsKKwkJfQorCisJCS8qIFRPRE86IGNoZWNrIG90aGVyIGNoYW5uZWxz IHRvbywgbm90IGp1c3QgdGhlIGZpcnN0IG9uZSAqLworCQlhdWRpb19leHRyYWN0X2NoYW5uZWxf czMyX2xlKGNoYW5uZWwsIGNoYW5uZWxfbGVuLCBidWYsIGJ1Zl9sZW4sCisJCQkJCSAgICAgY2Fw dHVyZV9jaGFubmVscywgMCk7CisKKwkJbXNlYyA9IGkgKiBjaGFubmVsX2xlbiAvIChkb3VibGUp IGNhcHR1cmVfcmF0ZSAqIDEwMDA7CisJCWlndF9kZWJ1ZygiRGV0ZWN0aW5nIGF1ZGlvIHNpZ25h bCwgdD0lZCBtc2VjXG4iLCBtc2VjKTsKKworCQlpZiAoYXVkaW9fc2lnbmFsX2RldGVjdChzaWdu YWwsIGNhcHR1cmVfcmF0ZSwgY2hhbm5lbCwKKwkJCQkJY2hhbm5lbF9sZW4pKQorCQkJc3RyZWFr Kys7CisJCWVsc2UKKwkJCXN0cmVhayA9IDA7CisKKwkJYnVmX2xlbiA9IDA7CisJCWkrKzsKKwl9 CisKKwlpZiAoZHVtcF9mZCA+PSAwKSB7CisJCWNsb3NlKGR1bXBfZmQpOworCQlpZiAoc3RyZWFr ID09IE1JTl9TVFJFQUspIHsKKwkJCS8qIFRlc3Qgc3VjY2VlZGVkLCBubyBuZWVkIHRvIGtlZXAg dGhlIGNhcHR1cmVkIGRhdGEgKi8KKwkJCXVubGluayhkdW1wX3BhdGgpOworCQl9IGVsc2UKKwkJ CWlndF9kZWJ1ZygiU2F2ZWQgY2FwdHVyZWQgYXVkaW8gZGF0YSB0byAlc1xuIiwgZHVtcF9wYXRo KTsKKwkJZnJlZShkdW1wX3BhdGgpOworCX0KKworCWZyZWUocmVjdik7CisJZnJlZShidWYpOwor CWZyZWUoY2hhbm5lbCk7CisKKwlvayA9IGNoYW1lbGl1bV9zdHJlYW1fc3RvcF9yZWFsdGltZV9h dWRpbyhzdHJlYW0pOworCWlndF9hc3NlcnQob2spOworCisJYXVkaW9fZmlsZSA9IGNoYW1lbGl1 bV9zdG9wX2NhcHR1cmluZ19hdWRpbyhkYXRhLT5jaGFtZWxpdW0sCisJCQkJCQkgICAgcG9ydCk7 CisJaWYgKGF1ZGlvX2ZpbGUpIHsKKwkJaWd0X2RlYnVnKCJBdWRpbyBmaWxlIHNhdmVkIG9uIHRo ZSBDaGFtZWxpdW0gaW4gJXNcbiIsCisJCQkgIGF1ZGlvX2ZpbGUtPnBhdGgpOworCQljaGFtZWxp dW1fZGVzdHJveV9hdWRpb19maWxlKGF1ZGlvX2ZpbGUpOworCX0KKworCWF1ZGlvX3NpZ25hbF9j bGVhbihzaWduYWwpOworCWZyZWUoc2lnbmFsKTsKKworCWNoYW1lbGl1bV9zdHJlYW1fZGVpbml0 KHN0cmVhbSk7CisKKwlpZ3RfYXNzZXJ0KHN0cmVhayA9PSBNSU5fU1RSRUFLKTsKKwlyZXR1cm4g dHJ1ZTsKK30KKworc3RhdGljIHZvaWQKK3Rlc3RfZGlzcGxheV9hdWRpbyhkYXRhX3QgKmRhdGEs IHN0cnVjdCBjaGFtZWxpdW1fcG9ydCAqcG9ydCwKKwkJICAgY29uc3QgY2hhciAqYXVkaW9fZGV2 aWNlKQoreworCWJvb2wgcnVuID0gZmFsc2U7CisJc3RydWN0IGFsc2EgKmFsc2E7CisJaW50IHJl dDsKKwlpZ3Rfb3V0cHV0X3QgKm91dHB1dDsKKwlpZ3RfcGxhbmVfdCAqcHJpbWFyeTsKKwlzdHJ1 Y3QgaWd0X2ZiIGZiOworCWRybU1vZGVNb2RlSW5mbyAqbW9kZTsKKwlkcm1Nb2RlQ29ubmVjdG9y ICpjb25uZWN0b3I7CisJaW50IGZiX2lkLCBpOworCisJaWd0X3JlcXVpcmUoYWxzYV9oYXNfZXhj bHVzaXZlX2FjY2VzcygpKTsKKworCWFsc2EgPSBhbHNhX2luaXQoKTsKKwlpZ3RfYXNzZXJ0KGFs c2EpOworCisJcmVzZXRfc3RhdGUoZGF0YSwgcG9ydCk7CisKKwkvKiBVc2UgdGhlIGRlZmF1bHQg Q2hhbWVsaXVtIEVESUQgZm9yIHRoaXMgdGVzdCwgYXMgdGhlIGJhc2UgSUdUIEVESUQKKwkgKiBk b2Vzbid0IGFkdmVydGlzZSBhdWRpbyBzdXBwb3J0IChzZWUgZHJtX2RldGVjdF9tb25pdG9yX2F1 ZGlvIGluCisJICogdGhlIGtlcm5lbCB0cmVlKS4gKi8KKwlvdXRwdXQgPSBwcmVwYXJlX291dHB1 dChkYXRhLCBwb3J0LCBmYWxzZSk7CisJY29ubmVjdG9yID0gY2hhbWVsaXVtX3BvcnRfZ2V0X2Nv bm5lY3RvcihkYXRhLT5jaGFtZWxpdW0sIHBvcnQsIGZhbHNlKTsKKwlwcmltYXJ5ID0gaWd0X291 dHB1dF9nZXRfcGxhbmVfdHlwZShvdXRwdXQsIERSTV9QTEFORV9UWVBFX1BSSU1BUlkpOworCWln dF9hc3NlcnQocHJpbWFyeSk7CisKKwkvKiBFbmFibGUgdGhlIG91dHB1dCBiZWNhdXNlIHRoZSBy ZWNlaXZlciB3b24ndCB0cnkgdG8gcmVjZWl2ZSBhdWRpbyBpZgorCSAqIGl0IGRvZXNuJ3QgcmVj ZWl2ZSB2aWRlby4gKi8KKwlpZ3RfYXNzZXJ0KGNvbm5lY3Rvci0+Y291bnRfbW9kZXMgPiAwKTsK Kwltb2RlID0gJmNvbm5lY3Rvci0+bW9kZXNbMF07CisKKwlmYl9pZCA9IGlndF9jcmVhdGVfY29s b3JfcGF0dGVybl9mYihkYXRhLT5kcm1fZmQsCisJCQkJCSAgICBtb2RlLT5oZGlzcGxheSwgbW9k ZS0+dmRpc3BsYXksCisJCQkJCSAgICBEUk1fRk9STUFUX1hSR0I4ODg4LAorCQkJCQkgICAgTE9D QUxfRFJNX0ZPUk1BVF9NT0RfTk9ORSwKKwkJCQkJICAgIDAsIDAsIDAsICZmYik7CisJaWd0X2Fz c2VydChmYl9pZCA+IDApOworCisJZW5hYmxlX291dHB1dChkYXRhLCBwb3J0LCBvdXRwdXQsIG1v ZGUsICZmYik7CisKKwlmb3IgKGkgPSAwOyBpIDwgc2FtcGxpbmdfcmF0ZXNfY291bnQ7IGkrKykg eworCQlyZXQgPSBhbHNhX29wZW5fb3V0cHV0KGFsc2EsIGF1ZGlvX2RldmljZSk7CisJCWlndF9h c3NlcnQocmV0ID49IDApOworCisJCS8qIFRPRE86IHBsYXliYWNrIG9uIGFsbCA4IGF2YWlsYWJs ZSBjaGFubmVscyAqLworCQlydW4gfD0gZG9fdGVzdF9kaXNwbGF5X2F1ZGlvKGRhdGEsIHBvcnQs IGFsc2EsCisJCQkJCSAgICAgUExBWUJBQ0tfQ0hBTk5FTFMsCisJCQkJCSAgICAgc2FtcGxpbmdf cmF0ZXNbaV0pOworCisJCWFsc2FfY2xvc2Vfb3V0cHV0KGFsc2EpOworCX0KKworCS8qIE1ha2Ug c3VyZSB3ZSB0ZXN0ZWQgYXQgbGVhc3Qgb25lIGZyZXF1ZW5jeS4gKi8KKwlpZ3RfYXNzZXJ0KHJ1 bik7CisKKwlpZ3RfcmVtb3ZlX2ZiKGRhdGEtPmRybV9mZCwgJmZiKTsKKworCWRybU1vZGVGcmVl Q29ubmVjdG9yKGNvbm5lY3Rvcik7CisKKwlmcmVlKGFsc2EpOworfQorCisKIHN0YXRpYyB2b2lk IHNlbGVjdF90aWxlZF9tb2RpZmllcihpZ3RfcGxhbmVfdCAqcGxhbmUsIHVpbnQzMl90IHdpZHRo LAogCQkJCSAgdWludDMyX3QgaGVpZ2h0LCB1aW50MzJfdCBmb3JtYXQsCiAJCQkJICB1aW50NjRf dCAqbW9kaWZpZXIpCkBAIC0xMDM3LDcgKzEyOTgsNyBAQCBzdGF0aWMgdm9pZCB0ZXN0X2Rpc3Bs YXlfcGxhbmVzX3JhbmRvbShkYXRhX3QgKmRhdGEsCiAJcmVzZXRfc3RhdGUoZGF0YSwgcG9ydCk7 CiAKIAkvKiBGaW5kIHRoZSBjb25uZWN0b3IgYW5kIHBpcGUuICovCi0Jb3V0cHV0ID0gcHJlcGFy ZV9vdXRwdXQoZGF0YSwgcG9ydCk7CisJb3V0cHV0ID0gcHJlcGFyZV9vdXRwdXQoZGF0YSwgcG9y dCwgdHJ1ZSk7CiAKIAltb2RlID0gaWd0X291dHB1dF9nZXRfbW9kZShvdXRwdXQpOwogCkBAIC0x MzA4LDYgKzE1NjksOSBAQCBpZ3RfbWFpbgogCiAJCWNvbm5lY3Rvcl9zdWJ0ZXN0KCJkcC1mcmFt ZS1kdW1wIiwgRGlzcGxheVBvcnQpCiAJCQl0ZXN0X2Rpc3BsYXlfZnJhbWVfZHVtcCgmZGF0YSwg cG9ydCk7CisKKwkJY29ubmVjdG9yX3N1YnRlc3QoImRwLWF1ZGlvIiwgRGlzcGxheVBvcnQpCisJ CQl0ZXN0X2Rpc3BsYXlfYXVkaW8oJmRhdGEsIHBvcnQsICJIRE1JIik7CiAJfQogCiAJaWd0X3N1 YnRlc3RfZ3JvdXAgewpkaWZmIC0tZ2l0IGEvdGVzdHMvbWVzb24uYnVpbGQgYi90ZXN0cy9tZXNv bi5idWlsZAppbmRleCBlM2M4YjA3Zi4uNzExOTc5YjQgMTAwNjQ0Ci0tLSBhL3Rlc3RzL21lc29u LmJ1aWxkCisrKyBiL3Rlc3RzL21lc29uLmJ1aWxkCkBAIC0yMzksMjAgKzIzOSwxMyBAQCBpZiBs aWJkcm1fbm91dmVhdS5mb3VuZCgpCiAJdGVzdF9kZXBzICs9IGxpYmRybV9ub3V2ZWF1CiBlbmRp ZgogCi1pZiBfYnVpbGRfY2hhbWVsaXVtIGFuZCBjaGFtZWxpdW0uZm91bmQoKQoraWYgY2hhbWVs aXVtX2ZvdW5kCiAJdGVzdF9wcm9ncyArPSBbCiAJCSdrbXNfY2hhbWVsaXVtJywKIAldCiAJdGVz dF9kZXBzICs9IGNoYW1lbGl1bQogZW5kaWYKIAotaWYgX2J1aWxkX2F1ZGlvIGFuZCBhbHNhLmZv dW5kKCkgYW5kIGdzbC5mb3VuZCgpCi0JdGVzdF9wcm9ncyArPSBbCi0JCSdhdWRpbycsCi0JXQot CXRlc3RfZGVwcyArPSBhbHNhCi1lbmRpZgotCiB0ZXN0X2V4ZWN1dGFibGVzID0gW10KIHRlc3Rf bGlzdCA9IFtdCiAKLS0gCjIuMjEuMAoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX18KaWd0LWRldiBtYWlsaW5nIGxpc3QKaWd0LWRldkBsaXN0cy5mcmVlZGVz a3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9p Z3QtZGV2