Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1rTPRy-002iWZ-Sm for pgsql-hackers@arkaria.postgresql.org; Fri, 26 Jan 2024 16:53:07 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.94.2) (envelope-from ) id 1rTPRx-000Q8V-Rj for pgsql-hackers@arkaria.postgresql.org; Fri, 26 Jan 2024 16:53:05 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1rTPRx-000Q8H-BJ for pgsql-hackers@lists.postgresql.org; Fri, 26 Jan 2024 16:53:05 +0000 Received: from mail-yb1-f174.google.com ([209.85.219.174]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.94.2) (envelope-from ) id 1rTPRt-003r5C-Ip for pgsql-hackers@lists.postgresql.org; Fri, 26 Jan 2024 16:53:04 +0000 Received: by mail-yb1-f174.google.com with SMTP id 3f1490d57ef6-dc22ade26d8so517102276.1 for ; Fri, 26 Jan 2024 08:53:00 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1706287978; x=1706892778; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=g9NQNqefV1ekuvE5QFjvs2JxbQnTHL/bioxVSwbIYmo=; b=S8V3Wg9GxfDoKQTzYrGcddPmf/2ZRlG4w57QmvaEUPo2ph5pAi3G0h/gTgA+RHc942 LizFxVCQnhBEG7tGgfzvEXFmQd6qVgSEMtEuiLElTNETExxwJDkBHyVcSjYCG/DxQO5N zXe5aqrMRzsigajkkkygD7Yi+IBuJkFHXv+AhTwa8wH810+hvNnq7JvrEaj63W6NcNym m06ASQfy6zhgEtAhKv1oA57cAl5IPBOF2whDEZMF+pCglb1icf1b+WoXrq6IDYYrrWHy 4vT+Q/4IJHdHER0AJwgpUkX/KNex5uy4yPT9vReXiAvB4SXIQqyLi+AwYsVe646opaDH uGKw== X-Gm-Message-State: AOJu0YzoOTrhN8HjOGb28oBMGFPrJUOnEtN7UEMoEjgL/r35eCY+2dQ4 bUAmR712JBxbwuzahwqS9NYXm8wkKnq+ZrO9XGAd82c5PNguXcUHmdbVyk2vLJCQtGejfI2AGAn pVcKhf812txwyaY5k6/5t1EpWkdsOAqxT2+sQwA== X-Google-Smtp-Source: AGHT+IHl6dVx9kg6cklSaiWChu5zmuv2iAzpNu7gFNQ0ujZpvtmJpIAnwnaIqlp4LDj1Y/Y4+ApvLlTk9Lr9TkGxpkk= X-Received: by 2002:a25:fe0c:0:b0:dc2:46c6:979e with SMTP id k12-20020a25fe0c000000b00dc246c6979emr119869ybe.76.1706287977744; Fri, 26 Jan 2024 08:52:57 -0800 (PST) MIME-Version: 1.0 References: <202401261211.r7kf6dik7y34@alvherre.pgsql> In-Reply-To: <202401261211.r7kf6dik7y34@alvherre.pgsql> From: Jelte Fennema-Nio Date: Fri, 26 Jan 2024 17:52:45 +0100 Message-ID: Subject: Re: [EXTERNAL] Re: Add non-blocking version of PQcancel To: Alvaro Herrera Cc: vignesh C , Thomas Munro , Denis Laxalde , Greg Stark , Tom Lane , "Gregory Stark (as CFM)" , Jelte Fennema , Daniel Gustafsson , Peter Eisentraut , Andres Freund , Justin Pryzby , Robert Haas , "pgsql-hackers@lists.postgresql.org" Content-Type: multipart/mixed; boundary="000000000000cc7872060fdc20d9" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000cc7872060fdc20d9 Content-Type: text/plain; charset="UTF-8" On Fri, 26 Jan 2024 at 13:11, Alvaro Herrera wrote: > I wonder, would it make sense to put all these new functions in a > separate file fe-cancel.c? Okay I tried doing that. I think the end result is indeed quite nice, having all the cancellation related functions together in a file. But it did require making a bunch of static functions in fe-connect extern, and adding them to libpq-int.h. On one hand that seems fine to me, on the other maybe that indicates that this cancellation logic makes sense to be in the same file as the other connection functions (in a sense, connecting is all that a cancel request does). --000000000000cc7872060fdc20d9 Content-Type: application/octet-stream; name="v26-0005-Start-using-new-libpq-cancel-APIs.patch" Content-Disposition: attachment; filename="v26-0005-Start-using-new-libpq-cancel-APIs.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_lruvnsb64 RnJvbSAwYThkZTIxZWM4NzI4YTQ3NGQ4OWQxOTg4MGQ0NGVmYWUzOTAzOGVmIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBKZWx0ZSBGZW5uZW1hLU5pbyA8amVsdGUuZmVubmVtYUBtaWNy b3NvZnQuY29tPgpEYXRlOiBUaHUsIDE0IERlYyAyMDIzIDEzOjM5OjA5ICswMTAwClN1YmplY3Q6 IFtQQVRDSCB2MjYgNS81XSBTdGFydCB1c2luZyBuZXcgbGlicHEgY2FuY2VsIEFQSXMKCkEgcHJl dmlvdXMgY29tbWl0IGludHJvZHVjZWQgbmV3IEFQSXMgdG8gbGlicHEgZm9yIGNhbmNlbGxpbmcg cXVlcmllcy4KVGhpcyByZXBsYWNlcyB0aGUgdXNhZ2Ugb2YgdGhlIG9sZCBBUElzIGluIHRoZSBj b2RlYmFzZSB3aXRoIHRoZXNlIG5ld2VyCm9uZXMuCi0tLQogY29udHJpYi9kYmxpbmsvZGJsaW5r LmMgICAgICAgICAgICAgICAgICAgICAgIHwgIDMwICsrKy0tCiBjb250cmliL3Bvc3RncmVzX2Zk dy9jb25uZWN0aW9uLmMgICAgICAgICAgICAgfCAxMDUgKysrKysrKysrKysrKysrLS0tCiAuLi4v cG9zdGdyZXNfZmR3L2V4cGVjdGVkL3Bvc3RncmVzX2Zkdy5vdXQgICAgfCAgMTUgKysrCiBjb250 cmliL3Bvc3RncmVzX2Zkdy9zcWwvcG9zdGdyZXNfZmR3LnNxbCAgICAgfCAgIDcgKysKIHNyYy9m ZV91dGlscy9jb25uZWN0X3V0aWxzLmMgICAgICAgICAgICAgICAgICB8ICAxMSArLQogc3JjL3Rl c3QvaXNvbGF0aW9uL2lzb2xhdGlvbnRlc3Rlci5jICAgICAgICAgIHwgIDI5ICsrLS0tCiA2IGZp bGVzIGNoYW5nZWQsIDE0NSBpbnNlcnRpb25zKCspLCA1MiBkZWxldGlvbnMoLSkKCmRpZmYgLS1n aXQgYS9jb250cmliL2RibGluay9kYmxpbmsuYyBiL2NvbnRyaWIvZGJsaW5rL2RibGluay5jCmlu ZGV4IDE5YTM2MjUyNmQyLi44MTc0OWIyY2RkMCAxMDA2NDQKLS0tIGEvY29udHJpYi9kYmxpbmsv ZGJsaW5rLmMKKysrIGIvY29udHJpYi9kYmxpbmsvZGJsaW5rLmMKQEAgLTEzNDYsMjIgKzEzNDYs MzIgQEAgUEdfRlVOQ1RJT05fSU5GT19WMShkYmxpbmtfY2FuY2VsX3F1ZXJ5KTsKIERhdHVtCiBk YmxpbmtfY2FuY2VsX3F1ZXJ5KFBHX0ZVTkNUSU9OX0FSR1MpCiB7Ci0JaW50CQkJcmVzOwogCVBH Y29ubgkgICAqY29ubjsKLQlQR2NhbmNlbCAgICpjYW5jZWw7Ci0JY2hhcgkJZXJyYnVmWzI1Nl07 CisJUEdjYW5jZWxDb25uICpjYW5jZWxDb25uOworCWNoYXIJICAgKm1zZzsKIAogCWRibGlua19p bml0KCk7CiAJY29ubiA9IGRibGlua19nZXRfbmFtZWRfY29ubih0ZXh0X3RvX2NzdHJpbmcoUEdf R0VUQVJHX1RFWFRfUFAoMCkpKTsKLQljYW5jZWwgPSBQUWdldENhbmNlbChjb25uKTsKKwljYW5j ZWxDb25uID0gUFFjYW5jZWxDb25uKGNvbm4pOwogCi0JcmVzID0gUFFjYW5jZWwoY2FuY2VsLCBl cnJidWYsIDI1Nik7Ci0JUFFmcmVlQ2FuY2VsKGNhbmNlbCk7CisJUEdfVFJZKCk7CisJeworCQlp ZiAoIVBRY2FuY2VsU2VuZChjYW5jZWxDb25uKSkKKwkJeworCQkJbXNnID0gcGNob21wKFBRY2Fu Y2VsRXJyb3JNZXNzYWdlKGNhbmNlbENvbm4pKTsKKwkJfQorCQllbHNlCisJCXsKKwkJCW1zZyA9 ICJPSyI7CisJCX0KKwl9CisJUEdfRklOQUxMWSgpOworCXsKKwkJUFFjYW5jZWxGaW5pc2goY2Fu Y2VsQ29ubik7CisJfQorCVBHX0VORF9UUlkoKTsKIAotCWlmIChyZXMgPT0gMSkKLQkJUEdfUkVU VVJOX1RFWFRfUChjc3RyaW5nX3RvX3RleHQoIk9LIikpOwotCWVsc2UKLQkJUEdfUkVUVVJOX1RF WFRfUChjc3RyaW5nX3RvX3RleHQoZXJyYnVmKSk7CisJUEdfUkVUVVJOX1RFWFRfUChjc3RyaW5n X3RvX3RleHQobXNnKSk7CiB9CiAKIApkaWZmIC0tZ2l0IGEvY29udHJpYi9wb3N0Z3Jlc19mZHcv Y29ubmVjdGlvbi5jIGIvY29udHJpYi9wb3N0Z3Jlc19mZHcvY29ubmVjdGlvbi5jCmluZGV4IDQ5 MzFlYmY1OTE1Li4zYWM3NGZmNmE3ZiAxMDA2NDQKLS0tIGEvY29udHJpYi9wb3N0Z3Jlc19mZHcv Y29ubmVjdGlvbi5jCisrKyBiL2NvbnRyaWIvcG9zdGdyZXNfZmR3L2Nvbm5lY3Rpb24uYwpAQCAt MTMzLDcgKzEzMyw3IEBAIHN0YXRpYyB2b2lkIHBnZmR3X2ludmFsX2NhbGxiYWNrKERhdHVtIGFy ZywgaW50IGNhY2hlaWQsIHVpbnQzMiBoYXNodmFsdWUpOwogc3RhdGljIHZvaWQgcGdmZHdfcmVq ZWN0X2luY29tcGxldGVfeGFjdF9zdGF0ZV9jaGFuZ2UoQ29ubkNhY2hlRW50cnkgKmVudHJ5KTsK IHN0YXRpYyB2b2lkIHBnZmR3X3Jlc2V0X3hhY3Rfc3RhdGUoQ29ubkNhY2hlRW50cnkgKmVudHJ5 LCBib29sIHRvcGxldmVsKTsKIHN0YXRpYyBib29sIHBnZmR3X2NhbmNlbF9xdWVyeShQR2Nvbm4g KmNvbm4pOwotc3RhdGljIGJvb2wgcGdmZHdfY2FuY2VsX3F1ZXJ5X2JlZ2luKFBHY29ubiAqY29u bik7CitzdGF0aWMgYm9vbCBwZ2Zkd19jYW5jZWxfcXVlcnlfYmVnaW4oUEdjb25uICpjb25uLCBU aW1lc3RhbXBUeiBlbmR0aW1lKTsKIHN0YXRpYyBib29sIHBnZmR3X2NhbmNlbF9xdWVyeV9lbmQo UEdjb25uICpjb25uLCBUaW1lc3RhbXBUeiBlbmR0aW1lLAogCQkJCQkJCQkgICBib29sIGNvbnN1 bWVfaW5wdXQpOwogc3RhdGljIGJvb2wgcGdmZHdfZXhlY19jbGVhbnVwX3F1ZXJ5KFBHY29ubiAq Y29ubiwgY29uc3QgY2hhciAqcXVlcnksCkBAIC0xMzE1LDM2ICsxMzE1LDEwNCBAQCBwZ2Zkd19j YW5jZWxfcXVlcnkoUEdjb25uICpjb25uKQogCWVuZHRpbWUgPSBUaW1lc3RhbXBUelBsdXNNaWxs aXNlY29uZHMoR2V0Q3VycmVudFRpbWVzdGFtcCgpLAogCQkJCQkJCQkJCSAgQ09OTkVDVElPTl9D TEVBTlVQX1RJTUVPVVQpOwogCi0JaWYgKCFwZ2Zkd19jYW5jZWxfcXVlcnlfYmVnaW4oY29ubikp CisJaWYgKCFwZ2Zkd19jYW5jZWxfcXVlcnlfYmVnaW4oY29ubiwgZW5kdGltZSkpCiAJCXJldHVy biBmYWxzZTsKIAlyZXR1cm4gcGdmZHdfY2FuY2VsX3F1ZXJ5X2VuZChjb25uLCBlbmR0aW1lLCBm YWxzZSk7CiB9CiAKIHN0YXRpYyBib29sCi1wZ2Zkd19jYW5jZWxfcXVlcnlfYmVnaW4oUEdjb25u ICpjb25uKQorcGdmZHdfY2FuY2VsX3F1ZXJ5X2JlZ2luKFBHY29ubiAqY29ubiwgVGltZXN0YW1w VHogZW5kdGltZSkKIHsKLQlQR2NhbmNlbCAgICpjYW5jZWw7Ci0JY2hhcgkJZXJyYnVmWzI1Nl07 CisJYm9vbAkJdGltZWRfb3V0ID0gZmFsc2U7CisJYm9vbAkJZmFpbGVkID0gZmFsc2U7CisJUEdj YW5jZWxDb25uICpjYW5jZWxfY29ubiA9IFBRY2FuY2VsQ29ubihjb25uKTsKIAotCS8qCi0JICog SXNzdWUgY2FuY2VsIHJlcXVlc3QuICBVbmZvcnR1bmF0ZWx5LCB0aGVyZSdzIG5vIGdvb2Qgd2F5 IHRvIGxpbWl0IHRoZQotCSAqIGFtb3VudCBvZiB0aW1lIHRoYXQgd2UgbWlnaHQgYmxvY2sgaW5z aWRlIFBRZ2V0Q2FuY2VsKCkuCi0JICovCi0JaWYgKChjYW5jZWwgPSBQUWdldENhbmNlbChjb25u KSkpCisKKwlpZiAoUFFjYW5jZWxTdGF0dXMoY2FuY2VsX2Nvbm4pID09IENPTk5FQ1RJT05fQkFE KQogCXsKLQkJaWYgKCFQUWNhbmNlbChjYW5jZWwsIGVycmJ1Ziwgc2l6ZW9mKGVycmJ1ZikpKQor CQlQR19UUlkoKTsKIAkJewogCQkJZXJlcG9ydChXQVJOSU5HLAogCQkJCQkoZXJyY29kZShFUlJD T0RFX0NPTk5FQ1RJT05fRkFJTFVSRSksCiAJCQkJCSBlcnJtc2coImNvdWxkIG5vdCBzZW5kIGNh bmNlbCByZXF1ZXN0OiAlcyIsCi0JCQkJCQkJZXJyYnVmKSkpOwotCQkJUFFmcmVlQ2FuY2VsKGNh bmNlbCk7Ci0JCQlyZXR1cm4gZmFsc2U7CisJCQkJCQkJcGNob21wKFBRY2FuY2VsRXJyb3JNZXNz YWdlKGNhbmNlbF9jb25uKSkpKSk7CiAJCX0KLQkJUFFmcmVlQ2FuY2VsKGNhbmNlbCk7CisJCVBH X0ZJTkFMTFkoKTsKKwkJeworCQkJUFFjYW5jZWxGaW5pc2goY2FuY2VsX2Nvbm4pOworCQl9CisJ CVBHX0VORF9UUlkoKTsKKwkJcmV0dXJuIGZhbHNlOwogCX0KIAotCXJldHVybiB0cnVlOworCS8q IEluIHdoYXQgZm9sbG93cywgZG8gbm90IGxlYWsgYW55IFBHY2FuY2VsQ29ubiBvbiBhbiBlcnJv ci4gKi8KKwlQR19UUlkoKTsKKwl7CisJCXdoaWxlICh0cnVlKQorCQl7CisJCQlUaW1lc3RhbXBU eiBub3cgPSBHZXRDdXJyZW50VGltZXN0YW1wKCk7CisJCQlsb25nCQljdXJfdGltZW91dDsKKwkJ CVBvc3RncmVzUG9sbGluZ1N0YXR1c1R5cGUgcG9sbHJlcyA9IFBRY2FuY2VsUG9sbChjYW5jZWxf Y29ubik7CisJCQlpbnQJCQl3YWl0RXZlbnRzID0gV0xfTEFUQ0hfU0VUIHwgV0xfVElNRU9VVCB8 IFdMX0VYSVRfT05fUE1fREVBVEg7CisKKwkJCWlmIChwb2xscmVzID09IFBHUkVTX1BPTExJTkdf T0spCisJCQl7CisJCQkJYnJlYWs7CisJCQl9CisKKwkJCS8qIElmIHRpbWVvdXQgaGFzIGV4cGly ZWQsIGdpdmUgdXAsIGVsc2UgZ2V0IHNsZWVwIHRpbWUuICovCisJCQljdXJfdGltZW91dCA9IFRp bWVzdGFtcERpZmZlcmVuY2VNaWxsaXNlY29uZHMobm93LCBlbmR0aW1lKTsKKwkJCWlmIChjdXJf dGltZW91dCA8PSAwKQorCQkJeworCQkJCXRpbWVkX291dCA9IHRydWU7CisJCQkJZmFpbGVkID0g dHJ1ZTsKKwkJCQlnb3RvIGV4aXQ7CisJCQl9CisKKwkJCXN3aXRjaCAocG9sbHJlcykKKwkJCXsK KwkJCQljYXNlIFBHUkVTX1BPTExJTkdfUkVBRElORzoKKwkJCQkJd2FpdEV2ZW50cyB8PSBXTF9T T0NLRVRfUkVBREFCTEU7CisJCQkJCWJyZWFrOworCQkJCWNhc2UgUEdSRVNfUE9MTElOR19XUklU SU5HOgorCQkJCQl3YWl0RXZlbnRzIHw9IFdMX1NPQ0tFVF9XUklURUFCTEU7CisJCQkJCWJyZWFr OworCQkJCWRlZmF1bHQ6CisJCQkJCWZhaWxlZCA9IHRydWU7CisJCQkJCWdvdG8gZXhpdDsKKwkJ CX0KKworCQkJLyogU2xlZXAgdW50aWwgdGhlcmUncyBzb21ldGhpbmcgdG8gZG8gKi8KKwkJCVdh aXRMYXRjaE9yU29ja2V0KE15TGF0Y2gsIHdhaXRFdmVudHMsIFBRY2FuY2VsU29ja2V0KGNhbmNl bF9jb25uKSwKKwkJCQkJCQkgIGN1cl90aW1lb3V0LCBQR19XQUlUX0VYVEVOU0lPTik7CisJCQlS ZXNldExhdGNoKE15TGF0Y2gpOworCisJCQlDSEVDS19GT1JfSU5URVJSVVBUUygpOworCQl9Citl eGl0Ogk7CisJCWlmIChmYWlsZWQpCisJCXsKKwkJCWlmICh0aW1lZF9vdXQpCisJCQl7CisJCQkJ ZXJlcG9ydChXQVJOSU5HLAorCQkJCQkJKGVycm1zZygiY291bGQgbm90IGNhbmNlbCByZXF1ZXN0 IGR1ZSB0byB0aW1lb3V0IikpKTsKKwkJCX0KKwkJCWVsc2UKKwkJCXsKKwkJCQllcmVwb3J0KFdB Uk5JTkcsCisJCQkJCQkoZXJyY29kZShFUlJDT0RFX0NPTk5FQ1RJT05fRkFJTFVSRSksCisJCQkJ CQkgZXJybXNnKCJjb3VsZCBub3Qgc2VuZCBjYW5jZWwgcmVxdWVzdDogJXMiLAorCQkJCQkJCQlw Y2hvbXAoUFFjYW5jZWxFcnJvck1lc3NhZ2UoY2FuY2VsX2Nvbm4pKSkpKTsKKwkJCX0KKwkJfQor CX0KKwlQR19GSU5BTExZKCk7CisJeworCQlQUWNhbmNlbEZpbmlzaChjYW5jZWxfY29ubik7CisJ fQorCVBHX0VORF9UUlkoKTsKKworCXJldHVybiAhZmFpbGVkOwogfQogCiBzdGF0aWMgYm9vbApA QCAtMTY4NSw3ICsxNzUzLDEwIEBAIHBnZmR3X2Fib3J0X2NsZWFudXBfYmVnaW4oQ29ubkNhY2hl RW50cnkgKmVudHJ5LCBib29sIHRvcGxldmVsLAogCSAqLwogCWlmIChQUXRyYW5zYWN0aW9uU3Rh dHVzKGVudHJ5LT5jb25uKSA9PSBQUVRSQU5TX0FDVElWRSkKIAl7Ci0JCWlmICghcGdmZHdfY2Fu Y2VsX3F1ZXJ5X2JlZ2luKGVudHJ5LT5jb25uKSkKKwkJVGltZXN0YW1wVHogZW5kdGltZSA9IFRp bWVzdGFtcFR6UGx1c01pbGxpc2Vjb25kcyhHZXRDdXJyZW50VGltZXN0YW1wKCksCisJCQkJCQkJ CQkJCQkJCSAgQ09OTkVDVElPTl9DTEVBTlVQX1RJTUVPVVQpOworCisJCWlmICghcGdmZHdfY2Fu Y2VsX3F1ZXJ5X2JlZ2luKGVudHJ5LT5jb25uLCBlbmR0aW1lKSkKIAkJCXJldHVybiBmYWxzZTsJ CS8qIFVuYWJsZSB0byBjYW5jZWwgcnVubmluZyBxdWVyeSAqLwogCQkqY2FuY2VsX3JlcXVlc3Rl ZCA9IGxhcHBlbmQoKmNhbmNlbF9yZXF1ZXN0ZWQsIGVudHJ5KTsKIAl9CmRpZmYgLS1naXQgYS9j b250cmliL3Bvc3RncmVzX2Zkdy9leHBlY3RlZC9wb3N0Z3Jlc19mZHcub3V0IGIvY29udHJpYi9w b3N0Z3Jlc19mZHcvZXhwZWN0ZWQvcG9zdGdyZXNfZmR3Lm91dAppbmRleCBiNWEzOGFlYjIxNC4u MTYyMDZhMjNhOWQgMTAwNjQ0Ci0tLSBhL2NvbnRyaWIvcG9zdGdyZXNfZmR3L2V4cGVjdGVkL3Bv c3RncmVzX2Zkdy5vdXQKKysrIGIvY29udHJpYi9wb3N0Z3Jlc19mZHcvZXhwZWN0ZWQvcG9zdGdy ZXNfZmR3Lm91dApAQCAtMjY5OCw2ICsyNjk4LDIxIEBAIFNFTEVDVCB0MS5jMSwgdDIuYzIgRlJP TSB2NCB0MSBMRUZUIEpPSU4gZnQ1IHQyIE9OICh0MS5jMSA9IHQyLmMxKSBPUkRFUiBCWSB0MS5j CiAoMTAgcm93cykKIAogQUxURVIgVklFVyB2NCBPV05FUiBUTyByZWdyZXNzX3ZpZXdfb3duZXI7 CistLSBNYWtlIHN1cmUgdGhpcyBiaWcgQ1JPU1MgSk9JTiBxdWVyeSBpcyBwdXNoZWQgZG93bgor RVhQTEFJTiAoVkVSQk9TRSwgQ09TVFMgT0ZGKSBTRUxFQ1QgY291bnQoKikgRlJPTSBmdDEgQ1JP U1MgSk9JTiBmdDIgQ1JPU1MgSk9JTiBmdDQgQ1JPU1MgSk9JTiBmdDU7CisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEZvcmVpZ24gU2NhbgorICAgT3V0 cHV0OiAoY291bnQoKikpCisgICBSZWxhdGlvbnM6IEFnZ3JlZ2F0ZSBvbiAoKCgocHVibGljLmZ0 MSkgSU5ORVIgSk9JTiAocHVibGljLmZ0MikpIElOTkVSIEpPSU4gKHB1YmxpYy5mdDQpKSBJTk5F UiBKT0lOIChwdWJsaWMuZnQ1KSkKKyAgIFJlbW90ZSBTUUw6IFNFTEVDVCBjb3VudCgqKSBGUk9N ICgoKCJTIDEiLiJUIDEiIHIxIElOTkVSIEpPSU4gIlMgMSIuIlQgMSIgcjIgT04gKFRSVUUpKSBJ Tk5FUiBKT0lOICJTIDEiLiJUIDMiIHI0IE9OIChUUlVFKSkgSU5ORVIgSk9JTiAiUyAxIi4iVCA0 IiByNiBPTiAoVFJVRSkpCisoNCByb3dzKQorCistLSBNYWtlIHN1cmUgcXVlcnkgY2FuY2VsbGF0 aW9uIHdvcmtzCitTRVQgc3RhdGVtZW50X3RpbWVvdXQgPSAnMTBtcyc7CitzZWxlY3QgY291bnQo KikgZnJvbSBmdDEgQ1JPU1MgSk9JTiBmdDIgQ1JPU1MgSk9JTiBmdDQgQ1JPU1MgSk9JTiBmdDU7 IC0tIHRoaXMgdGFrZXMgdmVyeSBsb25nCitFUlJPUjogIGNhbmNlbGluZyBzdGF0ZW1lbnQgZHVl IHRvIHN0YXRlbWVudCB0aW1lb3V0CitSRVNFVCBzdGF0ZW1lbnRfdGltZW91dDsKIC0tID09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09CiAtLSBDaGVjayB0aGF0IHVzZXJpZCB0byB1c2Ugd2hlbiBxdWVyeWluZyB0aGUgcmVt b3RlIHRhYmxlIGlzIGNvcnJlY3RseQogLS0gcHJvcGFnYXRlZCBpbnRvIGZvcmVpZ24gcmVscyBw cmVzZW50IGluIHN1YnF1ZXJpZXMgdW5kZXIgYW4gVU5JT04gQUxMCmRpZmYgLS1naXQgYS9jb250 cmliL3Bvc3RncmVzX2Zkdy9zcWwvcG9zdGdyZXNfZmR3LnNxbCBiL2NvbnRyaWIvcG9zdGdyZXNf ZmR3L3NxbC9wb3N0Z3Jlc19mZHcuc3FsCmluZGV4IGY0MTBjM2RiNGU2Li4wMWE5ODc1MDYxMSAx MDA2NDQKLS0tIGEvY29udHJpYi9wb3N0Z3Jlc19mZHcvc3FsL3Bvc3RncmVzX2Zkdy5zcWwKKysr IGIvY29udHJpYi9wb3N0Z3Jlc19mZHcvc3FsL3Bvc3RncmVzX2Zkdy5zcWwKQEAgLTcxNyw2ICs3 MTcsMTMgQEAgU0VMRUNUIHQxLmMxLCB0Mi5jMiBGUk9NIHY0IHQxIExFRlQgSk9JTiBmdDUgdDIg T04gKHQxLmMxID0gdDIuYzEpIE9SREVSIEJZIHQxLmMKIFNFTEVDVCB0MS5jMSwgdDIuYzIgRlJP TSB2NCB0MSBMRUZUIEpPSU4gZnQ1IHQyIE9OICh0MS5jMSA9IHQyLmMxKSBPUkRFUiBCWSB0MS5j MSwgdDIuYzEgT0ZGU0VUIDEwIExJTUlUIDEwOwogQUxURVIgVklFVyB2NCBPV05FUiBUTyByZWdy ZXNzX3ZpZXdfb3duZXI7CiAKKy0tIE1ha2Ugc3VyZSB0aGlzIGJpZyBDUk9TUyBKT0lOIHF1ZXJ5 IGlzIHB1c2hlZCBkb3duCitFWFBMQUlOIChWRVJCT1NFLCBDT1NUUyBPRkYpIFNFTEVDVCBjb3Vu dCgqKSBGUk9NIGZ0MSBDUk9TUyBKT0lOIGZ0MiBDUk9TUyBKT0lOIGZ0NCBDUk9TUyBKT0lOIGZ0 NTsKKy0tIE1ha2Ugc3VyZSBxdWVyeSBjYW5jZWxsYXRpb24gd29ya3MKK1NFVCBzdGF0ZW1lbnRf dGltZW91dCA9ICcxMG1zJzsKK3NlbGVjdCBjb3VudCgqKSBmcm9tIGZ0MSBDUk9TUyBKT0lOIGZ0 MiBDUk9TUyBKT0lOIGZ0NCBDUk9TUyBKT0lOIGZ0NTsgLS0gdGhpcyB0YWtlcyB2ZXJ5IGxvbmcK K1JFU0VUIHN0YXRlbWVudF90aW1lb3V0OworCiAtLSA9PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogLS0gQ2hlY2sgdGhh dCB1c2VyaWQgdG8gdXNlIHdoZW4gcXVlcnlpbmcgdGhlIHJlbW90ZSB0YWJsZSBpcyBjb3JyZWN0 bHkKIC0tIHByb3BhZ2F0ZWQgaW50byBmb3JlaWduIHJlbHMgcHJlc2VudCBpbiBzdWJxdWVyaWVz IHVuZGVyIGFuIFVOSU9OIEFMTApkaWZmIC0tZ2l0IGEvc3JjL2ZlX3V0aWxzL2Nvbm5lY3RfdXRp bHMuYyBiL3NyYy9mZV91dGlscy9jb25uZWN0X3V0aWxzLmMKaW5kZXggODA4ZDU0NDYxZmQuLmM1 Y2QyZjU3ODc1IDEwMDY0NAotLS0gYS9zcmMvZmVfdXRpbHMvY29ubmVjdF91dGlscy5jCisrKyBi L3NyYy9mZV91dGlscy9jb25uZWN0X3V0aWxzLmMKQEAgLTE1NywxOSArMTU3LDE0IEBAIGNvbm5l Y3RNYWludGVuYW5jZURhdGFiYXNlKENvbm5QYXJhbXMgKmNwYXJhbXMsCiB2b2lkCiBkaXNjb25u ZWN0RGF0YWJhc2UoUEdjb25uICpjb25uKQogewotCWNoYXIJCWVycmJ1ZlsyNTZdOwotCiAJQXNz ZXJ0KGNvbm4gIT0gTlVMTCk7CiAKIAlpZiAoUFF0cmFuc2FjdGlvblN0YXR1cyhjb25uKSA9PSBQ UVRSQU5TX0FDVElWRSkKIAl7Ci0JCVBHY2FuY2VsICAgKmNhbmNlbDsKKwkJUEdjYW5jZWxDb25u ICpjYW5jZWxDb25uID0gUFFjYW5jZWxDb25uKGNvbm4pOwogCi0JCWlmICgoY2FuY2VsID0gUFFn ZXRDYW5jZWwoY29ubikpKQotCQl7Ci0JCQkodm9pZCkgUFFjYW5jZWwoY2FuY2VsLCBlcnJidWYs IHNpemVvZihlcnJidWYpKTsKLQkJCVBRZnJlZUNhbmNlbChjYW5jZWwpOwotCQl9CisJCSh2b2lk KSBQUWNhbmNlbFNlbmQoY2FuY2VsQ29ubik7CisJCVBRY2FuY2VsRmluaXNoKGNhbmNlbENvbm4p OwogCX0KIAogCVBRZmluaXNoKGNvbm4pOwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvaXNvbGF0aW9u L2lzb2xhdGlvbnRlc3Rlci5jIGIvc3JjL3Rlc3QvaXNvbGF0aW9uL2lzb2xhdGlvbnRlc3Rlci5j CmluZGV4IDBhNjYyMzUxNTNhLi5kZTMxYTg3NTcxNiAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvaXNv bGF0aW9uL2lzb2xhdGlvbnRlc3Rlci5jCisrKyBiL3NyYy90ZXN0L2lzb2xhdGlvbi9pc29sYXRp b250ZXN0ZXIuYwpAQCAtOTQ2LDI2ICs5NDYsMjEgQEAgdHJ5X2NvbXBsZXRlX3N0ZXAoVGVzdFNw ZWMgKnRlc3RzcGVjLCBQZXJtdXRhdGlvblN0ZXAgKnBzdGVwLCBpbnQgZmxhZ3MpCiAJCQkgKi8K IAkJCWlmICh0ZCA+IG1heF9zdGVwX3dhaXQgJiYgIWNhbmNlbGVkKQogCQkJewotCQkJCVBHY2Fu Y2VsICAgKmNhbmNlbCA9IFBRZ2V0Q2FuY2VsKGNvbm4pOworCQkJCVBHY2FuY2VsQ29ubiAqY2Fu Y2VsX2Nvbm4gPSBQUWNhbmNlbENvbm4oY29ubik7CiAKLQkJCQlpZiAoY2FuY2VsICE9IE5VTEwp CisJCQkJaWYgKFBRY2FuY2VsU2VuZChjYW5jZWxfY29ubikpCiAJCQkJewotCQkJCQljaGFyCQli dWZbMjU2XTsKLQotCQkJCQlpZiAoUFFjYW5jZWwoY2FuY2VsLCBidWYsIHNpemVvZihidWYpKSkK LQkJCQkJewotCQkJCQkJLyoKLQkJCQkJCSAqIHByaW50IHRvIHN0ZG91dCBub3Qgc3RkZXJyLCBh cyB0aGlzIHNob3VsZCBhcHBlYXIKLQkJCQkJCSAqIGluIHRoZSB0ZXN0IGNhc2UncyByZXN1bHRz Ci0JCQkJCQkgKi8KLQkJCQkJCXByaW50ZigiaXNvbGF0aW9udGVzdGVyOiBjYW5jZWxpbmcgc3Rl cCAlcyBhZnRlciAlZCBzZWNvbmRzXG4iLAotCQkJCQkJCSAgIHN0ZXAtPm5hbWUsIChpbnQpICh0 ZCAvIFVTRUNTX1BFUl9TRUMpKTsKLQkJCQkJCWNhbmNlbGVkID0gdHJ1ZTsKLQkJCQkJfQotCQkJ CQllbHNlCi0JCQkJCQlmcHJpbnRmKHN0ZGVyciwgIlBRY2FuY2VsIGZhaWxlZDogJXNcbiIsIGJ1 Zik7Ci0JCQkJCVBRZnJlZUNhbmNlbChjYW5jZWwpOworCQkJCQkvKgorCQkJCQkgKiBwcmludCB0 byBzdGRvdXQgbm90IHN0ZGVyciwgYXMgdGhpcyBzaG91bGQgYXBwZWFyIGluCisJCQkJCSAqIHRo ZSB0ZXN0IGNhc2UncyByZXN1bHRzCisJCQkJCSAqLworCQkJCQlwcmludGYoImlzb2xhdGlvbnRl c3RlcjogY2FuY2VsaW5nIHN0ZXAgJXMgYWZ0ZXIgJWQgc2Vjb25kc1xuIiwKKwkJCQkJCSAgIHN0 ZXAtPm5hbWUsIChpbnQpICh0ZCAvIFVTRUNTX1BFUl9TRUMpKTsKKwkJCQkJY2FuY2VsZWQgPSB0 cnVlOwogCQkJCX0KKwkJCQllbHNlCisJCQkJCWZwcmludGYoc3RkZXJyLCAiUFFjYW5jZWwgZmFp bGVkOiAlc1xuIiwgUFFjYW5jZWxFcnJvck1lc3NhZ2UoY2FuY2VsX2Nvbm4pKTsKKwkJCQlQUWNh bmNlbEZpbmlzaChjYW5jZWxfY29ubik7CiAJCQl9CiAKIAkJCS8qCi0tIAoyLjM0LjEKCg== --000000000000cc7872060fdc20d9 Content-Type: application/octet-stream; name="v26-0002-libpq-Add-pq_release_conn_hosts-function.patch" Content-Disposition: attachment; filename="v26-0002-libpq-Add-pq_release_conn_hosts-function.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_lruvnsay1 RnJvbSA2M2ZiNDFiOWFhNjU0YTY0NTBhNGMyZjA4ZDhiZjIwNGE1OTE2YjA4IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBKZWx0ZSBGZW5uZW1hLU5pbyA8amVsdGUuZmVubmVtYUBtaWNy b3NvZnQuY29tPgpEYXRlOiBGcmksIDI2IEphbiAyMDI0IDE3OjAxOjI4ICswMTAwClN1YmplY3Q6 IFtQQVRDSCB2MjYgMi81XSBsaWJwcTogQWRkIHBxX3JlbGVhc2VfY29ubl9ob3N0cyBmdW5jdGlv bgoKSW4gYSBmb2xsb3cgdXAgUFIgd2UnbGwgbmVlZCB0byBmcmVlIHRoaXMgY29ubmhvc3QgZmll bGQgaW4gYSBmdW5jdGlvbgpkZWZpbmVkIGluIGZlLWNhbmNlbC5jCgpTbyB0aGlzIGV4dHJhY3Rz IHRoZSBsb2dpYyB0byBhIGRlZGljYXRlZCBleHRlcm4gZnVuY3Rpb24uCi0tLQogc3JjL2ludGVy ZmFjZXMvbGlicHEvZmUtY29ubmVjdC5jIHwgMzkgKysrKysrKysrKysrKysrKysrKystLS0tLS0t LS0tLQogc3JjL2ludGVyZmFjZXMvbGlicHEvbGlicHEtaW50LmggIHwgIDEgKwogMiBmaWxlcyBj aGFuZ2VkLCAyNyBpbnNlcnRpb25zKCspLCAxMyBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9z cmMvaW50ZXJmYWNlcy9saWJwcS9mZS1jb25uZWN0LmMgYi9zcmMvaW50ZXJmYWNlcy9saWJwcS9m ZS1jb25uZWN0LmMKaW5kZXggNTM1N2IwYTlkMjIuLjA2MjJmZTMyMjUzIDEwMDY0NAotLS0gYS9z cmMvaW50ZXJmYWNlcy9saWJwcS9mZS1jb25uZWN0LmMKKysrIGIvc3JjL2ludGVyZmFjZXMvbGli cHEvZmUtY29ubmVjdC5jCkBAIC00Mzk1LDE5ICs0Mzk1LDcgQEAgZnJlZVBHY29ubihQR2Nvbm4g KmNvbm4pCiAJCWZyZWUoY29ubi0+ZXZlbnRzW2ldLm5hbWUpOwogCX0KIAotCS8qIGNsZWFuIHVw IHBnX2Nvbm5faG9zdCBzdHJ1Y3R1cmVzICovCi0JZm9yIChpbnQgaSA9IDA7IGkgPCBjb25uLT5u Y29ubmhvc3Q7ICsraSkKLQl7Ci0JCWZyZWUoY29ubi0+Y29ubmhvc3RbaV0uaG9zdCk7Ci0JCWZy ZWUoY29ubi0+Y29ubmhvc3RbaV0uaG9zdGFkZHIpOwotCQlmcmVlKGNvbm4tPmNvbm5ob3N0W2ld LnBvcnQpOwotCQlpZiAoY29ubi0+Y29ubmhvc3RbaV0ucGFzc3dvcmQgIT0gTlVMTCkKLQkJewot CQkJZXhwbGljaXRfYnplcm8oY29ubi0+Y29ubmhvc3RbaV0ucGFzc3dvcmQsIHN0cmxlbihjb25u LT5jb25uaG9zdFtpXS5wYXNzd29yZCkpOwotCQkJZnJlZShjb25uLT5jb25uaG9zdFtpXS5wYXNz d29yZCk7Ci0JCX0KLQl9Ci0JZnJlZShjb25uLT5jb25uaG9zdCk7CisJcHFfcmVsZWFzZV9jb25u X2hvc3RzKGNvbm4pOwogCiAJZnJlZShjb25uLT5jbGllbnRfZW5jb2RpbmdfaW5pdGlhbCk7CiAJ ZnJlZShjb25uLT5ldmVudHMpOwpAQCAtNDUyNiw2ICs0NTE0LDMxIEBAIHJlbGVhc2VfY29ubl9h ZGRyaW5mbyhQR2Nvbm4gKmNvbm4pCiAJfQogfQogCisvKgorICogcHFfcmVsZWFzZV9jb25uX2hv c3RzCisgKgkgLSBGcmVlIHRoZSBob3N0IGxpc3QgaW4gdGhlIFBHY29ubi4KKyAqLwordm9pZAor cHFfcmVsZWFzZV9jb25uX2hvc3RzKFBHY29ubiAqY29ubikKK3sKKwlpZiAoY29ubi0+Y29ubmhv c3QpCisJeworCQlmb3IgKGludCBpID0gMDsgaSA8IGNvbm4tPm5jb25uaG9zdDsgKytpKQorCQl7 CisJCQlmcmVlKGNvbm4tPmNvbm5ob3N0W2ldLmhvc3QpOworCQkJZnJlZShjb25uLT5jb25uaG9z dFtpXS5ob3N0YWRkcik7CisJCQlmcmVlKGNvbm4tPmNvbm5ob3N0W2ldLnBvcnQpOworCQkJaWYg KGNvbm4tPmNvbm5ob3N0W2ldLnBhc3N3b3JkICE9IE5VTEwpCisJCQl7CisJCQkJZXhwbGljaXRf Ynplcm8oY29ubi0+Y29ubmhvc3RbaV0ucGFzc3dvcmQsIHN0cmxlbihjb25uLT5jb25uaG9zdFtp XS5wYXNzd29yZCkpOworCQkJCWZyZWUoY29ubi0+Y29ubmhvc3RbaV0ucGFzc3dvcmQpOworCQkJ fQorCQl9CisJCWZyZWUoY29ubi0+Y29ubmhvc3QpOworCX0KK30KKworCiAvKgogICogc2VuZFRl cm1pbmF0ZUNvbm4KICAqCSAtIFNlbmQgYSB0ZXJtaW5hdGUgbWVzc2FnZSB0byBiYWNrZW5kLgpk aWZmIC0tZ2l0IGEvc3JjL2ludGVyZmFjZXMvbGlicHEvbGlicHEtaW50LmggYi9zcmMvaW50ZXJm YWNlcy9saWJwcS9saWJwcS1pbnQuaAppbmRleCA2NmI3N2U3NWUxOC4uYTBkYTczNTY1ODQgMTAw NjQ0Ci0tLSBhL3NyYy9pbnRlcmZhY2VzL2xpYnBxL2xpYnBxLWludC5oCisrKyBiL3NyYy9pbnRl cmZhY2VzL2xpYnBxL2xpYnBxLWludC5oCkBAIC02ODAsNiArNjgwLDcgQEAgZXh0ZXJuIGludAlw cVBhY2tldFNlbmQoUEdjb25uICpjb25uLCBjaGFyIHBhY2tfdHlwZSwKIGV4dGVybiBib29sIHBx R2V0SG9tZURpcmVjdG9yeShjaGFyICpidWYsIGludCBidWZzaXplKTsKIGV4dGVybiBib29sIHBx X3BhcnNlX2ludF9wYXJhbShjb25zdCBjaGFyICp2YWx1ZSwgaW50ICpyZXN1bHQsIFBHY29ubiAq Y29ubiwKIAkJCQkJCQkgICBjb25zdCBjaGFyICpjb250ZXh0KTsKK2V4dGVybiB2b2lkIHBxX3Jl bGVhc2VfY29ubl9ob3N0cyhQR2Nvbm4gKmNvbm4pOwogCiBleHRlcm4gcGd0aHJlYWRsb2NrX3Qg cGdfZ190aHJlYWRsb2NrOwogCi0tIAoyLjM0LjEKCg== --000000000000cc7872060fdc20d9 Content-Type: application/octet-stream; name="v26-0003-libpq-Change-some-static-functions-to-extern.patch" Content-Disposition: attachment; filename="v26-0003-libpq-Change-some-static-functions-to-extern.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_lruvnsb22 RnJvbSBjNzI3ZTFjY2FiMjY1YzQ5Zjc3MzdiYTA4M2RkMGJmMWFhNTU0NzFlIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBKZWx0ZSBGZW5uZW1hLU5pbyA8amVsdGUuZmVubmVtYUBtaWNy b3NvZnQuY29tPgpEYXRlOiBGcmksIDI2IEphbiAyMDI0IDE2OjQ3OjUxICswMTAwClN1YmplY3Q6 IFtQQVRDSCB2MjYgMy81XSBsaWJwcTogQ2hhbmdlIHNvbWUgc3RhdGljIGZ1bmN0aW9ucyB0byBl eHRlcm4KClRoaXMgaXMgaW4gcHJlcGFyYXRpb24gb2YgYSBmb2xsb3cgdXAgY29tbWl0IHRoYXQg c3RhcnRzIHVzaW5nIHRoZXNlCmZ1bmN0aW9ucyBmcm9tIGZlLWNhbmNlbC5jLgotLS0KIHNyYy9p bnRlcmZhY2VzL2xpYnBxL2ZlLWNvbm5lY3QuYyB8IDg1ICsrKysrKysrKysrKysrKy0tLS0tLS0t LS0tLS0tLS0KIHNyYy9pbnRlcmZhY2VzL2xpYnBxL2xpYnBxLWludC5oICB8ICA2ICsrKwogMiBm aWxlcyBjaGFuZ2VkLCA0NiBpbnNlcnRpb25zKCspLCA0NSBkZWxldGlvbnMoLSkKCmRpZmYgLS1n aXQgYS9zcmMvaW50ZXJmYWNlcy9saWJwcS9mZS1jb25uZWN0LmMgYi9zcmMvaW50ZXJmYWNlcy9s aWJwcS9mZS1jb25uZWN0LmMKaW5kZXggMDYyMmZlMzIyNTMuLjhkYmM5ZDJjYzU3IDEwMDY0NAot LS0gYS9zcmMvaW50ZXJmYWNlcy9saWJwcS9mZS1jb25uZWN0LmMKKysrIGIvc3JjL2ludGVyZmFj ZXMvbGlicHEvZmUtY29ubmVjdC5jCkBAIC0zODcsMTUgKzM4NywxMCBAQCBzdGF0aWMgY29uc3Qg Y2hhciB1cmlfZGVzaWduYXRvcltdID0gInBvc3RncmVzcWw6Ly8iOwogc3RhdGljIGNvbnN0IGNo YXIgc2hvcnRfdXJpX2Rlc2lnbmF0b3JbXSA9ICJwb3N0Z3JlczovLyI7CiAKIHN0YXRpYyBib29s IGNvbm5lY3RPcHRpb25zMShQR2Nvbm4gKmNvbm4sIGNvbnN0IGNoYXIgKmNvbm5pbmZvKTsKLXN0 YXRpYyBib29sIGNvbm5lY3RPcHRpb25zMihQR2Nvbm4gKmNvbm4pOwotc3RhdGljIGludAljb25u ZWN0REJTdGFydChQR2Nvbm4gKmNvbm4pOwotc3RhdGljIGludAljb25uZWN0REJDb21wbGV0ZShQ R2Nvbm4gKmNvbm4pOwogc3RhdGljIFBHUGluZyBpbnRlcm5hbF9waW5nKFBHY29ubiAqY29ubik7 Ci1zdGF0aWMgUEdjb25uICptYWtlRW1wdHlQR2Nvbm4odm9pZCk7CiBzdGF0aWMgdm9pZCBwcUZy ZWVDb21tYW5kUXVldWUoUEdjbWRRdWV1ZUVudHJ5ICpxdWV1ZSk7CiBzdGF0aWMgYm9vbCBmaWxs UEdjb25uKFBHY29ubiAqY29ubiwgUFFjb25uaW5mb09wdGlvbiAqY29ubk9wdGlvbnMpOwogc3Rh dGljIHZvaWQgZnJlZVBHY29ubihQR2Nvbm4gKmNvbm4pOwotc3RhdGljIHZvaWQgY2xvc2VQR2Nv bm4oUEdjb25uICpjb25uKTsKIHN0YXRpYyB2b2lkIHJlbGVhc2VfY29ubl9hZGRyaW5mbyhQR2Nv bm4gKmNvbm4pOwogc3RhdGljIGludAlzdG9yZV9jb25uX2FkZHJpbmZvKFBHY29ubiAqY29ubiwg c3RydWN0IGFkZHJpbmZvICphZGRybGlzdCk7CiBzdGF0aWMgdm9pZCBzZW5kVGVybWluYXRlQ29u bihQR2Nvbm4gKmNvbm4pOwpAQCAtNjQ0LDcgKzYzOSw3IEBAIHBxRHJvcFNlcnZlckRhdGEoUEdj b25uICpjb25uKQogICogUFFjb25uZWN0U3RhcnQgb3IgUFFjb25uZWN0U3RhcnRQYXJhbXMgKHdo aWNoIGRpZmZlciBpbiB0aGUgc2FtZSB3YXkgYXMKICAqIFBRY29ubmVjdGRiIGFuZCBQUWNvbm5l Y3RkYlBhcmFtcykgYW5kIFBRY29ubmVjdFBvbGwuCiAgKgotICogSW50ZXJuYWxseSwgdGhlIHN0 YXRpYyBmdW5jdGlvbnMgY29ubmVjdERCU3RhcnQsIGNvbm5lY3REQkNvbXBsZXRlCisgKiBJbnRl cm5hbGx5LCB0aGUgc3RhdGljIGZ1bmN0aW9ucyBwcUNvbm5lY3REQlN0YXJ0LCBwcUNvbm5lY3RE QkNvbXBsZXRlCiAgKiBhcmUgcGFydCBvZiB0aGUgY29ubmVjdGlvbiBwcm9jZWR1cmUuCiAgKi8K IApAQCAtNjc4LDcgKzY3Myw3IEBAIFBRY29ubmVjdGRiUGFyYW1zKGNvbnN0IGNoYXIgKmNvbnN0 ICprZXl3b3JkcywKIAlQR2Nvbm4JICAgKmNvbm4gPSBQUWNvbm5lY3RTdGFydFBhcmFtcyhrZXl3 b3JkcywgdmFsdWVzLCBleHBhbmRfZGJuYW1lKTsKIAogCWlmIChjb25uICYmIGNvbm4tPnN0YXR1 cyAhPSBDT05ORUNUSU9OX0JBRCkKLQkJKHZvaWQpIGNvbm5lY3REQkNvbXBsZXRlKGNvbm4pOwor CQkodm9pZCkgcHFDb25uZWN0REJDb21wbGV0ZShjb25uKTsKIAogCXJldHVybiBjb25uOwogfQpA QCAtNzMxLDcgKzcyNiw3IEBAIFBRY29ubmVjdGRiKGNvbnN0IGNoYXIgKmNvbm5pbmZvKQogCVBH Y29ubgkgICAqY29ubiA9IFBRY29ubmVjdFN0YXJ0KGNvbm5pbmZvKTsKIAogCWlmIChjb25uICYm IGNvbm4tPnN0YXR1cyAhPSBDT05ORUNUSU9OX0JBRCkKLQkJKHZvaWQpIGNvbm5lY3REQkNvbXBs ZXRlKGNvbm4pOworCQkodm9pZCkgcHFDb25uZWN0REJDb21wbGV0ZShjb25uKTsKIAogCXJldHVy biBjb25uOwogfQpAQCAtNzg1LDcgKzc4MCw3IEBAIFBRY29ubmVjdFN0YXJ0UGFyYW1zKGNvbnN0 IGNoYXIgKmNvbnN0ICprZXl3b3JkcywKIAkgKiB0byBpbml0aWFsaXplIGNvbm4tPmVycm9yTWVz c2FnZSB0byBlbXB0eS4gIEFsbCBzdWJzZXF1ZW50IHN0ZXBzIGR1cmluZwogCSAqIGNvbm5lY3Rp b24gaW5pdGlhbGl6YXRpb24gd2lsbCBvbmx5IGFwcGVuZCB0byB0aGF0IGJ1ZmZlci4KIAkgKi8K LQljb25uID0gbWFrZUVtcHR5UEdjb25uKCk7CisJY29ubiA9IHBxTWFrZUVtcHR5UEdjb25uKCk7 CiAJaWYgKGNvbm4gPT0gTlVMTCkKIAkJcmV0dXJuIE5VTEw7CiAKQEAgLTgxOSwxNSArODE0LDE1 IEBAIFBRY29ubmVjdFN0YXJ0UGFyYW1zKGNvbnN0IGNoYXIgKmNvbnN0ICprZXl3b3JkcywKIAkv KgogCSAqIENvbXB1dGUgZGVyaXZlZCBvcHRpb25zCiAJICovCi0JaWYgKCFjb25uZWN0T3B0aW9u czIoY29ubikpCisJaWYgKCFwcUNvbm5lY3RPcHRpb25zMihjb25uKSkKIAkJcmV0dXJuIGNvbm47 CiAKIAkvKgogCSAqIENvbm5lY3QgdG8gdGhlIGRhdGFiYXNlCiAJICovCi0JaWYgKCFjb25uZWN0 REJTdGFydChjb25uKSkKKwlpZiAoIXBxQ29ubmVjdERCU3RhcnQoY29ubikpCiAJewotCQkvKiBK dXN0IGluIGNhc2Ugd2UgZmFpbGVkIHRvIHNldCBpdCBpbiBjb25uZWN0REJTdGFydCAqLworCQkv KiBKdXN0IGluIGNhc2Ugd2UgZmFpbGVkIHRvIHNldCBpdCBpbiBwcUNvbm5lY3REQlN0YXJ0ICov CiAJCWNvbm4tPnN0YXR1cyA9IENPTk5FQ1RJT05fQkFEOwogCX0KIApAQCAtODYzLDcgKzg1OCw3 IEBAIFBRY29ubmVjdFN0YXJ0KGNvbnN0IGNoYXIgKmNvbm5pbmZvKQogCSAqIHRvIGluaXRpYWxp emUgY29ubi0+ZXJyb3JNZXNzYWdlIHRvIGVtcHR5LiAgQWxsIHN1YnNlcXVlbnQgc3RlcHMgZHVy aW5nCiAJICogY29ubmVjdGlvbiBpbml0aWFsaXphdGlvbiB3aWxsIG9ubHkgYXBwZW5kIHRvIHRo YXQgYnVmZmVyLgogCSAqLwotCWNvbm4gPSBtYWtlRW1wdHlQR2Nvbm4oKTsKKwljb25uID0gcHFN YWtlRW1wdHlQR2Nvbm4oKTsKIAlpZiAoY29ubiA9PSBOVUxMKQogCQlyZXR1cm4gTlVMTDsKIApA QCAtODc2LDE1ICs4NzEsMTUgQEAgUFFjb25uZWN0U3RhcnQoY29uc3QgY2hhciAqY29ubmluZm8p CiAJLyoKIAkgKiBDb21wdXRlIGRlcml2ZWQgb3B0aW9ucwogCSAqLwotCWlmICghY29ubmVjdE9w dGlvbnMyKGNvbm4pKQorCWlmICghcHFDb25uZWN0T3B0aW9uczIoY29ubikpCiAJCXJldHVybiBj b25uOwogCiAJLyoKIAkgKiBDb25uZWN0IHRvIHRoZSBkYXRhYmFzZQogCSAqLwotCWlmICghY29u bmVjdERCU3RhcnQoY29ubikpCisJaWYgKCFwcUNvbm5lY3REQlN0YXJ0KGNvbm4pKQogCXsKLQkJ LyogSnVzdCBpbiBjYXNlIHdlIGZhaWxlZCB0byBzZXQgaXQgaW4gY29ubmVjdERCU3RhcnQgKi8K KwkJLyogSnVzdCBpbiBjYXNlIHdlIGZhaWxlZCB0byBzZXQgaXQgaW4gcHFDb25uZWN0REJTdGFy dCAqLwogCQljb25uLT5zdGF0dXMgPSBDT05ORUNUSU9OX0JBRDsKIAl9CiAKQEAgLTg5NSw3ICs4 OTAsNyBAQCBQUWNvbm5lY3RTdGFydChjb25zdCBjaGFyICpjb25uaW5mbykKICAqIE1vdmUgb3B0 aW9uIHZhbHVlcyBpbnRvIGNvbm4gc3RydWN0dXJlCiAgKgogICogRG9uJ3QgcHV0IGFueXRoaW5n IGN1dGUgaGVyZSAtLS0gaW50ZWxsaWdlbmNlIHNob3VsZCBiZSBpbgotICogY29ubmVjdE9wdGlv bnMyIC4uLgorICogcHFDb25uZWN0T3B0aW9uczIgLi4uCiAgKgogICogUmV0dXJucyB0cnVlIG9u IHN1Y2Nlc3MuIE9uIGZhaWx1cmUsIHJldHVybnMgZmFsc2UgYW5kIHNldHMgZXJyb3IgbWVzc2Fn ZS4KICAqLwpAQCAtOTMzLDcgKzkyOCw3IEBAIGZpbGxQR2Nvbm4oUEdjb25uICpjb25uLCBQUWNv bm5pbmZvT3B0aW9uICpjb25uT3B0aW9ucykKICAqCiAgKiBJbnRlcm5hbCBzdWJyb3V0aW5lIHRv IHNldCB1cCBjb25uZWN0aW9uIHBhcmFtZXRlcnMgZ2l2ZW4gYW4gYWxyZWFkeS0KICAqIGNyZWF0 ZWQgUEdjb25uIGFuZCBhIGNvbm5pbmZvIHN0cmluZy4gIERlcml2ZWQgc2V0dGluZ3Mgc2hvdWxk IGJlCi0gKiBwcm9jZXNzZWQgYnkgY2FsbGluZyBjb25uZWN0T3B0aW9uczIgbmV4dC4gIChXZSBz cGxpdCB0aGVtIGJlY2F1c2UKKyAqIHByb2Nlc3NlZCBieSBjYWxsaW5nIHBxQ29ubmVjdE9wdGlv bnMyIG5leHQuICAoV2Ugc3BsaXQgdGhlbSBiZWNhdXNlCiAgKiBQUXNldGRiTG9naW4gb3ZlcnJp ZGVzIGRlZmF1bHRzIGluIGJldHdlZW4uKQogICoKICAqIFJldHVybnMgdHJ1ZSBpZiBPSywgZmFs c2UgaWYgdHJvdWJsZSAoaW4gd2hpY2ggY2FzZSBlcnJvck1lc3NhZ2UgaXMgc2V0CkBAIC0xMDU1 LDE1ICsxMDUwLDE1IEBAIGxpYnBxX3BybmdfaW5pdChQR2Nvbm4gKmNvbm4pCiB9CiAKIC8qCi0g KgkJY29ubmVjdE9wdGlvbnMyCisgKgkJcHFDb25uZWN0T3B0aW9uczIKICAqCiAgKiBDb21wdXRl IGRlcml2ZWQgY29ubmVjdGlvbiBvcHRpb25zIGFmdGVyIGFic29yYmluZyBhbGwgdXNlci1zdXBw bGllZCBpbmZvLgogICoKICAqIFJldHVybnMgdHJ1ZSBpZiBPSywgZmFsc2UgaWYgdHJvdWJsZSAo aW4gd2hpY2ggY2FzZSBlcnJvck1lc3NhZ2UgaXMgc2V0CiAgKiBhbmQgc28gaXMgY29ubi0+c3Rh dHVzKS4KICAqLwotc3RhdGljIGJvb2wKLWNvbm5lY3RPcHRpb25zMihQR2Nvbm4gKmNvbm4pCiti b29sCitwcUNvbm5lY3RPcHRpb25zMihQR2Nvbm4gKmNvbm4pCiB7CiAJaW50CQkJaTsKIApAQCAt MTgyMiw3ICsxODE3LDcgQEAgUFFzZXRkYkxvZ2luKGNvbnN0IGNoYXIgKnBnaG9zdCwgY29uc3Qg Y2hhciAqcGdwb3J0LCBjb25zdCBjaGFyICpwZ29wdGlvbnMsCiAJICogdG8gaW5pdGlhbGl6ZSBj b25uLT5lcnJvck1lc3NhZ2UgdG8gZW1wdHkuICBBbGwgc3Vic2VxdWVudCBzdGVwcyBkdXJpbmcK IAkgKiBjb25uZWN0aW9uIGluaXRpYWxpemF0aW9uIHdpbGwgb25seSBhcHBlbmQgdG8gdGhhdCBi dWZmZXIuCiAJICovCi0JY29ubiA9IG1ha2VFbXB0eVBHY29ubigpOworCWNvbm4gPSBwcU1ha2VF bXB0eVBHY29ubigpOwogCWlmIChjb25uID09IE5VTEwpCiAJCXJldHVybiBOVUxMOwogCkBAIC0x OTAxLDE0ICsxODk2LDE0IEBAIFBRc2V0ZGJMb2dpbihjb25zdCBjaGFyICpwZ2hvc3QsIGNvbnN0 IGNoYXIgKnBncG9ydCwgY29uc3QgY2hhciAqcGdvcHRpb25zLAogCS8qCiAJICogQ29tcHV0ZSBk ZXJpdmVkIG9wdGlvbnMKIAkgKi8KLQlpZiAoIWNvbm5lY3RPcHRpb25zMihjb25uKSkKKwlpZiAo IXBxQ29ubmVjdE9wdGlvbnMyKGNvbm4pKQogCQlyZXR1cm4gY29ubjsKIAogCS8qCiAJICogQ29u bmVjdCB0byB0aGUgZGF0YWJhc2UKIAkgKi8KLQlpZiAoY29ubmVjdERCU3RhcnQoY29ubikpCi0J CSh2b2lkKSBjb25uZWN0REJDb21wbGV0ZShjb25uKTsKKwlpZiAocHFDb25uZWN0REJTdGFydChj b25uKSkKKwkJKHZvaWQpIHBxQ29ubmVjdERCQ29tcGxldGUoY29ubik7CiAKIAlyZXR1cm4gY29u bjsKIApAQCAtMjMyMywxNCArMjMxOCwxNCBAQCBzZXRUQ1BVc2VyVGltZW91dChQR2Nvbm4gKmNv bm4pCiB9CiAKIC8qIC0tLS0tLS0tLS0KLSAqIGNvbm5lY3REQlN0YXJ0IC0KKyAqIHBxQ29ubmVj dERCU3RhcnQgLQogICoJCUJlZ2luIHRoZSBwcm9jZXNzIG9mIG1ha2luZyBhIGNvbm5lY3Rpb24g dG8gdGhlIGJhY2tlbmQuCiAgKgogICogUmV0dXJucyAxIGlmIHN1Y2Nlc3NmdWwsIDAgaWYgbm90 LgogICogLS0tLS0tLS0tLQogICovCi1zdGF0aWMgaW50Ci1jb25uZWN0REJTdGFydChQR2Nvbm4g KmNvbm4pCitpbnQKK3BxQ29ubmVjdERCU3RhcnQoUEdjb25uICpjb25uKQogewogCWlmICghY29u bikKIAkJcmV0dXJuIDA7CkBAIC0yMzkzLDE0ICsyMzg4LDE0IEBAIGNvbm5lY3RfZXJyUmV0dXJu OgogCiAKIC8qCi0gKgkJY29ubmVjdERCQ29tcGxldGUKKyAqCQlwcUNvbm5lY3REQkNvbXBsZXRl CiAgKgogICogQmxvY2sgYW5kIGNvbXBsZXRlIGEgY29ubmVjdGlvbi4KICAqCiAgKiBSZXR1cm5z IDEgb24gc3VjY2VzcywgMCBvbiBmYWlsdXJlLgogICovCi1zdGF0aWMgaW50Ci1jb25uZWN0REJD b21wbGV0ZShQR2Nvbm4gKmNvbm4pCitpbnQKK3BxQ29ubmVjdERCQ29tcGxldGUoUEdjb25uICpj b25uKQogewogCVBvc3RncmVzUG9sbGluZ1N0YXR1c1R5cGUgZmxhZyA9IFBHUkVTX1BPTExJTkdf V1JJVElORzsKIAl0aW1lX3QJCWZpbmlzaF90aW1lID0gKCh0aW1lX3QpIC0xKTsKQEAgLTI3NTAs NyArMjc0NSw3IEBAIGtlZXBfZ29pbmc6CQkJCQkJLyogV2Ugd2lsbCBjb21lIGJhY2sgdG8gaGVy ZSB1bnRpbCB0aGVyZSBpcwogCQkJICogY29tYmluaW5nIGl0IHdpdGggdGhlIGluc2VydGlvbi4K IAkJCSAqCiAJCQkgKiBXZSBkb24ndCBuZWVkIHRvIGluaXRpYWxpemUgY29ubi0+cHJuZ19zdGF0 ZSBoZXJlLCBiZWNhdXNlIHRoYXQKLQkJCSAqIGFscmVhZHkgaGFwcGVuZWQgaW4gY29ubmVjdE9w dGlvbnMyLgorCQkJICogYWxyZWFkeSBoYXBwZW5lZCBpbiBwcUNvbm5lY3RPcHRpb25zMi4KIAkJ CSAqLwogCQkJZm9yIChpbnQgaSA9IDE7IGkgPCBjb25uLT5uYWRkcjsgaSsrKQogCQkJewpAQCAt NDIyNyw3ICs0MjIyLDcgQEAgaW50ZXJuYWxfcGluZyhQR2Nvbm4gKmNvbm4pCiAKIAkvKiBBdHRl bXB0IHRvIGNvbXBsZXRlIHRoZSBjb25uZWN0aW9uICovCiAJaWYgKGNvbm4tPnN0YXR1cyAhPSBD T05ORUNUSU9OX0JBRCkKLQkJKHZvaWQpIGNvbm5lY3REQkNvbXBsZXRlKGNvbm4pOworCQkodm9p ZCkgcHFDb25uZWN0REJDb21wbGV0ZShjb25uKTsKIAogCS8qIERlZmluaXRlbHkgT0sgaWYgd2Ug c3VjY2VlZGVkICovCiAJaWYgKGNvbm4tPnN0YXR1cyAhPSBDT05ORUNUSU9OX0JBRCkKQEAgLTQy NzksMTEgKzQyNzQsMTEgQEAgaW50ZXJuYWxfcGluZyhQR2Nvbm4gKmNvbm4pCiAKIAogLyoKLSAq IG1ha2VFbXB0eVBHY29ubgorICogcHFNYWtlRW1wdHlQR2Nvbm4KICAqCSAtIGNyZWF0ZSBhIFBH Y29ubiBkYXRhIHN0cnVjdHVyZSB3aXRoIChhcyB5ZXQpIG5vIGludGVyZXN0aW5nIGRhdGEKICAq Lwotc3RhdGljIFBHY29ubiAqCi1tYWtlRW1wdHlQR2Nvbm4odm9pZCkKK1BHY29ubiAqCitwcU1h a2VFbXB0eVBHY29ubih2b2lkKQogewogCVBHY29ubgkgICAqY29ubjsKIApAQCAtNDM3Niw3ICs0 MzcxLDcgQEAgbWFrZUVtcHR5UEdjb25uKHZvaWQpCiAgKiBmcmVlUEdjb25uCiAgKgkgLSBmcmVl IGFuIGlkbGUgKGNsb3NlZCkgUEdjb25uIGRhdGEgc3RydWN0dXJlCiAgKgotICogTk9URTogdGhp cyBzaG91bGQgbm90IG92ZXJsYXAgYW55IGZ1bmN0aW9uYWxpdHkgd2l0aCBjbG9zZVBHY29ubigp LgorICogTk9URTogdGhpcyBzaG91bGQgbm90IG92ZXJsYXAgYW55IGZ1bmN0aW9uYWxpdHkgd2l0 aCBwcUNsb3NlUEdjb25uKCkuCiAgKiBDbGVhcmluZy9yZXNldHRpbmcgb2YgdHJhbnNpZW50IHN0 YXRlIGJlbG9uZ3MgdGhlcmU7IHdoYXQgd2UgZG8gaGVyZSBpcwogICogcmVsZWFzZSBkYXRhIHRo YXQgaXMgdG8gYmUgaGVsZCBmb3IgdGhlIGxpZmUgb2YgdGhlIFBHY29ubiBzdHJ1Y3R1cmUuCiAg KiBJZiBhIHZhbHVlIG91Z2h0IHRvIGJlIGNsZWFyZWQvZnJlZWQgZHVyaW5nIFBRcmVzZXQoKSwg ZG8gaXQgdGhlcmUgbm90IGhlcmUuCkBAIC00NTYzLDE1ICs0NTU4LDE1IEBAIHNlbmRUZXJtaW5h dGVDb25uKFBHY29ubiAqY29ubikKIH0KIAogLyoKLSAqIGNsb3NlUEdjb25uCisgKiBwcUNsb3Nl UEdjb25uCiAgKgkgLSBwcm9wZXJseSBjbG9zZSBhIGNvbm5lY3Rpb24gdG8gdGhlIGJhY2tlbmQK ICAqCiAgKiBUaGlzIHNob3VsZCByZXNldCBvciByZWxlYXNlIGFsbCB0cmFuc2llbnQgc3RhdGUs IGJ1dCBOT1QgdGhlIGNvbm5lY3Rpb24KICAqIHBhcmFtZXRlcnMuICBPbiBleGl0LCB0aGUgUEdj b25uIHNob3VsZCBiZSBpbiBjb25kaXRpb24gdG8gc3RhcnQgYSBmcmVzaAogICogY29ubmVjdGlv biB3aXRoIHRoZSBzYW1lIHBhcmFtZXRlcnMgKHNlZSBQUXJlc2V0KCkpLgogICovCi1zdGF0aWMg dm9pZAotY2xvc2VQR2Nvbm4oUEdjb25uICpjb25uKQordm9pZAorcHFDbG9zZVBHY29ubihQR2Nv bm4gKmNvbm4pCiB7CiAJLyoKIAkgKiBJZiBwb3NzaWJsZSwgc2VuZCBUZXJtaW5hdGUgbWVzc2Fn ZSB0byBjbG9zZSB0aGUgY29ubmVjdGlvbiBwb2xpdGVseS4KQEAgLTQ2MTQsNyArNDYwOSw3IEBA IFBRZmluaXNoKFBHY29ubiAqY29ubikKIHsKIAlpZiAoY29ubikKIAl7Ci0JCWNsb3NlUEdjb25u KGNvbm4pOworCQlwcUNsb3NlUEdjb25uKGNvbm4pOwogCQlmcmVlUEdjb25uKGNvbm4pOwogCX0K IH0KQEAgLTQ2MjgsOSArNDYyMyw5IEBAIFBRcmVzZXQoUEdjb25uICpjb25uKQogewogCWlmIChj b25uKQogCXsKLQkJY2xvc2VQR2Nvbm4oY29ubik7CisJCXBxQ2xvc2VQR2Nvbm4oY29ubik7CiAK LQkJaWYgKGNvbm5lY3REQlN0YXJ0KGNvbm4pICYmIGNvbm5lY3REQkNvbXBsZXRlKGNvbm4pKQor CQlpZiAocHFDb25uZWN0REJTdGFydChjb25uKSAmJiBwcUNvbm5lY3REQkNvbXBsZXRlKGNvbm4p KQogCQl7CiAJCQkvKgogCQkJICogTm90aWZ5IGV2ZW50IHByb2NzIG9mIHN1Y2Nlc3NmdWwgcmVz ZXQuCkBAIC00NjYxLDkgKzQ2NTYsOSBAQCBQUXJlc2V0U3RhcnQoUEdjb25uICpjb25uKQogewog CWlmIChjb25uKQogCXsKLQkJY2xvc2VQR2Nvbm4oY29ubik7CisJCXBxQ2xvc2VQR2Nvbm4oY29u bik7CiAKLQkJcmV0dXJuIGNvbm5lY3REQlN0YXJ0KGNvbm4pOworCQlyZXR1cm4gcHFDb25uZWN0 REJTdGFydChjb25uKTsKIAl9CiAKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL3NyYy9pbnRlcmZh Y2VzL2xpYnBxL2xpYnBxLWludC5oIGIvc3JjL2ludGVyZmFjZXMvbGlicHEvbGlicHEtaW50LmgK aW5kZXggYTBkYTczNTY1ODQuLmIxZTFiZDYzMzFmIDEwMDY0NAotLS0gYS9zcmMvaW50ZXJmYWNl cy9saWJwcS9saWJwcS1pbnQuaAorKysgYi9zcmMvaW50ZXJmYWNlcy9saWJwcS9saWJwcS1pbnQu aApAQCAtNjgxLDYgKzY4MSwxMiBAQCBleHRlcm4gYm9vbCBwcUdldEhvbWVEaXJlY3RvcnkoY2hh ciAqYnVmLCBpbnQgYnVmc2l6ZSk7CiBleHRlcm4gYm9vbCBwcV9wYXJzZV9pbnRfcGFyYW0oY29u c3QgY2hhciAqdmFsdWUsIGludCAqcmVzdWx0LCBQR2Nvbm4gKmNvbm4sCiAJCQkJCQkJICAgY29u c3QgY2hhciAqY29udGV4dCk7CiBleHRlcm4gdm9pZCBwcV9yZWxlYXNlX2Nvbm5faG9zdHMoUEdj b25uICpjb25uKTsKK2V4dGVybiBib29sIHBxQ29ubmVjdE9wdGlvbnMyKFBHY29ubiAqY29ubik7 CitleHRlcm4gaW50CXBxQ29ubmVjdERCU3RhcnQoUEdjb25uICpjb25uKTsKK2V4dGVybiBpbnQJ cHFDb25uZWN0REJDb21wbGV0ZShQR2Nvbm4gKmNvbm4pOworZXh0ZXJuIFBHY29ubiAqcHFNYWtl RW1wdHlQR2Nvbm4odm9pZCk7CitleHRlcm4gYm9vbCBwcUNvcHlQR2Nvbm4oUEdjb25uICpzcmND b25uLCBQR2Nvbm4gKmRzdENvbm4pOworZXh0ZXJuIHZvaWQgcHFDbG9zZVBHY29ubihQR2Nvbm4g KmNvbm4pOwogCiBleHRlcm4gcGd0aHJlYWRsb2NrX3QgcGdfZ190aHJlYWRsb2NrOwogCi0tIAoy LjM0LjEKCg== --000000000000cc7872060fdc20d9 Content-Type: application/octet-stream; name="v26-0001-libpq-Move-cancellation-related-functions-to-fe-.patch" Content-Disposition: attachment; filename="v26-0001-libpq-Move-cancellation-related-functions-to-fe-.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_lruvnsao0 RnJvbSBiM2EzZTVlNjU5YjY4ZjJhOWFiZjFkOWFmODczM2VlNDg4OGM1YzYwIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBKZWx0ZSBGZW5uZW1hLU5pbyA8amVsdGUuZmVubmVtYUBtaWNy b3NvZnQuY29tPgpEYXRlOiBGcmksIDI2IEphbiAyMDI0IDE0OjM1OjQ4ICswMTAwClN1YmplY3Q6 IFtQQVRDSCB2MjYgMS81XSBsaWJwcTogTW92ZSBjYW5jZWxsYXRpb24gcmVsYXRlZCBmdW5jdGlv bnMgdG8KIGZlLWNhbmNlbC5jCgpJbiBmb2xsb3cgdXAgY29tbWl0cyB3ZSdsbCBhZGQgbW9yZSBm dW5jdGlvbnMgcmVsYXRlZCB0byBjYW5jZWxsYXRpb25zCnRoaXMgZ3JvdXBzIHRob3NlIGFsbCB0 b2dldGhlciBpbnN0ZWFkIG9mIGdyb3VwaW5nIHRoZW0gd2l0aCBhbGwgdGhlCm90aGVyIGZ1bmN0 aW9ucyBpbiBmZS1jb25uZWN0LmMKLS0tCiBzcmMvaW50ZXJmYWNlcy9saWJwcS9mZS1jYW5jZWwu YyAgfCAzODYgKysrKysrKysrKysrKysrKysrKysrKysrKysrKwogc3JjL2ludGVyZmFjZXMvbGli cHEvZmUtY29ubmVjdC5jIHwgNDA1ICsrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogc3Jj L2ludGVyZmFjZXMvbGlicHEvbGlicHEtaW50LmggIHwgICAyICsKIHNyYy9pbnRlcmZhY2VzL2xp YnBxL21lc29uLmJ1aWxkICB8ICAgMSArCiA0IGZpbGVzIGNoYW5nZWQsIDQwNyBpbnNlcnRpb25z KCspLCAzODcgZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL2ludGVyZmFjZXMv bGlicHEvZmUtY2FuY2VsLmMKCmRpZmYgLS1naXQgYS9zcmMvaW50ZXJmYWNlcy9saWJwcS9mZS1j YW5jZWwuYyBiL3NyYy9pbnRlcmZhY2VzL2xpYnBxL2ZlLWNhbmNlbC5jCm5ldyBmaWxlIG1vZGUg MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5mMWQ4MzZkMDIxNgotLS0gL2Rldi9udWxsCisrKyBi L3NyYy9pbnRlcmZhY2VzL2xpYnBxL2ZlLWNhbmNlbC5jCkBAIC0wLDAgKzEsMzg2IEBACisvKi0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0KKyAqCisgKiBmZS1jYW5jZWwuYworICoJICBmdW5jdGlvbnMgcmVsYXRl ZCB0byBzZXR0aW5nIHVwIGEgY29ubmVjdGlvbiB0byB0aGUgYmFja2VuZAorICoKKyAqIFBvcnRp b25zIENvcHlyaWdodCAoYykgMTk5Ni0yMDI0LCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVu dCBHcm91cAorICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAxOTk0LCBSZWdlbnRzIG9mIHRoZSBV bml2ZXJzaXR5IG9mIENhbGlmb3JuaWEKKyAqCisgKgorICogSURFTlRJRklDQVRJT04KKyAqCSAg c3JjL2ludGVyZmFjZXMvbGlicHEvZmUtY2FuY2VsLmMKKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K KyAqLworCisjaW5jbHVkZSAicG9zdGdyZXNfZmUuaCIKKworI2luY2x1ZGUgImxpYnBxLWZlLmgi CisjaW5jbHVkZSAibGlicHEtaW50LmgiCisjaW5jbHVkZSAicG9ydC9wZ19ic3dhcC5oIgorCisv KgorICogUFFnZXRDYW5jZWw6IGdldCBhIFBHY2FuY2VsIHN0cnVjdHVyZSBjb3JyZXNwb25kaW5n IHRvIGEgY29ubmVjdGlvbi4KKyAqCisgKiBBIGNvcHkgaXMgbmVlZGVkIHRvIGJlIGFibGUgdG8g Y2FuY2VsIGEgcnVubmluZyBxdWVyeSBmcm9tIGEgZGlmZmVyZW50CisgKiB0aHJlYWQuIElmIHRo ZSBzYW1lIHN0cnVjdHVyZSBpcyB1c2VkIGFsbCBzdHJ1Y3R1cmUgbWVtYmVycyB3b3VsZCBoYXZl CisgKiB0byBiZSBpbmRpdmlkdWFsbHkgbG9ja2VkIChpZiB0aGUgZW50aXJlIHN0cnVjdHVyZSB3 YXMgbG9ja2VkLCBpdCB3b3VsZAorICogYmUgaW1wb3NzaWJsZSB0byBjYW5jZWwgYSBzeW5jaHJv bm91cyBxdWVyeSBiZWNhdXNlIHRoZSBzdHJ1Y3R1cmUgd291bGQKKyAqIGhhdmUgdG8gc3RheSBs b2NrZWQgZm9yIHRoZSBkdXJhdGlvbiBvZiB0aGUgcXVlcnkpLgorICovCitQR2NhbmNlbCAqCitQ UWdldENhbmNlbChQR2Nvbm4gKmNvbm4pCit7CisJUEdjYW5jZWwgICAqY2FuY2VsOworCisJaWYg KCFjb25uKQorCQlyZXR1cm4gTlVMTDsKKworCWlmIChjb25uLT5zb2NrID09IFBHSU5WQUxJRF9T T0NLRVQpCisJCXJldHVybiBOVUxMOworCisJY2FuY2VsID0gbWFsbG9jKHNpemVvZihQR2NhbmNl bCkpOworCWlmIChjYW5jZWwgPT0gTlVMTCkKKwkJcmV0dXJuIE5VTEw7CisKKwltZW1jcHkoJmNh bmNlbC0+cmFkZHIsICZjb25uLT5yYWRkciwgc2l6ZW9mKFNvY2tBZGRyKSk7CisJY2FuY2VsLT5i ZV9waWQgPSBjb25uLT5iZV9waWQ7CisJY2FuY2VsLT5iZV9rZXkgPSBjb25uLT5iZV9rZXk7CisJ LyogV2UgdXNlIC0xIHRvIGluZGljYXRlIGFuIHVuc2V0IGNvbm5lY3Rpb24gb3B0aW9uICovCisJ Y2FuY2VsLT5wZ3RjcF91c2VyX3RpbWVvdXQgPSAtMTsKKwljYW5jZWwtPmtlZXBhbGl2ZXMgPSAt MTsKKwljYW5jZWwtPmtlZXBhbGl2ZXNfaWRsZSA9IC0xOworCWNhbmNlbC0+a2VlcGFsaXZlc19p bnRlcnZhbCA9IC0xOworCWNhbmNlbC0+a2VlcGFsaXZlc19jb3VudCA9IC0xOworCWlmIChjb25u LT5wZ3RjcF91c2VyX3RpbWVvdXQgIT0gTlVMTCkKKwl7CisJCWlmICghcHFfcGFyc2VfaW50X3Bh cmFtKGNvbm4tPnBndGNwX3VzZXJfdGltZW91dCwKKwkJCQkJCQkgJmNhbmNlbC0+cGd0Y3BfdXNl cl90aW1lb3V0LAorCQkJCQkJCSBjb25uLCAidGNwX3VzZXJfdGltZW91dCIpKQorCQkJZ290byBm YWlsOworCX0KKwlpZiAoY29ubi0+a2VlcGFsaXZlcyAhPSBOVUxMKQorCXsKKwkJaWYgKCFwcV9w YXJzZV9pbnRfcGFyYW0oY29ubi0+a2VlcGFsaXZlcywKKwkJCQkJCQkgJmNhbmNlbC0+a2VlcGFs aXZlcywKKwkJCQkJCQkgY29ubiwgImtlZXBhbGl2ZXMiKSkKKwkJCWdvdG8gZmFpbDsKKwl9CisJ aWYgKGNvbm4tPmtlZXBhbGl2ZXNfaWRsZSAhPSBOVUxMKQorCXsKKwkJaWYgKCFwcV9wYXJzZV9p bnRfcGFyYW0oY29ubi0+a2VlcGFsaXZlc19pZGxlLAorCQkJCQkJCSAmY2FuY2VsLT5rZWVwYWxp dmVzX2lkbGUsCisJCQkJCQkJIGNvbm4sICJrZWVwYWxpdmVzX2lkbGUiKSkKKwkJCWdvdG8gZmFp bDsKKwl9CisJaWYgKGNvbm4tPmtlZXBhbGl2ZXNfaW50ZXJ2YWwgIT0gTlVMTCkKKwl7CisJCWlm ICghcHFfcGFyc2VfaW50X3BhcmFtKGNvbm4tPmtlZXBhbGl2ZXNfaW50ZXJ2YWwsCisJCQkJCQkJ ICZjYW5jZWwtPmtlZXBhbGl2ZXNfaW50ZXJ2YWwsCisJCQkJCQkJIGNvbm4sICJrZWVwYWxpdmVz X2ludGVydmFsIikpCisJCQlnb3RvIGZhaWw7CisJfQorCWlmIChjb25uLT5rZWVwYWxpdmVzX2Nv dW50ICE9IE5VTEwpCisJeworCQlpZiAoIXBxX3BhcnNlX2ludF9wYXJhbShjb25uLT5rZWVwYWxp dmVzX2NvdW50LAorCQkJCQkJCSAmY2FuY2VsLT5rZWVwYWxpdmVzX2NvdW50LAorCQkJCQkJCSBj b25uLCAia2VlcGFsaXZlc19jb3VudCIpKQorCQkJZ290byBmYWlsOworCX0KKworCXJldHVybiBj YW5jZWw7CisKK2ZhaWw6CisJZnJlZShjYW5jZWwpOworCXJldHVybiBOVUxMOworfQorCisvKiBQ UWZyZWVDYW5jZWw6IGZyZWUgYSBjYW5jZWwgc3RydWN0dXJlICovCit2b2lkCitQUWZyZWVDYW5j ZWwoUEdjYW5jZWwgKmNhbmNlbCkKK3sKKwlmcmVlKGNhbmNlbCk7Cit9CisKKworLyoKKyAqIFNl dHMgYW4gaW50ZWdlciBzb2NrZXQgb3B0aW9uIG9uIGEgVENQIHNvY2tldCwgaWYgdGhlIHByb3Zp ZGVkIHZhbHVlIGlzCisgKiBub3QgbmVnYXRpdmUuICBSZXR1cm5zIGZhbHNlIGlmIHNldHNvY2tv cHQgZmFpbHMgZm9yIHNvbWUgcmVhc29uLgorICoKKyAqIENBVVRJT046IFRoaXMgbmVlZHMgdG8g YmUgc2lnbmFsIHNhZmUsIHNpbmNlIGl0J3MgdXNlZCBieSBQUWNhbmNlbC4KKyAqLworI2lmIGRl ZmluZWQoVENQX1VTRVJfVElNRU9VVCkgfHwgIWRlZmluZWQoV0lOMzIpCitzdGF0aWMgYm9vbAor b3B0aW9uYWxfc2V0c29ja29wdChpbnQgZmQsIGludCBwcm90b2lkLCBpbnQgb3B0aWQsIGludCB2 YWx1ZSkKK3sKKwlpZiAodmFsdWUgPCAwKQorCQlyZXR1cm4gdHJ1ZTsKKwlpZiAoc2V0c29ja29w dChmZCwgcHJvdG9pZCwgb3B0aWQsIChjaGFyICopICZ2YWx1ZSwgc2l6ZW9mKHZhbHVlKSkgPCAw KQorCQlyZXR1cm4gZmFsc2U7CisJcmV0dXJuIHRydWU7Cit9CisjZW5kaWYKKworCisKKy8qCisg KiBQUWNhbmNlbDogcmVxdWVzdCBxdWVyeSBjYW5jZWwKKyAqCisgKiBUaGUgcmV0dXJuIHZhbHVl IGlzIHRydWUgaWYgdGhlIGNhbmNlbCByZXF1ZXN0IHdhcyBzdWNjZXNzZnVsbHkKKyAqIGRpc3Bh dGNoZWQsIGZhbHNlIGlmIG5vdCAoaW4gd2hpY2ggY2FzZSBhbiBlcnJvciBtZXNzYWdlIGlzIGF2 YWlsYWJsZSkuCisgKiBOb3RlOiBzdWNjZXNzZnVsIGRpc3BhdGNoIGlzIG5vIGd1YXJhbnRlZSB0 aGF0IHRoZXJlIHdpbGwgYmUgYW55IGVmZmVjdCBhdAorICogdGhlIGJhY2tlbmQuICBUaGUgYXBw bGljYXRpb24gbXVzdCByZWFkIHRoZSBvcGVyYXRpb24gcmVzdWx0IGFzIHVzdWFsLgorICoKKyAq IE9uIGZhaWx1cmUsIGFuIGVycm9yIG1lc3NhZ2UgaXMgc3RvcmVkIGluICplcnJidWYsIHdoaWNo IG11c3QgYmUgb2Ygc2l6ZQorICogZXJyYnVmc2l6ZSAocmVjb21tZW5kZWQgc2l6ZSBpcyAyNTYg Ynl0ZXMpLiAgKmVycmJ1ZiBpcyBub3QgY2hhbmdlZCBvbgorICogc3VjY2VzcyByZXR1cm4uCisg KgorICogQ0FVVElPTjogd2Ugd2FudCB0aGlzIHJvdXRpbmUgdG8gYmUgc2FmZWx5IGNhbGxhYmxl IGZyb20gYSBzaWduYWwgaGFuZGxlcgorICogKGZvciBleGFtcGxlLCBhbiBhcHBsaWNhdGlvbiBt aWdodCB3YW50IHRvIGNhbGwgaXQgaW4gYSBTSUdJTlQgaGFuZGxlcikuCisgKiBUaGlzIG1lYW5z IHdlIGNhbm5vdCB1c2UgYW55IEMgbGlicmFyeSByb3V0aW5lIHRoYXQgbWlnaHQgYmUgbm9uLXJl ZW50cmFudC4KKyAqIG1hbGxvYy9mcmVlIGFyZSBvZnRlbiBub24tcmVlbnRyYW50LCBhbmQgYW55 dGhpbmcgdGhhdCBtaWdodCBjYWxsIHRoZW0gaXMKKyAqIGp1c3QgYXMgZGFuZ2Vyb3VzLiAgV2Ug YXZvaWQgc3ByaW50ZiBoZXJlIGZvciB0aGF0IHJlYXNvbi4gIEJ1aWxkaW5nIHVwCisgKiBlcnJv ciBtZXNzYWdlcyB3aXRoIHN0cmNweS9zdHJjYXQgaXMgdGVkaW91cyBidXQgc2hvdWxkIGJlIHF1 aXRlIHNhZmUuCisgKiBXZSBhbHNvIHNhdmUvcmVzdG9yZSBlcnJubyBpbiBjYXNlIHRoZSBzaWdu YWwgaGFuZGxlciBzdXBwb3J0IGRvZXNuJ3QuCisgKi8KK2ludAorUFFjYW5jZWwoUEdjYW5jZWwg KmNhbmNlbCwgY2hhciAqZXJyYnVmLCBpbnQgZXJyYnVmc2l6ZSkKK3sKKwlpbnQJCQlzYXZlX2Vy cm5vID0gU09DS19FUlJOTzsKKwlwZ3NvY2tldAl0bXBzb2NrID0gUEdJTlZBTElEX1NPQ0tFVDsK KwlpbnQJCQltYXhsZW47CisJc3RydWN0CisJeworCQl1aW50MzIJCXBhY2tldGxlbjsKKwkJQ2Fu Y2VsUmVxdWVzdFBhY2tldCBjcDsKKwl9CQkJY3JwOworCisJaWYgKCFjYW5jZWwpCisJeworCQlz dHJsY3B5KGVycmJ1ZiwgIlBRY2FuY2VsKCkgLS0gbm8gY2FuY2VsIG9iamVjdCBzdXBwbGllZCIs IGVycmJ1ZnNpemUpOworCQkvKiBzdHJsY3B5IHByb2JhYmx5IGRvZXNuJ3QgY2hhbmdlIGVycm5v LCBidXQgYmUgcGFyYW5vaWQgKi8KKwkJU09DS19FUlJOT19TRVQoc2F2ZV9lcnJubyk7CisJCXJl dHVybiBmYWxzZTsKKwl9CisKKwkvKgorCSAqIFdlIG5lZWQgdG8gb3BlbiBhIHRlbXBvcmFyeSBj b25uZWN0aW9uIHRvIHRoZSBwb3N0bWFzdGVyLiBEbyB0aGlzIHdpdGgKKwkgKiBvbmx5IGtlcm5l bCBjYWxscy4KKwkgKi8KKwlpZiAoKHRtcHNvY2sgPSBzb2NrZXQoY2FuY2VsLT5yYWRkci5hZGRy LnNzX2ZhbWlseSwgU09DS19TVFJFQU0sIDApKSA9PSBQR0lOVkFMSURfU09DS0VUKQorCXsKKwkJ c3RybGNweShlcnJidWYsICJQUWNhbmNlbCgpIC0tIHNvY2tldCgpIGZhaWxlZDogIiwgZXJyYnVm c2l6ZSk7CisJCWdvdG8gY2FuY2VsX2VyclJldHVybjsKKwl9CisKKwkvKgorCSAqIFNpbmNlIHRo aXMgY29ubmVjdGlvbiB3aWxsIG9ubHkgYmUgdXNlZCB0byBzZW5kIGEgc2luZ2xlIHBhY2tldCBv ZgorCSAqIGRhdGEsIHdlIGRvbid0IG5lZWQgTk9ERUxBWS4gIFdlIGFsc28gZG9uJ3Qgc2V0IHRo ZSBzb2NrZXQgdG8KKwkgKiBub25ibG9ja2luZyBtb2RlLCBiZWNhdXNlIHRoZSBBUEkgZGVmaW5p dGlvbiBvZiBQUWNhbmNlbCByZXF1aXJlcyB0aGUKKwkgKiBjYW5jZWwgdG8gYmUgc2VudCBpbiBh IGJsb2NraW5nIHdheS4KKwkgKgorCSAqIFdlIGRvIHNldCBzb2NrZXQgb3B0aW9ucyByZWxhdGVk IHRvIGtlZXBhbGl2ZXMgYW5kIG90aGVyIFRDUCB0aW1lb3V0cy4KKwkgKiBUaGlzIGVuc3VyZXMg dGhhdCB0aGlzIGZ1bmN0aW9uIGRvZXMgbm90IGJsb2NrIGluZGVmaW5pdGVseSB3aGVuCisJICog cmVhc29uYWJsZSBrZWVwYWxpdmUgYW5kIHRpbWVvdXQgc2V0dGluZ3MgaGF2ZSBiZWVuIHByb3Zp ZGVkLgorCSAqLworCWlmIChjYW5jZWwtPnJhZGRyLmFkZHIuc3NfZmFtaWx5ICE9IEFGX1VOSVgg JiYKKwkJY2FuY2VsLT5rZWVwYWxpdmVzICE9IDApCisJeworI2lmbmRlZiBXSU4zMgorCQlpZiAo IW9wdGlvbmFsX3NldHNvY2tvcHQodG1wc29jaywgU09MX1NPQ0tFVCwgU09fS0VFUEFMSVZFLCAx KSkKKwkJeworCQkJc3RybGNweShlcnJidWYsICJQUWNhbmNlbCgpIC0tIHNldHNvY2tvcHQoU09f S0VFUEFMSVZFKSBmYWlsZWQ6ICIsIGVycmJ1ZnNpemUpOworCQkJZ290byBjYW5jZWxfZXJyUmV0 dXJuOworCQl9CisKKyNpZmRlZiBQR19UQ1BfS0VFUEFMSVZFX0lETEUKKwkJaWYgKCFvcHRpb25h bF9zZXRzb2Nrb3B0KHRtcHNvY2ssIElQUFJPVE9fVENQLCBQR19UQ1BfS0VFUEFMSVZFX0lETEUs CisJCQkJCQkJCSBjYW5jZWwtPmtlZXBhbGl2ZXNfaWRsZSkpCisJCXsKKwkJCXN0cmxjcHkoZXJy YnVmLCAiUFFjYW5jZWwoKSAtLSBzZXRzb2Nrb3B0KCIgUEdfVENQX0tFRVBBTElWRV9JRExFX1NU UiAiKSBmYWlsZWQ6ICIsIGVycmJ1ZnNpemUpOworCQkJZ290byBjYW5jZWxfZXJyUmV0dXJuOwor CQl9CisjZW5kaWYKKworI2lmZGVmIFRDUF9LRUVQSU5UVkwKKwkJaWYgKCFvcHRpb25hbF9zZXRz b2Nrb3B0KHRtcHNvY2ssIElQUFJPVE9fVENQLCBUQ1BfS0VFUElOVFZMLAorCQkJCQkJCQkgY2Fu Y2VsLT5rZWVwYWxpdmVzX2ludGVydmFsKSkKKwkJeworCQkJc3RybGNweShlcnJidWYsICJQUWNh bmNlbCgpIC0tIHNldHNvY2tvcHQoVENQX0tFRVBJTlRWTCkgZmFpbGVkOiAiLCBlcnJidWZzaXpl KTsKKwkJCWdvdG8gY2FuY2VsX2VyclJldHVybjsKKwkJfQorI2VuZGlmCisKKyNpZmRlZiBUQ1Bf S0VFUENOVAorCQlpZiAoIW9wdGlvbmFsX3NldHNvY2tvcHQodG1wc29jaywgSVBQUk9UT19UQ1As IFRDUF9LRUVQQ05ULAorCQkJCQkJCQkgY2FuY2VsLT5rZWVwYWxpdmVzX2NvdW50KSkKKwkJewor CQkJc3RybGNweShlcnJidWYsICJQUWNhbmNlbCgpIC0tIHNldHNvY2tvcHQoVENQX0tFRVBDTlQp IGZhaWxlZDogIiwgZXJyYnVmc2l6ZSk7CisJCQlnb3RvIGNhbmNlbF9lcnJSZXR1cm47CisJCX0K KyNlbmRpZgorCisjZWxzZQkJCQkJCQkvKiBXSU4zMiAqLworCisjaWZkZWYgU0lPX0tFRVBBTElW RV9WQUxTCisJCWlmICghc2V0S2VlcGFsaXZlc1dpbjMyKHRtcHNvY2ssCisJCQkJCQkJCWNhbmNl bC0+a2VlcGFsaXZlc19pZGxlLAorCQkJCQkJCQljYW5jZWwtPmtlZXBhbGl2ZXNfaW50ZXJ2YWwp KQorCQl7CisJCQlzdHJsY3B5KGVycmJ1ZiwgIlBRY2FuY2VsKCkgLS0gV1NBSW9jdGwoU0lPX0tF RVBBTElWRV9WQUxTKSBmYWlsZWQ6ICIsIGVycmJ1ZnNpemUpOworCQkJZ290byBjYW5jZWxfZXJy UmV0dXJuOworCQl9CisjZW5kaWYJCQkJCQkJLyogU0lPX0tFRVBBTElWRV9WQUxTICovCisjZW5k aWYJCQkJCQkJLyogV0lOMzIgKi8KKworCQkvKiBUQ1BfVVNFUl9USU1FT1VUIHdvcmtzIHRoZSBz YW1lIHdheSBvbiBVbml4IGFuZCBXaW5kb3dzICovCisjaWZkZWYgVENQX1VTRVJfVElNRU9VVAor CQlpZiAoIW9wdGlvbmFsX3NldHNvY2tvcHQodG1wc29jaywgSVBQUk9UT19UQ1AsIFRDUF9VU0VS X1RJTUVPVVQsCisJCQkJCQkJCSBjYW5jZWwtPnBndGNwX3VzZXJfdGltZW91dCkpCisJCXsKKwkJ CXN0cmxjcHkoZXJyYnVmLCAiUFFjYW5jZWwoKSAtLSBzZXRzb2Nrb3B0KFRDUF9VU0VSX1RJTUVP VVQpIGZhaWxlZDogIiwgZXJyYnVmc2l6ZSk7CisJCQlnb3RvIGNhbmNlbF9lcnJSZXR1cm47CisJ CX0KKyNlbmRpZgorCX0KKworcmV0cnkzOgorCWlmIChjb25uZWN0KHRtcHNvY2ssIChzdHJ1Y3Qg c29ja2FkZHIgKikgJmNhbmNlbC0+cmFkZHIuYWRkciwKKwkJCQljYW5jZWwtPnJhZGRyLnNhbGVu KSA8IDApCisJeworCQlpZiAoU09DS19FUlJOTyA9PSBFSU5UUikKKwkJCS8qIEludGVycnVwdGVk IHN5c3RlbSBjYWxsIC0gd2UnbGwganVzdCB0cnkgYWdhaW4gKi8KKwkJCWdvdG8gcmV0cnkzOwor CQlzdHJsY3B5KGVycmJ1ZiwgIlBRY2FuY2VsKCkgLS0gY29ubmVjdCgpIGZhaWxlZDogIiwgZXJy YnVmc2l6ZSk7CisJCWdvdG8gY2FuY2VsX2VyclJldHVybjsKKwl9CisKKwkvKiBDcmVhdGUgYW5k IHNlbmQgdGhlIGNhbmNlbCByZXF1ZXN0IHBhY2tldC4gKi8KKworCWNycC5wYWNrZXRsZW4gPSBw Z19odG9uMzIoKHVpbnQzMikgc2l6ZW9mKGNycCkpOworCWNycC5jcC5jYW5jZWxSZXF1ZXN0Q29k ZSA9IChNc2dUeXBlKSBwZ19odG9uMzIoQ0FOQ0VMX1JFUVVFU1RfQ09ERSk7CisJY3JwLmNwLmJh Y2tlbmRQSUQgPSBwZ19odG9uMzIoY2FuY2VsLT5iZV9waWQpOworCWNycC5jcC5jYW5jZWxBdXRo Q29kZSA9IHBnX2h0b24zMihjYW5jZWwtPmJlX2tleSk7CisKK3JldHJ5NDoKKwlpZiAoc2VuZCh0 bXBzb2NrLCAoY2hhciAqKSAmY3JwLCBzaXplb2YoY3JwKSwgMCkgIT0gKGludCkgc2l6ZW9mKGNy cCkpCisJeworCQlpZiAoU09DS19FUlJOTyA9PSBFSU5UUikKKwkJCS8qIEludGVycnVwdGVkIHN5 c3RlbSBjYWxsIC0gd2UnbGwganVzdCB0cnkgYWdhaW4gKi8KKwkJCWdvdG8gcmV0cnk0OworCQlz dHJsY3B5KGVycmJ1ZiwgIlBRY2FuY2VsKCkgLS0gc2VuZCgpIGZhaWxlZDogIiwgZXJyYnVmc2l6 ZSk7CisJCWdvdG8gY2FuY2VsX2VyclJldHVybjsKKwl9CisKKwkvKgorCSAqIFdhaXQgZm9yIHRo ZSBwb3N0bWFzdGVyIHRvIGNsb3NlIHRoZSBjb25uZWN0aW9uLCB3aGljaCBpbmRpY2F0ZXMgdGhh dAorCSAqIGl0J3MgcHJvY2Vzc2VkIHRoZSByZXF1ZXN0LiAgV2l0aG91dCB0aGlzIGRlbGF5LCB3 ZSBtaWdodCBpc3N1ZSBhbm90aGVyCisJICogY29tbWFuZCBvbmx5IHRvIGZpbmQgdGhhdCBvdXIg Y2FuY2VsIHphcHMgdGhhdCBjb21tYW5kIGluc3RlYWQgb2YgdGhlCisJICogb25lIHdlIHRob3Vn aHQgd2Ugd2VyZSBjYW5jZWxpbmcuICBOb3RlIHdlIGRvbid0IGFjdHVhbGx5IGV4cGVjdCB0aGlz CisJICogcmVhZCB0byBvYnRhaW4gYW55IGRhdGEsIHdlIGFyZSBqdXN0IHdhaXRpbmcgZm9yIEVP RiB0byBiZSBzaWduYWxlZC4KKwkgKi8KK3JldHJ5NToKKwlpZiAocmVjdih0bXBzb2NrLCAoY2hh ciAqKSAmY3JwLCAxLCAwKSA8IDApCisJeworCQlpZiAoU09DS19FUlJOTyA9PSBFSU5UUikKKwkJ CS8qIEludGVycnVwdGVkIHN5c3RlbSBjYWxsIC0gd2UnbGwganVzdCB0cnkgYWdhaW4gKi8KKwkJ CWdvdG8gcmV0cnk1OworCQkvKiB3ZSBpZ25vcmUgb3RoZXIgZXJyb3IgY29uZGl0aW9ucyAqLwor CX0KKworCS8qIEFsbCBkb25lICovCisJY2xvc2Vzb2NrZXQodG1wc29jayk7CisJU09DS19FUlJO T19TRVQoc2F2ZV9lcnJubyk7CisJcmV0dXJuIHRydWU7CisKK2NhbmNlbF9lcnJSZXR1cm46CisK KwkvKgorCSAqIE1ha2Ugc3VyZSB3ZSBkb24ndCBvdmVyZmxvdyB0aGUgZXJyb3IgYnVmZmVyLiBM ZWF2ZSBzcGFjZSBmb3IgdGhlIFxuIGF0CisJICogdGhlIGVuZCwgYW5kIGZvciB0aGUgdGVybWlu YXRpbmcgemVyby4KKwkgKi8KKwltYXhsZW4gPSBlcnJidWZzaXplIC0gc3RybGVuKGVycmJ1Zikg LSAyOworCWlmIChtYXhsZW4gPj0gMCkKKwl7CisJCS8qCisJCSAqIFdlIGNhbid0IGludm9rZSBz dHJlcnJvciBoZXJlLCBzaW5jZSBpdCdzIG5vdCBzaWduYWwtc2FmZS4gIFNldHRsZQorCQkgKiBm b3IgcHJpbnRpbmcgdGhlIGRlY2ltYWwgdmFsdWUgb2YgZXJybm8uICBFdmVuIHRoYXQgaGFzIHRv IGJlIGRvbmUKKwkJICogdGhlIGhhcmQgd2F5LgorCQkgKi8KKwkJaW50CQkJdmFsID0gU09DS19F UlJOTzsKKwkJY2hhcgkJYnVmWzMyXTsKKwkJY2hhcgkgICAqYnVmcDsKKworCQlidWZwID0gYnVm ICsgc2l6ZW9mKGJ1ZikgLSAxOworCQkqYnVmcCA9ICdcMCc7CisJCWRvCisJCXsKKwkJCSooLS1i dWZwKSA9ICh2YWwgJSAxMCkgKyAnMCc7CisJCQl2YWwgLz0gMTA7CisJCX0gd2hpbGUgKHZhbCA+ IDApOworCQlidWZwIC09IDY7CisJCW1lbWNweShidWZwLCAiZXJyb3IgIiwgNik7CisJCXN0cm5j YXQoZXJyYnVmLCBidWZwLCBtYXhsZW4pOworCQlzdHJjYXQoZXJyYnVmLCAiXG4iKTsKKwl9CisJ aWYgKHRtcHNvY2sgIT0gUEdJTlZBTElEX1NPQ0tFVCkKKwkJY2xvc2Vzb2NrZXQodG1wc29jayk7 CisJU09DS19FUlJOT19TRVQoc2F2ZV9lcnJubyk7CisJcmV0dXJuIGZhbHNlOworfQorCisvKgor ICogUFFyZXF1ZXN0Q2FuY2VsOiBvbGQsIG5vdCB0aHJlYWQtc2FmZSBmdW5jdGlvbiBmb3IgcmVx dWVzdGluZyBxdWVyeSBjYW5jZWwKKyAqCisgKiBSZXR1cm5zIHRydWUgaWYgYWJsZSB0byBzZW5k IHRoZSBjYW5jZWwgcmVxdWVzdCwgZmFsc2UgaWYgbm90LgorICoKKyAqIE9uIGZhaWx1cmUsIHRo ZSBlcnJvciBtZXNzYWdlIGlzIHNhdmVkIGluIGNvbm4tPmVycm9yTWVzc2FnZTsgdGhpcyBtZWFu cworICogdGhhdCB0aGlzIGNhbid0IGJlIHVzZWQgd2hlbiB0aGVyZSBtaWdodCBiZSBvdGhlciBh Y3RpdmUgb3BlcmF0aW9ucyBvbgorICogdGhlIGNvbm5lY3Rpb24gb2JqZWN0LgorICoKKyAqIE5P VEU6IGVycm9yIG1lc3NhZ2VzIHdpbGwgYmUgY3V0IG9mZiBhdCB0aGUgY3VycmVudCBzaXplIG9m IHRoZQorICogZXJyb3IgbWVzc2FnZSBidWZmZXIsIHNpbmNlIHdlIGRhcmUgbm90IHRyeSB0byBl eHBhbmQgY29ubi0+ZXJyb3JNZXNzYWdlIQorICovCitpbnQKK1BRcmVxdWVzdENhbmNlbChQR2Nv bm4gKmNvbm4pCit7CisJaW50CQkJcjsKKwlQR2NhbmNlbCAgICpjYW5jZWw7CisKKwkvKiBDaGVj ayB3ZSBoYXZlIGFuIG9wZW4gY29ubmVjdGlvbiAqLworCWlmICghY29ubikKKwkJcmV0dXJuIGZh bHNlOworCisJaWYgKGNvbm4tPnNvY2sgPT0gUEdJTlZBTElEX1NPQ0tFVCkKKwl7CisJCXN0cmxj cHkoY29ubi0+ZXJyb3JNZXNzYWdlLmRhdGEsCisJCQkJIlBRcmVxdWVzdENhbmNlbCgpIC0tIGNv bm5lY3Rpb24gaXMgbm90IG9wZW5cbiIsCisJCQkJY29ubi0+ZXJyb3JNZXNzYWdlLm1heGxlbik7 CisJCWNvbm4tPmVycm9yTWVzc2FnZS5sZW4gPSBzdHJsZW4oY29ubi0+ZXJyb3JNZXNzYWdlLmRh dGEpOworCQljb25uLT5lcnJvclJlcG9ydGVkID0gMDsKKworCQlyZXR1cm4gZmFsc2U7CisJfQor CisJY2FuY2VsID0gUFFnZXRDYW5jZWwoY29ubik7CisJaWYgKGNhbmNlbCkKKwl7CisJCXIgPSBQ UWNhbmNlbChjYW5jZWwsIGNvbm4tPmVycm9yTWVzc2FnZS5kYXRhLAorCQkJCQkgY29ubi0+ZXJy b3JNZXNzYWdlLm1heGxlbik7CisJCVBRZnJlZUNhbmNlbChjYW5jZWwpOworCX0KKwllbHNlCisJ eworCQlzdHJsY3B5KGNvbm4tPmVycm9yTWVzc2FnZS5kYXRhLCAib3V0IG9mIG1lbW9yeSIsCisJ CQkJY29ubi0+ZXJyb3JNZXNzYWdlLm1heGxlbik7CisJCXIgPSBmYWxzZTsKKwl9CisKKwlpZiAo IXIpCisJeworCQljb25uLT5lcnJvck1lc3NhZ2UubGVuID0gc3RybGVuKGNvbm4tPmVycm9yTWVz c2FnZS5kYXRhKTsKKwkJY29ubi0+ZXJyb3JSZXBvcnRlZCA9IDA7CisJfQorCisJcmV0dXJuIHI7 Cit9CmRpZmYgLS1naXQgYS9zcmMvaW50ZXJmYWNlcy9saWJwcS9mZS1jb25uZWN0LmMgYi9zcmMv aW50ZXJmYWNlcy9saWJwcS9mZS1jb25uZWN0LmMKaW5kZXggNzllMGI3M2Q2MTguLjUzNTdiMGE5 ZDIyIDEwMDY0NAotLS0gYS9zcmMvaW50ZXJmYWNlcy9saWJwcS9mZS1jb25uZWN0LmMKKysrIGIv c3JjL2ludGVyZmFjZXMvbGlicHEvZmUtY29ubmVjdC5jCkBAIC00NDMsOCArNDQzLDYgQEAgc3Rh dGljIHZvaWQgcGdwYXNzZmlsZVdhcm5pbmcoUEdjb25uICpjb25uKTsKIHN0YXRpYyB2b2lkIGRl ZmF1bHRfdGhyZWFkbG9jayhpbnQgYWNxdWlyZSk7CiBzdGF0aWMgYm9vbCBzc2xWZXJpZnlQcm90 b2NvbFZlcnNpb24oY29uc3QgY2hhciAqdmVyc2lvbik7CiBzdGF0aWMgYm9vbCBzc2xWZXJpZnlQ cm90b2NvbFJhbmdlKGNvbnN0IGNoYXIgKm1pbiwgY29uc3QgY2hhciAqbWF4KTsKLXN0YXRpYyBi b29sIHBhcnNlX2ludF9wYXJhbShjb25zdCBjaGFyICp2YWx1ZSwgaW50ICpyZXN1bHQsIFBHY29u biAqY29ubiwKLQkJCQkJCQljb25zdCBjaGFyICpjb250ZXh0KTsKIAogCiAvKiBnbG9iYWwgdmFy aWFibGUgYmVjYXVzZSBmZS1hdXRoLmMgbmVlZHMgdG8gYWNjZXNzIGl0ICovCkBAIC0yMDgxLDkg KzIwNzksOSBAQCB1c2VLZWVwYWxpdmVzKFBHY29ubiAqY29ubikKICAqIHN0b3JlIGl0IGluICpy ZXN1bHQsIGNvbXBsYWluaW5nIGlmIHRoZXJlIGlzIGFueSB0cmFpbGluZyBnYXJiYWdlIG9yIGFu CiAgKiBvdmVyZmxvdy4gIFRoaXMgYWxsb3dzIGFueSBudW1iZXIgb2YgbGVhZGluZyBhbmQgdHJh aWxpbmcgd2hpdGVzcGFjZXMuCiAgKi8KLXN0YXRpYyBib29sCi1wYXJzZV9pbnRfcGFyYW0oY29u c3QgY2hhciAqdmFsdWUsIGludCAqcmVzdWx0LCBQR2Nvbm4gKmNvbm4sCi0JCQkJY29uc3QgY2hh ciAqY29udGV4dCkKK2Jvb2wKK3BxX3BhcnNlX2ludF9wYXJhbShjb25zdCBjaGFyICp2YWx1ZSwg aW50ICpyZXN1bHQsIFBHY29ubiAqY29ubiwKKwkJCQkgICBjb25zdCBjaGFyICpjb250ZXh0KQog ewogCWNoYXIJICAgKmVuZDsKIAlsb25nCQludW12YWw7CkBAIC0yMTM0LDggKzIxMzIsOCBAQCBz ZXRLZWVwYWxpdmVzSWRsZShQR2Nvbm4gKmNvbm4pCiAJaWYgKGNvbm4tPmtlZXBhbGl2ZXNfaWRs ZSA9PSBOVUxMKQogCQlyZXR1cm4gMTsKIAotCWlmICghcGFyc2VfaW50X3BhcmFtKGNvbm4tPmtl ZXBhbGl2ZXNfaWRsZSwgJmlkbGUsIGNvbm4sCi0JCQkJCQkgImtlZXBhbGl2ZXNfaWRsZSIpKQor CWlmICghcHFfcGFyc2VfaW50X3BhcmFtKGNvbm4tPmtlZXBhbGl2ZXNfaWRsZSwgJmlkbGUsIGNv bm4sCisJCQkJCQkJImtlZXBhbGl2ZXNfaWRsZSIpKQogCQlyZXR1cm4gMDsKIAlpZiAoaWRsZSA8 IDApCiAJCWlkbGUgPSAwOwpAQCAtMjE2OCw4ICsyMTY2LDggQEAgc2V0S2VlcGFsaXZlc0ludGVy dmFsKFBHY29ubiAqY29ubikKIAlpZiAoY29ubi0+a2VlcGFsaXZlc19pbnRlcnZhbCA9PSBOVUxM KQogCQlyZXR1cm4gMTsKIAotCWlmICghcGFyc2VfaW50X3BhcmFtKGNvbm4tPmtlZXBhbGl2ZXNf aW50ZXJ2YWwsICZpbnRlcnZhbCwgY29ubiwKLQkJCQkJCSAia2VlcGFsaXZlc19pbnRlcnZhbCIp KQorCWlmICghcHFfcGFyc2VfaW50X3BhcmFtKGNvbm4tPmtlZXBhbGl2ZXNfaW50ZXJ2YWwsICZp bnRlcnZhbCwgY29ubiwKKwkJCQkJCQkia2VlcGFsaXZlc19pbnRlcnZhbCIpKQogCQlyZXR1cm4g MDsKIAlpZiAoaW50ZXJ2YWwgPCAwKQogCQlpbnRlcnZhbCA9IDA7CkBAIC0yMjAzLDggKzIyMDEs OCBAQCBzZXRLZWVwYWxpdmVzQ291bnQoUEdjb25uICpjb25uKQogCWlmIChjb25uLT5rZWVwYWxp dmVzX2NvdW50ID09IE5VTEwpCiAJCXJldHVybiAxOwogCi0JaWYgKCFwYXJzZV9pbnRfcGFyYW0o Y29ubi0+a2VlcGFsaXZlc19jb3VudCwgJmNvdW50LCBjb25uLAotCQkJCQkJICJrZWVwYWxpdmVz X2NvdW50IikpCisJaWYgKCFwcV9wYXJzZV9pbnRfcGFyYW0oY29ubi0+a2VlcGFsaXZlc19jb3Vu dCwgJmNvdW50LCBjb25uLAorCQkJCQkJCSJrZWVwYWxpdmVzX2NvdW50IikpCiAJCXJldHVybiAw OwogCWlmIChjb3VudCA8IDApCiAJCWNvdW50ID0gMDsKQEAgLTIyNjksMTIgKzIyNjcsMTIgQEAg cHJlcEtlZXBhbGl2ZXNXaW4zMihQR2Nvbm4gKmNvbm4pCiAJaW50CQkJaW50ZXJ2YWwgPSAtMTsK IAogCWlmIChjb25uLT5rZWVwYWxpdmVzX2lkbGUgJiYKLQkJIXBhcnNlX2ludF9wYXJhbShjb25u LT5rZWVwYWxpdmVzX2lkbGUsICZpZGxlLCBjb25uLAotCQkJCQkJICJrZWVwYWxpdmVzX2lkbGUi KSkKKwkJIXBxX3BhcnNlX2ludF9wYXJhbShjb25uLT5rZWVwYWxpdmVzX2lkbGUsICZpZGxlLCBj b25uLAorCQkJCQkJCSJrZWVwYWxpdmVzX2lkbGUiKSkKIAkJcmV0dXJuIDA7CiAJaWYgKGNvbm4t PmtlZXBhbGl2ZXNfaW50ZXJ2YWwgJiYKLQkJIXBhcnNlX2ludF9wYXJhbShjb25uLT5rZWVwYWxp dmVzX2ludGVydmFsLCAmaW50ZXJ2YWwsIGNvbm4sCi0JCQkJCQkgImtlZXBhbGl2ZXNfaW50ZXJ2 YWwiKSkKKwkJIXBxX3BhcnNlX2ludF9wYXJhbShjb25uLT5rZWVwYWxpdmVzX2ludGVydmFsLCAm aW50ZXJ2YWwsIGNvbm4sCisJCQkJCQkJImtlZXBhbGl2ZXNfaW50ZXJ2YWwiKSkKIAkJcmV0dXJu IDA7CiAKIAlpZiAoIXNldEtlZXBhbGl2ZXNXaW4zMihjb25uLT5zb2NrLCBpZGxlLCBpbnRlcnZh bCkpCkBAIC0yMzAwLDggKzIyOTgsOCBAQCBzZXRUQ1BVc2VyVGltZW91dChQR2Nvbm4gKmNvbm4p CiAJaWYgKGNvbm4tPnBndGNwX3VzZXJfdGltZW91dCA9PSBOVUxMKQogCQlyZXR1cm4gMTsKIAot CWlmICghcGFyc2VfaW50X3BhcmFtKGNvbm4tPnBndGNwX3VzZXJfdGltZW91dCwgJnRpbWVvdXQs IGNvbm4sCi0JCQkJCQkgInRjcF91c2VyX3RpbWVvdXQiKSkKKwlpZiAoIXBxX3BhcnNlX2ludF9w YXJhbShjb25uLT5wZ3RjcF91c2VyX3RpbWVvdXQsICZ0aW1lb3V0LCBjb25uLAorCQkJCQkJCSJ0 Y3BfdXNlcl90aW1lb3V0IikpCiAJCXJldHVybiAwOwogCiAJaWYgKHRpbWVvdXQgPCAwKQpAQCAt MjQxOCw4ICsyNDE2LDggQEAgY29ubmVjdERCQ29tcGxldGUoUEdjb25uICpjb25uKQogCSAqLwog CWlmIChjb25uLT5jb25uZWN0X3RpbWVvdXQgIT0gTlVMTCkKIAl7Ci0JCWlmICghcGFyc2VfaW50 X3BhcmFtKGNvbm4tPmNvbm5lY3RfdGltZW91dCwgJnRpbWVvdXQsIGNvbm4sCi0JCQkJCQkJICJj b25uZWN0X3RpbWVvdXQiKSkKKwkJaWYgKCFwcV9wYXJzZV9pbnRfcGFyYW0oY29ubi0+Y29ubmVj dF90aW1lb3V0LCAmdGltZW91dCwgY29ubiwKKwkJCQkJCQkJImNvbm5lY3RfdGltZW91dCIpKQog CQl7CiAJCQkvKiBtYXJrIHRoZSBjb25uZWN0aW9uIGFzIGJhZCB0byByZXBvcnQgdGhlIHBhcnNp bmcgZmFpbHVyZSAqLwogCQkJY29ubi0+c3RhdHVzID0gQ09OTkVDVElPTl9CQUQ7CkBAIC0yNjY2 LDcgKzI2NjQsNyBAQCBrZWVwX2dvaW5nOgkJCQkJCS8qIFdlIHdpbGwgY29tZSBiYWNrIHRvIGhl cmUgdW50aWwgdGhlcmUgaXMKIAkJCXRoaXNwb3J0ID0gREVGX1BHUE9SVDsKIAkJZWxzZQogCQl7 Ci0JCQlpZiAoIXBhcnNlX2ludF9wYXJhbShjaC0+cG9ydCwgJnRoaXNwb3J0LCBjb25uLCAicG9y dCIpKQorCQkJaWYgKCFwcV9wYXJzZV9pbnRfcGFyYW0oY2gtPnBvcnQsICZ0aGlzcG9ydCwgY29u biwgInBvcnQiKSkKIAkJCQlnb3RvIGVycm9yX3JldHVybjsKIAogCQkJaWYgKHRoaXNwb3J0IDwg MSB8fCB0aGlzcG9ydCA+IDY1NTM1KQpAQCAtNDY5NCwzNzMgKzQ2OTIsNiBAQCBQUXJlc2V0UG9s bChQR2Nvbm4gKmNvbm4pCiAJcmV0dXJuIFBHUkVTX1BPTExJTkdfRkFJTEVEOwogfQogCi0vKgot ICogUFFnZXRDYW5jZWw6IGdldCBhIFBHY2FuY2VsIHN0cnVjdHVyZSBjb3JyZXNwb25kaW5nIHRv IGEgY29ubmVjdGlvbi4KLSAqCi0gKiBBIGNvcHkgaXMgbmVlZGVkIHRvIGJlIGFibGUgdG8gY2Fu Y2VsIGEgcnVubmluZyBxdWVyeSBmcm9tIGEgZGlmZmVyZW50Ci0gKiB0aHJlYWQuIElmIHRoZSBz YW1lIHN0cnVjdHVyZSBpcyB1c2VkIGFsbCBzdHJ1Y3R1cmUgbWVtYmVycyB3b3VsZCBoYXZlCi0g KiB0byBiZSBpbmRpdmlkdWFsbHkgbG9ja2VkIChpZiB0aGUgZW50aXJlIHN0cnVjdHVyZSB3YXMg bG9ja2VkLCBpdCB3b3VsZAotICogYmUgaW1wb3NzaWJsZSB0byBjYW5jZWwgYSBzeW5jaHJvbm91 cyBxdWVyeSBiZWNhdXNlIHRoZSBzdHJ1Y3R1cmUgd291bGQKLSAqIGhhdmUgdG8gc3RheSBsb2Nr ZWQgZm9yIHRoZSBkdXJhdGlvbiBvZiB0aGUgcXVlcnkpLgotICovCi1QR2NhbmNlbCAqCi1QUWdl dENhbmNlbChQR2Nvbm4gKmNvbm4pCi17Ci0JUEdjYW5jZWwgICAqY2FuY2VsOwotCi0JaWYgKCFj b25uKQotCQlyZXR1cm4gTlVMTDsKLQotCWlmIChjb25uLT5zb2NrID09IFBHSU5WQUxJRF9TT0NL RVQpCi0JCXJldHVybiBOVUxMOwotCi0JY2FuY2VsID0gbWFsbG9jKHNpemVvZihQR2NhbmNlbCkp OwotCWlmIChjYW5jZWwgPT0gTlVMTCkKLQkJcmV0dXJuIE5VTEw7Ci0KLQltZW1jcHkoJmNhbmNl bC0+cmFkZHIsICZjb25uLT5yYWRkciwgc2l6ZW9mKFNvY2tBZGRyKSk7Ci0JY2FuY2VsLT5iZV9w aWQgPSBjb25uLT5iZV9waWQ7Ci0JY2FuY2VsLT5iZV9rZXkgPSBjb25uLT5iZV9rZXk7Ci0JLyog V2UgdXNlIC0xIHRvIGluZGljYXRlIGFuIHVuc2V0IGNvbm5lY3Rpb24gb3B0aW9uICovCi0JY2Fu Y2VsLT5wZ3RjcF91c2VyX3RpbWVvdXQgPSAtMTsKLQljYW5jZWwtPmtlZXBhbGl2ZXMgPSAtMTsK LQljYW5jZWwtPmtlZXBhbGl2ZXNfaWRsZSA9IC0xOwotCWNhbmNlbC0+a2VlcGFsaXZlc19pbnRl cnZhbCA9IC0xOwotCWNhbmNlbC0+a2VlcGFsaXZlc19jb3VudCA9IC0xOwotCWlmIChjb25uLT5w Z3RjcF91c2VyX3RpbWVvdXQgIT0gTlVMTCkKLQl7Ci0JCWlmICghcGFyc2VfaW50X3BhcmFtKGNv bm4tPnBndGNwX3VzZXJfdGltZW91dCwKLQkJCQkJCQkgJmNhbmNlbC0+cGd0Y3BfdXNlcl90aW1l b3V0LAotCQkJCQkJCSBjb25uLCAidGNwX3VzZXJfdGltZW91dCIpKQotCQkJZ290byBmYWlsOwot CX0KLQlpZiAoY29ubi0+a2VlcGFsaXZlcyAhPSBOVUxMKQotCXsKLQkJaWYgKCFwYXJzZV9pbnRf cGFyYW0oY29ubi0+a2VlcGFsaXZlcywKLQkJCQkJCQkgJmNhbmNlbC0+a2VlcGFsaXZlcywKLQkJ CQkJCQkgY29ubiwgImtlZXBhbGl2ZXMiKSkKLQkJCWdvdG8gZmFpbDsKLQl9Ci0JaWYgKGNvbm4t PmtlZXBhbGl2ZXNfaWRsZSAhPSBOVUxMKQotCXsKLQkJaWYgKCFwYXJzZV9pbnRfcGFyYW0oY29u bi0+a2VlcGFsaXZlc19pZGxlLAotCQkJCQkJCSAmY2FuY2VsLT5rZWVwYWxpdmVzX2lkbGUsCi0J CQkJCQkJIGNvbm4sICJrZWVwYWxpdmVzX2lkbGUiKSkKLQkJCWdvdG8gZmFpbDsKLQl9Ci0JaWYg KGNvbm4tPmtlZXBhbGl2ZXNfaW50ZXJ2YWwgIT0gTlVMTCkKLQl7Ci0JCWlmICghcGFyc2VfaW50 X3BhcmFtKGNvbm4tPmtlZXBhbGl2ZXNfaW50ZXJ2YWwsCi0JCQkJCQkJICZjYW5jZWwtPmtlZXBh bGl2ZXNfaW50ZXJ2YWwsCi0JCQkJCQkJIGNvbm4sICJrZWVwYWxpdmVzX2ludGVydmFsIikpCi0J CQlnb3RvIGZhaWw7Ci0JfQotCWlmIChjb25uLT5rZWVwYWxpdmVzX2NvdW50ICE9IE5VTEwpCi0J ewotCQlpZiAoIXBhcnNlX2ludF9wYXJhbShjb25uLT5rZWVwYWxpdmVzX2NvdW50LAotCQkJCQkJ CSAmY2FuY2VsLT5rZWVwYWxpdmVzX2NvdW50LAotCQkJCQkJCSBjb25uLCAia2VlcGFsaXZlc19j b3VudCIpKQotCQkJZ290byBmYWlsOwotCX0KLQotCXJldHVybiBjYW5jZWw7Ci0KLWZhaWw6Ci0J ZnJlZShjYW5jZWwpOwotCXJldHVybiBOVUxMOwotfQotCi0vKiBQUWZyZWVDYW5jZWw6IGZyZWUg YSBjYW5jZWwgc3RydWN0dXJlICovCi12b2lkCi1QUWZyZWVDYW5jZWwoUEdjYW5jZWwgKmNhbmNl bCkKLXsKLQlmcmVlKGNhbmNlbCk7Ci19Ci0KLQotLyoKLSAqIFNldHMgYW4gaW50ZWdlciBzb2Nr ZXQgb3B0aW9uIG9uIGEgVENQIHNvY2tldCwgaWYgdGhlIHByb3ZpZGVkIHZhbHVlIGlzCi0gKiBu b3QgbmVnYXRpdmUuICBSZXR1cm5zIGZhbHNlIGlmIHNldHNvY2tvcHQgZmFpbHMgZm9yIHNvbWUg cmVhc29uLgotICoKLSAqIENBVVRJT046IFRoaXMgbmVlZHMgdG8gYmUgc2lnbmFsIHNhZmUsIHNp bmNlIGl0J3MgdXNlZCBieSBQUWNhbmNlbC4KLSAqLwotI2lmIGRlZmluZWQoVENQX1VTRVJfVElN RU9VVCkgfHwgIWRlZmluZWQoV0lOMzIpCi1zdGF0aWMgYm9vbAotb3B0aW9uYWxfc2V0c29ja29w dChpbnQgZmQsIGludCBwcm90b2lkLCBpbnQgb3B0aWQsIGludCB2YWx1ZSkKLXsKLQlpZiAodmFs dWUgPCAwKQotCQlyZXR1cm4gdHJ1ZTsKLQlpZiAoc2V0c29ja29wdChmZCwgcHJvdG9pZCwgb3B0 aWQsIChjaGFyICopICZ2YWx1ZSwgc2l6ZW9mKHZhbHVlKSkgPCAwKQotCQlyZXR1cm4gZmFsc2U7 Ci0JcmV0dXJuIHRydWU7Ci19Ci0jZW5kaWYKLQotCi0vKgotICogUFFjYW5jZWw6IHJlcXVlc3Qg cXVlcnkgY2FuY2VsCi0gKgotICogVGhlIHJldHVybiB2YWx1ZSBpcyB0cnVlIGlmIHRoZSBjYW5j ZWwgcmVxdWVzdCB3YXMgc3VjY2Vzc2Z1bGx5Ci0gKiBkaXNwYXRjaGVkLCBmYWxzZSBpZiBub3Qg KGluIHdoaWNoIGNhc2UgYW4gZXJyb3IgbWVzc2FnZSBpcyBhdmFpbGFibGUpLgotICogTm90ZTog c3VjY2Vzc2Z1bCBkaXNwYXRjaCBpcyBubyBndWFyYW50ZWUgdGhhdCB0aGVyZSB3aWxsIGJlIGFu eSBlZmZlY3QgYXQKLSAqIHRoZSBiYWNrZW5kLiAgVGhlIGFwcGxpY2F0aW9uIG11c3QgcmVhZCB0 aGUgb3BlcmF0aW9uIHJlc3VsdCBhcyB1c3VhbC4KLSAqCi0gKiBPbiBmYWlsdXJlLCBhbiBlcnJv ciBtZXNzYWdlIGlzIHN0b3JlZCBpbiAqZXJyYnVmLCB3aGljaCBtdXN0IGJlIG9mIHNpemUKLSAq IGVycmJ1ZnNpemUgKHJlY29tbWVuZGVkIHNpemUgaXMgMjU2IGJ5dGVzKS4gICplcnJidWYgaXMg bm90IGNoYW5nZWQgb24KLSAqIHN1Y2Nlc3MgcmV0dXJuLgotICoKLSAqIENBVVRJT046IHdlIHdh bnQgdGhpcyByb3V0aW5lIHRvIGJlIHNhZmVseSBjYWxsYWJsZSBmcm9tIGEgc2lnbmFsIGhhbmRs ZXIKLSAqIChmb3IgZXhhbXBsZSwgYW4gYXBwbGljYXRpb24gbWlnaHQgd2FudCB0byBjYWxsIGl0 IGluIGEgU0lHSU5UIGhhbmRsZXIpLgotICogVGhpcyBtZWFucyB3ZSBjYW5ub3QgdXNlIGFueSBD IGxpYnJhcnkgcm91dGluZSB0aGF0IG1pZ2h0IGJlIG5vbi1yZWVudHJhbnQuCi0gKiBtYWxsb2Mv ZnJlZSBhcmUgb2Z0ZW4gbm9uLXJlZW50cmFudCwgYW5kIGFueXRoaW5nIHRoYXQgbWlnaHQgY2Fs bCB0aGVtIGlzCi0gKiBqdXN0IGFzIGRhbmdlcm91cy4gIFdlIGF2b2lkIHNwcmludGYgaGVyZSBm b3IgdGhhdCByZWFzb24uICBCdWlsZGluZyB1cAotICogZXJyb3IgbWVzc2FnZXMgd2l0aCBzdHJj cHkvc3RyY2F0IGlzIHRlZGlvdXMgYnV0IHNob3VsZCBiZSBxdWl0ZSBzYWZlLgotICogV2UgYWxz byBzYXZlL3Jlc3RvcmUgZXJybm8gaW4gY2FzZSB0aGUgc2lnbmFsIGhhbmRsZXIgc3VwcG9ydCBk b2Vzbid0LgotICovCi1pbnQKLVBRY2FuY2VsKFBHY2FuY2VsICpjYW5jZWwsIGNoYXIgKmVycmJ1 ZiwgaW50IGVycmJ1ZnNpemUpCi17Ci0JaW50CQkJc2F2ZV9lcnJubyA9IFNPQ0tfRVJSTk87Ci0J cGdzb2NrZXQJdG1wc29jayA9IFBHSU5WQUxJRF9TT0NLRVQ7Ci0JaW50CQkJbWF4bGVuOwotCXN0 cnVjdAotCXsKLQkJdWludDMyCQlwYWNrZXRsZW47Ci0JCUNhbmNlbFJlcXVlc3RQYWNrZXQgY3A7 Ci0JfQkJCWNycDsKLQotCWlmICghY2FuY2VsKQotCXsKLQkJc3RybGNweShlcnJidWYsICJQUWNh bmNlbCgpIC0tIG5vIGNhbmNlbCBvYmplY3Qgc3VwcGxpZWQiLCBlcnJidWZzaXplKTsKLQkJLyog c3RybGNweSBwcm9iYWJseSBkb2Vzbid0IGNoYW5nZSBlcnJubywgYnV0IGJlIHBhcmFub2lkICov Ci0JCVNPQ0tfRVJSTk9fU0VUKHNhdmVfZXJybm8pOwotCQlyZXR1cm4gZmFsc2U7Ci0JfQotCi0J LyoKLQkgKiBXZSBuZWVkIHRvIG9wZW4gYSB0ZW1wb3JhcnkgY29ubmVjdGlvbiB0byB0aGUgcG9z dG1hc3Rlci4gRG8gdGhpcyB3aXRoCi0JICogb25seSBrZXJuZWwgY2FsbHMuCi0JICovCi0JaWYg KCh0bXBzb2NrID0gc29ja2V0KGNhbmNlbC0+cmFkZHIuYWRkci5zc19mYW1pbHksIFNPQ0tfU1RS RUFNLCAwKSkgPT0gUEdJTlZBTElEX1NPQ0tFVCkKLQl7Ci0JCXN0cmxjcHkoZXJyYnVmLCAiUFFj YW5jZWwoKSAtLSBzb2NrZXQoKSBmYWlsZWQ6ICIsIGVycmJ1ZnNpemUpOwotCQlnb3RvIGNhbmNl bF9lcnJSZXR1cm47Ci0JfQotCi0JLyoKLQkgKiBTaW5jZSB0aGlzIGNvbm5lY3Rpb24gd2lsbCBv bmx5IGJlIHVzZWQgdG8gc2VuZCBhIHNpbmdsZSBwYWNrZXQgb2YKLQkgKiBkYXRhLCB3ZSBkb24n dCBuZWVkIE5PREVMQVkuICBXZSBhbHNvIGRvbid0IHNldCB0aGUgc29ja2V0IHRvCi0JICogbm9u YmxvY2tpbmcgbW9kZSwgYmVjYXVzZSB0aGUgQVBJIGRlZmluaXRpb24gb2YgUFFjYW5jZWwgcmVx dWlyZXMgdGhlCi0JICogY2FuY2VsIHRvIGJlIHNlbnQgaW4gYSBibG9ja2luZyB3YXkuCi0JICoK LQkgKiBXZSBkbyBzZXQgc29ja2V0IG9wdGlvbnMgcmVsYXRlZCB0byBrZWVwYWxpdmVzIGFuZCBv dGhlciBUQ1AgdGltZW91dHMuCi0JICogVGhpcyBlbnN1cmVzIHRoYXQgdGhpcyBmdW5jdGlvbiBk b2VzIG5vdCBibG9jayBpbmRlZmluaXRlbHkgd2hlbgotCSAqIHJlYXNvbmFibGUga2VlcGFsaXZl IGFuZCB0aW1lb3V0IHNldHRpbmdzIGhhdmUgYmVlbiBwcm92aWRlZC4KLQkgKi8KLQlpZiAoY2Fu Y2VsLT5yYWRkci5hZGRyLnNzX2ZhbWlseSAhPSBBRl9VTklYICYmCi0JCWNhbmNlbC0+a2VlcGFs aXZlcyAhPSAwKQotCXsKLSNpZm5kZWYgV0lOMzIKLQkJaWYgKCFvcHRpb25hbF9zZXRzb2Nrb3B0 KHRtcHNvY2ssIFNPTF9TT0NLRVQsIFNPX0tFRVBBTElWRSwgMSkpCi0JCXsKLQkJCXN0cmxjcHko ZXJyYnVmLCAiUFFjYW5jZWwoKSAtLSBzZXRzb2Nrb3B0KFNPX0tFRVBBTElWRSkgZmFpbGVkOiAi LCBlcnJidWZzaXplKTsKLQkJCWdvdG8gY2FuY2VsX2VyclJldHVybjsKLQkJfQotCi0jaWZkZWYg UEdfVENQX0tFRVBBTElWRV9JRExFCi0JCWlmICghb3B0aW9uYWxfc2V0c29ja29wdCh0bXBzb2Nr LCBJUFBST1RPX1RDUCwgUEdfVENQX0tFRVBBTElWRV9JRExFLAotCQkJCQkJCQkgY2FuY2VsLT5r ZWVwYWxpdmVzX2lkbGUpKQotCQl7Ci0JCQlzdHJsY3B5KGVycmJ1ZiwgIlBRY2FuY2VsKCkgLS0g c2V0c29ja29wdCgiIFBHX1RDUF9LRUVQQUxJVkVfSURMRV9TVFIgIikgZmFpbGVkOiAiLCBlcnJi dWZzaXplKTsKLQkJCWdvdG8gY2FuY2VsX2VyclJldHVybjsKLQkJfQotI2VuZGlmCi0KLSNpZmRl ZiBUQ1BfS0VFUElOVFZMCi0JCWlmICghb3B0aW9uYWxfc2V0c29ja29wdCh0bXBzb2NrLCBJUFBS T1RPX1RDUCwgVENQX0tFRVBJTlRWTCwKLQkJCQkJCQkJIGNhbmNlbC0+a2VlcGFsaXZlc19pbnRl cnZhbCkpCi0JCXsKLQkJCXN0cmxjcHkoZXJyYnVmLCAiUFFjYW5jZWwoKSAtLSBzZXRzb2Nrb3B0 KFRDUF9LRUVQSU5UVkwpIGZhaWxlZDogIiwgZXJyYnVmc2l6ZSk7Ci0JCQlnb3RvIGNhbmNlbF9l cnJSZXR1cm47Ci0JCX0KLSNlbmRpZgotCi0jaWZkZWYgVENQX0tFRVBDTlQKLQkJaWYgKCFvcHRp b25hbF9zZXRzb2Nrb3B0KHRtcHNvY2ssIElQUFJPVE9fVENQLCBUQ1BfS0VFUENOVCwKLQkJCQkJ CQkJIGNhbmNlbC0+a2VlcGFsaXZlc19jb3VudCkpCi0JCXsKLQkJCXN0cmxjcHkoZXJyYnVmLCAi UFFjYW5jZWwoKSAtLSBzZXRzb2Nrb3B0KFRDUF9LRUVQQ05UKSBmYWlsZWQ6ICIsIGVycmJ1ZnNp emUpOwotCQkJZ290byBjYW5jZWxfZXJyUmV0dXJuOwotCQl9Ci0jZW5kaWYKLQotI2Vsc2UJCQkJ CQkJLyogV0lOMzIgKi8KLQotI2lmZGVmIFNJT19LRUVQQUxJVkVfVkFMUwotCQlpZiAoIXNldEtl ZXBhbGl2ZXNXaW4zMih0bXBzb2NrLAotCQkJCQkJCQljYW5jZWwtPmtlZXBhbGl2ZXNfaWRsZSwK LQkJCQkJCQkJY2FuY2VsLT5rZWVwYWxpdmVzX2ludGVydmFsKSkKLQkJewotCQkJc3RybGNweShl cnJidWYsICJQUWNhbmNlbCgpIC0tIFdTQUlvY3RsKFNJT19LRUVQQUxJVkVfVkFMUykgZmFpbGVk OiAiLCBlcnJidWZzaXplKTsKLQkJCWdvdG8gY2FuY2VsX2VyclJldHVybjsKLQkJfQotI2VuZGlm CQkJCQkJCS8qIFNJT19LRUVQQUxJVkVfVkFMUyAqLwotI2VuZGlmCQkJCQkJCS8qIFdJTjMyICov Ci0KLQkJLyogVENQX1VTRVJfVElNRU9VVCB3b3JrcyB0aGUgc2FtZSB3YXkgb24gVW5peCBhbmQg V2luZG93cyAqLwotI2lmZGVmIFRDUF9VU0VSX1RJTUVPVVQKLQkJaWYgKCFvcHRpb25hbF9zZXRz b2Nrb3B0KHRtcHNvY2ssIElQUFJPVE9fVENQLCBUQ1BfVVNFUl9USU1FT1VULAotCQkJCQkJCQkg Y2FuY2VsLT5wZ3RjcF91c2VyX3RpbWVvdXQpKQotCQl7Ci0JCQlzdHJsY3B5KGVycmJ1ZiwgIlBR Y2FuY2VsKCkgLS0gc2V0c29ja29wdChUQ1BfVVNFUl9USU1FT1VUKSBmYWlsZWQ6ICIsIGVycmJ1 ZnNpemUpOwotCQkJZ290byBjYW5jZWxfZXJyUmV0dXJuOwotCQl9Ci0jZW5kaWYKLQl9Ci0KLXJl dHJ5MzoKLQlpZiAoY29ubmVjdCh0bXBzb2NrLCAoc3RydWN0IHNvY2thZGRyICopICZjYW5jZWwt PnJhZGRyLmFkZHIsCi0JCQkJY2FuY2VsLT5yYWRkci5zYWxlbikgPCAwKQotCXsKLQkJaWYgKFNP Q0tfRVJSTk8gPT0gRUlOVFIpCi0JCQkvKiBJbnRlcnJ1cHRlZCBzeXN0ZW0gY2FsbCAtIHdlJ2xs IGp1c3QgdHJ5IGFnYWluICovCi0JCQlnb3RvIHJldHJ5MzsKLQkJc3RybGNweShlcnJidWYsICJQ UWNhbmNlbCgpIC0tIGNvbm5lY3QoKSBmYWlsZWQ6ICIsIGVycmJ1ZnNpemUpOwotCQlnb3RvIGNh bmNlbF9lcnJSZXR1cm47Ci0JfQotCi0JLyogQ3JlYXRlIGFuZCBzZW5kIHRoZSBjYW5jZWwgcmVx dWVzdCBwYWNrZXQuICovCi0KLQljcnAucGFja2V0bGVuID0gcGdfaHRvbjMyKCh1aW50MzIpIHNp emVvZihjcnApKTsKLQljcnAuY3AuY2FuY2VsUmVxdWVzdENvZGUgPSAoTXNnVHlwZSkgcGdfaHRv bjMyKENBTkNFTF9SRVFVRVNUX0NPREUpOwotCWNycC5jcC5iYWNrZW5kUElEID0gcGdfaHRvbjMy KGNhbmNlbC0+YmVfcGlkKTsKLQljcnAuY3AuY2FuY2VsQXV0aENvZGUgPSBwZ19odG9uMzIoY2Fu Y2VsLT5iZV9rZXkpOwotCi1yZXRyeTQ6Ci0JaWYgKHNlbmQodG1wc29jaywgKGNoYXIgKikgJmNy cCwgc2l6ZW9mKGNycCksIDApICE9IChpbnQpIHNpemVvZihjcnApKQotCXsKLQkJaWYgKFNPQ0tf RVJSTk8gPT0gRUlOVFIpCi0JCQkvKiBJbnRlcnJ1cHRlZCBzeXN0ZW0gY2FsbCAtIHdlJ2xsIGp1 c3QgdHJ5IGFnYWluICovCi0JCQlnb3RvIHJldHJ5NDsKLQkJc3RybGNweShlcnJidWYsICJQUWNh bmNlbCgpIC0tIHNlbmQoKSBmYWlsZWQ6ICIsIGVycmJ1ZnNpemUpOwotCQlnb3RvIGNhbmNlbF9l cnJSZXR1cm47Ci0JfQotCi0JLyoKLQkgKiBXYWl0IGZvciB0aGUgcG9zdG1hc3RlciB0byBjbG9z ZSB0aGUgY29ubmVjdGlvbiwgd2hpY2ggaW5kaWNhdGVzIHRoYXQKLQkgKiBpdCdzIHByb2Nlc3Nl ZCB0aGUgcmVxdWVzdC4gIFdpdGhvdXQgdGhpcyBkZWxheSwgd2UgbWlnaHQgaXNzdWUgYW5vdGhl cgotCSAqIGNvbW1hbmQgb25seSB0byBmaW5kIHRoYXQgb3VyIGNhbmNlbCB6YXBzIHRoYXQgY29t bWFuZCBpbnN0ZWFkIG9mIHRoZQotCSAqIG9uZSB3ZSB0aG91Z2h0IHdlIHdlcmUgY2FuY2VsaW5n LiAgTm90ZSB3ZSBkb24ndCBhY3R1YWxseSBleHBlY3QgdGhpcwotCSAqIHJlYWQgdG8gb2J0YWlu IGFueSBkYXRhLCB3ZSBhcmUganVzdCB3YWl0aW5nIGZvciBFT0YgdG8gYmUgc2lnbmFsZWQuCi0J ICovCi1yZXRyeTU6Ci0JaWYgKHJlY3YodG1wc29jaywgKGNoYXIgKikgJmNycCwgMSwgMCkgPCAw KQotCXsKLQkJaWYgKFNPQ0tfRVJSTk8gPT0gRUlOVFIpCi0JCQkvKiBJbnRlcnJ1cHRlZCBzeXN0 ZW0gY2FsbCAtIHdlJ2xsIGp1c3QgdHJ5IGFnYWluICovCi0JCQlnb3RvIHJldHJ5NTsKLQkJLyog d2UgaWdub3JlIG90aGVyIGVycm9yIGNvbmRpdGlvbnMgKi8KLQl9Ci0KLQkvKiBBbGwgZG9uZSAq LwotCWNsb3Nlc29ja2V0KHRtcHNvY2spOwotCVNPQ0tfRVJSTk9fU0VUKHNhdmVfZXJybm8pOwot CXJldHVybiB0cnVlOwotCi1jYW5jZWxfZXJyUmV0dXJuOgotCi0JLyoKLQkgKiBNYWtlIHN1cmUg d2UgZG9uJ3Qgb3ZlcmZsb3cgdGhlIGVycm9yIGJ1ZmZlci4gTGVhdmUgc3BhY2UgZm9yIHRoZSBc biBhdAotCSAqIHRoZSBlbmQsIGFuZCBmb3IgdGhlIHRlcm1pbmF0aW5nIHplcm8uCi0JICovCi0J bWF4bGVuID0gZXJyYnVmc2l6ZSAtIHN0cmxlbihlcnJidWYpIC0gMjsKLQlpZiAobWF4bGVuID49 IDApCi0JewotCQkvKgotCQkgKiBXZSBjYW4ndCBpbnZva2Ugc3RyZXJyb3IgaGVyZSwgc2luY2Ug aXQncyBub3Qgc2lnbmFsLXNhZmUuICBTZXR0bGUKLQkJICogZm9yIHByaW50aW5nIHRoZSBkZWNp bWFsIHZhbHVlIG9mIGVycm5vLiAgRXZlbiB0aGF0IGhhcyB0byBiZSBkb25lCi0JCSAqIHRoZSBo YXJkIHdheS4KLQkJICovCi0JCWludAkJCXZhbCA9IFNPQ0tfRVJSTk87Ci0JCWNoYXIJCWJ1Zlsz Ml07Ci0JCWNoYXIJICAgKmJ1ZnA7Ci0KLQkJYnVmcCA9IGJ1ZiArIHNpemVvZihidWYpIC0gMTsK LQkJKmJ1ZnAgPSAnXDAnOwotCQlkbwotCQl7Ci0JCQkqKC0tYnVmcCkgPSAodmFsICUgMTApICsg JzAnOwotCQkJdmFsIC89IDEwOwotCQl9IHdoaWxlICh2YWwgPiAwKTsKLQkJYnVmcCAtPSA2Owot CQltZW1jcHkoYnVmcCwgImVycm9yICIsIDYpOwotCQlzdHJuY2F0KGVycmJ1ZiwgYnVmcCwgbWF4 bGVuKTsKLQkJc3RyY2F0KGVycmJ1ZiwgIlxuIik7Ci0JfQotCWlmICh0bXBzb2NrICE9IFBHSU5W QUxJRF9TT0NLRVQpCi0JCWNsb3Nlc29ja2V0KHRtcHNvY2spOwotCVNPQ0tfRVJSTk9fU0VUKHNh dmVfZXJybm8pOwotCXJldHVybiBmYWxzZTsKLX0KLQotCi0vKgotICogUFFyZXF1ZXN0Q2FuY2Vs OiBvbGQsIG5vdCB0aHJlYWQtc2FmZSBmdW5jdGlvbiBmb3IgcmVxdWVzdGluZyBxdWVyeSBjYW5j ZWwKLSAqCi0gKiBSZXR1cm5zIHRydWUgaWYgYWJsZSB0byBzZW5kIHRoZSBjYW5jZWwgcmVxdWVz dCwgZmFsc2UgaWYgbm90LgotICoKLSAqIE9uIGZhaWx1cmUsIHRoZSBlcnJvciBtZXNzYWdlIGlz IHNhdmVkIGluIGNvbm4tPmVycm9yTWVzc2FnZTsgdGhpcyBtZWFucwotICogdGhhdCB0aGlzIGNh bid0IGJlIHVzZWQgd2hlbiB0aGVyZSBtaWdodCBiZSBvdGhlciBhY3RpdmUgb3BlcmF0aW9ucyBv bgotICogdGhlIGNvbm5lY3Rpb24gb2JqZWN0LgotICoKLSAqIE5PVEU6IGVycm9yIG1lc3NhZ2Vz IHdpbGwgYmUgY3V0IG9mZiBhdCB0aGUgY3VycmVudCBzaXplIG9mIHRoZQotICogZXJyb3IgbWVz c2FnZSBidWZmZXIsIHNpbmNlIHdlIGRhcmUgbm90IHRyeSB0byBleHBhbmQgY29ubi0+ZXJyb3JN ZXNzYWdlIQotICovCi1pbnQKLVBRcmVxdWVzdENhbmNlbChQR2Nvbm4gKmNvbm4pCi17Ci0JaW50 CQkJcjsKLQlQR2NhbmNlbCAgICpjYW5jZWw7Ci0KLQkvKiBDaGVjayB3ZSBoYXZlIGFuIG9wZW4g Y29ubmVjdGlvbiAqLwotCWlmICghY29ubikKLQkJcmV0dXJuIGZhbHNlOwotCi0JaWYgKGNvbm4t PnNvY2sgPT0gUEdJTlZBTElEX1NPQ0tFVCkKLQl7Ci0JCXN0cmxjcHkoY29ubi0+ZXJyb3JNZXNz YWdlLmRhdGEsCi0JCQkJIlBRcmVxdWVzdENhbmNlbCgpIC0tIGNvbm5lY3Rpb24gaXMgbm90IG9w ZW5cbiIsCi0JCQkJY29ubi0+ZXJyb3JNZXNzYWdlLm1heGxlbik7Ci0JCWNvbm4tPmVycm9yTWVz c2FnZS5sZW4gPSBzdHJsZW4oY29ubi0+ZXJyb3JNZXNzYWdlLmRhdGEpOwotCQljb25uLT5lcnJv clJlcG9ydGVkID0gMDsKLQotCQlyZXR1cm4gZmFsc2U7Ci0JfQotCi0JY2FuY2VsID0gUFFnZXRD YW5jZWwoY29ubik7Ci0JaWYgKGNhbmNlbCkKLQl7Ci0JCXIgPSBQUWNhbmNlbChjYW5jZWwsIGNv bm4tPmVycm9yTWVzc2FnZS5kYXRhLAotCQkJCQkgY29ubi0+ZXJyb3JNZXNzYWdlLm1heGxlbik7 Ci0JCVBRZnJlZUNhbmNlbChjYW5jZWwpOwotCX0KLQllbHNlCi0JewotCQlzdHJsY3B5KGNvbm4t PmVycm9yTWVzc2FnZS5kYXRhLCAib3V0IG9mIG1lbW9yeSIsCi0JCQkJY29ubi0+ZXJyb3JNZXNz YWdlLm1heGxlbik7Ci0JCXIgPSBmYWxzZTsKLQl9Ci0KLQlpZiAoIXIpCi0JewotCQljb25uLT5l cnJvck1lc3NhZ2UubGVuID0gc3RybGVuKGNvbm4tPmVycm9yTWVzc2FnZS5kYXRhKTsKLQkJY29u bi0+ZXJyb3JSZXBvcnRlZCA9IDA7Ci0JfQotCi0JcmV0dXJuIHI7Ci19Ci0KLQogLyoKICAqIHBx UGFja2V0U2VuZCgpIC0tIGNvbnZlbmllbmNlIHJvdXRpbmUgdG8gc2VuZCBhIG1lc3NhZ2UgdG8g c2VydmVyLgogICoKZGlmZiAtLWdpdCBhL3NyYy9pbnRlcmZhY2VzL2xpYnBxL2xpYnBxLWludC5o IGIvc3JjL2ludGVyZmFjZXMvbGlicHEvbGlicHEtaW50LmgKaW5kZXggZjAxNDM3MjZiYmMuLjY2 Yjc3ZTc1ZTE4IDEwMDY0NAotLS0gYS9zcmMvaW50ZXJmYWNlcy9saWJwcS9saWJwcS1pbnQuaAor KysgYi9zcmMvaW50ZXJmYWNlcy9saWJwcS9saWJwcS1pbnQuaApAQCAtNjc4LDYgKzY3OCw4IEBA IGV4dGVybiB2b2lkIHBxRHJvcENvbm5lY3Rpb24oUEdjb25uICpjb25uLCBib29sIGZsdXNoSW5w dXQpOwogZXh0ZXJuIGludAlwcVBhY2tldFNlbmQoUEdjb25uICpjb25uLCBjaGFyIHBhY2tfdHlw ZSwKIAkJCQkJCSBjb25zdCB2b2lkICpidWYsIHNpemVfdCBidWZfbGVuKTsKIGV4dGVybiBib29s IHBxR2V0SG9tZURpcmVjdG9yeShjaGFyICpidWYsIGludCBidWZzaXplKTsKK2V4dGVybiBib29s IHBxX3BhcnNlX2ludF9wYXJhbShjb25zdCBjaGFyICp2YWx1ZSwgaW50ICpyZXN1bHQsIFBHY29u biAqY29ubiwKKwkJCQkJCQkgICBjb25zdCBjaGFyICpjb250ZXh0KTsKIAogZXh0ZXJuIHBndGhy ZWFkbG9ja190IHBnX2dfdGhyZWFkbG9jazsKIApkaWZmIC0tZ2l0IGEvc3JjL2ludGVyZmFjZXMv bGlicHEvbWVzb24uYnVpbGQgYi9zcmMvaW50ZXJmYWNlcy9saWJwcS9tZXNvbi5idWlsZAppbmRl eCBjNzZhMWU0MGM4My4uYTQ3YjZmNDI1ZGQgMTAwNjQ0Ci0tLSBhL3NyYy9pbnRlcmZhY2VzL2xp YnBxL21lc29uLmJ1aWxkCisrKyBiL3NyYy9pbnRlcmZhY2VzL2xpYnBxL21lc29uLmJ1aWxkCkBA IC02LDYgKzYsNyBAQAogbGlicHFfc291cmNlcyA9IGZpbGVzKAogICAnZmUtYXV0aC1zY3JhbS5j JywKICAgJ2ZlLWF1dGguYycsCisgICdmZS1jYW5jZWwuYycsCiAgICdmZS1jb25uZWN0LmMnLAog ICAnZmUtZXhlYy5jJywKICAgJ2ZlLWxvYmouYycsCgpiYXNlLWNvbW1pdDogZjdjZjk0OTRiYWQz YWVmMWIyYmExY2Q4NDM3NmExZTcxNzk3YWM1MAotLSAKMi4zNC4xCgo= --000000000000cc7872060fdc20d9 Content-Type: application/octet-stream; name="v26-0004-Add-non-blocking-version-of-PQcancel.patch" Content-Disposition: attachment; filename="v26-0004-Add-non-blocking-version-of-PQcancel.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_lruvnsb33 RnJvbSA2N2YzMTFjYTQxNjM2MTY2OGE2ODY1ZDJkODkzZjhjNmQwY2I2Y2QwIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBKZWx0ZSBGZW5uZW1hLU5pbyA8amVsdGUuZmVubmVtYUBtaWNy b3NvZnQuY29tPgpEYXRlOiBGcmksIDI2IEphbiAyMDI0IDE3OjAxOjAwICswMTAwClN1YmplY3Q6 IFtQQVRDSCB2MjYgNC81XSBBZGQgbm9uLWJsb2NraW5nIHZlcnNpb24gb2YgUFFjYW5jZWwKClRo aXMgcGF0Y2ggbWFrZXMgdGhlIGZvbGxvd2luZyBjaGFuZ2VzIGluIGxpYnBxOgoxLiBBZGQgYSBu ZXcgUFFjYW5jZWxTZW5kIGZ1bmN0aW9uLCB3aGljaCBzZW5kcyBjYW5jZWxsYXRpb24gcmVxdWVz dHMKICAgdXNpbmcgdGhlIHJlZ3VsYXIgY29ubmVjdGlvbiBlc3RhYmxpc2htZW50IGNvZGUuIFRo aXMgbWFrZXMgc3VyZQogICB0aGF0IGNhbmNlbCByZXF1ZXN0cyBzdXBwb3J0IGFuZCB1c2UgYWxs IGNvbm5lY3Rpb24gb3B0aW9ucwogICBpbmNsdWRpbmcgZW5jcnlwdGlvbi4KMi4gQWRkIGEgbmV3 IFBRY2FuY2VsQ29ubiBmdW5jdGlvbiB3aGljaCBhbGxvd3Mgc2VuZGluZyBjYW5jZWxsYXRpb24g aW4KICAgYSBub24tYmxvY2tpbmcgd2F5IGJ5IHVzaW5nIGl0IHRvZ2V0aGVyIHdpdGggdGhlIG5l d2x5IGFkZGVkCiAgIFBRY2FuY2VsUG9sbCBhbmQgUFFjYW5jZWxTb2NrZXQuCgpUaGUgZXhpc3Rp bmcgUFFjYW5jZWwgQVBJIGlzIHVzaW5nIGJsb2NraW5nIElPLiBUaGlzIG1ha2VzIFBRY2FuY2Vs CmltcG9zc2libGUgdG8gdXNlIGluIGFuIGV2ZW50IGxvb3AgYmFzZWQgY29kZWJhc2UsIHdpdGhv dXQgYmxvY2tpbmcgdGhlCmV2ZW50IGxvb3AgdW50aWwgdGhlIGNhbGwgcmV0dXJucy4gUFFjYW5j ZWxDb25uIGNhbiBub3cgYmUgdXNlZCBpbnN0ZWFkLAp0byBoYXZlIGEgbm9uLWJsb2NraW5nIHdh eSBvZiBzZW5kaW5nIGNhbmNlbCByZXF1ZXN0cy4KClRoaXMgcGF0Y2ggYWxzbyBpbmNsdWRlcyBh IHRlc3QgZm9yIGFsbCBvZiBsaWJwcSBjYW5jZWxsYXRpb24gQVBJcy4gVGhlCnRlc3QgY2FuIGJl IGVhc2lseSBydW4gbGlrZSB0aGlzOgoKICAgIGNkIHNyYy90ZXN0L21vZHVsZXMvbGlicHFfcGlw ZWxpbmUKICAgIG1ha2UgJiYgLi9saWJwcV9waXBlbGluZSBjYW5jZWwKLS0tCiBkb2Mvc3JjL3Nn bWwvbGlicHEuc2dtbCAgICAgICAgICAgICAgICAgICAgICAgfCAyODAgKysrKysrKysrKysrKyst LQogc3JjL2ludGVyZmFjZXMvbGlicHEvZXhwb3J0cy50eHQgICAgICAgICAgICAgIHwgICA4ICsK IHNyYy9pbnRlcmZhY2VzL2xpYnBxL2ZlLWNhbmNlbC5jICAgICAgICAgICAgICB8IDMwNCArKysr KysrKysrKysrKysrKy0KIHNyYy9pbnRlcmZhY2VzL2xpYnBxL2ZlLWNvbm5lY3QuYyAgICAgICAg ICAgICB8IDEzMCArKysrKysrLQogc3JjL2ludGVyZmFjZXMvbGlicHEvbGlicHEtZmUuaCAgICAg ICAgICAgICAgIHwgIDI3ICstCiBzcmMvaW50ZXJmYWNlcy9saWJwcS9saWJwcS1pbnQuaCAgICAg ICAgICAgICAgfCAgMTAgKwogLi4uL21vZHVsZXMvbGlicHFfcGlwZWxpbmUvbGlicHFfcGlwZWxp bmUuYyAgIHwgMjYzICsrKysrKysrKysrKysrLQogNyBmaWxlcyBjaGFuZ2VkLCA5NzQgaW5zZXJ0 aW9ucygrKSwgNDggZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvZG9jL3NyYy9zZ21sL2xpYnBx LnNnbWwgYi9kb2Mvc3JjL3NnbWwvbGlicHEuc2dtbAppbmRleCBkMGQ1YWVmYWRjMC4uOTgwOGU2 Nzg2NTAgMTAwNjQ0Ci0tLSBhL2RvYy9zcmMvc2dtbC9saWJwcS5zZ21sCisrKyBiL2RvYy9zcmMv c2dtbC9saWJwcS5zZ21sCkBAIC0yNjUsNyArMjY1LDcgQEAgUEdjb25uICpQUXNldGRiKGNoYXIg KnBnaG9zdCwKICAgICA8dmFybGlzdGVudHJ5IGlkPSJsaWJwcS1QUWNvbm5lY3RTdGFydFBhcmFt cyI+CiAgICAgIDx0ZXJtPjxmdW5jdGlvbj5QUWNvbm5lY3RTdGFydFBhcmFtczwvZnVuY3Rpb24+ PGluZGV4dGVybT48cHJpbWFyeT5QUWNvbm5lY3RTdGFydFBhcmFtczwvcHJpbWFyeT48L2luZGV4 dGVybT48L3Rlcm0+CiAgICAgIDx0ZXJtPjxmdW5jdGlvbj5QUWNvbm5lY3RTdGFydDwvZnVuY3Rp b24+PGluZGV4dGVybT48cHJpbWFyeT5QUWNvbm5lY3RTdGFydDwvcHJpbWFyeT48L2luZGV4dGVy bT48L3Rlcm0+Ci0gICAgIDx0ZXJtPjxmdW5jdGlvbj5QUWNvbm5lY3RQb2xsPC9mdW5jdGlvbj48 aW5kZXh0ZXJtPjxwcmltYXJ5PlBRY29ubmVjdFBvbGw8L3ByaW1hcnk+PC9pbmRleHRlcm0+PC90 ZXJtPgorICAgICA8dGVybSBpZD0ibGlicHEtUFFjb25uZWN0UG9sbCI+PGZ1bmN0aW9uPlBRY29u bmVjdFBvbGw8L2Z1bmN0aW9uPjxpbmRleHRlcm0+PHByaW1hcnk+UFFjb25uZWN0UG9sbDwvcHJp bWFyeT48L2luZGV4dGVybT48L3Rlcm0+CiAgICAgIDxsaXN0aXRlbT4KICAgICAgIDxwYXJhPgog ICAgICAgIDxpbmRleHRlcm0+PHByaW1hcnk+bm9uYmxvY2tpbmcgY29ubmVjdGlvbjwvcHJpbWFy eT48L2luZGV4dGVybT4KQEAgLTUyODEsNyArNTI4MSw3IEBAIGludCBQUWlzQnVzeShQR2Nvbm4g KmNvbm4pOwogICAgPHhyZWYgbGlua2VuZD0ibGlicHEtUFFzZW5kUXVlcnkiLz4vPHhyZWYgbGlu a2VuZD0ibGlicHEtUFFnZXRSZXN1bHQiLz4KICAgIGNhbiBhbHNvIGF0dGVtcHQgdG8gY2FuY2Vs IGEgY29tbWFuZCB0aGF0IGlzIHN0aWxsIGJlaW5nIHByb2Nlc3NlZAogICAgYnkgdGhlIHNlcnZl cjsgc2VlIDx4cmVmIGxpbmtlbmQ9ImxpYnBxLWNhbmNlbCIvPi4gIEJ1dCByZWdhcmRsZXNzIG9m Ci0gICB0aGUgcmV0dXJuIHZhbHVlIG9mIDx4cmVmIGxpbmtlbmQ9ImxpYnBxLVBRY2FuY2VsIi8+ LCB0aGUgYXBwbGljYXRpb24KKyAgIHRoZSByZXR1cm4gdmFsdWUgb2YgPHhyZWYgbGlua2VuZD0i bGlicHEtUFFjYW5jZWxTZW5kIi8+LCB0aGUgYXBwbGljYXRpb24KICAgIG11c3QgY29udGludWUg d2l0aCB0aGUgbm9ybWFsIHJlc3VsdC1yZWFkaW5nIHNlcXVlbmNlIHVzaW5nCiAgICA8eHJlZiBs aW5rZW5kPSJsaWJwcS1QUWdldFJlc3VsdCIvPi4gIEEgc3VjY2Vzc2Z1bCBjYW5jZWxsYXRpb24g d2lsbAogICAgc2ltcGx5IGNhdXNlIHRoZSBjb21tYW5kIHRvIHRlcm1pbmF0ZSBzb29uZXIgdGhh biBpdCB3b3VsZCBoYXZlCkBAIC02MDM0LDEzICs2MDM0LDIyMyBAQCBpbnQgUFFzZXRTaW5nbGVS b3dNb2RlKFBHY29ubiAqY29ubik7CiAgICB0aGlzIHNlY3Rpb24uCiAKICAgIDx2YXJpYWJsZWxp c3Q+CisgICAgPHZhcmxpc3RlbnRyeSBpZD0ibGlicHEtUFFjYW5jZWxDb25uIj4KKyAgICAgPHRl cm0+PGZ1bmN0aW9uPlBRY2FuY2VsQ29ubjwvZnVuY3Rpb24+PGluZGV4dGVybT48cHJpbWFyeT5Q UWNhbmNlbENvbm48L3ByaW1hcnk+PC9pbmRleHRlcm0+PC90ZXJtPgorCisgICAgIDxsaXN0aXRl bT4KKyAgICAgIDxwYXJhPgorICAgICAgIFByZXBhcmVzIGEgY29ubmVjdGlvbiBvdmVyIHdoaWNo IGEgY2FuY2VsIHJlcXVlc3QgY2FuIGJlIHNlbnQuCis8c3lub3BzaXM+CitQR2NhbmNlbENvbm4g KlBRY2FuY2VsQ29ubihQR2Nvbm4gKmNvbm4pOworPC9zeW5vcHNpcz4KKyAgICAgIDwvcGFyYT4K KworICAgICAgPHBhcmE+CisgICAgICAgPHhyZWYgbGlua2VuZD0ibGlicHEtUFFjYW5jZWxDb25u Ii8+IGNyZWF0ZXMgYQorICAgICAgIDxzdHJ1Y3RuYW1lPlBHY2FuY2VsQ29ubjwvc3RydWN0bmFt ZT48aW5kZXh0ZXJtPjxwcmltYXJ5PlBHY2FuY2VsQ29ubjwvcHJpbWFyeT48L2luZGV4dGVybT4K KyAgICAgICBvYmplY3QsIGJ1dCBpdCB3b24ndCBpbnN0YW50bHkgc3RhcnQgc2VuZGluZyBhIGNh bmNlbCByZXF1ZXN0IG92ZXIgdGhpcworICAgICAgIGNvbm5lY3Rpb24uIEEgY2FuY2VsIHJlcXVl c3QgY2FuIGJlIHNlbnQgb3ZlciB0aGlzIGNvbm5lY3Rpb24gaW4gYQorICAgICAgIGJsb2NraW5n IG1hbm5lciB1c2luZyA8eHJlZiBsaW5rZW5kPSJsaWJwcS1QUWNhbmNlbFNlbmQiLz4gYW5kIGlu IGEKKyAgICAgICBub24tYmxvY2tpbmcgbWFubmVyIHVzaW5nIDx4cmVmIGxpbmtlbmQ9ImxpYnBx LVBRY2FuY2VsUG9sbCIvPi4KKyAgICAgICBUaGUgcmV0dXJuIHZhbHVlIHNob3VsZCBjYW4gYmUg cGFzc2VkIHRvIDx4cmVmIGxpbmtlbmQ9ImxpYnBxLVBRY2FuY2VsU3RhdHVzIi8+LAorICAgICAg IHRvIGNoZWNrIGlmIHRoZSA8c3RydWN0bmFtZT5QR2NhbmNlbENvbm48L3N0cnVjdG5hbWU+IG9i amVjdCB3YXMKKyAgICAgICBjcmVhdGVkIHN1Y2Nlc3NmdWxseS4gVGhlIDxzdHJ1Y3RuYW1lPlBH Y2FuY2VsQ29ubjwvc3RydWN0bmFtZT4gb2JqZWN0CisgICAgICAgaXMgYW4gb3BhcXVlIHN0cnVj dHVyZSB0aGF0IGlzIG5vdCBtZWFudCB0byBiZSBhY2Nlc3NlZCBkaXJlY3RseSBieSB0aGUKKyAg ICAgICBhcHBsaWNhdGlvbi4gVGhpcyA8c3RydWN0bmFtZT5QR2NhbmNlbENvbm48L3N0cnVjdG5h bWU+IG9iamVjdCBjYW4gYmUKKyAgICAgICB1c2VkIHRvIGNhbmNlbCB0aGUgcXVlcnkgdGhhdCdz IHJ1bm5pbmcgb24gdGhlIG9yaWdpbmFsIGNvbm5lY3Rpb24gaW4gYQorICAgICAgIHRocmVhZC1z YWZlIHdheS4KKyAgICAgIDwvcGFyYT4KKworICAgICAgPHBhcmE+CisgICAgICAgSWYgdGhlIG9y aWdpbmFsIGNvbm5lY3Rpb24gaXMgZW5jcnlwdGVkICh1c2luZyBUTFMgb3IgR1NTKSwgdGhlbiB0 aGUKKyAgICAgICBjb25uZWN0aW9uIGZvciB0aGUgY2FuY2VsIHJlcXVlc3QgaXMgZW5jcnlwdGVk IGluIHRoZSBzYW1lIHdheS4gQW55CisgICAgICAgY29ubmVjdGlvbiBvcHRpb25zIHRoYXQgYXJl IG9ubHkgdXNlZCBkdXJpbmcgYXV0aGVudGljYXRpb24gb3IgYWZ0ZXIKKyAgICAgICBhdXRoZW50 aWNhdGlvbiBvZiB0aGUgY2xpZW50IGFyZSBpZ25vcmVkIHRob3VnaCwgYmVjYXVzZSBjYW5jZWxs YXRpb24KKyAgICAgICByZXF1ZXN0cyBkbyBub3QgcmVxdWlyZSBhdXRoZW50aWNhdGlvbiBhbmQg dGhlIGNvbm5lY3Rpb24gaXMgY2xvc2VkIHJpZ2h0CisgICAgICAgYWZ0ZXIgdGhlIGNhbmNlbGxh dGlvbiByZXF1ZXN0IGlzIHN1Ym1pdHRlZC4KKyAgICAgIDwvcGFyYT4KKworICAgICAgPHBhcmE+ CisgICAgICAgTm90ZSB0aGF0IHdoZW4gPGZ1bmN0aW9uPlBRY2FuY2VsQ29ubjwvZnVuY3Rpb24+ IHJldHVybnMgYSBub24tbnVsbAorICAgICAgIHBvaW50ZXIsIHlvdSBtdXN0IGNhbGwgPHhyZWYg bGlua2VuZD0ibGlicHEtUFFjYW5jZWxGaW5pc2giLz4gd2hlbiB5b3UKKyAgICAgICBhcmUgZmlu aXNoZWQgd2l0aCBpdCwgaW4gb3JkZXIgdG8gZGlzcG9zZSBvZiB0aGUgc3RydWN0dXJlIGFuZCBh bnkKKyAgICAgICBhc3NvY2lhdGVkIG1lbW9yeSBibG9ja3MuIFRoaXMgbXVzdCBiZSBkb25lIGV2 ZW4gaWYgdGhlIGNhbmNlbCByZXF1ZXN0CisgICAgICAgZmFpbGVkIG9yIHdhcyBhYmFuZG9uZWQu CisgICAgICA8L3BhcmE+CisgICAgIDwvbGlzdGl0ZW0+CisgICAgPC92YXJsaXN0ZW50cnk+CisK KyAgICA8dmFybGlzdGVudHJ5IGlkPSJsaWJwcS1QUWNhbmNlbFNlbmQiPgorICAgICA8dGVybT48 ZnVuY3Rpb24+UFFjYW5jZWxTZW5kPC9mdW5jdGlvbj48aW5kZXh0ZXJtPjxwcmltYXJ5PlBRY2Fu Y2VsU2VuZDwvcHJpbWFyeT48L2luZGV4dGVybT48L3Rlcm0+CisKKyAgICAgPGxpc3RpdGVtPgor ICAgICAgPHBhcmE+CisgICAgICAgUmVxdWVzdHMgdGhhdCB0aGUgc2VydmVyIGFiYW5kb25zIHBy b2Nlc3Npbmcgb2YgdGhlIGN1cnJlbnQgY29tbWFuZCBpbiBhIGJsb2NraW5nIG1hbm5lci4KKzxz eW5vcHNpcz4KK2ludCBQUWNhbmNlbFNlbmQoUEdjYW5jZWxDb25uICpjb25uKTsKKzwvc3lub3Bz aXM+CisgICAgICA8L3BhcmE+CisKKyAgICAgIDxwYXJhPgorICAgICAgIFRoZSByZXF1ZXN0IGlz IG1hZGUgb3ZlciB0aGUgZ2l2ZW4gPHN0cnVjdG5hbWU+UEdjYW5jZWxDb25uPC9zdHJ1Y3RuYW1l PiwKKyAgICAgICB3aGljaCBuZWVkcyB0byBiZSBjcmVhdGVkIHdpdGggPHhyZWYgbGlua2VuZD0i bGlicHEtUFFjYW5jZWxDb25uIi8+CisgICAgICAgVGhlIHJldHVybiB2YWx1ZSBvZiA8eHJlZiBs aW5rZW5kPSJsaWJwcS1QUWNhbmNlbFNlbmQiLz4KKyAgICAgICBpcyAxIGlmIHRoZSBjYW5jZWwg cmVxdWVzdCB3YXMgc3VjY2Vzc2Z1bGx5CisgICAgICAgZGlzcGF0Y2hlZCBhbmQgMCBpZiBub3Qu IElmIGl0IHdhcyB1bnN1Y2Nlc3NmdWwsIHRoZSBlcnJvciBtZXNzYWdlIGNhbiBiZQorICAgICAg IHJldHJpZXZlZCB1c2luZyA8eHJlZiBsaW5rZW5kPSJsaWJwcS1QUWNhbmNlbEVycm9yTWVzc2Fn ZSIvPi4KKyAgICAgIDwvcGFyYT4KKworICAgICAgPHBhcmE+CisgICAgICAgU3VjY2Vzc2Z1bCBk aXNwYXRjaCBvZiB0aGUgY2FuY2VsbGF0aW9uIGlzIG5vIGd1YXJhbnRlZSB0aGF0IHRoZSByZXF1 ZXN0CisgICAgICAgd2lsbCBoYXZlIGFueSBlZmZlY3QsIGhvd2V2ZXIuIElmIHRoZSBjYW5jZWxs YXRpb24gaXMgZWZmZWN0aXZlLCB0aGUKKyAgICAgICBjb21tYW5kIGJlaW5nIGNhbmNlbGVkIHdp bGwgdGVybWluYXRlIGVhcmx5IGFuZCByZXR1cm4gYW4gZXJyb3IgcmVzdWx0LgorICAgICAgIElm IHRoZSBjYW5jZWxsYXRpb24gZmFpbHMgKHNheSwgYmVjYXVzZSB0aGUgc2VydmVyIHdhcyBhbHJl YWR5IGRvbmUKKyAgICAgICBwcm9jZXNzaW5nIHRoZSBjb21tYW5kKSwgdGhlbiB0aGVyZSB3aWxs IGJlIG5vIHZpc2libGUgcmVzdWx0IGF0IGFsbC4KKyAgICAgIDwvcGFyYT4KKworICAgICA8L2xp c3RpdGVtPgorICAgIDwvdmFybGlzdGVudHJ5PgorCisgICAgPHZhcmxpc3RlbnRyeSBpZD0ibGli cHEtUFFjYW5jZWxTdGF0dXMiPgorICAgICA8dGVybT48ZnVuY3Rpb24+UFFjYW5jZWxTdGF0dXM8 L2Z1bmN0aW9uPjxpbmRleHRlcm0+PHByaW1hcnk+UFFjYW5jZWxTdGF0dXM8L3ByaW1hcnk+PC9p bmRleHRlcm0+PC90ZXJtPgorCisgICAgIDxsaXN0aXRlbT4KKyAgICAgIDxwYXJhPgorICAgICAg IEEgdmVyc2lvbiBvZiA8eHJlZiBsaW5rZW5kPSJsaWJwcS1QUXN0YXR1cyIvPiB0aGF0IGNhbiBi ZSB1c2VkIGZvcgorICAgICAgIGNhbmNlbGxhdGlvbiBjb25uZWN0aW9ucy4KKzxzeW5vcHNpcz4K K0Nvbm5TdGF0dXNUeXBlIFBRY2FuY2VsU3RhdHVzKGNvbnN0IFBHY2FuY2VsQ29ubiAqY29ubik7 Cis8L3N5bm9wc2lzPgorICAgICAgPC9wYXJhPgorICAgICAgPHBhcmE+CisgICAgICAgSW4gYWRk aXRpb24gdG8gYWxsIHRoZSBzdGF0dXNlcyB0aGF0IGEgPHN0cnVjdG5hbWU+UEdjb25uPC9zdHJ1 Y3RuYW1lPgorICAgICAgIGNhbiBoYXZlLCB0aGlzIGNvbm5lY3Rpb24gY2FuIGhhdmUgb25lIGFk ZGl0aW9uYWwgc3RhdHVzOgorCisgICAgICAgPHZhcmlhYmxlbGlzdD4KKyAgICAgICAgPHZhcmxp c3RlbnRyeSBpZD0ibGlicHEtY29ubmVjdGlvbi1zdGFydGluZyI+CisgICAgICAgICA8dGVybT48 c3ltYm9sPkNPTk5FQ1RJT05fU1RBUlRJTkc8L3N5bWJvbD48L3Rlcm0+CisgICAgICAgICA8bGlz dGl0ZW0+CisgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgIFdhaXRpbmcgZm9yIHRoZSBmaXJz dCBjYWxsIHRvIDx4cmVmIGxpbmtlbmQ9ImxpYnBxLVBRY2FuY2VsUG9sbCIvPiwKKyAgICAgICAg ICAgdG8gYWN0dWFsbHkgb3BlbiB0aGUgc29ja2V0LiBUaGlzIGlzIHRoZSBjb25uZWN0aW9uIHN0 YXRlIHJpZ2h0IGFmdGVyCisgICAgICAgICAgIGNhbGxpbmcgPHhyZWYgbGlua2VuZD0ibGlicHEt UFFjYW5jZWxDb25uIi8+LiBObyBjb25uZWN0aW9uIHRvIHRoZQorICAgICAgICAgICBzZXJ2ZXIg aGFzIGJlZW4gaW5pdGlhdGVkIHlldCBhdCB0aGlzIHBvaW50LiBUbyBhY3R1YWxseSBzdGFydAor ICAgICAgICAgICBzZW5kaW5nIHRoZSBjYW5jZWwgcmVxdWVzdCB1c2UgPHhyZWYgbGlua2VuZD0i bGlicHEtUFFjYW5jZWxQb2xsIi8+LgorICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgIDwvbGlz dGl0ZW0+CisgICAgICAgIDwvdmFybGlzdGVudHJ5PgorICAgICAgIDwvdmFyaWFibGVsaXN0Pgor ICAgICAgPC9wYXJhPgorCisgICAgICA8cGFyYT4KKyAgICAgICBPbmUgZmluYWwgbm90ZSBhYm91 dCB0aGUgcmV0dXJuZWQgc3RhdHVzZXMgaXMgdGhhdAorICAgICAgIDxzeW1ib2w+Q09OTkVDVElP Tl9PSzwvc3ltYm9sPiBoYXMgYSBzbGlnaHRseSBkaWZmZXJlbnQgbWVhbmluZyBmb3IgYQorICAg ICAgIDxzdHJ1Y3RuYW1lPlBHY2FuY2VsQ29ubjwvc3RydWN0bmFtZT4gdGhhbiB3aGF0IGl0IGhh cyBmb3IgYQorICAgICAgIDxzdHJ1Y3RuYW1lPlBHY29ubjwvc3RydWN0bmFtZT4uIFdoZW4gPHhy ZWYgbGlua2VuZD0ibGlicHEtUFFjYW5jZWxTdGF0dXMiLz4KKyAgICAgICByZXR1cm5zIDxzeW1i b2w+Q09OTkVDVElPTl9PSzwvc3ltYm9sPiBmb3IgYSA8c3RydWN0bmFtZT5QR2NhbmNlbENvbm48 L3N0cnVjdG5hbWU+CisgICAgICAgaXQgbWVhbnMgdGhhdCB0aGF0IHRoZSBkaXNwYXRjaCBvZiB0 aGUgY2FuY2VsIHJlcXVlc3QgaGFzIGNvbXBsZXRlZCAoYWx0aG91Z2gKKyAgICAgICB0aGlzIGlz IG5vIHByb21pc2UgdGhhdCB0aGUgcXVlcnkgd2FzIGFjdHVhbGx5IGNhbmNlbGVkKSBhbmQgdGhh dCB0aGUKKyAgICAgICBjb25uZWN0aW9uIGlzIG5vdyBjbG9zZWQuIFdoaWxlIGEgPHN5bWJvbD5D T05ORUNUSU9OX09LPC9zeW1ib2w+IHJlc3VsdAorICAgICAgIGZvciA8c3RydWN0bmFtZT5QR2Nv bm48L3N0cnVjdG5hbWU+IG1lYW5zIHRoYXQgcXVlcmllcyBjYW4gYmUgc2VudCBvdmVyCisgICAg ICAgdGhlIGNvbm5lY3Rpb24uCisgICAgICA8L3BhcmE+CisKKyAgICAgPC9saXN0aXRlbT4KKyAg ICA8L3Zhcmxpc3RlbnRyeT4KKworICAgIDx2YXJsaXN0ZW50cnkgaWQ9ImxpYnBxLVBRY2FuY2Vs U29ja2V0Ij4KKyAgICAgPHRlcm0+PGZ1bmN0aW9uPlBRY2FuY2VsU29ja2V0PC9mdW5jdGlvbj48 aW5kZXh0ZXJtPjxwcmltYXJ5PlBRY2FuY2VsU29ja2V0PC9wcmltYXJ5PjwvaW5kZXh0ZXJtPjwv dGVybT4KKworICAgICA8bGlzdGl0ZW0+CisgICAgICA8cGFyYT4KKyAgICAgICBBIHZlcnNpb24g b2YgPHhyZWYgbGlua2VuZD0ibGlicHEtUFFzb2NrZXQiLz4gdGhhdCBjYW4gYmUgdXNlZCBmb3IK KyAgICAgICBjYW5jZWxsYXRpb24gY29ubmVjdGlvbnMuCis8c3lub3BzaXM+CitpbnQgUFFjYW5j ZWxTb2NrZXQoUEdjYW5jZWxDb25uICpjb25uKTsKKzwvc3lub3BzaXM+CisgICAgICA8L3BhcmE+ CisgICAgIDwvbGlzdGl0ZW0+CisgICAgPC92YXJsaXN0ZW50cnk+CisKKyAgICA8dmFybGlzdGVu dHJ5IGlkPSJsaWJwcS1QUWNhbmNlbFBvbGwiPgorICAgICA8dGVybT48ZnVuY3Rpb24+UFFjYW5j ZWxQb2xsPC9mdW5jdGlvbj48aW5kZXh0ZXJtPjxwcmltYXJ5PlBRY2FuY2VsUG9sbDwvcHJpbWFy eT48L2luZGV4dGVybT48L3Rlcm0+CisKKyAgICAgPGxpc3RpdGVtPgorICAgICAgPHBhcmE+Cisg ICAgICAgQSB2ZXJzaW9uIG9mIDx4cmVmIGxpbmtlbmQ9ImxpYnBxLVBRY29ubmVjdFBvbGwiLz4g dGhhdCBjYW4gYmUgdXNlZCBmb3IKKyAgICAgICBjYW5jZWxsYXRpb24gY29ubmVjdGlvbnMuCis8 c3lub3BzaXM+CitQb3N0Z3Jlc1BvbGxpbmdTdGF0dXNUeXBlIFBRY2FuY2VsUG9sbChQR2NhbmNl bENvbm4gKmNvbm4pOworPC9zeW5vcHNpcz4KKyAgICAgIDwvcGFyYT4KKyAgICAgPC9saXN0aXRl bT4KKyAgICA8L3Zhcmxpc3RlbnRyeT4KKworICAgIDx2YXJsaXN0ZW50cnkgaWQ9ImxpYnBxLVBR Y2FuY2VsRXJyb3JNZXNzYWdlIj4KKyAgICAgPHRlcm0+PGZ1bmN0aW9uPlBRY2FuY2VsRXJyb3JN ZXNzYWdlPC9mdW5jdGlvbj48aW5kZXh0ZXJtPjxwcmltYXJ5PlBRY2FuY2VsRXJyb3JNZXNzYWdl PC9wcmltYXJ5PjwvaW5kZXh0ZXJtPjwvdGVybT4KKworICAgICA8bGlzdGl0ZW0+CisgICAgICA8 cGFyYT4KKyAgICAgICBBIHZlcnNpb24gb2YgPHhyZWYgbGlua2VuZD0ibGlicHEtUFFlcnJvck1l c3NhZ2UiLz4gdGhhdCBjYW4gYmUgdXNlZCBmb3IKKyAgICAgICBjYW5jZWxsYXRpb24gY29ubmVj dGlvbnMuCis8c3lub3BzaXM+CitjaGFyICpQUWNhbmNlbEVycm9yTWVzc2FnZShjb25zdCBQR2Nh bmNlbENvbm4gKmNvbm4pOworPC9zeW5vcHNpcz4KKyAgICAgIDwvcGFyYT4KKyAgICAgPC9saXN0 aXRlbT4KKyAgICA8L3Zhcmxpc3RlbnRyeT4KKworICAgIDx2YXJsaXN0ZW50cnkgaWQ9ImxpYnBx LVBRY2FuY2VsRmluaXNoIj4KKyAgICAgPHRlcm0+PGZ1bmN0aW9uPlBRY2FuY2VsRmluaXNoPC9m dW5jdGlvbj48aW5kZXh0ZXJtPjxwcmltYXJ5PlBRY2FuY2VsRmluaXNoPC9wcmltYXJ5PjwvaW5k ZXh0ZXJtPjwvdGVybT4KKyAgICAgPGxpc3RpdGVtPgorICAgICAgPHBhcmE+CisgICAgICAgQ2xv c2VzIHRoZSBjYW5jZWwgY29ubmVjdGlvbiAoaWYgaXQgZGlkIG5vdCBmaW5pc2ggc2VuZGluZyB0 aGUgY2FuY2VsCisgICAgICAgcmVxdWVzdCB5ZXQpLiBBbHNvIGZyZWVzIG1lbW9yeSB1c2VkIGJ5 IHRoZSA8c3RydWN0bmFtZT5QR2NhbmNlbENvbm48L3N0cnVjdG5hbWU+CisgICAgICAgb2JqZWN0 LgorPHN5bm9wc2lzPgordm9pZCBQUWNhbmNlbEZpbmlzaChQR2NhbmNlbENvbm4gKmNvbm4pOwor PC9zeW5vcHNpcz4KKyAgICAgIDwvcGFyYT4KKworICAgICAgPHBhcmE+CisgICAgICAgTm90ZSB0 aGF0IGV2ZW4gaWYgdGhlIGNhbmNlbCBhdHRlbXB0IGZhaWxzIChhcworICAgICAgIGluZGljYXRl ZCBieSA8eHJlZiBsaW5rZW5kPSJsaWJwcS1QUWNhbmNlbFN0YXR1cyIvPiksIHRoZSBhcHBsaWNh dGlvbiBzaG91bGQgY2FsbCA8eHJlZiBsaW5rZW5kPSJsaWJwcS1QUWNhbmNlbEZpbmlzaCIvPgor ICAgICAgIHRvIGZyZWUgdGhlIG1lbW9yeSB1c2VkIGJ5IHRoZSA8c3RydWN0bmFtZT5QR2NhbmNl bENvbm48L3N0cnVjdG5hbWU+IG9iamVjdC4KKyAgICAgICBUaGUgPHN0cnVjdG5hbWU+UEdjYW5j ZWxDb25uPC9zdHJ1Y3RuYW1lPiBwb2ludGVyIG11c3Qgbm90IGJlIHVzZWQgYWdhaW4gYWZ0ZXIK KyAgICAgICA8eHJlZiBsaW5rZW5kPSJsaWJwcS1QUWNhbmNlbEZpbmlzaCIvPiBoYXMgYmVlbiBj YWxsZWQuCisgICAgICA8L3BhcmE+CisgICAgIDwvbGlzdGl0ZW0+CisgICAgPC92YXJsaXN0ZW50 cnk+CisKKyAgICA8dmFybGlzdGVudHJ5IGlkPSJsaWJwcS1QUWNhbmNlbFJlc2V0Ij4KKyAgICAg PHRlcm0+PGZ1bmN0aW9uPlBRY2FuY2VsUmVzZXQ8L2Z1bmN0aW9uPjxpbmRleHRlcm0+PHByaW1h cnk+UFFjYW5jZWxSZXNldDwvcHJpbWFyeT48L2luZGV4dGVybT48L3Rlcm0+CisgICAgIDxsaXN0 aXRlbT4KKyAgICAgIDxwYXJhPgorICAgICAgIFJlc2V0cyB0aGUgPHN5bWJvbD5QR2NhbmNlbENv bm48L3N5bWJvbD4gc28gaXQgY2FuIGJlIHJldXNlZCBmb3IgYSBuZXcKKyAgICAgICBjYW5jZWwg Y29ubmVjdGlvbi4KKzxzeW5vcHNpcz4KK3ZvaWQgUFFjYW5jZWxSZXNldChQR2NhbmNlbENvbm4g KmNvbm4pOworPC9zeW5vcHNpcz4KKyAgICAgIDwvcGFyYT4KKworICAgICAgPHBhcmE+CisgICAg ICAgSWYgdGhlIDxzeW1ib2w+UEdjYW5jZWxDb25uPC9zeW1ib2w+IGlzIGN1cnJlbnRseSB1c2Vk IHRvIHNlbmQgYSBjYW5jZWwKKyAgICAgICByZXF1ZXN0LCB0aGVuIHRoaXMgY29ubmVjdGlvbiBp cyBjbG9zZWQuIEl0IHdpbGwgdGhlbiBwcmVwYXJlIHRoZQorICAgICAgIDxzeW1ib2w+UEdjYW5j ZWxDb25uPC9zeW1ib2w+IG9iamVjdCBzdWNoIHRoYXQgaXQgY2FuIGJlIHVzZWQgdG8gc2VuZCBh CisgICAgICAgbmV3IGNhbmNlbCByZXF1ZXN0LiBUaGlzIGNhbiBiZSB1c2VkIHRvIGNyZWF0ZSBv bmUgPHN5bWJvbD5QR2NhbmNlbENvbm48L3N5bWJvbD4KKyAgICAgICBmb3IgYSA8c3ltYm9sPlBH Y29ubjwvc3ltYm9sPiBhbmQgcmV1c2UgdGhhdCBtdWx0aXBsZSB0aW1lcyB0aHJvdWdob3V0Cisg ICAgICAgdGhlIGxpZmV0aW1lIG9mIHRoZSBvcmlnaW5hbCA8c3ltYm9sPlBHY29ubjwvc3ltYm9s Pi4KKyAgICAgIDwvcGFyYT4KKyAgICAgPC9saXN0aXRlbT4KKyAgICA8L3Zhcmxpc3RlbnRyeT4K KwogICAgIDx2YXJsaXN0ZW50cnkgaWQ9ImxpYnBxLVBRZ2V0Q2FuY2VsIj4KICAgICAgPHRlcm0+ PGZ1bmN0aW9uPlBRZ2V0Q2FuY2VsPC9mdW5jdGlvbj48aW5kZXh0ZXJtPjxwcmltYXJ5PlBRZ2V0 Q2FuY2VsPC9wcmltYXJ5PjwvaW5kZXh0ZXJtPjwvdGVybT4KIAogICAgICA8bGlzdGl0ZW0+CiAg ICAgICA8cGFyYT4KICAgICAgICBDcmVhdGVzIGEgZGF0YSBzdHJ1Y3R1cmUgY29udGFpbmluZyB0 aGUgaW5mb3JtYXRpb24gbmVlZGVkIHRvIGNhbmNlbAotICAgICAgIGEgY29tbWFuZCBpc3N1ZWQg dGhyb3VnaCBhIHBhcnRpY3VsYXIgZGF0YWJhc2UgY29ubmVjdGlvbi4KKyAgICAgICBhIGNvbW1h bmQgdXNpbmcgPHhyZWYgbGlua2VuZD0ibGlicHEtUFFjYW5jZWwiLz4uCiA8c3lub3BzaXM+CiBQ R2NhbmNlbCAqUFFnZXRDYW5jZWwoUEdjb25uICpjb25uKTsKIDwvc3lub3BzaXM+CkBAIC02MDgy LDE0ICs2MjkyLDI4IEBAIHZvaWQgUFFmcmVlQ2FuY2VsKFBHY2FuY2VsICpjYW5jZWwpOwogCiAg ICAgIDxsaXN0aXRlbT4KICAgICAgIDxwYXJhPgotICAgICAgIFJlcXVlc3RzIHRoYXQgdGhlIHNl cnZlciBhYmFuZG9uIHByb2Nlc3Npbmcgb2YgdGhlIGN1cnJlbnQgY29tbWFuZC4KKyAgICAgICBB biBpbnNlY3VyZSB2ZXJzaW9uIG9mIDx4cmVmIGxpbmtlbmQ9ImxpYnBxLVBRY2FuY2VsU2VuZCIv PiwgYnV0IG9uZQorICAgICAgIHRoYXQgY2FuIGJlIHVzZWQgc2FmZWx5IGZyb20gd2l0aGluIGEg c2lnbmFsIGhhbmRsZXIuCiA8c3lub3BzaXM+CiBpbnQgUFFjYW5jZWwoUEdjYW5jZWwgKmNhbmNl bCwgY2hhciAqZXJyYnVmLCBpbnQgZXJyYnVmc2l6ZSk7CiA8L3N5bm9wc2lzPgogICAgICAgPC9w YXJhPgogCiAgICAgICA8cGFyYT4KLSAgICAgICBUaGUgcmV0dXJuIHZhbHVlIGlzIDEgaWYgdGhl IGNhbmNlbCByZXF1ZXN0IHdhcyBzdWNjZXNzZnVsbHkKKyAgICAgICA8eHJlZiBsaW5rZW5kPSJs aWJwcS1QUWNhbmNlbCIvPiBzaG91bGQgb25seSBiZSB1c2VkIGlmIGl0J3MgbmVjZXNzYXJ5Cisg ICAgICAgdG8gY2FuY2VsIGEgcXVlcnkgZnJvbSBhIHNpZ25hbC1oYW5kbGVyLiBJZiBzaWduYWwt c2FmZXR5IGlzIG5vdCBuZWVkZWQsCisgICAgICAgPHhyZWYgbGlua2VuZD0ibGlicHEtUFFjYW5j ZWxTZW5kIi8+IHNob3VsZCBiZSB1c2VkIHRvIGNhbmNlbCB0aGUgcXVlcnkKKyAgICAgICBpbnN0 ZWFkLiA8eHJlZiBsaW5rZW5kPSJsaWJwcS1QUWNhbmNlbCIvPiBjYW4gYmUgc2FmZWx5IGludm9r ZWQgZnJvbSBhCisgICAgICAgc2lnbmFsIGhhbmRsZXIsIGlmIHRoZSA8cGFyYW1ldGVyPmVycmJ1 ZjwvcGFyYW1ldGVyPiBpcyBhIGxvY2FsIHZhcmlhYmxlCisgICAgICAgaW4gdGhlIHNpZ25hbCBo YW5kbGVyLiAgVGhlIDxzdHJ1Y3RuYW1lPlBHY2FuY2VsPC9zdHJ1Y3RuYW1lPiBvYmplY3QgaXMK KyAgICAgICByZWFkLW9ubHkgYXMgZmFyIGFzIDx4cmVmIGxpbmtlbmQ9ImxpYnBxLVBRY2FuY2Vs Ii8+IGlzIGNvbmNlcm5lZCwgc28gaXQKKyAgICAgICBjYW4gYWxzbyBiZSBpbnZva2VkIGZyb20g YSB0aHJlYWQgdGhhdCBpcyBzZXBhcmF0ZSBmcm9tIHRoZSBvbmUKKyAgICAgICBtYW5pcHVsYXRp bmcgdGhlIDxzdHJ1Y3RuYW1lPlBHY29ubjwvc3RydWN0bmFtZT4gb2JqZWN0LgorICAgICAgPC9w YXJhPgorCisgICAgICA8cGFyYT4KKyAgICAgICBUaGUgcmV0dXJuIHZhbHVlIG9mIDx4cmVmIGxp bmtlbmQ9ImxpYnBxLVBRY2FuY2VsIi8+CisgICAgICAgaXMgMSBpZiB0aGUgY2FuY2VsIHJlcXVl c3Qgd2FzIHN1Y2Nlc3NmdWxseQogICAgICAgIGRpc3BhdGNoZWQgYW5kIDAgaWYgbm90LiAgSWYg bm90LCA8cGFyYW1ldGVyPmVycmJ1ZjwvcGFyYW1ldGVyPiBpcyBmaWxsZWQKICAgICAgICB3aXRo IGFuIGV4cGxhbmF0b3J5IGVycm9yIG1lc3NhZ2UuICA8cGFyYW1ldGVyPmVycmJ1ZjwvcGFyYW1l dGVyPgogICAgICAgIG11c3QgYmUgYSBjaGFyIGFycmF5IG9mIHNpemUgPHBhcmFtZXRlcj5lcnJi dWZzaXplPC9wYXJhbWV0ZXI+ICh0aGUKQEAgLTYwOTcsMjEgKzYzMjEsMjIgQEAgaW50IFBRY2Fu Y2VsKFBHY2FuY2VsICpjYW5jZWwsIGNoYXIgKmVycmJ1ZiwgaW50IGVycmJ1ZnNpemUpOwogICAg ICAgPC9wYXJhPgogCiAgICAgICA8cGFyYT4KLSAgICAgICBTdWNjZXNzZnVsIGRpc3BhdGNoIGlz IG5vIGd1YXJhbnRlZSB0aGF0IHRoZSByZXF1ZXN0IHdpbGwgaGF2ZQotICAgICAgIGFueSBlZmZl Y3QsIGhvd2V2ZXIuICBJZiB0aGUgY2FuY2VsbGF0aW9uIGlzIGVmZmVjdGl2ZSwgdGhlIGN1cnJl bnQKLSAgICAgICBjb21tYW5kIHdpbGwgdGVybWluYXRlIGVhcmx5IGFuZCByZXR1cm4gYW4gZXJy b3IgcmVzdWx0LiAgSWYgdGhlCi0gICAgICAgY2FuY2VsbGF0aW9uIGZhaWxzIChzYXksIGJlY2F1 c2UgdGhlIHNlcnZlciB3YXMgYWxyZWFkeSBkb25lCi0gICAgICAgcHJvY2Vzc2luZyB0aGUgY29t bWFuZCksIHRoZW4gdGhlcmUgd2lsbCBiZSBubyB2aXNpYmxlIHJlc3VsdCBhdAotICAgICAgIGFs bC4KLSAgICAgIDwvcGFyYT4KLQotICAgICAgPHBhcmE+Ci0gICAgICAgPHhyZWYgbGlua2VuZD0i bGlicHEtUFFjYW5jZWwiLz4gY2FuIHNhZmVseSBiZSBpbnZva2VkIGZyb20gYSBzaWduYWwKLSAg ICAgICBoYW5kbGVyLCBpZiB0aGUgPHBhcmFtZXRlcj5lcnJidWY8L3BhcmFtZXRlcj4gaXMgYSBs b2NhbCB2YXJpYWJsZSBpbiB0aGUKLSAgICAgICBzaWduYWwgaGFuZGxlci4gIFRoZSA8c3RydWN0 bmFtZT5QR2NhbmNlbDwvc3RydWN0bmFtZT4gb2JqZWN0IGlzIHJlYWQtb25seQotICAgICAgIGFz IGZhciBhcyA8eHJlZiBsaW5rZW5kPSJsaWJwcS1QUWNhbmNlbCIvPiBpcyBjb25jZXJuZWQsIHNv IGl0IGNhbgotICAgICAgIGFsc28gYmUgaW52b2tlZCBmcm9tIGEgdGhyZWFkIHRoYXQgaXMgc2Vw YXJhdGUgZnJvbSB0aGUgb25lCi0gICAgICAgbWFuaXB1bGF0aW5nIHRoZSA8c3RydWN0bmFtZT5Q R2Nvbm48L3N0cnVjdG5hbWU+IG9iamVjdC4KKyAgICAgICBUbyBhY2hpZXZlIHNpZ25hbC1zYWZl dHksIHNvbWUgY29uY2Vzc2lvbnMgbmVlZGVkIHRvIGJlIG1hZGUgaW4gdGhlCisgICAgICAgaW1w bGVtZW50YXRpb24gb2YgPHhyZWYgbGlua2VuZD0ibGlicHEtUFFjYW5jZWwiLz4uIE5vdCBhbGwg Y29ubmVjdGlvbgorICAgICAgIG9wdGlvbnMgb2YgdGhlIG9yaWdpbmFsIGNvbm5lY3Rpb24gYXJl IHVzZWQgd2hlbiBlc3RhYmxpc2hpbmcgYQorICAgICAgIGNvbm5lY3Rpb24gZm9yIHRoZSBjYW5j ZWxsYXRpb24gcmVxdWVzdC4gVGhpcyBmdW5jdGlvbiBjb25uZWN0cyB0bworICAgICAgIHBvc3Rn cmVzIG9uIHRoZSBzYW1lIGFkZHJlc3MgYW5kIHBvcnQgYXMgdGhlIG9yaWdpbmFsIGNvbm5lY3Rp b24uIFRoZQorICAgICAgIG9ubHkgY29ubmVjdGlvbiBvcHRpb25zIHRoYXQgYXJlIGhvbm9yZWQg ZHVyaW5nIHRoaXMgY29ubmVjdGlvbiBhcmUKKyAgICAgICA8dmFybmFtZT5rZWVwYWxpdmVzPC92 YXJuYW1lPiwKKyAgICAgICA8dmFybmFtZT5rZWVwYWxpdmVzX2lkbGU8L3Zhcm5hbWU+LAorICAg ICAgIDx2YXJuYW1lPmtlZXBhbGl2ZXNfaW50ZXJ2YWw8L3Zhcm5hbWU+LAorICAgICAgIDx2YXJu YW1lPmtlZXBhbGl2ZXNfY291bnQ8L3Zhcm5hbWU+LCBhbmQKKyAgICAgICA8dmFybmFtZT50Y3Bf dXNlcl90aW1lb3V0PC92YXJuYW1lPi4KKyAgICAgICBTbywgZm9yIGV4YW1wbGUKKyAgICAgICA8 dmFybmFtZT5jb25uZWN0X3RpbWVvdXQ8L3Zhcm5hbWU+LAorICAgICAgIDx2YXJuYW1lPmdzc2Vu Y21vZGU8L3Zhcm5hbWU+LCBhbmQKKyAgICAgICA8dmFybmFtZT5zc2xtb2RlPC92YXJuYW1lPiBh cmUgaWdub3JlZC4gPGVtcGhhc2lzPlRoaXMgbWVhbnMgdGhlIGNvbm5lY3Rpb24KKyAgICAgICBm b3IgdGhlIGNhbmNlbCByZXF1ZXN0IGlzIG5ldmVyIGVuY3J5cHRlZCB1c2luZyBUTFMgb3IgR1NT PC9lbXBoYXNpcz4uCiAgICAgICA8L3BhcmE+CiAgICAgIDwvbGlzdGl0ZW0+CiAgICAgPC92YXJs aXN0ZW50cnk+CkBAIC02MTIzLDEzICs2MzQ4LDIyIEBAIGludCBQUWNhbmNlbChQR2NhbmNlbCAq Y2FuY2VsLCBjaGFyICplcnJidWYsIGludCBlcnJidWZzaXplKTsKIAogICAgICA8bGlzdGl0ZW0+ CiAgICAgICA8cGFyYT4KLSAgICAgICA8eHJlZiBsaW5rZW5kPSJsaWJwcS1QUXJlcXVlc3RDYW5j ZWwiLz4gaXMgYSBkZXByZWNhdGVkIHZhcmlhbnQgb2YKLSAgICAgICA8eHJlZiBsaW5rZW5kPSJs aWJwcS1QUWNhbmNlbCIvPi4KKyAgICAgICA8eHJlZiBsaW5rZW5kPSJsaWJwcS1QUXJlcXVlc3RD YW5jZWwiLz4gaXMgYSBkZXByZWNhdGVkIGFuZCBpbnNlY3VyZQorICAgICAgIHZhcmlhbnQgb2Yg PHhyZWYgbGlua2VuZD0ibGlicHEtUFFjYW5jZWxTZW5kIi8+LgogPHN5bm9wc2lzPgogaW50IFBR cmVxdWVzdENhbmNlbChQR2Nvbm4gKmNvbm4pOwogPC9zeW5vcHNpcz4KICAgICAgIDwvcGFyYT4K IAorICAgICAgPHBhcmE+CisgICAgICAgPHhyZWYgbGlua2VuZD0ibGlicHEtUFFyZXF1ZXN0Q2Fu Y2VsIi8+IG9ubHkgZXhpc3RzIGJlY2F1c2Ugb2YgYmFja3dhcmRzCisgICAgICAgY29tcGF0aWJp bGl0eSByZWFzb25zLiA8eHJlZiBsaW5rZW5kPSJsaWJwcS1QUWNhbmNlbFNlbmQiLz4gc2hvdWxk IGJlCisgICAgICAgdXNlZCBpbnN0ZWFkLCB0byBhdm9pZCB0aGUgc2VjdXJpdHkgYW5kIHRocmVh ZC1zYWZldHkgaXNzdWVzIHRoYXQgdGhpcworICAgICAgIGZ1bmN0aW9uIGhhcy4gVGhpcyBmdW5j dGlvbiBoYXMgdGhlIHNhbWUgc2VjdXJpdHkgaXNzdWVzIGFzCisgICAgICAgPHhyZWYgbGlua2Vu ZD0ibGlicHEtUFFjYW5jZWwiLz4sIGJ1dCB3aXRob3V0IHRoZSBiZW5lZml0IG9mIGJlaW5nCisg ICAgICAgc2lnbmFsLXNhZmUuCisgICAgICA8L3BhcmE+CisKICAgICAgIDxwYXJhPgogICAgICAg IFJlcXVlc3RzIHRoYXQgdGhlIHNlcnZlciBhYmFuZG9uIHByb2Nlc3Npbmcgb2YgdGhlIGN1cnJl bnQKICAgICAgICBjb21tYW5kLiAgSXQgb3BlcmF0ZXMgZGlyZWN0bHkgb24gdGhlCkBAIC05MzU2 LDcgKzk1OTAsNyBAQCBpbnQgUFFpc3RocmVhZHNhZmUoKTsKICAgIFRoZSBkZXByZWNhdGVkIGZ1 bmN0aW9ucyA8eHJlZiBsaW5rZW5kPSJsaWJwcS1QUXJlcXVlc3RDYW5jZWwiLz4gYW5kCiAgICA8 eHJlZiBsaW5rZW5kPSJsaWJwcS1QUW9pZFN0YXR1cyIvPiBhcmUgbm90IHRocmVhZC1zYWZlIGFu ZCBzaG91bGQgbm90IGJlCiAgICB1c2VkIGluIG11bHRpdGhyZWFkIHByb2dyYW1zLiAgPHhyZWYg bGlua2VuZD0ibGlicHEtUFFyZXF1ZXN0Q2FuY2VsIi8+Ci0gICBjYW4gYmUgcmVwbGFjZWQgYnkg PHhyZWYgbGlua2VuZD0ibGlicHEtUFFjYW5jZWwiLz4uCisgICBjYW4gYmUgcmVwbGFjZWQgYnkg PHhyZWYgbGlua2VuZD0ibGlicHEtUFFjYW5jZWxTZW5kIi8+LgogICAgPHhyZWYgbGlua2VuZD0i bGlicHEtUFFvaWRTdGF0dXMiLz4gY2FuIGJlIHJlcGxhY2VkIGJ5CiAgICA8eHJlZiBsaW5rZW5k PSJsaWJwcS1QUW9pZFZhbHVlIi8+LgogICA8L3BhcmE+CmRpZmYgLS1naXQgYS9zcmMvaW50ZXJm YWNlcy9saWJwcS9leHBvcnRzLnR4dCBiL3NyYy9pbnRlcmZhY2VzL2xpYnBxL2V4cG9ydHMudHh0 CmluZGV4IDA4ODU5MmRlYjE2Li4xMjViYzgwNjc5YSAxMDA2NDQKLS0tIGEvc3JjL2ludGVyZmFj ZXMvbGlicHEvZXhwb3J0cy50eHQKKysrIGIvc3JjL2ludGVyZmFjZXMvbGlicHEvZXhwb3J0cy50 eHQKQEAgLTE5MywzICsxOTMsMTEgQEAgUFFzZW5kQ2xvc2VQcmVwYXJlZCAgICAgICAxOTAKIFBR c2VuZENsb3NlUG9ydGFsICAgICAgICAgMTkxCiBQUWNoYW5nZVBhc3N3b3JkICAgICAgICAgIDE5 MgogUFFzZW5kUGlwZWxpbmVTeW5jICAgICAgICAxOTMKK1BRY2FuY2VsU2VuZCAgICAgICAgICAg ICAgMTk0CitQUWNhbmNlbENvbm4gICAgICAgICAgICAgIDE5NQorUFFjYW5jZWxQb2xsICAgICAg ICAgICAgICAxOTYKK1BRY2FuY2VsU3RhdHVzICAgICAgICAgICAgMTk3CitQUWNhbmNlbFNvY2tl dCAgICAgICAgICAgIDE5OAorUFFjYW5jZWxFcnJvck1lc3NhZ2UgICAgICAxOTkKK1BRY2FuY2Vs UmVzZXQgICAgICAgICAgICAgMjAwCitQUWNhbmNlbEZpbmlzaCAgICAgICAgICAgIDIwMQpkaWZm IC0tZ2l0IGEvc3JjL2ludGVyZmFjZXMvbGlicHEvZmUtY2FuY2VsLmMgYi9zcmMvaW50ZXJmYWNl cy9saWJwcS9mZS1jYW5jZWwuYwppbmRleCBmMWQ4MzZkMDIxNi4uZTkyNjIzNTk0NTMgMTAwNjQ0 Ci0tLSBhL3NyYy9pbnRlcmZhY2VzL2xpYnBxL2ZlLWNhbmNlbC5jCisrKyBiL3NyYy9pbnRlcmZh Y2VzL2xpYnBxL2ZlLWNhbmNlbC5jCkBAIC0xOSw2ICsxOSwyOTAgQEAKICNpbmNsdWRlICJsaWJw cS1pbnQuaCIKICNpbmNsdWRlICJwb3J0L3BnX2Jzd2FwLmgiCiAKKworLyoKKyAqCQlQUWNhbmNl bENvbm4KKyAqCisgKiBBc3luY2hyb25vdXNseSBjYW5jZWwgYSBxdWVyeSBvbiB0aGUgZ2l2ZW4g Y29ubmVjdGlvbi4gVGhpcyByZXF1aXJlcyBwb2xsaW5nCisgKiB0aGUgcmV0dXJuZWQgUEdjYW5j ZWxDb25uIHRvIGFjdHVhbGx5IGNvbXBsZXRlIHRoZSBjYW5jZWxsYXRpb24gb2YgdGhlCisgKiBx dWVyeS4KKyAqLworUEdjYW5jZWxDb25uICoKK1BRY2FuY2VsQ29ubihQR2Nvbm4gKmNvbm4pCit7 CisJUEdjb25uCSAgICpjYW5jZWxDb25uID0gcHFNYWtlRW1wdHlQR2Nvbm4oKTsKKwlwZ19jb25u X2hvc3Qgb3JpZ2luYWxIb3N0OworCisJaWYgKGNhbmNlbENvbm4gPT0gTlVMTCkKKwkJcmV0dXJu IE5VTEw7CisKKwkvKiBDaGVjayB3ZSBoYXZlIGFuIG9wZW4gY29ubmVjdGlvbiAqLworCWlmICgh Y29ubikKKwl7CisJCWxpYnBxX2FwcGVuZF9jb25uX2Vycm9yKGNhbmNlbENvbm4sICJwYXNzZWQg Y29ubmVjdGlvbiB3YXMgTlVMTCIpOworCQlyZXR1cm4gKFBHY2FuY2VsQ29ubiAqKSBjYW5jZWxD b25uOworCX0KKworCWlmIChjb25uLT5zb2NrID09IFBHSU5WQUxJRF9TT0NLRVQpCisJeworCQls aWJwcV9hcHBlbmRfY29ubl9lcnJvcihjYW5jZWxDb25uLCAicGFzc2VkIGNvbm5lY3Rpb24gaXMg bm90IG9wZW4iKTsKKwkJcmV0dXJuIChQR2NhbmNlbENvbm4gKikgY2FuY2VsQ29ubjsKKwl9CisK KworCS8qCisJICogSW5kaWNhdGUgdGhhdCB0aGlzIGNvbm5lY3Rpb24gaXMgdXNlZCB0byBzZW5k IGEgY2FuY2VsbGF0aW9uCisJICovCisJY2FuY2VsQ29ubi0+Y2FuY2VsUmVxdWVzdCA9IHRydWU7 CisKKwlpZiAoIXBxQ29weVBHY29ubihjb25uLCBjYW5jZWxDb25uKSkKKwkJcmV0dXJuIChQR2Nh bmNlbENvbm4gKikgY2FuY2VsQ29ubjsKKworCS8qCisJICogQ29tcHV0ZSBkZXJpdmVkIG9wdGlv bnMKKwkgKi8KKwlpZiAoIXBxQ29ubmVjdE9wdGlvbnMyKGNhbmNlbENvbm4pKQorCQlyZXR1cm4g KFBHY2FuY2VsQ29ubiAqKSBjYW5jZWxDb25uOworCisJLyoKKwkgKiBDb3B5IGNhbmNlbGxhdGlv biB0b2tlbiBkYXRhIGZyb20gdGhlIG9yaWdpbmFsIGNvbm5uZWN0aW9uCisJICovCisJY2FuY2Vs Q29ubi0+YmVfcGlkID0gY29ubi0+YmVfcGlkOworCWNhbmNlbENvbm4tPmJlX2tleSA9IGNvbm4t PmJlX2tleTsKKworCS8qCisJICogQ2FuY2VsIHJlcXVlc3RzIHNob3VsZCBub3QgaXRlcmF0ZSBv dmVyIGFsbCBwb3NzaWJsZSBob3N0cy4gVGhlIHJlcXVlc3QKKwkgKiBuZWVkcyB0byBiZSBzZW50 IHRvIHRoZSBleGFjdCBob3N0IGFuZCBhZGRyZXNzIHRoYXQgdGhlIG9yaWdpbmFsCisJICogY29u bmVjdGlvbiB1c2VkLiBTbyB3ZSBtYW51YWxseSBjcmVhdGUgdGhlIGhvc3QgYW5kIGFkZHJlc3Mg YXJyYXlzIHdpdGgKKwkgKiBhIHNpbmdsZSBlbGVtZW50IGFmdGVyIGZyZWVpbmcgdGhlIGhvc3Qg YXJyYXkgdGhhdCB3ZSBnZW5lcmF0ZWQgZnJvbQorCSAqIHRoZSBjb25uZWN0aW9uIG9wdGlvbnMu CisJICovCisJcHFfcmVsZWFzZV9jb25uX2hvc3RzKGNhbmNlbENvbm4pOworCWNhbmNlbENvbm4t Pm5jb25uaG9zdCA9IDE7CisJY2FuY2VsQ29ubi0+bmFkZHIgPSAxOworCisJY2FuY2VsQ29ubi0+ Y29ubmhvc3QgPSBjYWxsb2MoY2FuY2VsQ29ubi0+bmNvbm5ob3N0LCBzaXplb2YocGdfY29ubl9o b3N0KSk7CisJaWYgKCFjYW5jZWxDb25uLT5jb25uaG9zdCkKKwkJZ290byBvb21fZXJyb3I7CisK KwlvcmlnaW5hbEhvc3QgPSBjb25uLT5jb25uaG9zdFtjb25uLT53aGljaGhvc3RdOworCWlmIChv cmlnaW5hbEhvc3QuaG9zdCkKKwl7CisJCWNhbmNlbENvbm4tPmNvbm5ob3N0WzBdLmhvc3QgPSBz dHJkdXAob3JpZ2luYWxIb3N0Lmhvc3QpOworCQlpZiAoIWNhbmNlbENvbm4tPmNvbm5ob3N0WzBd Lmhvc3QpCisJCQlnb3RvIG9vbV9lcnJvcjsKKwl9CisJaWYgKG9yaWdpbmFsSG9zdC5ob3N0YWRk cikKKwl7CisJCWNhbmNlbENvbm4tPmNvbm5ob3N0WzBdLmhvc3RhZGRyID0gc3RyZHVwKG9yaWdp bmFsSG9zdC5ob3N0YWRkcik7CisJCWlmICghY2FuY2VsQ29ubi0+Y29ubmhvc3RbMF0uaG9zdGFk ZHIpCisJCQlnb3RvIG9vbV9lcnJvcjsKKwl9CisJaWYgKG9yaWdpbmFsSG9zdC5wb3J0KQorCXsK KwkJY2FuY2VsQ29ubi0+Y29ubmhvc3RbMF0ucG9ydCA9IHN0cmR1cChvcmlnaW5hbEhvc3QucG9y dCk7CisJCWlmICghY2FuY2VsQ29ubi0+Y29ubmhvc3RbMF0ucG9ydCkKKwkJCWdvdG8gb29tX2Vy cm9yOworCX0KKwlpZiAob3JpZ2luYWxIb3N0LnBhc3N3b3JkKQorCXsKKwkJY2FuY2VsQ29ubi0+ Y29ubmhvc3RbMF0ucGFzc3dvcmQgPSBzdHJkdXAob3JpZ2luYWxIb3N0LnBhc3N3b3JkKTsKKwkJ aWYgKCFjYW5jZWxDb25uLT5jb25uaG9zdFswXS5wYXNzd29yZCkKKwkJCWdvdG8gb29tX2Vycm9y OworCX0KKworCWNhbmNlbENvbm4tPmFkZHIgPSBjYWxsb2MoY2FuY2VsQ29ubi0+bmFkZHIsIHNp emVvZihBZGRySW5mbykpOworCWlmICghY2FuY2VsQ29ubi0+Y29ubmhvc3QpCisJCWdvdG8gb29t X2Vycm9yOworCisJY2FuY2VsQ29ubi0+YWRkclswXS5hZGRyID0gY29ubi0+cmFkZHI7CisJY2Fu Y2VsQ29ubi0+YWRkclswXS5mYW1pbHkgPSBjb25uLT5yYWRkci5hZGRyLnNzX2ZhbWlseTsKKwor CWNhbmNlbENvbm4tPnN0YXR1cyA9IENPTk5FQ1RJT05fU1RBUlRJTkc7CisJcmV0dXJuIChQR2Nh bmNlbENvbm4gKikgY2FuY2VsQ29ubjsKKworb29tX2Vycm9yOgorCWNvbm4tPnN0YXR1cyA9IENP Tk5FQ1RJT05fQkFEOworCWxpYnBxX2FwcGVuZF9jb25uX2Vycm9yKGNhbmNlbENvbm4sICJvdXQg b2YgbWVtb3J5Iik7CisJcmV0dXJuIChQR2NhbmNlbENvbm4gKikgY2FuY2VsQ29ubjsKK30KKwor CisvKgorICoJCVBRY2FuY2VsU2VuZAorICoKKyAqIFNlbmQgYSBjYW5jZWxsYXRpb24gcmVxdWVz dCBpbiBhIGJsb2NraW5nIGZhc2hpb24uCisgKiBSZXR1cm5zIDEgaWYgc3VjY2Vzc2Z1bCAwIGlm IG5vdC4KKyAqLworaW50CitQUWNhbmNlbFNlbmQoUEdjYW5jZWxDb25uICogY2FuY2VsQ29ubikK K3sKKwlpZiAoIWNhbmNlbENvbm4gfHwgY2FuY2VsQ29ubi0+Y29ubi5zdGF0dXMgPT0gQ09OTkVD VElPTl9CQUQpCisJCXJldHVybiAxOworCisJaWYgKCFwcUNvbm5lY3REQlN0YXJ0KCZjYW5jZWxD b25uLT5jb25uKSkKKwl7CisJCWNhbmNlbENvbm4tPmNvbm4uc3RhdHVzID0gQ09OTkVDVElPTl9C QUQ7CisJCXJldHVybiAxOworCX0KKworCXJldHVybiBwcUNvbm5lY3REQkNvbXBsZXRlKCZjYW5j ZWxDb25uLT5jb25uKTsKK30KKworLyoKKyAqCQlQUWNhbmNlbFBvbGwKKyAqCisgKiBQb2xsIGEg Y2FuY2VsIGNvbm5lY3Rpb24uIEZvciB1c2FnZSBkZXRhaWxzIHNlZSBQUWNvbm5lY3RQb2xsLgor ICovCitQb3N0Z3Jlc1BvbGxpbmdTdGF0dXNUeXBlCitQUWNhbmNlbFBvbGwoUEdjYW5jZWxDb25u ICogY2FuY2VsQ29ubikKK3sKKwlQR2Nvbm4JICAgKmNvbm4gPSAoUEdjb25uICopIGNhbmNlbENv bm47CisJaW50CQkJbjsKKworCS8qCisJICogQmVmb3JlIHdlIGNhbiBjYWxsIFBRY29ubmVjdFBv bGwgd2UgZmlyc3QgbmVlZCB0byBzdGFydCB0aGUgY29ubmVjdGlvbgorCSAqIHVzaW5nIHBxQ29u bmVjdERCU3RhcnQuIE5vbi1jYW5jZWwgY29ubmVjdGlvbnMgYWxyZWFkeSBkbyB0aGlzIHdoZW5l dmVyCisJICogdGhlIGNvbm5lY3Rpb24gaXMgaW5pdGlhbGl6ZWQuIEJ1dCBjYW5jZWwgY29ubmVj dGlvbnMgd2FpdCB1bnRpbCB0aGUKKwkgKiBjYWxsZXIgc3RhcnRzIHBvbGxpbmcsIGJlY2F1c2Ug dGhlcmUgbWlnaHQgYmUgYSBsYXJnZSBkZWxheSBiZXR3ZWVuCisJICogY3JlYXRpbmcgYSBjYW5j ZWwgY29ubmVjdGlvbiBhbmQgYWN0dWFsbHkgd2FudGluZyB0byB1c2UgaXQuCisJICovCisJaWYg KGNvbm4tPnN0YXR1cyA9PSBDT05ORUNUSU9OX1NUQVJUSU5HKQorCXsKKwkJaWYgKCFwcUNvbm5l Y3REQlN0YXJ0KCZjYW5jZWxDb25uLT5jb25uKSkKKwkJeworCQkJY2FuY2VsQ29ubi0+Y29ubi5z dGF0dXMgPSBDT05ORUNUSU9OX1NUQVJURUQ7CisJCQlyZXR1cm4gUEdSRVNfUE9MTElOR19XUklU SU5HOworCQl9CisJfQorCisJLyoKKwkgKiBUaGUgcmVzdCBvZiB0aGUgY29ubmVjdGlvbiBlc3Rh Ymxpc2hlbWVudCB3ZSBsZWF2ZSB0byBQUWNvbm5lY3RQb2xsLAorCSAqIHNpbmNlIGl0J3MgdmVy eSBzaW1pbGFyIHRvIG5vcm1hbCBjb25uZWN0aW9uIGVzdGFibGlzaG1lbnQuIEJ1dCBvbmNlIHdl CisJICogZ2V0IHRvIHRoZSBDT05ORUNUSU9OX0FXQUlUSU5HX1JFU1BPTlNFIHdlIG5lZWQgdG8g ZG8gb3VyIG93biB0aGluZy4KKwkgKi8KKwlpZiAoY29ubi0+c3RhdHVzICE9IENPTk5FQ1RJT05f QVdBSVRJTkdfUkVTUE9OU0UpCisJeworCQlyZXR1cm4gUFFjb25uZWN0UG9sbChjb25uKTsKKwl9 CisKKwkvKgorCSAqIEF0IHRoaXMgcG9pbnQgd2UgYXJlIHdhaXRpbmcgb24gdGhlIHNlcnZlciB0 byBjbG9zZSB0aGUgY29ubmVjdGlvbiwKKwkgKiB3aGljaCBpcyBpdHMgd2F5IG9mIGNvbW11bmlj YXRpbmcgdGhhdCB0aGUgY2FuY2VsIGhhcyBiZWVuIGhhbmRsZWQuCisJICovCisKKwluID0gcHFS ZWFkRGF0YShjb25uKTsKKworCWlmIChuID09IDApCisJCXJldHVybiBQR1JFU19QT0xMSU5HX1JF QURJTkc7CisKKyNpZm5kZWYgV0lOMzIKKworCS8qCisJICogSWYgd2UgcmVjZWl2ZSBhbiBlcnJv ciByZXBvcnQgaXQsIGJ1dCBvbmx5IGlmIGVycm5vIGlzIG5vbi16ZXJvLgorCSAqIE90aGVyd2lz ZSB3ZSBhc3N1bWUgaXQncyBhbiBFT0YsIHdoaWNoIGlzIHdoYXQgd2UgZXhwZWN0IGZyb20gdGhl CisJICogc2VydmVyLgorCSAqCisJICogV2Ugc2tpcCB0aGlzIGZvciBXaW5kb3dzLCBiZWNhdXNl IFdpbmRvd3MgaXMgYSBiaXQgc3BlY2lhbCBpbiBpdHMgRU9GCisJICogYmVoYXZpb3VyIGZvciBU Q1AuIFNvbWV0aW1lcyBpdCB3aWxsIGVycm9yIHdpdGggYW4gRUNPTk5SRVNFVCB3aGVuCisJICog dGhlcmUgaXMgYSBjbGVhbiBjb25uZWN0aW9uIGNsb3N1cmUuIFNlZSB0aGVzZSB0aHJlYWRzIGZv ciBkZXRhaWxzOgorCSAqIGh0dHBzOi8vd3d3LnBvc3RncmVzcWwub3JnL21lc3NhZ2UtaWQvZmxh dC85MGIzNDA1Ny00MTc2LTdiYjAtMGRiYi05ODIyYTVmNjQyNWIlNDBncmVpei1yZWluc2RvcmYu ZGUKKwkgKgorCSAqIGh0dHBzOi8vd3d3LnBvc3RncmVzcWwub3JnL21lc3NhZ2UtaWQvZmxhdC9D QSUyQmhVS0clMkJPZW9FVFpRJTNEUXc1VWI1aDN0bXdRaEJtREElM0RudU5PM0tHJTNEeldmVXlw RkF3JTQwbWFpbC5nbWFpbC5jb20KKwkgKgorCSAqIFBRY2FuY2VsIGlnbm9yZXMgc3VjaCBlcnJv cnMgYW5kIHJlcG9ydHMgc3VjY2VzcyBmb3IgdGhlIGNhbmNlbGxhdGlvbgorCSAqIGFueXdheSwg c28gZXZlbiBpZiB0aGlzIGlzIG5vdCBhbHdheXMgY29ycmVjdCB3ZSBkbyB0aGUgc2FtZSBoZXJl LgorCSAqLworCWlmIChuIDwgMCAmJiBlcnJubyAhPSAwKQorCXsKKwkJY29ubi0+c3RhdHVzID0g Q09OTkVDVElPTl9CQUQ7CisJCXJldHVybiBQR1JFU19QT0xMSU5HX0ZBSUxFRDsKKwl9CisjZW5k aWYKKworCS8qCisJICogV2UgZG9uJ3QgZXhwZWN0IGFueSBkYXRhLCBvbmx5IGNvbm5lY3Rpb24g Y2xvc3VyZS4gU28gaWYgd2Ugc3RyYW5nbHkgZG8KKwkgKiByZWNlaXZlIHNvbWUgZGF0YSB3ZSBj b25zaWRlciB0aGF0IGFuIGVycm9yLgorCSAqLworCWlmIChuID4gMCkKKwl7CisKKwkJbGlicHFf YXBwZW5kX2Nvbm5fZXJyb3IoY29ubiwgInJlY2VpdmVkIHVuZXhwZWN0ZWQgcmVzcG9uc2UgZnJv bSBzZXJ2ZXIiKTsKKwkJY29ubi0+c3RhdHVzID0gQ09OTkVDVElPTl9CQUQ7CisJCXJldHVybiBQ R1JFU19QT0xMSU5HX0ZBSUxFRDsKKwl9CisKKwkvKgorCSAqIEdldHRpbmcgaGVyZSBtZWFucyB0 aGF0IHdlIHJlY2VpdmVkIGFuIEVPRi4gV2hpY2ggaXMgd2hhdCB3ZSB3ZXJlCisJICogZXhwZWN0 aW5nLiBUaGUgY2FuY2VsIHJlcXVlc3QgaGFzIGNvbXBsZXRlZC4KKwkgKi8KKwljYW5jZWxDb25u LT5jb25uLnN0YXR1cyA9IENPTk5FQ1RJT05fT0s7CisJcmVzZXRQUUV4cEJ1ZmZlcigmY29ubi0+ ZXJyb3JNZXNzYWdlKTsKKwlyZXR1cm4gUEdSRVNfUE9MTElOR19PSzsKK30KKworLyoKKyAqCQlQ UWNhbmNlbFN0YXR1cworICoKKyAqIEdldCB0aGUgc3RhdHVzIG9mIGEgY2FuY2VsIGNvbm5lY3Rp b24uCisgKi8KK0Nvbm5TdGF0dXNUeXBlCitQUWNhbmNlbFN0YXR1cyhjb25zdCBQR2NhbmNlbENv bm4gKiBjYW5jZWxDb25uKQoreworCXJldHVybiBQUXN0YXR1cygoY29uc3QgUEdjb25uICopIGNh bmNlbENvbm4pOworfQorCisvKgorICoJCVBRY2FuY2VsU29ja2V0CisgKgorICogR2V0IHRoZSBz b2NrZXQgb2YgdGhlIGNhbmNlbCBjb25uZWN0aW9uLgorICovCitpbnQKK1BRY2FuY2VsU29ja2V0 KGNvbnN0IFBHY2FuY2VsQ29ubiAqIGNhbmNlbENvbm4pCit7CisJcmV0dXJuIFBRc29ja2V0KChj b25zdCBQR2Nvbm4gKikgY2FuY2VsQ29ubik7Cit9CisKKy8qCisgKgkJUFFjYW5jZWxFcnJvck1l c3NhZ2UKKyAqCisgKiBHZXQgdGhlIHNvY2tldCBvZiB0aGUgY2FuY2VsIGNvbm5lY3Rpb24uCisg Ki8KK2NoYXIgKgorUFFjYW5jZWxFcnJvck1lc3NhZ2UoY29uc3QgUEdjYW5jZWxDb25uICogY2Fu Y2VsQ29ubikKK3sKKwlyZXR1cm4gUFFlcnJvck1lc3NhZ2UoKGNvbnN0IFBHY29ubiAqKSBjYW5j ZWxDb25uKTsKK30KKworLyoKKyAqCQlQUWNhbmNlbFJlc2V0CisgKgorICogUmVzZXRzIHRoZSBj YW5jZWwgY29ubmVjdGlvbiwgc28gaXQgY2FuIGJlIHJldXNlZCB0byBzZW5kIGEgbmV3IGNhbmNl bAorICogcmVxdWVzdC4KKyAqLwordm9pZAorUFFjYW5jZWxSZXNldChQR2NhbmNlbENvbm4gKiBj YW5jZWxDb25uKQoreworCXBxQ2xvc2VQR2Nvbm4oKFBHY29ubiAqKSBjYW5jZWxDb25uKTsKKwlj YW5jZWxDb25uLT5jb25uLnN0YXR1cyA9IENPTk5FQ1RJT05fU1RBUlRJTkc7CisJY2FuY2VsQ29u bi0+Y29ubi53aGljaGhvc3QgPSAwOworCWNhbmNlbENvbm4tPmNvbm4ud2hpY2hhZGRyID0gMDsK KwljYW5jZWxDb25uLT5jb25uLnRyeV9uZXh0X2hvc3QgPSBmYWxzZTsKKwljYW5jZWxDb25uLT5j b25uLnRyeV9uZXh0X2FkZHIgPSBmYWxzZTsKK30KKworLyoKKyAqCQlQUWNhbmNlbEZpbmlzaAor ICoKKyAqIENsb3NlcyBhbmQgZnJlZXMgdGhlIGNhbmNlbCBjb25uZWN0aW9uLgorICovCit2b2lk CitQUWNhbmNlbEZpbmlzaChQR2NhbmNlbENvbm4gKiBjYW5jZWxDb25uKQoreworCVBRZmluaXNo KChQR2Nvbm4gKikgY2FuY2VsQ29ubik7Cit9CisKKwogLyoKICAqIFBRZ2V0Q2FuY2VsOiBnZXQg YSBQR2NhbmNlbCBzdHJ1Y3R1cmUgY29ycmVzcG9uZGluZyB0byBhIGNvbm5lY3Rpb24uCiAgKgpA QCAtNTUsMzYgKzMzOSwzNiBAQCBQUWdldENhbmNlbChQR2Nvbm4gKmNvbm4pCiAJaWYgKGNvbm4t PnBndGNwX3VzZXJfdGltZW91dCAhPSBOVUxMKQogCXsKIAkJaWYgKCFwcV9wYXJzZV9pbnRfcGFy YW0oY29ubi0+cGd0Y3BfdXNlcl90aW1lb3V0LAotCQkJCQkJCSAmY2FuY2VsLT5wZ3RjcF91c2Vy X3RpbWVvdXQsCi0JCQkJCQkJIGNvbm4sICJ0Y3BfdXNlcl90aW1lb3V0IikpCisJCQkJCQkJCSZj YW5jZWwtPnBndGNwX3VzZXJfdGltZW91dCwKKwkJCQkJCQkJY29ubiwgInRjcF91c2VyX3RpbWVv dXQiKSkKIAkJCWdvdG8gZmFpbDsKIAl9CiAJaWYgKGNvbm4tPmtlZXBhbGl2ZXMgIT0gTlVMTCkK IAl7CiAJCWlmICghcHFfcGFyc2VfaW50X3BhcmFtKGNvbm4tPmtlZXBhbGl2ZXMsCi0JCQkJCQkJ ICZjYW5jZWwtPmtlZXBhbGl2ZXMsCi0JCQkJCQkJIGNvbm4sICJrZWVwYWxpdmVzIikpCisJCQkJ CQkJCSZjYW5jZWwtPmtlZXBhbGl2ZXMsCisJCQkJCQkJCWNvbm4sICJrZWVwYWxpdmVzIikpCiAJ CQlnb3RvIGZhaWw7CiAJfQogCWlmIChjb25uLT5rZWVwYWxpdmVzX2lkbGUgIT0gTlVMTCkKIAl7 CiAJCWlmICghcHFfcGFyc2VfaW50X3BhcmFtKGNvbm4tPmtlZXBhbGl2ZXNfaWRsZSwKLQkJCQkJ CQkgJmNhbmNlbC0+a2VlcGFsaXZlc19pZGxlLAotCQkJCQkJCSBjb25uLCAia2VlcGFsaXZlc19p ZGxlIikpCisJCQkJCQkJCSZjYW5jZWwtPmtlZXBhbGl2ZXNfaWRsZSwKKwkJCQkJCQkJY29ubiwg ImtlZXBhbGl2ZXNfaWRsZSIpKQogCQkJZ290byBmYWlsOwogCX0KIAlpZiAoY29ubi0+a2VlcGFs aXZlc19pbnRlcnZhbCAhPSBOVUxMKQogCXsKIAkJaWYgKCFwcV9wYXJzZV9pbnRfcGFyYW0oY29u bi0+a2VlcGFsaXZlc19pbnRlcnZhbCwKLQkJCQkJCQkgJmNhbmNlbC0+a2VlcGFsaXZlc19pbnRl cnZhbCwKLQkJCQkJCQkgY29ubiwgImtlZXBhbGl2ZXNfaW50ZXJ2YWwiKSkKKwkJCQkJCQkJJmNh bmNlbC0+a2VlcGFsaXZlc19pbnRlcnZhbCwKKwkJCQkJCQkJY29ubiwgImtlZXBhbGl2ZXNfaW50 ZXJ2YWwiKSkKIAkJCWdvdG8gZmFpbDsKIAl9CiAJaWYgKGNvbm4tPmtlZXBhbGl2ZXNfY291bnQg IT0gTlVMTCkKIAl7CiAJCWlmICghcHFfcGFyc2VfaW50X3BhcmFtKGNvbm4tPmtlZXBhbGl2ZXNf Y291bnQsCi0JCQkJCQkJICZjYW5jZWwtPmtlZXBhbGl2ZXNfY291bnQsCi0JCQkJCQkJIGNvbm4s ICJrZWVwYWxpdmVzX2NvdW50IikpCisJCQkJCQkJCSZjYW5jZWwtPmtlZXBhbGl2ZXNfY291bnQs CisJCQkJCQkJCWNvbm4sICJrZWVwYWxpdmVzX2NvdW50IikpCiAJCQlnb3RvIGZhaWw7CiAJfQog CmRpZmYgLS1naXQgYS9zcmMvaW50ZXJmYWNlcy9saWJwcS9mZS1jb25uZWN0LmMgYi9zcmMvaW50 ZXJmYWNlcy9saWJwcS9mZS1jb25uZWN0LmMKaW5kZXggOGRiYzlkMmNjNTcuLmI2M2FjNjNkNTE0 IDEwMDY0NAotLS0gYS9zcmMvaW50ZXJmYWNlcy9saWJwcS9mZS1jb25uZWN0LmMKKysrIGIvc3Jj L2ludGVyZmFjZXMvbGlicHEvZmUtY29ubmVjdC5jCkBAIC02MTYsOCArNjE2LDE3IEBAIHBxRHJv cFNlcnZlckRhdGEoUEdjb25uICpjb25uKQogCWNvbm4tPndyaXRlX2ZhaWxlZCA9IGZhbHNlOwog CWZyZWUoY29ubi0+d3JpdGVfZXJyX21zZyk7CiAJY29ubi0+d3JpdGVfZXJyX21zZyA9IE5VTEw7 Ci0JY29ubi0+YmVfcGlkID0gMDsKLQljb25uLT5iZV9rZXkgPSAwOworCisJLyoKKwkgKiBDYW5j ZWwgY29ubmVjdGlvbnMgc2hvdWxkIHNhdmUgdGhlaXIgYmVfcGlkIGFuZCBiZV9rZXkgYWNyb3Nz CisJICogUFFjYW5jZWxSZXNldCBpbnZvY2F0aW9ucy4gT3RoZXJ3aXNlIHRoZXkgd291bGQgbm90 IGhhdmUgYWNjZXNzIHRvIHRoZQorCSAqIHNlY3JldCB0b2tlbiBvZiB0aGUgY29ubmVjdGlvbiB0 aGV5IGFyZSBzdXBwb3NlZCB0byBjYW5jZWwgYW55bW9yZS4KKwkgKi8KKwlpZiAoIWNvbm4tPmNh bmNlbFJlcXVlc3QpCisJeworCQljb25uLT5iZV9waWQgPSAwOworCQljb25uLT5iZV9rZXkgPSAw OworCX0KIH0KIAogCkBAIC05MjMsNiArOTMyLDQ1IEBAIGZpbGxQR2Nvbm4oUEdjb25uICpjb25u LCBQUWNvbm5pbmZvT3B0aW9uICpjb25uT3B0aW9ucykKIAlyZXR1cm4gdHJ1ZTsKIH0KIAorLyoK KyAqIENvcHkgb3ZlciBvcHRpb24gdmFsdWVzIGZyb20gc3JjQ29ubiB0byBkc3RDb25uCisgKgor ICogRG9uJ3QgcHV0IGFueXRoaW5nIGN1dGUgaGVyZSAtLS0gaW50ZWxsaWdlbmNlIHNob3VsZCBi ZSBpbgorICogY29ubmVjdE9wdGlvbnMyIC4uLgorICoKKyAqIFJldHVybnMgdHJ1ZSBvbiBzdWNj ZXNzLiBPbiBmYWlsdXJlLCByZXR1cm5zIGZhbHNlIGFuZCBzZXRzIGVycm9yIG1lc3NhZ2Ugb2YK KyAqIGRzdENvbm4uCisgKi8KK2Jvb2wKK3BxQ29weVBHY29ubihQR2Nvbm4gKnNyY0Nvbm4sIFBH Y29ubiAqZHN0Q29ubikKK3sKKwljb25zdCBpbnRlcm5hbFBRY29ubmluZm9PcHRpb24gKm9wdGlv bjsKKworCS8qIGNvcHkgb3ZlciBjb25uZWN0aW9uIG9wdGlvbnMgKi8KKwlmb3IgKG9wdGlvbiA9 IFBRY29ubmluZm9PcHRpb25zOyBvcHRpb24tPmtleXdvcmQ7IG9wdGlvbisrKQorCXsKKwkJaWYg KG9wdGlvbi0+Y29ubm9mcyA+PSAwKQorCQl7CisJCQljb25zdCBjaGFyICoqdG1wID0gKGNvbnN0 IGNoYXIgKiopICgoY2hhciAqKSBzcmNDb25uICsgb3B0aW9uLT5jb25ub2ZzKTsKKworCQkJaWYg KCp0bXApCisJCQl7CisJCQkJY2hhcgkgICoqZHN0Q29ubm1lbWJlciA9IChjaGFyICoqKSAoKGNo YXIgKikgZHN0Q29ubiArIG9wdGlvbi0+Y29ubm9mcyk7CisKKwkJCQlpZiAoKmRzdENvbm5tZW1i ZXIpCisJCQkJCWZyZWUoKmRzdENvbm5tZW1iZXIpOworCQkJCSpkc3RDb25ubWVtYmVyID0gc3Ry ZHVwKCp0bXApOworCQkJCWlmICgqZHN0Q29ubm1lbWJlciA9PSBOVUxMKQorCQkJCXsKKwkJCQkJ bGlicHFfYXBwZW5kX2Nvbm5fZXJyb3IoZHN0Q29ubiwgIm91dCBvZiBtZW1vcnkiKTsKKwkJCQkJ cmV0dXJuIGZhbHNlOworCQkJCX0KKwkJCX0KKwkJfQorCX0KKwlyZXR1cm4gdHJ1ZTsKK30KKwog LyoKICAqCQljb25uZWN0T3B0aW9uczEKICAqCkBAIC0yMzU0LDEwICsyNDAyLDE4IEBAIHBxQ29u bmVjdERCU3RhcnQoUEdjb25uICpjb25uKQogCSAqIFNldCB1cCB0byB0cnkgdG8gY29ubmVjdCB0 byB0aGUgZmlyc3QgaG9zdC4gIChTZXR0aW5nIHdoaWNoaG9zdCA9IC0xIGlzCiAJICogYSBiaXQg b2YgYSBjaGVhdCwgYnV0IFBRY29ubmVjdFBvbGwgd2lsbCBhZHZhbmNlIGl0IHRvIDAgYmVmb3Jl CiAJICogYW55dGhpbmcgZWxzZSBsb29rcyBhdCBpdC4pCisJICoKKwkgKiBDYW5jZWwgcmVxdWVz dHMgYXJlIHNwZWNpYWwgdGhvdWdoLCB0aGV5IHNob3VsZCBvbmx5IHRyeSBvbmUgaG9zdCBhbmQK KwkgKiBhZGRyZXNzLiBUaGVzZSBmaWVsZHMgaGF2ZSBhbHJlYWR5IHNldCB1cCBpbiBQUWNhbmNl bENvbm4uIFNvIGxlYXZlCisJICogdGhlc2UgZmllbGRzIGFsb25lIGZvciBjYW5jZWwgcmVxdWVz dHMuCiAJICovCi0JY29ubi0+d2hpY2hob3N0ID0gLTE7Ci0JY29ubi0+dHJ5X25leHRfYWRkciA9 IGZhbHNlOwotCWNvbm4tPnRyeV9uZXh0X2hvc3QgPSB0cnVlOworCWlmICghY29ubi0+Y2FuY2Vs UmVxdWVzdCkKKwl7CisJCWNvbm4tPndoaWNoaG9zdCA9IC0xOworCQljb25uLT50cnlfbmV4dF9o b3N0ID0gdHJ1ZTsKKwkJY29ubi0+dHJ5X25leHRfYWRkciA9IGZhbHNlOworCX0KKwogCWNvbm4t PnN0YXR1cyA9IENPTk5FQ1RJT05fTkVFREVEOwogCiAJLyogQWxzbyByZXNldCB0aGUgdGFyZ2V0 X3NlcnZlcl90eXBlIHN0YXRlIGlmIG5lZWRlZCAqLwpAQCAtMjQ5OSw3ICsyNTU1LDEwIEBAIHBx Q29ubmVjdERCQ29tcGxldGUoUEdjb25uICpjb25uKQogCQkvKgogCQkgKiBOb3cgdHJ5IHRvIGFk dmFuY2UgdGhlIHN0YXRlIG1hY2hpbmUuCiAJCSAqLwotCQlmbGFnID0gUFFjb25uZWN0UG9sbChj b25uKTsKKwkJaWYgKGNvbm4tPmNhbmNlbFJlcXVlc3QpCisJCQlmbGFnID0gUFFjYW5jZWxQb2xs KChQR2NhbmNlbENvbm4gKikgY29ubik7CisJCWVsc2UKKwkJCWZsYWcgPSBQUWNvbm5lY3RQb2xs KGNvbm4pOwogCX0KIH0KIApAQCAtMjYyNCwxMyArMjY4MywxNyBAQCBrZWVwX2dvaW5nOgkJCQkJ CS8qIFdlIHdpbGwgY29tZSBiYWNrIHRvIGhlcmUgdW50aWwgdGhlcmUgaXMKIAkJCSAqIE9vcHMs IG5vIG1vcmUgaG9zdHMuCiAJCQkgKgogCQkJICogSWYgd2UgYXJlIHRyeWluZyB0byBjb25uZWN0 IGluICJwcmVmZXItc3RhbmRieSIgbW9kZSwgdGhlbiBkcm9wCi0JCQkgKiB0aGUgc3RhbmRieSBy ZXF1aXJlbWVudCBhbmQgc3RhcnQgb3Zlci4KKwkJCSAqIHRoZSBzdGFuZGJ5IHJlcXVpcmVtZW50 IGFuZCBzdGFydCBvdmVyLiBEb24ndCBkbyB0aGlzIGZvcgorCQkJICogY2FuY2VsIHJlcXVlc3Rz IHRob3VnaCwgc2luY2Ugd2UgYXJlIGNlcnRhaW4gdGhlIGxpc3Qgb2YKKwkJCSAqIHNlcnZlcnMg d29uJ3QgY2hhbmdlIGFzIHRoZSB0YXJnZXRfc2VydmVyX3R5cGUgb3B0aW9uIGlzIG5vdAorCQkJ ICogYXBwbGljYWJsZSB0byB0aG9zZSBjb25uZWN0aW9ucy4KIAkJCSAqCiAJCQkgKiBPdGhlcndp c2UsIGFuIGFwcHJvcHJpYXRlIGVycm9yIG1lc3NhZ2UgaXMgYWxyZWFkeSBzZXQgdXAsIHNvCiAJ CQkgKiB3ZSBqdXN0IG5lZWQgdG8gc2V0IHRoZSByaWdodCBzdGF0dXMuCiAJCQkgKi8KIAkJCWlm IChjb25uLT50YXJnZXRfc2VydmVyX3R5cGUgPT0gU0VSVkVSX1RZUEVfUFJFRkVSX1NUQU5EQlkg JiYKLQkJCQljb25uLT5uY29ubmhvc3QgPiAwKQorCQkJCWNvbm4tPm5jb25uaG9zdCA+IDAgJiYK KwkJCQkhY29ubi0+Y2FuY2VsUmVxdWVzdCkKIAkJCXsKIAkJCQljb25uLT50YXJnZXRfc2VydmVy X3R5cGUgPSBTRVJWRVJfVFlQRV9QUkVGRVJfU1RBTkRCWV9QQVNTMjsKIAkJCQljb25uLT53aGlj aGhvc3QgPSAwOwpAQCAtMzI3Miw2ICszMzM1LDI5IEBAIGtlZXBfZ29pbmc6CQkJCQkJLyogV2Ug d2lsbCBjb21lIGJhY2sgdG8gaGVyZSB1bnRpbCB0aGVyZSBpcwogCQkJCX0KICNlbmRpZgkJCQkJ CQkvKiBVU0VfU1NMICovCiAKKwkJCQkvKgorCQkJCSAqIEZvciBjYW5jZWwgcmVxdWVzdHMgdGhp cyBpcyBhcyBmYXIgYXMgd2UgbmVlZCB0byBnbyBpbiB0aGUKKwkJCQkgKiBjb25uZWN0aW9uIGVz dGFibGlzaG1lbnQuIE5vdyB3ZSBjYW4gYWN0dWFsbHkgc2VuZCBvdXIKKwkJCQkgKiBjYW5jZWxs YXRpb24gcmVxdWVzdC4KKwkJCQkgKi8KKwkJCQlpZiAoY29ubi0+Y2FuY2VsUmVxdWVzdCkKKwkJ CQl7CisJCQkJCUNhbmNlbFJlcXVlc3RQYWNrZXQgY2FuY2VscGFja2V0OworCisJCQkJCXBhY2tl dGxlbiA9IHNpemVvZihjYW5jZWxwYWNrZXQpOworCQkJCQljYW5jZWxwYWNrZXQuY2FuY2VsUmVx dWVzdENvZGUgPSAoTXNnVHlwZSkgcGdfaHRvbjMyKENBTkNFTF9SRVFVRVNUX0NPREUpOworCQkJ CQljYW5jZWxwYWNrZXQuYmFja2VuZFBJRCA9IHBnX2h0b24zMihjb25uLT5iZV9waWQpOworCQkJ CQljYW5jZWxwYWNrZXQuY2FuY2VsQXV0aENvZGUgPSBwZ19odG9uMzIoY29ubi0+YmVfa2V5KTsK KwkJCQkJaWYgKHBxUGFja2V0U2VuZChjb25uLCAwLCAmY2FuY2VscGFja2V0LCBwYWNrZXRsZW4p ICE9IFNUQVRVU19PSykKKwkJCQkJeworCQkJCQkJbGlicHFfYXBwZW5kX2Nvbm5fZXJyb3IoY29u biwgImNvdWxkIG5vdCBzZW5kIGNhbmNlbCBwYWNrZXQ6ICVzIiwKKwkJCQkJCQkJCQkJCVNPQ0tf U1RSRVJST1IoU09DS19FUlJOTywgc2VidWYsIHNpemVvZihzZWJ1ZikpKTsKKwkJCQkJCWdvdG8g ZXJyb3JfcmV0dXJuOworCQkJCQl9CisJCQkJCWNvbm4tPnN0YXR1cyA9IENPTk5FQ1RJT05fQVdB SVRJTkdfUkVTUE9OU0U7CisJCQkJCXJldHVybiBQR1JFU19QT0xMSU5HX1JFQURJTkc7CisJCQkJ fQorCiAJCQkJLyoKIAkJCQkgKiBCdWlsZCB0aGUgc3RhcnR1cCBwYWNrZXQuCiAJCQkJICovCkBA IC00MDIxLDggKzQxMDcsMTQgQEAga2VlcF9nb2luZzoJCQkJCQkvKiBXZSB3aWxsIGNvbWUgYmFj ayB0byBoZXJlIHVudGlsIHRoZXJlIGlzCiAJCQkJCX0KIAkJCQl9CiAKLQkJCQkvKiBXZSBjYW4g cmVsZWFzZSB0aGUgYWRkcmVzcyBsaXN0IG5vdy4gKi8KLQkJCQlyZWxlYXNlX2Nvbm5fYWRkcmlu Zm8oY29ubik7CisJCQkJLyoKKwkJCQkgKiBGb3Igbm9uIGNhbmNlbCByZXF1ZXN0cyB3ZSBjYW4g cmVsZWFzZSB0aGUgYWRkcmVzcyBsaXN0CisJCQkJICogbm93LiBGb3IgY2FuY2VsIHJlcXVlc3Rz IHdlIG5ldmVyIGFjdHVhbGx5IHJlc29sdmUKKwkJCQkgKiBhZGRyZXNzZXMgYW5kIGluc3RlYWQg dGhlIGFkZHJpbmZvIGV4aXN0cyBmb3IgdGhlIGxpZmV0aW1lCisJCQkJICogb2YgdGhlIGNvbm5l Y3Rpb24uCisJCQkJICovCisJCQkJaWYgKCFjb25uLT5jYW5jZWxSZXF1ZXN0KQorCQkJCQlyZWxl YXNlX2Nvbm5fYWRkcmluZm8oY29ubik7CiAKIAkJCQkvKgogCQkJCSAqIENvbnRlbnRzIG9mIGNv bm4tPmVycm9yTWVzc2FnZSBhcmUgbm8gbG9uZ2VyIGludGVyZXN0aW5nCkBAIC00MzkwLDYgKzQ0 ODIsNyBAQCBmcmVlUEdjb25uKFBHY29ubiAqY29ubikKIAkJZnJlZShjb25uLT5ldmVudHNbaV0u bmFtZSk7CiAJfQogCisJcmVsZWFzZV9jb25uX2FkZHJpbmZvKGNvbm4pOwogCXBxX3JlbGVhc2Vf Y29ubl9ob3N0cyhjb25uKTsKIAogCWZyZWUoY29ubi0+Y2xpZW50X2VuY29kaW5nX2luaXRpYWwp OwpAQCAtNDU0MSw2ICs0NjM0LDE1IEBAIHBxX3JlbGVhc2VfY29ubl9ob3N0cyhQR2Nvbm4gKmNv bm4pCiBzdGF0aWMgdm9pZAogc2VuZFRlcm1pbmF0ZUNvbm4oUEdjb25uICpjb25uKQogeworCS8q CisJICogVGhlIFBvc3RncmVzIGNhbmNlbGxhdGlvbiBwcm90b2NvbCBkb2VzIG5vdCBoYXZlIGEg bm90aW9uIG9mIGEKKwkgKiBUZXJtaW5hdGUgbWVzc2FnZSwgc28gZG9uJ3Qgc2VuZCBvbmUuCisJ ICovCisJaWYgKGNvbm4tPmNhbmNlbFJlcXVlc3QpCisJeworCQlyZXR1cm47CisJfQorCiAJLyoK IAkgKiBOb3RlIHRoYXQgdGhlIHByb3RvY29sIGRvZXNuJ3QgYWxsb3cgdXMgdG8gc2VuZCBUZXJt aW5hdGUgbWVzc2FnZXMKIAkgKiBkdXJpbmcgdGhlIHN0YXJ0dXAgcGhhc2UuCkBAIC00NTk0LDcg KzQ2OTYsMTMgQEAgcHFDbG9zZVBHY29ubihQR2Nvbm4gKmNvbm4pCiAJY29ubi0+cGlwZWxpbmVT dGF0dXMgPSBQUV9QSVBFTElORV9PRkY7CiAJcHFDbGVhckFzeW5jUmVzdWx0KGNvbm4pOwkvKiBk ZWFsbG9jYXRlIHJlc3VsdCAqLwogCXBxQ2xlYXJDb25uRXJyb3JTdGF0ZShjb25uKTsKLQlyZWxl YXNlX2Nvbm5fYWRkcmluZm8oY29ubik7CisKKwkvKgorCSAqIFNpbmNlIGNhbmNlbCByZXF1ZXN0 cyBuZXZlciBjaGFuZ2UgdGhlaXIgYWRkcmluZm8gd2UgZG9uJ3QgZnJlZSBpdAorCSAqIGhlcmUu IE90aGVyd2lzZSB3ZSB3b3VsZCBoYXZlIHRvIHJlYnVpbGQgaXQgZHVyaW5nIGEgUFFjYW5jZWxS ZXNldC4KKwkgKi8KKwlpZiAoIWNvbm4tPmNhbmNlbFJlcXVlc3QpCisJCXJlbGVhc2VfY29ubl9h ZGRyaW5mbyhjb25uKTsKIAogCS8qIFJlc2V0IGFsbCBzdGF0ZSBvYnRhaW5lZCBmcm9tIHNlcnZl ciwgdG9vICovCiAJcHFEcm9wU2VydmVyRGF0YShjb25uKTsKZGlmZiAtLWdpdCBhL3NyYy9pbnRl cmZhY2VzL2xpYnBxL2xpYnBxLWZlLmggYi9zcmMvaW50ZXJmYWNlcy9saWJwcS9saWJwcS1mZS5o CmluZGV4IGRlZmM0MTVmYTNmLi44NTdiYTU0ZDk0MyAxMDA2NDQKLS0tIGEvc3JjL2ludGVyZmFj ZXMvbGlicHEvbGlicHEtZmUuaAorKysgYi9zcmMvaW50ZXJmYWNlcy9saWJwcS9saWJwcS1mZS5o CkBAIC03OCw3ICs3OCw5IEBAIHR5cGVkZWYgZW51bQogCUNPTk5FQ1RJT05fQ09OU1VNRSwJCQkv KiBDb25zdW1pbmcgYW55IGV4dHJhIG1lc3NhZ2VzLiAqLwogCUNPTk5FQ1RJT05fR1NTX1NUQVJU VVAsCQkvKiBOZWdvdGlhdGluZyBHU1NBUEkuICovCiAJQ09OTkVDVElPTl9DSEVDS19UQVJHRVQs CS8qIENoZWNraW5nIHRhcmdldCBzZXJ2ZXIgcHJvcGVydGllcy4gKi8KLQlDT05ORUNUSU9OX0NI RUNLX1NUQU5EQlkJLyogQ2hlY2tpbmcgaWYgc2VydmVyIGlzIGluIHN0YW5kYnkgbW9kZS4gKi8K KwlDT05ORUNUSU9OX0NIRUNLX1NUQU5EQlksCS8qIENoZWNraW5nIGlmIHNlcnZlciBpcyBpbiBz dGFuZGJ5IG1vZGUuICovCisJQ09OTkVDVElPTl9TVEFSVElORwkJCS8qIFdhaXRpbmcgZm9yIGNv bm5lY3Rpb24gYXR0ZW1wdCB0byBiZQorCQkJCQkJCQkgKiBzdGFydGVkLiAgKi8KIH0gQ29ublN0 YXR1c1R5cGU7CiAKIHR5cGVkZWYgZW51bQpAQCAtMTY1LDYgKzE2NywxMSBAQCB0eXBlZGVmIGVu dW0KICAqLwogdHlwZWRlZiBzdHJ1Y3QgcGdfY29ubiBQR2Nvbm47CiAKKy8qIFBHY2FuY2VsQ29u biBlbmNhcHN1bGF0ZXMgYSBjYW5jZWwgY29ubmVjdGlvbiB0byB0aGUgYmFja2VuZC4KKyAqIFRo ZSBjb250ZW50cyBvZiB0aGlzIHN0cnVjdCBhcmUgbm90IHN1cHBvc2VkIHRvIGJlIGtub3duIHRv IGFwcGxpY2F0aW9ucy4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgcGdfY2FuY2VsX2Nvbm4gUEdjYW5j ZWxDb25uOworCiAvKiBQR3Jlc3VsdCBlbmNhcHN1bGF0ZXMgdGhlIHJlc3VsdCBvZiBhIHF1ZXJ5 IChvciBtb3JlIHByZWNpc2VseSwgb2YgYSBzaW5nbGUKICAqIFNRTCBjb21tYW5kIC0tLSBhIHF1 ZXJ5IHN0cmluZyBnaXZlbiB0byBQUXNlbmRRdWVyeSBjYW4gY29udGFpbiBtdWx0aXBsZQogICog Y29tbWFuZHMgYW5kIHRodXMgcmV0dXJuIG11bHRpcGxlIFBHcmVzdWx0IG9iamVjdHMpLgpAQCAt MzIxLDE2ICszMjgsMzAgQEAgZXh0ZXJuIFBvc3RncmVzUG9sbGluZ1N0YXR1c1R5cGUgUFFyZXNl dFBvbGwoUEdjb25uICpjb25uKTsKIC8qIFN5bmNocm9ub3VzIChibG9ja2luZykgKi8KIGV4dGVy biB2b2lkIFBRcmVzZXQoUEdjb25uICpjb25uKTsKIAorLyogQ3JlYXRlIGEgUEdjYW5jZWxDb25u IHRoYXQncyB1c2VkIHRvIGNhbmNlbCBhIHF1ZXJ5IG9uIHRoZSBnaXZlbiBQR2Nvbm4gKi8KK2V4 dGVybiBQR2NhbmNlbENvbm4gKiBQUWNhbmNlbENvbm4oUEdjb25uICpjb25uKTsKKy8qIGlzc3Vl IGEgYmxvY2tpbmcgY2FuY2VsIHJlcXVlc3QgKi8KK2V4dGVybiBpbnQJUFFjYW5jZWxTZW5kKFBH Y2FuY2VsQ29ubiAqIGNvbm4pOworCisvKiBpc3N1ZSBvciBwb2xsIGEgbm9uLWJsb2NraW5nIGNh bmNlbCByZXF1ZXN0ICovCitleHRlcm4gUG9zdGdyZXNQb2xsaW5nU3RhdHVzVHlwZSBQUWNhbmNl bFBvbGwoUEdjYW5jZWxDb25uICogY2FuY2VsQ29ubik7CitleHRlcm4gQ29ublN0YXR1c1R5cGUg UFFjYW5jZWxTdGF0dXMoY29uc3QgUEdjYW5jZWxDb25uICogY2FuY2VsQ29ubik7CitleHRlcm4g aW50CVBRY2FuY2VsU29ja2V0KGNvbnN0IFBHY2FuY2VsQ29ubiAqIGNhbmNlbENvbm4pOworZXh0 ZXJuIGNoYXIgKlBRY2FuY2VsRXJyb3JNZXNzYWdlKGNvbnN0IFBHY2FuY2VsQ29ubiAqIGNhbmNl bENvbm4pOworZXh0ZXJuIHZvaWQgUFFjYW5jZWxSZXNldChQR2NhbmNlbENvbm4gKiBjYW5jZWxD b25uKTsKK2V4dGVybiB2b2lkIFBRY2FuY2VsRmluaXNoKFBHY2FuY2VsQ29ubiAqIGNhbmNlbENv bm4pOworCisKIC8qIHJlcXVlc3QgYSBjYW5jZWwgc3RydWN0dXJlICovCiBleHRlcm4gUEdjYW5j ZWwgKlBRZ2V0Q2FuY2VsKFBHY29ubiAqY29ubik7CiAKIC8qIGZyZWUgYSBjYW5jZWwgc3RydWN0 dXJlICovCiBleHRlcm4gdm9pZCBQUWZyZWVDYW5jZWwoUEdjYW5jZWwgKmNhbmNlbCk7CiAKLS8q IGlzc3VlIGEgY2FuY2VsIHJlcXVlc3QgKi8KKy8qIGEgbGVzcyBzZWN1cmUgdmVyc2lvbiBvZiBQ UWNhbmNlbFNlbmQsIGJ1dCBvbmUgd2hpY2ggaXMgc2lnbmFsLXNhZmUgKi8KIGV4dGVybiBpbnQJ UFFjYW5jZWwoUEdjYW5jZWwgKmNhbmNlbCwgY2hhciAqZXJyYnVmLCBpbnQgZXJyYnVmc2l6ZSk7 CiAKLS8qIGJhY2t3YXJkcyBjb21wYXRpYmxlIHZlcnNpb24gb2YgUFFjYW5jZWw7IG5vdCB0aHJl YWQtc2FmZSAqLworLyogZGVwcmVjYXRlZCB2ZXJzaW9uIG9mIFBRY2FuY2VsOyBub3QgdGhyZWFk LXNhZmUgKi8KIGV4dGVybiBpbnQJUFFyZXF1ZXN0Q2FuY2VsKFBHY29ubiAqY29ubik7CiAKIC8q IEFjY2Vzc29yIGZ1bmN0aW9ucyBmb3IgUEdjb25uIG9iamVjdHMgKi8KZGlmZiAtLWdpdCBhL3Ny Yy9pbnRlcmZhY2VzL2xpYnBxL2xpYnBxLWludC5oIGIvc3JjL2ludGVyZmFjZXMvbGlicHEvbGli cHEtaW50LmgKaW5kZXggYjFlMWJkNjMzMWYuLjk0OTkwMjkyYTA0IDEwMDY0NAotLS0gYS9zcmMv aW50ZXJmYWNlcy9saWJwcS9saWJwcS1pbnQuaAorKysgYi9zcmMvaW50ZXJmYWNlcy9saWJwcS9s aWJwcS1pbnQuaApAQCAtNDA5LDYgKzQwOSwxMCBAQCBzdHJ1Y3QgcGdfY29ubgogCWNoYXIJICAg KnJlcXVpcmVfYXV0aDsJLyogbmFtZSBvZiB0aGUgZXhwZWN0ZWQgYXV0aCBtZXRob2QgKi8KIAlj aGFyCSAgICpsb2FkX2JhbGFuY2VfaG9zdHM7IC8qIGxvYWQgYmFsYW5jZSBvdmVyIGhvc3RzICov CiAKKwlib29sCQljYW5jZWxSZXF1ZXN0OwkvKiB0cnVlIGlmIHRoaXMgY29ubmVjdGlvbiBpcyB1 c2VkIHRvIHNlbmQgYQorCQkJCQkJCQkgKiBjYW5jZWwgcmVxdWVzdCwgaW5zdGVhZCBvZiBiZWlu ZyBhIG5vcm1hbAorCQkJCQkJCQkgKiBjb25uZWN0aW9uIHRoYXQncyB1c2VkIGZvciBxdWVyaWVz ICovCisKIAkvKiBPcHRpb25hbCBmaWxlIHRvIHdyaXRlIHRyYWNlIGluZm8gdG8gKi8KIAlGSUxF CSAgICpQZmRlYnVnOwogCWludAkJCXRyYWNlRmxhZ3M7CkBAIC02MjEsNiArNjI1LDExIEBAIHN0 cnVjdCBwZ19jb25uCiAJUFFFeHBCdWZmZXJEYXRhIHdvcmtCdWZmZXI7IC8qIGV4cGFuc2libGUg c3RyaW5nICovCiB9OwogCitzdHJ1Y3QgcGdfY2FuY2VsX2Nvbm4KK3sKKwlQR2Nvbm4JCWNvbm47 Cit9OworCiAvKiBQR2NhbmNlbCBzdG9yZXMgYWxsIGRhdGEgbmVjZXNzYXJ5IHRvIGNhbmNlbCBh IGNvbm5lY3Rpb24uIEEgY29weSBvZiB0aGlzCiAgKiBkYXRhIGlzIHJlcXVpcmVkIHRvIHNhZmVs eSBjYW5jZWwgYSBjb25uZWN0aW9uIHJ1bm5pbmcgb24gYSBkaWZmZXJlbnQKICAqIHRocmVhZC4K QEAgLTY3OCw2ICs2ODcsNyBAQCBleHRlcm4gdm9pZCBwcURyb3BDb25uZWN0aW9uKFBHY29ubiAq Y29ubiwgYm9vbCBmbHVzaElucHV0KTsKIGV4dGVybiBpbnQJcHFQYWNrZXRTZW5kKFBHY29ubiAq Y29ubiwgY2hhciBwYWNrX3R5cGUsCiAJCQkJCQkgY29uc3Qgdm9pZCAqYnVmLCBzaXplX3QgYnVm X2xlbik7CiBleHRlcm4gYm9vbCBwcUdldEhvbWVEaXJlY3RvcnkoY2hhciAqYnVmLCBpbnQgYnVm c2l6ZSk7CitleHRlcm4gYm9vbCBwcUNvcHlQR2Nvbm4oUEdjb25uICpzcmNDb25uLCBQR2Nvbm4g KmRzdENvbm4pOwogZXh0ZXJuIGJvb2wgcHFfcGFyc2VfaW50X3BhcmFtKGNvbnN0IGNoYXIgKnZh bHVlLCBpbnQgKnJlc3VsdCwgUEdjb25uICpjb25uLAogCQkJCQkJCSAgIGNvbnN0IGNoYXIgKmNv bnRleHQpOwogZXh0ZXJuIHZvaWQgcHFfcmVsZWFzZV9jb25uX2hvc3RzKFBHY29ubiAqY29ubik7 CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9tb2R1bGVzL2xpYnBxX3BpcGVsaW5lL2xpYnBxX3BpcGVs aW5lLmMgYi9zcmMvdGVzdC9tb2R1bGVzL2xpYnBxX3BpcGVsaW5lL2xpYnBxX3BpcGVsaW5lLmMK aW5kZXggNWY0M2FhNDBkZTQuLjU4MDAwMzAwMmU0IDEwMDY0NAotLS0gYS9zcmMvdGVzdC9tb2R1 bGVzL2xpYnBxX3BpcGVsaW5lL2xpYnBxX3BpcGVsaW5lLmMKKysrIGIvc3JjL3Rlc3QvbW9kdWxl cy9saWJwcV9waXBlbGluZS9saWJwcV9waXBlbGluZS5jCkBAIC04Niw2ICs4NiwyNjQgQEAgcGdf ZmF0YWxfaW1wbChpbnQgbGluZSwgY29uc3QgY2hhciAqZm10LC4uLikKIAlleGl0KDEpOwogfQog CisvKgorICogQ2hlY2sgdGhhdCB0aGUgcXVlcnkgb24gdGhlIGdpdmVuIGNvbm5lY3Rpb24gZ290 IGNhbmNlbGVkLgorICoKKyAqIFRoaXMgaXMgYSBmdW5jdGlvbiB3cmFwcGVkIGluIGEgbWFjcm8g dG8gbWFrZSB0aGUgcmVwb3J0ZWQgbGluZSBudW1iZXIKKyAqIGluIGFuIGVycm9yIG1hdGNoIHRo ZSBsaW5lIG51bWJlciBvZiB0aGUgaW52b2NhdGlvbi4KKyAqLworI2RlZmluZSBjb25maXJtX3F1 ZXJ5X2NhbmNlbGVkKGNvbm4pIGNvbmZpcm1fcXVlcnlfY2FuY2VsZWRfaW1wbChfX0xJTkVfXywg Y29ubikKK3N0YXRpYyB2b2lkCitjb25maXJtX3F1ZXJ5X2NhbmNlbGVkX2ltcGwoaW50IGxpbmUs IFBHY29ubiAqY29ubikKK3sKKwlQR3Jlc3VsdCAgICpyZXMgPSBOVUxMOworCisJcmVzID0gUFFn ZXRSZXN1bHQoY29ubik7CisJaWYgKHJlcyA9PSBOVUxMKQorCQlwZ19mYXRhbF9pbXBsKGxpbmUs ICJQUWdldFJlc3VsdCByZXR1cm5lZCBudWxsOiAlcyIsCisJCQkJCSAgUFFlcnJvck1lc3NhZ2Uo Y29ubikpOworCWlmIChQUXJlc3VsdFN0YXR1cyhyZXMpICE9IFBHUkVTX0ZBVEFMX0VSUk9SKQor CQlwZ19mYXRhbF9pbXBsKGxpbmUsICJxdWVyeSBkaWQgbm90IGZhaWwgd2hlbiBpdCB3YXMgZXhw ZWN0ZWQiKTsKKwlpZiAoc3RyY21wKFBRcmVzdWx0RXJyb3JGaWVsZChyZXMsIFBHX0RJQUdfU1FM U1RBVEUpLCAiNTcwMTQiKSAhPSAwKQorCQlwZ19mYXRhbF9pbXBsKGxpbmUsICJxdWVyeSBmYWls ZWQgd2l0aCBhIGRpZmZlcmVudCBlcnJvciB0aGFuIGNhbmNlbGxhdGlvbjogJXMiLAorCQkJCQkg IFBRZXJyb3JNZXNzYWdlKGNvbm4pKTsKKwlQUWNsZWFyKHJlcyk7CisJd2hpbGUgKFBRaXNCdXN5 KGNvbm4pKQorCXsKKwkJUFFjb25zdW1lSW5wdXQoY29ubik7CisJfQorfQorCisjZGVmaW5lIHNl bmRfY2FuY2VsbGFibGVfcXVlcnkoY29ubiwgbW9uaXRvckNvbm4pIHNlbmRfY2FuY2VsbGFibGVf cXVlcnlfaW1wbChfX0xJTkVfXywgY29ubiwgbW9uaXRvckNvbm4pCitzdGF0aWMgdm9pZAorc2Vu ZF9jYW5jZWxsYWJsZV9xdWVyeV9pbXBsKGludCBsaW5lLCBQR2Nvbm4gKmNvbm4sIFBHY29ubiAq bW9uaXRvckNvbm4pCit7CisJY29uc3QgY2hhciAqZW52X3dhaXQ7CisJY29uc3QgT2lkCXBhcmFt VHlwZXNbMV0gPSB7SU5UNE9JRH07CisKKwllbnZfd2FpdCA9IGdldGVudigiUEdfVEVTVF9USU1F T1VUX0RFRkFVTFQiKTsKKwlpZiAoZW52X3dhaXQgPT0gTlVMTCkKKwkJZW52X3dhaXQgPSAiMTgw IjsKKworCWlmIChQUXNlbmRRdWVyeVBhcmFtcyhjb25uLCAiU0VMRUNUIHBnX3NsZWVwKCQxKSIs IDEsIHBhcmFtVHlwZXMsICZlbnZfd2FpdCwgTlVMTCwgTlVMTCwgMCkgIT0gMSkKKwkJcGdfZmF0 YWxfaW1wbChsaW5lLCAiZmFpbGVkIHRvIHNlbmQgcXVlcnk6ICVzIiwgUFFlcnJvck1lc3NhZ2Uo Y29ubikpOworCisJLyoKKwkgKiBXYWl0IHVudGlsIHRoZSBxdWVyeSBpcyBhY3R1YWxseSBydW5u aW5nLiBPdGhlcndpc2Ugc2VuZGluZyBhCisJICogY2FuY2VsbGF0aW9uIHJlcXVlc3QgbWlnaHQg bm90IGNhbmNlbCB0aGUgcXVlcnkgZHVlIHRvIHJhY2UgY29uZGl0aW9ucy4KKwkgKi8KKwl3aGls ZSAodHJ1ZSkKKwl7CisJCWNoYXIJICAgKnZhbHVlID0gTlVMTDsKKwkJUEdyZXN1bHQgICAqcmVz ID0gUFFleGVjKAorCQkJCQkJCQkgbW9uaXRvckNvbm4sCisJCQkJCQkJCSAiU0VMRUNUIGNvdW50 KCopIEZST00gcGdfc3RhdF9hY3Rpdml0eSBXSEVSRSAiCisJCQkJCQkJCSAicXVlcnkgPSAnU0VM RUNUIHBnX3NsZWVwKCQxKScgIgorCQkJCQkJCQkgIkFORCBzdGF0ZSA9ICdhY3RpdmUnIik7CisK KwkJaWYgKFBRcmVzdWx0U3RhdHVzKHJlcykgIT0gUEdSRVNfVFVQTEVTX09LKQorCQl7CisJCQlw Z19mYXRhbCgiQ29ubmVjdGlvbiB0byBkYXRhYmFzZSBmYWlsZWQ6ICVzIiwgUFFlcnJvck1lc3Nh Z2UobW9uaXRvckNvbm4pKTsKKwkJfQorCQlpZiAoUFFudHVwbGVzKHJlcykgIT0gMSkKKwkJewor CQkJcGdfZmF0YWwoInVuZXhwZWN0ZWQgbnVtYmVyIG9mIHJvd3MgcmVjZWl2ZWQ6ICVkIiwgUFFu dHVwbGVzKHJlcykpOworCQl9CisJCWlmIChQUW5maWVsZHMocmVzKSAhPSAxKQorCQl7CisJCQlw Z19mYXRhbCgidW5leHBlY3RlZCBudW1iZXIgb2YgY29sdW1ucyByZWNlaXZlZDogJWQiLCBQUW5m aWVsZHMocmVzKSk7CisJCX0KKwkJdmFsdWUgPSBQUWdldHZhbHVlKHJlcywgMCwgMCk7CisJCWlm ICgqdmFsdWUgIT0gJzAnKQorCQl7CisJCQlQUWNsZWFyKHJlcyk7CisJCQlicmVhazsKKwkJfQor CQlQUWNsZWFyKHJlcyk7CisKKwkJLyoKKwkJICogd2FpdCAxMG1zIGJlZm9yZSBwb2xsaW5nIGFn YWluCisJCSAqLworCQlwZ191c2xlZXAoMTAwMDApOworCX0KK30KKworc3RhdGljIHZvaWQKK3Rl c3RfY2FuY2VsKFBHY29ubiAqY29ubiwgY29uc3QgY2hhciAqY29ubmluZm8pCit7CisJUEdjYW5j ZWwgICAqY2FuY2VsID0gTlVMTDsKKwlQR2NhbmNlbENvbm4gKmNhbmNlbENvbm4gPSBOVUxMOwor CVBHY29ubgkgICAqbW9uaXRvckNvbm4gPSBOVUxMOworCWNoYXIJCWVycm9yYnVmWzI1Nl07CisK KwlmcHJpbnRmKHN0ZGVyciwgInRlc3QgY2FuY2VsbGF0aW9ucy4uLiAiKTsKKworCWlmIChQUXNl dG5vbmJsb2NraW5nKGNvbm4sIDEpICE9IDApCisJCXBnX2ZhdGFsKCJmYWlsZWQgdG8gc2V0IG5v bmJsb2NraW5nIG1vZGU6ICVzIiwgUFFlcnJvck1lc3NhZ2UoY29ubikpOworCisJLyoKKwkgKiBN YWtlIGEgY29ubmVjdGlvbiB0byB0aGUgZGF0YWJhc2UgdG8gbW9uaXRvciB0aGUgcXVlcnkgb24g dGhlIG1haW4KKwkgKiBjb25uZWN0aW9uLgorCSAqLworCW1vbml0b3JDb25uID0gUFFjb25uZWN0 ZGIoY29ubmluZm8pOworCWlmIChQUXN0YXR1cyhjb25uKSAhPSBDT05ORUNUSU9OX09LKQorCXsK KwkJcGdfZmF0YWwoIkNvbm5lY3Rpb24gdG8gZGF0YWJhc2UgZmFpbGVkOiAlcyIsCisJCQkJIFBR ZXJyb3JNZXNzYWdlKGNvbm4pKTsKKwl9CisKKwkvKiB0ZXN0IFBRY2FuY2VsICovCisJc2VuZF9j YW5jZWxsYWJsZV9xdWVyeShjb25uLCBtb25pdG9yQ29ubik7CisJY2FuY2VsID0gUFFnZXRDYW5j ZWwoY29ubik7CisJaWYgKCFQUWNhbmNlbChjYW5jZWwsIGVycm9yYnVmLCBzaXplb2YoZXJyb3Ji dWYpKSkKKwl7CisJCXBnX2ZhdGFsKCJmYWlsZWQgdG8gcnVuIFBRY2FuY2VsOiAlcyIsIGVycm9y YnVmKTsKKwl9OworCWNvbmZpcm1fcXVlcnlfY2FuY2VsZWQoY29ubik7CisKKwkvKiBQR2NhbmNl bCBvYmplY3QgY2FuIGJlIHJldXNlZCBmb3IgdGhlIG5leHQgcXVlcnkgKi8KKwlzZW5kX2NhbmNl bGxhYmxlX3F1ZXJ5KGNvbm4sIG1vbml0b3JDb25uKTsKKwlpZiAoIVBRY2FuY2VsKGNhbmNlbCwg ZXJyb3JidWYsIHNpemVvZihlcnJvcmJ1ZikpKQorCXsKKwkJcGdfZmF0YWwoImZhaWxlZCB0byBy dW4gUFFjYW5jZWw6ICVzIiwgZXJyb3JidWYpOworCX07CisJY29uZmlybV9xdWVyeV9jYW5jZWxl ZChjb25uKTsKKworCVBRZnJlZUNhbmNlbChjYW5jZWwpOworCisJLyogdGVzdCBQUXJlcXVlc3RD YW5jZWwgKi8KKwlzZW5kX2NhbmNlbGxhYmxlX3F1ZXJ5KGNvbm4sIG1vbml0b3JDb25uKTsKKwlp ZiAoIVBRcmVxdWVzdENhbmNlbChjb25uKSkKKwkJcGdfZmF0YWwoImZhaWxlZCB0byBydW4gUFFy ZXF1ZXN0Q2FuY2VsOiAlcyIsIFBRZXJyb3JNZXNzYWdlKGNvbm4pKTsKKwljb25maXJtX3F1ZXJ5 X2NhbmNlbGVkKGNvbm4pOworCisJLyogdGVzdCBQUWNhbmNlbFNlbmQgKi8KKwlzZW5kX2NhbmNl bGxhYmxlX3F1ZXJ5KGNvbm4sIG1vbml0b3JDb25uKTsKKwljYW5jZWxDb25uID0gUFFjYW5jZWxD b25uKGNvbm4pOworCWlmICghUFFjYW5jZWxTZW5kKGNhbmNlbENvbm4pKQorCQlwZ19mYXRhbCgi ZmFpbGVkIHRvIHJ1biBQUWNhbmNlbFNlbmQ6ICVzIiwgUFFjYW5jZWxFcnJvck1lc3NhZ2UoY2Fu Y2VsQ29ubikpOworCWNvbmZpcm1fcXVlcnlfY2FuY2VsZWQoY29ubik7CisJUFFjYW5jZWxGaW5p c2goY2FuY2VsQ29ubik7CisKKwkvKiB0ZXN0IFBRY2FuY2VsQ29ubiBhbmQgdGhlbiBwb2xsaW5n IHdpdGggUFFjYW5jZWxQb2xsICovCisJc2VuZF9jYW5jZWxsYWJsZV9xdWVyeShjb25uLCBtb25p dG9yQ29ubik7CisJY2FuY2VsQ29ubiA9IFBRY2FuY2VsQ29ubihjb25uKTsKKwlpZiAoUFFjYW5j ZWxTdGF0dXMoY2FuY2VsQ29ubikgPT0gQ09OTkVDVElPTl9CQUQpCisJCXBnX2ZhdGFsKCJiYWQg Y2FuY2VsIGNvbm5lY3Rpb246ICVzIiwgUFFjYW5jZWxFcnJvck1lc3NhZ2UoY2FuY2VsQ29ubikp OworCXdoaWxlICh0cnVlKQorCXsKKwkJc3RydWN0IHRpbWV2YWwgdHY7CisJCWZkX3NldAkJaW5w dXRfbWFzazsKKwkJZmRfc2V0CQlvdXRwdXRfbWFzazsKKwkJUG9zdGdyZXNQb2xsaW5nU3RhdHVz VHlwZSBwb2xscmVzID0gUFFjYW5jZWxQb2xsKGNhbmNlbENvbm4pOworCQlpbnQJCQlzb2NrID0g UFFjYW5jZWxTb2NrZXQoY2FuY2VsQ29ubik7CisKKwkJaWYgKHBvbGxyZXMgPT0gUEdSRVNfUE9M TElOR19PSykKKwkJeworCQkJYnJlYWs7CisJCX0KKworCQlGRF9aRVJPKCZpbnB1dF9tYXNrKTsK KwkJRkRfWkVSTygmb3V0cHV0X21hc2spOworCQlzd2l0Y2ggKHBvbGxyZXMpCisJCXsKKwkJCWNh c2UgUEdSRVNfUE9MTElOR19SRUFESU5HOgorCQkJCXBnX2RlYnVnKCJwb2xsaW5nIGZvciByZWFk c1xuIik7CisJCQkJRkRfU0VUKHNvY2ssICZpbnB1dF9tYXNrKTsKKwkJCQlicmVhazsKKwkJCWNh c2UgUEdSRVNfUE9MTElOR19XUklUSU5HOgorCQkJCXBnX2RlYnVnKCJwb2xsaW5nIGZvciB3cml0 ZXNcbiIpOworCQkJCUZEX1NFVChzb2NrLCAmb3V0cHV0X21hc2spOworCQkJCWJyZWFrOworCQkJ ZGVmYXVsdDoKKwkJCQlwZ19mYXRhbCgiYmFkIGNhbmNlbCBjb25uZWN0aW9uOiAlcyIsIFBRY2Fu Y2VsRXJyb3JNZXNzYWdlKGNhbmNlbENvbm4pKTsKKwkJfQorCisJCWlmIChzb2NrIDwgMCkKKwkJ CXBnX2ZhdGFsKCJzb2NrIGRpZCBub3QgZXhpc3Q6ICVzIiwgUFFjYW5jZWxFcnJvck1lc3NhZ2Uo Y2FuY2VsQ29ubikpOworCisJCXR2LnR2X3NlYyA9IDM7CisJCXR2LnR2X3VzZWMgPSAwOworCisJ CXdoaWxlICh0cnVlKQorCQl7CisJCQlpZiAoc2VsZWN0KHNvY2sgKyAxLCAmaW5wdXRfbWFzaywg Jm91dHB1dF9tYXNrLCBOVUxMLCAmdHYpIDwgMCkKKwkJCXsKKwkJCQlpZiAoZXJybm8gPT0gRUlO VFIpCisJCQkJCWNvbnRpbnVlOworCQkJCXBnX2ZhdGFsKCJzZWxlY3QoKSBmYWlsZWQ6ICVtIik7 CisJCQl9CisJCQlicmVhazsKKwkJfQorCX0KKwlpZiAoUFFjYW5jZWxTdGF0dXMoY2FuY2VsQ29u bikgIT0gQ09OTkVDVElPTl9PSykKKwkJcGdfZmF0YWwoInVuZXhwZWN0ZWQgY2FuY2VsIGNvbm5l Y3Rpb24gc3RhdHVzOiAlcyIsIFBRY2FuY2VsRXJyb3JNZXNzYWdlKGNhbmNlbENvbm4pKTsKKwlj b25maXJtX3F1ZXJ5X2NhbmNlbGVkKGNvbm4pOworCisJLyoKKwkgKiB0ZXN0IFBRY2FuY2VsUmVz ZXQgd29ya3Mgb24gdGhlIGNhbmNlbCBjb25uZWN0aW9uIGFuZCBpdCBjYW4gYmUgcmV1c2VkCisJ ICogYWZ0ZXIKKwkgKi8KKwlQUWNhbmNlbFJlc2V0KGNhbmNlbENvbm4pOworCisJc2VuZF9jYW5j ZWxsYWJsZV9xdWVyeShjb25uLCBtb25pdG9yQ29ubik7CisJaWYgKFBRY2FuY2VsU3RhdHVzKGNh bmNlbENvbm4pID09IENPTk5FQ1RJT05fQkFEKQorCQlwZ19mYXRhbCgiYmFkIGNhbmNlbCBjb25u ZWN0aW9uOiAlcyIsIFBRY2FuY2VsRXJyb3JNZXNzYWdlKGNhbmNlbENvbm4pKTsKKwl3aGlsZSAo dHJ1ZSkKKwl7CisJCXN0cnVjdCB0aW1ldmFsIHR2OworCQlmZF9zZXQJCWlucHV0X21hc2s7CisJ CWZkX3NldAkJb3V0cHV0X21hc2s7CisJCVBvc3RncmVzUG9sbGluZ1N0YXR1c1R5cGUgcG9sbHJl cyA9IFBRY2FuY2VsUG9sbChjYW5jZWxDb25uKTsKKwkJaW50CQkJc29jayA9IFBRY2FuY2VsU29j a2V0KGNhbmNlbENvbm4pOworCisJCWlmIChwb2xscmVzID09IFBHUkVTX1BPTExJTkdfT0spCisJ CXsKKwkJCWJyZWFrOworCQl9CisKKwkJRkRfWkVSTygmaW5wdXRfbWFzayk7CisJCUZEX1pFUk8o Jm91dHB1dF9tYXNrKTsKKwkJc3dpdGNoIChwb2xscmVzKQorCQl7CisJCQljYXNlIFBHUkVTX1BP TExJTkdfUkVBRElORzoKKwkJCQlwZ19kZWJ1ZygicG9sbGluZyBmb3IgcmVhZHNcbiIpOworCQkJ CUZEX1NFVChzb2NrLCAmaW5wdXRfbWFzayk7CisJCQkJYnJlYWs7CisJCQljYXNlIFBHUkVTX1BP TExJTkdfV1JJVElORzoKKwkJCQlwZ19kZWJ1ZygicG9sbGluZyBmb3Igd3JpdGVzXG4iKTsKKwkJ CQlGRF9TRVQoc29jaywgJm91dHB1dF9tYXNrKTsKKwkJCQlicmVhazsKKwkJCWRlZmF1bHQ6CisJ CQkJcGdfZmF0YWwoImJhZCBjYW5jZWwgY29ubmVjdGlvbjogJXMiLCBQUWNhbmNlbEVycm9yTWVz c2FnZShjYW5jZWxDb25uKSk7CisJCX0KKworCQlpZiAoc29jayA8IDApCisJCQlwZ19mYXRhbCgi c29jayBkaWQgbm90IGV4aXN0OiAlcyIsIFBRY2FuY2VsRXJyb3JNZXNzYWdlKGNhbmNlbENvbm4p KTsKKworCQl0di50dl9zZWMgPSAzOworCQl0di50dl91c2VjID0gMDsKKworCQl3aGlsZSAodHJ1 ZSkKKwkJeworCQkJaWYgKHNlbGVjdChzb2NrICsgMSwgJmlucHV0X21hc2ssICZvdXRwdXRfbWFz aywgTlVMTCwgJnR2KSA8IDApCisJCQl7CisJCQkJaWYgKGVycm5vID09IEVJTlRSKQorCQkJCQlj b250aW51ZTsKKwkJCQlwZ19mYXRhbCgic2VsZWN0KCkgZmFpbGVkOiAlbSIpOworCQkJfQorCQkJ YnJlYWs7CisJCX0KKwl9CisJaWYgKFBRY2FuY2VsU3RhdHVzKGNhbmNlbENvbm4pICE9IENPTk5F Q1RJT05fT0spCisJCXBnX2ZhdGFsKCJ1bmV4cGVjdGVkIGNhbmNlbCBjb25uZWN0aW9uIHN0YXR1 czogJXMiLCBQUWNhbmNlbEVycm9yTWVzc2FnZShjYW5jZWxDb25uKSk7CisJY29uZmlybV9xdWVy eV9jYW5jZWxlZChjb25uKTsKKworCVBRY2FuY2VsRmluaXNoKGNhbmNlbENvbm4pOworCisJZnBy aW50ZihzdGRlcnIsICJva1xuIik7Cit9CisKIHN0YXRpYyB2b2lkCiB0ZXN0X2Rpc2FsbG93ZWRf aW5fcGlwZWxpbmUoUEdjb25uICpjb25uKQogewpAQCAtMTc4OSw2ICsyMDQ3LDcgQEAgdXNhZ2Uo Y29uc3QgY2hhciAqcHJvZ25hbWUpCiBzdGF0aWMgdm9pZAogcHJpbnRfdGVzdF9saXN0KHZvaWQp CiB7CisJcHJpbnRmKCJjYW5jZWxcbiIpOwogCXByaW50ZigiZGlzYWxsb3dlZF9pbl9waXBlbGlu ZVxuIik7CiAJcHJpbnRmKCJtdWx0aV9waXBlbGluZXNcbiIpOwogCXByaW50Zigibm9zeW5jXG4i KTsKQEAgLTE4OTAsNyArMjE0OSw5IEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogCQkJ CQkJUFFUUkFDRV9TVVBQUkVTU19USU1FU1RBTVBTIHwgUFFUUkFDRV9SRUdSRVNTX01PREUpOwog CX0KIAotCWlmIChzdHJjbXAodGVzdG5hbWUsICJkaXNhbGxvd2VkX2luX3BpcGVsaW5lIikgPT0g MCkKKwlpZiAoc3RyY21wKHRlc3RuYW1lLCAiY2FuY2VsIikgPT0gMCkKKwkJdGVzdF9jYW5jZWwo Y29ubiwgY29ubmluZm8pOworCWVsc2UgaWYgKHN0cmNtcCh0ZXN0bmFtZSwgImRpc2FsbG93ZWRf aW5fcGlwZWxpbmUiKSA9PSAwKQogCQl0ZXN0X2Rpc2FsbG93ZWRfaW5fcGlwZWxpbmUoY29ubik7 CiAJZWxzZSBpZiAoc3RyY21wKHRlc3RuYW1lLCAibXVsdGlfcGlwZWxpbmVzIikgPT0gMCkKIAkJ dGVzdF9tdWx0aV9waXBlbGluZXMoY29ubik7Ci0tIAoyLjM0LjEKCg== --000000000000cc7872060fdc20d9--