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 1w83yb-000B1F-15 for pgsql-hackers@arkaria.postgresql.org; Wed, 01 Apr 2026 22:23:54 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1w83yX-002Vxh-30 for pgsql-hackers@arkaria.postgresql.org; Wed, 01 Apr 2026 22:23:50 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1w83yX-002VxY-0c for pgsql-hackers@lists.postgresql.org; Wed, 01 Apr 2026 22:23:50 +0000 Received: from mail-pl1-x632.google.com ([2607:f8b0:4864:20::632]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1w83yU-000000005Br-0XMy for pgsql-hackers@lists.postgresql.org; Wed, 01 Apr 2026 22:23:48 +0000 Received: by mail-pl1-x632.google.com with SMTP id d9443c01a7336-2aaf43014d0so1311795ad.2 for ; Wed, 01 Apr 2026 15:23:46 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1775082225; cv=none; d=google.com; s=arc-20240605; b=A1R4yaZOrpLARleF3ElX3TAARV21CDhvzvamrK0TEfx4UvN7maJ7I8uz39fPNLGOLL 9Q3K0IIBQfaBBLx2vohIC4tzMuPbdwE3aOwRshV5qbZFFn/52wovEekrxJ7QtSDUw8CN RJdPHmzWO3nTM2dWFsslc4XCEtTcEwXj0gZZpZQ9HB/jBSYDYyEMlc4Oq5U+PUOPXU+v 0rDn3vu+5naKXWZdp6FLBGjA6xXvu4m5+o6yibaHx3j62luXJSLrakjR8iJSV+DO+d9v dAaA7JNvy13/s3AoHozJ2UyiLCUFbO/29xOjvkOv631xhZQ2cD06pP5hqnk3c45abqVL ySXA== 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=MA8xO8BCf4P2MirMIpzszxfrx8kLJCQX52mqRZCAV3M=; fh=uZX8R+SFUHLPmPjqyvds4J+bxoMvgH/tPHw+NDLWnxs=; b=AJlg5UXrql5OgYguJmTV0Og9HRMC4vUEQADx4pJlRahauR5S4jPC5DjXFyhXFwd42O siDD252BbErg3Vh9MoPpqI73k968xLQUNB+UbKTfG/yw0SYLK4oraD8UaJXHDYcm+QIF amAXaYSeryEb7JdKu0KIOdbY5DUkpYQydGillsHqKFLWMcws1DyMGrncXcA1RORcZ/tl /LZFYAdizwMeZHOVoboxHxv0WWvRyBy+imhf6Gmlq49gGgDqDbInTTRPdMlYBLt0OHcT R+olgzeoyeiKqSSOn6sbgsU5IqBNJhPrvy8pklcCAjp+u7W9XzpW8JQsCYsD3SGen9Iz VX0Q==; darn=lists.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=1775082225; x=1775687025; darn=lists.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=MA8xO8BCf4P2MirMIpzszxfrx8kLJCQX52mqRZCAV3M=; b=rlfRU4V5Hi8/vrJprb/wAvm4h0ZQNT2cC85pWFoUAdmKHPN2apH9yfbUseyMSNJOBS qxlnpYvUXhuH9qAqiCOIb8DEmnhvG4qFLw4CH3QQshRo3KqKaV2vhfan9VJqt7tvKhd1 eKP7KGlN+1uDJQPXy+nSUR7jn/QiCXgQ277dRETJI5EcUN2/Cy51rL/eTslk1ADdzfvV JwXCey9K9LWYx2zPuhISssBp0oid9bx8oqLV1ngdE5Kg0eUZRjCkyRwS0BcfXeI/9QpT o3GwjFPchB5KOcoByMLFcuT5ibpaJr44WQL6hW+vVyaoGvG1c8sP1HfCg86kVn7Qgo+k E5Vw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1775082225; x=1775687025; 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=MA8xO8BCf4P2MirMIpzszxfrx8kLJCQX52mqRZCAV3M=; b=Zl4z8DOPz1o6H5UZYJvLss1BDPOq5h5nBfK3YTUCW35w18GDznLmASGM7vjTYbb5y3 vNRaoInjQi/LnivXhDiLfF7ZzptSlQKTfYA0p/MvQvpMFxLm9k/iZH1mRfK2o8skiPBB Ttq0aFLqT183Nlq7yKE5fRaVUr1PAVSxCVRd/1ca2cMHiU2gc1nljrcXAnTSCJ8GIRKm BH2bGaZchScefW3dnf1id7KVWCTVbs6PNxXZ7xwwB1V5EqroTDfgFGCFspoInK5aspUh UkYc/gslcK0Ia9KMYYzH3gVBEb/HtC7fl2IkRnI4vlbCH2Psmw210Y9oVasWwfOn/AyW tNcQ== X-Forwarded-Encrypted: i=1; AJvYcCUhQyEOejSaoh2JSp6o2ANkcwjT1k+7vzPjHDXdepCS0/blegbQlyoHQggJxt7wT8Wp1xkli9k/rmFYxsKa@lists.postgresql.org X-Gm-Message-State: AOJu0YzUl2ktNZTxNetdoT8bK+P61w6flIin4sMJNLVZKhMGYPysXDu+ ipM2JXMrvlGrx1ZS4pOTA7c8w8D5xbwoCHuVCBptoboyE8SoIperpP0X5N21WnwwOj9TKxoA+wl XHqSyTo+qiAfigeRp3ffnkhG0XRtlI6E= X-Gm-Gg: ATEYQzxzE0F70aMxTDIvxa3RyMd8tLw8MVuhG54bFeibcGHgxZfiUlCrat5LjJc3dD+ xSs7E5em89UlNaTb3VfrXj3T+I4XC5eP+SHLuuywesF7Fstp23Y6+BGweixavo6lWmZPeIpqJtD gqxcgIGLc/BNMIAJ7kJuY0fS3eHhXWWdZyLy2n3jkDPS4PSHWdBy/u9tiaA3uo8+sRZGgl3XS5q x0fqD/+XvkkwhCq9o2RTAmm2XL40WBMD1Nkf1ZlzYqEdRuBZ/eoe11TwL06lnN5c1T9lx5h1HD8 PgejaU+n X-Received: by 2002:a17:903:1a6f:b0:2b2:58a2:c8a with SMTP id d9443c01a7336-2b2756c1333mr9144175ad.0.1775082224680; Wed, 01 Apr 2026 15:23:44 -0700 (PDT) MIME-Version: 1.0 References: <0c28fbd1-3320-4e9b-815c-6d62753aa063@wi3ck.info> In-Reply-To: From: Masahiko Sawada Date: Wed, 1 Apr 2026 15:23:06 -0700 X-Gm-Features: AQROBzDZ_8iOIYOo5PcyV0AzTZ-rp-Fkiei9v71gROmn_5ai7dGMlC64lqXQD84 Message-ID: Subject: Re: Initial COPY of Logical Replication is too slow To: "Zhijie Hou (Fujitsu)" Cc: Amit Kapila , Peter Smith , Jan Wieck , "pgsql-hackers@lists.postgresql.org" Content-Type: multipart/mixed; boundary="0000000000007315c6064e6d89e5" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --0000000000007315c6064e6d89e5 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Tue, Mar 31, 2026 at 12:40=E2=80=AFPM Masahiko Sawada wrote: > > On Tue, Mar 31, 2026 at 5:07=E2=80=AFAM Zhijie Hou (Fujitsu) > wrote: > > > > On Tuesday, March 31, 2026 5:36 PM Amit Kapila wrote: > > > > > > On Wed, Mar 25, 2026 at 2:19=E2=80=AFPM Peter Smith > > > wrote: > > > > > > > > There are many return points, and most of those "if" blocks cannot > > > > fall through (they return). > > > > > > > > I found it slightly difficult to read the code because I kept havin= g > > > > to think, "OK, if we reached here, it means pubviaroot must be fals= e," > > > > or "OK, if we reached this far, then puballtables must be false, an= d > > > > pubviaroot must be false," etc. > > > > > > > > > > I can't say exactly why, but I find it difficult to read this functio= n. So, I share > > > your concerns about the code of this function. > > > Because of its complexity it is difficult to ascertain that the funct= ionality is > > > correct or we missed something. Also, considering it is correct today= , in its > > > current form, it may become difficult to enhance it in future. > > > > > > > I attempted to refactor the code a bit based on my preferred style, as = shown in > > the attachment. While the number of return points couldn't be reduced, = I tried > > to eliminate if-else branches where possible. Sharing this top-up patch= as a > > reference for an alternative style that reduces code size. > > > > Thanks. It looks like a good refactoring! I'd prefer to free the > ancestors list to avoid memory leak. > > I've attached the patch that incorporated all comments I got so far. > Feedback is very welcome. > I decided to simplify the code flow in the is_table_publishable_in_publication() by taking more proposed changes from Hou-san while accepting some memory leak. This function is limited to be used only in per-call-memory context so we don't need to worry about the actual memory leak. While we would need to change this function in the futuer when we want to use it other places too, I think it would be better to keep the function simple until then. I hope the added new comment also help understand the code flow of this function. I think the patch is good shape, so planning to push it barring any objecti= ons. Regards, -- Masahiko Sawada Amazon Web Services: https://aws.amazon.com --0000000000007315c6064e6d89e5 Content-Type: text/x-patch; charset="US-ASCII"; name="v8-0001-Add-target_relid-parameter-to-pg_get_publication_.patch" Content-Disposition: attachment; filename="v8-0001-Add-target_relid-parameter-to-pg_get_publication_.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mngm16bx0 RnJvbSA2NmI1MjQ5OWY4MzA1NzJlMjhkNTcyMzllYjRiMzk3YjRhNjY0M2FhIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBNYXNhaGlrbyBTYXdhZGEgPHNhd2FkYS5tc2hrQGdtYWlsLmNv bT4KRGF0ZTogRnJpLCAyNyBGZWIgMjAyNiAxNTo0MjozOCAtMDgwMApTdWJqZWN0OiBbUEFUQ0gg djhdIEFkZCB0YXJnZXRfcmVsaWQgcGFyYW1ldGVyIHRvIHBnX2dldF9wdWJsaWNhdGlvbl90YWJs ZXMoKS4KCldoZW4gYSB0YWJsZXN5bmMgd29ya2VyIGNoZWNrcyB3aGV0aGVyIGEgc3BlY2lmaWMg dGFibGUgaXMgcHVibGlzaGVkLAppdCBwcmV2aW91c2x5IGNhbGxlZCBwZ19nZXRfcHVibGljYXRp b25fdGFibGVzKCkgYW5kIGZpbHRlcmVkIHRoZQpyZXN1bHQgYnkgcmVsaWQgb24gdGhlIHN1YnNj cmliZXIgc2lkZS4gVGhpcyBmb3JjZWQgYSBmdWxsIGVudW1lcmF0aW9uCm9mIGFsbCB0YWJsZXMg aW4gdGhlIHB1YmxpY2F0aW9uIGJlZm9yZSBhbnkgZmlsdGVyaW5nIGNvdWxkIG9jY3VyLiBGb3IK cHVibGljYXRpb25zIGNvdmVyaW5nIGEgbGFyZ2UgbnVtYmVyIG9mIHRhYmxlcywgdGhpcyByZXN1 bHRlZCBpbgpleHBlbnNpdmUgc2NhbnMgb24gdGhlIHB1Ymxpc2hlciBhbmQgdW5uZWNlc3Nhcnkg b3ZlcmhlYWQuCgpUaGlzIGNvbW1pdCBhZGRzIGEgbmV3IG92ZXJsb2FkZWQgZm9ybSBvZiBwZ19n ZXRfcHVibGljYXRpb25fdGFibGVzKCkKdGhhdCBhY2NlcHRzIGFuIGFycmF5IG9mIHB1YmxpY2F0 aW9uIG5hbWVzIGFuZCBhIHRhcmdldCB0YWJsZQpPSUQuIEluc3RlYWQgb2YgZW51bWVyYXRpbmcg YWxsIHB1Ymxpc2hlZCB0YWJsZXMsIGl0IGV2YWx1YXRlcwptZW1iZXJzaGlwIGZvciB0aGUgc3Bl Y2lmaWVkIHJlbGF0aW9uIHZpYSBzeXNjYWNoZSBsb29rdXBzLCB1c2luZyB0aGUKbmV3IGlzX3Rh YmxlX3B1Ymxpc2hhYmxlX2luX3B1YmxpY2F0aW9uKCkgaGVscGVyLiBUaGlzIGhlbHBlcgpjb3Jy ZWN0bHkgYWNjb3VudHMgZm9yIHB1Ymxpc2hfdmlhX3BhcnRpdGlvbl9yb290LCBBTEwgVEFCTEVT IHdpdGgKRVhDRVBUIGNsYXVzZXMsIHNjaGVtYSBwdWJsaWNhdGlvbnMsIGFuZCBwYXJ0aXRpb24g aW5oZXJpdGFuY2UsIHdoaWxlCmF2b2lkaW5nIHRoZSBvdmVyaGVhZCBvZiBidWlsZGluZyB0aGUg Y29tcGxldGUgcHVibGlzaGVkIHRhYmxlIGxpc3QuCgpUaGUgZXhpc3RpbmcgYSBWQVJJQURJQyBh cnJheSBmb3JtIG9mIHBnX2dldF9wdWJsaWNhdGlvbl90YWJsZXMoKSBpcwpwcmVzZXJ2ZWQgZm9y IGJhY2t3YXJkIGNvbXBhdGliaWxpdHkuIFRhYmxlc3luYyB3b3JrZXJzIHVzZSB0aGUgbmV3CnR3 by1hcmd1bWVudCBmb3JtIHdoZW4gY29ubmVjdGVkIHRvIGEgcHVibGlzaGVyIHJ1bm5pbmcgUG9z dGdyZVNRTCAxOQpvciBsYXRlci4KCkJ1bXAgY2F0YWxvZyB2ZXJzaW9uLgoKUmVwb3J0ZWQtYnk6 IE1hcmNvcyBQZWdvcmFybyA8bWFyY29zQGYxMC5jb20uYnI+ClJldmlld2VkLWJ5OiBaaGlqaWUg SG91IDxob3V6ai5mbnN0QGZ1aml0c3UuY29tPgpSZXZpZXdlZC1ieTogTWF0aGV1cyBBbGNhbnRh cmEgPG1hdGhldXNzc2lsdjk3QGdtYWlsLmNvbT4KUmV2aWV3ZWQtYnk6IEFtaXQgS2FwaWxhIDxh bWl0LmthcGlsYTE2QGdtYWlsLmNvbT4KUmV2aWV3ZWQtYnk6IFBldGVyIFNtaXRoIDxzbWl0aHBi MjI1MEBnbWFpbC5jb20+ClJldmlld2VkLWJ5OiBIYXlhdG8gS3Vyb2RhIDxrdXJvZGEuaGF5YXRv QGZ1aml0c3UuY29tPgpSZXZpZXdlZC1ieTogQ2hhbyBMaSA8bGkuZXZhbi5jaGFvQGdtYWlsLmNv bT4KUmV2aWV3ZWQtYnk6IEhhb3lhbiBXYW5nIDx3YW5naGFveWFuMjBAMTYzLmNvbT4KRGlzY3Vz c2lvbjogaHR0cHM6Ly9wb3N0Z3IuZXMvbS9DQUItSkx3YkJGTnVBU3lFblpXUDBUY2s5dU5rdGhC WnFpNldvWE5ldlVUNittVjhYbUFAbWFpbC5nbWFpbC5jb20KLS0tCiBzcmMvYmFja2VuZC9jYXRh bG9nL3BnX3B1YmxpY2F0aW9uLmMgICAgICAgIHwgMjQxICsrKysrKysrKysrKysrKysrLS0tCiBz cmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3RhYmxlc3luYy5jIHwgIDcwICsrKystLQog c3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wcm9jLmRhdCAgICAgICAgICAgICB8ICAxMSArLQogc3Jj L3Rlc3QvcmVncmVzcy9leHBlY3RlZC9wdWJsaWNhdGlvbi5vdXQgICB8IDIyNSArKysrKysrKysr KysrKysrKysKIHNyYy90ZXN0L3JlZ3Jlc3Mvc3FsL3B1YmxpY2F0aW9uLnNxbCAgICAgICAgfCAx MDcgKysrKysrKysrCiA1IGZpbGVzIGNoYW5nZWQsIDYwNCBpbnNlcnRpb25zKCspLCA1MCBkZWxl dGlvbnMoLSkKCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jYXRhbG9nL3BnX3B1YmxpY2F0aW9u LmMgYi9zcmMvYmFja2VuZC9jYXRhbG9nL3BnX3B1YmxpY2F0aW9uLmMKaW5kZXggODJhMjIwNjFk NWIuLmE0YzMwNWYwNjk1IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9jYXRhbG9nL3BnX3B1Ymxp Y2F0aW9uLmMKKysrIGIvc3JjL2JhY2tlbmQvY2F0YWxvZy9wZ19wdWJsaWNhdGlvbi5jCkBAIC0x NjMsNiArMTYzLDM3IEBAIGlzX3B1Ymxpc2hhYmxlX3JlbGF0aW9uKFJlbGF0aW9uIHJlbCkKIAly ZXR1cm4gaXNfcHVibGlzaGFibGVfY2xhc3MoUmVsYXRpb25HZXRSZWxpZChyZWwpLCByZWwtPnJk X3JlbCk7CiB9CiAKKy8qCisgKiBTaW1pbGFyIHRvIGlzX3B1Ymxpc2hhYmxlX2NsYXNzKCkgYnV0 IGNoZWNrcyB3aGV0aGVyIHRoZSBnaXZlbiBPSUQKKyAqIGlzIGEgcHVibGlzaGFibGUgInRhYmxl IiBvciBub3QuCisgKi8KK3N0YXRpYyBib29sCitpc19wdWJsaXNoYWJsZV90YWJsZShPaWQgdGFi bGVvaWQpCit7CisJSGVhcFR1cGxlCXR1cGxlOworCUZvcm1fcGdfY2xhc3MgcmVsZm9ybTsKKwor CXR1cGxlID0gU2VhcmNoU3lzQ2FjaGUxKFJFTE9JRCwgT2JqZWN0SWRHZXREYXR1bSh0YWJsZW9p ZCkpOworCWlmICghSGVhcFR1cGxlSXNWYWxpZCh0dXBsZSkpCisJCXJldHVybiBmYWxzZTsKKwor CXJlbGZvcm0gPSAoRm9ybV9wZ19jbGFzcykgR0VUU1RSVUNUKHR1cGxlKTsKKworCS8qCisJICog U2VxdWVuY2VzIGFyZSBwdWJsaXNoYWJsZSBhY2NvcmRpbmcgdG8gaXNfcHVibGlzaGFibGVfY2xh c3MoKSBzbworCSAqIGV4cGxpY2l0bHkgZXhjbHVkZSBoZXJlLgorCSAqLworCWlmIChyZWxmb3Jt LT5yZWxraW5kICE9IFJFTEtJTkRfU0VRVUVOQ0UgJiYKKwkJaXNfcHVibGlzaGFibGVfY2xhc3Mo dGFibGVvaWQsIHJlbGZvcm0pKQorCXsKKwkJUmVsZWFzZVN5c0NhY2hlKHR1cGxlKTsKKwkJcmV0 dXJuIHRydWU7CisJfQorCisJUmVsZWFzZVN5c0NhY2hlKHR1cGxlKTsKKwlyZXR1cm4gZmFsc2U7 Cit9CisKIC8qCiAgKiBTUUwtY2FsbGFibGUgdmFyaWFudCBvZiB0aGUgYWJvdmUKICAqCkBAIC0x MjY0LDEyICsxMjk1LDExNiBAQCBHZXRQdWJsaWNhdGlvbkJ5TmFtZShjb25zdCBjaGFyICpwdWJu YW1lLCBib29sIG1pc3Npbmdfb2spCiB9CiAKIC8qCi0gKiBHZXQgaW5mb3JtYXRpb24gb2YgdGhl IHRhYmxlcyBpbiB0aGUgZ2l2ZW4gcHVibGljYXRpb24gYXJyYXkuCisgKiBBIGhlbHBlciBmdW5j dGlvbiBmb3IgcGdfZ2V0X3B1YmxpY2F0aW9uX3RhYmxlcygpIHRvIGNoZWNrIHdoZXRoZXIgdGhl CisgKiB0YWJsZSBvZiB0aGUgZ2l2ZW4gcmVsaWQgaXMgcHVibGlzaGVkIGZvciB0aGUgc3BlY2lm aWVkIHB1YmxpY2F0aW9uLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gZXZhbHVhdGVzIHRoZSBlZmZl Y3RpdmUgcHVibGlzaGVkIE9JRCBiYXNlZCBvbiB0aGUKKyAqIHB1Ymxpc2hfdmlhX3BhcnRpdGlv bl9yb290IHNldHRpbmcsIHJhdGhlciB0aGFuIGp1c3QgY2hlY2tpbmcgY2F0YWxvZyBlbnRyaWVz CisgKiAoZS5nLiwgcGdfcHVibGljYXRpb25fcmVsKS4gRm9yIGluc3RhbmNlLCB3aGVuIHB1Ymxp c2hfdmlhX3BhcnRpdGlvbl9yb290IGlzCisgKiBmYWxzZSwgaXQgcmV0dXJucyBmYWxzZSBmb3Ig YSBwYXJlbnQgcGFydGl0aW9uZWQgdGFibGUgYW5kIHJldHVybnMgdHJ1ZQorICogZm9yIGl0cyBs ZWFmIHBhcnRpdGlvbnMsIGV2ZW4gaWYgdGhlIHBhcmVudCBpcyB0aGUgb25lIGV4cGxpY2l0bHkg YWRkZWQKKyAqIHRvIHRoZSBwdWJsaWNhdGlvbi4KKyAqCisgKiBGb3IgcGVyZm9ybWFuY2UgcmVh c29ucywgdGhpcyBmdW5jdGlvbiBhdm9pZHMgdGhlIG92ZXJoZWFkIG9mIGNvbnN0cnVjdGluZwor ICogdGhlIGNvbXBsZXRlIGxpc3Qgb2YgcHVibGlzaGVkIHRhYmxlcyBkdXJpbmcgdGhlIGV2YWx1 YXRpb24uIEl0IGNhbiBleGVjdXRlCisgKiBxdWlja2x5IGV2ZW4gd2hlbiB0aGUgcHVibGljYXRp b24gY29udGFpbnMgYSBsYXJnZSBudW1iZXIgb2YgcmVsYXRpb25zLgogICoKLSAqIFJldHVybnMg cHViaWQsIHJlbGlkLCBjb2x1bW4gbGlzdCwgcm93IGZpbHRlciBmb3IgZWFjaCB0YWJsZS4KKyAq IE5vdGU6IHRoaXMgbGVha3MgbWVtb3J5IGZvciB0aGUgYW5jZXN0b3JzIGxpc3QgaW50byB0aGUg Y3VycmVudCBtZW1vcnkKKyAqIGNvbnRleHQuCiAgKi8KLURhdHVtCi1wZ19nZXRfcHVibGljYXRp b25fdGFibGVzKFBHX0ZVTkNUSU9OX0FSR1MpCitzdGF0aWMgYm9vbAoraXNfdGFibGVfcHVibGlz aGFibGVfaW5fcHVibGljYXRpb24oT2lkIHJlbGlkLCBQdWJsaWNhdGlvbiAqcHViKQoreworCWJv b2wJCXJlbGlzcGFydGl0aW9uOworCUxpc3QJICAgKmFuY2VzdG9ycyA9IE5JTDsKKworCS8qCisJ ICogRm9yIG5vbi1wdWJ2aWFyb290IHB1YmxpY2F0aW9ucywgYSBwYXJ0aXRpb25lZCB0YWJsZSBp cyBuZXZlciB0aGUKKwkgKiBlZmZlY3RpdmUgcHVibGlzaGVkIE9JRDsgb25seSBpdHMgbGVhZiBw YXJ0aXRpb25zIGNhbiBiZS4KKwkgKi8KKwlpZiAoIXB1Yi0+cHVidmlhcm9vdCAmJiBnZXRfcmVs X3JlbGtpbmQocmVsaWQpID09IFJFTEtJTkRfUEFSVElUSU9ORURfVEFCTEUpCisJCXJldHVybiBm YWxzZTsKKworCXJlbGlzcGFydGl0aW9uID0gZ2V0X3JlbF9yZWxpc3BhcnRpdGlvbihyZWxpZCk7 CisKKwlpZiAocmVsaXNwYXJ0aXRpb24pCisJCWFuY2VzdG9ycyA9IGdldF9wYXJ0aXRpb25fYW5j ZXN0b3JzKHJlbGlkKTsKKworCWlmIChwdWItPmFsbHRhYmxlcykKKwl7CisJCS8qCisJCSAqIEFM TCBUQUJMRVMgd2l0aCBwdWJ2aWFyb290IGluY2x1ZGVzIG9ubHkgcmVndWxhciB0YWJsZXMgb3Ig dG9wLW1vc3QKKwkJICogcGFydGl0aW9uZWQgdGFibGVzIC0tIG5ldmVyIGNoaWxkIHBhcnRpdGlv bnMuCisJCSAqLworCQlpZiAocHViLT5wdWJ2aWFyb290ICYmIHJlbGlzcGFydGl0aW9uKQorCQkJ cmV0dXJuIGZhbHNlOworCisJCS8qCisJCSAqIEZvciBBTEwgVEFCTEVTIHB1YmxpY2F0aW9ucywg dGhlIHRhYmxlIGlzIHB1Ymxpc2hlZCB1bmxlc3MgaXQKKwkJICogYXBwZWFycyBpbiB0aGUgRVhD RVBUIGNsYXVzZS4gT25seSB0aGUgdG9wLW1vc3QgY2FuIGFwcGVhciBpbiB0aGUKKwkJICogRVhD RVBUIGNsYXVzZSwgc28gZXhjbHVzaW9uIG11c3QgYmUgZXZhbHVhdGVkIGF0IHRoZSB0b3AtbW9z dAorCQkgKiBhbmNlc3RvciBpZiBpdCBoYXMuIFRoZXNlIHB1YmxpY2F0aW9ucyBzdG9yZSBvbmx5 IEVYQ0VQVCdlZCB0YWJsZXMKKwkJICogaW4gcGdfcHVibGljYXRpb25fcmVsLCBzbyBjaGVja2lu ZyBleGlzdGVuY2UgaXMgc3VmZmljaWVudC4KKwkJICoKKwkJICogTm90ZSB0aGF0IHRoaXMgZXhp c3RlbmNlIGNoZWNrIGJlbG93IHdvdWxkIGluY29ycmVjdGx5IHJldHVybiB0cnVlCisJCSAqIChw dWJsaXNoZWQpIGZvciBwYXJ0aXRpb25zIHdoZW4gcHVidmlhcm9vdCBpcyBlbmFibGVkOyBob3dl dmVyLAorCQkgKiB0aGF0IGNhc2UgaXMgYWxyZWFkeSBjYXVnaHQgYW5kIHJldHVybmVkIGZhbHNl IGJ5IHRoZSBhYm92ZSBjaGVjay4KKwkJICovCisJCXJldHVybiAhU2VhcmNoU3lzQ2FjaGVFeGlz dHMyKFBVQkxJQ0FUSU9OUkVMTUFQLAorCQkJCQkJCQkJICBPYmplY3RJZEdldERhdHVtKGFuY2Vz dG9ycworCQkJCQkJCQkJCQkJCSAgID8gbGxhc3Rfb2lkKGFuY2VzdG9ycykgOiByZWxpZCksCisJ CQkJCQkJCQkgIE9iamVjdElkR2V0RGF0dW0ocHViLT5vaWQpKTsKKwl9CisKKwkvKgorCSAqIE5v bi1BTEwtVEFCTEUgcHVibGljYXRpb24gY2FzZXMuCisJICoKKwkgKiBBIHRhYmxlIGlzIHB1Ymxp c2hlZCBpZiBpdCAob3IgYSBjb250YWluaW5nIHNjaGVtYSkgd2FzIGV4cGxpY2l0bHkKKwkgKiBh ZGRlZCwgb3IgaWYgaXQgaXMgYSBwYXJ0aXRpb24gd2hvc2UgYW5jZXN0b3Igd2FzIGFkZGVkLgor CSAqLworCisJLyoKKwkgKiBJZiBhbiBhbmNlc3RvciBpcyBwdWJsaXNoZWQsIHRoZSBwYXJ0aXRp b24ncyBzdGF0dXMgZGVwZW5kcyBvbgorCSAqIHB1Ymxpc2hfdmlhX3BhcnRpdGlvbl9yb290IHZh bHVlLgorCSAqCisJICogSWYgaXQncyB0cnVlLCB0aGUgYW5jZXN0b3IncyByZWxhdGlvbiBPSUQg aXMgdGhlIGVmZmVjdGl2ZSBwdWJsaXNoZWQKKwkgKiBPSUQsIHNvIHRoZSBwYXJ0aXRpb24gaXRz ZWxmIHNob3VsZCBiZSBleGNsdWRlZCAocmV0dXJuIGZhbHNlKS4KKwkgKgorCSAqIElmIGl0J3Mg ZmFsc2UsIHRoZSBwYXJ0aXRpb24gaXMgY292ZXJlZCBieSBpdHMgYW5jZXN0b3IncyBwcmVzZW5j ZSBpbgorCSAqIHRoZSBwdWJsaWNhdGlvbiwgaXQgc2hvdWxkIGJlIGluY2x1ZGVkIChyZXR1cm4g dHJ1ZSkuCisJICovCisJaWYgKHJlbGlzcGFydGl0aW9uICYmCisJCU9pZElzVmFsaWQoR2V0VG9w TW9zdEFuY2VzdG9ySW5QdWJsaWNhdGlvbihwdWItPm9pZCwgYW5jZXN0b3JzLCBOVUxMKSkpCisJ CXJldHVybiAhcHViLT5wdWJ2aWFyb290OworCisJLyoKKwkgKiBDaGVjayB3aGV0aGVyIHRoZSB0 YWJsZSBpcyBleHBsaWNpdGx5IHB1Ymxpc2hlZCB2aWEgcGdfcHVibGljYXRpb25fcmVsCisJICog b3IgcGdfcHVibGljYXRpb25fbmFtZXNwYWNlLgorCSAqLworCXJldHVybiAoU2VhcmNoU3lzQ2Fj aGVFeGlzdHMyKFBVQkxJQ0FUSU9OUkVMTUFQLAorCQkJCQkJCQkgIE9iamVjdElkR2V0RGF0dW0o cmVsaWQpLAorCQkJCQkJCQkgIE9iamVjdElkR2V0RGF0dW0ocHViLT5vaWQpKSB8fAorCQkJU2Vh cmNoU3lzQ2FjaGVFeGlzdHMyKFBVQkxJQ0FUSU9OTkFNRVNQQUNFTUFQLAorCQkJCQkJCQkgIE9i amVjdElkR2V0RGF0dW0oZ2V0X3JlbF9uYW1lc3BhY2UocmVsaWQpKSwKKwkJCQkJCQkJICBPYmpl Y3RJZEdldERhdHVtKHB1Yi0+b2lkKSkpOworfQorCisvKgorICogSGVscGVyIGZ1bmN0aW9uIHRv IGdldCBpbmZvcm1hdGlvbiBvZiB0aGUgdGFibGVzIGluIHRoZSBnaXZlbgorICogcHVibGljYXRp b24ocykuCisgKgorICogSWYgZmlsdGVyX2J5X3JlbGlkIGlzIHRydWUsIG9ubHkgdGhlIHJvdyBm b3IgdGFyZ2V0X3JlbGlkIGlzIHJldHVybmVkOworICogaWYgdGFyZ2V0X3JlbGlkIGRvZXMgbm90 IGV4aXN0IG9yIGlzIG5vdCBwYXJ0IG9mIHRoZSBwdWJsaWNhdGlvbnMsIHplcm8KKyAqIHJvd3Mg YXJlIHJldHVybmVkLiAgSWYgZmlsdGVyX2J5X3JlbGlkIGlzIGZhbHNlLCByb3dzIGZvciBhbGwg dGFibGVzCisgKiB3aXRoaW4gdGhlIHNwZWNpZmllZCBwdWJsaWNhdGlvbnMgYXJlIHJldHVybmVk IGFuZCB0YXJnZXRfcmVsaWQgaXMKKyAqIGlnbm9yZWQuCisgKgorICogUmV0dXJucyBwdWJpZCwg cmVsaWQsIGNvbHVtbiBsaXN0LCBhbmQgcm93IGZpbHRlciBmb3IgZWFjaCB0YWJsZS4KKyAqLwor c3RhdGljIERhdHVtCitwZ19nZXRfcHVibGljYXRpb25fdGFibGVzKEZ1bmN0aW9uQ2FsbEluZm8g ZmNpbmZvLCBBcnJheVR5cGUgKnB1Ym5hbWVzLAorCQkJCQkJICBPaWQgdGFyZ2V0X3JlbGlkLCBi b29sIGZpbHRlcl9ieV9yZWxpZCwKKwkJCQkJCSAgYm9vbCBwdWJfbWlzc2luZ19vaykKIHsKICNk ZWZpbmUgTlVNX1BVQkxJQ0FUSU9OX1RBQkxFU19FTEVNCTQKIAlGdW5jQ2FsbENvbnRleHQgKmZ1 bmNjdHg7CkBAIC0xMjgwLDcgKzE0MTUsNiBAQCBwZ19nZXRfcHVibGljYXRpb25fdGFibGVzKFBH X0ZVTkNUSU9OX0FSR1MpCiAJewogCQlUdXBsZURlc2MJdHVwZGVzYzsKIAkJTWVtb3J5Q29udGV4 dCBvbGRjb250ZXh0OwotCQlBcnJheVR5cGUgICphcnI7CiAJCURhdHVtCSAgICplbGVtczsKIAkJ aW50CQkJbmVsZW1zLAogCQkJCQlpOwpAQCAtMTI4OSw2ICsxNDIzLDE0IEBAIHBnX2dldF9wdWJs aWNhdGlvbl90YWJsZXMoUEdfRlVOQ1RJT05fQVJHUykKIAkJLyogY3JlYXRlIGEgZnVuY3Rpb24g Y29udGV4dCBmb3IgY3Jvc3MtY2FsbCBwZXJzaXN0ZW5jZSAqLwogCQlmdW5jY3R4ID0gU1JGX0ZJ UlNUQ0FMTF9JTklUKCk7CiAKKwkJLyoKKwkJICogUHJlbGltaW5hcnkgY2hlY2sgaWYgdGhlIHNw ZWNpZmllZCB0YWJsZSBjYW4gYmUgcHVibGlzaGVkIGluIHRoZQorCQkgKiBmaXJzdCBwbGFjZS4g SWYgbm90LCB3ZSBjYW4gcmV0dXJuIGVhcmx5IHdpdGhvdXQgY2hlY2tpbmcgdGhlIGdpdmVuCisJ CSAqIHB1YmxpY2F0aW9ucyBhbmQgdGhlIHRhYmxlLgorCQkgKi8KKwkJaWYgKGZpbHRlcl9ieV9y ZWxpZCAmJiAhaXNfcHVibGlzaGFibGVfdGFibGUodGFyZ2V0X3JlbGlkKSkKKwkJCVNSRl9SRVRV Uk5fRE9ORShmdW5jY3R4KTsKKwogCQkvKiBzd2l0Y2ggdG8gbWVtb3J5IGNvbnRleHQgYXBwcm9w cmlhdGUgZm9yIG11bHRpcGxlIGZ1bmN0aW9uIGNhbGxzICovCiAJCW9sZGNvbnRleHQgPSBNZW1v cnlDb250ZXh0U3dpdGNoVG8oZnVuY2N0eC0+bXVsdGlfY2FsbF9tZW1vcnlfY3R4KTsKIApAQCAt MTI5Niw4ICsxNDM4LDcgQEAgcGdfZ2V0X3B1YmxpY2F0aW9uX3RhYmxlcyhQR19GVU5DVElPTl9B UkdTKQogCQkgKiBEZWNvbnN0cnVjdCB0aGUgcGFyYW1ldGVyIGludG8gZWxlbWVudHMgd2hlcmUg ZWFjaCBlbGVtZW50IGlzIGEKIAkJICogcHVibGljYXRpb24gbmFtZS4KIAkJICovCi0JCWFyciA9 IFBHX0dFVEFSR19BUlJBWVRZUEVfUCgwKTsKLQkJZGVjb25zdHJ1Y3RfYXJyYXlfYnVpbHRpbihh cnIsIFRFWFRPSUQsICZlbGVtcywgTlVMTCwgJm5lbGVtcyk7CisJCWRlY29uc3RydWN0X2FycmF5 X2J1aWx0aW4ocHVibmFtZXMsIFRFWFRPSUQsICZlbGVtcywgTlVMTCwgJm5lbGVtcyk7CiAKIAkJ LyogR2V0IE9pZHMgb2YgdGFibGVzIGZyb20gZWFjaCBwdWJsaWNhdGlvbi4gKi8KIAkJZm9yIChp ID0gMDsgaSA8IG5lbGVtczsgaSsrKQpAQCAtMTMwNiwzMiArMTQ0Nyw0OCBAQCBwZ19nZXRfcHVi bGljYXRpb25fdGFibGVzKFBHX0ZVTkNUSU9OX0FSR1MpCiAJCQlMaXN0CSAgICpwdWJfZWxlbV90 YWJsZXMgPSBOSUw7CiAJCQlMaXN0Q2VsbCAgICpsYzsKIAotCQkJcHViX2VsZW0gPSBHZXRQdWJs aWNhdGlvbkJ5TmFtZShUZXh0RGF0dW1HZXRDU3RyaW5nKGVsZW1zW2ldKSwgZmFsc2UpOworCQkJ cHViX2VsZW0gPSBHZXRQdWJsaWNhdGlvbkJ5TmFtZShUZXh0RGF0dW1HZXRDU3RyaW5nKGVsZW1z W2ldKSwKKwkJCQkJCQkJCQkJcHViX21pc3Npbmdfb2spOwogCi0JCQkvKgotCQkJICogUHVibGlj YXRpb25zIHN1cHBvcnQgcGFydGl0aW9uZWQgdGFibGVzLiBJZgotCQkJICogcHVibGlzaF92aWFf cGFydGl0aW9uX3Jvb3QgaXMgZmFsc2UsIGFsbCBjaGFuZ2VzIGFyZSByZXBsaWNhdGVkCi0JCQkg KiB1c2luZyBsZWFmIHBhcnRpdGlvbiBpZGVudGl0eSBhbmQgc2NoZW1hLCBzbyB3ZSBvbmx5IG5l ZWQKLQkJCSAqIHRob3NlLiBPdGhlcndpc2UsIGdldCB0aGUgcGFydGl0aW9uZWQgdGFibGUgaXRz ZWxmLgotCQkJICovCi0JCQlpZiAocHViX2VsZW0tPmFsbHRhYmxlcykKLQkJCQlwdWJfZWxlbV90 YWJsZXMgPSBHZXRBbGxQdWJsaWNhdGlvblJlbGF0aW9ucyhwdWJfZWxlbS0+b2lkLAotCQkJCQkJ CQkJCQkJCQkJIFJFTEtJTkRfUkVMQVRJT04sCi0JCQkJCQkJCQkJCQkJCQkgcHViX2VsZW0tPnB1 YnZpYXJvb3QpOworCQkJaWYgKHB1Yl9lbGVtID09IE5VTEwpCisJCQkJY29udGludWU7CisKKwkJ CWlmIChmaWx0ZXJfYnlfcmVsaWQpCisJCQl7CisJCQkJLyogQ2hlY2sgaWYgdGhlIGdpdmVuIHRh YmxlIGlzIHB1Ymxpc2hlZCBmb3IgdGhlIHB1YmxpY2F0aW9uICovCisJCQkJaWYgKGlzX3RhYmxl X3B1Ymxpc2hhYmxlX2luX3B1YmxpY2F0aW9uKHRhcmdldF9yZWxpZCwgcHViX2VsZW0pKQorCQkJ CXsKKwkJCQkJcHViX2VsZW1fdGFibGVzID0gbGlzdF9tYWtlMV9vaWQodGFyZ2V0X3JlbGlkKTsK KwkJCQl9CisJCQl9CiAJCQllbHNlCiAJCQl7Ci0JCQkJTGlzdAkgICAqcmVsaWRzLAotCQkJCQkJ ICAgKnNjaGVtYXJlbGlkczsKLQotCQkJCXJlbGlkcyA9IEdldEluY2x1ZGVkUHVibGljYXRpb25S ZWxhdGlvbnMocHViX2VsZW0tPm9pZCwKLQkJCQkJCQkJCQkJCQkJIHB1Yl9lbGVtLT5wdWJ2aWFy b290ID8KLQkJCQkJCQkJCQkJCQkJIFBVQkxJQ0FUSU9OX1BBUlRfUk9PVCA6Ci0JCQkJCQkJCQkJ CQkJCSBQVUJMSUNBVElPTl9QQVJUX0xFQUYpOwotCQkJCXNjaGVtYXJlbGlkcyA9IEdldEFsbFNj aGVtYVB1YmxpY2F0aW9uUmVsYXRpb25zKHB1Yl9lbGVtLT5vaWQsCi0JCQkJCQkJCQkJCQkJCQkJ cHViX2VsZW0tPnB1YnZpYXJvb3QgPwotCQkJCQkJCQkJCQkJCQkJCVBVQkxJQ0FUSU9OX1BBUlRf Uk9PVCA6Ci0JCQkJCQkJCQkJCQkJCQkJUFVCTElDQVRJT05fUEFSVF9MRUFGKTsKLQkJCQlwdWJf ZWxlbV90YWJsZXMgPSBsaXN0X2NvbmNhdF91bmlxdWVfb2lkKHJlbGlkcywgc2NoZW1hcmVsaWRz KTsKKwkJCQkvKgorCQkJCSAqIFB1YmxpY2F0aW9ucyBzdXBwb3J0IHBhcnRpdGlvbmVkIHRhYmxl cy4gSWYKKwkJCQkgKiBwdWJsaXNoX3ZpYV9wYXJ0aXRpb25fcm9vdCBpcyBmYWxzZSwgYWxsIGNo YW5nZXMgYXJlCisJCQkJICogcmVwbGljYXRlZCB1c2luZyBsZWFmIHBhcnRpdGlvbiBpZGVudGl0 eSBhbmQgc2NoZW1hLCBzbyB3ZQorCQkJCSAqIG9ubHkgbmVlZCB0aG9zZS4gT3RoZXJ3aXNlLCBn ZXQgdGhlIHBhcnRpdGlvbmVkIHRhYmxlCisJCQkJICogaXRzZWxmLgorCQkJCSAqLworCQkJCWlm IChwdWJfZWxlbS0+YWxsdGFibGVzKQorCQkJCQlwdWJfZWxlbV90YWJsZXMgPSBHZXRBbGxQdWJs aWNhdGlvblJlbGF0aW9ucyhwdWJfZWxlbS0+b2lkLAorCQkJCQkJCQkJCQkJCQkJCSBSRUxLSU5E X1JFTEFUSU9OLAorCQkJCQkJCQkJCQkJCQkJCSBwdWJfZWxlbS0+cHVidmlhcm9vdCk7CisJCQkJ ZWxzZQorCQkJCXsKKwkJCQkJTGlzdAkgICAqcmVsaWRzLAorCQkJCQkJCSAgICpzY2hlbWFyZWxp ZHM7CisKKwkJCQkJcmVsaWRzID0gR2V0SW5jbHVkZWRQdWJsaWNhdGlvblJlbGF0aW9ucyhwdWJf ZWxlbS0+b2lkLAorCQkJCQkJCQkJCQkJCQkJIHB1Yl9lbGVtLT5wdWJ2aWFyb290ID8KKwkJCQkJ CQkJCQkJCQkJCSBQVUJMSUNBVElPTl9QQVJUX1JPT1QgOgorCQkJCQkJCQkJCQkJCQkJIFBVQkxJ Q0FUSU9OX1BBUlRfTEVBRik7CisJCQkJCXNjaGVtYXJlbGlkcyA9IEdldEFsbFNjaGVtYVB1Ymxp Y2F0aW9uUmVsYXRpb25zKHB1Yl9lbGVtLT5vaWQsCisJCQkJCQkJCQkJCQkJCQkJCXB1Yl9lbGVt LT5wdWJ2aWFyb290ID8KKwkJCQkJCQkJCQkJCQkJCQkJUFVCTElDQVRJT05fUEFSVF9ST09UIDoK KwkJCQkJCQkJCQkJCQkJCQkJUFVCTElDQVRJT05fUEFSVF9MRUFGKTsKKwkJCQkJcHViX2VsZW1f dGFibGVzID0gbGlzdF9jb25jYXRfdW5pcXVlX29pZChyZWxpZHMsIHNjaGVtYXJlbGlkcyk7CisJ CQkJfQogCQkJfQogCiAJCQkvKgpAQCAtMTQ5MSw2ICsxNjQ4LDMwIEBAIHBnX2dldF9wdWJsaWNh dGlvbl90YWJsZXMoUEdfRlVOQ1RJT05fQVJHUykKIAlTUkZfUkVUVVJOX0RPTkUoZnVuY2N0eCk7 CiB9CiAKK0RhdHVtCitwZ19nZXRfcHVibGljYXRpb25fdGFibGVzX2EoUEdfRlVOQ1RJT05fQVJH UykKK3sKKwkvKgorCSAqIEdldCBpbmZvcm1hdGlvbiBmb3IgYWxsIHRhYmxlcyBpbiB0aGUgZ2l2 ZW4gcHVibGljYXRpb25zLgorCSAqIGZpbHRlcl9ieV9yZWxpZCBpcyBmYWxzZSBzbyBhbGwgdGFi bGVzIGFyZSByZXR1cm5lZDsgcHViX21pc3Npbmdfb2sgaXMKKwkgKiBmYWxzZSBmb3IgYmFja3dh cmQgY29tcGF0aWJpbGl0eS4KKwkgKi8KKwlyZXR1cm4gcGdfZ2V0X3B1YmxpY2F0aW9uX3RhYmxl cyhmY2luZm8sIFBHX0dFVEFSR19BUlJBWVRZUEVfUCgwKSwKKwkJCQkJCQkJCSBJbnZhbGlkT2lk LCBmYWxzZSwgZmFsc2UpOworfQorCitEYXR1bQorcGdfZ2V0X3B1YmxpY2F0aW9uX3RhYmxlc19i KFBHX0ZVTkNUSU9OX0FSR1MpCit7CisJLyoKKwkgKiBHZXQgaW5mb3JtYXRpb24gZm9yIHRoZSBz cGVjaWZpZWQgdGFibGUgaW4gdGhlIGdpdmVuIHB1YmxpY2F0aW9ucy4gVGhlCisJICogU1FMLWxl dmVsIGZ1bmN0aW9uIGlzIGRlY2xhcmVkIFNUUklDVCwgc28gdGFyZ2V0X3JlbGlkIGlzIGd1YXJh bnRlZWQgdG8KKwkgKiBiZSBub24tTlVMTCBoZXJlLgorCSAqLworCXJldHVybiBwZ19nZXRfcHVi bGljYXRpb25fdGFibGVzKGZjaW5mbywgUEdfR0VUQVJHX0FSUkFZVFlQRV9QKDApLAorCQkJCQkJ CQkJIFBHX0dFVEFSR19PSUQoMSksIHRydWUsIHRydWUpOworfQorCiAvKgogICogUmV0dXJucyBP aWRzIG9mIHNlcXVlbmNlcyBpbiBhIHB1YmxpY2F0aW9uLgogICovCmRpZmYgLS1naXQgYS9zcmMv YmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3RhYmxlc3luYy5jIGIvc3JjL2JhY2tlbmQvcmVw bGljYXRpb24vbG9naWNhbC90YWJsZXN5bmMuYwppbmRleCBmNDlhNDg1MmVjYi4uZWI3MTgxMTQy OTcgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvdGFibGVzeW5j LmMKKysrIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC90YWJsZXN5bmMuYwpAQCAt Nzk4LDE3ICs3OTgsMzUgQEAgZmV0Y2hfcmVtb3RlX3RhYmxlX2luZm8oY2hhciAqbnNwbmFtZSwg Y2hhciAqcmVsbmFtZSwgTG9naWNhbFJlcFJlbGF0aW9uICpscmVsLAogCQkgKiBwdWJsaWNhdGlv bnMpLgogCQkgKi8KIAkJcmVzZXRTdHJpbmdJbmZvKCZjbWQpOwotCQlhcHBlbmRTdHJpbmdJbmZv KCZjbWQsCi0JCQkJCQkgIlNFTEVDVCBESVNUSU5DVCIKLQkJCQkJCSAiICAoQ0FTRSBXSEVOIChh cnJheV9sZW5ndGgoZ3B0LmF0dHJzLCAxKSA9IGMucmVsbmF0dHMpIgotCQkJCQkJICIgICBUSEVO IE5VTEwgRUxTRSBncHQuYXR0cnMgRU5EKSIKLQkJCQkJCSAiICBGUk9NIHBnX3B1YmxpY2F0aW9u IHAsIgotCQkJCQkJICIgIExBVEVSQUwgcGdfZ2V0X3B1YmxpY2F0aW9uX3RhYmxlcyhwLnB1Ym5h bWUpIGdwdCwiCi0JCQkJCQkgIiAgcGdfY2xhc3MgYyIKLQkJCQkJCSAiIFdIRVJFIGdwdC5yZWxp ZCA9ICV1IEFORCBjLm9pZCA9IGdwdC5yZWxpZCIKLQkJCQkJCSAiICAgQU5EIHAucHVibmFtZSBJ TiAoICVzICkiLAotCQkJCQkJIGxyZWwtPnJlbW90ZWlkLAotCQkJCQkJIHB1Yl9uYW1lcy0+ZGF0 YSk7CisKKwkJaWYgKHNlcnZlcl92ZXJzaW9uID49IDE5MDAwMCkKKwkJeworCQkJLyoKKwkJCSAq IFdlIGNhbiBwYXNzIGJvdGggcHVibGljYXRpb24gbmFtZXMgYW5kIHJlbGlkIHRvCisJCQkgKiBw Z19nZXRfcHVibGljYXRpb25fdGFibGVzKCkgc2luY2UgdmVyc2lvbiAxOS4KKwkJCSAqLworCQkJ YXBwZW5kU3RyaW5nSW5mbygmY21kLAorCQkJCQkJCSAiU0VMRUNUIERJU1RJTkNUIgorCQkJCQkJ CSAiICAoQ0FTRSBXSEVOIChhcnJheV9sZW5ndGgoZ3B0LmF0dHJzLCAxKSA9IGMucmVsbmF0dHMp IgorCQkJCQkJCSAiICAgVEhFTiBOVUxMIEVMU0UgZ3B0LmF0dHJzIEVORCkiCisJCQkJCQkJICIg IEZST00gcGdfZ2V0X3B1YmxpY2F0aW9uX3RhYmxlcyhBUlJBWVslc10sICV1KSBncHQsIgorCQkJ CQkJCSAiICBwZ19jbGFzcyBjIgorCQkJCQkJCSAiIFdIRVJFIGMub2lkID0gZ3B0LnJlbGlkIiwK KwkJCQkJCQkgcHViX25hbWVzLT5kYXRhLAorCQkJCQkJCSBscmVsLT5yZW1vdGVpZCk7CisJCX0K KwkJZWxzZQorCQkJYXBwZW5kU3RyaW5nSW5mbygmY21kLAorCQkJCQkJCSAiU0VMRUNUIERJU1RJ TkNUIgorCQkJCQkJCSAiICAoQ0FTRSBXSEVOIChhcnJheV9sZW5ndGgoZ3B0LmF0dHJzLCAxKSA9 IGMucmVsbmF0dHMpIgorCQkJCQkJCSAiICAgVEhFTiBOVUxMIEVMU0UgZ3B0LmF0dHJzIEVORCki CisJCQkJCQkJICIgIEZST00gcGdfcHVibGljYXRpb24gcCwiCisJCQkJCQkJICIgIExBVEVSQUwg cGdfZ2V0X3B1YmxpY2F0aW9uX3RhYmxlcyhwLnB1Ym5hbWUpIGdwdCwiCisJCQkJCQkJICIgIHBn X2NsYXNzIGMiCisJCQkJCQkJICIgV0hFUkUgZ3B0LnJlbGlkID0gJXUgQU5EIGMub2lkID0gZ3B0 LnJlbGlkIgorCQkJCQkJCSAiICAgQU5EIHAucHVibmFtZSBJTiAoICVzICkiLAorCQkJCQkJCSBs cmVsLT5yZW1vdGVpZCwKKwkJCQkJCQkgcHViX25hbWVzLT5kYXRhKTsKIAogCQlwdWJyZXMgPSB3 YWxyY3ZfZXhlYyhMb2dSZXBXb3JrZXJXYWxSY3ZDb25uLCBjbWQuZGF0YSwKIAkJCQkJCQkgbGVu Z3Rob2YoYXR0cnNSb3cpLCBhdHRyc1Jvdyk7CkBAIC05ODIsMTQgKzEwMDAsMjggQEAgZmV0Y2hf cmVtb3RlX3RhYmxlX2luZm8oY2hhciAqbnNwbmFtZSwgY2hhciAqcmVsbmFtZSwgTG9naWNhbFJl cFJlbGF0aW9uICpscmVsLAogCiAJCS8qIENoZWNrIGZvciByb3cgZmlsdGVycy4gKi8KIAkJcmVz ZXRTdHJpbmdJbmZvKCZjbWQpOwotCQlhcHBlbmRTdHJpbmdJbmZvKCZjbWQsCi0JCQkJCQkgIlNF TEVDVCBESVNUSU5DVCBwZ19nZXRfZXhwcihncHQucXVhbCwgZ3B0LnJlbGlkKSIKLQkJCQkJCSAi ICBGUk9NIHBnX3B1YmxpY2F0aW9uIHAsIgotCQkJCQkJICIgIExBVEVSQUwgcGdfZ2V0X3B1Ymxp Y2F0aW9uX3RhYmxlcyhwLnB1Ym5hbWUpIGdwdCIKLQkJCQkJCSAiIFdIRVJFIGdwdC5yZWxpZCA9 ICV1IgotCQkJCQkJICIgICBBTkQgcC5wdWJuYW1lIElOICggJXMgKSIsCi0JCQkJCQkgbHJlbC0+ cmVtb3RlaWQsCi0JCQkJCQkgcHViX25hbWVzLT5kYXRhKTsKKworCQlpZiAoc2VydmVyX3ZlcnNp b24gPj0gMTkwMDAwKQorCQl7CisJCQkvKgorCQkJICogV2UgY2FuIHBhc3MgYm90aCBwdWJsaWNh dGlvbiBuYW1lcyBhbmQgcmVsaWQgdG8KKwkJCSAqIHBnX2dldF9wdWJsaWNhdGlvbl90YWJsZXMo KSBzaW5jZSB2ZXJzaW9uIDE5LgorCQkJICovCisJCQlhcHBlbmRTdHJpbmdJbmZvKCZjbWQsCisJ CQkJCQkJICJTRUxFQ1QgRElTVElOQ1QgcGdfZ2V0X2V4cHIoZ3B0LnF1YWwsIGdwdC5yZWxpZCki CisJCQkJCQkJICIgIEZST00gcGdfZ2V0X3B1YmxpY2F0aW9uX3RhYmxlcyhBUlJBWVslc10sICV1 KSBncHQiLAorCQkJCQkJCSBwdWJfbmFtZXMtPmRhdGEsCisJCQkJCQkJIGxyZWwtPnJlbW90ZWlk KTsKKwkJfQorCQllbHNlCisJCQlhcHBlbmRTdHJpbmdJbmZvKCZjbWQsCisJCQkJCQkJICJTRUxF Q1QgRElTVElOQ1QgcGdfZ2V0X2V4cHIoZ3B0LnF1YWwsIGdwdC5yZWxpZCkiCisJCQkJCQkJICIg IEZST00gcGdfcHVibGljYXRpb24gcCwiCisJCQkJCQkJICIgIExBVEVSQUwgcGdfZ2V0X3B1Ymxp Y2F0aW9uX3RhYmxlcyhwLnB1Ym5hbWUpIGdwdCIKKwkJCQkJCQkgIiBXSEVSRSBncHQucmVsaWQg PSAldSIKKwkJCQkJCQkgIiAgIEFORCBwLnB1Ym5hbWUgSU4gKCAlcyApIiwKKwkJCQkJCQkgbHJl bC0+cmVtb3RlaWQsCisJCQkJCQkJIHB1Yl9uYW1lcy0+ZGF0YSk7CiAKIAkJcmVzID0gd2FscmN2 X2V4ZWMoTG9nUmVwV29ya2VyV2FsUmN2Q29ubiwgY21kLmRhdGEsIDEsIHF1YWxSb3cpOwogCmRp ZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3Byb2MuZGF0IGIvc3JjL2luY2x1ZGUv Y2F0YWxvZy9wZ19wcm9jLmRhdAppbmRleCAzNTc5Y2VjNTc0NC4uYWZkY2M5MTVmMDggMTAwNjQ0 Ci0tLSBhL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfcHJvYy5kYXQKKysrIGIvc3JjL2luY2x1ZGUv Y2F0YWxvZy9wZ19wcm9jLmRhdApAQCAtMTI0NjgsNyArMTI0NjgsMTYgQEAKICAgcHJvYWxsYXJn dHlwZXMgPT4gJ3tfdGV4dCxvaWQsb2lkLGludDJ2ZWN0b3IscGdfbm9kZV90cmVlfScsCiAgIHBy b2FyZ21vZGVzID0+ICd7dixvLG8sbyxvfScsCiAgIHByb2FyZ25hbWVzID0+ICd7cHVibmFtZSxw dWJpZCxyZWxpZCxhdHRycyxxdWFsfScsCi0gIHByb3NyYyA9PiAncGdfZ2V0X3B1YmxpY2F0aW9u X3RhYmxlcycgfSwKKyAgcHJvc3JjID0+ICdwZ19nZXRfcHVibGljYXRpb25fdGFibGVzX2EnIH0s Cit7IG9pZCA9PiAnODA2MCcsCisgIGRlc2NyID0+ICdnZXQgaW5mb3JtYXRpb24gb2YgdGhlIHNw ZWNpZmllZCB0YWJsZSB0aGF0IGlzIHBhcnQgb2YgdGhlIHNwZWNpZmllZCBwdWJsaWNhdGlvbnMn LAorICBwcm9uYW1lID0+ICdwZ19nZXRfcHVibGljYXRpb25fdGFibGVzJywgcHJvcm93cyA9PiAn MTAnLAorICBwcm9yZXRzZXQgPT4gJ3QnLCBwcm92b2xhdGlsZSA9PiAncycsCisgIHByb3JldHR5 cGUgPT4gJ3JlY29yZCcsIHByb2FyZ3R5cGVzID0+ICdfdGV4dCBvaWQnLAorICBwcm9hbGxhcmd0 eXBlcyA9PiAne190ZXh0LG9pZCxvaWQsb2lkLGludDJ2ZWN0b3IscGdfbm9kZV90cmVlfScsCisg IHByb2FyZ21vZGVzID0+ICd7aSxpLG8sbyxvLG99JywKKyAgcHJvYXJnbmFtZXMgPT4gJ3twdWJu YW1lcyx0YXJnZXRfcmVsaWQscHViaWQscmVsaWQsYXR0cnMscXVhbH0nLAorICBwcm9zcmMgPT4g J3BnX2dldF9wdWJsaWNhdGlvbl90YWJsZXNfYicgfSwKIHsgb2lkID0+ICc4MDUyJywgZGVzY3Ig PT4gJ2dldCBPSURzIG9mIHNlcXVlbmNlcyBpbiBhIHB1YmxpY2F0aW9uJywKICAgcHJvbmFtZSA9 PiAncGdfZ2V0X3B1YmxpY2F0aW9uX3NlcXVlbmNlcycsIHByb3Jvd3MgPT4gJzEwMDAnLCBwcm9y ZXRzZXQgPT4gJ3QnLAogICBwcm92b2xhdGlsZSA9PiAncycsIHByb3JldHR5cGUgPT4gJ29pZCcs IHByb2FyZ3R5cGVzID0+ICd0ZXh0JywKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhw ZWN0ZWQvcHVibGljYXRpb24ub3V0IGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9wdWJsaWNh dGlvbi5vdXQKaW5kZXggZDJhYTlkNDVlNGEuLjZmNTVhMzk0Y2UxIDEwMDY0NAotLS0gYS9zcmMv dGVzdC9yZWdyZXNzL2V4cGVjdGVkL3B1YmxpY2F0aW9uLm91dAorKysgYi9zcmMvdGVzdC9yZWdy ZXNzL2V4cGVjdGVkL3B1YmxpY2F0aW9uLm91dApAQCAtMjI5Miw2ICsyMjkyLDIzMSBAQCBEUk9Q IFRBQkxFIHRlc3RwdWJfbWVyZ2VfcGs7CiBSRVNFVCBTRVNTSU9OIEFVVEhPUklaQVRJT047CiBE Uk9QIFJPTEUgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyLCByZWdyZXNzX3B1YmxpY2F0aW9uX3Vz ZXIyOwogRFJPUCBST0xFIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlcl9kdW1teTsKKy0tIFRlc3Qg cGdfZ2V0X3B1YmxpY2F0aW9uX3RhYmxlcyh0ZXh0W10sIG9pZCkgZnVuY3Rpb24KK0NSRUFURSBT Q0hFTUEgZ3B0X3Rlc3Rfc2NoOworQ1JFQVRFIFRBQkxFIGdwdF90ZXN0X3NjaC50Ymxfc2NoIChp ZCBpbnQpOworQ1JFQVRFIFRBQkxFIHRibF9ub3JtYWwgKGlkIGludCk7CitDUkVBVEUgVEFCTEUg dGJsX3BhcmVudCAoaWQxIGludCwgaWQyIGludCwgaWQzIGludCkgUEFSVElUSU9OIEJZIFJBTkdF IChpZDEpOworQ1JFQVRFIFRBQkxFIHRibF9wYXJ0MSBQQVJUSVRJT04gT0YgdGJsX3BhcmVudCBG T1IgVkFMVUVTIEZST00gKDEpIFRPICgxMCk7CitDUkVBVEUgVklFVyBncHRfdGVzdF92aWV3IEFT IFNFTEVDVCAqIEZST00gdGJsX25vcm1hbDsKK1NFVCBjbGllbnRfbWluX21lc3NhZ2VzID0gJ0VS Uk9SJzsKK0NSRUFURSBQVUJMSUNBVElPTiBwdWJfYWxsIEZPUiBBTEwgVEFCTEVTIFdJVEggKHB1 Ymxpc2hfdmlhX3BhcnRpdGlvbl9yb290ID0gdHJ1ZSk7CitDUkVBVEUgUFVCTElDQVRJT04gcHVi X2FsbF9ub192aWFyb290IEZPUiBBTEwgVEFCTEVTIFdJVEggKHB1Ymxpc2hfdmlhX3BhcnRpdGlv bl9yb290ID0gZmFsc2UpOworQ1JFQVRFIFBVQkxJQ0FUSU9OIHB1Yl9hbGxfZXhjZXB0IEZPUiBB TEwgVEFCTEVTIEVYQ0VQVCAoVEFCTEUgdGJsX3BhcmVudCwgZ3B0X3Rlc3Rfc2NoLnRibF9zY2gp IFdJVEggKHB1Ymxpc2hfdmlhX3BhcnRpdGlvbl9yb290ID0gZmFsc2UpOworQ1JFQVRFIFBVQkxJ Q0FUSU9OIHB1Yl9hbGxfZXhjZXB0X25vX3ZpYXJvb3QgRk9SIEFMTCBUQUJMRVMgRVhDRVBUIChU QUJMRSB0YmxfcGFyZW50LCBncHRfdGVzdF9zY2gudGJsX3NjaCkgV0lUSCAocHVibGlzaF92aWFf cGFydGl0aW9uX3Jvb3QgPSB0cnVlKTsKK0NSRUFURSBQVUJMSUNBVElPTiBwdWJfc2NoZW1hIEZP UiBUQUJMRVMgSU4gU0NIRU1BIGdwdF90ZXN0X3NjaDsKK0NSRUFURSBQVUJMSUNBVElPTiBwdWJf bm9ybWFsIEZPUiBUQUJMRSB0Ymxfbm9ybWFsIFdIRVJFIChpZCA8IDEwKTsKK0NSRUFURSBQVUJM SUNBVElPTiBwdWJfcGFydF9sZWFmIEZPUiBUQUJMRSB0YmxfcGFydDEgV0lUSCAocHVibGlzaF92 aWFfcGFydGl0aW9uX3Jvb3QgPSBmYWxzZSk7CitDUkVBVEUgUFVCTElDQVRJT04gcHViX3BhcnRf cGFyZW50IEZPUiBUQUJMRSB0YmxfcGFyZW50IChpZDEsIGlkMikgV0hFUkUgKGlkMSA9IDEwKSBX SVRIIChwdWJsaXNoX3ZpYV9wYXJ0aXRpb25fcm9vdCA9IHRydWUpOworQ1JFQVRFIFBVQkxJQ0FU SU9OIHB1Yl9wYXJ0X3BhcmVudF9ub192aWFyb290IEZPUiBUQUJMRSB0YmxfcGFyZW50IFdJVEgg KHB1Ymxpc2hfdmlhX3BhcnRpdGlvbl9yb290ID0gZmFsc2UpOworQ1JFQVRFIFBVQkxJQ0FUSU9O IHB1Yl9wYXJ0X3BhcmVudF9jaGlsZCBGT1IgVEFCTEUgdGJsX3BhcmVudCwgdGJsX3BhcnQxIFdJ VEggKHB1Ymxpc2hfdmlhX3BhcnRpdGlvbl9yb290ID0gdHJ1ZSk7CitSRVNFVCBjbGllbnRfbWlu X21lc3NhZ2VzOworQ1JFQVRFIEZVTkNUSU9OIHRlc3RfZ3B0KHB1Ym5hbWVzIHRleHRbXSwgcmVs bmFtZSB0ZXh0KQorUkVUVVJOUyBUQUJMRSAoCisgIHB1Ym5hbWUgdGV4dCwKKyAgcmVsbmFtZSBu YW1lLAorICBhdHRycyB0ZXh0LAorICBxdWFsIHRleHQKKykKK0JFR0lOIEFUT01JQworICBTRUxF Q1QgcC5wdWJuYW1lLCBjLnJlbG5hbWUsIGdwdC5hdHRyczo6dGV4dCwgcGdfZ2V0X2V4cHIoZ3B0 LnF1YWwsIGdwdC5yZWxpZCkKKyAgICBGUk9NIHBnX2dldF9wdWJsaWNhdGlvbl90YWJsZXMocHVi bmFtZXMsIHJlbG5hbWU6OnJlZ2NsYXNzOjpvaWQpIGdwdAorICAgIEpPSU4gcGdfcHVibGljYXRp b24gcCBPTiBwLm9pZCA9IGdwdC5wdWJpZAorICAgIEpPSU4gcGdfY2xhc3MgYyBPTiBjLm9pZCA9 IGdwdC5yZWxpZAorICBPUkRFUiBCWSBwLnB1Ym5hbWUsIGMucmVsbmFtZTsKK0VORDsKK1NFTEVD VCAqIEZST00gdGVzdF9ncHQoQVJSQVlbJ3B1Yl9ub3JtYWwnXSwgJ3RibF9ub3JtYWwnKTsKKyAg cHVibmFtZSAgIHwgIHJlbG5hbWUgICB8IGF0dHJzIHwgICBxdWFsICAgIAorLS0tLS0tLS0tLS0t Ky0tLS0tLS0tLS0tLSstLS0tLS0tKy0tLS0tLS0tLS0tCisgcHViX25vcm1hbCB8IHRibF9ub3Jt YWwgfCAxICAgICB8IChpZCA8IDEwKQorKDEgcm93KQorCitTRUxFQ1QgKiBGUk9NIHRlc3RfZ3B0 KEFSUkFZWydwdWJfbm9ybWFsJ10sICdncHRfdGVzdF9zY2gudGJsX3NjaCcpOyAtLSBubyByZXN1 bHQKKyBwdWJuYW1lIHwgcmVsbmFtZSB8IGF0dHJzIHwgcXVhbCAKKy0tLS0tLS0tLSstLS0tLS0t LS0rLS0tLS0tLSstLS0tLS0KKygwIHJvd3MpCisKK1NFTEVDVCAqIEZST00gdGVzdF9ncHQoQVJS QVlbJ3B1Yl9zY2hlbWEnXSwgJ2dwdF90ZXN0X3NjaC50Ymxfc2NoJyk7CisgIHB1Ym5hbWUgICB8 IHJlbG5hbWUgfCBhdHRycyB8IHF1YWwgCistLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0r LS0tLS0tCisgcHViX3NjaGVtYSB8IHRibF9zY2ggfCAxICAgICB8IAorKDEgcm93KQorCitTRUxF Q1QgKiBGUk9NIHRlc3RfZ3B0KEFSUkFZWydwdWJfc2NoZW1hJ10sICd0Ymxfbm9ybWFsJyk7IC0t IG5vIHJlc3VsdAorIHB1Ym5hbWUgfCByZWxuYW1lIHwgYXR0cnMgfCBxdWFsIAorLS0tLS0tLS0t Ky0tLS0tLS0tLSstLS0tLS0tKy0tLS0tLQorKDAgcm93cykKKworU0VMRUNUICogRlJPTSB0ZXN0 X2dwdChBUlJBWVsncHViX3BhcnRfcGFyZW50J10sICd0YmxfcGFyZW50Jyk7CisgICAgIHB1Ym5h bWUgICAgIHwgIHJlbG5hbWUgICB8IGF0dHJzIHwgICAgcXVhbCAgICAKKy0tLS0tLS0tLS0tLS0t LS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tKy0tLS0tLS0tLS0tLQorIHB1Yl9wYXJ0X3BhcmVudCB8 IHRibF9wYXJlbnQgfCAxIDIgICB8IChpZDEgPSAxMCkKKygxIHJvdykKKworU0VMRUNUICogRlJP TSB0ZXN0X2dwdChBUlJBWVsncHViX3BhcnRfcGFyZW50J10sICd0YmxfcGFydDEnKTsgLS0gbm8g cmVzdWx0CisgcHVibmFtZSB8IHJlbG5hbWUgfCBhdHRycyB8IHF1YWwgCistLS0tLS0tLS0rLS0t LS0tLS0tKy0tLS0tLS0rLS0tLS0tCisoMCByb3dzKQorCitTRUxFQ1QgKiBGUk9NIHRlc3RfZ3B0 KEFSUkFZWydwdWJfcGFydF9wYXJlbnRfbm9fdmlhcm9vdCddLCAndGJsX3BhcnQxJyk7CisgICAg ICAgICAgcHVibmFtZSAgICAgICAgICAgfCAgcmVsbmFtZSAgfCBhdHRycyB8IHF1YWwgCistLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0rLS0tLS0tCisgcHVi X3BhcnRfcGFyZW50X25vX3ZpYXJvb3QgfCB0YmxfcGFydDEgfCAxIDIgMyB8IAorKDEgcm93KQor CitTRUxFQ1QgKiBGUk9NIHRlc3RfZ3B0KEFSUkFZWydwdWJfcGFydF9wYXJlbnRfbm9fdmlhcm9v dCddLCAndGJsX3BhcmVudCcpOyAtLSBubyByZXN1bHQKKyBwdWJuYW1lIHwgcmVsbmFtZSB8IGF0 dHJzIHwgcXVhbCAKKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLSstLS0tLS0KKygwIHJvd3Mp CisKK1NFTEVDVCAqIEZST00gdGVzdF9ncHQoQVJSQVlbJ3B1Yl9wYXJ0X2xlYWYnXSwgJ3RibF9w YXJ0MScpOworICAgIHB1Ym5hbWUgICAgfCAgcmVsbmFtZSAgfCBhdHRycyB8IHF1YWwgCistLS0t LS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLSstLS0tLS0KKyBwdWJfcGFydF9sZWFmIHwg dGJsX3BhcnQxIHwgMSAyIDMgfCAKKygxIHJvdykKKworU0VMRUNUICogRlJPTSB0ZXN0X2dwdChB UlJBWVsncHViX3BhcnRfbGVhZiddLCAndGJsX3BhcmVudCcpOyAtLSBubyByZXN1bHQKKyBwdWJu YW1lIHwgcmVsbmFtZSB8IGF0dHJzIHwgcXVhbCAKKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0t LSstLS0tLS0KKygwIHJvd3MpCisKK1NFTEVDVCAqIEZST00gdGVzdF9ncHQoQVJSQVlbJ3B1Yl9h bGwnXSwgJ3RibF9wYXJlbnQnKTsKKyBwdWJuYW1lIHwgIHJlbG5hbWUgICB8IGF0dHJzIHwgcXVh bCAKKy0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLSstLS0tLS0KKyBwdWJfYWxsIHwgdGJs X3BhcmVudCB8IDEgMiAzIHwgCisoMSByb3cpCisKK1NFTEVDVCAqIEZST00gdGVzdF9ncHQoQVJS QVlbJ3B1Yl9hbGwnXSwgJ3RibF9wYXJ0MScpOyAtLSBubyByZXN1bHQKKyBwdWJuYW1lIHwgcmVs bmFtZSB8IGF0dHJzIHwgcXVhbCAKKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLSstLS0tLS0K KygwIHJvd3MpCisKK1NFTEVDVCAqIEZST00gdGVzdF9ncHQoQVJSQVlbJ3B1Yl9hbGxfbm9fdmlh cm9vdCddLCAndGJsX3BhcnQxJyk7CisgICAgICBwdWJuYW1lICAgICAgIHwgIHJlbG5hbWUgIHwg YXR0cnMgfCBxdWFsIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLSst LS0tLS0KKyBwdWJfYWxsX25vX3ZpYXJvb3QgfCB0YmxfcGFydDEgfCAxIDIgMyB8IAorKDEgcm93 KQorCitTRUxFQ1QgKiBGUk9NIHRlc3RfZ3B0KEFSUkFZWydwdWJfYWxsX25vX3ZpYXJvb3QnXSwg J3RibF9wYXJlbnQnKTsgLS0gbm8gcmVzdWx0CisgcHVibmFtZSB8IHJlbG5hbWUgfCBhdHRycyB8 IHF1YWwgCistLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0rLS0tLS0tCisoMCByb3dzKQorCitT RUxFQ1QgKiBGUk9NIHRlc3RfZ3B0KEFSUkFZWydwdWJfcGFydF9wYXJlbnRfY2hpbGQnXSwgJ3Ri bF9wYXJlbnQnKTsKKyAgICAgICAgcHVibmFtZSAgICAgICAgfCAgcmVsbmFtZSAgIHwgYXR0cnMg fCBxdWFsIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0rLS0t LS0tCisgcHViX3BhcnRfcGFyZW50X2NoaWxkIHwgdGJsX3BhcmVudCB8IDEgMiAzIHwgCisoMSBy b3cpCisKK1NFTEVDVCAqIEZST00gdGVzdF9ncHQoQVJSQVlbJ3B1Yl9wYXJ0X3BhcmVudF9jaGls ZCddLCAndGJsX3BhcnQxJyk7IC0tIG5vIHJlc3VsdAorIHB1Ym5hbWUgfCByZWxuYW1lIHwgYXR0 cnMgfCBxdWFsIAorLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tKy0tLS0tLQorKDAgcm93cykK KworLS0gdGVzdCBmb3IgdGhlIEVYQ0xVREUgY2xhdXNlCitTRUxFQ1QgKiBGUk9NIHRlc3RfZ3B0 KEFSUkFZWydwdWJfYWxsX2V4Y2VwdCddLCAndGJsX25vcm1hbCcpOworICAgIHB1Ym5hbWUgICAg IHwgIHJlbG5hbWUgICB8IGF0dHJzIHwgcXVhbCAKKy0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0t LS0tKy0tLS0tLS0rLS0tLS0tCisgcHViX2FsbF9leGNlcHQgfCB0Ymxfbm9ybWFsIHwgMSAgICAg fCAKKygxIHJvdykKKworU0VMRUNUICogRlJPTSB0ZXN0X2dwdChBUlJBWVsncHViX2FsbF9leGNl cHQnXSwgJ2dwdF90ZXN0X3NjaC50Ymxfc2NoJyk7IC0tIG5vIHJlc3VsdCAoZXhjbHVkZWQpCisg cHVibmFtZSB8IHJlbG5hbWUgfCBhdHRycyB8IHF1YWwgCistLS0tLS0tLS0rLS0tLS0tLS0tKy0t LS0tLS0rLS0tLS0tCisoMCByb3dzKQorCitTRUxFQ1QgKiBGUk9NIHRlc3RfZ3B0KEFSUkFZWydw dWJfYWxsX2V4Y2VwdCddLCAndGJsX3BhcmVudCcpOyAtLSBubyByZXN1bHQgKGV4Y2x1ZGVkKQor IHB1Ym5hbWUgfCByZWxuYW1lIHwgYXR0cnMgfCBxdWFsIAorLS0tLS0tLS0tKy0tLS0tLS0tLSst LS0tLS0tKy0tLS0tLQorKDAgcm93cykKKworU0VMRUNUICogRlJPTSB0ZXN0X2dwdChBUlJBWVsn cHViX2FsbF9leGNlcHQnXSwgJ3RibF9wYXJ0MScpOyAtLSBubyByZXN1bHQKKyBwdWJuYW1lIHwg cmVsbmFtZSB8IGF0dHJzIHwgcXVhbCAKKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLSstLS0t LS0KKygwIHJvd3MpCisKK1NFTEVDVCAqIEZST00gdGVzdF9ncHQoQVJSQVlbJ3B1Yl9hbGxfZXhj ZXB0X25vX3ZpYXJvb3QnXSwgJ3RibF9ub3JtYWwnKTsKKyAgICAgICAgICBwdWJuYW1lICAgICAg ICAgIHwgIHJlbG5hbWUgICB8IGF0dHJzIHwgcXVhbCAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLSstLS0tLS0KKyBwdWJfYWxsX2V4Y2VwdF9ub192aWFy b290IHwgdGJsX25vcm1hbCB8IDEgICAgIHwgCisoMSByb3cpCisKK1NFTEVDVCAqIEZST00gdGVz dF9ncHQoQVJSQVlbJ3B1Yl9hbGxfZXhjZXB0X25vX3ZpYXJvb3QnXSwgJ2dwdF90ZXN0X3NjaC50 Ymxfc2NoJyk7IC0tIG5vIHJlc3VsdCAoZXhjbHVkZWQpCisgcHVibmFtZSB8IHJlbG5hbWUgfCBh dHRycyB8IHF1YWwgCistLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0rLS0tLS0tCisoMCByb3dz KQorCitTRUxFQ1QgKiBGUk9NIHRlc3RfZ3B0KEFSUkFZWydwdWJfYWxsX2V4Y2VwdF9ub192aWFy b290J10sICd0YmxfcGFyZW50Jyk7IC0tIG5vIHJlc3VsdCAoZXhjbHVkZWQpCisgcHVibmFtZSB8 IHJlbG5hbWUgfCBhdHRycyB8IHF1YWwgCistLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0rLS0t LS0tCisoMCByb3dzKQorCitTRUxFQ1QgKiBGUk9NIHRlc3RfZ3B0KEFSUkFZWydwdWJfYWxsX2V4 Y2VwdF9ub192aWFyb290J10sICd0YmxfcGFydDEnKTsgLS0gbm8gcmVzdWx0CisgcHVibmFtZSB8 IHJlbG5hbWUgfCBhdHRycyB8IHF1YWwgCistLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0rLS0t LS0tCisoMCByb3dzKQorCistLSB0d28gcm93cyB3aXRoIGRpZmZlcmVudCByb3cgZmlsdGVyCitT RUxFQ1QgKiBGUk9NIHRlc3RfZ3B0KEFSUkFZWydwdWJfYWxsJywgJ3B1Yl9ub3JtYWwnXSwgJ3Ri bF9ub3JtYWwnKTsKKyAgcHVibmFtZSAgIHwgIHJlbG5hbWUgICB8IGF0dHJzIHwgICBxdWFsICAg IAorLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tKy0tLS0tLS0tLS0tCisgcHViX2Fs bCAgICB8IHRibF9ub3JtYWwgfCAxICAgICB8IAorIHB1Yl9ub3JtYWwgfCB0Ymxfbm9ybWFsIHwg MSAgICAgfCAoaWQgPCAxMCkKKygyIHJvd3MpCisKKy0tIG9uZSByb3cgd2l0aCAncHViX3BhcnRf cGFyZW50JworU0VMRUNUICogRlJPTSB0ZXN0X2dwdChBUlJBWVsncHViX3BhcnRfcGFyZW50Jywg J3B1Yl9wYXJ0X3BhcmVudF9ub192aWFyb290J10sICd0YmxfcGFyZW50Jyk7CisgICAgIHB1Ym5h bWUgICAgIHwgIHJlbG5hbWUgICB8IGF0dHJzIHwgICAgcXVhbCAgICAKKy0tLS0tLS0tLS0tLS0t LS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tKy0tLS0tLS0tLS0tLQorIHB1Yl9wYXJ0X3BhcmVudCB8 IHRibF9wYXJlbnQgfCAxIDIgICB8IChpZDEgPSAxMCkKKygxIHJvdykKKworLS0gbm8gcmVzdWx0 LCB0YmxfcGFyZW50IGlzIHRoZSBlZmZlY3RpdmUgcHVibGlzaGVkIE9JRCBkdWUgdG8gcHVidmlh cm9vdAorU0VMRUNUICogRlJPTSB0ZXN0X2dwdChBUlJBWVsncHViX3BhcnRfcGFyZW50JywgJ3B1 Yl9hbGwnXSwgJ3RibF9wYXJ0MScpOworIHB1Ym5hbWUgfCByZWxuYW1lIHwgYXR0cnMgfCBxdWFs IAorLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tKy0tLS0tLQorKDAgcm93cykKKworLS0gbm8g cmVzdWx0LCBub24tZXhpc3RlbnQgcHVibGljYXRpb24KK1NFTEVDVCAqIEZST00gdGVzdF9ncHQo QVJSQVlbJ25vX3N1Y2hfcHViJ10sICd0Ymxfbm9ybWFsJyk7CisgcHVibmFtZSB8IHJlbG5hbWUg fCBhdHRycyB8IHF1YWwgCistLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0rLS0tLS0tCisoMCBy b3dzKQorCistLSBubyByZXN1bHQsIG5vbi10YWJsZSBvYmplY3QKK1NFTEVDVCAqIEZST00gdGVz dF9ncHQoQVJSQVlbJ3B1Yl9hbGwnXSwgJ2dwdF90ZXN0X3ZpZXcnKTsKKyBwdWJuYW1lIHwgcmVs bmFtZSB8IGF0dHJzIHwgcXVhbCAKKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLSstLS0tLS0K KygwIHJvd3MpCisKKy0tIG5vIHJlc3VsdCwgZW1wdHkgcHVibGljYXRpb24gYXJyYXkKK1NFTEVD VCAqIEZST00gdGVzdF9ncHQoQVJSQVlbXTo6dGV4dFtdLCAndGJsX25vcm1hbCcpOworIHB1Ym5h bWUgfCByZWxuYW1lIHwgYXR0cnMgfCBxdWFsIAorLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0t Ky0tLS0tLQorKDAgcm93cykKKworLS0gbm8gcmVzdWx0LCBPSUQgMCBhcyB0YXJnZXRfcmVsaWQK K1NFTEVDVCAqIEZST00gcGdfZ2V0X3B1YmxpY2F0aW9uX3RhYmxlcyhBUlJBWVsncHViX25vcm1h bCddLCAwOjpvaWQpOworIHB1YmlkIHwgcmVsaWQgfCBhdHRycyB8IHF1YWwgCistLS0tLS0tKy0t LS0tLS0rLS0tLS0tLSstLS0tLS0KKygwIHJvd3MpCisKKy0tIENsZWFuIHVwCitEUk9QIEZVTkNU SU9OIHRlc3RfZ3B0KHRleHRbXSwgdGV4dCk7CitEUk9QIFBVQkxJQ0FUSU9OIHB1Yl9hbGw7CitE Uk9QIFBVQkxJQ0FUSU9OIHB1Yl9hbGxfbm9fdmlhcm9vdDsKK0RST1AgUFVCTElDQVRJT04gcHVi X2FsbF9leGNlcHQ7CitEUk9QIFBVQkxJQ0FUSU9OIHB1Yl9hbGxfZXhjZXB0X25vX3ZpYXJvb3Q7 CitEUk9QIFBVQkxJQ0FUSU9OIHB1Yl9zY2hlbWE7CitEUk9QIFBVQkxJQ0FUSU9OIHB1Yl9ub3Jt YWw7CitEUk9QIFBVQkxJQ0FUSU9OIHB1Yl9wYXJ0X2xlYWY7CitEUk9QIFBVQkxJQ0FUSU9OIHB1 Yl9wYXJ0X3BhcmVudDsKK0RST1AgUFVCTElDQVRJT04gcHViX3BhcnRfcGFyZW50X25vX3ZpYXJv b3Q7CitEUk9QIFBVQkxJQ0FUSU9OIHB1Yl9wYXJ0X3BhcmVudF9jaGlsZDsKK0RST1AgVklFVyBn cHRfdGVzdF92aWV3OworRFJPUCBUQUJMRSB0Ymxfbm9ybWFsLCB0YmxfcGFyZW50LCB0YmxfcGFy dDE7CitEUk9QIFNDSEVNQSBncHRfdGVzdF9zY2ggQ0FTQ0FERTsKK05PVElDRTogIGRyb3AgY2Fz Y2FkZXMgdG8gdGFibGUgZ3B0X3Rlc3Rfc2NoLnRibF9zY2gKIC0tIHN0YWdlIG9iamVjdHMgZm9y IHBnX2R1bXAgdGVzdHMKIENSRUFURSBTQ0hFTUEgcHVibWUgQ1JFQVRFIFRBQkxFIHQwIChjIGlu dCwgZCBpbnQpIENSRUFURSBUQUJMRSB0MSAoYyBpbnQpOwogQ1JFQVRFIFNDSEVNQSBwdWJtZTIg Q1JFQVRFIFRBQkxFIHQwIChjIGludCwgZCBpbnQpOwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVn cmVzcy9zcWwvcHVibGljYXRpb24uc3FsIGIvc3JjL3Rlc3QvcmVncmVzcy9zcWwvcHVibGljYXRp b24uc3FsCmluZGV4IDZiYWZhZDI3NTcxLi45NDkwOGU0Zjk2NSAxMDA2NDQKLS0tIGEvc3JjL3Rl c3QvcmVncmVzcy9zcWwvcHVibGljYXRpb24uc3FsCisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3Mvc3Fs L3B1YmxpY2F0aW9uLnNxbApAQCAtMTQzOCw2ICsxNDM4LDExMyBAQCBSRVNFVCBTRVNTSU9OIEFV VEhPUklaQVRJT047CiBEUk9QIFJPTEUgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyLCByZWdyZXNz X3B1YmxpY2F0aW9uX3VzZXIyOwogRFJPUCBST0xFIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlcl9k dW1teTsKIAorLS0gVGVzdCBwZ19nZXRfcHVibGljYXRpb25fdGFibGVzKHRleHRbXSwgb2lkKSBm dW5jdGlvbgorQ1JFQVRFIFNDSEVNQSBncHRfdGVzdF9zY2g7CitDUkVBVEUgVEFCTEUgZ3B0X3Rl c3Rfc2NoLnRibF9zY2ggKGlkIGludCk7CitDUkVBVEUgVEFCTEUgdGJsX25vcm1hbCAoaWQgaW50 KTsKK0NSRUFURSBUQUJMRSB0YmxfcGFyZW50IChpZDEgaW50LCBpZDIgaW50LCBpZDMgaW50KSBQ QVJUSVRJT04gQlkgUkFOR0UgKGlkMSk7CitDUkVBVEUgVEFCTEUgdGJsX3BhcnQxIFBBUlRJVElP TiBPRiB0YmxfcGFyZW50IEZPUiBWQUxVRVMgRlJPTSAoMSkgVE8gKDEwKTsKK0NSRUFURSBWSUVX IGdwdF90ZXN0X3ZpZXcgQVMgU0VMRUNUICogRlJPTSB0Ymxfbm9ybWFsOworCitTRVQgY2xpZW50 X21pbl9tZXNzYWdlcyA9ICdFUlJPUic7CitDUkVBVEUgUFVCTElDQVRJT04gcHViX2FsbCBGT1Ig QUxMIFRBQkxFUyBXSVRIIChwdWJsaXNoX3ZpYV9wYXJ0aXRpb25fcm9vdCA9IHRydWUpOworQ1JF QVRFIFBVQkxJQ0FUSU9OIHB1Yl9hbGxfbm9fdmlhcm9vdCBGT1IgQUxMIFRBQkxFUyBXSVRIIChw dWJsaXNoX3ZpYV9wYXJ0aXRpb25fcm9vdCA9IGZhbHNlKTsKK0NSRUFURSBQVUJMSUNBVElPTiBw dWJfYWxsX2V4Y2VwdCBGT1IgQUxMIFRBQkxFUyBFWENFUFQgKFRBQkxFIHRibF9wYXJlbnQsIGdw dF90ZXN0X3NjaC50Ymxfc2NoKSBXSVRIIChwdWJsaXNoX3ZpYV9wYXJ0aXRpb25fcm9vdCA9IGZh bHNlKTsKK0NSRUFURSBQVUJMSUNBVElPTiBwdWJfYWxsX2V4Y2VwdF9ub192aWFyb290IEZPUiBB TEwgVEFCTEVTIEVYQ0VQVCAoVEFCTEUgdGJsX3BhcmVudCwgZ3B0X3Rlc3Rfc2NoLnRibF9zY2gp IFdJVEggKHB1Ymxpc2hfdmlhX3BhcnRpdGlvbl9yb290ID0gdHJ1ZSk7CitDUkVBVEUgUFVCTElD QVRJT04gcHViX3NjaGVtYSBGT1IgVEFCTEVTIElOIFNDSEVNQSBncHRfdGVzdF9zY2g7CitDUkVB VEUgUFVCTElDQVRJT04gcHViX25vcm1hbCBGT1IgVEFCTEUgdGJsX25vcm1hbCBXSEVSRSAoaWQg PCAxMCk7CitDUkVBVEUgUFVCTElDQVRJT04gcHViX3BhcnRfbGVhZiBGT1IgVEFCTEUgdGJsX3Bh cnQxIFdJVEggKHB1Ymxpc2hfdmlhX3BhcnRpdGlvbl9yb290ID0gZmFsc2UpOworQ1JFQVRFIFBV QkxJQ0FUSU9OIHB1Yl9wYXJ0X3BhcmVudCBGT1IgVEFCTEUgdGJsX3BhcmVudCAoaWQxLCBpZDIp IFdIRVJFIChpZDEgPSAxMCkgV0lUSCAocHVibGlzaF92aWFfcGFydGl0aW9uX3Jvb3QgPSB0cnVl KTsKK0NSRUFURSBQVUJMSUNBVElPTiBwdWJfcGFydF9wYXJlbnRfbm9fdmlhcm9vdCBGT1IgVEFC TEUgdGJsX3BhcmVudCBXSVRIIChwdWJsaXNoX3ZpYV9wYXJ0aXRpb25fcm9vdCA9IGZhbHNlKTsK K0NSRUFURSBQVUJMSUNBVElPTiBwdWJfcGFydF9wYXJlbnRfY2hpbGQgRk9SIFRBQkxFIHRibF9w YXJlbnQsIHRibF9wYXJ0MSBXSVRIIChwdWJsaXNoX3ZpYV9wYXJ0aXRpb25fcm9vdCA9IHRydWUp OworUkVTRVQgY2xpZW50X21pbl9tZXNzYWdlczsKKworQ1JFQVRFIEZVTkNUSU9OIHRlc3RfZ3B0 KHB1Ym5hbWVzIHRleHRbXSwgcmVsbmFtZSB0ZXh0KQorUkVUVVJOUyBUQUJMRSAoCisgIHB1Ym5h bWUgdGV4dCwKKyAgcmVsbmFtZSBuYW1lLAorICBhdHRycyB0ZXh0LAorICBxdWFsIHRleHQKKykK K0JFR0lOIEFUT01JQworICBTRUxFQ1QgcC5wdWJuYW1lLCBjLnJlbG5hbWUsIGdwdC5hdHRyczo6 dGV4dCwgcGdfZ2V0X2V4cHIoZ3B0LnF1YWwsIGdwdC5yZWxpZCkKKyAgICBGUk9NIHBnX2dldF9w dWJsaWNhdGlvbl90YWJsZXMocHVibmFtZXMsIHJlbG5hbWU6OnJlZ2NsYXNzOjpvaWQpIGdwdAor ICAgIEpPSU4gcGdfcHVibGljYXRpb24gcCBPTiBwLm9pZCA9IGdwdC5wdWJpZAorICAgIEpPSU4g cGdfY2xhc3MgYyBPTiBjLm9pZCA9IGdwdC5yZWxpZAorICBPUkRFUiBCWSBwLnB1Ym5hbWUsIGMu cmVsbmFtZTsKK0VORDsKKworU0VMRUNUICogRlJPTSB0ZXN0X2dwdChBUlJBWVsncHViX25vcm1h bCddLCAndGJsX25vcm1hbCcpOworU0VMRUNUICogRlJPTSB0ZXN0X2dwdChBUlJBWVsncHViX25v cm1hbCddLCAnZ3B0X3Rlc3Rfc2NoLnRibF9zY2gnKTsgLS0gbm8gcmVzdWx0CisKK1NFTEVDVCAq IEZST00gdGVzdF9ncHQoQVJSQVlbJ3B1Yl9zY2hlbWEnXSwgJ2dwdF90ZXN0X3NjaC50Ymxfc2No Jyk7CitTRUxFQ1QgKiBGUk9NIHRlc3RfZ3B0KEFSUkFZWydwdWJfc2NoZW1hJ10sICd0Ymxfbm9y bWFsJyk7IC0tIG5vIHJlc3VsdAorCitTRUxFQ1QgKiBGUk9NIHRlc3RfZ3B0KEFSUkFZWydwdWJf cGFydF9wYXJlbnQnXSwgJ3RibF9wYXJlbnQnKTsKK1NFTEVDVCAqIEZST00gdGVzdF9ncHQoQVJS QVlbJ3B1Yl9wYXJ0X3BhcmVudCddLCAndGJsX3BhcnQxJyk7IC0tIG5vIHJlc3VsdAorCitTRUxF Q1QgKiBGUk9NIHRlc3RfZ3B0KEFSUkFZWydwdWJfcGFydF9wYXJlbnRfbm9fdmlhcm9vdCddLCAn dGJsX3BhcnQxJyk7CitTRUxFQ1QgKiBGUk9NIHRlc3RfZ3B0KEFSUkFZWydwdWJfcGFydF9wYXJl bnRfbm9fdmlhcm9vdCddLCAndGJsX3BhcmVudCcpOyAtLSBubyByZXN1bHQKKworU0VMRUNUICog RlJPTSB0ZXN0X2dwdChBUlJBWVsncHViX3BhcnRfbGVhZiddLCAndGJsX3BhcnQxJyk7CitTRUxF Q1QgKiBGUk9NIHRlc3RfZ3B0KEFSUkFZWydwdWJfcGFydF9sZWFmJ10sICd0YmxfcGFyZW50Jyk7 IC0tIG5vIHJlc3VsdAorCitTRUxFQ1QgKiBGUk9NIHRlc3RfZ3B0KEFSUkFZWydwdWJfYWxsJ10s ICd0YmxfcGFyZW50Jyk7CitTRUxFQ1QgKiBGUk9NIHRlc3RfZ3B0KEFSUkFZWydwdWJfYWxsJ10s ICd0YmxfcGFydDEnKTsgLS0gbm8gcmVzdWx0CisKK1NFTEVDVCAqIEZST00gdGVzdF9ncHQoQVJS QVlbJ3B1Yl9hbGxfbm9fdmlhcm9vdCddLCAndGJsX3BhcnQxJyk7CitTRUxFQ1QgKiBGUk9NIHRl c3RfZ3B0KEFSUkFZWydwdWJfYWxsX25vX3ZpYXJvb3QnXSwgJ3RibF9wYXJlbnQnKTsgLS0gbm8g cmVzdWx0CisKK1NFTEVDVCAqIEZST00gdGVzdF9ncHQoQVJSQVlbJ3B1Yl9wYXJ0X3BhcmVudF9j aGlsZCddLCAndGJsX3BhcmVudCcpOworU0VMRUNUICogRlJPTSB0ZXN0X2dwdChBUlJBWVsncHVi X3BhcnRfcGFyZW50X2NoaWxkJ10sICd0YmxfcGFydDEnKTsgLS0gbm8gcmVzdWx0CisKKy0tIHRl c3QgZm9yIHRoZSBFWENMVURFIGNsYXVzZQorU0VMRUNUICogRlJPTSB0ZXN0X2dwdChBUlJBWVsn cHViX2FsbF9leGNlcHQnXSwgJ3RibF9ub3JtYWwnKTsKK1NFTEVDVCAqIEZST00gdGVzdF9ncHQo QVJSQVlbJ3B1Yl9hbGxfZXhjZXB0J10sICdncHRfdGVzdF9zY2gudGJsX3NjaCcpOyAtLSBubyBy ZXN1bHQgKGV4Y2x1ZGVkKQorU0VMRUNUICogRlJPTSB0ZXN0X2dwdChBUlJBWVsncHViX2FsbF9l eGNlcHQnXSwgJ3RibF9wYXJlbnQnKTsgLS0gbm8gcmVzdWx0IChleGNsdWRlZCkKK1NFTEVDVCAq IEZST00gdGVzdF9ncHQoQVJSQVlbJ3B1Yl9hbGxfZXhjZXB0J10sICd0YmxfcGFydDEnKTsgLS0g bm8gcmVzdWx0CitTRUxFQ1QgKiBGUk9NIHRlc3RfZ3B0KEFSUkFZWydwdWJfYWxsX2V4Y2VwdF9u b192aWFyb290J10sICd0Ymxfbm9ybWFsJyk7CitTRUxFQ1QgKiBGUk9NIHRlc3RfZ3B0KEFSUkFZ WydwdWJfYWxsX2V4Y2VwdF9ub192aWFyb290J10sICdncHRfdGVzdF9zY2gudGJsX3NjaCcpOyAt LSBubyByZXN1bHQgKGV4Y2x1ZGVkKQorU0VMRUNUICogRlJPTSB0ZXN0X2dwdChBUlJBWVsncHVi X2FsbF9leGNlcHRfbm9fdmlhcm9vdCddLCAndGJsX3BhcmVudCcpOyAtLSBubyByZXN1bHQgKGV4 Y2x1ZGVkKQorU0VMRUNUICogRlJPTSB0ZXN0X2dwdChBUlJBWVsncHViX2FsbF9leGNlcHRfbm9f dmlhcm9vdCddLCAndGJsX3BhcnQxJyk7IC0tIG5vIHJlc3VsdAorCistLSB0d28gcm93cyB3aXRo IGRpZmZlcmVudCByb3cgZmlsdGVyCitTRUxFQ1QgKiBGUk9NIHRlc3RfZ3B0KEFSUkFZWydwdWJf YWxsJywgJ3B1Yl9ub3JtYWwnXSwgJ3RibF9ub3JtYWwnKTsKKworLS0gb25lIHJvdyB3aXRoICdw dWJfcGFydF9wYXJlbnQnCitTRUxFQ1QgKiBGUk9NIHRlc3RfZ3B0KEFSUkFZWydwdWJfcGFydF9w YXJlbnQnLCAncHViX3BhcnRfcGFyZW50X25vX3ZpYXJvb3QnXSwgJ3RibF9wYXJlbnQnKTsKKwor LS0gbm8gcmVzdWx0LCB0YmxfcGFyZW50IGlzIHRoZSBlZmZlY3RpdmUgcHVibGlzaGVkIE9JRCBk dWUgdG8gcHVidmlhcm9vdAorU0VMRUNUICogRlJPTSB0ZXN0X2dwdChBUlJBWVsncHViX3BhcnRf cGFyZW50JywgJ3B1Yl9hbGwnXSwgJ3RibF9wYXJ0MScpOworCistLSBubyByZXN1bHQsIG5vbi1l eGlzdGVudCBwdWJsaWNhdGlvbgorU0VMRUNUICogRlJPTSB0ZXN0X2dwdChBUlJBWVsnbm9fc3Vj aF9wdWInXSwgJ3RibF9ub3JtYWwnKTsKKworLS0gbm8gcmVzdWx0LCBub24tdGFibGUgb2JqZWN0 CitTRUxFQ1QgKiBGUk9NIHRlc3RfZ3B0KEFSUkFZWydwdWJfYWxsJ10sICdncHRfdGVzdF92aWV3 Jyk7CisKKy0tIG5vIHJlc3VsdCwgZW1wdHkgcHVibGljYXRpb24gYXJyYXkKK1NFTEVDVCAqIEZS T00gdGVzdF9ncHQoQVJSQVlbXTo6dGV4dFtdLCAndGJsX25vcm1hbCcpOworCistLSBubyByZXN1 bHQsIE9JRCAwIGFzIHRhcmdldF9yZWxpZAorU0VMRUNUICogRlJPTSBwZ19nZXRfcHVibGljYXRp b25fdGFibGVzKEFSUkFZWydwdWJfbm9ybWFsJ10sIDA6Om9pZCk7CisKKy0tIENsZWFuIHVwCitE Uk9QIEZVTkNUSU9OIHRlc3RfZ3B0KHRleHRbXSwgdGV4dCk7CitEUk9QIFBVQkxJQ0FUSU9OIHB1 Yl9hbGw7CitEUk9QIFBVQkxJQ0FUSU9OIHB1Yl9hbGxfbm9fdmlhcm9vdDsKK0RST1AgUFVCTElD QVRJT04gcHViX2FsbF9leGNlcHQ7CitEUk9QIFBVQkxJQ0FUSU9OIHB1Yl9hbGxfZXhjZXB0X25v X3ZpYXJvb3Q7CitEUk9QIFBVQkxJQ0FUSU9OIHB1Yl9zY2hlbWE7CitEUk9QIFBVQkxJQ0FUSU9O IHB1Yl9ub3JtYWw7CitEUk9QIFBVQkxJQ0FUSU9OIHB1Yl9wYXJ0X2xlYWY7CitEUk9QIFBVQkxJ Q0FUSU9OIHB1Yl9wYXJ0X3BhcmVudDsKK0RST1AgUFVCTElDQVRJT04gcHViX3BhcnRfcGFyZW50 X25vX3ZpYXJvb3Q7CitEUk9QIFBVQkxJQ0FUSU9OIHB1Yl9wYXJ0X3BhcmVudF9jaGlsZDsKK0RS T1AgVklFVyBncHRfdGVzdF92aWV3OworRFJPUCBUQUJMRSB0Ymxfbm9ybWFsLCB0YmxfcGFyZW50 LCB0YmxfcGFydDE7CitEUk9QIFNDSEVNQSBncHRfdGVzdF9zY2ggQ0FTQ0FERTsKKwogLS0gc3Rh Z2Ugb2JqZWN0cyBmb3IgcGdfZHVtcCB0ZXN0cwogQ1JFQVRFIFNDSEVNQSBwdWJtZSBDUkVBVEUg VEFCTEUgdDAgKGMgaW50LCBkIGludCkgQ1JFQVRFIFRBQkxFIHQxIChjIGludCk7CiBDUkVBVEUg U0NIRU1BIHB1Ym1lMiBDUkVBVEUgVEFCTEUgdDAgKGMgaW50LCBkIGludCk7Ci0tIAoyLjUzLjAK Cg== --0000000000007315c6064e6d89e5--