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 70D7F400B6 for ; Thu, 20 Jan 2022 03:28:11 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id A166768B2B0; Thu, 20 Jan 2022 05:26:01 +0200 (EET) Received: from mail-pj1-f47.google.com (mail-pj1-f47.google.com [209.85.216.47]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 6690E68B1DB for ; Thu, 20 Jan 2022 05:25:52 +0200 (EET) Received: by mail-pj1-f47.google.com with SMTP id d5so2069604pjk.5 for ; Wed, 19 Jan 2022 19:25:52 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=message-id:in-reply-to:references:from:date:subject:fcc :content-transfer-encoding:mime-version:to:cc; bh=UPD+RV0QdV1ssJp+gltRDnWvk+USRxpDC9StPXgmuMA=; b=o/AEDxKwbhbKTLqEdcBoF9fl+XpGYf7NX2nfD2e+zhnCfo4Kkapw984cxJp2CV3lIF o/OA61XFQovKT04qQg1ehAwz3LBV1bG1W0VxEpyy4fMSVUobDUcjb/Tx+wKidOPPubFH wBuzK23imc2TKou6MAe0TwXNxhhgcHO2X0FylB1eSQ6EOyLzuYIphQmEZSUOnhwUsYQT X+jfg3K9kC4QBaZMyYfcj9eCC5xp9gV/0LAumX5DBkBrgb033okLrx0NIhweSW5H7Kcz gZfUVuxo44PtQOtKufDJiCyKLEfY/Cf9z+19BVWekCrSj0Q4RkM0Le+3j8YBnPRRk1HI eoDQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:message-id:in-reply-to:references:from:date :subject:fcc:content-transfer-encoding:mime-version:to:cc; bh=UPD+RV0QdV1ssJp+gltRDnWvk+USRxpDC9StPXgmuMA=; b=0Qe4KC7yhVTHgJ84LvJkO2WBQolaTVURI1r09x4+kLrjM3HaPzEte4vcYSeiKEPCbF uKziAvxeIM7OF77OmXLr6auf65mL+k1pOlj6mLVHaNd7/svQ29mN0MN4HYxwvBjQG+LG vju+3R13ILVBRrntl8K/eOZYutu8R4IajoNy2aNpdcRD4CjZhN14rGk1uO+E9ySwZ72L Occd5Nw63J7LEh/mvaqDqLDZv7JaBD/GcjzM3doTTrgA+6BoX6o6xF43f1dNzVYodUH3 V7eyYhO8NvRHqaOYT/95A2+fCNZcRUWUVSS0g1Wd10tw2BgvSTZMYZWdCt/t67TXP+Fj 3J0w== X-Gm-Message-State: AOAM530Vx9OWOASSrfTqGkUPY86/pyFPJ3g86r2lhzDNl0fY/jA6MTG8 102DpM10R0/yge30O+U69sVZVahk17s= X-Google-Smtp-Source: ABdhPJzMImNLywSStz+ic6SJBjXuCI/kft4Jq2zqJRIJwJm5u5xpB1kuBDu3AIbcv9TBTcxmpJYfQg== X-Received: by 2002:a17:902:7d81:b0:149:c926:7c2e with SMTP id a1-20020a1709027d8100b00149c9267c2emr36539773plm.27.1642649150268; Wed, 19 Jan 2022 19:25:50 -0800 (PST) Received: from [127.0.0.1] (master.gitmailbox.com. [34.83.118.50]) by smtp.gmail.com with ESMTPSA id u4sm1068093pfk.51.2022.01.19.19.25.49 (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Wed, 19 Jan 2022 19:25:49 -0800 (PST) Message-Id: <25cda21970d6e1bd19a8dc784ef209f7852d864d.1642649134.git.ffmpegagent@gmail.com> In-Reply-To: References: From: ffmpegagent Date: Thu, 20 Jan 2022 03:25:22 +0000 Fcc: Sent MIME-Version: 1.0 To: ffmpeg-devel@ffmpeg.org Subject: [FFmpeg-devel] [PATCH v3 14/26] avfilter/textmod: Add textmod, censor and show_speaker filters 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 Cc: Michael Niedermayer , softworkz , Andreas Rheinhardt Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" Archived-At: List-Archive: List-Post: RnJvbTogc29mdHdvcmt6IDxzb2Z0d29ya3pAaG90bWFpbC5jb20+CgotIHRleHRtb2Qge1MgLT4g UykKICBNb2RpZnkgc3VidGl0bGUgdGV4dCBpbiBhIG51bWJlciBvZiB3YXlzCgotIGNlbnNvciB7 UyAtPiBTKQogIENlbnNvciBzdWJ0aXRsZXMgdXNpbmcgYSB3b3JkIGxpc3QKCi0gc2hvd19zcGVh a2VyIHtTIC0+IFMpCiAgUHJlcGVuZCBzcGVha2VyIG5hbWVzIGZyb20gQVNTIHN1YnRpdGxlcyB0 byB0aGUgdmlzaWJsZSB0ZXh0IGxpbmVzCgpTaWduZWQtb2ZmLWJ5OiBzb2Z0d29ya3ogPHNvZnR3 b3JrekBob3RtYWlsLmNvbT4KLS0tCiBkb2MvZmlsdGVycy50ZXhpICAgICAgICAgfCAyMDYgKysr KysrKysrKysrCiBsaWJhdmZpbHRlci9NYWtlZmlsZSAgICAgfCAgIDUgKwogbGliYXZmaWx0ZXIv YWxsZmlsdGVycy5jIHwgICAzICsKIGxpYmF2ZmlsdGVyL3NmX3RleHRtb2QuYyB8IDcxMCArKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKIDQgZmlsZXMgY2hhbmdlZCwgOTI0 IGluc2VydGlvbnMoKykKIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWJhdmZpbHRlci9zZl90ZXh0bW9k LmMKCmRpZmYgLS1naXQgYS9kb2MvZmlsdGVycy50ZXhpIGIvZG9jL2ZpbHRlcnMudGV4aQppbmRl eCAwMmE4NTQ4NTFjLi42NTU5ZjlkMTAxIDEwMDY0NAotLS0gYS9kb2MvZmlsdGVycy50ZXhpCisr KyBiL2RvYy9maWx0ZXJzLnRleGkKQEAgLTI1NzcyLDYgKzI1NzcyLDE0NSBAQCBleGlzdGluZyBm aWx0ZXJzIHVzaW5nIEBjb2Rley0tZGlzYWJsZS1maWx0ZXJzfS4KIAogQmVsb3cgaXMgYSBkZXNj cmlwdGlvbiBvZiB0aGUgY3VycmVudGx5IGF2YWlsYWJsZSBzdWJ0aXRsZSBmaWx0ZXJzLgogCisK K0BzZWN0aW9uIGNlbnNvcgorCitDZW5zb3Igc2VsZWN0ZWQgd29yZHMgaW4gdGV4dCBzdWJ0aXRs ZXMuCisKK0lucHV0czoKK0BpdGVtaXplCitAaXRlbSAwOiBTdWJ0aXRsZXNbVEVYVF0KK0BlbmQg aXRlbWl6ZQorCitPdXRwdXRzOgorQGl0ZW1pemUKK0BpdGVtIDA6IFN1YnRpdGxlc1tURVhUXQor QGVuZCBpdGVtaXplCisKK0l0IGFjY2VwdHMgdGhlIGZvbGxvd2luZyBwYXJhbWV0ZXJzOgorCitA dGFibGUgQG9wdGlvbgorQGl0ZW0gbW9kZQorVGhlIGNlbnNvcmluZyBtb2RlIHRvIGFwcGx5Lgor CitTdXBwb3J0ZWQgY2Vuc29yaW5nIG1vZGVzIGFyZToKKworQHRhYmxlIEB2YXIKK0BpdGVtIDAs IGtlZXBfZmlyc3RfbGFzdAorUmVwbGFjZSBhbGwgY2hhcmFjdGVycyB3aXRoIHRoZSAnY2Vuc29y X2NoYXInIGV4Y2VwdCB0aGUgZmlyc3QgYW5kIHRoZSBsYXN0IGNoYXJhY3RlciBvZiBhIHdvcmQu CitGb3Igd29yZHMgd2l0aCBsZXNzIHRoYW4gNCBjaGFyYWN0ZXJzLCB0aGUgbGFzdCBjaGFyYWN0 ZXIgd2lsbCBiZSByZXBsYWNlZCBhcyB3ZWxsLgorRm9yIHdvcmRzIHdpdGggbGVzcyB0aGFuIDMg Y2hhcmFjdGVycywgdGhlIGZpcnN0IGNoYXJhY3RlciB3aWxsIGJlIHJlcGxhY2VkIGFzIHdlbGwu CitAaXRlbSAxLCBrZWVwX2ZpcnN0CitSZXBsYWNlIGFsbCBjaGFyYWN0ZXJzIHdpdGggdGhlICdj ZW5zb3JfY2hhcicgZXhjZXB0IHRoZSBmaXJzdCBjaGFyYWN0ZXIgb2YgYSB3b3JkLgorRm9yIHdv cmRzIHdpdGggbGVzcyB0aGFuIDMgY2hhcmFjdGVycywgdGhlIGZpcnN0IGNoYXJhY3RlciB3aWxs IGJlIHJlcGxhY2VkIGFzIHdlbGwuCitAaXRlbSAyLCBhbGwKK1JlcGxhY2UgYWxsIGNoYXJhY3Rl cnMgd2l0aCB0aGUgJ2NlbnNvcl9jaGFyJy4KK0BlbmQgdGFibGUKKworQGl0ZW0gd29yZHMKK0Eg bGlzdCBvZiB3b3JkcyB0byBjZW5zb3IsIHNlcGFyYXRlZCBieSAnc2VwYXJhdG9yJy4KKworQGl0 ZW0gd29yZHNfZmlsZQorU3BlY2lmeSBhIGZpbGUgZnJvbSB3aGljaCB0byBsb2FkIHRoZSBjb250 ZW50cyBmb3IgdGhlICd3b3JkcycgcGFyYW1ldGVyLgorCitAaXRlbSBjZW5zb3JfY2hhcgorU2lu Z2xlIGNoYXJhY3RlciB1c2VkIGFzIHJlcGxhY2VtZW50IGZvciBjZW5zb3JpbmcuCisKK0BpdGVt IHNlcGFyYXRvcgorRGVsaW1pdGVyIGNoYXJhY3RlciBmb3Igd29yZHMuIFVzZWQgd2l0aCByZXBs YWNlX3dvcmRzIGFuZCByZW1vdmVfd29yZHMtIE11c3QgYmUgYSBzaW5nbGUgY2hhcmFjdGVyLgor VGhlIGRlZmF1bHQgaXMgJy4nLgorCitAZW5kIHRhYmxlCisKK0BzdWJzZWN0aW9uIEV4YW1wbGVz CisKK0BpdGVtaXplCitAaXRlbQorQ2Vuc29yIGEgZmV3IGdpdmVuIHdvcmRzIHdpdGggYSBwb3Vu ZCBjaGFyYWN0ZXIuCitAZXhhbXBsZQorZmZtcGVnIC1pICJodHRwOi8vc3RyZWFtcy52aWRlb2xh bi5vcmcvc2FtcGxlcy9zdWIvU1NBL3N1YnRpdGxlX3Rlc3RpbmdfY29tcGxleC5ta3YiIC1maWx0 ZXJfY29tcGxleCAiWzA6MV1jZW5zb3I9d29yZHM9J2Rpc3MsbG91ZGVyLGhvcGUsYmVhbSx3b3Jk JzpjZW5zb3JfY2hhcj0nIyciIC1tYXAgMCAteSBvdXRwdXQubWt2CitAZW5kIGV4YW1wbGUKK0Bl bmQgaXRlbWl6ZQorCisKK0BzZWN0aW9uIHRleHRtb2QKKworTW9kaWZ5IHN1YnRpdGxlIHRleHQg aW4gYSBudW1iZXIgb2Ygd2F5cy4KKworSW5wdXRzOgorQGl0ZW1pemUKK0BpdGVtIDA6IFN1YnRp dGxlc1tURVhUXQorQGVuZCBpdGVtaXplCisKK091dHB1dHM6CitAaXRlbWl6ZQorQGl0ZW0gMDog U3VidGl0bGVzW1RFWFRdCitAZW5kIGl0ZW1pemUKKworSXQgYWNjZXB0cyB0aGUgZm9sbG93aW5n IHBhcmFtZXRlcnM6CisKK0B0YWJsZSBAb3B0aW9uCitAaXRlbSBtb2RlCitUaGUga2luZCBvZiB0 ZXh0IG1vZGlmaWNhdGlvbiB0byBhcHBseQorCitTdXBwb3J0ZWQgb3BlcmF0aW9uIG1vZGVzIGFy ZToKKworQHRhYmxlIEB2YXIKK0BpdGVtIDAsIGxlZXQKK0NvbnZlcnQgc3VidGl0bGUgdGV4dCB0 byAnbGVldCBzcGVhaycuIEl0J3MgcHJpbWFyaWx5IHVzZWZ1bCBmb3IgdGVzdGluZyBhcyB0aGUg bW9kaWZpY2F0aW9uIHdpbGwgYmUgdmlzaWJsZSB3aXRoIGFsbW9zdCBhbGwgdGV4dCBsaW5lcy4K K0BpdGVtIDEsIHRvX3VwcGVyCitDaGFuZ2UgYWxsIHRleHQgdG8gdXBwZXIgY2FzZS4gTWlnaHQg aW1wcm92ZSByZWFkYWJpbGl0eS4KK0BpdGVtIDIsIHRvX2xvd2VyCitDaGFuZ2UgYWxsIHRleHQg dG8gbG93ZXIgY2FzZS4KK0BpdGVtIDMsIHJlcGxhY2VfY2hhcnMKK1JlcGxhY2Ugb25lIG9yIG1v cmUgY2hhcmFjdGVycy4gUmVxdWlyZXMgdGhlIGZpbmQgYW5kIHJlcGxhY2UgcGFyYW1ldGVycyB0 byBiZSBzcGVjaWZpZWQuCitCb3RoIG5lZWQgdG8gYmUgZXF1YWwgaW4gbGVuZ3RoLgorVGhlIGZp cnN0IGNoYXIgaW4gZmluZCBpcyByZXBsYWNlZCBieSB0aGUgZmlyc3QgY2hhciBpbiByZXBsYWNl LCBzYW1lIGZvciBhbGwgc3Vic2VxdWVudCBjaGFycy4KK0BpdGVtIDQsIHJlbW92ZV9jaGFycwor UmVtb3ZlIGNlcnRhaW4gY2hhcmFjdGVycy4gUmVxdWlyZXMgdGhlIGZpbmQgcGFyYW1ldGVyIHRv IGJlIHNwZWNpZmllZC4KK0FsbCBjaGFycyBpbiB0aGUgZmluZCBwYXJhbWV0ZXIgc3RyaW5nIHdp bGwgYmUgcmVtb3ZlZCBmcm9tIGFsbCBzdWJ0aXRsZSB0ZXh0LgorQGl0ZW0gNSwgcmVwbGFjZV93 b3JkcworUmVwbGFjZSBvbmUgb3IgbW9yZSB3b3Jkcy4gUmVxdWlyZXMgdGhlIGZpbmQgYW5kIHJl cGxhY2UgcGFyYW1ldGVycyB0byBiZSBzcGVjaWZpZWQuIE11bHRpcGxlIHdvcmRzIG11c3QgYmUg c2VwYXJhdGVkIGJ5IHRoZSBkZWxpbWl0ZXIgY2hhciBzcGVjaWZpZWQgdmllIHRoZSBzZXBhcmF0 b3IgcGFyYW1ldGVyIChkZWZhdWx0OiAnLCcpLgorVGhlIG51bWJlciBvZiB3b3JkcyBpbiB0aGUg ZmluZCBhbmQgcmVwbGFjZSBwYXJhbWV0ZXJzIG5lZWRzIHRvIGJlIGVxdWFsLgorVGhlIGZpcnN0 IHdvcmQgaW4gZmluZCBpcyByZXBsYWNlZCBieSB0aGUgZmlyc3Qgd29yZCBpbiByZXBsYWNlLCBz YW1lIGZvciBhbGwgc3Vic2VxdWVudCB3b3JkcworQGl0ZW0gNiwgcmVtb3ZlX3dvcmRzCitSZW1v dmUgY2VydGFpbiB3b3Jkcy4gUmVxdWlyZXMgdGhlIGZpbmQgcGFyYW1ldGVyIHRvIGJlIHNwZWNp ZmllZC4gTXVsdGlwbGUgd29yZHMgbXVzdCBiZSBzZXBhcmF0ZWQgYnkgdGhlIGRlbGltaXRlciBj aGFyIHNwZWNpZmllZCB2aWUgdGhlIHNlcGFyYXRvciBwYXJhbWV0ZXIgKGRlZmF1bHQ6ICcsJyku CitBbGwgd29yZHMgaW4gdGhlIGZpbmQgcGFyYW1ldGVyIHN0cmluZyB3aWxsIGJlIHJlbW92ZWQg ZnJvbSBhbGwgc3VidGl0bGUgdGV4dC4KK0BlbmQgdGFibGUKKworQGl0ZW0gZmluZAorUmVxdWly ZWQgZm9yIHJlcGxhY2VfY2hhcnMsIHJlbW92ZV9jaGFycywgcmVwbGFjZV93b3JkcyBhbmQgcmVt b3ZlX3dvcmRzLgorCitAaXRlbSBmaW5kX2ZpbGUKK1NwZWNpZnkgYSBmaWxlIGZyb20gd2hpY2gg dG8gbG9hZCB0aGUgY29udGVudHMgZm9yIHRoZSAnZmluZCcgcGFyYW1ldGVyLgorCitAaXRlbSBy ZXBsYWNlCitSZXF1aXJlZCBmb3IgcmVwbGFjZV9jaGFycyBhbmQgcmVwbGFjZV93b3Jkcy4KKwor QGl0ZW0gcmVwbGFjZV9maWxlCitTcGVjaWZ5IGEgZmlsZSBmcm9tIHdoaWNoIHRvIGxvYWQgdGhl IGNvbnRlbnRzIGZvciB0aGUgJ3JlcGxhY2UnIHBhcmFtZXRlci4KKworQGl0ZW0gc2VwYXJhdG9y CitEZWxpbWl0ZXIgY2hhcmFjdGVyIGZvciB3b3Jkcy4gVXNlZCB3aXRoIHJlcGxhY2Vfd29yZHMg YW5kIHJlbW92ZV93b3Jkcy0gTXVzdCBiZSBhIHNpbmdsZSBjaGFyYWN0ZXIuCitUaGUgZGVmYXVs dCBpcyAnLicuCisKK0BlbmQgdGFibGUKKworQHN1YnNlY3Rpb24gRXhhbXBsZXMKKworQGl0ZW1p emUKK0BpdGVtCitDaGFuZ2UgYWxsIGNoYXJhY3RlcnMgdG8gdXBwZXIgY2FzZSB3aGlsZSBrZWVw aW5nIGFsbCBzdHlsZXMgYW5kIGFuaW1hdGlvbnM6CitAZXhhbXBsZQorZmZtcGVnIC1pICJodHRw czovL3N0cmVhbXMudmlkZW9sYW4ub3JnL2ZmbXBlZy9ta3Zfc3VidGl0bGVzLm1rdiIgLWZpbHRl cl9jb21wbGV4ICJbMDpzXXRleHRtb2Q9bW9kZT10b191cHBlciIgLW1hcCAwIC15IG91dC5ta3YK K0BlbmQgZXhhbXBsZQorQGl0ZW0KK1JlbW92ZSBhIHNldCBvZiBzeW1ib2wgY2hhcmFjdGVycyBm b3IgYW0gaW1wcm92ZWQgYW5kIHNtb290aGVyIHZpc3VhbCBhcHBlcmFuY2U6CitAZXhhbXBsZQor ZmZtcGVnIC1pICJodHRwczovL3N0cmVhbXMudmlkZW9sYW4ub3JnL2ZmbXBlZy9ta3Zfc3VidGl0 bGVzLm1rdiIgLWZpbHRlcl9jb21wbGV4ICJbMDpzXXRleHRtb2Q9bW9kZT1yZW1vdmVfY2hhcnM6 ZmluZD0nJCYjQCrCpyciIC1tYXAgMCAteSBvdXQubWt2CitAZW5kIGV4YW1wbGUKK0BlbmQgaXRl bWl6ZQorCiBAc2VjdGlvbiBncmFwaGljc3ViMnZpZGVvCiAKIFJlbmRlcnMgZ3JhcGhpYyBzdWJ0 aXRsZXMgYXMgdmlkZW8gZnJhbWVzLgpAQCAtMjU5MzksNiArMjYwNzgsNzMgQEAgZmZtcGVnIC1p ICJodHRwOi8vc3RyZWFtcy52aWRlb2xhbi5vcmcvc2FtcGxlcy9zdWIvU1NBL3N1YnRpdGxlX3Rl c3RpbmdfY29tcGxleC4KIEBlbmQgZXhhbXBsZQogQGVuZCBpdGVtaXplCiAKK0BzZWN0aW9uIHNo b3dzcGVha2VyCisKK1ByZXBlbmQgc3BlYWtlciBuYW1lcyB0byBzdWJ0aXRsZSBsaW5lcyAod2hl biBhdmFpbGFibGUpLgorCitTdWJ0aXRsZXMgaW4gQVNTL1NTQSBmb3JtYXQgYXJlIG9mdGVuIGlu Y2x1ZGluZyB0aGUgbmFtZXMgb2YgdGhlIHBlcnNvbnMKK29yIGNoYXJhY3RlciBmb3IgZWFjaCBz dWJ0aXRsZSBsaW5lLiBUaGUgc2hvd3NwZWFrZXIgZmlsdGVyIGFkZHMgdGhvc2UgbmFtZXMKK3Rv IHRoZSBhY3R1YWwgc3VidGl0bGUgdGV4dCB0byBtYWtlIGl0IHZpc2libGUgb24gcGxheWJhY2su CisKK0lucHV0czoKK0BpdGVtaXplCitAaXRlbSAwOiBTdWJ0aXRsZXNbVEVYVF0KK0BlbmQgaXRl bWl6ZQorCitPdXRwdXRzOgorQGl0ZW1pemUKK0BpdGVtIDA6IFN1YnRpdGxlc1tURVhUXQorQGVu ZCBpdGVtaXplCisKK0l0IGFjY2VwdHMgdGhlIGZvbGxvd2luZyBwYXJhbWV0ZXJzOgorCitAdGFi bGUgQG9wdGlvbgorQGl0ZW0gZm9ybWF0CitUaGUgZm9ybWF0IGZvciBwcmVwZW5kaW5nIHNwZWFr ZXIgbmFtZXMuIERlZmF1bHQgaXMgJ3NxdWFyZV9icmFja2V0cycuCisKK1N1cHBvcnRlZCBvcGVy YXRpb24gbW9kZXMgYXJlOgorCitAdGFibGUgQHZhcgorQGl0ZW0gMCwgc3F1YXJlX2JyYWNrZXRz CitFbmNsb3NlIHRoZSBzcGVha2VyIG5hbWUgaW4gc3F1YXJlIGJyYWNrZXRzLCBmb2xsb3dlZCBi eSBzcGFjZSAoJ1tzcGVha2VyXSB0ZXh0JykuCitAaXRlbSAxLCByb3VuZF9icmFja2V0cworRW5j bG9zZSB0aGUgc3BlYWtlciBuYW1lIGluIHJvdW5kIGJyYWNrZXRzLCBmb2xsb3dlZCBieSBzcGFj ZSAoJyhzcGVha2VyKSB0ZXh0JykuCitAaXRlbSAyLCBjb2xvbgorU2VwYXJhdGUgdGhlIHNwZWFr ZXIgbmFtZSB3aXRoIGEgY29sb24gYW5kIHNwYWNlICgnc3BlYWtlcjogdGV4dCcpLgorQGl0ZW0g MywgcGxhaW4KK1NlcGFyYXRlIHRoZSBzcGVha2VyIG5hbWUgd2l0aCBhIHNwYWNlIG9ubHkgKCdz cGVha2VyIHRleHQnKS4KK0BlbmQgdGFibGUKKworQGl0ZW0gbGluZV9icmVhaworU2V0IHRow61z IHBhcmFtZXRlciB0byBpbnNlcnQgYSBsaW5lIGJyZWFrIGJldHdlZW4gc3BlYWtlciBuYW1lIGFu ZCB0ZXh0IGluc3RlYWQgb2YgdGhlIHNwYWNlIGNoYXJhY3Rlci4KKworQGl0ZW0gc3R5bGUKK0Fs bG93cyB0byBzZXQgYSBzcGVjaWZpYyBzdHlsZSBmb3IgdGhlIHNwZWFrZXIgbmFtZSB0ZXh0Lgor CitUaGlzIGNhbiBiZSBlaXRoZXIgYSBuYW1lZCBzdHlsZSB0aGF0IGV4aXN0cyBpbiB0aGUgYXNz IHN1YnRpdGxlIGhlYWRlciBzY3JpcHQgKGUuZy4gJ0RlZmF1bHQnKSBvciBhbiBhc3Mgc3R5bGUg b3ZlcnJpZGUgY29kZS4KK0V4YW1wbGU6ICBAe1xcYyZIREQwMDAwJlxcYmUxXFxpMVxcYm9yZDEw QH0KK1RoaXMgc2V0cyB0aGUgY29sb3IgdG8gYmx1ZSwgZW5hYmxlcyBlZGdlIGJsdXJyaW5nLCBp dGFsaWMgZm9udCBhbmQgYSBib3JkZXIgb2Ygc2l6ZSAxMC4KKworVGhlIGJlaGF2aW9yIGlzIGFz IGZvbGxvd3M6CisKKy0gV2hlbiB0aGUgc3R5bGUgcGFyYW1ldGVyIGlzIG5vdCBwcm92aWRlZCwg dGhlIGZpbHRlciB3aWxsIGZpbmQgdGhlIGZpcnN0IHBvc2l0aW9uIGluIHRoZSBldmVudCBzdHJp bmcgdGhhdCBpcyBhY3R1YWwgdGV4dC4KKyAgVGhlIHNwZWFrZXIgbmFtZSB3aWxsIGJlIGluc2Vy dGVkIGF0IHRoaXMgcG9zaXRpb24uIFRoaXMgYWxsb3dzIHRvIGhhdmUgdGhlIHNwZWFrZXIgbmFt ZSBzaG93biBpbiB0aGUgc2FtZSBzdHlsZSBsaWtlIHRoZQorICByZWd1bGFyIHRleHQsIGluIGNh c2UgdGhlIHN0cmluZyB3b3VsZCBzdGFydCB3aXRoIGEgc2VxdWVuY2Ugb2Ygc3R5bGUgY29kZXMu CistIFdoZW4gdGhlIHN0eWxlIHBhcmFtZXRlciBpcyBwcm92aWRlZCwgZXZlcnl0aGluZyB3aWxs IGJlIHByZXBlbmRlZCB0byB0aGUgb3JpZ2luYWwgdGV4dDoKKyAgU3R5bGUgQ29kZSBvciBTdHls ZSBuYW1lID4+IFNwZWFrZXIgTmFtZSA+PiBTdHlsZSBSZXNldCBDb2RlID4+IE9yaWdpbmFsIFRl eHQKKworQGVuZCB0YWJsZQorCitAc3Vic2VjdGlvbiBFeGFtcGxlcworCitAaXRlbWl6ZQorQGl0 ZW0KK1ByZXBlbmQgc3BlYWtlciBuYW1lcyB3aXRoIGJsdWUgdGV4dCwgc21vb3RoIGVkZ2VzIGFu ZCBibGVuZC9vdmVybGF5IHRoYXQgb250byB0aGUgdmlkZW8uCitAZXhhbXBsZQorZmZtcGVnIC1p IElOUFVUIC1maWx0ZXJfY29tcGxleCAic2hvd3NwZWFrZXI9Zm9ybWF0PWNvbG9uOnN0eWxlPSdA e1xcYyZIREQwMDAwJlxcYmUxQH0nLFswOnZdb3ZlcmxheV90ZXh0c3VicyIKK0BlbmQgZXhhbXBs ZQorQGVuZCBpdGVtaXplCisKIEBzZWN0aW9uIHRleHRzdWIydmlkZW8KIAogQ29udmVydHMgdGV4 dCBzdWJ0aXRsZXMgdG8gdmlkZW8gZnJhbWVzLgpkaWZmIC0tZ2l0IGEvbGliYXZmaWx0ZXIvTWFr ZWZpbGUgYi9saWJhdmZpbHRlci9NYWtlZmlsZQppbmRleCBhM2Y4YTA3MTMxLi40NTc5YjdjOGMw IDEwMDY0NAotLS0gYS9saWJhdmZpbHRlci9NYWtlZmlsZQorKysgYi9saWJhdmZpbHRlci9NYWtl ZmlsZQpAQCAtNTYyLDYgKzU2MiwxMSBAQCBPQkpTLSQoQ09ORklHX1lVVlRFU1RTUkNfRklMVEVS KSAgICAgICAgICAgICArPSB2c3JjX3Rlc3RzcmMubwogCiBPQkpTLSQoQ09ORklHX05VTExTSU5L X0ZJTFRFUikgICAgICAgICAgICAgICArPSB2c2lua19udWxsc2luay5vCiAKKyMgc3VidGl0bGUg ZmlsdGVycworT0JKUy0kKENPTkZJR19DRU5TT1JfRklMVEVSKSAgICAgICAgICAgICAgICAgKz0g c2ZfdGV4dG1vZC5vCitPQkpTLSQoQ09ORklHX1NIT1dfU1BFQUtFUl9GSUxURVIpICAgICAgICAg ICArPSBzZl90ZXh0bW9kLm8KK09CSlMtJChDT05GSUdfVEVYVE1PRF9GSUxURVIpICAgICAgICAg ICAgICAgICs9IHNmX3RleHRtb2QubworCiAjIG11bHRpbWVkaWEgZmlsdGVycwogT0JKUy0kKENP TkZJR19BQklUU0NPUEVfRklMVEVSKSAgICAgICAgICAgICAgKz0gYXZmX2FiaXRzY29wZS5vCiBP QkpTLSQoQ09ORklHX0FEUkFXR1JBUEhfRklMVEVSKSAgICAgICAgICAgICArPSBmX2RyYXdncmFw aC5vCmRpZmYgLS1naXQgYS9saWJhdmZpbHRlci9hbGxmaWx0ZXJzLmMgYi9saWJhdmZpbHRlci9h bGxmaWx0ZXJzLmMKaW5kZXggNWYwNjhhMTUyZC4uOWM0ODlmZGM2NiAxMDA2NDQKLS0tIGEvbGli YXZmaWx0ZXIvYWxsZmlsdGVycy5jCisrKyBiL2xpYmF2ZmlsdGVyL2FsbGZpbHRlcnMuYwpAQCAt NTQ4LDYgKzU0OCw5IEBAIGV4dGVybiBjb25zdCBBVkZpbHRlciBmZl9hdmZfc2hvd3ZvbHVtZTsK IGV4dGVybiBjb25zdCBBVkZpbHRlciBmZl9hdmZfc2hvd3dhdmVzOwogZXh0ZXJuIGNvbnN0IEFW RmlsdGVyIGZmX2F2Zl9zaG93d2F2ZXNwaWM7CiBleHRlcm4gY29uc3QgQVZGaWx0ZXIgZmZfdmFm X3NwZWN0cnVtc3ludGg7CitleHRlcm4gY29uc3QgQVZGaWx0ZXIgZmZfc2ZfY2Vuc29yOworZXh0 ZXJuIGNvbnN0IEFWRmlsdGVyIGZmX3NmX3Nob3dzcGVha2VyOworZXh0ZXJuIGNvbnN0IEFWRmls dGVyIGZmX3NmX3RleHRtb2Q7CiBleHRlcm4gY29uc3QgQVZGaWx0ZXIgZmZfc3ZmX2dyYXBoaWNz dWIydmlkZW87CiBleHRlcm4gY29uc3QgQVZGaWx0ZXIgZmZfc3ZmX3RleHRzdWIydmlkZW87CiAK ZGlmZiAtLWdpdCBhL2xpYmF2ZmlsdGVyL3NmX3RleHRtb2QuYyBiL2xpYmF2ZmlsdGVyL3NmX3Rl eHRtb2QuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwLi5jNzUyNDRjZmIy Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYXZmaWx0ZXIvc2ZfdGV4dG1vZC5jCkBAIC0wLDAgKzEs NzEwIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDIxIHNvZnR3b3JregorICoKKyAqIFRoaXMg ZmlsZSBpcyBwYXJ0IG9mIEZGbXBlZy4KKyAqCisgKiBGRm1wZWcgaXMgZnJlZSBzb2Z0d2FyZTsg eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl cm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxp c2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24g Mi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9u LgorICoKKyAqIEZGbXBlZyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwg YmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhl IGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBB IFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMZXNzZXIgR2VuZXJhbCBQdWJs aWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNl aXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2Ug YWxvbmcgd2l0aCBGRm1wZWc7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAq IEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3Rv biwgTUEgMDIxMTAtMTMwMSBVU0EKKyAqLworCisvKioKKyAqIEBmaWxlCisgKiB0ZXh0IHN1YnRp dGxlIGZpbHRlciB3aGljaCBhbGxvd3MgdG8gbW9kaWZ5IHN1YnRpdGxlIHRleHQgaW4gc2V2ZXJh bCB3YXlzCisgKi8KKworI2luY2x1ZGUgPGxpYmF2dXRpbC9hc3NfaW50ZXJuYWwuaD4KKworI2lu Y2x1ZGUgImxpYmF2dXRpbC9vcHQuaCIKKyNpbmNsdWRlICJpbnRlcm5hbC5oIgorI2luY2x1ZGUg ImxpYmF2dXRpbC9hc3Nfc3BsaXRfaW50ZXJuYWwuaCIKKyNpbmNsdWRlICJsaWJhdnV0aWwvYnBy aW50LmgiCisjaW5jbHVkZSAibGliYXZ1dGlsL2ZpbGUuaCIKKworc3RhdGljIGNvbnN0IGNoYXIq IGxlZXRfc3JjID0gImFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6QUJDREVGR0hJSktMTU5PUFFS U1RVVldYWVoiOworc3RhdGljIGNvbnN0IGNoYXIqIGxlZXRfZHN0ID0gImFiY2QzZjYjMWprbG1u MHBxMjU3dXZ3eHl6QUIoRDNGNiMxSktMTU4wUFEyNTdVVldYWVoiOworCitlbnVtIFRleHRNb2RG aWx0ZXJUeXBlIHsKKyAgICBUTV9URVhUTU9ELAorICAgIFRNX0NFTlNPUiwKKyAgICBUTV9TSE9X X1NQRUFLRVIsCit9OworCitlbnVtIFRleHRNb2RPcGVyYXRpb24geworICAgIE9QX0xFRVQsCisg ICAgT1BfVE9fVVBQRVIsCisgICAgT1BfVE9fTE9XRVIsCisgICAgT1BfUkVQTEFDRV9DSEFSUywK KyAgICBPUF9SRU1PVkVfQ0hBUlMsCisgICAgT1BfUkVQTEFDRV9XT1JEUywKKyAgICBPUF9SRU1P VkVfV09SRFMsCisgICAgTkJfT1BTLAorfTsKKworZW51bSBDZW5zb3JNb2RlIHsKKyAgICBDTV9L RUVQX0ZJUlNUX0xBU1QsCisgICAgQ01fS0VFUF9GSVJTVCwKKyAgICBDTV9BTEwsCit9OworCitl bnVtIFNob3dTcGVha2VyTW9kZSB7CisgICAgU01fU1FVQVJFX0JSQUNLRVRTLAorICAgIFNNX1JP VU5EX0JSQUNLRVRTLAorICAgIFNNX0NPTE9OLAorICAgIFNNX1BMQUlOLAorfTsKKwordHlwZWRl ZiBzdHJ1Y3QgVGV4dE1vZENvbnRleHQgeworICAgIGNvbnN0IEFWQ2xhc3MgKmNsYXNzOworICAg IGVudW0gQVZTdWJ0aXRsZVR5cGUgZm9ybWF0OworICAgIGVudW0gVGV4dE1vZEZpbHRlclR5cGUg ZmlsdGVyX3R5cGU7CisgICAgZW51bSBUZXh0TW9kT3BlcmF0aW9uIG9wZXJhdGlvbjsKKyAgICBl bnVtIENlbnNvck1vZGUgY2Vuc29yX21vZGU7CisgICAgZW51bSBTaG93U3BlYWtlck1vZGUgc3Bl YWtlcl9tb2RlOworICAgIGNoYXIgKmZpbmQ7CisgICAgY2hhciAqZmluZF9maWxlOworICAgIGNo YXIgKnN0eWxlOworICAgIGNoYXIgKnJlcGxhY2U7CisgICAgY2hhciAqcmVwbGFjZV9maWxlOwor ICAgIGNoYXIgKnNlcGFyYXRvcjsKKyAgICBjaGFyICpjZW5zb3JfY2hhcjsKKyAgICBjaGFyICoq ZmluZF9saXN0OworICAgIGludCAgbGluZV9icmVhazsKKyAgICBpbnQgIG5iX2ZpbmRfbGlzdDsK KyAgICBjaGFyICoqcmVwbGFjZV9saXN0OworICAgIGludCAgbmJfcmVwbGFjZV9saXN0OworfSBU ZXh0TW9kQ29udGV4dDsKKworc3RhdGljIGNoYXIgKipzcGxpdF9zdHJpbmcoY2hhciAqc291cmNl LCBpbnQgKm5iX2VsZW1zLCBjb25zdCBjaGFyICpkZWxpbSkKK3sKKyAgICBjaGFyICoqbGlzdCA9 IE5VTEw7CisgICAgY2hhciAqdGVtcCA9IE5VTEw7CisgICAgY2hhciAqcHRyID0gYXZfc3RydG9r KHNvdXJjZSwgZGVsaW0sICZ0ZW1wKTsKKworICAgIHdoaWxlIChwdHIpIHsKKyAgICAgICAgaWYg KHN0cmxlbihwdHIpKSB7CisgICAgICAgICAgICBhdl9keW5hcnJheV9hZGQoJmxpc3QsIG5iX2Vs ZW1zLCBwdHIpOworICAgICAgICAgICAgaWYgKCFsaXN0KQorICAgICAgICAgICAgICAgIHJldHVy biBOVUxMOworICAgICAgICB9CisKKyAgICAgICAgcHRyID0gYXZfc3RydG9rKE5VTEwsIGRlbGlt LCAmdGVtcCk7CisgICAgfQorCisgICAgaWYgKCFsaXN0KQorICAgICAgICByZXR1cm4gTlVMTDsK KworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgKm5iX2VsZW1zOyBpKyspIHsKKyAgICAgICAgbGlz dFtpXSA9IGF2X3N0cmR1cChsaXN0W2ldKTsKKyAgICAgICAgaWYgKCFsaXN0W2ldKSB7CisgICAg ICAgICAgICBmb3IgKGludCBuID0gMDsgbiA8IGk7IG4rKykKKyAgICAgICAgICAgICAgICBhdl9m cmVlKGxpc3Rbbl0pOworICAgICAgICAgICAgYXZfZnJlZShsaXN0KTsKKyAgICAgICAgICAgIHJl dHVybiBOVUxMOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIGxpc3Q7Cit9CisKK3N0 YXRpYyBpbnQgbG9hZF90ZXh0X2Zyb21fZmlsZShBVkZpbHRlckNvbnRleHQgKmN0eCwgY29uc3Qg Y2hhciAqZmlsZV9uYW1lLCBjaGFyICoqdGV4dCwgY2hhciBzZXBhcmF0b3IpCit7CisgICAgaW50 IGVycjsKKyAgICB1aW50OF90ICp0ZXh0YnVmOworICAgIGNoYXIgKnRtcDsKKyAgICBzaXplX3Qg dGV4dGJ1Zl9zaXplOworICAgIGludCBvZmZzZXQgPSAwOworCisgICAgaWYgKChlcnIgPSBhdl9m aWxlX21hcChmaWxlX25hbWUsICZ0ZXh0YnVmLCAmdGV4dGJ1Zl9zaXplLCAwLCBjdHgpKSA8IDAp IHsKKyAgICAgICAgYXZfbG9nKGN0eCwgQVZfTE9HX0VSUk9SLCAiVGhlIHRleHQgZmlsZSAnJXMn IGNvdWxkIG5vdCBiZSByZWFkIG9yIGlzIGVtcHR5XG4iLCBmaWxlX25hbWUpOworICAgICAgICBy ZXR1cm4gZXJyOworICAgIH0KKworICAgIGlmICh0ZXh0YnVmX3NpemUgPiAxICYmCisgICAgICAg ICh0ZXh0YnVmWzBdID09IDB4RkYgJiYgdGV4dGJ1ZlsxXSA9PSAweEZFCisgICAgICAgIHx8IHRl eHRidWZbMF0gPT0gMHhGRSAmJiB0ZXh0YnVmWzFdID09IDB4RkYpKSB7CisgICAgICAgIGF2X2xv ZyhjdHgsIEFWX0xPR19FUlJPUiwgIlVURiB0ZXh0IGZpbGVzIGFyZSBub3Qgc3VwcG9ydGVkLiBG aWxlOiAlc1xuIiwgZmlsZV9uYW1lKTsKKyAgICAgICAgcmV0dXJuIEFWRVJST1IoRUlOVkFMKTsK KyAgICB9CisKKyAgICBpZiAodGV4dGJ1Zl9zaXplID4gMiAmJiB0ZXh0YnVmWzBdID09IDB4RUYg JiYgdGV4dGJ1ZlsxXSA9PSAweEJCICYmIHRleHRidWZbMl0gPT0gMHhCRikKKyAgICAgICAgb2Zm c2V0ID0gMzsgLy8gVVRGLTgKKworICAgIGlmICh0ZXh0YnVmX3NpemUgPiBTSVpFX01BWCAtIDEg fHwgISgodG1wID0gYXZfc3RybmR1cCgoY2hhciAqKXRleHRidWYgKyBvZmZzZXQsIHRleHRidWZf c2l6ZSAtIG9mZnNldCkpKSkgeworICAgICAgICBhdl9maWxlX3VubWFwKHRleHRidWYsIHRleHRi dWZfc2l6ZSk7CisgICAgICAgIHJldHVybiBBVkVSUk9SKEVOT01FTSk7CisgICAgfQorCisgICAg YXZfZmlsZV91bm1hcCh0ZXh0YnVmLCB0ZXh0YnVmX3NpemUpOworCisgICAgZm9yIChzaXplX3Qg aSA9IDA7IGkgPCBzdHJsZW4odG1wKTsgaSsrKSB7CisgICAgICAgIHN3aXRjaCAodG1wW2ldKSB7 CisgICAgICAgIGNhc2UgJ1xuJzoKKyAgICAgICAgY2FzZSAnXHInOgorICAgICAgICBjYXNlICdc Zic6CisgICAgICAgIGNhc2UgJ1x2JzoKKyAgICAgICAgICAgIHRtcFtpXSA9IHNlcGFyYXRvcjsK KyAgICAgICAgfQorICAgIH0KKworICAgICp0ZXh0ID0gdG1wOworCisgICAgcmV0dXJuIDA7Cit9 CisKK3N0YXRpYyBpbnQgbG9hZF9maWxlcyhBVkZpbHRlckNvbnRleHQgKmN0eCkKK3sKKyAgICBU ZXh0TW9kQ29udGV4dCAqcyA9IGN0eC0+cHJpdjsKKyAgICBpbnQgcmV0OworCisgICAgaWYgKCFz LT5zZXBhcmF0b3IgfHwgc3RybGVuKHMtPnNlcGFyYXRvcikgIT0gMSkgeworICAgICAgICBhdl9s b2coY3R4LCBBVl9MT0dfRVJST1IsICJBIHNpbmdsZSBjaGFyYWN0ZXIgbmVlZHMgdG8gYmUgc3Bl Y2lmaWVkIGZvciB0aGUgc2VwYXJhdG9yIHBhcmFtZXRlci5cbiIpOworICAgICAgICByZXR1cm4g QVZFUlJPUihFSU5WQUwpOworICAgIH0KKworICAgIGlmIChzLT5maW5kX2ZpbGUgJiYgc3RybGVu KHMtPmZpbmRfZmlsZSkpIHsKKyAgICAgICAgcmV0ID0gbG9hZF90ZXh0X2Zyb21fZmlsZShjdHgs IHMtPmZpbmRfZmlsZSwgJnMtPmZpbmQsIHMtPnNlcGFyYXRvclswXSk7CisgICAgICAgIGlmIChy ZXQgPCAwICkKKyAgICAgICAgICAgIHJldHVybiByZXQ7CisgICAgfQorCisgICAgaWYgKHMtPnJl cGxhY2VfZmlsZSAmJiBzdHJsZW4ocy0+cmVwbGFjZV9maWxlKSkgeworICAgICAgICByZXQgPSBs b2FkX3RleHRfZnJvbV9maWxlKGN0eCwgcy0+cmVwbGFjZV9maWxlLCAmcy0+cmVwbGFjZSwgcy0+ c2VwYXJhdG9yWzBdKTsKKyAgICAgICAgaWYgKHJldCA8IDAgKQorICAgICAgICAgICAgcmV0dXJu IHJldDsKKyAgICB9CisKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIGludCBpbml0X2NlbnNv cihBVkZpbHRlckNvbnRleHQgKmN0eCkKK3sKKyAgICBUZXh0TW9kQ29udGV4dCAqcyA9IGN0eC0+ cHJpdjsKKyAgICBpbnQgcmV0OworCisgICAgcy0+ZmlsdGVyX3R5cGUgPSBUTV9DRU5TT1I7Cisg ICAgcy0+b3BlcmF0aW9uID0gT1BfUkVQTEFDRV9XT1JEUzsKKworICAgIHJldCA9IGxvYWRfZmls ZXMoY3R4KTsKKyAgICBpZiAocmV0IDwgMCApCisgICAgICAgIHJldHVybiByZXQ7CisKKyAgICBp ZiAoIXMtPmZpbmQgfHwgIXN0cmxlbihzLT5maW5kKSkgeworICAgICAgICBhdl9sb2coY3R4LCBB Vl9MT0dfRVJST1IsICJFaXRoZXIgdGhlICd3b3Jkcycgb3IgdGhlICd3b3Jkc19maWxlJyBwYXJh bWV0ZXIgbmVlZHMgdG8gYmUgc3BlY2lmaWVkXG4iKTsKKyAgICAgICAgcmV0dXJuIEFWRVJST1Io RUlOVkFMKTsKKyAgICB9CisKKyAgICBpZiAoIXMtPmNlbnNvcl9jaGFyIHx8IHN0cmxlbihzLT5j ZW5zb3JfY2hhcikgIT0gMSkgeworICAgICAgICBhdl9sb2coY3R4LCBBVl9MT0dfRVJST1IsICJB IHNpbmdsZSBjaGFyYWN0ZXIgbmVlZHMgdG8gYmUgc3BlY2lmaWVkIGZvciB0aGUgY2Vuc29yX2No YXIgcGFyYW1ldGVyXG4iKTsKKyAgICAgICAgcmV0dXJuIEFWRVJST1IoRUlOVkFMKTsKKyAgICB9 CisKKyAgICBzLT5maW5kX2xpc3QgPSBzcGxpdF9zdHJpbmcocy0+ZmluZCwgJnMtPm5iX2ZpbmRf bGlzdCwgcy0+c2VwYXJhdG9yKTsKKyAgICBpZiAoIXMtPmZpbmRfbGlzdCkKKyAgICAgICAgcmV0 dXJuIEFWRVJST1IoRU5PTUVNKTsKKworICAgIHMtPnJlcGxhY2VfbGlzdCA9IGF2X2NhbGxvYyhz LT5uYl9maW5kX2xpc3QsIHNpemVvZihjaGFyICopKTsKKyAgICBpZiAoIXMtPnJlcGxhY2VfbGlz dCkKKyAgICAgICAgcmV0dXJuIEFWRVJST1IoRU5PTUVNKTsKKworICAgIGZvciAoaW50IGkgPSAw OyBpIDwgcy0+bmJfZmluZF9saXN0OyBpKyspIHsKKyAgICAgICAgc2l6ZV90IGxlbiwgc3RhcnQg PSAwLCBlbmQ7CisgICAgICAgIGNoYXIgKml0ZW0gPSBhdl9zdHJkdXAocy0+ZmluZF9saXN0W2ld KTsKKyAgICAgICAgaWYgKCFpdGVtKQorICAgICAgICAgICAgcmV0dXJuIEFWRVJST1IoRU5PTUVN KTsKKworICAgICAgICBsZW4gPSBlbmQgPSBzdHJsZW4oaXRlbSk7CisKKyAgICAgICAgc3dpdGNo IChzLT5jZW5zb3JfbW9kZSkgeworICAgICAgICBjYXNlIENNX0tFRVBfRklSU1RfTEFTVDoKKwor ICAgICAgICAgICAgaWYgKGxlbiA+IDIpCisgICAgICAgICAgICAgICAgc3RhcnQgPSAxOworICAg ICAgICAgICAgaWYgKGxlbiA+IDMpCisgICAgICAgICAgICAgICAgZW5kLS07CisKKyAgICAgICAg ICAgIGJyZWFrOworICAgICAgICBjYXNlIENNX0tFRVBfRklSU1Q6CisKKyAgICAgICAgICAgIGlm IChsZW4gPiAyKQorICAgICAgICAgICAgICAgIHN0YXJ0ID0gMTsKKworICAgICAgICAgICAgYnJl YWs7CisgICAgICAgIH0KKworICAgICAgICBmb3IgKHNpemVfdCBuID0gc3RhcnQ7IG4gPCBlbmQ7 IG4rKykKKyAgICAgICAgICAgIGl0ZW1bbl0gPSBzLT5jZW5zb3JfY2hhclswXTsKKworICAgICAg ICBzLT5yZXBsYWNlX2xpc3RbaV0gPSBpdGVtOworICAgIH0KKworICAgIHJldHVybiAwOworfQor CitzdGF0aWMgaW50IGluaXRfc2hvd3NwZWFrZXIoQVZGaWx0ZXJDb250ZXh0ICpjdHgpCit7Cisg ICAgVGV4dE1vZENvbnRleHQgKnMgPSBjdHgtPnByaXY7CisgICAgcy0+ZmlsdGVyX3R5cGUgPSBU TV9TSE9XX1NQRUFLRVI7CisKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIGludCBpbml0KEFW RmlsdGVyQ29udGV4dCAqY3R4KQoreworICAgIFRleHRNb2RDb250ZXh0ICpzID0gY3R4LT5wcml2 OworICAgIGludCByZXQ7CisKKyAgICByZXQgPSBsb2FkX2ZpbGVzKGN0eCk7CisgICAgaWYgKHJl dCA8IDAgKQorICAgICAgICByZXR1cm4gcmV0OworCisgICAgc3dpdGNoIChzLT5vcGVyYXRpb24p IHsKKyAgICBjYXNlIE9QX1JFUExBQ0VfQ0hBUlM6CisgICAgY2FzZSBPUF9SRU1PVkVfQ0hBUlM6 CisgICAgY2FzZSBPUF9SRVBMQUNFX1dPUkRTOgorICAgIGNhc2UgT1BfUkVNT1ZFX1dPUkRTOgor ICAgICAgICBpZiAoIXMtPmZpbmQgfHwgIXN0cmxlbihzLT5maW5kKSkgeworICAgICAgICAgICAg YXZfbG9nKGN0eCwgQVZfTE9HX0VSUk9SLCAiU2VsZWN0ZWQgbW9kZSByZXF1aXJlcyB0aGUgJ2Zp bmQnIHBhcmFtZXRlciB0byBiZSBzcGVjaWZpZWRcbiIpOworICAgICAgICAgICAgcmV0dXJuIEFW RVJST1IoRUlOVkFMKTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBz d2l0Y2ggKHMtPm9wZXJhdGlvbikgeworICAgIGNhc2UgT1BfUkVQTEFDRV9DSEFSUzoKKyAgICBj YXNlIE9QX1JFUExBQ0VfV09SRFM6CisgICAgICAgIGlmICghcy0+cmVwbGFjZSB8fCAhc3RybGVu KHMtPnJlcGxhY2UpKSB7CisgICAgICAgICAgICBhdl9sb2coY3R4LCBBVl9MT0dfRVJST1IsICJT ZWxlY3RlZCBtb2RlIHJlcXVpcmVzIHRoZSAncmVwbGFjZScgcGFyYW1ldGVyIHRvIGJlIHNwZWNp ZmllZFxuIik7CisgICAgICAgICAgICByZXR1cm4gQVZFUlJPUihFSU5WQUwpOworICAgICAgICB9 CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGlmIChzLT5vcGVyYXRpb24gPT0gT1BfUkVQ TEFDRV9DSEFSUyAmJiBzdHJsZW4ocy0+ZmluZCkgIT0gc3RybGVuKHMtPnJlcGxhY2UpKSB7Cisg ICAgICAgIGF2X2xvZyhjdHgsIEFWX0xPR19FUlJPUiwgIlNlbGVjdGVkIG1vZGUgcmVxdWlyZXMg dGhlICdmaW5kJyBhbmQgJ3JlcGxhY2UnIHBhcmFtZXRlcnMgdG8gaGF2ZSB0aGUgc2FtZSBsZW5n dGhcbiIpOworICAgICAgICByZXR1cm4gQVZFUlJPUihFSU5WQUwpOworICAgIH0KKworICAgIGlm IChzLT5vcGVyYXRpb24gPT0gT1BfUkVQTEFDRV9XT1JEUyB8fCBzLT5vcGVyYXRpb24gPT0gT1Bf UkVNT1ZFX1dPUkRTKSB7CisgICAgICAgIGlmICghcy0+c2VwYXJhdG9yIHx8IHN0cmxlbihzLT5z ZXBhcmF0b3IpICE9IDEpIHsKKyAgICAgICAgICAgIGF2X2xvZyhjdHgsIEFWX0xPR19FUlJPUiwg IlNlbGVjdGVkIG1vZGUgcmVxdWlyZXMgYSBzaW5nbGUgc2VwYXJhdG9yIGNoYXIgdG8gYmUgc3Bl Y2lmaWVkXG4iKTsKKyAgICAgICAgICAgIHJldHVybiBBVkVSUk9SKEVJTlZBTCk7CisgICAgICAg IH0KKworICAgICAgICBzLT5maW5kX2xpc3QgPSBzcGxpdF9zdHJpbmcocy0+ZmluZCwgJnMtPm5i X2ZpbmRfbGlzdCwgcy0+c2VwYXJhdG9yKTsKKyAgICAgICAgaWYgKCFzLT5maW5kX2xpc3QpCisg ICAgICAgICAgICByZXR1cm4gQVZFUlJPUihFTk9NRU0pOworCisgICAgICAgIGlmIChzLT5vcGVy YXRpb24gPT0gT1BfUkVQTEFDRV9XT1JEUykgeworCisgICAgICAgICAgICBzLT5yZXBsYWNlX2xp c3QgPSBzcGxpdF9zdHJpbmcocy0+cmVwbGFjZSwgJnMtPm5iX3JlcGxhY2VfbGlzdCwgcy0+c2Vw YXJhdG9yKTsKKyAgICAgICAgICAgIGlmICghcy0+cmVwbGFjZV9saXN0KQorICAgICAgICAgICAg ICAgIHJldHVybiBBVkVSUk9SKEVOT01FTSk7CisKKyAgICAgICAgICAgIGlmIChzLT5uYl9maW5k X2xpc3QgIT0gcy0+bmJfcmVwbGFjZV9saXN0KSB7CisgICAgICAgICAgICAgICAgYXZfbG9nKGN0 eCwgQVZfTE9HX0VSUk9SLCAiVGhlIG51bWJlciBvZiB3b3JkcyBpbiAnZmluZCcgYW5kICdyZXBs YWNlJyBuZWVkcyB0byBiZSBlcXVhbFxuIik7CisgICAgICAgICAgICAgICAgcmV0dXJuIEFWRVJS T1IoRUlOVkFMKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVy biAwOworfQorCitzdGF0aWMgdm9pZCB1bmluaXQoQVZGaWx0ZXJDb250ZXh0ICpjdHgpCit7Cisg ICAgVGV4dE1vZENvbnRleHQgKnMgPSBjdHgtPnByaXY7CisKKyAgICBmb3IgKGludCBpID0gMDsg aSA8IHMtPm5iX2ZpbmRfbGlzdDsgaSsrKQorICAgICAgICBhdl9mcmVlcCgmcy0+ZmluZF9saXN0 W2ldKTsKKworICAgIHMtPm5iX2ZpbmRfbGlzdCA9IDA7CisgICAgYXZfZnJlZXAoJnMtPmZpbmRf bGlzdCk7CisKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IHMtPm5iX3JlcGxhY2VfbGlzdDsgaSsr KQorICAgICAgICBhdl9mcmVlcCgmcy0+cmVwbGFjZV9saXN0W2ldKTsKKworICAgIHMtPm5iX3Jl cGxhY2VfbGlzdCA9IDA7CisgICAgYXZfZnJlZXAoJnMtPnJlcGxhY2VfbGlzdCk7Cit9CisKK3N0 YXRpYyBjaGFyICpwcm9jZXNzX3RleHQoVGV4dE1vZENvbnRleHQgKnMsIGNoYXIgKnRleHQpCit7 CisgICAgY29uc3QgY2hhciAqY2hhcl9zcmMgPSBzLT5maW5kOworICAgIGNvbnN0IGNoYXIgKmNo YXJfZHN0ID0gcy0+cmVwbGFjZTsKKyAgICBjaGFyICpyZXN1bHQgICAgICAgICA9IE5VTEw7Cisg ICAgaW50IGVzY2FwZV9sZXZlbCAgICAgPSAwLCBrID0gMDsKKworICAgIHN3aXRjaCAocy0+b3Bl cmF0aW9uKSB7CisgICAgY2FzZSBPUF9MRUVUOgorICAgIGNhc2UgT1BfUkVQTEFDRV9DSEFSUzoK KworICAgICAgICBpZiAocy0+b3BlcmF0aW9uID09IE9QX0xFRVQpIHsKKyAgICAgICAgICAgIGNo YXJfc3JjID0gbGVldF9zcmM7CisgICAgICAgICAgICBjaGFyX2RzdCA9IGxlZXRfZHN0OworICAg ICAgICB9CisKKyAgICAgICAgcmVzdWx0ID0gYXZfc3RyZHVwKHRleHQpOworICAgICAgICBpZiAo IXJlc3VsdCkKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworCisgICAgICAgIGZvciAoc2l6ZV90 IG4gPSAwOyBuIDwgc3RybGVuKHJlc3VsdCk7IG4rKykgeworICAgICAgICAgICAgaWYgKHJlc3Vs dFtuXSA9PSAneycpCisgICAgICAgICAgICAgICAgZXNjYXBlX2xldmVsKys7CisKKyAgICAgICAg ICAgIGlmICghZXNjYXBlX2xldmVsKSB7CisgICAgICAgICAgICAgICAgc2l6ZV90IGxlbiA9IHN0 cmxlbihjaGFyX3NyYyk7CisgICAgICAgICAgICAgICAgZm9yIChzaXplX3QgdCA9IDA7IHQgPCBs ZW47IHQrKykgeworICAgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0W25dID09IGNoYXJfc3Jj W3RdKSB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRbbl0gPSBjaGFyX2RzdFt0XTsK KyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9Cisg ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAocmVzdWx0 W25dID09ICd9JykKKyAgICAgICAgICAgICAgICBlc2NhcGVfbGV2ZWwtLTsKKyAgICAgICAgfQor CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgT1BfVE9fVVBQRVI6CisgICAgY2FzZSBPUF9UT19M T1dFUjoKKworICAgICAgICByZXN1bHQgPSBhdl9zdHJkdXAodGV4dCk7CisgICAgICAgIGlmICgh cmVzdWx0KQorICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICAgICAgZm9yIChzaXplX3Qg biA9IDA7IG4gPCBzdHJsZW4ocmVzdWx0KTsgbisrKSB7CisgICAgICAgICAgICBpZiAocmVzdWx0 W25dID09ICd7JykKKyAgICAgICAgICAgICAgICBlc2NhcGVfbGV2ZWwrKzsKKyAgICAgICAgICAg IGlmICghZXNjYXBlX2xldmVsKQorICAgICAgICAgICAgICAgIHJlc3VsdFtuXSA9IHMtPm9wZXJh dGlvbiA9PSBPUF9UT19MT1dFUiA/IGF2X3RvbG93ZXIocmVzdWx0W25dKSA6IGF2X3RvdXBwZXIo cmVzdWx0W25dKTsKKyAgICAgICAgICAgIGlmIChyZXN1bHRbbl0gPT0gJ30nKQorICAgICAgICAg ICAgICAgIGVzY2FwZV9sZXZlbC0tOworICAgICAgICB9CisKKyAgICAgICAgYnJlYWs7CisgICAg Y2FzZSBPUF9SRU1PVkVfQ0hBUlM6CisKKyAgICAgICAgcmVzdWx0ID0gYXZfc3RyZHVwKHRleHQp OworICAgICAgICBpZiAoIXJlc3VsdCkKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworCisgICAg ICAgIGZvciAoc2l6ZV90IG4gPSAwOyBuIDwgc3RybGVuKHJlc3VsdCk7IG4rKykgeworICAgICAg ICAgICAgaW50IHNraXBfY2hhciA9IDA7CisKKyAgICAgICAgICAgIGlmIChyZXN1bHRbbl0gPT0g J3snKQorICAgICAgICAgICAgICAgIGVzY2FwZV9sZXZlbCsrOworCisgICAgICAgICAgICBpZiAo IWVzY2FwZV9sZXZlbCkgeworICAgICAgICAgICAgICAgIHNpemVfdCBsZW4gPSBzdHJsZW4oY2hh cl9zcmMpOworICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90IHQgPSAwOyB0IDwgbGVuOyB0Kysp IHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdFtuXSA9PSBjaGFyX3NyY1t0XSkgewor ICAgICAgICAgICAgICAgICAgICAgICAgc2tpcF9jaGFyID0gMTsKKyAgICAgICAgICAgICAgICAg ICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQor ICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoIXNraXBfY2hhcikKKyAgICAgICAgICAg ICAgICByZXN1bHRbaysrXSA9IHJlc3VsdFtuXTsKKworICAgICAgICAgICAgaWYgKHJlc3VsdFtu XSA9PSAnfScpCisgICAgICAgICAgICAgICAgZXNjYXBlX2xldmVsLS07CisgICAgICAgIH0KKwor ICAgICAgICByZXN1bHRba10gPSAwOworCisgICAgICAgIGJyZWFrOworICAgIGNhc2UgT1BfUkVQ TEFDRV9XT1JEUzoKKyAgICBjYXNlIE9QX1JFTU9WRV9XT1JEUzoKKworICAgICAgICByZXN1bHQg PSBhdl9zdHJkdXAodGV4dCk7CisgICAgICAgIGlmICghcmVzdWx0KQorICAgICAgICAgICAgcmV0 dXJuIE5VTEw7CisKKyAgICAgICAgZm9yIChpbnQgbiA9IDA7IG4gPCBzLT5uYl9maW5kX2xpc3Q7 IG4rKykgeworICAgICAgICAgICAgY2hhciAqdG1wICAgICAgICAgICA9IHJlc3VsdDsKKyAgICAg ICAgICAgIGNvbnN0IGNoYXIgKnJlcGxhY2UgPSAocy0+b3BlcmF0aW9uID09IE9QX1JFUExBQ0Vf V09SRFMpID8gcy0+cmVwbGFjZV9saXN0W25dIDogIiI7CisKKyAgICAgICAgICAgIHJlc3VsdCA9 IGF2X3N0cmlyZXBsYWNlKHJlc3VsdCwgcy0+ZmluZF9saXN0W25dLCByZXBsYWNlKTsKKyAgICAg ICAgICAgIGlmICghcmVzdWx0KQorICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOworCisgICAg ICAgICAgICBhdl9mcmVlKHRtcCk7CisgICAgICAgIH0KKworICAgICAgICBicmVhazsKKyAgICB9 CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgY2hhciAqcHJvY2Vzc19kaWFsb2df c2hvd19zcGVha2VyKFRleHRNb2RDb250ZXh0ICpzLCBjaGFyICphc3NfbGluZSkKK3sKKyAgICBB U1NEaWFsb2cgKmRpYWxvZyA9IGF2cHJpdl9hc3Nfc3BsaXRfZGlhbG9nKE5VTEwsIGFzc19saW5l KTsKKyAgICBpbnQgZXNjYXBlX2xldmVsID0gMDsKKyAgICB1bnNpZ25lZCBwb3MgPSAwLCBsZW47 CisgICAgY2hhciAqcmVzdWx0LCAqdGV4dDsKKyAgICBBVkJQcmludCBwYnVmOworCisgICAgaWYg KCFkaWFsb2cpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgdGV4dCA9IHByb2Nlc3NfdGV4 dChzLCBkaWFsb2ctPnRleHQpOworICAgIGlmICghdGV4dCkKKyAgICAgICAgcmV0dXJuIE5VTEw7 CisKKyAgICBpZiAoIWRpYWxvZy0+bmFtZSB8fCAhc3RybGVuKGRpYWxvZy0+bmFtZSkgfHwgIWRp YWxvZy0+dGV4dCB8fCAhc3RybGVuKGRpYWxvZy0+dGV4dCkpCisgICAgICAgIHJldHVybiBhdl9z dHJkdXAoYXNzX2xpbmUpOworCisgICAgLy8gRmluZCBpbnNlcnRpb24gcG9pbnQgaW4gY2FzZSB0 aGUgbGluZSBzdGFydHMgd2l0aCBzdHlsZSBjb2RlcworICAgIGxlbiA9ICh1bnNpZ25lZClzdHJs ZW4oZGlhbG9nLT50ZXh0KTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuOyBpKysp IHsKKworICAgICAgICBpZiAoZGlhbG9nLT50ZXh0W2ldID09ICd7JykKKyAgICAgICAgICAgIGVz Y2FwZV9sZXZlbCsrOworCisgICAgICAgIGlmIChkaWFsb2ctPnRleHRbaV0gPT0gJ30nKQorICAg ICAgICAgICAgZXNjYXBlX2xldmVsLS07CisKKyAgICAgICAgaWYgKGVzY2FwZV9sZXZlbCA9PSAw KSB7CisgICAgICAgICAgICBwb3MgPSBpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0K KyAgICB9CisKKyAgICBpZiAocy0+c3R5bGUgJiYgc3RybGVuKHMtPnN0eWxlKSkKKyAgICAgICAg Ly8gV2hlbiBhIHN0eWxlIGlzIHNwZWNpZmllZCByZXNldCB0aGUgaW5zZXJ0aW9uIHBvaW50Cisg ICAgICAgIC8vIChhbHdheXMgYWRkIHNwZWFrZXIgcGx1cyBzdHlsZSBhdCB0aGUgc3RhcnQgaW4g dGhhdCBjYXNlKQorICAgICAgICBwb3MgPSAwOworCisgICAgaWYgKHBvcyA+PSBsZW4gLSAxKQor ICAgICAgICByZXR1cm4gYXZfc3RyZHVwKGFzc19saW5lKTsKKworICAgIGF2X2JwcmludF9pbml0 KCZwYnVmLCAxLCBBVl9CUFJJTlRfU0laRV9VTkxJTUlURUQpOworCisgICAgaWYgKHBvcyA+IDAp IHsKKyAgICAgICAgYXZfYnByaW50X2FwcGVuZF9kYXRhKCZwYnVmLCBkaWFsb2ctPnRleHQsIHBv cyk7CisgICAgfQorCisgICAgaWYgKHMtPnN0eWxlICYmIHN0cmxlbihzLT5zdHlsZSkpIHsKKyAg ICAgICAgaWYgKHMtPnN0eWxlWzBdID09ICd7JykKKyAgICAgICAgICAgIC8vIEFzc3VtZSBjb21w bGV0ZSBhbmQgdmFsaWQgc3R5bGUgY29kZSwgZS5nLiB7XGMmSEZGMDAwMCZ9CisgICAgICAgICAg ICBhdl9icHJpbnRmKCZwYnVmLCAiJXMiLCBzLT5zdHlsZSk7CisgICAgICAgIGVsc2UKKyAgICAg ICAgICAgIC8vIE90aGVyd2lzZSBpdCBtdXN0IGJlIGEgc3R5bGUgbmFtZQorICAgICAgICAgICAg YXZfYnByaW50ZigmcGJ1ZiwgIntcXHIlc30iLCBzLT5zdHlsZSk7CisgICAgfQorCisgICAgc3dp dGNoIChzLT5zcGVha2VyX21vZGUpIHsKKyAgICBjYXNlIFNNX1NRVUFSRV9CUkFDS0VUUzoKKyAg ICAgICAgYXZfYnByaW50ZigmcGJ1ZiwgIlslc10iLCBkaWFsb2ctPm5hbWUpOworICAgICAgICBi cmVhazsKKyAgICBjYXNlIFNNX1JPVU5EX0JSQUNLRVRTOgorICAgICAgICBhdl9icHJpbnRmKCZw YnVmLCAiKCVzKSIsIGRpYWxvZy0+bmFtZSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgU01f Q09MT046CisgICAgICAgIGF2X2JwcmludGYoJnBidWYsICIlczoiLCBkaWFsb2ctPm5hbWUpOwor ICAgICAgICBicmVhazsKKyAgICBjYXNlIFNNX1BMQUlOOgorICAgICAgICBhdl9icHJpbnRmKCZw YnVmLCAiJXMiLCBkaWFsb2ctPm5hbWUpOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBp ZiAocy0+c3R5bGUgJiYgc3RybGVuKHMtPnN0eWxlKSkgeworICAgICAgICAvLyBSZXNldCBsaW5l IHN0eWxlCisgICAgICAgIGlmIChkaWFsb2ctPnN0eWxlICYmIHN0cmxlbihkaWFsb2ctPnN0eWxl KSAmJiAhYXZfc3RyY2FzZWNtcChkaWFsb2ctPnN0eWxlLCAiZGVmYXVsdCIpKQorICAgICAgICAg ICAgYXZfYnByaW50ZigmcGJ1ZiwgIntcXHIlc30iLCBkaWFsb2ctPnN0eWxlKTsKKyAgICAgICAg ZWxzZQorICAgICAgICAgICAgYXZfYnByaW50ZigmcGJ1ZiwgIntcXHJ9Iik7CisgICAgfQorCisg ICAgaWYgKHMtPmxpbmVfYnJlYWspCisgICAgICAgIGF2X2JwcmludGYoJnBidWYsICJcXE4iKTsK KyAgICBlbHNlCisgICAgICAgIGF2X2JwcmludGYoJnBidWYsICIgIik7CisKKyAgICBhdl9icHJp bnRfYXBwZW5kX2RhdGEoJnBidWYsIGRpYWxvZy0+dGV4dCArIHBvcywgbGVuIC0gcG9zKTsKKwor ICAgIGF2X2JwcmludF9maW5hbGl6ZSgmcGJ1ZiwgJnRleHQpOworCisgICAgcmVzdWx0ID0gYXZw cml2X2Fzc19nZXRfZGlhbG9nX2V4KGRpYWxvZy0+cmVhZG9yZGVyLCBkaWFsb2ctPmxheWVyLCBk aWFsb2ctPnN0eWxlLCBkaWFsb2ctPm5hbWUsIGRpYWxvZy0+bWFyZ2luX2wsIGRpYWxvZy0+bWFy Z2luX3IsIGRpYWxvZy0+bWFyZ2luX3YsIHRleHQpOworCisgICAgYXZfZnJlZSh0ZXh0KTsKKyAg ICBhdnByaXZfYXNzX2ZyZWVfZGlhbG9nKCZkaWFsb2cpOworICAgIHJldHVybiByZXN1bHQ7Cit9 CisKK3N0YXRpYyBjaGFyICpwcm9jZXNzX2RpYWxvZyhUZXh0TW9kQ29udGV4dCAqcywgY2hhciAq YXNzX2xpbmUpCit7CisgICAgQVNTRGlhbG9nICpkaWFsb2c7CisgICAgY2hhciAqcmVzdWx0LCAq dGV4dDsKKworICAgIGlmIChzLT5maWx0ZXJfdHlwZSA9PSBUTV9TSE9XX1NQRUFLRVIpCisgICAg ICAgIHJldHVybiBwcm9jZXNzX2RpYWxvZ19zaG93X3NwZWFrZXIocywgYXNzX2xpbmUpOworCisg ICAgZGlhbG9nID0gYXZwcml2X2Fzc19zcGxpdF9kaWFsb2coTlVMTCwgYXNzX2xpbmUpOworICAg IGlmICghZGlhbG9nKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIHRleHQgPSBwcm9jZXNz X3RleHQocywgZGlhbG9nLT50ZXh0KTsKKyAgICBpZiAoIXRleHQpCisgICAgICAgIHJldHVybiBO VUxMOworCisgICAgcmVzdWx0ID0gYXZwcml2X2Fzc19nZXRfZGlhbG9nX2V4KGRpYWxvZy0+cmVh ZG9yZGVyLCBkaWFsb2ctPmxheWVyLCBkaWFsb2ctPnN0eWxlLCBkaWFsb2ctPm5hbWUsIGRpYWxv Zy0+bWFyZ2luX2wsIGRpYWxvZy0+bWFyZ2luX3IsIGRpYWxvZy0+bWFyZ2luX3YsIHRleHQpOwor CisgICAgYXZfZnJlZSh0ZXh0KTsKKyAgICBhdnByaXZfYXNzX2ZyZWVfZGlhbG9nKCZkaWFsb2cp OworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBpbnQgY29uZmlnX291dHB1dChBVkZp bHRlckxpbmsgKm91dGxpbmspCit7CisgICAgQVZGaWx0ZXJMaW5rICppbmxpbmsgPSBvdXRsaW5r LT5zcmMtPmlucHV0c1swXTsKKworICAgIG91dGxpbmstPncgPSBpbmxpbmstPnc7CisgICAgb3V0 bGluay0+aCA9IGlubGluay0+aDsKKyAgICBvdXRsaW5rLT50aW1lX2Jhc2UgPSBpbmxpbmstPnRp bWVfYmFzZTsKKyAgICBvdXRsaW5rLT5mcmFtZV9yYXRlID0gaW5saW5rLT5mcmFtZV9yYXRlOwor CisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZmlsdGVyX2ZyYW1lKEFWRmlsdGVyTGlu ayAqaW5saW5rLCBBVkZyYW1lICpmcmFtZSkKK3sKKyAgICBUZXh0TW9kQ29udGV4dCAqcyA9IGlu bGluay0+ZHN0LT5wcml2OworICAgIEFWRmlsdGVyTGluayAqb3V0bGluayA9IGlubGluay0+ZHN0 LT5vdXRwdXRzWzBdOworICAgIGludCByZXQ7CisKKyAgICBvdXRsaW5rLT5mb3JtYXQgPSBpbmxp bmstPmZvcm1hdDsKKworICAgIHJldCA9IGF2X2ZyYW1lX21ha2Vfd3JpdGFibGUoZnJhbWUpOwor ICAgIGlmIChyZXQgPCAwKQorICAgICAgICByZXR1cm4gcmV0OworCisgICAgZm9yICh1bnNpZ25l ZCBpID0gMDsgaSA8IGZyYW1lLT5udW1fc3VidGl0bGVfYXJlYXM7IGkrKykgeworCisgICAgICAg IEFWU3VidGl0bGVBcmVhICphcmVhID0gZnJhbWUtPnN1YnRpdGxlX2FyZWFzW2ldOworCisgICAg ICAgIGlmIChhcmVhLT5hc3MpIHsKKyAgICAgICAgICAgIGNoYXIgKnRtcCA9IGFyZWEtPmFzczsK KyAgICAgICAgICAgIGFyZWEtPmFzcyA9IHByb2Nlc3NfZGlhbG9nKHMsIGFyZWEtPmFzcyk7Cisg ICAgICAgICAgICBhdl9mcmVlKHRtcCk7CisgICAgICAgICAgICBpZiAoIWFyZWEtPmFzcykKKyAg ICAgICAgICAgICAgICByZXR1cm4gQVZFUlJPUihFTk9NRU0pOworICAgICAgICB9CisgICAgfQor CisgICAgcmV0dXJuIGZmX2ZpbHRlcl9mcmFtZShvdXRsaW5rLCBmcmFtZSk7Cit9CisKKyNkZWZp bmUgT0ZGU0VUKHgpIG9mZnNldG9mKFRleHRNb2RDb250ZXh0LCB4KQorI2RlZmluZSBGTEFHUyAo QVZfT1BUX0ZMQUdfU1VCVElUTEVfUEFSQU0gfCBBVl9PUFRfRkxBR19GSUxURVJJTkdfUEFSQU0p CisKK3N0YXRpYyBjb25zdCBBVk9wdGlvbiB0ZXh0bW9kX29wdGlvbnNbXSA9IHsKKyAgICB7ICJt b2RlIiwgICAgICAgICAgICAgInNldCBvcGVyYXRpb24gbW9kZSIsICAgICAgICAgICAgICBPRkZT RVQob3BlcmF0aW9uKSwgICAgQVZfT1BUX1RZUEVfSU5ULCAgICB7Lmk2ND1PUF9MRUVUfSwgICAg ICAgICAgT1BfTEVFVCwgTkJfT1BTLTEsIEZMQUdTLCAibW9kZSIgfSwKKyAgICB7ICAgImxlZXQi LCAgICAgICAgICAgImNvbnZlcnQgdGV4dCB0byAnbGVldCBzcGVhayciLCAgICAwLCAgICAgICAg ICAgICAgICAgICAgQVZfT1BUX1RZUEVfQ09OU1QsICB7Lmk2ND1PUF9MRUVUfSwgICAgICAgICAg MCwgICAgICAgMCwgICAgICAgIEZMQUdTLCAibW9kZSIgfSwKKyAgICB7ICAgInRvX3VwcGVyIiwg ICAgICAgImNoYW5nZSB0byB1cHBlciBjYXNlIiwgICAgICAgICAgICAwLCAgICAgICAgICAgICAg ICAgICAgQVZfT1BUX1RZUEVfQ09OU1QsICB7Lmk2ND1PUF9UT19VUFBFUn0sICAgICAgMCwgICAg ICAgMCwgICAgICAgIEZMQUdTLCAibW9kZSIgfSwKKyAgICB7ICAgInRvX2xvd2VyIiwgICAgICAg ImNoYW5nZSB0byBsb3dlciBjYXNlIiwgICAgICAgICAgICAwLCAgICAgICAgICAgICAgICAgICAg QVZfT1BUX1RZUEVfQ09OU1QsICB7Lmk2ND1PUF9UT19MT1dFUn0sICAgICAgMCwgICAgICAgMCwg ICAgICAgIEZMQUdTLCAibW9kZSIgfSwKKyAgICB7ICAgInJlcGxhY2VfY2hhcnMiLCAgInJlcGxh Y2UgY2hhcmFjdGVycyIsICAgICAgICAgICAgICAwLCAgICAgICAgICAgICAgICAgICAgQVZfT1BU X1RZUEVfQ09OU1QsICB7Lmk2ND1PUF9SRVBMQUNFX0NIQVJTfSwgMCwgICAgICAgMCwgICAgICAg IEZMQUdTLCAibW9kZSIgfSwKKyAgICB7ICAgInJlbW92ZV9jaGFycyIsICAgInJlbW92ZSBjaGFy YWN0ZXJzIiwgICAgICAgICAgICAgICAwLCAgICAgICAgICAgICAgICAgICAgQVZfT1BUX1RZUEVf Q09OU1QsICB7Lmk2ND1PUF9SRU1PVkVfQ0hBUlN9LCAgMCwgICAgICAgMCwgICAgICAgIEZMQUdT LCAibW9kZSIgfSwKKyAgICB7ICAgInJlcGxhY2Vfd29yZHMiLCAgInJlcGxhY2Ugd29yZHMiLCAg ICAgICAgICAgICAgICAgICAwLCAgICAgICAgICAgICAgICAgICAgQVZfT1BUX1RZUEVfQ09OU1Qs ICB7Lmk2ND1PUF9SRVBMQUNFX1dPUkRTfSwgMCwgICAgICAgMCwgICAgICAgIEZMQUdTLCAibW9k ZSIgfSwKKyAgICB7ICAgInJlbW92ZV93b3JkcyIsICAgInJlbW92ZSB3b3JkcyIsICAgICAgICAg ICAgICAgICAgICAwLCAgICAgICAgICAgICAgICAgICAgQVZfT1BUX1RZUEVfQ09OU1QsICB7Lmk2 ND1PUF9SRU1PVkVfV09SRFN9LCAgMCwgICAgICAgMCwgICAgICAgIEZMQUdTLCAibW9kZSIgfSwK KyAgICB7ICJmaW5kIiwgICAgICAgICAgICAgImNoYXJzL3dvcmRzIHRvIGZpbmQgb3IgcmVtb3Zl IiwgICBPRkZTRVQoZmluZCksICAgICAgICAgQVZfT1BUX1RZUEVfU1RSSU5HLCB7LnN0ciA9IE5V TEx9LCAgICAgICAgICAgMCwgICAgICAgMCwgICAgICAgIEZMQUdTLCBOVUxMICAgfSwKKyAgICB7 ICJmaW5kX2ZpbGUiLCAgICAgICAgImxvYWQgZmluZCBwYXJhbSBmcm9tIGZpbGUiLCAgICAgICBP RkZTRVQoZmluZF9maWxlKSwgICAgQVZfT1BUX1RZUEVfU1RSSU5HLCB7LnN0ciA9IE5VTEx9LCAg ICAgICAgICAgMCwgICAgICAgMCwgICAgICAgIEZMQUdTLCBOVUxMICAgfSwKKyAgICB7ICJyZXBs YWNlIiwgICAgICAgICAgImNoYXJzL3dvcmRzIHRvIHJlcGxhY2UiLCAgICAgICAgICBPRkZTRVQo cmVwbGFjZSksICAgICAgQVZfT1BUX1RZUEVfU1RSSU5HLCB7LnN0ciA9IE5VTEx9LCAgICAgICAg ICAgMCwgICAgICAgMCwgICAgICAgIEZMQUdTLCBOVUxMICAgfSwKKyAgICB7ICJyZXBsYWNlX2Zp bGUiLCAgICAgImxvYWQgcmVwbGFjZSBwYXJhbSBmcm9tIGZpbGUiLCAgICBPRkZTRVQocmVwbGFj ZV9maWxlKSwgQVZfT1BUX1RZUEVfU1RSSU5HLCB7LnN0ciA9IE5VTEx9LCAgICAgICAgICAgMCwg ICAgICAgMCwgICAgICAgIEZMQUdTLCBOVUxMICAgfSwKKyAgICB7ICJzZXBhcmF0b3IiLCAgICAg ICAgIndvcmQgc2VwYXJhdG9yIiwgICAgICAgICAgICAgICAgICBPRkZTRVQoc2VwYXJhdG9yKSwg ICAgQVZfT1BUX1RZUEVfU1RSSU5HLCB7LnN0ciA9ICIsIn0sICAgICAgICAgICAgMCwgICAgICAg MCwgICAgICAgIEZMQUdTLCBOVUxMICAgfSwKKyAgICB7IE5VTEwgfSwKK307CisKKworc3RhdGlj IGNvbnN0IEFWT3B0aW9uIGNlbnNvcl9vcHRpb25zW10gPSB7CisgICAgeyAibW9kZSIsICAgICAg ICAgICAgICAgInNldCBjZW5zb3JpbmcgbW9kZSIsICAgICAgICBPRkZTRVQoY2Vuc29yX21vZGUp LCBBVl9PUFRfVFlQRV9JTlQsICAgIHsuaTY0PUNNX0tFRVBfRklSU1RfTEFTVH0sIDAsIDIsIEZM QUdTLCAibW9kZSIgfSwKKyAgICB7ICAgImtlZXBfZmlyc3RfbGFzdCIsICAiY2Vuc29yIGlubmVy IGNoYXJzIiwgICAgICAgIDAsICAgICAgICAgICAgICAgICAgIEFWX09QVF9UWVBFX0NPTlNULCAg ey5pNjQ9Q01fS0VFUF9GSVJTVF9MQVNUfSwgMCwgMCwgRkxBR1MsICJtb2RlIiB9LAorICAgIHsg ICAia2VlcF9maXJzdCIsICAgICAgICJjZW5zb3IgYWxsIGJ1dCBmaXJzdCBjaGFyIiwgMCwgICAg ICAgICAgICAgICAgICAgQVZfT1BUX1RZUEVfQ09OU1QsICB7Lmk2ND1DTV9LRUVQX0ZJUlNUfSwg ICAgICAwLCAwLCBGTEFHUywgIm1vZGUiIH0sCisgICAgeyAgICJhbGwiLCAgICAgICAgICAgICAg ImNlbnNvciBhbGwgY2hhcnMiLCAgICAgICAgICAwLCAgICAgICAgICAgICAgICAgICBBVl9PUFRf VFlQRV9DT05TVCwgIHsuaTY0PUNNX0FMTH0sICAgICAgICAgICAgIDAsIDAsIEZMQUdTLCAibW9k ZSIgfSwKKyAgICB7ICJ3b3JkcyIsICAgICAgICAgICAgICAibGlzdCBvZiB3b3JkcyB0byBjZW5z b3IiLCAgIE9GRlNFVChmaW5kKSwgICAgICAgIEFWX09QVF9UWVBFX1NUUklORywgey5zdHIgPSBO VUxMfSwgICAgICAgICAgICAgMCwgMCwgRkxBR1MsIE5VTEwgICB9LAorICAgIHsgIndvcmRzX2Zp bGUiLCAgICAgICAgICJwYXRoIHRvIHdvcmQgbGlzdCBmaWxlIiwgICAgT0ZGU0VUKGZpbmRfZmls ZSksICAgQVZfT1BUX1RZUEVfU1RSSU5HLCB7LnN0ciA9IE5VTEx9LCAgICAgICAgICAgICAwLCAw LCBGTEFHUywgTlVMTCAgIH0sCisgICAgeyAic2VwYXJhdG9yIiwgICAgICAgICAgIndvcmQgc2Vw YXJhdG9yIiwgICAgICAgICAgICBPRkZTRVQoc2VwYXJhdG9yKSwgICBBVl9PUFRfVFlQRV9TVFJJ TkcsIHsuc3RyID0gIiwifSwgICAgICAgICAgICAgIDAsIDAsIEZMQUdTLCBOVUxMICAgfSwKKyAg ICB7ICJjZW5zb3JfY2hhciIsICAgICAgICAicmVwbGFjZW1lbnQgY2hhcmFjdGVyIiwgICAgIE9G RlNFVChjZW5zb3JfY2hhciksIEFWX09QVF9UWVBFX1NUUklORywgey5zdHIgPSAiKiJ9LCAgICAg ICAgICAgICAgMCwgMCwgRkxBR1MsIE5VTEwgICB9LAorICAgIHsgTlVMTCB9LAorfTsKKworc3Rh dGljIGNvbnN0IEFWT3B0aW9uIHNob3dzcGVha2VyX29wdGlvbnNbXSA9IHsKKyAgICB7ICJmb3Jt YXQiLCAgICAgICAgICAgICAic3BlYWtlciBuYW1lIGZvcm1hdHRpbmciLCAgICAgICAgT0ZGU0VU KHNwZWFrZXJfbW9kZSksIEFWX09QVF9UWVBFX0lOVCwgICAgey5pNjQ9U01fU1FVQVJFX0JSQUNL RVRTfSwgMCwgMiwgRkxBR1MsICJmb3JtYXQiIH0sCisgICAgeyAgICJzcXVhcmVfYnJhY2tldHMi LCAgIltzcGVha2VyXSB0ZXh0IiwgICAgICAgICAgICAgICAgIDAsICAgICAgICAgICAgICAgICAg ICBBVl9PUFRfVFlQRV9DT05TVCwgIHsuaTY0PVNNX1NRVUFSRV9CUkFDS0VUU30sIDAsIDAsIEZM QUdTLCAiZm9ybWF0IiB9LAorICAgIHsgICAicm91bmRfYnJhY2tldHMiLCAgICIoc3BlYWtlcikg dGV4dCIsICAgICAgICAgICAgICAgICAwLCAgICAgICAgICAgICAgICAgICAgQVZfT1BUX1RZUEVf Q09OU1QsICB7Lmk2ND1TTV9ST1VORF9CUkFDS0VUU30sICAwLCAwLCBGTEFHUywgImZvcm1hdCIg fSwKKyAgICB7ICAgImNvbG9uIiwgICAgICAgICAgICAic3BlYWtlcjogdGV4dCIsICAgICAgICAg ICAgICAgICAgMCwgICAgICAgICAgICAgICAgICAgIEFWX09QVF9UWVBFX0NPTlNULCAgey5pNjQ9 U01fQ09MT059LCAgICAgICAgICAgMCwgMCwgRkxBR1MsICJmb3JtYXQiIH0sCisgICAgeyAgICJw bGFpbiIsICAgICAgICAgICAgInNwZWFrZXIgdGV4dCIsICAgICAgICAgICAgICAgICAgIDAsICAg ICAgICAgICAgICAgICAgICBBVl9PUFRfVFlQRV9DT05TVCwgIHsuaTY0PVNNX1BMQUlOfSwgICAg ICAgICAgIDAsIDAsIEZMQUdTLCAiZm9ybWF0IiB9LAorICAgIHsgImxpbmVfYnJlYWsiLCAgICAg ICAgICJpbnNlcnQgbGluZSBicmVhayIsICAgICAgICAgICAgICBPRkZTRVQobGluZV9icmVhayks ICAgQVZfT1BUX1RZUEVfQk9PTCwgICB7Lmk2ND0wfSwgICAgICAgICAgICAgICAgICAwLCAxLCBG TEFHUywgTlVMTCAgICAgfSwKKyAgICB7ICJzdHlsZSIsICAgICAgICAgICAgICAiYXNzIHR5cGUg bmFtZSBvciBzdHlsZSBjb2RlIiwgICAgT0ZGU0VUKHN0eWxlKSwgICAgICAgIEFWX09QVF9UWVBF X1NUUklORywgey5zdHIgPSBOVUxMfSwgICAgICAgICAgICAgMCwgMCwgRkxBR1MsIE5VTEwgICAg IH0sCisgICAgeyBOVUxMIH0sCit9OworCitBVkZJTFRFUl9ERUZJTkVfQ0xBU1ModGV4dG1vZCk7 CitBVkZJTFRFUl9ERUZJTkVfQ0xBU1MoY2Vuc29yKTsKK0FWRklMVEVSX0RFRklORV9DTEFTUyhz aG93c3BlYWtlcik7CisKK3N0YXRpYyBjb25zdCBBVkZpbHRlclBhZCBpbnB1dHNbXSA9IHsKKyAg ICB7CisgICAgICAgIC5uYW1lICAgICAgICAgPSAiZGVmYXVsdCIsCisgICAgICAgIC50eXBlICAg ICAgICAgPSBBVk1FRElBX1RZUEVfU1VCVElUTEUsCisgICAgICAgIC5maWx0ZXJfZnJhbWUgPSBm aWx0ZXJfZnJhbWUsCisgICAgfSwKK307CisKK3N0YXRpYyBjb25zdCBBVkZpbHRlclBhZCBvdXRw dXRzW10gPSB7CisgICAgeworICAgICAgICAubmFtZSAgICAgICAgICA9ICJkZWZhdWx0IiwKKyAg ICAgICAgLnR5cGUgICAgICAgICAgPSBBVk1FRElBX1RZUEVfU1VCVElUTEUsCisgICAgICAgIC5j b25maWdfcHJvcHMgID0gY29uZmlnX291dHB1dCwKKyAgICB9LAorfTsKKworY29uc3QgQVZGaWx0 ZXIgZmZfc2ZfdGV4dG1vZCA9IHsKKyAgICAubmFtZSAgICAgICAgICA9ICJ0ZXh0bW9kIiwKKyAg ICAuZGVzY3JpcHRpb24gICA9IE5VTExfSUZfQ09ORklHX1NNQUxMKCJNb2RpZnkgc3VidGl0bGUg dGV4dCBpbiBzZXZlcmFsIHdheXMiKSwKKyAgICAuaW5pdCAgICAgICAgICA9IGluaXQsCisgICAg LnVuaW5pdCAgICAgICAgPSB1bmluaXQsCisgICAgLnByaXZfc2l6ZSAgICAgPSBzaXplb2YoVGV4 dE1vZENvbnRleHQpLAorICAgIC5wcml2X2NsYXNzICAgID0gJnRleHRtb2RfY2xhc3MsCisgICAg RklMVEVSX0lOUFVUUyhpbnB1dHMpLAorICAgIEZJTFRFUl9PVVRQVVRTKG91dHB1dHMpLAorICAg IEZJTFRFUl9TSU5HTEVfU1VCRk1UKEFWX1NVQlRJVExFX0ZNVF9BU1MpLAorfTsKKworY29uc3Qg QVZGaWx0ZXIgZmZfc2ZfY2Vuc29yID0geworICAgIC5uYW1lICAgICAgICAgID0gImNlbnNvciIs CisgICAgLmRlc2NyaXB0aW9uICAgPSBOVUxMX0lGX0NPTkZJR19TTUFMTCgiQ2Vuc29yIHdvcmRz IGluIHN1YnRpdGxlIHRleHQiKSwKKyAgICAuaW5pdCAgICAgICAgICA9IGluaXRfY2Vuc29yLAor ICAgIC51bmluaXQgICAgICAgID0gdW5pbml0LAorICAgIC5wcml2X3NpemUgICAgID0gc2l6ZW9m KFRleHRNb2RDb250ZXh0KSwKKyAgICAucHJpdl9jbGFzcyAgICA9ICZjZW5zb3JfY2xhc3MsCisg ICAgRklMVEVSX0lOUFVUUyhpbnB1dHMpLAorICAgIEZJTFRFUl9PVVRQVVRTKG91dHB1dHMpLAor ICAgIEZJTFRFUl9TSU5HTEVfU1VCRk1UKEFWX1NVQlRJVExFX0ZNVF9BU1MpLAorfTsKKworY29u c3QgQVZGaWx0ZXIgZmZfc2Zfc2hvd3NwZWFrZXIgPSB7CisgICAgLm5hbWUgICAgICAgICAgPSAi c2hvd3NwZWFrZXIiLAorICAgIC5kZXNjcmlwdGlvbiAgID0gTlVMTF9JRl9DT05GSUdfU01BTEwo IlByZXBlbmQgc3BlYWtlciBuYW1lcyB0byB0ZXh0IHN1YnRpdGxlcyAod2hlbiBhdmFpbGFibGUp IiksCisgICAgLmluaXQgICAgICAgICAgPSBpbml0X3Nob3dzcGVha2VyLAorICAgIC51bmluaXQg ICAgICAgID0gdW5pbml0LAorICAgIC5wcml2X3NpemUgICAgID0gc2l6ZW9mKFRleHRNb2RDb250 ZXh0KSwKKyAgICAucHJpdl9jbGFzcyAgICA9ICZzaG93c3BlYWtlcl9jbGFzcywKKyAgICBGSUxU RVJfSU5QVVRTKGlucHV0cyksCisgICAgRklMVEVSX09VVFBVVFMob3V0cHV0cyksCisgICAgRklM VEVSX1NJTkdMRV9TVUJGTVQoQVZfU1VCVElUTEVfRk1UX0FTUyksCit9OwotLSAKZmZtcGVnLWNv ZGVib3QKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmZm bXBlZy1kZXZlbCBtYWlsaW5nIGxpc3QKZmZtcGVnLWRldmVsQGZmbXBlZy5vcmcKaHR0cHM6Ly9m Zm1wZWcub3JnL21haWxtYW4vbGlzdGluZm8vZmZtcGVnLWRldmVsCgpUbyB1bnN1YnNjcmliZSwg dmlzaXQgbGluayBhYm92ZSwgb3IgZW1haWwKZmZtcGVnLWRldmVsLXJlcXVlc3RAZmZtcGVnLm9y ZyB3aXRoIHN1YmplY3QgInVuc3Vic2NyaWJlIi4K