From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 120737 invoked by alias); 9 Oct 2019 02:46:03 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Received: (qmail 120508 invoked by uid 89); 9 Oct 2019 02:45:43 -0000 Authentication-Results: sourceware.org; auth=none X-Spam-SWARE-Status: No, score=-20.9 required=5.0 tests=AWL,BAYES_00,GIT_PATCH_0,GIT_PATCH_1,GIT_PATCH_2,GIT_PATCH_3,KAM_NUMSUBJECT,KAM_SHORT,RCVD_IN_DNSWL_NONE,SPF_PASS autolearn=ham version=3.3.1 spammy=H*f:sk:gLz8sSj, Probably X-HELO: mail-lj1-f176.google.com Received: from mail-lj1-f176.google.com (HELO mail-lj1-f176.google.com) (209.85.208.176) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Wed, 09 Oct 2019 02:45:08 +0000 Received: by mail-lj1-f176.google.com with SMTP id m7so885116lji.2 for ; Tue, 08 Oct 2019 19:45:07 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc; bh=DhnHVrO2b9e19uxS19xlGPWB71Vtjio7rZlhy1steB0=; b=UOBjmvBsesvfpxJ5nnJs3qfzJiatTYSg/CuZfy9K6rU4FGheEEE6DN1R/64WOVIsWo qpOAkcqH5rfcw8TX5OjwjkZoFe436o3m6TRndlhW3IOSq/jvrogyTbnPsmFryNBotpH0 e6D1/Estm0xsqAe1aPUbw0iJ9dHlKhAyZzuK500nC6sE1jZztS7GePWYrqxNbH97X0oh diQj7l1q3R9DBRU1Veh8rvZktPtm1mYNMt6z8Grd61HT8njGrhQbLzdrsx0ppb1IYZpU yM8ZPdcUhaxtfmj+G2wUJSNfJZFhKt07Ip54dLCuYJCYCQDgKNw/m/yZ5mx81di2xkqq +3ow== MIME-Version: 1.0 References: In-Reply-To: From: Prathamesh Kulkarni Date: Wed, 09 Oct 2019 03:23:00 -0000 Message-ID: Subject: Re: [SVE] PR86753 To: Richard Sandiford Cc: Richard Biener , gcc Patches Content-Type: multipart/mixed; boundary="000000000000b6f8fd05947145bc" X-IsSubscribed: yes X-SW-Source: 2019-10/txt/msg00575.txt.bz2 --000000000000b6f8fd05947145bc Content-Type: text/plain; charset="UTF-8" Content-length: 4501 On Tue, 8 Oct 2019 at 13:21, Richard Sandiford wrote: > > Leaving the main review to Richard, just some comments... > > Prathamesh Kulkarni writes: > > @@ -9774,6 +9777,10 @@ vect_is_simple_cond (tree cond, vec_info *vinfo, > > > > When STMT_INFO is vectorized as a nested cycle, for_reduction is true. > > > > + For COND_EXPR if T comes from masked load, and is conditional > > + on C, we apply loop mask to result of vector comparison, if it's present. > > + Similarly for E, if it is conditional on !C. > > + > > Return true if STMT_INFO is vectorizable in this way. */ > > > > bool > > I think this is a bit misleading. But IMO it'd be better not to have > a comment here and just rely on the one in the main function body. > This optimisation isn't really changing the vectorisation strategy, > and the comment could easily get forgotten if things change in future. > > > [...] > > @@ -9999,6 +10006,35 @@ vectorizable_condition (stmt_vec_info stmt_info, gimple_stmt_iterator *gsi, > > /* Handle cond expr. */ > > for (j = 0; j < ncopies; j++) > > { > > + tree loop_mask = NULL_TREE; > > + bool swap_cond_operands = false; > > + > > + /* Look up if there is a loop mask associated with the > > + scalar cond, or it's inverse. */ > > Maybe: > > See whether another part of the vectorized code applies a loop > mask to the condition, or to its inverse. > > > + > > + if (loop_vinfo && LOOP_VINFO_FULLY_MASKED_P (loop_vinfo)) > > + { > > + scalar_cond_masked_key cond (cond_expr, ncopies); > > + if (loop_vinfo->scalar_cond_masked_set.contains (cond)) > > + { > > + vec_loop_masks *masks = &LOOP_VINFO_MASKS (loop_vinfo); > > + loop_mask = vect_get_loop_mask (gsi, masks, ncopies, vectype, j); > > + } > > + else > > + { > > + bool honor_nans = HONOR_NANS (TREE_TYPE (cond.op0)); > > + cond.code = invert_tree_comparison (cond.code, honor_nans); > > + if (loop_vinfo->scalar_cond_masked_set.contains (cond)) > > + { > > + vec_loop_masks *masks = &LOOP_VINFO_MASKS (loop_vinfo); > > + loop_mask = vect_get_loop_mask (gsi, masks, ncopies, > > + vectype, j); > > + cond_code = cond.code; > > + swap_cond_operands = true; > > + } > > + } > > + } > > + > > stmt_vec_info new_stmt_info = NULL; > > if (j == 0) > > { > > @@ -10114,6 +10153,47 @@ vectorizable_condition (stmt_vec_info stmt_info, gimple_stmt_iterator *gsi, > > } > > } > > } > > + > > + /* If loop mask is present, then AND it with > > Maybe "If we decided to apply a loop mask, ..." > > > + result of vec comparison, so later passes (fre4) > > Probably better not to name the pass -- could easily change in future. > > > + will reuse the same condition used in masked load. > > Could be a masked store, or potentially other things too. > So maybe just "will reuse the masked condition"? > > > + > > + For example: > > + for (int i = 0; i < 100; ++i) > > + x[i] = y[i] ? z[i] : 10; > > + > > + results in following optimized GIMPLE: > > + > > + mask__35.8_43 = vect__4.7_41 != { 0, ... }; > > + vec_mask_and_46 = loop_mask_40 & mask__35.8_43; > > + _19 = &MEM[base: z_12(D), index: ivtmp_56, step: 4, offset: 0B]; > > + vect_iftmp.11_47 = .MASK_LOAD (_19, 4B, vec_mask_and_46); > > + vect_iftmp.12_52 = VEC_COND_EXPR > + vect_iftmp.11_47, { 10, ... }>; > > + > > + instead of recomputing vec != { 0, ... } in vec_cond_expr */ > > That's true, but gives the impression that avoiding the vec != { 0, ... } > is the main goal, whereas we could do that just by forcing a three-operand > COND_EXPR. It's really more about making sure that vec != { 0, ... } > and its masked form aren't both live at the same time. So maybe: > > instead of using a masked and unmasked forms of > vect__4.7_41 != { 0, ... } (masked in the MASK_LOAD, > unmasked in the VEC_COND_EXPR). */ > Hi Richard, Thanks for the suggestions, I have updated comments in the attached patch. Thanks, Prathamesh > Thanks, > Richard --000000000000b6f8fd05947145bc Content-Type: text/x-patch; charset="US-ASCII"; name="pr86753-v2-5.diff" Content-Disposition: attachment; filename="pr86753-v2-5.diff" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_k1io4gmq0 Content-length: 33693 ZGlmZiAtLWdpdCBhL2djYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9hYXJjaDY0 L3N2ZS9jb25kX2Nub3RfMi5jIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0 L2FhcmNoNjQvc3ZlL2NvbmRfY25vdF8yLmMKaW5kZXggZDY4OWUyMWRjMTEu LjNkZjI0MzFiZTM4IDEwMDY0NAotLS0gYS9nY2MvdGVzdHN1aXRlL2djYy50 YXJnZXQvYWFyY2g2NC9zdmUvY29uZF9jbm90XzIuYworKysgYi9nY2MvdGVz dHN1aXRlL2djYy50YXJnZXQvYWFyY2g2NC9zdmUvY29uZF9jbm90XzIuYwpA QCAtMzIsNCArMzIsNCBAQCBURVNUX0FMTCAoREVGX0xPT1ApCiAvKiB7IGRn LWZpbmFsIHsgc2Nhbi1hc3NlbWJsZXItbm90IHtcdG1vdlx0en0gfSB9ICov CiAvKiB7IGRnLWZpbmFsIHsgc2Nhbi1hc3NlbWJsZXItbm90IHtcdG1vdnBy ZnhcdH0gfSB9ICovCiAvKiBDdXJyZW50bHkgd2UgY2Fub25pY2FsaXplIHRo ZSA/OiBzbyB0aGF0ICFiW2ldIGlzIHRoZSAiZmFsc2UiIHZhbHVlLiAgKi8K LS8qIHsgZGctZmluYWwgeyBzY2FuLWFzc2VtYmxlci1ub3Qge1x0c2VsXHR9 IHsgeGZhaWwgKi0qLSogfSB9IH0gKi8KKy8qIHsgZGctZmluYWwgeyBzY2Fu LWFzc2VtYmxlci1ub3Qge1x0c2VsXHR9IH0gfSAqLwpkaWZmIC0tZ2l0IGEv Z2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L2FhcmNoNjQvc3ZlL2NvbmRfY29u dmVydF8xLmMgYi9nY2MvdGVzdHN1aXRlL2djYy50YXJnZXQvYWFyY2g2NC9z dmUvY29uZF9jb252ZXJ0XzEuYwppbmRleCBkY2MzMDc2OGY4OC4uODYwNjRl YmZjYmEgMTAwNjQ0Ci0tLSBhL2djYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9h YXJjaDY0L3N2ZS9jb25kX2NvbnZlcnRfMS5jCisrKyBiL2djYy90ZXN0c3Vp dGUvZ2NjLnRhcmdldC9hYXJjaDY0L3N2ZS9jb25kX2NvbnZlcnRfMS5jCkBA IC0xMSw3ICsxMSwxMCBAQAogCQkgICBJTlRfVFlQRSAqX19yZXN0cmljdCBw cmVkLCBpbnQgbikJCVwKICAgewkJCQkJCQkJXAogICAgIGZvciAoaW50IGkg PSAwOyBpIDwgbjsgKytpKQkJCQkJXAotICAgICAgcltpXSA9IHByZWRbaV0g PyAoRkxPQVRfVFlQRSkgYVtpXSA6IGJbaV07CQlcCisgICAgICB7CQkJCQkJ CQlcCisJRkxPQVRfVFlQRSBiaSA9IGJbaV07CQkJCQlcCisJcltpXSA9IHBy ZWRbaV0gPyAoRkxPQVRfVFlQRSkgYVtpXSA6IGJpOwkJXAorICAgICAgfQkJ CQkJCQkJXAogICB9CiAKICNkZWZpbmUgVEVTVF9BTEwoVCkgXApkaWZmIC0t Z2l0IGEvZ2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L2FhcmNoNjQvc3ZlL2Nv bmRfY29udmVydF80LmMgYi9nY2MvdGVzdHN1aXRlL2djYy50YXJnZXQvYWFy Y2g2NC9zdmUvY29uZF9jb252ZXJ0XzQuYwppbmRleCA3ZTVmMmE3M2VkOS4u ZTNhOTQ3YjI2OTggMTAwNjQ0Ci0tLSBhL2djYy90ZXN0c3VpdGUvZ2NjLnRh cmdldC9hYXJjaDY0L3N2ZS9jb25kX2NvbnZlcnRfNC5jCisrKyBiL2djYy90 ZXN0c3VpdGUvZ2NjLnRhcmdldC9hYXJjaDY0L3N2ZS9jb25kX2NvbnZlcnRf NC5jCkBAIC0xMSw3ICsxMSwxMCBAQAogCQkgICBJTlRfVFlQRSAqX19yZXN0 cmljdCBwcmVkLCBpbnQgbikJCVwKICAgewkJCQkJCQkJXAogICAgIGZvciAo aW50IGkgPSAwOyBpIDwgbjsgKytpKQkJCQkJXAotICAgICAgcltpXSA9IHBy ZWRbaV0gPyAoSU5UX1RZUEUpIGFbaV0gOiBiW2ldOwkJCVwKKyAgICAgIHsJ CQkJCQkJCVwKKwlJTlRfVFlQRSBiaSA9IGJbaV07CQkJCQlcCisJcltpXSA9 IHByZWRbaV0gPyAoSU5UX1RZUEUpIGFbaV0gOiBiaTsJCQlcCisgICAgICB9 CQkJCQkJCQlcCiAgIH0KIAogI2RlZmluZSBURVNUX0FMTChUKSBcCmRpZmYg LS1naXQgYS9nY2MvdGVzdHN1aXRlL2djYy50YXJnZXQvYWFyY2g2NC9zdmUv Y29uZF91bmFyeV8yLmMgYi9nY2MvdGVzdHN1aXRlL2djYy50YXJnZXQvYWFy Y2g2NC9zdmUvY29uZF91bmFyeV8yLmMKaW5kZXggOTkxY2NmMDE2ZDEuLjk3 ZDFiOGY1ZDQ1IDEwMDY0NAotLS0gYS9nY2MvdGVzdHN1aXRlL2djYy50YXJn ZXQvYWFyY2g2NC9zdmUvY29uZF91bmFyeV8yLmMKKysrIGIvZ2NjL3Rlc3Rz dWl0ZS9nY2MudGFyZ2V0L2FhcmNoNjQvc3ZlL2NvbmRfdW5hcnlfMi5jCkBA IC0xMyw3ICsxMywxMCBAQAogCQkgICAgICBUWVBFICpfX3Jlc3RyaWN0IHBy ZWQsIGludCBuKQkJXAogICB7CQkJCQkJCQlcCiAgICAgZm9yIChpbnQgaSA9 IDA7IGkgPCBuOyArK2kpCQkJCQlcCi0gICAgICByW2ldID0gcHJlZFtpXSA/ IE9QIChhW2ldKSA6IGJbaV07CQkJXAorICAgICAgewkJCQkJCQkJXAorCVRZ UEUgYmkgPSBiW2ldOwkJCQkJCVwKKwlyW2ldID0gcHJlZFtpXSA/IE9QIChh W2ldKSA6IGJpOwkJCVwKKyAgICAgIH0JCQkJCQkJCVwKICAgfQogCiAjZGVm aW5lIFRFU1RfSU5UX1RZUEUoVCwgVFlQRSkgXApkaWZmIC0tZ2l0IGEvZ2Nj L3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L2FhcmNoNjQvc3ZlL2ZtbGFfMi5jIGIv Z2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L2FhcmNoNjQvc3ZlL2ZtbGFfMi5j CmluZGV4IDVjMDRiY2RiM2Y1Li5hMWIwNjY3ZGFiNSAxMDA2NDQKLS0tIGEv Z2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L2FhcmNoNjQvc3ZlL2ZtbGFfMi5j CisrKyBiL2djYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9hYXJjaDY0L3N2ZS9m bWxhXzIuYwpAQCAtMTUsNSArMTUsOSBAQCBmIChkb3VibGUgKnJlc3RyaWN0 IGEsIGRvdWJsZSAqcmVzdHJpY3QgYiwgZG91YmxlICpyZXN0cmljdCBjLAog ICAgIH0KIH0KIAotLyogeyBkZy1maW5hbCB7IHNjYW4tYXNzZW1ibGVyLXRp bWVzIHtcdGZtbGFcdHpbMC05XStcLmQsIHBbMC03XS9tLCB6WzAtOV0rXC5k LCB6WzAtOV0rXC5kXG59IDIgfSB9ICovCisvKiBTZWUgaHR0cHM6Ly9nY2Mu Z251Lm9yZy9tbC9nY2MtcGF0Y2hlcy8yMDE5LTA4L21zZzAxNjQ0Lmh0bWwK KyAgIGZvciBYRkFJTGluZyB0aGUgYmVsb3cgdGVzdC4gICovCisKKy8qIHsg ZGctZmluYWwgeyBzY2FuLWFzc2VtYmxlci10aW1lcyB7XHRmbWxhXHR6WzAt OV0rXC5kLCBwWzAtN10vbSwgelswLTldK1wuZCwgelswLTldK1wuZFxufSAy IHsgeGZhaWwgKi0qLSogfSB9IH0gKi8KKy8qIHsgZGctZmluYWwgeyBzY2Fu LWFzc2VtYmxlci10aW1lcyB7XHRmbWxhXHR6WzAtOV0rXC5kLCBwWzAtN10v bSwgelswLTldK1wuZCwgelswLTldK1wuZFxufSAzIH0gfSAqLwogLyogeyBk Zy1maW5hbCB7IHNjYW4tYXNzZW1ibGVyLW5vdCB7XHRmbWFkXHR9IH0gfSAq LwpkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L2FhcmNo NjQvc3ZlL3Zjb25kXzQuYyBiL2djYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9h YXJjaDY0L3N2ZS92Y29uZF80LmMKaW5kZXggMDBkODQ3NjBhMTkuLmIzOGYy M2U4N2JhIDEwMDY0NAotLS0gYS9nY2MvdGVzdHN1aXRlL2djYy50YXJnZXQv YWFyY2g2NC9zdmUvdmNvbmRfNC5jCisrKyBiL2djYy90ZXN0c3VpdGUvZ2Nj LnRhcmdldC9hYXJjaDY0L3N2ZS92Y29uZF80LmMKQEAgLTk4LDI0ICs5OCwy NCBAQCBURVNUX0NNUCAobnVndCkKIC8qIHsgZGctZmluYWwgeyBzY2FuLWFz c2VtYmxlci10aW1lcyB7XHRmY21uZVx0cFswLTldK1wucywgcFswLTddL3os IHpbMC05XStcLnMsIHpbMC05XStcLnNcbn0gMzAgeyB4ZmFpbCAqLSotKiB9 IH0gfSAqLwogCiAvKiA1IGZvciBsdCwgNSBmb3IgdWx0IGFuZCA1IGZvciBu dWx0LiAgKi8KLS8qIHsgZGctZmluYWwgeyBzY2FuLWFzc2VtYmxlci10aW1l cyB7XHRmY21sdFx0cFswLTldK1wucywgcFswLTddL3osIHpbMC05XStcLnMs ICMwXC4wXG59IDE1IHsgeGZhaWwgKi0qLSogfSB9IH0gKi8KLS8qIHsgZGct ZmluYWwgeyBzY2FuLWFzc2VtYmxlci10aW1lcyB7XHRmY21sdFx0cFswLTld K1wucywgcFswLTddL3osIHpbMC05XStcLnMsIHpbMC05XStcLnNcbn0gMzAg eyB4ZmFpbCAqLSotKiB9IH0gfSAqLworLyogeyBkZy1maW5hbCB7IHNjYW4t YXNzZW1ibGVyLXRpbWVzIHtcdGZjbWx0XHRwWzAtOV0rXC5zLCBwWzAtN10v eiwgelswLTldK1wucywgIzBcLjBcbn0gMTUgfSB9ICovCisvKiB7IGRnLWZp bmFsIHsgc2Nhbi1hc3NlbWJsZXItdGltZXMge1x0ZmNtbHRcdHBbMC05XStc LnMsIHBbMC03XS96LCB6WzAtOV0rXC5zLCB6WzAtOV0rXC5zXG59IDMwIH0g fSAqLwogCiAvKiA1IGZvciBsZSwgNSBmb3IgdWxlIGFuZCA1IGZvciBudWxl LiAgKi8KLS8qIHsgZGctZmluYWwgeyBzY2FuLWFzc2VtYmxlci10aW1lcyB7 XHRmY21sZVx0cFswLTldK1wucywgcFswLTddL3osIHpbMC05XStcLnMsICMw XC4wXG59IDE1IHsgeGZhaWwgKi0qLSogfSB9IH0gKi8KLS8qIHsgZGctZmlu YWwgeyBzY2FuLWFzc2VtYmxlci10aW1lcyB7XHRmY21sZVx0cFswLTldK1wu cywgcFswLTddL3osIHpbMC05XStcLnMsIHpbMC05XStcLnNcbn0gMzAgeyB4 ZmFpbCAqLSotKiB9IH0gfSAqLworLyogeyBkZy1maW5hbCB7IHNjYW4tYXNz ZW1ibGVyLXRpbWVzIHtcdGZjbWxlXHRwWzAtOV0rXC5zLCBwWzAtN10veiwg elswLTldK1wucywgIzBcLjBcbn0gMTUgfSB9ICovCisvKiB7IGRnLWZpbmFs IHsgc2Nhbi1hc3NlbWJsZXItdGltZXMge1x0ZmNtbGVcdHBbMC05XStcLnMs IHBbMC03XS96LCB6WzAtOV0rXC5zLCB6WzAtOV0rXC5zXG59IDMwIH0gfSAq LwogCiAvKiA1IGZvciBndCwgNSBmb3IgdWd0IGFuZCA1IGZvciBudWd0LiAg Ki8KLS8qIHsgZGctZmluYWwgeyBzY2FuLWFzc2VtYmxlci10aW1lcyB7XHRm Y21ndFx0cFswLTldK1wucywgcFswLTddL3osIHpbMC05XStcLnMsICMwXC4w XG59IDE1IHsgeGZhaWwgKi0qLSogfSB9IH0gKi8KLS8qIHsgZGctZmluYWwg eyBzY2FuLWFzc2VtYmxlci10aW1lcyB7XHRmY21ndFx0cFswLTldK1wucywg cFswLTddL3osIHpbMC05XStcLnMsIHpbMC05XStcLnNcbn0gMzAgeyB4ZmFp bCAqLSotKiB9IH0gfSAqLworLyogeyBkZy1maW5hbCB7IHNjYW4tYXNzZW1i bGVyLXRpbWVzIHtcdGZjbWd0XHRwWzAtOV0rXC5zLCBwWzAtN10veiwgelsw LTldK1wucywgIzBcLjBcbn0gMTUgfSB9ICovCisvKiB7IGRnLWZpbmFsIHsg c2Nhbi1hc3NlbWJsZXItdGltZXMge1x0ZmNtZ3RcdHBbMC05XStcLnMsIHBb MC03XS96LCB6WzAtOV0rXC5zLCB6WzAtOV0rXC5zXG59IDMwIH0gfSAqLwog CiAvKiA1IGZvciBnZSwgNSBmb3IgdWdlIGFuZCA1IGZvciBudWdlLiAgKi8K LS8qIHsgZGctZmluYWwgeyBzY2FuLWFzc2VtYmxlci10aW1lcyB7XHRmY21n ZVx0cFswLTldK1wucywgcFswLTddL3osIHpbMC05XStcLnMsICMwXC4wXG59 IDE1IHsgeGZhaWwgKi0qLSogfSB9IH0gKi8KLS8qIHsgZGctZmluYWwgeyBz Y2FuLWFzc2VtYmxlci10aW1lcyB7XHRmY21nZVx0cFswLTldK1wucywgcFsw LTddL3osIHpbMC05XStcLnMsIHpbMC05XStcLnNcbn0gMzAgeyB4ZmFpbCAq LSotKiB9IH0gfSAqLworLyogeyBkZy1maW5hbCB7IHNjYW4tYXNzZW1ibGVy LXRpbWVzIHtcdGZjbWdlXHRwWzAtOV0rXC5zLCBwWzAtN10veiwgelswLTld K1wucywgIzBcLjBcbn0gMTUgfSB9ICovCisvKiB7IGRnLWZpbmFsIHsgc2Nh bi1hc3NlbWJsZXItdGltZXMge1x0ZmNtZ2VcdHBbMC05XStcLnMsIHBbMC03 XS96LCB6WzAtOV0rXC5zLCB6WzAtOV0rXC5zXG59IDMwIH0gfSAqLwogCiAv KiB7IGRnLWZpbmFsIHsgc2Nhbi1hc3NlbWJsZXItbm90IHtcdGZjbXVvXHRw WzAtOV0rXC5zLCBwWzAtN10veiwgelswLTldK1wucywgIzBcLjBcbn0gfSB9 ICovCiAvKiAzIGxvb3BzICogNSBpbnZvY2F0aW9ucyBmb3IgYWxsIDEyIHVu b3JkZXJlZCBjb21wYXJpc29ucy4gICovCi0vKiB7IGRnLWZpbmFsIHsgc2Nh bi1hc3NlbWJsZXItdGltZXMge1x0ZmNtdW9cdHBbMC05XStcLnMsIHBbMC03 XS96LCB6WzAtOV0rXC5zLCB6WzAtOV0rXC5zXG59IDE4MCB7IHhmYWlsICot Ki0qIH0gfSB9ICovCisvKiB7IGRnLWZpbmFsIHsgc2Nhbi1hc3NlbWJsZXIt dGltZXMge1x0ZmNtdW9cdHBbMC05XStcLnMsIHBbMC03XS96LCB6WzAtOV0r XC5zLCB6WzAtOV0rXC5zXG59IDE4MCB9IH0gKi8KIAogLyogeyBkZy1maW5h bCB7IHNjYW4tYXNzZW1ibGVyLXRpbWVzIHtcdGZjbWVxXHRwWzAtOV0rXC5k LCBwWzAtN10veiwgelswLTldK1wuZCwgIzBcLjBcbn0gNyB7IHhmYWlsICot Ki0qIH0gfSB9ICovCiAvKiB7IGRnLWZpbmFsIHsgc2Nhbi1hc3NlbWJsZXIt dGltZXMge1x0ZmNtZXFcdHBbMC05XStcLmQsIHBbMC03XS96LCB6WzAtOV0r XC5kLCB6WzAtOV0rXC5kXG59IDE0IHsgeGZhaWwgKi0qLSogfSB9IH0gKi8K QEAgLTEyMywxOSArMTIzLDE5IEBAIFRFU1RfQ01QIChudWd0KQogLyogeyBk Zy1maW5hbCB7IHNjYW4tYXNzZW1ibGVyLXRpbWVzIHtcdGZjbW5lXHRwWzAt OV0rXC5kLCBwWzAtN10veiwgelswLTldK1wuZCwgIzBcLjBcbn0gMjEgeyB4 ZmFpbCAqLSotKiB9IH0gfSAqLwogLyogeyBkZy1maW5hbCB7IHNjYW4tYXNz ZW1ibGVyLXRpbWVzIHtcdGZjbW5lXHRwWzAtOV0rXC5kLCBwWzAtN10veiwg elswLTldK1wuZCwgelswLTldK1wuZFxufSA0MiB7IHhmYWlsICotKi0qIH0g fSB9ICovCiAKLS8qIHsgZGctZmluYWwgeyBzY2FuLWFzc2VtYmxlci10aW1l cyB7XHRmY21sdFx0cFswLTldK1wuZCwgcFswLTddL3osIHpbMC05XStcLmQs ICMwXC4wXG59IDIxIHsgeGZhaWwgKi0qLSogfSB9IH0gKi8KLS8qIHsgZGct ZmluYWwgeyBzY2FuLWFzc2VtYmxlci10aW1lcyB7XHRmY21sdFx0cFswLTld K1wuZCwgcFswLTddL3osIHpbMC05XStcLmQsIHpbMC05XStcLmRcbn0gNDIg eyB4ZmFpbCAqLSotKiB9IH0gfSAqLworLyogeyBkZy1maW5hbCB7IHNjYW4t YXNzZW1ibGVyLXRpbWVzIHtcdGZjbWx0XHRwWzAtOV0rXC5kLCBwWzAtN10v eiwgelswLTldK1wuZCwgIzBcLjBcbn0gMjEgfSB9ICovCisvKiB7IGRnLWZp bmFsIHsgc2Nhbi1hc3NlbWJsZXItdGltZXMge1x0ZmNtbHRcdHBbMC05XStc LmQsIHBbMC03XS96LCB6WzAtOV0rXC5kLCB6WzAtOV0rXC5kXG59IDQyIH0g fSAqLwogCi0vKiB7IGRnLWZpbmFsIHsgc2Nhbi1hc3NlbWJsZXItdGltZXMg e1x0ZmNtbGVcdHBbMC05XStcLmQsIHBbMC03XS96LCB6WzAtOV0rXC5kLCAj MFwuMFxufSAyMSB7IHhmYWlsICotKi0qIH0gfSB9ICovCi0vKiB7IGRnLWZp bmFsIHsgc2Nhbi1hc3NlbWJsZXItdGltZXMge1x0ZmNtbGVcdHBbMC05XStc LmQsIHBbMC03XS96LCB6WzAtOV0rXC5kLCB6WzAtOV0rXC5kXG59IDQyIHsg eGZhaWwgKi0qLSogfSB9IH0gKi8KKy8qIHsgZGctZmluYWwgeyBzY2FuLWFz c2VtYmxlci10aW1lcyB7XHRmY21sZVx0cFswLTldK1wuZCwgcFswLTddL3os IHpbMC05XStcLmQsICMwXC4wXG59IDIxIH0gfSAqLworLyogeyBkZy1maW5h bCB7IHNjYW4tYXNzZW1ibGVyLXRpbWVzIHtcdGZjbWxlXHRwWzAtOV0rXC5k LCBwWzAtN10veiwgelswLTldK1wuZCwgelswLTldK1wuZFxufSA0MiB9IH0g Ki8KIAotLyogeyBkZy1maW5hbCB7IHNjYW4tYXNzZW1ibGVyLXRpbWVzIHtc dGZjbWd0XHRwWzAtOV0rXC5kLCBwWzAtN10veiwgelswLTldK1wuZCwgIzBc LjBcbn0gMjEgeyB4ZmFpbCAqLSotKiB9IH0gfSAqLwotLyogeyBkZy1maW5h bCB7IHNjYW4tYXNzZW1ibGVyLXRpbWVzIHtcdGZjbWd0XHRwWzAtOV0rXC5k LCBwWzAtN10veiwgelswLTldK1wuZCwgelswLTldK1wuZFxufSA0MiB7IHhm YWlsICotKi0qIH0gfSB9ICovCisvKiB7IGRnLWZpbmFsIHsgc2Nhbi1hc3Nl bWJsZXItdGltZXMge1x0ZmNtZ3RcdHBbMC05XStcLmQsIHBbMC03XS96LCB6 WzAtOV0rXC5kLCAjMFwuMFxufSAyMSB9IH0gKi8KKy8qIHsgZGctZmluYWwg eyBzY2FuLWFzc2VtYmxlci10aW1lcyB7XHRmY21ndFx0cFswLTldK1wuZCwg cFswLTddL3osIHpbMC05XStcLmQsIHpbMC05XStcLmRcbn0gNDIgfSB9ICov CiAKLS8qIHsgZGctZmluYWwgeyBzY2FuLWFzc2VtYmxlci10aW1lcyB7XHRm Y21nZVx0cFswLTldK1wuZCwgcFswLTddL3osIHpbMC05XStcLmQsICMwXC4w XG59IDIxIHsgeGZhaWwgKi0qLSogfSB9IH0gKi8KLS8qIHsgZGctZmluYWwg eyBzY2FuLWFzc2VtYmxlci10aW1lcyB7XHRmY21nZVx0cFswLTldK1wuZCwg cFswLTddL3osIHpbMC05XStcLmQsIHpbMC05XStcLmRcbn0gNDIgeyB4ZmFp bCAqLSotKiB9IH0gfSAqLworLyogeyBkZy1maW5hbCB7IHNjYW4tYXNzZW1i bGVyLXRpbWVzIHtcdGZjbWdlXHRwWzAtOV0rXC5kLCBwWzAtN10veiwgelsw LTldK1wuZCwgIzBcLjBcbn0gMjEgfSB9ICovCisvKiB7IGRnLWZpbmFsIHsg c2Nhbi1hc3NlbWJsZXItdGltZXMge1x0ZmNtZ2VcdHBbMC05XStcLmQsIHBb MC03XS96LCB6WzAtOV0rXC5kLCB6WzAtOV0rXC5kXG59IDQyIH0gfSAqLwog CiAvKiB7IGRnLWZpbmFsIHsgc2Nhbi1hc3NlbWJsZXItbm90IHtcdGZjbXVv XHRwWzAtOV0rXC5kLCBwWzAtN10veiwgelswLTldK1wuZCwgIzBcLjBcbn0g fSB9ICovCiAvKiAzIGxvb3BzICogNSBpbnZvY2F0aW9ucywgd2l0aCAyIGlu dm9jYXRpb25zIGhhdmluZyBuY29waWVzID09IDIsCiAgICBmb3IgYWxsIDEy IHVub3JkZXJlZCBjb21wYXJpc29ucy4gICovCi0vKiB7IGRnLWZpbmFsIHsg c2Nhbi1hc3NlbWJsZXItdGltZXMge1x0ZmNtdW9cdHBbMC05XStcLmQsIHBb MC03XS96LCB6WzAtOV0rXC5kLCB6WzAtOV0rXC5kXG59IDI1MiB7IHhmYWls ICotKi0qIH0gfSB9ICovCisvKiB7IGRnLWZpbmFsIHsgc2Nhbi1hc3NlbWJs ZXItdGltZXMge1x0ZmNtdW9cdHBbMC05XStcLmQsIHBbMC03XS96LCB6WzAt OV0rXC5kLCB6WzAtOV0rXC5kXG59IDI1MiB9IH0gKi8KZGlmZiAtLWdpdCBh L2djYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9hYXJjaDY0L3N2ZS92Y29uZF81 LmMgYi9nY2MvdGVzdHN1aXRlL2djYy50YXJnZXQvYWFyY2g2NC9zdmUvdmNv bmRfNS5jCmluZGV4IDIzYmZiN2IyNjQ5Li4yZjE2ZmJmZjUyMiAxMDA2NDQK LS0tIGEvZ2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L2FhcmNoNjQvc3ZlL3Zj b25kXzUuYworKysgYi9nY2MvdGVzdHN1aXRlL2djYy50YXJnZXQvYWFyY2g2 NC9zdmUvdmNvbmRfNS5jCkBAIC0xOSwxNiArMTksMTYgQEAKIC8qIHsgZGct ZmluYWwgeyBzY2FuLWFzc2VtYmxlci10aW1lcyB7XHRmY21sdFx0cFswLTld K1wucywgcFswLTddL3osIHpbMC05XStcLnMsIHpbMC05XStcLnN9IDQwIHsg eGZhaWwgKi0qLSogfSB9IH0gKi8KIAogLyogNSBmb3IgbGUsIDUgZm9yIHVs ZSBhbmQgNSBmb3IgbnVsZS4gICovCi0vKiB7IGRnLWZpbmFsIHsgc2Nhbi1h c3NlbWJsZXItdGltZXMge1x0ZmNtbGVcdHBbMC05XStcLnMsIHBbMC03XS96 LCB6WzAtOV0rXC5zLCAjMFwuMH0gMTUgeyB4ZmFpbCAqLSotKiB9IH0gfSAq LwotLyogeyBkZy1maW5hbCB7IHNjYW4tYXNzZW1ibGVyLXRpbWVzIHtcdGZj bWxlXHRwWzAtOV0rXC5zLCBwWzAtN10veiwgelswLTldK1wucywgelswLTld K1wuc30gMzAgeyB4ZmFpbCAqLSotKiB9IH0gfSAqLworLyogeyBkZy1maW5h bCB7IHNjYW4tYXNzZW1ibGVyLXRpbWVzIHtcdGZjbWxlXHRwWzAtOV0rXC5z LCBwWzAtN10veiwgelswLTldK1wucywgIzBcLjB9IDE1IH0gfSAqLworLyog eyBkZy1maW5hbCB7IHNjYW4tYXNzZW1ibGVyLXRpbWVzIHtcdGZjbWxlXHRw WzAtOV0rXC5zLCBwWzAtN10veiwgelswLTldK1wucywgelswLTldK1wuc30g MzAgfSB9ICovCiAKIC8qIDUgZm9yIGd0LCA1IGZvciB1Z3QsIDUgZm9yIG51 ZXEgYW5kIDUgZm9yIG51Z3QuICAqLwogLyogeyBkZy1maW5hbCB7IHNjYW4t YXNzZW1ibGVyLXRpbWVzIHtcdGZjbWd0XHRwWzAtOV0rXC5zLCBwWzAtN10v eiwgelswLTldK1wucywgIzBcLjB9IDIwIHsgeGZhaWwgKi0qLSogfSB9IH0g Ki8KIC8qIHsgZGctZmluYWwgeyBzY2FuLWFzc2VtYmxlci10aW1lcyB7XHRm Y21ndFx0cFswLTldK1wucywgcFswLTddL3osIHpbMC05XStcLnMsIHpbMC05 XStcLnN9IDQwIHsgeGZhaWwgKi0qLSogfSB9IH0gKi8KIAogLyogNSBmb3Ig Z2UsIDUgZm9yIHVnZSBhbmQgNSBmb3IgbnVnZS4gICovCi0vKiB7IGRnLWZp bmFsIHsgc2Nhbi1hc3NlbWJsZXItdGltZXMge1x0ZmNtZ2VcdHBbMC05XStc LnMsIHBbMC03XS96LCB6WzAtOV0rXC5zLCAjMFwuMH0gMTUgeyB4ZmFpbCAq LSotKiB9IH0gfSAqLwotLyogeyBkZy1maW5hbCB7IHNjYW4tYXNzZW1ibGVy LXRpbWVzIHtcdGZjbWdlXHRwWzAtOV0rXC5zLCBwWzAtN10veiwgelswLTld K1wucywgelswLTldK1wuc30gMzAgeyB4ZmFpbCAqLSotKiB9IH0gfSAqLwor LyogeyBkZy1maW5hbCB7IHNjYW4tYXNzZW1ibGVyLXRpbWVzIHtcdGZjbWdl XHRwWzAtOV0rXC5zLCBwWzAtN10veiwgelswLTldK1wucywgIzBcLjB9IDE1 IH0gfSAqLworLyogeyBkZy1maW5hbCB7IHNjYW4tYXNzZW1ibGVyLXRpbWVz IHtcdGZjbWdlXHRwWzAtOV0rXC5zLCBwWzAtN10veiwgelswLTldK1wucywg elswLTldK1wuc30gMzAgfSB9ICovCiAKIC8qIHsgZGctZmluYWwgeyBzY2Fu LWFzc2VtYmxlci1ub3Qge1x0ZmNtdW9cdHBbMC05XStcLnMsIHBbMC03XS96 LCB6WzAtOV0rXC5zLCAjMFwuMH0gfSB9ICovCiAvKiAzIGxvb3BzICogNSBp bnZvY2F0aW9ucyBmb3Igb3JkZXJlZCwgdW5vcmRlcmVkIGFtZCB1ZXEuICAq LwpAQCAtNDMsMTQgKzQzLDE0IEBACiAvKiB7IGRnLWZpbmFsIHsgc2Nhbi1h c3NlbWJsZXItdGltZXMge1x0ZmNtbHRcdHBbMC05XStcLmQsIHBbMC03XS96 LCB6WzAtOV0rXC5kLCAjMFwuMH0gMjggeyB4ZmFpbCAqLSotKiB9IH0gfSAq LwogLyogeyBkZy1maW5hbCB7IHNjYW4tYXNzZW1ibGVyLXRpbWVzIHtcdGZj bWx0XHRwWzAtOV0rXC5kLCBwWzAtN10veiwgelswLTldK1wuZCwgelswLTld K1wuZH0gNTYgeyB4ZmFpbCAqLSotKiB9IH0gfSAqLwogCi0vKiB7IGRnLWZp bmFsIHsgc2Nhbi1hc3NlbWJsZXItdGltZXMge1x0ZmNtbGVcdHBbMC05XStc LmQsIHBbMC03XS96LCB6WzAtOV0rXC5kLCAjMFwuMH0gMjEgeyB4ZmFpbCAq LSotKiB9IH0gfSAqLwotLyogeyBkZy1maW5hbCB7IHNjYW4tYXNzZW1ibGVy LXRpbWVzIHtcdGZjbWxlXHRwWzAtOV0rXC5kLCBwWzAtN10veiwgelswLTld K1wuZCwgelswLTldK1wuZH0gNDIgeyB4ZmFpbCAqLSotKiB9IH0gfSAqLwor LyogeyBkZy1maW5hbCB7IHNjYW4tYXNzZW1ibGVyLXRpbWVzIHtcdGZjbWxl XHRwWzAtOV0rXC5kLCBwWzAtN10veiwgelswLTldK1wuZCwgIzBcLjB9IDIx IH0gfSAqLworLyogeyBkZy1maW5hbCB7IHNjYW4tYXNzZW1ibGVyLXRpbWVz IHtcdGZjbWxlXHRwWzAtOV0rXC5kLCBwWzAtN10veiwgelswLTldK1wuZCwg elswLTldK1wuZH0gNDIgfSB9ICovCiAKIC8qIHsgZGctZmluYWwgeyBzY2Fu LWFzc2VtYmxlci10aW1lcyB7XHRmY21ndFx0cFswLTldK1wuZCwgcFswLTdd L3osIHpbMC05XStcLmQsICMwXC4wfSAyOCB7IHhmYWlsICotKi0qIH0gfSB9 ICovCiAvKiB7IGRnLWZpbmFsIHsgc2Nhbi1hc3NlbWJsZXItdGltZXMge1x0 ZmNtZ3RcdHBbMC05XStcLmQsIHBbMC03XS96LCB6WzAtOV0rXC5kLCB6WzAt OV0rXC5kfSA1NiB7IHhmYWlsICotKi0qIH0gfSB9ICovCiAKLS8qIHsgZGct ZmluYWwgeyBzY2FuLWFzc2VtYmxlci10aW1lcyB7XHRmY21nZVx0cFswLTld K1wuZCwgcFswLTddL3osIHpbMC05XStcLmQsICMwXC4wfSAyMSB7IHhmYWls ICotKi0qIH0gfSB9ICovCi0vKiB7IGRnLWZpbmFsIHsgc2Nhbi1hc3NlbWJs ZXItdGltZXMge1x0ZmNtZ2VcdHBbMC05XStcLmQsIHBbMC03XS96LCB6WzAt OV0rXC5kLCB6WzAtOV0rXC5kfSA0MiB7IHhmYWlsICotKi0qIH0gfSB9ICov CisvKiB7IGRnLWZpbmFsIHsgc2Nhbi1hc3NlbWJsZXItdGltZXMge1x0ZmNt Z2VcdHBbMC05XStcLmQsIHBbMC03XS96LCB6WzAtOV0rXC5kLCAjMFwuMH0g MjEgfSB9ICovCisvKiB7IGRnLWZpbmFsIHsgc2Nhbi1hc3NlbWJsZXItdGlt ZXMge1x0ZmNtZ2VcdHBbMC05XStcLmQsIHBbMC03XS96LCB6WzAtOV0rXC5k LCB6WzAtOV0rXC5kfSA0MiB9IH0gKi8KIAogLyogeyBkZy1maW5hbCB7IHNj YW4tYXNzZW1ibGVyLW5vdCB7XHRmY211b1x0cFswLTldK1wuZCwgcFswLTdd L3osIHpbMC05XStcLmQsICMwXC4wfSB9IH0gKi8KIC8qIDMgbG9vcHMgKiA1 IGludm9jYXRpb25zLCB3aXRoIDIgaW52b2NhdGlvbnMgaGF2aW5nIG5jb3Bp ZXMgPT0gMiwKZGlmZiAtLWdpdCBhL2djYy90cmVlLXZlY3QtbG9vcC5jIGIv Z2NjL3RyZWUtdmVjdC1sb29wLmMKaW5kZXggM2RiNGE1Y2RmNzguLmRhOTUy NjQ1NzU5IDEwMDY0NAotLS0gYS9nY2MvdHJlZS12ZWN0LWxvb3AuYworKysg Yi9nY2MvdHJlZS12ZWN0LWxvb3AuYwpAQCAtNjYwMyw3ICs2NjAzLDcgQEAg dmVjdG9yaXphYmxlX3JlZHVjdGlvbiAoc3RtdF92ZWNfaW5mbyBzdG10X2lu Zm8sIGdpbXBsZV9zdG10X2l0ZXJhdG9yICpnc2ksCiAJfQogICAgICAgZWxz ZQogCXZlY3RfcmVjb3JkX2xvb3BfbWFzayAobG9vcF92aW5mbywgbWFza3Ms IG5jb3BpZXMgKiB2ZWNfbnVtLAotCQkJICAgICAgIHZlY3R5cGVfaW4pOwor CQkJICAgICAgIHZlY3R5cGVfaW4sIE5VTEwpOwogICAgIH0KICAgaWYgKGR1 bXBfZW5hYmxlZF9wICgpCiAgICAgICAmJiByZWR1Y3Rpb25fdHlwZSA9PSBG T0xEX0xFRlRfUkVEVUNUSU9OKQpAQCAtODAwNSw3ICs4MDA1LDcgQEAgdmVj dG9yaXphYmxlX2xpdmVfb3BlcmF0aW9uIChzdG10X3ZlY19pbmZvIHN0bXRf aW5mbywKIAkgICAgICBnY2NfYXNzZXJ0IChuY29waWVzID09IDEgJiYgIXNs cF9ub2RlKTsKIAkgICAgICB2ZWN0X3JlY29yZF9sb29wX21hc2sgKGxvb3Bf dmluZm8sCiAJCQkJICAgICAmTE9PUF9WSU5GT19NQVNLUyAobG9vcF92aW5m byksCi0JCQkJICAgICAxLCB2ZWN0eXBlKTsKKwkJCQkgICAgIDEsIHZlY3R5 cGUsIE5VTEwpOwogCSAgICB9CiAJfQogICAgICAgcmV0dXJuIHRydWU7CkBA IC04MjA0LDExICs4MjA0LDEyIEBAIHZlY3RfZG91YmxlX21hc2tfbnVuaXRz ICh0cmVlIHR5cGUpCiAKIC8qIFJlY29yZCB0aGF0IGEgZnVsbHktbWFza2Vk IHZlcnNpb24gb2YgTE9PUF9WSU5GTyB3b3VsZCBuZWVkIE1BU0tTIHRvCiAg ICBjb250YWluIGEgc2VxdWVuY2Ugb2YgTlZFQ1RPUlMgbWFza3MgdGhhdCBl YWNoIGNvbnRyb2wgYSB2ZWN0b3Igb2YgdHlwZQotICAgVkVDVFlQRS4gICov CisgICBWRUNUWVBFLiAgSWYgU0NBTEFSX01BU0sgaXMgbm9ubnVsbCwgdGhl IGZ1bGx5LW1hc2tlZCBsb29wIHdvdWxkIEFORAorICAgdGhlc2UgdmVjdG9y IG1hc2tzIHdpdGggdGhlIHZlY3RvciB2ZXJzaW9uIG9mIFNDQUxBUl9NQVNL LiAgKi8KIAogdm9pZAogdmVjdF9yZWNvcmRfbG9vcF9tYXNrIChsb29wX3Zl Y19pbmZvIGxvb3BfdmluZm8sIHZlY19sb29wX21hc2tzICptYXNrcywKLQkJ ICAgICAgIHVuc2lnbmVkIGludCBudmVjdG9ycywgdHJlZSB2ZWN0eXBlKQor CQkgICAgICAgdW5zaWduZWQgaW50IG52ZWN0b3JzLCB0cmVlIHZlY3R5cGUs IHRyZWUgc2NhbGFyX21hc2spCiB7CiAgIGdjY19hc3NlcnQgKG52ZWN0b3Jz ICE9IDApOwogICBpZiAobWFza3MtPmxlbmd0aCAoKSA8IG52ZWN0b3JzKQpA QCAtODIxOSw2ICs4MjIwLDEzIEBAIHZlY3RfcmVjb3JkX2xvb3BfbWFzayAo bG9vcF92ZWNfaW5mbyBsb29wX3ZpbmZvLCB2ZWNfbG9vcF9tYXNrcyAqbWFz a3MsCiAgIHVuc2lnbmVkIGludCBuc2NhbGFyc19wZXJfaXRlcgogICAgID0g ZXhhY3RfZGl2IChudmVjdG9ycyAqIFRZUEVfVkVDVE9SX1NVQlBBUlRTICh2 ZWN0eXBlKSwKIAkJIExPT1BfVklORk9fVkVDVF9GQUNUT1IgKGxvb3Bfdmlu Zm8pKS50b19jb25zdGFudCAoKTsKKworICBpZiAoc2NhbGFyX21hc2spCisg ICAgeworICAgICAgc2NhbGFyX2NvbmRfbWFza2VkX2tleSBjb25kIChzY2Fs YXJfbWFzaywgbnZlY3RvcnMpOworICAgICAgbG9vcF92aW5mby0+c2NhbGFy X2NvbmRfbWFza2VkX3NldC5hZGQgKGNvbmQpOworICAgIH0KKwogICBpZiAo cmdtLT5tYXhfbnNjYWxhcnNfcGVyX2l0ZXIgPCBuc2NhbGFyc19wZXJfaXRl cikKICAgICB7CiAgICAgICByZ20tPm1heF9uc2NhbGFyc19wZXJfaXRlciA9 IG5zY2FsYXJzX3Blcl9pdGVyOwpkaWZmIC0tZ2l0IGEvZ2NjL3RyZWUtdmVj dC1zdG10cy5jIGIvZ2NjL3RyZWUtdmVjdC1zdG10cy5jCmluZGV4IGNhYzc0 MTAzODdiLi4xZTk4YjY4Nzk2MSAxMDA2NDQKLS0tIGEvZ2NjL3RyZWUtdmVj dC1zdG10cy5jCisrKyBiL2djYy90cmVlLXZlY3Qtc3RtdHMuYwpAQCAtMTg3 OSw3ICsxODc5LDggQEAgc3RhdGljIHRyZWUgcGVybXV0ZV92ZWNfZWxlbWVu dHMgKHRyZWUsIHRyZWUsIHRyZWUsIHN0bXRfdmVjX2luZm8sCiAgICBzYXlz IGhvdyB0aGUgbG9hZCBvciBzdG9yZSBpcyBnb2luZyB0byBiZSBpbXBsZW1l bnRlZCBhbmQgR1JPVVBfU0laRQogICAgaXMgdGhlIG51bWJlciBvZiBsb2Fk IG9yIHN0b3JlIHN0YXRlbWVudHMgaW4gdGhlIGNvbnRhaW5pbmcgZ3JvdXAu CiAgICBJZiB0aGUgYWNjZXNzIGlzIGEgZ2F0aGVyIGxvYWQgb3Igc2NhdHRl ciBzdG9yZSwgR1NfSU5GTyBkZXNjcmliZXMKLSAgIGl0cyBhcmd1bWVudHMu CisgICBpdHMgYXJndW1lbnRzLiAgSWYgdGhlIGxvYWQgb3Igc3RvcmUgaXMg Y29uZGl0aW9uYWwsIFNDQUxBUl9NQVNLIGlzIHRoZQorICAgY29uZGl0aW9u IHVuZGVyIHdoaWNoIGl0IG9jY3Vycy4KIAogICAgQ2xlYXIgTE9PUF9WSU5G T19DQU5fRlVMTFlfTUFTS19QIGlmIGEgZnVsbHktbWFza2VkIGxvb3AgaXMg bm90CiAgICBzdXBwb3J0ZWQsIG90aGVyd2lzZSByZWNvcmQgdGhlIHJlcXVp cmVkIG1hc2sgdHlwZXMuICAqLwpAQCAtMTg4OCw3ICsxODg5LDcgQEAgc3Rh dGljIHZvaWQKIGNoZWNrX2xvYWRfc3RvcmVfbWFza2luZyAobG9vcF92ZWNf aW5mbyBsb29wX3ZpbmZvLCB0cmVlIHZlY3R5cGUsCiAJCQkgIHZlY19sb2Fk X3N0b3JlX3R5cGUgdmxzX3R5cGUsIGludCBncm91cF9zaXplLAogCQkJICB2 ZWN0X21lbW9yeV9hY2Nlc3NfdHlwZSBtZW1vcnlfYWNjZXNzX3R5cGUsCi0J CQkgIGdhdGhlcl9zY2F0dGVyX2luZm8gKmdzX2luZm8pCisJCQkgIGdhdGhl cl9zY2F0dGVyX2luZm8gKmdzX2luZm8sIHRyZWUgc2NhbGFyX21hc2spCiB7 CiAgIC8qIEludmFyaWFudCBsb2FkcyBuZWVkIG5vIHNwZWNpYWwgc3VwcG9y dC4gICovCiAgIGlmIChtZW1vcnlfYWNjZXNzX3R5cGUgPT0gVk1BVF9JTlZB UklBTlQpCkBAIC0xOTEyLDcgKzE5MTMsNyBAQCBjaGVja19sb2FkX3N0b3Jl X21hc2tpbmcgKGxvb3BfdmVjX2luZm8gbG9vcF92aW5mbywgdHJlZSB2ZWN0 eXBlLAogCSAgcmV0dXJuOwogCX0KICAgICAgIHVuc2lnbmVkIGludCBuY29w aWVzID0gdmVjdF9nZXRfbnVtX2NvcGllcyAobG9vcF92aW5mbywgdmVjdHlw ZSk7Ci0gICAgICB2ZWN0X3JlY29yZF9sb29wX21hc2sgKGxvb3BfdmluZm8s IG1hc2tzLCBuY29waWVzLCB2ZWN0eXBlKTsKKyAgICAgIHZlY3RfcmVjb3Jk X2xvb3BfbWFzayAobG9vcF92aW5mbywgbWFza3MsIG5jb3BpZXMsIHZlY3R5 cGUsIHNjYWxhcl9tYXNrKTsKICAgICAgIHJldHVybjsKICAgICB9CiAKQEAg LTE5MzYsNyArMTkzNyw3IEBAIGNoZWNrX2xvYWRfc3RvcmVfbWFza2luZyAo bG9vcF92ZWNfaW5mbyBsb29wX3ZpbmZvLCB0cmVlIHZlY3R5cGUsCiAJICBy ZXR1cm47CiAJfQogICAgICAgdW5zaWduZWQgaW50IG5jb3BpZXMgPSB2ZWN0 X2dldF9udW1fY29waWVzIChsb29wX3ZpbmZvLCB2ZWN0eXBlKTsKLSAgICAg IHZlY3RfcmVjb3JkX2xvb3BfbWFzayAobG9vcF92aW5mbywgbWFza3MsIG5j b3BpZXMsIHZlY3R5cGUpOworICAgICAgdmVjdF9yZWNvcmRfbG9vcF9tYXNr IChsb29wX3ZpbmZvLCBtYXNrcywgbmNvcGllcywgdmVjdHlwZSwgc2NhbGFy X21hc2spOwogICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtMTk3NCw3ICsx OTc1LDcgQEAgY2hlY2tfbG9hZF9zdG9yZV9tYXNraW5nIChsb29wX3ZlY19p bmZvIGxvb3BfdmluZm8sIHRyZWUgdmVjdHlwZSwKICAgcG9seV91aW50NjQg dmYgPSBMT09QX1ZJTkZPX1ZFQ1RfRkFDVE9SIChsb29wX3ZpbmZvKTsKICAg dW5zaWduZWQgaW50IG52ZWN0b3JzOwogICBpZiAoY2FuX2Rpdl9hd2F5X2Zy b21femVyb19wIChncm91cF9zaXplICogdmYsIG51bml0cywgJm52ZWN0b3Jz KSkKLSAgICB2ZWN0X3JlY29yZF9sb29wX21hc2sgKGxvb3BfdmluZm8sIG1h c2tzLCBudmVjdG9ycywgdmVjdHlwZSk7CisgICAgdmVjdF9yZWNvcmRfbG9v cF9tYXNrIChsb29wX3ZpbmZvLCBtYXNrcywgbnZlY3RvcnMsIHZlY3R5cGUs IHNjYWxhcl9tYXNrKTsKICAgZWxzZQogICAgIGdjY191bnJlYWNoYWJsZSAo KTsKIH0KQEAgLTM0MzYsNyArMzQzNyw5IEBAIHZlY3Rvcml6YWJsZV9jYWxs IChzdG10X3ZlY19pbmZvIHN0bXRfaW5mbywgZ2ltcGxlX3N0bXRfaXRlcmF0 b3IgKmdzaSwKIAkgIHVuc2lnbmVkIGludCBudmVjdG9ycyA9IChzbHBfbm9k ZQogCQkJCSAgID8gU0xQX1RSRUVfTlVNQkVSX09GX1ZFQ19TVE1UUyAoc2xw X25vZGUpCiAJCQkJICAgOiBuY29waWVzKTsKLQkgIHZlY3RfcmVjb3JkX2xv b3BfbWFzayAobG9vcF92aW5mbywgbWFza3MsIG52ZWN0b3JzLCB2ZWN0eXBl X291dCk7CisJICB0cmVlIHNjYWxhcl9tYXNrID0gZ2ltcGxlX2NhbGxfYXJn IChzdG10X2luZm8tPnN0bXQsIG1hc2tfb3Bubyk7CisJICB2ZWN0X3JlY29y ZF9sb29wX21hc2sgKGxvb3BfdmluZm8sIG1hc2tzLCBudmVjdG9ycywKKwkJ CQkgdmVjdHlwZV9vdXQsIHNjYWxhcl9tYXNrKTsKIAl9CiAgICAgICByZXR1 cm4gdHJ1ZTsKICAgICB9CkBAIC03MzkwLDcgKzczOTMsNyBAQCB2ZWN0b3Jp emFibGVfc3RvcmUgKHN0bXRfdmVjX2luZm8gc3RtdF9pbmZvLCBnaW1wbGVf c3RtdF9pdGVyYXRvciAqZ3NpLAogICAgICAgaWYgKGxvb3BfdmluZm8KIAkg ICYmIExPT1BfVklORk9fQ0FOX0ZVTExZX01BU0tfUCAobG9vcF92aW5mbykp CiAJY2hlY2tfbG9hZF9zdG9yZV9tYXNraW5nIChsb29wX3ZpbmZvLCB2ZWN0 eXBlLCB2bHNfdHlwZSwgZ3JvdXBfc2l6ZSwKLQkJCQkgIG1lbW9yeV9hY2Nl c3NfdHlwZSwgJmdzX2luZm8pOworCQkJCSAgbWVtb3J5X2FjY2Vzc190eXBl LCAmZ3NfaW5mbywgbWFzayk7CiAKICAgICAgIFNUTVRfVklORk9fVFlQRSAo c3RtdF9pbmZvKSA9IHN0b3JlX3ZlY19pbmZvX3R5cGU7CiAgICAgICB2ZWN0 X21vZGVsX3N0b3JlX2Nvc3QgKHN0bXRfaW5mbywgbmNvcGllcywgcmhzX2R0 LCBtZW1vcnlfYWNjZXNzX3R5cGUsCkBAIC04NjM3LDcgKzg2NDAsNyBAQCB2 ZWN0b3JpemFibGVfbG9hZCAoc3RtdF92ZWNfaW5mbyBzdG10X2luZm8sIGdp bXBsZV9zdG10X2l0ZXJhdG9yICpnc2ksCiAgICAgICBpZiAobG9vcF92aW5m bwogCSAgJiYgTE9PUF9WSU5GT19DQU5fRlVMTFlfTUFTS19QIChsb29wX3Zp bmZvKSkKIAljaGVja19sb2FkX3N0b3JlX21hc2tpbmcgKGxvb3BfdmluZm8s IHZlY3R5cGUsIFZMU19MT0FELCBncm91cF9zaXplLAotCQkJCSAgbWVtb3J5 X2FjY2Vzc190eXBlLCAmZ3NfaW5mbyk7CisJCQkJICBtZW1vcnlfYWNjZXNz X3R5cGUsICZnc19pbmZvLCBtYXNrKTsKIAogICAgICAgU1RNVF9WSU5GT19U WVBFIChzdG10X2luZm8pID0gbG9hZF92ZWNfaW5mb190eXBlOwogICAgICAg dmVjdF9tb2RlbF9sb2FkX2Nvc3QgKHN0bXRfaW5mbywgbmNvcGllcywgbWVt b3J5X2FjY2Vzc190eXBlLApAQCAtOTk5OSw2ICsxMDAwMiwzNSBAQCB2ZWN0 b3JpemFibGVfY29uZGl0aW9uIChzdG10X3ZlY19pbmZvIHN0bXRfaW5mbywg Z2ltcGxlX3N0bXRfaXRlcmF0b3IgKmdzaSwKICAgLyogSGFuZGxlIGNvbmQg ZXhwci4gICovCiAgIGZvciAoaiA9IDA7IGogPCBuY29waWVzOyBqKyspCiAg ICAgeworICAgICAgdHJlZSBsb29wX21hc2sgPSBOVUxMX1RSRUU7CisgICAg ICBib29sIHN3YXBfY29uZF9vcGVyYW5kcyA9IGZhbHNlOworCisgICAgICAv KiBTZWUgd2hldGhlciBhbm90aGVyIHBhcnQgb2YgdGhlIHZlY3Rvcml6ZWQg Y29kZSBhcHBsaWVzIGEgbG9vcAorCSBtYXNrIHRvIHRoZSBjb25kaXRpb24s IG9yIHRvIGl0cyBpbnZlcnNlLiAgKi8KKworICAgICAgaWYgKGxvb3Bfdmlu Zm8gJiYgTE9PUF9WSU5GT19GVUxMWV9NQVNLRURfUCAobG9vcF92aW5mbykp CisJeworCSAgc2NhbGFyX2NvbmRfbWFza2VkX2tleSBjb25kIChjb25kX2V4 cHIsIG5jb3BpZXMpOworCSAgaWYgKGxvb3BfdmluZm8tPnNjYWxhcl9jb25k X21hc2tlZF9zZXQuY29udGFpbnMgKGNvbmQpKQorCSAgICB7CisJICAgICAg dmVjX2xvb3BfbWFza3MgKm1hc2tzID0gJkxPT1BfVklORk9fTUFTS1MgKGxv b3BfdmluZm8pOworCSAgICAgIGxvb3BfbWFzayA9IHZlY3RfZ2V0X2xvb3Bf bWFzayAoZ3NpLCBtYXNrcywgbmNvcGllcywgdmVjdHlwZSwgaik7CisJICAg IH0KKwkgIGVsc2UKKwkgICAgeworCSAgICAgIGJvb2wgaG9ub3JfbmFucyA9 IEhPTk9SX05BTlMgKFRSRUVfVFlQRSAoY29uZC5vcDApKTsKKwkgICAgICBj b25kLmNvZGUgPSBpbnZlcnRfdHJlZV9jb21wYXJpc29uIChjb25kLmNvZGUs IGhvbm9yX25hbnMpOworCSAgICAgIGlmIChsb29wX3ZpbmZvLT5zY2FsYXJf Y29uZF9tYXNrZWRfc2V0LmNvbnRhaW5zIChjb25kKSkKKwkJeworCQkgIHZl Y19sb29wX21hc2tzICptYXNrcyA9ICZMT09QX1ZJTkZPX01BU0tTIChsb29w X3ZpbmZvKTsKKwkJICBsb29wX21hc2sgPSB2ZWN0X2dldF9sb29wX21hc2sg KGdzaSwgbWFza3MsIG5jb3BpZXMsCisJCQkJCQkgIHZlY3R5cGUsIGopOwor CQkgIGNvbmRfY29kZSA9IGNvbmQuY29kZTsKKwkJICBzd2FwX2NvbmRfb3Bl cmFuZHMgPSB0cnVlOworCQl9CisJICAgIH0KKwl9CisKICAgICAgIHN0bXRf dmVjX2luZm8gbmV3X3N0bXRfaW5mbyA9IE5VTEw7CiAgICAgICBpZiAoaiA9 PSAwKQogCXsKQEAgLTEwMDc2LDYgKzEwMTA4LDkgQEAgdmVjdG9yaXphYmxl X2NvbmRpdGlvbiAoc3RtdF92ZWNfaW5mbyBzdG10X2luZm8sIGdpbXBsZV9z dG10X2l0ZXJhdG9yICpnc2ksCiAgICAgICAgICAgdmVjX3RoZW5fY2xhdXNl ID0gdmVjX29wcm5kczJbaV07CiAgICAgICAgICAgdmVjX2Vsc2VfY2xhdXNl ID0gdmVjX29wcm5kczNbaV07CiAKKwkgIGlmIChzd2FwX2NvbmRfb3BlcmFu ZHMpCisJICAgIHN0ZDo6c3dhcCAodmVjX3RoZW5fY2xhdXNlLCB2ZWNfZWxz ZV9jbGF1c2UpOworCiAJICBpZiAobWFza2VkKQogCSAgICB2ZWNfY29tcGFy ZSA9IHZlY19jb25kX2xoczsKIAkgIGVsc2UKQEAgLTEwMTE0LDYgKzEwMTQ5 LDQ4IEBAIHZlY3Rvcml6YWJsZV9jb25kaXRpb24gKHN0bXRfdmVjX2luZm8g c3RtdF9pbmZvLCBnaW1wbGVfc3RtdF9pdGVyYXRvciAqZ3NpLAogCQkgICAg fQogCQl9CiAJICAgIH0KKworCSAgLyogSWYgd2UgZGVjaWRlZCB0byBhcHBs eSBhIGxvb3AgbWFzayB0byByZXN1bHQgb2YgdmVjCisJICAgICBjb21wYXJp c29uLCBzbyBsYXRlciBwYXNzZXMgd2lsbCByZXVzZSB0aGUgc2FtZSBjb25k aXRpb24uCisKKwkgICAgIEZvciBleGFtcGxlOgorCSAgICAgZm9yIChpbnQg aSA9IDA7IGkgPCAxMDA7ICsraSkKKwkgICAgICAgeFtpXSA9IHlbaV0gPyB6 W2ldIDogMTA7CisKKwkgICAgIHJlc3VsdHMgaW4gZm9sbG93aW5nIG9wdGlt aXplZCBHSU1QTEU6CisKKwkgICAgIG1hc2tfXzM1LjhfNDMgPSB2ZWN0X180 LjdfNDEgIT0geyAwLCAuLi4gfTsKKwkgICAgIHZlY19tYXNrX2FuZF80NiA9 IGxvb3BfbWFza180MCAmIG1hc2tfXzM1LjhfNDM7CisJICAgICBfMTkgPSAm TUVNW2Jhc2U6IHpfMTIoRCksIGluZGV4OiBpdnRtcF81Niwgc3RlcDogNCwg b2Zmc2V0OiAwQl07CisJICAgICB2ZWN0X2lmdG1wLjExXzQ3ID0gLk1BU0tf TE9BRCAoXzE5LCA0QiwgdmVjX21hc2tfYW5kXzQ2KTsKKwkgICAgIHZlY3Rf aWZ0bXAuMTJfNTIgPSBWRUNfQ09ORF9FWFBSIDx2ZWNfbWFza19hbmRfNDYs CisJCQkJCSAgICAgICB2ZWN0X2lmdG1wLjExXzQ3LCB7IDEwLCAuLi4gfT47 CisKKwkgICAgIGluc3RlYWQgb2YgdXNpbmcgYSBtYXNrZWQgYW5kIHVubWFz a2VkIGZvcm1zIG9mCisgICAgICAgICAgICAgdmVjICE9IHsgMCwgLi4uIH0g KG1hc2tlZCBpbiB0aGUgTUFTS19MT0FELAorICAgICAgICAgICAgIHVubWFz a2VkIGluIHRoZSBWRUNfQ09ORF9FWFBSKS4gICovCisKKwkgIGlmIChsb29w X21hc2spCisJICAgIHsKKwkgICAgICBpZiAoQ09NUEFSSVNPTl9DTEFTU19Q ICh2ZWNfY29tcGFyZSkpCisJCXsKKwkJICB0cmVlIHRtcCA9IG1ha2Vfc3Nh X25hbWUgKHZlY19jbXBfdHlwZSk7CisJCSAgdHJlZSBvcDAgPSBUUkVFX09Q RVJBTkQgKHZlY19jb21wYXJlLCAwKTsKKwkJICB0cmVlIG9wMSA9IFRSRUVf T1BFUkFORCAodmVjX2NvbXBhcmUsIDEpOworCQkgIGdhc3NpZ24gKmcgPSBn aW1wbGVfYnVpbGRfYXNzaWduICh0bXAsCisJCQkJCQkgICAgVFJFRV9DT0RF ICh2ZWNfY29tcGFyZSksCisJCQkJCQkgICAgb3AwLCBvcDEpOworCQkgIHZl Y3RfZmluaXNoX3N0bXRfZ2VuZXJhdGlvbiAoc3RtdF9pbmZvLCBnLCBnc2kp OworCQkgIHZlY19jb21wYXJlID0gdG1wOworCQl9CisKKwkgICAgICB0cmVl IHRtcDIgPSBtYWtlX3NzYV9uYW1lICh2ZWNfY21wX3R5cGUpOworCSAgICAg IGdhc3NpZ24gKmcgPSBnaW1wbGVfYnVpbGRfYXNzaWduICh0bXAyLCBCSVRf QU5EX0VYUFIsCisJCQkJCQl2ZWNfY29tcGFyZSwgbG9vcF9tYXNrKTsKKwkg ICAgICB2ZWN0X2ZpbmlzaF9zdG10X2dlbmVyYXRpb24gKHN0bXRfaW5mbywg ZywgZ3NpKTsKKwkgICAgICB2ZWNfY29tcGFyZSA9IHRtcDI7CisJICAgIH0K KwogCSAgaWYgKHJlZHVjdGlvbl90eXBlID09IEVYVFJBQ1RfTEFTVF9SRURV Q1RJT04pCiAJICAgIHsKIAkgICAgICBpZiAoIWlzX2dpbXBsZV92YWwgKHZl Y19jb21wYXJlKSkKZGlmZiAtLWdpdCBhL2djYy90cmVlLXZlY3Rvcml6ZXIu YyBiL2djYy90cmVlLXZlY3Rvcml6ZXIuYwppbmRleCA4MDBjOTlmZWEyNi4u MjA5NDVhMzljODQgMTAwNjQ0Ci0tLSBhL2djYy90cmVlLXZlY3Rvcml6ZXIu YworKysgYi9nY2MvdHJlZS12ZWN0b3JpemVyLmMKQEAgLTE1MTYsMyArMTUx NiwzNiBAQCBtYWtlX3Bhc3NfaXBhX2luY3JlYXNlX2FsaWdubWVudCAoZ2Nj Ojpjb250ZXh0ICpjdHh0KQogewogICByZXR1cm4gbmV3IHBhc3NfaXBhX2lu Y3JlYXNlX2FsaWdubWVudCAoY3R4dCk7CiB9CisKKy8qIElmIGNvZGUoVCkg aXMgY29tcGFyaXNvbiBvcCBvciBkZWYgb2YgY29tcGFyaXNvbiBzdG10LAor ICAgZXh0cmFjdCBpdCdzIG9wZXJhbmRzLgorICAgRWxzZSByZXR1cm4gPE5F X0VYUFIsIFQsIDA+LiAgKi8KKwordm9pZAorc2NhbGFyX2NvbmRfbWFza2Vk X2tleTo6Z2V0X2NvbmRfb3BzX2Zyb21fdHJlZSAodHJlZSB0KQoreworICBp ZiAoVFJFRV9DT0RFX0NMQVNTIChUUkVFX0NPREUgKHQpKSA9PSB0Y2NfY29t cGFyaXNvbikKKyAgICB7CisgICAgICB0aGlzLT5jb2RlID0gVFJFRV9DT0RF ICh0KTsKKyAgICAgIHRoaXMtPm9wMCA9IFRSRUVfT1BFUkFORCAodCwgMCk7 CisgICAgICB0aGlzLT5vcDEgPSBUUkVFX09QRVJBTkQgKHQsIDEpOworICAg ICAgcmV0dXJuOworICAgIH0KKworICBpZiAoVFJFRV9DT0RFICh0KSA9PSBT U0FfTkFNRSkKKyAgICBpZiAoZ2Fzc2lnbiAqc3RtdCA9IGR5bl9jYXN0PGdh c3NpZ24gKj4gKFNTQV9OQU1FX0RFRl9TVE1UICh0KSkpCisgICAgICB7CisJ dHJlZV9jb2RlIGNvZGUgPSBnaW1wbGVfYXNzaWduX3Joc19jb2RlIChzdG10 KTsKKwlpZiAoVFJFRV9DT0RFX0NMQVNTIChjb2RlKSA9PSB0Y2NfY29tcGFy aXNvbikKKwkgIHsKKwkgICAgdGhpcy0+Y29kZSA9IGNvZGU7CisJICAgIHRo aXMtPm9wMCA9IGdpbXBsZV9hc3NpZ25fcmhzMSAoc3RtdCk7CisJICAgIHRo aXMtPm9wMSA9IGdpbXBsZV9hc3NpZ25fcmhzMiAoc3RtdCk7CisJICAgIHJl dHVybjsKKwkgIH0KKyAgICAgIH0KKworICB0aGlzLT5jb2RlID0gTkVfRVhQ UjsKKyAgdGhpcy0+b3AwID0gdDsKKyAgdGhpcy0+b3AxID0gYnVpbGRfemVy b19jc3QgKFRSRUVfVFlQRSAodCkpOworfQpkaWZmIC0tZ2l0IGEvZ2NjL3Ry ZWUtdmVjdG9yaXplci5oIGIvZ2NjL3RyZWUtdmVjdG9yaXplci5oCmluZGV4 IDgzN2ZiNWFiNTI1Li4zNzM2N2VhMTMwNSAxMDA2NDQKLS0tIGEvZ2NjL3Ry ZWUtdmVjdG9yaXplci5oCisrKyBiL2djYy90cmVlLXZlY3Rvcml6ZXIuaApA QCAtMjYsNiArMjYsNyBAQCB0eXBlZGVmIGNsYXNzIF9zdG10X3ZlY19pbmZv ICpzdG10X3ZlY19pbmZvOwogI2luY2x1ZGUgInRyZWUtZGF0YS1yZWYuaCIK ICNpbmNsdWRlICJ0cmVlLWhhc2gtdHJhaXRzLmgiCiAjaW5jbHVkZSAidGFy Z2V0LmgiCisjaW5jbHVkZSAiaGFzaC1zZXQuaCIKIAogLyogVXNlZCBmb3Ig bmFtaW5nIG9mIG5ldyB0ZW1wb3Jhcmllcy4gICovCiBlbnVtIHZlY3RfdmFy X2tpbmQgewpAQCAtMTc3LDcgKzE3OCw3NSBAQCBwdWJsaWM6CiAjZGVmaW5l IFNMUF9UUkVFX1RXT19PUEVSQVRPUlMoUykJCSAoUyktPnR3b19vcGVyYXRv cnMKICNkZWZpbmUgU0xQX1RSRUVfREVGX1RZUEUoUykJCQkgKFMpLT5kZWZf dHlwZQogCisvKiBLZXkgZm9yIG1hcCB0aGF0IHJlY29yZHMgYXNzb2NpYXRp b24gYmV0d2VlbgorICAgc2NhbGFyIGNvbmRpdGlvbnMgYW5kIGNvcnJlc3Bv bmRpbmcgbG9vcCBtYXNrLCBhbmQKKyAgIGlzIHBvcHVsYXRlZCBieSB2ZWN0 X3JlY29yZF9sb29wX21hc2suICAqLworIAorc3RydWN0IHNjYWxhcl9jb25k X21hc2tlZF9rZXkKK3sKKyAgc2NhbGFyX2NvbmRfbWFza2VkX2tleSAodHJl ZSB0LCB1bnNpZ25lZCBuY29waWVzXykKKyAgICA6IG5jb3BpZXMgKG5jb3Bp ZXNfKQorICB7CisgICAgZ2V0X2NvbmRfb3BzX2Zyb21fdHJlZSAodCk7Cisg IH0KKworICB2b2lkIGdldF9jb25kX29wc19mcm9tX3RyZWUgKHRyZWUpOwor CisgIHVuc2lnbmVkIG5jb3BpZXM7CisgIHRyZWVfY29kZSBjb2RlOworICB0 cmVlIG9wMDsKKyAgdHJlZSBvcDE7Cit9OwogCit0ZW1wbGF0ZTw+CitzdHJ1 Y3QgZGVmYXVsdF9oYXNoX3RyYWl0czxzY2FsYXJfY29uZF9tYXNrZWRfa2V5 PgoreworICB0eXBlZGVmIHNjYWxhcl9jb25kX21hc2tlZF9rZXkgY29tcGFy ZV90eXBlOworICB0eXBlZGVmIHNjYWxhcl9jb25kX21hc2tlZF9rZXkgdmFs dWVfdHlwZTsKKworICBzdGF0aWMgaW5saW5lIGhhc2h2YWxfdAorICBoYXNo ICh2YWx1ZV90eXBlIHYpCisgIHsKKyAgICBpbmNoYXNoOjpoYXNoIGg7Cisg ICAgaC5hZGRfaW50ICh2LmNvZGUpOworICAgIGluY2hhc2g6OmFkZF9leHBy ICh2Lm9wMCwgaCwgMCk7CisgICAgaW5jaGFzaDo6YWRkX2V4cHIgKHYub3Ax LCBoLCAwKTsKKyAgICBoLmFkZF9pbnQgKHYubmNvcGllcyk7CisgICAgcmV0 dXJuIGguZW5kICgpOworICB9CisKKyAgc3RhdGljIGlubGluZSBib29sCisg IGVxdWFsICh2YWx1ZV90eXBlIGV4aXN0aW5nLCB2YWx1ZV90eXBlIGNhbmRp ZGF0ZSkKKyAgeworICAgIHJldHVybiAoZXhpc3RpbmcubmNvcGllcyA9PSBj YW5kaWRhdGUubmNvcGllcworCSAgICAmJiBleGlzdGluZy5jb2RlID09IGNh bmRpZGF0ZS5jb2RlCisJICAgICYmIG9wZXJhbmRfZXF1YWxfcCAoZXhpc3Rp bmcub3AwLCBjYW5kaWRhdGUub3AwLCAwKQorCSAgICAmJiBvcGVyYW5kX2Vx dWFsX3AgKGV4aXN0aW5nLm9wMSwgY2FuZGlkYXRlLm9wMSwgMCkpOworICB9 CisKKyAgc3RhdGljIGlubGluZSB2b2lkCisgIG1hcmtfZW1wdHkgKHZhbHVl X3R5cGUgJnYpCisgIHsKKyAgICB2Lm5jb3BpZXMgPSAwOworICB9CisKKyAg c3RhdGljIGlubGluZSBib29sCisgIGlzX2VtcHR5ICh2YWx1ZV90eXBlIHYp CisgIHsKKyAgICByZXR1cm4gdi5uY29waWVzID09IDA7CisgIH0KKworICBz dGF0aWMgaW5saW5lIHZvaWQgbWFya19kZWxldGVkICh2YWx1ZV90eXBlICYp IHt9CisKKyAgc3RhdGljIGlubGluZSBib29sIGlzX2RlbGV0ZWQgKGNvbnN0 IHZhbHVlX3R5cGUgJikKKyAgeworICAgIHJldHVybiBmYWxzZTsKKyAgfQor CisgIHN0YXRpYyBpbmxpbmUgdm9pZCByZW1vdmUgKHZhbHVlX3R5cGUgJikg e30KK307CisKK3R5cGVkZWYgaGFzaF9zZXQ8c2NhbGFyX2NvbmRfbWFza2Vk X2tleT4gc2NhbGFyX2NvbmRfbWFza2VkX3NldF90eXBlOwogCiAvKiBEZXNj cmliZXMgdHdvIG9iamVjdHMgd2hvc2UgYWRkcmVzc2VzIG11c3QgYmUgdW5l cXVhbCBmb3IgdGhlIHZlY3Rvcml6ZWQKICAgIGxvb3AgdG8gYmUgdmFsaWQu ICAqLwpAQCAtMjU4LDYgKzMyNyw5IEBAIHB1YmxpYzoKICAgLyogQ29zdCBk YXRhIHVzZWQgYnkgdGhlIHRhcmdldCBjb3N0IG1vZGVsLiAgKi8KICAgdm9p ZCAqdGFyZ2V0X2Nvc3RfZGF0YTsKIAorICAvKiBTZXQgb2Ygc2NhbGFyIGNv bmRpdGlvbnMgdGhhdCBoYXZlIGxvb3AgbWFzayBhcHBsaWVkLiAgKi8KKyAg c2NhbGFyX2NvbmRfbWFza2VkX3NldF90eXBlIHNjYWxhcl9jb25kX21hc2tl ZF9zZXQ7CisKIHByaXZhdGU6CiAgIHN0bXRfdmVjX2luZm8gbmV3X3N0bXRf dmVjX2luZm8gKGdpbXBsZSAqc3RtdCk7CiAgIHZvaWQgc2V0X3ZpbmZvX2Zv cl9zdG10IChnaW1wbGUgKiwgc3RtdF92ZWNfaW5mbyk7CkBAIC0xNjQxLDcg KzE3MTMsNyBAQCBleHRlcm4gdm9pZCB2ZWN0X2dlbl92ZWN0b3JfbG9vcF9u aXRlcnMgKGxvb3BfdmVjX2luZm8sIHRyZWUsIHRyZWUgKiwKIGV4dGVybiB0 cmVlIHZlY3RfaGFsdmVfbWFza19udW5pdHMgKHRyZWUpOwogZXh0ZXJuIHRy ZWUgdmVjdF9kb3VibGVfbWFza19udW5pdHMgKHRyZWUpOwogZXh0ZXJuIHZv aWQgdmVjdF9yZWNvcmRfbG9vcF9tYXNrIChsb29wX3ZlY19pbmZvLCB2ZWNf bG9vcF9tYXNrcyAqLAotCQkJCSAgIHVuc2lnbmVkIGludCwgdHJlZSk7CisJ CQkJICAgdW5zaWduZWQgaW50LCB0cmVlLCB0cmVlKTsKIGV4dGVybiB0cmVl IHZlY3RfZ2V0X2xvb3BfbWFzayAoZ2ltcGxlX3N0bXRfaXRlcmF0b3IgKiwg dmVjX2xvb3BfbWFza3MgKiwKIAkJCQl1bnNpZ25lZCBpbnQsIHRyZWUsIHVu c2lnbmVkIGludCk7CiAK --000000000000b6f8fd05947145bc--