From mboxrd@z Thu Jan 1 00:00:00 1970 From: Wei Liu Subject: [PATCH 14/29] xl: split out block related code Date: Fri, 24 Feb 2017 16:12:59 +0000 Message-ID: <20170224161314.22154-15-wei.liu2@citrix.com> References: <20170224161314.22154-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 1chIXt-0006Zj-Fh for xen-devel@lists.xenproject.org; Fri, 24 Feb 2017 16:16:37 +0000 In-Reply-To: <20170224161314.22154-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: Wei Liu , Ian Jackson List-Id: xen-devel@lists.xenproject.org U2lnbmVkLW9mZi1ieTogV2VpIExpdSA8d2VpLmxpdTJAY2l0cml4LmNvbT4KLS0tCiB0b29scy94 bC9NYWtlZmlsZSAgICAgfCAgIDIgKy0KIHRvb2xzL3hsL3hsX2Jsb2NrLmMgICB8IDEyOSArKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwogdG9vbHMveGwv eGxfY21kaW1wbC5jIHwgIDk5IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t CiAzIGZpbGVzIGNoYW5nZWQsIDEzMCBpbnNlcnRpb25zKCspLCAxMDAgZGVsZXRpb25zKC0pCiBj cmVhdGUgbW9kZSAxMDA2NDQgdG9vbHMveGwveGxfYmxvY2suYwoKZGlmZiAtLWdpdCBhL3Rvb2xz L3hsL01ha2VmaWxlIGIvdG9vbHMveGwvTWFrZWZpbGUKaW5kZXggYjMxZWMwNTJjMS4uMzMxYWUy MTI5MyAxMDA2NDQKLS0tIGEvdG9vbHMveGwvTWFrZWZpbGUKKysrIGIvdG9vbHMveGwvTWFrZWZp bGUKQEAgLTE3LDcgKzE3LDcgQEAgQ0ZMQUdTX1hMICs9IC1Xc2hhZG93CiAKIFhMX09CSlMgPSB4 bC5vIHhsX2NtZGltcGwubyB4bF9jbWR0YWJsZS5vIHhsX3N4cC5vIHhsX3V0aWxzLm8KIFhMX09C SlMgKz0geGxfdG1lbS5vIHhsX3BhcnNlLm8geGxfY3B1cG9vbC5vIHhsX2ZsYXNrLm8KLVhMX09C SlMgKz0geGxfdnRwbS5vCitYTF9PQkpTICs9IHhsX3Z0cG0ubyB4bF9ibG9jay5vCiAKICQoWExf T0JKUyk6IENGTEFHUyArPSAkKENGTEFHU19saWJ4ZW50b29sbG9nKQogJChYTF9PQkpTKTogQ0ZM QUdTICs9ICQoQ0ZMQUdTX1hMKQpkaWZmIC0tZ2l0IGEvdG9vbHMveGwveGxfYmxvY2suYyBiL3Rv b2xzL3hsL3hsX2Jsb2NrLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMC4u YjBkNzk5MzFmOQotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL3hsL3hsX2Jsb2NrLmMKQEAgLTAs MCArMSwxMjkgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwOS0yMDE3IENpdHJpeCBMdGQgYW5kIG90 aGVyIGNvbnRyaWJ1dG9ycworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5 b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVy bXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQK KyAqIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHZlcnNpb24gMi4xIG9ubHkuIHdp dGggdGhlIHNwZWNpYWwKKyAqIGV4Y2VwdGlvbiBvbiBsaW5raW5nIGRlc2NyaWJlZCBpbiBmaWxl IExJQ0VOU0UuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9y IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIExlc3Nl ciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2luY2x1 ZGUgPHN0ZGxpYi5oPgorCisjaW5jbHVkZSA8bGlieGwuaD4KKyNpbmNsdWRlIDxsaWJ4bF91dGls cy5oPgorI2luY2x1ZGUgPGxpYnhsdXRpbC5oPgorCisjaW5jbHVkZSAieGwuaCIKKyNpbmNsdWRl ICJ4bF91dGlscy5oIgorI2luY2x1ZGUgInhsX3BhcnNlLmgiCisKK2ludCBtYWluX2Jsb2NrYXR0 YWNoKGludCBhcmdjLCBjaGFyICoqYXJndikKK3sKKyAgICBpbnQgb3B0OworICAgIHVpbnQzMl90 IGZlX2RvbWlkOworICAgIGxpYnhsX2RldmljZV9kaXNrIGRpc2s7CisgICAgWExVX0NvbmZpZyAq Y29uZmlnID0gMDsKKworICAgIFNXSVRDSF9GT1JFQUNIX09QVChvcHQsICIiLCBOVUxMLCAiYmxv Y2stYXR0YWNoIiwgMikgeworICAgICAgICAvKiBObyBvcHRpb25zICovCisgICAgfQorCisgICAg aWYgKGxpYnhsX2RvbWFpbl9xdWFsaWZpZXJfdG9fZG9taWQoY3R4LCBhcmd2W29wdGluZF0sICZm ZV9kb21pZCkgPCAwKSB7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiJXMgaXMgYW4gaW52YWxp ZCBkb21haW4gaWRlbnRpZmllclxuIiwgYXJndltvcHRpbmRdKTsKKyAgICAgICAgcmV0dXJuIDE7 CisgICAgfQorICAgIG9wdGluZCsrOworCisgICAgcGFyc2VfZGlza19jb25maWdfbXVsdGlzdHJp bmcKKyAgICAgICAgKCZjb25maWcsIGFyZ2Mtb3B0aW5kLCAoY29uc3QgY2hhciogY29uc3QqKWFy Z3YgKyBvcHRpbmQsICZkaXNrKTsKKworICAgIGlmIChkcnlydW5fb25seSkgeworICAgICAgICBj aGFyICpqc29uID0gbGlieGxfZGV2aWNlX2Rpc2tfdG9fanNvbihjdHgsICZkaXNrKTsKKyAgICAg ICAgcHJpbnRmKCJkaXNrOiAlc1xuIiwganNvbik7CisgICAgICAgIGZyZWUoanNvbik7CisgICAg ICAgIGlmIChmZXJyb3Ioc3Rkb3V0KSB8fCBmZmx1c2goc3Rkb3V0KSkgeyBwZXJyb3IoInN0ZG91 dCIpOyBleGl0KC0xKTsgfQorICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICBpZiAobGli eGxfZGV2aWNlX2Rpc2tfYWRkKGN0eCwgZmVfZG9taWQsICZkaXNrLCAwKSkgeworICAgICAgICBm cHJpbnRmKHN0ZGVyciwgImxpYnhsX2RldmljZV9kaXNrX2FkZCBmYWlsZWQuXG4iKTsKKyAgICAg ICAgcmV0dXJuIDE7CisgICAgfQorICAgIHJldHVybiAwOworfQorCitpbnQgbWFpbl9ibG9ja2xp c3QoaW50IGFyZ2MsIGNoYXIgKiphcmd2KQoreworICAgIGludCBvcHQ7CisgICAgaW50IGksIG5i OworICAgIGxpYnhsX2RldmljZV9kaXNrICpkaXNrczsKKyAgICBsaWJ4bF9kaXNraW5mbyBkaXNr aW5mbzsKKworICAgIFNXSVRDSF9GT1JFQUNIX09QVChvcHQsICIiLCBOVUxMLCAiYmxvY2stbGlz dCIsIDEpIHsKKyAgICAgICAgLyogTm8gb3B0aW9ucyAqLworICAgIH0KKworICAgIHByaW50Zigi JS01cyAlLTNzICUtNnMgJS01cyAlLTZzICUtOHMgJS0zMHNcbiIsCisgICAgICAgICAgICJWZGV2 IiwgIkJFIiwgImhhbmRsZSIsICJzdGF0ZSIsICJldnQtY2giLCAicmluZy1yZWYiLCAiQkUtcGF0 aCIpOworICAgIGZvciAoYXJndiArPSBvcHRpbmQsIGFyZ2MgLT0gb3B0aW5kOyBhcmdjID4gMDsg LS1hcmdjLCArK2FyZ3YpIHsKKyAgICAgICAgdWludDMyX3QgZG9taWQ7CisgICAgICAgIGlmIChs aWJ4bF9kb21haW5fcXVhbGlmaWVyX3RvX2RvbWlkKGN0eCwgKmFyZ3YsICZkb21pZCkgPCAwKSB7 CisgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiVzIGlzIGFuIGludmFsaWQgZG9tYWluIGlk ZW50aWZpZXJcbiIsICphcmd2KTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9Cisg ICAgICAgIGRpc2tzID0gbGlieGxfZGV2aWNlX2Rpc2tfbGlzdChjdHgsIGRvbWlkLCAmbmIpOwor ICAgICAgICBpZiAoIWRpc2tzKSB7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQor ICAgICAgICBmb3IgKGk9MDsgaTxuYjsgaSsrKSB7CisgICAgICAgICAgICBpZiAoIWxpYnhsX2Rl dmljZV9kaXNrX2dldGluZm8oY3R4LCBkb21pZCwgJmRpc2tzW2ldLCAmZGlza2luZm8pKSB7Cisg ICAgICAgICAgICAgICAgLyogICAgICBWZGV2IEJFICAgaGRsICBzdCAgIGV2Y2ggcnJlZiBCRS1w YXRoKi8KKyAgICAgICAgICAgICAgICBwcmludGYoIiUtNWQgJS0zZCAlLTZkICUtNWQgJS02ZCAl LThkICUtMzBzXG4iLAorICAgICAgICAgICAgICAgICAgICAgICBkaXNraW5mby5kZXZpZCwgZGlz a2luZm8uYmFja2VuZF9pZCwgZGlza2luZm8uZnJvbnRlbmRfaWQsCisgICAgICAgICAgICAgICAg ICAgICAgIGRpc2tpbmZvLnN0YXRlLCBkaXNraW5mby5ldnRjaCwgZGlza2luZm8ucnJlZiwgZGlz a2luZm8uYmFja2VuZCk7CisgICAgICAgICAgICAgICAgbGlieGxfZGlza2luZm9fZGlzcG9zZSgm ZGlza2luZm8pOworICAgICAgICAgICAgfQorICAgICAgICAgICAgbGlieGxfZGV2aWNlX2Rpc2tf ZGlzcG9zZSgmZGlza3NbaV0pOworICAgICAgICB9CisgICAgICAgIGZyZWUoZGlza3MpOworICAg IH0KKyAgICByZXR1cm4gMDsKK30KKworaW50IG1haW5fYmxvY2tkZXRhY2goaW50IGFyZ2MsIGNo YXIgKiphcmd2KQoreworICAgIHVpbnQzMl90IGRvbWlkOworICAgIGludCBvcHQsIHJjID0gMDsK KyAgICBsaWJ4bF9kZXZpY2VfZGlzayBkaXNrOworCisgICAgU1dJVENIX0ZPUkVBQ0hfT1BUKG9w dCwgIiIsIE5VTEwsICJibG9jay1kZXRhY2giLCAyKSB7CisgICAgICAgIC8qIE5vIG9wdGlvbnMg Ki8KKyAgICB9CisKKyAgICBkb21pZCA9IHhmaW5kX2RvbWFpbihhcmd2W29wdGluZF0pOworCisg ICAgaWYgKGxpYnhsX3ZkZXZfdG9fZGV2aWNlX2Rpc2soY3R4LCBkb21pZCwgYXJndltvcHRpbmQr MV0sICZkaXNrKSkgeworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkVycm9yOiBEZXZpY2UgJXMg bm90IGNvbm5lY3RlZC5cbiIsIGFyZ3Zbb3B0aW5kKzFdKTsKKyAgICAgICAgcmV0dXJuIDE7Cisg ICAgfQorICAgIHJjID0gbGlieGxfZGV2aWNlX2Rpc2tfcmVtb3ZlKGN0eCwgZG9taWQsICZkaXNr LCAwKTsKKyAgICBpZiAocmMpIHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJsaWJ4bF9kZXZp Y2VfZGlza19yZW1vdmUgZmFpbGVkLlxuIik7CisgICAgICAgIHJldHVybiAxOworICAgIH0KKyAg ICBsaWJ4bF9kZXZpY2VfZGlza19kaXNwb3NlKCZkaXNrKTsKKyAgICByZXR1cm4gcmM7Cit9CisK Ky8qCisgKiBMb2NhbCB2YXJpYWJsZXM6CisgKiBtb2RlOiBDCisgKiBjLWJhc2ljLW9mZnNldDog NAorICogaW5kZW50LXRhYnMtbW9kZTogbmlsCisgKiBFbmQ6CisgKi8KZGlmZiAtLWdpdCBhL3Rv b2xzL3hsL3hsX2NtZGltcGwuYyBiL3Rvb2xzL3hsL3hsX2NtZGltcGwuYwppbmRleCBhZWI0ZmIz NjJmLi41NjUyNGZlNzA3IDEwMDY0NAotLS0gYS90b29scy94bC94bF9jbWRpbXBsLmMKKysrIGIv dG9vbHMveGwveGxfY21kaW1wbC5jCkBAIC01MTc2LDEwNSArNTE3Niw2IEBAIGludCBtYWluX2No YW5uZWxsaXN0KGludCBhcmdjLCBjaGFyICoqYXJndikKICAgICByZXR1cm4gMDsKIH0KIAotaW50 IG1haW5fYmxvY2thdHRhY2goaW50IGFyZ2MsIGNoYXIgKiphcmd2KQotewotICAgIGludCBvcHQ7 Ci0gICAgdWludDMyX3QgZmVfZG9taWQ7Ci0gICAgbGlieGxfZGV2aWNlX2Rpc2sgZGlzazsKLSAg ICBYTFVfQ29uZmlnICpjb25maWcgPSAwOwotCi0gICAgU1dJVENIX0ZPUkVBQ0hfT1BUKG9wdCwg IiIsIE5VTEwsICJibG9jay1hdHRhY2giLCAyKSB7Ci0gICAgICAgIC8qIE5vIG9wdGlvbnMgKi8K LSAgICB9Ci0KLSAgICBpZiAobGlieGxfZG9tYWluX3F1YWxpZmllcl90b19kb21pZChjdHgsIGFy Z3Zbb3B0aW5kXSwgJmZlX2RvbWlkKSA8IDApIHsKLSAgICAgICAgZnByaW50ZihzdGRlcnIsICIl cyBpcyBhbiBpbnZhbGlkIGRvbWFpbiBpZGVudGlmaWVyXG4iLCBhcmd2W29wdGluZF0pOwotICAg ICAgICByZXR1cm4gMTsKLSAgICB9Ci0gICAgb3B0aW5kKys7Ci0KLSAgICBwYXJzZV9kaXNrX2Nv bmZpZ19tdWx0aXN0cmluZwotICAgICAgICAoJmNvbmZpZywgYXJnYy1vcHRpbmQsIChjb25zdCBj aGFyKiBjb25zdCopYXJndiArIG9wdGluZCwgJmRpc2spOwotCi0gICAgaWYgKGRyeXJ1bl9vbmx5 KSB7Ci0gICAgICAgIGNoYXIgKmpzb24gPSBsaWJ4bF9kZXZpY2VfZGlza190b19qc29uKGN0eCwg JmRpc2spOwotICAgICAgICBwcmludGYoImRpc2s6ICVzXG4iLCBqc29uKTsKLSAgICAgICAgZnJl ZShqc29uKTsKLSAgICAgICAgaWYgKGZlcnJvcihzdGRvdXQpIHx8IGZmbHVzaChzdGRvdXQpKSB7 IHBlcnJvcigic3Rkb3V0Iik7IGV4aXQoLTEpOyB9Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0K LQotICAgIGlmIChsaWJ4bF9kZXZpY2VfZGlza19hZGQoY3R4LCBmZV9kb21pZCwgJmRpc2ssIDAp KSB7Ci0gICAgICAgIGZwcmludGYoc3RkZXJyLCAibGlieGxfZGV2aWNlX2Rpc2tfYWRkIGZhaWxl ZC5cbiIpOwotICAgICAgICByZXR1cm4gMTsKLSAgICB9Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLWlu dCBtYWluX2Jsb2NrbGlzdChpbnQgYXJnYywgY2hhciAqKmFyZ3YpCi17Ci0gICAgaW50IG9wdDsK LSAgICBpbnQgaSwgbmI7Ci0gICAgbGlieGxfZGV2aWNlX2Rpc2sgKmRpc2tzOwotICAgIGxpYnhs X2Rpc2tpbmZvIGRpc2tpbmZvOwotCi0gICAgU1dJVENIX0ZPUkVBQ0hfT1BUKG9wdCwgIiIsIE5V TEwsICJibG9jay1saXN0IiwgMSkgewotICAgICAgICAvKiBObyBvcHRpb25zICovCi0gICAgfQot Ci0gICAgcHJpbnRmKCIlLTVzICUtM3MgJS02cyAlLTVzICUtNnMgJS04cyAlLTMwc1xuIiwKLSAg ICAgICAgICAgIlZkZXYiLCAiQkUiLCAiaGFuZGxlIiwgInN0YXRlIiwgImV2dC1jaCIsICJyaW5n LXJlZiIsICJCRS1wYXRoIik7Ci0gICAgZm9yIChhcmd2ICs9IG9wdGluZCwgYXJnYyAtPSBvcHRp bmQ7IGFyZ2MgPiAwOyAtLWFyZ2MsICsrYXJndikgewotICAgICAgICB1aW50MzJfdCBkb21pZDsK LSAgICAgICAgaWYgKGxpYnhsX2RvbWFpbl9xdWFsaWZpZXJfdG9fZG9taWQoY3R4LCAqYXJndiwg JmRvbWlkKSA8IDApIHsKLSAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiJXMgaXMgYW4gaW52 YWxpZCBkb21haW4gaWRlbnRpZmllclxuIiwgKmFyZ3YpOwotICAgICAgICAgICAgY29udGludWU7 Ci0gICAgICAgIH0KLSAgICAgICAgZGlza3MgPSBsaWJ4bF9kZXZpY2VfZGlza19saXN0KGN0eCwg ZG9taWQsICZuYik7Ci0gICAgICAgIGlmICghZGlza3MpIHsKLSAgICAgICAgICAgIGNvbnRpbnVl OwotICAgICAgICB9Ci0gICAgICAgIGZvciAoaT0wOyBpPG5iOyBpKyspIHsKLSAgICAgICAgICAg IGlmICghbGlieGxfZGV2aWNlX2Rpc2tfZ2V0aW5mbyhjdHgsIGRvbWlkLCAmZGlza3NbaV0sICZk aXNraW5mbykpIHsKLSAgICAgICAgICAgICAgICAvKiAgICAgIFZkZXYgQkUgICBoZGwgIHN0ICAg ZXZjaCBycmVmIEJFLXBhdGgqLwotICAgICAgICAgICAgICAgIHByaW50ZigiJS01ZCAlLTNkICUt NmQgJS01ZCAlLTZkICUtOGQgJS0zMHNcbiIsCi0gICAgICAgICAgICAgICAgICAgICAgIGRpc2tp bmZvLmRldmlkLCBkaXNraW5mby5iYWNrZW5kX2lkLCBkaXNraW5mby5mcm9udGVuZF9pZCwKLSAg ICAgICAgICAgICAgICAgICAgICAgZGlza2luZm8uc3RhdGUsIGRpc2tpbmZvLmV2dGNoLCBkaXNr aW5mby5ycmVmLCBkaXNraW5mby5iYWNrZW5kKTsKLSAgICAgICAgICAgICAgICBsaWJ4bF9kaXNr aW5mb19kaXNwb3NlKCZkaXNraW5mbyk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBsaWJ4 bF9kZXZpY2VfZGlza19kaXNwb3NlKCZkaXNrc1tpXSk7Ci0gICAgICAgIH0KLSAgICAgICAgZnJl ZShkaXNrcyk7Ci0gICAgfQotICAgIHJldHVybiAwOwotfQotCi1pbnQgbWFpbl9ibG9ja2RldGFj aChpbnQgYXJnYywgY2hhciAqKmFyZ3YpCi17Ci0gICAgdWludDMyX3QgZG9taWQ7Ci0gICAgaW50 IG9wdCwgcmMgPSAwOwotICAgIGxpYnhsX2RldmljZV9kaXNrIGRpc2s7Ci0KLSAgICBTV0lUQ0hf Rk9SRUFDSF9PUFQob3B0LCAiIiwgTlVMTCwgImJsb2NrLWRldGFjaCIsIDIpIHsKLSAgICAgICAg LyogTm8gb3B0aW9ucyAqLwotICAgIH0KLQotICAgIGRvbWlkID0geGZpbmRfZG9tYWluKGFyZ3Zb b3B0aW5kXSk7Ci0KLSAgICBpZiAobGlieGxfdmRldl90b19kZXZpY2VfZGlzayhjdHgsIGRvbWlk LCBhcmd2W29wdGluZCsxXSwgJmRpc2spKSB7Ci0gICAgICAgIGZwcmludGYoc3RkZXJyLCAiRXJy b3I6IERldmljZSAlcyBub3QgY29ubmVjdGVkLlxuIiwgYXJndltvcHRpbmQrMV0pOwotICAgICAg ICByZXR1cm4gMTsKLSAgICB9Ci0gICAgcmMgPSBsaWJ4bF9kZXZpY2VfZGlza19yZW1vdmUoY3R4 LCBkb21pZCwgJmRpc2ssIDApOwotICAgIGlmIChyYykgewotICAgICAgICBmcHJpbnRmKHN0ZGVy ciwgImxpYnhsX2RldmljZV9kaXNrX3JlbW92ZSBmYWlsZWQuXG4iKTsKLSAgICAgICAgcmV0dXJu IDE7Ci0gICAgfQotICAgIGxpYnhsX2RldmljZV9kaXNrX2Rpc3Bvc2UoJmRpc2spOwotICAgIHJl dHVybiByYzsKLX0KLQotCiBzdGF0aWMgY2hhciAqdXB0aW1lX3RvX3N0cmluZyh1bnNpZ25lZCBs b25nIHVwdGltZSwgaW50IHNob3J0X21vZGUpCiB7CiAgICAgaW50IHNlYywgbWluLCBob3VyLCBk YXk7Ci0tIAoyLjExLjAKCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fXwpYZW4tZGV2ZWwgbWFpbGluZyBsaXN0Clhlbi1kZXZlbEBsaXN0cy54ZW4ub3JnCmh0 dHBzOi8vbGlzdHMueGVuLm9yZy94ZW4tZGV2ZWwK