Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1pAW9a-00060A-Cu for pgsql-hackers@arkaria.postgresql.org; Wed, 28 Dec 2022 13:07:31 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1pAW9X-0006NZ-GK for pgsql-hackers@arkaria.postgresql.org; Wed, 28 Dec 2022 13:07:27 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1pAW9W-0006NP-2D for pgsql-hackers@lists.postgresql.org; Wed, 28 Dec 2022 13:07:27 +0000 Received: from wnew1-smtp.messagingengine.com ([64.147.123.26]) by makus.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1pAW9Q-0001Lh-Le for pgsql-hackers@postgresql.org; Wed, 28 Dec 2022 13:07:24 +0000 Received: from compute6.internal (compute6.nyi.internal [10.202.2.47]) by mailnew.west.internal (Postfix) with ESMTP id DA2002B0674B for ; Wed, 28 Dec 2022 08:07:17 -0500 (EST) Received: from mailfrontend1 ([10.202.2.162]) by compute6.internal (MEProxy); Wed, 28 Dec 2022 08:07:17 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:content-type:date:date:feedback-id :feedback-id:from:from:in-reply-to:message-id:mime-version :reply-to:sender:subject:subject:to:to:x-me-proxy:x-me-proxy :x-me-sender:x-me-sender:x-sasl-enc; s=fm2; t=1672232837; x= 1672240037; bh=+MWlx3a9GHyeJQAzMAsyQCd1SaJ753b8QHMIw19zMH8=; b=e nmSlescmfuNzQHzRpY9kHjxcA31D1cnap5L5s8inCNhYYxHzQu2LU44IehXLYW5W KEnHPs17+PBRZdjXsjaMOh0ERBJhJMmm85NpqHzKkhGeswQ3ufqMsLVwcFmLXZK9 ZlwXiHW/1zQ62gbc+cYXYkI3w3GTX2haBeYoddfEyQPr9buFhSuBpm+FFieS8chp lbBUTduYwJnQwfvf89hjhU+o35nikH7jUrDcEfRhKmEwgEtBNIS1M+PyLykeeqtj SGUYxoi+N/iE+tiqubUydgIAqvdP9AQpt2t6Lqvt+9qjNcz7awJhrltDl76YqZ6P HKzBYGNZ479x864AxXD/A== X-ME-Sender: X-ME-Received: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgedvhedriedvgdeglecutefuodetggdotefrodftvf curfhrohhfihhlvgemucfhrghsthforghilhdpqfgfvfdpuffrtefokffrpgfnqfghnecu uegrihhlohhuthemuceftddtnecunecujfgurheptgfkffggfgfhuffvsehmtderredtfe ejnecuhfhrohhmpefrvghtvghrucfgihhsvghnthhrrghuthcuoehpvghtvghrrdgvihhs vghnthhrrghuthesvghnthgvrhhprhhishgvuggsrdgtohhmqeenucggtffrrghtthgvrh hnpeetveeuvdeikeeigefhveffhffhvdejveelleefieekieekvdffgeetkedutdefleen ucevlhhushhtvghrufhiiigvpedtnecurfgrrhgrmhepmhgrihhlfhhrohhmpehpvghtvg hrrdgvihhsvghnthhrrghuthesvghnthgvrhhprhhishgvuggsrdgtohhm X-ME-Proxy: Feedback-ID: i131946ab:Fastmail Received: by mail.messagingengine.com (Postfix) with ESMTPA for ; Wed, 28 Dec 2022 08:07:16 -0500 (EST) Content-Type: multipart/mixed; boundary="------------IVwCamKn0Q7X4nUI36aiGazr" Message-ID: Date: Wed, 28 Dec 2022 14:07:14 +0100 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:102.0) Gecko/20100101 Thunderbird/102.6.0 Content-Language: en-US From: Peter Eisentraut Subject: split TOAST support out of postgres.h To: pgsql-hackers 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. --------------IVwCamKn0Q7X4nUI36aiGazr Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit Most backend code doesn't actually need the variable-length data types support (TOAST support) in postgres.h. So I figured we could try to put it into a separate header file. That makes postgres.h more manageable, and it avoids including a bunch of complicated unused stuff everywhere. I picked "varatt.h" as the name. Then we could either 1) Include varatt.h in postgres.h, similar to elog.h and palloc.h. That way we clean up the files a bit but don't change any external interfaces. 2) Just let everyone who needs it include the new file. 3) Compromise: You can avoid most "damage" by having fmgr.h include varatt.h. That satisfies most data types and extension code. That way, there are only a few places that need an explicit include of varatt.h. I went with the last option in my patch. Thoughts? --------------IVwCamKn0Q7X4nUI36aiGazr Content-Type: text/plain; charset=UTF-8; name="0001-New-header-varatt.h-split-off-from-postgres.h.patch" Content-Disposition: attachment; filename="0001-New-header-varatt.h-split-off-from-postgres.h.patch" Content-Transfer-Encoding: base64 RnJvbSBmYmE4M2U0NjhhOGVhODgxZjBiZGQ2Y2Y0OWFlZjEzYjcxZjY3MjczIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBQZXRlciBFaXNlbnRyYXV0IDxwZXRlckBlaXNlbnRy YXV0Lm9yZz4KRGF0ZTogV2VkLCAyOCBEZWMgMjAyMiAxMzozMDowNSArMDEwMApTdWJqZWN0 OiBbUEFUQ0hdIE5ldyBoZWFkZXIgdmFyYXR0Lmggc3BsaXQgb2ZmIGZyb20gcG9zdGdyZXMu aAoKVGhpcyBuZXcgaGVhZGVyIGNvbnRhaW5zIGFsbCB0aGUgdmFyaWFibGUtbGVuZ3RoIGRh dGEgdHlwZXMgc3VwcG9ydAooVE9BU1Qgc3VwcG9ydCkgZnJvbSBwb3N0Z3Jlcy5oLCB3aGlj aCBpc24ndCBuZWVkZWQgYnkgbGFyZ2UgcGFydHMgb2YKdGhlIGJhY2tlbmQgY29kZS4KClRo aXMgbmV3IGhlYWRlciBmaWxlIGlzIGluY2x1ZGVkIGJ5IGZtZ3IuaCwgc28gbW9zdCBkYXRh IHR5cGUgYW5kCmV4dGVuc2lvbiBjb2RlIHdvbid0IG5lZWQgYW55IGNoYW5nZXMuCi0tLQog Y29udHJpYi9jdWJlL2N1YmVkYXRhLmggICAgICAgICAgICAgICAgIHwgICAyICsKIGNvbnRy aWIvcGdfdHJnbS90cmdtX3JlZ2V4cC5jICAgICAgICAgICB8ICAgMSArCiBzcmMvYmFja2Vu ZC9hY2Nlc3MvdGFibGUvdG9hc3RfaGVscGVyLmMgfCAgIDEgKwogc3JjL2JhY2tlbmQvbGli cHEvcHFmb3JtYXQuYyAgICAgICAgICAgIHwgICAxICsKIHNyYy9pbmNsdWRlL2FjY2Vzcy9o dHVwX2RldGFpbHMuaCAgICAgICB8ICAgMSArCiBzcmMvaW5jbHVkZS9mbWdyLmggICAgICAg ICAgICAgICAgICAgICAgfCAgIDIgKwogc3JjL2luY2x1ZGUvbWVzb24uYnVpbGQgICAgICAg ICAgICAgICAgIHwgICAxICsKIHNyYy9pbmNsdWRlL3Bvc3RncmVzLmggICAgICAgICAgICAg ICAgICB8IDM1OCArLS0tLS0tLS0tLS0tLS0KIHNyYy9pbmNsdWRlL3V0aWxzL2V4cGFuZGVk ZGF0dW0uaCAgICAgICB8ICAgMiArCiBzcmMvaW5jbHVkZS97cG9zdGdyZXMuaCA9PiB2YXJh dHQuaH0gICAgfCA1NzkgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAxMCBmaWxlcyBjaGFu Z2VkLCAyMSBpbnNlcnRpb25zKCspLCA5MjcgZGVsZXRpb25zKC0pCiBjb3B5IHNyYy9pbmNs dWRlL3twb3N0Z3Jlcy5oID0+IHZhcmF0dC5ofSAoNTMlKQoKZGlmZiAtLWdpdCBhL2NvbnRy aWIvY3ViZS9jdWJlZGF0YS5oIGIvY29udHJpYi9jdWJlL2N1YmVkYXRhLmgKaW5kZXggOTZm YTQxYTA0ZS4uZDhkZjQ3ODA1OSAxMDA2NDQKLS0tIGEvY29udHJpYi9jdWJlL2N1YmVkYXRh LmgKKysrIGIvY29udHJpYi9jdWJlL2N1YmVkYXRhLmgKQEAgLTEsNSArMSw3IEBACiAvKiBj b250cmliL2N1YmUvY3ViZWRhdGEuaCAqLwogCisjaW5jbHVkZSAiZm1nci5oIgorCiAvKgog ICogVGhpcyBsaW1pdCBpcyBwcmV0dHkgYXJiaXRyYXJ5LCBidXQgZG9uJ3QgbWFrZSBpdCBz byBsYXJnZSB0aGF0IHlvdQogICogcmlzayBvdmVyZmxvdyBpbiBzaXppbmcgY2FsY3VsYXRp b25zLgpkaWZmIC0tZ2l0IGEvY29udHJpYi9wZ190cmdtL3RyZ21fcmVnZXhwLmMgYi9jb250 cmliL3BnX3RyZ20vdHJnbV9yZWdleHAuYwppbmRleCA1OGQzMmJhOTQ2Li4wOGVlY2QyNjli IDEwMDY0NAotLS0gYS9jb250cmliL3BnX3RyZ20vdHJnbV9yZWdleHAuYworKysgYi9jb250 cmliL3BnX3RyZ20vdHJnbV9yZWdleHAuYwpAQCAtMTk2LDYgKzE5Niw3IEBACiAjaW5jbHVk ZSAidHNlYXJjaC90c19sb2NhbGUuaCIKICNpbmNsdWRlICJ1dGlscy9oc2VhcmNoLmgiCiAj aW5jbHVkZSAidXRpbHMvbWVtdXRpbHMuaCIKKyNpbmNsdWRlICJ2YXJhdHQuaCIKIAogLyoK ICAqIFVuY29tbWVudCAob3IgdXNlIC1EVFJHTV9SRUdFWFBfREVCVUcpIHRvIHByaW50IGRl YnVnIGluZm8sCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvdGFibGUvdG9hc3Rf aGVscGVyLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvdGFibGUvdG9hc3RfaGVscGVyLmMKaW5k ZXggNzRiYTIxODlmMC4uYTQ4ODlkNzY0MiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNj ZXNzL3RhYmxlL3RvYXN0X2hlbHBlci5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy90YWJs ZS90b2FzdF9oZWxwZXIuYwpAQCAtMTksNiArMTksNyBAQAogI2luY2x1ZGUgImFjY2Vzcy90 b2FzdF9oZWxwZXIuaCIKICNpbmNsdWRlICJhY2Nlc3MvdG9hc3RfaW50ZXJuYWxzLmgiCiAj aW5jbHVkZSAiY2F0YWxvZy9wZ190eXBlX2QuaCIKKyNpbmNsdWRlICJ2YXJhdHQuaCIKIAog CiAvKgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvbGlicHEvcHFmb3JtYXQuYyBiL3NyYy9i YWNrZW5kL2xpYnBxL3BxZm9ybWF0LmMKaW5kZXggOWMyNGRmMzM2MC4uNjVhOTEzZTg5MyAx MDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvbGlicHEvcHFmb3JtYXQuYworKysgYi9zcmMvYmFj a2VuZC9saWJwcS9wcWZvcm1hdC5jCkBAIC03Nyw2ICs3Nyw3IEBACiAjaW5jbHVkZSAibGli cHEvcHFmb3JtYXQuaCIKICNpbmNsdWRlICJtYi9wZ193Y2hhci5oIgogI2luY2x1ZGUgInBv cnQvcGdfYnN3YXAuaCIKKyNpbmNsdWRlICJ2YXJhdHQuaCIKIAogCiAvKiAtLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvYWNjZXNz L2h0dXBfZGV0YWlscy5oIGIvc3JjL2luY2x1ZGUvYWNjZXNzL2h0dXBfZGV0YWlscy5oCmlu ZGV4IGMxYWY4MTRlOGQuLmM3YjUwNWUzM2YgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2Fj Y2Vzcy9odHVwX2RldGFpbHMuaAorKysgYi9zcmMvaW5jbHVkZS9hY2Nlc3MvaHR1cF9kZXRh aWxzLmgKQEAgLTE5LDYgKzE5LDcgQEAKICNpbmNsdWRlICJhY2Nlc3MvdHVwZGVzYy5oIgog I2luY2x1ZGUgImFjY2Vzcy90dXBtYWNzLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9idWZwYWdl LmgiCisjaW5jbHVkZSAidmFyYXR0LmgiCiAKIC8qCiAgKiBNYXhUdXBsZUF0dHJpYnV0ZU51 bWJlciBsaW1pdHMgdGhlIG51bWJlciBvZiAodXNlcikgY29sdW1ucyBpbiBhIHR1cGxlLgpk aWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvZm1nci5oIGIvc3JjL2luY2x1ZGUvZm1nci5oCmlu ZGV4IDk3MmFmZTNhZmYuLjBjZTAwOTAzNjAgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2Zt Z3IuaAorKysgYi9zcmMvaW5jbHVkZS9mbWdyLmgKQEAgLTE4LDYgKzE4LDggQEAKICNpZm5k ZWYgRk1HUl9ICiAjZGVmaW5lIEZNR1JfSAogCisjaW5jbHVkZSAidmFyYXR0LmgiCisKIC8q IFdlIGRvbid0IHdhbnQgdG8gaW5jbHVkZSBwcmltbm9kZXMuaCBoZXJlLCBzbyBtYWtlIHNv bWUgc3R1YiByZWZlcmVuY2VzICovCiB0eXBlZGVmIHN0cnVjdCBOb2RlICpmbU5vZGVQdHI7 CiB0eXBlZGVmIHN0cnVjdCBBZ2dyZWYgKmZtQWdncmVmUHRyOwpkaWZmIC0tZ2l0IGEvc3Jj L2luY2x1ZGUvbWVzb24uYnVpbGQgYi9zcmMvaW5jbHVkZS9tZXNvbi5idWlsZAppbmRleCBi NDgyMDA0OWM4Li42M2I0NDRiYzk5IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9tZXNvbi5i dWlsZAorKysgYi9zcmMvaW5jbHVkZS9tZXNvbi5idWlsZApAQCAtMTEzLDYgKzExMyw3IEBA IGluc3RhbGxfaGVhZGVycygKICAgJ3Bvc3RncmVzLmgnLAogICAncG9zdGdyZXNfZXh0Lmgn LAogICAncG9zdGdyZXNfZmUuaCcsCisgICd2YXJhdHQuaCcsCiAgICd3aW5kb3dhcGkuaCcs CiAgIHBnX2NvbmZpZ19leHQsCiAgIHBnX2NvbmZpZ19vcywKZGlmZiAtLWdpdCBhL3NyYy9p bmNsdWRlL3Bvc3RncmVzLmggYi9zcmMvaW5jbHVkZS9wb3N0Z3Jlcy5oCmluZGV4IDU0NzMw ZGZiMzguLmE5MTVmMmI5N2YgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3Bvc3RncmVzLmgK KysrIGIvc3JjL2luY2x1ZGUvcG9zdGdyZXMuaApAQCAtMjMsOSArMjMsOCBAQAogICoKICAq CSAgc2VjdGlvbglkZXNjcmlwdGlvbgogICoJICAtLS0tLS0tCS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICoJCTEpCQl2YXJpYWJsZS1sZW5n dGggZGF0YXR5cGVzIChUT0FTVCBzdXBwb3J0KQotICoJCTIpCQlEYXR1bSB0eXBlICsgc3Vw cG9ydCBmdW5jdGlvbnMKLSAqCQkzKQkJbWlzY2VsbGFuZW91cworICoJCTEpCQlEYXR1bSB0 eXBlICsgc3VwcG9ydCBmdW5jdGlvbnMKKyAqCQkyKQkJbWlzY2VsbGFuZW91cwogICoKICAq CSBOT1RFUwogICoKQEAgLTM2LDggKzM1LDcgQEAKICAqCXBvc3RncmVzX2ZlLmguICBXZSBk byB0aGF0IHNpbmNlIHRob3NlIHR5cGUgZGVmaW5pdGlvbnMgYXJlIG5lZWRlZCBieQogICoJ ZnJvbnRlbmQgbW9kdWxlcyB0aGF0IHdhbnQgdG8gZGVhbCB3aXRoIGJpbmFyeSBkYXRhIHRy YW5zbWlzc2lvbiB0byBvcgogICoJZnJvbSB0aGUgYmFja2VuZC4gIFR5cGUgZGVmaW5pdGlv bnMgaW4gdGhpcyBmaWxlIHNob3VsZCBiZSBmb3IKLSAqCXJlcHJlc2VudGF0aW9ucyB0aGF0 IG5ldmVyIGVzY2FwZSB0aGUgYmFja2VuZCwgc3VjaCBhcyBEYXR1bSBvcgotICoJVE9BU1Rl ZCB2YXJsZW5hIG9iamVjdHMuCisgKglyZXByZXNlbnRhdGlvbnMgdGhhdCBuZXZlciBlc2Nh cGUgdGhlIGJhY2tlbmQsIHN1Y2ggYXMgRGF0dW0uCiAgKgogICotLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKi8K QEAgLTQ5LDM1MyArNDcsNyBAQAogI2luY2x1ZGUgInV0aWxzL3BhbGxvYy5oIgogCiAvKiAt LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tCi0gKgkJCQlTZWN0aW9uIDE6CXZhcmlhYmxlLWxlbmd0aCBkYXRhdHlwZXMg KFRPQVNUIHN1cHBvcnQpCi0gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKi8KLQotLyoKLSAqIHN0cnVjdCB2 YXJhdHRfZXh0ZXJuYWwgaXMgYSB0cmFkaXRpb25hbCAiVE9BU1QgcG9pbnRlciIsIHRoYXQg aXMsIHRoZQotICogaW5mb3JtYXRpb24gbmVlZGVkIHRvIGZldGNoIGEgRGF0dW0gc3RvcmVk IG91dC1vZi1saW5lIGluIGEgVE9BU1QgdGFibGUuCi0gKiBUaGUgZGF0YSBpcyBjb21wcmVz c2VkIGlmIGFuZCBvbmx5IGlmIHRoZSBleHRlcm5hbCBzaXplIHN0b3JlZCBpbgotICogdmFf ZXh0aW5mbyBpcyBsZXNzIHRoYW4gdmFfcmF3c2l6ZSAtIFZBUkhEUlNaLgotICoKLSAqIFRo aXMgc3RydWN0IG11c3Qgbm90IGNvbnRhaW4gYW55IHBhZGRpbmcsIGJlY2F1c2Ugd2Ugc29t ZXRpbWVzIGNvbXBhcmUKLSAqIHRoZXNlIHBvaW50ZXJzIHVzaW5nIG1lbWNtcC4KLSAqCi0g KiBOb3RlIHRoYXQgdGhpcyBpbmZvcm1hdGlvbiBpcyBzdG9yZWQgdW5hbGlnbmVkIHdpdGhp biBhY3R1YWwgdHVwbGVzLCBzbwotICogeW91IG5lZWQgdG8gbWVtY3B5IGZyb20gdGhlIHR1 cGxlIGludG8gYSBsb2NhbCBzdHJ1Y3QgdmFyaWFibGUgYmVmb3JlCi0gKiB5b3UgY2FuIGxv b2sgYXQgdGhlc2UgZmllbGRzISAgKFRoZSByZWFzb24gd2UgdXNlIG1lbWNtcCBpcyB0byBh dm9pZAotICogaGF2aW5nIHRvIGRvIHRoYXQganVzdCB0byBkZXRlY3QgZXF1YWxpdHkgb2Yg dHdvIFRPQVNUIHBvaW50ZXJzLi4uKQotICovCi10eXBlZGVmIHN0cnVjdCB2YXJhdHRfZXh0 ZXJuYWwKLXsKLQlpbnQzMgkJdmFfcmF3c2l6ZTsJCS8qIE9yaWdpbmFsIGRhdGEgc2l6ZSAo aW5jbHVkZXMgaGVhZGVyKSAqLwotCXVpbnQzMgkJdmFfZXh0aW5mbzsJCS8qIEV4dGVybmFs IHNhdmVkIHNpemUgKHdpdGhvdXQgaGVhZGVyKSBhbmQKLQkJCQkJCQkJICogY29tcHJlc3Np b24gbWV0aG9kICovCi0JT2lkCQkJdmFfdmFsdWVpZDsJCS8qIFVuaXF1ZSBJRCBvZiB2YWx1 ZSB3aXRoaW4gVE9BU1QgdGFibGUgKi8KLQlPaWQJCQl2YV90b2FzdHJlbGlkOwkvKiBSZWxJ RCBvZiBUT0FTVCB0YWJsZSBjb250YWluaW5nIGl0ICovCi19CQkJdmFyYXR0X2V4dGVybmFs OwotCi0vKgotICogVGhlc2UgbWFjcm9zIGRlZmluZSB0aGUgInNhdmVkIHNpemUiIHBvcnRp b24gb2YgdmFfZXh0aW5mby4gIEl0cyByZW1haW5pbmcKLSAqIHR3byBoaWdoLW9yZGVyIGJp dHMgaWRlbnRpZnkgdGhlIGNvbXByZXNzaW9uIG1ldGhvZC4KLSAqLwotI2RlZmluZSBWQVJM RU5BX0VYVFNJWkVfQklUUwkzMAotI2RlZmluZSBWQVJMRU5BX0VYVFNJWkVfTUFTSwkoKDFV IDw8IFZBUkxFTkFfRVhUU0laRV9CSVRTKSAtIDEpCi0KLS8qCi0gKiBzdHJ1Y3QgdmFyYXR0 X2luZGlyZWN0IGlzIGEgIlRPQVNUIHBvaW50ZXIiIHJlcHJlc2VudGluZyBhbiBvdXQtb2Yt bGluZQotICogRGF0dW0gdGhhdCdzIHN0b3JlZCBpbiBtZW1vcnksIG5vdCBpbiBhbiBleHRl cm5hbCB0b2FzdCByZWxhdGlvbi4KLSAqIFRoZSBjcmVhdG9yIG9mIHN1Y2ggYSBEYXR1bSBp cyBlbnRpcmVseSByZXNwb25zaWJsZSB0aGF0IHRoZSByZWZlcmVuY2VkCi0gKiBzdG9yYWdl IHN1cnZpdmVzIGZvciBhcyBsb25nIGFzIHJlZmVyZW5jaW5nIHBvaW50ZXIgRGF0dW1zIGNh biBleGlzdC4KLSAqCi0gKiBOb3RlIHRoYXQganVzdCBhcyBmb3Igc3RydWN0IHZhcmF0dF9l eHRlcm5hbCwgdGhpcyBzdHJ1Y3QgaXMgc3RvcmVkCi0gKiB1bmFsaWduZWQgd2l0aGluIGFu eSBjb250YWluaW5nIHR1cGxlLgotICovCi10eXBlZGVmIHN0cnVjdCB2YXJhdHRfaW5kaXJl Y3QKLXsKLQlzdHJ1Y3QgdmFybGVuYSAqcG9pbnRlcjsJLyogUG9pbnRlciB0byBpbi1tZW1v cnkgdmFybGVuYSAqLwotfQkJCXZhcmF0dF9pbmRpcmVjdDsKLQotLyoKLSAqIHN0cnVjdCB2 YXJhdHRfZXhwYW5kZWQgaXMgYSAiVE9BU1QgcG9pbnRlciIgcmVwcmVzZW50aW5nIGFuIG91 dC1vZi1saW5lCi0gKiBEYXR1bSB0aGF0IGlzIHN0b3JlZCBpbiBtZW1vcnksIGluIHNvbWUg dHlwZS1zcGVjaWZpYywgbm90IG5lY2Vzc2FyaWx5Ci0gKiBwaHlzaWNhbGx5IGNvbnRpZ3Vv dXMgZm9ybWF0IHRoYXQgaXMgY29udmVuaWVudCBmb3IgY29tcHV0YXRpb24gbm90Ci0gKiBz dG9yYWdlLiAgQVBJcyBmb3IgdGhpcywgaW4gcGFydGljdWxhciB0aGUgZGVmaW5pdGlvbiBv ZiBzdHJ1Y3QKLSAqIEV4cGFuZGVkT2JqZWN0SGVhZGVyLCBhcmUgaW4gc3JjL2luY2x1ZGUv dXRpbHMvZXhwYW5kZWRkYXR1bS5oLgotICoKLSAqIE5vdGUgdGhhdCBqdXN0IGFzIGZvciBz dHJ1Y3QgdmFyYXR0X2V4dGVybmFsLCB0aGlzIHN0cnVjdCBpcyBzdG9yZWQKLSAqIHVuYWxp Z25lZCB3aXRoaW4gYW55IGNvbnRhaW5pbmcgdHVwbGUuCi0gKi8KLXR5cGVkZWYgc3RydWN0 IEV4cGFuZGVkT2JqZWN0SGVhZGVyIEV4cGFuZGVkT2JqZWN0SGVhZGVyOwotCi10eXBlZGVm IHN0cnVjdCB2YXJhdHRfZXhwYW5kZWQKLXsKLQlFeHBhbmRlZE9iamVjdEhlYWRlciAqZW9o cHRyOwotfSB2YXJhdHRfZXhwYW5kZWQ7Ci0KLS8qCi0gKiBUeXBlIHRhZyBmb3IgdGhlIHZh cmlvdXMgc29ydHMgb2YgIlRPQVNUIHBvaW50ZXIiIGRhdHVtcy4gIFRoZSBwZWN1bGlhcgot ICogdmFsdWUgZm9yIFZBUlRBR19PTkRJU0sgY29tZXMgZnJvbSBhIHJlcXVpcmVtZW50IGZv ciBvbi1kaXNrIGNvbXBhdGliaWxpdHkKLSAqIHdpdGggYSBwcmV2aW91cyBub3Rpb24gdGhh dCB0aGUgdGFnIGZpZWxkIHdhcyB0aGUgcG9pbnRlciBkYXR1bSdzIGxlbmd0aC4KLSAqLwot dHlwZWRlZiBlbnVtIHZhcnRhZ19leHRlcm5hbAotewotCVZBUlRBR19JTkRJUkVDVCA9IDEs Ci0JVkFSVEFHX0VYUEFOREVEX1JPID0gMiwKLQlWQVJUQUdfRVhQQU5ERURfUlcgPSAzLAot CVZBUlRBR19PTkRJU0sgPSAxOAotfSB2YXJ0YWdfZXh0ZXJuYWw7Ci0KLS8qIHRoaXMgdGVz dCByZWxpZXMgb24gdGhlIHNwZWNpZmljIHRhZyB2YWx1ZXMgYWJvdmUgKi8KLSNkZWZpbmUg VkFSVEFHX0lTX0VYUEFOREVEKHRhZykgXAotCSgoKHRhZykgJiB+MSkgPT0gVkFSVEFHX0VY UEFOREVEX1JPKQotCi0jZGVmaW5lIFZBUlRBR19TSVpFKHRhZykgXAotCSgodGFnKSA9PSBW QVJUQUdfSU5ESVJFQ1QgPyBzaXplb2YodmFyYXR0X2luZGlyZWN0KSA6IFwKLQkgVkFSVEFH X0lTX0VYUEFOREVEKHRhZykgPyBzaXplb2YodmFyYXR0X2V4cGFuZGVkKSA6IFwKLQkgKHRh ZykgPT0gVkFSVEFHX09ORElTSyA/IHNpemVvZih2YXJhdHRfZXh0ZXJuYWwpIDogXAotCSAo QXNzZXJ0TWFjcm8oZmFsc2UpLCAwKSkKLQotLyoKLSAqIFRoZXNlIHN0cnVjdHMgZGVzY3Jp YmUgdGhlIGhlYWRlciBvZiBhIHZhcmxlbmEgb2JqZWN0IHRoYXQgbWF5IGhhdmUgYmVlbgot ICogVE9BU1RlZC4gIEdlbmVyYWxseSwgZG9uJ3QgcmVmZXJlbmNlIHRoZXNlIHN0cnVjdHMg ZGlyZWN0bHksIGJ1dCB1c2UgdGhlCi0gKiBtYWNyb3MgYmVsb3cuCi0gKgotICogV2UgdXNl IHNlcGFyYXRlIHN0cnVjdHMgZm9yIHRoZSBhbGlnbmVkIGFuZCB1bmFsaWduZWQgY2FzZXMg YmVjYXVzZSB0aGUKLSAqIGNvbXBpbGVyIG1pZ2h0IG90aGVyd2lzZSB0aGluayBpdCBjb3Vs ZCBnZW5lcmF0ZSBjb2RlIHRoYXQgYXNzdW1lcwotICogYWxpZ25tZW50IHdoaWxlIHRvdWNo aW5nIGZpZWxkcyBvZiBhIDEtYnl0ZS1oZWFkZXIgdmFybGVuYS4KLSAqLwotdHlwZWRlZiB1 bmlvbgotewotCXN0cnVjdAkJCQkJCS8qIE5vcm1hbCB2YXJsZW5hICg0LWJ5dGUgbGVuZ3Ro KSAqLwotCXsKLQkJdWludDMyCQl2YV9oZWFkZXI7Ci0JCWNoYXIJCXZhX2RhdGFbRkxFWElC TEVfQVJSQVlfTUVNQkVSXTsKLQl9CQkJdmFfNGJ5dGU7Ci0Jc3RydWN0CQkJCQkJLyogQ29t cHJlc3NlZC1pbi1saW5lIGZvcm1hdCAqLwotCXsKLQkJdWludDMyCQl2YV9oZWFkZXI7Ci0J CXVpbnQzMgkJdmFfdGNpbmZvOwkvKiBPcmlnaW5hbCBkYXRhIHNpemUgKGV4Y2x1ZGVzIGhl YWRlcikgYW5kCi0JCQkJCQkJCSAqIGNvbXByZXNzaW9uIG1ldGhvZDsgc2VlIHZhX2V4dGlu Zm8gKi8KLQkJY2hhcgkJdmFfZGF0YVtGTEVYSUJMRV9BUlJBWV9NRU1CRVJdOyAvKiBDb21w cmVzc2VkIGRhdGEgKi8KLQl9CQkJdmFfY29tcHJlc3NlZDsKLX0gdmFyYXR0cmliXzRiOwot Ci10eXBlZGVmIHN0cnVjdAotewotCXVpbnQ4CQl2YV9oZWFkZXI7Ci0JY2hhcgkJdmFfZGF0 YVtGTEVYSUJMRV9BUlJBWV9NRU1CRVJdOyAvKiBEYXRhIGJlZ2lucyBoZXJlICovCi19IHZh cmF0dHJpYl8xYjsKLQotLyogVE9BU1QgcG9pbnRlcnMgYXJlIGEgc3Vic2V0IG9mIHZhcmF0 dHJpYl8xYiB3aXRoIGFuIGlkZW50aWZ5aW5nIHRhZyBieXRlICovCi10eXBlZGVmIHN0cnVj dAotewotCXVpbnQ4CQl2YV9oZWFkZXI7CQkvKiBBbHdheXMgMHg4MCBvciAweDAxICovCi0J dWludDgJCXZhX3RhZzsJCQkvKiBUeXBlIG9mIGRhdHVtICovCi0JY2hhcgkJdmFfZGF0YVtG TEVYSUJMRV9BUlJBWV9NRU1CRVJdOyAvKiBUeXBlLXNwZWNpZmljIGRhdGEgKi8KLX0gdmFy YXR0cmliXzFiX2U7Ci0KLS8qCi0gKiBCaXQgbGF5b3V0cyBmb3IgdmFybGVuYSBoZWFkZXJz IG9uIGJpZy1lbmRpYW4gbWFjaGluZXM6Ci0gKgotICogMDB4eHh4eHggNC1ieXRlIGxlbmd0 aCB3b3JkLCBhbGlnbmVkLCB1bmNvbXByZXNzZWQgZGF0YSAodXAgdG8gMUcpCi0gKiAwMXh4 eHh4eCA0LWJ5dGUgbGVuZ3RoIHdvcmQsIGFsaWduZWQsICpjb21wcmVzc2VkKiBkYXRhICh1 cCB0byAxRykKLSAqIDEwMDAwMDAwIDEtYnl0ZSBsZW5ndGggd29yZCwgdW5hbGlnbmVkLCBU T0FTVCBwb2ludGVyCi0gKiAxeHh4eHh4eCAxLWJ5dGUgbGVuZ3RoIHdvcmQsIHVuYWxpZ25l ZCwgdW5jb21wcmVzc2VkIGRhdGEgKHVwIHRvIDEyNmIpCi0gKgotICogQml0IGxheW91dHMg Zm9yIHZhcmxlbmEgaGVhZGVycyBvbiBsaXR0bGUtZW5kaWFuIG1hY2hpbmVzOgotICoKLSAq IHh4eHh4eDAwIDQtYnl0ZSBsZW5ndGggd29yZCwgYWxpZ25lZCwgdW5jb21wcmVzc2VkIGRh dGEgKHVwIHRvIDFHKQotICogeHh4eHh4MTAgNC1ieXRlIGxlbmd0aCB3b3JkLCBhbGlnbmVk LCAqY29tcHJlc3NlZCogZGF0YSAodXAgdG8gMUcpCi0gKiAwMDAwMDAwMSAxLWJ5dGUgbGVu Z3RoIHdvcmQsIHVuYWxpZ25lZCwgVE9BU1QgcG9pbnRlcgotICogeHh4eHh4eDEgMS1ieXRl IGxlbmd0aCB3b3JkLCB1bmFsaWduZWQsIHVuY29tcHJlc3NlZCBkYXRhICh1cCB0byAxMjZi KQotICoKLSAqIFRoZSAieHh4IiBiaXRzIGFyZSB0aGUgbGVuZ3RoIGZpZWxkICh3aGljaCBp bmNsdWRlcyBpdHNlbGYgaW4gYWxsIGNhc2VzKS4KLSAqIEluIHRoZSBiaWctZW5kaWFuIGNh c2Ugd2UgbWFzayB0byBleHRyYWN0IHRoZSBsZW5ndGgsIGluIHRoZSBsaXR0bGUtZW5kaWFu Ci0gKiBjYXNlIHdlIHNoaWZ0LiAgTm90ZSB0aGF0IGluIGJvdGggY2FzZXMgdGhlIGZsYWcg Yml0cyBhcmUgaW4gdGhlIHBoeXNpY2FsbHkKLSAqIGZpcnN0IGJ5dGUuICBBbHNvLCBpdCBp cyBub3QgcG9zc2libGUgZm9yIGEgMS1ieXRlIGxlbmd0aCB3b3JkIHRvIGJlIHplcm87Ci0g KiB0aGlzIGxldHMgdXMgZGlzYW1iaWd1YXRlIGFsaWdubWVudCBwYWRkaW5nIGJ5dGVzIGZy b20gdGhlIHN0YXJ0IG9mIGFuCi0gKiB1bmFsaWduZWQgZGF0dW0uICAoV2Ugbm93ICpyZXF1 aXJlKiBwYWQgYnl0ZXMgdG8gYmUgZmlsbGVkIHdpdGggemVybyEpCi0gKgotICogSW4gVE9B U1QgcG9pbnRlcnMgdGhlIHZhX3RhZyBmaWVsZCAoc2VlIHZhcmF0dHJpYl8xYl9lKSBpcyB1 c2VkIHRvIGRpc2Nlcm4KLSAqIHRoZSBzcGVjaWZpYyB0eXBlIGFuZCBsZW5ndGggb2YgdGhl IHBvaW50ZXIgZGF0dW0uCi0gKi8KLQotLyoKLSAqIEVuZGlhbi1kZXBlbmRlbnQgbWFjcm9z LiAgVGhlc2UgYXJlIGNvbnNpZGVyZWQgaW50ZXJuYWwgLS0tIHVzZSB0aGUKLSAqIGV4dGVy bmFsIG1hY3JvcyBiZWxvdyBpbnN0ZWFkIG9mIHVzaW5nIHRoZXNlIGRpcmVjdGx5LgotICoK LSAqIE5vdGU6IElTXzFCIGlzIHRydWUgZm9yIGV4dGVybmFsIHRvYXN0IHJlY29yZHMgYnV0 IFZBUlNJWkVfMUIgd2lsbCByZXR1cm4gMAotICogZm9yIHN1Y2ggcmVjb3Jkcy4gSGVuY2Ug eW91IHNob3VsZCB1c3VhbGx5IGNoZWNrIGZvciBJU19FWFRFUk5BTCBiZWZvcmUKLSAqIGNo ZWNraW5nIGZvciBJU18xQi4KLSAqLwotCi0jaWZkZWYgV09SRFNfQklHRU5ESUFOCi0KLSNk ZWZpbmUgVkFSQVRUX0lTXzRCKFBUUikgXAotCSgoKCh2YXJhdHRyaWJfMWIgKikgKFBUUikp LT52YV9oZWFkZXIgJiAweDgwKSA9PSAweDAwKQotI2RlZmluZSBWQVJBVFRfSVNfNEJfVShQ VFIpIFwKLQkoKCgodmFyYXR0cmliXzFiICopIChQVFIpKS0+dmFfaGVhZGVyICYgMHhDMCkg PT0gMHgwMCkKLSNkZWZpbmUgVkFSQVRUX0lTXzRCX0MoUFRSKSBcCi0JKCgoKHZhcmF0dHJp Yl8xYiAqKSAoUFRSKSktPnZhX2hlYWRlciAmIDB4QzApID09IDB4NDApCi0jZGVmaW5lIFZB UkFUVF9JU18xQihQVFIpIFwKLQkoKCgodmFyYXR0cmliXzFiICopIChQVFIpKS0+dmFfaGVh ZGVyICYgMHg4MCkgPT0gMHg4MCkKLSNkZWZpbmUgVkFSQVRUX0lTXzFCX0UoUFRSKSBcCi0J KCgoKHZhcmF0dHJpYl8xYiAqKSAoUFRSKSktPnZhX2hlYWRlcikgPT0gMHg4MCkKLSNkZWZp bmUgVkFSQVRUX05PVF9QQURfQllURShQVFIpIFwKLQkoKigodWludDggKikgKFBUUikpICE9 IDApCi0KLS8qIFZBUlNJWkVfNEIoKSBzaG91bGQgb25seSBiZSB1c2VkIG9uIGtub3duLWFs aWduZWQgZGF0YSAqLwotI2RlZmluZSBWQVJTSVpFXzRCKFBUUikgXAotCSgoKHZhcmF0dHJp Yl80YiAqKSAoUFRSKSktPnZhXzRieXRlLnZhX2hlYWRlciAmIDB4M0ZGRkZGRkYpCi0jZGVm aW5lIFZBUlNJWkVfMUIoUFRSKSBcCi0JKCgodmFyYXR0cmliXzFiICopIChQVFIpKS0+dmFf aGVhZGVyICYgMHg3RikKLSNkZWZpbmUgVkFSVEFHXzFCX0UoUFRSKSBcCi0JKCgodmFyYXR0 cmliXzFiX2UgKikgKFBUUikpLT52YV90YWcpCi0KLSNkZWZpbmUgU0VUX1ZBUlNJWkVfNEIo UFRSLGxlbikgXAotCSgoKHZhcmF0dHJpYl80YiAqKSAoUFRSKSktPnZhXzRieXRlLnZhX2hl YWRlciA9IChsZW4pICYgMHgzRkZGRkZGRikKLSNkZWZpbmUgU0VUX1ZBUlNJWkVfNEJfQyhQ VFIsbGVuKSBcCi0JKCgodmFyYXR0cmliXzRiICopIChQVFIpKS0+dmFfNGJ5dGUudmFfaGVh ZGVyID0gKChsZW4pICYgMHgzRkZGRkZGRikgfCAweDQwMDAwMDAwKQotI2RlZmluZSBTRVRf VkFSU0laRV8xQihQVFIsbGVuKSBcCi0JKCgodmFyYXR0cmliXzFiICopIChQVFIpKS0+dmFf aGVhZGVyID0gKGxlbikgfCAweDgwKQotI2RlZmluZSBTRVRfVkFSVEFHXzFCX0UoUFRSLHRh ZykgXAotCSgoKHZhcmF0dHJpYl8xYl9lICopIChQVFIpKS0+dmFfaGVhZGVyID0gMHg4MCwg XAotCSAoKHZhcmF0dHJpYl8xYl9lICopIChQVFIpKS0+dmFfdGFnID0gKHRhZykpCi0KLSNl bHNlCQkJCQkJCS8qICFXT1JEU19CSUdFTkRJQU4gKi8KLQotI2RlZmluZSBWQVJBVFRfSVNf NEIoUFRSKSBcCi0JKCgoKHZhcmF0dHJpYl8xYiAqKSAoUFRSKSktPnZhX2hlYWRlciAmIDB4 MDEpID09IDB4MDApCi0jZGVmaW5lIFZBUkFUVF9JU180Ql9VKFBUUikgXAotCSgoKCh2YXJh dHRyaWJfMWIgKikgKFBUUikpLT52YV9oZWFkZXIgJiAweDAzKSA9PSAweDAwKQotI2RlZmlu ZSBWQVJBVFRfSVNfNEJfQyhQVFIpIFwKLQkoKCgodmFyYXR0cmliXzFiICopIChQVFIpKS0+ dmFfaGVhZGVyICYgMHgwMykgPT0gMHgwMikKLSNkZWZpbmUgVkFSQVRUX0lTXzFCKFBUUikg XAotCSgoKCh2YXJhdHRyaWJfMWIgKikgKFBUUikpLT52YV9oZWFkZXIgJiAweDAxKSA9PSAw eDAxKQotI2RlZmluZSBWQVJBVFRfSVNfMUJfRShQVFIpIFwKLQkoKCgodmFyYXR0cmliXzFi ICopIChQVFIpKS0+dmFfaGVhZGVyKSA9PSAweDAxKQotI2RlZmluZSBWQVJBVFRfTk9UX1BB RF9CWVRFKFBUUikgXAotCSgqKCh1aW50OCAqKSAoUFRSKSkgIT0gMCkKLQotLyogVkFSU0la RV80QigpIHNob3VsZCBvbmx5IGJlIHVzZWQgb24ga25vd24tYWxpZ25lZCBkYXRhICovCi0j ZGVmaW5lIFZBUlNJWkVfNEIoUFRSKSBcCi0JKCgoKHZhcmF0dHJpYl80YiAqKSAoUFRSKSkt PnZhXzRieXRlLnZhX2hlYWRlciA+PiAyKSAmIDB4M0ZGRkZGRkYpCi0jZGVmaW5lIFZBUlNJ WkVfMUIoUFRSKSBcCi0JKCgoKHZhcmF0dHJpYl8xYiAqKSAoUFRSKSktPnZhX2hlYWRlciA+ PiAxKSAmIDB4N0YpCi0jZGVmaW5lIFZBUlRBR18xQl9FKFBUUikgXAotCSgoKHZhcmF0dHJp Yl8xYl9lICopIChQVFIpKS0+dmFfdGFnKQotCi0jZGVmaW5lIFNFVF9WQVJTSVpFXzRCKFBU UixsZW4pIFwKLQkoKCh2YXJhdHRyaWJfNGIgKikgKFBUUikpLT52YV80Ynl0ZS52YV9oZWFk ZXIgPSAoKCh1aW50MzIpIChsZW4pKSA8PCAyKSkKLSNkZWZpbmUgU0VUX1ZBUlNJWkVfNEJf QyhQVFIsbGVuKSBcCi0JKCgodmFyYXR0cmliXzRiICopIChQVFIpKS0+dmFfNGJ5dGUudmFf aGVhZGVyID0gKCgodWludDMyKSAobGVuKSkgPDwgMikgfCAweDAyKQotI2RlZmluZSBTRVRf VkFSU0laRV8xQihQVFIsbGVuKSBcCi0JKCgodmFyYXR0cmliXzFiICopIChQVFIpKS0+dmFf aGVhZGVyID0gKCgodWludDgpIChsZW4pKSA8PCAxKSB8IDB4MDEpCi0jZGVmaW5lIFNFVF9W QVJUQUdfMUJfRShQVFIsdGFnKSBcCi0JKCgodmFyYXR0cmliXzFiX2UgKikgKFBUUikpLT52 YV9oZWFkZXIgPSAweDAxLCBcCi0JICgodmFyYXR0cmliXzFiX2UgKikgKFBUUikpLT52YV90 YWcgPSAodGFnKSkKLQotI2VuZGlmCQkJCQkJCS8qIFdPUkRTX0JJR0VORElBTiAqLwotCi0j ZGVmaW5lIFZBUkRBVEFfNEIoUFRSKQkJKCgodmFyYXR0cmliXzRiICopIChQVFIpKS0+dmFf NGJ5dGUudmFfZGF0YSkKLSNkZWZpbmUgVkFSREFUQV80Ql9DKFBUUikJKCgodmFyYXR0cmli XzRiICopIChQVFIpKS0+dmFfY29tcHJlc3NlZC52YV9kYXRhKQotI2RlZmluZSBWQVJEQVRB XzFCKFBUUikJCSgoKHZhcmF0dHJpYl8xYiAqKSAoUFRSKSktPnZhX2RhdGEpCi0jZGVmaW5l IFZBUkRBVEFfMUJfRShQVFIpCSgoKHZhcmF0dHJpYl8xYl9lICopIChQVFIpKS0+dmFfZGF0 YSkKLQotLyoKLSAqIEV4dGVybmFsbHkgdmlzaWJsZSBUT0FTVCBtYWNyb3MgYmVnaW4gaGVy ZS4KLSAqLwotCi0jZGVmaW5lIFZBUkhEUlNaX0VYVEVSTkFMCQlvZmZzZXRvZih2YXJhdHRy aWJfMWJfZSwgdmFfZGF0YSkKLSNkZWZpbmUgVkFSSERSU1pfQ09NUFJFU1NFRAkJb2Zmc2V0 b2YodmFyYXR0cmliXzRiLCB2YV9jb21wcmVzc2VkLnZhX2RhdGEpCi0jZGVmaW5lIFZBUkhE UlNaX1NIT1JUCQkJb2Zmc2V0b2YodmFyYXR0cmliXzFiLCB2YV9kYXRhKQotCi0jZGVmaW5l IFZBUkFUVF9TSE9SVF9NQVgJCTB4N0YKLSNkZWZpbmUgVkFSQVRUX0NBTl9NQUtFX1NIT1JU KFBUUikgXAotCShWQVJBVFRfSVNfNEJfVShQVFIpICYmIFwKLQkgKFZBUlNJWkUoUFRSKSAt IFZBUkhEUlNaICsgVkFSSERSU1pfU0hPUlQpIDw9IFZBUkFUVF9TSE9SVF9NQVgpCi0jZGVm aW5lIFZBUkFUVF9DT05WRVJURURfU0hPUlRfU0laRShQVFIpIFwKLQkoVkFSU0laRShQVFIp IC0gVkFSSERSU1ogKyBWQVJIRFJTWl9TSE9SVCkKLQotLyoKLSAqIEluIGNvbnN1bWVycyBv YmxpdmlvdXMgdG8gZGF0YSBhbGlnbm1lbnQsIGNhbGwgUEdfREVUT0FTVF9EQVRVTV9QQUNL RUQoKSwKLSAqIFZBUkRBVEFfQU5ZKCksIFZBUlNJWkVfQU5ZKCkgYW5kIFZBUlNJWkVfQU5Z X0VYSERSKCkuICBFbHNld2hlcmUsIGNhbGwKLSAqIFBHX0RFVE9BU1RfREFUVU0oKSwgVkFS REFUQSgpIGFuZCBWQVJTSVpFKCkuICBEaXJlY3RseSBmZXRjaGluZyBhbiBpbnQxNiwKLSAq IGludDMyIG9yIHdpZGVyIGZpZWxkIGluIHRoZSBzdHJ1Y3QgcmVwcmVzZW50aW5nIHRoZSBk YXR1bSBsYXlvdXQgcmVxdWlyZXMKLSAqIGFsaWduZWQgZGF0YS4gIG1lbWNweSgpIGlzIGFs aWdubWVudC1vYmxpdmlvdXMsIGFzIGFyZSBtb3N0IG9wZXJhdGlvbnMgb24KLSAqIGRhdGF0 eXBlcywgc3VjaCBhcyB0ZXh0LCB3aG9zZSBsYXlvdXQgc3RydWN0IGNvbnRhaW5zIG9ubHkg Y2hhciBmaWVsZHMuCi0gKgotICogQ29kZSBhc3NlbWJsaW5nIGEgbmV3IGRhdHVtIHNob3Vs ZCBjYWxsIFZBUkRBVEEoKSBhbmQgU0VUX1ZBUlNJWkUoKS4KLSAqIChEYXR1bXMgYmVnaW4g bGlmZSB1bnRvYXN0ZWQuKQotICoKLSAqIE90aGVyIG1hY3JvcyBoZXJlIHNob3VsZCB1c3Vh bGx5IGJlIHVzZWQgb25seSBieSB0dXBsZSBhc3NlbWJseS9kaXNhc3NlbWJseQotICogY29k ZSBhbmQgY29kZSB0aGF0IHNwZWNpZmljYWxseSB3YW50cyB0byB3b3JrIHdpdGggc3RpbGwt dG9hc3RlZCBEYXR1bXMuCi0gKi8KLSNkZWZpbmUgVkFSREFUQShQVFIpCQkJCQkJVkFSREFU QV80QihQVFIpCi0jZGVmaW5lIFZBUlNJWkUoUFRSKQkJCQkJCVZBUlNJWkVfNEIoUFRSKQot Ci0jZGVmaW5lIFZBUlNJWkVfU0hPUlQoUFRSKQkJCQkJVkFSU0laRV8xQihQVFIpCi0jZGVm aW5lIFZBUkRBVEFfU0hPUlQoUFRSKQkJCQkJVkFSREFUQV8xQihQVFIpCi0KLSNkZWZpbmUg VkFSVEFHX0VYVEVSTkFMKFBUUikJCQkJVkFSVEFHXzFCX0UoUFRSKQotI2RlZmluZSBWQVJT SVpFX0VYVEVSTkFMKFBUUikJCQkJKFZBUkhEUlNaX0VYVEVSTkFMICsgVkFSVEFHX1NJWkUo VkFSVEFHX0VYVEVSTkFMKFBUUikpKQotI2RlZmluZSBWQVJEQVRBX0VYVEVSTkFMKFBUUikJ CQkJVkFSREFUQV8xQl9FKFBUUikKLQotI2RlZmluZSBWQVJBVFRfSVNfQ09NUFJFU1NFRChQ VFIpCQkJVkFSQVRUX0lTXzRCX0MoUFRSKQotI2RlZmluZSBWQVJBVFRfSVNfRVhURVJOQUwo UFRSKQkJCQlWQVJBVFRfSVNfMUJfRShQVFIpCi0jZGVmaW5lIFZBUkFUVF9JU19FWFRFUk5B TF9PTkRJU0soUFRSKSBcCi0JKFZBUkFUVF9JU19FWFRFUk5BTChQVFIpICYmIFZBUlRBR19F WFRFUk5BTChQVFIpID09IFZBUlRBR19PTkRJU0spCi0jZGVmaW5lIFZBUkFUVF9JU19FWFRF Uk5BTF9JTkRJUkVDVChQVFIpIFwKLQkoVkFSQVRUX0lTX0VYVEVSTkFMKFBUUikgJiYgVkFS VEFHX0VYVEVSTkFMKFBUUikgPT0gVkFSVEFHX0lORElSRUNUKQotI2RlZmluZSBWQVJBVFRf SVNfRVhURVJOQUxfRVhQQU5ERURfUk8oUFRSKSBcCi0JKFZBUkFUVF9JU19FWFRFUk5BTChQ VFIpICYmIFZBUlRBR19FWFRFUk5BTChQVFIpID09IFZBUlRBR19FWFBBTkRFRF9STykKLSNk ZWZpbmUgVkFSQVRUX0lTX0VYVEVSTkFMX0VYUEFOREVEX1JXKFBUUikgXAotCShWQVJBVFRf SVNfRVhURVJOQUwoUFRSKSAmJiBWQVJUQUdfRVhURVJOQUwoUFRSKSA9PSBWQVJUQUdfRVhQ QU5ERURfUlcpCi0jZGVmaW5lIFZBUkFUVF9JU19FWFRFUk5BTF9FWFBBTkRFRChQVFIpIFwK LQkoVkFSQVRUX0lTX0VYVEVSTkFMKFBUUikgJiYgVkFSVEFHX0lTX0VYUEFOREVEKFZBUlRB R19FWFRFUk5BTChQVFIpKSkKLSNkZWZpbmUgVkFSQVRUX0lTX0VYVEVSTkFMX05PTl9FWFBB TkRFRChQVFIpIFwKLQkoVkFSQVRUX0lTX0VYVEVSTkFMKFBUUikgJiYgIVZBUlRBR19JU19F WFBBTkRFRChWQVJUQUdfRVhURVJOQUwoUFRSKSkpCi0jZGVmaW5lIFZBUkFUVF9JU19TSE9S VChQVFIpCQkJCVZBUkFUVF9JU18xQihQVFIpCi0jZGVmaW5lIFZBUkFUVF9JU19FWFRFTkRF RChQVFIpCQkJCSghVkFSQVRUX0lTXzRCX1UoUFRSKSkKLQotI2RlZmluZSBTRVRfVkFSU0la RShQVFIsIGxlbikJCQkJU0VUX1ZBUlNJWkVfNEIoUFRSLCBsZW4pCi0jZGVmaW5lIFNFVF9W QVJTSVpFX1NIT1JUKFBUUiwgbGVuKQkJCVNFVF9WQVJTSVpFXzFCKFBUUiwgbGVuKQotI2Rl ZmluZSBTRVRfVkFSU0laRV9DT01QUkVTU0VEKFBUUiwgbGVuKQlTRVRfVkFSU0laRV80Ql9D KFBUUiwgbGVuKQotCi0jZGVmaW5lIFNFVF9WQVJUQUdfRVhURVJOQUwoUFRSLCB0YWcpCQlT RVRfVkFSVEFHXzFCX0UoUFRSLCB0YWcpCi0KLSNkZWZpbmUgVkFSU0laRV9BTlkoUFRSKSBc Ci0JKFZBUkFUVF9JU18xQl9FKFBUUikgPyBWQVJTSVpFX0VYVEVSTkFMKFBUUikgOiBcCi0J IChWQVJBVFRfSVNfMUIoUFRSKSA/IFZBUlNJWkVfMUIoUFRSKSA6IFwKLQkgIFZBUlNJWkVf NEIoUFRSKSkpCi0KLS8qIFNpemUgb2YgYSB2YXJsZW5hIGRhdGEsIGV4Y2x1ZGluZyBoZWFk ZXIgKi8KLSNkZWZpbmUgVkFSU0laRV9BTllfRVhIRFIoUFRSKSBcCi0JKFZBUkFUVF9JU18x Ql9FKFBUUikgPyBWQVJTSVpFX0VYVEVSTkFMKFBUUiktVkFSSERSU1pfRVhURVJOQUwgOiBc Ci0JIChWQVJBVFRfSVNfMUIoUFRSKSA/IFZBUlNJWkVfMUIoUFRSKS1WQVJIRFJTWl9TSE9S VCA6IFwKLQkgIFZBUlNJWkVfNEIoUFRSKS1WQVJIRFJTWikpCi0KLS8qIGNhdXRpb246IHRo aXMgd2lsbCBub3Qgd29yayBvbiBhbiBleHRlcm5hbCBvciBjb21wcmVzc2VkLWluLWxpbmUg RGF0dW0gKi8KLS8qIGNhdXRpb246IHRoaXMgd2lsbCByZXR1cm4gYSBwb3NzaWJseSB1bmFs aWduZWQgcG9pbnRlciAqLwotI2RlZmluZSBWQVJEQVRBX0FOWShQVFIpIFwKLQkgKFZBUkFU VF9JU18xQihQVFIpID8gVkFSREFUQV8xQihQVFIpIDogVkFSREFUQV80QihQVFIpKQotCi0v KiBEZWNvbXByZXNzZWQgc2l6ZSBhbmQgY29tcHJlc3Npb24gbWV0aG9kIG9mIGEgY29tcHJl c3NlZC1pbi1saW5lIERhdHVtICovCi0jZGVmaW5lIFZBUkRBVEFfQ09NUFJFU1NFRF9HRVRf RVhUU0laRShQVFIpIFwKLQkoKCh2YXJhdHRyaWJfNGIgKikgKFBUUikpLT52YV9jb21wcmVz c2VkLnZhX3RjaW5mbyAmIFZBUkxFTkFfRVhUU0laRV9NQVNLKQotI2RlZmluZSBWQVJEQVRB X0NPTVBSRVNTRURfR0VUX0NPTVBSRVNTX01FVEhPRChQVFIpIFwKLQkoKCh2YXJhdHRyaWJf NGIgKikgKFBUUikpLT52YV9jb21wcmVzc2VkLnZhX3RjaW5mbyA+PiBWQVJMRU5BX0VYVFNJ WkVfQklUUykKLQotLyogU2FtZSBmb3IgZXh0ZXJuYWwgRGF0dW1zOyBidXQgbm90ZSBhcmd1 bWVudCBpcyBhIHN0cnVjdCB2YXJhdHRfZXh0ZXJuYWwgKi8KLSNkZWZpbmUgVkFSQVRUX0VY VEVSTkFMX0dFVF9FWFRTSVpFKHRvYXN0X3BvaW50ZXIpIFwKLQkoKHRvYXN0X3BvaW50ZXIp LnZhX2V4dGluZm8gJiBWQVJMRU5BX0VYVFNJWkVfTUFTSykKLSNkZWZpbmUgVkFSQVRUX0VY VEVSTkFMX0dFVF9DT01QUkVTU19NRVRIT0QodG9hc3RfcG9pbnRlcikgXAotCSgodG9hc3Rf cG9pbnRlcikudmFfZXh0aW5mbyA+PiBWQVJMRU5BX0VYVFNJWkVfQklUUykKLQotI2RlZmlu ZSBWQVJBVFRfRVhURVJOQUxfU0VUX1NJWkVfQU5EX0NPTVBSRVNTX01FVEhPRCh0b2FzdF9w b2ludGVyLCBsZW4sIGNtKSBcCi0JZG8geyBcCi0JCUFzc2VydCgoY20pID09IFRPQVNUX1BH TFpfQ09NUFJFU1NJT05fSUQgfHwgXAotCQkJICAgKGNtKSA9PSBUT0FTVF9MWjRfQ09NUFJF U1NJT05fSUQpOyBcCi0JCSgodG9hc3RfcG9pbnRlcikudmFfZXh0aW5mbyA9IFwKLQkJCShs ZW4pIHwgKCh1aW50MzIpIChjbSkgPDwgVkFSTEVOQV9FWFRTSVpFX0JJVFMpKTsgXAotCX0g d2hpbGUgKDApCi0KLS8qCi0gKiBUZXN0aW5nIHdoZXRoZXIgYW4gZXh0ZXJuYWxseS1zdG9y ZWQgdmFsdWUgaXMgY29tcHJlc3NlZCBub3cgcmVxdWlyZXMKLSAqIGNvbXBhcmluZyBzaXpl IHN0b3JlZCBpbiB2YV9leHRpbmZvICh0aGUgYWN0dWFsIGxlbmd0aCBvZiB0aGUgZXh0ZXJu YWwgZGF0YSkKLSAqIHRvIHJhd3NpemUgKHRoZSBvcmlnaW5hbCB1bmNvbXByZXNzZWQgZGF0 dW0ncyBzaXplKS4gIFRoZSBsYXR0ZXIgaW5jbHVkZXMKLSAqIFZBUkhEUlNaIG92ZXJoZWFk LCB0aGUgZm9ybWVyIGRvZXNuJ3QuICBXZSBuZXZlciB1c2UgY29tcHJlc3Npb24gdW5sZXNz IGl0Ci0gKiBhY3R1YWxseSBzYXZlcyBzcGFjZSwgc28gd2UgZXhwZWN0IGVpdGhlciBlcXVh bGl0eSBvciBsZXNzLXRoYW4uCi0gKi8KLSNkZWZpbmUgVkFSQVRUX0VYVEVSTkFMX0lTX0NP TVBSRVNTRUQodG9hc3RfcG9pbnRlcikgXAotCShWQVJBVFRfRVhURVJOQUxfR0VUX0VYVFNJ WkUodG9hc3RfcG9pbnRlcikgPCBcCi0JICh0b2FzdF9wb2ludGVyKS52YV9yYXdzaXplIC0g VkFSSERSU1opCi0KLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICoJCQkJU2VjdGlvbiAyOglEYXR1bSB0 eXBlICsgc3VwcG9ydCBmdW5jdGlvbnMKKyAqCQkJCVNlY3Rpb24gMToJRGF0dW0gdHlwZSAr IHN1cHBvcnQgZnVuY3Rpb25zCiAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKi8KIApAQCAtOTA3LDcgKzU1 OSw3IEBAIGV4dGVybiBEYXR1bSBGbG9hdDhHZXREYXR1bShmbG9hdDggWCk7CiAKIAogLyog LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLQotICoJCQkJU2VjdGlvbiAzOgltaXNjZWxsYW5lb3VzCisgKgkJCQlTZWN0 aW9uIDI6CW1pc2NlbGxhbmVvdXMKICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqLwogCmRpZmYgLS1naXQg YS9zcmMvaW5jbHVkZS91dGlscy9leHBhbmRlZGRhdHVtLmggYi9zcmMvaW5jbHVkZS91dGls cy9leHBhbmRlZGRhdHVtLmgKaW5kZXggYzQ4MThlYjA1NC4uMTM5ZjQ5ZDk0MCAxMDA2NDQK LS0tIGEvc3JjL2luY2x1ZGUvdXRpbHMvZXhwYW5kZWRkYXR1bS5oCisrKyBiL3NyYy9pbmNs dWRlL3V0aWxzL2V4cGFuZGVkZGF0dW0uaApAQCAtNDQsNiArNDQsOCBAQAogI2lmbmRlZiBF WFBBTkRFRERBVFVNX0gKICNkZWZpbmUgRVhQQU5ERUREQVRVTV9ICiAKKyNpbmNsdWRlICJ2 YXJhdHQuaCIKKwogLyogU2l6ZSBvZiBhbiBFWFRFUk5BTCBkYXR1bSB0aGF0IGNvbnRhaW5z IGEgcG9pbnRlciB0byBhbiBleHBhbmRlZCBvYmplY3QgKi8KICNkZWZpbmUgRVhQQU5ERURf UE9JTlRFUl9TSVpFIChWQVJIRFJTWl9FWFRFUk5BTCArIHNpemVvZih2YXJhdHRfZXhwYW5k ZWQpKQogCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9wb3N0Z3Jlcy5oIGIvc3JjL2luY2x1 ZGUvdmFyYXR0LmgKc2ltaWxhcml0eSBpbmRleCA1MyUKY29weSBmcm9tIHNyYy9pbmNsdWRl L3Bvc3RncmVzLmgKY29weSB0byBzcmMvaW5jbHVkZS92YXJhdHQuaAppbmRleCA1NDczMGRm YjM4Li4zN2ExMzkxNDVlIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9wb3N0Z3Jlcy5oCisr KyBiL3NyYy9pbmNsdWRlL3ZhcmF0dC5oCkBAIC0xLDU3ICsxLDE5IEBACiAvKi0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0KICAqCi0gKiBwb3N0Z3Jlcy5oCi0gKgkgIFByaW1hcnkgaW5jbHVkZSBm aWxlIGZvciBQb3N0Z3JlU1FMIHNlcnZlciAuYyBmaWxlcwotICoKLSAqIFRoaXMgc2hvdWxk IGJlIHRoZSBmaXJzdCBmaWxlIGluY2x1ZGVkIGJ5IFBvc3RncmVTUUwgYmFja2VuZCBtb2R1 bGVzLgotICogQ2xpZW50LXNpZGUgY29kZSBzaG91bGQgaW5jbHVkZSBwb3N0Z3Jlc19mZS5o IGluc3RlYWQuCisgKiB2YXJhdHQuaAorICoJICB2YXJpYWJsZS1sZW5ndGggZGF0YXR5cGVz IChUT0FTVCBzdXBwb3J0KQogICoKICAqCiAgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDE5 OTYtMjAyMiwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKICAqIFBvcnRp b25zIENvcHlyaWdodCAoYykgMTk5NSwgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBD YWxpZm9ybmlhCiAgKgotICogc3JjL2luY2x1ZGUvcG9zdGdyZXMuaAorICogc3JjL2luY2x1 ZGUvdmFyYXR0LmgKICAqCiAgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqLwotLyoKLSAqLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLQotICoJIFRBQkxFIE9GIENPTlRFTlRTCi0gKgotICoJCVdoZW4gYWRkaW5nIHN0 dWZmIHRvIHRoaXMgZmlsZSwgcGxlYXNlIHRyeSB0byBwdXQgc3R1ZmYKLSAqCQlpbnRvIHRo ZSByZWxldmFudCBzZWN0aW9uLCBvciBhZGQgbmV3IHNlY3Rpb25zIGFzIGFwcHJvcHJpYXRl LgotICoKLSAqCSAgc2VjdGlvbglkZXNjcmlwdGlvbgotICoJICAtLS0tLS0tCS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICoJCTEpCQl2YXJp YWJsZS1sZW5ndGggZGF0YXR5cGVzIChUT0FTVCBzdXBwb3J0KQotICoJCTIpCQlEYXR1bSB0 eXBlICsgc3VwcG9ydCBmdW5jdGlvbnMKLSAqCQkzKQkJbWlzY2VsbGFuZW91cwotICoKLSAq CSBOT1RFUwotICoKLSAqCUluIGdlbmVyYWwsIHRoaXMgZmlsZSBzaG91bGQgY29udGFpbiBk ZWNsYXJhdGlvbnMgdGhhdCBhcmUgd2lkZWx5IG5lZWRlZAotICoJaW4gdGhlIGJhY2tlbmQg ZW52aXJvbm1lbnQsIGJ1dCBhcmUgb2Ygbm8gaW50ZXJlc3Qgb3V0c2lkZSB0aGUgYmFja2Vu ZC4KLSAqCi0gKglTaW1wbGUgdHlwZSBkZWZpbml0aW9ucyBsaXZlIGluIGMuaCwgd2hlcmUg dGhleSBhcmUgc2hhcmVkIHdpdGgKLSAqCXBvc3RncmVzX2ZlLmguICBXZSBkbyB0aGF0IHNp bmNlIHRob3NlIHR5cGUgZGVmaW5pdGlvbnMgYXJlIG5lZWRlZCBieQotICoJZnJvbnRlbmQg bW9kdWxlcyB0aGF0IHdhbnQgdG8gZGVhbCB3aXRoIGJpbmFyeSBkYXRhIHRyYW5zbWlzc2lv biB0byBvcgotICoJZnJvbSB0aGUgYmFja2VuZC4gIFR5cGUgZGVmaW5pdGlvbnMgaW4gdGhp cyBmaWxlIHNob3VsZCBiZSBmb3IKLSAqCXJlcHJlc2VudGF0aW9ucyB0aGF0IG5ldmVyIGVz Y2FwZSB0aGUgYmFja2VuZCwgc3VjaCBhcyBEYXR1bSBvcgotICoJVE9BU1RlZCB2YXJsZW5h IG9iamVjdHMuCi0gKgotICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKi8KLSNpZm5kZWYgUE9TVEdSRVNfSAot I2RlZmluZSBQT1NUR1JFU19ICiAKLSNpbmNsdWRlICJjLmgiCi0jaW5jbHVkZSAidXRpbHMv ZWxvZy5oIgotI2luY2x1ZGUgInV0aWxzL3BhbGxvYy5oIgotCi0vKiAtLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0g KgkJCQlTZWN0aW9uIDE6CXZhcmlhYmxlLWxlbmd0aCBkYXRhdHlwZXMgKFRPQVNUIHN1cHBv cnQpCi0gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tCi0gKi8KKyNpZm5kZWYgVkFSQVRUX0gKKyNkZWZpbmUgVkFS QVRUX0gKIAogLyoKICAqIHN0cnVjdCB2YXJhdHRfZXh0ZXJuYWwgaXMgYSB0cmFkaXRpb25h bCAiVE9BU1QgcG9pbnRlciIsIHRoYXQgaXMsIHRoZQpAQCAtMzkzLDUzNSArMzU1LDQgQEAg dHlwZWRlZiBzdHJ1Y3QKIAkoVkFSQVRUX0VYVEVSTkFMX0dFVF9FWFRTSVpFKHRvYXN0X3Bv aW50ZXIpIDwgXAogCSAodG9hc3RfcG9pbnRlcikudmFfcmF3c2l6ZSAtIFZBUkhEUlNaKQog Ci0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0KLSAqCQkJCVNlY3Rpb24gMjoJRGF0dW0gdHlwZSArIHN1cHBv cnQgZnVuY3Rpb25zCi0gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKi8KLQotLyoKLSAqIEEgRGF0dW0gY29u dGFpbnMgZWl0aGVyIGEgdmFsdWUgb2YgYSBwYXNzLWJ5LXZhbHVlIHR5cGUgb3IgYSBwb2lu dGVyIHRvIGEKLSAqIHZhbHVlIG9mIGEgcGFzcy1ieS1yZWZlcmVuY2UgdHlwZS4gIFRoZXJl Zm9yZSwgd2UgcmVxdWlyZToKLSAqCi0gKiBzaXplb2YoRGF0dW0pID09IHNpemVvZih2b2lk ICopID09IDQgb3IgOAotICoKLSAqIFRoZSBmdW5jdGlvbnMgYmVsb3cgYW5kIHRoZSBhbmFs b2dvdXMgZnVuY3Rpb25zIGZvciBvdGhlciB0eXBlcyBzaG91bGQgYmUgdXNlZCB0bwotICog Y29udmVydCBiZXR3ZWVuIGEgRGF0dW0gYW5kIHRoZSBhcHByb3ByaWF0ZSBDIHR5cGUuCi0g Ki8KLQotdHlwZWRlZiB1aW50cHRyX3QgRGF0dW07Ci0KLS8qCi0gKiBBIE51bGxhYmxlRGF0 dW0gaXMgdXNlZCBpbiBwbGFjZXMgd2hlcmUgYm90aCBhIERhdHVtIGFuZCBpdHMgbnVsbG5l c3MgbmVlZHMKLSAqIHRvIGJlIHN0b3JlZC4gVGhpcyBjYW4gYmUgbW9yZSBlZmZpY2llbnQg dGhhbiBzdG9yaW5nIGRhdHVtcyBhbmQgbnVsbG5lc3MKLSAqIGluIHNlcGFyYXRlIGFycmF5 cywgZHVlIHRvIGJldHRlciBzcGF0aWFsIGxvY2FsaXR5LCBldmVuIGlmIG1vcmUgc3BhY2Ug bWF5Ci0gKiBiZSB3YXN0ZWQgZHVlIHRvIHBhZGRpbmcuCi0gKi8KLXR5cGVkZWYgc3RydWN0 IE51bGxhYmxlRGF0dW0KLXsKLSNkZWZpbmUgRklFTEROT19OVUxMQUJMRV9EQVRVTV9EQVRV TSAwCi0JRGF0dW0JCXZhbHVlOwotI2RlZmluZSBGSUVMRE5PX05VTExBQkxFX0RBVFVNX0lT TlVMTCAxCi0JYm9vbAkJaXNudWxsOwotCS8qIGR1ZSB0byBhbGlnbm1lbnQgcGFkZGluZyB0 aGlzIGNvdWxkIGJlIHVzZWQgZm9yIGZsYWdzIGZvciBmcmVlICovCi19IE51bGxhYmxlRGF0 dW07Ci0KLSNkZWZpbmUgU0laRU9GX0RBVFVNIFNJWkVPRl9WT0lEX1AKLQotLyoKLSAqIERh dHVtR2V0Qm9vbAotICoJCVJldHVybnMgYm9vbGVhbiB2YWx1ZSBvZiBhIGRhdHVtLgotICoK LSAqIE5vdGU6IGFueSBub256ZXJvIHZhbHVlIHdpbGwgYmUgY29uc2lkZXJlZCB0cnVlLgot ICovCi1zdGF0aWMgaW5saW5lIGJvb2wKLURhdHVtR2V0Qm9vbChEYXR1bSBYKQotewotCXJl dHVybiAoWCAhPSAwKTsKLX0KLQotLyoKLSAqIEJvb2xHZXREYXR1bQotICoJCVJldHVybnMg ZGF0dW0gcmVwcmVzZW50YXRpb24gZm9yIGEgYm9vbGVhbi4KLSAqCi0gKiBOb3RlOiBhbnkg bm9uemVybyB2YWx1ZSB3aWxsIGJlIGNvbnNpZGVyZWQgdHJ1ZS4KLSAqLwotc3RhdGljIGlu bGluZSBEYXR1bQotQm9vbEdldERhdHVtKGJvb2wgWCkKLXsKLQlyZXR1cm4gKERhdHVtKSAo WCA/IDEgOiAwKTsKLX0KLQotLyoKLSAqIERhdHVtR2V0Q2hhcgotICoJCVJldHVybnMgY2hh cmFjdGVyIHZhbHVlIG9mIGEgZGF0dW0uCi0gKi8KLXN0YXRpYyBpbmxpbmUgY2hhcgotRGF0 dW1HZXRDaGFyKERhdHVtIFgpCi17Ci0JcmV0dXJuIChjaGFyKSBYOwotfQotCi0vKgotICog Q2hhckdldERhdHVtCi0gKgkJUmV0dXJucyBkYXR1bSByZXByZXNlbnRhdGlvbiBmb3IgYSBj aGFyYWN0ZXIuCi0gKi8KLXN0YXRpYyBpbmxpbmUgRGF0dW0KLUNoYXJHZXREYXR1bShjaGFy IFgpCi17Ci0JcmV0dXJuIChEYXR1bSkgWDsKLX0KLQotLyoKLSAqIEludDhHZXREYXR1bQot ICoJCVJldHVybnMgZGF0dW0gcmVwcmVzZW50YXRpb24gZm9yIGFuIDgtYml0IGludGVnZXIu Ci0gKi8KLXN0YXRpYyBpbmxpbmUgRGF0dW0KLUludDhHZXREYXR1bShpbnQ4IFgpCi17Ci0J cmV0dXJuIChEYXR1bSkgWDsKLX0KLQotLyoKLSAqIERhdHVtR2V0VUludDgKLSAqCQlSZXR1 cm5zIDgtYml0IHVuc2lnbmVkIGludGVnZXIgdmFsdWUgb2YgYSBkYXR1bS4KLSAqLwotc3Rh dGljIGlubGluZSB1aW50OAotRGF0dW1HZXRVSW50OChEYXR1bSBYKQotewotCXJldHVybiAo dWludDgpIFg7Ci19Ci0KLS8qCi0gKiBVSW50OEdldERhdHVtCi0gKgkJUmV0dXJucyBkYXR1 bSByZXByZXNlbnRhdGlvbiBmb3IgYW4gOC1iaXQgdW5zaWduZWQgaW50ZWdlci4KLSAqLwot c3RhdGljIGlubGluZSBEYXR1bQotVUludDhHZXREYXR1bSh1aW50OCBYKQotewotCXJldHVy biAoRGF0dW0pIFg7Ci19Ci0KLS8qCi0gKiBEYXR1bUdldEludDE2Ci0gKgkJUmV0dXJucyAx Ni1iaXQgaW50ZWdlciB2YWx1ZSBvZiBhIGRhdHVtLgotICovCi1zdGF0aWMgaW5saW5lIGlu dDE2Ci1EYXR1bUdldEludDE2KERhdHVtIFgpCi17Ci0JcmV0dXJuIChpbnQxNikgWDsKLX0K LQotLyoKLSAqIEludDE2R2V0RGF0dW0KLSAqCQlSZXR1cm5zIGRhdHVtIHJlcHJlc2VudGF0 aW9uIGZvciBhIDE2LWJpdCBpbnRlZ2VyLgotICovCi1zdGF0aWMgaW5saW5lIERhdHVtCi1J bnQxNkdldERhdHVtKGludDE2IFgpCi17Ci0JcmV0dXJuIChEYXR1bSkgWDsKLX0KLQotLyoK LSAqIERhdHVtR2V0VUludDE2Ci0gKgkJUmV0dXJucyAxNi1iaXQgdW5zaWduZWQgaW50ZWdl ciB2YWx1ZSBvZiBhIGRhdHVtLgotICovCi1zdGF0aWMgaW5saW5lIHVpbnQxNgotRGF0dW1H ZXRVSW50MTYoRGF0dW0gWCkKLXsKLQlyZXR1cm4gKHVpbnQxNikgWDsKLX0KLQotLyoKLSAq IFVJbnQxNkdldERhdHVtCi0gKgkJUmV0dXJucyBkYXR1bSByZXByZXNlbnRhdGlvbiBmb3Ig YSAxNi1iaXQgdW5zaWduZWQgaW50ZWdlci4KLSAqLwotc3RhdGljIGlubGluZSBEYXR1bQot VUludDE2R2V0RGF0dW0odWludDE2IFgpCi17Ci0JcmV0dXJuIChEYXR1bSkgWDsKLX0KLQot LyoKLSAqIERhdHVtR2V0SW50MzIKLSAqCQlSZXR1cm5zIDMyLWJpdCBpbnRlZ2VyIHZhbHVl IG9mIGEgZGF0dW0uCi0gKi8KLXN0YXRpYyBpbmxpbmUgaW50MzIKLURhdHVtR2V0SW50MzIo RGF0dW0gWCkKLXsKLQlyZXR1cm4gKGludDMyKSBYOwotfQotCi0vKgotICogSW50MzJHZXRE YXR1bQotICoJCVJldHVybnMgZGF0dW0gcmVwcmVzZW50YXRpb24gZm9yIGEgMzItYml0IGlu dGVnZXIuCi0gKi8KLXN0YXRpYyBpbmxpbmUgRGF0dW0KLUludDMyR2V0RGF0dW0oaW50MzIg WCkKLXsKLQlyZXR1cm4gKERhdHVtKSBYOwotfQotCi0vKgotICogRGF0dW1HZXRVSW50MzIK LSAqCQlSZXR1cm5zIDMyLWJpdCB1bnNpZ25lZCBpbnRlZ2VyIHZhbHVlIG9mIGEgZGF0dW0u Ci0gKi8KLXN0YXRpYyBpbmxpbmUgdWludDMyCi1EYXR1bUdldFVJbnQzMihEYXR1bSBYKQot ewotCXJldHVybiAodWludDMyKSBYOwotfQotCi0vKgotICogVUludDMyR2V0RGF0dW0KLSAq CQlSZXR1cm5zIGRhdHVtIHJlcHJlc2VudGF0aW9uIGZvciBhIDMyLWJpdCB1bnNpZ25lZCBp bnRlZ2VyLgotICovCi1zdGF0aWMgaW5saW5lIERhdHVtCi1VSW50MzJHZXREYXR1bSh1aW50 MzIgWCkKLXsKLQlyZXR1cm4gKERhdHVtKSBYOwotfQotCi0vKgotICogRGF0dW1HZXRPYmpl Y3RJZAotICoJCVJldHVybnMgb2JqZWN0IGlkZW50aWZpZXIgdmFsdWUgb2YgYSBkYXR1bS4K LSAqLwotc3RhdGljIGlubGluZSBPaWQKLURhdHVtR2V0T2JqZWN0SWQoRGF0dW0gWCkKLXsK LQlyZXR1cm4gKE9pZCkgWDsKLX0KLQotLyoKLSAqIE9iamVjdElkR2V0RGF0dW0KLSAqCQlS ZXR1cm5zIGRhdHVtIHJlcHJlc2VudGF0aW9uIGZvciBhbiBvYmplY3QgaWRlbnRpZmllci4K LSAqLwotc3RhdGljIGlubGluZSBEYXR1bQotT2JqZWN0SWRHZXREYXR1bShPaWQgWCkKLXsK LQlyZXR1cm4gKERhdHVtKSBYOwotfQotCi0vKgotICogRGF0dW1HZXRUcmFuc2FjdGlvbklk Ci0gKgkJUmV0dXJucyB0cmFuc2FjdGlvbiBpZGVudGlmaWVyIHZhbHVlIG9mIGEgZGF0dW0u Ci0gKi8KLXN0YXRpYyBpbmxpbmUgVHJhbnNhY3Rpb25JZAotRGF0dW1HZXRUcmFuc2FjdGlv bklkKERhdHVtIFgpCi17Ci0JcmV0dXJuIChUcmFuc2FjdGlvbklkKSBYOwotfQotCi0vKgot ICogVHJhbnNhY3Rpb25JZEdldERhdHVtCi0gKgkJUmV0dXJucyBkYXR1bSByZXByZXNlbnRh dGlvbiBmb3IgYSB0cmFuc2FjdGlvbiBpZGVudGlmaWVyLgotICovCi1zdGF0aWMgaW5saW5l IERhdHVtCi1UcmFuc2FjdGlvbklkR2V0RGF0dW0oVHJhbnNhY3Rpb25JZCBYKQotewotCXJl dHVybiAoRGF0dW0pIFg7Ci19Ci0KLS8qCi0gKiBNdWx0aVhhY3RJZEdldERhdHVtCi0gKgkJ UmV0dXJucyBkYXR1bSByZXByZXNlbnRhdGlvbiBmb3IgYSBtdWx0aXhhY3QgaWRlbnRpZmll ci4KLSAqLwotc3RhdGljIGlubGluZSBEYXR1bQotTXVsdGlYYWN0SWRHZXREYXR1bShNdWx0 aVhhY3RJZCBYKQotewotCXJldHVybiAoRGF0dW0pIFg7Ci19Ci0KLS8qCi0gKiBEYXR1bUdl dENvbW1hbmRJZAotICoJCVJldHVybnMgY29tbWFuZCBpZGVudGlmaWVyIHZhbHVlIG9mIGEg ZGF0dW0uCi0gKi8KLXN0YXRpYyBpbmxpbmUgQ29tbWFuZElkCi1EYXR1bUdldENvbW1hbmRJ ZChEYXR1bSBYKQotewotCXJldHVybiAoQ29tbWFuZElkKSBYOwotfQotCi0vKgotICogQ29t bWFuZElkR2V0RGF0dW0KLSAqCQlSZXR1cm5zIGRhdHVtIHJlcHJlc2VudGF0aW9uIGZvciBh IGNvbW1hbmQgaWRlbnRpZmllci4KLSAqLwotc3RhdGljIGlubGluZSBEYXR1bQotQ29tbWFu ZElkR2V0RGF0dW0oQ29tbWFuZElkIFgpCi17Ci0JcmV0dXJuIChEYXR1bSkgWDsKLX0KLQot LyoKLSAqIERhdHVtR2V0UG9pbnRlcgotICoJCVJldHVybnMgcG9pbnRlciB2YWx1ZSBvZiBh IGRhdHVtLgotICovCi1zdGF0aWMgaW5saW5lIFBvaW50ZXIKLURhdHVtR2V0UG9pbnRlcihE YXR1bSBYKQotewotCXJldHVybiAoUG9pbnRlcikgWDsKLX0KLQotLyoKLSAqIFBvaW50ZXJH ZXREYXR1bQotICoJCVJldHVybnMgZGF0dW0gcmVwcmVzZW50YXRpb24gZm9yIGEgcG9pbnRl ci4KLSAqLwotc3RhdGljIGlubGluZSBEYXR1bQotUG9pbnRlckdldERhdHVtKGNvbnN0IHZv aWQgKlgpCi17Ci0JcmV0dXJuIChEYXR1bSkgWDsKLX0KLQotLyoKLSAqIERhdHVtR2V0Q1N0 cmluZwotICoJCVJldHVybnMgQyBzdHJpbmcgKG51bGwtdGVybWluYXRlZCBzdHJpbmcpIHZh bHVlIG9mIGEgZGF0dW0uCi0gKgotICogTm90ZTogQyBzdHJpbmcgaXMgbm90IGEgZnVsbC1m bGVkZ2VkIFBvc3RncmVzIHR5cGUgYXQgcHJlc2VudCwKLSAqIGJ1dCB0eXBlIGlucHV0IGZ1 bmN0aW9ucyB1c2UgdGhpcyBjb252ZXJzaW9uIGZvciB0aGVpciBpbnB1dHMuCi0gKi8KLXN0 YXRpYyBpbmxpbmUgY2hhciAqCi1EYXR1bUdldENTdHJpbmcoRGF0dW0gWCkKLXsKLQlyZXR1 cm4gKGNoYXIgKikgRGF0dW1HZXRQb2ludGVyKFgpOwotfQotCi0vKgotICogQ1N0cmluZ0dl dERhdHVtCi0gKgkJUmV0dXJucyBkYXR1bSByZXByZXNlbnRhdGlvbiBmb3IgYSBDIHN0cmlu ZyAobnVsbC10ZXJtaW5hdGVkIHN0cmluZykuCi0gKgotICogTm90ZTogQyBzdHJpbmcgaXMg bm90IGEgZnVsbC1mbGVkZ2VkIFBvc3RncmVzIHR5cGUgYXQgcHJlc2VudCwKLSAqIGJ1dCB0 eXBlIG91dHB1dCBmdW5jdGlvbnMgdXNlIHRoaXMgY29udmVyc2lvbiBmb3IgdGhlaXIgb3V0 cHV0cy4KLSAqIE5vdGU6IENTdHJpbmcgaXMgcGFzcy1ieS1yZWZlcmVuY2U7IGNhbGxlciBt dXN0IGVuc3VyZSB0aGUgcG9pbnRlZC10bwotICogdmFsdWUgaGFzIGFkZXF1YXRlIGxpZmV0 aW1lLgotICovCi1zdGF0aWMgaW5saW5lIERhdHVtCi1DU3RyaW5nR2V0RGF0dW0oY29uc3Qg Y2hhciAqWCkKLXsKLQlyZXR1cm4gUG9pbnRlckdldERhdHVtKFgpOwotfQotCi0vKgotICog RGF0dW1HZXROYW1lCi0gKgkJUmV0dXJucyBuYW1lIHZhbHVlIG9mIGEgZGF0dW0uCi0gKi8K LXN0YXRpYyBpbmxpbmUgTmFtZQotRGF0dW1HZXROYW1lKERhdHVtIFgpCi17Ci0JcmV0dXJu IChOYW1lKSBEYXR1bUdldFBvaW50ZXIoWCk7Ci19Ci0KLS8qCi0gKiBOYW1lR2V0RGF0dW0K LSAqCQlSZXR1cm5zIGRhdHVtIHJlcHJlc2VudGF0aW9uIGZvciBhIG5hbWUuCi0gKgotICog Tm90ZTogTmFtZSBpcyBwYXNzLWJ5LXJlZmVyZW5jZTsgY2FsbGVyIG11c3QgZW5zdXJlIHRo ZSBwb2ludGVkLXRvCi0gKiB2YWx1ZSBoYXMgYWRlcXVhdGUgbGlmZXRpbWUuCi0gKi8KLXN0 YXRpYyBpbmxpbmUgRGF0dW0KLU5hbWVHZXREYXR1bShjb25zdCBOYW1lRGF0YSAqWCkKLXsK LQlyZXR1cm4gQ1N0cmluZ0dldERhdHVtKE5hbWVTdHIoKlgpKTsKLX0KLQotLyoKLSAqIERh dHVtR2V0SW50NjQKLSAqCQlSZXR1cm5zIDY0LWJpdCBpbnRlZ2VyIHZhbHVlIG9mIGEgZGF0 dW0uCi0gKgotICogTm90ZTogdGhpcyBmdW5jdGlvbiBoaWRlcyB3aGV0aGVyIGludDY0IGlz IHBhc3MgYnkgdmFsdWUgb3IgYnkgcmVmZXJlbmNlLgotICovCi1zdGF0aWMgaW5saW5lIGlu dDY0Ci1EYXR1bUdldEludDY0KERhdHVtIFgpCi17Ci0jaWZkZWYgVVNFX0ZMT0FUOF9CWVZB TAotCXJldHVybiAoaW50NjQpIFg7Ci0jZWxzZQotCXJldHVybiAqKChpbnQ2NCAqKSBEYXR1 bUdldFBvaW50ZXIoWCkpOwogI2VuZGlmCi19Ci0KLS8qCi0gKiBJbnQ2NEdldERhdHVtCi0g KgkJUmV0dXJucyBkYXR1bSByZXByZXNlbnRhdGlvbiBmb3IgYSA2NC1iaXQgaW50ZWdlci4K LSAqCi0gKiBOb3RlOiBpZiBpbnQ2NCBpcyBwYXNzIGJ5IHJlZmVyZW5jZSwgdGhpcyBmdW5j dGlvbiByZXR1cm5zIGEgcmVmZXJlbmNlCi0gKiB0byBwYWxsb2MnZCBzcGFjZS4KLSAqLwot I2lmZGVmIFVTRV9GTE9BVDhfQllWQUwKLXN0YXRpYyBpbmxpbmUgRGF0dW0KLUludDY0R2V0 RGF0dW0oaW50NjQgWCkKLXsKLQlyZXR1cm4gKERhdHVtKSBYOwotfQotI2Vsc2UKLWV4dGVy biBEYXR1bSBJbnQ2NEdldERhdHVtKGludDY0IFgpOwotI2VuZGlmCi0KLQotLyoKLSAqIERh dHVtR2V0VUludDY0Ci0gKgkJUmV0dXJucyA2NC1iaXQgdW5zaWduZWQgaW50ZWdlciB2YWx1 ZSBvZiBhIGRhdHVtLgotICoKLSAqIE5vdGU6IHRoaXMgZnVuY3Rpb24gaGlkZXMgd2hldGhl ciBpbnQ2NCBpcyBwYXNzIGJ5IHZhbHVlIG9yIGJ5IHJlZmVyZW5jZS4KLSAqLwotc3RhdGlj IGlubGluZSB1aW50NjQKLURhdHVtR2V0VUludDY0KERhdHVtIFgpCi17Ci0jaWZkZWYgVVNF X0ZMT0FUOF9CWVZBTAotCXJldHVybiAodWludDY0KSBYOwotI2Vsc2UKLQlyZXR1cm4gKigo dWludDY0ICopIERhdHVtR2V0UG9pbnRlcihYKSk7Ci0jZW5kaWYKLX0KLQotLyoKLSAqIFVJ bnQ2NEdldERhdHVtCi0gKgkJUmV0dXJucyBkYXR1bSByZXByZXNlbnRhdGlvbiBmb3IgYSA2 NC1iaXQgdW5zaWduZWQgaW50ZWdlci4KLSAqCi0gKiBOb3RlOiBpZiBpbnQ2NCBpcyBwYXNz IGJ5IHJlZmVyZW5jZSwgdGhpcyBmdW5jdGlvbiByZXR1cm5zIGEgcmVmZXJlbmNlCi0gKiB0 byBwYWxsb2MnZCBzcGFjZS4KLSAqLwotc3RhdGljIGlubGluZSBEYXR1bQotVUludDY0R2V0 RGF0dW0odWludDY0IFgpCi17Ci0jaWZkZWYgVVNFX0ZMT0FUOF9CWVZBTAotCXJldHVybiAo RGF0dW0pIFg7Ci0jZWxzZQotCXJldHVybiBJbnQ2NEdldERhdHVtKChpbnQ2NCkgWCk7Ci0j ZW5kaWYKLX0KLQotLyoKLSAqIEZsb2F0IDwtPiBEYXR1bSBjb252ZXJzaW9ucwotICoKLSAq IFRoZXNlIGhhdmUgdG8gYmUgaW1wbGVtZW50ZWQgYXMgaW5saW5lIGZ1bmN0aW9ucyByYXRo ZXIgdGhhbiBtYWNyb3MsIHdoZW4KLSAqIHBhc3NpbmcgYnkgdmFsdWUsIGJlY2F1c2UgbWFu eSBtYWNoaW5lcyBwYXNzIGludCBhbmQgZmxvYXQgZnVuY3Rpb24KLSAqIHBhcmFtZXRlcnMv cmVzdWx0cyBkaWZmZXJlbnRseTsgc28gd2UgbmVlZCB0byBwbGF5IHdlaXJkIGdhbWVzIHdp dGggdW5pb25zLgotICovCi0KLS8qCi0gKiBEYXR1bUdldEZsb2F0NAotICoJCVJldHVybnMg NC1ieXRlIGZsb2F0aW5nIHBvaW50IHZhbHVlIG9mIGEgZGF0dW0uCi0gKi8KLXN0YXRpYyBp bmxpbmUgZmxvYXQ0Ci1EYXR1bUdldEZsb2F0NChEYXR1bSBYKQotewotCXVuaW9uCi0Jewot CQlpbnQzMgkJdmFsdWU7Ci0JCWZsb2F0NAkJcmV0dmFsOwotCX0JCQlteXVuaW9uOwotCi0J bXl1bmlvbi52YWx1ZSA9IERhdHVtR2V0SW50MzIoWCk7Ci0JcmV0dXJuIG15dW5pb24ucmV0 dmFsOwotfQotCi0vKgotICogRmxvYXQ0R2V0RGF0dW0KLSAqCQlSZXR1cm5zIGRhdHVtIHJl cHJlc2VudGF0aW9uIGZvciBhIDQtYnl0ZSBmbG9hdGluZyBwb2ludCBudW1iZXIuCi0gKi8K LXN0YXRpYyBpbmxpbmUgRGF0dW0KLUZsb2F0NEdldERhdHVtKGZsb2F0NCBYKQotewotCXVu aW9uCi0JewotCQlmbG9hdDQJCXZhbHVlOwotCQlpbnQzMgkJcmV0dmFsOwotCX0JCQlteXVu aW9uOwotCi0JbXl1bmlvbi52YWx1ZSA9IFg7Ci0JcmV0dXJuIEludDMyR2V0RGF0dW0obXl1 bmlvbi5yZXR2YWwpOwotfQotCi0vKgotICogRGF0dW1HZXRGbG9hdDgKLSAqCQlSZXR1cm5z IDgtYnl0ZSBmbG9hdGluZyBwb2ludCB2YWx1ZSBvZiBhIGRhdHVtLgotICoKLSAqIE5vdGU6 IHRoaXMgZnVuY3Rpb24gaGlkZXMgd2hldGhlciBmbG9hdDggaXMgcGFzcyBieSB2YWx1ZSBv ciBieSByZWZlcmVuY2UuCi0gKi8KLXN0YXRpYyBpbmxpbmUgZmxvYXQ4Ci1EYXR1bUdldEZs b2F0OChEYXR1bSBYKQotewotI2lmZGVmIFVTRV9GTE9BVDhfQllWQUwKLQl1bmlvbgotCXsK LQkJaW50NjQJCXZhbHVlOwotCQlmbG9hdDgJCXJldHZhbDsKLQl9CQkJbXl1bmlvbjsKLQot CW15dW5pb24udmFsdWUgPSBEYXR1bUdldEludDY0KFgpOwotCXJldHVybiBteXVuaW9uLnJl dHZhbDsKLSNlbHNlCi0JcmV0dXJuICooKGZsb2F0OCAqKSBEYXR1bUdldFBvaW50ZXIoWCkp OwotI2VuZGlmCi19Ci0KLS8qCi0gKiBGbG9hdDhHZXREYXR1bQotICoJCVJldHVybnMgZGF0 dW0gcmVwcmVzZW50YXRpb24gZm9yIGFuIDgtYnl0ZSBmbG9hdGluZyBwb2ludCBudW1iZXIu Ci0gKgotICogTm90ZTogaWYgZmxvYXQ4IGlzIHBhc3MgYnkgcmVmZXJlbmNlLCB0aGlzIGZ1 bmN0aW9uIHJldHVybnMgYSByZWZlcmVuY2UKLSAqIHRvIHBhbGxvYydkIHNwYWNlLgotICov Ci0jaWZkZWYgVVNFX0ZMT0FUOF9CWVZBTAotc3RhdGljIGlubGluZSBEYXR1bQotRmxvYXQ4 R2V0RGF0dW0oZmxvYXQ4IFgpCi17Ci0JdW5pb24KLQl7Ci0JCWZsb2F0OAkJdmFsdWU7Ci0J CWludDY0CQlyZXR2YWw7Ci0JfQkJCW15dW5pb247Ci0KLQlteXVuaW9uLnZhbHVlID0gWDsK LQlyZXR1cm4gSW50NjRHZXREYXR1bShteXVuaW9uLnJldHZhbCk7Ci19Ci0jZWxzZQotZXh0 ZXJuIERhdHVtIEZsb2F0OEdldERhdHVtKGZsb2F0OCBYKTsKLSNlbmRpZgotCi0KLS8qCi0g KiBJbnQ2NEdldERhdHVtRmFzdAotICogRmxvYXQ4R2V0RGF0dW1GYXN0Ci0gKgotICogVGhl c2UgbWFjcm9zIGFyZSBpbnRlbmRlZCB0byBhbGxvdyB3cml0aW5nIGNvZGUgdGhhdCBkb2Vz IG5vdCBkZXBlbmQgb24KLSAqIHdoZXRoZXIgaW50NjQgYW5kIGZsb2F0OCBhcmUgcGFzcy1i eS1yZWZlcmVuY2UgdHlwZXMsIHdoaWxlIG5vdAotICogc2FjcmlmaWNpbmcgcGVyZm9ybWFu Y2Ugd2hlbiB0aGV5IGFyZS4gIFRoZSBhcmd1bWVudCBtdXN0IGJlIGEgdmFyaWFibGUKLSAq IHRoYXQgd2lsbCBleGlzdCBhbmQgaGF2ZSB0aGUgc2FtZSB2YWx1ZSBmb3IgYXMgbG9uZyBh cyB0aGUgRGF0dW0gaXMgbmVlZGVkLgotICogSW4gdGhlIHBhc3MtYnktcmVmIGNhc2UsIHRo ZSBhZGRyZXNzIG9mIHRoZSB2YXJpYWJsZSBpcyB0YWtlbiB0byB1c2UgYXMKLSAqIHRoZSBE YXR1bS4gIEluIHRoZSBwYXNzLWJ5LXZhbCBjYXNlLCB0aGVzZSBhcmUgdGhlIHNhbWUgYXMg dGhlIG5vbi1GYXN0Ci0gKiBmdW5jdGlvbnMsIGV4Y2VwdCBmb3IgYXNzZXJ0aW5nIHRoYXQg dGhlIHZhcmlhYmxlIGlzIG9mIHRoZSBjb3JyZWN0IHR5cGUuCi0gKi8KLQotI2lmZGVmIFVT RV9GTE9BVDhfQllWQUwKLSNkZWZpbmUgSW50NjRHZXREYXR1bUZhc3QoWCkgXAotCShBc3Nl cnRWYXJpYWJsZUlzT2ZUeXBlTWFjcm8oWCwgaW50NjQpLCBJbnQ2NEdldERhdHVtKFgpKQot I2RlZmluZSBGbG9hdDhHZXREYXR1bUZhc3QoWCkgXAotCShBc3NlcnRWYXJpYWJsZUlzT2ZU eXBlTWFjcm8oWCwgZG91YmxlKSwgRmxvYXQ4R2V0RGF0dW0oWCkpCi0jZWxzZQotI2RlZmlu ZSBJbnQ2NEdldERhdHVtRmFzdChYKSBcCi0JKEFzc2VydFZhcmlhYmxlSXNPZlR5cGVNYWNy byhYLCBpbnQ2NCksIFBvaW50ZXJHZXREYXR1bSgmKFgpKSkKLSNkZWZpbmUgRmxvYXQ4R2V0 RGF0dW1GYXN0KFgpIFwKLQkoQXNzZXJ0VmFyaWFibGVJc09mVHlwZU1hY3JvKFgsIGRvdWJs ZSksIFBvaW50ZXJHZXREYXR1bSgmKFgpKSkKLSNlbmRpZgotCi0KLS8qIC0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K LSAqCQkJCVNlY3Rpb24gMzoJbWlzY2VsbGFuZW91cwotICogLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICovCi0K LS8qCi0gKiBOT05fRVhFQ19TVEFUSUM6IEl0J3Mgc29tZXRpbWVzIHVzZWZ1bCB0byBkZWZp bmUgYSB2YXJpYWJsZSBvciBmdW5jdGlvbgotICogdGhhdCBpcyBub3JtYWxseSBzdGF0aWMg YnV0IGV4dGVybiB3aGVuIHVzaW5nIEVYRUNfQkFDS0VORCAoc2VlCi0gKiBwZ19jb25maWdf bWFudWFsLmgpLiAgVGhlcmUgd291bGQgdGhlbiB0eXBpY2FsbHkgYmUgc29tZSBjb2RlIGlu Ci0gKiBwb3N0bWFzdGVyLmMgdGhhdCB1c2VzIHRob3NlIGV4dGVybiBzeW1ib2xzIHRvIHRy YW5zZmVyIHN0YXRlIGJldHdlZW4KLSAqIHByb2Nlc3NlcyBvciBkbyB3aGF0ZXZlciBvdGhl ciB0aGluZ3MgaXQgbmVlZHMgdG8gZG8gaW4gRVhFQ19CQUNLRU5EIG1vZGUuCi0gKi8KLSNp ZmRlZiBFWEVDX0JBQ0tFTkQKLSNkZWZpbmUgTk9OX0VYRUNfU1RBVElDCi0jZWxzZQotI2Rl ZmluZSBOT05fRVhFQ19TVEFUSUMgc3RhdGljCi0jZW5kaWYKLQotI2VuZGlmCQkJCQkJCS8q IFBPU1RHUkVTX0ggKi8KCmJhc2UtY29tbWl0OiBhZGI1YzMyZWI1M2UxZmZkYzVjOTU0YWFm Y2M1YmM5ZWQ5M2YzZGU2Ci0tIAoyLjM5LjAKCg== --------------IVwCamKn0Q7X4nUI36aiGazr--