From mboxrd@z Thu Jan 1 00:00:00 1970 From: Wei Liu Subject: [PATCH v3 extra 07/11] x86/mm: move PV hypercalls to pv/mm-hypercalls.c Date: Sun, 30 Jul 2017 16:43:31 +0100 Message-ID: <20170730154335.24313-8-wei.liu2@citrix.com> References: <20170720160426.2343-1-wei.liu2@citrix.com> <20170730154335.24313-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.bemta6.messagelabs.com ([193.109.254.103]) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1dbqNd-0006LF-4g for xen-devel@lists.xenproject.org; Sun, 30 Jul 2017 15:43:45 +0000 In-Reply-To: <20170730154335.24313-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 QWxzbyBtb3ZlIHB2X25ld19ndWVzdF9jcjMgdGhlcmUgc28gdGhhdCB3ZSBkb24ndCBoYXZlIHRv IGV4cG9ydAptb2RfbDFfZW50cnkuCgpGaXggY29kaW5nIHN0eWxlIGlzc3Vlcy4gQ2hhbmdlIHYg dG8gY3VyciBhbmQgZCB0byBjdXJyZCB3aGVyZQphcHByb3ByaWF0ZS4KClNpZ25lZC1vZmYtYnk6 IFdlaSBMaXUgPHdlaS5saXUyQGNpdHJpeC5jb20+Ci0tLQpJIGNhbid0IGNvbnZpbmNlIGdpdCBk aWZmIHRvIHByb2R1Y2Ugc2Vuc2libGUgZGlmZiBmb3IgZG9uYXRlX3BhZ2UgYW5kCnN0ZWFsX3Bh Z2UuICBUaG9zZSBmdW5jdGlvbnMgYXJlbid0IGNoYW5nZWQuCi0tLQogeGVuL2FyY2gveDg2L21t LmMgICAgICAgICAgICAgICB8IDE1NjUgKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tCiB4ZW4vYXJjaC94ODYvcHYvTWFrZWZpbGUgICAgICAgIHwgICAgMSArCiB4ZW4vYXJj aC94ODYvcHYvbW0taHlwZXJjYWxscy5jIHwgMTQ2MSArKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysKIDMgZmlsZXMgY2hhbmdlZCwgMTUzMSBpbnNlcnRpb25zKCspLCAxNDk2IGRl bGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IHhlbi9hcmNoL3g4Ni9wdi9tbS1oeXBlcmNh bGxzLmMKCmRpZmYgLS1naXQgYS94ZW4vYXJjaC94ODYvbW0uYyBiL3hlbi9hcmNoL3g4Ni9tbS5j CmluZGV4IDc2Y2U1YWVmNjguLmQyMzIwNzY0NTkgMTAwNjQ0Ci0tLSBhL3hlbi9hcmNoL3g4Ni9t bS5jCisrKyBiL3hlbi9hcmNoL3g4Ni9tbS5jCkBAIC0xMTY4LDI5MCArMTE2OCw2IEBAIHZvaWQg cGFnZV91bmxvY2soc3RydWN0IHBhZ2VfaW5mbyAqcGFnZSkKICAgICB9IHdoaWxlICggKHkgPSBj bXB4Y2hnKCZwYWdlLT51LmludXNlLnR5cGVfaW5mbywgeCwgbngpKSAhPSB4ICk7CiB9CiAKLS8q Ci0gKiBQVEUgZmxhZ3MgdGhhdCBhIGd1ZXN0IG1heSBjaGFuZ2Ugd2l0aG91dCByZS12YWxpZGF0 aW5nIHRoZSBQVEUuCi0gKiBBbGwgb3RoZXIgYml0cyBhZmZlY3QgdHJhbnNsYXRpb24sIGNhY2hp bmcsIG9yIFhlbidzIHNhZmV0eS4KLSAqLwotI2RlZmluZSBGQVNUUEFUSF9GTEFHX1dISVRFTElT VCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgKF9QQUdFX05YX0JJ VCB8IF9QQUdFX0FWQUlMX0hJR0ggfCBfUEFHRV9BVkFJTCB8IF9QQUdFX0dMT0JBTCB8IFwKLSAg ICAgX1BBR0VfRElSVFkgfCBfUEFHRV9BQ0NFU1NFRCB8IF9QQUdFX1VTRVIpCi0KLS8qIFVwZGF0 ZSB0aGUgTDEgZW50cnkgYXQgcGwxZSB0byBuZXcgdmFsdWUgbmwxZS4gKi8KLXN0YXRpYyBpbnQg bW9kX2wxX2VudHJ5KGwxX3BnZW50cnlfdCAqcGwxZSwgbDFfcGdlbnRyeV90IG5sMWUsCi0gICAg ICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIGdsMW1mbiwgaW50IHByZXNlcnZlX2Fk LAotICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHZjcHUgKnB0X3ZjcHUsIHN0cnVjdCBk b21haW4gKnBnX2RvbSkKLXsKLSAgICBsMV9wZ2VudHJ5X3Qgb2wxZTsKLSAgICBzdHJ1Y3QgZG9t YWluICpwdF9kb20gPSBwdF92Y3B1LT5kb21haW47Ci0gICAgaW50IHJjID0gMDsKLQotICAgIGlm ICggdW5saWtlbHkoX19jb3B5X2Zyb21fdXNlcigmb2wxZSwgcGwxZSwgc2l6ZW9mKG9sMWUpKSAh PSAwKSApCi0gICAgICAgIHJldHVybiAtRUZBVUxUOwotCi0gICAgQVNTRVJUKCFwYWdpbmdfbW9k ZV9yZWZjb3VudHMocHRfZG9tKSk7Ci0KLSAgICBpZiAoIGwxZV9nZXRfZmxhZ3MobmwxZSkgJiBf UEFHRV9QUkVTRU5UICkKLSAgICB7Ci0gICAgICAgIC8qIFRyYW5zbGF0ZSBmb3JlaWduIGd1ZXN0 IGFkZHJlc3Nlcy4gKi8KLSAgICAgICAgc3RydWN0IHBhZ2VfaW5mbyAqcGFnZSA9IE5VTEw7Ci0K LSAgICAgICAgaWYgKCB1bmxpa2VseShsMWVfZ2V0X2ZsYWdzKG5sMWUpICYgbDFfZGlzYWxsb3df bWFzayhwdF9kb20pKSApCi0gICAgICAgIHsKLSAgICAgICAgICAgIGdkcHJpbnRrKFhFTkxPR19X QVJOSU5HLCAiQmFkIEwxIGZsYWdzICV4XG4iLAotICAgICAgICAgICAgICAgICAgICBsMWVfZ2V0 X2ZsYWdzKG5sMWUpICYgbDFfZGlzYWxsb3dfbWFzayhwdF9kb20pKTsKLSAgICAgICAgICAgIHJl dHVybiAtRUlOVkFMOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKCBwYWdpbmdfbW9kZV90cmFu c2xhdGUocGdfZG9tKSApCi0gICAgICAgIHsKLSAgICAgICAgICAgIHBhZ2UgPSBnZXRfcGFnZV9m cm9tX2dmbihwZ19kb20sIGwxZV9nZXRfcGZuKG5sMWUpLCBOVUxMLCBQMk1fQUxMT0MpOwotICAg ICAgICAgICAgaWYgKCAhcGFnZSApCi0gICAgICAgICAgICAgICAgcmV0dXJuIC1FSU5WQUw7Ci0g ICAgICAgICAgICBubDFlID0gbDFlX2Zyb21fcGZuKHBhZ2VfdG9fbWZuKHBhZ2UpLCBsMWVfZ2V0 X2ZsYWdzKG5sMWUpKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8qIEZhc3QgcGF0aCBmb3Igc3Vm ZmljaWVudGx5LXNpbWlsYXIgbWFwcGluZ3MuICovCi0gICAgICAgIGlmICggIWwxZV9oYXNfY2hh bmdlZChvbDFlLCBubDFlLCB+RkFTVFBBVEhfRkxBR19XSElURUxJU1QpICkKLSAgICAgICAgewot ICAgICAgICAgICAgYWRqdXN0X2d1ZXN0X2wxZShubDFlLCBwdF9kb20pOwotICAgICAgICAgICAg cmMgPSBVUERBVEVfRU5UUlkobDEsIHBsMWUsIG9sMWUsIG5sMWUsIGdsMW1mbiwgcHRfdmNwdSwK LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZXNlcnZlX2FkKTsKLSAgICAgICAgICAg IGlmICggcGFnZSApCi0gICAgICAgICAgICAgICAgcHV0X3BhZ2UocGFnZSk7Ci0gICAgICAgICAg ICByZXR1cm4gcmMgPyAwIDogLUVCVVNZOwotICAgICAgICB9Ci0KLSAgICAgICAgc3dpdGNoICgg cmMgPSBnZXRfcGFnZV9mcm9tX2wxZShubDFlLCBwdF9kb20sIHBnX2RvbSkgKQotICAgICAgICB7 Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBpZiAoIHBhZ2UgKQotICAgICAgICAgICAg ICAgIHB1dF9wYWdlKHBhZ2UpOwotICAgICAgICAgICAgcmV0dXJuIHJjOwotICAgICAgICBjYXNl IDA6Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBfUEFHRV9SVyAuLi4gX1BBR0Vf UlcgfCBQQUdFX0NBQ0hFX0FUVFJTOgotICAgICAgICAgICAgQVNTRVJUKCEocmMgJiB+KF9QQUdF X1JXIHwgUEFHRV9DQUNIRV9BVFRSUykpKTsKLSAgICAgICAgICAgIGwxZV9mbGlwX2ZsYWdzKG5s MWUsIHJjKTsKLSAgICAgICAgICAgIHJjID0gMDsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg ICB9Ci0gICAgICAgIGlmICggcGFnZSApCi0gICAgICAgICAgICBwdXRfcGFnZShwYWdlKTsKLQot ICAgICAgICBhZGp1c3RfZ3Vlc3RfbDFlKG5sMWUsIHB0X2RvbSk7Ci0gICAgICAgIGlmICggdW5s aWtlbHkoIVVQREFURV9FTlRSWShsMSwgcGwxZSwgb2wxZSwgbmwxZSwgZ2wxbWZuLCBwdF92Y3B1 LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJlc2VydmVfYWQpKSApCi0g ICAgICAgIHsKLSAgICAgICAgICAgIG9sMWUgPSBubDFlOwotICAgICAgICAgICAgcmMgPSAtRUJV U1k7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgZWxzZSBpZiAoIHVubGlrZWx5KCFVUERBVEVfRU5U UlkobDEsIHBsMWUsIG9sMWUsIG5sMWUsIGdsMW1mbiwgcHRfdmNwdSwKLSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBwcmVzZXJ2ZV9hZCkpICkKLSAgICB7Ci0gICAgICAgIHJl dHVybiAtRUJVU1k7Ci0gICAgfQotCi0gICAgcHV0X3BhZ2VfZnJvbV9sMWUob2wxZSwgcHRfZG9t KTsKLSAgICByZXR1cm4gcmM7Ci19Ci0KLQotLyogVXBkYXRlIHRoZSBMMiBlbnRyeSBhdCBwbDJl IHRvIG5ldyB2YWx1ZSBubDJlLiBwbDJlIGlzIHdpdGhpbiBmcmFtZSBwZm4uICovCi1zdGF0aWMg aW50IG1vZF9sMl9lbnRyeShsMl9wZ2VudHJ5X3QgKnBsMmUsCi0gICAgICAgICAgICAgICAgICAg ICAgICBsMl9wZ2VudHJ5X3QgbmwyZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVk IGxvbmcgcGZuLAotICAgICAgICAgICAgICAgICAgICAgICAgaW50IHByZXNlcnZlX2FkLAotICAg ICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHZjcHUgKnZjcHUpCi17Ci0gICAgbDJfcGdlbnRy eV90IG9sMmU7Ci0gICAgc3RydWN0IGRvbWFpbiAqZCA9IHZjcHUtPmRvbWFpbjsKLSAgICBzdHJ1 Y3QgcGFnZV9pbmZvICpsMnBnID0gbWZuX3RvX3BhZ2UocGZuKTsKLSAgICB1bnNpZ25lZCBsb25n IHR5cGUgPSBsMnBnLT51LmludXNlLnR5cGVfaW5mbzsKLSAgICBpbnQgcmMgPSAwOwotCi0gICAg aWYgKCB1bmxpa2VseSghaXNfZ3Vlc3RfbDJfc2xvdChkLCB0eXBlLCBwZ2VudHJ5X3B0cl90b19z bG90KHBsMmUpKSkgKQotICAgIHsKLSAgICAgICAgZ2RwcmludGsoWEVOTE9HX1dBUk5JTkcsICJM MiB1cGRhdGUgaW4gWGVuLXByaXZhdGUgYXJlYSwgc2xvdCAlI2x4XG4iLAotICAgICAgICAgICAg ICAgICBwZ2VudHJ5X3B0cl90b19zbG90KHBsMmUpKTsKLSAgICAgICAgcmV0dXJuIC1FUEVSTTsK LSAgICB9Ci0KLSAgICBpZiAoIHVubGlrZWx5KF9fY29weV9mcm9tX3VzZXIoJm9sMmUsIHBsMmUs IHNpemVvZihvbDJlKSkgIT0gMCkgKQotICAgICAgICByZXR1cm4gLUVGQVVMVDsKLQotICAgIGlm ICggbDJlX2dldF9mbGFncyhubDJlKSAmIF9QQUdFX1BSRVNFTlQgKQotICAgIHsKLSAgICAgICAg aWYgKCB1bmxpa2VseShsMmVfZ2V0X2ZsYWdzKG5sMmUpICYgTDJfRElTQUxMT1dfTUFTSykgKQot ICAgICAgICB7Ci0gICAgICAgICAgICBnZHByaW50ayhYRU5MT0dfV0FSTklORywgIkJhZCBMMiBm bGFncyAleFxuIiwKLSAgICAgICAgICAgICAgICAgICAgbDJlX2dldF9mbGFncyhubDJlKSAmIEwy X0RJU0FMTE9XX01BU0spOwotICAgICAgICAgICAgcmV0dXJuIC1FSU5WQUw7Ci0gICAgICAgIH0K LQotICAgICAgICAvKiBGYXN0IHBhdGggZm9yIHN1ZmZpY2llbnRseS1zaW1pbGFyIG1hcHBpbmdz LiAqLwotICAgICAgICBpZiAoICFsMmVfaGFzX2NoYW5nZWQob2wyZSwgbmwyZSwgfkZBU1RQQVRI X0ZMQUdfV0hJVEVMSVNUKSApCi0gICAgICAgIHsKLSAgICAgICAgICAgIGFkanVzdF9ndWVzdF9s MmUobmwyZSwgZCk7Ci0gICAgICAgICAgICBpZiAoIFVQREFURV9FTlRSWShsMiwgcGwyZSwgb2wy ZSwgbmwyZSwgcGZuLCB2Y3B1LCBwcmVzZXJ2ZV9hZCkgKQotICAgICAgICAgICAgICAgIHJldHVy biAwOwotICAgICAgICAgICAgcmV0dXJuIC1FQlVTWTsKLSAgICAgICAgfQotCi0gICAgICAgIGlm ICggdW5saWtlbHkoKHJjID0gZ2V0X3BhZ2VfZnJvbV9sMmUobmwyZSwgcGZuLCBkKSkgPCAwKSAp Ci0gICAgICAgICAgICByZXR1cm4gcmM7Ci0KLSAgICAgICAgYWRqdXN0X2d1ZXN0X2wyZShubDJl LCBkKTsKLSAgICAgICAgaWYgKCB1bmxpa2VseSghVVBEQVRFX0VOVFJZKGwyLCBwbDJlLCBvbDJl LCBubDJlLCBwZm4sIHZjcHUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBw cmVzZXJ2ZV9hZCkpICkKLSAgICAgICAgewotICAgICAgICAgICAgb2wyZSA9IG5sMmU7Ci0gICAg ICAgICAgICByYyA9IC1FQlVTWTsKLSAgICAgICAgfQotICAgIH0KLSAgICBlbHNlIGlmICggdW5s aWtlbHkoIVVQREFURV9FTlRSWShsMiwgcGwyZSwgb2wyZSwgbmwyZSwgcGZuLCB2Y3B1LAotICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZXNlcnZlX2FkKSkgKQotICAgIHsK LSAgICAgICAgcmV0dXJuIC1FQlVTWTsKLSAgICB9Ci0KLSAgICBwdXRfcGFnZV9mcm9tX2wyZShv bDJlLCBwZm4pOwotICAgIHJldHVybiByYzsKLX0KLQotLyogVXBkYXRlIHRoZSBMMyBlbnRyeSBh dCBwbDNlIHRvIG5ldyB2YWx1ZSBubDNlLiBwbDNlIGlzIHdpdGhpbiBmcmFtZSBwZm4uICovCi1z dGF0aWMgaW50IG1vZF9sM19lbnRyeShsM19wZ2VudHJ5X3QgKnBsM2UsCi0gICAgICAgICAgICAg ICAgICAgICAgICBsM19wZ2VudHJ5X3QgbmwzZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIHVu c2lnbmVkIGxvbmcgcGZuLAotICAgICAgICAgICAgICAgICAgICAgICAgaW50IHByZXNlcnZlX2Fk LAotICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHZjcHUgKnZjcHUpCi17Ci0gICAgbDNf cGdlbnRyeV90IG9sM2U7Ci0gICAgc3RydWN0IGRvbWFpbiAqZCA9IHZjcHUtPmRvbWFpbjsKLSAg ICBpbnQgcmMgPSAwOwotCi0gICAgaWYgKCB1bmxpa2VseSghaXNfZ3Vlc3RfbDNfc2xvdChwZ2Vu dHJ5X3B0cl90b19zbG90KHBsM2UpKSkgKQotICAgIHsKLSAgICAgICAgZ2RwcmludGsoWEVOTE9H X1dBUk5JTkcsICJMMyB1cGRhdGUgaW4gWGVuLXByaXZhdGUgYXJlYSwgc2xvdCAlI2x4XG4iLAot ICAgICAgICAgICAgICAgICBwZ2VudHJ5X3B0cl90b19zbG90KHBsM2UpKTsKLSAgICAgICAgcmV0 dXJuIC1FSU5WQUw7Ci0gICAgfQotCi0gICAgLyoKLSAgICAgKiBEaXNhbGxvdyB1cGRhdGVzIHRv IGZpbmFsIEwzIHNsb3QuIEl0IGNvbnRhaW5zIFhlbiBtYXBwaW5ncywgYW5kIGl0Ci0gICAgICog d291bGQgYmUgYSBwYWluIHRvIGVuc3VyZSB0aGV5IHJlbWFpbiBjb250aW51b3VzbHkgdmFsaWQg dGhyb3VnaG91dC4KLSAgICAgKi8KLSAgICBpZiAoIGlzX3B2XzMyYml0X2RvbWFpbihkKSAmJiAo cGdlbnRyeV9wdHJfdG9fc2xvdChwbDNlKSA+PSAzKSApCi0gICAgICAgIHJldHVybiAtRUlOVkFM OwotCi0gICAgaWYgKCB1bmxpa2VseShfX2NvcHlfZnJvbV91c2VyKCZvbDNlLCBwbDNlLCBzaXpl b2Yob2wzZSkpICE9IDApICkKLSAgICAgICAgcmV0dXJuIC1FRkFVTFQ7Ci0KLSAgICBpZiAoIGwz ZV9nZXRfZmxhZ3MobmwzZSkgJiBfUEFHRV9QUkVTRU5UICkKLSAgICB7Ci0gICAgICAgIGlmICgg dW5saWtlbHkobDNlX2dldF9mbGFncyhubDNlKSAmIGwzX2Rpc2FsbG93X21hc2soZCkpICkKLSAg ICAgICAgewotICAgICAgICAgICAgZ2RwcmludGsoWEVOTE9HX1dBUk5JTkcsICJCYWQgTDMgZmxh Z3MgJXhcbiIsCi0gICAgICAgICAgICAgICAgICAgIGwzZV9nZXRfZmxhZ3MobmwzZSkgJiBsM19k aXNhbGxvd19tYXNrKGQpKTsKLSAgICAgICAgICAgIHJldHVybiAtRUlOVkFMOwotICAgICAgICB9 Ci0KLSAgICAgICAgLyogRmFzdCBwYXRoIGZvciBzdWZmaWNpZW50bHktc2ltaWxhciBtYXBwaW5n cy4gKi8KLSAgICAgICAgaWYgKCAhbDNlX2hhc19jaGFuZ2VkKG9sM2UsIG5sM2UsIH5GQVNUUEFU SF9GTEFHX1dISVRFTElTVCkgKQotICAgICAgICB7Ci0gICAgICAgICAgICBhZGp1c3RfZ3Vlc3Rf bDNlKG5sM2UsIGQpOwotICAgICAgICAgICAgcmMgPSBVUERBVEVfRU5UUlkobDMsIHBsM2UsIG9s M2UsIG5sM2UsIHBmbiwgdmNwdSwgcHJlc2VydmVfYWQpOwotICAgICAgICAgICAgcmV0dXJuIHJj ID8gMCA6IC1FRkFVTFQ7Ci0gICAgICAgIH0KLQotICAgICAgICByYyA9IGdldF9wYWdlX2Zyb21f bDNlKG5sM2UsIHBmbiwgZCwgMCk7Ci0gICAgICAgIGlmICggdW5saWtlbHkocmMgPCAwKSApCi0g ICAgICAgICAgICByZXR1cm4gcmM7Ci0gICAgICAgIHJjID0gMDsKLQotICAgICAgICBhZGp1c3Rf Z3Vlc3RfbDNlKG5sM2UsIGQpOwotICAgICAgICBpZiAoIHVubGlrZWx5KCFVUERBVEVfRU5UUlko bDMsIHBsM2UsIG9sM2UsIG5sM2UsIHBmbiwgdmNwdSwKLSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHByZXNlcnZlX2FkKSkgKQotICAgICAgICB7Ci0gICAgICAgICAgICBvbDNl ID0gbmwzZTsKLSAgICAgICAgICAgIHJjID0gLUVGQVVMVDsKLSAgICAgICAgfQotICAgIH0KLSAg ICBlbHNlIGlmICggdW5saWtlbHkoIVVQREFURV9FTlRSWShsMywgcGwzZSwgb2wzZSwgbmwzZSwg cGZuLCB2Y3B1LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZXNlcnZl X2FkKSkgKQotICAgIHsKLSAgICAgICAgcmV0dXJuIC1FRkFVTFQ7Ci0gICAgfQotCi0gICAgaWYg KCBsaWtlbHkocmMgPT0gMCkgKQotICAgICAgICBpZiAoICFwdl9jcmVhdGVfcGFlX3hlbl9tYXBw aW5ncyhkLCBwbDNlKSApCi0gICAgICAgICAgICBCVUcoKTsKLQotICAgIHB1dF9wYWdlX2Zyb21f bDNlKG9sM2UsIHBmbiwgMCwgMSk7Ci0gICAgcmV0dXJuIHJjOwotfQotCi0vKiBVcGRhdGUgdGhl IEw0IGVudHJ5IGF0IHBsNGUgdG8gbmV3IHZhbHVlIG5sNGUuIHBsNGUgaXMgd2l0aGluIGZyYW1l IHBmbi4gKi8KLXN0YXRpYyBpbnQgbW9kX2w0X2VudHJ5KGw0X3BnZW50cnlfdCAqcGw0ZSwKLSAg ICAgICAgICAgICAgICAgICAgICAgIGw0X3BnZW50cnlfdCBubDRlLAotICAgICAgICAgICAgICAg ICAgICAgICAgdW5zaWduZWQgbG9uZyBwZm4sCi0gICAgICAgICAgICAgICAgICAgICAgICBpbnQg cHJlc2VydmVfYWQsCi0gICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgdmNwdSAqdmNwdSkK LXsKLSAgICBzdHJ1Y3QgZG9tYWluICpkID0gdmNwdS0+ZG9tYWluOwotICAgIGw0X3BnZW50cnlf dCBvbDRlOwotICAgIGludCByYyA9IDA7Ci0KLSAgICBpZiAoIHVubGlrZWx5KCFpc19ndWVzdF9s NF9zbG90KGQsIHBnZW50cnlfcHRyX3RvX3Nsb3QocGw0ZSkpKSApCi0gICAgewotICAgICAgICBn ZHByaW50ayhYRU5MT0dfV0FSTklORywgIkw0IHVwZGF0ZSBpbiBYZW4tcHJpdmF0ZSBhcmVhLCBz bG90ICUjbHhcbiIsCi0gICAgICAgICAgICAgICAgIHBnZW50cnlfcHRyX3RvX3Nsb3QocGw0ZSkp OwotICAgICAgICByZXR1cm4gLUVJTlZBTDsKLSAgICB9Ci0KLSAgICBpZiAoIHVubGlrZWx5KF9f Y29weV9mcm9tX3VzZXIoJm9sNGUsIHBsNGUsIHNpemVvZihvbDRlKSkgIT0gMCkgKQotICAgICAg ICByZXR1cm4gLUVGQVVMVDsKLQotICAgIGlmICggbDRlX2dldF9mbGFncyhubDRlKSAmIF9QQUdF X1BSRVNFTlQgKQotICAgIHsKLSAgICAgICAgaWYgKCB1bmxpa2VseShsNGVfZ2V0X2ZsYWdzKG5s NGUpICYgTDRfRElTQUxMT1dfTUFTSykgKQotICAgICAgICB7Ci0gICAgICAgICAgICBnZHByaW50 ayhYRU5MT0dfV0FSTklORywgIkJhZCBMNCBmbGFncyAleFxuIiwKLSAgICAgICAgICAgICAgICAg ICAgbDRlX2dldF9mbGFncyhubDRlKSAmIEw0X0RJU0FMTE9XX01BU0spOwotICAgICAgICAgICAg cmV0dXJuIC1FSU5WQUw7Ci0gICAgICAgIH0KLQotICAgICAgICAvKiBGYXN0IHBhdGggZm9yIHN1 ZmZpY2llbnRseS1zaW1pbGFyIG1hcHBpbmdzLiAqLwotICAgICAgICBpZiAoICFsNGVfaGFzX2No YW5nZWQob2w0ZSwgbmw0ZSwgfkZBU1RQQVRIX0ZMQUdfV0hJVEVMSVNUKSApCi0gICAgICAgIHsK LSAgICAgICAgICAgIGFkanVzdF9ndWVzdF9sNGUobmw0ZSwgZCk7Ci0gICAgICAgICAgICByYyA9 IFVQREFURV9FTlRSWShsNCwgcGw0ZSwgb2w0ZSwgbmw0ZSwgcGZuLCB2Y3B1LCBwcmVzZXJ2ZV9h ZCk7Ci0gICAgICAgICAgICByZXR1cm4gcmMgPyAwIDogLUVGQVVMVDsKLSAgICAgICAgfQotCi0g ICAgICAgIHJjID0gZ2V0X3BhZ2VfZnJvbV9sNGUobmw0ZSwgcGZuLCBkLCAwKTsKLSAgICAgICAg aWYgKCB1bmxpa2VseShyYyA8IDApICkKLSAgICAgICAgICAgIHJldHVybiByYzsKLSAgICAgICAg cmMgPSAwOwotCi0gICAgICAgIGFkanVzdF9ndWVzdF9sNGUobmw0ZSwgZCk7Ci0gICAgICAgIGlm ICggdW5saWtlbHkoIVVQREFURV9FTlRSWShsNCwgcGw0ZSwgb2w0ZSwgbmw0ZSwgcGZuLCB2Y3B1 LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJlc2VydmVfYWQpKSApCi0g ICAgICAgIHsKLSAgICAgICAgICAgIG9sNGUgPSBubDRlOwotICAgICAgICAgICAgcmMgPSAtRUZB VUxUOwotICAgICAgICB9Ci0gICAgfQotICAgIGVsc2UgaWYgKCB1bmxpa2VseSghVVBEQVRFX0VO VFJZKGw0LCBwbDRlLCBvbDRlLCBubDRlLCBwZm4sIHZjcHUsCi0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgcHJlc2VydmVfYWQpKSApCi0gICAgewotICAgICAgICByZXR1cm4g LUVGQVVMVDsKLSAgICB9Ci0KLSAgICBwdXRfcGFnZV9mcm9tX2w0ZShvbDRlLCBwZm4sIDAsIDEp OwotICAgIHJldHVybiByYzsKLX0KLQogc3RhdGljIGludCBjbGVhbnVwX3BhZ2VfY2FjaGVhdHRy KHN0cnVjdCBwYWdlX2luZm8gKnBhZ2UpCiB7CiAgICAgdW5zaWduZWQgaW50IGNhY2hlYXR0ciA9 CkBAIC0xODkwLDExMjMgKzE2MDYsOTYgQEAgaW50IHZjcHVfZGVzdHJveV9wYWdldGFibGVzKHN0 cnVjdCB2Y3B1ICp2KQogICAgIHJldHVybiByYyAhPSAtRUlOVFIgPyByYyA6IC1FUkVTVEFSVDsK IH0KIAotaW50IHB2X25ld19ndWVzdF9jcjModW5zaWduZWQgbG9uZyBtZm4pCitpbnQgZG9uYXRl X3BhZ2UoCisgICAgc3RydWN0IGRvbWFpbiAqZCwgc3RydWN0IHBhZ2VfaW5mbyAqcGFnZSwgdW5z aWduZWQgaW50IG1lbWZsYWdzKQogewotICAgIHN0cnVjdCB2Y3B1ICpjdXJyID0gY3VycmVudDsK LSAgICBzdHJ1Y3QgZG9tYWluICpjdXJyZCA9IGN1cnItPmRvbWFpbjsKLSAgICBpbnQgcmM7Ci0g ICAgdW5zaWduZWQgbG9uZyBvbGRfYmFzZV9tZm47Ci0KLSAgICBpZiAoIGlzX3B2XzMyYml0X2Rv bWFpbihjdXJyZCkgKQotICAgIHsKLSAgICAgICAgdW5zaWduZWQgbG9uZyBndF9tZm4gPSBwYWdl dGFibGVfZ2V0X3BmbihjdXJyLT5hcmNoLmd1ZXN0X3RhYmxlKTsKLSAgICAgICAgbDRfcGdlbnRy eV90ICpwbDRlID0gbWFwX2RvbWFpbl9wYWdlKF9tZm4oZ3RfbWZuKSk7Ci0KLSAgICAgICAgcmMg PSBtb2RfbDRfZW50cnkocGw0ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgbDRlX2Zyb21f cGZuKG1mbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfUEFHRV9Q UkVTRU5UIHwgX1BBR0VfUlcgfAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIF9QQUdFX1VTRVIgfCBfUEFHRV9BQ0NFU1NFRCkpLAotICAgICAgICAgICAgICAgICAgICAg ICAgICBndF9tZm4sIDAsIGN1cnIpOwotICAgICAgICB1bm1hcF9kb21haW5fcGFnZShwbDRlKTsK LSAgICAgICAgc3dpdGNoICggcmMgKQotICAgICAgICB7Ci0gICAgICAgIGNhc2UgMDoKLSAgICAg ICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIC1FSU5UUjoKLSAgICAgICAgY2FzZSAtRVJFU1RB UlQ6Ci0gICAgICAgICAgICByZXR1cm4gLUVSRVNUQVJUOwotICAgICAgICBkZWZhdWx0OgotICAg ICAgICAgICAgZ2RwcmludGsoWEVOTE9HX1dBUk5JTkcsCi0gICAgICAgICAgICAgICAgICAgICAi RXJyb3Igd2hpbGUgaW5zdGFsbGluZyBuZXcgY29tcGF0IGJhc2VwdHIgJSIgUFJJX21mbiAiXG4i LAotICAgICAgICAgICAgICAgICAgICAgbWZuKTsKLSAgICAgICAgICAgIHJldHVybiByYzsKLSAg ICAgICAgfQorICAgIGNvbnN0IHN0cnVjdCBkb21haW4gKm93bmVyID0gZG9tX3hlbjsKIAotICAg ICAgICBwdl9pbnZhbGlkYXRlX3NoYWRvd19sZHQoY3VyciwgZmFsc2UpOwotICAgICAgICB3cml0 ZV9wdGJhc2UoY3Vycik7CisgICAgc3Bpbl9sb2NrKCZkLT5wYWdlX2FsbG9jX2xvY2spOwogCi0g ICAgICAgIHJldHVybiAwOwotICAgIH0KKyAgICBpZiAoIGlzX3hlbl9oZWFwX3BhZ2UocGFnZSkg fHwgKChvd25lciA9IHBhZ2VfZ2V0X293bmVyKHBhZ2UpKSAhPSBOVUxMKSApCisgICAgICAgIGdv dG8gZmFpbDsKIAotICAgIHJjID0gcHV0X29sZF9ndWVzdF90YWJsZShjdXJyKTsKLSAgICBpZiAo IHVubGlrZWx5KHJjKSApCi0gICAgICAgIHJldHVybiByYzsKKyAgICBpZiAoIGQtPmlzX2R5aW5n ICkKKyAgICAgICAgZ290byBmYWlsOwogCi0gICAgb2xkX2Jhc2VfbWZuID0gcGFnZXRhYmxlX2dl dF9wZm4oY3Vyci0+YXJjaC5ndWVzdF90YWJsZSk7Ci0gICAgLyoKLSAgICAgKiBUaGlzIGlzIHBh cnRpY3VsYXJseSBpbXBvcnRhbnQgd2hlbiBnZXR0aW5nIHJlc3RhcnRlZCBhZnRlciB0aGUKLSAg ICAgKiBwcmV2aW91cyBhdHRlbXB0IGdvdCBwcmVlbXB0ZWQgaW4gdGhlIHB1dC1vbGQtTUZOIHBo YXNlLgotICAgICAqLwotICAgIGlmICggb2xkX2Jhc2VfbWZuID09IG1mbiApCi0gICAgewotICAg ICAgICB3cml0ZV9wdGJhc2UoY3Vycik7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KKyAgICBp ZiAoIHBhZ2UtPmNvdW50X2luZm8gJiB+KFBHQ19hbGxvY2F0ZWQgfCAxKSApCisgICAgICAgIGdv dG8gZmFpbDsKIAotICAgIHJjID0gcGFnaW5nX21vZGVfcmVmY291bnRzKGN1cnJkKQotICAgICAg ICAgPyAoZ2V0X3BhZ2VfZnJvbV9tZm4oX21mbihtZm4pLCBjdXJyZCkgPyAwIDogLUVJTlZBTCkK LSAgICAgICAgIDogZ2V0X3BhZ2VfYW5kX3R5cGVfZnJvbV9tZm4oX21mbihtZm4pLCBQR1Rfcm9v dF9wYWdlX3RhYmxlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJy ZCwgMCwgdHJ1ZSk7Ci0gICAgc3dpdGNoICggcmMgKQorICAgIGlmICggIShtZW1mbGFncyAmIE1F TUZfbm9fcmVmY291bnQpICkKICAgICB7Ci0gICAgY2FzZSAwOgotICAgICAgICBicmVhazsKLSAg ICBjYXNlIC1FSU5UUjoKLSAgICBjYXNlIC1FUkVTVEFSVDoKLSAgICAgICAgcmV0dXJuIC1FUkVT VEFSVDsKLSAgICBkZWZhdWx0OgotICAgICAgICBnZHByaW50ayhYRU5MT0dfV0FSTklORywKLSAg ICAgICAgICAgICAgICAgIkVycm9yIHdoaWxlIGluc3RhbGxpbmcgbmV3IGJhc2VwdHIgJSIgUFJJ X21mbiAiXG4iLCBtZm4pOwotICAgICAgICByZXR1cm4gcmM7CisgICAgICAgIGlmICggZC0+dG90 X3BhZ2VzID49IGQtPm1heF9wYWdlcyApCisgICAgICAgICAgICBnb3RvIGZhaWw7CisgICAgICAg IGRvbWFpbl9hZGp1c3RfdG90X3BhZ2VzKGQsIDEpOwogICAgIH0KIAotICAgIHB2X2ludmFsaWRh dGVfc2hhZG93X2xkdChjdXJyLCBmYWxzZSk7Ci0KLSAgICBpZiAoICFWTV9BU1NJU1QoY3VycmQs IG0ycF9zdHJpY3QpICYmICFwYWdpbmdfbW9kZV9yZWZjb3VudHMoY3VycmQpICkKLSAgICAgICAg ZmlsbF9yb19tcHQobWZuKTsKLSAgICBjdXJyLT5hcmNoLmd1ZXN0X3RhYmxlID0gcGFnZXRhYmxl X2Zyb21fcGZuKG1mbik7Ci0gICAgdXBkYXRlX2NyMyhjdXJyKTsKLQotICAgIHdyaXRlX3B0YmFz ZShjdXJyKTsKLQotICAgIGlmICggbGlrZWx5KG9sZF9iYXNlX21mbiAhPSAwKSApCi0gICAgewot ICAgICAgICBzdHJ1Y3QgcGFnZV9pbmZvICpwYWdlID0gbWZuX3RvX3BhZ2Uob2xkX2Jhc2VfbWZu KTsKKyAgICBwYWdlLT5jb3VudF9pbmZvID0gUEdDX2FsbG9jYXRlZCB8IDE7CisgICAgcGFnZV9z ZXRfb3duZXIocGFnZSwgZCk7CisgICAgcGFnZV9saXN0X2FkZF90YWlsKHBhZ2UsJmQtPnBhZ2Vf bGlzdCk7CiAKLSAgICAgICAgaWYgKCBwYWdpbmdfbW9kZV9yZWZjb3VudHMoY3VycmQpICkKLSAg ICAgICAgICAgIHB1dF9wYWdlKHBhZ2UpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBzd2l0 Y2ggKCByYyA9IHB1dF9wYWdlX2FuZF90eXBlX3ByZWVtcHRpYmxlKHBhZ2UpICkKLSAgICAgICAg ICAgIHsKLSAgICAgICAgICAgIGNhc2UgLUVJTlRSOgotICAgICAgICAgICAgICAgIHJjID0gLUVS RVNUQVJUOwotICAgICAgICAgICAgICAgIC8qIGZhbGx0aHJvdWdoICovCi0gICAgICAgICAgICBj YXNlIC1FUkVTVEFSVDoKLSAgICAgICAgICAgICAgICBjdXJyLT5hcmNoLm9sZF9ndWVzdF90YWJs ZSA9IHBhZ2U7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBkZWZhdWx0Ogot ICAgICAgICAgICAgICAgIEJVR19PTihyYyk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg ICAgICAgICB9Ci0gICAgfQorICAgIHNwaW5fdW5sb2NrKCZkLT5wYWdlX2FsbG9jX2xvY2spOwor ICAgIHJldHVybiAwOwogCi0gICAgcmV0dXJuIHJjOworIGZhaWw6CisgICAgc3Bpbl91bmxvY2so JmQtPnBhZ2VfYWxsb2NfbG9jayk7CisgICAgZ2RwcmludGsoWEVOTE9HX1dBUk5JTkcsICJCYWQg ZG9uYXRlIG1mbiAlIiBQUklfbWZuCisgICAgICAgICAgICAgIiB0byBkJWQgKG93bmVyIGQlZCkg Y2FmPSUwOGx4IHRhZj0lIiBQUnR5cGVfaW5mbyAiXG4iLAorICAgICAgICAgICAgIHBhZ2VfdG9f bWZuKHBhZ2UpLCBkLT5kb21haW5faWQsCisgICAgICAgICAgICAgb3duZXIgPyBvd25lci0+ZG9t YWluX2lkIDogRE9NSURfSU5WQUxJRCwKKyAgICAgICAgICAgICBwYWdlLT5jb3VudF9pbmZvLCBw YWdlLT51LmludXNlLnR5cGVfaW5mbyk7CisgICAgcmV0dXJuIC1FSU5WQUw7CiB9CiAKLXN0YXRp YyBzdHJ1Y3QgZG9tYWluICpnZXRfcGdfb3duZXIoZG9taWRfdCBkb21pZCkKK2ludCBzdGVhbF9w YWdlKAorICAgIHN0cnVjdCBkb21haW4gKmQsIHN0cnVjdCBwYWdlX2luZm8gKnBhZ2UsIHVuc2ln bmVkIGludCBtZW1mbGFncykKIHsKLSAgICBzdHJ1Y3QgZG9tYWluICpwZ19vd25lciA9IE5VTEws ICpjdXJyID0gY3VycmVudC0+ZG9tYWluOworICAgIHVuc2lnbmVkIGxvbmcgeCwgeTsKKyAgICBi b29sIGRyb3BfZG9tX3JlZiA9IGZhbHNlOworICAgIGNvbnN0IHN0cnVjdCBkb21haW4gKm93bmVy ID0gZG9tX3hlbjsKIAotICAgIGlmICggbGlrZWx5KGRvbWlkID09IERPTUlEX1NFTEYpICkKLSAg ICB7Ci0gICAgICAgIHBnX293bmVyID0gcmN1X2xvY2tfY3VycmVudF9kb21haW4oKTsKLSAgICAg ICAgZ290byBvdXQ7Ci0gICAgfQorICAgIGlmICggcGFnaW5nX21vZGVfZXh0ZXJuYWwoZCkgKQor ICAgICAgICByZXR1cm4gLUVPUE5PVFNVUFA7CiAKLSAgICBpZiAoIHVubGlrZWx5KGRvbWlkID09 IGN1cnItPmRvbWFpbl9pZCkgKQotICAgIHsKLSAgICAgICAgZ2RwcmludGsoWEVOTE9HX1dBUk5J TkcsICJDYW5ub3Qgc3BlY2lmeSBpdHNlbGYgYXMgZm9yZWlnbiBkb21haW5cbiIpOwotICAgICAg ICBnb3RvIG91dDsKLSAgICB9CisgICAgc3Bpbl9sb2NrKCZkLT5wYWdlX2FsbG9jX2xvY2spOwog Ci0gICAgc3dpdGNoICggZG9taWQgKQotICAgIHsKLSAgICBjYXNlIERPTUlEX0lPOgotICAgICAg ICBwZ19vd25lciA9IHJjdV9sb2NrX2RvbWFpbihkb21faW8pOwotICAgICAgICBicmVhazsKLSAg ICBjYXNlIERPTUlEX1hFTjoKLSAgICAgICAgcGdfb3duZXIgPSByY3VfbG9ja19kb21haW4oZG9t X3hlbik7Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIGlmICggKHBnX293 bmVyID0gcmN1X2xvY2tfZG9tYWluX2J5X2lkKGRvbWlkKSkgPT0gTlVMTCApCi0gICAgICAgIHsK LSAgICAgICAgICAgIGdkcHJpbnRrKFhFTkxPR19XQVJOSU5HLCAiVW5rbm93biBkb21haW4gZCVk XG4iLCBkb21pZCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBicmVh azsKLSAgICB9CisgICAgaWYgKCBpc194ZW5faGVhcF9wYWdlKHBhZ2UpIHx8ICgob3duZXIgPSBw YWdlX2dldF9vd25lcihwYWdlKSkgIT0gZCkgKQorICAgICAgICBnb3RvIGZhaWw7CiAKLSBvdXQ6 Ci0gICAgcmV0dXJuIHBnX293bmVyOwotfQorICAgIC8qCisgICAgICogV2UgcmVxdWlyZSB0aGVy ZSBpcyBqdXN0IG9uZSByZWZlcmVuY2UgKFBHQ19hbGxvY2F0ZWQpLiBXZSB0ZW1wb3JhcmlseQor ICAgICAqIGRyb3AgdGhpcyByZWZlcmVuY2Ugbm93IHNvIHRoYXQgd2UgY2FuIHNhZmVseSBzd2l6 emxlIHRoZSBvd25lci4KKyAgICAgKi8KKyAgICB5ID0gcGFnZS0+Y291bnRfaW5mbzsKKyAgICBk byB7CisgICAgICAgIHggPSB5OworICAgICAgICBpZiAoICh4ICYgKFBHQ19jb3VudF9tYXNrfFBH Q19hbGxvY2F0ZWQpKSAhPSAoMSB8IFBHQ19hbGxvY2F0ZWQpICkKKyAgICAgICAgICAgIGdvdG8g ZmFpbDsKKyAgICAgICAgeSA9IGNtcHhjaGcoJnBhZ2UtPmNvdW50X2luZm8sIHgsIHggJiB+UEdD X2NvdW50X21hc2spOworICAgIH0gd2hpbGUgKCB5ICE9IHggKTsKIAotc3RhdGljIHZvaWQgcHV0 X3BnX293bmVyKHN0cnVjdCBkb21haW4gKnBnX293bmVyKQotewotICAgIHJjdV91bmxvY2tfZG9t YWluKHBnX293bmVyKTsKLX0KKyAgICAvKgorICAgICAqIFdpdGggdGhlIHNvbGUgcmVmZXJlbmNl IGRyb3BwZWQgdGVtcG9yYXJpbHksIG5vLW9uZSBjYW4gdXBkYXRlIHR5cGUKKyAgICAgKiBpbmZv cm1hdGlvbi4gVHlwZSBjb3VudCBhbHNvIG5lZWRzIHRvIGJlIHplcm8gaW4gdGhpcyBjYXNlLCBi dXQgZS5nLgorICAgICAqIFBHVF9zZWdfZGVzY19wYWdlIG1heSBzdGlsbCBoYXZlIFBHVF92YWxp ZGF0ZWQgc2V0LCB3aGljaCB3ZSBuZWVkIHRvCisgICAgICogY2xlYXIgYmVmb3JlIHRyYW5zZmVy cmluZyBvd25lcnNoaXAgKGFzIHZhbGlkYXRpb24gY3JpdGVyaWEgdmFyeQorICAgICAqIGRlcGVu ZGluZyBvbiBkb21haW4gdHlwZSkuCisgICAgICovCisgICAgQlVHX09OKHBhZ2UtPnUuaW51c2Uu dHlwZV9pbmZvICYgKFBHVF9jb3VudF9tYXNrIHwgUEdUX2xvY2tlZCB8CisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFBHVF9waW5uZWQpKTsKKyAgICBwYWdlLT51LmludXNl LnR5cGVfaW5mbyA9IDA7CiAKLXN0YXRpYyBpbmxpbmUgaW50IHZjcHVtYXNrX3RvX3BjcHVtYXNr KAotICAgIHN0cnVjdCBkb21haW4gKmQsIFhFTl9HVUVTVF9IQU5ETEVfUEFSQU0oY29uc3Rfdm9p ZCkgYm1hcCwgY3B1bWFza190ICpwbWFzaykKLXsKLSAgICB1bnNpZ25lZCBpbnQgdmNwdV9pZCwg dmNwdV9iaWFzLCBvZmZzOwotICAgIHVuc2lnbmVkIGxvbmcgdm1hc2s7Ci0gICAgc3RydWN0IHZj cHUgKnY7Ci0gICAgYm9vbCBpc19uYXRpdmUgPSAhaXNfcHZfMzJiaXRfZG9tYWluKGQpOworICAg IC8qIFN3aXp6bGUgdGhlIG93bmVyIHRoZW4gcmVpbnN0YXRlIHRoZSBQR0NfYWxsb2NhdGVkIHJl ZmVyZW5jZS4gKi8KKyAgICBwYWdlX3NldF9vd25lcihwYWdlLCBOVUxMKTsKKyAgICB5ID0gcGFn ZS0+Y291bnRfaW5mbzsKKyAgICBkbyB7CisgICAgICAgIHggPSB5OworICAgICAgICBCVUdfT04o KHggJiAoUEdDX2NvdW50X21hc2t8UEdDX2FsbG9jYXRlZCkpICE9IFBHQ19hbGxvY2F0ZWQpOwor ICAgIH0gd2hpbGUgKCAoeSA9IGNtcHhjaGcoJnBhZ2UtPmNvdW50X2luZm8sIHgsIHggfCAxKSkg IT0geCApOwogCi0gICAgY3B1bWFza19jbGVhcihwbWFzayk7Ci0gICAgZm9yICggdm1hc2sgPSAw LCBvZmZzID0gMDsgOyArK29mZnMgKQotICAgIHsKLSAgICAgICAgdmNwdV9iaWFzID0gb2ZmcyAq IChpc19uYXRpdmUgPyBCSVRTX1BFUl9MT05HIDogMzIpOwotICAgICAgICBpZiAoIHZjcHVfYmlh cyA+PSBkLT5tYXhfdmNwdXMgKQotICAgICAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICAgICAgaWYg KCB1bmxpa2VseShpc19uYXRpdmUgPwotICAgICAgICAgICAgICAgICAgICAgIGNvcHlfZnJvbV9n dWVzdF9vZmZzZXQoJnZtYXNrLCBibWFwLCBvZmZzLCAxKSA6Ci0gICAgICAgICAgICAgICAgICAg ICAgY29weV9mcm9tX2d1ZXN0X29mZnNldCgodW5zaWduZWQgaW50ICopJnZtYXNrLCBibWFwLAot ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2ZmcywgMSkpICkK LSAgICAgICAgewotICAgICAgICAgICAgY3B1bWFza19jbGVhcihwbWFzayk7Ci0gICAgICAgICAg ICByZXR1cm4gLUVGQVVMVDsKLSAgICAgICAgfQotCi0gICAgICAgIHdoaWxlICggdm1hc2sgKQot ICAgICAgICB7Ci0gICAgICAgICAgICB2Y3B1X2lkID0gZmluZF9maXJzdF9zZXRfYml0KHZtYXNr KTsKLSAgICAgICAgICAgIHZtYXNrICY9IH4oMVVMIDw8IHZjcHVfaWQpOwotICAgICAgICAgICAg dmNwdV9pZCArPSB2Y3B1X2JpYXM7Ci0gICAgICAgICAgICBpZiAoICh2Y3B1X2lkID49IGQtPm1h eF92Y3B1cykgKQotICAgICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICAgICAgaWYgKCAo KHYgPSBkLT52Y3B1W3ZjcHVfaWRdKSAhPSBOVUxMKSApCi0gICAgICAgICAgICAgICAgY3B1bWFz a19vcihwbWFzaywgcG1hc2ssIHYtPnZjcHVfZGlydHlfY3B1bWFzayk7Ci0gICAgICAgIH0KLSAg ICB9Ci19Ci0KLWxvbmcgZG9fbW11ZXh0X29wKAotICAgIFhFTl9HVUVTVF9IQU5ETEVfUEFSQU0o bW11ZXh0X29wX3QpIHVvcHMsCi0gICAgdW5zaWduZWQgaW50IGNvdW50LAotICAgIFhFTl9HVUVT VF9IQU5ETEVfUEFSQU0odWludCkgcGRvbmUsCi0gICAgdW5zaWduZWQgaW50IGZvcmVpZ25kb20p Ci17Ci0gICAgc3RydWN0IG1tdWV4dF9vcCBvcDsKLSAgICB1bnNpZ25lZCBsb25nIHR5cGU7Ci0g ICAgdW5zaWduZWQgaW50IGksIGRvbmUgPSAwOwotICAgIHN0cnVjdCB2Y3B1ICpjdXJyID0gY3Vy cmVudDsKLSAgICBzdHJ1Y3QgZG9tYWluICpjdXJyZCA9IGN1cnItPmRvbWFpbjsKLSAgICBzdHJ1 Y3QgZG9tYWluICpwZ19vd25lcjsKLSAgICBpbnQgcmMgPSBwdXRfb2xkX2d1ZXN0X3RhYmxlKGN1 cnIpOwotCi0gICAgaWYgKCB1bmxpa2VseShyYykgKQotICAgIHsKLSAgICAgICAgaWYgKCBsaWtl bHkocmMgPT0gLUVSRVNUQVJUKSApCi0gICAgICAgICAgICByYyA9IGh5cGVyY2FsbF9jcmVhdGVf Y29udGludWF0aW9uKAotICAgICAgICAgICAgICAgICAgICAgX19IWVBFUlZJU09SX21tdWV4dF9v cCwgImhpaGkiLCB1b3BzLCBjb3VudCwgcGRvbmUsCi0gICAgICAgICAgICAgICAgICAgICBmb3Jl aWduZG9tKTsKLSAgICAgICAgcmV0dXJuIHJjOwotICAgIH0KLQotICAgIGlmICggdW5saWtlbHko Y291bnQgPT0gTU1VX1VQREFURV9QUkVFTVBURUQpICYmCi0gICAgICAgICBsaWtlbHkoZ3Vlc3Rf aGFuZGxlX2lzX251bGwodW9wcykpICkKLSAgICB7Ci0gICAgICAgIC8qCi0gICAgICAgICAqIFNl ZSB0aGUgY3Vyci0+YXJjaC5vbGRfZ3Vlc3RfdGFibGUgcmVsYXRlZAotICAgICAgICAgKiBoeXBl cmNhbGxfY3JlYXRlX2NvbnRpbnVhdGlvbigpIGJlbG93LgotICAgICAgICAgKi8KLSAgICAgICAg cmV0dXJuIChpbnQpZm9yZWlnbmRvbTsKLSAgICB9Ci0KLSAgICBpZiAoIHVubGlrZWx5KGNvdW50 ICYgTU1VX1VQREFURV9QUkVFTVBURUQpICkKLSAgICB7Ci0gICAgICAgIGNvdW50ICY9IH5NTVVf VVBEQVRFX1BSRUVNUFRFRDsKLSAgICAgICAgaWYgKCB1bmxpa2VseSghZ3Vlc3RfaGFuZGxlX2lz X251bGwocGRvbmUpKSApCi0gICAgICAgICAgICAodm9pZCljb3B5X2Zyb21fZ3Vlc3QoJmRvbmUs IHBkb25lLCAxKTsKLSAgICB9Ci0gICAgZWxzZQotICAgICAgICBwZXJmY19pbmNyKGNhbGxzX3Rv X21tdWV4dF9vcCk7Ci0KLSAgICBpZiAoIHVubGlrZWx5KCFndWVzdF9oYW5kbGVfb2theSh1b3Bz LCBjb3VudCkpICkKLSAgICAgICAgcmV0dXJuIC1FRkFVTFQ7Ci0KLSAgICBpZiAoIChwZ19vd25l ciA9IGdldF9wZ19vd25lcihmb3JlaWduZG9tKSkgPT0gTlVMTCApCi0gICAgICAgIHJldHVybiAt RVNSQ0g7Ci0KLSAgICBpZiAoICFpc19wdl9kb21haW4ocGdfb3duZXIpICkKLSAgICB7Ci0gICAg ICAgIHB1dF9wZ19vd25lcihwZ19vd25lcik7Ci0gICAgICAgIHJldHVybiAtRUlOVkFMOwotICAg IH0KLQotICAgIHJjID0geHNtX21tdWV4dF9vcChYU01fVEFSR0VULCBjdXJyZCwgcGdfb3duZXIp OwotICAgIGlmICggcmMgKQotICAgIHsKLSAgICAgICAgcHV0X3BnX293bmVyKHBnX293bmVyKTsK LSAgICAgICAgcmV0dXJuIHJjOwotICAgIH0KLQotICAgIGZvciAoIGkgPSAwOyBpIDwgY291bnQ7 IGkrKyApCi0gICAgewotICAgICAgICBpZiAoIGN1cnItPmFyY2gub2xkX2d1ZXN0X3RhYmxlIHx8 IChpICYmIGh5cGVyY2FsbF9wcmVlbXB0X2NoZWNrKCkpICkKLSAgICAgICAgewotICAgICAgICAg ICAgcmMgPSAtRVJFU1RBUlQ7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotCi0gICAg ICAgIGlmICggdW5saWtlbHkoX19jb3B5X2Zyb21fZ3Vlc3QoJm9wLCB1b3BzLCAxKSAhPSAwKSAp Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHJjID0gLUVGQVVMVDsKLSAgICAgICAgICAgIGJyZWFr OwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKCBpc19odm1fZG9tYWluKGN1cnJkKSApCi0gICAg ICAgIHsKLSAgICAgICAgICAgIHN3aXRjaCAoIG9wLmNtZCApCi0gICAgICAgICAgICB7Ci0gICAg ICAgICAgICBjYXNlIE1NVUVYVF9QSU5fTDFfVEFCTEU6Ci0gICAgICAgICAgICBjYXNlIE1NVUVY VF9QSU5fTDJfVEFCTEU6Ci0gICAgICAgICAgICBjYXNlIE1NVUVYVF9QSU5fTDNfVEFCTEU6Ci0g ICAgICAgICAgICBjYXNlIE1NVUVYVF9QSU5fTDRfVEFCTEU6Ci0gICAgICAgICAgICBjYXNlIE1N VUVYVF9VTlBJTl9UQUJMRToKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGRl ZmF1bHQ6Ci0gICAgICAgICAgICAgICAgcmMgPSAtRU9QTk9UU1VQUDsKLSAgICAgICAgICAgICAg ICBnb3RvIGRvbmU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICByYyA9IDA7 Ci0KLSAgICAgICAgc3dpdGNoICggb3AuY21kICkKLSAgICAgICAgewotICAgICAgICAgICAgc3Ry dWN0IHBhZ2VfaW5mbyAqcGFnZTsKLSAgICAgICAgICAgIHAybV90eXBlX3QgcDJtdDsKLQotICAg ICAgICBjYXNlIE1NVUVYVF9QSU5fTDFfVEFCTEU6Ci0gICAgICAgICAgICB0eXBlID0gUEdUX2wx X3BhZ2VfdGFibGU7Ci0gICAgICAgICAgICBnb3RvIHBpbl9wYWdlOwotCi0gICAgICAgIGNhc2Ug TU1VRVhUX1BJTl9MMl9UQUJMRToKLSAgICAgICAgICAgIHR5cGUgPSBQR1RfbDJfcGFnZV90YWJs ZTsKLSAgICAgICAgICAgIGdvdG8gcGluX3BhZ2U7Ci0KLSAgICAgICAgY2FzZSBNTVVFWFRfUElO X0wzX1RBQkxFOgotICAgICAgICAgICAgdHlwZSA9IFBHVF9sM19wYWdlX3RhYmxlOwotICAgICAg ICAgICAgZ290byBwaW5fcGFnZTsKLQotICAgICAgICBjYXNlIE1NVUVYVF9QSU5fTDRfVEFCTEU6 Ci0gICAgICAgICAgICBpZiAoIGlzX3B2XzMyYml0X2RvbWFpbihwZ19vd25lcikgKQotICAgICAg ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgdHlwZSA9IFBHVF9sNF9wYWdlX3RhYmxlOwot Ci0gICAgICAgIHBpbl9wYWdlOgotICAgICAgICAgICAgLyogSWdub3JlIHBpbm5pbmcgb2YgaW52 YWxpZCBwYWdpbmcgbGV2ZWxzLiAqLwotICAgICAgICAgICAgaWYgKCAob3AuY21kIC0gTU1VRVhU X1BJTl9MMV9UQUJMRSkgPiAoQ09ORklHX1BBR0lOR19MRVZFTFMgLSAxKSApCi0gICAgICAgICAg ICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgIGlmICggcGFnaW5nX21vZGVfcmVmY291bnRzKHBn X293bmVyKSApCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgIHBhZ2UgPSBn ZXRfcGFnZV9mcm9tX2dmbihwZ19vd25lciwgb3AuYXJnMS5tZm4sIE5VTEwsIFAyTV9BTExPQyk7 Ci0gICAgICAgICAgICBpZiAoIHVubGlrZWx5KCFwYWdlKSApCi0gICAgICAgICAgICB7Ci0gICAg ICAgICAgICAgICAgcmMgPSAtRUlOVkFMOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg ICAgICAgfQotCi0gICAgICAgICAgICByYyA9IGdldF9wYWdlX3R5cGVfcHJlZW1wdGlibGUocGFn ZSwgdHlwZSk7Ci0gICAgICAgICAgICBpZiAoIHVubGlrZWx5KHJjKSApCi0gICAgICAgICAgICB7 Ci0gICAgICAgICAgICAgICAgaWYgKCByYyA9PSAtRUlOVFIgKQotICAgICAgICAgICAgICAgICAg ICByYyA9IC1FUkVTVEFSVDsKLSAgICAgICAgICAgICAgICBlbHNlIGlmICggcmMgIT0gLUVSRVNU QVJUICkKLSAgICAgICAgICAgICAgICAgICAgZ2RwcmludGsoWEVOTE9HX1dBUk5JTkcsCi0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICJFcnJvciAlZCB3aGlsZSBwaW5uaW5nIG1mbiAlIiBQ UklfbWZuICJcbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmMsIHBhZ2VfdG9fbWZu KHBhZ2UpKTsKLSAgICAgICAgICAgICAgICBpZiAoIHBhZ2UgIT0gY3Vyci0+YXJjaC5vbGRfZ3Vl c3RfdGFibGUgKQotICAgICAgICAgICAgICAgICAgICBwdXRfcGFnZShwYWdlKTsKLSAgICAgICAg ICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgcmMgPSB4c21fbWVt b3J5X3Bpbl9wYWdlKFhTTV9IT09LLCBjdXJyZCwgcGdfb3duZXIsIHBhZ2UpOwotICAgICAgICAg ICAgaWYgKCAhcmMgJiYgdW5saWtlbHkodGVzdF9hbmRfc2V0X2JpdChfUEdUX3Bpbm5lZCwKLSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnBhZ2UtPnUu aW51c2UudHlwZV9pbmZvKSkgKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGdkcHJp bnRrKFhFTkxPR19XQVJOSU5HLAotICAgICAgICAgICAgICAgICAgICAgICAgICJtZm4gJSIgUFJJ X21mbiAiIGFscmVhZHkgcGlubmVkXG4iLCBwYWdlX3RvX21mbihwYWdlKSk7Ci0gICAgICAgICAg ICAgICAgcmMgPSAtRUlOVkFMOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAoIHVu bGlrZWx5KHJjKSApCi0gICAgICAgICAgICAgICAgZ290byBwaW5fZHJvcDsKLQotICAgICAgICAg ICAgLyogQSBwYWdlIGlzIGRpcnRpZWQgd2hlbiBpdHMgcGluIHN0YXR1cyBpcyBzZXQuICovCi0g ICAgICAgICAgICBwYWdpbmdfbWFya19kaXJ0eShwZ19vd25lciwgX21mbihwYWdlX3RvX21mbihw YWdlKSkpOwotCi0gICAgICAgICAgICAvKiBXZSBjYW4gcmFjZSBkb21haW4gZGVzdHJ1Y3Rpb24g KGRvbWFpbl9yZWxpbnF1aXNoX3Jlc291cmNlcykuICovCi0gICAgICAgICAgICBpZiAoIHVubGlr ZWx5KHBnX293bmVyICE9IGN1cnJkKSApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg Ym9vbCBkcm9wX3JlZjsKLQotICAgICAgICAgICAgICAgIHNwaW5fbG9jaygmcGdfb3duZXItPnBh Z2VfYWxsb2NfbG9jayk7Ci0gICAgICAgICAgICAgICAgZHJvcF9yZWYgPSAocGdfb3duZXItPmlz X2R5aW5nICYmCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVzdF9hbmRfY2xlYXJfYml0 KF9QR1RfcGlubmVkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAmcGFnZS0+dS5pbnVzZS50eXBlX2luZm8pKTsKLSAgICAgICAgICAgICAgICBzcGluX3Vu bG9jaygmcGdfb3duZXItPnBhZ2VfYWxsb2NfbG9jayk7Ci0gICAgICAgICAgICAgICAgaWYgKCBk cm9wX3JlZiApCi0gICAgICAgICAgICAgICAgewotICAgICAgICBwaW5fZHJvcDoKLSAgICAgICAg ICAgICAgICAgICAgaWYgKCB0eXBlID09IFBHVF9sMV9wYWdlX3RhYmxlICkKLSAgICAgICAgICAg ICAgICAgICAgICAgIHB1dF9wYWdlX2FuZF90eXBlKHBhZ2UpOwotICAgICAgICAgICAgICAgICAg ICBlbHNlCi0gICAgICAgICAgICAgICAgICAgICAgICBjdXJyLT5hcmNoLm9sZF9ndWVzdF90YWJs ZSA9IHBhZ2U7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAg YnJlYWs7Ci0KLSAgICAgICAgY2FzZSBNTVVFWFRfVU5QSU5fVEFCTEU6Ci0gICAgICAgICAgICBp ZiAoIHBhZ2luZ19tb2RlX3JlZmNvdW50cyhwZ19vd25lcikgKQotICAgICAgICAgICAgICAgIGJy ZWFrOwotCi0gICAgICAgICAgICBwYWdlID0gZ2V0X3BhZ2VfZnJvbV9nZm4ocGdfb3duZXIsIG9w LmFyZzEubWZuLCBOVUxMLCBQMk1fQUxMT0MpOwotICAgICAgICAgICAgaWYgKCB1bmxpa2VseSgh cGFnZSkgKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGdkcHJpbnRrKFhFTkxPR19X QVJOSU5HLAotICAgICAgICAgICAgICAgICAgICAgICAgICJtZm4gJSIgUFJJX21mbiAiIGJhZCwg b3IgYmFkIG93bmVyIGQlZFxuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICBvcC5hcmcxLm1m biwgcGdfb3duZXItPmRvbWFpbl9pZCk7Ci0gICAgICAgICAgICAgICAgcmMgPSAtRUlOVkFMOwot ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAo ICF0ZXN0X2FuZF9jbGVhcl9iaXQoX1BHVF9waW5uZWQsICZwYWdlLT51LmludXNlLnR5cGVfaW5m bykgKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHB1dF9wYWdlKHBhZ2UpOwotICAg ICAgICAgICAgICAgIGdkcHJpbnRrKFhFTkxPR19XQVJOSU5HLAotICAgICAgICAgICAgICAgICAg ICAgICAgICJtZm4gJSIgUFJJX21mbiAiIG5vdCBwaW5uZWRcbiIsIG9wLmFyZzEubWZuKTsKLSAg ICAgICAgICAgICAgICByYyA9IC1FSU5WQUw7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg ICAgICAgICB9Ci0KLSAgICAgICAgICAgIHN3aXRjaCAoIHJjID0gcHV0X3BhZ2VfYW5kX3R5cGVf cHJlZW1wdGlibGUocGFnZSkgKQotICAgICAgICAgICAgewotICAgICAgICAgICAgY2FzZSAtRUlO VFI6Ci0gICAgICAgICAgICBjYXNlIC1FUkVTVEFSVDoKLSAgICAgICAgICAgICAgICBjdXJyLT5h cmNoLm9sZF9ndWVzdF90YWJsZSA9IHBhZ2U7Ci0gICAgICAgICAgICAgICAgcmMgPSAwOwotICAg ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAg ICBCVUdfT04ocmMpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAg ICAgICAgICAgcHV0X3BhZ2UocGFnZSk7Ci0KLSAgICAgICAgICAgIC8qIEEgcGFnZSBpcyBkaXJ0 aWVkIHdoZW4gaXRzIHBpbiBzdGF0dXMgaXMgY2xlYXJlZC4gKi8KLSAgICAgICAgICAgIHBhZ2lu Z19tYXJrX2RpcnR5KHBnX293bmVyLCBfbWZuKHBhZ2VfdG9fbWZuKHBhZ2UpKSk7Ci0gICAgICAg ICAgICBicmVhazsKLQotICAgICAgICBjYXNlIE1NVUVYVF9ORVdfQkFTRVBUUjoKLSAgICAgICAg ICAgIGlmICggdW5saWtlbHkoY3VycmQgIT0gcGdfb3duZXIpICkKLSAgICAgICAgICAgICAgICBy YyA9IC1FUEVSTTsKLSAgICAgICAgICAgIGVsc2UgaWYgKCB1bmxpa2VseShwYWdpbmdfbW9kZV90 cmFuc2xhdGUoY3VycmQpKSApCi0gICAgICAgICAgICAgICAgcmMgPSAtRUlOVkFMOwotICAgICAg ICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHJjID0gcHZfbmV3X2d1ZXN0X2NyMyhvcC5hcmcx Lm1mbik7Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBjYXNlIE1NVUVYVF9ORVdfVVNF Ul9CQVNFUFRSOiB7Ci0gICAgICAgICAgICB1bnNpZ25lZCBsb25nIG9sZF9tZm47Ci0KLSAgICAg ICAgICAgIGlmICggdW5saWtlbHkoY3VycmQgIT0gcGdfb3duZXIpICkKLSAgICAgICAgICAgICAg ICByYyA9IC1FUEVSTTsKLSAgICAgICAgICAgIGVsc2UgaWYgKCB1bmxpa2VseShwYWdpbmdfbW9k ZV90cmFuc2xhdGUoY3VycmQpKSApCi0gICAgICAgICAgICAgICAgcmMgPSAtRUlOVkFMOwotICAg ICAgICAgICAgaWYgKCB1bmxpa2VseShyYykgKQotICAgICAgICAgICAgICAgIGJyZWFrOwotCi0g ICAgICAgICAgICBvbGRfbWZuID0gcGFnZXRhYmxlX2dldF9wZm4oY3Vyci0+YXJjaC5ndWVzdF90 YWJsZV91c2VyKTsKLSAgICAgICAgICAgIC8qCi0gICAgICAgICAgICAgKiBUaGlzIGlzIHBhcnRp Y3VsYXJseSBpbXBvcnRhbnQgd2hlbiBnZXR0aW5nIHJlc3RhcnRlZCBhZnRlciB0aGUKLSAgICAg ICAgICAgICAqIHByZXZpb3VzIGF0dGVtcHQgZ290IHByZWVtcHRlZCBpbiB0aGUgcHV0LW9sZC1N Rk4gcGhhc2UuCi0gICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIGlmICggb2xkX21mbiA9PSBv cC5hcmcxLm1mbiApCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgIGlmICgg b3AuYXJnMS5tZm4gIT0gMCApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmMgPSBn ZXRfcGFnZV9hbmRfdHlwZV9mcm9tX21mbigKLSAgICAgICAgICAgICAgICAgICAgX21mbihvcC5h cmcxLm1mbiksIFBHVF9yb290X3BhZ2VfdGFibGUsIGN1cnJkLCAwLCB0cnVlKTsKLQotICAgICAg ICAgICAgICAgIGlmICggdW5saWtlbHkocmMpICkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAg ICAgICAgICAgICAgIGlmICggcmMgPT0gLUVJTlRSICkKLSAgICAgICAgICAgICAgICAgICAgICAg IHJjID0gLUVSRVNUQVJUOwotICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICggcmMgIT0gLUVS RVNUQVJUICkKLSAgICAgICAgICAgICAgICAgICAgICAgIGdkcHJpbnRrKFhFTkxPR19XQVJOSU5H LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkVycm9yICVkIGluc3RhbGxpbmcg bmV3IG1mbiAlIiBQUklfbWZuICJcbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICByYywgb3AuYXJnMS5tZm4pOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg ICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBpZiAoIFZNX0FTU0lTVChjdXJyZCwgbTJwX3N0 cmljdCkgKQotICAgICAgICAgICAgICAgICAgICB6YXBfcm9fbXB0KG9wLmFyZzEubWZuKTsKLSAg ICAgICAgICAgIH0KLQotICAgICAgICAgICAgY3Vyci0+YXJjaC5ndWVzdF90YWJsZV91c2VyID0g cGFnZXRhYmxlX2Zyb21fcGZuKG9wLmFyZzEubWZuKTsKLQotICAgICAgICAgICAgaWYgKCBvbGRf bWZuICE9IDAgKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHBhZ2UgPSBtZm5fdG9f cGFnZShvbGRfbWZuKTsKLQotICAgICAgICAgICAgICAgIHN3aXRjaCAoIHJjID0gcHV0X3BhZ2Vf YW5kX3R5cGVfcHJlZW1wdGlibGUocGFnZSkgKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAg ICAgICAgICBjYXNlIC1FSU5UUjoKLSAgICAgICAgICAgICAgICAgICAgcmMgPSAtRVJFU1RBUlQ7 Ci0gICAgICAgICAgICAgICAgICAgIC8qIGZhbGx0aHJvdWdoICovCi0gICAgICAgICAgICAgICAg Y2FzZSAtRVJFU1RBUlQ6Ci0gICAgICAgICAgICAgICAgICAgIGN1cnItPmFyY2gub2xkX2d1ZXN0 X3RhYmxlID0gcGFnZTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAg ICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICAgICAgQlVHX09OKHJjKTsKLSAgICAgICAgICAg ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAg ICAgICAgICBicmVhazsKLSAgICAgICAgfQotCi0gICAgICAgIGNhc2UgTU1VRVhUX1RMQl9GTFVT SF9MT0NBTDoKLSAgICAgICAgICAgIGlmICggbGlrZWx5KGN1cnJkID09IHBnX293bmVyKSApCi0g ICAgICAgICAgICAgICAgZmx1c2hfdGxiX2xvY2FsKCk7Ci0gICAgICAgICAgICBlbHNlCi0gICAg ICAgICAgICAgICAgcmMgPSAtRVBFUk07Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBj YXNlIE1NVUVYVF9JTlZMUEdfTE9DQUw6Ci0gICAgICAgICAgICBpZiAoIHVubGlrZWx5KGN1cnJk ICE9IHBnX293bmVyKSApCi0gICAgICAgICAgICAgICAgcmMgPSAtRVBFUk07Ci0gICAgICAgICAg ICBlbHNlCi0gICAgICAgICAgICAgICAgcGFnaW5nX2ludmxwZyhjdXJyLCBvcC5hcmcxLmxpbmVh cl9hZGRyKTsKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGNhc2UgTU1VRVhUX1RMQl9G TFVTSF9NVUxUSToKLSAgICAgICAgY2FzZSBNTVVFWFRfSU5WTFBHX01VTFRJOgotICAgICAgICB7 Ci0gICAgICAgICAgICBjcHVtYXNrX3QgKm1hc2sgPSB0aGlzX2NwdShzY3JhdGNoX2NwdW1hc2sp OwotCi0gICAgICAgICAgICBpZiAoIHVubGlrZWx5KGN1cnJkICE9IHBnX293bmVyKSApCi0gICAg ICAgICAgICAgICAgcmMgPSAtRVBFUk07Ci0gICAgICAgICAgICBlbHNlIGlmICggdW5saWtlbHko dmNwdW1hc2tfdG9fcGNwdW1hc2soY3VycmQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGd1ZXN0X2hhbmRsZV90b19wYXJhbShvcC5hcmcyLnZjcHVtYXNrLAotICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Rfdm9p ZCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hc2spKSApCi0gICAgICAg ICAgICAgICAgcmMgPSAtRUlOVkFMOwotICAgICAgICAgICAgaWYgKCB1bmxpa2VseShyYykgKQot ICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICBpZiAoIG9wLmNtZCA9PSBNTVVF WFRfVExCX0ZMVVNIX01VTFRJICkKLSAgICAgICAgICAgICAgICBmbHVzaF90bGJfbWFzayhtYXNr KTsKLSAgICAgICAgICAgIGVsc2UgaWYgKCBfX2FkZHJfb2sob3AuYXJnMS5saW5lYXJfYWRkcikg KQotICAgICAgICAgICAgICAgIGZsdXNoX3RsYl9vbmVfbWFzayhtYXNrLCBvcC5hcmcxLmxpbmVh cl9hZGRyKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0KLSAgICAgICAgY2FzZSBN TVVFWFRfVExCX0ZMVVNIX0FMTDoKLSAgICAgICAgICAgIGlmICggbGlrZWx5KGN1cnJkID09IHBn X293bmVyKSApCi0gICAgICAgICAgICAgICAgZmx1c2hfdGxiX21hc2soY3VycmQtPmRvbWFpbl9k aXJ0eV9jcHVtYXNrKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICByYyA9IC1F UEVSTTsKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGNhc2UgTU1VRVhUX0lOVkxQR19B TEw6Ci0gICAgICAgICAgICBpZiAoIHVubGlrZWx5KGN1cnJkICE9IHBnX293bmVyKSApCi0gICAg ICAgICAgICAgICAgcmMgPSAtRVBFUk07Ci0gICAgICAgICAgICBlbHNlIGlmICggX19hZGRyX29r KG9wLmFyZzEubGluZWFyX2FkZHIpICkKLSAgICAgICAgICAgICAgICBmbHVzaF90bGJfb25lX21h c2soY3VycmQtPmRvbWFpbl9kaXJ0eV9jcHVtYXNrLAotICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBvcC5hcmcxLmxpbmVhcl9hZGRyKTsKLSAgICAgICAgICAgIGJyZWFrOwotCi0g ICAgICAgIGNhc2UgTU1VRVhUX0ZMVVNIX0NBQ0hFOgotICAgICAgICAgICAgaWYgKCB1bmxpa2Vs eShjdXJyZCAhPSBwZ19vd25lcikgKQotICAgICAgICAgICAgICAgIHJjID0gLUVQRVJNOwotICAg ICAgICAgICAgZWxzZSBpZiAoIHVubGlrZWx5KCFjYWNoZV9mbHVzaF9wZXJtaXR0ZWQoY3VycmQp KSApCi0gICAgICAgICAgICAgICAgcmMgPSAtRUFDQ0VTOwotICAgICAgICAgICAgZWxzZQotICAg ICAgICAgICAgICAgIHdiaW52ZCgpOwotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgY2Fz ZSBNTVVFWFRfRkxVU0hfQ0FDSEVfR0xPQkFMOgotICAgICAgICAgICAgaWYgKCB1bmxpa2VseShj dXJyZCAhPSBwZ19vd25lcikgKQotICAgICAgICAgICAgICAgIHJjID0gLUVQRVJNOwotICAgICAg ICAgICAgZWxzZSBpZiAoIGxpa2VseShjYWNoZV9mbHVzaF9wZXJtaXR0ZWQoY3VycmQpKSApCi0g ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGNwdTsKLSAgICAgICAg ICAgICAgICBjcHVtYXNrX3QgKm1hc2sgPSB0aGlzX2NwdShzY3JhdGNoX2NwdW1hc2spOwotCi0g ICAgICAgICAgICAgICAgY3B1bWFza19jbGVhcihtYXNrKTsKLSAgICAgICAgICAgICAgICBmb3Jf ZWFjaF9vbmxpbmVfY3B1KGNwdSkKLSAgICAgICAgICAgICAgICAgICAgaWYgKCAhY3B1bWFza19p bnRlcnNlY3RzKG1hc2ssCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBwZXJfY3B1KGNwdV9zaWJsaW5nX21hc2ssIGNwdSkpICkKLSAgICAgICAgICAgICAgICAg ICAgICAgIF9fY3B1bWFza19zZXRfY3B1KGNwdSwgbWFzayk7Ci0gICAgICAgICAgICAgICAgZmx1 c2hfbWFzayhtYXNrLCBGTFVTSF9DQUNIRSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBl bHNlCi0gICAgICAgICAgICAgICAgcmMgPSAtRUlOVkFMOwotICAgICAgICAgICAgYnJlYWs7Ci0K LSAgICAgICAgY2FzZSBNTVVFWFRfU0VUX0xEVDoKLSAgICAgICAgewotICAgICAgICAgICAgdW5z aWduZWQgaW50IGVudHMgPSBvcC5hcmcyLm5yX2VudHM7Ci0gICAgICAgICAgICB1bnNpZ25lZCBs b25nIHB0ciA9IGVudHMgPyBvcC5hcmcxLmxpbmVhcl9hZGRyIDogMDsKLQotICAgICAgICAgICAg aWYgKCB1bmxpa2VseShjdXJyZCAhPSBwZ19vd25lcikgKQotICAgICAgICAgICAgICAgIHJjID0g LUVQRVJNOwotICAgICAgICAgICAgZWxzZSBpZiAoIHBhZ2luZ19tb2RlX2V4dGVybmFsKGN1cnJk KSApCi0gICAgICAgICAgICAgICAgcmMgPSAtRUlOVkFMOwotICAgICAgICAgICAgZWxzZSBpZiAo ICgocHRyICYgKFBBR0VfU0laRSAtIDEpKSAhPSAwKSB8fCAhX19hZGRyX29rKHB0cikgfHwKLSAg ICAgICAgICAgICAgICAgICAgICAoZW50cyA+IDgxOTIpICkKLSAgICAgICAgICAgIHsKLSAgICAg ICAgICAgICAgICBnZHByaW50ayhYRU5MT0dfV0FSTklORywKLSAgICAgICAgICAgICAgICAgICAg ICAgICAiQmFkIGFyZ3MgdG8gU0VUX0xEVDogcHRyPSVseCwgZW50cz0leFxuIiwgcHRyLCBlbnRz KTsKLSAgICAgICAgICAgICAgICByYyA9IC1FSU5WQUw7Ci0gICAgICAgICAgICB9Ci0gICAgICAg ICAgICBlbHNlIGlmICggKGN1cnItPmFyY2gucHZfdmNwdS5sZHRfZW50cyAhPSBlbnRzKSB8fAot ICAgICAgICAgICAgICAgICAgICAgIChjdXJyLT5hcmNoLnB2X3ZjcHUubGR0X2Jhc2UgIT0gcHRy KSApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcHZfaW52YWxpZGF0ZV9zaGFkb3df bGR0KGN1cnIsIGZhbHNlKTsKLSAgICAgICAgICAgICAgICBmbHVzaF90bGJfbG9jYWwoKTsKLSAg ICAgICAgICAgICAgICBjdXJyLT5hcmNoLnB2X3ZjcHUubGR0X2Jhc2UgPSBwdHI7Ci0gICAgICAg ICAgICAgICAgY3Vyci0+YXJjaC5wdl92Y3B1LmxkdF9lbnRzID0gZW50czsKLSAgICAgICAgICAg ICAgICBsb2FkX0xEVChjdXJyKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwot ICAgICAgICB9Ci0KLSAgICAgICAgY2FzZSBNTVVFWFRfQ0xFQVJfUEFHRToKLSAgICAgICAgICAg IHBhZ2UgPSBnZXRfcGFnZV9mcm9tX2dmbihwZ19vd25lciwgb3AuYXJnMS5tZm4sICZwMm10LCBQ Mk1fQUxMT0MpOwotICAgICAgICAgICAgaWYgKCB1bmxpa2VseShwMm10ICE9IHAybV9yYW1fcncp ICYmIHBhZ2UgKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHB1dF9wYWdlKHBhZ2Up OwotICAgICAgICAgICAgICAgIHBhZ2UgPSBOVUxMOwotICAgICAgICAgICAgfQotICAgICAgICAg ICAgaWYgKCAhcGFnZSB8fCAhZ2V0X3BhZ2VfdHlwZShwYWdlLCBQR1Rfd3JpdGFibGVfcGFnZSkg KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGlmICggcGFnZSApCi0gICAgICAgICAg ICAgICAgICAgIHB1dF9wYWdlKHBhZ2UpOwotICAgICAgICAgICAgICAgIGdkcHJpbnRrKFhFTkxP R19XQVJOSU5HLAotICAgICAgICAgICAgICAgICAgICAgICAgICJFcnJvciBjbGVhcmluZyBtZm4g JSIgUFJJX21mbiAiXG4iLCBvcC5hcmcxLm1mbik7Ci0gICAgICAgICAgICAgICAgcmMgPSAtRUlO VkFMOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAg ICAvKiBBIHBhZ2UgaXMgZGlydGllZCB3aGVuIGl0J3MgYmVpbmcgY2xlYXJlZC4gKi8KLSAgICAg ICAgICAgIHBhZ2luZ19tYXJrX2RpcnR5KHBnX293bmVyLCBfbWZuKHBhZ2VfdG9fbWZuKHBhZ2Up KSk7Ci0KLSAgICAgICAgICAgIGNsZWFyX2RvbWFpbl9wYWdlKF9tZm4ocGFnZV90b19tZm4ocGFn ZSkpKTsKLQotICAgICAgICAgICAgcHV0X3BhZ2VfYW5kX3R5cGUocGFnZSk7Ci0gICAgICAgICAg ICBicmVhazsKLQotICAgICAgICBjYXNlIE1NVUVYVF9DT1BZX1BBR0U6Ci0gICAgICAgIHsKLSAg ICAgICAgICAgIHN0cnVjdCBwYWdlX2luZm8gKnNyY19wYWdlLCAqZHN0X3BhZ2U7Ci0KLSAgICAg ICAgICAgIHNyY19wYWdlID0gZ2V0X3BhZ2VfZnJvbV9nZm4ocGdfb3duZXIsIG9wLmFyZzIuc3Jj X21mbiwgJnAybXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFAy TV9BTExPQyk7Ci0gICAgICAgICAgICBpZiAoIHVubGlrZWx5KHAybXQgIT0gcDJtX3JhbV9ydykg JiYgc3JjX3BhZ2UgKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHB1dF9wYWdlKHNy Y19wYWdlKTsKLSAgICAgICAgICAgICAgICBzcmNfcGFnZSA9IE5VTEw7Ci0gICAgICAgICAgICB9 Ci0gICAgICAgICAgICBpZiAoIHVubGlrZWx5KCFzcmNfcGFnZSkgKQotICAgICAgICAgICAgewot ICAgICAgICAgICAgICAgIGdkcHJpbnRrKFhFTkxPR19XQVJOSU5HLAotICAgICAgICAgICAgICAg ICAgICAgICAgICJFcnJvciBjb3B5aW5nIGZyb20gbWZuICUiIFBSSV9tZm4gIlxuIiwKLSAgICAg ICAgICAgICAgICAgICAgICAgICBvcC5hcmcyLnNyY19tZm4pOwotICAgICAgICAgICAgICAgIHJj ID0gLUVJTlZBTDsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLQotICAg ICAgICAgICAgZHN0X3BhZ2UgPSBnZXRfcGFnZV9mcm9tX2dmbihwZ19vd25lciwgb3AuYXJnMS5t Zm4sICZwMm10LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQMk1f QUxMT0MpOwotICAgICAgICAgICAgaWYgKCB1bmxpa2VseShwMm10ICE9IHAybV9yYW1fcncpICYm IGRzdF9wYWdlICkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBwdXRfcGFnZShkc3Rf cGFnZSk7Ci0gICAgICAgICAgICAgICAgZHN0X3BhZ2UgPSBOVUxMOwotICAgICAgICAgICAgfQot ICAgICAgICAgICAgcmMgPSAoZHN0X3BhZ2UgJiYKLSAgICAgICAgICAgICAgICAgIGdldF9wYWdl X3R5cGUoZHN0X3BhZ2UsIFBHVF93cml0YWJsZV9wYWdlKSkgPyAwIDogLUVJTlZBTDsKLSAgICAg ICAgICAgIGlmICggdW5saWtlbHkocmMpICkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg ICBwdXRfcGFnZShzcmNfcGFnZSk7Ci0gICAgICAgICAgICAgICAgaWYgKCBkc3RfcGFnZSApCi0g ICAgICAgICAgICAgICAgICAgIHB1dF9wYWdlKGRzdF9wYWdlKTsKLSAgICAgICAgICAgICAgICBn ZHByaW50ayhYRU5MT0dfV0FSTklORywKLSAgICAgICAgICAgICAgICAgICAgICAgICAiRXJyb3Ig Y29weWluZyB0byBtZm4gJSIgUFJJX21mbiAiXG4iLCBvcC5hcmcxLm1mbik7Ci0gICAgICAgICAg ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8qIEEgcGFnZSBpcyBk aXJ0aWVkIHdoZW4gaXQncyBiZWluZyBjb3BpZWQgdG8uICovCi0gICAgICAgICAgICBwYWdpbmdf bWFya19kaXJ0eShwZ19vd25lciwgX21mbihwYWdlX3RvX21mbihkc3RfcGFnZSkpKTsKLQotICAg ICAgICAgICAgY29weV9kb21haW5fcGFnZShfbWZuKHBhZ2VfdG9fbWZuKGRzdF9wYWdlKSksCi0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9tZm4ocGFnZV90b19tZm4oc3JjX3BhZ2UpKSk7 Ci0KLSAgICAgICAgICAgIHB1dF9wYWdlX2FuZF90eXBlKGRzdF9wYWdlKTsKLSAgICAgICAgICAg IHB1dF9wYWdlKHNyY19wYWdlKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0KLSAg ICAgICAgY2FzZSBNTVVFWFRfTUFSS19TVVBFUjoKLSAgICAgICAgY2FzZSBNTVVFWFRfVU5NQVJL X1NVUEVSOgotICAgICAgICAgICAgcmMgPSAtRU9QTk9UU1VQUDsKLSAgICAgICAgICAgIGJyZWFr OwotCi0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICByYyA9IC1FTk9TWVM7Ci0gICAgICAg ICAgICBicmVhazsKLSAgICAgICAgfQotCi0gZG9uZToKLSAgICAgICAgaWYgKCB1bmxpa2VseShy YykgKQotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgZ3Vlc3RfaGFuZGxlX2FkZF9vZmZz ZXQodW9wcywgMSk7Ci0gICAgfQotCi0gICAgaWYgKCByYyA9PSAtRVJFU1RBUlQgKQotICAgIHsK LSAgICAgICAgQVNTRVJUKGkgPCBjb3VudCk7Ci0gICAgICAgIHJjID0gaHlwZXJjYWxsX2NyZWF0 ZV9jb250aW51YXRpb24oCi0gICAgICAgICAgICBfX0hZUEVSVklTT1JfbW11ZXh0X29wLCAiaGlo aSIsCi0gICAgICAgICAgICB1b3BzLCAoY291bnQgLSBpKSB8IE1NVV9VUERBVEVfUFJFRU1QVEVE LCBwZG9uZSwgZm9yZWlnbmRvbSk7Ci0gICAgfQotICAgIGVsc2UgaWYgKCBjdXJyLT5hcmNoLm9s ZF9ndWVzdF90YWJsZSApCi0gICAgewotICAgICAgICBYRU5fR1VFU1RfSEFORExFX1BBUkFNKHZv aWQpIG51bGw7Ci0KLSAgICAgICAgQVNTRVJUKHJjIHx8IGkgPT0gY291bnQpOwotICAgICAgICBz ZXRfeGVuX2d1ZXN0X2hhbmRsZShudWxsLCBOVUxMKTsKLSAgICAgICAgLyoKLSAgICAgICAgICog SW4gb3JkZXIgdG8gaGF2ZSBhIHdheSB0byBjb21tdW5pY2F0ZSB0aGUgZmluYWwgcmV0dXJuIHZh bHVlIHRvCi0gICAgICAgICAqIG91ciBjb250aW51YXRpb24sIHdlIHBhc3MgdGhpcyBpbiBwbGFj ZSBvZiAiZm9yZWlnbmRvbSIsIGJ1aWxkaW5nCi0gICAgICAgICAqIG9uIHRoZSBmYWN0IHRoYXQg dGhpcyBhcmd1bWVudCBpc24ndCBuZWVkZWQgYW55bW9yZS4KLSAgICAgICAgICovCi0gICAgICAg IHJjID0gaHlwZXJjYWxsX2NyZWF0ZV9jb250aW51YXRpb24oCi0gICAgICAgICAgICAgICAgX19I WVBFUlZJU09SX21tdWV4dF9vcCwgImhpaGkiLCBudWxsLAotICAgICAgICAgICAgICAgIE1NVV9V UERBVEVfUFJFRU1QVEVELCBudWxsLCByYyk7Ci0gICAgfQotCi0gICAgcHV0X3BnX293bmVyKHBn X293bmVyKTsKLQotICAgIHBlcmZjX2FkZChudW1fbW11ZXh0X29wcywgaSk7Ci0KLSAgICAvKiBB ZGQgaW5jcmVtZW50YWwgd29yayB3ZSBoYXZlIGRvbmUgdG8gdGhlIEBkb25lIG91dHB1dCBwYXJh bWV0ZXIuICovCi0gICAgaWYgKCB1bmxpa2VseSghZ3Vlc3RfaGFuZGxlX2lzX251bGwocGRvbmUp KSApCi0gICAgewotICAgICAgICBkb25lICs9IGk7Ci0gICAgICAgIGNvcHlfdG9fZ3Vlc3QocGRv bmUsICZkb25lLCAxKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gcmM7Ci19Ci0KLWxvbmcgZG9fbW11 X3VwZGF0ZSgKLSAgICBYRU5fR1VFU1RfSEFORExFX1BBUkFNKG1tdV91cGRhdGVfdCkgdXJlcXMs Ci0gICAgdW5zaWduZWQgaW50IGNvdW50LAotICAgIFhFTl9HVUVTVF9IQU5ETEVfUEFSQU0odWlu dCkgcGRvbmUsCi0gICAgdW5zaWduZWQgaW50IGZvcmVpZ25kb20pCi17Ci0gICAgc3RydWN0IG1t dV91cGRhdGUgcmVxOwotICAgIHZvaWQgKnZhOwotICAgIHVuc2lnbmVkIGxvbmcgZ3BmbiwgZ21m biwgbWZuOwotICAgIHN0cnVjdCBwYWdlX2luZm8gKnBhZ2U7Ci0gICAgdW5zaWduZWQgaW50IGNt ZCwgaSA9IDAsIGRvbmUgPSAwLCBwdF9kb207Ci0gICAgc3RydWN0IHZjcHUgKmN1cnIgPSBjdXJy ZW50LCAqdiA9IGN1cnI7Ci0gICAgc3RydWN0IGRvbWFpbiAqZCA9IHYtPmRvbWFpbiwgKnB0X293 bmVyID0gZCwgKnBnX293bmVyOwotICAgIHN0cnVjdCBkb21haW5fbW1hcF9jYWNoZSBtYXBjYWNo ZTsKLSAgICB1aW50MzJfdCB4c21fbmVlZGVkID0gMDsKLSAgICB1aW50MzJfdCB4c21fY2hlY2tl ZCA9IDA7Ci0gICAgaW50IHJjID0gcHV0X29sZF9ndWVzdF90YWJsZShjdXJyKTsKLQotICAgIGlm ICggdW5saWtlbHkocmMpICkKLSAgICB7Ci0gICAgICAgIGlmICggbGlrZWx5KHJjID09IC1FUkVT VEFSVCkgKQotICAgICAgICAgICAgcmMgPSBoeXBlcmNhbGxfY3JlYXRlX2NvbnRpbnVhdGlvbigK LSAgICAgICAgICAgICAgICAgICAgIF9fSFlQRVJWSVNPUl9tbXVfdXBkYXRlLCAiaGloaSIsIHVy ZXFzLCBjb3VudCwgcGRvbmUsCi0gICAgICAgICAgICAgICAgICAgICBmb3JlaWduZG9tKTsKLSAg ICAgICAgcmV0dXJuIHJjOwotICAgIH0KLQotICAgIGlmICggdW5saWtlbHkoY291bnQgPT0gTU1V X1VQREFURV9QUkVFTVBURUQpICYmCi0gICAgICAgICBsaWtlbHkoZ3Vlc3RfaGFuZGxlX2lzX251 bGwodXJlcXMpKSApCi0gICAgewotICAgICAgICAvKgotICAgICAgICAgKiBTZWUgdGhlIGN1cnIt PmFyY2gub2xkX2d1ZXN0X3RhYmxlIHJlbGF0ZWQKLSAgICAgICAgICogaHlwZXJjYWxsX2NyZWF0 ZV9jb250aW51YXRpb24oKSBiZWxvdy4KLSAgICAgICAgICovCi0gICAgICAgIHJldHVybiAoaW50 KWZvcmVpZ25kb207Ci0gICAgfQotCi0gICAgaWYgKCB1bmxpa2VseShjb3VudCAmIE1NVV9VUERB VEVfUFJFRU1QVEVEKSApCi0gICAgewotICAgICAgICBjb3VudCAmPSB+TU1VX1VQREFURV9QUkVF TVBURUQ7Ci0gICAgICAgIGlmICggdW5saWtlbHkoIWd1ZXN0X2hhbmRsZV9pc19udWxsKHBkb25l KSkgKQotICAgICAgICAgICAgKHZvaWQpY29weV9mcm9tX2d1ZXN0KCZkb25lLCBwZG9uZSwgMSk7 Ci0gICAgfQotICAgIGVsc2UKLSAgICAgICAgcGVyZmNfaW5jcihjYWxsc190b19tbXVfdXBkYXRl KTsKLQotICAgIGlmICggdW5saWtlbHkoIWd1ZXN0X2hhbmRsZV9va2F5KHVyZXFzLCBjb3VudCkp ICkKLSAgICAgICAgcmV0dXJuIC1FRkFVTFQ7Ci0KLSAgICBpZiAoIChwdF9kb20gPSBmb3JlaWdu ZG9tID4+IDE2KSAhPSAwICkKLSAgICB7Ci0gICAgICAgIC8qIFBhZ2V0YWJsZXMgYmVsb25nIHRv IGEgZm9yZWlnbiBkb21haW4gKFBGRCkuICovCi0gICAgICAgIGlmICggKHB0X293bmVyID0gcmN1 X2xvY2tfZG9tYWluX2J5X2lkKHB0X2RvbSAtIDEpKSA9PSBOVUxMICkKLSAgICAgICAgICAgIHJl dHVybiAtRVNSQ0g7Ci0KLSAgICAgICAgaWYgKCBwdF9vd25lciA9PSBkICkKLSAgICAgICAgICAg IHJjdV91bmxvY2tfZG9tYWluKHB0X293bmVyKTsKLSAgICAgICAgZWxzZSBpZiAoICFwdF9vd25l ci0+dmNwdSB8fCAodiA9IHB0X293bmVyLT52Y3B1WzBdKSA9PSBOVUxMICkKLSAgICAgICAgewot ICAgICAgICAgICAgcmMgPSAtRUlOVkFMOwotICAgICAgICAgICAgZ290byBvdXQ7Ci0gICAgICAg IH0KLSAgICB9Ci0KLSAgICBpZiAoIChwZ19vd25lciA9IGdldF9wZ19vd25lcigodWludDE2X3Qp Zm9yZWlnbmRvbSkpID09IE5VTEwgKQotICAgIHsKLSAgICAgICAgcmMgPSAtRVNSQ0g7Ci0gICAg ICAgIGdvdG8gb3V0OwotICAgIH0KLQotICAgIGRvbWFpbl9tbWFwX2NhY2hlX2luaXQoJm1hcGNh Y2hlKTsKLQotICAgIGZvciAoIGkgPSAwOyBpIDwgY291bnQ7IGkrKyApCi0gICAgewotICAgICAg ICBpZiAoIGN1cnItPmFyY2gub2xkX2d1ZXN0X3RhYmxlIHx8IChpICYmIGh5cGVyY2FsbF9wcmVl bXB0X2NoZWNrKCkpICkKLSAgICAgICAgewotICAgICAgICAgICAgcmMgPSAtRVJFU1RBUlQ7Ci0g ICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICggdW5saWtlbHkoX19j b3B5X2Zyb21fZ3Vlc3QoJnJlcSwgdXJlcXMsIDEpICE9IDApICkKLSAgICAgICAgewotICAgICAg ICAgICAgcmMgPSAtRUZBVUxUOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLQotICAg ICAgICBjbWQgPSByZXEucHRyICYgKHNpemVvZihsMV9wZ2VudHJ5X3QpLTEpOwotCi0gICAgICAg IHN3aXRjaCAoIGNtZCApCi0gICAgICAgIHsKLSAgICAgICAgICAgIC8qCi0gICAgICAgICAgICAg KiBNTVVfTk9STUFMX1BUX1VQREFURTogTm9ybWFsIHVwZGF0ZSB0byBhbnkgbGV2ZWwgb2YgcGFn ZSB0YWJsZS4KLSAgICAgICAgICAgICAqIE1NVV9VUERBVEVfUFRfUFJFU0VSVkVfQUQ6IEFzIGFi b3ZlIGJ1dCBhbHNvIHByZXNlcnZlIChPUikKLSAgICAgICAgICAgICAqIGN1cnJlbnQgQS9EIGJp dHMuCi0gICAgICAgICAgICAgKi8KLSAgICAgICAgY2FzZSBNTVVfTk9STUFMX1BUX1VQREFURToK LSAgICAgICAgY2FzZSBNTVVfUFRfVVBEQVRFX1BSRVNFUlZFX0FEOgotICAgICAgICB7Ci0gICAg ICAgICAgICBwMm1fdHlwZV90IHAybXQ7Ci0KLSAgICAgICAgICAgIHJjID0gLUVPUE5PVFNVUFA7 Ci0gICAgICAgICAgICBpZiAoIHVubGlrZWx5KHBhZ2luZ19tb2RlX3JlZmNvdW50cyhwdF9vd25l cikpICkKLSAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgeHNtX25lZWRlZCB8 PSBYU01fTU1VX05PUk1BTF9VUERBVEU7Ci0gICAgICAgICAgICBpZiAoIGdldF9wdGVfZmxhZ3Mo cmVxLnZhbCkgJiBfUEFHRV9QUkVTRU5UICkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg ICB4c21fbmVlZGVkIHw9IFhTTV9NTVVfVVBEQVRFX1JFQUQ7Ci0gICAgICAgICAgICAgICAgaWYg KCBnZXRfcHRlX2ZsYWdzKHJlcS52YWwpICYgX1BBR0VfUlcgKQotICAgICAgICAgICAgICAgICAg ICB4c21fbmVlZGVkIHw9IFhTTV9NTVVfVVBEQVRFX1dSSVRFOwotICAgICAgICAgICAgfQotICAg ICAgICAgICAgaWYgKCB4c21fbmVlZGVkICE9IHhzbV9jaGVja2VkICkKLSAgICAgICAgICAgIHsK LSAgICAgICAgICAgICAgICByYyA9IHhzbV9tbXVfdXBkYXRlKFhTTV9UQVJHRVQsIGQsIHB0X293 bmVyLCBwZ19vd25lciwgeHNtX25lZWRlZCk7Ci0gICAgICAgICAgICAgICAgaWYgKCByYyApCi0g ICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIHhzbV9jaGVja2VkID0g eHNtX25lZWRlZDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJjID0gLUVJTlZBTDsKLQot ICAgICAgICAgICAgcmVxLnB0ciAtPSBjbWQ7Ci0gICAgICAgICAgICBnbWZuID0gcmVxLnB0ciA+ PiBQQUdFX1NISUZUOwotICAgICAgICAgICAgcGFnZSA9IGdldF9wYWdlX2Zyb21fZ2ZuKHB0X293 bmVyLCBnbWZuLCAmcDJtdCwgUDJNX0FMTE9DKTsKLQotICAgICAgICAgICAgaWYgKCBwMm1faXNf cGFnZWQocDJtdCkgKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIEFTU0VSVCghcGFn ZSk7Ci0gICAgICAgICAgICAgICAgcDJtX21lbV9wYWdpbmdfcG9wdWxhdGUocGdfb3duZXIsIGdt Zm4pOwotICAgICAgICAgICAgICAgIHJjID0gLUVOT0VOVDsKLSAgICAgICAgICAgICAgICBicmVh azsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKCB1bmxpa2VseSghcGFnZSkgKQot ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGdkcHJpbnRrKFhFTkxPR19XQVJOSU5HLAot ICAgICAgICAgICAgICAgICAgICAgICAgICJDb3VsZCBub3QgZ2V0IHBhZ2UgZm9yIG5vcm1hbCB1 cGRhdGVcbiIpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotCi0gICAg ICAgICAgICBtZm4gPSBwYWdlX3RvX21mbihwYWdlKTsKLSAgICAgICAgICAgIHZhID0gbWFwX2Rv bWFpbl9wYWdlX3dpdGhfY2FjaGUobWZuLCAmbWFwY2FjaGUpOwotICAgICAgICAgICAgdmEgPSAo dm9pZCAqKSgodW5zaWduZWQgbG9uZyl2YSArCi0gICAgICAgICAgICAgICAgICAgICAgICAgICh1 bnNpZ25lZCBsb25nKShyZXEucHRyICYgflBBR0VfTUFTSykpOwotCi0gICAgICAgICAgICBpZiAo IHBhZ2VfbG9jayhwYWdlKSApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgc3dpdGNo ICggcGFnZS0+dS5pbnVzZS50eXBlX2luZm8gJiBQR1RfdHlwZV9tYXNrICkKLSAgICAgICAgICAg ICAgICB7Ci0gICAgICAgICAgICAgICAgY2FzZSBQR1RfbDFfcGFnZV90YWJsZToKLSAgICAgICAg ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGwxX3BnZW50cnlfdCBsMWUgPSBsMWVfZnJv bV9pbnRwdGUocmVxLnZhbCk7Ci0gICAgICAgICAgICAgICAgICAgIHAybV90eXBlX3QgbDFlX3Ay bXQgPSBwMm1fcmFtX3J3OwotICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgcGFnZV9pbmZvICp0 YXJnZXQgPSBOVUxMOwotICAgICAgICAgICAgICAgICAgICBwMm1fcXVlcnlfdCBxID0gKGwxZV9n ZXRfZmxhZ3MobDFlKSAmIF9QQUdFX1JXKSA/Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgUDJNX1VOU0hBUkUgOiBQMk1fQUxMT0M7Ci0KLSAgICAgICAgICAgICAgICAg ICAgaWYgKCBwYWdpbmdfbW9kZV90cmFuc2xhdGUocGdfb3duZXIpICkKLSAgICAgICAgICAgICAg ICAgICAgICAgIHRhcmdldCA9IGdldF9wYWdlX2Zyb21fZ2ZuKHBnX293bmVyLCBsMWVfZ2V0X3Bm bihsMWUpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgJmwxZV9wMm10LCBxKTsKLQotICAgICAgICAgICAgICAgICAgICBpZiAoIHAybV9pc19wYWdl ZChsMWVfcDJtdCkgKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAg ICAgICBpZiAoIHRhcmdldCApCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHV0X3BhZ2Uo dGFyZ2V0KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHAybV9tZW1fcGFnaW5nX3BvcHVsYXRl KHBnX293bmVyLCBsMWVfZ2V0X3BmbihsMWUpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJj ID0gLUVOT0VOVDsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKCBwMm1fcmFtX3BhZ2luZ19p biA9PSBsMWVfcDJtdCAmJiAhdGFyZ2V0ICkKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAg ICAgICAgICAgICAgICAgICAgcmMgPSAtRU5PRU5UOwotICAgICAgICAgICAgICAgICAgICAgICAg YnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgLyogSWYg d2UgdHJpZWQgdG8gdW5zaGFyZSBhbmQgZmFpbGVkICovCi0gICAgICAgICAgICAgICAgICAgIGVs c2UgaWYgKCAocSAmIFAyTV9VTlNIQVJFKSAmJiBwMm1faXNfc2hhcmVkKGwxZV9wMm10KSApCi0g ICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIC8qIFdlIGNvdWxk IG5vdCBoYXZlIG9idGFpbmVkIGEgcGFnZSByZWYuICovCi0gICAgICAgICAgICAgICAgICAgICAg ICBBU1NFUlQodGFyZ2V0ID09IE5VTEwpOwotICAgICAgICAgICAgICAgICAgICAgICAgLyogQW5k IG1lbV9zaGFyaW5nX25vdGlmeSBoYXMgYWxyZWFkeSBiZWVuIGNhbGxlZC4gKi8KLSAgICAgICAg ICAgICAgICAgICAgICAgIHJjID0gLUVOT01FTTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJy ZWFrOwotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgcmMgPSBt b2RfbDFfZW50cnkodmEsIGwxZSwgbWZuLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBjbWQgPT0gTU1VX1BUX1VQREFURV9QUkVTRVJWRV9BRCwgdiwKLSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgcGdfb3duZXIpOwotICAgICAgICAgICAgICAgICAg ICBpZiAoIHRhcmdldCApCi0gICAgICAgICAgICAgICAgICAgICAgICBwdXRfcGFnZSh0YXJnZXQp OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg ICAgICBjYXNlIFBHVF9sMl9wYWdlX3RhYmxlOgotICAgICAgICAgICAgICAgICAgICByYyA9IG1v ZF9sMl9lbnRyeSh2YSwgbDJlX2Zyb21faW50cHRlKHJlcS52YWwpLCBtZm4sCi0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNtZCA9PSBNTVVfUFRfVVBEQVRFX1BSRVNFUlZF X0FELCB2KTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2Fz ZSBQR1RfbDNfcGFnZV90YWJsZToKLSAgICAgICAgICAgICAgICAgICAgcmMgPSBtb2RfbDNfZW50 cnkodmEsIGwzZV9mcm9tX2ludHB0ZShyZXEudmFsKSwgbWZuLAotICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBjbWQgPT0gTU1VX1BUX1VQREFURV9QUkVTRVJWRV9BRCwgdik7 Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgUEdUX2w0 X3BhZ2VfdGFibGU6Ci0gICAgICAgICAgICAgICAgICAgIHJjID0gbW9kX2w0X2VudHJ5KHZhLCBs NGVfZnJvbV9pbnRwdGUocmVxLnZhbCksIG1mbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgY21kID09IE1NVV9QVF9VUERBVEVfUFJFU0VSVkVfQUQsIHYpOwotICAgICAg ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgUEdUX3dyaXRhYmxlX3BhZ2U6 Ci0gICAgICAgICAgICAgICAgICAgIHBlcmZjX2luY3Iod3JpdGFibGVfbW11X3VwZGF0ZXMpOwot ICAgICAgICAgICAgICAgICAgICBpZiAoIHBhZ2luZ193cml0ZV9ndWVzdF9lbnRyeSh2LCB2YSwg cmVxLnZhbCwgX21mbihtZm4pKSApCi0gICAgICAgICAgICAgICAgICAgICAgICByYyA9IDA7Ci0g ICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg ICAgICBwYWdlX3VubG9jayhwYWdlKTsKLSAgICAgICAgICAgICAgICBpZiAoIHJjID09IC1FSU5U UiApCi0gICAgICAgICAgICAgICAgICAgIHJjID0gLUVSRVNUQVJUOwotICAgICAgICAgICAgfQot ICAgICAgICAgICAgZWxzZSBpZiAoIGdldF9wYWdlX3R5cGUocGFnZSwgUEdUX3dyaXRhYmxlX3Bh Z2UpICkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBwZXJmY19pbmNyKHdyaXRhYmxl X21tdV91cGRhdGVzKTsKLSAgICAgICAgICAgICAgICBpZiAoIHBhZ2luZ193cml0ZV9ndWVzdF9l bnRyeSh2LCB2YSwgcmVxLnZhbCwgX21mbihtZm4pKSApCi0gICAgICAgICAgICAgICAgICAgIHJj ID0gMDsKLSAgICAgICAgICAgICAgICBwdXRfcGFnZV90eXBlKHBhZ2UpOwotICAgICAgICAgICAg fQotCi0gICAgICAgICAgICB1bm1hcF9kb21haW5fcGFnZV93aXRoX2NhY2hlKHZhLCAmbWFwY2Fj aGUpOwotICAgICAgICAgICAgcHV0X3BhZ2UocGFnZSk7Ci0gICAgICAgIH0KLSAgICAgICAgYnJl YWs7Ci0KLSAgICAgICAgY2FzZSBNTVVfTUFDSFBIWVNfVVBEQVRFOgotICAgICAgICAgICAgaWYg KCB1bmxpa2VseShkICE9IHB0X293bmVyKSApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAg ICAgcmMgPSAtRVBFUk07Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0K LSAgICAgICAgICAgIGlmICggdW5saWtlbHkocGFnaW5nX21vZGVfdHJhbnNsYXRlKHBnX293bmVy KSkgKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJjID0gLUVJTlZBTDsKLSAgICAg ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgbWZuID0gcmVx LnB0ciA+PiBQQUdFX1NISUZUOwotICAgICAgICAgICAgZ3BmbiA9IHJlcS52YWw7Ci0KLSAgICAg ICAgICAgIHhzbV9uZWVkZWQgfD0gWFNNX01NVV9NQUNIUEhZU19VUERBVEU7Ci0gICAgICAgICAg ICBpZiAoIHhzbV9uZWVkZWQgIT0geHNtX2NoZWNrZWQgKQotICAgICAgICAgICAgewotICAgICAg ICAgICAgICAgIHJjID0geHNtX21tdV91cGRhdGUoWFNNX1RBUkdFVCwgZCwgTlVMTCwgcGdfb3du ZXIsIHhzbV9uZWVkZWQpOwotICAgICAgICAgICAgICAgIGlmICggcmMgKQotICAgICAgICAgICAg ICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB4c21fY2hlY2tlZCA9IHhzbV9uZWVkZWQ7 Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmICggdW5saWtlbHkoIWdldF9wYWdlX2Zy b21fbWZuKF9tZm4obWZuKSwgcGdfb3duZXIpKSApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAg ICAgICAgZ2RwcmludGsoWEVOTE9HX1dBUk5JTkcsCi0gICAgICAgICAgICAgICAgICAgICAgICAg IkNvdWxkIG5vdCBnZXQgcGFnZSBmb3IgbWFjaC0+cGh5cyB1cGRhdGVcbiIpOwotICAgICAgICAg ICAgICAgIHJjID0gLUVJTlZBTDsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg IH0KLQotICAgICAgICAgICAgc2V0X2dwZm5fZnJvbV9tZm4obWZuLCBncGZuKTsKLQotICAgICAg ICAgICAgcGFnaW5nX21hcmtfZGlydHkocGdfb3duZXIsIF9tZm4obWZuKSk7Ci0KLSAgICAgICAg ICAgIHB1dF9wYWdlKG1mbl90b19wYWdlKG1mbikpOwotICAgICAgICAgICAgYnJlYWs7Ci0KLSAg ICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHJjID0gLUVOT1NZUzsKLSAgICAgICAgICAgIGJy ZWFrOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKCB1bmxpa2VseShyYykgKQotICAgICAgICAg ICAgYnJlYWs7Ci0KLSAgICAgICAgZ3Vlc3RfaGFuZGxlX2FkZF9vZmZzZXQodXJlcXMsIDEpOwot ICAgIH0KLQotICAgIGlmICggcmMgPT0gLUVSRVNUQVJUICkKLSAgICB7Ci0gICAgICAgIEFTU0VS VChpIDwgY291bnQpOwotICAgICAgICByYyA9IGh5cGVyY2FsbF9jcmVhdGVfY29udGludWF0aW9u KAotICAgICAgICAgICAgX19IWVBFUlZJU09SX21tdV91cGRhdGUsICJoaWhpIiwKLSAgICAgICAg ICAgIHVyZXFzLCAoY291bnQgLSBpKSB8IE1NVV9VUERBVEVfUFJFRU1QVEVELCBwZG9uZSwgZm9y ZWlnbmRvbSk7Ci0gICAgfQotICAgIGVsc2UgaWYgKCBjdXJyLT5hcmNoLm9sZF9ndWVzdF90YWJs ZSApCi0gICAgewotICAgICAgICBYRU5fR1VFU1RfSEFORExFX1BBUkFNKHZvaWQpIG51bGw7Ci0K LSAgICAgICAgQVNTRVJUKHJjIHx8IGkgPT0gY291bnQpOwotICAgICAgICBzZXRfeGVuX2d1ZXN0 X2hhbmRsZShudWxsLCBOVUxMKTsKLSAgICAgICAgLyoKLSAgICAgICAgICogSW4gb3JkZXIgdG8g aGF2ZSBhIHdheSB0byBjb21tdW5pY2F0ZSB0aGUgZmluYWwgcmV0dXJuIHZhbHVlIHRvCi0gICAg ICAgICAqIG91ciBjb250aW51YXRpb24sIHdlIHBhc3MgdGhpcyBpbiBwbGFjZSBvZiAiZm9yZWln bmRvbSIsIGJ1aWxkaW5nCi0gICAgICAgICAqIG9uIHRoZSBmYWN0IHRoYXQgdGhpcyBhcmd1bWVu dCBpc24ndCBuZWVkZWQgYW55bW9yZS4KLSAgICAgICAgICovCi0gICAgICAgIHJjID0gaHlwZXJj YWxsX2NyZWF0ZV9jb250aW51YXRpb24oCi0gICAgICAgICAgICAgICAgX19IWVBFUlZJU09SX21t dV91cGRhdGUsICJoaWhpIiwgbnVsbCwKLSAgICAgICAgICAgICAgICBNTVVfVVBEQVRFX1BSRUVN UFRFRCwgbnVsbCwgcmMpOwotICAgIH0KLQotICAgIHB1dF9wZ19vd25lcihwZ19vd25lcik7Ci0K LSAgICBkb21haW5fbW1hcF9jYWNoZV9kZXN0cm95KCZtYXBjYWNoZSk7Ci0KLSAgICBwZXJmY19h ZGQobnVtX3BhZ2VfdXBkYXRlcywgaSk7Ci0KLSBvdXQ6Ci0gICAgaWYgKCBwdF9vd25lciAhPSBk ICkKLSAgICAgICAgcmN1X3VubG9ja19kb21haW4ocHRfb3duZXIpOwotCi0gICAgLyogQWRkIGlu Y3JlbWVudGFsIHdvcmsgd2UgaGF2ZSBkb25lIHRvIHRoZSBAZG9uZSBvdXRwdXQgcGFyYW1ldGVy LiAqLwotICAgIGlmICggdW5saWtlbHkoIWd1ZXN0X2hhbmRsZV9pc19udWxsKHBkb25lKSkgKQot ICAgIHsKLSAgICAgICAgZG9uZSArPSBpOwotICAgICAgICBjb3B5X3RvX2d1ZXN0KHBkb25lLCAm ZG9uZSwgMSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIHJjOwotfQotCi1pbnQgZG9uYXRlX3BhZ2Uo Ci0gICAgc3RydWN0IGRvbWFpbiAqZCwgc3RydWN0IHBhZ2VfaW5mbyAqcGFnZSwgdW5zaWduZWQg aW50IG1lbWZsYWdzKQotewotICAgIGNvbnN0IHN0cnVjdCBkb21haW4gKm93bmVyID0gZG9tX3hl bjsKLQotICAgIHNwaW5fbG9jaygmZC0+cGFnZV9hbGxvY19sb2NrKTsKLQotICAgIGlmICggaXNf eGVuX2hlYXBfcGFnZShwYWdlKSB8fCAoKG93bmVyID0gcGFnZV9nZXRfb3duZXIocGFnZSkpICE9 IE5VTEwpICkKLSAgICAgICAgZ290byBmYWlsOwotCi0gICAgaWYgKCBkLT5pc19keWluZyApCi0g ICAgICAgIGdvdG8gZmFpbDsKLQotICAgIGlmICggcGFnZS0+Y291bnRfaW5mbyAmIH4oUEdDX2Fs bG9jYXRlZCB8IDEpICkKLSAgICAgICAgZ290byBmYWlsOwotCi0gICAgaWYgKCAhKG1lbWZsYWdz ICYgTUVNRl9ub19yZWZjb3VudCkgKQotICAgIHsKLSAgICAgICAgaWYgKCBkLT50b3RfcGFnZXMg Pj0gZC0+bWF4X3BhZ2VzICkKLSAgICAgICAgICAgIGdvdG8gZmFpbDsKLSAgICAgICAgZG9tYWlu X2FkanVzdF90b3RfcGFnZXMoZCwgMSk7Ci0gICAgfQotCi0gICAgcGFnZS0+Y291bnRfaW5mbyA9 IFBHQ19hbGxvY2F0ZWQgfCAxOwotICAgIHBhZ2Vfc2V0X293bmVyKHBhZ2UsIGQpOwotICAgIHBh Z2VfbGlzdF9hZGRfdGFpbChwYWdlLCZkLT5wYWdlX2xpc3QpOwotCi0gICAgc3Bpbl91bmxvY2so JmQtPnBhZ2VfYWxsb2NfbG9jayk7Ci0gICAgcmV0dXJuIDA7Ci0KLSBmYWlsOgotICAgIHNwaW5f dW5sb2NrKCZkLT5wYWdlX2FsbG9jX2xvY2spOwotICAgIGdkcHJpbnRrKFhFTkxPR19XQVJOSU5H LCAiQmFkIGRvbmF0ZSBtZm4gJSIgUFJJX21mbgotICAgICAgICAgICAgICIgdG8gZCVkIChvd25l ciBkJWQpIGNhZj0lMDhseCB0YWY9JSIgUFJ0eXBlX2luZm8gIlxuIiwKLSAgICAgICAgICAgICBw YWdlX3RvX21mbihwYWdlKSwgZC0+ZG9tYWluX2lkLAotICAgICAgICAgICAgIG93bmVyID8gb3du ZXItPmRvbWFpbl9pZCA6IERPTUlEX0lOVkFMSUQsCi0gICAgICAgICAgICAgcGFnZS0+Y291bnRf aW5mbywgcGFnZS0+dS5pbnVzZS50eXBlX2luZm8pOwotICAgIHJldHVybiAtRUlOVkFMOwotfQot Ci1pbnQgc3RlYWxfcGFnZSgKLSAgICBzdHJ1Y3QgZG9tYWluICpkLCBzdHJ1Y3QgcGFnZV9pbmZv ICpwYWdlLCB1bnNpZ25lZCBpbnQgbWVtZmxhZ3MpCi17Ci0gICAgdW5zaWduZWQgbG9uZyB4LCB5 OwotICAgIGJvb2wgZHJvcF9kb21fcmVmID0gZmFsc2U7Ci0gICAgY29uc3Qgc3RydWN0IGRvbWFp biAqb3duZXIgPSBkb21feGVuOwotCi0gICAgaWYgKCBwYWdpbmdfbW9kZV9leHRlcm5hbChkKSAp Ci0gICAgICAgIHJldHVybiAtRU9QTk9UU1VQUDsKLQotICAgIHNwaW5fbG9jaygmZC0+cGFnZV9h bGxvY19sb2NrKTsKLQotICAgIGlmICggaXNfeGVuX2hlYXBfcGFnZShwYWdlKSB8fCAoKG93bmVy ID0gcGFnZV9nZXRfb3duZXIocGFnZSkpICE9IGQpICkKLSAgICAgICAgZ290byBmYWlsOwotCi0g ICAgLyoKLSAgICAgKiBXZSByZXF1aXJlIHRoZXJlIGlzIGp1c3Qgb25lIHJlZmVyZW5jZSAoUEdD X2FsbG9jYXRlZCkuIFdlIHRlbXBvcmFyaWx5Ci0gICAgICogZHJvcCB0aGlzIHJlZmVyZW5jZSBu b3cgc28gdGhhdCB3ZSBjYW4gc2FmZWx5IHN3aXp6bGUgdGhlIG93bmVyLgotICAgICAqLwotICAg IHkgPSBwYWdlLT5jb3VudF9pbmZvOwotICAgIGRvIHsKLSAgICAgICAgeCA9IHk7Ci0gICAgICAg IGlmICggKHggJiAoUEdDX2NvdW50X21hc2t8UEdDX2FsbG9jYXRlZCkpICE9ICgxIHwgUEdDX2Fs bG9jYXRlZCkgKQotICAgICAgICAgICAgZ290byBmYWlsOwotICAgICAgICB5ID0gY21weGNoZygm cGFnZS0+Y291bnRfaW5mbywgeCwgeCAmIH5QR0NfY291bnRfbWFzayk7Ci0gICAgfSB3aGlsZSAo IHkgIT0geCApOwotCi0gICAgLyoKLSAgICAgKiBXaXRoIHRoZSBzb2xlIHJlZmVyZW5jZSBkcm9w cGVkIHRlbXBvcmFyaWx5LCBuby1vbmUgY2FuIHVwZGF0ZSB0eXBlCi0gICAgICogaW5mb3JtYXRp b24uIFR5cGUgY291bnQgYWxzbyBuZWVkcyB0byBiZSB6ZXJvIGluIHRoaXMgY2FzZSwgYnV0IGUu Zy4KLSAgICAgKiBQR1Rfc2VnX2Rlc2NfcGFnZSBtYXkgc3RpbGwgaGF2ZSBQR1RfdmFsaWRhdGVk IHNldCwgd2hpY2ggd2UgbmVlZCB0bwotICAgICAqIGNsZWFyIGJlZm9yZSB0cmFuc2ZlcnJpbmcg b3duZXJzaGlwIChhcyB2YWxpZGF0aW9uIGNyaXRlcmlhIHZhcnkKLSAgICAgKiBkZXBlbmRpbmcg b24gZG9tYWluIHR5cGUpLgotICAgICAqLwotICAgIEJVR19PTihwYWdlLT51LmludXNlLnR5cGVf aW5mbyAmIChQR1RfY291bnRfbWFzayB8IFBHVF9sb2NrZWQgfAotICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBQR1RfcGlubmVkKSk7Ci0gICAgcGFnZS0+dS5pbnVzZS50eXBl X2luZm8gPSAwOwotCi0gICAgLyogU3dpenpsZSB0aGUgb3duZXIgdGhlbiByZWluc3RhdGUgdGhl IFBHQ19hbGxvY2F0ZWQgcmVmZXJlbmNlLiAqLwotICAgIHBhZ2Vfc2V0X293bmVyKHBhZ2UsIE5V TEwpOwotICAgIHkgPSBwYWdlLT5jb3VudF9pbmZvOwotICAgIGRvIHsKLSAgICAgICAgeCA9IHk7 Ci0gICAgICAgIEJVR19PTigoeCAmIChQR0NfY291bnRfbWFza3xQR0NfYWxsb2NhdGVkKSkgIT0g UEdDX2FsbG9jYXRlZCk7Ci0gICAgfSB3aGlsZSAoICh5ID0gY21weGNoZygmcGFnZS0+Y291bnRf aW5mbywgeCwgeCB8IDEpKSAhPSB4ICk7Ci0KLSAgICAvKiBVbmxpbmsgZnJvbSBvcmlnaW5hbCBv d25lci4gKi8KLSAgICBpZiAoICEobWVtZmxhZ3MgJiBNRU1GX25vX3JlZmNvdW50KSAmJiAhZG9t YWluX2FkanVzdF90b3RfcGFnZXMoZCwgLTEpICkKLSAgICAgICAgZHJvcF9kb21fcmVmID0gdHJ1 ZTsKLSAgICBwYWdlX2xpc3RfZGVsKHBhZ2UsICZkLT5wYWdlX2xpc3QpOworICAgIC8qIFVubGlu ayBmcm9tIG9yaWdpbmFsIG93bmVyLiAqLworICAgIGlmICggIShtZW1mbGFncyAmIE1FTUZfbm9f cmVmY291bnQpICYmICFkb21haW5fYWRqdXN0X3RvdF9wYWdlcyhkLCAtMSkgKQorICAgICAgICBk cm9wX2RvbV9yZWYgPSB0cnVlOworICAgIHBhZ2VfbGlzdF9kZWwocGFnZSwgJmQtPnBhZ2VfbGlz dCk7CiAKICAgICBzcGluX3VubG9jaygmZC0+cGFnZV9hbGxvY19sb2NrKTsKICAgICBpZiAoIHVu bGlrZWx5KGRyb3BfZG9tX3JlZikgKQpAQCAtMzAyMywxMjIgKzE3MTIsNiBAQCBpbnQgc3RlYWxf cGFnZSgKICAgICByZXR1cm4gLUVJTlZBTDsKIH0KIAotc3RhdGljIGludCBfX2RvX3VwZGF0ZV92 YV9tYXBwaW5nKAotICAgIHVuc2lnbmVkIGxvbmcgdmEsIHU2NCB2YWw2NCwgdW5zaWduZWQgbG9u ZyBmbGFncywgc3RydWN0IGRvbWFpbiAqcGdfb3duZXIpCi17Ci0gICAgbDFfcGdlbnRyeV90ICAg dmFsID0gbDFlX2Zyb21faW50cHRlKHZhbDY0KTsKLSAgICBzdHJ1Y3QgdmNwdSAgICp2ICAgPSBj dXJyZW50OwotICAgIHN0cnVjdCBkb21haW4gKmQgICA9IHYtPmRvbWFpbjsKLSAgICBzdHJ1Y3Qg cGFnZV9pbmZvICpnbDFwZzsKLSAgICBsMV9wZ2VudHJ5X3QgICpwbDFlOwotICAgIHVuc2lnbmVk IGxvbmcgIGJtYXBfcHRyLCBnbDFtZm47Ci0gICAgY3B1bWFza190ICAgICAqbWFzayA9IE5VTEw7 Ci0gICAgaW50ICAgICAgICAgICAgcmM7Ci0KLSAgICBwZXJmY19pbmNyKGNhbGxzX3RvX3VwZGF0 ZV92YSk7Ci0KLSAgICByYyA9IHhzbV91cGRhdGVfdmFfbWFwcGluZyhYU01fVEFSR0VULCBkLCBw Z19vd25lciwgdmFsKTsKLSAgICBpZiAoIHJjICkKLSAgICAgICAgcmV0dXJuIHJjOwotCi0gICAg cmMgPSAtRUlOVkFMOwotICAgIHBsMWUgPSBwdl9tYXBfZ3Vlc3RfbDFlKHZhLCAmZ2wxbWZuKTsK LSAgICBpZiAoIHVubGlrZWx5KCFwbDFlIHx8ICFnZXRfcGFnZV9mcm9tX21mbihfbWZuKGdsMW1m biksIGQpKSApCi0gICAgICAgIGdvdG8gb3V0OwotCi0gICAgZ2wxcGcgPSBtZm5fdG9fcGFnZShn bDFtZm4pOwotICAgIGlmICggIXBhZ2VfbG9jayhnbDFwZykgKQotICAgIHsKLSAgICAgICAgcHV0 X3BhZ2UoZ2wxcGcpOwotICAgICAgICBnb3RvIG91dDsKLSAgICB9Ci0KLSAgICBpZiAoIChnbDFw Zy0+dS5pbnVzZS50eXBlX2luZm8gJiBQR1RfdHlwZV9tYXNrKSAhPSBQR1RfbDFfcGFnZV90YWJs ZSApCi0gICAgewotICAgICAgICBwYWdlX3VubG9jayhnbDFwZyk7Ci0gICAgICAgIHB1dF9wYWdl KGdsMXBnKTsKLSAgICAgICAgZ290byBvdXQ7Ci0gICAgfQotCi0gICAgcmMgPSBtb2RfbDFfZW50 cnkocGwxZSwgdmFsLCBnbDFtZm4sIDAsIHYsIHBnX293bmVyKTsKLQotICAgIHBhZ2VfdW5sb2Nr KGdsMXBnKTsKLSAgICBwdXRfcGFnZShnbDFwZyk7Ci0KLSBvdXQ6Ci0gICAgaWYgKCBwbDFlICkK LSAgICAgICAgcHZfdW5tYXBfZ3Vlc3RfbDFlKHBsMWUpOwotCi0gICAgc3dpdGNoICggZmxhZ3Mg JiBVVk1GX0ZMVVNIVFlQRV9NQVNLICkKLSAgICB7Ci0gICAgY2FzZSBVVk1GX1RMQl9GTFVTSDoK LSAgICAgICAgc3dpdGNoICggKGJtYXBfcHRyID0gZmxhZ3MgJiB+VVZNRl9GTFVTSFRZUEVfTUFT SykgKQotICAgICAgICB7Ci0gICAgICAgIGNhc2UgVVZNRl9MT0NBTDoKLSAgICAgICAgICAgIGZs dXNoX3RsYl9sb2NhbCgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgVVZNRl9B TEw6Ci0gICAgICAgICAgICBtYXNrID0gZC0+ZG9tYWluX2RpcnR5X2NwdW1hc2s7Ci0gICAgICAg ICAgICBicmVhazsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIG1hc2sgPSB0aGlzX2Nw dShzY3JhdGNoX2NwdW1hc2spOwotICAgICAgICAgICAgcmMgPSB2Y3B1bWFza190b19wY3B1bWFz ayhkLCBjb25zdF9ndWVzdF9oYW5kbGVfZnJvbV9wdHIoYm1hcF9wdHIsCi0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2 b2lkKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFzayk7Ci0gICAg ICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBpZiAoIG1hc2sgKQotICAgICAgICAg ICAgZmx1c2hfdGxiX21hc2sobWFzayk7Ci0gICAgICAgIGJyZWFrOwotCi0gICAgY2FzZSBVVk1G X0lOVkxQRzoKLSAgICAgICAgc3dpdGNoICggKGJtYXBfcHRyID0gZmxhZ3MgJiB+VVZNRl9GTFVT SFRZUEVfTUFTSykgKQotICAgICAgICB7Ci0gICAgICAgIGNhc2UgVVZNRl9MT0NBTDoKLSAgICAg ICAgICAgIHBhZ2luZ19pbnZscGcodiwgdmEpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg IGNhc2UgVVZNRl9BTEw6Ci0gICAgICAgICAgICBtYXNrID0gZC0+ZG9tYWluX2RpcnR5X2NwdW1h c2s7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIG1h c2sgPSB0aGlzX2NwdShzY3JhdGNoX2NwdW1hc2spOwotICAgICAgICAgICAgcmMgPSB2Y3B1bWFz a190b19wY3B1bWFzayhkLCBjb25zdF9ndWVzdF9oYW5kbGVfZnJvbV9wdHIoYm1hcF9wdHIsCi0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICB2b2lkKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg bWFzayk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBpZiAoIG1hc2sg KQotICAgICAgICAgICAgZmx1c2hfdGxiX29uZV9tYXNrKG1hc2ssIHZhKTsKLSAgICAgICAgYnJl YWs7Ci0gICAgfQotCi0gICAgcmV0dXJuIHJjOwotfQotCi1sb25nIGRvX3VwZGF0ZV92YV9tYXBw aW5nKHVuc2lnbmVkIGxvbmcgdmEsIHU2NCB2YWw2NCwKLSAgICAgICAgICAgICAgICAgICAgICAg ICAgdW5zaWduZWQgbG9uZyBmbGFncykKLXsKLSAgICByZXR1cm4gX19kb191cGRhdGVfdmFfbWFw cGluZyh2YSwgdmFsNjQsIGZsYWdzLCBjdXJyZW50LT5kb21haW4pOwotfQotCi1sb25nIGRvX3Vw ZGF0ZV92YV9tYXBwaW5nX290aGVyZG9tYWluKHVuc2lnbmVkIGxvbmcgdmEsIHU2NCB2YWw2NCwK LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBmbGFn cywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9taWRfdCBkb21pZCkK LXsKLSAgICBzdHJ1Y3QgZG9tYWluICpwZ19vd25lcjsKLSAgICBpbnQgcmM7Ci0KLSAgICBpZiAo IChwZ19vd25lciA9IGdldF9wZ19vd25lcihkb21pZCkpID09IE5VTEwgKQotICAgICAgICByZXR1 cm4gLUVTUkNIOwotCi0gICAgcmMgPSBfX2RvX3VwZGF0ZV92YV9tYXBwaW5nKHZhLCB2YWw2NCwg ZmxhZ3MsIHBnX293bmVyKTsKLQotICAgIHB1dF9wZ19vd25lcihwZ19vd25lcik7Ci0KLSAgICBy ZXR1cm4gcmM7Ci19Ci0KLQogdHlwZWRlZiBzdHJ1Y3QgZTgyMGVudHJ5IGU4MjBlbnRyeV90Owog REVGSU5FX1hFTl9HVUVTVF9IQU5ETEUoZTgyMGVudHJ5X3QpOwogCmRpZmYgLS1naXQgYS94ZW4v YXJjaC94ODYvcHYvTWFrZWZpbGUgYi94ZW4vYXJjaC94ODYvcHYvTWFrZWZpbGUKaW5kZXggNDJl OWQzNzIzYi4uMjE5ZDdkMGM2MyAxMDA2NDQKLS0tIGEveGVuL2FyY2gveDg2L3B2L01ha2VmaWxl CisrKyBiL3hlbi9hcmNoL3g4Ni9wdi9NYWtlZmlsZQpAQCAtMTIsNiArMTIsNyBAQCBvYmoteSAr PSBoeXBlcmNhbGwubwogb2JqLXkgKz0gaXJldC5vCiBvYmoteSArPSBtaXNjLWh5cGVyY2FsbHMu bwogb2JqLXkgKz0gbW0ubworb2JqLXkgKz0gbW0taHlwZXJjYWxscy5vCiBvYmoteSArPSB0cmFw cy5vCiAKIG9iai1iaW4teSArPSBkb20wX2J1aWxkLmluaXQubwpkaWZmIC0tZ2l0IGEveGVuL2Fy Y2gveDg2L3B2L21tLWh5cGVyY2FsbHMuYyBiL3hlbi9hcmNoL3g4Ni9wdi9tbS1oeXBlcmNhbGxz LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMC4uOGU0OGRmODliNQotLS0g L2Rldi9udWxsCisrKyBiL3hlbi9hcmNoL3g4Ni9wdi9tbS1oeXBlcmNhbGxzLmMKQEAgLTAsMCAr MSwxNDYxIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBhcmNoL3g4Ni9wdi9tbS1oeXBl cmNhbGxzLmMKKyAqCisgKiBNZW1vcnkgbWFuYWdlbWVudCBoeXBlcmNhbGxzIGZvciBQViBndWVz dHMKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBLIEEgRnJhc2VyCisgKiBDb3B5cmln aHQgKGMpIDIwMDQgQ2hyaXN0aWFuIExpbXBhY2gKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJl ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQg dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJs aXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9u IDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJz aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0 IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0 IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRO RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1 YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJl Y2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25n IHdpdGggdGhpcyBwcm9ncmFtOyBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vu c2VzLz4uCisgKi8KKworI2luY2x1ZGUgPHhlbi9ldmVudC5oPgorI2luY2x1ZGUgPHhlbi9ndWVz dF9hY2Nlc3MuaD4KKworI2luY2x1ZGUgPGFzbS9oeXBlcmNhbGwuaD4KKyNpbmNsdWRlIDxhc20v aW9jYXAuaD4KKyNpbmNsdWRlIDxhc20vbGR0Lmg+CisjaW5jbHVkZSA8YXNtL21tLmg+CisjaW5j bHVkZSA8YXNtL3AybS5oPgorI2luY2x1ZGUgPGFzbS9wdi9tbS5oPgorI2luY2x1ZGUgPGFzbS9z ZXR1cC5oPgorCisjaW5jbHVkZSA8eHNtL3hzbS5oPgorCisjaW5jbHVkZSAibW0uaCIKKworc3Rh dGljIHN0cnVjdCBkb21haW4gKmdldF9wZ19vd25lcihkb21pZF90IGRvbWlkKQoreworICAgIHN0 cnVjdCBkb21haW4gKnBnX293bmVyID0gTlVMTCwgKmN1cnJkID0gY3VycmVudC0+ZG9tYWluOwor CisgICAgaWYgKCBsaWtlbHkoZG9taWQgPT0gRE9NSURfU0VMRikgKQorICAgIHsKKyAgICAgICAg cGdfb3duZXIgPSByY3VfbG9ja19jdXJyZW50X2RvbWFpbigpOworICAgICAgICBnb3RvIG91dDsK KyAgICB9CisKKyAgICBpZiAoIHVubGlrZWx5KGRvbWlkID09IGN1cnJkLT5kb21haW5faWQpICkK KyAgICB7CisgICAgICAgIGdkcHJpbnRrKFhFTkxPR19XQVJOSU5HLCAiQ2Fubm90IHNwZWNpZnkg aXRzZWxmIGFzIGZvcmVpZ24gZG9tYWluXG4iKTsKKyAgICAgICAgZ290byBvdXQ7CisgICAgfQor CisgICAgc3dpdGNoICggZG9taWQgKQorICAgIHsKKyAgICBjYXNlIERPTUlEX0lPOgorICAgICAg ICBwZ19vd25lciA9IHJjdV9sb2NrX2RvbWFpbihkb21faW8pOworICAgICAgICBicmVhazsKKyAg ICBjYXNlIERPTUlEX1hFTjoKKyAgICAgICAgcGdfb3duZXIgPSByY3VfbG9ja19kb21haW4oZG9t X3hlbik7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIGlmICggKHBnX293 bmVyID0gcmN1X2xvY2tfZG9tYWluX2J5X2lkKGRvbWlkKSkgPT0gTlVMTCApCisgICAgICAgIHsK KyAgICAgICAgICAgIGdkcHJpbnRrKFhFTkxPR19XQVJOSU5HLCAiVW5rbm93biBkb21haW4gZCVk XG4iLCBkb21pZCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBicmVh azsKKyAgICB9CisKKyBvdXQ6CisgICAgcmV0dXJuIHBnX293bmVyOworfQorCitzdGF0aWMgdm9p ZCBwdXRfcGdfb3duZXIoc3RydWN0IGRvbWFpbiAqcGdfb3duZXIpCit7CisgICAgcmN1X3VubG9j a19kb21haW4ocGdfb3duZXIpOworfQorCitzdGF0aWMgaW5saW5lIGludCB2Y3B1bWFza190b19w Y3B1bWFzayhzdHJ1Y3QgZG9tYWluICpkLAorICAgICBYRU5fR1VFU1RfSEFORExFX1BBUkFNKGNv bnN0X3ZvaWQpIGJtYXAsIGNwdW1hc2tfdCAqcG1hc2spCit7CisgICAgdW5zaWduZWQgaW50IHZj cHVfaWQsIHZjcHVfYmlhcywgb2ZmczsKKyAgICB1bnNpZ25lZCBsb25nIHZtYXNrOworICAgIHN0 cnVjdCB2Y3B1ICp2OworICAgIGJvb2wgaXNfbmF0aXZlID0gIWlzX3B2XzMyYml0X2RvbWFpbihk KTsKKworICAgIGNwdW1hc2tfY2xlYXIocG1hc2spOworICAgIGZvciAoIHZtYXNrID0gMCwgb2Zm cyA9IDA7IDsgKytvZmZzICkKKyAgICB7CisgICAgICAgIHZjcHVfYmlhcyA9IG9mZnMgKiAoaXNf bmF0aXZlID8gQklUU19QRVJfTE9ORyA6IDMyKTsKKyAgICAgICAgaWYgKCB2Y3B1X2JpYXMgPj0g ZC0+bWF4X3ZjcHVzICkKKyAgICAgICAgICAgIHJldHVybiAwOworCisgICAgICAgIGlmICggdW5s aWtlbHkoaXNfbmF0aXZlID8KKyAgICAgICAgICAgICAgICAgICAgICBjb3B5X2Zyb21fZ3Vlc3Rf b2Zmc2V0KCZ2bWFzaywgYm1hcCwgb2ZmcywgMSkgOgorICAgICAgICAgICAgICAgICAgICAgIGNv cHlfZnJvbV9ndWVzdF9vZmZzZXQoKHVuc2lnbmVkIGludCAqKSZ2bWFzaywgYm1hcCwKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mZnMsIDEpKSApCisgICAg ICAgIHsKKyAgICAgICAgICAgIGNwdW1hc2tfY2xlYXIocG1hc2spOworICAgICAgICAgICAgcmV0 dXJuIC1FRkFVTFQ7CisgICAgICAgIH0KKworICAgICAgICB3aGlsZSAoIHZtYXNrICkKKyAgICAg ICAgeworICAgICAgICAgICAgdmNwdV9pZCA9IGZpbmRfZmlyc3Rfc2V0X2JpdCh2bWFzayk7Cisg ICAgICAgICAgICB2bWFzayAmPSB+KDFVTCA8PCB2Y3B1X2lkKTsKKyAgICAgICAgICAgIHZjcHVf aWQgKz0gdmNwdV9iaWFzOworICAgICAgICAgICAgaWYgKCAodmNwdV9pZCA+PSBkLT5tYXhfdmNw dXMpICkKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIGlmICggKCh2ID0g ZC0+dmNwdVt2Y3B1X2lkXSkgIT0gTlVMTCkgKQorICAgICAgICAgICAgICAgIGNwdW1hc2tfb3Io cG1hc2ssIHBtYXNrLCB2LT52Y3B1X2RpcnR5X2NwdW1hc2spOworICAgICAgICB9CisgICAgfQor fQorCisvKgorICogUFRFIGZsYWdzIHRoYXQgYSBndWVzdCBtYXkgY2hhbmdlIHdpdGhvdXQgcmUt dmFsaWRhdGluZyB0aGUgUFRFLgorICogQWxsIG90aGVyIGJpdHMgYWZmZWN0IHRyYW5zbGF0aW9u LCBjYWNoaW5nLCBvciBYZW4ncyBzYWZldHkuCisgKi8KKyNkZWZpbmUgRkFTVFBBVEhfRkxBR19X SElURUxJU1QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIChfUEFH RV9OWF9CSVQgfCBfUEFHRV9BVkFJTF9ISUdIIHwgX1BBR0VfQVZBSUwgfCBfUEFHRV9HTE9CQUwg fCBcCisgICAgIF9QQUdFX0RJUlRZIHwgX1BBR0VfQUNDRVNTRUQgfCBfUEFHRV9VU0VSKQorCisv KiBVcGRhdGUgdGhlIEwxIGVudHJ5IGF0IHBsMWUgdG8gbmV3IHZhbHVlIG5sMWUuICovCitzdGF0 aWMgaW50IG1vZF9sMV9lbnRyeShsMV9wZ2VudHJ5X3QgKnBsMWUsIGwxX3BnZW50cnlfdCBubDFl LAorICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBnbDFtZm4sIGludCBwcmVz ZXJ2ZV9hZCwKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB2Y3B1ICpwdF92Y3B1LCBz dHJ1Y3QgZG9tYWluICpwZ19kb20pCit7CisgICAgbDFfcGdlbnRyeV90IG9sMWU7CisgICAgc3Ry dWN0IGRvbWFpbiAqcHRfZG9tID0gcHRfdmNwdS0+ZG9tYWluOworICAgIGludCByYyA9IDA7CisK KyAgICBpZiAoIHVubGlrZWx5KF9fY29weV9mcm9tX3VzZXIoJm9sMWUsIHBsMWUsIHNpemVvZihv bDFlKSkgIT0gMCkgKQorICAgICAgICByZXR1cm4gLUVGQVVMVDsKKworICAgIEFTU0VSVCghcGFn aW5nX21vZGVfcmVmY291bnRzKHB0X2RvbSkpOworCisgICAgaWYgKCBsMWVfZ2V0X2ZsYWdzKG5s MWUpICYgX1BBR0VfUFJFU0VOVCApCisgICAgeworICAgICAgICAvKiBUcmFuc2xhdGUgZm9yZWln biBndWVzdCBhZGRyZXNzZXMuICovCisgICAgICAgIHN0cnVjdCBwYWdlX2luZm8gKnBhZ2UgPSBO VUxMOworCisgICAgICAgIGlmICggdW5saWtlbHkobDFlX2dldF9mbGFncyhubDFlKSAmIGwxX2Rp c2FsbG93X21hc2socHRfZG9tKSkgKQorICAgICAgICB7CisgICAgICAgICAgICBnZHByaW50ayhY RU5MT0dfV0FSTklORywgIkJhZCBMMSBmbGFncyAleFxuIiwKKyAgICAgICAgICAgICAgICAgICAg bDFlX2dldF9mbGFncyhubDFlKSAmIGwxX2Rpc2FsbG93X21hc2socHRfZG9tKSk7CisgICAgICAg ICAgICByZXR1cm4gLUVJTlZBTDsKKyAgICAgICAgfQorCisgICAgICAgIGlmICggcGFnaW5nX21v ZGVfdHJhbnNsYXRlKHBnX2RvbSkgKQorICAgICAgICB7CisgICAgICAgICAgICBwYWdlID0gZ2V0 X3BhZ2VfZnJvbV9nZm4ocGdfZG9tLCBsMWVfZ2V0X3BmbihubDFlKSwgTlVMTCwgUDJNX0FMTE9D KTsKKyAgICAgICAgICAgIGlmICggIXBhZ2UgKQorICAgICAgICAgICAgICAgIHJldHVybiAtRUlO VkFMOworICAgICAgICAgICAgbmwxZSA9IGwxZV9mcm9tX3BmbihwYWdlX3RvX21mbihwYWdlKSwg bDFlX2dldF9mbGFncyhubDFlKSk7CisgICAgICAgIH0KKworICAgICAgICAvKiBGYXN0IHBhdGgg Zm9yIHN1ZmZpY2llbnRseS1zaW1pbGFyIG1hcHBpbmdzLiAqLworICAgICAgICBpZiAoICFsMWVf aGFzX2NoYW5nZWQob2wxZSwgbmwxZSwgfkZBU1RQQVRIX0ZMQUdfV0hJVEVMSVNUKSApCisgICAg ICAgIHsKKyAgICAgICAgICAgIGFkanVzdF9ndWVzdF9sMWUobmwxZSwgcHRfZG9tKTsKKyAgICAg ICAgICAgIHJjID0gVVBEQVRFX0VOVFJZKGwxLCBwbDFlLCBvbDFlLCBubDFlLCBnbDFtZm4sIHB0 X3ZjcHUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmVzZXJ2ZV9hZCk7CisgICAg ICAgICAgICBpZiAoIHBhZ2UgKQorICAgICAgICAgICAgICAgIHB1dF9wYWdlKHBhZ2UpOworICAg ICAgICAgICAgcmV0dXJuIHJjID8gMCA6IC1FQlVTWTsKKyAgICAgICAgfQorCisgICAgICAgIHN3 aXRjaCAoIHJjID0gZ2V0X3BhZ2VfZnJvbV9sMWUobmwxZSwgcHRfZG9tLCBwZ19kb20pICkKKyAg ICAgICAgeworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgaWYgKCBwYWdlICkKKyAgICAg ICAgICAgICAgICBwdXRfcGFnZShwYWdlKTsKKyAgICAgICAgICAgIHJldHVybiByYzsKKyAgICAg ICAgY2FzZSAwOgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgX1BBR0VfUlcgLi4u IF9QQUdFX1JXIHwgUEFHRV9DQUNIRV9BVFRSUzoKKyAgICAgICAgICAgIEFTU0VSVCghKHJjICYg fihfUEFHRV9SVyB8IFBBR0VfQ0FDSEVfQVRUUlMpKSk7CisgICAgICAgICAgICBsMWVfZmxpcF9m bGFncyhubDFlLCByYyk7CisgICAgICAgICAgICByYyA9IDA7CisgICAgICAgICAgICBicmVhazsK KyAgICAgICAgfQorICAgICAgICBpZiAoIHBhZ2UgKQorICAgICAgICAgICAgcHV0X3BhZ2UocGFn ZSk7CisKKyAgICAgICAgYWRqdXN0X2d1ZXN0X2wxZShubDFlLCBwdF9kb20pOworICAgICAgICBp ZiAoIHVubGlrZWx5KCFVUERBVEVfRU5UUlkobDEsIHBsMWUsIG9sMWUsIG5sMWUsIGdsMW1mbiwg cHRfdmNwdSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZXNlcnZlX2Fk KSkgKQorICAgICAgICB7CisgICAgICAgICAgICBvbDFlID0gbmwxZTsKKyAgICAgICAgICAgIHJj ID0gLUVCVVNZOworICAgICAgICB9CisgICAgfQorICAgIGVsc2UgaWYgKCB1bmxpa2VseSghVVBE QVRFX0VOVFJZKGwxLCBwbDFlLCBvbDFlLCBubDFlLCBnbDFtZm4sIHB0X3ZjcHUsCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJlc2VydmVfYWQpKSApCisgICAgeworICAg ICAgICByZXR1cm4gLUVCVVNZOworICAgIH0KKworICAgIHB1dF9wYWdlX2Zyb21fbDFlKG9sMWUs IHB0X2RvbSk7CisgICAgcmV0dXJuIHJjOworfQorCisKKy8qIFVwZGF0ZSB0aGUgTDIgZW50cnkg YXQgcGwyZSB0byBuZXcgdmFsdWUgbmwyZS4gcGwyZSBpcyB3aXRoaW4gZnJhbWUgcGZuLiAqLwor c3RhdGljIGludCBtb2RfbDJfZW50cnkobDJfcGdlbnRyeV90ICpwbDJlLCBsMl9wZ2VudHJ5X3Qg bmwyZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgcGZuLCBpbnQgcHJl c2VydmVfYWQsIHN0cnVjdCB2Y3B1ICp2Y3B1KQoreworICAgIGwyX3BnZW50cnlfdCBvbDJlOwor ICAgIHN0cnVjdCBkb21haW4gKmQgPSB2Y3B1LT5kb21haW47CisgICAgc3RydWN0IHBhZ2VfaW5m byAqbDJwZyA9IG1mbl90b19wYWdlKHBmbik7CisgICAgdW5zaWduZWQgbG9uZyB0eXBlID0gbDJw Zy0+dS5pbnVzZS50eXBlX2luZm87CisgICAgaW50IHJjID0gMDsKKworICAgIGlmICggdW5saWtl bHkoIWlzX2d1ZXN0X2wyX3Nsb3QoZCwgdHlwZSwgcGdlbnRyeV9wdHJfdG9fc2xvdChwbDJlKSkp ICkKKyAgICB7CisgICAgICAgIGdkcHJpbnRrKFhFTkxPR19XQVJOSU5HLCAiTDIgdXBkYXRlIGlu IFhlbi1wcml2YXRlIGFyZWEsIHNsb3QgJSNseFxuIiwKKyAgICAgICAgICAgICAgICAgcGdlbnRy eV9wdHJfdG9fc2xvdChwbDJlKSk7CisgICAgICAgIHJldHVybiAtRVBFUk07CisgICAgfQorCisg ICAgaWYgKCB1bmxpa2VseShfX2NvcHlfZnJvbV91c2VyKCZvbDJlLCBwbDJlLCBzaXplb2Yob2wy ZSkpICE9IDApICkKKyAgICAgICAgcmV0dXJuIC1FRkFVTFQ7CisKKyAgICBpZiAoIGwyZV9nZXRf ZmxhZ3MobmwyZSkgJiBfUEFHRV9QUkVTRU5UICkKKyAgICB7CisgICAgICAgIGlmICggdW5saWtl bHkobDJlX2dldF9mbGFncyhubDJlKSAmIEwyX0RJU0FMTE9XX01BU0spICkKKyAgICAgICAgewor ICAgICAgICAgICAgZ2RwcmludGsoWEVOTE9HX1dBUk5JTkcsICJCYWQgTDIgZmxhZ3MgJXhcbiIs CisgICAgICAgICAgICAgICAgICAgIGwyZV9nZXRfZmxhZ3MobmwyZSkgJiBMMl9ESVNBTExPV19N QVNLKTsKKyAgICAgICAgICAgIHJldHVybiAtRUlOVkFMOworICAgICAgICB9CisKKyAgICAgICAg LyogRmFzdCBwYXRoIGZvciBzdWZmaWNpZW50bHktc2ltaWxhciBtYXBwaW5ncy4gKi8KKyAgICAg ICAgaWYgKCAhbDJlX2hhc19jaGFuZ2VkKG9sMmUsIG5sMmUsIH5GQVNUUEFUSF9GTEFHX1dISVRF TElTVCkgKQorICAgICAgICB7CisgICAgICAgICAgICBhZGp1c3RfZ3Vlc3RfbDJlKG5sMmUsIGQp OworICAgICAgICAgICAgaWYgKCBVUERBVEVfRU5UUlkobDIsIHBsMmUsIG9sMmUsIG5sMmUsIHBm biwgdmNwdSwgcHJlc2VydmVfYWQpICkKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAg ICAgICAgIHJldHVybiAtRUJVU1k7CisgICAgICAgIH0KKworICAgICAgICBpZiAoIHVubGlrZWx5 KChyYyA9IGdldF9wYWdlX2Zyb21fbDJlKG5sMmUsIHBmbiwgZCkpIDwgMCkgKQorICAgICAgICAg ICAgcmV0dXJuIHJjOworCisgICAgICAgIGFkanVzdF9ndWVzdF9sMmUobmwyZSwgZCk7CisgICAg ICAgIGlmICggdW5saWtlbHkoIVVQREFURV9FTlRSWShsMiwgcGwyZSwgb2wyZSwgbmwyZSwgcGZu LCB2Y3B1LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJlc2VydmVfYWQp KSApCisgICAgICAgIHsKKyAgICAgICAgICAgIG9sMmUgPSBubDJlOworICAgICAgICAgICAgcmMg PSAtRUJVU1k7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZSBpZiAoIHVubGlrZWx5KCFVUERB VEVfRU5UUlkobDIsIHBsMmUsIG9sMmUsIG5sMmUsIHBmbiwgdmNwdSwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBwcmVzZXJ2ZV9hZCkpICkKKyAgICB7CisgICAgICAgIHJl dHVybiAtRUJVU1k7CisgICAgfQorCisgICAgcHV0X3BhZ2VfZnJvbV9sMmUob2wyZSwgcGZuKTsK KyAgICByZXR1cm4gcmM7Cit9CisKKy8qIFVwZGF0ZSB0aGUgTDMgZW50cnkgYXQgcGwzZSB0byBu ZXcgdmFsdWUgbmwzZS4gcGwzZSBpcyB3aXRoaW4gZnJhbWUgcGZuLiAqLworc3RhdGljIGludCBt b2RfbDNfZW50cnkobDNfcGdlbnRyeV90ICpwbDNlLCBsM19wZ2VudHJ5X3QgbmwzZSwKKyAgICAg ICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgcGZuLCBpbnQgcHJlc2VydmVfYWQsIHN0 cnVjdCB2Y3B1ICp2Y3B1KQoreworICAgIGwzX3BnZW50cnlfdCBvbDNlOworICAgIHN0cnVjdCBk b21haW4gKmQgPSB2Y3B1LT5kb21haW47CisgICAgaW50IHJjID0gMDsKKworICAgIGlmICggdW5s aWtlbHkoIWlzX2d1ZXN0X2wzX3Nsb3QocGdlbnRyeV9wdHJfdG9fc2xvdChwbDNlKSkpICkKKyAg ICB7CisgICAgICAgIGdkcHJpbnRrKFhFTkxPR19XQVJOSU5HLCAiTDMgdXBkYXRlIGluIFhlbi1w cml2YXRlIGFyZWEsIHNsb3QgJSNseFxuIiwKKyAgICAgICAgICAgICAgICAgcGdlbnRyeV9wdHJf dG9fc2xvdChwbDNlKSk7CisgICAgICAgIHJldHVybiAtRUlOVkFMOworICAgIH0KKworICAgIC8q CisgICAgICogRGlzYWxsb3cgdXBkYXRlcyB0byBmaW5hbCBMMyBzbG90LiBJdCBjb250YWlucyBY ZW4gbWFwcGluZ3MsIGFuZCBpdAorICAgICAqIHdvdWxkIGJlIGEgcGFpbiB0byBlbnN1cmUgdGhl eSByZW1haW4gY29udGludW91c2x5IHZhbGlkIHRocm91Z2hvdXQuCisgICAgICovCisgICAgaWYg KCBpc19wdl8zMmJpdF9kb21haW4oZCkgJiYgKHBnZW50cnlfcHRyX3RvX3Nsb3QocGwzZSkgPj0g MykgKQorICAgICAgICByZXR1cm4gLUVJTlZBTDsKKworICAgIGlmICggdW5saWtlbHkoX19jb3B5 X2Zyb21fdXNlcigmb2wzZSwgcGwzZSwgc2l6ZW9mKG9sM2UpKSAhPSAwKSApCisgICAgICAgIHJl dHVybiAtRUZBVUxUOworCisgICAgaWYgKCBsM2VfZ2V0X2ZsYWdzKG5sM2UpICYgX1BBR0VfUFJF U0VOVCApCisgICAgeworICAgICAgICBpZiAoIHVubGlrZWx5KGwzZV9nZXRfZmxhZ3MobmwzZSkg JiBsM19kaXNhbGxvd19tYXNrKGQpKSApCisgICAgICAgIHsKKyAgICAgICAgICAgIGdkcHJpbnRr KFhFTkxPR19XQVJOSU5HLCAiQmFkIEwzIGZsYWdzICV4XG4iLAorICAgICAgICAgICAgICAgICAg ICBsM2VfZ2V0X2ZsYWdzKG5sM2UpICYgbDNfZGlzYWxsb3dfbWFzayhkKSk7CisgICAgICAgICAg ICByZXR1cm4gLUVJTlZBTDsKKyAgICAgICAgfQorCisgICAgICAgIC8qIEZhc3QgcGF0aCBmb3Ig c3VmZmljaWVudGx5LXNpbWlsYXIgbWFwcGluZ3MuICovCisgICAgICAgIGlmICggIWwzZV9oYXNf Y2hhbmdlZChvbDNlLCBubDNlLCB+RkFTVFBBVEhfRkxBR19XSElURUxJU1QpICkKKyAgICAgICAg eworICAgICAgICAgICAgYWRqdXN0X2d1ZXN0X2wzZShubDNlLCBkKTsKKyAgICAgICAgICAgIHJj ID0gVVBEQVRFX0VOVFJZKGwzLCBwbDNlLCBvbDNlLCBubDNlLCBwZm4sIHZjcHUsIHByZXNlcnZl X2FkKTsKKyAgICAgICAgICAgIHJldHVybiByYyA/IDAgOiAtRUZBVUxUOworICAgICAgICB9CisK KyAgICAgICAgcmMgPSBnZXRfcGFnZV9mcm9tX2wzZShubDNlLCBwZm4sIGQsIDApOworICAgICAg ICBpZiAoIHVubGlrZWx5KHJjIDwgMCkgKQorICAgICAgICAgICAgcmV0dXJuIHJjOworICAgICAg ICByYyA9IDA7CisKKyAgICAgICAgYWRqdXN0X2d1ZXN0X2wzZShubDNlLCBkKTsKKyAgICAgICAg aWYgKCB1bmxpa2VseSghVVBEQVRFX0VOVFJZKGwzLCBwbDNlLCBvbDNlLCBubDNlLCBwZm4sIHZj cHUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmVzZXJ2ZV9hZCkpICkK KyAgICAgICAgeworICAgICAgICAgICAgb2wzZSA9IG5sM2U7CisgICAgICAgICAgICByYyA9IC1F RkFVTFQ7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZSBpZiAoIHVubGlrZWx5KCFVUERBVEVf RU5UUlkobDMsIHBsM2UsIG9sM2UsIG5sM2UsIHBmbiwgdmNwdSwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBwcmVzZXJ2ZV9hZCkpICkKKyAgICB7CisgICAgICAgIHJldHVy biAtRUZBVUxUOworICAgIH0KKworICAgIGlmICggbGlrZWx5KHJjID09IDApICkKKyAgICAgICAg aWYgKCAhcHZfY3JlYXRlX3BhZV94ZW5fbWFwcGluZ3MoZCwgcGwzZSkgKQorICAgICAgICAgICAg QlVHKCk7CisKKyAgICBwdXRfcGFnZV9mcm9tX2wzZShvbDNlLCBwZm4sIDAsIDEpOworICAgIHJl dHVybiByYzsKK30KKworLyogVXBkYXRlIHRoZSBMNCBlbnRyeSBhdCBwbDRlIHRvIG5ldyB2YWx1 ZSBubDRlLiBwbDRlIGlzIHdpdGhpbiBmcmFtZSBwZm4uICovCitzdGF0aWMgaW50IG1vZF9sNF9l bnRyeShsNF9wZ2VudHJ5X3QgKnBsNGUsIGw0X3BnZW50cnlfdCBubDRlLAorICAgICAgICAgICAg ICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBwZm4sIGludCBwcmVzZXJ2ZV9hZCwgc3RydWN0IHZj cHUgKnZjcHUpCit7CisgICAgc3RydWN0IGRvbWFpbiAqZCA9IHZjcHUtPmRvbWFpbjsKKyAgICBs NF9wZ2VudHJ5X3Qgb2w0ZTsKKyAgICBpbnQgcmMgPSAwOworCisgICAgaWYgKCB1bmxpa2VseSgh aXNfZ3Vlc3RfbDRfc2xvdChkLCBwZ2VudHJ5X3B0cl90b19zbG90KHBsNGUpKSkgKQorICAgIHsK KyAgICAgICAgZ2RwcmludGsoWEVOTE9HX1dBUk5JTkcsICJMNCB1cGRhdGUgaW4gWGVuLXByaXZh dGUgYXJlYSwgc2xvdCAlI2x4XG4iLAorICAgICAgICAgICAgICAgICBwZ2VudHJ5X3B0cl90b19z bG90KHBsNGUpKTsKKyAgICAgICAgcmV0dXJuIC1FSU5WQUw7CisgICAgfQorCisgICAgaWYgKCB1 bmxpa2VseShfX2NvcHlfZnJvbV91c2VyKCZvbDRlLCBwbDRlLCBzaXplb2Yob2w0ZSkpICE9IDAp ICkKKyAgICAgICAgcmV0dXJuIC1FRkFVTFQ7CisKKyAgICBpZiAoIGw0ZV9nZXRfZmxhZ3Mobmw0 ZSkgJiBfUEFHRV9QUkVTRU5UICkKKyAgICB7CisgICAgICAgIGlmICggdW5saWtlbHkobDRlX2dl dF9mbGFncyhubDRlKSAmIEw0X0RJU0FMTE9XX01BU0spICkKKyAgICAgICAgeworICAgICAgICAg ICAgZ2RwcmludGsoWEVOTE9HX1dBUk5JTkcsICJCYWQgTDQgZmxhZ3MgJXhcbiIsCisgICAgICAg ICAgICAgICAgICAgIGw0ZV9nZXRfZmxhZ3Mobmw0ZSkgJiBMNF9ESVNBTExPV19NQVNLKTsKKyAg ICAgICAgICAgIHJldHVybiAtRUlOVkFMOworICAgICAgICB9CisKKyAgICAgICAgLyogRmFzdCBw YXRoIGZvciBzdWZmaWNpZW50bHktc2ltaWxhciBtYXBwaW5ncy4gKi8KKyAgICAgICAgaWYgKCAh bDRlX2hhc19jaGFuZ2VkKG9sNGUsIG5sNGUsIH5GQVNUUEFUSF9GTEFHX1dISVRFTElTVCkgKQor ICAgICAgICB7CisgICAgICAgICAgICBhZGp1c3RfZ3Vlc3RfbDRlKG5sNGUsIGQpOworICAgICAg ICAgICAgcmMgPSBVUERBVEVfRU5UUlkobDQsIHBsNGUsIG9sNGUsIG5sNGUsIHBmbiwgdmNwdSwg cHJlc2VydmVfYWQpOworICAgICAgICAgICAgcmV0dXJuIHJjID8gMCA6IC1FRkFVTFQ7CisgICAg ICAgIH0KKworICAgICAgICByYyA9IGdldF9wYWdlX2Zyb21fbDRlKG5sNGUsIHBmbiwgZCwgMCk7 CisgICAgICAgIGlmICggdW5saWtlbHkocmMgPCAwKSApCisgICAgICAgICAgICByZXR1cm4gcmM7 CisgICAgICAgIHJjID0gMDsKKworICAgICAgICBhZGp1c3RfZ3Vlc3RfbDRlKG5sNGUsIGQpOwor ICAgICAgICBpZiAoIHVubGlrZWx5KCFVUERBVEVfRU5UUlkobDQsIHBsNGUsIG9sNGUsIG5sNGUs IHBmbiwgdmNwdSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZXNlcnZl X2FkKSkgKQorICAgICAgICB7CisgICAgICAgICAgICBvbDRlID0gbmw0ZTsKKyAgICAgICAgICAg IHJjID0gLUVGQVVMVDsKKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlIGlmICggdW5saWtlbHko IVVQREFURV9FTlRSWShsNCwgcGw0ZSwgb2w0ZSwgbmw0ZSwgcGZuLCB2Y3B1LAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZXNlcnZlX2FkKSkgKQorICAgIHsKKyAgICAg ICAgcmV0dXJuIC1FRkFVTFQ7CisgICAgfQorCisgICAgcHV0X3BhZ2VfZnJvbV9sNGUob2w0ZSwg cGZuLCAwLCAxKTsKKyAgICByZXR1cm4gcmM7Cit9CisKK2ludCBwdl9uZXdfZ3Vlc3RfY3IzKHVu c2lnbmVkIGxvbmcgbWZuKQoreworICAgIHN0cnVjdCB2Y3B1ICpjdXJyID0gY3VycmVudDsKKyAg ICBzdHJ1Y3QgZG9tYWluICpjdXJyZCA9IGN1cnItPmRvbWFpbjsKKyAgICBpbnQgcmM7CisgICAg dW5zaWduZWQgbG9uZyBvbGRfYmFzZV9tZm47CisKKyAgICBpZiAoIGlzX3B2XzMyYml0X2RvbWFp bihjdXJyZCkgKQorICAgIHsKKyAgICAgICAgdW5zaWduZWQgbG9uZyBndF9tZm4gPSBwYWdldGFi bGVfZ2V0X3BmbihjdXJyLT5hcmNoLmd1ZXN0X3RhYmxlKTsKKyAgICAgICAgbDRfcGdlbnRyeV90 ICpwbDRlID0gbWFwX2RvbWFpbl9wYWdlKF9tZm4oZ3RfbWZuKSk7CisKKyAgICAgICAgcmMgPSBt b2RfbDRfZW50cnkocGw0ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgbDRlX2Zyb21fcGZu KG1mbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfUEFHRV9QUkVT RU5UIHwgX1BBR0VfUlcgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IF9QQUdFX1VTRVIgfCBfUEFHRV9BQ0NFU1NFRCkpLAorICAgICAgICAgICAgICAgICAgICAgICAg ICBndF9tZm4sIDAsIGN1cnIpOworICAgICAgICB1bm1hcF9kb21haW5fcGFnZShwbDRlKTsKKyAg ICAgICAgc3dpdGNoICggcmMgKQorICAgICAgICB7CisgICAgICAgIGNhc2UgMDoKKyAgICAgICAg ICAgIGJyZWFrOworICAgICAgICBjYXNlIC1FSU5UUjoKKyAgICAgICAgY2FzZSAtRVJFU1RBUlQ6 CisgICAgICAgICAgICByZXR1cm4gLUVSRVNUQVJUOworICAgICAgICBkZWZhdWx0OgorICAgICAg ICAgICAgZ2RwcmludGsoWEVOTE9HX1dBUk5JTkcsCisgICAgICAgICAgICAgICAgICAgICAiRXJy b3Igd2hpbGUgaW5zdGFsbGluZyBuZXcgY29tcGF0IGJhc2VwdHIgJSIgUFJJX21mbiAiXG4iLAor ICAgICAgICAgICAgICAgICAgICAgbWZuKTsKKyAgICAgICAgICAgIHJldHVybiByYzsKKyAgICAg ICAgfQorCisgICAgICAgIHB2X2ludmFsaWRhdGVfc2hhZG93X2xkdChjdXJyLCBmYWxzZSk7Cisg ICAgICAgIHdyaXRlX3B0YmFzZShjdXJyKTsKKworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisK KyAgICByYyA9IHB1dF9vbGRfZ3Vlc3RfdGFibGUoY3Vycik7CisgICAgaWYgKCB1bmxpa2VseShy YykgKQorICAgICAgICByZXR1cm4gcmM7CisKKyAgICBvbGRfYmFzZV9tZm4gPSBwYWdldGFibGVf Z2V0X3BmbihjdXJyLT5hcmNoLmd1ZXN0X3RhYmxlKTsKKyAgICAvKgorICAgICAqIFRoaXMgaXMg cGFydGljdWxhcmx5IGltcG9ydGFudCB3aGVuIGdldHRpbmcgcmVzdGFydGVkIGFmdGVyIHRoZQor ICAgICAqIHByZXZpb3VzIGF0dGVtcHQgZ290IHByZWVtcHRlZCBpbiB0aGUgcHV0LW9sZC1NRk4g cGhhc2UuCisgICAgICovCisgICAgaWYgKCBvbGRfYmFzZV9tZm4gPT0gbWZuICkKKyAgICB7Cisg ICAgICAgIHdyaXRlX3B0YmFzZShjdXJyKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisg ICAgcmMgPSBwYWdpbmdfbW9kZV9yZWZjb3VudHMoY3VycmQpCisgICAgICAgICA/IChnZXRfcGFn ZV9mcm9tX21mbihfbWZuKG1mbiksIGN1cnJkKSA/IDAgOiAtRUlOVkFMKQorICAgICAgICAgOiBn ZXRfcGFnZV9hbmRfdHlwZV9mcm9tX21mbihfbWZuKG1mbiksIFBHVF9yb290X3BhZ2VfdGFibGUs CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJkLCAwLCB0cnVlKTsK KyAgICBzd2l0Y2ggKCByYyApCisgICAgeworICAgIGNhc2UgMDoKKyAgICAgICAgYnJlYWs7Cisg ICAgY2FzZSAtRUlOVFI6CisgICAgY2FzZSAtRVJFU1RBUlQ6CisgICAgICAgIHJldHVybiAtRVJF U1RBUlQ7CisgICAgZGVmYXVsdDoKKyAgICAgICAgZ2RwcmludGsoWEVOTE9HX1dBUk5JTkcsCisg ICAgICAgICAgICAgICAgICJFcnJvciB3aGlsZSBpbnN0YWxsaW5nIG5ldyBiYXNlcHRyICUiIFBS SV9tZm4gIlxuIiwgbWZuKTsKKyAgICAgICAgcmV0dXJuIHJjOworICAgIH0KKworICAgIHB2X2lu dmFsaWRhdGVfc2hhZG93X2xkdChjdXJyLCBmYWxzZSk7CisKKyAgICBpZiAoICFWTV9BU1NJU1Qo Y3VycmQsIG0ycF9zdHJpY3QpICYmICFwYWdpbmdfbW9kZV9yZWZjb3VudHMoY3VycmQpICkKKyAg ICAgICAgZmlsbF9yb19tcHQobWZuKTsKKyAgICBjdXJyLT5hcmNoLmd1ZXN0X3RhYmxlID0gcGFn ZXRhYmxlX2Zyb21fcGZuKG1mbik7CisgICAgdXBkYXRlX2NyMyhjdXJyKTsKKworICAgIHdyaXRl X3B0YmFzZShjdXJyKTsKKworICAgIGlmICggbGlrZWx5KG9sZF9iYXNlX21mbiAhPSAwKSApCisg ICAgeworICAgICAgICBzdHJ1Y3QgcGFnZV9pbmZvICpwYWdlID0gbWZuX3RvX3BhZ2Uob2xkX2Jh c2VfbWZuKTsKKworICAgICAgICBpZiAoIHBhZ2luZ19tb2RlX3JlZmNvdW50cyhjdXJyZCkgKQor ICAgICAgICAgICAgcHV0X3BhZ2UocGFnZSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHN3 aXRjaCAoIHJjID0gcHV0X3BhZ2VfYW5kX3R5cGVfcHJlZW1wdGlibGUocGFnZSkgKQorICAgICAg ICAgICAgeworICAgICAgICAgICAgY2FzZSAtRUlOVFI6CisgICAgICAgICAgICAgICAgcmMgPSAt RVJFU1RBUlQ7CisgICAgICAgICAgICAgICAgLyogZmFsbHRocm91Z2ggKi8KKyAgICAgICAgICAg IGNhc2UgLUVSRVNUQVJUOgorICAgICAgICAgICAgICAgIGN1cnItPmFyY2gub2xkX2d1ZXN0X3Rh YmxlID0gcGFnZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGRlZmF1bHQ6 CisgICAgICAgICAgICAgICAgQlVHX09OKHJjKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAg ICAgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gcmM7Cit9CisKK2xvbmcgZG9fbW11X3Vw ZGF0ZShYRU5fR1VFU1RfSEFORExFX1BBUkFNKG1tdV91cGRhdGVfdCkgdXJlcXMsCisgICAgICAg ICAgICAgICAgICAgdW5zaWduZWQgaW50IGNvdW50LCBYRU5fR1VFU1RfSEFORExFX1BBUkFNKHVp bnQpIHBkb25lLAorICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBmb3JlaWduZG9tKQor eworICAgIHN0cnVjdCBtbXVfdXBkYXRlIHJlcTsKKyAgICB2b2lkICp2YTsKKyAgICB1bnNpZ25l ZCBsb25nIGdwZm4sIGdtZm4sIG1mbjsKKyAgICBzdHJ1Y3QgcGFnZV9pbmZvICpwYWdlOworICAg IHVuc2lnbmVkIGludCBjbWQsIGkgPSAwLCBkb25lID0gMCwgcHRfZG9tOworICAgIHN0cnVjdCB2 Y3B1ICpjdXJyID0gY3VycmVudCwgKnYgPSBjdXJyOworICAgIHN0cnVjdCBkb21haW4gKmQgPSB2 LT5kb21haW4sICpwdF9vd25lciA9IGQsICpwZ19vd25lcjsKKyAgICBzdHJ1Y3QgZG9tYWluX21t YXBfY2FjaGUgbWFwY2FjaGU7CisgICAgdWludDMyX3QgeHNtX25lZWRlZCA9IDA7CisgICAgdWlu dDMyX3QgeHNtX2NoZWNrZWQgPSAwOworICAgIGludCByYyA9IHB1dF9vbGRfZ3Vlc3RfdGFibGUo Y3Vycik7CisKKyAgICBpZiAoIHVubGlrZWx5KHJjKSApCisgICAgeworICAgICAgICBpZiAoIGxp a2VseShyYyA9PSAtRVJFU1RBUlQpICkKKyAgICAgICAgICAgIHJjID0gaHlwZXJjYWxsX2NyZWF0 ZV9jb250aW51YXRpb24oCisgICAgICAgICAgICAgICAgICAgICBfX0hZUEVSVklTT1JfbW11X3Vw ZGF0ZSwgImhpaGkiLCB1cmVxcywgY291bnQsIHBkb25lLAorICAgICAgICAgICAgICAgICAgICAg Zm9yZWlnbmRvbSk7CisgICAgICAgIHJldHVybiByYzsKKyAgICB9CisKKyAgICBpZiAoIHVubGlr ZWx5KGNvdW50ID09IE1NVV9VUERBVEVfUFJFRU1QVEVEKSAmJgorICAgICAgICAgbGlrZWx5KGd1 ZXN0X2hhbmRsZV9pc19udWxsKHVyZXFzKSkgKQorICAgIHsKKyAgICAgICAgLyoKKyAgICAgICAg ICogU2VlIHRoZSBjdXJyLT5hcmNoLm9sZF9ndWVzdF90YWJsZSByZWxhdGVkCisgICAgICAgICAq IGh5cGVyY2FsbF9jcmVhdGVfY29udGludWF0aW9uKCkgYmVsb3cuCisgICAgICAgICAqLworICAg ICAgICByZXR1cm4gKGludClmb3JlaWduZG9tOworICAgIH0KKworICAgIGlmICggdW5saWtlbHko Y291bnQgJiBNTVVfVVBEQVRFX1BSRUVNUFRFRCkgKQorICAgIHsKKyAgICAgICAgY291bnQgJj0g fk1NVV9VUERBVEVfUFJFRU1QVEVEOworICAgICAgICBpZiAoIHVubGlrZWx5KCFndWVzdF9oYW5k bGVfaXNfbnVsbChwZG9uZSkpICkKKyAgICAgICAgICAgICh2b2lkKWNvcHlfZnJvbV9ndWVzdCgm ZG9uZSwgcGRvbmUsIDEpOworICAgIH0KKyAgICBlbHNlCisgICAgICAgIHBlcmZjX2luY3IoY2Fs bHNfdG9fbW11X3VwZGF0ZSk7CisKKyAgICBpZiAoIHVubGlrZWx5KCFndWVzdF9oYW5kbGVfb2th eSh1cmVxcywgY291bnQpKSApCisgICAgICAgIHJldHVybiAtRUZBVUxUOworCisgICAgaWYgKCAo cHRfZG9tID0gZm9yZWlnbmRvbSA+PiAxNikgIT0gMCApCisgICAgeworICAgICAgICAvKiBQYWdl dGFibGVzIGJlbG9uZyB0byBhIGZvcmVpZ24gZG9tYWluIChQRkQpLiAqLworICAgICAgICBpZiAo IChwdF9vd25lciA9IHJjdV9sb2NrX2RvbWFpbl9ieV9pZChwdF9kb20gLSAxKSkgPT0gTlVMTCAp CisgICAgICAgICAgICByZXR1cm4gLUVTUkNIOworCisgICAgICAgIGlmICggcHRfb3duZXIgPT0g ZCApCisgICAgICAgICAgICByY3VfdW5sb2NrX2RvbWFpbihwdF9vd25lcik7CisgICAgICAgIGVs c2UgaWYgKCAhcHRfb3duZXItPnZjcHUgfHwgKHYgPSBwdF9vd25lci0+dmNwdVswXSkgPT0gTlVM TCApCisgICAgICAgIHsKKyAgICAgICAgICAgIHJjID0gLUVJTlZBTDsKKyAgICAgICAgICAgIGdv dG8gb3V0OworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKCAocGdfb3duZXIgPSBnZXRfcGdf b3duZXIoKHVpbnQxNl90KWZvcmVpZ25kb20pKSA9PSBOVUxMICkKKyAgICB7CisgICAgICAgIHJj ID0gLUVTUkNIOworICAgICAgICBnb3RvIG91dDsKKyAgICB9CisKKyAgICBkb21haW5fbW1hcF9j YWNoZV9pbml0KCZtYXBjYWNoZSk7CisKKyAgICBmb3IgKCBpID0gMDsgaSA8IGNvdW50OyBpKysg KQorICAgIHsKKyAgICAgICAgaWYgKCBjdXJyLT5hcmNoLm9sZF9ndWVzdF90YWJsZSB8fCAoaSAm JiBoeXBlcmNhbGxfcHJlZW1wdF9jaGVjaygpKSApCisgICAgICAgIHsKKyAgICAgICAgICAgIHJj ID0gLUVSRVNUQVJUOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBp ZiAoIHVubGlrZWx5KF9fY29weV9mcm9tX2d1ZXN0KCZyZXEsIHVyZXFzLCAxKSAhPSAwKSApCisg ICAgICAgIHsKKyAgICAgICAgICAgIHJjID0gLUVGQVVMVDsKKyAgICAgICAgICAgIGJyZWFrOwor ICAgICAgICB9CisKKyAgICAgICAgY21kID0gcmVxLnB0ciAmIChzaXplb2YobDFfcGdlbnRyeV90 KS0xKTsKKworICAgICAgICBzd2l0Y2ggKCBjbWQgKQorICAgICAgICB7CisgICAgICAgICAgICAv KgorICAgICAgICAgICAgICogTU1VX05PUk1BTF9QVF9VUERBVEU6IE5vcm1hbCB1cGRhdGUgdG8g YW55IGxldmVsIG9mIHBhZ2UgdGFibGUuCisgICAgICAgICAgICAgKiBNTVVfVVBEQVRFX1BUX1BS RVNFUlZFX0FEOiBBcyBhYm92ZSBidXQgYWxzbyBwcmVzZXJ2ZSAoT1IpCisgICAgICAgICAgICAg KiBjdXJyZW50IEEvRCBiaXRzLgorICAgICAgICAgICAgICovCisgICAgICAgIGNhc2UgTU1VX05P Uk1BTF9QVF9VUERBVEU6CisgICAgICAgIGNhc2UgTU1VX1BUX1VQREFURV9QUkVTRVJWRV9BRDoK KyAgICAgICAgeworICAgICAgICAgICAgcDJtX3R5cGVfdCBwMm10OworCisgICAgICAgICAgICBy YyA9IC1FT1BOT1RTVVBQOworICAgICAgICAgICAgaWYgKCB1bmxpa2VseShwYWdpbmdfbW9kZV9y ZWZjb3VudHMocHRfb3duZXIpKSApCisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAg ICAgIHhzbV9uZWVkZWQgfD0gWFNNX01NVV9OT1JNQUxfVVBEQVRFOworICAgICAgICAgICAgaWYg KCBnZXRfcHRlX2ZsYWdzKHJlcS52YWwpICYgX1BBR0VfUFJFU0VOVCApCisgICAgICAgICAgICB7 CisgICAgICAgICAgICAgICAgeHNtX25lZWRlZCB8PSBYU01fTU1VX1VQREFURV9SRUFEOworICAg ICAgICAgICAgICAgIGlmICggZ2V0X3B0ZV9mbGFncyhyZXEudmFsKSAmIF9QQUdFX1JXICkKKyAg ICAgICAgICAgICAgICAgICAgeHNtX25lZWRlZCB8PSBYU01fTU1VX1VQREFURV9XUklURTsKKyAg ICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICggeHNtX25lZWRlZCAhPSB4c21fY2hlY2tlZCAp CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmMgPSB4c21fbW11X3VwZGF0ZShYU01f VEFSR0VULCBkLCBwdF9vd25lciwgcGdfb3duZXIsIHhzbV9uZWVkZWQpOworICAgICAgICAgICAg ICAgIGlmICggcmMgKQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAg ICB4c21fY2hlY2tlZCA9IHhzbV9uZWVkZWQ7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBy YyA9IC1FSU5WQUw7CisKKyAgICAgICAgICAgIHJlcS5wdHIgLT0gY21kOworICAgICAgICAgICAg Z21mbiA9IHJlcS5wdHIgPj4gUEFHRV9TSElGVDsKKyAgICAgICAgICAgIHBhZ2UgPSBnZXRfcGFn ZV9mcm9tX2dmbihwdF9vd25lciwgZ21mbiwgJnAybXQsIFAyTV9BTExPQyk7CisKKyAgICAgICAg ICAgIGlmICggcDJtX2lzX3BhZ2VkKHAybXQpICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg ICAgICBBU1NFUlQoIXBhZ2UpOworICAgICAgICAgICAgICAgIHAybV9tZW1fcGFnaW5nX3BvcHVs YXRlKHBnX293bmVyLCBnbWZuKTsKKyAgICAgICAgICAgICAgICByYyA9IC1FTk9FTlQ7CisgICAg ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICggdW5s aWtlbHkoIXBhZ2UpICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBnZHByaW50ayhY RU5MT0dfV0FSTklORywKKyAgICAgICAgICAgICAgICAgICAgICAgICAiQ291bGQgbm90IGdldCBw YWdlIGZvciBub3JtYWwgdXBkYXRlXG4iKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg ICAgICAgIH0KKworICAgICAgICAgICAgbWZuID0gcGFnZV90b19tZm4ocGFnZSk7CisgICAgICAg ICAgICB2YSA9IG1hcF9kb21haW5fcGFnZV93aXRoX2NhY2hlKG1mbiwgJm1hcGNhY2hlKTsKKyAg ICAgICAgICAgIHZhID0gKHZvaWQgKikoKHVuc2lnbmVkIGxvbmcpdmEgKworICAgICAgICAgICAg ICAgICAgICAgICAgICAodW5zaWduZWQgbG9uZykocmVxLnB0ciAmIH5QQUdFX01BU0spKTsKKwor ICAgICAgICAgICAgaWYgKCBwYWdlX2xvY2socGFnZSkgKQorICAgICAgICAgICAgeworICAgICAg ICAgICAgICAgIHN3aXRjaCAoIHBhZ2UtPnUuaW51c2UudHlwZV9pbmZvICYgUEdUX3R5cGVfbWFz ayApCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGNhc2UgUEdUX2wxX3BhZ2Vf dGFibGU6CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBsMV9wZ2VudHJ5 X3QgbDFlID0gbDFlX2Zyb21faW50cHRlKHJlcS52YWwpOworICAgICAgICAgICAgICAgICAgICBw Mm1fdHlwZV90IGwxZV9wMm10ID0gcDJtX3JhbV9ydzsKKyAgICAgICAgICAgICAgICAgICAgc3Ry dWN0IHBhZ2VfaW5mbyAqdGFyZ2V0ID0gTlVMTDsKKyAgICAgICAgICAgICAgICAgICAgcDJtX3F1 ZXJ5X3QgcSA9IChsMWVfZ2V0X2ZsYWdzKGwxZSkgJiBfUEFHRV9SVykgPworICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFAyTV9VTlNIQVJFIDogUDJNX0FMTE9DOworCisg ICAgICAgICAgICAgICAgICAgIGlmICggcGFnaW5nX21vZGVfdHJhbnNsYXRlKHBnX293bmVyKSAp CisgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXQgPSBnZXRfcGFnZV9mcm9tX2dmbihwZ19v d25lciwgbDFlX2dldF9wZm4obDFlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICZsMWVfcDJtdCwgcSk7CisKKyAgICAgICAgICAgICAgICAgICAg aWYgKCBwMm1faXNfcGFnZWQobDFlX3AybXQpICkKKyAgICAgICAgICAgICAgICAgICAgeworICAg ICAgICAgICAgICAgICAgICAgICAgaWYgKCB0YXJnZXQgKQorICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHB1dF9wYWdlKHRhcmdldCk7CisgICAgICAgICAgICAgICAgICAgICAgICBwMm1fbWVt X3BhZ2luZ19wb3B1bGF0ZShwZ19vd25lciwgbDFlX2dldF9wZm4obDFlKSk7CisgICAgICAgICAg ICAgICAgICAgICAgICByYyA9IC1FTk9FTlQ7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVh azsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICgg cDJtX3JhbV9wYWdpbmdfaW4gPT0gbDFlX3AybXQgJiYgIXRhcmdldCApCisgICAgICAgICAgICAg ICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJjID0gLUVOT0VOVDsKKyAgICAgICAg ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg ICAgICAgICAgIC8qIElmIHdlIHRyaWVkIHRvIHVuc2hhcmUgYW5kIGZhaWxlZCAqLworICAgICAg ICAgICAgICAgICAgICBlbHNlIGlmICggKHEgJiBQMk1fVU5TSEFSRSkgJiYgcDJtX2lzX3NoYXJl ZChsMWVfcDJtdCkgKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAg ICAgICAvKiBXZSBjb3VsZCBub3QgaGF2ZSBvYnRhaW5lZCBhIHBhZ2UgcmVmLiAqLworICAgICAg ICAgICAgICAgICAgICAgICAgQVNTRVJUKHRhcmdldCA9PSBOVUxMKTsKKyAgICAgICAgICAgICAg ICAgICAgICAgIC8qIEFuZCBtZW1fc2hhcmluZ19ub3RpZnkgaGFzIGFscmVhZHkgYmVlbiBjYWxs ZWQuICovCisgICAgICAgICAgICAgICAgICAgICAgICByYyA9IC1FTk9NRU07CisgICAgICAgICAg ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAg ICAgICAgICAgIHJjID0gbW9kX2wxX2VudHJ5KHZhLCBsMWUsIG1mbiwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgY21kID09IE1NVV9QVF9VUERBVEVfUFJFU0VSVkVfQUQs IHYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBnX293bmVyKTsKKyAg ICAgICAgICAgICAgICAgICAgaWYgKCB0YXJnZXQgKQorICAgICAgICAgICAgICAgICAgICAgICAg cHV0X3BhZ2UodGFyZ2V0KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJl YWs7CisgICAgICAgICAgICAgICAgY2FzZSBQR1RfbDJfcGFnZV90YWJsZToKKyAgICAgICAgICAg ICAgICAgICAgcmMgPSBtb2RfbDJfZW50cnkodmEsIGwyZV9mcm9tX2ludHB0ZShyZXEudmFsKSwg bWZuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbWQgPT0gTU1VX1BU X1VQREFURV9QUkVTRVJWRV9BRCwgdik7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAg ICAgICAgICAgICAgIGNhc2UgUEdUX2wzX3BhZ2VfdGFibGU6CisgICAgICAgICAgICAgICAgICAg IHJjID0gbW9kX2wzX2VudHJ5KHZhLCBsM2VfZnJvbV9pbnRwdGUocmVxLnZhbCksIG1mbiwKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY21kID09IE1NVV9QVF9VUERBVEVf UFJFU0VSVkVfQUQsIHYpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg ICAgICBjYXNlIFBHVF9sNF9wYWdlX3RhYmxlOgorICAgICAgICAgICAgICAgICAgICByYyA9IG1v ZF9sNF9lbnRyeSh2YSwgbDRlX2Zyb21faW50cHRlKHJlcS52YWwpLCBtZm4sCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNtZCA9PSBNTVVfUFRfVVBEQVRFX1BSRVNFUlZF X0FELCB2KTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIFBH VF93cml0YWJsZV9wYWdlOgorICAgICAgICAgICAgICAgICAgICBwZXJmY19pbmNyKHdyaXRhYmxl X21tdV91cGRhdGVzKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCBwYWdpbmdfd3JpdGVfZ3Vl c3RfZW50cnkodiwgdmEsIHJlcS52YWwsIF9tZm4obWZuKSkgKQorICAgICAgICAgICAgICAgICAg ICAgICAgcmMgPSAwOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAg ICB9CisgICAgICAgICAgICAgICAgcGFnZV91bmxvY2socGFnZSk7CisgICAgICAgICAgICAgICAg aWYgKCByYyA9PSAtRUlOVFIgKQorICAgICAgICAgICAgICAgICAgICByYyA9IC1FUkVTVEFSVDsK KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYgKCBnZXRfcGFnZV90eXBlKHBhZ2Us IFBHVF93cml0YWJsZV9wYWdlKSApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcGVy ZmNfaW5jcih3cml0YWJsZV9tbXVfdXBkYXRlcyk7CisgICAgICAgICAgICAgICAgaWYgKCBwYWdp bmdfd3JpdGVfZ3Vlc3RfZW50cnkodiwgdmEsIHJlcS52YWwsIF9tZm4obWZuKSkgKQorICAgICAg ICAgICAgICAgICAgICByYyA9IDA7CisgICAgICAgICAgICAgICAgcHV0X3BhZ2VfdHlwZShwYWdl KTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgdW5tYXBfZG9tYWluX3BhZ2Vfd2l0aF9j YWNoZSh2YSwgJm1hcGNhY2hlKTsKKyAgICAgICAgICAgIHB1dF9wYWdlKHBhZ2UpOworICAgICAg ICB9CisgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgTU1VX01BQ0hQSFlTX1VQREFURToK KyAgICAgICAgICAgIGlmICggdW5saWtlbHkoZCAhPSBwdF9vd25lcikgKQorICAgICAgICAgICAg eworICAgICAgICAgICAgICAgIHJjID0gLUVQRVJNOworICAgICAgICAgICAgICAgIGJyZWFrOwor ICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoIHVubGlrZWx5KHBhZ2luZ19tb2RlX3Ry YW5zbGF0ZShwZ19vd25lcikpICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByYyA9 IC1FSU5WQUw7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisKKyAgICAg ICAgICAgIG1mbiA9IHJlcS5wdHIgPj4gUEFHRV9TSElGVDsKKyAgICAgICAgICAgIGdwZm4gPSBy ZXEudmFsOworCisgICAgICAgICAgICB4c21fbmVlZGVkIHw9IFhTTV9NTVVfTUFDSFBIWVNfVVBE QVRFOworICAgICAgICAgICAgaWYgKCB4c21fbmVlZGVkICE9IHhzbV9jaGVja2VkICkKKyAgICAg ICAgICAgIHsKKyAgICAgICAgICAgICAgICByYyA9IHhzbV9tbXVfdXBkYXRlKFhTTV9UQVJHRVQs IGQsIE5VTEwsIHBnX293bmVyLCB4c21fbmVlZGVkKTsKKyAgICAgICAgICAgICAgICBpZiAoIHJj ICkKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgeHNtX2NoZWNr ZWQgPSB4c21fbmVlZGVkOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoIHVubGlr ZWx5KCFnZXRfcGFnZV9mcm9tX21mbihfbWZuKG1mbiksIHBnX293bmVyKSkgKQorICAgICAgICAg ICAgeworICAgICAgICAgICAgICAgIGdkcHJpbnRrKFhFTkxPR19XQVJOSU5HLAorICAgICAgICAg ICAgICAgICAgICAgICAgICJDb3VsZCBub3QgZ2V0IHBhZ2UgZm9yIG1hY2gtPnBoeXMgdXBkYXRl XG4iKTsKKyAgICAgICAgICAgICAgICByYyA9IC1FSU5WQUw7CisgICAgICAgICAgICAgICAgYnJl YWs7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHNldF9ncGZuX2Zyb21fbWZuKG1mbiwg Z3Bmbik7CisKKyAgICAgICAgICAgIHBhZ2luZ19tYXJrX2RpcnR5KHBnX293bmVyLCBfbWZuKG1m bikpOworCisgICAgICAgICAgICBwdXRfcGFnZShtZm5fdG9fcGFnZShtZm4pKTsKKyAgICAgICAg ICAgIGJyZWFrOworCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByYyA9IC1FTk9TWVM7 CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGlmICggdW5saWtlbHko cmMpICkKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGd1ZXN0X2hhbmRsZV9hZGRfb2Zm c2V0KHVyZXFzLCAxKTsKKyAgICB9CisKKyAgICBpZiAoIHJjID09IC1FUkVTVEFSVCApCisgICAg eworICAgICAgICBBU1NFUlQoaSA8IGNvdW50KTsKKyAgICAgICAgcmMgPSBoeXBlcmNhbGxfY3Jl YXRlX2NvbnRpbnVhdGlvbigKKyAgICAgICAgICAgIF9fSFlQRVJWSVNPUl9tbXVfdXBkYXRlLCAi aGloaSIsCisgICAgICAgICAgICB1cmVxcywgKGNvdW50IC0gaSkgfCBNTVVfVVBEQVRFX1BSRUVN UFRFRCwgcGRvbmUsIGZvcmVpZ25kb20pOworICAgIH0KKyAgICBlbHNlIGlmICggY3Vyci0+YXJj aC5vbGRfZ3Vlc3RfdGFibGUgKQorICAgIHsKKyAgICAgICAgWEVOX0dVRVNUX0hBTkRMRV9QQVJB TSh2b2lkKSBudWxsOworCisgICAgICAgIEFTU0VSVChyYyB8fCBpID09IGNvdW50KTsKKyAgICAg ICAgc2V0X3hlbl9ndWVzdF9oYW5kbGUobnVsbCwgTlVMTCk7CisgICAgICAgIC8qCisgICAgICAg ICAqIEluIG9yZGVyIHRvIGhhdmUgYSB3YXkgdG8gY29tbXVuaWNhdGUgdGhlIGZpbmFsIHJldHVy biB2YWx1ZSB0bworICAgICAgICAgKiBvdXIgY29udGludWF0aW9uLCB3ZSBwYXNzIHRoaXMgaW4g cGxhY2Ugb2YgImZvcmVpZ25kb20iLCBidWlsZGluZworICAgICAgICAgKiBvbiB0aGUgZmFjdCB0 aGF0IHRoaXMgYXJndW1lbnQgaXNuJ3QgbmVlZGVkIGFueW1vcmUuCisgICAgICAgICAqLworICAg ICAgICByYyA9IGh5cGVyY2FsbF9jcmVhdGVfY29udGludWF0aW9uKAorICAgICAgICAgICAgICAg IF9fSFlQRVJWSVNPUl9tbXVfdXBkYXRlLCAiaGloaSIsIG51bGwsCisgICAgICAgICAgICAgICAg TU1VX1VQREFURV9QUkVFTVBURUQsIG51bGwsIHJjKTsKKyAgICB9CisKKyAgICBwdXRfcGdfb3du ZXIocGdfb3duZXIpOworCisgICAgZG9tYWluX21tYXBfY2FjaGVfZGVzdHJveSgmbWFwY2FjaGUp OworCisgICAgcGVyZmNfYWRkKG51bV9wYWdlX3VwZGF0ZXMsIGkpOworCisgb3V0OgorICAgIGlm ICggcHRfb3duZXIgIT0gZCApCisgICAgICAgIHJjdV91bmxvY2tfZG9tYWluKHB0X293bmVyKTsK KworICAgIC8qIEFkZCBpbmNyZW1lbnRhbCB3b3JrIHdlIGhhdmUgZG9uZSB0byB0aGUgQGRvbmUg b3V0cHV0IHBhcmFtZXRlci4gKi8KKyAgICBpZiAoIHVubGlrZWx5KCFndWVzdF9oYW5kbGVfaXNf bnVsbChwZG9uZSkpICkKKyAgICB7CisgICAgICAgIGRvbmUgKz0gaTsKKyAgICAgICAgY29weV90 b19ndWVzdChwZG9uZSwgJmRvbmUsIDEpOworICAgIH0KKworICAgIHJldHVybiByYzsKK30KKwor c3RhdGljIGludCBfX2RvX3VwZGF0ZV92YV9tYXBwaW5nKHVuc2lnbmVkIGxvbmcgdmEsIHU2NCB2 YWw2NCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIGZs YWdzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBkb21haW4gKnBn X293bmVyKQoreworICAgIGwxX3BnZW50cnlfdCAgIHZhbCA9IGwxZV9mcm9tX2ludHB0ZSh2YWw2 NCk7CisgICAgc3RydWN0IHZjcHUgKmN1cnIgPSBjdXJyZW50OworICAgIHN0cnVjdCBkb21haW4g KmN1cnJkID0gY3Vyci0+ZG9tYWluOworICAgIHN0cnVjdCBwYWdlX2luZm8gKmdsMXBnOworICAg IGwxX3BnZW50cnlfdCAgKnBsMWU7CisgICAgdW5zaWduZWQgbG9uZyAgYm1hcF9wdHIsIGdsMW1m bjsKKyAgICBjcHVtYXNrX3QgICAgICptYXNrID0gTlVMTDsKKyAgICBpbnQgICAgICAgICAgICBy YzsKKworICAgIHBlcmZjX2luY3IoY2FsbHNfdG9fdXBkYXRlX3ZhKTsKKworICAgIHJjID0geHNt X3VwZGF0ZV92YV9tYXBwaW5nKFhTTV9UQVJHRVQsIGN1cnJkLCBwZ19vd25lciwgdmFsKTsKKyAg ICBpZiAoIHJjICkKKyAgICAgICAgcmV0dXJuIHJjOworCisgICAgcmMgPSAtRUlOVkFMOworICAg IHBsMWUgPSBwdl9tYXBfZ3Vlc3RfbDFlKHZhLCAmZ2wxbWZuKTsKKyAgICBpZiAoIHVubGlrZWx5 KCFwbDFlIHx8ICFnZXRfcGFnZV9mcm9tX21mbihfbWZuKGdsMW1mbiksIGN1cnJkKSkgKQorICAg ICAgICBnb3RvIG91dDsKKworICAgIGdsMXBnID0gbWZuX3RvX3BhZ2UoZ2wxbWZuKTsKKyAgICBp ZiAoICFwYWdlX2xvY2soZ2wxcGcpICkKKyAgICB7CisgICAgICAgIHB1dF9wYWdlKGdsMXBnKTsK KyAgICAgICAgZ290byBvdXQ7CisgICAgfQorCisgICAgaWYgKCAoZ2wxcGctPnUuaW51c2UudHlw ZV9pbmZvICYgUEdUX3R5cGVfbWFzaykgIT0gUEdUX2wxX3BhZ2VfdGFibGUgKQorICAgIHsKKyAg ICAgICAgcGFnZV91bmxvY2soZ2wxcGcpOworICAgICAgICBwdXRfcGFnZShnbDFwZyk7CisgICAg ICAgIGdvdG8gb3V0OworICAgIH0KKworICAgIHJjID0gbW9kX2wxX2VudHJ5KHBsMWUsIHZhbCwg Z2wxbWZuLCAwLCBjdXJyLCBwZ19vd25lcik7CisKKyAgICBwYWdlX3VubG9jayhnbDFwZyk7Cisg ICAgcHV0X3BhZ2UoZ2wxcGcpOworCisgb3V0OgorICAgIGlmICggcGwxZSApCisgICAgICAgIHB2 X3VubWFwX2d1ZXN0X2wxZShwbDFlKTsKKworICAgIHN3aXRjaCAoIGZsYWdzICYgVVZNRl9GTFVT SFRZUEVfTUFTSyApCisgICAgeworICAgIGNhc2UgVVZNRl9UTEJfRkxVU0g6CisgICAgICAgIHN3 aXRjaCAoIChibWFwX3B0ciA9IGZsYWdzICYgflVWTUZfRkxVU0hUWVBFX01BU0spICkKKyAgICAg ICAgeworICAgICAgICBjYXNlIFVWTUZfTE9DQUw6CisgICAgICAgICAgICBmbHVzaF90bGJfbG9j YWwoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFVWTUZfQUxMOgorICAgICAg ICAgICAgbWFzayA9IGN1cnJkLT5kb21haW5fZGlydHlfY3B1bWFzazsKKyAgICAgICAgICAgIGJy ZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgbWFzayA9IHRoaXNfY3B1KHNjcmF0 Y2hfY3B1bWFzayk7CisgICAgICAgICAgICByYyA9IHZjcHVtYXNrX3RvX3BjcHVtYXNrKGN1cnJk LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdF9ndWVzdF9oYW5k bGVfZnJvbV9wdHIoYm1hcF9wdHIsIHZvaWQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBtYXNrKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAg IGlmICggbWFzayApCisgICAgICAgICAgICBmbHVzaF90bGJfbWFzayhtYXNrKTsKKyAgICAgICAg YnJlYWs7CisKKyAgICBjYXNlIFVWTUZfSU5WTFBHOgorICAgICAgICBzd2l0Y2ggKCAoYm1hcF9w dHIgPSBmbGFncyAmIH5VVk1GX0ZMVVNIVFlQRV9NQVNLKSApCisgICAgICAgIHsKKyAgICAgICAg Y2FzZSBVVk1GX0xPQ0FMOgorICAgICAgICAgICAgcGFnaW5nX2ludmxwZyhjdXJyLCB2YSk7Cisg ICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBVVk1GX0FMTDoKKyAgICAgICAgICAgIG1h c2sgPSBjdXJyZC0+ZG9tYWluX2RpcnR5X2NwdW1hc2s7CisgICAgICAgICAgICBicmVhazsKKyAg ICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIG1hc2sgPSB0aGlzX2NwdShzY3JhdGNoX2NwdW1h c2spOworICAgICAgICAgICAgcmMgPSB2Y3B1bWFza190b19wY3B1bWFzayhjdXJyZCwKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3RfZ3Vlc3RfaGFuZGxlX2Zyb21f cHRyKGJtYXBfcHRyLCB2b2lkKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgbWFzayk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBpZiAoIG1h c2sgKQorICAgICAgICAgICAgZmx1c2hfdGxiX29uZV9tYXNrKG1hc2ssIHZhKTsKKyAgICAgICAg YnJlYWs7CisgICAgfQorCisgICAgcmV0dXJuIHJjOworfQorCitsb25nIGRvX3VwZGF0ZV92YV9t YXBwaW5nKHVuc2lnbmVkIGxvbmcgdmEsIHU2NCB2YWw2NCwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgdW5zaWduZWQgbG9uZyBmbGFncykKK3sKKyAgICByZXR1cm4gX19kb191cGRhdGVfdmFf bWFwcGluZyh2YSwgdmFsNjQsIGZsYWdzLCBjdXJyZW50LT5kb21haW4pOworfQorCitsb25nIGRv X3VwZGF0ZV92YV9tYXBwaW5nX290aGVyZG9tYWluKHVuc2lnbmVkIGxvbmcgdmEsIHU2NCB2YWw2 NCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBm bGFncywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9taWRfdCBkb21p ZCkKK3sKKyAgICBzdHJ1Y3QgZG9tYWluICpwZ19vd25lcjsKKyAgICBpbnQgcmM7CisKKyAgICBp ZiAoIChwZ19vd25lciA9IGdldF9wZ19vd25lcihkb21pZCkpID09IE5VTEwgKQorICAgICAgICBy ZXR1cm4gLUVTUkNIOworCisgICAgcmMgPSBfX2RvX3VwZGF0ZV92YV9tYXBwaW5nKHZhLCB2YWw2 NCwgZmxhZ3MsIHBnX293bmVyKTsKKworICAgIHB1dF9wZ19vd25lcihwZ19vd25lcik7CisKKyAg ICByZXR1cm4gcmM7Cit9CisKK2xvbmcgZG9fbW11ZXh0X29wKFhFTl9HVUVTVF9IQU5ETEVfUEFS QU0obW11ZXh0X29wX3QpIHVvcHMsCisgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgY291 bnQsCisgICAgICAgICAgICAgICAgICBYRU5fR1VFU1RfSEFORExFX1BBUkFNKHVpbnQpIHBkb25l LAorICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGZvcmVpZ25kb20pCit7CisgICAgc3Ry dWN0IG1tdWV4dF9vcCBvcDsKKyAgICB1bnNpZ25lZCBsb25nIHR5cGU7CisgICAgdW5zaWduZWQg aW50IGksIGRvbmUgPSAwOworICAgIHN0cnVjdCB2Y3B1ICpjdXJyID0gY3VycmVudDsKKyAgICBz dHJ1Y3QgZG9tYWluICpjdXJyZCA9IGN1cnItPmRvbWFpbjsKKyAgICBzdHJ1Y3QgZG9tYWluICpw Z19vd25lcjsKKyAgICBpbnQgcmMgPSBwdXRfb2xkX2d1ZXN0X3RhYmxlKGN1cnIpOworCisgICAg aWYgKCB1bmxpa2VseShyYykgKQorICAgIHsKKyAgICAgICAgaWYgKCBsaWtlbHkocmMgPT0gLUVS RVNUQVJUKSApCisgICAgICAgICAgICByYyA9IGh5cGVyY2FsbF9jcmVhdGVfY29udGludWF0aW9u KAorICAgICAgICAgICAgICAgICAgICAgX19IWVBFUlZJU09SX21tdWV4dF9vcCwgImhpaGkiLCB1 b3BzLCBjb3VudCwgcGRvbmUsCisgICAgICAgICAgICAgICAgICAgICBmb3JlaWduZG9tKTsKKyAg ICAgICAgcmV0dXJuIHJjOworICAgIH0KKworICAgIGlmICggdW5saWtlbHkoY291bnQgPT0gTU1V X1VQREFURV9QUkVFTVBURUQpICYmCisgICAgICAgICBsaWtlbHkoZ3Vlc3RfaGFuZGxlX2lzX251 bGwodW9wcykpICkKKyAgICB7CisgICAgICAgIC8qCisgICAgICAgICAqIFNlZSB0aGUgY3Vyci0+ YXJjaC5vbGRfZ3Vlc3RfdGFibGUgcmVsYXRlZAorICAgICAgICAgKiBoeXBlcmNhbGxfY3JlYXRl X2NvbnRpbnVhdGlvbigpIGJlbG93LgorICAgICAgICAgKi8KKyAgICAgICAgcmV0dXJuIChpbnQp Zm9yZWlnbmRvbTsKKyAgICB9CisKKyAgICBpZiAoIHVubGlrZWx5KGNvdW50ICYgTU1VX1VQREFU RV9QUkVFTVBURUQpICkKKyAgICB7CisgICAgICAgIGNvdW50ICY9IH5NTVVfVVBEQVRFX1BSRUVN UFRFRDsKKyAgICAgICAgaWYgKCB1bmxpa2VseSghZ3Vlc3RfaGFuZGxlX2lzX251bGwocGRvbmUp KSApCisgICAgICAgICAgICAodm9pZCljb3B5X2Zyb21fZ3Vlc3QoJmRvbmUsIHBkb25lLCAxKTsK KyAgICB9CisgICAgZWxzZQorICAgICAgICBwZXJmY19pbmNyKGNhbGxzX3RvX21tdWV4dF9vcCk7 CisKKyAgICBpZiAoIHVubGlrZWx5KCFndWVzdF9oYW5kbGVfb2theSh1b3BzLCBjb3VudCkpICkK KyAgICAgICAgcmV0dXJuIC1FRkFVTFQ7CisKKyAgICBpZiAoIChwZ19vd25lciA9IGdldF9wZ19v d25lcihmb3JlaWduZG9tKSkgPT0gTlVMTCApCisgICAgICAgIHJldHVybiAtRVNSQ0g7CisKKyAg ICBpZiAoICFpc19wdl9kb21haW4ocGdfb3duZXIpICkKKyAgICB7CisgICAgICAgIHB1dF9wZ19v d25lcihwZ19vd25lcik7CisgICAgICAgIHJldHVybiAtRUlOVkFMOworICAgIH0KKworICAgIHJj ID0geHNtX21tdWV4dF9vcChYU01fVEFSR0VULCBjdXJyZCwgcGdfb3duZXIpOworICAgIGlmICgg cmMgKQorICAgIHsKKyAgICAgICAgcHV0X3BnX293bmVyKHBnX293bmVyKTsKKyAgICAgICAgcmV0 dXJuIHJjOworICAgIH0KKworICAgIGZvciAoIGkgPSAwOyBpIDwgY291bnQ7IGkrKyApCisgICAg eworICAgICAgICBpZiAoIGN1cnItPmFyY2gub2xkX2d1ZXN0X3RhYmxlIHx8IChpICYmIGh5cGVy Y2FsbF9wcmVlbXB0X2NoZWNrKCkpICkKKyAgICAgICAgeworICAgICAgICAgICAgcmMgPSAtRVJF U1RBUlQ7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGlmICggdW5s aWtlbHkoX19jb3B5X2Zyb21fZ3Vlc3QoJm9wLCB1b3BzLCAxKSAhPSAwKSApCisgICAgICAgIHsK KyAgICAgICAgICAgIHJjID0gLUVGQVVMVDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9 CisKKyAgICAgICAgaWYgKCBpc19odm1fZG9tYWluKGN1cnJkKSApCisgICAgICAgIHsKKyAgICAg ICAgICAgIHN3aXRjaCAoIG9wLmNtZCApCisgICAgICAgICAgICB7CisgICAgICAgICAgICBjYXNl IE1NVUVYVF9QSU5fTDFfVEFCTEU6CisgICAgICAgICAgICBjYXNlIE1NVUVYVF9QSU5fTDJfVEFC TEU6CisgICAgICAgICAgICBjYXNlIE1NVUVYVF9QSU5fTDNfVEFCTEU6CisgICAgICAgICAgICBj YXNlIE1NVUVYVF9QSU5fTDRfVEFCTEU6CisgICAgICAgICAgICBjYXNlIE1NVUVYVF9VTlBJTl9U QUJMRToKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAg ICAgICAgICAgICAgcmMgPSAtRU9QTk9UU1VQUDsKKyAgICAgICAgICAgICAgICBnb3RvIGRvbmU7 CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICByYyA9IDA7CisKKyAgICAgICAg c3dpdGNoICggb3AuY21kICkKKyAgICAgICAgeworICAgICAgICAgICAgc3RydWN0IHBhZ2VfaW5m byAqcGFnZTsKKyAgICAgICAgICAgIHAybV90eXBlX3QgcDJtdDsKKworICAgICAgICBjYXNlIE1N VUVYVF9QSU5fTDFfVEFCTEU6CisgICAgICAgICAgICB0eXBlID0gUEdUX2wxX3BhZ2VfdGFibGU7 CisgICAgICAgICAgICBnb3RvIHBpbl9wYWdlOworCisgICAgICAgIGNhc2UgTU1VRVhUX1BJTl9M Ml9UQUJMRToKKyAgICAgICAgICAgIHR5cGUgPSBQR1RfbDJfcGFnZV90YWJsZTsKKyAgICAgICAg ICAgIGdvdG8gcGluX3BhZ2U7CisKKyAgICAgICAgY2FzZSBNTVVFWFRfUElOX0wzX1RBQkxFOgor ICAgICAgICAgICAgdHlwZSA9IFBHVF9sM19wYWdlX3RhYmxlOworICAgICAgICAgICAgZ290byBw aW5fcGFnZTsKKworICAgICAgICBjYXNlIE1NVUVYVF9QSU5fTDRfVEFCTEU6CisgICAgICAgICAg ICBpZiAoIGlzX3B2XzMyYml0X2RvbWFpbihwZ19vd25lcikgKQorICAgICAgICAgICAgICAgIGJy ZWFrOworICAgICAgICAgICAgdHlwZSA9IFBHVF9sNF9wYWdlX3RhYmxlOworCisgICAgICAgIHBp bl9wYWdlOgorICAgICAgICAgICAgLyogSWdub3JlIHBpbm5pbmcgb2YgaW52YWxpZCBwYWdpbmcg bGV2ZWxzLiAqLworICAgICAgICAgICAgaWYgKCAob3AuY21kIC0gTU1VRVhUX1BJTl9MMV9UQUJM RSkgPiAoQ09ORklHX1BBR0lOR19MRVZFTFMgLSAxKSApCisgICAgICAgICAgICAgICAgYnJlYWs7 CisKKyAgICAgICAgICAgIGlmICggcGFnaW5nX21vZGVfcmVmY291bnRzKHBnX293bmVyKSApCisg ICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIHBhZ2UgPSBnZXRfcGFnZV9mcm9t X2dmbihwZ19vd25lciwgb3AuYXJnMS5tZm4sIE5VTEwsIFAyTV9BTExPQyk7CisgICAgICAgICAg ICBpZiAoIHVubGlrZWx5KCFwYWdlKSApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg cmMgPSAtRUlOVkFMOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorCisg ICAgICAgICAgICByYyA9IGdldF9wYWdlX3R5cGVfcHJlZW1wdGlibGUocGFnZSwgdHlwZSk7Cisg ICAgICAgICAgICBpZiAoIHVubGlrZWx5KHJjKSApCisgICAgICAgICAgICB7CisgICAgICAgICAg ICAgICAgaWYgKCByYyA9PSAtRUlOVFIgKQorICAgICAgICAgICAgICAgICAgICByYyA9IC1FUkVT VEFSVDsKKyAgICAgICAgICAgICAgICBlbHNlIGlmICggcmMgIT0gLUVSRVNUQVJUICkKKyAgICAg ICAgICAgICAgICAgICAgZ2RwcmludGsoWEVOTE9HX1dBUk5JTkcsCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICJFcnJvciAlZCB3aGlsZSBwaW5uaW5nIG1mbiAlIiBQUklfbWZuICJcbiIs CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmMsIHBhZ2VfdG9fbWZuKHBhZ2UpKTsKKyAg ICAgICAgICAgICAgICBpZiAoIHBhZ2UgIT0gY3Vyci0+YXJjaC5vbGRfZ3Vlc3RfdGFibGUgKQor ICAgICAgICAgICAgICAgICAgICBwdXRfcGFnZShwYWdlKTsKKyAgICAgICAgICAgICAgICBicmVh azsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcmMgPSB4c21fbWVtb3J5X3Bpbl9wYWdl KFhTTV9IT09LLCBjdXJyZCwgcGdfb3duZXIsIHBhZ2UpOworICAgICAgICAgICAgaWYgKCAhcmMg JiYgdW5saWtlbHkodGVzdF9hbmRfc2V0X2JpdChfUEdUX3Bpbm5lZCwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnBhZ2UtPnUuaW51c2UudHlwZV9p bmZvKSkgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGdkcHJpbnRrKFhFTkxPR19X QVJOSU5HLAorICAgICAgICAgICAgICAgICAgICAgICAgICJtZm4gJSIgUFJJX21mbiAiIGFscmVh ZHkgcGlubmVkXG4iLCBwYWdlX3RvX21mbihwYWdlKSk7CisgICAgICAgICAgICAgICAgcmMgPSAt RUlOVkFMOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoIHVubGlrZWx5KHJjKSAp CisgICAgICAgICAgICAgICAgZ290byBwaW5fZHJvcDsKKworICAgICAgICAgICAgLyogQSBwYWdl IGlzIGRpcnRpZWQgd2hlbiBpdHMgcGluIHN0YXR1cyBpcyBzZXQuICovCisgICAgICAgICAgICBw YWdpbmdfbWFya19kaXJ0eShwZ19vd25lciwgX21mbihwYWdlX3RvX21mbihwYWdlKSkpOworCisg ICAgICAgICAgICAvKiBXZSBjYW4gcmFjZSBkb21haW4gZGVzdHJ1Y3Rpb24gKGRvbWFpbl9yZWxp bnF1aXNoX3Jlc291cmNlcykuICovCisgICAgICAgICAgICBpZiAoIHVubGlrZWx5KHBnX293bmVy ICE9IGN1cnJkKSApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgYm9vbCBkcm9wX3Jl ZjsKKworICAgICAgICAgICAgICAgIHNwaW5fbG9jaygmcGdfb3duZXItPnBhZ2VfYWxsb2NfbG9j ayk7CisgICAgICAgICAgICAgICAgZHJvcF9yZWYgPSAocGdfb3duZXItPmlzX2R5aW5nICYmCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVzdF9hbmRfY2xlYXJfYml0KF9QR1RfcGlubmVk LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcGFnZS0+ dS5pbnVzZS50eXBlX2luZm8pKTsKKyAgICAgICAgICAgICAgICBzcGluX3VubG9jaygmcGdfb3du ZXItPnBhZ2VfYWxsb2NfbG9jayk7CisgICAgICAgICAgICAgICAgaWYgKCBkcm9wX3JlZiApCisg ICAgICAgICAgICAgICAgeworICAgICAgICBwaW5fZHJvcDoKKyAgICAgICAgICAgICAgICAgICAg aWYgKCB0eXBlID09IFBHVF9sMV9wYWdlX3RhYmxlICkKKyAgICAgICAgICAgICAgICAgICAgICAg IHB1dF9wYWdlX2FuZF90eXBlKHBhZ2UpOworICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAg ICAgICAgICAgICAgICAgICAgICBjdXJyLT5hcmNoLm9sZF9ndWVzdF90YWJsZSA9IHBhZ2U7Cisg ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisKKyAg ICAgICAgY2FzZSBNTVVFWFRfVU5QSU5fVEFCTEU6CisgICAgICAgICAgICBpZiAoIHBhZ2luZ19t b2RlX3JlZmNvdW50cyhwZ19vd25lcikgKQorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAg ICAgICAgICBwYWdlID0gZ2V0X3BhZ2VfZnJvbV9nZm4ocGdfb3duZXIsIG9wLmFyZzEubWZuLCBO VUxMLCBQMk1fQUxMT0MpOworICAgICAgICAgICAgaWYgKCB1bmxpa2VseSghcGFnZSkgKQorICAg ICAgICAgICAgeworICAgICAgICAgICAgICAgIGdkcHJpbnRrKFhFTkxPR19XQVJOSU5HLAorICAg ICAgICAgICAgICAgICAgICAgICAgICJtZm4gJSIgUFJJX21mbiAiIGJhZCwgb3IgYmFkIG93bmVy IGQlZFxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBvcC5hcmcxLm1mbiwgcGdfb3duZXIt PmRvbWFpbl9pZCk7CisgICAgICAgICAgICAgICAgcmMgPSAtRUlOVkFMOworICAgICAgICAgICAg ICAgIGJyZWFrOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoICF0ZXN0X2FuZF9j bGVhcl9iaXQoX1BHVF9waW5uZWQsICZwYWdlLT51LmludXNlLnR5cGVfaW5mbykgKQorICAgICAg ICAgICAgeworICAgICAgICAgICAgICAgIHB1dF9wYWdlKHBhZ2UpOworICAgICAgICAgICAgICAg IGdkcHJpbnRrKFhFTkxPR19XQVJOSU5HLAorICAgICAgICAgICAgICAgICAgICAgICAgICJtZm4g JSIgUFJJX21mbiAiIG5vdCBwaW5uZWRcbiIsIG9wLmFyZzEubWZuKTsKKyAgICAgICAgICAgICAg ICByYyA9IC1FSU5WQUw7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisK KyAgICAgICAgICAgIHN3aXRjaCAoIHJjID0gcHV0X3BhZ2VfYW5kX3R5cGVfcHJlZW1wdGlibGUo cGFnZSkgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgY2FzZSAtRUlOVFI6CisgICAgICAg ICAgICBjYXNlIC1FUkVTVEFSVDoKKyAgICAgICAgICAgICAgICBjdXJyLT5hcmNoLm9sZF9ndWVz dF90YWJsZSA9IHBhZ2U7CisgICAgICAgICAgICAgICAgcmMgPSAwOworICAgICAgICAgICAgICAg IGJyZWFrOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBCVUdfT04ocmMp OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcHV0 X3BhZ2UocGFnZSk7CisKKyAgICAgICAgICAgIC8qIEEgcGFnZSBpcyBkaXJ0aWVkIHdoZW4gaXRz IHBpbiBzdGF0dXMgaXMgY2xlYXJlZC4gKi8KKyAgICAgICAgICAgIHBhZ2luZ19tYXJrX2RpcnR5 KHBnX293bmVyLCBfbWZuKHBhZ2VfdG9fbWZuKHBhZ2UpKSk7CisgICAgICAgICAgICBicmVhazsK KworICAgICAgICBjYXNlIE1NVUVYVF9ORVdfQkFTRVBUUjoKKyAgICAgICAgICAgIGlmICggdW5s aWtlbHkoY3VycmQgIT0gcGdfb3duZXIpICkKKyAgICAgICAgICAgICAgICByYyA9IC1FUEVSTTsK KyAgICAgICAgICAgIGVsc2UgaWYgKCB1bmxpa2VseShwYWdpbmdfbW9kZV90cmFuc2xhdGUoY3Vy cmQpKSApCisgICAgICAgICAgICAgICAgcmMgPSAtRUlOVkFMOworICAgICAgICAgICAgZWxzZQor ICAgICAgICAgICAgICAgIHJjID0gcHZfbmV3X2d1ZXN0X2NyMyhvcC5hcmcxLm1mbik7CisgICAg ICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIE1NVUVYVF9ORVdfVVNFUl9CQVNFUFRSOiB7 CisgICAgICAgICAgICB1bnNpZ25lZCBsb25nIG9sZF9tZm47CisKKyAgICAgICAgICAgIGlmICgg dW5saWtlbHkoY3VycmQgIT0gcGdfb3duZXIpICkKKyAgICAgICAgICAgICAgICByYyA9IC1FUEVS TTsKKyAgICAgICAgICAgIGVsc2UgaWYgKCB1bmxpa2VseShwYWdpbmdfbW9kZV90cmFuc2xhdGUo Y3VycmQpKSApCisgICAgICAgICAgICAgICAgcmMgPSAtRUlOVkFMOworICAgICAgICAgICAgaWYg KCB1bmxpa2VseShyYykgKQorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBv bGRfbWZuID0gcGFnZXRhYmxlX2dldF9wZm4oY3Vyci0+YXJjaC5ndWVzdF90YWJsZV91c2VyKTsK KyAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgKiBUaGlzIGlzIHBhcnRpY3VsYXJseSBpbXBv cnRhbnQgd2hlbiBnZXR0aW5nIHJlc3RhcnRlZCBhZnRlciB0aGUKKyAgICAgICAgICAgICAqIHBy ZXZpb3VzIGF0dGVtcHQgZ290IHByZWVtcHRlZCBpbiB0aGUgcHV0LW9sZC1NRk4gcGhhc2UuCisg ICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIGlmICggb2xkX21mbiA9PSBvcC5hcmcxLm1mbiAp CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGlmICggb3AuYXJnMS5tZm4g IT0gMCApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmMgPSBnZXRfcGFnZV9hbmRf dHlwZV9mcm9tX21mbigKKyAgICAgICAgICAgICAgICAgICAgX21mbihvcC5hcmcxLm1mbiksIFBH VF9yb290X3BhZ2VfdGFibGUsIGN1cnJkLCAwLCB0cnVlKTsKKworICAgICAgICAgICAgICAgIGlm ICggdW5saWtlbHkocmMpICkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAg IGlmICggcmMgPT0gLUVJTlRSICkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJjID0gLUVSRVNU QVJUOworICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICggcmMgIT0gLUVSRVNUQVJUICkKKyAg ICAgICAgICAgICAgICAgICAgICAgIGdkcHJpbnRrKFhFTkxPR19XQVJOSU5HLAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIkVycm9yICVkIGluc3RhbGxpbmcgbmV3IG1mbiAlIiBQ UklfbWZuICJcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByYywgb3AuYXJn MS5tZm4pOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisK KyAgICAgICAgICAgICAgICBpZiAoIFZNX0FTU0lTVChjdXJyZCwgbTJwX3N0cmljdCkgKQorICAg ICAgICAgICAgICAgICAgICB6YXBfcm9fbXB0KG9wLmFyZzEubWZuKTsKKyAgICAgICAgICAgIH0K KworICAgICAgICAgICAgY3Vyci0+YXJjaC5ndWVzdF90YWJsZV91c2VyID0gcGFnZXRhYmxlX2Zy b21fcGZuKG9wLmFyZzEubWZuKTsKKworICAgICAgICAgICAgaWYgKCBvbGRfbWZuICE9IDAgKQor ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHBhZ2UgPSBtZm5fdG9fcGFnZShvbGRfbWZu KTsKKworICAgICAgICAgICAgICAgIHN3aXRjaCAoIHJjID0gcHV0X3BhZ2VfYW5kX3R5cGVfcHJl ZW1wdGlibGUocGFnZSkgKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBjYXNl IC1FSU5UUjoKKyAgICAgICAgICAgICAgICAgICAgcmMgPSAtRVJFU1RBUlQ7CisgICAgICAgICAg ICAgICAgICAgIC8qIGZhbGx0aHJvdWdoICovCisgICAgICAgICAgICAgICAgY2FzZSAtRVJFU1RB UlQ6CisgICAgICAgICAgICAgICAgICAgIGN1cnItPmFyY2gub2xkX2d1ZXN0X3RhYmxlID0gcGFn ZTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgZGVmYXVsdDoK KyAgICAgICAgICAgICAgICAgICAgQlVHX09OKHJjKTsKKyAgICAgICAgICAgICAgICAgICAgYnJl YWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBicmVh azsKKyAgICAgICAgfQorCisgICAgICAgIGNhc2UgTU1VRVhUX1RMQl9GTFVTSF9MT0NBTDoKKyAg ICAgICAgICAgIGlmICggbGlrZWx5KGN1cnJkID09IHBnX293bmVyKSApCisgICAgICAgICAgICAg ICAgZmx1c2hfdGxiX2xvY2FsKCk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAg cmMgPSAtRVBFUk07CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIE1NVUVYVF9J TlZMUEdfTE9DQUw6CisgICAgICAgICAgICBpZiAoIHVubGlrZWx5KGN1cnJkICE9IHBnX293bmVy KSApCisgICAgICAgICAgICAgICAgcmMgPSAtRVBFUk07CisgICAgICAgICAgICBlbHNlCisgICAg ICAgICAgICAgICAgcGFnaW5nX2ludmxwZyhjdXJyLCBvcC5hcmcxLmxpbmVhcl9hZGRyKTsKKyAg ICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgTU1VRVhUX1RMQl9GTFVTSF9NVUxUSToK KyAgICAgICAgY2FzZSBNTVVFWFRfSU5WTFBHX01VTFRJOgorICAgICAgICB7CisgICAgICAgICAg ICBjcHVtYXNrX3QgKm1hc2sgPSB0aGlzX2NwdShzY3JhdGNoX2NwdW1hc2spOworCisgICAgICAg ICAgICBpZiAoIHVubGlrZWx5KGN1cnJkICE9IHBnX293bmVyKSApCisgICAgICAgICAgICAgICAg cmMgPSAtRVBFUk07CisgICAgICAgICAgICBlbHNlIGlmICggdW5saWtlbHkodmNwdW1hc2tfdG9f cGNwdW1hc2soY3VycmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGd1ZXN0 X2hhbmRsZV90b19wYXJhbShvcC5hcmcyLnZjcHVtYXNrLAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Rfdm9pZCksCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hc2spKSApCisgICAgICAgICAgICAgICAgcmMg PSAtRUlOVkFMOworICAgICAgICAgICAgaWYgKCB1bmxpa2VseShyYykgKQorICAgICAgICAgICAg ICAgIGJyZWFrOworCisgICAgICAgICAgICBpZiAoIG9wLmNtZCA9PSBNTVVFWFRfVExCX0ZMVVNI X01VTFRJICkKKyAgICAgICAgICAgICAgICBmbHVzaF90bGJfbWFzayhtYXNrKTsKKyAgICAgICAg ICAgIGVsc2UgaWYgKCBfX2FkZHJfb2sob3AuYXJnMS5saW5lYXJfYWRkcikgKQorICAgICAgICAg ICAgICAgIGZsdXNoX3RsYl9vbmVfbWFzayhtYXNrLCBvcC5hcmcxLmxpbmVhcl9hZGRyKTsKKyAg ICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgY2FzZSBNTVVFWFRfVExCX0ZM VVNIX0FMTDoKKyAgICAgICAgICAgIGlmICggbGlrZWx5KGN1cnJkID09IHBnX293bmVyKSApCisg ICAgICAgICAgICAgICAgZmx1c2hfdGxiX21hc2soY3VycmQtPmRvbWFpbl9kaXJ0eV9jcHVtYXNr KTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICByYyA9IC1FUEVSTTsKKyAgICAg ICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgTU1VRVhUX0lOVkxQR19BTEw6CisgICAgICAg ICAgICBpZiAoIHVubGlrZWx5KGN1cnJkICE9IHBnX293bmVyKSApCisgICAgICAgICAgICAgICAg cmMgPSAtRVBFUk07CisgICAgICAgICAgICBlbHNlIGlmICggX19hZGRyX29rKG9wLmFyZzEubGlu ZWFyX2FkZHIpICkKKyAgICAgICAgICAgICAgICBmbHVzaF90bGJfb25lX21hc2soY3VycmQtPmRv bWFpbl9kaXJ0eV9jcHVtYXNrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBv cC5hcmcxLmxpbmVhcl9hZGRyKTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2Ug TU1VRVhUX0ZMVVNIX0NBQ0hFOgorICAgICAgICAgICAgaWYgKCB1bmxpa2VseShjdXJyZCAhPSBw Z19vd25lcikgKQorICAgICAgICAgICAgICAgIHJjID0gLUVQRVJNOworICAgICAgICAgICAgZWxz ZSBpZiAoIHVubGlrZWx5KCFjYWNoZV9mbHVzaF9wZXJtaXR0ZWQoY3VycmQpKSApCisgICAgICAg ICAgICAgICAgcmMgPSAtRUFDQ0VTOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAg IHdiaW52ZCgpOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBNTVVFWFRfRkxV U0hfQ0FDSEVfR0xPQkFMOgorICAgICAgICAgICAgaWYgKCB1bmxpa2VseShjdXJyZCAhPSBwZ19v d25lcikgKQorICAgICAgICAgICAgICAgIHJjID0gLUVQRVJNOworICAgICAgICAgICAgZWxzZSBp ZiAoIGxpa2VseShjYWNoZV9mbHVzaF9wZXJtaXR0ZWQoY3VycmQpKSApCisgICAgICAgICAgICB7 CisgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGNwdTsKKyAgICAgICAgICAgICAgICBjcHVt YXNrX3QgKm1hc2sgPSB0aGlzX2NwdShzY3JhdGNoX2NwdW1hc2spOworCisgICAgICAgICAgICAg ICAgY3B1bWFza19jbGVhcihtYXNrKTsKKyAgICAgICAgICAgICAgICBmb3JfZWFjaF9vbmxpbmVf Y3B1KGNwdSkKKyAgICAgICAgICAgICAgICAgICAgaWYgKCAhY3B1bWFza19pbnRlcnNlY3RzKG1h c2ssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZXJfY3B1 KGNwdV9zaWJsaW5nX21hc2ssIGNwdSkpICkKKyAgICAgICAgICAgICAgICAgICAgICAgIF9fY3B1 bWFza19zZXRfY3B1KGNwdSwgbWFzayk7CisgICAgICAgICAgICAgICAgZmx1c2hfbWFzayhtYXNr LCBGTFVTSF9DQUNIRSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAg ICAgICAgICAgcmMgPSAtRUlOVkFMOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2Fz ZSBNTVVFWFRfU0VUX0xEVDoKKyAgICAgICAgeworICAgICAgICAgICAgdW5zaWduZWQgaW50IGVu dHMgPSBvcC5hcmcyLm5yX2VudHM7CisgICAgICAgICAgICB1bnNpZ25lZCBsb25nIHB0ciA9IGVu dHMgPyBvcC5hcmcxLmxpbmVhcl9hZGRyIDogMDsKKworICAgICAgICAgICAgaWYgKCB1bmxpa2Vs eShjdXJyZCAhPSBwZ19vd25lcikgKQorICAgICAgICAgICAgICAgIHJjID0gLUVQRVJNOworICAg ICAgICAgICAgZWxzZSBpZiAoIHBhZ2luZ19tb2RlX2V4dGVybmFsKGN1cnJkKSApCisgICAgICAg ICAgICAgICAgcmMgPSAtRUlOVkFMOworICAgICAgICAgICAgZWxzZSBpZiAoICgocHRyICYgKFBB R0VfU0laRSAtIDEpKSAhPSAwKSB8fCAhX19hZGRyX29rKHB0cikgfHwKKyAgICAgICAgICAgICAg ICAgICAgICAoZW50cyA+IDgxOTIpICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBn ZHByaW50ayhYRU5MT0dfV0FSTklORywKKyAgICAgICAgICAgICAgICAgICAgICAgICAiQmFkIGFy Z3MgdG8gU0VUX0xEVDogcHRyPSVseCwgZW50cz0leFxuIiwgcHRyLCBlbnRzKTsKKyAgICAgICAg ICAgICAgICByYyA9IC1FSU5WQUw7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlm ICggKGN1cnItPmFyY2gucHZfdmNwdS5sZHRfZW50cyAhPSBlbnRzKSB8fAorICAgICAgICAgICAg ICAgICAgICAgIChjdXJyLT5hcmNoLnB2X3ZjcHUubGR0X2Jhc2UgIT0gcHRyKSApCisgICAgICAg ICAgICB7CisgICAgICAgICAgICAgICAgcHZfaW52YWxpZGF0ZV9zaGFkb3dfbGR0KGN1cnIsIGZh bHNlKTsKKyAgICAgICAgICAgICAgICBmbHVzaF90bGJfbG9jYWwoKTsKKyAgICAgICAgICAgICAg ICBjdXJyLT5hcmNoLnB2X3ZjcHUubGR0X2Jhc2UgPSBwdHI7CisgICAgICAgICAgICAgICAgY3Vy ci0+YXJjaC5wdl92Y3B1LmxkdF9lbnRzID0gZW50czsKKyAgICAgICAgICAgICAgICBsb2FkX0xE VChjdXJyKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisK KyAgICAgICAgY2FzZSBNTVVFWFRfQ0xFQVJfUEFHRToKKyAgICAgICAgICAgIHBhZ2UgPSBnZXRf cGFnZV9mcm9tX2dmbihwZ19vd25lciwgb3AuYXJnMS5tZm4sICZwMm10LCBQMk1fQUxMT0MpOwor ICAgICAgICAgICAgaWYgKCB1bmxpa2VseShwMm10ICE9IHAybV9yYW1fcncpICYmIHBhZ2UgKQor ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHB1dF9wYWdlKHBhZ2UpOworICAgICAgICAg ICAgICAgIHBhZ2UgPSBOVUxMOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKCAhcGFn ZSB8fCAhZ2V0X3BhZ2VfdHlwZShwYWdlLCBQR1Rfd3JpdGFibGVfcGFnZSkgKQorICAgICAgICAg ICAgeworICAgICAgICAgICAgICAgIGlmICggcGFnZSApCisgICAgICAgICAgICAgICAgICAgIHB1 dF9wYWdlKHBhZ2UpOworICAgICAgICAgICAgICAgIGdkcHJpbnRrKFhFTkxPR19XQVJOSU5HLAor ICAgICAgICAgICAgICAgICAgICAgICAgICJFcnJvciBjbGVhcmluZyBtZm4gJSIgUFJJX21mbiAi XG4iLCBvcC5hcmcxLm1mbik7CisgICAgICAgICAgICAgICAgcmMgPSAtRUlOVkFMOworICAgICAg ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvKiBBIHBhZ2Ug aXMgZGlydGllZCB3aGVuIGl0J3MgYmVpbmcgY2xlYXJlZC4gKi8KKyAgICAgICAgICAgIHBhZ2lu Z19tYXJrX2RpcnR5KHBnX293bmVyLCBfbWZuKHBhZ2VfdG9fbWZuKHBhZ2UpKSk7CisKKyAgICAg ICAgICAgIGNsZWFyX2RvbWFpbl9wYWdlKF9tZm4ocGFnZV90b19tZm4ocGFnZSkpKTsKKworICAg ICAgICAgICAgcHV0X3BhZ2VfYW5kX3R5cGUocGFnZSk7CisgICAgICAgICAgICBicmVhazsKKwor ICAgICAgICBjYXNlIE1NVUVYVF9DT1BZX1BBR0U6CisgICAgICAgIHsKKyAgICAgICAgICAgIHN0 cnVjdCBwYWdlX2luZm8gKnNyY19wYWdlLCAqZHN0X3BhZ2U7CisKKyAgICAgICAgICAgIHNyY19w YWdlID0gZ2V0X3BhZ2VfZnJvbV9nZm4ocGdfb3duZXIsIG9wLmFyZzIuc3JjX21mbiwgJnAybXQs CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFAyTV9BTExPQyk7Cisg ICAgICAgICAgICBpZiAoIHVubGlrZWx5KHAybXQgIT0gcDJtX3JhbV9ydykgJiYgc3JjX3BhZ2Ug KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHB1dF9wYWdlKHNyY19wYWdlKTsKKyAg ICAgICAgICAgICAgICBzcmNfcGFnZSA9IE5VTEw7CisgICAgICAgICAgICB9CisgICAgICAgICAg ICBpZiAoIHVubGlrZWx5KCFzcmNfcGFnZSkgKQorICAgICAgICAgICAgeworICAgICAgICAgICAg ICAgIGdkcHJpbnRrKFhFTkxPR19XQVJOSU5HLAorICAgICAgICAgICAgICAgICAgICAgICAgICJF cnJvciBjb3B5aW5nIGZyb20gbWZuICUiIFBSSV9tZm4gIlxuIiwKKyAgICAgICAgICAgICAgICAg ICAgICAgICBvcC5hcmcyLnNyY19tZm4pOworICAgICAgICAgICAgICAgIHJjID0gLUVJTlZBTDsK KyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZHN0 X3BhZ2UgPSBnZXRfcGFnZV9mcm9tX2dmbihwZ19vd25lciwgb3AuYXJnMS5tZm4sICZwMm10LAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQMk1fQUxMT0MpOworICAg ICAgICAgICAgaWYgKCB1bmxpa2VseShwMm10ICE9IHAybV9yYW1fcncpICYmIGRzdF9wYWdlICkK KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBwdXRfcGFnZShkc3RfcGFnZSk7CisgICAg ICAgICAgICAgICAgZHN0X3BhZ2UgPSBOVUxMOworICAgICAgICAgICAgfQorICAgICAgICAgICAg cmMgPSAoZHN0X3BhZ2UgJiYKKyAgICAgICAgICAgICAgICAgIGdldF9wYWdlX3R5cGUoZHN0X3Bh Z2UsIFBHVF93cml0YWJsZV9wYWdlKSkgPyAwIDogLUVJTlZBTDsKKyAgICAgICAgICAgIGlmICgg dW5saWtlbHkocmMpICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBwdXRfcGFnZShz cmNfcGFnZSk7CisgICAgICAgICAgICAgICAgaWYgKCBkc3RfcGFnZSApCisgICAgICAgICAgICAg ICAgICAgIHB1dF9wYWdlKGRzdF9wYWdlKTsKKyAgICAgICAgICAgICAgICBnZHByaW50ayhYRU5M T0dfV0FSTklORywKKyAgICAgICAgICAgICAgICAgICAgICAgICAiRXJyb3IgY29weWluZyB0byBt Zm4gJSIgUFJJX21mbiAiXG4iLCBvcC5hcmcxLm1mbik7CisgICAgICAgICAgICAgICAgYnJlYWs7 CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8qIEEgcGFnZSBpcyBkaXJ0aWVkIHdoZW4g aXQncyBiZWluZyBjb3BpZWQgdG8uICovCisgICAgICAgICAgICBwYWdpbmdfbWFya19kaXJ0eShw Z19vd25lciwgX21mbihwYWdlX3RvX21mbihkc3RfcGFnZSkpKTsKKworICAgICAgICAgICAgY29w eV9kb21haW5fcGFnZShfbWZuKHBhZ2VfdG9fbWZuKGRzdF9wYWdlKSksCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIF9tZm4ocGFnZV90b19tZm4oc3JjX3BhZ2UpKSk7CisKKyAgICAgICAg ICAgIHB1dF9wYWdlX2FuZF90eXBlKGRzdF9wYWdlKTsKKyAgICAgICAgICAgIHB1dF9wYWdlKHNy Y19wYWdlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgY2FzZSBN TVVFWFRfTUFSS19TVVBFUjoKKyAgICAgICAgY2FzZSBNTVVFWFRfVU5NQVJLX1NVUEVSOgorICAg ICAgICAgICAgcmMgPSAtRU9QTk9UU1VQUDsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAg IGRlZmF1bHQ6CisgICAgICAgICAgICByYyA9IC1FTk9TWVM7CisgICAgICAgICAgICBicmVhazsK KyAgICAgICAgfQorCisgZG9uZToKKyAgICAgICAgaWYgKCB1bmxpa2VseShyYykgKQorICAgICAg ICAgICAgYnJlYWs7CisKKyAgICAgICAgZ3Vlc3RfaGFuZGxlX2FkZF9vZmZzZXQodW9wcywgMSk7 CisgICAgfQorCisgICAgaWYgKCByYyA9PSAtRVJFU1RBUlQgKQorICAgIHsKKyAgICAgICAgQVNT RVJUKGkgPCBjb3VudCk7CisgICAgICAgIHJjID0gaHlwZXJjYWxsX2NyZWF0ZV9jb250aW51YXRp b24oCisgICAgICAgICAgICBfX0hZUEVSVklTT1JfbW11ZXh0X29wLCAiaGloaSIsCisgICAgICAg ICAgICB1b3BzLCAoY291bnQgLSBpKSB8IE1NVV9VUERBVEVfUFJFRU1QVEVELCBwZG9uZSwgZm9y ZWlnbmRvbSk7CisgICAgfQorICAgIGVsc2UgaWYgKCBjdXJyLT5hcmNoLm9sZF9ndWVzdF90YWJs ZSApCisgICAgeworICAgICAgICBYRU5fR1VFU1RfSEFORExFX1BBUkFNKHZvaWQpIG51bGw7CisK KyAgICAgICAgQVNTRVJUKHJjIHx8IGkgPT0gY291bnQpOworICAgICAgICBzZXRfeGVuX2d1ZXN0 X2hhbmRsZShudWxsLCBOVUxMKTsKKyAgICAgICAgLyoKKyAgICAgICAgICogSW4gb3JkZXIgdG8g aGF2ZSBhIHdheSB0byBjb21tdW5pY2F0ZSB0aGUgZmluYWwgcmV0dXJuIHZhbHVlIHRvCisgICAg ICAgICAqIG91ciBjb250aW51YXRpb24sIHdlIHBhc3MgdGhpcyBpbiBwbGFjZSBvZiAiZm9yZWln bmRvbSIsIGJ1aWxkaW5nCisgICAgICAgICAqIG9uIHRoZSBmYWN0IHRoYXQgdGhpcyBhcmd1bWVu dCBpc24ndCBuZWVkZWQgYW55bW9yZS4KKyAgICAgICAgICovCisgICAgICAgIHJjID0gaHlwZXJj YWxsX2NyZWF0ZV9jb250aW51YXRpb24oCisgICAgICAgICAgICAgICAgX19IWVBFUlZJU09SX21t dWV4dF9vcCwgImhpaGkiLCBudWxsLAorICAgICAgICAgICAgICAgIE1NVV9VUERBVEVfUFJFRU1Q VEVELCBudWxsLCByYyk7CisgICAgfQorCisgICAgcHV0X3BnX293bmVyKHBnX293bmVyKTsKKwor ICAgIHBlcmZjX2FkZChudW1fbW11ZXh0X29wcywgaSk7CisKKyAgICAvKiBBZGQgaW5jcmVtZW50 YWwgd29yayB3ZSBoYXZlIGRvbmUgdG8gdGhlIEBkb25lIG91dHB1dCBwYXJhbWV0ZXIuICovCisg ICAgaWYgKCB1bmxpa2VseSghZ3Vlc3RfaGFuZGxlX2lzX251bGwocGRvbmUpKSApCisgICAgewor ICAgICAgICBkb25lICs9IGk7CisgICAgICAgIGNvcHlfdG9fZ3Vlc3QocGRvbmUsICZkb25lLCAx KTsKKyAgICB9CisKKyAgICByZXR1cm4gcmM7Cit9CisKKy8qCisgKiBMb2NhbCB2YXJpYWJsZXM6 CisgKiBtb2RlOiBDCisgKiBjLWZpbGUtc3R5bGU6ICJCU0QiCisgKiBjLWJhc2ljLW9mZnNldDog NAorICogdGFiLXdpZHRoOiA0CisgKiBpbmRlbnQtdGFicy1tb2RlOiBuaWwKKyAqIEVuZDoKKyAq LwotLSAKMi4xMS4wCgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX18KWGVuLWRldmVsIG1haWxpbmcgbGlzdApYZW4tZGV2ZWxAbGlzdHMueGVuLm9yZwpodHRw czovL2xpc3RzLnhlbi5vcmcveGVuLWRldmVsCg==