From mboxrd@z Thu Jan 1 00:00:00 1970 From: Yu Zhang Subject: [PATCH 1/3] Add new functions to get/set memory types. Date: Wed, 16 Mar 2016 20:21:11 +0800 Message-ID: <1458130871-30028-1-git-send-email-yu.c.zhang@linux.intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" To: xen-devel@lists.xen.org Cc: kevin.tian@intel.com, keir@xen.org, andrew.cooper3@citrix.com, Paul.Durrant@citrix.com, zhiyuan.lv@intel.com, jbeulich@suse.com List-Id: xen-devel@lists.xenproject.org Rm9yIGNsYXJpdHkgdGhpcyBwYXRjaCBicmVha3MgdGhlIGNvZGUgdG8gc2V0L2dldCBtZW1vcnkg dHlwZXMgb3V0Cm9mIGRvX2h2bV9vcCgpIGludG8gZGVkaWNhdGVkIGZ1bmN0aW9uczogaHZtb3Bf c2V0L2dldF9tZW1fdHlwZSgpLgpBbHNvLCBmb3IgY2xhcml0eSwgY2hlY2tzIGZvciB3aGV0aGVy IGEgbWVtb3J5IHR5cGUgY2hhbmdlIGlzIGFsbG93ZWQKYXJlIGJyb2tlbiBvdXQgaW50byBhIHNl cGFyYXRlIGZ1bmN0aW9uIGNhbGxlZCBieSBodm1vcF9zZXRfbWVtX3R5cGUoKS4KClRoZXJlIGlz IG5vIGludGVudGlvbmFsIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoaXMgcGF0Y2guCgpTaWduZWQt b2ZmLWJ5OiBQYXVsIER1cnJhbnQgPHBhdWwuZHVycmFudEBjaXRyaXguY29tPgpTaWduZWQtb2Zm LWJ5OiBZdSBaaGFuZyA8eXUuYy56aGFuZ0BsaW51eC5pbnRlbC5jb20+Ci0tLQogeGVuL2FyY2gv eDg2L2h2bS9odm0uYyB8IDI4MCArKysrKysrKysrKysrKysrKysrKysrKysrKystLS0tLS0tLS0t LS0tLS0tLS0tLS0tCiAxIGZpbGUgY2hhbmdlZCwgMTU1IGluc2VydGlvbnMoKyksIDEyNSBkZWxl dGlvbnMoLSkKCmRpZmYgLS1naXQgYS94ZW4vYXJjaC94ODYvaHZtL2h2bS5jIGIveGVuL2FyY2gv eDg2L2h2bS9odm0uYwppbmRleCAyNTVhMWQ2Li4zY2NkMzNmIDEwMDY0NAotLS0gYS94ZW4vYXJj aC94ODYvaHZtL2h2bS5jCisrKyBiL3hlbi9hcmNoL3g4Ni9odm0vaHZtLmMKQEAgLTY1NTcsNiAr NjU1Nyw1NyBAQCBzdGF0aWMgaW50IGRvX2FsdHAybV9vcCgKICAgICByZXR1cm4gcmM7CiB9CiAK K3N0YXRpYyBpbnQgaHZtb3BfZ2V0X21lbV90eXBlKAorICAgIFhFTl9HVUVTVF9IQU5ETEVfUEFS QU0oeGVuX2h2bV9nZXRfbWVtX3R5cGVfdCkgYXJnKQoreworICAgIHN0cnVjdCB4ZW5faHZtX2dl dF9tZW1fdHlwZSBhOworICAgIHN0cnVjdCBkb21haW4gKmQ7CisgICAgcDJtX3R5cGVfdCB0Owor ICAgIGludCByYzsKKworICAgIGlmICggY29weV9mcm9tX2d1ZXN0KCZhLCBhcmcsIDEpICkKKyAg ICAgICAgcmV0dXJuIC1FRkFVTFQ7CisKKyAgICBkID0gcmN1X2xvY2tfZG9tYWluX2J5X2FueV9p ZChhLmRvbWlkKTsKKyAgICBpZiAoIGQgPT0gTlVMTCApCisgICAgICAgIHJldHVybiAtRVNSQ0g7 CisKKyAgICByYyA9IHhzbV9odm1fcGFyYW0oWFNNX1RBUkdFVCwgZCwgSFZNT1BfZ2V0X21lbV90 eXBlKTsKKyAgICBpZiAoIHJjICkKKyAgICAgICAgZ290byBvdXQ7CisKKyAgICByYyA9IC1FSU5W QUw7CisgICAgaWYgKCBpc19odm1fZG9tYWluKGQpICkKKyAgICB7CisgICAgICAgIC8qCisgICAg ICAgICAqIFVzZSBnZXRfZ2ZuIHF1ZXJ5IGFzIHdlIGFyZSBpbnRlcmVzdGVkIGluIHRoZSBjdXJy ZW50CisgICAgICAgICAqIHR5cGUsIG5vdCBpbiBhbGxvY2F0aW5nIG9yIHVuc2hhcmluZy4gVGhh dCdsbCBoYXBwZW4KKyAgICAgICAgICogb24gYWNjZXNzLgorICAgICAgICAgKi8KKyAgICAgICAg Z2V0X2dmbl9xdWVyeV91bmxvY2tlZChkLCBhLnBmbiwgJnQpOworICAgICAgICBpZiAoIHAybV9p c19tbWlvKHQpICkKKyAgICAgICAgICAgIGEubWVtX3R5cGUgPSAgSFZNTUVNX21taW9fZG07Cisg ICAgICAgIGVsc2UgaWYgKCB0ID09IHAybV9tbWlvX3dyaXRlX2RtICkKKyAgICAgICAgICAgIGEu bWVtX3R5cGUgPSBIVk1NRU1fbW1pb193cml0ZV9kbTsKKyAgICAgICAgZWxzZSBpZiAoIHAybV9p c19yZWFkb25seSh0KSApCisgICAgICAgICAgICBhLm1lbV90eXBlID0gIEhWTU1FTV9yYW1fcm87 CisgICAgICAgIGVsc2UgaWYgKCBwMm1faXNfcmFtKHQpICkKKyAgICAgICAgICAgIGEubWVtX3R5 cGUgPSAgSFZNTUVNX3JhbV9ydzsKKyAgICAgICAgZWxzZSBpZiAoIHAybV9pc19wb2QodCkgKQor ICAgICAgICAgICAgYS5tZW1fdHlwZSA9ICBIVk1NRU1fcmFtX3J3OworICAgICAgICBlbHNlIGlm ICggcDJtX2lzX2dyYW50KHQpICkKKyAgICAgICAgICAgIGEubWVtX3R5cGUgPSAgSFZNTUVNX3Jh bV9ydzsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgYS5tZW1fdHlwZSA9ICBIVk1NRU1fbW1p b19kbTsKKyAgICAgICAgcmMgPSBfX2NvcHlfdG9fZ3Vlc3QoYXJnLCAmYSwgMSkgPyAtRUZBVUxU IDogMDsKKyAgICB9CisKKyBvdXQ6CisgICAgcmN1X3VubG9ja19kb21haW4oZCk7CisKKyAgICBy ZXR1cm4gcmM7Cit9CisKIC8qCiAgKiBOb3RlIHRoYXQgdGhpcyB2YWx1ZSBpcyBlZmZlY3RpdmVs eSBwYXJ0IG9mIHRoZSBBQkksIGV2ZW4gaWYgd2UgZG9uJ3QgbmVlZAogICogdG8gbWFrZSBpdCBh IGZvcm1hbCBwYXJ0IG9mIGl0OiBBIGd1ZXN0IHN1c3BlbmRlZCBmb3IgbWlncmF0aW9uIGluIHRo ZQpAQCAtNjU2NSw2ICs2NjE2LDEwNSBAQCBzdGF0aWMgaW50IGRvX2FsdHAybV9vcCgKICAqLwog I2RlZmluZSBIVk1PUF9vcF9tYXNrIDB4ZmYKIAorc3RhdGljIGJvb2xfdCBodm1fYWxsb3dfcDJt X3R5cGVfY2hhbmdlKHAybV90eXBlX3Qgb2xkLCBwMm1fdHlwZV90IG5ldykKK3sKKyAgICBpZiAo IHAybV9pc19yYW0ob2xkKSB8fAorICAgICAgICAgKHAybV9pc19ob2xlKG9sZCkgJiYgbmV3ID09 IHAybV9tbWlvX2RtKSB8fAorICAgICAgICAgKG9sZCA9PSBwMm1fbW1pb193cml0ZV9kbSAmJiBu ZXcgPT0gcDJtX3JhbV9ydykgKQorICAgICAgICByZXR1cm4gMTsKKworICAgIHJldHVybiAwOwor fQorCitzdGF0aWMgaW50IGh2bW9wX3NldF9tZW1fdHlwZSgKKyAgICBYRU5fR1VFU1RfSEFORExF X1BBUkFNKHhlbl9odm1fc2V0X21lbV90eXBlX3QpIGFyZywKKyAgICB1bnNpZ25lZCBsb25nICpp dGVyKQoreworICAgIHVuc2lnbmVkIGxvbmcgc3RhcnRfaXRlciA9ICppdGVyOworICAgIHN0cnVj dCB4ZW5faHZtX3NldF9tZW1fdHlwZSBhOworICAgIHN0cnVjdCBkb21haW4gKmQ7CisgICAgaW50 IHJjOworCisgICAgLyogSW50ZXJmYWNlIHR5cGVzIHRvIGludGVybmFsIHAybSB0eXBlcyAqLwor ICAgIHN0YXRpYyBjb25zdCBwMm1fdHlwZV90IG1lbXR5cGVbXSA9IHsKKyAgICAgICAgW0hWTU1F TV9yYW1fcnddICA9IHAybV9yYW1fcncsCisgICAgICAgIFtIVk1NRU1fcmFtX3JvXSAgPSBwMm1f cmFtX3JvLAorICAgICAgICBbSFZNTUVNX21taW9fZG1dID0gcDJtX21taW9fZG0sCisgICAgICAg IFtIVk1NRU1fbW1pb193cml0ZV9kbV0gPSBwMm1fbW1pb193cml0ZV9kbQorICAgIH07CisKKyAg ICBpZiAoIGNvcHlfZnJvbV9ndWVzdCgmYSwgYXJnLCAxKSApCisgICAgICAgIHJldHVybiAtRUZB VUxUOworCisgICAgcmMgPSByY3VfbG9ja19yZW1vdGVfZG9tYWluX2J5X2lkKGEuZG9taWQsICZk KTsKKyAgICBpZiAoIHJjICE9IDAgKQorICAgICAgICByZXR1cm4gcmM7CisKKyAgICByYyA9IC1F SU5WQUw7CisgICAgaWYgKCAhaXNfaHZtX2RvbWFpbihkKSApCisgICAgICAgIGdvdG8gb3V0Owor CisgICAgcmMgPSB4c21faHZtX2NvbnRyb2woWFNNX0RNX1BSSVYsIGQsIEhWTU9QX3NldF9tZW1f dHlwZSk7CisgICAgaWYgKCByYyApCisgICAgICAgIGdvdG8gb3V0OworCisgICAgcmMgPSAtRUlO VkFMOworICAgIGlmICggYS5uciA8IHN0YXJ0X2l0ZXIgfHwKKyAgICAgICAgICgoYS5maXJzdF9w Zm4gKyBhLm5yIC0gMSkgPCBhLmZpcnN0X3BmbikgfHwKKyAgICAgICAgICgoYS5maXJzdF9wZm4g KyBhLm5yIC0gMSkgPiBkb21haW5fZ2V0X21heGltdW1fZ3BmbihkKSkgKQorICAgICAgICBnb3Rv IG91dDsKKworICAgIGlmICggYS5odm1tZW1fdHlwZSA+PSBBUlJBWV9TSVpFKG1lbXR5cGUpICkK KyAgICAgICAgZ290byBvdXQ7CisKKyAgICB3aGlsZSAoIGEubnIgPiBzdGFydF9pdGVyICkKKyAg ICB7CisgICAgICAgIHVuc2lnbmVkIGxvbmcgcGZuID0gYS5maXJzdF9wZm4gKyBzdGFydF9pdGVy OworICAgICAgICBwMm1fdHlwZV90IHQ7CisKKyAgICAgICAgZ2V0X2dmbl91bnNoYXJlKGQsIHBm biwgJnQpOworICAgICAgICBpZiAoIHAybV9pc19wYWdpbmcodCkgKQorICAgICAgICB7CisgICAg ICAgICAgICBwdXRfZ2ZuKGQsIHBmbik7CisgICAgICAgICAgICBwMm1fbWVtX3BhZ2luZ19wb3B1 bGF0ZShkLCBwZm4pOworICAgICAgICAgICAgcmMgPSAtRUFHQUlOOworICAgICAgICAgICAgZ290 byBvdXQ7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCBwMm1faXNfc2hhcmVkKHQpICkKKyAgICAg ICAgeworICAgICAgICAgICAgcHV0X2dmbihkLCBwZm4pOworICAgICAgICAgICAgcmMgPSAtRUFH QUlOOworICAgICAgICAgICAgZ290byBvdXQ7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCAhaHZt X2FsbG93X3AybV90eXBlX2NoYW5nZSh0LCBtZW10eXBlW2EuaHZtbWVtX3R5cGVdKSApCisgICAg ICAgIHsKKyAgICAgICAgICAgIHB1dF9nZm4oZCwgcGZuKTsKKyAgICAgICAgICAgIGdvdG8gb3V0 OworICAgICAgICB9CisKKyAgICAgICAgcmMgPSBwMm1fY2hhbmdlX3R5cGVfb25lKGQsIHBmbiwg dCwgbWVtdHlwZVthLmh2bW1lbV90eXBlXSk7CisgICAgICAgIHB1dF9nZm4oZCwgcGZuKTsKKwor ICAgICAgICBpZiAoIHJjICkKKyAgICAgICAgICAgIGdvdG8gb3V0OworCisgICAgICAgIC8qIENo ZWNrIGZvciBjb250aW51YXRpb24gaWYgaXQncyBub3QgdGhlIGxhc3QgaW50ZXJhdGlvbiAqLwor ICAgICAgICBpZiAoIGEubnIgPiArK3N0YXJ0X2l0ZXIgJiYgIShzdGFydF9pdGVyICYgSFZNT1Bf b3BfbWFzaykgJiYKKyAgICAgICAgICAgICBoeXBlcmNhbGxfcHJlZW1wdF9jaGVjaygpICkKKyAg ICAgICAgeworICAgICAgICAgICAgcmMgPSAtRVJFU1RBUlQ7CisgICAgICAgICAgICBnb3RvIG91 dDsKKyAgICAgICAgfQorICAgIH0KKyAgICByYyA9IDA7CisKKyBvdXQ6CisgICAgcmN1X3VubG9j a19kb21haW4oZCk7CisgICAgKml0ZXIgPSBzdGFydF9pdGVyOworCisgICAgcmV0dXJuIHJjOwor fQorCiBsb25nIGRvX2h2bV9vcCh1bnNpZ25lZCBsb25nIG9wLCBYRU5fR1VFU1RfSEFORExFX1BB UkFNKHZvaWQpIGFyZykKIHsKICAgICB1bnNpZ25lZCBsb25nIHN0YXJ0X2l0ZXIsIG1hc2s7CkBA IC02NzU0LDEzNSArNjkwNCwxNSBAQCBsb25nIGRvX2h2bV9vcCh1bnNpZ25lZCBsb25nIG9wLCBY RU5fR1VFU1RfSEFORExFX1BBUkFNKHZvaWQpIGFyZykKICAgICB9CiAKICAgICBjYXNlIEhWTU9Q X2dldF9tZW1fdHlwZToKLSAgICB7Ci0gICAgICAgIHN0cnVjdCB4ZW5faHZtX2dldF9tZW1fdHlw ZSBhOwotICAgICAgICBzdHJ1Y3QgZG9tYWluICpkOwotICAgICAgICBwMm1fdHlwZV90IHQ7Ci0K LSAgICAgICAgaWYgKCBjb3B5X2Zyb21fZ3Vlc3QoJmEsIGFyZywgMSkgKQotICAgICAgICAgICAg cmV0dXJuIC1FRkFVTFQ7Ci0KLSAgICAgICAgZCA9IHJjdV9sb2NrX2RvbWFpbl9ieV9hbnlfaWQo YS5kb21pZCk7Ci0gICAgICAgIGlmICggZCA9PSBOVUxMICkKLSAgICAgICAgICAgIHJldHVybiAt RVNSQ0g7Ci0KLSAgICAgICAgcmMgPSB4c21faHZtX3BhcmFtKFhTTV9UQVJHRVQsIGQsIG9wKTsK LSAgICAgICAgaWYgKCB1bmxpa2VseShyYykgKQotICAgICAgICAgICAgLyogbm90aGluZyAqLzsK LSAgICAgICAgZWxzZSBpZiAoIGxpa2VseShpc19odm1fZG9tYWluKGQpKSApCi0gICAgICAgIHsK LSAgICAgICAgICAgIC8qIFVzZSBnZXRfZ2ZuIHF1ZXJ5IGFzIHdlIGFyZSBpbnRlcmVzdGVkIGlu IHRoZSBjdXJyZW50IAotICAgICAgICAgICAgICogdHlwZSwgbm90IGluIGFsbG9jYXRpbmcgb3Ig dW5zaGFyaW5nLiBUaGF0J2xsIGhhcHBlbiAKLSAgICAgICAgICAgICAqIG9uIGFjY2Vzcy4gKi8K LSAgICAgICAgICAgIGdldF9nZm5fcXVlcnlfdW5sb2NrZWQoZCwgYS5wZm4sICZ0KTsKLSAgICAg ICAgICAgIGlmICggcDJtX2lzX21taW8odCkgKQotICAgICAgICAgICAgICAgIGEubWVtX3R5cGUg PSAgSFZNTUVNX21taW9fZG07Ci0gICAgICAgICAgICBlbHNlIGlmICggdCA9PSBwMm1fbW1pb193 cml0ZV9kbSApCi0gICAgICAgICAgICAgICAgYS5tZW1fdHlwZSA9IEhWTU1FTV9tbWlvX3dyaXRl X2RtOwotICAgICAgICAgICAgZWxzZSBpZiAoIHAybV9pc19yZWFkb25seSh0KSApCi0gICAgICAg ICAgICAgICAgYS5tZW1fdHlwZSA9ICBIVk1NRU1fcmFtX3JvOwotICAgICAgICAgICAgZWxzZSBp ZiAoIHAybV9pc19yYW0odCkgKQotICAgICAgICAgICAgICAgIGEubWVtX3R5cGUgPSAgSFZNTUVN X3JhbV9ydzsKLSAgICAgICAgICAgIGVsc2UgaWYgKCBwMm1faXNfcG9kKHQpICkKLSAgICAgICAg ICAgICAgICBhLm1lbV90eXBlID0gIEhWTU1FTV9yYW1fcnc7Ci0gICAgICAgICAgICBlbHNlIGlm ICggcDJtX2lzX2dyYW50KHQpICkKLSAgICAgICAgICAgICAgICBhLm1lbV90eXBlID0gIEhWTU1F TV9yYW1fcnc7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgYS5tZW1fdHlwZSA9 ICBIVk1NRU1fbW1pb19kbTsKLSAgICAgICAgICAgIGlmICggX19jb3B5X3RvX2d1ZXN0KGFyZywg JmEsIDEpICkKLSAgICAgICAgICAgICAgICByYyA9IC1FRkFVTFQ7Ci0gICAgICAgIH0KLSAgICAg ICAgZWxzZQotICAgICAgICAgICAgcmMgPSAtRUlOVkFMOwotCi0gICAgICAgIHJjdV91bmxvY2tf ZG9tYWluKGQpOworICAgICAgICByYyA9IGh2bW9wX2dldF9tZW1fdHlwZSgKKyAgICAgICAgICAg IGd1ZXN0X2hhbmRsZV9jYXN0KGFyZywgeGVuX2h2bV9nZXRfbWVtX3R5cGVfdCkpOwogICAgICAg ICBicmVhazsKLSAgICB9CiAKICAgICBjYXNlIEhWTU9QX3NldF9tZW1fdHlwZToKLSAgICB7Ci0g ICAgICAgIHN0cnVjdCB4ZW5faHZtX3NldF9tZW1fdHlwZSBhOwotICAgICAgICBzdHJ1Y3QgZG9t YWluICpkOwotICAgICAgICAKLSAgICAgICAgLyogSW50ZXJmYWNlIHR5cGVzIHRvIGludGVybmFs IHAybSB0eXBlcyAqLwotICAgICAgICBzdGF0aWMgY29uc3QgcDJtX3R5cGVfdCBtZW10eXBlW10g PSB7Ci0gICAgICAgICAgICBbSFZNTUVNX3JhbV9yd10gID0gcDJtX3JhbV9ydywKLSAgICAgICAg ICAgIFtIVk1NRU1fcmFtX3JvXSAgPSBwMm1fcmFtX3JvLAotICAgICAgICAgICAgW0hWTU1FTV9t bWlvX2RtXSA9IHAybV9tbWlvX2RtLAotICAgICAgICAgICAgW0hWTU1FTV9tbWlvX3dyaXRlX2Rt XSA9IHAybV9tbWlvX3dyaXRlX2RtCi0gICAgICAgIH07Ci0KLSAgICAgICAgaWYgKCBjb3B5X2Zy b21fZ3Vlc3QoJmEsIGFyZywgMSkgKQotICAgICAgICAgICAgcmV0dXJuIC1FRkFVTFQ7Ci0KLSAg ICAgICAgcmMgPSByY3VfbG9ja19yZW1vdGVfZG9tYWluX2J5X2lkKGEuZG9taWQsICZkKTsKLSAg ICAgICAgaWYgKCByYyAhPSAwICkKLSAgICAgICAgICAgIHJldHVybiByYzsKLQotICAgICAgICBy YyA9IC1FSU5WQUw7Ci0gICAgICAgIGlmICggIWlzX2h2bV9kb21haW4oZCkgKQotICAgICAgICAg ICAgZ290byBzZXRtZW10eXBlX2ZhaWw7Ci0KLSAgICAgICAgcmMgPSB4c21faHZtX2NvbnRyb2wo WFNNX0RNX1BSSVYsIGQsIG9wKTsKLSAgICAgICAgaWYgKCByYyApCi0gICAgICAgICAgICBnb3Rv IHNldG1lbXR5cGVfZmFpbDsKLQotICAgICAgICByYyA9IC1FSU5WQUw7Ci0gICAgICAgIGlmICgg YS5uciA8IHN0YXJ0X2l0ZXIgfHwKLSAgICAgICAgICAgICAoKGEuZmlyc3RfcGZuICsgYS5uciAt IDEpIDwgYS5maXJzdF9wZm4pIHx8Ci0gICAgICAgICAgICAgKChhLmZpcnN0X3BmbiArIGEubnIg LSAxKSA+IGRvbWFpbl9nZXRfbWF4aW11bV9ncGZuKGQpKSApCi0gICAgICAgICAgICBnb3RvIHNl dG1lbXR5cGVfZmFpbDsKLSAgICAgICAgICAgIAotICAgICAgICBpZiAoIGEuaHZtbWVtX3R5cGUg Pj0gQVJSQVlfU0laRShtZW10eXBlKSApCi0gICAgICAgICAgICBnb3RvIHNldG1lbXR5cGVfZmFp bDsKLQotICAgICAgICB3aGlsZSAoIGEubnIgPiBzdGFydF9pdGVyICkKLSAgICAgICAgewotICAg ICAgICAgICAgdW5zaWduZWQgbG9uZyBwZm4gPSBhLmZpcnN0X3BmbiArIHN0YXJ0X2l0ZXI7Ci0g ICAgICAgICAgICBwMm1fdHlwZV90IHQ7Ci0KLSAgICAgICAgICAgIGdldF9nZm5fdW5zaGFyZShk LCBwZm4sICZ0KTsKLSAgICAgICAgICAgIGlmICggcDJtX2lzX3BhZ2luZyh0KSApCi0gICAgICAg ICAgICB7Ci0gICAgICAgICAgICAgICAgcHV0X2dmbihkLCBwZm4pOwotICAgICAgICAgICAgICAg IHAybV9tZW1fcGFnaW5nX3BvcHVsYXRlKGQsIHBmbik7Ci0gICAgICAgICAgICAgICAgcmMgPSAt RUFHQUlOOwotICAgICAgICAgICAgICAgIGdvdG8gc2V0bWVtdHlwZV9mYWlsOwotICAgICAgICAg ICAgfQotICAgICAgICAgICAgaWYgKCBwMm1faXNfc2hhcmVkKHQpICkKLSAgICAgICAgICAgIHsK LSAgICAgICAgICAgICAgICBwdXRfZ2ZuKGQsIHBmbik7Ci0gICAgICAgICAgICAgICAgcmMgPSAt RUFHQUlOOwotICAgICAgICAgICAgICAgIGdvdG8gc2V0bWVtdHlwZV9mYWlsOwotICAgICAgICAg ICAgfQotICAgICAgICAgICAgaWYgKCAhcDJtX2lzX3JhbSh0KSAmJgotICAgICAgICAgICAgICAg ICAoIXAybV9pc19ob2xlKHQpIHx8IGEuaHZtbWVtX3R5cGUgIT0gSFZNTUVNX21taW9fZG0pICYm Ci0gICAgICAgICAgICAgICAgICh0ICE9IHAybV9tbWlvX3dyaXRlX2RtIHx8IGEuaHZtbWVtX3R5 cGUgIT0gSFZNTUVNX3JhbV9ydykgKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHB1 dF9nZm4oZCwgcGZuKTsKLSAgICAgICAgICAgICAgICBnb3RvIHNldG1lbXR5cGVfZmFpbDsKLSAg ICAgICAgICAgIH0KLQotICAgICAgICAgICAgcmMgPSBwMm1fY2hhbmdlX3R5cGVfb25lKGQsIHBm biwgdCwgbWVtdHlwZVthLmh2bW1lbV90eXBlXSk7Ci0gICAgICAgICAgICBwdXRfZ2ZuKGQsIHBm bik7Ci0gICAgICAgICAgICBpZiAoIHJjICkKLSAgICAgICAgICAgICAgICBnb3RvIHNldG1lbXR5 cGVfZmFpbDsKLQotICAgICAgICAgICAgLyogQ2hlY2sgZm9yIGNvbnRpbnVhdGlvbiBpZiBpdCdz IG5vdCB0aGUgbGFzdCBpbnRlcmF0aW9uICovCi0gICAgICAgICAgICBpZiAoIGEubnIgPiArK3N0 YXJ0X2l0ZXIgJiYgIShzdGFydF9pdGVyICYgSFZNT1Bfb3BfbWFzaykgJiYKLSAgICAgICAgICAg ICAgICAgaHlwZXJjYWxsX3ByZWVtcHRfY2hlY2soKSApCi0gICAgICAgICAgICB7Ci0gICAgICAg ICAgICAgICAgcmMgPSAtRVJFU1RBUlQ7Ci0gICAgICAgICAgICAgICAgZ290byBzZXRtZW10eXBl X2ZhaWw7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICByYyA9IDA7Ci0KLSAg ICBzZXRtZW10eXBlX2ZhaWw6Ci0gICAgICAgIHJjdV91bmxvY2tfZG9tYWluKGQpOworICAgICAg ICByYyA9IGh2bW9wX3NldF9tZW1fdHlwZSgKKyAgICAgICAgICAgIGd1ZXN0X2hhbmRsZV9jYXN0 KGFyZywgeGVuX2h2bV9zZXRfbWVtX3R5cGVfdCksCisgICAgICAgICAgICAmc3RhcnRfaXRlcik7 CiAgICAgICAgIGJyZWFrOwotICAgIH0KIAogICAgIGNhc2UgSFZNT1BfcGFnZXRhYmxlX2R5aW5n OgogICAgIHsKLS0gCjEuOS4xCgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX18KWGVuLWRldmVsIG1haWxpbmcgbGlzdApYZW4tZGV2ZWxAbGlzdHMueGVuLm9y ZwpodHRwOi8vbGlzdHMueGVuLm9yZy94ZW4tZGV2ZWwK