From mboxrd@z Thu Jan 1 00:00:00 1970 From: Roger Pau Monne Subject: [PATCH v3 10/32] libxc: remove dead HVM building code Date: Fri, 3 Jul 2015 13:34:48 +0200 Message-ID: <1435923310-9019-11-git-send-email-roger.pau@citrix.com> References: <1435923310-9019-1-git-send-email-roger.pau@citrix.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail6.bemta14.messagelabs.com ([193.109.254.103]) by lists.xen.org with esmtp (Exim 4.72) (envelope-from ) id 1ZAzPM-0004V9-8I for xen-devel@lists.xenproject.org; Fri, 03 Jul 2015 11:45:28 +0000 In-Reply-To: <1435923310-9019-1-git-send-email-roger.pau@citrix.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xen.org Errors-To: xen-devel-bounces@lists.xen.org To: xen-devel@lists.xenproject.org Cc: Wei Liu , Stefano Stabellini , Ian Jackson , Ian Campbell , Roger Pau Monne List-Id: xen-devel@lists.xenproject.org UmVtb3ZlIHhjX2h2bV9idWlsZF94ODYuYyBhbmQgeGNfaHZtX2J1aWxkX2FybS5jIHNpbmNlIHhj X2h2bV9idWlsZCBpcyBub3QKbG9uZ2VyIHVzZWQgaW4gb3JkZXIgdG8gY3JlYXRlIEhWTSBndWVz dHMuCgpTaWduZWQtb2ZmLWJ5OiBSb2dlciBQYXUgTW9ubsOpIDxyb2dlci5wYXVAY2l0cml4LmNv bT4KQ2M6IElhbiBKYWNrc29uIDxpYW4uamFja3NvbkBldS5jaXRyaXguY29tPgpDYzogU3RlZmFu byBTdGFiZWxsaW5pIDxzdGVmYW5vLnN0YWJlbGxpbmlAZXUuY2l0cml4LmNvbT4KQ2M6IElhbiBD YW1wYmVsbCA8aWFuLmNhbXBiZWxsQGNpdHJpeC5jb20+CkNjOiBXZWkgTGl1IDx3ZWkubGl1MkBj aXRyaXguY29tPgotLS0KIHRvb2xzL2xpYnhjL01ha2VmaWxlICAgICAgICAgICAgICB8ICAgMiAt CiB0b29scy9saWJ4Yy9pbmNsdWRlL3hlbmd1ZXN0LmggICAgfCAgNDQgLS0tCiB0b29scy9saWJ4 Yy94Y19odm1fYnVpbGRfYXJtLmMgICAgfCAgNDkgLS0tCiB0b29scy9saWJ4Yy94Y19odm1fYnVp bGRfeDg2LmMgICAgfCA4MDUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K IHRvb2xzL2xpYnhjL3hnX3ByaXZhdGUuYyAgICAgICAgICB8ICAgOSAtCiB0b29scy9weXRob24v eGVuL2xvd2xldmVsL3hjL3hjLmMgfCAgODEgLS0tLQogNiBmaWxlcyBjaGFuZ2VkLCA5OTAgZGVs ZXRpb25zKC0pCiBkZWxldGUgbW9kZSAxMDA2NDQgdG9vbHMvbGlieGMveGNfaHZtX2J1aWxkX2Fy bS5jCiBkZWxldGUgbW9kZSAxMDA2NDQgdG9vbHMvbGlieGMveGNfaHZtX2J1aWxkX3g4Ni5jCgpk aWZmIC0tZ2l0IGEvdG9vbHMvbGlieGMvTWFrZWZpbGUgYi90b29scy9saWJ4Yy9NYWtlZmlsZQpp bmRleCA0OGZjNDczLi5hMTQzYzBmIDEwMDY0NAotLS0gYS90b29scy9saWJ4Yy9NYWtlZmlsZQor KysgYi90b29scy9saWJ4Yy9NYWtlZmlsZQpAQCAtOTQsOSArOTQsNyBAQCBHVUVTVF9TUkNTLXkg ICAgICAgICAgICAgICAgICs9IHhjX2RvbV9jb21wYXRfbGludXguYwogCiBHVUVTVF9TUkNTLSQo Q09ORklHX1g4NikgICAgICs9IHhjX2RvbV94ODYuYwogR1VFU1RfU1JDUy0kKENPTkZJR19YODYp ICAgICArPSB4Y19jcHVpZF94ODYuYwotR1VFU1RfU1JDUy0kKENPTkZJR19YODYpICAgICArPSB4 Y19odm1fYnVpbGRfeDg2LmMKIEdVRVNUX1NSQ1MtJChDT05GSUdfQVJNKSAgICAgKz0geGNfZG9t X2FybS5jCi1HVUVTVF9TUkNTLSQoQ09ORklHX0FSTSkgICAgICs9IHhjX2h2bV9idWlsZF9hcm0u YwogCiBpZmVxICgkKENPTkZJR19MSUJYQ19NSU5JT1MpLHkpCiBHVUVTVF9TUkNTLXkgICAgICAg ICAgICAgICAgICs9IHhjX2RvbV9kZWNvbXByZXNzX3Vuc2FmZS5jCmRpZmYgLS1naXQgYS90b29s cy9saWJ4Yy9pbmNsdWRlL3hlbmd1ZXN0LmggYi90b29scy9saWJ4Yy9pbmNsdWRlL3hlbmd1ZXN0 LmgKaW5kZXggNzU4MTI2My4uZDk2YmY3ZCAxMDA2NDQKLS0tIGEvdG9vbHMvbGlieGMvaW5jbHVk ZS94ZW5ndWVzdC5oCisrKyBiL3Rvb2xzL2xpYnhjL2luY2x1ZGUveGVuZ3Vlc3QuaApAQCAtMjMz LDUwICsyMzMsNiBAQCBzdHJ1Y3QgeGNfaHZtX2Zpcm13YXJlX21vZHVsZSB7CiAgICAgdWludDY0 X3QgIGd1ZXN0X2FkZHJfb3V0OwogfTsKIAotc3RydWN0IHhjX2h2bV9idWlsZF9hcmdzIHsKLSAg ICB1aW50NjRfdCBtZW1fc2l6ZTsgICAgICAgICAgIC8qIE1lbW9yeSBzaXplIGluIGJ5dGVzLiAq LwotICAgIHVpbnQ2NF90IG1lbV90YXJnZXQ7ICAgICAgICAgLyogTWVtb3J5IHRhcmdldCBpbiBi eXRlcy4gKi8KLSAgICB1aW50NjRfdCBtbWlvX3NpemU7ICAgICAgICAgIC8qIFNpemUgb2YgdGhl IE1NSU8gaG9sZSBpbiBieXRlcy4gKi8KLSAgICBjb25zdCBjaGFyICppbWFnZV9maWxlX25hbWU7 IC8qIEZpbGUgbmFtZSBvZiB0aGUgaW1hZ2UgdG8gbG9hZC4gKi8KLQotICAgIC8qIEV4dHJhIEFD UEkgdGFibGVzIHBhc3NlZCB0byBIVk1MT0FERVIgKi8KLSAgICBzdHJ1Y3QgeGNfaHZtX2Zpcm13 YXJlX21vZHVsZSBhY3BpX21vZHVsZTsKLQotICAgIC8qIEV4dHJhIFNNQklPUyBzdHJ1Y3R1cmVz IHBhc3NlZCB0byBIVk1MT0FERVIgKi8KLSAgICBzdHJ1Y3QgeGNfaHZtX2Zpcm13YXJlX21vZHVs ZSBzbWJpb3NfbW9kdWxlOwotICAgIC8qIFdoZXRoZXIgdG8gdXNlIGNsYWltIGh5cGVyY2FsbCAo MSAtIGVuYWJsZSwgMCAtIGRpc2FibGUpLiAqLwotICAgIGludCBjbGFpbV9lbmFibGVkOwotCi0g ICAgLyogdk5VTUEgaW5mb3JtYXRpb24qLwotICAgIHhlbl92bWVtcmFuZ2VfdCAqdm1lbXJhbmdl czsKLSAgICB1bnNpZ25lZCBpbnQgbnJfdm1lbXJhbmdlczsKLSAgICB1bnNpZ25lZCBpbnQgKnZu b2RlX3RvX3Bub2RlOwotICAgIHVuc2lnbmVkIGludCBucl92bm9kZXM7Ci0KLSAgICAvKiBPdXQg cGFyYW1ldGVycyAgKi8KLSAgICB1aW50NjRfdCBsb3dtZW1fZW5kOwotICAgIHVpbnQ2NF90IGhp Z2htZW1fZW5kOwotICAgIHVpbnQ2NF90IG1taW9fc3RhcnQ7Ci19OwotCi0vKioKLSAqIEJ1aWxk IGEgSFZNIGRvbWFpbi4KLSAqIEBwYXJtIHhjaCAgICAgIGxpYnhjIGNvbnRleHQgaGFuZGxlLgot ICogQHBhcm0gZG9taWQgICAgZG9tYWluIElEIGZvciB0aGUgbmV3IGRvbWFpbi4KLSAqIEBwYXJt IGh2bV9hcmdzIHBhcmFtZXRlcnMgZm9yIHRoZSBuZXcgZG9tYWluLgotICoKLSAqIFRoZSBtZW1v cnkgc2l6ZSBhbmQgaW1hZ2UgZmlsZSBwYXJhbWV0ZXJzIGFyZSByZXF1aXJlZCwgdGhlIHJlc3QK LSAqIGFyZSBvcHRpb25hbC4KLSAqLwotaW50IHhjX2h2bV9idWlsZCh4Y19pbnRlcmZhY2UgKnhj aCwgdWludDMyX3QgZG9taWQsCi0gICAgICAgICAgICAgICAgIHN0cnVjdCB4Y19odm1fYnVpbGRf YXJncyAqaHZtX2FyZ3MpOwotCi1pbnQgeGNfaHZtX2J1aWxkX3RhcmdldF9tZW0oeGNfaW50ZXJm YWNlICp4Y2gsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgZG9taWQsCi0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG1lbXNpemUsCi0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgaW50IHRhcmdldCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z dCBjaGFyICppbWFnZV9uYW1lKTsKLQogLyoKICAqIFNldHMgKmxvY2tmZCB0byAtMS4KICAqIEhh cyBkZWFsbG9jYXRlZCBldmVyeXRoaW5nIGV2ZW4gb24gZXJyb3IuCmRpZmYgLS1naXQgYS90b29s cy9saWJ4Yy94Y19odm1fYnVpbGRfYXJtLmMgYi90b29scy9saWJ4Yy94Y19odm1fYnVpbGRfYXJt LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZmNjY2ODkuLjAwMDAwMDAKLS0tIGEv dG9vbHMvbGlieGMveGNfaHZtX2J1aWxkX2FybS5jCisrKyAvZGV2L251bGwKQEAgLTEsNDkgKzAs MCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVy IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBh cyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsKLSAqIHZlcnNpb24g Mi4xIG9mIHRoZSBMaWNlbnNlLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBp biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdB UlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5U QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05V Ci0gKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoK LSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2Vu ZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwg d3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5r bGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQotICoK LSAqIENvcHlyaWdodCAoYykgMjAxMSwgQ2l0cml4IFN5c3RlbXMKLSAqLwotCi0jaW5jbHVkZSA8 aW50dHlwZXMuaD4KLSNpbmNsdWRlIDxlcnJuby5oPgotI2luY2x1ZGUgPHhlbmN0cmwuaD4KLSNp bmNsdWRlIDx4ZW5ndWVzdC5oPgotCi1pbnQgeGNfaHZtX2J1aWxkKHhjX2ludGVyZmFjZSAqeGNo LCB1aW50MzJfdCBkb21pZCwKLSAgICAgICAgICAgICAgICAgc3RydWN0IHhjX2h2bV9idWlsZF9h cmdzICpodm1fYXJncykKLXsKLSAgICBlcnJubyA9IEVOT1NZUzsKLSAgICByZXR1cm4gLTE7Ci19 Ci0KLWludCB4Y19odm1fYnVpbGRfdGFyZ2V0X21lbSh4Y19pbnRlcmZhY2UgKnhjaCwKLSAgICAg ICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IGRvbWlkLAotICAgICAgICAgICAgICAgICAg ICAgICAgICAgaW50IG1lbXNpemUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgdGFy Z2V0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqaW1hZ2VfbmFtZSkK LXsKLSAgICBlcnJubyA9IEVOT1NZUzsKLSAgICByZXR1cm4gLTE7Ci19Ci0KLS8qCi0gKiBMb2Nh bCB2YXJpYWJsZXM6Ci0gKiBtb2RlOiBDCi0gKiBjLWZpbGUtc3R5bGU6ICJCU0QiCi0gKiBjLWJh c2ljLW9mZnNldDogNAotICogdGFiLXdpZHRoOiA0Ci0gKiBpbmRlbnQtdGFicy1tb2RlOiBuaWwK LSAqIEVuZDoKLSAqLwpkaWZmIC0tZ2l0IGEvdG9vbHMvbGlieGMveGNfaHZtX2J1aWxkX3g4Ni5j IGIvdG9vbHMvbGlieGMveGNfaHZtX2J1aWxkX3g4Ni5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0 NAppbmRleCBmNzYxNmE4Li4wMDAwMDAwCi0tLSBhL3Rvb2xzL2xpYnhjL3hjX2h2bV9idWlsZF94 ODYuYworKysgL2Rldi9udWxsCkBAIC0xLDgwNSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqCi0gKiB4Y19odm1fYnVpbGQuYwotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3 YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0 aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMg cHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247Ci0gKiB2ZXJzaW9uIDIu MSBvZiB0aGUgTGljZW5zZS4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4g dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJS QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFC SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQot ICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0g KiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVy YWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdy aXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xp biBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKLSAqLwot Ci0jaW5jbHVkZSA8c3RkZGVmLmg+Ci0jaW5jbHVkZSA8aW50dHlwZXMuaD4KLSNpbmNsdWRlIDxz dGRsaWIuaD4KLSNpbmNsdWRlIDx1bmlzdGQuaD4KLSNpbmNsdWRlIDx6bGliLmg+Ci0KLSNpbmNs dWRlICJ4Z19wcml2YXRlLmgiCi0jaW5jbHVkZSAieGNfcHJpdmF0ZS5oIgotCi0jaW5jbHVkZSA8 eGVuL2ZvcmVpZ24veDg2XzMyLmg+Ci0jaW5jbHVkZSA8eGVuL2ZvcmVpZ24veDg2XzY0Lmg+Ci0j aW5jbHVkZSA8eGVuL2h2bS9odm1faW5mb190YWJsZS5oPgotI2luY2x1ZGUgPHhlbi9odm0vcGFy YW1zLmg+Ci0jaW5jbHVkZSA8eGVuL2h2bS9lODIwLmg+Ci0KLSNpbmNsdWRlIDx4ZW4vbGliZWxm L2xpYmVsZi5oPgotCi0jZGVmaW5lIFNVUEVSUEFHRV8yTUJfU0hJRlQgICA5Ci0jZGVmaW5lIFNV UEVSUEFHRV8yTUJfTlJfUEZOUyAoMVVMIDw8IFNVUEVSUEFHRV8yTUJfU0hJRlQpCi0jZGVmaW5l IFNVUEVSUEFHRV8xR0JfU0hJRlQgICAxOAotI2RlZmluZSBTVVBFUlBBR0VfMUdCX05SX1BGTlMg KDFVTCA8PCBTVVBFUlBBR0VfMUdCX1NISUZUKQotCi0jZGVmaW5lIFNQRUNJQUxQQUdFX1BBR0lO RyAgIDAKLSNkZWZpbmUgU1BFQ0lBTFBBR0VfQUNDRVNTICAgMQotI2RlZmluZSBTUEVDSUFMUEFH RV9TSEFSSU5HICAyCi0jZGVmaW5lIFNQRUNJQUxQQUdFX0JVRklPUkVRIDMKLSNkZWZpbmUgU1BF Q0lBTFBBR0VfWEVOU1RPUkUgNAotI2RlZmluZSBTUEVDSUFMUEFHRV9JT1JFUSAgICA1Ci0jZGVm aW5lIFNQRUNJQUxQQUdFX0lERU5UX1BUIDYKLSNkZWZpbmUgU1BFQ0lBTFBBR0VfQ09OU09MRSAg NwotI2RlZmluZSBOUl9TUEVDSUFMX1BBR0VTICAgICA4Ci0jZGVmaW5lIHNwZWNpYWxfcGZuKHgp ICgweGZmMDAwdSAtIE5SX1NQRUNJQUxfUEFHRVMgKyAoeCkpCi0KLSNkZWZpbmUgTlJfSU9SRVFf U0VSVkVSX1BBR0VTIDgKLSNkZWZpbmUgaW9yZXFfc2VydmVyX3Bmbih4KSAoc3BlY2lhbF9wZm4o MCkgLSBOUl9JT1JFUV9TRVJWRVJfUEFHRVMgKyAoeCkpCi0KLSNkZWZpbmUgVkdBX0hPTEVfU0la RSAoMHgyMCkKLQotc3RhdGljIGludCBtb2R1bGVzX2luaXQoc3RydWN0IHhjX2h2bV9idWlsZF9h cmdzICphcmdzLAotICAgICAgICAgICAgICAgICAgICAgICAgdWludDY0X3QgdmVuZCwgc3RydWN0 IGVsZl9iaW5hcnkgKmVsZiwKLSAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ2NF90ICptc3Rh cnRfb3V0LCB1aW50NjRfdCAqbWVuZF9vdXQpCi17Ci0jZGVmaW5lIE1PRFVMRV9BTElHTiAxVUwg PDwgNwotI2RlZmluZSBNQl9BTElHTiAgICAgMVVMIDw8IDIwCi0jZGVmaW5lIE1LQUxJR04oeCwg YSkgKCgodWludDY0X3QpKHgpICsgKGEpIC0gMSkgJiB+KHVpbnQ2NF90KSgoYSkgLSAxKSkKLSAg ICB1aW50NjRfdCB0b3RhbF9sZW4gPSAwLCBvZmZzZXQxID0gMDsKLQotICAgIGlmICggKGFyZ3Mt PmFjcGlfbW9kdWxlLmxlbmd0aCA9PSAwKSYmKGFyZ3MtPnNtYmlvc19tb2R1bGUubGVuZ3RoID09 IDApICkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICAvKiBGaW5kIHRoZSB0b3RhbCBsZW5ndGgg Zm9yIHRoZSBmaXJtd2FyZSBtb2R1bGVzIHdpdGggYSByZWFzb25hYmxlIGxhcmdlCi0gICAgICog YWxpZ25tZW50IHNpemUgdG8gYWxpZ24gZWFjaCB0aGUgbW9kdWxlcy4KLSAgICAgKi8KLSAgICB0 b3RhbF9sZW4gPSBNS0FMSUdOKGFyZ3MtPmFjcGlfbW9kdWxlLmxlbmd0aCwgTU9EVUxFX0FMSUdO KTsKLSAgICBvZmZzZXQxID0gdG90YWxfbGVuOwotICAgIHRvdGFsX2xlbiArPSBNS0FMSUdOKGFy Z3MtPnNtYmlvc19tb2R1bGUubGVuZ3RoLCBNT0RVTEVfQUxJR04pOwotCi0gICAgLyogV2FudCB0 byBwbGFjZSB0aGUgbW9kdWxlcyAxTWIrY2hhbmdlIGJlaGluZCB0aGUgbG9hZGVyIGltYWdlLiAq LwotICAgICptc3RhcnRfb3V0ID0gTUtBTElHTihlbGYtPnBlbmQsIE1CX0FMSUdOKSArIChNQl9B TElHTik7Ci0gICAgKm1lbmRfb3V0ID0gKm1zdGFydF9vdXQgKyB0b3RhbF9sZW47Ci0KLSAgICBp ZiAoICptZW5kX291dCA+IHZlbmQgKSAgICAKLSAgICAgICAgcmV0dXJuIC0xOwotCi0gICAgaWYg KCBhcmdzLT5hY3BpX21vZHVsZS5sZW5ndGggIT0gMCApCi0gICAgICAgIGFyZ3MtPmFjcGlfbW9k dWxlLmd1ZXN0X2FkZHJfb3V0ID0gKm1zdGFydF9vdXQ7Ci0gICAgaWYgKCBhcmdzLT5zbWJpb3Nf bW9kdWxlLmxlbmd0aCAhPSAwICkKLSAgICAgICAgYXJncy0+c21iaW9zX21vZHVsZS5ndWVzdF9h ZGRyX291dCA9ICptc3RhcnRfb3V0ICsgb2Zmc2V0MTsKLQotICAgIHJldHVybiAwOwotfQotCi1z dGF0aWMgdm9pZCBidWlsZF9odm1faW5mbyh2b2lkICpodm1faW5mb19wYWdlLAotICAgICAgICAg ICAgICAgICAgICAgICAgICAgc3RydWN0IHhjX2h2bV9idWlsZF9hcmdzICphcmdzKQotewotICAg IHN0cnVjdCBodm1faW5mb190YWJsZSAqaHZtX2luZm8gPSAoc3RydWN0IGh2bV9pbmZvX3RhYmxl ICopCi0gICAgICAgICgoKHVuc2lnbmVkIGNoYXIgKilodm1faW5mb19wYWdlKSArIEhWTV9JTkZP X09GRlNFVCk7Ci0gICAgdWludDhfdCBzdW07Ci0gICAgaW50IGk7Ci0KLSAgICBtZW1zZXQoaHZt X2luZm9fcGFnZSwgMCwgUEFHRV9TSVpFKTsKLQotICAgIC8qIEZpbGwgaW4gdGhlIGhlYWRlci4g Ki8KLSAgICBzdHJuY3B5KGh2bV9pbmZvLT5zaWduYXR1cmUsICJIVk0gSU5GTyIsIDgpOwotICAg IGh2bV9pbmZvLT5sZW5ndGggPSBzaXplb2Yoc3RydWN0IGh2bV9pbmZvX3RhYmxlKTsKLQotICAg IC8qIFNlbnNpYmxlIGRlZmF1bHRzOiB0aGVzZSBjYW4gYmUgb3ZlcnJpZGRlbiBieSB0aGUgY2Fs bGVyLiAqLwotICAgIGh2bV9pbmZvLT5hcGljX21vZGUgPSAxOwotICAgIGh2bV9pbmZvLT5ucl92 Y3B1cyA9IDE7Ci0gICAgbWVtc2V0KGh2bV9pbmZvLT52Y3B1X29ubGluZSwgMHhmZiwgc2l6ZW9m KGh2bV9pbmZvLT52Y3B1X29ubGluZSkpOwotCi0gICAgLyogTWVtb3J5IHBhcmFtZXRlcnMuICov Ci0gICAgaHZtX2luZm8tPmxvd19tZW1fcGdlbmQgPSBhcmdzLT5sb3dtZW1fZW5kID4+IFBBR0Vf U0hJRlQ7Ci0gICAgaHZtX2luZm8tPmhpZ2hfbWVtX3BnZW5kID0gYXJncy0+aGlnaG1lbV9lbmQg Pj4gUEFHRV9TSElGVDsKLSAgICBodm1faW5mby0+cmVzZXJ2ZWRfbWVtX3Bnc3RhcnQgPSBpb3Jl cV9zZXJ2ZXJfcGZuKDApOwotCi0gICAgLyogRmluaXNoIHdpdGggdGhlIGNoZWNrc3VtLiAqLwot ICAgIGZvciAoIGkgPSAwLCBzdW0gPSAwOyBpIDwgaHZtX2luZm8tPmxlbmd0aDsgaSsrICkKLSAg ICAgICAgc3VtICs9ICgodWludDhfdCAqKWh2bV9pbmZvKVtpXTsKLSAgICBodm1faW5mby0+Y2hl Y2tzdW0gPSAtc3VtOwotfQotCi1zdGF0aWMgaW50IGxvYWRlbGZpbWFnZSh4Y19pbnRlcmZhY2Ug KnhjaCwgc3RydWN0IGVsZl9iaW5hcnkgKmVsZiwKLSAgICAgICAgICAgICAgICAgICAgICAgIHVp bnQzMl90IGRvbSwgdW5zaWduZWQgbG9uZyAqcGFycmF5KQotewotICAgIHByaXZjbWRfbW1hcF9l bnRyeV90ICplbnRyaWVzID0gTlVMTDsKLSAgICB1bnNpZ25lZCBsb25nIHBmbl9zdGFydCA9IGVs Zi0+cHN0YXJ0ID4+IFBBR0VfU0hJRlQ7Ci0gICAgdW5zaWduZWQgbG9uZyBwZm5fZW5kID0gKGVs Zi0+cGVuZCArIFBBR0VfU0laRSAtIDEpID4+IFBBR0VfU0hJRlQ7Ci0gICAgc2l6ZV90IHBhZ2Vz ID0gcGZuX2VuZCAtIHBmbl9zdGFydDsKLSAgICBpbnQgaSwgcmMgPSAtMTsKLQotICAgIC8qIE1h cCBhZGRyZXNzIHNwYWNlIGZvciBpbml0aWFsIGVsZiBpbWFnZS4gKi8KLSAgICBlbnRyaWVzID0g Y2FsbG9jKHBhZ2VzLCBzaXplb2YocHJpdmNtZF9tbWFwX2VudHJ5X3QpKTsKLSAgICBpZiAoIGVu dHJpZXMgPT0gTlVMTCApCi0gICAgICAgIGdvdG8gZXJyOwotCi0gICAgZm9yICggaSA9IDA7IGkg PCBwYWdlczsgaSsrICkKLSAgICAgICAgZW50cmllc1tpXS5tZm4gPSBwYXJyYXlbKGVsZi0+cHN0 YXJ0ID4+IFBBR0VfU0hJRlQpICsgaV07Ci0KLSAgICBlbGYtPmRlc3RfYmFzZSA9IHhjX21hcF9m b3JlaWduX3JhbmdlcygKLSAgICAgICAgeGNoLCBkb20sIHBhZ2VzIDw8IFBBR0VfU0hJRlQsIFBS T1RfUkVBRCB8IFBST1RfV1JJVEUsIDEgPDwgUEFHRV9TSElGVCwKLSAgICAgICAgZW50cmllcywg cGFnZXMpOwotICAgIGlmICggZWxmLT5kZXN0X2Jhc2UgPT0gTlVMTCApCi0gICAgICAgIGdvdG8g ZXJyOwotICAgIGVsZi0+ZGVzdF9zaXplID0gcGFnZXMgKiBQQUdFX1NJWkU7Ci0KLSAgICBFTEZf QURWQU5DRV9ERVNUKGVsZiwgZWxmLT5wc3RhcnQgJiAoUEFHRV9TSVpFIC0gMSkpOwotCi0gICAg LyogTG9hZCB0aGUgaW5pdGlhbCBlbGYgaW1hZ2UuICovCi0gICAgcmMgPSBlbGZfbG9hZF9iaW5h cnkoZWxmKTsKLSAgICBpZiAoIHJjIDwgMCApCi0gICAgICAgIFBFUlJPUigiRmFpbGVkIHRvIGxv YWQgZWxmIGJpbmFyeVxuIik7Ci0KLSAgICBtdW5tYXAoZWxmLT5kZXN0X2Jhc2UsIHBhZ2VzIDw8 IFBBR0VfU0hJRlQpOwotICAgIGVsZi0+ZGVzdF9iYXNlID0gTlVMTDsKLSAgICBlbGYtPmRlc3Rf c2l6ZSA9IDA7Ci0KLSBlcnI6Ci0gICAgZnJlZShlbnRyaWVzKTsKLQotICAgIHJldHVybiByYzsK LX0KLQotc3RhdGljIGludCBsb2FkbW9kdWxlcyh4Y19pbnRlcmZhY2UgKnhjaCwKLSAgICAgICAg ICAgICAgICAgICAgICAgc3RydWN0IHhjX2h2bV9idWlsZF9hcmdzICphcmdzLAotICAgICAgICAg ICAgICAgICAgICAgICB1aW50NjRfdCBtc3RhcnQsIHVpbnQ2NF90IG1lbmQsCi0gICAgICAgICAg ICAgICAgICAgICAgIHVpbnQzMl90IGRvbSwgdW5zaWduZWQgbG9uZyAqcGFycmF5KQotewotICAg IHByaXZjbWRfbW1hcF9lbnRyeV90ICplbnRyaWVzID0gTlVMTDsKLSAgICB1bnNpZ25lZCBsb25n IHBmbl9zdGFydDsKLSAgICB1bnNpZ25lZCBsb25nIHBmbl9lbmQ7Ci0gICAgc2l6ZV90IHBhZ2Vz OwotICAgIHVpbnQzMl90IGk7Ci0gICAgdWludDhfdCAqZGVzdDsKLSAgICBpbnQgcmMgPSAtMTsK LQotICAgIGlmICggKG1zdGFydCA9PSAwKXx8KG1lbmQgPT0gMCkgKQotICAgICAgICByZXR1cm4g MDsKLQotICAgIHBmbl9zdGFydCA9ICh1bnNpZ25lZCBsb25nKShtc3RhcnQgPj4gUEFHRV9TSElG VCk7Ci0gICAgcGZuX2VuZCA9ICh1bnNpZ25lZCBsb25nKSgobWVuZCArIFBBR0VfU0laRSAtIDEp ID4+IFBBR0VfU0hJRlQpOwotICAgIHBhZ2VzID0gcGZuX2VuZCAtIHBmbl9zdGFydDsKLQotICAg IC8qIE1hcCBhZGRyZXNzIHNwYWNlIGZvciBtb2R1bGUgbGlzdC4gKi8KLSAgICBlbnRyaWVzID0g Y2FsbG9jKHBhZ2VzLCBzaXplb2YocHJpdmNtZF9tbWFwX2VudHJ5X3QpKTsKLSAgICBpZiAoIGVu dHJpZXMgPT0gTlVMTCApCi0gICAgICAgIGdvdG8gZXJyb3Jfb3V0OwotCi0gICAgZm9yICggaSA9 IDA7IGkgPCBwYWdlczsgaSsrICkKLSAgICAgICAgZW50cmllc1tpXS5tZm4gPSBwYXJyYXlbKG1z dGFydCA+PiBQQUdFX1NISUZUKSArIGldOwotCi0gICAgZGVzdCA9IHhjX21hcF9mb3JlaWduX3Jh bmdlcygKLSAgICAgICAgeGNoLCBkb20sIHBhZ2VzIDw8IFBBR0VfU0hJRlQsIFBST1RfUkVBRCB8 IFBST1RfV1JJVEUsIDEgPDwgUEFHRV9TSElGVCwKLSAgICAgICAgZW50cmllcywgcGFnZXMpOwot ICAgIGlmICggZGVzdCA9PSBOVUxMICkKLSAgICAgICAgZ290byBlcnJvcl9vdXQ7Ci0KLSAgICAv KiBaZXJvIHRoZSByYW5nZSBzbyBwYWRkaW5nIGlzIGNsZWFyIGJldHdlZW4gbW9kdWxlcyAqLwot ICAgIG1lbXNldChkZXN0LCAwLCBwYWdlcyA8PCBQQUdFX1NISUZUKTsKLQotICAgIC8qIExvYWQg bW9kdWxlcyBpbnRvIHJhbmdlICovICAgIAotICAgIGlmICggYXJncy0+YWNwaV9tb2R1bGUubGVu Z3RoICE9IDAgKQotICAgIHsKLSAgICAgICAgbWVtY3B5KGRlc3QsCi0gICAgICAgICAgICAgICBh cmdzLT5hY3BpX21vZHVsZS5kYXRhLAotICAgICAgICAgICAgICAgYXJncy0+YWNwaV9tb2R1bGUu bGVuZ3RoKTsKLSAgICB9Ci0gICAgaWYgKCBhcmdzLT5zbWJpb3NfbW9kdWxlLmxlbmd0aCAhPSAw ICkKLSAgICB7Ci0gICAgICAgIG1lbWNweShkZXN0ICsgKGFyZ3MtPnNtYmlvc19tb2R1bGUuZ3Vl c3RfYWRkcl9vdXQgLSBtc3RhcnQpLAotICAgICAgICAgICAgICAgYXJncy0+c21iaW9zX21vZHVs ZS5kYXRhLAotICAgICAgICAgICAgICAgYXJncy0+c21iaW9zX21vZHVsZS5sZW5ndGgpOwotICAg IH0KLQotICAgIG11bm1hcChkZXN0LCBwYWdlcyA8PCBQQUdFX1NISUZUKTsKLSAgICByYyA9IDA7 Ci0KLSBlcnJvcl9vdXQ6Ci0gICAgZnJlZShlbnRyaWVzKTsKLQotICAgIHJldHVybiByYzsKLX0K LQotLyoKLSAqIENoZWNrIHdoZXRoZXIgdGhlcmUgZXhpc3RzIG1taW8gaG9sZSBpbiB0aGUgc3Bl Y2lmaWVkIG1lbW9yeSByYW5nZS4KLSAqIFJldHVybnMgMSBpZiBleGlzdHMsIGVsc2UgcmV0dXJu cyAwLgotICovCi1zdGF0aWMgaW50IGNoZWNrX21taW9faG9sZSh1aW50NjRfdCBzdGFydCwgdWlu dDY0X3QgbWVtc2l6ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ2NF90IG1taW9f c3RhcnQsIHVpbnQ2NF90IG1taW9fc2l6ZSkKLXsKLSAgICBpZiAoIHN0YXJ0ICsgbWVtc2l6ZSA8 PSBtbWlvX3N0YXJ0IHx8IHN0YXJ0ID49IG1taW9fc3RhcnQgKyBtbWlvX3NpemUgKQotICAgICAg ICByZXR1cm4gMDsKLSAgICBlbHNlCi0gICAgICAgIHJldHVybiAxOwotfQotCi1zdGF0aWMgaW50 IHhjX2h2bV9wb3B1bGF0ZV9tZW1vcnkoeGNfaW50ZXJmYWNlICp4Y2gsIHVpbnQzMl90IGRvbSwK LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgeGNfaHZtX2J1aWxkX2Fy Z3MgKmFyZ3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeGVuX3Bmbl90ICpw YWdlX2FycmF5KQotewotICAgIHVuc2lnbmVkIGxvbmcgaSwgdm1lbWlkLCBucl9wYWdlcyA9IGFy Z3MtPm1lbV9zaXplID4+IFBBR0VfU0hJRlQ7Ci0gICAgdW5zaWduZWQgbG9uZyBwMm1fc2l6ZTsK LSAgICB1bnNpZ25lZCBsb25nIHRhcmdldF9wYWdlcyA9IGFyZ3MtPm1lbV90YXJnZXQgPj4gUEFH RV9TSElGVDsKLSAgICB1bnNpZ25lZCBsb25nIGN1cl9wYWdlcywgY3VyX3BmbjsKLSAgICBpbnQg cmM7Ci0gICAgeGVuX2NhcGFiaWxpdGllc19pbmZvX3QgY2FwczsKLSAgICB1bnNpZ25lZCBsb25n IHN0YXRfbm9ybWFsX3BhZ2VzID0gMCwgc3RhdF8ybWJfcGFnZXMgPSAwLCAKLSAgICAgICAgc3Rh dF8xZ2JfcGFnZXMgPSAwOwotICAgIHVuc2lnbmVkIGludCBtZW1mbGFncyA9IDA7Ci0gICAgaW50 IGNsYWltX2VuYWJsZWQgPSBhcmdzLT5jbGFpbV9lbmFibGVkOwotICAgIHVpbnQ2NF90IHRvdGFs X3BhZ2VzOwotICAgIHhlbl92bWVtcmFuZ2VfdCBkdW1teV92bWVtcmFuZ2VbMl07Ci0gICAgdW5z aWduZWQgaW50IGR1bW15X3Zub2RlX3RvX3Bub2RlWzFdOwotICAgIHhlbl92bWVtcmFuZ2VfdCAq dm1lbXJhbmdlczsKLSAgICB1bnNpZ25lZCBpbnQgKnZub2RlX3RvX3Bub2RlOwotICAgIHVuc2ln bmVkIGludCBucl92bWVtcmFuZ2VzLCBucl92bm9kZXM7Ci0KLSAgICBpZiAoIG5yX3BhZ2VzID4g dGFyZ2V0X3BhZ2VzICkKLSAgICAgICAgbWVtZmxhZ3MgfD0gWEVOTUVNRl9wb3B1bGF0ZV9vbl9k ZW1hbmQ7Ci0KLSAgICBpZiAoIGFyZ3MtPm5yX3ZtZW1yYW5nZXMgPT0gMCApCi0gICAgewotICAg ICAgICAvKiBCdWlsZCBkdW1teSB2bm9kZSBpbmZvcm1hdGlvbgotICAgICAgICAgKgotICAgICAg ICAgKiBHdWVzdCBwaHlzaWNhbCBhZGRyZXNzIHNwYWNlIGxheW91dDoKLSAgICAgICAgICogWzAs IGhvbGVfc3RhcnQpIFtob2xlX3N0YXJ0LCA0RykgWzRHLCBoaWdobWVtX2VuZCkKLSAgICAgICAg ICoKLSAgICAgICAgICogT2YgY291cnNlIGlmIHRoZXJlIGlzIG5vIGhpZ2ggbWVtb3J5LCB0aGUg c2Vjb25kIHZtZW1yYW5nZQotICAgICAgICAgKiBoYXMgbm8gZWZmZWN0IG9uIHRoZSBhY3R1YWwg cmVzdWx0LgotICAgICAgICAgKi8KLQotICAgICAgICBkdW1teV92bWVtcmFuZ2VbMF0uc3RhcnQg PSAwOwotICAgICAgICBkdW1teV92bWVtcmFuZ2VbMF0uZW5kICAgPSBhcmdzLT5sb3dtZW1fZW5k OwotICAgICAgICBkdW1teV92bWVtcmFuZ2VbMF0uZmxhZ3MgPSAwOwotICAgICAgICBkdW1teV92 bWVtcmFuZ2VbMF0ubmlkICAgPSAwOwotICAgICAgICBucl92bWVtcmFuZ2VzID0gMTsKLQotICAg ICAgICBpZiAoIGFyZ3MtPmhpZ2htZW1fZW5kID4gKDFVTEwgPDwgMzIpICkKLSAgICAgICAgewot ICAgICAgICAgICAgZHVtbXlfdm1lbXJhbmdlWzFdLnN0YXJ0ID0gMVVMTCA8PCAzMjsKLSAgICAg ICAgICAgIGR1bW15X3ZtZW1yYW5nZVsxXS5lbmQgICA9IGFyZ3MtPmhpZ2htZW1fZW5kOwotICAg ICAgICAgICAgZHVtbXlfdm1lbXJhbmdlWzFdLmZsYWdzID0gMDsKLSAgICAgICAgICAgIGR1bW15 X3ZtZW1yYW5nZVsxXS5uaWQgICA9IDA7Ci0KLSAgICAgICAgICAgIG5yX3ZtZW1yYW5nZXMrKzsK LSAgICAgICAgfQotCi0gICAgICAgIGR1bW15X3Zub2RlX3RvX3Bub2RlWzBdID0gWENfTlVNQV9O T19OT0RFOwotICAgICAgICBucl92bm9kZXMgPSAxOwotICAgICAgICB2bWVtcmFuZ2VzID0gZHVt bXlfdm1lbXJhbmdlOwotICAgICAgICB2bm9kZV90b19wbm9kZSA9IGR1bW15X3Zub2RlX3RvX3Bu b2RlOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgICBpZiAoIG5yX3BhZ2VzID4gdGFy Z2V0X3BhZ2VzICkKLSAgICAgICAgewotICAgICAgICAgICAgUEVSUk9SKCJDYW5ub3QgZW5hYmxl IHZOVU1BIGFuZCBQb0QgYXQgdGhlIHNhbWUgdGltZSIpOwotICAgICAgICAgICAgZ290byBlcnJv cl9vdXQ7Ci0gICAgICAgIH0KLQotICAgICAgICBucl92bWVtcmFuZ2VzID0gYXJncy0+bnJfdm1l bXJhbmdlczsKLSAgICAgICAgbnJfdm5vZGVzID0gYXJncy0+bnJfdm5vZGVzOwotICAgICAgICB2 bWVtcmFuZ2VzID0gYXJncy0+dm1lbXJhbmdlczsKLSAgICAgICAgdm5vZGVfdG9fcG5vZGUgPSBh cmdzLT52bm9kZV90b19wbm9kZTsKLSAgICB9Ci0KLSAgICB0b3RhbF9wYWdlcyA9IDA7Ci0gICAg cDJtX3NpemUgPSAwOwotICAgIGZvciAoIGkgPSAwOyBpIDwgbnJfdm1lbXJhbmdlczsgaSsrICkK LSAgICB7Ci0gICAgICAgIHRvdGFsX3BhZ2VzICs9ICgodm1lbXJhbmdlc1tpXS5lbmQgLSB2bWVt cmFuZ2VzW2ldLnN0YXJ0KQotICAgICAgICAgICAgICAgICAgICAgICAgPj4gUEFHRV9TSElGVCk7 Ci0gICAgICAgIHAybV9zaXplID0gcDJtX3NpemUgPiAodm1lbXJhbmdlc1tpXS5lbmQgPj4gUEFH RV9TSElGVCkgPwotICAgICAgICAgICAgcDJtX3NpemUgOiAodm1lbXJhbmdlc1tpXS5lbmQgPj4g UEFHRV9TSElGVCk7Ci0gICAgfQotCi0gICAgaWYgKCB0b3RhbF9wYWdlcyAhPSAoYXJncy0+bWVt X3NpemUgPj4gUEFHRV9TSElGVCkgKQotICAgIHsKLSAgICAgICAgUEVSUk9SKCJ2TlVNQSBtZW1v cnkgcGFnZXMgbWlzbWF0Y2ggKDB4JSJQUkl4NjQiICE9IDB4JSJQUkl4NjQiKSIsCi0gICAgICAg ICAgICAgICB0b3RhbF9wYWdlcywgYXJncy0+bWVtX3NpemUgPj4gUEFHRV9TSElGVCk7Ci0gICAg ICAgIGdvdG8gZXJyb3Jfb3V0OwotICAgIH0KLQotICAgIGlmICggeGNfdmVyc2lvbih4Y2gsIFhF TlZFUl9jYXBhYmlsaXRpZXMsICZjYXBzKSAhPSAwICkKLSAgICB7Ci0gICAgICAgIFBFUlJPUigi Q291bGQgbm90IGdldCBYZW4gY2FwYWJpbGl0aWVzIik7Ci0gICAgICAgIGdvdG8gZXJyb3Jfb3V0 OwotICAgIH0KLQotICAgIGZvciAoIGkgPSAwOyBpIDwgcDJtX3NpemU7IGkrKyApCi0gICAgICAg IHBhZ2VfYXJyYXlbaV0gPSAoKHhlbl9wZm5fdCktMSk7Ci0gICAgZm9yICggdm1lbWlkID0gMDsg dm1lbWlkIDwgbnJfdm1lbXJhbmdlczsgdm1lbWlkKysgKQotICAgIHsKLSAgICAgICAgdWludDY0 X3QgcGZuOwotCi0gICAgICAgIGZvciAoIHBmbiA9IHZtZW1yYW5nZXNbdm1lbWlkXS5zdGFydCA+ PiBQQUdFX1NISUZUOwotICAgICAgICAgICAgICBwZm4gPCB2bWVtcmFuZ2VzW3ZtZW1pZF0uZW5k ID4+IFBBR0VfU0hJRlQ7Ci0gICAgICAgICAgICAgIHBmbisrICkKLSAgICAgICAgICAgIHBhZ2Vf YXJyYXlbcGZuXSA9IHBmbjsKLSAgICB9Ci0KLSAgICAvKgotICAgICAqIFRyeSB0byBjbGFpbSBw YWdlcyBmb3IgZWFybHkgd2FybmluZyBvZiBpbnN1ZmZpY2llbnQgbWVtb3J5IGF2YWlsYWJsZS4K LSAgICAgKiBUaGlzIHNob3VsZCBnbyBiZWZvcmUgeGNfZG9tYWluX3NldF9wb2RfdGFyZ2V0LCBi ZWN1YXNlIHRoYXQgZnVuY3Rpb24KLSAgICAgKiBhY3R1YWxseSBhbGxvY2F0ZXMgbWVtb3J5IGZv ciB0aGUgZ3Vlc3QuIENsYWltaW5nIGFmdGVyIG1lbW9yeSBoYXMgYmVlbgotICAgICAqIGFsbG9j YXRlZCBpcyBwb2ludGxlc3MuCi0gICAgICovCi0gICAgaWYgKCBjbGFpbV9lbmFibGVkICkgewot ICAgICAgICByYyA9IHhjX2RvbWFpbl9jbGFpbV9wYWdlcyh4Y2gsIGRvbSwgdGFyZ2V0X3BhZ2Vz IC0gVkdBX0hPTEVfU0laRSk7Ci0gICAgICAgIGlmICggcmMgIT0gMCApCi0gICAgICAgIHsKLSAg ICAgICAgICAgIFBFUlJPUigiQ291bGQgbm90IGFsbG9jYXRlIG1lbW9yeSBmb3IgSFZNIGd1ZXN0 IGFzIHdlIGNhbm5vdCBjbGFpbSBtZW1vcnkhIik7Ci0gICAgICAgICAgICBnb3RvIGVycm9yX291 dDsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGlmICggbWVtZmxhZ3MgJiBYRU5NRU1GX3BvcHVs YXRlX29uX2RlbWFuZCApCi0gICAgewotICAgICAgICAvKgotICAgICAgICAgKiBTdWJ0cmFjdCBW R0FfSE9MRV9TSVpFIGZyb20gdGFyZ2V0X3BhZ2VzIGZvciB0aGUgVkdBCi0gICAgICAgICAqICJo b2xlIi4gIFhlbiB3aWxsIGFkanVzdCB0aGUgUG9EIGNhY2hlIHNpemUgc28gdGhhdCBkb21haW4K LSAgICAgICAgICogdG90X3BhZ2VzIHdpbGwgYmUgdGFyZ2V0X3BhZ2VzIC0gVkdBX0hPTEVfU0la RSBhZnRlcgotICAgICAgICAgKiB0aGlzIGNhbGwuCi0gICAgICAgICAqLwotICAgICAgICByYyA9 IHhjX2RvbWFpbl9zZXRfcG9kX3RhcmdldCh4Y2gsIGRvbSwKLSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgdGFyZ2V0X3BhZ2VzIC0gVkdBX0hPTEVfU0laRSwKLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwgTlVMTCwgTlVMTCk7Ci0gICAgICAg IGlmICggcmMgIT0gMCApCi0gICAgICAgIHsKLSAgICAgICAgICAgIFBFUlJPUigiQ291bGQgbm90 IHNldCBQb0QgdGFyZ2V0IGZvciBIVk0gZ3Vlc3QuXG4iKTsKLSAgICAgICAgICAgIGdvdG8gZXJy b3Jfb3V0OwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLyoKLSAgICAgKiBBbGxvY2F0ZSBtZW1v cnkgZm9yIEhWTSBndWVzdCwgc2tpcHBpbmcgVkdBIGhvbGUgMHhBMDAwMC0weEMwMDAwLgotICAg ICAqCi0gICAgICogV2UgYXR0ZW1wdCB0byBhbGxvY2F0ZSAxR0IgcGFnZXMgaWYgcG9zc2libGUu IEl0IGZhbGxzIGJhY2sgb24gMk1CCi0gICAgICogcGFnZXMgaWYgMUdCIGFsbG9jYXRpb24gZmFp bHMuIDRLQiBwYWdlcyB3aWxsIGJlIHVzZWQgZXZlbnR1YWxseSBpZgotICAgICAqIGJvdGggZmFp bC4KLSAgICAgKiAKLSAgICAgKiBVbmRlciAyTUIgbW9kZSwgd2UgYWxsb2NhdGUgcGFnZXMgaW4g YmF0Y2hlcyBvZiBubyBtb3JlIHRoYW4gOE1CIHRvIAotICAgICAqIGVuc3VyZSB0aGF0IHdlIGNh biBiZSBwcmVlbXB0ZWQgYW5kIGhlbmNlIGRvbTAgcmVtYWlucyByZXNwb25zaXZlLgotICAgICAq LwotICAgIHJjID0geGNfZG9tYWluX3BvcHVsYXRlX3BoeXNtYXBfZXhhY3QoCi0gICAgICAgIHhj aCwgZG9tLCAweGEwLCAwLCBtZW1mbGFncywgJnBhZ2VfYXJyYXlbMHgwMF0pOwotCi0gICAgc3Rh dF9ub3JtYWxfcGFnZXMgPSAwOwotICAgIGZvciAoIHZtZW1pZCA9IDA7IHZtZW1pZCA8IG5yX3Zt ZW1yYW5nZXM7IHZtZW1pZCsrICkKLSAgICB7Ci0gICAgICAgIHVuc2lnbmVkIGludCBuZXdfbWVt ZmxhZ3MgPSBtZW1mbGFnczsKLSAgICAgICAgdWludDY0X3QgZW5kX3BhZ2VzOwotICAgICAgICB1 bnNpZ25lZCBpbnQgdm5vZGUgPSB2bWVtcmFuZ2VzW3ZtZW1pZF0ubmlkOwotICAgICAgICB1bnNp Z25lZCBpbnQgcG5vZGUgPSB2bm9kZV90b19wbm9kZVt2bm9kZV07Ci0KLSAgICAgICAgaWYgKCBw bm9kZSAhPSBYQ19OVU1BX05PX05PREUgKQotICAgICAgICAgICAgbmV3X21lbWZsYWdzIHw9IFhF Tk1FTUZfZXhhY3Rfbm9kZShwbm9kZSk7Ci0KLSAgICAgICAgZW5kX3BhZ2VzID0gdm1lbXJhbmdl c1t2bWVtaWRdLmVuZCA+PiBQQUdFX1NISUZUOwotICAgICAgICAvKgotICAgICAgICAgKiBDb25z aWRlciB2Z2EgaG9sZSBiZWxvbmdzIHRvIHRoZSB2bWVtcmFuZ2UgdGhhdCBjb3ZlcnMKLSAgICAg ICAgICogMHhBMDAwMC0weEMwMDAwLiBOb3RlIHRoYXQgMHgwMDAwMC0weEEwMDAwIGlzIHBvcHVs YXRlZCBqdXN0Ci0gICAgICAgICAqIGJlZm9yZSB0aGlzIGxvb3AuCi0gICAgICAgICAqLwotICAg ICAgICBpZiAoIHZtZW1yYW5nZXNbdm1lbWlkXS5zdGFydCA9PSAwICkKLSAgICAgICAgewotICAg ICAgICAgICAgY3VyX3BhZ2VzID0gMHhjMDsKLSAgICAgICAgICAgIHN0YXRfbm9ybWFsX3BhZ2Vz ICs9IDB4YzA7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICAgICAgY3VyX3BhZ2Vz ID0gdm1lbXJhbmdlc1t2bWVtaWRdLnN0YXJ0ID4+IFBBR0VfU0hJRlQ7Ci0KLSAgICAgICAgd2hp bGUgKCAocmMgPT0gMCkgJiYgKGVuZF9wYWdlcyA+IGN1cl9wYWdlcykgKQotICAgICAgICB7Ci0g ICAgICAgICAgICAvKiBDbGlwIGNvdW50IHRvIG1heGltdW0gMUdCIGV4dGVudC4gKi8KLSAgICAg ICAgICAgIHVuc2lnbmVkIGxvbmcgY291bnQgPSBlbmRfcGFnZXMgLSBjdXJfcGFnZXM7Ci0gICAg ICAgICAgICB1bnNpZ25lZCBsb25nIG1heF9wYWdlcyA9IFNVUEVSUEFHRV8xR0JfTlJfUEZOUzsK LQotICAgICAgICAgICAgaWYgKCBjb3VudCA+IG1heF9wYWdlcyApCi0gICAgICAgICAgICAgICAg Y291bnQgPSBtYXhfcGFnZXM7Ci0KLSAgICAgICAgICAgIGN1cl9wZm4gPSBwYWdlX2FycmF5W2N1 cl9wYWdlc107Ci0KLSAgICAgICAgICAgIC8qIFRha2UgY2FyZSB0aGUgY29ybmVyIGNhc2VzIG9m IHN1cGVyIHBhZ2UgdGFpbHMgKi8KLSAgICAgICAgICAgIGlmICggKChjdXJfcGZuICYgKFNVUEVS UEFHRV8xR0JfTlJfUEZOUy0xKSkgIT0gMCkgJiYKLSAgICAgICAgICAgICAgICAgKGNvdW50ID4g KC1jdXJfcGZuICYgKFNVUEVSUEFHRV8xR0JfTlJfUEZOUy0xKSkpICkKLSAgICAgICAgICAgICAg ICBjb3VudCA9IC1jdXJfcGZuICYgKFNVUEVSUEFHRV8xR0JfTlJfUEZOUy0xKTsKLSAgICAgICAg ICAgIGVsc2UgaWYgKCAoKGNvdW50ICYgKFNVUEVSUEFHRV8xR0JfTlJfUEZOUy0xKSkgIT0gMCkg JiYKLSAgICAgICAgICAgICAgICAgICAgICAoY291bnQgPiBTVVBFUlBBR0VfMUdCX05SX1BGTlMp ICkKLSAgICAgICAgICAgICAgICBjb3VudCAmPSB+KFNVUEVSUEFHRV8xR0JfTlJfUEZOUyAtIDEp OwotCi0gICAgICAgICAgICAvKiBBdHRlbXAgdG8gYWxsb2NhdGUgMUdCIHN1cGVyIHBhZ2UuIEJl Y2F1c2UgaW4gZWFjaCBwYXNzCi0gICAgICAgICAgICAgKiB3ZSBvbmx5IGFsbG9jYXRlIGF0IG1v c3QgMUdCLCB3ZSBkb24ndCBoYXZlIHRvIGNsaXAKLSAgICAgICAgICAgICAqIHN1cGVyIHBhZ2Ug Ym91bmRhcmllcy4KLSAgICAgICAgICAgICAqLwotICAgICAgICAgICAgaWYgKCAoKGNvdW50IHwg Y3VyX3BmbikgJiAoU1VQRVJQQUdFXzFHQl9OUl9QRk5TIC0gMSkpID09IDAgJiYKLSAgICAgICAg ICAgICAgICAgLyogQ2hlY2sgaWYgdGhlcmUgZXhpc3RzIE1NSU8gaG9sZSBpbiB0aGUgMUdCIG1l bW9yeQotICAgICAgICAgICAgICAgICAgKiByYW5nZSAqLwotICAgICAgICAgICAgICAgICAhY2hl Y2tfbW1pb19ob2xlKGN1cl9wZm4gPDwgUEFHRV9TSElGVCwKLSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBTVVBFUlBBR0VfMUdCX05SX1BGTlMgPDwgUEFHRV9TSElGVCwKLSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzLT5tbWlvX3N0YXJ0LCBhcmdzLT5tbWlv X3NpemUpICkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBsb25nIGRvbmU7Ci0gICAg ICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBucl9leHRlbnRzID0gY291bnQgPj4gU1VQRVJQQUdF XzFHQl9TSElGVDsKLSAgICAgICAgICAgICAgICB4ZW5fcGZuX3Qgc3BfZXh0ZW50c1tucl9leHRl bnRzXTsKLQotICAgICAgICAgICAgICAgIGZvciAoIGkgPSAwOyBpIDwgbnJfZXh0ZW50czsgaSsr ICkKLSAgICAgICAgICAgICAgICAgICAgc3BfZXh0ZW50c1tpXSA9Ci0gICAgICAgICAgICAgICAg ICAgICAgICBwYWdlX2FycmF5W2N1cl9wYWdlcysoaTw8U1VQRVJQQUdFXzFHQl9TSElGVCldOwot Ci0gICAgICAgICAgICAgICAgZG9uZSA9IHhjX2RvbWFpbl9wb3B1bGF0ZV9waHlzbWFwKHhjaCwg ZG9tLCBucl9leHRlbnRzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBTVVBFUlBBR0VfMUdCX1NISUZULAotICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBtZW1mbGFncywgc3BfZXh0ZW50cyk7Ci0KLSAgICAg ICAgICAgICAgICBpZiAoIGRvbmUgPiAwICkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAg ICAgICAgICAgIHN0YXRfMWdiX3BhZ2VzICs9IGRvbmU7Ci0gICAgICAgICAgICAgICAgICAgIGRv bmUgPDw9IFNVUEVSUEFHRV8xR0JfU0hJRlQ7Ci0gICAgICAgICAgICAgICAgICAgIGN1cl9wYWdl cyArPSBkb25lOwotICAgICAgICAgICAgICAgICAgICBjb3VudCAtPSBkb25lOwotICAgICAgICAg ICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKCBjb3VudCAhPSAwICkK LSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAvKiBDbGlwIGNvdW50IHRvIG1heGltdW0g OE1CIGV4dGVudC4gKi8KLSAgICAgICAgICAgICAgICBtYXhfcGFnZXMgPSBTVVBFUlBBR0VfMk1C X05SX1BGTlMgKiA0OwotICAgICAgICAgICAgICAgIGlmICggY291bnQgPiBtYXhfcGFnZXMgKQot ICAgICAgICAgICAgICAgICAgICBjb3VudCA9IG1heF9wYWdlczsKLQotICAgICAgICAgICAgICAg IC8qIENsaXAgcGFydGlhbCBzdXBlcnBhZ2UgZXh0ZW50cyB0byBzdXBlcnBhZ2UKLSAgICAgICAg ICAgICAgICAgKiBib3VuZGFyaWVzLiAqLwotICAgICAgICAgICAgICAgIGlmICggKChjdXJfcGZu ICYgKFNVUEVSUEFHRV8yTUJfTlJfUEZOUy0xKSkgIT0gMCkgJiYKLSAgICAgICAgICAgICAgICAg ICAgIChjb3VudCA+ICgtY3VyX3BmbiAmIChTVVBFUlBBR0VfMk1CX05SX1BGTlMtMSkpKSApCi0g ICAgICAgICAgICAgICAgICAgIGNvdW50ID0gLWN1cl9wZm4gJiAoU1VQRVJQQUdFXzJNQl9OUl9Q Rk5TLTEpOwotICAgICAgICAgICAgICAgIGVsc2UgaWYgKCAoKGNvdW50ICYgKFNVUEVSUEFHRV8y TUJfTlJfUEZOUy0xKSkgIT0gMCkgJiYKLSAgICAgICAgICAgICAgICAgICAgICAgICAgKGNvdW50 ID4gU1VQRVJQQUdFXzJNQl9OUl9QRk5TKSApCi0gICAgICAgICAgICAgICAgICAgIGNvdW50ICY9 IH4oU1VQRVJQQUdFXzJNQl9OUl9QRk5TIC0gMSk7IC8qIGNsaXAgbm9uLXMucC4gdGFpbCAqLwot Ci0gICAgICAgICAgICAgICAgLyogQXR0ZW1wdCB0byBhbGxvY2F0ZSBzdXBlcnBhZ2UgZXh0ZW50 cy4gKi8KLSAgICAgICAgICAgICAgICBpZiAoICgoY291bnQgfCBjdXJfcGZuKSAmIChTVVBFUlBB R0VfMk1CX05SX1BGTlMgLSAxKSkgPT0gMCApCi0gICAgICAgICAgICAgICAgewotICAgICAgICAg ICAgICAgICAgICBsb25nIGRvbmU7Ci0gICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcg bnJfZXh0ZW50cyA9IGNvdW50ID4+IFNVUEVSUEFHRV8yTUJfU0hJRlQ7Ci0gICAgICAgICAgICAg ICAgICAgIHhlbl9wZm5fdCBzcF9leHRlbnRzW25yX2V4dGVudHNdOwotCi0gICAgICAgICAgICAg ICAgICAgIGZvciAoIGkgPSAwOyBpIDwgbnJfZXh0ZW50czsgaSsrICkKLSAgICAgICAgICAgICAg ICAgICAgICAgIHNwX2V4dGVudHNbaV0gPQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBh Z2VfYXJyYXlbY3VyX3BhZ2VzKyhpPDxTVVBFUlBBR0VfMk1CX1NISUZUKV07Ci0KLSAgICAgICAg ICAgICAgICAgICAgZG9uZSA9IHhjX2RvbWFpbl9wb3B1bGF0ZV9waHlzbWFwKHhjaCwgZG9tLCBu cl9leHRlbnRzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgU1VQRVJQQUdFXzJNQl9TSElGVCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lbWZsYWdzLCBzcF9leHRlbnRzKTsKLQotICAg ICAgICAgICAgICAgICAgICBpZiAoIGRvbmUgPiAwICkKLSAgICAgICAgICAgICAgICAgICAgewot ICAgICAgICAgICAgICAgICAgICAgICAgc3RhdF8ybWJfcGFnZXMgKz0gZG9uZTsKLSAgICAgICAg ICAgICAgICAgICAgICAgIGRvbmUgPDw9IFNVUEVSUEFHRV8yTUJfU0hJRlQ7Ci0gICAgICAgICAg ICAgICAgICAgICAgICBjdXJfcGFnZXMgKz0gZG9uZTsKLSAgICAgICAgICAgICAgICAgICAgICAg IGNvdW50IC09IGRvbmU7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9 Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8qIEZhbGwgYmFjayB0byA0a0IgZXh0ZW50 cy4gKi8KLSAgICAgICAgICAgIGlmICggY291bnQgIT0gMCApCi0gICAgICAgICAgICB7Ci0gICAg ICAgICAgICAgICAgcmMgPSB4Y19kb21haW5fcG9wdWxhdGVfcGh5c21hcF9leGFjdCgKLSAgICAg ICAgICAgICAgICAgICAgeGNoLCBkb20sIGNvdW50LCAwLCBuZXdfbWVtZmxhZ3MsICZwYWdlX2Fy cmF5W2N1cl9wYWdlc10pOwotICAgICAgICAgICAgICAgIGN1cl9wYWdlcyArPSBjb3VudDsKLSAg ICAgICAgICAgICAgICBzdGF0X25vcm1hbF9wYWdlcyArPSBjb3VudDsKLSAgICAgICAgICAgIH0K LSAgICAgICAgfQotCi0gICAgICAgIGlmICggcmMgIT0gMCApCi0gICAgICAgICAgICBicmVhazsK LSAgICB9Ci0KLSAgICBpZiAoIHJjICE9IDAgKQotICAgIHsKLSAgICAgICAgUEVSUk9SKCJDb3Vs ZCBub3QgYWxsb2NhdGUgbWVtb3J5IGZvciBIVk0gZ3Vlc3QuIik7Ci0gICAgICAgIGdvdG8gZXJy b3Jfb3V0OwotICAgIH0KLQotICAgIERQUklOVEYoIlBIWVNJQ0FMIE1FTU9SWSBBTExPQ0FUSU9O OlxuIik7Ci0gICAgRFBSSU5URigiICA0S0IgUEFHRVM6IDB4JTAxNmx4XG4iLCBzdGF0X25vcm1h bF9wYWdlcyk7Ci0gICAgRFBSSU5URigiICAyTUIgUEFHRVM6IDB4JTAxNmx4XG4iLCBzdGF0XzJt Yl9wYWdlcyk7Ci0gICAgRFBSSU5URigiICAxR0IgUEFHRVM6IDB4JTAxNmx4XG4iLCBzdGF0XzFn Yl9wYWdlcyk7Ci0KLSAgICByYyA9IDA7Ci0gICAgZ290byBvdXQ7Ci0gZXJyb3Jfb3V0OgotICAg IHJjID0gLTE7Ci0gb3V0OgotCi0gICAgLyogZW5zdXJlIG5vIHVuY2xhaW1lZCBwYWdlcyBhcmUg bGVmdCB1bnVzZWQgKi8KLSAgICB4Y19kb21haW5fY2xhaW1fcGFnZXMoeGNoLCBkb20sIDAgLyog Y2FuY2VscyB0aGUgY2xhaW0gKi8pOwotCi0gICAgcmV0dXJuIHJjOwotfQotCi1zdGF0aWMgaW50 IHhjX2h2bV9sb2FkX2ltYWdlKHhjX2ludGVyZmFjZSAqeGNoLAotICAgICAgICAgICAgICAgICAg ICAgICB1aW50MzJfdCBkb20sIHN0cnVjdCB4Y19odm1fYnVpbGRfYXJncyAqYXJncywKLSAgICAg ICAgICAgICAgICAgICAgICAgeGVuX3Bmbl90ICpwYWdlX2FycmF5KQotewotICAgIHVuc2lnbmVk IGxvbmcgZW50cnlfZWlwLCBpbWFnZV9zaXplOwotICAgIHN0cnVjdCBlbGZfYmluYXJ5IGVsZjsK LSAgICB1aW50NjRfdCB2X3N0YXJ0LCB2X2VuZDsKLSAgICB1aW50NjRfdCBtX3N0YXJ0ID0gMCwg bV9lbmQgPSAwOwotICAgIGNoYXIgKmltYWdlOwotICAgIGludCByYzsKLQotICAgIGltYWdlID0g eGNfcmVhZF9pbWFnZSh4Y2gsIGFyZ3MtPmltYWdlX2ZpbGVfbmFtZSwgJmltYWdlX3NpemUpOwot ICAgIGlmICggaW1hZ2UgPT0gTlVMTCApCi0gICAgICAgIHJldHVybiAtMTsKLQotICAgIG1lbXNl dCgmZWxmLCAwLCBzaXplb2YoZWxmKSk7Ci0gICAgaWYgKCBlbGZfaW5pdCgmZWxmLCBpbWFnZSwg aW1hZ2Vfc2l6ZSkgIT0gMCApCi0gICAgICAgIGdvdG8gZXJyb3Jfb3V0OwotCi0gICAgeGNfZWxm X3NldF9sb2dmaWxlKHhjaCwgJmVsZiwgMSk7Ci0KLSAgICBlbGZfcGFyc2VfYmluYXJ5KCZlbGYp OwotICAgIHZfc3RhcnQgPSAwOwotICAgIHZfZW5kID0gYXJncy0+bWVtX3NpemU7Ci0KLSAgICBp ZiAoIG1vZHVsZXNfaW5pdChhcmdzLCB2X2VuZCwgJmVsZiwgJm1fc3RhcnQsICZtX2VuZCkgIT0g MCApCi0gICAgewotICAgICAgICBFUlJPUigiSW5zdWZmaWNpZW50IHNwYWNlIHRvIGxvYWQgbW9k dWxlcy4iKTsKLSAgICAgICAgZ290byBlcnJvcl9vdXQ7Ci0gICAgfQotCi0gICAgRFBSSU5URigi VklSVFVBTCBNRU1PUlkgQVJSQU5HRU1FTlQ6XG4iKTsKLSAgICBEUFJJTlRGKCIgIExvYWRlcjog ICAlMDE2IlBSSXg2NCItPiUwMTYiUFJJeDY0IlxuIiwgZWxmLnBzdGFydCwgZWxmLnBlbmQpOwot ICAgIERQUklOVEYoIiAgTW9kdWxlczogICUwMTYiUFJJeDY0Ii0+JTAxNiJQUkl4NjQiXG4iLCBt X3N0YXJ0LCBtX2VuZCk7Ci0KLSAgICBpZiAoIGxvYWRlbGZpbWFnZSh4Y2gsICZlbGYsIGRvbSwg cGFnZV9hcnJheSkgIT0gMCApCi0gICAgewotICAgICAgICBQRVJST1IoIkNvdWxkIG5vdCBsb2Fk IEVMRiBpbWFnZSIpOwotICAgICAgICBnb3RvIGVycm9yX291dDsKLSAgICB9Ci0KLSAgICBpZiAo IGxvYWRtb2R1bGVzKHhjaCwgYXJncywgbV9zdGFydCwgbV9lbmQsIGRvbSwgcGFnZV9hcnJheSkg IT0gMCApCi0gICAgewotICAgICAgICBQRVJST1IoIkNvdWxkIG5vdCBsb2FkIEFDUEkgbW9kdWxl cyIpOwotICAgICAgICBnb3RvIGVycm9yX291dDsKLSAgICB9Ci0KLSAgICAvKiBJbnNlcnQgSk1Q IDxyZWwzMj4gaW5zdHJ1Y3Rpb24gYXQgYWRkcmVzcyAweDAgdG8gcmVhY2ggZW50cnkgcG9pbnQu ICovCi0gICAgZW50cnlfZWlwID0gZWxmX3V2YWwoJmVsZiwgZWxmLmVoZHIsIGVfZW50cnkpOwot ICAgIGlmICggZW50cnlfZWlwICE9IDAgKQotICAgIHsKLSAgICAgICAgY2hhciAqcGFnZTAgPSB4 Y19tYXBfZm9yZWlnbl9yYW5nZSgKLSAgICAgICAgICAgIHhjaCwgZG9tLCBQQUdFX1NJWkUsIFBS T1RfUkVBRCB8IFBST1RfV1JJVEUsIDApOwotICAgICAgICBpZiAoIHBhZ2UwID09IE5VTEwgKQot ICAgICAgICAgICAgZ290byBlcnJvcl9vdXQ7Ci0gICAgICAgIHBhZ2UwWzBdID0gMHhlOTsKLSAg ICAgICAgKih1aW50MzJfdCAqKSZwYWdlMFsxXSA9IGVudHJ5X2VpcCAtIDU7Ci0gICAgICAgIG11 bm1hcChwYWdlMCwgUEFHRV9TSVpFKTsKLSAgICB9Ci0KLSAgICByYyA9IDA7Ci0gICAgZ290byBv dXQ7Ci0gZXJyb3Jfb3V0OgotICAgIHJjID0gLTE7Ci0gb3V0OgotICAgIGlmICggZWxmX2NoZWNr X2Jyb2tlbigmZWxmKSApCi0gICAgICAgIEVSUk9SKCJIVk0gRUxGIGJyb2tlbjogJXMiLCBlbGZf Y2hlY2tfYnJva2VuKCZlbGYpKTsKLSAgICBmcmVlKGltYWdlKTsKLQotICAgIHJldHVybiByYzsK LX0KLQotc3RhdGljIGludCB4Y19odm1fcG9wdWxhdGVfcGFyYW1zKHhjX2ludGVyZmFjZSAqeGNo LCB1aW50MzJfdCBkb20sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0 IHhjX2h2bV9idWlsZF9hcmdzICphcmdzKQotewotICAgIHVuc2lnbmVkIGxvbmcgaTsKLSAgICB2 b2lkICpodm1faW5mb19wYWdlOwotICAgIHVpbnQzMl90ICppZGVudF9wdDsKLSAgICB1aW50NjRf dCB2X2VuZDsKLSAgICBpbnQgcmM7Ci0gICAgeGVuX3Bmbl90IHNwZWNpYWxfYXJyYXlbTlJfU1BF Q0lBTF9QQUdFU107Ci0gICAgeGVuX3Bmbl90IGlvcmVxX3NlcnZlcl9hcnJheVtOUl9JT1JFUV9T RVJWRVJfUEFHRVNdOwotCi0gICAgdl9lbmQgPSBhcmdzLT5tZW1fc2l6ZTsKLQotICAgIGlmICgg KGh2bV9pbmZvX3BhZ2UgPSB4Y19tYXBfZm9yZWlnbl9yYW5nZSgKLSAgICAgICAgICAgICAgeGNo LCBkb20sIFBBR0VfU0laRSwgUFJPVF9SRUFEIHwgUFJPVF9XUklURSwKLSAgICAgICAgICAgICAg SFZNX0lORk9fUEZOKSkgPT0gTlVMTCApCi0gICAgewotICAgICAgICBQRVJST1IoIkNvdWxkIG5v dCBtYXAgaHZtIGluZm8gcGFnZSIpOwotICAgICAgICBnb3RvIGVycm9yX291dDsKLSAgICB9Ci0g ICAgYnVpbGRfaHZtX2luZm8oaHZtX2luZm9fcGFnZSwgYXJncyk7Ci0gICAgbXVubWFwKGh2bV9p bmZvX3BhZ2UsIFBBR0VfU0laRSk7Ci0KLSAgICAvKiBBbGxvY2F0ZSBhbmQgY2xlYXIgc3BlY2lh bCBwYWdlcy4gKi8KLSAgICBmb3IgKCBpID0gMDsgaSA8IE5SX1NQRUNJQUxfUEFHRVM7IGkrKyAp Ci0gICAgICAgIHNwZWNpYWxfYXJyYXlbaV0gPSBzcGVjaWFsX3BmbihpKTsKLQotICAgIHJjID0g eGNfZG9tYWluX3BvcHVsYXRlX3BoeXNtYXBfZXhhY3QoeGNoLCBkb20sIE5SX1NQRUNJQUxfUEFH RVMsIDAsIDAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcGVj aWFsX2FycmF5KTsKLSAgICBpZiAoIHJjICE9IDAgKQotICAgIHsKLSAgICAgICAgUEVSUk9SKCJD b3VsZCBub3QgYWxsb2NhdGUgc3BlY2lhbCBwYWdlcy4iKTsKLSAgICAgICAgZ290byBlcnJvcl9v dXQ7Ci0gICAgfQotCi0gICAgaWYgKCB4Y19jbGVhcl9kb21haW5fcGFnZXMoeGNoLCBkb20sIHNw ZWNpYWxfcGZuKDApLCBOUl9TUEVDSUFMX1BBR0VTKSApCi0gICAgewotICAgICAgICBQRVJST1Io IkNvdWxkIG5vdCBjbGVhciBzcGVjaWFsIHBhZ2VzIik7Ci0gICAgICAgIGdvdG8gZXJyb3Jfb3V0 OwotICAgIH0KLQotICAgIHhjX2h2bV9wYXJhbV9zZXQoeGNoLCBkb20sIEhWTV9QQVJBTV9TVE9S RV9QRk4sCi0gICAgICAgICAgICAgICAgICAgICBzcGVjaWFsX3BmbihTUEVDSUFMUEFHRV9YRU5T VE9SRSkpOwotICAgIHhjX2h2bV9wYXJhbV9zZXQoeGNoLCBkb20sIEhWTV9QQVJBTV9CVUZJT1JF UV9QRk4sCi0gICAgICAgICAgICAgICAgICAgICBzcGVjaWFsX3BmbihTUEVDSUFMUEFHRV9CVUZJ T1JFUSkpOwotICAgIHhjX2h2bV9wYXJhbV9zZXQoeGNoLCBkb20sIEhWTV9QQVJBTV9JT1JFUV9Q Rk4sCi0gICAgICAgICAgICAgICAgICAgICBzcGVjaWFsX3BmbihTUEVDSUFMUEFHRV9JT1JFUSkp OwotICAgIHhjX2h2bV9wYXJhbV9zZXQoeGNoLCBkb20sIEhWTV9QQVJBTV9DT05TT0xFX1BGTiwK LSAgICAgICAgICAgICAgICAgICAgIHNwZWNpYWxfcGZuKFNQRUNJQUxQQUdFX0NPTlNPTEUpKTsK LSAgICB4Y19odm1fcGFyYW1fc2V0KHhjaCwgZG9tLCBIVk1fUEFSQU1fUEFHSU5HX1JJTkdfUEZO LAotICAgICAgICAgICAgICAgICAgICAgc3BlY2lhbF9wZm4oU1BFQ0lBTFBBR0VfUEFHSU5HKSk7 Ci0gICAgeGNfaHZtX3BhcmFtX3NldCh4Y2gsIGRvbSwgSFZNX1BBUkFNX01PTklUT1JfUklOR19Q Rk4sCi0gICAgICAgICAgICAgICAgICAgICBzcGVjaWFsX3BmbihTUEVDSUFMUEFHRV9BQ0NFU1Mp KTsKLSAgICB4Y19odm1fcGFyYW1fc2V0KHhjaCwgZG9tLCBIVk1fUEFSQU1fU0hBUklOR19SSU5H X1BGTiwKLSAgICAgICAgICAgICAgICAgICAgIHNwZWNpYWxfcGZuKFNQRUNJQUxQQUdFX1NIQVJJ TkcpKTsKLQotICAgIC8qCi0gICAgICogQWxsb2NhdGUgYW5kIGNsZWFyIGFkZGl0aW9uYWwgaW9y ZXEgc2VydmVyIHBhZ2VzLiBUaGUgZGVmYXVsdAotICAgICAqIHNlcnZlciB3aWxsIHVzZSB0aGUg SU9SRVEgYW5kIEJVRklPUkVRIHNwZWNpYWwgcGFnZXMgYWJvdmUuCi0gICAgICovCi0gICAgZm9y ICggaSA9IDA7IGkgPCBOUl9JT1JFUV9TRVJWRVJfUEFHRVM7IGkrKyApCi0gICAgICAgIGlvcmVx X3NlcnZlcl9hcnJheVtpXSA9IGlvcmVxX3NlcnZlcl9wZm4oaSk7Ci0KLSAgICByYyA9IHhjX2Rv bWFpbl9wb3B1bGF0ZV9waHlzbWFwX2V4YWN0KHhjaCwgZG9tLCBOUl9JT1JFUV9TRVJWRVJfUEFH RVMsIDAsIDAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpb3Jl cV9zZXJ2ZXJfYXJyYXkpOwotICAgIGlmICggcmMgIT0gMCApCi0gICAgewotICAgICAgICBQRVJS T1IoIkNvdWxkIG5vdCBhbGxvY2F0ZSBpb3JlcSBzZXJ2ZXIgcGFnZXMuIik7Ci0gICAgICAgIGdv dG8gZXJyb3Jfb3V0OwotICAgIH0KLQotICAgIGlmICggeGNfY2xlYXJfZG9tYWluX3BhZ2VzKHhj aCwgZG9tLCBpb3JlcV9zZXJ2ZXJfcGZuKDApLCBOUl9JT1JFUV9TRVJWRVJfUEFHRVMpICkKLSAg ICB7Ci0gICAgICAgIFBFUlJPUigiQ291bGQgbm90IGNsZWFyIGlvcmVxIHBhZ2UiKTsKLSAgICAg ICAgZ290byBlcnJvcl9vdXQ7Ci0gICAgfQotCi0gICAgLyogVGVsbCB0aGUgZG9tYWluIHdoZXJl IHRoZSBwYWdlcyBhcmUgYW5kIGhvdyBtYW55IHRoZXJlIGFyZSAqLwotICAgIHhjX2h2bV9wYXJh bV9zZXQoeGNoLCBkb20sIEhWTV9QQVJBTV9JT1JFUV9TRVJWRVJfUEZOLAotICAgICAgICAgICAg ICAgICAgICAgaW9yZXFfc2VydmVyX3BmbigwKSk7Ci0gICAgeGNfaHZtX3BhcmFtX3NldCh4Y2gs IGRvbSwgSFZNX1BBUkFNX05SX0lPUkVRX1NFUlZFUl9QQUdFUywKLSAgICAgICAgICAgICAgICAg ICAgIE5SX0lPUkVRX1NFUlZFUl9QQUdFUyk7Ci0KLSAgICAvKgotICAgICAqIElkZW50aXR5LW1h cCBwYWdlIHRhYmxlIGlzIHJlcXVpcmVkIGZvciBydW5uaW5nIHdpdGggQ1IwLlBHPTAgd2hlbgot ICAgICAqIHVzaW5nIEludGVsIEVQVC4gQ3JlYXRlIGEgMzItYml0IG5vbi1QQUUgcGFnZSBkaXJl Y3Rvcnkgb2Ygc3VwZXJwYWdlcy4KLSAgICAgKi8KLSAgICBpZiAoIChpZGVudF9wdCA9IHhjX21h cF9mb3JlaWduX3JhbmdlKAotICAgICAgICAgICAgICB4Y2gsIGRvbSwgUEFHRV9TSVpFLCBQUk9U X1JFQUQgfCBQUk9UX1dSSVRFLAotICAgICAgICAgICAgICBzcGVjaWFsX3BmbihTUEVDSUFMUEFH RV9JREVOVF9QVCkpKSA9PSBOVUxMICkKLSAgICB7Ci0gICAgICAgIFBFUlJPUigiQ291bGQgbm90 IG1hcCBzcGVjaWFsIHBhZ2UgaWRlbnRfcHQiKTsKLSAgICAgICAgZ290byBlcnJvcl9vdXQ7Ci0g ICAgfQotICAgIGZvciAoIGkgPSAwOyBpIDwgUEFHRV9TSVpFIC8gc2l6ZW9mKCppZGVudF9wdCk7 IGkrKyApCi0gICAgICAgIGlkZW50X3B0W2ldID0gKChpIDw8IDIyKSB8IF9QQUdFX1BSRVNFTlQg fCBfUEFHRV9SVyB8IF9QQUdFX1VTRVIgfAotICAgICAgICAgICAgICAgICAgICAgICBfUEFHRV9B Q0NFU1NFRCB8IF9QQUdFX0RJUlRZIHwgX1BBR0VfUFNFKTsKLSAgICBtdW5tYXAoaWRlbnRfcHQs IFBBR0VfU0laRSk7Ci0gICAgeGNfaHZtX3BhcmFtX3NldCh4Y2gsIGRvbSwgSFZNX1BBUkFNX0lE RU5UX1BULAotICAgICAgICAgICAgICAgICAgICAgc3BlY2lhbF9wZm4oU1BFQ0lBTFBBR0VfSURF TlRfUFQpIDw8IFBBR0VfU0hJRlQpOwotCi0gICAgcmMgPSAwOwotICAgIGdvdG8gb3V0OwotIGVy cm9yX291dDoKLSAgICByYyA9IC0xOwotIG91dDoKLQotICAgIHJldHVybiByYzsKLX0KLQotLyog eGNfaHZtX2J1aWxkOgotICogQ3JlYXRlIGEgZG9tYWluIGZvciBhIHZpcnR1YWxpemVkIExpbnV4 LCB1c2luZyBmaWxlcy9maWxlbmFtZXMuCi0gKi8KLWludCB4Y19odm1fYnVpbGQoeGNfaW50ZXJm YWNlICp4Y2gsIHVpbnQzMl90IGRvbWlkLAotICAgICAgICAgICAgICAgICBzdHJ1Y3QgeGNfaHZt X2J1aWxkX2FyZ3MgKmh2bV9hcmdzKQotewotICAgIHN0cnVjdCB4Y19odm1fYnVpbGRfYXJncyBh cmdzID0gKmh2bV9hcmdzOwotICAgIHhlbl9wZm5fdCAqcGFycmF5ID0gTlVMTDsKLSAgICBpbnQg cmM7Ci0KLSAgICBpZiAoIGRvbWlkID09IDAgKQotICAgICAgICByZXR1cm4gLTE7Ci0gICAgaWYg KCBhcmdzLmltYWdlX2ZpbGVfbmFtZSA9PSBOVUxMICkKLSAgICAgICAgcmV0dXJuIC0xOwotCi0g ICAgLyogQW4gSFZNIGd1ZXN0IG11c3QgYmUgaW5pdGlhbGlzZWQgd2l0aCBhdCBsZWFzdCAyTUIg bWVtb3J5LiAqLwotICAgIGlmICggYXJncy5tZW1fc2l6ZSA8ICgydWxsIDw8IDIwKSB8fCBhcmdz Lm1lbV90YXJnZXQgPCAoMnVsbCA8PCAyMCkgKQotICAgICAgICByZXR1cm4gLTE7Ci0KLSAgICBw YXJyYXkgPSBtYWxsb2MoKGFyZ3MubWVtX3NpemUgPj4gUEFHRV9TSElGVCkgKiBzaXplb2YoeGVu X3Bmbl90KSk7Ci0gICAgaWYgKCBwYXJyYXkgPT0gTlVMTCApCi0gICAgICAgIHJldHVybiAtMTsK LQotICAgIHJjID0geGNfaHZtX3BvcHVsYXRlX21lbW9yeSh4Y2gsIGRvbWlkLCAmYXJncywgcGFy cmF5KTsKLSAgICBpZiAoIHJjICE9IDAgKQotICAgIHsKLSAgICAgICAgUEVSUk9SKCJ4Y19odm1f cG9wdWxhdGVfbWVtb3J5IGZhaWxlZCIpOwotICAgICAgICBnb3RvIG91dDsKLSAgICB9Ci0gICAg cmMgPSB4Y19odm1fbG9hZF9pbWFnZSh4Y2gsIGRvbWlkLCAmYXJncywgcGFycmF5KTsKLSAgICBp ZiAoIHJjICE9IDAgKQotICAgIHsKLSAgICAgICAgUEVSUk9SKCJ4Y19odm1fbG9hZF9pbWFnZSBm YWlsZWQiKTsKLSAgICAgICAgZ290byBvdXQ7Ci0gICAgfQotICAgIHJjID0geGNfaHZtX3BvcHVs YXRlX3BhcmFtcyh4Y2gsIGRvbWlkLCAmYXJncyk7Ci0gICAgaWYgKCByYyAhPSAwICkKLSAgICB7 Ci0gICAgICAgIFBFUlJPUigieGNfaHZtX3BvcHVsYXRlX3BhcmFtcyBmYWlsZWQiKTsKLSAgICAg ICAgZ290byBvdXQ7Ci0gICAgfQotCi0gICAgLyogUmV0dXJuIG1vZHVsZSBsb2FkIGFkZHJlc3Nl cyB0byBjYWxsZXIgKi8KLSAgICBodm1fYXJncy0+YWNwaV9tb2R1bGUuZ3Vlc3RfYWRkcl9vdXQg PSBhcmdzLmFjcGlfbW9kdWxlLmd1ZXN0X2FkZHJfb3V0OwotICAgIGh2bV9hcmdzLT5zbWJpb3Nf bW9kdWxlLmd1ZXN0X2FkZHJfb3V0ID0gYXJncy5zbWJpb3NfbW9kdWxlLmd1ZXN0X2FkZHJfb3V0 OwotCi1vdXQ6Ci0gICAgZnJlZShwYXJyYXkpOwotCi0gICAgcmV0dXJuIHJjOwotfQotCi0vKiB4 Y19odm1fYnVpbGRfdGFyZ2V0X21lbTogCi0gKiBDcmVhdGUgYSBkb21haW4gZm9yIGEgcHJlLWJh bGxvb25lZCB2aXJ0dWFsaXplZCBMaW51eCwgdXNpbmcKLSAqIGZpbGVzL2ZpbGVuYW1lcy4gIElm IHRhcmdldCA8IG1lbXNpemUsIGRvbWFpbiBpcyBjcmVhdGVkIHdpdGgKLSAqIG1lbXNpemUgcGFn ZXMgbWFya2VkIHBvcHVsYXRlLW9uLWRlbWFuZCwgCi0gKiBjYWxjdWxhdGluZyBwb2QgY2FjaGUg c2l6ZSBiYXNlZCBvbiB0YXJnZXQuCi0gKiBJZiB0YXJnZXQgPT0gbWVtc2l6ZSwgcGFnZXMgYXJl IHBvcHVsYXRlZCBub3JtYWxseS4KLSAqLwotaW50IHhjX2h2bV9idWlsZF90YXJnZXRfbWVtKHhj X2ludGVyZmFjZSAqeGNoLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgZG9t aWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbWVtc2l6ZSwKLSAgICAgICAgICAg ICAgICAgICAgICAgICAgIGludCB0YXJnZXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBj b25zdCBjaGFyICppbWFnZV9uYW1lKQotewotICAgIHN0cnVjdCB4Y19odm1fYnVpbGRfYXJncyBh cmdzID0ge307Ci0KLSAgICBtZW1zZXQoJmFyZ3MsIDAsIHNpemVvZihzdHJ1Y3QgeGNfaHZtX2J1 aWxkX2FyZ3MpKTsKLSAgICBhcmdzLm1lbV9zaXplID0gKHVpbnQ2NF90KW1lbXNpemUgPDwgMjA7 Ci0gICAgYXJncy5tZW1fdGFyZ2V0ID0gKHVpbnQ2NF90KXRhcmdldCA8PCAyMDsKLSAgICBhcmdz LmltYWdlX2ZpbGVfbmFtZSA9IGltYWdlX25hbWU7Ci0KLSAgICByZXR1cm4geGNfaHZtX2J1aWxk KHhjaCwgZG9taWQsICZhcmdzKTsKLX0KLQotLyoKLSAqIExvY2FsIHZhcmlhYmxlczoKLSAqIG1v ZGU6IEMKLSAqIGMtZmlsZS1zdHlsZTogIkJTRCIKLSAqIGMtYmFzaWMtb2Zmc2V0OiA0Ci0gKiB0 YWItd2lkdGg6IDQKLSAqIGluZGVudC10YWJzLW1vZGU6IG5pbAotICogRW5kOgotICovCmRpZmYg LS1naXQgYS90b29scy9saWJ4Yy94Z19wcml2YXRlLmMgYi90b29scy9saWJ4Yy94Z19wcml2YXRl LmMKaW5kZXggYzUyY2I0NC4uOThmMzNiMiAxMDA2NDQKLS0tIGEvdG9vbHMvbGlieGMveGdfcHJp dmF0ZS5jCisrKyBiL3Rvb2xzL2xpYnhjL3hnX3ByaXZhdGUuYwpAQCAtMTg4LDE1ICsxODgsNiBA QCB1bnNpZ25lZCBsb25nIGNzdW1fcGFnZSh2b2lkICpwYWdlKQogICAgIHJldHVybiBzdW0gXiAo c3VtPj4zMik7CiB9CiAKLV9fYXR0cmlidXRlX18oKHdlYWspKSAKLSAgICBpbnQgeGNfaHZtX2J1 aWxkKHhjX2ludGVyZmFjZSAqeGNoLAotICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgZG9t aWQsCi0gICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgeGNfaHZtX2J1aWxkX2FyZ3MgKmh2bV9h cmdzKQotewotICAgIGVycm5vID0gRU5PU1lTOwotICAgIHJldHVybiAtMTsKLX0KLQogLyoKICAq IExvY2FsIHZhcmlhYmxlczoKICAqIG1vZGU6IEMKZGlmZiAtLWdpdCBhL3Rvb2xzL3B5dGhvbi94 ZW4vbG93bGV2ZWwveGMveGMuYyBiL3Rvb2xzL3B5dGhvbi94ZW4vbG93bGV2ZWwveGMveGMuYwpp bmRleCBjNzdlMTViLi42OTA3ODBjIDEwMDY0NAotLS0gYS90b29scy9weXRob24veGVuL2xvd2xl dmVsL3hjL3hjLmMKKysrIGIvdG9vbHMvcHl0aG9uL3hlbi9sb3dsZXZlbC94Yy94Yy5jCkBAIC05 MTAsNzcgKzkxMCw2IEBAIHN0YXRpYyBQeU9iamVjdCAqcHl4Y19kb21fc3VwcHJlc3Nfc3B1cmlv dXNfcGFnZV9mYXVsdHMoWGNPYmplY3QgKnNlbGYsCiB9CiAjZW5kaWYgLyogX19pMzg2X18gfHwg X194ODZfNjRfXyAqLwogCi1zdGF0aWMgUHlPYmplY3QgKnB5eGNfaHZtX2J1aWxkKFhjT2JqZWN0 ICpzZWxmLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeU9iamVjdCAqYXJncywK LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlPYmplY3QgKmt3ZHMpCi17Ci0gICAg dWludDMyX3QgZG9tOwotICAgIHN0cnVjdCBodm1faW5mb190YWJsZSAqdmFfaHZtOwotICAgIHVp bnQ4X3QgKnZhX21hcCwgc3VtOwotICAgIGludCBpOwotICAgIGNoYXIgKmltYWdlOwotICAgIGlu dCBtZW1zaXplLCB0YXJnZXQ9LTEsIHZjcHVzID0gMSwgYWNwaSA9IDAsIGFwaWMgPSAxOwotICAg IFB5T2JqZWN0ICp2Y3B1X2F2YWlsX2hhbmRsZSA9IE5VTEw7Ci0gICAgdWludDhfdCB2Y3B1X2F2 YWlsWyhIVk1fTUFYX1ZDUFVTICsgNykvOF07Ci0KLSAgICBzdGF0aWMgY2hhciAqa3dkX2xpc3Rb XSA9IHsgImRvbWlkIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1lbXNpemUi LCAiaW1hZ2UiLCAidGFyZ2V0IiwgInZjcHVzIiwgCi0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICJ2Y3B1X2F2YWlsIiwgImFjcGkiLCAiYXBpYyIsIE5VTEwgfTsKLSAgICBpZiAoICFQ eUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dkcywgImlpc3xpaU9paSIsIGt3ZF9s aXN0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZG9tLCAmbWVtc2l6 ZSwgJmltYWdlLCAmdGFyZ2V0LCAmdmNwdXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICZ2Y3B1X2F2YWlsX2hhbmRsZSwgJmFjcGksICZhcGljKSApCi0gICAgICAgIHJl dHVybiBOVUxMOwotCi0gICAgbWVtc2V0KHZjcHVfYXZhaWwsIDAsIHNpemVvZih2Y3B1X2F2YWls KSk7Ci0gICAgdmNwdV9hdmFpbFswXSA9IDE7Ci0gICAgaWYgKCB2Y3B1X2F2YWlsX2hhbmRsZSAh PSBOVUxMICkKLSAgICB7Ci0gICAgICAgIGlmICggUHlJbnRfQ2hlY2sodmNwdV9hdmFpbF9oYW5k bGUpICkKLSAgICAgICAgewotICAgICAgICAgICAgdW5zaWduZWQgbG9uZyB2ID0gUHlJbnRfQXNM b25nKHZjcHVfYXZhaWxfaGFuZGxlKTsKLSAgICAgICAgICAgIGZvciAoIGkgPSAwOyBpIDwgc2l6 ZW9mKGxvbmcpOyBpKysgKQotICAgICAgICAgICAgICAgIHZjcHVfYXZhaWxbaV0gPSAodWludDhf dCkodj4+KGkqOCkpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYgKCBQeUxvbmdfQ2hlY2so dmNwdV9hdmFpbF9oYW5kbGUpICkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKCBfUHlMb25n X0FzQnl0ZUFycmF5KChQeUxvbmdPYmplY3QgKil2Y3B1X2F2YWlsX2hhbmRsZSwKLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodW5zaWduZWQgY2hhciAqKXZjcHVfYXZhaWws Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKHZjcHVfYXZhaWwp LCAxLCAwKSApCi0gICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgIH0KLSAgICAg ICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgICBlcnJubyA9IEVJTlZBTDsKLSAgICAgICAg ICAgIFB5RXJyX1NldEZyb21FcnJubyh4Y19lcnJvcl9vYmopOwotICAgICAgICAgICAgcmV0dXJu IE5VTEw7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAoIHRhcmdldCA9PSAtMSApCi0gICAg ICAgIHRhcmdldCA9IG1lbXNpemU7Ci0KLSAgICBpZiAoIHhjX2h2bV9idWlsZF90YXJnZXRfbWVt KHNlbGYtPnhjX2hhbmRsZSwgZG9tLCBtZW1zaXplLAotICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgdGFyZ2V0LCBpbWFnZSkgIT0gMCApCi0gICAgICAgIHJldHVybiBweXhjX2Vycm9y X3RvX2V4Y2VwdGlvbihzZWxmLT54Y19oYW5kbGUpOwotCi0gICAgLyogRml4IHVwIHRoZSBIVk0g aW5mbyB0YWJsZS4gKi8KLSAgICB2YV9tYXAgPSB4Y19tYXBfZm9yZWlnbl9yYW5nZShzZWxmLT54 Y19oYW5kbGUsIGRvbSwgWENfUEFHRV9TSVpFLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFBST1RfUkVBRCB8IFBST1RfV1JJVEUsCi0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgSFZNX0lORk9fUEZOKTsKLSAgICBpZiAoIHZhX21hcCA9PSBOVUxMICkKLSAgICAg ICAgcmV0dXJuIFB5RXJyX1NldEZyb21FcnJubyh4Y19lcnJvcl9vYmopOwotICAgIHZhX2h2bSA9 IChzdHJ1Y3QgaHZtX2luZm9fdGFibGUgKikodmFfbWFwICsgSFZNX0lORk9fT0ZGU0VUKTsKLSAg ICB2YV9odm0tPmFwaWNfbW9kZSAgICA9IGFwaWM7Ci0gICAgdmFfaHZtLT5ucl92Y3B1cyAgICAg PSB2Y3B1czsKLSAgICBtZW1jcHkodmFfaHZtLT52Y3B1X29ubGluZSwgdmNwdV9hdmFpbCwgc2l6 ZW9mKHZjcHVfYXZhaWwpKTsKLSAgICBmb3IgKCBpID0gMCwgc3VtID0gMDsgaSA8IHZhX2h2bS0+ bGVuZ3RoOyBpKysgKQotICAgICAgICBzdW0gKz0gKCh1aW50OF90ICopdmFfaHZtKVtpXTsKLSAg ICB2YV9odm0tPmNoZWNrc3VtIC09IHN1bTsKLSAgICBtdW5tYXAodmFfbWFwLCBYQ19QQUdFX1NJ WkUpOwotCi0gICAgcmV0dXJuIFB5X0J1aWxkVmFsdWUoInt9Iik7Ci19Ci0KIHN0YXRpYyBQeU9i amVjdCAqcHl4Y19nbnR0YWJfaHZtX3NlZWQoWGNPYmplY3QgKnNlbGYsCiAJCQkJICAgICAgUHlP YmplY3QgKmFyZ3MsCiAJCQkJICAgICAgUHlPYmplY3QgKmt3ZHMpCkBAIC0yNDExLDE2ICsyMzQw LDYgQEAgc3RhdGljIFB5TWV0aG9kRGVmIHB5eGNfbWV0aG9kc1tdID0gewogICAgICAgIiBpbWFn ZSAgIFtzdHJdOiAgICAgIE5hbWUgb2Yga2VybmVsIGltYWdlIGZpbGUuIE1heSBiZSBnemlwcGVk LlxuIgogICAgICAgIiBjbWRsaW5lIFtzdHIsIG4vYV06IEtlcm5lbCBwYXJhbWV0ZXJzLCBpZiBh bnkuXG5cbiJ9LAogCi0gICAgeyAiaHZtX2J1aWxkIiwgCi0gICAgICAoUHlDRnVuY3Rpb24pcHl4 Y19odm1fYnVpbGQsIAotICAgICAgTUVUSF9WQVJBUkdTIHwgTUVUSF9LRVlXT1JEUywgIlxuIgot ICAgICAgIkJ1aWxkIGEgbmV3IEhWTSBndWVzdCBPUy5cbiIKLSAgICAgICIgZG9tICAgICBbaW50 XTogICAgICBJZGVudGlmaWVyIG9mIGRvbWFpbiB0byBidWlsZCBpbnRvLlxuIgotICAgICAgIiBp bWFnZSAgIFtzdHJdOiAgICAgIE5hbWUgb2YgSFZNIGxvYWRlciBpbWFnZSBmaWxlLlxuIgotICAg ICAgIiB2Y3B1cyAgIFtpbnQsIDFdOiAgIE51bWJlciBvZiBWaXJ0dWFsIENQVVMgaW4gZG9tYWlu LlxuXG4iCi0gICAgICAiIHZjcHVfYXZhaWwgW2xvbmcsIDFdOiBXaGljaCBWaXJ0dWFsIENQVVMg YXZhaWxhYmxlLlxuXG4iCi0gICAgICAiUmV0dXJuczogW2ludF0gMCBvbiBzdWNjZXNzOyAtMSBv biBlcnJvci5cbiIgfSwKLQogICAgIHsgImdudHRhYl9odm1fc2VlZCIsCiAgICAgICAoUHlDRnVu Y3Rpb24pcHl4Y19nbnR0YWJfaHZtX3NlZWQsCiAgICAgICBNRVRIX0tFWVdPUkRTLCAiXG4iCi0t IAoxLjkuNSAoQXBwbGUgR2l0LTUwLjMpCgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX18KWGVuLWRldmVsIG1haWxpbmcgbGlzdApYZW4tZGV2ZWxAbGlzdHMu eGVuLm9yZwpodHRwOi8vbGlzdHMueGVuLm9yZy94ZW4tZGV2ZWwK