From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-qk1-x72f.google.com (mail-qk1-x72f.google.com [IPv6:2607:f8b0:4864:20::72f]) by sourceware.org (Postfix) with ESMTPS id 46EB93858430 for ; Thu, 27 Jan 2022 22:10:39 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 46EB93858430 Received: by mail-qk1-x72f.google.com with SMTP id 200so3965469qki.2 for ; Thu, 27 Jan 2022 14:10:39 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=5szeGK9wWWvYwNjKEKVMmKaLEML+z0CHvgA8z51aTIs=; b=Vp7bS1Zl/7qmr6mbP2I5S5PbWuAVcdCLxrqq3Ja+vSnZyWw5w2WDfVqUHyEOR8gdhL iqwd+GWXA4qH0DohM1ltuoxWXN4GNLs59HdY4eA0sS9pN7J8I1SPN6GpxA3AXXZAdlll 68kVXRLAkw7yLTQVF65b2bAkbcZLxwno4Lbk6sqno1mTAGO62KL/3zYEkmLR37Rq79Nq tGjDddlYaMibdiVOp5ItMhxFnl8QUhDR2ZRC2iTbmnAfnKLctrwEDFZcGiLqnTWzUgBE sWPS8eufi2l58Lyts6uFpCSUi9IlUKNTC2t+2qPrlRnnx3Di78dk4NCH7CtVuSU+h5bj PFfw== X-Gm-Message-State: AOAM530kdaIj/BOJtlJOL0Jw1uzymWGDdwHaprqWZP21q4fFPV3bJ12j SdqmVBYCcYa0J1G3GcuozPiQxjxs5unoyWiwB80= X-Google-Smtp-Source: ABdhPJytrGUwBkJv9dhK6YQltHqzg6lY6UvMA+UeiOnbjvG5gP9IHjDV0WV6CaYp7WwofulapPsC1NkxaH2cga+goqk= X-Received: by 2002:a37:6393:: with SMTP id x141mr4128147qkb.197.1643321438773; Thu, 27 Jan 2022 14:10:38 -0800 (PST) MIME-Version: 1.0 References: <4449972.oeqMtR4stF@abensonca-precision-7540> <6d037812-1395-3bf6-3de9-5ba331cdaf14@gmail.com> In-Reply-To: From: Paul Richard Thomas Date: Thu, 27 Jan 2022 22:10:27 +0000 Message-ID: Subject: Re: FINAL subroutines To: Salvatore Filippone Cc: Jerry D , Andrew Benson , Damian Rouson , Fortran List Content-Type: multipart/mixed; boundary="0000000000009c60e305d6979636" X-Spam-Status: No, score=-7.5 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, FREEMAIL_FROM, GIT_PATCH_0, HTML_MESSAGE, KAM_SHORT, KAM_STOCKGEN, RCVD_IN_DNSWL_NONE, SPF_HELO_NONE, SPF_PASS, TXREP autolearn=ham autolearn_force=no version=3.4.4 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on server2.sourceware.org X-Content-Filtered-By: Mailman/MimeDel 2.1.29 X-BeenThere: fortran@gcc.gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Fortran mailing list List-Unsubscribe: , List-Archive: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 27 Jan 2022 22:10:45 -0000 --0000000000009c60e305d6979636 Content-Type: text/plain; charset="UTF-8" Hi Salvatore, My reading of F2018: 7.5.6.3 "When finalization occurs" is that three calls is correct. (i) Paragraph 1 stipulates that the 'var' expression be evaluated before the reallocation and intrinsic assignment; (ii)stipulates that the function result be finalised "the result is finalized after execution of the innermost executable construct containing the reference." ; and (iii) Finalisation occurs on going out of scope. That is what is implemented in the attached. I am working my way through the testcase dependencies of PR37336 making sure that finalizat ion occurs as required by 7.5.6.3 and in the order defined in the previous section. It will all be done in the next few days. What will remain is finalization of function results within array constructors and one or two other corner cases. Following that, the existing finalization calls will be brought into the framework as the new calls. Best regards Paul On Thu, 27 Jan 2022 at 07:17, Salvatore Filippone < filippone.salvatore@gmail.com> wrote: > One more data point: Cray FTN issues TWO calls to the FINAL. > Which begs the question: what is the correct number of calls one, two or > three? > Salvatore > > fsalvato@daint102:/project/prce01/fsalvato/NUMERICAL/PSBLAS/V4/psblas4/test/newstuff> > ftn --version > Cray Fortran : Version 11.0.0 > fsalvato@daint102:/project/prce01/fsalvato/NUMERICAL/PSBLAS/V4/psblas4/test/newstuff> > ftn -o testfinal testfinal.f90 > fsalvato@daint102:/project/prce01/fsalvato/NUMERICAL/PSBLAS/V4/psblas4/test/newstuff> > ./testfinal > Allocating wrapper > Calling new_outer_type > Assigning outer%test_item > Called delete_test_type > End of new_outer_type > DeAllocating wrapper > Called delete_test_type > > On Wed, Jan 26, 2022 at 11:59 PM Paul Richard Thomas < > paul.richard.thomas@gmail.com> wrote: > >> Hi Jerry, >> >> I am trying to fix the failure of my latest patch with this very test >> case. Otherwise it fixes most of the remaining dependencies in PR37336. >> >> At a pinch, I could submit the earlier patch that Andrew mentions and >> work from there. However, you will note that it does miss one of the >> finalizations. This is critical because function results, which should be >> finalized, are not. >> >> I'll keep an eye on the state of the branch. By and large, release occurs >> 3-4 months after the start of stage 4. I will leave 2 months maximum. >> >> Best regards >> >> Paul >> >> >> On Wed, 26 Jan 2022 at 21:29, Jerry D via Fortran >> wrote: >> >>> Is there any reason these patches can not be applied and use this test >>> as a test case? >>> >>> Regards, >>> >>> Jerry >>> >>> On 1/24/22 8:11 AM, Salvatore Filippone via Fortran wrote: >>> > Thanks a lot >>> > (yes, I suspected both gfortran and intel were wrong, precisely >>> because I >>> > could see why you'd need two FINAL calls, but not three). >>> > >>> > Salvatore >>> > >>> > On Mon, Jan 24, 2022 at 4:45 PM Andrew Benson < >>> abenson@carnegiescience.edu> >>> > wrote: >>> > >>> >> Hi Salvatore, >>> >> >>> >> This looks like it's related to some of the missing finalization >>> >> functionality >>> >> (https://gcc.gnu.org/bugzilla/show_bug.cgi?id=37336). Paul has some >>> >> patches >>> >> (e.g. https://gcc.gnu.org/pipermail/fortran/2022-January/057415.html) >>> >> which >>> >> implement most of the missing functionality. With those patches >>> >> incorporated >>> >> your code gives the following output with gfortran: >>> >> >>> >> $ ./testfinal >>> >> Allocating wrapper >>> >> Calling new_outer_type >>> >> Assigning outer%test_item >>> >> Called delete_test_type >>> >> End of new_outer_type >>> >> DeAllocating wrapper >>> >> Called delete_test_type >>> >> >>> >> So there is one more call to the finalizer than you found - I haven't >>> >> checked >>> >> carefully but I would guess this is a deallocation of LHS on >>> assignment. >>> >> >>> >> In testing these patches using the Intel compiler we found that it >>> seems >>> >> to >>> >> call the finalization wrapper more than it should, sometimes on >>> objects >>> >> that >>> >> have already been deallocated. Your code, compiled with the Intel >>> compiler >>> >> and >>> >> then run under valgrind shows the following: >>> >> >>> >> $ valgrind ./testfinal >>> >> ==7340== Memcheck, a memory error detector >>> >> ==7340== Copyright (C) 2002-2017, and GNU GPL'd, by Julian Seward et >>> al. >>> >> ==7340== Using Valgrind-3.13.0 and LibVEX; rerun with -h for >>> copyright info >>> >> ==7340== Command: ./testfinal >>> >> ==7340== >>> >> ==7340== Conditional jump or move depends on uninitialised value(s) >>> >> ==7340== at 0x493A51: __intel_sse2_strcpy (in >>> /home/abensonca/Scratch/ >>> >> ifortTests/testfinal) >>> >> ==7340== by 0x45D70E: for__add_to_lf_table (in >>> /home/abensonca/Scratch/ >>> >> ifortTests/testfinal) >>> >> ==7340== by 0x4410CB: for__open_proc (in /home/abensonca/Scratch/ >>> >> ifortTests/testfinal) >>> >> ==7340== by 0x423A64: for__open_default (in >>> /home/abensonca/Scratch/ >>> >> ifortTests/testfinal) >>> >> ==7340== by 0x4305A9: for_write_seq_lis (in >>> /home/abensonca/Scratch/ >>> >> ifortTests/testfinal) >>> >> ==7340== by 0x4047E1: MAIN__ (testfinal.f90:62) >>> >> ==7340== by 0x403CE1: main (in /home/abensonca/Scratch/ifortTests/ >>> >> testfinal) >>> >> ==7340== >>> >> Allocating wrapper >>> >> Calling new_outer_type >>> >> Assigning outer%test_item >>> >> Called delete_test_type >>> >> ==7340== Conditional jump or move depends on uninitialised value(s) >>> >> ==7340== at 0x40572A: do_alloc_copy (in >>> >> /home/abensonca/Scratch/ifortTests/ >>> >> testfinal) >>> >> ==7340== by 0x406B9A: do_alloc_copy (in >>> >> /home/abensonca/Scratch/ifortTests/ >>> >> testfinal) >>> >> ==7340== by 0x4084ED: for_alloc_assign_v2 (in >>> /home/abensonca/Scratch/ >>> >> ifortTests/testfinal) >>> >> ==7340== by 0x404474: target_mod_mp_new_outer_type_ >>> (testfinal.f90:48) >>> >> ==7340== by 0x40485E: MAIN__ (testfinal.f90:65) >>> >> ==7340== by 0x403CE1: main (in /home/abensonca/Scratch/ifortTests/ >>> >> testfinal) >>> >> ==7340== >>> >> Called delete_test_type >>> >> End of new_outer_type >>> >> DeAllocating wrapper >>> >> Called delete_test_type >>> >> ==7340== >>> >> ==7340== HEAP SUMMARY: >>> >> ==7340== in use at exit: 48 bytes in 1 blocks >>> >> ==7340== total heap usage: 14 allocs, 13 frees, 12,879 bytes >>> allocated >>> >> ==7340== >>> >> ==7340== LEAK SUMMARY: >>> >> ==7340== definitely lost: 48 bytes in 1 blocks >>> >> ==7340== indirectly lost: 0 bytes in 0 blocks >>> >> ==7340== possibly lost: 0 bytes in 0 blocks >>> >> ==7340== still reachable: 0 bytes in 0 blocks >>> >> ==7340== suppressed: 0 bytes in 0 blocks >>> >> ==7340== Rerun with --leak-check=full to see details of leaked memory >>> >> ==7340== >>> >> ==7340== For counts of detected and suppressed errors, rerun with: -v >>> >> ==7340== Use --track-origins=yes to see where uninitialised values >>> come >>> >> from >>> >> ==7340== ERROR SUMMARY: 2 errors from 2 contexts (suppressed: 0 from >>> 0) >>> >> >>> >> so there are some cases of what look like incorrect accesses (and some >>> >> leaked >>> >> memory). >>> >> >>> >> Your code compiled with gfortran (with Paul's patches in place) >>> shows no >>> >> errors or leaks from valgrind. >>> >> >>> >> So, in summary, in this case I think the current gfortran is missing >>> some >>> >> finalizations (which are fixed by Paul's patches), and ifort is likely >>> >> doing >>> >> something wrong and probably calling the finalizer more times than it >>> >> should. >>> >> >>> >> -Andrew >>> >> >>> >> On Monday, January 24, 2022 6:49:23 AM PST Salvatore Filippone via >>> Fortran >>> >> wrote: >>> >>> And here is the code embedded as text............ sorry about >>> sending an >>> >>> attachment that was purged >>> >>> ------------------------- testfinal.f90 --------------------- >>> >>> module test_type_mod >>> >>> >>> >>> type :: my_test_type >>> >>> integer, allocatable :: i >>> >>> contains >>> >>> final :: delete_test_type >>> >>> end type my_test_type >>> >>> >>> >>> interface my_test_type >>> >>> module procedure new_test_type_object >>> >>> end interface my_test_type >>> >>> >>> >>> contains >>> >>> >>> >>> subroutine delete_test_type(this) >>> >>> type(my_test_type) :: this >>> >>> >>> >>> write(*,*) 'Called delete_test_type' >>> >>> if (allocated(this%i)) deallocate(this%i) >>> >>> >>> >>> end subroutine delete_test_type >>> >>> >>> >>> >>> >>> function new_test_type_object(item) result(res) >>> >>> type(my_test_type) :: res >>> >>> integer, intent(in) :: item >>> >>> !Allocation on assignment >>> >>> res%i=item >>> >>> end function new_test_type_object >>> >>> >>> >>> >>> >>> end module test_type_mod >>> >>> >>> >>> module target_mod >>> >>> use test_type_mod >>> >>> type :: outer_type >>> >>> type(my_test_type), allocatable :: test_item >>> >>> end type outer_type >>> >>> >>> >>> contains >>> >>> >>> >>> subroutine new_outer_type(outer,item) >>> >>> type(outer_type), intent(out) :: outer >>> >>> integer :: item >>> >>> >>> >>> allocate(outer%test_item) >>> >>> write(*,*) 'Assigning outer%test_item' >>> >>> outer%test_item = my_test_type(itemi) >>> >>> write(*,*) 'End of new_outer_type' >>> >>> end subroutine new_outer_type >>> >>> >>> >>> end module target_mod >>> >>> >>> >>> program testfinal >>> >>> use target_mod >>> >>> >>> >>> implicit none >>> >>> >>> >>> integer :: i=10 >>> >>> type(outer_type), allocatable :: wrapper >>> >>> >>> >>> write(*,*) 'Allocating wrapper ' >>> >>> allocate(wrapper) >>> >>> write(*,*) 'Calling new_outer_type ' >>> >>> call new_outer_type(wrapper,i) >>> >>> write(*,*) 'DeAllocating wrapper ' >>> >>> deallocate(wrapper) >>> >>> >>> >>> end program testfinal >>> >>> >>> >>> On Mon, Jan 24, 2022 at 2:50 PM Salvatore Filippone < >>> >>> >>> >>> filippone.salvatore@gmail.com> wrote: >>> >>>> Hi all >>> >>>> The attached code compiles and runs fine under both GNU and Intel, >>> but >>> >> it >>> >>>> produces different results, in particular the FINAL subroutine is >>> >> invoked >>> >>>> just once with GNU, three times with Intel. >>> >>>> >>> >>>> It seems to me that they cannot both be right; I am not sure what >>> the >>> >>>> standard is mandating in this case. >>> >>>> Any ideas? >>> >>>> Salvatore >>> >>>> --------------- Intel >>> >>>> [pr1eio03@login1: newstuff]$ ifort -v >>> >>>> ifort version 19.1.1.217 >>> >>>> [pr1eio03@login1: newstuff]$ ifort -o testfinal testfinal.f90 >>> >>>> [pr1eio03@login1: newstuff]$ ./testfinal >>> >>>> >>> >>>> Allocating wrapper >>> >>>> Calling new_outer_type >>> >>>> Assigning outer%test_item >>> >>>> Called delete_test_type >>> >>>> Called delete_test_type >>> >>>> End of new_outer_type >>> >>>> DeAllocating wrapper >>> >>>> Called delete_test_type >>> >>>> >>> >>>> ----------------------------- GNU >>> >>>> sfilippo@lagrange newstuff]$ gfortran -v >>> >>>> Using built-in specs. >>> >>>> COLLECT_GCC=gfortran >>> >>>> >>> COLLECT_LTO_WRAPPER=/usr/libexec/gcc/x86_64-redhat-linux/11/lto-wrapper >>> >>>> OFFLOAD_TARGET_NAMES=nvptx-none >>> >>>> OFFLOAD_TARGET_DEFAULT=1 >>> >>>> Target: x86_64-redhat-linux >>> >>>> Configured with: ../configure --enable-bootstrap >>> >>>> --enable-languages=c,c++,fortran,objc,obj-c++,ada,go,d,lto >>> >> --prefix=/usr >>> >>>> --mandir=/usr/share/man --infodir=/usr/share/info --with-bugurl= >>> >>>> http://bugzilla.redhat.com/bugzilla --enable-shared >>> >>>> --enable-threads=posix --enable-checking=release --enable-multilib >>> >>>> --with-system-zlib --enable-__cxa_atexit >>> --disable-libunwind-exceptions >>> >>>> --enable-gnu-unique-object --enable-linker-build-id >>> >>>> --with-gcc-major-version-only --with-linker-hash-style=gnu >>> >> --enable-plugin >>> >>>> --enable-initfini-array >>> >>>> >>> >> >>> --with-isl=/builddir/build/BUILD/gcc-11.2.1-20210728/obj-x86_64-redhat-lin >>> >>>> ux/isl-install --enable-offload-targets=nvptx-none >>> >> --without-cuda-driver >>> >>>> --enable-gnu-indirect-function --enable-cet --with-tune=generic >>> >>>> --with-arch_32=i686 --build=x86_64-redhat-linux >>> >>>> Thread model: posix >>> >>>> Supported LTO compression algorithms: zlib zstd >>> >>>> gcc version 11.2.1 20210728 (Red Hat 11.2.1-1) (GCC) >>> >>>> [sfilippo@lagrange newstuff]$ gfortran -o testfinal testfinal.f90 >>> >>>> [sfilippo@lagrange newstuff]$ ./testfinal >>> >>>> >>> >>>> Allocating wrapper >>> >>>> Calling new_outer_type >>> >>>> Assigning outer%test_item >>> >>>> End of new_outer_type >>> >>>> DeAllocating wrapper >>> >>>> Called delete_test_type >>> >>>> >>> >>>> --------------------- >>> >> >>> >> -- >>> >> >>> >> * Andrew Benson: https://abensonca.github.io >>> >> >>> >> * Galacticus: https://github.com/galacticusorg/galacticus >>> >> >>> >> >>> >> >>> >> >>> >>> >> >> -- >> "If you can't explain it simply, you don't understand it well enough" - >> Albert Einstein >> > -- "If you can't explain it simply, you don't understand it well enough" - Albert Einstein --0000000000009c60e305d6979636 Content-Type: text/x-patch; charset="US-ASCII"; name="Check270222.diff" Content-Disposition: attachment; filename="Check270222.diff" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_kyxj58bo0 ZGlmZiAtLWdpdCBhL2djYy9mb3J0cmFuL2NsYXNzLmNjIGIvZ2NjL2ZvcnRyYW4vY2xhc3MuY2MK aW5kZXggNzMxZTliMGZlNmEuLmEyNDllZWE0YTMwIDEwMDY0NAotLS0gYS9nY2MvZm9ydHJhbi9j bGFzcy5jYworKysgYi9nY2MvZm9ydHJhbi9jbGFzcy5jYwpAQCAtODk2LDcgKzg5Niw4IEBAIGhh c19maW5hbGl6ZXJfY29tcG9uZW50IChnZmNfc3ltYm9sICpkZXJpdmVkKQogICAgZ2ZjX2NvbXBv bmVudCAqYzsKIAogICBmb3IgKGMgPSBkZXJpdmVkLT5jb21wb25lbnRzOyBjOyBjID0gYy0+bmV4 dCkKLSAgICBpZiAoYy0+dHMudHlwZSA9PSBCVF9ERVJJVkVEICYmICFjLT5hdHRyLnBvaW50ZXIg JiYgIWMtPmF0dHIuYWxsb2NhdGFibGUpCisgICAgaWYgKGMtPnRzLnR5cGUgPT0gQlRfREVSSVZF RCAmJiAhYy0+YXR0ci5wb2ludGVyICYmICFjLT5hdHRyLmFsbG9jYXRhYmxlCisJJiYgYy0+YXR0 ci5mbGF2b3IgIT0gRkxfUFJPQ0VEVVJFKQogICAgICAgewogCWlmIChjLT50cy51LmRlcml2ZWQt PmYya19kZXJpdmVkCiAJICAgICYmIGMtPnRzLnUuZGVyaXZlZC0+ZjJrX2Rlcml2ZWQtPmZpbmFs aXplcnMpCkBAIC0xMDU5LDcgKzEwNjAsOCBAQCBmaW5hbGl6ZV9jb21wb25lbnQgKGdmY19leHBy ICpleHByLCBnZmNfc3ltYm9sICpkZXJpdmVkLCBnZmNfY29tcG9uZW50ICpjb21wLAogICAgIHsK ICAgICAgIC8qIENhbGwgRklOQUxfV1JBUFBFUiAoY29tcCk7ICAqLwogICAgICAgZ2ZjX2NvZGUg KmZpbmFsX3dyYXA7Ci0gICAgICBnZmNfc3ltYm9sICp2dGFiOworICAgICAgZ2ZjX3N5bWJvbCAq dnRhYiwgKmJ5dGVfc3RyaWRlOworICAgICAgZ2ZjX2V4cHIgKnNjYWxhciwgKnNpemVfZXhwciwg KmZpbmlfY29hcnJheV9leHByOwogICAgICAgZ2ZjX2NvbXBvbmVudCAqYzsKIAogICAgICAgdnRh YiA9IGdmY19maW5kX2Rlcml2ZWRfdnRhYiAoY29tcC0+dHMudS5kZXJpdmVkKTsKQEAgLTEwNjgs MTIgKzEwNzAsNTQgQEAgZmluYWxpemVfY29tcG9uZW50IChnZmNfZXhwciAqZXhwciwgZ2ZjX3N5 bWJvbCAqZGVyaXZlZCwgZ2ZjX2NvbXBvbmVudCAqY29tcCwKIAkgIGJyZWFrOwogCiAgICAgICBn Y2NfYXNzZXJ0IChjKTsKKworICAgICAgLyogU2V0IHNjYWxhciBhcmd1bWVudCBmb3Igc3RvcmFn ZV9zaXplLiAgKi8KKyAgICAgIGdmY19nZXRfc3ltYm9sICgiY29tcF9ieXRlX3N0cmlkZSIsIHN1 Yl9ucywgJmJ5dGVfc3RyaWRlKTsKKyAgICAgIGJ5dGVfc3RyaWRlLT50cyA9IGUtPnRzOworICAg ICAgYnl0ZV9zdHJpZGUtPmF0dHIuZmxhdm9yID0gRkxfVkFSSUFCTEU7CisgICAgICBieXRlX3N0 cmlkZS0+YXR0ci52YWx1ZSA9IDE7CisgICAgICBieXRlX3N0cmlkZS0+YXR0ci5hcnRpZmljaWFs ID0gMTsKKyAgICAgIGdmY19zZXRfc3ltX3JlZmVyZW5jZWQgKGJ5dGVfc3RyaWRlKTsKKyAgICAg IGdmY19jb21taXRfc3ltYm9sIChieXRlX3N0cmlkZSk7CisgICAgICBzY2FsYXIgPSBnZmNfbHZh bF9leHByX2Zyb21fc3ltIChieXRlX3N0cmlkZSk7CisKICAgICAgIGZpbmFsX3dyYXAgPSBnZmNf Z2V0X2NvZGUgKEVYRUNfQ0FMTCk7CiAgICAgICBmaW5hbF93cmFwLT5zeW10cmVlID0gYy0+aW5p dGlhbGl6ZXItPnN5bXRyZWU7CiAgICAgICBmaW5hbF93cmFwLT5yZXNvbHZlZF9zeW0gPSBjLT5p bml0aWFsaXplci0+c3ltdHJlZS0+bi5zeW07CiAgICAgICBmaW5hbF93cmFwLT5leHQuYWN0dWFs ID0gZ2ZjX2dldF9hY3R1YWxfYXJnbGlzdCAoKTsKICAgICAgIGZpbmFsX3dyYXAtPmV4dC5hY3R1 YWwtPmV4cHIgPSBlOwogCisgICAgICAvKiBzaXplX2V4cHIgPSBTVE9SQUdFX1NJWkUgKC4uLikg LyBOVU1FUklDX1NUT1JBR0VfU0laRS4gICovCisgICAgICBzaXplX2V4cHIgPSBnZmNfZ2V0X2V4 cHIgKCk7CisgICAgICBzaXplX2V4cHItPndoZXJlID0gZ2ZjX2N1cnJlbnRfbG9jdXM7CisgICAg ICBzaXplX2V4cHItPmV4cHJfdHlwZSA9IEVYUFJfT1A7CisgICAgICBzaXplX2V4cHItPnZhbHVl Lm9wLm9wID0gSU5UUklOU0lDX0RJVklERTsKKworICAgICAgLyogU1RPUkFHRV9TSVpFIChhcnJh eSxraW5kPWNfaW50cHRyX3QpLiAgKi8KKyAgICAgIHNpemVfZXhwci0+dmFsdWUub3Aub3AxCisJ PSBnZmNfYnVpbGRfaW50cmluc2ljX2NhbGwgKHN1Yl9ucywgR0ZDX0lTWU1fU1RPUkFHRV9TSVpF LAorCQkJCSAgICAic3RvcmFnZV9zaXplIiwgZ2ZjX2N1cnJlbnRfbG9jdXMsIDIsCisJCQkJICAg IHNjYWxhciwKKwkJCQkgICAgZ2ZjX2dldF9pbnRfZXhwciAoZ2ZjX2luZGV4X2ludGVnZXJfa2lu ZCwKKwkJCQkJCSAgICAgIE5VTEwsIDApKTsKKworICAgICAgLyogTlVNRVJJQ19TVE9SQUdFX1NJ WkUuICAqLworICAgICAgc2l6ZV9leHByLT52YWx1ZS5vcC5vcDIgPSBnZmNfZ2V0X2ludF9leHBy IChnZmNfaW5kZXhfaW50ZWdlcl9raW5kLCBOVUxMLAorCQkJCQkJICBnZmNfY2hhcmFjdGVyX3N0 b3JhZ2Vfc2l6ZSk7CisgICAgICBzaXplX2V4cHItPnZhbHVlLm9wLm9wMS0+dHMgPSBzaXplX2V4 cHItPnZhbHVlLm9wLm9wMi0+dHM7CisgICAgICBzaXplX2V4cHItPnRzID0gc2l6ZV9leHByLT52 YWx1ZS5vcC5vcDEtPnRzOworCisgICAgICAvKiBXaGljaCBwcm92aWRlcyB0aGUgYXJndW1lbnQg J2J5dGVfc3RyaWRlJy4uLi4uICAqLworICAgICAgZmluYWxfd3JhcC0+ZXh0LmFjdHVhbC0+bmV4 dCA9IGdmY19nZXRfYWN0dWFsX2FyZ2xpc3QgKCk7CisgICAgICBmaW5hbF93cmFwLT5leHQuYWN0 dWFsLT5uZXh0LT5leHByID0gc2l6ZV9leHByOworCisgICAgICAvKiAuLi5hbmQgbGFzdCBvZiBh bGwgdGhlICdmaW5pX2NvYXJyYXknIGFyZ3VtZW50LiAgKi8KKyAgICAgIGZpbmlfY29hcnJheV9l eHByID0gZ2ZjX2x2YWxfZXhwcl9mcm9tX3N5bSAoZmluaV9jb2FycmF5KTsKKyAgICAgIGZpbmFs X3dyYXAtPmV4dC5hY3R1YWwtPm5leHQtPm5leHQgPSBnZmNfZ2V0X2FjdHVhbF9hcmdsaXN0ICgp OworICAgICAgZmluYWxfd3JhcC0+ZXh0LmFjdHVhbC0+bmV4dC0+bmV4dC0+ZXhwciA9IGZpbmlf Y29hcnJheV9leHByOworCisKKwogICAgICAgaWYgKCpjb2RlKQogCXsKIAkgICgqY29kZSktPm5l eHQgPSBmaW5hbF93cmFwOwpAQCAtMTQzMCw4ICsxNDc0LDYgQEAgZmluYWxpemVyX2luc2VydF9w YWNrZWRfY2FsbCAoZ2ZjX2NvZGUgKmJsb2NrLCBnZmNfZmluYWxpemVyICpmaW5pLAogICBibG9j ay0+bmV4dC0+cmVzb2x2ZWRfc3ltID0gZmluaS0+cHJvY190cmVlLT5uLnN5bTsKICAgYmxvY2st Pm5leHQtPmV4dC5hY3R1YWwgPSBnZmNfZ2V0X2FjdHVhbF9hcmdsaXN0ICgpOwogICBibG9jay0+ bmV4dC0+ZXh0LmFjdHVhbC0+ZXhwciA9IGdmY19sdmFsX2V4cHJfZnJvbV9zeW0gKGFycmF5KTsK LSAgYmxvY2stPm5leHQtPmV4dC5hY3R1YWwtPm5leHQgPSBnZmNfZ2V0X2FjdHVhbF9hcmdsaXN0 ICgpOwotICBibG9jay0+bmV4dC0+ZXh0LmFjdHVhbC0+bmV4dC0+ZXhwciA9IGdmY19jb3B5X2V4 cHIgKHNpemVfZXhwcik7CiAKICAgLyogRUxTRS4gICovCiAKZGlmZiAtLWdpdCBhL2djYy9mb3J0 cmFuL3Jlc29sdmUuY2MgYi9nY2MvZm9ydHJhbi9yZXNvbHZlLmNjCmluZGV4IDgzNWE0NzgzNzE4 Li41NTU4YWY0ZTJiYSAxMDA2NDQKLS0tIGEvZ2NjL2ZvcnRyYW4vcmVzb2x2ZS5jYworKysgYi9n Y2MvZm9ydHJhbi9yZXNvbHZlLmNjCkBAIC0xMDUxMiw2ICsxMDUxMiwxMCBAQCByZXNvbHZlX3do ZXJlIChnZmNfY29kZSAqY29kZSwgZ2ZjX2V4cHIgKm1hc2spCiAJICAgICAgaWYgKGUgJiYgIXJl c29sdmVfd2hlcmVfc2hhcGUgKGNuZXh0LT5leHByMSwgZSkpCiAJICAgICAgIGdmY19lcnJvciAo IldIRVJFIGFzc2lnbm1lbnQgdGFyZ2V0IGF0ICVMIGhhcyAiCiAJCQkgICJpbmNvbnNpc3RlbnQg c2hhcGUiLCAmY25leHQtPmV4cHIxLT53aGVyZSk7CisKKwkgICAgICBpZiAoY25leHQtPm9wID09 IEVYRUNfQVNTSUdOKQorCQljbmV4dC0+ZXhwcjEtPm11c3RfZmluYWxpemUgPSAxOworCiAJICAg ICAgYnJlYWs7CiAKIApAQCAtMTA1OTksNiArMTA2MDMsMTAgQEAgZ2ZjX3Jlc29sdmVfd2hlcmVf Y29kZV9pbl9mb3JhbGwgKGdmY19jb2RlICpjb2RlLCBpbnQgbnZhciwKIAkgICAgLyogV0hFUkUg YXNzaWdubWVudCBzdGF0ZW1lbnQgKi8KIAkgICAgY2FzZSBFWEVDX0FTU0lHTjoKIAkgICAgICBn ZmNfcmVzb2x2ZV9hc3NpZ25faW5fZm9yYWxsIChjbmV4dCwgbnZhciwgdmFyX2V4cHIpOworCisJ ICAgICAgaWYgKGNuZXh0LT5vcCA9PSBFWEVDX0FTU0lHTikKKwkJY25leHQtPmV4cHIxLT5tdXN0 X2ZpbmFsaXplID0gMTsKKwogCSAgICAgIGJyZWFrOwogCiAJICAgIC8qIFdIRVJFIG9wZXJhdG9y IGFzc2lnbm1lbnQgc3RhdGVtZW50ICovCkBAIC0xMDY0NSw2ICsxMDY1MywxMCBAQCBnZmNfcmVz b2x2ZV9mb3JhbGxfYm9keSAoZ2ZjX2NvZGUgKmNvZGUsIGludCBudmFyLCBnZmNfZXhwciAqKnZh cl9leHByKQogCWNhc2UgRVhFQ19BU1NJR046CiAJY2FzZSBFWEVDX1BPSU5URVJfQVNTSUdOOgog CSAgZ2ZjX3Jlc29sdmVfYXNzaWduX2luX2ZvcmFsbCAoYywgbnZhciwgdmFyX2V4cHIpOworCisJ ICBpZiAoYy0+b3AgPT0gRVhFQ19BU1NJR04pCisJICAgIGMtPmV4cHIxLT5tdXN0X2ZpbmFsaXpl ID0gMTsKKwogCSAgYnJlYWs7CiAKIAljYXNlIEVYRUNfQVNTSUdOX0NBTEw6CkBAIC0xMjA2OSw2 ICsxMjA4MSw5IEBAIHN0YXJ0OgogCSAgICAgICYmIGNvZGUtPmV4cHIxLT50cy51LmRlcml2ZWQt PmF0dHIuZGVmaW5lZF9hc3NpZ25fY29tcCkKIAkgICAgZ2VuZXJhdGVfY29tcG9uZW50X2Fzc2ln bm1lbnRzICgmY29kZSwgbnMpOwogCisJICBpZiAoY29kZS0+b3AgPT0gRVhFQ19BU1NJR04pCisJ ICAgIGNvZGUtPmV4cHIxLT5tdXN0X2ZpbmFsaXplID0gMTsKKwogCSAgYnJlYWs7CiAKIAljYXNl IEVYRUNfTEFCRUxfQVNTSUdOOgpkaWZmIC0tZ2l0IGEvZ2NjL2ZvcnRyYW4vdHJhbnMtYXJyYXku Y2MgYi9nY2MvZm9ydHJhbi90cmFucy1hcnJheS5jYwppbmRleCAyZjBjOGE0ZDQxMi4uYjAzZTc0 OTYwY2UgMTAwNjQ0Ci0tLSBhL2djYy9mb3J0cmFuL3RyYW5zLWFycmF5LmNjCisrKyBiL2djYy9m b3J0cmFuL3RyYW5zLWFycmF5LmNjCkBAIC05OTQsOSArOTk0LDkgQEAgZ2ZjX2dldF9hcnJheV9z cGFuICh0cmVlIGRlc2MsIGdmY19leHByICpleHByKQogICAgICAgaWYgKHRtcCAmJiBUUkVFX0NP REUgKHRtcCkgPT0gQVJSQVlfVFlQRSAmJiBUWVBFX1NUUklOR19GTEFHICh0bXApKQogCXsKIAkg IGdjY19hc3NlcnQgKGV4cHItPnRzLnR5cGUgPT0gQlRfQ0hBUkFDVEVSKTsKLQkgIAorCiAJICB0 bXAgPSBnZmNfZ2V0X2NoYXJhY3Rlcl9sZW5faW5fYnl0ZXMgKHRtcCk7Ci0JICAKKwogCSAgaWYg KHRtcCA9PSBOVUxMX1RSRUUgfHwgaW50ZWdlcl96ZXJvcCAodG1wKSkKIAkgICAgewogCSAgICAg IHRyZWUgYnM7CkBAIC0xMDA3LDcgKzEwMDcsNyBAQCBnZmNfZ2V0X2FycmF5X3NwYW4gKHRyZWUg ZGVzYywgZ2ZjX2V4cHIgKmV4cHIpCiAJICAgICAgdG1wID0gZm9sZF9idWlsZDJfbG9jIChpbnB1 dF9sb2NhdGlvbiwgTVVMVF9FWFBSLAogCQkJCSAgICAgZ2ZjX2FycmF5X2luZGV4X3R5cGUsIHRt cCwgYnMpOwogCSAgICB9Ci0JICAKKwogCSAgdG1wID0gKHRtcCAmJiAhaW50ZWdlcl96ZXJvcCAo dG1wKSkKIAkgICAgPyAoZm9sZF9jb252ZXJ0IChnZmNfYXJyYXlfaW5kZXhfdHlwZSwgdG1wKSkg OiAoTlVMTF9UUkVFKTsKIAl9CkBAIC01NjU3LDcgKzU2NTcsMTIgQEAgZ2ZjX2FycmF5X2luaXRf c2l6ZSAodHJlZSBkZXNjcmlwdG9yLCBpbnQgcmFuaywgaW50IGNvcmFuaywgdHJlZSAqIHBvZmZz ZXQsCiAgIGdmY19zZSBzZTsKICAgaW50IG47CiAKLSAgdHlwZSA9IFRSRUVfVFlQRSAoZGVzY3Jp cHRvcik7CisgIGlmIChleHByLT50cy50eXBlID09IEJUX0NMQVNTCisgICAgICAmJiBleHByM19k ZXNjICE9IE5VTExfVFJFRQorICAgICAgJiYgR0ZDX0RFU0NSSVBUT1JfVFlQRV9QIChUUkVFX1RZ UEUgKGV4cHIzX2Rlc2MpKSkKKyAgICB0eXBlID0gVFJFRV9UWVBFIChleHByM19kZXNjKTsKKyAg ZWxzZQorICAgIHR5cGUgPSBUUkVFX1RZUEUgKGRlc2NyaXB0b3IpOwogCiAgIHN0cmlkZSA9IGdm Y19pbmRleF9vbmVfbm9kZTsKICAgb2Zmc2V0ID0gZ2ZjX2luZGV4X3plcm9fbm9kZTsKQEAgLTc0 NzgsNyArNzQ4Myw3IEBAIGdmY19jb252X2V4cHJfZGVzY3JpcHRvciAoZ2ZjX3NlICpzZSwgZ2Zj X2V4cHIgKmV4cHIpCiAKICAgaWYgKCFzZS0+ZGlyZWN0X2J5cmVmKQogICAgIHNlLT51bmxpbWl0 ZWRfcG9seW1vcnBoaWMgPSBVTkxJTUlURURfUE9MWSAoZXhwcik7Ci0gIAorCiAgIC8qIFNwZWNp YWwgY2FzZSB0aGluZ3Mgd2Uga25vdyB3ZSBjYW4gcGFzcyBlYXNpbHkuICAqLwogICBzd2l0Y2gg KGV4cHItPmV4cHJfdHlwZSkKICAgICB7CkBAIC04OTIyLDcgKzg5MjcsNyBAQCBzdGF0aWMgZ2Zj X2FjdHVhbF9hcmdsaXN0ICpwZHRfcGFyYW1fbGlzdDsKIHN0YXRpYyB0cmVlCiBzdHJ1Y3R1cmVf YWxsb2NfY29tcHMgKGdmY19zeW1ib2wgKiBkZXJfdHlwZSwgdHJlZSBkZWNsLAogCQkgICAgICAg dHJlZSBkZXN0LCBpbnQgcmFuaywgaW50IHB1cnBvc2UsIGludCBjYWZfbW9kZSwKLQkJICAgICAg IGdmY19jb19zdWJyb3V0aW5lc19hcmdzICphcmdzKQorCQkgICAgICAgZ2ZjX2NvX3N1YnJvdXRp bmVzX2FyZ3MgKmFyZ3MsIGJvb2wgbm9fZmluYWxpemF0aW9uKQogewogICBnZmNfY29tcG9uZW50 ICpjOwogICBnZmNfbG9vcGluZm8gbG9vcDsKQEAgLTkwMTAsMTEgKzkwMTUsMTIgQEAgc3RydWN0 dXJlX2FsbG9jX2NvbXBzIChnZmNfc3ltYm9sICogZGVyX3R5cGUsIHRyZWUgZGVjbCwKIAkJCQkJ ICAgICBnZmNfY29udl9hcnJheV9kYXRhIChkZXN0KSk7CiAJICBkcmVmID0gZ2ZjX2J1aWxkX2Fy cmF5X3JlZiAodG1wLCBpbmRleCwgTlVMTCk7CiAJICB0bXAgPSBzdHJ1Y3R1cmVfYWxsb2NfY29t cHMgKGRlcl90eXBlLCB2cmVmLCBkcmVmLCByYW5rLAotCQkJCSAgICAgICBDT1BZX0FMTE9DX0NP TVAsIGNhZl9tb2RlLCBhcmdzKTsKKwkJCQkgICAgICAgQ09QWV9BTExPQ19DT01QLCBjYWZfbW9k ZSwgYXJncywKKwkJCQkgICAgICAgbm9fZmluYWxpemF0aW9uKTsKIAl9CiAgICAgICBlbHNlCiAJ dG1wID0gc3RydWN0dXJlX2FsbG9jX2NvbXBzIChkZXJfdHlwZSwgdnJlZiwgTlVMTF9UUkVFLCBy YW5rLCBwdXJwb3NlLAotCQkJCSAgICAgY2FmX21vZGUsIGFyZ3MpOworCQkJCSAgICAgY2FmX21v ZGUsIGFyZ3MsIG5vX2ZpbmFsaXphdGlvbik7CiAKICAgICAgIGdmY19hZGRfZXhwcl90b19ibG9j ayAoJmxvb3Bib2R5LCB0bXApOwogCkBAIC05MDQ4LDEzICs5MDU0LDE1IEBAIHN0cnVjdHVyZV9h bGxvY19jb21wcyAoZ2ZjX3N5bWJvbCAqIGRlcl90eXBlLCB0cmVlIGRlY2wsCiAgIGlmIChwdXJw b3NlID09IERFQUxMT0NBVEVfQUxMT0NfQ09NUCAmJiBkZXJfdHlwZS0+YXR0ci5wZHRfdHlwZSkK ICAgICB7CiAgICAgICB0bXAgPSBzdHJ1Y3R1cmVfYWxsb2NfY29tcHMgKGRlcl90eXBlLCBkZWNs LCBOVUxMX1RSRUUsIHJhbmssCi0JCQkJICAgREVBTExPQ0FURV9QRFRfQ09NUCwgMCwgYXJncyk7 CisJCQkJICAgREVBTExPQ0FURV9QRFRfQ09NUCwgMCwgYXJncywKKwkJCQkgICBub19maW5hbGl6 YXRpb24pOwogICAgICAgZ2ZjX2FkZF9leHByX3RvX2Jsb2NrICgmZm5ibG9jaywgdG1wKTsKICAg ICB9CiAgIGVsc2UgaWYgKHB1cnBvc2UgPT0gQUxMT0NBVEVfUERUX0NPTVAgJiYgZGVyX3R5cGUt PmF0dHIuYWxsb2NfY29tcCkKICAgICB7CiAgICAgICB0bXAgPSBzdHJ1Y3R1cmVfYWxsb2NfY29t cHMgKGRlcl90eXBlLCBkZWNsLCBOVUxMX1RSRUUsIHJhbmssCi0JCQkJICAgTlVMTElGWV9BTExP Q19DT01QLCAwLCBhcmdzKTsKKwkJCQkgICBOVUxMSUZZX0FMTE9DX0NPTVAsIDAsIGFyZ3MsCisJ CQkJICAgbm9fZmluYWxpemF0aW9uKTsKICAgICAgIGdmY19hZGRfZXhwcl90b19ibG9jayAoJmZu YmxvY2ssIHRtcCk7CiAgICAgfQogCkBAIC05MTEyLDcgKzkxMjAsNyBAQCBzdHJ1Y3R1cmVfYWxs b2NfY29tcHMgKGdmY19zeW1ib2wgKiBkZXJfdHlwZSwgdHJlZSBkZWNsLAogCQkgIGFkZF93aGVu X2FsbG9jYXRlZAogCQkgICAgICA9IHN0cnVjdHVyZV9hbGxvY19jb21wcyAoQ0xBU1NfREFUQSAo YyktPnRzLnUuZGVyaXZlZCwKIAkJCQkJICAgICAgIGNvbXAsIE5VTExfVFJFRSwgcmFuaywgcHVy cG9zZSwKLQkJCQkJICAgICAgIGNhZl9tb2RlLCBhcmdzKTsKKwkJCQkJICAgICAgIGNhZl9tb2Rl LCBhcmdzLCBub19maW5hbGl6YXRpb24pOwogCQl9CiAJICAgICAgZWxzZQogCQl7CkBAIC05MTIw LDcgKzkxMjgsOCBAQCBzdHJ1Y3R1cmVfYWxsb2NfY29tcHMgKGdmY19zeW1ib2wgKiBkZXJfdHlw ZSwgdHJlZSBkZWNsLAogCQkgIGFkZF93aGVuX2FsbG9jYXRlZCA9IHN0cnVjdHVyZV9hbGxvY19j b21wcyAoYy0+dHMudS5kZXJpdmVkLAogCQkJCQkJCSAgICAgIGNvbXAsIE5VTExfVFJFRSwKIAkJ CQkJCQkgICAgICByYW5rLCBwdXJwb3NlLAotCQkJCQkJCSAgICAgIGNhZl9tb2RlLCBhcmdzKTsK KwkJCQkJCQkgICAgICBjYWZfbW9kZSwgYXJncywKKwkJCQkJCQkgICAgICBub19maW5hbGl6YXRp b24pOwogCQl9CiAJICAgIH0KIApAQCAtOTIxNiw4ICs5MjI1LDggQEAgc3RydWN0dXJlX2FsbG9j X2NvbXBzIChnZmNfc3ltYm9sICogZGVyX3R5cGUsIHRyZWUgZGVjbCwKIAkJY29udGludWU7CiAJ ICAgIH0KIAotCSAgaWYgKChjLT50cy50eXBlID09IEJUX0RFUklWRUQgJiYgIWMtPmF0dHIucG9p bnRlcikKLQkgICAgIHx8IChjLT50cy50eXBlID09IEJUX0NMQVNTICYmICFDTEFTU19EQVRBIChj KS0+YXR0ci5jbGFzc19wb2ludGVyKSkKKwkgIGlmICghbm9fZmluYWxpemF0aW9uICYmICgoYy0+ dHMudHlwZSA9PSBCVF9ERVJJVkVEICYmICFjLT5hdHRyLnBvaW50ZXIpCisJICAgICB8fCAoYy0+ dHMudHlwZSA9PSBCVF9DTEFTUyAmJiAhQ0xBU1NfREFUQSAoYyktPmF0dHIuY2xhc3NfcG9pbnRl cikpKQogCSAgICAvKiBDYWxsIHRoZSBmaW5hbGl6ZXIsIHdoaWNoIHdpbGwgZnJlZSB0aGUgbWVt b3J5IGFuZCBudWxsaWZ5IHRoZQogCSAgICAgICBwb2ludGVyIG9mIGFuIGFycmF5LiAgKi8KIAkg ICAgZGVhbGxvY2F0ZV9jYWxsZWQgPSBnZmNfYWRkX2NvbXBfZmluYWxpemVyX2NhbGwgKCZ0bXBi bG9jaywgY29tcCwgYywKQEAgLTkyNDUsNyArOTI1NCw3IEBAIHN0cnVjdHVyZV9hbGxvY19jb21w cyAoZ2ZjX3N5bWJvbCAqIGRlcl90eXBlLCB0cmVlIGRlY2wsCiAJCSAgYWRkX3doZW5fYWxsb2Nh dGVkCiAJCSAgICAgID0gc3RydWN0dXJlX2FsbG9jX2NvbXBzIChDTEFTU19EQVRBIChjKS0+dHMu dS5kZXJpdmVkLAogCQkJCQkgICAgICAgY29tcCwgTlVMTF9UUkVFLCByYW5rLCBwdXJwb3NlLAot CQkJCQkgICAgICAgY2FmX21vZGUsIGFyZ3MpOworCQkJCQkgICAgICAgY2FmX21vZGUsIGFyZ3Ms IG5vX2ZpbmFsaXphdGlvbik7CiAJCX0KIAkgICAgICBlbHNlCiAJCXsKQEAgLTkyNTMsNyArOTI2 Miw4IEBAIHN0cnVjdHVyZV9hbGxvY19jb21wcyAoZ2ZjX3N5bWJvbCAqIGRlcl90eXBlLCB0cmVl IGRlY2wsCiAJCSAgYWRkX3doZW5fYWxsb2NhdGVkID0gc3RydWN0dXJlX2FsbG9jX2NvbXBzIChj LT50cy51LmRlcml2ZWQsCiAJCQkJCQkJICAgICAgY29tcCwgTlVMTF9UUkVFLAogCQkJCQkJCSAg ICAgIHJhbmssIHB1cnBvc2UsCi0JCQkJCQkJICAgICAgY2FmX21vZGUsIGFyZ3MpOworCQkJCQkJ CSAgICAgIGNhZl9tb2RlLCBhcmdzLAorCQkJCQkJCSAgICAgIG5vX2ZpbmFsaXphdGlvbik7CiAJ CX0KIAkgICAgfQogCkBAIC05NTUxLDcgKzk1NjEsOCBAQCBzdHJ1Y3R1cmVfYWxsb2NfY29tcHMg KGdmY19zeW1ib2wgKiBkZXJfdHlwZSwgdHJlZSBkZWNsLAogCQkJCSAgICAgIGRlY2wsIGNkZWNs LCBOVUxMX1RSRUUpOwogCSAgICAgIHJhbmsgPSBjLT5hcyA/IGMtPmFzLT5yYW5rIDogMDsKIAkg ICAgICB0bXAgPSBzdHJ1Y3R1cmVfYWxsb2NfY29tcHMgKGMtPnRzLnUuZGVyaXZlZCwgY29tcCwg TlVMTF9UUkVFLAotCQkJCQkgICByYW5rLCBwdXJwb3NlLCBjYWZfbW9kZSwgYXJncyk7CisJCQkJ CSAgIHJhbmssIHB1cnBvc2UsIGNhZl9tb2RlLCBhcmdzLAorCQkJCQkgICBub19maW5hbGl6YXRp b24pOwogCSAgICAgIGdmY19hZGRfZXhwcl90b19ibG9jayAoJmZuYmxvY2ssIHRtcCk7CiAJICAg IH0KIAkgIGJyZWFrOwpAQCAtOTU4Nyw3ICs5NTk4LDcgQEAgc3RydWN0dXJlX2FsbG9jX2NvbXBz IChnZmNfc3ltYm9sICogZGVyX3R5cGUsIHRyZWUgZGVjbCwKIAkJICB0bXAgPSBzdHJ1Y3R1cmVf YWxsb2NfY29tcHMgKGMtPnRzLnUuZGVyaXZlZCwgY29tcCwgZGNtcCwKIAkJCQkJICAgICAgIHJh bmssIHB1cnBvc2UsIGNhZl9tb2RlCiAJCQkJCSAgICAgICB8IEdGQ19TVFJVQ1RVUkVfQ0FGX01P REVfSU5fQ09BUlJBWSwKLQkJCQkJICAgICAgIGFyZ3MpOworCQkJCQkgICAgICAgYXJncywgbm9f ZmluYWxpemF0aW9uKTsKIAkJICBnZmNfYWRkX2V4cHJfdG9fYmxvY2sgKCZmbmJsb2NrLCB0bXAp OwogCQl9CiAJICAgIH0KQEAgLTk2OTUsNyArOTcwNiw4IEBAIHN0cnVjdHVyZV9hbGxvY19jb21w cyAoZ2ZjX3N5bWJvbCAqIGRlcl90eXBlLCB0cmVlIGRlY2wsCiAJICAgICAgYWRkX3doZW5fYWxs b2NhdGVkID0gc3RydWN0dXJlX2FsbG9jX2NvbXBzIChjLT50cy51LmRlcml2ZWQsCiAJCQkJCQkJ ICBjb21wLCBkY21wLAogCQkJCQkJCSAgcmFuaywgcHVycG9zZSwKLQkJCQkJCQkgIGNhZl9tb2Rl LCBhcmdzKTsKKwkJCQkJCQkgIGNhZl9tb2RlLCBhcmdzLAorCQkJCQkJCSAgbm9fZmluYWxpemF0 aW9uKTsKIAkgICAgfQogCSAgZWxzZQogCSAgICBhZGRfd2hlbl9hbGxvY2F0ZWQgPSBOVUxMX1RS RUU7CkBAIC0xMDA2OCw3ICsxMDA4MCw4IEBAIGdmY19udWxsaWZ5X2FsbG9jX2NvbXAgKGdmY19z eW1ib2wgKiBkZXJfdHlwZSwgdHJlZSBkZWNsLCBpbnQgcmFuaywKIHsKICAgcmV0dXJuIHN0cnVj dHVyZV9hbGxvY19jb21wcyAoZGVyX3R5cGUsIGRlY2wsIE5VTExfVFJFRSwgcmFuaywKIAkJCQlO VUxMSUZZX0FMTE9DX0NPTVAsCi0JCQkJR0ZDX1NUUlVDVFVSRV9DQUZfTU9ERV9FTkFCTEVfQ09B UlJBWSB8IGNhZl9tb2RlLCBOVUxMKTsKKwkJCQlHRkNfU1RSVUNUVVJFX0NBRl9NT0RFX0VOQUJM RV9DT0FSUkFZIHwgY2FmX21vZGUsCisJCQkJTlVMTCwgZmFsc2UpOwogfQogCiAKQEAgLTEwMDgx LDcgKzEwMDk0LDggQEAgZ2ZjX2RlYWxsb2NhdGVfYWxsb2NfY29tcCAoZ2ZjX3N5bWJvbCAqIGRl cl90eXBlLCB0cmVlIGRlY2wsIGludCByYW5rLAogewogICByZXR1cm4gc3RydWN0dXJlX2FsbG9j X2NvbXBzIChkZXJfdHlwZSwgZGVjbCwgTlVMTF9UUkVFLCByYW5rLAogCQkJCURFQUxMT0NBVEVf QUxMT0NfQ09NUCwKLQkJCQlHRkNfU1RSVUNUVVJFX0NBRl9NT0RFX0VOQUJMRV9DT0FSUkFZIHwg Y2FmX21vZGUsIE5VTEwpOworCQkJCUdGQ19TVFJVQ1RVUkVfQ0FGX01PREVfRU5BQkxFX0NPQVJS QVkgfCBjYWZfbW9kZSwKKwkJCQlOVUxMLCBmYWxzZSk7CiB9CiAKIHRyZWUKQEAgLTEwMTE5LDcg KzEwMTMzLDggQEAgZ2ZjX2JjYXN0X2FsbG9jX2NvbXAgKGdmY19zeW1ib2wgKmRlcml2ZWQsIGdm Y19leHByICpleHByLCBpbnQgcmFuaywKIAogICB0bXAgPSBzdHJ1Y3R1cmVfYWxsb2NfY29tcHMg KGRlcml2ZWQsIGFycmF5LCBOVUxMX1RSRUUsIHJhbmssCiAJCQkgICAgICAgQkNBU1RfQUxMT0Nf Q09NUCwKLSAgCQkJICAgICAgIEdGQ19TVFJVQ1RVUkVfQ0FGX01PREVfRU5BQkxFX0NPQVJSQVks ICZhcmdzKTsKKwkJCSAgICAgICBHRkNfU1RSVUNUVVJFX0NBRl9NT0RFX0VOQUJMRV9DT0FSUkFZ LAorCQkJICAgICAgICZhcmdzLCBmYWxzZSk7CiAgIHJldHVybiB0bXA7CiB9CiAKQEAgLTEwMTI5 LDEwICsxMDE0NCwxMiBAQCBnZmNfYmNhc3RfYWxsb2NfY29tcCAoZ2ZjX3N5bWJvbCAqZGVyaXZl ZCwgZ2ZjX2V4cHIgKmV4cHIsIGludCByYW5rLAogICAgc3RhdHVzIG9mIGNvYXJyYXlzLiAgKi8K IAogdHJlZQotZ2ZjX2RlYWxsb2NhdGVfYWxsb2NfY29tcF9ub19jYWYgKGdmY19zeW1ib2wgKiBk ZXJfdHlwZSwgdHJlZSBkZWNsLCBpbnQgcmFuaykKK2dmY19kZWFsbG9jYXRlX2FsbG9jX2NvbXBf bm9fY2FmIChnZmNfc3ltYm9sICogZGVyX3R5cGUsIHRyZWUgZGVjbCwgaW50IHJhbmssCisJCQkJ ICBib29sIG5vX2ZpbmFsaXphdGlvbikKIHsKICAgcmV0dXJuIHN0cnVjdHVyZV9hbGxvY19jb21w cyAoZGVyX3R5cGUsIGRlY2wsIE5VTExfVFJFRSwgcmFuaywKLQkJCQlERUFMTE9DQVRFX0FMTE9D X0NPTVAsIDAsIE5VTEwpOworCQkJCURFQUxMT0NBVEVfQUxMT0NfQ09NUCwgMCwgTlVMTCwKKwkJ CQlub19maW5hbGl6YXRpb24pOwogfQogCiAKQEAgLTEwMTQwLDcgKzEwMTU3LDggQEAgdHJlZQog Z2ZjX3JlYXNzaWduX2FsbG9jX2NvbXBfY2FmIChnZmNfc3ltYm9sICpkZXJfdHlwZSwgdHJlZSBk ZWNsLCB0cmVlIGRlc3QpCiB7CiAgIHJldHVybiBzdHJ1Y3R1cmVfYWxsb2NfY29tcHMgKGRlcl90 eXBlLCBkZWNsLCBkZXN0LCAwLCBSRUFTU0lHTl9DQUZfQ09NUCwKLQkJCQlHRkNfU1RSVUNUVVJF X0NBRl9NT0RFX0VOQUJMRV9DT0FSUkFZLCBOVUxMKTsKKwkJCQlHRkNfU1RSVUNUVVJFX0NBRl9N T0RFX0VOQUJMRV9DT0FSUkFZLAorCQkJCU5VTEwsIGZhbHNlKTsKIH0KIAogCkBAIC0xMDE1Miw3 ICsxMDE3MCw3IEBAIGdmY19jb3B5X2FsbG9jX2NvbXAgKGdmY19zeW1ib2wgKiBkZXJfdHlwZSwg dHJlZSBkZWNsLCB0cmVlIGRlc3QsIGludCByYW5rLAogCQkgICAgIGludCBjYWZfbW9kZSkKIHsK ICAgcmV0dXJuIHN0cnVjdHVyZV9hbGxvY19jb21wcyAoZGVyX3R5cGUsIGRlY2wsIGRlc3QsIHJh bmssIENPUFlfQUxMT0NfQ09NUCwKLQkJCQljYWZfbW9kZSwgTlVMTCk7CisJCQkJY2FmX21vZGUs IE5VTEwsIGZhbHNlKTsKIH0KIAogCkBAIC0xMDE2Myw3ICsxMDE4MSw3IEBAIHRyZWUKIGdmY19j b3B5X29ubHlfYWxsb2NfY29tcCAoZ2ZjX3N5bWJvbCAqIGRlcl90eXBlLCB0cmVlIGRlY2wsIHRy ZWUgZGVzdCwgaW50IHJhbmspCiB7CiAgIHJldHVybiBzdHJ1Y3R1cmVfYWxsb2NfY29tcHMgKGRl cl90eXBlLCBkZWNsLCBkZXN0LCByYW5rLAotCQkJCUNPUFlfT05MWV9BTExPQ19DT01QLCAwLCBO VUxMKTsKKwkJCQlDT1BZX09OTFlfQUxMT0NfQ09NUCwgMCwgTlVMTCwgZmFsc2UpOwogfQogCiAK QEAgLTEwMTc4LDcgKzEwMTk2LDcgQEAgZ2ZjX2FsbG9jYXRlX3BkdF9jb21wIChnZmNfc3ltYm9s ICogZGVyX3R5cGUsIHRyZWUgZGVjbCwgaW50IHJhbmssCiAgIGdmY19hY3R1YWxfYXJnbGlzdCAq b2xkX3BhcmFtX2xpc3QgPSBwZHRfcGFyYW1fbGlzdDsKICAgcGR0X3BhcmFtX2xpc3QgPSBwYXJh bV9saXN0OwogICByZXMgPSBzdHJ1Y3R1cmVfYWxsb2NfY29tcHMgKGRlcl90eXBlLCBkZWNsLCBO VUxMX1RSRUUsIHJhbmssCi0JCQkgICAgICAgQUxMT0NBVEVfUERUX0NPTVAsIDAsIE5VTEwpOwor CQkJICAgICAgIEFMTE9DQVRFX1BEVF9DT01QLCAwLCBOVUxMLCBmYWxzZSk7CiAgIHBkdF9wYXJh bV9saXN0ID0gb2xkX3BhcmFtX2xpc3Q7CiAgIHJldHVybiByZXM7CiB9CkBAIC0xMDE5MCw3ICsx MDIwOCw3IEBAIHRyZWUKIGdmY19kZWFsbG9jYXRlX3BkdF9jb21wIChnZmNfc3ltYm9sICogZGVy X3R5cGUsIHRyZWUgZGVjbCwgaW50IHJhbmspCiB7CiAgIHJldHVybiBzdHJ1Y3R1cmVfYWxsb2Nf Y29tcHMgKGRlcl90eXBlLCBkZWNsLCBOVUxMX1RSRUUsIHJhbmssCi0JCQkJREVBTExPQ0FURV9Q RFRfQ09NUCwgMCwgTlVMTCk7CisJCQkJREVBTExPQ0FURV9QRFRfQ09NUCwgMCwgTlVMTCwgZmFs c2UpOwogfQogCiAKQEAgLTEwMjA1LDcgKzEwMjIzLDcgQEAgZ2ZjX2NoZWNrX3BkdF9kdW1teSAo Z2ZjX3N5bWJvbCAqIGRlcl90eXBlLCB0cmVlIGRlY2wsIGludCByYW5rLAogICBnZmNfYWN0dWFs X2FyZ2xpc3QgKm9sZF9wYXJhbV9saXN0ID0gcGR0X3BhcmFtX2xpc3Q7CiAgIHBkdF9wYXJhbV9s aXN0ID0gcGFyYW1fbGlzdDsKICAgcmVzID0gc3RydWN0dXJlX2FsbG9jX2NvbXBzIChkZXJfdHlw ZSwgZGVjbCwgTlVMTF9UUkVFLCByYW5rLAotCQkJICAgICAgIENIRUNLX1BEVF9EVU1NWSwgMCwg TlVMTCk7CisJCQkgICAgICAgQ0hFQ0tfUERUX0RVTU1ZLCAwLCBOVUxMLCBmYWxzZSk7CiAgIHBk dF9wYXJhbV9saXN0ID0gb2xkX3BhcmFtX2xpc3Q7CiAgIHJldHVybiByZXM7CiB9CkBAIC0xMDky Niw3ICsxMDk0NCw3IEBAIGdmY19hbGxvY19hbGxvY2F0YWJsZV9mb3JfYXNzaWdubWVudCAoZ2Zj X2xvb3BpbmZvICpsb29wLAogCSYmIGV4cHIxLT50cy51LmRlcml2ZWQtPmF0dHIuYWxsb2NfY29t cCkKICAgICB7CiAgICAgICB0bXAgPSBnZmNfZGVhbGxvY2F0ZV9hbGxvY19jb21wX25vX2NhZiAo ZXhwcjEtPnRzLnUuZGVyaXZlZCwgb2xkX2Rlc2MsCi0JCQkJCSAgICAgIGV4cHIxLT5yYW5rKTsK KwkJCQkJICAgICAgZXhwcjEtPnJhbmssIHRydWUpOwogICAgICAgZ2ZjX2FkZF9leHByX3RvX2Js b2NrICgmcmVhbGxvY19ibG9jaywgdG1wKTsKICAgICB9CiAKZGlmZiAtLWdpdCBhL2djYy9mb3J0 cmFuL3RyYW5zLWFycmF5LmggYi9nY2MvZm9ydHJhbi90cmFucy1hcnJheS5oCmluZGV4IDA0ZmVl NjE3NTkwLi4zYWFlNGQyYzRlYiAxMDA2NDQKLS0tIGEvZ2NjL2ZvcnRyYW4vdHJhbnMtYXJyYXku aAorKysgYi9nY2MvZm9ydHJhbi90cmFucy1hcnJheS5oCkBAIC01Niw3ICs1Niw4IEBAIHRyZWUg Z2ZjX251bGxpZnlfYWxsb2NfY29tcCAoZ2ZjX3N5bWJvbCAqLCB0cmVlLCBpbnQsIGludCBjbSA9 IDApOwogdHJlZSBnZmNfZGVhbGxvY2F0ZV9hbGxvY19jb21wIChnZmNfc3ltYm9sICosIHRyZWUs IGludCwgaW50IGNtID0gMCk7CiB0cmVlIGdmY19iY2FzdF9hbGxvY19jb21wIChnZmNfc3ltYm9s ICosIGdmY19leHByICosIGludCwgdHJlZSwKIAkJCSAgIHRyZWUsIHRyZWUsIHRyZWUpOwotdHJl ZSBnZmNfZGVhbGxvY2F0ZV9hbGxvY19jb21wX25vX2NhZiAoZ2ZjX3N5bWJvbCAqLCB0cmVlLCBp bnQpOwordHJlZSBnZmNfZGVhbGxvY2F0ZV9hbGxvY19jb21wX25vX2NhZiAoZ2ZjX3N5bWJvbCAq LCB0cmVlLCBpbnQsCisJCQkJICAgICAgIGJvb2wgbm9fZmluYWxpemF0aW9uID0gZmFsc2UpOwog dHJlZSBnZmNfcmVhc3NpZ25fYWxsb2NfY29tcF9jYWYgKGdmY19zeW1ib2wgKiwgdHJlZSwgdHJl ZSk7CiAKIHRyZWUgZ2ZjX2NvcHlfYWxsb2NfY29tcCAoZ2ZjX3N5bWJvbCAqLCB0cmVlLCB0cmVl LCBpbnQsIGludCk7CmRpZmYgLS1naXQgYS9nY2MvZm9ydHJhbi90cmFucy1leHByLmNjIGIvZ2Nj L2ZvcnRyYW4vdHJhbnMtZXhwci5jYwppbmRleCBlYjZhNzhjM2E2Mi4uNmZmZTMxN2FmYmYgMTAw NjQ0Ci0tLSBhL2djYy9mb3J0cmFuL3RyYW5zLWV4cHIuY2MKKysrIGIvZ2NjL2ZvcnRyYW4vdHJh bnMtZXhwci5jYwpAQCAtMTkwNCw2ICsxOTA0LDcgQEAgZ2ZjX2luaXRfc2UgKGdmY19zZSAqIHNl LCBnZmNfc2UgKiBwYXJlbnQpCiB7CiAgIG1lbXNldCAoc2UsIDAsIHNpemVvZiAoZ2ZjX3NlKSk7 CiAgIGdmY19pbml0X2Jsb2NrICgmc2UtPnByZSk7CisgIGdmY19pbml0X2Jsb2NrICgmc2UtPmZp bmFsYmxvY2spOwogICBnZmNfaW5pdF9ibG9jayAoJnNlLT5wb3N0KTsKIAogICBzZS0+cGFyZW50 ID0gcGFyZW50OwpAQCAtNTk3NSw2ICs1OTc2LDExNiBAQCBwb3N0X2NhbGw6CiB9CiAKIAorLyog RmluYWxpemUgYSBmdW5jdGlvbiByZXN1bHQgdXNpbmcgdGhlIGZpbmFsaXplciB3cmFwcGVyLiBU aGUgcmVzdWx0IGlzIGZpeGVkCisgICBpbiBvcmRlciB0byBwcmV2ZW50IHJlcGVhdGVkIGNhbGxz LiAgKi8KKworc3RhdGljIHZvaWQKK2ZpbmFsaXplX2Z1bmN0aW9uX3Jlc3VsdCAoZ2ZjX3NlICpz ZSwgZ2ZjX3N5bWJvbCAqZGVyaXZlZCwKKwkJCSAgc3ltYm9sX2F0dHJpYnV0ZSBhdHRyKQorewor ICB0cmVlIHZwdHIsIGZpbmFsX2ZuZGVjbCwgZGVzYywgdG1wLCBzaXplLCBpc19maW5hbCwgZGF0 YV9wdHI7CisgIGdmY19zeW1ib2wgKnZ0YWI7CisgIGdmY19zZSBwb3N0X3NlOworICBib29sIGlz X2NsYXNzID0gR0ZDX0NMQVNTX1RZUEVfUCAoVFJFRV9UWVBFIChzZS0+ZXhwcikpOworCisgIGlm IChhdHRyLnBvaW50ZXIpCisgICAgcmV0dXJuOworCisgIGlmIChpc19jbGFzcykKKyAgICB7Cisg ICAgICBpZiAoIVZBUl9QIChzZS0+ZXhwcikpCisJeworCSAgZGVzYyA9IGdmY19ldmFsdWF0ZV9u b3cgKHNlLT5leHByLCAmc2UtPnByZSk7CisJICBzZS0+ZXhwciA9IGRlc2M7CisJfQorICAgICAg ZGVzYyA9IGdmY19jbGFzc19kYXRhX2dldCAoc2UtPmV4cHIpOworICAgICAgdnB0ciA9IGdmY19j bGFzc192cHRyX2dldCAoc2UtPmV4cHIpOworICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAgIGRl c2MgPSBnZmNfZXZhbHVhdGVfbm93IChzZS0+ZXhwciwgJnNlLT5wcmUpOworICAgICAgc2UtPmV4 cHIgPSBnZmNfZXZhbHVhdGVfbm93IChkZXNjLCAmc2UtPnByZSk7CisgICAgICBnZmNfYWRkX2V4 cHJfdG9fYmxvY2sgKCZzZS0+cHJlLAorCQkJICAgICBnZmNfY29weV9hbGxvY19jb21wIChkZXJp dmVkLCBzZS0+ZXhwciwKKwkJCSAgICAgZGVzYywgMCwgMCkpOworICAgICAgdnRhYiA9IGdmY19m aW5kX2Rlcml2ZWRfdnRhYiAoZGVyaXZlZCk7CisgICAgICBpZiAodnRhYi0+YmFja2VuZF9kZWNs ID09IE5VTExfVFJFRSkKKwl2cHRyID0gZ2ZjX2dldF9zeW1ib2xfZGVjbCAodnRhYik7CisgICAg ICBlbHNlCisJdnB0ciA9IHZ0YWItPmJhY2tlbmRfZGVjbDsKKyAgICAgIHZwdHIgPSBnZmNfYnVp bGRfYWRkcl9leHByIChOVUxMLCB2cHRyKTsKKyAgICB9CisKKyAgc2l6ZSA9IGdmY192cHRyX3Np emVfZ2V0ICh2cHRyKTsKKyAgZmluYWxfZm5kZWNsID0gZ2ZjX3ZwdHJfZmluYWxfZ2V0ICh2cHRy KTsKKyAgaXNfZmluYWwgPSBmb2xkX2J1aWxkMl9sb2MgKGlucHV0X2xvY2F0aW9uLCBORV9FWFBS LAorCQkJICAgICAgbG9naWNhbF90eXBlX25vZGUsCisJCQkgICAgICBmaW5hbF9mbmRlY2wsCisJ CQkgICAgICBmb2xkX2NvbnZlcnQgKFRSRUVfVFlQRSAoZmluYWxfZm5kZWNsKSwKKwkJCQkJICAg IG51bGxfcG9pbnRlcl9ub2RlKSk7CisKKyAgZmluYWxfZm5kZWNsID0gYnVpbGRfZm9sZF9pbmRp cmVjdF9yZWZfbG9jIChpbnB1dF9sb2NhdGlvbiwKKwkJCQkJICAgICAgZmluYWxfZm5kZWNsKTsK KyAgaWYgKCFHRkNfREVTQ1JJUFRPUl9UWVBFX1AgKFRSRUVfVFlQRSAoZGVzYykpKQorICAgIHsK KyAgICAgIGlmIChpc19jbGFzcykKKwlkZXNjID0gZ2ZjX2NvbnZfc2NhbGFyX3RvX2Rlc2NyaXB0 b3IgKHNlLCBkZXNjLCBhdHRyKTsKKyAgICAgIGVsc2UKKwl7CisJICBnZmNfaW5pdF9zZSAoJnBv c3Rfc2UsIE5VTEwpOworCSAgZGVzYyA9IGdmY19jb252X3NjYWxhcl90b19kZXNjcmlwdG9yICgm cG9zdF9zZSwgZGVzYywgYXR0cik7CisJICBnZmNfYWRkX2V4cHJfdG9fYmxvY2sgKCZzZS0+cHJl LCBnZmNfZmluaXNoX2Jsb2NrICgmcG9zdF9zZS5wcmUpKTsKKwl9CisgICAgfQorCisgIHRtcCA9 IGdmY19jcmVhdGVfdmFyIChUUkVFX1RZUEUgKGRlc2MpLCAicmVzIik7CisgIGdmY19hZGRfbW9k aWZ5ICgmc2UtPnByZSwgdG1wLCBkZXNjKTsKKyAgZGVzYyA9IHRtcDsKKworICB0bXAgPSBidWls ZF9jYWxsX2V4cHJfbG9jIChpbnB1dF9sb2NhdGlvbiwgZmluYWxfZm5kZWNsLCAzLAorCQkJICAg ICBnZmNfYnVpbGRfYWRkcl9leHByIChOVUxMLCBkZXNjKSwKKwkJCSAgICAgc2l6ZSwgYm9vbGVh bl9mYWxzZV9ub2RlKTsKKworICB0bXAgPSBmb2xkX2J1aWxkM19sb2MgKGlucHV0X2xvY2F0aW9u LCBDT05EX0VYUFIsCisJCQkgdm9pZF90eXBlX25vZGUsIGlzX2ZpbmFsLCB0bXAsCisJCQkgYnVp bGRfZW1wdHlfc3RtdCAoaW5wdXRfbG9jYXRpb24pKTsKKworICBpZiAoaXNfY2xhc3MgJiYgc2Ut PnNzICYmIHNlLT5zcy0+bG9vcCkKKyAgICB7CisgICAgICBkYXRhX3B0ciA9IGdmY19jb252X2Rl c2NyaXB0b3JfZGF0YV9nZXQgKGRlc2MpOworCisgICAgICBnZmNfYWRkX2V4cHJfdG9fYmxvY2sg KCZzZS0+bG9vcC0+cG9zdCwgdG1wKTsKKyAgICAgIHRtcCA9IGZvbGRfYnVpbGQyX2xvYyAoaW5w dXRfbG9jYXRpb24sIE5FX0VYUFIsCisJCQkgICAgIGxvZ2ljYWxfdHlwZV9ub2RlLAorCQkJICAg ICBkYXRhX3B0ciwKKwkJCSAgICAgZm9sZF9jb252ZXJ0IChUUkVFX1RZUEUgKGRhdGFfcHRyKSwK KwkJCQkJICAgbnVsbF9wb2ludGVyX25vZGUpKTsKKyAgICAgIHRtcCA9IGZvbGRfYnVpbGQzX2xv YyAoaW5wdXRfbG9jYXRpb24sIENPTkRfRVhQUiwKKwkJCSAgICAgdm9pZF90eXBlX25vZGUsIHRt cCwKKwkJCSAgICAgZ2ZjX2NhbGxfZnJlZSAoZGF0YV9wdHIpLAorCQkJICAgICBidWlsZF9lbXB0 eV9zdG10IChpbnB1dF9sb2NhdGlvbikpOworICAgICAgZ2ZjX2FkZF9leHByX3RvX2Jsb2NrICgm c2UtPmxvb3AtPnBvc3QsIHRtcCk7CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgZ2ZjX2Fk ZF9leHByX3RvX2Jsb2NrICgmc2UtPmZpbmFsYmxvY2ssIHRtcCk7CisgICAgICBpZiAoaXNfY2xh c3MpCisJeworCSAgZGF0YV9wdHIgPSBnZmNfY29udl9kZXNjcmlwdG9yX2RhdGFfZ2V0IChkZXNj KTsKKwkgIHRtcCA9IGZvbGRfYnVpbGQyX2xvYyAoaW5wdXRfbG9jYXRpb24sIE5FX0VYUFIsCisJ CQkJIGxvZ2ljYWxfdHlwZV9ub2RlLAorCQkJCSBkYXRhX3B0ciwKKwkJCQkgZm9sZF9jb252ZXJ0 IChUUkVFX1RZUEUgKGRhdGFfcHRyKSwKKwkJCQkJICAgICAgIG51bGxfcG9pbnRlcl9ub2RlKSk7 CisJICB0bXAgPSBmb2xkX2J1aWxkM19sb2MgKGlucHV0X2xvY2F0aW9uLCBDT05EX0VYUFIsCisJ CQkJIHZvaWRfdHlwZV9ub2RlLCB0bXAsCisJCQkJIGdmY19jYWxsX2ZyZWUgKGRhdGFfcHRyKSwK KwkJCQkgYnVpbGRfZW1wdHlfc3RtdCAoaW5wdXRfbG9jYXRpb24pKTsKKwkgIGdmY19hZGRfZXhw cl90b19ibG9jayAoJnNlLT5maW5hbGJsb2NrLCB0bXApOworCX0KKyAgICB9Cit9CisKIC8qIEdl bmVyYXRlIGNvZGUgZm9yIGEgcHJvY2VkdXJlIGNhbGwuICBOb3RlIGNhbiByZXR1cm4gc2UtPnBv c3QgIT0gTlVMTC4KICAgIElmIHNlLT5kaXJlY3RfYnlyZWYgaXMgc2V0IHRoZW4gc2UtPmV4cHIg Y29udGFpbnMgdGhlIHJldHVybiBwYXJhbWV0ZXIuCiAgICBSZXR1cm4gbm9uemVybywgaWYgdGhl IGNhbGwgaGFzIGFsdGVybmF0ZSBzcGVjaWZpZXJzLgpAQCAtNzAxMSw2ICs3MTIyLDcgQEAgZ2Zj X2NvbnZfcHJvY2VkdXJlX2NhbGwgKGdmY19zZSAqIHNlLCBnZmNfc3ltYm9sICogc3ltLAogCiAg ICAgICBnZmNfYWRkX2Jsb2NrX3RvX2Jsb2NrICgmc2UtPnByZSwgJnBhcm1zZS5wcmUpOwogICAg ICAgZ2ZjX2FkZF9ibG9ja190b19ibG9jayAoJnBvc3QsICZwYXJtc2UucG9zdCk7CisgICAgICBn ZmNfYWRkX2Jsb2NrX3RvX2Jsb2NrICgmc2UtPmZpbmFsYmxvY2ssICZwYXJtc2UuZmluYWxibG9j ayk7CiAKICAgICAgIC8qIEFsbG9jYXRlZCBhbGxvY2F0YWJsZSBjb21wb25lbnRzIG9mIGRlcml2 ZWQgdHlwZXMgbXVzdCBiZQogCSBkZWFsbG9jYXRlZCBmb3Igbm9uLXZhcmlhYmxlIHNjYWxhcnMs IGFycmF5IGFyZ3VtZW50cyB0byBlbGVtZW50YWwKQEAgLTc2NzUsOSArNzc4NywxNyBAQCBnZmNf Y29udl9wcm9jZWR1cmVfY2FsbCAoZ2ZjX3NlICogc2UsIGdmY19zeW1ib2wgKiBzeW0sCiAgIC8q IEFsbG9jYXRhYmxlIHNjYWxhciBmdW5jdGlvbiByZXN1bHRzIG11c3QgYmUgZnJlZWQgYW5kIG51 bGxpZmllZAogICAgICBhZnRlciB1c2UuIFRoaXMgbmVjZXNzaXRhdGVzIHRoZSBjcmVhdGlvbiBv ZiBhIHRlbXBvcmFyeSB0bwogICAgICBob2xkIHRoZSByZXN1bHQgdG8gcHJldmVudCBkdXBsaWNh dGUgY2FsbHMuICAqLworICBzeW1ib2xfYXR0cmlidXRlIGF0dHIgPSAgY29tcCA/IGNvbXAtPmF0 dHIgOiBzeW0tPmF0dHI7CisgIGJvb2wgYWxsb2NhdGFibGUgPSBhdHRyLmFsbG9jYXRhYmxlICYm ICFhdHRyLmRpbWVuc2lvbjsKKyAgZ2ZjX3N5bWJvbCAqZGVyID0gY29tcCAmJiBjb21wLT50cy50 eXBlID09IEJUX0RFUklWRUQgPyBjb21wLT50cy51LmRlcml2ZWQKKwkJICAgIDogKHN5bS0+dHMu dHlwZSA9PSBCVF9ERVJJVkVEID8gc3ltLT50cy51LmRlcml2ZWQgOiBOVUxMKTsKKyAgYm9vbCBm aW5hbGl6YWJsZSA9IGRlciAhPSBOVUxMICYmIGdmY19pc19maW5hbGl6YWJsZSAoZGVyLCBOVUxM KTsKKworICBpZiAoIWJ5cmVmICYmIGZpbmFsaXphYmxlKQorICAgIGZpbmFsaXplX2Z1bmN0aW9u X3Jlc3VsdCAoc2UsIGRlciwgYXR0cik7CisKICAgaWYgKCFieXJlZiAmJiBzeW0tPnRzLnR5cGUg IT0gQlRfQ0hBUkFDVEVSCi0gICAgICAmJiAoKHN5bS0+YXR0ci5hbGxvY2F0YWJsZSAmJiAhc3lt LT5hdHRyLmRpbWVuc2lvbiAmJiAhY29tcCkKLQkgIHx8IChjb21wICYmIGNvbXAtPmF0dHIuYWxs b2NhdGFibGUgJiYgIWNvbXAtPmF0dHIuZGltZW5zaW9uKSkpCisgICAgICAmJiBhbGxvY2F0YWJs ZSAmJiAhZmluYWxpemFibGUpCiAgICAgewogICAgICAgdG1wID0gZ2ZjX2NyZWF0ZV92YXIgKFRS RUVfVFlQRSAoc2UtPmV4cHIpLCBOVUxMKTsKICAgICAgIGdmY19hZGRfbW9kaWZ5ICgmc2UtPnBy ZSwgdG1wLCBzZS0+ZXhwcik7CkBAIC03NzM3LDYgKzc4NTcsOSBAQCBnZmNfY29udl9wcm9jZWR1 cmVfY2FsbCAoZ2ZjX3NlICogc2UsIGdmY19zeW1ib2wgKiBzeW0sCiAJICAgICAgc2UtPmV4cHIg PSBpbmZvLT5kZXNjcmlwdG9yOwogCSAgICAgIC8qIEJ1bmRsZSBpbiB0aGUgc3RyaW5nIGxlbmd0 aC4gICovCiAJICAgICAgc2UtPnN0cmluZ19sZW5ndGggPSBsZW47CisKKwkgICAgICBpZiAoZmlu YWxpemFibGUpCisJCWZpbmFsaXplX2Z1bmN0aW9uX3Jlc3VsdCAoc2UsIGRlciwgYXR0cik7CiAJ ICAgIH0KIAkgIGVsc2UgaWYgKHRzLnR5cGUgPT0gQlRfQ0hBUkFDVEVSKQogCSAgICB7CkBAIC03 ODI5LDggKzc5NTIsNiBAQCBnZmNfY29udl9wcm9jZWR1cmVfY2FsbCAoZ2ZjX3NlICogc2UsIGdm Y19zeW1ib2wgKiBzeW0sCiAJICAmJiBzZS0+ZXhwciAmJiBHRkNfQ0xBU1NfVFlQRV9QIChUUkVF X1RZUEUgKHNlLT5leHByKSkKIAkgICYmIGV4cHItPm11c3RfZmluYWxpemUpCiAJewotCSAgdHJl ZSBmaW5hbF9mbmRlY2w7Ci0JICB0cmVlIGlzX2ZpbmFsOwogCSAgaW50IG47CiAJICBpZiAoc2Ut PnNzICYmIHNlLT5zcy0+bG9vcCkKIAkgICAgewpAQCAtNzg1Miw2NiArNzk3MywxNSBAQCBnZmNf Y29udl9wcm9jZWR1cmVfY2FsbCAoZ2ZjX3NlICogc2UsIGdmY19zeW1ib2wgKiBzeW0sCiAJICAg ICAgLyogVE9ETyBFbGltaW5hdGUgdGhlIGRvdWJsaW5nIG9mIHRlbXBvcmFyaWVzLiBUaGlzCiAJ CSBvbmUgaXMgbmVjZXNzYXJ5IHRvIGVuc3VyZSBubyBtZW1vcnkgbGVha2FnZS4gICovCiAJICAg ICAgc2UtPmV4cHIgPSBnZmNfZXZhbHVhdGVfbm93IChzZS0+ZXhwciwgJnNlLT5wcmUpOwotCSAg ICAgIHRtcCA9IGdmY19jbGFzc19kYXRhX2dldCAoc2UtPmV4cHIpOwotCSAgICAgIHRtcCA9IGdm Y19jb252X3NjYWxhcl90b19kZXNjcmlwdG9yIChzZSwgdG1wLAotCQkJQ0xBU1NfREFUQSAoZXhw ci0+dmFsdWUuZnVuY3Rpb24uZXN5bS0+cmVzdWx0KS0+YXR0cik7CiAJICAgIH0KIAotCSAgaWYg KChnZmNfaXNfY2xhc3NfYXJyYXlfZnVuY3Rpb24gKGV4cHIpCi0JICAgICAgIHx8IGdmY19pc19h bGxvY19jbGFzc19zY2FsYXJfZnVuY3Rpb24gKGV4cHIpKQotCSAgICAgICYmIENMQVNTX0RBVEEg KGV4cHItPnZhbHVlLmZ1bmN0aW9uLmVzeW0tPnJlc3VsdCktPmF0dHIucG9pbnRlcikKLQkgICAg Z290byBub19maW5hbGl6YXRpb247Ci0KLQkgIGZpbmFsX2ZuZGVjbCA9IGdmY19jbGFzc192dGFi X2ZpbmFsX2dldCAoc2UtPmV4cHIpOwotCSAgaXNfZmluYWwgPSBmb2xkX2J1aWxkMl9sb2MgKGlu cHV0X2xvY2F0aW9uLCBORV9FWFBSLAotCQkJCSAgICAgIGxvZ2ljYWxfdHlwZV9ub2RlLAotCQkJ CSAgICAgIGZpbmFsX2ZuZGVjbCwKLQkJCQkgICAgICBmb2xkX2NvbnZlcnQgKFRSRUVfVFlQRSAo ZmluYWxfZm5kZWNsKSwKLQkJCQkJICAgCSAgICBudWxsX3BvaW50ZXJfbm9kZSkpOwotCSAgZmlu YWxfZm5kZWNsID0gYnVpbGRfZm9sZF9pbmRpcmVjdF9yZWZfbG9jIChpbnB1dF9sb2NhdGlvbiwK LQkJCQkJCSAgICAgIGZpbmFsX2ZuZGVjbCk7Ci0gCSAgdG1wID0gYnVpbGRfY2FsbF9leHByX2xv YyAoaW5wdXRfbG9jYXRpb24sCi0JCQkJICAgICBmaW5hbF9mbmRlY2wsIDMsCi0JCQkJICAgICBn ZmNfYnVpbGRfYWRkcl9leHByIChOVUxMLCB0bXApLAotCQkJCSAgICAgZ2ZjX2NsYXNzX3Z0YWJf c2l6ZV9nZXQgKHNlLT5leHByKSwKLQkJCQkgICAgIGJvb2xlYW5fZmFsc2Vfbm9kZSk7Ci0JICB0 bXAgPSBmb2xkX2J1aWxkM19sb2MgKGlucHV0X2xvY2F0aW9uLCBDT05EX0VYUFIsCi0JCQkJIHZv aWRfdHlwZV9ub2RlLCBpc19maW5hbCwgdG1wLAotCQkJCSBidWlsZF9lbXB0eV9zdG10IChpbnB1 dF9sb2NhdGlvbikpOwotCi0JICBpZiAoc2UtPnNzICYmIHNlLT5zcy0+bG9vcCkKLQkgICAgewot CSAgICAgIGdmY19wcmVwZW5kX2V4cHJfdG9fYmxvY2sgKCZzZS0+c3MtPmxvb3AtPnBvc3QsIHRt cCk7Ci0JICAgICAgdG1wID0gZm9sZF9idWlsZDJfbG9jIChpbnB1dF9sb2NhdGlvbiwgTkVfRVhQ UiwKLQkJCQkgICAgIGxvZ2ljYWxfdHlwZV9ub2RlLAotCQkJCSAgICAgaW5mby0+ZGF0YSwKLQkJ CQkgICAgIGZvbGRfY29udmVydCAoVFJFRV9UWVBFIChpbmZvLT5kYXRhKSwKLQkJCQkJICAgCSAg ICBudWxsX3BvaW50ZXJfbm9kZSkpOwotCSAgICAgIHRtcCA9IGZvbGRfYnVpbGQzX2xvYyAoaW5w dXRfbG9jYXRpb24sIENPTkRfRVhQUiwKLQkJCQkgICAgIHZvaWRfdHlwZV9ub2RlLCB0bXAsCi0J CQkJICAgICBnZmNfY2FsbF9mcmVlIChpbmZvLT5kYXRhKSwKLQkJCQkgICAgIGJ1aWxkX2VtcHR5 X3N0bXQgKGlucHV0X2xvY2F0aW9uKSk7Ci0JICAgICAgZ2ZjX2FkZF9leHByX3RvX2Jsb2NrICgm c2UtPnNzLT5sb29wLT5wb3N0LCB0bXApOwotCSAgICB9Ci0JICBlbHNlCi0JICAgIHsKLQkgICAg ICB0cmVlIGNsYXNzZGF0YTsKLQkgICAgICBnZmNfcHJlcGVuZF9leHByX3RvX2Jsb2NrICgmc2Ut PnBvc3QsIHRtcCk7Ci0JICAgICAgY2xhc3NkYXRhID0gZ2ZjX2NsYXNzX2RhdGFfZ2V0IChzZS0+ ZXhwcik7Ci0JICAgICAgdG1wID0gZm9sZF9idWlsZDJfbG9jIChpbnB1dF9sb2NhdGlvbiwgTkVf RVhQUiwKLQkJCQkgICAgIGxvZ2ljYWxfdHlwZV9ub2RlLAotCQkJCSAgICAgY2xhc3NkYXRhLAot CQkJCSAgICAgZm9sZF9jb252ZXJ0IChUUkVFX1RZUEUgKGNsYXNzZGF0YSksCi0JCQkJCSAgIAkg ICAgbnVsbF9wb2ludGVyX25vZGUpKTsKLQkgICAgICB0bXAgPSBmb2xkX2J1aWxkM19sb2MgKGlu cHV0X2xvY2F0aW9uLCBDT05EX0VYUFIsCi0JCQkJICAgICB2b2lkX3R5cGVfbm9kZSwgdG1wLAot CQkJCSAgICAgZ2ZjX2NhbGxfZnJlZSAoY2xhc3NkYXRhKSwKLQkJCQkgICAgIGJ1aWxkX2VtcHR5 X3N0bXQgKGlucHV0X2xvY2F0aW9uKSk7Ci0JICAgICAgZ2ZjX2FkZF9leHByX3RvX2Jsb2NrICgm c2UtPnBvc3QsIHRtcCk7Ci0JICAgIH0KKwkgIC8qIEZpbmFsaXplIHRoZSByZXN1bHQsIGlmIG5l Y2Vzc2FyeS4gICovCisJICBhdHRyID0gQ0xBU1NfREFUQSAoZXhwci0+dmFsdWUuZnVuY3Rpb24u ZXN5bS0+cmVzdWx0KS0+YXR0cjsKKwkgIGlmICghKChnZmNfaXNfY2xhc3NfYXJyYXlfZnVuY3Rp b24gKGV4cHIpCisJCSB8fCBnZmNfaXNfYWxsb2NfY2xhc3Nfc2NhbGFyX2Z1bmN0aW9uIChleHBy KSkKKwkJJiYgYXR0ci5wb2ludGVyKSkKKwkgICAgZmluYWxpemVfZnVuY3Rpb25fcmVzdWx0IChz ZSwgTlVMTCwgYXR0cik7CiAJfQotCi1ub19maW5hbGl6YXRpb246CiAgICAgICBnZmNfYWRkX2Js b2NrX3RvX2Jsb2NrICgmc2UtPnBvc3QsICZwb3N0KTsKICAgICB9CiAKQEAgLTEwNDMwLDcgKzEw NTAwLDggQEAgZ2ZjX3RyYW5zX3NjYWxhcl9hc3NpZ24gKGdmY19zZSAqIGxzZSwgZ2ZjX3NlICog cnNlLCBnZmNfdHlwZXNwZWMgdHMsCiAgICAgICBpZiAoZGVhbGxvYykKIAl7CiAJICB0bXBfdmFy ID0gZ2ZjX2V2YWx1YXRlX25vdyAobHNlLT5leHByLCAmbHNlLT5wcmUpOwotCSAgdG1wID0gZ2Zj X2RlYWxsb2NhdGVfYWxsb2NfY29tcF9ub19jYWYgKHRzLnUuZGVyaXZlZCwgdG1wX3ZhciwgMCk7 CisJICB0bXAgPSBnZmNfZGVhbGxvY2F0ZV9hbGxvY19jb21wX25vX2NhZiAodHMudS5kZXJpdmVk LCB0bXBfdmFyLAorCQkJCQkJICAwLCB0cnVlKTsKIAkgIGlmIChkZWVwX2NvcHkpCiAJICAgIHRt cCA9IGJ1aWxkM192IChDT05EX0VYUFIsIGNvbmQsIGJ1aWxkX2VtcHR5X3N0bXQgKGlucHV0X2xv Y2F0aW9uKSwKIAkJCSAgICB0bXApOwpAQCAtMTA4NzIsNiArMTA5NDMsNyBAQCBnZmNfdHJhbnNf YXJyYXlmdW5jX2Fzc2lnbiAoZ2ZjX2V4cHIgKiBleHByMSwgZ2ZjX2V4cHIgKiBleHByMikKIAog ICBnZmNfY29udl9mdW5jdGlvbl9leHByICgmc2UsIGV4cHIyKTsKICAgZ2ZjX2FkZF9ibG9ja190 b19ibG9jayAoJnNlLnByZSwgJnNlLnBvc3QpOworICBnZmNfYWRkX2Jsb2NrX3RvX2Jsb2NrICgm c2UucHJlLCAmc2UuZmluYWxibG9jayk7CiAKICAgaWYgKHNzKQogICAgIGdmY19jbGVhbnVwX2xv b3AgKCZsb29wKTsKQEAgLTExMzg3LDYgKzExNDU5LDg5IEBAIGlzX3J1bnRpbWVfY29uZm9ybWFi bGUgKGdmY19leHByICpleHByMSwgZ2ZjX2V4cHIgKmV4cHIyKQogfQogCiAKKyAgLyogRjIwMTgg KDcuNS42LjMpOiAiV2hlbiBhbiBpbnRyaW5zaWMgYXNzaWdubWVudCBzdGF0ZW1lbnQgaXMgZXhl Y3V0ZWQKKyAgICAgKDEwLjIuMS4zKSwgaWYgdGhlIHZhcmlhYmxlIGlzIG5vdCBhbiB1bmFsbG9j YXRlZCBhbGxvY2F0YWJsZSB2YXJpYWJsZSwKKyAgICAgaXQgaXMgZmluYWxpemVkIGFmdGVyIGV2 YWx1YXRpb24gb2YgZXhwciBhbmQgYmVmb3JlIHRoZSBkZWZpbml0aW9uIG9mCisgICAgIHRoZSB2 YXJpYWJsZS4gSWYgdGhlIHZhcmlhYmxlIGlzIGFuIGFsbG9jYXRlZCBhbGxvY2F0YWJsZSB2YXJp YWJsZSwgb3IKKyAgICAgaGFzIGFuIGFsbG9jYXRlZCBhbGxvY2F0YWJsZSBzdWJvYmplY3QsIHRo YXQgd291bGQgYmUgZGVhbGxvY2F0ZWQgYnkKKyAgICAgaW50cmluc2ljIGFzc2lnbm1lbnQsIHRo ZSBmaW5hbGl6YXRpb24gb2NjdXJzIGJlZm9yZSB0aGUgZGVhbGxvY2F0aW9uICovCisKK3N0YXRp YyB0cmVlCitnZmNfYXNzaWdubWVudF9maW5hbGl6ZXJfY2FsbCAoZ2ZjX2V4cHIgKmV4cHIxLCBi b29sIGluaXRfZmxhZykKK3sKKyAgc3RtdGJsb2NrX3QgZmluYWxfYmxvY2s7CisgIGdmY19pbml0 X2Jsb2NrICgmZmluYWxfYmxvY2spOworICBzeW1ib2xfYXR0cmlidXRlIGxoc19hdHRyOworICB0 cmVlIGZpbmFsX2V4cHI7CisgIHRyZWUgcHRyOworICB0cmVlIGNvbmQ7CisgIGdmY19zZSBzZTsK KworICAvKiBXZSBoYXZlIHRvIGV4Y2x1ZGUgdnRhYmxlIHByb2NlZHVyZXMgKF9jb3B5IGFuZCBf ZmluYWwgZXNwZWNpYWxseSksIHVzZXMKKyAgICAgb2YgZ2ZjX3RyYW5zX2Fzc2lnbm1lbnRfMSBp biBpbml0aWFsaXphdGlvbiBhbmQgYWxsb2NhdGlvbiBiZWZvcmUgdHJ5aW5nCisgICAgIHRvIGJ1 aWxkIGEgZmluYWwgY2FsbC4gICovCisgIGlmICghZXhwcjEtPm11c3RfZmluYWxpemUKKyAgICAg IHx8IGV4cHIxLT5zeW10cmVlLT5uLnN5bS0+YXR0ci5hcnRpZmljaWFsCisgICAgICB8fCBleHBy MS0+c3ltdHJlZS0+bi5zeW0tPm5zLT5wcm9jX25hbWUtPmF0dHIuYXJ0aWZpY2lhbAorICAgICAg fHwgaW5pdF9mbGFnKQorICAgIHJldHVybiBOVUxMX1RSRUU7CisKKyAgaWYgKCEoZXhwcjEtPnRz LnR5cGUgPT0gQlRfQ0xBU1MKKwl8fCAoZXhwcjEtPnRzLnR5cGUgPT0gQlRfREVSSVZFRAorCSAg ICAmJiBnZmNfaXNfZmluYWxpemFibGUgKGV4cHIxLT50cy51LmRlcml2ZWQsIE5VTEwpKSkKKyAg ICAgIHx8ICFnZmNfYWRkX2ZpbmFsaXplcl9jYWxsICgmZmluYWxfYmxvY2ssIGV4cHIxKSkKKyAg ICByZXR1cm4gTlVMTF9UUkVFOworCisgIGxoc19hdHRyID0gZ2ZjX2V4cHJfYXR0ciAoZXhwcjEp OworCisgIC8qIENoZWNrIGFsbG9jYXRhYmxlL3BvaW50ZXIgaXMgYWxsb2NhdGVkL2Fzc29jaWF0 ZWQuICAqLworICBpZiAobGhzX2F0dHIuYWxsb2NhdGFibGUgfHwgbGhzX2F0dHIucG9pbnRlcikK KyAgICB7CisgICAgICBpZiAoZXhwcjEtPnRzLnR5cGUgPT0gQlRfQ0xBU1MpCisJeworCSAgcHRy ID0gZ2ZjX2dldF9jbGFzc19mcm9tX2dmY19leHByIChleHByMSk7CisJICBnY2NfYXNzZXJ0IChw dHIgIT0gTlVMTF9UUkVFKTsKKwkgIHB0ciA9IGdmY19jbGFzc19kYXRhX2dldCAocHRyKTsKKwkg IGlmIChsaHNfYXR0ci5kaW1lbnNpb24pCisJICAgIHB0ciA9IGdmY19jb252X2Rlc2NyaXB0b3Jf ZGF0YV9nZXQgKHB0cik7CisJfQorICAgICAgZWxzZQorCXsKKwkgIGdmY19pbml0X3NlICgmc2Us IE5VTEwpOworCSAgaWYgKGV4cHIxLT5yYW5rKQorCSAgICB7CisJICAgICAgZ2ZjX2NvbnZfZXhw cl9kZXNjcmlwdG9yICgmc2UsIGV4cHIxKTsKKwkgICAgICBwdHIgPSBnZmNfY29udl9kZXNjcmlw dG9yX2RhdGFfZ2V0IChzZS5leHByKTsKKwkgICAgfQorCSAgZWxzZQorCSAgICB7CisJICAgICAg Z2ZjX2NvbnZfZXhwciAoJnNlLCBleHByMSk7CisJICAgICAgcHRyID0gZ2ZjX2J1aWxkX2FkZHJf ZXhwciAoTlVMTF9UUkVFLCBzZS5leHByKTsKKwkgICAgfQorCX0KKworICAgICAgY29uZCA9IGZv bGRfYnVpbGQyX2xvYyAoaW5wdXRfbG9jYXRpb24sIE5FX0VYUFIsIGxvZ2ljYWxfdHlwZV9ub2Rl LAorCQkJICAgICAgcHRyLCBidWlsZF96ZXJvX2NzdCAoVFJFRV9UWVBFIChwdHIpKSk7CisgICAg ICBmaW5hbF9leHByID0gYnVpbGQzX2xvYyAoaW5wdXRfbG9jYXRpb24sIENPTkRfRVhQUiwgdm9p ZF90eXBlX25vZGUsCisJCQkgICAgICAgY29uZCwgZ2ZjX2ZpbmlzaF9ibG9jayAoJmZpbmFsX2Js b2NrKSwKKwkJCSAgICAgICBidWlsZF9lbXB0eV9zdG10IChpbnB1dF9sb2NhdGlvbikpOworICAg IH0KKyAgZWxzZQorICAgIGZpbmFsX2V4cHIgPSBnZmNfZmluaXNoX2Jsb2NrICgmZmluYWxfYmxv Y2spOworCisgIC8qIENoZWNrIG9wdGlvbmFsIHByZXNlbnQuICAqLworICBpZiAoZXhwcjEtPnN5 bXRyZWUtPm4uc3ltLT5hdHRyLm9wdGlvbmFsKQorICAgIHsKKyAgICAgIGNvbmQgPSBnZmNfY29u dl9leHByX3ByZXNlbnQgKGV4cHIxLT5zeW10cmVlLT5uLnN5bSk7CisgICAgICBmaW5hbF9leHBy ID0gYnVpbGQzX2xvYyAoaW5wdXRfbG9jYXRpb24sIENPTkRfRVhQUiwgdm9pZF90eXBlX25vZGUs CisJCQkgICAgICAgY29uZCwgZmluYWxfZXhwciwKKwkJCSAgICAgICBidWlsZF9lbXB0eV9zdG10 IChpbnB1dF9sb2NhdGlvbikpOworICAgIH0KKworICByZXR1cm4gZmluYWxfZXhwcjsKK30KKwor CiBzdGF0aWMgdHJlZQogdHJhbnNfY2xhc3NfYXNzaWdubWVudCAoc3RtdGJsb2NrX3QgKmJsb2Nr LCBnZmNfZXhwciAqbGhzLCBnZmNfZXhwciAqcmhzLAogCQkJZ2ZjX3NlICpsc2UsIGdmY19zZSAq cnNlLCBib29sIHVzZV92cHRyX2NvcHksCkBAIC0xMTM5NCw2ICsxMTU0OSwxNiBAQCB0cmFuc19j bGFzc19hc3NpZ25tZW50IChzdG10YmxvY2tfdCAqYmxvY2ssIGdmY19leHByICpsaHMsIGdmY19l eHByICpyaHMsCiB7CiAgIHRyZWUgdG1wLCBmY24sIHN0ZGNvcHksIHRvX2xlbiwgZnJvbV9sZW4s IHZwdHIsIG9sZF92cHRyOwogICB2ZWM8dHJlZSwgdmFfZ2M+ICphcmdzID0gTlVMTDsKKyAgdHJl ZSBmaW5hbF9leHByOworCisgIGZpbmFsX2V4cHIgPSBnZmNfYXNzaWdubWVudF9maW5hbGl6ZXJf Y2FsbCAobGhzLCBmYWxzZSk7CisgIGlmIChmaW5hbF9leHByICE9IE5VTExfVFJFRSkKKyAgICB7 CisgICAgICBpZiAocnNlLT5sb29wKQorCWdmY19wcmVwZW5kX2V4cHJfdG9fYmxvY2sgKCZyc2Ut Pmxvb3AtPnByZSwgZmluYWxfZXhwcik7CisgICAgICBlbHNlCisJZ2ZjX2FkZF9leHByX3RvX2Js b2NrIChibG9jaywgZmluYWxfZXhwcik7CisgICAgfQogCiAgIC8qIFN0b3JlIHRoZSBvbGQgdnB0 ciBzbyB0aGF0IGR5bmFtaWMgdHlwZXMgY2FuIGJlIGNvbXBhcmVkIGZvcgogICAgICByZWFsbG9j YXRpb24gdG8gb2NjdXIgb3Igbm90LiAgKi8KQEAgLTExNDE5LDggKzExNTg0LDEyIEBAIHRyYW5z X2NsYXNzX2Fzc2lnbm1lbnQgKHN0bXRibG9ja190ICpibG9jaywgZ2ZjX2V4cHIgKmxocywgZ2Zj X2V4cHIgKnJocywKIAlvbGRfdnB0ciA9IGJ1aWxkX2ludF9jc3QgKFRSRUVfVFlQRSAodnB0ciks IDApOwogCiAgICAgICBzaXplID0gZ2ZjX3ZwdHJfc2l6ZV9nZXQgKHZwdHIpOwotICAgICAgY2xh c3NfaGFuID0gR0ZDX0NMQVNTX1RZUEVfUCAoVFJFRV9UWVBFIChsc2UtPmV4cHIpKQotCSAgPyBn ZmNfY2xhc3NfZGF0YV9nZXQgKGxzZS0+ZXhwcikgOiBsc2UtPmV4cHI7CisgICAgICBpZiAoVFJF RV9DT0RFIChsc2UtPmV4cHIpID09IElORElSRUNUX1JFRikKKwl0bXAgPSBUUkVFX09QRVJBTkQg KGxzZS0+ZXhwciwgMCk7CisgICAgICBlbHNlCisJdG1wID0gbHNlLT5leHByOworICAgICAgY2xh c3NfaGFuID0gR0ZDX0NMQVNTX1RZUEVfUCAoVFJFRV9UWVBFICh0bXApKQorCSAgPyBnZmNfY2xh c3NfZGF0YV9nZXQgKHRtcCkgOiB0bXA7CiAKICAgICAgIC8qIEFsbG9jYXRlIGJsb2NrLiAgKi8K ICAgICAgIGdmY19pbml0X2Jsb2NrICgmYWxsb2MpOwpAQCAtMTE1MTksNiArMTE2ODgsNyBAQCB0 cmFuc19jbGFzc19hc3NpZ25tZW50IChzdG10YmxvY2tfdCAqYmxvY2ssIGdmY19leHByICpsaHMs IGdmY19leHByICpyaHMsCiAgICAgfQogfQogCisKIC8qIFN1YnJvdXRpbmUgb2YgZ2ZjX3RyYW5z X2Fzc2lnbm1lbnQgdGhhdCBhY3R1YWxseSBzY2FsYXJpemVzIHRoZQogICAgYXNzaWdubWVudC4g IEVYUFIxIGlzIHRoZSBkZXN0aW5hdGlvbi9MSFMgYW5kIEVYUFIyIGlzIHRoZSBzb3VyY2UvUkhT LgogICAgaW5pdF9mbGFnIGluZGljYXRlcyBpbml0aWFsaXphdGlvbiBleHByZXNzaW9ucyBhbmQg ZGVhbGxvYyB0aGF0IG5vCkBAIC0xMTU0Miw2ICsxMTcxMiw3IEBAIGdmY190cmFuc19hc3NpZ25t ZW50XzEgKGdmY19leHByICogZXhwcjEsIGdmY19leHByICogZXhwcjIsIGJvb2wgaW5pdF9mbGFn LAogICB0cmVlIHRtcDsKICAgc3RtdGJsb2NrX3QgYmxvY2s7CiAgIHN0bXRibG9ja190IGJvZHk7 CisgIHRyZWUgZmluYWxfZXhwcjsKICAgYm9vbCBsX2lzX3RlbXA7CiAgIGJvb2wgc2NhbGFyX3Rv X2FycmF5OwogICB0cmVlIHN0cmluZ19sZW5ndGg7CkBAIC0xMTU4Miw2ICsxMTc1Myw3IEBAIGdm Y190cmFuc19hc3NpZ25tZW50XzEgKGdmY19leHByICogZXhwcjEsIGdmY19leHByICogZXhwcjIs IGJvb2wgaW5pdF9mbGFnLAogICAgICBuZWVkZWQgYXQgdHdvIGxvY2F0aW9ucywgc28gZG8gaXQg b25jZSBvbmx5IGJlZm9yZSB0aGUgaW5mb3JtYXRpb24gaXMKICAgICAgbmVlZGVkLiAgKi8KICAg bGhzX2F0dHIgPSBnZmNfZXhwcl9hdHRyIChleHByMSk7CisKICAgaXNfcG9seV9hc3NpZ24gPSAo dXNlX3ZwdHJfY29weSB8fCBsaHNfYXR0ci5wb2ludGVyCiAJCSAgICB8fCAobGhzX2F0dHIuYWxs b2NhdGFibGUgJiYgIWxoc19hdHRyLmRpbWVuc2lvbikpCiAJCSAgICYmIChleHByMS0+dHMudHlw ZSA9PSBCVF9DTEFTUwpAQCAtMTE4NTUsNiArMTIwMjcsOCBAQCBnZmNfdHJhbnNfYXNzaWdubWVu dF8xIChnZmNfZXhwciAqIGV4cHIxLCBnZmNfZXhwciAqIGV4cHIyLCBib29sIGluaXRfZmxhZywK IAkgIGVsc2UKIAkgICAgZ2ZjX2FkZF9leHByX3RvX2Jsb2NrICgmbG9vcC5wb3N0LCB0bXAyKTsK IAl9CisKKyAgICAgIGV4cHIxLT5tdXN0X2ZpbmFsaXplID0gMDsKICAgICB9CiAgIGVsc2UgaWYg KGZsYWdfY29hcnJheSA9PSBHRkNfRkNPQVJSQVlfTElCCiAJICAgJiYgbGhzX2NhZl9hdHRyLmNv ZGltZW5zaW9uICYmIHJoc19jYWZfYXR0ci5jb2RpbWVuc2lvbgpAQCAtMTE5MDksMTIgKzEyMDgz LDM2IEBAIGdmY190cmFuc19hc3NpZ25tZW50XzEgKGdmY19leHByICogZXhwcjEsIGdmY19leHBy ICogZXhwcjIsIGJvb2wgaW5pdF9mbGFnLAogCQkJCSAgICEobF9pc190ZW1wIHx8IGluaXRfZmxh ZykgJiYgZGVhbGxvYywKIAkJCQkgICBleHByMS0+c3ltdHJlZS0+bi5zeW0tPmF0dHIuY29kaW1l bnNpb24pOwogCi0gIC8qIEFkZCB0aGUgcHJlIGJsb2NrcyB0byB0aGUgYm9keS4gICovCi0gIGdm Y19hZGRfYmxvY2tfdG9fYmxvY2sgKCZib2R5LCAmcnNlLnByZSk7CisgIC8qIENvbXBseSB3aXRo IEYyMDE4ICg3LjUuNi4zKS4gTWFrZSBzdXJlIHRoYXQgYW55IGZpbmFsaXphdGlvbiBjb2RlIGlz IGFkZGVkCisgICAgIGFmdGVyIGV2YWx1YXRpb24gb2YgdGhlIHJocyBhbmQgYmVmb3JlIHJlYWxs b2NhdGlvbi4gICovCisgIGZpbmFsX2V4cHIgPSBnZmNfYXNzaWdubWVudF9maW5hbGl6ZXJfY2Fs bCAoZXhwcjEsIGluaXRfZmxhZyk7CisgIGlmIChmaW5hbF9leHByKQorICAgIHsKKyAgICAgIGlm IChsc3MgPT0gZ2ZjX3NzX3Rlcm1pbmF0b3IpCisJeworCSAgZ2ZjX2FkZF9ibG9ja190b19ibG9j ayAoJmJsb2NrLCAmcnNlLnByZSk7CisJICBnZmNfYWRkX2V4cHJfdG9fYmxvY2sgKCZibG9jaywg ZmluYWxfZXhwcik7CisJfQorICAgICAgZWxzZQorCXsKKwkgIGdmY19hZGRfYmxvY2tfdG9fYmxv Y2sgKCZib2R5LCAmcnNlLnByZSk7CisJICBnZmNfYWRkX2V4cHJfdG9fYmxvY2sgKCZsb29wLmNv ZGVbZXhwcjEtPnJhbmsgLSAxXSwgZmluYWxfZXhwcik7CisJfQorICAgIH0KKyAgZWxzZQorICAg IGdmY19hZGRfYmxvY2tfdG9fYmxvY2sgKCZib2R5LCAmcnNlLnByZSk7CisKKyAgLyogQWRkIHRo ZSBsc2UgcHJlIGJsb2NrIHRvIHRoZSBib2R5ICAqLwogICBnZmNfYWRkX2Jsb2NrX3RvX2Jsb2Nr ICgmYm9keSwgJmxzZS5wcmUpOwogICBnZmNfYWRkX2V4cHJfdG9fYmxvY2sgKCZib2R5LCB0bXAp OwogICAvKiBBZGQgdGhlIHBvc3QgYmxvY2tzIHRvIHRoZSBib2R5LiAgKi8KLSAgZ2ZjX2FkZF9i bG9ja190b19ibG9jayAoJmJvZHksICZyc2UucG9zdCk7CisgIGlmIChsc3MgPT0gZ2ZjX3NzX3Rl cm1pbmF0b3IpCisgICAgeworICAgICAgZ2ZjX2FkZF9ibG9ja190b19ibG9jayAoJnJzZS5maW5h bGJsb2NrLCAmcnNlLnBvc3QpOworICAgICAgZ2ZjX2FkZF9ibG9ja190b19ibG9jayAoJmJvZHks ICZyc2UuZmluYWxibG9jayk7CisgICAgfQorICBlbHNlCisgICAgZ2ZjX2FkZF9ibG9ja190b19i bG9jayAoJmJvZHksICZyc2UucG9zdCk7CiAgIGdmY19hZGRfYmxvY2tfdG9fYmxvY2sgKCZib2R5 LCAmbHNlLnBvc3QpOwogCiAgIGlmIChsc3MgPT0gZ2ZjX3NzX3Rlcm1pbmF0b3IpCkBAIC0xMTk3 OSw2ICsxMjE3Nyw3IEBAIGdmY190cmFuc19hc3NpZ25tZW50XzEgKGdmY19leHByICogZXhwcjEs IGdmY19leHByICogZXhwcjIsIGJvb2wgaW5pdF9mbGFnLAogICAgICAgLyogV3JhcCB0aGUgd2hv bGUgdGhpbmcgdXAuICAqLwogICAgICAgZ2ZjX2FkZF9ibG9ja190b19ibG9jayAoJmJsb2NrLCAm bG9vcC5wcmUpOwogICAgICAgZ2ZjX2FkZF9ibG9ja190b19ibG9jayAoJmJsb2NrLCAmbG9vcC5w b3N0KTsKKyAgICAgIGdmY19hZGRfYmxvY2tfdG9fYmxvY2sgKCZibG9jaywgJnJzZS5maW5hbGJs b2NrKTsKIAogICAgICAgZ2ZjX2NsZWFudXBfbG9vcCAoJmxvb3ApOwogICAgIH0KZGlmZiAtLWdp dCBhL2djYy9mb3J0cmFuL3RyYW5zLWlvLmNjIGIvZ2NjL2ZvcnRyYW4vdHJhbnMtaW8uY2MKaW5k ZXggNzMyMjIxZjg0OGIuLmJmNGYwNjcxNTg1IDEwMDY0NAotLS0gYS9nY2MvZm9ydHJhbi90cmFu cy1pby5jYworKysgYi9nY2MvZm9ydHJhbi90cmFucy1pby5jYwpAQCAtMjY2NCw2ICsyNjY0LDcg QEAgc2NhbGFyaXplOgogCiAgIGdmY19hZGRfYmxvY2tfdG9fYmxvY2sgKCZib2R5LCAmc2UucHJl KTsKICAgZ2ZjX2FkZF9ibG9ja190b19ibG9jayAoJmJvZHksICZzZS5wb3N0KTsKKyAgZ2ZjX2Fk ZF9ibG9ja190b19ibG9jayAoJmJvZHksICZzZS5maW5hbGJsb2NrKTsKIAogICBpZiAoc2Uuc3Mg PT0gTlVMTCkKICAgICB0bXAgPSBnZmNfZmluaXNoX2Jsb2NrICgmYm9keSk7CmRpZmYgLS1naXQg YS9nY2MvZm9ydHJhbi90cmFucy1zdG10LmNjIGIvZ2NjL2ZvcnRyYW4vdHJhbnMtc3RtdC5jYwpp bmRleCAwNGY4MTQ3ZDIzYi4uZTBmNTEzZjg5NDEgMTAwNjQ0Ci0tLSBhL2djYy9mb3J0cmFuL3Ry YW5zLXN0bXQuY2MKKysrIGIvZ2NjL2ZvcnRyYW4vdHJhbnMtc3RtdC5jYwpAQCAtNDQzLDcgKzQ0 Myw4IEBAIGdmY190cmFuc19jYWxsIChnZmNfY29kZSAqIGNvZGUsIGJvb2wgZGVwZW5kZW5jeV9j aGVjaywKICAgICAgIGVsc2UKIAlnZmNfYWRkX2V4cHJfdG9fYmxvY2sgKCZzZS5wcmUsIHNlLmV4 cHIpOwogCi0gICAgICBnZmNfYWRkX2Jsb2NrX3RvX2Jsb2NrICgmc2UucHJlLCAmc2UucG9zdCk7 CisgICAgICBnZmNfYWRkX2Jsb2NrX3RvX2Jsb2NrICgmc2UuZmluYWxibG9jaywgJnNlLnBvc3Qp OworICAgICAgZ2ZjX2FkZF9ibG9ja190b19ibG9jayAoJnNlLnByZSwgJnNlLmZpbmFsYmxvY2sp OwogICAgIH0KIAogICBlbHNlCkBAIC01NDIsNiArNTQzLDcgQEAgZ2ZjX3RyYW5zX2NhbGwgKGdm Y19jb2RlICogY29kZSwgYm9vbCBkZXBlbmRlbmN5X2NoZWNrLAogICAgICAgZ2ZjX3RyYW5zX3Nj YWxhcml6aW5nX2xvb3BzICgmbG9vcCwgJmJvZHkpOwogICAgICAgZ2ZjX2FkZF9ibG9ja190b19i bG9jayAoJnNlLnByZSwgJmxvb3AucHJlKTsKICAgICAgIGdmY19hZGRfYmxvY2tfdG9fYmxvY2sg KCZzZS5wcmUsICZsb29wLnBvc3QpOworICAgICAgZ2ZjX2FkZF9ibG9ja190b19ibG9jayAoJnNl LnByZSwgJmxvb3BzZS5maW5hbGJsb2NrKTsKICAgICAgIGdmY19hZGRfYmxvY2tfdG9fYmxvY2sg KCZzZS5wcmUsICZzZS5wb3N0KTsKICAgICAgIGdmY19jbGVhbnVwX2xvb3AgKCZsb29wKTsKICAg ICB9CkBAIC02MzM3LDcgKzYzMzksMTAgQEAgZ2ZjX3RyYW5zX2FsbG9jYXRlIChnZmNfY29kZSAq IGNvZGUpCiAJfQogICAgICAgZ2ZjX2FkZF9ibG9ja190b19ibG9jayAoJmJsb2NrLCAmc2UucHJl KTsKICAgICAgIGlmIChjb2RlLT5leHByMy0+bXVzdF9maW5hbGl6ZSkKLQlnZmNfYWRkX2Jsb2Nr X3RvX2Jsb2NrICgmZmluYWxfYmxvY2ssICZzZS5wb3N0KTsKKwl7CisJICBnZmNfYWRkX2Jsb2Nr X3RvX2Jsb2NrICgmZmluYWxfYmxvY2ssICZzZS5maW5hbGJsb2NrKTsKKwkgIGdmY19hZGRfYmxv Y2tfdG9fYmxvY2sgKCZmaW5hbF9ibG9jaywgJnNlLnBvc3QpOworCX0KICAgICAgIGVsc2UKIAln ZmNfYWRkX2Jsb2NrX3RvX2Jsb2NrICgmcG9zdCwgJnNlLnBvc3QpOwogCmRpZmYgLS1naXQgYS9n Y2MvZm9ydHJhbi90cmFucy5oIGIvZ2NjL2ZvcnRyYW4vdHJhbnMuaAppbmRleCA3MzhjNzQ4N2E1 Ni4uNzJhZjU0YzRkMjkgMTAwNjQ0Ci0tLSBhL2djYy9mb3J0cmFuL3RyYW5zLmgKKysrIGIvZ2Nj L2ZvcnRyYW4vdHJhbnMuaApAQCAtNDMsNiArNDMsMTAgQEAgdHlwZWRlZiBzdHJ1Y3QgZ2ZjX3Nl CiAgIHN0bXRibG9ja190IHByZTsKICAgc3RtdGJsb2NrX3QgcG9zdDsKIAorICAvKiBDYXJyaWVz IGZpbmFsaXphdGlvbiBjb2RlIHRoYXQgaXMgcmVxdWlyZWQgdG8gYmUgZXhlY3V0ZWQgZXhlY3V0 aW9uIG9mIHRoZQorICAgICBpbm5lcm1vc3QgZXhlY3V0YWJsZSBjb25zdHJ1Y3QuICAqLworICBz dG10YmxvY2tfdCBmaW5hbGJsb2NrOworCiAgIC8qIHRoZSByZXN1bHQgb2YgdGhlIGV4cHJlc3Np b24gKi8KICAgdHJlZSBleHByOwogCkBAIC01NSw3ICs1OSw3IEBAIHR5cGVkZWYgc3RydWN0IGdm Y19zZQogCiAgIC8qIFdoZXRoZXIgZXhwciBpcyBhIHJlZmVyZW5jZSB0byBhbiB1bmxpbWl0ZWQg cG9seW1vcnBoaWMgb2JqZWN0LiAgKi8KICAgdW5zaWduZWQgdW5saW1pdGVkX3BvbHltb3JwaGlj OjE7Ci0gIAorCiAgIC8qIElmIHNldCBnZmNfY29udl92YXJpYWJsZSB3aWxsIHJldHVybiBhbiBl eHByZXNzaW9uIGZvciB0aGUgYXJyYXkKICAgICAgZGVzY3JpcHRvci4gV2hlbiBzZXQsIHdhbnRf cG9pbnRlciBzaG91bGQgYWxzbyBiZSBzZXQuCiAgICAgIElmIG5vdCBzZXQgc2NhbGFyaXppbmcg dmFyaWFibGVzIHdpbGwgYmUgc3Vic3RpdHV0ZWQuICAqLwpkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3Rz dWl0ZS9nZm9ydHJhbi5kZy9hbGxvY2F0ZV93aXRoX3NvdXJjZV8yNS5mOTAgYi9nY2MvdGVzdHN1 aXRlL2dmb3J0cmFuLmRnL2FsbG9jYXRlX3dpdGhfc291cmNlXzI1LmY5MAppbmRleCA5MmRjNTA3 NTZkNC4uZGUyMGExNDc4NDIgMTAwNjQ0Ci0tLSBhL2djYy90ZXN0c3VpdGUvZ2ZvcnRyYW4uZGcv YWxsb2NhdGVfd2l0aF9zb3VyY2VfMjUuZjkwCisrKyBiL2djYy90ZXN0c3VpdGUvZ2ZvcnRyYW4u ZGcvYWxsb2NhdGVfd2l0aF9zb3VyY2VfMjUuZjkwCkBAIC02OCw0ICs2OCw0IEBAIGNvbnRhaW5z CiAgIGVuZCBmdW5jdGlvbiBmdW5jX2Zvb19hCiAKIGVuZCBwcm9ncmFtIHNpbXBsZV9sZWFrCi0h IHsgZGctZmluYWwgeyBzY2FuLXRyZWUtZHVtcC10aW1lcyAiXD5fZmluYWwiIDYgIm9yaWdpbmFs IiB9IH0KKyEgeyBkZy1maW5hbCB7IHNjYW4tdHJlZS1kdW1wLXRpbWVzICJcPl9maW5hbCIgNCAi b3JpZ2luYWwiIH0gfQo= --0000000000009c60e305d6979636--