From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id C8EADA0544 for ; Tue, 11 Oct 2022 04:39:04 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id A98C940F19; Tue, 11 Oct 2022 04:39:04 +0200 (CEST) Received: from mail-il1-f225.google.com (mail-il1-f225.google.com [209.85.166.225]) by mails.dpdk.org (Postfix) with ESMTP id A4FE940146 for ; Tue, 11 Oct 2022 04:39:03 +0200 (CEST) Received: by mail-il1-f225.google.com with SMTP id a2so6508723iln.13 for ; Mon, 10 Oct 2022 19:39:03 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=iol.unh.edu; s=unh-iol; h=date:message-id:cc:to:from:subject:mime-version:from:to:cc:subject :date:message-id:reply-to; bh=uqEGKHW7NzBlLt/6Ig8mJ2mnBPjr/FIkzHPtJAiqTGE=; b=Wvybd+TqiUGLFBamcRjOUUbTAbiCz90+x0jipTctRiwacCD7csnPzAMwhPEBmhzzYo eSZB7iVGHUMot89ztK2igHi6oDZNCEnqAWxtoYi/V+JvDR5J96f1lrn+3hvy643yAiXL Z/L17KEwB0il+7Fqbpc8w/2d5W3VKqHm6yYAQ= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=date:message-id:cc:to:from:subject:mime-version:x-gm-message-state :from:to:cc:subject:date:message-id:reply-to; bh=uqEGKHW7NzBlLt/6Ig8mJ2mnBPjr/FIkzHPtJAiqTGE=; b=6iUL/nqTBOVBqnhqIJpw4l5nfYy70yEjgBiChYrSmzwbVkO7S7ERZbBAQn8eAwLGRP 6NrXV6ukFw8g9R2Q4Rg69BjhHAz91joL6nCvxRUkKfeQotw+OYJFObOjnmgNuEZ9RaoE KL7axmS3K8C/99TofXRvPN5YI7L8axEN4k8qSXnnmWl9CX03RMN86sEtNWetvF9ribxN MIWopwdoEcBAx2OiFzU1xYN5bZYL7uxt6NYP+3Y42ZLE1QcYr6W8Q9oIlEnwhaledNS1 tV8KCpa/lBkkfV5huqI6XVk6YsuQwbzIsccpfu0HLNUkG+MG8O8MAxCf0Dh82U6Gfbwj GlNg== X-Gm-Message-State: ACrzQf1Nam7dU9WalfIAcSdTddXKJuc946lfaq9VVbiPiBUw6XeYKktW tkgMTvdj4cz1MW5eMvWgMwF+YQW3ulb73R7BJuO2GD7BBo7u7A== X-Google-Smtp-Source: AMsMyM56Di0skf7gGtASgT2Sk27xclK20IdnpL77R9BfkP3rSgROl5HN1qubSJKz3PmzdlgCYVOZqUqb5MJF X-Received: by 2002:a92:6a07:0:b0:2f9:b1ce:ccf2 with SMTP id f7-20020a926a07000000b002f9b1ceccf2mr11105739ilc.272.1665455943006; Mon, 10 Oct 2022 19:39:03 -0700 (PDT) Received: from postal.iol.unh.edu (postal.iol.unh.edu. [132.177.123.84]) by smtp-relay.gmail.com with ESMTPS id b10-20020a02190a000000b0036342bd5ca7sm818579jab.52.2022.10.10.19.39.02 (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Mon, 10 Oct 2022 19:39:03 -0700 (PDT) X-Relaying-Domain: iol.unh.edu Received: from noxus.dpdklab.iol.unh.edu (unknown [IPv6:2606:4100:3880:1722::4]) by postal.iol.unh.edu (Postfix) with ESMTP id 76FC860524E4; Mon, 10 Oct 2022 22:39:02 -0400 (EDT) Received: from noxus.dpdklab.iol.unh.edu (localhost [IPv6:::1]) by noxus.dpdklab.iol.unh.edu (Postfix) with ESMTP id 6DEC06D509; Mon, 10 Oct 2022 22:39:02 -0400 (EDT) Content-Type: multipart/mixed; boundary="===============7608046258066495453==" MIME-Version: 1.0 Subject: |WARNING| pw117860 [PATCH] [v1, 32/35] net/ionic: add optimized handlers for non-scattered Rx/Tx From: dpdklab@iol.unh.edu To: test-report@dpdk.org Cc: dpdk-test-reports@iol.unh.edu Message-Id: <20221011023902.6DEC06D509@noxus.dpdklab.iol.unh.edu> Date: Mon, 10 Oct 2022 22:39:02 -0400 (EDT) X-BeenThere: test-report@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: automatic DPDK test reports List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: test-report-bounces@dpdk.org --===============7608046258066495453== Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: base64 VGVzdC1MYWJlbDogaW9sLXRlc3RpbmcKVGVzdC1TdGF0dXM6IFdBUk5JTkcKaHR0cDovL2RwZGsu b3JnL3BhdGNoLzExNzg2MAoKX2FwcGx5IHBhdGNoIGZhaWx1cmVfCgpTdWJtaXR0ZXI6IEFuZHJl dyBCb3llciA8QW5kcmV3LkJveWVyQGFtZC5jb20+CkRhdGU6IFR1ZXNkYXksIE9jdG9iZXIgMTEg MjAyMiAwMDo1MDoyOSAKQXBwbGllZCBvbjogQ29tbWl0SUQ6ZjEzNjA0ZmFkMTJhODEzODNkYTdi MDQ4MjFhNGJlZmIzZDAxZTJlZApBcHBseSBwYXRjaCBzZXQgMTE3ODYwIGZhaWxlZDoKCkNoZWNr aW5nIHBhdGNoIGRvYy9ndWlkZXMvcmVsX25vdGVzL3JlbGVhc2VfMjJfMTEucnN0Li4uCmVycm9y OiB3aGlsZSBzZWFyY2hpbmcgZm9yOgogICogQWRkZWQgc3VwcG9ydCBmb3IgYWR2ZXJ0aXNpbmcg cGFja2V0IHR5cGVzLgogICogQWRkZWQgc3VwcG9ydCBmb3IgZGVzY3JpcHRvciBzdGF0dXMgZnVu Y3Rpb25zLgogICogQWRkZWQgUS1pbi1DTUIgZmVhdHVyZSBjb250cm9sbGVkIGJ5IGRldmFyZyBp b25pY19jbWIuCgoqICoqQWRkZWQgc3VwcG9ydCBmb3IgTUFDc2VjIGluIHJ0ZV9zZWN1cml0eS4q KgoKCmVycm9yOiBwYXRjaCBmYWlsZWQ6IGRvYy9ndWlkZXMvcmVsX25vdGVzL3JlbGVhc2VfMjJf MTEucnN0OjE2OQpDaGVja2luZyBwYXRjaCBkcml2ZXJzL25ldC9pb25pYy9pb25pY19ldGhkZXYu Yy4uLgpIdW5rICMxIHN1Y2NlZWRlZCBhdCA4MzQgKG9mZnNldCA2IGxpbmVzKS4KZXJyb3I6IHdo aWxlIHNlYXJjaGluZyBmb3I6CglpZiAoZGV2X2NvbmYtPmxwYmtfbW9kZSkKCQlJT05JQ19QUklO VChXQVJOSU5HLCAiTG9vcGJhY2sgbW9kZSBub3Qgc3VwcG9ydGVkIik7CgoJbGlmLT5mcmFtZV9z aXplID0gZXRoX2Rldi0+ZGF0YS0+bXR1ICsgSU9OSUNfRVRIX09WRVJIRUFEOwoKCWVyciA9IGlv bmljX2xpZl9jaGFuZ2VfbXR1KGxpZiwgZXRoX2Rldi0+ZGF0YS0+bXR1KTsKCmVycm9yOiBwYXRj aCBmYWlsZWQ6IGRyaXZlcnMvbmV0L2lvbmljL2lvbmljX2V0aGRldi5jOjg4MwpIdW5rICMzIHN1 Y2NlZWRlZCBhdCA5MTIgKG9mZnNldCAtMTAgbGluZXMpLgplcnJvcjogd2hpbGUgc2VhcmNoaW5n IGZvcjoKCUlPTklDX1BSSU5UX0NBTEwoKTsKCglldGhfZGV2LT5kZXZfb3BzID0gJmlvbmljX2V0 aF9kZXZfb3BzOwoJZXRoX2Rldi0+cnhfcGt0X2J1cnN0ID0gJmlvbmljX3JlY3ZfcGt0czsKCWV0 aF9kZXYtPnR4X3BrdF9idXJzdCA9ICZpb25pY194bWl0X3BrdHM7CglldGhfZGV2LT50eF9wa3Rf cHJlcGFyZSA9ICZpb25pY19wcmVwX3BrdHM7CgoJZXRoX2Rldi0+cnhfZGVzY3JpcHRvcl9zdGF0 dXMgPSBpb25pY19kZXZfcnhfZGVzY3JpcHRvcl9zdGF0dXM7CglldGhfZGV2LT50eF9kZXNjcmlw dG9yX3N0YXR1cyA9IGlvbmljX2Rldl90eF9kZXNjcmlwdG9yX3N0YXR1czsKCgplcnJvcjogcGF0 Y2ggZmFpbGVkOiBkcml2ZXJzL25ldC9pb25pYy9pb25pY19ldGhkZXYuYzo5ODAKQ2hlY2tpbmcg cGF0Y2ggZHJpdmVycy9uZXQvaW9uaWMvaW9uaWNfbGlmLmMuLi4KZXJyb3I6IHdoaWxlIHNlYXJj aGluZyBmb3I6CgkJc3RydWN0IGlvbmljX3J4X3FjcSAqKnJ4cV9vdXQpCnsKCXN0cnVjdCBpb25p Y19yeF9xY3EgKnJ4cTsKCXVpbnQxNl90IGZsYWdzLCBzZWdfc2l6ZSwgaGRyX3NlZ19zaXplLCBt YXhfc2VncywgbWF4X3NlZ3NfZnc7Cgl1aW50MzJfdCBtYXhfbXR1OwoJaW50IGVycjsKCglmbGFn cyA9IElPTklDX1FDUV9GX1NHOwoJaWYgKGxpZi0+c3RhdGUgJiBJT05JQ19MSUZfRl9RX0lOX0NN QikKCQlmbGFncyB8PSBJT05JQ19RQ1FfRl9DTUI7CgoKZXJyb3I6IHBhdGNoIGZhaWxlZDogZHJp dmVycy9uZXQvaW9uaWMvaW9uaWNfbGlmLmM6NzU1CmVycm9yOiB3aGlsZSBzZWFyY2hpbmcgZm9y OgoKCW1heF9tdHUgPSBydGVfbGVfdG9fY3B1XzMyKGxpZi0+YWRhcHRlci0+aWRlbnQubGlmLmV0 aC5tYXhfbXR1KTsKCgltYXhfc2Vnc19mdyA9IElPTklDX1JYX01BWF9TR19FTEVNUyArIDE7CgoJ LyoKCSAqIENhbGN1bGF0ZSBob3cgbWFueSBmcmFnbWVudCBwb2ludGVycyBtaWdodCBiZSBzdG9y ZWQgaW4gcXVldWUuCgplcnJvcjogcGF0Y2ggZmFpbGVkOiBkcml2ZXJzL25ldC9pb25pYy9pb25p Y19saWYuYzo3NzAKZXJyb3I6IHdoaWxlIHNlYXJjaGluZyBmb3I6CgkJdWludDE2X3QgbnR4cV9k ZXNjcywgc3RydWN0IGlvbmljX3R4X3FjcSAqKnR4cV9vdXQpCnsKCXN0cnVjdCBpb25pY190eF9x Y3EgKnR4cTsKCXVpbnQxNl90IGZsYWdzLCBudW1fc2Vnc19mdzsKCWludCBlcnI7CgoJZmxhZ3Mg PSBJT05JQ19RQ1FfRl9TRzsKCWlmIChsaWYtPnN0YXRlICYgSU9OSUNfTElGX0ZfUV9JTl9DTUIp CgkJZmxhZ3MgfD0gSU9OSUNfUUNRX0ZfQ01COwoKCW51bV9zZWdzX2Z3ID0gSU9OSUNfVFhfTUFY X1NHX0VMRU1TX1YxICsgMTsKCgllcnIgPSBpb25pY19xY3FfYWxsb2MobGlmLAoJCUlPTklDX1FU WVBFX1RYUSwKCmVycm9yOiBwYXRjaCBmYWlsZWQ6IGRyaXZlcnMvbmV0L2lvbmljL2lvbmljX2xp Zi5jOjgyMApIdW5rICM0IHN1Y2NlZWRlZCBhdCAxNTMwIChvZmZzZXQgLTQ0IGxpbmVzKS4KZXJy b3I6IHdoaWxlIHNlYXJjaGluZyBmb3I6Cgl9OwoJaW50IGVycjsKCglpZiAodHhxLT5mbGFncyAm IElPTklDX1FDUV9GX0NNQikKCQljdHguY21kLnFfaW5pdC5mbGFncyB8PSBydGVfY3B1X3RvX2xl XzE2KElPTklDX1FJTklUX0ZfQ01CKTsKCgplcnJvcjogcGF0Y2ggZmFpbGVkOiBkcml2ZXJzL25l dC9pb25pYy9pb25pY19saWYuYzoxNTcyCkh1bmsgIzYgc3VjY2VlZGVkIGF0IDE0ODIgKG9mZnNl dCAtMTQ3IGxpbmVzKS4KZXJyb3I6IHdoaWxlIHNlYXJjaGluZyBmb3I6Cgl9OwoJaW50IGVycjsK CglpZiAocnhxLT5mbGFncyAmIElPTklDX1FDUV9GX0NNQikKCQljdHguY21kLnFfaW5pdC5mbGFn cyB8PSBydGVfY3B1X3RvX2xlXzE2KElPTklDX1FJTklUX0ZfQ01CKTsKCgplcnJvcjogcGF0Y2gg ZmFpbGVkOiBkcml2ZXJzL25ldC9pb25pYy9pb25pY19saWYuYzoxNjI2Ckh1bmsgIzggc3VjY2Vl ZGVkIGF0IDE2OTggKG9mZnNldCAtMTA4IGxpbmVzKS4KSHVuayAjOSBzdWNjZWVkZWQgYXQgMTc1 NyAob2Zmc2V0IC0xMDggbGluZXMpLgpDaGVja2luZyBwYXRjaCBkcml2ZXJzL25ldC9pb25pYy9p b25pY19saWYuaC4uLgpIdW5rICMxIHN1Y2NlZWRlZCBhdCAxNzQgKG9mZnNldCAtMTQgbGluZXMp LgpDaGVja2luZyBwYXRjaCBkcml2ZXJzL25ldC9pb25pYy9pb25pY19yeHR4LmMuLi4KZXJyb3I6 IHdoaWxlIHNlYXJjaGluZyBmb3I6CiAqIENvcHlyaWdodCAyMDE4LTIwMjIgQWR2YW5jZWQgTWlj cm8gRGV2aWNlcywgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgogKi8KCiNpbmNsdWRlIDxzeXMv cXVldWUuaD4KI2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdGRsaWIuaD4KI2luY2x1ZGUg PHN0cmluZy5oPgojaW5jbHVkZSA8ZXJybm8uaD4KI2luY2x1ZGUgPHN0ZGludC5oPgojaW5jbHVk ZSA8c3RkYXJnLmg+CiNpbmNsdWRlIDx1bmlzdGQuaD4KI2luY2x1ZGUgPGludHR5cGVzLmg+Cgoj aW5jbHVkZSA8cnRlX2J5dGVvcmRlci5oPgojaW5jbHVkZSA8cnRlX2NvbW1vbi5oPgojaW5jbHVk ZSA8cnRlX2N5Y2xlcy5oPgojaW5jbHVkZSA8cnRlX2xvZy5oPgojaW5jbHVkZSA8cnRlX2RlYnVn Lmg+CiNpbmNsdWRlIDxydGVfaW50ZXJydXB0cy5oPgojaW5jbHVkZSA8cnRlX3BjaS5oPgojaW5j bHVkZSA8cnRlX21lbW9yeS5oPgojaW5jbHVkZSA8cnRlX21lbXpvbmUuaD4KI2luY2x1ZGUgPHJ0 ZV9sYXVuY2guaD4KI2luY2x1ZGUgPHJ0ZV9lYWwuaD4KI2luY2x1ZGUgPHJ0ZV9wZXJfbGNvcmUu aD4KI2luY2x1ZGUgPHJ0ZV9sY29yZS5oPgojaW5jbHVkZSA8cnRlX2F0b21pYy5oPgojaW5jbHVk ZSA8cnRlX2JyYW5jaF9wcmVkaWN0aW9uLmg+CiNpbmNsdWRlIDxydGVfbWVtcG9vbC5oPgojaW5j bHVkZSA8cnRlX21hbGxvYy5oPgojaW5jbHVkZSA8cnRlX21idWYuaD4KI2luY2x1ZGUgPHJ0ZV9l dGhlci5oPgojaW5jbHVkZSA8ZXRoZGV2X2RyaXZlci5oPgojaW5jbHVkZSA8cnRlX3ByZWZldGNo Lmg+CiNpbmNsdWRlIDxydGVfdWRwLmg+CiNpbmNsdWRlIDxydGVfdGNwLmg+CiNpbmNsdWRlIDxy dGVfc2N0cC5oPgojaW5jbHVkZSA8cnRlX3N0cmluZ19mbnMuaD4KI2luY2x1ZGUgPHJ0ZV9lcnJu by5oPgojaW5jbHVkZSA8cnRlX2lwLmg+CiNpbmNsdWRlIDxydGVfbmV0Lmg+CgojaW5jbHVkZSAi aW9uaWNfbG9ncy5oIgojaW5jbHVkZSAiaW9uaWNfbWFjX2FwaS5oIgojaW5jbHVkZSAiaW9uaWNf ZXRoZGV2LmgiCiNpbmNsdWRlICJpb25pY19saWYuaCIKI2luY2x1ZGUgImlvbmljX3J4dHguaCIK CnN0YXRpYyB2b2lkCmlvbmljX2VtcHR5X2FycmF5KHZvaWQgKiphcnJheSwgdWludDMyX3QgY250 LCB1aW50MTZfdCBpZHgpCgplcnJvcjogcGF0Y2ggZmFpbGVkOiBkcml2ZXJzL25ldC9pb25pYy9p b25pY19yeHR4LmM6MgplcnJvcjogd2hpbGUgc2VhcmNoaW5nIGZvcjoKCXFpbmZvLT5jb25mLnR4 X2RlZmVycmVkX3N0YXJ0ID0gdHhxLT5mbGFncyAmIElPTklDX1FDUV9GX0RFRkVSUkVEOwp9Cgpz dGF0aWMgX19ydGVfYWx3YXlzX2lubGluZSB2b2lkCmlvbmljX3R4X2ZsdXNoKHN0cnVjdCBpb25p Y190eF9xY3EgKnR4cSkKewoJc3RydWN0IGlvbmljX2NxICpjcSA9ICZ0eHEtPnFjcS5jcTsKCXN0 cnVjdCBpb25pY19xdWV1ZSAqcSA9ICZ0eHEtPnFjcS5xOwoJc3RydWN0IHJ0ZV9tYnVmICp0eG07 CglzdHJ1Y3QgaW9uaWNfdHhxX2NvbXAgKmNxX2Rlc2MsICpjcV9kZXNjX2Jhc2UgPSBjcS0+YmFz ZTsKCXZvaWQgKippbmZvOwoJdWludDMyX3QgaTsKCgljcV9kZXNjID0gJmNxX2Rlc2NfYmFzZVtj cS0+dGFpbF9pZHhdOwoKCXdoaWxlIChjb2xvcl9tYXRjaChjcV9kZXNjLT5jb2xvciwgY3EtPmRv bmVfY29sb3IpKSB7CgkJY3EtPnRhaWxfaWR4ID0gUV9ORVhUX1RPX1NSVkMoY3EsIDEpOwoJCWlm IChjcS0+dGFpbF9pZHggPT0gMCkKCQkJY3EtPmRvbmVfY29sb3IgPSAhY3EtPmRvbmVfY29sb3I7 CgoJCS8qIFByZWZldGNoIDQgeCAxNkIgY29tcCBhdCBjcS0+dGFpbF9pZHggKyA0ICovCgkJaWYg KChjcS0+dGFpbF9pZHggJiAweDMpID09IDApCgkJCXJ0ZV9wcmVmZXRjaDAoJmNxX2Rlc2NfYmFz ZVtRX05FWFRfVE9fU1JWQyhjcSwgNCldKTsKCgkJd2hpbGUgKHEtPnRhaWxfaWR4ICE9IHJ0ZV9s ZV90b19jcHVfMTYoY3FfZGVzYy0+Y29tcF9pbmRleCkpIHsKCQkJLyogUHJlZmV0Y2ggOCBtYnVm IHB0cnMgYXQgcS0+dGFpbF9pZHggKyAyICovCgkJCXJ0ZV9wcmVmZXRjaDAoSU9OSUNfSU5GT19Q VFIocSwgUV9ORVhUX1RPX1NSVkMocSwgMikpKTsKCgkJCS8qIFByZWZldGNoIG5leHQgbWJ1ZiAq LwoJCQl2b2lkICoqbmV4dF9pbmZvID0KCQkJCUlPTklDX0lORk9fUFRSKHEsIFFfTkVYVF9UT19T UlZDKHEsIDEpKTsKCQkJaWYgKG5leHRfaW5mb1swXSkKCQkJCXJ0ZV9tYnVmX3ByZWZldGNoX3Bh cnQyKG5leHRfaW5mb1swXSk7CgkJCWlmIChuZXh0X2luZm9bMV0pCgkJCQlydGVfbWJ1Zl9wcmVm ZXRjaF9wYXJ0MihuZXh0X2luZm9bMV0pOwoKCQkJaW5mbyA9IElPTklDX0lORk9fUFRSKHEsIHEt PnRhaWxfaWR4KTsKCQkJZm9yIChpID0gMDsgaSA8IHEtPm51bV9zZWdzOyBpKyspIHsKCQkJCXR4 bSA9IGluZm9baV07CgkJCQlpZiAoIXR4bSkKCQkJCQlicmVhazsKCgkJCQlpZiAodHhxLT5mbGFn cyAmIElPTklDX1FDUV9GX0ZBU1RfRlJFRSkKCQkJCQlydGVfbWVtcG9vbF9wdXQodHhtLT5wb29s LCB0eG0pOwoJCQkJZWxzZQoJCQkJCXJ0ZV9wa3RtYnVmX2ZyZWVfc2VnKHR4bSk7CgoJCQkJaW5m b1tpXSA9IE5VTEw7CgkJCX0KCgkJCXEtPnRhaWxfaWR4ID0gUV9ORVhUX1RPX1NSVkMocSwgMSk7 CgkJfQoKCQljcV9kZXNjID0gJmNxX2Rlc2NfYmFzZVtjcS0+dGFpbF9pZHhdOwoJfQp9Cgp2b2lk IF9fcnRlX2NvbGQKaW9uaWNfZGV2X3R4X3F1ZXVlX3JlbGVhc2Uoc3RydWN0IHJ0ZV9ldGhfZGV2 ICpkZXYsIHVpbnQxNl90IHFpZCkKewoKZXJyb3I6IHBhdGNoIGZhaWxlZDogZHJpdmVycy9uZXQv aW9uaWMvaW9uaWNfcnh0eC5jOjEwMwpIdW5rICMzIHN1Y2NlZWRlZCBhdCAzMzQgKG9mZnNldCAx NiBsaW5lcykuCkh1bmsgIzQgc3VjY2VlZGVkIGF0IDM0NSAob2Zmc2V0IDE2IGxpbmVzKS4KSHVu ayAjNSBzdWNjZWVkZWQgYXQgMzU2IChvZmZzZXQgMTYgbGluZXMpLgpIdW5rICM2IHN1Y2NlZWRl ZCBhdCAzNzkgKG9mZnNldCAxNiBsaW5lcykuCkh1bmsgIzcgc3VjY2VlZGVkIGF0IDQwMiAob2Zm c2V0IDE2IGxpbmVzKS4KSHVuayAjOCBzdWNjZWVkZWQgYXQgNDI1IChvZmZzZXQgMTYgbGluZXMp LgplcnJvcjogd2hpbGUgc2VhcmNoaW5nIGZvcjoKCXJldHVybiAwOwp9CgpzdGF0aWMgX19ydGVf YWx3YXlzX2lubGluZSBpbnQKaW9uaWNfdHgoc3RydWN0IGlvbmljX3R4X3FjcSAqdHhxLCBzdHJ1 Y3QgcnRlX21idWYgKnR4bSkKewoJc3RydWN0IGlvbmljX3F1ZXVlICpxID0gJnR4cS0+cWNxLnE7 CglzdHJ1Y3QgaW9uaWNfdHhxX2Rlc2MgKmRlc2MsICpkZXNjX2Jhc2UgPSBxLT5iYXNlOwoJc3Ry dWN0IGlvbmljX3R4cV9zZ19kZXNjX3YxICpzZ19kZXNjX2Jhc2UgPSBxLT5zZ19iYXNlOwoJc3Ry dWN0IGlvbmljX3R4cV9zZ19lbGVtICplbGVtOwoJc3RydWN0IGlvbmljX3R4X3N0YXRzICpzdGF0 cyA9ICZ0eHEtPnN0YXRzOwoJc3RydWN0IHJ0ZV9tYnVmICp0eG1fc2VnOwoJdm9pZCAqKmluZm87 CglydGVfaW92YV90IGRhdGFfaW92YTsKCXVpbnQ2NF90IG9sX2ZsYWdzID0gdHhtLT5vbF9mbGFn czsKCXVpbnQ2NF90IGFkZHIsIGNtZDsKCXVpbnQ4X3Qgb3Bjb2RlID0gSU9OSUNfVFhRX0RFU0Nf T1BDT0RFX0NTVU1fTk9ORTsKCXVpbnQ4X3QgZmxhZ3MgPSAwOwoKCWRlc2MgPSAmZGVzY19iYXNl W3EtPmhlYWRfaWR4XTsKCWluZm8gPSBJT05JQ19JTkZPX1BUUihxLCBxLT5oZWFkX2lkeCk7CgoJ aWYgKChvbF9mbGFncyAmIFJURV9NQlVGX0ZfVFhfSVBfQ0tTVU0pICYmCgkgICAgKHR4cS0+Zmxh Z3MgJiBJT05JQ19RQ1FfRl9DU1VNX0wzKSkgewoJCW9wY29kZSA9IElPTklDX1RYUV9ERVNDX09Q Q09ERV9DU1VNX0hXOwoJCWZsYWdzIHw9IElPTklDX1RYUV9ERVNDX0ZMQUdfQ1NVTV9MMzsKCX0K CglpZiAoKChvbF9mbGFncyAmIFJURV9NQlVGX0ZfVFhfVENQX0NLU1VNKSAmJgoJICAgICAodHhx LT5mbGFncyAmIElPTklDX1FDUV9GX0NTVU1fVENQKSkgfHwKCSAgICAoKG9sX2ZsYWdzICYgUlRF X01CVUZfRl9UWF9VRFBfQ0tTVU0pICYmCgkgICAgICh0eHEtPmZsYWdzICYgSU9OSUNfUUNRX0Zf Q1NVTV9VRFApKSkgewoJCW9wY29kZSA9IElPTklDX1RYUV9ERVNDX09QQ09ERV9DU1VNX0hXOwoJ CWZsYWdzIHw9IElPTklDX1RYUV9ERVNDX0ZMQUdfQ1NVTV9MNDsKCX0KCglpZiAob3Bjb2RlID09 IElPTklDX1RYUV9ERVNDX09QQ09ERV9DU1VNX05PTkUpCgkJc3RhdHMtPm5vX2NzdW0rKzsKCglp ZiAoKChvbF9mbGFncyAmIFJURV9NQlVGX0ZfVFhfT1VURVJfSVBfQ0tTVU0pIHx8CgkgICAgIChv bF9mbGFncyAmIFJURV9NQlVGX0ZfVFhfT1VURVJfVURQX0NLU1VNKSkgJiYKCSAgICAoKG9sX2Zs YWdzICYgUlRFX01CVUZfRl9UWF9PVVRFUl9JUFY0KSB8fAoJICAgICAob2xfZmxhZ3MgJiBSVEVf TUJVRl9GX1RYX09VVEVSX0lQVjYpKSkgewoJCWZsYWdzIHw9IElPTklDX1RYUV9ERVNDX0ZMQUdf RU5DQVA7Cgl9CgoJaWYgKG9sX2ZsYWdzICYgUlRFX01CVUZfRl9UWF9WTEFOKSB7CgkJZmxhZ3Mg fD0gSU9OSUNfVFhRX0RFU0NfRkxBR19WTEFOOwoJCWRlc2MtPnZsYW5fdGNpID0gcnRlX2NwdV90 b19sZV8xNih0eG0tPnZsYW5fdGNpKTsKCX0KCglhZGRyID0gcnRlX2NwdV90b19sZV82NChydGVf bWJ1Zl9kYXRhX2lvdmEodHhtKSk7CgoJY21kID0gZW5jb2RlX3R4cV9kZXNjX2NtZChvcGNvZGUs IGZsYWdzLCB0eG0tPm5iX3NlZ3MgLSAxLCBhZGRyKTsKCWRlc2MtPmNtZCA9IHJ0ZV9jcHVfdG9f bGVfNjQoY21kKTsKCWRlc2MtPmxlbiA9IHJ0ZV9jcHVfdG9fbGVfMTYodHhtLT5kYXRhX2xlbik7 CgoJaW5mb1swXSA9IHR4bTsKCglpZiAodHhtLT5uYl9zZWdzID4gMSkgewoJCXR4bV9zZWcgPSB0 eG0tPm5leHQ7CgoJCWVsZW0gPSBzZ19kZXNjX2Jhc2VbcS0+aGVhZF9pZHhdLmVsZW1zOwoKCQl3 aGlsZSAodHhtX3NlZyAhPSBOVUxMKSB7CgkJCS8qIFN0YXNoIHRoZSBtYnVmIHB0ciBpbiB0aGUg YXJyYXkgKi8KCQkJaW5mbysrOwoJCQkqaW5mbyA9IHR4bV9zZWc7CgoJCQkvKiBDb25maWd1cmUg dGhlIFNHRSAqLwoJCQlkYXRhX2lvdmEgPSBydGVfbWJ1Zl9kYXRhX2lvdmEodHhtX3NlZyk7CgkJ CWVsZW0tPmxlbiA9IHJ0ZV9jcHVfdG9fbGVfMTYodHhtX3NlZy0+ZGF0YV9sZW4pOwoJCQllbGVt LT5hZGRyID0gcnRlX2NwdV90b19sZV82NChkYXRhX2lvdmEpOwoJCQllbGVtKys7CgoJCQl0eG1f c2VnID0gdHhtX3NlZy0+bmV4dDsKCQl9Cgl9CgoJcS0+aGVhZF9pZHggPSBRX05FWFRfVE9fUE9T VChxLCAxKTsKCglyZXR1cm4gMDsKfQoKdWludDE2X3QKaW9uaWNfeG1pdF9wa3RzKHZvaWQgKnR4 X3F1ZXVlLCBzdHJ1Y3QgcnRlX21idWYgKip0eF9wa3RzLAoJCXVpbnQxNl90IG5iX3BrdHMpCnsK CXN0cnVjdCBpb25pY190eF9xY3EgKnR4cSA9IHR4X3F1ZXVlOwoJc3RydWN0IGlvbmljX3F1ZXVl ICpxID0gJnR4cS0+cWNxLnE7CglzdHJ1Y3QgaW9uaWNfdHhfc3RhdHMgKnN0YXRzID0gJnR4cS0+ c3RhdHM7CglzdHJ1Y3QgcnRlX21idWYgKm1idWY7Cgl1aW50MzJfdCBieXRlc190eCA9IDA7Cgl1 aW50MTZfdCBuYl9hdmFpbCwgbmJfdHggPSAwOwoJaW50IGVycjsKCglzdHJ1Y3QgaW9uaWNfdHhx X2Rlc2MgKmRlc2NfYmFzZSA9IHEtPmJhc2U7CglpZiAoISh0eHEtPmZsYWdzICYgSU9OSUNfUUNR X0ZfQ01CKSkKCQlydGVfcHJlZmV0Y2gwKCZkZXNjX2Jhc2VbcS0+aGVhZF9pZHhdKTsKCXJ0ZV9w cmVmZXRjaDAoSU9OSUNfSU5GT19QVFIocSwgcS0+aGVhZF9pZHgpKTsKCglpZiAodHhfcGt0cykg ewoJCXJ0ZV9tYnVmX3ByZWZldGNoX3BhcnQxKHR4X3BrdHNbMF0pOwoJCXJ0ZV9tYnVmX3ByZWZl dGNoX3BhcnQyKHR4X3BrdHNbMF0pOwoJfQoKCWlmICh1bmxpa2VseShpb25pY19xX3NwYWNlX2F2 YWlsKHEpIDwgdHhxLT5mcmVlX3RocmVzaCkpIHsKCQkvKiBDbGVhbmluZyBvbGQgYnVmZmVycyAq LwoJCWlvbmljX3R4X2ZsdXNoKHR4cSk7Cgl9CgoJbmJfYXZhaWwgPSBpb25pY19xX3NwYWNlX2F2 YWlsKHEpOwoJaWYgKHVubGlrZWx5KG5iX2F2YWlsIDwgbmJfcGt0cykpIHsKCQlzdGF0cy0+c3Rv cCArPSBuYl9wa3RzIC0gbmJfYXZhaWw7CgkJbmJfcGt0cyA9IG5iX2F2YWlsOwoJfQoKCXdoaWxl IChuYl90eCA8IG5iX3BrdHMpIHsKCQl1aW50MTZfdCBuZXh0X2lkeCA9IFFfTkVYVF9UT19QT1NU KHEsIDEpOwoJCWlmICghKHR4cS0+ZmxhZ3MgJiBJT05JQ19RQ1FfRl9DTUIpKQoJCQlydGVfcHJl ZmV0Y2gwKCZkZXNjX2Jhc2VbbmV4dF9pZHhdKTsKCQlydGVfcHJlZmV0Y2gwKElPTklDX0lORk9f UFRSKHEsIG5leHRfaWR4KSk7CgoJCWlmIChuYl90eCArIDEgPCBuYl9wa3RzKSB7CgkJCXJ0ZV9t YnVmX3ByZWZldGNoX3BhcnQxKHR4X3BrdHNbbmJfdHggKyAxXSk7CgkJCXJ0ZV9tYnVmX3ByZWZl dGNoX3BhcnQyKHR4X3BrdHNbbmJfdHggKyAxXSk7CgkJfQoKCQltYnVmID0gdHhfcGt0c1tuYl90 eF07CgoJCWlmIChtYnVmLT5vbF9mbGFncyAmIFJURV9NQlVGX0ZfVFhfVENQX1NFRykKCQkJZXJy ID0gaW9uaWNfdHhfdHNvKHR4cSwgbWJ1Zik7CgkJZWxzZQoJCQllcnIgPSBpb25pY190eCh0eHEs IG1idWYpOwoJCWlmIChlcnIpIHsKCQkJc3RhdHMtPmRyb3AgKz0gbmJfcGt0cyAtIG5iX3R4OwoJ CQlicmVhazsKCQl9CgoJCWJ5dGVzX3R4ICs9IG1idWYtPnBrdF9sZW47CgkJbmJfdHgrKzsKCX0K CglpZiAobmJfdHggPiAwKSB7CgkJcnRlX3dtYigpOwoJCWlvbmljX3FfZmx1c2gocSk7CgoJCXN0 YXRzLT5wYWNrZXRzICs9IG5iX3R4OwoJCXN0YXRzLT5ieXRlcyArPSBieXRlc190eDsKCX0KCgly ZXR1cm4gbmJfdHg7Cn0KCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICoKICogIFRYIHByZXAgZnVuY3Rpb25zCgpl cnJvcjogcGF0Y2ggZmFpbGVkOiBkcml2ZXJzL25ldC9pb25pYy9pb25pY19yeHR4LmM6NTE3CmVy cm9yOiB3aGlsZSBzZWFyY2hpbmcgZm9yOgp9CgojZGVmaW5lIElPTklDX0NTVU1fRkxBR19NQVNL IChJT05JQ19SWFFfQ09NUF9DU1VNX0ZfVkxBTiAtIDEpCnN0YXRpYyBjb25zdCB1aW50NjRfdCBp b25pY19jc3VtX2ZsYWdzW0lPTklDX0NTVU1fRkxBR19NQVNLXQoJCV9fcnRlX2NhY2hlX2FsaWdu ZWQgPSB7CgkvKiBJUF9CQUQgc2V0ICovCglbSU9OSUNfUlhRX0NPTVBfQ1NVTV9GX0lQX0JBRF0g PSBSVEVfTUJVRl9GX1JYX0lQX0NLU1VNX0JBRCwKCmVycm9yOiBwYXRjaCBmYWlsZWQ6IGRyaXZl cnMvbmV0L2lvbmljL2lvbmljX3J4dHguYzo4MjAKZXJyb3I6IHdoaWxlIHNlYXJjaGluZyBmb3I6 Cn07CgovKiBSVEVfUFRZUEVfVU5LTk9XTiBpcyAweDAgKi8Kc3RhdGljIGNvbnN0IHVpbnQzMl90 IGlvbmljX3B0eXBlX3RhYmxlW0lPTklDX1JYUV9DT01QX1BLVF9UWVBFX01BU0tdCgkJX19ydGVf Y2FjaGVfYWxpZ25lZCA9IHsKCVtJT05JQ19QS1RfVFlQRV9OT05fSVBdICAgPSBSVEVfUFRZUEVf VU5LTk9XTiwKCVtJT05JQ19QS1RfVFlQRV9JUFY0XSAgICAgPSBSVEVfUFRZUEVfTDJfRVRIRVIg fCBSVEVfUFRZUEVfTDNfSVBWNCwKCmVycm9yOiBwYXRjaCBmYWlsZWQ6IGRyaXZlcnMvbmV0L2lv bmljL2lvbmljX3J4dHguYzo4NTAKZXJyb3I6IHdoaWxlIHNlYXJjaGluZyBmb3I6CglyZXR1cm4g cHR5cGVzOwp9CgovKgogKiBDbGVhbnMgb25lIGRlc2NyaXB0b3IuIENvbm5lY3RzIHRoZSBmaWxs ZWQgbWJ1ZnMgaW50byBhIGNoYWluLgogKiBEb2VzIG5vdCBhZHZhbmNlIHRoZSB0YWlsIGluZGV4 LgogKi8Kc3RhdGljIF9fcnRlX2Fsd2F5c19pbmxpbmUgdm9pZAppb25pY19yeF9jbGVhbl9vbmUo c3RydWN0IGlvbmljX3J4X3FjcSAqcnhxLAoJCXN0cnVjdCBpb25pY19yeHFfY29tcCAqY3FfZGVz YywKCQlzdHJ1Y3QgaW9uaWNfcnhfc2VydmljZSAqcnhfc3ZjKQp7CglzdHJ1Y3QgaW9uaWNfcXVl dWUgKnEgPSAmcnhxLT5xY3EucTsKCXN0cnVjdCBydGVfbWJ1ZiAqcnhtLCAqcnhtX3NlZywgKnBy ZXZfcnhtOwoJc3RydWN0IGlvbmljX3J4X3N0YXRzICpzdGF0cyA9ICZyeHEtPnN0YXRzOwoJdWlu dDY0X3QgcGt0X2ZsYWdzID0gMDsKCXVpbnQzMl90IHBrdF90eXBlOwoJdWludDMyX3QgbGVmdCwg aTsKCXVpbnQxNl90IGNxX2Rlc2NfbGVuOwoJdWludDhfdCBwdHlwZSwgY2ZsYWdzOwoJdm9pZCAq KmluZm87CgoJY3FfZGVzY19sZW4gPSBydGVfbGVfdG9fY3B1XzE2KGNxX2Rlc2MtPmxlbik7CgoJ aW5mbyA9IElPTklDX0lORk9fUFRSKHEsIHEtPnRhaWxfaWR4KTsKCglyeG0gPSBpbmZvWzBdOwoK CWlmIChjcV9kZXNjLT5zdGF0dXMpIHsKCQlzdGF0cy0+YmFkX2NxX3N0YXR1cysrOwoJCXJldHVy bjsKCX0KCglpZiAoY3FfZGVzY19sZW4gPiByeHEtPmZyYW1lX3NpemUgfHwgY3FfZGVzY19sZW4g PT0gMCkgewoJCXN0YXRzLT5iYWRfbGVuKys7CgkJcmV0dXJuOwoJfQoKCWluZm9bMF0gPSBOVUxM OwoKCS8qIFNldCB0aGUgbWJ1ZiBtZXRhZGF0YSBiYXNlZCBvbiB0aGUgY3EgZW50cnkgKi8KCXJ4 bS0+cmVhcm1fZGF0YVswXSA9IHJ4cS0+cmVhcm1fZGF0YTsKCXJ4bS0+cGt0X2xlbiA9IGNxX2Rl c2NfbGVuOwoJcnhtLT5kYXRhX2xlbiA9IFJURV9NSU4ocnhxLT5oZHJfc2VnX3NpemUsIGNxX2Rl c2NfbGVuKTsKCWxlZnQgPSBjcV9kZXNjX2xlbiAtIHJ4bS0+ZGF0YV9sZW47CglyeG0tPm5iX3Nl Z3MgPSBjcV9kZXNjLT5udW1fc2dfZWxlbXMgKyAxOwoJcHJldl9yeG0gPSByeG07CgoJZm9yIChp ID0gMTsgaSA8IHJ4bS0+bmJfc2VncyAmJiBsZWZ0OyBpKyspIHsKCQlyeG1fc2VnID0gaW5mb1tp XTsKCQlpbmZvW2ldID0gTlVMTDsKCgkJLyogU2V0IHRoZSBjaGFpbmVkIG1idWYgbWV0YWRhdGEg Ki8KCQlyeG1fc2VnLT5yZWFybV9kYXRhWzBdID0gcnhxLT5yZWFybV9zZWdfZGF0YTsKCQlyeG1f c2VnLT5kYXRhX2xlbiA9IFJURV9NSU4ocnhxLT5zZWdfc2l6ZSwgbGVmdCk7CgkJbGVmdCAtPSBy eG1fc2VnLT5kYXRhX2xlbjsKCgkJLyogTGluayB0aGUgbWJ1ZiAqLwoJCXByZXZfcnhtLT5uZXh0 ID0gcnhtX3NlZzsKCQlwcmV2X3J4bSA9IHJ4bV9zZWc7Cgl9CgoJLyogVGVybWluYXRlIHRoZSBt YnVmIGNoYWluICovCglwcmV2X3J4bS0+bmV4dCA9IE5VTEw7CgoJLyogUlNTICovCglwa3RfZmxh Z3MgfD0gUlRFX01CVUZfRl9SWF9SU1NfSEFTSDsKCXJ4bS0+aGFzaC5yc3MgPSBydGVfbGVfdG9f Y3B1XzMyKGNxX2Rlc2MtPnJzc19oYXNoKTsKCgkvKiBWbGFuIFN0cmlwICovCglpZiAoY3FfZGVz Yy0+Y3N1bV9mbGFncyAmIElPTklDX1JYUV9DT01QX0NTVU1fRl9WTEFOKSB7CgkJcGt0X2ZsYWdz IHw9IFJURV9NQlVGX0ZfUlhfVkxBTiB8IFJURV9NQlVGX0ZfUlhfVkxBTl9TVFJJUFBFRDsKCQly eG0tPnZsYW5fdGNpID0gcnRlX2xlX3RvX2NwdV8xNihjcV9kZXNjLT52bGFuX3RjaSk7Cgl9CgoJ LyogQ2hlY2tzdW0gKi8KCWlmIChjcV9kZXNjLT5jc3VtX2ZsYWdzICYgSU9OSUNfUlhRX0NPTVBf Q1NVTV9GX0NBTEMpIHsKCQljZmxhZ3MgPSBjcV9kZXNjLT5jc3VtX2ZsYWdzICYgSU9OSUNfQ1NV TV9GTEFHX01BU0s7CgkJcGt0X2ZsYWdzIHw9IGlvbmljX2NzdW1fZmxhZ3NbY2ZsYWdzXTsKCX0K CglyeG0tPm9sX2ZsYWdzID0gcGt0X2ZsYWdzOwoKCS8qIFBhY2tldCBUeXBlICovCglwdHlwZSA9 IGNxX2Rlc2MtPnBrdF90eXBlX2NvbG9yICYgSU9OSUNfUlhRX0NPTVBfUEtUX1RZUEVfTUFTSzsK CXBrdF90eXBlID0gaW9uaWNfcHR5cGVfdGFibGVbcHR5cGVdOwoJaWYgKHBrdF90eXBlID09IFJU RV9QVFlQRV9VTktOT1dOKSB7CgkJc3RydWN0IHJ0ZV9ldGhlcl9oZHIgKmV0aF9oID0gcnRlX3Br dG1idWZfbXRvZChyeG0sCgkJCQlzdHJ1Y3QgcnRlX2V0aGVyX2hkciAqKTsKCQl1aW50MTZfdCBl dGhlcl90eXBlID0gZXRoX2gtPmV0aGVyX3R5cGU7CgkJaWYgKGV0aGVyX3R5cGUgPT0gcnRlX2Nw dV90b19iZV8xNihSVEVfRVRIRVJfVFlQRV9BUlApKQoJCQlwa3RfdHlwZSA9IFJURV9QVFlQRV9M Ml9FVEhFUl9BUlA7CgkJZWxzZSBpZiAoZXRoZXJfdHlwZSA9PSBydGVfY3B1X3RvX2JlXzE2KFJU RV9FVEhFUl9UWVBFX0xMRFApKQoJCQlwa3RfdHlwZSA9IFJURV9QVFlQRV9MMl9FVEhFUl9MTERQ OwoJCWVsc2UgaWYgKGV0aGVyX3R5cGUgPT0gcnRlX2NwdV90b19iZV8xNihSVEVfRVRIRVJfVFlQ RV8xNTg4KSkKCQkJcGt0X3R5cGUgPSBSVEVfUFRZUEVfTDJfRVRIRVJfVElNRVNZTkM7CgkJc3Rh dHMtPm10b2RzKys7Cgl9CgoJcnhtLT5wYWNrZXRfdHlwZSA9IHBrdF90eXBlOwoKCXJ4X3N2Yy0+ cnhfcGt0c1tyeF9zdmMtPm5iX3J4XSA9IHJ4bTsKCXJ4X3N2Yy0+bmJfcngrKzsKCglzdGF0cy0+ cGFja2V0cysrOwoJc3RhdHMtPmJ5dGVzICs9IHJ4bS0+cGt0X2xlbjsKfQoKLyoKICogRmlsbHMg b25lIGRlc2NyaXB0b3Igd2l0aCBtYnVmcy4gRG9lcyBub3QgYWR2YW5jZSB0aGUgaGVhZCBpbmRl eC4KICovCnN0YXRpYyBfX3J0ZV9hbHdheXNfaW5saW5lIGludAppb25pY19yeF9maWxsX29uZShz dHJ1Y3QgaW9uaWNfcnhfcWNxICpyeHEpCnsKCXN0cnVjdCBpb25pY19xdWV1ZSAqcSA9ICZyeHEt PnFjcS5xOwoJc3RydWN0IHJ0ZV9tYnVmICpyeG0sICpyeG1fc2VnOwoJc3RydWN0IGlvbmljX3J4 cV9kZXNjICpkZXNjLCAqZGVzY19iYXNlID0gcS0+YmFzZTsKCXN0cnVjdCBpb25pY19yeHFfc2df ZGVzYyAqc2dfZGVzYywgKnNnX2Rlc2NfYmFzZSA9IHEtPnNnX2Jhc2U7CglydGVfaW92YV90IGRh dGFfaW92YTsKCXVpbnQzMl90IGk7Cgl2b2lkICoqaW5mbzsKCWludCByZXQ7CgoJaW5mbyA9IElP TklDX0lORk9fUFRSKHEsIHEtPmhlYWRfaWR4KTsKCWRlc2MgPSAmZGVzY19iYXNlW3EtPmhlYWRf aWR4XTsKCXNnX2Rlc2MgPSAmc2dfZGVzY19iYXNlW3EtPmhlYWRfaWR4XTsKCgkvKiBtYnVmIGlz IHVudXNlZCA9PiB3aG9sZSBjaGFpbiBpcyB1bnVzZWQgKi8KCWlmICh1bmxpa2VseShpbmZvWzBd KSkKCQlyZXR1cm4gMDsKCglpZiAocnhxLT5tYl9pZHggPT0gMCkgewoJCXJldCA9IHJ0ZV9tZW1w b29sX2dldF9idWxrKHJ4cS0+bWJfcG9vbCwKCQkJCQkodm9pZCAqKilyeHEtPm1icywKCQkJCQlJ T05JQ19NQlVGX0JVTEtfQUxMT0MpOwoJCWlmIChyZXQpIHsKCQkJYXNzZXJ0KDApOwoJCQlyZXR1 cm4gLUVOT01FTTsKCQl9CgoJCXJ4cS0+bWJfaWR4ID0gSU9OSUNfTUJVRl9CVUxLX0FMTE9DOwoJ fQoKCXJ4bSA9IHJ4cS0+bWJzWy0tcnhxLT5tYl9pZHhdOwoJaW5mb1swXSA9IHJ4bTsKCglkYXRh X2lvdmEgPSBydGVfbWJ1Zl9kYXRhX2lvdmFfZGVmYXVsdChyeG0pOwoJZGVzYy0+YWRkciA9IHJ0 ZV9jcHVfdG9fbGVfNjQoZGF0YV9pb3ZhKTsKCglmb3IgKGkgPSAxOyBpIDwgcS0+bnVtX3NlZ3M7 IGkrKykgewoJCS8qIG1idWYgaXMgdW51c2VkID0+IHJlc3Qgb2YgdGhlIGNoYWluIGlzIHVudXNl ZCAqLwoJCWlmIChpbmZvW2ldKQoJCQlyZXR1cm4gMDsKCgkJaWYgKHJ4cS0+bWJfaWR4ID09IDAp IHsKCQkJcmV0ID0gcnRlX21lbXBvb2xfZ2V0X2J1bGsocnhxLT5tYl9wb29sLAoJCQkJCSh2b2lk ICoqKXJ4cS0+bWJzLAoJCQkJCUlPTklDX01CVUZfQlVMS19BTExPQyk7CgkJCWlmIChyZXQpIHsK CQkJCWFzc2VydCgwKTsKCQkJCXJldHVybiAtRU5PTUVNOwoJCQl9CgoJCQlyeHEtPm1iX2lkeCA9 IElPTklDX01CVUZfQlVMS19BTExPQzsKCQl9CgoJCXJ4bV9zZWcgPSByeHEtPm1ic1stLXJ4cS0+ bWJfaWR4XTsKCQlpbmZvW2ldIAplcnJvcjogcGF0Y2ggZmFpbGVkOiBkcml2ZXJzL25ldC9pb25p Yy9pb25pY19yeHR4LmM6ODg0CmVycm9yOiB3aGlsZSBzZWFyY2hpbmcgZm9yOgoJaWYgKGVycikK CQlyZXR1cm4gZXJyOwoKCS8qIEFsbG9jYXRlIGJ1ZmZlcnMgZm9yIGRlc2NyaXB0b3IgcmluZ3Mg Ki8KCWlmIChpb25pY19yeF9maWxsKHJ4cSkgIT0gMCkgewoJCUlPTklDX1BSSU5UKEVSUiwgIkNv dWxkIG5vdCBhbGxvYyBtYnVmIGZvciBxdWV1ZTolZCIsCgkJCXJ4X3F1ZXVlX2lkKTsKCQlyZXR1 cm4gLTE7Cgl9CgoKZXJyb3I6IHBhdGNoIGZhaWxlZDogZHJpdmVycy9uZXQvaW9uaWMvaW9uaWNf cnh0eC5jOjExNDgKZXJyb3I6IHdoaWxlIHNlYXJjaGluZyBmb3I6CglyZXR1cm4gMDsKfQoKLyoK ICogV2FsayB0aGUgQ1EgdG8gZmluZCBjb21wbGV0ZWQgcmVjZWl2ZSBkZXNjcmlwdG9ycy4KICog QW55IGNvbXBsZXRlZCBkZXNjcmlwdG9yIGZvdW5kIGlzIHJlZmlsbGVkLgogKi8Kc3RhdGljIF9f cnRlX2Fsd2F5c19pbmxpbmUgdm9pZAppb25pY19yeHFfc2VydmljZShzdHJ1Y3QgaW9uaWNfcnhf cWNxICpyeHEsIHVpbnQzMl90IHdvcmtfdG9fZG8sCgkJc3RydWN0IGlvbmljX3J4X3NlcnZpY2Ug KnJ4X3N2YykKewoJc3RydWN0IGlvbmljX2NxICpjcSA9ICZyeHEtPnFjcS5jcTsKCXN0cnVjdCBp b25pY19xdWV1ZSAqcSA9ICZyeHEtPnFjcS5xOwoJc3RydWN0IGlvbmljX3J4cV9kZXNjICpxX2Rl c2NfYmFzZSA9IHEtPmJhc2U7CglzdHJ1Y3QgaW9uaWNfcnhxX2NvbXAgKmNxX2Rlc2MsICpjcV9k ZXNjX2Jhc2UgPSBjcS0+YmFzZTsKCXVpbnQzMl90IHdvcmtfZG9uZSA9IDA7CgoJY3FfZGVzYyA9 ICZjcV9kZXNjX2Jhc2VbY3EtPnRhaWxfaWR4XTsKCgl3aGlsZSAoY29sb3JfbWF0Y2goY3FfZGVz Yy0+cGt0X3R5cGVfY29sb3IsIGNxLT5kb25lX2NvbG9yKSkgewoJCWNxLT50YWlsX2lkeCA9IFFf TkVYVF9UT19TUlZDKGNxLCAxKTsKCgkJaWYgKGNxLT50YWlsX2lkeCA9PSAwKQoJCQljcS0+ZG9u ZV9jb2xvciA9ICFjcS0+ZG9uZV9jb2xvcjsKCgkJLyogUHJlZmV0Y2ggOCB4IDhCIGJ1ZmluZm8g Ki8KCQlydGVfcHJlZmV0Y2gwKElPTklDX0lORk9fUFRSKHEsIFFfTkVYVF9UT19TUlZDKHEsIDgp KSk7CgkJLyogUHJlZmV0Y2ggNCB4IDE2QiBjb21wICovCgkJcnRlX3ByZWZldGNoMCgmY3FfZGVz Y19iYXNlW1FfTkVYVF9UT19TUlZDKGNxLCA0KV0pOwoJCS8qIFByZWZldGNoIDQgeCAxNkIgZGVz Y3JpcHRvcnMgKi8KCQlpZiAoIShyeHEtPmZsYWdzICYgSU9OSUNfUUNRX0ZfQ01CKSkKCQkJcnRl X3ByZWZldGNoMCgmcV9kZXNjX2Jhc2VbUV9ORVhUX1RPX1BPU1QocSwgNCldKTsKCgkJaW9uaWNf cnhfY2xlYW5fb25lKHJ4cSwgY3FfZGVzYywgcnhfc3ZjKTsKCgkJcS0+dGFpbF9pZHggPSBRX05F WFRfVE9fU1JWQyhxLCAxKTsKCgkJKHZvaWQpaW9uaWNfcnhfZmlsbF9vbmUocnhxKTsKCgkJcS0+ aGVhZF9pZHggPSBRX05FWFRfVE9fUE9TVChxLCAxKTsKCgkJaWYgKCsrd29ya19kb25lID09IHdv cmtfdG9fZG8pCgkJCWJyZWFrOwoKCQljcV9kZXNjID0gJmNxX2Rlc2NfYmFzZVtjcS0+dGFpbF9p ZHhdOwoJfQoKCS8qIFVwZGF0ZSB0aGUgcXVldWUgaW5kaWNlcyBhbmQgcmluZyB0aGUgZG9vcmJl bGwgKi8KCWlmICh3b3JrX2RvbmUpCgkJaW9uaWNfcV9mbHVzaChxKTsKfQoKLyoKICogU3RvcCBS ZWNlaXZlIFVuaXRzIGZvciBzcGVjaWZpZWQgcXVldWUuCiAqLwoKZXJyb3I6IHBhdGNoIGZhaWxl ZDogZHJpdmVycy9uZXQvaW9uaWMvaW9uaWNfcnh0eC5jOjExNjAKZXJyb3I6IHdoaWxlIHNlYXJj aGluZyBmb3I6CglyZXR1cm4gMDsKfQoKdWludDE2X3QKaW9uaWNfcmVjdl9wa3RzKHZvaWQgKnJ4 X3F1ZXVlLCBzdHJ1Y3QgcnRlX21idWYgKipyeF9wa3RzLAoJCXVpbnQxNl90IG5iX3BrdHMpCnsK CXN0cnVjdCBpb25pY19yeF9xY3EgKnJ4cSA9IHJ4X3F1ZXVlOwoJc3RydWN0IGlvbmljX3J4X3Nl cnZpY2Ugcnhfc3ZjOwoKCXJ4X3N2Yy5yeF9wa3RzID0gcnhfcGt0czsKCXJ4X3N2Yy5uYl9yeCA9 IDA7CgoJaW9uaWNfcnhxX3NlcnZpY2UocnhxLCBuYl9wa3RzLCAmcnhfc3ZjKTsKCglyZXR1cm4g cnhfc3ZjLm5iX3J4Owp9CgppbnQKaW9uaWNfZGV2X3J4X2Rlc2NyaXB0b3Jfc3RhdHVzKHZvaWQg KnJ4X3F1ZXVlLCB1aW50MTZfdCBvZmZzZXQpCnsKCmVycm9yOiBwYXRjaCBmYWlsZWQ6IGRyaXZl cnMvbmV0L2lvbmljL2lvbmljX3J4dHguYzoxMjM3CkNoZWNraW5nIHBhdGNoIGRyaXZlcnMvbmV0 L2lvbmljL2lvbmljX3J4dHguaC4uLgpIdW5rICMyIHN1Y2NlZWRlZCBhdCAyNyAob2Zmc2V0IDEg bGluZSkuCmVycm9yOiB3aGlsZSBzZWFyY2hpbmcgZm9yOgoKY29uc3QgdWludDMyX3QgKmlvbmlj X2Rldl9zdXBwb3J0ZWRfcHR5cGVzX2dldChzdHJ1Y3QgcnRlX2V0aF9kZXYgKmRldik7CgojZW5k aWYgLyogX0lPTklDX1JYVFhfSF8gKi8KCmVycm9yOiBwYXRjaCBmYWlsZWQ6IGRyaXZlcnMvbmV0 L2lvbmljL2lvbmljX3J4dHguaDo0NQpDaGVja2luZyBwYXRjaCBkcml2ZXJzL25ldC9pb25pYy9p b25pY19yeHR4X3NnLmMuLi4KQ2hlY2tpbmcgcGF0Y2ggZHJpdmVycy9uZXQvaW9uaWMvaW9uaWNf cnh0eF9zaW1wbGUuYy4uLgpDaGVja2luZyBwYXRjaCBkcml2ZXJzL25ldC9pb25pYy9tZXNvbi5i dWlsZC4uLgpIdW5rICMxIHN1Y2NlZWRlZCBhdCAxNSAob2Zmc2V0IC0xIGxpbmVzKS4KQXBwbHlp bmcgcGF0Y2ggZG9jL2d1aWRlcy9yZWxfbm90ZXMvcmVsZWFzZV8yMl8xMS5yc3Qgd2l0aCAxIHJl amVjdC4uLgpSZWplY3RlZCBodW5rICMxLgpBcHBseWluZyBwYXRjaCBkcml2ZXJzL25ldC9pb25p Yy9pb25pY19ldGhkZXYuYyB3aXRoIDIgcmVqZWN0cy4uLgpIdW5rICMxIGFwcGxpZWQgY2xlYW5s eS4KUmVqZWN0ZWQgaHVuayAjMi4KSHVuayAjMyBhcHBsaWVkIGNsZWFubHkuClJlamVjdGVkIGh1 bmsgIzQuCkFwcGx5aW5nIHBhdGNoIGRyaXZlcnMvbmV0L2lvbmljL2lvbmljX2xpZi5jIHdpdGgg NSByZWplY3RzLi4uClJlamVjdGVkIGh1bmsgIzEuClJlamVjdGVkIGh1bmsgIzIuClJlamVjdGVk IGh1bmsgIzMuCkh1bmsgIzQgYXBwbGllZCBjbGVhbmx5LgpSZWplY3RlZCBodW5rICM1LgpIdW5r ICM2IGFwcGxpZWQgY2xlYW5seS4KUmVqZWN0ZWQgaHVuayAjNy4KSHVuayAjOCBhcHBsaWVkIGNs ZWFubHkuCkh1bmsgIzkgYXBwbGllZCBjbGVhbmx5LgpBcHBsaWVkIHBhdGNoIGRyaXZlcnMvbmV0 L2lvbmljL2lvbmljX2xpZi5oIGNsZWFubHkuCkFwcGx5aW5nIHBhdGNoIGRyaXZlcnMvbmV0L2lv bmljL2lvbmljX3J4dHguYyB3aXRoIDkgcmVqZWN0cy4uLgpSZWplY3RlZCBodW5rICMxLgpSZWpl Y3RlZCBodW5rICMyLgpIdW5rICMzIGFwcGxpZWQgY2xlYW5seS4KSHVuayAjNCBhcHBsaWVkIGNs ZWFubHkuCkh1bmsgIzUgYXBwbGllZCBjbGVhbmx5LgpIdW5rICM2IGFwcGxpZWQgY2xlYW5seS4K SHVuayAjNyBhcHBsaWVkIGNsZWFubHkuCkh1bmsgIzggYXBwbGllZCBjbGVhbmx5LgpSZWplY3Rl ZCBodW5rICM5LgpSZWplY3RlZCBodW5rICMxMC4KUmVqZWN0ZWQgaHVuayAjMTEuClJlamVjdGVk IGh1bmsgIzEyLgpSZWplY3RlZCBodW5rICMxMy4KUmVqZWN0ZWQgaHVuayAjMTQuClJlamVjdGVk IGh1bmsgIzE1LgpBcHBseWluZyBwYXRjaCBkcml2ZXJzL25ldC9pb25pYy9pb25pY19yeHR4Lmgg d2l0aCAxIHJlamVjdC4uLgpIdW5rICMxIGFwcGxpZWQgY2xlYW5seS4KSHVuayAjMiBhcHBsaWVk IGNsZWFubHkuClJlamVjdGVkIGh1bmsgIzMuCkFwcGxpZWQgcGF0Y2ggZHJpdmVycy9uZXQvaW9u aWMvaW9uaWNfcnh0eF9zZy5jIGNsZWFubHkuCkFwcGxpZWQgcGF0Y2ggZHJpdmVycy9uZXQvaW9u aWMvaW9uaWNfcnh0eF9zaW1wbGUuYyBjbGVhbmx5LgpBcHBsaWVkIHBhdGNoIGRyaXZlcnMvbmV0 L2lvbmljL21lc29uLmJ1aWxkIGNsZWFubHkuCmRpZmYgYS9kb2MvZ3VpZGVzL3JlbF9ub3Rlcy9y ZWxlYXNlXzIyXzExLnJzdCBiL2RvYy9ndWlkZXMvcmVsX25vdGVzL3JlbGVhc2VfMjJfMTEucnN0 CShyZWplY3RlZCBodW5rcykKQEAgLTE2OSw2ICsxNjksNyBAQCBOZXcgRmVhdHVyZXMKICAgKiBB ZGRlZCBzdXBwb3J0IGZvciBhZHZlcnRpc2luZyBwYWNrZXQgdHlwZXMuCiAgICogQWRkZWQgc3Vw cG9ydCBmb3IgZGVzY3JpcHRvciBzdGF0dXMgZnVuY3Rpb25zLgogICAqIEFkZGVkIFEtaW4tQ01C IGZlYXR1cmUgY29udHJvbGxlZCBieSBkZXZhcmcgaW9uaWNfY21iLgorICAqIEFkZGVkIG9wdGlt aXplZCBoYW5kbGVycyBmb3Igbm9uLXNjYXR0ZXJlZCBSeCBhbmQgVHguCiAKICogKipBZGRlZCBz dXBwb3J0IGZvciBNQUNzZWMgaW4gcnRlX3NlY3VyaXR5LioqCiAKZGlmZiBhL2RyaXZlcnMvbmV0 L2lvbmljL2lvbmljX2V0aGRldi5jIGIvZHJpdmVycy9uZXQvaW9uaWMvaW9uaWNfZXRoZGV2LmMJ KHJlamVjdGVkIGh1bmtzKQpAQCAtODgzLDYgKzg4MSwxMyBAQCBpb25pY19kZXZfc3RhcnQoc3Ry dWN0IHJ0ZV9ldGhfZGV2ICpldGhfZGV2KQogCWlmIChkZXZfY29uZi0+bHBia19tb2RlKQogCQlJ T05JQ19QUklOVChXQVJOSU5HLCAiTG9vcGJhY2sgbW9kZSBub3Qgc3VwcG9ydGVkIik7CiAKKwkv KiBSZS1zZXQgZmVhdHVyZXMgaW4gY2FzZSBTRyBmbGFnIHdhcyBhZGRlZCBpbiByeF9xdWV1ZV9z ZXR1cCgpICovCisJZXJyID0gaW9uaWNfbGlmX3NldF9mZWF0dXJlcyhsaWYpOworCWlmIChlcnIp IHsKKwkJSU9OSUNfUFJJTlQoRVJSLCAiQ2Fubm90IHNldCBMSUYgZmVhdHVyZXM6ICVkIiwgZXJy KTsKKwkJcmV0dXJuIGVycjsKKwl9CisKIAlsaWYtPmZyYW1lX3NpemUgPSBldGhfZGV2LT5kYXRh LT5tdHUgKyBJT05JQ19FVEhfT1ZFUkhFQUQ7CiAKIAllcnIgPSBpb25pY19saWZfY2hhbmdlX210 dShsaWYsIGV0aF9kZXYtPmRhdGEtPm10dSk7CkBAIC05ODAsMTAgKzk5Nyw2IEBAIGV0aF9pb25p Y19kZXZfaW5pdChzdHJ1Y3QgcnRlX2V0aF9kZXYgKmV0aF9kZXYsIHZvaWQgKmluaXRfcGFyYW1z KQogCUlPTklDX1BSSU5UX0NBTEwoKTsKIAogCWV0aF9kZXYtPmRldl9vcHMgPSAmaW9uaWNfZXRo X2Rldl9vcHM7Ci0JZXRoX2Rldi0+cnhfcGt0X2J1cnN0ID0gJmlvbmljX3JlY3ZfcGt0czsKLQll dGhfZGV2LT50eF9wa3RfYnVyc3QgPSAmaW9uaWNfeG1pdF9wa3RzOwotCWV0aF9kZXYtPnR4X3Br dF9wcmVwYXJlID0gJmlvbmljX3ByZXBfcGt0czsKLQogCWV0aF9kZXYtPnJ4X2Rlc2NyaXB0b3Jf c3RhdHVzID0gaW9uaWNfZGV2X3J4X2Rlc2NyaXB0b3Jfc3RhdHVzOwogCWV0aF9kZXYtPnR4X2Rl c2NyaXB0b3Jfc3RhdHVzID0gaW9uaWNfZGV2X3R4X2Rlc2NyaXB0b3Jfc3RhdHVzOwogCmRpZmYg YS9kcml2ZXJzL25ldC9pb25pYy9pb25pY19saWYuYyBiL2RyaXZlcnMvbmV0L2lvbmljL2lvbmlj X2xpZi5jCShyZWplY3RlZCBodW5rcykKQEAgLTc1NSwxMSArNzU1LDEwIEBAIGlvbmljX3J4X3Fj cV9hbGxvYyhzdHJ1Y3QgaW9uaWNfbGlmICpsaWYsIHVpbnQzMl90IHNvY2tldF9pZCwgdWludDMy X3QgaW5kZXgsCiAJCXN0cnVjdCBpb25pY19yeF9xY3EgKipyeHFfb3V0KQogewogCXN0cnVjdCBp b25pY19yeF9xY3EgKnJ4cTsKLQl1aW50MTZfdCBmbGFncywgc2VnX3NpemUsIGhkcl9zZWdfc2l6 ZSwgbWF4X3NlZ3MsIG1heF9zZWdzX2Z3OworCXVpbnQxNl90IGZsYWdzID0gMCwgc2VnX3NpemUs IGhkcl9zZWdfc2l6ZSwgbWF4X3NlZ3MsIG1heF9zZWdzX2Z3ID0gMTsKIAl1aW50MzJfdCBtYXhf bXR1OwogCWludCBlcnI7CiAKLQlmbGFncyA9IElPTklDX1FDUV9GX1NHOwogCWlmIChsaWYtPnN0 YXRlICYgSU9OSUNfTElGX0ZfUV9JTl9DTUIpCiAJCWZsYWdzIHw9IElPTklDX1FDUV9GX0NNQjsK IApAQCAtNzcwLDcgKzc2OSwxOCBAQCBpb25pY19yeF9xY3FfYWxsb2Moc3RydWN0IGlvbmljX2xp ZiAqbGlmLCB1aW50MzJfdCBzb2NrZXRfaWQsIHVpbnQzMl90IGluZGV4LAogCiAJbWF4X210dSA9 IHJ0ZV9sZV90b19jcHVfMzIobGlmLT5hZGFwdGVyLT5pZGVudC5saWYuZXRoLm1heF9tdHUpOwog Ci0JbWF4X3NlZ3NfZncgPSBJT05JQ19SWF9NQVhfU0dfRUxFTVMgKyAxOworCS8qIElmIG1idWZz IGFyZSB0b28gc21hbGwgdG8gaG9sZCByZWNlaXZlZCBwYWNrZXRzLCBlbmFibGUgU0cgKi8KKwlp ZiAobWF4X210dSA+IGhkcl9zZWdfc2l6ZSkgeworCQlJT05JQ19QUklOVChOT1RJQ0UsICJFbmFi bGluZyBSWF9PRkZMT0FEX1NDQVRURVIiKTsKKwkJbGlmLT5ldGhfZGV2LT5kYXRhLT5kZXZfY29u Zi5yeG1vZGUub2ZmbG9hZHMgfD0KKwkJCVJURV9FVEhfUlhfT0ZGTE9BRF9TQ0FUVEVSOworCQlp b25pY19saWZfY29uZmlndXJlX3J4X3NnX29mZmxvYWQobGlmKTsKKwl9CisKKwlpZiAobGlmLT5m ZWF0dXJlcyAmIElPTklDX0VUSF9IV19SWF9TRykgeworCQlmbGFncyB8PSBJT05JQ19RQ1FfRl9T RzsKKwkJbWF4X3NlZ3NfZncgPSBJT05JQ19SWF9NQVhfU0dfRUxFTVMgKyAxOworCX0KIAogCS8q CiAJICogQ2FsY3VsYXRlIGhvdyBtYW55IGZyYWdtZW50IHBvaW50ZXJzIG1pZ2h0IGJlIHN0b3Jl ZCBpbiBxdWV1ZS4KQEAgLTgyMCwxNCArODMwLDE3IEBAIGlvbmljX3R4X3FjcV9hbGxvYyhzdHJ1 Y3QgaW9uaWNfbGlmICpsaWYsIHVpbnQzMl90IHNvY2tldF9pZCwgdWludDMyX3QgaW5kZXgsCiAJ CXVpbnQxNl90IG50eHFfZGVzY3MsIHN0cnVjdCBpb25pY190eF9xY3EgKip0eHFfb3V0KQogewog CXN0cnVjdCBpb25pY190eF9xY3EgKnR4cTsKLQl1aW50MTZfdCBmbGFncywgbnVtX3NlZ3NfZnc7 CisJdWludDE2X3QgZmxhZ3MgPSAwLCBudW1fc2Vnc19mdyA9IDE7CiAJaW50IGVycjsKIAotCWZs YWdzID0gSU9OSUNfUUNRX0ZfU0c7CisJaWYgKGxpZi0+ZmVhdHVyZXMgJiBJT05JQ19FVEhfSFdf VFhfU0cpIHsKKwkJZmxhZ3MgfD0gSU9OSUNfUUNRX0ZfU0c7CisJCW51bV9zZWdzX2Z3ID0gSU9O SUNfVFhfTUFYX1NHX0VMRU1TX1YxICsgMTsKKwl9CiAJaWYgKGxpZi0+c3RhdGUgJiBJT05JQ19M SUZfRl9RX0lOX0NNQikKIAkJZmxhZ3MgfD0gSU9OSUNfUUNRX0ZfQ01COwogCi0JbnVtX3NlZ3Nf ZncgPSBJT05JQ19UWF9NQVhfU0dfRUxFTVNfVjEgKyAxOworCUlPTklDX1BSSU5UKERFQlVHLCAi dHhxICV1IG51bV9zZWdzICV1IiwgaW5kZXgsIG51bV9zZWdzX2Z3KTsKIAogCWVyciA9IGlvbmlj X3FjcV9hbGxvYyhsaWYsCiAJCUlPTklDX1FUWVBFX1RYUSwKQEAgLTE1NzIsNiArMTU4NCw4IEBA IGlvbmljX2xpZl90eHFfaW5pdChzdHJ1Y3QgaW9uaWNfdHhfcWNxICp0eHEpCiAJfTsKIAlpbnQg ZXJyOwogCisJaWYgKHR4cS0+ZmxhZ3MgJiBJT05JQ19RQ1FfRl9TRykKKwkJY3R4LmNtZC5xX2lu aXQuZmxhZ3MgfD0gcnRlX2NwdV90b19sZV8xNihJT05JQ19RSU5JVF9GX1NHKTsKIAlpZiAodHhx LT5mbGFncyAmIElPTklDX1FDUV9GX0NNQikKIAkJY3R4LmNtZC5xX2luaXQuZmxhZ3MgfD0gcnRl X2NwdV90b19sZV8xNihJT05JQ19RSU5JVF9GX0NNQik7CiAKQEAgLTE2MjYsNiArMTYzOSw4IEBA IGlvbmljX2xpZl9yeHFfaW5pdChzdHJ1Y3QgaW9uaWNfcnhfcWNxICpyeHEpCiAJfTsKIAlpbnQg ZXJyOwogCisJaWYgKHJ4cS0+ZmxhZ3MgJiBJT05JQ19RQ1FfRl9TRykKKwkJY3R4LmNtZC5xX2lu aXQuZmxhZ3MgfD0gcnRlX2NwdV90b19sZV8xNihJT05JQ19RSU5JVF9GX1NHKTsKIAlpZiAocnhx LT5mbGFncyAmIElPTklDX1FDUV9GX0NNQikKIAkJY3R4LmNtZC5xX2luaXQuZmxhZ3MgfD0gcnRl X2NwdV90b19sZV8xNihJT05JQ19RSU5JVF9GX0NNQik7CiAKZGlmZiBhL2RyaXZlcnMvbmV0L2lv bmljL2lvbmljX3J4dHguYyBiL2RyaXZlcnMvbmV0L2lvbmljL2lvbmljX3J4dHguYwkocmVqZWN0 ZWQgaHVua3MpCkBAIC0yLDUwICsyLDI4IEBACiAgKiBDb3B5cmlnaHQgMjAxOC0yMDIyIEFkdmFu Y2VkIE1pY3JvIERldmljZXMsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAqLwogCi0jaW5j bHVkZSA8c3lzL3F1ZXVlLmg+CiAjaW5jbHVkZSA8c3RkaW8uaD4KLSNpbmNsdWRlIDxzdGRsaWIu aD4KICNpbmNsdWRlIDxzdHJpbmcuaD4KICNpbmNsdWRlIDxlcnJuby5oPgogI2luY2x1ZGUgPHN0 ZGludC5oPgotI2luY2x1ZGUgPHN0ZGFyZy5oPgotI2luY2x1ZGUgPHVuaXN0ZC5oPgotI2luY2x1 ZGUgPGludHR5cGVzLmg+CiAKLSNpbmNsdWRlIDxydGVfYnl0ZW9yZGVyLmg+CiAjaW5jbHVkZSA8 cnRlX2NvbW1vbi5oPgotI2luY2x1ZGUgPHJ0ZV9jeWNsZXMuaD4KKyNpbmNsdWRlIDxydGVfYnl0 ZW9yZGVyLmg+CisjaW5jbHVkZSA8cnRlX2Vycm5vLmg+CiAjaW5jbHVkZSA8cnRlX2xvZy5oPgot I2luY2x1ZGUgPHJ0ZV9kZWJ1Zy5oPgotI2luY2x1ZGUgPHJ0ZV9pbnRlcnJ1cHRzLmg+Ci0jaW5j bHVkZSA8cnRlX3BjaS5oPgotI2luY2x1ZGUgPHJ0ZV9tZW1vcnkuaD4KLSNpbmNsdWRlIDxydGVf bWVtem9uZS5oPgotI2luY2x1ZGUgPHJ0ZV9sYXVuY2guaD4KLSNpbmNsdWRlIDxydGVfZWFsLmg+ Ci0jaW5jbHVkZSA8cnRlX3Blcl9sY29yZS5oPgotI2luY2x1ZGUgPHJ0ZV9sY29yZS5oPgotI2lu Y2x1ZGUgPHJ0ZV9hdG9taWMuaD4KLSNpbmNsdWRlIDxydGVfYnJhbmNoX3ByZWRpY3Rpb24uaD4K LSNpbmNsdWRlIDxydGVfbWVtcG9vbC5oPgotI2luY2x1ZGUgPHJ0ZV9tYWxsb2MuaD4KICNpbmNs dWRlIDxydGVfbWJ1Zi5oPgogI2luY2x1ZGUgPHJ0ZV9ldGhlci5oPgotI2luY2x1ZGUgPGV0aGRl dl9kcml2ZXIuaD4KLSNpbmNsdWRlIDxydGVfcHJlZmV0Y2guaD4KLSNpbmNsdWRlIDxydGVfdWRw Lmg+Ci0jaW5jbHVkZSA8cnRlX3RjcC5oPgotI2luY2x1ZGUgPHJ0ZV9zY3RwLmg+Ci0jaW5jbHVk ZSA8cnRlX3N0cmluZ19mbnMuaD4KLSNpbmNsdWRlIDxydGVfZXJybm8uaD4KICNpbmNsdWRlIDxy dGVfaXAuaD4KLSNpbmNsdWRlIDxydGVfbmV0Lmg+CisjaW5jbHVkZSA8cnRlX3RjcC5oPgorI2lu Y2x1ZGUgPHJ0ZV9ldGhkZXYuaD4KKyNpbmNsdWRlIDxldGhkZXZfZHJpdmVyLmg+CiAKLSNpbmNs dWRlICJpb25pY19sb2dzLmgiCi0jaW5jbHVkZSAiaW9uaWNfbWFjX2FwaS5oIgotI2luY2x1ZGUg ImlvbmljX2V0aGRldi5oIgorI2luY2x1ZGUgImlvbmljLmgiCisjaW5jbHVkZSAiaW9uaWNfZGV2 LmgiCiAjaW5jbHVkZSAiaW9uaWNfbGlmLmgiCisjaW5jbHVkZSAiaW9uaWNfZXRoZGV2LmgiCiAj aW5jbHVkZSAiaW9uaWNfcnh0eC5oIgorI2luY2x1ZGUgImlvbmljX2xvZ3MuaCIKIAogc3RhdGlj IHZvaWQKIGlvbmljX2VtcHR5X2FycmF5KHZvaWQgKiphcnJheSwgdWludDMyX3QgY250LCB1aW50 MTZfdCBpZHgpCkBAIC0xMDMsNjAgKzgxLDYgQEAgaW9uaWNfdHhxX2luZm9fZ2V0KHN0cnVjdCBy dGVfZXRoX2RldiAqZGV2LCB1aW50MTZfdCBxdWV1ZV9pZCwKIAlxaW5mby0+Y29uZi50eF9kZWZl cnJlZF9zdGFydCA9IHR4cS0+ZmxhZ3MgJiBJT05JQ19RQ1FfRl9ERUZFUlJFRDsKIH0KIAotc3Rh dGljIF9fcnRlX2Fsd2F5c19pbmxpbmUgdm9pZAotaW9uaWNfdHhfZmx1c2goc3RydWN0IGlvbmlj X3R4X3FjcSAqdHhxKQotewotCXN0cnVjdCBpb25pY19jcSAqY3EgPSAmdHhxLT5xY3EuY3E7Ci0J c3RydWN0IGlvbmljX3F1ZXVlICpxID0gJnR4cS0+cWNxLnE7Ci0Jc3RydWN0IHJ0ZV9tYnVmICp0 eG07Ci0Jc3RydWN0IGlvbmljX3R4cV9jb21wICpjcV9kZXNjLCAqY3FfZGVzY19iYXNlID0gY3Et PmJhc2U7Ci0Jdm9pZCAqKmluZm87Ci0JdWludDMyX3QgaTsKLQotCWNxX2Rlc2MgPSAmY3FfZGVz Y19iYXNlW2NxLT50YWlsX2lkeF07Ci0KLQl3aGlsZSAoY29sb3JfbWF0Y2goY3FfZGVzYy0+Y29s b3IsIGNxLT5kb25lX2NvbG9yKSkgewotCQljcS0+dGFpbF9pZHggPSBRX05FWFRfVE9fU1JWQyhj cSwgMSk7Ci0JCWlmIChjcS0+dGFpbF9pZHggPT0gMCkKLQkJCWNxLT5kb25lX2NvbG9yID0gIWNx LT5kb25lX2NvbG9yOwotCi0JCS8qIFByZWZldGNoIDQgeCAxNkIgY29tcCBhdCBjcS0+dGFpbF9p ZHggKyA0ICovCi0JCWlmICgoY3EtPnRhaWxfaWR4ICYgMHgzKSA9PSAwKQotCQkJcnRlX3ByZWZl dGNoMCgmY3FfZGVzY19iYXNlW1FfTkVYVF9UT19TUlZDKGNxLCA0KV0pOwotCi0JCXdoaWxlIChx LT50YWlsX2lkeCAhPSBydGVfbGVfdG9fY3B1XzE2KGNxX2Rlc2MtPmNvbXBfaW5kZXgpKSB7Ci0J CQkvKiBQcmVmZXRjaCA4IG1idWYgcHRycyBhdCBxLT50YWlsX2lkeCArIDIgKi8KLQkJCXJ0ZV9w cmVmZXRjaDAoSU9OSUNfSU5GT19QVFIocSwgUV9ORVhUX1RPX1NSVkMocSwgMikpKTsKLQotCQkJ LyogUHJlZmV0Y2ggbmV4dCBtYnVmICovCi0JCQl2b2lkICoqbmV4dF9pbmZvID0KLQkJCQlJT05J Q19JTkZPX1BUUihxLCBRX05FWFRfVE9fU1JWQyhxLCAxKSk7Ci0JCQlpZiAobmV4dF9pbmZvWzBd KQotCQkJCXJ0ZV9tYnVmX3ByZWZldGNoX3BhcnQyKG5leHRfaW5mb1swXSk7Ci0JCQlpZiAobmV4 dF9pbmZvWzFdKQotCQkJCXJ0ZV9tYnVmX3ByZWZldGNoX3BhcnQyKG5leHRfaW5mb1sxXSk7Ci0K LQkJCWluZm8gPSBJT05JQ19JTkZPX1BUUihxLCBxLT50YWlsX2lkeCk7Ci0JCQlmb3IgKGkgPSAw OyBpIDwgcS0+bnVtX3NlZ3M7IGkrKykgewotCQkJCXR4bSA9IGluZm9baV07Ci0JCQkJaWYgKCF0 eG0pCi0JCQkJCWJyZWFrOwotCi0JCQkJaWYgKHR4cS0+ZmxhZ3MgJiBJT05JQ19RQ1FfRl9GQVNU X0ZSRUUpCi0JCQkJCXJ0ZV9tZW1wb29sX3B1dCh0eG0tPnBvb2wsIHR4bSk7Ci0JCQkJZWxzZQot CQkJCQlydGVfcGt0bWJ1Zl9mcmVlX3NlZyh0eG0pOwotCi0JCQkJaW5mb1tpXSA9IE5VTEw7Ci0J CQl9Ci0KLQkJCXEtPnRhaWxfaWR4ID0gUV9ORVhUX1RPX1NSVkMocSwgMSk7Ci0JCX0KLQotCQlj cV9kZXNjID0gJmNxX2Rlc2NfYmFzZVtjcS0+dGFpbF9pZHhdOwotCX0KLX0KLQogdm9pZCBfX3J0 ZV9jb2xkCiBpb25pY19kZXZfdHhfcXVldWVfcmVsZWFzZShzdHJ1Y3QgcnRlX2V0aF9kZXYgKmRl diwgdWludDE2X3QgcWlkKQogewpAQCAtNTE3LDE1NyArNDIwLDYgQEAgaW9uaWNfdHhfdHNvKHN0 cnVjdCBpb25pY190eF9xY3EgKnR4cSwgc3RydWN0IHJ0ZV9tYnVmICp0eG0pCiAJcmV0dXJuIDA7 CiB9CiAKLXN0YXRpYyBfX3J0ZV9hbHdheXNfaW5saW5lIGludAotaW9uaWNfdHgoc3RydWN0IGlv bmljX3R4X3FjcSAqdHhxLCBzdHJ1Y3QgcnRlX21idWYgKnR4bSkKLXsKLQlzdHJ1Y3QgaW9uaWNf cXVldWUgKnEgPSAmdHhxLT5xY3EucTsKLQlzdHJ1Y3QgaW9uaWNfdHhxX2Rlc2MgKmRlc2MsICpk ZXNjX2Jhc2UgPSBxLT5iYXNlOwotCXN0cnVjdCBpb25pY190eHFfc2dfZGVzY192MSAqc2dfZGVz Y19iYXNlID0gcS0+c2dfYmFzZTsKLQlzdHJ1Y3QgaW9uaWNfdHhxX3NnX2VsZW0gKmVsZW07Ci0J c3RydWN0IGlvbmljX3R4X3N0YXRzICpzdGF0cyA9ICZ0eHEtPnN0YXRzOwotCXN0cnVjdCBydGVf bWJ1ZiAqdHhtX3NlZzsKLQl2b2lkICoqaW5mbzsKLQlydGVfaW92YV90IGRhdGFfaW92YTsKLQl1 aW50NjRfdCBvbF9mbGFncyA9IHR4bS0+b2xfZmxhZ3M7Ci0JdWludDY0X3QgYWRkciwgY21kOwot CXVpbnQ4X3Qgb3Bjb2RlID0gSU9OSUNfVFhRX0RFU0NfT1BDT0RFX0NTVU1fTk9ORTsKLQl1aW50 OF90IGZsYWdzID0gMDsKLQotCWRlc2MgPSAmZGVzY19iYXNlW3EtPmhlYWRfaWR4XTsKLQlpbmZv ID0gSU9OSUNfSU5GT19QVFIocSwgcS0+aGVhZF9pZHgpOwotCi0JaWYgKChvbF9mbGFncyAmIFJU RV9NQlVGX0ZfVFhfSVBfQ0tTVU0pICYmCi0JICAgICh0eHEtPmZsYWdzICYgSU9OSUNfUUNRX0Zf Q1NVTV9MMykpIHsKLQkJb3Bjb2RlID0gSU9OSUNfVFhRX0RFU0NfT1BDT0RFX0NTVU1fSFc7Ci0J CWZsYWdzIHw9IElPTklDX1RYUV9ERVNDX0ZMQUdfQ1NVTV9MMzsKLQl9Ci0KLQlpZiAoKChvbF9m bGFncyAmIFJURV9NQlVGX0ZfVFhfVENQX0NLU1VNKSAmJgotCSAgICAgKHR4cS0+ZmxhZ3MgJiBJ T05JQ19RQ1FfRl9DU1VNX1RDUCkpIHx8Ci0JICAgICgob2xfZmxhZ3MgJiBSVEVfTUJVRl9GX1RY X1VEUF9DS1NVTSkgJiYKLQkgICAgICh0eHEtPmZsYWdzICYgSU9OSUNfUUNRX0ZfQ1NVTV9VRFAp KSkgewotCQlvcGNvZGUgPSBJT05JQ19UWFFfREVTQ19PUENPREVfQ1NVTV9IVzsKLQkJZmxhZ3Mg fD0gSU9OSUNfVFhRX0RFU0NfRkxBR19DU1VNX0w0OwotCX0KLQotCWlmIChvcGNvZGUgPT0gSU9O SUNfVFhRX0RFU0NfT1BDT0RFX0NTVU1fTk9ORSkKLQkJc3RhdHMtPm5vX2NzdW0rKzsKLQotCWlm ICgoKG9sX2ZsYWdzICYgUlRFX01CVUZfRl9UWF9PVVRFUl9JUF9DS1NVTSkgfHwKLQkgICAgIChv bF9mbGFncyAmIFJURV9NQlVGX0ZfVFhfT1VURVJfVURQX0NLU1VNKSkgJiYKLQkgICAgKChvbF9m bGFncyAmIFJURV9NQlVGX0ZfVFhfT1VURVJfSVBWNCkgfHwKLQkgICAgIChvbF9mbGFncyAmIFJU RV9NQlVGX0ZfVFhfT1VURVJfSVBWNikpKSB7Ci0JCWZsYWdzIHw9IElPTklDX1RYUV9ERVNDX0ZM QUdfRU5DQVA7Ci0JfQotCi0JaWYgKG9sX2ZsYWdzICYgUlRFX01CVUZfRl9UWF9WTEFOKSB7Ci0J CWZsYWdzIHw9IElPTklDX1RYUV9ERVNDX0ZMQUdfVkxBTjsKLQkJZGVzYy0+dmxhbl90Y2kgPSBy dGVfY3B1X3RvX2xlXzE2KHR4bS0+dmxhbl90Y2kpOwotCX0KLQotCWFkZHIgPSBydGVfY3B1X3Rv X2xlXzY0KHJ0ZV9tYnVmX2RhdGFfaW92YSh0eG0pKTsKLQotCWNtZCA9IGVuY29kZV90eHFfZGVz Y19jbWQob3Bjb2RlLCBmbGFncywgdHhtLT5uYl9zZWdzIC0gMSwgYWRkcik7Ci0JZGVzYy0+Y21k ID0gcnRlX2NwdV90b19sZV82NChjbWQpOwotCWRlc2MtPmxlbiA9IHJ0ZV9jcHVfdG9fbGVfMTYo dHhtLT5kYXRhX2xlbik7Ci0KLQlpbmZvWzBdID0gdHhtOwotCi0JaWYgKHR4bS0+bmJfc2VncyA+ IDEpIHsKLQkJdHhtX3NlZyA9IHR4bS0+bmV4dDsKLQotCQllbGVtID0gc2dfZGVzY19iYXNlW3Et PmhlYWRfaWR4XS5lbGVtczsKLQotCQl3aGlsZSAodHhtX3NlZyAhPSBOVUxMKSB7Ci0JCQkvKiBT dGFzaCB0aGUgbWJ1ZiBwdHIgaW4gdGhlIGFycmF5ICovCi0JCQlpbmZvKys7Ci0JCQkqaW5mbyA9 IHR4bV9zZWc7Ci0KLQkJCS8qIENvbmZpZ3VyZSB0aGUgU0dFICovCi0JCQlkYXRhX2lvdmEgPSBy dGVfbWJ1Zl9kYXRhX2lvdmEodHhtX3NlZyk7Ci0JCQllbGVtLT5sZW4gPSBydGVfY3B1X3RvX2xl XzE2KHR4bV9zZWctPmRhdGFfbGVuKTsKLQkJCWVsZW0tPmFkZHIgPSBydGVfY3B1X3RvX2xlXzY0 KGRhdGFfaW92YSk7Ci0JCQllbGVtKys7Ci0KLQkJCXR4bV9zZWcgPSB0eG1fc2VnLT5uZXh0Owot CQl9Ci0JfQotCi0JcS0+aGVhZF9pZHggPSBRX05FWFRfVE9fUE9TVChxLCAxKTsKLQotCXJldHVy biAwOwotfQotCi11aW50MTZfdAotaW9uaWNfeG1pdF9wa3RzKHZvaWQgKnR4X3F1ZXVlLCBzdHJ1 Y3QgcnRlX21idWYgKip0eF9wa3RzLAotCQl1aW50MTZfdCBuYl9wa3RzKQotewotCXN0cnVjdCBp b25pY190eF9xY3EgKnR4cSA9IHR4X3F1ZXVlOwotCXN0cnVjdCBpb25pY19xdWV1ZSAqcSA9ICZ0 eHEtPnFjcS5xOwotCXN0cnVjdCBpb25pY190eF9zdGF0cyAqc3RhdHMgPSAmdHhxLT5zdGF0czsK LQlzdHJ1Y3QgcnRlX21idWYgKm1idWY7Ci0JdWludDMyX3QgYnl0ZXNfdHggPSAwOwotCXVpbnQx Nl90IG5iX2F2YWlsLCBuYl90eCA9IDA7Ci0JaW50IGVycjsKLQotCXN0cnVjdCBpb25pY190eHFf ZGVzYyAqZGVzY19iYXNlID0gcS0+YmFzZTsKLQlpZiAoISh0eHEtPmZsYWdzICYgSU9OSUNfUUNR X0ZfQ01CKSkKLQkJcnRlX3ByZWZldGNoMCgmZGVzY19iYXNlW3EtPmhlYWRfaWR4XSk7Ci0JcnRl X3ByZWZldGNoMChJT05JQ19JTkZPX1BUUihxLCBxLT5oZWFkX2lkeCkpOwotCi0JaWYgKHR4X3Br dHMpIHsKLQkJcnRlX21idWZfcHJlZmV0Y2hfcGFydDEodHhfcGt0c1swXSk7Ci0JCXJ0ZV9tYnVm X3ByZWZldGNoX3BhcnQyKHR4X3BrdHNbMF0pOwotCX0KLQotCWlmICh1bmxpa2VseShpb25pY19x X3NwYWNlX2F2YWlsKHEpIDwgdHhxLT5mcmVlX3RocmVzaCkpIHsKLQkJLyogQ2xlYW5pbmcgb2xk IGJ1ZmZlcnMgKi8KLQkJaW9uaWNfdHhfZmx1c2godHhxKTsKLQl9Ci0KLQluYl9hdmFpbCA9IGlv bmljX3Ffc3BhY2VfYXZhaWwocSk7Ci0JaWYgKHVubGlrZWx5KG5iX2F2YWlsIDwgbmJfcGt0cykp IHsKLQkJc3RhdHMtPnN0b3AgKz0gbmJfcGt0cyAtIG5iX2F2YWlsOwotCQluYl9wa3RzID0gbmJf YXZhaWw7Ci0JfQotCi0Jd2hpbGUgKG5iX3R4IDwgbmJfcGt0cykgewotCQl1aW50MTZfdCBuZXh0 X2lkeCA9IFFfTkVYVF9UT19QT1NUKHEsIDEpOwotCQlpZiAoISh0eHEtPmZsYWdzICYgSU9OSUNf UUNRX0ZfQ01CKSkKLQkJCXJ0ZV9wcmVmZXRjaDAoJmRlc2NfYmFzZVtuZXh0X2lkeF0pOwotCQly dGVfcHJlZmV0Y2gwKElPTklDX0lORk9fUFRSKHEsIG5leHRfaWR4KSk7Ci0KLQkJaWYgKG5iX3R4 ICsgMSA8IG5iX3BrdHMpIHsKLQkJCXJ0ZV9tYnVmX3ByZWZldGNoX3BhcnQxKHR4X3BrdHNbbmJf dHggKyAxXSk7Ci0JCQlydGVfbWJ1Zl9wcmVmZXRjaF9wYXJ0Mih0eF9wa3RzW25iX3R4ICsgMV0p OwotCQl9Ci0KLQkJbWJ1ZiA9IHR4X3BrdHNbbmJfdHhdOwotCi0JCWlmIChtYnVmLT5vbF9mbGFn cyAmIFJURV9NQlVGX0ZfVFhfVENQX1NFRykKLQkJCWVyciA9IGlvbmljX3R4X3Rzbyh0eHEsIG1i dWYpOwotCQllbHNlCi0JCQllcnIgPSBpb25pY190eCh0eHEsIG1idWYpOwotCQlpZiAoZXJyKSB7 Ci0JCQlzdGF0cy0+ZHJvcCArPSBuYl9wa3RzIC0gbmJfdHg7Ci0JCQlicmVhazsKLQkJfQotCi0J CWJ5dGVzX3R4ICs9IG1idWYtPnBrdF9sZW47Ci0JCW5iX3R4Kys7Ci0JfQotCi0JaWYgKG5iX3R4 ID4gMCkgewotCQlydGVfd21iKCk7Ci0JCWlvbmljX3FfZmx1c2gocSk7Ci0KLQkJc3RhdHMtPnBh Y2tldHMgKz0gbmJfdHg7Ci0JCXN0YXRzLT5ieXRlcyArPSBieXRlc190eDsKLQl9Ci0KLQlyZXR1 cm4gbmJfdHg7Ci19Ci0KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCiAgKiAgVFggcHJlcCBmdW5jdGlvbnMK QEAgLTgyMCw3ICs1NzIsNyBAQCBpb25pY19kZXZfcnhfcXVldWVfc2V0dXAoc3RydWN0IHJ0ZV9l dGhfZGV2ICpldGhfZGV2LAogfQogCiAjZGVmaW5lIElPTklDX0NTVU1fRkxBR19NQVNLIChJT05J Q19SWFFfQ09NUF9DU1VNX0ZfVkxBTiAtIDEpCi1zdGF0aWMgY29uc3QgdWludDY0X3QgaW9uaWNf Y3N1bV9mbGFnc1tJT05JQ19DU1VNX0ZMQUdfTUFTS10KK2NvbnN0IHVpbnQ2NF90IGlvbmljX2Nz dW1fZmxhZ3NbSU9OSUNfQ1NVTV9GTEFHX01BU0tdCiAJCV9fcnRlX2NhY2hlX2FsaWduZWQgPSB7 CiAJLyogSVBfQkFEIHNldCAqLwogCVtJT05JQ19SWFFfQ09NUF9DU1VNX0ZfSVBfQkFEXSA9IFJU RV9NQlVGX0ZfUlhfSVBfQ0tTVU1fQkFELApAQCAtODUwLDcgKzYwMiw3IEBAIHN0YXRpYyBjb25z dCB1aW50NjRfdCBpb25pY19jc3VtX2ZsYWdzW0lPTklDX0NTVU1fRkxBR19NQVNLXQogfTsKIAog LyogUlRFX1BUWVBFX1VOS05PV04gaXMgMHgwICovCi1zdGF0aWMgY29uc3QgdWludDMyX3QgaW9u aWNfcHR5cGVfdGFibGVbSU9OSUNfUlhRX0NPTVBfUEtUX1RZUEVfTUFTS10KK2NvbnN0IHVpbnQz Ml90IGlvbmljX3B0eXBlX3RhYmxlW0lPTklDX1JYUV9DT01QX1BLVF9UWVBFX01BU0tdCiAJCV9f cnRlX2NhY2hlX2FsaWduZWQgPSB7CiAJW0lPTklDX1BLVF9UWVBFX05PTl9JUF0gICA9IFJURV9Q VFlQRV9VTktOT1dOLAogCVtJT05JQ19QS1RfVFlQRV9JUFY0XSAgICAgPSBSVEVfUFRZUEVfTDJf RVRIRVIgfCBSVEVfUFRZUEVfTDNfSVBWNCwKQEAgLTg4NCwyMDMgKzYzNiw2IEBAIGlvbmljX2Rl dl9zdXBwb3J0ZWRfcHR5cGVzX2dldChzdHJ1Y3QgcnRlX2V0aF9kZXYgKmRldiBfX3J0ZV91bnVz ZWQpCiAJcmV0dXJuIHB0eXBlczsKIH0KIAotLyoKLSAqIENsZWFucyBvbmUgZGVzY3JpcHRvci4g Q29ubmVjdHMgdGhlIGZpbGxlZCBtYnVmcyBpbnRvIGEgY2hhaW4uCi0gKiBEb2VzIG5vdCBhZHZh bmNlIHRoZSB0YWlsIGluZGV4LgotICovCi1zdGF0aWMgX19ydGVfYWx3YXlzX2lubGluZSB2b2lk Ci1pb25pY19yeF9jbGVhbl9vbmUoc3RydWN0IGlvbmljX3J4X3FjcSAqcnhxLAotCQlzdHJ1Y3Qg aW9uaWNfcnhxX2NvbXAgKmNxX2Rlc2MsCi0JCXN0cnVjdCBpb25pY19yeF9zZXJ2aWNlICpyeF9z dmMpCi17Ci0Jc3RydWN0IGlvbmljX3F1ZXVlICpxID0gJnJ4cS0+cWNxLnE7Ci0Jc3RydWN0IHJ0 ZV9tYnVmICpyeG0sICpyeG1fc2VnLCAqcHJldl9yeG07Ci0Jc3RydWN0IGlvbmljX3J4X3N0YXRz ICpzdGF0cyA9ICZyeHEtPnN0YXRzOwotCXVpbnQ2NF90IHBrdF9mbGFncyA9IDA7Ci0JdWludDMy X3QgcGt0X3R5cGU7Ci0JdWludDMyX3QgbGVmdCwgaTsKLQl1aW50MTZfdCBjcV9kZXNjX2xlbjsK LQl1aW50OF90IHB0eXBlLCBjZmxhZ3M7Ci0Jdm9pZCAqKmluZm87Ci0KLQljcV9kZXNjX2xlbiA9 IHJ0ZV9sZV90b19jcHVfMTYoY3FfZGVzYy0+bGVuKTsKLQotCWluZm8gPSBJT05JQ19JTkZPX1BU UihxLCBxLT50YWlsX2lkeCk7Ci0KLQlyeG0gPSBpbmZvWzBdOwotCi0JaWYgKGNxX2Rlc2MtPnN0 YXR1cykgewotCQlzdGF0cy0+YmFkX2NxX3N0YXR1cysrOwotCQlyZXR1cm47Ci0JfQotCi0JaWYg KGNxX2Rlc2NfbGVuID4gcnhxLT5mcmFtZV9zaXplIHx8IGNxX2Rlc2NfbGVuID09IDApIHsKLQkJ c3RhdHMtPmJhZF9sZW4rKzsKLQkJcmV0dXJuOwotCX0KLQotCWluZm9bMF0gPSBOVUxMOwotCi0J LyogU2V0IHRoZSBtYnVmIG1ldGFkYXRhIGJhc2VkIG9uIHRoZSBjcSBlbnRyeSAqLwotCXJ4bS0+ cmVhcm1fZGF0YVswXSA9IHJ4cS0+cmVhcm1fZGF0YTsKLQlyeG0tPnBrdF9sZW4gPSBjcV9kZXNj X2xlbjsKLQlyeG0tPmRhdGFfbGVuID0gUlRFX01JTihyeHEtPmhkcl9zZWdfc2l6ZSwgY3FfZGVz Y19sZW4pOwotCWxlZnQgPSBjcV9kZXNjX2xlbiAtIHJ4bS0+ZGF0YV9sZW47Ci0JcnhtLT5uYl9z ZWdzID0gY3FfZGVzYy0+bnVtX3NnX2VsZW1zICsgMTsKLQlwcmV2X3J4bSA9IHJ4bTsKLQotCWZv ciAoaSA9IDE7IGkgPCByeG0tPm5iX3NlZ3MgJiYgbGVmdDsgaSsrKSB7Ci0JCXJ4bV9zZWcgPSBp bmZvW2ldOwotCQlpbmZvW2ldID0gTlVMTDsKLQotCQkvKiBTZXQgdGhlIGNoYWluZWQgbWJ1ZiBt ZXRhZGF0YSAqLwotCQlyeG1fc2VnLT5yZWFybV9kYXRhWzBdID0gcnhxLT5yZWFybV9zZWdfZGF0 YTsKLQkJcnhtX3NlZy0+ZGF0YV9sZW4gPSBSVEVfTUlOKHJ4cS0+c2VnX3NpemUsIGxlZnQpOwot CQlsZWZ0IC09IHJ4bV9zZWctPmRhdGFfbGVuOwotCi0JCS8qIExpbmsgdGhlIG1idWYgKi8KLQkJ cHJldl9yeG0tPm5leHQgPSByeG1fc2VnOwotCQlwcmV2X3J4bSA9IHJ4bV9zZWc7Ci0JfQotCi0J LyogVGVybWluYXRlIHRoZSBtYnVmIGNoYWluICovCi0JcHJldl9yeG0tPm5leHQgPSBOVUxMOwot Ci0JLyogUlNTICovCi0JcGt0X2ZsYWdzIHw9IFJURV9NQlVGX0ZfUlhfUlNTX0hBU0g7Ci0Jcnht LT5oYXNoLnJzcyA9IHJ0ZV9sZV90b19jcHVfMzIoY3FfZGVzYy0+cnNzX2hhc2gpOwotCi0JLyog VmxhbiBTdHJpcCAqLwotCWlmIChjcV9kZXNjLT5jc3VtX2ZsYWdzICYgSU9OSUNfUlhRX0NPTVBf Q1NVTV9GX1ZMQU4pIHsKLQkJcGt0X2ZsYWdzIHw9IFJURV9NQlVGX0ZfUlhfVkxBTiB8IFJURV9N QlVGX0ZfUlhfVkxBTl9TVFJJUFBFRDsKLQkJcnhtLT52bGFuX3RjaSA9IHJ0ZV9sZV90b19jcHVf MTYoY3FfZGVzYy0+dmxhbl90Y2kpOwotCX0KLQotCS8qIENoZWNrc3VtICovCi0JaWYgKGNxX2Rl c2MtPmNzdW1fZmxhZ3MgJiBJT05JQ19SWFFfQ09NUF9DU1VNX0ZfQ0FMQykgewotCQljZmxhZ3Mg PSBjcV9kZXNjLT5jc3VtX2ZsYWdzICYgSU9OSUNfQ1NVTV9GTEFHX01BU0s7Ci0JCXBrdF9mbGFn cyB8PSBpb25pY19jc3VtX2ZsYWdzW2NmbGFnc107Ci0JfQotCi0JcnhtLT5vbF9mbGFncyA9IHBr dF9mbGFnczsKLQotCS8qIFBhY2tldCBUeXBlICovCi0JcHR5cGUgPSBjcV9kZXNjLT5wa3RfdHlw ZV9jb2xvciAmIElPTklDX1JYUV9DT01QX1BLVF9UWVBFX01BU0s7Ci0JcGt0X3R5cGUgPSBpb25p Y19wdHlwZV90YWJsZVtwdHlwZV07Ci0JaWYgKHBrdF90eXBlID09IFJURV9QVFlQRV9VTktOT1dO KSB7Ci0JCXN0cnVjdCBydGVfZXRoZXJfaGRyICpldGhfaCA9IHJ0ZV9wa3RtYnVmX210b2Qocnht LAotCQkJCXN0cnVjdCBydGVfZXRoZXJfaGRyICopOwotCQl1aW50MTZfdCBldGhlcl90eXBlID0g ZXRoX2gtPmV0aGVyX3R5cGU7Ci0JCWlmIChldGhlcl90eXBlID09IHJ0ZV9jcHVfdG9fYmVfMTYo UlRFX0VUSEVSX1RZUEVfQVJQKSkKLQkJCXBrdF90eXBlID0gUlRFX1BUWVBFX0wyX0VUSEVSX0FS UDsKLQkJZWxzZSBpZiAoZXRoZXJfdHlwZSA9PSBydGVfY3B1X3RvX2JlXzE2KFJURV9FVEhFUl9U WVBFX0xMRFApKQotCQkJcGt0X3R5cGUgPSBSVEVfUFRZUEVfTDJfRVRIRVJfTExEUDsKLQkJZWxz ZSBpZiAoZXRoZXJfdHlwZSA9PSBydGVfY3B1X3RvX2JlXzE2KFJURV9FVEhFUl9UWVBFXzE1ODgp KQotCQkJcGt0X3R5cGUgPSBSVEVfUFRZUEVfTDJfRVRIRVJfVElNRVNZTkM7Ci0JCXN0YXRzLT5t dG9kcysrOwotCX0KLQotCXJ4bS0+cGFja2V0X3R5cGUgPSBwa3RfdHlwZTsKLQotCXJ4X3N2Yy0+ cnhfcGt0c1tyeF9zdmMtPm5iX3J4XSA9IHJ4bTsKLQlyeF9zdmMtPm5iX3J4Kys7Ci0KLQlzdGF0 cy0+cGFja2V0cysrOwotCXN0YXRzLT5ieXRlcyArPSByeG0tPnBrdF9sZW47Ci19Ci0KLS8qCi0g KiBGaWxscyBvbmUgZGVzY3JpcHRvciB3aXRoIG1idWZzLiBEb2VzIG5vdCBhZHZhbmNlIHRoZSBo ZWFkIGluZGV4LgotICovCi1zdGF0aWMgX19ydGVfYWx3YXlzX2lubGluZSBpbnQKLWlvbmljX3J4 X2ZpbGxfb25lKHN0cnVjdCBpb25pY19yeF9xY3EgKnJ4cSkKLXsKLQlzdHJ1Y3QgaW9uaWNfcXVl dWUgKnEgPSAmcnhxLT5xY3EucTsKLQlzdHJ1Y3QgcnRlX21idWYgKnJ4bSwgKnJ4bV9zZWc7Ci0J c3RydWN0IGlvbmljX3J4cV9kZXNjICpkZXNjLCAqZGVzY19iYXNlID0gcS0+YmFzZTsKLQlzdHJ1 Y3QgaW9uaWNfcnhxX3NnX2Rlc2MgKnNnX2Rlc2MsICpzZ19kZXNjX2Jhc2UgPSBxLT5zZ19iYXNl OwotCXJ0ZV9pb3ZhX3QgZGF0YV9pb3ZhOwotCXVpbnQzMl90IGk7Ci0Jdm9pZCAqKmluZm87Ci0J aW50IHJldDsKLQotCWluZm8gPSBJT05JQ19JTkZPX1BUUihxLCBxLT5oZWFkX2lkeCk7Ci0JZGVz YyA9ICZkZXNjX2Jhc2VbcS0+aGVhZF9pZHhdOwotCXNnX2Rlc2MgPSAmc2dfZGVzY19iYXNlW3Et PmhlYWRfaWR4XTsKLQotCS8qIG1idWYgaXMgdW51c2VkID0+IHdob2xlIGNoYWluIGlzIHVudXNl ZCAqLwotCWlmICh1bmxpa2VseShpbmZvWzBdKSkKLQkJcmV0dXJuIDA7Ci0KLQlpZiAocnhxLT5t Yl9pZHggPT0gMCkgewotCQlyZXQgPSBydGVfbWVtcG9vbF9nZXRfYnVsayhyeHEtPm1iX3Bvb2ws Ci0JCQkJCSh2b2lkICoqKXJ4cS0+bWJzLAotCQkJCQlJT05JQ19NQlVGX0JVTEtfQUxMT0MpOwot CQlpZiAocmV0KSB7Ci0JCQlhc3NlcnQoMCk7Ci0JCQlyZXR1cm4gLUVOT01FTTsKLQkJfQotCi0J CXJ4cS0+bWJfaWR4ID0gSU9OSUNfTUJVRl9CVUxLX0FMTE9DOwotCX0KLQotCXJ4bSA9IHJ4cS0+ bWJzWy0tcnhxLT5tYl9pZHhdOwotCWluZm9bMF0gPSByeG07Ci0KLQlkYXRhX2lvdmEgPSBydGVf bWJ1Zl9kYXRhX2lvdmFfZGVmYXVsdChyeG0pOwotCWRlc2MtPmFkZHIgPSBydGVfY3B1X3RvX2xl XzY0KGRhdGFfaW92YSk7Ci0KLQlmb3IgKGkgPSAxOyBpIDwgcS0+bnVtX3NlZ3M7IGkrKykgewot CQkvKiBtYnVmIGlzIHVudXNlZCA9PiByZXN0IG9mIHRoZSBjaGFpbiBpcyB1bnVzZWQgKi8KLQkJ aWYgKGluZm9baV0pCi0JCQlyZXR1cm4gMDsKLQotCQlpZiAocnhxLT5tYl9pZHggPT0gMCkgewot CQkJcmV0ID0gcnRlX21lbXBvb2xfZ2V0X2J1bGsocnhxLT5tYl9wb29sLAotCQkJCQkodm9pZCAq KilyeHEtPm1icywKLQkJCQkJSU9OSUNfTUJVRl9CVUxLX0FMTE9DKTsKLQkJCWlmIChyZXQpIHsK LQkJCQlhc3NlcnQoMCk7Ci0JCQkJcmV0dXJuIC1FTk9NRU07Ci0JCQl9Ci0KLQkJCXJ4cS0+bWJf aWR4ID0gSU9OSUNfTUJVRl9CVUxLX0FMTE9DOwotCQl9Ci0KLQkJcnhtX3NlZyA9IHJ4cS0+bWJz Wy0tcnhxLT5tYl9pZHhdOwotCQlpbmZvW2ldID0gcnhtX3NlZzsKLQotCQkvKiBUaGUgZGF0YV9v ZmYgZG9lcyBub3QgZ2V0IHNldCB0byAwIHVudGlsIGxhdGVyICovCi0JCWRhdGFfaW92YSA9IHJ4 bV9zZWctPmJ1Zl9pb3ZhOwotCQlzZ19kZXNjLT5lbGVtc1tpIC0gMV0uYWRkciA9IHJ0ZV9jcHVf dG9fbGVfNjQoZGF0YV9pb3ZhKTsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotLyoKLSAqIEZpbGxz IGFsbCBkZXNjcmlwdG9ycyB3aXRoIG1idWZzLgotICovCi1zdGF0aWMgaW50IF9fcnRlX2NvbGQK LWlvbmljX3J4X2ZpbGwoc3RydWN0IGlvbmljX3J4X3FjcSAqcnhxKQotewotCXN0cnVjdCBpb25p Y19xdWV1ZSAqcSA9ICZyeHEtPnFjcS5xOwotCXVpbnQzMl90IGk7Ci0JaW50IGVycjsKLQotCWZv ciAoaSA9IDE7IGkgPCBxLT5udW1fZGVzY3M7IGkrKykgewotCQllcnIgPSBpb25pY19yeF9maWxs X29uZShyeHEpOwotCQlpZiAoZXJyKQotCQkJcmV0dXJuIGVycjsKLQotCQlxLT5oZWFkX2lkeCA9 IFFfTkVYVF9UT19QT1NUKHEsIDEpOwotCX0KLQotCWlvbmljX3FfZmx1c2gocSk7Ci0KLQlyZXR1 cm4gMDsKLX0KLQogLyoKICAqIFBlcmZvcm0gb25lLXRpbWUgaW5pdGlhbGl6YXRpb24gb2YgZGVz Y3JpcHRvciBmaWVsZHMKICAqIHdoaWNoIHdpbGwgbm90IGNoYW5nZSBmb3IgdGhlIGxpZmUgb2Yg dGhlIHF1ZXVlLgpAQCAtMTE0OCwxMCArNzAzLDEzIEBAIGlvbmljX2Rldl9yeF9xdWV1ZV9zdGFy dChzdHJ1Y3QgcnRlX2V0aF9kZXYgKmV0aF9kZXYsIHVpbnQxNl90IHJ4X3F1ZXVlX2lkKQogCWlm IChlcnIpCiAJCXJldHVybiBlcnI7CiAKLQkvKiBBbGxvY2F0ZSBidWZmZXJzIGZvciBkZXNjcmlw dG9yIHJpbmdzICovCi0JaWYgKGlvbmljX3J4X2ZpbGwocnhxKSAhPSAwKSB7Ci0JCUlPTklDX1BS SU5UKEVSUiwgIkNvdWxkIG5vdCBhbGxvYyBtYnVmIGZvciBxdWV1ZTolZCIsCi0JCQlyeF9xdWV1 ZV9pZCk7CisJLyogQWxsb2NhdGUgYnVmZmVycyBmb3IgZGVzY3JpcHRvciByaW5nICovCisJaWYg KHJ4cS0+ZmxhZ3MgJiBJT05JQ19RQ1FfRl9TRykKKwkJZXJyID0gaW9uaWNfcnhfZmlsbF9zZyhy eHEpOworCWVsc2UKKwkJZXJyID0gaW9uaWNfcnhfZmlsbChyeHEpOworCWlmIChlcnIgIT0gMCkg eworCQlJT05JQ19QUklOVChFUlIsICJDb3VsZCBub3QgZmlsbCBxdWV1ZSAlZCIsIHJ4X3F1ZXVl X2lkKTsKIAkJcmV0dXJuIC0xOwogCX0KIApAQCAtMTE2MCw1NSArNzE4LDYgQEAgaW9uaWNfZGV2 X3J4X3F1ZXVlX3N0YXJ0KHN0cnVjdCBydGVfZXRoX2RldiAqZXRoX2RldiwgdWludDE2X3Qgcnhf cXVldWVfaWQpCiAJcmV0dXJuIDA7CiB9CiAKLS8qCi0gKiBXYWxrIHRoZSBDUSB0byBmaW5kIGNv bXBsZXRlZCByZWNlaXZlIGRlc2NyaXB0b3JzLgotICogQW55IGNvbXBsZXRlZCBkZXNjcmlwdG9y IGZvdW5kIGlzIHJlZmlsbGVkLgotICovCi1zdGF0aWMgX19ydGVfYWx3YXlzX2lubGluZSB2b2lk Ci1pb25pY19yeHFfc2VydmljZShzdHJ1Y3QgaW9uaWNfcnhfcWNxICpyeHEsIHVpbnQzMl90IHdv cmtfdG9fZG8sCi0JCXN0cnVjdCBpb25pY19yeF9zZXJ2aWNlICpyeF9zdmMpCi17Ci0Jc3RydWN0 IGlvbmljX2NxICpjcSA9ICZyeHEtPnFjcS5jcTsKLQlzdHJ1Y3QgaW9uaWNfcXVldWUgKnEgPSAm cnhxLT5xY3EucTsKLQlzdHJ1Y3QgaW9uaWNfcnhxX2Rlc2MgKnFfZGVzY19iYXNlID0gcS0+YmFz ZTsKLQlzdHJ1Y3QgaW9uaWNfcnhxX2NvbXAgKmNxX2Rlc2MsICpjcV9kZXNjX2Jhc2UgPSBjcS0+ YmFzZTsKLQl1aW50MzJfdCB3b3JrX2RvbmUgPSAwOwotCi0JY3FfZGVzYyA9ICZjcV9kZXNjX2Jh c2VbY3EtPnRhaWxfaWR4XTsKLQotCXdoaWxlIChjb2xvcl9tYXRjaChjcV9kZXNjLT5wa3RfdHlw ZV9jb2xvciwgY3EtPmRvbmVfY29sb3IpKSB7Ci0JCWNxLT50YWlsX2lkeCA9IFFfTkVYVF9UT19T UlZDKGNxLCAxKTsKLQotCQlpZiAoY3EtPnRhaWxfaWR4ID09IDApCi0JCQljcS0+ZG9uZV9jb2xv ciA9ICFjcS0+ZG9uZV9jb2xvcjsKLQotCQkvKiBQcmVmZXRjaCA4IHggOEIgYnVmaW5mbyAqLwot CQlydGVfcHJlZmV0Y2gwKElPTklDX0lORk9fUFRSKHEsIFFfTkVYVF9UT19TUlZDKHEsIDgpKSk7 Ci0JCS8qIFByZWZldGNoIDQgeCAxNkIgY29tcCAqLwotCQlydGVfcHJlZmV0Y2gwKCZjcV9kZXNj X2Jhc2VbUV9ORVhUX1RPX1NSVkMoY3EsIDQpXSk7Ci0JCS8qIFByZWZldGNoIDQgeCAxNkIgZGVz Y3JpcHRvcnMgKi8KLQkJaWYgKCEocnhxLT5mbGFncyAmIElPTklDX1FDUV9GX0NNQikpCi0JCQly dGVfcHJlZmV0Y2gwKCZxX2Rlc2NfYmFzZVtRX05FWFRfVE9fUE9TVChxLCA0KV0pOwotCi0JCWlv bmljX3J4X2NsZWFuX29uZShyeHEsIGNxX2Rlc2MsIHJ4X3N2Yyk7Ci0KLQkJcS0+dGFpbF9pZHgg PSBRX05FWFRfVE9fU1JWQyhxLCAxKTsKLQotCQkodm9pZClpb25pY19yeF9maWxsX29uZShyeHEp OwotCi0JCXEtPmhlYWRfaWR4ID0gUV9ORVhUX1RPX1BPU1QocSwgMSk7Ci0KLQkJaWYgKCsrd29y a19kb25lID09IHdvcmtfdG9fZG8pCi0JCQlicmVhazsKLQotCQljcV9kZXNjID0gJmNxX2Rlc2Nf YmFzZVtjcS0+dGFpbF9pZHhdOwotCX0KLQotCS8qIFVwZGF0ZSB0aGUgcXVldWUgaW5kaWNlcyBh bmQgcmluZyB0aGUgZG9vcmJlbGwgKi8KLQlpZiAod29ya19kb25lKQotCQlpb25pY19xX2ZsdXNo KHEpOwotfQotCiAvKgogICogU3RvcCBSZWNlaXZlIFVuaXRzIGZvciBzcGVjaWZpZWQgcXVldWUu CiAgKi8KQEAgLTEyMzcsMjEgKzc0Niw2IEBAIGlvbmljX2Rldl9yeF9xdWV1ZV9zdG9wKHN0cnVj dCBydGVfZXRoX2RldiAqZXRoX2RldiwgdWludDE2X3QgcnhfcXVldWVfaWQpCiAJcmV0dXJuIDA7 CiB9CiAKLXVpbnQxNl90Ci1pb25pY19yZWN2X3BrdHModm9pZCAqcnhfcXVldWUsIHN0cnVjdCBy dGVfbWJ1ZiAqKnJ4X3BrdHMsCi0JCXVpbnQxNl90IG5iX3BrdHMpCi17Ci0Jc3RydWN0IGlvbmlj X3J4X3FjcSAqcnhxID0gcnhfcXVldWU7Ci0Jc3RydWN0IGlvbmljX3J4X3NlcnZpY2Ugcnhfc3Zj OwotCi0Jcnhfc3ZjLnJ4X3BrdHMgPSByeF9wa3RzOwotCXJ4X3N2Yy5uYl9yeCA9IDA7Ci0KLQlp b25pY19yeHFfc2VydmljZShyeHEsIG5iX3BrdHMsICZyeF9zdmMpOwotCi0JcmV0dXJuIHJ4X3N2 Yy5uYl9yeDsKLX0KLQogaW50CiBpb25pY19kZXZfcnhfZGVzY3JpcHRvcl9zdGF0dXModm9pZCAq cnhfcXVldWUsIHVpbnQxNl90IG9mZnNldCkKIHsKZGlmZiBhL2RyaXZlcnMvbmV0L2lvbmljL2lv bmljX3J4dHguaCBiL2RyaXZlcnMvbmV0L2lvbmljL2lvbmljX3J4dHguaAkocmVqZWN0ZWQgaHVu a3MpCkBAIC00NSw0ICs1NiwyNSBAQCBpbnQgaW9uaWNfZGV2X3R4X2Rlc2NyaXB0b3Jfc3RhdHVz KHZvaWQgKnR4X3F1ZXVlLCB1aW50MTZfdCBvZmZzZXQpOwogCiBjb25zdCB1aW50MzJfdCAqaW9u aWNfZGV2X3N1cHBvcnRlZF9wdHlwZXNfZ2V0KHN0cnVjdCBydGVfZXRoX2RldiAqZGV2KTsKIAor aW50IGlvbmljX3R4X3RzbyhzdHJ1Y3QgaW9uaWNfdHhfcWNxICp0eHEsIHN0cnVjdCBydGVfbWJ1 ZiAqdHhtKTsKKwordWludDE2X3QgaW9uaWNfcHJlcF9wa3RzKHZvaWQgKnR4X3F1ZXVlLCBzdHJ1 Y3QgcnRlX21idWYgKip0eF9wa3RzLAorCXVpbnQxNl90IG5iX3BrdHMpOworCisvKiBpb25pY19y eHR4X3NpbXBsZS5jICovCit1aW50MTZfdCBpb25pY19yZWN2X3BrdHModm9pZCAqcnhfcXVldWUs IHN0cnVjdCBydGVfbWJ1ZiAqKnJ4X3BrdHMsCisJdWludDE2X3QgbmJfcGt0cyk7Cit1aW50MTZf dCBpb25pY194bWl0X3BrdHModm9pZCAqdHhfcXVldWUsIHN0cnVjdCBydGVfbWJ1ZiAqKnR4X3Br dHMsCisJdWludDE2X3QgbmJfcGt0cyk7CisKK2ludCBpb25pY19yeF9maWxsKHN0cnVjdCBpb25p Y19yeF9xY3EgKnJ4cSk7CisKKy8qIGlvbmljX3J4dHhfc2cuYyAqLwordWludDE2X3QgaW9uaWNf cmVjdl9wa3RzX3NnKHZvaWQgKnJ4X3F1ZXVlLCBzdHJ1Y3QgcnRlX21idWYgKipyeF9wa3RzLAor CXVpbnQxNl90IG5iX3BrdHMpOwordWludDE2X3QgaW9uaWNfeG1pdF9wa3RzX3NnKHZvaWQgKnR4 X3F1ZXVlLCBzdHJ1Y3QgcnRlX21idWYgKip0eF9wa3RzLAorCXVpbnQxNl90IG5iX3BrdHMpOwor CitpbnQgaW9uaWNfcnhfZmlsbF9zZyhzdHJ1Y3QgaW9uaWNfcnhfcWNxICpyeHEpOworCiAjZW5k aWYgLyogX0lPTklDX1JYVFhfSF8gKi8KCmh0dHBzOi8vbGFiLmRwZGsub3JnL3Jlc3VsdHMvZGFz aGJvYXJkL3BhdGNoc2V0cy8yMzkwMS8KClVOSC1JT0wgRFBESyBDb21tdW5pdHkgTGFiCg== --===============7608046258066495453==--