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 1rmSif-0080OP-TS for pgsql-hackers@arkaria.postgresql.org; Tue, 19 Mar 2024 06:13:06 +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 1rmSiZ-00A0V5-Ar for pgsql-hackers@arkaria.postgresql.org; Tue, 19 Mar 2024 06:12:59 +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 1rmSiY-00A0Uw-Hw for pgsql-hackers@lists.postgresql.org; Tue, 19 Mar 2024 06:12:59 +0000 Received: from mail-yw1-x1134.google.com ([2607:f8b0:4864:20::1134]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.94.2) (envelope-from ) id 1rmSiL-005Gld-8R for pgsql-hackers@postgresql.org; Tue, 19 Mar 2024 06:12:57 +0000 Received: by mail-yw1-x1134.google.com with SMTP id 00721157ae682-609f24f447cso57432417b3.2 for ; Mon, 18 Mar 2024 23:12:46 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1710828765; x=1711433565; darn=postgresql.org; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=G3uTV+meu2C+emhumBL9Btuo1lVXe7vnHv0Zdyyhx7U=; b=U8i+7f8zLpuzfLdalpGWRXNEoIIDB8iAPDP55qCH1lSvsnQkl39Jke/Q6vaiiQJ8fi XgZ+kLduBMGWNb9+NP6/Xo3tgM3PmikUOrPqoYzpryJqpLcL04PuOZPOp5MoBqBMhWf7 dE+6RuCouHOahL19AGTJ7ir8jRZi1aYcu6iWjTP6CAtuRxI7wYGOdCGVKM7sMGuSRJ4P OEI8Px/v3Pq3mkOCWb3J5aE15xNtsJOljqjHS1ttnyPnsqqqPgkgDuM2I9QaYhCiIgMz 7uDBnKBNHEEVWoAYyyZ/WxL0U/Kq+TuDM8onmkfqD3/ZUxlhpOF5pbbs1bdzul+uajK+ OQAA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1710828765; x=1711433565; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=G3uTV+meu2C+emhumBL9Btuo1lVXe7vnHv0Zdyyhx7U=; b=OcmOCe4SpPm128EiCl0tSRrfBLiHe3vrkaHc3pRqSMFA3Wg9bsItpgYbS/449cPoSZ HMk0/rnNEKBlhEQY8amH4ESRvpYqdmeu+R4b/dkjf7n+vD9aYqk6pUK8kBjkKfLyA3Yr 0sEJW1/hHryHWBSiTwEcKoMfPEG7LtwDPcH4ZdiRzEPpiJe6l7xUuhiB6ENIiFCaIbO7 h1cVRKUPptLapzW9UK14uwHqAA/In8hPkKywZzBwEKBGWAzfiNLcwG32UtUX+hoMBCZy wiun1sPgFnUD956qdNV8dpkDnQkTJZLru1XwyNe+EdX3dA6Whn1XbHIKOKuxtHDFWyXa OVAQ== X-Forwarded-Encrypted: i=1; AJvYcCW/Pe47jOhbKFqbZzearQbwPy0AkmHkWBrqC/4o0uyAeZqzUqzKOpsWaE6wu82pJkVBLegRh8yQD51HOk0R5yokiJP0j5CZTlwK5I1C X-Gm-Message-State: AOJu0YzNeTafYeGlpaytDwtvBTV9aJgwlSIk5lOACUczAaVBGy+YYgbX c81leaz1fEtJctJT49F61xOqOxlLClUsrhSIu7JHzmOLrRJsGK0Oa8GeSb/CRilk/MkLnKgdRFc z5ECrIVL53dzZYQeO17kFM3FgwqlwFeO4ndg= X-Google-Smtp-Source: AGHT+IH0bIhmLhlZCYqR6KRkRNyq/+WEUPYD8EchrziIO8TVz6WRtrIXM9Wy+juPbz9nRJAngGs9G2e+FDBBad0aGxY= X-Received: by 2002:a0d:fbc7:0:b0:609:fb3f:46d8 with SMTP id l190-20020a0dfbc7000000b00609fb3f46d8mr13417912ywf.19.1710828765650; Mon, 18 Mar 2024 23:12:45 -0700 (PDT) MIME-Version: 1.0 References: <600a153e-191b-952d-7090-cad5097b798f@gmail.com> In-Reply-To: From: Richard Guo Date: Tue, 19 Mar 2024 14:12:34 +0800 Message-ID: Subject: Re: Support run-time partition pruning for hash join To: vignesh C Cc: Alexander Lakhin , David Rowley , Andy Fan , PostgreSQL-development Content-Type: multipart/mixed; boundary="000000000000d9402c0613fd5cb9" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000d9402c0613fd5cb9 Content-Type: multipart/alternative; boundary="000000000000d9402b0613fd5cb7" --000000000000d9402b0613fd5cb7 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Tue, Jan 30, 2024 at 10:33=E2=80=AFAM Richard Guo wrote: > Attached is an updated patch. Nothing else has changed. > Here is another rebase over master so it applies again. Nothing else has changed. Thanks Richard --000000000000d9402b0613fd5cb7 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable

On Tue, Jan 30, 2024 at 10:33=E2=80=AFAM = Richard Guo <guofenglinux@gmai= l.com> wrote:
Attached is an updated pa= tch.=C2=A0 Nothing else has changed.
Here is another rebase over master so it applies again.=C2=A0 N= othing else
has changed.

