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 1w2JvA-000BbN-1V for pgsql-hackers@arkaria.postgresql.org; Tue, 17 Mar 2026 02:12: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 1w2Jv9-00F3k5-15 for pgsql-hackers@arkaria.postgresql.org; Tue, 17 Mar 2026 02:12: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 1w2Jv8-00F3jw-38 for pgsql-hackers@lists.postgresql.org; Tue, 17 Mar 2026 02:12:35 +0000 Received: from mail-ed1-x52f.google.com ([2a00:1450:4864:20::52f]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1w2Jv5-00000000WpW-3gNq for pgsql-hackers@postgresql.org; Tue, 17 Mar 2026 02:12:34 +0000 Received: by mail-ed1-x52f.google.com with SMTP id 4fb4d7f45d1cf-6618bc129acso6794594a12.2 for ; Mon, 16 Mar 2026 19:12:31 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1773713549; cv=none; d=google.com; s=arc-20240605; b=Lc8jW+ap0LfeOtoEJsuLGUnLiU+umynHPsGL1rmUfLgc0G9JPBUwa2BD3ZbQ2YkOkl L067ydx7B1/wI7djBAz+251e12QYKUTTC0AvxR4uD6eyttDLcv5UPnbsj+iHPtRaYNpv V/fRmGFgAQo5RxBI6xehlJUD8xZiG8/VlW0lAoX8uqCjpB/YcoBNRa/EdvPJJxmL7sMA y+IAZnIcLC8SEw68AebjxPXE5lMGrFqbVBuSZk5WnMBJOzX6vUQK7Zai1jM2FXDGefDU s3J+VKX3CwolxZCf8vO755yxEdBQ98vta5gBoa3uuVLhIMHqXQuQViGMVlHP/qXygPkH Z4lw== 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=Wc84SQwdpNFZNwzpGnr00PRMig5W53xSzhB1pu9XuXY=; fh=jVjotnebvx0QfxaXYR3+rXuVGiNKX/yHl1XZsEQb2QA=; b=VIoFBJQKaufPXZsvbGD/CGjCxI6/BWwfKtPkaCWIrmVJGbR7tTQfJvxxcOsT5sNB31 +VyCZyjvN0fLwzZ9ePRMB5LO+0LFX0IpcZ4bDULZ3DzqrSuhSfIh3U4QLTN4SsALew+H T3JaQGOa9jRpSGmDS5qlpFjHqvLpcmCkqBOjSG8+jyJwOMwE0GIhWXwf3idC6q/UAhyX g/H04Tc36jKM3VTzG31lzxqGfniX23WAmYCV24CMEI9UzdVliy001zBcIOSisAA8iTHP rBveByJr5aRrxIY9fD6aD+0acNE2MA3iTTJjfbALlw/pGj+hSv/VtRoNZ8nwZxq9fkwo BkSw==; 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=20230601; t=1773713549; x=1774318349; 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=Wc84SQwdpNFZNwzpGnr00PRMig5W53xSzhB1pu9XuXY=; b=lMPQhenQhwkhW/CHUAT9xA1i9w/tyazXDfqJDS9eW+THnxY89YrFxI/19KiGEFe+nK uPula8khmnxzs4jSlhqZVKELrLQdb5r9Jl5ow+TbFNd+awCLt8RVEmFd6BKBlb72g0DE hP0HNXtEc22noOY1zxfsriNHqrfI0HEJLq0l3xKfETG3cDacNiSTVbENiFk0wqIuloyR dJywiKeVLRwgiL3f9qI2l160uNsHuZJKXNMKs4jDPdm1juQOXyNe5O6F0aavDvBdV6Ys AuYfQgxiYhSLyUB6850urRVTx+NwkKQcBRY9VZM8f8EjPog5kJqINJzN3Uk/QYkAWEIG T2jQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1773713549; x=1774318349; 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=Wc84SQwdpNFZNwzpGnr00PRMig5W53xSzhB1pu9XuXY=; b=DZgXVb6I1rkcNH6RHr8fC2/1PTFS2TkSCtYEpG0yjCg4VpG67e6oWxDyPDG5s6SbeT QR44IwnlcB8UnZqfbT99fmNOPRayqq+wZYSbxWDtEx3mCUHTb/0LMEQcy1w0S1xycimk EYXRYyPrTTryWMhk+kcYh0cS1MoZACeu2EVKu1qwep/qNKaqkvE2Tf/WkySGACHNmwu4 B9JDFCRoQL21pXvK43LE+xbm96XxbM9TacVFW+OOrUfYAkquCmsbPu35ZuYgPNVAuGha rp/p5s3Jsd94eLgVrFCnBv4aIH1MRD6ds90LmpzT1THf31g8OtVye1Chit+e/yD1qhtK wIJw== X-Forwarded-Encrypted: i=1; AJvYcCVGKGbFUdsobRULk9bamwQHCbJdw+N4dhRuPv93t0RHgcB5rfq6OGJjb5nnr0riA2SrKcB67qT9lEtEXvIy@postgresql.org X-Gm-Message-State: AOJu0YzAC2GXxFJYFkcfdDZ8SorWeearm9aVMGBSD55hpMOb4vLsxVEe GwxlYUhSxcGk88bU4ho/qkbCZvdPwWghyDx2H5WfsWKqzel/07EI17pf+BUbnn+SXQZpkkfRptC IKlL69liqgcwyNCYfE0nbYng5XK7pAgxqK6VNQyc= X-Gm-Gg: ATEYQzwCPm6VysJA+njtzQ60VnfdscCfGqVff+4QTjF3/j2uPbxGZum+Tcbq+CTRdUX hv1dhhqgHj3LcoccwRE0XrZq+9MXRzShEOjlRiGrCLXZb7tj6+keoW1TDN3OQIjzK6dtd7S2Xd3 8dmyWmy0NLZusOEl7eFgHbe28zYEmoiOuziczVCINaRORVlyaIw0GAC1eCB9zfgJhOGyTzRryR5 ieDv8GY4YT+k8zrigbBmYDRPNStpAC2nqnq2ltpGML2JW/pQE95mJ4MNvkZLVQ8144eY89OWLhq cx6FLLk= X-Received: by 2002:a05:6402:26ca:b0:667:b92:d51a with SMTP id 4fb4d7f45d1cf-6670b92d6fcmr1054878a12.30.1773713549347; Mon, 16 Mar 2026 19:12:29 -0700 (PDT) MIME-Version: 1.0 References: In-Reply-To: From: Sami Imseih Date: Mon, 16 Mar 2026 21:12:17 -0500 X-Gm-Features: AaiRm50NVzX-64SoB4b2CzdoDA5dAlu7LFVXHTeoDVzvDpN7Up-4h48YWMYhRQY Message-ID: Subject: Re: Refactor query normalization into core query jumbling To: Lukas Fittl Cc: Michael Paquier , zengman , pgsql-hackers , Julien Rouhaud Content-Type: multipart/mixed; boundary="0000000000000b041d064d2ede06" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --0000000000000b041d064d2ede06 Content-Type: text/plain; charset="UTF-8" > Here is v4. > > 0001 - addresses the comments made by Bertrand. > 0002 - makes JumbleState a constant when passed to post_parse_analyze > and updates all downstream code that consume the JumbleState. This > means we now need to copy the locations from JState into a local/temporary > array when generating the normalized string. PFA a mandatory rebase. -- Sami Imseih Amazon Web Services (AWS) --0000000000000b041d064d2ede06 Content-Type: application/octet-stream; name="v5-0002-Make-JumbleState-const-in-post_parse_analyze-hook.patch" Content-Disposition: attachment; filename="v5-0002-Make-JumbleState-const-in-post_parse_analyze-hook.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mmtz7fes0 RnJvbSAzNDgzNzdlMDQ3M2QyYjI4Y2M1MGRiMGJhNWU5NTBmOWUyOGJiZTg3IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBVYnVudHUgPHVidW50dUBpcC0xNzItMzEtNDYtMjMwLmVjMi5p bnRlcm5hbD4KRGF0ZTogVHVlLCA2IEphbiAyMDI2IDE5OjI5OjAxICswMDAwClN1YmplY3Q6IFtQ QVRDSCB2NSAyLzJdIE1ha2UgSnVtYmxlU3RhdGUgY29uc3QgaW4gcG9zdF9wYXJzZV9hbmFseXpl IGhvb2sKCkNoYW5nZSB0aGUgcG9zdF9wYXJzZV9hbmFseXplX2hvb2tfdHlwZSBzaWduYXR1cmUg dG8gdGFrZSBhIGNvbnN0Ckp1bWJsZVN0YXRlIHBhcmFtZXRlciwgcHJldmVudGluZyBob29rcyBm cm9tIG1vZGlmeWluZyB0aGUganVtYmxlCnN0YXRlIGR1cmluZyBxdWVyeSBhbmFseXNpcy4gVGhp cyBpbXByb3ZlcyBBUEkgc2FmZXR5IGJ5IG1ha2luZyBpdApjbGVhciB0aGF0IGhvb2tzIHNob3Vs ZCBvbmx5IHJlYWQgZnJvbSB0aGUganVtYmxlIHN0YXRlLCBub3QgbW9kaWZ5Cml0LgoKVXBkYXRl IHBnX3N0YXRfc3RhdGVtZW50cyBhbmQgcmVsYXRlZCBmdW5jdGlvbnMgdG8gbWF0Y2ggdGhlIG5l dyBjb25zdApzaWduYXR1cmUuIFJlZmFjdG9yIFNldENvbnN0YW50TGVuZ3RocygpIHRvIHJldHVy biBhIG5ld2x5IGFsbG9jYXRlZApMb2NhdGlvbkxlbiBhcnJheSBpbnN0ZWFkIG9mIG1vZGlmeWlu ZyB0aGUgSnVtYmxlU3RhdGUsIGFuZCB1cGRhdGUKR2VuZXJhdGVOb3JtYWxpemVkUXVlcnkoKSB0 byB3b3JrIHdpdGggdGhlIGNvbnN0IEp1bWJsZVN0YXRlIGFuZAptYW5hZ2UgdGhlIHJldHVybmVk IGFycmF5IHByb3Blcmx5LgoKRGlzY3Vzc2lvbjogaHR0cHM6Ly9wb3N0Z3IuZXMvbS9DQUE1Ulow dFpwNXFVMGlrWkVFcUpueHZkU05HaDFEV3Y4MHNiLWs0UUFVbWlNb09wX1FAbWFpbC5nbWFpbC5j b20KLS0tCiAuLi4vcGdfc3RhdF9zdGF0ZW1lbnRzL3BnX3N0YXRfc3RhdGVtZW50cy5jICAgfCAg OCArKy0tCiBzcmMvYmFja2VuZC9ub2Rlcy9xdWVyeWp1bWJsZWZ1bmNzLmMgICAgICAgICAgfCAz OSArKysrKysrKysrKysrLS0tLS0tCiBzcmMvaW5jbHVkZS9ub2Rlcy9xdWVyeWp1bWJsZS5oICAg ICAgICAgICAgICAgfCAgMiArLQogc3JjL2luY2x1ZGUvcGFyc2VyL2FuYWx5emUuaCAgICAgICAg ICAgICAgICAgIHwgIDIgKy0KIDQgZmlsZXMgY2hhbmdlZCwgMzMgaW5zZXJ0aW9ucygrKSwgMTgg ZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvY29udHJpYi9wZ19zdGF0X3N0YXRlbWVudHMvcGdf c3RhdF9zdGF0ZW1lbnRzLmMgYi9jb250cmliL3BnX3N0YXRfc3RhdGVtZW50cy9wZ19zdGF0X3N0 YXRlbWVudHMuYwppbmRleCBjOTMzODQ0MmQ5Ni4uMzg2YTE0MTkyMzIgMTAwNjQ0Ci0tLSBhL2Nv bnRyaWIvcGdfc3RhdF9zdGF0ZW1lbnRzL3BnX3N0YXRfc3RhdGVtZW50cy5jCisrKyBiL2NvbnRy aWIvcGdfc3RhdF9zdGF0ZW1lbnRzL3BnX3N0YXRfc3RhdGVtZW50cy5jCkBAIC0zMzMsNyArMzMz LDcgQEAgc3RhdGljIHZvaWQgcGdzc19zaG1lbV9yZXF1ZXN0KHZvaWQpOwogc3RhdGljIHZvaWQg cGdzc19zaG1lbV9zdGFydHVwKHZvaWQpOwogc3RhdGljIHZvaWQgcGdzc19zaG1lbV9zaHV0ZG93 bihpbnQgY29kZSwgRGF0dW0gYXJnKTsKIHN0YXRpYyB2b2lkIHBnc3NfcG9zdF9wYXJzZV9hbmFs eXplKFBhcnNlU3RhdGUgKnBzdGF0ZSwgUXVlcnkgKnF1ZXJ5LAotCQkJCQkJCQkJSnVtYmxlU3Rh dGUgKmpzdGF0ZSk7CisJCQkJCQkJCQljb25zdCBKdW1ibGVTdGF0ZSAqanN0YXRlKTsKIHN0YXRp YyBQbGFubmVkU3RtdCAqcGdzc19wbGFubmVyKFF1ZXJ5ICpwYXJzZSwKIAkJCQkJCQkJIGNvbnN0 IGNoYXIgKnF1ZXJ5X3N0cmluZywKIAkJCQkJCQkJIGludCBjdXJzb3JPcHRpb25zLApAQCAtMzU3 LDcgKzM1Nyw3IEBAIHN0YXRpYyB2b2lkIHBnc3Nfc3RvcmUoY29uc3QgY2hhciAqcXVlcnksIGlu dDY0IHF1ZXJ5SWQsCiAJCQkJCSAgIGNvbnN0IEJ1ZmZlclVzYWdlICpidWZ1c2FnZSwKIAkJCQkJ ICAgY29uc3QgV2FsVXNhZ2UgKndhbHVzYWdlLAogCQkJCQkgICBjb25zdCBzdHJ1Y3QgSml0SW5z dHJ1bWVudGF0aW9uICpqaXR1c2FnZSwKLQkJCQkJICAgSnVtYmxlU3RhdGUgKmpzdGF0ZSwKKwkJ CQkJICAgY29uc3QgSnVtYmxlU3RhdGUgKmpzdGF0ZSwKIAkJCQkJICAgaW50IHBhcmFsbGVsX3dv cmtlcnNfdG9fbGF1bmNoLAogCQkJCQkgICBpbnQgcGFyYWxsZWxfd29ya2Vyc19sYXVuY2hlZCwK IAkJCQkJICAgUGxhbm5lZFN0bXRPcmlnaW4gcGxhbk9yaWdpbik7CkBAIC04MzMsNyArODMzLDcg QEAgZXJyb3I6CiAgKiBQb3N0LXBhcnNlLWFuYWx5c2lzIGhvb2s6IG1hcmsgcXVlcnkgd2l0aCBh IHF1ZXJ5SWQKICAqLwogc3RhdGljIHZvaWQKLXBnc3NfcG9zdF9wYXJzZV9hbmFseXplKFBhcnNl U3RhdGUgKnBzdGF0ZSwgUXVlcnkgKnF1ZXJ5LCBKdW1ibGVTdGF0ZSAqanN0YXRlKQorcGdzc19w b3N0X3BhcnNlX2FuYWx5emUoUGFyc2VTdGF0ZSAqcHN0YXRlLCBRdWVyeSAqcXVlcnksIGNvbnN0 IEp1bWJsZVN0YXRlICpqc3RhdGUpCiB7CiAJaWYgKHByZXZfcG9zdF9wYXJzZV9hbmFseXplX2hv b2spCiAJCXByZXZfcG9zdF9wYXJzZV9hbmFseXplX2hvb2socHN0YXRlLCBxdWVyeSwganN0YXRl KTsKQEAgLTEyOTAsNyArMTI5MCw3IEBAIHBnc3Nfc3RvcmUoY29uc3QgY2hhciAqcXVlcnksIGlu dDY0IHF1ZXJ5SWQsCiAJCSAgIGNvbnN0IEJ1ZmZlclVzYWdlICpidWZ1c2FnZSwKIAkJICAgY29u c3QgV2FsVXNhZ2UgKndhbHVzYWdlLAogCQkgICBjb25zdCBzdHJ1Y3QgSml0SW5zdHJ1bWVudGF0 aW9uICpqaXR1c2FnZSwKLQkJICAgSnVtYmxlU3RhdGUgKmpzdGF0ZSwKKwkJICAgY29uc3QgSnVt YmxlU3RhdGUgKmpzdGF0ZSwKIAkJICAgaW50IHBhcmFsbGVsX3dvcmtlcnNfdG9fbGF1bmNoLAog CQkgICBpbnQgcGFyYWxsZWxfd29ya2Vyc19sYXVuY2hlZCwKIAkJICAgUGxhbm5lZFN0bXRPcmln aW4gcGxhbk9yaWdpbikKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL25vZGVzL3F1ZXJ5anVtYmxl ZnVuY3MuYyBiL3NyYy9iYWNrZW5kL25vZGVzL3F1ZXJ5anVtYmxlZnVuY3MuYwppbmRleCBkNGIy NjIwMmM0Ny4uZmU4ZjBjY2QyNzggMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL25vZGVzL3F1ZXJ5 anVtYmxlZnVuY3MuYworKysgYi9zcmMvYmFja2VuZC9ub2Rlcy9xdWVyeWp1bWJsZWZ1bmNzLmMK QEAgLTc4OSw4ICs3ODksMTAgQEAgQ29tcExvY2F0aW9uKGNvbnN0IHZvaWQgKmEsIGNvbnN0IHZv aWQgKmIpCiB9CiAKIC8qCi0gKiBHaXZlbiBhIHZhbGlkIFNRTCBzdHJpbmcgYW5kIGFuIGFycmF5 IG9mIGNvbnN0YW50LWxvY2F0aW9uIHJlY29yZHMsCi0gKiBmaWxsIGluIHRoZSB0ZXh0dWFsIGxl bmd0aHMgb2YgdGhvc2UgY29uc3RhbnRzIGluIEp1bWJsZVN0YXRlLgorICogR2l2ZW4gYSB2YWxp ZCBTUUwgc3RyaW5nIGFuZCBhbiBhcnJheSBvZiBjb25zdGFudC1sb2NhdGlvbiByZWNvcmRzLCBy ZXR1cm4KKyAqIHRoZSB0ZXh0dWFsIGxlbmd0aHMgb2YgdGhvc2UgY29uc3RhbnRzIGluIGEgbmV3 bHkgYWxsb2NhdGVkIExvY2F0aW9uTGVuCisgKiBhcnJheSwgb3IgTlVMTCBpZiB0aGVyZSBhcmUg bm8gY29uc3RhbnRzLiBJdCBpcyB0aGUgY2FsbGVyJ3MgcmVzcG9uc2liaWxpdHkKKyAqIHRvIHBm cmVlIHRoZSByZXN1bHQsIGlmIG5lY2Vzc2FyeS4KICAqCiAgKiBUaGUgY29uc3RhbnRzIG1heSB1 c2UgYW55IGFsbG93ZWQgY29uc3RhbnQgc3ludGF4LCBzdWNoIGFzIGZsb2F0IGxpdGVyYWxzLAog ICogYml0LXN0cmluZ3MsIHNpbmdsZS1xdW90ZWQgc3RyaW5ncyBhbmQgZG9sbGFyLXF1b3RlZCBz dHJpbmdzLiAgVGhpcyBpcwpAQCAtODAzLDggKzgwNSw4IEBAIENvbXBMb2NhdGlvbihjb25zdCB2 b2lkICphLCBjb25zdCB2b2lkICpiKQogICogYSBuZWdhdGl2ZSBudW1lcmljIGNvbnN0YW50LiAg VGhpcyBwcmVjbHVkZXMgdGhlcmUgZXZlciBiZWluZyBhbm90aGVyCiAgKiByZWFzb24gZm9yIGEg Y29uc3RhbnQgdG8gc3RhcnQgd2l0aCBhICctJy4KICAqLwotc3RhdGljIHZvaWQKLVNldENvbnN0 YW50TGVuZ3RocyhKdW1ibGVTdGF0ZSAqanN0YXRlLCBjb25zdCBjaGFyICpxdWVyeSwKK3N0YXRp YyBMb2NhdGlvbkxlbiAqCitTZXRDb25zdGFudExlbmd0aHMoY29uc3QgSnVtYmxlU3RhdGUgKmpz dGF0ZSwgY29uc3QgY2hhciAqcXVlcnksCiAJCQkJICAgaW50IHF1ZXJ5X2xvYykKIHsKIAlMb2Nh dGlvbkxlbiAqbG9jczsKQEAgLTgxMywxNCArODE1LDIwIEBAIFNldENvbnN0YW50TGVuZ3RocyhK dW1ibGVTdGF0ZSAqanN0YXRlLCBjb25zdCBjaGFyICpxdWVyeSwKIAljb3JlX1lZU1RZUEUgeXls dmFsOwogCVlZTFRZUEUJCXl5bGxvYzsKIAorCWlmIChqc3RhdGUtPmNsb2NhdGlvbnNfY291bnQg PT0gMCkKKwkJcmV0dXJuIE5VTEw7CisKKwkvKiBDb3B5IGNvbnN0YW50IGxvY2F0aW9ucyB0byBh dm9pZCBtb2RpZnlpbmcganN0YXRlICovCisJbG9jcyA9IHBhbGxvYyhqc3RhdGUtPmNsb2NhdGlv bnNfY291bnQgKiBzaXplb2YoTG9jYXRpb25MZW4pKTsKKwltZW1jcHkobG9jcywganN0YXRlLT5j bG9jYXRpb25zLCBqc3RhdGUtPmNsb2NhdGlvbnNfY291bnQgKiBzaXplb2YoTG9jYXRpb25MZW4p KTsKKwogCS8qCiAJICogU29ydCB0aGUgcmVjb3JkcyBieSBsb2NhdGlvbiBzbyB0aGF0IHdlIGNh biBwcm9jZXNzIHRoZW0gaW4gb3JkZXIgd2hpbGUKIAkgKiBzY2FubmluZyB0aGUgcXVlcnkgdGV4 dC4KIAkgKi8KIAlpZiAoanN0YXRlLT5jbG9jYXRpb25zX2NvdW50ID4gMSkKLQkJcXNvcnQoanN0 YXRlLT5jbG9jYXRpb25zLCBqc3RhdGUtPmNsb2NhdGlvbnNfY291bnQsCisJCXFzb3J0KGxvY3Ms IGpzdGF0ZS0+Y2xvY2F0aW9uc19jb3VudCwKIAkJCSAgc2l6ZW9mKExvY2F0aW9uTGVuKSwgQ29t cExvY2F0aW9uKTsKLQlsb2NzID0ganN0YXRlLT5jbG9jYXRpb25zOwogCiAJLyogaW5pdGlhbGl6 ZSB0aGUgZmxleCBzY2FubmVyIC0tLSBzaG91bGQgbWF0Y2ggcmF3X3BhcnNlcigpICovCiAJeXlz Y2FubmVyID0gc2Nhbm5lcl9pbml0KHF1ZXJ5LApAQCAtOTA4LDYgKzkxNiw4IEBAIFNldENvbnN0 YW50TGVuZ3RocyhKdW1ibGVTdGF0ZSAqanN0YXRlLCBjb25zdCBjaGFyICpxdWVyeSwKIAl9CiAK IAlzY2FubmVyX2ZpbmlzaCh5eXNjYW5uZXIpOworCisJcmV0dXJuIGxvY3M7CiB9CiAKIC8qCkBA IC05MjYsNyArOTM2LDcgQEAgU2V0Q29uc3RhbnRMZW5ndGhzKEp1bWJsZVN0YXRlICpqc3RhdGUs IGNvbnN0IGNoYXIgKnF1ZXJ5LAogICogUmV0dXJucyBhIHBhbGxvYydkIHN0cmluZy4KICAqLwog Y2hhciAqCi1HZW5lcmF0ZU5vcm1hbGl6ZWRRdWVyeShKdW1ibGVTdGF0ZSAqanN0YXRlLCBjb25z dCBjaGFyICpxdWVyeSwKK0dlbmVyYXRlTm9ybWFsaXplZFF1ZXJ5KGNvbnN0IEp1bWJsZVN0YXRl ICpqc3RhdGUsIGNvbnN0IGNoYXIgKnF1ZXJ5LAogCQkJCQkJaW50IHF1ZXJ5X2xvYywgaW50ICpx dWVyeV9sZW5fcCkKIHsKIAljaGFyCSAgICpub3JtX3F1ZXJ5OwpAQCAtOTM4LDEyICs5NDgsMTMg QEAgR2VuZXJhdGVOb3JtYWxpemVkUXVlcnkoSnVtYmxlU3RhdGUgKmpzdGF0ZSwgY29uc3QgY2hh ciAqcXVlcnksCiAJCQkJbGFzdF9vZmYgPSAwLAkvKiBPZmZzZXQgZnJvbSBzdGFydCBmb3IgcHJl dmlvdXMgdG9rICovCiAJCQkJbGFzdF90b2tfbGVuID0gMDsJLyogTGVuZ3RoIChpbiBieXRlcykg b2YgdGhhdCB0b2sgKi8KIAlpbnQJCQludW1fY29uc3RhbnRzX3JlcGxhY2VkID0gMDsKKwlMb2Nh dGlvbkxlbiAqbG9jcyA9IE5VTEw7CiAKIAkvKgogCSAqIFNldCBjb25zdGFudHMnIGxlbmd0aHMg aW4gSnVtYmxlU3RhdGUsIGFzIG9ubHkgbG9jYXRpb25zIGFyZSBzZXQgZHVyaW5nCiAJICogRG9K dW1ibGUoKS4gTm90ZSB0aGlzIGFsc28gZW5zdXJlcyB0aGUgaXRlbXMgYXJlIHNvcnRlZCBieSBs b2NhdGlvbi4KIAkgKi8KLQlTZXRDb25zdGFudExlbmd0aHMoanN0YXRlLCBxdWVyeSwgcXVlcnlf bG9jKTsKKwlsb2NzID0gU2V0Q29uc3RhbnRMZW5ndGhzKGpzdGF0ZSwgcXVlcnksIHF1ZXJ5X2xv Yyk7CiAKIAkvKgogCSAqIEFsbG93IGZvciAkbiBzeW1ib2xzIHRvIGJlIGxvbmdlciB0aGFuIHRo ZSBjb25zdGFudHMgdGhleSByZXBsYWNlLgpAQCAtOTY5LDE1ICs5ODAsMTUgQEAgR2VuZXJhdGVO b3JtYWxpemVkUXVlcnkoSnVtYmxlU3RhdGUgKmpzdGF0ZSwgY29uc3QgY2hhciAqcXVlcnksCiAJ CSAqIHRoZSBwYXJhbWV0ZXIgaW4gdGhlIG5leHQgaXRlcmF0aW9uIChvciBhZnRlciB0aGUgbG9v cCBpcyBkb25lKSwKIAkJICogd2hpY2ggaXMgYSBiaXQgb2RkIGJ1dCBzZWVtcyB0byB3b3JrIG9r YXkgaW4gbW9zdCBjYXNlcy4KIAkJICovCi0JCWlmIChqc3RhdGUtPmNsb2NhdGlvbnNbaV0uZXh0 ZXJuX3BhcmFtICYmICFqc3RhdGUtPmhhc19zcXVhc2hlZF9saXN0cykKKwkJaWYgKGxvY3NbaV0u ZXh0ZXJuX3BhcmFtICYmICFqc3RhdGUtPmhhc19zcXVhc2hlZF9saXN0cykKIAkJCWNvbnRpbnVl OwogCi0JCW9mZiA9IGpzdGF0ZS0+Y2xvY2F0aW9uc1tpXS5sb2NhdGlvbjsKKwkJb2ZmID0gbG9j c1tpXS5sb2NhdGlvbjsKIAogCQkvKiBBZGp1c3QgdGhlIGNvbnN0YW50J3MgbG9jYXRpb24gKHNl ZSBTZXRDb25zdGFudExlbmd0aHMpICovCiAJCW9mZiAtPSBxdWVyeV9sb2M7CiAKLQkJdG9rX2xl biA9IGpzdGF0ZS0+Y2xvY2F0aW9uc1tpXS5sZW5ndGg7CisJCXRva19sZW4gPSBsb2NzW2ldLmxl bmd0aDsKIAogCQlpZiAodG9rX2xlbiA8IDApCiAJCQljb250aW51ZTsJCQkvKiBpZ25vcmUgYW55 IGR1cGxpY2F0ZXMgKi8KQEAgLTk5Niw3ICsxMDA3LDcgQEAgR2VuZXJhdGVOb3JtYWxpemVkUXVl cnkoSnVtYmxlU3RhdGUgKmpzdGF0ZSwgY29uc3QgY2hhciAqcXVlcnksCiAJCSAqLwogCQluX3F1 ZXJfbG9jICs9IHNwcmludGYobm9ybV9xdWVyeSArIG5fcXVlcl9sb2MsICIkJWQlcyIsCiAJCQkJ CQkJICBudW1fY29uc3RhbnRzX3JlcGxhY2VkICsgMSArIGpzdGF0ZS0+aGlnaGVzdF9leHRlcm5f cGFyYW1faWQsCi0JCQkJCQkJICBqc3RhdGUtPmNsb2NhdGlvbnNbaV0uc3F1YXNoZWQgPyAiIC8q LCAuLi4gKi8iIDogIiIpOworCQkJCQkJCSAgbG9jc1tpXS5zcXVhc2hlZCA/ICIgLyosIC4uLiAq LyIgOiAiIik7CiAJCW51bV9jb25zdGFudHNfcmVwbGFjZWQrKzsKIAogCQkvKiBtb3ZlIGZvcndh cmQgKi8KQEAgLTEwMDUsNiArMTAxNiwxMCBAQCBHZW5lcmF0ZU5vcm1hbGl6ZWRRdWVyeShKdW1i bGVTdGF0ZSAqanN0YXRlLCBjb25zdCBjaGFyICpxdWVyeSwKIAkJbGFzdF90b2tfbGVuID0gdG9r X2xlbjsKIAl9CiAKKwkvKiBDbGVhbiB1cCB0ZW1wb3JhcnkgbG9jYXRpb24gYXJyYXkgYmVmb3Jl IGFueSBhc3NlcnRpb25zICovCisJaWYgKGxvY3MpCisJCXBmcmVlKGxvY3MpOworCiAJLyoKIAkg KiBXZSd2ZSBjb3BpZWQgdXAgdW50aWwgdGhlIGxhc3QgaWdub3JhYmxlIGNvbnN0YW50LiAgQ29w eSBvdmVyIHRoZQogCSAqIHJlbWFpbmluZyBieXRlcyBvZiB0aGUgb3JpZ2luYWwgcXVlcnkgc3Ry aW5nLgpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvbm9kZXMvcXVlcnlqdW1ibGUuaCBiL3NyYy9p bmNsdWRlL25vZGVzL3F1ZXJ5anVtYmxlLmgKaW5kZXggZTM1NGY4NTdjMzcuLmI3MDkwMzNjZTI3 IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9ub2Rlcy9xdWVyeWp1bWJsZS5oCisrKyBiL3NyYy9p bmNsdWRlL25vZGVzL3F1ZXJ5anVtYmxlLmgKQEAgLTkxLDcgKzkxLDcgQEAgZXh0ZXJuIFBHRExM SU1QT1JUIGludCBjb21wdXRlX3F1ZXJ5X2lkOwogCiAKIGV4dGVybiBjb25zdCBjaGFyICpDbGVh blF1ZXJ5dGV4dChjb25zdCBjaGFyICpxdWVyeSwgaW50ICpsb2NhdGlvbiwgaW50ICpsZW4pOwot ZXh0ZXJuIGNoYXIgKkdlbmVyYXRlTm9ybWFsaXplZFF1ZXJ5KEp1bWJsZVN0YXRlICpqc3RhdGUs IGNvbnN0IGNoYXIgKnF1ZXJ5LAorZXh0ZXJuIGNoYXIgKkdlbmVyYXRlTm9ybWFsaXplZFF1ZXJ5 KGNvbnN0IEp1bWJsZVN0YXRlICpqc3RhdGUsIGNvbnN0IGNoYXIgKnF1ZXJ5LAogCQkJCQkJCQkJ IGludCBxdWVyeV9sb2MsIGludCAqcXVlcnlfbGVuX3ApOwogZXh0ZXJuIEp1bWJsZVN0YXRlICpK dW1ibGVRdWVyeShRdWVyeSAqcXVlcnkpOwogZXh0ZXJuIHZvaWQgRW5hYmxlUXVlcnlJZCh2b2lk KTsKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3BhcnNlci9hbmFseXplLmggYi9zcmMvaW5jbHVk ZS9wYXJzZXIvYW5hbHl6ZS5oCmluZGV4IGUxMDI3MGZmMGZmLi5iMmRiNmZhNGU4YyAxMDA2NDQK LS0tIGEvc3JjL2luY2x1ZGUvcGFyc2VyL2FuYWx5emUuaAorKysgYi9zcmMvaW5jbHVkZS9wYXJz ZXIvYW5hbHl6ZS5oCkBAIC0yMSw3ICsyMSw3IEBACiAvKiBIb29rIGZvciBwbHVnaW5zIHRvIGdl dCBjb250cm9sIGF0IGVuZCBvZiBwYXJzZSBhbmFseXNpcyAqLwogdHlwZWRlZiB2b2lkICgqcG9z dF9wYXJzZV9hbmFseXplX2hvb2tfdHlwZSkgKFBhcnNlU3RhdGUgKnBzdGF0ZSwKIAkJCQkJCQkJ CQkJICBRdWVyeSAqcXVlcnksCi0JCQkJCQkJCQkJCSAgSnVtYmxlU3RhdGUgKmpzdGF0ZSk7CisJ CQkJCQkJCQkJCSAgY29uc3QgSnVtYmxlU3RhdGUgKmpzdGF0ZSk7CiBleHRlcm4gUEdETExJTVBP UlQgcG9zdF9wYXJzZV9hbmFseXplX2hvb2tfdHlwZSBwb3N0X3BhcnNlX2FuYWx5emVfaG9vazsK IAogCi0tIAoyLjQ3LjMKCg== --0000000000000b041d064d2ede06 Content-Type: application/octet-stream; name="v5-0001-pg_stat_statements-Move-query-normalization-to-co.patch" Content-Disposition: attachment; filename="v5-0001-pg_stat_statements-Move-query-normalization-to-co.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mmtz7ff61 RnJvbSBiN2ExOTU3ZTAwYjFkMGY3NDMyOTVlN2ExOWVjMzdkZGY0ZGExZjAzIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBVYnVudHUgPHVidW50dUBpcC0xNzItMzEtNDYtMjMwLmVjMi5p bnRlcm5hbD4KRGF0ZTogVGh1LCAxOCBEZWMgMjAyNSAxODo1OTozMSArMDAwMApTdWJqZWN0OiBb UEFUQ0ggdjUgMS8yXSBwZ19zdGF0X3N0YXRlbWVudHM6IE1vdmUgcXVlcnkgbm9ybWFsaXphdGlv biB0byBjb3JlCgpwZ19zdGF0X3N0YXRlbWVudHMgd2FzIG1vZGlmeWluZyBjb3JlIGdlbmVyYXRl ZCBKdW1ibGVTdGF0ZSBpbnN0YW5jZXMKYnkgY2FsbGluZyBmaWxsX2luX2NvbnN0YW50X2xlbmd0 aHMoKSB2aWEgZ2VuZXJhdGVfbm9ybWFsaXplZF9xdWVyeSgpCnRvIHBvcHVsYXRlIGNvbnN0YW50 IGxlbmd0aHMuIFRoaXMgY3JlYXRlcyBwcm9ibGVtcyBzaW5jZSBleHRlbnNpb25zCnNob3VsZCBu b3QgbW9kaWZ5IHNoYXJlZCBjb3JlIGRhdGEgc3RydWN0dXJlcyB0aGF0IG1heSBiZSB1c2VkIGJ5 Cm90aGVyIGV4dGVuc2lvbnMsIGFuZCB0aGlzIGNvdWxkIGJlIGNvbnNpZGVyZWQgYSBsYXllcmlu ZyB2aW9sYXRpb24uCgpNb3ZlIHF1ZXJ5IG5vcm1hbGl6YXRpb24gZnVuY3Rpb25zIHRvIGNvcmUg YXMgYSBnbG9iYWwgZnVuY3Rpb24gdG8KZml4IHRoaXMuIEV4dGVuc2lvbnMgbm93IGNhbGwgR2Vu ZXJhdGVOb3JtYWxpemVkUXVlcnkoKSBpbnN0ZWFkIG9mCmRpcmVjdGx5IG1vZGlmeWluZyBKdW1i bGVTdGF0ZS4KClRoaXMgY2hhbmdlIGFsc28gYWRkcmVzc2VzIGNvZGUgZHVwbGljYXRpb24sIGFz IHNldmVyYWwgZXh0ZW5zaW9ucwpoYXZlIGJlZW4gY29weWluZyBnZW5lcmF0ZV9ub3JtYWxpemVk X3F1ZXJ5KCkgdG8gaW1wbGVtZW50IHRoZWlyIG93bgpub3JtYWxpemF0aW9uLiBUaGUgbmV3IGNv cmUgQVBJIHByb3ZpZGVzIGEgc2luZ2xlLCBjb25zaXN0ZW50CmltcGxlbWVudGF0aW9uIGZvciBh bGwgZXh0ZW5zaW9ucyB0byB1c2UuCgpGdW5jdGlvbnMgYXJlIHJlbmFtZWQgdG8gbWF0Y2ggY29y ZSBuYW1pbmcgY29udmVudGlvbnMgYW5kIGNvbW1lbnRzCmFyZSB1cGRhdGVkIGZvciBjbGFyaXR5 LgoKRGlzY3Vzc2lvbjogaHR0cHM6Ly9wb3N0Z3IuZXMvbS9DQUE1UlowdFpwNXFVMGlrWkVFcUpu eHZkU05HaDFEV3Y4MHNiLWs0UUFVbWlNb09wX1FAbWFpbC5nbWFpbC5jb20KLS0tCiAuLi4vcGdf c3RhdF9zdGF0ZW1lbnRzL3BnX3N0YXRfc3RhdGVtZW50cy5jICAgfCAyNzMgKy0tLS0tLS0tLS0t LS0tLS0tCiBzcmMvYmFja2VuZC9ub2Rlcy9xdWVyeWp1bWJsZWZ1bmNzLmMgICAgICAgICAgfCAy NDggKysrKysrKysrKysrKysrKwogc3JjL2luY2x1ZGUvbm9kZXMvcXVlcnlqdW1ibGUuaCAgICAg ICAgICAgICAgIHwgICAyICsKIDMgZmlsZXMgY2hhbmdlZCwgMjYwIGluc2VydGlvbnMoKyksIDI2 MyBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9jb250cmliL3BnX3N0YXRfc3RhdGVtZW50cy9w Z19zdGF0X3N0YXRlbWVudHMuYyBiL2NvbnRyaWIvcGdfc3RhdF9zdGF0ZW1lbnRzL3BnX3N0YXRf c3RhdGVtZW50cy5jCmluZGV4IDZjYjE0ODI0ZWMzLi5jOTMzODQ0MmQ5NiAxMDA2NDQKLS0tIGEv Y29udHJpYi9wZ19zdGF0X3N0YXRlbWVudHMvcGdfc3RhdF9zdGF0ZW1lbnRzLmMKKysrIGIvY29u dHJpYi9wZ19zdGF0X3N0YXRlbWVudHMvcGdfc3RhdF9zdGF0ZW1lbnRzLmMKQEAgLTUwLDcgKzUw LDYgQEAKICNpbmNsdWRlICJhY2Nlc3MvaHR1cF9kZXRhaWxzLmgiCiAjaW5jbHVkZSAiYWNjZXNz L3BhcmFsbGVsLmgiCiAjaW5jbHVkZSAiY2F0YWxvZy9wZ19hdXRoaWQuaCIKLSNpbmNsdWRlICJj b21tb24vaW50LmgiCiAjaW5jbHVkZSAiZXhlY3V0b3IvaW5zdHJ1bWVudC5oIgogI2luY2x1ZGUg ImZ1bmNhcGkuaCIKICNpbmNsdWRlICJqaXQvaml0LmgiCkBAIC01OSw3ICs1OCw2IEBACiAjaW5j bHVkZSAibm9kZXMvcXVlcnlqdW1ibGUuaCIKICNpbmNsdWRlICJvcHRpbWl6ZXIvcGxhbm5lci5o IgogI2luY2x1ZGUgInBhcnNlci9hbmFseXplLmgiCi0jaW5jbHVkZSAicGFyc2VyL3NjYW5uZXIu aCIKICNpbmNsdWRlICJwZ3N0YXQuaCIKICNpbmNsdWRlICJzdG9yYWdlL2ZkLmgiCiAjaW5jbHVk ZSAic3RvcmFnZS9pcGMuaCIKQEAgLTM3OCwxMSArMzc2LDYgQEAgc3RhdGljIGNoYXIgKnF0ZXh0 X2ZldGNoKFNpemUgcXVlcnlfb2Zmc2V0LCBpbnQgcXVlcnlfbGVuLAogc3RhdGljIGJvb2wgbmVl ZF9nY19xdGV4dHModm9pZCk7CiBzdGF0aWMgdm9pZCBnY19xdGV4dHModm9pZCk7CiBzdGF0aWMg VGltZXN0YW1wVHogZW50cnlfcmVzZXQoT2lkIHVzZXJpZCwgT2lkIGRiaWQsIGludDY0IHF1ZXJ5 aWQsIGJvb2wgbWlubWF4X29ubHkpOwotc3RhdGljIGNoYXIgKmdlbmVyYXRlX25vcm1hbGl6ZWRf cXVlcnkoSnVtYmxlU3RhdGUgKmpzdGF0ZSwgY29uc3QgY2hhciAqcXVlcnksCi0JCQkJCQkJCQkg ICBpbnQgcXVlcnlfbG9jLCBpbnQgKnF1ZXJ5X2xlbl9wKTsKLXN0YXRpYyB2b2lkIGZpbGxfaW5f Y29uc3RhbnRfbGVuZ3RocyhKdW1ibGVTdGF0ZSAqanN0YXRlLCBjb25zdCBjaGFyICpxdWVyeSwK LQkJCQkJCQkJCSBpbnQgcXVlcnlfbG9jKTsKLXN0YXRpYyBpbnQJY29tcF9sb2NhdGlvbihjb25z dCB2b2lkICphLCBjb25zdCB2b2lkICpiKTsKIAogCiAvKgpAQCAtMTM2MCw5ICsxMzUzLDE2IEBA IHBnc3Nfc3RvcmUoY29uc3QgY2hhciAqcXVlcnksIGludDY0IHF1ZXJ5SWQsCiAJCWlmIChqc3Rh dGUpCiAJCXsKIAkJCUxXTG9ja1JlbGVhc2UocGdzcy0+bG9jayk7Ci0JCQlub3JtX3F1ZXJ5ID0g Z2VuZXJhdGVfbm9ybWFsaXplZF9xdWVyeShqc3RhdGUsIHF1ZXJ5LAotCQkJCQkJCQkJCQkJICAg cXVlcnlfbG9jYXRpb24sCi0JCQkJCQkJCQkJCQkgICAmcXVlcnlfbGVuKTsKKworCQkJLyoKKwkJ CSAqIGdlbmVyYXRlIHRoZSBub3JtYWxpemVkIHF1ZXJ5LiBOb3RlIHRoYXQgdGhlIG5vcm1hbGl6 ZWQKKwkJCSAqIHJlcHJlc2VudGF0aW9uIG1heSB3ZWxsIHZhcnkgZGVwZW5kaW5nIG9uIGp1c3Qg d2hpY2gKKwkJCSAqICJlcXVpdmFsZW50IiBxdWVyeSBpcyB1c2VkIHRvIGNyZWF0ZSB0aGUgaGFz aHRhYmxlIGVudHJ5LiBXZQorCQkJICogYXNzdW1lIHRoaXMgaXMgT0suCisJCQkgKi8KKwkJCW5v cm1fcXVlcnkgPSBHZW5lcmF0ZU5vcm1hbGl6ZWRRdWVyeShqc3RhdGUsIHF1ZXJ5LAorCQkJCQkJ CQkJCQkJIHF1ZXJ5X2xvY2F0aW9uLAorCQkJCQkJCQkJCQkJICZxdWVyeV9sZW4pOwogCQkJTFdM b2NrQWNxdWlyZShwZ3NzLT5sb2NrLCBMV19TSEFSRUQpOwogCQl9CiAKQEAgLTI4MjQsMjU2ICsy ODI0LDMgQEAgcmVsZWFzZV9sb2NrOgogCiAJcmV0dXJuIHN0YXRzX3Jlc2V0OwogfQotCi0vKgot ICogR2VuZXJhdGUgYSBub3JtYWxpemVkIHZlcnNpb24gb2YgdGhlIHF1ZXJ5IHN0cmluZyB0aGF0 IHdpbGwgYmUgdXNlZCB0bwotICogcmVwcmVzZW50IGFsbCBzaW1pbGFyIHF1ZXJpZXMuCi0gKgot ICogTm90ZSB0aGF0IHRoZSBub3JtYWxpemVkIHJlcHJlc2VudGF0aW9uIG1heSB3ZWxsIHZhcnkg ZGVwZW5kaW5nIG9uCi0gKiBqdXN0IHdoaWNoICJlcXVpdmFsZW50IiBxdWVyeSBpcyB1c2VkIHRv IGNyZWF0ZSB0aGUgaGFzaHRhYmxlIGVudHJ5LgotICogV2UgYXNzdW1lIHRoaXMgaXMgT0suCi0g KgotICogSWYgcXVlcnlfbG9jID4gMCwgdGhlbiAicXVlcnkiIGhhcyBiZWVuIGFkdmFuY2VkIGJ5 IHRoYXQgbXVjaCBjb21wYXJlZCB0bwotICogdGhlIG9yaWdpbmFsIHN0cmluZyBzdGFydCwgc28g d2UgbmVlZCB0byB0cmFuc2xhdGUgdGhlIHByb3ZpZGVkIGxvY2F0aW9ucwotICogdG8gY29tcGVu c2F0ZS4gIChUaGlzIGxldHMgdXMgYXZvaWQgcmUtc2Nhbm5pbmcgc3RhdGVtZW50cyBiZWZvcmUg dGhlIG9uZQotICogb2YgaW50ZXJlc3QsIHNvIGl0J3Mgd29ydGggZG9pbmcuKQotICoKLSAqICpx dWVyeV9sZW5fcCBjb250YWlucyB0aGUgaW5wdXQgc3RyaW5nIGxlbmd0aCwgYW5kIGlzIHVwZGF0 ZWQgd2l0aAotICogdGhlIHJlc3VsdCBzdHJpbmcgbGVuZ3RoIG9uIGV4aXQuICBUaGUgcmVzdWx0 aW5nIHN0cmluZyBtaWdodCBiZSBsb25nZXIKLSAqIG9yIHNob3J0ZXIgZGVwZW5kaW5nIG9uIHdo YXQgaGFwcGVucyB3aXRoIHJlcGxhY2VtZW50IG9mIGNvbnN0YW50cy4KLSAqCi0gKiBSZXR1cm5z IGEgcGFsbG9jJ2Qgc3RyaW5nLgotICovCi1zdGF0aWMgY2hhciAqCi1nZW5lcmF0ZV9ub3JtYWxp emVkX3F1ZXJ5KEp1bWJsZVN0YXRlICpqc3RhdGUsIGNvbnN0IGNoYXIgKnF1ZXJ5LAotCQkJCQkJ ICBpbnQgcXVlcnlfbG9jLCBpbnQgKnF1ZXJ5X2xlbl9wKQotewotCWNoYXIJICAgKm5vcm1fcXVl cnk7Ci0JaW50CQkJcXVlcnlfbGVuID0gKnF1ZXJ5X2xlbl9wOwotCWludAkJCW5vcm1fcXVlcnlf YnVmbGVuLAkvKiBTcGFjZSBhbGxvd2VkIGZvciBub3JtX3F1ZXJ5ICovCi0JCQkJbGVuX3RvX3dy dCwJCS8qIExlbmd0aCAoaW4gYnl0ZXMpIHRvIHdyaXRlICovCi0JCQkJcXVlcl9sb2MgPSAwLAkv KiBTb3VyY2UgcXVlcnkgYnl0ZSBsb2NhdGlvbiAqLwotCQkJCW5fcXVlcl9sb2MgPSAwLCAvKiBO b3JtYWxpemVkIHF1ZXJ5IGJ5dGUgbG9jYXRpb24gKi8KLQkJCQlsYXN0X29mZiA9IDAsCS8qIE9m ZnNldCBmcm9tIHN0YXJ0IGZvciBwcmV2aW91cyB0b2sgKi8KLQkJCQlsYXN0X3Rva19sZW4gPSAw OwkvKiBMZW5ndGggKGluIGJ5dGVzKSBvZiB0aGF0IHRvayAqLwotCWludAkJCW51bV9jb25zdGFu dHNfcmVwbGFjZWQgPSAwOwotCi0JLyoKLQkgKiBHZXQgY29uc3RhbnRzJyBsZW5ndGhzIChjb3Jl IHN5c3RlbSBvbmx5IGdpdmVzIHVzIGxvY2F0aW9ucykuICBOb3RlCi0JICogdGhpcyBhbHNvIGVu c3VyZXMgdGhlIGl0ZW1zIGFyZSBzb3J0ZWQgYnkgbG9jYXRpb24uCi0JICovCi0JZmlsbF9pbl9j b25zdGFudF9sZW5ndGhzKGpzdGF0ZSwgcXVlcnksIHF1ZXJ5X2xvYyk7Ci0KLQkvKgotCSAqIEFs bG93IGZvciAkbiBzeW1ib2xzIHRvIGJlIGxvbmdlciB0aGFuIHRoZSBjb25zdGFudHMgdGhleSBy ZXBsYWNlLgotCSAqIENvbnN0YW50cyBtdXN0IHRha2UgYXQgbGVhc3Qgb25lIGJ5dGUgaW4gdGV4 dCBmb3JtLCB3aGlsZSBhICRuIHN5bWJvbAotCSAqIGNlcnRhaW5seSBpc24ndCBtb3JlIHRoYW4g MTEgYnl0ZXMsIGV2ZW4gaWYgbiByZWFjaGVzIElOVF9NQVguICBXZQotCSAqIGNvdWxkIHJlZmlu ZSB0aGF0IGxpbWl0IGJhc2VkIG9uIHRoZSBtYXggdmFsdWUgb2YgbiBmb3IgdGhlIGN1cnJlbnQK LQkgKiBxdWVyeSwgYnV0IGl0IGhhcmRseSBzZWVtcyB3b3J0aCBhbnkgZXh0cmEgZWZmb3J0IHRv IGRvIHNvLgotCSAqLwotCW5vcm1fcXVlcnlfYnVmbGVuID0gcXVlcnlfbGVuICsganN0YXRlLT5j bG9jYXRpb25zX2NvdW50ICogMTA7Ci0KLQkvKiBBbGxvY2F0ZSByZXN1bHQgYnVmZmVyICovCi0J bm9ybV9xdWVyeSA9IHBhbGxvYyhub3JtX3F1ZXJ5X2J1ZmxlbiArIDEpOwotCi0JZm9yIChpbnQg aSA9IDA7IGkgPCBqc3RhdGUtPmNsb2NhdGlvbnNfY291bnQ7IGkrKykKLQl7Ci0JCWludAkJCW9m ZiwJCS8qIE9mZnNldCBmcm9tIHN0YXJ0IGZvciBjdXIgdG9rICovCi0JCQkJCXRva19sZW47CS8q IExlbmd0aCAoaW4gYnl0ZXMpIG9mIHRoYXQgdG9rICovCi0KLQkJLyoKLQkJICogSWYgd2UgaGF2 ZSBhbiBleHRlcm5hbCBwYXJhbSBhdCB0aGlzIGxvY2F0aW9uLCBidXQgbm8gbGlzdHMgYXJlCi0J CSAqIGJlaW5nIHNxdWFzaGVkIGFjcm9zcyB0aGUgcXVlcnksIHRoZW4gd2Ugc2tpcCBoZXJlOyB0 aGlzIHdpbGwgbWFrZQotCQkgKiB1cyBwcmludCB0aGUgY2hhcmFjdGVycyBmb3VuZCBpbiB0aGUg b3JpZ2luYWwgcXVlcnkgdGhhdCByZXByZXNlbnQKLQkJICogdGhlIHBhcmFtZXRlciBpbiB0aGUg bmV4dCBpdGVyYXRpb24gKG9yIGFmdGVyIHRoZSBsb29wIGlzIGRvbmUpLAotCQkgKiB3aGljaCBp cyBhIGJpdCBvZGQgYnV0IHNlZW1zIHRvIHdvcmsgb2theSBpbiBtb3N0IGNhc2VzLgotCQkgKi8K LQkJaWYgKGpzdGF0ZS0+Y2xvY2F0aW9uc1tpXS5leHRlcm5fcGFyYW0gJiYgIWpzdGF0ZS0+aGFz X3NxdWFzaGVkX2xpc3RzKQotCQkJY29udGludWU7Ci0KLQkJb2ZmID0ganN0YXRlLT5jbG9jYXRp b25zW2ldLmxvY2F0aW9uOwotCi0JCS8qIEFkanVzdCByZWNvcmRlZCBsb2NhdGlvbiBpZiB3ZSdy ZSBkZWFsaW5nIHdpdGggcGFydGlhbCBzdHJpbmcgKi8KLQkJb2ZmIC09IHF1ZXJ5X2xvYzsKLQot CQl0b2tfbGVuID0ganN0YXRlLT5jbG9jYXRpb25zW2ldLmxlbmd0aDsKLQotCQlpZiAodG9rX2xl biA8IDApCi0JCQljb250aW51ZTsJCQkvKiBpZ25vcmUgYW55IGR1cGxpY2F0ZXMgKi8KLQotCQkv KiBDb3B5IG5leHQgY2h1bmsgKHdoYXQgcHJlY2VkZXMgdGhlIG5leHQgY29uc3RhbnQpICovCi0J CWxlbl90b193cnQgPSBvZmYgLSBsYXN0X29mZjsKLQkJbGVuX3RvX3dydCAtPSBsYXN0X3Rva19s ZW47Ci0JCUFzc2VydChsZW5fdG9fd3J0ID49IDApOwotCQltZW1jcHkobm9ybV9xdWVyeSArIG5f cXVlcl9sb2MsIHF1ZXJ5ICsgcXVlcl9sb2MsIGxlbl90b193cnQpOwotCQluX3F1ZXJfbG9jICs9 IGxlbl90b193cnQ7Ci0KLQkJLyoKLQkJICogQW5kIGluc2VydCBhIHBhcmFtIHN5bWJvbCBpbiBw bGFjZSBvZiB0aGUgY29uc3RhbnQgdG9rZW47IGFuZCwgaWYKLQkJICogd2UgaGF2ZSBhIHNxdWFz aGFibGUgbGlzdCwgaW5zZXJ0IGEgcGxhY2Vob2xkZXIgY29tbWVudCBzdGFydGluZwotCQkgKiBm cm9tIHRoZSBsaXN0J3Mgc2Vjb25kIHZhbHVlLgotCQkgKi8KLQkJbl9xdWVyX2xvYyArPSBzcHJp bnRmKG5vcm1fcXVlcnkgKyBuX3F1ZXJfbG9jLCAiJCVkJXMiLAotCQkJCQkJCSAgbnVtX2NvbnN0 YW50c19yZXBsYWNlZCArIDEgKyBqc3RhdGUtPmhpZ2hlc3RfZXh0ZXJuX3BhcmFtX2lkLAotCQkJ CQkJCSAganN0YXRlLT5jbG9jYXRpb25zW2ldLnNxdWFzaGVkID8gIiAvKiwgLi4uICovIiA6ICIi KTsKLQkJbnVtX2NvbnN0YW50c19yZXBsYWNlZCsrOwotCi0JCS8qIG1vdmUgZm9yd2FyZCAqLwot CQlxdWVyX2xvYyA9IG9mZiArIHRva19sZW47Ci0JCWxhc3Rfb2ZmID0gb2ZmOwotCQlsYXN0X3Rv a19sZW4gPSB0b2tfbGVuOwotCX0KLQotCS8qCi0JICogV2UndmUgY29waWVkIHVwIHVudGlsIHRo ZSBsYXN0IGlnbm9yYWJsZSBjb25zdGFudC4gIENvcHkgb3ZlciB0aGUKLQkgKiByZW1haW5pbmcg Ynl0ZXMgb2YgdGhlIG9yaWdpbmFsIHF1ZXJ5IHN0cmluZy4KLQkgKi8KLQlsZW5fdG9fd3J0ID0g cXVlcnlfbGVuIC0gcXVlcl9sb2M7Ci0KLQlBc3NlcnQobGVuX3RvX3dydCA+PSAwKTsKLQltZW1j cHkobm9ybV9xdWVyeSArIG5fcXVlcl9sb2MsIHF1ZXJ5ICsgcXVlcl9sb2MsIGxlbl90b193cnQp OwotCW5fcXVlcl9sb2MgKz0gbGVuX3RvX3dydDsKLQotCUFzc2VydChuX3F1ZXJfbG9jIDw9IG5v cm1fcXVlcnlfYnVmbGVuKTsKLQlub3JtX3F1ZXJ5W25fcXVlcl9sb2NdID0gJ1wwJzsKLQotCSpx dWVyeV9sZW5fcCA9IG5fcXVlcl9sb2M7Ci0JcmV0dXJuIG5vcm1fcXVlcnk7Ci19Ci0KLS8qCi0g KiBHaXZlbiBhIHZhbGlkIFNRTCBzdHJpbmcgYW5kIGFuIGFycmF5IG9mIGNvbnN0YW50LWxvY2F0 aW9uIHJlY29yZHMsCi0gKiBmaWxsIGluIHRoZSB0ZXh0dWFsIGxlbmd0aHMgb2YgdGhvc2UgY29u c3RhbnRzLgotICoKLSAqIFRoZSBjb25zdGFudHMgbWF5IHVzZSBhbnkgYWxsb3dlZCBjb25zdGFu dCBzeW50YXgsIHN1Y2ggYXMgZmxvYXQgbGl0ZXJhbHMsCi0gKiBiaXQtc3RyaW5ncywgc2luZ2xl LXF1b3RlZCBzdHJpbmdzIGFuZCBkb2xsYXItcXVvdGVkIHN0cmluZ3MuICBUaGlzIGlzCi0gKiBh Y2NvbXBsaXNoZWQgYnkgdXNpbmcgdGhlIHB1YmxpYyBBUEkgZm9yIHRoZSBjb3JlIHNjYW5uZXIu Ci0gKgotICogSXQgaXMgdGhlIGNhbGxlcidzIGpvYiB0byBlbnN1cmUgdGhhdCB0aGUgc3RyaW5n IGlzIGEgdmFsaWQgU1FMIHN0YXRlbWVudAotICogd2l0aCBjb25zdGFudHMgYXQgdGhlIGluZGlj YXRlZCBsb2NhdGlvbnMuICBTaW5jZSBpbiBwcmFjdGljZSB0aGUgc3RyaW5nCi0gKiBoYXMgYWxy ZWFkeSBiZWVuIHBhcnNlZCwgYW5kIHRoZSBsb2NhdGlvbnMgdGhhdCB0aGUgY2FsbGVyIHByb3Zp ZGVzIHdpbGwKLSAqIGhhdmUgb3JpZ2luYXRlZCBmcm9tIHdpdGhpbiB0aGUgYXV0aG9yaXRhdGl2 ZSBwYXJzZXIsIHRoaXMgc2hvdWxkIG5vdCBiZQotICogYSBwcm9ibGVtLgotICoKLSAqIE11bHRp cGxlIGNvbnN0YW50cyBjYW4gaGF2ZSB0aGUgc2FtZSBsb2NhdGlvbi4gIFdlIHJlc2V0IGxlbmd0 aHMgb2YgdGhvc2UKLSAqIHBhc3QgdGhlIGZpcnN0IHRvIC0xIHNvIHRoYXQgdGhleSBjYW4gbGF0 ZXIgYmUgaWdub3JlZC4KLSAqCi0gKiBJZiBxdWVyeV9sb2MgPiAwLCB0aGVuICJxdWVyeSIgaGFz IGJlZW4gYWR2YW5jZWQgYnkgdGhhdCBtdWNoIGNvbXBhcmVkIHRvCi0gKiB0aGUgb3JpZ2luYWwg c3RyaW5nIHN0YXJ0LCBzbyB3ZSBuZWVkIHRvIHRyYW5zbGF0ZSB0aGUgcHJvdmlkZWQgbG9jYXRp b25zCi0gKiB0byBjb21wZW5zYXRlLiAgKFRoaXMgbGV0cyB1cyBhdm9pZCByZS1zY2FubmluZyBz dGF0ZW1lbnRzIGJlZm9yZSB0aGUgb25lCi0gKiBvZiBpbnRlcmVzdCwgc28gaXQncyB3b3J0aCBk b2luZy4pCi0gKgotICogTi5CLiBUaGVyZSBpcyBhbiBhc3N1bXB0aW9uIHRoYXQgYSAnLScgY2hh cmFjdGVyIGF0IGEgQ29uc3QgbG9jYXRpb24gYmVnaW5zCi0gKiBhIG5lZ2F0aXZlIG51bWVyaWMg Y29uc3RhbnQuICBUaGlzIHByZWNsdWRlcyB0aGVyZSBldmVyIGJlaW5nIGFub3RoZXIKLSAqIHJl YXNvbiBmb3IgYSBjb25zdGFudCB0byBzdGFydCB3aXRoIGEgJy0nLgotICovCi1zdGF0aWMgdm9p ZAotZmlsbF9pbl9jb25zdGFudF9sZW5ndGhzKEp1bWJsZVN0YXRlICpqc3RhdGUsIGNvbnN0IGNo YXIgKnF1ZXJ5LAotCQkJCQkJIGludCBxdWVyeV9sb2MpCi17Ci0JTG9jYXRpb25MZW4gKmxvY3M7 Ci0JY29yZV95eXNjYW5fdCB5eXNjYW5uZXI7Ci0JY29yZV95eV9leHRyYV90eXBlIHl5ZXh0cmE7 Ci0JY29yZV9ZWVNUWVBFIHl5bHZhbDsKLQlZWUxUWVBFCQl5eWxsb2M7Ci0KLQkvKgotCSAqIFNv cnQgdGhlIHJlY29yZHMgYnkgbG9jYXRpb24gc28gdGhhdCB3ZSBjYW4gcHJvY2VzcyB0aGVtIGlu IG9yZGVyIHdoaWxlCi0JICogc2Nhbm5pbmcgdGhlIHF1ZXJ5IHRleHQuCi0JICovCi0JaWYgKGpz dGF0ZS0+Y2xvY2F0aW9uc19jb3VudCA+IDEpCi0JCXFzb3J0KGpzdGF0ZS0+Y2xvY2F0aW9ucywg anN0YXRlLT5jbG9jYXRpb25zX2NvdW50LAotCQkJICBzaXplb2YoTG9jYXRpb25MZW4pLCBjb21w X2xvY2F0aW9uKTsKLQlsb2NzID0ganN0YXRlLT5jbG9jYXRpb25zOwotCi0JLyogaW5pdGlhbGl6 ZSB0aGUgZmxleCBzY2FubmVyIC0tLSBzaG91bGQgbWF0Y2ggcmF3X3BhcnNlcigpICovCi0JeXlz Y2FubmVyID0gc2Nhbm5lcl9pbml0KHF1ZXJ5LAotCQkJCQkJCSAmeXlleHRyYSwKLQkJCQkJCQkg JlNjYW5LZXl3b3JkcywKLQkJCQkJCQkgU2NhbktleXdvcmRUb2tlbnMpOwotCi0JLyogU2VhcmNo IGZvciBlYWNoIGNvbnN0YW50LCBpbiBzZXF1ZW5jZSAqLwotCWZvciAoaW50IGkgPSAwOyBpIDwg anN0YXRlLT5jbG9jYXRpb25zX2NvdW50OyBpKyspCi0JewotCQlpbnQJCQlsb2M7Ci0JCWludAkJ CXRvazsKLQotCQkvKiBJZ25vcmUgY29uc3RhbnRzIGFmdGVyIHRoZSBmaXJzdCBvbmUgaW4gdGhl IHNhbWUgbG9jYXRpb24gKi8KLQkJaWYgKGkgPiAwICYmIGxvY3NbaV0ubG9jYXRpb24gPT0gbG9j c1tpIC0gMV0ubG9jYXRpb24pCi0JCXsKLQkJCWxvY3NbaV0ubGVuZ3RoID0gLTE7Ci0JCQljb250 aW51ZTsKLQkJfQotCi0JCWlmIChsb2NzW2ldLnNxdWFzaGVkKQotCQkJY29udGludWU7CQkJLyog c3F1YXNoYWJsZSBsaXN0LCBpZ25vcmUgKi8KLQotCQkvKiBBZGp1c3QgcmVjb3JkZWQgbG9jYXRp b24gaWYgd2UncmUgZGVhbGluZyB3aXRoIHBhcnRpYWwgc3RyaW5nICovCi0JCWxvYyA9IGxvY3Nb aV0ubG9jYXRpb24gLSBxdWVyeV9sb2M7Ci0JCUFzc2VydChsb2MgPj0gMCk7Ci0KLQkJLyoKLQkJ ICogV2UgaGF2ZSBhIHZhbGlkIGxvY2F0aW9uIGZvciBhIGNvbnN0YW50IHRoYXQncyBub3QgYSBk dXBlLiBMZXgKLQkJICogdG9rZW5zIHVudGlsIHdlIGZpbmQgdGhlIGRlc2lyZWQgY29uc3RhbnQu Ci0JCSAqLwotCQlmb3IgKDs7KQotCQl7Ci0JCQl0b2sgPSBjb3JlX3l5bGV4KCZ5eWx2YWwsICZ5 eWxsb2MsIHl5c2Nhbm5lcik7Ci0KLQkJCS8qIFdlIHNob3VsZCBub3QgaGl0IGVuZC1vZi1zdHJp bmcsIGJ1dCBpZiB3ZSBkbywgYmVoYXZlIHNhbmVseSAqLwotCQkJaWYgKHRvayA9PSAwKQotCQkJ CWJyZWFrOwkJCS8qIG91dCBvZiBpbm5lciBmb3ItbG9vcCAqLwotCi0JCQkvKgotCQkJICogV2Ug c2hvdWxkIGZpbmQgdGhlIHRva2VuIHBvc2l0aW9uIGV4YWN0bHksIGJ1dCBpZiB3ZSBzb21laG93 Ci0JCQkgKiBydW4gcGFzdCBpdCwgd29yayB3aXRoIHRoYXQuCi0JCQkgKi8KLQkJCWlmICh5eWxs b2MgPj0gbG9jKQotCQkJewotCQkJCWlmIChxdWVyeVtsb2NdID09ICctJykKLQkJCQl7Ci0JCQkJ CS8qCi0JCQkJCSAqIEl0J3MgYSBuZWdhdGl2ZSB2YWx1ZSAtIHRoaXMgaXMgdGhlIG9uZSBhbmQg b25seSBjYXNlCi0JCQkJCSAqIHdoZXJlIHdlIHJlcGxhY2UgbW9yZSB0aGFuIGEgc2luZ2xlIHRv a2VuLgotCQkJCQkgKgotCQkJCQkgKiBEbyBub3QgY29tcGVuc2F0ZSBmb3IgdGhlIGNvcmUgc3lz dGVtJ3Mgc3BlY2lhbC1jYXNlCi0JCQkJCSAqIGFkanVzdG1lbnQgb2YgbG9jYXRpb24gdG8gdGhh dCBvZiB0aGUgbGVhZGluZyAnLScKLQkJCQkJICogb3BlcmF0b3IgaW4gdGhlIGV2ZW50IG9mIGEg bmVnYXRpdmUgY29uc3RhbnQuICBJdCBpcwotCQkJCQkgKiBhbHNvIHVzZWZ1bCBmb3Igb3VyIHB1 cnBvc2VzIHRvIHN0YXJ0IGZyb20gdGhlIG1pbnVzCi0JCQkJCSAqIHN5bWJvbC4gIEluIHRoaXMg d2F5LCBxdWVyaWVzIGxpa2UgInNlbGVjdCAqIGZyb20gZm9vCi0JCQkJCSAqIHdoZXJlIGJhciA9 IDEiIGFuZCAic2VsZWN0ICogZnJvbSBmb28gd2hlcmUgYmFyID0gLTIiCi0JCQkJCSAqIHdpbGwg aGF2ZSBpZGVudGljYWwgbm9ybWFsaXplZCBxdWVyeSBzdHJpbmdzLgotCQkJCQkgKi8KLQkJCQkJ dG9rID0gY29yZV95eWxleCgmeXlsdmFsLCAmeXlsbG9jLCB5eXNjYW5uZXIpOwotCQkJCQlpZiAo dG9rID09IDApCi0JCQkJCQlicmVhazsJLyogb3V0IG9mIGlubmVyIGZvci1sb29wICovCi0JCQkJ fQotCi0JCQkJLyoKLQkJCQkgKiBXZSBub3cgcmVseSBvbiB0aGUgYXNzdW1wdGlvbiB0aGF0IGZs ZXggaGFzIHBsYWNlZCBhIHplcm8KLQkJCQkgKiBieXRlIGFmdGVyIHRoZSB0ZXh0IG9mIHRoZSBj dXJyZW50IHRva2VuIGluIHNjYW5idWYuCi0JCQkJICovCi0JCQkJbG9jc1tpXS5sZW5ndGggPSBz dHJsZW4oeXlleHRyYS5zY2FuYnVmICsgbG9jKTsKLQkJCQlicmVhazsJCQkvKiBvdXQgb2YgaW5u ZXIgZm9yLWxvb3AgKi8KLQkJCX0KLQkJfQotCi0JCS8qIElmIHdlIGhpdCBlbmQtb2Ytc3RyaW5n LCBnaXZlIHVwLCBsZWF2aW5nIHJlbWFpbmluZyBsZW5ndGhzIC0xICovCi0JCWlmICh0b2sgPT0g MCkKLQkJCWJyZWFrOwotCX0KLQotCXNjYW5uZXJfZmluaXNoKHl5c2Nhbm5lcik7Ci19Ci0KLS8q Ci0gKiBjb21wX2xvY2F0aW9uOiBjb21wYXJhdG9yIGZvciBxc29ydGluZyBMb2NhdGlvbkxlbiBz dHJ1Y3RzIGJ5IGxvY2F0aW9uCi0gKi8KLXN0YXRpYyBpbnQKLWNvbXBfbG9jYXRpb24oY29uc3Qg dm9pZCAqYSwgY29uc3Qgdm9pZCAqYikKLXsKLQlpbnQJCQlsID0gKChjb25zdCBMb2NhdGlvbkxl biAqKSBhKS0+bG9jYXRpb247Ci0JaW50CQkJciA9ICgoY29uc3QgTG9jYXRpb25MZW4gKikgYikt PmxvY2F0aW9uOwotCi0JcmV0dXJuIHBnX2NtcF9zMzIobCwgcik7Ci19CmRpZmYgLS1naXQgYS9z cmMvYmFja2VuZC9ub2Rlcy9xdWVyeWp1bWJsZWZ1bmNzLmMgYi9zcmMvYmFja2VuZC9ub2Rlcy9x dWVyeWp1bWJsZWZ1bmNzLmMKaW5kZXggODdkYjhkYzFhMzIuLmQ0YjI2MjAyYzQ3IDEwMDY0NAot LS0gYS9zcmMvYmFja2VuZC9ub2Rlcy9xdWVyeWp1bWJsZWZ1bmNzLmMKKysrIGIvc3JjL2JhY2tl bmQvbm9kZXMvcXVlcnlqdW1ibGVmdW5jcy5jCkBAIC00MCwxMCArNDAsMTIgQEAKICNpbmNsdWRl ICJhY2Nlc3MvdHJhbnNhbS5oIgogI2luY2x1ZGUgImNhdGFsb2cvcGdfcHJvYy5oIgogI2luY2x1 ZGUgImNvbW1vbi9oYXNoZm4uaCIKKyNpbmNsdWRlICJjb21tb24vaW50LmgiCiAjaW5jbHVkZSAi bWlzY2FkbWluLmgiCiAjaW5jbHVkZSAibm9kZXMvbm9kZUZ1bmNzLmgiCiAjaW5jbHVkZSAibm9k ZXMvcXVlcnlqdW1ibGUuaCIKICNpbmNsdWRlICJ1dGlscy9sc3lzY2FjaGUuaCIKKyNpbmNsdWRl ICJwYXJzZXIvc2Nhbm5lci5oIgogI2luY2x1ZGUgInBhcnNlci9zY2Fuc3VwLmgiCiAKICNkZWZp bmUgSlVNQkxFX1NJWkUJCQkJMTAyNAkvKiBxdWVyeSBzZXJpYWxpemF0aW9uIGJ1ZmZlciBzaXpl ICovCkBAIC03NzMsMyArNzc1LDI0OSBAQCBfanVtYmxlUmFuZ2VUYmxFbnRyeV9lcmVmKEp1bWJs ZVN0YXRlICpqc3RhdGUsCiAJICovCiAJSlVNQkxFX1NUUklORyhhbGlhc25hbWUpOwogfQorCisv KgorICogQ29tcExvY2F0aW9uOiBjb21wYXJhdG9yIGZvciBxc29ydGluZyBMb2NhdGlvbkxlbiBz dHJ1Y3RzIGJ5IGxvY2F0aW9uCisgKi8KK3N0YXRpYyBpbnQKK0NvbXBMb2NhdGlvbihjb25zdCB2 b2lkICphLCBjb25zdCB2b2lkICpiKQoreworCWludAkJCWwgPSAoKGNvbnN0IExvY2F0aW9uTGVu ICopIGEpLT5sb2NhdGlvbjsKKwlpbnQJCQlyID0gKChjb25zdCBMb2NhdGlvbkxlbiAqKSBiKS0+ bG9jYXRpb247CisKKwlyZXR1cm4gcGdfY21wX3MzMihsLCByKTsKK30KKworLyoKKyAqIEdpdmVu IGEgdmFsaWQgU1FMIHN0cmluZyBhbmQgYW4gYXJyYXkgb2YgY29uc3RhbnQtbG9jYXRpb24gcmVj b3JkcywKKyAqIGZpbGwgaW4gdGhlIHRleHR1YWwgbGVuZ3RocyBvZiB0aG9zZSBjb25zdGFudHMg aW4gSnVtYmxlU3RhdGUuCisgKgorICogVGhlIGNvbnN0YW50cyBtYXkgdXNlIGFueSBhbGxvd2Vk IGNvbnN0YW50IHN5bnRheCwgc3VjaCBhcyBmbG9hdCBsaXRlcmFscywKKyAqIGJpdC1zdHJpbmdz LCBzaW5nbGUtcXVvdGVkIHN0cmluZ3MgYW5kIGRvbGxhci1xdW90ZWQgc3RyaW5ncy4gIFRoaXMg aXMKKyAqIGFjY29tcGxpc2hlZCBieSB1c2luZyB0aGUgcHVibGljIEFQSSBmb3IgdGhlIGNvcmUg c2Nhbm5lci4KKyAqCisgKiBNdWx0aXBsZSBjb25zdGFudHMgY2FuIGhhdmUgdGhlIHNhbWUgbG9j YXRpb24uICBXZSByZXNldCBsZW5ndGhzIG9mIHRob3NlCisgKiBwYXN0IHRoZSBmaXJzdCB0byAt MSBzbyB0aGF0IHRoZXkgY2FuIGxhdGVyIGJlIGlnbm9yZWQuCisgKgorICogTi5CLiBUaGVyZSBp cyBhbiBhc3N1bXB0aW9uIHRoYXQgYSAnLScgY2hhcmFjdGVyIGF0IGEgQ29uc3QgbG9jYXRpb24g YmVnaW5zCisgKiBhIG5lZ2F0aXZlIG51bWVyaWMgY29uc3RhbnQuICBUaGlzIHByZWNsdWRlcyB0 aGVyZSBldmVyIGJlaW5nIGFub3RoZXIKKyAqIHJlYXNvbiBmb3IgYSBjb25zdGFudCB0byBzdGFy dCB3aXRoIGEgJy0nLgorICovCitzdGF0aWMgdm9pZAorU2V0Q29uc3RhbnRMZW5ndGhzKEp1bWJs ZVN0YXRlICpqc3RhdGUsIGNvbnN0IGNoYXIgKnF1ZXJ5LAorCQkJCSAgIGludCBxdWVyeV9sb2Mp Cit7CisJTG9jYXRpb25MZW4gKmxvY3M7CisJY29yZV95eXNjYW5fdCB5eXNjYW5uZXI7CisJY29y ZV95eV9leHRyYV90eXBlIHl5ZXh0cmE7CisJY29yZV9ZWVNUWVBFIHl5bHZhbDsKKwlZWUxUWVBF CQl5eWxsb2M7CisKKwkvKgorCSAqIFNvcnQgdGhlIHJlY29yZHMgYnkgbG9jYXRpb24gc28gdGhh dCB3ZSBjYW4gcHJvY2VzcyB0aGVtIGluIG9yZGVyIHdoaWxlCisJICogc2Nhbm5pbmcgdGhlIHF1 ZXJ5IHRleHQuCisJICovCisJaWYgKGpzdGF0ZS0+Y2xvY2F0aW9uc19jb3VudCA+IDEpCisJCXFz b3J0KGpzdGF0ZS0+Y2xvY2F0aW9ucywganN0YXRlLT5jbG9jYXRpb25zX2NvdW50LAorCQkJICBz aXplb2YoTG9jYXRpb25MZW4pLCBDb21wTG9jYXRpb24pOworCWxvY3MgPSBqc3RhdGUtPmNsb2Nh dGlvbnM7CisKKwkvKiBpbml0aWFsaXplIHRoZSBmbGV4IHNjYW5uZXIgLS0tIHNob3VsZCBtYXRj aCByYXdfcGFyc2VyKCkgKi8KKwl5eXNjYW5uZXIgPSBzY2FubmVyX2luaXQocXVlcnksCisJCQkJ CQkJICZ5eWV4dHJhLAorCQkJCQkJCSAmU2NhbktleXdvcmRzLAorCQkJCQkJCSBTY2FuS2V5d29y ZFRva2Vucyk7CisKKwkvKiB3ZSBkb24ndCB3YW50IHRvIHJlLWVtaXQgYW55IGVzY2FwZSBzdHJp bmcgd2FybmluZ3MgKi8KKwl5eWV4dHJhLmVzY2FwZV9zdHJpbmdfd2FybmluZyA9IGZhbHNlOwor CisJLyogU2VhcmNoIGZvciBlYWNoIGNvbnN0YW50LCBpbiBzZXF1ZW5jZSAqLworCWZvciAoaW50 IGkgPSAwOyBpIDwganN0YXRlLT5jbG9jYXRpb25zX2NvdW50OyBpKyspCisJeworCQlpbnQJCQls b2M7CisJCWludAkJCXRvazsKKworCQkvKiBJZ25vcmUgY29uc3RhbnRzIGFmdGVyIHRoZSBmaXJz dCBvbmUgaW4gdGhlIHNhbWUgbG9jYXRpb24gKi8KKwkJaWYgKGkgPiAwICYmIGxvY3NbaV0ubG9j YXRpb24gPT0gbG9jc1tpIC0gMV0ubG9jYXRpb24pCisJCXsKKwkJCWxvY3NbaV0ubGVuZ3RoID0g LTE7CisJCQljb250aW51ZTsKKwkJfQorCisJCWlmIChsb2NzW2ldLnNxdWFzaGVkKQorCQkJY29u dGludWU7CQkJLyogc3F1YXNoYWJsZSBsaXN0LCBpZ25vcmUgKi8KKworCQkvKgorCQkgKiBBZGp1 c3QgdGhlIGNvbnN0YW50J3MgbG9jYXRpb24gdXNpbmcgdGhlIHByb3ZpZGVkIHN0YXJ0aW5nIGxv Y2F0aW9uCisJCSAqIG9mIHRoZSBjdXJyZW50IHN0YXRlbWVudC4gVGhpcyBhbGxvd3MgdXMgdG8g YXZvaWQgc2Nhbm5pbmcgYQorCQkgKiBtdWx0aS1zdGF0ZW1lbnQgc3RyaW5nIGZyb20gdGhlIGJl Z2lubmluZy4KKwkJICovCisJCWxvYyA9IGxvY3NbaV0ubG9jYXRpb24gLSBxdWVyeV9sb2M7CisJ CUFzc2VydChsb2MgPj0gMCk7CisKKwkJLyoKKwkJICogV2UgaGF2ZSBhIHZhbGlkIGxvY2F0aW9u IGZvciBhIGNvbnN0YW50IHRoYXQncyBub3QgYSBkdXBlLiBMZXgKKwkJICogdG9rZW5zIHVudGls IHdlIGZpbmQgdGhlIGRlc2lyZWQgY29uc3RhbnQuCisJCSAqLworCQlmb3IgKDs7KQorCQl7CisJ CQl0b2sgPSBjb3JlX3l5bGV4KCZ5eWx2YWwsICZ5eWxsb2MsIHl5c2Nhbm5lcik7CisKKwkJCS8q IFdlIHNob3VsZCBub3QgaGl0IGVuZC1vZi1zdHJpbmcsIGJ1dCBpZiB3ZSBkbywgYmVoYXZlIHNh bmVseSAqLworCQkJaWYgKHRvayA9PSAwKQorCQkJCWJyZWFrOwkJCS8qIG91dCBvZiBpbm5lciBm b3ItbG9vcCAqLworCisJCQkvKgorCQkJICogV2Ugc2hvdWxkIGZpbmQgdGhlIHRva2VuIHBvc2l0 aW9uIGV4YWN0bHksIGJ1dCBpZiB3ZSBzb21laG93CisJCQkgKiBydW4gcGFzdCBpdCwgd29yayB3 aXRoIHRoYXQuCisJCQkgKi8KKwkJCWlmICh5eWxsb2MgPj0gbG9jKQorCQkJeworCQkJCWlmIChx dWVyeVtsb2NdID09ICctJykKKwkJCQl7CisJCQkJCS8qCisJCQkJCSAqIEl0J3MgYSBuZWdhdGl2 ZSB2YWx1ZSAtIHRoaXMgaXMgdGhlIG9uZSBhbmQgb25seSBjYXNlCisJCQkJCSAqIHdoZXJlIHdl IHJlcGxhY2UgbW9yZSB0aGFuIGEgc2luZ2xlIHRva2VuLgorCQkJCQkgKgorCQkJCQkgKiBEbyBu b3QgY29tcGVuc2F0ZSBmb3IgdGhlIHNwZWNpYWwtY2FzZSBhZGp1c3RtZW50IG9mCisJCQkJCSAq IGxvY2F0aW9uIHRvIHRoYXQgb2YgdGhlIGxlYWRpbmcgJy0nIG9wZXJhdG9yIGluIHRoZQorCQkJ CQkgKiBldmVudCBvZiBhIG5lZ2F0aXZlIGNvbnN0YW50IChzZWUgZG9OZWdhdGUoKSBpbgorCQkJ CQkgKiBncmFtLnkpLiAgSXQgaXMgYWxzbyB1c2VmdWwgZm9yIG91ciBwdXJwb3NlcyB0byBzdGFy dAorCQkJCQkgKiBmcm9tIHRoZSBtaW51cyBzeW1ib2wuICBJbiB0aGlzIHdheSwgcXVlcmllcyBs aWtlCisJCQkJCSAqICJzZWxlY3QgKiBmcm9tIGZvbyB3aGVyZSBiYXIgPSAxIiBhbmQgInNlbGVj dCAqIGZyb20KKwkJCQkJICogZm9vIHdoZXJlIGJhciA9IC0yIiB3aWxsIGhhdmUgaWRlbnRpY2Fs IG5vcm1hbGl6ZWQKKwkJCQkJICogcXVlcnkgc3RyaW5ncy4KKwkJCQkJICovCisJCQkJCXRvayA9 IGNvcmVfeXlsZXgoJnl5bHZhbCwgJnl5bGxvYywgeXlzY2FubmVyKTsKKwkJCQkJaWYgKHRvayA9 PSAwKQorCQkJCQkJYnJlYWs7CS8qIG91dCBvZiBpbm5lciBmb3ItbG9vcCAqLworCQkJCX0KKwor CQkJCS8qCisJCQkJICogV2Ugbm93IHJlbHkgb24gdGhlIGFzc3VtcHRpb24gdGhhdCBmbGV4IGhh cyBwbGFjZWQgYSB6ZXJvCisJCQkJICogYnl0ZSBhZnRlciB0aGUgdGV4dCBvZiB0aGUgY3VycmVu dCB0b2tlbiBpbiBzY2FuYnVmLgorCQkJCSAqLworCQkJCWxvY3NbaV0ubGVuZ3RoID0gc3RybGVu KHl5ZXh0cmEuc2NhbmJ1ZiArIGxvYyk7CisJCQkJYnJlYWs7CQkJLyogb3V0IG9mIGlubmVyIGZv ci1sb29wICovCisJCQl9CisJCX0KKworCQkvKiBJZiB3ZSBoaXQgZW5kLW9mLXN0cmluZywgZ2l2 ZSB1cCwgbGVhdmluZyByZW1haW5pbmcgbGVuZ3RocyAtMSAqLworCQlpZiAodG9rID09IDApCisJ CQlicmVhazsKKwl9CisKKwlzY2FubmVyX2ZpbmlzaCh5eXNjYW5uZXIpOworfQorCisvKgorICog Q2FsbGJhY2sgdG8gZ2VuZXJhdGUgYSBub3JtYWxpemVkIHZlcnNpb24gb2YgdGhlIHF1ZXJ5IHN0 cmluZyB0aGF0IHdpbGwgYmUgdXNlZCB0bworICogcmVwcmVzZW50IGFsbCBzaW1pbGFyIHF1ZXJp ZXMuCisgKgorICogSXQgaXMgdGhlIGNhbGxlcidzIGpvYiB0byBlbnN1cmUgdGhhdCB0aGUgc3Ry aW5nIGlzIGEgdmFsaWQgU1FMIHN0YXRlbWVudAorICogd2l0aCB0aGUgY29ycmVjdCBjb25zdGFu dCBsb2NhdGlvbnMgaW4ganN0YXRlLT5jbG9jYXRpb25zLiBTaW5jZSBpbgorICogcHJhY3RpY2Ug dGhlIHN0cmluZyBoYXMgYWxyZWFkeSBiZWVuIHBhcnNlZCB1c2luZyB0aGUgYXV0aG9yaXRhdGl2 ZSBwYXJzZXIKKyAqIGFuZCB0aGUgbG9jYXRpb25zIGFyZSBzZXQgYnkgY29yZSBxdWVyeSBqdW1i bGluZywgdGhpcyBzaG91bGQgbm90IGJlIGEgcHJvYmxlbS4KKyAqCisgKiAqcXVlcnlfbGVuX3Ag Y29udGFpbnMgdGhlIGlucHV0IHN0cmluZyBsZW5ndGgsIGFuZCBpcyB1cGRhdGVkIHdpdGgKKyAq IHRoZSByZXN1bHQgc3RyaW5nIGxlbmd0aCBvbiBleGl0LiAgVGhlIHJlc3VsdGluZyBzdHJpbmcg bWlnaHQgYmUgbG9uZ2VyCisgKiBvciBzaG9ydGVyIGRlcGVuZGluZyBvbiB3aGF0IGhhcHBlbnMg d2l0aCByZXBsYWNlbWVudCBvZiBjb25zdGFudHMuCisgKgorICogUmV0dXJucyBhIHBhbGxvYydk IHN0cmluZy4KKyAqLworY2hhciAqCitHZW5lcmF0ZU5vcm1hbGl6ZWRRdWVyeShKdW1ibGVTdGF0 ZSAqanN0YXRlLCBjb25zdCBjaGFyICpxdWVyeSwKKwkJCQkJCWludCBxdWVyeV9sb2MsIGludCAq cXVlcnlfbGVuX3ApCit7CisJY2hhcgkgICAqbm9ybV9xdWVyeTsKKwlpbnQJCQlxdWVyeV9sZW4g PSAqcXVlcnlfbGVuX3A7CisJaW50CQkJbm9ybV9xdWVyeV9idWZsZW4sCS8qIFNwYWNlIGFsbG93 ZWQgZm9yIG5vcm1fcXVlcnkgKi8KKwkJCQlsZW5fdG9fd3J0LAkJLyogTGVuZ3RoIChpbiBieXRl cykgdG8gd3JpdGUgKi8KKwkJCQlxdWVyX2xvYyA9IDAsCS8qIFNvdXJjZSBxdWVyeSBieXRlIGxv Y2F0aW9uICovCisJCQkJbl9xdWVyX2xvYyA9IDAsIC8qIE5vcm1hbGl6ZWQgcXVlcnkgYnl0ZSBs b2NhdGlvbiAqLworCQkJCWxhc3Rfb2ZmID0gMCwJLyogT2Zmc2V0IGZyb20gc3RhcnQgZm9yIHBy ZXZpb3VzIHRvayAqLworCQkJCWxhc3RfdG9rX2xlbiA9IDA7CS8qIExlbmd0aCAoaW4gYnl0ZXMp IG9mIHRoYXQgdG9rICovCisJaW50CQkJbnVtX2NvbnN0YW50c19yZXBsYWNlZCA9IDA7CisKKwkv KgorCSAqIFNldCBjb25zdGFudHMnIGxlbmd0aHMgaW4gSnVtYmxlU3RhdGUsIGFzIG9ubHkgbG9j YXRpb25zIGFyZSBzZXQgZHVyaW5nCisJICogRG9KdW1ibGUoKS4gTm90ZSB0aGlzIGFsc28gZW5z dXJlcyB0aGUgaXRlbXMgYXJlIHNvcnRlZCBieSBsb2NhdGlvbi4KKwkgKi8KKwlTZXRDb25zdGFu dExlbmd0aHMoanN0YXRlLCBxdWVyeSwgcXVlcnlfbG9jKTsKKworCS8qCisJICogQWxsb3cgZm9y ICRuIHN5bWJvbHMgdG8gYmUgbG9uZ2VyIHRoYW4gdGhlIGNvbnN0YW50cyB0aGV5IHJlcGxhY2Uu CisJICogQ29uc3RhbnRzIG11c3QgdGFrZSBhdCBsZWFzdCBvbmUgYnl0ZSBpbiB0ZXh0IGZvcm0s IHdoaWxlIGEgJG4gc3ltYm9sCisJICogY2VydGFpbmx5IGlzbid0IG1vcmUgdGhhbiAxMSBieXRl cywgZXZlbiBpZiBuIHJlYWNoZXMgSU5UX01BWC4gIFdlCisJICogY291bGQgcmVmaW5lIHRoYXQg bGltaXQgYmFzZWQgb24gdGhlIG1heCB2YWx1ZSBvZiBuIGZvciB0aGUgY3VycmVudAorCSAqIHF1 ZXJ5LCBidXQgaXQgaGFyZGx5IHNlZW1zIHdvcnRoIGFueSBleHRyYSBlZmZvcnQgdG8gZG8gc28u CisJICovCisJbm9ybV9xdWVyeV9idWZsZW4gPSBxdWVyeV9sZW4gKyBqc3RhdGUtPmNsb2NhdGlv bnNfY291bnQgKiAxMDsKKworCS8qIEFsbG9jYXRlIHJlc3VsdCBidWZmZXIgKi8KKwlub3JtX3F1 ZXJ5ID0gcGFsbG9jKG5vcm1fcXVlcnlfYnVmbGVuICsgMSk7CisKKwlmb3IgKGludCBpID0gMDsg aSA8IGpzdGF0ZS0+Y2xvY2F0aW9uc19jb3VudDsgaSsrKQorCXsKKwkJaW50CQkJb2ZmLAkJLyog T2Zmc2V0IGZyb20gc3RhcnQgZm9yIGN1ciB0b2sgKi8KKwkJCQkJdG9rX2xlbjsJLyogTGVuZ3Ro IChpbiBieXRlcykgb2YgdGhhdCB0b2sgKi8KKworCQkvKgorCQkgKiBJZiB3ZSBoYXZlIGFuIGV4 dGVybmFsIHBhcmFtIGF0IHRoaXMgbG9jYXRpb24sIGJ1dCBubyBsaXN0cyBhcmUKKwkJICogYmVp bmcgc3F1YXNoZWQgYWNyb3NzIHRoZSBxdWVyeSwgdGhlbiB3ZSBza2lwIGhlcmU7IHRoaXMgd2ls bCBtYWtlCisJCSAqIHVzIHByaW50IHRoZSBjaGFyYWN0ZXJzIGZvdW5kIGluIHRoZSBvcmlnaW5h bCBxdWVyeSB0aGF0IHJlcHJlc2VudAorCQkgKiB0aGUgcGFyYW1ldGVyIGluIHRoZSBuZXh0IGl0 ZXJhdGlvbiAob3IgYWZ0ZXIgdGhlIGxvb3AgaXMgZG9uZSksCisJCSAqIHdoaWNoIGlzIGEgYml0 IG9kZCBidXQgc2VlbXMgdG8gd29yayBva2F5IGluIG1vc3QgY2FzZXMuCisJCSAqLworCQlpZiAo anN0YXRlLT5jbG9jYXRpb25zW2ldLmV4dGVybl9wYXJhbSAmJiAhanN0YXRlLT5oYXNfc3F1YXNo ZWRfbGlzdHMpCisJCQljb250aW51ZTsKKworCQlvZmYgPSBqc3RhdGUtPmNsb2NhdGlvbnNbaV0u bG9jYXRpb247CisKKwkJLyogQWRqdXN0IHRoZSBjb25zdGFudCdzIGxvY2F0aW9uIChzZWUgU2V0 Q29uc3RhbnRMZW5ndGhzKSAqLworCQlvZmYgLT0gcXVlcnlfbG9jOworCisJCXRva19sZW4gPSBq c3RhdGUtPmNsb2NhdGlvbnNbaV0ubGVuZ3RoOworCisJCWlmICh0b2tfbGVuIDwgMCkKKwkJCWNv bnRpbnVlOwkJCS8qIGlnbm9yZSBhbnkgZHVwbGljYXRlcyAqLworCisJCS8qIENvcHkgbmV4dCBj aHVuayAod2hhdCBwcmVjZWRlcyB0aGUgbmV4dCBjb25zdGFudCkgKi8KKwkJbGVuX3RvX3dydCA9 IG9mZiAtIGxhc3Rfb2ZmOworCQlsZW5fdG9fd3J0IC09IGxhc3RfdG9rX2xlbjsKKwkJQXNzZXJ0 KGxlbl90b193cnQgPj0gMCk7CisJCW1lbWNweShub3JtX3F1ZXJ5ICsgbl9xdWVyX2xvYywgcXVl cnkgKyBxdWVyX2xvYywgbGVuX3RvX3dydCk7CisJCW5fcXVlcl9sb2MgKz0gbGVuX3RvX3dydDsK KworCQkvKgorCQkgKiBBbmQgaW5zZXJ0IGEgcGFyYW0gc3ltYm9sIGluIHBsYWNlIG9mIHRoZSBj b25zdGFudCB0b2tlbjsgYW5kLCBpZgorCQkgKiB3ZSBoYXZlIGEgc3F1YXNoYWJsZSBsaXN0LCBp bnNlcnQgYSBwbGFjZWhvbGRlciBjb21tZW50IHN0YXJ0aW5nCisJCSAqIGZyb20gdGhlIGxpc3Qn cyBzZWNvbmQgdmFsdWUuCisJCSAqLworCQluX3F1ZXJfbG9jICs9IHNwcmludGYobm9ybV9xdWVy eSArIG5fcXVlcl9sb2MsICIkJWQlcyIsCisJCQkJCQkJICBudW1fY29uc3RhbnRzX3JlcGxhY2Vk ICsgMSArIGpzdGF0ZS0+aGlnaGVzdF9leHRlcm5fcGFyYW1faWQsCisJCQkJCQkJICBqc3RhdGUt PmNsb2NhdGlvbnNbaV0uc3F1YXNoZWQgPyAiIC8qLCAuLi4gKi8iIDogIiIpOworCQludW1fY29u c3RhbnRzX3JlcGxhY2VkKys7CisKKwkJLyogbW92ZSBmb3J3YXJkICovCisJCXF1ZXJfbG9jID0g b2ZmICsgdG9rX2xlbjsKKwkJbGFzdF9vZmYgPSBvZmY7CisJCWxhc3RfdG9rX2xlbiA9IHRva19s ZW47CisJfQorCisJLyoKKwkgKiBXZSd2ZSBjb3BpZWQgdXAgdW50aWwgdGhlIGxhc3QgaWdub3Jh YmxlIGNvbnN0YW50LiAgQ29weSBvdmVyIHRoZQorCSAqIHJlbWFpbmluZyBieXRlcyBvZiB0aGUg b3JpZ2luYWwgcXVlcnkgc3RyaW5nLgorCSAqLworCWxlbl90b193cnQgPSBxdWVyeV9sZW4gLSBx dWVyX2xvYzsKKworCUFzc2VydChsZW5fdG9fd3J0ID49IDApOworCW1lbWNweShub3JtX3F1ZXJ5 ICsgbl9xdWVyX2xvYywgcXVlcnkgKyBxdWVyX2xvYywgbGVuX3RvX3dydCk7CisJbl9xdWVyX2xv YyArPSBsZW5fdG9fd3J0OworCisJQXNzZXJ0KG5fcXVlcl9sb2MgPD0gbm9ybV9xdWVyeV9idWZs ZW4pOworCW5vcm1fcXVlcnlbbl9xdWVyX2xvY10gPSAnXDAnOworCisJKnF1ZXJ5X2xlbl9wID0g bl9xdWVyX2xvYzsKKwlyZXR1cm4gbm9ybV9xdWVyeTsKK30KZGlmZiAtLWdpdCBhL3NyYy9pbmNs dWRlL25vZGVzL3F1ZXJ5anVtYmxlLmggYi9zcmMvaW5jbHVkZS9ub2Rlcy9xdWVyeWp1bWJsZS5o CmluZGV4IDlmODE4OTMwMDNjLi5lMzU0Zjg1N2MzNyAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUv bm9kZXMvcXVlcnlqdW1ibGUuaAorKysgYi9zcmMvaW5jbHVkZS9ub2Rlcy9xdWVyeWp1bWJsZS5o CkBAIC05MSw2ICs5MSw4IEBAIGV4dGVybiBQR0RMTElNUE9SVCBpbnQgY29tcHV0ZV9xdWVyeV9p ZDsKIAogCiBleHRlcm4gY29uc3QgY2hhciAqQ2xlYW5RdWVyeXRleHQoY29uc3QgY2hhciAqcXVl cnksIGludCAqbG9jYXRpb24sIGludCAqbGVuKTsKK2V4dGVybiBjaGFyICpHZW5lcmF0ZU5vcm1h bGl6ZWRRdWVyeShKdW1ibGVTdGF0ZSAqanN0YXRlLCBjb25zdCBjaGFyICpxdWVyeSwKKwkJCQkJ CQkJCSBpbnQgcXVlcnlfbG9jLCBpbnQgKnF1ZXJ5X2xlbl9wKTsKIGV4dGVybiBKdW1ibGVTdGF0 ZSAqSnVtYmxlUXVlcnkoUXVlcnkgKnF1ZXJ5KTsKIGV4dGVybiB2b2lkIEVuYWJsZVF1ZXJ5SWQo dm9pZCk7CiAKLS0gCjIuNDcuMwoK --0000000000000b041d064d2ede06--