From mboxrd@z Thu Jan 1 00:00:00 1970 From: Yi Sun Subject: [PATCH v4 14/15] tools: implement new generic set value interface and MBA set value command Date: Sat, 23 Sep 2017 17:48:23 +0800 Message-ID: <1506160104-5890-15-git-send-email-yi.y.sun@linux.intel.com> References: <1506160104-5890-1-git-send-email-yi.y.sun@linux.intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail6.bemta6.messagelabs.com ([193.109.254.103]) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1dvhMV-0004tv-V9 for xen-devel@lists.xenproject.org; Sat, 23 Sep 2017 10:08:40 +0000 In-Reply-To: <1506160104-5890-1-git-send-email-yi.y.sun@linux.intel.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" To: xen-devel@lists.xenproject.org Cc: Wei Liu , Chao Peng , Yi Sun , Ian Jackson , =?UTF-8?q?Roger=20Pau=20Monn=C3=A9?= List-Id: xen-devel@lists.xenproject.org VGhpcyBwYXRjaCBpbXBsZW1lbnRzIG5ldyBnZW5lcmljIHNldCB2YWx1ZSBpbnRlcmZhY2VzIGlu IGxpYnhjIGFuZCBsaWJ4bC4KVGhlc2UgaW50ZXJmYWNlcyBhcmUgc3VpdGFibGUgZm9yIGFsbCBh bGxvY2F0aW9uIGZlYXR1cmVzLiBJdCBhbHNvIGFkZHMgYQpuZXcgTUJBIHNldCB2YWx1ZSBjb21t YW5kIGluIHhsLgoKU2lnbmVkLW9mZi1ieTogWWkgU3VuIDx5aS55LnN1bkBsaW51eC5pbnRlbC5j b20+Ci0tLQpDQzogV2VpIExpdSA8d2VpLmxpdTJAY2l0cml4LmNvbT4KQ0M6IElhbiBKYWNrc29u IDxpYW4uamFja3NvbkBldS5jaXRyaXguY29tPgpDQzogUm9nZXIgUGF1IE1vbm7DqSA8cm9nZXIu cGF1QGNpdHJpeC5jb20+CkNDOiBDaGFvIFBlbmcgPGNoYW8ucC5wZW5nQGxpbnV4LmludGVsLmNv bT4KCnY0OgogICAgLSByZW1vdmUgJ0FMTE9DXycgZnJvbSBtYWNybyBuYW1lLgogICAgICAoc3Vn Z2VzdGVkIGJ5IFJvZ2VyIFBhdSBNb25uw6kpCiAgICAtIGFkanVzdCBwbGFjZSBvZiBhcmdjIGNo ZWNrIGFuZCByZXR1cm4gRVhJVF9GQUlMVVJFLgogICAgICAoc3VnZ2VzdGVkIGJ5IFJvZ2VyIFBh dSBNb25uw6kpCiAgICAtIGZpeCBpbmRlbnRhdGlvbiBpc3N1ZS4KICAgICAgKHN1Z2dlc3RlZCBi eSBSb2dlciBQYXUgTW9ubsOpKQogICAgLSBtb3ZlIHNhbWUgdHlwZSBsb2NhbCB2YXJpYWJsZXMg ZGVjbGFyYXRpb24gdG8gYSBzaW5nbGUgbGluZS4KICAgICAgKHN1Z2dlc3RlZCBieSBSb2dlciBQ YXUgTW9ubsOpKQp2MzoKICAgIC0gYWRkICdjb25zdCcgZm9yICdvcHRzW10nIGluICdtYWluX3Bz cl9tYmFfc2V0Jy4KICAgICAgKHN1Z2dlc3RlZCBieSBSb2dlciBQYXUgTW9ubsOpKQogICAgLSBy ZXBsYWNlICdsaWJ4bF9wc3JfY2JtX3R5cGUnIHRvICdsaWJ4bF9wc3JfdHlwZScgZm9yIG5ld2x5 IGRlZmluZWQKICAgICAgaW50ZXJmYWNlcy4KICAgICAgKHN1Z2dlc3RlZCBieSBSb2dlciBQYXUg TW9ubsOpKQotLS0KIHRvb2xzL2xpYnhjL2luY2x1ZGUveGVuY3RybC5oIHwgIDYgKystLS0KIHRv b2xzL2xpYnhjL3hjX3Bzci5jICAgICAgICAgIHwgIDkgKysrKy0tLQogdG9vbHMvbGlieGwvbGli eGxfcHNyLmMgICAgICAgfCA1NCArKysrKysrKysrKysrKysrKysrKystLS0tLS0tLS0tLS0tLS0t LS0tLS0KIHRvb2xzL3hsL3hsLmggICAgICAgICAgICAgICAgIHwgIDEgKwogdG9vbHMveGwveGxf Y21kdGFibGUuYyAgICAgICAgfCAgNiArKysrKwogdG9vbHMveGwveGxfcHNyLmMgICAgICAgICAg ICAgfCA1NSArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCiA2IGZp bGVzIGNoYW5nZWQsIDk4IGluc2VydGlvbnMoKyksIDMzIGRlbGV0aW9ucygtKQoKZGlmZiAtLWdp dCBhL3Rvb2xzL2xpYnhjL2luY2x1ZGUveGVuY3RybC5oIGIvdG9vbHMvbGlieGMvaW5jbHVkZS94 ZW5jdHJsLmgKaW5kZXggNzQ1YjJhNS4uYWU2YTQzNiAxMDA2NDQKLS0tIGEvdG9vbHMvbGlieGMv aW5jbHVkZS94ZW5jdHJsLmgKKysrIGIvdG9vbHMvbGlieGMvaW5jbHVkZS94ZW5jdHJsLmgKQEAg LTI0OTksOSArMjQ5OSw5IEBAIGludCB4Y19wc3JfY210X2dldF9kYXRhKHhjX2ludGVyZmFjZSAq eGNoLCB1aW50MzJfdCBybWlkLCB1aW50MzJfdCBjcHUsCiAgICAgICAgICAgICAgICAgICAgICAg ICB1aW50NjRfdCAqdHNjKTsKIGludCB4Y19wc3JfY210X2VuYWJsZWQoeGNfaW50ZXJmYWNlICp4 Y2gpOwogCi1pbnQgeGNfcHNyX2NhdF9zZXRfZG9tYWluX2RhdGEoeGNfaW50ZXJmYWNlICp4Y2gs IHVpbnQzMl90IGRvbWlkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhjX3Bzcl90 eXBlIHR5cGUsIHVpbnQzMl90IHRhcmdldCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICB1aW50NjRfdCBkYXRhKTsKK2ludCB4Y19wc3Jfc2V0X2RvbWFpbl9kYXRhKHhjX2ludGVyZmFj ZSAqeGNoLCB1aW50MzJfdCBkb21pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHhjX3Bz cl90eXBlIHR5cGUsIHVpbnQzMl90IHRhcmdldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg IHVpbnQ2NF90IGRhdGEpOwogaW50IHhjX3Bzcl9nZXRfZG9tYWluX2RhdGEoeGNfaW50ZXJmYWNl ICp4Y2gsIHVpbnQzMl90IGRvbWlkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgeGNfcHNy X3R5cGUgdHlwZSwgdWludDMyX3QgdGFyZ2V0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAg dWludDY0X3QgKmRhdGEpOwpkaWZmIC0tZ2l0IGEvdG9vbHMvbGlieGMveGNfcHNyLmMgYi90b29s cy9saWJ4Yy94Y19wc3IuYwppbmRleCA1NjYwZDUxLi5kZTljYTgyIDEwMDY0NAotLS0gYS90b29s cy9saWJ4Yy94Y19wc3IuYworKysgYi90b29scy9saWJ4Yy94Y19wc3IuYwpAQCAtMjQ4LDkgKzI0 OCw5IEBAIGludCB4Y19wc3JfY210X2VuYWJsZWQoeGNfaW50ZXJmYWNlICp4Y2gpCiAKICAgICBy ZXR1cm4gMDsKIH0KLWludCB4Y19wc3JfY2F0X3NldF9kb21haW5fZGF0YSh4Y19pbnRlcmZhY2Ug KnhjaCwgdWludDMyX3QgZG9taWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeGNf cHNyX3R5cGUgdHlwZSwgdWludDMyX3QgdGFyZ2V0LAotICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHVpbnQ2NF90IGRhdGEpCitpbnQgeGNfcHNyX3NldF9kb21haW5fZGF0YSh4Y19pbnRl cmZhY2UgKnhjaCwgdWludDMyX3QgZG9taWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICB4 Y19wc3JfdHlwZSB0eXBlLCB1aW50MzJfdCB0YXJnZXQsCisgICAgICAgICAgICAgICAgICAgICAg ICAgICB1aW50NjRfdCBkYXRhKQogewogICAgIERFQ0xBUkVfRE9NQ1RMOwogICAgIHVpbnQzMl90 IGNtZDsKQEAgLTI2OSw2ICsyNjksOSBAQCBpbnQgeGNfcHNyX2NhdF9zZXRfZG9tYWluX2RhdGEo eGNfaW50ZXJmYWNlICp4Y2gsIHVpbnQzMl90IGRvbWlkLAogICAgIGNhc2UgWENfUFNSX0NBVF9M Ml9DQk06CiAgICAgICAgIGNtZCA9IFhFTl9ET01DVExfUFNSX1NFVF9MMl9DQk07CiAgICAgICAg IGJyZWFrOworICAgIGNhc2UgWENfUFNSX01CQV9USFJUTDoKKyAgICAgICAgY21kID0gWEVOX0RP TUNUTF9QU1JfU0VUX01CQV9USFJUTDsKKyAgICAgICAgYnJlYWs7CiAgICAgZGVmYXVsdDoKICAg ICAgICAgZXJybm8gPSBFSU5WQUw7CiAgICAgICAgIHJldHVybiAtMTsKZGlmZiAtLWdpdCBhL3Rv b2xzL2xpYnhsL2xpYnhsX3Bzci5jIGIvdG9vbHMvbGlieGwvbGlieGxfcHNyLmMKaW5kZXggNWE0 YmEzZC4uODhmYTM5YyAxMDA2NDQKLS0tIGEvdG9vbHMvbGlieGwvbGlieGxfcHNyLmMKKysrIGIv dG9vbHMvbGlieGwvbGlieGxfcHNyLmMKQEAgLTMyNywzMiArMzI3LDcgQEAgaW50IGxpYnhsX3Bz cl9jYXRfc2V0X2NibShsaWJ4bF9jdHggKmN0eCwgdWludDMyX3QgZG9taWQsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgIGxpYnhsX3Bzcl9jYm1fdHlwZSB0eXBlLCBsaWJ4bF9iaXRtYXAgKnRh cmdldF9tYXAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ2NF90IGNibSkKIHsKLSAg ICBHQ19JTklUKGN0eCk7Ci0gICAgaW50IHJjOwotICAgIGludCBzb2NrZXRpZCwgbnJfc29ja2V0 czsKLQotICAgIHJjID0gbGlieGxfX2NvdW50X3BoeXNpY2FsX3NvY2tldHMoZ2MsICZucl9zb2Nr ZXRzKTsKLSAgICBpZiAocmMpIHsKLSAgICAgICAgTE9HRUQoRVJST1IsIGRvbWlkLCAiZmFpbGVk IHRvIGdldCBzeXN0ZW0gc29ja2V0IGNvdW50Iik7Ci0gICAgICAgIGdvdG8gb3V0OwotICAgIH0K LQotICAgIGxpYnhsX2Zvcl9lYWNoX3NldF9iaXQoc29ja2V0aWQsICp0YXJnZXRfbWFwKSB7Ci0g ICAgICAgIHhjX3Bzcl90eXBlIHhjX3R5cGUgPSBsaWJ4bF9fcHNyX3R5cGVfdG9fbGlieGNfcHNy X3R5cGUodHlwZSk7OwotCi0gICAgICAgIGlmIChzb2NrZXRpZCA+PSBucl9zb2NrZXRzKQotICAg ICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgaWYgKHhjX3Bzcl9jYXRfc2V0X2RvbWFpbl9kYXRh KGN0eC0+eGNoLCBkb21pZCwgeGNfdHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHNvY2tldGlkLCBjYm0pKSB7Ci0gICAgICAgICAgICBsaWJ4bF9fcHNyX2FsbG9j X2xvZ19lcnJfbXNnKGdjLCBlcnJubywgdHlwZSk7Ci0gICAgICAgICAgICByYyA9IEVSUk9SX0ZB SUw7Ci0gICAgICAgIH0KLSAgICB9Ci0KLW91dDoKLSAgICBHQ19GUkVFOwotICAgIHJldHVybiBy YzsKKyAgICByZXR1cm4gbGlieGxfcHNyX3NldF92YWwoY3R4LCBkb21pZCwgdHlwZSwgdGFyZ2V0 X21hcCwgY2JtKTsKIH0KIAogaW50IGxpYnhsX3Bzcl9jYXRfZ2V0X2NibShsaWJ4bF9jdHggKmN0 eCwgdWludDMyX3QgZG9taWQsCkBAIC00NTAsNyArNDI1LDMyIEBAIGludCBsaWJ4bF9wc3Jfc2V0 X3ZhbChsaWJ4bF9jdHggKmN0eCwgdWludDMyX3QgZG9taWQsCiAgICAgICAgICAgICAgICAgICAg ICAgbGlieGxfcHNyX3R5cGUgdHlwZSwgbGlieGxfYml0bWFwICp0YXJnZXRfbWFwLAogICAgICAg ICAgICAgICAgICAgICAgIHVpbnQ2NF90IHZhbCkKIHsKLSAgICByZXR1cm4gRVJST1JfRkFJTDsK KyAgICBHQ19JTklUKGN0eCk7CisgICAgaW50IHJjLCBzb2NrZXRpZCwgbnJfc29ja2V0czsKKwor ICAgIHJjID0gbGlieGxfX2NvdW50X3BoeXNpY2FsX3NvY2tldHMoZ2MsICZucl9zb2NrZXRzKTsK KyAgICBpZiAocmMpIHsKKyAgICAgICAgTE9HKEVSUk9SLCAiZmFpbGVkIHRvIGdldCBzeXN0ZW0g c29ja2V0IGNvdW50Iik7CisgICAgICAgIGdvdG8gb3V0OworICAgIH0KKworICAgIGxpYnhsX2Zv cl9lYWNoX3NldF9iaXQoc29ja2V0aWQsICp0YXJnZXRfbWFwKSB7CisgICAgICAgIHhjX3Bzcl90 eXBlIHhjX3R5cGU7CisKKyAgICAgICAgaWYgKHNvY2tldGlkID49IG5yX3NvY2tldHMpCisgICAg ICAgICAgICBicmVhazsKKworICAgICAgICB4Y190eXBlID0gbGlieGxfX3Bzcl90eXBlX3RvX2xp YnhjX3Bzcl90eXBlKHR5cGUpOworICAgICAgICBpZiAoeGNfcHNyX3NldF9kb21haW5fZGF0YShj dHgtPnhjaCwgZG9taWQsIHhjX3R5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHNvY2tldGlkLCB2YWwpKSB7CisgICAgICAgICAgICBsaWJ4bF9fcHNyX2FsbG9jX2xvZ19l cnJfbXNnKGdjLCBlcnJubywgdHlwZSk7CisgICAgICAgICAgICByYyA9IEVSUk9SX0ZBSUw7Cisg ICAgICAgIH0KKyAgICB9CisKK291dDoKKyAgICBHQ19GUkVFOworICAgIHJldHVybiByYzsKIH0K IAogaW50IGxpYnhsX3Bzcl9nZXRfdmFsKGxpYnhsX2N0eCAqY3R4LCB1aW50MzJfdCBkb21pZCwK ZGlmZiAtLWdpdCBhL3Rvb2xzL3hsL3hsLmggYi90b29scy94bC94bC5oCmluZGV4IDQ2NDgzMWUu Ljg5MzA5ZTcgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3hsL3hsLmgKKysrIGIvdG9vbHMveGwveGwuaApA QCAtMjA1LDYgKzIwNSw3IEBAIGludCBtYWluX3Bzcl9jbXRfZGV0YWNoKGludCBhcmdjLCBjaGFy ICoqYXJndik7CiBpbnQgbWFpbl9wc3JfY210X3Nob3coaW50IGFyZ2MsIGNoYXIgKiphcmd2KTsK IGludCBtYWluX3Bzcl9jYXRfY2JtX3NldChpbnQgYXJnYywgY2hhciAqKmFyZ3YpOwogaW50IG1h aW5fcHNyX2NhdF9zaG93KGludCBhcmdjLCBjaGFyICoqYXJndik7CitpbnQgbWFpbl9wc3JfbWJh X3NldChpbnQgYXJnYywgY2hhciAqKmFyZ3YpOwogaW50IG1haW5fcHNyX21iYV9zaG93KGludCBh cmdjLCBjaGFyICoqYXJndik7CiAjZW5kaWYKIGludCBtYWluX3FlbXVfbW9uaXRvcl9jb21tYW5k KGludCBhcmdjLCBjaGFyICoqYXJndik7CmRpZmYgLS1naXQgYS90b29scy94bC94bF9jbWR0YWJs ZS5jIGIvdG9vbHMveGwveGxfY21kdGFibGUuYwppbmRleCAzMTM2ZDcwLi5mYjIxMzE3IDEwMDY0 NAotLS0gYS90b29scy94bC94bF9jbWR0YWJsZS5jCisrKyBiL3Rvb2xzL3hsL3hsX2NtZHRhYmxl LmMKQEAgLTU2NSw2ICs1NjUsMTIgQEAgc3RydWN0IGNtZF9zcGVjIGNtZF90YWJsZVtdID0gewog ICAgICAgIltvcHRpb25zXSA8RG9tYWluPiIsCiAgICAgICAiLWwgPGxldmVsPiAgICAgICAgU3Bl Y2lmeSB0aGUgY2FjaGUgbGV2ZWwgdG8gcHJvY2Vzcywgb3RoZXJ3aXNlIEwzIGNhY2hlIGlzIHBy b2Nlc3NlZFxuIgogICAgIH0sCisgICAgeyAicHNyLW1iYS1zZXQiLAorICAgICAgJm1haW5fcHNy X21iYV9zZXQsIDAsIDEsCisgICAgICAiU2V0IHRocm90dGxpbmcgdmFsdWUgKFRIUlRMKSBmb3Ig YSBkb21haW4iLAorICAgICAgIltvcHRpb25zXSA8RG9tYWluPiA8VEhSVEw+IiwKKyAgICAgICIt cyA8c29ja2V0PiAgICAgICBTcGVjaWZ5IHRoZSBzb2NrZXQgdG8gcHJvY2Vzcywgb3RoZXJ3aXNl IGFsbCBzb2NrZXRzIGFyZSBwcm9jZXNzZWRcbiIKKyAgICB9LAogICAgIHsgInBzci1tYmEtc2hv dyIsCiAgICAgICAmbWFpbl9wc3JfbWJhX3Nob3csIDAsIDEsCiAgICAgICAiU2hvdyBNZW1vcnkg QmFuZHdpZHRoIEFsbG9jYXRpb24gaW5mb3JtYXRpb24iLApkaWZmIC0tZ2l0IGEvdG9vbHMveGwv eGxfcHNyLmMgYi90b29scy94bC94bF9wc3IuYwppbmRleCA0NmI3Nzg4Li42MGFhNjI4IDEwMDY0 NAotLS0gYS90b29scy94bC94bF9wc3IuYworKysgYi90b29scy94bC94bF9wc3IuYwpAQCAtNTUy LDYgKzU1Miw2MSBAQCBpbnQgbWFpbl9wc3JfbWJhX3Nob3coaW50IGFyZ2MsIGNoYXIgKiphcmd2 KQogICAgIHJldHVybiBwc3JfdmFsX3Nob3coZG9taWQsIExJQlhMX1BTUl9GRUFUX1RZUEVfTUJB LCAwKTsKIH0KIAoraW50IG1haW5fcHNyX21iYV9zZXQoaW50IGFyZ2MsIGNoYXIgKiphcmd2KQor eworICAgIHVpbnQzMl90IGRvbWlkOworICAgIGxpYnhsX3Bzcl90eXBlIHR5cGU7CisgICAgdWlu dDY0X3QgdGhydGw7CisgICAgaW50IHJldCwgb3B0ID0gMDsKKyAgICBsaWJ4bF9iaXRtYXAgdGFy Z2V0X21hcDsKKyAgICBjaGFyICp2YWx1ZTsKKyAgICBsaWJ4bF9zdHJpbmdfbGlzdCBzb2NrZXRf bGlzdDsKKyAgICB1bnNpZ25lZCBsb25nIHN0YXJ0LCBlbmQ7CisgICAgdW5zaWduZWQgaW50IGks IGosIGxlbjsKKworICAgIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgb3B0aW9uIG9wdHNbXSA9IHsKKyAg ICAgICAgeyJzb2NrZXQiLCAxLCAwLCAncyd9LAorICAgICAgICBDT01NT05fTE9OR19PUFRTCisg ICAgfTsKKworICAgIGlmIChhcmdjICE9IG9wdGluZCArIDIpIHsKKyAgICAgICAgaGVscCgicHNy LW1iYS1zZXQiKTsKKyAgICAgICAgcmV0dXJuIEVYSVRfRkFJTFVSRTsKKyAgICB9CisKKyAgICBs aWJ4bF9zb2NrZXRfYml0bWFwX2FsbG9jKGN0eCwgJnRhcmdldF9tYXAsIDApOworICAgIGxpYnhs X2JpdG1hcF9zZXRfbm9uZSgmdGFyZ2V0X21hcCk7CisKKyAgICBTV0lUQ0hfRk9SRUFDSF9PUFQo b3B0LCAiczoiLCBvcHRzLCAicHNyLW1iYS1zZXQiLCAwKSB7CisgICAgY2FzZSAncyc6CisgICAg ICAgIHRyaW0oaXNzcGFjZSwgb3B0YXJnLCAmdmFsdWUpOworICAgICAgICBzcGxpdF9zdHJpbmdf aW50b19zdHJpbmdfbGlzdCh2YWx1ZSwgIiwiLCAmc29ja2V0X2xpc3QpOworICAgICAgICBsZW4g PSBsaWJ4bF9zdHJpbmdfbGlzdF9sZW5ndGgoJnNvY2tldF9saXN0KTsKKyAgICAgICAgZm9yIChp ID0gMDsgaSA8IGxlbjsgaSsrKSB7CisgICAgICAgICAgICBwYXJzZV9yYW5nZShzb2NrZXRfbGlz dFtpXSwgJnN0YXJ0LCAmZW5kKTsKKyAgICAgICAgICAgIGZvciAoaiA9IHN0YXJ0OyBqIDw9IGVu ZDsgaisrKQorICAgICAgICAgICAgICAgIGxpYnhsX2JpdG1hcF9zZXQoJnRhcmdldF9tYXAsIGop OworICAgICAgICB9CisKKyAgICAgICAgbGlieGxfc3RyaW5nX2xpc3RfZGlzcG9zZSgmc29ja2V0 X2xpc3QpOworICAgICAgICBmcmVlKHZhbHVlKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisg ICAgdHlwZSA9IExJQlhMX1BTUl9DQk1fVFlQRV9NQkFfVEhSVEw7CisKKyAgICBpZiAobGlieGxf Yml0bWFwX2lzX2VtcHR5KCZ0YXJnZXRfbWFwKSkKKyAgICAgICAgbGlieGxfYml0bWFwX3NldF9h bnkoJnRhcmdldF9tYXApOworCisgICAgZG9taWQgPSBmaW5kX2RvbWFpbihhcmd2W29wdGluZF0p OworICAgIHRocnRsID0gc3RydG9sbChhcmd2W29wdGluZCArIDFdLCBOVUxMICwgMCk7CisKKyAg ICByZXQgPSBsaWJ4bF9wc3Jfc2V0X3ZhbChjdHgsIGRvbWlkLCB0eXBlLCAmdGFyZ2V0X21hcCwg dGhydGwpOworCisgICAgbGlieGxfYml0bWFwX2Rpc3Bvc2UoJnRhcmdldF9tYXApOworICAgIHJl dHVybiByZXQ7Cit9CisKIHN0YXRpYyBpbnQgcHNyX21iYV9od2luZm8odm9pZCkKIHsKICAgICBp bnQgcmM7Ci0tIAoxLjkuMQoKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fClhlbi1kZXZlbCBtYWlsaW5nIGxpc3QKWGVuLWRldmVsQGxpc3RzLnhlbi5vcmcK aHR0cHM6Ly9saXN0cy54ZW4ub3JnL3hlbi1kZXZlbAo=