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.96) (envelope-from ) id 1w5CJU-002zwk-1N for pgsql-hackers@arkaria.postgresql.org; Wed, 25 Mar 2026 00:41:36 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1w5CJS-009yqn-2Q for pgsql-hackers@arkaria.postgresql.org; Wed, 25 Mar 2026 00:41:35 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1w5CJS-009yqf-11 for pgsql-hackers@lists.postgresql.org; Wed, 25 Mar 2026 00:41:34 +0000 Received: from mail-pl1-x62a.google.com ([2607:f8b0:4864:20::62a]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1w5CJP-00000000yHx-1bwE for pgsql-hackers@postgresql.org; Wed, 25 Mar 2026 00:41:34 +0000 Received: by mail-pl1-x62a.google.com with SMTP id d9443c01a7336-2aaf43014d0so40521465ad.2 for ; Tue, 24 Mar 2026 17:41:31 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1774399290; cv=none; d=google.com; s=arc-20240605; b=P/nB8rUP6JVZSBEp+YKlyabvd2PjJqiM2Nf3iVrPB223QrHDUBKVBg/p518DyhiUiR K7rDvx2e562xRokGZnG2X5iQcKt1GJe8N+XyRpYlGUeIGzsDxvmU81vPmv1+WDAv+ayU lKC+04KelD0qGGcGkwa3FBRWZr5xZpc/W5zsujSY75Ap+EKx213xRzD8pTSV2pmAuTJL cP7TvuwQvyK9gkEtz1fUBECOnS4gOmOKDgOgIDO36B1CEjoxRM8J4KvfR0yKxrcQsIXt PLj7rWsl0BoqEyDxKWxxyfjHT3Zc4/tMY1wmXFHE61ur1pQXiPufcUNA2ampolZO05Gv hwKQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:dkim-signature; bh=7tPLnjWtdetMqbLivuGWrgZbaKVV2OXz9Jxpm9vKp5g=; fh=Kob7sUOSsCW+8Z6CVTIXv4AM8oXkCaAK7pNmlBtJThM=; b=KHLIm5pgfPDWMNfIK8X0f+Ddr9wGCEJoP0QvRgbvBETGBUxDrB6zgfCB50MPNLevDg pYf6lHARXb6Uuwma7xP6qhMklY5hfm2FYrsP0WLVj+oh1DdE9L9ydb1aPQnVMrc/SuqD IOcoQ7O/lHxuaswJ2c44OWJLSJxMmVDz/byiqU5LXlFEDRztCfQd+tAb0TnF7iRw0Mgk +JVMLk7LpCwqTQ0Q/awGSctqf68B8N3fb0GxFpAi7Fwyj89WpjU4mfUimFj6gnq2NRZp JmQGaMsq/8q9dsXsduoiFoXsd2ZjbSMQdA5l1OkbpUK3BFp+38Qj0FEQXIvJcCHzxsoy Ix7g==; darn=postgresql.org ARC-Authentication-Results: i=1; mx.google.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1774399290; x=1775004090; 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=7tPLnjWtdetMqbLivuGWrgZbaKVV2OXz9Jxpm9vKp5g=; b=OoZ0nG89qXqqKiqEiB7hzgWQiiv1vGogkKTqwvZ97VxMPa0PUeSuXkNZ1EOb0NnukP Q47nHB5yP1fxTuPyY/1FSe61fVAa17d/CuCHb7OtLpTgjSAIxDIOqhm6AczLmRm3NCIA S2uob17xAqlplkEzLl3rQ+j3k/nA2lmQczgFNrBCof9MmMdvEDI9ykci4JhaGDy/0YyQ lhh5jV27mTkOJnTuCEOOE/2SQ6TPB/cguLj6kR3/PJfsziU8TX1JZocJxI/ozVQBLno4 2d2o5nGJsCR2PHzmRTIVA9opaIAQHMMzvNuxyD3ITJTu3Y+UuV+1/+d+/JUvw9dRzKT8 ZKtQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1774399290; x=1775004090; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=7tPLnjWtdetMqbLivuGWrgZbaKVV2OXz9Jxpm9vKp5g=; b=BAj5qbJleHyGKjcNm6qzNu91P+q2pPsH8MmgYaqbDp9mLAFVpS+m4tD23aR8aLO97l b82awbfG61CtodLs0NzLbO9u+FxTAJqlh+tHjHI3LeinsSQv0zPI9VwwbnoByogy3gNU /4lq19w1HfNDA9eswhlqY6H+x5iqD/5L9LSH4vvzjU9awEVsMmARST8ImQ+V3eyq5ntv U3kHtYmwUXCNYyPjisL4buRhkcs0FguouMjJWTRdQL9a3/i1A3yM05YgOD5s1qatmmU0 0L91IyQxVoMOkJ43YYuxwgBBu2/yOuibN+tN81mKz4z+QBbvV3iwpvgtfGkKf4j9CFmN 9sgA== X-Forwarded-Encrypted: i=1; AJvYcCWpQ8+m1OUSHgLLjjMuZtfvxtnHKwC1RnL9LePgxasoDjp/bFiXLgLOzttNDEdTGRnpl9saMJthGIK/xsF6@postgresql.org X-Gm-Message-State: AOJu0YzWV1dTpahR2TLtSBKiJVjyPhC1u01/DSZF4oD46A95iCt47W/t mGYA20paOuRUj0q5EzlZZqtzMWvqMr/wT5+kcRZpiOSH4lgp5/XJoMlL4BLVyzl0884YOPoyjRm Op5NMllYSV//aBWa9iZ/f7GoCIb4FRbc= X-Gm-Gg: ATEYQzz1Z0jjLjlmjovMIxqyGETDCIx69us/oaHzEz4rJPgIqwTIBX0URPTV3sA4Q6d cs9hNi53PLI5nkabpXzEfojRpzhfz94mRw/0WanoXzAREbrHFew64xcnFGIavckINmwZ+nLYD53 +2DRxT9mdviWvpZ7FKd9zbS3lAjLT6iDDLMS/I1gglc7AApPFogWu0UO0kTtkfdDfZp/wQlCQP0 shgNsMY40X0dYCPJSeZzSzxPj+TjfzRjOVRu2aTBV7jWQghLP3za+6Qmqurm4Z66lFpoRBlbMlo EoAxR9Kb X-Received: by 2002:a17:903:440f:b0:2b0:700e:fc9b with SMTP id d9443c01a7336-2b0b0aea735mr17155935ad.34.1774399289801; Tue, 24 Mar 2026 17:41:29 -0700 (PDT) MIME-Version: 1.0 References: <2BE661BA-D909-4093-BF78-DB9B0C099337@gmail.com> In-Reply-To: From: Amit Langote Date: Wed, 25 Mar 2026 09:41:11 +0900 X-Gm-Features: AaiRm51pPL95FH2ls66zAqk-KQcEO96J5gIhumscspded-ygj6Rsxvg3Sa9m3oI Message-ID: Subject: Re: Eliminating SPI / SQL from some RI triggers - take 3 To: Junwang Zhao Cc: Haibo Yan , Pavel Stehule , PostgreSQL-development , Tomas Vondra Content-Type: multipart/mixed; boundary="0000000000005bdecd064dce872f" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --0000000000005bdecd064dce872f Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Tue, Mar 24, 2026 at 10:56=E2=80=AFPM Amit Langote wrote: > On Tue, Mar 24, 2026 at 8:47=E2=80=AFPM Amit Langote wrote: > > > > Hi Junwang, > > > > On Fri, Mar 20, 2026 at 1:20=E2=80=AFAM Junwang Zhao wrote: > > > I squashed 0004 into 0003 so that each file can be committed independ= ently. > > > I also runned pgindent for each file. > > > > Thanks for that. > > > > Here's another version. > > > > In 0001, I noticed that the condition change in ri_HashCompareOp could > > be simplified further. Also improved the commentary surrounding that. > > I also updated the commit message to clarify parity with the SPI path. > > > > Updated the commit message of 0002 to talk about why caching the > > snapshot for the entire trigger firing cycle of a given constraint > > makes a trade off compared to the SPI path which retakes the snapshot > > for every row checked and could in principle avoid failure for FK rows > > whose corresponding PK row was added by a concurrently committed > > transaction, at least in the READ COMMITTED case. > > > > Updated the commit message of 0003 to clarify that it replaces > > ri_FastPathCheckCached() from 0002 with the BatchAdd/BatchFlush pair, > > and that the cached resources are used unchanged -- only the probing > > cadence changes from per-row to per-flush. Per-flush CCI is safe > > because all AFTER triggers for the buffered rows have already fired > > by flush time; a new test case is added to show that. > > Kept thinking about this on a walk after I sent this and came to the > conclusion that it might be better to just not cache the snapshot with > only the above argument in its favor. If repeated GetSnapshotData() > is expensive, the solution should be to fix that instead of simply > side-stepping it. > > By taking a snapshot per-batch without caching it, and so likewise the > IndexScanDesc, I'm seeing the same ~3x speedup in the batched > SK_SEARCHARRAY case, so I don't see much point in being very stubborn > about snapshot caching. Like in the attached (there's an unrelated > memory context switch thinko fix). Note that relations (pk_rel, > idx_rel) and the slot remain cached across the batch; only the > snapshot and scandesc are taken fresh per flush. > > I'll post an updated version tomorrow morning. I think it might be > better to just merge 0003 into 0002, because without snapshot and > scandesc caching the standalone value of 0002 is mostly just relation > and slot caching -- the interesting parts (batch callbacks, lifecycle > management) are all scaffolding for the batching. So v10 will be two > patches: 0001 core fast path, 0002 everything else. And here's a set like that. I noticed that we don't need a dedicated scan_cxt now that scandesc is not cached and a few other simplifications. --=20 Thanks, Amit Langote --0000000000005bdecd064dce872f Content-Type: application/octet-stream; name="v10-0002-Batch-FK-rows-and-use-SK_SEARCHARRAY-for-fast-pa.patch" Content-Disposition: attachment; filename="v10-0002-Batch-FK-rows-and-use-SK_SEARCHARRAY-for-fast-pa.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mn5bh0hl0 RnJvbSA5MzMyYTcwODZmODU2M2RhMWFlZjU2YzQ1OGJmZWM5ZTYwMTY0YjFiIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbWl0IExhbmdvdGUgPGFtaXRsYW5AcG9zdGdyZXNxbC5vcmc+ CkRhdGU6IFdlZCwgMjUgTWFyIDIwMjYgMDk6Mzc6MDQgKzA5MDAKU3ViamVjdDogW1BBVENIIHYx MCAyLzJdIEJhdGNoIEZLIHJvd3MgYW5kIHVzZSBTS19TRUFSQ0hBUlJBWSBmb3IgZmFzdC1wYXRo CiBwcm9iZXMKCkluc3RlYWQgb2YgcHJvYmluZyB0aGUgUEsgaW5kZXggb24gZWFjaCB0cmlnZ2Vy IGludm9jYXRpb24sIGJ1ZmZlcgpGSyByb3dzIGluIHRoZSBwZXItY29uc3RyYWludCBjYWNoZSBl bnRyeSAoUklfRmFzdFBhdGhFbnRyeSkgYW5kCmZsdXNoIHRoZW0gYXMgYSBiYXRjaC4gIFdoZW4g dGhlIGJ1ZmZlciBmaWxscyAoNjQgcm93cykgb3IgdGhlCnRyaWdnZXItZmlyaW5nIGN5Y2xlIGVu ZHMsIHJpX0Zhc3RQYXRoQmF0Y2hGbHVzaCgpIHByb2JlcyB0aGUgaW5kZXgKZm9yIGFsbCBidWZm ZXJlZCByb3dzLCBzaGFyaW5nIGEgc2luZ2xlIENvbW1hbmRDb3VudGVySW5jcmVtZW50IGFuZApz ZWN1cml0eSBjb250ZXh0IHN3aXRjaCBhY3Jvc3MgdGhlIGJhdGNoLiAgUGVyLWZsdXNoIENDSSBp cyBzYWZlCmJlY2F1c2UgYWxsIEFGVEVSIHRyaWdnZXJzIGZvciB0aGUgYnVmZmVyZWQgcm93cyBo YXZlIGFscmVhZHkgZmlyZWQKYnkgZmx1c2ggdGltZS4KCkZvciBzaW5nbGUtY29sdW1uIGZvcmVp Z24ga2V5cywgdGhlIGZsdXNoIGJ1aWxkcyBhbiBBcnJheVR5cGUgZnJvbQp0aGUgYnVmZmVyZWQg RksgdmFsdWVzIChjYXN0aW5nIHRvIHRoZSBQSy1zaWRlIHR5cGUgaWYgbmVlZGVkKSBhbmQKY29u c3RydWN0cyBhIHNjYW4ga2V5IHdpdGggdGhlIFNLX1NFQVJDSEFSUkFZIGZsYWcuICBUaGUgaW5k ZXggQU0Kc29ydHMgYW5kIGRlZHVwbGljYXRlcyB0aGUgYXJyYXkgaW50ZXJuYWxseSwgdGhlbiB3 YWxrcyBtYXRjaGluZwpsZWFmIHBhZ2VzIGluIG9uZSBvcmRlcmVkIHRyYXZlcnNhbCBpbnN0ZWFk IG9mIGRlc2NlbmRpbmcgZnJvbSB0aGUKcm9vdCBvbmNlIHBlciByb3cuICBBIG1hdGNoZWRbXSBi aXRtYXAgdHJhY2tzIHdoaWNoIGJhdGNoIGl0ZW1zCndlcmUgc2F0aXNmaWVkOyB1bm1hdGNoZWQg aXRlbXMgYXJlIHJlcG9ydGVkIGFzIHZpb2xhdGlvbnMuCgpNdWx0aS1jb2x1bW4gZm9yZWlnbiBr ZXlzIGZhbGwgYmFjayB0byBhIHBlci1yb3cgcHJvYmUgbG9vcCB2aWEKcmlfRmFzdFBhdGhGbHVz aExvb3AoKS4KCkZLIHR1cGxlcyBhcmUgbWF0ZXJpYWxpemVkIHZpYSBFeGVjQ29weVNsb3RIZWFw VHVwbGUoKSBpbnRvClRvcFRyYW5zYWN0aW9uQ29udGV4dCBzbyB0aGV5IHN1cnZpdmUgYWNyb3Nz IHRyaWdnZXIgaW52b2NhdGlvbnMuClZpb2xhdGlvbnMgYXJlIHJlcG9ydGVkIGltbWVkaWF0ZWx5 IGR1cmluZyB0aGUgZmx1c2ggdmlhCnJpX1JlcG9ydFZpb2xhdGlvbigpLCB3aGljaCBkb2VzIG5v dCByZXR1cm4uCgpUaGUgUEsgcmVsYXRpb24sIGluZGV4LCB0dXBsZSBzbG90cywgYW5kIGZhc3Qt cGF0aCBtZXRhZGF0YSBhcmUKY2FjaGVkIGluIFJJX0Zhc3RQYXRoRW50cnkgYWNyb3NzIHRyaWdn ZXIgaW52b2NhdGlvbnMgd2l0aGluIGEKdHJpZ2dlci1maXJpbmcgYmF0Y2gsIGF2b2lkaW5nIHJl cGVhdGVkIG9wZW4vY2xvc2Ugb3ZlcmhlYWQuICBUaGUKc25hcHNob3QgYW5kIEluZGV4U2NhbkRl c2MgYXJlIHRha2VuIGZyZXNoIHBlciBmbHVzaC4KCnJpX0Zhc3RQYXRoRW5kQmF0Y2goKSBmbHVz aGVzIGFueSBwYXJ0aWFsIGJhdGNoIGJlZm9yZSB0ZWFyaW5nIGRvd24KY2FjaGVkIHJlc291cmNl cy4gIFNpbmNlIHRoZSBGSyByZWxhdGlvbiBtYXkgYWxyZWFkeSBiZSBjbG9zZWQgYnkKZmx1c2gg dGltZSAoZS5nLiBmb3IgZGVmZXJyZWQgY29uc3RyYWludHMgYXQgQ09NTUlUKSwgcmVvcGVucyB0 aGUKcmVsYXRpb24gdXNpbmcgZW50cnktPnJpaW5mby0+ZmtfcmVsaWQgaWYgbmVlZGVkLgoKVGhl IG5vbi1jYWNoZWQgcGF0aCAoQUxURVIgVEFCTEUgdmFsaWRhdGlvbikgYnlwYXNzZXMgYmF0Y2hp bmcgYW5kCmNvbnRpbnVlcyB0byBjYWxsIHJpX0Zhc3RQYXRoQ2hlY2soKSBkaXJlY3RseSBwZXIg cm93LgoKTGlmZWN5Y2xlIG1hbmFnZW1lbnQ6CgogIC0gQWZ0ZXJUcmlnZ2VyQmF0Y2hDYWxsYmFj azogQSBuZXcgZ2VuZXJhbC1wdXJwb3NlIGNhbGxiYWNrCiAgICBtZWNoYW5pc20gaW4gdHJpZ2dl ci5jLiAgQ2FsbGJhY2tzIHJlZ2lzdGVyZWQgdmlhCiAgICBSZWdpc3RlckFmdGVyVHJpZ2dlckJh dGNoQ2FsbGJhY2soKSBmaXJlIGF0IHRoZSBlbmQgb2YgZWFjaAogICAgdHJpZ2dlci1maXJpbmcg YmF0Y2ggKEFmdGVyVHJpZ2dlckVuZFF1ZXJ5IGZvciBpbW1lZGlhdGUKICAgIGNvbnN0cmFpbnRz LCBBZnRlclRyaWdnZXJGaXJlRGVmZXJyZWQgYXQgQ09NTUlULCBhbmQKICAgIEFmdGVyVHJpZ2dl clNldFN0YXRlIGZvciBTRVQgQ09OU1RSQUlOVFMgSU1NRURJQVRFKS4gIFRoZSBSSSBjb2RlCiAg ICByZWdpc3RlcnMgcmlfRmFzdFBhdGhFbmRCYXRjaCBhcyBhIGJhdGNoIGNhbGxiYWNrLgoKICAt IEJhdGNoIGNhbGxiYWNrcyBvbmx5IGZpcmUgYXQgdGhlIG91dGVybW9zdCBxdWVyeSBsZXZlbAog ICAgKGNoZWNrZWQgaW5zaWRlIEZpcmVBZnRlclRyaWdnZXJCYXRjaENhbGxiYWNrcyksIHNvIG5l c3RlZAogICAgcXVlcmllcyBmcm9tIFNQSSBpbnNpZGUgb3RoZXIgQUZURVIgdHJpZ2dlcnMgZG8g bm90IHRlYXIgZG93bgogICAgdGhlIGNhY2hlIG1pZC1iYXRjaC4KCiAgLSBYYWN0Q2FsbGJhY2s6 IHJpX0Zhc3RQYXRoWGFjdENhbGxiYWNrIE5VTExzIHRoZSBzdGF0aWMgY2FjaGUKICAgIHBvaW50 ZXIgYXQgdHJhbnNhY3Rpb24gZW5kLCBoYW5kbGluZyB0aGUgYWJvcnQgcGF0aCB3aGVyZSB0aGUK ICAgIGJhdGNoIGNhbGxiYWNrIG5ldmVyIGZpcmVkLgoKICAtIFN1YlhhY3RDYWxsYmFjazogcmlf RmFzdFBhdGhTdWJYYWN0Q2FsbGJhY2sgTlVMTHMgdGhlIHN0YXRpYwogICAgY2FjaGUgcG9pbnRl ciBvbiBzdWJ0cmFuc2FjdGlvbiBhYm9ydCwgcHJldmVudGluZyB0aGUgYmF0Y2gKICAgIGNhbGxi YWNrIGZyb20gYWNjZXNzaW5nIGFscmVhZHktcmVsZWFzZWQgcmVzb3VyY2VzLgoKICAtIEFmdGVy VHJpZ2dlckJhdGNoSXNBY3RpdmUoKTogRXhwb3J0ZWQgYWNjZXNzb3IgdGhhdCByZXR1cm5zIHRy dWUKICAgIHdoZW4gYWZ0ZXJUcmlnZ2Vycy5xdWVyeV9kZXB0aCA+PSAwLiAgRHVyaW5nIEFMVEVS IFRBQkxFIC4uLiBBREQKICAgIEZPUkVJR04gS0VZIHZhbGlkYXRpb24sIFJJIHRyaWdnZXJzIGFy ZSBjYWxsZWQgZGlyZWN0bHkgb3V0c2lkZQogICAgdGhlIGFmdGVyLXRyaWdnZXIgZnJhbWV3b3Jr LCBzbyBiYXRjaCBjYWxsYmFja3Mgd291bGQgbmV2ZXIgZmlyZS4KICAgIFRoZSBmYXN0LXBhdGgg Y29kZSB1c2VzIHRoaXMgdG8gZmFsbCBiYWNrIHRvIHRoZSBub24tY2FjaGVkCiAgICBwZXItaW52 b2NhdGlvbiBwYXRoIGluIHRoYXQgY29udGV4dC4KCkEgcHVycG9zZS1zcGVjaWZpYyBtZW1vcnkg Y29udGV4dCAoZmx1c2hfY3h0KSwgY2hpbGQgb2YKVG9wVHJhbnNhY3Rpb25Db250ZXh0LCBpcyB1 c2VkIGZvciBwZXItZmx1c2ggdHJhbnNpZW50IHdvcms6IGNhc3QKcmVzdWx0cywgdGhlIHNlYXJj aCBhcnJheSwgYW5kIGluZGV4IHNjYW4gYWxsb2NhdGlvbnMuICBSZXNldCBhZnRlcgplYWNoIGZs dXNoOyBkZWxldGVkIGluIHRlYXJkb3duLgoKVG9nZXRoZXIgd2l0aCA8Y29tbWl0LWhhc2gtMDAw MT4sIGJ1bGsgRksgaW5zZXJ0cyBhcmUgfjIuOXggZmFzdGVyCihpbnQgUEsgLyBpbnQgRkssIDFN IHJvd3MsIFBLIHRhYmxlIGFuZCBpbmRleCBjYWNoZWQgaW4gbWVtb3J5KS4KCkF1dGhvcjogQW1p dCBMYW5nb3RlIDxhbWl0bGFuZ290ZTA5QGdtYWlsLmNvbT4KQ28tYXV0aG9yZWQtYnk6IEp1bndh bmcgWmhhbyA8emhqd3BrdUBnbWFpbC5jb20+ClJldmlld2VkLWJ5OiBIYWlibyBZYW4gPHRyaXN0 YW4ueWltQGdtYWlsLmNvbT4KVGVzdGVkLWJ5OiBUb21hcyBWb25kcmEgPHRvbWFzQHZvbmRyYS5t ZT4KRGlzY3Vzc2lvbjogaHR0cHM6Ly9wb3N0Z3IuZXMvbS9DQStIaXdxRjRDMHdzM2NPK3o1Y0xr UHV2d25Bd2tTcDdzZnZnR2ozeVE9TGk2S05NcUFAbWFpbC5nbWFpbC5jb20KLS0tCiBzcmMvYmFj a2VuZC9jb21tYW5kcy90cmlnZ2VyLmMgICAgICAgICAgICB8ICA5MCArKysrCiBzcmMvYmFja2Vu ZC91dGlscy9hZHQvcmlfdHJpZ2dlcnMuYyAgICAgICB8IDU4MSArKysrKysrKysrKysrKysrKysr KystCiBzcmMvaW5jbHVkZS9jb21tYW5kcy90cmlnZ2VyLmggICAgICAgICAgICB8ICAxOCArCiBz cmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2ZvcmVpZ25fa2V5Lm91dCB8IDEyNiArKysrKwogc3Jj L3Rlc3QvcmVncmVzcy9zcWwvZm9yZWlnbl9rZXkuc3FsICAgICAgfCAxMTggKysrKysKIHNyYy90 b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0ICAgICAgICAgIHwgICAzICsKIDYgZmlsZXMgY2hh bmdlZCwgOTI3IGluc2VydGlvbnMoKyksIDkgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvc3Jj L2JhY2tlbmQvY29tbWFuZHMvdHJpZ2dlci5jIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvdHJpZ2dl ci5jCmluZGV4IDY1OTY4NDNhOGQ4Li5iNzQ0MmNmNmNiMSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tl bmQvY29tbWFuZHMvdHJpZ2dlci5jCisrKyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3RyaWdnZXIu YwpAQCAtMzg5Myw2ICszODkzLDggQEAgdHlwZWRlZiBzdHJ1Y3QgQWZ0ZXJUcmlnZ2Vyc0RhdGEK IAkvKiBwZXItc3VidHJhbnNhY3Rpb24tbGV2ZWwgZGF0YTogKi8KIAlBZnRlclRyaWdnZXJzVHJh bnNEYXRhICp0cmFuc19zdGFjazsJLyogYXJyYXkgb2Ygc3RydWN0cyBzaG93biBiZWxvdyAqLwog CWludAkJCW1heHRyYW5zZGVwdGg7CS8qIGFsbG9jYXRlZCBsZW4gb2YgYWJvdmUgYXJyYXkgKi8K KworCUxpc3QJICAgKmJhdGNoX2NhbGxiYWNrczsJLyogTGlzdCBvZiBBZnRlclRyaWdnZXJDYWxs YmFja0l0ZW0gKi8KIH0gQWZ0ZXJUcmlnZ2Vyc0RhdGE7CiAKIHN0cnVjdCBBZnRlclRyaWdnZXJz UXVlcnlEYXRhCkBAIC0zOTI5LDYgKzM5MzEsMTMgQEAgc3RydWN0IEFmdGVyVHJpZ2dlcnNUYWJs ZURhdGEKIAlUdXBsZVRhYmxlU2xvdCAqc3RvcmVzbG90OwkvKiBmb3IgY29udmVydGluZyB0byB0 dXBsZXN0b3JlJ3MgZm9ybWF0ICovCiB9OwogCisvKiBFbnRyeSBpbiBhZnRlclRyaWdnZXJzLmJh dGNoX2NhbGxiYWNrcyAqLwordHlwZWRlZiBzdHJ1Y3QgQWZ0ZXJUcmlnZ2VyQ2FsbGJhY2tJdGVt Cit7CisJQWZ0ZXJUcmlnZ2VyQmF0Y2hDYWxsYmFjayBjYWxsYmFjazsKKwl2b2lkCSAgICphcmc7 Cit9IEFmdGVyVHJpZ2dlckNhbGxiYWNrSXRlbTsKKwogc3RhdGljIEFmdGVyVHJpZ2dlcnNEYXRh IGFmdGVyVHJpZ2dlcnM7CiAKIHN0YXRpYyB2b2lkIEFmdGVyVHJpZ2dlckV4ZWN1dGUoRVN0YXRl ICplc3RhdGUsCkBAIC0zOTY0LDYgKzM5NzMsNyBAQCBzdGF0aWMgU2V0Q29uc3RyYWludFN0YXRl IFNldENvbnN0cmFpbnRTdGF0ZUFkZEl0ZW0oU2V0Q29uc3RyYWludFN0YXRlIHN0YXRlLAogCQkJ CQkJCQkJCQkJCU9pZCB0Z29pZCwgYm9vbCB0Z2lzZGVmZXJyZWQpOwogc3RhdGljIHZvaWQgY2Fu Y2VsX3ByaW9yX3N0bXRfdHJpZ2dlcnMoT2lkIHJlbGlkLCBDbWRUeXBlIGNtZFR5cGUsIGludCB0 Z2V2ZW50KTsKIAorc3RhdGljIHZvaWQgRmlyZUFmdGVyVHJpZ2dlckJhdGNoQ2FsbGJhY2tzKHZv aWQpOwogCiAvKgogICogR2V0IHRoZSBGRFcgdHVwbGVzdG9yZSBmb3IgdGhlIGN1cnJlbnQgdHJp Z2dlciBxdWVyeSBsZXZlbCwgY3JlYXRpbmcgaXQKQEAgLTUwODksNiArNTA5OSw3IEBAIEFmdGVy VHJpZ2dlckJlZ2luWGFjdCh2b2lkKQogCSAqLwogCWFmdGVyVHJpZ2dlcnMuZmlyaW5nX2NvdW50 ZXIgPSAoQ29tbWFuZElkKSAxOwkvKiBtdXN0bid0IGJlIDAgKi8KIAlhZnRlclRyaWdnZXJzLnF1 ZXJ5X2RlcHRoID0gLTE7CisJYWZ0ZXJUcmlnZ2Vycy5iYXRjaF9jYWxsYmFja3MgPSBOSUw7CiAK IAkvKgogCSAqIFZlcmlmeSB0aGF0IHRoZXJlIGlzIG5vIGxlZnRvdmVyIHN0YXRlIHJlbWFpbmlu Zy4gIElmIHRoZXNlIGFzc2VydGlvbnMKQEAgLTUyMTAsNiArNTIyMSw4IEBAIEFmdGVyVHJpZ2dl ckVuZFF1ZXJ5KEVTdGF0ZSAqZXN0YXRlKQogCQkJYnJlYWs7CiAJfQogCisJRmlyZUFmdGVyVHJp Z2dlckJhdGNoQ2FsbGJhY2tzKCk7CisKIAkvKiBSZWxlYXNlIHF1ZXJ5LWxldmVsLWxvY2FsIHN0 b3JhZ2UsIGluY2x1ZGluZyB0dXBsZXN0b3JlcyBpZiBhbnkgKi8KIAlBZnRlclRyaWdnZXJGcmVl UXVlcnkoJmFmdGVyVHJpZ2dlcnMucXVlcnlfc3RhY2tbYWZ0ZXJUcmlnZ2Vycy5xdWVyeV9kZXB0 aF0pOwogCkBAIC01MzE3LDYgKzUzMzAsOCBAQCBBZnRlclRyaWdnZXJGaXJlRGVmZXJyZWQodm9p ZCkKIAkJCWJyZWFrOwkJCQkvKiBhbGwgZmlyZWQgKi8KIAl9CiAKKwlGaXJlQWZ0ZXJUcmlnZ2Vy QmF0Y2hDYWxsYmFja3MoKTsKKwogCS8qCiAJICogV2UgZG9uJ3QgYm90aGVyIGZyZWVpbmcgdGhl IGV2ZW50IGxpc3QsIHNpbmNlIGl0IHdpbGwgZ28gYXdheSBhbnl3YXkKIAkgKiAoYW5kIG1vcmUg ZWZmaWNpZW50bHkgdGhhbiB2aWEgcGZyZWUpIGluIEFmdGVyVHJpZ2dlckVuZFhhY3QuCkBAIC02 MDU5LDYgKzYwNzQsOCBAQCBBZnRlclRyaWdnZXJTZXRTdGF0ZShDb25zdHJhaW50c1NldFN0bXQg KnN0bXQpCiAJCQkJYnJlYWs7CQkJLyogYWxsIGZpcmVkICovCiAJCX0KIAorCQlGaXJlQWZ0ZXJU cmlnZ2VyQmF0Y2hDYWxsYmFja3MoKTsKKwogCQlpZiAoc25hcHNob3Rfc2V0KQogCQkJUG9wQWN0 aXZlU25hcHNob3QoKTsKIAl9CkBAIC02NzU1LDMgKzY3NzIsNzYgQEAgY2hlY2tfbW9kaWZpZWRf dmlydHVhbF9nZW5lcmF0ZWQoVHVwbGVEZXNjIHR1cGRlc2MsIEhlYXBUdXBsZSB0dXBsZSkKIAog CXJldHVybiB0dXBsZTsKIH0KKworLyoKKyAqIFJlZ2lzdGVyQWZ0ZXJUcmlnZ2VyQmF0Y2hDYWxs YmFjaworICoJCVJlZ2lzdGVyIGEgZnVuY3Rpb24gdG8gYmUgY2FsbGVkIHdoZW4gdGhlIGN1cnJl bnQgdHJpZ2dlci1maXJpbmcKKyAqCQliYXRjaCBjb21wbGV0ZXMuCisgKgorICogTXVzdCBiZSBj YWxsZWQgZnJvbSB3aXRoaW4gYSB0cmlnZ2VyIGZ1bmN0aW9uJ3MgZXhlY3V0aW9uIGNvbnRleHQK KyAqIChpLmUuLCB3aGlsZSBhZnRlclRyaWdnZXJzIHN0YXRlIGlzIGFjdGl2ZSkuCisgKgorICog VGhlIGNhbGxiYWNrIGxpc3QgaXMgY2xlYXJlZCBhZnRlciBpbnZvY2F0aW9uLCBzbyB0aGUgY2Fs bGVyIG11c3QKKyAqIHJlLXJlZ2lzdGVyIGZvciBlYWNoIG5ldyBiYXRjaCBpZiBuZWVkZWQuCisg Ki8KK3ZvaWQKK1JlZ2lzdGVyQWZ0ZXJUcmlnZ2VyQmF0Y2hDYWxsYmFjayhBZnRlclRyaWdnZXJC YXRjaENhbGxiYWNrIGNhbGxiYWNrLAorCQkJCQkJCQkgIHZvaWQgKmFyZykKK3sKKwlBZnRlclRy aWdnZXJDYWxsYmFja0l0ZW0gKml0ZW07CisJTWVtb3J5Q29udGV4dCBvbGRjeHQ7CisKKwkvKgor CSAqIEFsbG9jYXRlIGluIFRvcFRyYW5zYWN0aW9uQ29udGV4dCBzbyB0aGUgaXRlbSBzdXJ2aXZl cyBmb3IgdGhlIGR1cmF0aW9uCisJICogb2YgdGhlIGJhdGNoLCB3aGljaCBtYXkgc3BhbiBtdWx0 aXBsZSB0cmlnZ2VyIGludm9jYXRpb25zLgorCSAqLworCW9sZGN4dCA9IE1lbW9yeUNvbnRleHRT d2l0Y2hUbyhUb3BUcmFuc2FjdGlvbkNvbnRleHQpOworCWl0ZW0gPSBwYWxsb2Moc2l6ZW9mKEFm dGVyVHJpZ2dlckNhbGxiYWNrSXRlbSkpOworCWl0ZW0tPmNhbGxiYWNrID0gY2FsbGJhY2s7CisJ aXRlbS0+YXJnID0gYXJnOworCWFmdGVyVHJpZ2dlcnMuYmF0Y2hfY2FsbGJhY2tzID0KKwkJbGFw cGVuZChhZnRlclRyaWdnZXJzLmJhdGNoX2NhbGxiYWNrcywgaXRlbSk7CisJTWVtb3J5Q29udGV4 dFN3aXRjaFRvKG9sZGN4dCk7Cit9CisKKy8qCisgKiBGaXJlQWZ0ZXJUcmlnZ2VyQmF0Y2hDYWxs YmFja3MKKyAqCQlJbnZva2UgYW5kIGNsZWFyIGFsbCByZWdpc3RlcmVkIGJhdGNoIGNhbGxiYWNr cy4KKyAqCisgKiBPbmx5IGZpcmVzIGF0IHRoZSBvdXRlcm1vc3QgcXVlcnkgbGV2ZWwgKHF1ZXJ5 X2RlcHRoID09IDApIG9yIGZyb20KKyAqIHRvcC1sZXZlbCBvcGVyYXRpb25zIChxdWVyeV9kZXB0 aCA9PSAtMSwgZS5nLiBBZnRlclRyaWdnZXJGaXJlRGVmZXJyZWQKKyAqIGF0IENPTU1JVCkuICBO ZXN0ZWQgcXVlcmllcyBmcm9tIFNQSSBpbnNpZGUgQUZURVIgdHJpZ2dlcnMgcnVuIGF0CisgKiBk ZXB0aCA+IDAgYW5kIG11c3Qgbm90IHRlYXIgZG93biByZXNvdXJjZXMgdGhlIG91dGVyIGJhdGNo IHN0aWxsIG5lZWRzLgorICovCitzdGF0aWMgdm9pZAorRmlyZUFmdGVyVHJpZ2dlckJhdGNoQ2Fs bGJhY2tzKHZvaWQpCit7CisJTGlzdENlbGwgICAqbGM7CisKKwlpZiAoYWZ0ZXJUcmlnZ2Vycy5x dWVyeV9kZXB0aCA+IDApCisJCXJldHVybjsKKworCWZvcmVhY2gobGMsIGFmdGVyVHJpZ2dlcnMu YmF0Y2hfY2FsbGJhY2tzKQorCXsKKwkJQWZ0ZXJUcmlnZ2VyQ2FsbGJhY2tJdGVtICppdGVtID0g bGZpcnN0KGxjKTsKKworCQlpdGVtLT5jYWxsYmFjayhpdGVtLT5hcmcpOworCX0KKworCWxpc3Rf ZnJlZV9kZWVwKGFmdGVyVHJpZ2dlcnMuYmF0Y2hfY2FsbGJhY2tzKTsKKwlhZnRlclRyaWdnZXJz LmJhdGNoX2NhbGxiYWNrcyA9IE5JTDsKK30KKworLyoKKyAqIEFmdGVyVHJpZ2dlckJhdGNoSXNB Y3RpdmUKKyAqCQlSZXR1cm5zIHRydWUgaWYgd2UncmUgaW5zaWRlIGEgcXVlcnktbGV2ZWwgdHJp Z2dlciBiYXRjaCB3aGVyZQorICoJCXJlZ2lzdGVyZWQgYmF0Y2ggY2FsbGJhY2tzIHdpbGwgYWN0 dWFsbHkgYmUgaW52b2tlZC4KKyAqCisgKiBUaGlzIGlzIGZhbHNlIGR1cmluZyB2YWxpZGF0ZUZv cmVpZ25LZXlDb25zdHJhaW50KCksIHdoaWNoIGNhbGxzCisgKiBSSSB0cmlnZ2VyIGZ1bmN0aW9u cyBkaXJlY3RseSBvdXRzaWRlIHRoZSBhZnRlci10cmlnZ2VyIGZyYW1ld29yay4KKyAqLworYm9v bAorQWZ0ZXJUcmlnZ2VyQmF0Y2hJc0FjdGl2ZSh2b2lkKQoreworCXJldHVybiBhZnRlclRyaWdn ZXJzLnF1ZXJ5X2RlcHRoID49IDA7Cit9CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9h ZHQvcmlfdHJpZ2dlcnMuYyBiL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9yaV90cmlnZ2Vycy5jCmlu ZGV4IDZkOGRlNjQ0NzFmLi42ODljOGMwOGE3OCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRp bHMvYWR0L3JpX3RyaWdnZXJzLmMKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3JpX3RyaWdn ZXJzLmMKQEAgLTE5Niw2ICsxOTYsNDQgQEAgdHlwZWRlZiBzdHJ1Y3QgUklfQ29tcGFyZUhhc2hF bnRyeQogCUZtZ3JJbmZvCWNhc3RfZnVuY19maW5mbzsJLyogaW4gY2FzZSB3ZSBtdXN0IGNvZXJj ZSBpbnB1dCAqLwogfSBSSV9Db21wYXJlSGFzaEVudHJ5OwogCisvKgorICogTWF4aW11bSBudW1i ZXIgb2YgRksgcm93cyBidWZmZXJlZCBiZWZvcmUgZmx1c2hpbmcuCisgKgorICogTGFyZ2VyIGJh dGNoZXMgYW1vcnRpemUgcGVyLWZsdXNoIG92ZXJoZWFkIGFuZCBsZXQgdGhlIFNLX1NFQVJDSEFS UkFZCisgKiBwYXRoIHdhbGsgbW9yZSBsZWFmIHBhZ2VzIGluIGEgc2luZ2xlIHNvcnRlZCB0cmF2 ZXJzYWwuICBCdXQgZWFjaAorICogYnVmZmVyZWQgcm93IGlzIGEgbWF0ZXJpYWxpemVkIEhlYXBU dXBsZSBpbiBUb3BUcmFuc2FjdGlvbkNvbnRleHQsCisgKiBhbmQgdGhlIG1hdGNoZWRbXSBzY2Fu IGluIHJpX0Zhc3RQYXRoRmx1c2hBcnJheSgpIGlzIE8oYmF0Y2hfc2l6ZSkKKyAqIHBlciBpbmRl eCBtYXRjaC4gIEJlbmNobWFya2luZyBzaG93ZWQgbGl0dGxlIGRpZmZlcmVuY2UgYmV0d2VlbiAx NgorICogYW5kIDY0LCB3aXRoIDI1NiBjb25zaXN0ZW50bHkgc2xvd2VyLiAgNjQgaXMgYSByZWFz b25hYmxlIGRlZmF1bHQuCisgKi8KKyNkZWZpbmUgUklfRkFTVFBBVEhfQkFUQ0hfU0laRQk2NAor CisvKgorICogUklfRmFzdFBhdGhFbnRyeQorICoJCVBlci1jb25zdHJhaW50IGNhY2hlIG9mIHJl c291cmNlcyBuZWVkZWQgYnkgcmlfRmFzdFBhdGhCYXRjaEZsdXNoKCkuCisgKgorICogT25lIGVu dHJ5IHBlciBjb25zdHJhaW50LCBrZXllZCBieSBwZ19jb25zdHJhaW50IE9JRC4gIENyZWF0ZWQg bGF6aWx5CisgKiBieSByaV9GYXN0UGF0aEdldEVudHJ5KCkgb24gZmlyc3QgdXNlIHdpdGhpbiBh IHRyaWdnZXItZmlyaW5nIGJhdGNoCisgKiBhbmQgdG9ybiBkb3duIGJ5IHJpX0Zhc3RQYXRoVGVh cmRvd24oKSBhdCBiYXRjaCBlbmQuCisgKgorICogRksgdHVwbGVzIGFyZSBidWZmZXJlZCBpbiBi YXRjaFtdIGFjcm9zcyB0cmlnZ2VyIGludm9jYXRpb25zIGFuZAorICogZmx1c2hlZCB3aGVuIHRo ZSBidWZmZXIgZmlsbHMgb3IgdGhlIGJhdGNoIGVuZHMuCisgKi8KK3R5cGVkZWYgc3RydWN0IFJJ X0Zhc3RQYXRoRW50cnkKK3sKKwlPaWQJCQljb25vaWQ7CQkJLyogaGFzaCBrZXk6IHBnX2NvbnN0 cmFpbnQgT0lEICovCisJUmVsYXRpb24JcGtfcmVsOworCVJlbGF0aW9uCWlkeF9yZWw7CisJVHVw bGVUYWJsZVNsb3QgKnBrX3Nsb3Q7CisJVHVwbGVUYWJsZVNsb3QgKmZrX3Nsb3Q7CisJTWVtb3J5 Q29udGV4dCBmbHVzaF9jeHQ7CS8qIHNob3J0LWxpdmVkIGNvbnRleHQgZm9yIHBlci1mbHVzaCB3 b3JrICovCisKKwlIZWFwVHVwbGUJYmF0Y2hbUklfRkFTVFBBVEhfQkFUQ0hfU0laRV07CisJaW50 CQkJYmF0Y2hfY291bnQ7CisKKwkvKiBGb3IgcmlfRmFzdFBhdGhFbmRCYXRjaCgpICovCisJY29u c3QgUklfQ29uc3RyYWludEluZm8gKnJpaW5mbzsKK30gUklfRmFzdFBhdGhFbnRyeTsKIAogLyoK ICAqIExvY2FsIGRhdGEKQEAgLTIwNSw2ICsyNDMsOCBAQCBzdGF0aWMgSFRBQiAqcmlfcXVlcnlf Y2FjaGUgPSBOVUxMOwogc3RhdGljIEhUQUIgKnJpX2NvbXBhcmVfY2FjaGUgPSBOVUxMOwogc3Rh dGljIGRjbGlzdF9oZWFkIHJpX2NvbnN0cmFpbnRfY2FjaGVfdmFsaWRfbGlzdDsKIAorc3RhdGlj IEhUQUIgKnJpX2Zhc3RwYXRoX2NhY2hlID0gTlVMTDsKK3N0YXRpYyBib29sIHJpX2Zhc3RwYXRo X2NhbGxiYWNrX3JlZ2lzdGVyZWQgPSBmYWxzZTsKIAogLyoKICAqIExvY2FsIGZ1bmN0aW9uIHBy b3RvdHlwZXMKQEAgLTI1NSw2ICsyOTUsMTYgQEAgc3RhdGljIGJvb2wgcmlfUGVyZm9ybUNoZWNr KGNvbnN0IFJJX0NvbnN0cmFpbnRJbmZvICpyaWluZm8sCiAJCQkJCQkJYm9vbCBkZXRlY3ROZXdS b3dzLCBpbnQgZXhwZWN0X09LKTsKIHN0YXRpYyB2b2lkIHJpX0Zhc3RQYXRoQ2hlY2soY29uc3Qg UklfQ29uc3RyYWludEluZm8gKnJpaW5mbywKIAkJCQkJCQkgUmVsYXRpb24gZmtfcmVsLCBUdXBs ZVRhYmxlU2xvdCAqbmV3c2xvdCk7CitzdGF0aWMgdm9pZCByaV9GYXN0UGF0aEJhdGNoQWRkKGNv bnN0IFJJX0NvbnN0cmFpbnRJbmZvICpyaWluZm8sCisJCQkJCQkJCVJlbGF0aW9uIGZrX3JlbCwg VHVwbGVUYWJsZVNsb3QgKm5ld3Nsb3QpOworc3RhdGljIHZvaWQgcmlfRmFzdFBhdGhGbHVzaEFy cmF5KFJJX0Zhc3RQYXRoRW50cnkgKmZwZW50cnksIFR1cGxlVGFibGVTbG90ICpma19zbG90LAor CQkJCQkJCQkgIGNvbnN0IFJJX0NvbnN0cmFpbnRJbmZvICpyaWluZm8sIFJlbGF0aW9uIGZrX3Jl bCwKKwkJCQkJCQkJICBTbmFwc2hvdCBzbmFwc2hvdCwgSW5kZXhTY2FuRGVzYyBzY2FuZGVzYyk7 CitzdGF0aWMgdm9pZCByaV9GYXN0UGF0aEZsdXNoTG9vcChSSV9GYXN0UGF0aEVudHJ5ICpmcGVu dHJ5LCBUdXBsZVRhYmxlU2xvdCAqZmtfc2xvdCwKKwkJCQkJCQkJIGNvbnN0IFJJX0NvbnN0cmFp bnRJbmZvICpyaWluZm8sIFJlbGF0aW9uIGZrX3JlbCwKKwkJCQkJCQkJIFNuYXBzaG90IHNuYXBz aG90LCBJbmRleFNjYW5EZXNjIHNjYW5kZXNjKTsKK3N0YXRpYyB2b2lkIHJpX0Zhc3RQYXRoQmF0 Y2hGbHVzaChSSV9GYXN0UGF0aEVudHJ5ICpmcGVudHJ5LAorCQkJCQkJCQkgIFJlbGF0aW9uIGZr X3JlbCk7CiBzdGF0aWMgYm9vbCByaV9GYXN0UGF0aFByb2JlT25lKFJlbGF0aW9uIHBrX3JlbCwg UmVsYXRpb24gaWR4X3JlbCwKIAkJCQkJCQkJSW5kZXhTY2FuRGVzYyBzY2FuZGVzYywgVHVwbGVU YWJsZVNsb3QgKnNsb3QsCiAJCQkJCQkJCVNuYXBzaG90IHNuYXBzaG90LCBjb25zdCBSSV9Db25z dHJhaW50SW5mbyAqcmlpbmZvLApAQCAtMjc3LDcgKzMyNywxMCBAQCBwZ19ub3JldHVybiBzdGF0 aWMgdm9pZCByaV9SZXBvcnRWaW9sYXRpb24oY29uc3QgUklfQ29uc3RyYWludEluZm8gKnJpaW5m bywKIAkJCQkJCQkJCQkgICBSZWxhdGlvbiBwa19yZWwsIFJlbGF0aW9uIGZrX3JlbCwKIAkJCQkJ CQkJCQkgICBUdXBsZVRhYmxlU2xvdCAqdmlvbGF0b3JzbG90LCBUdXBsZURlc2MgdHVwZGVzYywK IAkJCQkJCQkJCQkgICBpbnQgcXVlcnlubywgYm9vbCBpc19yZXN0cmljdCwgYm9vbCBwYXJ0Z29u ZSk7Ci0KK3N0YXRpYyBSSV9GYXN0UGF0aEVudHJ5ICpyaV9GYXN0UGF0aEdldEVudHJ5KGNvbnN0 IFJJX0NvbnN0cmFpbnRJbmZvICpyaWluZm8sCisJCQkJCQkJCQkJCSBSZWxhdGlvbiBma19yZWwp Oworc3RhdGljIHZvaWQgcmlfRmFzdFBhdGhFbmRCYXRjaCh2b2lkICphcmcpOworc3RhdGljIHZv aWQgcmlfRmFzdFBhdGhUZWFyZG93bih2b2lkKTsKIAogLyoKICAqIFJJX0ZLZXlfY2hlY2sgLQpA QCAtMzg3LDEyICs0NDAsMjIgQEAgUklfRktleV9jaGVjayhUcmlnZ2VyRGF0YSAqdHJpZ2RhdGEp CiAJICogbG9jay4gIFRoaXMgaXMgc2VtYW50aWNhbGx5IGVxdWl2YWxlbnQgdG8gdGhlIFNQSSBw YXRoIGJlbG93IGJ1dCBhdm9pZHMKIAkgKiB0aGUgcGVyLXJvdyBleGVjdXRvciBvdmVyaGVhZC4K IAkgKgotCSAqIHJpX0Zhc3RQYXRoQ2hlY2soKSByZXBvcnRzIHRoZSB2aW9sYXRpb24gaXRzZWxm ICh2aWEgZXJlcG9ydCkgaWYgbm8KLQkgKiBtYXRjaGluZyBQSyByb3cgaXMgZm91bmQsIHNvIGl0 IG9ubHkgcmV0dXJucyBvbiBzdWNjZXNzLgorCSAqIHJpX0Zhc3RQYXRoQmF0Y2hBZGQoKSBhbmQg cmlfRmFzdFBhdGhDaGVjaygpIHJlcG9ydCB0aGUgdmlvbGF0aW9uCisJICogdGhlbXNlbHZlcyBp ZiBubyBtYXRjaGluZyBQSyByb3cgaXMgZm91bmQsIHNvIHRoZXkgb25seSByZXR1cm4gb24KKwkg KiBzdWNjZXNzLgogCSAqLwogCWlmIChyaV9mYXN0cGF0aF9pc19hcHBsaWNhYmxlKHJpaW5mbykp CiAJewotCQlyaV9GYXN0UGF0aENoZWNrKHJpaW5mbywgZmtfcmVsLCBuZXdzbG90KTsKKwkJaWYg KEFmdGVyVHJpZ2dlckJhdGNoSXNBY3RpdmUoKSkKKwkJeworCQkJLyogQmF0Y2hlZCBwYXRoOiBi dWZmZXIgYW5kIHByb2JlIGluIGdyb3VwcyAqLworCQkJcmlfRmFzdFBhdGhCYXRjaEFkZChyaWlu Zm8sIGZrX3JlbCwgbmV3c2xvdCk7CisJCX0KKwkJZWxzZQorCQl7CisJCQkvKiBBTFRFUiBUQUJM RSB2YWxpZGF0aW9uOiBwZXItcm93LCBubyBjYWNoZSAqLworCQkJcmlfRmFzdFBhdGhDaGVjayhy aWluZm8sIGZrX3JlbCwgbmV3c2xvdCk7CisJCX0KIAkJcmV0dXJuIFBvaW50ZXJHZXREYXR1bShO VUxMKTsKIAl9CiAKQEAgLTI2NzUsMTAgKzI3MzgsMTQgQEAgcmlfUGVyZm9ybUNoZWNrKGNvbnN0 IFJJX0NvbnN0cmFpbnRJbmZvICpyaWluZm8sCiAKIC8qCiAgKiByaV9GYXN0UGF0aENoZWNrCi0g KgkJUGVyZm9ybSBGSyBleGlzdGVuY2UgY2hlY2sgdmlhIGRpcmVjdCBpbmRleCBwcm9iZSwgYnlw YXNzaW5nIFNQSS4KKyAqCQlQZXJmb3JtIHBlciByb3cgRksgZXhpc3RlbmNlIGNoZWNrIHZpYSBk aXJlY3QgaW5kZXggcHJvYmUsCisgKgkJYnlwYXNzaW5nIFNQSS4KICAqCiAgKiBJZiBubyBtYXRj aGluZyBQSyByb3cgZXhpc3RzLCByZXBvcnQgdGhlIHZpb2xhdGlvbiB2aWEgcmlfUmVwb3J0Vmlv bGF0aW9uKCksCiAgKiBvdGhlcndpc2UsIHRoZSBmdW5jdGlvbiByZXR1cm5zIG5vcm1hbGx5Lgor ICoKKyAqIE5vdGU6IFRoaXMgaXMgb25seSB1c2VkIGJ5IHRoZSBBTFRFUiBUQUJMRSB2YWxpZGF0 aW9uIHBhdGguIE90aGVyIHBhdGhzIHVzZQorICogcmlfRmFzdFBhdGhCYXRjaEFkZCgpLgogICov CiBzdGF0aWMgdm9pZAogcmlfRmFzdFBhdGhDaGVjayhjb25zdCBSSV9Db25zdHJhaW50SW5mbyAq cmlpbmZvLApAQCAtMjc0Miw2ICsyODA5LDMwNSBAQCByaV9GYXN0UGF0aENoZWNrKGNvbnN0IFJJ X0NvbnN0cmFpbnRJbmZvICpyaWluZm8sCiAJdGFibGVfY2xvc2UocGtfcmVsLCBOb0xvY2spOwog fQogCisvKgorICogcmlfRmFzdFBhdGhCYXRjaEFkZAorICoJCUJ1ZmZlciBhIEZLIHJvdyBmb3Ig YmF0Y2hlZCBwcm9iaW5nLgorICoKKyAqIEFkZHMgdGhlIHJvdyB0byB0aGUgYmF0Y2ggYnVmZmVy LiAgV2hlbiB0aGUgYnVmZmVyIGlzIGZ1bGwsIGZsdXNoZXMgYWxsCisgKiBidWZmZXJlZCByb3dz IGJ5IHByb2JpbmcgdGhlIFBLIGluZGV4LiAgQW55IHZpb2xhdGlvbiBpcyByZXBvcnRlZAorICog aW1tZWRpYXRlbHkgZHVyaW5nIHRoZSBmbHVzaCB2aWEgcmlfUmVwb3J0VmlvbGF0aW9uICh3aGlj aCBkb2VzIG5vdCByZXR1cm4pLgorICoKKyAqIFVzZXMgdGhlIHBlci1iYXRjaCBjYWNoZSAoUklf RmFzdFBhdGhFbnRyeSkgdG8gYXZvaWQgcGVyLXJvdyByZWxhdGlvbgorICogb3Blbi9jbG9zZSwg c2xvdCBjcmVhdGlvbiwgZXRjLgorICoKKyAqIFRoZSBiYXRjaCBpcyBhbHNvIGZsdXNoZWQgYXQg ZW5kIG9mIHRyaWdnZXItZmlyaW5nIGN5Y2xlIHZpYQorICogcmlfRmFzdFBhdGhFbmRCYXRjaCgp LgorICovCitzdGF0aWMgdm9pZAorcmlfRmFzdFBhdGhCYXRjaEFkZChjb25zdCBSSV9Db25zdHJh aW50SW5mbyAqcmlpbmZvLAorCQkJCQlSZWxhdGlvbiBma19yZWwsIFR1cGxlVGFibGVTbG90ICpu ZXdzbG90KQoreworCVJJX0Zhc3RQYXRoRW50cnkgKmZwZW50cnkgPSByaV9GYXN0UGF0aEdldEVu dHJ5KHJpaW5mbywgZmtfcmVsKTsKKwlNZW1vcnlDb250ZXh0IG9sZGN4dDsKKworCW9sZGN4dCA9 IE1lbW9yeUNvbnRleHRTd2l0Y2hUbyhUb3BUcmFuc2FjdGlvbkNvbnRleHQpOworCWZwZW50cnkt PmJhdGNoW2ZwZW50cnktPmJhdGNoX2NvdW50XSA9CisJCUV4ZWNDb3B5U2xvdEhlYXBUdXBsZShu ZXdzbG90KTsKKwlmcGVudHJ5LT5iYXRjaF9jb3VudCsrOworCU1lbW9yeUNvbnRleHRTd2l0Y2hU byhvbGRjeHQpOworCisJaWYgKGZwZW50cnktPmJhdGNoX2NvdW50ID49IFJJX0ZBU1RQQVRIX0JB VENIX1NJWkUpCisJCXJpX0Zhc3RQYXRoQmF0Y2hGbHVzaChmcGVudHJ5LCBma19yZWwpOworfQor CisvKgorICogcmlfRmFzdFBhdGhCYXRjaEZsdXNoCisgKgkJRmx1c2ggYWxsIGJ1ZmZlcmVkIEZL IHJvd3MgYnkgcHJvYmluZyB0aGUgUEsgaW5kZXguCisgKgorICogRGlzcGF0Y2hlcyB0byByaV9G YXN0UGF0aEZsdXNoQXJyYXkoKSBmb3Igc2luZ2xlLWNvbHVtbiBGS3MKKyAqICh1c2luZyBTS19T RUFSQ0hBUlJBWSkgb3IgcmlfRmFzdFBhdGhGbHVzaExvb3AoKSBmb3IgbXVsdGktY29sdW1uCisg KiBGS3MgKHBlci1yb3cgcHJvYmluZykuICBWaW9sYXRpb25zIGFyZSByZXBvcnRlZCBpbW1lZGlh dGVseSB2aWEKKyAqIHJpX1JlcG9ydFZpb2xhdGlvbigpLCB3aGljaCBkb2VzIG5vdCByZXR1cm4u CisgKi8KK3N0YXRpYyB2b2lkCityaV9GYXN0UGF0aEJhdGNoRmx1c2goUklfRmFzdFBhdGhFbnRy eSAqZnBlbnRyeSwgUmVsYXRpb24gZmtfcmVsKQoreworCWNvbnN0IFJJX0NvbnN0cmFpbnRJbmZv ICpyaWluZm8gPSBmcGVudHJ5LT5yaWluZm87CisJUmVsYXRpb24JcGtfcmVsID0gZnBlbnRyeS0+ cGtfcmVsOworCVJlbGF0aW9uCWlkeF9yZWwgPSBmcGVudHJ5LT5pZHhfcmVsOworCVR1cGxlVGFi bGVTbG90ICpma19zbG90ID0gZnBlbnRyeS0+Zmtfc2xvdDsKKwlTbmFwc2hvdAlzbmFwc2hvdDsK KwlJbmRleFNjYW5EZXNjIHNjYW5kZXNjOworCU9pZAkJCXNhdmVkX3VzZXJpZDsKKwlpbnQJCQlz YXZlZF9zZWNfY29udGV4dDsKKwlNZW1vcnlDb250ZXh0IG9sZGN4dDsKKworCWlmIChmcGVudHJ5 LT5iYXRjaF9jb3VudCA9PSAwKQorCQlyZXR1cm47CisKKwlpZiAocmlpbmZvLT5mcG1ldGEgPT0g TlVMTCkKKwkJcmlfcG9wdWxhdGVfZmFzdHBhdGhfbWV0YWRhdGEoKFJJX0NvbnN0cmFpbnRJbmZv ICopIHJpaW5mbywKKwkJCQkJCQkJCSAgZmtfcmVsLCBpZHhfcmVsKTsKKwlBc3NlcnQocmlpbmZv LT5mcG1ldGEpOworCisJLyoKKwkgKiBDQ0kgYW5kIHNlY3VyaXR5IGNvbnRleHQgc3dpdGNoIGFy ZSBkb25lIG9uY2UgZm9yIHRoZSBlbnRpcmUgYmF0Y2guCisJICogUGVyLXJvdyBDQ0kgaXMgdW5u ZWNlc3NhcnkgYmVjYXVzZSBieSB0aGUgdGltZSBhIGZsdXNoIHJ1bnMsIGFsbCBBRlRFUgorCSAq IHRyaWdnZXJzIGZvciB0aGUgYnVmZmVyZWQgcm93cyBoYXZlIGFscmVhZHkgZmlyZWQgKHRyaWdn ZXIgaW52b2NhdGlvbnMKKwkgKiBzdHJpY3RseSBhbHRlcm5hdGUgcGVyIHJvdyksIHNvIGEgc2lu Z2xlIENDSSBhZHZhbmNlcyBwYXN0IGFsbCB0aGVpcgorCSAqIGVmZmVjdHMuICBQZXItcm93IHNl Y3VyaXR5IGNvbnRleHQgc3dpdGNoIGlzIHVubmVjZXNzYXJ5IGJlY2F1c2UgZWFjaAorCSAqIHJv dydzIHByb2JlIHJ1bnMgZW50aXJlbHkgYXMgdGhlIFBLIHRhYmxlIG93bmVyLCBzYW1lIGFzIHRo ZSBTUEkgcGF0aAorCSAqIC0tIHRoZSBvbmx5IGRpZmZlcmVuY2UgaXMgdGhhdCB0aGUgU1BJIHBh dGggc2V0cyBhbmQgcmVzdG9yZXMgdGhlCisJICogY29udGV4dCBwZXIgcm93IHdoZXJlYXMgd2Ug ZG8gaXQgb25jZSBhcm91bmQgdGhlIHdob2xlIGJhdGNoLgorCSAqLworCUNvbW1hbmRDb3VudGVy SW5jcmVtZW50KCk7CisJc25hcHNob3QgPSBSZWdpc3RlclNuYXBzaG90KEdldFRyYW5zYWN0aW9u U25hcHNob3QoKSk7CisKKwkvKgorCSAqIGJ1aWxkX2luZGV4X3NjYW5rZXlzKCkgbWF5IHBhbGxv YyBjYXN0IHJlc3VsdHMgZm9yIGNyb3NzLXR5cGUgRktzLgorCSAqIFVzZSB0aGUgZW50cnkncyBz aG9ydC1saXZlZCBmbHVzaCBjb250ZXh0IHNvIHRoZXNlIGRvbid0IGFjY3VtdWxhdGUKKwkgKiBh Y3Jvc3MgYmF0Y2hlcy4KKwkgKi8KKwlvbGRjeHQgPSBNZW1vcnlDb250ZXh0U3dpdGNoVG8oZnBl bnRyeS0+Zmx1c2hfY3h0KTsKKworCXNjYW5kZXNjID0gaW5kZXhfYmVnaW5zY2FuKHBrX3JlbCwg aWR4X3JlbCwgc25hcHNob3QsIE5VTEwsCisJCQkJCQkJICAgcmlpbmZvLT5ua2V5cywgMCk7CisK KwlHZXRVc2VySWRBbmRTZWNDb250ZXh0KCZzYXZlZF91c2VyaWQsICZzYXZlZF9zZWNfY29udGV4 dCk7CisJU2V0VXNlcklkQW5kU2VjQ29udGV4dChSZWxhdGlvbkdldEZvcm0ocGtfcmVsKS0+cmVs b3duZXIsCisJCQkJCQkgICBzYXZlZF9zZWNfY29udGV4dCB8CisJCQkJCQkgICBTRUNVUklUWV9M T0NBTF9VU0VSSURfQ0hBTkdFIHwKKwkJCQkJCSAgIFNFQ1VSSVRZX05PRk9SQ0VfUkxTKTsKKwor CWlmIChyaWluZm8tPm5rZXlzID09IDEpCisJCXJpX0Zhc3RQYXRoRmx1c2hBcnJheShmcGVudHJ5 LCBma19zbG90LCByaWluZm8sIGZrX3JlbCwgc25hcHNob3QsCisJCQkJCQkJICBzY2FuZGVzYyk7 CisJZWxzZQorCQlyaV9GYXN0UGF0aEZsdXNoTG9vcChmcGVudHJ5LCBma19zbG90LCByaWluZm8s IGZrX3JlbCwgc25hcHNob3QsCisJCQkJCQkJIHNjYW5kZXNjKTsKKworCVNldFVzZXJJZEFuZFNl Y0NvbnRleHQoc2F2ZWRfdXNlcmlkLCBzYXZlZF9zZWNfY29udGV4dCk7CisJVW5yZWdpc3RlclNu YXBzaG90KHNuYXBzaG90KTsKKwlpbmRleF9lbmRzY2FuKHNjYW5kZXNjKTsKKwlNZW1vcnlDb250 ZXh0UmVzZXQoZnBlbnRyeS0+Zmx1c2hfY3h0KTsKKwlNZW1vcnlDb250ZXh0U3dpdGNoVG8ob2xk Y3h0KTsKKworCS8qIEZyZWUgbWF0ZXJpYWxpemVkIHR1cGxlcyBhbmQgcmVzZXQgKi8KKwlmb3Ig KGludCBpID0gMDsgaSA8IGZwZW50cnktPmJhdGNoX2NvdW50OyBpKyspCisJCWhlYXBfZnJlZXR1 cGxlKGZwZW50cnktPmJhdGNoW2ldKTsKKwlmcGVudHJ5LT5iYXRjaF9jb3VudCA9IDA7Cit9CisK Ky8qCisgKiByaV9GYXN0UGF0aEZsdXNoTG9vcAorICoJCU11bHRpLWNvbHVtbiBmYWxsYmFjazog cHJvYmUgdGhlIGluZGV4IG9uY2UgcGVyIGJ1ZmZlcmVkIHJvdy4KKyAqCisgKiBVc2VkIGZvciBj b21wb3NpdGUgZm9yZWlnbiBrZXlzIHdoZXJlIFNLX1NFQVJDSEFSUkFZIGRvZXMgbm90CisgKiBh cHBseS4KKyAqLworc3RhdGljIHZvaWQKK3JpX0Zhc3RQYXRoRmx1c2hMb29wKFJJX0Zhc3RQYXRo RW50cnkgKmZwZW50cnksIFR1cGxlVGFibGVTbG90ICpma19zbG90LAorCQkJCQkgY29uc3QgUklf Q29uc3RyYWludEluZm8gKnJpaW5mbywgUmVsYXRpb24gZmtfcmVsLAorCQkJCQkgU25hcHNob3Qg c25hcHNob3QsIEluZGV4U2NhbkRlc2Mgc2NhbmRlc2MpCit7CisJUmVsYXRpb24JcGtfcmVsID0g ZnBlbnRyeS0+cGtfcmVsOworCVJlbGF0aW9uCWlkeF9yZWwgPSBmcGVudHJ5LT5pZHhfcmVsOwor CVR1cGxlVGFibGVTbG90ICpwa19zbG90ID0gZnBlbnRyeS0+cGtfc2xvdDsKKwlEYXR1bQkJcGtf dmFsc1tJTkRFWF9NQVhfS0VZU107CisJY2hhcgkJcGtfbnVsbHNbSU5ERVhfTUFYX0tFWVNdOwor CVNjYW5LZXlEYXRhIHNrZXlbSU5ERVhfTUFYX0tFWVNdOworCWJvb2wJCWZvdW5kID0gdHJ1ZTsK KworCWZvciAoaW50IGkgPSAwOyBpIDwgZnBlbnRyeS0+YmF0Y2hfY291bnQ7IGkrKykKKwl7CisK KwkJRXhlY1N0b3JlSGVhcFR1cGxlKGZwZW50cnktPmJhdGNoW2ldLCBma19zbG90LCBmYWxzZSk7 CisJCXJpX0V4dHJhY3RWYWx1ZXMoZmtfcmVsLCBma19zbG90LCByaWluZm8sIGZhbHNlLCBwa192 YWxzLCBwa19udWxscyk7CisJCWJ1aWxkX2luZGV4X3NjYW5rZXlzKHJpaW5mbywgaWR4X3JlbCwg cGtfdmFscywgcGtfbnVsbHMsIHNrZXkpOworCisJCWZvdW5kID0gcmlfRmFzdFBhdGhQcm9iZU9u ZShwa19yZWwsIGlkeF9yZWwsIHNjYW5kZXNjLCBwa19zbG90LAorCQkJCQkJCQkJc25hcHNob3Qs IHJpaW5mbywgc2tleSwgcmlpbmZvLT5ua2V5cyk7CisKKwkJaWYgKCFmb3VuZCkKKwkJCWJyZWFr OworCX0KKworCS8qIGZrX3Nsb3QgY29udGFpbnMgdGhlIHR1cGxlIHRoYXQgZmFpbGVkLiAqLwor CWlmICghZm91bmQpCisJCXJpX1JlcG9ydFZpb2xhdGlvbihyaWluZm8sIHBrX3JlbCwgZmtfcmVs LAorCQkJCQkJICAgZmtfc2xvdCwgTlVMTCwKKwkJCQkJCSAgIFJJX1BMQU5fQ0hFQ0tfTE9PS1VQ UEssIGZhbHNlLCBmYWxzZSk7Cit9CisKKy8qCisgKiByaV9GYXN0UGF0aEZsdXNoQXJyYXkKKyAq CQlTaW5nbGUtY29sdW1uIGZhc3QgcGF0aCB1c2luZyBTS19TRUFSQ0hBUlJBWS4KKyAqCisgKiBC dWlsZHMgYW4gYXJyYXkgb2YgRksgdmFsdWVzIGFuZCBkb2VzIG9uZSBpbmRleCBzY2FuIHdpdGgK KyAqIFNLX1NFQVJDSEFSUkFZLiAgVGhlIGluZGV4IEFNIHNvcnRzIGFuZCBkZWR1cGxpY2F0ZXMg dGhlIGFycmF5CisgKiBpbnRlcm5hbGx5LCB0aGVuIHdhbGtzIG1hdGNoaW5nIGxlYWYgcGFnZXMg aW4gb3JkZXIuICBFYWNoCisgKiBtYXRjaGVkIFBLIHR1cGxlIGlzIGxvY2tlZCBhbmQgcmVjaGVj a2VkIGFzIGJlZm9yZTsgYSBtYXRjaGVkW10KKyAqIGJpdG1hcCB0cmFja3Mgd2hpY2ggYmF0Y2gg aXRlbXMgd2VyZSBzYXRpc2ZpZWQuCisgKi8KK3N0YXRpYyB2b2lkCityaV9GYXN0UGF0aEZsdXNo QXJyYXkoUklfRmFzdFBhdGhFbnRyeSAqZnBlbnRyeSwgVHVwbGVUYWJsZVNsb3QgKmZrX3Nsb3Qs CisJCQkJCSAgY29uc3QgUklfQ29uc3RyYWludEluZm8gKnJpaW5mbywgUmVsYXRpb24gZmtfcmVs LAorCQkJCQkgIFNuYXBzaG90IHNuYXBzaG90LCBJbmRleFNjYW5EZXNjIHNjYW5kZXNjKQorewor CUZhc3RQYXRoTWV0YSAqZnBtZXRhID0gcmlpbmZvLT5mcG1ldGE7CisJUmVsYXRpb24JcGtfcmVs ID0gZnBlbnRyeS0+cGtfcmVsOworCVJlbGF0aW9uCWlkeF9yZWwgPSBmcGVudHJ5LT5pZHhfcmVs OworCVR1cGxlVGFibGVTbG90ICpwa19zbG90ID0gZnBlbnRyeS0+cGtfc2xvdDsKKwlEYXR1bQkJ c2VhcmNoX3ZhbHNbUklfRkFTVFBBVEhfQkFUQ0hfU0laRV07CisJYm9vbAkJbWF0Y2hlZFtSSV9G QVNUUEFUSF9CQVRDSF9TSVpFXTsKKwlpbnQJCQludmFscyA9IGZwZW50cnktPmJhdGNoX2NvdW50 OworCURhdHVtCQlwa192YWxzW0lOREVYX01BWF9LRVlTXTsKKwljaGFyCQlwa19udWxsc1tJTkRF WF9NQVhfS0VZU107CisJU2NhbktleURhdGEgc2tleVsxXTsKKwlSSV9Db21wYXJlSGFzaEVudHJ5 ICplbnRyeTsKKwlPaWQJCQllbGVtX3R5cGU7CisJaW50MTYJCWVsZW1fbGVuOworCWJvb2wJCWVs ZW1fYnl2YWw7CisJY2hhcgkJZWxlbV9hbGlnbjsKKwlBcnJheVR5cGUgICphcnI7CisKKwlBc3Nl cnQoZnBtZXRhKTsKKworCW1lbXNldChtYXRjaGVkLCAwLCBudmFscyAqIHNpemVvZihib29sKSk7 CisKKwkvKgorCSAqIEV4dHJhY3QgRksgdmFsdWVzLCBjYXN0aW5nIHRvIHRoZSBvcGVyYXRvcidz IGV4cGVjdGVkIGlucHV0IHR5cGUgaWYKKwkgKiBuZWVkZWQgKGUuZy4gaW50OCBGSyAtPiBpbnQ0 IGZvciBpbnQ0OGVxKS4KKwkgKi8KKwllbnRyeSA9IGZwbWV0YS0+Y29tcGFyZV9lbnRyaWVzWzBd OworCWZvciAoaW50IGkgPSAwOyBpIDwgbnZhbHM7IGkrKykKKwl7CisJCUV4ZWNTdG9yZUhlYXBU dXBsZShmcGVudHJ5LT5iYXRjaFtpXSwgZmtfc2xvdCwgZmFsc2UpOworCQlyaV9FeHRyYWN0VmFs dWVzKGZrX3JlbCwgZmtfc2xvdCwgcmlpbmZvLCBmYWxzZSwgcGtfdmFscywgcGtfbnVsbHMpOwor CisJCS8qIENhc3QgaWYgbmVlZGVkIChlLmcuIGludDggRksgLT4gbnVtZXJpYyBQSykgKi8KKwkJ aWYgKE9pZElzVmFsaWQoZW50cnktPmNhc3RfZnVuY19maW5mby5mbl9vaWQpKQorCQkJc2VhcmNo X3ZhbHNbaV0gPSBGdW5jdGlvbkNhbGwzKCZlbnRyeS0+Y2FzdF9mdW5jX2ZpbmZvLAorCQkJCQkJ CQkJCSAgIHBrX3ZhbHNbMF0sCisJCQkJCQkJCQkJICAgSW50MzJHZXREYXR1bSgtMSksCisJCQkJ CQkJCQkJICAgQm9vbEdldERhdHVtKGZhbHNlKSk7CisJCWVsc2UKKwkJCXNlYXJjaF92YWxzW2ld ID0gcGtfdmFsc1swXTsKKwl9CisKKwkvKgorCSAqIEFycmF5IGVsZW1lbnQgdHlwZSBtdXN0IG1h dGNoIHRoZSBvcGVyYXRvcidzIHJpZ2h0LWhhbmQgaW5wdXQgdHlwZSwKKwkgKiB3aGljaCBpcyB3 aGF0IHRoZSBpbmRleCBjb21wYXJpc29uIGV4cGVjdHMgb24gdGhlIHNlYXJjaCBzaWRlLgorCSAq IHJpX3BvcHVsYXRlX2Zhc3RwYXRoX21ldGFkYXRhKCkgc3RvcmVzIGV4YWN0bHkgdGhpcyB2aWEK KwkgKiBnZXRfb3Bfb3BmYW1pbHlfcHJvcGVydGllcygpLCB3aGljaCByZXR1cm5zIHRoZSBvcGVy YXRvcidzIHJpZ2h0LWhhbmQKKwkgKiB0eXBlIGFzIHRoZSBzdWJ0eXBlIGZvciBjcm9zcy10eXBl IG9wZXJhdG9ycyAoZS5nLiBpbnQ4IGZvciBpbnQ0OGVxKQorCSAqIGFuZCB0aGUgY29tbW9uIHR5 cGUgZm9yIHNhbWUtdHlwZSBvcGVyYXRvcnMuCisJICovCisJZWxlbV90eXBlID0gZnBtZXRhLT5z dWJ0eXBlc1swXTsKKwlBc3NlcnQoT2lkSXNWYWxpZChlbGVtX3R5cGUpKTsKKwlnZXRfdHlwbGVu Ynl2YWxhbGlnbihlbGVtX3R5cGUsICZlbGVtX2xlbiwgJmVsZW1fYnl2YWwsICZlbGVtX2FsaWdu KTsKKworCWFyciA9IGNvbnN0cnVjdF9hcnJheShzZWFyY2hfdmFscywgbnZhbHMsCisJCQkJCQkg IGVsZW1fdHlwZSwgZWxlbV9sZW4sIGVsZW1fYnl2YWwsIGVsZW1fYWxpZ24pOworCisJLyoKKwkg KiBCdWlsZCBzY2FuIGtleSB3aXRoIFNLX1NFQVJDSEFSUkFZLiAgVGhlIGluZGV4IEFNIGNvZGUg d2lsbCBpbnRlcm5hbGx5CisJICogc29ydCBhbmQgZGVkdXBsaWNhdGUsIHRoZW4gd2FsayBsZWFm IHBhZ2VzIGluIG9yZGVyLgorCSAqLworCVNjYW5LZXlFbnRyeUluaXRpYWxpemUoJnNrZXlbMF0s CisJCQkJCQkgICBTS19TRUFSQ0hBUlJBWSwKKwkJCQkJCSAgIDEsCS8qIGF0dG5vICovCisJCQkJ CQkgICBmcG1ldGEtPnN0cmF0c1swXSwKKwkJCQkJCSAgIGZwbWV0YS0+c3VidHlwZXNbMF0sCisJ CQkJCQkgICBpZHhfcmVsLT5yZF9pbmRjb2xsYXRpb25bMF0sCisJCQkJCQkgICBmcG1ldGEtPnJl Z29wc1swXSwKKwkJCQkJCSAgIFBvaW50ZXJHZXREYXR1bShhcnIpKTsKKworCWluZGV4X3Jlc2Nh bihzY2FuZGVzYywgc2tleSwgMSwgTlVMTCwgMCk7CisKKwkvKgorCSAqIFdhbGsgYWxsIG1hdGNo ZXMuICBUaGUgaW5kZXggQU0gcmV0dXJucyB0aGVtIGluIGluZGV4IG9yZGVyLiAgRm9yIGVhY2gK KwkgKiBtYXRjaCwgZmluZCB3aGljaCBiYXRjaCBpdGVtKHMpIGl0IHNhdGlzZmllcy4KKwkgKi8K Kwl3aGlsZSAoaW5kZXhfZ2V0bmV4dF9zbG90KHNjYW5kZXNjLCBGb3J3YXJkU2NhbkRpcmVjdGlv biwgcGtfc2xvdCkpCisJeworCQlEYXR1bQkJZm91bmRfdmFsOworCQlib29sCQlmb3VuZF9udWxs OworCQlib29sCQljb25jdXJyZW50bHlfdXBkYXRlZDsKKwkJU2NhbktleURhdGEgcmVjaGVja19z a2V5WzFdOworCisJCWlmICghcmlfTG9ja1BLVHVwbGUocGtfcmVsLCBwa19zbG90LCBzbmFwc2hv dCwgJmNvbmN1cnJlbnRseV91cGRhdGVkKSkKKwkJCWNvbnRpbnVlOworCisJCS8qIEV4dHJhY3Qg dGhlIFBLIHZhbHVlIGZyb20gdGhlIG1hdGNoZWQgYW5kIGxvY2tlZCB0dXBsZSAqLworCQlmb3Vu ZF92YWwgPSBzbG90X2dldGF0dHIocGtfc2xvdCwgcmlpbmZvLT5wa19hdHRudW1zWzBdLCAmZm91 bmRfbnVsbCk7CisJCUFzc2VydCghZm91bmRfbnVsbCk7CisKKwkJaWYgKGNvbmN1cnJlbnRseV91 cGRhdGVkKQorCQl7CisJCQkvKgorCQkJICogQnVpbGQgYSBzaW5nbGUta2V5IHNjYW5rZXkgZm9y IHJlY2hlY2suICBXZSBuZWVkIHRoZSBhY3R1YWwgUEsKKwkJCSAqIHZhbHVlIHRoYXQgd2FzIGZv dW5kLCBub3QgdGhlIEZLIHNlYXJjaCB2YWx1ZS4KKwkJCSAqLworCQkJU2NhbktleUVudHJ5SW5p dGlhbGl6ZSgmcmVjaGVja19za2V5WzBdLCAwLCAxLAorCQkJCQkJCQkgICBmcG1ldGEtPnN0cmF0 c1swXSwKKwkJCQkJCQkJICAgZnBtZXRhLT5zdWJ0eXBlc1swXSwKKwkJCQkJCQkJICAgaWR4X3Jl bC0+cmRfaW5kY29sbGF0aW9uWzBdLAorCQkJCQkJCQkgICBmcG1ldGEtPnJlZ29wc1swXSwKKwkJ CQkJCQkJICAgZm91bmRfdmFsKTsKKwkJCWlmICghcmVjaGVja19tYXRjaGVkX3BrX3R1cGxlKGlk eF9yZWwsIHJlY2hlY2tfc2tleSwgcGtfc2xvdCkpCisJCQkJY29udGludWU7CisJCX0KKworCQkv KgorCQkgKiBMaW5lYXIgc2NhbiB0byBtYXJrIGFsbCBiYXRjaCBpdGVtcyBtYXRjaGluZyB0aGlz IFBLIHZhbHVlLgorCQkgKiBPKGJhdGNoX3NpemUpIHBlciBtYXRjaCwgTyhiYXRjaF9zaXplXjIp IHdvcnN0IGNhc2UgLS0gZmluZSBmb3IgdGhlCisJCSAqIGN1cnJlbnQgYmF0Y2ggc2l6ZSBvZiA2 NC4KKwkJICovCisJCWZvciAoaW50IGkgPSAwOyBpIDwgbnZhbHM7IGkrKykKKwkJeworCQkJaWYg KCFtYXRjaGVkW2ldICYmCisJCQkJRGF0dW1HZXRCb29sKEZ1bmN0aW9uQ2FsbDJDb2xsKCZlbnRy eS0+ZXFfb3ByX2ZpbmZvLAorCQkJCQkJCQkJCQkgICBpZHhfcmVsLT5yZF9pbmRjb2xsYXRpb25b MF0sCisJCQkJCQkJCQkJCSAgIGZvdW5kX3ZhbCwKKwkJCQkJCQkJCQkJICAgc2VhcmNoX3ZhbHNb aV0pKSkKKwkJCQltYXRjaGVkW2ldID0gdHJ1ZTsKKwkJfQorCX0KKworCS8qIFJlcG9ydCBmaXJz dCB1bm1hdGNoZWQgcm93ICovCisJZm9yIChpbnQgaSA9IDA7IGkgPCBudmFsczsgaSsrKQorCXsK KwkJaWYgKCFtYXRjaGVkW2ldKQorCQl7CisJCQlFeGVjU3RvcmVIZWFwVHVwbGUoZnBlbnRyeS0+ YmF0Y2hbaV0sIGZrX3Nsb3QsIGZhbHNlKTsKKwkJCXJpX1JlcG9ydFZpb2xhdGlvbihyaWluZm8s IHBrX3JlbCwgZmtfcmVsLAorCQkJCQkJCSAgIGZrX3Nsb3QsIE5VTEwsCisJCQkJCQkJICAgUklf UExBTl9DSEVDS19MT09LVVBQSywgZmFsc2UsIGZhbHNlKTsKKwkJfQorCX0KK30KKwogLyoKICAq IHJpX0Zhc3RQYXRoUHJvYmVPbmUKICAqCQlQcm9iZSB0aGUgUEsgaW5kZXggZm9yIG9uZSBzZXQg b2Ygc2NhbiBrZXlzLCBsb2NrIHRoZSBtYXRjaGluZwpAQCAtMjc0OSwxMCArMzExNSw2IEBAIHJp X0Zhc3RQYXRoQ2hlY2soY29uc3QgUklfQ29uc3RyYWludEluZm8gKnJpaW5mbywKICAqCiAgKiBS ZXR1cm5zIHRydWUgaWYgYSBtYXRjaGluZyBQSyByb3cgd2FzIGZvdW5kLCBsb2NrZWQsIGFuZCAo aWYKICAqIGFwcGxpY2FibGUpIHZpc2libGUgdG8gdGhlIHRyYW5zYWN0aW9uIHNuYXBzaG90Lgot ICoKLSAqIFRoZSBjYWxsZXIgbXVzdCBlbnN1cmUgQ3VycmVudE1lbW9yeUNvbnRleHQgaXMgbG9u Zy1saXZlZCBlbm91Z2gKLSAqIGZvciB0aGUgc2NhbiBkZXNjcmlwdG9yJ3MgaW50ZXJuYWwgYWxs b2NhdGlvbnMgKHR5cGljYWxseQotICogVG9wVHJhbnNhY3Rpb25Db250ZXh0IHdoZW4gdXNpbmcg YSBjYWNoZWQgc2NhbmRlc2MpLgogICovCiBzdGF0aWMgYm9vbAogcmlfRmFzdFBhdGhQcm9iZU9u ZShSZWxhdGlvbiBwa19yZWwsIFJlbGF0aW9uIGlkeF9yZWwsCkBAIC0zNjczLDMgKzQwMzUsMjA0 IEBAIFJJX0ZLZXlfdHJpZ2dlcl90eXBlKE9pZCB0Z2ZvaWQpCiAKIAlyZXR1cm4gUklfVFJJR0dF Ul9OT05FOwogfQorCisvKgorICogcmlfRmFzdFBhdGhFbmRCYXRjaAorICoJCUZsdXNoIHJlbWFp bmluZyByb3dzIGFuZCB0ZWFyIGRvd24gY2FjaGVkIHN0YXRlLgorICoKKyAqIFJlZ2lzdGVyZWQg YXMgYW4gQWZ0ZXJUcmlnZ2VyQmF0Y2hDYWxsYmFjay4gIE5vdGU6IHRoZSBmbHVzaCBjYW4KKyAq IGRvIHJlYWwgd29yayAoQ0NJLCBzZWN1cml0eSBjb250ZXh0IHN3aXRjaCwgaW5kZXggcHJvYmVz KSBhbmQgY2FuCisgKiB0aHJvdyBFUlJPUiBvbiBhIGNvbnN0cmFpbnQgdmlvbGF0aW9uLiAgSWYg dGhhdCBoYXBwZW5zLAorICogcmlfRmFzdFBhdGhUZWFyZG93biBuZXZlciBydW5zOyBSZXNvdXJj ZU93bmVyICsgWGFjdENhbGxiYWNrCisgKiBoYW5kbGUgcmVzb3VyY2UgY2xlYW51cCBvbiB0aGUg YWJvcnQgcGF0aC4KKyAqLworc3RhdGljIHZvaWQKK3JpX0Zhc3RQYXRoRW5kQmF0Y2godm9pZCAq YXJnKQoreworCUhBU0hfU0VRX1NUQVRVUyBzdGF0dXM7CisJUklfRmFzdFBhdGhFbnRyeSAqZW50 cnk7CisKKwlpZiAocmlfZmFzdHBhdGhfY2FjaGUgPT0gTlVMTCkKKwkJcmV0dXJuOworCisJLyog Rmx1c2ggYW55IHBhcnRpYWwgYmF0Y2hlcyAtLSBjYW4gdGhyb3cgRVJST1IgKi8KKwloYXNoX3Nl cV9pbml0KCZzdGF0dXMsIHJpX2Zhc3RwYXRoX2NhY2hlKTsKKwl3aGlsZSAoKGVudHJ5ID0gaGFz aF9zZXFfc2VhcmNoKCZzdGF0dXMpKSAhPSBOVUxMKQorCXsKKwkJaWYgKGVudHJ5LT5iYXRjaF9j b3VudCA+IDApCisJCXsKKwkJCVJlbGF0aW9uCWZrX3JlbCA9IHRhYmxlX29wZW4oZW50cnktPnJp aW5mby0+ZmtfcmVsaWQsCisJCQkJCQkJCQkJCUFjY2Vzc1NoYXJlTG9jayk7CisKKwkJCXJpX0Zh c3RQYXRoQmF0Y2hGbHVzaChlbnRyeSwgZmtfcmVsKTsKKwkJCXRhYmxlX2Nsb3NlKGZrX3JlbCwg Tm9Mb2NrKTsKKwkJfQorCX0KKworCS8qIE9yZGVybHkgdGVhcmRvd24gKi8KKwlyaV9GYXN0UGF0 aFRlYXJkb3duKCk7Cit9CisKKy8qCisgKiByaV9GYXN0UGF0aFRlYXJkb3duCisgKgkJVGVhciBk b3duIGFsbCBjYWNoZWQgZmFzdC1wYXRoIHN0YXRlLgorICoKKyAqIENhbGxlZCBmcm9tIHJpX0Zh c3RQYXRoRW5kQmF0Y2goKSBhZnRlciBmbHVzaGluZyBhbnkgcmVtYWluaW5nIHJvd3MuCisgKi8K K3N0YXRpYyB2b2lkCityaV9GYXN0UGF0aFRlYXJkb3duKHZvaWQpCit7CisJSEFTSF9TRVFfU1RB VFVTIHN0YXR1czsKKwlSSV9GYXN0UGF0aEVudHJ5ICplbnRyeTsKKworCWlmIChyaV9mYXN0cGF0 aF9jYWNoZSA9PSBOVUxMKQorCQlyZXR1cm47CisKKwloYXNoX3NlcV9pbml0KCZzdGF0dXMsIHJp X2Zhc3RwYXRoX2NhY2hlKTsKKwl3aGlsZSAoKGVudHJ5ID0gaGFzaF9zZXFfc2VhcmNoKCZzdGF0 dXMpKSAhPSBOVUxMKQorCXsKKwkJaWYgKGVudHJ5LT5pZHhfcmVsKQorCQkJaW5kZXhfY2xvc2Uo ZW50cnktPmlkeF9yZWwsIE5vTG9jayk7CisJCWlmIChlbnRyeS0+cGtfcmVsKQorCQkJdGFibGVf Y2xvc2UoZW50cnktPnBrX3JlbCwgTm9Mb2NrKTsKKwkJaWYgKGVudHJ5LT5wa19zbG90KQorCQkJ RXhlY0Ryb3BTaW5nbGVUdXBsZVRhYmxlU2xvdChlbnRyeS0+cGtfc2xvdCk7CisJCWlmIChlbnRy eS0+Zmtfc2xvdCkKKwkJCUV4ZWNEcm9wU2luZ2xlVHVwbGVUYWJsZVNsb3QoZW50cnktPmZrX3Ns b3QpOworCQlpZiAoZW50cnktPmZsdXNoX2N4dCkKKwkJCU1lbW9yeUNvbnRleHREZWxldGUoZW50 cnktPmZsdXNoX2N4dCk7CisJfQorCisJaGFzaF9kZXN0cm95KHJpX2Zhc3RwYXRoX2NhY2hlKTsK KwlyaV9mYXN0cGF0aF9jYWNoZSA9IE5VTEw7CisJcmlfZmFzdHBhdGhfY2FsbGJhY2tfcmVnaXN0 ZXJlZCA9IGZhbHNlOworfQorCitzdGF0aWMgYm9vbCByaV9mYXN0cGF0aF94YWN0X2NhbGxiYWNr X3JlZ2lzdGVyZWQgPSBmYWxzZTsKKworc3RhdGljIHZvaWQKK3JpX0Zhc3RQYXRoWGFjdENhbGxi YWNrKFhhY3RFdmVudCBldmVudCwgdm9pZCAqYXJnKQoreworCS8qCisJICogT24gYWJvcnQsIFJl c291cmNlT3duZXIgYWxyZWFkeSByZWxlYXNlZCByZWxhdGlvbnM7IG9uIGNvbW1pdCwKKwkgKiBy aV9GYXN0UGF0aFRlYXJkb3duIGFscmVhZHkgcmFuLiAgRWl0aGVyIHdheSwganVzdCBOVUxMIHRo ZQorCSAqIHN0YXRpYyBwb2ludGVycyBzbyB0aGV5IGRvbid0IGRhbmdsZSBpbnRvIHRoZSBuZXh0 IHRyYW5zYWN0aW9uLgorCSAqLworCXJpX2Zhc3RwYXRoX2NhY2hlID0gTlVMTDsKKwlyaV9mYXN0 cGF0aF9jYWxsYmFja19yZWdpc3RlcmVkID0gZmFsc2U7Cit9CisKK3N0YXRpYyB2b2lkCityaV9G YXN0UGF0aFN1YlhhY3RDYWxsYmFjayhTdWJYYWN0RXZlbnQgZXZlbnQsIFN1YlRyYW5zYWN0aW9u SWQgbXlTdWJpZCwKKwkJCQkJCSAgIFN1YlRyYW5zYWN0aW9uSWQgcGFyZW50U3ViaWQsIHZvaWQg KmFyZykKK3sKKwlpZiAoZXZlbnQgPT0gU1VCWEFDVF9FVkVOVF9BQk9SVF9TVUIpCisJeworCQkv KgorCQkgKiBSZXNvdXJjZU93bmVyIGFscmVhZHkgcmVsZWFzZWQgcmVsYXRpb25zLiAgTlVMTCB0 aGUgc3RhdGljCisJCSAqIHBvaW50ZXJzIHNvIHRoZSBzdGlsbC1yZWdpc3RlcmVkIGJhdGNoIGNh bGxiYWNrIGJlY29tZXMgYQorCQkgKiBuby1vcCBmb3IgdGhlIHJlc3Qgb2YgdGhpcyB0cmFuc2Fj dGlvbi4KKwkJICovCisJCXJpX2Zhc3RwYXRoX2NhY2hlID0gTlVMTDsKKwkJcmlfZmFzdHBhdGhf Y2FsbGJhY2tfcmVnaXN0ZXJlZCA9IGZhbHNlOworCX0KK30KKworLyoKKyAqIHJpX0Zhc3RQYXRo R2V0RW50cnkKKyAqCQlMb29rIHVwIG9yIGNyZWF0ZSBhIHBlci1iYXRjaCBjYWNoZSBlbnRyeSBm b3IgdGhlIGdpdmVuIGNvbnN0cmFpbnQuCisgKgorICogT24gZmlyc3QgY2FsbCBmb3IgYSBjb25z dHJhaW50IHdpdGhpbiBhIGJhdGNoOiBvcGVucyBwa19yZWwgYW5kIHRoZQorICogaW5kZXgsIGFs bG9jYXRlcyBhIHJlc3VsdCBzbG90LCBhbmQgcmVnaXN0ZXJzIHRoZSBjbGVhbnVwIGNhbGxiYWNr LgorICoKKyAqIE9uIHN1YnNlcXVlbnQgY2FsbHM6IHJldHVybnMgdGhlIGV4aXN0aW5nIGVudHJ5 LgorICovCitzdGF0aWMgUklfRmFzdFBhdGhFbnRyeSAqCityaV9GYXN0UGF0aEdldEVudHJ5KGNv bnN0IFJJX0NvbnN0cmFpbnRJbmZvICpyaWluZm8sIFJlbGF0aW9uIGZrX3JlbCkKK3sKKwlSSV9G YXN0UGF0aEVudHJ5ICplbnRyeTsKKwlib29sCQlmb3VuZDsKKworCS8qIENyZWF0ZSBoYXNoIHRh YmxlIG9uIGZpcnN0IHVzZSBpbiB0aGlzIGJhdGNoICovCisJaWYgKHJpX2Zhc3RwYXRoX2NhY2hl ID09IE5VTEwpCisJeworCQlIQVNIQ1RMCQljdGw7CisKKwkJaWYgKCFyaV9mYXN0cGF0aF94YWN0 X2NhbGxiYWNrX3JlZ2lzdGVyZWQpCisJCXsKKwkJCVJlZ2lzdGVyWGFjdENhbGxiYWNrKHJpX0Zh c3RQYXRoWGFjdENhbGxiYWNrLCBOVUxMKTsKKwkJCVJlZ2lzdGVyU3ViWGFjdENhbGxiYWNrKHJp X0Zhc3RQYXRoU3ViWGFjdENhbGxiYWNrLCBOVUxMKTsKKwkJCXJpX2Zhc3RwYXRoX3hhY3RfY2Fs bGJhY2tfcmVnaXN0ZXJlZCA9IHRydWU7CisJCX0KKworCQljdGwua2V5c2l6ZSA9IHNpemVvZihP aWQpOworCQljdGwuZW50cnlzaXplID0gc2l6ZW9mKFJJX0Zhc3RQYXRoRW50cnkpOworCQljdGwu aGN4dCA9IFRvcFRyYW5zYWN0aW9uQ29udGV4dDsKKwkJcmlfZmFzdHBhdGhfY2FjaGUgPSBoYXNo X2NyZWF0ZSgiUkkgZmFzdC1wYXRoIGNhY2hlIiwKKwkJCQkJCQkJCQkxNiwKKwkJCQkJCQkJCQkm Y3RsLAorCQkJCQkJCQkJCUhBU0hfRUxFTSB8IEhBU0hfQkxPQlMgfCBIQVNIX0NPTlRFWFQpOwor CX0KKworCWVudHJ5ID0gaGFzaF9zZWFyY2gocmlfZmFzdHBhdGhfY2FjaGUsICZyaWluZm8tPmNv bnN0cmFpbnRfaWQsCisJCQkJCQlIQVNIX0VOVEVSLCAmZm91bmQpOworCisJaWYgKCFmb3VuZCkK Kwl7CisJCU1lbW9yeUNvbnRleHQgb2xkY3h0OworCQlPaWQJCQlzYXZlZF91c2VyaWQ7CisJCWlu dAkJCXNhdmVkX3NlY19jb250ZXh0OworCisJCS8qCisJCSAqIFplcm8gb3V0IG5vbi1rZXkgZmll bGRzIHNvIHJpX0Zhc3RQYXRoVGVhcmRvd24gaXMgc2FmZSBpZiB3ZSBlcnJvcgorCQkgKiBvdXQg ZHVyaW5nIHBhcnRpYWwgaW5pdGlhbGl6YXRpb24gYmVsb3cuCisJCSAqLworCQltZW1zZXQoKChj aGFyICopIGVudHJ5KSArIG9mZnNldG9mKFJJX0Zhc3RQYXRoRW50cnksIHBrX3JlbCksIDAsCisJ CQkgICBzaXplb2YoUklfRmFzdFBhdGhFbnRyeSkgLSBvZmZzZXRvZihSSV9GYXN0UGF0aEVudHJ5 LCBwa19yZWwpKTsKKworCQlvbGRjeHQgPSBNZW1vcnlDb250ZXh0U3dpdGNoVG8oVG9wVHJhbnNh Y3Rpb25Db250ZXh0KTsKKworCQkvKgorCQkgKiBPcGVuIFBLIHRhYmxlIGFuZCBpdHMgdW5pcXVl IGluZGV4LgorCQkgKgorCQkgKiBSb3dTaGFyZUxvY2sgb24gcGtfcmVsIG1hdGNoZXMgd2hhdCB0 aGUgU1BJIHBhdGgncyBTRUxFQ1QgLi4uIEZPUgorCQkgKiBLRVkgU0hBUkUgd291bGQgYWNxdWly ZSBhcyBhIHJlbGF0aW9uLWxldmVsIGxvY2suIEFjY2Vzc1NoYXJlTG9jaworCQkgKiBvbiB0aGUg aW5kZXggaXMgc3RhbmRhcmQgZm9yIGluZGV4IHNjYW5zLgorCQkgKgorCQkgKiBXZSBkb24ndCBy ZWxlYXNlIHRoZXNlIGxvY2tzIHVudGlsIGVuZCBvZiB0cmFuc2FjdGlvbiwgbWF0Y2hpbmcgU1BJ CisJCSAqIGJlaGF2aW9yLgorCQkgKi8KKwkJZW50cnktPnBrX3JlbCA9IHRhYmxlX29wZW4ocmlp bmZvLT5wa19yZWxpZCwgUm93U2hhcmVMb2NrKTsKKwkJZW50cnktPmlkeF9yZWwgPSBpbmRleF9v cGVuKHJpaW5mby0+Y29uaW5kaWQsIEFjY2Vzc1NoYXJlTG9jayk7CisKKwkJZW50cnktPnBrX3Ns b3QgPSB0YWJsZV9zbG90X2NyZWF0ZShlbnRyeS0+cGtfcmVsLCBOVUxMKTsKKwkJZW50cnktPmZr X3Nsb3QgPSBNYWtlU2luZ2xlVHVwbGVUYWJsZVNsb3QoUmVsYXRpb25HZXREZXNjcihma19yZWwp LAorCQkJCQkJCQkJCQkJICAmVFRTT3BzSGVhcFR1cGxlKTsKKworCQllbnRyeS0+Zmx1c2hfY3h0 ID0gQWxsb2NTZXRDb250ZXh0Q3JlYXRlKFRvcFRyYW5zYWN0aW9uQ29udGV4dCwKKwkJCQkJCQkJ CQkJCSAiUkkgZmFzdCBwYXRoIGZsdXNoIHRlbXBvcmFyeSBjb250ZXh0IiwKKwkJCQkJCQkJCQkJ CSBBTExPQ1NFVF9TTUFMTF9TSVpFUyk7CisKKwkJTWVtb3J5Q29udGV4dFN3aXRjaFRvKG9sZGN4 dCk7CisKKwkJLyogRW5zdXJlIGNsZWFudXAgYXQgZW5kIG9mIHRoaXMgdHJpZ2dlci1maXJpbmcg YmF0Y2ggKi8KKwkJaWYgKCFyaV9mYXN0cGF0aF9jYWxsYmFja19yZWdpc3RlcmVkKQorCQl7CisJ CQlSZWdpc3RlckFmdGVyVHJpZ2dlckJhdGNoQ2FsbGJhY2socmlfRmFzdFBhdGhFbmRCYXRjaCwg TlVMTCk7CisJCQlyaV9mYXN0cGF0aF9jYWxsYmFja19yZWdpc3RlcmVkID0gdHJ1ZTsKKwkJfQor CisJCUdldFVzZXJJZEFuZFNlY0NvbnRleHQoJnNhdmVkX3VzZXJpZCwgJnNhdmVkX3NlY19jb250 ZXh0KTsKKwkJU2V0VXNlcklkQW5kU2VjQ29udGV4dChSZWxhdGlvbkdldEZvcm0oZW50cnktPnBr X3JlbCktPnJlbG93bmVyLAorCQkJCQkJCSAgIHNhdmVkX3NlY19jb250ZXh0IHwKKwkJCQkJCQkg ICBTRUNVUklUWV9MT0NBTF9VU0VSSURfQ0hBTkdFIHwKKwkJCQkJCQkgICBTRUNVUklUWV9OT0ZP UkNFX1JMUyk7CisJCXJpX0NoZWNrUGVybWlzc2lvbnMoZW50cnktPnBrX3JlbCk7CisJCVNldFVz ZXJJZEFuZFNlY0NvbnRleHQoc2F2ZWRfdXNlcmlkLCBzYXZlZF9zZWNfY29udGV4dCk7CisKKwkJ LyogRm9yIHJpX0Zhc3RQYXRoRW5kQmF0Y2goKSAqLworCQllbnRyeS0+cmlpbmZvID0gcmlpbmZv OworCX0KKworCXJldHVybiBlbnRyeTsKK30KZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2NvbW1h bmRzL3RyaWdnZXIuaCBiL3NyYy9pbmNsdWRlL2NvbW1hbmRzL3RyaWdnZXIuaAppbmRleCAyN2Fm NTI4NDQwNi4uNzY2NDI5OGY1YzggMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2NvbW1hbmRzL3Ry aWdnZXIuaAorKysgYi9zcmMvaW5jbHVkZS9jb21tYW5kcy90cmlnZ2VyLmgKQEAgLTI4OSw0ICsy ODksMjIgQEAgZXh0ZXJuIHZvaWQgUklfUGFydGl0aW9uUmVtb3ZlX0NoZWNrKFRyaWdnZXIgKnRy aWdnZXIsIFJlbGF0aW9uIGZrX3JlbCwKIAogZXh0ZXJuIGludAlSSV9GS2V5X3RyaWdnZXJfdHlw ZShPaWQgdGdmb2lkKTsKIAorLyoKKyAqIENhbGxiYWNrIHR5cGUgZm9yIGVuZC1vZi10cmlnZ2Vy LWJhdGNoIG5vdGlmaWNhdGlvbnMuCisgKgorICogUmVnaXN0ZXJlZCB2aWEgUmVnaXN0ZXJBZnRl clRyaWdnZXJCYXRjaENhbGxiYWNrKCkuICBJbnZva2VkIHdoZW4KKyAqIGEgYmF0Y2ggb2YgYWZ0 ZXItdHJpZ2dlciBwcm9jZXNzaW5nIGNvbXBsZXRlczoKKyAqCS0gQWZ0ZXJUcmlnZ2VyRW5kUXVl cnkoKSAgICAgIChpbW1lZGlhdGUgY29uc3RyYWludHMpCisgKgktIEFmdGVyVHJpZ2dlckZpcmVE ZWZlcnJlZCgpICAoZGVmZXJyZWQgY29uc3RyYWludHMgYXQgQ09NTUlUKQorICoJLSBBZnRlclRy aWdnZXJTZXRTdGF0ZSgpICAgICAgKFNFVCBDT05TVFJBSU5UUyBJTU1FRElBVEUpCisgKgorICog VGhlIGNhbGxiYWNrIGxpc3QgaXMgY2xlYXJlZCBhZnRlciBlYWNoIGJhdGNoLiAgQ2FsbGVycyBt dXN0CisgKiByZS1yZWdpc3RlciBpZiB0aGV5IG5lZWQgdG8gYmUgY2FsbGVkIGFnYWluIGluIGEg c3Vic2VxdWVudCBiYXRjaC4KKyAqLwordHlwZWRlZiB2b2lkICgqQWZ0ZXJUcmlnZ2VyQmF0Y2hD YWxsYmFjaykgKHZvaWQgKmFyZyk7CisKK2V4dGVybiB2b2lkIFJlZ2lzdGVyQWZ0ZXJUcmlnZ2Vy QmF0Y2hDYWxsYmFjayhBZnRlclRyaWdnZXJCYXRjaENhbGxiYWNrIGNhbGxiYWNrLAorCQkJCQkJ CQkJCQkgIHZvaWQgKmFyZyk7CitleHRlcm4gYm9vbCBBZnRlclRyaWdnZXJCYXRjaElzQWN0aXZl KHZvaWQpOworCiAjZW5kaWYJCQkJCQkJLyogVFJJR0dFUl9IICovCmRpZmYgLS1naXQgYS9zcmMv dGVzdC9yZWdyZXNzL2V4cGVjdGVkL2ZvcmVpZ25fa2V5Lm91dCBiL3NyYy90ZXN0L3JlZ3Jlc3Mv ZXhwZWN0ZWQvZm9yZWlnbl9rZXkub3V0CmluZGV4IDA4MjZmNTE4MDA0Li4yMTc5ZDJhOGU4ZiAx MDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9mb3JlaWduX2tleS5vdXQKKysr IGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9mb3JlaWduX2tleS5vdXQKQEAgLTM1MDQsMyAr MzUwNCwxMjkgQEAgREVUQUlMOiAgZHJvcCBjYXNjYWRlcyB0byB0YWJsZSBma3BhcnQxM190MQog ZHJvcCBjYXNjYWRlcyB0byB0YWJsZSBma3BhcnQxM190MgogZHJvcCBjYXNjYWRlcyB0byB0YWJs ZSBma3BhcnQxM190MwogUkVTRVQgc2VhcmNoX3BhdGg7CistLSBUZXN0cyBmb3JlaWduIGtleSBj aGVjayBmYXN0LXBhdGggbm8tY2FjaGUgcGF0aC4KK0NSRUFURSBUQUJMRSBmcF9wa19hbHRlciAo YSBpbnQgUFJJTUFSWSBLRVkpOworSU5TRVJUIElOVE8gZnBfcGtfYWx0ZXIgU0VMRUNUIGdlbmVy YXRlX3NlcmllcygxLCAxMDApOworQ1JFQVRFIFRBQkxFIGZwX2ZrX2FsdGVyIChhIGludCk7CitJ TlNFUlQgSU5UTyBmcF9ma19hbHRlciBTRUxFQ1QgZ2VuZXJhdGVfc2VyaWVzKDEsIDEwMCk7Cist LSBWYWxpZGF0aW9uIHBhdGg6IHNob3VsZCBzdWNjZWVkCitBTFRFUiBUQUJMRSBmcF9ma19hbHRl ciBBREQgRk9SRUlHTiBLRVkgKGEpIFJFRkVSRU5DRVMgZnBfcGtfYWx0ZXI7CitJTlNFUlQgSU5U TyBmcF9ma19hbHRlciBWQUxVRVMgKDEwMSk7ICAtLSBzaG91bGQgZmFpbCAoY29uc3RyYWludCBh Y3RpdmUpCitFUlJPUjogIGluc2VydCBvciB1cGRhdGUgb24gdGFibGUgImZwX2ZrX2FsdGVyIiB2 aW9sYXRlcyBmb3JlaWduIGtleSBjb25zdHJhaW50ICJmcF9ma19hbHRlcl9hX2ZrZXkiCitERVRB SUw6ICBLZXkgKGEpPSgxMDEpIGlzIG5vdCBwcmVzZW50IGluIHRhYmxlICJmcF9wa19hbHRlciIu CitEUk9QIFRBQkxFIGZwX2ZrX2FsdGVyLCBmcF9wa19hbHRlcjsKKy0tIFNlcGFyYXRlIHRlc3Q6 IHZhbGlkYXRpb24gY2F0Y2hlcyBleGlzdGluZyB2aW9sYXRpb24KK0NSRUFURSBUQUJMRSBmcF9w a19hbHRlcjIgKGEgaW50IFBSSU1BUlkgS0VZKTsKK0lOU0VSVCBJTlRPIGZwX3BrX2FsdGVyMiBW QUxVRVMgKDEpOworQ1JFQVRFIFRBQkxFIGZwX2ZrX2FsdGVyMiAoYSBpbnQpOworSU5TRVJUIElO VE8gZnBfZmtfYWx0ZXIyIFZBTFVFUyAoMSksICgyMDApOyAgLS0gMjAwIGhhcyBubyBQSyBtYXRj aAorQUxURVIgVEFCTEUgZnBfZmtfYWx0ZXIyIEFERCBGT1JFSUdOIEtFWSAoYSkgUkVGRVJFTkNF UyBmcF9wa19hbHRlcjI7ICAtLSBzaG91bGQgZmFpbAorRVJST1I6ICBpbnNlcnQgb3IgdXBkYXRl IG9uIHRhYmxlICJmcF9ma19hbHRlcjIiIHZpb2xhdGVzIGZvcmVpZ24ga2V5IGNvbnN0cmFpbnQg ImZwX2ZrX2FsdGVyMl9hX2ZrZXkiCitERVRBSUw6ICBLZXkgKGEpPSgyMDApIGlzIG5vdCBwcmVz ZW50IGluIHRhYmxlICJmcF9wa19hbHRlcjIiLgorRFJPUCBUQUJMRSBmcF9ma19hbHRlcjIsIGZw X3BrX2FsdGVyMjsKKy0tIFRlc3RzIHRoYXQgdGhlIGZhc3QtcGF0aCBoYW5kbGVzIGNhY2hpbmcg Zm9yIG11bHRpcGxlIGNvbnN0cmFpbnRzCitDUkVBVEUgVEFCTEUgZnBfcGsxIChhIGludCBQUklN QVJZIEtFWSk7CitDUkVBVEUgVEFCTEUgZnBfcGsyIChiIGludCBQUklNQVJZIEtFWSk7CitJTlNF UlQgSU5UTyBmcF9wazEgVkFMVUVTICgxKTsKK0lOU0VSVCBJTlRPIGZwX3BrMiBWQUxVRVMgKDEp OworQ1JFQVRFIFRBQkxFIGZwX211bHRpX2ZrICgKKyAgICBhIGludCBSRUZFUkVOQ0VTIGZwX3Br MSwKKyAgICBiIGludCBSRUZFUkVOQ0VTIGZwX3BrMgorKTsKK0lOU0VSVCBJTlRPIGZwX211bHRp X2ZrIFZBTFVFUyAoMSwgMSk7ICAtLSB0d28gY29uc3RyYWludHMsIG9uZSBiYXRjaAorSU5TRVJU IElOVE8gZnBfbXVsdGlfZmsgVkFMVUVTICgxLCAyKTsgIC0tIHNlY29uZCBjb25zdHJhaW50IGZh aWxzCitFUlJPUjogIGluc2VydCBvciB1cGRhdGUgb24gdGFibGUgImZwX211bHRpX2ZrIiB2aW9s YXRlcyBmb3JlaWduIGtleSBjb25zdHJhaW50ICJmcF9tdWx0aV9ma19iX2ZrZXkiCitERVRBSUw6 ICBLZXkgKGIpPSgyKSBpcyBub3QgcHJlc2VudCBpbiB0YWJsZSAiZnBfcGsyIi4KK0RST1AgVEFC TEUgZnBfbXVsdGlfZmssIGZwX3BrMSwgZnBfcGsyOworLS0gVGVzdCB0aGF0IGZhc3QtcGF0aCBj YWNoZSBoYW5kbGVzIGRlZmVycmVkIGNvbnN0cmFpbnRzIGFuZCBTRVQgQ09OU1RSQUlOVFMgSU1N RURJQVRFCitDUkVBVEUgVEFCTEUgZnBfcGtfZGVmZXIgKGEgaW50IFBSSU1BUlkgS0VZKTsKK0NS RUFURSBUQUJMRSBmcF9ma19kZWZlciAoYSBpbnQgUkVGRVJFTkNFUyBmcF9wa19kZWZlciBERUZF UlJBQkxFIElOSVRJQUxMWSBERUZFUlJFRCk7CitJTlNFUlQgSU5UTyBmcF9wa19kZWZlciBWQUxV RVMgKDEpLCAoMik7CitCRUdJTjsKK0lOU0VSVCBJTlRPIGZwX2ZrX2RlZmVyIFZBTFVFUyAoMSk7 CitJTlNFUlQgSU5UTyBmcF9ma19kZWZlciBWQUxVRVMgKDIpOworU0VUIENPTlNUUkFJTlRTIEFM TCBJTU1FRElBVEU7ICAtLSBmaXJlcyBiYXRjaCBjYWxsYmFjayBoZXJlCitJTlNFUlQgSU5UTyBm cF9ma19kZWZlciBWQUxVRVMgKDMpOyAgLS0gc2hvdWxkIGZhaWwsIGFsc28gdGVzdHMgdGhhdCBj YWNoZSB3YXMgY2xlYW5lZCB1cAorRVJST1I6ICBpbnNlcnQgb3IgdXBkYXRlIG9uIHRhYmxlICJm cF9ma19kZWZlciIgdmlvbGF0ZXMgZm9yZWlnbiBrZXkgY29uc3RyYWludCAiZnBfZmtfZGVmZXJf YV9ma2V5IgorREVUQUlMOiAgS2V5IChhKT0oMykgaXMgbm90IHByZXNlbnQgaW4gdGFibGUgImZw X3BrX2RlZmVyIi4KK0NPTU1JVDsKK0RST1AgVEFCTEUgZnBfcGtfZGVmZXIsIGZwX2ZrX2RlZmVy OworLS0gU3VidHJhbnNhY3Rpb24gYWJvcnQ6IGNhY2hlZCBzdGF0ZSBtdXN0IGJlIGludmFsaWRh dGVkIG9uIFJPTExCQUNLIFRPCitDUkVBVEUgVEFCTEUgZnBfcGtfc3VieGFjdCAoYSBpbnQgUFJJ TUFSWSBLRVkpOworQ1JFQVRFIFRBQkxFIGZwX2ZrX3N1YnhhY3QgKGEgaW50IFJFRkVSRU5DRVMg ZnBfcGtfc3VieGFjdCk7CitJTlNFUlQgSU5UTyBmcF9wa19zdWJ4YWN0IFZBTFVFUyAoMSksICgy KTsKK0JFR0lOOworSU5TRVJUIElOVE8gZnBfZmtfc3VieGFjdCBWQUxVRVMgKDEpOworU0FWRVBP SU5UIHNwMTsKK0lOU0VSVCBJTlRPIGZwX2ZrX3N1YnhhY3QgVkFMVUVTICgyKTsKK1JPTExCQUNL IFRPIHNwMTsKK0lOU0VSVCBJTlRPIGZwX2ZrX3N1YnhhY3QgVkFMVUVTICgxKTsKK0NPTU1JVDsK K1NFTEVDVCAqIEZST00gZnBfZmtfc3VieGFjdDsKKyBhIAorLS0tCisgMQorIDEKKygyIHJvd3Mp CisKK0RST1AgVEFCTEUgZnBfZmtfc3VieGFjdCwgZnBfcGtfc3VieGFjdDsKKy0tIEZLIGNoZWNr IG11c3Qgc2VlIFBLIHJvd3MgaW5zZXJ0ZWQgYnkgZWFybGllciBBRlRFUiB0cmlnZ2VycworLS0g ZmlyaW5nIG9uIHRoZSBzYW1lIHN0YXRlbWVudAorQ1JFQVRFIFRBQkxFIGZwX3BrX2NjaSAoYSBp bnQgUFJJTUFSWSBLRVkpOworQ1JFQVRFIFRBQkxFIGZwX2ZrX2NjaSAoYSBpbnQgUkVGRVJFTkNF UyBmcF9wa19jY2kpOworQ1JFQVRFIEZVTkNUSU9OIGZwX2F1dG9fcGsoKSBSRVRVUk5TIHRyaWdn ZXIgQVMgJCQKK0JFR0lOCisgIFJBSVNFIE5PVElDRSAnZnBfYXV0b19wayBjYWxsZWQnOworICBJ TlNFUlQgSU5UTyBmcF9wa19jY2kgVkFMVUVTIChORVcuYSk7CisgIFJFVFVSTiBORVc7CitFTkQg JCQgTEFOR1VBR0UgcGxwZ3NxbDsKKy0tIE5hbWUgc29ydHMgYmVmb3JlIHRoZSBSSSB0cmlnZ2Vy LCBzbyBmaXJlcyBmaXJzdCBwZXIgcm93CitDUkVBVEUgVFJJR0dFUiAiQUFBX2F1dG8iIEFGVEVS IElOU0VSVCBPTiBmcF9ma19jY2kKKyAgRk9SIEVBQ0ggUk9XIEVYRUNVVEUgRlVOQ1RJT04gZnBf YXV0b19waygpOworLS0gU2hvdWxkIHN1Y2NlZWQ6IEFBQV9hdXRvIHByb3Zpc2lvbnMgdGhlIFBL IHJvdyBiZWZvcmUgUkkgY2hlY2sKK0lOU0VSVCBJTlRPIGZwX2ZrX2NjaSBWQUxVRVMgKDEpLCAo MiksICgzKTsKK05PVElDRTogIGZwX2F1dG9fcGsgY2FsbGVkCitOT1RJQ0U6ICBmcF9hdXRvX3Br IGNhbGxlZAorTk9USUNFOiAgZnBfYXV0b19wayBjYWxsZWQKK0RST1AgVEFCTEUgZnBfZmtfY2Np LCBmcF9wa19jY2k7CitEUk9QIEZVTkNUSU9OIGZwX2F1dG9fcGs7CistLSBNdWx0aS1jb2x1bW4g Rks6IGV4ZXJjaXNlcyBiYXRjaGVkIHBlci1yb3cgcHJvYmluZyB3aXRoIGNvbXBvc2l0ZSBrZXlz CitDUkVBVEUgVEFCTEUgZnBfcGtfbXVsdGkgKGEgaW50LCBiIGludCwgUFJJTUFSWSBLRVkgKGEs IGIpKTsKK0lOU0VSVCBJTlRPIGZwX3BrX211bHRpIFNFTEVDVCBpLCBpIEZST00gZ2VuZXJhdGVf c2VyaWVzKDEsIDEwMCkgaTsKK0NSRUFURSBUQUJMRSBmcF9ma19tdWx0aSAoeCBpbnQsIGEgaW50 LCBiIGludCwKKyAgICBGT1JFSUdOIEtFWSAoYSwgYikgUkVGRVJFTkNFUyBmcF9wa19tdWx0aSk7 CitJTlNFUlQgSU5UTyBmcF9ma19tdWx0aSBTRUxFQ1QgaSwgaSwgaSBGUk9NIGdlbmVyYXRlX3Nl cmllcygxLCAxMDApIGk7CitJTlNFUlQgSU5UTyBmcF9ma19tdWx0aSBWQUxVRVMgKDEsIDk5OSwg OTk5KTsKK0VSUk9SOiAgaW5zZXJ0IG9yIHVwZGF0ZSBvbiB0YWJsZSAiZnBfZmtfbXVsdGkiIHZp b2xhdGVzIGZvcmVpZ24ga2V5IGNvbnN0cmFpbnQgImZwX2ZrX211bHRpX2FfYl9ma2V5IgorREVU QUlMOiAgS2V5IChhLCBiKT0oOTk5LCA5OTkpIGlzIG5vdCBwcmVzZW50IGluIHRhYmxlICJmcF9w a19tdWx0aSIuCitEUk9QIFRBQkxFIGZwX2ZrX211bHRpLCBmcF9wa19tdWx0aTsKKy0tIERlZmVy cmVkIGNvbnN0cmFpbnQ6IGJhdGNoIGZsdXNoZWQgYXQgQ09NTUlULCBub3QgYXQgc3RhdGVtZW50 IGVuZAorQ1JFQVRFIFRBQkxFIGZwX3BrX2NvbW1pdCAoYSBpbnQgUFJJTUFSWSBLRVkpOworQ1JF QVRFIFRBQkxFIGZwX2ZrX2NvbW1pdCAoYSBpbnQgUkVGRVJFTkNFUyBmcF9wa19jb21taXQKKyAg ICBERUZFUlJBQkxFIElOSVRJQUxMWSBERUZFUlJFRCk7CitJTlNFUlQgSU5UTyBmcF9wa19jb21t aXQgVkFMVUVTICgxKTsKK0JFR0lOOworSU5TRVJUIElOVE8gZnBfZmtfY29tbWl0IFZBTFVFUyAo MSk7CitJTlNFUlQgSU5UTyBmcF9ma19jb21taXQgVkFMVUVTICgxKTsKK0lOU0VSVCBJTlRPIGZw X2ZrX2NvbW1pdCBWQUxVRVMgKDk5OSk7CitDT01NSVQ7CitFUlJPUjogIGluc2VydCBvciB1cGRh dGUgb24gdGFibGUgImZwX2ZrX2NvbW1pdCIgdmlvbGF0ZXMgZm9yZWlnbiBrZXkgY29uc3RyYWlu dCAiZnBfZmtfY29tbWl0X2FfZmtleSIKK0RFVEFJTDogIEtleSAoYSk9KDk5OSkgaXMgbm90IHBy ZXNlbnQgaW4gdGFibGUgImZwX3BrX2NvbW1pdCIuCitEUk9QIFRBQkxFIGZwX2ZrX2NvbW1pdCwg ZnBfcGtfY29tbWl0OworLS0gQ3Jvc3MtdHlwZSBGSyB3aXRoIGJ1bGsgaW5zZXJ0OiBpbnQ4IEZL IHJlZmVyZW5jaW5nIGludDQgUEssCistLSB2YWx1ZXMgY2FzdCBkdXJpbmcgYXJyYXkgY29uc3Ry dWN0aW9uCitDUkVBVEUgVEFCTEUgZnBfcGtfY3Jvc3MgKGEgaW50NCBQUklNQVJZIEtFWSk7CitJ TlNFUlQgSU5UTyBmcF9wa19jcm9zcyBTRUxFQ1QgZ2VuZXJhdGVfc2VyaWVzKDEsIDIwMCk7CitD UkVBVEUgVEFCTEUgZnBfZmtfY3Jvc3MgKGEgaW50OCBSRUZFUkVOQ0VTIGZwX3BrX2Nyb3NzKTsK K0lOU0VSVCBJTlRPIGZwX2ZrX2Nyb3NzIFNFTEVDVCBnZW5lcmF0ZV9zZXJpZXMoMSwgMjAwKTsK K0lOU0VSVCBJTlRPIGZwX2ZrX2Nyb3NzIFZBTFVFUyAoOTk5KTsKK0VSUk9SOiAgaW5zZXJ0IG9y IHVwZGF0ZSBvbiB0YWJsZSAiZnBfZmtfY3Jvc3MiIHZpb2xhdGVzIGZvcmVpZ24ga2V5IGNvbnN0 cmFpbnQgImZwX2ZrX2Nyb3NzX2FfZmtleSIKK0RFVEFJTDogIEtleSAoYSk9KDk5OSkgaXMgbm90 IHByZXNlbnQgaW4gdGFibGUgImZwX3BrX2Nyb3NzIi4KK0RST1AgVEFCTEUgZnBfZmtfY3Jvc3Ms IGZwX3BrX2Nyb3NzOworLS0gRHVwbGljYXRlIEZLIHZhbHVlczogd2hlbiB1c2luZyB0aGUgYmF0 Y2hlZCBTQU9QIHBhdGgsIGV2ZXJ5CistLSByb3cgbXVzdCBiZSByZWNvZ25pemVkIGFzIHNhdGlz ZmllZCwgbm90IGp1c3QgdGhlIGZpcnN0IG1hdGNoCitDUkVBVEUgVEFCTEUgZnBfcGtfZHVwIChh IGludCBQUklNQVJZIEtFWSk7CitJTlNFUlQgSU5UTyBmcF9wa19kdXAgVkFMVUVTICgxKTsKK0NS RUFURSBUQUJMRSBmcF9ma19kdXAgKGEgaW50IFJFRkVSRU5DRVMgZnBfcGtfZHVwKTsKK0lOU0VS VCBJTlRPIGZwX2ZrX2R1cCBTRUxFQ1QgMSBGUk9NIGdlbmVyYXRlX3NlcmllcygxLCAxMDApOwor RFJPUCBUQUJMRSBmcF9ma19kdXAsIGZwX3BrX2R1cDsKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3Jl Z3Jlc3Mvc3FsL2ZvcmVpZ25fa2V5LnNxbCBiL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2ZvcmVpZ25f a2V5LnNxbAppbmRleCBlOWVlMjkzMzFjYi4uN2E3Mjk0ODZiYzIgMTAwNjQ0Ci0tLSBhL3NyYy90 ZXN0L3JlZ3Jlc3Mvc3FsL2ZvcmVpZ25fa2V5LnNxbAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL3Nx bC9mb3JlaWduX2tleS5zcWwKQEAgLTI0OTgsMyArMjQ5OCwxMjEgQEAgV0lUSCBjdGUgQVMgKAog CiBEUk9QIFNDSEVNQSBma3BhcnQxMyBDQVNDQURFOwogUkVTRVQgc2VhcmNoX3BhdGg7CisKKy0t IFRlc3RzIGZvcmVpZ24ga2V5IGNoZWNrIGZhc3QtcGF0aCBuby1jYWNoZSBwYXRoLgorQ1JFQVRF IFRBQkxFIGZwX3BrX2FsdGVyIChhIGludCBQUklNQVJZIEtFWSk7CitJTlNFUlQgSU5UTyBmcF9w a19hbHRlciBTRUxFQ1QgZ2VuZXJhdGVfc2VyaWVzKDEsIDEwMCk7CitDUkVBVEUgVEFCTEUgZnBf ZmtfYWx0ZXIgKGEgaW50KTsKK0lOU0VSVCBJTlRPIGZwX2ZrX2FsdGVyIFNFTEVDVCBnZW5lcmF0 ZV9zZXJpZXMoMSwgMTAwKTsKKy0tIFZhbGlkYXRpb24gcGF0aDogc2hvdWxkIHN1Y2NlZWQKK0FM VEVSIFRBQkxFIGZwX2ZrX2FsdGVyIEFERCBGT1JFSUdOIEtFWSAoYSkgUkVGRVJFTkNFUyBmcF9w a19hbHRlcjsKK0lOU0VSVCBJTlRPIGZwX2ZrX2FsdGVyIFZBTFVFUyAoMTAxKTsgIC0tIHNob3Vs ZCBmYWlsIChjb25zdHJhaW50IGFjdGl2ZSkKK0RST1AgVEFCTEUgZnBfZmtfYWx0ZXIsIGZwX3Br X2FsdGVyOworCistLSBTZXBhcmF0ZSB0ZXN0OiB2YWxpZGF0aW9uIGNhdGNoZXMgZXhpc3Rpbmcg dmlvbGF0aW9uCitDUkVBVEUgVEFCTEUgZnBfcGtfYWx0ZXIyIChhIGludCBQUklNQVJZIEtFWSk7 CitJTlNFUlQgSU5UTyBmcF9wa19hbHRlcjIgVkFMVUVTICgxKTsKK0NSRUFURSBUQUJMRSBmcF9m a19hbHRlcjIgKGEgaW50KTsKK0lOU0VSVCBJTlRPIGZwX2ZrX2FsdGVyMiBWQUxVRVMgKDEpLCAo MjAwKTsgIC0tIDIwMCBoYXMgbm8gUEsgbWF0Y2gKK0FMVEVSIFRBQkxFIGZwX2ZrX2FsdGVyMiBB REQgRk9SRUlHTiBLRVkgKGEpIFJFRkVSRU5DRVMgZnBfcGtfYWx0ZXIyOyAgLS0gc2hvdWxkIGZh aWwKK0RST1AgVEFCTEUgZnBfZmtfYWx0ZXIyLCBmcF9wa19hbHRlcjI7CisKKy0tIFRlc3RzIHRo YXQgdGhlIGZhc3QtcGF0aCBoYW5kbGVzIGNhY2hpbmcgZm9yIG11bHRpcGxlIGNvbnN0cmFpbnRz CitDUkVBVEUgVEFCTEUgZnBfcGsxIChhIGludCBQUklNQVJZIEtFWSk7CitDUkVBVEUgVEFCTEUg ZnBfcGsyIChiIGludCBQUklNQVJZIEtFWSk7CitJTlNFUlQgSU5UTyBmcF9wazEgVkFMVUVTICgx KTsKK0lOU0VSVCBJTlRPIGZwX3BrMiBWQUxVRVMgKDEpOworQ1JFQVRFIFRBQkxFIGZwX211bHRp X2ZrICgKKyAgICBhIGludCBSRUZFUkVOQ0VTIGZwX3BrMSwKKyAgICBiIGludCBSRUZFUkVOQ0VT IGZwX3BrMgorKTsKK0lOU0VSVCBJTlRPIGZwX211bHRpX2ZrIFZBTFVFUyAoMSwgMSk7ICAtLSB0 d28gY29uc3RyYWludHMsIG9uZSBiYXRjaAorSU5TRVJUIElOVE8gZnBfbXVsdGlfZmsgVkFMVUVT ICgxLCAyKTsgIC0tIHNlY29uZCBjb25zdHJhaW50IGZhaWxzCitEUk9QIFRBQkxFIGZwX211bHRp X2ZrLCBmcF9wazEsIGZwX3BrMjsKKworLS0gVGVzdCB0aGF0IGZhc3QtcGF0aCBjYWNoZSBoYW5k bGVzIGRlZmVycmVkIGNvbnN0cmFpbnRzIGFuZCBTRVQgQ09OU1RSQUlOVFMgSU1NRURJQVRFCitD UkVBVEUgVEFCTEUgZnBfcGtfZGVmZXIgKGEgaW50IFBSSU1BUlkgS0VZKTsKK0NSRUFURSBUQUJM RSBmcF9ma19kZWZlciAoYSBpbnQgUkVGRVJFTkNFUyBmcF9wa19kZWZlciBERUZFUlJBQkxFIElO SVRJQUxMWSBERUZFUlJFRCk7CitJTlNFUlQgSU5UTyBmcF9wa19kZWZlciBWQUxVRVMgKDEpLCAo Mik7CisKK0JFR0lOOworSU5TRVJUIElOVE8gZnBfZmtfZGVmZXIgVkFMVUVTICgxKTsKK0lOU0VS VCBJTlRPIGZwX2ZrX2RlZmVyIFZBTFVFUyAoMik7CitTRVQgQ09OU1RSQUlOVFMgQUxMIElNTUVE SUFURTsgIC0tIGZpcmVzIGJhdGNoIGNhbGxiYWNrIGhlcmUKK0lOU0VSVCBJTlRPIGZwX2ZrX2Rl ZmVyIFZBTFVFUyAoMyk7ICAtLSBzaG91bGQgZmFpbCwgYWxzbyB0ZXN0cyB0aGF0IGNhY2hlIHdh cyBjbGVhbmVkIHVwCitDT01NSVQ7CitEUk9QIFRBQkxFIGZwX3BrX2RlZmVyLCBmcF9ma19kZWZl cjsKKworLS0gU3VidHJhbnNhY3Rpb24gYWJvcnQ6IGNhY2hlZCBzdGF0ZSBtdXN0IGJlIGludmFs aWRhdGVkIG9uIFJPTExCQUNLIFRPCitDUkVBVEUgVEFCTEUgZnBfcGtfc3VieGFjdCAoYSBpbnQg UFJJTUFSWSBLRVkpOworQ1JFQVRFIFRBQkxFIGZwX2ZrX3N1YnhhY3QgKGEgaW50IFJFRkVSRU5D RVMgZnBfcGtfc3VieGFjdCk7CitJTlNFUlQgSU5UTyBmcF9wa19zdWJ4YWN0IFZBTFVFUyAoMSks ICgyKTsKK0JFR0lOOworSU5TRVJUIElOVE8gZnBfZmtfc3VieGFjdCBWQUxVRVMgKDEpOworU0FW RVBPSU5UIHNwMTsKK0lOU0VSVCBJTlRPIGZwX2ZrX3N1YnhhY3QgVkFMVUVTICgyKTsKK1JPTExC QUNLIFRPIHNwMTsKK0lOU0VSVCBJTlRPIGZwX2ZrX3N1YnhhY3QgVkFMVUVTICgxKTsKK0NPTU1J VDsKK1NFTEVDVCAqIEZST00gZnBfZmtfc3VieGFjdDsKK0RST1AgVEFCTEUgZnBfZmtfc3VieGFj dCwgZnBfcGtfc3VieGFjdDsKKworLS0gRksgY2hlY2sgbXVzdCBzZWUgUEsgcm93cyBpbnNlcnRl ZCBieSBlYXJsaWVyIEFGVEVSIHRyaWdnZXJzCistLSBmaXJpbmcgb24gdGhlIHNhbWUgc3RhdGVt ZW50CitDUkVBVEUgVEFCTEUgZnBfcGtfY2NpIChhIGludCBQUklNQVJZIEtFWSk7CitDUkVBVEUg VEFCTEUgZnBfZmtfY2NpIChhIGludCBSRUZFUkVOQ0VTIGZwX3BrX2NjaSk7CisKK0NSRUFURSBG VU5DVElPTiBmcF9hdXRvX3BrKCkgUkVUVVJOUyB0cmlnZ2VyIEFTICQkCitCRUdJTgorICBSQUlT RSBOT1RJQ0UgJ2ZwX2F1dG9fcGsgY2FsbGVkJzsKKyAgSU5TRVJUIElOVE8gZnBfcGtfY2NpIFZB TFVFUyAoTkVXLmEpOworICBSRVRVUk4gTkVXOworRU5EICQkIExBTkdVQUdFIHBscGdzcWw7CisK Ky0tIE5hbWUgc29ydHMgYmVmb3JlIHRoZSBSSSB0cmlnZ2VyLCBzbyBmaXJlcyBmaXJzdCBwZXIg cm93CitDUkVBVEUgVFJJR0dFUiAiQUFBX2F1dG8iIEFGVEVSIElOU0VSVCBPTiBmcF9ma19jY2kK KyAgRk9SIEVBQ0ggUk9XIEVYRUNVVEUgRlVOQ1RJT04gZnBfYXV0b19waygpOworCistLSBTaG91 bGQgc3VjY2VlZDogQUFBX2F1dG8gcHJvdmlzaW9ucyB0aGUgUEsgcm93IGJlZm9yZSBSSSBjaGVj aworSU5TRVJUIElOVE8gZnBfZmtfY2NpIFZBTFVFUyAoMSksICgyKSwgKDMpOworCitEUk9QIFRB QkxFIGZwX2ZrX2NjaSwgZnBfcGtfY2NpOworRFJPUCBGVU5DVElPTiBmcF9hdXRvX3BrOworCist LSBNdWx0aS1jb2x1bW4gRks6IGV4ZXJjaXNlcyBiYXRjaGVkIHBlci1yb3cgcHJvYmluZyB3aXRo IGNvbXBvc2l0ZSBrZXlzCitDUkVBVEUgVEFCTEUgZnBfcGtfbXVsdGkgKGEgaW50LCBiIGludCwg UFJJTUFSWSBLRVkgKGEsIGIpKTsKK0lOU0VSVCBJTlRPIGZwX3BrX211bHRpIFNFTEVDVCBpLCBp IEZST00gZ2VuZXJhdGVfc2VyaWVzKDEsIDEwMCkgaTsKK0NSRUFURSBUQUJMRSBmcF9ma19tdWx0 aSAoeCBpbnQsIGEgaW50LCBiIGludCwKKyAgICBGT1JFSUdOIEtFWSAoYSwgYikgUkVGRVJFTkNF UyBmcF9wa19tdWx0aSk7CitJTlNFUlQgSU5UTyBmcF9ma19tdWx0aSBTRUxFQ1QgaSwgaSwgaSBG Uk9NIGdlbmVyYXRlX3NlcmllcygxLCAxMDApIGk7CitJTlNFUlQgSU5UTyBmcF9ma19tdWx0aSBW QUxVRVMgKDEsIDk5OSwgOTk5KTsKK0RST1AgVEFCTEUgZnBfZmtfbXVsdGksIGZwX3BrX211bHRp OworCistLSBEZWZlcnJlZCBjb25zdHJhaW50OiBiYXRjaCBmbHVzaGVkIGF0IENPTU1JVCwgbm90 IGF0IHN0YXRlbWVudCBlbmQKK0NSRUFURSBUQUJMRSBmcF9wa19jb21taXQgKGEgaW50IFBSSU1B UlkgS0VZKTsKK0NSRUFURSBUQUJMRSBmcF9ma19jb21taXQgKGEgaW50IFJFRkVSRU5DRVMgZnBf cGtfY29tbWl0CisgICAgREVGRVJSQUJMRSBJTklUSUFMTFkgREVGRVJSRUQpOworSU5TRVJUIElO VE8gZnBfcGtfY29tbWl0IFZBTFVFUyAoMSk7CitCRUdJTjsKK0lOU0VSVCBJTlRPIGZwX2ZrX2Nv bW1pdCBWQUxVRVMgKDEpOworSU5TRVJUIElOVE8gZnBfZmtfY29tbWl0IFZBTFVFUyAoMSk7CitJ TlNFUlQgSU5UTyBmcF9ma19jb21taXQgVkFMVUVTICg5OTkpOworQ09NTUlUOworRFJPUCBUQUJM RSBmcF9ma19jb21taXQsIGZwX3BrX2NvbW1pdDsKKworLS0gQ3Jvc3MtdHlwZSBGSyB3aXRoIGJ1 bGsgaW5zZXJ0OiBpbnQ4IEZLIHJlZmVyZW5jaW5nIGludDQgUEssCistLSB2YWx1ZXMgY2FzdCBk dXJpbmcgYXJyYXkgY29uc3RydWN0aW9uCitDUkVBVEUgVEFCTEUgZnBfcGtfY3Jvc3MgKGEgaW50 NCBQUklNQVJZIEtFWSk7CitJTlNFUlQgSU5UTyBmcF9wa19jcm9zcyBTRUxFQ1QgZ2VuZXJhdGVf c2VyaWVzKDEsIDIwMCk7CitDUkVBVEUgVEFCTEUgZnBfZmtfY3Jvc3MgKGEgaW50OCBSRUZFUkVO Q0VTIGZwX3BrX2Nyb3NzKTsKK0lOU0VSVCBJTlRPIGZwX2ZrX2Nyb3NzIFNFTEVDVCBnZW5lcmF0 ZV9zZXJpZXMoMSwgMjAwKTsKK0lOU0VSVCBJTlRPIGZwX2ZrX2Nyb3NzIFZBTFVFUyAoOTk5KTsK K0RST1AgVEFCTEUgZnBfZmtfY3Jvc3MsIGZwX3BrX2Nyb3NzOworCistLSBEdXBsaWNhdGUgRksg dmFsdWVzOiB3aGVuIHVzaW5nIHRoZSBiYXRjaGVkIFNBT1AgcGF0aCwgZXZlcnkKKy0tIHJvdyBt dXN0IGJlIHJlY29nbml6ZWQgYXMgc2F0aXNmaWVkLCBub3QganVzdCB0aGUgZmlyc3QgbWF0Y2gK K0NSRUFURSBUQUJMRSBmcF9wa19kdXAgKGEgaW50IFBSSU1BUlkgS0VZKTsKK0lOU0VSVCBJTlRP IGZwX3BrX2R1cCBWQUxVRVMgKDEpOworQ1JFQVRFIFRBQkxFIGZwX2ZrX2R1cCAoYSBpbnQgUkVG RVJFTkNFUyBmcF9wa19kdXApOworSU5TRVJUIElOVE8gZnBfZmtfZHVwIFNFTEVDVCAxIEZST00g Z2VuZXJhdGVfc2VyaWVzKDEsIDEwMCk7CitEUk9QIFRBQkxFIGZwX2ZrX2R1cCwgZnBfcGtfZHVw OwpkaWZmIC0tZ2l0IGEvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QgYi9zcmMvdG9v bHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdAppbmRleCBjNTFhMGE5MDNhNi4uMGIwNTMwNGEyOTQg MTAwNjQ0Ci0tLSBhL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0CisrKyBiL3NyYy90 b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0CkBAIC0zMCw2ICszMCw4IEBAIEFkZEZvcmVpZ25V cGRhdGVUYXJnZXRzX2Z1bmN0aW9uCiBBZGRySW5mbwogQWZmaXhOb2RlCiBBZmZpeE5vZGVEYXRh CitBZnRlclRyaWdnZXJCYXRjaENhbGxiYWNrCitBZnRlclRyaWdnZXJDYWxsYmFja0l0ZW0KIEFm dGVyVHJpZ2dlckV2ZW50CiBBZnRlclRyaWdnZXJFdmVudENodW5rCiBBZnRlclRyaWdnZXJFdmVu dERhdGEKQEAgLTI0NzgsNiArMjQ4MCw3IEBAIFJJWAogUklfQ29tcGFyZUhhc2hFbnRyeQogUklf Q29tcGFyZUtleQogUklfQ29uc3RyYWludEluZm8KK1JJX0Zhc3RQYXRoRW50cnkKIFJJX1F1ZXJ5 SGFzaEVudHJ5CiBSSV9RdWVyeUtleQogUlRFS2luZAotLSAKMi40Ny4zCgo= --0000000000005bdecd064dce872f Content-Type: application/octet-stream; name="v10-0001-Add-fast-path-for-foreign-key-constraint-checks.patch" Content-Disposition: attachment; filename="v10-0001-Add-fast-path-for-foreign-key-constraint-checks.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mn5bh0ht1 RnJvbSA5MmU4ZmQzMGQ4N2EwOGZhNjc1ZTdkMTVjZjYwYjQwYzExZDlhZmM4IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbWl0IExhbmdvdGUgPGFtaXRsYW5AcG9zdGdyZXNxbC5vcmc+ CkRhdGU6IFR1ZSwgMjQgTWFyIDIwMjYgMTg6Mjg6MDAgKzA5MDAKU3ViamVjdDogW1BBVENIIHYx MCAxLzJdIEFkZCBmYXN0IHBhdGggZm9yIGZvcmVpZ24ga2V5IGNvbnN0cmFpbnQgY2hlY2tzCgpB ZGQgYSBmYXN0LXBhdGggb3B0aW1pemF0aW9uIGZvciBmb3JlaWduIGtleSBjaGVja3MgdGhhdCBi eXBhc3NlcyBTUEkKYnkgZGlyZWN0bHkgcHJvYmluZyB0aGUgdW5pcXVlIGluZGV4IG9uIHRoZSBy ZWZlcmVuY2VkIHRhYmxlLgoKVGhlIGZhc3QgcGF0aCBhcHBsaWVzIHdoZW4gdGhlIHJlZmVyZW5j ZWQgdGFibGUgaXMgbm90IHBhcnRpdGlvbmVkIGFuZAp0aGUgY29uc3RyYWludCBkb2VzIG5vdCBp bnZvbHZlIHRlbXBvcmFsIHNlbWFudGljcy4gIE90aGVyd2lzZSwgdGhlCmV4aXN0aW5nIFNQSSBw YXRoIGlzIHVzZWQuCgpyaV9GYXN0UGF0aENoZWNrKCkgZXh0cmFjdHMgdGhlIEZLIHZhbHVlcywg YnVpbGRzIHNjYW4ga2V5cywgcGVyZm9ybXMKYW4gaW5kZXggc2NhbiwgYW5kIGxvY2tzIHRoZSBt YXRjaGluZyB0dXBsZSB3aXRoIExvY2tUdXBsZUtleVNoYXJlCnZpYSByaV9Mb2NrUEtUdXBsZSgp LCB3aGljaCBoYW5kbGVzIHRoZSBSSS1zcGVjaWZpYyBzdWJzZXQgb2YKdGFibGVfdHVwbGVfbG9j aygpIHJlc3VsdHMuCgpJZiB0aGUgbG9ja2VkIHR1cGxlIHdhcyByZWFjaGVkIGJ5IGNoYXNpbmcg YW4gdXBkYXRlIGNoYWluCih0bWZkLnRyYXZlcnNlZCksIHJlY2hlY2tfbWF0Y2hlZF9wa190dXBs ZSgpIHZlcmlmaWVzIHRoYXQgdGhlIGtleQppcyBzdGlsbCB0aGUgc2FtZSwgZW11bGF0aW5nIEV2 YWxQbGFuUXVhbC4KClRoZSBzY2FuIHVzZXMgR2V0VHJhbnNhY3Rpb25TbmFwc2hvdCgpLCBtYXRj aGluZyB3aGF0IHRoZSBTUEkgcGF0aAp1c2VzICh2aWEgX1NQSV9leGVjdXRlX3BsYW4gcHVzaGlu ZyBHZXRUcmFuc2FjdGlvblNuYXBzaG90KCkgYXMgdGhlCmFjdGl2ZSBzbmFwc2hvdCkuICBVbmRl ciBSRUFEIENPTU1JVFRFRCB0aGlzIGlzIGEgZnJlc2ggc25hcHNob3Q7CnVuZGVyIFJFUEVBVEFC TEUgUkVBRCAvIFNFUklBTElaQUJMRSBpdCBpcyB0aGUgZnJvemVuIHRyYW5zYWN0aW9uLQpzdGFy dCBzbmFwc2hvdCwgc28gUEsgcm93cyBjb21taXR0ZWQgYWZ0ZXIgdGhlIHRyYW5zYWN0aW9uIHN0 YXJ0ZWQKYXJlIG5vdCB2aXNpYmxlLgoKVGhlIHJpX0NoZWNrUGVybWlzc2lvbnMoKSBmdW5jdGlv biBwZXJmb3JtcyBzY2hlbWEgVVNBR0UgYW5kIHRhYmxlClNFTEVDVCBjaGVja3MsIG1hdGNoaW5n IHdoYXQgdGhlIFNQSSBwYXRoIGdldHMgaW1wbGljaXRseSB0aHJvdWdoCnRoZSBleGVjdXRvcidz IHBlcm1pc3Npb24gY2hlY2tzLiAgVGhlIGZhc3QgcGF0aCBhbHNvIHN3aXRjaGVzIHRvCnRoZSBQ SyB0YWJsZSBvd25lcidzIHNlY3VyaXR5IGNvbnRleHQgKHdpdGggU0VDVVJJVFlfTk9GT1JDRV9S TFMpCmJlZm9yZSB0aGUgaW5kZXggcHJvYmUsIG1hdGNoaW5nIHRoZSBTUEkgcGF0aCB3aGVyZSB0 aGUgcXVlcnkgcnVucwphcyB0aGUgdGFibGUgb3duZXIuCgpyaV9IYXNoQ29tcGFyZU9wKCkgaXMg YWRqdXN0ZWQgdG8gaGFuZGxlIGNyb3NzLXR5cGUgZXF1YWxpdHkgb3BlcmF0b3JzCihlLmcuIGlu dDQ4ZXEgZm9yIGludDQgUEsgLyBpbnQ4IEZLKSB3aGljaCBjYW4gYXBwZWFyIGluIGNvbnBmZXFv cC4KVGhlIGV4aXN0aW5nIGNvZGUgYXNzZXJ0ZWQgc2FtZS10eXBlIG9wZXJhdG9ycyBvbmx5LCB3 aGljaCB3YXMgY29ycmVjdApmb3IgaXRzIGV4aXN0aW5nIGNhbGxlcnMgKHJpX0tleXNFcXVhbCBj b21wYXJlcyBzYW1lLXR5cGUgRksgY29sdW1uCnZhbHVlcyB2aWEgZmZfZXFfb3BycyksIGJ1dCB0 aGUgZmFzdCBwYXRoIGlzIHRoZSBmaXJzdCBjYWxsZXIgdG8gcGFzcwpwZl9lcV9vcHJzLCB3aGlj aCBjYW4gYmUgY3Jvc3MtdHlwZS4KClBlci1rZXkgbWV0YWRhdGEgKGNvbXBhcmUgZW50cmllcywg b3BlcmF0b3IgcHJvY2VkdXJlcywgc3RyYXRlZ3kKbnVtYmVycykgaXMgY2FjaGVkIGluIFJJX0Nv bnN0cmFpbnRJbmZvIHZpYQpyaV9wb3B1bGF0ZV9mYXN0cGF0aF9tZXRhZGF0YSgpIG9uIGZpcnN0 IHVzZSwgZWxpbWluYXRpbmcgcmVwZWF0ZWQKY2FsbHMgdG8gcmlfSGFzaENvbXBhcmVPcCgpIGFu ZCBnZXRfb3Bfb3BmYW1pbHlfcHJvcGVydGllcygpLgpjb25pbmRpZCBhbmQgcGtfaXNfcGFydGl0 aW9uZWQgYXJlIGFsc28gY2FjaGVkIGF0IGNvbnN0cmFpbnQgbG9hZAp0aW1lLCBhdm9pZGluZyBw ZXItaW52b2NhdGlvbiBzeXNjYWNoZSBsb29rdXBzIGFuZCB0aGUgbmVlZCB0byBvcGVuCnBrX3Jl bCBiZWZvcmUgZGVjaWRpbmcgd2hldGhlciB0aGUgZmFzdCBwYXRoIGFwcGxpZXMuCgpOZXcgcmVn cmVzc2lvbiB0ZXN0cyBjb3ZlciBSTFMgYnlwYXNzIGFuZCBBQ0wgZW5mb3JjZW1lbnQgZm9yIHRo ZQpmYXN0LXBhdGggcGVybWlzc2lvbiBjaGVja3MuICBOZXcgaXNvbGF0aW9uIHRlc3RzIGV4ZXJj aXNlIGNvbmN1cnJlbnQKUEsgdXBkYXRlcyB1bmRlciBib3RoIFJFQUQgQ09NTUlUVEVEIGFuZCBS RVBFQVRBQkxFIFJFQUQuCgpCZW5jaG1hcmtpbmcgc2hvd3MgfjEuOHggc3BlZWR1cCBmb3IgYnVs ayBGSyBpbnNlcnRzIChpbnQgUEsvaW50IEZLLAoxTSByb3dzLCB3aGVyZSBQSyB0YWJsZSBhbmQg aW5kZXggaXMgY2FjaGVkKS4KCkF1dGhvcjogSnVud2FuZyBaaGFvIDx6aGp3cGt1QGdtYWlsLmNv bT4KQ28tYXV0aG9yZWQtYnk6IEFtaXQgTGFuZ290ZSA8YW1pdGxhbmdvdGUwOUBnbWFpbC5jb20+ ClJldmlld2VkLWJ5OiBIYWlibyBZYW4gPHRyaXN0YW4ueWltQGdtYWlsLmNvbT4KVGVzdGVkLWJ5 OiBUb21hcyBWb25kcmEgPHRvbWFzQHZvbmRyYS5tZT4KRGlzY3Vzc2lvbjogaHR0cHM6Ly9wb3N0 Z3IuZXMvbS9DQStIaXdxRjRDMHdzM2NPK3o1Y0xrUHV2d25Bd2tTcDdzZnZnR2ozeVE9TGk2S05N cUFAbWFpbC5nbWFpbC5jb20KLS0tCiBzcmMvYmFja2VuZC91dGlscy9hZHQvcmlfdHJpZ2dlcnMu YyAgICAgICAgICAgfCA0NjkgKysrKysrKysrKysrKysrKystCiAuLi4vZXhwZWN0ZWQvZmstY29u Y3VycmVudC1way11cGQub3V0ICAgICAgICAgfCAxMDUgKysrKwogc3JjL3Rlc3QvaXNvbGF0aW9u L2lzb2xhdGlvbl9zY2hlZHVsZSAgICAgICAgIHwgICAxICsKIC4uLi9pc29sYXRpb24vc3BlY3Mv ZmstY29uY3VycmVudC1way11cGQuc3BlYyB8ICA1MyArKwogc3JjL3Rlc3QvcmVncmVzcy9leHBl Y3RlZC9mb3JlaWduX2tleS5vdXQgICAgIHwgIDQ3ICsrCiBzcmMvdGVzdC9yZWdyZXNzL3NxbC9m b3JlaWduX2tleS5zcWwgICAgICAgICAgfCAgNjQgKysrCiBzcmMvdG9vbHMvcGdpbmRlbnQvdHlw ZWRlZnMubGlzdCAgICAgICAgICAgICAgfCAgIDEgKwogNyBmaWxlcyBjaGFuZ2VkLCA3MjYgaW5z ZXJ0aW9ucygrKSwgMTQgZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL3Rlc3Qv aXNvbGF0aW9uL2V4cGVjdGVkL2ZrLWNvbmN1cnJlbnQtcGstdXBkLm91dAogY3JlYXRlIG1vZGUg MTAwNjQ0IHNyYy90ZXN0L2lzb2xhdGlvbi9zcGVjcy9may1jb25jdXJyZW50LXBrLXVwZC5zcGVj CgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3JpX3RyaWdnZXJzLmMgYi9zcmMv YmFja2VuZC91dGlscy9hZHQvcmlfdHJpZ2dlcnMuYwppbmRleCBkMjJiOGVmN2YzYy4uNmQ4ZGU2 NDQ3MWYgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9yaV90cmlnZ2Vycy5jCisr KyBiL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9yaV90cmlnZ2Vycy5jCkBAIC0yNCwxMiArMjQsMTUg QEAKICNpbmNsdWRlICJwb3N0Z3Jlcy5oIgogCiAjaW5jbHVkZSAiYWNjZXNzL2h0dXBfZGV0YWls cy5oIgorI2luY2x1ZGUgImFjY2Vzcy9za2V5LmgiCiAjaW5jbHVkZSAiYWNjZXNzL3N5c2F0dHIu aCIKICNpbmNsdWRlICJhY2Nlc3MvdGFibGUuaCIKICNpbmNsdWRlICJhY2Nlc3MvdGFibGVhbS5o IgogI2luY2x1ZGUgImFjY2Vzcy94YWN0LmgiCisjaW5jbHVkZSAiY2F0YWxvZy9pbmRleC5oIgog I2luY2x1ZGUgImNhdGFsb2cvcGdfY29sbGF0aW9uLmgiCiAjaW5jbHVkZSAiY2F0YWxvZy9wZ19j b25zdHJhaW50LmgiCisjaW5jbHVkZSAiY2F0YWxvZy9wZ19uYW1lc3BhY2UuaCIKICNpbmNsdWRl ICJjb21tYW5kcy90cmlnZ2VyLmgiCiAjaW5jbHVkZSAiZXhlY3V0b3IvZXhlY3V0b3IuaCIKICNp bmNsdWRlICJleGVjdXRvci9zcGkuaCIKQEAgLTkxLDYgKzk0LDcgQEAKICNkZWZpbmUgUklfVFJJ R1RZUEVfVVBEQVRFIDIKICNkZWZpbmUgUklfVFJJR1RZUEVfREVMRVRFIDMKIAordHlwZWRlZiBz dHJ1Y3QgRmFzdFBhdGhNZXRhIEZhc3RQYXRoTWV0YTsKIAogLyoKICAqIFJJX0NvbnN0cmFpbnRJ bmZvCkBAIC0xMzIsOCArMTM2LDI0IEBAIHR5cGVkZWYgc3RydWN0IFJJX0NvbnN0cmFpbnRJbmZv CiAJT2lkCQkJcGVyaW9kX2ludGVyc2VjdF9vcGVyOwkvKiBhbnlyYW5nZSAqIGFueXJhbmdlIChv cgogCQkJCQkJCQkJCSAqIG11bHRpcmFuZ2VzKSAqLwogCWRsaXN0X25vZGUJdmFsaWRfbGluazsJ CS8qIExpbmsgaW4gbGlzdCBvZiB2YWxpZCBlbnRyaWVzICovCisKKwlPaWQJCQljb25pbmRpZDsK Kwlib29sCQlwa19pc19wYXJ0aXRpb25lZDsKKworCUZhc3RQYXRoTWV0YSAqZnBtZXRhOwogfSBS SV9Db25zdHJhaW50SW5mbzsKIAordHlwZWRlZiBzdHJ1Y3QgUklfQ29tcGFyZUhhc2hFbnRyeSBS SV9Db21wYXJlSGFzaEVudHJ5OworCisvKiBGYXN0LXBhdGggbWV0YWRhdGEgZm9yIFJJIGNoZWNr cyBvbiBmb3JlaWduIGtleSByZWZlcmVuY2luZyB0YWJsZXMgKi8KK3R5cGVkZWYgc3RydWN0IEZh c3RQYXRoTWV0YQoreworCVJJX0NvbXBhcmVIYXNoRW50cnkgKmNvbXBhcmVfZW50cmllc1tSSV9N QVhfTlVNS0VZU107CisJUmVnUHJvY2VkdXJlIHJlZ29wc1tSSV9NQVhfTlVNS0VZU107CisJT2lk CQkJc3VidHlwZXNbUklfTUFYX05VTUtFWVNdOworCWludAkJCXN0cmF0c1tSSV9NQVhfTlVNS0VZ U107Cit9IEZhc3RQYXRoTWV0YTsKKwogLyoKICAqIFJJX1F1ZXJ5S2V5CiAgKgpAQCAtMjMzLDYg KzI1MywyMyBAQCBzdGF0aWMgYm9vbCByaV9QZXJmb3JtQ2hlY2soY29uc3QgUklfQ29uc3RyYWlu dEluZm8gKnJpaW5mbywKIAkJCQkJCQlUdXBsZVRhYmxlU2xvdCAqb2xkc2xvdCwgVHVwbGVUYWJs ZVNsb3QgKm5ld3Nsb3QsCiAJCQkJCQkJYm9vbCBpc19yZXN0cmljdCwKIAkJCQkJCQlib29sIGRl dGVjdE5ld1Jvd3MsIGludCBleHBlY3RfT0spOworc3RhdGljIHZvaWQgcmlfRmFzdFBhdGhDaGVj ayhjb25zdCBSSV9Db25zdHJhaW50SW5mbyAqcmlpbmZvLAorCQkJCQkJCSBSZWxhdGlvbiBma19y ZWwsIFR1cGxlVGFibGVTbG90ICpuZXdzbG90KTsKK3N0YXRpYyBib29sIHJpX0Zhc3RQYXRoUHJv YmVPbmUoUmVsYXRpb24gcGtfcmVsLCBSZWxhdGlvbiBpZHhfcmVsLAorCQkJCQkJCQlJbmRleFNj YW5EZXNjIHNjYW5kZXNjLCBUdXBsZVRhYmxlU2xvdCAqc2xvdCwKKwkJCQkJCQkJU25hcHNob3Qg c25hcHNob3QsIGNvbnN0IFJJX0NvbnN0cmFpbnRJbmZvICpyaWluZm8sCisJCQkJCQkJCVNjYW5L ZXlEYXRhICpza2V5LCBpbnQgbmtleXMpOworc3RhdGljIGJvb2wgcmlfTG9ja1BLVHVwbGUoUmVs YXRpb24gcGtfcmVsLCBUdXBsZVRhYmxlU2xvdCAqc2xvdCwgU25hcHNob3Qgc25hcCwKKwkJCQkJ CSAgIGJvb2wgKmNvbmN1cnJlbnRseV91cGRhdGVkKTsKK3N0YXRpYyBib29sIHJpX2Zhc3RwYXRo X2lzX2FwcGxpY2FibGUoY29uc3QgUklfQ29uc3RyYWludEluZm8gKnJpaW5mbyk7CitzdGF0aWMg dm9pZCByaV9DaGVja1Blcm1pc3Npb25zKFJlbGF0aW9uIHF1ZXJ5X3JlbCk7CitzdGF0aWMgYm9v bCByZWNoZWNrX21hdGNoZWRfcGtfdHVwbGUoUmVsYXRpb24gaWR4cmVsLCBTY2FuS2V5RGF0YSAq c2tleXMsCisJCQkJCQkJCQkgVHVwbGVUYWJsZVNsb3QgKm5ld19zbG90KTsKK3N0YXRpYyB2b2lk IGJ1aWxkX2luZGV4X3NjYW5rZXlzKGNvbnN0IFJJX0NvbnN0cmFpbnRJbmZvICpyaWluZm8sCisJ CQkJCQkJCSBSZWxhdGlvbiBpZHhfcmVsLCBEYXR1bSAqcGtfdmFscywKKwkJCQkJCQkJIGNoYXIg KnBrX251bGxzLCBTY2FuS2V5IHNrZXlzKTsKK3N0YXRpYyB2b2lkIHJpX3BvcHVsYXRlX2Zhc3Rw YXRoX21ldGFkYXRhKFJJX0NvbnN0cmFpbnRJbmZvICpyaWluZm8sCisJCQkJCQkJCQkJICBSZWxh dGlvbiBma19yZWwsIFJlbGF0aW9uIGlkeF9yZWwpOwogc3RhdGljIHZvaWQgcmlfRXh0cmFjdFZh bHVlcyhSZWxhdGlvbiByZWwsIFR1cGxlVGFibGVTbG90ICpzbG90LAogCQkJCQkJCSBjb25zdCBS SV9Db25zdHJhaW50SW5mbyAqcmlpbmZvLCBib29sIHJlbF9pc19waywKIAkJCQkJCQkgRGF0dW0g KnZhbHMsIGNoYXIgKm51bGxzKTsKQEAgLTI3NiwxNCArMzEzLDcgQEAgUklfRktleV9jaGVjayhU cmlnZ2VyRGF0YSAqdHJpZ2RhdGEpCiAJaWYgKCF0YWJsZV90dXBsZV9zYXRpc2ZpZXNfc25hcHNo b3QodHJpZ2RhdGEtPnRnX3JlbGF0aW9uLCBuZXdzbG90LCBTbmFwc2hvdFNlbGYpKQogCQlyZXR1 cm4gUG9pbnRlckdldERhdHVtKE5VTEwpOwogCi0JLyoKLQkgKiBHZXQgdGhlIHJlbGF0aW9uIGRl c2NyaXB0b3JzIG9mIHRoZSBGSyBhbmQgUEsgdGFibGVzLgotCSAqCi0JICogcGtfcmVsIGlzIG9w ZW5lZCBpbiBSb3dTaGFyZUxvY2sgbW9kZSBzaW5jZSB0aGF0J3Mgd2hhdCBvdXIgZXZlbnR1YWwK LQkgKiBTRUxFQ1QgRk9SIEtFWSBTSEFSRSB3aWxsIGdldCBvbiBpdC4KLQkgKi8KIAlma19yZWwg PSB0cmlnZGF0YS0+dGdfcmVsYXRpb247Ci0JcGtfcmVsID0gdGFibGVfb3BlbihyaWluZm8tPnBr X3JlbGlkLCBSb3dTaGFyZUxvY2spOwogCiAJc3dpdGNoIChyaV9OdWxsQ2hlY2soUmVsYXRpb25H ZXREZXNjcihma19yZWwpLCBuZXdzbG90LCByaWluZm8sIGZhbHNlKSkKIAl7CkBAIC0yOTMsNyAr MzIzLDYgQEAgUklfRktleV9jaGVjayhUcmlnZ2VyRGF0YSAqdHJpZ2RhdGEpCiAJCQkgKiBObyBm dXJ0aGVyIGNoZWNrIG5lZWRlZCAtIGFuIGFsbC1OVUxMIGtleSBwYXNzZXMgZXZlcnkgdHlwZSBv ZgogCQkJICogZm9yZWlnbiBrZXkgY29uc3RyYWludC4KIAkJCSAqLwotCQkJdGFibGVfY2xvc2Uo cGtfcmVsLCBSb3dTaGFyZUxvY2spOwogCQkJcmV0dXJuIFBvaW50ZXJHZXREYXR1bShOVUxMKTsK IAogCQljYXNlIFJJX0tFWVNfU09NRV9OVUxMOgpAQCAtMzE4LDcgKzM0Nyw2IEBAIFJJX0ZLZXlf Y2hlY2soVHJpZ2dlckRhdGEgKnRyaWdkYXRhKQogCQkJCQkJCSBlcnJkZXRhaWwoIk1BVENIIEZV TEwgZG9lcyBub3QgYWxsb3cgbWl4aW5nIG9mIG51bGwgYW5kIG5vbm51bGwga2V5IHZhbHVlcy4i KSwKIAkJCQkJCQkgZXJydGFibGVjb25zdHJhaW50KGZrX3JlbCwKIAkJCQkJCQkJCQkJCU5hbWVT dHIocmlpbmZvLT5jb25uYW1lKSkpKTsKLQkJCQkJdGFibGVfY2xvc2UocGtfcmVsLCBSb3dTaGFy ZUxvY2spOwogCQkJCQlyZXR1cm4gUG9pbnRlckdldERhdHVtKE5VTEwpOwogCiAJCQkJY2FzZSBG S0NPTlNUUl9NQVRDSF9TSU1QTEU6CkBAIC0zMjcsNyArMzU1LDYgQEAgUklfRktleV9jaGVjayhU cmlnZ2VyRGF0YSAqdHJpZ2RhdGEpCiAJCQkJCSAqIE1BVENIIFNJTVBMRSAtIGlmIEFOWSBjb2x1 bW4gaXMgbnVsbCwgdGhlIGtleSBwYXNzZXMKIAkJCQkJICogdGhlIGNvbnN0cmFpbnQuCiAJCQkJ CSAqLwotCQkJCQl0YWJsZV9jbG9zZShwa19yZWwsIFJvd1NoYXJlTG9jayk7CiAJCQkJCXJldHVy biBQb2ludGVyR2V0RGF0dW0oTlVMTCk7CiAKICNpZmRlZiBOT1RfVVNFRApAQCAtMzUyLDggKzM3 OSwzMSBAQCBSSV9GS2V5X2NoZWNrKFRyaWdnZXJEYXRhICp0cmlnZGF0YSkKIAkJCWJyZWFrOwog CX0KIAorCS8qCisJICogRmFzdCBwYXRoOiBwcm9iZSB0aGUgUEsgdW5pcXVlIGluZGV4IGRpcmVj dGx5LCBieXBhc3NpbmcgU1BJLgorCSAqCisJICogRm9yIG5vbi1wYXJ0aXRpb25lZCwgbm9uLXRl bXBvcmFsIEZLcywgd2UgY2FuIHNraXAgdGhlIFNQSSBtYWNoaW5lcnkKKwkgKiAocGxhbiBjYWNo ZSwgZXhlY3V0b3Igc2V0dXAsIGV0Yy4pIGFuZCBkbyBhIGRpcmVjdCBpbmRleCBzY2FuICsgdHVw bGUKKwkgKiBsb2NrLiAgVGhpcyBpcyBzZW1hbnRpY2FsbHkgZXF1aXZhbGVudCB0byB0aGUgU1BJ IHBhdGggYmVsb3cgYnV0IGF2b2lkcworCSAqIHRoZSBwZXItcm93IGV4ZWN1dG9yIG92ZXJoZWFk LgorCSAqCisJICogcmlfRmFzdFBhdGhDaGVjaygpIHJlcG9ydHMgdGhlIHZpb2xhdGlvbiBpdHNl bGYgKHZpYSBlcmVwb3J0KSBpZiBubworCSAqIG1hdGNoaW5nIFBLIHJvdyBpcyBmb3VuZCwgc28g aXQgb25seSByZXR1cm5zIG9uIHN1Y2Nlc3MuCisJICovCisJaWYgKHJpX2Zhc3RwYXRoX2lzX2Fw cGxpY2FibGUocmlpbmZvKSkKKwl7CisJCXJpX0Zhc3RQYXRoQ2hlY2socmlpbmZvLCBma19yZWws IG5ld3Nsb3QpOworCQlyZXR1cm4gUG9pbnRlckdldERhdHVtKE5VTEwpOworCX0KKwogCVNQSV9j b25uZWN0KCk7CiAKKwkvKgorCSAqIHBrX3JlbCBpcyBvcGVuZWQgaW4gUm93U2hhcmVMb2NrIG1v ZGUgc2luY2UgdGhhdCdzIHdoYXQgb3VyIGV2ZW50dWFsCisJICogU0VMRUNUIEZPUiBLRVkgU0hB UkUgd2lsbCBnZXQgb24gaXQuCisJICovCisJcGtfcmVsID0gdGFibGVfb3BlbihyaWluZm8tPnBr X3JlbGlkLCBSb3dTaGFyZUxvY2spOworCiAJLyogRmV0Y2ggb3IgcHJlcGFyZSBhIHNhdmVkIHBs YW4gZm9yIHRoZSByZWFsIGNoZWNrICovCiAJcmlfQnVpbGRRdWVyeUtleSgmcWtleSwgcmlpbmZv LCBSSV9QTEFOX0NIRUNLX0xPT0tVUFBLKTsKIApAQCAtMjM1Niw2ICsyNDA2LDEyIEBAIHJpX0xv YWRDb25zdHJhaW50SW5mbyhPaWQgY29uc3RyYWludE9pZCkKIAogCXJpaW5mby0+dmFsaWQgPSB0 cnVlOwogCisJcmlpbmZvLT5jb25pbmRpZCA9IGNvbkZvcm0tPmNvbmluZGlkOworCXJpaW5mby0+ cGtfaXNfcGFydGl0aW9uZWQgPQorCQkoZ2V0X3JlbF9yZWxraW5kKHJpaW5mby0+cGtfcmVsaWQp ID09IFJFTEtJTkRfUEFSVElUSU9ORURfVEFCTEUpOworCisJcmlpbmZvLT5mcG1ldGEgPSBOVUxM OworCiAJcmV0dXJuIHJpaW5mbzsKIH0KIApAQCAtMjYxNyw2ICsyNjczLDM4MiBAQCByaV9QZXJm b3JtQ2hlY2soY29uc3QgUklfQ29uc3RyYWludEluZm8gKnJpaW5mbywKIAlyZXR1cm4gU1BJX3By b2Nlc3NlZCAhPSAwOwogfQogCisvKgorICogcmlfRmFzdFBhdGhDaGVjaworICoJCVBlcmZvcm0g RksgZXhpc3RlbmNlIGNoZWNrIHZpYSBkaXJlY3QgaW5kZXggcHJvYmUsIGJ5cGFzc2luZyBTUEku CisgKgorICogSWYgbm8gbWF0Y2hpbmcgUEsgcm93IGV4aXN0cywgcmVwb3J0IHRoZSB2aW9sYXRp b24gdmlhIHJpX1JlcG9ydFZpb2xhdGlvbigpLAorICogb3RoZXJ3aXNlLCB0aGUgZnVuY3Rpb24g cmV0dXJucyBub3JtYWxseS4KKyAqLworc3RhdGljIHZvaWQKK3JpX0Zhc3RQYXRoQ2hlY2soY29u c3QgUklfQ29uc3RyYWludEluZm8gKnJpaW5mbywKKwkJCQkgUmVsYXRpb24gZmtfcmVsLCBUdXBs ZVRhYmxlU2xvdCAqbmV3c2xvdCkKK3sKKwlSZWxhdGlvbglwa19yZWw7CisJUmVsYXRpb24JaWR4 X3JlbDsKKwlJbmRleFNjYW5EZXNjIHNjYW5kZXNjOworCVR1cGxlVGFibGVTbG90ICpzbG90Owor CURhdHVtCQlwa192YWxzW0lOREVYX01BWF9LRVlTXTsKKwljaGFyCQlwa19udWxsc1tJTkRFWF9N QVhfS0VZU107CisJU2NhbktleURhdGEgc2tleVtJTkRFWF9NQVhfS0VZU107CisJYm9vbAkJZm91 bmQgPSBmYWxzZTsKKwlPaWQJCQlzYXZlZF91c2VyaWQ7CisJaW50CQkJc2F2ZWRfc2VjX2NvbnRl eHQ7CisJU25hcHNob3QJc25hcHNob3Q7CisKKwkvKgorCSAqIEFkdmFuY2UgdGhlIGNvbW1hbmQg Y291bnRlciBzbyB0aGUgc25hcHNob3Qgc2VlcyB0aGUgZWZmZWN0cyBvZiBwcmlvcgorCSAqIHRy aWdnZXJzIGluIHRoaXMgc3RhdGVtZW50LiAgTWlycm9ycyB3aGF0IHRoZSBTUEkgcGF0aCBkb2Vz IGluCisJICogcmlfUGVyZm9ybUNoZWNrKCkuCisJICovCisJQ29tbWFuZENvdW50ZXJJbmNyZW1l bnQoKTsKKwlzbmFwc2hvdCA9IFJlZ2lzdGVyU25hcHNob3QoR2V0VHJhbnNhY3Rpb25TbmFwc2hv dCgpKTsKKworCXBrX3JlbCA9IHRhYmxlX29wZW4ocmlpbmZvLT5wa19yZWxpZCwgUm93U2hhcmVM b2NrKTsKKwlpZHhfcmVsID0gaW5kZXhfb3BlbihyaWluZm8tPmNvbmluZGlkLCBBY2Nlc3NTaGFy ZUxvY2spOworCisJc2xvdCA9IHRhYmxlX3Nsb3RfY3JlYXRlKHBrX3JlbCwgTlVMTCk7CisJc2Nh bmRlc2MgPSBpbmRleF9iZWdpbnNjYW4ocGtfcmVsLCBpZHhfcmVsLAorCQkJCQkJCSAgIHNuYXBz aG90LCBOVUxMLAorCQkJCQkJCSAgIHJpaW5mby0+bmtleXMsIDApOworCisJaWYgKHJpaW5mby0+ ZnBtZXRhID09IE5VTEwpCisJCXJpX3BvcHVsYXRlX2Zhc3RwYXRoX21ldGFkYXRhKChSSV9Db25z dHJhaW50SW5mbyAqKSByaWluZm8sCisJCQkJCQkJCQkgIGZrX3JlbCwgaWR4X3JlbCk7CisJQXNz ZXJ0KHJpaW5mby0+ZnBtZXRhKTsKKworCUdldFVzZXJJZEFuZFNlY0NvbnRleHQoJnNhdmVkX3Vz ZXJpZCwgJnNhdmVkX3NlY19jb250ZXh0KTsKKwlTZXRVc2VySWRBbmRTZWNDb250ZXh0KFJlbGF0 aW9uR2V0Rm9ybShwa19yZWwpLT5yZWxvd25lciwKKwkJCQkJCSAgIHNhdmVkX3NlY19jb250ZXh0 IHwKKwkJCQkJCSAgIFNFQ1VSSVRZX0xPQ0FMX1VTRVJJRF9DSEFOR0UgfAorCQkJCQkJICAgU0VD VVJJVFlfTk9GT1JDRV9STFMpOworCXJpX0NoZWNrUGVybWlzc2lvbnMocGtfcmVsKTsKKworCXJp X0V4dHJhY3RWYWx1ZXMoZmtfcmVsLCBuZXdzbG90LCByaWluZm8sIGZhbHNlLCBwa192YWxzLCBw a19udWxscyk7CisJYnVpbGRfaW5kZXhfc2NhbmtleXMocmlpbmZvLCBpZHhfcmVsLCBwa192YWxz LCBwa19udWxscywgc2tleSk7CisJZm91bmQgPSByaV9GYXN0UGF0aFByb2JlT25lKHBrX3JlbCwg aWR4X3JlbCwgc2NhbmRlc2MsIHNsb3QsCisJCQkJCQkJCXNuYXBzaG90LCByaWluZm8sIHNrZXks IHJpaW5mby0+bmtleXMpOworCVNldFVzZXJJZEFuZFNlY0NvbnRleHQoc2F2ZWRfdXNlcmlkLCBz YXZlZF9zZWNfY29udGV4dCk7CisJaW5kZXhfZW5kc2NhbihzY2FuZGVzYyk7CisJRXhlY0Ryb3BT aW5nbGVUdXBsZVRhYmxlU2xvdChzbG90KTsKKwlVbnJlZ2lzdGVyU25hcHNob3Qoc25hcHNob3Qp OworCisJaWYgKCFmb3VuZCkKKwkJcmlfUmVwb3J0VmlvbGF0aW9uKHJpaW5mbywgcGtfcmVsLCBm a19yZWwsCisJCQkJCQkgICBuZXdzbG90LCBOVUxMLAorCQkJCQkJICAgUklfUExBTl9DSEVDS19M T09LVVBQSywgZmFsc2UsIGZhbHNlKTsKKworCWluZGV4X2Nsb3NlKGlkeF9yZWwsIE5vTG9jayk7 CisJdGFibGVfY2xvc2UocGtfcmVsLCBOb0xvY2spOworfQorCisvKgorICogcmlfRmFzdFBhdGhQ cm9iZU9uZQorICoJCVByb2JlIHRoZSBQSyBpbmRleCBmb3Igb25lIHNldCBvZiBzY2FuIGtleXMs IGxvY2sgdGhlIG1hdGNoaW5nCisgKgkJdHVwbGUKKyAqCisgKiBSZXR1cm5zIHRydWUgaWYgYSBt YXRjaGluZyBQSyByb3cgd2FzIGZvdW5kLCBsb2NrZWQsIGFuZCAoaWYKKyAqIGFwcGxpY2FibGUp IHZpc2libGUgdG8gdGhlIHRyYW5zYWN0aW9uIHNuYXBzaG90LgorICoKKyAqIFRoZSBjYWxsZXIg bXVzdCBlbnN1cmUgQ3VycmVudE1lbW9yeUNvbnRleHQgaXMgbG9uZy1saXZlZCBlbm91Z2gKKyAq IGZvciB0aGUgc2NhbiBkZXNjcmlwdG9yJ3MgaW50ZXJuYWwgYWxsb2NhdGlvbnMgKHR5cGljYWxs eQorICogVG9wVHJhbnNhY3Rpb25Db250ZXh0IHdoZW4gdXNpbmcgYSBjYWNoZWQgc2NhbmRlc2Mp LgorICovCitzdGF0aWMgYm9vbAorcmlfRmFzdFBhdGhQcm9iZU9uZShSZWxhdGlvbiBwa19yZWws IFJlbGF0aW9uIGlkeF9yZWwsCisJCQkJCUluZGV4U2NhbkRlc2Mgc2NhbmRlc2MsIFR1cGxlVGFi bGVTbG90ICpzbG90LAorCQkJCQlTbmFwc2hvdCBzbmFwc2hvdCwgY29uc3QgUklfQ29uc3RyYWlu dEluZm8gKnJpaW5mbywKKwkJCQkJU2NhbktleURhdGEgKnNrZXksIGludCBua2V5cykKK3sKKwli b29sCQlmb3VuZCA9IGZhbHNlOworCisJaW5kZXhfcmVzY2FuKHNjYW5kZXNjLCBza2V5LCBua2V5 cywgTlVMTCwgMCk7CisKKwlpZiAoaW5kZXhfZ2V0bmV4dF9zbG90KHNjYW5kZXNjLCBGb3J3YXJk U2NhbkRpcmVjdGlvbiwgc2xvdCkpCisJeworCQlib29sCQljb25jdXJyZW50bHlfdXBkYXRlZDsK KworCQlpZiAocmlfTG9ja1BLVHVwbGUocGtfcmVsLCBzbG90LCBzbmFwc2hvdCwKKwkJCQkJCSAg ICZjb25jdXJyZW50bHlfdXBkYXRlZCkpCisJCXsKKwkJCWlmIChjb25jdXJyZW50bHlfdXBkYXRl ZCkKKwkJCQlmb3VuZCA9IHJlY2hlY2tfbWF0Y2hlZF9wa190dXBsZShpZHhfcmVsLCBza2V5LCBz bG90KTsKKwkJCWVsc2UKKwkJCQlmb3VuZCA9IHRydWU7CisJCX0KKwl9CisKKwlyZXR1cm4gZm91 bmQ7Cit9CisKKy8qCisgKiByaV9Mb2NrUEtUdXBsZQorICoJCUxvY2sgYSBQSyB0dXBsZSBmb3Vu ZCBieSB0aGUgZmFzdC1wYXRoIGluZGV4IHNjYW4uCisgKgorICogQ2FsbHMgdGFibGVfdHVwbGVf bG9jaygpIGRpcmVjdGx5IHdpdGggaGFuZGxpbmcgc3BlY2lmaWMgdG8gUkkgY2hlY2tzLgorICog UmV0dXJucyB0cnVlIGlmIHRoZSB0dXBsZSB3YXMgc3VjY2Vzc2Z1bGx5IGxvY2tlZC4KKyAqCisg KiBTZXRzICpjb25jdXJyZW50bHlfdXBkYXRlZCB0byB0cnVlIGlmIHRoZSBsb2NrZWQgdHVwbGUg d2FzIHJlYWNoZWQKKyAqIGJ5IGZvbGxvd2luZyBhbiB1cGRhdGUgY2hhaW4gKHRtZmQudHJhdmVy c2VkKSwgaW5kaWNhdGluZyB0aGUgY2FsbGVyCisgKiBzaG91bGQgcmVjaGVjayB0aGUga2V5Lgor ICovCitzdGF0aWMgYm9vbAorcmlfTG9ja1BLVHVwbGUoUmVsYXRpb24gcGtfcmVsLCBUdXBsZVRh YmxlU2xvdCAqc2xvdCwgU25hcHNob3Qgc25hcCwKKwkJCSAgIGJvb2wgKmNvbmN1cnJlbnRseV91 cGRhdGVkKQoreworCVRNX0ZhaWx1cmVEYXRhIHRtZmQ7CisJVE1fUmVzdWx0CXJlc3VsdDsKKwlp bnQJCQlsb2NrZmxhZ3MgPSBUVVBMRV9MT0NLX0ZMQUdfTE9DS19VUERBVEVfSU5fUFJPR1JFU1M7 CisKKwkqY29uY3VycmVudGx5X3VwZGF0ZWQgPSBmYWxzZTsKKworCWlmICghSXNvbGF0aW9uVXNl c1hhY3RTbmFwc2hvdCgpKQorCQlsb2NrZmxhZ3MgfD0gVFVQTEVfTE9DS19GTEFHX0ZJTkRfTEFT VF9WRVJTSU9OOworCisJcmVzdWx0ID0gdGFibGVfdHVwbGVfbG9jayhwa19yZWwsICZzbG90LT50 dHNfdGlkLCBzbmFwLAorCQkJCQkJCSAgc2xvdCwgR2V0Q3VycmVudENvbW1hbmRJZChmYWxzZSks CisJCQkJCQkJICBMb2NrVHVwbGVLZXlTaGFyZSwgTG9ja1dhaXRCbG9jaywKKwkJCQkJCQkgIGxv Y2tmbGFncywgJnRtZmQpOworCisJc3dpdGNoIChyZXN1bHQpCisJeworCQljYXNlIFRNX09rOgor CQkJaWYgKHRtZmQudHJhdmVyc2VkKQorCQkJCSpjb25jdXJyZW50bHlfdXBkYXRlZCA9IHRydWU7 CisJCQlyZXR1cm4gdHJ1ZTsKKworCQljYXNlIFRNX0RlbGV0ZWQ6CisJCQlpZiAoSXNvbGF0aW9u VXNlc1hhY3RTbmFwc2hvdCgpKQorCQkJCWVyZXBvcnQoRVJST1IsCisJCQkJCQkoZXJyY29kZShF UlJDT0RFX1RfUl9TRVJJQUxJWkFUSU9OX0ZBSUxVUkUpLAorCQkJCQkJIGVycm1zZygiY291bGQg bm90IHNlcmlhbGl6ZSBhY2Nlc3MgZHVlIHRvIGNvbmN1cnJlbnQgdXBkYXRlIikpKTsKKwkJCXJl dHVybiBmYWxzZTsKKworCQljYXNlIFRNX1VwZGF0ZWQ6CisJCQlpZiAoSXNvbGF0aW9uVXNlc1hh Y3RTbmFwc2hvdCgpKQorCQkJCWVyZXBvcnQoRVJST1IsCisJCQkJCQkoZXJyY29kZShFUlJDT0RF X1RfUl9TRVJJQUxJWkFUSU9OX0ZBSUxVUkUpLAorCQkJCQkJIGVycm1zZygiY291bGQgbm90IHNl cmlhbGl6ZSBhY2Nlc3MgZHVlIHRvIGNvbmN1cnJlbnQgdXBkYXRlIikpKTsKKworCQkJLyoKKwkJ CSAqIEluIFJFQUQgQ09NTUlUVEVELCBGSU5EX0xBU1RfVkVSU0lPTiBzaG91bGQgaGF2ZSBjaGFz ZWQgdGhlCisJCQkgKiBjaGFpbiBhbmQgcmV0dXJuZWQgVE1fT2suICBHZXR0aW5nIGhlcmUgbWVh bnMgc29tZXRoaW5nCisJCQkgKiB1bmV4cGVjdGVkIC0tIGZhbGwgdGhyb3VnaCB0byBlcnJvci4K KwkJCSAqLworCQkJZWxvZyhFUlJPUiwgInVuZXhwZWN0ZWQgdGFibGVfdHVwbGVfbG9jayBzdGF0 dXM6ICV1IiwgcmVzdWx0KTsKKwkJCWJyZWFrOworCisJCWNhc2UgVE1fU2VsZk1vZGlmaWVkOgor CisJCQkvKgorCQkJICogVGhlIGN1cnJlbnQgY29tbWFuZCBvciBhIGxhdGVyIGNvbW1hbmQgaW4g dGhpcyB0cmFuc2FjdGlvbgorCQkJICogbW9kaWZpZWQgdGhlIFBLIHJvdy4gIFRoaXMgc2hvdWxk bid0IG5vcm1hbGx5IGhhcHBlbiBkdXJpbmcgYW4KKwkJCSAqIEZLIGNoZWNrICh3ZSdyZSBub3Qg bW9kaWZ5aW5nIHBrX3JlbCksIGJ1dCBoYW5kbGUgaXQgc2FmZWx5IGJ5CisJCQkgKiB0cmVhdGlu ZyB0aGUgdHVwbGUgYXMgbm90IGZvdW5kLgorCQkJICovCisJCQlyZXR1cm4gZmFsc2U7CisKKwkJ Y2FzZSBUTV9JbnZpc2libGU6CisJCQllbG9nKEVSUk9SLCAiYXR0ZW1wdGVkIHRvIGxvY2sgaW52 aXNpYmxlIHR1cGxlIik7CisJCQlicmVhazsKKworCQlkZWZhdWx0OgorCQkJZWxvZyhFUlJPUiwg InVucmVjb2duaXplZCB0YWJsZV90dXBsZV9sb2NrIHN0YXR1czogJXUiLCByZXN1bHQpOworCQkJ YnJlYWs7CisJfQorCisJcmV0dXJuIGZhbHNlOwkJCQkvKiBrZWVwIGNvbXBpbGVyIHF1aWV0ICov Cit9CisKK3N0YXRpYyBib29sCityaV9mYXN0cGF0aF9pc19hcHBsaWNhYmxlKGNvbnN0IFJJX0Nv bnN0cmFpbnRJbmZvICpyaWluZm8pCit7CisJLyoKKwkgKiBQYXJ0aXRpb25lZCByZWZlcmVuY2Vk IHRhYmxlcyBhcmUgc2tpcHBlZCBmb3Igc2ltcGxpY2l0eSwgc2luY2UgdGhleQorCSAqIHJlcXVp cmUgcm91dGluZyB0aGUgcHJvYmUgdGhyb3VnaCB0aGUgY29ycmVjdCBwYXJ0aXRpb24gdXNpbmcK KwkgKiBQYXJ0aXRpb25EaXJlY3RvcnkuCisJICovCisJaWYgKHJpaW5mby0+cGtfaXNfcGFydGl0 aW9uZWQpCisJCXJldHVybiBmYWxzZTsKKworCS8qCisJICogVGVtcG9yYWwgZm9yZWlnbiBrZXlz IHVzZSByYW5nZSBvdmVybGFwIGFuZCBjb250YWlubWVudCBzZW1hbnRpY3MgKCYmLAorCSAqIDxA LCByYW5nZV9hZ2coKSkgdGhhdCBpbmhlcmVudGx5IGludm9sdmUgYWdncmVnYXRpb24gYW5kIG11 bHRpcGxlLXJvdworCSAqIHJlYXNvbmluZywgc28gdGhleSBzdGF5IG9uIHRoZSBTUEkgcGF0aC4K KwkgKi8KKwlpZiAocmlpbmZvLT5oYXNwZXJpb2QpCisJCXJldHVybiBmYWxzZTsKKworCXJldHVy biB0cnVlOworfQorCisvKgorICogcmlfQ2hlY2tQZXJtaXNzaW9ucworICogICBDaGVjayB0aGF0 IHRoZSBjdXJyZW50IHVzZXIgaGFzIHBlcm1pc3Npb25zIHRvIGxvb2sgaW50byB0aGUgc2NoZW1h IG9mCisgKiAgIGFuZCBTRUxFQ1QgZnJvbSAncXVlcnlfcmVsJworICovCitzdGF0aWMgdm9pZAor cmlfQ2hlY2tQZXJtaXNzaW9ucyhSZWxhdGlvbiBxdWVyeV9yZWwpCit7CisJQWNsUmVzdWx0CWFj bHJlc3VsdDsKKworCS8qIFVTQUdFIG9uIHNjaGVtYS4gKi8KKwlhY2xyZXN1bHQgPSBvYmplY3Rf YWNsY2hlY2soTmFtZXNwYWNlUmVsYXRpb25JZCwKKwkJCQkJCQkJUmVsYXRpb25HZXROYW1lc3Bh Y2UocXVlcnlfcmVsKSwKKwkJCQkJCQkJR2V0VXNlcklkKCksIEFDTF9VU0FHRSk7CisJaWYgKGFj bHJlc3VsdCAhPSBBQ0xDSEVDS19PSykKKwkJYWNsY2hlY2tfZXJyb3IoYWNscmVzdWx0LCBPQkpF Q1RfU0NIRU1BLAorCQkJCQkgICBnZXRfbmFtZXNwYWNlX25hbWUoUmVsYXRpb25HZXROYW1lc3Bh Y2UocXVlcnlfcmVsKSkpOworCisJLyogU0VMRUNUIG9uIHJlbGF0aW9uLiAqLworCWFjbHJlc3Vs dCA9IHBnX2NsYXNzX2FjbGNoZWNrKFJlbGF0aW9uR2V0UmVsaWQocXVlcnlfcmVsKSwgR2V0VXNl cklkKCksCisJCQkJCQkJCSAgQUNMX1NFTEVDVCk7CisJaWYgKGFjbHJlc3VsdCAhPSBBQ0xDSEVD S19PSykKKwkJYWNsY2hlY2tfZXJyb3IoYWNscmVzdWx0LCBPQkpFQ1RfVEFCTEUsCisJCQkJCSAg IFJlbGF0aW9uR2V0UmVsYXRpb25OYW1lKHF1ZXJ5X3JlbCkpOworfQorCisvKgorICogcmVjaGVj a19tYXRjaGVkX3BrX3R1cGxlCisgKgkJQWZ0ZXIgZm9sbG93aW5nIGFuIHVwZGF0ZSBjaGFpbiAo dG1mZC50cmF2ZXJzZWQpLCB2ZXJpZnkgdGhhdAorICoJCXRoZSBsb2NrZWQgUEsgdHVwbGUgc3Rp bGwgbWF0Y2hlcyB0aGUgb3JpZ2luYWwgc2VhcmNoIGtleXMuCisgKgorICogQSBub24ta2V5IHVw ZGF0ZSAoZS5nLiBjaGFuZ2luZyBhIG5vbi1QSyBjb2x1bW4pIGNyZWF0ZXMgYSBuZXcgdHVwbGUg dmVyc2lvbgorICogdGhhdCB3ZSd2ZSBub3cgbG9ja2VkLCBidXQgdGhlIGtleSBpcyB1bmNoYW5n ZWQgLS0gdGhhdCdzIGZpbmUuICBBIGtleQorICogdXBkYXRlIG1lYW5zIHRoZSB2YWx1ZSB3ZSB3 ZXJlIGxvb2tpbmcgZm9yIGlzIGdvbmUsIHNvIHdlIHNob3VsZCB0cmVhdCBpdCBhcworICogbm90 IGZvdW5kLgorICovCitzdGF0aWMgYm9vbAorcmVjaGVja19tYXRjaGVkX3BrX3R1cGxlKFJlbGF0 aW9uIGlkeHJlbCwgU2NhbktleURhdGEgKnNrZXlzLAorCQkJCQkJIFR1cGxlVGFibGVTbG90ICpu ZXdfc2xvdCkKK3sKKwkvKgorCSAqIFRPRE86IEJ1aWxkSW5kZXhJbmZvIGRvZXMgYSBzeXNjYWNo ZSBsb29rdXAgKyBwYWxsb2Mgb24gZXZlcnkgY2FsbC4KKwkgKiBUaGlzIG9ubHkgZmlyZXMgb24g dGhlIGNvbmN1cnJlbnQtdXBkYXRlIHBhdGggKHRtZmQudHJhdmVyc2VkKSwgd2hpY2gKKwkgKiBz aG91bGQgYmUgcmFyZSwgc28gdGhlIGNvc3QgaXMgYWNjZXB0YWJsZSBmb3Igbm93LiAgSWYgcHJv ZmlsaW5nIHNob3dzCisJICogb3RoZXJ3aXNlLCBjYWNoZSB0aGUgSW5kZXhJbmZvIGluIEZhc3RQ YXRoTWV0YS4KKwkgKi8KKwlJbmRleEluZm8gICppbmRleEluZm8gPSBCdWlsZEluZGV4SW5mbyhp ZHhyZWwpOworCURhdHVtCQl2YWx1ZXNbSU5ERVhfTUFYX0tFWVNdOworCWJvb2wJCWlzbnVsbFtJ TkRFWF9NQVhfS0VZU107CisJYm9vbAkJbWF0Y2hlZCA9IHRydWU7CisKKwkvKiBQSyBpbmRleGVz IG5ldmVyIGhhdmUgdGhlc2UuICovCisJQXNzZXJ0KGluZGV4SW5mby0+aWlfRXhwcmVzc2lvbnMg PT0gTklMICYmCisJCSAgIGluZGV4SW5mby0+aWlfRXhjbHVzaW9uT3BzID09IE5VTEwpOworCisJ LyogRm9ybSB0aGUgaW5kZXggdmFsdWVzIGFuZCBpc251bGwgZmxhZ3MgZ2l2ZW4gdGhlIHRhYmxl IHR1cGxlLiAqLworCUZvcm1JbmRleERhdHVtKGluZGV4SW5mbywgbmV3X3Nsb3QsIE5VTEwsIHZh bHVlcywgaXNudWxsKTsKKwlmb3IgKGludCBpID0gMDsgaSA8IGluZGV4SW5mby0+aWlfTnVtSW5k ZXhLZXlBdHRyczsgaSsrKQorCXsKKwkJU2NhbktleURhdGEgKnNrZXkgPSAmc2tleXNbaV07CisK KwkJLyogQSBQSyBjb2x1bW4gY2FuIG5ldmVyIGJlIHNldCB0byBOVUxMLiAqLworCQlBc3NlcnQo IWlzbnVsbFtpXSk7CisJCWlmICghRGF0dW1HZXRCb29sKEZ1bmN0aW9uQ2FsbDJDb2xsKCZza2V5 LT5za19mdW5jLAorCQkJCQkJCQkJCQlza2V5LT5za19jb2xsYXRpb24sCisJCQkJCQkJCQkJCXZh bHVlc1tpXSwKKwkJCQkJCQkJCQkJc2tleS0+c2tfYXJndW1lbnQpKSkKKwkJeworCQkJbWF0Y2hl ZCA9IGZhbHNlOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwlyZXR1cm4gbWF0Y2hlZDsKK30KKwor LyoKKyAqIGJ1aWxkX2luZGV4X3NjYW5rZXlzCisgKgkJQnVpbGQgU2NhbktleXMgZm9yIGEgZGly ZWN0IGluZGV4IHByb2JlIG9mIHRoZSBQSydzIHVuaXF1ZSBpbmRleC4KKyAqCisgKiBVc2VzIGNh Y2hlZCBjb21wYXJlIGVudHJpZXMsIG9wZXJhdG9yIHByb2NlZHVyZXMsIGFuZCBzdHJhdGVneSBu dW1iZXJzCisgKiBmcm9tIHJpX3BvcHVsYXRlX2Zhc3RwYXRoX21ldGFkYXRhKCkgcmF0aGVyIHRo YW4gbG9va2luZyB0aGVtIHVwIG9uCisgKiBlYWNoIGludm9jYXRpb24uICBDYXN0cyBGSyB2YWx1 ZXMgdG8gdGhlIG9wZXJhdG9yJ3MgZXhwZWN0ZWQgaW5wdXQKKyAqIHR5cGUgaWYgbmVlZGVkLgor ICovCitzdGF0aWMgdm9pZAorYnVpbGRfaW5kZXhfc2NhbmtleXMoY29uc3QgUklfQ29uc3RyYWlu dEluZm8gKnJpaW5mbywKKwkJCQkJIFJlbGF0aW9uIGlkeF9yZWwsIERhdHVtICpwa192YWxzLAor CQkJCQkgY2hhciAqcGtfbnVsbHMsIFNjYW5LZXkgc2tleXMpCit7CisJRmFzdFBhdGhNZXRhICpm cG1ldGEgPSByaWluZm8tPmZwbWV0YTsKKworCUFzc2VydChmcG1ldGEpOworCisJLyoKKwkgKiBN YXkgbmVlZCB0byBjYXN0IGVhY2ggb2YgdGhlIGluZGl2aWR1YWwgdmFsdWVzIG9mIHRoZSBmb3Jl aWduIGtleSB0bworCSAqIHRoZSBjb3JyZXNwb25kaW5nIFBLIGNvbHVtbidzIHR5cGUgaWYgdGhl IGVxdWFsaXR5IG9wZXJhdG9yIGRlbWFuZHMgaXQuCisJICovCisJZm9yIChpbnQgaSA9IDA7IGkg PCByaWluZm8tPm5rZXlzOyBpKyspCisJeworCQlpZiAocGtfbnVsbHNbaV0gIT0gJ24nKQorCQl7 CisJCQlSSV9Db21wYXJlSGFzaEVudHJ5ICplbnRyeSA9IGZwbWV0YS0+Y29tcGFyZV9lbnRyaWVz W2ldOworCisJCQlpZiAoT2lkSXNWYWxpZChlbnRyeS0+Y2FzdF9mdW5jX2ZpbmZvLmZuX29pZCkp CisJCQkJcGtfdmFsc1tpXSA9IEZ1bmN0aW9uQ2FsbDMoJmVudHJ5LT5jYXN0X2Z1bmNfZmluZm8s CisJCQkJCQkJCQkJICAgcGtfdmFsc1tpXSwKKwkJCQkJCQkJCQkgICBJbnQzMkdldERhdHVtKC0x KSwJLyogdHlwbW9kICovCisJCQkJCQkJCQkJICAgQm9vbEdldERhdHVtKGZhbHNlKSk7CS8qIGlt cGxpY2l0IGNvZXJjaW9uICovCisJCX0KKwl9CisKKwkvKgorCSAqIFNldCB1cCBTY2FuS2V5cyBm b3IgdGhlIGluZGV4IHNjYW4uIFRoaXMgaXMgZXNzZW50aWFsbHkgaG93CisJICogRXhlY0luZGV4 QnVpbGRTY2FuS2V5cygpIHNldHMgdGhlbSB1cC4KKwkgKi8KKwlmb3IgKGludCBpID0gMDsgaSA8 IHJpaW5mby0+bmtleXM7IGkrKykKKwl7CisJCWludAkJCXBrYXR0cm5vID0gaSArIDE7CisKKwkJ U2NhbktleUVudHJ5SW5pdGlhbGl6ZSgmc2tleXNbaV0sIDAsIHBrYXR0cm5vLAorCQkJCQkJCSAg IGZwbWV0YS0+c3RyYXRzW2ldLCBmcG1ldGEtPnN1YnR5cGVzW2ldLAorCQkJCQkJCSAgIGlkeF9y ZWwtPnJkX2luZGNvbGxhdGlvbltpXSwgZnBtZXRhLT5yZWdvcHNbaV0sCisJCQkJCQkJICAgcGtf dmFsc1tpXSk7CisJfQorfQorCisvKgorICogcmlfcG9wdWxhdGVfZmFzdHBhdGhfbWV0YWRhdGEK KyAqCQlDYWNoZSBwZXIta2V5IG1ldGFkYXRhIG5lZWRlZCBieSBidWlsZF9pbmRleF9zY2Fua2V5 cygpLgorICoKKyAqIExvb2tzIHVwIHRoZSBjb21wYXJlIGhhc2ggZW50cnksIG9wZXJhdG9yIHBy b2NlZHVyZSBPSUQsIGFuZCBpbmRleAorICogc3RyYXRlZ3kvc3VidHlwZSBmb3IgZWFjaCBrZXkg Y29sdW1uLiAgQ2FsbGVkIGxhemlseSBvbiBmaXJzdCB1c2UKKyAqIGFuZCBwZXJzaXN0cyBmb3Ig dGhlIGxpZmV0aW1lIG9mIHRoZSBSSV9Db25zdHJhaW50SW5mbyBlbnRyeS4KKyAqLworc3RhdGlj IHZvaWQKK3JpX3BvcHVsYXRlX2Zhc3RwYXRoX21ldGFkYXRhKFJJX0NvbnN0cmFpbnRJbmZvICpy aWluZm8sCisJCQkJCQkJICBSZWxhdGlvbiBma19yZWwsIFJlbGF0aW9uIGlkeF9yZWwpCit7CisJ RmFzdFBhdGhNZXRhICpmcG1ldGE7CisJTWVtb3J5Q29udGV4dCBvbGRjeHQgPSBNZW1vcnlDb250 ZXh0U3dpdGNoVG8oVG9wTWVtb3J5Q29udGV4dCk7CisKKwlBc3NlcnQocmlpbmZvICE9IE5VTEwg JiYgcmlpbmZvLT52YWxpZCk7CisKKwlmcG1ldGEgPSBwYWxsb2Nfb2JqZWN0KEZhc3RQYXRoTWV0 YSk7CisJZm9yIChpbnQgaSA9IDA7IGkgPCByaWluZm8tPm5rZXlzOyBpKyspCisJeworCQlPaWQJ CQllcV9vcHIgPSByaWluZm8tPnBmX2VxX29wcnNbaV07CisJCU9pZAkJCXR5cGVpZCA9IFJJQXR0 VHlwZShma19yZWwsIHJpaW5mby0+ZmtfYXR0bnVtc1tpXSk7CisJCU9pZAkJCWxlZnR0eXBlOwor CQlSSV9Db21wYXJlSGFzaEVudHJ5ICplbnRyeSA9IHJpX0hhc2hDb21wYXJlT3AoZXFfb3ByLCB0 eXBlaWQpOworCisJCWZwbWV0YS0+Y29tcGFyZV9lbnRyaWVzW2ldID0gZW50cnk7CisJCWZwbWV0 YS0+cmVnb3BzW2ldID0gZ2V0X29wY29kZShlcV9vcHIpOworCisJCWdldF9vcF9vcGZhbWlseV9w cm9wZXJ0aWVzKGVxX29wciwKKwkJCQkJCQkJICAgaWR4X3JlbC0+cmRfb3BmYW1pbHlbaV0sCisJ CQkJCQkJCSAgIGZhbHNlLAorCQkJCQkJCQkgICAmZnBtZXRhLT5zdHJhdHNbaV0sCisJCQkJCQkJ CSAgICZsZWZ0dHlwZSwKKwkJCQkJCQkJICAgJmZwbWV0YS0+c3VidHlwZXNbaV0pOworCX0KKwor CXJpaW5mby0+ZnBtZXRhID0gZnBtZXRhOworCU1lbW9yeUNvbnRleHRTd2l0Y2hUbyhvbGRjeHQp OworfQorCiAvKgogICogRXh0cmFjdCBmaWVsZHMgZnJvbSBhIHR1cGxlIGludG8gRGF0dW0vbnVs bHMgYXJyYXlzCiAgKi8KQEAgLTMxMTIsOCArMzU0NCwxMSBAQCByaV9Db21wYXJlV2l0aENhc3Qo T2lkIGVxX29wciwgT2lkIHR5cGVpZCwgT2lkIGNvbGxpZCwKIC8qCiAgKiByaV9IYXNoQ29tcGFy ZU9wIC0KICAqCi0gKiBTZWUgaWYgd2Uga25vdyBob3cgdG8gY29tcGFyZSB0d28gdmFsdWVzLCBh bmQgY3JlYXRlIGEgbmV3IGhhc2ggZW50cnkKLSAqIGlmIG5vdC4KKyAqIExvb2sgdXAgb3IgY3Jl YXRlIGEgY2FjaGUgZW50cnkgZm9yIHRoZSBnaXZlbiBlcXVhbGl0eSBvcGVyYXRvciBhbmQKKyAq IHRoZSBjYWxsZXIncyB2YWx1ZSB0eXBlICh0eXBlaWQpLiAgVGhlIGVudHJ5IGhvbGRzIHRoZSBv cGVyYXRvcidzCisgKiBGbWdySW5mbyBhbmQsIGlmIHR5cGVpZCBkb2Vzbid0IG1hdGNoIHdoYXQg dGhlIG9wZXJhdG9yIGV4cGVjdHMgYXMKKyAqIGl0cyByaWdodC1oYW5kIGlucHV0LCBhIGNhc3Qg ZnVuY3Rpb24gdG8gY29lcmNlIHRoZSB2YWx1ZSBiZWZvcmUKKyAqIGNvbXBhcmlzb24uCiAgKi8K IHN0YXRpYyBSSV9Db21wYXJlSGFzaEVudHJ5ICoKIHJpX0hhc2hDb21wYXJlT3AoT2lkIGVxX29w ciwgT2lkIHR5cGVpZCkKQEAgLTMxNjksOCArMzYwNCwxNCBAQCByaV9IYXNoQ29tcGFyZU9wKE9p ZCBlcV9vcHIsIE9pZCB0eXBlaWQpCiAJCSAqIG1vbWVudCBzaW5jZSB0aGF0IHdpbGwgbmV2ZXIg YmUgZ2VuZXJhdGVkIGZvciBpbXBsaWNpdCBjb2VyY2lvbnMuCiAJCSAqLwogCQlvcF9pbnB1dF90 eXBlcyhlcV9vcHIsICZsZWZ0dHlwZSwgJnJpZ2h0dHlwZSk7Ci0JCUFzc2VydChsZWZ0dHlwZSA9 PSByaWdodHR5cGUpOwotCQlpZiAodHlwZWlkID09IGxlZnR0eXBlKQorCisJCS8qCisJCSAqIHBm X2VxX29wcnMgKHVzZWQgYnkgdGhlIGZhc3QgcGF0aCkgY2FuIGJlIGNyb3NzLXR5cGUgd2hlbiB0 aGUKKwkJICogRksgYW5kIFBLIGNvbHVtbnMgZGlmZmVyIGluIHR5cGUsIGUuZy4gaW50NDhlcSBm b3IgaW50NCBQSyAvCisJCSAqIGludDggRksuICBJZiB0aGUgRksgY29sdW1uJ3MgdHlwZSBhbHJl YWR5IG1hdGNoZXMgd2hhdCB0aGUKKwkJICogb3BlcmF0b3IgZXhwZWN0cyBhcyBpdHMgcmlnaHQt aGFuZCBpbnB1dCwgbm8gY2FzdCBpcyBuZWVkZWQuCisJCSAqLworCQlpZiAodHlwZWlkID09IHJp Z2h0dHlwZSkKIAkJCWNhc3RmdW5jID0gSW52YWxpZE9pZDsJLyogc2ltcGxlc3QgY2FzZSAqLwog CQllbHNlCiAJCXsKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L2lzb2xhdGlvbi9leHBlY3RlZC9may1j b25jdXJyZW50LXBrLXVwZC5vdXQgYi9zcmMvdGVzdC9pc29sYXRpb24vZXhwZWN0ZWQvZmstY29u Y3VycmVudC1way11cGQub3V0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw Li40ZGQ5NTM1ZDNjMAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0L2lzb2xhdGlvbi9leHBl Y3RlZC9may1jb25jdXJyZW50LXBrLXVwZC5vdXQKQEAgLTAsMCArMSwxMDUgQEAKK1BhcnNlZCB0 ZXN0IHNwZWMgd2l0aCAzIHNlc3Npb25zCisKK3N0YXJ0aW5nIHBlcm11dGF0aW9uOiBzMmIgczJ1 a2V5IHMxYiBzMWkgczJjIHMxYyBzMnMgczFzCitzdGVwIHMyYjogQkVHSU47CitzdGVwIHMydWtl eTogVVBEQVRFIHBhcmVudCBTRVQgcGFyZW50X2tleSA9IDIgV0hFUkUgcGFyZW50X2tleSA9IDE7 CitzdGVwIHMxYjogQkVHSU47CitzdGVwIHMxaTogSU5TRVJUIElOVE8gY2hpbGQgVkFMVUVTICgx LCAxKTsgPHdhaXRpbmcgLi4uPgorc3RlcCBzMmM6IENPTU1JVDsKK3N0ZXAgczFpOiA8Li4uIGNv bXBsZXRlZD4KK0VSUk9SOiAgaW5zZXJ0IG9yIHVwZGF0ZSBvbiB0YWJsZSAiY2hpbGQiIHZpb2xh dGVzIGZvcmVpZ24ga2V5IGNvbnN0cmFpbnQgImNoaWxkX3BhcmVudF9rZXlfZmtleSIKK3N0ZXAg czFjOiBDT01NSVQ7CitzdGVwIHMyczogU0VMRUNUICogRlJPTSBwYXJlbnQ7CitwYXJlbnRfa2V5 fGF1eAorLS0tLS0tLS0tLSstLS0KKyAgICAgICAgIDJ8Zm9vCisoMSByb3cpCisKK3N0ZXAgczFz OiBTRUxFQ1QgKiBGUk9NIGNoaWxkOworY2hpbGRfa2V5fHBhcmVudF9rZXkKKy0tLS0tLS0tLSst LS0tLS0tLS0tCisoMCByb3dzKQorCisKK3N0YXJ0aW5nIHBlcm11dGF0aW9uOiBzMmIgczJ1YXV4 IHMxYiBzMWkgczJjIHMxYyBzMnMgczFzCitzdGVwIHMyYjogQkVHSU47CitzdGVwIHMydWF1eDog VVBEQVRFIHBhcmVudCBTRVQgYXV4ID0gJ2JhcicgV0hFUkUgcGFyZW50X2tleSA9IDE7CitzdGVw IHMxYjogQkVHSU47CitzdGVwIHMxaTogSU5TRVJUIElOVE8gY2hpbGQgVkFMVUVTICgxLCAxKTsK K3N0ZXAgczJjOiBDT01NSVQ7CitzdGVwIHMxYzogQ09NTUlUOworc3RlcCBzMnM6IFNFTEVDVCAq IEZST00gcGFyZW50OworcGFyZW50X2tleXxhdXgKKy0tLS0tLS0tLS0rLS0tCisgICAgICAgICAx fGJhcgorKDEgcm93KQorCitzdGVwIHMxczogU0VMRUNUICogRlJPTSBjaGlsZDsKK2NoaWxkX2tl eXxwYXJlbnRfa2V5CistLS0tLS0tLS0rLS0tLS0tLS0tLQorICAgICAgICAxfCAgICAgICAgIDEK KygxIHJvdykKKworCitzdGFydGluZyBwZXJtdXRhdGlvbjogczJiIHMydWtleSBzMWIgczFpIHMy dWtleTIgczJjIHMxYyBzMnMgczFzCitzdGVwIHMyYjogQkVHSU47CitzdGVwIHMydWtleTogVVBE QVRFIHBhcmVudCBTRVQgcGFyZW50X2tleSA9IDIgV0hFUkUgcGFyZW50X2tleSA9IDE7CitzdGVw IHMxYjogQkVHSU47CitzdGVwIHMxaTogSU5TRVJUIElOVE8gY2hpbGQgVkFMVUVTICgxLCAxKTsg PHdhaXRpbmcgLi4uPgorc3RlcCBzMnVrZXkyOiBVUERBVEUgcGFyZW50IFNFVCBwYXJlbnRfa2V5 ID0gMSBXSEVSRSBwYXJlbnRfa2V5ID0gMjsKK3N0ZXAgczJjOiBDT01NSVQ7CitzdGVwIHMxaTog PC4uLiBjb21wbGV0ZWQ+CitzdGVwIHMxYzogQ09NTUlUOworc3RlcCBzMnM6IFNFTEVDVCAqIEZS T00gcGFyZW50OworcGFyZW50X2tleXxhdXgKKy0tLS0tLS0tLS0rLS0tCisgICAgICAgICAxfGZv bworKDEgcm93KQorCitzdGVwIHMxczogU0VMRUNUICogRlJPTSBjaGlsZDsKK2NoaWxkX2tleXxw YXJlbnRfa2V5CistLS0tLS0tLS0rLS0tLS0tLS0tLQorICAgICAgICAxfCAgICAgICAgIDEKKygx IHJvdykKKworCitzdGFydGluZyBwZXJtdXRhdGlvbjogczJiIHMydWtleSBzM2IgczNpIHMyYyBz M2MgczJzIHMzcworc3RlcCBzMmI6IEJFR0lOOworc3RlcCBzMnVrZXk6IFVQREFURSBwYXJlbnQg U0VUIHBhcmVudF9rZXkgPSAyIFdIRVJFIHBhcmVudF9rZXkgPSAxOworc3RlcCBzM2I6IEJFR0lO IElTT0xBVElPTiBMRVZFTCBSRVBFQVRBQkxFIFJFQUQ7CitzdGVwIHMzaTogSU5TRVJUIElOVE8g Y2hpbGQgVkFMVUVTICgyLCAxKTsgPHdhaXRpbmcgLi4uPgorc3RlcCBzMmM6IENPTU1JVDsKK3N0 ZXAgczNpOiA8Li4uIGNvbXBsZXRlZD4KK0VSUk9SOiAgY291bGQgbm90IHNlcmlhbGl6ZSBhY2Nl c3MgZHVlIHRvIGNvbmN1cnJlbnQgdXBkYXRlCitzdGVwIHMzYzogQ09NTUlUOworc3RlcCBzMnM6 IFNFTEVDVCAqIEZST00gcGFyZW50OworcGFyZW50X2tleXxhdXgKKy0tLS0tLS0tLS0rLS0tCisg ICAgICAgICAyfGZvbworKDEgcm93KQorCitzdGVwIHMzczogU0VMRUNUICogRlJPTSBjaGlsZDsK K2NoaWxkX2tleXxwYXJlbnRfa2V5CistLS0tLS0tLS0rLS0tLS0tLS0tLQorKDAgcm93cykKKwor CitzdGFydGluZyBwZXJtdXRhdGlvbjogczJiIHMydWF1eCBzM2IgczNpIHMyYyBzM2MgczJzIHMz cworc3RlcCBzMmI6IEJFR0lOOworc3RlcCBzMnVhdXg6IFVQREFURSBwYXJlbnQgU0VUIGF1eCA9 ICdiYXInIFdIRVJFIHBhcmVudF9rZXkgPSAxOworc3RlcCBzM2I6IEJFR0lOIElTT0xBVElPTiBM RVZFTCBSRVBFQVRBQkxFIFJFQUQ7CitzdGVwIHMzaTogSU5TRVJUIElOVE8gY2hpbGQgVkFMVUVT ICgyLCAxKTsKK3N0ZXAgczJjOiBDT01NSVQ7CitzdGVwIHMzYzogQ09NTUlUOworc3RlcCBzMnM6 IFNFTEVDVCAqIEZST00gcGFyZW50OworcGFyZW50X2tleXxhdXgKKy0tLS0tLS0tLS0rLS0tCisg ICAgICAgICAxfGJhcgorKDEgcm93KQorCitzdGVwIHMzczogU0VMRUNUICogRlJPTSBjaGlsZDsK K2NoaWxkX2tleXxwYXJlbnRfa2V5CistLS0tLS0tLS0rLS0tLS0tLS0tLQorICAgICAgICAyfCAg ICAgICAgIDEKKygxIHJvdykKKwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvaXNvbGF0aW9uL2lzb2xh dGlvbl9zY2hlZHVsZSBiL3NyYy90ZXN0L2lzb2xhdGlvbi9pc29sYXRpb25fc2NoZWR1bGUKaW5k ZXggNGU0NjY1ODBjZDQuLmMxYTk5OWJmMWQyIDEwMDY0NAotLS0gYS9zcmMvdGVzdC9pc29sYXRp b24vaXNvbGF0aW9uX3NjaGVkdWxlCisrKyBiL3NyYy90ZXN0L2lzb2xhdGlvbi9pc29sYXRpb25f c2NoZWR1bGUKQEAgLTM3LDYgKzM3LDcgQEAgdGVzdDogZmstcGFydGl0aW9uZWQtMgogdGVzdDog Zmstc25hcHNob3QKIHRlc3Q6IGZrLXNuYXBzaG90LTIKIHRlc3Q6IGZrLXNuYXBzaG90LTMKK3Rl c3Q6IGZrLWNvbmN1cnJlbnQtcGstdXBkCiB0ZXN0OiBzdWJ4aWQtb3ZlcmZsb3cKIHRlc3Q6IGV2 YWwtcGxhbi1xdWFsCiB0ZXN0OiBldmFsLXBsYW4tcXVhbC10cmlnZ2VyCmRpZmYgLS1naXQgYS9z cmMvdGVzdC9pc29sYXRpb24vc3BlY3MvZmstY29uY3VycmVudC1way11cGQuc3BlYyBiL3NyYy90 ZXN0L2lzb2xhdGlvbi9zcGVjcy9may1jb25jdXJyZW50LXBrLXVwZC5zcGVjCm5ldyBmaWxlIG1v ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4wM2RjN2YyNjBjZAotLS0gL2Rldi9udWxsCisr KyBiL3NyYy90ZXN0L2lzb2xhdGlvbi9zcGVjcy9may1jb25jdXJyZW50LXBrLXVwZC5zcGVjCkBA IC0wLDAgKzEsNTMgQEAKKyMgVGVzdHMgdGhhdCBhbiBJTlNFUlQgb24gcmVmZXJlbmNpbmcgdGFi bGUgY29ycmVjdGx5IGZhaWxzIHdoZW4KKyMgdGhlIHJlZmVyZW5jZWQgdmFsdWUgZGlzYXBwZWFy cyBkdWUgdG8gYSBjb25jdXJyZW50IHVwZGF0ZQorc2V0dXAKK3sKKyAgQ1JFQVRFIFRBQkxFIHBh cmVudCAoCisgICAgcGFyZW50X2tleSBpbnQgUFJJTUFSWSBLRVksCisgICAgYXV4ICAgdGV4dCBO T1QgTlVMTAorICApOworCisgIENSRUFURSBUQUJMRSBjaGlsZCAoCisgICAgY2hpbGRfa2V5IGlu dCBQUklNQVJZIEtFWSwKKyAgICBwYXJlbnRfa2V5IGludDggTk9UIE5VTEwgUkVGRVJFTkNFUyBw YXJlbnQKKyAgKTsKKworICBJTlNFUlQgSU5UTyBwYXJlbnQgVkFMVUVTICgxLCAnZm9vJyk7Cit9 CisKK3RlYXJkb3duCit7CisgIERST1AgVEFCTEUgcGFyZW50LCBjaGlsZDsKK30KKworc2Vzc2lv biBzMQorc3RlcCBzMWIgIHsgQkVHSU47IH0KK3N0ZXAgczFpIHsgSU5TRVJUIElOVE8gY2hpbGQg VkFMVUVTICgxLCAxKTsgfQorc3RlcCBzMWMgeyBDT01NSVQ7IH0KK3N0ZXAgczFzIHsgU0VMRUNU ICogRlJPTSBjaGlsZDsgfQorCitzZXNzaW9uIHMyCitzdGVwIHMyYiAgeyBCRUdJTjsgfQorc3Rl cCBzMnVrZXkgeyBVUERBVEUgcGFyZW50IFNFVCBwYXJlbnRfa2V5ID0gMiBXSEVSRSBwYXJlbnRf a2V5ID0gMTsgfQorc3RlcCBzMnVhdXggeyBVUERBVEUgcGFyZW50IFNFVCBhdXggPSAnYmFyJyBX SEVSRSBwYXJlbnRfa2V5ID0gMTsgfQorc3RlcCBzMnVrZXkyIHsgVVBEQVRFIHBhcmVudCBTRVQg cGFyZW50X2tleSA9IDEgV0hFUkUgcGFyZW50X2tleSA9IDI7IH0KK3N0ZXAgczJjIHsgQ09NTUlU OyB9CitzdGVwIHMycyB7IFNFTEVDVCAqIEZST00gcGFyZW50OyB9CisKK3Nlc3Npb24gczMKK3N0 ZXAgczNiIHsgQkVHSU4gSVNPTEFUSU9OIExFVkVMIFJFUEVBVEFCTEUgUkVBRDsgfQorc3RlcCBz M2kgeyBJTlNFUlQgSU5UTyBjaGlsZCBWQUxVRVMgKDIsIDEpOyB9CitzdGVwIHMzYyB7IENPTU1J VDsgfQorc3RlcCBzM3MgeyBTRUxFQ1QgKiBGUk9NIGNoaWxkOyB9CisKKyMgZmFpbAorcGVybXV0 YXRpb24gczJiIHMydWtleSBzMWIgczFpIHMyYyBzMWMgczJzIHMxcworIyBvaworcGVybXV0YXRp b24gczJiIHMydWF1eCBzMWIgczFpIHMyYyBzMWMgczJzIHMxcworIyBvaworcGVybXV0YXRpb24g czJiIHMydWtleSBzMWIgczFpIHMydWtleTIgczJjIHMxYyBzMnMgczFzCisKKyMgUlI6IGtleSB1 cGRhdGUgLT4gc2VyaWFsaXphdGlvbiBmYWlsdXJlCitwZXJtdXRhdGlvbiBzMmIgczJ1a2V5IHMz YiBzM2kgczJjIHMzYyBzMnMgczNzCisjIFJSOiBub24ta2V5IHVwZGF0ZSAtPiBvbGQgdmVyc2lv biB2aXNpYmxlIHZpYSB0cmFuc2FjdGlvbiBzbmFwc2hvdAorcGVybXV0YXRpb24gczJiIHMydWF1 eCBzM2IgczNpIHMyYyBzM2MgczJzIHMzcwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9l eHBlY3RlZC9mb3JlaWduX2tleS5vdXQgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2ZvcmVp Z25fa2V5Lm91dAppbmRleCA5YWU0ZGJmMWIwYS4uMDgyNmY1MTgwMDQgMTAwNjQ0Ci0tLSBhL3Ny Yy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvZm9yZWlnbl9rZXkub3V0CisrKyBiL3NyYy90ZXN0L3Jl Z3Jlc3MvZXhwZWN0ZWQvZm9yZWlnbl9rZXkub3V0CkBAIC0zNzAsNiArMzcwLDUzIEBAIFNFTEVD VCAqIEZST00gUEtUQUJMRTsKIERST1AgVEFCTEUgRktUQUJMRTsKIERST1AgVEFCTEUgUEtUQUJM RTsKIC0tCistLSBDaGVjayBSTFMKKy0tCitDUkVBVEUgVEFCTEUgUEtUQUJMRSAoIHB0ZXN0MSBp bnQgUFJJTUFSWSBLRVksIHB0ZXN0MiB0ZXh0ICk7CitDUkVBVEUgVEFCTEUgRktUQUJMRSAoIGZ0 ZXN0MSBpbnQgUkVGRVJFTkNFUyBQS1RBQkxFLCBmdGVzdDIgaW50ICk7CistLSBJbnNlcnQgdGVz dCBkYXRhIGludG8gUEtUQUJMRQorSU5TRVJUIElOVE8gUEtUQUJMRSBWQUxVRVMgKDEsICdUZXN0 MScpOworSU5TRVJUIElOVE8gUEtUQUJMRSBWQUxVRVMgKDIsICdUZXN0MicpOworSU5TRVJUIElO VE8gUEtUQUJMRSBWQUxVRVMgKDMsICdUZXN0MycpOworLS0gR3JhbnQgcHJpdmlsZWdlcyBvbiBQ S1RBQkxFL0ZLVEFCTEUgdG8gdXNlciByZWdyZXNzX2ZvcmVpZ25fa2V5X3VzZXIKK0NSRUFURSBV U0VSIHJlZ3Jlc3NfZm9yZWlnbl9rZXlfdXNlciBOT0xPR0lOOworR1JBTlQgU0VMRUNUIE9OIFBL VEFCTEUgVE8gcmVncmVzc19mb3JlaWduX2tleV91c2VyOworR1JBTlQgU0VMRUNULCBJTlNFUlQg T04gRktUQUJMRSBUTyByZWdyZXNzX2ZvcmVpZ25fa2V5X3VzZXI7CistLSBFbmFibGUgUkxTIG9u IFBLVEFCTEUgYW5kIENyZWF0ZSBwb2xpY2llcworQUxURVIgVEFCTEUgUEtUQUJMRSBFTkFCTEUg Uk9XIExFVkVMIFNFQ1VSSVRZOworQ1JFQVRFIFBPTElDWSBwa3RhYmxlX3ZpZXdfb2RkX3BvbGlj eSBPTiBQS1RBQkxFIFRPIHJlZ3Jlc3NfZm9yZWlnbl9rZXlfdXNlciBVU0lORyAocHRlc3QxICUg MiA9IDEpOworQUxURVIgVEFCTEUgUEtUQUJMRSBPV05FUiB0byByZWdyZXNzX2ZvcmVpZ25fa2V5 X3VzZXI7CitTRVQgUk9MRSByZWdyZXNzX2ZvcmVpZ25fa2V5X3VzZXI7CitJTlNFUlQgSU5UTyBG S1RBQkxFIFZBTFVFUyAoMywgNSk7CitJTlNFUlQgSU5UTyBGS1RBQkxFIFZBTFVFUyAoMiwgNSk7 IC0tIHN1Y2Nlc3MsIFJFRkVSRU5DRVMgYXJlIG5vdCBzdWJqZWN0IHRvIHJvdyBzZWN1cml0eQor UkVTRVQgUk9MRTsKK0RST1AgVEFCTEUgRktUQUJMRTsKK0RST1AgVEFCTEUgUEtUQUJMRTsKK0RS T1AgVVNFUiByZWdyZXNzX2ZvcmVpZ25fa2V5X3VzZXI7CistLQorLS0gQ2hlY2sgQUNMCistLQor Q1JFQVRFIFRBQkxFIFBLVEFCTEUgKCBwdGVzdDEgaW50IFBSSU1BUlkgS0VZLCBwdGVzdDIgdGV4 dCApOworQ1JFQVRFIFRBQkxFIEZLVEFCTEUgKCBmdGVzdDEgaW50IFJFRkVSRU5DRVMgUEtUQUJM RSwgZnRlc3QyIGludCApOworLS0gSW5zZXJ0IHRlc3QgZGF0YSBpbnRvIFBLVEFCTEUKK0lOU0VS VCBJTlRPIFBLVEFCTEUgVkFMVUVTICgxLCAnVGVzdDEnKTsKK0lOU0VSVCBJTlRPIFBLVEFCTEUg VkFMVUVTICgyLCAnVGVzdDInKTsKK0lOU0VSVCBJTlRPIFBLVEFCTEUgVkFMVUVTICgzLCAnVGVz dDMnKTsKKy0tIEdyYW50IHVzYWdlIG9uIFBLVEFCTEUgdG8gdXNlciByZWdyZXNzX2ZvcmVpZ25f a2V5X3VzZXIKK0NSRUFURSBVU0VSIHJlZ3Jlc3NfZm9yZWlnbl9rZXlfdXNlciBOT0xPR0lOOwor R1JBTlQgU0VMRUNUIE9OIFBLVEFCTEUgVE8gcmVncmVzc19mb3JlaWduX2tleV91c2VyOworQUxU RVIgVEFCTEUgUEtUQUJMRSBPV05FUiB0byByZWdyZXNzX2ZvcmVpZ25fa2V5X3VzZXI7CistLSBJ bnNlcnRpbmcgaW50byBGS1RBQkxFIHNob3VsZCB3b3JrCitJTlNFUlQgSU5UTyBGS1RBQkxFIFZB TFVFUyAoMywgNSk7CistLSBSZXZva2UgdXNhZ2Ugb24gUEtUQUJMRSBmcm9tIHVzZXIgcmVncmVz c19mb3JlaWduX2tleV91c2VyCitSRVZPS0UgU0VMRUNUIE9OIFBLVEFCTEUgRlJPTSByZWdyZXNz X2ZvcmVpZ25fa2V5X3VzZXI7CistLSBJbnNlcnRpbmcgaW50byBGS1RBQkxFIHNob3VsZCBmYWls CitJTlNFUlQgSU5UTyBGS1RBQkxFIFZBTFVFUyAoMiwgNik7CitFUlJPUjogIHBlcm1pc3Npb24g ZGVuaWVkIGZvciB0YWJsZSBwa3RhYmxlCitEUk9QIFRBQkxFIEZLVEFCTEU7CitEUk9QIFRBQkxF IFBLVEFCTEU7CitEUk9QIFVTRVIgcmVncmVzc19mb3JlaWduX2tleV91c2VyOworLS0KIC0tIENo ZWNrIGluaXRpYWwgY2hlY2sgdXBvbiBBTFRFUiBUQUJMRQogLS0KIENSRUFURSBUQUJMRSBQS1RB QkxFICggcHRlc3QxIGludCwgcHRlc3QyIGludCwgUFJJTUFSWSBLRVkocHRlc3QxLCBwdGVzdDIp ICk7CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL3NxbC9mb3JlaWduX2tleS5zcWwgYi9z cmMvdGVzdC9yZWdyZXNzL3NxbC9mb3JlaWduX2tleS5zcWwKaW5kZXggM2I4Yzk1YmY4OTMuLmU5 ZWUyOTMzMWNiIDEwMDY0NAotLS0gYS9zcmMvdGVzdC9yZWdyZXNzL3NxbC9mb3JlaWduX2tleS5z cWwKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9zcWwvZm9yZWlnbl9rZXkuc3FsCkBAIC0yNDIsNiAr MjQyLDcwIEBAIFNFTEVDVCAqIEZST00gUEtUQUJMRTsKIERST1AgVEFCTEUgRktUQUJMRTsKIERS T1AgVEFCTEUgUEtUQUJMRTsKIAorLS0KKy0tIENoZWNrIFJMUworLS0KK0NSRUFURSBUQUJMRSBQ S1RBQkxFICggcHRlc3QxIGludCBQUklNQVJZIEtFWSwgcHRlc3QyIHRleHQgKTsKK0NSRUFURSBU QUJMRSBGS1RBQkxFICggZnRlc3QxIGludCBSRUZFUkVOQ0VTIFBLVEFCTEUsIGZ0ZXN0MiBpbnQg KTsKKworLS0gSW5zZXJ0IHRlc3QgZGF0YSBpbnRvIFBLVEFCTEUKK0lOU0VSVCBJTlRPIFBLVEFC TEUgVkFMVUVTICgxLCAnVGVzdDEnKTsKK0lOU0VSVCBJTlRPIFBLVEFCTEUgVkFMVUVTICgyLCAn VGVzdDInKTsKK0lOU0VSVCBJTlRPIFBLVEFCTEUgVkFMVUVTICgzLCAnVGVzdDMnKTsKKworLS0g R3JhbnQgcHJpdmlsZWdlcyBvbiBQS1RBQkxFL0ZLVEFCTEUgdG8gdXNlciByZWdyZXNzX2ZvcmVp Z25fa2V5X3VzZXIKK0NSRUFURSBVU0VSIHJlZ3Jlc3NfZm9yZWlnbl9rZXlfdXNlciBOT0xPR0lO OworR1JBTlQgU0VMRUNUIE9OIFBLVEFCTEUgVE8gcmVncmVzc19mb3JlaWduX2tleV91c2VyOwor R1JBTlQgU0VMRUNULCBJTlNFUlQgT04gRktUQUJMRSBUTyByZWdyZXNzX2ZvcmVpZ25fa2V5X3Vz ZXI7CisKKy0tIEVuYWJsZSBSTFMgb24gUEtUQUJMRSBhbmQgQ3JlYXRlIHBvbGljaWVzCitBTFRF UiBUQUJMRSBQS1RBQkxFIEVOQUJMRSBST1cgTEVWRUwgU0VDVVJJVFk7CitDUkVBVEUgUE9MSUNZ IHBrdGFibGVfdmlld19vZGRfcG9saWN5IE9OIFBLVEFCTEUgVE8gcmVncmVzc19mb3JlaWduX2tl eV91c2VyIFVTSU5HIChwdGVzdDEgJSAyID0gMSk7CisKK0FMVEVSIFRBQkxFIFBLVEFCTEUgT1dO RVIgdG8gcmVncmVzc19mb3JlaWduX2tleV91c2VyOworCitTRVQgUk9MRSByZWdyZXNzX2ZvcmVp Z25fa2V5X3VzZXI7CisKK0lOU0VSVCBJTlRPIEZLVEFCTEUgVkFMVUVTICgzLCA1KTsKK0lOU0VS VCBJTlRPIEZLVEFCTEUgVkFMVUVTICgyLCA1KTsgLS0gc3VjY2VzcywgUkVGRVJFTkNFUyBhcmUg bm90IHN1YmplY3QgdG8gcm93IHNlY3VyaXR5CisKK1JFU0VUIFJPTEU7CisKK0RST1AgVEFCTEUg RktUQUJMRTsKK0RST1AgVEFCTEUgUEtUQUJMRTsKK0RST1AgVVNFUiByZWdyZXNzX2ZvcmVpZ25f a2V5X3VzZXI7CisKKy0tCistLSBDaGVjayBBQ0wKKy0tCitDUkVBVEUgVEFCTEUgUEtUQUJMRSAo IHB0ZXN0MSBpbnQgUFJJTUFSWSBLRVksIHB0ZXN0MiB0ZXh0ICk7CitDUkVBVEUgVEFCTEUgRktU QUJMRSAoIGZ0ZXN0MSBpbnQgUkVGRVJFTkNFUyBQS1RBQkxFLCBmdGVzdDIgaW50ICk7CisKKy0t IEluc2VydCB0ZXN0IGRhdGEgaW50byBQS1RBQkxFCitJTlNFUlQgSU5UTyBQS1RBQkxFIFZBTFVF UyAoMSwgJ1Rlc3QxJyk7CitJTlNFUlQgSU5UTyBQS1RBQkxFIFZBTFVFUyAoMiwgJ1Rlc3QyJyk7 CitJTlNFUlQgSU5UTyBQS1RBQkxFIFZBTFVFUyAoMywgJ1Rlc3QzJyk7CisKKy0tIEdyYW50IHVz YWdlIG9uIFBLVEFCTEUgdG8gdXNlciByZWdyZXNzX2ZvcmVpZ25fa2V5X3VzZXIKK0NSRUFURSBV U0VSIHJlZ3Jlc3NfZm9yZWlnbl9rZXlfdXNlciBOT0xPR0lOOworR1JBTlQgU0VMRUNUIE9OIFBL VEFCTEUgVE8gcmVncmVzc19mb3JlaWduX2tleV91c2VyOworCitBTFRFUiBUQUJMRSBQS1RBQkxF IE9XTkVSIHRvIHJlZ3Jlc3NfZm9yZWlnbl9rZXlfdXNlcjsKKworLS0gSW5zZXJ0aW5nIGludG8g RktUQUJMRSBzaG91bGQgd29yaworSU5TRVJUIElOVE8gRktUQUJMRSBWQUxVRVMgKDMsIDUpOwor CistLSBSZXZva2UgdXNhZ2Ugb24gUEtUQUJMRSBmcm9tIHVzZXIgcmVncmVzc19mb3JlaWduX2tl eV91c2VyCitSRVZPS0UgU0VMRUNUIE9OIFBLVEFCTEUgRlJPTSByZWdyZXNzX2ZvcmVpZ25fa2V5 X3VzZXI7CisKKy0tIEluc2VydGluZyBpbnRvIEZLVEFCTEUgc2hvdWxkIGZhaWwKK0lOU0VSVCBJ TlRPIEZLVEFCTEUgVkFMVUVTICgyLCA2KTsKKworRFJPUCBUQUJMRSBGS1RBQkxFOworRFJPUCBU QUJMRSBQS1RBQkxFOworCitEUk9QIFVTRVIgcmVncmVzc19mb3JlaWduX2tleV91c2VyOworCiAt LQogLS0gQ2hlY2sgaW5pdGlhbCBjaGVjayB1cG9uIEFMVEVSIFRBQkxFCiAtLQpkaWZmIC0tZ2l0 IGEvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QgYi9zcmMvdG9vbHMvcGdpbmRlbnQv dHlwZWRlZnMubGlzdAppbmRleCAwYzA3Yzk0NWYwNS4uYzUxYTBhOTAzYTYgMTAwNjQ0Ci0tLSBh L3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0CisrKyBiL3NyYy90b29scy9wZ2luZGVu dC90eXBlZGVmcy5saXN0CkBAIC04MTUsNiArODE1LDcgQEAgRXh0ZW5zaW9uSW5mbwogRXh0ZW5z aW9uTG9jYXRpb24KIEV4dGVuc2lvblNpYmxpbmdDYWNoZQogRXh0ZW5zaW9uVmVyc2lvbkluZm8K K0Zhc3RQYXRoTWV0YQogRkRXQ29sbGF0ZVN0YXRlCiBGRF9TRVQKIEZJTEUKLS0gCjIuNDcuMwoK --0000000000005bdecd064dce872f--