Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1tqWFX-006AEh-7J for pgsql-hackers@arkaria.postgresql.org; Fri, 07 Mar 2025 11:52:20 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.94.2) (envelope-from ) id 1tqWFV-000xsA-2V for pgsql-hackers@arkaria.postgresql.org; Fri, 07 Mar 2025 11:52:17 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1tqWFU-000xrz-Dw for pgsql-hackers@lists.postgresql.org; Fri, 07 Mar 2025 11:52:16 +0000 Received: from smtp.outgoing.loopia.se ([93.188.3.37]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1tqWFP-001UYA-2I for pgsql-hackers@postgresql.org; Fri, 07 Mar 2025 11:52:15 +0000 Received: from s807.loopia.se (localhost [127.0.0.1]) by s807.loopia.se (Postfix) with ESMTP id 6954C2CB584 for ; Fri, 07 Mar 2025 12:52:11 +0100 (CET) Received: from s934.loopia.se (unknown [172.22.191.5]) by s807.loopia.se (Postfix) with ESMTP id 523992CB703; Fri, 07 Mar 2025 12:52:11 +0100 (CET) Received: from s473.loopia.se (unknown [172.22.191.6]) by s934.loopia.se (Postfix) with ESMTP id 4F03C7CEA42; Fri, 07 Mar 2025 12:52:11 +0100 (CET) X-Virus-Scanned: amavisd-new at amavis.loopia.se X-Spam-Flag: NO X-Spam-Score: -1.2 X-Spam-Level: X-Spam-Status: No, score=-1.2 tagged_above=-999 required=6.2 tests=[ALL_TRUSTED=-1, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1] autolearn=disabled Authentication-Results: s473.loopia.se (amavisd-new); dkim=pass (2048-bit key) header.d=proxel.se Received: from s934.loopia.se ([172.22.191.5]) by s473.loopia.se (s473.loopia.se [172.22.190.13]) (amavisd-new, port 10024) with UTF8LMTP id Ek9pO-MPyrLF; Fri, 7 Mar 2025 12:52:09 +0100 (CET) X-Loopia-Auth: user X-Loopia-User: andreas@proxel.se X-Loopia-Originating-IP: 147.28.75.140 Received: from [192.168.0.121] (customer-147-28-75-140.stosn.net [147.28.75.140]) (Authenticated sender: andreas@proxel.se) by s934.loopia.se (Postfix) with ESMTPSA id E60BD7CEA55; Fri, 07 Mar 2025 12:52:08 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=proxel.se; s=loopiadkim1707418970; t=1741348329; bh=4+/EN+0J4UFXQon+/Az3rQxR9fLuaahC87vkeQhz5Eo=; h=Date:Subject:From:To:Cc:References:In-Reply-To; b=kZU2INEIxcvL2AcFU+ZXw18C4tTlvUzLJVYkv6ihkKWU6qDjVwb1DkTKzVV8051b5 ch1nToLjobC95GcXxrhgPKi4jcbQRANH9O2ETiD2mRc7kqsdIpgSSOu9NzIeXsm42F uJpz1Rn8yZ3lQSC8JvD6lyaofwYgyMhlayALOr8PacgrxUpFuVd4AFEZzhSOABf+5Z FOAdjRwzQUv6brP+leXD04TQLFwPfXGMXhy13C73sqmwLKSy6dTybVoJWTcHW+koWL NK0aEJ0dTKFkDnpzCSU9CAARCGom/giy3cds+x504A+J9xLLbwsMSl9HZ89ym+CnRr 1sDmu12mmZE2Q== Content-Type: multipart/mixed; boundary="------------pzqHmNAXsEg2Eg5hZQblrRMV" Message-ID: <3217233f-6a86-4792-a055-606134c82d15@proxel.se> Date: Fri, 7 Mar 2025 12:52:08 +0100 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: Extensible storage manager API - SMGR hook Redux From: Andreas Karlsson To: Nitin Jadhav , Tristan Partin Cc: PostgreSQL Hackers , Matthias van de Meent , Heikki Linnakangas , Andres Freund References: Content-Language: en-US In-Reply-To: List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk This is a multi-part message in MIME format. --------------pzqHmNAXsEg2Eg5hZQblrRMV Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit Hi, Here is a rebased version of it to make the CI happy. I plan to work more on this next week but am happy with any feedback on what is already there. Andreas --------------pzqHmNAXsEg2Eg5hZQblrRMV Content-Type: text/x-patch; charset=UTF-8; name="v4-0006-SMGR-GUC-variable-and-chaining.patch" Content-Disposition: attachment; filename="v4-0006-SMGR-GUC-variable-and-chaining.patch" Content-Transfer-Encoding: base64 RnJvbSAxZGQ1OGM2MDZjNWUwMjZjOTZlZDkzYTcxZDg1ZDM2MDUwNzhhNDI5IE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBac29sdCBQYXJyYWdpIDx6c29sdC5wYXJyYWdpQGNh bmNlbGxhci5odT4KRGF0ZTogTW9uLCAyIERlYyAyMDI0IDA3OjQ3OjA3ICswMDAwClN1Ympl Y3Q6IFtQQVRDSCB2NCA2LzZdIFNNR1IgR1VDIHZhcmlhYmxlIGFuZCBjaGFpbmluZwoKVGhl IG92ZXJhbGwgZ29hbCBvZiB0aGlzIGNvbW1pdCBpcyB0byBpbnRyb2R1Y2UgYSB1c2VyIGlu dGVyZmFjZSB0bwp0aGUgcHJldmlvdXMgU01HUiBwYXRjaC4KClRoZSBpZGVhIGlzIHRvIGFs bG93IGEgc2ltcGxlIGNvbmZpZ3VyYXRpb24gZm9yIG11bHRpcGxlICJtb2RpZmljYXRvciIK U01HUnMgc2ltaWxhciB0byB0aGUgZnN5bmNfY2hlY2tlciBpbiB0aGUgb3JpZ2luYWwgcHJv cG9zYWwuCgoqIEV4dGVuc2lvbnMgc2hvdWxkIGJlIGFibGUgdG8gZGVjbGFyZSBhIG5hbWVk IGxpc3RzIG9mIFNNR1IgaW1wbGVtZW50YXRpb25zLAphbHNvIHNwZWNpZnlpbmcgaWYgdGhl IGdpdmVuIFNNR1IgaXMgYW4gImVuZCIgaW1wbGVtZW50YXRpb24gZm9yCmFjdHVhbCBzdG9y YWdlLCBvciBpZiBpdCBpcyBhIG1vZGlmaWVyIGltcGxlbWVudGF0aW9uIGZvciBzb21lIG90 aGVyCnB1cnBvc2UuCiogVXNlcnMgc2hvdWxkIGJlIGFibGUgdG8gc3BlY2lmeSBhIGxpc3Qg b2YgU01HUnM6IHBvc3NpYmx5IG11bHRpcGxlIG1vZGlmaWVycywKYW5kIG9uZSBzdG9yYWdl IGltcGxlbWVudGF0aW9uIGF0IHRoZSBlbmQgdG8gY29uZmlndXJlIGhvdyB0aGUKc3RvcmFn ZSBtYW5hZ2VyIGlzIGNvbnN0cnVjdGVkLgoKVGhpcyBjb21taXQgaW50cm9kdWNlcyBhIG5l dyBHVUMgdmFyaWFibGUsIGBzbWdyX2NoYWluYCwgd2hpY2ggYWxsb3dzCnVzZXJzIHRvIGNv bmZpZ3VyZSBtdWx0aXBsZSBTTUdSIGltcGxlbWVudGF0aW9uczogaXQgaXMgYSBjb21tYSBz ZXBhcmF0ZWQgbGlzdCwKd2hlcmUgdGhlIGxhc3QgZW50cnkgbW9zdCBiZSBhIHN0b3JhZ2Ug aW1wbGVtZW50YXRpb24sIHRoZSBvdGhlcnMgbXVzdCBiZQptb2RpZmllcnMuIFRoZSBkZWZh dWx0IHZhbHVlIG9mIHRoaXMgdmFyaWFibGUgaXMgIm1kIi4KClRoZSBpbnRlcm5hbCBzdG9y YWdlIG1hbmFnZXIgQVBJIGlzIGFsc28gcmVmYWN0b3JlZCB0byBpbmNsdWRlIGFuIGVhc3kK d2F5IGZvciBTTUdSIGltcGxlbWVudGF0aW9ucyB0byBzdXBwb3J0IHByb3BlciBjaGFpbmlu Zy4gTW9kaWZpZXIgU01HUgppbXBsZW1lbnRhdGlvbnMgYWxzbyBvbmx5IGhhdmUgdG8gaW1w bGVtZW50IHRoZSBmdW5jdGlvbnMgdGhleSBhY3R1YWxseQpjaGFuZ2UsIGFuZCBjYW4gbGVh dmUgZXZlcnl0aGluZyBlbHNlIGFzIGVtcHR5IChOVUxMKS4gQW5kIHdpdGggdGhpcwpjaGFu Z2Ugd2UgY2FuIG1ha2UgdGhlIGZ1bmN0aW9ucyBvZiB0aGUgbWQgc21nciBzdGF0aWMuCgpU aGUgZnN5bmMgZXhhbXBsZSBleHRlbnNpb24gaXMgYWxzbyBtb2RpZmllZCB0byBtYXRjaCB0 aGUgbmV3IEFQSS4KLS0tCiBjb250cmliL2ZzeW5jX2NoZWNrZXIvZnN5bmNfY2hlY2tlcl9z bWdyLmMgICAgfCAgNTcgKystLQogc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9wb3N0bWFzdGVy LmMgICAgICAgICAgIHwgICAyICsKIHNyYy9iYWNrZW5kL3N0b3JhZ2Uvc21nci9tZC5jICAg ICAgICAgICAgICAgICB8IDEwMiArKysrKy0tLQogc3JjL2JhY2tlbmQvc3RvcmFnZS9zbWdy L3NtZ3IuYyAgICAgICAgICAgICAgIHwgMjQ3ICsrKysrKysrKysrKysrLS0tLQogc3JjL2Jh Y2tlbmQvdGNvcC9wb3N0Z3Jlcy5jICAgICAgICAgICAgICAgICAgIHwgICAyICsKIHNyYy9i YWNrZW5kL3V0aWxzL2luaXQvbWlzY2luaXQuYyAgICAgICAgICAgICB8ICA2MyArKysrLQog c3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9ndWNfdGFibGVzLmMgICAgICAgICAgIHwgIDExICsK IHNyYy9iYWNrZW5kL3V0aWxzL21pc2MvcG9zdGdyZXNxbC5jb25mLnNhbXBsZSB8ICAgMSAr CiBzcmMvaW5jbHVkZS9taXNjYWRtaW4uaCAgICAgICAgICAgICAgICAgICAgICAgfCAgIDIg Kwogc3JjL2luY2x1ZGUvc3RvcmFnZS9tZC5oICAgICAgICAgICAgICAgICAgICAgIHwgIDI4 IC0tCiBzcmMvaW5jbHVkZS9zdG9yYWdlL3NtZ3IuaCAgICAgICAgICAgICAgICAgICAgfCAg OTMgKysrKystLQogc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QgICAgICAgICAg ICAgIHwgICAxICsKIDEyIGZpbGVzIGNoYW5nZWQsIDQ0OCBpbnNlcnRpb25zKCspLCAxNjEg ZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvY29udHJpYi9mc3luY19jaGVja2VyL2ZzeW5j X2NoZWNrZXJfc21nci5jIGIvY29udHJpYi9mc3luY19jaGVja2VyL2ZzeW5jX2NoZWNrZXJf c21nci5jCmluZGV4IDk3YWQwZjc4ZGE4Li42MjZmZjA1ODc2NCAxMDA2NDQKLS0tIGEvY29u dHJpYi9mc3luY19jaGVja2VyL2ZzeW5jX2NoZWNrZXJfc21nci5jCisrKyBiL2NvbnRyaWIv ZnN5bmNfY2hlY2tlci9mc3luY19jaGVja2VyX3NtZ3IuYwpAQCAtMjcsMTUgKzI3LDE1IEBA IHR5cGVkZWYgc3RydWN0CiB2b2lkCQlfUEdfaW5pdCh2b2lkKTsKIAogc3RhdGljIHZvaWQg ZnN5bmNfY2hlY2tlcl9leHRlbmQoU01nclJlbGF0aW9uIHJlbG4sIEZvcmtOdW1iZXIgZm9y a251bSwgQmxvY2tOdW1iZXIgYmxvY2tudW0sCi0JCQkJCQkJCSBjb25zdCB2b2lkICpidWZm ZXIsIGJvb2wgc2tpcEZzeW5jKTsKLXN0YXRpYyB2b2lkIGZzeW5jX2NoZWNrZXJfaW1tZWRz eW5jKFNNZ3JSZWxhdGlvbiByZWxuLCBGb3JrTnVtYmVyIGZvcmtudW0pOworCQkJCQkJCQkg Y29uc3Qgdm9pZCAqYnVmZmVyLCBib29sIHNraXBGc3luYywgU21nckNoYWluSW5kZXggY2hh aW5faW5kZXgpOworc3RhdGljIHZvaWQgZnN5bmNfY2hlY2tlcl9pbW1lZHN5bmMoU01nclJl bGF0aW9uIHJlbG4sIEZvcmtOdW1iZXIgZm9ya251bSwgU21nckNoYWluSW5kZXggY2hhaW5f aW5kZXgpOwogc3RhdGljIHZvaWQgZnN5bmNfY2hlY2tlcl93cml0ZXYoU01nclJlbGF0aW9u IHJlbG4sIEZvcmtOdW1iZXIgZm9ya251bSwKIAkJCQkJCQkJIEJsb2NrTnVtYmVyIGJsb2Nr bnVtLCBjb25zdCB2b2lkICoqYnVmZmVycywKLQkJCQkJCQkJIEJsb2NrTnVtYmVyIG5ibG9j a3MsIGJvb2wgc2tpcEZzeW5jKTsKKwkJCQkJCQkJIEJsb2NrTnVtYmVyIG5ibG9ja3MsIGJv b2wgc2tpcEZzeW5jLCBTbWdyQ2hhaW5JbmRleCBjaGFpbl9pbmRleCk7CiBzdGF0aWMgdm9p ZCBmc3luY19jaGVja2VyX3dyaXRlYmFjayhTTWdyUmVsYXRpb24gcmVsbiwgRm9ya051bWJl ciBmb3JrbnVtLAotCQkJCQkJCQkJQmxvY2tOdW1iZXIgYmxvY2tudW0sIEJsb2NrTnVtYmVy IG5ibG9ja3MpOworCQkJCQkJCQkJQmxvY2tOdW1iZXIgYmxvY2tudW0sIEJsb2NrTnVtYmVy IG5ibG9ja3MsIFNtZ3JDaGFpbkluZGV4IGNoYWluX2luZGV4KTsKIHN0YXRpYyB2b2lkIGZz eW5jX2NoZWNrZXJfemVyb2V4dGVuZChTTWdyUmVsYXRpb24gcmVsbiwgRm9ya051bWJlciBm b3JrbnVtLAotCQkJCQkJCQkJIEJsb2NrTnVtYmVyIGJsb2NrbnVtLCBpbnQgbmJsb2Nrcywg Ym9vbCBza2lwRnN5bmMpOworCQkJCQkJCQkJIEJsb2NrTnVtYmVyIGJsb2NrbnVtLCBpbnQg bmJsb2NrcywgYm9vbCBza2lwRnN5bmMsIFNtZ3JDaGFpbkluZGV4IGNoYWluX2luZGV4KTsK IAogc3RhdGljIHZvaWQgZnN5bmNfY2hlY2tlcl9jaGVja3BvaW50X2NyZWF0ZShjb25zdCBD aGVja1BvaW50ICpjaGVja1BvaW50KTsKIHN0YXRpYyB2b2lkIGZzeW5jX2NoZWNrZXJfc2ht ZW1fcmVxdWVzdCh2b2lkKTsKQEAgLTQ3LDI0ICs0NywyNSBAQCBzdGF0aWMgdm9pZCByZW1v dmVfcmVsbihTTWdyUmVsYXRpb24gcmVsbiwgRm9ya051bWJlciBmb3JrbnVtKTsKIHN0YXRp YyBTTWdySWQgZnN5bmNfY2hlY2tlcl9zbWdyX2lkOwogc3RhdGljIGNvbnN0IHN0cnVjdCBm X3NtZ3IgZnN5bmNfY2hlY2tlcl9zbWdyID0gewogCS5uYW1lID0gImZzeW5jX2NoZWNrZXIi LAotCS5zbWdyX2luaXQgPSBtZGluaXQsCisJLmNoYWluX3Bvc2l0aW9uID0gU01HUl9DSEFJ Tl9NT0RJRklFUiwKKwkuc21ncl9pbml0ID0gTlVMTCwKIAkuc21ncl9zaHV0ZG93biA9IE5V TEwsCi0JLnNtZ3Jfb3BlbiA9IG1kb3BlbiwKLQkuc21ncl9jbG9zZSA9IG1kY2xvc2UsCi0J LnNtZ3JfY3JlYXRlID0gbWRjcmVhdGUsCi0JLnNtZ3JfZXhpc3RzID0gbWRleGlzdHMsCi0J LnNtZ3JfdW5saW5rID0gbWR1bmxpbmssCisJLnNtZ3Jfb3BlbiA9IE5VTEwsCisJLnNtZ3Jf Y2xvc2UgPSBOVUxMLAorCS5zbWdyX2NyZWF0ZSA9IE5VTEwsCisJLnNtZ3JfZXhpc3RzID0g TlVMTCwKKwkuc21ncl91bmxpbmsgPSBOVUxMLAogCS5zbWdyX2V4dGVuZCA9IGZzeW5jX2No ZWNrZXJfZXh0ZW5kLAogCS5zbWdyX3plcm9leHRlbmQgPSBmc3luY19jaGVja2VyX3plcm9l eHRlbmQsCi0JLnNtZ3JfcHJlZmV0Y2ggPSBtZHByZWZldGNoLAotCS5zbWdyX21heGNvbWJp bmUgPSBtZG1heGNvbWJpbmUsCi0JLnNtZ3JfcmVhZHYgPSBtZHJlYWR2LAorCS5zbWdyX3By ZWZldGNoID0gTlVMTCwKKwkuc21ncl9tYXhjb21iaW5lID0gTlVMTCwKKwkuc21ncl9yZWFk diA9IE5VTEwsCiAJLnNtZ3Jfd3JpdGV2ID0gZnN5bmNfY2hlY2tlcl93cml0ZXYsCiAJLnNt Z3Jfd3JpdGViYWNrID0gZnN5bmNfY2hlY2tlcl93cml0ZWJhY2ssCi0JLnNtZ3JfbmJsb2Nr cyA9IG1kbmJsb2NrcywKLQkuc21ncl90cnVuY2F0ZSA9IG1kdHJ1bmNhdGUsCisJLnNtZ3Jf bmJsb2NrcyA9IE5VTEwsCisJLnNtZ3JfdHJ1bmNhdGUgPSBOVUxMLAogCS5zbWdyX2ltbWVk c3luYyA9IGZzeW5jX2NoZWNrZXJfaW1tZWRzeW5jLAotCS5zbWdyX3JlZ2lzdGVyc3luYyA9 IG1kcmVnaXN0ZXJzeW5jLAorCS5zbWdyX3JlZ2lzdGVyc3luYyA9IE5VTEwsCiB9OwogCiBz dGF0aWMgSFRBQiAqdm9sYXRpbGVfcmVsbnM7CkBAIC05MSw4ICs5Miw2IEBAIF9QR19pbml0 KHZvaWQpCiAJICogY291bGQgdXNlIE1kU21nclJlbGF0aW9uIGFzIHRoZSBwYXJlbnQuCiAJ ICovCiAJZnN5bmNfY2hlY2tlcl9zbWdyX2lkID0gc21ncl9yZWdpc3RlcigmZnN5bmNfY2hl Y2tlcl9zbWdyLCAwKTsKLQotCXN0b3JhZ2VfbWFuYWdlcl9pZCA9IGZzeW5jX2NoZWNrZXJf c21ncl9pZDsKIH0KIAogc3RhdGljIHZvaWQKQEAgLTIwMCw1MCArMTk5LDUwIEBAIHJlbW92 ZV9yZWxuKFNNZ3JSZWxhdGlvbiByZWxuLCBGb3JrTnVtYmVyIGZvcmtudW0pCiAKIHN0YXRp YyB2b2lkCiBmc3luY19jaGVja2VyX2V4dGVuZChTTWdyUmVsYXRpb24gcmVsbiwgRm9ya051 bWJlciBmb3JrbnVtLCBCbG9ja051bWJlciBibG9ja251bSwKLQkJCQkJIGNvbnN0IHZvaWQg KmJ1ZmZlciwgYm9vbCBza2lwRnN5bmMpCisJCQkJCSBjb25zdCB2b2lkICpidWZmZXIsIGJv b2wgc2tpcEZzeW5jLCBTbWdyQ2hhaW5JbmRleCBjaGFpbl9pbmRleCkKIHsKIAlpZiAoIVNt Z3JJc1RlbXAocmVsbikgJiYgIXNraXBGc3luYykKIAkJYWRkX3JlbG4ocmVsbiwgZm9ya251 bSk7CiAKLQltZGV4dGVuZChyZWxuLCBmb3JrbnVtLCBibG9ja251bSwgYnVmZmVyLCBza2lw RnN5bmMpOworCXNtZ3JfZXh0ZW5kX25leHQocmVsbiwgZm9ya251bSwgYmxvY2tudW0sIGJ1 ZmZlciwgc2tpcEZzeW5jLCBjaGFpbl9pbmRleCArIDEpOwogfQogCiBzdGF0aWMgdm9pZAot ZnN5bmNfY2hlY2tlcl9pbW1lZHN5bmMoU01nclJlbGF0aW9uIHJlbG4sIEZvcmtOdW1iZXIg Zm9ya251bSkKK2ZzeW5jX2NoZWNrZXJfaW1tZWRzeW5jKFNNZ3JSZWxhdGlvbiByZWxuLCBG b3JrTnVtYmVyIGZvcmtudW0sIFNtZ3JDaGFpbkluZGV4IGNoYWluX2luZGV4KQogewogCWlm ICghU21ncklzVGVtcChyZWxuKSkKIAkJcmVtb3ZlX3JlbG4ocmVsbiwgZm9ya251bSk7CiAK LQltZGltbWVkc3luYyhyZWxuLCBmb3JrbnVtKTsKKwlzbWdyX2ltbWVkc3luY19uZXh0KHJl bG4sIGZvcmtudW0sIGNoYWluX2luZGV4ICsgMSk7CiB9CiAKIHN0YXRpYyB2b2lkCiBmc3lu Y19jaGVja2VyX3dyaXRldihTTWdyUmVsYXRpb24gcmVsbiwgRm9ya051bWJlciBmb3JrbnVt LAogCQkJCQkgQmxvY2tOdW1iZXIgYmxvY2tudW0sIGNvbnN0IHZvaWQgKipidWZmZXJzLAot CQkJCQkgQmxvY2tOdW1iZXIgbmJsb2NrcywgYm9vbCBza2lwRnN5bmMpCisJCQkJCSBCbG9j a051bWJlciBuYmxvY2tzLCBib29sIHNraXBGc3luYywgU21nckNoYWluSW5kZXggY2hhaW5f aW5kZXgpCiB7CiAJaWYgKCFTbWdySXNUZW1wKHJlbG4pICYmICFza2lwRnN5bmMpCiAJCWFk ZF9yZWxuKHJlbG4sIGZvcmtudW0pOwogCi0JbWR3cml0ZXYocmVsbiwgZm9ya251bSwgYmxv Y2tudW0sIGJ1ZmZlcnMsIG5ibG9ja3MsIHNraXBGc3luYyk7CisJc21ncl93cml0ZXZfbmV4 dChyZWxuLCBmb3JrbnVtLCBibG9ja251bSwgYnVmZmVycywgbmJsb2Nrcywgc2tpcEZzeW5j LCBjaGFpbl9pbmRleCArIDEpOwogfQogCiBzdGF0aWMgdm9pZAogZnN5bmNfY2hlY2tlcl93 cml0ZWJhY2soU01nclJlbGF0aW9uIHJlbG4sIEZvcmtOdW1iZXIgZm9ya251bSwKLQkJCQkJ CUJsb2NrTnVtYmVyIGJsb2NrbnVtLCBCbG9ja051bWJlciBuYmxvY2tzKQorCQkJCQkJQmxv Y2tOdW1iZXIgYmxvY2tudW0sIEJsb2NrTnVtYmVyIG5ibG9ja3MsIFNtZ3JDaGFpbkluZGV4 IGNoYWluX2luZGV4KQogewogCWlmICghU21ncklzVGVtcChyZWxuKSkKIAkJcmVtb3ZlX3Jl bG4ocmVsbiwgZm9ya251bSk7CiAKLQltZHdyaXRlYmFjayhyZWxuLCBmb3JrbnVtLCBibG9j a251bSwgbmJsb2Nrcyk7CisJc21ncl93cml0ZWJhY2tfbmV4dChyZWxuLCBmb3JrbnVtLCBi bG9ja251bSwgbmJsb2NrcywgY2hhaW5faW5kZXggKyAxKTsKIH0KIAogc3RhdGljIHZvaWQK IGZzeW5jX2NoZWNrZXJfemVyb2V4dGVuZChTTWdyUmVsYXRpb24gcmVsbiwgRm9ya051bWJl ciBmb3JrbnVtLAotCQkJCQkJIEJsb2NrTnVtYmVyIGJsb2NrbnVtLCBpbnQgbmJsb2Nrcywg Ym9vbCBza2lwRnN5bmMpCisJCQkJCQkgQmxvY2tOdW1iZXIgYmxvY2tudW0sIGludCBuYmxv Y2tzLCBib29sIHNraXBGc3luYywgU21nckNoYWluSW5kZXggY2hhaW5faW5kZXgpCiB7CiAJ aWYgKCFTbWdySXNUZW1wKHJlbG4pICYmICFza2lwRnN5bmMpCiAJCWFkZF9yZWxuKHJlbG4s IGZvcmtudW0pOwogCi0JbWR6ZXJvZXh0ZW5kKHJlbG4sIGZvcmtudW0sIGJsb2NrbnVtLCBu YmxvY2tzLCBza2lwRnN5bmMpOworCXNtZ3JfemVyb2V4dGVuZF9uZXh0KHJlbG4sIGZvcmtu dW0sIGJsb2NrbnVtLCBuYmxvY2tzLCBza2lwRnN5bmMsIGNoYWluX2luZGV4ICsgMSk7CiB9 CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9wb3N0bWFzdGVyL3Bvc3RtYXN0ZXIuYyBiL3Ny Yy9iYWNrZW5kL3Bvc3RtYXN0ZXIvcG9zdG1hc3Rlci5jCmluZGV4IDg4ZWE4MjE1NzNkLi4z YTlmYmEyZmJjNSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9wb3N0bWFz dGVyLmMKKysrIGIvc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9wb3N0bWFzdGVyLmMKQEAgLTky Niw2ICs5MjYsOCBAQCBQb3N0bWFzdGVyTWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQog CSAqLwogCXByb2Nlc3Nfc2hhcmVkX3ByZWxvYWRfbGlicmFyaWVzKCk7CiAKKwlwcm9jZXNz X3NtZ3JfY2hhaW4oKTsKKwogCS8qCiAJICogSW5pdGlhbGl6ZSBTU0wgbGlicmFyeSwgaWYg c3BlY2lmaWVkLgogCSAqLwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9zbWdy L21kLmMgYi9zcmMvYmFja2VuZC9zdG9yYWdlL3NtZ3IvbWQuYwppbmRleCAxNzY2YmJlMWU1 Ny4uOTYzYmQwZTljZGUgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3N0b3JhZ2Uvc21nci9t ZC5jCisrKyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2Uvc21nci9tZC5jCkBAIC0xMjQsNiArMTI0 LDMzIEBAIHR5cGVkZWYgTWRTTWdyUmVsYXRpb25EYXRhICpNZFNNZ3JSZWxhdGlvbjsKIC8q IGRvbid0IHRyeSB0byBvcGVuIGEgc2VnbWVudCwgaWYgbm90IGFscmVhZHkgb3BlbiAqLwog I2RlZmluZSBFWFRFTlNJT05fRE9OVF9PUEVOCQkJKDEgPDwgNSkKIAorLyogbWQgc3RvcmFn ZSBtYW5hZ2VyIGZ1bmN0aW9uYWxpdHkgKi8KK3N0YXRpYyB2b2lkIG1kaW5pdCh2b2lkKTsK K3N0YXRpYyB2b2lkIG1kb3BlbihTTWdyUmVsYXRpb24gcmVsbiwgU21nckNoYWluSW5kZXgg Y2hhaW5faW5kZXgpOworc3RhdGljIHZvaWQgbWRjbG9zZShTTWdyUmVsYXRpb24gcmVsbiwg Rm9ya051bWJlciBmb3JrbnVtLCBTbWdyQ2hhaW5JbmRleCBjaGFpbl9pbmRleCk7CitzdGF0 aWMgdm9pZCBtZGNyZWF0ZShSZWxGaWxlTG9jYXRvciByZWxvbGQsIFNNZ3JSZWxhdGlvbiBy ZWxuLCBGb3JrTnVtYmVyIGZvcmtudW0sIGJvb2wgaXNSZWRvLCBTbWdyQ2hhaW5JbmRleCBj aGFpbl9pbmRleCk7CitzdGF0aWMgYm9vbCBtZGV4aXN0cyhTTWdyUmVsYXRpb24gcmVsbiwg Rm9ya051bWJlciBmb3JrbnVtLCBTbWdyQ2hhaW5JbmRleCBjaGFpbl9pbmRleCk7CitzdGF0 aWMgdm9pZCBtZHVubGluayhSZWxGaWxlTG9jYXRvckJhY2tlbmQgcmxvY2F0b3IsIEZvcmtO dW1iZXIgZm9ya251bSwgYm9vbCBpc1JlZG8sIFNtZ3JDaGFpbkluZGV4IGNoYWluX2luZGV4 KTsKK3N0YXRpYyB2b2lkIG1kZXh0ZW5kKFNNZ3JSZWxhdGlvbiByZWxuLCBGb3JrTnVtYmVy IGZvcmtudW0sCisJCQkJCSBCbG9ja051bWJlciBibG9ja251bSwgY29uc3Qgdm9pZCAqYnVm ZmVyLCBib29sIHNraXBGc3luYywgU21nckNoYWluSW5kZXggY2hhaW5faW5kZXgpOworc3Rh dGljIHZvaWQgbWR6ZXJvZXh0ZW5kKFNNZ3JSZWxhdGlvbiByZWxuLCBGb3JrTnVtYmVyIGZv cmtudW0sCisJCQkJCQkgQmxvY2tOdW1iZXIgYmxvY2tudW0sIGludCBuYmxvY2tzLCBib29s IHNraXBGc3luYywgU21nckNoYWluSW5kZXggY2hhaW5faW5kZXgpOworc3RhdGljIGJvb2wg bWRwcmVmZXRjaChTTWdyUmVsYXRpb24gcmVsbiwgRm9ya051bWJlciBmb3JrbnVtLAorCQkJ CQkgICBCbG9ja051bWJlciBibG9ja251bSwgaW50IG5ibG9ja3MsIFNtZ3JDaGFpbkluZGV4 IGNoYWluX2luZGV4KTsKK3N0YXRpYyB1aW50MzIgbWRtYXhjb21iaW5lKFNNZ3JSZWxhdGlv biByZWxuLCBGb3JrTnVtYmVyIGZvcmtudW0sCisJCQkJCQkgICBCbG9ja051bWJlciBibG9j a251bSwgU21nckNoYWluSW5kZXggY2hhaW5faW5kZXgpOworc3RhdGljIHZvaWQgbWRyZWFk dihTTWdyUmVsYXRpb24gcmVsbiwgRm9ya051bWJlciBmb3JrbnVtLCBCbG9ja051bWJlciBi bG9ja251bSwKKwkJCQkJdm9pZCAqKmJ1ZmZlcnMsIEJsb2NrTnVtYmVyIG5ibG9ja3MsIFNt Z3JDaGFpbkluZGV4IGNoYWluX2luZGV4KTsKK3N0YXRpYyB2b2lkIG1kd3JpdGV2KFNNZ3JS ZWxhdGlvbiByZWxuLCBGb3JrTnVtYmVyIGZvcmtudW0sCisJCQkJCSBCbG9ja051bWJlciBi bG9ja251bSwKKwkJCQkJIGNvbnN0IHZvaWQgKipidWZmZXJzLCBCbG9ja051bWJlciBuYmxv Y2tzLCBib29sIHNraXBGc3luYywgU21nckNoYWluSW5kZXggY2hhaW5faW5kZXgpOworc3Rh dGljIHZvaWQgbWR3cml0ZWJhY2soU01nclJlbGF0aW9uIHJlbG4sIEZvcmtOdW1iZXIgZm9y a251bSwKKwkJCQkJCUJsb2NrTnVtYmVyIGJsb2NrbnVtLCBCbG9ja051bWJlciBuYmxvY2tz LCBTbWdyQ2hhaW5JbmRleCBjaGFpbl9pbmRleCk7CitzdGF0aWMgQmxvY2tOdW1iZXIgbWRu YmxvY2tzKFNNZ3JSZWxhdGlvbiByZWxuLCBGb3JrTnVtYmVyIGZvcmtudW0sIFNtZ3JDaGFp bkluZGV4IGNoYWluX2luZGV4KTsKK3N0YXRpYyB2b2lkIG1kdHJ1bmNhdGUoU01nclJlbGF0 aW9uIHJlbG4sIEZvcmtOdW1iZXIgZm9ya251bSwKKwkJCQkJICAgQmxvY2tOdW1iZXIgb2xk X2Jsb2NrcywgQmxvY2tOdW1iZXIgbmJsb2NrcywgU21nckNoYWluSW5kZXggY2hhaW5faW5k ZXgpOworc3RhdGljIHZvaWQgbWRpbW1lZHN5bmMoU01nclJlbGF0aW9uIHJlbG4sIEZvcmtO dW1iZXIgZm9ya251bSwgU21nckNoYWluSW5kZXggY2hhaW5faW5kZXgpOworc3RhdGljIHZv aWQgbWRyZWdpc3RlcnN5bmMoU01nclJlbGF0aW9uIHJlbG4sIEZvcmtOdW1iZXIgZm9ya251 bSwgU21nckNoYWluSW5kZXggY2hhaW5faW5kZXgpOwogCiAvKgogICogRml4ZWQtbGVuZ3Ro IHN0cmluZyB0byByZXByZXNlbnQgcGF0aHMgdG8gZmlsZXMgdGhhdCBuZWVkIHRvIGJlIGJ1 aWx0IGJ5CkBAIC0xNTEsNiArMTc4LDcgQEAgbWRzbWdyX3JlZ2lzdGVyKHZvaWQpCiAJLyog bWFnbmV0aWMgZGlzayAqLwogCWZfc21ncgkJbWRfc21nciA9IChmX3NtZ3IpIHsKIAkJLm5h bWUgPSAibWQiLAorCQkuY2hhaW5fcG9zaXRpb24gPSBTTUdSX0NIQUlOX1RBSUwsCiAJCS5z bWdyX2luaXQgPSBtZGluaXQsCiAJCS5zbWdyX3NodXRkb3duID0gTlVMTCwKIAkJLnNtZ3Jf b3BlbiA9IG1kb3BlbiwKQEAgLTIxMCw3ICsyMzgsNyBAQCBfbWRmZF9vcGVuX2ZsYWdzKHZv aWQpCiAvKgogICogbWRpbml0KCkgLS0gSW5pdGlhbGl6ZSBwcml2YXRlIHN0YXRlIGZvciBt YWduZXRpYyBkaXNrIHN0b3JhZ2UgbWFuYWdlci4KICAqLwotdm9pZAorc3RhdGljIHZvaWQK IG1kaW5pdCh2b2lkKQogewogCU1kQ3h0ID0gQWxsb2NTZXRDb250ZXh0Q3JlYXRlKFRvcE1l bW9yeUNvbnRleHQsCkBAIC0yMjMsOCArMjUxLDggQEAgbWRpbml0KHZvaWQpCiAgKgogICog Tm90ZTogdGhpcyB3aWxsIHJldHVybiB0cnVlIGZvciBsaW5nZXJpbmcgZmlsZXMsIHdpdGgg cGVuZGluZyBkZWxldGlvbnMKICAqLwotYm9vbAotbWRleGlzdHMoU01nclJlbGF0aW9uIHJl bG4sIEZvcmtOdW1iZXIgZm9ya251bSkKK3N0YXRpYyBib29sCittZGV4aXN0cyhTTWdyUmVs YXRpb24gcmVsbiwgRm9ya051bWJlciBmb3JrbnVtLCBTbWdyQ2hhaW5JbmRleCBjaGFpbl9p bmRleCkKIHsKIAlNZFNNZ3JSZWxhdGlvbiBtZHJlbG4gPSAoTWRTTWdyUmVsYXRpb24pIHJl bG47CiAKQEAgLTIzNCw3ICsyNjIsNyBAQCBtZGV4aXN0cyhTTWdyUmVsYXRpb24gcmVsbiwg Rm9ya051bWJlciBmb3JrbnVtKQogCSAqIHdoaWNoIGFscmVhZHkgY2xvc2VzIHJlbGF0aW9u cyB3aGVuIGRyb3BwaW5nIHRoZW0uCiAJICovCiAJaWYgKCFJblJlY292ZXJ5KQotCQltZGNs b3NlKHJlbG4sIGZvcmtudW0pOworCQltZGNsb3NlKHJlbG4sIGZvcmtudW0sIDApOwogCiAJ cmV0dXJuIChtZG9wZW5mb3JrKG1kcmVsbiwgZm9ya251bSwgRVhURU5TSU9OX1JFVFVSTl9O VUxMKSAhPSBOVUxMKTsKIH0KQEAgLTI0NCw4ICsyNzIsOCBAQCBtZGV4aXN0cyhTTWdyUmVs YXRpb24gcmVsbiwgRm9ya051bWJlciBmb3JrbnVtKQogICoKICAqIElmIGlzUmVkbyBpcyB0 cnVlLCBpdCdzIG9rYXkgZm9yIHRoZSByZWxhdGlvbiB0byBleGlzdCBhbHJlYWR5LgogICov Ci12b2lkCi1tZGNyZWF0ZShSZWxGaWxlTG9jYXRvciAvKiByZWxuICovLCBTTWdyUmVsYXRp b24gcmVsbiwgRm9ya051bWJlciBmb3JrbnVtLCBib29sIGlzUmVkbykKK3N0YXRpYyB2b2lk CittZGNyZWF0ZShSZWxGaWxlTG9jYXRvciByZWxvbGQsIFNNZ3JSZWxhdGlvbiByZWxuLCBG b3JrTnVtYmVyIGZvcmtudW0sIGJvb2wgaXNSZWRvLCBTbWdyQ2hhaW5JbmRleCBjaGFpbl9p bmRleCkKIHsKIAlNZFNNZ3JSZWxhdGlvbiBtZHJlbG4gPSAoTWRTTWdyUmVsYXRpb24pIHJl bG47CiAJTWRmZFZlYyAgICAqbWRmZDsKQEAgLTM2MCw4ICszODgsOCBAQCBtZGNyZWF0ZShS ZWxGaWxlTG9jYXRvciAvKiByZWxuICovLCBTTWdyUmVsYXRpb24gcmVsbiwgRm9ya051bWJl ciBmb3JrbnVtLCBib29sCiAgKiBOb3RlOiBhbnkgZmFpbHVyZSBzaG91bGQgYmUgcmVwb3J0 ZWQgYXMgV0FSTklORyBub3QgRVJST1IsIGJlY2F1c2UKICAqIHdlIGFyZSB1c3VhbGx5IG5v dCBpbiBhIHRyYW5zYWN0aW9uIGFueW1vcmUgd2hlbiB0aGlzIGlzIGNhbGxlZC4KICAqLwot dm9pZAotbWR1bmxpbmsoUmVsRmlsZUxvY2F0b3JCYWNrZW5kIHJsb2NhdG9yLCBGb3JrTnVt YmVyIGZvcmtudW0sIGJvb2wgaXNSZWRvKQorc3RhdGljIHZvaWQKK21kdW5saW5rKFJlbEZp bGVMb2NhdG9yQmFja2VuZCBybG9jYXRvciwgRm9ya051bWJlciBmb3JrbnVtLCBib29sIGlz UmVkbywgU21nckNoYWluSW5kZXggY2hhaW5faW5kZXgpCiB7CiAJLyogTm93IGRvIHRoZSBw ZXItZm9yayB3b3JrICovCiAJaWYgKGZvcmtudW0gPT0gSW52YWxpZEZvcmtOdW1iZXIpCkBA IC01MTAsOSArNTM4LDkgQEAgbWR1bmxpbmtmb3JrKFJlbEZpbGVMb2NhdG9yQmFja2VuZCBy bG9jYXRvciwgRm9ya051bWJlciBmb3JrbnVtLCBib29sIGlzUmVkbykKICAqIEVPRikuICBO b3RlIHRoYXQgd2UgYXNzdW1lIHdyaXRpbmcgYSBibG9jayBiZXlvbmQgY3VycmVudCBFT0YK ICAqIGNhdXNlcyBpbnRlcnZlbmluZyBmaWxlIHNwYWNlIHRvIGJlY29tZSBmaWxsZWQgd2l0 aCB6ZXJvZXMuCiAgKi8KLXZvaWQKK3N0YXRpYyB2b2lkCiBtZGV4dGVuZChTTWdyUmVsYXRp b24gcmVsbiwgRm9ya051bWJlciBmb3JrbnVtLCBCbG9ja051bWJlciBibG9ja251bSwKLQkJ IGNvbnN0IHZvaWQgKmJ1ZmZlciwgYm9vbCBza2lwRnN5bmMpCisJCSBjb25zdCB2b2lkICpi dWZmZXIsIGJvb2wgc2tpcEZzeW5jLCBTbWdyQ2hhaW5JbmRleCBjaGFpbl9pbmRleCkKIHsK IAlNZFNNZ3JSZWxhdGlvbiBtZHJlbG4gPSAoTWRTTWdyUmVsYXRpb24pIHJlbG47CiAJb2Zm X3QJCXNlZWtwb3M7CkBAIC01NzYsOSArNjA0LDkgQEAgbWRleHRlbmQoU01nclJlbGF0aW9u IHJlbG4sIEZvcmtOdW1iZXIgZm9ya251bSwgQmxvY2tOdW1iZXIgYmxvY2tudW0sCiAgKiBT aW1pbGFyIHRvIG1kZXh0ZW5kKCksIGV4Y2VwdCB0aGUgcmVsYXRpb24gY2FuIGJlIGV4dGVu ZGVkIGJ5IG11bHRpcGxlCiAgKiBibG9ja3MgYXQgb25jZSBhbmQgdGhlIGFkZGVkIGJsb2Nr cyB3aWxsIGJlIGZpbGxlZCB3aXRoIHplcm9lcy4KICAqLwotdm9pZAorc3RhdGljIHZvaWQK IG1kemVyb2V4dGVuZChTTWdyUmVsYXRpb24gcmVsbiwgRm9ya051bWJlciBmb3JrbnVtLAot CQkJIEJsb2NrTnVtYmVyIGJsb2NrbnVtLCBpbnQgbmJsb2NrcywgYm9vbCBza2lwRnN5bmMp CisJCQkgQmxvY2tOdW1iZXIgYmxvY2tudW0sIGludCBuYmxvY2tzLCBib29sIHNraXBGc3lu YywgU21nckNoYWluSW5kZXggY2hhaW5faW5kZXgpCiB7CiAJTWRTTWdyUmVsYXRpb24gbWRy ZWxuID0gKE1kU01nclJlbGF0aW9uKSByZWxuOwogCU1kZmRWZWMgICAgKnY7CkBAIC03Mjcs OCArNzU1LDggQEAgbWRvcGVuZm9yayhNZFNNZ3JSZWxhdGlvbiByZWxuLCBGb3JrTnVtYmVy IGZvcmtudW0sIGludCBiZWhhdmlvcikKIC8qCiAgKiBtZG9wZW4oKSAtLSBJbml0aWFsaXpl IG5ld2x5LW9wZW5lZCByZWxhdGlvbi4KICAqLwotdm9pZAotbWRvcGVuKFNNZ3JSZWxhdGlv biByZWxuKQorc3RhdGljIHZvaWQKK21kb3BlbihTTWdyUmVsYXRpb24gcmVsbiwgU21nckNo YWluSW5kZXggY2hhaW5faW5kZXgpCiB7CiAJTWRTTWdyUmVsYXRpb24gbWRyZWxuID0gKE1k U01nclJlbGF0aW9uKSByZWxuOwogCkBAIC03NDAsOCArNzY4LDggQEAgbWRvcGVuKFNNZ3JS ZWxhdGlvbiByZWxuKQogLyoKICAqIG1kY2xvc2UoKSAtLSBDbG9zZSB0aGUgc3BlY2lmaWVk IHJlbGF0aW9uLCBpZiBpdCBpc24ndCBjbG9zZWQgYWxyZWFkeS4KICAqLwotdm9pZAotbWRj bG9zZShTTWdyUmVsYXRpb24gcmVsbiwgRm9ya051bWJlciBmb3JrbnVtKQorc3RhdGljIHZv aWQKK21kY2xvc2UoU01nclJlbGF0aW9uIHJlbG4sIEZvcmtOdW1iZXIgZm9ya251bSwgU21n ckNoYWluSW5kZXggY2hhaW5faW5kZXgpCiB7CiAJTWRTTWdyUmVsYXRpb24gbWRyZWxuID0g KE1kU01nclJlbGF0aW9uKSByZWxuOwogCWludAkJCW5vcGVuc2VncyA9IG1kcmVsbi0+bWRf bnVtX29wZW5fc2Vnc1tmb3JrbnVtXTsKQEAgLTc2NCw5ICs3OTIsOSBAQCBtZGNsb3NlKFNN Z3JSZWxhdGlvbiByZWxuLCBGb3JrTnVtYmVyIGZvcmtudW0pCiAvKgogICogbWRwcmVmZXRj aCgpIC0tIEluaXRpYXRlIGFzeW5jaHJvbm91cyByZWFkIG9mIHRoZSBzcGVjaWZpZWQgYmxv Y2tzIG9mIGEgcmVsYXRpb24KICAqLwotYm9vbAorc3RhdGljIGJvb2wKIG1kcHJlZmV0Y2go U01nclJlbGF0aW9uIHJlbG4sIEZvcmtOdW1iZXIgZm9ya251bSwgQmxvY2tOdW1iZXIgYmxv Y2tudW0sCi0JCSAgIGludCBuYmxvY2tzKQorCQkgICBpbnQgbmJsb2NrcywgU21nckNoYWlu SW5kZXggY2hhaW5faW5kZXgpCiB7CiAjaWZkZWYgVVNFX1BSRUZFVENICiAJTWRTTWdyUmVs YXRpb24gbWRyZWxuID0gKE1kU01nclJlbGF0aW9uKSByZWxuOwpAQCAtODYyLDkgKzg5MCw5 IEBAIGJ1ZmZlcnNfdG9faW92ZWMoc3RydWN0IGlvdmVjICppb3YsIHZvaWQgKipidWZmZXJz LCBpbnQgbmJsb2NrcykKICAqIG1kbWF4Y29tYmluZSgpIC0tIFJldHVybiB0aGUgbWF4aW11 bSBudW1iZXIgb2YgdG90YWwgYmxvY2tzIHRoYXQgY2FuIGJlCiAgKgkJCQkgY29tYmluZWQg d2l0aCBhbiBJTyBzdGFydGluZyBhdCBibG9ja251bS4KICAqLwotdWludDMyCitzdGF0aWMg dWludDMyCiBtZG1heGNvbWJpbmUoU01nclJlbGF0aW9uIHJlbG4sIEZvcmtOdW1iZXIgZm9y a251bSwKLQkJCSBCbG9ja051bWJlciBibG9ja251bSkKKwkJCSBCbG9ja051bWJlciBibG9j a251bSwgU21nckNoYWluSW5kZXggaW5kZXgpCiB7CiAJQmxvY2tOdW1iZXIgc2Vnb2ZmOwog CkBAIC04NzYsOSArOTA0LDkgQEAgbWRtYXhjb21iaW5lKFNNZ3JSZWxhdGlvbiByZWxuLCBG b3JrTnVtYmVyIGZvcmtudW0sCiAvKgogICogbWRyZWFkdigpIC0tIFJlYWQgdGhlIHNwZWNp ZmllZCBibG9ja3MgZnJvbSBhIHJlbGF0aW9uLgogICovCi12b2lkCitzdGF0aWMgdm9pZAog bWRyZWFkdihTTWdyUmVsYXRpb24gcmVsbiwgRm9ya051bWJlciBmb3JrbnVtLCBCbG9ja051 bWJlciBibG9ja251bSwKLQkJdm9pZCAqKmJ1ZmZlcnMsIEJsb2NrTnVtYmVyIG5ibG9ja3Mp CisJCXZvaWQgKipidWZmZXJzLCBCbG9ja051bWJlciBuYmxvY2tzLCBTbWdyQ2hhaW5JbmRl eCBjaGFpbl9pbmRleCkKIHsKIAlNZFNNZ3JSZWxhdGlvbiBtZHJlbG4gPSAoTWRTTWdyUmVs YXRpb24pIHJlbG47CiAKQEAgLTk5OSw5ICsxMDI3LDkgQEAgbWRyZWFkdihTTWdyUmVsYXRp b24gcmVsbiwgRm9ya051bWJlciBmb3JrbnVtLCBCbG9ja051bWJlciBibG9ja251bSwKICAq IHJlbGF0aW9uIChpZSwgdGhvc2UgYmVmb3JlIHRoZSBjdXJyZW50IEVPRikuICBUbyBleHRl bmQgYSByZWxhdGlvbiwKICAqIHVzZSBtZGV4dGVuZCgpLgogICovCi12b2lkCitzdGF0aWMg dm9pZAogbWR3cml0ZXYoU01nclJlbGF0aW9uIHJlbG4sIEZvcmtOdW1iZXIgZm9ya251bSwg QmxvY2tOdW1iZXIgYmxvY2tudW0sCi0JCSBjb25zdCB2b2lkICoqYnVmZmVycywgQmxvY2tO dW1iZXIgbmJsb2NrcywgYm9vbCBza2lwRnN5bmMpCisJCSBjb25zdCB2b2lkICoqYnVmZmVy cywgQmxvY2tOdW1iZXIgbmJsb2NrcywgYm9vbCBza2lwRnN5bmMsIFNtZ3JDaGFpbkluZGV4 IGNoYWluX2luZGV4KQogewogCU1kU01nclJlbGF0aW9uIG1kcmVsbiA9IChNZFNNZ3JSZWxh dGlvbikgcmVsbjsKIApAQCAtMTEwNiw5ICsxMTM0LDkgQEAgbWR3cml0ZXYoU01nclJlbGF0 aW9uIHJlbG4sIEZvcmtOdW1iZXIgZm9ya251bSwgQmxvY2tOdW1iZXIgYmxvY2tudW0sCiAg KiBUaGlzIGFjY2VwdHMgYSByYW5nZSBvZiBibG9ja3MgYmVjYXVzZSBmbHVzaGluZyBzZXZl cmFsIHBhZ2VzIGF0IG9uY2UgaXMKICAqIGNvbnNpZGVyYWJseSBtb3JlIGVmZmljaWVudCB0 aGFuIGRvaW5nIHNvIGluZGl2aWR1YWxseS4KICAqLwotdm9pZAorc3RhdGljIHZvaWQKIG1k d3JpdGViYWNrKFNNZ3JSZWxhdGlvbiByZWxuLCBGb3JrTnVtYmVyIGZvcmtudW0sCi0JCQlC bG9ja051bWJlciBibG9ja251bSwgQmxvY2tOdW1iZXIgbmJsb2NrcykKKwkJCUJsb2NrTnVt YmVyIGJsb2NrbnVtLCBCbG9ja051bWJlciBuYmxvY2tzLCBTbWdyQ2hhaW5JbmRleCBjaGFp bl9pbmRleCkKIHsKIAlNZFNNZ3JSZWxhdGlvbiBtZHJlbG4gPSAoTWRTTWdyUmVsYXRpb24p IHJlbG47CiAKQEAgLTExNjcsOCArMTE5NSw4IEBAIG1kd3JpdGViYWNrKFNNZ3JSZWxhdGlv biByZWxuLCBGb3JrTnVtYmVyIGZvcmtudW0sCiAgKiBjYWxsZWQsIHRoZW4gb25seSBzZWdt ZW50cyB1cCB0byB0aGUgbGFzdCBvbmUgYWN0dWFsbHkgdG91Y2hlZAogICogYXJlIHByZXNl bnQgaW4gdGhlIGFycmF5LgogICovCi1CbG9ja051bWJlcgotbWRuYmxvY2tzKFNNZ3JSZWxh dGlvbiByZWxuLCBGb3JrTnVtYmVyIGZvcmtudW0pCitzdGF0aWMgQmxvY2tOdW1iZXIKK21k bmJsb2NrcyhTTWdyUmVsYXRpb24gcmVsbiwgRm9ya051bWJlciBmb3JrbnVtLCBTbWdyQ2hh aW5JbmRleCBjaGFpbl9pbmRleCkKIHsKIAlNZFNNZ3JSZWxhdGlvbiBtZHJlbG4gPSAoTWRT TWdyUmVsYXRpb24pIHJlbG47CiAJTWRmZFZlYyAgICAqdjsKQEAgLTEyMzIsOSArMTI2MCw5 IEBAIG1kbmJsb2NrcyhTTWdyUmVsYXRpb24gcmVsbiwgRm9ya051bWJlciBmb3JrbnVtKQog ICogc3VyZSB3ZSBoYXZlIG9wZW5lZCBhbGwgYWN0aXZlIHNlZ21lbnRzLCBzbyB0aGF0IHRy dW5jYXRlIGxvb3Agd2lsbCBnZXQKICAqIHRoZW0gYWxsIQogICovCi12b2lkCitzdGF0aWMg dm9pZAogbWR0cnVuY2F0ZShTTWdyUmVsYXRpb24gcmVsbiwgRm9ya051bWJlciBmb3JrbnVt LAotCQkgICBCbG9ja051bWJlciBjdXJuYmxrLCBCbG9ja051bWJlciBuYmxvY2tzKQorCQkg ICBCbG9ja051bWJlciBjdXJuYmxrLCBCbG9ja051bWJlciBuYmxvY2tzLCBTbWdyQ2hhaW5J bmRleCBjaGFpbl9pbmRleCkKIHsKIAlNZFNNZ3JSZWxhdGlvbiBtZHJlbG4gPSAoTWRTTWdy UmVsYXRpb24pIHJlbG47CiAJQmxvY2tOdW1iZXIgcHJpb3JibG9ja3M7CkBAIC0xMzIyLDgg KzEzNTAsOCBAQCBtZHRydW5jYXRlKFNNZ3JSZWxhdGlvbiByZWxuLCBGb3JrTnVtYmVyIGZv cmtudW0sCiAvKgogICogbWRyZWdpc3RlcnN5bmMoKSAtLSBNYXJrIHdob2xlIHJlbGF0aW9u IGFzIG5lZWRpbmcgZnN5bmMKICAqLwotdm9pZAotbWRyZWdpc3RlcnN5bmMoU01nclJlbGF0 aW9uIHJlbG4sIEZvcmtOdW1iZXIgZm9ya251bSkKK3N0YXRpYyB2b2lkCittZHJlZ2lzdGVy c3luYyhTTWdyUmVsYXRpb24gcmVsbiwgRm9ya051bWJlciBmb3JrbnVtLCBTbWdyQ2hhaW5J bmRleCBjaGFpbl9pbmRleCkKIHsKIAlNZFNNZ3JSZWxhdGlvbiBtZHJlbG4gPSAoTWRTTWdy UmVsYXRpb24pIHJlbG47CiAJaW50CQkJc2Vnbm87CkBAIC0xMzMzLDcgKzEzNjEsNyBAQCBt ZHJlZ2lzdGVyc3luYyhTTWdyUmVsYXRpb24gcmVsbiwgRm9ya051bWJlciBmb3JrbnVtKQog CSAqIE5PVEU6IG1kbmJsb2NrcyBtYWtlcyBzdXJlIHdlIGhhdmUgb3BlbmVkIGFsbCBhY3Rp dmUgc2VnbWVudHMsIHNvIHRoYXQKIAkgKiB0aGUgbG9vcCBiZWxvdyB3aWxsIGdldCB0aGVt IGFsbCEKIAkgKi8KLQltZG5ibG9ja3MocmVsbiwgZm9ya251bSk7CisJbWRuYmxvY2tzKHJl bG4sIGZvcmtudW0sIDApOwogCiAJbWluX2luYWN0aXZlX3NlZyA9IHNlZ25vID0gbWRyZWxu LT5tZF9udW1fb3Blbl9zZWdzW2ZvcmtudW1dOwogCkBAIC0xMzc0LDggKzE0MDIsOCBAQCBt ZHJlZ2lzdGVyc3luYyhTTWdyUmVsYXRpb24gcmVsbiwgRm9ya051bWJlciBmb3JrbnVtKQog ICogY3Jhc2ggYmVmb3JlIHRoZSBuZXh0IGNoZWNrcG9pbnQgc3luY3MgdGhlIG5ld2x5LWlu YWN0aXZlIHNlZ21lbnQsIHRoYXQKICAqIHNlZ21lbnQgbWF5IHN1cnZpdmUgcmVjb3Zlcnks IHJlaW50cm9kdWNpbmcgdW53YW50ZWQgZGF0YSBpbnRvIHRoZSB0YWJsZS4KICAqLwotdm9p ZAotbWRpbW1lZHN5bmMoU01nclJlbGF0aW9uIHJlbG4sIEZvcmtOdW1iZXIgZm9ya251bSkK K3N0YXRpYyB2b2lkCittZGltbWVkc3luYyhTTWdyUmVsYXRpb24gcmVsbiwgRm9ya051bWJl ciBmb3JrbnVtLCBTbWdyQ2hhaW5JbmRleCBjaGFpbl9pbmRleCkKIHsKIAlNZFNNZ3JSZWxh dGlvbiBtZHJlbG4gPSAoTWRTTWdyUmVsYXRpb24pIHJlbG47CiAJaW50CQkJc2Vnbm87CkBA IC0xMzg1LDcgKzE0MTMsNyBAQCBtZGltbWVkc3luYyhTTWdyUmVsYXRpb24gcmVsbiwgRm9y a051bWJlciBmb3JrbnVtKQogCSAqIE5PVEU6IG1kbmJsb2NrcyBtYWtlcyBzdXJlIHdlIGhh dmUgb3BlbmVkIGFsbCBhY3RpdmUgc2VnbWVudHMsIHNvIHRoYXQKIAkgKiB0aGUgbG9vcCBi ZWxvdyB3aWxsIGdldCB0aGVtIGFsbCEKIAkgKi8KLQltZG5ibG9ja3MocmVsbiwgZm9ya251 bSk7CisJbWRuYmxvY2tzKHJlbG4sIGZvcmtudW0sIDApOwogCiAJbWluX2luYWN0aXZlX3Nl ZyA9IHNlZ25vID0gbWRyZWxuLT5tZF9udW1fb3Blbl9zZWdzW2ZvcmtudW1dOwogCkBAIC0x NzUwLDcgKzE3NzgsNyBAQCBfbWRmZF9nZXRzZWcoTWRTTWdyUmVsYXRpb24gcmVsbiwgRm9y a051bWJlciBmb3JrbnVtLCBCbG9ja051bWJlciBibGtubywKIAogCQkJCW1kZXh0ZW5kKChT TWdyUmVsYXRpb24pIHJlbG4sIGZvcmtudW0sCiAJCQkJCQkgbmV4dHNlZ25vICogKChCbG9j a051bWJlcikgUkVMU0VHX1NJWkUpIC0gMSwKLQkJCQkJCSB6ZXJvYnVmLCBza2lwRnN5bmMp OworCQkJCQkJIHplcm9idWYsIHNraXBGc3luYywgMCk7CiAJCQkJcGZyZWUoemVyb2J1Zik7 CiAJCQl9CiAJCQlmbGFncyA9IE9fQ1JFQVQ7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9z dG9yYWdlL3NtZ3Ivc21nci5jIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9zbWdyL3NtZ3IuYwpp bmRleCAwNDk4ZmQ2YzMxNy4uMDg4OTI1NjM3NjggMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5k L3N0b3JhZ2Uvc21nci9zbWdyLmMKKysrIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9zbWdyL3Nt Z3IuYwpAQCAtNjMsMTMgKzYzLDEzIEBACiAjaW5jbHVkZSAidXRpbHMvaW52YWwuaCIKICNp bmNsdWRlICJ1dGlscy9tZW11dGlscy5oIgogCi1zdGF0aWMgZl9zbWdyICpzbWdyc3c7Citm X3NtZ3IJICAgKnNtZ3JzdzsKIAogc3RhdGljIGludAlOU21nciA9IDA7CiAKIHN0YXRpYyBT aXplIExhcmdlc3RTTWdyUmVsYXRpb25TaXplID0gMDsKIAotU01ncklkCQlzdG9yYWdlX21h bmFnZXJfaWQ7CitTTWdyQ2hhaW4Jc3RvcmFnZV9tYW5hZ2VyX2NoYWluOwogCiAvKgogICog RWFjaCBiYWNrZW5kIGhhcyBhIGhhc2h0YWJsZSB0aGF0IHN0b3JlcyBhbGwgZXh0YW50IFNN Z3JSZWxhdGlvbiBvYmplY3RzLgpAQCAtOTgsMjAgKzk4LDIzIEBAIHNtZ3JfcmVnaXN0ZXIo Y29uc3QgZl9zbWdyICpzbWdyLCBTaXplIHNtZ3JyZWxhdGlvbl9zaXplKQogCWlmIChzbWdy LT5uYW1lID09IE5VTEwgfHwgKnNtZ3ItPm5hbWUgPT0gMCkKIAkJZWxvZyhGQVRBTCwgInNt Z3IgcmVnaXN0ZXJlZCB3aXRoIGludmFsaWQgbmFtZSIpOwogCi0JQXNzZXJ0KHNtZ3ItPnNt Z3Jfb3BlbiAhPSBOVUxMKTsKLQlBc3NlcnQoc21nci0+c21ncl9jbG9zZSAhPSBOVUxMKTsK LQlBc3NlcnQoc21nci0+c21ncl9jcmVhdGUgIT0gTlVMTCk7Ci0JQXNzZXJ0KHNtZ3ItPnNt Z3JfZXhpc3RzICE9IE5VTEwpOwotCUFzc2VydChzbWdyLT5zbWdyX3VubGluayAhPSBOVUxM KTsKLQlBc3NlcnQoc21nci0+c21ncl9leHRlbmQgIT0gTlVMTCk7Ci0JQXNzZXJ0KHNtZ3It PnNtZ3JfemVyb2V4dGVuZCAhPSBOVUxMKTsKLQlBc3NlcnQoc21nci0+c21ncl9wcmVmZXRj aCAhPSBOVUxMKTsKLQlBc3NlcnQoc21nci0+c21ncl9yZWFkdiAhPSBOVUxMKTsKLQlBc3Nl cnQoc21nci0+c21ncl93cml0ZXYgIT0gTlVMTCk7Ci0JQXNzZXJ0KHNtZ3ItPnNtZ3Jfd3Jp dGViYWNrICE9IE5VTEwpOwotCUFzc2VydChzbWdyLT5zbWdyX25ibG9ja3MgIT0gTlVMTCk7 Ci0JQXNzZXJ0KHNtZ3ItPnNtZ3JfdHJ1bmNhdGUgIT0gTlVMTCk7Ci0JQXNzZXJ0KHNtZ3It PnNtZ3JfaW1tZWRzeW5jICE9IE5VTEwpOworCWlmIChzbWdyLT5jaGFpbl9wb3NpdGlvbiA9 PSBTTUdSX0NIQUlOX1RBSUwpCisJeworCQlBc3NlcnQoc21nci0+c21ncl9vcGVuICE9IE5V TEwpOworCQlBc3NlcnQoc21nci0+c21ncl9jbG9zZSAhPSBOVUxMKTsKKwkJQXNzZXJ0KHNt Z3ItPnNtZ3JfY3JlYXRlICE9IE5VTEwpOworCQlBc3NlcnQoc21nci0+c21ncl9leGlzdHMg IT0gTlVMTCk7CisJCUFzc2VydChzbWdyLT5zbWdyX3VubGluayAhPSBOVUxMKTsKKwkJQXNz ZXJ0KHNtZ3ItPnNtZ3JfZXh0ZW5kICE9IE5VTEwpOworCQlBc3NlcnQoc21nci0+c21ncl96 ZXJvZXh0ZW5kICE9IE5VTEwpOworCQlBc3NlcnQoc21nci0+c21ncl9wcmVmZXRjaCAhPSBO VUxMKTsKKwkJQXNzZXJ0KHNtZ3ItPnNtZ3JfcmVhZHYgIT0gTlVMTCk7CisJCUFzc2VydChz bWdyLT5zbWdyX3dyaXRldiAhPSBOVUxMKTsKKwkJQXNzZXJ0KHNtZ3ItPnNtZ3Jfd3JpdGVi YWNrICE9IE5VTEwpOworCQlBc3NlcnQoc21nci0+c21ncl9uYmxvY2tzICE9IE5VTEwpOwor CQlBc3NlcnQoc21nci0+c21ncl90cnVuY2F0ZSAhPSBOVUxMKTsKKwkJQXNzZXJ0KHNtZ3It PnNtZ3JfaW1tZWRzeW5jICE9IE5VTEwpOworCX0KIAogCW9sZCA9IE1lbW9yeUNvbnRleHRT d2l0Y2hUbyhUb3BNZW1vcnlDb250ZXh0KTsKIApAQCAtMTM4LDYgKzE0MSwxNyBAQCBzbWdy X3JlZ2lzdGVyKGNvbnN0IGZfc21nciAqc21nciwgU2l6ZSBzbWdycmVsYXRpb25fc2l6ZSkK IAlyZXR1cm4gbXlfaWQ7CiB9CiAKK1NNZ3JJZAorc21ncl9sb29rdXAoY29uc3QgY2hhciAq bmFtZSkKK3sKKwlmb3IgKGludCBpID0gMDsgaSA8IE5TbWdyOyBpKyspCisJeworCQlpZiAo c3RyY21wKHNtZ3Jzd1tpXS5uYW1lLCBuYW1lKSA9PSAwKQorCQkJcmV0dXJuIGk7CisJfQor CWVsb2coRkFUQUwsICJTdG9yYWdlIG1hbmFnZXIgbm90IGZvdW5kIHdpdGggbmFtZTogJXMi LCBuYW1lKTsKK30KKwogLyoKICAqIHNtZ3Jpbml0KCksIHNtZ3JzaHV0ZG93bigpIC0tIElu aXRpYWxpemUgb3Igc2h1dCBkb3duIHN0b3JhZ2UKICAqCQkJCQkJCQkgbWFuYWdlcnMuCkBA IC0xNzYsNiArMTkwLDIyIEBAIHNtZ3JzaHV0ZG93bihpbnQgY29kZSwgRGF0dW0gYXJnKQog CX0KIH0KIAorI2RlZmluZSBTTUdSX0NIQUlOX0xPT0tVUChTTUdSX01FVEhPRCkgXAorCWRv IFwKKwl7IFwKKwkJd2hpbGUgKGNoYWluX2luZGV4IDwgcmVsbi0+c21ncl9jaGFpbi5zaXpl ICYmIHNtZ3Jzd1tyZWxuLT5zbWdyX2NoYWluLmNoYWluW2NoYWluX2luZGV4XV0uU01HUl9N RVRIT0QgPT0gTlVMTCkgXAorCQkJY2hhaW5faW5kZXgrKzsgXAorCQlBc3NlcnQoY2hhaW5f aW5kZXggPCByZWxuLT5zbWdyX2NoYWluLnNpemUpOyBcCisJfSB3aGlsZSAoMCkKKwordm9p ZAorc21ncl9vcGVuX25leHQoU01nclJlbGF0aW9uIHJlbG4sIFNtZ3JDaGFpbkluZGV4IGNo YWluX2luZGV4KQoreworCVNNR1JfQ0hBSU5fTE9PS1VQKHNtZ3Jfb3Blbik7CisKKwlzbWdy c3dbcmVsbi0+c21ncl9jaGFpbi5jaGFpbltjaGFpbl9pbmRleF1dLnNtZ3Jfb3BlbihyZWxu LCBjaGFpbl9pbmRleCk7Cit9CisKIC8qCiAgKiBzbWdyb3BlbigpIC0tIFJldHVybiBhbiBT TWdyUmVsYXRpb24gb2JqZWN0LCBjcmVhdGluZyBpdCBpZiBuZWVkIGJlLgogICoKQEAgLTIy OSwxMCArMjU5LDEwIEBAIHNtZ3JvcGVuKFJlbEZpbGVMb2NhdG9yIHJsb2NhdG9yLCBQcm9j TnVtYmVyIGJhY2tlbmQpCiAJCWZvciAoaW50IGkgPSAwOyBpIDw9IE1BWF9GT1JLTlVNOyAr K2kpCiAJCQlyZWxuLT5zbWdyX2NhY2hlZF9uYmxvY2tzW2ldID0gSW52YWxpZEJsb2NrTnVt YmVyOwogCi0JCXJlbG4tPnNtZ3Jfd2hpY2ggPSBzdG9yYWdlX21hbmFnZXJfaWQ7CisJCW1l bWNweSgmcmVsbi0+c21ncl9jaGFpbiwgJnN0b3JhZ2VfbWFuYWdlcl9jaGFpbiwgc2l6ZW9m KFNNZ3JDaGFpbikpOwogCiAJCS8qIGltcGxlbWVudGF0aW9uLXNwZWNpZmljIGluaXRpYWxp emF0aW9uICovCi0JCXNtZ3Jzd1tyZWxuLT5zbWdyX3doaWNoXS5zbWdyX29wZW4ocmVsbik7 CisJCXNtZ3Jfb3Blbl9uZXh0KHJlbG4sIDApOwogCiAJCS8qIGl0IGlzIG5vdCBwaW5uZWQg eWV0ICovCiAJCXJlbG4tPnBpbmNvdW50ID0gMDsKQEAgLTI3MCw2ICszMDAsMTQgQEAgc21n cnVucGluKFNNZ3JSZWxhdGlvbiByZWxuKQogCQlkbGlzdF9wdXNoX3RhaWwoJnVucGlubmVk X3JlbG5zLCAmcmVsbi0+bm9kZSk7CiB9CiAKK3ZvaWQKK3NtZ3JfY2xvc2VfbmV4dChTTWdy UmVsYXRpb24gcmVsbiwgRm9ya051bWJlciBmb3JrbnVtLCBTbWdyQ2hhaW5JbmRleCBjaGFp bl9pbmRleCkKK3sKKwlTTUdSX0NIQUlOX0xPT0tVUChzbWdyX2Nsb3NlKTsKKworCXNtZ3Jz d1tyZWxuLT5zbWdyX2NoYWluLmNoYWluW2NoYWluX2luZGV4XV0uc21ncl9jbG9zZShyZWxu LCBmb3JrbnVtLCBjaGFpbl9pbmRleCk7Cit9CisKIC8qCiAgKiBzbWdyZGVzdHJveSgpIC0t IERlbGV0ZSBhbiBTTWdyUmVsYXRpb24gb2JqZWN0LgogICovCkBAIC0yODEsNyArMzE5LDcg QEAgc21ncmRlc3Ryb3koU01nclJlbGF0aW9uIHJlbG4pCiAJQXNzZXJ0KHJlbG4tPnBpbmNv dW50ID09IDApOwogCiAJZm9yIChmb3JrbnVtID0gMDsgZm9ya251bSA8PSBNQVhfRk9SS05V TTsgZm9ya251bSsrKQotCQlzbWdyc3dbcmVsbi0+c21ncl93aGljaF0uc21ncl9jbG9zZShy ZWxuLCBmb3JrbnVtKTsKKwkJc21ncl9jbG9zZV9uZXh0KHJlbG4sIGZvcmtudW0sIDApOwog CiAJZGxpc3RfZGVsZXRlKCZyZWxuLT5ub2RlKTsKIApAQCAtMzAxLDcgKzMzOSw3IEBAIHNt Z3JyZWxlYXNlKFNNZ3JSZWxhdGlvbiByZWxuKQogewogCWZvciAoRm9ya051bWJlciBmb3Jr bnVtID0gMDsgZm9ya251bSA8PSBNQVhfRk9SS05VTTsgZm9ya251bSsrKQogCXsKLQkJc21n cnN3W3JlbG4tPnNtZ3Jfd2hpY2hdLnNtZ3JfY2xvc2UocmVsbiwgZm9ya251bSk7CisJCXNt Z3JfY2xvc2VfbmV4dChyZWxuLCBmb3JrbnVtLCAwKTsKIAkJcmVsbi0+c21ncl9jYWNoZWRf bmJsb2Nrc1tmb3JrbnVtXSA9IEludmFsaWRCbG9ja051bWJlcjsKIAl9CiAJcmVsbi0+c21n cl90YXJnYmxvY2sgPSBJbnZhbGlkQmxvY2tOdW1iZXI7CkBAIC0zOTEsMTMgKzQyOSwyOSBA QCBzbWdycmVsZWFzZXJlbGxvY2F0b3IoUmVsRmlsZUxvY2F0b3JCYWNrZW5kIHJsb2NhdG9y KQogCQlzbWdycmVsZWFzZShyZWxuKTsKIH0KIAorYm9vbAorc21ncl9leGlzdHNfbmV4dChT TWdyUmVsYXRpb24gcmVsbiwgRm9ya051bWJlciBmb3JrbnVtLCBTbWdyQ2hhaW5JbmRleCBj aGFpbl9pbmRleCkKK3sKKwlTTUdSX0NIQUlOX0xPT0tVUChzbWdyX2V4aXN0cyk7CisKKwly ZXR1cm4gc21ncnN3W3JlbG4tPnNtZ3JfY2hhaW4uY2hhaW5bY2hhaW5faW5kZXhdXS5zbWdy X2V4aXN0cyhyZWxuLCBmb3JrbnVtLCBjaGFpbl9pbmRleCk7Cit9CisKIC8qCiAgKiBzbWdy ZXhpc3RzKCkgLS0gRG9lcyB0aGUgdW5kZXJseWluZyBmaWxlIGZvciBhIGZvcmsgZXhpc3Q/ CiAgKi8KIGJvb2wKIHNtZ3JleGlzdHMoU01nclJlbGF0aW9uIHJlbG4sIEZvcmtOdW1iZXIg Zm9ya251bSkKIHsKLQlyZXR1cm4gc21ncnN3W3JlbG4tPnNtZ3Jfd2hpY2hdLnNtZ3JfZXhp c3RzKHJlbG4sIGZvcmtudW0pOworCXJldHVybiBzbWdyX2V4aXN0c19uZXh0KHJlbG4sIGZv cmtudW0sIDApOworfQorCit2b2lkCitzbWdyX2NyZWF0ZV9uZXh0KFJlbEZpbGVMb2NhdG9y IHJlbG9sZCwgU01nclJlbGF0aW9uIHJlbG4sIEZvcmtOdW1iZXIgZm9ya251bSwgYm9vbCBp c1JlZG8sIFNtZ3JDaGFpbkluZGV4IGNoYWluX2luZGV4KQoreworCVNNR1JfQ0hBSU5fTE9P S1VQKHNtZ3JfY3JlYXRlKTsKKworCXNtZ3Jzd1tyZWxuLT5zbWdyX2NoYWluLmNoYWluW2No YWluX2luZGV4XV0uc21ncl9jcmVhdGUocmVsb2xkLCByZWxuLCBmb3JrbnVtLCBpc1JlZG8s IGNoYWluX2luZGV4KTsKIH0KIAogLyoKQEAgLTQxMCw3ICs0NjQsMTUgQEAgc21ncmV4aXN0 cyhTTWdyUmVsYXRpb24gcmVsbiwgRm9ya051bWJlciBmb3JrbnVtKQogdm9pZAogc21ncmNy ZWF0ZShSZWxGaWxlTG9jYXRvciByZWxvbGQsIFNNZ3JSZWxhdGlvbiByZWxuLCBGb3JrTnVt YmVyIGZvcmtudW0sIGJvb2wgaXNSZWRvKQogewotCXNtZ3Jzd1tyZWxuLT5zbWdyX3doaWNo XS5zbWdyX2NyZWF0ZShyZWxvbGQsIHJlbG4sIGZvcmtudW0sIGlzUmVkbyk7CisJc21ncl9j cmVhdGVfbmV4dChyZWxvbGQsIHJlbG4sIGZvcmtudW0sIGlzUmVkbywgMCk7Cit9CisKK3Zv aWQKK3NtZ3JfaW1tZWRzeW5jX25leHQoU01nclJlbGF0aW9uIHJlbG4sIEZvcmtOdW1iZXIg Zm9ya251bSwgU21nckNoYWluSW5kZXggY2hhaW5faW5kZXgpCit7CisJU01HUl9DSEFJTl9M T09LVVAoc21ncl9pbW1lZHN5bmMpOworCisJc21ncnN3W3JlbG4tPnNtZ3JfY2hhaW4uY2hh aW5bY2hhaW5faW5kZXhdXS5zbWdyX2ltbWVkc3luYyhyZWxuLCBmb3JrbnVtLCBjaGFpbl9p bmRleCk7CiB9CiAKIC8qCkBAIC00MzgsMTYgKzUwMCwyMiBAQCBzbWdyZG9zeW5jYWxsKFNN Z3JSZWxhdGlvbiAqcmVscywgaW50IG5yZWxzKQogCSAqLwogCWZvciAoaSA9IDA7IGkgPCBu cmVsczsgaSsrKQogCXsKLQkJaW50CQkJd2hpY2ggPSByZWxzW2ldLT5zbWdyX3doaWNoOwot CiAJCWZvciAoZm9ya251bSA9IDA7IGZvcmtudW0gPD0gTUFYX0ZPUktOVU07IGZvcmtudW0r KykKIAkJewotCQkJaWYgKHNtZ3Jzd1t3aGljaF0uc21ncl9leGlzdHMocmVsc1tpXSwgZm9y a251bSkpCi0JCQkJc21ncnN3W3doaWNoXS5zbWdyX2ltbWVkc3luYyhyZWxzW2ldLCBmb3Jr bnVtKTsKKwkJCWlmIChzbWdyX2V4aXN0c19uZXh0KHJlbHNbaV0sIGZvcmtudW0sIDApKQor CQkJCXNtZ3JfaW1tZWRzeW5jX25leHQocmVsc1tpXSwgZm9ya251bSwgMCk7CiAJCX0KIAl9 CiB9CiAKK3ZvaWQKK3NtZ3JfdW5saW5rX25leHQoU01nclJlbGF0aW9uIHJlbG4sIFJlbEZp bGVMb2NhdG9yQmFja2VuZCBybG9jYXRvciwgRm9ya051bWJlciBmb3JrbnVtLCBib29sIGlz UmVkbywgU21nckNoYWluSW5kZXggY2hhaW5faW5kZXgpCit7CisJU01HUl9DSEFJTl9MT09L VVAoc21ncl91bmxpbmspOworCisJc21ncnN3W3JlbG4tPnNtZ3JfY2hhaW4uY2hhaW5bY2hh aW5faW5kZXhdXS5zbWdyX3VubGluayhybG9jYXRvciwgZm9ya251bSwgaXNSZWRvLCBjaGFp bl9pbmRleCk7Cit9CisKIC8qCiAgKiBzbWdyZG91bmxpbmthbGwoKSAtLSBJbW1lZGlhdGVs eSB1bmxpbmsgYWxsIGZvcmtzIG9mIGFsbCBnaXZlbiByZWxhdGlvbnMKICAqCkBAIC00ODIs MTMgKzU1MCwxMiBAQCBzbWdyZG91bmxpbmthbGwoU01nclJlbGF0aW9uICpyZWxzLCBpbnQg bnJlbHMsIGJvb2wgaXNSZWRvKQogCWZvciAoaSA9IDA7IGkgPCBucmVsczsgaSsrKQogCXsK IAkJUmVsRmlsZUxvY2F0b3JCYWNrZW5kIHJsb2NhdG9yID0gcmVsc1tpXS0+c21ncl9ybG9j YXRvcjsKLQkJaW50CQkJd2hpY2ggPSByZWxzW2ldLT5zbWdyX3doaWNoOwogCiAJCXJsb2Nh dG9yc1tpXSA9IHJsb2NhdG9yOwogCiAJCS8qIENsb3NlIHRoZSBmb3JrcyBhdCBzbWdyIGxl dmVsICovCiAJCWZvciAoZm9ya251bSA9IDA7IGZvcmtudW0gPD0gTUFYX0ZPUktOVU07IGZv cmtudW0rKykKLQkJCXNtZ3Jzd1t3aGljaF0uc21ncl9jbG9zZShyZWxzW2ldLCBmb3JrbnVt KTsKKwkJCXNtZ3JfY2xvc2VfbmV4dChyZWxzW2ldLCBmb3JrbnVtLCAwKTsKIAl9CiAKIAkv KgpAQCAtNTEyLDE1ICs1NzksMjIgQEAgc21ncmRvdW5saW5rYWxsKFNNZ3JSZWxhdGlvbiAq cmVscywgaW50IG5yZWxzLCBib29sIGlzUmVkbykKIAogCWZvciAoaSA9IDA7IGkgPCBucmVs czsgaSsrKQogCXsKLQkJaW50CQkJd2hpY2ggPSByZWxzW2ldLT5zbWdyX3doaWNoOwotCiAJ CWZvciAoZm9ya251bSA9IDA7IGZvcmtudW0gPD0gTUFYX0ZPUktOVU07IGZvcmtudW0rKykK LQkJCXNtZ3Jzd1t3aGljaF0uc21ncl91bmxpbmsocmxvY2F0b3JzW2ldLCBmb3JrbnVtLCBp c1JlZG8pOworCQkJc21ncl91bmxpbmtfbmV4dChyZWxzW2ldLCBybG9jYXRvcnNbaV0sIGZv cmtudW0sIGlzUmVkbywgMCk7CiAJfQogCiAJcGZyZWUocmxvY2F0b3JzKTsKIH0KIAordm9p ZAorc21ncl9leHRlbmRfbmV4dChTTWdyUmVsYXRpb24gcmVsbiwgRm9ya051bWJlciBmb3Jr bnVtLCBCbG9ja051bWJlciBibG9ja251bSwKKwkJCQkgY29uc3Qgdm9pZCAqYnVmZmVyLCBi b29sIHNraXBGc3luYywgU21nckNoYWluSW5kZXggY2hhaW5faW5kZXgpCit7CisJU01HUl9D SEFJTl9MT09LVVAoc21ncl9leHRlbmQpOworCisJc21ncnN3W3JlbG4tPnNtZ3JfY2hhaW4u Y2hhaW5bY2hhaW5faW5kZXhdXS5zbWdyX2V4dGVuZChyZWxuLCBmb3JrbnVtLCBibG9ja251 bSwKKwkJCQkJCQkJCQkJCQkJCWJ1ZmZlciwgc2tpcEZzeW5jLCBjaGFpbl9pbmRleCk7Cit9 CiAKIC8qCiAgKiBzbWdyZXh0ZW5kKCkgLS0gQWRkIGEgbmV3IGJsb2NrIHRvIGEgZmlsZS4K QEAgLTUzNSw4ICs2MDksNyBAQCB2b2lkCiBzbWdyZXh0ZW5kKFNNZ3JSZWxhdGlvbiByZWxu LCBGb3JrTnVtYmVyIGZvcmtudW0sIEJsb2NrTnVtYmVyIGJsb2NrbnVtLAogCQkgICBjb25z dCB2b2lkICpidWZmZXIsIGJvb2wgc2tpcEZzeW5jKQogewotCXNtZ3Jzd1tyZWxuLT5zbWdy X3doaWNoXS5zbWdyX2V4dGVuZChyZWxuLCBmb3JrbnVtLCBibG9ja251bSwKLQkJCQkJCQkJ CQkgYnVmZmVyLCBza2lwRnN5bmMpOworCXNtZ3JfZXh0ZW5kX25leHQocmVsbiwgZm9ya251 bSwgYmxvY2tudW0sIGJ1ZmZlciwgc2tpcEZzeW5jLCAwKTsKIAogCS8qCiAJICogTm9ybWFs bHkgd2UgZXhwZWN0IHRoaXMgdG8gaW5jcmVhc2UgbmJsb2NrcyBieSBvbmUsIGJ1dCBpZiB0 aGUgY2FjaGVkCkBAIC01NDksNiArNjIyLDE2IEBAIHNtZ3JleHRlbmQoU01nclJlbGF0aW9u IHJlbG4sIEZvcmtOdW1iZXIgZm9ya251bSwgQmxvY2tOdW1iZXIgYmxvY2tudW0sCiAJCXJl bG4tPnNtZ3JfY2FjaGVkX25ibG9ja3NbZm9ya251bV0gPSBJbnZhbGlkQmxvY2tOdW1iZXI7 CiB9CiAKK3ZvaWQKK3NtZ3JfemVyb2V4dGVuZF9uZXh0KFNNZ3JSZWxhdGlvbiByZWxuLCBG b3JrTnVtYmVyIGZvcmtudW0sIEJsb2NrTnVtYmVyIGJsb2NrbnVtLAorCQkJCQkgaW50IG5i bG9ja3MsIGJvb2wgc2tpcEZzeW5jLCBTbWdyQ2hhaW5JbmRleCBjaGFpbl9pbmRleCkKK3sK KwlTTUdSX0NIQUlOX0xPT0tVUChzbWdyX3plcm9leHRlbmQpOworCisJc21ncnN3W3JlbG4t PnNtZ3JfY2hhaW4uY2hhaW5bY2hhaW5faW5kZXhdXS5zbWdyX3plcm9leHRlbmQocmVsbiwg Zm9ya251bSwgYmxvY2tudW0sCisJCQkJCQkJCQkJCQkJCQkJbmJsb2Nrcywgc2tpcEZzeW5j LCBjaGFpbl9pbmRleCk7Cit9CisKIC8qCiAgKiBzbWdyemVyb2V4dGVuZCgpIC0tIEFkZCBu ZXcgemVyb2VkIG91dCBibG9ja3MgdG8gYSBmaWxlLgogICoKQEAgLTU2MCw4ICs2NDMsNyBA QCB2b2lkCiBzbWdyemVyb2V4dGVuZChTTWdyUmVsYXRpb24gcmVsbiwgRm9ya051bWJlciBm b3JrbnVtLCBCbG9ja051bWJlciBibG9ja251bSwKIAkJCSAgIGludCBuYmxvY2tzLCBib29s IHNraXBGc3luYykKIHsKLQlzbWdyc3dbcmVsbi0+c21ncl93aGljaF0uc21ncl96ZXJvZXh0 ZW5kKHJlbG4sIGZvcmtudW0sIGJsb2NrbnVtLAotCQkJCQkJCQkJCQkgbmJsb2Nrcywgc2tp cEZzeW5jKTsKKwlzbWdyX3plcm9leHRlbmRfbmV4dChyZWxuLCBmb3JrbnVtLCBibG9ja251 bSwgbmJsb2Nrcywgc2tpcEZzeW5jLCAwKTsKIAogCS8qCiAJICogTm9ybWFsbHkgd2UgZXhw ZWN0IHRoaXMgdG8gaW5jcmVhc2UgdGhlIGZvcmsgc2l6ZSBieSBuYmxvY2tzLCBidXQgaWYK QEAgLTU3NCw2ICs2NTYsMTYgQEAgc21ncnplcm9leHRlbmQoU01nclJlbGF0aW9uIHJlbG4s IEZvcmtOdW1iZXIgZm9ya251bSwgQmxvY2tOdW1iZXIgYmxvY2tudW0sCiAJCXJlbG4tPnNt Z3JfY2FjaGVkX25ibG9ja3NbZm9ya251bV0gPSBJbnZhbGlkQmxvY2tOdW1iZXI7CiB9CiAK K2Jvb2wKK3NtZ3JfcHJlZmV0Y2hfbmV4dChTTWdyUmVsYXRpb24gcmVsbiwgRm9ya051bWJl ciBmb3JrbnVtLCBCbG9ja051bWJlciBibG9ja251bSwKKwkJCQkgICBpbnQgbmJsb2Nrcywg U21nckNoYWluSW5kZXggY2hhaW5faW5kZXgpCit7CisJU01HUl9DSEFJTl9MT09LVVAoc21n cl9wcmVmZXRjaCk7CisKKwlyZXR1cm4gc21ncnN3W3JlbG4tPnNtZ3JfY2hhaW4uY2hhaW5b Y2hhaW5faW5kZXhdXS5zbWdyX3ByZWZldGNoKHJlbG4sIGZvcmtudW0sIGJsb2NrbnVtLAor CQkJCQkJCQkJCQkJCQkJCQkgbmJsb2NrcywgY2hhaW5faW5kZXgpOworfQorCiAvKgogICog c21ncnByZWZldGNoKCkgLS0gSW5pdGlhdGUgYXN5bmNocm9ub3VzIHJlYWQgb2YgdGhlIHNw ZWNpZmllZCBibG9jayBvZiBhIHJlbGF0aW9uLgogICoKQEAgLTU4NSw3ICs2NzcsMTYgQEAg Ym9vbAogc21ncnByZWZldGNoKFNNZ3JSZWxhdGlvbiByZWxuLCBGb3JrTnVtYmVyIGZvcmtu dW0sIEJsb2NrTnVtYmVyIGJsb2NrbnVtLAogCQkJIGludCBuYmxvY2tzKQogewotCXJldHVy biBzbWdyc3dbcmVsbi0+c21ncl93aGljaF0uc21ncl9wcmVmZXRjaChyZWxuLCBmb3JrbnVt LCBibG9ja251bSwgbmJsb2Nrcyk7CisJcmV0dXJuIHNtZ3JfcHJlZmV0Y2hfbmV4dChyZWxu LCBmb3JrbnVtLCBibG9ja251bSwgbmJsb2NrcywgMCk7Cit9CisKK3VpbnQzMgorc21ncl9t YXhjb21iaW5lX25leHQoU01nclJlbGF0aW9uIHJlbG4sIEZvcmtOdW1iZXIgZm9ya251bSwK KwkJCQkJIEJsb2NrTnVtYmVyIGJsb2NrbnVtLCBTbWdyQ2hhaW5JbmRleCBjaGFpbl9pbmRl eCkKK3sKKwlTTUdSX0NIQUlOX0xPT0tVUChzbWdyX21heGNvbWJpbmUpOworCisJcmV0dXJu IHNtZ3Jzd1tyZWxuLT5zbWdyX2NoYWluLmNoYWluW2NoYWluX2luZGV4XV0uc21ncl9tYXhj b21iaW5lKHJlbG4sIGZvcmtudW0sIGJsb2NrbnVtLCBjaGFpbl9pbmRleCk7CiB9CiAKIC8q CkBAIC01OTgsNyArNjk5LDE3IEBAIHVpbnQzMgogc21ncm1heGNvbWJpbmUoU01nclJlbGF0 aW9uIHJlbG4sIEZvcmtOdW1iZXIgZm9ya251bSwKIAkJCSAgIEJsb2NrTnVtYmVyIGJsb2Nr bnVtKQogewotCXJldHVybiBzbWdyc3dbcmVsbi0+c21ncl93aGljaF0uc21ncl9tYXhjb21i aW5lKHJlbG4sIGZvcmtudW0sIGJsb2NrbnVtKTsKKwlyZXR1cm4gc21ncl9tYXhjb21iaW5l X25leHQocmVsbiwgZm9ya251bSwgYmxvY2tudW0sIDApOworfQorCit2b2lkCitzbWdyX3Jl YWR2X25leHQoU01nclJlbGF0aW9uIHJlbG4sIEZvcmtOdW1iZXIgZm9ya251bSwgQmxvY2tO dW1iZXIgYmxvY2tudW0sCisJCQkJdm9pZCAqKmJ1ZmZlcnMsIEJsb2NrTnVtYmVyIG5ibG9j a3MsIFNtZ3JDaGFpbkluZGV4IGNoYWluX2luZGV4KQoreworCVNNR1JfQ0hBSU5fTE9PS1VQ KHNtZ3JfcmVhZHYpOworCisJc21ncnN3W3JlbG4tPnNtZ3JfY2hhaW4uY2hhaW5bY2hhaW5f aW5kZXhdXS5zbWdyX3JlYWR2KHJlbG4sIGZvcmtudW0sIGJsb2NrbnVtLAorCQkJCQkJCQkJ CQkJCQkgICBidWZmZXJzLCBuYmxvY2tzLCBjaGFpbl9pbmRleCk7CiB9CiAKIC8qCkBAIC02 MTYsOCArNzI3LDE3IEBAIHZvaWQKIHNtZ3JyZWFkdihTTWdyUmVsYXRpb24gcmVsbiwgRm9y a051bWJlciBmb3JrbnVtLCBCbG9ja051bWJlciBibG9ja251bSwKIAkJICB2b2lkICoqYnVm ZmVycywgQmxvY2tOdW1iZXIgbmJsb2NrcykKIHsKLQlzbWdyc3dbcmVsbi0+c21ncl93aGlj aF0uc21ncl9yZWFkdihyZWxuLCBmb3JrbnVtLCBibG9ja251bSwgYnVmZmVycywKLQkJCQkJ CQkJCQluYmxvY2tzKTsKKwlzbWdyX3JlYWR2X25leHQocmVsbiwgZm9ya251bSwgYmxvY2tu dW0sIGJ1ZmZlcnMsIG5ibG9ja3MsIDApOworfQorCit2b2lkCitzbWdyX3dyaXRldl9uZXh0 KFNNZ3JSZWxhdGlvbiByZWxuLCBGb3JrTnVtYmVyIGZvcmtudW0sIEJsb2NrTnVtYmVyIGJs b2NrbnVtLAorCQkJCSBjb25zdCB2b2lkICoqYnVmZmVycywgQmxvY2tOdW1iZXIgbmJsb2Nr cywgYm9vbCBza2lwRnN5bmMsIFNtZ3JDaGFpbkluZGV4IGNoYWluX2luZGV4KQoreworCVNN R1JfQ0hBSU5fTE9PS1VQKHNtZ3Jfd3JpdGV2KTsKKworCXNtZ3Jzd1tyZWxuLT5zbWdyX2No YWluLmNoYWluW2NoYWluX2luZGV4XV0uc21ncl93cml0ZXYocmVsbiwgZm9ya251bSwgYmxv Y2tudW0sCisJCQkJCQkJCQkJCQkJCQlidWZmZXJzLCBuYmxvY2tzLCBza2lwRnN5bmMsIGNo YWluX2luZGV4KTsKIH0KIAogLyoKQEAgLTY1MCw4ICs3NzAsMTcgQEAgdm9pZAogc21ncndy aXRldihTTWdyUmVsYXRpb24gcmVsbiwgRm9ya051bWJlciBmb3JrbnVtLCBCbG9ja051bWJl ciBibG9ja251bSwKIAkJICAgY29uc3Qgdm9pZCAqKmJ1ZmZlcnMsIEJsb2NrTnVtYmVyIG5i bG9ja3MsIGJvb2wgc2tpcEZzeW5jKQogewotCXNtZ3Jzd1tyZWxuLT5zbWdyX3doaWNoXS5z bWdyX3dyaXRldihyZWxuLCBmb3JrbnVtLCBibG9ja251bSwKLQkJCQkJCQkJCQkgYnVmZmVy cywgbmJsb2Nrcywgc2tpcEZzeW5jKTsKKwlzbWdyX3dyaXRldl9uZXh0KHJlbG4sIGZvcmtu dW0sIGJsb2NrbnVtLAorCQkJCQkgYnVmZmVycywgbmJsb2Nrcywgc2tpcEZzeW5jLCAwKTsK K30KKwordm9pZAorc21ncl93cml0ZWJhY2tfbmV4dChTTWdyUmVsYXRpb24gcmVsbiwgRm9y a051bWJlciBmb3JrbnVtLCBCbG9ja051bWJlciBibG9ja251bSwKKwkJCQkJQmxvY2tOdW1i ZXIgbmJsb2NrcywgU21nckNoYWluSW5kZXggY2hhaW5faW5kZXgpCit7CisJU01HUl9DSEFJ Tl9MT09LVVAoc21ncl93cml0ZWJhY2spOworCisJc21ncnN3W3JlbG4tPnNtZ3JfY2hhaW4u Y2hhaW5bY2hhaW5faW5kZXhdXS5zbWdyX3dyaXRlYmFjayhyZWxuLCBmb3JrbnVtLCBibG9j a251bSwgbmJsb2NrcywgY2hhaW5faW5kZXgpOwogfQogCiAvKgpAQCAtNjYyLDggKzc5MSwx NSBAQCB2b2lkCiBzbWdyd3JpdGViYWNrKFNNZ3JSZWxhdGlvbiByZWxuLCBGb3JrTnVtYmVy IGZvcmtudW0sIEJsb2NrTnVtYmVyIGJsb2NrbnVtLAogCQkJICBCbG9ja051bWJlciBuYmxv Y2tzKQogewotCXNtZ3Jzd1tyZWxuLT5zbWdyX3doaWNoXS5zbWdyX3dyaXRlYmFjayhyZWxu LCBmb3JrbnVtLCBibG9ja251bSwKLQkJCQkJCQkJCQkJbmJsb2Nrcyk7CisJc21ncl93cml0 ZWJhY2tfbmV4dChyZWxuLCBmb3JrbnVtLCBibG9ja251bSwgbmJsb2NrcywgMCk7Cit9CisK K2V4dGVybiBCbG9ja051bWJlcgorc21ncl9uYmxvY2tzX25leHQoU01nclJlbGF0aW9uIHJl bG4sIEZvcmtOdW1iZXIgZm9ya251bSwgU21nckNoYWluSW5kZXggY2hhaW5faW5kZXgpCit7 CisJU01HUl9DSEFJTl9MT09LVVAoc21ncl9uYmxvY2tzKTsKKworCXJldHVybiBzbWdyc3db cmVsbi0+c21ncl9jaGFpbi5jaGFpbltjaGFpbl9pbmRleF1dLnNtZ3JfbmJsb2NrcyhyZWxu LCBmb3JrbnVtLCBjaGFpbl9pbmRleCk7CiB9CiAKIC8qCkBAIC02ODAsNyArODE2LDcgQEAg c21ncm5ibG9ja3MoU01nclJlbGF0aW9uIHJlbG4sIEZvcmtOdW1iZXIgZm9ya251bSkKIAlp ZiAocmVzdWx0ICE9IEludmFsaWRCbG9ja051bWJlcikKIAkJcmV0dXJuIHJlc3VsdDsKIAot CXJlc3VsdCA9IHNtZ3Jzd1tyZWxuLT5zbWdyX3doaWNoXS5zbWdyX25ibG9ja3MocmVsbiwg Zm9ya251bSk7CisJcmVzdWx0ID0gc21ncl9uYmxvY2tzX25leHQocmVsbiwgZm9ya251bSwg MCk7CiAKIAlyZWxuLT5zbWdyX2NhY2hlZF9uYmxvY2tzW2ZvcmtudW1dID0gcmVzdWx0Owog CkBAIC03MDgsNiArODQ0LDE0IEBAIHNtZ3JuYmxvY2tzX2NhY2hlZChTTWdyUmVsYXRpb24g cmVsbiwgRm9ya051bWJlciBmb3JrbnVtKQogCXJldHVybiBJbnZhbGlkQmxvY2tOdW1iZXI7 CiB9CiAKK3ZvaWQKK3NtZ3JfdHJ1bmNhdGVfbmV4dChTTWdyUmVsYXRpb24gcmVsbiwgRm9y a051bWJlciBmb3JrbnVtLCBCbG9ja051bWJlciBjdXJuYmxrLCBCbG9ja051bWJlciBuYmxv Y2tzLCBTbWdyQ2hhaW5JbmRleCBjaGFpbl9pbmRleCkKK3sKKwlTTUdSX0NIQUlOX0xPT0tV UChzbWdyX3RydW5jYXRlKTsKKworCXNtZ3Jzd1tyZWxuLT5zbWdyX2NoYWluLmNoYWluW2No YWluX2luZGV4XV0uc21ncl90cnVuY2F0ZShyZWxuLCBmb3JrbnVtLCBjdXJuYmxrLCBuYmxv Y2tzLCBjaGFpbl9pbmRleCk7Cit9CisKIC8qCiAgKiBzbWdydHJ1bmNhdGUoKSAtLSBUcnVu Y2F0ZSB0aGUgZ2l2ZW4gZm9ya3Mgb2Ygc3VwcGxpZWQgcmVsYXRpb24gdG8KICAqCQkJCQkg ZWFjaCBzcGVjaWZpZWQgbnVtYmVycyBvZiBibG9ja3MKQEAgLTc1Miw4ICs4OTYsNyBAQCBz bWdydHJ1bmNhdGUoU01nclJlbGF0aW9uIHJlbG4sIEZvcmtOdW1iZXIgKmZvcmtudW0sIGlu dCBuZm9ya3MsCiAJCS8qIE1ha2UgdGhlIGNhY2hlZCBzaXplIGlzIGludmFsaWQgaWYgd2Ug ZW5jb3VudGVyIGFuIGVycm9yLiAqLwogCQlyZWxuLT5zbWdyX2NhY2hlZF9uYmxvY2tzW2Zv cmtudW1baV1dID0gSW52YWxpZEJsb2NrTnVtYmVyOwogCi0JCXNtZ3Jzd1tyZWxuLT5zbWdy X3doaWNoXS5zbWdyX3RydW5jYXRlKHJlbG4sIGZvcmtudW1baV0sCi0JCQkJCQkJCQkJCSAg IG9sZF9uYmxvY2tzW2ldLCBuYmxvY2tzW2ldKTsKKwkJc21ncl90cnVuY2F0ZV9uZXh0KHJl bG4sIGZvcmtudW1baV0sIG9sZF9uYmxvY2tzW2ldLCBuYmxvY2tzW2ldLCAwKTsKIAogCQkv KgogCQkgKiBXZSBtaWdodCBhcyB3ZWxsIHVwZGF0ZSB0aGUgbG9jYWwgc21ncl9jYWNoZWRf bmJsb2NrcyB2YWx1ZXMuIFRoZQpAQCAtNzY2LDYgKzkwOSwxNCBAQCBzbWdydHJ1bmNhdGUo U01nclJlbGF0aW9uIHJlbG4sIEZvcmtOdW1iZXIgKmZvcmtudW0sIGludCBuZm9ya3MsCiAJ fQogfQogCit2b2lkCitzbWdyX3JlZ2lzdGVyc3luY19uZXh0KFNNZ3JSZWxhdGlvbiByZWxu LCBGb3JrTnVtYmVyIGZvcmtudW0sIFNtZ3JDaGFpbkluZGV4IGNoYWluX2luZGV4KQorewor CVNNR1JfQ0hBSU5fTE9PS1VQKHNtZ3JfcmVnaXN0ZXJzeW5jKTsKKworCXNtZ3Jzd1tyZWxu LT5zbWdyX2NoYWluLmNoYWluW2NoYWluX2luZGV4XV0uc21ncl9yZWdpc3RlcnN5bmMocmVs biwgZm9ya251bSwgY2hhaW5faW5kZXgpOworfQorCiAvKgogICogc21ncnJlZ2lzdGVyc3lu YygpIC0tIFJlcXVlc3QgYSByZWxhdGlvbiB0byBiZSBzeW5jJ2QgYXQgbmV4dCBjaGVja3Bv aW50CiAgKgpAQCAtNzgxLDcgKzkzMiw3IEBAIHNtZ3J0cnVuY2F0ZShTTWdyUmVsYXRpb24g cmVsbiwgRm9ya051bWJlciAqZm9ya251bSwgaW50IG5mb3JrcywKIHZvaWQKIHNtZ3JyZWdp c3RlcnN5bmMoU01nclJlbGF0aW9uIHJlbG4sIEZvcmtOdW1iZXIgZm9ya251bSkKIHsKLQlz bWdyc3dbcmVsbi0+c21ncl93aGljaF0uc21ncl9yZWdpc3RlcnN5bmMocmVsbiwgZm9ya251 bSk7CisJc21ncl9yZWdpc3RlcnN5bmNfbmV4dChyZWxuLCBmb3JrbnVtLCAwKTsKIH0KIAog LyoKQEAgLTgxMyw3ICs5NjQsNyBAQCBzbWdycmVnaXN0ZXJzeW5jKFNNZ3JSZWxhdGlvbiBy ZWxuLCBGb3JrTnVtYmVyIGZvcmtudW0pCiB2b2lkCiBzbWdyaW1tZWRzeW5jKFNNZ3JSZWxh dGlvbiByZWxuLCBGb3JrTnVtYmVyIGZvcmtudW0pCiB7Ci0Jc21ncnN3W3JlbG4tPnNtZ3Jf d2hpY2hdLnNtZ3JfaW1tZWRzeW5jKHJlbG4sIGZvcmtudW0pOworCXNtZ3JfaW1tZWRzeW5j X25leHQocmVsbiwgZm9ya251bSwgMCk7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9zcmMvYmFj a2VuZC90Y29wL3Bvc3RncmVzLmMgYi9zcmMvYmFja2VuZC90Y29wL3Bvc3RncmVzLmMKaW5k ZXggOTQ3ZmZiNDA0MjEuLmQ1MjNmMzA2YWI4IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC90 Y29wL3Bvc3RncmVzLmMKKysrIGIvc3JjL2JhY2tlbmQvdGNvcC9wb3N0Z3Jlcy5jCkBAIC00 MDcxLDYgKzQwNzEsOCBAQCBQb3N0Z3Jlc1NpbmdsZVVzZXJNYWluKGludCBhcmdjLCBjaGFy ICphcmd2W10sCiAJICovCiAJcHJvY2Vzc19zaGFyZWRfcHJlbG9hZF9saWJyYXJpZXMoKTsK IAorCXByb2Nlc3Nfc21ncl9jaGFpbigpOworCiAJLyogSW5pdGlhbGl6ZSBNYXhCYWNrZW5k cyAqLwogCUluaXRpYWxpemVNYXhCYWNrZW5kcygpOwogCmRpZmYgLS1naXQgYS9zcmMvYmFj a2VuZC91dGlscy9pbml0L21pc2Npbml0LmMgYi9zcmMvYmFja2VuZC91dGlscy9pbml0L21p c2Npbml0LmMKaW5kZXggMWIzY2U1MWNmY2UuLjMyZDk5ZTEyNDRhIDEwMDY0NAotLS0gYS9z cmMvYmFja2VuZC91dGlscy9pbml0L21pc2Npbml0LmMKKysrIGIvc3JjL2JhY2tlbmQvdXRp bHMvaW5pdC9taXNjaW5pdC5jCkBAIC01Niw2ICs1Niw3IEBACiAjaW5jbHVkZSAidXRpbHMv cGlkZmlsZS5oIgogI2luY2x1ZGUgInV0aWxzL3N5c2NhY2hlLmgiCiAjaW5jbHVkZSAidXRp bHMvdmFybGVuYS5oIgorI2luY2x1ZGUgInN0b3JhZ2Uvc21nci5oIgogCiAKICNkZWZpbmUg RElSRUNUT1JZX0xPQ0tfRklMRQkJInBvc3RtYXN0ZXIucGlkIgpAQCAtMTgzNCw2ICsxODM1 LDggQEAgY2hhcgkgICAqc2Vzc2lvbl9wcmVsb2FkX2xpYnJhcmllc19zdHJpbmcgPSBOVUxM OwogY2hhcgkgICAqc2hhcmVkX3ByZWxvYWRfbGlicmFyaWVzX3N0cmluZyA9IE5VTEw7CiBj aGFyCSAgICpsb2NhbF9wcmVsb2FkX2xpYnJhcmllc19zdHJpbmcgPSBOVUxMOwogCitjaGFy CSAgICpzbWdyX2NoYWluX3N0cmluZyA9IE5VTEw7CisKIC8qIEZsYWcgdGVsbGluZyB0aGF0 IHdlIGFyZSBsb2FkaW5nIHNoYXJlZF9wcmVsb2FkX2xpYnJhcmllcyAqLwogYm9vbAkJcHJv Y2Vzc19zaGFyZWRfcHJlbG9hZF9saWJyYXJpZXNfaW5fcHJvZ3Jlc3MgPSBmYWxzZTsKIGJv b2wJCXByb2Nlc3Nfc2hhcmVkX3ByZWxvYWRfbGlicmFyaWVzX2RvbmUgPSBmYWxzZTsKQEAg LTE5MTAsNiArMTkxMyw2MiBAQCBwcm9jZXNzX3NoYXJlZF9wcmVsb2FkX2xpYnJhcmllcyh2 b2lkKQogCXByb2Nlc3Nfc2hhcmVkX3ByZWxvYWRfbGlicmFyaWVzX2RvbmUgPSB0cnVlOwog fQogCit2b2lkCitwcm9jZXNzX3NtZ3JfY2hhaW4odm9pZCkKK3sKKwljaGFyCSAgICpyYXdz dHJpbmc7CisJTGlzdAkgICAqZWxlbWxpc3Q7CisJTGlzdENlbGwgICAqbDsKKwl1aW50OAkJ aWR4ID0gMDsKKworCWlmIChzbWdyX2NoYWluX3N0cmluZyA9PSBOVUxMIHx8IHNtZ3JfY2hh aW5fc3RyaW5nWzBdID09ICdcMCcpCisJCXJldHVybjsJCQkJCS8qIG5vdGhpbmcgdG8gZG8g Ki8KKworCS8qIE5lZWQgYSBtb2RpZmlhYmxlIGNvcHkgb2Ygc3RyaW5nICovCisJcmF3c3Ry aW5nID0gcHN0cmR1cChzbWdyX2NoYWluX3N0cmluZyk7CisKKwkvKiBQYXJzZSBzdHJpbmcg aW50byBsaXN0IG9mIGZpbGVuYW1lIHBhdGhzICovCisJaWYgKCFTcGxpdElkZW50aWZpZXJT dHJpbmcocmF3c3RyaW5nLCAnLCcsICZlbGVtbGlzdCkpCisJeworCQkvKiBzeW50YXggZXJy b3IgaW4gbGlzdCAqLworCQlwZnJlZShyYXdzdHJpbmcpOworCQllcmVwb3J0KExPRywKKwkJ CQkoZXJyY29kZShFUlJDT0RFX1NZTlRBWF9FUlJPUiksCisJCQkJIGVycm1zZygiaW52YWxp ZCBsaXN0IHN5bnRheCBpbiBwYXJhbWV0ZXIgXCIlc1wiIiwKKwkJCQkJCSJzbWdyX2NoYWlu IikpKTsKKwkJcmV0dXJuOworCX0KKworCWZvcmVhY2gobCwgZWxlbWxpc3QpCisJeworCQlj aGFyCSAgICpzbWdybmFtZSA9IChjaGFyICopIGxmaXJzdChsKTsKKwkJU01ncklkCQlpZCA9 IHNtZ3JfbG9va3VwKHNtZ3JuYW1lKTsKKworCQlzdG9yYWdlX21hbmFnZXJfY2hhaW4uY2hh aW5baWR4KytdID0gaWQ7CisKKwkJZXJlcG9ydChERUJVRzEsCisJCQkJKGVycm1zZ19pbnRl cm5hbCgidXNpbmcgc3RvcmFnZSBtYW5hZ2VyIGluIGNoYWluIFwiJXNcIiIsIHNtZ3JuYW1l KSkpOworCX0KKworCWZvciAoaW50IGkgPSAwOyBpIDwgaWR4OyArK2kpCisJeworCQlpbnQJ CQljaGFpbl9wb3NpdGlvbiA9IHNtZ3Jzd1tzdG9yYWdlX21hbmFnZXJfY2hhaW4uY2hhaW5b aV1dLmNoYWluX3Bvc2l0aW9uOworCisJCWlmIChpID09IGlkeCAtIDEgJiYgY2hhaW5fcG9z aXRpb24gIT0gU01HUl9DSEFJTl9UQUlMKQorCQkJZXJlcG9ydChGQVRBTCwKKwkJCQkJKGVy cm1zZ19pbnRlcm5hbCgic21ncl9jaGFpbjogdGhlIGxhc3QgZWxlbWVudCBzaG91bGQgYmUg YSBgdGFpbGAgaW1wbGVtZW50YXRpb24sIG5vdCBhIG1vZGlmaWVyLiIpKSk7CisKKwkJaWYg KGkgIT0gaWR4IC0gMSAmJiBjaGFpbl9wb3NpdGlvbiAhPSBTTUdSX0NIQUlOX01PRElGSUVS KQorCQkJZXJlcG9ydChGQVRBTCwKKwkJCQkJKGVycm1zZ19pbnRlcm5hbCgic21ncl9jaGFp bjogZWxlbWVudCAlaS8laSAlcyBpcyBub3QgYSBtb2RpZmllci4iLCBpLCBpZHgsIHNtZ3Jz d1tzdG9yYWdlX21hbmFnZXJfY2hhaW4uY2hhaW5baV1dLm5hbWUpKSk7CisJfQorCisJc3Rv cmFnZV9tYW5hZ2VyX2NoYWluLnNpemUgPSBpZHg7CisKKwlsaXN0X2ZyZWUoZWxlbWxpc3Qp OworCXBmcmVlKHJhd3N0cmluZyk7Cit9CisKIC8qCiAgKiBwcm9jZXNzIGFueSBsaWJyYXJp ZXMgdGhhdCBzaG91bGQgYmUgcHJlbG9hZGVkIGF0IGJhY2tlbmQgc3RhcnQKICAqLwpAQCAt MTkzMiw3ICsxOTkxLDkgQEAgcmVnaXN0ZXJfYnVpbHRpbl9keW5hbWljX21hbmFnZXJzKHZv aWQpCiB7CiAJbWRzbWdyX3JlZ2lzdGVyKCk7CiAKLQlzdG9yYWdlX21hbmFnZXJfaWQgPSBN ZFNNZ3JJZDsKKwkvKiBzZXR1cCBhIGR1bW15IGNoYWluIHdpdGggbWQsIGZvciB0b29scyAq LworCXN0b3JhZ2VfbWFuYWdlcl9jaGFpbi5jaGFpblswXSA9IE1kU01ncklkOworCXN0b3Jh Z2VfbWFuYWdlcl9jaGFpbi5zaXplID0gMTsKIH0KIAogLyoKZGlmZiAtLWdpdCBhL3NyYy9i YWNrZW5kL3V0aWxzL21pc2MvZ3VjX3RhYmxlcy5jIGIvc3JjL2JhY2tlbmQvdXRpbHMvbWlz Yy9ndWNfdGFibGVzLmMKaW5kZXggYWQyNWNiYjM5YzUuLmVhNDNhYWRjOTZhIDEwMDY0NAot LS0gYS9zcmMvYmFja2VuZC91dGlscy9taXNjL2d1Y190YWJsZXMuYworKysgYi9zcmMvYmFj a2VuZC91dGlscy9taXNjL2d1Y190YWJsZXMuYwpAQCAtNDQwOCw2ICs0NDA4LDE3IEBAIHN0 cnVjdCBjb25maWdfc3RyaW5nIENvbmZpZ3VyZU5hbWVzU3RyaW5nW10gPQogCQlOVUxMLCBO VUxMLCBOVUxMCiAJfSwKIAorCXsKKwkJeyJzbWdyX2NoYWluIiwgUEdDX1BPU1RNQVNURVIs IENMSUVOVF9DT05OX1BSRUxPQUQsCisJCQlnZXR0ZXh0X25vb3AoIkxpc3RzIHN0b3JhZ2Ug bWFuYWdlcnMgdXNlZCBieSB0aGUgc2VydmVyLCBpbiBvcmRlci4iKSwKKwkJCU5VTEwsCisJ CQlHVUNfTElTVF9JTlBVVCB8IEdVQ19MSVNUX1FVT1RFIHwgR1VDX1NVUEVSVVNFUl9PTkxZ CisJCX0sCisJCSZzbWdyX2NoYWluX3N0cmluZywKKwkJIm1kIiwKKwkJTlVMTCwgTlVMTCwg TlVMTAorCX0sCisKIAl7CiAJCXsic2VhcmNoX3BhdGgiLCBQR0NfVVNFUlNFVCwgQ0xJRU5U X0NPTk5fU1RBVEVNRU5ULAogCQkJZ2V0dGV4dF9ub29wKCJTZXRzIHRoZSBzY2hlbWEgc2Vh cmNoIG9yZGVyIGZvciBuYW1lcyB0aGF0IGFyZSBub3Qgc2NoZW1hLXF1YWxpZmllZC4iKSwK ZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL21pc2MvcG9zdGdyZXNxbC5jb25mLnNh bXBsZSBiL3NyYy9iYWNrZW5kL3V0aWxzL21pc2MvcG9zdGdyZXNxbC5jb25mLnNhbXBsZQpp bmRleCAyZDFkZTljMzdiZC4uODRkMTE1OWM0ZDcgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5k L3V0aWxzL21pc2MvcG9zdGdyZXNxbC5jb25mLnNhbXBsZQorKysgYi9zcmMvYmFja2VuZC91 dGlscy9taXNjL3Bvc3RncmVzcWwuY29uZi5zYW1wbGUKQEAgLTc4Nyw2ICs3ODcsNyBAQCBh dXRvdmFjdXVtX3dvcmtlcl9zbG90cyA9IDE2CSMgYXV0b3ZhY3V1bSB3b3JrZXIgc2xvdHMg dG8gYWxsb2NhdGUKICNzZXNzaW9uX3ByZWxvYWRfbGlicmFyaWVzID0gJycKICNzaGFyZWRf cHJlbG9hZF9saWJyYXJpZXMgPSAnJwkJIyAoY2hhbmdlIHJlcXVpcmVzIHJlc3RhcnQpCiAj aml0X3Byb3ZpZGVyID0gJ2xsdm1qaXQnCQkjIEpJVCBsaWJyYXJ5IHRvIHVzZQorI3NtZ3Jf Y2hhaW4gPSAnbWQnCQkJIyBTTUdSIGltcGxlbWVudGF0aW9ucyB0byB1c2UKIAogIyAtIE90 aGVyIERlZmF1bHRzIC0KIApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvbWlzY2FkbWluLmgg Yi9zcmMvaW5jbHVkZS9taXNjYWRtaW4uaAppbmRleCBmZjRlZjU3OGExZi4uNGUyMTg5NDFh NGIgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL21pc2NhZG1pbi5oCisrKyBiL3NyYy9pbmNs dWRlL21pc2NhZG1pbi5oCkBAIC01MDUsNiArNTA1LDcgQEAgZXh0ZXJuIFBHRExMSU1QT1JU IGJvb2wgcHJvY2Vzc19zaG1lbV9yZXF1ZXN0c19pbl9wcm9ncmVzczsKIGV4dGVybiBQR0RM TElNUE9SVCBjaGFyICpzZXNzaW9uX3ByZWxvYWRfbGlicmFyaWVzX3N0cmluZzsKIGV4dGVy biBQR0RMTElNUE9SVCBjaGFyICpzaGFyZWRfcHJlbG9hZF9saWJyYXJpZXNfc3RyaW5nOwog ZXh0ZXJuIFBHRExMSU1QT1JUIGNoYXIgKmxvY2FsX3ByZWxvYWRfbGlicmFyaWVzX3N0cmlu ZzsKK2V4dGVybiBQR0RMTElNUE9SVCBjaGFyICpzbWdyX2NoYWluX3N0cmluZzsKIAogZXh0 ZXJuIHZvaWQgQ3JlYXRlRGF0YURpckxvY2tGaWxlKGJvb2wgYW1Qb3N0bWFzdGVyKTsKIGV4 dGVybiB2b2lkIENyZWF0ZVNvY2tldExvY2tGaWxlKGNvbnN0IGNoYXIgKnNvY2tldGZpbGUs IGJvb2wgYW1Qb3N0bWFzdGVyLApAQCAtNTE1LDYgKzUxNiw3IEBAIGV4dGVybiBib29sIFJl Y2hlY2tEYXRhRGlyTG9ja0ZpbGUodm9pZCk7CiBleHRlcm4gdm9pZCBWYWxpZGF0ZVBnVmVy c2lvbihjb25zdCBjaGFyICpwYXRoKTsKIGV4dGVybiB2b2lkIHJlZ2lzdGVyX2J1aWx0aW5f ZHluYW1pY19tYW5hZ2Vycyh2b2lkKTsKIGV4dGVybiB2b2lkIHByb2Nlc3Nfc2hhcmVkX3By ZWxvYWRfbGlicmFyaWVzKHZvaWQpOworZXh0ZXJuIHZvaWQgcHJvY2Vzc19zbWdyX2NoYWlu KHZvaWQpOwogZXh0ZXJuIHZvaWQgcHJvY2Vzc19zZXNzaW9uX3ByZWxvYWRfbGlicmFyaWVz KHZvaWQpOwogZXh0ZXJuIHZvaWQgcHJvY2Vzc19zaG1lbV9yZXF1ZXN0cyh2b2lkKTsKIGV4 dGVybiB2b2lkIHBnX2JpbmR0ZXh0ZG9tYWluKGNvbnN0IGNoYXIgKmRvbWFpbik7CmRpZmYg LS1naXQgYS9zcmMvaW5jbHVkZS9zdG9yYWdlL21kLmggYi9zcmMvaW5jbHVkZS9zdG9yYWdl L21kLmgKaW5kZXggNjFjMGU4NWRkNzQuLjViNDk5MmMwODU1IDEwMDY0NAotLS0gYS9zcmMv aW5jbHVkZS9zdG9yYWdlL21kLmgKKysrIGIvc3JjL2luY2x1ZGUvc3RvcmFnZS9tZC5oCkBA IC0yMywzNCArMjMsNiBAQAogZXh0ZXJuIHZvaWQgbWRzbWdyX3JlZ2lzdGVyKHZvaWQpOwog ZXh0ZXJuIFNNZ3JJZCBNZFNNZ3JJZDsKIAotLyogbWQgc3RvcmFnZSBtYW5hZ2VyIGZ1bmN0 aW9uYWxpdHkgKi8KLWV4dGVybiB2b2lkIG1kaW5pdCh2b2lkKTsKLWV4dGVybiB2b2lkIG1k b3BlbihTTWdyUmVsYXRpb24gcmVsbik7Ci1leHRlcm4gdm9pZCBtZGNsb3NlKFNNZ3JSZWxh dGlvbiByZWxuLCBGb3JrTnVtYmVyIGZvcmtudW0pOwotZXh0ZXJuIHZvaWQgbWRjcmVhdGUo UmVsRmlsZUxvY2F0b3IgcmVsb2xkLCBTTWdyUmVsYXRpb24gcmVsbiwgRm9ya051bWJlciBm b3JrbnVtLCBib29sIGlzUmVkbyk7Ci1leHRlcm4gYm9vbCBtZGV4aXN0cyhTTWdyUmVsYXRp b24gcmVsbiwgRm9ya051bWJlciBmb3JrbnVtKTsKLWV4dGVybiB2b2lkIG1kdW5saW5rKFJl bEZpbGVMb2NhdG9yQmFja2VuZCBybG9jYXRvciwgRm9ya051bWJlciBmb3JrbnVtLCBib29s IGlzUmVkbyk7Ci1leHRlcm4gdm9pZCBtZGV4dGVuZChTTWdyUmVsYXRpb24gcmVsbiwgRm9y a051bWJlciBmb3JrbnVtLAotCQkJCQkgQmxvY2tOdW1iZXIgYmxvY2tudW0sIGNvbnN0IHZv aWQgKmJ1ZmZlciwgYm9vbCBza2lwRnN5bmMpOwotZXh0ZXJuIHZvaWQgbWR6ZXJvZXh0ZW5k KFNNZ3JSZWxhdGlvbiByZWxuLCBGb3JrTnVtYmVyIGZvcmtudW0sCi0JCQkJCQkgQmxvY2tO dW1iZXIgYmxvY2tudW0sIGludCBuYmxvY2tzLCBib29sIHNraXBGc3luYyk7Ci1leHRlcm4g Ym9vbCBtZHByZWZldGNoKFNNZ3JSZWxhdGlvbiByZWxuLCBGb3JrTnVtYmVyIGZvcmtudW0s Ci0JCQkJCSAgIEJsb2NrTnVtYmVyIGJsb2NrbnVtLCBpbnQgbmJsb2Nrcyk7Ci1leHRlcm4g dWludDMyIG1kbWF4Y29tYmluZShTTWdyUmVsYXRpb24gcmVsbiwgRm9ya051bWJlciBmb3Jr bnVtLAotCQkJCQkJICAgQmxvY2tOdW1iZXIgYmxvY2tudW0pOwotZXh0ZXJuIHZvaWQgbWRy ZWFkdihTTWdyUmVsYXRpb24gcmVsbiwgRm9ya051bWJlciBmb3JrbnVtLCBCbG9ja051bWJl ciBibG9ja251bSwKLQkJCQkJdm9pZCAqKmJ1ZmZlcnMsIEJsb2NrTnVtYmVyIG5ibG9ja3Mp OwotZXh0ZXJuIHZvaWQgbWR3cml0ZXYoU01nclJlbGF0aW9uIHJlbG4sIEZvcmtOdW1iZXIg Zm9ya251bSwKLQkJCQkJIEJsb2NrTnVtYmVyIGJsb2NrbnVtLAotCQkJCQkgY29uc3Qgdm9p ZCAqKmJ1ZmZlcnMsIEJsb2NrTnVtYmVyIG5ibG9ja3MsIGJvb2wgc2tpcEZzeW5jKTsKLWV4 dGVybiB2b2lkIG1kd3JpdGViYWNrKFNNZ3JSZWxhdGlvbiByZWxuLCBGb3JrTnVtYmVyIGZv cmtudW0sCi0JCQkJCQlCbG9ja051bWJlciBibG9ja251bSwgQmxvY2tOdW1iZXIgbmJsb2Nr cyk7Ci1leHRlcm4gQmxvY2tOdW1iZXIgbWRuYmxvY2tzKFNNZ3JSZWxhdGlvbiByZWxuLCBG b3JrTnVtYmVyIGZvcmtudW0pOwotZXh0ZXJuIHZvaWQgbWR0cnVuY2F0ZShTTWdyUmVsYXRp b24gcmVsbiwgRm9ya051bWJlciBmb3JrbnVtLAotCQkJCQkgICBCbG9ja051bWJlciBvbGRf YmxvY2tzLCBCbG9ja051bWJlciBuYmxvY2tzKTsKLWV4dGVybiB2b2lkIG1kaW1tZWRzeW5j KFNNZ3JSZWxhdGlvbiByZWxuLCBGb3JrTnVtYmVyIGZvcmtudW0pOwotZXh0ZXJuIHZvaWQg bWRyZWdpc3RlcnN5bmMoU01nclJlbGF0aW9uIHJlbG4sIEZvcmtOdW1iZXIgZm9ya251bSk7 Ci0KIGV4dGVybiB2b2lkIEZvcmdldERhdGFiYXNlU3luY1JlcXVlc3RzKE9pZCBkYmlkKTsK IGV4dGVybiB2b2lkIERyb3BSZWxhdGlvbkZpbGVzKFJlbEZpbGVMb2NhdG9yICpkZWxyZWxz LCBpbnQgbmRlbHJlbHMsIGJvb2wgaXNSZWRvKTsKIApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1 ZGUvc3RvcmFnZS9zbWdyLmggYi9zcmMvaW5jbHVkZS9zdG9yYWdlL3NtZ3IuaAppbmRleCA1 YjJiNmRlOTFjNC4uOGY3ODljYjdmODAgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3N0b3Jh Z2Uvc21nci5oCisrKyBiL3NyYy9pbmNsdWRlL3N0b3JhZ2Uvc21nci5oCkBAIC0yMCw3ICsy MCwxNyBAQAogCiB0eXBlZGVmIHVpbnQ4IFNNZ3JJZDsKIAotZXh0ZXJuIFBHRExMSU1QT1JU IFNNZ3JJZCBzdG9yYWdlX21hbmFnZXJfaWQ7Cit0eXBlZGVmIHVpbnQ4IFNtZ3JDaGFpbklu ZGV4OworCisjZGVmaW5lIE1BWF9TTUdSX0NIQUlOIDE1CisKK3R5cGVkZWYgc3RydWN0Cit7 CisJU01ncklkCQljaGFpbltNQVhfU01HUl9DSEFJTl07CS8qIHN0b3JhZ2UgbWFuYWdlciBz ZWxlY3RvciAqLworCXVpbnQ4CQlzaXplOworfSBTTWdyQ2hhaW47CisKK2V4dGVybiBQR0RM TElNUE9SVCBTTWdyQ2hhaW4gc3RvcmFnZV9tYW5hZ2VyX2NoYWluOwogCiAvKgogICogc21n ci5jIG1haW50YWlucyBhIHRhYmxlIG9mIFNNZ3JSZWxhdGlvbiBvYmplY3RzLCB3aGljaCBh cmUgZXNzZW50aWFsbHkKQEAgLTU1LDcgKzY1LDcgQEAgdHlwZWRlZiBzdHJ1Y3QgU01nclJl bGF0aW9uRGF0YQogCSAqIEZpZWxkcyBiZWxvdyBoZXJlIGFyZSBpbnRlbmRlZCB0byBiZSBw cml2YXRlIHRvIHNtZ3IuYyBhbmQgaXRzCiAJICogc3VibW9kdWxlcy4gIERvIG5vdCB0b3Vj aCB0aGVtIGZyb20gZWxzZXdoZXJlLgogCSAqLwotCVNNZ3JJZAkJc21ncl93aGljaDsJCS8q IHN0b3JhZ2UgbWFuYWdlciBzZWxlY3RvciAqLworCVNNZ3JDaGFpbglzbWdyX2NoYWluOwkJ Lyogc2VsZWN0ZWQgc3RvcmFnZSBtYW5hZ2VyIGNoYWluICovCiAKIAkvKgogCSAqIFBpbm5p bmcgc3VwcG9ydC4gIElmIHVucGlubmVkIChpZS4gcGluY291bnQgPT0gMCksICdub2RlJyBp cyBhIGxpc3QKQEAgLTcwLDYgKzgwLDkgQEAgdHlwZWRlZiBTTWdyUmVsYXRpb25EYXRhICpT TWdyUmVsYXRpb247CiAjZGVmaW5lIFNtZ3JJc1RlbXAoc21ncikgXAogCVJlbEZpbGVMb2Nh dG9yQmFja2VuZElzVGVtcCgoc21nciktPnNtZ3JfcmxvY2F0b3IpCiAKKyNkZWZpbmUgU01H Ul9DSEFJTl9UQUlMIDEKKyNkZWZpbmUgU01HUl9DSEFJTl9NT0RJRklFUiAyCisKIC8qCiAg KiBUaGlzIHN0cnVjdCBvZiBmdW5jdGlvbiBwb2ludGVycyBkZWZpbmVzIHRoZSBBUEkgYmV0 d2VlbiBzbWdyLmMgYW5kCiAgKiBhbnkgaW5kaXZpZHVhbCBzdG9yYWdlIG1hbmFnZXIgbW9k dWxlLiAgTm90ZSB0aGF0IHNtZ3Igc3ViZnVuY3Rpb25zIGFyZQpAQCAtODMsNDAgKzk2LDQ0 IEBAIHR5cGVkZWYgU01nclJlbGF0aW9uRGF0YSAqU01nclJlbGF0aW9uOwogdHlwZWRlZiBz dHJ1Y3QgZl9zbWdyCiB7CiAJY29uc3QgY2hhciAqbmFtZTsKKwlpbnQJCQljaGFpbl9wb3Np dGlvbjsKIAl2b2lkCQkoKnNtZ3JfaW5pdCkgKHZvaWQpOwkvKiBtYXkgYmUgTlVMTCAqLwog CXZvaWQJCSgqc21ncl9zaHV0ZG93bikgKHZvaWQpOwkvKiBtYXkgYmUgTlVMTCAqLwotCXZv aWQJCSgqc21ncl9vcGVuKSAoU01nclJlbGF0aW9uIHJlbG4pOwotCXZvaWQJCSgqc21ncl9j bG9zZSkgKFNNZ3JSZWxhdGlvbiByZWxuLCBGb3JrTnVtYmVyIGZvcmtudW0pOworCXZvaWQJ CSgqc21ncl9vcGVuKSAoU01nclJlbGF0aW9uIHJlbG4sIFNtZ3JDaGFpbkluZGV4IGNoYWlu X2luZGV4KTsKKwl2b2lkCQkoKnNtZ3JfY2xvc2UpIChTTWdyUmVsYXRpb24gcmVsbiwgRm9y a051bWJlciBmb3JrbnVtLCBTbWdyQ2hhaW5JbmRleCBjaGFpbl9pbmRleCk7CiAJdm9pZAkJ KCpzbWdyX2NyZWF0ZSkgKFJlbEZpbGVMb2NhdG9yIHJlbG9sZCwgU01nclJlbGF0aW9uIHJl bG4sIEZvcmtOdW1iZXIgZm9ya251bSwKLQkJCQkJCQkJYm9vbCBpc1JlZG8pOwotCWJvb2wJ CSgqc21ncl9leGlzdHMpIChTTWdyUmVsYXRpb24gcmVsbiwgRm9ya051bWJlciBmb3JrbnVt KTsKKwkJCQkJCQkJYm9vbCBpc1JlZG8sIFNtZ3JDaGFpbkluZGV4IGNoYWluX2luZGV4KTsK Kwlib29sCQkoKnNtZ3JfZXhpc3RzKSAoU01nclJlbGF0aW9uIHJlbG4sIEZvcmtOdW1iZXIg Zm9ya251bSwgU21nckNoYWluSW5kZXggY2hhaW5faW5kZXgpOwogCXZvaWQJCSgqc21ncl91 bmxpbmspIChSZWxGaWxlTG9jYXRvckJhY2tlbmQgcmxvY2F0b3IsIEZvcmtOdW1iZXIgZm9y a251bSwKLQkJCQkJCQkJYm9vbCBpc1JlZG8pOworCQkJCQkJCQlib29sIGlzUmVkbywgU21n ckNoYWluSW5kZXggY2hhaW5faW5kZXgpOwogCXZvaWQJCSgqc21ncl9leHRlbmQpIChTTWdy UmVsYXRpb24gcmVsbiwgRm9ya051bWJlciBmb3JrbnVtLAotCQkJCQkJCQlCbG9ja051bWJl ciBibG9ja251bSwgY29uc3Qgdm9pZCAqYnVmZmVyLCBib29sIHNraXBGc3luYyk7CisJCQkJ CQkJCUJsb2NrTnVtYmVyIGJsb2NrbnVtLCBjb25zdCB2b2lkICpidWZmZXIsIGJvb2wgc2tp cEZzeW5jLCBTbWdyQ2hhaW5JbmRleCBjaGFpbl9pbmRleCk7CiAJdm9pZAkJKCpzbWdyX3pl cm9leHRlbmQpIChTTWdyUmVsYXRpb24gcmVsbiwgRm9ya051bWJlciBmb3JrbnVtLAotCQkJ CQkJCQkJQmxvY2tOdW1iZXIgYmxvY2tudW0sIGludCBuYmxvY2tzLCBib29sIHNraXBGc3lu Yyk7CisJCQkJCQkJCQlCbG9ja051bWJlciBibG9ja251bSwgaW50IG5ibG9ja3MsIGJvb2wg c2tpcEZzeW5jLCBTbWdyQ2hhaW5JbmRleCBjaGFpbl9pbmRleCk7CiAJYm9vbAkJKCpzbWdy X3ByZWZldGNoKSAoU01nclJlbGF0aW9uIHJlbG4sIEZvcmtOdW1iZXIgZm9ya251bSwKLQkJ CQkJCQkJICBCbG9ja051bWJlciBibG9ja251bSwgaW50IG5ibG9ja3MpOworCQkJCQkJCQkg IEJsb2NrTnVtYmVyIGJsb2NrbnVtLCBpbnQgbmJsb2NrcywgU21nckNoYWluSW5kZXggY2hh aW5faW5kZXgpOwogCXVpbnQzMgkJKCpzbWdyX21heGNvbWJpbmUpIChTTWdyUmVsYXRpb24g cmVsbiwgRm9ya051bWJlciBmb3JrbnVtLAotCQkJCQkJCQkJQmxvY2tOdW1iZXIgYmxvY2tu dW0pOworCQkJCQkJCQkJQmxvY2tOdW1iZXIgYmxvY2tudW0sIFNtZ3JDaGFpbkluZGV4IGNo YWluX2luZGV4KTsKIAl2b2lkCQkoKnNtZ3JfcmVhZHYpIChTTWdyUmVsYXRpb24gcmVsbiwg Rm9ya051bWJlciBmb3JrbnVtLAogCQkJCQkJCSAgIEJsb2NrTnVtYmVyIGJsb2NrbnVtLAot CQkJCQkJCSAgIHZvaWQgKipidWZmZXJzLCBCbG9ja051bWJlciBuYmxvY2tzKTsKKwkJCQkJ CQkgICB2b2lkICoqYnVmZmVycywgQmxvY2tOdW1iZXIgbmJsb2NrcywgU21nckNoYWluSW5k ZXggY2hhaW5faW5kZXgpOwogCXZvaWQJCSgqc21ncl93cml0ZXYpIChTTWdyUmVsYXRpb24g cmVsbiwgRm9ya051bWJlciBmb3JrbnVtLAogCQkJCQkJCQlCbG9ja051bWJlciBibG9ja251 bSwKIAkJCQkJCQkJY29uc3Qgdm9pZCAqKmJ1ZmZlcnMsIEJsb2NrTnVtYmVyIG5ibG9ja3Ms Ci0JCQkJCQkJCWJvb2wgc2tpcEZzeW5jKTsKKwkJCQkJCQkJYm9vbCBza2lwRnN5bmMsIFNt Z3JDaGFpbkluZGV4IGNoYWluX2luZGV4KTsKIAl2b2lkCQkoKnNtZ3Jfd3JpdGViYWNrKSAo U01nclJlbGF0aW9uIHJlbG4sIEZvcmtOdW1iZXIgZm9ya251bSwKLQkJCQkJCQkJICAgQmxv Y2tOdW1iZXIgYmxvY2tudW0sIEJsb2NrTnVtYmVyIG5ibG9ja3MpOwotCUJsb2NrTnVtYmVy ICgqc21ncl9uYmxvY2tzKSAoU01nclJlbGF0aW9uIHJlbG4sIEZvcmtOdW1iZXIgZm9ya251 bSk7CisJCQkJCQkJCSAgIEJsb2NrTnVtYmVyIGJsb2NrbnVtLCBCbG9ja051bWJlciBuYmxv Y2tzLCBTbWdyQ2hhaW5JbmRleCBjaGFpbl9pbmRleCk7CisJQmxvY2tOdW1iZXIgKCpzbWdy X25ibG9ja3MpIChTTWdyUmVsYXRpb24gcmVsbiwgRm9ya051bWJlciBmb3JrbnVtLCBTbWdy Q2hhaW5JbmRleCBjaGFpbl9pbmRleCk7CiAJdm9pZAkJKCpzbWdyX3RydW5jYXRlKSAoU01n clJlbGF0aW9uIHJlbG4sIEZvcmtOdW1iZXIgZm9ya251bSwKLQkJCQkJCQkJICBCbG9ja051 bWJlciBvbGRfYmxvY2tzLCBCbG9ja051bWJlciBuYmxvY2tzKTsKLQl2b2lkCQkoKnNtZ3Jf aW1tZWRzeW5jKSAoU01nclJlbGF0aW9uIHJlbG4sIEZvcmtOdW1iZXIgZm9ya251bSk7Ci0J dm9pZAkJKCpzbWdyX3JlZ2lzdGVyc3luYykgKFNNZ3JSZWxhdGlvbiByZWxuLCBGb3JrTnVt YmVyIGZvcmtudW0pOworCQkJCQkJCQkgIEJsb2NrTnVtYmVyIG9sZF9ibG9ja3MsIEJsb2Nr TnVtYmVyIG5ibG9ja3MsIFNtZ3JDaGFpbkluZGV4IGNoYWluX2luZGV4KTsKKwl2b2lkCQko KnNtZ3JfaW1tZWRzeW5jKSAoU01nclJlbGF0aW9uIHJlbG4sIEZvcmtOdW1iZXIgZm9ya251 bSwgU21nckNoYWluSW5kZXggY2hhaW5faW5kZXgpOworCXZvaWQJCSgqc21ncl9yZWdpc3Rl cnN5bmMpIChTTWdyUmVsYXRpb24gcmVsbiwgRm9ya051bWJlciBmb3JrbnVtLCBTbWdyQ2hh aW5JbmRleCBjaGFpbl9pbmRleCk7CiB9IGZfc21ncjsKIAogZXh0ZXJuIFNNZ3JJZCBzbWdy X3JlZ2lzdGVyKGNvbnN0IGZfc21nciAqc21nciwgU2l6ZSBzbWdycmVsYXRpb25fc2l6ZSk7 CitleHRlcm4gU01ncklkIHNtZ3JfbG9va3VwKGNvbnN0IGNoYXIgKm5hbWUpOworCitleHRl cm4gZl9zbWdyICpzbWdyc3c7CiAKIGV4dGVybiB2b2lkIHNtZ3Jpbml0KHZvaWQpOwogZXh0 ZXJuIFNNZ3JSZWxhdGlvbiBzbWdyb3BlbihSZWxGaWxlTG9jYXRvciBybG9jYXRvciwgUHJv Y051bWJlciBiYWNrZW5kKTsKQEAgLTE1OCw2ICsxNzUsNDYgQEAgZXh0ZXJuIHZvaWQgc21n cnJlZ2lzdGVyc3luYyhTTWdyUmVsYXRpb24gcmVsbiwgRm9ya051bWJlciBmb3JrbnVtKTsK IGV4dGVybiB2b2lkIEF0RU9YYWN0X1NNZ3Iodm9pZCk7CiBleHRlcm4gYm9vbCBQcm9jZXNz QmFycmllclNtZ3JSZWxlYXNlKHZvaWQpOwogCitleHRlcm4gdm9pZAorCQkJc21ncl9vcGVu X25leHQoU01nclJlbGF0aW9uIHJlbG4sIFNtZ3JDaGFpbkluZGV4IGNoYWluX2luZGV4KTsK K2V4dGVybiB2b2lkCisJCQlzbWdyX2Nsb3NlX25leHQoU01nclJlbGF0aW9uIHJlbG4sIEZv cmtOdW1iZXIgZm9ya251bSwgU21nckNoYWluSW5kZXggY2hhaW5faW5kZXgpOworZXh0ZXJu IGJvb2wKKwkJCXNtZ3JfZXhpc3RzX25leHQoU01nclJlbGF0aW9uIHJlbG4sIEZvcmtOdW1i ZXIgZm9ya251bSwgU21nckNoYWluSW5kZXggY2hhaW5faW5kZXgpOworZXh0ZXJuIHZvaWQK KwkJCXNtZ3JfY3JlYXRlX25leHQoUmVsRmlsZUxvY2F0b3IgcmVsb2xkLCBTTWdyUmVsYXRp b24gcmVsbiwgRm9ya051bWJlciBmb3JrbnVtLCBib29sIGlzUmVkbywgU21nckNoYWluSW5k ZXggY2hhaW5faW5kZXgpOworZXh0ZXJuIHZvaWQKKwkJCXNtZ3JfaW1tZWRzeW5jX25leHQo U01nclJlbGF0aW9uIHJlbG4sIEZvcmtOdW1iZXIgZm9ya251bSwgU21nckNoYWluSW5kZXgg Y2hhaW5faW5kZXgpOworZXh0ZXJuIHZvaWQKKwkJCXNtZ3JfdW5saW5rX25leHQoU01nclJl bGF0aW9uIHJlbG4sIFJlbEZpbGVMb2NhdG9yQmFja2VuZCBybG9jYXRvciwgRm9ya051bWJl ciBmb3JrbnVtLCBib29sIGlzUmVkbywgU21nckNoYWluSW5kZXggY2hhaW5faW5kZXgpOwor ZXh0ZXJuIHZvaWQKKwkJCXNtZ3JfZXh0ZW5kX25leHQoU01nclJlbGF0aW9uIHJlbG4sIEZv cmtOdW1iZXIgZm9ya251bSwgQmxvY2tOdW1iZXIgYmxvY2tudW0sCisJCQkJCQkJIGNvbnN0 IHZvaWQgKmJ1ZmZlciwgYm9vbCBza2lwRnN5bmMsIFNtZ3JDaGFpbkluZGV4IGNoYWluX2lu ZGV4KTsKK2V4dGVybiB2b2lkCisJCQlzbWdyX3plcm9leHRlbmRfbmV4dChTTWdyUmVsYXRp b24gcmVsbiwgRm9ya051bWJlciBmb3JrbnVtLCBCbG9ja051bWJlciBibG9ja251bSwKKwkJ CQkJCQkJIGludCBuYmxvY2tzLCBib29sIHNraXBGc3luYywgU21nckNoYWluSW5kZXggY2hh aW5faW5kZXgpOworZXh0ZXJuIGJvb2wKKwkJCXNtZ3JfcHJlZmV0Y2hfbmV4dChTTWdyUmVs YXRpb24gcmVsbiwgRm9ya051bWJlciBmb3JrbnVtLCBCbG9ja051bWJlciBibG9ja251bSwK KwkJCQkJCQkgICBpbnQgbmJsb2NrcywgU21nckNoYWluSW5kZXggY2hhaW5faW5kZXgpOwor ZXh0ZXJuIHVpbnQzMgorCQkJc21ncl9tYXhjb21iaW5lX25leHQoU01nclJlbGF0aW9uIHJl bG4sIEZvcmtOdW1iZXIgZm9ya251bSwKKwkJCQkJCQkJIEJsb2NrTnVtYmVyIGJsb2NrbnVt LCBTbWdyQ2hhaW5JbmRleCBjaGFpbl9pbmRleCk7CitleHRlcm4gdm9pZAorCQkJc21ncl9y ZWFkdl9uZXh0KFNNZ3JSZWxhdGlvbiByZWxuLCBGb3JrTnVtYmVyIGZvcmtudW0sIEJsb2Nr TnVtYmVyIGJsb2NrbnVtLAorCQkJCQkJCXZvaWQgKipidWZmZXJzLCBCbG9ja051bWJlciBu YmxvY2tzLCBTbWdyQ2hhaW5JbmRleCBjaGFpbl9pbmRleCk7CitleHRlcm4gdm9pZAorCQkJ c21ncl93cml0ZXZfbmV4dChTTWdyUmVsYXRpb24gcmVsbiwgRm9ya051bWJlciBmb3JrbnVt LCBCbG9ja051bWJlciBibG9ja251bSwKKwkJCQkJCQkgY29uc3Qgdm9pZCAqKmJ1ZmZlcnMs IEJsb2NrTnVtYmVyIG5ibG9ja3MsIGJvb2wgc2tpcEZzeW5jLCBTbWdyQ2hhaW5JbmRleCBj aGFpbl9pbmRleCk7CitleHRlcm4gdm9pZAorCQkJc21ncl93cml0ZWJhY2tfbmV4dChTTWdy UmVsYXRpb24gcmVsbiwgRm9ya051bWJlciBmb3JrbnVtLCBCbG9ja051bWJlciBibG9ja251 bSwKKwkJCQkJCQkJQmxvY2tOdW1iZXIgbmJsb2NrcywgU21nckNoYWluSW5kZXggY2hhaW5f aW5kZXgpOworZXh0ZXJuIEJsb2NrTnVtYmVyCisJCQlzbWdyX25ibG9ja3NfbmV4dChTTWdy UmVsYXRpb24gcmVsbiwgRm9ya051bWJlciBmb3JrbnVtLCBTbWdyQ2hhaW5JbmRleCBjaGFp bl9pbmRleCk7CitleHRlcm4gdm9pZAorCQkJc21ncl90cnVuY2F0ZV9uZXh0KFNNZ3JSZWxh dGlvbiByZWxuLCBGb3JrTnVtYmVyIGZvcmtudW0sIEJsb2NrTnVtYmVyIGN1cm5ibGssIEJs b2NrTnVtYmVyIG5ibG9ja3MsIFNtZ3JDaGFpbkluZGV4IGNoYWluX2luZGV4KTsKK2V4dGVy biB2b2lkCisJCQlzbWdyX3JlZ2lzdGVyc3luY19uZXh0KFNNZ3JSZWxhdGlvbiByZWxuLCBG b3JrTnVtYmVyIGZvcmtudW0sIFNtZ3JDaGFpbkluZGV4IGNoYWluX2luZGV4KTsKKwogc3Rh dGljIGlubGluZSB2b2lkCiBzbWdycmVhZChTTWdyUmVsYXRpb24gcmVsbiwgRm9ya051bWJl ciBmb3JrbnVtLCBCbG9ja051bWJlciBibG9ja251bSwKIAkJIHZvaWQgKmJ1ZmZlcikKZGlm ZiAtLWdpdCBhL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0IGIvc3JjL3Rvb2xz L3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKaW5kZXggYmMyNjBlNzEzYWUuLmIxYjQ4NWQ1NDQ1 IDEwMDY0NAotLS0gYS9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdAorKysgYi9z cmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdApAQCAtMjU1Myw2ICsyNTUzLDcgQEAg U0lEX0lERU5USUZJRVJfQVVUSE9SSVRZCiBTSURfTkFNRV9VU0UKIFNJU2VnCiBTSVpFX1QK K1NNZ3JDaGFpbgogU01nclJlbGF0aW9uCiBTTWdyUmVsYXRpb25EYXRhCiBTTWdyU29ydEFy cmF5Ci0tIAoyLjQ3LjIKCg== --------------pzqHmNAXsEg2Eg5hZQblrRMV Content-Type: text/x-patch; charset=UTF-8; name="v4-0005-Refactor-smgr-API-mdcreate-needs-the-old-relfilel.patch" Content-Disposition: attachment; filename*0="v4-0005-Refactor-smgr-API-mdcreate-needs-the-old-relfilel.pa"; filename*1="tch" Content-Transfer-Encoding: base64 RnJvbSA5NjUyM2M1NDdlOTBkZTY0YjExNmFjZjQ3MGMwNzMwNzU0MTc5NWIxIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBac29sdCBQYXJyYWdpIDx6c29sdC5wYXJyYWdpQGNh bmNlbGxhci5odT4KRGF0ZTogU2F0LCAxMiBPY3QgMjAyNCAyMjowMToyOCArMDEwMApTdWJq ZWN0OiBbUEFUQ0ggdjQgNS82XSBSZWZhY3RvciBzbWdyIEFQSTogbWRjcmVhdGUgbmVlZHMg dGhlIG9sZAogcmVsZmlsZWxvY2F0b3IKCldpdGggdGhpcyBjaGFuZ2UsIG1kY3JlYXRlIHJl Y2VpdmVzIHRoZSBvbGQgcmVsZmlsZWxvY2F0b3IgYWxvbmcKd2l0aCB0aGUgbmV3IGZvciBv cGVyYXRpb25zIHRoYXQgY3JlYXRlIGEgbmV3IGZpbGUgZm9yIGFuIGV4aXN0aW5nCnJlbGF0 aW9uLgoKVGhpcyBpcyByZXF1aXJlZCBmb3IgdGRlX2hlYXAgaW4gcGdfdGRlLgotLS0KIHNy Yy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbV9oYW5kbGVyLmMgfCAxMCArKysrKystLS0t CiBzcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS94bG9ndXRpbHMuYyAgIHwgIDIgKy0KIHNy Yy9iYWNrZW5kL2NhdGFsb2cvaGVhcC5jICAgICAgICAgICAgICAgfCAgMiArLQogc3JjL2Jh Y2tlbmQvY2F0YWxvZy9pbmRleC5jICAgICAgICAgICAgICB8ICAyICstCiBzcmMvYmFja2Vu ZC9jYXRhbG9nL3N0b3JhZ2UuYyAgICAgICAgICAgIHwgIDggKysrKy0tLS0KIHNyYy9iYWNr ZW5kL2NvbW1hbmRzL3NlcXVlbmNlLmMgICAgICAgICAgfCAgMiArLQogc3JjL2JhY2tlbmQv Y29tbWFuZHMvdGFibGVjbWRzLmMgICAgICAgICB8ICA0ICsrLS0KIHNyYy9iYWNrZW5kL3N0 b3JhZ2UvYnVmZmVyL2J1Zm1nci5jICAgICAgfCAgNyArKysrLS0tCiBzcmMvYmFja2VuZC9z dG9yYWdlL3NtZ3IvbWQuYyAgICAgICAgICAgIHwgIDIgKy0KIHNyYy9iYWNrZW5kL3N0b3Jh Z2Uvc21nci9zbWdyLmMgICAgICAgICAgfCAgNCArKy0tCiBzcmMvYmFja2VuZC91dGlscy9j YWNoZS9yZWxjYWNoZS5jICAgICAgIHwgIDIgKy0KIHNyYy9pbmNsdWRlL2NhdGFsb2cvc3Rv cmFnZS5oICAgICAgICAgICAgfCAgMyArKy0KIHNyYy9pbmNsdWRlL3N0b3JhZ2UvbWQuaCAg ICAgICAgICAgICAgICAgfCAgMiArLQogc3JjL2luY2x1ZGUvc3RvcmFnZS9zbWdyLmggICAg ICAgICAgICAgICB8ICA0ICsrLS0KIDE0IGZpbGVzIGNoYW5nZWQsIDI5IGluc2VydGlvbnMo KyksIDI1IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9o ZWFwL2hlYXBhbV9oYW5kbGVyLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9oZWFwYW1f aGFuZGxlci5jCmluZGV4IGU3ODY4MmMzY2VmLi45NjQ2M2QxYmIxNCAxMDA2NDQKLS0tIGEv c3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvaGVhcGFtX2hhbmRsZXIuYworKysgYi9zcmMvYmFj a2VuZC9hY2Nlc3MvaGVhcC9oZWFwYW1faGFuZGxlci5jCkBAIC01ODQsNiArNTg0LDggQEAg aGVhcGFtX3JlbGF0aW9uX3NldF9uZXdfZmlsZWxvY2F0b3IoUmVsYXRpb24gcmVsLAogewog CVNNZ3JSZWxhdGlvbiBzcmVsOwogCisJUmVsRmlsZUxvY2F0b3Igb2xkbG9jYXRvciA9IHJl bC0+cmRfbG9jYXRvcjsKKwogCS8qCiAJICogSW5pdGlhbGl6ZSB0byB0aGUgbWluaW11bSBY SUQgdGhhdCBjb3VsZCBwdXQgdHVwbGVzIGluIHRoZSB0YWJsZS4gV2UKIAkgKiBrbm93IHRo YXQgbm8geGFjdHMgb2xkZXIgdGhhbiBSZWNlbnRYbWluIGFyZSBzdGlsbCBydW5uaW5nLCBz byB0aGF0CkBAIC02MDEsNyArNjAzLDcgQEAgaGVhcGFtX3JlbGF0aW9uX3NldF9uZXdfZmls ZWxvY2F0b3IoUmVsYXRpb24gcmVsLAogCSAqLwogCSptaW5tdWx0aSA9IEdldE9sZGVzdE11 bHRpWGFjdElkKCk7CiAKLQlzcmVsID0gUmVsYXRpb25DcmVhdGVTdG9yYWdlKCpuZXdybG9j YXRvciwgcGVyc2lzdGVuY2UsIHRydWUpOworCXNyZWwgPSBSZWxhdGlvbkNyZWF0ZVN0b3Jh Z2Uob2xkbG9jYXRvciwgKm5ld3Jsb2NhdG9yLCBwZXJzaXN0ZW5jZSwgdHJ1ZSk7CiAKIAkv KgogCSAqIElmIHJlcXVpcmVkLCBzZXQgdXAgYW4gaW5pdCBmb3JrIGZvciBhbiB1bmxvZ2dl ZCB0YWJsZSBzbyB0aGF0IGl0IGNhbgpAQCAtNjExLDcgKzYxMyw3IEBAIGhlYXBhbV9yZWxh dGlvbl9zZXRfbmV3X2ZpbGVsb2NhdG9yKFJlbGF0aW9uIHJlbCwKIAl7CiAJCUFzc2VydChy ZWwtPnJkX3JlbC0+cmVsa2luZCA9PSBSRUxLSU5EX1JFTEFUSU9OIHx8CiAJCQkgICByZWwt PnJkX3JlbC0+cmVsa2luZCA9PSBSRUxLSU5EX1RPQVNUVkFMVUUpOwotCQlzbWdyY3JlYXRl KHNyZWwsIElOSVRfRk9SS05VTSwgZmFsc2UpOworCQlzbWdyY3JlYXRlKG9sZGxvY2F0b3Is IHNyZWwsIElOSVRfRk9SS05VTSwgZmFsc2UpOwogCQlsb2dfc21ncmNyZWF0ZShuZXdybG9j YXRvciwgSU5JVF9GT1JLTlVNKTsKIAl9CiAKQEAgLTY0NCw3ICs2NDYsNyBAQCBoZWFwYW1f cmVsYXRpb25fY29weV9kYXRhKFJlbGF0aW9uIHJlbCwgY29uc3QgUmVsRmlsZUxvY2F0b3Ig Km5ld3Jsb2NhdG9yKQogCSAqIE5PVEU6IGFueSBjb25mbGljdCBpbiByZWxmaWxlbnVtYmVy IHZhbHVlIHdpbGwgYmUgY2F1Z2h0IGluCiAJICogUmVsYXRpb25DcmVhdGVTdG9yYWdlKCku CiAJICovCi0JZHN0cmVsID0gUmVsYXRpb25DcmVhdGVTdG9yYWdlKCpuZXdybG9jYXRvciwg cmVsLT5yZF9yZWwtPnJlbHBlcnNpc3RlbmNlLCB0cnVlKTsKKwlkc3RyZWwgPSBSZWxhdGlv bkNyZWF0ZVN0b3JhZ2UocmVsLT5yZF9sb2NhdG9yLCAqbmV3cmxvY2F0b3IsIHJlbC0+cmRf cmVsLT5yZWxwZXJzaXN0ZW5jZSwgdHJ1ZSk7CiAKIAkvKiBjb3B5IG1haW4gZm9yayAqLwog CVJlbGF0aW9uQ29weVN0b3JhZ2UoUmVsYXRpb25HZXRTbWdyKHJlbCksIGRzdHJlbCwgTUFJ Tl9GT1JLTlVNLApAQCAtNjU2LDcgKzY1OCw3IEBAIGhlYXBhbV9yZWxhdGlvbl9jb3B5X2Rh dGEoUmVsYXRpb24gcmVsLCBjb25zdCBSZWxGaWxlTG9jYXRvciAqbmV3cmxvY2F0b3IpCiAJ ewogCQlpZiAoc21ncmV4aXN0cyhSZWxhdGlvbkdldFNtZ3IocmVsKSwgZm9ya051bSkpCiAJ CXsKLQkJCXNtZ3JjcmVhdGUoZHN0cmVsLCBmb3JrTnVtLCBmYWxzZSk7CisJCQlzbWdyY3Jl YXRlKHJlbC0+cmRfbG9jYXRvciwgZHN0cmVsLCBmb3JrTnVtLCBmYWxzZSk7CiAKIAkJCS8q CiAJCQkgKiBXQUwgbG9nIGNyZWF0aW9uIGlmIHRoZSByZWxhdGlvbiBpcyBwZXJzaXN0ZW50 LCBvciB0aGlzIGlzIHRoZQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5z YW0veGxvZ3V0aWxzLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS94bG9ndXRpbHMu YwppbmRleCBjMzg5YjI3Zjc3ZC4uMjE3OWQyZjczZmEgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNr ZW5kL2FjY2Vzcy90cmFuc2FtL3hsb2d1dGlscy5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vz cy90cmFuc2FtL3hsb2d1dGlscy5jCkBAIC00ODcsNyArNDg3LDcgQEAgWExvZ1JlYWRCdWZm ZXJFeHRlbmRlZChSZWxGaWxlTG9jYXRvciBybG9jYXRvciwgRm9ya051bWJlciBmb3JrbnVt LAogCSAqIGZpbGVzeXN0ZW0gbG9zZXMgYW4gaW5vZGUgZHVyaW5nIGEgY3Jhc2guICBCZXR0 ZXIgdG8gd3JpdGUgdGhlIGRhdGEKIAkgKiB1bnRpbCB3ZSBhcmUgYWN0dWFsbHkgdG9sZCB0 byBkZWxldGUgdGhlIGZpbGUuKQogCSAqLwotCXNtZ3JjcmVhdGUoc21nciwgZm9ya251bSwg dHJ1ZSk7CisJc21ncmNyZWF0ZShybG9jYXRvciwgc21nciwgZm9ya251bSwgdHJ1ZSk7CiAK IAlsYXN0YmxvY2sgPSBzbWdybmJsb2NrcyhzbWdyLCBmb3JrbnVtKTsKIApkaWZmIC0tZ2l0 IGEvc3JjL2JhY2tlbmQvY2F0YWxvZy9oZWFwLmMgYi9zcmMvYmFja2VuZC9jYXRhbG9nL2hl YXAuYwppbmRleCBiZDM1NTRjMGJmZC4uMjUxZDIyZjUwYjIgMTAwNjQ0Ci0tLSBhL3NyYy9i YWNrZW5kL2NhdGFsb2cvaGVhcC5jCisrKyBiL3NyYy9iYWNrZW5kL2NhdGFsb2cvaGVhcC5j CkBAIC0zODYsNyArMzg2LDcgQEAgaGVhcF9jcmVhdGUoY29uc3QgY2hhciAqcmVsbmFtZSwK IAkJCQkJCQkJCQkJICAgcmVscGVyc2lzdGVuY2UsCiAJCQkJCQkJCQkJCSAgIHJlbGZyb3pl bnhpZCwgcmVsbWlubXhpZCk7CiAJCWVsc2UgaWYgKFJFTEtJTkRfSEFTX1NUT1JBR0UocmVs LT5yZF9yZWwtPnJlbGtpbmQpKQotCQkJUmVsYXRpb25DcmVhdGVTdG9yYWdlKHJlbC0+cmRf bG9jYXRvciwgcmVscGVyc2lzdGVuY2UsIHRydWUpOworCQkJUmVsYXRpb25DcmVhdGVTdG9y YWdlKHJlbC0+cmRfbG9jYXRvciwgcmVsLT5yZF9sb2NhdG9yLCByZWxwZXJzaXN0ZW5jZSwg dHJ1ZSk7CiAJCWVsc2UKIAkJCUFzc2VydChmYWxzZSk7CiAJfQpkaWZmIC0tZ2l0IGEvc3Jj L2JhY2tlbmQvY2F0YWxvZy9pbmRleC5jIGIvc3JjL2JhY2tlbmQvY2F0YWxvZy9pbmRleC5j CmluZGV4IDAyMmI5Yjk5YjEzLi5jYzk5ZDQ1ZjJmZiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tl bmQvY2F0YWxvZy9pbmRleC5jCisrKyBiL3NyYy9iYWNrZW5kL2NhdGFsb2cvaW5kZXguYwpA QCAtMzA4OSw3ICszMDg5LDcgQEAgaW5kZXhfYnVpbGQoUmVsYXRpb24gaGVhcFJlbGF0aW9u LAogCWlmIChpbmRleFJlbGF0aW9uLT5yZF9yZWwtPnJlbHBlcnNpc3RlbmNlID09IFJFTFBF UlNJU1RFTkNFX1VOTE9HR0VEICYmCiAJCSFzbWdyZXhpc3RzKFJlbGF0aW9uR2V0U21ncihp bmRleFJlbGF0aW9uKSwgSU5JVF9GT1JLTlVNKSkKIAl7Ci0JCXNtZ3JjcmVhdGUoUmVsYXRp b25HZXRTbWdyKGluZGV4UmVsYXRpb24pLCBJTklUX0ZPUktOVU0sIGZhbHNlKTsKKwkJc21n cmNyZWF0ZShpbmRleFJlbGF0aW9uLT5yZF9sb2NhdG9yLCBSZWxhdGlvbkdldFNtZ3IoaW5k ZXhSZWxhdGlvbiksIElOSVRfRk9SS05VTSwgZmFsc2UpOwogCQlsb2dfc21ncmNyZWF0ZSgm aW5kZXhSZWxhdGlvbi0+cmRfbG9jYXRvciwgSU5JVF9GT1JLTlVNKTsKIAkJaW5kZXhSZWxh dGlvbi0+cmRfaW5kYW0tPmFtYnVpbGRlbXB0eShpbmRleFJlbGF0aW9uKTsKIAl9CmRpZmYg LS1naXQgYS9zcmMvYmFja2VuZC9jYXRhbG9nL3N0b3JhZ2UuYyBiL3NyYy9iYWNrZW5kL2Nh dGFsb2cvc3RvcmFnZS5jCmluZGV4IDYyNGVkNDFiYmYzLi41OWZhMDFkZWNjNSAxMDA2NDQK LS0tIGEvc3JjL2JhY2tlbmQvY2F0YWxvZy9zdG9yYWdlLmMKKysrIGIvc3JjL2JhY2tlbmQv Y2F0YWxvZy9zdG9yYWdlLmMKQEAgLTExOCw3ICsxMTgsNyBAQCBBZGRQZW5kaW5nU3luYyhj b25zdCBSZWxGaWxlTG9jYXRvciAqcmxvY2F0b3IpCiAgKiBwYXNzIHJlZ2lzdGVyX2RlbGV0 ZSA9IGZhbHNlLgogICovCiBTTWdyUmVsYXRpb24KLVJlbGF0aW9uQ3JlYXRlU3RvcmFnZShS ZWxGaWxlTG9jYXRvciBybG9jYXRvciwgY2hhciByZWxwZXJzaXN0ZW5jZSwKK1JlbGF0aW9u Q3JlYXRlU3RvcmFnZShSZWxGaWxlTG9jYXRvciBvbGRsb2NhdG9yLCBSZWxGaWxlTG9jYXRv ciBybG9jYXRvciwgY2hhciByZWxwZXJzaXN0ZW5jZSwKIAkJCQkJICBib29sIHJlZ2lzdGVy X2RlbGV0ZSkKIHsKIAlTTWdyUmVsYXRpb24gc3JlbDsKQEAgLTE0Nyw3ICsxNDcsNyBAQCBS ZWxhdGlvbkNyZWF0ZVN0b3JhZ2UoUmVsRmlsZUxvY2F0b3IgcmxvY2F0b3IsIGNoYXIgcmVs cGVyc2lzdGVuY2UsCiAJfQogCiAJc3JlbCA9IHNtZ3JvcGVuKHJsb2NhdG9yLCBwcm9jTnVt YmVyKTsKLQlzbWdyY3JlYXRlKHNyZWwsIE1BSU5fRk9SS05VTSwgZmFsc2UpOworCXNtZ3Jj cmVhdGUob2xkbG9jYXRvciwgc3JlbCwgTUFJTl9GT1JLTlVNLCBmYWxzZSk7CiAKIAlpZiAo bmVlZHNfd2FsKQogCQlsb2dfc21ncmNyZWF0ZSgmc3JlbC0+c21ncl9ybG9jYXRvci5sb2Nh dG9yLCBNQUlOX0ZPUktOVU0pOwpAQCAtOTc2LDcgKzk3Niw3IEBAIHNtZ3JfcmVkbyhYTG9n UmVhZGVyU3RhdGUgKnJlY29yZCkKIAkJU01nclJlbGF0aW9uIHJlbG47CiAKIAkJcmVsbiA9 IHNtZ3JvcGVuKHhscmVjLT5ybG9jYXRvciwgSU5WQUxJRF9QUk9DX05VTUJFUik7Ci0JCXNt Z3JjcmVhdGUocmVsbiwgeGxyZWMtPmZvcmtOdW0sIHRydWUpOworCQlzbWdyY3JlYXRlKHhs cmVjLT5ybG9jYXRvciwgcmVsbiwgeGxyZWMtPmZvcmtOdW0sIHRydWUpOwogCX0KIAllbHNl IGlmIChpbmZvID09IFhMT0dfU01HUl9UUlVOQ0FURSkKIAl7CkBAIC05OTcsNyArOTk3LDcg QEAgc21ncl9yZWRvKFhMb2dSZWFkZXJTdGF0ZSAqcmVjb3JkKQogCQkgKiBYTG9nUmVhZEJ1 ZmZlckZvclJlZG8sIHdlIHByZWZlciB0byByZWNyZWF0ZSB0aGUgcmVsIGFuZCByZXBsYXkg dGhlCiAJCSAqIGxvZyBhcyBiZXN0IHdlIGNhbiB1bnRpbCB0aGUgZHJvcCBpcyBzZWVuLgog CQkgKi8KLQkJc21ncmNyZWF0ZShyZWxuLCBNQUlOX0ZPUktOVU0sIHRydWUpOworCQlzbWdy Y3JlYXRlKHhscmVjLT5ybG9jYXRvciwgcmVsbiwgTUFJTl9GT1JLTlVNLCB0cnVlKTsKIAog CQkvKgogCQkgKiBCZWZvcmUgd2UgcGVyZm9ybSB0aGUgdHJ1bmNhdGlvbiwgdXBkYXRlIG1p bmltdW0gcmVjb3ZlcnkgcG9pbnQgdG8KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NvbW1h bmRzL3NlcXVlbmNlLmMgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9zZXF1ZW5jZS5jCmluZGV4 IDRiN2M1MTEzYWFiLi5kOGM1NjBhMTFiMiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY29t bWFuZHMvc2VxdWVuY2UuYworKysgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9zZXF1ZW5jZS5j CkBAIC0zNDQsNyArMzQ0LDcgQEAgZmlsbF9zZXFfd2l0aF9kYXRhKFJlbGF0aW9uIHJlbCwg SGVhcFR1cGxlIHR1cGxlKQogCQlTTWdyUmVsYXRpb24gc3JlbDsKIAogCQlzcmVsID0gc21n cm9wZW4ocmVsLT5yZF9sb2NhdG9yLCBJTlZBTElEX1BST0NfTlVNQkVSKTsKLQkJc21ncmNy ZWF0ZShzcmVsLCBJTklUX0ZPUktOVU0sIGZhbHNlKTsKKwkJc21ncmNyZWF0ZShyZWwtPnJk X2xvY2F0b3IsIHNyZWwsIElOSVRfRk9SS05VTSwgZmFsc2UpOwogCQlsb2dfc21ncmNyZWF0 ZSgmcmVsLT5yZF9sb2NhdG9yLCBJTklUX0ZPUktOVU0pOwogCQlmaWxsX3NlcV9mb3JrX3dp dGhfZGF0YShyZWwsIHR1cGxlLCBJTklUX0ZPUktOVU0pOwogCQlGbHVzaFJlbGF0aW9uQnVm ZmVycyhyZWwpOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvdGFibGVjbWRz LmMgYi9zcmMvYmFja2VuZC9jb21tYW5kcy90YWJsZWNtZHMuYwppbmRleCA1OTE1NmExYzFm Ni4uN2QwZDlkM2VmYTkgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3RhYmxl Y21kcy5jCisrKyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3RhYmxlY21kcy5jCkBAIC0xNjMx Myw3ICsxNjMxMyw3IEBAIGluZGV4X2NvcHlfZGF0YShSZWxhdGlvbiByZWwsIFJlbEZpbGVM b2NhdG9yIG5ld3Jsb2NhdG9yKQogCSAqIE5PVEU6IGFueSBjb25mbGljdCBpbiByZWxmaWxl bnVtYmVyIHZhbHVlIHdpbGwgYmUgY2F1Z2h0IGluCiAJICogUmVsYXRpb25DcmVhdGVTdG9y YWdlKCkuCiAJICovCi0JZHN0cmVsID0gUmVsYXRpb25DcmVhdGVTdG9yYWdlKG5ld3Jsb2Nh dG9yLCByZWwtPnJkX3JlbC0+cmVscGVyc2lzdGVuY2UsIHRydWUpOworCWRzdHJlbCA9IFJl bGF0aW9uQ3JlYXRlU3RvcmFnZShyZWwtPnJkX2xvY2F0b3IsIG5ld3Jsb2NhdG9yLCByZWwt PnJkX3JlbC0+cmVscGVyc2lzdGVuY2UsIHRydWUpOwogCiAJLyogY29weSBtYWluIGZvcmsg Ki8KIAlSZWxhdGlvbkNvcHlTdG9yYWdlKFJlbGF0aW9uR2V0U21ncihyZWwpLCBkc3RyZWws IE1BSU5fRk9SS05VTSwKQEAgLTE2MzI1LDcgKzE2MzI1LDcgQEAgaW5kZXhfY29weV9kYXRh KFJlbGF0aW9uIHJlbCwgUmVsRmlsZUxvY2F0b3IgbmV3cmxvY2F0b3IpCiAJewogCQlpZiAo c21ncmV4aXN0cyhSZWxhdGlvbkdldFNtZ3IocmVsKSwgZm9ya051bSkpCiAJCXsKLQkJCXNt Z3JjcmVhdGUoZHN0cmVsLCBmb3JrTnVtLCBmYWxzZSk7CisJCQlzbWdyY3JlYXRlKHJlbC0+ cmRfbG9jYXRvciwgZHN0cmVsLCBmb3JrTnVtLCBmYWxzZSk7CiAKIAkJCS8qCiAJCQkgKiBX QUwgbG9nIGNyZWF0aW9uIGlmIHRoZSByZWxhdGlvbiBpcyBwZXJzaXN0ZW50LCBvciB0aGlz IGlzIHRoZQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9idWZmZXIvYnVmbWdy LmMgYi9zcmMvYmFja2VuZC9zdG9yYWdlL2J1ZmZlci9idWZtZ3IuYwppbmRleCA3OTE1ZWQ2 MjRjMS4uZWNhY2I1ZmI1MGEgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3N0b3JhZ2UvYnVm ZmVyL2J1Zm1nci5jCisrKyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvYnVmZmVyL2J1Zm1nci5j CkBAIC05NDMsNyArOTQzLDcgQEAgRXh0ZW5kQnVmZmVyZWRSZWxUbyhCdWZmZXJNYW5hZ2Vy UmVsYXRpb24gYm1yLAogCiAJCS8qIHJlY2hlY2ssIGZvcmsgbWlnaHQgaGF2ZSBiZWVuIGNy ZWF0ZWQgY29uY3VycmVudGx5ICovCiAJCWlmICghc21ncmV4aXN0cyhibXIuc21nciwgZm9y aykpCi0JCQlzbWdyY3JlYXRlKGJtci5zbWdyLCBmb3JrLCBmbGFncyAmIEVCX1BFUkZPUk1J TkdfUkVDT1ZFUlkpOworCQkJc21ncmNyZWF0ZShibXIucmVsLT5yZF9sb2NhdG9yLCBibXIu c21nciwgZm9yaywgZmxhZ3MgJiBFQl9QRVJGT1JNSU5HX1JFQ09WRVJZKTsKIAogCQlVbmxv Y2tSZWxhdGlvbkZvckV4dGVuc2lvbihibXIucmVsLCBFeGNsdXNpdmVMb2NrKTsKIAl9CkBA IC00NzU0LDcgKzQ3NTQsNyBAQCBDcmVhdGVBbmRDb3B5UmVsYXRpb25EYXRhKFJlbEZpbGVM b2NhdG9yIHNyY19ybG9jYXRvciwKIAkgKiBkaXJlY3RvcnkuICBUaGVyZWZvcmUsIGVhY2gg aW5kaXZpZHVhbCByZWxhdGlvbiBkb2Vzbid0IG5lZWQgdG8gYmUKIAkgKiByZWdpc3RlcmVk IGZvciBjbGVhbnVwLgogCSAqLwotCVJlbGF0aW9uQ3JlYXRlU3RvcmFnZShkc3RfcmxvY2F0 b3IsIHJlbHBlcnNpc3RlbmNlLCBmYWxzZSk7CisJUmVsYXRpb25DcmVhdGVTdG9yYWdlKHNy Y19ybG9jYXRvciwgZHN0X3Jsb2NhdG9yLCByZWxwZXJzaXN0ZW5jZSwgZmFsc2UpOwogCiAJ LyogY29weSBtYWluIGZvcmsuICovCiAJUmVsYXRpb25Db3B5U3RvcmFnZVVzaW5nQnVmZmVy KHNyY19ybG9jYXRvciwgZHN0X3Jsb2NhdG9yLCBNQUlOX0ZPUktOVU0sCkBAIC00NzY2LDcg KzQ3NjYsOCBAQCBDcmVhdGVBbmRDb3B5UmVsYXRpb25EYXRhKFJlbEZpbGVMb2NhdG9yIHNy Y19ybG9jYXRvciwKIAl7CiAJCWlmIChzbWdyZXhpc3RzKHNyY19yZWwsIGZvcmtOdW0pKQog CQl7Ci0JCQlzbWdyY3JlYXRlKGRzdF9yZWwsIGZvcmtOdW0sIGZhbHNlKTsKKwkJCS8qIFRP RE86IGZvciBzdXJlPyAqLworCQkJc21ncmNyZWF0ZShzcmNfcmVsLT5zbWdyX3Jsb2NhdG9y LmxvY2F0b3IsIGRzdF9yZWwsIGZvcmtOdW0sIGZhbHNlKTsKIAogCQkJLyoKIAkJCSAqIFdB TCBsb2cgY3JlYXRpb24gaWYgdGhlIHJlbGF0aW9uIGlzIHBlcnNpc3RlbnQsIG9yIHRoaXMg aXMgdGhlCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9zdG9yYWdlL3NtZ3IvbWQuYyBiL3Ny Yy9iYWNrZW5kL3N0b3JhZ2Uvc21nci9tZC5jCmluZGV4IDVhMjA3MmUwODE2Li4xNzY2YmJl MWU1NyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9zbWdyL21kLmMKKysrIGIv c3JjL2JhY2tlbmQvc3RvcmFnZS9zbWdyL21kLmMKQEAgLTI0NSw3ICsyNDUsNyBAQCBtZGV4 aXN0cyhTTWdyUmVsYXRpb24gcmVsbiwgRm9ya051bWJlciBmb3JrbnVtKQogICogSWYgaXNS ZWRvIGlzIHRydWUsIGl0J3Mgb2theSBmb3IgdGhlIHJlbGF0aW9uIHRvIGV4aXN0IGFscmVh ZHkuCiAgKi8KIHZvaWQKLW1kY3JlYXRlKFNNZ3JSZWxhdGlvbiByZWxuLCBGb3JrTnVtYmVy IGZvcmtudW0sIGJvb2wgaXNSZWRvKQorbWRjcmVhdGUoUmVsRmlsZUxvY2F0b3IgLyogcmVs biAqLywgU01nclJlbGF0aW9uIHJlbG4sIEZvcmtOdW1iZXIgZm9ya251bSwgYm9vbCBpc1Jl ZG8pCiB7CiAJTWRTTWdyUmVsYXRpb24gbWRyZWxuID0gKE1kU01nclJlbGF0aW9uKSByZWxu OwogCU1kZmRWZWMgICAgKm1kZmQ7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9zdG9yYWdl L3NtZ3Ivc21nci5jIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9zbWdyL3NtZ3IuYwppbmRleCA5 YjNlNjNhZmY1NS4uMDQ5OGZkNmMzMTcgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3N0b3Jh Z2Uvc21nci9zbWdyLmMKKysrIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9zbWdyL3NtZ3IuYwpA QCAtNDA4LDkgKzQwOCw5IEBAIHNtZ3JleGlzdHMoU01nclJlbGF0aW9uIHJlbG4sIEZvcmtO dW1iZXIgZm9ya251bSkKICAqIHRvIGJlIGNyZWF0ZWQuCiAgKi8KIHZvaWQKLXNtZ3JjcmVh dGUoU01nclJlbGF0aW9uIHJlbG4sIEZvcmtOdW1iZXIgZm9ya251bSwgYm9vbCBpc1JlZG8p CitzbWdyY3JlYXRlKFJlbEZpbGVMb2NhdG9yIHJlbG9sZCwgU01nclJlbGF0aW9uIHJlbG4s IEZvcmtOdW1iZXIgZm9ya251bSwgYm9vbCBpc1JlZG8pCiB7Ci0Jc21ncnN3W3JlbG4tPnNt Z3Jfd2hpY2hdLnNtZ3JfY3JlYXRlKHJlbG4sIGZvcmtudW0sIGlzUmVkbyk7CisJc21ncnN3 W3JlbG4tPnNtZ3Jfd2hpY2hdLnNtZ3JfY3JlYXRlKHJlbG9sZCwgcmVsbiwgZm9ya251bSwg aXNSZWRvKTsKIH0KIAogLyoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL2NhY2hl L3JlbGNhY2hlLmMgYi9zcmMvYmFja2VuZC91dGlscy9jYWNoZS9yZWxjYWNoZS5jCmluZGV4 IGQxYWU3NjFiM2Y2Li5kYjNlMjQxNDA0ZCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRp bHMvY2FjaGUvcmVsY2FjaGUuYworKysgYi9zcmMvYmFja2VuZC91dGlscy9jYWNoZS9yZWxj YWNoZS5jCkBAIC0zODI5LDcgKzM4MjksNyBAQCBSZWxhdGlvblNldE5ld1JlbGZpbGVudW1i ZXIoUmVsYXRpb24gcmVsYXRpb24sIGNoYXIgcGVyc2lzdGVuY2UpCiAJCS8qIGhhbmRsZSB0 aGVzZSBkaXJlY3RseSwgYXQgbGVhc3QgZm9yIG5vdyAqLwogCQlTTWdyUmVsYXRpb24gc3Jl bDsKIAotCQlzcmVsID0gUmVsYXRpb25DcmVhdGVTdG9yYWdlKG5ld3Jsb2NhdG9yLCBwZXJz aXN0ZW5jZSwgdHJ1ZSk7CisJCXNyZWwgPSBSZWxhdGlvbkNyZWF0ZVN0b3JhZ2UocmVsYXRp b24tPnJkX2xvY2F0b3IsIG5ld3Jsb2NhdG9yLCBwZXJzaXN0ZW5jZSwgdHJ1ZSk7CiAJCXNt Z3JjbG9zZShzcmVsKTsKIAl9CiAJZWxzZQpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvY2F0 YWxvZy9zdG9yYWdlLmggYi9zcmMvaW5jbHVkZS9jYXRhbG9nL3N0b3JhZ2UuaAppbmRleCBi YTk5MjI1YjBhMy4uZWNjM2I3OTJmNGYgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2NhdGFs b2cvc3RvcmFnZS5oCisrKyBiL3NyYy9pbmNsdWRlL2NhdGFsb2cvc3RvcmFnZS5oCkBAIC0y Miw3ICsyMiw4IEBACiAvKiBHVUMgdmFyaWFibGVzICovCiBleHRlcm4gUEdETExJTVBPUlQg aW50IHdhbF9za2lwX3RocmVzaG9sZDsKIAotZXh0ZXJuIFNNZ3JSZWxhdGlvbiBSZWxhdGlv bkNyZWF0ZVN0b3JhZ2UoUmVsRmlsZUxvY2F0b3IgcmxvY2F0b3IsCitleHRlcm4gU01nclJl bGF0aW9uIFJlbGF0aW9uQ3JlYXRlU3RvcmFnZShSZWxGaWxlTG9jYXRvciBvbGRsb2NhdG9y LAorCQkJCQkJCQkJCSAgUmVsRmlsZUxvY2F0b3IgcmxvY2F0b3IsCiAJCQkJCQkJCQkJICBj aGFyIHJlbHBlcnNpc3RlbmNlLAogCQkJCQkJCQkJCSAgYm9vbCByZWdpc3Rlcl9kZWxldGUp OwogZXh0ZXJuIHZvaWQgUmVsYXRpb25Ecm9wU3RvcmFnZShSZWxhdGlvbiByZWwpOwpkaWZm IC0tZ2l0IGEvc3JjL2luY2x1ZGUvc3RvcmFnZS9tZC5oIGIvc3JjL2luY2x1ZGUvc3RvcmFn ZS9tZC5oCmluZGV4IGRhMWQxZDMzOWJlLi42MWMwZTg1ZGQ3NCAxMDA2NDQKLS0tIGEvc3Jj L2luY2x1ZGUvc3RvcmFnZS9tZC5oCisrKyBiL3NyYy9pbmNsdWRlL3N0b3JhZ2UvbWQuaApA QCAtMjcsNyArMjcsNyBAQCBleHRlcm4gU01ncklkIE1kU01ncklkOwogZXh0ZXJuIHZvaWQg bWRpbml0KHZvaWQpOwogZXh0ZXJuIHZvaWQgbWRvcGVuKFNNZ3JSZWxhdGlvbiByZWxuKTsK IGV4dGVybiB2b2lkIG1kY2xvc2UoU01nclJlbGF0aW9uIHJlbG4sIEZvcmtOdW1iZXIgZm9y a251bSk7Ci1leHRlcm4gdm9pZCBtZGNyZWF0ZShTTWdyUmVsYXRpb24gcmVsbiwgRm9ya051 bWJlciBmb3JrbnVtLCBib29sIGlzUmVkbyk7CitleHRlcm4gdm9pZCBtZGNyZWF0ZShSZWxG aWxlTG9jYXRvciByZWxvbGQsIFNNZ3JSZWxhdGlvbiByZWxuLCBGb3JrTnVtYmVyIGZvcmtu dW0sIGJvb2wgaXNSZWRvKTsKIGV4dGVybiBib29sIG1kZXhpc3RzKFNNZ3JSZWxhdGlvbiBy ZWxuLCBGb3JrTnVtYmVyIGZvcmtudW0pOwogZXh0ZXJuIHZvaWQgbWR1bmxpbmsoUmVsRmls ZUxvY2F0b3JCYWNrZW5kIHJsb2NhdG9yLCBGb3JrTnVtYmVyIGZvcmtudW0sIGJvb2wgaXNS ZWRvKTsKIGV4dGVybiB2b2lkIG1kZXh0ZW5kKFNNZ3JSZWxhdGlvbiByZWxuLCBGb3JrTnVt YmVyIGZvcmtudW0sCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9zdG9yYWdlL3NtZ3IuaCBi L3NyYy9pbmNsdWRlL3N0b3JhZ2Uvc21nci5oCmluZGV4IDYyOWM3OGNmZGRlLi41YjJiNmRl OTFjNCAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvc3RvcmFnZS9zbWdyLmgKKysrIGIvc3Jj L2luY2x1ZGUvc3RvcmFnZS9zbWdyLmgKQEAgLTg3LDcgKzg3LDcgQEAgdHlwZWRlZiBzdHJ1 Y3QgZl9zbWdyCiAJdm9pZAkJKCpzbWdyX3NodXRkb3duKSAodm9pZCk7CS8qIG1heSBiZSBO VUxMICovCiAJdm9pZAkJKCpzbWdyX29wZW4pIChTTWdyUmVsYXRpb24gcmVsbik7CiAJdm9p ZAkJKCpzbWdyX2Nsb3NlKSAoU01nclJlbGF0aW9uIHJlbG4sIEZvcmtOdW1iZXIgZm9ya251 bSk7Ci0Jdm9pZAkJKCpzbWdyX2NyZWF0ZSkgKFNNZ3JSZWxhdGlvbiByZWxuLCBGb3JrTnVt YmVyIGZvcmtudW0sCisJdm9pZAkJKCpzbWdyX2NyZWF0ZSkgKFJlbEZpbGVMb2NhdG9yIHJl bG9sZCwgU01nclJlbGF0aW9uIHJlbG4sIEZvcmtOdW1iZXIgZm9ya251bSwKIAkJCQkJCQkJ Ym9vbCBpc1JlZG8pOwogCWJvb2wJCSgqc21ncl9leGlzdHMpIChTTWdyUmVsYXRpb24gcmVs biwgRm9ya051bWJlciBmb3JrbnVtKTsKIAl2b2lkCQkoKnNtZ3JfdW5saW5rKSAoUmVsRmls ZUxvY2F0b3JCYWNrZW5kIHJsb2NhdG9yLCBGb3JrTnVtYmVyIGZvcmtudW0sCkBAIC0xMjgs NyArMTI4LDcgQEAgZXh0ZXJuIHZvaWQgc21ncmRlc3Ryb3lhbGwodm9pZCk7CiBleHRlcm4g dm9pZCBzbWdycmVsZWFzZShTTWdyUmVsYXRpb24gcmVsbik7CiBleHRlcm4gdm9pZCBzbWdy cmVsZWFzZWFsbCh2b2lkKTsKIGV4dGVybiB2b2lkIHNtZ3JyZWxlYXNlcmVsbG9jYXRvcihS ZWxGaWxlTG9jYXRvckJhY2tlbmQgcmxvY2F0b3IpOwotZXh0ZXJuIHZvaWQgc21ncmNyZWF0 ZShTTWdyUmVsYXRpb24gcmVsbiwgRm9ya051bWJlciBmb3JrbnVtLCBib29sIGlzUmVkbyk7 CitleHRlcm4gdm9pZCBzbWdyY3JlYXRlKFJlbEZpbGVMb2NhdG9yIHJlbG9sZCwgU01nclJl bGF0aW9uIHJlbG4sIEZvcmtOdW1iZXIgZm9ya251bSwgYm9vbCBpc1JlZG8pOwogZXh0ZXJu IHZvaWQgc21ncmRvc3luY2FsbChTTWdyUmVsYXRpb24gKnJlbHMsIGludCBucmVscyk7CiBl eHRlcm4gdm9pZCBzbWdyZG91bmxpbmthbGwoU01nclJlbGF0aW9uICpyZWxzLCBpbnQgbnJl bHMsIGJvb2wgaXNSZWRvKTsKIGV4dGVybiB2b2lkIHNtZ3JleHRlbmQoU01nclJlbGF0aW9u IHJlbG4sIEZvcmtOdW1iZXIgZm9ya251bSwKLS0gCjIuNDcuMgoK --------------pzqHmNAXsEg2Eg5hZQblrRMV Content-Type: text/x-patch; charset=UTF-8; name="v4-0004-Add-contrib-fsync_checker.patch" Content-Disposition: attachment; filename="v4-0004-Add-contrib-fsync_checker.patch" Content-Transfer-Encoding: base64 RnJvbSA2MDhmYzAzNzdmNzgyM2Q0ZjIxZWQ4YWY2MDU4NmYwZDdjMzAxY2QwIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBUcmlzdGFuIFBhcnRpbiA8dHJpc3RhbkBuZW9uLnRl Y2g+CkRhdGU6IFdlZCwgMjAgU2VwIDIwMjMgMTQ6MjM6MzggLTA1MDAKU3ViamVjdDogW1BB VENIIHY0IDQvNl0gQWRkIGNvbnRyaWIvZnN5bmNfY2hlY2tlcgoKZnN5bmNfY2hlY2tlciBp cyBhbiBleHRlbnNpb24gd2hpY2ggb3ZlcnJpZGVzIHRoZSBnbG9iYWwgc3RvcmFnZSBtYW5h Z2VyCnRvIGNoZWNrIGZvciB2b2xhdGlsZSByZWxhdGlvbnMsIHRob3NlIHdoaWNoIGhhdmUg YmVlbiB3cml0dGVuIGJ1dCBub3QKc3luY2VkIHRvIGRpc2suCi0tLQogY29udHJpYi9NYWtl ZmlsZSAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgMSArCiBjb250cmliL2ZzeW5j X2NoZWNrZXIvZnN5bmNfY2hlY2tlci5jb250cm9sIHwgICA1ICsKIGNvbnRyaWIvZnN5bmNf Y2hlY2tlci9mc3luY19jaGVja2VyX3NtZ3IuYyAgfCAyNDkgKysrKysrKysrKysrKysrKysr KysKIGNvbnRyaWIvZnN5bmNfY2hlY2tlci9tZXNvbi5idWlsZCAgICAgICAgICAgfCAgMjIg KysKIGNvbnRyaWIvbWVzb24uYnVpbGQgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDEg Kwogc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QgICAgICAgICAgICB8ICAgMiAr CiA2IGZpbGVzIGNoYW5nZWQsIDI4MCBpbnNlcnRpb25zKCspCiBjcmVhdGUgbW9kZSAxMDA2 NDQgY29udHJpYi9mc3luY19jaGVja2VyL2ZzeW5jX2NoZWNrZXIuY29udHJvbAogY3JlYXRl IG1vZGUgMTAwNjQ0IGNvbnRyaWIvZnN5bmNfY2hlY2tlci9mc3luY19jaGVja2VyX3NtZ3Iu YwogY3JlYXRlIG1vZGUgMTAwNjQ0IGNvbnRyaWIvZnN5bmNfY2hlY2tlci9tZXNvbi5idWls ZAoKZGlmZiAtLWdpdCBhL2NvbnRyaWIvTWFrZWZpbGUgYi9jb250cmliL01ha2VmaWxlCmlu ZGV4IDk1Mjg1NWQ5YjYxLi4xYzlmMjJiMWM4NiAxMDA2NDQKLS0tIGEvY29udHJpYi9NYWtl ZmlsZQorKysgYi9jb250cmliL01ha2VmaWxlCkBAIC0xOSw2ICsxOSw3IEBAIFNVQkRJUlMg PSBcCiAJCWRpY3RfaW50CVwKIAkJZGljdF94c3luCVwKIAkJZWFydGhkaXN0YW5jZQlcCisJ CWZzeW5jX2NoZWNrZXIJXAogCQlmaWxlX2ZkdwlcCiAJCWZ1enp5c3RybWF0Y2gJXAogCQlo c3RvcmUJCVwKZGlmZiAtLWdpdCBhL2NvbnRyaWIvZnN5bmNfY2hlY2tlci9mc3luY19jaGVj a2VyLmNvbnRyb2wgYi9jb250cmliL2ZzeW5jX2NoZWNrZXIvZnN5bmNfY2hlY2tlci5jb250 cm9sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi43ZDBlMzY0MzRi ZgotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvZnN5bmNfY2hlY2tlci9mc3luY19jaGVj a2VyLmNvbnRyb2wKQEAgLTAsMCArMSw1IEBACisjIGZzeW5jX2NoZWNrZXIgZXh0ZW5zaW9u Citjb21tZW50ID0gJ1NNR1IgZXh0ZW5zaW9uIGZvciBjaGVja2luZyB2b2xhdGlsZSB3cml0 ZXMnCitkZWZhdWx0X3ZlcnNpb24gPSAnMS4wJworbW9kdWxlX3BhdGhuYW1lID0gJyRsaWJk aXIvZnN5bmNfY2hlY2tlcicKK3JlbG9jYXRhYmxlID0gdHJ1ZQpkaWZmIC0tZ2l0IGEvY29u dHJpYi9mc3luY19jaGVja2VyL2ZzeW5jX2NoZWNrZXJfc21nci5jIGIvY29udHJpYi9mc3lu Y19jaGVja2VyL2ZzeW5jX2NoZWNrZXJfc21nci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu ZGV4IDAwMDAwMDAwMDAwLi45N2FkMGY3OGRhOAotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRy aWIvZnN5bmNfY2hlY2tlci9mc3luY19jaGVja2VyX3NtZ3IuYwpAQCAtMCwwICsxLDI0OSBA QAorI2luY2x1ZGUgInBvc3RncmVzLmgiCisKKyNpbmNsdWRlICJhY2Nlc3MveGxvZy5oIgor I2luY2x1ZGUgImZtZ3IuaCIKKyNpbmNsdWRlICJtaXNjYWRtaW4uaCIKKyNpbmNsdWRlICJz dG9yYWdlL2lwYy5oIgorI2luY2x1ZGUgInN0b3JhZ2UvbHdsb2NrLmgiCisjaW5jbHVkZSAi c3RvcmFnZS9zaG1lbS5oIgorI2luY2x1ZGUgInN0b3JhZ2Uvc21nci5oIgorI2luY2x1ZGUg InN0b3JhZ2UvbWQuaCIKKyNpbmNsdWRlICJ1dGlscy9oc2VhcmNoLmgiCisKK1BHX01PRFVM RV9NQUdJQzsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKwlSZWxGaWxlTG9jYXRvciBsb2NhdG9y OworCUZvcmtOdW1iZXIJZm9ya251bTsKK30gVm9sYXRpbGVSZWxuS2V5OworCit0eXBlZGVm IHN0cnVjdAoreworCVZvbGF0aWxlUmVsbktleSBrZXk7CisJWExvZ1JlY1B0cglsc247Cit9 IFZvbGF0aWxlUmVsbkVudHJ5OworCit2b2lkCQlfUEdfaW5pdCh2b2lkKTsKKworc3RhdGlj IHZvaWQgZnN5bmNfY2hlY2tlcl9leHRlbmQoU01nclJlbGF0aW9uIHJlbG4sIEZvcmtOdW1i ZXIgZm9ya251bSwgQmxvY2tOdW1iZXIgYmxvY2tudW0sCisJCQkJCQkJCSBjb25zdCB2b2lk ICpidWZmZXIsIGJvb2wgc2tpcEZzeW5jKTsKK3N0YXRpYyB2b2lkIGZzeW5jX2NoZWNrZXJf aW1tZWRzeW5jKFNNZ3JSZWxhdGlvbiByZWxuLCBGb3JrTnVtYmVyIGZvcmtudW0pOworc3Rh dGljIHZvaWQgZnN5bmNfY2hlY2tlcl93cml0ZXYoU01nclJlbGF0aW9uIHJlbG4sIEZvcmtO dW1iZXIgZm9ya251bSwKKwkJCQkJCQkJIEJsb2NrTnVtYmVyIGJsb2NrbnVtLCBjb25zdCB2 b2lkICoqYnVmZmVycywKKwkJCQkJCQkJIEJsb2NrTnVtYmVyIG5ibG9ja3MsIGJvb2wgc2tp cEZzeW5jKTsKK3N0YXRpYyB2b2lkIGZzeW5jX2NoZWNrZXJfd3JpdGViYWNrKFNNZ3JSZWxh dGlvbiByZWxuLCBGb3JrTnVtYmVyIGZvcmtudW0sCisJCQkJCQkJCQlCbG9ja051bWJlciBi bG9ja251bSwgQmxvY2tOdW1iZXIgbmJsb2Nrcyk7CitzdGF0aWMgdm9pZCBmc3luY19jaGVj a2VyX3plcm9leHRlbmQoU01nclJlbGF0aW9uIHJlbG4sIEZvcmtOdW1iZXIgZm9ya251bSwK KwkJCQkJCQkJCSBCbG9ja051bWJlciBibG9ja251bSwgaW50IG5ibG9ja3MsIGJvb2wgc2tp cEZzeW5jKTsKKworc3RhdGljIHZvaWQgZnN5bmNfY2hlY2tlcl9jaGVja3BvaW50X2NyZWF0 ZShjb25zdCBDaGVja1BvaW50ICpjaGVja1BvaW50KTsKK3N0YXRpYyB2b2lkIGZzeW5jX2No ZWNrZXJfc2htZW1fcmVxdWVzdCh2b2lkKTsKK3N0YXRpYyB2b2lkIGZzeW5jX2NoZWNrZXJf c2htZW1fc3RhcnR1cCh2b2lkKTsKKworc3RhdGljIHZvaWQgYWRkX3JlbG4oU01nclJlbGF0 aW9uIHJlbG4sIEZvcmtOdW1iZXIgZm9ya251bSk7CitzdGF0aWMgdm9pZCByZW1vdmVfcmVs bihTTWdyUmVsYXRpb24gcmVsbiwgRm9ya051bWJlciBmb3JrbnVtKTsKKworc3RhdGljIFNN Z3JJZCBmc3luY19jaGVja2VyX3NtZ3JfaWQ7CitzdGF0aWMgY29uc3Qgc3RydWN0IGZfc21n ciBmc3luY19jaGVja2VyX3NtZ3IgPSB7CisJLm5hbWUgPSAiZnN5bmNfY2hlY2tlciIsCisJ LnNtZ3JfaW5pdCA9IG1kaW5pdCwKKwkuc21ncl9zaHV0ZG93biA9IE5VTEwsCisJLnNtZ3Jf b3BlbiA9IG1kb3BlbiwKKwkuc21ncl9jbG9zZSA9IG1kY2xvc2UsCisJLnNtZ3JfY3JlYXRl ID0gbWRjcmVhdGUsCisJLnNtZ3JfZXhpc3RzID0gbWRleGlzdHMsCisJLnNtZ3JfdW5saW5r ID0gbWR1bmxpbmssCisJLnNtZ3JfZXh0ZW5kID0gZnN5bmNfY2hlY2tlcl9leHRlbmQsCisJ LnNtZ3JfemVyb2V4dGVuZCA9IGZzeW5jX2NoZWNrZXJfemVyb2V4dGVuZCwKKwkuc21ncl9w cmVmZXRjaCA9IG1kcHJlZmV0Y2gsCisJLnNtZ3JfbWF4Y29tYmluZSA9IG1kbWF4Y29tYmlu ZSwKKwkuc21ncl9yZWFkdiA9IG1kcmVhZHYsCisJLnNtZ3Jfd3JpdGV2ID0gZnN5bmNfY2hl Y2tlcl93cml0ZXYsCisJLnNtZ3Jfd3JpdGViYWNrID0gZnN5bmNfY2hlY2tlcl93cml0ZWJh Y2ssCisJLnNtZ3JfbmJsb2NrcyA9IG1kbmJsb2NrcywKKwkuc21ncl90cnVuY2F0ZSA9IG1k dHJ1bmNhdGUsCisJLnNtZ3JfaW1tZWRzeW5jID0gZnN5bmNfY2hlY2tlcl9pbW1lZHN5bmMs CisJLnNtZ3JfcmVnaXN0ZXJzeW5jID0gbWRyZWdpc3RlcnN5bmMsCit9OworCitzdGF0aWMg SFRBQiAqdm9sYXRpbGVfcmVsbnM7CitzdGF0aWMgTFdMb2NrICp2b2xhdGlsZV9yZWxuc19s b2NrOworc3RhdGljIHNobWVtX3JlcXVlc3RfaG9va190eXBlIHByZXZfc2htZW1fcmVxdWVz dF9ob29rOworc3RhdGljIHNobWVtX3N0YXJ0dXBfaG9va190eXBlIHByZXZfc2htZW1fc3Rh cnR1cF9ob29rOworc3RhdGljIGNoZWNrcG9pbnRfY3JlYXRlX2hvb2tfdHlwZSBwcmV2X2No ZWNrcG9pbnRfY3JlYXRlX2hvb2s7CisKK3ZvaWQKK19QR19pbml0KHZvaWQpCit7CisJcHJl dl9jaGVja3BvaW50X2NyZWF0ZV9ob29rID0gY2hlY2twb2ludF9jcmVhdGVfaG9vazsKKwlj aGVja3BvaW50X2NyZWF0ZV9ob29rID0gZnN5bmNfY2hlY2tlcl9jaGVja3BvaW50X2NyZWF0 ZTsKKworCXByZXZfc2htZW1fcmVxdWVzdF9ob29rID0gc2htZW1fcmVxdWVzdF9ob29rOwor CXNobWVtX3JlcXVlc3RfaG9vayA9IGZzeW5jX2NoZWNrZXJfc2htZW1fcmVxdWVzdDsKKwor CXByZXZfc2htZW1fc3RhcnR1cF9ob29rID0gc2htZW1fc3RhcnR1cF9ob29rOworCXNobWVt X3N0YXJ0dXBfaG9vayA9IGZzeW5jX2NoZWNrZXJfc2htZW1fc3RhcnR1cDsKKworCS8qCisJ ICogUmVsYXRpb24gc2l6ZSBvZiAwIG1lYW5zIHdlIGNhbiBqdXN0IGRlZmVyIHRvIG1kLCBi dXQgaXQgd291bGQgYmUgbmljZQorCSAqIHRvIGp1c3QgZXhwb3NlIHRoaXMgZnVuY3Rpb25h bGl0eSwgc28gaWYgSSBuZWVkZWQgbXkgb3duIHJlbGF0aW9uLCBJCisJICogY291bGQgdXNl IE1kU21nclJlbGF0aW9uIGFzIHRoZSBwYXJlbnQuCisJICovCisJZnN5bmNfY2hlY2tlcl9z bWdyX2lkID0gc21ncl9yZWdpc3RlcigmZnN5bmNfY2hlY2tlcl9zbWdyLCAwKTsKKworCXN0 b3JhZ2VfbWFuYWdlcl9pZCA9IGZzeW5jX2NoZWNrZXJfc21ncl9pZDsKK30KKworc3RhdGlj IHZvaWQKK2ZzeW5jX2NoZWNrZXJfY2hlY2twb2ludF9jcmVhdGUoY29uc3QgQ2hlY2tQb2lu dCAqY2hlY2tQb2ludCkKK3sKKwlsb25nCQludW1fZW50cmllczsKKwlIQVNIX1NFUV9TVEFU VVMgc3RhdHVzOworCVZvbGF0aWxlUmVsbkVudHJ5ICplbnRyeTsKKworCWlmIChwcmV2X2No ZWNrcG9pbnRfY3JlYXRlX2hvb2spCisJCXByZXZfY2hlY2twb2ludF9jcmVhdGVfaG9vayhj aGVja1BvaW50KTsKKworCUxXTG9ja0FjcXVpcmUodm9sYXRpbGVfcmVsbnNfbG9jaywgTFdf RVhDTFVTSVZFKTsKKworCWhhc2hfc2VxX2luaXQoJnN0YXR1cywgdm9sYXRpbGVfcmVsbnMp OworCisJbnVtX2VudHJpZXMgPSBoYXNoX2dldF9udW1fZW50cmllcyh2b2xhdGlsZV9yZWxu cyk7CisJZWxvZyhJTkZPLCAiQW5hbHl6aW5nICVsZCB2b2xhdGlsZSByZWxhdGlvbnMiLCBu dW1fZW50cmllcyk7CisJd2hpbGUgKChlbnRyeSA9IGhhc2hfc2VxX3NlYXJjaCgmc3RhdHVz KSkpCisJeworCQlpZiAoZW50cnktPmxzbiA8IGNoZWNrUG9pbnQtPnJlZG8pCisJCXsKKwkJ CVJlbFBhdGhTdHIJcGF0aDsKKworCQkJcGF0aCA9IHJlbHBhdGhwZXJtKGVudHJ5LT5rZXku bG9jYXRvciwgZW50cnktPmtleS5mb3JrbnVtKTsKKworCQkJZWxvZyhXQVJOSU5HLCAiUmVs YXRpb24gbm90IHByZXZpb3VzbHkgc3luY2VkOiAlcyIsIHBhdGguc3RyKTsKKwkJfQorCX0K KworCUxXTG9ja1JlbGVhc2Uodm9sYXRpbGVfcmVsbnNfbG9jayk7Cit9CisKK3N0YXRpYyB2 b2lkCitmc3luY19jaGVja2VyX3NobWVtX3JlcXVlc3Qodm9pZCkKK3sKKwlpZiAocHJldl9z aG1lbV9yZXF1ZXN0X2hvb2spCisJCXByZXZfc2htZW1fcmVxdWVzdF9ob29rKCk7CisKKwlS ZXF1ZXN0QWRkaW5TaG1lbVNwYWNlKGhhc2hfZXN0aW1hdGVfc2l6ZSgxMDI0LCBzaXplb2Yo Vm9sYXRpbGVSZWxuRW50cnkpKSk7CisJUmVxdWVzdE5hbWVkTFdMb2NrVHJhbmNoZSgiZnN5 bmNfY2hlY2tlciB2b2xhdGlsZSByZWxucyBsb2NrIiwgMSk7Cit9CisKK3N0YXRpYyB2b2lk Citmc3luY19jaGVja2VyX3NobWVtX3N0YXJ0dXAodm9pZCkKK3sKKwlIQVNIQ1RMCQljdGw7 CisKKwlpZiAocHJldl9zaG1lbV9zdGFydHVwX2hvb2spCisJCXByZXZfc2htZW1fc3RhcnR1 cF9ob29rKCk7CisKKwljdGwua2V5c2l6ZSA9IHNpemVvZihWb2xhdGlsZVJlbG5LZXkpOwor CWN0bC5lbnRyeXNpemUgPSBzaXplb2YoVm9sYXRpbGVSZWxuRW50cnkpOworCXZvbGF0aWxl X3JlbG5zID0gTlVMTDsKKwl2b2xhdGlsZV9yZWxuc19sb2NrID0gTlVMTDsKKworCS8qCisJ ICogQ3JlYXRlIG9yIGF0dGFjaCB0byB0aGUgc2hhcmVkIG1lbW9yeSBzdGF0ZSwgaW5jbHVk aW5nIGhhc2ggdGFibGUKKwkgKi8KKwlMV0xvY2tBY3F1aXJlKEFkZGluU2htZW1Jbml0TG9j aywgTFdfRVhDTFVTSVZFKTsKKworCXZvbGF0aWxlX3JlbG5zID0gU2htZW1Jbml0SGFzaCgi ZnN5bmNfY2hlY2tlciB2b2xhdGlsZSByZWxucyIsCisJCQkJCQkJCSAgIDEwMjQsIDEwMjQs ICZjdGwsIEhBU0hfQkxPQlMgfCBIQVNIX0VMRU0pOworCXZvbGF0aWxlX3JlbG5zX2xvY2sg PSAmR2V0TmFtZWRMV0xvY2tUcmFuY2hlKCJmc3luY19jaGVja2VyIHZvbGF0aWxlIHJlbG5z IGxvY2siKS0+bG9jazsKKworCUxXTG9ja1JlbGVhc2UoQWRkaW5TaG1lbUluaXRMb2NrKTsK K30KKworc3RhdGljIHZvaWQKK2FkZF9yZWxuKFNNZ3JSZWxhdGlvbiByZWxuLCBGb3JrTnVt YmVyIGZvcmtudW0pCit7CisJYm9vbAkJZm91bmQ7CisJWExvZ1JlY1B0cglsc247CisJVm9s YXRpbGVSZWxuS2V5IGtleTsKKwlWb2xhdGlsZVJlbG5FbnRyeSAqZW50cnk7CisKKwlrZXku bG9jYXRvciA9IHJlbG4tPnNtZ3JfcmxvY2F0b3IubG9jYXRvcjsKKwlrZXkuZm9ya251bSA9 IGZvcmtudW07CisKKwlsc24gPSBHZXRYTG9nV3JpdGVSZWNQdHIoKTsKKworCUxXTG9ja0Fj cXVpcmUodm9sYXRpbGVfcmVsbnNfbG9jaywgTFdfRVhDTFVTSVZFKTsKKworCWVudHJ5ID0g aGFzaF9zZWFyY2godm9sYXRpbGVfcmVsbnMsICZrZXksIEhBU0hfRU5URVIsICZmb3VuZCk7 CisJaWYgKCFmb3VuZCkKKwkJZW50cnktPmxzbiA9IGxzbjsKKworCUxXTG9ja1JlbGVhc2Uo dm9sYXRpbGVfcmVsbnNfbG9jayk7Cit9CisKK3N0YXRpYyB2b2lkCityZW1vdmVfcmVsbihT TWdyUmVsYXRpb24gcmVsbiwgRm9ya051bWJlciBmb3JrbnVtKQoreworCVZvbGF0aWxlUmVs bktleSBrZXk7CisKKwlrZXkubG9jYXRvciA9IHJlbG4tPnNtZ3JfcmxvY2F0b3IubG9jYXRv cjsKKwlrZXkuZm9ya251bSA9IGZvcmtudW07CisKKwlMV0xvY2tBY3F1aXJlKHZvbGF0aWxl X3JlbG5zX2xvY2ssIExXX0VYQ0xVU0lWRSk7CisKKwloYXNoX3NlYXJjaCh2b2xhdGlsZV9y ZWxucywgJmtleSwgSEFTSF9SRU1PVkUsIE5VTEwpOworCisJTFdMb2NrUmVsZWFzZSh2b2xh dGlsZV9yZWxuc19sb2NrKTsKK30KKworc3RhdGljIHZvaWQKK2ZzeW5jX2NoZWNrZXJfZXh0 ZW5kKFNNZ3JSZWxhdGlvbiByZWxuLCBGb3JrTnVtYmVyIGZvcmtudW0sIEJsb2NrTnVtYmVy IGJsb2NrbnVtLAorCQkJCQkgY29uc3Qgdm9pZCAqYnVmZmVyLCBib29sIHNraXBGc3luYykK K3sKKwlpZiAoIVNtZ3JJc1RlbXAocmVsbikgJiYgIXNraXBGc3luYykKKwkJYWRkX3JlbG4o cmVsbiwgZm9ya251bSk7CisKKwltZGV4dGVuZChyZWxuLCBmb3JrbnVtLCBibG9ja251bSwg YnVmZmVyLCBza2lwRnN5bmMpOworfQorCitzdGF0aWMgdm9pZAorZnN5bmNfY2hlY2tlcl9p bW1lZHN5bmMoU01nclJlbGF0aW9uIHJlbG4sIEZvcmtOdW1iZXIgZm9ya251bSkKK3sKKwlp ZiAoIVNtZ3JJc1RlbXAocmVsbikpCisJCXJlbW92ZV9yZWxuKHJlbG4sIGZvcmtudW0pOwor CisJbWRpbW1lZHN5bmMocmVsbiwgZm9ya251bSk7Cit9CisKK3N0YXRpYyB2b2lkCitmc3lu Y19jaGVja2VyX3dyaXRldihTTWdyUmVsYXRpb24gcmVsbiwgRm9ya051bWJlciBmb3JrbnVt LAorCQkJCQkgQmxvY2tOdW1iZXIgYmxvY2tudW0sIGNvbnN0IHZvaWQgKipidWZmZXJzLAor CQkJCQkgQmxvY2tOdW1iZXIgbmJsb2NrcywgYm9vbCBza2lwRnN5bmMpCit7CisJaWYgKCFT bWdySXNUZW1wKHJlbG4pICYmICFza2lwRnN5bmMpCisJCWFkZF9yZWxuKHJlbG4sIGZvcmtu dW0pOworCisJbWR3cml0ZXYocmVsbiwgZm9ya251bSwgYmxvY2tudW0sIGJ1ZmZlcnMsIG5i bG9ja3MsIHNraXBGc3luYyk7Cit9CisKK3N0YXRpYyB2b2lkCitmc3luY19jaGVja2VyX3dy aXRlYmFjayhTTWdyUmVsYXRpb24gcmVsbiwgRm9ya051bWJlciBmb3JrbnVtLAorCQkJCQkJ QmxvY2tOdW1iZXIgYmxvY2tudW0sIEJsb2NrTnVtYmVyIG5ibG9ja3MpCit7CisJaWYgKCFT bWdySXNUZW1wKHJlbG4pKQorCQlyZW1vdmVfcmVsbihyZWxuLCBmb3JrbnVtKTsKKworCW1k d3JpdGViYWNrKHJlbG4sIGZvcmtudW0sIGJsb2NrbnVtLCBuYmxvY2tzKTsKK30KKworc3Rh dGljIHZvaWQKK2ZzeW5jX2NoZWNrZXJfemVyb2V4dGVuZChTTWdyUmVsYXRpb24gcmVsbiwg Rm9ya051bWJlciBmb3JrbnVtLAorCQkJCQkJIEJsb2NrTnVtYmVyIGJsb2NrbnVtLCBpbnQg bmJsb2NrcywgYm9vbCBza2lwRnN5bmMpCit7CisJaWYgKCFTbWdySXNUZW1wKHJlbG4pICYm ICFza2lwRnN5bmMpCisJCWFkZF9yZWxuKHJlbG4sIGZvcmtudW0pOworCisJbWR6ZXJvZXh0 ZW5kKHJlbG4sIGZvcmtudW0sIGJsb2NrbnVtLCBuYmxvY2tzLCBza2lwRnN5bmMpOworfQpk aWZmIC0tZ2l0IGEvY29udHJpYi9mc3luY19jaGVja2VyL21lc29uLmJ1aWxkIGIvY29udHJp Yi9mc3luY19jaGVja2VyL21lc29uLmJ1aWxkCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4 IDAwMDAwMDAwMDAwLi5jZTZlZDdmZTkwYgotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIv ZnN5bmNfY2hlY2tlci9tZXNvbi5idWlsZApAQCAtMCwwICsxLDIyIEBACisjIENvcHlyaWdo dCAoYykgMjAyMywgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKworZnN5 bmNfY2hlY2tlcl9zb3VyY2VzID0gZmlsZXMoCisgICdmc3luY19jaGVja2VyX3NtZ3IuYycs CispCisKK2lmIGhvc3Rfc3lzdGVtID09ICd3aW5kb3dzJworICBmc3luY19jaGVja2VyX3Nv dXJjZXMgKz0gcmNfbGliX2dlbi5wcm9jZXNzKHdpbjMydmVyX3JjLCBleHRyYV9hcmdzOiBb CisgICAgJy0tTkFNRScsICdmc3luY19jaGVja2VyJywKKyAgICAnLS1GSUxFREVTQycsICdm c3luY19jaGVja2VyIC0gU01HUiBleHRlbnNpb24gZm9yIGNoZWNraW5nIHZvbGF0aWxlIHJl bGF0aW9ucycsXSkKK2VuZGlmCisKK2ZzeW5jX2NoZWNrZXIgPSBzaGFyZWRfbW9kdWxlKCdm c3luY19jaGVja2VyJywKKyAgZnN5bmNfY2hlY2tlcl9zb3VyY2VzLAorICBrd2FyZ3M6IGNv bnRyaWJfbW9kX2FyZ3MsCispCitjb250cmliX3RhcmdldHMgKz0gZnN5bmNfY2hlY2tlcgor CitpbnN0YWxsX2RhdGEoCisgICdmc3luY19jaGVja2VyLmNvbnRyb2wnLAorICBrd2FyZ3M6 IGNvbnRyaWJfZGF0YV9hcmdzLAorKQpkaWZmIC0tZ2l0IGEvY29udHJpYi9tZXNvbi5idWls ZCBiL2NvbnRyaWIvbWVzb24uYnVpbGQKaW5kZXggMWJhNzNlYmQ2N2EuLmM0OGZiMTM4NzUx IDEwMDY0NAotLS0gYS9jb250cmliL21lc29uLmJ1aWxkCisrKyBiL2NvbnRyaWIvbWVzb24u YnVpbGQKQEAgLTI4LDYgKzI4LDcgQEAgc3ViZGlyKCdkaWN0X2ludCcpCiBzdWJkaXIoJ2Rp Y3RfeHN5bicpCiBzdWJkaXIoJ2VhcnRoZGlzdGFuY2UnKQogc3ViZGlyKCdmaWxlX2Zkdycp CitzdWJkaXIoJ2ZzeW5jX2NoZWNrZXInKQogc3ViZGlyKCdmdXp6eXN0cm1hdGNoJykKIHN1 YmRpcignaHN0b3JlJykKIHN1YmRpcignaHN0b3JlX3BscGVybCcpCmRpZmYgLS1naXQgYS9z cmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdCBiL3NyYy90b29scy9wZ2luZGVudC90 eXBlZGVmcy5saXN0CmluZGV4IDRiOTcxYjgxYWU1Li5iYzI2MGU3MTNhZSAxMDA2NDQKLS0t IGEvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKKysrIGIvc3JjL3Rvb2xzL3Bn aW5kZW50L3R5cGVkZWZzLmxpc3QKQEAgLTMxNDUsNiArMzE0NSw4IEBAIFZpZXdTdG10CiBW aXJ0dWFsVHJhbnNhY3Rpb25JZAogVmlydHVhbFR1cGxlVGFibGVTbG90CiBWb2xhdGlsZUZ1 bmN0aW9uU3RhdHVzCitWb2xhdGlsZVJlbG5FbnRyeQorVm9sYXRpbGVSZWxuS2V5CiBWc3J0 CiBXQUlUX09SREVSCiBXQUxBdmFpbGFiaWxpdHkKLS0gCjIuNDcuMgoK --------------pzqHmNAXsEg2Eg5hZQblrRMV Content-Type: text/x-patch; charset=UTF-8; name="v4-0003-Add-checkpoint_create_hook.patch" Content-Disposition: attachment; filename="v4-0003-Add-checkpoint_create_hook.patch" Content-Transfer-Encoding: base64 RnJvbSAwMWQ3NmU2OWQxZTBiMjAxOGY3MjE2MGVmODg3M2M0OTk3ZjQyMDMwIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBUcmlzdGFuIFBhcnRpbiA8dHJpc3RhbkBuZW9uLnRl Y2g+CkRhdGU6IEZyaSwgMTMgT2N0IDIwMjMgMTM6NTc6MTggLTA1MDAKU3ViamVjdDogW1BB VENIIHY0IDMvNl0gQWRkIGNoZWNrcG9pbnRfY3JlYXRlX2hvb2sKCkFsbG93cyBhbiBleHRl bnNpb24gdG8gaG9vayBpbnRvIENoZWNrUG9pbnRDcmVhdGUoKS4KLS0tCiBzcmMvYmFja2Vu ZC9hY2Nlc3MvdHJhbnNhbS94bG9nLmMgfCA1ICsrKysrCiBzcmMvaW5jbHVkZS9hY2Nlc3Mv eGxvZy5oICAgICAgICAgfCA0ICsrKysKIDIgZmlsZXMgY2hhbmdlZCwgOSBpbnNlcnRpb25z KCspCgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0veGxvZy5jIGIv c3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0veGxvZy5jCmluZGV4IDc5OWZjNzM5ZTE4Li5j ZGQ2ZWZmMmZkNSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0veGxv Zy5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3hsb2cuYwpAQCAtMjA4LDYg KzIwOCw4IEBAIGNvbnN0IHN0cnVjdCBjb25maWdfZW51bV9lbnRyeSBhcmNoaXZlX21vZGVf b3B0aW9uc1tdID0gewogICovCiBDaGVja3BvaW50U3RhdHNEYXRhIENoZWNrcG9pbnRTdGF0 czsKIAorY2hlY2twb2ludF9jcmVhdGVfaG9va190eXBlIGNoZWNrcG9pbnRfY3JlYXRlX2hv b2sgPSBOVUxMOworCiAvKgogICogRHVyaW5nIHJlY292ZXJ5LCBsYXN0RnVsbFBhZ2VXcml0 ZXMga2VlcHMgdHJhY2sgb2YgZnVsbF9wYWdlX3dyaXRlcyB0aGF0CiAgKiB0aGUgcmVwbGF5 ZWQgV0FMIHJlY29yZHMgaW5kaWNhdGUuIEl0J3MgaW5pdGlhbGl6ZWQgd2l0aCBmdWxsX3Bh Z2Vfd3JpdGVzCkBAIC03MTczLDYgKzcxNzUsOSBAQCBDcmVhdGVDaGVja1BvaW50KGludCBm bGFncykKIAkgKi8KIAlFTkRfQ1JJVF9TRUNUSU9OKCk7CiAKKwlpZiAoY2hlY2twb2ludF9j cmVhdGVfaG9vayAhPSBOVUxMKQorCQljaGVja3BvaW50X2NyZWF0ZV9ob29rKCZjaGVja1Bv aW50KTsKKwogCS8qCiAJICogSW4gc29tZSBjYXNlcyB0aGVyZSBhcmUgZ3JvdXBzIG9mIGFj dGlvbnMgdGhhdCBtdXN0IGFsbCBvY2N1ciBvbiBvbmUKIAkgKiBzaWRlIG9yIHRoZSBvdGhl ciBvZiBhIGNoZWNrcG9pbnQgcmVjb3JkLiBCZWZvcmUgZmx1c2hpbmcgdGhlCmRpZmYgLS1n aXQgYS9zcmMvaW5jbHVkZS9hY2Nlc3MveGxvZy5oIGIvc3JjL2luY2x1ZGUvYWNjZXNzL3hs b2cuaAppbmRleCBkMzEzMDk5YzAyNy4uOGFhYjM3ZWY1MmQgMTAwNjQ0Ci0tLSBhL3NyYy9p bmNsdWRlL2FjY2Vzcy94bG9nLmgKKysrIGIvc3JjL2luY2x1ZGUvYWNjZXNzL3hsb2cuaApA QCAtMTMsNiArMTMsNyBAQAogCiAjaW5jbHVkZSAiYWNjZXNzL3hsb2diYWNrdXAuaCIKICNp bmNsdWRlICJhY2Nlc3MveGxvZ2RlZnMuaCIKKyNpbmNsdWRlICJjYXRhbG9nL3BnX2NvbnRy b2wuaCIKICNpbmNsdWRlICJkYXRhdHlwZS90aW1lc3RhbXAuaCIKICNpbmNsdWRlICJsaWIv c3RyaW5naW5mby5oIgogI2luY2x1ZGUgIm5vZGVzL3BnX2xpc3QuaCIKQEAgLTU5LDYgKzYw LDkgQEAgZXh0ZXJuIFBHRExMSU1QT1JUIGludCB3YWxfZGVjb2RlX2J1ZmZlcl9zaXplOwog CiBleHRlcm4gUEdETExJTVBPUlQgaW50IENoZWNrUG9pbnRTZWdtZW50czsKIAordHlwZWRl ZiB2b2lkICgqY2hlY2twb2ludF9jcmVhdGVfaG9va190eXBlKSAoY29uc3QgQ2hlY2tQb2lu dCAqKTsKK2V4dGVybiBQR0RMTElNUE9SVCBjaGVja3BvaW50X2NyZWF0ZV9ob29rX3R5cGUg Y2hlY2twb2ludF9jcmVhdGVfaG9vazsKKwogLyogQXJjaGl2ZSBtb2RlcyAqLwogdHlwZWRl ZiBlbnVtIEFyY2hpdmVNb2RlCiB7Ci0tIAoyLjQ3LjIKCg== --------------pzqHmNAXsEg2Eg5hZQblrRMV Content-Type: text/x-patch; charset=UTF-8; name="v4-0002-Allow-extensions-to-override-the-global-storage-m.patch" Content-Disposition: attachment; filename*0="v4-0002-Allow-extensions-to-override-the-global-storage-m.pa"; filename*1="tch" Content-Transfer-Encoding: base64 RnJvbSBmMWExZGMwZjgxNDZjNzI0NTg5YWUyNTc4YWE0NzBmYWY2OGZkYjlkIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBUcmlzdGFuIFBhcnRpbiA8dHJpc3RhbkBuZW9uLnRl Y2g+CkRhdGU6IEZyaSwgMTMgT2N0IDIwMjMgMTQ6MDA6NDQgLTA1MDAKU3ViamVjdDogW1BB VENIIHY0IDIvNl0gQWxsb3cgZXh0ZW5zaW9ucyB0byBvdmVycmlkZSB0aGUgZ2xvYmFsIHN0 b3JhZ2UKIG1hbmFnZXIKCi0tLQogc3JjL2JhY2tlbmQvc3RvcmFnZS9zbWdyL3NtZ3IuYyAg IHwgNCArKystCiBzcmMvYmFja2VuZC91dGlscy9pbml0L21pc2Npbml0LmMgfCAyICsrCiBz cmMvaW5jbHVkZS9zdG9yYWdlL3NtZ3IuaCAgICAgICAgfCAyICsrCiAzIGZpbGVzIGNoYW5n ZWQsIDcgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQoKZGlmZiAtLWdpdCBhL3NyYy9i YWNrZW5kL3N0b3JhZ2Uvc21nci9zbWdyLmMgYi9zcmMvYmFja2VuZC9zdG9yYWdlL3NtZ3Iv c21nci5jCmluZGV4IDc2MzVjMjMxZWEwLi45YjNlNjNhZmY1NSAxMDA2NDQKLS0tIGEvc3Jj L2JhY2tlbmQvc3RvcmFnZS9zbWdyL3NtZ3IuYworKysgYi9zcmMvYmFja2VuZC9zdG9yYWdl L3NtZ3Ivc21nci5jCkBAIC02OSw2ICs2OSw4IEBAIHN0YXRpYyBpbnQJTlNtZ3IgPSAwOwog CiBzdGF0aWMgU2l6ZSBMYXJnZXN0U01nclJlbGF0aW9uU2l6ZSA9IDA7CiAKK1NNZ3JJZAkJ c3RvcmFnZV9tYW5hZ2VyX2lkOworCiAvKgogICogRWFjaCBiYWNrZW5kIGhhcyBhIGhhc2h0 YWJsZSB0aGF0IHN0b3JlcyBhbGwgZXh0YW50IFNNZ3JSZWxhdGlvbiBvYmplY3RzLgogICog SW4gYWRkaXRpb24sICJ1bnBpbm5lZCIgU01nclJlbGF0aW9uIG9iamVjdHMgYXJlIGNoYWlu ZWQgdG9nZXRoZXIgaW4gYSBsaXN0LgpAQCAtMjI3LDcgKzIyOSw3IEBAIHNtZ3JvcGVuKFJl bEZpbGVMb2NhdG9yIHJsb2NhdG9yLCBQcm9jTnVtYmVyIGJhY2tlbmQpCiAJCWZvciAoaW50 IGkgPSAwOyBpIDw9IE1BWF9GT1JLTlVNOyArK2kpCiAJCQlyZWxuLT5zbWdyX2NhY2hlZF9u YmxvY2tzW2ldID0gSW52YWxpZEJsb2NrTnVtYmVyOwogCi0JCXJlbG4tPnNtZ3Jfd2hpY2gg PSBNZFNNZ3JJZDsJLyogd2Ugb25seSBoYXZlIG1kLmMgYXQgcHJlc2VudCAqLworCQlyZWxu LT5zbWdyX3doaWNoID0gc3RvcmFnZV9tYW5hZ2VyX2lkOwogCiAJCS8qIGltcGxlbWVudGF0 aW9uLXNwZWNpZmljIGluaXRpYWxpemF0aW9uICovCiAJCXNtZ3Jzd1tyZWxuLT5zbWdyX3do aWNoXS5zbWdyX29wZW4ocmVsbik7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9p bml0L21pc2Npbml0LmMgYi9zcmMvYmFja2VuZC91dGlscy9pbml0L21pc2Npbml0LmMKaW5k ZXggMzE3NmNkY2U2ZDcuLjFiM2NlNTFjZmNlIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91 dGlscy9pbml0L21pc2Npbml0LmMKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvaW5pdC9taXNj aW5pdC5jCkBAIC0xOTMxLDYgKzE5MzEsOCBAQCB2b2lkCiByZWdpc3Rlcl9idWlsdGluX2R5 bmFtaWNfbWFuYWdlcnModm9pZCkKIHsKIAltZHNtZ3JfcmVnaXN0ZXIoKTsKKworCXN0b3Jh Z2VfbWFuYWdlcl9pZCA9IE1kU01ncklkOwogfQogCiAvKgpkaWZmIC0tZ2l0IGEvc3JjL2lu Y2x1ZGUvc3RvcmFnZS9zbWdyLmggYi9zcmMvaW5jbHVkZS9zdG9yYWdlL3NtZ3IuaAppbmRl eCA1MmY3NGY5MTdiMi4uNjI5Yzc4Y2ZkZGUgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3N0 b3JhZ2Uvc21nci5oCisrKyBiL3NyYy9pbmNsdWRlL3N0b3JhZ2Uvc21nci5oCkBAIC0yMCw2 ICsyMCw4IEBACiAKIHR5cGVkZWYgdWludDggU01ncklkOwogCitleHRlcm4gUEdETExJTVBP UlQgU01ncklkIHN0b3JhZ2VfbWFuYWdlcl9pZDsKKwogLyoKICAqIHNtZ3IuYyBtYWludGFp bnMgYSB0YWJsZSBvZiBTTWdyUmVsYXRpb24gb2JqZWN0cywgd2hpY2ggYXJlIGVzc2VudGlh bGx5CiAgKiBjYWNoZWQgZmlsZSBoYW5kbGVzLiAgQW4gU01nclJlbGF0aW9uIGlzIGNyZWF0 ZWQgKGlmIG5vdCBhbHJlYWR5IHByZXNlbnQpCi0tIAoyLjQ3LjIKCg== --------------pzqHmNAXsEg2Eg5hZQblrRMV Content-Type: text/x-patch; charset=UTF-8; name="v4-0001-Expose-f_smgr-to-extensions-for-manual-implementa.patch" Content-Disposition: attachment; filename*0="v4-0001-Expose-f_smgr-to-extensions-for-manual-implementa.pa"; filename*1="tch" Content-Transfer-Encoding: base64 RnJvbSA3NzI3OTBiNWE1YjRhYjIxNWQxMjQzNzIyZjFiMzEzMDNkYzk3NmY1IE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBNYXR0aGlhcyB2YW4gZGUgTWVlbnQgPGJvZWtld3Vy bStwb3N0Z3Jlc0BnbWFpbC5jb20+CkRhdGU6IFR1ZSwgMjcgSnVuIDIwMjMgMTU6NTk6MjMg KzAyMDAKU3ViamVjdDogW1BBVENIIHY0IDEvNl0gRXhwb3NlIGZfc21nciB0byBleHRlbnNp b25zIGZvciBtYW51YWwgaW1wbGVtZW50YXRpb24KClRoZXJlIGFyZSB2YXJpb3VzIHJlYXNv bnMgd2h5IG9uZSB3b3VsZCB3YW50IHRvIGNyZWF0ZSB0aGVpciBvd24KaW1wbGVtZW50YXRp b24gb2YgYSBzdG9yYWdlIG1hbmFnZXIsIGFtb25nIHdoaWNoIGFyZSBibG9jay1sZXZlbCBj b21wcmVzc2lvbiwKZW5jcnlwdGlvbiBhbmQgb2ZmbG9hZGluZyB0byBjb2xkIHN0b3JhZ2Uu IFRoaXMgcGF0Y2ggaXMgYSBmaXJzdCBwYXRjaCB0aGF0CmFsbG93cyBleHRlbnNpb25zIHRv IHJlZ2lzdGVyIHRoZWlyIG93biBTTWdyLgoKTm90ZSwgaG93ZXZlciwgdGhhdCB0aGlzIFNN Z3IgaXMgbm90IHlldCB1c2VkIC0gb25seSB0aGUgZmlyc3QgU01nciB0byByZWdpc3Rlcgpp cyB1c2VkLCBhbmQgdGhpcyBpcyBjdXJyZW50bHkgdGhlIG1kLmMgc21nci4gRnV0dXJlIGNv bW1pdHMgd2lsbCBpbmNsdWRlCmZhY2lsaXRpZXMgdG8gc2VsZWN0IGFuIFNNZ3IgZm9yIGVh Y2ggdGFibGVzcGFjZS4KLS0tCiBzcmMvYmFja2VuZC9wb3N0bWFzdGVyL3Bvc3RtYXN0ZXIu YyB8ICAgNSArCiBzcmMvYmFja2VuZC9zdG9yYWdlL3NtZ3IvbWQuYyAgICAgICB8IDE4NyAr KysrKysrKysrKysrKysrKysrLS0tLS0tLS0tCiBzcmMvYmFja2VuZC9zdG9yYWdlL3NtZ3Iv c21nci5jICAgICB8IDEzNyArKysrKysrKysrLS0tLS0tLS0tLQogc3JjL2JhY2tlbmQvdXRp bHMvaW5pdC9taXNjaW5pdC5jICAgfCAgMTMgKysKIHNyYy9pbmNsdWRlL21pc2NhZG1pbi5o ICAgICAgICAgICAgIHwgICAxICsKIHNyYy9pbmNsdWRlL3N0b3JhZ2UvbWQuaCAgICAgICAg ICAgIHwgICA0ICsKIHNyYy9pbmNsdWRlL3N0b3JhZ2Uvc21nci5oICAgICAgICAgIHwgIDU5 ICsrKysrKystLQogc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QgICAgfCAgIDEg KwogOCBmaWxlcyBjaGFuZ2VkLCAyNjYgaW5zZXJ0aW9ucygrKSwgMTQxIGRlbGV0aW9ucygt KQoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvcG9zdG1hc3Rlci5jIGIv c3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9wb3N0bWFzdGVyLmMKaW5kZXggZDJhN2E3YWRkNmYu Ljg4ZWE4MjE1NzNkIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9wb3N0bWFzdGVyL3Bvc3Rt YXN0ZXIuYworKysgYi9zcmMvYmFja2VuZC9wb3N0bWFzdGVyL3Bvc3RtYXN0ZXIuYwpAQCAt OTE2LDYgKzkxNiwxMSBAQCBQb3N0bWFzdGVyTWFpbihpbnQgYXJnYywgY2hhciAqYXJndltd KQogCSAqLwogCUFwcGx5TGF1bmNoZXJSZWdpc3RlcigpOwogCisJLyoKKwkgKiBSZWdpc3Rl ciBidWlsdC1pbiBtYW5hZ2VycyB0aGF0IGFyZSBub3QgcGFydCBvZiBzdGF0aWMgYXJyYXlz CisJICovCisJcmVnaXN0ZXJfYnVpbHRpbl9keW5hbWljX21hbmFnZXJzKCk7CisKIAkvKgog CSAqIHByb2Nlc3MgYW55IGxpYnJhcmllcyB0aGF0IHNob3VsZCBiZSBwcmVsb2FkZWQgYXQg cG9zdG1hc3RlciBzdGFydAogCSAqLwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvc3RvcmFn ZS9zbWdyL21kLmMgYi9zcmMvYmFja2VuZC9zdG9yYWdlL3NtZ3IvbWQuYwppbmRleCBmMzIy MGY5OGRjNC4uNWEyMDcyZTA4MTYgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3N0b3JhZ2Uv c21nci9tZC5jCisrKyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2Uvc21nci9tZC5jCkBAIC04NCw2 ICs4NCwyMSBAQCB0eXBlZGVmIHN0cnVjdCBfTWRmZFZlYwogfSBNZGZkVmVjOwogCiBzdGF0 aWMgTWVtb3J5Q29udGV4dCBNZEN4dDsJCS8qIGNvbnRleHQgZm9yIGFsbCBNZGZkVmVjIG9i amVjdHMgKi8KK1NNZ3JJZAkJTWRTTWdySWQ7CisKK3R5cGVkZWYgc3RydWN0Cit7CisJU01n clJlbGF0aW9uRGF0YSByZWxuOwkJLyogcGFyZW50IGRhdGEgKi8KKworCS8qCisJICogZm9y IG1kLmM7IHBlci1mb3JrIGFycmF5cyBvZiB0aGUgbnVtYmVyIG9mIG9wZW4gc2VnbWVudHMK KwkgKiAobWRfbnVtX29wZW5fc2VncykgYW5kIHRoZSBzZWdtZW50cyB0aGVtc2VsdmVzICht ZF9zZWdfZmRzKS4KKwkgKi8KKwlpbnQJCQltZF9udW1fb3Blbl9zZWdzW01BWF9GT1JLTlVN ICsgMV07CisJTWRmZFZlYyAgICAqbWRfc2VnX2Zkc1tNQVhfRk9SS05VTSArIDFdOworfSBN ZFNNZ3JSZWxhdGlvbkRhdGE7CisKK3R5cGVkZWYgTWRTTWdyUmVsYXRpb25EYXRhICpNZFNN Z3JSZWxhdGlvbjsKIAogCiAvKiBQb3B1bGF0ZSBhIGZpbGUgdGFnIGRlc2NyaWJpbmcgYW4g bWQuYyBzZWdtZW50IGZpbGUuICovCkBAIC0xMzAsMjYgKzE0NSw1NSBAQCB0eXBlZGVmIHN0 cnVjdCBNZFBhdGhTdHIKIH0gTWRQYXRoU3RyOwogCiAKK3ZvaWQKK21kc21ncl9yZWdpc3Rl cih2b2lkKQoreworCS8qIG1hZ25ldGljIGRpc2sgKi8KKwlmX3NtZ3IJCW1kX3NtZ3IgPSAo Zl9zbWdyKSB7CisJCS5uYW1lID0gIm1kIiwKKwkJLnNtZ3JfaW5pdCA9IG1kaW5pdCwKKwkJ LnNtZ3Jfc2h1dGRvd24gPSBOVUxMLAorCQkuc21ncl9vcGVuID0gbWRvcGVuLAorCQkuc21n cl9jbG9zZSA9IG1kY2xvc2UsCisJCS5zbWdyX2NyZWF0ZSA9IG1kY3JlYXRlLAorCQkuc21n cl9leGlzdHMgPSBtZGV4aXN0cywKKwkJLnNtZ3JfdW5saW5rID0gbWR1bmxpbmssCisJCS5z bWdyX2V4dGVuZCA9IG1kZXh0ZW5kLAorCQkuc21ncl96ZXJvZXh0ZW5kID0gbWR6ZXJvZXh0 ZW5kLAorCQkuc21ncl9wcmVmZXRjaCA9IG1kcHJlZmV0Y2gsCisJCS5zbWdyX21heGNvbWJp bmUgPSBtZG1heGNvbWJpbmUsCisJCS5zbWdyX3JlYWR2ID0gbWRyZWFkdiwKKwkJLnNtZ3Jf d3JpdGV2ID0gbWR3cml0ZXYsCisJCS5zbWdyX3dyaXRlYmFjayA9IG1kd3JpdGViYWNrLAor CQkuc21ncl9uYmxvY2tzID0gbWRuYmxvY2tzLAorCQkuc21ncl90cnVuY2F0ZSA9IG1kdHJ1 bmNhdGUsCisJCS5zbWdyX2ltbWVkc3luYyA9IG1kaW1tZWRzeW5jLAorCQkuc21ncl9yZWdp c3RlcnN5bmMgPSBtZHJlZ2lzdGVyc3luYywKKwl9OworCisJTWRTTWdySWQgPSBzbWdyX3Jl Z2lzdGVyKCZtZF9zbWdyLCBzaXplb2YoTWRTTWdyUmVsYXRpb25EYXRhKSk7Cit9CisKIC8q IGxvY2FsIHJvdXRpbmVzICovCiBzdGF0aWMgdm9pZCBtZHVubGlua2ZvcmsoUmVsRmlsZUxv Y2F0b3JCYWNrZW5kIHJsb2NhdG9yLCBGb3JrTnVtYmVyIGZvcmtudW0sCiAJCQkJCQkgYm9v bCBpc1JlZG8pOwotc3RhdGljIE1kZmRWZWMgKm1kb3BlbmZvcmsoU01nclJlbGF0aW9uIHJl bG4sIEZvcmtOdW1iZXIgZm9ya251bSwgaW50IGJlaGF2aW9yKTsKLXN0YXRpYyB2b2lkIHJl Z2lzdGVyX2RpcnR5X3NlZ21lbnQoU01nclJlbGF0aW9uIHJlbG4sIEZvcmtOdW1iZXIgZm9y a251bSwKK3N0YXRpYyBNZGZkVmVjICptZG9wZW5mb3JrKE1kU01nclJlbGF0aW9uIHJlbG4s IEZvcmtOdW1iZXIgZm9ya251bSwgaW50IGJlaGF2aW9yKTsKK3N0YXRpYyB2b2lkIHJlZ2lz dGVyX2RpcnR5X3NlZ21lbnQoTWRTTWdyUmVsYXRpb24gcmVsbiwgRm9ya051bWJlciBmb3Jr bnVtLAogCQkJCQkJCQkgICBNZGZkVmVjICpzZWcpOwogc3RhdGljIHZvaWQgcmVnaXN0ZXJf dW5saW5rX3NlZ21lbnQoUmVsRmlsZUxvY2F0b3JCYWNrZW5kIHJsb2NhdG9yLCBGb3JrTnVt YmVyIGZvcmtudW0sCiAJCQkJCQkJCQlCbG9ja051bWJlciBzZWdubyk7CiBzdGF0aWMgdm9p ZCByZWdpc3Rlcl9mb3JnZXRfcmVxdWVzdChSZWxGaWxlTG9jYXRvckJhY2tlbmQgcmxvY2F0 b3IsIEZvcmtOdW1iZXIgZm9ya251bSwKIAkJCQkJCQkJCUJsb2NrTnVtYmVyIHNlZ25vKTsK LXN0YXRpYyB2b2lkIF9mZHZlY19yZXNpemUoU01nclJlbGF0aW9uIHJlbG4sCitzdGF0aWMg dm9pZCBfZmR2ZWNfcmVzaXplKE1kU01nclJlbGF0aW9uIHJlbG4sCiAJCQkJCQkgIEZvcmtO dW1iZXIgZm9ya251bSwKIAkJCQkJCSAgaW50IG5zZWcpOwotc3RhdGljIE1kUGF0aFN0ciBf bWRmZF9zZWdwYXRoKFNNZ3JSZWxhdGlvbiByZWxuLCBGb3JrTnVtYmVyIGZvcmtudW0sCitz dGF0aWMgTWRQYXRoU3RyIF9tZGZkX3NlZ3BhdGgoTWRTTWdyUmVsYXRpb24gcmVsbiwgRm9y a051bWJlciBmb3JrbnVtLAogCQkJCQkJCSAgIEJsb2NrTnVtYmVyIHNlZ25vKTsKLXN0YXRp YyBNZGZkVmVjICpfbWRmZF9vcGVuc2VnKFNNZ3JSZWxhdGlvbiByZWxuLCBGb3JrTnVtYmVy IGZvcmtudW0sCitzdGF0aWMgTWRmZFZlYyAqX21kZmRfb3BlbnNlZyhNZFNNZ3JSZWxhdGlv biByZWxuLCBGb3JrTnVtYmVyIGZvcmtudW0sCiAJCQkJCQkJICBCbG9ja051bWJlciBzZWdu bywgaW50IG9mbGFncyk7Ci1zdGF0aWMgTWRmZFZlYyAqX21kZmRfZ2V0c2VnKFNNZ3JSZWxh dGlvbiByZWxuLCBGb3JrTnVtYmVyIGZvcmtudW0sCitzdGF0aWMgTWRmZFZlYyAqX21kZmRf Z2V0c2VnKE1kU01nclJlbGF0aW9uIHJlbG4sIEZvcmtOdW1iZXIgZm9ya251bSwKIAkJCQkJ CQkgQmxvY2tOdW1iZXIgYmxrbm8sIGJvb2wgc2tpcEZzeW5jLCBpbnQgYmVoYXZpb3IpOwot c3RhdGljIEJsb2NrTnVtYmVyIF9tZG5ibG9ja3MoU01nclJlbGF0aW9uIHJlbG4sIEZvcmtO dW1iZXIgZm9ya251bSwKK3N0YXRpYyBCbG9ja051bWJlciBfbWRuYmxvY2tzKE1kU01nclJl bGF0aW9uIHJlbG4sIEZvcmtOdW1iZXIgZm9ya251bSwKIAkJCQkJCQkgIE1kZmRWZWMgKnNl Zyk7CiAKIHN0YXRpYyBpbmxpbmUgaW50CkBAIC0xODIsNiArMjI2LDggQEAgbWRpbml0KHZv aWQpCiBib29sCiBtZGV4aXN0cyhTTWdyUmVsYXRpb24gcmVsbiwgRm9ya051bWJlciBmb3Jr bnVtKQogeworCU1kU01nclJlbGF0aW9uIG1kcmVsbiA9IChNZFNNZ3JSZWxhdGlvbikgcmVs bjsKKwogCS8qCiAJICogQ2xvc2UgaXQgZmlyc3QsIHRvIGVuc3VyZSB0aGF0IHdlIG5vdGlj ZSBpZiB0aGUgZm9yayBoYXMgYmVlbiB1bmxpbmtlZAogCSAqIHNpbmNlIHdlIG9wZW5lZCBp dC4gIEFzIGFuIG9wdGltaXphdGlvbiwgd2UgY2FuIHNraXAgdGhhdCBpbiByZWNvdmVyeSwK QEAgLTE5MCw3ICsyMzYsNyBAQCBtZGV4aXN0cyhTTWdyUmVsYXRpb24gcmVsbiwgRm9ya051 bWJlciBmb3JrbnVtKQogCWlmICghSW5SZWNvdmVyeSkKIAkJbWRjbG9zZShyZWxuLCBmb3Jr bnVtKTsKIAotCXJldHVybiAobWRvcGVuZm9yayhyZWxuLCBmb3JrbnVtLCBFWFRFTlNJT05f UkVUVVJOX05VTEwpICE9IE5VTEwpOworCXJldHVybiAobWRvcGVuZm9yayhtZHJlbG4sIGZv cmtudW0sIEVYVEVOU0lPTl9SRVRVUk5fTlVMTCkgIT0gTlVMTCk7CiB9CiAKIC8qCkBAIC0y MDEsMTQgKzI0NywxNSBAQCBtZGV4aXN0cyhTTWdyUmVsYXRpb24gcmVsbiwgRm9ya051bWJl ciBmb3JrbnVtKQogdm9pZAogbWRjcmVhdGUoU01nclJlbGF0aW9uIHJlbG4sIEZvcmtOdW1i ZXIgZm9ya251bSwgYm9vbCBpc1JlZG8pCiB7CisJTWRTTWdyUmVsYXRpb24gbWRyZWxuID0g KE1kU01nclJlbGF0aW9uKSByZWxuOwogCU1kZmRWZWMgICAgKm1kZmQ7CiAJUmVsUGF0aFN0 cglwYXRoOwogCUZpbGUJCWZkOwogCi0JaWYgKGlzUmVkbyAmJiByZWxuLT5tZF9udW1fb3Bl bl9zZWdzW2ZvcmtudW1dID4gMCkKKwlpZiAoaXNSZWRvICYmIG1kcmVsbi0+bWRfbnVtX29w ZW5fc2Vnc1tmb3JrbnVtXSA+IDApCiAJCXJldHVybjsJCQkJCS8qIGNyZWF0ZWQgYW5kIG9w ZW5lZCBhbHJlYWR5Li4uICovCiAKLQlBc3NlcnQocmVsbi0+bWRfbnVtX29wZW5fc2Vnc1tm b3JrbnVtXSA9PSAwKTsKKwlBc3NlcnQobWRyZWxuLT5tZF9udW1fb3Blbl9zZWdzW2Zvcmtu dW1dID09IDApOwogCiAJLyoKIAkgKiBXZSBtYXkgYmUgdXNpbmcgdGhlIHRhcmdldCB0YWJs ZSBzcGFjZSBmb3IgdGhlIGZpcnN0IHRpbWUgaW4gdGhpcwpAQCAtMjQzLDEzICsyOTAsMTMg QEAgbWRjcmVhdGUoU01nclJlbGF0aW9uIHJlbG4sIEZvcmtOdW1iZXIgZm9ya251bSwgYm9v bCBpc1JlZG8pCiAJCX0KIAl9CiAKLQlfZmR2ZWNfcmVzaXplKHJlbG4sIGZvcmtudW0sIDEp OwotCW1kZmQgPSAmcmVsbi0+bWRfc2VnX2Zkc1tmb3JrbnVtXVswXTsKKwlfZmR2ZWNfcmVz aXplKG1kcmVsbiwgZm9ya251bSwgMSk7CisJbWRmZCA9ICZtZHJlbG4tPm1kX3NlZ19mZHNb Zm9ya251bV1bMF07CiAJbWRmZC0+bWRmZF92ZmQgPSBmZDsKIAltZGZkLT5tZGZkX3NlZ25v ID0gMDsKIAogCWlmICghU21ncklzVGVtcChyZWxuKSkKLQkJcmVnaXN0ZXJfZGlydHlfc2Vn bWVudChyZWxuLCBmb3JrbnVtLCBtZGZkKTsKKwkJcmVnaXN0ZXJfZGlydHlfc2VnbWVudCht ZHJlbG4sIGZvcmtudW0sIG1kZmQpOwogfQogCiAvKgpAQCAtNDY3LDYgKzUxNCw3IEBAIHZv aWQKIG1kZXh0ZW5kKFNNZ3JSZWxhdGlvbiByZWxuLCBGb3JrTnVtYmVyIGZvcmtudW0sIEJs b2NrTnVtYmVyIGJsb2NrbnVtLAogCQkgY29uc3Qgdm9pZCAqYnVmZmVyLCBib29sIHNraXBG c3luYykKIHsKKwlNZFNNZ3JSZWxhdGlvbiBtZHJlbG4gPSAoTWRTTWdyUmVsYXRpb24pIHJl bG47CiAJb2ZmX3QJCXNlZWtwb3M7CiAJaW50CQkJbmJ5dGVzOwogCU1kZmRWZWMgICAgKnY7 CkBAIC00OTMsNyArNTQxLDcgQEAgbWRleHRlbmQoU01nclJlbGF0aW9uIHJlbG4sIEZvcmtO dW1iZXIgZm9ya251bSwgQmxvY2tOdW1iZXIgYmxvY2tudW0sCiAJCQkJCQlyZWxwYXRoKHJl bG4tPnNtZ3JfcmxvY2F0b3IsIGZvcmtudW0pLnN0ciwKIAkJCQkJCUludmFsaWRCbG9ja051 bWJlcikpKTsKIAotCXYgPSBfbWRmZF9nZXRzZWcocmVsbiwgZm9ya251bSwgYmxvY2tudW0s IHNraXBGc3luYywgRVhURU5TSU9OX0NSRUFURSk7CisJdiA9IF9tZGZkX2dldHNlZyhtZHJl bG4sIGZvcmtudW0sIGJsb2NrbnVtLCBza2lwRnN5bmMsIEVYVEVOU0lPTl9DUkVBVEUpOwog CiAJc2Vla3BvcyA9IChvZmZfdCkgQkxDS1NaICogKGJsb2NrbnVtICUgKChCbG9ja051bWJl cikgUkVMU0VHX1NJWkUpKTsKIApAQCAtNTE3LDkgKzU2NSw5IEBAIG1kZXh0ZW5kKFNNZ3JS ZWxhdGlvbiByZWxuLCBGb3JrTnVtYmVyIGZvcmtudW0sIEJsb2NrTnVtYmVyIGJsb2NrbnVt LAogCX0KIAogCWlmICghc2tpcEZzeW5jICYmICFTbWdySXNUZW1wKHJlbG4pKQotCQlyZWdp c3Rlcl9kaXJ0eV9zZWdtZW50KHJlbG4sIGZvcmtudW0sIHYpOworCQlyZWdpc3Rlcl9kaXJ0 eV9zZWdtZW50KG1kcmVsbiwgZm9ya251bSwgdik7CiAKLQlBc3NlcnQoX21kbmJsb2Nrcyhy ZWxuLCBmb3JrbnVtLCB2KSA8PSAoKEJsb2NrTnVtYmVyKSBSRUxTRUdfU0laRSkpOworCUFz c2VydChfbWRuYmxvY2tzKG1kcmVsbiwgZm9ya251bSwgdikgPD0gKChCbG9ja051bWJlcikg UkVMU0VHX1NJWkUpKTsKIH0KIAogLyoKQEAgLTUzMiw2ICs1ODAsNyBAQCB2b2lkCiBtZHpl cm9leHRlbmQoU01nclJlbGF0aW9uIHJlbG4sIEZvcmtOdW1iZXIgZm9ya251bSwKIAkJCSBC bG9ja051bWJlciBibG9ja251bSwgaW50IG5ibG9ja3MsIGJvb2wgc2tpcEZzeW5jKQogewor CU1kU01nclJlbGF0aW9uIG1kcmVsbiA9IChNZFNNZ3JSZWxhdGlvbikgcmVsbjsKIAlNZGZk VmVjICAgICp2OwogCUJsb2NrTnVtYmVyIGN1cmJsb2NrbnVtID0gYmxvY2tudW07CiAJaW50 CQkJcmVtYmxvY2tzID0gbmJsb2NrczsKQEAgLTU2Niw3ICs2MTUsNyBAQCBtZHplcm9leHRl bmQoU01nclJlbGF0aW9uIHJlbG4sIEZvcmtOdW1iZXIgZm9ya251bSwKIAkJZWxzZQogCQkJ bnVtYmxvY2tzID0gcmVtYmxvY2tzOwogCi0JCXYgPSBfbWRmZF9nZXRzZWcocmVsbiwgZm9y a251bSwgY3VyYmxvY2tudW0sIHNraXBGc3luYywgRVhURU5TSU9OX0NSRUFURSk7CisJCXYg PSBfbWRmZF9nZXRzZWcobWRyZWxuLCBmb3JrbnVtLCBjdXJibG9ja251bSwgc2tpcEZzeW5j LCBFWFRFTlNJT05fQ1JFQVRFKTsKIAogCQlBc3NlcnQoc2Vnc3RhcnRibG9jayA8IFJFTFNF R19TSVpFKTsKIAkJQXNzZXJ0KHNlZ3N0YXJ0YmxvY2sgKyBudW1ibG9ja3MgPD0gUkVMU0VH X1NJWkUpOwpAQCAtNjIxLDkgKzY3MCw5IEBAIG1kemVyb2V4dGVuZChTTWdyUmVsYXRpb24g cmVsbiwgRm9ya051bWJlciBmb3JrbnVtLAogCQl9CiAKIAkJaWYgKCFza2lwRnN5bmMgJiYg IVNtZ3JJc1RlbXAocmVsbikpCi0JCQlyZWdpc3Rlcl9kaXJ0eV9zZWdtZW50KHJlbG4sIGZv cmtudW0sIHYpOworCQkJcmVnaXN0ZXJfZGlydHlfc2VnbWVudChtZHJlbG4sIGZvcmtudW0s IHYpOwogCi0JCUFzc2VydChfbWRuYmxvY2tzKHJlbG4sIGZvcmtudW0sIHYpIDw9ICgoQmxv Y2tOdW1iZXIpIFJFTFNFR19TSVpFKSk7CisJCUFzc2VydChfbWRuYmxvY2tzKG1kcmVsbiwg Zm9ya251bSwgdikgPD0gKChCbG9ja051bWJlcikgUkVMU0VHX1NJWkUpKTsKIAogCQlyZW1i bG9ja3MgLT0gbnVtYmxvY2tzOwogCQljdXJibG9ja251bSArPSBudW1ibG9ja3M7CkBAIC02 NDEsNyArNjkwLDcgQEAgbWR6ZXJvZXh0ZW5kKFNNZ3JSZWxhdGlvbiByZWxuLCBGb3JrTnVt YmVyIGZvcmtudW0sCiAgKiBpbnZlbnQgb25lIG91dCBvZiB3aG9sZSBjbG90aC4KICAqLwog c3RhdGljIE1kZmRWZWMgKgotbWRvcGVuZm9yayhTTWdyUmVsYXRpb24gcmVsbiwgRm9ya051 bWJlciBmb3JrbnVtLCBpbnQgYmVoYXZpb3IpCittZG9wZW5mb3JrKE1kU01nclJlbGF0aW9u IHJlbG4sIEZvcmtOdW1iZXIgZm9ya251bSwgaW50IGJlaGF2aW9yKQogewogCU1kZmRWZWMg ICAgKm1kZmQ7CiAJUmVsUGF0aFN0cglwYXRoOwpAQCAtNjUxLDcgKzcwMCw3IEBAIG1kb3Bl bmZvcmsoU01nclJlbGF0aW9uIHJlbG4sIEZvcmtOdW1iZXIgZm9ya251bSwgaW50IGJlaGF2 aW9yKQogCWlmIChyZWxuLT5tZF9udW1fb3Blbl9zZWdzW2ZvcmtudW1dID4gMCkKIAkJcmV0 dXJuICZyZWxuLT5tZF9zZWdfZmRzW2ZvcmtudW1dWzBdOwogCi0JcGF0aCA9IHJlbHBhdGgo cmVsbi0+c21ncl9ybG9jYXRvciwgZm9ya251bSk7CisJcGF0aCA9IHJlbHBhdGgocmVsbi0+ cmVsbi5zbWdyX3Jsb2NhdG9yLCBmb3JrbnVtKTsKIAogCWZkID0gUGF0aE5hbWVPcGVuRmls ZShwYXRoLnN0ciwgX21kZmRfb3Blbl9mbGFncygpKTsKIApAQCAtNjgxLDkgKzczMCwxMSBA QCBtZG9wZW5mb3JrKFNNZ3JSZWxhdGlvbiByZWxuLCBGb3JrTnVtYmVyIGZvcmtudW0sIGlu dCBiZWhhdmlvcikKIHZvaWQKIG1kb3BlbihTTWdyUmVsYXRpb24gcmVsbikKIHsKKwlNZFNN Z3JSZWxhdGlvbiBtZHJlbG4gPSAoTWRTTWdyUmVsYXRpb24pIHJlbG47CisKIAkvKiBtYXJr IGl0IG5vdCBvcGVuICovCiAJZm9yIChpbnQgZm9ya251bSA9IDA7IGZvcmtudW0gPD0gTUFY X0ZPUktOVU07IGZvcmtudW0rKykKLQkJcmVsbi0+bWRfbnVtX29wZW5fc2Vnc1tmb3JrbnVt XSA9IDA7CisJCW1kcmVsbi0+bWRfbnVtX29wZW5fc2Vnc1tmb3JrbnVtXSA9IDA7CiB9CiAK IC8qCkBAIC02OTIsNyArNzQzLDggQEAgbWRvcGVuKFNNZ3JSZWxhdGlvbiByZWxuKQogdm9p ZAogbWRjbG9zZShTTWdyUmVsYXRpb24gcmVsbiwgRm9ya051bWJlciBmb3JrbnVtKQogewot CWludAkJCW5vcGVuc2VncyA9IHJlbG4tPm1kX251bV9vcGVuX3NlZ3NbZm9ya251bV07CisJ TWRTTWdyUmVsYXRpb24gbWRyZWxuID0gKE1kU01nclJlbGF0aW9uKSByZWxuOworCWludAkJ CW5vcGVuc2VncyA9IG1kcmVsbi0+bWRfbnVtX29wZW5fc2Vnc1tmb3JrbnVtXTsKIAogCS8q IE5vIHdvcmsgaWYgYWxyZWFkeSBjbG9zZWQgKi8KIAlpZiAobm9wZW5zZWdzID09IDApCkBA IC03MDEsMTAgKzc1MywxMCBAQCBtZGNsb3NlKFNNZ3JSZWxhdGlvbiByZWxuLCBGb3JrTnVt YmVyIGZvcmtudW0pCiAJLyogY2xvc2Ugc2VnbWVudHMgc3RhcnRpbmcgZnJvbSB0aGUgZW5k ICovCiAJd2hpbGUgKG5vcGVuc2VncyA+IDApCiAJewotCQlNZGZkVmVjICAgICp2ID0gJnJl bG4tPm1kX3NlZ19mZHNbZm9ya251bV1bbm9wZW5zZWdzIC0gMV07CisJCU1kZmRWZWMgICAg KnYgPSAmbWRyZWxuLT5tZF9zZWdfZmRzW2ZvcmtudW1dW25vcGVuc2VncyAtIDFdOwogCiAJ CUZpbGVDbG9zZSh2LT5tZGZkX3ZmZCk7Ci0JCV9mZHZlY19yZXNpemUocmVsbiwgZm9ya251 bSwgbm9wZW5zZWdzIC0gMSk7CisJCV9mZHZlY19yZXNpemUobWRyZWxuLCBmb3JrbnVtLCBu b3BlbnNlZ3MgLSAxKTsKIAkJbm9wZW5zZWdzLS07CiAJfQogfQpAQCAtNzE3LDYgKzc2OSw3 IEBAIG1kcHJlZmV0Y2goU01nclJlbGF0aW9uIHJlbG4sIEZvcmtOdW1iZXIgZm9ya251bSwg QmxvY2tOdW1iZXIgYmxvY2tudW0sCiAJCSAgIGludCBuYmxvY2tzKQogewogI2lmZGVmIFVT RV9QUkVGRVRDSAorCU1kU01nclJlbGF0aW9uIG1kcmVsbiA9IChNZFNNZ3JSZWxhdGlvbikg cmVsbjsKIAogCUFzc2VydCgoaW9fZGlyZWN0X2ZsYWdzICYgSU9fRElSRUNUX0RBVEEpID09 IDApOwogCkBAIC03MjksNyArNzgyLDcgQEAgbWRwcmVmZXRjaChTTWdyUmVsYXRpb24gcmVs biwgRm9ya051bWJlciBmb3JrbnVtLCBCbG9ja051bWJlciBibG9ja251bSwKIAkJTWRmZFZl YyAgICAqdjsKIAkJaW50CQkJbmJsb2Nrc190aGlzX3NlZ21lbnQ7CiAKLQkJdiA9IF9tZGZk X2dldHNlZyhyZWxuLCBmb3JrbnVtLCBibG9ja251bSwgZmFsc2UsCisJCXYgPSBfbWRmZF9n ZXRzZWcobWRyZWxuLCBmb3JrbnVtLCBibG9ja251bSwgZmFsc2UsCiAJCQkJCQkgSW5SZWNv dmVyeSA/IEVYVEVOU0lPTl9SRVRVUk5fTlVMTCA6IEVYVEVOU0lPTl9GQUlMKTsKIAkJaWYg KHYgPT0gTlVMTCkKIAkJCXJldHVybiBmYWxzZTsKQEAgLTgyNyw2ICs4ODAsOCBAQCB2b2lk CiBtZHJlYWR2KFNNZ3JSZWxhdGlvbiByZWxuLCBGb3JrTnVtYmVyIGZvcmtudW0sIEJsb2Nr TnVtYmVyIGJsb2NrbnVtLAogCQl2b2lkICoqYnVmZmVycywgQmxvY2tOdW1iZXIgbmJsb2Nr cykKIHsKKwlNZFNNZ3JSZWxhdGlvbiBtZHJlbG4gPSAoTWRTTWdyUmVsYXRpb24pIHJlbG47 CisKIAl3aGlsZSAobmJsb2NrcyA+IDApCiAJewogCQlzdHJ1Y3QgaW92ZWMgaW92W1BHX0lP Vl9NQVhdOwpAQCAtODM4LDcgKzg5Myw3IEBAIG1kcmVhZHYoU01nclJlbGF0aW9uIHJlbG4s IEZvcmtOdW1iZXIgZm9ya251bSwgQmxvY2tOdW1iZXIgYmxvY2tudW0sCiAJCXNpemVfdAkJ dHJhbnNmZXJyZWRfdGhpc19zZWdtZW50OwogCQlzaXplX3QJCXNpemVfdGhpc19zZWdtZW50 OwogCi0JCXYgPSBfbWRmZF9nZXRzZWcocmVsbiwgZm9ya251bSwgYmxvY2tudW0sIGZhbHNl LAorCQl2ID0gX21kZmRfZ2V0c2VnKG1kcmVsbiwgZm9ya251bSwgYmxvY2tudW0sIGZhbHNl LAogCQkJCQkJIEVYVEVOU0lPTl9GQUlMIHwgRVhURU5TSU9OX0NSRUFURV9SRUNPVkVSWSk7 CiAKIAkJc2Vla3BvcyA9IChvZmZfdCkgQkxDS1NaICogKGJsb2NrbnVtICUgKChCbG9ja051 bWJlcikgUkVMU0VHX1NJWkUpKTsKQEAgLTk0OCw2ICsxMDAzLDggQEAgdm9pZAogbWR3cml0 ZXYoU01nclJlbGF0aW9uIHJlbG4sIEZvcmtOdW1iZXIgZm9ya251bSwgQmxvY2tOdW1iZXIg YmxvY2tudW0sCiAJCSBjb25zdCB2b2lkICoqYnVmZmVycywgQmxvY2tOdW1iZXIgbmJsb2Nr cywgYm9vbCBza2lwRnN5bmMpCiB7CisJTWRTTWdyUmVsYXRpb24gbWRyZWxuID0gKE1kU01n clJlbGF0aW9uKSByZWxuOworCiAJLyogVGhpcyBhc3NlcnQgaXMgdG9vIGV4cGVuc2l2ZSB0 byBoYXZlIG9uIG5vcm1hbGx5IC4uLiAqLwogI2lmZGVmIENIRUNLX1dSSVRFX1ZTX0VYVEVO RAogCUFzc2VydCgodWludDY0KSBibG9ja251bSArICh1aW50NjQpIG5ibG9ja3MgPD0gKHVp bnQ2NCkgbWRuYmxvY2tzKHJlbG4sIGZvcmtudW0pKTsKQEAgLTk2NCw3ICsxMDIxLDcgQEAg bWR3cml0ZXYoU01nclJlbGF0aW9uIHJlbG4sIEZvcmtOdW1iZXIgZm9ya251bSwgQmxvY2tO dW1iZXIgYmxvY2tudW0sCiAJCXNpemVfdAkJdHJhbnNmZXJyZWRfdGhpc19zZWdtZW50Owog CQlzaXplX3QJCXNpemVfdGhpc19zZWdtZW50OwogCi0JCXYgPSBfbWRmZF9nZXRzZWcocmVs biwgZm9ya251bSwgYmxvY2tudW0sIHNraXBGc3luYywKKwkJdiA9IF9tZGZkX2dldHNlZyht ZHJlbG4sIGZvcmtudW0sIGJsb2NrbnVtLCBza2lwRnN5bmMsCiAJCQkJCQkgRVhURU5TSU9O X0ZBSUwgfCBFWFRFTlNJT05fQ1JFQVRFX1JFQ09WRVJZKTsKIAogCQlzZWVrcG9zID0gKG9m Zl90KSBCTENLU1ogKiAoYmxvY2tudW0gJSAoKEJsb2NrTnVtYmVyKSBSRUxTRUdfU0laRSkp OwpAQCAtMTAzNCw3ICsxMDkxLDcgQEAgbWR3cml0ZXYoU01nclJlbGF0aW9uIHJlbG4sIEZv cmtOdW1iZXIgZm9ya251bSwgQmxvY2tOdW1iZXIgYmxvY2tudW0sCiAJCX0KIAogCQlpZiAo IXNraXBGc3luYyAmJiAhU21ncklzVGVtcChyZWxuKSkKLQkJCXJlZ2lzdGVyX2RpcnR5X3Nl Z21lbnQocmVsbiwgZm9ya251bSwgdik7CisJCQlyZWdpc3Rlcl9kaXJ0eV9zZWdtZW50KG1k cmVsbiwgZm9ya251bSwgdik7CiAKIAkJbmJsb2NrcyAtPSBuYmxvY2tzX3RoaXNfc2VnbWVu dDsKIAkJYnVmZmVycyArPSBuYmxvY2tzX3RoaXNfc2VnbWVudDsKQEAgLTEwNTMsNiArMTEx MCw4IEBAIHZvaWQKIG1kd3JpdGViYWNrKFNNZ3JSZWxhdGlvbiByZWxuLCBGb3JrTnVtYmVy IGZvcmtudW0sCiAJCQlCbG9ja051bWJlciBibG9ja251bSwgQmxvY2tOdW1iZXIgbmJsb2Nr cykKIHsKKwlNZFNNZ3JSZWxhdGlvbiBtZHJlbG4gPSAoTWRTTWdyUmVsYXRpb24pIHJlbG47 CisKIAlBc3NlcnQoKGlvX2RpcmVjdF9mbGFncyAmIElPX0RJUkVDVF9EQVRBKSA9PSAwKTsK IAogCS8qCkBAIC0xMDY3LDcgKzExMjYsNyBAQCBtZHdyaXRlYmFjayhTTWdyUmVsYXRpb24g cmVsbiwgRm9ya051bWJlciBmb3JrbnVtLAogCQlpbnQJCQlzZWdudW1fc3RhcnQsCiAJCQkJ CXNlZ251bV9lbmQ7CiAKLQkJdiA9IF9tZGZkX2dldHNlZyhyZWxuLCBmb3JrbnVtLCBibG9j a251bSwgdHJ1ZSAvKiBub3QgdXNlZCAqLyAsCisJCXYgPSBfbWRmZF9nZXRzZWcobWRyZWxu LCBmb3JrbnVtLCBibG9ja251bSwgdHJ1ZSAvKiBub3QgdXNlZCAqLyAsCiAJCQkJCQkgRVhU RU5TSU9OX0RPTlRfT1BFTik7CiAKIAkJLyoKQEAgLTExMTEsMTQgKzExNzAsMTUgQEAgbWR3 cml0ZWJhY2soU01nclJlbGF0aW9uIHJlbG4sIEZvcmtOdW1iZXIgZm9ya251bSwKIEJsb2Nr TnVtYmVyCiBtZG5ibG9ja3MoU01nclJlbGF0aW9uIHJlbG4sIEZvcmtOdW1iZXIgZm9ya251 bSkKIHsKKwlNZFNNZ3JSZWxhdGlvbiBtZHJlbG4gPSAoTWRTTWdyUmVsYXRpb24pIHJlbG47 CiAJTWRmZFZlYyAgICAqdjsKIAlCbG9ja051bWJlciBuYmxvY2tzOwogCUJsb2NrTnVtYmVy IHNlZ25vOwogCi0JbWRvcGVuZm9yayhyZWxuLCBmb3JrbnVtLCBFWFRFTlNJT05fRkFJTCk7 CisJbWRvcGVuZm9yayhtZHJlbG4sIGZvcmtudW0sIEVYVEVOU0lPTl9GQUlMKTsKIAogCS8q IG1kb3BlbiBoYXMgb3BlbmVkIHRoZSBmaXJzdCBzZWdtZW50ICovCi0JQXNzZXJ0KHJlbG4t Pm1kX251bV9vcGVuX3NlZ3NbZm9ya251bV0gPiAwKTsKKwlBc3NlcnQobWRyZWxuLT5tZF9u dW1fb3Blbl9zZWdzW2ZvcmtudW1dID4gMCk7CiAKIAkvKgogCSAqIFN0YXJ0IGZyb20gdGhl IGxhc3Qgb3BlbiBzZWdtZW50cywgdG8gYXZvaWQgcmVkdW5kYW50IHNlZWtzLiAgV2UgaGF2 ZQpAQCAtMTEzMywxMiArMTE5MywxMiBAQCBtZG5ibG9ja3MoU01nclJlbGF0aW9uIHJlbG4s IEZvcmtOdW1iZXIgZm9ya251bSkKIAkgKiB0aGF0J3MgT0sgYmVjYXVzZSB0aGUgY2hlY2tw b2ludGVyIG5ldmVyIG5lZWRzIHRvIGNvbXB1dGUgcmVsYXRpb24KIAkgKiBzaXplLikKIAkg Ki8KLQlzZWdubyA9IHJlbG4tPm1kX251bV9vcGVuX3NlZ3NbZm9ya251bV0gLSAxOwotCXYg PSAmcmVsbi0+bWRfc2VnX2Zkc1tmb3JrbnVtXVtzZWdub107CisJc2Vnbm8gPSBtZHJlbG4t Pm1kX251bV9vcGVuX3NlZ3NbZm9ya251bV0gLSAxOworCXYgPSAmbWRyZWxuLT5tZF9zZWdf ZmRzW2ZvcmtudW1dW3NlZ25vXTsKIAogCWZvciAoOzspCiAJewotCQluYmxvY2tzID0gX21k bmJsb2NrcyhyZWxuLCBmb3JrbnVtLCB2KTsKKwkJbmJsb2NrcyA9IF9tZG5ibG9ja3MobWRy ZWxuLCBmb3JrbnVtLCB2KTsKIAkJaWYgKG5ibG9ja3MgPiAoKEJsb2NrTnVtYmVyKSBSRUxT RUdfU0laRSkpCiAJCQllbG9nKEZBVEFMLCAic2VnbWVudCB0b28gYmlnIik7CiAJCWlmIChu YmxvY2tzIDwgKChCbG9ja051bWJlcikgUkVMU0VHX1NJWkUpKQpAQCAtMTE1Niw3ICsxMjE2 LDcgQEAgbWRuYmxvY2tzKFNNZ3JSZWxhdGlvbiByZWxuLCBGb3JrTnVtYmVyIGZvcmtudW0p CiAJCSAqIHVuZGVybWluZXMgX21kZmRfZ2V0c2VnJ3MgYXR0ZW1wdHMgdG8gbm90aWNlIGFu ZCByZXBvcnQgYW4gZXJyb3IKIAkJICogdXBvbiBhY2Nlc3MgdG8gYSBtaXNzaW5nIHNlZ21l bnQuCiAJCSAqLwotCQl2ID0gX21kZmRfb3BlbnNlZyhyZWxuLCBmb3JrbnVtLCBzZWdubywg MCk7CisJCXYgPSBfbWRmZF9vcGVuc2VnKG1kcmVsbiwgZm9ya251bSwgc2Vnbm8sIDApOwog CQlpZiAodiA9PSBOVUxMKQogCQkJcmV0dXJuIHNlZ25vICogKChCbG9ja051bWJlcikgUkVM U0VHX1NJWkUpOwogCX0KQEAgLTExNzYsNiArMTIzNiw3IEBAIHZvaWQKIG1kdHJ1bmNhdGUo U01nclJlbGF0aW9uIHJlbG4sIEZvcmtOdW1iZXIgZm9ya251bSwKIAkJICAgQmxvY2tOdW1i ZXIgY3VybmJsaywgQmxvY2tOdW1iZXIgbmJsb2NrcykKIHsKKwlNZFNNZ3JSZWxhdGlvbiBt ZHJlbG4gPSAoTWRTTWdyUmVsYXRpb24pIHJlbG47CiAJQmxvY2tOdW1iZXIgcHJpb3JibG9j a3M7CiAJaW50CQkJY3Vyb3BlbnNlZ3M7CiAKQEAgLTExOTYsMTQgKzEyNTcsMTQgQEAgbWR0 cnVuY2F0ZShTTWdyUmVsYXRpb24gcmVsbiwgRm9ya051bWJlciBmb3JrbnVtLAogCSAqIFRy dW5jYXRlIHNlZ21lbnRzLCBzdGFydGluZyBhdCB0aGUgbGFzdCBvbmUuIFN0YXJ0aW5nIGF0 IHRoZSBlbmQgbWFrZXMKIAkgKiBtYW5hZ2luZyB0aGUgbWVtb3J5IGZvciB0aGUgZmQgYXJy YXkgZWFzaWVyLCBzaG91bGQgdGhlcmUgYmUgZXJyb3JzLgogCSAqLwotCWN1cm9wZW5zZWdz ID0gcmVsbi0+bWRfbnVtX29wZW5fc2Vnc1tmb3JrbnVtXTsKKwljdXJvcGVuc2VncyA9IG1k cmVsbi0+bWRfbnVtX29wZW5fc2Vnc1tmb3JrbnVtXTsKIAl3aGlsZSAoY3Vyb3BlbnNlZ3Mg PiAwKQogCXsKIAkJTWRmZFZlYyAgICAqdjsKIAogCQlwcmlvcmJsb2NrcyA9IChjdXJvcGVu c2VncyAtIDEpICogUkVMU0VHX1NJWkU7CiAKLQkJdiA9ICZyZWxuLT5tZF9zZWdfZmRzW2Zv cmtudW1dW2N1cm9wZW5zZWdzIC0gMV07CisJCXYgPSAmbWRyZWxuLT5tZF9zZWdfZmRzW2Zv cmtudW1dW2N1cm9wZW5zZWdzIC0gMV07CiAKIAkJaWYgKHByaW9yYmxvY2tzID4gbmJsb2Nr cykKIAkJewpAQCAtMTIxOCwxMyArMTI3OSwxMyBAQCBtZHRydW5jYXRlKFNNZ3JSZWxhdGlv biByZWxuLCBGb3JrTnVtYmVyIGZvcmtudW0sCiAJCQkJCQkJCUZpbGVQYXRoTmFtZSh2LT5t ZGZkX3ZmZCkpKSk7CiAKIAkJCWlmICghU21ncklzVGVtcChyZWxuKSkKLQkJCQlyZWdpc3Rl cl9kaXJ0eV9zZWdtZW50KHJlbG4sIGZvcmtudW0sIHYpOworCQkJCXJlZ2lzdGVyX2RpcnR5 X3NlZ21lbnQobWRyZWxuLCBmb3JrbnVtLCB2KTsKIAogCQkJLyogd2UgbmV2ZXIgZHJvcCB0 aGUgMXN0IHNlZ21lbnQgKi8KLQkJCUFzc2VydCh2ICE9ICZyZWxuLT5tZF9zZWdfZmRzW2Zv cmtudW1dWzBdKTsKKwkJCUFzc2VydCh2ICE9ICZtZHJlbG4tPm1kX3NlZ19mZHNbZm9ya251 bV1bMF0pOwogCiAJCQlGaWxlQ2xvc2Uodi0+bWRmZF92ZmQpOwotCQkJX2ZkdmVjX3Jlc2l6 ZShyZWxuLCBmb3JrbnVtLCBjdXJvcGVuc2VncyAtIDEpOworCQkJX2ZkdmVjX3Jlc2l6ZSht ZHJlbG4sIGZvcmtudW0sIGN1cm9wZW5zZWdzIC0gMSk7CiAJCX0KIAkJZWxzZSBpZiAocHJp b3JibG9ja3MgKyAoKEJsb2NrTnVtYmVyKSBSRUxTRUdfU0laRSkgPiBuYmxvY2tzKQogCQl7 CkBAIC0xMjQ0LDcgKzEzMDUsNyBAQCBtZHRydW5jYXRlKFNNZ3JSZWxhdGlvbiByZWxuLCBG b3JrTnVtYmVyIGZvcmtudW0sCiAJCQkJCQkJCUZpbGVQYXRoTmFtZSh2LT5tZGZkX3ZmZCks CiAJCQkJCQkJCW5ibG9ja3MpKSk7CiAJCQlpZiAoIVNtZ3JJc1RlbXAocmVsbikpCi0JCQkJ cmVnaXN0ZXJfZGlydHlfc2VnbWVudChyZWxuLCBmb3JrbnVtLCB2KTsKKwkJCQlyZWdpc3Rl cl9kaXJ0eV9zZWdtZW50KG1kcmVsbiwgZm9ya251bSwgdik7CiAJCX0KIAkJZWxzZQogCQl7 CkBAIC0xMjY0LDYgKzEzMjUsNyBAQCBtZHRydW5jYXRlKFNNZ3JSZWxhdGlvbiByZWxuLCBG b3JrTnVtYmVyIGZvcmtudW0sCiB2b2lkCiBtZHJlZ2lzdGVyc3luYyhTTWdyUmVsYXRpb24g cmVsbiwgRm9ya051bWJlciBmb3JrbnVtKQogeworCU1kU01nclJlbGF0aW9uIG1kcmVsbiA9 IChNZFNNZ3JSZWxhdGlvbikgcmVsbjsKIAlpbnQJCQlzZWdubzsKIAlpbnQJCQltaW5faW5h Y3RpdmVfc2VnOwogCkBAIC0xMjczLDcgKzEzMzUsNyBAQCBtZHJlZ2lzdGVyc3luYyhTTWdy UmVsYXRpb24gcmVsbiwgRm9ya051bWJlciBmb3JrbnVtKQogCSAqLwogCW1kbmJsb2Nrcyhy ZWxuLCBmb3JrbnVtKTsKIAotCW1pbl9pbmFjdGl2ZV9zZWcgPSBzZWdubyA9IHJlbG4tPm1k X251bV9vcGVuX3NlZ3NbZm9ya251bV07CisJbWluX2luYWN0aXZlX3NlZyA9IHNlZ25vID0g bWRyZWxuLT5tZF9udW1fb3Blbl9zZWdzW2ZvcmtudW1dOwogCiAJLyoKIAkgKiBUZW1wb3Jh cmlseSBvcGVuIGluYWN0aXZlIHNlZ21lbnRzLCB0aGVuIGNsb3NlIHRoZW0gYWZ0ZXIgc3lu Yy4gIFRoZXJlCkBAIC0xMjgxLDIwICsxMzQzLDIwIEBAIG1kcmVnaXN0ZXJzeW5jKFNNZ3JS ZWxhdGlvbiByZWxuLCBGb3JrTnVtYmVyIGZvcmtudW0pCiAJICogaGFybWxlc3MuICBXZSBk b24ndCBib3RoZXIgdG8gY2xlYW4gdGhlbSB1cCBhbmQgdGFrZSBhIHJpc2sgb2YgZnVydGhl cgogCSAqIHRyb3VibGUuICBUaGUgbmV4dCBtZGNsb3NlKCkgd2lsbCBzb29uIGNsb3NlIHRo ZW0uCiAJICovCi0Jd2hpbGUgKF9tZGZkX29wZW5zZWcocmVsbiwgZm9ya251bSwgc2Vnbm8s IDApICE9IE5VTEwpCisJd2hpbGUgKF9tZGZkX29wZW5zZWcobWRyZWxuLCBmb3JrbnVtLCBz ZWdubywgMCkgIT0gTlVMTCkKIAkJc2Vnbm8rKzsKIAogCXdoaWxlIChzZWdubyA+IDApCiAJ ewotCQlNZGZkVmVjICAgICp2ID0gJnJlbG4tPm1kX3NlZ19mZHNbZm9ya251bV1bc2Vnbm8g LSAxXTsKKwkJTWRmZFZlYyAgICAqdiA9ICZtZHJlbG4tPm1kX3NlZ19mZHNbZm9ya251bV1b c2Vnbm8gLSAxXTsKIAotCQlyZWdpc3Rlcl9kaXJ0eV9zZWdtZW50KHJlbG4sIGZvcmtudW0s IHYpOworCQlyZWdpc3Rlcl9kaXJ0eV9zZWdtZW50KG1kcmVsbiwgZm9ya251bSwgdik7CiAK IAkJLyogQ2xvc2UgaW5hY3RpdmUgc2VnbWVudHMgaW1tZWRpYXRlbHkgKi8KIAkJaWYgKHNl Z25vID4gbWluX2luYWN0aXZlX3NlZykKIAkJewogCQkJRmlsZUNsb3NlKHYtPm1kZmRfdmZk KTsKLQkJCV9mZHZlY19yZXNpemUocmVsbiwgZm9ya251bSwgc2Vnbm8gLSAxKTsKKwkJCV9m ZHZlY19yZXNpemUobWRyZWxuLCBmb3JrbnVtLCBzZWdubyAtIDEpOwogCQl9CiAKIAkJc2Vn bm8tLTsKQEAgLTEzMTUsNiArMTM3Nyw3IEBAIG1kcmVnaXN0ZXJzeW5jKFNNZ3JSZWxhdGlv biByZWxuLCBGb3JrTnVtYmVyIGZvcmtudW0pCiB2b2lkCiBtZGltbWVkc3luYyhTTWdyUmVs YXRpb24gcmVsbiwgRm9ya051bWJlciBmb3JrbnVtKQogeworCU1kU01nclJlbGF0aW9uIG1k cmVsbiA9IChNZFNNZ3JSZWxhdGlvbikgcmVsbjsKIAlpbnQJCQlzZWdubzsKIAlpbnQJCQlt aW5faW5hY3RpdmVfc2VnOwogCkBAIC0xMzI0LDcgKzEzODcsNyBAQCBtZGltbWVkc3luYyhT TWdyUmVsYXRpb24gcmVsbiwgRm9ya051bWJlciBmb3JrbnVtKQogCSAqLwogCW1kbmJsb2Nr cyhyZWxuLCBmb3JrbnVtKTsKIAotCW1pbl9pbmFjdGl2ZV9zZWcgPSBzZWdubyA9IHJlbG4t Pm1kX251bV9vcGVuX3NlZ3NbZm9ya251bV07CisJbWluX2luYWN0aXZlX3NlZyA9IHNlZ25v ID0gbWRyZWxuLT5tZF9udW1fb3Blbl9zZWdzW2ZvcmtudW1dOwogCiAJLyoKIAkgKiBUZW1w b3JhcmlseSBvcGVuIGluYWN0aXZlIHNlZ21lbnRzLCB0aGVuIGNsb3NlIHRoZW0gYWZ0ZXIg c3luYy4gIFRoZXJlCkBAIC0xMzMyLDEyICsxMzk1LDEyIEBAIG1kaW1tZWRzeW5jKFNNZ3JS ZWxhdGlvbiByZWxuLCBGb3JrTnVtYmVyIGZvcmtudW0pCiAJICogaXMgaGFybWxlc3MuICBX ZSBkb24ndCBib3RoZXIgdG8gY2xlYW4gdGhlbSB1cCBhbmQgdGFrZSBhIHJpc2sgb2YKIAkg KiBmdXJ0aGVyIHRyb3VibGUuICBUaGUgbmV4dCBtZGNsb3NlKCkgd2lsbCBzb29uIGNsb3Nl IHRoZW0uCiAJICovCi0Jd2hpbGUgKF9tZGZkX29wZW5zZWcocmVsbiwgZm9ya251bSwgc2Vn bm8sIDApICE9IE5VTEwpCisJd2hpbGUgKF9tZGZkX29wZW5zZWcobWRyZWxuLCBmb3JrbnVt LCBzZWdubywgMCkgIT0gTlVMTCkKIAkJc2Vnbm8rKzsKIAogCXdoaWxlIChzZWdubyA+IDAp CiAJewotCQlNZGZkVmVjICAgICp2ID0gJnJlbG4tPm1kX3NlZ19mZHNbZm9ya251bV1bc2Vn bm8gLSAxXTsKKwkJTWRmZFZlYyAgICAqdiA9ICZtZHJlbG4tPm1kX3NlZ19mZHNbZm9ya251 bV1bc2Vnbm8gLSAxXTsKIAogCQkvKgogCQkgKiBmc3luY3MgZG9uZSB0aHJvdWdoIG1kaW1t ZWRzeW5jKCkgc2hvdWxkIGJlIHRyYWNrZWQgaW4gYSBzZXBhcmF0ZQpAQCAtMTM1OCw3ICsx NDIxLDcgQEAgbWRpbW1lZHN5bmMoU01nclJlbGF0aW9uIHJlbG4sIEZvcmtOdW1iZXIgZm9y a251bSkKIAkJaWYgKHNlZ25vID4gbWluX2luYWN0aXZlX3NlZykKIAkJewogCQkJRmlsZUNs b3NlKHYtPm1kZmRfdmZkKTsKLQkJCV9mZHZlY19yZXNpemUocmVsbiwgZm9ya251bSwgc2Vn bm8gLSAxKTsKKwkJCV9mZHZlY19yZXNpemUobWRyZWxuLCBmb3JrbnVtLCBzZWdubyAtIDEp OwogCQl9CiAKIAkJc2Vnbm8tLTsKQEAgLTEzNzUsMTQgKzE0MzgsMTQgQEAgbWRpbW1lZHN5 bmMoU01nclJlbGF0aW9uIHJlbG4sIEZvcmtOdW1iZXIgZm9ya251bSkKICAqIGVub3VnaCB0 byBiZSBhIHBlcmZvcm1hbmNlIHByb2JsZW0pLgogICovCiBzdGF0aWMgdm9pZAotcmVnaXN0 ZXJfZGlydHlfc2VnbWVudChTTWdyUmVsYXRpb24gcmVsbiwgRm9ya051bWJlciBmb3JrbnVt LCBNZGZkVmVjICpzZWcpCityZWdpc3Rlcl9kaXJ0eV9zZWdtZW50KE1kU01nclJlbGF0aW9u IHJlbG4sIEZvcmtOdW1iZXIgZm9ya251bSwgTWRmZFZlYyAqc2VnKQogewogCUZpbGVUYWcJ CXRhZzsKIAotCUlOSVRfTURfRklMRVRBRyh0YWcsIHJlbG4tPnNtZ3JfcmxvY2F0b3IubG9j YXRvciwgZm9ya251bSwgc2VnLT5tZGZkX3NlZ25vKTsKKwlJTklUX01EX0ZJTEVUQUcodGFn LCByZWxuLT5yZWxuLnNtZ3JfcmxvY2F0b3IubG9jYXRvciwgZm9ya251bSwgc2VnLT5tZGZk X3NlZ25vKTsKIAogCS8qIFRlbXAgcmVsYXRpb25zIHNob3VsZCBuZXZlciBiZSBmc3luYydk ICovCi0JQXNzZXJ0KCFTbWdySXNUZW1wKHJlbG4pKTsKKwlBc3NlcnQoIVNtZ3JJc1RlbXAo JnJlbG4tPnJlbG4pKTsKIAogCWlmICghUmVnaXN0ZXJTeW5jUmVxdWVzdCgmdGFnLCBTWU5D X1JFUVVFU1QsIGZhbHNlIC8qIHJldHJ5T25FcnJvciAqLyApKQogCXsKQEAgLTE1MDAsNyAr MTU2Myw3IEBAIERyb3BSZWxhdGlvbkZpbGVzKFJlbEZpbGVMb2NhdG9yICpkZWxyZWxzLCBp bnQgbmRlbHJlbHMsIGJvb2wgaXNSZWRvKQogICogX2ZkdmVjX3Jlc2l6ZSgpIC0tIFJlc2l6 ZSB0aGUgZm9yaydzIG9wZW4gc2VnbWVudHMgYXJyYXkKICAqLwogc3RhdGljIHZvaWQKLV9m ZHZlY19yZXNpemUoU01nclJlbGF0aW9uIHJlbG4sCitfZmR2ZWNfcmVzaXplKE1kU01nclJl bGF0aW9uIHJlbG4sCiAJCQkgIEZvcmtOdW1iZXIgZm9ya251bSwKIAkJCSAgaW50IG5zZWcp CiB7CkBAIC0xNTQ4LDEyICsxNjExLDEyIEBAIF9mZHZlY19yZXNpemUoU01nclJlbGF0aW9u IHJlbG4sCiAgKiByZXR1cm5lZCBzdHJpbmcgaXMgcGFsbG9jJ2QuCiAgKi8KIHN0YXRpYyBN ZFBhdGhTdHIKLV9tZGZkX3NlZ3BhdGgoU01nclJlbGF0aW9uIHJlbG4sIEZvcmtOdW1iZXIg Zm9ya251bSwgQmxvY2tOdW1iZXIgc2Vnbm8pCitfbWRmZF9zZWdwYXRoKE1kU01nclJlbGF0 aW9uIHJlbG4sIEZvcmtOdW1iZXIgZm9ya251bSwgQmxvY2tOdW1iZXIgc2Vnbm8pCiB7CiAJ UmVsUGF0aFN0cglwYXRoOwogCU1kUGF0aFN0cglmdWxscGF0aDsKIAotCXBhdGggPSByZWxw YXRoKHJlbG4tPnNtZ3JfcmxvY2F0b3IsIGZvcmtudW0pOworCXBhdGggPSByZWxwYXRoKHJl bG4tPnJlbG4uc21ncl9ybG9jYXRvciwgZm9ya251bSk7CiAKIAlpZiAoc2Vnbm8gPiAwKQog CQlzcHJpbnRmKGZ1bGxwYXRoLnN0ciwgIiVzLiV1IiwgcGF0aC5zdHIsIHNlZ25vKTsKQEAg LTE1NjgsNyArMTYzMSw3IEBAIF9tZGZkX3NlZ3BhdGgoU01nclJlbGF0aW9uIHJlbG4sIEZv cmtOdW1iZXIgZm9ya251bSwgQmxvY2tOdW1iZXIgc2Vnbm8pCiAgKiBhbmQgbWFrZSBhIE1k ZmRWZWMgb2JqZWN0IGZvciBpdC4gIFJldHVybnMgTlVMTCBvbiBmYWlsdXJlLgogICovCiBz dGF0aWMgTWRmZFZlYyAqCi1fbWRmZF9vcGVuc2VnKFNNZ3JSZWxhdGlvbiByZWxuLCBGb3Jr TnVtYmVyIGZvcmtudW0sIEJsb2NrTnVtYmVyIHNlZ25vLAorX21kZmRfb3BlbnNlZyhNZFNN Z3JSZWxhdGlvbiByZWxuLCBGb3JrTnVtYmVyIGZvcmtudW0sIEJsb2NrTnVtYmVyIHNlZ25v LAogCQkJICBpbnQgb2ZsYWdzKQogewogCU1kZmRWZWMgICAgKnY7CkBAIC0xNjExLDcgKzE2 NzQsNyBAQCBfbWRmZF9vcGVuc2VnKFNNZ3JSZWxhdGlvbiByZWxuLCBGb3JrTnVtYmVyIGZv cmtudW0sIEJsb2NrTnVtYmVyIHNlZ25vLAogICogRVhURU5TSU9OX0NSRUFURSBjYXNlLgog ICovCiBzdGF0aWMgTWRmZFZlYyAqCi1fbWRmZF9nZXRzZWcoU01nclJlbGF0aW9uIHJlbG4s IEZvcmtOdW1iZXIgZm9ya251bSwgQmxvY2tOdW1iZXIgYmxrbm8sCitfbWRmZF9nZXRzZWco TWRTTWdyUmVsYXRpb24gcmVsbiwgRm9ya051bWJlciBmb3JrbnVtLCBCbG9ja051bWJlciBi bGtubywKIAkJCSBib29sIHNraXBGc3luYywgaW50IGJlaGF2aW9yKQogewogCU1kZmRWZWMg ICAgKnY7CkBAIC0xNjg1LDcgKzE3NDgsNyBAQCBfbWRmZF9nZXRzZWcoU01nclJlbGF0aW9u IHJlbG4sIEZvcmtOdW1iZXIgZm9ya251bSwgQmxvY2tOdW1iZXIgYmxrbm8sCiAJCQkJY2hh cgkgICAqemVyb2J1ZiA9IHBhbGxvY19hbGlnbmVkKEJMQ0tTWiwgUEdfSU9fQUxJR05fU0la RSwKIAkJCQkJCQkJCQkJCQkgTUNYVF9BTExPQ19aRVJPKTsKIAotCQkJCW1kZXh0ZW5kKHJl bG4sIGZvcmtudW0sCisJCQkJbWRleHRlbmQoKFNNZ3JSZWxhdGlvbikgcmVsbiwgZm9ya251 bSwKIAkJCQkJCSBuZXh0c2Vnbm8gKiAoKEJsb2NrTnVtYmVyKSBSRUxTRUdfU0laRSkgLSAx LAogCQkJCQkJIHplcm9idWYsIHNraXBGc3luYyk7CiAJCQkJcGZyZWUoemVyb2J1Zik7CkBA IC0xNzQwLDcgKzE4MDMsNyBAQCBfbWRmZF9nZXRzZWcoU01nclJlbGF0aW9uIHJlbG4sIEZv cmtOdW1iZXIgZm9ya251bSwgQmxvY2tOdW1iZXIgYmxrbm8sCiAgKiBHZXQgbnVtYmVyIG9m IGJsb2NrcyBwcmVzZW50IGluIGEgc2luZ2xlIGRpc2sgZmlsZQogICovCiBzdGF0aWMgQmxv Y2tOdW1iZXIKLV9tZG5ibG9ja3MoU01nclJlbGF0aW9uIHJlbG4sIEZvcmtOdW1iZXIgZm9y a251bSwgTWRmZFZlYyAqc2VnKQorX21kbmJsb2NrcyhNZFNNZ3JSZWxhdGlvbiByZWxuLCBG b3JrTnVtYmVyIGZvcmtudW0sIE1kZmRWZWMgKnNlZykKIHsKIAlvZmZfdAkJbGVuOwogCkBA IC0xNzYzLDcgKzE4MjYsNyBAQCBfbWRuYmxvY2tzKFNNZ3JSZWxhdGlvbiByZWxuLCBGb3Jr TnVtYmVyIGZvcmtudW0sIE1kZmRWZWMgKnNlZykKIGludAogbWRzeW5jZmlsZXRhZyhjb25z dCBGaWxlVGFnICpmdGFnLCBjaGFyICpwYXRoKQogewotCVNNZ3JSZWxhdGlvbiByZWxuID0g c21ncm9wZW4oZnRhZy0+cmxvY2F0b3IsIElOVkFMSURfUFJPQ19OVU1CRVIpOworCU1kU01n clJlbGF0aW9uIHJlbG4gPSAoTWRTTWdyUmVsYXRpb24pIHNtZ3JvcGVuKGZ0YWctPnJsb2Nh dG9yLCBJTlZBTElEX1BST0NfTlVNQkVSKTsKIAlGaWxlCQlmaWxlOwogCWluc3RyX3RpbWUJ aW9fc3RhcnQ7CiAJYm9vbAkJbmVlZF90b19jbG9zZTsKZGlmZiAtLWdpdCBhL3NyYy9iYWNr ZW5kL3N0b3JhZ2Uvc21nci9zbWdyLmMgYi9zcmMvYmFja2VuZC9zdG9yYWdlL3NtZ3Ivc21n ci5jCmluZGV4IGViZTM1YzA0ZGU1Li43NjM1YzIzMWVhMCAxMDA2NDQKLS0tIGEvc3JjL2Jh Y2tlbmQvc3RvcmFnZS9zbWdyL3NtZ3IuYworKysgYi9zcmMvYmFja2VuZC9zdG9yYWdlL3Nt Z3Ivc21nci5jCkBAIC01Myw4NCArNTMsMjEgQEAKIAogI2luY2x1ZGUgImFjY2Vzcy94bG9n dXRpbHMuaCIKICNpbmNsdWRlICJsaWIvaWxpc3QuaCIKKyNpbmNsdWRlICJtaXNjYWRtaW4u aCIKICNpbmNsdWRlICJzdG9yYWdlL2J1Zm1nci5oIgogI2luY2x1ZGUgInN0b3JhZ2UvaXBj LmgiCiAjaW5jbHVkZSAic3RvcmFnZS9tZC5oIgogI2luY2x1ZGUgInN0b3JhZ2Uvc21nci5o IgorI2luY2x1ZGUgInBvcnQvYXRvbWljcy5oIgogI2luY2x1ZGUgInV0aWxzL2hzZWFyY2gu aCIKICNpbmNsdWRlICJ1dGlscy9pbnZhbC5oIgorI2luY2x1ZGUgInV0aWxzL21lbXV0aWxz LmgiCiAKK3N0YXRpYyBmX3NtZ3IgKnNtZ3JzdzsKIAotLyoKLSAqIFRoaXMgc3RydWN0IG9m IGZ1bmN0aW9uIHBvaW50ZXJzIGRlZmluZXMgdGhlIEFQSSBiZXR3ZWVuIHNtZ3IuYyBhbmQK LSAqIGFueSBpbmRpdmlkdWFsIHN0b3JhZ2UgbWFuYWdlciBtb2R1bGUuICBOb3RlIHRoYXQg c21nciBzdWJmdW5jdGlvbnMgYXJlCi0gKiBnZW5lcmFsbHkgZXhwZWN0ZWQgdG8gcmVwb3J0 IHByb2JsZW1zIHZpYSBlbG9nKEVSUk9SKS4gIEFuIGV4Y2VwdGlvbiBpcwotICogdGhhdCBz bWdyX3VubGluayBzaG91bGQgdXNlIGVsb2coV0FSTklORyksIHJhdGhlciB0aGFuIGVycm9y aW5nIG91dCwKLSAqIGJlY2F1c2Ugd2Ugbm9ybWFsbHkgdW5saW5rIHJlbGF0aW9ucyBkdXJp bmcgcG9zdC1jb21taXQvYWJvcnQgY2xlYW51cCwKLSAqIGFuZCBzbyBpdCdzIHRvbyBsYXRl IHRvIHJhaXNlIGFuIGVycm9yLiAgQWxzbywgdmFyaW91cyBjb25kaXRpb25zIHRoYXQKLSAq IHdvdWxkIG5vcm1hbGx5IGJlIGVycm9ycyBzaG91bGQgYmUgYWxsb3dlZCBkdXJpbmcgYm9v dHN0cmFwIGFuZC9vciBXQUwKLSAqIHJlY292ZXJ5IC0tLSBzZWUgY29tbWVudHMgaW4gbWQu YyBmb3IgZGV0YWlscy4KLSAqLwotdHlwZWRlZiBzdHJ1Y3QgZl9zbWdyCi17Ci0Jdm9pZAkJ KCpzbWdyX2luaXQpICh2b2lkKTsJLyogbWF5IGJlIE5VTEwgKi8KLQl2b2lkCQkoKnNtZ3Jf c2h1dGRvd24pICh2b2lkKTsJLyogbWF5IGJlIE5VTEwgKi8KLQl2b2lkCQkoKnNtZ3Jfb3Bl bikgKFNNZ3JSZWxhdGlvbiByZWxuKTsKLQl2b2lkCQkoKnNtZ3JfY2xvc2UpIChTTWdyUmVs YXRpb24gcmVsbiwgRm9ya051bWJlciBmb3JrbnVtKTsKLQl2b2lkCQkoKnNtZ3JfY3JlYXRl KSAoU01nclJlbGF0aW9uIHJlbG4sIEZvcmtOdW1iZXIgZm9ya251bSwKLQkJCQkJCQkJYm9v bCBpc1JlZG8pOwotCWJvb2wJCSgqc21ncl9leGlzdHMpIChTTWdyUmVsYXRpb24gcmVsbiwg Rm9ya051bWJlciBmb3JrbnVtKTsKLQl2b2lkCQkoKnNtZ3JfdW5saW5rKSAoUmVsRmlsZUxv Y2F0b3JCYWNrZW5kIHJsb2NhdG9yLCBGb3JrTnVtYmVyIGZvcmtudW0sCi0JCQkJCQkJCWJv b2wgaXNSZWRvKTsKLQl2b2lkCQkoKnNtZ3JfZXh0ZW5kKSAoU01nclJlbGF0aW9uIHJlbG4s IEZvcmtOdW1iZXIgZm9ya251bSwKLQkJCQkJCQkJQmxvY2tOdW1iZXIgYmxvY2tudW0sIGNv bnN0IHZvaWQgKmJ1ZmZlciwgYm9vbCBza2lwRnN5bmMpOwotCXZvaWQJCSgqc21ncl96ZXJv ZXh0ZW5kKSAoU01nclJlbGF0aW9uIHJlbG4sIEZvcmtOdW1iZXIgZm9ya251bSwKLQkJCQkJ CQkJCUJsb2NrTnVtYmVyIGJsb2NrbnVtLCBpbnQgbmJsb2NrcywgYm9vbCBza2lwRnN5bmMp OwotCWJvb2wJCSgqc21ncl9wcmVmZXRjaCkgKFNNZ3JSZWxhdGlvbiByZWxuLCBGb3JrTnVt YmVyIGZvcmtudW0sCi0JCQkJCQkJCSAgQmxvY2tOdW1iZXIgYmxvY2tudW0sIGludCBuYmxv Y2tzKTsKLQl1aW50MzIJCSgqc21ncl9tYXhjb21iaW5lKSAoU01nclJlbGF0aW9uIHJlbG4s IEZvcmtOdW1iZXIgZm9ya251bSwKLQkJCQkJCQkJCUJsb2NrTnVtYmVyIGJsb2NrbnVtKTsK LQl2b2lkCQkoKnNtZ3JfcmVhZHYpIChTTWdyUmVsYXRpb24gcmVsbiwgRm9ya051bWJlciBm b3JrbnVtLAotCQkJCQkJCSAgIEJsb2NrTnVtYmVyIGJsb2NrbnVtLAotCQkJCQkJCSAgIHZv aWQgKipidWZmZXJzLCBCbG9ja051bWJlciBuYmxvY2tzKTsKLQl2b2lkCQkoKnNtZ3Jfd3Jp dGV2KSAoU01nclJlbGF0aW9uIHJlbG4sIEZvcmtOdW1iZXIgZm9ya251bSwKLQkJCQkJCQkJ QmxvY2tOdW1iZXIgYmxvY2tudW0sCi0JCQkJCQkJCWNvbnN0IHZvaWQgKipidWZmZXJzLCBC bG9ja051bWJlciBuYmxvY2tzLAotCQkJCQkJCQlib29sIHNraXBGc3luYyk7Ci0Jdm9pZAkJ KCpzbWdyX3dyaXRlYmFjaykgKFNNZ3JSZWxhdGlvbiByZWxuLCBGb3JrTnVtYmVyIGZvcmtu dW0sCi0JCQkJCQkJCSAgIEJsb2NrTnVtYmVyIGJsb2NrbnVtLCBCbG9ja051bWJlciBuYmxv Y2tzKTsKLQlCbG9ja051bWJlciAoKnNtZ3JfbmJsb2NrcykgKFNNZ3JSZWxhdGlvbiByZWxu LCBGb3JrTnVtYmVyIGZvcmtudW0pOwotCXZvaWQJCSgqc21ncl90cnVuY2F0ZSkgKFNNZ3JS ZWxhdGlvbiByZWxuLCBGb3JrTnVtYmVyIGZvcmtudW0sCi0JCQkJCQkJCSAgQmxvY2tOdW1i ZXIgb2xkX2Jsb2NrcywgQmxvY2tOdW1iZXIgbmJsb2Nrcyk7Ci0Jdm9pZAkJKCpzbWdyX2lt bWVkc3luYykgKFNNZ3JSZWxhdGlvbiByZWxuLCBGb3JrTnVtYmVyIGZvcmtudW0pOwotCXZv aWQJCSgqc21ncl9yZWdpc3RlcnN5bmMpIChTTWdyUmVsYXRpb24gcmVsbiwgRm9ya051bWJl ciBmb3JrbnVtKTsKLX0gZl9zbWdyOwotCi1zdGF0aWMgY29uc3QgZl9zbWdyIHNtZ3Jzd1td ID0gewotCS8qIG1hZ25ldGljIGRpc2sgKi8KLQl7Ci0JCS5zbWdyX2luaXQgPSBtZGluaXQs Ci0JCS5zbWdyX3NodXRkb3duID0gTlVMTCwKLQkJLnNtZ3Jfb3BlbiA9IG1kb3BlbiwKLQkJ LnNtZ3JfY2xvc2UgPSBtZGNsb3NlLAotCQkuc21ncl9jcmVhdGUgPSBtZGNyZWF0ZSwKLQkJ LnNtZ3JfZXhpc3RzID0gbWRleGlzdHMsCi0JCS5zbWdyX3VubGluayA9IG1kdW5saW5rLAot CQkuc21ncl9leHRlbmQgPSBtZGV4dGVuZCwKLQkJLnNtZ3JfemVyb2V4dGVuZCA9IG1kemVy b2V4dGVuZCwKLQkJLnNtZ3JfcHJlZmV0Y2ggPSBtZHByZWZldGNoLAotCQkuc21ncl9tYXhj b21iaW5lID0gbWRtYXhjb21iaW5lLAotCQkuc21ncl9yZWFkdiA9IG1kcmVhZHYsCi0JCS5z bWdyX3dyaXRldiA9IG1kd3JpdGV2LAotCQkuc21ncl93cml0ZWJhY2sgPSBtZHdyaXRlYmFj aywKLQkJLnNtZ3JfbmJsb2NrcyA9IG1kbmJsb2NrcywKLQkJLnNtZ3JfdHJ1bmNhdGUgPSBt ZHRydW5jYXRlLAotCQkuc21ncl9pbW1lZHN5bmMgPSBtZGltbWVkc3luYywKLQkJLnNtZ3Jf cmVnaXN0ZXJzeW5jID0gbWRyZWdpc3RlcnN5bmMsCi0JfQotfTsKK3N0YXRpYyBpbnQJTlNt Z3IgPSAwOwogCi1zdGF0aWMgY29uc3QgaW50IE5TbWdyID0gbGVuZ3Rob2Yoc21ncnN3KTsK K3N0YXRpYyBTaXplIExhcmdlc3RTTWdyUmVsYXRpb25TaXplID0gMDsKIAogLyoKICAqIEVh Y2ggYmFja2VuZCBoYXMgYSBoYXNodGFibGUgdGhhdCBzdG9yZXMgYWxsIGV4dGFudCBTTWdy UmVsYXRpb24gb2JqZWN0cy4KQEAgLTE0NCw2ICs4MSw2MCBAQCBzdGF0aWMgZGxpc3RfaGVh ZCB1bnBpbm5lZF9yZWxuczsKIHN0YXRpYyB2b2lkIHNtZ3JzaHV0ZG93bihpbnQgY29kZSwg RGF0dW0gYXJnKTsKIHN0YXRpYyB2b2lkIHNtZ3JkZXN0cm95KFNNZ3JSZWxhdGlvbiByZWxu KTsKIAorI2RlZmluZSBNYXhTTWdySWQgVUlOVDhfTUFYCisKK1NNZ3JJZAorc21ncl9yZWdp c3Rlcihjb25zdCBmX3NtZ3IgKnNtZ3IsIFNpemUgc21ncnJlbGF0aW9uX3NpemUpCit7CisJ U01ncklkCQlteV9pZDsKKwlNZW1vcnlDb250ZXh0IG9sZDsKKworCWlmIChwcm9jZXNzX3No YXJlZF9wcmVsb2FkX2xpYnJhcmllc19kb25lKQorCQllbG9nKEZBVEFMLCAiU01ncnMgbXVz dCBiZSByZWdpc3RlcmVkIGluIHRoZSBzaGFyZWRfcHJlbG9hZF9saWJyYXJpZXMgcGhhc2Ui KTsKKwlpZiAoTlNtZ3IgPT0gTWF4U01ncklkKQorCQllbG9nKEZBVEFMLCAiVG9vIG1hbnkg c21ncnMgcmVnaXN0ZXJlZCIpOworCWlmIChzbWdyLT5uYW1lID09IE5VTEwgfHwgKnNtZ3It Pm5hbWUgPT0gMCkKKwkJZWxvZyhGQVRBTCwgInNtZ3IgcmVnaXN0ZXJlZCB3aXRoIGludmFs aWQgbmFtZSIpOworCisJQXNzZXJ0KHNtZ3ItPnNtZ3Jfb3BlbiAhPSBOVUxMKTsKKwlBc3Nl cnQoc21nci0+c21ncl9jbG9zZSAhPSBOVUxMKTsKKwlBc3NlcnQoc21nci0+c21ncl9jcmVh dGUgIT0gTlVMTCk7CisJQXNzZXJ0KHNtZ3ItPnNtZ3JfZXhpc3RzICE9IE5VTEwpOworCUFz c2VydChzbWdyLT5zbWdyX3VubGluayAhPSBOVUxMKTsKKwlBc3NlcnQoc21nci0+c21ncl9l eHRlbmQgIT0gTlVMTCk7CisJQXNzZXJ0KHNtZ3ItPnNtZ3JfemVyb2V4dGVuZCAhPSBOVUxM KTsKKwlBc3NlcnQoc21nci0+c21ncl9wcmVmZXRjaCAhPSBOVUxMKTsKKwlBc3NlcnQoc21n ci0+c21ncl9yZWFkdiAhPSBOVUxMKTsKKwlBc3NlcnQoc21nci0+c21ncl93cml0ZXYgIT0g TlVMTCk7CisJQXNzZXJ0KHNtZ3ItPnNtZ3Jfd3JpdGViYWNrICE9IE5VTEwpOworCUFzc2Vy dChzbWdyLT5zbWdyX25ibG9ja3MgIT0gTlVMTCk7CisJQXNzZXJ0KHNtZ3ItPnNtZ3JfdHJ1 bmNhdGUgIT0gTlVMTCk7CisJQXNzZXJ0KHNtZ3ItPnNtZ3JfaW1tZWRzeW5jICE9IE5VTEwp OworCisJb2xkID0gTWVtb3J5Q29udGV4dFN3aXRjaFRvKFRvcE1lbW9yeUNvbnRleHQpOwor CisJbXlfaWQgPSBOU21ncisrOworCWlmIChteV9pZCA9PSAwKQorCQlzbWdyc3cgPSBwYWxs b2NfYXJyYXkoZl9zbWdyLCAxKTsKKwllbHNlCisJCXNtZ3JzdyA9IHJlcGFsbG9jX2FycmF5 KHNtZ3JzdywgZl9zbWdyLCBOU21ncik7CisKKwlNZW1vcnlDb250ZXh0U3dpdGNoVG8ob2xk KTsKKworCXBnX2NvbXBpbGVyX2JhcnJpZXIoKTsKKworCWlmICghc21ncnN3KQorCXsKKwkJ TlNtZ3ItLTsKKwkJZWxvZyhGQVRBTCwgIkZhaWxlZCB0byBleHRlbmQgc21nciBhcnJheSIp OworCX0KKworCXNtZ3Jzd1tteV9pZF0gPSAqc21ncjsKKworCUxhcmdlc3RTTWdyUmVsYXRp b25TaXplID0gTWF4KExhcmdlc3RTTWdyUmVsYXRpb25TaXplLCBzbWdycmVsYXRpb25fc2l6 ZSk7CisKKwlyZXR1cm4gbXlfaWQ7Cit9CiAKIC8qCiAgKiBzbWdyaW5pdCgpLCBzbWdyc2h1 dGRvd24oKSAtLSBJbml0aWFsaXplIG9yIHNodXQgZG93biBzdG9yYWdlCkBAIC0yMTEsOCAr MjAyLDExIEBAIHNtZ3JvcGVuKFJlbEZpbGVMb2NhdG9yIHJsb2NhdG9yLCBQcm9jTnVtYmVy IGJhY2tlbmQpCiAJCS8qIEZpcnN0IHRpbWUgdGhyb3VnaDogaW5pdGlhbGl6ZSB0aGUgaGFz aCB0YWJsZSAqLwogCQlIQVNIQ1RMCQljdGw7CiAKKwkJTGFyZ2VzdFNNZ3JSZWxhdGlvblNp emUgPSBNQVhBTElHTihMYXJnZXN0U01nclJlbGF0aW9uU2l6ZSk7CisJCUFzc2VydChOU21n ciA+IDApOworCiAJCWN0bC5rZXlzaXplID0gc2l6ZW9mKFJlbEZpbGVMb2NhdG9yQmFja2Vu ZCk7Ci0JCWN0bC5lbnRyeXNpemUgPSBzaXplb2YoU01nclJlbGF0aW9uRGF0YSk7CisJCWN0 bC5lbnRyeXNpemUgPSBMYXJnZXN0U01nclJlbGF0aW9uU2l6ZTsKIAkJU01nclJlbGF0aW9u SGFzaCA9IGhhc2hfY3JlYXRlKCJzbWdyIHJlbGF0aW9uIHRhYmxlIiwgNDAwLAogCQkJCQkJ CQkJICAgJmN0bCwgSEFTSF9FTEVNIHwgSEFTSF9CTE9CUyk7CiAJCWRsaXN0X2luaXQoJnVu cGlubmVkX3JlbG5zKTsKQEAgLTIzMiw3ICsyMjYsOCBAQCBzbWdyb3BlbihSZWxGaWxlTG9j YXRvciBybG9jYXRvciwgUHJvY051bWJlciBiYWNrZW5kKQogCQlyZWxuLT5zbWdyX3Rhcmdi bG9jayA9IEludmFsaWRCbG9ja051bWJlcjsKIAkJZm9yIChpbnQgaSA9IDA7IGkgPD0gTUFY X0ZPUktOVU07ICsraSkKIAkJCXJlbG4tPnNtZ3JfY2FjaGVkX25ibG9ja3NbaV0gPSBJbnZh bGlkQmxvY2tOdW1iZXI7Ci0JCXJlbG4tPnNtZ3Jfd2hpY2ggPSAwOwkvKiB3ZSBvbmx5IGhh dmUgbWQuYyBhdCBwcmVzZW50ICovCisKKwkJcmVsbi0+c21ncl93aGljaCA9IE1kU01ncklk OwkvKiB3ZSBvbmx5IGhhdmUgbWQuYyBhdCBwcmVzZW50ICovCiAKIAkJLyogaW1wbGVtZW50 YXRpb24tc3BlY2lmaWMgaW5pdGlhbGl6YXRpb24gKi8KIAkJc21ncnN3W3JlbG4tPnNtZ3Jf d2hpY2hdLnNtZ3Jfb3BlbihyZWxuKTsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxz L2luaXQvbWlzY2luaXQuYyBiL3NyYy9iYWNrZW5kL3V0aWxzL2luaXQvbWlzY2luaXQuYwpp bmRleCBkYzM1MjE0NTdjNy4uMzE3NmNkY2U2ZDcgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5k L3V0aWxzL2luaXQvbWlzY2luaXQuYworKysgYi9zcmMvYmFja2VuZC91dGlscy9pbml0L21p c2Npbml0LmMKQEAgLTQzLDYgKzQzLDcgQEAKICNpbmNsdWRlICJyZXBsaWNhdGlvbi9zbG90 c3luYy5oIgogI2luY2x1ZGUgInN0b3JhZ2UvZmQuaCIKICNpbmNsdWRlICJzdG9yYWdlL2lw Yy5oIgorI2luY2x1ZGUgInN0b3JhZ2UvbWQuaCIKICNpbmNsdWRlICJzdG9yYWdlL2xhdGNo LmgiCiAjaW5jbHVkZSAic3RvcmFnZS9wZ19zaG1lbS5oIgogI2luY2x1ZGUgInN0b3JhZ2Uv cG1zaWduYWwuaCIKQEAgLTE5Miw2ICsxOTMsOSBAQCBJbml0U3RhbmRhbG9uZVByb2Nlc3Mo Y29uc3QgY2hhciAqYXJndjApCiAJSW5pdFByb2Nlc3NMb2NhbExhdGNoKCk7CiAJSW5pdGlh bGl6ZUxhdGNoV2FpdFNldCgpOwogCisJLyogSW5pdGlhbGl6ZSBzbWdycyAqLworCXJlZ2lz dGVyX2J1aWx0aW5fZHluYW1pY19tYW5hZ2VycygpOworCiAJLyoKIAkgKiBGb3IgY29uc2lz dGVuY3kgd2l0aCBJbml0UG9zdG1hc3RlckNoaWxkLCBpbml0aWFsaXplIHNpZ25hbCBtYXNr IGhlcmUuCiAJICogQnV0IHdlIGRvbid0IHVuYmxvY2sgU0lHUVVJVCBvciBwcm92aWRlIGEg ZGVmYXVsdCBoYW5kbGVyIGZvciBpdC4KQEAgLTE5MjAsNiArMTkyNCwxNSBAQCBwcm9jZXNz X3Nlc3Npb25fcHJlbG9hZF9saWJyYXJpZXModm9pZCkKIAkJCQkgICB0cnVlKTsKIH0KIAor LyoKKyAqIFJlZ2lzdGVyIGFueSBpbnRlcm5hbCBtYW5hZ2Vycy4KKyAqLwordm9pZAorcmVn aXN0ZXJfYnVpbHRpbl9keW5hbWljX21hbmFnZXJzKHZvaWQpCit7CisJbWRzbWdyX3JlZ2lz dGVyKCk7Cit9CisKIC8qCiAgKiBwcm9jZXNzIGFueSBzaGFyZWQgbWVtb3J5IHJlcXVlc3Rz IGZyb20gcHJlbG9hZGVkIGxpYnJhcmllcwogICovCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVk ZS9taXNjYWRtaW4uaCBiL3NyYy9pbmNsdWRlL21pc2NhZG1pbi5oCmluZGV4IGEyYjYzNDk1 ZWVjLi5mZjRlZjU3OGExZiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvbWlzY2FkbWluLmgK KysrIGIvc3JjL2luY2x1ZGUvbWlzY2FkbWluLmgKQEAgLTUxMyw2ICs1MTMsNyBAQCBleHRl cm4gdm9pZCBUb3VjaFNvY2tldExvY2tGaWxlcyh2b2lkKTsKIGV4dGVybiB2b2lkIEFkZFRv RGF0YURpckxvY2tGaWxlKGludCB0YXJnZXRfbGluZSwgY29uc3QgY2hhciAqc3RyKTsKIGV4 dGVybiBib29sIFJlY2hlY2tEYXRhRGlyTG9ja0ZpbGUodm9pZCk7CiBleHRlcm4gdm9pZCBW YWxpZGF0ZVBnVmVyc2lvbihjb25zdCBjaGFyICpwYXRoKTsKK2V4dGVybiB2b2lkIHJlZ2lz dGVyX2J1aWx0aW5fZHluYW1pY19tYW5hZ2Vycyh2b2lkKTsKIGV4dGVybiB2b2lkIHByb2Nl c3Nfc2hhcmVkX3ByZWxvYWRfbGlicmFyaWVzKHZvaWQpOwogZXh0ZXJuIHZvaWQgcHJvY2Vz c19zZXNzaW9uX3ByZWxvYWRfbGlicmFyaWVzKHZvaWQpOwogZXh0ZXJuIHZvaWQgcHJvY2Vz c19zaG1lbV9yZXF1ZXN0cyh2b2lkKTsKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3N0b3Jh Z2UvbWQuaCBiL3NyYy9pbmNsdWRlL3N0b3JhZ2UvbWQuaAppbmRleCAwNWJmNTM3MDY2ZS4u ZGExZDFkMzM5YmUgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3N0b3JhZ2UvbWQuaAorKysg Yi9zcmMvaW5jbHVkZS9zdG9yYWdlL21kLmgKQEAgLTE5LDYgKzE5LDEwIEBACiAjaW5jbHVk ZSAic3RvcmFnZS9zbWdyLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9zeW5jLmgiCiAKKy8qIHJl Z2lzdHJhdGlvbiBmdW5jdGlvbiBmb3IgbWQgc3RvcmFnZSBtYW5hZ2VyICovCitleHRlcm4g dm9pZCBtZHNtZ3JfcmVnaXN0ZXIodm9pZCk7CitleHRlcm4gU01ncklkIE1kU01ncklkOwor CiAvKiBtZCBzdG9yYWdlIG1hbmFnZXIgZnVuY3Rpb25hbGl0eSAqLwogZXh0ZXJuIHZvaWQg bWRpbml0KHZvaWQpOwogZXh0ZXJuIHZvaWQgbWRvcGVuKFNNZ3JSZWxhdGlvbiByZWxuKTsK ZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3N0b3JhZ2Uvc21nci5oIGIvc3JjL2luY2x1ZGUv c3RvcmFnZS9zbWdyLmgKaW5kZXggNDAxNmIyMDZhZDYuLjUyZjc0ZjkxN2IyIDEwMDY0NAot LS0gYS9zcmMvaW5jbHVkZS9zdG9yYWdlL3NtZ3IuaAorKysgYi9zcmMvaW5jbHVkZS9zdG9y YWdlL3NtZ3IuaApAQCAtMTgsNiArMTgsOCBAQAogI2luY2x1ZGUgInN0b3JhZ2UvYmxvY2su aCIKICNpbmNsdWRlICJzdG9yYWdlL3JlbGZpbGVsb2NhdG9yLmgiCiAKK3R5cGVkZWYgdWlu dDggU01ncklkOworCiAvKgogICogc21nci5jIG1haW50YWlucyBhIHRhYmxlIG9mIFNNZ3JS ZWxhdGlvbiBvYmplY3RzLCB3aGljaCBhcmUgZXNzZW50aWFsbHkKICAqIGNhY2hlZCBmaWxl IGhhbmRsZXMuICBBbiBTTWdyUmVsYXRpb24gaXMgY3JlYXRlZCAoaWYgbm90IGFscmVhZHkg cHJlc2VudCkKQEAgLTUxLDE0ICs1Myw3IEBAIHR5cGVkZWYgc3RydWN0IFNNZ3JSZWxhdGlv bkRhdGEKIAkgKiBGaWVsZHMgYmVsb3cgaGVyZSBhcmUgaW50ZW5kZWQgdG8gYmUgcHJpdmF0 ZSB0byBzbWdyLmMgYW5kIGl0cwogCSAqIHN1Ym1vZHVsZXMuICBEbyBub3QgdG91Y2ggdGhl bSBmcm9tIGVsc2V3aGVyZS4KIAkgKi8KLQlpbnQJCQlzbWdyX3doaWNoOwkJLyogc3RvcmFn ZSBtYW5hZ2VyIHNlbGVjdG9yICovCi0KLQkvKgotCSAqIGZvciBtZC5jOyBwZXItZm9yayBh cnJheXMgb2YgdGhlIG51bWJlciBvZiBvcGVuIHNlZ21lbnRzCi0JICogKG1kX251bV9vcGVu X3NlZ3MpIGFuZCB0aGUgc2VnbWVudHMgdGhlbXNlbHZlcyAobWRfc2VnX2ZkcykuCi0JICov Ci0JaW50CQkJbWRfbnVtX29wZW5fc2Vnc1tNQVhfRk9SS05VTSArIDFdOwotCXN0cnVjdCBf TWRmZFZlYyAqbWRfc2VnX2Zkc1tNQVhfRk9SS05VTSArIDFdOworCVNNZ3JJZAkJc21ncl93 aGljaDsJCS8qIHN0b3JhZ2UgbWFuYWdlciBzZWxlY3RvciAqLwogCiAJLyoKIAkgKiBQaW5u aW5nIHN1cHBvcnQuICBJZiB1bnBpbm5lZCAoaWUuIHBpbmNvdW50ID09IDApLCAnbm9kZScg aXMgYSBsaXN0CkBAIC03Myw2ICs2OCw1NCBAQCB0eXBlZGVmIFNNZ3JSZWxhdGlvbkRhdGEg KlNNZ3JSZWxhdGlvbjsKICNkZWZpbmUgU21ncklzVGVtcChzbWdyKSBcCiAJUmVsRmlsZUxv Y2F0b3JCYWNrZW5kSXNUZW1wKChzbWdyKS0+c21ncl9ybG9jYXRvcikKIAorLyoKKyAqIFRo aXMgc3RydWN0IG9mIGZ1bmN0aW9uIHBvaW50ZXJzIGRlZmluZXMgdGhlIEFQSSBiZXR3ZWVu IHNtZ3IuYyBhbmQKKyAqIGFueSBpbmRpdmlkdWFsIHN0b3JhZ2UgbWFuYWdlciBtb2R1bGUu ICBOb3RlIHRoYXQgc21nciBzdWJmdW5jdGlvbnMgYXJlCisgKiBnZW5lcmFsbHkgZXhwZWN0 ZWQgdG8gcmVwb3J0IHByb2JsZW1zIHZpYSBlbG9nKEVSUk9SKS4gIEFuIGV4Y2VwdGlvbiBp cworICogdGhhdCBzbWdyX3VubGluayBzaG91bGQgdXNlIGVsb2coV0FSTklORyksIHJhdGhl ciB0aGFuIGVycm9yaW5nIG91dCwKKyAqIGJlY2F1c2Ugd2Ugbm9ybWFsbHkgdW5saW5rIHJl bGF0aW9ucyBkdXJpbmcgcG9zdC1jb21taXQvYWJvcnQgY2xlYW51cCwKKyAqIGFuZCBzbyBp dCdzIHRvbyBsYXRlIHRvIHJhaXNlIGFuIGVycm9yLiAgQWxzbywgdmFyaW91cyBjb25kaXRp b25zIHRoYXQKKyAqIHdvdWxkIG5vcm1hbGx5IGJlIGVycm9ycyBzaG91bGQgYmUgYWxsb3dl ZCBkdXJpbmcgYm9vdHN0cmFwIGFuZC9vciBXQUwKKyAqIHJlY292ZXJ5IC0tLSBzZWUgY29t bWVudHMgaW4gbWQuYyBmb3IgZGV0YWlscy4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgZl9zbWdy Cit7CisJY29uc3QgY2hhciAqbmFtZTsKKwl2b2lkCQkoKnNtZ3JfaW5pdCkgKHZvaWQpOwkv KiBtYXkgYmUgTlVMTCAqLworCXZvaWQJCSgqc21ncl9zaHV0ZG93bikgKHZvaWQpOwkvKiBt YXkgYmUgTlVMTCAqLworCXZvaWQJCSgqc21ncl9vcGVuKSAoU01nclJlbGF0aW9uIHJlbG4p OworCXZvaWQJCSgqc21ncl9jbG9zZSkgKFNNZ3JSZWxhdGlvbiByZWxuLCBGb3JrTnVtYmVy IGZvcmtudW0pOworCXZvaWQJCSgqc21ncl9jcmVhdGUpIChTTWdyUmVsYXRpb24gcmVsbiwg Rm9ya051bWJlciBmb3JrbnVtLAorCQkJCQkJCQlib29sIGlzUmVkbyk7CisJYm9vbAkJKCpz bWdyX2V4aXN0cykgKFNNZ3JSZWxhdGlvbiByZWxuLCBGb3JrTnVtYmVyIGZvcmtudW0pOwor CXZvaWQJCSgqc21ncl91bmxpbmspIChSZWxGaWxlTG9jYXRvckJhY2tlbmQgcmxvY2F0b3Is IEZvcmtOdW1iZXIgZm9ya251bSwKKwkJCQkJCQkJYm9vbCBpc1JlZG8pOworCXZvaWQJCSgq c21ncl9leHRlbmQpIChTTWdyUmVsYXRpb24gcmVsbiwgRm9ya051bWJlciBmb3JrbnVtLAor CQkJCQkJCQlCbG9ja051bWJlciBibG9ja251bSwgY29uc3Qgdm9pZCAqYnVmZmVyLCBib29s IHNraXBGc3luYyk7CisJdm9pZAkJKCpzbWdyX3plcm9leHRlbmQpIChTTWdyUmVsYXRpb24g cmVsbiwgRm9ya051bWJlciBmb3JrbnVtLAorCQkJCQkJCQkJQmxvY2tOdW1iZXIgYmxvY2tu dW0sIGludCBuYmxvY2tzLCBib29sIHNraXBGc3luYyk7CisJYm9vbAkJKCpzbWdyX3ByZWZl dGNoKSAoU01nclJlbGF0aW9uIHJlbG4sIEZvcmtOdW1iZXIgZm9ya251bSwKKwkJCQkJCQkJ ICBCbG9ja051bWJlciBibG9ja251bSwgaW50IG5ibG9ja3MpOworCXVpbnQzMgkJKCpzbWdy X21heGNvbWJpbmUpIChTTWdyUmVsYXRpb24gcmVsbiwgRm9ya051bWJlciBmb3JrbnVtLAor CQkJCQkJCQkJQmxvY2tOdW1iZXIgYmxvY2tudW0pOworCXZvaWQJCSgqc21ncl9yZWFkdikg KFNNZ3JSZWxhdGlvbiByZWxuLCBGb3JrTnVtYmVyIGZvcmtudW0sCisJCQkJCQkJICAgQmxv Y2tOdW1iZXIgYmxvY2tudW0sCisJCQkJCQkJICAgdm9pZCAqKmJ1ZmZlcnMsIEJsb2NrTnVt YmVyIG5ibG9ja3MpOworCXZvaWQJCSgqc21ncl93cml0ZXYpIChTTWdyUmVsYXRpb24gcmVs biwgRm9ya051bWJlciBmb3JrbnVtLAorCQkJCQkJCQlCbG9ja051bWJlciBibG9ja251bSwK KwkJCQkJCQkJY29uc3Qgdm9pZCAqKmJ1ZmZlcnMsIEJsb2NrTnVtYmVyIG5ibG9ja3MsCisJ CQkJCQkJCWJvb2wgc2tpcEZzeW5jKTsKKwl2b2lkCQkoKnNtZ3Jfd3JpdGViYWNrKSAoU01n clJlbGF0aW9uIHJlbG4sIEZvcmtOdW1iZXIgZm9ya251bSwKKwkJCQkJCQkJICAgQmxvY2tO dW1iZXIgYmxvY2tudW0sIEJsb2NrTnVtYmVyIG5ibG9ja3MpOworCUJsb2NrTnVtYmVyICgq c21ncl9uYmxvY2tzKSAoU01nclJlbGF0aW9uIHJlbG4sIEZvcmtOdW1iZXIgZm9ya251bSk7 CisJdm9pZAkJKCpzbWdyX3RydW5jYXRlKSAoU01nclJlbGF0aW9uIHJlbG4sIEZvcmtOdW1i ZXIgZm9ya251bSwKKwkJCQkJCQkJICBCbG9ja051bWJlciBvbGRfYmxvY2tzLCBCbG9ja051 bWJlciBuYmxvY2tzKTsKKwl2b2lkCQkoKnNtZ3JfaW1tZWRzeW5jKSAoU01nclJlbGF0aW9u IHJlbG4sIEZvcmtOdW1iZXIgZm9ya251bSk7CisJdm9pZAkJKCpzbWdyX3JlZ2lzdGVyc3lu YykgKFNNZ3JSZWxhdGlvbiByZWxuLCBGb3JrTnVtYmVyIGZvcmtudW0pOworfSBmX3NtZ3I7 CisKK2V4dGVybiBTTWdySWQgc21ncl9yZWdpc3Rlcihjb25zdCBmX3NtZ3IgKnNtZ3IsIFNp emUgc21ncnJlbGF0aW9uX3NpemUpOworCiBleHRlcm4gdm9pZCBzbWdyaW5pdCh2b2lkKTsK IGV4dGVybiBTTWdyUmVsYXRpb24gc21ncm9wZW4oUmVsRmlsZUxvY2F0b3IgcmxvY2F0b3Is IFByb2NOdW1iZXIgYmFja2VuZCk7CiBleHRlcm4gYm9vbCBzbWdyZXhpc3RzKFNNZ3JSZWxh dGlvbiByZWxuLCBGb3JrTnVtYmVyIGZvcmtudW0pOwpkaWZmIC0tZ2l0IGEvc3JjL3Rvb2xz L3BnaW5kZW50L3R5cGVkZWZzLmxpc3QgYi9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMu bGlzdAppbmRleCA5ODQwMDYwOTk3Zi4uNGI5NzFiODFhZTUgMTAwNjQ0Ci0tLSBhL3NyYy90 b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0CisrKyBiL3NyYy90b29scy9wZ2luZGVudC90 eXBlZGVmcy5saXN0CkBAIC0xNjI5LDYgKzE2MjksNyBAQCBNYW55VGVzdFJlc291cmNlS2lu ZAogTWF0ZXJpYWwKIE1hdGVyaWFsUGF0aAogTWF0ZXJpYWxTdGF0ZQorTWRTTWdyUmVsYXRp b25EYXRhCiBNZGZkVmVjCiBNZFBhdGhTdHIKIE1lbW9pemUKLS0gCjIuNDcuMgoK --------------pzqHmNAXsEg2Eg5hZQblrRMV--