From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org [79.124.17.100]) by master.gitmailbox.com (Postfix) with ESMTP id 1556543076 for ; Sun, 19 Jun 2022 01:03:44 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id AA1FE68B528; Sun, 19 Jun 2022 04:03:40 +0300 (EEST) Received: from sonic303-21.consmr.mail.ir2.yahoo.com (sonic303-21.consmr.mail.ir2.yahoo.com [77.238.178.202]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id A404F68ABD9 for ; Sun, 19 Jun 2022 04:03:33 +0300 (EEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo.it; s=s2048; t=1655600612; bh=n/9cAng5WC+4vssdWnawnGghVo8Et9LGY806HFtQbwU=; h=Date:From:To:In-Reply-To:References:Subject:From:Subject:Reply-To; b=ion8yVbP/r5JsZOWKIFnMP79k8tKE4dAhekppuG2YpTnr/ZKV1mCEBYwiPMrBH4EKd/IlrM9Gb1FB1O/LnNIEy0NErT46R8rMnfKt+3dSjW1RW4LaQclDy/FsreuRHhaUSNGIvyd9gtqxW5mZhMtFsBUFXKDkAdnPzqnER2wfsdLgyncc/aJaI8gju8v1I/KsIHLA2BCLVGDYqFpbpghyZGmMujxQ45vrVrXHruNDv30ytv9kRaBms0mF9JgzZqrFhiDxzUqNu8csh9Y2ohMKFCe7D4p0Nhww9lzCAZ0oc6+BH+L4Nq3e51IYUycCeMmv2EE6rsZN6wDLHX59WTdsw== X-SONIC-DKIM-SIGN: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo.com; s=s2048; t=1655600612; bh=ycwNKNHJTAdKGzKJW4w4G2dlcQg9gjLBRvtG7+dON4N=; h=X-Sonic-MF:Date:From:To:Subject:From:Subject; b=TqwucE7Icx6jzUC2YYk+A3dLdNqBXISe2nyfIl9ZbROBaISOMqwQJ8ALR3+BdTbbBfnhgsKCwHMR2u0REYKhLYyfX5snmBOUM3jP+00eN/NyifywUp1wBm+9iXhpa8J/3jVP1zyN2oc0HlAQC4u/zhbJl6DEoVtoXEQBZ28agFwUPoCGUG6A2qfLoqrEt0s4y7P4RTQAGuuLcuOwGm7rUFBGpznyDHPcT5AxxM/N6PRk6TZR7pneBKVdmMY/PxGKovMJYflzd/bPSJ6/bdmdap9l+hL3/hDD6UNl4X3NYpUSPHbvMudLoA0YqIyqEOj4oT41sltFPb5nimq6fKkKJA== X-YMail-OSG: a81OcNwVM1nxQr1sxH5eWRQ63u5wbNx5lCMKy8aB8vcUySdtze..hEZLk59atHY Ay9xugkq0lbmMJfg5uGmiZcjAJBQ0lkrZdLTEz7T.RMrZTp2MyZLm_x00D0uaCqonjX.AObZ4SHu srVIB..YDZYmlY0m_zq.IOSnDmyWqvThqyLz8r7gDrFbJAxCp37DrOFZzl1U85_rDsTlJEtvMs4U vh9jwQjEMUmTFWVyhbi3ZjkT3wi_QqzCY6qvqB4a6_5Ki6R8Xq0L_RwCCs4sCy1deTQo3xSxTLkW euODR3CxYPlbgYNrdDHfufmLamldwXDi9fnm0bCGpazMWEBqvKyS_hL65xyOzX8E2OK6QAFfi6.A tkzKZwZG2yalW3D4VpygvFoX.VTYbn3mFpieaw_ohlfARhCA2s_OtdFIUnDZEIlaQoR_Sf6SCGIs _VMAp6MNYZmJebCFNjStYlv_2ALugHagpb7w0obKXDFTM3Bw6F3B5d3JMWpt_SDR5wRiPx.4PKnb IQCd6nrkdL_yAu5P6kOsl.Esj61fB97fO7kBgyzRwcGUSNyuE9u4kdXE_Nngu1eJFm0ePOrCIhRK xND_6fmtTMCpzRGakirwS4o0TBuXIy6cdoKLX1Ls_KNsK3_VPRoa_aj0CFIG6p8tDDSDoKz2gsLf CSNPCuUoxqwHXTu64e5iDN7zzZpRkUvDUY63H9hWMq9uLGO6rHjnHFRTA7JOsr8x1s8bXuGERggD a0G_rOa2NBo.YjyUrhadVTIkaoHiWgWZW0UsqcSe7IaaF0eAK5hW7lpBjToZh80y_dpu8TUvXJrH .1pvX5N7qriOA59fDYVHfkNCX0eoHGqEp_emJOugRCgmMNmmoWr2.Sq8_cCJeOewEAwvS0eKI4Vh oEODhm4gEmxDVeRsOmhBUXUO40SUnGkqelDr6MUbEpO0vTmslzcxO1bexPFIu8knWV0NyHC1W1uR tPqLWIfzNM3md61Dq1E87HUQAx_RUZaqTYt8nXoHFPWWoqe8gc0ekN4Lo6k8FmfFVbZ9uZLpQXEH IT5STsFGbAAJjACIxHP0sNYkhqHEr6nz1svJp3tDUZizQZmOx_07pTNG3UShhrabfRgpqmBToWBt 4UyesYorIWQi1pk5up2GFh4vLzXDl_2udRwMiM2P7l5n6YWmqLO.GlbN.8kRcsJzECIpb3MkqzE0 _X8apedZwlNeydMFjE5Fhrp.zO4Lbh16v_vnpKq4Opo.rQaquDGVMLP_Lb6WtlSB.Cz3rYPqYWog S7Kkh_JsTR_JjsIrVGgaWVKc9bbY9w22ddl0sMny..O7FJtJG8EMzRxCH_4_4VGQcO4nl04mvJVT Te.LGJ0u_i67MEDylCJHgbvA1pzmNtxZR1CmsPVtUPbVnQY8PkElR0eZyl9wMJK1kjK3y8IRZX71 h58Ppx0.fHrVewhc8NroEA03h7B31Jf94AjYrAUHTZ7seZe9jj4qGvGzWdluDt8goxTUU5DFr2eT Vgh0vusGcX491p7OX.ht.m2Co15VLMT2IzqZlrYgo7O1D0ISheeQBYJ1mf4hwkr.WkD17L8xpkqk 63lEwmOlGiEPaLgxx36545Ra60JZL4_7wL4f5v3jlwJmkHhaaWkqxbD5Qn59z7Gk_HEuOnqJXy46 xocqnF6wkuwt.LkbxCW1tJnOkzFqDasaaeEO_p8C11oQ.FH90ZAG6fT.xVLuBLJ1vxz2RQBAGpRQ M1z9HIJv161jvY3oy9cjMQTeq4MddJsVgFQFhrfV48zvTMoX9Rvb5sZLwz2OiXXoh0xdbPRQ7ubx cREnwM0mB5Szg.8IQBVom9loHmGcCQ6VYoR85z2EhvIzfAxYy.cKPupVgEPLdRt4y2Xgttpztnf0 U85bRP4HL6lFAos_4fN_vvSPh1q8RCRdr1jrAFpHLQy4lnUAHTELothc_sokkwDNOz_IHBJ0MC9q 8VNTcWUY2oJW8hId67q4FHjjJICYKd5mjli_KL0YRhd9IH_Dwg52CHbybhfNAmPL1Z7pVeWyWZO7 d66bXKmkRAt0aAOqkHSC56MyaZxu5HlaV_sbu_O23qZXiOVJvAeqMfjfPwZ7335iJnAv7V6AWLkJ TjUaVexkHZLVLI4lccA9lElt0kVWYe0hvHgmTpC9z9DaD6WTS2UghgYEet23T4MfES9BG1bQje.c yW1ZFBMtPiGWlgwkihEiHUG.MZq9rKbAuPOekDFuVPR45H6W5HFTGnAVxZKaQ.a6kpA8L6ybsa8y Rvj1x30t9x1wZ7gvdw9zlZ4E- X-Sonic-MF: Received: from sonic.gate.mail.ne1.yahoo.com by sonic303.consmr.mail.ir2.yahoo.com with HTTP; Sun, 19 Jun 2022 01:03:32 +0000 Date: Sun, 19 Jun 2022 01:05:43 +0000 (UTC) From: Paolo Prete To: "paolopr976@gmail.com" , FFmpeg Development Discussions and Patches , "leo.izen@gmail.com" Message-ID: <1429832117.8300123.1655600743317@mail.yahoo.com> In-Reply-To: <985091997.9345851.1655600194188@mail.yahoo.com> References: <122266341.9130638.1655553986479.ref@mail.yahoo.com> <122266341.9130638.1655553986479@mail.yahoo.com> <8f62739f-89a5-1be1-2f92-3db3df124a21@gmail.com> <1013032387.9340924.1655598357193@mail.yahoo.com> <985091997.9345851.1655600194188@mail.yahoo.com> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="----=_Part_8300122_1458823203.1655600743317" X-Mailer: WebService/1.1.20280 YMailNorrin Subject: Re: [FFmpeg-devel] [PATCH] doc/examples/muxing: code rewrite with improved readability and fixed issues X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: FFmpeg development discussions and patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: FFmpeg development discussions and patches Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" Archived-At: List-Archive: List-Post: ------=_Part_8300122_1458823203.1655600743317 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable Sorry: I had problems with my email client in formatting the previous messa= ge. I just try to resend it. >> Il sabato 18 giugno 2022, 17:18:18 CEST, Leo Izen h= a scritto: >>On 6/18/22 08:06, Paolo Prete wrote: >> +{ >> +=C2=A0 =C2=A0 if (num) >> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 av_log(NULL, AV_LOG_ERROR, "%s (error '%s')= \n", s, av_err2str(*num)); >> +=C2=A0 =C2=A0 else >> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 av_log(NULL, AV_LOG_ERROR, "%s\n", s); > +} >This does not need to be a pointer. Convention is that negative values >are errors and nonnegative values are not. So you could always use >something like: if (num < 0). The pointer makes clearer, when I call the function, that I'm not managing = an error with a number id. >> -=C2=A0 =C2=A0 AVPacket *tmp_pkt; >> +=C2=A0 =C2=A0 if (type =3D=3D AVMEDIA_TYPE_AUDIO) >> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 enc_time_base =3D ((AVRational *)out_fmt_ct= x->opaque)[0]; >> +=C2=A0 =C2=A0 else >> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 enc_time_base =3D ((AVRational *)out_fmt_ct= x->opaque)[1]; >> >Why are you referencing the opaque elements of out_fmt_ctx? I pass, through the opaque element, user data to the muxer. That data (the = timebases of the audio and video encoders) will be used for rescaling ts to= the muxer timebases. Otherwise I would have to pass them through the function's= params, which would make the function prototype longer and less readable. >> >> -static int write_frame(AVFormatContext *fmt_ctx, AVCodecContext *c, >> -=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 AVStream *st, AVFrame *frame, AVPacket *pkt) >> +static int is_extension_supported(const char *filename) >Why are you artificially limiting what is permitted? >From what I see, not all extensions are supported without modifying the def= ault settings. In fact, as specified in the commit msg, some extensions don= 't work and the original muxing.c fails with them. >> +=C2=A0 =C2=A0 if (!(c =3D avcodec_find_encoder(id))) { >> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 avformat_free_context(tmp_fctx); >> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 return ret; >You probably don't want to return "ret" here as you don't assign it. ret is assigned to 0 (=3D success) at the definition of the variable. And i= n this case, the function succeeds: the returned AVCodecParameter is set wi= th AV_CODEC_ID_NONE >> -=C2=A0 =C2=A0 if (oc->oformat->flags & AVFMT_GLOBALHEADER) >> -=C2=A0 =C2=A0 =C2=A0 =C2=A0 c->flags |=3D AV_CODEC_FLAG_GLOBAL_HEADER; >> +=C2=A0 =C2=A0 return ret; > Again, why are you returning ret if you are not assigning to it? as above, ret is assigned to 0. >> +=C2=A0 =C2=A0 codec =3D avcodec_find_encoder(params->codec_id); >> +=C2=A0 =C2=A0 *enc_ctx =3D avcodec_alloc_context3(codec); >Don't attempt to allocate anything until after you check if the codec is >found. Is it really necessary? It has been already checked in the line with "if (process_audio/video) {" a= nd the API doxy says that a NULL parameter will only cause that codec-speci= fic defaults won't be initialized (so=C2=A0 it appears safe to me). >> +=C2=A0 =C2=A0 if (!codec) { >> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 log_error("Could not allocate the encoding = context", NULL); >This error message does not match the check, which is if the codec is foun= d. >> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 return AVERROR_EXIT; >return AVERROR_CODEC_NOT_FOUND; Instead of changing the error msg, I think that what was wrong is the check= . I fixed it with if (!(*enc_ctx =3D avcodec_alloc_context3(codec))) { >> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 (*enc_ctx)->sample_rate =3D params->sample_= rate; >> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 (*enc_ctx)->time_base=C2=A0 =3D (AVRational= ){1, params->sample_rate}; >Use av_make_q to avoid casting. Done, thanks. > +=C2=A0 =C2=A0 =C2=A0 =C2=A0 return ret; > +=C2=A0 =C2=A0 } else > +=C2=A0 =C2=A0 =C2=A0 =C2=A0 return 0;This violates the coding style, you= need to use braces {} for the else block if you also use it for the if block. Done, thanks. > +=C2=A0 =C2=A0 if ((ret =3D av_frame_get_buffer(*frame, 0)) < 0) { > +=C2=A0 =C2=A0 =C2=A0 =C2=A0 log_error("Could not allocate buffer for AVF= rame", &ret); > +=C2=A0 =C2=A0 =C2=A0 =C2=A0 return AVERROR(ENOMEM); > +=C2=A0 =C2=A0 } else > +=C2=A0 =C2=A0 =C2=A0 =C2=A0 return 0; You don't need the else block here at all. Done, thanks. >> +static int init_video_convert(struct SwsContext **ctx, AVCodecParameter= s *in_params, >> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 AVCodecParameters *out_params) >> +{ >This paper-thin wrapper function is unnecessary, just inline it. This is intentional: even if it's a paper-thin wrapper, it shortens the cod= e of the main() function by making it quicker to understand that the audio/video converters are init= ialized with their respective AVCodecParameters. I would wait for feedback = about this from other readers, before changing the code. > + > +=C2=A0 =C2=A0 if (!tincr) { > +=C2=A0 =C2=A0 =C2=A0 =C2=A0 t=C2=A0 =C2=A0 =C2=A0 =3D 0; > +=C2=A0 =C2=A0 =C2=A0 =C2=A0 tincr=C2=A0 =3D 2 * M_PI * 110.0 / frame->sa= mple_rate; > +=C2=A0 =C2=A0 =C2=A0 =C2=A0 /* increment frequency by 110 Hz per second = */ > +=C2=A0 =C2=A0 =C2=A0 =C2=A0 tincr2=C2=A0 =3D tincr / frame->sample_rate; > What are you doing here? Why are you doing it? >>=C2=A0 =C2=A0 =C2=A0 } >> - >> -=C2=A0 =C2=A0 return write_frame(oc, c, ost->st, frame, ost->tmp_pkt); >> +=C2=A0 =C2=A0 for (j =3D 0; j nb_samples; j++) { >> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 v =3D (int)(sin(t) * 10000); >> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 for (i =3D 0; i < frame->ch_layout.nb_chann= els; i++) >> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 *data++ =3D v; >> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 t=C2=A0 =C2=A0 +=3D tincr; >> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 tincr +=3D tincr2; >> +=C2=A0 =C2=A0 } >> +=C2=A0 =C2=A0 frame->pts =3D frame->nb_samples*(++frame_ctr); >If you're trying to populate a stream, you should be using the aevalsrc >filter, which exists for exactly this purpose. Otherwise just populate >it with zeroes (silence). >>=C2=A0 } >> >> -/**************************************************************/ >> -/* video output */ >> - >> -static AVFrame *alloc_picture(enum AVPixelFormat pix_fmt, int width, in= t height) >> +static void fill_dummy_yuv420p_frame(AVFrame *frame) >>=C2=A0 { >There's a testsrc filter, or just fill a frame with zeroes (black). >Don't reinvent the wheel in an example, that discourages people from >using features that exist. This is all copied from the original muxing.c example. These dummy audio/vi= deo frames consist in few lines of code and they are common in doc/example = files. See also encode-audio.c, encode-video.c. Adding a filtering context = to the current example would consequently require to patch (and maybe renam= e) the other files as well. And if you patch in that way, for example, "enc= ode-audio.c" the reader won't focus on the encoding task, because the filte= ring block of code would be somewhat distracting. >> -=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 } >> +=C2=A0 =C2=A0 if (ret < 0) { >You need to check for AVERROR(EAGAIN). >> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 av_log(NULL, AV_LOG_ERROR, >> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 "Error sending frame t= o the encoder (error '%s')\n", av_err2str(ret)); >> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 return ret; Is it really necessary to check AVERROR(EAGAIN) when sending the frame to t= he encoder, in this specific case? The function is written in a way that the encoder's output is always read b= efore sending new frames. Note that in the original muxing.c this is not ch= ecked as well >> -=C2=A0 =C2=A0 return write_frame(oc, ost->enc, ost->st, get_video_frame= (ost), ost->tmp_pkt); >> +=C2=A0 =C2=A0 enum AVMediaType *type =3D (enum AVMediaType *)(fr->opaqu= e); >Why are you reading from the opaque structure of the frame. Are you sure >this is what you wanted to do? Yes, it just stores an additional info for the frame (it says if the frame = contains video or audio data), which will be used later in "frame_exceeds_s= tream_duration()" function. >>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 "The output forma= t is automatically guessed according to the file extension.\n" >> -=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 "Raw images can also b= e output by using '%%d' in the filename.\n" >> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 "BMP or JPEG images ca= n also be output by using '%%d' in the filename.\n" >>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 "\n", argv[0]); >> -=C2=A0 =C2=A0 =C2=A0 =C2=A0 return 1; >> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 return AVERROR_EXIT; >This return value is sent to the operating system with the exit() system >call so you don't actually want to return an AVERROR value here. I replaced it with return 1. I also allocated AVCodecParameter with the proper alloc() function, as Andr= eas suggested. A new patch is attached to this mail. ------=_Part_8300122_1458823203.1655600743317 Content-Type: text/x-patch Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="0001-doc-examples-muxing-code-rewrite-with-improved-reada.patch" Content-ID: RnJvbSBiZDBkNGJhZDIxOTAwYzM2YWE4MmRlYzU0MTU1ODYyZmVhZWZkMDhjIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBwYW9sbyA8cGFvbG9wcjk3NkBnbWFpbC5jb20+CkRhdGU6IFN1 biwgMTkgSnVuIDIwMjIgMDI6MDQ6MDcgKzAyMDAKU3ViamVjdDogW1BBVENIXSBkb2MvZXhhbXBs ZXMvbXV4aW5nOiBjb2RlIHJld3JpdGUgd2l0aCBpbXByb3ZlZCByZWFkYWJpbGl0eQogYW5kIGZp eGVkIGlzc3VlcwoKICAgICAgICAgICAgICAgSW1wcm92ZWQgcmVhZGFiaWxpdHkgd2l0aCBmdW5j dGlvbnMgdGhhdCBoYXZlIGNsZWFyZXIgcHJvdG90eXBlcyBhbmQgdGhhdCBkb24ndCBtaXggbG9n aWNhbGx5IHVucmVsYXRlZCBibG9ja3Mgb2YgY29kZQoKICAgICAgICAgICAgICAgRml4ZWQgaXNz dWVzIGluIGNhc2Ugb2YgdW5zdXBwb3J0ZWQgZXh0ZW5zaW9ucwoKICAgICAgICAgICAgICAgRml4 ZWQgbWVtb3J5IGxlYWtzIG9uIGVycm9ycywgd2hpY2ggYXJlIG5vdyBwcm9wZXJseSBwcm9wYWdh dGVkIHRvIHRoZSBtYWluKCkgZnVuY3Rpb24KCiAgICAgICAgICAgICAgIEZpeGVkIGlzc3VlIG9u IHJhdyBpbWFnZXMgb3V0cHV0CgogICAgICAgICAgICAgICBmcHJpbnRmKCkgcmVwbGFjZWQgd2l0 aCBhdl9sb2coKQoKICAgICAgICAgICAgICAgSW5wdXQgQS9WIHBhcmFtZXRlcnMgZXhwb3NlZCBp biB0aGUgbWFpbigpIGZ1bmN0aW9uIGFuZCBlYXNpZXIgdG8gY3VzdG9taXplCi0tLQogZG9jL2V4 YW1wbGVzL211eGluZy5jIHwgOTE5ICsrKysrKysrKysrKysrKysrKystLS0tLS0tLS0tLS0tLS0t LS0tLS0tLQogMSBmaWxlIGNoYW5nZWQsIDQyMyBpbnNlcnRpb25zKCspLCA0OTYgZGVsZXRpb25z KC0pCgpkaWZmIC0tZ2l0IGEvZG9jL2V4YW1wbGVzL211eGluZy5jIGIvZG9jL2V4YW1wbGVzL211 eGluZy5jCmluZGV4IDNhY2I3NzgzMjIuLmE5MTEzNGFjN2MgMTAwNjQ0Ci0tLSBhL2RvYy9leGFt cGxlcy9tdXhpbmcuYworKysgYi9kb2MvZXhhbXBsZXMvbXV4aW5nLmMKQEAgLTEsNSArMSw2IEBA CiAvKgogICogQ29weXJpZ2h0IChjKSAyMDAzIEZhYnJpY2UgQmVsbGFyZAorICogKENvZGUgcmV3 cml0ZSBieSBQYW9sbyBQcmV0ZSwgMjAyMikKICAqCiAgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBn cmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5CiAg KiBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRo ZSAiU29mdHdhcmUiKSwgdG8gZGVhbApAQCAtMjQsNjI1ICsyNSw1NTEgQEAKICAqIEBmaWxlCiAg KiBsaWJhdmZvcm1hdCBBUEkgZXhhbXBsZS4KICAqCi0gKiBPdXRwdXQgYSBtZWRpYSBmaWxlIGlu IGFueSBzdXBwb3J0ZWQgbGliYXZmb3JtYXQgZm9ybWF0LiBUaGUgZGVmYXVsdAorICogT3V0cHV0 IGEgbWVkaWEgZmlsZSBpbiBhIHNldCBvZiBzdXBwb3J0ZWQgbGliYXZmb3JtYXQgZm9ybWF0cy4g VGhlIGRlZmF1bHQKICAqIGNvZGVjcyBhcmUgdXNlZC4KICAqIEBleGFtcGxlIG11eGluZy5jCiAg Ki8KIAotI2luY2x1ZGUgPHN0ZGxpYi5oPgotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0jaW5jbHVkZSA8 c3RyaW5nLmg+Ci0jaW5jbHVkZSA8bWF0aC5oPgotCi0jaW5jbHVkZSA8bGliYXZ1dGlsL2F2YXNz ZXJ0Lmg+Ci0jaW5jbHVkZSA8bGliYXZ1dGlsL2NoYW5uZWxfbGF5b3V0Lmg+Ci0jaW5jbHVkZSA8 bGliYXZ1dGlsL29wdC5oPgotI2luY2x1ZGUgPGxpYmF2dXRpbC9tYXRoZW1hdGljcy5oPgotI2lu Y2x1ZGUgPGxpYmF2dXRpbC90aW1lc3RhbXAuaD4KICNpbmNsdWRlIDxsaWJhdmNvZGVjL2F2Y29k ZWMuaD4KICNpbmNsdWRlIDxsaWJhdmZvcm1hdC9hdmZvcm1hdC5oPgotI2luY2x1ZGUgPGxpYnN3 c2NhbGUvc3dzY2FsZS5oPgorI2luY2x1ZGUgPGxpYmF2dXRpbC90aW1lc3RhbXAuaD4KICNpbmNs dWRlIDxsaWJzd3Jlc2FtcGxlL3N3cmVzYW1wbGUuaD4KKyNpbmNsdWRlIDxsaWJzd3NjYWxlL3N3 c2NhbGUuaD4KIAotI2RlZmluZSBTVFJFQU1fRFVSQVRJT04gICAxMC4wCi0jZGVmaW5lIFNUUkVB TV9GUkFNRV9SQVRFIDI1IC8qIDI1IGltYWdlcy9zICovCi0jZGVmaW5lIFNUUkVBTV9QSVhfRk1U ICAgIEFWX1BJWF9GTVRfWVVWNDIwUCAvKiBkZWZhdWx0IHBpeF9mbXQgKi8KLQotI2RlZmluZSBT Q0FMRV9GTEFHUyBTV1NfQklDVUJJQworI2RlZmluZSBWSURFT19GUkFNRV9SQVRFIDI1IC8qIDI1 IGltYWdlcy9zICovCisjZGVmaW5lIFZJREVPX1NDQUxFX0ZMQUdTIFNXU19CSUNVQklDCisjZGVm aW5lIFNUUkVBTV9EVVJBVElPTiAxMC4wIC8qIDEwIHNlY29uZHMgKi8KIAotLy8gYSB3cmFwcGVy IGFyb3VuZCBhIHNpbmdsZSBvdXRwdXQgQVZTdHJlYW0KLXR5cGVkZWYgc3RydWN0IE91dHB1dFN0 cmVhbSB7Ci0gICAgQVZTdHJlYW0gKnN0OwotICAgIEFWQ29kZWNDb250ZXh0ICplbmM7CitzdGF0 aWMgdm9pZCBsb2dfZXJyb3IoY29uc3QgY2hhciAqcywgaW50ICpudW0pCit7CisgICAgaWYgKG51 bSkKKyAgICAgICAgYXZfbG9nKE5VTEwsIEFWX0xPR19FUlJPUiwgIiVzIChlcnJvciAnJXMnKVxu IiwgcywgYXZfZXJyMnN0cigqbnVtKSk7CisgICAgZWxzZQorICAgICAgICBhdl9sb2coTlVMTCwg QVZfTE9HX0VSUk9SLCAiJXNcbiIsIHMpOworfQogCi0gICAgLyogcHRzIG9mIHRoZSBuZXh0IGZy YW1lIHRoYXQgd2lsbCBiZSBnZW5lcmF0ZWQgKi8KLSAgICBpbnQ2NF90IG5leHRfcHRzOwotICAg IGludCBzYW1wbGVzX2NvdW50Oworc3RhdGljIGludCBtdXhfZW5jb2RlZF9wa3QoQVZQYWNrZXQg Km91dF9wa3QsIEFWRm9ybWF0Q29udGV4dCAqb3V0X2ZtdF9jdHgsCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBlbnVtIEFWTWVkaWFUeXBlIHR5cGUpCit7CisgICAgaW50IHJldDsKKyAg ICBBVlJhdGlvbmFsIGVuY190aW1lX2Jhc2UsIHN0cl90aW1lX2Jhc2U7CiAKLSAgICBBVkZyYW1l ICpmcmFtZTsKLSAgICBBVkZyYW1lICp0bXBfZnJhbWU7CisgICAgaWYgKG91dF9mbXRfY3R4LT5z dHJlYW1zWzBdLT5jb2RlY3Bhci0+Y29kZWNfdHlwZSA9PSB0eXBlKQorICAgICAgICBvdXRfcGt0 LT5zdHJlYW1faW5kZXggPSAwOworICAgIGVsc2UgaWYgKChvdXRfZm10X2N0eC0+bmJfc3RyZWFt cyA+IDEpICYmICh0eXBlID09IEFWTUVESUFfVFlQRV9WSURFTykpCisgICAgICAgIG91dF9wa3Qt PnN0cmVhbV9pbmRleCA9IDE7CisgICAgc3RyX3RpbWVfYmFzZSA9IG91dF9mbXRfY3R4LT5zdHJl YW1zW291dF9wa3QtPnN0cmVhbV9pbmRleF0tPnRpbWVfYmFzZTsKIAotICAgIEFWUGFja2V0ICp0 bXBfcGt0OworICAgIGlmICh0eXBlID09IEFWTUVESUFfVFlQRV9BVURJTykKKyAgICAgICAgZW5j X3RpbWVfYmFzZSA9ICgoQVZSYXRpb25hbCAqKW91dF9mbXRfY3R4LT5vcGFxdWUpWzBdOworICAg IGVsc2UKKyAgICAgICAgZW5jX3RpbWVfYmFzZSA9ICgoQVZSYXRpb25hbCAqKW91dF9mbXRfY3R4 LT5vcGFxdWUpWzFdOwogCi0gICAgZmxvYXQgdCwgdGluY3IsIHRpbmNyMjsKKyAgICBhdl9wYWNr ZXRfcmVzY2FsZV90cyhvdXRfcGt0LCBlbmNfdGltZV9iYXNlLCBzdHJfdGltZV9iYXNlKTsKIAot ICAgIHN0cnVjdCBTd3NDb250ZXh0ICpzd3NfY3R4OwotICAgIHN0cnVjdCBTd3JDb250ZXh0ICpz d3JfY3R4OwotfSBPdXRwdXRTdHJlYW07CisgICAgYXZfbG9nKE5VTEwsIEFWX0xPR19JTkZPLCAi c3RyZWFtX2luZGV4PSVkLCBzaXplPSVkLCBwdHNfdGltZT0lc1xuIiwKKyAgICAgICAgICAgb3V0 X3BrdC0+c3RyZWFtX2luZGV4LAorICAgICAgICAgICBvdXRfcGt0LT5zaXplLCBhdl90czJ0aW1l c3RyKG91dF9wa3QtPnB0cywgJnN0cl90aW1lX2Jhc2UpKTsKIAotc3RhdGljIHZvaWQgbG9nX3Bh Y2tldChjb25zdCBBVkZvcm1hdENvbnRleHQgKmZtdF9jdHgsIGNvbnN0IEFWUGFja2V0ICpwa3Qp Ci17Ci0gICAgQVZSYXRpb25hbCAqdGltZV9iYXNlID0gJmZtdF9jdHgtPnN0cmVhbXNbcGt0LT5z dHJlYW1faW5kZXhdLT50aW1lX2Jhc2U7CisgICAgaWYgKChyZXQgPSBhdl9pbnRlcmxlYXZlZF93 cml0ZV9mcmFtZShvdXRfZm10X2N0eCwgb3V0X3BrdCkpIDwgMCkKKyAgICAgICAgbG9nX2Vycm9y KCJFcnJvciBjYWxsaW5nIGF2X2ludGVybGVhdmVkX3dyaXRlX2ZyYW1lKCkiLCAmcmV0KTsKIAot ICAgIHByaW50ZigicHRzOiVzIHB0c190aW1lOiVzIGR0czolcyBkdHNfdGltZTolcyBkdXJhdGlv bjolcyBkdXJhdGlvbl90aW1lOiVzIHN0cmVhbV9pbmRleDolZFxuIiwKLSAgICAgICAgICAgYXZf dHMyc3RyKHBrdC0+cHRzKSwgYXZfdHMydGltZXN0cihwa3QtPnB0cywgdGltZV9iYXNlKSwKLSAg ICAgICAgICAgYXZfdHMyc3RyKHBrdC0+ZHRzKSwgYXZfdHMydGltZXN0cihwa3QtPmR0cywgdGlt ZV9iYXNlKSwKLSAgICAgICAgICAgYXZfdHMyc3RyKHBrdC0+ZHVyYXRpb24pLCBhdl90czJ0aW1l c3RyKHBrdC0+ZHVyYXRpb24sIHRpbWVfYmFzZSksCi0gICAgICAgICAgIHBrdC0+c3RyZWFtX2lu ZGV4KTsKKyAgICByZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgaW50IHdyaXRlX2ZyYW1lKEFWRm9y bWF0Q29udGV4dCAqZm10X2N0eCwgQVZDb2RlY0NvbnRleHQgKmMsCi0gICAgICAgICAgICAgICAg ICAgICAgIEFWU3RyZWFtICpzdCwgQVZGcmFtZSAqZnJhbWUsIEFWUGFja2V0ICpwa3QpCitzdGF0 aWMgaW50IGlzX2V4dGVuc2lvbl9zdXBwb3J0ZWQoY29uc3QgY2hhciAqZmlsZW5hbWUpCiB7Ci0g ICAgaW50IHJldDsKLQotICAgIC8vIHNlbmQgdGhlIGZyYW1lIHRvIHRoZSBlbmNvZGVyCi0gICAg cmV0ID0gYXZjb2RlY19zZW5kX2ZyYW1lKGMsIGZyYW1lKTsKLSAgICBpZiAocmV0IDwgMCkgewot ICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkVycm9yIHNlbmRpbmcgYSBmcmFtZSB0byB0aGUgZW5j b2RlcjogJXNcbiIsCi0gICAgICAgICAgICAgICAgYXZfZXJyMnN0cihyZXQpKTsKLSAgICAgICAg ZXhpdCgxKTsKLSAgICB9Ci0KLSAgICB3aGlsZSAocmV0ID49IDApIHsKLSAgICAgICAgcmV0ID0g YXZjb2RlY19yZWNlaXZlX3BhY2tldChjLCBwa3QpOwotICAgICAgICBpZiAocmV0ID09IEFWRVJS T1IoRUFHQUlOKSB8fCByZXQgPT0gQVZFUlJPUl9FT0YpCi0gICAgICAgICAgICBicmVhazsKLSAg ICAgICAgZWxzZSBpZiAocmV0IDwgMCkgewotICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJF cnJvciBlbmNvZGluZyBhIGZyYW1lOiAlc1xuIiwgYXZfZXJyMnN0cihyZXQpKTsKLSAgICAgICAg ICAgIGV4aXQoMSk7Ci0gICAgICAgIH0KKyAgICBjb25zdCBjaGFyICpleHRlbnNpb25zW10gPSB7 Ii5hYWMiLCAiLmF2aSIsICIuYm1wIiwgIi5qcGVnIiwgIi5ta2EiLAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAiLm1rdiIsICIubW92IiwgIi5tcDQiLCAiLmZsdiIsICAiLnRzIn07 CisgICAgaW50IGksIHNpemUgPSBzaXplb2YoZXh0ZW5zaW9ucykgLyBzaXplb2YoZXh0ZW5zaW9u c1swXSk7CisgICAgY2hhciAqZG90ID0gc3RycmNocihmaWxlbmFtZSwgJy4nKTsKIAotICAgICAg ICAvKiByZXNjYWxlIG91dHB1dCBwYWNrZXQgdGltZXN0YW1wIHZhbHVlcyBmcm9tIGNvZGVjIHRv IHN0cmVhbSB0aW1lYmFzZSAqLwotICAgICAgICBhdl9wYWNrZXRfcmVzY2FsZV90cyhwa3QsIGMt PnRpbWVfYmFzZSwgc3QtPnRpbWVfYmFzZSk7Ci0gICAgICAgIHBrdC0+c3RyZWFtX2luZGV4ID0g c3QtPmluZGV4OwotCi0gICAgICAgIC8qIFdyaXRlIHRoZSBjb21wcmVzc2VkIGZyYW1lIHRvIHRo ZSBtZWRpYSBmaWxlLiAqLwotICAgICAgICBsb2dfcGFja2V0KGZtdF9jdHgsIHBrdCk7Ci0gICAg ICAgIHJldCA9IGF2X2ludGVybGVhdmVkX3dyaXRlX2ZyYW1lKGZtdF9jdHgsIHBrdCk7Ci0gICAg ICAgIC8qIHBrdCBpcyBub3cgYmxhbmsgKGF2X2ludGVybGVhdmVkX3dyaXRlX2ZyYW1lKCkgdGFr ZXMgb3duZXJzaGlwIG9mCi0gICAgICAgICAqIGl0cyBjb250ZW50cyBhbmQgcmVzZXRzIHBrdCks IHNvIHRoYXQgbm8gdW5yZWZlcmVuY2luZyBpcyBuZWNlc3NhcnkuCi0gICAgICAgICAqIFRoaXMg d291bGQgYmUgZGlmZmVyZW50IGlmIG9uZSB1c2VkIGF2X3dyaXRlX2ZyYW1lKCkuICovCi0gICAg ICAgIGlmIChyZXQgPCAwKSB7Ci0gICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkVycm9yIHdo aWxlIHdyaXRpbmcgb3V0cHV0IHBhY2tldDogJXNcbiIsIGF2X2VycjJzdHIocmV0KSk7Ci0gICAg ICAgICAgICBleGl0KDEpOwotICAgICAgICB9CisgICAgZm9yIChpID0gMDsgaSA8IHNpemU7IGkr KykgeworICAgICAgICBpZiAoZG90ICYmICFzdHJjbXAoZG90LCBleHRlbnNpb25zW2ldKSkKKyAg ICAgICAgICAgIHJldHVybiAxOwogICAgIH0KIAotICAgIHJldHVybiByZXQgPT0gQVZFUlJPUl9F T0YgPyAxIDogMDsKKyAgICBsb2dfZXJyb3IoIkZpbGUgZXh0ZW5zaW9uIG5vdCBzdXBwb3J0ZWQi LCBOVUxMKTsKKyAgICBhdl9sb2coTlVMTCwgQVZfTE9HX1dBUk5JTkcsICJQbGVhc2UgY2hvb3Nl IG9uZSBvZiB0aGUgZm9sbG93aW5nIGV4dGVuc2lvbnM6ICIpOworICAgIGZvciAoaSA9IDA7IGkg PCBzaXplIC0gMTsgaSsrKQorICAgICAgICBhdl9sb2coTlVMTCwgQVZfTE9HX1dBUk5JTkcsICIl cywgIiwgZXh0ZW5zaW9uc1tpXSk7CisgICAgYXZfbG9nKE5VTEwsIEFWX0xPR19XQVJOSU5HLCAi JXNcbiIsIGV4dGVuc2lvbnNbc2l6ZS0xXSk7CisKKyAgICByZXR1cm4gMDsKIH0KIAotLyogQWRk IGFuIG91dHB1dCBzdHJlYW0uICovCi1zdGF0aWMgdm9pZCBhZGRfc3RyZWFtKE91dHB1dFN0cmVh bSAqb3N0LCBBVkZvcm1hdENvbnRleHQgKm9jLAotICAgICAgICAgICAgICAgICAgICAgICBjb25z dCBBVkNvZGVjICoqY29kZWMsCi0gICAgICAgICAgICAgICAgICAgICAgIGVudW0gQVZDb2RlY0lE IGNvZGVjX2lkKQorc3RhdGljIGludCBnZXRfZGVmYXVsdF9lbmNfcGFyYW1zKEFWQ29kZWNQYXJh bWV0ZXJzICpwYXJhbXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg Y2hhciAqZm5hbWUsIGVudW0gQVZNZWRpYVR5cGUgdHlwZSkKIHsKLSAgICBBVkNvZGVjQ29udGV4 dCAqYzsKLSAgICBpbnQgaTsKLQotICAgIC8qIGZpbmQgdGhlIGVuY29kZXIgKi8KLSAgICAqY29k ZWMgPSBhdmNvZGVjX2ZpbmRfZW5jb2Rlcihjb2RlY19pZCk7Ci0gICAgaWYgKCEoKmNvZGVjKSkg ewotICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkNvdWxkIG5vdCBmaW5kIGVuY29kZXIgZm9yICcl cydcbiIsCi0gICAgICAgICAgICAgICAgYXZjb2RlY19nZXRfbmFtZShjb2RlY19pZCkpOwotICAg ICAgICBleGl0KDEpOwotICAgIH0KLQotICAgIG9zdC0+dG1wX3BrdCA9IGF2X3BhY2tldF9hbGxv YygpOwotICAgIGlmICghb3N0LT50bXBfcGt0KSB7Ci0gICAgICAgIGZwcmludGYoc3RkZXJyLCAi Q291bGQgbm90IGFsbG9jYXRlIEFWUGFja2V0XG4iKTsKLSAgICAgICAgZXhpdCgxKTsKLSAgICB9 Ci0KLSAgICBvc3QtPnN0ID0gYXZmb3JtYXRfbmV3X3N0cmVhbShvYywgTlVMTCk7Ci0gICAgaWYg KCFvc3QtPnN0KSB7Ci0gICAgICAgIGZwcmludGYoc3RkZXJyLCAiQ291bGQgbm90IGFsbG9jYXRl IHN0cmVhbVxuIik7Ci0gICAgICAgIGV4aXQoMSk7Ci0gICAgfQotICAgIG9zdC0+c3QtPmlkID0g b2MtPm5iX3N0cmVhbXMtMTsKLSAgICBjID0gYXZjb2RlY19hbGxvY19jb250ZXh0MygqY29kZWMp OwotICAgIGlmICghYykgewotICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkNvdWxkIG5vdCBhbGxv YyBhbiBlbmNvZGluZyBjb250ZXh0XG4iKTsKLSAgICAgICAgZXhpdCgxKTsKLSAgICB9Ci0gICAg b3N0LT5lbmMgPSBjOwotCi0gICAgc3dpdGNoICgoKmNvZGVjKS0+dHlwZSkgewotICAgIGNhc2Ug QVZNRURJQV9UWVBFX0FVRElPOgotICAgICAgICBjLT5zYW1wbGVfZm10ICA9ICgqY29kZWMpLT5z YW1wbGVfZm10cyA/Ci0gICAgICAgICAgICAoKmNvZGVjKS0+c2FtcGxlX2ZtdHNbMF0gOiBBVl9T QU1QTEVfRk1UX0ZMVFA7Ci0gICAgICAgIGMtPmJpdF9yYXRlICAgID0gNjQwMDA7Ci0gICAgICAg IGMtPnNhbXBsZV9yYXRlID0gNDQxMDA7Ci0gICAgICAgIGlmICgoKmNvZGVjKS0+c3VwcG9ydGVk X3NhbXBsZXJhdGVzKSB7Ci0gICAgICAgICAgICBjLT5zYW1wbGVfcmF0ZSA9ICgqY29kZWMpLT5z dXBwb3J0ZWRfc2FtcGxlcmF0ZXNbMF07Ci0gICAgICAgICAgICBmb3IgKGkgPSAwOyAoKmNvZGVj KS0+c3VwcG9ydGVkX3NhbXBsZXJhdGVzW2ldOyBpKyspIHsKLSAgICAgICAgICAgICAgICBpZiAo KCpjb2RlYyktPnN1cHBvcnRlZF9zYW1wbGVyYXRlc1tpXSA9PSA0NDEwMCkKLSAgICAgICAgICAg ICAgICAgICAgYy0+c2FtcGxlX3JhdGUgPSA0NDEwMDsKLSAgICAgICAgICAgIH0KLSAgICAgICAg fQotICAgICAgICBhdl9jaGFubmVsX2xheW91dF9jb3B5KCZjLT5jaF9sYXlvdXQsICYoQVZDaGFu bmVsTGF5b3V0KUFWX0NIQU5ORUxfTEFZT1VUX1NURVJFTyk7Ci0gICAgICAgIG9zdC0+c3QtPnRp bWVfYmFzZSA9IChBVlJhdGlvbmFsKXsgMSwgYy0+c2FtcGxlX3JhdGUgfTsKLSAgICAgICAgYnJl YWs7Ci0KLSAgICBjYXNlIEFWTUVESUFfVFlQRV9WSURFTzoKLSAgICAgICAgYy0+Y29kZWNfaWQg PSBjb2RlY19pZDsKLQotICAgICAgICBjLT5iaXRfcmF0ZSA9IDQwMDAwMDsKLSAgICAgICAgLyog UmVzb2x1dGlvbiBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgdHdvLiAqLwotICAgICAgICBjLT53aWR0 aCAgICA9IDM1MjsKLSAgICAgICAgYy0+aGVpZ2h0ICAgPSAyODg7Ci0gICAgICAgIC8qIHRpbWVi YXNlOiBUaGlzIGlzIHRoZSBmdW5kYW1lbnRhbCB1bml0IG9mIHRpbWUgKGluIHNlY29uZHMpIGlu IHRlcm1zCi0gICAgICAgICAqIG9mIHdoaWNoIGZyYW1lIHRpbWVzdGFtcHMgYXJlIHJlcHJlc2Vu dGVkLiBGb3IgZml4ZWQtZnBzIGNvbnRlbnQsCi0gICAgICAgICAqIHRpbWViYXNlIHNob3VsZCBi ZSAxL2ZyYW1lcmF0ZSBhbmQgdGltZXN0YW1wIGluY3JlbWVudHMgc2hvdWxkIGJlCi0gICAgICAg ICAqIGlkZW50aWNhbCB0byAxLiAqLwotICAgICAgICBvc3QtPnN0LT50aW1lX2Jhc2UgPSAoQVZS YXRpb25hbCl7IDEsIFNUUkVBTV9GUkFNRV9SQVRFIH07Ci0gICAgICAgIGMtPnRpbWVfYmFzZSAg ICAgICA9IG9zdC0+c3QtPnRpbWVfYmFzZTsKLQotICAgICAgICBjLT5nb3Bfc2l6ZSAgICAgID0g MTI7IC8qIGVtaXQgb25lIGludHJhIGZyYW1lIGV2ZXJ5IHR3ZWx2ZSBmcmFtZXMgYXQgbW9zdCAq LwotICAgICAgICBjLT5waXhfZm10ICAgICAgID0gU1RSRUFNX1BJWF9GTVQ7Ci0gICAgICAgIGlm IChjLT5jb2RlY19pZCA9PSBBVl9DT0RFQ19JRF9NUEVHMlZJREVPKSB7Ci0gICAgICAgICAgICAv KiBqdXN0IGZvciB0ZXN0aW5nLCB3ZSBhbHNvIGFkZCBCLWZyYW1lcyAqLwotICAgICAgICAgICAg Yy0+bWF4X2JfZnJhbWVzID0gMjsKLSAgICAgICAgfQotICAgICAgICBpZiAoYy0+Y29kZWNfaWQg PT0gQVZfQ09ERUNfSURfTVBFRzFWSURFTykgewotICAgICAgICAgICAgLyogTmVlZGVkIHRvIGF2 b2lkIHVzaW5nIG1hY3JvYmxvY2tzIGluIHdoaWNoIHNvbWUgY29lZmZzIG92ZXJmbG93LgotICAg ICAgICAgICAgICogVGhpcyBkb2VzIG5vdCBoYXBwZW4gd2l0aCBub3JtYWwgdmlkZW8sIGl0IGp1 c3QgaGFwcGVucyBoZXJlIGFzCi0gICAgICAgICAgICAgKiB0aGUgbW90aW9uIG9mIHRoZSBjaHJv bWEgcGxhbmUgZG9lcyBub3QgbWF0Y2ggdGhlIGx1bWEgcGxhbmUuICovCi0gICAgICAgICAgICBj LT5tYl9kZWNpc2lvbiA9IDI7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0KLSAgICBkZWZh dWx0OgotICAgICAgICBicmVhazsKKyAgICBBVkZvcm1hdENvbnRleHQgKnRtcF9mY3R4OworICAg IGVudW0gQVZDb2RlY0lEIGlkOworICAgIGNvbnN0IEFWQ29kZWMgKmM7CisgICAgaW50IHJldCA9 IDA7CisKKyAgICBpZiAoKHJldCA9IGF2Zm9ybWF0X2FsbG9jX291dHB1dF9jb250ZXh0MigmdG1w X2ZjdHgsIE5VTEwsIE5VTEwsIGZuYW1lKSkgPCAwKSB7CisgICAgICAgIGxvZ19lcnJvcigiQ291 bGQgbm90IGdldCBkZWZhdWx0IGVuY29kZXIiLCAmcmV0KTsKKyAgICAgICAgcmV0dXJuIEFWRVJS T1JfRVhJVDsKICAgICB9CiAKLSAgICAvKiBTb21lIGZvcm1hdHMgd2FudCBzdHJlYW0gaGVhZGVy cyB0byBiZSBzZXBhcmF0ZS4gKi8KLSAgICBpZiAob2MtPm9mb3JtYXQtPmZsYWdzICYgQVZGTVRf R0xPQkFMSEVBREVSKQotICAgICAgICBjLT5mbGFncyB8PSBBVl9DT0RFQ19GTEFHX0dMT0JBTF9I RUFERVI7Ci19Ci0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKi8KLS8qIGF1ZGlvIG91dHB1dCAqLwotCi1zdGF0aWMgQVZGcmFt ZSAqYWxsb2NfYXVkaW9fZnJhbWUoZW51bSBBVlNhbXBsZUZvcm1hdCBzYW1wbGVfZm10LAotICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEFWQ2hhbm5lbExheW91dCAqY2hh bm5lbF9sYXlvdXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHNhbXBs ZV9yYXRlLCBpbnQgbmJfc2FtcGxlcykKLXsKLSAgICBBVkZyYW1lICpmcmFtZSA9IGF2X2ZyYW1l X2FsbG9jKCk7Ci0gICAgaW50IHJldDsKKyAgICBpZCA9ICh0eXBlID09IEFWTUVESUFfVFlQRV9B VURJTykgPyB0bXBfZmN0eC0+b2Zvcm1hdC0+YXVkaW9fY29kZWMgOgorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHRtcF9mY3R4LT5vZm9ybWF0LT52aWRlb19jb2RlYzsK IAotICAgIGlmICghZnJhbWUpIHsKLSAgICAgICAgZnByaW50ZihzdGRlcnIsICJFcnJvciBhbGxv Y2F0aW5nIGFuIGF1ZGlvIGZyYW1lXG4iKTsKLSAgICAgICAgZXhpdCgxKTsKKyAgICBpZiAoIShj ID0gYXZjb2RlY19maW5kX2VuY29kZXIoaWQpKSkgeworICAgICAgICBhdmZvcm1hdF9mcmVlX2Nv bnRleHQodG1wX2ZjdHgpOworICAgICAgICByZXR1cm4gcmV0OwogICAgIH0KIAotICAgIGZyYW1l LT5mb3JtYXQgPSBzYW1wbGVfZm10OwotICAgIGF2X2NoYW5uZWxfbGF5b3V0X2NvcHkoJmZyYW1l LT5jaF9sYXlvdXQsIGNoYW5uZWxfbGF5b3V0KTsKLSAgICBmcmFtZS0+c2FtcGxlX3JhdGUgPSBz YW1wbGVfcmF0ZTsKLSAgICBmcmFtZS0+bmJfc2FtcGxlcyA9IG5iX3NhbXBsZXM7Ci0KLSAgICBp ZiAobmJfc2FtcGxlcykgewotICAgICAgICByZXQgPSBhdl9mcmFtZV9nZXRfYnVmZmVyKGZyYW1l LCAwKTsKLSAgICAgICAgaWYgKHJldCA8IDApIHsKLSAgICAgICAgICAgIGZwcmludGYoc3RkZXJy LCAiRXJyb3IgYWxsb2NhdGluZyBhbiBhdWRpbyBidWZmZXJcbiIpOwotICAgICAgICAgICAgZXhp dCgxKTsKLSAgICAgICAgfQorICAgIHBhcmFtcy0+Y29kZWNfdHlwZSA9IGMtPnR5cGU7CisgICAg cGFyYW1zLT5jb2RlY19pZCAgID0gYy0+IGlkOworICAgIGlmIChjLT50eXBlID09IEFWTUVESUFf VFlQRV9BVURJTykgeworICAgICAgICBwYXJhbXMtPmZvcm1hdCAgICAgID0gYy0+c2FtcGxlX2Zt dHMgPworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYy0+c2FtcGxlX2ZtdHNbMF0gOiBB Vl9TQU1QTEVfRk1UX0ZMVFA7CisgICAgICAgIHBhcmFtcy0+Y2hfbGF5b3V0ICAgPSAoQVZDaGFu bmVsTGF5b3V0KUFWX0NIQU5ORUxfTEFZT1VUX1NURVJFTzsKKyAgICAgICAgcGFyYW1zLT5zYW1w bGVfcmF0ZSA9IGMtPnN1cHBvcnRlZF9zYW1wbGVyYXRlcyA/CisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBjLT5zdXBwb3J0ZWRfc2FtcGxlcmF0ZXNbMF0gOiA0NDEwMDsKKyAgICB9IGVs c2UgaWYgKGMtPnR5cGUgPT0gQVZNRURJQV9UWVBFX1ZJREVPKSB7CisgICAgICAgIHBhcmFtcy0+ Zm9ybWF0ID0gYy0+cGl4X2ZtdHMgPyBjLT5waXhfZm10c1swXSA6IEFWX1BJWF9GTVRfWVVWNDIw UDsKICAgICB9CisgICAgYXZmb3JtYXRfZnJlZV9jb250ZXh0KHRtcF9mY3R4KTsKIAotICAgIHJl dHVybiBmcmFtZTsKKyAgICByZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgdm9pZCBvcGVuX2F1ZGlv KEFWRm9ybWF0Q29udGV4dCAqb2MsIGNvbnN0IEFWQ29kZWMgKmNvZGVjLAotICAgICAgICAgICAg ICAgICAgICAgICBPdXRwdXRTdHJlYW0gKm9zdCwgQVZEaWN0aW9uYXJ5ICpvcHRfYXJnKQorc3Rh dGljIGludCBpbml0X2VuY29kZXIoQVZDb2RlY0NvbnRleHQgKiplbmNfY3R4LCBBVkNvZGVjUGFy YW1ldGVycyAqcGFyYW1zKQogewotICAgIEFWQ29kZWNDb250ZXh0ICpjOwotICAgIGludCBuYl9z YW1wbGVzOworICAgIGNvbnN0IEFWQ29kZWMgKmNvZGVjID0gTlVMTDsKICAgICBpbnQgcmV0Owot ICAgIEFWRGljdGlvbmFyeSAqb3B0ID0gTlVMTDsKIAotICAgIGMgPSBvc3QtPmVuYzsKLQotICAg IC8qIG9wZW4gaXQgKi8KLSAgICBhdl9kaWN0X2NvcHkoJm9wdCwgb3B0X2FyZywgMCk7Ci0gICAg cmV0ID0gYXZjb2RlY19vcGVuMihjLCBjb2RlYywgJm9wdCk7Ci0gICAgYXZfZGljdF9mcmVlKCZv cHQpOwotICAgIGlmIChyZXQgPCAwKSB7Ci0gICAgICAgIGZwcmludGYoc3RkZXJyLCAiQ291bGQg bm90IG9wZW4gYXVkaW8gY29kZWM6ICVzXG4iLCBhdl9lcnIyc3RyKHJldCkpOwotICAgICAgICBl eGl0KDEpOworICAgIGlmICghKGNvZGVjID0gYXZjb2RlY19maW5kX2VuY29kZXIocGFyYW1zLT5j b2RlY19pZCkpKSB7CisgICAgICAgIGxvZ19lcnJvcigiQ291bGQgbm90IGZpbmQgZW5jb2RlciIs IE5VTEwpOworICAgICAgICByZXR1cm4gQVZFUlJPUl9FWElUOwogICAgIH0KIAotICAgIC8qIGlu aXQgc2lnbmFsIGdlbmVyYXRvciAqLwotICAgIG9zdC0+dCAgICAgPSAwOwotICAgIG9zdC0+dGlu Y3IgPSAyICogTV9QSSAqIDExMC4wIC8gYy0+c2FtcGxlX3JhdGU7Ci0gICAgLyogaW5jcmVtZW50 IGZyZXF1ZW5jeSBieSAxMTAgSHogcGVyIHNlY29uZCAqLwotICAgIG9zdC0+dGluY3IyID0gMiAq IE1fUEkgKiAxMTAuMCAvIGMtPnNhbXBsZV9yYXRlIC8gYy0+c2FtcGxlX3JhdGU7Ci0KLSAgICBp ZiAoYy0+Y29kZWMtPmNhcGFiaWxpdGllcyAmIEFWX0NPREVDX0NBUF9WQVJJQUJMRV9GUkFNRV9T SVpFKQotICAgICAgICBuYl9zYW1wbGVzID0gMTAwMDA7Ci0gICAgZWxzZQotICAgICAgICBuYl9z YW1wbGVzID0gYy0+ZnJhbWVfc2l6ZTsKLQotICAgIG9zdC0+ZnJhbWUgICAgID0gYWxsb2NfYXVk aW9fZnJhbWUoYy0+c2FtcGxlX2ZtdCwgJmMtPmNoX2xheW91dCwKLSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGMtPnNhbXBsZV9yYXRlLCBuYl9zYW1wbGVzKTsKLSAgICBv c3QtPnRtcF9mcmFtZSA9IGFsbG9jX2F1ZGlvX2ZyYW1lKEFWX1NBTVBMRV9GTVRfUzE2LCAmYy0+ Y2hfbGF5b3V0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYy0+c2Ft cGxlX3JhdGUsIG5iX3NhbXBsZXMpOwotCi0gICAgLyogY29weSB0aGUgc3RyZWFtIHBhcmFtZXRl cnMgdG8gdGhlIG11eGVyICovCi0gICAgcmV0ID0gYXZjb2RlY19wYXJhbWV0ZXJzX2Zyb21fY29u dGV4dChvc3QtPnN0LT5jb2RlY3BhciwgYyk7Ci0gICAgaWYgKHJldCA8IDApIHsKLSAgICAgICAg ZnByaW50ZihzdGRlcnIsICJDb3VsZCBub3QgY29weSB0aGUgc3RyZWFtIHBhcmFtZXRlcnNcbiIp OwotICAgICAgICBleGl0KDEpOworICAgIGlmICghKCplbmNfY3R4ID0gYXZjb2RlY19hbGxvY19j b250ZXh0Myhjb2RlYykpKSB7CisgICAgICAgIGxvZ19lcnJvcigiQ291bGQgbm90IGFsbG9jYXRl IHRoZSBlbmNvZGluZyBjb250ZXh0IiwgTlVMTCk7CisgICAgICAgIHJldHVybiBBVkVSUk9SX0VY SVQ7CiAgICAgfQogCi0gICAgLyogY3JlYXRlIHJlc2FtcGxlciBjb250ZXh0ICovCi0gICAgb3N0 LT5zd3JfY3R4ID0gc3dyX2FsbG9jKCk7Ci0gICAgaWYgKCFvc3QtPnN3cl9jdHgpIHsKLSAgICAg ICAgZnByaW50ZihzdGRlcnIsICJDb3VsZCBub3QgYWxsb2NhdGUgcmVzYW1wbGVyIGNvbnRleHRc biIpOwotICAgICAgICBleGl0KDEpOworICAgICgqZW5jX2N0eCktPmNvZGVjX2lkICAgPSBwYXJh bXMtPmNvZGVjX2lkOworICAgICgqZW5jX2N0eCktPmNvZGVjX3R5cGUgPSBwYXJhbXMtPmNvZGVj X3R5cGU7CisgICAgaWYgKHBhcmFtcy0+Y29kZWNfdHlwZSA9PSBBVk1FRElBX1RZUEVfQVVESU8p IHsKKyAgICAgICAgKCplbmNfY3R4KS0+c2FtcGxlX2ZtdCAgPSBwYXJhbXMtPmZvcm1hdDsKKyAg ICAgICAgKCplbmNfY3R4KS0+c2FtcGxlX3JhdGUgPSBwYXJhbXMtPnNhbXBsZV9yYXRlOworICAg ICAgICAoKmVuY19jdHgpLT50aW1lX2Jhc2UgICA9IGF2X21ha2VfcSgxLCBwYXJhbXMtPnNhbXBs ZV9yYXRlKTsKKyAgICAgICAgKCplbmNfY3R4KS0+Y2hfbGF5b3V0ICAgPSBwYXJhbXMtPmNoX2xh eW91dDsKKyAgICB9IGVsc2UgaWYgKHBhcmFtcy0+Y29kZWNfdHlwZSA9PSBBVk1FRElBX1RZUEVf VklERU8pIHsKKyAgICAgICAgKCplbmNfY3R4KS0+d2lkdGggICAgICA9IHBhcmFtcy0+d2lkdGg7 CisgICAgICAgICgqZW5jX2N0eCktPmhlaWdodCAgICAgPSBwYXJhbXMtPmhlaWdodDsKKyAgICAg ICAgKCplbmNfY3R4KS0+dGltZV9iYXNlICA9IGF2X21ha2VfcSgxLCBWSURFT19GUkFNRV9SQVRF KTsKKyAgICAgICAgKCplbmNfY3R4KS0+Z29wX3NpemUgICA9IDEyOworICAgICAgICAoKmVuY19j dHgpLT5waXhfZm10ICAgID0gcGFyYW1zLT5mb3JtYXQ7CiAgICAgfQogCi0gICAgLyogc2V0IG9w dGlvbnMgKi8KLSAgICBhdl9vcHRfc2V0X2NobGF5b3V0ICAob3N0LT5zd3JfY3R4LCAiaW5fY2hs YXlvdXQiLCAgICAgICAmYy0+Y2hfbGF5b3V0LCAgICAgIDApOwotICAgIGF2X29wdF9zZXRfaW50 ICAgICAgIChvc3QtPnN3cl9jdHgsICJpbl9zYW1wbGVfcmF0ZSIsICAgICBjLT5zYW1wbGVfcmF0 ZSwgICAgMCk7Ci0gICAgYXZfb3B0X3NldF9zYW1wbGVfZm10KG9zdC0+c3dyX2N0eCwgImluX3Nh bXBsZV9mbXQiLCAgICAgIEFWX1NBTVBMRV9GTVRfUzE2LCAwKTsKLSAgICBhdl9vcHRfc2V0X2No bGF5b3V0ICAob3N0LT5zd3JfY3R4LCAib3V0X2NobGF5b3V0IiwgICAgICAmYy0+Y2hfbGF5b3V0 LCAgICAgIDApOwotICAgIGF2X29wdF9zZXRfaW50ICAgICAgIChvc3QtPnN3cl9jdHgsICJvdXRf c2FtcGxlX3JhdGUiLCAgICBjLT5zYW1wbGVfcmF0ZSwgICAgMCk7Ci0gICAgYXZfb3B0X3NldF9z YW1wbGVfZm10KG9zdC0+c3dyX2N0eCwgIm91dF9zYW1wbGVfZm10IiwgICAgIGMtPnNhbXBsZV9m bXQsICAgICAwKTsKLQotICAgIC8qIGluaXRpYWxpemUgdGhlIHJlc2FtcGxpbmcgY29udGV4dCAq LwotICAgIGlmICgocmV0ID0gc3dyX2luaXQob3N0LT5zd3JfY3R4KSkgPCAwKSB7Ci0gICAgICAg IGZwcmludGYoc3RkZXJyLCAiRmFpbGVkIHRvIGluaXRpYWxpemUgdGhlIHJlc2FtcGxpbmcgY29u dGV4dFxuIik7Ci0gICAgICAgIGV4aXQoMSk7CisgICAgaWYgKChyZXQgPSBhdmNvZGVjX29wZW4y KCplbmNfY3R4LCBjb2RlYywgTlVMTCkpIDwgMCkgeworICAgICAgICBsb2dfZXJyb3IoIkNvdWxk IG5vdCBvcGVuIGlucHV0IGNvZGVjIiwgJnJldCk7CisgICAgICAgIHJldHVybiByZXQ7CisgICAg fSBlbHNlIHsKKyAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogfQogCi0vKiBQcmVwYXJlIGEgMTYg Yml0IGR1bW15IGF1ZGlvIGZyYW1lIG9mICdmcmFtZV9zaXplJyBzYW1wbGVzIGFuZAotICogJ25i X2NoYW5uZWxzJyBjaGFubmVscy4gKi8KLXN0YXRpYyBBVkZyYW1lICpnZXRfYXVkaW9fZnJhbWUo T3V0cHV0U3RyZWFtICpvc3QpCitzdGF0aWMgaW50IGluaXRfYXVkaW9fY29udmVydChzdHJ1Y3Qg U3dyQ29udGV4dCAqKmN0eCwgQVZDb2RlY1BhcmFtZXRlcnMgKmluX3BhcmFtcywKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIEFWQ29kZWNQYXJhbWV0ZXJzICpvdXRfcGFyYW1zKQogewot ICAgIEFWRnJhbWUgKmZyYW1lID0gb3N0LT50bXBfZnJhbWU7Ci0gICAgaW50IGosIGksIHY7Ci0g ICAgaW50MTZfdCAqcSA9IChpbnQxNl90KilmcmFtZS0+ZGF0YVswXTsKLQotICAgIC8qIGNoZWNr IGlmIHdlIHdhbnQgdG8gZ2VuZXJhdGUgbW9yZSBmcmFtZXMgKi8KLSAgICBpZiAoYXZfY29tcGFy ZV90cyhvc3QtPm5leHRfcHRzLCBvc3QtPmVuYy0+dGltZV9iYXNlLAotICAgICAgICAgICAgICAg ICAgICAgIFNUUkVBTV9EVVJBVElPTiwgKEFWUmF0aW9uYWwpeyAxLCAxIH0pID4gMCkKLSAgICAg ICAgcmV0dXJuIE5VTEw7Ci0KLSAgICBmb3IgKGogPSAwOyBqIDxmcmFtZS0+bmJfc2FtcGxlczsg aisrKSB7Ci0gICAgICAgIHYgPSAoaW50KShzaW4ob3N0LT50KSAqIDEwMDAwKTsKLSAgICAgICAg Zm9yIChpID0gMDsgaSA8IG9zdC0+ZW5jLT5jaF9sYXlvdXQubmJfY2hhbm5lbHM7IGkrKykKLSAg ICAgICAgICAgICpxKysgPSB2OwotICAgICAgICBvc3QtPnQgICAgICs9IG9zdC0+dGluY3I7Ci0g ICAgICAgIG9zdC0+dGluY3IgKz0gb3N0LT50aW5jcjI7CisgICAgc3dyX2FsbG9jX3NldF9vcHRz MihjdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAmKG91dF9wYXJhbXMtPmNoX2xheW91dCks CisgICAgICAgICAgICAgICAgICAgICAgICBvdXRfcGFyYW1zLT5mb3JtYXQsIG91dF9wYXJhbXMt PnNhbXBsZV9yYXRlLAorICAgICAgICAgICAgICAgICAgICAgICAgJihpbl9wYXJhbXMtPmNoX2xh eW91dCksCisgICAgICAgICAgICAgICAgICAgICAgICBpbl9wYXJhbXMtPmZvcm1hdCwgaW5fcGFy YW1zLT5zYW1wbGVfcmF0ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIDAsIE5VTEwpOworICAg IGlmICghKmN0eCkgeworICAgICAgICBsb2dfZXJyb3IoIkNvdWxkIG5vdCBhbGxvY2F0ZSByZXNh bXBsZSBjb250ZXh0IiwgTlVMTCk7CisgICAgICAgIHJldHVybiBBVkVSUk9SKEVOT01FTSk7CiAg ICAgfQogCi0gICAgZnJhbWUtPnB0cyA9IG9zdC0+bmV4dF9wdHM7Ci0gICAgb3N0LT5uZXh0X3B0 cyAgKz0gZnJhbWUtPm5iX3NhbXBsZXM7Ci0KLSAgICByZXR1cm4gZnJhbWU7CisgICAgcmV0dXJu IDA7CiB9CiAKLS8qCi0gKiBlbmNvZGUgb25lIGF1ZGlvIGZyYW1lIGFuZCBzZW5kIGl0IHRvIHRo ZSBtdXhlcgotICogcmV0dXJuIDEgd2hlbiBlbmNvZGluZyBpcyBmaW5pc2hlZCwgMCBvdGhlcndp c2UKLSAqLwotc3RhdGljIGludCB3cml0ZV9hdWRpb19mcmFtZShBVkZvcm1hdENvbnRleHQgKm9j LCBPdXRwdXRTdHJlYW0gKm9zdCkKK3N0YXRpYyBpbnQgaW5pdF92aWRlb19jb252ZXJ0KHN0cnVj dCBTd3NDb250ZXh0ICoqY3R4LCBBVkNvZGVjUGFyYW1ldGVycyAqaW5fcGFyYW1zLAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgQVZDb2RlY1BhcmFtZXRlcnMgKm91dF9wYXJhbXMpCiB7 Ci0gICAgQVZDb2RlY0NvbnRleHQgKmM7Ci0gICAgQVZGcmFtZSAqZnJhbWU7Ci0gICAgaW50IHJl dDsKLSAgICBpbnQgZHN0X25iX3NhbXBsZXM7Ci0KLSAgICBjID0gb3N0LT5lbmM7Ci0KLSAgICBm cmFtZSA9IGdldF9hdWRpb19mcmFtZShvc3QpOwotCi0gICAgaWYgKGZyYW1lKSB7Ci0gICAgICAg IC8qIGNvbnZlcnQgc2FtcGxlcyBmcm9tIG5hdGl2ZSBmb3JtYXQgdG8gZGVzdGluYXRpb24gY29k ZWMgZm9ybWF0LCB1c2luZyB0aGUgcmVzYW1wbGVyICovCi0gICAgICAgIC8qIGNvbXB1dGUgZGVz dGluYXRpb24gbnVtYmVyIG9mIHNhbXBsZXMgKi8KLSAgICAgICAgZHN0X25iX3NhbXBsZXMgPSBh dl9yZXNjYWxlX3JuZChzd3JfZ2V0X2RlbGF5KG9zdC0+c3dyX2N0eCwgYy0+c2FtcGxlX3JhdGUp ICsgZnJhbWUtPm5iX3NhbXBsZXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgYy0+c2FtcGxlX3JhdGUsIGMtPnNhbXBsZV9yYXRlLCBBVl9ST1VORF9VUCk7Ci0gICAg ICAgIGF2X2Fzc2VydDAoZHN0X25iX3NhbXBsZXMgPT0gZnJhbWUtPm5iX3NhbXBsZXMpOwotCi0g ICAgICAgIC8qIHdoZW4gd2UgcGFzcyBhIGZyYW1lIHRvIHRoZSBlbmNvZGVyLCBpdCBtYXkga2Vl cCBhIHJlZmVyZW5jZSB0byBpdAotICAgICAgICAgKiBpbnRlcm5hbGx5OwotICAgICAgICAgKiBt YWtlIHN1cmUgd2UgZG8gbm90IG92ZXJ3cml0ZSBpdCBoZXJlCi0gICAgICAgICAqLwotICAgICAg ICByZXQgPSBhdl9mcmFtZV9tYWtlX3dyaXRhYmxlKG9zdC0+ZnJhbWUpOwotICAgICAgICBpZiAo cmV0IDwgMCkKLSAgICAgICAgICAgIGV4aXQoMSk7Ci0KLSAgICAgICAgLyogY29udmVydCB0byBk ZXN0aW5hdGlvbiBmb3JtYXQgKi8KLSAgICAgICAgcmV0ID0gc3dyX2NvbnZlcnQob3N0LT5zd3Jf Y3R4LAotICAgICAgICAgICAgICAgICAgICAgICAgICBvc3QtPmZyYW1lLT5kYXRhLCBkc3RfbmJf c2FtcGxlcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgKGNvbnN0IHVpbnQ4X3QgKiopZnJh bWUtPmRhdGEsIGZyYW1lLT5uYl9zYW1wbGVzKTsKLSAgICAgICAgaWYgKHJldCA8IDApIHsKLSAg ICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiRXJyb3Igd2hpbGUgY29udmVydGluZ1xuIik7Ci0g ICAgICAgICAgICBleGl0KDEpOwotICAgICAgICB9Ci0gICAgICAgIGZyYW1lID0gb3N0LT5mcmFt ZTsKLQotICAgICAgICBmcmFtZS0+cHRzID0gYXZfcmVzY2FsZV9xKG9zdC0+c2FtcGxlc19jb3Vu dCwgKEFWUmF0aW9uYWwpezEsIGMtPnNhbXBsZV9yYXRlfSwgYy0+dGltZV9iYXNlKTsKLSAgICAg ICAgb3N0LT5zYW1wbGVzX2NvdW50ICs9IGRzdF9uYl9zYW1wbGVzOworICAgICpjdHggPSBzd3Nf Z2V0Q29udGV4dChpbl9wYXJhbXMtPndpZHRoLCBpbl9wYXJhbXMtPmhlaWdodCwKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgaW5fcGFyYW1zLT5mb3JtYXQsCisgICAgICAgICAgICAgICAgICAg ICAgICAgIG91dF9wYXJhbXMtPndpZHRoLCBvdXRfcGFyYW1zLT5oZWlnaHQsCisgICAgICAgICAg ICAgICAgICAgICAgICAgIG91dF9wYXJhbXMtPmNvZGVjX2lkID09IG91dF9wYXJhbXMtPmZvcm1h dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgVklERU9fU0NBTEVfRkxBR1MsIE5VTEwsIE5V TEwsIE5VTEwpOworICAgIGlmICghKmN0eCkgeworICAgICAgICBsb2dfZXJyb3IoIkNvdWxkIG5v dCBhbGxvY2F0ZSBzY2FsZSBjb250ZXh0IiwgTlVMTCk7CisgICAgICAgIHJldHVybiBBVkVSUk9S KEVOT01FTSk7CiAgICAgfQogCi0gICAgcmV0dXJuIHdyaXRlX2ZyYW1lKG9jLCBjLCBvc3QtPnN0 LCBmcmFtZSwgb3N0LT50bXBfcGt0KTsKKyAgICByZXR1cm4gMDsKIH0KIAotLyoqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyog dmlkZW8gb3V0cHV0ICovCi0KLXN0YXRpYyBBVkZyYW1lICphbGxvY19waWN0dXJlKGVudW0gQVZQ aXhlbEZvcm1hdCBwaXhfZm10LCBpbnQgd2lkdGgsIGludCBoZWlnaHQpCitzdGF0aWMgaW50IGlu aXRfYXZmcmFtZShBVkZyYW1lICoqZnJhbWUsIEFWQ29kZWNQYXJhbWV0ZXJzICpwYXJhbXMpCiB7 Ci0gICAgQVZGcmFtZSAqcGljdHVyZTsKICAgICBpbnQgcmV0OwogCi0gICAgcGljdHVyZSA9IGF2 X2ZyYW1lX2FsbG9jKCk7Ci0gICAgaWYgKCFwaWN0dXJlKQotICAgICAgICByZXR1cm4gTlVMTDsK KyAgICBpZiAoISgqZnJhbWUgPSBhdl9mcmFtZV9hbGxvYygpKSkgeworICAgICAgICBsb2dfZXJy b3IoIkNvdWxkIG5vdCBhbGxvY2F0ZSBBVkZyYW1lIiwgTlVMTCk7CisgICAgICAgIHJldHVybiBB VkVSUk9SKEVOT01FTSk7CisgICAgfQogCi0gICAgcGljdHVyZS0+Zm9ybWF0ID0gcGl4X2ZtdDsK LSAgICBwaWN0dXJlLT53aWR0aCAgPSB3aWR0aDsKLSAgICBwaWN0dXJlLT5oZWlnaHQgPSBoZWln aHQ7CisgICAgKCpmcmFtZSktPm9wYXF1ZSA9ICZwYXJhbXMtPmNvZGVjX3R5cGU7CisgICAgaWYg KHBhcmFtcy0+Y29kZWNfdHlwZSA9PSBBVk1FRElBX1RZUEVfQVVESU8pIHsKKyAgICAgICAgKCpm cmFtZSktPm5iX3NhbXBsZXMgID0gcGFyYW1zLT5mcmFtZV9zaXplOworICAgICAgICAoKmZyYW1l KS0+c2FtcGxlX3JhdGUgPSBwYXJhbXMtPnNhbXBsZV9yYXRlOworICAgICAgICAoKmZyYW1lKS0+ Zm9ybWF0ICAgICAgPSBwYXJhbXMtPmZvcm1hdDsKKyAgICAgICAgKCpmcmFtZSktPmNoX2xheW91 dCAgID0gcGFyYW1zLT5jaF9sYXlvdXQ7CisgICAgfSBlbHNlIHsKKyAgICAgICAgKCpmcmFtZSkt PndpZHRoICA9IHBhcmFtcy0+d2lkdGg7CisgICAgICAgICgqZnJhbWUpLT5oZWlnaHQgPSBwYXJh bXMtPmhlaWdodDsKKyAgICAgICAgKCpmcmFtZSktPmZvcm1hdCA9IHBhcmFtcy0+Zm9ybWF0Owor ICAgIH0KIAotICAgIC8qIGFsbG9jYXRlIHRoZSBidWZmZXJzIGZvciB0aGUgZnJhbWUgZGF0YSAq LwotICAgIHJldCA9IGF2X2ZyYW1lX2dldF9idWZmZXIocGljdHVyZSwgMCk7Ci0gICAgaWYgKHJl dCA8IDApIHsKLSAgICAgICAgZnByaW50ZihzdGRlcnIsICJDb3VsZCBub3QgYWxsb2NhdGUgZnJh bWUgZGF0YS5cbiIpOwotICAgICAgICBleGl0KDEpOworICAgIC8qIEFsbG9jYXRlIHRoZSBmcmFt ZSdzIGRhdGEgYnVmZmVyICovCisgICAgaWYgKChyZXQgPSBhdl9mcmFtZV9nZXRfYnVmZmVyKCpm cmFtZSwgMCkpIDwgMCkgeworICAgICAgICBsb2dfZXJyb3IoIkNvdWxkIG5vdCBhbGxvY2F0ZSBi dWZmZXIgZm9yIEFWRnJhbWUiLCAmcmV0KTsKKyAgICAgICAgcmV0dXJuIEFWRVJST1IoRU5PTUVN KTsKICAgICB9CiAKLSAgICByZXR1cm4gcGljdHVyZTsKKyAgICByZXR1cm4gMDsKIH0KIAotc3Rh dGljIHZvaWQgb3Blbl92aWRlbyhBVkZvcm1hdENvbnRleHQgKm9jLCBjb25zdCBBVkNvZGVjICpj b2RlYywKLSAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0U3RyZWFtICpvc3QsIEFWRGljdGlv bmFyeSAqb3B0X2FyZykKK3N0YXRpYyBpbnQgaW5pdF9tdXhlcihBVkZvcm1hdENvbnRleHQgKipv dXRfZm10X2N0eCwgQVZDb2RlY0NvbnRleHQgKmF1ZGlvX2VuY19jdHgsCisgICAgICAgICAgICAg ICAgICAgICAgQVZDb2RlY0NvbnRleHQgKnZpZGVvX2VuY19jdHgsIGNvbnN0IGNoYXIgKmZpbGVu YW1lKQogewogICAgIGludCByZXQ7Ci0gICAgQVZDb2RlY0NvbnRleHQgKmMgPSBvc3QtPmVuYzsK LSAgICBBVkRpY3Rpb25hcnkgKm9wdCA9IE5VTEw7CisgICAgQVZTdHJlYW0gKm91dF9hdWRpb19z dHIsICpvdXRfdmlkZW9fc3RyOwogCi0gICAgYXZfZGljdF9jb3B5KCZvcHQsIG9wdF9hcmcsIDAp OworICAgIGlmICgocmV0ID0gYXZmb3JtYXRfYWxsb2Nfb3V0cHV0X2NvbnRleHQyKG91dF9mbXRf Y3R4LCBOVUxMLCBOVUxMLCBmaWxlbmFtZSkpIDwgMCkgeworICAgICAgICBsb2dfZXJyb3IoIkNv dWxkIG5vdCBjcmVhdGUgb3V0cHV0IGNvbnRleHQiLCAmcmV0KTsKKyAgICAgICAgcmV0dXJuIHJl dDsKKyAgICB9CiAKLSAgICAvKiBvcGVuIHRoZSBjb2RlYyAqLwotICAgIHJldCA9IGF2Y29kZWNf b3BlbjIoYywgY29kZWMsICZvcHQpOwotICAgIGF2X2RpY3RfZnJlZSgmb3B0KTsKLSAgICBpZiAo cmV0IDwgMCkgewotICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkNvdWxkIG5vdCBvcGVuIHZpZGVv IGNvZGVjOiAlc1xuIiwgYXZfZXJyMnN0cihyZXQpKTsKLSAgICAgICAgZXhpdCgxKTsKLSAgICB9 Ci0KLSAgICAvKiBhbGxvY2F0ZSBhbmQgaW5pdCBhIHJlLXVzYWJsZSBmcmFtZSAqLwotICAgIG9z dC0+ZnJhbWUgPSBhbGxvY19waWN0dXJlKGMtPnBpeF9mbXQsIGMtPndpZHRoLCBjLT5oZWlnaHQp OwotICAgIGlmICghb3N0LT5mcmFtZSkgewotICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkNvdWxk IG5vdCBhbGxvY2F0ZSB2aWRlbyBmcmFtZVxuIik7Ci0gICAgICAgIGV4aXQoMSk7Ci0gICAgfQot Ci0gICAgLyogSWYgdGhlIG91dHB1dCBmb3JtYXQgaXMgbm90IFlVVjQyMFAsIHRoZW4gYSB0ZW1w b3JhcnkgWVVWNDIwUAotICAgICAqIHBpY3R1cmUgaXMgbmVlZGVkIHRvby4gSXQgaXMgdGhlbiBj b252ZXJ0ZWQgdG8gdGhlIHJlcXVpcmVkCi0gICAgICogb3V0cHV0IGZvcm1hdC4gKi8KLSAgICBv c3QtPnRtcF9mcmFtZSA9IE5VTEw7Ci0gICAgaWYgKGMtPnBpeF9mbXQgIT0gQVZfUElYX0ZNVF9Z VVY0MjBQKSB7Ci0gICAgICAgIG9zdC0+dG1wX2ZyYW1lID0gYWxsb2NfcGljdHVyZShBVl9QSVhf Rk1UX1lVVjQyMFAsIGMtPndpZHRoLCBjLT5oZWlnaHQpOwotICAgICAgICBpZiAoIW9zdC0+dG1w X2ZyYW1lKSB7Ci0gICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkNvdWxkIG5vdCBhbGxvY2F0 ZSB0ZW1wb3JhcnkgcGljdHVyZVxuIik7Ci0gICAgICAgICAgICBleGl0KDEpOworICAgIC8qIG9w ZW4gdGhlIG91dHB1dCBmaWxlLCBpZiBuZWVkZWQgKi8KKyAgICBpZiAoISgoKm91dF9mbXRfY3R4 KS0+b2Zvcm1hdC0+ZmxhZ3MgJiBBVkZNVF9OT0ZJTEUpKSB7CisgICAgICAgIGlmICgocmV0ID0g YXZpb19vcGVuKCYoKm91dF9mbXRfY3R4KS0+cGIsIGZpbGVuYW1lLCBBVklPX0ZMQUdfV1JJVEUp KSA8IDApIHsKKyAgICAgICAgICAgIGxvZ19lcnJvcigiQ291bGQgbm90IG9wZW4gb3V0cHV0IGZp bGUiLCAmcmV0KTsKKyAgICAgICAgICAgIHJldHVybiByZXQ7CiAgICAgICAgIH0KICAgICB9CiAK LSAgICAvKiBjb3B5IHRoZSBzdHJlYW0gcGFyYW1ldGVycyB0byB0aGUgbXV4ZXIgKi8KLSAgICBy ZXQgPSBhdmNvZGVjX3BhcmFtZXRlcnNfZnJvbV9jb250ZXh0KG9zdC0+c3QtPmNvZGVjcGFyLCBj KTsKLSAgICBpZiAocmV0IDwgMCkgewotICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkNvdWxkIG5v dCBjb3B5IHRoZSBzdHJlYW0gcGFyYW1ldGVyc1xuIik7Ci0gICAgICAgIGV4aXQoMSk7CisgICAg aWYgKGF1ZGlvX2VuY19jdHgpIHsKKyAgICAgICAgaWYgKCEob3V0X2F1ZGlvX3N0ciA9IGF2Zm9y bWF0X25ld19zdHJlYW0oKm91dF9mbXRfY3R4LCBOVUxMKSkpIHsKKyAgICAgICAgICAgIGxvZ19l cnJvcigiQ291bGQgbm90IGNyZWF0ZSBuZXcgc3RyZWFtIiwgTlVMTCk7CisgICAgICAgICAgICBy ZXR1cm4gQVZFUlJPUihFTk9NRU0pOworICAgICAgICB9CisgICAgICAgIG91dF9hdWRpb19zdHIt PmlkID0gKCpvdXRfZm10X2N0eCktPm5iX3N0cmVhbXMgLSAxOworICAgICAgICBhdmNvZGVjX3Bh cmFtZXRlcnNfZnJvbV9jb250ZXh0KG91dF9hdWRpb19zdHItPmNvZGVjcGFyLCBhdWRpb19lbmNf Y3R4KTsKKyAgICB9CisKKyAgICBpZiAodmlkZW9fZW5jX2N0eCkgeworICAgICAgICBpZiAoIShv dXRfdmlkZW9fc3RyID0gYXZmb3JtYXRfbmV3X3N0cmVhbSgqb3V0X2ZtdF9jdHgsIE5VTEwpKSkg eworICAgICAgICAgICAgbG9nX2Vycm9yKCJDb3VsZCBub3QgY3JlYXRlIG5ldyBzdHJlYW0iLCBO VUxMKTsKKyAgICAgICAgICAgIHJldHVybiBBVkVSUk9SKEVOT01FTSk7CisgICAgICAgIH0KKyAg ICAgICAgb3V0X3ZpZGVvX3N0ci0+aWQgPSAoKm91dF9mbXRfY3R4KS0+bmJfc3RyZWFtcyAtIDE7 CisgICAgICAgIGF2Y29kZWNfcGFyYW1ldGVyc19mcm9tX2NvbnRleHQob3V0X3ZpZGVvX3N0ci0+ Y29kZWNwYXIsIHZpZGVvX2VuY19jdHgpOwogICAgIH0KKworICAgIGF2X2R1bXBfZm9ybWF0KCpv dXRfZm10X2N0eCwgMCwgZmlsZW5hbWUsIDEpOworCisgICAgLyogV3JpdGUgdGhlIHN0cmVhbSBo ZWFkZXIsIGlmIGFueS4gKi8KKyAgICBpZiAoYXZmb3JtYXRfd3JpdGVfaGVhZGVyKCpvdXRfZm10 X2N0eCwgTlVMTCkgPCAwKSB7CisgICAgICAgIGxvZ19lcnJvcigiYXZmb3JtYXRfd3JpdGVfaGVh ZGVyKCkgZXJyb3IiLCBOVUxMKTsKKyAgICAgICAgcmV0dXJuIEFWRVJST1JfRVhJVDsKKyAgICB9 CisKKyAgICByZXR1cm4gMDsKIH0KIAotLyogUHJlcGFyZSBhIGR1bW15IGltYWdlLiAqLwotc3Rh dGljIHZvaWQgZmlsbF95dXZfaW1hZ2UoQVZGcmFtZSAqcGljdCwgaW50IGZyYW1lX2luZGV4LAot ICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHdpZHRoLCBpbnQgaGVpZ2h0KQorc3RhdGlj IHZvaWQgZmlsbF9kdW1teV9zMTZfZnJhbWUoQVZGcmFtZSAqZnJhbWUpCiB7Ci0gICAgaW50IHgs IHksIGk7CisgICAgaW50IGosIGksIHY7CisgICAgc3RhdGljIGZsb2F0IHQsIHRpbmNyLCB0aW5j cjI7CisgICAgaW50MTZfdCAqZGF0YSA9IChpbnQxNl90KilmcmFtZS0+ZGF0YVswXTsKKyAgICBz dGF0aWMgaW50IGZyYW1lX2N0cjsKKworICAgIGlmICghdGluY3IpIHsKKyAgICAgICAgdCAgICAg ICA9IDA7CisgICAgICAgIHRpbmNyICAgPSAyICogTV9QSSAqIDExMC4wIC8gZnJhbWUtPnNhbXBs ZV9yYXRlOworICAgICAgICAvKiBpbmNyZW1lbnQgZnJlcXVlbmN5IGJ5IDExMCBIeiBwZXIgc2Vj b25kICovCisgICAgICAgIHRpbmNyMiAgPSB0aW5jciAvIGZyYW1lLT5zYW1wbGVfcmF0ZTsKKyAg ICB9CisgICAgZm9yIChqID0gMDsgaiA8ZnJhbWUtPm5iX3NhbXBsZXM7IGorKykgeworICAgICAg ICB2ID0gKGludCkoc2luKHQpICogMTAwMDApOworICAgICAgICBmb3IgKGkgPSAwOyBpIDwgZnJh bWUtPmNoX2xheW91dC5uYl9jaGFubmVsczsgaSsrKQorICAgICAgICAgICAgKmRhdGErKyA9IHY7 CisgICAgICAgIHQgICAgICs9IHRpbmNyOworICAgICAgICB0aW5jciArPSB0aW5jcjI7CisgICAg fQorICAgIGZyYW1lLT5wdHMgPSBmcmFtZS0+bmJfc2FtcGxlcyooKytmcmFtZV9jdHIpOworfQog Ci0gICAgaSA9IGZyYW1lX2luZGV4Oworc3RhdGljIHZvaWQgZmlsbF9kdW1teV95dXY0MjBwX2Zy YW1lKEFWRnJhbWUgKmZyYW1lKQoreworICAgIGludCB4LCB5OworICAgIHN0YXRpYyBpbnQgaWR4 OwogCiAgICAgLyogWSAqLwotICAgIGZvciAoeSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykKLSAgICAg ICAgZm9yICh4ID0gMDsgeCA8IHdpZHRoOyB4KyspCi0gICAgICAgICAgICBwaWN0LT5kYXRhWzBd W3kgKiBwaWN0LT5saW5lc2l6ZVswXSArIHhdID0geCArIHkgKyBpICogMzsKKyAgICBmb3IgKHkg PSAwOyB5IDwgZnJhbWUtPndpZHRoOyB5KyspCisgICAgICAgIGZvciAoeCA9IDA7IHggPCBmcmFt ZS0+d2lkdGg7IHgrKykKKyAgICAgICAgICAgIGZyYW1lLT5kYXRhWzBdW3kgKiBmcmFtZS0+bGlu ZXNpemVbMF0gKyB4XSA9IHggKyB5ICsgaWR4ICogMzsKIAogICAgIC8qIENiIGFuZCBDciAqLwot ICAgIGZvciAoeSA9IDA7IHkgPCBoZWlnaHQgLyAyOyB5KyspIHsKLSAgICAgICAgZm9yICh4ID0g MDsgeCA8IHdpZHRoIC8gMjsgeCsrKSB7Ci0gICAgICAgICAgICBwaWN0LT5kYXRhWzFdW3kgKiBw aWN0LT5saW5lc2l6ZVsxXSArIHhdID0gMTI4ICsgeSArIGkgKiAyOwotICAgICAgICAgICAgcGlj dC0+ZGF0YVsyXVt5ICogcGljdC0+bGluZXNpemVbMl0gKyB4XSA9IDY0ICsgeCArIGkgKiA1Owor ICAgIGZvciAoeSA9IDA7IHkgPCBmcmFtZS0+aGVpZ2h0IC8gMjsgeSsrKSB7CisgICAgICAgIGZv ciAoeCA9IDA7IHggPCBmcmFtZS0+d2lkdGggLyAyOyB4KyspIHsKKyAgICAgICAgICAgIGZyYW1l LT5kYXRhWzFdW3kgKiBmcmFtZS0+bGluZXNpemVbMV0gKyB4XSA9IDEyOCArIHkgKyBpZHggKiAy OworICAgICAgICAgICAgZnJhbWUtPmRhdGFbMl1beSAqIGZyYW1lLT5saW5lc2l6ZVsyXSArIHhd ID0gNjQgKyB4ICsgaWR4ICogNTsKICAgICAgICAgfQogICAgIH0KKworICAgIGZyYW1lLT5wdHMg PSBpZHgrKzsKIH0KIAotc3RhdGljIEFWRnJhbWUgKmdldF92aWRlb19mcmFtZShPdXRwdXRTdHJl YW0gKm9zdCkKK3N0YXRpYyBpbnQgY29udmVydF9mcmFtZSh2b2lkICpjb252ZXJ0X2N0eCwgQVZG cmFtZSAqaW5fZnJhbWUsIEFWRnJhbWUgKm91dF9mcmFtZSkKIHsKLSAgICBBVkNvZGVjQ29udGV4 dCAqYyA9IG9zdC0+ZW5jOwotCi0gICAgLyogY2hlY2sgaWYgd2Ugd2FudCB0byBnZW5lcmF0ZSBt b3JlIGZyYW1lcyAqLwotICAgIGlmIChhdl9jb21wYXJlX3RzKG9zdC0+bmV4dF9wdHMsIGMtPnRp bWVfYmFzZSwKLSAgICAgICAgICAgICAgICAgICAgICBTVFJFQU1fRFVSQVRJT04sIChBVlJhdGlv bmFsKXsgMSwgMSB9KSA+IDApCi0gICAgICAgIHJldHVybiBOVUxMOwotCi0gICAgLyogd2hlbiB3 ZSBwYXNzIGEgZnJhbWUgdG8gdGhlIGVuY29kZXIsIGl0IG1heSBrZWVwIGEgcmVmZXJlbmNlIHRv IGl0Ci0gICAgICogaW50ZXJuYWxseTsgbWFrZSBzdXJlIHdlIGRvIG5vdCBvdmVyd3JpdGUgaXQg aGVyZSAqLwotICAgIGlmIChhdl9mcmFtZV9tYWtlX3dyaXRhYmxlKG9zdC0+ZnJhbWUpIDwgMCkK LSAgICAgICAgZXhpdCgxKTsKLQotICAgIGlmIChjLT5waXhfZm10ICE9IEFWX1BJWF9GTVRfWVVW NDIwUCkgewotICAgICAgICAvKiBhcyB3ZSBvbmx5IGdlbmVyYXRlIGEgWVVWNDIwUCBwaWN0dXJl LCB3ZSBtdXN0IGNvbnZlcnQgaXQKLSAgICAgICAgICogdG8gdGhlIGNvZGVjIHBpeGVsIGZvcm1h dCBpZiBuZWVkZWQgKi8KLSAgICAgICAgaWYgKCFvc3QtPnN3c19jdHgpIHsKLSAgICAgICAgICAg IG9zdC0+c3dzX2N0eCA9IHN3c19nZXRDb250ZXh0KGMtPndpZHRoLCBjLT5oZWlnaHQsCi0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVl9QSVhfRk1UX1lVVjQyMFAs Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLT53aWR0aCwgYy0+ aGVpZ2h0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYy0+cGl4 X2ZtdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNDQUxFX0ZM QUdTLCBOVUxMLCBOVUxMLCBOVUxMKTsKLSAgICAgICAgICAgIGlmICghb3N0LT5zd3NfY3R4KSB7 Ci0gICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsCi0gICAgICAgICAgICAgICAgICAgICAg ICAiQ291bGQgbm90IGluaXRpYWxpemUgdGhlIGNvbnZlcnNpb24gY29udGV4dFxuIik7Ci0gICAg ICAgICAgICAgICAgZXhpdCgxKTsKLSAgICAgICAgICAgIH0KKyAgICBpbnQgcmV0OworICAgIGVu dW0gQVZNZWRpYVR5cGUgKnR5cGUgPSAoZW51bSBBVk1lZGlhVHlwZSAqKShpbl9mcmFtZS0+b3Bh cXVlKTsKKworICAgIGlmIChhdl9mcmFtZV9tYWtlX3dyaXRhYmxlKG91dF9mcmFtZSkgPCAwKSB7 CisgICAgICAgIGxvZ19lcnJvcigiYXZfZnJhbWVfbWFrZV93cml0YWJsZSgpIGVycm9yIiwgTlVM TCk7CisgICAgICAgIHJldHVybiBBVkVSUk9SX0VYSVQ7CisgICAgfQorCisgICAgaWYgKCp0eXBl ID09IEFWTUVESUFfVFlQRV9BVURJTykgeworICAgICAgICBpZiAoKHJldCA9IHN3cl9jb252ZXJ0 X2ZyYW1lKChzdHJ1Y3QgU3dyQ29udGV4dCAqKWNvbnZlcnRfY3R4LCBvdXRfZnJhbWUsCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNvbnN0IEFWRnJhbWUgKilpbl9mcmFt ZSkpICE9IDApIHsKKyAgICAgICAgICAgIGxvZ19lcnJvcigiRXJyb3IgY29udmVydGluZyBBVkZy YW1lIiwgJnJldCk7CisgICAgICAgICAgICByZXR1cm4gcmV0OwogICAgICAgICB9Ci0gICAgICAg IGZpbGxfeXV2X2ltYWdlKG9zdC0+dG1wX2ZyYW1lLCBvc3QtPm5leHRfcHRzLCBjLT53aWR0aCwg Yy0+aGVpZ2h0KTsKLSAgICAgICAgc3dzX3NjYWxlKG9zdC0+c3dzX2N0eCwgKGNvbnN0IHVpbnQ4 X3QgKiBjb25zdCAqKSBvc3QtPnRtcF9mcmFtZS0+ZGF0YSwKLSAgICAgICAgICAgICAgICAgIG9z dC0+dG1wX2ZyYW1lLT5saW5lc2l6ZSwgMCwgYy0+aGVpZ2h0LCBvc3QtPmZyYW1lLT5kYXRhLAot ICAgICAgICAgICAgICAgICAgb3N0LT5mcmFtZS0+bGluZXNpemUpOwogICAgIH0gZWxzZSB7Ci0g ICAgICAgIGZpbGxfeXV2X2ltYWdlKG9zdC0+ZnJhbWUsIG9zdC0+bmV4dF9wdHMsIGMtPndpZHRo LCBjLT5oZWlnaHQpOworICAgICAgICBzd3Nfc2NhbGUoKHN0cnVjdCBTd3NDb250ZXh0ICopY29u dmVydF9jdHgsIChjb25zdCB1aW50OF90ICogY29uc3QgKilpbl9mcmFtZS0+ZGF0YSwKKyAgICAg ICAgICAgICAgICAgIGluX2ZyYW1lLT5saW5lc2l6ZSwgMCwgaW5fZnJhbWUtPmhlaWdodCwgb3V0 X2ZyYW1lLT5kYXRhLAorICAgICAgICAgICAgICAgICAgb3V0X2ZyYW1lLT5saW5lc2l6ZSk7CiAg ICAgfQogCi0gICAgb3N0LT5mcmFtZS0+cHRzID0gb3N0LT5uZXh0X3B0cysrOwotCi0gICAgcmV0 dXJuIG9zdC0+ZnJhbWU7CisgICAgb3V0X2ZyYW1lLT5wdHMgPSBpbl9mcmFtZS0+cHRzOworICAg IHJldHVybiAwOwogfQogCi0vKgotICogZW5jb2RlIG9uZSB2aWRlbyBmcmFtZSBhbmQgc2VuZCBp dCB0byB0aGUgbXV4ZXIKLSAqIHJldHVybiAxIHdoZW4gZW5jb2RpbmcgaXMgZmluaXNoZWQsIDAg b3RoZXJ3aXNlCi0gKi8KLXN0YXRpYyBpbnQgd3JpdGVfdmlkZW9fZnJhbWUoQVZGb3JtYXRDb250 ZXh0ICpvYywgT3V0cHV0U3RyZWFtICpvc3QpCitzdGF0aWMgaW50IGVuY29kZV9mcmFtZShBVkNv ZGVjQ29udGV4dCAqY3R4LCBBVkZyYW1lICppbl9mcmFtZSwgQVZQYWNrZXQgKm91dF9wa3QpCiB7 Ci0gICAgcmV0dXJuIHdyaXRlX2ZyYW1lKG9jLCBvc3QtPmVuYywgb3N0LT5zdCwgZ2V0X3ZpZGVv X2ZyYW1lKG9zdCksIG9zdC0+dG1wX3BrdCk7CisgICAgc3RhdGljIGludCBpc19mbHVzaGluZ19h dWRpbyA9IDAsIGlzX2ZsdXNoaW5nX3ZpZGVvID0gMDsKKyAgICBpbnQgcmV0ID0gMDsKKyAgICBp bnQgaXNfYXVkaW8gPSBjdHgtPmNvZGVjLT50eXBlID09IEFWTUVESUFfVFlQRV9BVURJTzsKKwor ICAgIGlmICgoaXNfYXVkaW8gJiYgIWlzX2ZsdXNoaW5nX2F1ZGlvKSB8fCAoIWlzX2F1ZGlvICYm ICFpc19mbHVzaGluZ192aWRlbykpIHsKKyAgICAgICAgcmV0ID0gYXZjb2RlY19zZW5kX2ZyYW1l KGN0eCwgaW5fZnJhbWUpOworICAgIH0KKyAgICBpZiAocmV0IDwgMCkgeworICAgICAgICBsb2df ZXJyb3IoIkVycm9yIHNlbmRpbmcgZnJhbWUgdG8gdGhlIGVuY29kZXIgKGVycm9yICclcycpXG4i LCAmcmV0KTsKKyAgICAgICAgcmV0dXJuIHJldDsKKyAgICB9IGVsc2UgaWYgKHJldCA9PSAwKSB7 CisgICAgICAgIHJldCA9IGF2Y29kZWNfcmVjZWl2ZV9wYWNrZXQoY3R4LCBvdXRfcGt0KTsKKyAg ICAgICAgaWYgKChyZXQgPCAwKSAmJiAocmV0ICE9IEFWRVJST1IoRUFHQUlOKSkgJiYgKHJldCAh PSBBVkVSUk9SX0VPRikpIHsKKyAgICAgICAgICAgIGxvZ19lcnJvcigiRXJyb3IgcmVjZWl2aW5n IGVuY29kZWQgcGFja2V0IChlcnJvciAnJXMnKVxuIiwgJnJldCk7CisgICAgICAgICAgICByZXR1 cm4gcmV0OworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKGlzX2F1ZGlvKQorICAgICAgICBp c19mbHVzaGluZ19hdWRpbyA9IChpbl9mcmFtZSA9PSBOVUxMKTsKKyAgICBlbHNlCisgICAgICAg IGlzX2ZsdXNoaW5nX3ZpZGVvID0gKGluX2ZyYW1lID09IE5VTEwpOworCisgICAgcmV0dXJuIHJl dDsKIH0KIAotc3RhdGljIHZvaWQgY2xvc2Vfc3RyZWFtKEFWRm9ybWF0Q29udGV4dCAqb2MsIE91 dHB1dFN0cmVhbSAqb3N0KQorc3RhdGljIGludCBmcmFtZV9leGNlZWRzX3N0cmVhbV9kdXJhdGlv bihBVkZyYW1lICpmcikKIHsKLSAgICBhdmNvZGVjX2ZyZWVfY29udGV4dCgmb3N0LT5lbmMpOwot ICAgIGF2X2ZyYW1lX2ZyZWUoJm9zdC0+ZnJhbWUpOwotICAgIGF2X2ZyYW1lX2ZyZWUoJm9zdC0+ dG1wX2ZyYW1lKTsKLSAgICBhdl9wYWNrZXRfZnJlZSgmb3N0LT50bXBfcGt0KTsKLSAgICBzd3Nf ZnJlZUNvbnRleHQob3N0LT5zd3NfY3R4KTsKLSAgICBzd3JfZnJlZSgmb3N0LT5zd3JfY3R4KTsK KyAgICBlbnVtIEFWTWVkaWFUeXBlICp0eXBlID0gKGVudW0gQVZNZWRpYVR5cGUgKikoZnItPm9w YXF1ZSk7CisgICAgQVZSYXRpb25hbCB0YiA9ICgqdHlwZSA9PSBBVk1FRElBX1RZUEVfQVVESU8p ID8gYXZfbWFrZV9xKDEsIGZyLT5zYW1wbGVfcmF0ZSkgOgorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF2X21ha2VfcSgxLCBWSURFT19GUkFNRV9S QVRFKTsKKworICAgIHJldHVybiBhdl9jb21wYXJlX3RzKGZyLT5wdHMsIHRiICxTVFJFQU1fRFVS QVRJT04sIGF2X21ha2VfcSgxLCAxKSkgPiAwOwogfQogCi0vKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiBtZWRpYSBmaWxl IG91dHB1dCAqLworc3RhdGljIGVudW0gQVZNZWRpYVR5cGUgbWVkaWFfdHlwZV9vZl9lYXJsaWVy X2ZyYW1lKEFWRnJhbWUgKmF1ZGlvX2ZyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIEFWRnJhbWUgKnZpZGVvX2ZyKQoreworICAgIGlmICghYXVk aW9fZnIpCisgICAgICAgIHJldHVybiBBVk1FRElBX1RZUEVfVklERU87CisgICAgaWYgKCF2aWRl b19mcikKKyAgICAgICAgcmV0dXJuIEFWTUVESUFfVFlQRV9BVURJTzsKKworICAgIGlmIChhdl9j b21wYXJlX3RzKGF1ZGlvX2ZyLT5wdHMsIGF2X21ha2VfcSgxLCBhdWRpb19mci0+c2FtcGxlX3Jh dGUpLAorICAgICAgICAgICAgICAgICAgICAgIHZpZGVvX2ZyLT5wdHMsIGF2X21ha2VfcSgxLCBW SURFT19GUkFNRV9SQVRFKSkgPCAwKQorICAgICAgICByZXR1cm4gQVZNRURJQV9UWVBFX0FVRElP OworICAgIGVsc2UKKyAgICAgICAgcmV0dXJuIEFWTUVESUFfVFlQRV9WSURFTzsKK30KIAogaW50 IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogewotICAgIE91dHB1dFN0cmVhbSB2aWRlb19z dCA9IHsgMCB9LCBhdWRpb19zdCA9IHsgMCB9OwotICAgIGNvbnN0IEFWT3V0cHV0Rm9ybWF0ICpm bXQ7Ci0gICAgY29uc3QgY2hhciAqZmlsZW5hbWU7Ci0gICAgQVZGb3JtYXRDb250ZXh0ICpvYzsK LSAgICBjb25zdCBBVkNvZGVjICphdWRpb19jb2RlYywgKnZpZGVvX2NvZGVjOwotICAgIGludCBy ZXQ7Ci0gICAgaW50IGhhdmVfdmlkZW8gPSAwLCBoYXZlX2F1ZGlvID0gMDsKLSAgICBpbnQgZW5j b2RlX3ZpZGVvID0gMCwgZW5jb2RlX2F1ZGlvID0gMDsKLSAgICBBVkRpY3Rpb25hcnkgKm9wdCA9 IE5VTEw7Ci0gICAgaW50IGk7Ci0KLSAgICBpZiAoYXJnYyA8IDIpIHsKKyAgICBjb25zdCBjaGFy ICpmbmFtZTsKKyAgICBBVkNvZGVjQ29udGV4dCAqYXVkaW9fZW5jX2N0eCA9IE5VTEwsICp2aWRl b19lbmNfY3R4ID0gTlVMTCwgKmVuY19jdHggPSBOVUxMOworCisgICAgLyogTk9URTogaWYgeW91 IHdhbnQgdG8gbW9kaWZ5IHRoZSBhdWRpby92aWRlbyBpbnB1dCAiLmZvcm1hdCIgcGFyYW1ldGVy LAorICAgICAqIHlvdSBuZWVkIHRvIG1vZGlmeSB0aGUgY29ycmVzcG9uZGluZyBmaWxsX2R1bW15 X1hYWF9mcmFtZSgpIGZ1bmN0aW9uKHMpIHRvbyAqLworICAgIEFWQ29kZWNQYXJhbWV0ZXJzICph dWRpb19pbl9wYXJhbXMgID0gYXZjb2RlY19wYXJhbWV0ZXJzX2FsbG9jKCksCisgICAgICAgICAg ICAgICAgICAgICAgKmF1ZGlvX2VuY19wYXJhbXMgPSBhdmNvZGVjX3BhcmFtZXRlcnNfYWxsb2Mo KSwKKyAgICAgICAgICAgICAgICAgICAgICAqdmlkZW9faW5fcGFyYW1zICA9IGF2Y29kZWNfcGFy YW1ldGVyc19hbGxvYygpLAorICAgICAgICAgICAgICAgICAgICAgICp2aWRlb19lbmNfcGFyYW1z ID0gYXZjb2RlY19wYXJhbWV0ZXJzX2FsbG9jKCk7CisgICAgc3RydWN0IEFWUmF0aW9uYWwgZW5j X3RpbWViYXNlc1syXTsKKyAgICBBVkZyYW1lICppbl9hdWRpb19mcmFtZSA9IE5VTEwsICpjb252 ZXJ0ZWRfYXVkaW9fZnJhbWUgPSBOVUxMLAorICAgICAgICAgICAgKmluX3ZpZGVvX2ZyYW1lID0g TlVMTCwgKmNvbnZlcnRlZF92aWRlb19mcmFtZSA9IE5VTEwsCisgICAgICAgICAgICAqZnJhbWVf dG9fZW5jb2RlID0gTlVMTDsKKyAgICBzdHJ1Y3QgU3dyQ29udGV4dCAqYXVkaW9fY29udmVydF9j dHggPSBOVUxMOworICAgIHN0cnVjdCBTd3NDb250ZXh0ICp2aWRlb19jb252ZXJ0X2N0eCA9IE5V TEw7CisgICAgZW51bSBBVk1lZGlhVHlwZSBtZWRpYV90eXBlOworICAgIEFWRm9ybWF0Q29udGV4 dCAqb3V0X2ZtdF9jdHggPSBOVUxMOworICAgIEFWUGFja2V0ICpvdXRfcGt0ID0gYXZfcGFja2V0 X2FsbG9jKCk7CisgICAgaW50IHJldCA9IDAsIHByb2Nlc3NfYXVkaW8gPSAwLCBwcm9jZXNzX3Zp ZGVvID0gMDsKKworICAgIGlmIChhcmdjICE9IDIpIHsKICAgICAgICAgcHJpbnRmKCJ1c2FnZTog JXMgb3V0cHV0X2ZpbGVcbiIKICAgICAgICAgICAgICAgICJBUEkgZXhhbXBsZSBwcm9ncmFtIHRv IG91dHB1dCBhIG1lZGlhIGZpbGUgd2l0aCBsaWJhdmZvcm1hdC5cbiIKLSAgICAgICAgICAgICAg ICJUaGlzIHByb2dyYW0gZ2VuZXJhdGVzIGEgc3ludGhldGljIGF1ZGlvIGFuZCB2aWRlbyBzdHJl YW0sIGVuY29kZXMgYW5kXG4iCisgICAgICAgICAgICAgICAiVGhpcyBwcm9ncmFtIGdlbmVyYXRl cyBhIHN5bnRoZXRpYyBhdWRpbyBhbmQvb3IgdmlkZW8gc3RyZWFtLCBlbmNvZGVzIGFuZFxuIgog ICAgICAgICAgICAgICAgIm11eGVzIHRoZW0gaW50byBhIGZpbGUgbmFtZWQgb3V0cHV0X2ZpbGUu XG4iCiAgICAgICAgICAgICAgICAiVGhlIG91dHB1dCBmb3JtYXQgaXMgYXV0b21hdGljYWxseSBn dWVzc2VkIGFjY29yZGluZyB0byB0aGUgZmlsZSBleHRlbnNpb24uXG4iCi0gICAgICAgICAgICAg ICAiUmF3IGltYWdlcyBjYW4gYWxzbyBiZSBvdXRwdXQgYnkgdXNpbmcgJyUlZCcgaW4gdGhlIGZp bGVuYW1lLlxuIgorICAgICAgICAgICAgICAgIkJNUCBvciBKUEVHIGltYWdlcyBjYW4gYWxzbyBi ZSBvdXRwdXQgYnkgdXNpbmcgJyUlZCcgaW4gdGhlIGZpbGVuYW1lLlxuIgogICAgICAgICAgICAg ICAgIlxuIiwgYXJndlswXSk7Ci0gICAgICAgIHJldHVybiAxOworICAgICAgICByZXQgPSAxOwor ICAgICAgICBnb3RvIGVuZDsKICAgICB9CiAKLSAgICBmaWxlbmFtZSA9IGFyZ3ZbMV07Ci0gICAg Zm9yIChpID0gMjsgaSsxIDwgYXJnYzsgaSs9MikgewotICAgICAgICBpZiAoIXN0cmNtcChhcmd2 W2ldLCAiLWZsYWdzIikgfHwgIXN0cmNtcChhcmd2W2ldLCAiLWZmbGFncyIpKQotICAgICAgICAg ICAgYXZfZGljdF9zZXQoJm9wdCwgYXJndltpXSsxLCBhcmd2W2krMV0sIDApOworICAgIGlmICgh YXVkaW9faW5fcGFyYW1zIHx8ICFhdWRpb19lbmNfcGFyYW1zIHx8CisgICAgICAgICF2aWRlb19p bl9wYXJhbXMgfHwgIXZpZGVvX2VuY19wYXJhbXMgfHwgIW91dF9wa3QpIHsKKyAgICAgICAgbG9n X2Vycm9yKCJjb3VsZCBub3QgYWxsb2NhdGUgcmVzb3VyY2VzIiwgTlVMTCk7CisgICAgICAgIHJl dCA9IEFWRVJST1IoRU5PTUVNKTsKKyAgICAgICAgZ290byBlbmQ7CiAgICAgfQogCi0gICAgLyog YWxsb2NhdGUgdGhlIG91dHB1dCBtZWRpYSBjb250ZXh0ICovCi0gICAgYXZmb3JtYXRfYWxsb2Nf b3V0cHV0X2NvbnRleHQyKCZvYywgTlVMTCwgTlVMTCwgZmlsZW5hbWUpOwotICAgIGlmICghb2Mp IHsKLSAgICAgICAgcHJpbnRmKCJDb3VsZCBub3QgZGVkdWNlIG91dHB1dCBmb3JtYXQgZnJvbSBm aWxlIGV4dGVuc2lvbjogdXNpbmcgTVBFRy5cbiIpOwotICAgICAgICBhdmZvcm1hdF9hbGxvY19v dXRwdXRfY29udGV4dDIoJm9jLCBOVUxMLCAibXBlZyIsIGZpbGVuYW1lKTsKLSAgICB9Ci0gICAg aWYgKCFvYykKLSAgICAgICAgcmV0dXJuIDE7CisgICAgYXVkaW9faW5fcGFyYW1zLT5jb2RlY190 eXBlICA9IEFWTUVESUFfVFlQRV9BVURJTzsKKyAgICBhdWRpb19pbl9wYXJhbXMtPmZvcm1hdCAg ICAgID0gQVZfU0FNUExFX0ZNVF9TMTY7CisgICAgYXVkaW9faW5fcGFyYW1zLT5zYW1wbGVfcmF0 ZSA9IDQ0MTAwOworICAgIGF1ZGlvX2luX3BhcmFtcy0+Y2hfbGF5b3V0ICAgPSAoQVZDaGFubmVs TGF5b3V0KUFWX0NIQU5ORUxfTEFZT1VUX1NURVJFTzsKIAotICAgIGZtdCA9IG9jLT5vZm9ybWF0 OworICAgIHZpZGVvX2luX3BhcmFtcy0+Y29kZWNfdHlwZSAgPSBBVk1FRElBX1RZUEVfVklERU87 CisgICAgdmlkZW9faW5fcGFyYW1zLT53aWR0aCAgICAgICA9IDM1MjsKKyAgICB2aWRlb19pbl9w YXJhbXMtPmhlaWdodCAgICAgID0gMjg4OworICAgIHZpZGVvX2luX3BhcmFtcy0+Zm9ybWF0ICAg ICAgPSBBVl9QSVhfRk1UX1lVVjQyMFA7CiAKLSAgICAvKiBBZGQgdGhlIGF1ZGlvIGFuZCB2aWRl byBzdHJlYW1zIHVzaW5nIHRoZSBkZWZhdWx0IGZvcm1hdCBjb2RlY3MKLSAgICAgKiBhbmQgaW5p dGlhbGl6ZSB0aGUgY29kZWNzLiAqLwotICAgIGlmIChmbXQtPnZpZGVvX2NvZGVjICE9IEFWX0NP REVDX0lEX05PTkUpIHsKLSAgICAgICAgYWRkX3N0cmVhbSgmdmlkZW9fc3QsIG9jLCAmdmlkZW9f Y29kZWMsIGZtdC0+dmlkZW9fY29kZWMpOwotICAgICAgICBoYXZlX3ZpZGVvID0gMTsKLSAgICAg ICAgZW5jb2RlX3ZpZGVvID0gMTsKKyAgICBmbmFtZSA9IGFyZ3ZbMV07CisgICAgaWYgKCFpc19l eHRlbnNpb25fc3VwcG9ydGVkKGZuYW1lKSkgeworICAgICAgICByZXQgPSBBVkVSUk9SX0VYSVQ7 CisgICAgICAgIGdvdG8gZW5kOwogICAgIH0KLSAgICBpZiAoZm10LT5hdWRpb19jb2RlYyAhPSBB Vl9DT0RFQ19JRF9OT05FKSB7Ci0gICAgICAgIGFkZF9zdHJlYW0oJmF1ZGlvX3N0LCBvYywgJmF1 ZGlvX2NvZGVjLCBmbXQtPmF1ZGlvX2NvZGVjKTsKLSAgICAgICAgaGF2ZV9hdWRpbyA9IDE7Ci0g ICAgICAgIGVuY29kZV9hdWRpbyA9IDE7Ci0gICAgfQotCi0gICAgLyogTm93IHRoYXQgYWxsIHRo ZSBwYXJhbWV0ZXJzIGFyZSBzZXQsIHdlIGNhbiBvcGVuIHRoZSBhdWRpbyBhbmQKLSAgICAgKiB2 aWRlbyBjb2RlY3MgYW5kIGFsbG9jYXRlIHRoZSBuZWNlc3NhcnkgZW5jb2RlIGJ1ZmZlcnMuICov Ci0gICAgaWYgKGhhdmVfdmlkZW8pCi0gICAgICAgIG9wZW5fdmlkZW8ob2MsIHZpZGVvX2NvZGVj LCAmdmlkZW9fc3QsIG9wdCk7CiAKLSAgICBpZiAoaGF2ZV9hdWRpbykKLSAgICAgICAgb3Blbl9h dWRpbyhvYywgYXVkaW9fY29kZWMsICZhdWRpb19zdCwgb3B0KTsKLQotICAgIGF2X2R1bXBfZm9y bWF0KG9jLCAwLCBmaWxlbmFtZSwgMSk7CisgICAgLyogRGVzdW1lIHRoZSBkZWZhdWx0IGNvZGVj cyBhbmQgdGhlaXIgZGVmYXVsdCBwYXJhbWV0ZXJzIGZyb20gdGhlIGZpbGVuYW1lICovCisgICAg aWYgKChyZXQgPSBnZXRfZGVmYXVsdF9lbmNfcGFyYW1zKGF1ZGlvX2VuY19wYXJhbXMsIGZuYW1l LCBBVk1FRElBX1RZUEVfQVVESU8pKSA8IDApCisgICAgICAgIGdvdG8gZW5kOworICAgIGlmICgo cmV0ID0gZ2V0X2RlZmF1bHRfZW5jX3BhcmFtcyh2aWRlb19lbmNfcGFyYW1zLCBmbmFtZSwgQVZN RURJQV9UWVBFX1ZJREVPKSkgPCAwKQorICAgICAgICBnb3RvIGVuZDsKKyAgICBwcm9jZXNzX2F1 ZGlvID0gYXVkaW9fZW5jX3BhcmFtcy0+Y29kZWNfaWQgIT0gQVZfQ09ERUNfSURfTk9ORTsKKyAg ICBwcm9jZXNzX3ZpZGVvID0gdmlkZW9fZW5jX3BhcmFtcy0+Y29kZWNfaWQgIT0gQVZfQ09ERUNf SURfTk9ORTsKKyAgICBpZiAoIXByb2Nlc3NfYXVkaW8gJiYgIXByb2Nlc3NfdmlkZW8pIHsKKyAg ICAgICAgbG9nX2Vycm9yKCJDb3VsZCBub3QgZ2V0IGRlZmF1bHQgZW5jb2RlcihzKSIsIE5VTEwp OworICAgICAgICByZXQgPSBBVkVSUk9SX0VYSVQ7CisgICAgICAgIGdvdG8gZW5kOworICAgIH0K IAotICAgIC8qIG9wZW4gdGhlIG91dHB1dCBmaWxlLCBpZiBuZWVkZWQgKi8KLSAgICBpZiAoIShm bXQtPmZsYWdzICYgQVZGTVRfTk9GSUxFKSkgewotICAgICAgICByZXQgPSBhdmlvX29wZW4oJm9j LT5wYiwgZmlsZW5hbWUsIEFWSU9fRkxBR19XUklURSk7Ci0gICAgICAgIGlmIChyZXQgPCAwKSB7 Ci0gICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkNvdWxkIG5vdCBvcGVuICclcyc6ICVzXG4i LCBmaWxlbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgYXZfZXJyMnN0cihyZXQpKTsKLSAgICAg ICAgICAgIHJldHVybiAxOwotICAgICAgICB9CisgICAgaWYgKHByb2Nlc3NfYXVkaW8pIHsKKyAg ICAgICAgLyogUHJlcGFyZSB0aGUgYXVkaW8gZW5jb2RlciovCisgICAgICAgIGlmICgocmV0ID0g aW5pdF9lbmNvZGVyKCZhdWRpb19lbmNfY3R4LCBhdWRpb19lbmNfcGFyYW1zKSkgPCAwKQorICAg ICAgICAgICAgZ290byBlbmQ7CisgICAgICAgIGVuY190aW1lYmFzZXNbMF0gPSBhdWRpb19lbmNf Y3R4LT50aW1lX2Jhc2U7CisgICAgICAgIGF1ZGlvX2luX3BhcmFtcy0+ZnJhbWVfc2l6ZSAgPSBh dWRpb19lbmNfcGFyYW1zLT5mcmFtZV9zaXplICA9IGF1ZGlvX2VuY19jdHgtPmZyYW1lX3NpemU7 CisKKyAgICAgICAgLyogQWxsb2NhdGUgYW4gYXVkaW8gcmVzYW1wbGVyIGFuZCBpdHMgaW5wdXQg YW5kIG91dHB1dCBBVkZyYW1lcyAqLworICAgICAgICBpZiAoKHJldCA9IGluaXRfYXVkaW9fY29u dmVydCgmYXVkaW9fY29udmVydF9jdHgsIGF1ZGlvX2luX3BhcmFtcywKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgYXVkaW9fZW5jX3BhcmFtcykpIDwgMCkKKyAgICAgICAg ICAgIGdvdG8gZW5kOworICAgICAgICBpZiAoKHJldCA9IGluaXRfYXZmcmFtZSgmaW5fYXVkaW9f ZnJhbWUsIGF1ZGlvX2luX3BhcmFtcykpIDwgMCkKKyAgICAgICAgICAgIGdvdG8gZW5kOworICAg ICAgICBpZiAoKHJldCA9IGluaXRfYXZmcmFtZSgmY29udmVydGVkX2F1ZGlvX2ZyYW1lLCBhdWRp b19lbmNfcGFyYW1zKSkgPCAwKQorICAgICAgICAgICAgZ290byBlbmQ7CiAgICAgfQogCi0gICAg LyogV3JpdGUgdGhlIHN0cmVhbSBoZWFkZXIsIGlmIGFueS4gKi8KLSAgICByZXQgPSBhdmZvcm1h dF93cml0ZV9oZWFkZXIob2MsICZvcHQpOwotICAgIGlmIChyZXQgPCAwKSB7Ci0gICAgICAgIGZw cmludGYoc3RkZXJyLCAiRXJyb3Igb2NjdXJyZWQgd2hlbiBvcGVuaW5nIG91dHB1dCBmaWxlOiAl c1xuIiwKLSAgICAgICAgICAgICAgICBhdl9lcnIyc3RyKHJldCkpOwotICAgICAgICByZXR1cm4g MTsKKyAgICBpZiAocHJvY2Vzc192aWRlbykgeworICAgICAgICB2aWRlb19lbmNfcGFyYW1zLT53 aWR0aCAgPSB2aWRlb19pbl9wYXJhbXMtPndpZHRoOworICAgICAgICB2aWRlb19lbmNfcGFyYW1z LT5oZWlnaHQgPSB2aWRlb19pbl9wYXJhbXMtPmhlaWdodDsKKyAgICAgICAgaWYgKChyZXQgPSBp bml0X2VuY29kZXIoJnZpZGVvX2VuY19jdHgsIHZpZGVvX2VuY19wYXJhbXMpKSA8IDApCisgICAg ICAgICAgICBnb3RvIGVuZDsKKyAgICAgICAgZW5jX3RpbWViYXNlc1sxXSA9IHZpZGVvX2VuY19j dHgtPnRpbWVfYmFzZTsKKyAgICAgICAgaWYgKChyZXQgPSBpbml0X3ZpZGVvX2NvbnZlcnQoJnZp ZGVvX2NvbnZlcnRfY3R4LHZpZGVvX2luX3BhcmFtcywKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgdmlkZW9fZW5jX3BhcmFtcykpIDwgMCkKKyAgICAgICAgICAgIGdvdG8g ZW5kOworICAgICAgICBpZiAoKHJldCA9IGluaXRfYXZmcmFtZSgmaW5fdmlkZW9fZnJhbWUsIHZp ZGVvX2luX3BhcmFtcykpIDwgMCkKKyAgICAgICAgICAgIGdvdG8gZW5kOworICAgICAgICBpZiAo KHJldCA9IGluaXRfYXZmcmFtZSgmY29udmVydGVkX3ZpZGVvX2ZyYW1lLCB2aWRlb19lbmNfcGFy YW1zKSkgPCAwKQorICAgICAgICAgICAgZ290byBlbmQ7CiAgICAgfQogCi0gICAgd2hpbGUgKGVu Y29kZV92aWRlbyB8fCBlbmNvZGVfYXVkaW8pIHsKLSAgICAgICAgLyogc2VsZWN0IHRoZSBzdHJl YW0gdG8gZW5jb2RlICovCi0gICAgICAgIGlmIChlbmNvZGVfdmlkZW8gJiYKLSAgICAgICAgICAg ICghZW5jb2RlX2F1ZGlvIHx8IGF2X2NvbXBhcmVfdHModmlkZW9fc3QubmV4dF9wdHMsIHZpZGVv X3N0LmVuYy0+dGltZV9iYXNlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBhdWRpb19zdC5uZXh0X3B0cywgYXVkaW9fc3QuZW5jLT50aW1lX2Jhc2UpIDw9IDAp KSB7Ci0gICAgICAgICAgICBlbmNvZGVfdmlkZW8gPSAhd3JpdGVfdmlkZW9fZnJhbWUob2MsICZ2 aWRlb19zdCk7CisgICAgLyogQ3JlYXRlIHRoZSBvdXRwdXQgY29udGFpbmVyIGZvciB0aGUgZW5j b2RlZCBmcmFtZXMgKi8KKyAgICBpZiAoKHJldCA9IGluaXRfbXV4ZXIoJm91dF9mbXRfY3R4LCBh dWRpb19lbmNfY3R4LCB2aWRlb19lbmNfY3R4LCBmbmFtZSkpIDwgMCkKKyAgICAgICAgZ290byBl bmQ7CisgICAgb3V0X2ZtdF9jdHgtPm9wYXF1ZSA9ICZlbmNfdGltZWJhc2VzOworCisgICAgd2hp bGUgKHByb2Nlc3NfYXVkaW8gfHwgcHJvY2Vzc192aWRlbykgeworCisgICAgICAgIGZyYW1lX3Rv X2VuY29kZSA9IE5VTEw7CisgICAgICAgIG1lZGlhX3R5cGUgPSBtZWRpYV90eXBlX29mX2Vhcmxp ZXJfZnJhbWUoaW5fYXVkaW9fZnJhbWUsIGluX3ZpZGVvX2ZyYW1lKTsKKworICAgICAgICAvKiBm aWxsIGFuZCBjb252ZXJ0IHRoZSBpbnB1dCBmcmFtZXMgKi8KKyAgICAgICAgaWYgKG1lZGlhX3R5 cGUgPT0gQVZNRURJQV9UWVBFX0FVRElPKSB7CisgICAgICAgICAgICBlbmNfY3R4ID0gYXVkaW9f ZW5jX2N0eDsKKyAgICAgICAgICAgIGZpbGxfZHVtbXlfczE2X2ZyYW1lKGluX2F1ZGlvX2ZyYW1l KTsKKyAgICAgICAgICAgIGlmICgocmV0ID0gY29udmVydF9mcmFtZShhdWRpb19jb252ZXJ0X2N0 eCwgaW5fYXVkaW9fZnJhbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg Y29udmVydGVkX2F1ZGlvX2ZyYW1lKSkgIT0gMCkKKyAgICAgICAgICAgICAgICBnb3RvIGVuZDsK KyAgICAgICAgICAgIGlmICghZnJhbWVfZXhjZWVkc19zdHJlYW1fZHVyYXRpb24oY29udmVydGVk X2F1ZGlvX2ZyYW1lKSkKKyAgICAgICAgICAgICAgICBmcmFtZV90b19lbmNvZGUgPSBjb252ZXJ0 ZWRfYXVkaW9fZnJhbWU7CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBlbmNvZGVfYXVk aW8gPSAhd3JpdGVfYXVkaW9fZnJhbWUob2MsICZhdWRpb19zdCk7CisgICAgICAgICAgICBlbmNf Y3R4ID0gdmlkZW9fZW5jX2N0eDsKKyAgICAgICAgICAgIGZpbGxfZHVtbXlfeXV2NDIwcF9mcmFt ZShpbl92aWRlb19mcmFtZSk7CisgICAgICAgICAgICBpZiAoKHJldCA9IGNvbnZlcnRfZnJhbWUo dmlkZW9fY29udmVydF9jdHgsIGluX3ZpZGVvX2ZyYW1lLAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGNvbnZlcnRlZF92aWRlb19mcmFtZSkpICE9IDApCisgICAgICAgICAg ICAgICAgZ290byBlbmQ7CisgICAgICAgICAgICBpZiAoIWZyYW1lX2V4Y2VlZHNfc3RyZWFtX2R1 cmF0aW9uKGluX3ZpZGVvX2ZyYW1lKSkKKyAgICAgICAgICAgICAgICBmcmFtZV90b19lbmNvZGUg PSBjb252ZXJ0ZWRfdmlkZW9fZnJhbWU7CiAgICAgICAgIH0KLSAgICB9Ci0KLSAgICBhdl93cml0 ZV90cmFpbGVyKG9jKTsKIAotICAgIC8qIENsb3NlIGVhY2ggY29kZWMuICovCi0gICAgaWYgKGhh dmVfdmlkZW8pCi0gICAgICAgIGNsb3NlX3N0cmVhbShvYywgJnZpZGVvX3N0KTsKLSAgICBpZiAo aGF2ZV9hdWRpbykKLSAgICAgICAgY2xvc2Vfc3RyZWFtKG9jLCAmYXVkaW9fc3QpOworICAgICAg ICAvKiBlbmNvZGUgdGhlIGNvbnZlcnRlZCBmcmFtZXMgYW5kIG11eCB0aGUgZW5jb2RlZCBwYWNr ZXRzICovCisgICAgICAgIGlmICgocmV0ID0gZW5jb2RlX2ZyYW1lKGVuY19jdHgsIGZyYW1lX3Rv X2VuY29kZSwgb3V0X3BrdCkpID09IDApIHsKKyAgICAgICAgICAgIGlmICgocmV0ID0gbXV4X2Vu Y29kZWRfcGt0KG91dF9wa3QsIG91dF9mbXRfY3R4LCBtZWRpYV90eXBlKSkgPCAwKQorICAgICAg ICAgICAgICAgZ290byBlbmQ7CisgICAgICAgIH0KIAotICAgIGlmICghKGZtdC0+ZmxhZ3MgJiBB VkZNVF9OT0ZJTEUpKQotICAgICAgICAvKiBDbG9zZSB0aGUgb3V0cHV0IGZpbGUuICovCi0gICAg ICAgIGF2aW9fY2xvc2VwKCZvYy0+cGIpOworICAgICAgICAvKiBjaGVjayBpZiB0aGUgZW5jb2Rl cnMgaGF2ZSBiZWVuIGZ1bGx5IGZsdXNoZWQgKi8KKyAgICAgICAgcHJvY2Vzc19hdWRpbyAmPSAh KChyZXQgPT0gQVZFUlJPUl9FT0YpICYmIChtZWRpYV90eXBlID09IEFWTUVESUFfVFlQRV9BVURJ TykpOworICAgICAgICBwcm9jZXNzX3ZpZGVvICY9ICEoKHJldCA9PSBBVkVSUk9SX0VPRikgJiYg KG1lZGlhX3R5cGUgPT0gQVZNRURJQV9UWVBFX1ZJREVPKSk7CiAKLSAgICAvKiBmcmVlIHRoZSBz dHJlYW0gKi8KLSAgICBhdmZvcm1hdF9mcmVlX2NvbnRleHQob2MpOworICAgIH0KIAotICAgIHJl dHVybiAwOworICAgIGF2X3dyaXRlX3RyYWlsZXIob3V0X2ZtdF9jdHgpOworICAgIHJldCA9IDA7 CisKK2VuZDoKKworICAgIGF2Y29kZWNfcGFyYW1ldGVyc19mcmVlKCZhdWRpb19pbl9wYXJhbXMp OworICAgIGF2Y29kZWNfcGFyYW1ldGVyc19mcmVlKCZ2aWRlb19pbl9wYXJhbXMpOworICAgIGF2 Y29kZWNfcGFyYW1ldGVyc19mcmVlKCZhdWRpb19lbmNfcGFyYW1zKTsKKyAgICBhdmNvZGVjX3Bh cmFtZXRlcnNfZnJlZSgmdmlkZW9fZW5jX3BhcmFtcyk7CisgICAgYXZjb2RlY19mcmVlX2NvbnRl eHQoJmF1ZGlvX2VuY19jdHgpOworICAgIGF2Y29kZWNfZnJlZV9jb250ZXh0KCZ2aWRlb19lbmNf Y3R4KTsKKyAgICBhdl9mcmFtZV9mcmVlKCZpbl9hdWRpb19mcmFtZSk7CisgICAgYXZfZnJhbWVf ZnJlZSgmaW5fdmlkZW9fZnJhbWUpOworICAgIGF2X2ZyYW1lX2ZyZWUoJmNvbnZlcnRlZF9hdWRp b19mcmFtZSk7CisgICAgYXZfZnJhbWVfZnJlZSgmY29udmVydGVkX3ZpZGVvX2ZyYW1lKTsKKyAg ICBzd3JfZnJlZSgmYXVkaW9fY29udmVydF9jdHgpOworICAgIHN3c19mcmVlQ29udGV4dCh2aWRl b19jb252ZXJ0X2N0eCk7CisgICAgaWYgKG91dF9mbXRfY3R4KQorICAgICAgICBhdmlvX2Nsb3Nl cCgmb3V0X2ZtdF9jdHgtPnBiKTsKKyAgICBhdmZvcm1hdF9mcmVlX2NvbnRleHQob3V0X2ZtdF9j dHgpOworICAgIGF2X3BhY2tldF9mcmVlKCZvdXRfcGt0KTsKKworICAgIHJldHVybiByZXQ7CiB9 Ci0tIAoyLjMyLjAKCg== ------=_Part_8300122_1458823203.1655600743317 Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: inline _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe". ------=_Part_8300122_1458823203.1655600743317--