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 1tptkb-00Duks-Ei for pgsql-hackers@arkaria.postgresql.org; Wed, 05 Mar 2025 18:45:49 +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 1tptkZ-001rxu-Ju for pgsql-hackers@arkaria.postgresql.org; Wed, 05 Mar 2025 18:45:47 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1tptkY-001rxl-To for pgsql-hackers@lists.postgresql.org; Wed, 05 Mar 2025 18:45:47 +0000 Received: from mail-lj1-x22f.google.com ([2a00:1450:4864:20::22f]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.96) (envelope-from ) id 1tptkW-0019gB-1w for pgsql-hackers@postgresql.org; Wed, 05 Mar 2025 18:45:46 +0000 Received: by mail-lj1-x22f.google.com with SMTP id 38308e7fff4ca-30761be8fa8so77256401fa.2 for ; Wed, 05 Mar 2025 10:45:44 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1741200343; x=1741805143; darn=postgresql.org; h=to:subject:message-id:date:from:mime-version:from:to:cc:subject :date:message-id:reply-to; bh=PWZYDSKPHgXM3sTvnLeNSD4UeYvxFsvlPg2AqlHxM1I=; b=ENOpgiaETmiZ4l3WRAp2NJX4Zuy/nGQB+wssJmJ95HPatX+5MZg7ABeJ7zPUIWIcWY U8OWS7Yj5x23QjfCpsL4T6VUtLafbpPjUir1LMLXVj4m1zHU6LRtFGhlsPwo4UO4mr+4 9u0PU/uA2uKqVKi2qwGrVcSSqaV09VORqweb+eYW2zuKJC6clPhWiODk0z5Fx6Sduot9 Uw5MVZRyKRQf+ZlBH9GMaQ/dgm/X6T0SDa8ze2rHCPgLd4S3yi76jY3DR6khzOXePWgH x8MWBhESqmQ53egmaoGX0I0uSW0aXF5jy7Xe95rWYYxlgo3ujed3QrF6KOYtrrk4z2J/ RH0g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1741200343; x=1741805143; h=to:subject:message-id:date:from:mime-version:x-gm-message-state :from:to:cc:subject:date:message-id:reply-to; bh=PWZYDSKPHgXM3sTvnLeNSD4UeYvxFsvlPg2AqlHxM1I=; b=Ffkq5u05wG4VhlOKPXs1CeDpBpH/KBIRiiyg4PCfSEr2UpoXykU2ed1+g3T5T3c0MU TuSIWqGcZT6Ww/BUR1t9IcUN+dI1Ohp6tyy0lHjJIYOZNrKfEKZ7zdYN24bU+P4mW5sN 4+jQEqIlzNMFoVFbe9cmX1hoUDWYmVXQOPgom5X2yXOzt4KuasmAmhk03K924JnwGt8a e1pqXCfp1abnMz1fgXJHCK1fxEhInsjCIc66KFqwR/JXd/EDiZozkpkOL6VntIeYDuhV wwwB9eLsGo6HiJaPgDV4VzJ8nxUcrBxhLHv0Lrln9XzAxhyYvxXTQpgZ3S06sKn65wBh gE6g== X-Gm-Message-State: AOJu0YxFjl+tFEwGY6bSY4dbPdRQvtAZwp5au3+5IgEjeKfqnxz/LmuX +q+buRvS5SmLspuUtyu4cq7soPwZIPwtWyxldaTVi2N7+IUQ9HN9e7sbJDb3ENlC3QBQyFYDmO2 yEERCj0qE5AL0WmNlXVpUqZKte3v6bXuaouQ= X-Gm-Gg: ASbGnctl6LzlRF30La/kRTUqbufTWRV/USjwK8ERO1UT/Bo8p3sMyOPATO8UHZT4Iqb 8yxzRBMwiQ/+oGHxXuZCSOvpQJPFAiUC3Hl/aS/Exq2Rsr3CA2hpSJu192A1LE2kNgnMp98hUqB 71NzRzMmock2jKiJYtMP/mwFif X-Google-Smtp-Source: AGHT+IFpUKy7JmZlrSZTJid/jqXe0Q9GP4CpMMYLua4eYeZnH9vXEht75C6z8AbraOoBBmspl1ZPVaIA/KPUC4W28Ac= X-Received: by 2002:a2e:700c:0:b0:307:e498:1254 with SMTP id 38308e7fff4ca-30bd7b1587cmr15626981fa.35.1741200342588; Wed, 05 Mar 2025 10:45:42 -0800 (PST) MIME-Version: 1.0 From: Sami Imseih Date: Wed, 5 Mar 2025 12:45:30 -0600 X-Gm-Features: AQ5f1JoyhJLgsEG6JTrpTakrI3IVBNLIrTvq3fJbGh9opfKuxisqoF6yJiSuA4M Message-ID: Subject: track generic and custom plans in pg_stat_statements To: pgsql-hackers Content-Type: multipart/mixed; boundary="000000000000e73b2f062f9ccb8f" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000e73b2f062f9ccb8f Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Hi, Currently, there is little visibility for queries that are being executed using generic or custom plans. There is pg_prepared_statements which show generic_plans and custom_plans as of d05b172a760, but this information is backend local and not very useful to a DBA that wishes to track this information cumulatively and over time. [0] had intentions to add these counters to pg_stat_statements, but was withdrawn due to timing with the commitfest at the time [0] and never picked back up agai= n. I think it's useful to add these counters. Therefore, the attached patch adds two new columns to pg_stat_statements: "generic_plan_calls" and "custom_plan_calls". These columns track the number of executions performed using a generic or custom plan. Only non-utility statements are counted, as utility statements with an optimizable parameterized query (i.e. CTAS) cannot be called with PREPARE. Additionally, when such statements are repeatedly executed using an extende= d protocol prepared statement, pg_stat_statements may not handle them properl= y, since queryId is set to 0 during pgss_ProcessUtility. To avoid introducing two additional counters in CachedPlan, the existing boolean is_reusable=E2=80=94which determines whether a generic plan is reus= ed to manage lock requirements=E2=80=94has been repurposed as an enum. This enum = now tracks different plan states, including "generic reused", "generic first ti= me" and "custom". pg_stat_statements uses these states to differentiate between generic and custom plans for tracking purposes. ( I felt this was better th= an having to carry 2 extra booleans in CachedPlan for this purpose, but that w= ill be the alternative approach ). Not included in this patch and maybe for follow-up work, is this informatio= n can be added to EXPLAIN output and perhaps pg_stat_database. Maybe that's a good idea also? This patch bumps the version pf pg_stat_statements. -- Sami Imseih Amazon Web Services (AWS) [0] https://www.postgresql.org/message-id/add1e591fbe8874107e75d04328859ec%= 40oss.nttdata.com --000000000000e73b2f062f9ccb8f Content-Type: application/octet-stream; name="v1-0001-add-plan_cache-counters-to-pg_stat_statements.patch" Content-Disposition: attachment; filename="v1-0001-add-plan_cache-counters-to-pg_stat_statements.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_m7w9m92k0 RnJvbSA4ZDViZGNhODRiZjNhYWEyZjM0MWFkYTlmMDI0YTY2YTJjNmVkOGZjIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBTYW1pIEltc2VpaCA8c2ltc2VpaEBhbWF6b24uY29tPgpEYXRl OiBUdWUsIDQgTWFyIDIwMjUgMDg6NTQ6NTYgLTA2MDAKU3ViamVjdDogW1BBVENIIHYxIDEvMV0g YWRkIHBsYW5fY2FjaGUgY291bnRlcnMgdG8gcGdfc3RhdF9zdGF0ZW1lbnRzLgoKLS0tCiBjb250 cmliL3BnX3N0YXRfc3RhdGVtZW50cy9NYWtlZmlsZSAgICAgICAgICAgfCAgIDMgKy0KIC4uLi9l eHBlY3RlZC9wbGFuX2NhY2hlLm91dCAgICAgICAgICAgICAgICAgICB8IDUwMCArKysrKysrKysr KysrKysrKysKIGNvbnRyaWIvcGdfc3RhdF9zdGF0ZW1lbnRzL21lc29uLmJ1aWxkICAgICAgICB8 ICAgNCArLQogLi4uL3BnX3N0YXRfc3RhdGVtZW50cy0tMS4xMi0tMS4xMy5zcWwgICAgICAgIHwg IDc4ICsrKwogLi4uL3BnX3N0YXRfc3RhdGVtZW50cy9wZ19zdGF0X3N0YXRlbWVudHMuYyAgIHwg IDUxICstCiAuLi4vcGdfc3RhdF9zdGF0ZW1lbnRzLmNvbnRyb2wgICAgICAgICAgICAgICAgfCAg IDIgKy0KIGNvbnRyaWIvcGdfc3RhdF9zdGF0ZW1lbnRzL3NxbC9wbGFuX2NhY2hlLnNxbCB8IDE1 NSArKysrKysKIGRvYy9zcmMvc2dtbC9wZ3N0YXRzdGF0ZW1lbnRzLnNnbWwgICAgICAgICAgICB8 ICAxOCArCiBzcmMvYmFja2VuZC91dGlscy9jYWNoZS9wbGFuY2FjaGUuYyAgICAgICAgICAgfCAg MTAgKy0KIHNyYy9pbmNsdWRlL3V0aWxzL3BsYW5jYWNoZS5oICAgICAgICAgICAgICAgICB8ICAx MiArLQogMTAgZmlsZXMgY2hhbmdlZCwgODE4IGluc2VydGlvbnMoKyksIDE1IGRlbGV0aW9ucygt KQogY3JlYXRlIG1vZGUgMTAwNjQ0IGNvbnRyaWIvcGdfc3RhdF9zdGF0ZW1lbnRzL2V4cGVjdGVk L3BsYW5fY2FjaGUub3V0CiBjcmVhdGUgbW9kZSAxMDA2NDQgY29udHJpYi9wZ19zdGF0X3N0YXRl bWVudHMvcGdfc3RhdF9zdGF0ZW1lbnRzLS0xLjEyLS0xLjEzLnNxbAogY3JlYXRlIG1vZGUgMTAw NjQ0IGNvbnRyaWIvcGdfc3RhdF9zdGF0ZW1lbnRzL3NxbC9wbGFuX2NhY2hlLnNxbAoKZGlmZiAt LWdpdCBhL2NvbnRyaWIvcGdfc3RhdF9zdGF0ZW1lbnRzL01ha2VmaWxlIGIvY29udHJpYi9wZ19z dGF0X3N0YXRlbWVudHMvTWFrZWZpbGUKaW5kZXggMjQxYzAyNTg3Yi4uYmI4MTI1NjU0OCAxMDA2 NDQKLS0tIGEvY29udHJpYi9wZ19zdGF0X3N0YXRlbWVudHMvTWFrZWZpbGUKKysrIGIvY29udHJp Yi9wZ19zdGF0X3N0YXRlbWVudHMvTWFrZWZpbGUKQEAgLTcsNiArNyw3IEBAIE9CSlMgPSBcCiAK IEVYVEVOU0lPTiA9IHBnX3N0YXRfc3RhdGVtZW50cwogREFUQSA9IHBnX3N0YXRfc3RhdGVtZW50 cy0tMS40LnNxbCBcCisJcGdfc3RhdF9zdGF0ZW1lbnRzLS0xLjEyLS0xLjEzLnNxbCBcCiAJcGdf c3RhdF9zdGF0ZW1lbnRzLS0xLjExLS0xLjEyLnNxbCBwZ19zdGF0X3N0YXRlbWVudHMtLTEuMTAt LTEuMTEuc3FsIFwKIAlwZ19zdGF0X3N0YXRlbWVudHMtLTEuOS0tMS4xMC5zcWwgcGdfc3RhdF9z dGF0ZW1lbnRzLS0xLjgtLTEuOS5zcWwgXAogCXBnX3N0YXRfc3RhdGVtZW50cy0tMS43LS0xLjgu c3FsIHBnX3N0YXRfc3RhdGVtZW50cy0tMS42LS0xLjcuc3FsIFwKQEAgLTIwLDcgKzIxLDcgQEAg TERGTEFHU19TTCArPSAkKGZpbHRlciAtbG0sICQoTElCUykpCiBSRUdSRVNTX09QVFMgPSAtLXRl bXAtY29uZmlnICQodG9wX3NyY2RpcikvY29udHJpYi9wZ19zdGF0X3N0YXRlbWVudHMvcGdfc3Rh dF9zdGF0ZW1lbnRzLmNvbmYKIFJFR1JFU1MgPSBzZWxlY3QgZG1sIGN1cnNvcnMgdXRpbGl0eSBs ZXZlbF90cmFja2luZyBwbGFubmluZyBcCiAJdXNlcl9hY3Rpdml0eSB3YWwgZW50cnlfdGltZXN0 YW1wIHByaXZpbGVnZXMgZXh0ZW5kZWQgXAotCXBhcmFsbGVsIGNsZWFudXAgb2xkZXh0dmVyc2lv bnMKKwlwYXJhbGxlbCBwbGFuX2NhY2hlIGNsZWFudXAgb2xkZXh0dmVyc2lvbnMKICMgRGlzYWJs ZWQgYmVjYXVzZSB0aGVzZSB0ZXN0cyByZXF1aXJlICJzaGFyZWRfcHJlbG9hZF9saWJyYXJpZXM9 cGdfc3RhdF9zdGF0ZW1lbnRzIiwKICMgd2hpY2ggdHlwaWNhbCBpbnN0YWxsY2hlY2sgdXNlcnMg ZG8gbm90IGhhdmUgKGUuZy4gYnVpbGRmYXJtIGNsaWVudHMpLgogTk9fSU5TVEFMTENIRUNLID0g MQpkaWZmIC0tZ2l0IGEvY29udHJpYi9wZ19zdGF0X3N0YXRlbWVudHMvZXhwZWN0ZWQvcGxhbl9j YWNoZS5vdXQgYi9jb250cmliL3BnX3N0YXRfc3RhdGVtZW50cy9leHBlY3RlZC9wbGFuX2NhY2hl Lm91dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwLi4yNGI2ZTYxNzEwCi0t LSAvZGV2L251bGwKKysrIGIvY29udHJpYi9wZ19zdGF0X3N0YXRlbWVudHMvZXhwZWN0ZWQvcGxh bl9jYWNoZS5vdXQKQEAgLTAsMCArMSw1MDAgQEAKKy0tCistLSBJbmZvcm1hdGlvbiByZWxhdGVk IHRvIHBsYW4gY2FjaGUKKy0tCistLSBzZXR1cCB0ZXN0CitDUkVBVEUgVEFCTEUgcGxhbl9jYWNo ZV90YWIgKHggaW50LCB5IGludCk7CitDUkVBVEUgT1IgUkVQTEFDRSBGVU5DVElPTiBwbGFuX2Nh Y2hlX2Z1bmMoeF9pbiBpbnQpIFJFVFVSTlMgaW50IEFTICQkCisgICAgREVDTEFSRQorICAgICAg ICB5X291dCBpbnQ7CisgICAgQkVHSU4KKyAgICAgICAgc2VsZWN0IHkgaW50byB5X291dCBmcm9t IHBsYW5fY2FjaGVfdGFiIHdoZXJlIHggPSB4X2luOworICAgICAgICByZXR1cm4geV9vdXQ7Cisg ICAgRU5EOworJCQgTEFOR1VBR0UgcGxwZ3NxbDsKK0NSRUFURSBPUiBSRVBMQUNFIFBST0NFRFVS RSBwbGFuX2NhY2hlX3Byb2MoeF9pbiBpbnQpIEFTICQkCisgICAgREVDTEFSRQorICAgICAgICB5 X291dCBpbnQ7CisgICAgQkVHSU4KKyAgICAgICAgc2VsZWN0IHkgaW50byB5X291dCBmcm9tIHBs YW5fY2FjaGVfdGFiIHdoZXJlIHggPSB4X2luOworICAgIEVORDsKKyQkIExBTkdVQUdFIHBscGdz cWw7CistLSBwbGFuIGNhY2hlIGNvdW50ZXJzIGZvciBleHRlbmRlZCBxdWVyeSBwcm90b2NvbCBh bmQgc3FsIHByZXBhcmVkIHN0YXRlbWVudHMKK1NFTEVDVCBwZ19zdGF0X3N0YXRlbWVudHNfcmVz ZXQoKSBJUyBOT1QgTlVMTCBBUyB0OworIHQgCistLS0KKyB0CisoMSByb3cpCisKK3NlbGVjdCB5 IGZyb20gcGxhbl9jYWNoZV90YWIgd2hlcmUgeCA9ICQxIFxwYXJzZSBwMQorXGJpbmRfbmFtZWQg cDEgMQorOworIHkgCistLS0KKygwIHJvd3MpCisKK1xiaW5kX25hbWVkIHAxIDEKKzsKKyB5IAor LS0tCisoMCByb3dzKQorCitcYmluZF9uYW1lZCBwMSAxCis7CisgeSAKKy0tLQorKDAgcm93cykK KworXGJpbmRfbmFtZWQgcDEgMQorOworIHkgCistLS0KKygwIHJvd3MpCisKK1xiaW5kX25hbWVk IHAxIDEKKzsKKyB5IAorLS0tCisoMCByb3dzKQorCitcYmluZF9uYW1lZCBwMSAxCis7CisgeSAK Ky0tLQorKDAgcm93cykKKworU0VMRUNUIGNhbGxzLCBnZW5lcmljX3BsYW5fY2FsbHMsIGN1c3Rv bV9wbGFuX2NhbGxzLCBxdWVyeSBGUk9NIHBnX3N0YXRfc3RhdGVtZW50cyBPUkRFUiBCWSBxdWVy eSBDT0xMQVRFICJDIjsKKyBjYWxscyB8IGdlbmVyaWNfcGxhbl9jYWxscyB8IGN1c3RvbV9wbGFu X2NhbGxzIHwgICAgICAgICAgICAgICAgICAgICAgIHF1ZXJ5ICAgICAgICAgICAgICAgICAgICAg ICAgCistLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0rLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAx IHwgICAgICAgICAgICAgICAgICAwIHwgICAgICAgICAgICAgICAgIDAgfCBTRUxFQ1QgcGdfc3Rh dF9zdGF0ZW1lbnRzX3Jlc2V0KCkgSVMgTk9UIE5VTEwgQVMgdAorICAgICA2IHwgICAgICAgICAg ICAgICAgICAxIHwgICAgICAgICAgICAgICAgIDUgfCBzZWxlY3QgeSBmcm9tIHBsYW5fY2FjaGVf dGFiIHdoZXJlIHggPSAkMQorKDIgcm93cykKKworREVBTExPQ0FURSBwMTsKK1NFTEVDVCBwZ19z dGF0X3N0YXRlbWVudHNfcmVzZXQoKSBJUyBOT1QgTlVMTCBBUyB0OworIHQgCistLS0KKyB0Ciso MSByb3cpCisKK1BSRVBBUkUgUDEoaW50KSBBUyBzZWxlY3QgeSBmcm9tIHBsYW5fY2FjaGVfdGFi IHdoZXJlIHggPSAkMTsKK0VYRUNVVEUgcDEoMSk7CisgeSAKKy0tLQorKDAgcm93cykKKworRVhF Q1VURSBwMSgxKTsKKyB5IAorLS0tCisoMCByb3dzKQorCitFWEVDVVRFIHAxKDEpOworIHkgCist LS0KKygwIHJvd3MpCisKK0VYRUNVVEUgcDEoMSk7CisgeSAKKy0tLQorKDAgcm93cykKKworRVhF Q1VURSBwMSgxKTsKKyB5IAorLS0tCisoMCByb3dzKQorCitFWEVDVVRFIHAxKDEpOworIHkgCist LS0KKygwIHJvd3MpCisKK1NFTEVDVCBjYWxscywgZ2VuZXJpY19wbGFuX2NhbGxzLCBjdXN0b21f cGxhbl9jYWxscywgcXVlcnkgRlJPTSBwZ19zdGF0X3N0YXRlbWVudHMgT1JERVIgQlkgcXVlcnkg Q09MTEFURSAiQyI7CisgY2FsbHMgfCBnZW5lcmljX3BsYW5fY2FsbHMgfCBjdXN0b21fcGxhbl9j YWxscyB8ICAgICAgICAgICAgICAgICAgICAgICBxdWVyeSAgICAgICAgICAgICAgICAgICAgICAg IAorLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgMSB8 ICAgICAgICAgICAgICAgICAgMCB8ICAgICAgICAgICAgICAgICAwIHwgU0VMRUNUIHBnX3N0YXRf c3RhdGVtZW50c19yZXNldCgpIElTIE5PVCBOVUxMIEFTIHQKKyAgICAgNiB8ICAgICAgICAgICAg ICAgICAgMSB8ICAgICAgICAgICAgICAgICA1IHwgc2VsZWN0IHkgZnJvbSBwbGFuX2NhY2hlX3Rh YiB3aGVyZSB4ID0gJDEKKygyIHJvd3MpCisKK0RFQUxMT0NBVEUgcDE7CistLSBwbGFuIGNhY2hl IGNvdW50ZXJzIHdpdGggcGxhbiBpbnZhbGlkYXRpb24uCitTRUxFQ1QgcGdfc3RhdF9zdGF0ZW1l bnRzX3Jlc2V0KCkgSVMgTk9UIE5VTEwgQVMgdDsKKyB0IAorLS0tCisgdAorKDEgcm93KQorCitQ UkVQQVJFIFAxKGludCkgQVMgc2VsZWN0IHkgZnJvbSBwbGFuX2NhY2hlX3RhYiB3aGVyZSB4ID0g JDE7CitFWEVDVVRFIHAxKDEpOworIHkgCistLS0KKygwIHJvd3MpCisKK0VYRUNVVEUgcDEoMSk7 CisgeSAKKy0tLQorKDAgcm93cykKKworRVhFQ1VURSBwMSgxKTsKKyB5IAorLS0tCisoMCByb3dz KQorCitDUkVBVEUgSU5ERVggT04gcGxhbl9jYWNoZV90YWIgKHgpOworRVhFQ1VURSBwMSgxKTsK KyB5IAorLS0tCisoMCByb3dzKQorCitFWEVDVVRFIHAxKDEpOworIHkgCistLS0KKygwIHJvd3Mp CisKK0VYRUNVVEUgcDEoMSk7CisgeSAKKy0tLQorKDAgcm93cykKKworRVhFQ1VURSBwMSgxKTsK KyB5IAorLS0tCisoMCByb3dzKQorCitFWEVDVVRFIHAxKDEpOworIHkgCistLS0KKygwIHJvd3Mp CisKK0VYRUNVVEUgcDEoMSk7CisgeSAKKy0tLQorKDAgcm93cykKKworU0VMRUNUIGNhbGxzLCBn ZW5lcmljX3BsYW5fY2FsbHMsIGN1c3RvbV9wbGFuX2NhbGxzLCBxdWVyeSBGUk9NIHBnX3N0YXRf c3RhdGVtZW50cyBPUkRFUiBCWSBxdWVyeSBDT0xMQVRFICJDIjsKKyBjYWxscyB8IGdlbmVyaWNf cGxhbl9jYWxscyB8IGN1c3RvbV9wbGFuX2NhbGxzIHwgICAgICAgICAgICAgICAgICAgICAgIHF1 ZXJ5ICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0t Ky0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLQorICAgICAxIHwgICAgICAgICAgICAgICAgICAwIHwgICAgICAgICAg ICAgICAgIDAgfCBDUkVBVEUgSU5ERVggT04gcGxhbl9jYWNoZV90YWIgKHgpCisgICAgIDEgfCAg ICAgICAgICAgICAgICAgIDAgfCAgICAgICAgICAgICAgICAgMCB8IFNFTEVDVCBwZ19zdGF0X3N0 YXRlbWVudHNfcmVzZXQoKSBJUyBOT1QgTlVMTCBBUyB0CisgICAgIDkgfCAgICAgICAgICAgICAg ICAgIDQgfCAgICAgICAgICAgICAgICAgNSB8IHNlbGVjdCB5IGZyb20gcGxhbl9jYWNoZV90YWIg d2hlcmUgeCA9ICQxCisoMyByb3dzKQorCitERUFMTE9DQVRFIHAxOworLS0gcGxhbiBjYWNoZSBj b3VudGVycyBmb3IgZnVuY3Rpb25zIGFuZCBwcm9jZWR1cmVzCitTRVQgcGdfc3RhdF9zdGF0ZW1l bnRzLnRyYWNrID0gImFsbCI7CitTRUxFQ1QgcGdfc3RhdF9zdGF0ZW1lbnRzX3Jlc2V0KCkgSVMg Tk9UIE5VTEwgQVMgdDsKKyB0IAorLS0tCisgdAorKDEgcm93KQorCitTRUxFQ1QgcGxhbl9jYWNo ZV9mdW5jKDEpOworIHBsYW5fY2FjaGVfZnVuYyAKKy0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAg ICAgICAgICAgCisoMSByb3cpCisKK1NFTEVDVCBwbGFuX2NhY2hlX2Z1bmMoMSk7CisgcGxhbl9j YWNoZV9mdW5jIAorLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgICAgICAgICAKKygxIHJvdykK KworU0VMRUNUIHBsYW5fY2FjaGVfZnVuYygxKTsKKyBwbGFuX2NhY2hlX2Z1bmMgCistLS0tLS0t LS0tLS0tLS0tLQorICAgICAgICAgICAgICAgIAorKDEgcm93KQorCitTRUxFQ1QgcGxhbl9jYWNo ZV9mdW5jKDEpOworIHBsYW5fY2FjaGVfZnVuYyAKKy0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAg ICAgICAgICAgCisoMSByb3cpCisKK1NFTEVDVCBwbGFuX2NhY2hlX2Z1bmMoMSk7CisgcGxhbl9j YWNoZV9mdW5jIAorLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgICAgICAgICAKKygxIHJvdykK KworU0VMRUNUIHBsYW5fY2FjaGVfZnVuYygxKTsKKyBwbGFuX2NhY2hlX2Z1bmMgCistLS0tLS0t LS0tLS0tLS0tLQorICAgICAgICAgICAgICAgIAorKDEgcm93KQorCitTRUxFQ1QgY2FsbHMsIGdl bmVyaWNfcGxhbl9jYWxscywgY3VzdG9tX3BsYW5fY2FsbHMsIHRvcGxldmVsLCBxdWVyeSBGUk9N IHBnX3N0YXRfc3RhdGVtZW50cyBPUkRFUiBCWSBxdWVyeSBDT0xMQVRFICJDIjsKKyBjYWxscyB8 IGdlbmVyaWNfcGxhbl9jYWxscyB8IGN1c3RvbV9wbGFuX2NhbGxzIHwgdG9wbGV2ZWwgfCAgICAg ICAgICAgICAgICAgICAgICAgICBxdWVyeSAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0t LS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSst LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQor ICAgICAxIHwgICAgICAgICAgICAgICAgICAwIHwgICAgICAgICAgICAgICAgIDAgfCB0ICAgICAg ICB8IFNFTEVDVCBwZ19zdGF0X3N0YXRlbWVudHNfcmVzZXQoKSBJUyBOT1QgTlVMTCBBUyB0Cisg ICAgIDYgfCAgICAgICAgICAgICAgICAgIDAgfCAgICAgICAgICAgICAgICAgMCB8IHQgICAgICAg IHwgU0VMRUNUIHBsYW5fY2FjaGVfZnVuYygkMSkKKyAgICAgNiB8ICAgICAgICAgICAgICAgICAg MSB8ICAgICAgICAgICAgICAgICA1IHwgZiAgICAgICAgfCBzZWxlY3QgeSAgICAgICAgICAgIGZy b20gcGxhbl9jYWNoZV90YWIgd2hlcmUgeCA9IHhfaW4KKygzIHJvd3MpCisKK1NFTEVDVCBwZ19z dGF0X3N0YXRlbWVudHNfcmVzZXQoKSBJUyBOT1QgTlVMTCBBUyB0OworIHQgCistLS0KKyB0Ciso MSByb3cpCisKK0NBTEwgcGxhbl9jYWNoZV9wcm9jKDEpOworQ0FMTCBwbGFuX2NhY2hlX3Byb2Mo MSk7CitDQUxMIHBsYW5fY2FjaGVfcHJvYygxKTsKK0NBTEwgcGxhbl9jYWNoZV9wcm9jKDEpOwor Q0FMTCBwbGFuX2NhY2hlX3Byb2MoMSk7CitDQUxMIHBsYW5fY2FjaGVfcHJvYygxKTsKK1NFTEVD VCBjYWxscywgZ2VuZXJpY19wbGFuX2NhbGxzLCBjdXN0b21fcGxhbl9jYWxscywgdG9wbGV2ZWws IHF1ZXJ5IEZST00gcGdfc3RhdF9zdGF0ZW1lbnRzIE9SREVSIEJZIHF1ZXJ5IENPTExBVEUgIkMi OworIGNhbGxzIHwgZ2VuZXJpY19wbGFuX2NhbGxzIHwgY3VzdG9tX3BsYW5fY2FsbHMgfCB0b3Bs ZXZlbCB8ICAgICAgICAgICAgICAgICAgICAgICAgIHF1ZXJ5ICAgICAgICAgICAgICAgICAgICAg ICAgICAKKy0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLSst LS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tCisgICAgIDYgfCAgICAgICAgICAgICAgICAgIDAgfCAgICAgICAgICAgICAgICAg MCB8IHQgICAgICAgIHwgQ0FMTCBwbGFuX2NhY2hlX3Byb2MoJDEpCisgICAgIDEgfCAgICAgICAg ICAgICAgICAgIDAgfCAgICAgICAgICAgICAgICAgMCB8IHQgICAgICAgIHwgU0VMRUNUIHBnX3N0 YXRfc3RhdGVtZW50c19yZXNldCgpIElTIE5PVCBOVUxMIEFTIHQKKyAgICAgNiB8ICAgICAgICAg ICAgICAgICAgMSB8ICAgICAgICAgICAgICAgICA1IHwgZiAgICAgICAgfCBzZWxlY3QgeSAgICAg ICAgICAgIGZyb20gcGxhbl9jYWNoZV90YWIgd2hlcmUgeCA9IHhfaW4KKygzIHJvd3MpCisKKy0t IHBsYW4gY2FjaGUgY291bnRlcnMgYXJlIG5vdCB0cmFja2VkIGZvciB1dGlsaXR5IHN0YXRlbWVu dHMKK0RST1AgVEFCTEUgcGxhbl9jYWNoZV90YWI7CitDUkVBVEUgVEFCTEUgcGxhbl9jYWNoZV90 YWIgQVMgU0VMRUNUICQxOjppbnQgQVMgeCwgJDI6OmludCBBUyB5IFxwYXJzZSBwMQorU0VMRUNU IHBnX3N0YXRfc3RhdGVtZW50c19yZXNldCgpIElTIE5PVCBOVUxMIEFTIHQ7CisgdCAKKy0tLQor IHQKKygxIHJvdykKKworXGJpbmRfbmFtZWQgcDEgMSAyCis7CitEUk9QIFRBQkxFIHBsYW5fY2Fj aGVfdGFiOworXGJpbmRfbmFtZWQgcDEgMSAyCis7CitTRUxFQ1QgY2FsbHMsIGdlbmVyaWNfcGxh bl9jYWxscywgY3VzdG9tX3BsYW5fY2FsbHMsIHRvcGxldmVsLCBxdWVyeSBGUk9NIHBnX3N0YXRf c3RhdGVtZW50cyBPUkRFUiBCWSBxdWVyeSBDT0xMQVRFICJDIjsKKyBjYWxscyB8IGdlbmVyaWNf cGxhbl9jYWxscyB8IGN1c3RvbV9wbGFuX2NhbGxzIHwgdG9wbGV2ZWwgfCAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHF1ZXJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0t LS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0r LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tCisgICAgIDIgfCAgICAgICAgICAgICAgICAgIDAgfCAgICAgICAgICAgICAgICAg MCB8IHQgICAgICAgIHwgQ1JFQVRFIFRBQkxFIHBsYW5fY2FjaGVfdGFiIEFTIFNFTEVDVCAkMTo6 aW50IEFTIHgsICQyOjppbnQgQVMgeQorICAgICAyIHwgICAgICAgICAgICAgICAgICAwIHwgICAg ICAgICAgICAgICAgIDAgfCBmICAgICAgICB8IENSRUFURSBUQUJMRSBwbGFuX2NhY2hlX3RhYiBB UyBTRUxFQ1QgJDE6OmludCBBUyB4LCAkMjo6aW50IEFTIHkKKyAgICAgMSB8ICAgICAgICAgICAg ICAgICAgMCB8ICAgICAgICAgICAgICAgICAwIHwgdCAgICAgICAgfCBEUk9QIFRBQkxFIHBsYW5f Y2FjaGVfdGFiCisgICAgIDEgfCAgICAgICAgICAgICAgICAgIDAgfCAgICAgICAgICAgICAgICAg MCB8IHQgICAgICAgIHwgU0VMRUNUIHBnX3N0YXRfc3RhdGVtZW50c19yZXNldCgpIElTIE5PVCBO VUxMIEFTIHQKKyg0IHJvd3MpCisKK0RFQUxMT0NBVEUgcDE7CistLSBwbGFuIGNhY2hlIG1vZGUg Z2VuZXJpYworU0VUIHBsYW5fY2FjaGVfbW9kZSA9IGZvcmNlX2dlbmVyaWNfcGxhbjsKK1NFTEVD VCBwZ19zdGF0X3N0YXRlbWVudHNfcmVzZXQoKSBJUyBOT1QgTlVMTCBBUyB0OworIHQgCistLS0K KyB0CisoMSByb3cpCisKK1BSRVBBUkUgUDEoaW50KSBBUyBzZWxlY3QgeSBmcm9tIHBsYW5fY2Fj aGVfdGFiIHdoZXJlIHggPSAkMTsKK0VYRUNVVEUgcDEoMSk7CisgeSAKKy0tLQorIDIKKygxIHJv dykKKworRVhFQ1VURSBwMSgxKTsKKyB5IAorLS0tCisgMgorKDEgcm93KQorCitFWEVDVVRFIHAx KDEpOworIHkgCistLS0KKyAyCisoMSByb3cpCisKK0VYRUNVVEUgcDEoMSk7CisgeSAKKy0tLQor IDIKKygxIHJvdykKKworRVhFQ1VURSBwMSgxKTsKKyB5IAorLS0tCisgMgorKDEgcm93KQorCitF WEVDVVRFIHAxKDEpOworIHkgCistLS0KKyAyCisoMSByb3cpCisKK1NFTEVDVCBjYWxscywgZ2Vu ZXJpY19wbGFuX2NhbGxzLCBjdXN0b21fcGxhbl9jYWxscywgcXVlcnkgRlJPTSBwZ19zdGF0X3N0 YXRlbWVudHMgT1JERVIgQlkgcXVlcnkgQ09MTEFURSAiQyI7CisgY2FsbHMgfCBnZW5lcmljX3Bs YW5fY2FsbHMgfCBjdXN0b21fcGxhbl9jYWxscyB8ICAgICAgICAgICAgICAgICAgICAgICBxdWVy eSAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLSst LS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0KKyAgICAgMSB8ICAgICAgICAgICAgICAgICAgMCB8ICAgICAgICAgICAg ICAgICAwIHwgU0VMRUNUIHBnX3N0YXRfc3RhdGVtZW50c19yZXNldCgpIElTIE5PVCBOVUxMIEFT IHQKKyAgICAgNiB8ICAgICAgICAgICAgICAgICAgNiB8ICAgICAgICAgICAgICAgICAwIHwgc2Vs ZWN0IHkgZnJvbSBwbGFuX2NhY2hlX3RhYiB3aGVyZSB4ID0gJDEKKygyIHJvd3MpCisKK0RFQUxM T0NBVEUgcDE7CitTRVQgcGdfc3RhdF9zdGF0ZW1lbnRzLnRyYWNrID0gImFsbCI7CitTRUxFQ1Qg cGdfc3RhdF9zdGF0ZW1lbnRzX3Jlc2V0KCkgSVMgTk9UIE5VTEwgQVMgdDsKKyB0IAorLS0tCisg dAorKDEgcm93KQorCitTRUxFQ1QgcGxhbl9jYWNoZV9mdW5jKDEpOworIHBsYW5fY2FjaGVfZnVu YyAKKy0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgICAgICAgICAyCisoMSByb3cpCisKK1NFTEVD VCBwbGFuX2NhY2hlX2Z1bmMoMSk7CisgcGxhbl9jYWNoZV9mdW5jIAorLS0tLS0tLS0tLS0tLS0t LS0KKyAgICAgICAgICAgICAgIDIKKygxIHJvdykKKworU0VMRUNUIHBsYW5fY2FjaGVfZnVuYygx KTsKKyBwbGFuX2NhY2hlX2Z1bmMgCistLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICAgICAgICAg MgorKDEgcm93KQorCitTRUxFQ1QgcGxhbl9jYWNoZV9mdW5jKDEpOworIHBsYW5fY2FjaGVfZnVu YyAKKy0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgICAgICAgICAyCisoMSByb3cpCisKK1NFTEVD VCBwbGFuX2NhY2hlX2Z1bmMoMSk7CisgcGxhbl9jYWNoZV9mdW5jIAorLS0tLS0tLS0tLS0tLS0t LS0KKyAgICAgICAgICAgICAgIDIKKygxIHJvdykKKworU0VMRUNUIHBsYW5fY2FjaGVfZnVuYygx KTsKKyBwbGFuX2NhY2hlX2Z1bmMgCistLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICAgICAgICAg MgorKDEgcm93KQorCitDQUxMIHBsYW5fY2FjaGVfcHJvYygxKTsKK0NBTEwgcGxhbl9jYWNoZV9w cm9jKDEpOworQ0FMTCBwbGFuX2NhY2hlX3Byb2MoMSk7CitDQUxMIHBsYW5fY2FjaGVfcHJvYygx KTsKK0NBTEwgcGxhbl9jYWNoZV9wcm9jKDEpOworQ0FMTCBwbGFuX2NhY2hlX3Byb2MoMSk7CitT RUxFQ1QgY2FsbHMsIGdlbmVyaWNfcGxhbl9jYWxscywgY3VzdG9tX3BsYW5fY2FsbHMsIHRvcGxl dmVsLCBxdWVyeSBGUk9NIHBnX3N0YXRfc3RhdGVtZW50cyBPUkRFUiBCWSBxdWVyeSBDT0xMQVRF ICJDIjsKKyBjYWxscyB8IGdlbmVyaWNfcGxhbl9jYWxscyB8IGN1c3RvbV9wbGFuX2NhbGxzIHwg dG9wbGV2ZWwgfCAgICAgICAgICAgICAgICAgICAgICAgICBxdWVyeSAgICAgICAgICAgICAgICAg ICAgICAgICAgCistLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0t LS0rLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQorICAgICA2IHwgICAgICAgICAgICAgICAgICAwIHwgICAgICAgICAgICAg ICAgIDAgfCB0ICAgICAgICB8IENBTEwgcGxhbl9jYWNoZV9wcm9jKCQxKQorICAgICAxIHwgICAg ICAgICAgICAgICAgICAwIHwgICAgICAgICAgICAgICAgIDAgfCB0ICAgICAgICB8IFNFTEVDVCBw Z19zdGF0X3N0YXRlbWVudHNfcmVzZXQoKSBJUyBOT1QgTlVMTCBBUyB0CisgICAgIDYgfCAgICAg ICAgICAgICAgICAgIDAgfCAgICAgICAgICAgICAgICAgMCB8IHQgICAgICAgIHwgU0VMRUNUIHBs YW5fY2FjaGVfZnVuYygkMSkKKyAgICAxMiB8ICAgICAgICAgICAgICAgICAxMiB8ICAgICAgICAg ICAgICAgICAwIHwgZiAgICAgICAgfCBzZWxlY3QgeSAgICAgICAgICAgIGZyb20gcGxhbl9jYWNo ZV90YWIgd2hlcmUgeCA9IHhfaW4KKyg0IHJvd3MpCisKK1JFU0VUIHBnX3N0YXRfc3RhdGVtZW50 cy50cmFjazsKKy0tIGN1c3RvbSBwbGFuIG1vZGUKK1NFVCBwbGFuX2NhY2hlX21vZGUgPSBmb3Jj ZV9jdXN0b21fcGxhbjsKK1NFTEVDVCBwZ19zdGF0X3N0YXRlbWVudHNfcmVzZXQoKSBJUyBOT1Qg TlVMTCBBUyB0OworIHQgCistLS0KKyB0CisoMSByb3cpCisKK1BSRVBBUkUgUDEoaW50KSBBUyBz ZWxlY3QgeSBmcm9tIHBsYW5fY2FjaGVfdGFiIHdoZXJlIHggPSAkMTsKK0VYRUNVVEUgcDEoMSk7 CisgeSAKKy0tLQorIDIKKygxIHJvdykKKworRVhFQ1VURSBwMSgxKTsKKyB5IAorLS0tCisgMgor KDEgcm93KQorCitFWEVDVVRFIHAxKDEpOworIHkgCistLS0KKyAyCisoMSByb3cpCisKK0VYRUNV VEUgcDEoMSk7CisgeSAKKy0tLQorIDIKKygxIHJvdykKKworRVhFQ1VURSBwMSgxKTsKKyB5IAor LS0tCisgMgorKDEgcm93KQorCitFWEVDVVRFIHAxKDEpOworIHkgCistLS0KKyAyCisoMSByb3cp CisKK1NFTEVDVCBjYWxscywgZ2VuZXJpY19wbGFuX2NhbGxzLCBjdXN0b21fcGxhbl9jYWxscywg cXVlcnkgRlJPTSBwZ19zdGF0X3N0YXRlbWVudHMgT1JERVIgQlkgcXVlcnkgQ09MTEFURSAiQyI7 CisgY2FsbHMgfCBnZW5lcmljX3BsYW5fY2FsbHMgfCBjdXN0b21fcGxhbl9jYWxscyB8ICAgICAg ICAgICAgICAgICAgICAgICBxdWVyeSAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLSst LS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgMSB8ICAgICAgICAgICAg ICAgICAgMCB8ICAgICAgICAgICAgICAgICAwIHwgU0VMRUNUIHBnX3N0YXRfc3RhdGVtZW50c19y ZXNldCgpIElTIE5PVCBOVUxMIEFTIHQKKyAgICAgNiB8ICAgICAgICAgICAgICAgICAgMCB8ICAg ICAgICAgICAgICAgICA2IHwgc2VsZWN0IHkgZnJvbSBwbGFuX2NhY2hlX3RhYiB3aGVyZSB4ID0g JDEKKygyIHJvd3MpCisKK0RFQUxMT0NBVEUgcDE7CitTRVQgcGdfc3RhdF9zdGF0ZW1lbnRzLnRy YWNrID0gImFsbCI7CitTRUxFQ1QgcGdfc3RhdF9zdGF0ZW1lbnRzX3Jlc2V0KCkgSVMgTk9UIE5V TEwgQVMgdDsKKyB0IAorLS0tCisgdAorKDEgcm93KQorCitTRUxFQ1QgcGxhbl9jYWNoZV9mdW5j KDEpOworIHBsYW5fY2FjaGVfZnVuYyAKKy0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgICAgICAg ICAyCisoMSByb3cpCisKK1NFTEVDVCBwbGFuX2NhY2hlX2Z1bmMoMSk7CisgcGxhbl9jYWNoZV9m dW5jIAorLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgICAgICAgIDIKKygxIHJvdykKKworU0VM RUNUIHBsYW5fY2FjaGVfZnVuYygxKTsKKyBwbGFuX2NhY2hlX2Z1bmMgCistLS0tLS0tLS0tLS0t LS0tLQorICAgICAgICAgICAgICAgMgorKDEgcm93KQorCitTRUxFQ1QgcGxhbl9jYWNoZV9mdW5j KDEpOworIHBsYW5fY2FjaGVfZnVuYyAKKy0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgICAgICAg ICAyCisoMSByb3cpCisKK1NFTEVDVCBwbGFuX2NhY2hlX2Z1bmMoMSk7CisgcGxhbl9jYWNoZV9m dW5jIAorLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgICAgICAgIDIKKygxIHJvdykKKworU0VM RUNUIHBsYW5fY2FjaGVfZnVuYygxKTsKKyBwbGFuX2NhY2hlX2Z1bmMgCistLS0tLS0tLS0tLS0t LS0tLQorICAgICAgICAgICAgICAgMgorKDEgcm93KQorCitDQUxMIHBsYW5fY2FjaGVfcHJvYygx KTsKK0NBTEwgcGxhbl9jYWNoZV9wcm9jKDEpOworQ0FMTCBwbGFuX2NhY2hlX3Byb2MoMSk7CitD QUxMIHBsYW5fY2FjaGVfcHJvYygxKTsKK0NBTEwgcGxhbl9jYWNoZV9wcm9jKDEpOworQ0FMTCBw bGFuX2NhY2hlX3Byb2MoMSk7CitTRUxFQ1QgY2FsbHMsIGdlbmVyaWNfcGxhbl9jYWxscywgY3Vz dG9tX3BsYW5fY2FsbHMsIHRvcGxldmVsLCBxdWVyeSBGUk9NIHBnX3N0YXRfc3RhdGVtZW50cyBP UkRFUiBCWSBxdWVyeSBDT0xMQVRFICJDIjsKKyBjYWxscyB8IGdlbmVyaWNfcGxhbl9jYWxscyB8 IGN1c3RvbV9wbGFuX2NhbGxzIHwgdG9wbGV2ZWwgfCAgICAgICAgICAgICAgICAgICAgICAgICBx dWVyeSAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0t LS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICA2IHwgICAgICAgICAgICAg ICAgICAwIHwgICAgICAgICAgICAgICAgIDAgfCB0ICAgICAgICB8IENBTEwgcGxhbl9jYWNoZV9w cm9jKCQxKQorICAgICAxIHwgICAgICAgICAgICAgICAgICAwIHwgICAgICAgICAgICAgICAgIDAg fCB0ICAgICAgICB8IFNFTEVDVCBwZ19zdGF0X3N0YXRlbWVudHNfcmVzZXQoKSBJUyBOT1QgTlVM TCBBUyB0CisgICAgIDYgfCAgICAgICAgICAgICAgICAgIDAgfCAgICAgICAgICAgICAgICAgMCB8 IHQgICAgICAgIHwgU0VMRUNUIHBsYW5fY2FjaGVfZnVuYygkMSkKKyAgICAxMiB8ICAgICAgICAg ICAgICAgICAgMCB8ICAgICAgICAgICAgICAgIDEyIHwgZiAgICAgICAgfCBzZWxlY3QgeSAgICAg ICAgICAgIGZyb20gcGxhbl9jYWNoZV90YWIgd2hlcmUgeCA9IHhfaW4KKyg0IHJvd3MpCisKK1JF U0VUIHBnX3N0YXRfc3RhdGVtZW50cy50cmFjazsKZGlmZiAtLWdpdCBhL2NvbnRyaWIvcGdfc3Rh dF9zdGF0ZW1lbnRzL21lc29uLmJ1aWxkIGIvY29udHJpYi9wZ19zdGF0X3N0YXRlbWVudHMvbWVz b24uYnVpbGQKaW5kZXggNDQ0NmFmNThjNS4uOTVmMTc1ODQ4ZiAxMDA2NDQKLS0tIGEvY29udHJp Yi9wZ19zdGF0X3N0YXRlbWVudHMvbWVzb24uYnVpbGQKKysrIGIvY29udHJpYi9wZ19zdGF0X3N0 YXRlbWVudHMvbWVzb24uYnVpbGQKQEAgLTIxLDYgKzIxLDcgQEAgY29udHJpYl90YXJnZXRzICs9 IHBnX3N0YXRfc3RhdGVtZW50cwogaW5zdGFsbF9kYXRhKAogICAncGdfc3RhdF9zdGF0ZW1lbnRz LmNvbnRyb2wnLAogICAncGdfc3RhdF9zdGF0ZW1lbnRzLS0xLjQuc3FsJywKKyAgJ3BnX3N0YXRf c3RhdGVtZW50cy0tMS4xMi0tMS4xMy5zcWwnLAogICAncGdfc3RhdF9zdGF0ZW1lbnRzLS0xLjEx LS0xLjEyLnNxbCcsCiAgICdwZ19zdGF0X3N0YXRlbWVudHMtLTEuMTAtLTEuMTEuc3FsJywKICAg J3BnX3N0YXRfc3RhdGVtZW50cy0tMS45LS0xLjEwLnNxbCcsCkBAIC01NCw4ICs1NSw5IEBAIHRl c3RzICs9IHsKICAgICAgICdwcml2aWxlZ2VzJywKICAgICAgICdleHRlbmRlZCcsCiAgICAgICAn cGFyYWxsZWwnLAorICAgICAgJ3BsYW5fY2FjaGUnCiAgICAgICAnY2xlYW51cCcsCi0gICAgICAn b2xkZXh0dmVyc2lvbnMnLAorICAgICAgJ29sZGV4dHZlcnNpb25zJwogICAgIF0sCiAgICAgJ3Jl Z3Jlc3NfYXJncyc6IFsnLS10ZW1wLWNvbmZpZycsIGZpbGVzKCdwZ19zdGF0X3N0YXRlbWVudHMu Y29uZicpXSwKICAgICAjIERpc2FibGVkIGJlY2F1c2UgdGhlc2UgdGVzdHMgcmVxdWlyZQpkaWZm IC0tZ2l0IGEvY29udHJpYi9wZ19zdGF0X3N0YXRlbWVudHMvcGdfc3RhdF9zdGF0ZW1lbnRzLS0x LjEyLS0xLjEzLnNxbCBiL2NvbnRyaWIvcGdfc3RhdF9zdGF0ZW1lbnRzL3BnX3N0YXRfc3RhdGVt ZW50cy0tMS4xMi0tMS4xMy5zcWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw MC4uNjdmMmY3ZGJjYQotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvcGdfc3RhdF9zdGF0ZW1l bnRzL3BnX3N0YXRfc3RhdGVtZW50cy0tMS4xMi0tMS4xMy5zcWwKQEAgLTAsMCArMSw3OCBAQAor LyogY29udHJpYi9wZ19zdGF0X3N0YXRlbWVudHMvcGdfc3RhdF9zdGF0ZW1lbnRzLS0xLjEyLS0x LjEzLnNxbCAqLworCistLSBjb21wbGFpbiBpZiBzY3JpcHQgaXMgc291cmNlZCBpbiBwc3FsLCBy YXRoZXIgdGhhbiB2aWEgQUxURVIgRVhURU5TSU9OCitcZWNobyBVc2UgIkFMVEVSIEVYVEVOU0lP TiBwZ19zdGF0X3N0YXRlbWVudHMgVVBEQVRFIFRPICcxLjEzJyIgdG8gbG9hZCB0aGlzIGZpbGUu IFxxdWl0CisKKy8qIEZpcnN0IHdlIGhhdmUgdG8gcmVtb3ZlIHRoZW0gZnJvbSB0aGUgZXh0ZW5z aW9uICovCitBTFRFUiBFWFRFTlNJT04gcGdfc3RhdF9zdGF0ZW1lbnRzIERST1AgVklFVyBwZ19z dGF0X3N0YXRlbWVudHM7CitBTFRFUiBFWFRFTlNJT04gcGdfc3RhdF9zdGF0ZW1lbnRzIERST1Ag RlVOQ1RJT04gcGdfc3RhdF9zdGF0ZW1lbnRzKGJvb2xlYW4pOworCisvKiBUaGVuIHdlIGNhbiBk cm9wIHRoZW0gKi8KK0RST1AgVklFVyBwZ19zdGF0X3N0YXRlbWVudHM7CitEUk9QIEZVTkNUSU9O IHBnX3N0YXRfc3RhdGVtZW50cyhib29sZWFuKTsKKworLyogTm93IHJlZGVmaW5lICovCitDUkVB VEUgRlVOQ1RJT04gcGdfc3RhdF9zdGF0ZW1lbnRzKElOIHNob3d0ZXh0IGJvb2xlYW4sCisgICAg T1VUIHVzZXJpZCBvaWQsCisgICAgT1VUIGRiaWQgb2lkLAorICAgIE9VVCB0b3BsZXZlbCBib29s LAorICAgIE9VVCBxdWVyeWlkIGJpZ2ludCwKKyAgICBPVVQgcXVlcnkgdGV4dCwKKyAgICBPVVQg cGxhbnMgaW50OCwKKyAgICBPVVQgdG90YWxfcGxhbl90aW1lIGZsb2F0OCwKKyAgICBPVVQgbWlu X3BsYW5fdGltZSBmbG9hdDgsCisgICAgT1VUIG1heF9wbGFuX3RpbWUgZmxvYXQ4LAorICAgIE9V VCBtZWFuX3BsYW5fdGltZSBmbG9hdDgsCisgICAgT1VUIHN0ZGRldl9wbGFuX3RpbWUgZmxvYXQ4 LAorICAgIE9VVCBjYWxscyBpbnQ4LAorICAgIE9VVCB0b3RhbF9leGVjX3RpbWUgZmxvYXQ4LAor ICAgIE9VVCBtaW5fZXhlY190aW1lIGZsb2F0OCwKKyAgICBPVVQgbWF4X2V4ZWNfdGltZSBmbG9h dDgsCisgICAgT1VUIG1lYW5fZXhlY190aW1lIGZsb2F0OCwKKyAgICBPVVQgc3RkZGV2X2V4ZWNf dGltZSBmbG9hdDgsCisgICAgT1VUIHJvd3MgaW50OCwKKyAgICBPVVQgc2hhcmVkX2Jsa3NfaGl0 IGludDgsCisgICAgT1VUIHNoYXJlZF9ibGtzX3JlYWQgaW50OCwKKyAgICBPVVQgc2hhcmVkX2Js a3NfZGlydGllZCBpbnQ4LAorICAgIE9VVCBzaGFyZWRfYmxrc193cml0dGVuIGludDgsCisgICAg T1VUIGxvY2FsX2Jsa3NfaGl0IGludDgsCisgICAgT1VUIGxvY2FsX2Jsa3NfcmVhZCBpbnQ4LAor ICAgIE9VVCBsb2NhbF9ibGtzX2RpcnRpZWQgaW50OCwKKyAgICBPVVQgbG9jYWxfYmxrc193cml0 dGVuIGludDgsCisgICAgT1VUIHRlbXBfYmxrc19yZWFkIGludDgsCisgICAgT1VUIHRlbXBfYmxr c193cml0dGVuIGludDgsCisgICAgT1VUIHNoYXJlZF9ibGtfcmVhZF90aW1lIGZsb2F0OCwKKyAg ICBPVVQgc2hhcmVkX2Jsa193cml0ZV90aW1lIGZsb2F0OCwKKyAgICBPVVQgbG9jYWxfYmxrX3Jl YWRfdGltZSBmbG9hdDgsCisgICAgT1VUIGxvY2FsX2Jsa193cml0ZV90aW1lIGZsb2F0OCwKKyAg ICBPVVQgdGVtcF9ibGtfcmVhZF90aW1lIGZsb2F0OCwKKyAgICBPVVQgdGVtcF9ibGtfd3JpdGVf dGltZSBmbG9hdDgsCisgICAgT1VUIHdhbF9yZWNvcmRzIGludDgsCisgICAgT1VUIHdhbF9mcGkg aW50OCwKKyAgICBPVVQgd2FsX2J5dGVzIG51bWVyaWMsCisgICAgT1VUIHdhbF9idWZmZXJzX2Z1 bGwgaW50OCwKKyAgICBPVVQgaml0X2Z1bmN0aW9ucyBpbnQ4LAorICAgIE9VVCBqaXRfZ2VuZXJh dGlvbl90aW1lIGZsb2F0OCwKKyAgICBPVVQgaml0X2lubGluaW5nX2NvdW50IGludDgsCisgICAg T1VUIGppdF9pbmxpbmluZ190aW1lIGZsb2F0OCwKKyAgICBPVVQgaml0X29wdGltaXphdGlvbl9j b3VudCBpbnQ4LAorICAgIE9VVCBqaXRfb3B0aW1pemF0aW9uX3RpbWUgZmxvYXQ4LAorICAgIE9V VCBqaXRfZW1pc3Npb25fY291bnQgaW50OCwKKyAgICBPVVQgaml0X2VtaXNzaW9uX3RpbWUgZmxv YXQ4LAorICAgIE9VVCBqaXRfZGVmb3JtX2NvdW50IGludDgsCisgICAgT1VUIGppdF9kZWZvcm1f dGltZSBmbG9hdDgsCisgICAgT1VUIHBhcmFsbGVsX3dvcmtlcnNfdG9fbGF1bmNoIGludDgsCisg ICAgT1VUIHBhcmFsbGVsX3dvcmtlcnNfbGF1bmNoZWQgaW50OCwKKyAgICBPVVQgc3RhdHNfc2lu Y2UgdGltZXN0YW1wIHdpdGggdGltZSB6b25lLAorICAgIE9VVCBtaW5tYXhfc3RhdHNfc2luY2Ug dGltZXN0YW1wIHdpdGggdGltZSB6b25lLAorICAgIE9VVCBnZW5lcmljX3BsYW5fY2FsbHMgaW50 OCwKKyAgICBPVVQgY3VzdG9tX3BsYW5fY2FsbHMgaW50OAorKQorUkVUVVJOUyBTRVRPRiByZWNv cmQKK0FTICdNT0RVTEVfUEFUSE5BTUUnLCAncGdfc3RhdF9zdGF0ZW1lbnRzXzFfMTMnCitMQU5H VUFHRSBDIFNUUklDVCBWT0xBVElMRSBQQVJBTExFTCBTQUZFOworCitDUkVBVEUgVklFVyBwZ19z dGF0X3N0YXRlbWVudHMgQVMKKyAgU0VMRUNUICogRlJPTSBwZ19zdGF0X3N0YXRlbWVudHModHJ1 ZSk7CisKK0dSQU5UIFNFTEVDVCBPTiBwZ19zdGF0X3N0YXRlbWVudHMgVE8gUFVCTElDOwpkaWZm IC0tZ2l0IGEvY29udHJpYi9wZ19zdGF0X3N0YXRlbWVudHMvcGdfc3RhdF9zdGF0ZW1lbnRzLmMg Yi9jb250cmliL3BnX3N0YXRfc3RhdGVtZW50cy9wZ19zdGF0X3N0YXRlbWVudHMuYwppbmRleCBi MjQ1ZDA0MDk3Li5lNWZmMzJhYjU4IDEwMDY0NAotLS0gYS9jb250cmliL3BnX3N0YXRfc3RhdGVt ZW50cy9wZ19zdGF0X3N0YXRlbWVudHMuYworKysgYi9jb250cmliL3BnX3N0YXRfc3RhdGVtZW50 cy9wZ19zdGF0X3N0YXRlbWVudHMuYwpAQCAtNjksNiArNjksNyBAQAogI2luY2x1ZGUgInV0aWxz L2FjbC5oIgogI2luY2x1ZGUgInV0aWxzL2J1aWx0aW5zLmgiCiAjaW5jbHVkZSAidXRpbHMvbWVt dXRpbHMuaCIKKyNpbmNsdWRlICJ1dGlscy9wbGFuY2FjaGUuaCIKICNpbmNsdWRlICJ1dGlscy90 aW1lc3RhbXAuaCIKIAogUEdfTU9EVUxFX01BR0lDOwpAQCAtMTExLDYgKzExMiw3IEBAIHR5cGVk ZWYgZW51bSBwZ3NzVmVyc2lvbgogCVBHU1NfVjFfMTAsCiAJUEdTU19WMV8xMSwKIAlQR1NTX1Yx XzEyLAorCVBHU1NfVjFfMTMsCiB9IHBnc3NWZXJzaW9uOwogCiB0eXBlZGVmIGVudW0gcGdzc1N0 b3JlS2luZApAQCAtMjA3LDYgKzIwOSw4IEBAIHR5cGVkZWYgc3RydWN0IENvdW50ZXJzCiAJCQkJ CQkJCQkJCSAqIHRvIGJlIGxhdW5jaGVkICovCiAJaW50NjQJCXBhcmFsbGVsX3dvcmtlcnNfbGF1 bmNoZWQ7CS8qICMgb2YgcGFyYWxsZWwgd29ya2VycyBhY3R1YWxseQogCQkJCQkJCQkJCQkgKiBs YXVuY2hlZCAqLworCWludDY0CQlnZW5lcmljX3BsYW5fY2FsbHM7CQkvKiBudW1iZXIgb2YgY2Fs bHMgdXNpbmcgYSBnZW5lcmljIHBsYW4gKi8KKwlpbnQ2NAkJY3VzdG9tX3BsYW5fY2FsbHM7CQkv KiBudW1iZXIgb2YgY2FsbHMgdXNpbmcgYSBjdXN0b20gcGxhbiAqLwogfSBDb3VudGVyczsKIAog LyoKQEAgLTMyMSw2ICszMjUsNyBAQCBQR19GVU5DVElPTl9JTkZPX1YxKHBnX3N0YXRfc3RhdGVt ZW50c18xXzkpOwogUEdfRlVOQ1RJT05fSU5GT19WMShwZ19zdGF0X3N0YXRlbWVudHNfMV8xMCk7 CiBQR19GVU5DVElPTl9JTkZPX1YxKHBnX3N0YXRfc3RhdGVtZW50c18xXzExKTsKIFBHX0ZVTkNU SU9OX0lORk9fVjEocGdfc3RhdF9zdGF0ZW1lbnRzXzFfMTIpOworUEdfRlVOQ1RJT05fSU5GT19W MShwZ19zdGF0X3N0YXRlbWVudHNfMV8xMyk7CiBQR19GVU5DVElPTl9JTkZPX1YxKHBnX3N0YXRf c3RhdGVtZW50cyk7CiBQR19GVU5DVElPTl9JTkZPX1YxKHBnX3N0YXRfc3RhdGVtZW50c19pbmZv KTsKIApAQCAtMzUzLDcgKzM1OCw4IEBAIHN0YXRpYyB2b2lkIHBnc3Nfc3RvcmUoY29uc3QgY2hh ciAqcXVlcnksIHVpbnQ2NCBxdWVyeUlkLAogCQkJCQkgICBjb25zdCBzdHJ1Y3QgSml0SW5zdHJ1 bWVudGF0aW9uICpqaXR1c2FnZSwKIAkJCQkJICAgSnVtYmxlU3RhdGUgKmpzdGF0ZSwKIAkJCQkJ ICAgaW50IHBhcmFsbGVsX3dvcmtlcnNfdG9fbGF1bmNoLAotCQkJCQkgICBpbnQgcGFyYWxsZWxf d29ya2Vyc19sYXVuY2hlZCk7CisJCQkJCSAgIGludCBwYXJhbGxlbF93b3JrZXJzX2xhdW5jaGVk LAorCQkJCQkgICBDYWNoZWRQbGFuICpjcGxhbik7CiBzdGF0aWMgdm9pZCBwZ19zdGF0X3N0YXRl bWVudHNfaW50ZXJuYWwoRnVuY3Rpb25DYWxsSW5mbyBmY2luZm8sCiAJCQkJCQkJCQkJcGdzc1Zl cnNpb24gYXBpX3ZlcnNpb24sCiAJCQkJCQkJCQkJYm9vbCBzaG93dGV4dCk7CkBAIC04NzUsNyAr ODgxLDggQEAgcGdzc19wb3N0X3BhcnNlX2FuYWx5emUoUGFyc2VTdGF0ZSAqcHN0YXRlLCBRdWVy eSAqcXVlcnksIEp1bWJsZVN0YXRlICpqc3RhdGUpCiAJCQkJICAgTlVMTCwKIAkJCQkgICBqc3Rh dGUsCiAJCQkJICAgMCwKLQkJCQkgICAwKTsKKwkJCQkgICAwLAorCQkJCSAgIE5VTEwpOwogfQog CiAvKgpAQCAtOTU1LDcgKzk2Miw4IEBAIHBnc3NfcGxhbm5lcihRdWVyeSAqcGFyc2UsCiAJCQkJ ICAgTlVMTCwKIAkJCQkgICBOVUxMLAogCQkJCSAgIDAsCi0JCQkJICAgMCk7CisJCQkJICAgMCwK KwkJCQkgICBOVUxMKTsKIAl9CiAJZWxzZQogCXsKQEAgLTEwOTcsNyArMTEwNSw4IEBAIHBnc3Nf RXhlY3V0b3JFbmQoUXVlcnlEZXNjICpxdWVyeURlc2MpCiAJCQkJICAgcXVlcnlEZXNjLT5lc3Rh dGUtPmVzX2ppdCA/ICZxdWVyeURlc2MtPmVzdGF0ZS0+ZXNfaml0LT5pbnN0ciA6IE5VTEwsCiAJ CQkJICAgTlVMTCwKIAkJCQkgICBxdWVyeURlc2MtPmVzdGF0ZS0+ZXNfcGFyYWxsZWxfd29ya2Vy c190b19sYXVuY2gsCi0JCQkJICAgcXVlcnlEZXNjLT5lc3RhdGUtPmVzX3BhcmFsbGVsX3dvcmtl cnNfbGF1bmNoZWQpOworCQkJCSAgIHF1ZXJ5RGVzYy0+ZXN0YXRlLT5lc19wYXJhbGxlbF93b3Jr ZXJzX2xhdW5jaGVkLAorCQkJCSAgIHF1ZXJ5RGVzYy0+Y3BsYW4pOwogCX0KIAogCWlmIChwcmV2 X0V4ZWN1dG9yRW5kKQpAQCAtMTIzMCw3ICsxMjM5LDggQEAgcGdzc19Qcm9jZXNzVXRpbGl0eShQ bGFubmVkU3RtdCAqcHN0bXQsIGNvbnN0IGNoYXIgKnF1ZXJ5U3RyaW5nLAogCQkJCSAgIE5VTEws CiAJCQkJICAgTlVMTCwKIAkJCQkgICAwLAotCQkJCSAgIDApOworCQkJCSAgIDAsCisJCQkJICAg TlVMTCk7CiAJfQogCWVsc2UKIAl7CkBAIC0xMjkzLDcgKzEzMDMsOCBAQCBwZ3NzX3N0b3JlKGNv bnN0IGNoYXIgKnF1ZXJ5LCB1aW50NjQgcXVlcnlJZCwKIAkJICAgY29uc3Qgc3RydWN0IEppdElu c3RydW1lbnRhdGlvbiAqaml0dXNhZ2UsCiAJCSAgIEp1bWJsZVN0YXRlICpqc3RhdGUsCiAJCSAg IGludCBwYXJhbGxlbF93b3JrZXJzX3RvX2xhdW5jaCwKLQkJICAgaW50IHBhcmFsbGVsX3dvcmtl cnNfbGF1bmNoZWQpCisJCSAgIGludCBwYXJhbGxlbF93b3JrZXJzX2xhdW5jaGVkLAorCQkgICBD YWNoZWRQbGFuICpjcGxhbikKIHsKIAlwZ3NzSGFzaEtleSBrZXk7CiAJcGdzc0VudHJ5ICAqZW50 cnk7CkBAIC0xNTAxLDYgKzE1MTIsMTEgQEAgcGdzc19zdG9yZShjb25zdCBjaGFyICpxdWVyeSwg dWludDY0IHF1ZXJ5SWQsCiAJCWVudHJ5LT5jb3VudGVycy5wYXJhbGxlbF93b3JrZXJzX3RvX2xh dW5jaCArPSBwYXJhbGxlbF93b3JrZXJzX3RvX2xhdW5jaDsKIAkJZW50cnktPmNvdW50ZXJzLnBh cmFsbGVsX3dvcmtlcnNfbGF1bmNoZWQgKz0gcGFyYWxsZWxfd29ya2Vyc19sYXVuY2hlZDsKIAor CQlpZiAoY3BsYW4gJiYgY3BsYW4tPnN0YXR1cyA+IFBMQU5fQ0FDSEVfU1RBVFVTX0NVU1RPTV9Q TEFOKQorCQkJZW50cnktPmNvdW50ZXJzLmdlbmVyaWNfcGxhbl9jYWxscysrOworCQlpZiAoY3Bs YW4gJiYgY3BsYW4tPnN0YXR1cyA9PSBQTEFOX0NBQ0hFX1NUQVRVU19DVVNUT01fUExBTikKKwkJ CWVudHJ5LT5jb3VudGVycy5jdXN0b21fcGxhbl9jYWxscysrOworCiAJCVNwaW5Mb2NrUmVsZWFz ZSgmZW50cnktPm11dGV4KTsKIAl9CiAKQEAgLTE1NjgsNyArMTU4NCw4IEBAIHBnX3N0YXRfc3Rh dGVtZW50c19yZXNldChQR19GVU5DVElPTl9BUkdTKQogI2RlZmluZSBQR19TVEFUX1NUQVRFTUVO VFNfQ09MU19WMV8xMAk0MwogI2RlZmluZSBQR19TVEFUX1NUQVRFTUVOVFNfQ09MU19WMV8xMQk0 OQogI2RlZmluZSBQR19TVEFUX1NUQVRFTUVOVFNfQ09MU19WMV8xMgk1MgotI2RlZmluZSBQR19T VEFUX1NUQVRFTUVOVFNfQ09MUwkJCTUyCS8qIG1heGltdW0gb2YgYWJvdmUgKi8KKyNkZWZpbmUg UEdfU1RBVF9TVEFURU1FTlRTX0NPTFNfVjFfMTMJNTQKKyNkZWZpbmUgUEdfU1RBVF9TVEFURU1F TlRTX0NPTFMJCQk1NAkvKiBtYXhpbXVtIG9mIGFib3ZlICovCiAKIC8qCiAgKiBSZXRyaWV2ZSBz dGF0ZW1lbnQgc3RhdGlzdGljcy4KQEAgLTE1ODAsNiArMTU5NywxNiBAQCBwZ19zdGF0X3N0YXRl bWVudHNfcmVzZXQoUEdfRlVOQ1RJT05fQVJHUykKICAqIGV4cGVjdGVkIEFQSSB2ZXJzaW9uIGlz IGlkZW50aWZpZWQgYnkgZW1iZWRkaW5nIGl0IGluIHRoZSBDIG5hbWUgb2YgdGhlCiAgKiBmdW5j dGlvbi4gIFVuZm9ydHVuYXRlbHkgd2Ugd2VyZW4ndCBicmlnaHQgZW5vdWdoIHRvIGRvIHRoYXQg Zm9yIDEuMS4KICAqLworRGF0dW0KK3BnX3N0YXRfc3RhdGVtZW50c18xXzEzKFBHX0ZVTkNUSU9O X0FSR1MpCit7CisJYm9vbAkJc2hvd3RleHQgPSBQR19HRVRBUkdfQk9PTCgwKTsKKworCXBnX3N0 YXRfc3RhdGVtZW50c19pbnRlcm5hbChmY2luZm8sIFBHU1NfVjFfMTMsIHNob3d0ZXh0KTsKKwor CXJldHVybiAoRGF0dW0pIDA7Cit9CisKIERhdHVtCiBwZ19zdGF0X3N0YXRlbWVudHNfMV8xMihQ R19GVU5DVElPTl9BUkdTKQogewpAQCAtMTczOCw2ICsxNzY1LDEwIEBAIHBnX3N0YXRfc3RhdGVt ZW50c19pbnRlcm5hbChGdW5jdGlvbkNhbGxJbmZvIGZjaW5mbywKIAkJCWlmIChhcGlfdmVyc2lv biAhPSBQR1NTX1YxXzEyKQogCQkJCWVsb2coRVJST1IsICJpbmNvcnJlY3QgbnVtYmVyIG9mIG91 dHB1dCBhcmd1bWVudHMiKTsKIAkJCWJyZWFrOworCQljYXNlIFBHX1NUQVRfU1RBVEVNRU5UU19D T0xTX1YxXzEzOgorCQkJaWYgKGFwaV92ZXJzaW9uICE9IFBHU1NfVjFfMTMpCisJCQkJZWxvZyhF UlJPUiwgImluY29ycmVjdCBudW1iZXIgb2Ygb3V0cHV0IGFyZ3VtZW50cyIpOworCQkJYnJlYWs7 CiAJCWRlZmF1bHQ6CiAJCQllbG9nKEVSUk9SLCAiaW5jb3JyZWN0IG51bWJlciBvZiBvdXRwdXQg YXJndW1lbnRzIik7CiAJfQpAQCAtMTk5NSw2ICsyMDI2LDExIEBAIHBnX3N0YXRfc3RhdGVtZW50 c19pbnRlcm5hbChGdW5jdGlvbkNhbGxJbmZvIGZjaW5mbywKIAkJCXZhbHVlc1tpKytdID0gVGlt ZXN0YW1wVHpHZXREYXR1bShzdGF0c19zaW5jZSk7CiAJCQl2YWx1ZXNbaSsrXSA9IFRpbWVzdGFt cFR6R2V0RGF0dW0obWlubWF4X3N0YXRzX3NpbmNlKTsKIAkJfQorCQlpZiAoYXBpX3ZlcnNpb24g Pj0gUEdTU19WMV8xMykKKwkJeworCQkJdmFsdWVzW2krK10gPSBJbnQ2NEdldERhdHVtRmFzdCh0 bXAuZ2VuZXJpY19wbGFuX2NhbGxzKTsKKwkJCXZhbHVlc1tpKytdID0gSW50NjRHZXREYXR1bUZh c3QodG1wLmN1c3RvbV9wbGFuX2NhbGxzKTsKKwkJfQogCiAJCUFzc2VydChpID09IChhcGlfdmVy c2lvbiA9PSBQR1NTX1YxXzAgPyBQR19TVEFUX1NUQVRFTUVOVFNfQ09MU19WMV8wIDoKIAkJCQkJ IGFwaV92ZXJzaW9uID09IFBHU1NfVjFfMSA/IFBHX1NUQVRfU1RBVEVNRU5UU19DT0xTX1YxXzEg OgpAQCAtMjAwNSw2ICsyMDQxLDcgQEAgcGdfc3RhdF9zdGF0ZW1lbnRzX2ludGVybmFsKEZ1bmN0 aW9uQ2FsbEluZm8gZmNpbmZvLAogCQkJCQkgYXBpX3ZlcnNpb24gPT0gUEdTU19WMV8xMCA/IFBH X1NUQVRfU1RBVEVNRU5UU19DT0xTX1YxXzEwIDoKIAkJCQkJIGFwaV92ZXJzaW9uID09IFBHU1Nf VjFfMTEgPyBQR19TVEFUX1NUQVRFTUVOVFNfQ09MU19WMV8xMSA6CiAJCQkJCSBhcGlfdmVyc2lv biA9PSBQR1NTX1YxXzEyID8gUEdfU1RBVF9TVEFURU1FTlRTX0NPTFNfVjFfMTIgOgorCQkJCQkg YXBpX3ZlcnNpb24gPT0gUEdTU19WMV8xMyA/IFBHX1NUQVRfU1RBVEVNRU5UU19DT0xTX1YxXzEz IDoKIAkJCQkJIC0xIC8qIGZhaWwgaWYgeW91IGZvcmdldCB0byB1cGRhdGUgdGhpcyBhc3NlcnQg Ki8gKSk7CiAKIAkJdHVwbGVzdG9yZV9wdXR2YWx1ZXMocnNpbmZvLT5zZXRSZXN1bHQsIHJzaW5m by0+c2V0RGVzYywgdmFsdWVzLCBudWxscyk7CmRpZmYgLS1naXQgYS9jb250cmliL3BnX3N0YXRf c3RhdGVtZW50cy9wZ19zdGF0X3N0YXRlbWVudHMuY29udHJvbCBiL2NvbnRyaWIvcGdfc3RhdF9z dGF0ZW1lbnRzL3BnX3N0YXRfc3RhdGVtZW50cy5jb250cm9sCmluZGV4IGQ0NWViYzEyZTMuLjJl ZWUwY2VmZmEgMTAwNjQ0Ci0tLSBhL2NvbnRyaWIvcGdfc3RhdF9zdGF0ZW1lbnRzL3BnX3N0YXRf c3RhdGVtZW50cy5jb250cm9sCisrKyBiL2NvbnRyaWIvcGdfc3RhdF9zdGF0ZW1lbnRzL3BnX3N0 YXRfc3RhdGVtZW50cy5jb250cm9sCkBAIC0xLDUgKzEsNSBAQAogIyBwZ19zdGF0X3N0YXRlbWVu dHMgZXh0ZW5zaW9uCiBjb21tZW50ID0gJ3RyYWNrIHBsYW5uaW5nIGFuZCBleGVjdXRpb24gc3Rh dGlzdGljcyBvZiBhbGwgU1FMIHN0YXRlbWVudHMgZXhlY3V0ZWQnCi1kZWZhdWx0X3ZlcnNpb24g PSAnMS4xMicKK2RlZmF1bHRfdmVyc2lvbiA9ICcxLjEzJwogbW9kdWxlX3BhdGhuYW1lID0gJyRs aWJkaXIvcGdfc3RhdF9zdGF0ZW1lbnRzJwogcmVsb2NhdGFibGUgPSB0cnVlCmRpZmYgLS1naXQg YS9jb250cmliL3BnX3N0YXRfc3RhdGVtZW50cy9zcWwvcGxhbl9jYWNoZS5zcWwgYi9jb250cmli L3BnX3N0YXRfc3RhdGVtZW50cy9zcWwvcGxhbl9jYWNoZS5zcWwKbmV3IGZpbGUgbW9kZSAxMDA2 NDQKaW5kZXggMDAwMDAwMDAwMC4uNjllZDc1YTI3OAotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRy aWIvcGdfc3RhdF9zdGF0ZW1lbnRzL3NxbC9wbGFuX2NhY2hlLnNxbApAQCAtMCwwICsxLDE1NSBA QAorLS0KKy0tIEluZm9ybWF0aW9uIHJlbGF0ZWQgdG8gcGxhbiBjYWNoZQorLS0KKworLS0gc2V0 dXAgdGVzdAorQ1JFQVRFIFRBQkxFIHBsYW5fY2FjaGVfdGFiICh4IGludCwgeSBpbnQpOworQ1JF QVRFIE9SIFJFUExBQ0UgRlVOQ1RJT04gcGxhbl9jYWNoZV9mdW5jKHhfaW4gaW50KSBSRVRVUk5T IGludCBBUyAkJAorICAgIERFQ0xBUkUKKyAgICAgICAgeV9vdXQgaW50OworICAgIEJFR0lOCisg ICAgICAgIHNlbGVjdCB5IGludG8geV9vdXQgZnJvbSBwbGFuX2NhY2hlX3RhYiB3aGVyZSB4ID0g eF9pbjsKKyAgICAgICAgcmV0dXJuIHlfb3V0OworICAgIEVORDsKKyQkIExBTkdVQUdFIHBscGdz cWw7CitDUkVBVEUgT1IgUkVQTEFDRSBQUk9DRURVUkUgcGxhbl9jYWNoZV9wcm9jKHhfaW4gaW50 KSBBUyAkJAorICAgIERFQ0xBUkUKKyAgICAgICAgeV9vdXQgaW50OworICAgIEJFR0lOCisgICAg ICAgIHNlbGVjdCB5IGludG8geV9vdXQgZnJvbSBwbGFuX2NhY2hlX3RhYiB3aGVyZSB4ID0geF9p bjsKKyAgICBFTkQ7CiskJCBMQU5HVUFHRSBwbHBnc3FsOworCistLSBwbGFuIGNhY2hlIGNvdW50 ZXJzIGZvciBleHRlbmRlZCBxdWVyeSBwcm90b2NvbCBhbmQgc3FsIHByZXBhcmVkIHN0YXRlbWVu dHMKK1NFTEVDVCBwZ19zdGF0X3N0YXRlbWVudHNfcmVzZXQoKSBJUyBOT1QgTlVMTCBBUyB0Owor c2VsZWN0IHkgZnJvbSBwbGFuX2NhY2hlX3RhYiB3aGVyZSB4ID0gJDEgXHBhcnNlIHAxCitcYmlu ZF9uYW1lZCBwMSAxCis7CitcYmluZF9uYW1lZCBwMSAxCis7CitcYmluZF9uYW1lZCBwMSAxCis7 CitcYmluZF9uYW1lZCBwMSAxCis7CitcYmluZF9uYW1lZCBwMSAxCis7CitcYmluZF9uYW1lZCBw MSAxCis7CitTRUxFQ1QgY2FsbHMsIGdlbmVyaWNfcGxhbl9jYWxscywgY3VzdG9tX3BsYW5fY2Fs bHMsIHF1ZXJ5IEZST00gcGdfc3RhdF9zdGF0ZW1lbnRzIE9SREVSIEJZIHF1ZXJ5IENPTExBVEUg IkMiOworREVBTExPQ0FURSBwMTsKK1NFTEVDVCBwZ19zdGF0X3N0YXRlbWVudHNfcmVzZXQoKSBJ UyBOT1QgTlVMTCBBUyB0OworUFJFUEFSRSBQMShpbnQpIEFTIHNlbGVjdCB5IGZyb20gcGxhbl9j YWNoZV90YWIgd2hlcmUgeCA9ICQxOworRVhFQ1VURSBwMSgxKTsKK0VYRUNVVEUgcDEoMSk7CitF WEVDVVRFIHAxKDEpOworRVhFQ1VURSBwMSgxKTsKK0VYRUNVVEUgcDEoMSk7CitFWEVDVVRFIHAx KDEpOworU0VMRUNUIGNhbGxzLCBnZW5lcmljX3BsYW5fY2FsbHMsIGN1c3RvbV9wbGFuX2NhbGxz LCBxdWVyeSBGUk9NIHBnX3N0YXRfc3RhdGVtZW50cyBPUkRFUiBCWSBxdWVyeSBDT0xMQVRFICJD IjsKK0RFQUxMT0NBVEUgcDE7CisKKy0tIHBsYW4gY2FjaGUgY291bnRlcnMgd2l0aCBwbGFuIGlu dmFsaWRhdGlvbi4KK1NFTEVDVCBwZ19zdGF0X3N0YXRlbWVudHNfcmVzZXQoKSBJUyBOT1QgTlVM TCBBUyB0OworUFJFUEFSRSBQMShpbnQpIEFTIHNlbGVjdCB5IGZyb20gcGxhbl9jYWNoZV90YWIg d2hlcmUgeCA9ICQxOworRVhFQ1VURSBwMSgxKTsKK0VYRUNVVEUgcDEoMSk7CitFWEVDVVRFIHAx KDEpOworQ1JFQVRFIElOREVYIE9OIHBsYW5fY2FjaGVfdGFiICh4KTsKK0VYRUNVVEUgcDEoMSk7 CitFWEVDVVRFIHAxKDEpOworRVhFQ1VURSBwMSgxKTsKK0VYRUNVVEUgcDEoMSk7CitFWEVDVVRF IHAxKDEpOworRVhFQ1VURSBwMSgxKTsKK1NFTEVDVCBjYWxscywgZ2VuZXJpY19wbGFuX2NhbGxz LCBjdXN0b21fcGxhbl9jYWxscywgcXVlcnkgRlJPTSBwZ19zdGF0X3N0YXRlbWVudHMgT1JERVIg QlkgcXVlcnkgQ09MTEFURSAiQyI7CitERUFMTE9DQVRFIHAxOworCistLSBwbGFuIGNhY2hlIGNv dW50ZXJzIGZvciBmdW5jdGlvbnMgYW5kIHByb2NlZHVyZXMKK1NFVCBwZ19zdGF0X3N0YXRlbWVu dHMudHJhY2sgPSAiYWxsIjsKK1NFTEVDVCBwZ19zdGF0X3N0YXRlbWVudHNfcmVzZXQoKSBJUyBO T1QgTlVMTCBBUyB0OworU0VMRUNUIHBsYW5fY2FjaGVfZnVuYygxKTsKK1NFTEVDVCBwbGFuX2Nh Y2hlX2Z1bmMoMSk7CitTRUxFQ1QgcGxhbl9jYWNoZV9mdW5jKDEpOworU0VMRUNUIHBsYW5fY2Fj aGVfZnVuYygxKTsKK1NFTEVDVCBwbGFuX2NhY2hlX2Z1bmMoMSk7CitTRUxFQ1QgcGxhbl9jYWNo ZV9mdW5jKDEpOworU0VMRUNUIGNhbGxzLCBnZW5lcmljX3BsYW5fY2FsbHMsIGN1c3RvbV9wbGFu X2NhbGxzLCB0b3BsZXZlbCwgcXVlcnkgRlJPTSBwZ19zdGF0X3N0YXRlbWVudHMgT1JERVIgQlkg cXVlcnkgQ09MTEFURSAiQyI7CisKK1NFTEVDVCBwZ19zdGF0X3N0YXRlbWVudHNfcmVzZXQoKSBJ UyBOT1QgTlVMTCBBUyB0OworQ0FMTCBwbGFuX2NhY2hlX3Byb2MoMSk7CitDQUxMIHBsYW5fY2Fj aGVfcHJvYygxKTsKK0NBTEwgcGxhbl9jYWNoZV9wcm9jKDEpOworQ0FMTCBwbGFuX2NhY2hlX3By b2MoMSk7CitDQUxMIHBsYW5fY2FjaGVfcHJvYygxKTsKK0NBTEwgcGxhbl9jYWNoZV9wcm9jKDEp OworU0VMRUNUIGNhbGxzLCBnZW5lcmljX3BsYW5fY2FsbHMsIGN1c3RvbV9wbGFuX2NhbGxzLCB0 b3BsZXZlbCwgcXVlcnkgRlJPTSBwZ19zdGF0X3N0YXRlbWVudHMgT1JERVIgQlkgcXVlcnkgQ09M TEFURSAiQyI7CisKKy0tIHBsYW4gY2FjaGUgY291bnRlcnMgYXJlIG5vdCB0cmFja2VkIGZvciB1 dGlsaXR5IHN0YXRlbWVudHMKK0RST1AgVEFCTEUgcGxhbl9jYWNoZV90YWI7CitDUkVBVEUgVEFC TEUgcGxhbl9jYWNoZV90YWIgQVMgU0VMRUNUICQxOjppbnQgQVMgeCwgJDI6OmludCBBUyB5IFxw YXJzZSBwMQorU0VMRUNUIHBnX3N0YXRfc3RhdGVtZW50c19yZXNldCgpIElTIE5PVCBOVUxMIEFT IHQ7CitcYmluZF9uYW1lZCBwMSAxIDIKKzsKK0RST1AgVEFCTEUgcGxhbl9jYWNoZV90YWI7Citc YmluZF9uYW1lZCBwMSAxIDIKKzsKK1NFTEVDVCBjYWxscywgZ2VuZXJpY19wbGFuX2NhbGxzLCBj dXN0b21fcGxhbl9jYWxscywgdG9wbGV2ZWwsIHF1ZXJ5IEZST00gcGdfc3RhdF9zdGF0ZW1lbnRz IE9SREVSIEJZIHF1ZXJ5IENPTExBVEUgIkMiOworREVBTExPQ0FURSBwMTsKKworLS0gcGxhbiBj YWNoZSBtb2RlIGdlbmVyaWMKK1NFVCBwbGFuX2NhY2hlX21vZGUgPSBmb3JjZV9nZW5lcmljX3Bs YW47CitTRUxFQ1QgcGdfc3RhdF9zdGF0ZW1lbnRzX3Jlc2V0KCkgSVMgTk9UIE5VTEwgQVMgdDsK K1BSRVBBUkUgUDEoaW50KSBBUyBzZWxlY3QgeSBmcm9tIHBsYW5fY2FjaGVfdGFiIHdoZXJlIHgg PSAkMTsKK0VYRUNVVEUgcDEoMSk7CitFWEVDVVRFIHAxKDEpOworRVhFQ1VURSBwMSgxKTsKK0VY RUNVVEUgcDEoMSk7CitFWEVDVVRFIHAxKDEpOworRVhFQ1VURSBwMSgxKTsKK1NFTEVDVCBjYWxs cywgZ2VuZXJpY19wbGFuX2NhbGxzLCBjdXN0b21fcGxhbl9jYWxscywgcXVlcnkgRlJPTSBwZ19z dGF0X3N0YXRlbWVudHMgT1JERVIgQlkgcXVlcnkgQ09MTEFURSAiQyI7CitERUFMTE9DQVRFIHAx OworU0VUIHBnX3N0YXRfc3RhdGVtZW50cy50cmFjayA9ICJhbGwiOworU0VMRUNUIHBnX3N0YXRf c3RhdGVtZW50c19yZXNldCgpIElTIE5PVCBOVUxMIEFTIHQ7CitTRUxFQ1QgcGxhbl9jYWNoZV9m dW5jKDEpOworU0VMRUNUIHBsYW5fY2FjaGVfZnVuYygxKTsKK1NFTEVDVCBwbGFuX2NhY2hlX2Z1 bmMoMSk7CitTRUxFQ1QgcGxhbl9jYWNoZV9mdW5jKDEpOworU0VMRUNUIHBsYW5fY2FjaGVfZnVu YygxKTsKK1NFTEVDVCBwbGFuX2NhY2hlX2Z1bmMoMSk7CitDQUxMIHBsYW5fY2FjaGVfcHJvYygx KTsKK0NBTEwgcGxhbl9jYWNoZV9wcm9jKDEpOworQ0FMTCBwbGFuX2NhY2hlX3Byb2MoMSk7CitD QUxMIHBsYW5fY2FjaGVfcHJvYygxKTsKK0NBTEwgcGxhbl9jYWNoZV9wcm9jKDEpOworQ0FMTCBw bGFuX2NhY2hlX3Byb2MoMSk7CitTRUxFQ1QgY2FsbHMsIGdlbmVyaWNfcGxhbl9jYWxscywgY3Vz dG9tX3BsYW5fY2FsbHMsIHRvcGxldmVsLCBxdWVyeSBGUk9NIHBnX3N0YXRfc3RhdGVtZW50cyBP UkRFUiBCWSBxdWVyeSBDT0xMQVRFICJDIjsKK1JFU0VUIHBnX3N0YXRfc3RhdGVtZW50cy50cmFj azsKKworLS0gY3VzdG9tIHBsYW4gbW9kZQorU0VUIHBsYW5fY2FjaGVfbW9kZSA9IGZvcmNlX2N1 c3RvbV9wbGFuOworU0VMRUNUIHBnX3N0YXRfc3RhdGVtZW50c19yZXNldCgpIElTIE5PVCBOVUxM IEFTIHQ7CitQUkVQQVJFIFAxKGludCkgQVMgc2VsZWN0IHkgZnJvbSBwbGFuX2NhY2hlX3RhYiB3 aGVyZSB4ID0gJDE7CitFWEVDVVRFIHAxKDEpOworRVhFQ1VURSBwMSgxKTsKK0VYRUNVVEUgcDEo MSk7CitFWEVDVVRFIHAxKDEpOworRVhFQ1VURSBwMSgxKTsKK0VYRUNVVEUgcDEoMSk7CitTRUxF Q1QgY2FsbHMsIGdlbmVyaWNfcGxhbl9jYWxscywgY3VzdG9tX3BsYW5fY2FsbHMsIHF1ZXJ5IEZS T00gcGdfc3RhdF9zdGF0ZW1lbnRzIE9SREVSIEJZIHF1ZXJ5IENPTExBVEUgIkMiOworREVBTExP Q0FURSBwMTsKK1NFVCBwZ19zdGF0X3N0YXRlbWVudHMudHJhY2sgPSAiYWxsIjsKK1NFTEVDVCBw Z19zdGF0X3N0YXRlbWVudHNfcmVzZXQoKSBJUyBOT1QgTlVMTCBBUyB0OworU0VMRUNUIHBsYW5f Y2FjaGVfZnVuYygxKTsKK1NFTEVDVCBwbGFuX2NhY2hlX2Z1bmMoMSk7CitTRUxFQ1QgcGxhbl9j YWNoZV9mdW5jKDEpOworU0VMRUNUIHBsYW5fY2FjaGVfZnVuYygxKTsKK1NFTEVDVCBwbGFuX2Nh Y2hlX2Z1bmMoMSk7CitTRUxFQ1QgcGxhbl9jYWNoZV9mdW5jKDEpOworQ0FMTCBwbGFuX2NhY2hl X3Byb2MoMSk7CitDQUxMIHBsYW5fY2FjaGVfcHJvYygxKTsKK0NBTEwgcGxhbl9jYWNoZV9wcm9j KDEpOworQ0FMTCBwbGFuX2NhY2hlX3Byb2MoMSk7CitDQUxMIHBsYW5fY2FjaGVfcHJvYygxKTsK K0NBTEwgcGxhbl9jYWNoZV9wcm9jKDEpOworU0VMRUNUIGNhbGxzLCBnZW5lcmljX3BsYW5fY2Fs bHMsIGN1c3RvbV9wbGFuX2NhbGxzLCB0b3BsZXZlbCwgcXVlcnkgRlJPTSBwZ19zdGF0X3N0YXRl bWVudHMgT1JERVIgQlkgcXVlcnkgQ09MTEFURSAiQyI7CitSRVNFVCBwZ19zdGF0X3N0YXRlbWVu dHMudHJhY2s7ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jL3Ny Yy9zZ21sL3Bnc3RhdHN0YXRlbWVudHMuc2dtbCBiL2RvYy9zcmMvc2dtbC9wZ3N0YXRzdGF0ZW1l bnRzLnNnbWwKaW5kZXggZTJhYzFjMmQ1MC4uOGEyMzc5ZTIyYyAxMDA2NDQKLS0tIGEvZG9jL3Ny Yy9zZ21sL3Bnc3RhdHN0YXRlbWVudHMuc2dtbAorKysgYi9kb2Mvc3JjL3NnbWwvcGdzdGF0c3Rh dGVtZW50cy5zZ21sCkBAIC01NzUsNiArNTc1LDI0IEBACiAgICAgICAgPHN0cnVjdGZpZWxkPm1h eF9leGVjX3RpbWU8L3N0cnVjdGZpZWxkPikKICAgICAgIDwvcGFyYT48L2VudHJ5PgogICAgICA8 L3Jvdz4KKworICAgICA8cm93PgorICAgICAgPGVudHJ5IHJvbGU9ImNhdGFsb2dfdGFibGVfZW50 cnkiPjxwYXJhIHJvbGU9ImNvbHVtbl9kZWZpbml0aW9uIj4KKyAgICAgICA8c3RydWN0ZmllbGQ+ Z2VuZXJpY19wbGFuX2NhbGxzPC9zdHJ1Y3RmaWVsZD4gPHR5cGU+YmlnaW50PC90eXBlPgorICAg ICAgPC9wYXJhPgorICAgICAgPHBhcmE+CisgICAgICAgVG90YWwgbnVtYmVyIG9mIG5vbi11dGls aXR5IHN0YXRlbWVudHMgZXhlY3V0ZWQgdXNpbmcgYSBnZW5lcmljIHBsYW4KKyAgICAgIDwvcGFy YT48L2VudHJ5PgorICAgICA8L3Jvdz4KKworICAgICA8cm93PgorICAgICAgPGVudHJ5IHJvbGU9 ImNhdGFsb2dfdGFibGVfZW50cnkiPjxwYXJhIHJvbGU9ImNvbHVtbl9kZWZpbml0aW9uIj4KKyAg ICAgICA8c3RydWN0ZmllbGQ+Y3VzdG9tX3BsYW5fY2FsbHM8L3N0cnVjdGZpZWxkPiA8dHlwZT5i aWdpbnQ8L3R5cGU+CisgICAgICA8L3BhcmE+CisgICAgICA8cGFyYT4KKyAgICAgICBUb3RhbCBu dW1iZXIgb2Ygbm9uLXV0aWxpdHkgc3RhdGVtZW50cyBleGVjdXRlZCB1c2luZyBhIGN1c3RvbSBw bGFuCisgICAgICA8L3BhcmE+PC9lbnRyeT4KKyAgICAgPC9yb3c+CiAgICAgPC90Ym9keT4KICAg IDwvdGdyb3VwPgogICA8L3RhYmxlPgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvY2Fj aGUvcGxhbmNhY2hlLmMgYi9zcmMvYmFja2VuZC91dGlscy9jYWNoZS9wbGFuY2FjaGUuYwppbmRl eCA2YzI5NzlkNWM4Li41MTBlMmQ4Mjg2IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9j YWNoZS9wbGFuY2FjaGUuYworKysgYi9zcmMvYmFja2VuZC91dGlscy9jYWNoZS9wbGFuY2FjaGUu YwpAQCAtMTA1Niw3ICsxMDU2LDcgQEAgQnVpbGRDYWNoZWRQbGFuKENhY2hlZFBsYW5Tb3VyY2Ug KnBsYW5zb3VyY2UsIExpc3QgKnFsaXN0LAogCXBsYW4tPnN0bXRfY29udGV4dCA9IHN0bXRfY29u dGV4dDsKIAlwbGFuLT5pc19vbmVzaG90ID0gcGxhbnNvdXJjZS0+aXNfb25lc2hvdDsKIAlwbGFu LT5pc19zYXZlZCA9IGZhbHNlOwotCXBsYW4tPmlzX3JldXNlZCA9IGZhbHNlOworCXBsYW4tPnN0 YXR1cyA9IFBMQU5fQ0FDSEVfU1RBVFVTX1VOS05PV047CiAJcGxhbi0+aXNfdmFsaWQgPSB0cnVl OwogCiAJLyogYXNzaWduIGdlbmVyYXRpb24gbnVtYmVyIHRvIG5ldyBwbGFuICovCkBAIC0xMjk0 LDcgKzEyOTQsOCBAQCBjYWNoZWRfcGxhbl9jb3N0KENhY2hlZFBsYW4gKnBsYW4sIGJvb2wgaW5j bHVkZV9wbGFubmVyKQogICogbG9ja3MgYXJlIGFjcXVpcmVkLiBJbiBzdWNoIGNhc2VzLCBDaGVj a0NhY2hlZFBsYW4oKSBkb2VzIG5vdCB0YWtlIGxvY2tzCiAgKiBvbiByZWxhdGlvbnMgc3ViamVj dCB0byBpbml0aWFsIHJ1bnRpbWUgcHJ1bmluZzsgaW5zdGVhZCwgdGhlc2UgbG9ja3MgYXJlCiAg KiBkZWZlcnJlZCB1bnRpbCBleGVjdXRpb24gc3RhcnR1cCwgd2hlbiBFeGVjRG9Jbml0aWFsUHJ1 bmluZygpIHBlcmZvcm1zCi0gKiBpbml0aWFsIHBydW5pbmcuICBUaGUgcGxhbidzICJpc19yZXVz ZWQiIGZsYWcgaXMgc2V0IHRvIGluZGljYXRlIHRoYXQKKyAqIGluaXRpYWwgcHJ1bmluZy4gIFRo ZSBwbGFuJ3MgInN0YXR1cyIgZmxhZyBpcyBzZXQgdG8KKyAqIFBMQU5fQ0FDSEVfU1RBVFVTX0dF TkVSSUNfUExBTl9SRVVTRSB0byBpbmRpY2F0ZSB0aGF0CiAgKiBDYWNoZWRQbGFuUmVxdWlyZXNM b2NraW5nKCkgc2hvdWxkIHJldHVybiB0cnVlIHdoZW4gY2FsbGVkIGJ5CiAgKiBFeGVjRG9Jbml0 aWFsUHJ1bmluZygpLgogICoKQEAgLTEzMzUsNyArMTMzNiw3IEBAIEdldENhY2hlZFBsYW4oQ2Fj aGVkUGxhblNvdXJjZSAqcGxhbnNvdXJjZSwgUGFyYW1MaXN0SW5mbyBib3VuZFBhcmFtcywKIAkJ CXBsYW4gPSBwbGFuc291cmNlLT5ncGxhbjsKIAkJCUFzc2VydChwbGFuLT5tYWdpYyA9PSBDQUNI RURQTEFOX01BR0lDKTsKIAkJCS8qIFJldXNpbmcgdGhlIGV4aXN0aW5nIHBsYW4sIHNvIG5vdCBh bGwgbG9ja3MgbWF5IGJlIGFjcXVpcmVkLiAqLwotCQkJcGxhbi0+aXNfcmV1c2VkID0gdHJ1ZTsK KwkJCXBsYW4tPnN0YXR1cyA9IFBMQU5fQ0FDSEVfU1RBVFVTX0dFTkVSSUNfUExBTl9SRVVTRTsK IAkJfQogCQllbHNlCiAJCXsKQEAgLTEzNzksNiArMTM4MCw4IEBAIEdldENhY2hlZFBsYW4oQ2Fj aGVkUGxhblNvdXJjZSAqcGxhbnNvdXJjZSwgUGFyYW1MaXN0SW5mbyBib3VuZFBhcmFtcywKIAkJ CSAqIEJ1aWxkQ2FjaGVkUGxhbiB0byBkbyB0aGF0IGJ5IHBhc3NpbmcgTklMLgogCQkJICovCiAJ CQlxbGlzdCA9IE5JTDsKKworCQkJcGxhbi0+c3RhdHVzID0gUExBTl9DQUNIRV9TVEFUVVNfR0VO RVJJQ19QTEFOX0JVSUxEOwogCQl9CiAJfQogCkBAIC0xMzkwLDYgKzEzOTMsNyBAQCBHZXRDYWNo ZWRQbGFuKENhY2hlZFBsYW5Tb3VyY2UgKnBsYW5zb3VyY2UsIFBhcmFtTGlzdEluZm8gYm91bmRQ YXJhbXMsCiAJCXBsYW5zb3VyY2UtPnRvdGFsX2N1c3RvbV9jb3N0ICs9IGNhY2hlZF9wbGFuX2Nv c3QocGxhbiwgdHJ1ZSk7CiAKIAkJcGxhbnNvdXJjZS0+bnVtX2N1c3RvbV9wbGFucysrOworCQlw bGFuLT5zdGF0dXMgPSBQTEFOX0NBQ0hFX1NUQVRVU19DVVNUT01fUExBTjsKIAl9CiAJZWxzZQog CXsKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3V0aWxzL3BsYW5jYWNoZS5oIGIvc3JjL2luY2x1 ZGUvdXRpbHMvcGxhbmNhY2hlLmgKaW5kZXggZjFmYzc3MDczMy4uNzJiNzU2ODY0YiAxMDA2NDQK LS0tIGEvc3JjL2luY2x1ZGUvdXRpbHMvcGxhbmNhY2hlLmgKKysrIGIvc3JjL2luY2x1ZGUvdXRp bHMvcGxhbmNhY2hlLmgKQEAgLTM2LDYgKzM2LDE0IEBAIHR5cGVkZWYgZW51bQogCVBMQU5fQ0FD SEVfTU9ERV9GT1JDRV9DVVNUT01fUExBTiwKIH0JCQlQbGFuQ2FjaGVNb2RlOwogCit0eXBlZGVm IGVudW0KK3sKKwlQTEFOX0NBQ0hFX1NUQVRVU19VTktOT1dOID0gMCwKKwlQTEFOX0NBQ0hFX1NU QVRVU19DVVNUT01fUExBTiwKKwlQTEFOX0NBQ0hFX1NUQVRVU19HRU5FUklDX1BMQU5fQlVJTEQs CisJUExBTl9DQUNIRV9TVEFUVVNfR0VORVJJQ19QTEFOX1JFVVNFCit9CQkJUGxhbkNhY2hlU3Rh dHVzOworCiAvKiBHVUMgcGFyYW1ldGVyICovCiBleHRlcm4gUEdETExJTVBPUlQgaW50IHBsYW5f Y2FjaGVfbW9kZTsKIApAQCAtMTUzLDcgKzE2MSw3IEBAIHR5cGVkZWYgc3RydWN0IENhY2hlZFBs YW4KIAlMaXN0CSAgICpzdG10X2xpc3Q7CQkvKiBsaXN0IG9mIFBsYW5uZWRTdG10cyAqLwogCWJv b2wJCWlzX29uZXNob3Q7CQkvKiBpcyBpdCBhICJvbmVzaG90IiBwbGFuPyAqLwogCWJvb2wJCWlz X3NhdmVkOwkJLyogaXMgQ2FjaGVkUGxhbiBpbiBhIGxvbmctbGl2ZWQgY29udGV4dD8gKi8KLQli b29sCQlpc19yZXVzZWQ7CQkvKiBpcyBpdCBhIHJldXNlZCBnZW5lcmljIHBsYW4/ICovCisJUGxh bkNhY2hlU3RhdHVzIHN0YXR1czsJCS8qIGlzIGl0IGEgcmV1c2VkIGdlbmVyaWMgcGxhbj8gKi8K IAlib29sCQlpc192YWxpZDsJCS8qIGlzIHRoZSBzdG10X2xpc3QgY3VycmVudGx5IHZhbGlkPyAq LwogCU9pZAkJCXBsYW5Sb2xlSWQ7CQkvKiBSb2xlIElEIHRoZSBwbGFuIHdhcyBjcmVhdGVkIGZv ciAqLwogCWJvb2wJCWRlcGVuZHNPblJvbGU7CS8qIGlzIHBsYW4gc3BlY2lmaWMgdG8gdGhhdCBy b2xlPyAqLwpAQCAtMjU3LDcgKzI2NSw3IEBAIGV4dGVybiB2b2lkIEZyZWVDYWNoZWRFeHByZXNz aW9uKENhY2hlZEV4cHJlc3Npb24gKmNleHByKTsKIHN0YXRpYyBpbmxpbmUgYm9vbAogQ2FjaGVk UGxhblJlcXVpcmVzTG9ja2luZyhDYWNoZWRQbGFuICpjcGxhbikKIHsKLQlyZXR1cm4gIWNwbGFu LT5pc19vbmVzaG90ICYmIGNwbGFuLT5pc19yZXVzZWQ7CisJcmV0dXJuICFjcGxhbi0+aXNfb25l c2hvdCAmJiAoY3BsYW4tPnN0YXR1cyA9PSBQTEFOX0NBQ0hFX1NUQVRVU19HRU5FUklDX1BMQU5f UkVVU0UpOwogfQogCiAvKgotLSAKMi40Ny4xCgo= --000000000000e73b2f062f9ccb8f--