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 1vw3l6-000RVP-0l for pgsql-hackers@arkaria.postgresql.org; Fri, 27 Feb 2026 19:44:20 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1vw3k4-006FOk-2d for pgsql-hackers@arkaria.postgresql.org; Fri, 27 Feb 2026 19:43:16 +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 1vw3k3-006FKz-2w for pgsql-hackers@lists.postgresql.org; Fri, 27 Feb 2026 19:43:16 +0000 Received: from mail-qt1-x82c.google.com ([2607:f8b0:4864:20::82c]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1vw3ju-00000001YMj-0x9Y for pgsql-hackers@postgresql.org; Fri, 27 Feb 2026 19:43:09 +0000 Received: by mail-qt1-x82c.google.com with SMTP id d75a77b69052e-506bad34f51so19774451cf.2 for ; Fri, 27 Feb 2026 11:43:07 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1772221386; cv=none; d=google.com; s=arc-20240605; b=XsjP9yi4oRHyEhIkRK1N2KbPd3noYKrvdANmqH7E9XhAN/J4ReT2WDZqxDUqKdYflO AZH2CTK11DMYiDwrseGzSYk+V4Lz13yyqbjW2gdzaAYxYtQwXKlOKAZ4VS66v92mfhqe PmVcPKw5PBW1nSQ4BP1WtUqxgO3Xp42czLyqr7E0IrCyvo/b/B3MdsPBMttR7XyIFvnt SoNulbr9Fo/GywYdu5G/6CDPzOibDnK1pX4WKgLfgW0OodmzEHOzUYEi6S3QaQqHVJTV bUmxyB/k7pVM5pvVisNM2nPXO4OjO5El1zYycE+o8sOqs8S9JjeSZwoshXPnp4/gh1b5 EIDA== 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=6CNuiT75U0yWMiuW86BNp2nkpOCxMtN+806q7t54dKc=; fh=pfkmzW6GKlJ0l1fsmHrQ2YGNtR4HiNVrGovoMNulRlY=; b=je1ZEmni4c3vf9RtMNSLbNk+QkB5trJkxKp0coWt/6r4ZwNGpS0UpBcHZw3FTpObKL YQIuhLjbb/9HRK/VVOEZFWGYJ3SE6ksKZgDhVSy7eBhsW/mbVRLfrkWnA/iw0xxfHKcA AD0WWdgXVs45iejxvnF/mlrZWK42JeLpMcy8wmyxHGt3K0c94+pIFoJ+OFVOoDlUsZfN 0l+8T9S5W+pHc15nj0TK095NVznrqlVxcgd1qXKAV+cMDZFy8hBvTrwF9pbA7/39cf2O 5oypOaCRiFVoEbgK4AWUulKczTOV8vsO/gQ8lS6smNEXWHNIq67tF4c8NeAIFuo5Y+3l hc+g==; darn=postgresql.org ARC-Authentication-Results: i=1; mx.google.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=enterprisedb.com; s=google; t=1772221386; x=1772826186; 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=6CNuiT75U0yWMiuW86BNp2nkpOCxMtN+806q7t54dKc=; b=WMmSpGaaNArYj0dBw4BNBlm+e7fiWuNXrEckY3r5fj9yJvfUcWU+gTKxjQWWdECxBn hnw1hoI3rzIRtV4sTGHf9+iENK3VbQMPD+ljVAQlkFXLGREaNg1dkNVkqYrShz720c6D uEJ5sg+gJx3Tzg3pAqbiG6RMgq8CKN5JbgySxz4oPpZmXI1de9y3ElMvBnSUYZgWDoVR p0rJW/MHm1dacAJ+7hLoDvzoUjcFth8O6MFk/o78PFlJ0/fjsFNOjxlTuuu1AOGZ7w+h VVaN2pQuGBSotItH8b7sLuMM2uyS8La4rY/YpewZxBKzk2zNsKX3Inwze/AJCtgd3k4K pieg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1772221386; x=1772826186; 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=6CNuiT75U0yWMiuW86BNp2nkpOCxMtN+806q7t54dKc=; b=CXYkLDlz4Vgb6RLVx52Im1l6YESoMy8AHFB2NDAxh5ooEdGUQ2vh2Ft/WknU6cmvzx w5WpT9eonEuwW6HZjPDjSfEgDAf8H+6PCh21SSJ7PLHl1BH2celkXgghcgujvFiVWy4s oUD1NoyglTW18ecqQeoAHVK4ep8LcJFa+grmlKsYb38oMS9RlcdK91DveoQ9fgLV0CLG KdYYmCN8keQH93ZA1t9/7nVCtW8E1QQvIE1SUDsphk2qDH2Nkl68OKPOQPvoi90eHZqc 73ZuQwrCX/0Bh4oAMb0xxm1S8oQAZg1NzMa7mtrnOXb5IxLe+ydZnH+KzdfPuJLsZzTx 7GTQ== X-Gm-Message-State: AOJu0Yw3opVAt0OZafCN2Uwvr6YwZQpXnj0ctxM/hid1QT8Go3v7mndG MpMceRdwQjeLIvXJjQGc0NCkQmDs23J+pQssjaUeizCzJ4U5SvGJ6JkpPoDVBF9nIgFwj/qNQR1 tqmqdxCn8g7gt9oSjD5+Kqm0iI/0lm7n0UpKXMZt7 X-Gm-Gg: ATEYQzwAh+sR9RHgMEN4mICwpIEGTdnNvDBMFKQe9YCgT1TJitBpFmD/8mwlVNiC5zk IRRWZFQ0V2lQZcFgfbdNk3h4OVS5VdyJuwPK14KQ14p81tw9srJWzM05b9XoAScezmVuifx+yLE 0cjX/DyyFtgNGmlLaxXDi08CmGX25E/vY1illU2ujlLkC1BRiRORxduT5h7RUA5j0dAGOrJBy4K 1k5/sHTLVYTKwTGG5q7AHqO78PjVkG++ycPp7R46zoKjMPXjCDUjwS5cmE+90Us9jf42mvtS7FJ IDxct6v+2g== X-Received: by 2002:a05:622a:204:b0:501:467d:17e8 with SMTP id d75a77b69052e-507529d4e0cmr54920441cf.61.1772221386284; Fri, 27 Feb 2026 11:43:06 -0800 (PST) MIME-Version: 1.0 References: <3720B2E1-0B96-4063-8D63-B5AE6AFEA159@gmail.com> In-Reply-To: From: Jacob Champion Date: Fri, 27 Feb 2026 11:42:52 -0800 X-Gm-Features: AaiRm50Irqtt0mTfpy-q9L7NO4glAplfIFK8QYVEP95_SzYnFh_8lUtZGdzlZr8 Message-ID: Subject: Re: [oauth] Stabilize the libpq-oauth ABI (and allow alternative implementations?) To: Zsolt Parragi Cc: PostgreSQL Hackers , Chao Li Content-Type: multipart/mixed; boundary="00000000000032285b064bd372e9" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --00000000000032285b064bd372e9 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Thu, Feb 26, 2026 at 1:56=E2=80=AFPM Jacob Champion wrote: > > And a few specific comments about the patches: > > Thank you for the review! v4 should address that feedback. (The Valgrind work isn't part of it, yet.) 0001 should be ready to go. I meant to put 0002 up in its own thread at the beginning of the week but got sidetracked, so I'll go do that now. 0003 has to wait on Valgrind, and 0004-5 have to wait on 0002. Thanks, --Jacob --00000000000032285b064bd372e9 Content-Type: text/plain; charset="US-ASCII"; name="since-v3.diff.txt" Content-Disposition: attachment; filename="since-v3.diff.txt" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mm5aregg0 MTogIDBiYzU0MGZiYjdlICEgMTogIDYyYzc5NWVmNDg5IG9hdXRoOiBSZXBvcnQgY2xlYW51cCBl cnJvcnMgYXMgd2FybmluZ3Mgb24gc3RkZXJyCiAgICBAQCBDb21taXQgbWVzc2FnZQogICAgICAg ICBwcmludCBXQVJOSU5HcyB3aGVuIHRoZXkgZmluZCB0aGVtc2VsdmVzIGluIHNpbWlsYXIgc2l0 dWF0aW9ucywgc28KICAgICAgICAgZm9sbG93IHRoZWlyIGxlYWQuCiAgICAgCiAgICArICAgIFJl dmlld2VkLWJ5OiBac29sdCBQYXJyYWdpIDx6c29sdC5wYXJyYWdpQHBlcmNvbmEuY29tPgogICAg KyAgICBEaXNjdXNzaW9uOiBodHRwczovL3Bvc3Rnci5lcy9tL0NBT1ltaSUyQm1FVV9xOXNyMVBN bUUtNHJMd0ZOJTNET2p5bmREd0ZadnBzTVUzUk5KTHJNOWclNDBtYWlsLmdtYWlsLmNvbQogICAg KwogICAgICAjIyBzcmMvaW50ZXJmYWNlcy9saWJwcS1vYXV0aC9vYXV0aC1jdXJsLmMgIyMKICAg IC1AQCBzcmMvaW50ZXJmYWNlcy9saWJwcS1vYXV0aC9vYXV0aC1jdXJsLmM6IGZyZWVfYXN5bmNf Y3R4KFBHY29ubiAqY29ubiwgc3RydWN0IGFzeW5jX2N0eCAqYWN0eCkKICAgICtAQCBzcmMvaW50 ZXJmYWNlcy9saWJwcS1vYXV0aC9vYXV0aC1jdXJsLmM6IHN0cnVjdCBhc3luY19jdHgKICAgICsg ICogVGVhcnMgZG93biB0aGUgQ3VybCBoYW5kbGVzIGFuZCBmcmVlcyB0aGUgYXN5bmNfY3R4Lgog ICAgKyAgKi8KICAgICsgc3RhdGljIHZvaWQKICAgICstZnJlZV9hc3luY19jdHgoUEdjb25uICpj b25uLCBzdHJ1Y3QgYXN5bmNfY3R4ICphY3R4KQogICAgKytmcmVlX2FzeW5jX2N0eChzdHJ1Y3Qg YXN5bmNfY3R4ICphY3R4KQogICAgKyB7CiAgICArIAkvKgogICAgKyAJICogSW4gZ2VuZXJhbCwg bm9uZSBvZiB0aGUgZXJyb3IgY2FzZXMgYmVsb3cgc2hvdWxkIGV2ZXIgaGFwcGVuIGlmIHdlIGhh dmUKICAgICAgCSAqIG5vIGJ1Z3MgYWJvdmUuIEJ1dCBpZiB3ZSBkbyBoaXQgdGhlbSwgc3VyZmFj aW5nIHRob3NlIGVycm9ycyBzb21laG93CiAgICAgIAkgKiBtaWdodCBiZSB0aGUgb25seSB3YXkg dG8gaGF2ZSBhIGNoYW5jZSB0byBkZWJ1ZyB0aGVtLgogICAgICAJICoKICAgIEBAIHNyYy9pbnRl cmZhY2VzL2xpYnBxLW9hdXRoL29hdXRoLWN1cmwuYzogZnJlZV9hc3luY19jdHgoUEdjb25uICpj b25uLCBzdHJ1Y3QgYXN5CiAgICAgIAl9CiAgICAgIAogICAgICAJZnJlZV9wcm92aWRlcigmYWN0 eC0+cHJvdmlkZXIpOwogICAgK0BAIHNyYy9pbnRlcmZhY2VzL2xpYnBxLW9hdXRoL29hdXRoLWN1 cmwuYzogcGdfZmVfY2xlYW51cF9vYXV0aF9mbG93KFBHY29ubiAqY29ubikKICAgICsgCiAgICAr IAlpZiAoc3RhdGUtPmFzeW5jX2N0eCkKICAgICsgCXsKICAgICstCQlmcmVlX2FzeW5jX2N0eChj b25uLCBzdGF0ZS0+YXN5bmNfY3R4KTsKICAgICsrCQlmcmVlX2FzeW5jX2N0eChzdGF0ZS0+YXN5 bmNfY3R4KTsKICAgICsgCQlzdGF0ZS0+YXN5bmNfY3R4ID0gTlVMTDsKICAgICsgCX0KICAgICsg CjI6ICAwNzQ2NDVlNWI0MSAhIDI6ICBiMzFhMzQwNmFmMiBsaWJwcTogQWRkIFBRZ2V0VGhyZWFk TG9jaygpIHRvIG1pcnJvciBQUXJlZ2lzdGVyVGhyZWFkTG9jaygpCiAgICBAQCBDb21taXQgbWVz c2FnZQogICAgICAgICBjdXJyZW50bHkgcmVsaWVzIG9uIGRpcmVjdCBpbmplY3Rpb24gb2YgcGdf Z190aHJlYWRsb2NrLCBhbmQgc2hvdWxkCiAgICAgICAgIGlkZWFsbHkgbm90LgogICAgIAogICAg KyAgICBSZXZpZXdlZC1ieTogWnNvbHQgUGFycmFnaSA8enNvbHQucGFycmFnaUBwZXJjb25hLmNv bT4KICAgICsgICAgRGlzY3Vzc2lvbjogaHR0cHM6Ly9wb3N0Z3IuZXMvbS9DQU9ZbWklMkJtRVVf cTlzcjFQTW1FLTRyTHdGTiUzRE9qeW5kRHdGWnZwc01VM1JOSkxyTTlnJTQwbWFpbC5nbWFpbC5j b20KICAgICsKICAgICAgIyMgc3JjL2ludGVyZmFjZXMvbGlicHEvZXhwb3J0cy50eHQgIyMKICAg ICBAQCBzcmMvaW50ZXJmYWNlcy9saWJwcS9leHBvcnRzLnR4dDogUFFnZXRBdXRoRGF0YUhvb2sg ICAgICAgICAyMDcKICAgICAgUFFkZWZhdWx0QXV0aERhdGFIb29rICAgICAyMDgKICAgIEBAIHNy Yy9pbnRlcmZhY2VzL2xpYnBxL2xpYnBxLWZlLmg6IGV4dGVybiAiQyIKICAgICAgCiAgICAgKy8q IEZlYXR1cmVzIGFkZGVkIGluIFBvc3RncmVTUUwgdjE5OiAqLwogICAgICsvKiBJbmRpY2F0ZXMg cHJlc2VuY2Ugb2YgUFFnZXRUaHJlYWRMb2NrICovCiAgICAtKyNkZWZpbmUgTElCUFFfSEFTX0dF VF9USFJFQURfTE9DSwogICAgKysjZGVmaW5lIExJQlBRX0hBU19HRVRfVEhSRUFEX0xPQ0sgMQog ICAgICsKICAgICAgLyoKICAgICAgICogT3B0aW9uIGZsYWdzIGZvciBQUWNvcHlSZXN1bHQKMzog IGI0MzFlZTdhMWUwICEgMzogIDYxZWViMTZjNDlkIGxpYnBxOiBJbnRyb2R1Y2UgUFFBVVRIREFU QV9PQVVUSF9CRUFSRVJfVE9LRU5fVjIKICAgIEBAIHNyYy9pbnRlcmZhY2VzL2xpYnBxL2xpYnBx LWZlLmgKICAgICBAQCBzcmMvaW50ZXJmYWNlcy9saWJwcS9saWJwcS1mZS5oOiBleHRlcm4gIkMi CiAgICAgIC8qIEZlYXR1cmVzIGFkZGVkIGluIFBvc3RncmVTUUwgdjE5OiAqLwogICAgICAvKiBJ bmRpY2F0ZXMgcHJlc2VuY2Ugb2YgUFFnZXRUaHJlYWRMb2NrICovCiAgICAtICNkZWZpbmUgTElC UFFfSEFTX0dFVF9USFJFQURfTE9DSwogICAgKyAjZGVmaW5lIExJQlBRX0hBU19HRVRfVEhSRUFE X0xPQ0sgMQogICAgICsvKiBJbmRpY2F0ZXMgcHJlc2VuY2Ugb2YgdGhlIFBRQVVUSERBVEFfT0FV VEhfQkVBUkVSX1RPS0VOX1YyIGF1dGhkYXRhIGhvb2sgKi8KICAgICArI2RlZmluZSBMSUJQUV9I QVNfT0FVVEhfQkVBUkVSX1RPS0VOX1YyIDEKICAgICAgCjQ6ICA1OWE1ZThlMjdkNiAhIDQ6ICAz ZWMxOTMzZjZkNCBsaWJwcS1vYXV0aDogVXNlIHRoZSBQR29hdXRoQmVhcmVyUmVxdWVzdFYyIEFQ SQogICAgQEAgc3JjL2ludGVyZmFjZXMvbGlicHEtb2F1dGgvZXhwb3J0cy50eHQKICAgICArcGdf c3RhcnRfb2F1dGhiZWFyZXIgICAgICAyCiAgICAgCiAgICAgICMjIHNyYy9pbnRlcmZhY2VzL2xp YnBxLW9hdXRoL21lc29uLmJ1aWxkICMjCiAgICAtQEAgc3JjL2ludGVyZmFjZXMvbGlicHEtb2F1 dGgvbWVzb24uYnVpbGQ6IGxpYnBxX29hdXRoX3N0ID0gc3RhdGljX2xpYnJhcnkoJ2xpYnBxLW9h dXRoJywKICAgICtAQCBzcmMvaW50ZXJmYWNlcy9saWJwcS1vYXV0aC9tZXNvbi5idWlsZDogZW5k aWYKICAgICAgCiAgICAgICMgVGhpcyBpcyBhbiBpbnRlcm5hbCBtb2R1bGU7IHdlIGRvbid0IHdh bnQgYW4gU09OQU1FIGFuZCB0aGVyZWZvcmUgZG8gbm90IHNldAogICAgICAjIFNPX01BSk9SX1ZF UlNJT04uCiAgICAgLWxpYnBxX29hdXRoX25hbWUgPSAnbGlicHEtb2F1dGgtQDBAJy5mb3JtYXQo cGdfdmVyc2lvbl9tYWpvcikKICAgICAtCiAgICArIGlmIGJ1aWxkX3NoYXJlZF9saWIKICAgICAt bGlicHFfb2F1dGhfc28gPSBzaGFyZWRfbW9kdWxlKGxpYnBxX29hdXRoX25hbWUsCiAgICAgK2xp YnBxX29hdXRoX3NvID0gc2hhcmVkX21vZHVsZSgnbGlicHEtb2F1dGgnLAogICAgICAgIGxpYnBx X29hdXRoX3NvdXJjZXMgKyBsaWJwcV9vYXV0aF9zb19zb3VyY2VzLAogICAgQEAgc3JjL2ludGVy ZmFjZXMvbGlicHEtb2F1dGgvb2F1dGgtY3VybC5jOiBlbnVtIE9BdXRoU3RlcAogICAgICAJZW51 bSBPQXV0aFN0ZXAgc3RlcDsJCS8qIHdoZXJlIGFyZSB3ZSBpbiB0aGUgZmxvdz8gKi8KICAgICAg CiAgICAgIAlpbnQJCQl0aW1lcmZkOwkJLyogZGVzY3JpcHRvciBmb3Igc2lnbmFsaW5nIGFzeW5j IHRpbWVvdXRzICovCiAgICAtQEAgc3JjL2ludGVyZmFjZXMvbGlicHEtb2F1dGgvb2F1dGgtY3Vy bC5jOiBzdHJ1Y3QgYXN5bmNfY3R4CiAgICAtICAqIFRlYXJzIGRvd24gdGhlIEN1cmwgaGFuZGxl cyBhbmQgZnJlZXMgdGhlIGFzeW5jX2N0eC4KICAgIC0gICovCiAgICAtIHN0YXRpYyB2b2lkCiAg ICAtLWZyZWVfYXN5bmNfY3R4KFBHY29ubiAqY29ubiwgc3RydWN0IGFzeW5jX2N0eCAqYWN0eCkK ICAgIC0rZnJlZV9hc3luY19jdHgoUEdvYXV0aEJlYXJlclJlcXVlc3RWMiAqcmVxLCBzdHJ1Y3Qg YXN5bmNfY3R4ICphY3R4KQogICAgLSB7CiAgICAtIAkvKgogICAgLSAJICogSW4gZ2VuZXJhbCwg bm9uZSBvZiB0aGUgZXJyb3IgY2FzZXMgYmVsb3cgc2hvdWxkIGV2ZXIgaGFwcGVuIGlmIHdlIGhh dmUKICAgIC1AQCBzcmMvaW50ZXJmYWNlcy9saWJwcS1vYXV0aC9vYXV0aC1jdXJsLmM6IGZyZWVf YXN5bmNfY3R4KFBHY29ubiAqY29ubiwgc3RydWN0IGFzeW5jX2N0eCAqYWN0eCkKICAgICtAQCBz cmMvaW50ZXJmYWNlcy9saWJwcS1vYXV0aC9vYXV0aC1jdXJsLmM6IGZyZWVfYXN5bmNfY3R4KHN0 cnVjdCBhc3luY19jdHggKmFjdHgpCiAgICAgIAlpZiAoYWN0eC0+dGltZXJmZCA+PSAwKQogICAg ICAJCWNsb3NlKGFjdHgtPnRpbWVyZmQpOwogICAgICAKICAgIEBAIHNyYy9pbnRlcmZhY2VzL2xp YnBxLW9hdXRoL29hdXRoLWN1cmwuYzogZnJlZV9hc3luY19jdHgoUEdjb25uICpjb25uLCBzdHJ1 Y3QgYXN5CiAgICAgKwogICAgICsJLyogcmVxdWVzdC0+Y2xlYW51cCBpcyBvbmx5IHNldCBhZnRl ciBhY3R4IGhhcyBiZWVuIGFsbG9jYXRlZC4gKi8KICAgICArCUFzc2VydChhY3R4KTsKICAgIC0r CiAgICAtKwlmcmVlX2FzeW5jX2N0eCgoUEdvYXV0aEJlYXJlclJlcXVlc3RWMiAqKSByZXF1ZXN0 LCBhY3R4KTsKICAgICsgCiAgICArLQlpZiAoc3RhdGUtPmFzeW5jX2N0eCkKICAgICsrCWZyZWVf YXN5bmNfY3R4KGFjdHgpOwogICAgICsJcmVxdWVzdC0+dXNlciA9IE5VTEw7CiAgICAgKwogICAg ICsJLyogbGlicHEgaGFzIG1hZGUgaXRzIG93biBjb3B5IG9mIHRoZSB0b2tlbjsgY2xlYXIgb3Vy cyBub3cuICovCiAgICAgKwlpZiAocmVxdWVzdC0+dG9rZW4pCiAgICAtKwl7CiAgICArIAl7CiAg ICArLQkJZnJlZV9hc3luY19jdHgoc3RhdGUtPmFzeW5jX2N0eCk7CiAgICArLQkJc3RhdGUtPmFz eW5jX2N0eCA9IE5VTEw7CiAgICAgKwkJZXhwbGljaXRfYnplcm8ocmVxdWVzdC0+dG9rZW4sIHN0 cmxlbihyZXF1ZXN0LT50b2tlbikpOwogICAgICsJCWZyZWUocmVxdWVzdC0+dG9rZW4pOwogICAg ICsJCXJlcXVlc3QtPnRva2VuID0gTlVMTDsKICAgICsgCX0KICAgICArfQogICAgLSt9CiAgICAt KwogICAgKyAKICAgICstCXNldF9jb25uX2FsdHNvY2soY29ubiwgUEdJTlZBTElEX1NPQ0tFVCk7 CiAgICAgKy8qCiAgICAgKyAqIEJ1aWxkcyBhbiBlcnJvciBtZXNzYWdlIGZyb20gYWN0eCBhbmQg c3RvcmVzIGl0IGluIHJlcS0+ZXJyb3IuIFRoZSBhbGxvY2F0aW9uCiAgICAgKyAqIGlzIGJhY2tl ZCBieSBhY3R4LT53b3JrX2RhdGEgKHdoaWNoIHdpbGwgYmUgcmVzZXQgZmlyc3QpLgogICAgQEAg c3JjL2ludGVyZmFjZXMvbGlicHEtb2F1dGgvb2F1dGgtY3VybC5jOiBmcmVlX2FzeW5jX2N0eChQ R2Nvbm4gKmNvbm4sIHN0cnVjdCBhc3kKICAgICArCQlhcHBlbmRQUUV4cEJ1ZmZlclN0cihlcnJi dWYsIGxpYnBxX2dldHRleHQoIm91dCBvZiBtZW1vcnkiKSk7CiAgICAgKwllbHNlCiAgICAgKwkJ YXBwZW5kUFFFeHBCdWZmZXJTdHIoZXJyYnVmLCBhY3R4LT5lcnJidWYuZGF0YSk7CiAgICAtIAog ICAgLS0JaWYgKHN0YXRlLT5hc3luY19jdHgpCiAgICArKwogICAgICsJaWYgKGFjdHgtPmN1cmxf ZXJyWzBdKQogICAgLSAJewogICAgLS0JCWZyZWVfYXN5bmNfY3R4KGNvbm4sIHN0YXRlLT5hc3lu Y19jdHgpOwogICAgLS0JCXN0YXRlLT5hc3luY19jdHggPSBOVUxMOwogICAgKysJewogICAgICsJ CWFwcGVuZFBRRXhwQnVmZmVyKGVycmJ1ZiwgIiAobGliY3VybDogJXMpIiwgYWN0eC0+Y3VybF9l cnIpOwogICAgICsKICAgICArCQkvKiBTb21ldGltZXMgbGliY3VybCBhZGRzIGEgbmV3bGluZSB0 byB0aGUgZXJyb3IgYnVmZmVyLiA6KCAqLwogICAgQEAgc3JjL2ludGVyZmFjZXMvbGlicHEtb2F1 dGgvb2F1dGgtY3VybC5jOiBmcmVlX2FzeW5jX2N0eChQR2Nvbm4gKmNvbm4sIHN0cnVjdCBhc3kK ICAgICArCQkJZXJyYnVmLT5kYXRhW2VycmJ1Zi0+bGVuIC0gMV0gPSAnXDAnOwogICAgICsJCQll cnJidWYtPmxlbi0tOwogICAgICsJCX0KICAgIC0gCX0KICAgIC0gCiAgICAtLQlzZXRfY29ubl9h bHRzb2NrKGNvbm4sIFBHSU5WQUxJRF9TT0NLRVQpOwogICAgKysJfQogICAgKysKICAgICArCXJl cS0+ZXJyb3IgPSBlcnJidWYtPmRhdGE7CiAgICAgIH0KICAgICAgCiAgICBAQCBzcmMvaW50ZXJm YWNlcy9saWJwcS1vYXV0aC9vYXV0aC1jdXJsLmM6IHBnX2ZlX3J1bl9vYXV0aF9mbG93KFBHY29u biAqY29ubikKICAgICArcGdfc3RhcnRfb2F1dGhiZWFyZXIoUEdjb25uICpjb25uLCBQR29hdXRo QmVhcmVyUmVxdWVzdFYyICpyZXF1ZXN0KQogICAgICt7CiAgICAgKwlzdHJ1Y3QgYXN5bmNfY3R4 ICphY3R4OwogICAgKysJUFFjb25uaW5mb09wdGlvbiAqY29ubmluZm8gPSBOVUxMOwogICAgICsK ICAgICArCWlmICghaW5pdGlhbGl6ZV9jdXJsKHJlcXVlc3QpKQogICAgICsJCXJldHVybiAtMTsK ICAgIEBAIHNyYy9pbnRlcmZhY2VzL2xpYnBxLW9hdXRoL29hdXRoLWN1cmwuYzogcGdfZmVfcnVu X29hdXRoX2Zsb3coUEdjb25uICpjb25uKQogICAgICsJaW5pdFBRRXhwQnVmZmVyKCZhY3R4LT5l cnJidWYpOwogICAgICsKICAgICArCS8qIFB1bGwgcmVsZXZhbnQgY29ubmVjdGlvbiBvcHRpb25z LiAqLwogICAgLSsJewogICAgLSsJCVBRY29ubmluZm9PcHRpb24gKmNvbm5pbmZvID0gUFFjb25u aW5mbyhjb25uKTsKICAgIC0rCiAgICArKwljb25uaW5mbyA9IFBRY29ubmluZm8oY29ubik7CiAg ICAgKwlpZiAoIWNvbm5pbmZvKQogICAgICsJCWdvdG8gb29tOwogICAgICsKICAgIEBAIHNyYy9p bnRlcmZhY2VzL2xpYnBxLW9hdXRoL29hdXRoLWN1cmwuYzogcGdfZmVfcnVuX29hdXRoX2Zsb3co UEdjb25uICpjb25uKQogICAgICsJfQogICAgICsKICAgICArCVBRY29ubmluZm9GcmVlKGNvbm5p bmZvKTsKICAgIC0rCX0KICAgICsrCWNvbm5pbmZvID0gTlVMTDsJCQkvKiBrZWVwcyBgZ290byBv b21gIHNhZmUgKi8KICAgICArCiAgICAgKwlhY3R4LT5kaXNjb3ZlcnlfdXJpID0gcmVxdWVzdC0+ djEub3BlbmlkX2NvbmZpZ3VyYXRpb247CiAgICAgKwlhY3R4LT5pc3N1ZXJfaWQgPSByZXF1ZXN0 LT5pc3N1ZXI7CiAgICBAQCBzcmMvaW50ZXJmYWNlcy9saWJwcS1vYXV0aC9vYXV0aC1jdXJsLmM6 IHBnX2ZlX3J1bl9vYXV0aF9mbG93KFBHY29ubiAqY29ubikKICAgICArCXJldHVybiAwOwogICAg ICsKICAgICArb29tOgogICAgKysJaWYgKGNvbm5pbmZvKQogICAgKysJCVBRY29ubmluZm9GcmVl KGNvbm5pbmZvKTsKICAgICsrCiAgICAgKwlyZXF1ZXN0LT5lcnJvciA9IGxpYnBxX2dldHRleHQo Im91dCBvZiBtZW1vcnkiKTsKICAgICArCXJldHVybiAtMTsKICAgICArfQo1OiAgNjBjMmEyODkz OTAgPSA1OiAgNmNmNGExNDgyZWQgbGlicHEtb2F1dGg6IE5ldmVyIGxpbmsgYWdhaW5zdCBsaWJw cSdzIGVuY29kaW5nIGZ1bmN0aW9ucwo2OiAgYjY5NzRkNWM4ZTIgISA2OiAgZjRlNzg3ZmFjY2Qg V0lQOiBJbnRyb2R1Y2UgdGhpcmQtcGFydHkgT0F1dGggZmxvdyBwbHVnaW5zPwogICAgQEAgTWV0 YWRhdGEKICAgICAgIyMgQ29tbWl0IG1lc3NhZ2UgIyMKICAgICAgICAgV0lQOiBJbnRyb2R1Y2Ug dGhpcmQtcGFydHkgT0F1dGggZmxvdyBwbHVnaW5zPwogICAgIAogICAgKyAgICBbTm90IGludGVu ZGVkIGZvciBQRzE5Ll0KICAgICsKICAgICAgICAgVGhpcyBleHBlcmltZW50YWwgY29tbWl0IHBy b21vdGVzIHRoZSBwZ19zdGFydF9vYXV0aGJlYXJlciBBUEkgdG8gYQogICAgICAgICBwdWJsaWMg aGVhZGVyIChsaWJwcS1vYXV0aC5oKSBhbmQgYWRkcyBhIFBHT0FVVEhNT0RVTEUgZW52aXJvbm1l bnQKICAgICAgICAgdmFyaWFibGUgdGhhdCBvdmVycmlkZXMgdGhlIGxvYWQgcGF0aCBmb3IgdGhl IHBsdWdpbiwgYWxsb3dpbmcgdXNlcnMgdG8KICAgIEBAIHNyYy9pbnRlcmZhY2VzL2xpYnBxL2Zl LWF1dGgtb2F1dGguYzogdXNlX2J1aWx0aW5fZmxvdyhQR2Nvbm4gKmNvbm4sIGZlX29hdXRoX3N0 CiAgICAgKwkJCWZwcmludGYoc3RkZXJyLCAiZmFpbGVkIGRsc3ltIGZvciAlczogJXNcbiIsIG1v ZHVsZV9uYW1lLCBkbGVycm9yKCkpOwogICAgICsKICAgICArCQlkbGNsb3NlKHN0YXRlLT5mbG93 X21vZHVsZSk7CiAgICArKwkJc3RhdGUtPmZsb3dfbW9kdWxlID0gTlVMTDsKICAgICArCiAgICAg KwkJaWYgKHN0YXRlLT5idWlsdGluKQogICAgICsJCQlyZXR1cm4gMDsKICAgIEBAIHNyYy9pbnRl cmZhY2VzL2xpYnBxL2ZlLWF1dGgtb2F1dGguYzogdXNlX2J1aWx0aW5fZmxvdyhQR2Nvbm4gKmNv bm4sIGZlX29hdXRoX3N0CiAgICAgLQkJbGlicHFfYXBwZW5kX2Nvbm5fZXJyb3IoY29ubiwgImZh aWxlZCB0byBsb2NrIG11dGV4ICglZCkiLCBsb2NrZXJyKTsKICAgICAtCQlyZXR1cm4gMDsKICAg ICAtCX0KICAgIC0rCQkJbGlicHFfYXBwZW5kX2Nvbm5fZXJyb3IoY29ubiwgImZhaWxlZCB0byBs b2NrIG11dGV4ICglZCkiLCBsb2NrZXJyKTsKICAgIC0rCQkJcmV0dXJuIDA7CiAgICAtKwkJfQog ICAgKysJCQlhcHBlbmRQUUV4cEJ1ZmZlcigmY29ubi0+ZXJyb3JNZXNzYWdlLAogICAgKysJCQkJ CQkJICAidXNlX2J1aWx0aW5fZmxvdzogZmFpbGVkIHRvIGxvY2sgbXV0ZXggKCVkKVxuIiwKICAg ICsrCQkJCQkJCSAgbG9ja2Vycik7CiAgICAgIAogICAgIC0JaWYgKCFpbml0aWFsaXplZCkKICAg ICAtCXsKICAgICAtCQlpbml0KAogICAgKysJCQlyZXF1ZXN0LT5lcnJvciA9ICIiOwkvKiBzYXRp c2Z5IHJlcG9ydF9mbG93X2Vycm9yKCkgKi8KICAgICsrCQkJcmV0dXJuIC0xOwogICAgKysJCX0K ICAgICsrCiAgICAgKwkJaWYgKCFpbml0aWFsaXplZCkKICAgICArCQl7CiAgICAgKwkJCWluaXQo CiAgICBAQCBzcmMvdGVzdC9tb2R1bGVzL29hdXRoX3ZhbGlkYXRvci9vYXV0aF9mbG93LmMgKG5l dykKICAgICArCQkJZmxhZ19jb3VudCsrOwogICAgICsJfQogICAgICsKICAgICsrCS8qIFNsaWNl IE9BVVRIX1RFU1RfRkxBR1MgaW50byBhIGZha2UgYXJndiBhcnJheS4gKi8KICAgICsrCWVudiA9 IHN0cmR1cChlbnYpOwogICAgICsJYXJnYyA9IGZsYWdfY291bnQgKyAxOwogICAgICsJYXJndiA9 IG1hbGxvYyhzaXplb2YoKmFyZ3YpICogKGFyZ2MgKyAxKSk7CiAgICAtKwlpZiAoIWFyZ3YpCiAg ICArKwogICAgKysJaWYgKCFlbnYgfHwgIWFyZ3YpCiAgICAgKwl7CiAgICAgKwkJZnByaW50Zihz dGRlcnIsICJvdXQgb2YgbWVtb3J5Iik7CiAgICAgKwkJZXhpdCgxKTsK --00000000000032285b064bd372e9 Content-Type: application/octet-stream; name="v4-0001-oauth-Report-cleanup-errors-as-warnings-on-stderr.patch" Content-Disposition: attachment; filename="v4-0001-oauth-Report-cleanup-errors-as-warnings-on-stderr.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mm5arh791 RnJvbSA2MmM3OTVlZjQ4OWY0Y2JmMjlkNTQzZTkyZDk5ODc1Yjc1MjkxZTI0IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBKYWNvYiBDaGFtcGlvbiA8amFjb2IuY2hhbXBpb25AZW50ZXJw cmlzZWRiLmNvbT4KRGF0ZTogRnJpLCAzMCBKYW4gMjAyNiAxNjo0MToyNiAtMDgwMApTdWJqZWN0 OiBbUEFUQ0ggdjQgMS82XSBvYXV0aDogUmVwb3J0IGNsZWFudXAgZXJyb3JzIGFzIHdhcm5pbmdz IG9uIHN0ZGVycgoKVXNpbmcgY29ubi0+ZXJyb3JNZXNzYWdlIGZvciB0aGVzZSAic2hvdWxkbid0 LWhhcHBlbiIgY2FzZXMgd2lsbCBvbmx5CndvcmsgaWYgdGhlIGNvbm5lY3Rpb24gaXRzZWxmIGZh aWxzLiBPdXIgU1NMIGFuZCBwYXNzd29yZCBjYWxsYmFja3MKcHJpbnQgV0FSTklOR3Mgd2hlbiB0 aGV5IGZpbmQgdGhlbXNlbHZlcyBpbiBzaW1pbGFyIHNpdHVhdGlvbnMsIHNvCmZvbGxvdyB0aGVp ciBsZWFkLgoKUmV2aWV3ZWQtYnk6IFpzb2x0IFBhcnJhZ2kgPHpzb2x0LnBhcnJhZ2lAcGVyY29u YS5jb20+CkRpc2N1c3Npb246IGh0dHBzOi8vcG9zdGdyLmVzL20vQ0FPWW1pJTJCbUVVX3E5c3Ix UE1tRS00ckx3Rk4lM0RPanluZER3Rlp2cHNNVTNSTkpMck05ZyU0MG1haWwuZ21haWwuY29tCi0t LQogc3JjL2ludGVyZmFjZXMvbGlicHEtb2F1dGgvb2F1dGgtY3VybC5jIHwgMjIgKysrKysrKysr Ky0tLS0tLS0tLS0tLQogMSBmaWxlIGNoYW5nZWQsIDEwIGluc2VydGlvbnMoKyksIDEyIGRlbGV0 aW9ucygtKQoKZGlmZiAtLWdpdCBhL3NyYy9pbnRlcmZhY2VzL2xpYnBxLW9hdXRoL29hdXRoLWN1 cmwuYyBiL3NyYy9pbnRlcmZhY2VzL2xpYnBxLW9hdXRoL29hdXRoLWN1cmwuYwppbmRleCA2OTFl N2VjMWQ5Zi4uMmMxNDdmOThkMGQgMTAwNjQ0Ci0tLSBhL3NyYy9pbnRlcmZhY2VzL2xpYnBxLW9h dXRoL29hdXRoLWN1cmwuYworKysgYi9zcmMvaW50ZXJmYWNlcy9saWJwcS1vYXV0aC9vYXV0aC1j dXJsLmMKQEAgLTI4NiwxNyArMjg2LDE1IEBAIHN0cnVjdCBhc3luY19jdHgKICAqIFRlYXJzIGRv d24gdGhlIEN1cmwgaGFuZGxlcyBhbmQgZnJlZXMgdGhlIGFzeW5jX2N0eC4KICAqLwogc3RhdGlj IHZvaWQKLWZyZWVfYXN5bmNfY3R4KFBHY29ubiAqY29ubiwgc3RydWN0IGFzeW5jX2N0eCAqYWN0 eCkKK2ZyZWVfYXN5bmNfY3R4KHN0cnVjdCBhc3luY19jdHggKmFjdHgpCiB7CiAJLyoKIAkgKiBJ biBnZW5lcmFsLCBub25lIG9mIHRoZSBlcnJvciBjYXNlcyBiZWxvdyBzaG91bGQgZXZlciBoYXBw ZW4gaWYgd2UgaGF2ZQogCSAqIG5vIGJ1Z3MgYWJvdmUuIEJ1dCBpZiB3ZSBkbyBoaXQgdGhlbSwg c3VyZmFjaW5nIHRob3NlIGVycm9ycyBzb21laG93CiAJICogbWlnaHQgYmUgdGhlIG9ubHkgd2F5 IHRvIGhhdmUgYSBjaGFuY2UgdG8gZGVidWcgdGhlbS4KIAkgKgotCSAqIFRPRE86IEF0IHNvbWUg cG9pbnQgaXQnZCBiZSBuaWNlIHRvIGhhdmUgYSBzdGFuZGFyZCB3YXkgdG8gd2FybiBhYm91dAot CSAqIHRlYXJkb3duIGZhaWx1cmVzLiBBcHBlbmRpbmcgdG8gdGhlIGNvbm5lY3Rpb24ncyBlcnJv ciBtZXNzYWdlIG9ubHkKLQkgKiBoZWxwcyBpZiB0aGUgYnVnIGNhdXNlZCBhIGNvbm5lY3Rpb24g ZmFpbHVyZTsgb3RoZXJ3aXNlIGl0J2xsIGJlCi0JICogYnVyaWVkLi4uCisJICogUHJpbnQgdGhl bSBhcyB3YXJuaW5ncyB0byBzdGRlcnIsIGZvbGxvd2luZyB0aGUgZXhhbXBsZSBvZiBzaW1pbGFy CisJICogc2l0dWF0aW9ucyBpbiBmZS1zZWN1cmUtb3BlbnNzbC5jIGFuZCBmZS1jb25uZWN0LmMu CiAJICovCiAKIAlpZiAoYWN0eC0+Y3VybG0gJiYgYWN0eC0+Y3VybCkKQEAgLTMwNCw5ICszMDIs OSBAQCBmcmVlX2FzeW5jX2N0eChQR2Nvbm4gKmNvbm4sIHN0cnVjdCBhc3luY19jdHggKmFjdHgp CiAJCUNVUkxNY29kZQllcnIgPSBjdXJsX211bHRpX3JlbW92ZV9oYW5kbGUoYWN0eC0+Y3VybG0s IGFjdHgtPmN1cmwpOwogCiAJCWlmIChlcnIpCi0JCQlsaWJwcV9hcHBlbmRfY29ubl9lcnJvcihj b25uLAotCQkJCQkJCQkJImxpYmN1cmwgZWFzeSBoYW5kbGUgcmVtb3ZhbCBmYWlsZWQ6ICVzIiwK LQkJCQkJCQkJCWN1cmxfbXVsdGlfc3RyZXJyb3IoZXJyKSk7CisJCQlmcHJpbnRmKHN0ZGVyciwK KwkJCQkJbGlicHFfZ2V0dGV4dCgiV0FSTklORzogbGliY3VybCBlYXN5IGhhbmRsZSByZW1vdmFs IGZhaWxlZDogJXNcbiIpLAorCQkJCQljdXJsX211bHRpX3N0cmVycm9yKGVycikpOwogCX0KIAog CWlmIChhY3R4LT5jdXJsKQpAQCAtMzI0LDkgKzMyMiw5IEBAIGZyZWVfYXN5bmNfY3R4KFBHY29u biAqY29ubiwgc3RydWN0IGFzeW5jX2N0eCAqYWN0eCkKIAkJQ1VSTE1jb2RlCWVyciA9IGN1cmxf bXVsdGlfY2xlYW51cChhY3R4LT5jdXJsbSk7CiAKIAkJaWYgKGVycikKLQkJCWxpYnBxX2FwcGVu ZF9jb25uX2Vycm9yKGNvbm4sCi0JCQkJCQkJCQkibGliY3VybCBtdWx0aSBoYW5kbGUgY2xlYW51 cCBmYWlsZWQ6ICVzIiwKLQkJCQkJCQkJCWN1cmxfbXVsdGlfc3RyZXJyb3IoZXJyKSk7CisJCQlm cHJpbnRmKHN0ZGVyciwKKwkJCQkJbGlicHFfZ2V0dGV4dCgiV0FSTklORzogbGliY3VybCBtdWx0 aSBoYW5kbGUgY2xlYW51cCBmYWlsZWQ6ICVzXG4iKSwKKwkJCQkJY3VybF9tdWx0aV9zdHJlcnJv cihlcnIpKTsKIAl9CiAKIAlmcmVlX3Byb3ZpZGVyKCZhY3R4LT5wcm92aWRlcik7CkBAIC0zNTks NyArMzU3LDcgQEAgcGdfZmVfY2xlYW51cF9vYXV0aF9mbG93KFBHY29ubiAqY29ubikKIAogCWlm IChzdGF0ZS0+YXN5bmNfY3R4KQogCXsKLQkJZnJlZV9hc3luY19jdHgoY29ubiwgc3RhdGUtPmFz eW5jX2N0eCk7CisJCWZyZWVfYXN5bmNfY3R4KHN0YXRlLT5hc3luY19jdHgpOwogCQlzdGF0ZS0+ YXN5bmNfY3R4ID0gTlVMTDsKIAl9CiAKLS0gCjIuMzQuMQoK --00000000000032285b064bd372e9 Content-Type: application/octet-stream; name="v4-0002-libpq-Add-PQgetThreadLock-to-mirror-PQregisterThr.patch" Content-Disposition: attachment; filename="v4-0002-libpq-Add-PQgetThreadLock-to-mirror-PQregisterThr.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mm5arkip2 RnJvbSBiMzFhMzQwNmFmMmRjNGUxYmM1NmZmZmYwMTAzOGIwNmE5YWZjNTVkIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBKYWNvYiBDaGFtcGlvbiA8amFjb2IuY2hhbXBpb25AZW50ZXJw cmlzZWRiLmNvbT4KRGF0ZTogVGh1LCAxOSBGZWIgMjAyNiAxMjozOToxNiAtMDgwMApTdWJqZWN0 OiBbUEFUQ0ggdjQgMi82XSBsaWJwcTogQWRkIFBRZ2V0VGhyZWFkTG9jaygpIHRvIG1pcnJvcgog UFFyZWdpc3RlclRocmVhZExvY2soKQoKQWxsb3cgbGlicHEgY2xpZW50cyB0byByZXRyaWV2ZSB0 aGUgY3VycmVudCBwZ19nX3RocmVhZGxvY2sgcG9pbnRlciB3aXRoClBRZ2V0VGhyZWFkTG9jaygp LiBTaW5nbGUtdGhyZWFkZWQgYXBwbGljYXRpb25zIGNvdWxkIGFscmVhZHkgZG8gdGhpcyBpbgph IGNvbnZvbHV0ZWQgd2F5OgoKICAgIHBndGhyZWFkbG9ja190IHRsb2NrOwoKICAgIHRsb2NrID0g UFFyZWdpc3RlclRocmVhZExvY2soTlVMTCk7CiAgICBQUXJlZ2lzdGVyVGhyZWFkTG9jayh0bG9j ayk7ICAgIC8qIHJlLXJlZ2lzdGVyIHRoZSBjYWxsYmFjayAqLwoKICAgIC8qIHVzZSB0bG9jayAq LwoKQnV0IGEgZ2VuZXJpYyBsaWJyYXJ5IGNhbid0IGRvIHRoYXQgd2l0aG91dCBwb3RlbnRpYWxs eSBicmVha2luZwpjb25jdXJyZW50IGxpYnBxIGNvbm5lY3Rpb25zLgoKVGhlIG1vdGl2YXRpb24g Zm9yIGRvaW5nIHRoaXMgbm93IGlzIHRoZSBsaWJwcS1vYXV0aCBwbHVnaW4sIHdoaWNoCmN1cnJl bnRseSByZWxpZXMgb24gZGlyZWN0IGluamVjdGlvbiBvZiBwZ19nX3RocmVhZGxvY2ssIGFuZCBz aG91bGQKaWRlYWxseSBub3QuCgpSZXZpZXdlZC1ieTogWnNvbHQgUGFycmFnaSA8enNvbHQucGFy cmFnaUBwZXJjb25hLmNvbT4KRGlzY3Vzc2lvbjogaHR0cHM6Ly9wb3N0Z3IuZXMvbS9DQU9ZbWkl MkJtRVVfcTlzcjFQTW1FLTRyTHdGTiUzRE9qeW5kRHdGWnZwc01VM1JOSkxyTTlnJTQwbWFpbC5n bWFpbC5jb20KLS0tCiBzcmMvaW50ZXJmYWNlcy9saWJwcS9leHBvcnRzLnR4dCAgfCAgMSArCiBz cmMvaW50ZXJmYWNlcy9saWJwcS9saWJwcS1mZS5oICAgfCAxMCArKysrKysrKy0tCiBzcmMvaW50 ZXJmYWNlcy9saWJwcS9mZS1jb25uZWN0LmMgfCAgNyArKysrKysrCiAzIGZpbGVzIGNoYW5nZWQs IDE2IGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2ludGVy ZmFjZXMvbGlicHEvZXhwb3J0cy50eHQgYi9zcmMvaW50ZXJmYWNlcy9saWJwcS9leHBvcnRzLnR4 dAppbmRleCBkYmJhZTY0MmQ3Ni4uMWUzZDViZDU4NjcgMTAwNjQ0Ci0tLSBhL3NyYy9pbnRlcmZh Y2VzL2xpYnBxL2V4cG9ydHMudHh0CisrKyBiL3NyYy9pbnRlcmZhY2VzL2xpYnBxL2V4cG9ydHMu dHh0CkBAIC0yMTAsMyArMjEwLDQgQEAgUFFnZXRBdXRoRGF0YUhvb2sgICAgICAgICAyMDcKIFBR ZGVmYXVsdEF1dGhEYXRhSG9vayAgICAgMjA4CiBQUWZ1bGxQcm90b2NvbFZlcnNpb24gICAgIDIw OQogYXBwZW5kUFFFeHBCdWZmZXJWQSAgICAgICAyMTAKK1BRZ2V0VGhyZWFkTG9jayAgICAgICAg ICAgMjExCmRpZmYgLS1naXQgYS9zcmMvaW50ZXJmYWNlcy9saWJwcS9saWJwcS1mZS5oIGIvc3Jj L2ludGVyZmFjZXMvbGlicHEvbGlicHEtZmUuaAppbmRleCA5MDVmMmYzM2FiOC4uMWI0NjAzMmI2 ZjkgMTAwNjQ0Ci0tLSBhL3NyYy9pbnRlcmZhY2VzL2xpYnBxL2xpYnBxLWZlLmgKKysrIGIvc3Jj L2ludGVyZmFjZXMvbGlicHEvbGlicHEtZmUuaApAQCAtNjMsNiArNjMsMTAgQEAgZXh0ZXJuICJD IgogLyogSW5kaWNhdGVzIHByZXNlbmNlIG9mIHRoZSBQUUFVVEhEQVRBX1BST01QVF9PQVVUSF9E RVZJQ0UgYXV0aGRhdGEgaG9vayAqLwogI2RlZmluZSBMSUJQUV9IQVNfUFJPTVBUX09BVVRIX0RF VklDRSAxCiAKKy8qIEZlYXR1cmVzIGFkZGVkIGluIFBvc3RncmVTUUwgdjE5OiAqLworLyogSW5k aWNhdGVzIHByZXNlbmNlIG9mIFBRZ2V0VGhyZWFkTG9jayAqLworI2RlZmluZSBMSUJQUV9IQVNf R0VUX1RIUkVBRF9MT0NLIDEKKwogLyoKICAqIE9wdGlvbiBmbGFncyBmb3IgUFFjb3B5UmVzdWx0 CiAgKi8KQEAgLTQ2MiwxMiArNDY2LDE0IEBAIGV4dGVybiBQUW5vdGljZVByb2Nlc3NvciBQUXNl dE5vdGljZVByb2Nlc3NvcihQR2Nvbm4gKmNvbm4sCiAgKgkgICBVc2VkIHRvIHNldCBjYWxsYmFj ayB0aGF0IHByZXZlbnRzIGNvbmN1cnJlbnQgYWNjZXNzIHRvCiAgKgkgICBub24tdGhyZWFkIHNh ZmUgZnVuY3Rpb25zIHRoYXQgbGlicHEgbmVlZHMuCiAgKgkgICBUaGUgZGVmYXVsdCBpbXBsZW1l bnRhdGlvbiB1c2VzIGEgbGlicHEgaW50ZXJuYWwgbXV0ZXguCi0gKgkgICBPbmx5IHJlcXVpcmVk IGZvciBtdWx0aXRocmVhZGVkIGFwcHMgdGhhdCB1c2Uga2VyYmVyb3MKLSAqCSAgIGJvdGggd2l0 aGluIHRoZWlyIGFwcCBhbmQgZm9yIHBvc3RncmVzcWwgY29ubmVjdGlvbnMuCisgKgkgICBPbmx5 IHJlcXVpcmVkIGZvciBtdWx0aXRocmVhZGVkIGFwcHMgdGhhdCB1c2UgS2VyYmVyb3Mgb3IKKyAq CSAgIG9sZGVyIChub24tdGhyZWFkc2FmZSkgdmVyc2lvbnMgb2YgQ3VybCBib3RoIHdpdGhpbiB0 aGVpcgorICoJICAgYXBwIGFuZCBmb3IgcG9zdGdyZXNxbCBjb25uZWN0aW9ucy4KICAqLwogdHlw ZWRlZiB2b2lkICgqcGd0aHJlYWRsb2NrX3QpIChpbnQgYWNxdWlyZSk7CiAKIGV4dGVybiBwZ3Ro cmVhZGxvY2tfdCBQUXJlZ2lzdGVyVGhyZWFkTG9jayhwZ3RocmVhZGxvY2tfdCBuZXdoYW5kbGVy KTsKK2V4dGVybiBwZ3RocmVhZGxvY2tfdCBQUWdldFRocmVhZExvY2sodm9pZCk7CiAKIC8qID09 PSBpbiBmZS10cmFjZS5jID09PSAqLwogZXh0ZXJuIHZvaWQgUFF0cmFjZShQR2Nvbm4gKmNvbm4s IEZJTEUgKmRlYnVnX3BvcnQpOwpkaWZmIC0tZ2l0IGEvc3JjL2ludGVyZmFjZXMvbGlicHEvZmUt Y29ubmVjdC5jIGIvc3JjL2ludGVyZmFjZXMvbGlicHEvZmUtY29ubmVjdC5jCmluZGV4IGI0MmEw Y2I0Yzc4Li5kYjliNGM4ZWRiZiAxMDA2NDQKLS0tIGEvc3JjL2ludGVyZmFjZXMvbGlicHEvZmUt Y29ubmVjdC5jCisrKyBiL3NyYy9pbnRlcmZhY2VzL2xpYnBxL2ZlLWNvbm5lY3QuYwpAQCAtODQx NCwzICs4NDE0LDEwIEBAIFBRcmVnaXN0ZXJUaHJlYWRMb2NrKHBndGhyZWFkbG9ja190IG5ld2hh bmRsZXIpCiAKIAlyZXR1cm4gcHJldjsKIH0KKworcGd0aHJlYWRsb2NrX3QKK1BRZ2V0VGhyZWFk TG9jayh2b2lkKQoreworCUFzc2VydChwZ19nX3RocmVhZGxvY2spOworCXJldHVybiBwZ19nX3Ro cmVhZGxvY2s7Cit9Ci0tIAoyLjM0LjEKCg== --00000000000032285b064bd372e9 Content-Type: application/octet-stream; name="v4-0003-libpq-Introduce-PQAUTHDATA_OAUTH_BEARER_TOKEN_V2.patch" Content-Disposition: attachment; filename="v4-0003-libpq-Introduce-PQAUTHDATA_OAUTH_BEARER_TOKEN_V2.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mm5arngc3 RnJvbSA2MWVlYjE2YzQ5ZGQ0NzgyY2U2ZjllNWJkMGNjYjY2YjczZjk1MDcwIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBKYWNvYiBDaGFtcGlvbiA8amFjb2IuY2hhbXBpb25AZW50ZXJw cmlzZWRiLmNvbT4KRGF0ZTogTW9uLCAxIERlYyAyMDI1IDE1OjA3OjI2IC0wODAwClN1YmplY3Q6 IFtQQVRDSCB2NCAzLzZdIGxpYnBxOiBJbnRyb2R1Y2UgUFFBVVRIREFUQV9PQVVUSF9CRUFSRVJf VE9LRU5fVjIKCkZvciB0aGUgbGlicHEtb2F1dGggbW9kdWxlIHRvIGV2ZW50dWFsbHkgbWFrZSB1 c2Ugb2YgdGhlClBHb2F1dGhCZWFyZXJSZXF1ZXN0IEFQSSwgaXQgbmVlZHMgc29tZSBhZGRpdGlv bmFsIGZ1bmN0aW9uYWxpdHk6IHRoZQpkZXJpdmVkIElzc3VlciBJRCBmb3IgdGhlIGF1dGhvcml6 YXRpb24gc2VydmVyIG5lZWRzIHRvIGJlIHByb3ZpZGVkIGJ5CmxpYnBxLCBhbmQgZXJyb3IgbWVz c2FnZXMgbmVlZCB0byBiZSBidWlsdCB3aXRob3V0IHJlbHlpbmcgb24gUEdjb25uCmludGVybmFs cy4gVGhlc2UgZmVhdHVyZXMgc2VlbSB1c2VmdWwgZm9yIGFwcGxpY2F0aW9uIGhvb2tzLCB0b28s IHNvCnRoYXQgdGhleSBkb24ndCBlYWNoIGhhdmUgdG8gcmVpbnZlbnQgdGhlIHdoZWVsLgoKVGhl IG9yaWdpbmFsIHBsYW4gd2FzIGZvciBhZGRpdGlvbnMgdG8gUEdvYXV0aEJlYXJlclJlcXVlc3Qg dG8gYmUgbWFkZQp3aXRob3V0IGEgdmVyc2lvbiBidW1wIHRvIHRoZSBQR2F1dGhEYXRhIHR5cGUs IGFuZCB0aGVuIGFwcGxpY2F0aW9ucwp3b3VsZCBzaW1wbHkgY2hlY2sgYSBMSUJQUV9IQVNfKiBt YWNybyBhdCBjb21waWxlIHRpbWUgdG8gZGVjaWRlIHdoZXRoZXIKdGhleSBjb3VsZCB1c2UgdGhl IG5ldyBmZWF0dXJlcy4gVGhhdCB0aGVvcmV0aWNhbGx5IHdvcmtzIGZvcgphcHBsaWNhdGlvbnMg bGlua2VkIGFnYWluc3QgbGlicHEsIHNpbmNlIGl0J3Mgbm90IHNhZmUgdG8gZG93bmdyYWRlCmxp YnBxIGZyb20gdGhlIHZlcnNpb24geW91J3ZlIGNvbXBpbGVkIGFnYWluc3QuCgpUaGF0IHN0cmF0 ZWd5IHdvbid0IHdvcmsgZm9yIHBsdWdpbnMsIHRob3VnaCwgZHVlIHRvIGEgY29tcGxpY2F0aW9u CmZpcnN0IG5vdGljZWQgZHVyaW5nIHRoZSBsaWJwcS1vYXV0aCBtb2R1bGUgc3BsaXQ6IGl0J3Mg bm9ybWFsIGZvciBhCnBsdWdpbiBvbiBkaXNrIHRvIGJlICpuZXdlciogdGhhbiB0aGUgbGlicHEg dGhhdCdzIGxvYWRpbmcgaXQsIGJlY2F1c2UKeW91IG1pZ2h0IGhhdmUgdXBncmFkZWQgeW91ciBp bnN0YWxsYXRpb24gd2hpbGUgYW4gYXBwbGljYXRpb24gd2FzCnJ1bm5pbmcuIChJbiBvdGhlciB3 b3JkcywgYSBwbHVnaW4gYXJjaGl0ZWN0dXJlIGNhdXNlcyB0aGUgY29tcGlsZS10aW1lCmFuZCBy dW4tdGltZSBkZXBlbmRlbmN5IGFycm93cyB0byBwb2ludCBpbiBvcHBvc2l0ZSBkaXJlY3Rpb25z LCBzbwpwbHVnaW5zIHdvbid0IGJlIGFibGUgdG8gcmVseSBvbiB0aGUgTElCUFFfSEFTXyogbWFj cm9zIHRvIGRldGVybWluZQp3aGF0IEFQSXMgYXJlIGF2YWlsYWJsZSB0byB0aGVtLikKCkluc3Rl YWQsIGFkZCBhIG5ldyBzdHJ1Y3Qgd2hpY2ggZXh0ZW5kcyB0aGUgInYxIiBQR29hdXRoQmVhcmVy UmVxdWVzdC4KV2hlbiBhbiBhcHBsaWNhdGlvbiBob29rIHJlY2VpdmVzIFBRQVVUSERBVEFfT0FV VEhfQkVBUkVSX1RPS0VOX1YyLCBpdAptYXkgc2FmZWx5IGRvd25jYXN0IHRoZSByZXF1ZXN0IHBv aW50ZXIgaXQgcmVjZWl2ZXMgaW4gaXRzIGNhbGxiYWNrcyB0bwptYWtlIHVzZSBvZiB0aGUgbmV3 IGZ1bmN0aW9uYWxpdHkuIGxpYnBxIHdpbGwgZmlyc3QgdHJ5IHRoZSBuZXcgdmVyc2lvbiwKdGhl biBmYWxsIGJhY2sgdG8gdGhlIG9sZCBiZWZvcmUgZ2l2aW5nIHVwLgoKUmV2aWV3ZWQtYnk6IENo YW8gTGkgPGxpLmV2YW4uY2hhb0BnbWFpbC5jb20+ClJldmlld2VkLWJ5OiBac29sdCBQYXJyYWdp IDx6c29sdC5wYXJyYWdpQHBlcmNvbmEuY29tPgpEaXNjdXNzaW9uOiBodHRwczovL3Bvc3Rnci5l cy9tL0NBT1ltaSUyQm1yR2clMkJuX1gyTU9MZ2VXY2ozdl9NMDBnUjh1el9EN21NOHolM0RkWDFK WVZiZyU0MG1haWwuZ21haWwuY29tCi0tLQogZG9jL3NyYy9zZ21sL2xpYnBxLnNnbWwgICAgICAg ICAgICAgICAgICAgICAgIHwgODMgKysrKysrKysrKysrKysrKwogc3JjL3Rvb2xzL3BnaW5kZW50 L3R5cGVkZWZzLmxpc3QgICAgICAgICAgICAgIHwgIDEgKwogc3JjL2ludGVyZmFjZXMvbGlicHEv bGlicHEtZmUuaCAgICAgICAgICAgICAgIHwgMzEgKysrKystCiBzcmMvaW50ZXJmYWNlcy9saWJw cS9mZS1hdXRoLW9hdXRoLmMgICAgICAgICAgfCA4NyArKysrKysrKysrKy0tLS0tLQogLi4uL29h dXRoX3ZhbGlkYXRvci9vYXV0aF9ob29rX2NsaWVudC5jICAgICAgIHwgOTcgKysrKysrKysrKysr KysrKysrLQogLi4uL21vZHVsZXMvb2F1dGhfdmFsaWRhdG9yL3QvMDAyX2NsaWVudC5wbCAgIHwg MzggKysrKysrKy0KIDYgZmlsZXMgY2hhbmdlZCwgMzAxIGluc2VydGlvbnMoKyksIDM2IGRlbGV0 aW9ucygtKQoKZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9saWJwcS5zZ21sIGIvZG9jL3NyYy9z Z21sL2xpYnBxLnNnbWwKaW5kZXggZTA4ZDQ2NzgyY2MuLmExMmIxZWZlMWIzIDEwMDY0NAotLS0g YS9kb2Mvc3JjL3NnbWwvbGlicHEuc2dtbAorKysgYi9kb2Mvc3JjL3NnbWwvbGlicHEuc2dtbApA QCAtMTAzNjIsNiArMTAzNjIsNyBAQCBQUWF1dGhEYXRhSG9va190eXBlIFBRZ2V0QXV0aERhdGFI b29rKHZvaWQpOwogICAgICAgICA8aW5kZXh0ZXJtPjxwcmltYXJ5PlBRQVVUSERBVEFfUFJPTVBU X09BVVRIX0RFVklDRTwvcHJpbWFyeT48L2luZGV4dGVybT4KICAgICAgICA8L3Rlcm0+CiAgICAg ICAgPGxpc3RpdGVtPgorICAgICAgICA8cGFyYT48ZW1waGFzaXM+QXZhaWxhYmxlIGluIFBvc3Rn cmVTUUwgMTggYW5kIGxhdGVyLjwvZW1waGFzaXM+PC9wYXJhPgogICAgICAgICA8cGFyYT4KICAg ICAgICAgIFJlcGxhY2VzIHRoZSBkZWZhdWx0IHVzZXIgcHJvbXB0IGR1cmluZyB0aGUgYnVpbHRp biBkZXZpY2UKICAgICAgICAgIGF1dGhvcml6YXRpb24gY2xpZW50IGZsb3cuIDxyZXBsYWNlYWJs ZT5kYXRhPC9yZXBsYWNlYWJsZT4gcG9pbnRzIHRvCkBAIC0xMDQxNCw2ICsxMDQxNSw3IEBAIHR5 cGVkZWYgc3RydWN0IF9QR3Byb21wdE9BdXRoRGV2aWNlCiAgICAgICAgIDxpbmRleHRlcm0+PHBy aW1hcnk+UFFBVVRIREFUQV9PQVVUSF9CRUFSRVJfVE9LRU48L3ByaW1hcnk+PC9pbmRleHRlcm0+ CiAgICAgICAgPC90ZXJtPgogICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgPHBhcmE+PGVtcGhh c2lzPkF2YWlsYWJsZSBpbiBQb3N0Z3JlU1FMIDE4IGFuZCBsYXRlci48L2VtcGhhc2lzPjwvcGFy YT4KICAgICAgICAgPHBhcmE+CiAgICAgICAgICBBZGRzIGEgY3VzdG9tIGltcGxlbWVudGF0aW9u IG9mIGEgZmxvdywgcmVwbGFjaW5nIHRoZSBidWlsdGluIGZsb3cgaWYKICAgICAgICAgIGl0IGlz IDxsaW5rIGxpbmtlbmQ9ImNvbmZpZ3VyZS1vcHRpb24td2l0aC1saWJjdXJsIj5pbnN0YWxsZWQ8 L2xpbms+LgpAQCAtMTA0MjEsNiArMTA0MjMsMTMgQEAgdHlwZWRlZiBzdHJ1Y3QgX1BHcHJvbXB0 T0F1dGhEZXZpY2UKICAgICAgICAgIHVzZXIvaXNzdWVyL3Njb3BlIGNvbWJpbmF0aW9uLCBpZiBv bmUgaXMgYXZhaWxhYmxlIHdpdGhvdXQgYmxvY2tpbmcsIG9yCiAgICAgICAgICBlbHNlIHNldCB1 cCBhbiBhc3luY2hyb25vdXMgY2FsbGJhY2sgdG8gcmV0cmlldmUgb25lLgogICAgICAgICA8L3Bh cmE+CisgICAgICAgIDxub3RlPgorICAgICAgICAgPHBhcmE+CisgICAgICAgICAgRm9yIDxwcm9k dWN0bmFtZT5Qb3N0Z3JlU1FMPC9wcm9kdWN0bmFtZT4gcmVsZWFzZXMgMTkgYW5kIGxhdGVyLAor ICAgICAgICAgIGFwcGxpY2F0aW9ucyBzaG91bGQgcHJlZmVyCisgICAgICAgICAgPGxpbmsgbGlu a2VuZD0ibGlicHEtb2F1dGgtYXV0aGRhdGEtb2F1dGgtYmVhcmVyLXRva2VuLXYyIj48bGl0ZXJh bD5QUUFVVEhEQVRBX09BVVRIX0JFQVJFUl9UT0tFTl9WMjwvbGl0ZXJhbD48L2xpbms+LgorICAg ICAgICAgPC9wYXJhPgorICAgICAgICA8L25vdGU+CiAgICAgICAgIDxwYXJhPgogICAgICAgICAg PHJlcGxhY2VhYmxlPmRhdGE8L3JlcGxhY2VhYmxlPiBwb2ludHMgdG8gYW4gaW5zdGFuY2UKICAg ICAgICAgIG9mIDxzeW1ib2w+UEdvYXV0aEJlYXJlclJlcXVlc3Q8L3N5bWJvbD4sIHdoaWNoIHNo b3VsZCBiZSBmaWxsZWQgaW4KQEAgLTEwNTE2LDYgKzEwNTI1LDgwIEBAIHR5cGVkZWYgc3RydWN0 IFBHb2F1dGhCZWFyZXJSZXF1ZXN0CiAgICAgICAgIDwvcGFyYT4KICAgICAgICA8L2xpc3RpdGVt PgogICAgICAgPC92YXJsaXN0ZW50cnk+CisKKyAgICAgIDx2YXJsaXN0ZW50cnkgaWQ9ImxpYnBx LW9hdXRoLWF1dGhkYXRhLW9hdXRoLWJlYXJlci10b2tlbi12MiI+CisgICAgICAgPHRlcm0+Cisg ICAgICAgIDxzeW1ib2w+UFFBVVRIREFUQV9PQVVUSF9CRUFSRVJfVE9LRU5fVjI8L3N5bWJvbD4K KyAgICAgICAgPGluZGV4dGVybT4KKyAgICAgICAgIDxwcmltYXJ5PlBRQVVUSERBVEFfT0FVVEhf QkVBUkVSX1RPS0VOX1YyPC9wcmltYXJ5PgorICAgICAgICAgPHNlY29uZGFyeT5QUUFVVEhEQVRB X09BVVRIX0JFQVJFUl9UT0tFTjwvc2Vjb25kYXJ5PgorICAgICAgICA8L2luZGV4dGVybT4KKyAg ICAgICA8L3Rlcm0+CisgICAgICAgPGxpc3RpdGVtPgorICAgICAgICA8cGFyYT48ZW1waGFzaXM+ QXZhaWxhYmxlIGluIFBvc3RncmVTUUwgMTkgYW5kIGxhdGVyLjwvZW1waGFzaXM+PC9wYXJhPgor ICAgICAgICA8cGFyYT4KKyAgICAgICAgIFByb3ZpZGVzIGFsbCB0aGUgZnVuY3Rpb25hbGl0eSBv ZgorICAgICAgICAgPGxpbmsgbGlua2VuZD0ibGlicHEtb2F1dGgtYXV0aGRhdGEtb2F1dGgtYmVh cmVyLXRva2VuIj48bGl0ZXJhbD5QUUFVVEhEQVRBX09BVVRIX0JFQVJFUl9UT0tFTjwvbGl0ZXJh bD48L2xpbms+LAorICAgICAgICAgYW5kIGFkZHMgdGhlIGFiaWxpdHkgdG8gc2V0IGN1c3RvbSBl cnJvciBtZXNzYWdlcyBhbmQgaW5zcGVjdCB0aGUKKyAgICAgICAgIE9BdXRoIGlzc3VlciBJRCB0 aGF0IHRoZSBjbGllbnQgZXhwZWN0cyB0byB1c2UuCisgICAgICAgIDwvcGFyYT4KKyAgICAgICAg PHBhcmE+CisgICAgICAgICA8cmVwbGFjZWFibGU+ZGF0YTwvcmVwbGFjZWFibGU+IHBvaW50cyB0 byBhbiBpbnN0YW5jZQorICAgICAgICAgb2YgPHN5bWJvbD5QR29hdXRoQmVhcmVyUmVxdWVzdFYy PC9zeW1ib2w+LCB3aGljaCBzaG91bGQgYmUgZmlsbGVkIGluCisgICAgICAgICBieSB0aGUgaW1w bGVtZW50YXRpb246Cis8c3lub3BzaXM+Cit0eXBlZGVmIHN0cnVjdAoreworICAgIFBHb2F1dGhC ZWFyZXJSZXF1ZXN0IHYxOyAgICAvKiBzZWUgdGhlIFBHb2F1dGhCZWFyZXJSZXF1ZXN0IHN0cnVj dCwgYWJvdmUgKi8KKworICAgIC8qIEhvb2sgaW5wdXRzIChjb25zdGFudCBhY3Jvc3MgYWxsIGNh bGxzKSAqLworICAgIGNvbnN0IGNoYXIgKmlzc3VlcjsgICAgICAgICAgICAvKiB0aGUgaXNzdWVy IGlkZW50aWZpZXIgKFJGQyA5MjA3KSBpbiB1c2UgKi8KKworICAgIC8qIEhvb2sgb3V0cHV0cyAq LworICAgIGNvbnN0IGNoYXIgKmVycm9yOyAgICAgICAgICAgICAvKiBob29rLWRlZmluZWQgZXJy b3IgbWVzc2FnZSAqLworfSBQR29hdXRoQmVhcmVyUmVxdWVzdFYyOworPC9zeW5vcHNpcz4KKyAg ICAgICAgPC9wYXJhPgorICAgICAgICA8cGFyYT4KKyAgICAgICAgIFdoZW4gYSA8bGl0ZXJhbD5Q UUFVVEhEQVRBX09BVVRIX0JFQVJFUl9UT0tFTl9WMjwvbGl0ZXJhbD4gaG9vayBpcyBpbgorICAg ICAgICAgdXNlLCA8YXBwbGljYXRpb24+bGlicHE8L2FwcGxpY2F0aW9uPiBhZGRpdGlvbmFsbHkg Z3VhcmFudGVlcyB0aGF0IHRoZQorICAgICAgICAgPGxpdGVyYWw+cmVxdWVzdDwvbGl0ZXJhbD4g cG9pbnRlciB0aGF0IGlzIHByb3ZpZGVkIHRvIHRoZQorICAgICAgICAgPHJlcGxhY2VhYmxlPnYx LmFzeW5jPC9yZXBsYWNlYWJsZT4gYW5kIDxyZXBsYWNlYWJsZT52MS5jbGVhbnVwPC9yZXBsYWNl YWJsZT4KKyAgICAgICAgIGNhbGxiYWNrcyBtYXkgYmUgc2FmZWx5IGNhc3QgdG8gPGxpdGVyYWw+ KFBHb2F1dGhCZWFyZXJSZXF1ZXN0VjImbmJzcDsqKTwvbGl0ZXJhbD4uCisgICAgICAgICBJbXBs ZW1lbnRhdGlvbnMgbXVzdCBvdGhlcndpc2UgZm9sbG93IHRoZSB2MSBBUEksIGFzIGRlc2NyaWJl ZCBhYm92ZSwKKyAgICAgICAgIHVzaW5nIHRoZSA8cmVwbGFjZWFibGU+djE8L3JlcGxhY2VhYmxl PiBzdHJ1Y3QgbWVtYmVyLgorICAgICAgICA8L3BhcmE+CisgICAgICAgIDx3YXJuaW5nPgorICAg ICAgICAgPHBhcmE+CisgICAgICAgICAgQ2FzdGluZyB0byA8bGl0ZXJhbD4oUEdvYXV0aEJlYXJl clJlcXVlc3RWMiZuYnNwOyopPC9saXRlcmFsPiBpcworICAgICAgICAgIDxlbXBoYXNpcz5vbmx5 PC9lbXBoYXNpcz4gc2FmZSB3aGVuIHRoZSBob29rIHR5cGUgaXMKKyAgICAgICAgICA8bGl0ZXJh bD5QUUFVVEhEQVRBX09BVVRIX0JFQVJFUl9UT0tFTl9WMjwvbGl0ZXJhbD4uIEFwcGxpY2F0aW9u cyBtYXkKKyAgICAgICAgICBjcmFzaCBvciBtaXNiZWhhdmUgaWYgYSBob29rIGF0dGVtcHRzIHRv IHVzZSB2MiBmZWF0dXJlcyB3aXRoIHRoZSB2MQorICAgICAgICAgIGhvb2sgdHlwZS4KKyAgICAg ICAgIDwvcGFyYT4KKyAgICAgICAgPC93YXJuaW5nPgorICAgICAgICA8cGFyYT4KKyAgICAgICAg IEluIGFkZGl0aW9uIHRvIHRoZSBmdW5jdGlvbmFsaXR5IG9mIHRoZSB2ZXJzaW9uIDEgQVBJLCB0 aGUgdjIgc3RydWN0CisgICAgICAgICBwcm92aWRlcyBhbiBhZGRpdGlvbmFsIGlucHV0IGFuZCBv dXRwdXQgZm9yIHRoZSBob29rOgorICAgICAgICA8L3BhcmE+CisgICAgICAgIDxwYXJhPgorICAg ICAgICAgPHJlcGxhY2VhYmxlPmlzc3VlcjwvcmVwbGFjZWFibGU+IGNvbnRhaW5zIHRoZSBpc3N1 ZXIgaWRlbnRpZmllciwgYXMKKyAgICAgICAgIGRlZmluZWQgaW4gPHVsaW5rIHVybD0iaHR0cHM6 Ly9kYXRhdHJhY2tlci5pZXRmLm9yZy9kb2MvaHRtbC9yZmM5MjA3Ij5SRkMgOTIwNzwvdWxpbms+ LAorICAgICAgICAgdGhhdCBpcyBpbiB1c2UgZm9yIHRoZSBjdXJyZW50IGNvbm5lY3Rpb24uIFRo aXMgaWRlbnRpZmllciBpcworICAgICAgICAgZGV0ZXJtaW5lZCBieSA8eHJlZiBsaW5rZW5kPSJs aWJwcS1jb25uZWN0LW9hdXRoLWlzc3VlciIvPi4KKyAgICAgICAgIFRvIGF2b2lkIG1peC11cCBh dHRhY2tzLCBjdXN0b20gZmxvd3Mgc2hvdWxkIGVuc3VyZSB0aGF0IGFueSBkaXNjb3ZlcnkKKyAg ICAgICAgIG1ldGFkYXRhIHByb3ZpZGVkIGJ5IHRoZSBhdXRob3JpemF0aW9uIHNlcnZlciBtYXRj aGVzIHRoaXMgaXNzdWVyIElELgorICAgICAgICA8L3BhcmE+CisgICAgICAgIDxwYXJhPgorICAg ICAgICAgPHJlcGxhY2VhYmxlPmVycm9yPC9yZXBsYWNlYWJsZT4gbWF5IGJlIHNldCB0byBwb2lu dCB0byBhIGN1c3RvbQorICAgICAgICAgZXJyb3IgbWVzc2FnZSB3aGVuIGEgZmxvdyBmYWlscy4g VGhlIG1lc3NhZ2Ugd2lsbCBiZSBpbmNsdWRlZCBhcyBwYXJ0CisgICAgICAgICBvZiA8bGluayBs aW5rZW5kPSJsaWJwcS1QUWVycm9yTWVzc2FnZSI+PGxpdGVyYWw+UFFlcnJvck1lc3NhZ2UoKTwv bGl0ZXJhbD48L2xpbms+LgorICAgICAgICAgSG9va3MgbXVzdCBmcmVlIGFueSBlcnJvciBtZXNz YWdlIGFsbG9jYXRpb25zIGR1cmluZyB0aGUKKyAgICAgICAgIDxyZXBsYWNlYWJsZT52MS5jbGVh bnVwPC9yZXBsYWNlYWJsZT4gY2FsbGJhY2suCisgICAgICAgIDwvcGFyYT4KKyAgICAgICA8L2xp c3RpdGVtPgorICAgICAgPC92YXJsaXN0ZW50cnk+CisKICAgICAgPC92YXJpYWJsZWxpc3Q+CiAg ICAgPC9wYXJhPgogICAgPC9zZWN0Mz4KZGlmZiAtLWdpdCBhL3NyYy90b29scy9wZ2luZGVudC90 eXBlZGVmcy5saXN0IGIvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKaW5kZXggNzdl M2MwNDE0NGUuLjMyNTA1NjRkNGZmIDEwMDY0NAotLS0gYS9zcmMvdG9vbHMvcGdpbmRlbnQvdHlw ZWRlZnMubGlzdAorKysgYi9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdApAQCAtMTky Niw2ICsxOTI2LDcgQEAgUEdkYXRhVmFsdWUKIFBHbG9iamZ1bmNzCiBQR25vdGlmeQogUEdvYXV0 aEJlYXJlclJlcXVlc3QKK1BHb2F1dGhCZWFyZXJSZXF1ZXN0VjIKIFBHcGlwZWxpbmVTdGF0dXMK IFBHcHJvbXB0T0F1dGhEZXZpY2UKIFBHcmVzQXR0RGVzYwpkaWZmIC0tZ2l0IGEvc3JjL2ludGVy ZmFjZXMvbGlicHEvbGlicHEtZmUuaCBiL3NyYy9pbnRlcmZhY2VzL2xpYnBxL2xpYnBxLWZlLmgK aW5kZXggMWI0NjAzMmI2ZjkuLmYwNmU3YTk3MmMzIDEwMDY0NAotLS0gYS9zcmMvaW50ZXJmYWNl cy9saWJwcS9saWJwcS1mZS5oCisrKyBiL3NyYy9pbnRlcmZhY2VzL2xpYnBxL2xpYnBxLWZlLmgK QEAgLTY2LDYgKzY2LDggQEAgZXh0ZXJuICJDIgogLyogRmVhdHVyZXMgYWRkZWQgaW4gUG9zdGdy ZVNRTCB2MTk6ICovCiAvKiBJbmRpY2F0ZXMgcHJlc2VuY2Ugb2YgUFFnZXRUaHJlYWRMb2NrICov CiAjZGVmaW5lIExJQlBRX0hBU19HRVRfVEhSRUFEX0xPQ0sgMQorLyogSW5kaWNhdGVzIHByZXNl bmNlIG9mIHRoZSBQUUFVVEhEQVRBX09BVVRIX0JFQVJFUl9UT0tFTl9WMiBhdXRoZGF0YSBob29r ICovCisjZGVmaW5lIExJQlBRX0hBU19PQVVUSF9CRUFSRVJfVE9LRU5fVjIgMQogCiAvKgogICog T3B0aW9uIGZsYWdzIGZvciBQUWNvcHlSZXN1bHQKQEAgLTE5Nyw3ICsxOTksOSBAQCB0eXBlZGVm IGVudW0KIHsKIAlQUUFVVEhEQVRBX1BST01QVF9PQVVUSF9ERVZJQ0UsIC8qIHVzZXIgbXVzdCB2 aXNpdCBhIGRldmljZS1hdXRob3JpemF0aW9uCiAJCQkJCQkJCQkgKiBVUkwgKi8KLQlQUUFVVEhE QVRBX09BVVRIX0JFQVJFUl9UT0tFTiwJLyogc2VydmVyIHJlcXVlc3RzIGFuIE9BdXRoIEJlYXJl ciB0b2tlbiAqLworCVBRQVVUSERBVEFfT0FVVEhfQkVBUkVSX1RPS0VOLAkvKiBzZXJ2ZXIgcmVx dWVzdHMgYW4gT0F1dGggQmVhcmVyIHRva2VuCisJCQkJCQkJCQkgKiAodjIgaXMgcHJlZmVycmVk OyBzZWUgYmVsb3cpICovCisJUFFBVVRIREFUQV9PQVVUSF9CRUFSRVJfVE9LRU5fVjIsCS8qIG5l d2VzdCBBUEkgZm9yIE9BdXRoIEJlYXJlciB0b2tlbnMgKi8KIH0gUEdhdXRoRGF0YTsKIAogLyog UEdjb25uIGVuY2Fwc3VsYXRlcyBhIGNvbm5lY3Rpb24gdG8gdGhlIGJhY2tlbmQuCkBAIC03MzUs NiArNzM5LDcgQEAgZXh0ZXJuIGludAlQUWVudjJlbmNvZGluZyh2b2lkKTsKIAogLyogPT09IGlu IGZlLWF1dGguYyA9PT0gKi8KIAorLyogQXV0aGRhdGEgZm9yIFBRQVVUSERBVEFfUFJPTVBUX09B VVRIX0RFVklDRSAqLwogdHlwZWRlZiBzdHJ1Y3QgX1BHcHJvbXB0T0F1dGhEZXZpY2UKIHsKIAlj b25zdCBjaGFyICp2ZXJpZmljYXRpb25fdXJpOwkvKiB2ZXJpZmljYXRpb24gVVJJIHRvIHZpc2l0 ICovCkBAIC03NTUsNiArNzYwLDcgQEAgdHlwZWRlZiBzdHJ1Y3QgX1BHcHJvbXB0T0F1dGhEZXZp Y2UKICNkZWZpbmUgUFFfU09DS1RZUEUgaW50CiAjZW5kaWYKIAorLyogQXV0aGRhdGEgZm9yIFBR QVVUSERBVEFfT0FVVEhfQkVBUkVSX1RPS0VOICovCiB0eXBlZGVmIHN0cnVjdCBQR29hdXRoQmVh cmVyUmVxdWVzdAogewogCS8qIEhvb2sgaW5wdXRzIChjb25zdGFudCBhY3Jvc3MgYWxsIGNhbGxz KSAqLwpAQCAtNzg4LDcgKzc5NCw4IEBAIHR5cGVkZWYgc3RydWN0IFBHb2F1dGhCZWFyZXJSZXF1 ZXN0CiAKIAkvKgogCSAqIENhbGxiYWNrIHRvIGNsZWFuIHVwIGN1c3RvbSBhbGxvY2F0aW9ucy4g QSBob29rIGltcGxlbWVudGF0aW9uIG1heSB1c2UKLQkgKiB0aGlzIHRvIGZyZWUgcmVxdWVzdC0+ dG9rZW4gYW5kIGFueSByZXNvdXJjZXMgaW4gcmVxdWVzdC0+dXNlci4KKwkgKiB0aGlzIHRvIGZy ZWUgcmVxdWVzdC0+dG9rZW4gYW5kIGFueSByZXNvdXJjZXMgaW4gcmVxdWVzdC0+dXNlci4gVjIK KwkgKiBpbXBsZW1lbnRhdGlvbnMgc2hvdWxkIGFkZGl0aW9uYWxseSBmcmVlIHJlcXVlc3QtPmVy cm9yLCBpZiBzZXQuCiAJICoKIAkgKiBUaGlzIGlzIHRlY2huaWNhbGx5IG9wdGlvbmFsLCBidXQg aGlnaGx5IHJlY29tbWVuZGVkLCBiZWNhdXNlIHRoZXJlIGlzCiAJICogbm8gb3RoZXIgaW5kaWNh dGlvbiBhcyB0byB3aGVuIGl0IGlzIHNhZmUgdG8gZnJlZSB0aGUgdG9rZW4uCkBAIC04MTMsNiAr ODIwLDI2IEBAIHR5cGVkZWYgc3RydWN0IFBHb2F1dGhCZWFyZXJSZXF1ZXN0CiAKICN1bmRlZiBQ UV9TT0NLVFlQRQogCisvKiBBdXRoZGF0YSBmb3IgUFFBVVRIREFUQV9PQVVUSF9CRUFSRVJfVE9L RU5fVjIgKi8KK3R5cGVkZWYgc3RydWN0Cit7CisJUEdvYXV0aEJlYXJlclJlcXVlc3QgdjE7CS8q IHNlZSB0aGUgUEdvYXV0aEJlYXJlclJlcXVlc3Qgc3RydWN0LCBhYm92ZSAqLworCisJLyogSG9v ayBpbnB1dHMgKGNvbnN0YW50IGFjcm9zcyBhbGwgY2FsbHMpICovCisJY29uc3QgY2hhciAqaXNz dWVyOwkJCS8qIHRoZSBpc3N1ZXIgaWRlbnRpZmllciAoUkZDIDkyMDcpIGluIHVzZSwgYXMKKwkJ CQkJCQkJICogZGVyaXZlZCBmcm9tIHRoZSBjb25uZWN0aW9uJ3Mgb2F1dGhfaXNzdWVyICovCisK KwkvKiBIb29rIG91dHB1dHMgKi8KKworCS8qCisJICogSG9vay1kZWZpbmVkIGVycm9yIG1lc3Nh Z2Ugd2hpY2ggd2lsbCBiZSBpbmNsdWRlZCBpbiB0aGUgY29ubmVjdGlvbidzCisJICogUFFlcnJv ck1lc3NhZ2UoKSBvdXRwdXQgd2hlbiB0aGUgZmxvdyBmYWlscy4gbGlicHEgZG9lcyBub3QgdGFr ZQorCSAqIG93bmVyc2hpcCBvZiB0aGlzIHBvaW50ZXI7IGFueSBhbGxvY2F0aW9ucyBzaG91bGQg YmUgZnJlZWQgZHVyaW5nIHRoZQorCSAqIGNsZWFudXAgY2FsbGJhY2suCisJICovCisJY29uc3Qg Y2hhciAqZXJyb3I7Cit9IFBHb2F1dGhCZWFyZXJSZXF1ZXN0VjI7CisKIGV4dGVybiBjaGFyICpQ UWVuY3J5cHRQYXNzd29yZChjb25zdCBjaGFyICpwYXNzd2QsIGNvbnN0IGNoYXIgKnVzZXIpOwog ZXh0ZXJuIGNoYXIgKlBRZW5jcnlwdFBhc3N3b3JkQ29ubihQR2Nvbm4gKmNvbm4sIGNvbnN0IGNo YXIgKnBhc3N3ZCwgY29uc3QgY2hhciAqdXNlciwgY29uc3QgY2hhciAqYWxnb3JpdGhtKTsKIGV4 dGVybiBQR3Jlc3VsdCAqUFFjaGFuZ2VQYXNzd29yZChQR2Nvbm4gKmNvbm4sIGNvbnN0IGNoYXIg KnVzZXIsIGNvbnN0IGNoYXIgKnBhc3N3ZCk7CmRpZmYgLS1naXQgYS9zcmMvaW50ZXJmYWNlcy9s aWJwcS9mZS1hdXRoLW9hdXRoLmMgYi9zcmMvaW50ZXJmYWNlcy9saWJwcS9mZS1hdXRoLW9hdXRo LmMKaW5kZXggNjc4NzlkNjRiMzkuLmI2NGQwNWExM2UzIDEwMDY0NAotLS0gYS9zcmMvaW50ZXJm YWNlcy9saWJwcS9mZS1hdXRoLW9hdXRoLmMKKysrIGIvc3JjL2ludGVyZmFjZXMvbGlicHEvZmUt YXV0aC1vYXV0aC5jCkBAIC02NzUsNiArNjc1LDI1IEBAIGNsZWFudXA6CiAJcmV0dXJuIHN1Y2Nl c3M7CiB9CiAKKy8qCisgKiBIZWxwZXIgZm9yIGhhbmRsaW5nIGZsb3cgZmFpbHVyZXMuIElmIGFu eXRoaW5nIHdhcyBwdXQgaW50byByZXF1ZXN0LT5lcnJvciwKKyAqIGl0J3MgYWRkZWQgdG8gY29u bi0+ZXJyb3JNZXNzYWdlIGhlcmUuCisgKi8KK3N0YXRpYyB2b2lkCityZXBvcnRfdXNlcl9mbG93 X2Vycm9yKFBHY29ubiAqY29ubiwgY29uc3QgUEdvYXV0aEJlYXJlclJlcXVlc3RWMiAqcmVxdWVz dCkKK3sKKwlhcHBlbmRQUUV4cEJ1ZmZlclN0cigmY29ubi0+ZXJyb3JNZXNzYWdlLAorCQkJCQkJ IGxpYnBxX2dldHRleHQoInVzZXItZGVmaW5lZCBPQXV0aCBmbG93IGZhaWxlZCIpKTsKKworCWlm IChyZXF1ZXN0LT5lcnJvcikKKwl7CisJCWFwcGVuZFBRRXhwQnVmZmVyU3RyKCZjb25uLT5lcnJv ck1lc3NhZ2UsICI6ICIpOworCQlhcHBlbmRQUUV4cEJ1ZmZlclN0cigmY29ubi0+ZXJyb3JNZXNz YWdlLCByZXF1ZXN0LT5lcnJvcik7CisJfQorCisJYXBwZW5kUFFFeHBCdWZmZXJDaGFyKCZjb25u LT5lcnJvck1lc3NhZ2UsICdcbicpOworfQorCiAvKgogICogQ2FsbGJhY2sgaW1wbGVtZW50YXRp b24gb2YgY29ubi0+YXN5bmNfYXV0aCgpIGZvciBhIHVzZXItZGVmaW5lZCBPQXV0aCBmbG93Lgog ICogRGVsZWdhdGVzIHRoZSByZXRyaWV2YWwgb2YgdGhlIHRva2VuIHRvIHRoZSBhcHBsaWNhdGlv bidzIGFzeW5jIGNhbGxiYWNrLgpAQCAtNjg3LDIwICs3MDYsMjMgQEAgc3RhdGljIFBvc3RncmVz UG9sbGluZ1N0YXR1c1R5cGUKIHJ1bl91c2VyX29hdXRoX2Zsb3coUEdjb25uICpjb25uKQogewog CWZlX29hdXRoX3N0YXRlICpzdGF0ZSA9IGNvbm4tPnNhc2xfc3RhdGU7Ci0JUEdvYXV0aEJlYXJl clJlcXVlc3QgKnJlcXVlc3QgPSBzdGF0ZS0+YXN5bmNfY3R4OworCVBHb2F1dGhCZWFyZXJSZXF1 ZXN0VjIgKnJlcXVlc3QgPSBzdGF0ZS0+YXN5bmNfY3R4OwogCVBvc3RncmVzUG9sbGluZ1N0YXR1 c1R5cGUgc3RhdHVzOwogCi0JaWYgKCFyZXF1ZXN0LT5hc3luYykKKwlpZiAoIXJlcXVlc3QtPnYx LmFzeW5jKQogCXsKIAkJbGlicHFfYXBwZW5kX2Nvbm5fZXJyb3IoY29ubiwKIAkJCQkJCQkJInVz ZXItZGVmaW5lZCBPQXV0aCBmbG93IHByb3ZpZGVkIG5laXRoZXIgYSB0b2tlbiBub3IgYW4gYXN5 bmMgY2FsbGJhY2siKTsKIAkJcmV0dXJuIFBHUkVTX1BPTExJTkdfRkFJTEVEOwogCX0KIAotCXN0 YXR1cyA9IHJlcXVlc3QtPmFzeW5jKGNvbm4sIHJlcXVlc3QsICZjb25uLT5hbHRzb2NrKTsKKwlz dGF0dXMgPSByZXF1ZXN0LT52MS5hc3luYyhjb25uLAorCQkJCQkJCSAgIChQR29hdXRoQmVhcmVy UmVxdWVzdCAqKSByZXF1ZXN0LAorCQkJCQkJCSAgICZjb25uLT5hbHRzb2NrKTsKKwogCWlmIChz dGF0dXMgPT0gUEdSRVNfUE9MTElOR19GQUlMRUQpCiAJewotCQlsaWJwcV9hcHBlbmRfY29ubl9l cnJvcihjb25uLCAidXNlci1kZWZpbmVkIE9BdXRoIGZsb3cgZmFpbGVkIik7CisJCXJlcG9ydF91 c2VyX2Zsb3dfZXJyb3IoY29ubiwgcmVxdWVzdCk7CiAJCXJldHVybiBzdGF0dXM7CiAJfQogCWVs c2UgaWYgKHN0YXR1cyA9PSBQR1JFU19QT0xMSU5HX09LKQpAQCAtNzEwLDE0ICs3MzIsMTQgQEAg cnVuX3VzZXJfb2F1dGhfZmxvdyhQR2Nvbm4gKmNvbm4pCiAJCSAqIG9udG8gdGhlIG9yaWdpbmFs IHN0cmluZywgc2luY2UgaXQgbWF5IG5vdCBiZSBzYWZlIGZvciB1cyB0byBmcmVlKCkKIAkJICog aXQuKQogCQkgKi8KLQkJaWYgKCFyZXF1ZXN0LT50b2tlbikKKwkJaWYgKCFyZXF1ZXN0LT52MS50 b2tlbikKIAkJewogCQkJbGlicHFfYXBwZW5kX2Nvbm5fZXJyb3IoY29ubiwKIAkJCQkJCQkJCSJ1 c2VyLWRlZmluZWQgT0F1dGggZmxvdyBkaWQgbm90IHByb3ZpZGUgYSB0b2tlbiIpOwogCQkJcmV0 dXJuIFBHUkVTX1BPTExJTkdfRkFJTEVEOwogCQl9CiAKLQkJY29ubi0+b2F1dGhfdG9rZW4gPSBz dHJkdXAocmVxdWVzdC0+dG9rZW4pOworCQljb25uLT5vYXV0aF90b2tlbiA9IHN0cmR1cChyZXF1 ZXN0LT52MS50b2tlbik7CiAJCWlmICghY29ubi0+b2F1dGhfdG9rZW4pCiAJCXsKIAkJCWxpYnBx X2FwcGVuZF9jb25uX2Vycm9yKGNvbm4sICJvdXQgb2YgbWVtb3J5Iik7CkBAIC03MzksMTkgKzc2 MSwyMCBAQCBydW5fdXNlcl9vYXV0aF9mbG93KFBHY29ubiAqY29ubikKIH0KIAogLyoKLSAqIENs ZWFudXAgY2FsbGJhY2sgZm9yIHRoZSBhc3luYyB1c2VyIGZsb3cuIERlbGVnYXRlcyBtb3N0IG9m IGl0cyBqb2IgdG8gdGhlCi0gKiB1c2VyLXByb3ZpZGVkIGNsZWFudXAgaW1wbGVtZW50YXRpb24s IHRoZW4gZGlzY29ubmVjdHMgdGhlIGFsdHNvY2suCisgKiBDbGVhbnVwIGNhbGxiYWNrIGZvciB0 aGUgYXN5bmMgdXNlciBmbG93LiBEZWxlZ2F0ZXMgbW9zdCBvZiBpdHMgam9iIHRvCisgKiBQR29h dXRoQmVhcmVyUmVxdWVzdFYyLmNsZWFudXAoKSwgdGhlbiBkaXNjb25uZWN0cyB0aGUgYWx0c29j ayBhbmQgZnJlZXMgdGhlCisgKiByZXF1ZXN0IGl0c2VsZi4KICAqLwogc3RhdGljIHZvaWQKIGNs ZWFudXBfdXNlcl9vYXV0aF9mbG93KFBHY29ubiAqY29ubikKIHsKIAlmZV9vYXV0aF9zdGF0ZSAq c3RhdGUgPSBjb25uLT5zYXNsX3N0YXRlOwotCVBHb2F1dGhCZWFyZXJSZXF1ZXN0ICpyZXF1ZXN0 ID0gc3RhdGUtPmFzeW5jX2N0eDsKKwlQR29hdXRoQmVhcmVyUmVxdWVzdFYyICpyZXF1ZXN0ID0g c3RhdGUtPmFzeW5jX2N0eDsKIAogCUFzc2VydChyZXF1ZXN0KTsKIAotCWlmIChyZXF1ZXN0LT5j bGVhbnVwKQotCQlyZXF1ZXN0LT5jbGVhbnVwKGNvbm4sIHJlcXVlc3QpOworCWlmIChyZXF1ZXN0 LT52MS5jbGVhbnVwKQorCQlyZXF1ZXN0LT52MS5jbGVhbnVwKGNvbm4sIChQR29hdXRoQmVhcmVy UmVxdWVzdCAqKSByZXF1ZXN0KTsKIAljb25uLT5hbHRzb2NrID0gUEdJTlZBTElEX1NPQ0tFVDsK IAogCWZyZWUocmVxdWVzdCk7CkBAIC05NzUsOCArOTk4LDggQEAgdXNlX2J1aWx0aW5fZmxvdyhQ R2Nvbm4gKmNvbm4sIGZlX29hdXRoX3N0YXRlICpzdGF0ZSkKICAqIHRva2VuIGZvciBwcmVzZW50 YXRpb24gdG8gdGhlIHNlcnZlci4KICAqCiAgKiBJZiB0aGUgYXBwbGljYXRpb24gaGFzIHJlZ2lz dGVyZWQgYSBjdXN0b20gZmxvdyBoYW5kbGVyIHVzaW5nCi0gKiBQUUFVVEhEQVRBX09BVVRIX0JF QVJFUl9UT0tFTiwgaXQgbWF5IGVpdGhlciByZXR1cm4gYSB0b2tlbiBpbW1lZGlhdGVseSAoZS5n LgotICogaWYgaXQgaGFzIG9uZSBjYWNoZWQgZm9yIGltbWVkaWF0ZSB1c2UpLCBvciBzZXQgdXAg Zm9yIGEgc2VyaWVzIG9mCisgKiBQUUFVVEhEQVRBX09BVVRIX0JFQVJFUl9UT0tFTltfVjJdLCBp dCBtYXkgZWl0aGVyIHJldHVybiBhIHRva2VuIGltbWVkaWF0ZWx5CisgKiAoZS5nLiBpZiBpdCBo YXMgb25lIGNhY2hlZCBmb3IgaW1tZWRpYXRlIHVzZSksIG9yIHNldCB1cCBmb3IgYSBzZXJpZXMg b2YKICAqIGFzeW5jaHJvbm91cyBjYWxsYmFja3Mgd2hpY2ggd2lsbCBiZSBtYW5hZ2VkIGJ5IHJ1 bl91c2VyX29hdXRoX2Zsb3coKS4KICAqCiAgKiBJZiB0aGUgZGVmYXVsdCBoYW5kbGVyIGlzIHVz ZWQgaW5zdGVhZCwgYSBEZXZpY2UgQXV0aG9yaXphdGlvbiBmbG93IGlzIHVzZWQKQEAgLTk5MCwy NyArMTAxMywzNyBAQCBzdGF0aWMgYm9vbAogc2V0dXBfdG9rZW5fcmVxdWVzdChQR2Nvbm4gKmNv bm4sIGZlX29hdXRoX3N0YXRlICpzdGF0ZSkKIHsKIAlpbnQJCQlyZXM7Ci0JUEdvYXV0aEJlYXJl clJlcXVlc3QgcmVxdWVzdCA9IHsKLQkJLm9wZW5pZF9jb25maWd1cmF0aW9uID0gY29ubi0+b2F1 dGhfZGlzY292ZXJ5X3VyaSwKLQkJLnNjb3BlID0gY29ubi0+b2F1dGhfc2NvcGUsCisJUEdvYXV0 aEJlYXJlclJlcXVlc3RWMiByZXF1ZXN0ID0geworCQkudjEgPSB7CisJCQkub3BlbmlkX2NvbmZp Z3VyYXRpb24gPSBjb25uLT5vYXV0aF9kaXNjb3ZlcnlfdXJpLAorCQkJLnNjb3BlID0gY29ubi0+ b2F1dGhfc2NvcGUsCisJCX0sCisJCS5pc3N1ZXIgPSBjb25uLT5vYXV0aF9pc3N1ZXJfaWQsCiAJ fTsKIAotCUFzc2VydChyZXF1ZXN0Lm9wZW5pZF9jb25maWd1cmF0aW9uKTsKKwlBc3NlcnQocmVx dWVzdC52MS5vcGVuaWRfY29uZmlndXJhdGlvbik7CisJQXNzZXJ0KHJlcXVlc3QuaXNzdWVyKTsK KworCS8qCisJICogVGhlIGNsaWVudCBtYXkgaGF2ZSBvdmVycmlkZGVuIHRoZSBPQXV0aCBmbG93 LiBUcnkgdGhlIHYyIGhvb2sgZmlyc3QsCisJICogdGhlbiBmYWxsIGJhY2sgdG8gdGhlIHYxIGlt cGxlbWVudGF0aW9uLgorCSAqLworCXJlcyA9IFBRYXV0aERhdGFIb29rKFBRQVVUSERBVEFfT0FV VEhfQkVBUkVSX1RPS0VOX1YyLCBjb25uLCAmcmVxdWVzdCk7CisJaWYgKHJlcyA9PSAwKQorCQly ZXMgPSBQUWF1dGhEYXRhSG9vayhQUUFVVEhEQVRBX09BVVRIX0JFQVJFUl9UT0tFTiwgY29ubiwg JnJlcXVlc3QpOwogCi0JLyogVGhlIGNsaWVudCBtYXkgaGF2ZSBvdmVycmlkZGVuIHRoZSBPQXV0 aCBmbG93LiAqLwotCXJlcyA9IFBRYXV0aERhdGFIb29rKFBRQVVUSERBVEFfT0FVVEhfQkVBUkVS X1RPS0VOLCBjb25uLCAmcmVxdWVzdCk7CiAJaWYgKHJlcyA+IDApCiAJewotCQlQR29hdXRoQmVh cmVyUmVxdWVzdCAqcmVxdWVzdF9jb3B5OworCQlQR29hdXRoQmVhcmVyUmVxdWVzdFYyICpyZXF1 ZXN0X2NvcHk7CiAKLQkJaWYgKHJlcXVlc3QudG9rZW4pCisJCWlmIChyZXF1ZXN0LnYxLnRva2Vu KQogCQl7CiAJCQkvKgogCQkJICogV2UgYWxyZWFkeSBoYXZlIGEgdG9rZW4sIHNvIGNvcHkgaXQg aW50byB0aGUgY29ubi4gKFdlIGNhbid0CiAJCQkgKiBob2xkIG9udG8gdGhlIG9yaWdpbmFsIHN0 cmluZywgc2luY2UgaXQgbWF5IG5vdCBiZSBzYWZlIGZvciB1cwogCQkJICogdG8gZnJlZSgpIGl0 LikKIAkJCSAqLwotCQkJY29ubi0+b2F1dGhfdG9rZW4gPSBzdHJkdXAocmVxdWVzdC50b2tlbik7 CisJCQljb25uLT5vYXV0aF90b2tlbiA9IHN0cmR1cChyZXF1ZXN0LnYxLnRva2VuKTsKIAkJCWlm ICghY29ubi0+b2F1dGhfdG9rZW4pCiAJCQl7CiAJCQkJbGlicHFfYXBwZW5kX2Nvbm5fZXJyb3Io Y29ubiwgIm91dCBvZiBtZW1vcnkiKTsKQEAgLTEwMTgsOCArMTA1MSw4IEBAIHNldHVwX3Rva2Vu X3JlcXVlc3QoUEdjb25uICpjb25uLCBmZV9vYXV0aF9zdGF0ZSAqc3RhdGUpCiAJCQl9CiAKIAkJ CS8qIHNob3J0LWNpcmN1aXQgKi8KLQkJCWlmIChyZXF1ZXN0LmNsZWFudXApCi0JCQkJcmVxdWVz dC5jbGVhbnVwKGNvbm4sICZyZXF1ZXN0KTsKKwkJCWlmIChyZXF1ZXN0LnYxLmNsZWFudXApCisJ CQkJcmVxdWVzdC52MS5jbGVhbnVwKGNvbm4sIChQR29hdXRoQmVhcmVyUmVxdWVzdCAqKSAmcmVx dWVzdCk7CiAJCQlyZXR1cm4gdHJ1ZTsKIAkJfQogCkBAIC0xMDM4LDcgKzEwNzEsNyBAQCBzZXR1 cF90b2tlbl9yZXF1ZXN0KFBHY29ubiAqY29ubiwgZmVfb2F1dGhfc3RhdGUgKnN0YXRlKQogCX0K IAllbHNlIGlmIChyZXMgPCAwKQogCXsKLQkJbGlicHFfYXBwZW5kX2Nvbm5fZXJyb3IoY29ubiwg InVzZXItZGVmaW5lZCBPQXV0aCBmbG93IGZhaWxlZCIpOworCQlyZXBvcnRfdXNlcl9mbG93X2Vy cm9yKGNvbm4sICZyZXF1ZXN0KTsKIAkJZ290byBmYWlsOwogCX0KIAllbHNlIGlmICghdXNlX2J1 aWx0aW5fZmxvdyhjb25uLCBzdGF0ZSkpCkBAIC0xMDUwLDggKzEwODMsOCBAQCBzZXR1cF90b2tl bl9yZXF1ZXN0KFBHY29ubiAqY29ubiwgZmVfb2F1dGhfc3RhdGUgKnN0YXRlKQogCXJldHVybiB0 cnVlOwogCiBmYWlsOgotCWlmIChyZXF1ZXN0LmNsZWFudXApCi0JCXJlcXVlc3QuY2xlYW51cChj b25uLCAmcmVxdWVzdCk7CisJaWYgKHJlcXVlc3QudjEuY2xlYW51cCkKKwkJcmVxdWVzdC52MS5j bGVhbnVwKGNvbm4sIChQR29hdXRoQmVhcmVyUmVxdWVzdCAqKSAmcmVxdWVzdCk7CiAJcmV0dXJu IGZhbHNlOwogfQogCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9tb2R1bGVzL29hdXRoX3ZhbGlkYXRv ci9vYXV0aF9ob29rX2NsaWVudC5jIGIvc3JjL3Rlc3QvbW9kdWxlcy9vYXV0aF92YWxpZGF0b3Iv b2F1dGhfaG9va19jbGllbnQuYwppbmRleCA2MGRkMWRjZGFhMC4uNWJkZGMwZjgwN2EgMTAwNjQ0 Ci0tLSBhL3NyYy90ZXN0L21vZHVsZXMvb2F1dGhfdmFsaWRhdG9yL29hdXRoX2hvb2tfY2xpZW50 LmMKKysrIGIvc3JjL3Rlc3QvbW9kdWxlcy9vYXV0aF92YWxpZGF0b3Ivb2F1dGhfaG9va19jbGll bnQuYwpAQCAtMjAsNiArMjAsNyBAQAogCiAjaW5jbHVkZSAiZ2V0b3B0X2xvbmcuaCIKICNpbmNs dWRlICJsaWJwcS1mZS5oIgorI2luY2x1ZGUgInBxZXhwYnVmZmVyLmgiCiAKIHN0YXRpYyBpbnQJ aGFuZGxlX2F1dGhfZGF0YShQR2F1dGhEYXRhIHR5cGUsIFBHY29ubiAqY29ubiwgdm9pZCAqZGF0 YSk7CiBzdGF0aWMgUG9zdGdyZXNQb2xsaW5nU3RhdHVzVHlwZSBhc3luY19jYihQR2Nvbm4gKmNv bm4sCkBAIC0zNiwxMyArMzcsMTYgQEAgdXNhZ2UoY2hhciAqYXJndltdKQogCiAJcHJpbnRmKCJy ZWNvZ25pemVkIGZsYWdzOlxuIik7CiAJcHJpbnRmKCIgIC1oLCAtLWhlbHAgICAgICAgICAgICAg IHNob3cgdGhpcyBtZXNzYWdlXG4iKTsKKwlwcmludGYoIiAgLXYgVkVSU0lPTiAgICAgICAgICAg ICAgc2VsZWN0IHRoZSBob29rIEFQSSB2ZXJzaW9uIChkZWZhdWx0IDIpXG4iKTsKIAlwcmludGYo IiAgLS1leHBlY3RlZC1zY29wZSBTQ09QRSAgZmFpbCBpZiByZWNlaXZlZCBzY29wZXMgZG8gbm90 IG1hdGNoIFNDT1BFXG4iKTsKIAlwcmludGYoIiAgLS1leHBlY3RlZC11cmkgVVJJICAgICAgZmFp bCBpZiByZWNlaXZlZCBjb25maWd1cmF0aW9uIGxpbmsgZG9lcyBub3QgbWF0Y2ggVVJJXG4iKTsK KwlwcmludGYoIiAgLS1leHBlY3RlZC1pc3N1ZXIgSVNTICAgZmFpbCBpZiByZWNlaXZlZCBpc3N1 ZXIgZG9lcyBub3QgbWF0Y2ggSVNTICh2MiBvbmx5KVxuIik7CiAJcHJpbnRmKCIgIC0tbWlzYmVo YXZlPU1PREUgICAgICAgIGhhdmUgdGhlIGhvb2sgZmFpbCByZXF1aXJlZCBwb3N0Y29uZGl0aW9u c1xuIgogCQkgICAiICAgICAgICAgICAgICAgICAgICAgICAgICAoTU9ERXM6IG5vLWhvb2ssIGZh aWwtYXN5bmMsIG5vLXRva2VuLCBuby1zb2NrZXQpXG4iKTsKIAlwcmludGYoIiAgLS1uby1ob29r ICAgICAgICAgICAgICAgZG9uJ3QgaW5zdGFsbCBPQXV0aCBob29rc1xuIik7CiAJcHJpbnRmKCIg IC0taGFuZy1mb3JldmVyICAgICAgICAgIGRvbid0IGV2ZXIgcmV0dXJuIGEgdG9rZW4gKGNvbWJp bmUgd2l0aCBjb25uZWN0X3RpbWVvdXQpXG4iKTsKIAlwcmludGYoIiAgLS10b2tlbiBUT0tFTiAg ICAgICAgICAgdXNlIHRoZSBwcm92aWRlZCBUT0tFTiB2YWx1ZVxuIik7CisJcHJpbnRmKCIgIC0t ZXJyb3IgRVJSTVNHICAgICAgICAgIGZhaWwgaW5zdGVhZCwgd2l0aCB0aGUgZ2l2ZW4gRVJSTVNH ICh2MiBvbmx5KVxuIik7CiAJcHJpbnRmKCIgIC0tc3RyZXNzLWFzeW5jICAgICAgICAgIGJ1c3kt bG9vcCBvbiBQUWNvbm5lY3RQb2xsIHJhdGhlciB0aGFuIHBvbGxpbmdcbiIpOwogfQogCkBAIC01 MSw5ICs1NSwxMiBAQCBzdGF0aWMgYm9vbCBub19ob29rID0gZmFsc2U7CiBzdGF0aWMgYm9vbCBo YW5nX2ZvcmV2ZXIgPSBmYWxzZTsKIHN0YXRpYyBib29sIHN0cmVzc19hc3luYyA9IGZhbHNlOwog c3RhdGljIGNvbnN0IGNoYXIgKmV4cGVjdGVkX3VyaSA9IE5VTEw7CitzdGF0aWMgY29uc3QgY2hh ciAqZXhwZWN0ZWRfaXNzdWVyID0gTlVMTDsKIHN0YXRpYyBjb25zdCBjaGFyICpleHBlY3RlZF9z Y29wZSA9IE5VTEw7CiBzdGF0aWMgY29uc3QgY2hhciAqbWlzYmVoYXZlX21vZGUgPSBOVUxMOwog c3RhdGljIGNoYXIgKnRva2VuID0gTlVMTDsKK3N0YXRpYyBjaGFyICplcnJtc2cgPSBOVUxMOwor c3RhdGljIGludAlob29rX3ZlcnNpb24gPSBQUUFVVEhEQVRBX09BVVRIX0JFQVJFUl9UT0tFTl9W MjsKIAogaW50CiBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCkBAIC02OCw2ICs3NSw4IEBA IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKIAkJeyJoYW5nLWZvcmV2ZXIiLCBub19hcmd1 bWVudCwgTlVMTCwgMTAwNH0sCiAJCXsibWlzYmVoYXZlIiwgcmVxdWlyZWRfYXJndW1lbnQsIE5V TEwsIDEwMDV9LAogCQl7InN0cmVzcy1hc3luYyIsIG5vX2FyZ3VtZW50LCBOVUxMLCAxMDA2fSwK KwkJeyJleHBlY3RlZC1pc3N1ZXIiLCByZXF1aXJlZF9hcmd1bWVudCwgTlVMTCwgMTAwN30sCisJ CXsiZXJyb3IiLCByZXF1aXJlZF9hcmd1bWVudCwgTlVMTCwgMTAwOH0sCiAJCXswfQogCX07CiAK QEAgLTc1LDcgKzg0LDcgQEAgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQogCVBHY29ubgkg ICAqY29ubjsKIAlpbnQJCQljOwogCi0Jd2hpbGUgKChjID0gZ2V0b3B0X2xvbmcoYXJnYywgYXJn diwgImgiLCBsb25nX29wdGlvbnMsIE5VTEwpKSAhPSAtMSkKKwl3aGlsZSAoKGMgPSBnZXRvcHRf bG9uZyhhcmdjLCBhcmd2LCAiaHY6IiwgbG9uZ19vcHRpb25zLCBOVUxMKSkgIT0gLTEpCiAJewog CQlzd2l0Y2ggKGMpCiAJCXsKQEAgLTgzLDYgKzkyLDE4IEBAIG1haW4oaW50IGFyZ2MsIGNoYXIg KmFyZ3ZbXSkKIAkJCQl1c2FnZShhcmd2KTsKIAkJCQlyZXR1cm4gMDsKIAorCQkJY2FzZSAndic6 CisJCQkJaWYgKHN0cmNtcChvcHRhcmcsICIxIikgPT0gMCkKKwkJCQkJaG9va192ZXJzaW9uID0g UFFBVVRIREFUQV9PQVVUSF9CRUFSRVJfVE9LRU47CisJCQkJZWxzZSBpZiAoc3RyY21wKG9wdGFy ZywgIjIiKSA9PSAwKQorCQkJCQlob29rX3ZlcnNpb24gPSBQUUFVVEhEQVRBX09BVVRIX0JFQVJF Ul9UT0tFTl9WMjsKKwkJCQllbHNlCisJCQkJeworCQkJCQl1c2FnZShhcmd2KTsKKwkJCQkJcmV0 dXJuIDE7CisJCQkJfQorCQkJCWJyZWFrOworCiAJCQljYXNlIDEwMDA6CQkJLyogLS1leHBlY3Rl ZC1zY29wZSAqLwogCQkJCWV4cGVjdGVkX3Njb3BlID0gb3B0YXJnOwogCQkJCWJyZWFrOwpAQCAt MTExLDYgKzEzMiwxNCBAQCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCiAJCQkJc3RyZXNz X2FzeW5jID0gdHJ1ZTsKIAkJCQlicmVhazsKIAorCQkJY2FzZSAxMDA3OgkJCS8qIC0tZXhwZWN0 ZWQtaXNzdWVyICovCisJCQkJZXhwZWN0ZWRfaXNzdWVyID0gb3B0YXJnOworCQkJCWJyZWFrOwor CisJCQljYXNlIDEwMDg6CQkJLyogLS1lcnJvciAqLworCQkJCWVycm1zZyA9IG9wdGFyZzsKKwkJ CQlicmVhazsKKwogCQkJZGVmYXVsdDoKIAkJCQl1c2FnZShhcmd2KTsKIAkJCQlyZXR1cm4gMTsK QEAgLTE2NywxNiArMTk2LDI0IEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKIAogLyoK ICAqIFBRYXV0aERhdGFIb29rIGltcGxlbWVudGF0aW9uLiBSZXBsYWNlcyB0aGUgZGVmYXVsdCBj bGllbnQgZmxvdyBieSBoYW5kbGluZwotICogUFFBVVRIREFUQV9PQVVUSF9CRUFSRVJfVE9LRU4u CisgKiBQUUFVVEhEQVRBX09BVVRIX0JFQVJFUl9UT0tFTltfVjJdLgogICovCiBzdGF0aWMgaW50 CiBoYW5kbGVfYXV0aF9kYXRhKFBHYXV0aERhdGEgdHlwZSwgUEdjb25uICpjb25uLCB2b2lkICpk YXRhKQogewotCVBHb2F1dGhCZWFyZXJSZXF1ZXN0ICpyZXEgPSBkYXRhOworCVBHb2F1dGhCZWFy ZXJSZXF1ZXN0ICpyZXE7CisJUEdvYXV0aEJlYXJlclJlcXVlc3RWMiAqcmVxMiA9IE5VTEw7CisK KwlBc3NlcnQoaG9va192ZXJzaW9uID09IFBRQVVUSERBVEFfT0FVVEhfQkVBUkVSX1RPS0VOIHx8 CisJCSAgIGhvb2tfdmVyc2lvbiA9PSBQUUFVVEhEQVRBX09BVVRIX0JFQVJFUl9UT0tFTl9WMik7 CiAKLQlpZiAobm9faG9vayB8fCAodHlwZSAhPSBQUUFVVEhEQVRBX09BVVRIX0JFQVJFUl9UT0tF TikpCisJaWYgKG5vX2hvb2sgfHwgdHlwZSAhPSBob29rX3ZlcnNpb24pCiAJCXJldHVybiAwOwog CisJcmVxID0gZGF0YTsKKwlpZiAodHlwZSA9PSBQUUFVVEhEQVRBX09BVVRIX0JFQVJFUl9UT0tF Tl9WMikKKwkJcmVxMiA9IGRhdGE7CisKIAlpZiAoaGFuZ19mb3JldmVyKQogCXsKIAkJLyogU3Rh cnQgYXN5bmNocm9ub3VzIHByb2Nlc3NpbmcuICovCkBAIC0yMjEsNiArMjU4LDQ0IEBAIGhhbmRs ZV9hdXRoX2RhdGEoUEdhdXRoRGF0YSB0eXBlLCBQR2Nvbm4gKmNvbm4sIHZvaWQgKmRhdGEpCiAJ CX0KIAl9CiAKKwlpZiAoZXhwZWN0ZWRfaXNzdWVyKQorCXsKKwkJaWYgKCFyZXEyKQorCQl7CisJ CQlmcHJpbnRmKHN0ZGVyciwgIi0tZXhwZWN0ZWQtaXNzdWVyIGNhbm5vdCBiZSBjb21iaW5lZCB3 aXRoIC12MVxuIik7CisJCQlyZXR1cm4gLTE7CisJCX0KKworCQlpZiAoIXJlcTItPmlzc3VlcikK KwkJeworCQkJZnByaW50ZihzdGRlcnIsICJleHBlY3RlZCBpc3N1ZXIgXCIlc1wiLCBnb3QgTlVM TFxuIiwgZXhwZWN0ZWRfaXNzdWVyKTsKKwkJCXJldHVybiAtMTsKKwkJfQorCisJCWlmIChzdHJj bXAoZXhwZWN0ZWRfaXNzdWVyLCByZXEyLT5pc3N1ZXIpICE9IDApCisJCXsKKwkJCWZwcmludGYo c3RkZXJyLCAiZXhwZWN0ZWQgaXNzdWVyIFwiJXNcIiwgZ290IFwiJXNcIlxuIiwgZXhwZWN0ZWRf aXNzdWVyLCByZXEyLT5pc3N1ZXIpOworCQkJcmV0dXJuIC0xOworCQl9CisJfQorCisJaWYgKGVy cm1zZykKKwl7CisJCWlmICh0b2tlbikKKwkJeworCQkJZnByaW50ZihzdGRlcnIsICItLWVycm9y IGNhbm5vdCBiZSBjb21iaW5lZCB3aXRoIC0tdG9rZW5cbiIpOworCQkJcmV0dXJuIC0xOworCQl9 CisJCWVsc2UgaWYgKCFyZXEyKQorCQl7CisJCQlmcHJpbnRmKHN0ZGVyciwgIi0tZXJyb3IgY2Fu bm90IGJlIGNvbWJpbmVkIHdpdGggLXYxXG4iKTsKKwkJCXJldHVybiAtMTsKKwkJfQorCisJCXJl cTItPmVycm9yID0gZXJybXNnOworCQlyZXR1cm4gLTE7CisJfQorCiAJcmVxLT50b2tlbiA9IHRv a2VuOwogCXJldHVybiAxOwogfQpAQCAtMjczLDYgKzM0OCwyMCBAQCBtaXNiZWhhdmVfY2IoUEdj b25uICpjb25uLCBQR29hdXRoQmVhcmVyUmVxdWVzdCAqcmVxLCBwZ3NvY2tldCAqYWx0c29jaykK IAlpZiAoc3RyY21wKG1pc2JlaGF2ZV9tb2RlLCAiZmFpbC1hc3luYyIpID09IDApCiAJewogCQkv KiBKdXN0IGZhaWwgIm5vcm1hbGx5Ii4gKi8KKwkJaWYgKGVycm1zZykKKwkJeworCQkJUEdvYXV0 aEJlYXJlclJlcXVlc3RWMiAqcmVxMjsKKworCQkJaWYgKGhvb2tfdmVyc2lvbiA9PSBQUUFVVEhE QVRBX09BVVRIX0JFQVJFUl9UT0tFTikKKwkJCXsKKwkJCQlmcHJpbnRmKHN0ZGVyciwgIi0tZXJy b3IgY2Fubm90IGJlIGNvbWJpbmVkIHdpdGggLXYxXG4iKTsKKwkJCQlleGl0KDEpOworCQkJfQor CisJCQlyZXEyID0gKFBHb2F1dGhCZWFyZXJSZXF1ZXN0VjIgKikgcmVxOworCQkJcmVxMi0+ZXJy b3IgPSBlcnJtc2c7CisJCX0KKwogCQlyZXR1cm4gUEdSRVNfUE9MTElOR19GQUlMRUQ7CiAJfQog CWVsc2UgaWYgKHN0cmNtcChtaXNiZWhhdmVfbW9kZSwgIm5vLXRva2VuIikgPT0gMCkKZGlmZiAt LWdpdCBhL3NyYy90ZXN0L21vZHVsZXMvb2F1dGhfdmFsaWRhdG9yL3QvMDAyX2NsaWVudC5wbCBi L3NyYy90ZXN0L21vZHVsZXMvb2F1dGhfdmFsaWRhdG9yL3QvMDAyX2NsaWVudC5wbAppbmRleCBk NjZjZDBiNGE1Zi4uMTJhZjM1YjdkOTYgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L21vZHVsZXMvb2F1 dGhfdmFsaWRhdG9yL3QvMDAyX2NsaWVudC5wbAorKysgYi9zcmMvdGVzdC9tb2R1bGVzL29hdXRo X3ZhbGlkYXRvci90LzAwMl9jbGllbnQucGwKQEAgLTc4LDkgKzc4LDkgQEAgc3ViIHRlc3QKIAlt eSAkbG9nX3N0YXJ0ID0gLXMgJG5vZGUtPmxvZ2ZpbGU7CiAJbXkgKCRzdGRvdXQsICRzdGRlcnIp ID0gcnVuX2NvbW1hbmQoXEBjbWQpOwogCi0JaWYgKGRlZmluZWQoJHBhcmFtc3tleHBlY3RlZF9z dGRvdXR9KSkKKwlpZiAoJHBhcmFtc3tleHBlY3Rfc3VjY2Vzc30pCiAJewotCQlsaWtlKCRzdGRv dXQsICRwYXJhbXN7ZXhwZWN0ZWRfc3Rkb3V0fSwgIiR0ZXN0X25hbWU6IHN0ZG91dCBtYXRjaGVz Iik7CisJCWxpa2UoJHN0ZG91dCwgcXIvY29ubmVjdGlvbiBzdWNjZWVkZWQvLCAiJHRlc3RfbmFt ZTogc3Rkb3V0IG1hdGNoZXMiKTsKIAl9CiAKIAlpZiAoZGVmaW5lZCgkcGFyYW1ze2V4cGVjdGVk X3N0ZGVycn0pKQpAQCAtMTEwLDExICsxMTAsMjQgQEAgdGVzdCgKIAlmbGFncyA9PiBbCiAJCSIt LXRva2VuIiwgIm15LXRva2VuIiwKIAkJIi0tZXhwZWN0ZWQtdXJpIiwgIiRpc3N1ZXIvLndlbGwt a25vd24vb3BlbmlkLWNvbmZpZ3VyYXRpb24iLAorCQkiLS1leHBlY3RlZC1pc3N1ZXIiLCAiJGlz c3VlciIsCiAJCSItLWV4cGVjdGVkLXNjb3BlIiwgJHNjb3BlLAogCV0sCi0JZXhwZWN0ZWRfc3Rk b3V0ID0+IHFyL2Nvbm5lY3Rpb24gc3VjY2VlZGVkLywKKwlleHBlY3Rfc3VjY2VzcyA9PiAxLAog CWxvZ19saWtlID0+IFtxci9vYXV0aF92YWxpZGF0b3I6IHRva2VuPSJteS10b2tlbiIsIHJvbGU9 IiR1c2VyIi9dKTsKIAorIyBNYWtlIHN1cmUgdGhlIHYxIGhvb2sgY29udGludWVzIHRvIHdvcmsu Cit0ZXN0KAorCSJ2MSBzeW5jaHJvbm91cyBob29rIGNhbiBwcm92aWRlIGEgdG9rZW4iLAorCWZs YWdzID0+IFsKKwkJIi12MSIsCisJCSItLXRva2VuIiA9PiAibXktdG9rZW4tdjEiLAorCQkiLS1l eHBlY3RlZC11cmkiID0+ICIkaXNzdWVyLy53ZWxsLWtub3duL29wZW5pZC1jb25maWd1cmF0aW9u IiwKKwkJIi0tZXhwZWN0ZWQtc2NvcGUiID0+ICRzY29wZSwKKwldLAorCWV4cGVjdF9zdWNjZXNz ID0+IDEsCisJbG9nX2xpa2UgPT4gW3FyL29hdXRoX3ZhbGlkYXRvcjogdG9rZW49Im15LXRva2Vu LXYxIiwgcm9sZT0iJHVzZXIiL10pOworCiBpZiAoJEVOVnt3aXRoX2xpYmN1cmx9IG5lICd5ZXMn KQogewogCSMgbGlicHEgc2hvdWxkIGhlbHAgdXNlcnMgb3V0IGlmIG5vIE9BdXRoIHN1cHBvcnQg aXMgYnVpbHQgaW4uCkBAIC0xMjYsNiArMTM5LDE1IEBAIGlmICgkRU5We3dpdGhfbGliY3VybH0g bmUgJ3llcycpCiAJKTsKIH0KIAorIyB2MiBzeW5jaHJvbm91cyBmbG93cyBzaG91bGQgYmUgYWJs ZSB0byBzZXQgY3VzdG9tIGVycm9yIG1lc3NhZ2VzLgordGVzdCgKKwkiYmFzaWMgc3luY2hyb25v dXMgaG9vayBjYW4gc2V0IGVycm9yIG1lc3NhZ2VzIiwKKwlmbGFncyA9PiBbCisJCSItLWVycm9y IiA9PiAiYSBjdXN0b20gZXJyb3IgbWVzc2FnZSIsCisJXSwKKwlleHBlY3RlZF9zdGRlcnIgPT4K KwkgIHFyL3VzZXItZGVmaW5lZCBPQXV0aCBmbG93IGZhaWxlZDogYSBjdXN0b20gZXJyb3IgbWVz c2FnZS8pOworCiAjIGNvbm5lY3RfdGltZW91dCBzaG91bGQgd29yayBpZiB0aGUgZmxvdyBkb2Vz bid0IHJlc3BvbmQuCiAkY29tbW9uX2Nvbm5zdHIgPSAiJGNvbW1vbl9jb25uc3RyIGNvbm5lY3Rf dGltZW91dD0xIjsKIHRlc3QoCkBAIC0xNjUsNCArMTg3LDE0IEBAIGZvcmVhY2ggbXkgJGMgKEBj YXNlcykKIAkJZXhwZWN0ZWRfc3RkZXJyID0+ICRjLT57J2V4cGVjdGVkX2Vycm9yJ30pOwogfQog CisjIHYyIGFzeW5jIGZsb3dzIHNob3VsZCBiZSBhYmxlIHRvIHNldCBlcnJvciBtZXNzYWdlcywg dG9vLgordGVzdCgKKwkiYXN5bmNocm9ub3VzIGhvb2sgY2FuIHNldCBlcnJvciBtZXNzYWdlcyIs CisJZmxhZ3MgPT4gWworCQkiLS1taXNiZWhhdmUiID0+ICJmYWlsLWFzeW5jIiwKKwkJIi0tZXJy b3IiID0+ICJhc3luYyBlcnJvciBtZXNzYWdlIiwKKwldLAorCWV4cGVjdGVkX3N0ZGVyciA9Pgor CSAgcXIvdXNlci1kZWZpbmVkIE9BdXRoIGZsb3cgZmFpbGVkOiBhc3luYyBlcnJvciBtZXNzYWdl Lyk7CisKIGRvbmVfdGVzdGluZygpOwotLSAKMi4zNC4xCgo= --00000000000032285b064bd372e9 Content-Type: application/octet-stream; name="v4-0004-libpq-oauth-Use-the-PGoauthBearerRequestV2-API.patch" Content-Disposition: attachment; filename="v4-0004-libpq-oauth-Use-the-PGoauthBearerRequestV2-API.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mm5arq9v4 RnJvbSAzZWMxOTMzZjZkNGQ4MTdjMDNlNGU0YmIyNDMzM2E2ZmM5NDk5MWM2IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBKYWNvYiBDaGFtcGlvbiA8amFjb2IuY2hhbXBpb25AZW50ZXJw cmlzZWRiLmNvbT4KRGF0ZTogVGh1LCAyMyBPY3QgMjAyNSAxMjoyNDoyMCAtMDcwMApTdWJqZWN0 OiBbUEFUQ0ggdjQgNC82XSBsaWJwcS1vYXV0aDogVXNlIHRoZSBQR29hdXRoQmVhcmVyUmVxdWVz dFYyIEFQSQoKU3dpdGNoIHRoZSBwcml2YXRlIGxpYnBxLW9hdXRoIEFCSSB0byB0aGUgcHVibGlj IFBHb2F1dGhCZWFyZXJSZXF1ZXN0VjIKQVBJLiBBIGh1Z2UgYW1vdW50IG9mIGdsdWUgY29kZSBj YW4gYmUgcmVtb3ZlZCBhcyBwYXJ0IG9mIHRoaXMsIGFuZCBzZXZlcmFsCmNvZGUgcGF0aHMgY2Fu IGJlIGRlZHVwbGljYXRlZC4gQWRkaXRpb25hbGx5LCB0aGUgc2hhcmVkIGxpYnJhcnkgbm8KbG9u Z2VyIG5lZWRzIHRvIGNoYW5nZSBpdHMgbmFtZSBmb3IgZXZlcnkgbWFqb3IgcmVsZWFzZTsgaXQn cyBub3cganVzdAoibGlicHEtb2F1dGguc28iLgoKUmV2aWV3ZWQtYnk6IENoYW8gTGkgPGxpLmV2 YW4uY2hhb0BnbWFpbC5jb20+ClJldmlld2VkLWJ5OiBac29sdCBQYXJyYWdpIDx6c29sdC5wYXJy YWdpQHBlcmNvbmEuY29tPgpEaXNjdXNzaW9uOiBodHRwczovL3Bvc3Rnci5lcy9tL0NBT1ltaSUy Qm1yR2clMkJuX1gyTU9MZ2VXY2ozdl9NMDBnUjh1el9EN21NOHolM0RkWDFKWVZiZyU0MG1haWwu Z21haWwuY29tCi0tLQogc3JjL2ludGVyZmFjZXMvbGlicHEtb2F1dGgvUkVBRE1FICAgICAgICB8 ICA2NyArKy0tLQogc3JjL2ludGVyZmFjZXMvbGlicHEtb2F1dGgvZXhwb3J0cy50eHQgICB8ICAg MyArLQogc3JjL2ludGVyZmFjZXMvbGlicHEtb2F1dGgvbWVzb24uYnVpbGQgICB8ICAgNCArLQog c3JjL2ludGVyZmFjZXMvbGlicHEtb2F1dGgvTWFrZWZpbGUgICAgICB8ICAgOSArLQogc3JjL2lu dGVyZmFjZXMvbGlicHEtb2F1dGgvb2F1dGgtY3VybC5oICB8ICAgNiArLQogc3JjL2ludGVyZmFj ZXMvbGlicHEtb2F1dGgvb2F1dGgtdXRpbHMuaCB8ICA0MyArLS0KIHNyYy9pbnRlcmZhY2VzL2xp YnBxL2ZlLWF1dGgtb2F1dGguaCAgICAgfCAgIDcgKy0KIHNyYy9pbnRlcmZhY2VzL2xpYnBxLW9h dXRoL29hdXRoLWN1cmwuYyAgfCAzMzYgKysrKysrKysrKysrKystLS0tLS0tLS0KIHNyYy9pbnRl cmZhY2VzL2xpYnBxLW9hdXRoL29hdXRoLXV0aWxzLmMgfCAgNzcgKy0tLS0tCiBzcmMvaW50ZXJm YWNlcy9saWJwcS9mZS1hdXRoLW9hdXRoLmMgICAgIHwgMTk4ICsrKysrKystLS0tLS0KIDEwIGZp bGVzIGNoYW5nZWQsIDMzNCBpbnNlcnRpb25zKCspLCA0MTYgZGVsZXRpb25zKC0pCgpkaWZmIC0t Z2l0IGEvc3JjL2ludGVyZmFjZXMvbGlicHEtb2F1dGgvUkVBRE1FIGIvc3JjL2ludGVyZmFjZXMv bGlicHEtb2F1dGgvUkVBRE1FCmluZGV4IDU1Mzk2MmQ2NDRlLi5hMjdhODIzOGQ0YiAxMDA2NDQK LS0tIGEvc3JjL2ludGVyZmFjZXMvbGlicHEtb2F1dGgvUkVBRE1FCisrKyBiL3NyYy9pbnRlcmZh Y2VzL2xpYnBxLW9hdXRoL1JFQURNRQpAQCAtMTAsNDggKzEwLDMzIEBAIHJlc3VsdHMgaW4gYSBm YWlsZWQgY29ubmVjdGlvbi4KIAogPSBMb2FkLVRpbWUgQUJJID0KIAotVGhpcyBtb2R1bGUgQUJJ IGlzIGFuIGludGVybmFsIGltcGxlbWVudGF0aW9uIGRldGFpbCwgc28gaXQncyBzdWJqZWN0IHRv IGNoYW5nZQotYWNyb3NzIG1ham9yIHJlbGVhc2VzOyB0aGUgbmFtZSBvZiB0aGUgbW9kdWxlIChs aWJwcS1vYXV0aC1NQUpPUikgcmVmbGVjdHMgdGhpcy4KLVRoZSBtb2R1bGUgZXhwb3J0cyB0aGUg Zm9sbG93aW5nIHN5bWJvbHM6Ci0KLS0gUG9zdGdyZXNQb2xsaW5nU3RhdHVzVHlwZSBwZ19mZV9y dW5fb2F1dGhfZmxvdyhQR2Nvbm4gKmNvbm4pOwotLSB2b2lkIHBnX2ZlX2NsZWFudXBfb2F1dGhf ZmxvdyhQR2Nvbm4gKmNvbm4pOwotCi1wZ19mZV9ydW5fb2F1dGhfZmxvdyBhbmQgcGdfZmVfY2xl YW51cF9vYXV0aF9mbG93IGFyZSBpbXBsZW1lbnRhdGlvbnMgb2YKLWNvbm4tPmFzeW5jX2F1dGgg YW5kIGNvbm4tPmNsZWFudXBfYXN5bmNfYXV0aCwgcmVzcGVjdGl2ZWx5LgotCi1BdCB0aGUgbW9t ZW50LCBwZ19mZV9ydW5fb2F1dGhfZmxvdygpIHJlbGllcyBvbiBsaWJwcSdzIHBnX2dfdGhyZWFk bG9jayBhbmQKLWxpYnBxX2dldHRleHQoKSwgd2hpY2ggbXVzdCBiZSBpbmplY3RlZCBieSBsaWJw cSB1c2luZyB0aGlzIGluaXRpYWxpemF0aW9uCi1mdW5jdGlvbiBiZWZvcmUgdGhlIGZsb3cgaXMg cnVuOgotCi0tIHZvaWQgbGlicHFfb2F1dGhfaW5pdChwZ3RocmVhZGxvY2tfdCB0aHJlYWRsb2Nr LAotCQkJCQkJbGlicHFfZ2V0dGV4dF9mdW5jIGdldHRleHRfaW1wbCwKLQkJCQkJCWNvbm5fZXJy b3JNZXNzYWdlX2Z1bmMgZXJybXNnX2ltcGwsCi0JCQkJCQljb25uX29hdXRoX2NsaWVudF9pZF9m dW5jIGNsaWVudGlkX2ltcGwsCi0JCQkJCQljb25uX29hdXRoX2NsaWVudF9zZWNyZXRfZnVuYyBj bGllbnRzZWNyZXRfaW1wbCwKLQkJCQkJCWNvbm5fb2F1dGhfZGlzY292ZXJ5X3VyaV9mdW5jIGRp c2NvdmVyeXVyaV9pbXBsLAotCQkJCQkJY29ubl9vYXV0aF9pc3N1ZXJfaWRfZnVuYyBpc3N1ZXJp ZF9pbXBsLAotCQkJCQkJY29ubl9vYXV0aF9zY29wZV9mdW5jIHNjb3BlX2ltcGwsCi0JCQkJCQlj b25uX3Nhc2xfc3RhdGVfZnVuYyBzYXNsc3RhdGVfaW1wbCwKLQkJCQkJCXNldF9jb25uX2FsdHNv Y2tfZnVuYyBzZXRhbHRzb2NrX2ltcGwsCi0JCQkJCQlzZXRfY29ubl9vYXV0aF90b2tlbl9mdW5j IHNldHRva2VuX2ltcGwpOwotCi1JdCBhbHNvIHJlbGllcyBvbiBhY2Nlc3MgdG8gc2V2ZXJhbCBt ZW1iZXJzIG9mIHRoZSBQR2Nvbm4gc3RydWN0LiBOb3Qgb25seSBjYW4KLXRoZXNlIGNoYW5nZSBw b3NpdGlvbnMgYWNyb3NzIG1pbm9yIHZlcnNpb25zLCBidXQgdGhlIG9mZnNldHMgYXJlbid0IG5l Y2Vzc2FyaWx5Ci1zdGFibGUgd2l0aGluIGEgc2luZ2xlIG1pbm9yIHJlbGVhc2UgKGNvbm4tPmVy cm9yTWVzc2FnZSwgZm9yIGluc3RhbmNlLCBjYW4KLWNoYW5nZSBvZmZzZXRzIGRlcGVuZGluZyBv biBjb25maWd1cmUtdGltZSBvcHRpb25zKS4gVGhlcmVmb3JlIHRoZSBuZWNlc3NhcnkKLWFjY2Vz c29ycyAobmFtZWQgY29ubl8qKSBhbmQgbXV0YXRvcnMgKHNldF9jb25uXyopIGFyZSBpbmplY3Rl ZCBoZXJlLiBXaXRoIHRoaXMKLWFwcHJvYWNoLCB3ZSBjYW4gc2FmZWx5IHNlYXJjaCB0aGUgc3Rh bmRhcmQgZGxvcGVuKCkgcGF0aHMgKGUuZy4gUlBBVEgsCi1MRF9MSUJSQVJZX1BBVEgsIHRoZSBT TyBjYWNoZSkgZm9yIGFuIGltcGxlbWVudGF0aW9uIG1vZHVsZSB0byB1c2UsIGV2ZW4gaWYgdGhh dAotbW9kdWxlIHdhc24ndCBjb21waWxlZCBhdCB0aGUgc2FtZSB0aW1lIGFzIGxpYnBxIC0tIHdo aWNoIGJlY29tZXMgZXNwZWNpYWxseQotaW1wb3J0YW50IGR1cmluZyAibGl2ZSB1cGdyYWRlIiBz aXR1YXRpb25zIHdoZXJlIGEgcnVubmluZyBsaWJwcSBhcHBsaWNhdGlvbiBoYXMKLXRoZSBsaWJw cS1vYXV0aCBtb2R1bGUgdXBkYXRlZCBvdXQgZnJvbSB1bmRlciBpdCBiZWZvcmUgaXQncyBmaXJz dCBsb2FkZWQgZnJvbQotZGlzay4KK0FzIG9mIHYxOSwgdGhpcyBtb2R1bGUgQUJJIGlzIHB1Ymxp YyBhbmQgY2Fubm90IGNoYW5nZSBpbmNvbXBhdGlibHkgd2l0aG91dCBhbHNvCitjaGFuZ2luZyB0 aGUgZW50cnkgcG9pbnRzLiBCb3RoIGxpYnBxIGFuZCBsaWJwcS1vYXV0aCBtdXN0IGdyYWNlZnVs bHkgaGFuZGxlCitzaXR1YXRpb25zIHdoZXJlIHRoZSBvdGhlciBsaWJyYXJ5IGlzIG9mIGEgZGlm ZmVyZW50IHJlbGVhc2UgdmVyc2lvbiwgcGFzdCBvcgorZnV0dXJlLCBzaW5jZSB1cGdyYWRlcyB0 byB0aGUgbGlicmFyaWVzIG1heSBoYXBwZW4gaW4gZWl0aGVyIG9yZGVyLgorCisoRG9uJ3QgYXNz dW1lIHRoYXQgcGFja2FnZSB2ZXJzaW9uIGRlcGVuZGVuY2llcyBmcm9tIGxpYnBxLW9hdXRoIHRv IGxpYnBxIHdpbGwKK3NpbXBsaWZ5IHRoZSBzaXR1YXRpb24hIFNpbmNlIGxpYnBxIGRlbGF5LWxv YWRzIGxpYnBxLW9hdXRoLCB3ZSBzdGlsbCBoYXZlIHRvCitoYW5kbGUgY2FzZXMgd2hlcmUgYSBs b25nLXJ1bm5pbmcgY2xpZW50IGFwcGxpY2F0aW9uIGhhcyBhIGxpYnBxIHRoYXQncyBvbGRlcgor dGhhbiBhIG5ld2x5IHVwZ3JhZGVkIHBsdWdpbi4pCisKK1RoZSBtb2R1bGUgZXhwb3J0cyB0aGUg Zm9sbG93aW5nIHN5bWJvbDoKKworLSBpbnQgcGdfc3RhcnRfb2F1dGhiZWFyZXIoUEdjb25uICpj b25uLCBQR29hdXRoQmVhcmVyUmVxdWVzdFYyICpyZXF1ZXN0KTsKKworVGhlIG1vZHVsZSB0aGVu IGJlaGF2ZXMgYXMgaWYgaXQgaGFkIHJlY2VpdmVkIGEgUFFBVVRIREFUQV9PQVVUSF9CRUFSRVJf VE9LRU5fVjIKK3JlcXVlc3QgdmlhIHRoZSBQUWF1dGhEYXRhSG9vayBBUEksIGFuZCBpdCBlaXRo ZXIgZmlsbHMgaW4gYW4gZXhpc3RpbmcgdG9rZW4gb3IKK3BvcHVsYXRlcyB0aGUgbmVjZXNzYXJ5 IGNhbGxiYWNrcyBmb3IgYSB0b2tlbiB0byBiZSBvYnRhaW5lZCBhc3luY2hyb25vdXNseS4KKyhT ZWUgdGhlIGRvY3VtZW50YXRpb24gZm9yIFBHb2F1dGhCZWFyZXJSZXF1ZXN0LikgVGhlIGZ1bmN0 aW9uIHJldHVybnMgemVybyBvbgorc3VjY2VzcyBhbmQgbm9uemVybyBvbiBmYWlsdXJlLgorCitB ZGRpdGlvbmFsbHksIGxpYnBxLW9hdXRoIHJlbGllcyBvbiBsaWJwcSdzIGxpYnBxX2dldHRleHQo KSwgd2hpY2ggbXVzdCBiZQoraW5qZWN0ZWQgYnkgbGlicHEgdXNpbmcgdGhpcyBpbml0aWFsaXph dGlvbiBmdW5jdGlvbiBiZWZvcmUgdGhlIGZsb3cgaXMgcnVuOgorCistIHZvaWQgbGlicHFfb2F1 dGhfaW5pdChsaWJwcV9nZXR0ZXh0X2Z1bmMgZ2V0dGV4dF9pbXBsKTsKIAogPSBTdGF0aWMgQnVp bGQgPQogCiBUaGUgc3RhdGljIGxpYnJhcnkgbGlicHEuYSBkb2VzIG5vdCBwZXJmb3JtIGFueSBk eW5hbWljIGxvYWRpbmcuIElmIHRoZSBidWlsdGluCi1mbG93IGlzIGVuYWJsZWQsIHRoZSBhcHBs aWNhdGlvbiBpcyBleHBlY3RlZCB0byBsaW5rIGFnYWluc3QgbGlicHEtb2F1dGguYQotZGlyZWN0 bHkgdG8gcHJvdmlkZSB0aGUgbmVjZXNzYXJ5IHN5bWJvbHMuIChsaWJwcS5hIGFuZCBsaWJwcS1v YXV0aC5hIG11c3QgYmUKLXBhcnQgb2YgdGhlIHNhbWUgYnVpbGQuIFVubGlrZSB0aGUgZHluYW1p YyBtb2R1bGUsIHRoZXJlIGFyZSBubyB0cmFuc2xhdGlvbgotc2hpbXMgcHJvdmlkZWQuKQorZmxv dyBpcyBlbmFibGVkLCB0aGUgYXBwbGljYXRpb24gaXMgZXhwZWN0ZWQgdG8gbGluayBhZ2FpbnN0 IGxpYnBxLW9hdXRoLmEgdG8KK3Byb3ZpZGUgdGhlIG5lY2Vzc2FyeSBzeW1ib2wsIG9yIGVsc2Ug aW1wbGVtZW50IHBnX3N0YXJ0X29hdXRoYmVhcmVyKCkgaXRzZWxmLgpkaWZmIC0tZ2l0IGEvc3Jj L2ludGVyZmFjZXMvbGlicHEtb2F1dGgvZXhwb3J0cy50eHQgYi9zcmMvaW50ZXJmYWNlcy9saWJw cS1vYXV0aC9leHBvcnRzLnR4dAppbmRleCA2ODkxYTgzZGJmOS4uN2JjMTJiODYwZDcgMTAwNjQ0 Ci0tLSBhL3NyYy9pbnRlcmZhY2VzL2xpYnBxLW9hdXRoL2V4cG9ydHMudHh0CisrKyBiL3NyYy9p bnRlcmZhY2VzL2xpYnBxLW9hdXRoL2V4cG9ydHMudHh0CkBAIC0xLDQgKzEsMyBAQAogIyBzcmMv aW50ZXJmYWNlcy9saWJwcS1vYXV0aC9leHBvcnRzLnR4dAogbGlicHFfb2F1dGhfaW5pdCAgICAg ICAgICAxCi1wZ19mZV9ydW5fb2F1dGhfZmxvdyAgICAgIDIKLXBnX2ZlX2NsZWFudXBfb2F1dGhf ZmxvdyAgMworcGdfc3RhcnRfb2F1dGhiZWFyZXIgICAgICAyCmRpZmYgLS1naXQgYS9zcmMvaW50 ZXJmYWNlcy9saWJwcS1vYXV0aC9tZXNvbi5idWlsZCBiL3NyYy9pbnRlcmZhY2VzL2xpYnBxLW9h dXRoL21lc29uLmJ1aWxkCmluZGV4IDI3YWNhMmJjMzI0Li42ODVhMDBhY2Y3YSAxMDA2NDQKLS0t IGEvc3JjL2ludGVyZmFjZXMvbGlicHEtb2F1dGgvbWVzb24uYnVpbGQKKysrIGIvc3JjL2ludGVy ZmFjZXMvbGlicHEtb2F1dGgvbWVzb24uYnVpbGQKQEAgLTM4LDEwICszOCw4IEBAIGVuZGlmCiAK ICMgVGhpcyBpcyBhbiBpbnRlcm5hbCBtb2R1bGU7IHdlIGRvbid0IHdhbnQgYW4gU09OQU1FIGFu ZCB0aGVyZWZvcmUgZG8gbm90IHNldAogIyBTT19NQUpPUl9WRVJTSU9OLgotbGlicHFfb2F1dGhf bmFtZSA9ICdsaWJwcS1vYXV0aC1AMEAnLmZvcm1hdChwZ192ZXJzaW9uX21ham9yKQotCiBpZiBi dWlsZF9zaGFyZWRfbGliCi1saWJwcV9vYXV0aF9zbyA9IHNoYXJlZF9tb2R1bGUobGlicHFfb2F1 dGhfbmFtZSwKK2xpYnBxX29hdXRoX3NvID0gc2hhcmVkX21vZHVsZSgnbGlicHEtb2F1dGgnLAog ICBsaWJwcV9vYXV0aF9zb3VyY2VzICsgbGlicHFfb2F1dGhfc29fc291cmNlcywKICAgaW5jbHVk ZV9kaXJlY3RvcmllczogW2xpYnBxX29hdXRoX2luYywgcG9zdGdyZXNfaW5jXSwKICAgY19hcmdz OiBsaWJwcV9vYXV0aF9zb19jX2FyZ3MsCmRpZmYgLS1naXQgYS9zcmMvaW50ZXJmYWNlcy9saWJw cS1vYXV0aC9NYWtlZmlsZSBiL3NyYy9pbnRlcmZhY2VzL2xpYnBxLW9hdXRoL01ha2VmaWxlCmlu ZGV4IGE1ZjJkNjVmY2FkLi5lOTA0ODI1NjZiMSAxMDA2NDQKLS0tIGEvc3JjL2ludGVyZmFjZXMv bGlicHEtb2F1dGgvTWFrZWZpbGUKKysrIGIvc3JjL2ludGVyZmFjZXMvbGlicHEtb2F1dGgvTWFr ZWZpbGUKQEAgLTE2LDEzICsxNiwxMCBAQCBpbmNsdWRlICQodG9wX2J1aWxkZGlyKS9zcmMvTWFr ZWZpbGUuZ2xvYmFsCiBQR0ZJTEVERVNDID0gImxpYnBxLW9hdXRoIC0gZGV2aWNlIGF1dGhvcml6 YXRpb24gT0F1dGggc3VwcG9ydCIKIAogIyBUaGlzIGlzIGFuIGludGVybmFsIG1vZHVsZTsgd2Ug ZG9uJ3Qgd2FudCBhbiBTT05BTUUgYW5kIHRoZXJlZm9yZSBkbyBub3Qgc2V0Ci0jIFNPX01BSk9S X1ZFUlNJT04uCi1OQU1FID0gcHEtb2F1dGgtJChNQUpPUlZFUlNJT04pCi0KLSMgRm9yY2UgdGhl IG5hbWUgImxpYnBxLW9hdXRoIiBmb3IgYm90aCB0aGUgc3RhdGljIGFuZCBzaGFyZWQgbGlicmFy aWVzLiBUaGUKLSMgc3RhdGljbGliIGRvZXNuJ3QgbmVlZCB2ZXJzaW9uIGluZm9ybWF0aW9uIGlu IGl0cyBuYW1lLgorIyBTT19NQUpPUl9WRVJTSU9OLiBUaGlzIHJlcXVpcmVzIGFuIGV4cGxpY2l0 IG92ZXJyaWRlIGZvciB0aGUgc2hhcmVkIGxpYnJhcnkKKyMgbmFtZS4KK05BTUUgPSBwcS1vYXV0 aAogb3ZlcnJpZGUgc2hsaWIgOj0gbGliJChOQU1FKSQoRExTVUZGSVgpCi1vdmVycmlkZSBzdGxp YiA6PSBsaWJwcS1vYXV0aC5hCiAKIG92ZXJyaWRlIENQUEZMQUdTIDo9IC1JJChsaWJwcV9zcmNk aXIpIC1JJCh0b3BfYnVpbGRkaXIpL3NyYy9wb3J0ICQoQ1BQRkxBR1MpICQoTElCQ1VSTF9DUFBG TEFHUykKIG92ZXJyaWRlIENGTEFHUyArPSAkKFBUSFJFQURfQ0ZMQUdTKQpkaWZmIC0tZ2l0IGEv c3JjL2ludGVyZmFjZXMvbGlicHEtb2F1dGgvb2F1dGgtY3VybC5oIGIvc3JjL2ludGVyZmFjZXMv bGlicHEtb2F1dGgvb2F1dGgtY3VybC5oCmluZGV4IDY4NmU3YjRkZjNmLi4xZDRkZDc2NjIxNyAx MDA2NDQKLS0tIGEvc3JjL2ludGVyZmFjZXMvbGlicHEtb2F1dGgvb2F1dGgtY3VybC5oCisrKyBi L3NyYy9pbnRlcmZhY2VzL2xpYnBxLW9hdXRoL29hdXRoLWN1cmwuaApAQCAtMTcsOCArMTcsOCBA QAogCiAjaW5jbHVkZSAibGlicHEtZmUuaCIKIAotLyogRXhwb3J0ZWQgYXN5bmMtYXV0aCBjYWxs YmFja3MuICovCi1leHRlcm4gUEdETExFWFBPUlQgUG9zdGdyZXNQb2xsaW5nU3RhdHVzVHlwZSBw Z19mZV9ydW5fb2F1dGhfZmxvdyhQR2Nvbm4gKmNvbm4pOwotZXh0ZXJuIFBHRExMRVhQT1JUIHZv aWQgcGdfZmVfY2xlYW51cF9vYXV0aF9mbG93KFBHY29ubiAqY29ubik7CisvKiBFeHBvcnRlZCBm bG93IGNhbGxiYWNrLiAqLworZXh0ZXJuIFBHRExMRVhQT1JUIGludCBwZ19zdGFydF9vYXV0aGJl YXJlcihQR2Nvbm4gKmNvbm4sCisJCQkJCQkJCQkJCVBHb2F1dGhCZWFyZXJSZXF1ZXN0VjIgKnJl cXVlc3QpOwogCiAjZW5kaWYJCQkJCQkJLyogT0FVVEhfQ1VSTF9IICovCmRpZmYgLS1naXQgYS9z cmMvaW50ZXJmYWNlcy9saWJwcS1vYXV0aC9vYXV0aC11dGlscy5oIGIvc3JjL2ludGVyZmFjZXMv bGlicHEtb2F1dGgvb2F1dGgtdXRpbHMuaAppbmRleCA5ZjRkNWI2OTJkMi4uMjkzZTk5MzY5ODkg MTAwNjQ0Ci0tLSBhL3NyYy9pbnRlcmZhY2VzL2xpYnBxLW9hdXRoL29hdXRoLXV0aWxzLmgKKysr IGIvc3JjL2ludGVyZmFjZXMvbGlicHEtb2F1dGgvb2F1dGgtdXRpbHMuaApAQCAtMTUsNTMgKzE1 LDEzIEBACiAjaWZuZGVmIE9BVVRIX1VUSUxTX0gKICNkZWZpbmUgT0FVVEhfVVRJTFNfSAogCi0j aW5jbHVkZSAiZmUtYXV0aC1vYXV0aC5oIgogI2luY2x1ZGUgImxpYnBxLWZlLmgiCiAjaW5jbHVk ZSAicHFleHBidWZmZXIuaCIKIAotLyoKLSAqIEEgYmFuayBvZiBjYWxsYmFja3MgdG8gc2FmZWx5 IGFjY2VzcyBtZW1iZXJzIG9mIFBHY29ubiwgd2hpY2ggYXJlIGFsbCBwYXNzZWQKLSAqIHRvIGxp YnBxX29hdXRoX2luaXQoKSBieSBsaWJwcS4KLSAqCi0gKiBLZWVwIHRoZXNlIGFsaWduZWQgd2l0 aCB0aGUgZGVmaW5pdGlvbnMgaW4gZmUtYXV0aC1vYXV0aC5jIGFzIHdlbGwgYXMgdGhlCi0gKiBz dGF0aWMgZGVjbGFyYXRpb25zIGluIG9hdXRoLWN1cmwuYy4KLSAqLwotI2RlZmluZSBERUNMQVJF X0dFVFRFUihUWVBFLCBNRU1CRVIpIFwKLQl0eXBlZGVmIFRZUEUgKCpjb25uXyAjIyBNRU1CRVIg IyMgX2Z1bmMpIChQR2Nvbm4gKmNvbm4pOyBcCi0JZXh0ZXJuIGNvbm5fICMjIE1FTUJFUiAjIyBf ZnVuYyBjb25uXyAjIyBNRU1CRVI7Ci0KLSNkZWZpbmUgREVDTEFSRV9TRVRURVIoVFlQRSwgTUVN QkVSKSBcCi0JdHlwZWRlZiB2b2lkICgqc2V0X2Nvbm5fICMjIE1FTUJFUiAjIyBfZnVuYykgKFBH Y29ubiAqY29ubiwgVFlQRSB2YWwpOyBcCi0JZXh0ZXJuIHNldF9jb25uXyAjIyBNRU1CRVIgIyMg X2Z1bmMgc2V0X2Nvbm5fICMjIE1FTUJFUjsKLQotREVDTEFSRV9HRVRURVIoUFFFeHBCdWZmZXIs IGVycm9yTWVzc2FnZSk7Ci1ERUNMQVJFX0dFVFRFUihjaGFyICosIG9hdXRoX2NsaWVudF9pZCk7 Ci1ERUNMQVJFX0dFVFRFUihjaGFyICosIG9hdXRoX2NsaWVudF9zZWNyZXQpOwotREVDTEFSRV9H RVRURVIoY2hhciAqLCBvYXV0aF9kaXNjb3ZlcnlfdXJpKTsKLURFQ0xBUkVfR0VUVEVSKGNoYXIg Kiwgb2F1dGhfaXNzdWVyX2lkKTsKLURFQ0xBUkVfR0VUVEVSKGNoYXIgKiwgb2F1dGhfc2NvcGUp OwotREVDTEFSRV9HRVRURVIoZmVfb2F1dGhfc3RhdGUgKiwgc2FzbF9zdGF0ZSk7Ci0KLURFQ0xB UkVfU0VUVEVSKHBnc29ja2V0LCBhbHRzb2NrKTsKLURFQ0xBUkVfU0VUVEVSKGNoYXIgKiwgb2F1 dGhfdG9rZW4pOwotCi0jdW5kZWYgREVDTEFSRV9HRVRURVIKLSN1bmRlZiBERUNMQVJFX1NFVFRF UgotCiB0eXBlZGVmIGNoYXIgKigqbGlicHFfZ2V0dGV4dF9mdW5jKSAoY29uc3QgY2hhciAqbXNn aWQpOwogCiAvKiBJbml0aWFsaXplcyBsaWJwcS1vYXV0aC4gKi8KLWV4dGVybiBQR0RMTEVYUE9S VCB2b2lkIGxpYnBxX29hdXRoX2luaXQocGd0aHJlYWRsb2NrX3QgdGhyZWFkbG9jaywKLQkJCQkJ CQkJCQkgbGlicHFfZ2V0dGV4dF9mdW5jIGdldHRleHRfaW1wbCwKLQkJCQkJCQkJCQkgY29ubl9l cnJvck1lc3NhZ2VfZnVuYyBlcnJtc2dfaW1wbCwKLQkJCQkJCQkJCQkgY29ubl9vYXV0aF9jbGll bnRfaWRfZnVuYyBjbGllbnRpZF9pbXBsLAotCQkJCQkJCQkJCSBjb25uX29hdXRoX2NsaWVudF9z ZWNyZXRfZnVuYyBjbGllbnRzZWNyZXRfaW1wbCwKLQkJCQkJCQkJCQkgY29ubl9vYXV0aF9kaXNj b3ZlcnlfdXJpX2Z1bmMgZGlzY292ZXJ5dXJpX2ltcGwsCi0JCQkJCQkJCQkJIGNvbm5fb2F1dGhf aXNzdWVyX2lkX2Z1bmMgaXNzdWVyaWRfaW1wbCwKLQkJCQkJCQkJCQkgY29ubl9vYXV0aF9zY29w ZV9mdW5jIHNjb3BlX2ltcGwsCi0JCQkJCQkJCQkJIGNvbm5fc2FzbF9zdGF0ZV9mdW5jIHNhc2xz dGF0ZV9pbXBsLAotCQkJCQkJCQkJCSBzZXRfY29ubl9hbHRzb2NrX2Z1bmMgc2V0YWx0c29ja19p bXBsLAotCQkJCQkJCQkJCSBzZXRfY29ubl9vYXV0aF90b2tlbl9mdW5jIHNldHRva2VuX2ltcGwp OworZXh0ZXJuIFBHRExMRVhQT1JUIHZvaWQgbGlicHFfb2F1dGhfaW5pdChsaWJwcV9nZXR0ZXh0 X2Z1bmMgZ2V0dGV4dF9pbXBsKTsKIAogLyoKICAqIER1cGxpY2F0ZWQgQVBJcywgY29waWVkIGZy b20gbGlicHEgKHByaW1hcmlseSBsaWJwcS1pbnQuaCwgd2hpY2ggd2UgY2Fubm90CkBAIC03NSw3 ICszNSw2IEBAIHR5cGVkZWYgZW51bQogCVBHX0JPT0xfTk8JCQkJCS8qIE5vIChmYWxzZSkgKi8K IH0gUEdUZXJuYXJ5Qm9vbDsKIAotZXh0ZXJuIHZvaWQgbGlicHFfYXBwZW5kX2Nvbm5fZXJyb3Io UEdjb25uICpjb25uLCBjb25zdCBjaGFyICpmbXQsLi4uKSBwZ19hdHRyaWJ1dGVfcHJpbnRmKDIs IDMpOwogZXh0ZXJuIGJvb2wgb2F1dGhfdW5zYWZlX2RlYnVnZ2luZ19lbmFibGVkKHZvaWQpOwog ZXh0ZXJuIGludAlwcV9ibG9ja19zaWdwaXBlKHNpZ3NldF90ICpvc2lnc2V0LCBib29sICpzaWdw aXBlX3BlbmRpbmcpOwogZXh0ZXJuIHZvaWQgcHFfcmVzZXRfc2lncGlwZShzaWdzZXRfdCAqb3Np Z3NldCwgYm9vbCBzaWdwaXBlX3BlbmRpbmcsIGJvb2wgZ290X2VwaXBlKTsKZGlmZiAtLWdpdCBh L3NyYy9pbnRlcmZhY2VzL2xpYnBxL2ZlLWF1dGgtb2F1dGguaCBiL3NyYy9pbnRlcmZhY2VzL2xp YnBxL2ZlLWF1dGgtb2F1dGguaAppbmRleCA1YzhhMjRiNzZmYS4uNTExMjg0NjE0ZjcgMTAwNjQ0 Ci0tLSBhL3NyYy9pbnRlcmZhY2VzL2xpYnBxL2ZlLWF1dGgtb2F1dGguaAorKysgYi9zcmMvaW50 ZXJmYWNlcy9saWJwcS9mZS1hdXRoLW9hdXRoLmgKQEAgLTI3LDExICsyNyw2IEBAIGVudW0gZmVf b2F1dGhfc3RlcAogCUZFX09BVVRIX1NFUlZFUl9FUlJPUiwKIH07CiAKLS8qCi0gKiBUaGlzIHN0 cnVjdCBpcyBleHBvcnRlZCB0byB0aGUgbGlicHEtb2F1dGggbW9kdWxlLiBJZiBjaGFuZ2VzIGFy ZSBuZWVkZWQKLSAqIGR1cmluZyBiYWNrcG9ydHMgdG8gc3RhYmxlIGJyYW5jaGVzLCBwbGVhc2Ug a2VlcCBBQkkgY29tcGF0aWJpbGl0eSAobm8KLSAqIGNoYW5nZXMgdG8gZXhpc3RpbmcgbWVtYmVy cywgYWRkIG5ldyBtZW1iZXJzIGF0IHRoZSBlbmQsIGV0Yy4pLgotICovCiB0eXBlZGVmIHN0cnVj dAogewogCWVudW0gZmVfb2F1dGhfc3RlcCBzdGVwOwpAQCAtMzksMTIgKzM0LDEyIEBAIHR5cGVk ZWYgc3RydWN0CiAJUEdjb25uCSAgICpjb25uOwogCXZvaWQJICAgKmFzeW5jX2N0eDsKIAorCWJv b2wJCWJ1aWx0aW47CiAJdm9pZAkgICAqYnVpbHRpbl9mbG93OwogfSBmZV9vYXV0aF9zdGF0ZTsK IAogZXh0ZXJuIHZvaWQgcHFDbGVhck9BdXRoVG9rZW4oUEdjb25uICpjb25uKTsKIGV4dGVybiBi b29sIG9hdXRoX3Vuc2FmZV9kZWJ1Z2dpbmdfZW5hYmxlZCh2b2lkKTsKLWV4dGVybiBib29sIHVz ZV9idWlsdGluX2Zsb3coUEdjb25uICpjb25uLCBmZV9vYXV0aF9zdGF0ZSAqc3RhdGUpOwogCiAv KiBNZWNoYW5pc21zIGluIGZlLWF1dGgtb2F1dGguYyAqLwogZXh0ZXJuIGNvbnN0IHBnX2ZlX3Nh c2xfbWVjaCBwZ19vYXV0aF9tZWNoOwpkaWZmIC0tZ2l0IGEvc3JjL2ludGVyZmFjZXMvbGlicHEt b2F1dGgvb2F1dGgtY3VybC5jIGIvc3JjL2ludGVyZmFjZXMvbGlicHEtb2F1dGgvb2F1dGgtY3Vy bC5jCmluZGV4IDJjMTQ3Zjk4ZDBkLi4wNTJlY2QzMmRhMiAxMDA2NDQKLS0tIGEvc3JjL2ludGVy ZmFjZXMvbGlicHEtb2F1dGgvb2F1dGgtY3VybC5jCisrKyBiL3NyYy9pbnRlcmZhY2VzL2xpYnBx LW9hdXRoL29hdXRoLWN1cmwuYwpAQCAtMjksNyArMjksNiBAQAogI2VuZGlmCiAKICNpbmNsdWRl ICJjb21tb24vanNvbmFwaS5oIgotI2luY2x1ZGUgImZlLWF1dGgtb2F1dGguaCIKICNpbmNsdWRl ICJtYi9wZ193Y2hhci5oIgogI2luY2x1ZGUgIm9hdXRoLWN1cmwuaCIKIApAQCAtNDQsMjMgKzQz LDEwIEBACiAKICNlbHNlCQkJCQkJCS8qICFVU0VfRFlOQU1JQ19PQVVUSCAqLwogCi0vKgotICog U3RhdGljIGJ1aWxkcyBtYXkgcmVseSBvbiBQR2Nvbm4gb2Zmc2V0cyBkaXJlY3RseS4gS2VlcCB0 aGVzZSBhbGlnbmVkIHdpdGgKLSAqIHRoZSBiYW5rIG9mIGNhbGxiYWNrcyBpbiBvYXV0aC11dGls cy5oLgotICovCisvKiBTdGF0aWMgYnVpbGRzIG1heSBtYWtlIHVzZSBvZiBsaWJwcSBpbnRlcm5h bHMgZGlyZWN0bHkuICovCisjaW5jbHVkZSAiZmUtYXV0aC1vYXV0aC5oIgogI2luY2x1ZGUgImxp YnBxLWludC5oIgogCi0jZGVmaW5lIGNvbm5fZXJyb3JNZXNzYWdlKENPTk4pICgmQ09OTi0+ZXJy b3JNZXNzYWdlKQotI2RlZmluZSBjb25uX29hdXRoX2NsaWVudF9pZChDT05OKSAoQ09OTi0+b2F1 dGhfY2xpZW50X2lkKQotI2RlZmluZSBjb25uX29hdXRoX2NsaWVudF9zZWNyZXQoQ09OTikgKENP Tk4tPm9hdXRoX2NsaWVudF9zZWNyZXQpCi0jZGVmaW5lIGNvbm5fb2F1dGhfZGlzY292ZXJ5X3Vy aShDT05OKSAoQ09OTi0+b2F1dGhfZGlzY292ZXJ5X3VyaSkKLSNkZWZpbmUgY29ubl9vYXV0aF9p c3N1ZXJfaWQoQ09OTikgKENPTk4tPm9hdXRoX2lzc3Vlcl9pZCkKLSNkZWZpbmUgY29ubl9vYXV0 aF9zY29wZShDT05OKSAoQ09OTi0+b2F1dGhfc2NvcGUpCi0jZGVmaW5lIGNvbm5fc2FzbF9zdGF0 ZShDT05OKSAoQ09OTi0+c2FzbF9zdGF0ZSkKLQotI2RlZmluZSBzZXRfY29ubl9hbHRzb2NrKENP Tk4sIFZBTCkgZG8geyBDT05OLT5hbHRzb2NrID0gVkFMOyB9IHdoaWxlICgwKQotI2RlZmluZSBz ZXRfY29ubl9vYXV0aF90b2tlbihDT05OLCBWQUwpIGRvIHsgQ09OTi0+b2F1dGhfdG9rZW4gPSBW QUw7IH0gd2hpbGUgKDApCi0KICNlbmRpZgkJCQkJCQkvKiBVU0VfRFlOQU1JQ19PQVVUSCAqLwog CiAvKiBPbmUgZmluYWwgZ3VhcmRyYWlsIGFnYWluc3QgYWNjaWRlbnRhbCBpbmNsdXNpb24uLi4g Ki8KQEAgLTIyNyw2ICsyMTMsMTUgQEAgZW51bSBPQXV0aFN0ZXAKICAqLwogc3RydWN0IGFzeW5j X2N0eAogeworCS8qIHJlbGV2YW50IGNvbm5lY3Rpb24gb3B0aW9ucyBjYWNoZWQgZnJvbSB0aGUg UEdjb25uICovCisJY2hhcgkgICAqY2xpZW50X2lkOwkJLyogb2F1dGhfY2xpZW50X2lkICovCisJ Y2hhcgkgICAqY2xpZW50X3NlY3JldDsJLyogb2F1dGhfY2xpZW50X3NlY3JldCAobWF5IGJlIE5V TEwpICovCisKKwkvKiBvcHRpb25zIGNhY2hlZCBmcm9tIHRoZSBQR29hdXRoQmVhcmVyUmVxdWVz dCAod2UgZG9uJ3Qgb3duIHRoZXNlKSAqLworCWNvbnN0IGNoYXIgKmRpc2NvdmVyeV91cmk7CisJ Y29uc3QgY2hhciAqaXNzdWVyX2lkOworCWNvbnN0IGNoYXIgKnNjb3BlOworCiAJZW51bSBPQXV0 aFN0ZXAgc3RlcDsJCS8qIHdoZXJlIGFyZSB3ZSBpbiB0aGUgZmxvdz8gKi8KIAogCWludAkJCXRp bWVyZmQ7CQkvKiBkZXNjcmlwdG9yIGZvciBzaWduYWxpbmcgYXN5bmMgdGltZW91dHMgKi8KQEAg LTMzOSwyOSArMzM0LDcyIEBAIGZyZWVfYXN5bmNfY3R4KHN0cnVjdCBhc3luY19jdHggKmFjdHgp CiAJaWYgKGFjdHgtPnRpbWVyZmQgPj0gMCkKIAkJY2xvc2UoYWN0eC0+dGltZXJmZCk7CiAKKwlm cmVlKGFjdHgtPmNsaWVudF9pZCk7CisJZnJlZShhY3R4LT5jbGllbnRfc2VjcmV0KTsKKwogCWZy ZWUoYWN0eCk7CiB9CiAKIC8qCi0gKiBSZWxlYXNlIHJlc291cmNlcyB1c2VkIGZvciB0aGUgYXN5 bmNocm9ub3VzIGV4Y2hhbmdlIGFuZCBkaXNjb25uZWN0IHRoZQotICogYWx0c29jay4KLSAqCi0g KiBUaGlzIGlzIGNhbGxlZCBlaXRoZXIgYXQgdGhlIGVuZCBvZiBhIHN1Y2Nlc3NmdWwgYXV0aGVu dGljYXRpb24sIG9yIGR1cmluZwotICogcHFEcm9wQ29ubmVjdGlvbigpLCBzbyB3ZSB3b24ndCBs ZWFrIHJlc291cmNlcyBldmVuIGlmIFBRY29ubmVjdFBvbGwoKSBuZXZlcgotICogY2FsbHMgdXMg YmFjay4KKyAqIFJlbGVhc2UgcmVzb3VyY2VzIHVzZWQgZm9yIHRoZSBhc3luY2hyb25vdXMgZXhj aGFuZ2UuCiAgKi8KLXZvaWQKLXBnX2ZlX2NsZWFudXBfb2F1dGhfZmxvdyhQR2Nvbm4gKmNvbm4p CitzdGF0aWMgdm9pZAorcGdfZmVfY2xlYW51cF9vYXV0aF9mbG93KFBHY29ubiAqY29ubiwgUEdv YXV0aEJlYXJlclJlcXVlc3QgKnJlcXVlc3QpCiB7Ci0JZmVfb2F1dGhfc3RhdGUgKnN0YXRlID0g Y29ubl9zYXNsX3N0YXRlKGNvbm4pOworCXN0cnVjdCBhc3luY19jdHggKmFjdHggPSByZXF1ZXN0 LT51c2VyOworCisJLyogcmVxdWVzdC0+Y2xlYW51cCBpcyBvbmx5IHNldCBhZnRlciBhY3R4IGhh cyBiZWVuIGFsbG9jYXRlZC4gKi8KKwlBc3NlcnQoYWN0eCk7CiAKLQlpZiAoc3RhdGUtPmFzeW5j X2N0eCkKKwlmcmVlX2FzeW5jX2N0eChhY3R4KTsKKwlyZXF1ZXN0LT51c2VyID0gTlVMTDsKKwor CS8qIGxpYnBxIGhhcyBtYWRlIGl0cyBvd24gY29weSBvZiB0aGUgdG9rZW47IGNsZWFyIG91cnMg bm93LiAqLworCWlmIChyZXF1ZXN0LT50b2tlbikKIAl7Ci0JCWZyZWVfYXN5bmNfY3R4KHN0YXRl LT5hc3luY19jdHgpOwotCQlzdGF0ZS0+YXN5bmNfY3R4ID0gTlVMTDsKKwkJZXhwbGljaXRfYnpl cm8ocmVxdWVzdC0+dG9rZW4sIHN0cmxlbihyZXF1ZXN0LT50b2tlbikpOworCQlmcmVlKHJlcXVl c3QtPnRva2VuKTsKKwkJcmVxdWVzdC0+dG9rZW4gPSBOVUxMOwogCX0KK30KIAotCXNldF9jb25u X2FsdHNvY2soY29ubiwgUEdJTlZBTElEX1NPQ0tFVCk7CisvKgorICogQnVpbGRzIGFuIGVycm9y IG1lc3NhZ2UgZnJvbSBhY3R4IGFuZCBzdG9yZXMgaXQgaW4gcmVxLT5lcnJvci4gVGhlIGFsbG9j YXRpb24KKyAqIGlzIGJhY2tlZCBieSBhY3R4LT53b3JrX2RhdGEgKHdoaWNoIHdpbGwgYmUgcmVz ZXQgZmlyc3QpLgorICovCitzdGF0aWMgdm9pZAorYXBwZW5kX2FjdHhfZXJyb3IoUEdvYXV0aEJl YXJlclJlcXVlc3RWMiAqcmVxLCBzdHJ1Y3QgYXN5bmNfY3R4ICphY3R4KQoreworCVBRRXhwQnVm ZmVyIGVycmJ1ZiA9ICZhY3R4LT53b3JrX2RhdGE7CisKKwlyZXNldFBRRXhwQnVmZmVyKGVycmJ1 Zik7CisKKwkvKgorCSAqIEFzc2VtYmxlIHRoZSB0aHJlZSBwYXJ0cyBvZiBvdXIgZXJyb3I6IGNv bnRleHQsIGJvZHksIGFuZCBkZXRhaWwuIFNlZQorCSAqIGFsc28gdGhlIGRvY3VtZW50YXRpb24g Zm9yIHN0cnVjdCBhc3luY19jdHguCisJICovCisJaWYgKGFjdHgtPmVycmN0eCkKKwkJYXBwZW5k UFFFeHBCdWZmZXIoZXJyYnVmLCAiJXM6ICIsIGFjdHgtPmVycmN0eCk7CisKKwlpZiAoUFFFeHBC dWZmZXJEYXRhQnJva2VuKGFjdHgtPmVycmJ1ZikpCisJCWFwcGVuZFBRRXhwQnVmZmVyU3RyKGVy cmJ1ZiwgbGlicHFfZ2V0dGV4dCgib3V0IG9mIG1lbW9yeSIpKTsKKwllbHNlCisJCWFwcGVuZFBR RXhwQnVmZmVyU3RyKGVycmJ1ZiwgYWN0eC0+ZXJyYnVmLmRhdGEpOworCisJaWYgKGFjdHgtPmN1 cmxfZXJyWzBdKQorCXsKKwkJYXBwZW5kUFFFeHBCdWZmZXIoZXJyYnVmLCAiIChsaWJjdXJsOiAl cykiLCBhY3R4LT5jdXJsX2Vycik7CisKKwkJLyogU29tZXRpbWVzIGxpYmN1cmwgYWRkcyBhIG5l d2xpbmUgdG8gdGhlIGVycm9yIGJ1ZmZlci4gOiggKi8KKwkJaWYgKGVycmJ1Zi0+bGVuID49IDIg JiYgZXJyYnVmLT5kYXRhW2VycmJ1Zi0+bGVuIC0gMl0gPT0gJ1xuJykKKwkJeworCQkJZXJyYnVm LT5kYXRhW2VycmJ1Zi0+bGVuIC0gMl0gPSAnKSc7CisJCQllcnJidWYtPmRhdGFbZXJyYnVmLT5s ZW4gLSAxXSA9ICdcMCc7CisJCQllcnJidWYtPmxlbi0tOworCQl9CisJfQorCisJcmVxLT5lcnJv ciA9IGVycmJ1Zi0+ZGF0YTsKIH0KIAogLyoKQEAgLTIxOTcsNyArMjIzNSw3IEBAIHN0YXRpYyBi b29sCiBjaGVja19pc3N1ZXIoc3RydWN0IGFzeW5jX2N0eCAqYWN0eCwgUEdjb25uICpjb25uKQog ewogCWNvbnN0IHN0cnVjdCBwcm92aWRlciAqcHJvdmlkZXIgPSAmYWN0eC0+cHJvdmlkZXI7Ci0J Y29uc3QgY2hhciAqb2F1dGhfaXNzdWVyX2lkID0gY29ubl9vYXV0aF9pc3N1ZXJfaWQoY29ubik7 CisJY29uc3QgY2hhciAqb2F1dGhfaXNzdWVyX2lkID0gYWN0eC0+aXNzdWVyX2lkOwogCiAJQXNz ZXJ0KG9hdXRoX2lzc3Vlcl9pZCk7CS8qIGVuc3VyZWQgYnkgc2V0dXBfb2F1dGhfcGFyYW1ldGVy cygpICovCiAJQXNzZXJ0KHByb3ZpZGVyLT5pc3N1ZXIpOwkvKiBlbnN1cmVkIGJ5IHBhcnNlX3By b3ZpZGVyKCkgKi8KQEAgLTIzMDAsOCArMjMzOCw4IEBAIGNoZWNrX2Zvcl9kZXZpY2VfZmxvdyhz dHJ1Y3QgYXN5bmNfY3R4ICphY3R4KQogc3RhdGljIGJvb2wKIGFkZF9jbGllbnRfaWRlbnRpZmlj YXRpb24oc3RydWN0IGFzeW5jX2N0eCAqYWN0eCwgUFFFeHBCdWZmZXIgcmVxYm9keSwgUEdjb25u ICpjb25uKQogewotCWNvbnN0IGNoYXIgKm9hdXRoX2NsaWVudF9pZCA9IGNvbm5fb2F1dGhfY2xp ZW50X2lkKGNvbm4pOwotCWNvbnN0IGNoYXIgKm9hdXRoX2NsaWVudF9zZWNyZXQgPSBjb25uX29h dXRoX2NsaWVudF9zZWNyZXQoY29ubik7CisJY29uc3QgY2hhciAqb2F1dGhfY2xpZW50X2lkID0g YWN0eC0+Y2xpZW50X2lkOworCWNvbnN0IGNoYXIgKm9hdXRoX2NsaWVudF9zZWNyZXQgPSBhY3R4 LT5jbGllbnRfc2VjcmV0OwogCiAJYm9vbAkJc3VjY2VzcyA9IGZhbHNlOwogCWNoYXIJICAgKnVz ZXJuYW1lID0gTlVMTDsKQEAgLTIzODQsMTEgKzI0MjIsMTAgQEAgY2xlYW51cDoKIHN0YXRpYyBi b29sCiBzdGFydF9kZXZpY2VfYXV0aHooc3RydWN0IGFzeW5jX2N0eCAqYWN0eCwgUEdjb25uICpj b25uKQogewotCWNvbnN0IGNoYXIgKm9hdXRoX3Njb3BlID0gY29ubl9vYXV0aF9zY29wZShjb25u KTsKKwljb25zdCBjaGFyICpvYXV0aF9zY29wZSA9IGFjdHgtPnNjb3BlOwogCWNvbnN0IGNoYXIg KmRldmljZV9hdXRoel91cmkgPSBhY3R4LT5wcm92aWRlci5kZXZpY2VfYXV0aG9yaXphdGlvbl9l bmRwb2ludDsKIAlQUUV4cEJ1ZmZlciB3b3JrX2J1ZmZlciA9ICZhY3R4LT53b3JrX2RhdGE7CiAK LQlBc3NlcnQoY29ubl9vYXV0aF9jbGllbnRfaWQoY29ubikpOyAvKiBlbnN1cmVkIGJ5IHNldHVw X29hdXRoX3BhcmFtZXRlcnMoKSAqLwogCUFzc2VydChkZXZpY2VfYXV0aHpfdXJpKTsJLyogZW5z dXJlZCBieSBjaGVja19mb3JfZGV2aWNlX2Zsb3coKSAqLwogCiAJLyogQ29uc3RydWN0IG91ciBy ZXF1ZXN0IGJvZHkuICovCkBAIC0yNDc2LDcgKzI1MTMsNiBAQCBzdGFydF90b2tlbl9yZXF1ZXN0 KHN0cnVjdCBhc3luY19jdHggKmFjdHgsIFBHY29ubiAqY29ubikKIAljb25zdCBjaGFyICpkZXZp Y2VfY29kZSA9IGFjdHgtPmF1dGh6LmRldmljZV9jb2RlOwogCVBRRXhwQnVmZmVyIHdvcmtfYnVm ZmVyID0gJmFjdHgtPndvcmtfZGF0YTsKIAotCUFzc2VydChjb25uX29hdXRoX2NsaWVudF9pZChj b25uKSk7IC8qIGVuc3VyZWQgYnkgc2V0dXBfb2F1dGhfcGFyYW1ldGVycygpICovCiAJQXNzZXJ0 KHRva2VuX3VyaSk7CQkJLyogZW5zdXJlZCBieSBwYXJzZV9wcm92aWRlcigpICovCiAJQXNzZXJ0 KGRldmljZV9jb2RlKTsJCS8qIGVuc3VyZWQgYnkgcGFyc2VfZGV2aWNlX2F1dGh6KCkgKi8KIApA QCAtMjY1NSw3ICsyNjkxLDcgQEAgcHJvbXB0X3VzZXIoc3RydWN0IGFzeW5jX2N0eCAqYWN0eCwg UEdjb25uICpjb25uKQogICogZnVuY3Rpb24gd2lsbCBub3QgdHJ5IHRvIHJlaW5pdGlhbGl6ZSBD dXJsIG9uIHN1Y2Nlc3NpdmUgY2FsbHMuCiAgKi8KIHN0YXRpYyBib29sCi1pbml0aWFsaXplX2N1 cmwoUEdjb25uICpjb25uKQoraW5pdGlhbGl6ZV9jdXJsKFBHb2F1dGhCZWFyZXJSZXF1ZXN0VjIg KnJlcSkKIHsKIAkvKgogCSAqIERvbid0IGxldCB0aGUgY29tcGlsZXIgcGxheSB0cmlja3Mgd2l0 aCB0aGlzIHZhcmlhYmxlLiBJbiB0aGUKQEAgLTI2ODksOCArMjcyNSw3IEBAIGluaXRpYWxpemVf Y3VybChQR2Nvbm4gKmNvbm4pCiAJCWdvdG8gZG9uZTsKIAllbHNlIGlmIChpbml0X3N1Y2Nlc3Nm dWwgPT0gUEdfQk9PTF9OTykKIAl7Ci0JCWxpYnBxX2FwcGVuZF9jb25uX2Vycm9yKGNvbm4sCi0J CQkJCQkJCSJjdXJsX2dsb2JhbF9pbml0IHByZXZpb3VzbHkgZmFpbGVkIGR1cmluZyBPQXV0aCBz ZXR1cCIpOworCQlyZXEtPmVycm9yID0gbGlicHFfZ2V0dGV4dCgiY3VybF9nbG9iYWxfaW5pdCBw cmV2aW91c2x5IGZhaWxlZCBkdXJpbmcgT0F1dGggc2V0dXAiKTsKIAkJZ290byBkb25lOwogCX0K IApAQCAtMjcwOCw4ICsyNzQzLDcgQEAgaW5pdGlhbGl6ZV9jdXJsKFBHY29ubiAqY29ubikKIAkg Ki8KIAlpZiAoY3VybF9nbG9iYWxfaW5pdChDVVJMX0dMT0JBTF9BTEwgJiB+Q1VSTF9HTE9CQUxf V0lOMzIpICE9IENVUkxFX09LKQogCXsKLQkJbGlicHFfYXBwZW5kX2Nvbm5fZXJyb3IoY29ubiwK LQkJCQkJCQkJImN1cmxfZ2xvYmFsX2luaXQgZmFpbGVkIGR1cmluZyBPQXV0aCBzZXR1cCIpOwor CQlyZXEtPmVycm9yID0gbGlicHFfZ2V0dGV4dCgiY3VybF9nbG9iYWxfaW5pdCBmYWlsZWQgZHVy aW5nIE9BdXRoIHNldHVwIik7CiAJCWluaXRfc3VjY2Vzc2Z1bCA9IFBHX0JPT0xfTk87CiAJCWdv dG8gZG9uZTsKIAl9CkBAIC0yNzMwLDExICsyNzY0LDExIEBAIGluaXRpYWxpemVfY3VybChQR2Nv bm4gKmNvbm4pCiAJCSAqIEluIGEgZG93bmdyYWRlIHNpdHVhdGlvbiwgdGhlIGRhbWFnZSBpcyBh bHJlYWR5IGRvbmUuIEN1cmwgZ2xvYmFsCiAJCSAqIHN0YXRlIG1heSBiZSBjb3JydXB0ZWQuIEJl IG5vaXN5LgogCQkgKi8KLQkJbGlicHFfYXBwZW5kX2Nvbm5fZXJyb3IoY29ubiwgImxpYmN1cmwg aXMgbm8gbG9uZ2VyIHRocmVhZC1zYWZlXG4iCi0JCQkJCQkJCSJcdEN1cmwgaW5pdGlhbGl6YXRp b24gd2FzIHJlcG9ydGVkIHRocmVhZC1zYWZlIHdoZW4gbGlicHFcbiIKLQkJCQkJCQkJIlx0d2Fz IGNvbXBpbGVkLCBidXQgdGhlIGN1cnJlbnRseSBpbnN0YWxsZWQgdmVyc2lvbiBvZlxuIgotCQkJ CQkJCQkiXHRsaWJjdXJsIHJlcG9ydHMgdGhhdCBpdCBpcyBub3QuIFJlY29tcGlsZSBsaWJwcSBh Z2FpbnN0XG4iCi0JCQkJCQkJCSJcdHRoZSBpbnN0YWxsZWQgdmVyc2lvbiBvZiBsaWJjdXJsLiIp OworCQlyZXEtPmVycm9yID0gbGlicHFfZ2V0dGV4dCgibGliY3VybCBpcyBubyBsb25nZXIgdGhy ZWFkLXNhZmVcbiIKKwkJCQkJCQkJICAgIlx0Q3VybCBpbml0aWFsaXphdGlvbiB3YXMgcmVwb3J0 ZWQgdGhyZWFkLXNhZmUgd2hlbiBsaWJwcVxuIgorCQkJCQkJCQkgICAiXHR3YXMgY29tcGlsZWQs IGJ1dCB0aGUgY3VycmVudGx5IGluc3RhbGxlZCB2ZXJzaW9uIG9mXG4iCisJCQkJCQkJCSAgICJc dGxpYmN1cmwgcmVwb3J0cyB0aGF0IGl0IGlzIG5vdC4gUmVjb21waWxlIGxpYnBxIGFnYWluc3Rc biIKKwkJCQkJCQkJICAgIlx0dGhlIGluc3RhbGxlZCB2ZXJzaW9uIG9mIGxpYmN1cmwuIik7CiAJ CWluaXRfc3VjY2Vzc2Z1bCA9IFBHX0JPT0xfTk87CiAJCWdvdG8gZG9uZTsKIAl9CkBAIC0yNzY0 LDU0ICsyNzk4LDE2IEBAIGRvbmU6CiAgKiBwcm92aWRlci4KICAqLwogc3RhdGljIFBvc3RncmVz UG9sbGluZ1N0YXR1c1R5cGUKLXBnX2ZlX3J1bl9vYXV0aF9mbG93X2ltcGwoUEdjb25uICpjb25u KQorcGdfZmVfcnVuX29hdXRoX2Zsb3dfaW1wbChQR2Nvbm4gKmNvbm4sIFBHb2F1dGhCZWFyZXJS ZXF1ZXN0VjIgKnJlcXVlc3QsCisJCQkJCQkgIGludCAqYWx0c29jaykKIHsKLQlmZV9vYXV0aF9z dGF0ZSAqc3RhdGUgPSBjb25uX3Nhc2xfc3RhdGUoY29ubik7Ci0Jc3RydWN0IGFzeW5jX2N0eCAq YWN0eDsKKwlzdHJ1Y3QgYXN5bmNfY3R4ICphY3R4ID0gcmVxdWVzdC0+djEudXNlcjsKIAljaGFy CSAgICpvYXV0aF90b2tlbiA9IE5VTEw7Ci0JUFFFeHBCdWZmZXIgZXJyYnVmOwotCi0JaWYgKCFp bml0aWFsaXplX2N1cmwoY29ubikpCi0JCXJldHVybiBQR1JFU19QT0xMSU5HX0ZBSUxFRDsKLQot CWlmICghc3RhdGUtPmFzeW5jX2N0eCkKLQl7Ci0JCS8qCi0JCSAqIENyZWF0ZSBvdXIgYXN5bmNo cm9ub3VzIHN0YXRlLCBhbmQgaG9vayBpdCBpbnRvIHRoZSB1cHBlci1sZXZlbAotCQkgKiBPQXV0 aCBzdGF0ZSBpbW1lZGlhdGVseSwgc28gYW55IGZhaWx1cmVzIGJlbG93IHdvbid0IGxlYWsgdGhl Ci0JCSAqIGNvbnRleHQgYWxsb2NhdGlvbi4KLQkJICovCi0JCWFjdHggPSBjYWxsb2MoMSwgc2l6 ZW9mKCphY3R4KSk7Ci0JCWlmICghYWN0eCkKLQkJewotCQkJbGlicHFfYXBwZW5kX2Nvbm5fZXJy b3IoY29ubiwgIm91dCBvZiBtZW1vcnkiKTsKLQkJCXJldHVybiBQR1JFU19QT0xMSU5HX0ZBSUxF RDsKLQkJfQotCi0JCWFjdHgtPm11eCA9IFBHSU5WQUxJRF9TT0NLRVQ7Ci0JCWFjdHgtPnRpbWVy ZmQgPSAtMTsKLQotCQkvKiBTaG91bGQgd2UgZW5hYmxlIHVuc2FmZSBmZWF0dXJlcz8gKi8KLQkJ YWN0eC0+ZGVidWdnaW5nID0gb2F1dGhfdW5zYWZlX2RlYnVnZ2luZ19lbmFibGVkKCk7Ci0KLQkJ c3RhdGUtPmFzeW5jX2N0eCA9IGFjdHg7Ci0KLQkJaW5pdFBRRXhwQnVmZmVyKCZhY3R4LT53b3Jr X2RhdGEpOwotCQlpbml0UFFFeHBCdWZmZXIoJmFjdHgtPmVycmJ1Zik7Ci0KLQkJaWYgKCFzZXR1 cF9tdWx0aXBsZXhlcihhY3R4KSkKLQkJCWdvdG8gZXJyb3JfcmV0dXJuOwotCi0JCWlmICghc2V0 dXBfY3VybF9oYW5kbGVzKGFjdHgpKQotCQkJZ290byBlcnJvcl9yZXR1cm47Ci0JfQotCi0JYWN0 eCA9IHN0YXRlLT5hc3luY19jdHg7CiAKIAlkbwogCXsKIAkJLyogQnkgZGVmYXVsdCwgdGhlIG11 bHRpcGxleGVyIGlzIHRoZSBhbHRzb2NrLiBSZWFzc2lnbiBhcyBkZXNpcmVkLiAqLwotCQlzZXRf Y29ubl9hbHRzb2NrKGNvbm4sIGFjdHgtPm11eCk7CisJCSphbHRzb2NrID0gYWN0eC0+bXV4Owog CiAJCXN3aXRjaCAoYWN0eC0+c3RlcCkKIAkJewpAQCAtMjg3Niw3ICsyODcyLDcgQEAgcGdfZmVf cnVuX29hdXRoX2Zsb3dfaW1wbChQR2Nvbm4gKmNvbm4pCiAKIAkJCQkJaWYgKCFleHBpcmVkKQog CQkJCQl7Ci0JCQkJCQlzZXRfY29ubl9hbHRzb2NrKGNvbm4sIGFjdHgtPnRpbWVyZmQpOworCQkJ CQkJKmFsdHNvY2sgPSBhY3R4LT50aW1lcmZkOwogCQkJCQkJcmV0dXJuIFBHUkVTX1BPTExJTkdf UkVBRElORzsKIAkJCQkJfQogCkBAIC0yODkzLDcgKzI4ODksNyBAQCBwZ19mZV9ydW5fb2F1dGhf Zmxvd19pbXBsKFBHY29ubiAqY29ubikKIAkJewogCQkJY2FzZSBPQVVUSF9TVEVQX0lOSVQ6CiAJ CQkJYWN0eC0+ZXJyY3R4ID0gbGlicHFfZ2V0dGV4dCgiZmFpbGVkIHRvIGZldGNoIE9wZW5JRCBk aXNjb3ZlcnkgZG9jdW1lbnQiKTsKLQkJCQlpZiAoIXN0YXJ0X2Rpc2NvdmVyeShhY3R4LCBjb25u X29hdXRoX2Rpc2NvdmVyeV91cmkoY29ubikpKQorCQkJCWlmICghc3RhcnRfZGlzY292ZXJ5KGFj dHgsIGFjdHgtPmRpc2NvdmVyeV91cmkpKQogCQkJCQlnb3RvIGVycm9yX3JldHVybjsKIAogCQkJ CWFjdHgtPnN0ZXAgPSBPQVVUSF9TVEVQX0RJU0NPVkVSWTsKQEAgLTI5MzMsMTAgKzI5MjksMTAg QEAgcGdfZmVfcnVuX29hdXRoX2Zsb3dfaW1wbChQR2Nvbm4gKmNvbm4pCiAJCQkJCWdvdG8gZXJy b3JfcmV0dXJuOwogCiAJCQkJLyoKLQkJCQkgKiBIb29rIGFueSBvYXV0aF90b2tlbiBpbnRvIHRo ZSBQR2Nvbm4gaW1tZWRpYXRlbHkgc28gdGhhdAotCQkJCSAqIHRoZSBhbGxvY2F0aW9uIGlzbid0 IGxvc3QgaW4gY2FzZSBvZiBhbiBlcnJvci4KKwkJCQkgKiBIb29rIGFueSBvYXV0aF90b2tlbiBp bnRvIHRoZSByZXF1ZXN0IHN0cnVjdCBpbW1lZGlhdGVseSBzbworCQkJCSAqIHRoYXQgdGhlIGFs bG9jYXRpb24gaXNuJ3QgbG9zdCBpbiBjYXNlIG9mIGFuIGVycm9yLgogCQkJCSAqLwotCQkJCXNl dF9jb25uX29hdXRoX3Rva2VuKGNvbm4sIG9hdXRoX3Rva2VuKTsKKwkJCQlyZXF1ZXN0LT52MS50 b2tlbiA9IG9hdXRoX3Rva2VuOwogCiAJCQkJaWYgKCFhY3R4LT51c2VyX3Byb21wdGVkKQogCQkJ CXsKQEAgLTI5NjUsNyArMjk2MSw3IEBAIHBnX2ZlX3J1bl9vYXV0aF9mbG93X2ltcGwoUEdjb25u ICpjb25uKQogCQkJCSAqIHRoZSBjbGllbnQgd2FpdCBkaXJlY3RseSBvbiB0aGUgdGltZXJmZCBy YXRoZXIgdGhhbiB0aGUKIAkJCQkgKiBtdWx0aXBsZXhlci4KIAkJCQkgKi8KLQkJCQlzZXRfY29u bl9hbHRzb2NrKGNvbm4sIGFjdHgtPnRpbWVyZmQpOworCQkJCSphbHRzb2NrID0gYWN0eC0+dGlt ZXJmZDsKIAogCQkJCWFjdHgtPnN0ZXAgPSBPQVVUSF9TVEVQX1dBSVRfSU5URVJWQUw7CiAJCQkJ YWN0eC0+cnVubmluZyA9IDE7CkBAIC0yOTkxLDQ4ICsyOTg3LDIxIEBAIHBnX2ZlX3J1bl9vYXV0 aF9mbG93X2ltcGwoUEdjb25uICpjb25uKQogCXJldHVybiBvYXV0aF90b2tlbiA/IFBHUkVTX1BP TExJTkdfT0sgOiBQR1JFU19QT0xMSU5HX1JFQURJTkc7CiAKIGVycm9yX3JldHVybjoKLQllcnJi dWYgPSBjb25uX2Vycm9yTWVzc2FnZShjb25uKTsKLQotCS8qCi0JICogQXNzZW1ibGUgdGhlIHRo cmVlIHBhcnRzIG9mIG91ciBlcnJvcjogY29udGV4dCwgYm9keSwgYW5kIGRldGFpbC4gU2VlCi0J ICogYWxzbyB0aGUgZG9jdW1lbnRhdGlvbiBmb3Igc3RydWN0IGFzeW5jX2N0eC4KLQkgKi8KLQlp ZiAoYWN0eC0+ZXJyY3R4KQotCQlhcHBlbmRQUUV4cEJ1ZmZlcihlcnJidWYsICIlczogIiwgYWN0 eC0+ZXJyY3R4KTsKLQotCWlmIChQUUV4cEJ1ZmZlckRhdGFCcm9rZW4oYWN0eC0+ZXJyYnVmKSkK LQkJYXBwZW5kUFFFeHBCdWZmZXJTdHIoZXJyYnVmLCBsaWJwcV9nZXR0ZXh0KCJvdXQgb2YgbWVt b3J5IikpOwotCWVsc2UKLQkJYXBwZW5kUFFFeHBCdWZmZXJTdHIoZXJyYnVmLCBhY3R4LT5lcnJi dWYuZGF0YSk7Ci0KLQlpZiAoYWN0eC0+Y3VybF9lcnJbMF0pCi0JewotCQlhcHBlbmRQUUV4cEJ1 ZmZlcihlcnJidWYsICIgKGxpYmN1cmw6ICVzKSIsIGFjdHgtPmN1cmxfZXJyKTsKLQotCQkvKiBT b21ldGltZXMgbGliY3VybCBhZGRzIGEgbmV3bGluZSB0byB0aGUgZXJyb3IgYnVmZmVyLiA6KCAq LwotCQlpZiAoZXJyYnVmLT5sZW4gPj0gMiAmJiBlcnJidWYtPmRhdGFbZXJyYnVmLT5sZW4gLSAy XSA9PSAnXG4nKQotCQl7Ci0JCQllcnJidWYtPmRhdGFbZXJyYnVmLT5sZW4gLSAyXSA9ICcpJzsK LQkJCWVycmJ1Zi0+ZGF0YVtlcnJidWYtPmxlbiAtIDFdID0gJ1wwJzsKLQkJCWVycmJ1Zi0+bGVu LS07Ci0JCX0KLQl9Ci0KLQlhcHBlbmRQUUV4cEJ1ZmZlckNoYXIoZXJyYnVmLCAnXG4nKTsKKwlh cHBlbmRfYWN0eF9lcnJvcihyZXF1ZXN0LCBhY3R4KTsKIAogCXJldHVybiBQR1JFU19QT0xMSU5H X0ZBSUxFRDsKIH0KIAogLyoKLSAqIFRoZSB0b3AtbGV2ZWwgZW50cnkgcG9pbnQuIFRoaXMgaXMg YSBjb252ZW5pZW50IHBsYWNlIHRvIHB1dCBuZWNlc3NhcnkKLSAqIHdyYXBwZXIgbG9naWMgYmVm b3JlIGhhbmRpbmcgb2ZmIHRvIHRoZSB0cnVlIGltcGxlbWVudGF0aW9uLCBhYm92ZS4KKyAqIFRo ZSB0b3AtbGV2ZWwgZW50cnkgcG9pbnQgZm9yIHRoZSBmbG93LiBUaGlzIGlzIGEgY29udmVuaWVu dCBwbGFjZSB0byBwdXQKKyAqIG5lY2Vzc2FyeSB3cmFwcGVyIGxvZ2ljIGJlZm9yZSBoYW5kaW5n IG9mZiB0byB0aGUgdHJ1ZSBpbXBsZW1lbnRhdGlvbiwgYWJvdmUuCiAgKi8KLVBvc3RncmVzUG9s bGluZ1N0YXR1c1R5cGUKLXBnX2ZlX3J1bl9vYXV0aF9mbG93KFBHY29ubiAqY29ubikKK3N0YXRp YyBQb3N0Z3Jlc1BvbGxpbmdTdGF0dXNUeXBlCitwZ19mZV9ydW5fb2F1dGhfZmxvdyhQR2Nvbm4g KmNvbm4sIHN0cnVjdCBQR29hdXRoQmVhcmVyUmVxdWVzdCAqcmVxdWVzdCwKKwkJCQkJIGludCAq YWx0c29jaykKIHsKIAlQb3N0Z3Jlc1BvbGxpbmdTdGF0dXNUeXBlIHJlc3VsdDsKLQlmZV9vYXV0 aF9zdGF0ZSAqc3RhdGUgPSBjb25uX3Nhc2xfc3RhdGUoY29ubik7Ci0Jc3RydWN0IGFzeW5jX2N0 eCAqYWN0eDsKKwlzdHJ1Y3QgYXN5bmNfY3R4ICphY3R4ID0gcmVxdWVzdC0+dXNlcjsKICNpZm5k ZWYgV0lOMzIKIAlzaWdzZXRfdAlvc2lnc2V0OwogCWJvb2wJCXNpZ3BpcGVfcGVuZGluZzsKQEAg LTMwNTksMjAgKzMwMjgsMTYgQEAgcGdfZmVfcnVuX29hdXRoX2Zsb3coUEdjb25uICpjb25uKQog CW1hc2tlZCA9IChwcV9ibG9ja19zaWdwaXBlKCZvc2lnc2V0LCAmc2lncGlwZV9wZW5kaW5nKSA9 PSAwKTsKICNlbmRpZgogCi0JcmVzdWx0ID0gcGdfZmVfcnVuX29hdXRoX2Zsb3dfaW1wbChjb25u KTsKKwlyZXN1bHQgPSBwZ19mZV9ydW5fb2F1dGhfZmxvd19pbXBsKGNvbm4sCisJCQkJCQkJCQkg ICAoUEdvYXV0aEJlYXJlclJlcXVlc3RWMiAqKSByZXF1ZXN0LAorCQkJCQkJCQkJICAgYWx0c29j ayk7CiAKIAkvKgogCSAqIFRvIGFzc2lzdCB3aXRoIGZpbmRpbmcgYnVncyBpbiBjb21iX211bHRp cGxleGVyKCkgYW5kCiAJICogZHJhaW5fdGltZXJfZXZlbnRzKCksIHdoZW4gd2UncmUgaW4gZGVi dWcgbW9kZSwgdHJhY2sgdGhlIHRvdGFsIG51bWJlcgogCSAqIG9mIGNhbGxzIHRvIHRoaXMgZnVu Y3Rpb24gYW5kIHByaW50IHRoYXQgYXQgdGhlIGVuZCBvZiB0aGUgZmxvdy4KLQkgKgotCSAqIEJl IGNhcmVmdWwgdGhhdCBzdGF0ZS0+YXN5bmNfY3R4IGNvdWxkIGJlIE5VTEwgaWYgZWFybHkgaW5p dGlhbGl6YXRpb24KLQkgKiBmYWlscyBkdXJpbmcgdGhlIGZpcnN0IGNhbGwuCiAJICovCi0JYWN0 eCA9IHN0YXRlLT5hc3luY19jdHg7Ci0JQXNzZXJ0KGFjdHggfHwgcmVzdWx0ID09IFBHUkVTX1BP TExJTkdfRkFJTEVEKTsKLQotCWlmIChhY3R4ICYmIGFjdHgtPmRlYnVnZ2luZykKKwlpZiAoYWN0 eC0+ZGVidWdnaW5nKQogCXsKIAkJYWN0eC0+ZGJnX251bV9jYWxscysrOwogCQlpZiAocmVzdWx0 ID09IFBHUkVTX1BPTExJTkdfT0sgfHwgcmVzdWx0ID09IFBHUkVTX1BPTExJTkdfRkFJTEVEKQpA QCAtMzA5MywzICszMDU4LDEwNCBAQCBwZ19mZV9ydW5fb2F1dGhfZmxvdyhQR2Nvbm4gKmNvbm4p CiAKIAlyZXR1cm4gcmVzdWx0OwogfQorCisvKgorICogQ2FsbGJhY2sgcmVnaXN0cmF0aW9uIGZv ciBPQVVUSEJFQVJFUi4gbGlicHEgY2FsbHMgdGhpcyBvbmNlIHBlciBPQXV0aAorICogY29ubmVj dGlvbi4KKyAqLworaW50CitwZ19zdGFydF9vYXV0aGJlYXJlcihQR2Nvbm4gKmNvbm4sIFBHb2F1 dGhCZWFyZXJSZXF1ZXN0VjIgKnJlcXVlc3QpCit7CisJc3RydWN0IGFzeW5jX2N0eCAqYWN0eDsK KwlQUWNvbm5pbmZvT3B0aW9uICpjb25uaW5mbyA9IE5VTEw7CisKKwlpZiAoIWluaXRpYWxpemVf Y3VybChyZXF1ZXN0KSkKKwkJcmV0dXJuIC0xOworCisJLyoKKwkgKiBDcmVhdGUgb3VyIGFzeW5j aHJvbm91cyBzdGF0ZSwgYW5kIGhvb2sgaXQgaW50byB0aGUgdXBwZXItbGV2ZWwgT0F1dGgKKwkg KiBzdGF0ZSBpbW1lZGlhdGVseSwgc28gYW55IGZhaWx1cmVzIGJlbG93IHdvbid0IGxlYWsgdGhl IGNvbnRleHQKKwkgKiBhbGxvY2F0aW9uLgorCSAqLworCWFjdHggPSBjYWxsb2MoMSwgc2l6ZW9m KCphY3R4KSk7CisJaWYgKCFhY3R4KQorCQlnb3RvIG9vbTsKKworCWFjdHgtPm11eCA9IFBHSU5W QUxJRF9TT0NLRVQ7CisJYWN0eC0+dGltZXJmZCA9IC0xOworCisJLyoKKwkgKiBOb3cgd2UgaGF2 ZSBhIHZhbGlkIChidXQgc3RpbGwgdXNlbGVzcykgYWN0eCwgc28gd2UgY2FuIGZpbGwgaW4gdGhl CisJICogcmVxdWVzdCBvYmplY3QuIEZyb20gdGhpcyBwb2ludCBvbndhcmQsIGZhaWx1cmVzIHdp bGwgcmVzdWx0IGluIGEgY2FsbAorCSAqIHRvIHBnX2ZlX2NsZWFudXBfb2F1dGhfZmxvdygpLiBG dXJ0aGVyIGNsZWFudXAgbG9naWMgYmVsb25ncyB0aGVyZS4KKwkgKi8KKwlyZXF1ZXN0LT52MS5h c3luYyA9IHBnX2ZlX3J1bl9vYXV0aF9mbG93OworCXJlcXVlc3QtPnYxLmNsZWFudXAgPSBwZ19m ZV9jbGVhbnVwX29hdXRoX2Zsb3c7CisJcmVxdWVzdC0+djEudXNlciA9IGFjdHg7CisKKwkvKgor CSAqIE5vdyBmaW5pc2ggZmlsbGluZyBpbiB0aGUgYWN0eC4KKwkgKi8KKworCS8qIFNob3VsZCB3 ZSBlbmFibGUgdW5zYWZlIGZlYXR1cmVzPyAqLworCWFjdHgtPmRlYnVnZ2luZyA9IG9hdXRoX3Vu c2FmZV9kZWJ1Z2dpbmdfZW5hYmxlZCgpOworCisJaW5pdFBRRXhwQnVmZmVyKCZhY3R4LT53b3Jr X2RhdGEpOworCWluaXRQUUV4cEJ1ZmZlcigmYWN0eC0+ZXJyYnVmKTsKKworCS8qIFB1bGwgcmVs ZXZhbnQgY29ubmVjdGlvbiBvcHRpb25zLiAqLworCWNvbm5pbmZvID0gUFFjb25uaW5mbyhjb25u KTsKKwlpZiAoIWNvbm5pbmZvKQorCQlnb3RvIG9vbTsKKworCWZvciAoUFFjb25uaW5mb09wdGlv biAqb3B0ID0gY29ubmluZm87IG9wdC0+a2V5d29yZDsgb3B0KyspCisJeworCQlpZiAoIW9wdC0+ dmFsKQorCQkJY29udGludWU7CQkJLyogc2ltcGxpZmllcyB0aGUgc3RyZHVwIGxvZ2ljIGJlbG93 ICovCisKKwkJaWYgKHN0cmNtcChvcHQtPmtleXdvcmQsICJvYXV0aF9jbGllbnRfaWQiKSA9PSAw KQorCQl7CisJCQlhY3R4LT5jbGllbnRfaWQgPSBzdHJkdXAob3B0LT52YWwpOworCQkJaWYgKCFh Y3R4LT5jbGllbnRfaWQpCisJCQkJZ290byBvb207CisJCX0KKwkJZWxzZSBpZiAoc3RyY21wKG9w dC0+a2V5d29yZCwgIm9hdXRoX2NsaWVudF9zZWNyZXQiKSA9PSAwKQorCQl7CisJCQlhY3R4LT5j bGllbnRfc2VjcmV0ID0gc3RyZHVwKG9wdC0+dmFsKTsKKwkJCWlmICghYWN0eC0+Y2xpZW50X3Nl Y3JldCkKKwkJCQlnb3RvIG9vbTsKKwkJfQorCX0KKworCVBRY29ubmluZm9GcmVlKGNvbm5pbmZv KTsKKwljb25uaW5mbyA9IE5VTEw7CQkJLyoga2VlcHMgYGdvdG8gb29tYCBzYWZlICovCisKKwlh Y3R4LT5kaXNjb3ZlcnlfdXJpID0gcmVxdWVzdC0+djEub3BlbmlkX2NvbmZpZ3VyYXRpb247CisJ YWN0eC0+aXNzdWVyX2lkID0gcmVxdWVzdC0+aXNzdWVyOworCWFjdHgtPnNjb3BlID0gcmVxdWVz dC0+djEuc2NvcGU7CisKKwlBc3NlcnQoYWN0eC0+Y2xpZW50X2lkKTsJLyogZW5zdXJlZCBieSBz ZXR1cF9vYXV0aF9wYXJhbWV0ZXJzKCkgKi8KKwlBc3NlcnQoYWN0eC0+aXNzdWVyX2lkKTsJLyog ZW5zdXJlZCBieSBzZXR1cF9vYXV0aF9wYXJhbWV0ZXJzKCkgKi8KKwlBc3NlcnQoYWN0eC0+ZGlz Y292ZXJ5X3VyaSk7CS8qIGVuc3VyZWQgYnkgb2F1dGhfZXhjaGFuZ2UoKSAqLworCisJaWYgKCFz ZXR1cF9tdWx0aXBsZXhlcihhY3R4KSkKKwl7CisJCWFwcGVuZF9hY3R4X2Vycm9yKHJlcXVlc3Qs IGFjdHgpOworCQlyZXR1cm4gLTE7CisJfQorCisJaWYgKCFzZXR1cF9jdXJsX2hhbmRsZXMoYWN0 eCkpCisJeworCQlhcHBlbmRfYWN0eF9lcnJvcihyZXF1ZXN0LCBhY3R4KTsKKwkJcmV0dXJuIC0x OworCX0KKworCXJldHVybiAwOworCitvb206CisJaWYgKGNvbm5pbmZvKQorCQlQUWNvbm5pbmZv RnJlZShjb25uaW5mbyk7CisKKwlyZXF1ZXN0LT5lcnJvciA9IGxpYnBxX2dldHRleHQoIm91dCBv ZiBtZW1vcnkiKTsKKwlyZXR1cm4gLTE7Cit9CmRpZmYgLS1naXQgYS9zcmMvaW50ZXJmYWNlcy9s aWJwcS1vYXV0aC9vYXV0aC11dGlscy5jIGIvc3JjL2ludGVyZmFjZXMvbGlicHEtb2F1dGgvb2F1 dGgtdXRpbHMuYwppbmRleCA0ZWJlN2QwOTQ4Yy4uY2NiMGQ5YmYyYzUgMTAwNjQ0Ci0tLSBhL3Ny Yy9pbnRlcmZhY2VzL2xpYnBxLW9hdXRoL29hdXRoLXV0aWxzLmMKKysrIGIvc3JjL2ludGVyZmFj ZXMvbGlicHEtb2F1dGgvb2F1dGgtdXRpbHMuYwpAQCAtMzUsODUgKzM1LDE4IEBACiBwZ3RocmVh ZGxvY2tfdCBwZ19nX3RocmVhZGxvY2s7CiBzdGF0aWMgbGlicHFfZ2V0dGV4dF9mdW5jIGxpYnBx X2dldHRleHRfaW1wbDsKIAotY29ubl9lcnJvck1lc3NhZ2VfZnVuYyBjb25uX2Vycm9yTWVzc2Fn ZTsKLWNvbm5fb2F1dGhfY2xpZW50X2lkX2Z1bmMgY29ubl9vYXV0aF9jbGllbnRfaWQ7Ci1jb25u X29hdXRoX2NsaWVudF9zZWNyZXRfZnVuYyBjb25uX29hdXRoX2NsaWVudF9zZWNyZXQ7Ci1jb25u X29hdXRoX2Rpc2NvdmVyeV91cmlfZnVuYyBjb25uX29hdXRoX2Rpc2NvdmVyeV91cmk7Ci1jb25u X29hdXRoX2lzc3Vlcl9pZF9mdW5jIGNvbm5fb2F1dGhfaXNzdWVyX2lkOwotY29ubl9vYXV0aF9z Y29wZV9mdW5jIGNvbm5fb2F1dGhfc2NvcGU7Ci1jb25uX3Nhc2xfc3RhdGVfZnVuYyBjb25uX3Nh c2xfc3RhdGU7Ci0KLXNldF9jb25uX2FsdHNvY2tfZnVuYyBzZXRfY29ubl9hbHRzb2NrOwotc2V0 X2Nvbm5fb2F1dGhfdG9rZW5fZnVuYyBzZXRfY29ubl9vYXV0aF90b2tlbjsKLQogLyotCiAgKiBJ bml0aWFsaXplcyBsaWJwcS1vYXV0aCBieSBzZXR0aW5nIG5lY2Vzc2FyeSBjYWxsYmFja3MuCiAg KgotICogVGhlIGN1cnJlbnQgaW1wbGVtZW50YXRpb24gcmVsaWVzIG9uIHRoZSBmb2xsb3dpbmcg cHJpdmF0ZSBpbXBsZW1lbnRhdGlvbgotICogZGV0YWlscyBvZiBsaWJwcToKLSAqCi0gKiAtIHBn X2dfdGhyZWFkbG9jazogcHJvdGVjdHMgbGliY3VybCBpbml0aWFsaXphdGlvbiBpZiB0aGUgdW5k ZXJseWluZyBDdXJsCi0gKiAgIGluc3RhbGxhdGlvbiBpcyBub3QgdGhyZWFkc2FmZQotICoKLSAq IC0gbGlicHFfZ2V0dGV4dDogdHJhbnNsYXRlcyBlcnJvciBtZXNzYWdlcyB1c2luZyBsaWJwcSdz IG1lc3NhZ2UgZG9tYWluCi0gKgotICogVGhlIGltcGxlbWVudGF0aW9uIGFsc28gbmVlZHMgYWNj ZXNzIHRvIHNldmVyYWwgbWVtYmVycyBvZiB0aGUgUEdjb25uIHN0cnVjdCwKLSAqIHdoaWNoIGFy ZSBub3QgZ3VhcmFudGVlZCB0byBzdGF5IGluIHBsYWNlIGFjcm9zcyBtaW5vciB2ZXJzaW9ucy4g QWNjZXNzb3JzCi0gKiAobmFtZWQgY29ubl8qKSBhbmQgbXV0YXRvcnMgKG5hbWVkIHNldF9jb25u XyopIGFyZSBpbmplY3RlZCBoZXJlLgorICogVGhlIGN1cnJlbnQgaW1wbGVtZW50YXRpb24gcmVs aWVzIG9uIGxpYnBxX2dldHRleHQgdG8gdHJhbnNsYXRlIGVycm9yCisgKiBtZXNzYWdlcyB1c2lu ZyBsaWJwcSdzIG1lc3NhZ2UgZG9tYWluLCBzbyBsaWJwcSBpbmplY3RzIGl0IGhlcmUuIFdlIGFs c28gdXNlCisgKiB0aGlzIGNoYW5jZSB0byBpbml0aWFsaXplIG91ciB0aHJlYWRsb2NrLgogICov CiB2b2lkCi1saWJwcV9vYXV0aF9pbml0KHBndGhyZWFkbG9ja190IHRocmVhZGxvY2tfaW1wbCwK LQkJCQkgbGlicHFfZ2V0dGV4dF9mdW5jIGdldHRleHRfaW1wbCwKLQkJCQkgY29ubl9lcnJvck1l c3NhZ2VfZnVuYyBlcnJtc2dfaW1wbCwKLQkJCQkgY29ubl9vYXV0aF9jbGllbnRfaWRfZnVuYyBj bGllbnRpZF9pbXBsLAotCQkJCSBjb25uX29hdXRoX2NsaWVudF9zZWNyZXRfZnVuYyBjbGllbnRz ZWNyZXRfaW1wbCwKLQkJCQkgY29ubl9vYXV0aF9kaXNjb3ZlcnlfdXJpX2Z1bmMgZGlzY292ZXJ5 dXJpX2ltcGwsCi0JCQkJIGNvbm5fb2F1dGhfaXNzdWVyX2lkX2Z1bmMgaXNzdWVyaWRfaW1wbCwK LQkJCQkgY29ubl9vYXV0aF9zY29wZV9mdW5jIHNjb3BlX2ltcGwsCi0JCQkJIGNvbm5fc2FzbF9z dGF0ZV9mdW5jIHNhc2xzdGF0ZV9pbXBsLAotCQkJCSBzZXRfY29ubl9hbHRzb2NrX2Z1bmMgc2V0 YWx0c29ja19pbXBsLAotCQkJCSBzZXRfY29ubl9vYXV0aF90b2tlbl9mdW5jIHNldHRva2VuX2lt cGwpCitsaWJwcV9vYXV0aF9pbml0KGxpYnBxX2dldHRleHRfZnVuYyBnZXR0ZXh0X2ltcGwpCiB7 Ci0JcGdfZ190aHJlYWRsb2NrID0gdGhyZWFkbG9ja19pbXBsOworCXBnX2dfdGhyZWFkbG9jayA9 IFBRZ2V0VGhyZWFkTG9jaygpOwogCWxpYnBxX2dldHRleHRfaW1wbCA9IGdldHRleHRfaW1wbDsK LQljb25uX2Vycm9yTWVzc2FnZSA9IGVycm1zZ19pbXBsOwotCWNvbm5fb2F1dGhfY2xpZW50X2lk ID0gY2xpZW50aWRfaW1wbDsKLQljb25uX29hdXRoX2NsaWVudF9zZWNyZXQgPSBjbGllbnRzZWNy ZXRfaW1wbDsKLQljb25uX29hdXRoX2Rpc2NvdmVyeV91cmkgPSBkaXNjb3Zlcnl1cmlfaW1wbDsK LQljb25uX29hdXRoX2lzc3Vlcl9pZCA9IGlzc3VlcmlkX2ltcGw7Ci0JY29ubl9vYXV0aF9zY29w ZSA9IHNjb3BlX2ltcGw7Ci0JY29ubl9zYXNsX3N0YXRlID0gc2FzbHN0YXRlX2ltcGw7Ci0Jc2V0 X2Nvbm5fYWx0c29jayA9IHNldGFsdHNvY2tfaW1wbDsKLQlzZXRfY29ubl9vYXV0aF90b2tlbiA9 IHNldHRva2VuX2ltcGw7Ci19Ci0KLS8qCi0gKiBBcHBlbmQgYSBmb3JtYXR0ZWQgc3RyaW5nIHRv IHRoZSBlcnJvciBtZXNzYWdlIGJ1ZmZlciBvZiB0aGUgZ2l2ZW4KLSAqIGNvbm5lY3Rpb24sIGFm dGVyIHRyYW5zbGF0aW5nIGl0LiAgVGhpcyBpcyBhIGNvcHkgb2YgbGlicHEncyBpbnRlcm5hbCBB UEkuCi0gKi8KLXZvaWQKLWxpYnBxX2FwcGVuZF9jb25uX2Vycm9yKFBHY29ubiAqY29ubiwgY29u c3QgY2hhciAqZm10LC4uLikKLXsKLQlpbnQJCQlzYXZlX2Vycm5vID0gZXJybm87Ci0JYm9vbAkJ ZG9uZTsKLQl2YV9saXN0CQlhcmdzOwotCVBRRXhwQnVmZmVyIGVycm9yTWVzc2FnZSA9IGNvbm5f ZXJyb3JNZXNzYWdlKGNvbm4pOwotCi0JQXNzZXJ0KGZtdFtzdHJsZW4oZm10KSAtIDFdICE9ICdc bicpOwotCi0JaWYgKFBRRXhwQnVmZmVyQnJva2VuKGVycm9yTWVzc2FnZSkpCi0JCXJldHVybjsJ CQkJCS8qIGFscmVhZHkgZmFpbGVkICovCi0KLQkvKiBMb29wIGluIGNhc2Ugd2UgaGF2ZSB0byBy ZXRyeSBhZnRlciBlbmxhcmdpbmcgdGhlIGJ1ZmZlci4gKi8KLQlkbwotCXsKLQkJZXJybm8gPSBz YXZlX2Vycm5vOwotCQl2YV9zdGFydChhcmdzLCBmbXQpOwotCQlkb25lID0gYXBwZW5kUFFFeHBC dWZmZXJWQShlcnJvck1lc3NhZ2UsIGxpYnBxX2dldHRleHQoZm10KSwgYXJncyk7Ci0JCXZhX2Vu ZChhcmdzKTsKLQl9IHdoaWxlICghZG9uZSk7Ci0KLQlhcHBlbmRQUUV4cEJ1ZmZlckNoYXIoZXJy b3JNZXNzYWdlLCAnXG4nKTsKIH0KIAogI2lmZGVmIEVOQUJMRV9OTFMKZGlmZiAtLWdpdCBhL3Ny Yy9pbnRlcmZhY2VzL2xpYnBxL2ZlLWF1dGgtb2F1dGguYyBiL3NyYy9pbnRlcmZhY2VzL2xpYnBx L2ZlLWF1dGgtb2F1dGguYwppbmRleCBiNjRkMDVhMTNlMy4uOTA0ZjQzZTkwZWEgMTAwNjQ0Ci0t LSBhL3NyYy9pbnRlcmZhY2VzL2xpYnBxL2ZlLWF1dGgtb2F1dGguYworKysgYi9zcmMvaW50ZXJm YWNlcy9saWJwcS9mZS1hdXRoLW9hdXRoLmMKQEAgLTc4LDcgKzc4LDcgQEAgb2F1dGhfaW5pdChQ R2Nvbm4gKmNvbm4sIGNvbnN0IGNoYXIgKnBhc3N3b3JkLAogICogVGhpcyBoYW5kbGVzIG9ubHkg bWVjaGFuaXNtIHN0YXRlIHRpZWQgdG8gdGhlIGNvbm5lY3Rpb24gbGlmZXRpbWU7IHN0YXRlCiAg KiBzdG9yZWQgaW4gc3RhdGUtPmFzeW5jX2N0eCBpcyBmcmVlZCB1cCBlaXRoZXIgaW1tZWRpYXRl bHkgYWZ0ZXIgdGhlCiAgKiBhdXRoZW50aWNhdGlvbiBoYW5kc2hha2Ugc3VjY2VlZHMsIG9yIGJl Zm9yZSB0aGUgbWVjaGFuaXNtIGlzIGNsZWFuZWQgdXAgb24KLSAqIGZhaWx1cmUuIFNlZSBwZ19m ZV9jbGVhbnVwX29hdXRoX2Zsb3coKSBhbmQgY2xlYW51cF91c2VyX29hdXRoX2Zsb3coKS4KKyAq IGZhaWx1cmUuIFNlZSBwZ19mZV9jbGVhbnVwX29hdXRoX2Zsb3coKSBhbmQgY2xlYW51cF9vYXV0 aF9mbG93KCkuCiAgKi8KIHN0YXRpYyB2b2lkCiBvYXV0aF9mcmVlKHZvaWQgKm9wYXEpCkBAIC02 ODAsMzAgKzY4MCw1NCBAQCBjbGVhbnVwOgogICogaXQncyBhZGRlZCB0byBjb25uLT5lcnJvck1l c3NhZ2UgaGVyZS4KICAqLwogc3RhdGljIHZvaWQKLXJlcG9ydF91c2VyX2Zsb3dfZXJyb3IoUEdj b25uICpjb25uLCBjb25zdCBQR29hdXRoQmVhcmVyUmVxdWVzdFYyICpyZXF1ZXN0KQorcmVwb3J0 X2Zsb3dfZXJyb3IoUEdjb25uICpjb25uLCBjb25zdCBQR29hdXRoQmVhcmVyUmVxdWVzdFYyICpy ZXF1ZXN0KQogewotCWFwcGVuZFBRRXhwQnVmZmVyU3RyKCZjb25uLT5lcnJvck1lc3NhZ2UsCi0J CQkJCQkgbGlicHFfZ2V0dGV4dCgidXNlci1kZWZpbmVkIE9BdXRoIGZsb3cgZmFpbGVkIikpOwor CWZlX29hdXRoX3N0YXRlICpzdGF0ZSA9IGNvbm4tPnNhc2xfc3RhdGU7CisJY29uc3QgY2hhciAq ZXJybXNnID0gcmVxdWVzdC0+ZXJyb3I7CisKKwkvKgorCSAqIFVzZXItZGVmaW5lZCBmbG93cyBh cmUgY2FsbGVkIG91dCBleHBsaWNpdGx5IHNvIHRoYXQgdGhlIHVzZXIga25vd3Mgd2hvCisJICog dG8gYmxhbWUuIEJ1aWx0aW4gZmxvd3MgZG9uJ3QgbmVlZCB0aGF0IGV4dHJhIG1lc3NhZ2UgbGVu Z3RoOyB3ZSBleHBlY3QKKwkgKiB0aGVtIHRvIGFsd2F5cyBmaWxsIGluIHJlcXVlc3QtPmVycm9y IG9uIGZhaWx1cmUgYW55d2F5LgorCSAqLworCWlmIChzdGF0ZS0+YnVpbHRpbikKKwl7CisJCWlm ICghZXJybXNnKQorCQl7CisJCQkvKgorCQkJICogRG9uJ3QgdHVybiBhIGJ1ZyBoZXJlIGludG8g YSBjcmFzaCBpbiBwcm9kdWN0aW9uLCBidXQgZG9uJ3QKKwkJCSAqIGJvdGhlciB0cmFuc2xhdGlu ZyBlaXRoZXIuCisJCQkgKi8KKwkJCUFzc2VydChmYWxzZSk7CisJCQllcnJtc2cgPSAiYnVpbHRp biBmbG93IGZhaWxlZCBidXQgZGlkIG5vdCBwcm92aWRlIGFuIGVycm9yIG1lc3NhZ2UiOworCQl9 CiAKLQlpZiAocmVxdWVzdC0+ZXJyb3IpCisJCWFwcGVuZFBRRXhwQnVmZmVyU3RyKCZjb25uLT5l cnJvck1lc3NhZ2UsIGVycm1zZyk7CisJfQorCWVsc2UKIAl7Ci0JCWFwcGVuZFBRRXhwQnVmZmVy U3RyKCZjb25uLT5lcnJvck1lc3NhZ2UsICI6ICIpOwotCQlhcHBlbmRQUUV4cEJ1ZmZlclN0cigm Y29ubi0+ZXJyb3JNZXNzYWdlLCByZXF1ZXN0LT5lcnJvcik7CisJCWFwcGVuZFBRRXhwQnVmZmVy U3RyKCZjb25uLT5lcnJvck1lc3NhZ2UsCisJCQkJCQkJIGxpYnBxX2dldHRleHQoInVzZXItZGVm aW5lZCBPQXV0aCBmbG93IGZhaWxlZCIpKTsKKwkJaWYgKGVycm1zZykKKwkJeworCQkJYXBwZW5k UFFFeHBCdWZmZXJTdHIoJmNvbm4tPmVycm9yTWVzc2FnZSwgIjogIik7CisJCQlhcHBlbmRQUUV4 cEJ1ZmZlclN0cigmY29ubi0+ZXJyb3JNZXNzYWdlLCBlcnJtc2cpOworCQl9CiAJfQogCiAJYXBw ZW5kUFFFeHBCdWZmZXJDaGFyKCZjb25uLT5lcnJvck1lc3NhZ2UsICdcbicpOwogfQogCiAvKgot ICogQ2FsbGJhY2sgaW1wbGVtZW50YXRpb24gb2YgY29ubi0+YXN5bmNfYXV0aCgpIGZvciBhIHVz ZXItZGVmaW5lZCBPQXV0aCBmbG93LgotICogRGVsZWdhdGVzIHRoZSByZXRyaWV2YWwgb2YgdGhl IHRva2VuIHRvIHRoZSBhcHBsaWNhdGlvbidzIGFzeW5jIGNhbGxiYWNrLgorICogQ2FsbGJhY2sg aW1wbGVtZW50YXRpb24gb2YgY29ubi0+YXN5bmNfYXV0aCgpIGZvciBPQXV0aCBmbG93cy4gRGVs ZWdhdGVzIHRoZQorICogcmV0cmlldmFsIG9mIHRoZSB0b2tlbiB0byB0aGUgUEdvYXV0aEJlYXJl clJlcXVlc3RWMi5hc3luYygpIGNhbGxiYWNrLgogICoKLSAqIFRoaXMgd2lsbCBiZSBjYWxsZWQg bXVsdGlwbGUgdGltZXMgYXMgbmVlZGVkOyB0aGUgYXBwbGljYXRpb24gaXMgcmVzcG9uc2libGUK LSAqIGZvciBzZXR0aW5nIGFuIGFsdHNvY2sgdG8gc2lnbmFsIGFuZCByZXR1cm5pbmcgdGhlIGNv cnJlY3QgUEdSRVNfUE9MTElOR18qCisgKiBUaGlzIHdpbGwgYmUgY2FsbGVkIG11bHRpcGxlIHRp bWVzIGFzIG5lZWRlZDsgdGhlIGNhbGxiYWNrIGlzIHJlc3BvbnNpYmxlIGZvcgorICogc2V0dGlu ZyBhbiBhbHRzb2NrIHRvIHNpZ25hbCBhbmQgcmV0dXJuaW5nIHRoZSBjb3JyZWN0IFBHUkVTX1BP TExJTkdfKgogICogc3RhdHVzZXMgZm9yIHVzZSBieSBQUWNvbm5lY3RQb2xsKCkuCiAgKi8KIHN0 YXRpYyBQb3N0Z3Jlc1BvbGxpbmdTdGF0dXNUeXBlCi1ydW5fdXNlcl9vYXV0aF9mbG93KFBHY29u biAqY29ubikKK3J1bl9vYXV0aF9mbG93KFBHY29ubiAqY29ubikKIHsKIAlmZV9vYXV0aF9zdGF0 ZSAqc3RhdGUgPSBjb25uLT5zYXNsX3N0YXRlOwogCVBHb2F1dGhCZWFyZXJSZXF1ZXN0VjIgKnJl cXVlc3QgPSBzdGF0ZS0+YXN5bmNfY3R4OwpAQCAtNzExLDYgKzczNSw3IEBAIHJ1bl91c2VyX29h dXRoX2Zsb3coUEdjb25uICpjb25uKQogCiAJaWYgKCFyZXF1ZXN0LT52MS5hc3luYykKIAl7CisJ CUFzc2VydCghc3RhdGUtPmJ1aWx0aW4pOwkvKiBiZSB2ZXJ5IG5vaXN5IGlmIG91ciBjb2RlIGRv ZXMgdGhpcyAqLwogCQlsaWJwcV9hcHBlbmRfY29ubl9lcnJvcihjb25uLAogCQkJCQkJCQkidXNl ci1kZWZpbmVkIE9BdXRoIGZsb3cgcHJvdmlkZWQgbmVpdGhlciBhIHRva2VuIG5vciBhbiBhc3lu YyBjYWxsYmFjayIpOwogCQlyZXR1cm4gUEdSRVNfUE9MTElOR19GQUlMRUQ7CkBAIC03MjIsNyAr NzQ3LDcgQEAgcnVuX3VzZXJfb2F1dGhfZmxvdyhQR2Nvbm4gKmNvbm4pCiAKIAlpZiAoc3RhdHVz ID09IFBHUkVTX1BPTExJTkdfRkFJTEVEKQogCXsKLQkJcmVwb3J0X3VzZXJfZmxvd19lcnJvcihj b25uLCByZXF1ZXN0KTsKKwkJcmVwb3J0X2Zsb3dfZXJyb3IoY29ubiwgcmVxdWVzdCk7CiAJCXJl dHVybiBzdGF0dXM7CiAJfQogCWVsc2UgaWYgKHN0YXR1cyA9PSBQR1JFU19QT0xMSU5HX09LKQpA QCAtNzM0LDYgKzc1OSw3IEBAIHJ1bl91c2VyX29hdXRoX2Zsb3coUEdjb25uICpjb25uKQogCQkg Ki8KIAkJaWYgKCFyZXF1ZXN0LT52MS50b2tlbikKIAkJeworCQkJQXNzZXJ0KCFzdGF0ZS0+YnVp bHRpbik7CiAJCQlsaWJwcV9hcHBlbmRfY29ubl9lcnJvcihjb25uLAogCQkJCQkJCQkJInVzZXIt ZGVmaW5lZCBPQXV0aCBmbG93IGRpZCBub3QgcHJvdmlkZSBhIHRva2VuIik7CiAJCQlyZXR1cm4g UEdSRVNfUE9MTElOR19GQUlMRUQ7CkBAIC03NTIsNiArNzc4LDcgQEAgcnVuX3VzZXJfb2F1dGhf ZmxvdyhQR2Nvbm4gKmNvbm4pCiAJLyogVGhlIGhvb2sgd2FudHMgdGhlIGNsaWVudCB0byBwb2xs IHRoZSBhbHRzb2NrLiBNYWtlIHN1cmUgaXQgc2V0IG9uZS4gKi8KIAlpZiAoY29ubi0+YWx0c29j ayA9PSBQR0lOVkFMSURfU09DS0VUKQogCXsKKwkJQXNzZXJ0KCFzdGF0ZS0+YnVpbHRpbik7CiAJ CWxpYnBxX2FwcGVuZF9jb25uX2Vycm9yKGNvbm4sCiAJCQkJCQkJCSJ1c2VyLWRlZmluZWQgT0F1 dGggZmxvdyBkaWQgbm90IHByb3ZpZGUgYSBzb2NrZXQgZm9yIHBvbGxpbmciKTsKIAkJcmV0dXJu IFBHUkVTX1BPTExJTkdfRkFJTEVEOwpAQCAtNzYxLDEyICs3ODgsMTYgQEAgcnVuX3VzZXJfb2F1 dGhfZmxvdyhQR2Nvbm4gKmNvbm4pCiB9CiAKIC8qCi0gKiBDbGVhbnVwIGNhbGxiYWNrIGZvciB0 aGUgYXN5bmMgdXNlciBmbG93LiBEZWxlZ2F0ZXMgbW9zdCBvZiBpdHMgam9iIHRvCisgKiBDbGVh bnVwIGNhbGxiYWNrIGZvciB0aGUgYXN5bmMgZmxvdy4gRGVsZWdhdGVzIG1vc3Qgb2YgaXRzIGpv YiB0bwogICogUEdvYXV0aEJlYXJlclJlcXVlc3RWMi5jbGVhbnVwKCksIHRoZW4gZGlzY29ubmVj dHMgdGhlIGFsdHNvY2sgYW5kIGZyZWVzIHRoZQogICogcmVxdWVzdCBpdHNlbGYuCisgKgorICog VGhpcyBpcyBjYWxsZWQgZWl0aGVyIGF0IHRoZSBlbmQgb2YgYSBzdWNjZXNzZnVsIGF1dGhlbnRp Y2F0aW9uLCBvciBkdXJpbmcKKyAqIHBxRHJvcENvbm5lY3Rpb24oKSwgc28gd2Ugd29uJ3QgbGVh ayByZXNvdXJjZXMgZXZlbiBpZiBQUWNvbm5lY3RQb2xsKCkgbmV2ZXIKKyAqIGNhbGxzIHVzIGJh Y2suCiAgKi8KIHN0YXRpYyB2b2lkCi1jbGVhbnVwX3VzZXJfb2F1dGhfZmxvdyhQR2Nvbm4gKmNv bm4pCitjbGVhbnVwX29hdXRoX2Zsb3coUEdjb25uICpjb25uKQogewogCWZlX29hdXRoX3N0YXRl ICpzdGF0ZSA9IGNvbm4tPnNhc2xfc3RhdGU7CiAJUEdvYXV0aEJlYXJlclJlcXVlc3RWMiAqcmVx dWVzdCA9IHN0YXRlLT5hc3luY19jdHg7CkBAIC03ODYsMTIgKzgxNywxNiBAQCBjbGVhbnVwX3Vz ZXJfb2F1dGhfZmxvdyhQR2Nvbm4gKmNvbm4pCiAgKgogICogVGhlcmUgYXJlIHRocmVlIHBvdGVu dGlhbCBpbXBsZW1lbnRhdGlvbnMgb2YgdXNlX2J1aWx0aW5fZmxvdzoKICAqCi0gKiAxKSBJZiB0 aGUgT0F1dGggY2xpZW50IGlzIGRpc2FibGVkIGF0IGNvbmZpZ3VyYXRpb24gdGltZSwgcmV0dXJu IGZhbHNlLgorICogMSkgSWYgdGhlIE9BdXRoIGNsaWVudCBpcyBkaXNhYmxlZCBhdCBjb25maWd1 cmF0aW9uIHRpbWUsIHJldHVybiB6ZXJvLgogICogICAgRGVwZW5kZW50IGNsaWVudHMgbXVzdCBw cm92aWRlIHRoZWlyIG93biBmbG93LgogICogMikgSWYgdGhlIE9BdXRoIGNsaWVudCBpcyBlbmFi bGVkIGFuZCBVU0VfRFlOQU1JQ19PQVVUSCBpcyBkZWZpbmVkLCBkbG9wZW4oKQogICogICAgdGhl IGxpYnBxLW9hdXRoIHBsdWdpbiBhbmQgdXNlIGl0cyBpbXBsZW1lbnRhdGlvbi4KICAqIDMpIE90 aGVyd2lzZSwgdXNlIGZsb3cgY2FsbGJhY2tzIHRoYXQgYXJlIHN0YXRpY2FsbHkgbGlua2VkIGlu dG8gdGhlCiAgKiAgICBleGVjdXRhYmxlLgorICoKKyAqIEZvciBjYWxsZXIgY29udmVuaWVuY2Us IHRoZSByZXR1cm4gdmFsdWUgZm9sbG93cyB0aGUgY29udmVudGlvbiBvZgorICogUFFhdXRoRGF0 YUhvb2s6IHplcm8gbWVhbnMgbm8gaW1wbGVtZW50YXRpb24gaXMgcHJvdmlkZWQsIG5lZ2F0aXZl IGluZGljYXRlcworICogZmFpbHVyZSwgYW5kIHBvc2l0aXZlIGluZGljYXRlcyBzdWNjZXNzLgog ICovCiAKICNpZiAhZGVmaW5lZChVU0VfTElCQ1VSTCkKQEAgLTgwMCwxMCArODM1LDEwIEBAIGNs ZWFudXBfdXNlcl9vYXV0aF9mbG93KFBHY29ubiAqY29ubikKICAqIFRoaXMgY29uZmlndXJhdGlv biBkb2Vzbid0IHN1cHBvcnQgdGhlIGJ1aWx0aW4gZmxvdy4KICAqLwogCi1ib29sCi11c2VfYnVp bHRpbl9mbG93KFBHY29ubiAqY29ubiwgZmVfb2F1dGhfc3RhdGUgKnN0YXRlKQorc3RhdGljIGlu dAordXNlX2J1aWx0aW5fZmxvdyhQR2Nvbm4gKmNvbm4sIGZlX29hdXRoX3N0YXRlICpzdGF0ZSwg UEdvYXV0aEJlYXJlclJlcXVlc3RWMiAqcmVxdWVzdCkKIHsKLQlyZXR1cm4gZmFsc2U7CisJcmV0 dXJuIDA7CiB9CiAKICNlbGlmIGRlZmluZWQoVVNFX0RZTkFNSUNfT0FVVEgpCkBAIC04MTQsMzYg Kzg0OSw2IEBAIHVzZV9idWlsdGluX2Zsb3coUEdjb25uICpjb25uLCBmZV9vYXV0aF9zdGF0ZSAq c3RhdGUpCiAKIHR5cGVkZWYgY2hhciAqKCpsaWJwcV9nZXR0ZXh0X2Z1bmMpIChjb25zdCBjaGFy ICptc2dpZCk7CiAKLS8qCi0gKiBEZWZpbmUgYWNjZXNzb3IvbXV0YXRvciBzaGltcyB0byBpbmpl Y3QgaW50byBsaWJwcS1vYXV0aCwgc28gdGhhdCBpdCBkb2Vzbid0Ci0gKiBkZXBlbmQgb24gdGhl IG9mZnNldHMgd2l0aGluIFBHY29ubi4gKFRoZXNlIGhhdmUgY2hhbmdlZCBkdXJpbmcgbWlub3Ig dmVyc2lvbgotICogdXBkYXRlcyBpbiB0aGUgcGFzdC4pCi0gKi8KLQotI2RlZmluZSBERUZJTkVf R0VUVEVSKFRZUEUsIE1FTUJFUikgXAotCXR5cGVkZWYgVFlQRSAoKmNvbm5fICMjIE1FTUJFUiAj IyBfZnVuYykgKFBHY29ubiAqY29ubik7IFwKLQlzdGF0aWMgVFlQRSBjb25uXyAjIyBNRU1CRVIo UEdjb25uICpjb25uKSB7IHJldHVybiBjb25uLT5NRU1CRVI7IH0KLQotLyogTGlrZSBERUZJTkVf R0VUVEVSLCBidXQgcmV0dXJucyBhIHBvaW50ZXIgdG8gdGhlIG1lbWJlci4gKi8KLSNkZWZpbmUg REVGSU5FX0dFVFRFUl9QKFRZUEUsIE1FTUJFUikgXAotCXR5cGVkZWYgVFlQRSAoKmNvbm5fICMj IE1FTUJFUiAjIyBfZnVuYykgKFBHY29ubiAqY29ubik7IFwKLQlzdGF0aWMgVFlQRSBjb25uXyAj IyBNRU1CRVIoUEdjb25uICpjb25uKSB7IHJldHVybiAmY29ubi0+TUVNQkVSOyB9Ci0KLSNkZWZp bmUgREVGSU5FX1NFVFRFUihUWVBFLCBNRU1CRVIpIFwKLQl0eXBlZGVmIHZvaWQgKCpzZXRfY29u bl8gIyMgTUVNQkVSICMjIF9mdW5jKSAoUEdjb25uICpjb25uLCBUWVBFIHZhbCk7IFwKLQlzdGF0 aWMgdm9pZCBzZXRfY29ubl8gIyMgTUVNQkVSKFBHY29ubiAqY29ubiwgVFlQRSB2YWwpIHsgY29u bi0+TUVNQkVSID0gdmFsOyB9Ci0KLURFRklORV9HRVRURVJfUChQUUV4cEJ1ZmZlciwgZXJyb3JN ZXNzYWdlKTsKLURFRklORV9HRVRURVIoY2hhciAqLCBvYXV0aF9jbGllbnRfaWQpOwotREVGSU5F X0dFVFRFUihjaGFyICosIG9hdXRoX2NsaWVudF9zZWNyZXQpOwotREVGSU5FX0dFVFRFUihjaGFy ICosIG9hdXRoX2Rpc2NvdmVyeV91cmkpOwotREVGSU5FX0dFVFRFUihjaGFyICosIG9hdXRoX2lz c3Vlcl9pZCk7Ci1ERUZJTkVfR0VUVEVSKGNoYXIgKiwgb2F1dGhfc2NvcGUpOwotREVGSU5FX0dF VFRFUihmZV9vYXV0aF9zdGF0ZSAqLCBzYXNsX3N0YXRlKTsKLQotREVGSU5FX1NFVFRFUihwZ3Nv Y2tldCwgYWx0c29jayk7Ci1ERUZJTkVfU0VUVEVSKGNoYXIgKiwgb2F1dGhfdG9rZW4pOwotCiAv KgogICogTG9hZHMgdGhlIGxpYnBxLW9hdXRoIHBsdWdpbiB2aWEgZGxvcGVuKCksIGluaXRpYWxp emVzIGl0LCBhbmQgcGx1Z3MgaXRzCiAgKiBjYWxsYmFja3MgaW50byB0aGUgY29ubmVjdGlvbidz IGFzeW5jIGF1dGggaGFuZGxlcnMuCkBAIC04NTIsMjcgKzg1NywxOSBAQCBERUZJTkVfU0VUVEVS KGNoYXIgKiwgb2F1dGhfdG9rZW4pOwogICogaGFuZGxlIHRoZSB1c2UgY2FzZSB3aGVyZSB0aGUg YnVpbGQgc3VwcG9ydHMgbG9hZGluZyBhIGZsb3cgYnV0IGEgdXNlciBkb2VzCiAgKiBub3Qgd2Fu dCB0byBpbnN0YWxsIGl0LiBUcm91Ymxlc2hvb3Rpbmcgb2YgbGlua2VyL2xvYWRlciBmYWlsdXJl cyBjYW4gYmUgZG9uZQogICogdmlhIFBHT0FVVEhERUJVRy4KKyAqCisgKiBUaGUgbGlmZXRpbWUg b2YgKnJlcXVlc3QgZW5kcyBzaG9ydGx5IGFmdGVyIHRoaXMgY2FsbCwgc28gaXQgbXVzdCBiZSBj b3BpZWQKKyAqIHRvIGxvbmdlci1saXZlZCBzdG9yYWdlLgogICovCi1ib29sCi11c2VfYnVpbHRp bl9mbG93KFBHY29ubiAqY29ubiwgZmVfb2F1dGhfc3RhdGUgKnN0YXRlKQorc3RhdGljIGludAor dXNlX2J1aWx0aW5fZmxvdyhQR2Nvbm4gKmNvbm4sIGZlX29hdXRoX3N0YXRlICpzdGF0ZSwgUEdv YXV0aEJlYXJlclJlcXVlc3RWMiAqcmVxdWVzdCkKIHsKIAlzdGF0aWMgYm9vbCBpbml0aWFsaXpl ZCA9IGZhbHNlOwogCXN0YXRpYyBwdGhyZWFkX211dGV4X3QgaW5pdF9tdXRleCA9IFBUSFJFQURf TVVURVhfSU5JVElBTElaRVI7CiAJaW50CQkJbG9ja2VycjsKIAotCXZvaWQJCSgqaW5pdCkgKHBn dGhyZWFkbG9ja190IHRocmVhZGxvY2ssCi0JCQkJCQkgbGlicHFfZ2V0dGV4dF9mdW5jIGdldHRl eHRfaW1wbCwKLQkJCQkJCSBjb25uX2Vycm9yTWVzc2FnZV9mdW5jIGVycm1zZ19pbXBsLAotCQkJ CQkJIGNvbm5fb2F1dGhfY2xpZW50X2lkX2Z1bmMgY2xpZW50aWRfaW1wbCwKLQkJCQkJCSBjb25u X29hdXRoX2NsaWVudF9zZWNyZXRfZnVuYyBjbGllbnRzZWNyZXRfaW1wbCwKLQkJCQkJCSBjb25u X29hdXRoX2Rpc2NvdmVyeV91cmlfZnVuYyBkaXNjb3Zlcnl1cmlfaW1wbCwKLQkJCQkJCSBjb25u X29hdXRoX2lzc3Vlcl9pZF9mdW5jIGlzc3VlcmlkX2ltcGwsCi0JCQkJCQkgY29ubl9vYXV0aF9z Y29wZV9mdW5jIHNjb3BlX2ltcGwsCi0JCQkJCQkgY29ubl9zYXNsX3N0YXRlX2Z1bmMgc2FzbHN0 YXRlX2ltcGwsCi0JCQkJCQkgc2V0X2Nvbm5fYWx0c29ja19mdW5jIHNldGFsdHNvY2tfaW1wbCwK LQkJCQkJCSBzZXRfY29ubl9vYXV0aF90b2tlbl9mdW5jIHNldHRva2VuX2ltcGwpOwotCVBvc3Rn cmVzUG9sbGluZ1N0YXR1c1R5cGUgKCpmbG93KSAoUEdjb25uICpjb25uKTsKLQl2b2lkCQkoKmNs ZWFudXApIChQR2Nvbm4gKmNvbm4pOworCXZvaWQJCSgqaW5pdCkgKGxpYnBxX2dldHRleHRfZnVu YyBnZXR0ZXh0X2ltcGwpOworCWludAkJCSgqc3RhcnRfZmxvdykgKFBHY29ubiAqY29ubiwgUEdv YXV0aEJlYXJlclJlcXVlc3RWMiAqcmVxdWVzdCk7CiAKIAkvKgogCSAqIE9uIG1hY09TIG9ubHks IGxvYWQgdGhlIG1vZHVsZSB1c2luZyBpdHMgYWJzb2x1dGUgaW5zdGFsbCBwYXRoOyB0aGUKQEAg LTg4NSw5ICs4ODIsOSBAQCB1c2VfYnVpbHRpbl9mbG93KFBHY29ubiAqY29ubiwgZmVfb2F1dGhf c3RhdGUgKnN0YXRlKQogCSAqLwogCWNvbnN0IGNoYXIgKmNvbnN0IG1vZHVsZV9uYW1lID0KICNp ZiBkZWZpbmVkKF9fZGFyd2luX18pCi0JCUxJQkRJUiAiL2xpYnBxLW9hdXRoLSIgUEdfTUFKT1JW RVJTSU9OIERMU1VGRklYOworCQlMSUJESVIgIi9saWJwcS1vYXV0aCIgRExTVUZGSVg7CiAjZWxz ZQotCQkibGlicHEtb2F1dGgtIiBQR19NQUpPUlZFUlNJT04gRExTVUZGSVg7CisJCSJsaWJwcS1v YXV0aCIgRExTVUZGSVg7CiAjZW5kaWYKIAogCXN0YXRlLT5idWlsdGluX2Zsb3cgPSBkbG9wZW4o bW9kdWxlX25hbWUsIFJUTERfTk9XIHwgUlRMRF9MT0NBTCk7CkBAIC05MDMsMTIgKzkwMCwxMSBA QCB1c2VfYnVpbHRpbl9mbG93KFBHY29ubiAqY29ubiwgZmVfb2F1dGhfc3RhdGUgKnN0YXRlKQog CQlpZiAob2F1dGhfdW5zYWZlX2RlYnVnZ2luZ19lbmFibGVkKCkpCiAJCQlmcHJpbnRmKHN0ZGVy ciwgImZhaWxlZCBkbG9wZW4gZm9yIGxpYnBxLW9hdXRoOiAlc1xuIiwgZGxlcnJvcigpKTsKIAot CQlyZXR1cm4gZmFsc2U7CisJCXJldHVybiAwOwogCX0KIAogCWlmICgoaW5pdCA9IGRsc3ltKHN0 YXRlLT5idWlsdGluX2Zsb3csICJsaWJwcV9vYXV0aF9pbml0IikpID09IE5VTEwKLQkJfHwgKGZs b3cgPSBkbHN5bShzdGF0ZS0+YnVpbHRpbl9mbG93LCAicGdfZmVfcnVuX29hdXRoX2Zsb3ciKSkg PT0gTlVMTAotCQl8fCAoY2xlYW51cCA9IGRsc3ltKHN0YXRlLT5idWlsdGluX2Zsb3csICJwZ19m ZV9jbGVhbnVwX29hdXRoX2Zsb3ciKSkgPT0gTlVMTCkKKwkJfHwgKHN0YXJ0X2Zsb3cgPSBkbHN5 bShzdGF0ZS0+YnVpbHRpbl9mbG93LCAicGdfc3RhcnRfb2F1dGhiZWFyZXIiKSkgPT0gTlVMTCkK IAl7CiAJCS8qCiAJCSAqIFRoaXMgaXMgbW9yZSBvZiBhbiBlcnJvciBjb25kaXRpb24gdGhhbiB0 aGUgb25lIGFib3ZlLCBidXQgZHVlIHRvCkBAIC05MTgsNyArOTE0LDcgQEAgdXNlX2J1aWx0aW5f ZmxvdyhQR2Nvbm4gKmNvbm4sIGZlX29hdXRoX3N0YXRlICpzdGF0ZSkKIAkJCWZwcmludGYoc3Rk ZXJyLCAiZmFpbGVkIGRsc3ltIGZvciBsaWJwcS1vYXV0aDogJXNcbiIsIGRsZXJyb3IoKSk7CiAK IAkJZGxjbG9zZShzdGF0ZS0+YnVpbHRpbl9mbG93KTsKLQkJcmV0dXJuIGZhbHNlOworCQlyZXR1 cm4gMDsKIAl9CiAKIAkvKgpAQCAtOTM4LDU2ICs5MzQsNDAgQEAgdXNlX2J1aWx0aW5fZmxvdyhQ R2Nvbm4gKmNvbm4sIGZlX29hdXRoX3N0YXRlICpzdGF0ZSkKIAkJQXNzZXJ0KGZhbHNlKTsKIAog CQlsaWJwcV9hcHBlbmRfY29ubl9lcnJvcihjb25uLCAiZmFpbGVkIHRvIGxvY2sgbXV0ZXggKCVk KSIsIGxvY2tlcnIpOwotCQlyZXR1cm4gZmFsc2U7CisJCXJldHVybiAwOwogCX0KIAogCWlmICgh aW5pdGlhbGl6ZWQpCiAJewotCQlpbml0KHBnX2dfdGhyZWFkbG9jaywKKwkJaW5pdCgKICNpZmRl ZiBFTkFCTEVfTkxTCi0JCQkgbGlicHFfZ2V0dGV4dCwKKwkJCSBsaWJwcV9nZXR0ZXh0CiAjZWxz ZQotCQkJIE5VTEwsCisJCQkgTlVMTAogI2VuZGlmCi0JCQkgY29ubl9lcnJvck1lc3NhZ2UsCi0J CQkgY29ubl9vYXV0aF9jbGllbnRfaWQsCi0JCQkgY29ubl9vYXV0aF9jbGllbnRfc2VjcmV0LAot CQkJIGNvbm5fb2F1dGhfZGlzY292ZXJ5X3VyaSwKLQkJCSBjb25uX29hdXRoX2lzc3Vlcl9pZCwK LQkJCSBjb25uX29hdXRoX3Njb3BlLAotCQkJIGNvbm5fc2FzbF9zdGF0ZSwKLQkJCSBzZXRfY29u bl9hbHRzb2NrLAotCQkJIHNldF9jb25uX29hdXRoX3Rva2VuKTsKKwkJCSk7CiAKIAkJaW5pdGlh bGl6ZWQgPSB0cnVlOwogCX0KIAogCXB0aHJlYWRfbXV0ZXhfdW5sb2NrKCZpbml0X211dGV4KTsK IAotCS8qIFNldCBvdXIgYXN5bmNocm9ub3VzIGNhbGxiYWNrcy4gKi8KLQljb25uLT5hc3luY19h dXRoID0gZmxvdzsKLQljb25uLT5jbGVhbnVwX2FzeW5jX2F1dGggPSBjbGVhbnVwOwotCi0JcmV0 dXJuIHRydWU7CisJcmV0dXJuIChzdGFydF9mbG93KGNvbm4sIHJlcXVlc3QpID09IDApID8gMSA6 IC0xOwogfQogCiAjZWxzZQogCiAvKgotICogVXNlIHRoZSBidWlsdGluIGZsb3cgaW4gbGlicHEt b2F1dGguYSAoc2VlIGxpYnBxLW9hdXRoL29hdXRoLWN1cmwuaCkuCisgKiBGb3Igc3RhdGljIGJ1 aWxkcywgd2UgY2FuIGp1c3QgY2FsbCBwZ19zdGFydF9vYXV0aGJlYXJlcigpIGRpcmVjdGx5LiBJ dCdzCisgKiBwcm92aWRlZCBieSBsaWJwcS1vYXV0aC5hLgogICovCiAKLWV4dGVybiBQb3N0Z3Jl c1BvbGxpbmdTdGF0dXNUeXBlIHBnX2ZlX3J1bl9vYXV0aF9mbG93KFBHY29ubiAqY29ubik7Ci1l eHRlcm4gdm9pZCBwZ19mZV9jbGVhbnVwX29hdXRoX2Zsb3coUEdjb25uICpjb25uKTsKK2V4dGVy biBpbnQJcGdfc3RhcnRfb2F1dGhiZWFyZXIoUEdjb25uICpjb25uLCBQR29hdXRoQmVhcmVyUmVx dWVzdFYyICpyZXF1ZXN0KTsKIAotYm9vbAotdXNlX2J1aWx0aW5fZmxvdyhQR2Nvbm4gKmNvbm4s IGZlX29hdXRoX3N0YXRlICpzdGF0ZSkKK3N0YXRpYyBpbnQKK3VzZV9idWlsdGluX2Zsb3coUEdj b25uICpjb25uLCBmZV9vYXV0aF9zdGF0ZSAqc3RhdGUsIFBHb2F1dGhCZWFyZXJSZXF1ZXN0VjIg KnJlcXVlc3QpCiB7Ci0JLyogU2V0IG91ciBhc3luY2hyb25vdXMgY2FsbGJhY2tzLiAqLwotCWNv bm4tPmFzeW5jX2F1dGggPSBwZ19mZV9ydW5fb2F1dGhfZmxvdzsKLQljb25uLT5jbGVhbnVwX2Fz eW5jX2F1dGggPSBwZ19mZV9jbGVhbnVwX29hdXRoX2Zsb3c7Ci0KLQlyZXR1cm4gdHJ1ZTsKKwly ZXR1cm4gKHBnX3N0YXJ0X29hdXRoYmVhcmVyKGNvbm4sIHJlcXVlc3QpID09IDApID8gMSA6IC0x OwogfQogCiAjZW5kaWYJCQkJCQkJLyogVVNFX0xJQkNVUkwgKi8KQEAgLTEwMDAsMTEgKzk4MCwx MSBAQCB1c2VfYnVpbHRpbl9mbG93KFBHY29ubiAqY29ubiwgZmVfb2F1dGhfc3RhdGUgKnN0YXRl KQogICogSWYgdGhlIGFwcGxpY2F0aW9uIGhhcyByZWdpc3RlcmVkIGEgY3VzdG9tIGZsb3cgaGFu ZGxlciB1c2luZwogICogUFFBVVRIREFUQV9PQVVUSF9CRUFSRVJfVE9LRU5bX1YyXSwgaXQgbWF5 IGVpdGhlciByZXR1cm4gYSB0b2tlbiBpbW1lZGlhdGVseQogICogKGUuZy4gaWYgaXQgaGFzIG9u ZSBjYWNoZWQgZm9yIGltbWVkaWF0ZSB1c2UpLCBvciBzZXQgdXAgZm9yIGEgc2VyaWVzIG9mCi0g KiBhc3luY2hyb25vdXMgY2FsbGJhY2tzIHdoaWNoIHdpbGwgYmUgbWFuYWdlZCBieSBydW5fdXNl cl9vYXV0aF9mbG93KCkuCisgKiBhc3luY2hyb25vdXMgY2FsbGJhY2tzIHdoaWNoIHdpbGwgYmUg bWFuYWdlZCBieSBydW5fb2F1dGhfZmxvdygpLgogICoKICAqIElmIHRoZSBkZWZhdWx0IGhhbmRs ZXIgaXMgdXNlZCBpbnN0ZWFkLCBhIERldmljZSBBdXRob3JpemF0aW9uIGZsb3cgaXMgdXNlZAot ICogZm9yIHRoZSBjb25uZWN0aW9uIGlmIHN1cHBvcnQgaGFzIGJlZW4gY29tcGlsZWQgaW4uIChT ZWUKLSAqIGZlLWF1dGgtb2F1dGgtY3VybC5jIGZvciBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzLikK KyAqIGZvciB0aGUgY29ubmVjdGlvbiBpZiBzdXBwb3J0IGhhcyBiZWVuIGNvbXBpbGVkIGluLiAo U2VlIG9hdXRoLWN1cmwuYyBmb3IKKyAqIGltcGxlbWVudGF0aW9uIGRldGFpbHMuKQogICoKICAq IElmIG5laXRoZXIgYSBjdXN0b20gaGFuZGxlciBub3IgdGhlIGJ1aWx0aW4gZmxvdyBpcyBhdmFp bGFibGUsIHRoZSBjb25uZWN0aW9uCiAgKiBmYWlscyBoZXJlLgpAQCAtMTAyNiwxMSArMTAwNiwx NyBAQCBzZXR1cF90b2tlbl9yZXF1ZXN0KFBHY29ubiAqY29ubiwgZmVfb2F1dGhfc3RhdGUgKnN0 YXRlKQogCiAJLyoKIAkgKiBUaGUgY2xpZW50IG1heSBoYXZlIG92ZXJyaWRkZW4gdGhlIE9BdXRo IGZsb3cuIFRyeSB0aGUgdjIgaG9vayBmaXJzdCwKLQkgKiB0aGVuIGZhbGwgYmFjayB0byB0aGUg djEgaW1wbGVtZW50YXRpb24uCisJICogdGhlbiBmYWxsIGJhY2sgdG8gdGhlIHYxIGltcGxlbWVu dGF0aW9uLiBJZiBuZWl0aGVyIGlzIGF2YWlsYWJsZSwgdHJ5CisJICogdGhlIGJ1aWx0aW4gZmxv dy4KIAkgKi8KIAlyZXMgPSBQUWF1dGhEYXRhSG9vayhQUUFVVEhEQVRBX09BVVRIX0JFQVJFUl9U T0tFTl9WMiwgY29ubiwgJnJlcXVlc3QpOwogCWlmIChyZXMgPT0gMCkKIAkJcmVzID0gUFFhdXRo RGF0YUhvb2soUFFBVVRIREFUQV9PQVVUSF9CRUFSRVJfVE9LRU4sIGNvbm4sICZyZXF1ZXN0KTsK KwlpZiAocmVzID09IDApCisJeworCQlzdGF0ZS0+YnVpbHRpbiA9IHRydWU7CisJCXJlcyA9IHVz ZV9idWlsdGluX2Zsb3coY29ubiwgc3RhdGUsICZyZXF1ZXN0KTsKKwl9CiAKIAlpZiAocmVzID4g MCkKIAl7CkBAIC0xMDY1LDE2ICsxMDUxLDE2IEBAIHNldHVwX3Rva2VuX3JlcXVlc3QoUEdjb25u ICpjb25uLCBmZV9vYXV0aF9zdGF0ZSAqc3RhdGUpCiAKIAkJKnJlcXVlc3RfY29weSA9IHJlcXVl c3Q7CiAKLQkJY29ubi0+YXN5bmNfYXV0aCA9IHJ1bl91c2VyX29hdXRoX2Zsb3c7Ci0JCWNvbm4t PmNsZWFudXBfYXN5bmNfYXV0aCA9IGNsZWFudXBfdXNlcl9vYXV0aF9mbG93OworCQljb25uLT5h c3luY19hdXRoID0gcnVuX29hdXRoX2Zsb3c7CisJCWNvbm4tPmNsZWFudXBfYXN5bmNfYXV0aCA9 IGNsZWFudXBfb2F1dGhfZmxvdzsKIAkJc3RhdGUtPmFzeW5jX2N0eCA9IHJlcXVlc3RfY29weTsK IAl9CiAJZWxzZSBpZiAocmVzIDwgMCkKIAl7Ci0JCXJlcG9ydF91c2VyX2Zsb3dfZXJyb3IoY29u biwgJnJlcXVlc3QpOworCQlyZXBvcnRfZmxvd19lcnJvcihjb25uLCAmcmVxdWVzdCk7CiAJCWdv dG8gZmFpbDsKIAl9Ci0JZWxzZSBpZiAoIXVzZV9idWlsdGluX2Zsb3coY29ubiwgc3RhdGUpKQor CWVsc2UKIAl7CiAJCWxpYnBxX2FwcGVuZF9jb25uX2Vycm9yKGNvbm4sICJubyBPQXV0aCBmbG93 cyBhcmUgYXZhaWxhYmxlICh0cnkgaW5zdGFsbGluZyB0aGUgbGlicHEtb2F1dGggcGFja2FnZSki KTsKIAkJZ290byBmYWlsOwotLSAKMi4zNC4xCgo= --00000000000032285b064bd372e9 Content-Type: application/octet-stream; name="v4-0005-libpq-oauth-Never-link-against-libpq-s-encoding-f.patch" Content-Disposition: attachment; filename="v4-0005-libpq-oauth-Never-link-against-libpq-s-encoding-f.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mm5arsup5 RnJvbSA2Y2Y0YTE0ODJlZDdiODU5NDZhMTNlMzkyNzhhMWIxNTY4YjE0ZTA4IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBKYWNvYiBDaGFtcGlvbiA8amFjb2IuY2hhbXBpb25AZW50ZXJw cmlzZWRiLmNvbT4KRGF0ZTogV2VkLCAzIERlYyAyMDI1IDA5OjUzOjQ0IC0wODAwClN1YmplY3Q6 IFtQQVRDSCB2NCA1LzZdIGxpYnBxLW9hdXRoOiBOZXZlciBsaW5rIGFnYWluc3QgbGlicHEncyBl bmNvZGluZwogZnVuY3Rpb25zCgpOb3cgdGhhdCBsaWJwcS1vYXV0aCBkb2Vzbid0IGhhdmUgdG8g bWF0Y2ggdGhlIG1ham9yIHZlcnNpb24gb2YgbGlicHEsCnNvbWUgdGhpbmdzIGluIHBnX3djaGFy LmggYXJlIHRlY2huaWNhbGx5IHVuc2FmZSBmb3IgdXMgdG8gdXNlLiAoU2VlCmI2YzdjZmFjOCBm b3IgYSBmdWxsZXIgZGlzY3Vzc2lvbi4pIFRoaXMgaXMgdW5saWtlbHkgdG8gYmUgYSBwcm9ibGVt IC0tCndlIG9ubHkgY2FyZSBhYm91dCBVVEYtOCBpbiB0aGUgY29udGV4dCBvZiBPQXV0aCByaWdo dCBub3cgLS0gYnV0IGlmCmFueW9uZSBkaWQgaW50cm9kdWNlIGEgd2F5IHRvIGhpdCBpdCwgaXQn ZCBiZSBleHRyZW1lbHkgZGlmZmljdWx0IHRvCmRlYnVnIG9yIHJlcHJvZHVjZSwgYW5kIGl0J2Qg YmUgYSBwb3RlbnRpYWwgc2VjdXJpdHkgdnVsbmVyYWJpbGl0eSB0bwpib290LgoKRGVmaW5lIFVT RV9QUklWQVRFX0VOQ09ESU5HX0ZVTkNTIHNvIHRoYXQgYW55b25lIHdobyB0cmllcyB0byBhZGQg YQpkZXBlbmRlbmN5IG9uIHRoZSBleHBvcnRlZCBBUElzIHdpbGwgc2ltcGx5IGZhaWwgdG8gbGlu ayB0aGUgc2hhcmVkCm1vZHVsZS4KClJldmlld2VkLWJ5OiBDaGFvIExpIDxsaS5ldmFuLmNoYW9A Z21haWwuY29tPgpSZXZpZXdlZC1ieTogWnNvbHQgUGFycmFnaSA8enNvbHQucGFycmFnaUBwZXJj b25hLmNvbT4KRGlzY3Vzc2lvbjogaHR0cHM6Ly9wb3N0Z3IuZXMvbS9DQU9ZbWklMkJtckdnJTJC bl9YMk1PTGdlV2NqM3ZfTTAwZ1I4dXpfRDdtTTh6JTNEZFgxSllWYmclNDBtYWlsLmdtYWlsLmNv bQotLS0KIHNyYy9pbnRlcmZhY2VzL2xpYnBxLW9hdXRoL21lc29uLmJ1aWxkIHwgMTAgKysrKysr KysrLQogc3JjL2ludGVyZmFjZXMvbGlicHEtb2F1dGgvTWFrZWZpbGUgICAgfCAxMSArKysrKysr KystLQogMiBmaWxlcyBjaGFuZ2VkLCAxOCBpbnNlcnRpb25zKCspLCAzIGRlbGV0aW9ucygtKQoK ZGlmZiAtLWdpdCBhL3NyYy9pbnRlcmZhY2VzL2xpYnBxLW9hdXRoL21lc29uLmJ1aWxkIGIvc3Jj L2ludGVyZmFjZXMvbGlicHEtb2F1dGgvbWVzb24uYnVpbGQKaW5kZXggNjg1YTAwYWNmN2EuLmVh M2E5MDBmNGYxIDEwMDY0NAotLS0gYS9zcmMvaW50ZXJmYWNlcy9saWJwcS1vYXV0aC9tZXNvbi5i dWlsZAorKysgYi9zcmMvaW50ZXJmYWNlcy9saWJwcS1vYXV0aC9tZXNvbi5idWlsZApAQCAtMTIs NyArMTIsMTUgQEAgbGlicHFfb2F1dGhfc291cmNlcyA9IGZpbGVzKAogbGlicHFfb2F1dGhfc29f c291cmNlcyA9IGZpbGVzKAogICAnb2F1dGgtdXRpbHMuYycsCiApCi1saWJwcV9vYXV0aF9zb19j X2FyZ3MgPSBbJy1EVVNFX0RZTkFNSUNfT0FVVEgnXQorbGlicHFfb2F1dGhfc29fY19hcmdzID0g WworICAnLURVU0VfRFlOQU1JQ19PQVVUSCcsCisKKyAgIyBBIGJpdCBvZiBmb3J3YXJkLWxvb2tp bmcgcGFyYW5vaWE6IGRvbid0IGFsbG93IGFueW9uZSB0byBhY2NpZGVudGFsbHkgZGVwZW5kCisg ICMgb24gdGhlIGVuY29kaW5nIElEcyBjb21pbmcgZnJvbSBsaWJwcS4gVGhleSdyZSBub3QgZ3Vh cmFudGVlZCB0byBtYXRjaCB0aGUKKyAgIyBJRHMgaW4gdXNlIGJ5IG91ciB2ZXJzaW9uIG9mIHBn Y29tbW9uLCBub3cgdGhhdCB3ZSBhbGxvdyB0aGUgbWFqb3IgdmVyc2lvbgorICAjIG9mIGxpYnBx IHRvIGRpZmZlciBmcm9tIHRoZSBtYWpvciB2ZXJzaW9uIG9mIGxpYnBxLW9hdXRoLgorICAnLURV U0VfUFJJVkFURV9FTkNPRElOR19GVU5DUycsCitdCiAKIGV4cG9ydF9maWxlID0gY3VzdG9tX3Rh cmdldCgnbGlicHEtb2F1dGguZXhwb3J0cycsCiAgIGt3YXJnczogZ2VuX2V4cG9ydF9rd2FyZ3Ms CmRpZmYgLS1naXQgYS9zcmMvaW50ZXJmYWNlcy9saWJwcS1vYXV0aC9NYWtlZmlsZSBiL3NyYy9p bnRlcmZhY2VzL2xpYnBxLW9hdXRoL01ha2VmaWxlCmluZGV4IGU5MDQ4MjU2NmIxLi4yMzEzNDkw MzRkMSAxMDA2NDQKLS0tIGEvc3JjL2ludGVyZmFjZXMvbGlicHEtb2F1dGgvTWFrZWZpbGUKKysr IGIvc3JjL2ludGVyZmFjZXMvbGlicHEtb2F1dGgvTWFrZWZpbGUKQEAgLTI0LDYgKzI0LDE0IEBA IG92ZXJyaWRlIHNobGliIDo9IGxpYiQoTkFNRSkkKERMU1VGRklYKQogb3ZlcnJpZGUgQ1BQRkxB R1MgOj0gLUkkKGxpYnBxX3NyY2RpcikgLUkkKHRvcF9idWlsZGRpcikvc3JjL3BvcnQgJChDUFBG TEFHUykgJChMSUJDVVJMX0NQUEZMQUdTKQogb3ZlcnJpZGUgQ0ZMQUdTICs9ICQoUFRIUkVBRF9D RkxBR1MpCiAKK292ZXJyaWRlIENQUEZMQUdTX1NITElCIDo9IC1EVVNFX0RZTkFNSUNfT0FVVEgK KworIyBBIGJpdCBvZiBmb3J3YXJkLWxvb2tpbmcgcGFyYW5vaWE6IGRvbid0IGFsbG93IGxpYnBx LW9hdXRoLnNvIHRvIGFjY2lkZW50YWxseQorIyBkZXBlbmQgb24gdGhlIGVuY29kaW5nIElEcyBj b21pbmcgZnJvbSBsaWJwcS4gVGhleSdyZSBub3QgZ3VhcmFudGVlZCB0byBtYXRjaAorIyB0aGUg SURzIGluIHVzZSBieSBvdXIgdmVyc2lvbiBvZiBwZ2NvbW1vbiwgbm93IHRoYXQgd2UgYWxsb3cg dGhlIG1ham9yIHZlcnNpb24KKyMgb2YgbGlicHEgdG8gZGlmZmVyIGZyb20gdGhlIG1ham9yIHZl cnNpb24gb2YgbGlicHEtb2F1dGguCitvdmVycmlkZSBDUFBGTEFHU19TSExJQiArPSAtRFVTRV9Q UklWQVRFX0VOQ09ESU5HX0ZVTkNTCisKIE9CSlMgPSBcCiAJJChXSU4zMlJFUykKIApAQCAtMzQs OCArNDIsNyBAQCBPQkpTX1NITElCID0gXAogCW9hdXRoLWN1cmxfc2hsaWIubyBcCiAJb2F1dGgt dXRpbHMubyBcCiAKLW9hdXRoLXV0aWxzLm86IG92ZXJyaWRlIENQUEZMQUdTICs9IC1EVVNFX0RZ TkFNSUNfT0FVVEgKLW9hdXRoLWN1cmxfc2hsaWIubzogb3ZlcnJpZGUgQ1BQRkxBR1NfU0hMSUIg Kz0gLURVU0VfRFlOQU1JQ19PQVVUSAorb2F1dGgtdXRpbHMubzogb3ZlcnJpZGUgQ1BQRkxBR1Mg Kz0gJChDUFBGTEFHU19TSExJQikKIAogIyBBZGQgc2hsaWItL3N0bGliLXNwZWNpZmljIG9iamVj dHMuCiAkKHNobGliKTogb3ZlcnJpZGUgT0JKUyArPSAkKE9CSlNfU0hMSUIpCi0tIAoyLjM0LjEK Cg== --00000000000032285b064bd372e9 Content-Type: application/octet-stream; name="v4-0006-WIP-Introduce-third-party-OAuth-flow-plugins.patch" Content-Disposition: attachment; filename="v4-0006-WIP-Introduce-third-party-OAuth-flow-plugins.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mm5arvjw6 RnJvbSBmNGU3ODdmYWNjZGY4YjcwN2QzYmYyZDlhMzc5YjVhMjBmNTQ2NDVmIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBKYWNvYiBDaGFtcGlvbiA8amFjb2IuY2hhbXBpb25AZW50ZXJw cmlzZWRiLmNvbT4KRGF0ZTogV2VkLCAzIERlYyAyMDI1IDE1OjQ3OjIzIC0wODAwClN1YmplY3Q6 IFtQQVRDSCB2NCA2LzZdIFdJUDogSW50cm9kdWNlIHRoaXJkLXBhcnR5IE9BdXRoIGZsb3cgcGx1 Z2lucz8KCltOb3QgaW50ZW5kZWQgZm9yIFBHMTkuXQoKVGhpcyBleHBlcmltZW50YWwgY29tbWl0 IHByb21vdGVzIHRoZSBwZ19zdGFydF9vYXV0aGJlYXJlciBBUEkgdG8gYQpwdWJsaWMgaGVhZGVy IChsaWJwcS1vYXV0aC5oKSBhbmQgYWRkcyBhIFBHT0FVVEhNT0RVTEUgZW52aXJvbm1lbnQKdmFy aWFibGUgdGhhdCBvdmVycmlkZXMgdGhlIGxvYWQgcGF0aCBmb3IgdGhlIHBsdWdpbiwgYWxsb3dp bmcgdXNlcnMgdG8KcHJvdmlkZSB0aGVpciBvd24uIFRoZSBsaWJwcV9vYXV0aF9pbml0IGZ1bmN0 aW9uIGlzIG5vdyBvcHRpb25hbCwgYW5kCndpbGwgcmVtYWluIHVuZG9jdW1lbnRlZC4gKE1vZHVs ZXMgdGhhdCBkb24ndCBwcm92aWRlIGl0IGFyZSBtYXJrZWQgYXMKdXNlci1kZWZpbmVkLikKClRo aXMgaXMgYSByZWxhdGl2ZWx5IHNtYWxsIGFtb3VudCBvZiBpbXBsZW1lbnRhdGlvbiBjaGFuZ2Us IGJ1dAp1bmZvcnR1bmF0ZWx5IHRoZSB0ZXN0cyBoYXZlIGEgbGFyZ2UgYW1vdW50IG9mIGNvZGUg bW90aW9uIHRvIGJlIGFibGUgdG8Kc2hhcmUgbG9naWMgYmV0d2VlbiB0aGUgdGVzdCBleGVjdXRh YmxlIGFuZCBwbHVnaW4uIEkgbWlnaHQgbmVlZCB0bwpzcGxpdCB0aGF0IGludG8gbXVsdGlwbGUg c3F1YXNoISBjb21taXRzIHRvIG1ha2UgaXQgbW9yZSBlYXNpbHkKcmV2aWV3YWJsZS4KClRPRE86 IGZpZ3VyZSBvdXQgUEdETExFWFBPUlQsIHdoaWNoIHdlIGRvIG5vdCBjdXJyZW50bHkgcHJvdmlk ZSBwdWJsaWNseQpUT0RPOiBsb2NrIGRvd24gUEdPQVVUSE1PRFVMRSBhcyBuZWNlc3NhcnkgdG8g YXZvaWQgaW50cm9kdWNpbmcgZXhjaXRpbmcKICAgICAgbmV3IHZ1bG5lcmFiaWxpdGllcwpUT0RP OiBob3cgaGFyZCB3b3VsZCBpdCBiZSB0byBzdXBwb3J0IFdpbmRvd3MgaGVyZT8KClJldmlld2Vk LWJ5OiBac29sdCBQYXJyYWdpIDx6c29sdC5wYXJyYWdpQHBlcmNvbmEuY29tPgpEaXNjdXNzaW9u OiBodHRwczovL3Bvc3Rnci5lcy9tL0NBT1ltaSUyQm1yR2clMkJuX1gyTU9MZ2VXY2ozdl9NMDBn Ujh1el9EN21NOHolM0RkWDFKWVZiZyU0MG1haWwuZ21haWwuY29tCi0tLQogc3JjL2ludGVyZmFj ZXMvbGlicHEvbWVzb24uYnVpbGQgICAgICAgICAgICAgIHwgICAxICsKIHNyYy9pbnRlcmZhY2Vz L2xpYnBxL01ha2VmaWxlICAgICAgICAgICAgICAgICB8ICAgMiArCiBzcmMvaW50ZXJmYWNlcy9s aWJwcS1vYXV0aC9vYXV0aC1jdXJsLmggICAgICAgfCAgMjQgLS0KIHNyYy9pbnRlcmZhY2VzL2xp YnBxL2ZlLWF1dGgtb2F1dGguaCAgICAgICAgICB8ICAgMiArLQogc3JjL2ludGVyZmFjZXMvbGli cHEvbGlicHEtb2F1dGguaCAgICAgICAgICAgIHwgIDUyICsrKwogc3JjL2ludGVyZmFjZXMvbGli cHEtb2F1dGgvb2F1dGgtY3VybC5jICAgICAgIHwgICAyICstCiBzcmMvaW50ZXJmYWNlcy9saWJw cS9mZS1hdXRoLW9hdXRoLmMgICAgICAgICAgfCAxMjYgKysrKy0tCiBzcmMvdGVzdC9tb2R1bGVz L29hdXRoX3ZhbGlkYXRvci9tZXNvbi5idWlsZCAgfCAgMTUgKwogc3JjL3Rlc3QvbW9kdWxlcy9v YXV0aF92YWxpZGF0b3IvTWFrZWZpbGUgICAgIHwgIDEwICstCiAuLi4vb2F1dGhfdmFsaWRhdG9y L29hdXRoX3Rlc3RfY29tbW9uLmggICAgICAgfCAgMjYgKysKIHNyYy90ZXN0L21vZHVsZXMvb2F1 dGhfdmFsaWRhdG9yL29hdXRoX2Zsb3cuYyB8ICA3MiArKysrCiAuLi4vb2F1dGhfdmFsaWRhdG9y L29hdXRoX2hvb2tfY2xpZW50LmMgICAgICAgfCAzMTkgKy0tLS0tLS0tLS0tLS0tCiAuLi4vb2F1 dGhfdmFsaWRhdG9yL29hdXRoX3Rlc3RfY29tbW9uLmMgICAgICAgfCAzNzQgKysrKysrKysrKysr KysrKysrCiAuLi4vbW9kdWxlcy9vYXV0aF92YWxpZGF0b3IvdC8wMDJfY2xpZW50LnBsICAgfCAg NTYgKystCiAxNCBmaWxlcyBjaGFuZ2VkLCA2OTUgaW5zZXJ0aW9ucygrKSwgMzg2IGRlbGV0aW9u cygtKQogZGVsZXRlIG1vZGUgMTAwNjQ0IHNyYy9pbnRlcmZhY2VzL2xpYnBxLW9hdXRoL29hdXRo LWN1cmwuaAogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9pbnRlcmZhY2VzL2xpYnBxL2xpYnBxLW9h dXRoLmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvdGVzdC9tb2R1bGVzL29hdXRoX3ZhbGlkYXRv ci9vYXV0aF90ZXN0X2NvbW1vbi5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL3Rlc3QvbW9kdWxl cy9vYXV0aF92YWxpZGF0b3Ivb2F1dGhfZmxvdy5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL3Rl c3QvbW9kdWxlcy9vYXV0aF92YWxpZGF0b3Ivb2F1dGhfdGVzdF9jb21tb24uYwoKZGlmZiAtLWdp dCBhL3NyYy9pbnRlcmZhY2VzL2xpYnBxL21lc29uLmJ1aWxkIGIvc3JjL2ludGVyZmFjZXMvbGli cHEvbWVzb24uYnVpbGQKaW5kZXggYjBhZTcyMTY3YTEuLjRlYjAyOWNjMmE2IDEwMDY0NAotLS0g YS9zcmMvaW50ZXJmYWNlcy9saWJwcS9tZXNvbi5idWlsZAorKysgYi9zcmMvaW50ZXJmYWNlcy9s aWJwcS9tZXNvbi5idWlsZApAQCAtMTM1LDYgKzEzNSw3IEBAIHBrZ2NvbmZpZy5nZW5lcmF0ZSgK IGluc3RhbGxfaGVhZGVycygKICAgJ2xpYnBxLWZlLmgnLAogICAnbGlicHEtZXZlbnRzLmgnLAor ICAnbGlicHEtb2F1dGguaCcsCiApCiAKIGluc3RhbGxfaGVhZGVycygKZGlmZiAtLWdpdCBhL3Ny Yy9pbnRlcmZhY2VzL2xpYnBxL01ha2VmaWxlIGIvc3JjL2ludGVyZmFjZXMvbGlicHEvTWFrZWZp bGUKaW5kZXggMDk2Mzk5NWVlZDQuLmE2NWMzNmE2M2ZkIDEwMDY0NAotLS0gYS9zcmMvaW50ZXJm YWNlcy9saWJwcS9NYWtlZmlsZQorKysgYi9zcmMvaW50ZXJmYWNlcy9saWJwcS9NYWtlZmlsZQpA QCAtMTU3LDYgKzE1Nyw3IEBAICQodG9wX2J1aWxkZGlyKS9zcmMvcG9ydC9wZ19jb25maWdfcGF0 aHMuaDoKIGluc3RhbGw6IGFsbCBpbnN0YWxsZGlycyBpbnN0YWxsLWxpYgogCSQoSU5TVEFMTF9E QVRBKSAkKHNyY2RpcikvbGlicHEtZmUuaCAnJChERVNURElSKSQoaW5jbHVkZWRpciknCiAJJChJ TlNUQUxMX0RBVEEpICQoc3JjZGlyKS9saWJwcS1ldmVudHMuaCAnJChERVNURElSKSQoaW5jbHVk ZWRpciknCisJJChJTlNUQUxMX0RBVEEpICQoc3JjZGlyKS9saWJwcS1vYXV0aC5oICckKERFU1RE SVIpJChpbmNsdWRlZGlyKScKIAkkKElOU1RBTExfREFUQSkgJChzcmNkaXIpL2xpYnBxLWludC5o ICckKERFU1RESVIpJChpbmNsdWRlZGlyX2ludGVybmFsKScKIAkkKElOU1RBTExfREFUQSkgJChz cmNkaXIpL2ZlLWF1dGgtc2FzbC5oICckKERFU1RESVIpJChpbmNsdWRlZGlyX2ludGVybmFsKScK IAkkKElOU1RBTExfREFUQSkgJChzcmNkaXIpL3BxZXhwYnVmZmVyLmggJyQoREVTVERJUikkKGlu Y2x1ZGVkaXJfaW50ZXJuYWwpJwpAQCAtMTc5LDYgKzE4MCw3IEBAIGluc3RhbGxkaXJzOiBpbnN0 YWxsZGlycy1saWIKIHVuaW5zdGFsbDogdW5pbnN0YWxsLWxpYgogCXJtIC1mICckKERFU1RESVIp JChpbmNsdWRlZGlyKS9saWJwcS1mZS5oJwogCXJtIC1mICckKERFU1RESVIpJChpbmNsdWRlZGly KS9saWJwcS1ldmVudHMuaCcKKwlybSAtZiAnJChERVNURElSKSQoaW5jbHVkZWRpcikvbGlicHEt b2F1dGguaCcKIAlybSAtZiAnJChERVNURElSKSQoaW5jbHVkZWRpcl9pbnRlcm5hbCkvbGlicHEt aW50LmgnCiAJcm0gLWYgJyQoREVTVERJUikkKGluY2x1ZGVkaXJfaW50ZXJuYWwpL2ZlLWF1dGgt c2FzbC5oJwogCXJtIC1mICckKERFU1RESVIpJChpbmNsdWRlZGlyX2ludGVybmFsKS9wcWV4cGJ1 ZmZlci5oJwpkaWZmIC0tZ2l0IGEvc3JjL2ludGVyZmFjZXMvbGlicHEtb2F1dGgvb2F1dGgtY3Vy bC5oIGIvc3JjL2ludGVyZmFjZXMvbGlicHEtb2F1dGgvb2F1dGgtY3VybC5oCmRlbGV0ZWQgZmls ZSBtb2RlIDEwMDY0NAppbmRleCAxZDRkZDc2NjIxNy4uMDAwMDAwMDAwMDAKLS0tIGEvc3JjL2lu dGVyZmFjZXMvbGlicHEtb2F1dGgvb2F1dGgtY3VybC5oCisrKyAvZGV2L251bGwKQEAgLTEsMjQg KzAsMCBAQAotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKgotICogb2F1dGgtY3VybC5oCi0gKgotICoJ ICBEZWZpbml0aW9ucyBmb3IgT0F1dGggRGV2aWNlIEF1dGhvcml6YXRpb24gbW9kdWxlCi0gKgot ICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAxOTk2LTIwMjYsIFBvc3RncmVTUUwgR2xvYmFsIERl dmVsb3BtZW50IEdyb3VwCi0gKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDE5OTQsIFJlZ2VudHMg b2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYQotICoKLSAqIHNyYy9pbnRlcmZhY2VzL2xp YnBxLW9hdXRoL29hdXRoLWN1cmwuaAotICoKLSAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICovCi0KLSNp Zm5kZWYgT0FVVEhfQ1VSTF9ICi0jZGVmaW5lIE9BVVRIX0NVUkxfSAotCi0jaW5jbHVkZSAibGli cHEtZmUuaCIKLQotLyogRXhwb3J0ZWQgZmxvdyBjYWxsYmFjay4gKi8KLWV4dGVybiBQR0RMTEVY UE9SVCBpbnQgcGdfc3RhcnRfb2F1dGhiZWFyZXIoUEdjb25uICpjb25uLAotCQkJCQkJCQkJCQlQ R29hdXRoQmVhcmVyUmVxdWVzdFYyICpyZXF1ZXN0KTsKLQotI2VuZGlmCQkJCQkJCS8qIE9BVVRI X0NVUkxfSCAqLwpkaWZmIC0tZ2l0IGEvc3JjL2ludGVyZmFjZXMvbGlicHEvZmUtYXV0aC1vYXV0 aC5oIGIvc3JjL2ludGVyZmFjZXMvbGlicHEvZmUtYXV0aC1vYXV0aC5oCmluZGV4IDUxMTI4NDYx NGY3Li41Yzk1MTg3ZjZkOCAxMDA2NDQKLS0tIGEvc3JjL2ludGVyZmFjZXMvbGlicHEvZmUtYXV0 aC1vYXV0aC5oCisrKyBiL3NyYy9pbnRlcmZhY2VzL2xpYnBxL2ZlLWF1dGgtb2F1dGguaApAQCAt MzUsNyArMzUsNyBAQCB0eXBlZGVmIHN0cnVjdAogCXZvaWQJICAgKmFzeW5jX2N0eDsKIAogCWJv b2wJCWJ1aWx0aW47Ci0Jdm9pZAkgICAqYnVpbHRpbl9mbG93OworCXZvaWQJICAgKmZsb3dfbW9k dWxlOwogfSBmZV9vYXV0aF9zdGF0ZTsKIAogZXh0ZXJuIHZvaWQgcHFDbGVhck9BdXRoVG9rZW4o UEdjb25uICpjb25uKTsKZGlmZiAtLWdpdCBhL3NyYy9pbnRlcmZhY2VzL2xpYnBxL2xpYnBxLW9h dXRoLmggYi9zcmMvaW50ZXJmYWNlcy9saWJwcS9saWJwcS1vYXV0aC5oCm5ldyBmaWxlIG1vZGUg MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4yYTYyYjMzMGIxYwotLS0gL2Rldi9udWxsCisrKyBi L3NyYy9pbnRlcmZhY2VzL2xpYnBxL2xpYnBxLW9hdXRoLmgKQEAgLTAsMCArMSw1MiBAQAorLyot LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tCisgKgorICogbGlicHEtb2F1dGguaAorICoJICBUaGlzIGZpbGUgY29u dGFpbnMgc3RydWN0cyBhbmQgZnVuY3Rpb25zIHVzZWQgYnkgY3VzdG9tIE9BdXRoIHBsdWdpbnMu CisgKgorICogQ29weXJpZ2h0IChjKSAyMDI1LCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVu dCBHcm91cAorICoKKyAqIHNyYy9pbnRlcmZhY2VzL2xpYnBxL2xpYnBxLW9hdXRoLmgKKyAqCisg Ki0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0KKyAqLworCisjaWZuZGVmIExJQlBRX09BVVRIX0gKKyNkZWZpbmUg TElCUFFfT0FVVEhfSAorCisjaW5jbHVkZSAibGlicHEtZmUuaCIKKworI2lmZGVmIF9fY3BsdXNw bHVzCitleHRlcm4gIkMiCit7CisjZW5kaWYKKworLyogWFhYIGNhbid0IHJlbHkgb24gYy5oLCBi dXQgZHVwbGljYXRpbmcgdGhpcyBpcyBhc2tpbmcgZm9yIHRyb3VibGUgKi8KKyNpZm5kZWYgUEdE TExFWFBPUlQKKyNpZmRlZiBfV0lOMzIKKyNkZWZpbmUgUEdETExFWFBPUlQgX19kZWNsc3BlYyAo ZGxsZXhwb3J0KQorI2VsaWYgZGVmaW5lZChfX2hhc19hdHRyaWJ1dGUpCisjaWYgX19oYXNfYXR0 cmlidXRlKHZpc2liaWxpdHkpCisjZGVmaW5lIFBHRExMRVhQT1JUIF9fYXR0cmlidXRlX18oKHZp c2liaWxpdHkoImRlZmF1bHQiKSkpCisjZWxzZQorI2RlZmluZSBQR0RMTEVYUE9SVAorI2VuZGlm CisjZWxzZQorI2RlZmluZSBQR0RMTEVYUE9SVAorI2VuZGlmCisjZW5kaWYKKworLyoKKyAqIFYx IEFQSQorICoKKyAqIEZsb3cgcGx1Z2lucyBtdXN0IHByb3ZpZGUgYW4gaW1wbGVtZW50YXRpb24g b2YgdGhpcyBjYWxsYmFjay4KKyAqCisgKiBUT0RPOiBwcm92aWRlIGEgbWFnaWMgc3RydWN0IHRo YXQgYWxsb3dzIGJhY2t3YXJkcyBidXQgbm90IGZvcndhcmRzIGNvbXBhdD8KKyAqLworZXh0ZXJu IFBHRExMRVhQT1JUIGludCBwZ19zdGFydF9vYXV0aGJlYXJlcihQR2Nvbm4gKmNvbm4sCisJCQkJ CQkJCQkJCVBHb2F1dGhCZWFyZXJSZXF1ZXN0VjIgKnJlcXVlc3QpOworCisjaWZkZWYgX19jcGx1 c3BsdXMKK30KKyNlbmRpZgorCisjZW5kaWYJCQkJCQkJLyogTElCUFFfT0FVVEhfSCAqLwpkaWZm IC0tZ2l0IGEvc3JjL2ludGVyZmFjZXMvbGlicHEtb2F1dGgvb2F1dGgtY3VybC5jIGIvc3JjL2lu dGVyZmFjZXMvbGlicHEtb2F1dGgvb2F1dGgtY3VybC5jCmluZGV4IDA1MmVjZDMyZGEyLi40MDBj YTA3YzI5NyAxMDA2NDQKLS0tIGEvc3JjL2ludGVyZmFjZXMvbGlicHEtb2F1dGgvb2F1dGgtY3Vy bC5jCisrKyBiL3NyYy9pbnRlcmZhY2VzL2xpYnBxLW9hdXRoL29hdXRoLWN1cmwuYwpAQCAtMjks OCArMjksOCBAQAogI2VuZGlmCiAKICNpbmNsdWRlICJjb21tb24vanNvbmFwaS5oIgorI2luY2x1 ZGUgImxpYnBxLW9hdXRoLmgiCiAjaW5jbHVkZSAibWIvcGdfd2NoYXIuaCIKLSNpbmNsdWRlICJv YXV0aC1jdXJsLmgiCiAKICNpZmRlZiBVU0VfRFlOQU1JQ19PQVVUSAogCmRpZmYgLS1naXQgYS9z cmMvaW50ZXJmYWNlcy9saWJwcS9mZS1hdXRoLW9hdXRoLmMgYi9zcmMvaW50ZXJmYWNlcy9saWJw cS9mZS1hdXRoLW9hdXRoLmMKaW5kZXggOTA0ZjQzZTkwZWEuLmUzN2UzZjY5NDI0IDEwMDY0NAot LS0gYS9zcmMvaW50ZXJmYWNlcy9saWJwcS9mZS1hdXRoLW9hdXRoLmMKKysrIGIvc3JjL2ludGVy ZmFjZXMvbGlicHEvZmUtYXV0aC1vYXV0aC5jCkBAIC0xNyw2ICsxNyw4IEBACiAKICNpZmRlZiBV U0VfRFlOQU1JQ19PQVVUSAogI2luY2x1ZGUgPGRsZmNuLmg+CisjZWxzZQorI2luY2x1ZGUgImxp YnBxLW9hdXRoLmgiCiAjZW5kaWYKIAogI2luY2x1ZGUgImNvbW1vbi9iYXNlNjQuaCIKQEAgLTg4 MCw0MSArODgyLDY4IEBAIHVzZV9idWlsdGluX2Zsb3coUEdjb25uICpjb25uLCBmZV9vYXV0aF9z dGF0ZSAqc3RhdGUsIFBHb2F1dGhCZWFyZXJSZXF1ZXN0VjIgKnJlCiAJICogT24gdGhlIG90aGVy IHBsYXRmb3JtcywgbG9hZCB0aGUgbW9kdWxlIHVzaW5nIG9ubHkgdGhlIGJhc2VuYW1lLCB0bwog CSAqIHJlbHkgb24gdGhlIHJ1bnRpbWUgbGlua2VyJ3Mgc3RhbmRhcmQgc2VhcmNoIGJlaGF2aW9y LgogCSAqLwotCWNvbnN0IGNoYXIgKmNvbnN0IG1vZHVsZV9uYW1lID0KKwljb25zdCBjaGFyICpt b2R1bGVfbmFtZSA9CiAjaWYgZGVmaW5lZChfX2Rhcndpbl9fKQogCQlMSUJESVIgIi9saWJwcS1v YXV0aCIgRExTVUZGSVg7CiAjZWxzZQogCQkibGlicHEtb2F1dGgiIERMU1VGRklYOwogI2VuZGlm CiAKLQlzdGF0ZS0+YnVpbHRpbl9mbG93ID0gZGxvcGVuKG1vZHVsZV9uYW1lLCBSVExEX05PVyB8 IFJUTERfTE9DQUwpOwotCWlmICghc3RhdGUtPmJ1aWx0aW5fZmxvdykKKwkvKi0KKwkgKiBBZGRp dGlvbmFsbHksIHRoZSB1c2VyIG1heSBvdmVycmlkZSB0aGUgbW9kdWxlIHBhdGggZXhwbGljaXRs eSB0byBiZQorCSAqIGFibGUgdG8gcHJvdmlkZSB0aGVpciBvd24gbW9kdWxlLCB2aWEgUEdPQVVU SE1PRFVMRS4KKwkgKgorCSAqIFRPRE86IGhhdmUgdG8gdGhpbmsgYWJvdXQgX2FsbF8gdGhlIHNl Y3VyaXR5IHJhbWlmaWNhdGlvbnMgb2YgdGhpcy4gV2hhdAorCSAqIGV4aXN0aW5nIHByb3RlY3Rp b25zIGluIExEX0xJQlJBUllfUEFUSCAoYW5kL29yIFNJUCkgYXJlIHdlIHBvdGVudGlhbGx5CisJ ICogYnlwYXNzaW5nPyBTaG91bGQgd2UgY2hlY2sgdGhlIHBlcm1pc3Npb25zIG9mIHRoZSBmaWxl IHNvbWVob3cuLi4/CisJICogVE9ETzogbWF5YmUgZGlzYWxsb3cgYW55dGhpbmcgbm90IHVuZGVy bmVhdGggTElCRElSPyBvciBQS0dMSUJESVI/CisJICogU2hvdWxkIGl0IGhhdmUgYSBuYW1pbmcg Y29udmVudGlvbj8KKwkgKi8KKwljb25zdCBjaGFyICplbnYgPSBnZXRlbnYoIlBHT0FVVEhNT0RV TEUiKTsKKworCWlmIChlbnYgJiYgZW52WzBdKQorCQltb2R1bGVfbmFtZSA9IGVudjsKKwllbHNl CisJCXN0YXRlLT5idWlsdGluID0gdHJ1ZTsKKworCXN0YXRlLT5mbG93X21vZHVsZSA9IGRsb3Bl bihtb2R1bGVfbmFtZSwgUlRMRF9OT1cgfCBSVExEX0xPQ0FMKTsKKwlpZiAoIXN0YXRlLT5mbG93 X21vZHVsZSkKIAl7CiAJCS8qCiAJCSAqIEZvciBlbmQgdXNlcnMsIHRoaXMgcHJvYmFibHkgaXNu J3QgYW4gZXJyb3IgY29uZGl0aW9uLCBpdCBqdXN0CiAJCSAqIG1lYW5zIHRoZSBmbG93IGlzbid0 IGluc3RhbGxlZC4gRGV2ZWxvcGVycyBhbmQgcGFja2FnZSBtYWludGFpbmVycwotCQkgKiBtYXkg d2FudCB0byBkZWJ1ZyB0aGlzIHZpYSB0aGUgUEdPQVVUSERFQlVHIGVudnZhciwgdGhvdWdoLgor CQkgKiBtYXkgd2FudCB0byBkZWJ1ZyB0aGlzIHZpYSB0aGUgUEdPQVVUSERFQlVHIGVudnZhciwg dGhvdWdoLCBhbmQgd2UKKwkJICogc2hvdWxkIGJlIG1vcmUgbm9pc3kgaWYgdXNlcnMgdHJpZWQg dG8gcHJvdmlkZSBhIFBHT0FVVEhNT0RVTEUuCiAJCSAqCiAJCSAqIE5vdGUgdGhhdCBQT1NJWCBk bGVycm9yKCkgaXNuJ3QgZ3VhcmFudGVlZCB0byBiZSB0aHJlYWRzYWZlLgogCQkgKi8KIAkJaWYg KG9hdXRoX3Vuc2FmZV9kZWJ1Z2dpbmdfZW5hYmxlZCgpKQotCQkJZnByaW50ZihzdGRlcnIsICJm YWlsZWQgZGxvcGVuIGZvciBsaWJwcS1vYXV0aDogJXNcbiIsIGRsZXJyb3IoKSk7CisJCQlmcHJp bnRmKHN0ZGVyciwgImZhaWxlZCBkbG9wZW4gZm9yICVzOiAlc1xuIiwgbW9kdWxlX25hbWUsIGRs ZXJyb3IoKSk7CisKKwkJaWYgKHN0YXRlLT5idWlsdGluKQorCQkJcmV0dXJuIDA7CiAKLQkJcmV0 dXJuIDA7CisJCXJlcXVlc3QtPmVycm9yID0gbGlicHFfZ2V0dGV4dCgicGx1Z2luIGNvdWxkIG5v dCBiZSBsb2FkZWQiKTsKKwkJcmV0dXJuIC0xOwogCX0KIAotCWlmICgoaW5pdCA9IGRsc3ltKHN0 YXRlLT5idWlsdGluX2Zsb3csICJsaWJwcV9vYXV0aF9pbml0IikpID09IE5VTEwKLQkJfHwgKHN0 YXJ0X2Zsb3cgPSBkbHN5bShzdGF0ZS0+YnVpbHRpbl9mbG93LCAicGdfc3RhcnRfb2F1dGhiZWFy ZXIiKSkgPT0gTlVMTCkKKwlpZiAoKHN0YXJ0X2Zsb3cgPSBkbHN5bShzdGF0ZS0+Zmxvd19tb2R1 bGUsICJwZ19zdGFydF9vYXV0aGJlYXJlciIpKSA9PSBOVUxMKQogCXsKIAkJLyoKIAkJICogVGhp cyBpcyBtb3JlIG9mIGFuIGVycm9yIGNvbmRpdGlvbiB0aGFuIHRoZSBvbmUgYWJvdmUsIGJ1dCBk dWUgdG8KIAkJICogdGhlIGRsZXJyb3IoKSB0aHJlYWRzYWZldHkgaXNzdWUsIGxvY2sgaXQgYmVo aW5kIFBHT0FVVEhERUJVRyB0b28uCiAJCSAqLwogCQlpZiAob2F1dGhfdW5zYWZlX2RlYnVnZ2lu Z19lbmFibGVkKCkpCi0JCQlmcHJpbnRmKHN0ZGVyciwgImZhaWxlZCBkbHN5bSBmb3IgbGlicHEt b2F1dGg6ICVzXG4iLCBkbGVycm9yKCkpOworCQkJZnByaW50ZihzdGRlcnIsICJmYWlsZWQgZGxz eW0gZm9yICVzOiAlc1xuIiwgbW9kdWxlX25hbWUsIGRsZXJyb3IoKSk7CisKKwkJZGxjbG9zZShz dGF0ZS0+Zmxvd19tb2R1bGUpOworCQlzdGF0ZS0+Zmxvd19tb2R1bGUgPSBOVUxMOworCisJCWlm IChzdGF0ZS0+YnVpbHRpbikKKwkJCXJldHVybiAwOwogCi0JCWRsY2xvc2Uoc3RhdGUtPmJ1aWx0 aW5fZmxvdyk7Ci0JCXJldHVybiAwOworCQlyZXF1ZXN0LT5lcnJvciA9IGxpYnBxX2dldHRleHQo InBsdWdpbiBlbnRyeSBwb2ludCBjb3VsZCBub3QgYmUgbG9jYXRlZCIpOworCQlyZXR1cm4gLTE7 CiAJfQogCiAJLyoKQEAgLTkyMywzNCArOTUyLDUwIEBAIHVzZV9idWlsdGluX2Zsb3coUEdjb25u ICpjb25uLCBmZV9vYXV0aF9zdGF0ZSAqc3RhdGUsIFBHb2F1dGhCZWFyZXJSZXF1ZXN0VjIgKnJl CiAJICovCiAKIAkvKgotCSAqIFdlIG5lZWQgdG8gaW5qZWN0IG5lY2Vzc2FyeSBmdW5jdGlvbiBw b2ludGVycyBpbnRvIHRoZSBtb2R1bGUuIFRoaXMKLQkgKiBvbmx5IG5lZWRzIHRvIGJlIGRvbmUg b25jZSAtLSBldmVuIGlmIHRoZSBwb2ludGVycyBhcmUgY29uc3RhbnQsCi0JICogYXNzaWduaW5n IHRoZW0gd2hpbGUgYW5vdGhlciB0aHJlYWQgaXMgZXhlY3V0aW5nIHRoZSBmbG93cyBmZWVscyBs aWtlCi0JICogdGVtcHRpbmcgZmF0ZS4KKwkgKiBPdXIgbGlicHEtb2F1dGguc28gcHJvdmlkZXMg YSBzcGVjaWFsIGluaXRpYWxpemF0aW9uIGZ1bmN0aW9uIGZvciBsaWJwcQorCSAqIGludGVncmF0 aW9uLiBJdCdzIG5vdCBhIHByb2JsZW0gaWYgd2UgZG9uJ3QgZmluZCB0aGlzOyBpdCBqdXN0IG1l YW5zCisJICogdGhhdCBhIHVzZXItZGVmaW5lZCBtb2R1bGUgaXMgYmVpbmcgdXNlZC4KIAkgKi8K LQlpZiAoKGxvY2tlcnIgPSBwdGhyZWFkX211dGV4X2xvY2soJmluaXRfbXV0ZXgpKSAhPSAwKQor CWluaXQgPSBkbHN5bShzdGF0ZS0+Zmxvd19tb2R1bGUsICJsaWJwcV9vYXV0aF9pbml0Iik7CisK KwlpZiAoIWluaXQpCisJCXN0YXRlLT5idWlsdGluID0gZmFsc2U7IC8qIGFkanVzdCBvdXIgZXJy b3IgbWVzc2FnZXMgKi8KKwllbHNlCiAJewotCQkvKiBTaG91bGQgbm90IGhhcHBlbi4uLiBidXQg ZG9uJ3QgY29udGludWUgaWYgaXQgZG9lcy4gKi8KLQkJQXNzZXJ0KGZhbHNlKTsKKwkJLyoKKwkJ ICogV2UgbmVlZCB0byBpbmplY3QgbmVjZXNzYXJ5IGZ1bmN0aW9uIHBvaW50ZXJzIGludG8gdGhl IG1vZHVsZS4gVGhpcworCQkgKiBvbmx5IG5lZWRzIHRvIGJlIGRvbmUgb25jZSAtLSBldmVuIGlm IHRoZSBwb2ludGVycyBhcmUgY29uc3RhbnQsCisJCSAqIGFzc2lnbmluZyB0aGVtIHdoaWxlIGFu b3RoZXIgdGhyZWFkIGlzIGV4ZWN1dGluZyB0aGUgZmxvd3MgZmVlbHMKKwkJICogbGlrZSB0ZW1w dGluZyBmYXRlLgorCQkgKi8KKwkJaWYgKChsb2NrZXJyID0gcHRocmVhZF9tdXRleF9sb2NrKCZp bml0X211dGV4KSkgIT0gMCkKKwkJeworCQkJLyogU2hvdWxkIG5vdCBoYXBwZW4uLi4gYnV0IGRv bid0IGNvbnRpbnVlIGlmIGl0IGRvZXMuICovCisJCQlBc3NlcnQoZmFsc2UpOwogCi0JCWxpYnBx X2FwcGVuZF9jb25uX2Vycm9yKGNvbm4sICJmYWlsZWQgdG8gbG9jayBtdXRleCAoJWQpIiwgbG9j a2Vycik7Ci0JCXJldHVybiAwOwotCX0KKwkJCWFwcGVuZFBRRXhwQnVmZmVyKCZjb25uLT5lcnJv ck1lc3NhZ2UsCisJCQkJCQkJICAidXNlX2J1aWx0aW5fZmxvdzogZmFpbGVkIHRvIGxvY2sgbXV0 ZXggKCVkKVxuIiwKKwkJCQkJCQkgIGxvY2tlcnIpOwogCi0JaWYgKCFpbml0aWFsaXplZCkKLQl7 Ci0JCWluaXQoCisJCQlyZXF1ZXN0LT5lcnJvciA9ICIiOwkvKiBzYXRpc2Z5IHJlcG9ydF9mbG93 X2Vycm9yKCkgKi8KKwkJCXJldHVybiAtMTsKKwkJfQorCisJCWlmICghaW5pdGlhbGl6ZWQpCisJ CXsKKwkJCWluaXQoCiAjaWZkZWYgRU5BQkxFX05MUwotCQkJIGxpYnBxX2dldHRleHQKKwkJCQkg bGlicHFfZ2V0dGV4dAogI2Vsc2UKLQkJCSBOVUxMCisJCQkJIE5VTEwKICNlbmRpZgotCQkJKTsK KwkJCQkpOwogCi0JCWluaXRpYWxpemVkID0gdHJ1ZTsKLQl9CisJCQlpbml0aWFsaXplZCA9IHRy dWU7CisJCX0KIAotCXB0aHJlYWRfbXV0ZXhfdW5sb2NrKCZpbml0X211dGV4KTsKKwkJcHRocmVh ZF9tdXRleF91bmxvY2soJmluaXRfbXV0ZXgpOworCX0KIAogCXJldHVybiAoc3RhcnRfZmxvdyhj b25uLCByZXF1ZXN0KSA9PSAwKSA/IDEgOiAtMTsKIH0KQEAgLTk2Nyw2ICsxMDEyLDcgQEAgZXh0 ZXJuIGludAlwZ19zdGFydF9vYXV0aGJlYXJlcihQR2Nvbm4gKmNvbm4sIFBHb2F1dGhCZWFyZXJS ZXF1ZXN0VjIgKnJlcXVlc3QpOwogc3RhdGljIGludAogdXNlX2J1aWx0aW5fZmxvdyhQR2Nvbm4g KmNvbm4sIGZlX29hdXRoX3N0YXRlICpzdGF0ZSwgUEdvYXV0aEJlYXJlclJlcXVlc3RWMiAqcmVx dWVzdCkKIHsKKwlzdGF0ZS0+YnVpbHRpbiA9IHRydWU7CiAJcmV0dXJuIChwZ19zdGFydF9vYXV0 aGJlYXJlcihjb25uLCByZXF1ZXN0KSA9PSAwKSA/IDEgOiAtMTsKIH0KIApAQCAtMTAxMywxMCAr MTA1OSw3IEBAIHNldHVwX3Rva2VuX3JlcXVlc3QoUEdjb25uICpjb25uLCBmZV9vYXV0aF9zdGF0 ZSAqc3RhdGUpCiAJaWYgKHJlcyA9PSAwKQogCQlyZXMgPSBQUWF1dGhEYXRhSG9vayhQUUFVVEhE QVRBX09BVVRIX0JFQVJFUl9UT0tFTiwgY29ubiwgJnJlcXVlc3QpOwogCWlmIChyZXMgPT0gMCkK LQl7Ci0JCXN0YXRlLT5idWlsdGluID0gdHJ1ZTsKIAkJcmVzID0gdXNlX2J1aWx0aW5fZmxvdyhj b25uLCBzdGF0ZSwgJnJlcXVlc3QpOwotCX0KIAogCWlmIChyZXMgPiAwKQogCXsKQEAgLTEwNTQs MTkgKzEwOTcsMTggQEAgc2V0dXBfdG9rZW5fcmVxdWVzdChQR2Nvbm4gKmNvbm4sIGZlX29hdXRo X3N0YXRlICpzdGF0ZSkKIAkJY29ubi0+YXN5bmNfYXV0aCA9IHJ1bl9vYXV0aF9mbG93OwogCQlj b25uLT5jbGVhbnVwX2FzeW5jX2F1dGggPSBjbGVhbnVwX29hdXRoX2Zsb3c7CiAJCXN0YXRlLT5h c3luY19jdHggPSByZXF1ZXN0X2NvcHk7CisKKwkJcmV0dXJuIHRydWU7CiAJfQotCWVsc2UgaWYg KHJlcyA8IDApCi0JeworCisJLyoKKwkgKiBGYWlsdXJlIGNhc2VzOiBlaXRoZXIgd2UgdHJpZWQg dG8gc2V0IHVwIGEgZmxvdyBhbmQgZmFpbGVkLCBvciB0aGVyZQorCSAqIHdhcyBubyBmbG93IHRv IHRyeS4KKwkgKi8KKwlpZiAocmVzIDwgMCkKIAkJcmVwb3J0X2Zsb3dfZXJyb3IoY29ubiwgJnJl cXVlc3QpOwotCQlnb3RvIGZhaWw7Ci0JfQogCWVsc2UKLQl7CiAJCWxpYnBxX2FwcGVuZF9jb25u X2Vycm9yKGNvbm4sICJubyBPQXV0aCBmbG93cyBhcmUgYXZhaWxhYmxlICh0cnkgaW5zdGFsbGlu ZyB0aGUgbGlicHEtb2F1dGggcGFja2FnZSkiKTsKLQkJZ290byBmYWlsOwotCX0KLQotCXJldHVy biB0cnVlOwogCiBmYWlsOgogCWlmIChyZXF1ZXN0LnYxLmNsZWFudXApCmRpZmYgLS1naXQgYS9z cmMvdGVzdC9tb2R1bGVzL29hdXRoX3ZhbGlkYXRvci9tZXNvbi5idWlsZCBiL3NyYy90ZXN0L21v ZHVsZXMvb2F1dGhfdmFsaWRhdG9yL21lc29uLmJ1aWxkCmluZGV4IGM0YjczZTA1Mjk3Li43MTQx MmYwZWNhYiAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvbW9kdWxlcy9vYXV0aF92YWxpZGF0b3IvbWVz b24uYnVpbGQKKysrIGIvc3JjL3Rlc3QvbW9kdWxlcy9vYXV0aF92YWxpZGF0b3IvbWVzb24uYnVp bGQKQEAgLTUwLDYgKzUwLDcgQEAgdGVzdF9pbnN0YWxsX2xpYnMgKz0gbWFnaWNfdmFsaWRhdG9y CiAKIG9hdXRoX2hvb2tfY2xpZW50X3NvdXJjZXMgPSBmaWxlcygKICAgJ29hdXRoX2hvb2tfY2xp ZW50LmMnLAorICAnb2F1dGhfdGVzdF9jb21tb24uYycsCiApCiAKIGlmIGhvc3Rfc3lzdGVtID09 ICd3aW5kb3dzJwpAQCAtNjcsNiArNjgsMTkgQEAgb2F1dGhfaG9va19jbGllbnQgPSBleGVjdXRh YmxlKCdvYXV0aF9ob29rX2NsaWVudCcsCiApCiB0ZXN0cHJlcF90YXJnZXRzICs9IG9hdXRoX2hv b2tfY2xpZW50CiAKK29hdXRoX2Zsb3cgPSBzaGFyZWRfbW9kdWxlKCdvYXV0aF9mbG93JywKKyAg ZmlsZXMoCisgICAgJ29hdXRoX2Zsb3cuYycsCisgICAgJ29hdXRoX3Rlc3RfY29tbW9uLmMnLAor ICApLAorICBpbmNsdWRlX2RpcmVjdG9yaWVzOiBbcG9zdGdyZXNfaW5jXSwKKyAgZGVwZW5kZW5j aWVzOiBbZnJvbnRlbmRfc2hsaWJfY29kZSwgbGlicHFdLAorICBrd2FyZ3M6IGRlZmF1bHRfbGli X2FyZ3MgKyB7CisgICAgJ2luc3RhbGwnOiBmYWxzZSwKKyAgfSwKKykKK3Rlc3RwcmVwX3Rhcmdl dHMgKz0gb2F1dGhfZmxvdworCiB0ZXN0cyArPSB7CiAgICduYW1lJzogJ29hdXRoX3ZhbGlkYXRv cicsCiAgICdzZCc6IG1lc29uLmN1cnJlbnRfc291cmNlX2RpcigpLApAQCAtODAsNiArOTQsNyBA QCB0ZXN0cyArPSB7CiAgICAgICAnUFlUSE9OJzogcHl0aG9uLmZ1bGxfcGF0aCgpLAogICAgICAg J3dpdGhfbGliY3VybCc6IG9hdXRoX2Zsb3dfc3VwcG9ydGVkID8gJ3llcycgOiAnbm8nLAogICAg ICAgJ3dpdGhfcHl0aG9uJzogJ3llcycsCisgICAgICAnZmxvd19tb2R1bGVfcGF0aCc6IG9hdXRo X2Zsb3cuZnVsbF9wYXRoKCksCiAgICAgfSwKICAgICAnZGVwcyc6IFtvYXV0aF9ob29rX2NsaWVu dF0sCiAgIH0sCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9tb2R1bGVzL29hdXRoX3ZhbGlkYXRvci9N YWtlZmlsZSBiL3NyYy90ZXN0L21vZHVsZXMvb2F1dGhfdmFsaWRhdG9yL01ha2VmaWxlCmluZGV4 IGNiNjRmMGYxNDM3Li5hMTdjNDI1OWFlYSAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvbW9kdWxlcy9v YXV0aF92YWxpZGF0b3IvTWFrZWZpbGUKKysrIGIvc3JjL3Rlc3QvbW9kdWxlcy9vYXV0aF92YWxp ZGF0b3IvTWFrZWZpbGUKQEAgLTE0LDExICsxNCwxMyBAQCBQR0ZJTEVERVNDID0gInZhbGlkYXRv ciAtIHRlc3QgT0F1dGggdmFsaWRhdG9yIG1vZHVsZSIKIAogUFJPR1JBTSA9IG9hdXRoX2hvb2tf Y2xpZW50CiBQR0FQUElDT04gPSB3aW4zMgotT0JKUyA9ICQoV0lOMzJSRVMpIG9hdXRoX2hvb2tf Y2xpZW50Lm8KK09CSlMgPSAkKFdJTjMyUkVTKSBvYXV0aF9ob29rX2NsaWVudC5vIG9hdXRoX3Rl c3RfY29tbW9uLm8KIAogUEdfQ1BQRkxBR1MgPSAtSSQobGlicHFfc3JjZGlyKQogUEdfTElCU19J TlRFUk5BTCArPSAkKGxpYnBxX3BncG9ydCkKIAorRVhUUkFfQ0xFQU4gPSBvYXV0aF9mbG93JChE TFNVRkZJWCkgb2F1dGhfZmxvdy5vCisKIE5PX0lOU1RBTExDSEVDSyA9IDEKIAogVEFQX1RFU1RT ID0gMQpAQCAtMzMsOCArMzUsMTQgQEAgdG9wX2J1aWxkZGlyID0gLi4vLi4vLi4vLi4KIGluY2x1 ZGUgJCh0b3BfYnVpbGRkaXIpL3NyYy9NYWtlZmlsZS5nbG9iYWwKIGluY2x1ZGUgJCh0b3Bfc3Jj ZGlyKS9jb250cmliL2NvbnRyaWItZ2xvYmFsLm1rCiAKK2FsbDogb2F1dGhfZmxvdyQoRExTVUZG SVgpCisKK29hdXRoX2Zsb3ckKERMU1VGRklYKTogb2F1dGhfZmxvdy5vIG9hdXRoX3Rlc3RfY29t bW9uLm8KKwkkKENDKSAkKENGTEFHUykgJF4gJChMREZMQUdTKSAkKGxpYnBxX3BncG9ydF9zaGxp YikgJChMREZMQUdTX1NMKSAtc2hhcmVkIC1vICRACisKIGV4cG9ydCBQWVRIT04KIGV4cG9ydCB3 aXRoX2xpYmN1cmwKIGV4cG9ydCB3aXRoX3B5dGhvbgorZXhwb3J0IGZsb3dfbW9kdWxlX3BhdGgg Oj0gJChhYnNfdG9wX2J1aWxkZGlyKS8kKHN1YmRpcikvb2F1dGhfZmxvdyQoRExTVUZGSVgpCiAK IGVuZGlmCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9tb2R1bGVzL29hdXRoX3ZhbGlkYXRvci9vYXV0 aF90ZXN0X2NvbW1vbi5oIGIvc3JjL3Rlc3QvbW9kdWxlcy9vYXV0aF92YWxpZGF0b3Ivb2F1dGhf dGVzdF9jb21tb24uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uMzNl NzJlMzA0NDAKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdC9tb2R1bGVzL29hdXRoX3ZhbGlk YXRvci9vYXV0aF90ZXN0X2NvbW1vbi5oCkBAIC0wLDAgKzEsMjYgQEAKKy8qLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLQorICoKKyAqIG9hdXRoX3Rlc3RfY29tbW9uLmgKKyAqCSAgU2hhcmVkIGZ1bmN0aW9uYWxp dHkgZm9yIG9hdXRoX2hvb2tfY2xpZW50IGFuZCBvYXV0aF9mbG93CisgKgorICogQ29weXJpZ2h0 IChjKSAyMDI1LCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAorICoKKyAqLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQorICovCisKKyNpZm5kZWYgT0FVVEhfVEVTVF9DT01NT05fSAorI2RlZmlu ZSBPQVVUSF9URVNUX0NPTU1PTl9ICisKKy8qCisgKiBPbmx5IHB1YmxpYyBoZWFkZXJzIGNhbiBi ZSBoZXJlLCBzaW5jZSBvYXV0aF9mbG93LmMgaXMgdHJ5aW5nIHRvIHRlc3Qgb25seQorICogdGhl IHB1YmxpYyBBUEkuCisgKi8KKyNpbmNsdWRlICJsaWJwcS1mZS5oIgorCitleHRlcm4gaW50CXN0 cmVzc19hc3luYzsJCS8qIGZvciBvYXV0aF9ob29rX2NsaWVudCAqLworCitleHRlcm4gY2hhciAq b2F1dGhfdGVzdF9wYXJzZV9hcmd2KGludCBhcmdjLCBjaGFyICphcmd2W10sIGludCBmb3JfcGx1 Z2luKTsKK2V4dGVybiBpbnQJb2F1dGhfdGVzdF9hdXRoZGF0YV9ob29rKFBHYXV0aERhdGEgdHlw ZSwgUEdjb25uICpjb25uLCB2b2lkICpkYXRhKTsKK2V4dGVybiBpbnQJb2F1dGhfdGVzdF9zdGFy dF9mbG93KFBHY29ubiAqY29ubiwgUEdvYXV0aEJlYXJlclJlcXVlc3RWMiAqcmVxdWVzdCk7CisK KyNlbmRpZgkJCQkJCQkvKiBPQVVUSF9URVNUX0NPTU1PTl9IICovCmRpZmYgLS1naXQgYS9zcmMv dGVzdC9tb2R1bGVzL29hdXRoX3ZhbGlkYXRvci9vYXV0aF9mbG93LmMgYi9zcmMvdGVzdC9tb2R1 bGVzL29hdXRoX3ZhbGlkYXRvci9vYXV0aF9mbG93LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k ZXggMDAwMDAwMDAwMDAuLjllZjY3ZjAzZWIzCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Rlc3Qv bW9kdWxlcy9vYXV0aF92YWxpZGF0b3Ivb2F1dGhfZmxvdy5jCkBAIC0wLDAgKzEsNzIgQEAKKy8q LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIG9hdXRoX2Zsb3cuYworICoJICBUZXN0IHBsdWdpbiBm b3IgY2xpZW50c2lkZSBPQXV0aCBmbG93cworICoKKyAqIENvcHlyaWdodCAoYykgMjAyNSwgUG9z dGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K KyAqLworCisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisKKy8qIFNp bmNlIHdlIHdhbnQgdG8gdGVzdCB0aGUgcHVibGljIEFQSSwgb25seSBpbmNsdWRlIHB1YmxpYyBo ZWFkZXJzIGhlcmUuICovCisjaW5jbHVkZSAibGlicHEtZmUuaCIKKyNpbmNsdWRlICJsaWJwcS1v YXV0aC5oIgorI2luY2x1ZGUgIm9hdXRoX3Rlc3RfY29tbW9uLmgiCisKK3N0YXRpYyB2b2lkCits b2FkX3Rlc3RfZmxhZ3Modm9pZCkKK3sKKwlpbnQJCQlhcmdjOworCWNoYXIJICAqKmFyZ3Y7CisJ Y2hhcgkgICAqZW52ID0gZ2V0ZW52KCJPQVVUSF9URVNUX0ZMQUdTIik7CisJaW50CQkJZmxhZ19j b3VudDsKKwlpbnQJCQlpOworCisJaWYgKCFlbnYgfHwgIWVudlswXSkKKwl7CisJCWZwcmludGYo c3RkZXJyLCAiT0FVVEhfVEVTVF9GTEFHUyBtdXN0IGJlIHNldFxuIik7CisJCWV4aXQoMSk7CisJ fQorCisJZmxhZ19jb3VudCA9IDE7CisJZm9yIChjaGFyICpjID0gZW52OyAqYzsgYysrKQorCXsK KwkJaWYgKCpjID09ICdceDAxJykKKwkJCWZsYWdfY291bnQrKzsKKwl9CisKKwkvKiBTbGljZSBP QVVUSF9URVNUX0ZMQUdTIGludG8gYSBmYWtlIGFyZ3YgYXJyYXkuICovCisJZW52ID0gc3RyZHVw KGVudik7CisJYXJnYyA9IGZsYWdfY291bnQgKyAxOworCWFyZ3YgPSBtYWxsb2Moc2l6ZW9mKCph cmd2KSAqIChhcmdjICsgMSkpOworCisJaWYgKCFlbnYgfHwgIWFyZ3YpCisJeworCQlmcHJpbnRm KHN0ZGVyciwgIm91dCBvZiBtZW1vcnkiKTsKKwkJZXhpdCgxKTsKKwl9CisKKwlhcmd2WzBdID0g IltwbHVnaW4gdGVzdF0iOworCWZvciAoaSA9IDE7IGkgPCBmbGFnX2NvdW50OyBpKyspCisJewor CQlhcmd2W2ldID0gZW52OworCisJCWVudiA9IHN0cmNocihlbnYsICdceDAxJyk7CisJCSplbnYr KyA9ICdcMCc7CisJfQorCWFyZ3ZbZmxhZ19jb3VudF0gPSBlbnY7CisJYXJndlthcmdjXSA9IE5V TEw7CisKKwlvYXV0aF90ZXN0X3BhcnNlX2FyZ3YoYXJnYywgYXJndiwgMSAvKiBwbHVnaW4gKi8g KTsKK30KKworaW50CitwZ19zdGFydF9vYXV0aGJlYXJlcihQR2Nvbm4gKmNvbm4sIFBHb2F1dGhC ZWFyZXJSZXF1ZXN0VjIgKnJlcXVlc3QpCit7CisJbG9hZF90ZXN0X2ZsYWdzKCk7CisKKwlyZXR1 cm4gb2F1dGhfdGVzdF9zdGFydF9mbG93KGNvbm4sIHJlcXVlc3QpOworfQpkaWZmIC0tZ2l0IGEv c3JjL3Rlc3QvbW9kdWxlcy9vYXV0aF92YWxpZGF0b3Ivb2F1dGhfaG9va19jbGllbnQuYyBiL3Ny Yy90ZXN0L21vZHVsZXMvb2F1dGhfdmFsaWRhdG9yL29hdXRoX2hvb2tfY2xpZW50LmMKaW5kZXgg NWJkZGMwZjgwN2EuLjVmOTMyYWNjNTcxIDEwMDY0NAotLS0gYS9zcmMvdGVzdC9tb2R1bGVzL29h dXRoX3ZhbGlkYXRvci9vYXV0aF9ob29rX2NsaWVudC5jCisrKyBiL3NyYy90ZXN0L21vZHVsZXMv b2F1dGhfdmFsaWRhdG9yL29hdXRoX2hvb2tfY2xpZW50LmMKQEAgLTE4LDE0NCArMTgsMTggQEAK IAogI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KIAotI2luY2x1ZGUgImdldG9wdF9sb25nLmgiCiAj aW5jbHVkZSAibGlicHEtZmUuaCIKLSNpbmNsdWRlICJwcWV4cGJ1ZmZlci5oIgogCi1zdGF0aWMg aW50CWhhbmRsZV9hdXRoX2RhdGEoUEdhdXRoRGF0YSB0eXBlLCBQR2Nvbm4gKmNvbm4sIHZvaWQg KmRhdGEpOwotc3RhdGljIFBvc3RncmVzUG9sbGluZ1N0YXR1c1R5cGUgYXN5bmNfY2IoUEdjb25u ICpjb25uLAotCQkJCQkJCQkJCSAgUEdvYXV0aEJlYXJlclJlcXVlc3QgKnJlcSwKLQkJCQkJCQkJ CQkgIHBnc29ja2V0ICphbHRzb2NrKTsKLXN0YXRpYyBQb3N0Z3Jlc1BvbGxpbmdTdGF0dXNUeXBl IG1pc2JlaGF2ZV9jYihQR2Nvbm4gKmNvbm4sCi0JCQkJCQkJCQkJCSAgUEdvYXV0aEJlYXJlclJl cXVlc3QgKnJlcSwKLQkJCQkJCQkJCQkJICBwZ3NvY2tldCAqYWx0c29jayk7Ci0KLXN0YXRpYyB2 b2lkCi11c2FnZShjaGFyICphcmd2W10pCi17Ci0JcHJpbnRmKCJ1c2FnZTogJXMgW2ZsYWdzXSBD T05OSU5GT1xuXG4iLCBhcmd2WzBdKTsKLQotCXByaW50ZigicmVjb2duaXplZCBmbGFnczpcbiIp OwotCXByaW50ZigiICAtaCwgLS1oZWxwICAgICAgICAgICAgICBzaG93IHRoaXMgbWVzc2FnZVxu Iik7Ci0JcHJpbnRmKCIgIC12IFZFUlNJT04gICAgICAgICAgICAgIHNlbGVjdCB0aGUgaG9vayBB UEkgdmVyc2lvbiAoZGVmYXVsdCAyKVxuIik7Ci0JcHJpbnRmKCIgIC0tZXhwZWN0ZWQtc2NvcGUg U0NPUEUgIGZhaWwgaWYgcmVjZWl2ZWQgc2NvcGVzIGRvIG5vdCBtYXRjaCBTQ09QRVxuIik7Ci0J cHJpbnRmKCIgIC0tZXhwZWN0ZWQtdXJpIFVSSSAgICAgIGZhaWwgaWYgcmVjZWl2ZWQgY29uZmln dXJhdGlvbiBsaW5rIGRvZXMgbm90IG1hdGNoIFVSSVxuIik7Ci0JcHJpbnRmKCIgIC0tZXhwZWN0 ZWQtaXNzdWVyIElTUyAgIGZhaWwgaWYgcmVjZWl2ZWQgaXNzdWVyIGRvZXMgbm90IG1hdGNoIElT UyAodjIgb25seSlcbiIpOwotCXByaW50ZigiICAtLW1pc2JlaGF2ZT1NT0RFICAgICAgICBoYXZl IHRoZSBob29rIGZhaWwgcmVxdWlyZWQgcG9zdGNvbmRpdGlvbnNcbiIKLQkJICAgIiAgICAgICAg ICAgICAgICAgICAgICAgICAgKE1PREVzOiBuby1ob29rLCBmYWlsLWFzeW5jLCBuby10b2tlbiwg bm8tc29ja2V0KVxuIik7Ci0JcHJpbnRmKCIgIC0tbm8taG9vayAgICAgICAgICAgICAgIGRvbid0 IGluc3RhbGwgT0F1dGggaG9va3NcbiIpOwotCXByaW50ZigiICAtLWhhbmctZm9yZXZlciAgICAg ICAgICBkb24ndCBldmVyIHJldHVybiBhIHRva2VuIChjb21iaW5lIHdpdGggY29ubmVjdF90aW1l b3V0KVxuIik7Ci0JcHJpbnRmKCIgIC0tdG9rZW4gVE9LRU4gICAgICAgICAgIHVzZSB0aGUgcHJv dmlkZWQgVE9LRU4gdmFsdWVcbiIpOwotCXByaW50ZigiICAtLWVycm9yIEVSUk1TRyAgICAgICAg ICBmYWlsIGluc3RlYWQsIHdpdGggdGhlIGdpdmVuIEVSUk1TRyAodjIgb25seSlcbiIpOwotCXBy aW50ZigiICAtLXN0cmVzcy1hc3luYyAgICAgICAgICBidXN5LWxvb3Agb24gUFFjb25uZWN0UG9s bCByYXRoZXIgdGhhbiBwb2xsaW5nXG4iKTsKLX0KLQotLyogLS1vcHRpb25zICovCi1zdGF0aWMg Ym9vbCBub19ob29rID0gZmFsc2U7Ci1zdGF0aWMgYm9vbCBoYW5nX2ZvcmV2ZXIgPSBmYWxzZTsK LXN0YXRpYyBib29sIHN0cmVzc19hc3luYyA9IGZhbHNlOwotc3RhdGljIGNvbnN0IGNoYXIgKmV4 cGVjdGVkX3VyaSA9IE5VTEw7Ci1zdGF0aWMgY29uc3QgY2hhciAqZXhwZWN0ZWRfaXNzdWVyID0g TlVMTDsKLXN0YXRpYyBjb25zdCBjaGFyICpleHBlY3RlZF9zY29wZSA9IE5VTEw7Ci1zdGF0aWMg Y29uc3QgY2hhciAqbWlzYmVoYXZlX21vZGUgPSBOVUxMOwotc3RhdGljIGNoYXIgKnRva2VuID0g TlVMTDsKLXN0YXRpYyBjaGFyICplcnJtc2cgPSBOVUxMOwotc3RhdGljIGludAlob29rX3ZlcnNp b24gPSBQUUFVVEhEQVRBX09BVVRIX0JFQVJFUl9UT0tFTl9WMjsKKyNpbmNsdWRlICJvYXV0aF90 ZXN0X2NvbW1vbi5oIgogCiBpbnQKIG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKIHsKLQlz dGF0aWMgY29uc3Qgc3RydWN0IG9wdGlvbiBsb25nX29wdGlvbnNbXSA9IHsKLQkJeyJoZWxwIiwg bm9fYXJndW1lbnQsIE5VTEwsICdoJ30sCi0KLQkJeyJleHBlY3RlZC1zY29wZSIsIHJlcXVpcmVk X2FyZ3VtZW50LCBOVUxMLCAxMDAwfSwKLQkJeyJleHBlY3RlZC11cmkiLCByZXF1aXJlZF9hcmd1 bWVudCwgTlVMTCwgMTAwMX0sCi0JCXsibm8taG9vayIsIG5vX2FyZ3VtZW50LCBOVUxMLCAxMDAy fSwKLQkJeyJ0b2tlbiIsIHJlcXVpcmVkX2FyZ3VtZW50LCBOVUxMLCAxMDAzfSwKLQkJeyJoYW5n LWZvcmV2ZXIiLCBub19hcmd1bWVudCwgTlVMTCwgMTAwNH0sCi0JCXsibWlzYmVoYXZlIiwgcmVx dWlyZWRfYXJndW1lbnQsIE5VTEwsIDEwMDV9LAotCQl7InN0cmVzcy1hc3luYyIsIG5vX2FyZ3Vt ZW50LCBOVUxMLCAxMDA2fSwKLQkJeyJleHBlY3RlZC1pc3N1ZXIiLCByZXF1aXJlZF9hcmd1bWVu dCwgTlVMTCwgMTAwN30sCi0JCXsiZXJyb3IiLCByZXF1aXJlZF9hcmd1bWVudCwgTlVMTCwgMTAw OH0sCi0JCXswfQotCX07Ci0KLQljb25zdCBjaGFyICpjb25uaW5mbzsKKwljb25zdCBjaGFyICpj b25uaW5mbyA9IG9hdXRoX3Rlc3RfcGFyc2VfYXJndihhcmdjLCBhcmd2LCAwIC8qIGhvb2sgKi8g KTsKIAlQR2Nvbm4JICAgKmNvbm47Ci0JaW50CQkJYzsKLQotCXdoaWxlICgoYyA9IGdldG9wdF9s b25nKGFyZ2MsIGFyZ3YsICJodjoiLCBsb25nX29wdGlvbnMsIE5VTEwpKSAhPSAtMSkKLQl7Ci0J CXN3aXRjaCAoYykKLQkJewotCQkJY2FzZSAnaCc6Ci0JCQkJdXNhZ2UoYXJndik7Ci0JCQkJcmV0 dXJuIDA7Ci0KLQkJCWNhc2UgJ3YnOgotCQkJCWlmIChzdHJjbXAob3B0YXJnLCAiMSIpID09IDAp Ci0JCQkJCWhvb2tfdmVyc2lvbiA9IFBRQVVUSERBVEFfT0FVVEhfQkVBUkVSX1RPS0VOOwotCQkJ CWVsc2UgaWYgKHN0cmNtcChvcHRhcmcsICIyIikgPT0gMCkKLQkJCQkJaG9va192ZXJzaW9uID0g UFFBVVRIREFUQV9PQVVUSF9CRUFSRVJfVE9LRU5fVjI7Ci0JCQkJZWxzZQotCQkJCXsKLQkJCQkJ dXNhZ2UoYXJndik7Ci0JCQkJCXJldHVybiAxOwotCQkJCX0KLQkJCQlicmVhazsKLQotCQkJY2Fz ZSAxMDAwOgkJCS8qIC0tZXhwZWN0ZWQtc2NvcGUgKi8KLQkJCQlleHBlY3RlZF9zY29wZSA9IG9w dGFyZzsKLQkJCQlicmVhazsKLQotCQkJY2FzZSAxMDAxOgkJCS8qIC0tZXhwZWN0ZWQtdXJpICov Ci0JCQkJZXhwZWN0ZWRfdXJpID0gb3B0YXJnOwotCQkJCWJyZWFrOwotCi0JCQljYXNlIDEwMDI6 CQkJLyogLS1uby1ob29rICovCi0JCQkJbm9faG9vayA9IHRydWU7Ci0JCQkJYnJlYWs7Ci0KLQkJ CWNhc2UgMTAwMzoJCQkvKiAtLXRva2VuICovCi0JCQkJdG9rZW4gPSBvcHRhcmc7Ci0JCQkJYnJl YWs7Ci0KLQkJCWNhc2UgMTAwNDoJCQkvKiAtLWhhbmctZm9yZXZlciAqLwotCQkJCWhhbmdfZm9y ZXZlciA9IHRydWU7Ci0JCQkJYnJlYWs7Ci0KLQkJCWNhc2UgMTAwNToJCQkvKiAtLW1pc2JlaGF2 ZSAqLwotCQkJCW1pc2JlaGF2ZV9tb2RlID0gb3B0YXJnOwotCQkJCWJyZWFrOwotCi0JCQljYXNl IDEwMDY6CQkJLyogLS1zdHJlc3MtYXN5bmMgKi8KLQkJCQlzdHJlc3NfYXN5bmMgPSB0cnVlOwot CQkJCWJyZWFrOwotCi0JCQljYXNlIDEwMDc6CQkJLyogLS1leHBlY3RlZC1pc3N1ZXIgKi8KLQkJ CQlleHBlY3RlZF9pc3N1ZXIgPSBvcHRhcmc7Ci0JCQkJYnJlYWs7Ci0KLQkJCWNhc2UgMTAwODoJ CQkvKiAtLWVycm9yICovCi0JCQkJZXJybXNnID0gb3B0YXJnOwotCQkJCWJyZWFrOwotCi0JCQlk ZWZhdWx0OgotCQkJCXVzYWdlKGFyZ3YpOwotCQkJCXJldHVybiAxOwotCQl9Ci0JfQotCi0JaWYg KGFyZ2MgIT0gb3B0aW5kICsgMSkKLQl7Ci0JCXVzYWdlKGFyZ3YpOwotCQlyZXR1cm4gMTsKLQl9 Ci0KLQljb25uaW5mbyA9IGFyZ3Zbb3B0aW5kXTsKIAogCS8qIFNldCB1cCBvdXIgT0F1dGggaG9v a3MuICovCi0JUFFzZXRBdXRoRGF0YUhvb2soaGFuZGxlX2F1dGhfZGF0YSk7CisJUFFzZXRBdXRo RGF0YUhvb2sob2F1dGhfdGVzdF9hdXRoZGF0YV9ob29rKTsKIAogCS8qIENvbm5lY3QuIChBbGwg dGhlIGFjdHVhbCB3b3JrIGlzIGluIHRoZSBob29rLikgKi8KIAlpZiAoc3RyZXNzX2FzeW5jKQpA QCAtMTkzLDE5MCArNjcsMyBAQCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCiAJUFFmaW5p c2goY29ubik7CiAJcmV0dXJuIDA7CiB9Ci0KLS8qCi0gKiBQUWF1dGhEYXRhSG9vayBpbXBsZW1l bnRhdGlvbi4gUmVwbGFjZXMgdGhlIGRlZmF1bHQgY2xpZW50IGZsb3cgYnkgaGFuZGxpbmcKLSAq IFBRQVVUSERBVEFfT0FVVEhfQkVBUkVSX1RPS0VOW19WMl0uCi0gKi8KLXN0YXRpYyBpbnQKLWhh bmRsZV9hdXRoX2RhdGEoUEdhdXRoRGF0YSB0eXBlLCBQR2Nvbm4gKmNvbm4sIHZvaWQgKmRhdGEp Ci17Ci0JUEdvYXV0aEJlYXJlclJlcXVlc3QgKnJlcTsKLQlQR29hdXRoQmVhcmVyUmVxdWVzdFYy ICpyZXEyID0gTlVMTDsKLQotCUFzc2VydChob29rX3ZlcnNpb24gPT0gUFFBVVRIREFUQV9PQVVU SF9CRUFSRVJfVE9LRU4gfHwKLQkJICAgaG9va192ZXJzaW9uID09IFBRQVVUSERBVEFfT0FVVEhf QkVBUkVSX1RPS0VOX1YyKTsKLQotCWlmIChub19ob29rIHx8IHR5cGUgIT0gaG9va192ZXJzaW9u KQotCQlyZXR1cm4gMDsKLQotCXJlcSA9IGRhdGE7Ci0JaWYgKHR5cGUgPT0gUFFBVVRIREFUQV9P QVVUSF9CRUFSRVJfVE9LRU5fVjIpCi0JCXJlcTIgPSBkYXRhOwotCi0JaWYgKGhhbmdfZm9yZXZl cikKLQl7Ci0JCS8qIFN0YXJ0IGFzeW5jaHJvbm91cyBwcm9jZXNzaW5nLiAqLwotCQlyZXEtPmFz eW5jID0gYXN5bmNfY2I7Ci0JCXJldHVybiAxOwotCX0KLQotCWlmIChtaXNiZWhhdmVfbW9kZSkK LQl7Ci0JCWlmIChzdHJjbXAobWlzYmVoYXZlX21vZGUsICJuby1ob29rIikgIT0gMCkKLQkJCXJl cS0+YXN5bmMgPSBtaXNiZWhhdmVfY2I7Ci0JCXJldHVybiAxOwotCX0KLQotCWlmIChleHBlY3Rl ZF91cmkpCi0JewotCQlpZiAoIXJlcS0+b3BlbmlkX2NvbmZpZ3VyYXRpb24pCi0JCXsKLQkJCWZw cmludGYoc3RkZXJyLCAiZXhwZWN0ZWQgVVJJIFwiJXNcIiwgZ290IE5VTExcbiIsIGV4cGVjdGVk X3VyaSk7Ci0JCQlyZXR1cm4gLTE7Ci0JCX0KLQotCQlpZiAoc3RyY21wKGV4cGVjdGVkX3VyaSwg cmVxLT5vcGVuaWRfY29uZmlndXJhdGlvbikgIT0gMCkKLQkJewotCQkJZnByaW50ZihzdGRlcnIs ICJleHBlY3RlZCBVUkkgXCIlc1wiLCBnb3QgXCIlc1wiXG4iLCBleHBlY3RlZF91cmksIHJlcS0+ b3BlbmlkX2NvbmZpZ3VyYXRpb24pOwotCQkJcmV0dXJuIC0xOwotCQl9Ci0JfQotCi0JaWYgKGV4 cGVjdGVkX3Njb3BlKQotCXsKLQkJaWYgKCFyZXEtPnNjb3BlKQotCQl7Ci0JCQlmcHJpbnRmKHN0 ZGVyciwgImV4cGVjdGVkIHNjb3BlIFwiJXNcIiwgZ290IE5VTExcbiIsIGV4cGVjdGVkX3Njb3Bl KTsKLQkJCXJldHVybiAtMTsKLQkJfQotCi0JCWlmIChzdHJjbXAoZXhwZWN0ZWRfc2NvcGUsIHJl cS0+c2NvcGUpICE9IDApCi0JCXsKLQkJCWZwcmludGYoc3RkZXJyLCAiZXhwZWN0ZWQgc2NvcGUg XCIlc1wiLCBnb3QgXCIlc1wiXG4iLCBleHBlY3RlZF9zY29wZSwgcmVxLT5zY29wZSk7Ci0JCQly ZXR1cm4gLTE7Ci0JCX0KLQl9Ci0KLQlpZiAoZXhwZWN0ZWRfaXNzdWVyKQotCXsKLQkJaWYgKCFy ZXEyKQotCQl7Ci0JCQlmcHJpbnRmKHN0ZGVyciwgIi0tZXhwZWN0ZWQtaXNzdWVyIGNhbm5vdCBi ZSBjb21iaW5lZCB3aXRoIC12MVxuIik7Ci0JCQlyZXR1cm4gLTE7Ci0JCX0KLQotCQlpZiAoIXJl cTItPmlzc3VlcikKLQkJewotCQkJZnByaW50ZihzdGRlcnIsICJleHBlY3RlZCBpc3N1ZXIgXCIl c1wiLCBnb3QgTlVMTFxuIiwgZXhwZWN0ZWRfaXNzdWVyKTsKLQkJCXJldHVybiAtMTsKLQkJfQot Ci0JCWlmIChzdHJjbXAoZXhwZWN0ZWRfaXNzdWVyLCByZXEyLT5pc3N1ZXIpICE9IDApCi0JCXsK LQkJCWZwcmludGYoc3RkZXJyLCAiZXhwZWN0ZWQgaXNzdWVyIFwiJXNcIiwgZ290IFwiJXNcIlxu IiwgZXhwZWN0ZWRfaXNzdWVyLCByZXEyLT5pc3N1ZXIpOwotCQkJcmV0dXJuIC0xOwotCQl9Ci0J fQotCi0JaWYgKGVycm1zZykKLQl7Ci0JCWlmICh0b2tlbikKLQkJewotCQkJZnByaW50ZihzdGRl cnIsICItLWVycm9yIGNhbm5vdCBiZSBjb21iaW5lZCB3aXRoIC0tdG9rZW5cbiIpOwotCQkJcmV0 dXJuIC0xOwotCQl9Ci0JCWVsc2UgaWYgKCFyZXEyKQotCQl7Ci0JCQlmcHJpbnRmKHN0ZGVyciwg Ii0tZXJyb3IgY2Fubm90IGJlIGNvbWJpbmVkIHdpdGggLXYxXG4iKTsKLQkJCXJldHVybiAtMTsK LQkJfQotCi0JCXJlcTItPmVycm9yID0gZXJybXNnOwotCQlyZXR1cm4gLTE7Ci0JfQotCi0JcmVx LT50b2tlbiA9IHRva2VuOwotCXJldHVybiAxOwotfQotCi1zdGF0aWMgUG9zdGdyZXNQb2xsaW5n U3RhdHVzVHlwZQotYXN5bmNfY2IoUEdjb25uICpjb25uLCBQR29hdXRoQmVhcmVyUmVxdWVzdCAq cmVxLCBwZ3NvY2tldCAqYWx0c29jaykKLXsKLQlpZiAoaGFuZ19mb3JldmVyKQotCXsKLQkJLyoK LQkJICogVGhpcyBjb2RlIHRlc3RzIHRoYXQgbm90aGluZyBpcyBpbnRlcmZlcmluZyB3aXRoIGxp YnBxJ3MgaGFuZGxpbmcKLQkJICogb2YgY29ubmVjdF90aW1lb3V0LgotCQkgKi8KLQkJc3RhdGlj IHBnc29ja2V0IHNvY2sgPSBQR0lOVkFMSURfU09DS0VUOwotCi0JCWlmIChzb2NrID09IFBHSU5W QUxJRF9TT0NLRVQpCi0JCXsKLQkJCS8qIEZpcnN0IGNhbGwuIENyZWF0ZSBhbiB1bmJvdW5kIHNv Y2tldCB0byB3YWl0IG9uLiAqLwotI2lmZGVmIFdJTjMyCi0JCQlXU0FEQVRBCQl3c2FEYXRhOwot CQkJaW50CQkJZXJyOwotCi0JCQllcnIgPSBXU0FTdGFydHVwKE1BS0VXT1JEKDIsIDIpLCAmd3Nh RGF0YSk7Ci0JCQlpZiAoZXJyKQotCQkJewotCQkJCXBlcnJvcigiV1NBU3RhcnR1cCBmYWlsZWQi KTsKLQkJCQlyZXR1cm4gUEdSRVNfUE9MTElOR19GQUlMRUQ7Ci0JCQl9Ci0jZW5kaWYKLQkJCXNv Y2sgPSBzb2NrZXQoQUZfSU5FVCwgU09DS19ER1JBTSwgMCk7Ci0JCQlpZiAoc29jayA9PSBQR0lO VkFMSURfU09DS0VUKQotCQkJewotCQkJCXBlcnJvcigiZmFpbGVkIHRvIGNyZWF0ZSBkYXRhZ3Jh bSBzb2NrZXQiKTsKLQkJCQlyZXR1cm4gUEdSRVNfUE9MTElOR19GQUlMRUQ7Ci0JCQl9Ci0JCX0K LQotCQkvKiBNYWtlIGxpYnBxIHdhaXQgb24gdGhlICh1bnJlYWRhYmxlKSBzb2NrZXQuICovCi0J CSphbHRzb2NrID0gc29jazsKLQkJcmV0dXJuIFBHUkVTX1BPTExJTkdfUkVBRElORzsKLQl9Ci0K LQlyZXEtPnRva2VuID0gdG9rZW47Ci0JcmV0dXJuIFBHUkVTX1BPTExJTkdfT0s7Ci19Ci0KLXN0 YXRpYyBQb3N0Z3Jlc1BvbGxpbmdTdGF0dXNUeXBlCi1taXNiZWhhdmVfY2IoUEdjb25uICpjb25u LCBQR29hdXRoQmVhcmVyUmVxdWVzdCAqcmVxLCBwZ3NvY2tldCAqYWx0c29jaykKLXsKLQlpZiAo c3RyY21wKG1pc2JlaGF2ZV9tb2RlLCAiZmFpbC1hc3luYyIpID09IDApCi0JewotCQkvKiBKdXN0 IGZhaWwgIm5vcm1hbGx5Ii4gKi8KLQkJaWYgKGVycm1zZykKLQkJewotCQkJUEdvYXV0aEJlYXJl clJlcXVlc3RWMiAqcmVxMjsKLQotCQkJaWYgKGhvb2tfdmVyc2lvbiA9PSBQUUFVVEhEQVRBX09B VVRIX0JFQVJFUl9UT0tFTikKLQkJCXsKLQkJCQlmcHJpbnRmKHN0ZGVyciwgIi0tZXJyb3IgY2Fu bm90IGJlIGNvbWJpbmVkIHdpdGggLXYxXG4iKTsKLQkJCQlleGl0KDEpOwotCQkJfQotCi0JCQly ZXEyID0gKFBHb2F1dGhCZWFyZXJSZXF1ZXN0VjIgKikgcmVxOwotCQkJcmVxMi0+ZXJyb3IgPSBl cnJtc2c7Ci0JCX0KLQotCQlyZXR1cm4gUEdSRVNfUE9MTElOR19GQUlMRUQ7Ci0JfQotCWVsc2Ug aWYgKHN0cmNtcChtaXNiZWhhdmVfbW9kZSwgIm5vLXRva2VuIikgPT0gMCkKLQl7Ci0JCS8qIENh bGxiYWNrcyBtdXN0IGFzc2lnbiByZXEtPnRva2VuIGJlZm9yZSByZXR1cm5pbmcgT0suICovCi0J CXJldHVybiBQR1JFU19QT0xMSU5HX09LOwotCX0KLQllbHNlIGlmIChzdHJjbXAobWlzYmVoYXZl X21vZGUsICJuby1zb2NrZXQiKSA9PSAwKQotCXsKLQkJLyogQ2FsbGJhY2tzIG11c3QgYXNzaWdu ICphbHRzb2NrIGJlZm9yZSBhc2tpbmcgZm9yIHBvbGxpbmcuICovCi0JCXJldHVybiBQR1JFU19Q T0xMSU5HX1JFQURJTkc7Ci0JfQotCWVsc2UKLQl7Ci0JCWZwcmludGYoc3RkZXJyLCAidW5yZWNv Z25pemVkIC0tbWlzYmVoYXZlIG1vZGU6ICVzXG4iLCBtaXNiZWhhdmVfbW9kZSk7Ci0JCWV4aXQo MSk7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvbW9kdWxlcy9vYXV0aF92YWxpZGF0b3Iv b2F1dGhfdGVzdF9jb21tb24uYyBiL3NyYy90ZXN0L21vZHVsZXMvb2F1dGhfdmFsaWRhdG9yL29h dXRoX3Rlc3RfY29tbW9uLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAu LmViYThjMzJlYWNlCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Rlc3QvbW9kdWxlcy9vYXV0aF92 YWxpZGF0b3Ivb2F1dGhfdGVzdF9jb21tb24uYwpAQCAtMCwwICsxLDM3NCBAQAorLyotLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tCisgKgorICogb2F1dGhfdGVzdF9jb21tb24uYworICoJICBTaGFyZWQgZnVuY3Rp b25hbGl0eSBmb3Igb2F1dGhfaG9va19jbGllbnQgYW5kIG9hdXRoX2Zsb3cKKyAqCisgKiBDb3B5 cmlnaHQgKGMpIDIwMjUsIFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisgKgor ICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKworI2luY2x1ZGUgInBvc3RncmVzX2ZlLmgiCisKKyNp bmNsdWRlIDxzeXMvc29ja2V0Lmg+CisKKyNpbmNsdWRlICJnZXRvcHRfbG9uZy5oIgorI2luY2x1 ZGUgImxpYnBxLWZlLmgiCisjaW5jbHVkZSAicHFleHBidWZmZXIuaCIKKworI2luY2x1ZGUgIm9h dXRoX3Rlc3RfY29tbW9uLmgiCisKK3N0YXRpYyBQb3N0Z3Jlc1BvbGxpbmdTdGF0dXNUeXBlIGFz eW5jX2NiKFBHY29ubiAqY29ubiwKKwkJCQkJCQkJCQkgIFBHb2F1dGhCZWFyZXJSZXF1ZXN0ICpy ZXEsCisJCQkJCQkJCQkJICBwZ3NvY2tldCAqYWx0c29jayk7CitzdGF0aWMgUG9zdGdyZXNQb2xs aW5nU3RhdHVzVHlwZSBtaXNiZWhhdmVfY2IoUEdjb25uICpjb25uLAorCQkJCQkJCQkJCQkgIFBH b2F1dGhCZWFyZXJSZXF1ZXN0ICpyZXEsCisJCQkJCQkJCQkJCSAgcGdzb2NrZXQgKmFsdHNvY2sp OworCisvKiAtLW9wdGlvbnMgKi8KK3N0YXRpYyBib29sIG5vX2hvb2sgPSBmYWxzZTsKK3N0YXRp YyBib29sIGhhbmdfZm9yZXZlciA9IGZhbHNlOworc3RhdGljIGNvbnN0IGNoYXIgKmV4cGVjdGVk X3VyaSA9IE5VTEw7CitzdGF0aWMgY29uc3QgY2hhciAqZXhwZWN0ZWRfaXNzdWVyID0gTlVMTDsK K3N0YXRpYyBjb25zdCBjaGFyICpleHBlY3RlZF9zY29wZSA9IE5VTEw7CitzdGF0aWMgY29uc3Qg Y2hhciAqbWlzYmVoYXZlX21vZGUgPSBOVUxMOworc3RhdGljIGNoYXIgKnRva2VuID0gTlVMTDsK K3N0YXRpYyBjaGFyICplcnJtc2cgPSBOVUxMOworc3RhdGljIGludAlob29rX3ZlcnNpb24gPSBQ UUFVVEhEQVRBX09BVVRIX0JFQVJFUl9UT0tFTl9WMjsKKworLyoKKyAqIFhYWDogc3RyZXNzX2Fz eW5jIGlzIGV4cG9ydGVkIGZvciB0aGUgYmVuZWZpdCBvZiBvYXV0aF9ob29rX2NsaWVudC4gU2lu Y2UKKyAqIHdlIG9ubHkgdXNlIHB1YmxpYyBoZWFkZXJzIChsaWJwcS1mZS5oKSBmb3Igb2F1dGhf ZmxvdywgaXQgbmVlZHMgdG8gYmUgYW4gaW50CisgKiByYXRoZXIgdGhhbiBhIGJvb2wuCisgKi8K K2ludAkJCXN0cmVzc19hc3luYyA9IGZhbHNlOworCitzdGF0aWMgdm9pZAordXNhZ2UoY2hhciAq YXJndltdKQoreworCXByaW50ZigidXNhZ2U6ICVzIFtmbGFnc10gQ09OTklORk9cblxuIiwgYXJn dlswXSk7CisKKwlwcmludGYoInJlY29nbml6ZWQgZmxhZ3M6XG4iKTsKKwlwcmludGYoIiAgLWgs IC0taGVscCAgICAgICAgICAgICAgc2hvdyB0aGlzIG1lc3NhZ2VcbiIpOworCXByaW50ZigiICAt diBWRVJTSU9OICAgICAgICAgICAgICBzZWxlY3QgdGhlIGhvb2sgQVBJIHZlcnNpb24gKGRlZmF1 bHQgMilcbiIpOworCXByaW50ZigiICAtLWV4cGVjdGVkLXNjb3BlIFNDT1BFICBmYWlsIGlmIHJl Y2VpdmVkIHNjb3BlcyBkbyBub3QgbWF0Y2ggU0NPUEVcbiIpOworCXByaW50ZigiICAtLWV4cGVj dGVkLXVyaSBVUkkgICAgICBmYWlsIGlmIHJlY2VpdmVkIGNvbmZpZ3VyYXRpb24gbGluayBkb2Vz IG5vdCBtYXRjaCBVUklcbiIpOworCXByaW50ZigiICAtLWV4cGVjdGVkLWlzc3VlciBJU1MgICBm YWlsIGlmIHJlY2VpdmVkIGlzc3VlciBkb2VzIG5vdCBtYXRjaCBJU1MgKHYyIG9ubHkpXG4iKTsK KwlwcmludGYoIiAgLS1taXNiZWhhdmU9TU9ERSAgICAgICAgaGF2ZSB0aGUgaG9vayBmYWlsIHJl cXVpcmVkIHBvc3Rjb25kaXRpb25zXG4iCisJCSAgICIgICAgICAgICAgICAgICAgICAgICAgICAg IChNT0RFczogbm8taG9vaywgZmFpbC1hc3luYywgbm8tdG9rZW4sIG5vLXNvY2tldClcbiIpOwor CXByaW50ZigiICAtLW5vLWhvb2sgICAgICAgICAgICAgICBkb24ndCBpbnN0YWxsIE9BdXRoIGhv b2tzXG4iKTsKKwlwcmludGYoIiAgLS1oYW5nLWZvcmV2ZXIgICAgICAgICAgZG9uJ3QgZXZlciBy ZXR1cm4gYSB0b2tlbiAoY29tYmluZSB3aXRoIGNvbm5lY3RfdGltZW91dClcbiIpOworCXByaW50 ZigiICAtLXRva2VuIFRPS0VOICAgICAgICAgICB1c2UgdGhlIHByb3ZpZGVkIFRPS0VOIHZhbHVl XG4iKTsKKwlwcmludGYoIiAgLS1lcnJvciBFUlJNU0cgICAgICAgICAgZmFpbCBpbnN0ZWFkLCB3 aXRoIHRoZSBnaXZlbiBFUlJNU0cgKHYyIG9ubHkpXG4iKTsKKwlwcmludGYoIiAgLS1zdHJlc3Mt YXN5bmMgICAgICAgICAgYnVzeS1sb29wIG9uIFBRY29ubmVjdFBvbGwgcmF0aGVyIHRoYW4gcG9s bGluZ1xuIik7Cit9CisKK2NoYXIgKgorb2F1dGhfdGVzdF9wYXJzZV9hcmd2KGludCBhcmdjLCBj aGFyICphcmd2W10sIGludCBmb3JfcGx1Z2luKQoreworCXN0YXRpYyBjb25zdCBzdHJ1Y3Qgb3B0 aW9uIGxvbmdfb3B0aW9uc1tdID0geworCQl7ImhlbHAiLCBub19hcmd1bWVudCwgTlVMTCwgJ2gn fSwKKworCQl7ImV4cGVjdGVkLXNjb3BlIiwgcmVxdWlyZWRfYXJndW1lbnQsIE5VTEwsIDEwMDB9 LAorCQl7ImV4cGVjdGVkLXVyaSIsIHJlcXVpcmVkX2FyZ3VtZW50LCBOVUxMLCAxMDAxfSwKKwkJ eyJuby1ob29rIiwgbm9fYXJndW1lbnQsIE5VTEwsIDEwMDJ9LAorCQl7InRva2VuIiwgcmVxdWly ZWRfYXJndW1lbnQsIE5VTEwsIDEwMDN9LAorCQl7ImhhbmctZm9yZXZlciIsIG5vX2FyZ3VtZW50 LCBOVUxMLCAxMDA0fSwKKwkJeyJtaXNiZWhhdmUiLCByZXF1aXJlZF9hcmd1bWVudCwgTlVMTCwg MTAwNX0sCisJCXsic3RyZXNzLWFzeW5jIiwgbm9fYXJndW1lbnQsIE5VTEwsIDEwMDZ9LAorCQl7 ImV4cGVjdGVkLWlzc3VlciIsIHJlcXVpcmVkX2FyZ3VtZW50LCBOVUxMLCAxMDA3fSwKKwkJeyJl cnJvciIsIHJlcXVpcmVkX2FyZ3VtZW50LCBOVUxMLCAxMDA4fSwKKwkJezB9CisJfTsKKworCWlu dAkJCWM7CisKKwlpZiAoZm9yX3BsdWdpbikKKwl7CisJCS8qIFRoZSAicmVhbCIgYXJndiBoYXMg YWxyZWFkeSBiZWVuIHBhcnNlZC4gUmVzZXQgb3B0aW5kLiAqLworCQlvcHRpbmQgPSAxOworCX0K KworCXdoaWxlICgoYyA9IGdldG9wdF9sb25nKGFyZ2MsIGFyZ3YsICJodjoiLCBsb25nX29wdGlv bnMsIE5VTEwpKSAhPSAtMSkKKwl7CisJCXN3aXRjaCAoYykKKwkJeworCQkJY2FzZSAnaCc6CisJ CQkJdXNhZ2UoYXJndik7CisJCQkJZXhpdCgwKTsKKworCQkJY2FzZSAndic6CisJCQkJaWYgKHN0 cmNtcChvcHRhcmcsICIxIikgPT0gMCkKKwkJCQkJaG9va192ZXJzaW9uID0gUFFBVVRIREFUQV9P QVVUSF9CRUFSRVJfVE9LRU47CisJCQkJZWxzZSBpZiAoc3RyY21wKG9wdGFyZywgIjIiKSA9PSAw KQorCQkJCQlob29rX3ZlcnNpb24gPSBQUUFVVEhEQVRBX09BVVRIX0JFQVJFUl9UT0tFTl9WMjsK KwkJCQllbHNlCisJCQkJeworCQkJCQl1c2FnZShhcmd2KTsKKwkJCQkJZXhpdCgxKTsKKwkJCQl9 CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgMTAwMDoJCQkvKiAtLWV4cGVjdGVkLXNjb3BlICovCisJ CQkJZXhwZWN0ZWRfc2NvcGUgPSBvcHRhcmc7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgMTAwMToJ CQkvKiAtLWV4cGVjdGVkLXVyaSAqLworCQkJCWV4cGVjdGVkX3VyaSA9IG9wdGFyZzsKKwkJCQli cmVhazsKKworCQkJY2FzZSAxMDAyOgkJCS8qIC0tbm8taG9vayAqLworCQkJCW5vX2hvb2sgPSB0 cnVlOworCQkJCWJyZWFrOworCisJCQljYXNlIDEwMDM6CQkJLyogLS10b2tlbiAqLworCQkJCXRv a2VuID0gb3B0YXJnOworCQkJCWJyZWFrOworCisJCQljYXNlIDEwMDQ6CQkJLyogLS1oYW5nLWZv cmV2ZXIgKi8KKwkJCQloYW5nX2ZvcmV2ZXIgPSB0cnVlOworCQkJCWJyZWFrOworCisJCQljYXNl IDEwMDU6CQkJLyogLS1taXNiZWhhdmUgKi8KKwkJCQltaXNiZWhhdmVfbW9kZSA9IG9wdGFyZzsK KwkJCQlicmVhazsKKworCQkJY2FzZSAxMDA2OgkJCS8qIC0tc3RyZXNzLWFzeW5jICovCisJCQkJ c3RyZXNzX2FzeW5jID0gdHJ1ZTsKKwkJCQlicmVhazsKKworCQkJY2FzZSAxMDA3OgkJCS8qIC0t ZXhwZWN0ZWQtaXNzdWVyICovCisJCQkJZXhwZWN0ZWRfaXNzdWVyID0gb3B0YXJnOworCQkJCWJy ZWFrOworCisJCQljYXNlIDEwMDg6CQkJLyogLS1lcnJvciAqLworCQkJCWVycm1zZyA9IG9wdGFy ZzsKKwkJCQlicmVhazsKKworCQkJZGVmYXVsdDoKKwkJCQl1c2FnZShhcmd2KTsKKwkJCQlleGl0 KDEpOworCQl9CisJfQorCisJaWYgKGFyZ2MgIT0gKGZvcl9wbHVnaW4gPyBvcHRpbmQgOiBvcHRp bmQgKyAxKSkKKwl7CisJCXVzYWdlKGFyZ3YpOworCQlleGl0KDEpOworCX0KKworCXJldHVybiBh cmd2W29wdGluZF07Cit9CisKKy8qCisgKiBQUWF1dGhEYXRhSG9vayBpbXBsZW1lbnRhdGlvbi4g UmVwbGFjZXMgdGhlIGRlZmF1bHQgY2xpZW50IGZsb3cgYnkgaGFuZGxpbmcKKyAqIFBRQVVUSERB VEFfT0FVVEhfQkVBUkVSX1RPS0VOW19WMl0uCisgKi8KK2ludAorb2F1dGhfdGVzdF9hdXRoZGF0 YV9ob29rKFBHYXV0aERhdGEgdHlwZSwgUEdjb25uICpjb25uLCB2b2lkICpkYXRhKQoreworCVBH b2F1dGhCZWFyZXJSZXF1ZXN0ICpyZXE7CisJUEdvYXV0aEJlYXJlclJlcXVlc3RWMiAqcmVxMiA9 IE5VTEw7CisKKwlBc3NlcnQoaG9va192ZXJzaW9uID09IFBRQVVUSERBVEFfT0FVVEhfQkVBUkVS X1RPS0VOIHx8CisJCSAgIGhvb2tfdmVyc2lvbiA9PSBQUUFVVEhEQVRBX09BVVRIX0JFQVJFUl9U T0tFTl9WMik7CisKKwlpZiAobm9faG9vayB8fCB0eXBlICE9IGhvb2tfdmVyc2lvbikKKwkJcmV0 dXJuIDA7CisKKwlyZXEgPSBkYXRhOworCWlmICh0eXBlID09IFBRQVVUSERBVEFfT0FVVEhfQkVB UkVSX1RPS0VOX1YyKQorCQlyZXEyID0gZGF0YTsKKworCWlmIChoYW5nX2ZvcmV2ZXIpCisJewor CQkvKiBTdGFydCBhc3luY2hyb25vdXMgcHJvY2Vzc2luZy4gKi8KKwkJcmVxLT5hc3luYyA9IGFz eW5jX2NiOworCQlyZXR1cm4gMTsKKwl9CisKKwlpZiAobWlzYmVoYXZlX21vZGUpCisJeworCQlp ZiAoc3RyY21wKG1pc2JlaGF2ZV9tb2RlLCAibm8taG9vayIpICE9IDApCisJCQlyZXEtPmFzeW5j ID0gbWlzYmVoYXZlX2NiOworCQlyZXR1cm4gMTsKKwl9CisKKwlpZiAoZXhwZWN0ZWRfdXJpKQor CXsKKwkJaWYgKCFyZXEtPm9wZW5pZF9jb25maWd1cmF0aW9uKQorCQl7CisJCQlmcHJpbnRmKHN0 ZGVyciwgImV4cGVjdGVkIFVSSSBcIiVzXCIsIGdvdCBOVUxMXG4iLCBleHBlY3RlZF91cmkpOwor CQkJcmV0dXJuIC0xOworCQl9CisKKwkJaWYgKHN0cmNtcChleHBlY3RlZF91cmksIHJlcS0+b3Bl bmlkX2NvbmZpZ3VyYXRpb24pICE9IDApCisJCXsKKwkJCWZwcmludGYoc3RkZXJyLCAiZXhwZWN0 ZWQgVVJJIFwiJXNcIiwgZ290IFwiJXNcIlxuIiwgZXhwZWN0ZWRfdXJpLCByZXEtPm9wZW5pZF9j b25maWd1cmF0aW9uKTsKKwkJCXJldHVybiAtMTsKKwkJfQorCX0KKworCWlmIChleHBlY3RlZF9z Y29wZSkKKwl7CisJCWlmICghcmVxLT5zY29wZSkKKwkJeworCQkJZnByaW50ZihzdGRlcnIsICJl eHBlY3RlZCBzY29wZSBcIiVzXCIsIGdvdCBOVUxMXG4iLCBleHBlY3RlZF9zY29wZSk7CisJCQly ZXR1cm4gLTE7CisJCX0KKworCQlpZiAoc3RyY21wKGV4cGVjdGVkX3Njb3BlLCByZXEtPnNjb3Bl KSAhPSAwKQorCQl7CisJCQlmcHJpbnRmKHN0ZGVyciwgImV4cGVjdGVkIHNjb3BlIFwiJXNcIiwg Z290IFwiJXNcIlxuIiwgZXhwZWN0ZWRfc2NvcGUsIHJlcS0+c2NvcGUpOworCQkJcmV0dXJuIC0x OworCQl9CisJfQorCisJaWYgKGV4cGVjdGVkX2lzc3VlcikKKwl7CisJCWlmICghcmVxMikKKwkJ eworCQkJZnByaW50ZihzdGRlcnIsICItLWV4cGVjdGVkLWlzc3VlciBjYW5ub3QgYmUgY29tYmlu ZWQgd2l0aCAtdjFcbiIpOworCQkJcmV0dXJuIC0xOworCQl9CisKKwkJaWYgKCFyZXEyLT5pc3N1 ZXIpCisJCXsKKwkJCWZwcmludGYoc3RkZXJyLCAiZXhwZWN0ZWQgaXNzdWVyIFwiJXNcIiwgZ290 IE5VTExcbiIsIGV4cGVjdGVkX2lzc3Vlcik7CisJCQlyZXR1cm4gLTE7CisJCX0KKworCQlpZiAo c3RyY21wKGV4cGVjdGVkX2lzc3VlciwgcmVxMi0+aXNzdWVyKSAhPSAwKQorCQl7CisJCQlmcHJp bnRmKHN0ZGVyciwgImV4cGVjdGVkIGlzc3VlciBcIiVzXCIsIGdvdCBcIiVzXCJcbiIsIGV4cGVj dGVkX2lzc3VlciwgcmVxMi0+aXNzdWVyKTsKKwkJCXJldHVybiAtMTsKKwkJfQorCX0KKworCWlm IChlcnJtc2cpCisJeworCQlpZiAodG9rZW4pCisJCXsKKwkJCWZwcmludGYoc3RkZXJyLCAiLS1l cnJvciBjYW5ub3QgYmUgY29tYmluZWQgd2l0aCAtLXRva2VuXG4iKTsKKwkJCXJldHVybiAtMTsK KwkJfQorCQllbHNlIGlmICghcmVxMikKKwkJeworCQkJZnByaW50ZihzdGRlcnIsICItLWVycm9y IGNhbm5vdCBiZSBjb21iaW5lZCB3aXRoIC12MVxuIik7CisJCQlyZXR1cm4gLTE7CisJCX0KKwor CQlyZXEyLT5lcnJvciA9IGVycm1zZzsKKwkJcmV0dXJuIC0xOworCX0KKworCXJlcS0+dG9rZW4g PSB0b2tlbjsKKwlyZXR1cm4gMTsKK30KKworLyoKKyAqIFNldHMgdXAgYSByZXF1ZXN0IGZvciBh IHBsdWdpbiBtb2R1bGUgKHBnX3N0YXJ0X29hdXRoYmVhcmVyKCkpIHJhdGhlciB0aGFuCisgKiB1 c2luZyB0aGUgaG9vay4KKyAqLworaW50CitvYXV0aF90ZXN0X3N0YXJ0X2Zsb3coUEdjb25uICpj b25uLCBQR29hdXRoQmVhcmVyUmVxdWVzdFYyICpyZXF1ZXN0KQoreworCWludAkJCXJldDsKKwor CS8qCisJICogV2UgY2FuIHN0aWxsIGRlZmVyIHRvIHRoZSBob29rIGFib3ZlIHRvIGF2b2lkIGNv cHlpbmcgY29kZTsgd2UganVzdAorCSAqIGhhdmUgdG8gdHJhbnNsYXRlIHRoZSByZXR1cm4gdmFs dWUuCisJICovCisJcmV0ID0gb2F1dGhfdGVzdF9hdXRoZGF0YV9ob29rKFBRQVVUSERBVEFfT0FV VEhfQkVBUkVSX1RPS0VOX1YyLCBjb25uLAorCQkJCQkJCQkgICByZXF1ZXN0KTsKKworCWlmIChy ZXQgPT0gMCkKKwl7CisJCS8qIFRoaXMgaXMgYSBidWcgaW4gdGhlIHRlc3QuICovCisJCWZwcmlu dGYoc3RkZXJyLCAicGx1Z2luIHRlc3RzIGNhbm5vdCBtYWtlIHVzZSBvZiAtdjEgb3IgLS1uby1o b29rXG4iKTsKKwkJZXhpdCgxKTsKKwl9CisKKwlyZXR1cm4gKHJldCA9PSAxKSA/IDAgOiAtMTsK K30KKworc3RhdGljIFBvc3RncmVzUG9sbGluZ1N0YXR1c1R5cGUKK2FzeW5jX2NiKFBHY29ubiAq Y29ubiwgUEdvYXV0aEJlYXJlclJlcXVlc3QgKnJlcSwgcGdzb2NrZXQgKmFsdHNvY2spCit7CisJ aWYgKGhhbmdfZm9yZXZlcikKKwl7CisJCS8qCisJCSAqIFRoaXMgY29kZSB0ZXN0cyB0aGF0IG5v dGhpbmcgaXMgaW50ZXJmZXJpbmcgd2l0aCBsaWJwcSdzIGhhbmRsaW5nCisJCSAqIG9mIGNvbm5l Y3RfdGltZW91dC4KKwkJICovCisJCXN0YXRpYyBwZ3NvY2tldCBzb2NrID0gUEdJTlZBTElEX1NP Q0tFVDsKKworCQlpZiAoc29jayA9PSBQR0lOVkFMSURfU09DS0VUKQorCQl7CisJCQkvKiBGaXJz dCBjYWxsLiBDcmVhdGUgYW4gdW5ib3VuZCBzb2NrZXQgdG8gd2FpdCBvbi4gKi8KKyNpZmRlZiBX SU4zMgorCQkJV1NBREFUQQkJd3NhRGF0YTsKKwkJCWludAkJCWVycjsKKworCQkJZXJyID0gV1NB U3RhcnR1cChNQUtFV09SRCgyLCAyKSwgJndzYURhdGEpOworCQkJaWYgKGVycikKKwkJCXsKKwkJ CQlwZXJyb3IoIldTQVN0YXJ0dXAgZmFpbGVkIik7CisJCQkJcmV0dXJuIFBHUkVTX1BPTExJTkdf RkFJTEVEOworCQkJfQorI2VuZGlmCisJCQlzb2NrID0gc29ja2V0KEFGX0lORVQsIFNPQ0tfREdS QU0sIDApOworCQkJaWYgKHNvY2sgPT0gUEdJTlZBTElEX1NPQ0tFVCkKKwkJCXsKKwkJCQlwZXJy b3IoImZhaWxlZCB0byBjcmVhdGUgZGF0YWdyYW0gc29ja2V0Iik7CisJCQkJcmV0dXJuIFBHUkVT X1BPTExJTkdfRkFJTEVEOworCQkJfQorCQl9CisKKwkJLyogTWFrZSBsaWJwcSB3YWl0IG9uIHRo ZSAodW5yZWFkYWJsZSkgc29ja2V0LiAqLworCQkqYWx0c29jayA9IHNvY2s7CisJCXJldHVybiBQ R1JFU19QT0xMSU5HX1JFQURJTkc7CisJfQorCisJcmVxLT50b2tlbiA9IHRva2VuOworCXJldHVy biBQR1JFU19QT0xMSU5HX09LOworfQorCitzdGF0aWMgUG9zdGdyZXNQb2xsaW5nU3RhdHVzVHlw ZQorbWlzYmVoYXZlX2NiKFBHY29ubiAqY29ubiwgUEdvYXV0aEJlYXJlclJlcXVlc3QgKnJlcSwg cGdzb2NrZXQgKmFsdHNvY2spCit7CisJaWYgKHN0cmNtcChtaXNiZWhhdmVfbW9kZSwgImZhaWwt YXN5bmMiKSA9PSAwKQorCXsKKwkJLyogSnVzdCBmYWlsICJub3JtYWxseSIuICovCisJCWlmIChl cnJtc2cpCisJCXsKKwkJCVBHb2F1dGhCZWFyZXJSZXF1ZXN0VjIgKnJlcTI7CisKKwkJCWlmICho b29rX3ZlcnNpb24gPT0gUFFBVVRIREFUQV9PQVVUSF9CRUFSRVJfVE9LRU4pCisJCQl7CisJCQkJ ZnByaW50ZihzdGRlcnIsICItLWVycm9yIGNhbm5vdCBiZSBjb21iaW5lZCB3aXRoIC12MVxuIik7 CisJCQkJZXhpdCgxKTsKKwkJCX0KKworCQkJcmVxMiA9IChQR29hdXRoQmVhcmVyUmVxdWVzdFYy ICopIHJlcTsKKwkJCXJlcTItPmVycm9yID0gZXJybXNnOworCQl9CisKKwkJcmV0dXJuIFBHUkVT X1BPTExJTkdfRkFJTEVEOworCX0KKwllbHNlIGlmIChzdHJjbXAobWlzYmVoYXZlX21vZGUsICJu by10b2tlbiIpID09IDApCisJeworCQkvKiBDYWxsYmFja3MgbXVzdCBhc3NpZ24gcmVxLT50b2tl biBiZWZvcmUgcmV0dXJuaW5nIE9LLiAqLworCQlyZXR1cm4gUEdSRVNfUE9MTElOR19PSzsKKwl9 CisJZWxzZSBpZiAoc3RyY21wKG1pc2JlaGF2ZV9tb2RlLCAibm8tc29ja2V0IikgPT0gMCkKKwl7 CisJCS8qIENhbGxiYWNrcyBtdXN0IGFzc2lnbiAqYWx0c29jayBiZWZvcmUgYXNraW5nIGZvciBw b2xsaW5nLiAqLworCQlyZXR1cm4gUEdSRVNfUE9MTElOR19SRUFESU5HOworCX0KKwllbHNlCisJ eworCQlmcHJpbnRmKHN0ZGVyciwgInVucmVjb2duaXplZCAtLW1pc2JlaGF2ZSBtb2RlOiAlc1xu IiwgbWlzYmVoYXZlX21vZGUpOworCQlleGl0KDEpOworCX0KK30KZGlmZiAtLWdpdCBhL3NyYy90 ZXN0L21vZHVsZXMvb2F1dGhfdmFsaWRhdG9yL3QvMDAyX2NsaWVudC5wbCBiL3NyYy90ZXN0L21v ZHVsZXMvb2F1dGhfdmFsaWRhdG9yL3QvMDAyX2NsaWVudC5wbAppbmRleCAxMmFmMzViN2Q5Ni4u YjUwNDUxZWZiNzQgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L21vZHVsZXMvb2F1dGhfdmFsaWRhdG9y L3QvMDAyX2NsaWVudC5wbAorKysgYi9zcmMvdGVzdC9tb2R1bGVzL29hdXRoX3ZhbGlkYXRvci90 LzAwMl9jbGllbnQucGwKQEAgLTEsNiArMSw2IEBACiAjCiAjIEV4ZXJjaXNlcyB0aGUgQVBJIGZv ciBjdXN0b20gT0F1dGggY2xpZW50IGZsb3dzLCB1c2luZyB0aGUgb2F1dGhfaG9va19jbGllbnQK LSMgdGVzdCBkcml2ZXIuCisjIHRlc3QgZHJpdmVyIGFuZCB0aGUgb2F1dGhfZmxvdyBjdXN0b20g cGx1Z2luLgogIwogIyBDb3B5cmlnaHQgKGMpIDIwMjEtMjAyNiwgUG9zdGdyZVNRTCBHbG9iYWwg RGV2ZWxvcG1lbnQgR3JvdXAKICMKQEAgLTIwLDYgKzIwLDEwIEBAIGlmICghJEVOVntQR19URVNU X0VYVFJBfSB8fCAkRU5We1BHX1RFU1RfRVhUUkF9ICF+IC9cYm9hdXRoXGIvKQogCSAgJ1BvdGVu dGlhbGx5IHVuc2FmZSB0ZXN0IG9hdXRoIG5vdCBlbmFibGVkIGluIFBHX1RFU1RfRVhUUkEnOwog fQogCitteSAkcGx1Z2luX3N1cHBvcnRlZCA9ICgKKwkJIGNoZWNrX3BnX2NvbmZpZygiI2RlZmlu ZSBIQVZFX1NZU19FVkVOVF9IIDEiKQorCSAgb3IgY2hlY2tfcGdfY29uZmlnKCIjZGVmaW5lIEhB VkVfU1lTX0VQT0xMX0ggMSIpKTsKKwogIwogIyBDbHVzdGVyIFNldHVwCiAjCkBAIC03Miw2ICs3 Niw4IEBAIHN1YiB0ZXN0CiAJCSRmbGFncyA9ICRwYXJhbXN7ZmxhZ3N9OwogCX0KIAorCSMgRmly c3QgcnVuIHRoZSBvYXV0aF9ob29rX2NsaWVudCwgd2hpY2ggdXNlcyBQUWF1dGhEYXRhSG9vayB0 byBpbnNlcnQgYSBuZXcKKwkjIE9BdXRoIGZsb3cuCiAJbXkgQGNtZCA9ICgib2F1dGhfaG9va19j bGllbnQiLCBAeyRmbGFnc30sICRjb21tb25fY29ubnN0cik7CiAJbm90ZSAicnVubmluZyAnIiAu IGpvaW4oIicgJyIsIEBjbWQpIC4gIiciOwogCkBAIC0xMDMsNiArMTA5LDM3IEBAIHN1YiB0ZXN0 CiAJCSRub2RlLT5sb2dfY2hlY2soIiR0ZXN0X25hbWU6IGxvZyBtYXRjaGVzIiwKIAkJCSRsb2df c3RhcnQsIGxvZ19saWtlID0+ICRwYXJhbXN7bG9nX2xpa2V9KTsKIAl9CisKKyAgU0tJUDoKKwl7 CisJCWxhc3QgU0tJUCBpZiAkcGFyYW1ze2hvb2tfb25seX07CisJCXNraXAgIk9BdXRoIG1vZHVs ZXMgYXJlIG5vdCBzdXBwb3J0ZWQgb24gdGhpcyBwbGF0Zm9ybSIKKwkJICB1bmxlc3MgJHBsdWdp bl9zdXBwb3J0ZWQ7CisKKwkJIyBSdW4gdGhlIHNhbWUgdGVzdCB3aXRoIHBzcWwgaXRzZWxmLCBs b2FkaW5nIHRoZSBvYXV0aF9mbG93LnNvIG1vZHVsZS4KKwkJbG9jYWwgJEVOVntQR09BVVRITU9E VUxFfSA9ICRFTlZ7Zmxvd19tb2R1bGVfcGF0aH07CisKKwkJIyBGbGFncyBhcmUgcGFzc2VkIHRv IHRoZSBtb2R1bGUgdmlhIE9BVVRIX1RFU1RfRkxBR1MsIHdpdGggMHgwMSBhcyBhCisJCSMgc2Vw YXJhdG9yLgorCQlsb2NhbCAkRU5We09BVVRIX1RFU1RfRkxBR1N9ID0gam9pbigiXHgwMSIsIEB7 JGZsYWdzfSk7CisKKwkJaWYgKCRwYXJhbXN7ZXhwZWN0X3N1Y2Nlc3N9KQorCQl7CisJCQkkbm9k ZS0+Y29ubmVjdF9vaygKKwkJCQkkY29tbW9uX2Nvbm5zdHIsCisJCQkJIltwbHVnaW4gZmxvd10g JHRlc3RfbmFtZSIsCisJCQkJZXhwZWN0ZWRfc3RkZXJyID0+ICRwYXJhbXN7ZXhwZWN0ZWRfc3Rk ZXJyfSwKKwkJCQlsb2dfbGlrZSA9PiAkcGFyYW1ze2xvZ19saWtlfSk7CisJCX0KKwkJZWxzZQor CQl7CisJCQkkbm9kZS0+Y29ubmVjdF9mYWlscygKKwkJCQkkY29tbW9uX2Nvbm5zdHIsCisJCQkJ IltwbHVnaW4gZmxvd10gJHRlc3RfbmFtZSIsCisJCQkJZXhwZWN0ZWRfc3RkZXJyID0+ICRwYXJh bXN7ZXhwZWN0ZWRfc3RkZXJyfSwKKwkJCQlsb2dfbGlrZSA9PiAkcGFyYW1ze2xvZ19saWtlfSk7 CisJCX0KKwl9CiB9CiAKIHRlc3QoCkBAIC0xMTksNiArMTU2LDcgQEAgdGVzdCgKICMgTWFrZSBz dXJlIHRoZSB2MSBob29rIGNvbnRpbnVlcyB0byB3b3JrLgogdGVzdCgKIAkidjEgc3luY2hyb25v dXMgaG9vayBjYW4gcHJvdmlkZSBhIHRva2VuIiwKKwlob29rX29ubHkgPT4gMSwgICAgIyBwbHVn aW5zIGRvbid0IHN1cHBvcnQgQVBJIHYxCiAJZmxhZ3MgPT4gWwogCQkiLXYxIiwKIAkJIi0tdG9r ZW4iID0+ICJteS10b2tlbi12MSIsCkBAIC0xMzMsNiArMTcxLDcgQEAgaWYgKCRFTlZ7d2l0aF9s aWJjdXJsfSBuZSAneWVzJykKIAkjIGxpYnBxIHNob3VsZCBoZWxwIHVzZXJzIG91dCBpZiBubyBP QXV0aCBzdXBwb3J0IGlzIGJ1aWx0IGluLgogCXRlc3QoCiAJCSJmYWlscyB3aXRob3V0IGN1c3Rv bSBob29rIGluc3RhbGxlZCIsCisJCWhvb2tfb25seSA9PiAxLCAgICAjIHBsdWdpbnMgY2FuJ3Qg dXNlIC0tbm8taG9vawogCQlmbGFncyA9PiBbIi0tbm8taG9vayJdLAogCQlleHBlY3RlZF9zdGRl cnIgPT4KIAkJICBxci9ubyBPQXV0aCBmbG93cyBhcmUgYXZhaWxhYmxlIFwodHJ5IGluc3RhbGxp bmcgdGhlIGxpYnBxLW9hdXRoIHBhY2thZ2VcKS8KQEAgLTE5Nyw0ICsyMzYsMTkgQEAgdGVzdCgK IAlleHBlY3RlZF9zdGRlcnIgPT4KIAkgIHFyL3VzZXItZGVmaW5lZCBPQXV0aCBmbG93IGZhaWxl ZDogYXN5bmMgZXJyb3IgbWVzc2FnZS8pOwogCitTS0lQOgoreworCXNraXAgIk9BdXRoIG1vZHVs ZXMgYXJlIG5vdCBzdXBwb3J0ZWQgb24gdGhpcyBwbGF0Zm9ybSIKKwkgIHVubGVzcyAkcGx1Z2lu X3N1cHBvcnRlZDsKKworCSMgTWFrZSBzdXJlIGEgbWlzYWltZWQgUEdPQVVUSE1PRFVMRSBnaXZl cyB0aGUgY29ycmVjdCBlcnJvciBtZXNzYWdlLgorCWxvY2FsICRFTlZ7UEdPQVVUSE1PRFVMRX0g PSAkbm9kZS0+YmFzZWRpciAuICcvbm9uZXhpc3RlbnQuc28nOworCisJJG5vZGUtPmNvbm5lY3Rf ZmFpbHMoCisJCSRjb21tb25fY29ubnN0ciwKKwkJIlBHT0FVVEhNT0RVTEUgZXJyb3IgbWVzc2Fn ZXMiLAorCQlleHBlY3RlZF9zdGRlcnIgPT4KKwkJICBxci91c2VyLWRlZmluZWQgT0F1dGggZmxv dyBmYWlsZWQ6IHBsdWdpbiBjb3VsZCBub3QgYmUgbG9hZGVkLyk7Cit9CisKIGRvbmVfdGVzdGlu ZygpOwotLSAKMi4zNC4xCgo= --00000000000032285b064bd372e9--