From mboxrd@z Thu Jan 1 00:00:00 1970 From: Wei Liu Subject: [PATCH v5 08/23] x86/mm: split out pv grant table code Date: Thu, 14 Sep 2017 13:58:37 +0100 Message-ID: <20170914125852.22129-9-wei.liu2@citrix.com> References: <20170914125852.22129-1-wei.liu2@citrix.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail6.bemta3.messagelabs.com ([195.245.230.39]) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1dsTjQ-0004Jt-9u for xen-devel@lists.xenproject.org; Thu, 14 Sep 2017 12:59:00 +0000 In-Reply-To: <20170914125852.22129-1-wei.liu2@citrix.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" To: Xen-devel Cc: George Dunlap , Andrew Cooper , Wei Liu , Jan Beulich List-Id: xen-devel@lists.xenproject.org TW92ZSB0aGUgY29kZSB0byBwdi9ncmFudF90YWJsZS5jLiBOb3RoaW5nIG5lZWRzIHRvIGJlIGRv bmUgd2l0aApyZWdhcmQgdG8gaGVhZGVycy4KClNpZ25lZC1vZmYtYnk6IFdlaSBMaXUgPHdlaS5s aXUyQGNpdHJpeC5jb20+Ci0tLQogeGVuL2FyY2gveDg2L21tLmMgICAgICAgICAgICAgfCAyODMg LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiB4ZW4vYXJjaC94ODYvcHYvTWFr ZWZpbGUgICAgICB8ICAgMSArCiB4ZW4vYXJjaC94ODYvcHYvZ3JhbnRfdGFibGUuYyB8IDMyNyAr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKIDMgZmlsZXMgY2hhbmdl ZCwgMzI4IGluc2VydGlvbnMoKyksIDI4MyBkZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0 NCB4ZW4vYXJjaC94ODYvcHYvZ3JhbnRfdGFibGUuYwoKZGlmZiAtLWdpdCBhL3hlbi9hcmNoL3g4 Ni9tbS5jIGIveGVuL2FyY2gveDg2L21tLmMKaW5kZXggMjlkOGUxODgxOS4uNjlhNDdkODdkNiAx MDA2NDQKLS0tIGEveGVuL2FyY2gveDg2L21tLmMKKysrIGIveGVuL2FyY2gveDg2L21tLmMKQEAg LTM2MzAsMjg5ICszNjMwLDYgQEAgbG9uZyBkb19tbXVfdXBkYXRlKAogICAgIHJldHVybiByYzsK IH0KIAotc3RhdGljIHVuc2lnbmVkIGludCBncmFudF90b19wdGVfZmxhZ3ModW5zaWduZWQgaW50 IGdyYW50X2ZsYWdzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5z aWduZWQgaW50IGNhY2hlX2ZsYWdzKQotewotICAgIHVuc2lnbmVkIGludCBwdGVfZmxhZ3MgPQot ICAgICAgICBfUEFHRV9QUkVTRU5UIHwgX1BBR0VfQUNDRVNTRUQgfCBfUEFHRV9ESVJUWSB8IF9Q QUdFX0dOVFRBQiB8IF9QQUdFX05YOwotCi0gICAgaWYgKCBncmFudF9mbGFncyAmIEdOVE1BUF9h cHBsaWNhdGlvbl9tYXAgKQotICAgICAgICBwdGVfZmxhZ3MgfD0gX1BBR0VfVVNFUjsKLSAgICBp ZiAoICEoZ3JhbnRfZmxhZ3MgJiBHTlRNQVBfcmVhZG9ubHkpICkKLSAgICAgICAgcHRlX2ZsYWdz IHw9IF9QQUdFX1JXOwotCi0gICAgcHRlX2ZsYWdzIHw9IE1BU0tfSU5TUigoZ3JhbnRfZmxhZ3Mg Pj4gX0dOVE1BUF9ndWVzdF9hdmFpbDApLCBfUEFHRV9BVkFJTCk7Ci0gICAgcHRlX2ZsYWdzIHw9 IGNhY2hlYXR0cl90b19wdGVfZmxhZ3MoY2FjaGVfZmxhZ3MgPj4gNSk7Ci0KLSAgICByZXR1cm4g cHRlX2ZsYWdzOwotfQotCi1pbnQgY3JlYXRlX2dyYW50X3B2X21hcHBpbmcodWludDY0X3QgYWRk ciwgdW5zaWduZWQgbG9uZyBmcmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNp Z25lZCBpbnQgZmxhZ3MsIHVuc2lnbmVkIGludCBjYWNoZV9mbGFncykKLXsKLSAgICBzdHJ1Y3Qg dmNwdSAqY3VyciA9IGN1cnJlbnQ7Ci0gICAgc3RydWN0IGRvbWFpbiAqY3VycmQgPSBjdXJyLT5k b21haW47Ci0gICAgbDFfcGdlbnRyeV90IG5sMWUsIG9sMWUsICpwbDFlOwotICAgIHN0cnVjdCBw YWdlX2luZm8gKnBhZ2U7Ci0gICAgbWZuX3QgZ2wxbWZuOwotICAgIGludCByYyA9IEdOVFNUX2dl bmVyYWxfZXJyb3I7Ci0KLSAgICBubDFlID0gbDFlX2Zyb21fcGZuKGZyYW1lLCBncmFudF90b19w dGVfZmxhZ3MoZmxhZ3MsIGNhY2hlX2ZsYWdzKSk7Ci0gICAgbmwxZSA9IGFkanVzdF9ndWVzdF9s MWUobmwxZSwgY3VycmQpOwotCi0gICAgLyoKLSAgICAgKiBUaGUgbWVhbmluZyBvZiBhZGRyIGRl cGVuZHMgb24gR05UTUFQX2NvbnRhaW5zX3B0ZS4gIEl0IGlzIGVpdGhlciBhCi0gICAgICogbWFj aGluZSBhZGRyZXNzIG9mIGFuIEwxZSB0aGUgZ3Vlc3QgaGFzIG5vbWluYXRlZCB0byBiZSBhbHRl cmVkLCBvciBhCi0gICAgICogbGluZWFyIGFkZHJlc3Mgd2UgbmVlZCB0byBsb29rIHVwIHRoZSBh cHByb3ByaWF0ZSBMMWUgZm9yLgotICAgICAqLwotICAgIGlmICggZmxhZ3MgJiBHTlRNQVBfY29u dGFpbnNfcHRlICkKLSAgICB7Ci0gICAgICAgIC8qIGFkZHIgbXVzdCBiZSBzdWl0YWJseSBhbGln bmVkLCBvciB3ZSB3aWxsIGNvcnJ1cHQgYWRqYWNlbnQgcHRlcy4gKi8KLSAgICAgICAgaWYgKCAh SVNfQUxJR05FRChhZGRyLCBzaXplb2YobmwxZSkpICkKLSAgICAgICAgewotICAgICAgICAgICAg Z2RwcmludGsoWEVOTE9HX1dBUk5JTkcsCi0gICAgICAgICAgICAgICAgICAgICAiTWlzYWxpZ25l ZCBQVEUgYWRkcmVzcyAlIlBSSXg2NCJcbiIsIGFkZHIpOwotICAgICAgICAgICAgZ290byBvdXQ7 Ci0gICAgICAgIH0KLQotICAgICAgICBnbDFtZm4gPSBfbWZuKGFkZHIgPj4gUEFHRV9TSElGVCk7 Ci0KLSAgICAgICAgaWYgKCAhZ2V0X3BhZ2VfZnJvbV9tZm4oZ2wxbWZuLCBjdXJyZCkgKQotICAg ICAgICAgICAgZ290byBvdXQ7Ci0KLSAgICAgICAgcGwxZSA9IG1hcF9kb21haW5fcGFnZShnbDFt Zm4pICsgKGFkZHIgJiB+UEFHRV9NQVNLKTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAg ICAgLyogR3Vlc3QgdHJ5aW5nIHRvIHBhc3MgYW4gb3V0LW9mLXJhbmdlIGxpbmVhciBhZGRyZXNz PyAqLwotICAgICAgICBpZiAoIGlzX3B2XzMyYml0X2RvbWFpbihjdXJyZCkgJiYgYWRkciAhPSAo dWludDMyX3QpYWRkciApCi0gICAgICAgICAgICBnb3RvIG91dDsKLQotICAgICAgICBwbDFlID0g bWFwX2d1ZXN0X2wxZShhZGRyLCAmZ2wxbWZuKTsKLQotICAgICAgICBpZiAoICFwbDFlICkKLSAg ICAgICAgewotICAgICAgICAgICAgZ2RwcmludGsoWEVOTE9HX1dBUk5JTkcsCi0gICAgICAgICAg ICAgICAgICAgICAiQ291bGQgbm90IGZpbmQgTDEgUFRFIGZvciBsaW5lYXIgYWRkcmVzcyAlIlBS SXg2NCJcbiIsCi0gICAgICAgICAgICAgICAgICAgICBhZGRyKTsKLSAgICAgICAgICAgIGdvdG8g b3V0OwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKCAhZ2V0X3BhZ2VfZnJvbV9tZm4oZ2wxbWZu LCBjdXJyZCkgKQotICAgICAgICAgICAgZ290byBvdXRfdW5tYXA7Ci0gICAgfQotCi0gICAgcGFn ZSA9IG1mbl90b19wYWdlKGdsMW1mbik7Ci0gICAgaWYgKCAhcGFnZV9sb2NrKHBhZ2UpICkKLSAg ICAgICAgZ290byBvdXRfcHV0OwotCi0gICAgaWYgKCAocGFnZS0+dS5pbnVzZS50eXBlX2luZm8g JiBQR1RfdHlwZV9tYXNrKSAhPSBQR1RfbDFfcGFnZV90YWJsZSApCi0gICAgICAgIGdvdG8gb3V0 X3VubG9jazsKLQotICAgIG9sMWUgPSAqcGwxZTsKLSAgICBpZiAoIFVQREFURV9FTlRSWShsMSwg cGwxZSwgb2wxZSwgbmwxZSwgbWZuX3goZ2wxbWZuKSwgY3VyciwgMCkgKQotICAgICAgICByYyA9 IEdOVFNUX29rYXk7Ci0KLSBvdXRfdW5sb2NrOgotICAgIHBhZ2VfdW5sb2NrKHBhZ2UpOwotIG91 dF9wdXQ6Ci0gICAgcHV0X3BhZ2UocGFnZSk7Ci0gb3V0X3VubWFwOgotICAgIHVubWFwX2RvbWFp bl9wYWdlKHBsMWUpOwotCi0gICAgaWYgKCByYyA9PSBHTlRTVF9va2F5ICkKLSAgICAgICAgcHV0 X3BhZ2VfZnJvbV9sMWUob2wxZSwgY3VycmQpOwotCi0gb3V0OgotICAgIHJldHVybiByYzsKLX0K LQotLyoKLSAqIFRoaXMgZXhpc3RzIHNvbGV5IGZvciBpbXBsZW1lbnRpbmcgR05UQUJPUF91bm1h cF9hbmRfcmVwbGFjZSwgdGhlIEFCSSBvZgotICogd2hpY2ggaXMgYml6YXJyZS4gIFRoaXMgR05U VEFCT1AgaXNuJ3QgdXNlZCBhbnkgbW9yZSwgYnV0IHdhcyB1c2VkIGJ5Ci0gKiBjbGFzc2ljLXhl biBrZXJuZWxzIGFuZCBQVk9wcyBMaW51eCBiZWZvcmUgdGhlIE0yUF9PVkVSUklERSBpbmZyYXN0 cnVjdHVyZQotICogd2FzIHJlcGxhY2VkIHdpdGggc29tZXRoaW5nIHdoaWNoIGFjdHVhbGx5IHdv cmtlZC4KLSAqCi0gKiBMb29rIHVwIHRoZSBMMWUgbWFwcGluZyBsaW5lYXIsIGFuZCB6YXAgaXQu ICBSZXR1cm4gdGhlIEwxZSB2aWEgKm91dC4KLSAqIFJldHVybnMgYSBib29sZWFuIGluZGljYXRp bmcgc3VjY2Vzcy4gIElmIHN1Y2Nlc3MsIHRoZSBjYWxsZXIgaXMKLSAqIHJlc3BvbnNpYmxlIGZv ciBjYWxsaW5nIHB1dF9wYWdlX2Zyb21fbDFlKCkuCi0gKi8KLXN0YXRpYyBib29sIHN0ZWFsX2xp bmVhcl9hZGRyZXNzKHVuc2lnbmVkIGxvbmcgbGluZWFyLCBsMV9wZ2VudHJ5X3QgKm91dCkKLXsK LSAgICBzdHJ1Y3QgdmNwdSAqY3VyciA9IGN1cnJlbnQ7Ci0gICAgc3RydWN0IGRvbWFpbiAqY3Vy cmQgPSBjdXJyLT5kb21haW47Ci0gICAgbDFfcGdlbnRyeV90ICpwbDFlLCBvbDFlOwotICAgIHN0 cnVjdCBwYWdlX2luZm8gKnBhZ2U7Ci0gICAgbWZuX3QgZ2wxbWZuOwotICAgIGJvb2wgb2theSA9 IGZhbHNlOwotCi0gICAgQVNTRVJUKGlzX3B2X2RvbWFpbihjdXJyZCkpOwotCi0gICAgcGwxZSA9 IG1hcF9ndWVzdF9sMWUobGluZWFyLCAmZ2wxbWZuKTsKLSAgICBpZiAoICFwbDFlICkKLSAgICB7 Ci0gICAgICAgIGdkcHJpbnRrKFhFTkxPR19XQVJOSU5HLAotICAgICAgICAgICAgICAgICAiQ291 bGQgbm90IGZpbmQgTDEgUFRFIGZvciBsaW5lYXIgJSJQUkl4NjQiXG4iLCBsaW5lYXIpOwotICAg ICAgICBnb3RvIG91dDsKLSAgICB9Ci0KLSAgICBpZiAoICFnZXRfcGFnZV9mcm9tX21mbihnbDFt Zm4sIGN1cnJkKSApCi0gICAgICAgIGdvdG8gb3V0X3VubWFwOwotCi0gICAgcGFnZSA9IG1mbl90 b19wYWdlKGdsMW1mbik7Ci0gICAgaWYgKCAhcGFnZV9sb2NrKHBhZ2UpICkKLSAgICAgICAgZ290 byBvdXRfcHV0OwotCi0gICAgaWYgKCAocGFnZS0+dS5pbnVzZS50eXBlX2luZm8gJiBQR1RfdHlw ZV9tYXNrKSAhPSBQR1RfbDFfcGFnZV90YWJsZSApCi0gICAgICAgIGdvdG8gb3V0X3VubG9jazsK LQotICAgIG9sMWUgPSAqcGwxZTsKLSAgICBva2F5ID0gVVBEQVRFX0VOVFJZKGwxLCBwbDFlLCBv bDFlLCBsMWVfZW1wdHkoKSwgbWZuX3goZ2wxbWZuKSwgY3VyciwgMCk7Ci0KLSBvdXRfdW5sb2Nr OgotICAgIHBhZ2VfdW5sb2NrKHBhZ2UpOwotIG91dF9wdXQ6Ci0gICAgcHV0X3BhZ2UocGFnZSk7 Ci0gb3V0X3VubWFwOgotICAgIHVubWFwX2RvbWFpbl9wYWdlKHBsMWUpOwotCi0gICAgaWYgKCBv a2F5ICkKLSAgICAgICAgKm91dCA9IG9sMWU7Ci0KLSBvdXQ6Ci0gICAgcmV0dXJuIG9rYXk7Ci19 Ci0KLS8qCi0gKiBQYXNzaW5nIGEgbmV3X2FkZHIgb2YgemVybyBpcyB0YWtlbiB0byBtZWFuIGRl c3Ryb3kuICBQYXNzaW5nIGEgbm9uLXplcm8KLSAqIG5ld19hZGRyIGhhcyBvbmx5IGV2ZXIgYmVl biBhdmFpbGFibGUgdmlhIEdOVEFCT1BfdW5tYXBfYW5kX3JlcGxhY2UsIGFuZAotICogb25seSB3 aGVuICEoZmxhZ3MgJiBHTlRNQVBfY29udGFpbnNfcHRlKS4KLSAqLwotaW50IHJlcGxhY2VfZ3Jh bnRfcHZfbWFwcGluZyh1aW50NjRfdCBhZGRyLCB1bnNpZ25lZCBsb25nIGZyYW1lLAotICAgICAg ICAgICAgICAgICAgICAgICAgICAgICB1aW50NjRfdCBuZXdfYWRkciwgdW5zaWduZWQgaW50IGZs YWdzKQotewotICAgIHN0cnVjdCB2Y3B1ICpjdXJyID0gY3VycmVudDsKLSAgICBzdHJ1Y3QgZG9t YWluICpjdXJyZCA9IGN1cnItPmRvbWFpbjsKLSAgICBsMV9wZ2VudHJ5X3QgbmwxZSA9IGwxZV9l bXB0eSgpLCBvbDFlLCAqcGwxZTsKLSAgICBzdHJ1Y3QgcGFnZV9pbmZvICpwYWdlOwotICAgIG1m bl90IGdsMW1mbjsKLSAgICBpbnQgcmMgPSBHTlRTVF9nZW5lcmFsX2Vycm9yOwotICAgIHVuc2ln bmVkIGludCBncmFudF9wdGVfZmxhZ3MgPSBncmFudF90b19wdGVfZmxhZ3MoZmxhZ3MsIDApOwot Ci0gICAgLyoKLSAgICAgKiBPbiB0b3Agb2YgdGhlIGV4cGxpY2l0IHNldHRpbmdzIGRvbmUgYnkg Y3JlYXRlX2dyYW50X3B2X21hcHBpbmcoKQotICAgICAqIGFsc28gb3Blbi1jb2RlIHJlbGV2YW50 IHBhcnRzIG9mIGFkanVzdF9ndWVzdF9sMWUoKS4gRG9uJ3QgbWlycm9yCi0gICAgICogYXZhaWxh YmxlIGFuZCBjYWNoYWJpbGl0eSBmbGFncywgdGhvdWdoLgotICAgICAqLwotICAgIGlmICggIWlz X3B2XzMyYml0X2RvbWFpbihjdXJyZCkgKQotICAgICAgICBncmFudF9wdGVfZmxhZ3MgfD0gKGdy YW50X3B0ZV9mbGFncyAmIF9QQUdFX1VTRVIpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICA/ IF9QQUdFX0dMT0JBTAotICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBfUEFHRV9HVUVTVF9L RVJORUwgfCBfUEFHRV9VU0VSOwotCi0gICAgLyoKLSAgICAgKiBhZGRyIGNvbWVzIGZyb20gWGVu J3MgYWN0aXZlX2VudHJ5IHRyYWNraW5nLCBhbmQgd2FzIHVzZWQgc3VjY2Vzc2Z1bGx5Ci0gICAg ICogdG8gY3JlYXRlIGEgZ3JhbnQuCi0gICAgICoKLSAgICAgKiBUaGUgbWVhbmluZyBvZiBhZGRy IGRlcGVuZHMgb24gR05UTUFQX2NvbnRhaW5zX3B0ZS4gIEl0IGlzIGVpdGhlciBhCi0gICAgICog bWFjaGluZSBhZGRyZXNzIG9mIGFuIEwxZSB0aGUgZ3Vlc3QgaGFzIG5vbWluYXRlZCB0byBiZSBh bHRlcmVkLCBvciBhCi0gICAgICogbGluZWFyIGFkZHJlc3Mgd2UgbmVlZCB0byBsb29rIHVwIHRo ZSBhcHByb3ByaWF0ZSBMMWUgZm9yLgotICAgICAqLwotICAgIGlmICggZmxhZ3MgJiBHTlRNQVBf Y29udGFpbnNfcHRlICkKLSAgICB7Ci0gICAgICAgIC8qIFJlcGxhY2Ugbm90IGF2YWlsYWJsZSBp biB0aGlzIGFkZHJlc3NpbmcgbW9kZS4gKi8KLSAgICAgICAgaWYgKCBuZXdfYWRkciApCi0gICAg ICAgICAgICBnb3RvIG91dDsKLQotICAgICAgICAvKiBTYW5pdHkgY2hlY2sgdGhhdCB3ZSB3b24n dCBjbG9iYmVyIHRoZSBwYWdldGFibGUuICovCi0gICAgICAgIGlmICggIUlTX0FMSUdORUQoYWRk ciwgc2l6ZW9mKG5sMWUpKSApCi0gICAgICAgIHsKLSAgICAgICAgICAgIEFTU0VSVF9VTlJFQUNI QUJMRSgpOwotICAgICAgICAgICAgZ290byBvdXQ7Ci0gICAgICAgIH0KLQotICAgICAgICBnbDFt Zm4gPSBfbWZuKGFkZHIgPj4gUEFHRV9TSElGVCk7Ci0KLSAgICAgICAgaWYgKCAhZ2V0X3BhZ2Vf ZnJvbV9tZm4oZ2wxbWZuLCBjdXJyZCkgKQotICAgICAgICAgICAgZ290byBvdXQ7Ci0KLSAgICAg ICAgcGwxZSA9IG1hcF9kb21haW5fcGFnZShnbDFtZm4pICsgKGFkZHIgJiB+UEFHRV9NQVNLKTsK LSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICAgaWYgKCBpc19wdl8zMmJpdF9kb21haW4o Y3VycmQpICkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKCBhZGRyICE9ICh1aW50MzJfdClh ZGRyICkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBBU1NFUlRfVU5SRUFDSEFCTEUo KTsKLSAgICAgICAgICAgICAgICBnb3RvIG91dDsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAg ICAgLyogR3Vlc3QgdHJ5aW5nIHRvIHBhc3MgYW4gb3V0LW9mLXJhbmdlIGxpbmVhciBhZGRyZXNz PyAqLwotICAgICAgICAgICAgaWYgKCBuZXdfYWRkciAhPSAodWludDMyX3QpbmV3X2FkZHIgKQot ICAgICAgICAgICAgICAgIGdvdG8gb3V0OwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKCBuZXdf YWRkciAmJiAhc3RlYWxfbGluZWFyX2FkZHJlc3MobmV3X2FkZHIsICZubDFlKSApCi0gICAgICAg ICAgICBnb3RvIG91dDsKLQotICAgICAgICBwbDFlID0gbWFwX2d1ZXN0X2wxZShhZGRyLCAmZ2wx bWZuKTsKLQotICAgICAgICBpZiAoICFwbDFlICkKLSAgICAgICAgICAgIGdvdG8gb3V0OwotCi0g ICAgICAgIGlmICggIWdldF9wYWdlX2Zyb21fbWZuKGdsMW1mbiwgY3VycmQpICkKLSAgICAgICAg ICAgIGdvdG8gb3V0X3VubWFwOwotICAgIH0KLQotICAgIHBhZ2UgPSBtZm5fdG9fcGFnZShnbDFt Zm4pOwotCi0gICAgaWYgKCAhcGFnZV9sb2NrKHBhZ2UpICkKLSAgICAgICAgZ290byBvdXRfcHV0 OwotCi0gICAgaWYgKCAocGFnZS0+dS5pbnVzZS50eXBlX2luZm8gJiBQR1RfdHlwZV9tYXNrKSAh PSBQR1RfbDFfcGFnZV90YWJsZSApCi0gICAgICAgIGdvdG8gb3V0X3VubG9jazsKLQotICAgIG9s MWUgPSAqcGwxZTsKLQotICAgIC8qCi0gICAgICogQ2hlY2sgdGhhdCB0aGUgYWRkcmVzcyBzdXBw bGllZCBpcyBhY3R1YWxseSBtYXBwZWQgdG8gZnJhbWUgKHdpdGgKLSAgICAgKiBhcHByb3ByaWF0 ZSBwZXJtaXNzaW9ucykuCi0gICAgICovCi0gICAgaWYgKCB1bmxpa2VseShsMWVfZ2V0X3Bmbihv bDFlKSAhPSBmcmFtZSkgfHwKLSAgICAgICAgIHVubGlrZWx5KChsMWVfZ2V0X2ZsYWdzKG9sMWUp IF4gZ3JhbnRfcHRlX2ZsYWdzKSAmCi0gICAgICAgICAgICAgICAgICAoX1BBR0VfUFJFU0VOVCB8 IF9QQUdFX1JXKSkgKQotICAgIHsKLSAgICAgICAgZ2RwcmludGsoWEVOTE9HX0VSUiwKLSAgICAg ICAgICAgICAgICAgIlBURSAlIlBSSXB0ZSIgZm9yICUiUFJJeDY0IiBkb2Vzbid0IG1hdGNoIGdy YW50ICglIlBSSXB0ZSIpXG4iLAotICAgICAgICAgICAgICAgICBsMWVfZ2V0X2ludHB0ZShvbDFl KSwgYWRkciwKLSAgICAgICAgICAgICAgICAgbDFlX2dldF9pbnRwdGUobDFlX2Zyb21fcGZuKGZy YW1lLCBncmFudF9wdGVfZmxhZ3MpKSk7Ci0gICAgICAgIGdvdG8gb3V0X3VubG9jazsKLSAgICB9 Ci0KLSAgICBpZiAoIHVubGlrZWx5KChsMWVfZ2V0X2ZsYWdzKG9sMWUpIF4gZ3JhbnRfcHRlX2Zs YWdzKSAmCi0gICAgICAgICAgICAgICAgICB+KF9QQUdFX0FWQUlMIHwgUEFHRV9DQUNIRV9BVFRS UykpICkKLSAgICAgICAgZ2RwcmludGsoWEVOTE9HX1dBUk5JTkcsCi0gICAgICAgICAgICAgICAg ICJQVEUgZmxhZ3MgJXggZm9yICUiUFJJeDY0IiBkb24ndCBtYXRjaCBncmFudCAoJXgpXG4iLAot ICAgICAgICAgICAgICAgICBsMWVfZ2V0X2ZsYWdzKG9sMWUpLCBhZGRyLCBncmFudF9wdGVfZmxh Z3MpOwotCi0gICAgaWYgKCBVUERBVEVfRU5UUlkobDEsIHBsMWUsIG9sMWUsIG5sMWUsIG1mbl94 KGdsMW1mbiksIGN1cnIsIDApICkKLSAgICAgICAgcmMgPSBHTlRTVF9va2F5OwotCi0gb3V0X3Vu bG9jazoKLSAgICBwYWdlX3VubG9jayhwYWdlKTsKLSBvdXRfcHV0OgotICAgIHB1dF9wYWdlKHBh Z2UpOwotIG91dF91bm1hcDoKLSAgICB1bm1hcF9kb21haW5fcGFnZShwbDFlKTsKLQotIG91dDoK LSAgICAvKiBJZiB0aGVyZSB3YXMgYW4gZXJyb3IsIHdlIGFyZSBzdGlsbCByZXNwb25zaWJsZSBm b3IgdGhlIHN0b2xlbiBwdGUuICovCi0gICAgaWYgKCByYyApCi0gICAgICAgIHB1dF9wYWdlX2Zy b21fbDFlKG5sMWUsIGN1cnJkKTsKLQotICAgIHJldHVybiByYzsKLX0KLQogaW50IGRvbmF0ZV9w YWdlKAogICAgIHN0cnVjdCBkb21haW4gKmQsIHN0cnVjdCBwYWdlX2luZm8gKnBhZ2UsIHVuc2ln bmVkIGludCBtZW1mbGFncykKIHsKZGlmZiAtLWdpdCBhL3hlbi9hcmNoL3g4Ni9wdi9NYWtlZmls ZSBiL3hlbi9hcmNoL3g4Ni9wdi9NYWtlZmlsZQppbmRleCBkNGZjYzJhYjk0Li5hNjkyZWU2NDMy IDEwMDY0NAotLS0gYS94ZW4vYXJjaC94ODYvcHYvTWFrZWZpbGUKKysrIGIveGVuL2FyY2gveDg2 L3B2L01ha2VmaWxlCkBAIC00LDYgKzQsNyBAQCBvYmoteSArPSBlbXVsYXRlLm8KIG9iai15ICs9 IGVtdWwtZ2F0ZS1vcC5vCiBvYmoteSArPSBlbXVsLWludi1vcC5vCiBvYmoteSArPSBlbXVsLXBy aXYtb3Aubworb2JqLXkgKz0gZ3JhbnRfdGFibGUubwogb2JqLXkgKz0gaHlwZXJjYWxsLm8KIG9i ai15ICs9IGlyZXQubwogb2JqLXkgKz0gbWlzYy1oeXBlcmNhbGxzLm8KZGlmZiAtLWdpdCBhL3hl bi9hcmNoL3g4Ni9wdi9ncmFudF90YWJsZS5jIGIveGVuL2FyY2gveDg2L3B2L2dyYW50X3RhYmxl LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMC4uODE5ODhhM2I1NwotLS0g L2Rldi9udWxsCisrKyBiL3hlbi9hcmNoL3g4Ni9wdi9ncmFudF90YWJsZS5jCkBAIC0wLDAgKzEs MzI3IEBACisvKgorICogcHYvZ3JhbnRfdGFibGUuYworICoKKyAqIEdyYW50IHRhYmxlIGludGVy ZmFjZXMgZm9yIFBWIGd1ZXN0cworICoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBXZWkgTGl1IDx3 ZWkubGl1MkBjaXRyaXguY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJl OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUg dGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5z ZSwgdmVyc2lvbiAyLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv bi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp dCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVT UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJs aWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNl aXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3 aXRoIHRoaXMgcHJvZ3JhbTsgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNl cy8+LgorICovCisKKyNpbmNsdWRlIDx4ZW4vdHlwZXMuaD4KKworI2luY2x1ZGUgPHB1YmxpYy9n cmFudF90YWJsZS5oPgorCisjaW5jbHVkZSA8YXNtL3AybS5oPgorI2luY2x1ZGUgPGFzbS9wdi9t bS5oPgorCisjaW5jbHVkZSAibW0uaCIKKworLyogT3ZlcnJpZGUgbWFjcm9zIGZyb20gYXNtL3Bh Z2UuaCB0byBtYWtlIHRoZW0gd29yayB3aXRoIG1mbl90ICovCisjdW5kZWYgbWZuX3RvX3BhZ2UK KyNkZWZpbmUgbWZuX3RvX3BhZ2UobWZuKSBfX21mbl90b19wYWdlKG1mbl94KG1mbikpCisjdW5k ZWYgcGFnZV90b19tZm4KKyNkZWZpbmUgcGFnZV90b19tZm4ocGcpIF9tZm4oX19wYWdlX3RvX21m bihwZykpCisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgZ3JhbnRfdG9fcHRlX2ZsYWdzKHVuc2lnbmVk IGludCBncmFudF9mbGFncywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHVuc2lnbmVkIGludCBjYWNoZV9mbGFncykKK3sKKyAgICB1bnNpZ25lZCBpbnQgcHRlX2ZsYWdz ID0KKyAgICAgICAgX1BBR0VfUFJFU0VOVCB8IF9QQUdFX0FDQ0VTU0VEIHwgX1BBR0VfRElSVFkg fCBfUEFHRV9HTlRUQUIgfCBfUEFHRV9OWDsKKworICAgIGlmICggZ3JhbnRfZmxhZ3MgJiBHTlRN QVBfYXBwbGljYXRpb25fbWFwICkKKyAgICAgICAgcHRlX2ZsYWdzIHw9IF9QQUdFX1VTRVI7Cisg ICAgaWYgKCAhKGdyYW50X2ZsYWdzICYgR05UTUFQX3JlYWRvbmx5KSApCisgICAgICAgIHB0ZV9m bGFncyB8PSBfUEFHRV9SVzsKKworICAgIHB0ZV9mbGFncyB8PSBNQVNLX0lOU1IoKGdyYW50X2Zs YWdzID4+IF9HTlRNQVBfZ3Vlc3RfYXZhaWwwKSwgX1BBR0VfQVZBSUwpOworICAgIHB0ZV9mbGFn cyB8PSBjYWNoZWF0dHJfdG9fcHRlX2ZsYWdzKGNhY2hlX2ZsYWdzID4+IDUpOworCisgICAgcmV0 dXJuIHB0ZV9mbGFnczsKK30KKworaW50IGNyZWF0ZV9ncmFudF9wdl9tYXBwaW5nKHVpbnQ2NF90 IGFkZHIsIHVuc2lnbmVkIGxvbmcgZnJhbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg dW5zaWduZWQgaW50IGZsYWdzLCB1bnNpZ25lZCBpbnQgY2FjaGVfZmxhZ3MpCit7CisgICAgc3Ry dWN0IHZjcHUgKmN1cnIgPSBjdXJyZW50OworICAgIHN0cnVjdCBkb21haW4gKmN1cnJkID0gY3Vy ci0+ZG9tYWluOworICAgIGwxX3BnZW50cnlfdCBubDFlLCBvbDFlLCAqcGwxZTsKKyAgICBzdHJ1 Y3QgcGFnZV9pbmZvICpwYWdlOworICAgIG1mbl90IGdsMW1mbjsKKyAgICBpbnQgcmMgPSBHTlRT VF9nZW5lcmFsX2Vycm9yOworCisgICAgbmwxZSA9IGwxZV9mcm9tX3BmbihmcmFtZSwgZ3JhbnRf dG9fcHRlX2ZsYWdzKGZsYWdzLCBjYWNoZV9mbGFncykpOworICAgIG5sMWUgPSBhZGp1c3RfZ3Vl c3RfbDFlKG5sMWUsIGN1cnJkKTsKKworICAgIC8qCisgICAgICogVGhlIG1lYW5pbmcgb2YgYWRk ciBkZXBlbmRzIG9uIEdOVE1BUF9jb250YWluc19wdGUuICBJdCBpcyBlaXRoZXIgYQorICAgICAq IG1hY2hpbmUgYWRkcmVzcyBvZiBhbiBMMWUgdGhlIGd1ZXN0IGhhcyBub21pbmF0ZWQgdG8gYmUg YWx0ZXJlZCwgb3IgYQorICAgICAqIGxpbmVhciBhZGRyZXNzIHdlIG5lZWQgdG8gbG9vayB1cCB0 aGUgYXBwcm9wcmlhdGUgTDFlIGZvci4KKyAgICAgKi8KKyAgICBpZiAoIGZsYWdzICYgR05UTUFQ X2NvbnRhaW5zX3B0ZSApCisgICAgeworICAgICAgICAvKiBhZGRyIG11c3QgYmUgc3VpdGFibHkg YWxpZ25lZCwgb3Igd2Ugd2lsbCBjb3JydXB0IGFkamFjZW50IHB0ZXMuICovCisgICAgICAgIGlm ICggIUlTX0FMSUdORUQoYWRkciwgc2l6ZW9mKG5sMWUpKSApCisgICAgICAgIHsKKyAgICAgICAg ICAgIGdkcHJpbnRrKFhFTkxPR19XQVJOSU5HLAorICAgICAgICAgICAgICAgICAgICAgIk1pc2Fs aWduZWQgUFRFIGFkZHJlc3MgJSJQUkl4NjQiXG4iLCBhZGRyKTsKKyAgICAgICAgICAgIGdvdG8g b3V0OworICAgICAgICB9CisKKyAgICAgICAgZ2wxbWZuID0gX21mbihhZGRyID4+IFBBR0VfU0hJ RlQpOworCisgICAgICAgIGlmICggIWdldF9wYWdlX2Zyb21fbWZuKGdsMW1mbiwgY3VycmQpICkK KyAgICAgICAgICAgIGdvdG8gb3V0OworCisgICAgICAgIHBsMWUgPSBtYXBfZG9tYWluX3BhZ2Uo Z2wxbWZuKSArIChhZGRyICYgflBBR0VfTUFTSyk7CisgICAgfQorICAgIGVsc2UKKyAgICB7Cisg ICAgICAgIC8qIEd1ZXN0IHRyeWluZyB0byBwYXNzIGFuIG91dC1vZi1yYW5nZSBsaW5lYXIgYWRk cmVzcz8gKi8KKyAgICAgICAgaWYgKCBpc19wdl8zMmJpdF9kb21haW4oY3VycmQpICYmIGFkZHIg IT0gKHVpbnQzMl90KWFkZHIgKQorICAgICAgICAgICAgZ290byBvdXQ7CisKKyAgICAgICAgcGwx ZSA9IG1hcF9ndWVzdF9sMWUoYWRkciwgJmdsMW1mbik7CisKKyAgICAgICAgaWYgKCAhcGwxZSAp CisgICAgICAgIHsKKyAgICAgICAgICAgIGdkcHJpbnRrKFhFTkxPR19XQVJOSU5HLAorICAgICAg ICAgICAgICAgICAgICAgIkNvdWxkIG5vdCBmaW5kIEwxIFBURSBmb3IgbGluZWFyIGFkZHJlc3Mg JSJQUkl4NjQiXG4iLAorICAgICAgICAgICAgICAgICAgICAgYWRkcik7CisgICAgICAgICAgICBn b3RvIG91dDsKKyAgICAgICAgfQorCisgICAgICAgIGlmICggIWdldF9wYWdlX2Zyb21fbWZuKGds MW1mbiwgY3VycmQpICkKKyAgICAgICAgICAgIGdvdG8gb3V0X3VubWFwOworICAgIH0KKworICAg IHBhZ2UgPSBtZm5fdG9fcGFnZShnbDFtZm4pOworICAgIGlmICggIXBhZ2VfbG9jayhwYWdlKSAp CisgICAgICAgIGdvdG8gb3V0X3B1dDsKKworICAgIGlmICggKHBhZ2UtPnUuaW51c2UudHlwZV9p bmZvICYgUEdUX3R5cGVfbWFzaykgIT0gUEdUX2wxX3BhZ2VfdGFibGUgKQorICAgICAgICBnb3Rv IG91dF91bmxvY2s7CisKKyAgICBvbDFlID0gKnBsMWU7CisgICAgaWYgKCBVUERBVEVfRU5UUlko bDEsIHBsMWUsIG9sMWUsIG5sMWUsIG1mbl94KGdsMW1mbiksIGN1cnIsIDApICkKKyAgICAgICAg cmMgPSBHTlRTVF9va2F5OworCisgb3V0X3VubG9jazoKKyAgICBwYWdlX3VubG9jayhwYWdlKTsK KyBvdXRfcHV0OgorICAgIHB1dF9wYWdlKHBhZ2UpOworIG91dF91bm1hcDoKKyAgICB1bm1hcF9k b21haW5fcGFnZShwbDFlKTsKKworICAgIGlmICggcmMgPT0gR05UU1Rfb2theSApCisgICAgICAg IHB1dF9wYWdlX2Zyb21fbDFlKG9sMWUsIGN1cnJkKTsKKworIG91dDoKKyAgICByZXR1cm4gcmM7 Cit9CisKKy8qCisgKiBUaGlzIGV4aXN0cyBzb2xleSBmb3IgaW1wbGVtZW50aW5nIEdOVEFCT1Bf dW5tYXBfYW5kX3JlcGxhY2UsIHRoZSBBQkkgb2YKKyAqIHdoaWNoIGlzIGJpemFycmUuICBUaGlz IEdOVFRBQk9QIGlzbid0IHVzZWQgYW55IG1vcmUsIGJ1dCB3YXMgdXNlZCBieQorICogY2xhc3Np Yy14ZW4ga2VybmVscyBhbmQgUFZPcHMgTGludXggYmVmb3JlIHRoZSBNMlBfT1ZFUlJJREUgaW5m cmFzdHJ1Y3R1cmUKKyAqIHdhcyByZXBsYWNlZCB3aXRoIHNvbWV0aGluZyB3aGljaCBhY3R1YWxs eSB3b3JrZWQuCisgKgorICogTG9vayB1cCB0aGUgTDFlIG1hcHBpbmcgbGluZWFyLCBhbmQgemFw IGl0LiAgUmV0dXJuIHRoZSBMMWUgdmlhICpvdXQuCisgKiBSZXR1cm5zIGEgYm9vbGVhbiBpbmRp Y2F0aW5nIHN1Y2Nlc3MuICBJZiBzdWNjZXNzLCB0aGUgY2FsbGVyIGlzCisgKiByZXNwb25zaWJs ZSBmb3IgY2FsbGluZyBwdXRfcGFnZV9mcm9tX2wxZSgpLgorICovCitzdGF0aWMgYm9vbCBzdGVh bF9saW5lYXJfYWRkcmVzcyh1bnNpZ25lZCBsb25nIGxpbmVhciwgbDFfcGdlbnRyeV90ICpvdXQp Cit7CisgICAgc3RydWN0IHZjcHUgKmN1cnIgPSBjdXJyZW50OworICAgIHN0cnVjdCBkb21haW4g KmN1cnJkID0gY3Vyci0+ZG9tYWluOworICAgIGwxX3BnZW50cnlfdCAqcGwxZSwgb2wxZTsKKyAg ICBzdHJ1Y3QgcGFnZV9pbmZvICpwYWdlOworICAgIG1mbl90IGdsMW1mbjsKKyAgICBib29sIG9r YXkgPSBmYWxzZTsKKworICAgIEFTU0VSVChpc19wdl9kb21haW4oY3VycmQpKTsKKworICAgIHBs MWUgPSBtYXBfZ3Vlc3RfbDFlKGxpbmVhciwgJmdsMW1mbik7CisgICAgaWYgKCAhcGwxZSApCisg ICAgeworICAgICAgICBnZHByaW50ayhYRU5MT0dfV0FSTklORywKKyAgICAgICAgICAgICAgICAg IkNvdWxkIG5vdCBmaW5kIEwxIFBURSBmb3IgbGluZWFyICUiUFJJeDY0IlxuIiwgbGluZWFyKTsK KyAgICAgICAgZ290byBvdXQ7CisgICAgfQorCisgICAgaWYgKCAhZ2V0X3BhZ2VfZnJvbV9tZm4o Z2wxbWZuLCBjdXJyZCkgKQorICAgICAgICBnb3RvIG91dF91bm1hcDsKKworICAgIHBhZ2UgPSBt Zm5fdG9fcGFnZShnbDFtZm4pOworICAgIGlmICggIXBhZ2VfbG9jayhwYWdlKSApCisgICAgICAg IGdvdG8gb3V0X3B1dDsKKworICAgIGlmICggKHBhZ2UtPnUuaW51c2UudHlwZV9pbmZvICYgUEdU X3R5cGVfbWFzaykgIT0gUEdUX2wxX3BhZ2VfdGFibGUgKQorICAgICAgICBnb3RvIG91dF91bmxv Y2s7CisKKyAgICBvbDFlID0gKnBsMWU7CisgICAgb2theSA9IFVQREFURV9FTlRSWShsMSwgcGwx ZSwgb2wxZSwgbDFlX2VtcHR5KCksIG1mbl94KGdsMW1mbiksIGN1cnIsIDApOworCisgb3V0X3Vu bG9jazoKKyAgICBwYWdlX3VubG9jayhwYWdlKTsKKyBvdXRfcHV0OgorICAgIHB1dF9wYWdlKHBh Z2UpOworIG91dF91bm1hcDoKKyAgICB1bm1hcF9kb21haW5fcGFnZShwbDFlKTsKKworICAgIGlm ICggb2theSApCisgICAgICAgICpvdXQgPSBvbDFlOworCisgb3V0OgorICAgIHJldHVybiBva2F5 OworfQorCisvKgorICogUGFzc2luZyBhIG5ld19hZGRyIG9mIHplcm8gaXMgdGFrZW4gdG8gbWVh biBkZXN0cm95LiAgUGFzc2luZyBhIG5vbi16ZXJvCisgKiBuZXdfYWRkciBoYXMgb25seSBldmVy IGJlZW4gYXZhaWxhYmxlIHZpYSBHTlRBQk9QX3VubWFwX2FuZF9yZXBsYWNlLCBhbmQKKyAqIG9u bHkgd2hlbiAhKGZsYWdzICYgR05UTUFQX2NvbnRhaW5zX3B0ZSkuCisgKi8KK2ludCByZXBsYWNl X2dyYW50X3B2X21hcHBpbmcodWludDY0X3QgYWRkciwgdW5zaWduZWQgbG9uZyBmcmFtZSwKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDY0X3QgbmV3X2FkZHIsIHVuc2lnbmVkIGlu dCBmbGFncykKK3sKKyAgICBzdHJ1Y3QgdmNwdSAqY3VyciA9IGN1cnJlbnQ7CisgICAgc3RydWN0 IGRvbWFpbiAqY3VycmQgPSBjdXJyLT5kb21haW47CisgICAgbDFfcGdlbnRyeV90IG5sMWUgPSBs MWVfZW1wdHkoKSwgb2wxZSwgKnBsMWU7CisgICAgc3RydWN0IHBhZ2VfaW5mbyAqcGFnZTsKKyAg ICBtZm5fdCBnbDFtZm47CisgICAgaW50IHJjID0gR05UU1RfZ2VuZXJhbF9lcnJvcjsKKyAgICB1 bnNpZ25lZCBpbnQgZ3JhbnRfcHRlX2ZsYWdzID0gZ3JhbnRfdG9fcHRlX2ZsYWdzKGZsYWdzLCAw KTsKKworICAgIC8qCisgICAgICogT24gdG9wIG9mIHRoZSBleHBsaWNpdCBzZXR0aW5ncyBkb25l IGJ5IGNyZWF0ZV9ncmFudF9wdl9tYXBwaW5nKCkKKyAgICAgKiBhbHNvIG9wZW4tY29kZSByZWxl dmFudCBwYXJ0cyBvZiBhZGp1c3RfZ3Vlc3RfbDFlKCkuIERvbid0IG1pcnJvcgorICAgICAqIGF2 YWlsYWJsZSBhbmQgY2FjaGFiaWxpdHkgZmxhZ3MsIHRob3VnaC4KKyAgICAgKi8KKyAgICBpZiAo ICFpc19wdl8zMmJpdF9kb21haW4oY3VycmQpICkKKyAgICAgICAgZ3JhbnRfcHRlX2ZsYWdzIHw9 IChncmFudF9wdGVfZmxhZ3MgJiBfUEFHRV9VU0VSKQorICAgICAgICAgICAgICAgICAgICAgICAg ICAgPyBfUEFHRV9HTE9CQUwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIDogX1BBR0VfR1VF U1RfS0VSTkVMIHwgX1BBR0VfVVNFUjsKKworICAgIC8qCisgICAgICogYWRkciBjb21lcyBmcm9t IFhlbidzIGFjdGl2ZV9lbnRyeSB0cmFja2luZywgYW5kIHdhcyB1c2VkIHN1Y2Nlc3NmdWxseQor ICAgICAqIHRvIGNyZWF0ZSBhIGdyYW50LgorICAgICAqCisgICAgICogVGhlIG1lYW5pbmcgb2Yg YWRkciBkZXBlbmRzIG9uIEdOVE1BUF9jb250YWluc19wdGUuICBJdCBpcyBlaXRoZXIgYQorICAg ICAqIG1hY2hpbmUgYWRkcmVzcyBvZiBhbiBMMWUgdGhlIGd1ZXN0IGhhcyBub21pbmF0ZWQgdG8g YmUgYWx0ZXJlZCwgb3IgYQorICAgICAqIGxpbmVhciBhZGRyZXNzIHdlIG5lZWQgdG8gbG9vayB1 cCB0aGUgYXBwcm9wcmlhdGUgTDFlIGZvci4KKyAgICAgKi8KKyAgICBpZiAoIGZsYWdzICYgR05U TUFQX2NvbnRhaW5zX3B0ZSApCisgICAgeworICAgICAgICAvKiBSZXBsYWNlIG5vdCBhdmFpbGFi bGUgaW4gdGhpcyBhZGRyZXNzaW5nIG1vZGUuICovCisgICAgICAgIGlmICggbmV3X2FkZHIgKQor ICAgICAgICAgICAgZ290byBvdXQ7CisKKyAgICAgICAgLyogU2FuaXR5IGNoZWNrIHRoYXQgd2Ug d29uJ3QgY2xvYmJlciB0aGUgcGFnZXRhYmxlLiAqLworICAgICAgICBpZiAoICFJU19BTElHTkVE KGFkZHIsIHNpemVvZihubDFlKSkgKQorICAgICAgICB7CisgICAgICAgICAgICBBU1NFUlRfVU5S RUFDSEFCTEUoKTsKKyAgICAgICAgICAgIGdvdG8gb3V0OworICAgICAgICB9CisKKyAgICAgICAg Z2wxbWZuID0gX21mbihhZGRyID4+IFBBR0VfU0hJRlQpOworCisgICAgICAgIGlmICggIWdldF9w YWdlX2Zyb21fbWZuKGdsMW1mbiwgY3VycmQpICkKKyAgICAgICAgICAgIGdvdG8gb3V0OworCisg ICAgICAgIHBsMWUgPSBtYXBfZG9tYWluX3BhZ2UoZ2wxbWZuKSArIChhZGRyICYgflBBR0VfTUFT Syk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGlmICggaXNfcHZfMzJiaXRfZG9t YWluKGN1cnJkKSApCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmICggYWRkciAhPSAodWludDMy X3QpYWRkciApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgQVNTRVJUX1VOUkVBQ0hB QkxFKCk7CisgICAgICAgICAgICAgICAgZ290byBvdXQ7CisgICAgICAgICAgICB9CisKKyAgICAg ICAgICAgIC8qIEd1ZXN0IHRyeWluZyB0byBwYXNzIGFuIG91dC1vZi1yYW5nZSBsaW5lYXIgYWRk cmVzcz8gKi8KKyAgICAgICAgICAgIGlmICggbmV3X2FkZHIgIT0gKHVpbnQzMl90KW5ld19hZGRy ICkKKyAgICAgICAgICAgICAgICBnb3RvIG91dDsKKyAgICAgICAgfQorCisgICAgICAgIGlmICgg bmV3X2FkZHIgJiYgIXN0ZWFsX2xpbmVhcl9hZGRyZXNzKG5ld19hZGRyLCAmbmwxZSkgKQorICAg ICAgICAgICAgZ290byBvdXQ7CisKKyAgICAgICAgcGwxZSA9IG1hcF9ndWVzdF9sMWUoYWRkciwg JmdsMW1mbik7CisKKyAgICAgICAgaWYgKCAhcGwxZSApCisgICAgICAgICAgICBnb3RvIG91dDsK KworICAgICAgICBpZiAoICFnZXRfcGFnZV9mcm9tX21mbihnbDFtZm4sIGN1cnJkKSApCisgICAg ICAgICAgICBnb3RvIG91dF91bm1hcDsKKyAgICB9CisKKyAgICBwYWdlID0gbWZuX3RvX3BhZ2Uo Z2wxbWZuKTsKKworICAgIGlmICggIXBhZ2VfbG9jayhwYWdlKSApCisgICAgICAgIGdvdG8gb3V0 X3B1dDsKKworICAgIGlmICggKHBhZ2UtPnUuaW51c2UudHlwZV9pbmZvICYgUEdUX3R5cGVfbWFz aykgIT0gUEdUX2wxX3BhZ2VfdGFibGUgKQorICAgICAgICBnb3RvIG91dF91bmxvY2s7CisKKyAg ICBvbDFlID0gKnBsMWU7CisKKyAgICAvKgorICAgICAqIENoZWNrIHRoYXQgdGhlIGFkZHJlc3Mg c3VwcGxpZWQgaXMgYWN0dWFsbHkgbWFwcGVkIHRvIGZyYW1lICh3aXRoCisgICAgICogYXBwcm9w cmlhdGUgcGVybWlzc2lvbnMpLgorICAgICAqLworICAgIGlmICggdW5saWtlbHkobDFlX2dldF9w Zm4ob2wxZSkgIT0gZnJhbWUpIHx8CisgICAgICAgICB1bmxpa2VseSgobDFlX2dldF9mbGFncyhv bDFlKSBeIGdyYW50X3B0ZV9mbGFncykgJgorICAgICAgICAgICAgICAgICAgKF9QQUdFX1BSRVNF TlQgfCBfUEFHRV9SVykpICkKKyAgICB7CisgICAgICAgIGdkcHJpbnRrKFhFTkxPR19FUlIsCisg ICAgICAgICAgICAgICAgICJQVEUgJSJQUklwdGUiIGZvciAlIlBSSXg2NCIgZG9lc24ndCBtYXRj aCBncmFudCAoJSJQUklwdGUiKVxuIiwKKyAgICAgICAgICAgICAgICAgbDFlX2dldF9pbnRwdGUo b2wxZSksIGFkZHIsCisgICAgICAgICAgICAgICAgIGwxZV9nZXRfaW50cHRlKGwxZV9mcm9tX3Bm bihmcmFtZSwgZ3JhbnRfcHRlX2ZsYWdzKSkpOworICAgICAgICBnb3RvIG91dF91bmxvY2s7Cisg ICAgfQorCisgICAgaWYgKCB1bmxpa2VseSgobDFlX2dldF9mbGFncyhvbDFlKSBeIGdyYW50X3B0 ZV9mbGFncykgJgorICAgICAgICAgICAgICAgICAgfihfUEFHRV9BVkFJTCB8IFBBR0VfQ0FDSEVf QVRUUlMpKSApCisgICAgICAgIGdkcHJpbnRrKFhFTkxPR19XQVJOSU5HLAorICAgICAgICAgICAg ICAgICAiUFRFIGZsYWdzICV4IGZvciAlIlBSSXg2NCIgZG9uJ3QgbWF0Y2ggZ3JhbnQgKCV4KVxu IiwKKyAgICAgICAgICAgICAgICAgbDFlX2dldF9mbGFncyhvbDFlKSwgYWRkciwgZ3JhbnRfcHRl X2ZsYWdzKTsKKworICAgIGlmICggVVBEQVRFX0VOVFJZKGwxLCBwbDFlLCBvbDFlLCBubDFlLCBt Zm5feChnbDFtZm4pLCBjdXJyLCAwKSApCisgICAgICAgIHJjID0gR05UU1Rfb2theTsKKworIG91 dF91bmxvY2s6CisgICAgcGFnZV91bmxvY2socGFnZSk7Cisgb3V0X3B1dDoKKyAgICBwdXRfcGFn ZShwYWdlKTsKKyBvdXRfdW5tYXA6CisgICAgdW5tYXBfZG9tYWluX3BhZ2UocGwxZSk7CisKKyBv dXQ6CisgICAgLyogSWYgdGhlcmUgd2FzIGFuIGVycm9yLCB3ZSBhcmUgc3RpbGwgcmVzcG9uc2li bGUgZm9yIHRoZSBzdG9sZW4gcHRlLiAqLworICAgIGlmICggcmMgKQorICAgICAgICBwdXRfcGFn ZV9mcm9tX2wxZShubDFlLCBjdXJyZCk7CisKKyAgICByZXR1cm4gcmM7Cit9CisKKy8qCisgKiBM b2NhbCB2YXJpYWJsZXM6CisgKiBtb2RlOiBDCisgKiBjLWZpbGUtc3R5bGU6ICJCU0QiCisgKiBj LWJhc2ljLW9mZnNldDogNAorICogdGFiLXdpZHRoOiA0CisgKiBpbmRlbnQtdGFicy1tb2RlOiBu aWwKKyAqIEVuZDoKKyAqLwotLSAKMi4xMS4wCgoKX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX18KWGVuLWRldmVsIG1haWxpbmcgbGlzdApYZW4tZGV2ZWxAbGlz dHMueGVuLm9yZwpodHRwczovL2xpc3RzLnhlbi5vcmcveGVuLWRldmVsCg==