Thanks
Richard
--000000000000d9402b0613fd5cb7-- --000000000000d9402c0613fd5cb9 Content-Type: application/octet-stream; name="v7-0001-Support-run-time-partition-pruning-for-hash-join.patch" Content-Disposition: attachment; filename="v7-0001-Support-run-time-partition-pruning-for-hash-join.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_ltxz9i0g0 RnJvbSA0NjVjOTZiMmM4NGRmMWM2ZGQyZmZhMzAwMTc1OWMyZjE4YWIzODY3IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBSaWNoYXJkIEd1byA8Z3VvZmVuZ2xpbnV4QGdtYWlsLmNvbT4K RGF0ZTogTW9uLCAxNCBBdWcgMjAyMyAxNDo1NToyNiArMDgwMApTdWJqZWN0OiBbUEFUQ0ggdjdd IFN1cHBvcnQgcnVuLXRpbWUgcGFydGl0aW9uIHBydW5pbmcgZm9yIGhhc2ggam9pbgoKSWYgd2Ug aGF2ZSBhIGhhc2ggam9pbiB3aXRoIGFuIEFwcGVuZCBub2RlIG9uIHRoZSBvdXRlciBzaWRlLCBz b21ldGhpbmcKbGlrZQoKIEhhc2ggSm9pbgogICBIYXNoIENvbmQ6IChwdC5hID0gdC5hKQogICAt PiAgQXBwZW5kCiAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwdF9wMSBwdF8xCiAgICAgICAgIC0+ ICBTZXEgU2NhbiBvbiBwdF9wMiBwdF8yCiAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwdF9wMyBw dF8zCiAgIC0+ICBIYXNoCiAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiB0CgpXZSBjYW4gYWN0dWFs bHkgcHJ1bmUgdGhvc2Ugc3Vibm9kZXMgb2YgdGhlIEFwcGVuZCB0aGF0IGNhbm5vdCBwb3NzaWJs eQpjb250YWluIGFueSBtYXRjaGluZyB0dXBsZXMgZnJvbSB0aGUgb3RoZXIgc2lkZSBvZiB0aGUg am9pbi4gIFRvIGRvCnRoYXQsIHdoZW4gYnVpbGRpbmcgdGhlIEhhc2ggdGFibGUsIGZvciBlYWNo IHJvdyBmcm9tIHRoZSBpbm5lciBzaWRlIHdlCmNhbiBjb21wdXRlIHRoZSBtaW5pbXVtIHNldCBv ZiBzdWJub2RlcyB0aGF0IGNhbiBwb3NzaWJseSBtYXRjaCB0aGUgam9pbgpjb25kaXRpb24uICBX aGVuIHdlIGhhdmUgYnVpbHQgdGhlIEhhc2ggdGFibGUgYW5kIHN0YXJ0IHRvIGV4ZWN1dGUgdGhl CkFwcGVuZCBub2RlLCB3ZSBzaG91bGQgaGF2ZSBrbm93biB3aGljaCBzdWJub2RlcyBhcmUgc3Vy dml2ZWQgYW5kIHRodXMKY2FuIHNraXAgb3RoZXIgc3Vibm9kZXMuCgpUaGlzIHBhdGNoIGltcGxl bWVudHMgdGhpcyBpZGVhLgotLS0KIHNyYy9iYWNrZW5kL2NvbW1hbmRzL2V4cGxhaW4uYyAgICAg ICAgICAgICAgICB8ICA2MSArKysrCiBzcmMvYmFja2VuZC9leGVjdXRvci9leGVjUGFydGl0aW9u LmMgICAgICAgICAgfCAxMjcgKysrKysrKy0KIHNyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVBcHBl bmQuYyAgICAgICAgICAgICB8ICAzMiArLQogc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZUhhc2gu YyAgICAgICAgICAgICAgIHwgIDc1ICsrKysrCiBzcmMvYmFja2VuZC9leGVjdXRvci9ub2RlSGFz aGpvaW4uYyAgICAgICAgICAgfCAgMTAgKwogc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZU1lcmdl QXBwZW5kLmMgICAgICAgIHwgIDIyICstCiBzcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9jb3N0 c2l6ZS5jICAgICAgICAgfCAxMDYgKysrKysrKwogc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4v Y3JlYXRlcGxhbi5jICAgICAgIHwgIDQ5ICsrLQogc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4v c2V0cmVmcy5jICAgICAgICAgIHwgIDYxICsrKysKIHNyYy9iYWNrZW5kL3BhcnRpdGlvbmluZy9w YXJ0cHJ1bmUuYyAgICAgICAgICB8IDI5OCArKysrKysrKysrKysrKysrLS0KIHNyYy9pbmNsdWRl L2V4ZWN1dG9yL2V4ZWNQYXJ0aXRpb24uaCAgICAgICAgICB8ICAxNyArLQogc3JjL2luY2x1ZGUv bm9kZXMvZXhlY25vZGVzLmggICAgICAgICAgICAgICAgIHwgICAzICsKIHNyYy9pbmNsdWRlL25v ZGVzL3BhdGhub2Rlcy5oICAgICAgICAgICAgICAgICB8ICAgMyArCiBzcmMvaW5jbHVkZS9ub2Rl cy9wbGFubm9kZXMuaCAgICAgICAgICAgICAgICAgfCAgMzYgKysrCiBzcmMvaW5jbHVkZS9vcHRp bWl6ZXIvY29zdC5oICAgICAgICAgICAgICAgICAgfCAgIDQgKwogc3JjL2luY2x1ZGUvcGFydGl0 aW9uaW5nL3BhcnRwcnVuZS5oICAgICAgICAgIHwgIDEyICstCiBzcmMvdGVzdC9yZWdyZXNzL2V4 cGVjdGVkL3BhcnRpdGlvbl9wcnVuZS5vdXQgfCAgODYgKysrKysKIHNyYy90ZXN0L3JlZ3Jlc3Mv c3FsL3BhcnRpdGlvbl9wcnVuZS5zcWwgICAgICB8ICAzOSArKysKIDE4IGZpbGVzIGNoYW5nZWQs IDk5MiBpbnNlcnRpb25zKCspLCA0OSBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9zcmMvYmFj a2VuZC9jb21tYW5kcy9leHBsYWluLmMgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9leHBsYWluLmMK aW5kZXggYTlkNTA1NmFmNC4uMGE1NTkxYjk1ZiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY29t bWFuZHMvZXhwbGFpbi5jCisrKyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2V4cGxhaW4uYwpAQCAt MTgsNiArMTgsNyBAQAogI2luY2x1ZGUgImNvbW1hbmRzL2NyZWF0ZWFzLmgiCiAjaW5jbHVkZSAi Y29tbWFuZHMvZGVmcmVtLmgiCiAjaW5jbHVkZSAiY29tbWFuZHMvcHJlcGFyZS5oIgorI2luY2x1 ZGUgImV4ZWN1dG9yL2V4ZWNQYXJ0aXRpb24uaCIKICNpbmNsdWRlICJmb3JlaWduL2Zkd2FwaS5o IgogI2luY2x1ZGUgImppdC9qaXQuaCIKICNpbmNsdWRlICJub2Rlcy9leHRlbnNpYmxlLmgiCkBA IC0xMTcsNiArMTE4LDkgQEAgc3RhdGljIHZvaWQgc2hvd19pbnN0cnVtZW50YXRpb25fY291bnQo Y29uc3QgY2hhciAqcWxhYmVsLCBpbnQgd2hpY2gsCiAJCQkJCQkJCQkgICBQbGFuU3RhdGUgKnBs YW5zdGF0ZSwgRXhwbGFpblN0YXRlICplcyk7CiBzdGF0aWMgdm9pZCBzaG93X2ZvcmVpZ25zY2Fu X2luZm8oRm9yZWlnblNjYW5TdGF0ZSAqZnNzdGF0ZSwgRXhwbGFpblN0YXRlICplcyk7CiBzdGF0 aWMgdm9pZCBzaG93X2V2YWxfcGFyYW1zKEJpdG1hcHNldCAqYm1zX3BhcmFtcywgRXhwbGFpblN0 YXRlICplcyk7CitzdGF0aWMgdm9pZCBzaG93X2pvaW5fcHJ1bmluZ19yZXN1bHRfaW5mbyhCaXRt YXBzZXQgKmpvaW5fcHJ1bmVfcGFyYW1pZHMsCisJCQkJCQkJCQkJICBFeHBsYWluU3RhdGUgKmVz KTsKK3N0YXRpYyB2b2lkIHNob3dfam9pbnBhcnRwcnVuZV9pbmZvKEhhc2hTdGF0ZSAqaGFzaHN0 YXRlLCBFeHBsYWluU3RhdGUgKmVzKTsKIHN0YXRpYyBjb25zdCBjaGFyICpleHBsYWluX2dldF9p bmRleF9uYW1lKE9pZCBpbmRleElkKTsKIHN0YXRpYyBib29sIHBlZWtfYnVmZmVyX3VzYWdlKEV4 cGxhaW5TdGF0ZSAqZXMsIGNvbnN0IEJ1ZmZlclVzYWdlICp1c2FnZSk7CiBzdGF0aWMgdm9pZCBz aG93X2J1ZmZlcl91c2FnZShFeHBsYWluU3RhdGUgKmVzLCBjb25zdCBCdWZmZXJVc2FnZSAqdXNh Z2UpOwpAQCAtMjExNSw5ICsyMTE5LDE3IEBAIEV4cGxhaW5Ob2RlKFBsYW5TdGF0ZSAqcGxhbnN0 YXRlLCBMaXN0ICphbmNlc3RvcnMsCiAJCQlzaG93X2luY3JlbWVudGFsX3NvcnRfaW5mbyhjYXN0 Tm9kZShJbmNyZW1lbnRhbFNvcnRTdGF0ZSwgcGxhbnN0YXRlKSwKIAkJCQkJCQkJCSAgIGVzKTsK IAkJCWJyZWFrOworCQljYXNlIFRfQXBwZW5kOgorCQkJaWYgKGVzLT52ZXJib3NlKQorCQkJCXNo b3dfam9pbl9wcnVuaW5nX3Jlc3VsdF9pbmZvKCgoQXBwZW5kICopIHBsYW4pLT5qb2luX3BydW5l X3BhcmFtaWRzLAorCQkJCQkJCQkJCQkgIGVzKTsKKwkJCWJyZWFrOwogCQljYXNlIFRfTWVyZ2VB cHBlbmQ6CiAJCQlzaG93X21lcmdlX2FwcGVuZF9rZXlzKGNhc3ROb2RlKE1lcmdlQXBwZW5kU3Rh dGUsIHBsYW5zdGF0ZSksCiAJCQkJCQkJCSAgIGFuY2VzdG9ycywgZXMpOworCQkJaWYgKGVzLT52 ZXJib3NlKQorCQkJCXNob3dfam9pbl9wcnVuaW5nX3Jlc3VsdF9pbmZvKCgoTWVyZ2VBcHBlbmQg KikgcGxhbiktPmpvaW5fcHJ1bmVfcGFyYW1pZHMsCisJCQkJCQkJCQkJCSAgZXMpOwogCQkJYnJl YWs7CiAJCWNhc2UgVF9SZXN1bHQ6CiAJCQlzaG93X3VwcGVyX3F1YWwoKExpc3QgKikgKChSZXN1 bHQgKikgcGxhbiktPnJlc2NvbnN0YW50cXVhbCwKQEAgLTIxMzMsNiArMjE0NSw4IEBAIEV4cGxh aW5Ob2RlKFBsYW5TdGF0ZSAqcGxhbnN0YXRlLCBMaXN0ICphbmNlc3RvcnMsCiAJCQlicmVhazsK IAkJY2FzZSBUX0hhc2g6CiAJCQlzaG93X2hhc2hfaW5mbyhjYXN0Tm9kZShIYXNoU3RhdGUsIHBs YW5zdGF0ZSksIGVzKTsKKwkJCWlmIChlcy0+dmVyYm9zZSkKKwkJCQlzaG93X2pvaW5wYXJ0cHJ1 bmVfaW5mbyhjYXN0Tm9kZShIYXNoU3RhdGUsIHBsYW5zdGF0ZSksIGVzKTsKIAkJCWJyZWFrOwog CQljYXNlIFRfTWVtb2l6ZToKIAkJCXNob3dfbWVtb2l6ZV9pbmZvKGNhc3ROb2RlKE1lbW9pemVT dGF0ZSwgcGxhbnN0YXRlKSwgYW5jZXN0b3JzLApAQCAtMzU3Myw2ICszNTg3LDUzIEBAIHNob3df ZXZhbF9wYXJhbXMoQml0bWFwc2V0ICpibXNfcGFyYW1zLCBFeHBsYWluU3RhdGUgKmVzKQogCQlF eHBsYWluUHJvcGVydHlMaXN0KCJQYXJhbXMgRXZhbHVhdGVkIiwgcGFyYW1zLCBlcyk7CiB9CiAK Ky8qCisgKiBTaG93IGpvaW4gcGFydGl0aW9uIHBydW5pbmcgcmVzdWx0cyBhdCBBcHBlbmQvTWVy Z2VBcHBlbmQgbm9kZXMuCisgKi8KK3N0YXRpYyB2b2lkCitzaG93X2pvaW5fcHJ1bmluZ19yZXN1 bHRfaW5mbyhCaXRtYXBzZXQgKmpvaW5fcHJ1bmVfcGFyYW1pZHMsIEV4cGxhaW5TdGF0ZSAqZXMp Cit7CisJaW50CQkJcGFyYW1pZCA9IC0xOworCUxpc3QJICAgKnBhcmFtcyA9IE5JTDsKKworCWlm IChibXNfaXNfZW1wdHkoam9pbl9wcnVuZV9wYXJhbWlkcykpCisJCXJldHVybjsKKworCXdoaWxl ICgocGFyYW1pZCA9IGJtc19uZXh0X21lbWJlcihqb2luX3BydW5lX3BhcmFtaWRzLCBwYXJhbWlk KSkgPj0gMCkKKwl7CisJCWNoYXIJCXBhcmFtWzMyXTsKKworCQlzbnByaW50ZihwYXJhbSwgc2l6 ZW9mKHBhcmFtKSwgIiQlZCIsIHBhcmFtaWQpOworCQlwYXJhbXMgPSBsYXBwZW5kKHBhcmFtcywg cHN0cmR1cChwYXJhbSkpOworCX0KKworCUV4cGxhaW5Qcm9wZXJ0eUxpc3QoIkpvaW4gUGFydGl0 aW9uIFBydW5pbmciLCBwYXJhbXMsIGVzKTsKK30KKworLyoKKyAqIFNob3cgam9pbiBwYXJ0aXRp b24gcHJ1bmluZyBpbmZvcyBhdCBIYXNoIG5vZGVzLgorICovCitzdGF0aWMgdm9pZAorc2hvd19q b2lucGFydHBydW5lX2luZm8oSGFzaFN0YXRlICpoYXNoc3RhdGUsIEV4cGxhaW5TdGF0ZSAqZXMp Cit7CisJTGlzdAkgICAqcGFyYW1zID0gTklMOworCUxpc3RDZWxsICAgKmxjOworCisJaWYgKCFo YXNoc3RhdGUtPmpvaW5wYXJ0cHJ1bmVfc3RhdGVfbGlzdCkKKwkJcmV0dXJuOworCisJZm9yZWFj aChsYywgaGFzaHN0YXRlLT5qb2lucGFydHBydW5lX3N0YXRlX2xpc3QpCisJeworCQlKb2luUGFy dGl0aW9uUHJ1bmVTdGF0ZSAqanBzdGF0ZSA9IChKb2luUGFydGl0aW9uUHJ1bmVTdGF0ZSAqKSBs Zmlyc3QobGMpOworCQljaGFyCQlwYXJhbVszMl07CisKKwkJc25wcmludGYocGFyYW0sIHNpemVv ZihwYXJhbSksICIkJWQiLCBqcHN0YXRlLT5wYXJhbWlkKTsKKwkJcGFyYW1zID0gbGFwcGVuZChw YXJhbXMsIHBzdHJkdXAocGFyYW0pKTsKKwl9CisKKwlFeHBsYWluUHJvcGVydHlMaXN0KCJQYXJ0 aXRpb24gUHJ1bmUiLCBwYXJhbXMsIGVzKTsKK30KKwogLyoKICAqIEZldGNoIHRoZSBuYW1lIG9m IGFuIGluZGV4IGluIGFuIEVYUExBSU4KICAqCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9leGVj dXRvci9leGVjUGFydGl0aW9uLmMgYi9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjUGFydGl0aW9u LmMKaW5kZXggNjRmY2IwMTJkYi4uZDcxNTgyNzk3MiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQv ZXhlY3V0b3IvZXhlY1BhcnRpdGlvbi5jCisrKyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNQ YXJ0aXRpb24uYwpAQCAtMTk2LDYgKzE5Niw4IEBAIHN0YXRpYyB2b2lkIGZpbmRfbWF0Y2hpbmdf c3VicGxhbnNfcmVjdXJzZShQYXJ0aXRpb25QcnVuaW5nRGF0YSAqcHJ1bmVkYXRhLAogCQkJCQkJ CQkJCSAgIFBhcnRpdGlvbmVkUmVsUHJ1bmluZ0RhdGEgKnBwcnVuZSwKIAkJCQkJCQkJCQkgICBi b29sIGluaXRpYWxfcHJ1bmUsCiAJCQkJCQkJCQkJICAgQml0bWFwc2V0ICoqdmFsaWRzdWJwbGFu cyk7CitzdGF0aWMgYm9vbCBnZXRfam9pbl9wcnVuZV9tYXRjaGluZ19zdWJwbGFucyhQbGFuU3Rh dGUgKnBsYW5zdGF0ZSwKKwkJCQkJCQkJCQkJIEJpdG1hcHNldCAqKnBhcnRzZXQpOwogCiAKIC8q CkBAIC0xODA1LDcgKzE4MDcsNyBAQCBFeGVjSW5pdFBhcnRpdGlvblBydW5pbmcoUGxhblN0YXRl ICpwbGFuc3RhdGUsCiAJICogUGVyZm9ybSBhbiBpbml0aWFsIHBhcnRpdGlvbiBwcnVuZSBwYXNz LCBpZiByZXF1aXJlZC4KIAkgKi8KIAlpZiAocHJ1bmVzdGF0ZS0+ZG9faW5pdGlhbF9wcnVuZSkK LQkJKmluaXRpYWxseV92YWxpZF9zdWJwbGFucyA9IEV4ZWNGaW5kTWF0Y2hpbmdTdWJQbGFucyhw cnVuZXN0YXRlLCB0cnVlKTsKKwkJKmluaXRpYWxseV92YWxpZF9zdWJwbGFucyA9IEV4ZWNGaW5k TWF0Y2hpbmdTdWJQbGFucyhwcnVuZXN0YXRlLCB0cnVlLCBOVUxMKTsKIAllbHNlCiAJewogCQkv KiBObyBwcnVuaW5nLCBzbyB3ZSdsbCBuZWVkIHRvIGluaXRpYWxpemUgYWxsIHN1YnBsYW5zICov CkBAIC0xODM1LDYgKzE4MzcsMzcgQEAgRXhlY0luaXRQYXJ0aXRpb25QcnVuaW5nKFBsYW5TdGF0 ZSAqcGxhbnN0YXRlLAogCXJldHVybiBwcnVuZXN0YXRlOwogfQogCisvKgorICogRXhlY0luaXRK b2lucGFydHBydW5lTGlzdAorICoJCUluaXRpYWxpemUgZGF0YSBzdHJ1Y3R1cmVzIG5lZWRlZCBm b3Igam9pbiBwYXJ0aXRpb24gcHJ1bmluZworICovCitMaXN0ICoKK0V4ZWNJbml0Sm9pbnBhcnRw cnVuZUxpc3QoUGxhblN0YXRlICpwbGFuc3RhdGUsCisJCQkJCQkgIExpc3QgKmpvaW5wYXJ0cHJ1 bmVfaW5mb19saXN0KQoreworCUxpc3RDZWxsICAgKmxjOworCUxpc3QJICAgKnJlc3VsdCA9IE5J TDsKKworCWZvcmVhY2gobGMsIGpvaW5wYXJ0cHJ1bmVfaW5mb19saXN0KQorCXsKKwkJSm9pblBh cnRpdGlvblBydW5lSW5mbyAqanBpbmZvID0gKEpvaW5QYXJ0aXRpb25QcnVuZUluZm8gKikgbGZp cnN0KGxjKTsKKwkJSm9pblBhcnRpdGlvblBydW5lU3RhdGUgKmpwc3RhdGUgPSBwYWxsb2Moc2l6 ZW9mKEpvaW5QYXJ0aXRpb25QcnVuZVN0YXRlKSk7CisKKwkJanBzdGF0ZS0+cGFydF9wcnVuZV9z dGF0ZSA9CisJCQlDcmVhdGVQYXJ0aXRpb25QcnVuZVN0YXRlKHBsYW5zdGF0ZSwganBpbmZvLT5w YXJ0X3BydW5lX2luZm8pOworCQlBc3NlcnQoanBzdGF0ZS0+cGFydF9wcnVuZV9zdGF0ZS0+ZG9f ZXhlY19wcnVuZSk7CisKKwkJanBzdGF0ZS0+cGFyYW1pZCA9IGpwaW5mby0+cGFyYW1pZDsKKwkJ anBzdGF0ZS0+bnBsYW5zID0ganBpbmZvLT5ucGxhbnM7CisJCWpwc3RhdGUtPmZpbmlzaGVkID0g ZmFsc2U7CisJCWpwc3RhdGUtPnBhcnRfcHJ1bmVfcmVzdWx0ID0gTlVMTDsKKworCQlyZXN1bHQg PSBsYXBwZW5kKHJlc3VsdCwganBzdGF0ZSk7CisJfQorCisJcmV0dXJuIHJlc3VsdDsKK30KKwog LyoKICAqIENyZWF0ZVBhcnRpdGlvblBydW5lU3RhdGUKICAqCQlCdWlsZCB0aGUgZGF0YSBzdHJ1 Y3R1cmUgcmVxdWlyZWQgZm9yIGNhbGxpbmcgRXhlY0ZpbmRNYXRjaGluZ1N1YlBsYW5zCkBAIC0y MjcyLDcgKzIzMDUsOSBAQCBQYXJ0aXRpb25QcnVuZUZpeFN1YlBsYW5NYXAoUGFydGl0aW9uUHJ1 bmVTdGF0ZSAqcHJ1bmVzdGF0ZSwKIC8qCiAgKiBFeGVjRmluZE1hdGNoaW5nU3ViUGxhbnMKICAq CQlEZXRlcm1pbmUgd2hpY2ggc3VicGxhbnMgbWF0Y2ggdGhlIHBydW5pbmcgc3RlcHMgZGV0YWls ZWQgaW4KLSAqCQkncHJ1bmVzdGF0ZScgZm9yIHRoZSBjdXJyZW50IGNvbXBhcmlzb24gZXhwcmVz c2lvbiB2YWx1ZXMuCisgKgkJJ3BydW5lc3RhdGUnIGlmIGFueSBmb3IgdGhlIGN1cnJlbnQgY29t cGFyaXNvbiBleHByZXNzaW9uIHZhbHVlcywgYW5kCisgKgkJbWVhbndoaWxlIG1hdGNoIHRoZSBq b2luIHBhcnRpdGlvbiBwcnVuaW5nIHJlc3VsdHMgaWYgYW55IHN0b3JlZCBpbgorICoJCUFwcGVu ZC9NZXJnZUFwcGVuZCBub2RlJ3Mgam9pbl9wcnVuZV9wYXJhbWlkcy4KICAqCiAgKiBQYXNzIGlu aXRpYWxfcHJ1bmUgaWYgUEFSQU1fRVhFQyBQYXJhbXMgY2Fubm90IHlldCBiZSBldmFsdWF0ZWQu ICBUaGlzCiAgKiBkaWZmZXJlbnRpYXRlcyB0aGUgaW5pdGlhbCBleGVjdXRvci10aW1lIHBydW5p bmcgc3RlcCBmcm9tIGxhdGVyCkBAIC0yMjgwLDExICsyMzE1LDMwIEBAIFBhcnRpdGlvblBydW5l Rml4U3ViUGxhbk1hcChQYXJ0aXRpb25QcnVuZVN0YXRlICpwcnVuZXN0YXRlLAogICovCiBCaXRt YXBzZXQgKgogRXhlY0ZpbmRNYXRjaGluZ1N1YlBsYW5zKFBhcnRpdGlvblBydW5lU3RhdGUgKnBy dW5lc3RhdGUsCi0JCQkJCQkgYm9vbCBpbml0aWFsX3BydW5lKQorCQkJCQkJIGJvb2wgaW5pdGlh bF9wcnVuZSwKKwkJCQkJCSBQbGFuU3RhdGUgKnBsYW5zdGF0ZSkKIHsKIAlCaXRtYXBzZXQgICpy ZXN1bHQgPSBOVUxMOwogCU1lbW9yeUNvbnRleHQgb2xkY29udGV4dDsKIAlpbnQJCQlpOworCUJp dG1hcHNldCAgKmpvaW5fcHJ1bmVfcGFydHNldCA9IE5VTEw7CisJYm9vbAkJZG9fam9pbl9wcnVu ZTsKKworCS8qIFJldHJpZXZlIHRoZSBqb2luIHBhcnRpdGlvbiBwcnVuaW5nIHJlc3VsdHMgaWYg YW55ICovCisJZG9fam9pbl9wcnVuZSA9CisJCWdldF9qb2luX3BydW5lX21hdGNoaW5nX3N1YnBs YW5zKHBsYW5zdGF0ZSwgJmpvaW5fcHJ1bmVfcGFydHNldCk7CisKKwkvKgorCSAqIEVpdGhlciB3 ZSdyZSBoZXJlIG9uIHBhcnRpdGlvbiBwcnVuZSBkb25lIGFjY29yZGluZyB0byB0aGUgcHJ1bmlu ZyBzdGVwcworCSAqIGRldGFpbGVkIGluICdwcnVuZXN0YXRlJywgb3Igd2UgaGF2ZSBkb25lIGpv aW4gcGFydGl0aW9uIHBydW5lLgorCSAqLworCUFzc2VydChkb19qb2luX3BydW5lIHx8IHBydW5l c3RhdGUgIT0gTlVMTCk7CisKKwkvKgorCSAqIElmIHRoZXJlIGlzIG5vICdwcnVuZXN0YXRlJywg dGhlbiByZWx5IGVudGlyZWx5IG9uIGpvaW4gcHJ1bmluZy4KKwkgKi8KKwlpZiAocHJ1bmVzdGF0 ZSA9PSBOVUxMKQorCQlyZXR1cm4gam9pbl9wcnVuZV9wYXJ0c2V0OwogCiAJLyoKIAkgKiBFaXRo ZXIgd2UncmUgaGVyZSBvbiB0aGUgaW5pdGlhbCBwcnVuZSBkb25lIGR1cmluZyBwcnVuaW5nCkBA IC0yMzI1LDYgKzIzNzksMTAgQEAgRXhlY0ZpbmRNYXRjaGluZ1N1YlBsYW5zKFBhcnRpdGlvblBy dW5lU3RhdGUgKnBydW5lc3RhdGUsCiAJLyogQWRkIGluIGFueSBzdWJwbGFucyB0aGF0IHBhcnRp dGlvbiBwcnVuaW5nIGRpZG4ndCBhY2NvdW50IGZvciAqLwogCXJlc3VsdCA9IGJtc19hZGRfbWVt YmVycyhyZXN1bHQsIHBydW5lc3RhdGUtPm90aGVyX3N1YnBsYW5zKTsKIAorCS8qIEludGVyc2Vj dCBqb2luIHBhcnRpdGlvbiBwcnVuaW5nIHJlc3VsdHMgKi8KKwlpZiAoZG9fam9pbl9wcnVuZSkK KwkJcmVzdWx0ID0gYm1zX2ludGVyc2VjdChyZXN1bHQsIGpvaW5fcHJ1bmVfcGFydHNldCk7CisK IAlNZW1vcnlDb250ZXh0U3dpdGNoVG8ob2xkY29udGV4dCk7CiAKIAkvKiBDb3B5IHJlc3VsdCBv dXQgb2YgdGhlIHRlbXAgY29udGV4dCBiZWZvcmUgd2UgcmVzZXQgaXQgKi8KQEAgLTIzOTUsMyAr MjQ1Myw2NiBAQCBmaW5kX21hdGNoaW5nX3N1YnBsYW5zX3JlY3Vyc2UoUGFydGl0aW9uUHJ1bmlu Z0RhdGEgKnBydW5lZGF0YSwKIAkJfQogCX0KIH0KKworLyoKKyAqIGdldF9qb2luX3BydW5lX21h dGNoaW5nX3N1YnBsYW5zCisgKgkJUmV0cmlldmUgdGhlIGpvaW4gcGFydGl0aW9uIHBydW5pbmcg cmVzdWx0cyBpZiBhbnkgc3RvcmVkIGluCisgKgkJQXBwZW5kL01lcmdlQXBwZW5kIG5vZGUncyBq b2luX3BydW5lX3BhcmFtaWRzLiAgUmV0dXJuIHRydWUgaWYgd2UgY2FuCisgKgkJZG8gam9pbiBw YXJ0aXRpb24gcHJ1bmluZywgb3RoZXJ3aXNlIHJldHVybiBmYWxzZS4KKyAqCisgKiBBZGRzIHZh bGlkIChub24tcHJ1bmFibGUpIHN1YnBsYW4gSURzIHRvICpwYXJ0c2V0CisgKi8KK3N0YXRpYyBi b29sCitnZXRfam9pbl9wcnVuZV9tYXRjaGluZ19zdWJwbGFucyhQbGFuU3RhdGUgKnBsYW5zdGF0 ZSwgQml0bWFwc2V0ICoqcGFydHNldCkKK3sKKwlCaXRtYXBzZXQgICpqb2luX3BydW5lX3BhcmFt aWRzOworCWludAkJCW5wbGFuczsKKwlpbnQJCQlwYXJhbWlkOworCisJaWYgKHBsYW5zdGF0ZSA9 PSBOVUxMKQorCQlyZXR1cm4gZmFsc2U7CisKKwlpZiAoSXNBKHBsYW5zdGF0ZSwgQXBwZW5kU3Rh dGUpKQorCXsKKwkJam9pbl9wcnVuZV9wYXJhbWlkcyA9CisJCQkoKEFwcGVuZCAqKSBwbGFuc3Rh dGUtPnBsYW4pLT5qb2luX3BydW5lX3BhcmFtaWRzOworCQlucGxhbnMgPSAoKEFwcGVuZFN0YXRl ICopIHBsYW5zdGF0ZSktPmFzX25wbGFuczsKKwl9CisJZWxzZSBpZiAoSXNBKHBsYW5zdGF0ZSwg TWVyZ2VBcHBlbmRTdGF0ZSkpCisJeworCQlqb2luX3BydW5lX3BhcmFtaWRzID0KKwkJCSgoTWVy Z2VBcHBlbmQgKikgcGxhbnN0YXRlLT5wbGFuKS0+am9pbl9wcnVuZV9wYXJhbWlkczsKKwkJbnBs YW5zID0gKChNZXJnZUFwcGVuZFN0YXRlICopIHBsYW5zdGF0ZSktPm1zX25wbGFuczsKKwl9CisJ ZWxzZQorCXsKKwkJZWxvZyhFUlJPUiwgInVucmVjb2duaXplZCBub2RlIHR5cGU6ICVkIiwgKGlu dCkgbm9kZVRhZyhwbGFuc3RhdGUpKTsKKwkJcmV0dXJuIGZhbHNlOworCX0KKworCWlmIChibXNf aXNfZW1wdHkoam9pbl9wcnVuZV9wYXJhbWlkcykpCisJCXJldHVybiBmYWxzZTsKKworCUFzc2Vy dChucGxhbnMgPiAwKTsKKwkqcGFydHNldCA9IGJtc19hZGRfcmFuZ2UoTlVMTCwgMCwgbnBsYW5z IC0gMSk7CisKKwlwYXJhbWlkID0gLTE7CisJd2hpbGUgKChwYXJhbWlkID0gYm1zX25leHRfbWVt YmVyKGpvaW5fcHJ1bmVfcGFyYW1pZHMsIHBhcmFtaWQpKSA+PSAwKQorCXsKKwkJUGFyYW1FeGVj RGF0YSAqcGFyYW07CisJCUpvaW5QYXJ0aXRpb25QcnVuZVN0YXRlICpqcHN0YXRlOworCisJCXBh cmFtID0gJihwbGFuc3RhdGUtPnN0YXRlLT5lc19wYXJhbV9leGVjX3ZhbHNbcGFyYW1pZF0pOwor CQlBc3NlcnQocGFyYW0tPmV4ZWNQbGFuID09IE5VTEwpOworCQlBc3NlcnQoIXBhcmFtLT5pc251 bGwpOworCQlqcHN0YXRlID0gKEpvaW5QYXJ0aXRpb25QcnVuZVN0YXRlICopIERhdHVtR2V0UG9p bnRlcihwYXJhbS0+dmFsdWUpOworCisJCWlmIChqcHN0YXRlICE9IE5VTEwpCisJCQkqcGFydHNl dCA9IGJtc19pbnRlcnNlY3QoKnBhcnRzZXQsIGpwc3RhdGUtPnBhcnRfcHJ1bmVfcmVzdWx0KTsK KwkJZWxzZQkvKiB0aGUgSGFzaCBub2RlIGZvciB0aGlzIHBydW5pbmcgaGFzIG5vdCBiZWVuIGV4 ZWN1dGVkICovCisJCQllbG9nKFdBUk5JTkcsICJKb2luIHBhcnRpdGlvbiBwcnVuaW5nICQlZCBo YXMgbm90IGJlZW4gcGVyZm9ybWVkIHlldC4iLAorCQkJCSBwYXJhbWlkKTsKKwl9CisKKwlyZXR1 cm4gdHJ1ZTsKK30KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVBcHBlbmQu YyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVBcHBlbmQuYwppbmRleCBjYTBmNTRkNjc2Li5j ZDVlYzU1MGZjIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9leGVjdXRvci9ub2RlQXBwZW5kLmMK KysrIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZUFwcGVuZC5jCkBAIC0xNTEsMTEgKzE1MSwx MyBAQCBFeGVjSW5pdEFwcGVuZChBcHBlbmQgKm5vZGUsIEVTdGF0ZSAqZXN0YXRlLCBpbnQgZWZs YWdzKQogCQlucGxhbnMgPSBibXNfbnVtX21lbWJlcnModmFsaWRzdWJwbGFucyk7CiAKIAkJLyoK LQkJICogV2hlbiBubyBydW4tdGltZSBwcnVuaW5nIGlzIHJlcXVpcmVkIGFuZCB0aGVyZSdzIGF0 IGxlYXN0IG9uZQotCQkgKiBzdWJwbGFuLCB3ZSBjYW4gZmlsbCBhc192YWxpZF9zdWJwbGFucyBp bW1lZGlhdGVseSwgcHJldmVudGluZwotCQkgKiBsYXRlciBjYWxscyB0byBFeGVjRmluZE1hdGNo aW5nU3ViUGxhbnMuCisJCSAqIFdoZW4gbm8gcnVuLXRpbWUgcHJ1bmluZyBvciBqb2luIHBydW5p bmcgaXMgcmVxdWlyZWQgYW5kIHRoZXJlJ3MgYXQKKwkJICogbGVhc3Qgb25lIHN1YnBsYW4sIHdl IGNhbiBmaWxsIGFzX3ZhbGlkX3N1YnBsYW5zIGltbWVkaWF0ZWx5LAorCQkgKiBwcmV2ZW50aW5n IGxhdGVyIGNhbGxzIHRvIEV4ZWNGaW5kTWF0Y2hpbmdTdWJQbGFucy4KIAkJICovCi0JCWlmICgh cHJ1bmVzdGF0ZS0+ZG9fZXhlY19wcnVuZSAmJiBucGxhbnMgPiAwKQorCQlpZiAoIXBydW5lc3Rh dGUtPmRvX2V4ZWNfcHJ1bmUgJiYKKwkJCWJtc19pc19lbXB0eShub2RlLT5qb2luX3BydW5lX3Bh cmFtaWRzKSAmJgorCQkJbnBsYW5zID4gMCkKIAkJewogCQkJYXBwZW5kc3RhdGUtPmFzX3ZhbGlk X3N1YnBsYW5zID0gYm1zX2FkZF9yYW5nZShOVUxMLCAwLCBucGxhbnMgLSAxKTsKIAkJCWFwcGVu ZHN0YXRlLT5hc192YWxpZF9zdWJwbGFuc19pZGVudGlmaWVkID0gdHJ1ZTsKQEAgLTE3MCwxMCAr MTcyLDE4IEBAIEV4ZWNJbml0QXBwZW5kKEFwcGVuZCAqbm9kZSwgRVN0YXRlICplc3RhdGUsIGlu dCBlZmxhZ3MpCiAJCSAqIHN1YnBsYW5zIGFzIHZhbGlkOyB0aGV5IG11c3QgYWxzbyBhbGwgYmUg aW5pdGlhbGl6ZWQuCiAJCSAqLwogCQlBc3NlcnQobnBsYW5zID4gMCk7Ci0JCWFwcGVuZHN0YXRl LT5hc192YWxpZF9zdWJwbGFucyA9IHZhbGlkc3VicGxhbnMgPQotCQkJYm1zX2FkZF9yYW5nZShO VUxMLCAwLCBucGxhbnMgLSAxKTsKLQkJYXBwZW5kc3RhdGUtPmFzX3ZhbGlkX3N1YnBsYW5zX2lk ZW50aWZpZWQgPSB0cnVlOworCQl2YWxpZHN1YnBsYW5zID0gYm1zX2FkZF9yYW5nZShOVUxMLCAw LCBucGxhbnMgLSAxKTsKIAkJYXBwZW5kc3RhdGUtPmFzX3BydW5lX3N0YXRlID0gTlVMTDsKKwor CQkvKgorCQkgKiBXaGVuIGpvaW4gcHJ1bmluZyBpcyBub3QgZW5hYmxlZCB3ZSBjYW4gZmlsbCBh c192YWxpZF9zdWJwbGFucworCQkgKiBpbW1lZGlhdGVseSwgcHJldmVudGluZyBsYXRlciBjYWxs cyB0byBFeGVjRmluZE1hdGNoaW5nU3ViUGxhbnMuCisJCSAqLworCQlpZiAoYm1zX2lzX2VtcHR5 KG5vZGUtPmpvaW5fcHJ1bmVfcGFyYW1pZHMpKQorCQl7CisJCQlhcHBlbmRzdGF0ZS0+YXNfdmFs aWRfc3VicGxhbnMgPSB2YWxpZHN1YnBsYW5zOworCQkJYXBwZW5kc3RhdGUtPmFzX3ZhbGlkX3N1 YnBsYW5zX2lkZW50aWZpZWQgPSB0cnVlOworCQl9CiAJfQogCiAJLyoKQEAgLTU4MCw3ICs1OTAs NyBAQCBjaG9vc2VfbmV4dF9zdWJwbGFuX2xvY2FsbHkoQXBwZW5kU3RhdGUgKm5vZGUpCiAJCWVs c2UgaWYgKCFub2RlLT5hc192YWxpZF9zdWJwbGFuc19pZGVudGlmaWVkKQogCQl7CiAJCQlub2Rl LT5hc192YWxpZF9zdWJwbGFucyA9Ci0JCQkJRXhlY0ZpbmRNYXRjaGluZ1N1YlBsYW5zKG5vZGUt PmFzX3BydW5lX3N0YXRlLCBmYWxzZSk7CisJCQkJRXhlY0ZpbmRNYXRjaGluZ1N1YlBsYW5zKG5v ZGUtPmFzX3BydW5lX3N0YXRlLCBmYWxzZSwgJm5vZGUtPnBzKTsKIAkJCW5vZGUtPmFzX3ZhbGlk X3N1YnBsYW5zX2lkZW50aWZpZWQgPSB0cnVlOwogCQl9CiAKQEAgLTY0Nyw3ICs2NTcsNyBAQCBj aG9vc2VfbmV4dF9zdWJwbGFuX2Zvcl9sZWFkZXIoQXBwZW5kU3RhdGUgKm5vZGUpCiAJCWlmICgh bm9kZS0+YXNfdmFsaWRfc3VicGxhbnNfaWRlbnRpZmllZCkKIAkJewogCQkJbm9kZS0+YXNfdmFs aWRfc3VicGxhbnMgPQotCQkJCUV4ZWNGaW5kTWF0Y2hpbmdTdWJQbGFucyhub2RlLT5hc19wcnVu ZV9zdGF0ZSwgZmFsc2UpOworCQkJCUV4ZWNGaW5kTWF0Y2hpbmdTdWJQbGFucyhub2RlLT5hc19w cnVuZV9zdGF0ZSwgZmFsc2UsICZub2RlLT5wcyk7CiAJCQlub2RlLT5hc192YWxpZF9zdWJwbGFu c19pZGVudGlmaWVkID0gdHJ1ZTsKIAogCQkJLyoKQEAgLTcyMyw3ICs3MzMsNyBAQCBjaG9vc2Vf bmV4dF9zdWJwbGFuX2Zvcl93b3JrZXIoQXBwZW5kU3RhdGUgKm5vZGUpCiAJZWxzZSBpZiAoIW5v ZGUtPmFzX3ZhbGlkX3N1YnBsYW5zX2lkZW50aWZpZWQpCiAJewogCQlub2RlLT5hc192YWxpZF9z dWJwbGFucyA9Ci0JCQlFeGVjRmluZE1hdGNoaW5nU3ViUGxhbnMobm9kZS0+YXNfcHJ1bmVfc3Rh dGUsIGZhbHNlKTsKKwkJCUV4ZWNGaW5kTWF0Y2hpbmdTdWJQbGFucyhub2RlLT5hc19wcnVuZV9z dGF0ZSwgZmFsc2UsICZub2RlLT5wcyk7CiAJCW5vZGUtPmFzX3ZhbGlkX3N1YnBsYW5zX2lkZW50 aWZpZWQgPSB0cnVlOwogCiAJCW1hcmtfaW52YWxpZF9zdWJwbGFuc19hc19maW5pc2hlZChub2Rl KTsKQEAgLTg3Niw3ICs4ODYsNyBAQCBFeGVjQXBwZW5kQXN5bmNCZWdpbihBcHBlbmRTdGF0ZSAq bm9kZSkKIAlpZiAoIW5vZGUtPmFzX3ZhbGlkX3N1YnBsYW5zX2lkZW50aWZpZWQpCiAJewogCQlu b2RlLT5hc192YWxpZF9zdWJwbGFucyA9Ci0JCQlFeGVjRmluZE1hdGNoaW5nU3ViUGxhbnMobm9k ZS0+YXNfcHJ1bmVfc3RhdGUsIGZhbHNlKTsKKwkJCUV4ZWNGaW5kTWF0Y2hpbmdTdWJQbGFucyhu b2RlLT5hc19wcnVuZV9zdGF0ZSwgZmFsc2UsICZub2RlLT5wcyk7CiAJCW5vZGUtPmFzX3ZhbGlk X3N1YnBsYW5zX2lkZW50aWZpZWQgPSB0cnVlOwogCiAJCWNsYXNzaWZ5X21hdGNoaW5nX3N1YnBs YW5zKG5vZGUpOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZUhhc2guYyBi L3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVIYXNoLmMKaW5kZXggNjE0ODA3MzNhMS4uMzk2NThi OWZjNSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZUhhc2guYworKysgYi9z cmMvYmFja2VuZC9leGVjdXRvci9ub2RlSGFzaC5jCkBAIC0zMCw2ICszMCw3IEBACiAjaW5jbHVk ZSAiYWNjZXNzL3BhcmFsbGVsLmgiCiAjaW5jbHVkZSAiY2F0YWxvZy9wZ19zdGF0aXN0aWMuaCIK ICNpbmNsdWRlICJjb21tYW5kcy90YWJsZXNwYWNlLmgiCisjaW5jbHVkZSAiZXhlY3V0b3IvZXhl Y1BhcnRpdGlvbi5oIgogI2luY2x1ZGUgImV4ZWN1dG9yL2V4ZWN1dG9yLmgiCiAjaW5jbHVkZSAi ZXhlY3V0b3IvaGFzaGpvaW4uaCIKICNpbmNsdWRlICJleGVjdXRvci9ub2RlSGFzaC5oIgpAQCAt NDcsNiArNDgsOCBAQCBzdGF0aWMgdm9pZCBFeGVjSGFzaEluY3JlYXNlTnVtQmF0Y2hlcyhIYXNo Sm9pblRhYmxlIGhhc2h0YWJsZSk7CiBzdGF0aWMgdm9pZCBFeGVjSGFzaEluY3JlYXNlTnVtQnVj a2V0cyhIYXNoSm9pblRhYmxlIGhhc2h0YWJsZSk7CiBzdGF0aWMgdm9pZCBFeGVjUGFyYWxsZWxI YXNoSW5jcmVhc2VOdW1CYXRjaGVzKEhhc2hKb2luVGFibGUgaGFzaHRhYmxlKTsKIHN0YXRpYyB2 b2lkIEV4ZWNQYXJhbGxlbEhhc2hJbmNyZWFzZU51bUJ1Y2tldHMoSGFzaEpvaW5UYWJsZSBoYXNo dGFibGUpOworc3RhdGljIHZvaWQgRXhlY0pvaW5QYXJ0aXRpb25QcnVuZShIYXNoU3RhdGUgKm5v ZGUpOworc3RhdGljIHZvaWQgRXhlY1N0b3JlSm9pblBhcnRpdGlvblBydW5lUmVzdWx0KEhhc2hT dGF0ZSAqbm9kZSk7CiBzdGF0aWMgdm9pZCBFeGVjSGFzaEJ1aWxkU2tld0hhc2goSGFzaEpvaW5U YWJsZSBoYXNodGFibGUsIEhhc2ggKm5vZGUsCiAJCQkJCQkJCSAgaW50IG1jdnNUb1VzZSk7CiBz dGF0aWMgdm9pZCBFeGVjSGFzaFNrZXdUYWJsZUluc2VydChIYXNoSm9pblRhYmxlIGhhc2h0YWJs ZSwKQEAgLTE4OCw4ICsxOTEsMTQgQEAgTXVsdGlFeGVjUHJpdmF0ZUhhc2goSGFzaFN0YXRlICpu b2RlKQogCQkJfQogCQkJaGFzaHRhYmxlLT50b3RhbFR1cGxlcyArPSAxOwogCQl9CisKKwkJLyog UGVyZm9ybSBqb2luIHBhcnRpdGlvbiBwcnVuaW5nICovCisJCUV4ZWNKb2luUGFydGl0aW9uUHJ1 bmUobm9kZSk7CiAJfQogCisJLyogU3RvcmUgdGhlIHN1cnZpdmluZyBwYXJ0aXRpb25zIGZvciBB cHBlbmQvTWVyZ2VBcHBlbmQgbm9kZXMgKi8KKwlFeGVjU3RvcmVKb2luUGFydGl0aW9uUHJ1bmVS ZXN1bHQobm9kZSk7CisKIAkvKiByZXNpemUgdGhlIGhhc2ggdGFibGUgaWYgbmVlZGVkIChOVFVQ X1BFUl9CVUNLRVQgZXhjZWVkZWQpICovCiAJaWYgKGhhc2h0YWJsZS0+bmJ1Y2tldHMgIT0gaGFz aHRhYmxlLT5uYnVja2V0c19vcHRpbWFsKQogCQlFeGVjSGFzaEluY3JlYXNlTnVtQnVja2V0cyho YXNodGFibGUpOwpAQCAtNDAwLDYgKzQwOSwxMiBAQCBFeGVjSW5pdEhhc2goSGFzaCAqbm9kZSwg RVN0YXRlICplc3RhdGUsIGludCBlZmxhZ3MpCiAJaGFzaHN0YXRlLT5oYXNoa2V5cyA9CiAJCUV4 ZWNJbml0RXhwckxpc3Qobm9kZS0+aGFzaGtleXMsIChQbGFuU3RhdGUgKikgaGFzaHN0YXRlKTsK IAorCS8qCisJICogaW5pdGlhbGl6ZSBqb2luIHBhcnRpdGlvbiBwcnVuaW5nIGluZm9zCisJICov CisJaGFzaHN0YXRlLT5qb2lucGFydHBydW5lX3N0YXRlX2xpc3QgPQorCQlFeGVjSW5pdEpvaW5w YXJ0cHJ1bmVMaXN0KCZoYXNoc3RhdGUtPnBzLCBub2RlLT5qb2lucGFydHBydW5lX2luZm9fbGlz dCk7CisKIAlyZXR1cm4gaGFzaHN0YXRlOwogfQogCkBAIC0xNjA5LDYgKzE2MjQsNTYgQEAgRXhl Y1BhcmFsbGVsSGFzaEluY3JlYXNlTnVtQnVja2V0cyhIYXNoSm9pblRhYmxlIGhhc2h0YWJsZSkK IAl9CiB9CiAKKy8qCisgKiBFeGVjSm9pblBhcnRpdGlvblBydW5lCisgKgkJUGVyZm9ybSBqb2lu IHBhcnRpdGlvbiBwcnVuaW5nIGF0IHRoaXMgam9pbiBmb3IgZWFjaAorICoJCUpvaW5QYXJ0aXRp b25QcnVuZVN0YXRlLgorICovCitzdGF0aWMgdm9pZAorRXhlY0pvaW5QYXJ0aXRpb25QcnVuZShI YXNoU3RhdGUgKm5vZGUpCit7CisJTGlzdENlbGwgICAqbGM7CisKKwlmb3JlYWNoKGxjLCBub2Rl LT5qb2lucGFydHBydW5lX3N0YXRlX2xpc3QpCisJeworCQlKb2luUGFydGl0aW9uUHJ1bmVTdGF0 ZSAqanBzdGF0ZSA9IChKb2luUGFydGl0aW9uUHJ1bmVTdGF0ZSAqKSBsZmlyc3QobGMpOworCQlC aXRtYXBzZXQJICAgKm1hdGNoaW5nX3N1YlBsYW5zOworCisJCWlmIChqcHN0YXRlLT5maW5pc2hl ZCkKKwkJCWNvbnRpbnVlOworCisJCW1hdGNoaW5nX3N1YlBsYW5zID0KKwkJCUV4ZWNGaW5kTWF0 Y2hpbmdTdWJQbGFucyhqcHN0YXRlLT5wYXJ0X3BydW5lX3N0YXRlLCBmYWxzZSwgTlVMTCk7CisJ CWpwc3RhdGUtPnBhcnRfcHJ1bmVfcmVzdWx0ID0KKwkJCWJtc19hZGRfbWVtYmVycyhqcHN0YXRl LT5wYXJ0X3BydW5lX3Jlc3VsdCwgbWF0Y2hpbmdfc3ViUGxhbnMpOworCisJCWlmIChibXNfbnVt X21lbWJlcnMoanBzdGF0ZS0+cGFydF9wcnVuZV9yZXN1bHQpID09IGpwc3RhdGUtPm5wbGFucykK KwkJCWpwc3RhdGUtPmZpbmlzaGVkID0gdHJ1ZTsKKwl9Cit9CisKKy8qCisgKiBFeGVjU3RvcmVK b2luUGFydGl0aW9uUHJ1bmVSZXN1bHQKKyAqCQlGb3IgZWFjaCBKb2luUGFydGl0aW9uUHJ1bmVT dGF0ZSwgc3RvcmUgdGhlIHNldCBvZiBzdXJ2aXZpbmcgcGFydGl0aW9ucworICoJCXRvIG1ha2Ug aXQgYXZhaWxhYmxlIGZvciB0aGUgQXBwZW5kL01lcmdlQXBwZW5kIG5vZGUuCisgKi8KK3N0YXRp YyB2b2lkCitFeGVjU3RvcmVKb2luUGFydGl0aW9uUHJ1bmVSZXN1bHQoSGFzaFN0YXRlICpub2Rl KQoreworCUxpc3RDZWxsICAgKmxjOworCisJZm9yZWFjaChsYywgbm9kZS0+am9pbnBhcnRwcnVu ZV9zdGF0ZV9saXN0KQorCXsKKwkJSm9pblBhcnRpdGlvblBydW5lU3RhdGUgKmpwc3RhdGUgPSAo Sm9pblBhcnRpdGlvblBydW5lU3RhdGUgKikgbGZpcnN0KGxjKTsKKwkJUGFyYW1FeGVjRGF0YQkg ICAqcGFyYW07CisKKwkJcGFyYW0gPSAmKG5vZGUtPnBzLnN0YXRlLT5lc19wYXJhbV9leGVjX3Zh bHNbanBzdGF0ZS0+cGFyYW1pZF0pOworCQlBc3NlcnQocGFyYW0tPmV4ZWNQbGFuID09IE5VTEwp OworCQlBc3NlcnQoIXBhcmFtLT5pc251bGwpOworCQlwYXJhbS0+dmFsdWUgPSBQb2ludGVyR2V0 RGF0dW0oanBzdGF0ZSk7CisJfQorfQorCiAvKgogICogRXhlY0hhc2hUYWJsZUluc2VydAogICoJ CWluc2VydCBhIHR1cGxlIGludG8gdGhlIGhhc2ggdGFibGUgZGVwZW5kaW5nIG9uIHRoZSBoYXNo IHZhbHVlCkBAIC0yMzUzLDYgKzI0MTgsMTYgQEAgdm9pZAogRXhlY1JlU2Nhbkhhc2goSGFzaFN0 YXRlICpub2RlKQogewogCVBsYW5TdGF0ZSAgKm91dGVyUGxhbiA9IG91dGVyUGxhblN0YXRlKG5v ZGUpOworCUxpc3RDZWxsICAgKmxjOworCisJLyogcmVzZXQgdGhlIHN0YXRlIGluIEpvaW5QYXJ0 aXRpb25QcnVuZVN0YXRlcyAqLworCWZvcmVhY2gobGMsIG5vZGUtPmpvaW5wYXJ0cHJ1bmVfc3Rh dGVfbGlzdCkKKwl7CisJCUpvaW5QYXJ0aXRpb25QcnVuZVN0YXRlICpqcHN0YXRlID0gKEpvaW5Q YXJ0aXRpb25QcnVuZVN0YXRlICopIGxmaXJzdChsYyk7CisKKwkJanBzdGF0ZS0+ZmluaXNoZWQg PSBmYWxzZTsKKwkJanBzdGF0ZS0+cGFydF9wcnVuZV9yZXN1bHQgPSBOVUxMOworCX0KIAogCS8q CiAJICogaWYgY2hnUGFyYW0gb2Ygc3Vibm9kZSBpcyBub3QgbnVsbCB0aGVuIHBsYW4gd2lsbCBi ZSByZS1zY2FubmVkIGJ5CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9leGVjdXRvci9ub2RlSGFz aGpvaW4uYyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVIYXNoam9pbi5jCmluZGV4IGRiZjEx NGNkNWUuLjJhOWQyYzY0ODIgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVI YXNoam9pbi5jCisrKyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVIYXNoam9pbi5jCkBAIC0z MTAsNiArMzEwLDE2IEBAIEV4ZWNIYXNoSm9pbkltcGwoUGxhblN0YXRlICpwc3RhdGUsIGJvb2wg cGFyYWxsZWwpCiAJCQkJCSAqLwogCQkJCQlub2RlLT5oal9GaXJzdE91dGVyVHVwbGVTbG90ID0g TlVMTDsKIAkJCQl9CisJCQkJZWxzZSBpZiAoaGFzaE5vZGUtPmpvaW5wYXJ0cHJ1bmVfc3RhdGVf bGlzdCAhPSBOSUwpCisJCQkJeworCQkJCQkvKgorCQkJCQkgKiBHaXZlIHRoZSBoYXNoIG5vZGUg YSBjaGFuY2UgdG8gcnVuIGpvaW4gcGFydGl0aW9uCisJCQkJCSAqIHBydW5pbmcgaWYgdGhlcmUg aXMgYW55IEpvaW5QYXJ0aXRpb25QcnVuZVN0YXRlIHRoYXQgY2FuCisJCQkJCSAqIGJlIGV2YWx1 YXRlZCBhdCBpdC4gIFNvIGRvIG5vdCBhcHBseSB0aGUgZW1wdHktb3V0ZXIKKwkJCQkJICogb3B0 aW1pemF0aW9uIGluIHRoaXMgY2FzZS4KKwkJCQkJICovCisJCQkJCW5vZGUtPmhqX0ZpcnN0T3V0 ZXJUdXBsZVNsb3QgPSBOVUxMOworCQkJCX0KIAkJCQllbHNlIGlmIChISl9GSUxMX09VVEVSKG5v ZGUpIHx8CiAJCQkJCQkgKG91dGVyTm9kZS0+cGxhbi0+c3RhcnR1cF9jb3N0IDwgaGFzaE5vZGUt PnBzLnBsYW4tPnRvdGFsX2Nvc3QgJiYKIAkJCQkJCSAgIW5vZGUtPmhqX091dGVyTm90RW1wdHkp KQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZU1lcmdlQXBwZW5kLmMgYi9z cmMvYmFja2VuZC9leGVjdXRvci9ub2RlTWVyZ2VBcHBlbmQuYwppbmRleCBlMWI5Yjk4NGE3Li5k ZjkyMWFkNWFkIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9leGVjdXRvci9ub2RlTWVyZ2VBcHBl bmQuYworKysgYi9zcmMvYmFja2VuZC9leGVjdXRvci9ub2RlTWVyZ2VBcHBlbmQuYwpAQCAtOTks MTEgKzk5LDEzIEBAIEV4ZWNJbml0TWVyZ2VBcHBlbmQoTWVyZ2VBcHBlbmQgKm5vZGUsIEVTdGF0 ZSAqZXN0YXRlLCBpbnQgZWZsYWdzKQogCQlucGxhbnMgPSBibXNfbnVtX21lbWJlcnModmFsaWRz dWJwbGFucyk7CiAKIAkJLyoKLQkJICogV2hlbiBubyBydW4tdGltZSBwcnVuaW5nIGlzIHJlcXVp cmVkIGFuZCB0aGVyZSdzIGF0IGxlYXN0IG9uZQotCQkgKiBzdWJwbGFuLCB3ZSBjYW4gZmlsbCBt c192YWxpZF9zdWJwbGFucyBpbW1lZGlhdGVseSwgcHJldmVudGluZwotCQkgKiBsYXRlciBjYWxs cyB0byBFeGVjRmluZE1hdGNoaW5nU3ViUGxhbnMuCisJCSAqIFdoZW4gbm8gcnVuLXRpbWUgcHJ1 bmluZyBvciBqb2luIHBydW5pbmcgaXMgcmVxdWlyZWQgYW5kIHRoZXJlJ3MgYXQKKwkJICogbGVh c3Qgb25lIHN1YnBsYW4sIHdlIGNhbiBmaWxsIG1zX3ZhbGlkX3N1YnBsYW5zIGltbWVkaWF0ZWx5 LAorCQkgKiBwcmV2ZW50aW5nIGxhdGVyIGNhbGxzIHRvIEV4ZWNGaW5kTWF0Y2hpbmdTdWJQbGFu cy4KIAkJICovCi0JCWlmICghcHJ1bmVzdGF0ZS0+ZG9fZXhlY19wcnVuZSAmJiBucGxhbnMgPiAw KQorCQlpZiAoIXBydW5lc3RhdGUtPmRvX2V4ZWNfcHJ1bmUgJiYKKwkJCWJtc19pc19lbXB0eShu b2RlLT5qb2luX3BydW5lX3BhcmFtaWRzKSAmJgorCQkJbnBsYW5zID4gMCkKIAkJCW1lcmdlc3Rh dGUtPm1zX3ZhbGlkX3N1YnBsYW5zID0gYm1zX2FkZF9yYW5nZShOVUxMLCAwLCBucGxhbnMgLSAx KTsKIAl9CiAJZWxzZQpAQCAtMTE1LDkgKzExNywxNSBAQCBFeGVjSW5pdE1lcmdlQXBwZW5kKE1l cmdlQXBwZW5kICpub2RlLCBFU3RhdGUgKmVzdGF0ZSwgaW50IGVmbGFncykKIAkJICogc3VicGxh bnMgYXMgdmFsaWQ7IHRoZXkgbXVzdCBhbHNvIGFsbCBiZSBpbml0aWFsaXplZC4KIAkJICovCiAJ CUFzc2VydChucGxhbnMgPiAwKTsKLQkJbWVyZ2VzdGF0ZS0+bXNfdmFsaWRfc3VicGxhbnMgPSB2 YWxpZHN1YnBsYW5zID0KLQkJCWJtc19hZGRfcmFuZ2UoTlVMTCwgMCwgbnBsYW5zIC0gMSk7CisJ CXZhbGlkc3VicGxhbnMgPSBibXNfYWRkX3JhbmdlKE5VTEwsIDAsIG5wbGFucyAtIDEpOwogCQlt ZXJnZXN0YXRlLT5tc19wcnVuZV9zdGF0ZSA9IE5VTEw7CisKKwkJLyoKKwkJICogV2hlbiBqb2lu IHBydW5pbmcgaXMgbm90IGVuYWJsZWQgd2UgY2FuIGZpbGwgbXNfdmFsaWRfc3VicGxhbnMKKwkJ ICogaW1tZWRpYXRlbHksIHByZXZlbnRpbmcgbGF0ZXIgY2FsbHMgdG8gRXhlY0ZpbmRNYXRjaGlu Z1N1YlBsYW5zLgorCQkgKi8KKwkJaWYgKGJtc19pc19lbXB0eShub2RlLT5qb2luX3BydW5lX3Bh cmFtaWRzKSkKKwkJCW1lcmdlc3RhdGUtPm1zX3ZhbGlkX3N1YnBsYW5zID0gdmFsaWRzdWJwbGFu czsKIAl9CiAKIAltZXJnZXBsYW5zdGF0ZXMgPSAoUGxhblN0YXRlICoqKSBwYWxsb2MobnBsYW5z ICogc2l6ZW9mKFBsYW5TdGF0ZSAqKSk7CkBAIC0yMTgsNyArMjI2LDcgQEAgRXhlY01lcmdlQXBw ZW5kKFBsYW5TdGF0ZSAqcHN0YXRlKQogCQkgKi8KIAkJaWYgKG5vZGUtPm1zX3ZhbGlkX3N1YnBs YW5zID09IE5VTEwpCiAJCQlub2RlLT5tc192YWxpZF9zdWJwbGFucyA9Ci0JCQkJRXhlY0ZpbmRN YXRjaGluZ1N1YlBsYW5zKG5vZGUtPm1zX3BydW5lX3N0YXRlLCBmYWxzZSk7CisJCQkJRXhlY0Zp bmRNYXRjaGluZ1N1YlBsYW5zKG5vZGUtPm1zX3BydW5lX3N0YXRlLCBmYWxzZSwgJm5vZGUtPnBz KTsKIAogCQkvKgogCQkgKiBGaXJzdCB0aW1lIHRocm91Z2g6IHB1bGwgdGhlIGZpcnN0IHR1cGxl IGZyb20gZWFjaCB2YWxpZCBzdWJwbGFuLApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvb3B0aW1p emVyL3BhdGgvY29zdHNpemUuYyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL2Nvc3RzaXpl LmMKaW5kZXggODNhMGFlZDA1MS4uMzgyNDEzZTY2NiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQv b3B0aW1pemVyL3BhdGgvY29zdHNpemUuYworKysgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0 aC9jb3N0c2l6ZS5jCkBAIC0xNzIsNiArMTcyLDEwIEBAIHN0YXRpYyB2b2lkIGdldF9yZXN0cmlj dGlvbl9xdWFsX2Nvc3QoUGxhbm5lckluZm8gKnJvb3QsIFJlbE9wdEluZm8gKmJhc2VyZWwsCiBz dGF0aWMgYm9vbCBoYXNfaW5kZXhlZF9qb2luX3F1YWxzKE5lc3RQYXRoICpwYXRoKTsKIHN0YXRp YyBkb3VibGUgYXBwcm94X3R1cGxlX2NvdW50KFBsYW5uZXJJbmZvICpyb290LCBKb2luUGF0aCAq cGF0aCwKIAkJCQkJCQkJIExpc3QgKnF1YWxzKTsKK3N0YXRpYyBkb3VibGUgZ2V0X2pvaW5yZWxf bWF0Y2hpbmdfb3V0ZXJfc2l6ZShQbGFubmVySW5mbyAqcm9vdCwKKwkJCQkJCQkJCQkJICBSZWxP cHRJbmZvICpvdXRlcl9yZWwsCisJCQkJCQkJCQkJCSAgUmVsaWRzIGlubmVyX3JlbGlkcywKKwkJ CQkJCQkJCQkJICBMaXN0ICpyZXN0cmljdGxpc3QpOwogc3RhdGljIGRvdWJsZSBjYWxjX2pvaW5y ZWxfc2l6ZV9lc3RpbWF0ZShQbGFubmVySW5mbyAqcm9vdCwKIAkJCQkJCQkJCQkgUmVsT3B0SW5m byAqam9pbnJlbCwKIAkJCQkJCQkJCQkgUmVsT3B0SW5mbyAqb3V0ZXJfcmVsLApAQCAtNTQwOCw2 ICs1NDEyLDYxIEBAIGdldF9wYXJhbWV0ZXJpemVkX2pvaW5yZWxfc2l6ZShQbGFubmVySW5mbyAq cm9vdCwgUmVsT3B0SW5mbyAqcmVsLAogCXJldHVybiBucm93czsKIH0KIAorLyoKKyAqIGdldF9q b2lucmVsX21hdGNoaW5nX291dGVyX3NpemUKKyAqCQlNYWtlIGEgc2l6ZSBlc3RpbWF0ZSBmb3Ig dGhlIG91dGVyIHNpZGUgdGhhdCBtYXRjaGVzIHRoZSBpbm5lciBzaWRlLgorICovCitzdGF0aWMg ZG91YmxlCitnZXRfam9pbnJlbF9tYXRjaGluZ19vdXRlcl9zaXplKFBsYW5uZXJJbmZvICpyb290 LAorCQkJCQkJCQlSZWxPcHRJbmZvICpvdXRlcl9yZWwsCisJCQkJCQkJCVJlbGlkcyBpbm5lcl9y ZWxpZHMsCisJCQkJCQkJCUxpc3QgKnJlc3RyaWN0bGlzdCkKK3sKKwlkb3VibGUJCW5yb3dzOwor CVNlbGVjdGl2aXR5IGZrc2VsZWM7CisJU2VsZWN0aXZpdHkganNlbGVjOworCVNwZWNpYWxKb2lu SW5mbyAqc2ppbmZvOworCVNwZWNpYWxKb2luSW5mbyBzamluZm9fZGF0YTsKKworCXNqaW5mbyA9 ICZzamluZm9fZGF0YTsKKwlzamluZm8tPnR5cGUgPSBUX1NwZWNpYWxKb2luSW5mbzsKKwlzamlu Zm8tPm1pbl9sZWZ0aGFuZCA9IG91dGVyX3JlbC0+cmVsaWRzOworCXNqaW5mby0+bWluX3JpZ2h0 aGFuZCA9IGlubmVyX3JlbGlkczsKKwlzamluZm8tPnN5bl9sZWZ0aGFuZCA9IG91dGVyX3JlbC0+ cmVsaWRzOworCXNqaW5mby0+c3luX3JpZ2h0aGFuZCA9IGlubmVyX3JlbGlkczsKKwlzamluZm8t PmpvaW50eXBlID0gSk9JTl9TRU1JOworCXNqaW5mby0+b2pyZWxpZCA9IDA7CisJc2ppbmZvLT5j b21tdXRlX2Fib3ZlX2wgPSBOVUxMOworCXNqaW5mby0+Y29tbXV0ZV9hYm92ZV9yID0gTlVMTDsK KwlzamluZm8tPmNvbW11dGVfYmVsb3dfbCA9IE5VTEw7CisJc2ppbmZvLT5jb21tdXRlX2JlbG93 X3IgPSBOVUxMOworCS8qIHdlIGRvbid0IGJvdGhlciB0cnlpbmcgdG8gbWFrZSB0aGUgcmVtYWlu aW5nIGZpZWxkcyB2YWxpZCAqLworCXNqaW5mby0+bGhzX3N0cmljdCA9IGZhbHNlOworCXNqaW5m by0+c2VtaV9jYW5fYnRyZWUgPSBmYWxzZTsKKwlzamluZm8tPnNlbWlfY2FuX2hhc2ggPSBmYWxz ZTsKKwlzamluZm8tPnNlbWlfb3BlcmF0b3JzID0gTklMOworCXNqaW5mby0+c2VtaV9yaHNfZXhw cnMgPSBOSUw7CisKKwlma3NlbGVjID0gZ2V0X2ZvcmVpZ25fa2V5X2pvaW5fc2VsZWN0aXZpdHko cm9vdCwKKwkJCQkJCQkJCQkJICAgb3V0ZXJfcmVsLT5yZWxpZHMsCisJCQkJCQkJCQkJCSAgIGlu bmVyX3JlbGlkcywKKwkJCQkJCQkJCQkJICAgc2ppbmZvLAorCQkJCQkJCQkJCQkgICAmcmVzdHJp Y3RsaXN0KTsKKwlqc2VsZWMgPSBjbGF1c2VsaXN0X3NlbGVjdGl2aXR5KHJvb3QsCisJCQkJCQkJ CQlyZXN0cmljdGxpc3QsCisJCQkJCQkJCQkwLAorCQkJCQkJCQkJc2ppbmZvLT5qb2ludHlwZSwK KwkJCQkJCQkJCXNqaW5mbyk7CisKKwlucm93cyA9IG91dGVyX3JlbC0+cm93cyAqIGZrc2VsZWMg KiBqc2VsZWM7CisJbnJvd3MgPSBjbGFtcF9yb3dfZXN0KG5yb3dzKTsKKworCS8qIEZvciBzYWZl dHksIG1ha2Ugc3VyZSByZXN1bHQgaXMgbm90IG1vcmUgdGhhbiB0aGUgYmFzZSBlc3RpbWF0ZSAq LworCWlmIChucm93cyA+IG91dGVyX3JlbC0+cm93cykKKwkJbnJvd3MgPSBvdXRlcl9yZWwtPnJv d3M7CisJcmV0dXJuIG5yb3dzOworfQorCiAvKgogICogY2FsY19qb2lucmVsX3NpemVfZXN0aW1h dGUKICAqCQlXb3JraG9yc2UgZm9yIHNldF9qb2lucmVsX3NpemVfZXN0aW1hdGVzIGFuZApAQCAt NjUyOSwzICs2NTg4LDUwIEBAIGNvbXB1dGVfYml0bWFwX3BhZ2VzKFBsYW5uZXJJbmZvICpyb290 LCBSZWxPcHRJbmZvICpiYXNlcmVsLAogCiAJcmV0dXJuIHBhZ2VzX2ZldGNoZWQ7CiB9CisKKy8q CisgKiBjb21wdXRlX3BhcnRwcnVuZV9jb3N0CisgKgkJQ29tcHV0ZSB0aGUgb3ZlcmhlYWQgb2Yg am9pbiBwYXJ0aXRpb24gcHJ1bmluZy4KKyAqLworZG91YmxlCitjb21wdXRlX3BhcnRwcnVuZV9j b3N0KFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICphcHBlbmRyZWwsCisJCQkJCSAgIENv c3QgYXBwZW5kX3RvdGFsX2Nvc3QsIGludCBhcHBlbmRfbnBsYW5zLAorCQkJCQkgICBSZWxpZHMg aW5uZXJfcmVsaWRzLCBkb3VibGUgaW5uZXJfcm93cywKKwkJCQkJICAgTGlzdCAqcHJ1bmVxdWFs KQoreworCUNvc3QJCXBydW5lX2Nvc3Q7CisJQ29zdAkJc2F2ZWRfY29zdDsKKwlkb3VibGUJCW1h dGNoaW5nX291dGVyX3Jvd3M7CisJZG91YmxlCQl1bm1hdGNoZWRfbnBsYW5zOworCisJc3dpdGNo IChhcHBlbmRyZWwtPnBhcnRfc2NoZW1lLT5zdHJhdGVneSkKKwl7CisKKwkJY2FzZSBQQVJUSVRJ T05fU1RSQVRFR1lfTElTVDoKKwkJY2FzZSBQQVJUSVRJT05fU1RSQVRFR1lfUkFOR0U6CisJCQlw cnVuZV9jb3N0ID0gY3B1X29wZXJhdG9yX2Nvc3QgKiBMT0cyKGFwcGVuZF9ucGxhbnMpICogaW5u ZXJfcm93czsKKwkJCWJyZWFrOworCQljYXNlIFBBUlRJVElPTl9TVFJBVEVHWV9IQVNIOgorCQkJ cHJ1bmVfY29zdCA9IGNwdV9vcGVyYXRvcl9jb3N0ICogYXBwZW5kX25wbGFucyAqIGlubmVyX3Jv d3M7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWVsb2coRVJST1IsICJ1bmV4cGVjdGVkIHBh cnRpdGlvbiBzdHJhdGVneTogJWQiLAorCQkJCSAoaW50KSBhcHBlbmRyZWwtPnBhcnRfc2NoZW1l LT5zdHJhdGVneSk7CisJCQlicmVhazsKKwl9CisKKwltYXRjaGluZ19vdXRlcl9yb3dzID0KKwkJ Z2V0X2pvaW5yZWxfbWF0Y2hpbmdfb3V0ZXJfc2l6ZShyb290LAorCQkJCQkJCQkJCWFwcGVuZHJl bCwKKwkJCQkJCQkJCQlpbm5lcl9yZWxpZHMsCisJCQkJCQkJCQkJcHJ1bmVxdWFsKTsKKworCS8q CisJICogV2UgYXNzdW1lIHRoYXQgZWFjaCBvdXRlciBqb2luZWQgcm93IG9jY3VwaWVzIG9uZSBu ZXcgcGFydGl0aW9uLiAgVGhpcworCSAqIGlzIHJlYWxseSB0aGUgd29yc3QgY2FzZS4KKwkgKi8K Kwl1bm1hdGNoZWRfbnBsYW5zID0gYXBwZW5kX25wbGFucyAtIE1pbihtYXRjaGluZ19vdXRlcl9y b3dzLCBhcHBlbmRfbnBsYW5zKTsKKwlzYXZlZF9jb3N0ID0gKHVubWF0Y2hlZF9ucGxhbnMgLyBh cHBlbmRfbnBsYW5zKSAqIGFwcGVuZF90b3RhbF9jb3N0OworCisJcmV0dXJuIHBydW5lX2Nvc3Qg LSBzYXZlZF9jb3N0OworfQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4v Y3JlYXRlcGxhbi5jIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vY3JlYXRlcGxhbi5jCmlu ZGV4IDYxMGY0YTU2ZDYuLjU1Y2QzYmI2MTYgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL29wdGlt aXplci9wbGFuL2NyZWF0ZXBsYW4uYworKysgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9j cmVhdGVwbGFuLmMKQEAgLTI0Miw3ICsyNDIsOCBAQCBzdGF0aWMgSGFzaCAqbWFrZV9oYXNoKFBs YW4gKmxlZnR0cmVlLAogCQkJCQkgICBMaXN0ICpoYXNoa2V5cywKIAkJCQkJICAgT2lkIHNrZXdU YWJsZSwKIAkJCQkJICAgQXR0ck51bWJlciBza2V3Q29sdW1uLAotCQkJCQkgICBib29sIHNrZXdJ bmhlcml0KTsKKwkJCQkJICAgYm9vbCBza2V3SW5oZXJpdCwKKwkJCQkJICAgTGlzdCAqam9pbnBh cnRwcnVuZV9pbmZvX2xpc3QpOwogc3RhdGljIE1lcmdlSm9pbiAqbWFrZV9tZXJnZWpvaW4oTGlz dCAqdGxpc3QsCiAJCQkJCQkJCSBMaXN0ICpqb2luY2xhdXNlcywgTGlzdCAqb3RoZXJjbGF1c2Vz LAogCQkJCQkJCQkgTGlzdCAqbWVyZ2VjbGF1c2VzLApAQCAtMzQyLDYgKzM0Myw3IEBAIGNyZWF0 ZV9wbGFuKFBsYW5uZXJJbmZvICpyb290LCBQYXRoICpiZXN0X3BhdGgpCiAJLyogSW5pdGlhbGl6 ZSB0aGlzIG1vZHVsZSdzIHdvcmtzcGFjZSBpbiBQbGFubmVySW5mbyAqLwogCXJvb3QtPmN1ck91 dGVyUmVscyA9IE5VTEw7CiAJcm9vdC0+Y3VyT3V0ZXJQYXJhbXMgPSBOSUw7CisJcm9vdC0+am9p bl9wYXJ0aXRpb25fcHJ1bmVfY2FuZGlkYXRlcyA9IE5JTDsKIAogCS8qIFJlY3Vyc2l2ZWx5IHBy b2Nlc3MgdGhlIHBhdGggdHJlZSwgZGVtYW5kaW5nIHRoZSBjb3JyZWN0IHRsaXN0IHJlc3VsdCAq LwogCXBsYW4gPSBjcmVhdGVfcGxhbl9yZWN1cnNlKHJvb3QsIGJlc3RfcGF0aCwgQ1BfRVhBQ1Rf VExJU1QpOwpAQCAtMzY5LDYgKzM3MSw4IEBAIGNyZWF0ZV9wbGFuKFBsYW5uZXJJbmZvICpyb290 LCBQYXRoICpiZXN0X3BhdGgpCiAJaWYgKHJvb3QtPmN1ck91dGVyUGFyYW1zICE9IE5JTCkKIAkJ ZWxvZyhFUlJPUiwgImZhaWxlZCB0byBhc3NpZ24gYWxsIE5lc3RMb29wUGFyYW1zIHRvIHBsYW4g bm9kZXMiKTsKIAorCUFzc2VydChyb290LT5qb2luX3BhcnRpdGlvbl9wcnVuZV9jYW5kaWRhdGVz ID09IE5JTCk7CisKIAkvKgogCSAqIFJlc2V0IHBsYW5fcGFyYW1zIHRvIGVuc3VyZSBwYXJhbSBJ RHMgdXNlZCBmb3IgbmVzdGxvb3AgcGFyYW1zIGFyZSBub3QKIAkgKiByZS11c2VkIGxhdGVyCkBA IC0xMjIzLDYgKzEyMjcsNyBAQCBjcmVhdGVfYXBwZW5kX3BsYW4oUGxhbm5lckluZm8gKnJvb3Qs IEFwcGVuZFBhdGggKmJlc3RfcGF0aCwgaW50IGZsYWdzKQogCWludAkJCW5hc3luY3BsYW5zID0g MDsKIAlSZWxPcHRJbmZvICpyZWwgPSBiZXN0X3BhdGgtPnBhdGgucGFyZW50OwogCVBhcnRpdGlv blBydW5lSW5mbyAqcGFydHBydW5laW5mbyA9IE5VTEw7CisJQml0bWFwc2V0ICAqam9pbl9wcnVu ZV9wYXJhbWlkcyA9IE5VTEw7CiAJaW50CQkJbm9kZW51bXNvcnRrZXlzID0gMDsKIAlBdHRyTnVt YmVyICpub2RlU29ydENvbElkeCA9IE5VTEw7CiAJT2lkCQkgICAqbm9kZVNvcnRPcGVyYXRvcnMg PSBOVUxMOwpAQCAtMTM3Nyw2ICsxMzgyLDggQEAgY3JlYXRlX2FwcGVuZF9wbGFuKFBsYW5uZXJJ bmZvICpyb290LCBBcHBlbmRQYXRoICpiZXN0X3BhdGgsIGludCBmbGFncykKIAkgKiBJZiBhbnkg cXVhbHMgZXhpc3QsIHRoZXkgbWF5IGJlIHVzZWZ1bCB0byBwZXJmb3JtIGZ1cnRoZXIgcGFydGl0 aW9uCiAJICogcHJ1bmluZyBkdXJpbmcgZXhlY3V0aW9uLiAgR2F0aGVyIGluZm9ybWF0aW9uIG5l ZWRlZCBieSB0aGUgZXhlY3V0b3IgdG8KIAkgKiBkbyBwYXJ0aXRpb24gcHJ1bmluZy4KKwkgKgor CSAqIEFsc28gZ2F0aGVyIGluZm9ybWF0aW9uIG5lZWRlZCBieSB0aGUgZXhlY3V0b3IgdG8gZG8g am9pbiBwcnVuaW5nLgogCSAqLwogCWlmIChlbmFibGVfcGFydGl0aW9uX3BydW5pbmcpCiAJewpA QCAtMTM5OSwxMyArMTQwNiwyMCBAQCBjcmVhdGVfYXBwZW5kX3BsYW4oUGxhbm5lckluZm8gKnJv b3QsIEFwcGVuZFBhdGggKmJlc3RfcGF0aCwgaW50IGZsYWdzKQogCQkJcGFydHBydW5laW5mbyA9 CiAJCQkJbWFrZV9wYXJ0aXRpb25fcHJ1bmVpbmZvKHJvb3QsIHJlbCwKIAkJCQkJCQkJCQkgYmVz dF9wYXRoLT5zdWJwYXRocywKLQkJCQkJCQkJCQkgcHJ1bmVxdWFsKTsKKwkJCQkJCQkJCQkgcHJ1 bmVxdWFsLAorCQkJCQkJCQkJCSBOVUxMKTsKKworCQlqb2luX3BydW5lX3BhcmFtaWRzID0KKwkJ CW1ha2Vfam9pbl9wYXJ0aXRpb25fcHJ1bmVpbmZvcyhyb290LCByZWwsCisJCQkJCQkJCQkJICAg KFBhdGggKikgYmVzdF9wYXRoLAorCQkJCQkJCQkJCSAgIGJlc3RfcGF0aC0+c3VicGF0aHMpOwog CX0KIAogCXBsYW4tPmFwcGVuZHBsYW5zID0gc3VicGxhbnM7CiAJcGxhbi0+bmFzeW5jcGxhbnMg PSBuYXN5bmNwbGFuczsKIAlwbGFuLT5maXJzdF9wYXJ0aWFsX3BsYW4gPSBiZXN0X3BhdGgtPmZp cnN0X3BhcnRpYWxfcGF0aDsKIAlwbGFuLT5wYXJ0X3BydW5lX2luZm8gPSBwYXJ0cHJ1bmVpbmZv OworCXBsYW4tPmpvaW5fcHJ1bmVfcGFyYW1pZHMgPSBqb2luX3BydW5lX3BhcmFtaWRzOwogCiAJ Y29weV9nZW5lcmljX3BhdGhfaW5mbygmcGxhbi0+cGxhbiwgKFBhdGggKikgYmVzdF9wYXRoKTsK IApAQCAtMTQ0NSw2ICsxNDU5LDcgQEAgY3JlYXRlX21lcmdlX2FwcGVuZF9wbGFuKFBsYW5uZXJJ bmZvICpyb290LCBNZXJnZUFwcGVuZFBhdGggKmJlc3RfcGF0aCwKIAlMaXN0Q2VsbCAgICpzdWJw YXRoczsKIAlSZWxPcHRJbmZvICpyZWwgPSBiZXN0X3BhdGgtPnBhdGgucGFyZW50OwogCVBhcnRp dGlvblBydW5lSW5mbyAqcGFydHBydW5laW5mbyA9IE5VTEw7CisJQml0bWFwc2V0ICAqam9pbl9w cnVuZV9wYXJhbWlkcyA9IE5VTEw7CiAKIAkvKgogCSAqIFdlIGRvbid0IGhhdmUgdGhlIGFjdHVh bCBjcmVhdGlvbiBvZiB0aGUgTWVyZ2VBcHBlbmQgbm9kZSBzcGxpdCBvdXQKQEAgLTE1NDEsNiAr MTU1Niw4IEBAIGNyZWF0ZV9tZXJnZV9hcHBlbmRfcGxhbihQbGFubmVySW5mbyAqcm9vdCwgTWVy Z2VBcHBlbmRQYXRoICpiZXN0X3BhdGgsCiAJICogSWYgYW55IHF1YWxzIGV4aXN0LCB0aGV5IG1h eSBiZSB1c2VmdWwgdG8gcGVyZm9ybSBmdXJ0aGVyIHBhcnRpdGlvbgogCSAqIHBydW5pbmcgZHVy aW5nIGV4ZWN1dGlvbi4gIEdhdGhlciBpbmZvcm1hdGlvbiBuZWVkZWQgYnkgdGhlIGV4ZWN1dG9y IHRvCiAJICogZG8gcGFydGl0aW9uIHBydW5pbmcuCisJICoKKwkgKiBBbHNvIGdhdGhlciBpbmZv cm1hdGlvbiBuZWVkZWQgYnkgdGhlIGV4ZWN1dG9yIHRvIGRvIGpvaW4gcHJ1bmluZy4KIAkgKi8K IAlpZiAoZW5hYmxlX3BhcnRpdGlvbl9wcnVuaW5nKQogCXsKQEAgLTE1NTQsMTEgKzE1NzEsMTgg QEAgY3JlYXRlX21lcmdlX2FwcGVuZF9wbGFuKFBsYW5uZXJJbmZvICpyb290LCBNZXJnZUFwcGVu ZFBhdGggKmJlc3RfcGF0aCwKIAkJaWYgKHBydW5lcXVhbCAhPSBOSUwpCiAJCQlwYXJ0cHJ1bmVp bmZvID0gbWFrZV9wYXJ0aXRpb25fcHJ1bmVpbmZvKHJvb3QsIHJlbCwKIAkJCQkJCQkJCQkJCQkg YmVzdF9wYXRoLT5zdWJwYXRocywKLQkJCQkJCQkJCQkJCQkgcHJ1bmVxdWFsKTsKKwkJCQkJCQkJ CQkJCQkgcHJ1bmVxdWFsLAorCQkJCQkJCQkJCQkJCSBOVUxMKTsKKworCQlqb2luX3BydW5lX3Bh cmFtaWRzID0KKwkJCW1ha2Vfam9pbl9wYXJ0aXRpb25fcHJ1bmVpbmZvcyhyb290LCByZWwsCisJ CQkJCQkJCQkJICAgKFBhdGggKikgYmVzdF9wYXRoLAorCQkJCQkJCQkJCSAgIGJlc3RfcGF0aC0+ c3VicGF0aHMpOwogCX0KIAogCW5vZGUtPm1lcmdlcGxhbnMgPSBzdWJwbGFuczsKIAlub2RlLT5w YXJ0X3BydW5lX2luZm8gPSBwYXJ0cHJ1bmVpbmZvOworCW5vZGUtPmpvaW5fcHJ1bmVfcGFyYW1p ZHMgPSBqb2luX3BydW5lX3BhcmFtaWRzOwogCiAJLyoKIAkgKiBJZiBwcmVwYXJlX3NvcnRfZnJv bV9wYXRoa2V5cyBhZGRlZCBzb3J0IGNvbHVtbnMsIGJ1dCB3ZSB3ZXJlIHRvbGQgdG8KQEAgLTQ3 NDMsNiArNDc2NywxMyBAQCBjcmVhdGVfaGFzaGpvaW5fcGxhbihQbGFubmVySW5mbyAqcm9vdCwK IAlBdHRyTnVtYmVyCXNrZXdDb2x1bW4gPSBJbnZhbGlkQXR0ck51bWJlcjsKIAlib29sCQlza2V3 SW5oZXJpdCA9IGZhbHNlOwogCUxpc3RDZWxsICAgKmxjOworCUxpc3QJICAgKmpvaW5wYXJ0cHJ1 bmVfaW5mb19saXN0OworCisJLyoKKwkgKiBDb2xsZWN0IGluZm9ybWF0aW9uIHJlcXVpcmVkIHRv IGJ1aWxkIEpvaW5QYXJ0aXRpb25QcnVuZUluZm9zIGF0IHRoaXMKKwkgKiBqb2luLgorCSAqLwor CXByZXBhcmVfam9pbl9wYXJ0aXRpb25fcHJ1bmVfY2FuZGlkYXRlKHJvb3QsICZiZXN0X3BhdGgt PmpwYXRoKTsKIAogCS8qCiAJICogSGFzaEpvaW4gY2FuIHByb2plY3QsIHNvIHdlIGRvbid0IGhh dmUgdG8gZGVtYW5kIGV4YWN0IHRsaXN0cyBmcm9tIHRoZQpAQCAtNDc1NCw2ICs0Nzg1LDExIEBA IGNyZWF0ZV9oYXNoam9pbl9wbGFuKFBsYW5uZXJJbmZvICpyb290LAogCW91dGVyX3BsYW4gPSBj cmVhdGVfcGxhbl9yZWN1cnNlKHJvb3QsIGJlc3RfcGF0aC0+anBhdGgub3V0ZXJqb2lucGF0aCwK IAkJCQkJCQkJCSAoYmVzdF9wYXRoLT5udW1fYmF0Y2hlcyA+IDEpID8gQ1BfU01BTExfVExJU1Qg OiAwKTsKIAorCS8qCisJICogUmV0cmlldmUgYWxsIHRoZSBKb2luUGFydGl0aW9uUHJ1bmVJbmZv cyBmb3IgdGhpcyBqb2luLgorCSAqLworCWpvaW5wYXJ0cHJ1bmVfaW5mb19saXN0ID0gZ2V0X2pv aW5fcGFydGl0aW9uX3BydW5lX2NhbmRpZGF0ZShyb290KTsKKwogCWlubmVyX3BsYW4gPSBjcmVh dGVfcGxhbl9yZWN1cnNlKHJvb3QsIGJlc3RfcGF0aC0+anBhdGguaW5uZXJqb2lucGF0aCwKIAkJ CQkJCQkJCSBDUF9TTUFMTF9UTElTVCk7CiAKQEAgLTQ4NTksNyArNDg5NSw4IEBAIGNyZWF0ZV9o YXNoam9pbl9wbGFuKFBsYW5uZXJJbmZvICpyb290LAogCQkJCQkJICBpbm5lcl9oYXNoa2V5cywK IAkJCQkJCSAgc2tld1RhYmxlLAogCQkJCQkJICBza2V3Q29sdW1uLAotCQkJCQkJICBza2V3SW5o ZXJpdCk7CisJCQkJCQkgIHNrZXdJbmhlcml0LAorCQkJCQkJICBqb2lucGFydHBydW5lX2luZm9f bGlzdCk7CiAKIAkvKgogCSAqIFNldCBIYXNoIG5vZGUncyBzdGFydHVwICYgdG90YWwgY29zdHMg ZXF1YWwgdG8gdG90YWwgY29zdCBvZiBpbnB1dApAQCAtNTk4Niw3ICs2MDIzLDggQEAgbWFrZV9o YXNoKFBsYW4gKmxlZnR0cmVlLAogCQkgIExpc3QgKmhhc2hrZXlzLAogCQkgIE9pZCBza2V3VGFi bGUsCiAJCSAgQXR0ck51bWJlciBza2V3Q29sdW1uLAotCQkgIGJvb2wgc2tld0luaGVyaXQpCisJ CSAgYm9vbCBza2V3SW5oZXJpdCwKKwkJICBMaXN0ICpqb2lucGFydHBydW5lX2luZm9fbGlzdCkK IHsKIAlIYXNoCSAgICpub2RlID0gbWFrZU5vZGUoSGFzaCk7CiAJUGxhbgkgICAqcGxhbiA9ICZu b2RlLT5wbGFuOwpAQCAtNjAwMCw2ICs2MDM4LDcgQEAgbWFrZV9oYXNoKFBsYW4gKmxlZnR0cmVl LAogCW5vZGUtPnNrZXdUYWJsZSA9IHNrZXdUYWJsZTsKIAlub2RlLT5za2V3Q29sdW1uID0gc2tl d0NvbHVtbjsKIAlub2RlLT5za2V3SW5oZXJpdCA9IHNrZXdJbmhlcml0OworCW5vZGUtPmpvaW5w YXJ0cHJ1bmVfaW5mb19saXN0ID0gam9pbnBhcnRwcnVuZV9pbmZvX2xpc3Q7CiAKIAlyZXR1cm4g bm9kZTsKIH0KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL3NldHJlZnMu YyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL3NldHJlZnMuYwppbmRleCA0MjYwM2RiYzdj Li41NzM0NDZiOTg5IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9zZXRy ZWZzLmMKKysrIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vc2V0cmVmcy5jCkBAIC0xNTUs NiArMTU1LDExIEBAIHN0YXRpYyBQbGFuICpzZXRfbWVyZ2VhcHBlbmRfcmVmZXJlbmNlcyhQbGFu bmVySW5mbyAqcm9vdCwKIAkJCQkJCQkJCQlNZXJnZUFwcGVuZCAqbXBsYW4sCiAJCQkJCQkJCQkJ aW50IHJ0b2Zmc2V0KTsKIHN0YXRpYyB2b2lkIHNldF9oYXNoX3JlZmVyZW5jZXMoUGxhbm5lcklu Zm8gKnJvb3QsIFBsYW4gKnBsYW4sIGludCBydG9mZnNldCk7CitzdGF0aWMgdm9pZCBzZXRfam9p bnBhcnRpdGlvbnBydW5lX3JlZmVyZW5jZXMoUGxhbm5lckluZm8gKnJvb3QsCisJCQkJCQkJCQkJ CSAgTGlzdCAqam9pbnBhcnRwcnVuZV9pbmZvX2xpc3QsCisJCQkJCQkJCQkJCSAgaW5kZXhlZF90 bGlzdCAqb3V0ZXJfaXRsaXN0LAorCQkJCQkJCQkJCQkgIGludCBydG9mZnNldCwKKwkJCQkJCQkJ CQkJICBkb3VibGUgbnVtX2V4ZWMpOwogc3RhdGljIFJlbGlkcyBvZmZzZXRfcmVsaWRfc2V0KFJl bGlkcyByZWxpZHMsIGludCBydG9mZnNldCk7CiBzdGF0aWMgTm9kZSAqZml4X3NjYW5fZXhwcihQ bGFubmVySW5mbyAqcm9vdCwgTm9kZSAqbm9kZSwKIAkJCQkJCSAgIGludCBydG9mZnNldCwgZG91 YmxlIG51bV9leGVjKTsKQEAgLTE4OTYsNiArMTkwMSw2MiBAQCBzZXRfaGFzaF9yZWZlcmVuY2Vz KFBsYW5uZXJJbmZvICpyb290LCBQbGFuICpwbGFuLCBpbnQgcnRvZmZzZXQpCiAKIAkvKiBIYXNo IG5vZGVzIGRvbid0IGhhdmUgdGhlaXIgb3duIHF1YWxzICovCiAJQXNzZXJ0KHBsYW4tPnF1YWwg PT0gTklMKTsKKworCXNldF9qb2lucGFydGl0aW9ucHJ1bmVfcmVmZXJlbmNlcyhyb290LAorCQkJ CQkJCQkJICBocGxhbi0+am9pbnBhcnRwcnVuZV9pbmZvX2xpc3QsCisJCQkJCQkJCQkgIG91dGVy X2l0bGlzdCwKKwkJCQkJCQkJCSAgcnRvZmZzZXQsCisJCQkJCQkJCQkgIE5VTV9FWEVDX1RMSVNU KHBsYW4pKTsKK30KKworLyoKKyAqIHNldF9qb2lucGFydGl0aW9ucHJ1bmVfcmVmZXJlbmNlcwor ICoJICAgRG8gc2V0X3BsYW5fcmVmZXJlbmNlcyBwcm9jZXNzaW5nIG9uIEpvaW5QYXJ0aXRpb25Q cnVuZUluZm9zCisgKi8KK3N0YXRpYyB2b2lkCitzZXRfam9pbnBhcnRpdGlvbnBydW5lX3JlZmVy ZW5jZXMoUGxhbm5lckluZm8gKnJvb3QsCisJCQkJCQkJCSAgTGlzdCAqam9pbnBhcnRwcnVuZV9p bmZvX2xpc3QsCisJCQkJCQkJCSAgaW5kZXhlZF90bGlzdCAqb3V0ZXJfaXRsaXN0LAorCQkJCQkJ CQkgIGludCBydG9mZnNldCwKKwkJCQkJCQkJICBkb3VibGUgbnVtX2V4ZWMpCit7CisJTGlzdENl bGwgICAqbDsKKworCWZvcmVhY2gobCwgam9pbnBhcnRwcnVuZV9pbmZvX2xpc3QpCisJeworCQlK b2luUGFydGl0aW9uUHJ1bmVJbmZvICpqcGluZm8gPSAoSm9pblBhcnRpdGlvblBydW5lSW5mbyAq KSBsZmlyc3QobCk7CisJCUxpc3RDZWxsICAgKmwxOworCisJCWZvcmVhY2gobDEsIGpwaW5mby0+ cGFydF9wcnVuZV9pbmZvLT5wcnVuZV9pbmZvcykKKwkJeworCQkJTGlzdAkgICAqcHJ1bmVfaW5m b3MgPSBsZmlyc3QobDEpOworCQkJTGlzdENlbGwgICAqbDI7CisKKwkJCWZvcmVhY2gobDIsIHBy dW5lX2luZm9zKQorCQkJeworCQkJCVBhcnRpdGlvbmVkUmVsUHJ1bmVJbmZvICpwaW5mbyA9IGxm aXJzdChsMik7CisKKwkJCQlwaW5mby0+cnRpbmRleCArPSBydG9mZnNldDsKKworCQkJCXBpbmZv LT5pbml0aWFsX3BydW5pbmdfc3RlcHMgPSAoTGlzdCAqKQorCQkJCQlmaXhfdXBwZXJfZXhwcihy b290LAorCQkJCQkJCQkgICAoTm9kZSAqKSBwaW5mby0+aW5pdGlhbF9wcnVuaW5nX3N0ZXBzLAor CQkJCQkJCQkgICBvdXRlcl9pdGxpc3QsCisJCQkJCQkJCSAgIE9VVEVSX1ZBUiwKKwkJCQkJCQkJ ICAgcnRvZmZzZXQsCisJCQkJCQkJCSAgIE5STV9FUVVBTCwKKwkJCQkJCQkJICAgbnVtX2V4ZWMp OworCQkJCXBpbmZvLT5leGVjX3BydW5pbmdfc3RlcHMgPSAoTGlzdCAqKQorCQkJCQlmaXhfdXBw ZXJfZXhwcihyb290LAorCQkJCQkJCQkgICAoTm9kZSAqKSBwaW5mby0+ZXhlY19wcnVuaW5nX3N0 ZXBzLAorCQkJCQkJCQkgICBvdXRlcl9pdGxpc3QsCisJCQkJCQkJCSAgIE9VVEVSX1ZBUiwKKwkJ CQkJCQkJICAgcnRvZmZzZXQsCisJCQkJCQkJCSAgIE5STV9FUVVBTCwKKwkJCQkJCQkJICAgbnVt X2V4ZWMpOworCQkJfQorCQl9CisJfQogfQogCiAvKgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQv cGFydGl0aW9uaW5nL3BhcnRwcnVuZS5jIGIvc3JjL2JhY2tlbmQvcGFydGl0aW9uaW5nL3BhcnRw cnVuZS5jCmluZGV4IDkwMDZhZmQ5ZDIuLmMwY2Y3YzNjODYgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNr ZW5kL3BhcnRpdGlvbmluZy9wYXJ0cHJ1bmUuYworKysgYi9zcmMvYmFja2VuZC9wYXJ0aXRpb25p bmcvcGFydHBydW5lLmMKQEAgLTQ4LDcgKzQ4LDkgQEAKICNpbmNsdWRlICJvcHRpbWl6ZXIvYXBw ZW5kaW5mby5oIgogI2luY2x1ZGUgIm9wdGltaXplci9jb3N0LmgiCiAjaW5jbHVkZSAib3B0aW1p emVyL29wdGltaXplci5oIgorI2luY2x1ZGUgIm9wdGltaXplci9wYXJhbWFzc2lnbi5oIgogI2lu Y2x1ZGUgIm9wdGltaXplci9wYXRobm9kZS5oIgorI2luY2x1ZGUgIm9wdGltaXplci9yZXN0cmlj dGluZm8uaCIKICNpbmNsdWRlICJwYXJzZXIvcGFyc2V0cmVlLmgiCiAjaW5jbHVkZSAicGFydGl0 aW9uaW5nL3BhcnRib3VuZHMuaCIKICNpbmNsdWRlICJwYXJ0aXRpb25pbmcvcGFydHBydW5lLmgi CkBAIC0xMDIsMTUgKzEwNCwxNiBAQCB0eXBlZGVmIGVudW0gUGFydENsYXVzZVRhcmdldAogICoK ICAqIGdlbl9wYXJ0cHJ1bmVfc3RlcHMoKSBpbml0aWFsaXplcyBhbmQgcmV0dXJucyBhbiBpbnN0 YW5jZSBvZiB0aGlzIHN0cnVjdC4KICAqCi0gKiBOb3RlIHRoYXQgaGFzX211dGFibGVfb3AsIGhh c19tdXRhYmxlX2FyZywgYW5kIGhhc19leGVjX3BhcmFtIGFyZSBzZXQgaWYKLSAqIHdlIGZvdW5k IGFueSBwb3RlbnRpYWxseS11c2VmdWwtZm9yLXBydW5pbmcgY2xhdXNlIGhhdmluZyB0aG9zZSBw cm9wZXJ0aWVzLAotICogd2hldGhlciBvciBub3Qgd2UgYWN0dWFsbHkgdXNlZCB0aGUgY2xhdXNl IGluIHRoZSBzdGVwcyBsaXN0LiAgVGhpcwotICogZGVmaW5pdGlvbiBhbGxvd3MgdXMgdG8gc2tp cCB0aGUgUEFSVFRBUkdFVF9FWEVDIHBhc3MgaW4gc29tZSBjYXNlcy4KKyAqIE5vdGUgdGhhdCBo YXNfbXV0YWJsZV9vcCwgaGFzX211dGFibGVfYXJnLCBoYXNfZXhlY19wYXJhbSBhbmQgaGFzX3Zh cnMgYXJlCisgKiBzZXQgaWYgd2UgZm91bmQgYW55IHBvdGVudGlhbGx5LXVzZWZ1bC1mb3ItcHJ1 bmluZyBjbGF1c2UgaGF2aW5nIHRob3NlCisgKiBwcm9wZXJ0aWVzLCB3aGV0aGVyIG9yIG5vdCB3 ZSBhY3R1YWxseSB1c2VkIHRoZSBjbGF1c2UgaW4gdGhlIHN0ZXBzIGxpc3QuCisgKiBUaGlzIGRl ZmluaXRpb24gYWxsb3dzIHVzIHRvIHNraXAgdGhlIFBBUlRUQVJHRVRfRVhFQyBwYXNzIGluIHNv bWUgY2FzZXMuCiAgKi8KIHR5cGVkZWYgc3RydWN0IEdlbmVyYXRlUHJ1bmluZ1N0ZXBzQ29udGV4 dAogewogCS8qIENvcGllcyBvZiBpbnB1dCBhcmd1bWVudHMgZm9yIGdlbl9wYXJ0cHJ1bmVfc3Rl cHM6ICovCiAJUmVsT3B0SW5mbyAqcmVsOwkJCS8qIHRoZSBwYXJ0aXRpb25lZCByZWxhdGlvbiAq LworCUJpdG1hcHNldCAgKmF2YWlsYWJsZV9yZWxzOwkvKiByZWxzIHdob3NlIFZhcnMgbWF5IGJl IHVzZWQgZm9yIHBydW5pbmcgKi8KIAlQYXJ0Q2xhdXNlVGFyZ2V0IHRhcmdldDsJLyogdXNlLWNh c2Ugd2UncmUgZ2VuZXJhdGluZyBzdGVwcyBmb3IgKi8KIAkvKiBSZXN1bHQgZGF0YTogKi8KIAlM aXN0CSAgICpzdGVwczsJCQkvKiBsaXN0IG9mIFBhcnRpdGlvblBydW5lU3RlcHMgKi8KQEAgLTEx OCw2ICsxMjEsNyBAQCB0eXBlZGVmIHN0cnVjdCBHZW5lcmF0ZVBydW5pbmdTdGVwc0NvbnRleHQK IAlib29sCQloYXNfbXV0YWJsZV9hcmc7CS8qIGNsYXVzZXMgaW5jbHVkZSBhbnkgbXV0YWJsZSBj b21wYXJpc29uCiAJCQkJCQkJCQkgKiB2YWx1ZXMsICpvdGhlciB0aGFuKiBleGVjIHBhcmFtcyAq LwogCWJvb2wJCWhhc19leGVjX3BhcmFtOyAvKiBjbGF1c2VzIGluY2x1ZGUgYW55IFBBUkFNX0VY RUMgcGFyYW1zICovCisJYm9vbAkJaGFzX3ZhcnM7CQkvKiBjbGF1c2VzIGluY2x1ZGUgYW55IFZh cnMgZnJvbSAnYXZhaWxhYmxlX3JlbHMnICovCiAJYm9vbAkJY29udHJhZGljdG9yeTsJLyogY2xh dXNlcyB3ZXJlIHByb3ZlbiBzZWxmLWNvbnRyYWRpY3RvcnkgKi8KIAkvKiBXb3JraW5nIHN0YXRl OiAqLwogCWludAkJCW5leHRfc3RlcF9pZDsKQEAgLTE0Myw4ICsxNDcsMTAgQEAgc3RhdGljIExp c3QgKm1ha2VfcGFydGl0aW9uZWRyZWxfcHJ1bmVpbmZvKFBsYW5uZXJJbmZvICpyb290LAogCQkJ CQkJCQkJCSAgIExpc3QgKnBydW5lcXVhbCwKIAkJCQkJCQkJCQkgICBCaXRtYXBzZXQgKnBhcnRy ZWxpZHMsCiAJCQkJCQkJCQkJICAgaW50ICpyZWxpZF9zdWJwbGFuX21hcCwKKwkJCQkJCQkJCQkg ICBCaXRtYXBzZXQgKmF2YWlsYWJsZV9yZWxzLAogCQkJCQkJCQkJCSAgIEJpdG1hcHNldCAqKm1h dGNoZWRzdWJwbGFucyk7CiBzdGF0aWMgdm9pZCBnZW5fcGFydHBydW5lX3N0ZXBzKFJlbE9wdElu Zm8gKnJlbCwgTGlzdCAqY2xhdXNlcywKKwkJCQkJCQkJQml0bWFwc2V0ICphdmFpbGFibGVfcmVs cywKIAkJCQkJCQkJUGFydENsYXVzZVRhcmdldCB0YXJnZXQsCiAJCQkJCQkJCUdlbmVyYXRlUHJ1 bmluZ1N0ZXBzQ29udGV4dCAqY29udGV4dCk7CiBzdGF0aWMgTGlzdCAqZ2VuX3BhcnRwcnVuZV9z dGVwc19pbnRlcm5hbChHZW5lcmF0ZVBydW5pbmdTdGVwc0NvbnRleHQgKmNvbnRleHQsCkBAIC0y MDMsNiArMjA5LDEwIEBAIHN0YXRpYyBQYXJ0Q2xhdXNlTWF0Y2hTdGF0dXMgbWF0Y2hfYm9vbGVh bl9wYXJ0aXRpb25fY2xhdXNlKE9pZCBwYXJ0b3BmYW1pbHksCiBzdGF0aWMgdm9pZCBwYXJ0a2V5 X2RhdHVtX2Zyb21fZXhwcihQYXJ0aXRpb25QcnVuZUNvbnRleHQgKmNvbnRleHQsCiAJCQkJCQkJ CQlFeHByICpleHByLCBpbnQgc3RhdGVpZHgsCiAJCQkJCQkJCQlEYXR1bSAqdmFsdWUsIGJvb2wg KmlzbnVsbCk7CitzdGF0aWMgYm9vbCBjb250YWluX2ZvcmJpZGRlbl92YXJfY2xhdXNlKE5vZGUg Km5vZGUsCisJCQkJCQkJCQkJIEdlbmVyYXRlUHJ1bmluZ1N0ZXBzQ29udGV4dCAqY29udGV4dCk7 CitzdGF0aWMgYm9vbCBjb250YWluX2ZvcmJpZGRlbl92YXJfY2xhdXNlX3dhbGtlcihOb2RlICpu b2RlLAorCQkJCQkJCQkJCQkJR2VuZXJhdGVQcnVuaW5nU3RlcHNDb250ZXh0ICpjb250ZXh0KTsK IAogCiAvKgpAQCAtMjE1LDExICsyMjUsMTQgQEAgc3RhdGljIHZvaWQgcGFydGtleV9kYXR1bV9m cm9tX2V4cHIoUGFydGl0aW9uUHJ1bmVDb250ZXh0ICpjb250ZXh0LAogICogb2Ygc2NhbiBwYXRo cyBmb3IgaXRzIGNoaWxkIHJlbHMuCiAgKiAncHJ1bmVxdWFsJyBpcyBhIGxpc3Qgb2YgcG90ZW50 aWFsIHBydW5pbmcgcXVhbHMgKGkuZS4sIHJlc3RyaWN0aW9uCiAgKiBjbGF1c2VzIHRoYXQgYXJl IGFwcGxpY2FibGUgdG8gdGhlIGFwcGVuZHJlbCkuCisgKiAnYXZhaWxhYmxlX3JlbHMnIGlzIHRo ZSByZWxpZCBzZXQgb2YgcmVscyB3aG9zZSBWYXJzIG1heSBiZSB1c2VkIGZvcgorICogcHJ1bmlu Zy4KICAqLwogUGFydGl0aW9uUHJ1bmVJbmZvICoKIG1ha2VfcGFydGl0aW9uX3BydW5laW5mbyhQ bGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqcGFyZW50cmVsLAogCQkJCQkJIExpc3QgKnN1 YnBhdGhzLAotCQkJCQkJIExpc3QgKnBydW5lcXVhbCkKKwkJCQkJCSBMaXN0ICpwcnVuZXF1YWws CisJCQkJCQkgQml0bWFwc2V0ICphdmFpbGFibGVfcmVscykKIHsKIAlQYXJ0aXRpb25QcnVuZUlu Zm8gKnBydW5laW5mbzsKIAlCaXRtYXBzZXQgICphbGxtYXRjaGVkc3VicGxhbnMgPSBOVUxMOwpA QCAtMzEyLDYgKzMyNSw3IEBAIG1ha2VfcGFydGl0aW9uX3BydW5laW5mbyhQbGFubmVySW5mbyAq cm9vdCwgUmVsT3B0SW5mbyAqcGFyZW50cmVsLAogCQkJCQkJCQkJCQkJICBwcnVuZXF1YWwsCiAJ CQkJCQkJCQkJCQkgIHBhcnRyZWxpZHMsCiAJCQkJCQkJCQkJCQkgIHJlbGlkX3N1YnBsYW5fbWFw LAorCQkJCQkJCQkJCQkJICBhdmFpbGFibGVfcmVscywKIAkJCQkJCQkJCQkJCSAgJm1hdGNoZWRz dWJwbGFucyk7CiAKIAkJLyogV2hlbiBwcnVuaW5nIGlzIHBvc3NpYmxlLCByZWNvcmQgdGhlIG1h dGNoZWQgc3VicGxhbnMgKi8KQEAgLTM1OSw2ICszNzMsMTg0IEBAIG1ha2VfcGFydGl0aW9uX3By dW5laW5mbyhQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqcGFyZW50cmVsLAogCXJldHVy biBwcnVuZWluZm87CiB9CiAKKy8qCisgKiBtYWtlX2pvaW5fcGFydGl0aW9uX3BydW5laW5mb3MK KyAqCQlCdWlsZHMgb25lIEpvaW5QYXJ0aXRpb25QcnVuZUluZm8gZm9yIGVhY2ggam9pbiBhdCB3 aGljaCBqb2luIHBhcnRpdGlvbgorICoJCXBydW5pbmcgaXMgcG9zc2libGUgZm9yIHRoaXMgYXBw ZW5kcmVsLgorICoKKyAqICdwYXJlbnRyZWwnIGlzIHRoZSBSZWxPcHRJbmZvIGZvciBhbiBhcHBl bmRyZWwsIGFuZCAnc3VicGF0aHMnIGlzIHRoZSBsaXN0CisgKiBvZiBzY2FuIHBhdGhzIGZvciBp dHMgY2hpbGQgcmVscy4KKyAqLworQml0bWFwc2V0ICoKK21ha2Vfam9pbl9wYXJ0aXRpb25fcHJ1 bmVpbmZvcyhQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqcGFyZW50cmVsLAorCQkJCQkJ CSAgIFBhdGggKmJlc3RfcGF0aCwgTGlzdCAqc3VicGF0aHMpCit7CisJQml0bWFwc2V0ICAqcmVz dWx0ID0gTlVMTDsKKwlMaXN0Q2VsbCAgICpsYzsKKworCWlmICghSVNfUEFSVElUSU9ORURfUkVM KHBhcmVudHJlbCkpCisJCXJldHVybiBOVUxMOworCisJZm9yZWFjaChsYywgcm9vdC0+am9pbl9w YXJ0aXRpb25fcHJ1bmVfY2FuZGlkYXRlcykKKwl7CisJCUpvaW5QYXJ0aXRpb25QcnVuZUNhbmRp ZGF0ZUluZm8gKmNhbmRpZGF0ZSA9CisJCQkoSm9pblBhcnRpdGlvblBydW5lQ2FuZGlkYXRlSW5m byAqKSBsZmlyc3QobGMpOworCQlQYXJ0aXRpb25QcnVuZUluZm8gKnBhcnRfcHJ1bmVfaW5mbzsK KwkJTGlzdAkgICAqcHJ1bmVxdWFsOworCQlSZWxpZHMJCWpvaW5yZWxpZHM7CisJCUxpc3RDZWxs ICAgKmw7CisJCWRvdWJsZQkJcHJ1bmVfY29zdDsKKworCQlpZiAoY2FuZGlkYXRlID09IE5VTEwp CisJCQljb250aW51ZTsKKworCQkvKgorCQkgKiBJZGVudGlmeSBhbGwgam9pbmNsYXVzZXMgdGhh dCBhcmUgbW92YWJsZSB0byB0aGlzIGFwcGVuZHJlbCBnaXZlbgorCQkgKiB0aGlzIGlubmVyIHNp ZGUgcmVsaWRzLiAgT25seSB0aG9zZSBjbGF1c2VzIGNhbiBiZSB1c2VkIGZvciBqb2luCisJCSAq IHBhcnRpdGlvbiBwcnVuaW5nLgorCQkgKi8KKwkJam9pbnJlbGlkcyA9IGJtc191bmlvbihwYXJl bnRyZWwtPnJlbGlkcywgY2FuZGlkYXRlLT5pbm5lcl9yZWxpZHMpOworCQlwcnVuZXF1YWwgPSBO SUw7CisJCWZvcmVhY2gobCwgY2FuZGlkYXRlLT5qb2lucmVzdHJpY3RpbmZvKQorCQl7CisJCQlS ZXN0cmljdEluZm8gKnJpbmZvID0gKFJlc3RyaWN0SW5mbyAqKSBsZmlyc3QobCk7CisKKwkJCWlm IChqb2luX2NsYXVzZV9pc19tb3ZhYmxlX2ludG8ocmluZm8sCisJCQkJCQkJCQkJCXBhcmVudHJl bC0+cmVsaWRzLAorCQkJCQkJCQkJCQlqb2lucmVsaWRzKSkKKwkJCQlwcnVuZXF1YWwgPSBsYXBw ZW5kKHBydW5lcXVhbCwgcmluZm8pOworCQl9CisKKwkJaWYgKHBydW5lcXVhbCA9PSBOSUwpCisJ CQljb250aW51ZTsKKworCQkvKgorCQkgKiBDaGVjayB0aGUgb3ZlcmhlYWQgb2YgdGhpcyBwcnVu aW5nCisJCSAqLworCQlwcnVuZV9jb3N0ID0gY29tcHV0ZV9wYXJ0cHJ1bmVfY29zdChyb290LAor CQkJCQkJCQkJCQlwYXJlbnRyZWwsCisJCQkJCQkJCQkJCWJlc3RfcGF0aC0+dG90YWxfY29zdCwK KwkJCQkJCQkJCQkJbGlzdF9sZW5ndGgoc3VicGF0aHMpLAorCQkJCQkJCQkJCQljYW5kaWRhdGUt PmlubmVyX3JlbGlkcywKKwkJCQkJCQkJCQkJY2FuZGlkYXRlLT5pbm5lcl9yb3dzLAorCQkJCQkJ CQkJCQlwcnVuZXF1YWwpOworCQlpZiAocHJ1bmVfY29zdCA+IDApCisJCQljb250aW51ZTsKKwor CQlwYXJ0X3BydW5lX2luZm8gPSBtYWtlX3BhcnRpdGlvbl9wcnVuZWluZm8ocm9vdCwgcGFyZW50 cmVsLAorCQkJCQkJCQkJCQkJICAgc3VicGF0aHMsCisJCQkJCQkJCQkJCQkgICBwcnVuZXF1YWws CisJCQkJCQkJCQkJCQkgICBjYW5kaWRhdGUtPmlubmVyX3JlbGlkcyk7CisKKwkJaWYgKHBhcnRf cHJ1bmVfaW5mbykKKwkJeworCQkJSm9pblBhcnRpdGlvblBydW5lSW5mbyAqanBpbmZvOworCisJ CQlqcGluZm8gPSBtYWtlTm9kZShKb2luUGFydGl0aW9uUHJ1bmVJbmZvKTsKKworCQkJanBpbmZv LT5wYXJ0X3BydW5lX2luZm8gPSBwYXJ0X3BydW5lX2luZm87CisJCQlqcGluZm8tPnBhcmFtaWQg PSBhc3NpZ25fc3BlY2lhbF9leGVjX3BhcmFtKHJvb3QpOworCQkJanBpbmZvLT5ucGxhbnMgPSBs aXN0X2xlbmd0aChzdWJwYXRocyk7CisKKwkJCWNhbmRpZGF0ZS0+am9pbnBhcnRwcnVuZV9pbmZv X2xpc3QgPQorCQkJCWxhcHBlbmQoY2FuZGlkYXRlLT5qb2lucGFydHBydW5lX2luZm9fbGlzdCwg anBpbmZvKTsKKworCQkJcmVzdWx0ID0gYm1zX2FkZF9tZW1iZXIocmVzdWx0LCBqcGluZm8tPnBh cmFtaWQpOworCQl9CisJfQorCisJcmV0dXJuIHJlc3VsdDsKK30KKworLyoKKyAqIHByZXBhcmVf am9pbl9wYXJ0aXRpb25fcHJ1bmVfY2FuZGlkYXRlCisgKiAJCUNoZWNrIGlmIGpvaW4gcGFydGl0 aW9uIHBydW5pbmcgaXMgcG9zc2libGUgYXQgdGhpcyBqb2luIGFuZCBpZiBzbworICogCQljb2xs ZWN0IGluZm9ybWF0aW9uIHJlcXVpcmVkIHRvIGJ1aWxkIEpvaW5QYXJ0aXRpb25QcnVuZUluZm9z LgorICoKKyAqIE5vdGUgdGhhdCB3ZSBtYXkgYnVpbGQgbW9yZSB0aGFuIG9uZSBKb2luUGFydGl0 aW9uUHJ1bmVJbmZvIGF0IG9uZSBqb2luLCBmb3IKKyAqIGRpZmZlcmVudCBBcHBlbmQvTWVyZ2VB cHBlbmQgcGF0aHMuCisgKi8KK3ZvaWQKK3ByZXBhcmVfam9pbl9wYXJ0aXRpb25fcHJ1bmVfY2Fu ZGlkYXRlKFBsYW5uZXJJbmZvICpyb290LCBKb2luUGF0aCAqanBhdGgpCit7CisJSm9pblBhcnRp dGlvblBydW5lQ2FuZGlkYXRlSW5mbyAqY2FuZGlkYXRlOworCisJaWYgKCFlbmFibGVfcGFydGl0 aW9uX3BydW5pbmcpCisJeworCQlyb290LT5qb2luX3BhcnRpdGlvbl9wcnVuZV9jYW5kaWRhdGVz ID0KKwkJCWxhcHBlbmQocm9vdC0+am9pbl9wYXJ0aXRpb25fcHJ1bmVfY2FuZGlkYXRlcywgTlVM TCk7CisJCXJldHVybjsKKwl9CisKKwkvKgorCSAqIEZvciBub3cgZG8gbm90IHBlcmZvcm0gam9p biBwYXJ0aXRpb24gcHJ1bmluZyBmb3IgcGFyYWxsZWwgaGFzaGpvaW4uCisJICovCisJaWYgKGpw YXRoLT5wYXRoLnBhcmFsbGVsX3dvcmtlcnMgPiAwKQorCXsKKwkJcm9vdC0+am9pbl9wYXJ0aXRp b25fcHJ1bmVfY2FuZGlkYXRlcyA9CisJCQlsYXBwZW5kKHJvb3QtPmpvaW5fcGFydGl0aW9uX3By dW5lX2NhbmRpZGF0ZXMsIE5VTEwpOworCQlyZXR1cm47CisJfQorCisJLyoKKwkgKiBXZSBjYW5u b3QgcGVyZm9ybSBqb2luIHBhcnRpdGlvbiBwcnVuaW5nIGlmIHRoZSBvdXRlciBpcyB0aGUKKwkg KiBub24tbnVsbGFibGUgc2lkZS4KKwkgKi8KKwlpZiAoIShqcGF0aC0+am9pbnR5cGUgPT0gSk9J Tl9JTk5FUiB8fAorCQkgIGpwYXRoLT5qb2ludHlwZSA9PSBKT0lOX1NFTUkgfHwKKwkJICBqcGF0 aC0+am9pbnR5cGUgPT0gSk9JTl9SSUdIVCB8fAorCQkgIGpwYXRoLT5qb2ludHlwZSA9PSBKT0lO X1JJR0hUX0FOVEkpKQorCXsKKwkJcm9vdC0+am9pbl9wYXJ0aXRpb25fcHJ1bmVfY2FuZGlkYXRl cyA9CisJCQlsYXBwZW5kKHJvb3QtPmpvaW5fcGFydGl0aW9uX3BydW5lX2NhbmRpZGF0ZXMsIE5V TEwpOworCQlyZXR1cm47CisJfQorCisJLyoKKwkgKiBGb3Igbm93IHdlIG9ubHkgc3VwcG9ydCBI YXNoSm9pbi4KKwkgKi8KKwlpZiAoanBhdGgtPnBhdGgucGF0aHR5cGUgIT0gVF9IYXNoSm9pbikK Kwl7CisJCXJvb3QtPmpvaW5fcGFydGl0aW9uX3BydW5lX2NhbmRpZGF0ZXMgPQorCQkJbGFwcGVu ZChyb290LT5qb2luX3BhcnRpdGlvbl9wcnVuZV9jYW5kaWRhdGVzLCBOVUxMKTsKKwkJcmV0dXJu OworCX0KKworCWNhbmRpZGF0ZSA9IG1ha2VOb2RlKEpvaW5QYXJ0aXRpb25QcnVuZUNhbmRpZGF0 ZUluZm8pOworCWNhbmRpZGF0ZS0+am9pbnJlc3RyaWN0aW5mbyA9IGpwYXRoLT5qb2lucmVzdHJp Y3RpbmZvOworCWNhbmRpZGF0ZS0+aW5uZXJfcmVsaWRzID0ganBhdGgtPmlubmVyam9pbnBhdGgt PnBhcmVudC0+cmVsaWRzOworCWNhbmRpZGF0ZS0+aW5uZXJfcm93cyA9IGpwYXRoLT5pbm5lcmpv aW5wYXRoLT5wYXJlbnQtPnJvd3M7CisJY2FuZGlkYXRlLT5qb2lucGFydHBydW5lX2luZm9fbGlz dCA9IE5JTDsKKworCXJvb3QtPmpvaW5fcGFydGl0aW9uX3BydW5lX2NhbmRpZGF0ZXMgPQorCQls YXBwZW5kKHJvb3QtPmpvaW5fcGFydGl0aW9uX3BydW5lX2NhbmRpZGF0ZXMsIGNhbmRpZGF0ZSk7 Cit9CisKKy8qCisgKiBnZXRfam9pbl9wYXJ0aXRpb25fcHJ1bmVfY2FuZGlkYXRlCisgKgkJUG9w IG91dCB0aGUgSm9pblBhcnRpdGlvblBydW5lQ2FuZGlkYXRlSW5mbyBmb3IgdGhpcyBqb2luIGFu ZCByZXRyaWV2ZQorICoJCXRoZSBKb2luUGFydGl0aW9uUHJ1bmVJbmZvcy4KKyAqLworTGlzdCAq CitnZXRfam9pbl9wYXJ0aXRpb25fcHJ1bmVfY2FuZGlkYXRlKFBsYW5uZXJJbmZvICpyb290KQor eworCUpvaW5QYXJ0aXRpb25QcnVuZUNhbmRpZGF0ZUluZm8gKmNhbmRpZGF0ZTsKKwlMaXN0ICAg KnJlc3VsdDsKKworCWNhbmRpZGF0ZSA9IGxsYXN0KHJvb3QtPmpvaW5fcGFydGl0aW9uX3BydW5l X2NhbmRpZGF0ZXMpOworCXJvb3QtPmpvaW5fcGFydGl0aW9uX3BydW5lX2NhbmRpZGF0ZXMgPQor CQlsaXN0X2RlbGV0ZV9sYXN0KHJvb3QtPmpvaW5fcGFydGl0aW9uX3BydW5lX2NhbmRpZGF0ZXMp OworCisJaWYgKGNhbmRpZGF0ZSA9PSBOVUxMKQorCQlyZXR1cm4gTklMOworCisJcmVzdWx0ID0g Y2FuZGlkYXRlLT5qb2lucGFydHBydW5lX2luZm9fbGlzdDsKKworCXBmcmVlKGNhbmRpZGF0ZSk7 CisKKwlyZXR1cm4gcmVzdWx0OworfQorCiAvKgogICogYWRkX3BhcnRfcmVsaWRzCiAgKgkJQWRk IG5ldyBpbmZvIHRvIGEgbGlzdCBvZiBCaXRtYXBzZXRzIG9mIHBhcnRpdGlvbmVkIHJlbGlkcy4K QEAgLTQyNyw2ICs2MTksOCBAQCBhZGRfcGFydF9yZWxpZHMoTGlzdCAqYWxscGFydHJlbGlkcywg Qml0bWFwc2V0ICpwYXJ0cmVsaWRzKQogICogcGFydHJlbGlkczogU2V0IG9mIFJUIGluZGV4ZXMg aWRlbnRpZnlpbmcgcmVsZXZhbnQgcGFydGl0aW9uZWQgdGFibGVzCiAgKiAgIHdpdGhpbiBhIHNp bmdsZSBwYXJ0aXRpb25pbmcgaGllcmFyY2h5CiAgKiByZWxpZF9zdWJwbGFuX21hcFtdOiBtYXBz IGNoaWxkIHJlbGF0aW9uIHJlbGlkcyB0byBzdWJwbGFuIGluZGV4ZXMKKyAqIGF2YWlsYWJsZV9y ZWxzOiB0aGUgcmVsaWQgc2V0IG9mIHJlbHMgd2hvc2UgVmFycyBtYXkgYmUgdXNlZCBmb3IKKyAq ICAgcHJ1bmluZy4KICAqIG1hdGNoZWRzdWJwbGFuczogb24gc3VjY2VzcywgcmVjZWl2ZXMgdGhl IHNldCBvZiBzdWJwbGFuIGluZGV4ZXMgd2hpY2gKICAqICAgd2VyZSBtYXRjaGVkIHRvIHRoaXMg cGFydGl0aW9uIGhpZXJhcmNoeQogICoKQEAgLTQzOSw2ICs2MzMsNyBAQCBtYWtlX3BhcnRpdGlv bmVkcmVsX3BydW5laW5mbyhQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqcGFyZW50cmVs LAogCQkJCQkJCSAgTGlzdCAqcHJ1bmVxdWFsLAogCQkJCQkJCSAgQml0bWFwc2V0ICpwYXJ0cmVs aWRzLAogCQkJCQkJCSAgaW50ICpyZWxpZF9zdWJwbGFuX21hcCwKKwkJCQkJCQkgIEJpdG1hcHNl dCAqYXZhaWxhYmxlX3JlbHMsCiAJCQkJCQkJICBCaXRtYXBzZXQgKiptYXRjaGVkc3VicGxhbnMp CiB7CiAJUmVsT3B0SW5mbyAqdGFyZ2V0cGFydCA9IE5VTEw7CkBAIC01MzgsOCArNzMzLDggQEAg bWFrZV9wYXJ0aXRpb25lZHJlbF9wcnVuZWluZm8oUGxhbm5lckluZm8gKnJvb3QsIFJlbE9wdElu Zm8gKnBhcmVudHJlbCwKIAkJICogcHJ1bmluZyBzdGVwcyBhbmQgZGV0ZWN0cyB3aGV0aGVyIHRo ZXJlJ3MgYW55IHBvc3NpYmx5LXVzZWZ1bCBxdWFscwogCQkgKiB0aGF0IHdvdWxkIHJlcXVpcmUg cGVyLXNjYW4gcHJ1bmluZy4KIAkJICovCi0JCWdlbl9wYXJ0cHJ1bmVfc3RlcHMoc3VicGFydCwg cGFydHBydW5lcXVhbCwgUEFSVFRBUkdFVF9JTklUSUFMLAotCQkJCQkJCSZjb250ZXh0KTsKKwkJ Z2VuX3BhcnRwcnVuZV9zdGVwcyhzdWJwYXJ0LCBwYXJ0cHJ1bmVxdWFsLCBhdmFpbGFibGVfcmVs cywKKwkJCQkJCQlQQVJUVEFSR0VUX0lOSVRJQUwsICZjb250ZXh0KTsKIAogCQlpZiAoY29udGV4 dC5jb250cmFkaWN0b3J5KQogCQl7CkBAIC01NjYsMTQgKzc2MSwxNSBAQCBtYWtlX3BhcnRpdGlv bmVkcmVsX3BydW5laW5mbyhQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqcGFyZW50cmVs LAogCQkJaW5pdGlhbF9wcnVuaW5nX3N0ZXBzID0gTklMOwogCiAJCS8qCi0JCSAqIElmIG5vIGV4 ZWMgUGFyYW1zIGFwcGVhciBpbiBwb3RlbnRpYWxseS11c2FibGUgcHJ1bmluZyBjbGF1c2VzLAot CQkgKiB0aGVuIHRoZXJlJ3Mgbm8gcG9pbnQgaW4gZXZlbiB0aGlua2luZyBhYm91dCBwZXItc2Nh biBwcnVuaW5nLgorCQkgKiBJZiBubyBleGVjIFBhcmFtcyBvciBhdmFpbGFibGUgVmFycyBhcHBl YXIgaW4gcG90ZW50aWFsbHktdXNhYmxlCisJCSAqIHBydW5pbmcgY2xhdXNlcywgdGhlbiB0aGVy ZSdzIG5vIHBvaW50IGluIGV2ZW4gdGhpbmtpbmcgYWJvdXQKKwkJICogcGVyLXNjYW4gcHJ1bmlu Zy4KIAkJICovCi0JCWlmIChjb250ZXh0Lmhhc19leGVjX3BhcmFtKQorCQlpZiAoY29udGV4dC5o YXNfZXhlY19wYXJhbSB8fCBjb250ZXh0Lmhhc192YXJzKQogCQl7CiAJCQkvKiAuLi4gT0ssIHdl J2QgYmV0dGVyIHRoaW5rIGFib3V0IGl0ICovCi0JCQlnZW5fcGFydHBydW5lX3N0ZXBzKHN1YnBh cnQsIHBhcnRwcnVuZXF1YWwsIFBBUlRUQVJHRVRfRVhFQywKLQkJCQkJCQkJJmNvbnRleHQpOwor CQkJZ2VuX3BhcnRwcnVuZV9zdGVwcyhzdWJwYXJ0LCBwYXJ0cHJ1bmVxdWFsLCBhdmFpbGFibGVf cmVscywKKwkJCQkJCQkJUEFSVFRBUkdFVF9FWEVDLCAmY29udGV4dCk7CiAKIAkJCWlmIChjb250 ZXh0LmNvbnRyYWRpY3RvcnkpCiAJCQl7CkBAIC01ODYsMTEgKzc4MiwxNCBAQCBtYWtlX3BhcnRp dGlvbmVkcmVsX3BydW5laW5mbyhQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqcGFyZW50 cmVsLAogCQkJLyoKIAkJCSAqIERldGVjdCB3aGljaCBleGVjIFBhcmFtcyBhY3R1YWxseSBnb3Qg dXNlZDsgdGhlIGZhY3QgdGhhdCBzb21lCiAJCQkgKiB3ZXJlIGluIGF2YWlsYWJsZSBjbGF1c2Vz IGRvZXNuJ3QgbWVhbiB3ZSBhY3R1YWxseSB1c2VkIHRoZW0uCi0JCQkgKiBTa2lwIHBlci1zY2Fu IHBydW5pbmcgaWYgdGhlcmUgYXJlIG5vbmUuCiAJCQkgKi8KIAkJCWV4ZWNwYXJhbWlkcyA9IGdl dF9wYXJ0a2V5X2V4ZWNfcGFyYW1pZHMoZXhlY19wcnVuaW5nX3N0ZXBzKTsKIAotCQkJaWYgKGJt c19pc19lbXB0eShleGVjcGFyYW1pZHMpKQorCQkJLyoKKwkJCSAqIFNraXAgcGVyLXNjYW4gcHJ1 bmluZyBpZiB0aGVyZSBhcmUgbm9uZSB1c2VkIGV4ZWMgUGFyYW1zIGFuZAorCQkJICogdGhlcmUg YXJlIG5vbmUgYXZhaWxhYmxlIFZhcnMuCisJCQkgKi8KKwkJCWlmIChibXNfaXNfZW1wdHkoZXhl Y3BhcmFtaWRzKSAmJiAhY29udGV4dC5oYXNfdmFycykKIAkJCQlleGVjX3BydW5pbmdfc3RlcHMg PSBOSUw7CiAJCX0KIAkJZWxzZQpAQCAtNzAyLDYgKzkwMSw5IEBAIG1ha2VfcGFydGl0aW9uZWRy ZWxfcHJ1bmVpbmZvKFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpwYXJlbnRyZWwsCiAg KgkJUHJvY2VzcyAnY2xhdXNlcycgKHR5cGljYWxseSBhIHJlbCdzIGJhc2VyZXN0cmljdGluZm8g bGlzdCBvZiBjbGF1c2VzKQogICoJCWFuZCBjcmVhdGUgYSBsaXN0IG9mICJwYXJ0aXRpb24gcHJ1 bmluZyBzdGVwcyIuCiAgKgorICogJ2F2YWlsYWJsZV9yZWxzJyBpcyB0aGUgcmVsaWQgc2V0IG9m IHJlbHMgd2hvc2UgVmFycyBtYXkgYmUgdXNlZCBmb3IKKyAqIHBydW5pbmcuCisgKgogICogJ3Rh cmdldCcgdGVsbHMgd2hldGhlciB0byBnZW5lcmF0ZSBwcnVuaW5nIHN0ZXBzIGZvciBwbGFubmlu ZyAodXNlCiAgKiBpbW11dGFibGUgY2xhdXNlcyBvbmx5KSwgb3IgZm9yIGV4ZWN1dG9yIHN0YXJ0 dXAgKHVzZSBhbnkgYWxsb3dhYmxlCiAgKiBjbGF1c2UgZXhjZXB0IG9uZXMgY29udGFpbmluZyBQ QVJBTV9FWEVDIFBhcmFtcyksIG9yIGZvciBleGVjdXRvcgpAQCAtNzExLDEyICs5MTMsMTMgQEAg bWFrZV9wYXJ0aXRpb25lZHJlbF9wcnVuZWluZm8oUGxhbm5lckluZm8gKnJvb3QsIFJlbE9wdElu Zm8gKnBhcmVudHJlbCwKICAqIHNvbWUgc3Vic2lkaWFyeSBmbGFnczsgc2VlIHRoZSBHZW5lcmF0 ZVBydW5pbmdTdGVwc0NvbnRleHQgdHlwZWRlZi4KICAqLwogc3RhdGljIHZvaWQKLWdlbl9wYXJ0 cHJ1bmVfc3RlcHMoUmVsT3B0SW5mbyAqcmVsLCBMaXN0ICpjbGF1c2VzLCBQYXJ0Q2xhdXNlVGFy Z2V0IHRhcmdldCwKLQkJCQkJR2VuZXJhdGVQcnVuaW5nU3RlcHNDb250ZXh0ICpjb250ZXh0KQor Z2VuX3BhcnRwcnVuZV9zdGVwcyhSZWxPcHRJbmZvICpyZWwsIExpc3QgKmNsYXVzZXMsIEJpdG1h cHNldCAqYXZhaWxhYmxlX3JlbHMsCisJCQkJCVBhcnRDbGF1c2VUYXJnZXQgdGFyZ2V0LCBHZW5l cmF0ZVBydW5pbmdTdGVwc0NvbnRleHQgKmNvbnRleHQpCiB7CiAJLyogSW5pdGlhbGl6ZSBhbGwg b3V0cHV0IHZhbHVlcyB0byB6ZXJvL2ZhbHNlL05VTEwgKi8KIAltZW1zZXQoY29udGV4dCwgMCwg c2l6ZW9mKEdlbmVyYXRlUHJ1bmluZ1N0ZXBzQ29udGV4dCkpOwogCWNvbnRleHQtPnJlbCA9IHJl bDsKKwljb250ZXh0LT5hdmFpbGFibGVfcmVscyA9IGF2YWlsYWJsZV9yZWxzOwogCWNvbnRleHQt PnRhcmdldCA9IHRhcmdldDsKIAogCS8qCkBAIC03NzIsNyArOTc1LDcgQEAgcHJ1bmVfYXBwZW5k X3JlbF9wYXJ0aXRpb25zKFJlbE9wdEluZm8gKnJlbCkKIAkgKiBJZiB0aGUgY2xhdXNlcyBhcmUg Zm91bmQgdG8gYmUgY29udHJhZGljdG9yeSwgd2UgY2FuIHJldHVybiB0aGUgZW1wdHkKIAkgKiBz ZXQuCiAJICovCi0JZ2VuX3BhcnRwcnVuZV9zdGVwcyhyZWwsIGNsYXVzZXMsIFBBUlRUQVJHRVRf UExBTk5FUiwKKwlnZW5fcGFydHBydW5lX3N0ZXBzKHJlbCwgY2xhdXNlcywgTlVMTCwgUEFSVFRB UkdFVF9QTEFOTkVSLAogCQkJCQkJJmdjb250ZXh0KTsKIAlpZiAoZ2NvbnRleHQuY29udHJhZGlj dG9yeSkKIAkJcmV0dXJuIE5VTEw7CkBAIC0yMDIwLDkgKzIyMjMsMTAgQEAgbWF0Y2hfY2xhdXNl X3RvX3BhcnRpdGlvbl9rZXkoR2VuZXJhdGVQcnVuaW5nU3RlcHNDb250ZXh0ICpjb250ZXh0LAog CQkJCXJldHVybiBQQVJUQ0xBVVNFX1VOU1VQUE9SVEVEOwogCiAJCQkvKgotCQkJICogV2UgY2Fu IG5ldmVyIHBydW5lIHVzaW5nIGFuIGV4cHJlc3Npb24gdGhhdCBjb250YWlucyBWYXJzLgorCQkJ ICogV2UgY2FuIG5ldmVyIHBydW5lIHVzaW5nIGFuIGV4cHJlc3Npb24gdGhhdCBjb250YWlucyBW YXJzIGV4Y2VwdAorCQkJICogZm9yIFZhcnMgYmVsb25naW5nIHRvIGNvbnRleHQtPmF2YWlsYWJs ZV9yZWxzLgogCQkJICovCi0JCQlpZiAoY29udGFpbl92YXJfY2xhdXNlKChOb2RlICopIGV4cHIp KQorCQkJaWYgKGNvbnRhaW5fZm9yYmlkZGVuX3Zhcl9jbGF1c2UoKE5vZGUgKikgZXhwciwgY29u dGV4dCkpCiAJCQkJcmV0dXJuIFBBUlRDTEFVU0VfVU5TVVBQT1JURUQ7CiAKIAkJCS8qCkBAIC0y MjE4LDkgKzI0MjIsMTAgQEAgbWF0Y2hfY2xhdXNlX3RvX3BhcnRpdGlvbl9rZXkoR2VuZXJhdGVQ cnVuaW5nU3RlcHNDb250ZXh0ICpjb250ZXh0LAogCQkJCXJldHVybiBQQVJUQ0xBVVNFX1VOU1VQ UE9SVEVEOwogCiAJCQkvKgotCQkJICogV2UgY2FuIG5ldmVyIHBydW5lIHVzaW5nIGFuIGV4cHJl c3Npb24gdGhhdCBjb250YWlucyBWYXJzLgorCQkJICogV2UgY2FuIG5ldmVyIHBydW5lIHVzaW5n IGFuIGV4cHJlc3Npb24gdGhhdCBjb250YWlucyBWYXJzIGV4Y2VwdAorCQkJICogZm9yIFZhcnMg YmVsb25naW5nIHRvIGNvbnRleHQtPmF2YWlsYWJsZV9yZWxzLgogCQkJICovCi0JCQlpZiAoY29u dGFpbl92YXJfY2xhdXNlKChOb2RlICopIHJpZ2h0b3ApKQorCQkJaWYgKGNvbnRhaW5fZm9yYmlk ZGVuX3Zhcl9jbGF1c2UoKE5vZGUgKikgcmlnaHRvcCwgY29udGV4dCkpCiAJCQkJcmV0dXJuIFBB UlRDTEFVU0VfVU5TVVBQT1JURUQ7CiAKIAkJCS8qCkBAIC0zNzkwLDMgKzM5OTUsNTQgQEAgcGFy dGtleV9kYXR1bV9mcm9tX2V4cHIoUGFydGl0aW9uUHJ1bmVDb250ZXh0ICpjb250ZXh0LAogCQkq dmFsdWUgPSBFeGVjRXZhbEV4cHJTd2l0Y2hDb250ZXh0KGV4cHJzdGF0ZSwgZWN0eCwgaXNudWxs KTsKIAl9CiB9CisKKy8qCisgKiBjb250YWluX2ZvcmJpZGRlbl92YXJfY2xhdXNlCisgKgkgIFJl Y3Vyc2l2ZWx5IHNjYW4gYSBjbGF1c2UgdG8gZGlzY292ZXIgd2hldGhlciBpdCBjb250YWlucyBh bnkgVmFyIG5vZGVzCisgKgkgIChvZiB0aGUgY3VycmVudCBxdWVyeSBsZXZlbCkgdGhhdCBkbyBu b3QgYmVsb25nIHRvIHJlbGF0aW9ucyBpbgorICoJICBjb250ZXh0LT5hdmFpbGFibGVfcmVscy4K KyAqCisgKgkgIFJldHVybnMgdHJ1ZSBpZiBhbnkgc3VjaCB2YXJub2RlIGZvdW5kLgorICoKKyAq IERvZXMgbm90IGV4YW1pbmUgc3VicXVlcmllcywgdGhlcmVmb3JlIG11c3Qgb25seSBiZSB1c2Vk IGFmdGVyIHJlZHVjdGlvbgorICogb2Ygc3VibGlua3MgdG8gc3VicGxhbnMhCisgKi8KK3N0YXRp YyBib29sCitjb250YWluX2ZvcmJpZGRlbl92YXJfY2xhdXNlKE5vZGUgKm5vZGUsIEdlbmVyYXRl UHJ1bmluZ1N0ZXBzQ29udGV4dCAqY29udGV4dCkKK3sKKwlyZXR1cm4gY29udGFpbl9mb3JiaWRk ZW5fdmFyX2NsYXVzZV93YWxrZXIobm9kZSwgY29udGV4dCk7Cit9CisKK3N0YXRpYyBib29sCitj b250YWluX2ZvcmJpZGRlbl92YXJfY2xhdXNlX3dhbGtlcihOb2RlICpub2RlLCBHZW5lcmF0ZVBy dW5pbmdTdGVwc0NvbnRleHQgKmNvbnRleHQpCit7CisJaWYgKG5vZGUgPT0gTlVMTCkKKwkJcmV0 dXJuIGZhbHNlOworCWlmIChJc0Eobm9kZSwgVmFyKSkKKwl7CisJCVZhcgkJKnZhciA9IChWYXIg Kikgbm9kZTsKKworCQlpZiAodmFyLT52YXJsZXZlbHN1cCAhPSAwKQorCQkJcmV0dXJuIGZhbHNl OworCisJCWlmICghYm1zX2lzX21lbWJlcih2YXItPnZhcm5vLCBjb250ZXh0LT5hdmFpbGFibGVf cmVscykpCisJCQlyZXR1cm4gdHJ1ZTsJCS8qIGFib3J0IHRoZSB0cmVlIHRyYXZlcnNhbCBhbmQg cmV0dXJuIHRydWUgKi8KKworCQljb250ZXh0LT5oYXNfdmFycyA9IHRydWU7CisKKwkJaWYgKGNv bnRleHQtPnRhcmdldCAhPSBQQVJUVEFSR0VUX0VYRUMpCisJCQlyZXR1cm4gdHJ1ZTsJCS8qIGFi b3J0IHRoZSB0cmVlIHRyYXZlcnNhbCBhbmQgcmV0dXJuIHRydWUgKi8KKworCQlyZXR1cm4gZmFs c2U7CisJfQorCWlmIChJc0Eobm9kZSwgQ3VycmVudE9mRXhwcikpCisJCXJldHVybiB0cnVlOwor CWlmIChJc0Eobm9kZSwgUGxhY2VIb2xkZXJWYXIpKQorCXsKKwkJaWYgKCgoUGxhY2VIb2xkZXJW YXIgKikgbm9kZSktPnBobGV2ZWxzdXAgPT0gMCkKKwkJCXJldHVybiB0cnVlOwkJLyogYWJvcnQg dGhlIHRyZWUgdHJhdmVyc2FsIGFuZCByZXR1cm4gdHJ1ZSAqLworCQkvKiBlbHNlIGZhbGwgdGhy b3VnaCB0byBjaGVjayB0aGUgY29udGFpbmVkIGV4cHIgKi8KKwl9CisJcmV0dXJuIGV4cHJlc3Np b25fdHJlZV93YWxrZXIobm9kZSwgY29udGFpbl9mb3JiaWRkZW5fdmFyX2NsYXVzZV93YWxrZXIs CisJCQkJCQkJCSAgKHZvaWQgKikgY29udGV4dCk7Cit9CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVk ZS9leGVjdXRvci9leGVjUGFydGl0aW9uLmggYi9zcmMvaW5jbHVkZS9leGVjdXRvci9leGVjUGFy dGl0aW9uLmgKaW5kZXggYzA5YmM4M2IyYS4uN2U0NmYwYmFmNiAxMDA2NDQKLS0tIGEvc3JjL2lu Y2x1ZGUvZXhlY3V0b3IvZXhlY1BhcnRpdGlvbi5oCisrKyBiL3NyYy9pbmNsdWRlL2V4ZWN1dG9y L2V4ZWNQYXJ0aXRpb24uaApAQCAtMTIxLDExICsxMjEsMjYgQEAgdHlwZWRlZiBzdHJ1Y3QgUGFy dGl0aW9uUHJ1bmVTdGF0ZQogCVBhcnRpdGlvblBydW5pbmdEYXRhICpwYXJ0cHJ1bmVkYXRhW0ZM RVhJQkxFX0FSUkFZX01FTUJFUl07CiB9IFBhcnRpdGlvblBydW5lU3RhdGU7CiAKKy8qCisgKiBK b2luUGFydGl0aW9uUHJ1bmVTdGF0ZSAtIFN0YXRlIG9iamVjdCByZXF1aXJlZCBmb3IgcGxhbiBu b2RlcyB0byBwZXJmb3JtCisgKiBqb2luIHBhcnRpdGlvbiBwcnVuaW5nLgorICovCit0eXBlZGVm IHN0cnVjdCBKb2luUGFydGl0aW9uUHJ1bmVTdGF0ZQoreworCVBhcnRpdGlvblBydW5lU3RhdGUg KnBhcnRfcHJ1bmVfc3RhdGU7CisJaW50CQkJcGFyYW1pZDsKKwlpbnQJCQlucGxhbnM7CisJYm9v bAkJZmluaXNoZWQ7CisJQml0bWFwc2V0ICAqcGFydF9wcnVuZV9yZXN1bHQ7Cit9IEpvaW5QYXJ0 aXRpb25QcnVuZVN0YXRlOworCiBleHRlcm4gUGFydGl0aW9uUHJ1bmVTdGF0ZSAqRXhlY0luaXRQ YXJ0aXRpb25QcnVuaW5nKFBsYW5TdGF0ZSAqcGxhbnN0YXRlLAogCQkJCQkJCQkJCQkJCSBpbnQg bl90b3RhbF9zdWJwbGFucywKIAkJCQkJCQkJCQkJCQkgUGFydGl0aW9uUHJ1bmVJbmZvICpwcnVu ZWluZm8sCiAJCQkJCQkJCQkJCQkJIEJpdG1hcHNldCAqKmluaXRpYWxseV92YWxpZF9zdWJwbGFu cyk7CitleHRlcm4gTGlzdCAqRXhlY0luaXRKb2lucGFydHBydW5lTGlzdChQbGFuU3RhdGUgKnBs YW5zdGF0ZSwgTGlzdCAqam9pbnBhcnRwcnVuZV9pbmZvX2xpc3QpOwogZXh0ZXJuIEJpdG1hcHNl dCAqRXhlY0ZpbmRNYXRjaGluZ1N1YlBsYW5zKFBhcnRpdGlvblBydW5lU3RhdGUgKnBydW5lc3Rh dGUsCi0JCQkJCQkJCQkJICAgYm9vbCBpbml0aWFsX3BydW5lKTsKKwkJCQkJCQkJCQkgICBib29s IGluaXRpYWxfcHJ1bmUsCisJCQkJCQkJCQkJICAgUGxhblN0YXRlICpwbGFuc3RhdGUpOwogCiAj ZW5kaWYJCQkJCQkJLyogRVhFQ1BBUlRJVElPTl9IICovCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVk ZS9ub2Rlcy9leGVjbm9kZXMuaCBiL3NyYy9pbmNsdWRlL25vZGVzL2V4ZWNub2Rlcy5oCmluZGV4 IDkyNTkzNTI2NzIuLjNjZmQwMTFhMGEgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL25vZGVzL2V4 ZWNub2Rlcy5oCisrKyBiL3NyYy9pbmNsdWRlL25vZGVzL2V4ZWNub2Rlcy5oCkBAIC0yNjg0LDYg KzI2ODQsOSBAQCB0eXBlZGVmIHN0cnVjdCBIYXNoU3RhdGUKIAogCS8qIFBhcmFsbGVsIGhhc2gg c3RhdGUuICovCiAJc3RydWN0IFBhcmFsbGVsSGFzaEpvaW5TdGF0ZSAqcGFyYWxsZWxfc3RhdGU7 CisKKwkvKiBJbmZvcyBmb3Igam9pbiBwYXJ0aXRpb24gcHJ1bmluZy4gKi8KKwlMaXN0ICpqb2lu cGFydHBydW5lX3N0YXRlX2xpc3Q7CiB9IEhhc2hTdGF0ZTsKIAogLyogLS0tLS0tLS0tLS0tLS0t LQpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvbm9kZXMvcGF0aG5vZGVzLmggYi9zcmMvaW5jbHVk ZS9ub2Rlcy9wYXRobm9kZXMuaAppbmRleCA1MzQ2OTJiZWUxLi5kYTc4MDM0NDhhIDEwMDY0NAot LS0gYS9zcmMvaW5jbHVkZS9ub2Rlcy9wYXRobm9kZXMuaAorKysgYi9zcmMvaW5jbHVkZS9ub2Rl cy9wYXRobm9kZXMuaApAQCAtNTMwLDYgKzUzMCw5IEBAIHN0cnVjdCBQbGFubmVySW5mbwogCS8q IG5vdC15ZXQtYXNzaWduZWQgTmVzdExvb3BQYXJhbXMgKi8KIAlMaXN0CSAgICpjdXJPdXRlclBh cmFtczsKIAorCS8qIGEgc3RhY2sgb2YgSm9pblBhcnRpdGlvblBydW5lSW5mb3MgKi8KKwlMaXN0 CSAgICpqb2luX3BhcnRpdGlvbl9wcnVuZV9jYW5kaWRhdGVzOworCiAJLyoKIAkgKiBUaGVzZSBm aWVsZHMgYXJlIHdvcmtzcGFjZSBmb3Igc2V0cmVmcy5jLiAgRWFjaCBpcyBhbiBhcnJheQogCSAq IGNvcnJlc3BvbmRpbmcgdG8gZ2xvYi0+c3VicGxhbnMuICAoV2UgY291bGQgcHJvYmFibHkgdGVh Y2gKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL25vZGVzL3BsYW5ub2Rlcy5oIGIvc3JjL2luY2x1 ZGUvbm9kZXMvcGxhbm5vZGVzLmgKaW5kZXggYjRlZjZiYzQ0Yy4uOTY0YmM4NTEyMyAxMDA2NDQK LS0tIGEvc3JjL2luY2x1ZGUvbm9kZXMvcGxhbm5vZGVzLmgKKysrIGIvc3JjL2luY2x1ZGUvbm9k ZXMvcGxhbm5vZGVzLmgKQEAgLTI3NSw2ICsyNzUsOSBAQCB0eXBlZGVmIHN0cnVjdCBBcHBlbmQK IAogCS8qIEluZm8gZm9yIHJ1bi10aW1lIHN1YnBsYW4gcHJ1bmluZzsgTlVMTCBpZiB3ZSdyZSBu b3QgZG9pbmcgdGhhdCAqLwogCXN0cnVjdCBQYXJ0aXRpb25QcnVuZUluZm8gKnBhcnRfcHJ1bmVf aW5mbzsKKworCS8qIEluZm8gZm9yIGpvaW4gcGFydGl0aW9uIHBydW5pbmc7IE5VTEwgaWYgd2Un cmUgbm90IGRvaW5nIHRoYXQgKi8KKwlCaXRtYXBzZXQgICpqb2luX3BydW5lX3BhcmFtaWRzOwog fSBBcHBlbmQ7CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0KQEAgLTMxMCw2ICszMTMsOSBAQCB0eXBl ZGVmIHN0cnVjdCBNZXJnZUFwcGVuZAogCiAJLyogSW5mbyBmb3IgcnVuLXRpbWUgc3VicGxhbiBw cnVuaW5nOyBOVUxMIGlmIHdlJ3JlIG5vdCBkb2luZyB0aGF0ICovCiAJc3RydWN0IFBhcnRpdGlv blBydW5lSW5mbyAqcGFydF9wcnVuZV9pbmZvOworCisJLyogSW5mbyBmb3Igam9pbiBwYXJ0aXRp b24gcHJ1bmluZzsgTlVMTCBpZiB3ZSdyZSBub3QgZG9pbmcgdGhhdCAqLworCUJpdG1hcHNldCAg KmpvaW5fcHJ1bmVfcGFyYW1pZHM7CiB9IE1lcmdlQXBwZW5kOwogCiAvKiAtLS0tLS0tLS0tLS0t LS0tCkBAIC0xMjA2LDYgKzEyMTIsNyBAQCB0eXBlZGVmIHN0cnVjdCBIYXNoCiAJYm9vbAkJc2tl d0luaGVyaXQ7CS8qIGlzIG91dGVyIGpvaW4gcmVsIGFuIGluaGVyaXRhbmNlIHRyZWU/ICovCiAJ LyogYWxsIG90aGVyIGluZm8gaXMgaW4gdGhlIHBhcmVudCBIYXNoSm9pbiBub2RlICovCiAJQ2Fy ZGluYWxpdHkgcm93c190b3RhbDsJCS8qIGVzdGltYXRlIHRvdGFsIHJvd3MgaWYgcGFyYWxsZWxf YXdhcmUgKi8KKwlMaXN0CSAgICpqb2lucGFydHBydW5lX2luZm9fbGlzdDsJLyogaW5mb3MgZm9y IGpvaW4gcGFydGl0aW9uIHBydW5pbmcgKi8KIH0gSGFzaDsKIAogLyogLS0tLS0tLS0tLS0tLS0t LQpAQCAtMTU1Miw2ICsxNTU5LDM1IEBAIHR5cGVkZWYgc3RydWN0IFBhcnRpdGlvblBydW5lU3Rl cENvbWJpbmUKIAlMaXN0CSAgICpzb3VyY2Vfc3RlcGlkczsKIH0gUGFydGl0aW9uUHJ1bmVTdGVw Q29tYmluZTsKIAorLyoKKyAqIEpvaW5QYXJ0aXRpb25QcnVuZUNhbmRpZGF0ZUluZm8gLSBJbmZv cm1hdGlvbiByZXF1aXJlZCB0byBidWlsZAorICogSm9pblBhcnRpdGlvblBydW5lSW5mb3MuCisg Ki8KK3R5cGVkZWYgc3RydWN0IEpvaW5QYXJ0aXRpb25QcnVuZUNhbmRpZGF0ZUluZm8KK3sKKwlw Z19ub2RlX2F0dHIobm9fZXF1YWwsIG5vX3F1ZXJ5X2p1bWJsZSkKKworCU5vZGVUYWcJCXR5cGU7 CisJTGlzdAkgICAqam9pbnJlc3RyaWN0aW5mbzsKKwlCaXRtYXBzZXQgICppbm5lcl9yZWxpZHM7 CisJZG91YmxlCQlpbm5lcl9yb3dzOworCUxpc3QJICAgKmpvaW5wYXJ0cHJ1bmVfaW5mb19saXN0 OworfSBKb2luUGFydGl0aW9uUHJ1bmVDYW5kaWRhdGVJbmZvOworCisvKgorICogSm9pblBhcnRp dGlvblBydW5lSW5mbyAtIERldGFpbHMgcmVxdWlyZWQgdG8gYWxsb3cgdGhlIGV4ZWN1dG9yIHRv IHBydW5lCisgKiBwYXJ0aXRpb25zIGR1cmluZyBqb2luLgorICovCit0eXBlZGVmIHN0cnVjdCBK b2luUGFydGl0aW9uUHJ1bmVJbmZvCit7CisJcGdfbm9kZV9hdHRyKG5vX2VxdWFsLCBub19xdWVy eV9qdW1ibGUpCisKKwlOb2RlVGFnCQl0eXBlOworCVBhcnRpdGlvblBydW5lSW5mbyAqcGFydF9w cnVuZV9pbmZvOworCWludAkJCXBhcmFtaWQ7CisJaW50CQkJbnBsYW5zOworfSBKb2luUGFydGl0 aW9uUHJ1bmVJbmZvOworCiAKIC8qCiAgKiBQbGFuIGludmFsaWRhdGlvbiBpbmZvCmRpZmYgLS1n aXQgYS9zcmMvaW5jbHVkZS9vcHRpbWl6ZXIvY29zdC5oIGIvc3JjL2luY2x1ZGUvb3B0aW1pemVy L2Nvc3QuaAppbmRleCBiMWM1MWE0ZTcwLi41Y2NkM2M2MmQ0IDEwMDY0NAotLS0gYS9zcmMvaW5j bHVkZS9vcHRpbWl6ZXIvY29zdC5oCisrKyBiL3NyYy9pbmNsdWRlL29wdGltaXplci9jb3N0LmgK QEAgLTIxMiw1ICsyMTIsOSBAQCBleHRlcm4gUGF0aFRhcmdldCAqc2V0X3BhdGh0YXJnZXRfY29z dF93aWR0aChQbGFubmVySW5mbyAqcm9vdCwgUGF0aFRhcmdldCAqdGFyZwogZXh0ZXJuIGRvdWJs ZSBjb21wdXRlX2JpdG1hcF9wYWdlcyhQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqYmFz ZXJlbCwKIAkJCQkJCQkJICAgUGF0aCAqYml0bWFwcXVhbCwgZG91YmxlIGxvb3BfY291bnQsCiAJ CQkJCQkJCSAgIENvc3QgKmNvc3RfcCwgZG91YmxlICp0dXBsZXNfcCk7CitleHRlcm4gZG91Ymxl IGNvbXB1dGVfcGFydHBydW5lX2Nvc3QoUGxhbm5lckluZm8gKnJvb3QsIFJlbE9wdEluZm8gKmFw cGVuZHJlbCwKKwkJCQkJCQkJCSBDb3N0IGFwcGVuZF90b3RhbF9jb3N0LCBpbnQgYXBwZW5kX25w bGFucywKKwkJCQkJCQkJCSBSZWxpZHMgaW5uZXJfcmVsaWRzLCBkb3VibGUgaW5uZXJfcm93cywK KwkJCQkJCQkJCSBMaXN0ICpwcnVuZXF1YWwpOwogCiAjZW5kaWYJCQkJCQkJLyogQ09TVF9IICov CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9wYXJ0aXRpb25pbmcvcGFydHBydW5lLmggYi9zcmMv aW5jbHVkZS9wYXJ0aXRpb25pbmcvcGFydHBydW5lLmgKaW5kZXggYmQ0OTBkMTU0Zi4uNTE4NzQ4 NWM4OCAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvcGFydGl0aW9uaW5nL3BhcnRwcnVuZS5oCisr KyBiL3NyYy9pbmNsdWRlL3BhcnRpdGlvbmluZy9wYXJ0cHJ1bmUuaApAQCAtMTksNiArMTksOCBA QAogCiBzdHJ1Y3QgUGxhbm5lckluZm87CQkJCS8qIGF2b2lkIGluY2x1ZGluZyBwYXRobm9kZXMu aCBoZXJlICovCiBzdHJ1Y3QgUmVsT3B0SW5mbzsKK3N0cnVjdCBQYXRoOworc3RydWN0IEpvaW5Q YXRoOwogCiAKIC8qCkBAIC03Myw3ICs3NSwxNSBAQCB0eXBlZGVmIHN0cnVjdCBQYXJ0aXRpb25Q cnVuZUNvbnRleHQKIGV4dGVybiBQYXJ0aXRpb25QcnVuZUluZm8gKm1ha2VfcGFydGl0aW9uX3By dW5laW5mbyhzdHJ1Y3QgUGxhbm5lckluZm8gKnJvb3QsCiAJCQkJCQkJCQkJCQkJc3RydWN0IFJl bE9wdEluZm8gKnBhcmVudHJlbCwKIAkJCQkJCQkJCQkJCQlMaXN0ICpzdWJwYXRocywKLQkJCQkJ CQkJCQkJCQlMaXN0ICpwcnVuZXF1YWwpOworCQkJCQkJCQkJCQkJCUxpc3QgKnBydW5lcXVhbCwK KwkJCQkJCQkJCQkJCQlCaXRtYXBzZXQgKmF2YWlsYWJsZV9yZWxzKTsKK2V4dGVybiBCaXRtYXBz ZXQgKm1ha2Vfam9pbl9wYXJ0aXRpb25fcHJ1bmVpbmZvcyhzdHJ1Y3QgUGxhbm5lckluZm8gKnJv b3QsCisJCQkJCQkJCQkJCQkgc3RydWN0IFJlbE9wdEluZm8gKnBhcmVudHJlbCwKKwkJCQkJCQkJ CQkJCSBzdHJ1Y3QgUGF0aCAqYmVzdF9wYXRoLAorCQkJCQkJCQkJCQkJIExpc3QgKnN1YnBhdGhz KTsKK2V4dGVybiB2b2lkIHByZXBhcmVfam9pbl9wYXJ0aXRpb25fcHJ1bmVfY2FuZGlkYXRlKHN0 cnVjdCBQbGFubmVySW5mbyAqcm9vdCwKKwkJCQkJCQkJCQkJCSAgIHN0cnVjdCBKb2luUGF0aCAq anBhdGgpOworZXh0ZXJuIExpc3QgKmdldF9qb2luX3BhcnRpdGlvbl9wcnVuZV9jYW5kaWRhdGUo c3RydWN0IFBsYW5uZXJJbmZvICpyb290KTsKIGV4dGVybiBCaXRtYXBzZXQgKnBydW5lX2FwcGVu ZF9yZWxfcGFydGl0aW9ucyhzdHJ1Y3QgUmVsT3B0SW5mbyAqcmVsKTsKIGV4dGVybiBCaXRtYXBz ZXQgKmdldF9tYXRjaGluZ19wYXJ0aXRpb25zKFBhcnRpdGlvblBydW5lQ29udGV4dCAqY29udGV4 dCwKIAkJCQkJCQkJCQkgIExpc3QgKnBydW5pbmdfc3RlcHMpOwpkaWZmIC0tZ2l0IGEvc3JjL3Rl c3QvcmVncmVzcy9leHBlY3RlZC9wYXJ0aXRpb25fcHJ1bmUub3V0IGIvc3JjL3Rlc3QvcmVncmVz cy9leHBlY3RlZC9wYXJ0aXRpb25fcHJ1bmUub3V0CmluZGV4IDljMjBhMjQ5ODIuLjdmNTFhMzk4 NmUgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvcGFydGl0aW9uX3BydW5l Lm91dAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3BhcnRpdGlvbl9wcnVuZS5vdXQK QEAgLTMxNDQsNiArMzE0NCw5MiBAQCBvcmRlciBieSB0YmwxLmNvbDEsIHRwcnQuY29sMTsKIC0t LS0tLSstLS0tLS0KICgwIHJvd3MpCiAKKy0tIGpvaW4gcGFydGl0aW9uIHBydW5pbmcKKy0tIFRo ZSAnTWVtb3J5IFVzYWdlJyBmcm9tIHRoZSBIYXNoIG5vZGUgY2FuIHZhcnkgYmV0d2VlbiBtYWNo aW5lcy4gIExldCdzIGp1c3QKKy0tIHJlcGxhY2UgdGhlIG51bWJlciB3aXRoIGFuICdOJy4KKy0t IFdlIG5lZWQgdG8gcnVuIEVYUExBSU4gQU5BTFlaRSBiZWNhdXNlIHdlIG5lZWQgdG8gc2VlICco bmV2ZXIgZXhlY3V0ZWQpJworLS0gbm90YXRpb25zIGJlY2F1c2UgdGhhdCdzIHRoZSBvbmx5IHdh eSB0byB2ZXJpZnkgcnVudGltZSBwcnVuaW5nLgorY3JlYXRlIGZ1bmN0aW9uIGV4cGxhaW5fam9p bl9wYXJ0aXRpb25fcHJ1bmluZyh0ZXh0KSByZXR1cm5zIHNldG9mIHRleHQKK2xhbmd1YWdlIHBs cGdzcWwgYXMKKyQkCitkZWNsYXJlCisgICAgbG4gdGV4dDsKK2JlZ2luCisgICAgZm9yIGxuIGlu CisgICAgICAgIGV4ZWN1dGUgZm9ybWF0KCdleHBsYWluIChhbmFseXplLCB2ZXJib3NlLCBjb3N0 cyBvZmYsIHN1bW1hcnkgb2ZmLCB0aW1pbmcgb2ZmKSAlcycsCisgICAgICAgICAgICAkMSkKKyAg ICBsb29wCisgICAgICAgIGxuIDo9IHJlZ2V4cF9yZXBsYWNlKGxuLCAnTWVtb3J5IFVzYWdlOiBc ZCsnLCAnTWVtb3J5IFVzYWdlOiBOJyk7CisgICAgICAgIHJldHVybiBuZXh0IGxuOworICAgIGVu ZCBsb29wOworZW5kOworJCQ7CitkZWxldGUgZnJvbSB0YmwxOworaW5zZXJ0IGludG8gdGJsMSB2 YWx1ZXMgKDUwMSksICg1MDUpOworYW5hbHl6ZSB0YmwxLCB0cHJ0Oworc2V0IGVuYWJsZV9uZXN0 bG9vcCA9IG9mZjsKK3NldCBlbmFibGVfbWVyZ2Vqb2luID0gb2ZmOworc2V0IGVuYWJsZV9oYXNo am9pbiA9IG9uOworc2VsZWN0IGV4cGxhaW5fam9pbl9wYXJ0aXRpb25fcHJ1bmluZygnCitzZWxl Y3QgKiBmcm9tIHRwcnQgcDEKKyAgIGlubmVyIGpvaW4gdHBydCBwMiBvbiBwMS5jb2wxID0gcDIu Y29sMQorICAgcmlnaHQgam9pbiB0YmwxIHQgb24gcDEuY29sMSA9IHQuY29sMSBhbmQgcDIuY29s MSA9IHQuY29sMTsnKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICBleHBsYWluX2pvaW5fcGFy dGl0aW9uX3BydW5pbmcgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLQorIEhhc2ggUmlnaHQgSm9pbiAoYWN0dWFsIHJvd3M9MiBsb29wcz0xKQorICAgT3V0 cHV0OiBwMS5jb2wxLCBwMi5jb2wxLCB0LmNvbDEKKyAgIEhhc2ggQ29uZDogKChwMS5jb2wxID0g dC5jb2wxKSBBTkQgKHAyLmNvbDEgPSB0LmNvbDEpKQorICAgLT4gIEhhc2ggSm9pbiAoYWN0dWFs IHJvd3M9MyBsb29wcz0xKQorICAgICAgICAgT3V0cHV0OiBwMS5jb2wxLCBwMi5jb2wxCisgICAg ICAgICBIYXNoIENvbmQ6IChwMS5jb2wxID0gcDIuY29sMSkKKyAgICAgICAgIC0+ICBBcHBlbmQg KGFjdHVhbCByb3dzPTMgbG9vcHM9MSkKKyAgICAgICAgICAgICAgIEpvaW4gUGFydGl0aW9uIFBy dW5pbmc6ICQwCisgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHVibGljLnRwcnRfMSBw MV8xIChuZXZlciBleGVjdXRlZCkKKyAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogcDFfMS5j b2wxCisgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHVibGljLnRwcnRfMiBwMV8yIChh Y3R1YWwgcm93cz0zIGxvb3BzPTEpCisgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHAxXzIu Y29sMQorICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHB1YmxpYy50cHJ0XzMgcDFfMyAo bmV2ZXIgZXhlY3V0ZWQpCisgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHAxXzMuY29sMQor ICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHB1YmxpYy50cHJ0XzQgcDFfNCAobmV2ZXIg ZXhlY3V0ZWQpCisgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHAxXzQuY29sMQorICAgICAg ICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHB1YmxpYy50cHJ0XzUgcDFfNSAobmV2ZXIgZXhlY3V0 ZWQpCisgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHAxXzUuY29sMQorICAgICAgICAgICAg ICAgLT4gIFNlcSBTY2FuIG9uIHB1YmxpYy50cHJ0XzYgcDFfNiAobmV2ZXIgZXhlY3V0ZWQpCisg ICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHAxXzYuY29sMQorICAgICAgICAgLT4gIEhhc2gg KGFjdHVhbCByb3dzPTMgbG9vcHM9MSkKKyAgICAgICAgICAgICAgIE91dHB1dDogcDIuY29sMQor ICAgICAgICAgICAgICAgQnVja2V0czogMTAyNCAgQmF0Y2hlczogMSAgTWVtb3J5IFVzYWdlOiBO a0IKKyAgICAgICAgICAgICAgIC0+ICBBcHBlbmQgKGFjdHVhbCByb3dzPTMgbG9vcHM9MSkKKyAg ICAgICAgICAgICAgICAgICAgIEpvaW4gUGFydGl0aW9uIFBydW5pbmc6ICQxCisgICAgICAgICAg ICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHVibGljLnRwcnRfMSBwMl8xIChuZXZlciBleGVj dXRlZCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogcDJfMS5jb2wxCisgICAg ICAgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHVibGljLnRwcnRfMiBwMl8yIChhY3R1 YWwgcm93cz0zIGxvb3BzPTEpCisgICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHAy XzIuY29sMQorICAgICAgICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHB1YmxpYy50cHJ0 XzMgcDJfMyAobmV2ZXIgZXhlY3V0ZWQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRw dXQ6IHAyXzMuY29sMQorICAgICAgICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHB1Ymxp Yy50cHJ0XzQgcDJfNCAobmV2ZXIgZXhlY3V0ZWQpCisgICAgICAgICAgICAgICAgICAgICAgICAg ICBPdXRwdXQ6IHAyXzQuY29sMQorICAgICAgICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9u IHB1YmxpYy50cHJ0XzUgcDJfNSAobmV2ZXIgZXhlY3V0ZWQpCisgICAgICAgICAgICAgICAgICAg ICAgICAgICBPdXRwdXQ6IHAyXzUuY29sMQorICAgICAgICAgICAgICAgICAgICAgLT4gIFNlcSBT Y2FuIG9uIHB1YmxpYy50cHJ0XzYgcDJfNiAobmV2ZXIgZXhlY3V0ZWQpCisgICAgICAgICAgICAg ICAgICAgICAgICAgICBPdXRwdXQ6IHAyXzYuY29sMQorICAgLT4gIEhhc2ggKGFjdHVhbCByb3dz PTIgbG9vcHM9MSkKKyAgICAgICAgIE91dHB1dDogdC5jb2wxCisgICAgICAgICBCdWNrZXRzOiAx MDI0ICBCYXRjaGVzOiAxICBNZW1vcnkgVXNhZ2U6IE5rQgorICAgICAgICAgUGFydGl0aW9uIFBy dW5lOiAkMCwgJDEKKyAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwdWJsaWMudGJsMSB0IChhY3R1 YWwgcm93cz0yIGxvb3BzPTEpCisgICAgICAgICAgICAgICBPdXRwdXQ6IHQuY29sMQorKDQzIHJv d3MpCisKK3NlbGVjdCAqIGZyb20gdHBydCBwMQorICAgaW5uZXIgam9pbiB0cHJ0IHAyIG9uIHAx LmNvbDEgPSBwMi5jb2wxCisgICByaWdodCBqb2luIHRibDEgdCBvbiBwMS5jb2wxID0gdC5jb2wx IGFuZCBwMi5jb2wxID0gdC5jb2wxOworIGNvbDEgfCBjb2wxIHwgY29sMSAKKy0tLS0tLSstLS0t LS0rLS0tLS0tCisgIDUwMSB8ICA1MDEgfCAgNTAxCisgIDUwNSB8ICA1MDUgfCAgNTA1CisoMiBy b3dzKQorCiBkcm9wIHRhYmxlIHRibDEsIHRwcnQ7CiAtLSBUZXN0IHdpdGggY29sdW1ucyBkZWZp bmVkIGluIHZhcnlpbmcgb3JkZXJzIGJldHdlZW4gZWFjaCBsZXZlbAogY3JlYXRlIHRhYmxlIHBh cnRfYWJjIChhIGludCBub3QgbnVsbCwgYiBpbnQgbm90IG51bGwsIGMgaW50IG5vdCBudWxsKSBw YXJ0aXRpb24gYnkgbGlzdCAoYSk7CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL3NxbC9w YXJ0aXRpb25fcHJ1bmUuc3FsIGIvc3JjL3Rlc3QvcmVncmVzcy9zcWwvcGFydGl0aW9uX3BydW5l LnNxbAppbmRleCBhMDliMjdkODIwLi4yZDFlOTZkNTFlIDEwMDY0NAotLS0gYS9zcmMvdGVzdC9y ZWdyZXNzL3NxbC9wYXJ0aXRpb25fcHJ1bmUuc3FsCisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3Mvc3Fs L3BhcnRpdGlvbl9wcnVuZS5zcWwKQEAgLTc2NCw2ICs3NjQsNDUgQEAgc2VsZWN0IHRibDEuY29s MSwgdHBydC5jb2wxIGZyb20gdGJsMQogaW5uZXIgam9pbiB0cHJ0IG9uIHRibDEuY29sMSA9IHRw cnQuY29sMQogb3JkZXIgYnkgdGJsMS5jb2wxLCB0cHJ0LmNvbDE7CiAKKy0tIGpvaW4gcGFydGl0 aW9uIHBydW5pbmcKKworLS0gVGhlICdNZW1vcnkgVXNhZ2UnIGZyb20gdGhlIEhhc2ggbm9kZSBj YW4gdmFyeSBiZXR3ZWVuIG1hY2hpbmVzLiAgTGV0J3MganVzdAorLS0gcmVwbGFjZSB0aGUgbnVt YmVyIHdpdGggYW4gJ04nLgorLS0gV2UgbmVlZCB0byBydW4gRVhQTEFJTiBBTkFMWVpFIGJlY2F1 c2Ugd2UgbmVlZCB0byBzZWUgJyhuZXZlciBleGVjdXRlZCknCistLSBub3RhdGlvbnMgYmVjYXVz ZSB0aGF0J3MgdGhlIG9ubHkgd2F5IHRvIHZlcmlmeSBydW50aW1lIHBydW5pbmcuCitjcmVhdGUg ZnVuY3Rpb24gZXhwbGFpbl9qb2luX3BhcnRpdGlvbl9wcnVuaW5nKHRleHQpIHJldHVybnMgc2V0 b2YgdGV4dAorbGFuZ3VhZ2UgcGxwZ3NxbCBhcworJCQKK2RlY2xhcmUKKyAgICBsbiB0ZXh0Owor YmVnaW4KKyAgICBmb3IgbG4gaW4KKyAgICAgICAgZXhlY3V0ZSBmb3JtYXQoJ2V4cGxhaW4gKGFu YWx5emUsIHZlcmJvc2UsIGNvc3RzIG9mZiwgc3VtbWFyeSBvZmYsIHRpbWluZyBvZmYpICVzJywK KyAgICAgICAgICAgICQxKQorICAgIGxvb3AKKyAgICAgICAgbG4gOj0gcmVnZXhwX3JlcGxhY2Uo bG4sICdNZW1vcnkgVXNhZ2U6IFxkKycsICdNZW1vcnkgVXNhZ2U6IE4nKTsKKyAgICAgICAgcmV0 dXJuIG5leHQgbG47CisgICAgZW5kIGxvb3A7CitlbmQ7CiskJDsKKworZGVsZXRlIGZyb20gdGJs MTsKK2luc2VydCBpbnRvIHRibDEgdmFsdWVzICg1MDEpLCAoNTA1KTsKK2FuYWx5emUgdGJsMSwg dHBydDsKKworc2V0IGVuYWJsZV9uZXN0bG9vcCA9IG9mZjsKK3NldCBlbmFibGVfbWVyZ2Vqb2lu ID0gb2ZmOworc2V0IGVuYWJsZV9oYXNoam9pbiA9IG9uOworCitzZWxlY3QgZXhwbGFpbl9qb2lu X3BhcnRpdGlvbl9wcnVuaW5nKCcKK3NlbGVjdCAqIGZyb20gdHBydCBwMQorICAgaW5uZXIgam9p biB0cHJ0IHAyIG9uIHAxLmNvbDEgPSBwMi5jb2wxCisgICByaWdodCBqb2luIHRibDEgdCBvbiBw MS5jb2wxID0gdC5jb2wxIGFuZCBwMi5jb2wxID0gdC5jb2wxOycpOworCitzZWxlY3QgKiBmcm9t IHRwcnQgcDEKKyAgIGlubmVyIGpvaW4gdHBydCBwMiBvbiBwMS5jb2wxID0gcDIuY29sMQorICAg cmlnaHQgam9pbiB0YmwxIHQgb24gcDEuY29sMSA9IHQuY29sMSBhbmQgcDIuY29sMSA9IHQuY29s MTsKKwogZHJvcCB0YWJsZSB0YmwxLCB0cHJ0OwogCiAtLSBUZXN0IHdpdGggY29sdW1ucyBkZWZp bmVkIGluIHZhcnlpbmcgb3JkZXJzIGJldHdlZW4gZWFjaCBsZXZlbAotLSAKMi4zMS4wCgo= --000000000000d9402c0613fd5cb9--