From mboxrd@z Thu Jan 1 00:00:00 1970 From: Max Staudt Subject: [RFC PATCH v2 12/13] tools/bootsplash: Add a basic splash file creation tool Date: Wed, 13 Dec 2017 20:47:54 +0100 Message-ID: <20171213194755.3409-13-mstaudt@suse.de> References: <20171213194755.3409-1-mstaudt@suse.de> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mx2.suse.de (mx2.suse.de [195.135.220.15]) by gabe.freedesktop.org (Postfix) with ESMTPS id 6A8586E5A7 for ; Wed, 13 Dec 2017 19:48:46 +0000 (UTC) In-Reply-To: <20171213194755.3409-1-mstaudt@suse.de> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: b.zolnierkie@samsung.com, linux-fbdev@vger.kernel.org Cc: michal@markovi.net, sndirsch@suse.com, oneukum@suse.com, tiwai@suse.com, dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, mstaudt@suse.de, bernhard.rosenkranzer@linaro.org, philm@manjaro.org List-Id: dri-devel@lists.freedesktop.org U2lnbmVkLW9mZi1ieTogTWF4IFN0YXVkdCA8bXN0YXVkdEBzdXNlLmRlPgotLS0KIE1BSU5UQUlO RVJTICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgMSArCiB0b29scy9ib290c3BsYXNoLy5n aXRpZ25vcmUgICAgICAgICAgfCAgIDEgKwogdG9vbHMvYm9vdHNwbGFzaC9NYWtlZmlsZSAgICAg ICAgICAgIHwgICA5ICsKIHRvb2xzL2Jvb3RzcGxhc2gvYm9vdHNwbGFzaC1wYWNrZXIuYyB8IDQ3 MSArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwogNCBmaWxlcyBjaGFuZ2VkLCA0 ODIgaW5zZXJ0aW9ucygrKQogY3JlYXRlIG1vZGUgMTAwNjQ0IHRvb2xzL2Jvb3RzcGxhc2gvLmdp dGlnbm9yZQogY3JlYXRlIG1vZGUgMTAwNjQ0IHRvb2xzL2Jvb3RzcGxhc2gvTWFrZWZpbGUKIGNy ZWF0ZSBtb2RlIDEwMDY0NCB0b29scy9ib290c3BsYXNoL2Jvb3RzcGxhc2gtcGFja2VyLmMKCmRp ZmYgLS1naXQgYS9NQUlOVEFJTkVSUyBiL01BSU5UQUlORVJTCmluZGV4IDdmZmFjMjcyNDM0ZS4u ZGRmZjA3Y2Q3OTRjIDEwMDY0NAotLS0gYS9NQUlOVEFJTkVSUworKysgYi9NQUlOVEFJTkVSUwpA QCAtMjcxNSw2ICsyNzE1LDcgQEAgRjoJZHJpdmVycy92aWRlby9mYmRldi9jb3JlL2Jvb3RzcGxh c2gqLioKIEY6CWRyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9kdW1teWNvbi5jCiBGOglpbmNsdWRl L2xpbnV4L2Jvb3RzcGxhc2guaAogRjoJaW5jbHVkZS91YXBpL2xpbnV4L2Jvb3RzcGxhc2hfZmls ZS5oCitGOgl0b29scy9ib290c3BsYXNoLyoKIAogQlBGIChTYWZlIGR5bmFtaWMgcHJvZ3JhbXMg YW5kIHRvb2xzKQogTToJQWxleGVpIFN0YXJvdm9pdG92IDxhc3RAa2VybmVsLm9yZz4KZGlmZiAt LWdpdCBhL3Rvb2xzL2Jvb3RzcGxhc2gvLmdpdGlnbm9yZSBiL3Rvb2xzL2Jvb3RzcGxhc2gvLmdp dGlnbm9yZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjA5MWI5OWEx NzU2NwotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL2Jvb3RzcGxhc2gvLmdpdGlnbm9yZQpAQCAt MCwwICsxIEBACitib290c3BsYXNoLXBhY2tlcgpkaWZmIC0tZ2l0IGEvdG9vbHMvYm9vdHNwbGFz aC9NYWtlZmlsZSBiL3Rvb2xzL2Jvb3RzcGxhc2gvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2 NDQKaW5kZXggMDAwMDAwMDAwMDAwLi4wYWQ4ZThhODQ5NDIKLS0tIC9kZXYvbnVsbAorKysgYi90 b29scy9ib290c3BsYXNoL01ha2VmaWxlCkBAIC0wLDAgKzEsOSBAQAorQ0MgOj0gJChDUk9TU19D T01QSUxFKWdjYworQ0ZMQUdTIDo9IC1JLi4vLi4vdXNyL2luY2x1ZGUKKworUFJPR1MgOj0gYm9v dHNwbGFzaC1wYWNrZXIKKworYWxsOiAkKFBST0dTKQorCitjbGVhbjoKKwlybSAtZnIgJChQUk9H UykKZGlmZiAtLWdpdCBhL3Rvb2xzL2Jvb3RzcGxhc2gvYm9vdHNwbGFzaC1wYWNrZXIuYyBiL3Rv b2xzL2Jvb3RzcGxhc2gvYm9vdHNwbGFzaC1wYWNrZXIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NApp bmRleCAwMDAwMDAwMDAwMDAuLmZmYjZhOGI2OTg4NQotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xz L2Jvb3RzcGxhc2gvYm9vdHNwbGFzaC1wYWNrZXIuYwpAQCAtMCwwICsxLDQ3MSBAQAorLyoKKyAq IEtlcm5lbCBiYXNlZCBib290c3BsYXNoLgorICoKKyAqIChTcGxhc2ggZmlsZSBwYWNrZXIgdG9v bCkKKyAqCisgKiBBdXRob3JzOgorICogTWF4IFN0YXVkdCA8bXN0YXVkdEBzdXNlLmRlPgorICoK KyAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCisgKi8KKworI2luY2x1ZGUgPGVu ZGlhbi5oPgorI2luY2x1ZGUgPGdldG9wdC5oPgorI2luY2x1ZGUgPHN0ZGludC5oPgorI2luY2x1 ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisK KyNpbmNsdWRlIDxsaW51eC9ib290c3BsYXNoX2ZpbGUuaD4KKworCitzdGF0aWMgdm9pZCBwcmlu dF9oZWxwKGNoYXIgKnByb2duYW1lKQoreworCXByaW50ZigiVXNhZ2U6ICVzIFtPUFRJT05TXSBv dXRmaWxlXG4iLCBwcm9nbmFtZSk7CisJcHJpbnRmKCJcbiIKKwkgICAgICAgIk9wdGlvbnMsIGV4 ZWN1dGVkIGluIG9yZGVyIGdpdmVuOlxuIgorCSAgICAgICAiICAtaCwgLS1oZWxwICAgICAgICAg ICAgICAgICAgIFByaW50IHRoaXMgaGVscCBtZXNzYWdlXG4iCisJICAgICAgICJcbiIKKwkgICAg ICAgIiAgLS1iZ19yZWQgPHU4PiAgICAgICAgICAgICAgICBCYWNrZ3JvdW5kIGNvbG9yIChyZWQg cGFydClcbiIKKwkgICAgICAgIiAgLS1iZ19ncmVlbiA8dTg+ICAgICAgICAgICAgICBCYWNrZ3Jv dW5kIGNvbG9yIChncmVlbiBwYXJ0KVxuIgorCSAgICAgICAiICAtLWJnX2JsdWUgPHU4PiAgICAg ICAgICAgICAgIEJhY2tncm91bmQgY29sb3IgKGJsdWUgcGFydClcbiIKKwkgICAgICAgIiAgLS1i Z19yZXNlcnZlZCA8dTg+ICAgICAgICAgICAoZG8gbm90IHVzZSlcbiIKKwkgICAgICAgIiAgLS1m cmFtZV9tcyA8dTE2PiAgICAgICAgICAgICBNaW5pbXVtIG1pbGxpc2Vjb25kcyBiZXR3ZWVuIGFu aW1hdGlvbiBzdGVwc1xuIgorCSAgICAgICAiXG4iCisJICAgICAgICIgIC0tcGljdHVyZSAgICAg ICAgICAgICAgICAgICAgU3RhcnQgZGVzY3JpYmluZyB0aGUgbmV4dCBwaWN0dXJlXG4iCisJICAg ICAgICIgIC0tcGljX3dpZHRoIDx1MTY+ICAgICAgICAgICAgUGljdHVyZSB3aWR0aCBpbiBwaXhl bHNcbiIKKwkgICAgICAgIiAgLS1waWNfaGVpZ2h0IDx1MTY+ICAgICAgICAgICBQaWN0dXJlIGhl aWdodCBpbiBwaXhlbHNcbiIKKwkgICAgICAgIiAgLS1waWNfcG9zaXRpb24gPHU4PiAgICAgICAg ICAgICBDb2Fyc2UgcGljdHVyZSBwbGFjZW1lbnQ6XG4iCisJICAgICAgICIgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgMHgwMCAtIFRvcCBsZWZ0XG4iCisJICAgICAgICIgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMSAtIFRvcFxuIgorCSAgICAgICAiICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDIgLSBUb3AgcmlnaHRcbiIKKwkgICAgICAg IiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAzIC0gUmlnaHRcbiIKKwkgICAg ICAgIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA0IC0gQm90dG9tIHJpZ2h0 XG4iCisJICAgICAgICIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwNSAtIEJv dHRvbVxuIgorCSAgICAgICAiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDYg LSBCb3R0b20gbGVmdFxuIgorCSAgICAgICAiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIDB4MDcgLSBMZWZ0XG4iCisJICAgICAgICJcbiIKKwkgICAgICAgIiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgRmxhZ3M6XG4iCisJICAgICAgICIgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAweDEwIC0gQ2FsY3VsYXRlIG9mZnNldCBmcm9tIGNvcm5lciB0b3dhcmRz IGNlbnRlcixcbiIKKwkgICAgICAgIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgcmF0aGVyIHRoYW4gZnJvbSBjZW50ZXIgdG93YXJkcyBjb3JuZXJcbiIKKwkgICAgICAg IiAgLS1waWNfcG9zaXRpb25fb2Zmc2V0IDx1MTY+ICBEaXN0YW5jZSBmcm9tIGJhc2UgcG9zaXRp b24gaW4gcGl4ZWxzXG4iCisJICAgICAgICIgIC0tcGljX2FuaW1fdHlwZSA8dTg+ICAgICAgICAg QW5pbWF0aW9uIHR5cGU6XG4iCisJICAgICAgICIgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAwIC0gTm9uZVxuIgorCSAgICAgICAiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgMSAtIEZvcndhcmQgbG9vcFxuIgorCSAgICAgICAiICAtLXBpY19hbmltX2xvb3AgPHU4PiAg ICAgICAgIExvb3AgcG9pbnQgZm9yIGFuaW1hdGlvblxuIgorCSAgICAgICAiXG4iCisJICAgICAg ICIgIC0tYmxvYiA8ZmlsZW5hbWU+ICAgICAgICAgICAgSW5jbHVkZSBuZXh0IGRhdGEgc3RyZWFt XG4iCisJICAgICAgICIgIC0tYmxvYl90eXBlIDx1MTY+ICAgICAgICAgICAgVHlwZSBvZiBkYXRh XG4iCisJICAgICAgICIgIC0tYmxvYl9waWN0dXJlX2lkIDx1OD4gICAgICAgUGljdHVyZSB0byBh c3NvY2lhdGUgdGhpcyBibG9iIHdpdGgsIHN0YXJ0aW5nIGF0IDBcbiIKKwkgICAgICAgIiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIChkZWZhdWx0OiBudW1iZXIgb2YgbGFzdCAtLXBp Y3R1cmUpXG4iCisJICAgICAgICJcbiIpOworCXByaW50ZigiVGhpcyB0b29sIHdpbGwgd3JpdGUg JXMgZmlsZXMuXG5cbiIsCisjaWYgX19CWVRFX09SREVSID09IF9fQklHX0VORElBTgorCSAgICAg ICAiQmlnIEVuZGlhbiAoQkUpIik7CisjZWxpZiBfX0JZVEVfT1JERVIgPT0gX19MSVRUTEVfRU5E SUFOCisJICAgICAgICJMaXR0bGUgRW5kaWFuIChMRSkiKTsKKyNlbHNlCisjZXJyb3IKKyNlbmRp ZgorfQorCisKK3N0cnVjdCBibG9iX2VudHJ5IHsKKwlzdHJ1Y3QgYmxvYl9lbnRyeSAqbmV4dDsK KworCWNoYXIgKmZuOworCisJc3RydWN0IHNwbGFzaF9ibG9iX2hlYWRlciBoZWFkZXI7Cit9Owor CisKK3N0YXRpYyB2b2lkIGR1bXBfZmlsZV9oZWFkZXIoc3RydWN0IHNwbGFzaF9maWxlX2hlYWRl ciAqaCkKK3sKKwlwcmludGYoIiAtLS0gRmlsZSBoZWFkZXIgLS0tXG4iKTsKKwlwcmludGYoIlxu Iik7CisJcHJpbnRmKCIgIHZlcnNpb246ICAgICAlNXVcbiIsIGgtPnZlcnNpb24pOworCXByaW50 ZigiXG4iKTsKKwlwcmludGYoIiAgYmdfcmVkOiAgICAgICU1dVxuIiwgaC0+YmdfcmVkKTsKKwlw cmludGYoIiAgYmdfZ3JlZW46ICAgICU1dVxuIiwgaC0+YmdfZ3JlZW4pOworCXByaW50ZigiICBi Z19ibHVlOiAgICAgJTV1XG4iLCBoLT5iZ19ibHVlKTsKKwlwcmludGYoIiAgYmdfcmVzZXJ2ZWQ6 ICU1dVxuIiwgaC0+YmdfcmVzZXJ2ZWQpOworCXByaW50ZigiXG4iKTsKKwlwcmludGYoIiAgbnVt X2Jsb2JzOiAgICU1dVxuIiwgaC0+bnVtX2Jsb2JzKTsKKwlwcmludGYoIiAgbnVtX3BpY3M6ICAg ICU1dVxuIiwgaC0+bnVtX3BpY3MpOworCXByaW50ZigiXG4iKTsKKwlwcmludGYoIiAgZnJhbWVf bXM6ICAgICU1dVxuIiwgaC0+ZnJhbWVfbXMpOworCXByaW50ZigiXG4iKTsKK30KKworc3RhdGlj IHZvaWQgZHVtcF9waWNfaGVhZGVyKHN0cnVjdCBzcGxhc2hfcGljX2hlYWRlciAqcGgpCit7CisJ cHJpbnRmKCIgLS0tIFBpY3R1cmUgaGVhZGVyIC0tLVxuIik7CisJcHJpbnRmKCJcbiIpOworCXBy aW50ZigiICB3aWR0aDogICAgICAgICAgICU1dVxuIiwgcGgtPndpZHRoKTsKKwlwcmludGYoIiAg aGVpZ2h0OiAgICAgICAgICAlNXVcbiIsIHBoLT5oZWlnaHQpOworCXByaW50ZigiXG4iKTsKKwlw cmludGYoIiAgbnVtX2Jsb2JzOiAgICAgICAlNXVcbiIsIHBoLT5udW1fYmxvYnMpOworCXByaW50 ZigiXG4iKTsKKwlwcmludGYoIiAgcG9zaXRpb246ICAgICAgICAlMHgzeFxuIiwgcGgtPnBvc2l0 aW9uKTsKKwlwcmludGYoIiAgcG9zaXRpb25fb2Zmc2V0OiAlNXVcbiIsIHBoLT5wb3NpdGlvbl9v ZmZzZXQpOworCXByaW50ZigiXG4iKTsKKwlwcmludGYoIiAgYW5pbV90eXBlOiAgICAgICAlNXVc biIsIHBoLT5hbmltX3R5cGUpOworCXByaW50ZigiICBhbmltX2xvb3A6ICAgICAgICU1dVxuIiwg cGgtPmFuaW1fbG9vcCk7CisJcHJpbnRmKCJcbiIpOworfQorCitzdGF0aWMgdm9pZCBkdW1wX2Js b2Ioc3RydWN0IGJsb2JfZW50cnkgKmIpCit7CisJcHJpbnRmKCIgLS0tIEJsb2IgaGVhZGVyIC0t LVxuIik7CisJcHJpbnRmKCJcbiIpOworCXByaW50ZigiICBsZW5ndGg6ICAgICAlN3VcbiIsIGIt PmhlYWRlci5sZW5ndGgpOworCXByaW50ZigiICB0eXBlOiAgICAgICAlN3VcbiIsIGItPmhlYWRl ci50eXBlKTsKKwlwcmludGYoIlxuIik7CisJcHJpbnRmKCIgIHBpY3R1cmVfaWQ6ICU3dVxuIiwg Yi0+aGVhZGVyLnBpY3R1cmVfaWQpOworCXByaW50ZigiXG4iKTsKK30KKworCisjZGVmaW5lIE9Q VF9NQVgodmFyLCBtYXgpIFwKKwlkbyB7IFwKKwkJaWYgKCh2YXIpID4gbWF4KSB7IFwKKwkJCWZw cmludGYoc3RkZXJyLCAiLS0lczogSW52YWxpZCB2YWx1ZVxuIiwgXAorCQkJbG9uZ19vcHRpb25z W29wdGlvbl9pbmRleF0ubmFtZSk7IFwKKwkJCWJyZWFrOyBcCisJCX0gXAorCX0gd2hpbGUgKDAp CisKK3N0YXRpYyBzdHJ1Y3Qgb3B0aW9uIGxvbmdfb3B0aW9uc1tdID0geworCXsiaGVscCIsIDAs IDAsICdoJ30sCisJeyJiZ19yZWQiLCAxLCAwLCAxMDAwMX0sCisJeyJiZ19ncmVlbiIsIDEsIDAs IDEwMDAyfSwKKwl7ImJnX2JsdWUiLCAxLCAwLCAxMDAwM30sCisJeyJiZ19yZXNlcnZlZCIsIDEs IDAsIDEwMDA0fSwKKwl7ImZyYW1lX21zIiwgMSwgMCwgMTAwMDV9LAorCXsicGljdHVyZSIsIDAs IDAsIDIwMDAwfSwKKwl7InBpY193aWR0aCIsIDEsIDAsIDIwMDAxfSwKKwl7InBpY19oZWlnaHQi LCAxLCAwLCAyMDAwMn0sCisJeyJwaWNfcG9zaXRpb24iLCAxLCAwLCAyMDAwM30sCisJeyJwaWNf cG9zaXRpb25fb2Zmc2V0IiwgMSwgMCwgMjAwMDR9LAorCXsicGljX2FuaW1fdHlwZSIsIDEsIDAs IDIwMDA1fSwKKwl7InBpY19hbmltX2xvb3AiLCAxLCAwLCAyMDAwNn0sCisJeyJibG9iIiwgMSwg MCwgMzAwMDB9LAorCXsiYmxvYl90eXBlIiwgMSwgMCwgMzAwMDF9LAorCXsiYmxvYl9waWN0dXJl X2lkIiwgMSwgMCwgMzAwMDJ9LAorCXtOVUxMLCAwLCBOVUxMLCAwfQorfTsKKworCitpbnQgbWFp bihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCit7CisJRklMRSAqb2Y7CisJY2hhciAqb2ZuOworCWlu dCBjOworCWludCBvcHRpb25faW5kZXggPSAwOworCisJdW5zaWduZWQgbG9uZyB1bDsKKwlzdHJ1 Y3Qgc3BsYXNoX2ZpbGVfaGVhZGVyIGZoID0ge307CisJc3RydWN0IHNwbGFzaF9waWNfaGVhZGVy IHBoWzI1NV07CisJc3RydWN0IGJsb2JfZW50cnkgKmJsb2JfZmlyc3QgPSBOVUxMOworCXN0cnVj dCBibG9iX2VudHJ5ICpibG9iX2xhc3QgPSBOVUxMOworCXN0cnVjdCBibG9iX2VudHJ5ICpibG9i X2N1ciA9IE5VTEw7CisKKwlpZiAoYXJnYyA8IDIpIHsKKwkJcHJpbnRfaGVscChhcmd2WzBdKTsK KwkJcmV0dXJuIEVYSVRfRkFJTFVSRTsKKwl9CisKKworCS8qIFBhcnNlIGFuZCBhbmQgZXhlY3V0 ZSB1c2VyIGNvbW1hbmRzICovCisJd2hpbGUgKChjID0gZ2V0b3B0X2xvbmcoYXJnYywgYXJndiwg ImgiLAorCQkJICBsb25nX29wdGlvbnMsICZvcHRpb25faW5kZXgpKSAhPSAtMSkgeworCQlzd2l0 Y2ggKGMpIHsKKwkJY2FzZSAxMDAwMToJLyogYmdfcmVkICovCisJCQl1bCA9IHN0cnRvdWwob3B0 YXJnLCBOVUxMLCAwKTsKKwkJCU9QVF9NQVgodWwsIDI1NSk7CisJCQlmaC5iZ19yZWQgPSB1bDsK KwkJCWJyZWFrOworCQljYXNlIDEwMDAyOgkvKiBiZ19ncmVlbiAqLworCQkJdWwgPSBzdHJ0b3Vs KG9wdGFyZywgTlVMTCwgMCk7CisJCQlPUFRfTUFYKHVsLCAyNTUpOworCQkJZmguYmdfZ3JlZW4g PSB1bDsKKwkJCWJyZWFrOworCQljYXNlIDEwMDAzOgkvKiBiZ19ibHVlICovCisJCQl1bCA9IHN0 cnRvdWwob3B0YXJnLCBOVUxMLCAwKTsKKwkJCU9QVF9NQVgodWwsIDI1NSk7CisJCQlmaC5iZ19i bHVlID0gdWw7CisJCQlicmVhazsKKwkJY2FzZSAxMDAwNDoJLyogYmdfcmVzZXJ2ZWQgKi8KKwkJ CXVsID0gc3RydG91bChvcHRhcmcsIE5VTEwsIDApOworCQkJT1BUX01BWCh1bCwgMjU1KTsKKwkJ CWZoLmJnX3Jlc2VydmVkID0gdWw7CisJCQlicmVhazsKKwkJY2FzZSAxMDAwNToJLyogZnJhbWVf bXMgKi8KKwkJCXVsID0gc3RydG91bChvcHRhcmcsIE5VTEwsIDApOworCQkJT1BUX01BWCh1bCwg NjU1MzUpOworCQkJZmguZnJhbWVfbXMgPSB1bDsKKwkJCWJyZWFrOworCisKKwkJY2FzZSAyMDAw MDoJLyogcGljdHVyZSAqLworCQkJaWYgKGZoLm51bV9waWNzID49IDI1NSkgeworCQkJCWZwcmlu dGYoc3RkZXJyLCAiLS0lczogUGljdHVyZSBhcnJheSBmdWxsXG4iLAorCQkJCQlsb25nX29wdGlv bnNbb3B0aW9uX2luZGV4XS5uYW1lKTsKKwkJCQlicmVhazsKKwkJCX0KKworCQkJZmgubnVtX3Bp Y3MrKzsKKwkJCWJyZWFrOworCisJCWNhc2UgMjAwMDE6CS8qIHBpY193aWR0aCAqLworCQkJdWwg PSBzdHJ0b3VsKG9wdGFyZywgTlVMTCwgMCk7CisJCQlPUFRfTUFYKHVsLCA2NTUzNSk7CisJCQlw aFtmaC5udW1fcGljcyAtIDFdLndpZHRoID0gdWw7CisJCQlicmVhazsKKworCQljYXNlIDIwMDAy OgkvKiBwaWNfaGVpZ2h0ICovCisJCQl1bCA9IHN0cnRvdWwob3B0YXJnLCBOVUxMLCAwKTsKKwkJ CU9QVF9NQVgodWwsIDY1NTM1KTsKKwkJCXBoW2ZoLm51bV9waWNzIC0gMV0uaGVpZ2h0ID0gdWw7 CisJCQlicmVhazsKKworCQljYXNlIDIwMDAzOgkvKiBwaWNfcG9zaXRpb24gKi8KKwkJCXVsID0g c3RydG91bChvcHRhcmcsIE5VTEwsIDApOworCQkJT1BUX01BWCh1bCwgMjU1KTsKKwkJCXBoW2Zo Lm51bV9waWNzIC0gMV0ucG9zaXRpb24gPSB1bDsKKwkJCWJyZWFrOworCisJCWNhc2UgMjAwMDQ6 CS8qIHBpY19wb3NpdGlvbl9vZmZzZXQgKi8KKwkJCXVsID0gc3RydG91bChvcHRhcmcsIE5VTEws IDApOworCQkJT1BUX01BWCh1bCwgMjU1KTsKKwkJCXBoW2ZoLm51bV9waWNzIC0gMV0ucG9zaXRp b25fb2Zmc2V0ID0gdWw7CisJCQlicmVhazsKKworCQljYXNlIDIwMDA1OgkvKiBwaWNfYW5pbV90 eXBlICovCisJCQl1bCA9IHN0cnRvdWwob3B0YXJnLCBOVUxMLCAwKTsKKwkJCU9QVF9NQVgodWws IDI1NSk7CisJCQlwaFtmaC5udW1fcGljcyAtIDFdLmFuaW1fdHlwZSA9IHVsOworCQkJYnJlYWs7 CisKKwkJY2FzZSAyMDAwNjoJLyogcGljX2FuaW1fbG9vcCAqLworCQkJdWwgPSBzdHJ0b3VsKG9w dGFyZywgTlVMTCwgMCk7CisJCQlPUFRfTUFYKHVsLCAyNTUpOworCQkJcGhbZmgubnVtX3BpY3Mg LSAxXS5hbmltX2xvb3AgPSB1bDsKKwkJCWJyZWFrOworCisKKwkJY2FzZSAzMDAwMDoJLyogYmxv YiAqLworCQkJaWYgKGZoLm51bV9ibG9icyA+PSA2NTUzNSkgeworCQkJCWZwcmludGYoc3RkZXJy LCAiLS0lczogQmxvYiBhcnJheSBmdWxsXG4iLAorCQkJCQlsb25nX29wdGlvbnNbb3B0aW9uX2lu ZGV4XS5uYW1lKTsKKwkJCQlicmVhazsKKwkJCX0KKworCQkJYmxvYl9jdXIgPSBjYWxsb2MoMSwg c2l6ZW9mKHN0cnVjdCBibG9iX2VudHJ5KSk7CisJCQlpZiAoIWJsb2JfY3VyKSB7CisJCQkJZnBy aW50ZihzdGRlcnIsICItLSVzOiBPdXQgb2YgbWVtb3J5XG4iLAorCQkJCQlsb25nX29wdGlvbnNb b3B0aW9uX2luZGV4XS5uYW1lKTsKKwkJCQlicmVhazsKKwkJCX0KKworCQkJYmxvYl9jdXItPmZu ID0gb3B0YXJnOworCQkJaWYgKGZoLm51bV9waWNzKQorCQkJCWJsb2JfY3VyLT5oZWFkZXIucGlj dHVyZV9pZCA9IGZoLm51bV9waWNzIC0gMTsKKworCQkJaWYgKCFibG9iX2ZpcnN0KQorCQkJCWJs b2JfZmlyc3QgPSBibG9iX2N1cjsKKwkJCWlmIChibG9iX2xhc3QpCisJCQkJYmxvYl9sYXN0LT5u ZXh0ID0gYmxvYl9jdXI7CisJCQlibG9iX2xhc3QgPSBibG9iX2N1cjsKKwkJCWZoLm51bV9ibG9i cysrOworCQkJYnJlYWs7CisKKwkJY2FzZSAzMDAwMToJLyogYmxvYl90eXBlICovCisJCQlpZiAo IWJsb2JfY3VyKSB7CisJCQkJZnByaW50ZihzdGRlcnIsICItLSVzOiBObyBibG9iIHNlbGVjdGVk XG4iLAorCQkJCQlsb25nX29wdGlvbnNbb3B0aW9uX2luZGV4XS5uYW1lKTsKKwkJCQlicmVhazsK KwkJCX0KKworCQkJdWwgPSBzdHJ0b3VsKG9wdGFyZywgTlVMTCwgMCk7CisJCQlPUFRfTUFYKHVs LCAyNTUpOworCQkJYmxvYl9jdXItPmhlYWRlci50eXBlID0gdWw7CisJCQlicmVhazsKKworCQlj YXNlIDMwMDAyOgkvKiBibG9iX3BpY3R1cmVfaWQgKi8KKwkJCWlmICghYmxvYl9jdXIpIHsKKwkJ CQlmcHJpbnRmKHN0ZGVyciwgIi0tJXM6IE5vIGJsb2Igc2VsZWN0ZWRcbiIsCisJCQkJCWxvbmdf b3B0aW9uc1tvcHRpb25faW5kZXhdLm5hbWUpOworCQkJCWJyZWFrOworCQkJfQorCisJCQl1bCA9 IHN0cnRvdWwob3B0YXJnLCBOVUxMLCAwKTsKKwkJCU9QVF9NQVgodWwsIDI1NSk7CisJCQlibG9i X2N1ci0+aGVhZGVyLnBpY3R1cmVfaWQgPSB1bDsKKwkJCWJyZWFrOworCisKKworCQljYXNlICdo JzoKKwkJY2FzZSAnPyc6CisJCWRlZmF1bHQ6CisJCQlwcmludF9oZWxwKGFyZ3ZbMF0pOworCQkJ Z290byBFWElUOworCQl9IC8qIHN3aXRjaCAoYykgKi8KKwl9IC8qIHdoaWxlICgoYyA9IGdldG9w dF9sb25nKC4uLikpICE9IC0xKSAqLworCisJLyogQ29uc3VtZSBhbmQgZHJvcCBsb25lIGFyZ3Vt ZW50cyAqLworCXdoaWxlIChvcHRpbmQgPCBhcmdjKSB7CisJCW9mbiA9IGFyZ3Zbb3B0aW5kXTsK KwkJb3B0aW5kKys7CisJfQorCisKKwkvKiBSZWFkIGZpbGUgbGVuZ3RocyAqLworCWZvciAoYmxv Yl9jdXIgPSBibG9iX2ZpcnN0OyBibG9iX2N1cjsgYmxvYl9jdXIgPSBibG9iX2N1ci0+bmV4dCkg eworCQlGSUxFICpmOworCQlsb25nIHBvczsKKwkJaW50IGk7CisKKwkJaWYgKCFibG9iX2N1ci0+ Zm4pCisJCQljb250aW51ZTsKKworCQlmID0gZm9wZW4oYmxvYl9jdXItPmZuLCAicmIiKTsKKwkJ aWYgKCFmKQorCQkJZ290byBFUlJfRklMRV9MRU47CisKKwkJaWYgKGZzZWVrKGYsIDAsIFNFRUtf RU5EKSkKKwkJCWdvdG8gRVJSX0ZJTEVfTEVOOworCisJCXBvcyA9IGZ0ZWxsKGYpOworCQlpZiAo cG9zIDwgMCB8fCBwb3MgPiAoMSA8PCAzMCkpCisJCQlnb3RvIEVSUl9GSUxFX0xFTjsKKworCQli bG9iX2N1ci0+aGVhZGVyLmxlbmd0aCA9IHBvczsKKworCQlmY2xvc2UoZik7CisJCWNvbnRpbnVl OworCitFUlJfRklMRV9MRU46CisJCWZwcmludGYoc3RkZXJyLCAiRXJyb3IgZ2V0dGluZyBmaWxl IGxlbmd0aCAob3IgdG9vIGxvbmcpOiAlc1xuIiwKKwkJCWJsb2JfY3VyLT5mbik7CisJCWlmIChm KQorCQkJZmNsb3NlKGYpOworCQljb250aW51ZTsKKwl9CisKKworCS8qIFNldCBtYWdpYyBoZWFk ZXJzICovCisjaWYgX19CWVRFX09SREVSID09IF9fQklHX0VORElBTgorCW1lbWNweSgmZmguaWRb MF0sIEJPT1RTUExBU0hfTUFHSUNfQkUsIDE2KTsKKyNlbGlmIF9fQllURV9PUkRFUiA9PSBfX0xJ VFRMRV9FTkRJQU4KKwltZW1jcHkoJmZoLmlkWzBdLCBCT09UU1BMQVNIX01BR0lDX0xFLCAxNik7 CisjZWxzZQorI2Vycm9yCisjZW5kaWYKKwlmaC52ZXJzaW9uID0gQk9PVFNQTEFTSF9WRVJTSU9O OworCisJLyogU2V0IGJsb2IgY291bnRzICovCisJZm9yIChibG9iX2N1ciA9IGJsb2JfZmlyc3Q7 IGJsb2JfY3VyOyBibG9iX2N1ciA9IGJsb2JfY3VyLT5uZXh0KSB7CisJCWlmIChibG9iX2N1ci0+ aGVhZGVyLnBpY3R1cmVfaWQgPCBmaC5udW1fcGljcykKKwkJCXBoW2Jsb2JfY3VyLT5oZWFkZXIu cGljdHVyZV9pZF0ubnVtX2Jsb2JzKys7CisJfQorCisKKwkvKiBEdW1wIHN0cnVjdHMgKi8KKwlk dW1wX2ZpbGVfaGVhZGVyKCZmaCk7CisKKwlmb3IgKHVsID0gMDsgdWwgPCBmaC5udW1fcGljczsg dWwrKykKKwkJZHVtcF9waWNfaGVhZGVyKCZwaFt1bF0pOworCisJZm9yIChibG9iX2N1ciA9IGJs b2JfZmlyc3Q7IGJsb2JfY3VyOyBibG9iX2N1ciA9IGJsb2JfY3VyLT5uZXh0KQorCQlkdW1wX2Js b2IoYmxvYl9jdXIpOworCisKKwkvKiBXcml0ZSB0byBmaWxlICovCisJcHJpbnRmKCJXcml0aW5n IHNwbGFzaCB0byBmaWxlOiAlc1xuIiwgb2ZuKTsKKwlvZiA9IGZvcGVuKG9mbiwgIndiIik7CisJ aWYgKCFvZikKKwkJZ290byBFUlJfV1JJVElORzsKKworCWlmIChmd3JpdGUoJmZoLCBzaXplb2Yo c3RydWN0IHNwbGFzaF9maWxlX2hlYWRlciksIDEsIG9mKSAhPSAxKQorCQlnb3RvIEVSUl9XUklU SU5HOworCisJZm9yICh1bCA9IDA7IHVsIDwgZmgubnVtX3BpY3M7IHVsKyspIHsKKwkJaWYgKGZ3 cml0ZSgmcGhbdWxdLCBzaXplb2Yoc3RydWN0IHNwbGFzaF9waWNfaGVhZGVyKSwgMSwgb2YpCisJ CSAgICAhPSAxKQorCQkJZ290byBFUlJfV1JJVElORzsKKwl9CisKKwlibG9iX2N1ciA9IGJsb2Jf Zmlyc3Q7CisJd2hpbGUgKGJsb2JfY3VyKSB7CisJCXN0cnVjdCBibG9iX2VudHJ5ICpibG9iX29s ZCA9IGJsb2JfY3VyOworCQlGSUxFICpmOworCQljaGFyICpidWZbMjU2XTsKKwkJdWludDMyX3Qg bGVmdDsKKworCQlpZiAoZndyaXRlKCZibG9iX2N1ci0+aGVhZGVyLAorCQkJICAgc2l6ZW9mKHN0 cnVjdCBzcGxhc2hfYmxvYl9oZWFkZXIpLCAxLCBvZikgIT0gMSkKKwkJCWdvdG8gRVJSX1dSSVRJ Tkc7CisKKwkJaWYgKCFibG9iX2N1ci0+aGVhZGVyLmxlbmd0aCB8fCAhYmxvYl9jdXItPmZuKQor CQkJY29udGludWU7CisKKwkJZiA9IGZvcGVuKGJsb2JfY3VyLT5mbiwgInJiIik7CisJCWlmICgh ZikKKwkJCWdvdG8gRVJSX0ZJTEVfQ09QWTsKKworCQlsZWZ0ID0gYmxvYl9jdXItPmhlYWRlci5s ZW5ndGg7CisJCXdoaWxlIChsZWZ0ID49IHNpemVvZihidWYpKSB7CisJCQlpZiAoZnJlYWQoYnVm LCBzaXplb2YoYnVmKSwgMSwgZikgIT0gMSkKKwkJCQlnb3RvIEVSUl9GSUxFX0NPUFk7CisJCQlp ZiAoZndyaXRlKGJ1Ziwgc2l6ZW9mKGJ1ZiksIDEsIG9mKSAhPSAxKQorCQkJCWdvdG8gRVJSX0ZJ TEVfQ09QWTsKKwkJCWxlZnQgLT0gc2l6ZW9mKGJ1Zik7CisJCX0KKwkJaWYgKGxlZnQpIHsKKwkJ CWlmIChmcmVhZChidWYsIGxlZnQsIDEsIGYpICE9IDEpCisJCQkJZ290byBFUlJfRklMRV9DT1BZ OworCQkJaWYgKGZ3cml0ZShidWYsIGxlZnQsIDEsIG9mKSAhPSAxKQorCQkJCWdvdG8gRVJSX0ZJ TEVfQ09QWTsKKwkJfQorCisJCS8qIFBhZCBkYXRhIHN0cmVhbSB0byAxNiBieXRlcyAqLworCQlp ZiAobGVmdCAlIDE2KSB7CisJCQlpZiAoZndyaXRlKCJcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBc MFwwXDBcMCIsCisJCQkJCTE2IC0gKGxlZnQgJSAxNiksIDEsIG9mKSAhPSAxKQorCQkJCWdvdG8g RVJSX0ZJTEVfQ09QWTsKKwkJfQorCisJCWZjbG9zZShmKTsKKwkJYmxvYl9jdXIgPSBibG9iX2N1 ci0+bmV4dDsKKwkJZnJlZShibG9iX29sZCk7CisJCWNvbnRpbnVlOworCitFUlJfRklMRV9DT1BZ OgorCQlpZiAoZikKKwkJCWZjbG9zZShmKTsKKwkJZ290byBFUlJfV1JJVElORzsKKwl9CisKKwlm Y2xvc2Uob2YpOworCitFWElUOgorCXJldHVybiBFWElUX1NVQ0NFU1M7CisKKworRVJSX1dSSVRJ Tkc6CisJZnByaW50ZihzdGRlcnIsICJFcnJvciB3cml0aW5nIHNwbGFzaC5cbiIpOworCWZwcmlu dGYoc3RkZXJyLCAiVGhlIG91dHB1dCBmaWxlIGlzIHByb2JhYmx5IGNvcnJ1cHQuXG4iKTsKKwlp ZiAob2YpCisJCWZjbG9zZShvZik7CisKKwl3aGlsZSAoYmxvYl9jdXIpIHsKKwkJc3RydWN0IGJs b2JfZW50cnkgKmJsb2Jfb2xkID0gYmxvYl9jdXI7CisKKwkJYmxvYl9jdXIgPSBibG9iX2N1ci0+ bmV4dDsKKwkJZnJlZShibG9iX29sZCk7CisJfQorCisJcmV0dXJuIEVYSVRfRkFJTFVSRTsKK30K LS0gCjIuMTIuMwoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X18KZHJpLWRldmVsIG1haWxpbmcgbGlzdApkcmktZGV2ZWxAbGlzdHMuZnJlZWRlc2t0b3Aub3Jn Cmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vZHJpLWRldmVs Cg==