From mboxrd@z Thu Jan 1 00:00:00 1970 From: Robert Foss Subject: [PATCH hwc v1 1/6] drm_hwcomposer: Remove threading Date: Tue, 26 Sep 2017 08:24:41 +0200 Message-ID: <20170926062446.6412-2-robert.foss@collabora.com> References: <20170926062446.6412-1-robert.foss@collabora.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from bhuna.collabora.co.uk (bhuna.collabora.co.uk [46.235.227.227]) by gabe.freedesktop.org (Postfix) with ESMTPS id BFDAF6E3DB for ; Tue, 26 Sep 2017 06:25:01 +0000 (UTC) In-Reply-To: <20170926062446.6412-1-robert.foss@collabora.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: dri-devel@lists.freedesktop.org, Sean Paul Cc: Robert Foss List-Id: dri-devel@lists.freedesktop.org RnJvbTogU2VhbiBQYXVsIDxzZWFucGF1bEBjaHJvbWl1bS5vcmc+CgpTaW5jZSBIV0MyIGRvZXNu J3QgcmVxdWlyZSB0aGUgdXNlIG9mIHRocmVhZHMgdG8gaW1wbGVtZW50IGNvcnJlY3QKc3luY2hy b25pemF0aW9uLCByZW1vdmUgc29tZSBvZiB0aGVzZSB0aHJlYWRzLgoKU2lnbmVkLW9mZi1ieTog Um9iZXJ0IEZvc3MgPHJvYmVydC5mb3NzQGNvbGxhYm9yYS5jb20+Ci0tLQogQW5kcm9pZC5tayAg ICAgICAgICAgICAgICB8ICAgMyAtCiBkcm1jb21wb3NpdGlvbi5jcHAgICAgICAgIHwgMTY2IC0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIGRybWNvbXBvc2l0aW9uLmgg ICAgICAgICAgfCAgNzkgLS0tLS0tLS0tLS0tLS0tLS0tLQogZHJtY29tcG9zaXRvci5jcHAgICAg ICAgICB8IDEwNiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogZHJtY29tcG9zaXRvci5oICAg ICAgICAgICB8ICA1NiAtLS0tLS0tLS0tLS0tLQogZHJtY29tcG9zaXRvcndvcmtlci5oICAgICB8 ICA0MSAtLS0tLS0tLS0tCiBkcm1kaXNwbGF5Y29tcG9zaXRpb24uY3BwIHwgICAxICsKIGRybWRp c3BsYXljb21wb3NpdGlvbi5oICAgfCAgMTAgKysrCiBkcm1kaXNwbGF5Y29tcG9zaXRvci5jcHAg IHwgMTg5ICsrKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIGRy bWRpc3BsYXljb21wb3NpdG9yLmggICAgfCAgMzYgKy0tLS0tLS0tCiBkcm1ldmVudGxpc3RlbmVy LmNwcCAgICAgIHwgICAzICsKIGRybWh3Y3R3by5jcHAgICAgICAgICAgICAgfCAgIDYgKy0KIGRy bXJlc291cmNlcy5jcHAgICAgICAgICAgfCAgNTQgKy0tLS0tLS0tLS0tLQogZHJtcmVzb3VyY2Vz LmggICAgICAgICAgICB8ICAgNSAtLQogZ2x3b3JrZXIuY3BwICAgICAgICAgICAgICB8ICA1MiAr KysrKysrKysrKy0tCiBnbHdvcmtlci5oICAgICAgICAgICAgICAgIHwgIDEwICsrKwogMTYgZmls ZXMgY2hhbmdlZCwgOTMgaW5zZXJ0aW9ucygrKSwgNzI0IGRlbGV0aW9ucygtKQogZGVsZXRlIG1v ZGUgMTAwNjQ0IGRybWNvbXBvc2l0aW9uLmNwcAogZGVsZXRlIG1vZGUgMTAwNjQ0IGRybWNvbXBv c2l0aW9uLmgKIGRlbGV0ZSBtb2RlIDEwMDY0NCBkcm1jb21wb3NpdG9yLmNwcAogZGVsZXRlIG1v ZGUgMTAwNjQ0IGRybWNvbXBvc2l0b3IuaAogZGVsZXRlIG1vZGUgMTAwNjQ0IGRybWNvbXBvc2l0 b3J3b3JrZXIuaAoKZGlmZiAtLWdpdCBhL0FuZHJvaWQubWsgYi9BbmRyb2lkLm1rCmluZGV4IGFh OTViNDQuLjVkMTZjMmYgMTAwNjQ0Ci0tLSBhL0FuZHJvaWQubWsKKysrIGIvQW5kcm9pZC5tawpA QCAtNTcsOSArNTcsNiBAQCBMT0NBTF9DX0lOQ0xVREVTIDo9IFwKIExPQ0FMX1NSQ19GSUxFUyA6 PSBcCiAJYXV0b2xvY2suY3BwIFwKIAlkcm1yZXNvdXJjZXMuY3BwIFwKLQlkcm1jb21wb3NpdGlv bi5jcHAgXAotCWRybWNvbXBvc2l0b3IuY3BwIFwKLQlkcm1jb21wb3NpdG9yd29ya2VyLmNwcCBc CiAJZHJtY29ubmVjdG9yLmNwcCBcCiAJZHJtY3J0Yy5jcHAgXAogCWRybWRpc3BsYXljb21wb3Np dGlvbi5jcHAgXApkaWZmIC0tZ2l0IGEvZHJtY29tcG9zaXRpb24uY3BwIGIvZHJtY29tcG9zaXRp b24uY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxYWFmOTIwLi4wMDAwMDAwCi0t LSBhL2RybWNvbXBvc2l0aW9uLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDE2NiArMCwwIEBACi0v KgotICogQ29weXJpZ2h0IChDKSAyMDE1IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QK LSAqCi0gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0 aGUgIkxpY2Vuc2UiKTsKLSAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNv bXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0 aGUgTGljZW5zZSBhdAotICoKLSAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2Vz L0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9y IGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhl IExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAqIFdJVEhPVVQg V0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBp bXBsaWVkLgotICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292 ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2Uu Ci0gKi8KLQotI2RlZmluZSBMT0dfVEFHICJod2MtZHJtLWNvbXBvc2l0aW9uIgotCi0jaW5jbHVk ZSAiZHJtY29tcG9zaXRpb24uaCIKLSNpbmNsdWRlICJkcm1jcnRjLmgiCi0jaW5jbHVkZSAiZHJt cGxhbmUuaCIKLSNpbmNsdWRlICJkcm1yZXNvdXJjZXMuaCIKLSNpbmNsdWRlICJwbGF0Zm9ybS5o IgotCi0jaW5jbHVkZSA8c3RkbGliLmg+Ci0KLSNpbmNsdWRlIDxjdXRpbHMvbG9nLmg+Ci0jaW5j bHVkZSA8Y3V0aWxzL3Byb3BlcnRpZXMuaD4KLSNpbmNsdWRlIDxzd19zeW5jLmg+Ci0jaW5jbHVk ZSA8c3luYy9zeW5jLmg+Ci0KLW5hbWVzcGFjZSBhbmRyb2lkIHsKLQotRHJtQ29tcG9zaXRpb246 OkRybUNvbXBvc2l0aW9uKERybVJlc291cmNlcyAqZHJtLCBJbXBvcnRlciAqaW1wb3J0ZXIsCi0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUGxhbm5lciAqcGxhbm5lcikKLSAgICA6IGRy bV8oZHJtKSwgaW1wb3J0ZXJfKGltcG9ydGVyKSwgcGxhbm5lcl8ocGxhbm5lcikgewotICBjaGFy IHVzZV9vdmVybGF5X3BsYW5lc19wcm9wW1BST1BFUlRZX1ZBTFVFX01BWF07Ci0gIHByb3BlcnR5 X2dldCgiaHdjLmRybS51c2Vfb3ZlcmxheV9wbGFuZXMiLCB1c2Vfb3ZlcmxheV9wbGFuZXNfcHJv cCwgIjEiKTsKLSAgYm9vbCB1c2Vfb3ZlcmxheV9wbGFuZXMgPSBhdG9pKHVzZV9vdmVybGF5X3Bs YW5lc19wcm9wKTsKLQotICBmb3IgKGF1dG8gJnBsYW5lIDogZHJtLT5wbGFuZXMoKSkgewotICAg IGlmIChwbGFuZS0+dHlwZSgpID09IERSTV9QTEFORV9UWVBFX1BSSU1BUlkpCi0gICAgICBwcmlt YXJ5X3BsYW5lc18ucHVzaF9iYWNrKHBsYW5lLmdldCgpKTsKLSAgICBlbHNlIGlmICh1c2Vfb3Zl cmxheV9wbGFuZXMgJiYgcGxhbmUtPnR5cGUoKSA9PSBEUk1fUExBTkVfVFlQRV9PVkVSTEFZKQot ICAgICAgb3ZlcmxheV9wbGFuZXNfLnB1c2hfYmFjayhwbGFuZS5nZXQoKSk7Ci0gIH0KLX0KLQot aW50IERybUNvbXBvc2l0aW9uOjpJbml0KHVpbnQ2NF90IGZyYW1lX25vKSB7Ci0gIGZvciAoYXV0 byAmY29ubiA6IGRybV8tPmNvbm5lY3RvcnMoKSkgewotICAgIGludCBkaXNwbGF5ID0gY29ubi0+ ZGlzcGxheSgpOwotICAgIGNvbXBvc2l0aW9uX21hcF9bZGlzcGxheV0ucmVzZXQobmV3IERybURp c3BsYXlDb21wb3NpdGlvbigpKTsKLSAgICBpZiAoIWNvbXBvc2l0aW9uX21hcF9bZGlzcGxheV0p IHsKLSAgICAgIEFMT0dFKCJGYWlsZWQgdG8gYWxsb2NhdGUgbmV3IGRpc3BsYXkgY29tcG9zaXRp b25cbiIpOwotICAgICAgcmV0dXJuIC1FTk9NRU07Ci0gICAgfQotCi0gICAgLy8gSWYgdGhlIGRp c3BsYXkgaGFzbid0IGJlZW4gbW9kZXNldCB5ZXQsIHRoaXMgd2lsbCBiZSBOVUxMCi0gICAgRHJt Q3J0YyAqY3J0YyA9IGRybV8tPkdldENydGNGb3JEaXNwbGF5KGRpc3BsYXkpOwotCi0gICAgaW50 IHJldCA9IGNvbXBvc2l0aW9uX21hcF9bZGlzcGxheV0tPkluaXQoZHJtXywgY3J0YywgaW1wb3J0 ZXJfLCBwbGFubmVyXywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBmcmFtZV9ubyk7Ci0gICAgaWYgKHJldCkgewotICAgICAgQUxPR0UoIkZhaWxlZCB0byBp bml0IGRpc3BsYXkgY29tcG9zaXRpb24gZm9yICVkIiwgZGlzcGxheSk7Ci0gICAgICByZXR1cm4g cmV0OwotICAgIH0KLSAgfQotICByZXR1cm4gMDsKLX0KLQotaW50IERybUNvbXBvc2l0aW9uOjpT ZXRMYXllcnMoc2l6ZV90IG51bV9kaXNwbGF5cywKLSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIERybUNvbXBvc2l0aW9uRGlzcGxheUxheWVyc01hcCAqbWFwcykgewotICBpbnQgcmV0ID0g MDsKLSAgZm9yIChzaXplX3QgZGlzcGxheV9pbmRleCA9IDA7IGRpc3BsYXlfaW5kZXggPCBudW1f ZGlzcGxheXM7Ci0gICAgICAgZGlzcGxheV9pbmRleCsrKSB7Ci0gICAgRHJtQ29tcG9zaXRpb25E aXNwbGF5TGF5ZXJzTWFwICZtYXAgPSBtYXBzW2Rpc3BsYXlfaW5kZXhdOwotICAgIGludCBkaXNw bGF5ID0gbWFwLmRpc3BsYXk7Ci0KLSAgICBpZiAoIWRybV8tPkdldENvbm5lY3RvckZvckRpc3Bs YXkoZGlzcGxheSkpIHsKLSAgICAgIEFMT0dFKCJJbnZhbGlkIGRpc3BsYXkgZ2l2ZW4gdG8gU2V0 TGF5ZXJzICVkIiwgZGlzcGxheSk7Ci0gICAgICBjb250aW51ZTsKLSAgICB9Ci0KLSAgICByZXQg PSBjb21wb3NpdGlvbl9tYXBfW2Rpc3BsYXldLT5TZXRMYXllcnMoCi0gICAgICAgIG1hcC5sYXll cnMuZGF0YSgpLCBtYXAubGF5ZXJzLnNpemUoKSwgbWFwLmdlb21ldHJ5X2NoYW5nZWQpOwotICAg IGlmIChyZXQpCi0gICAgICByZXR1cm4gcmV0OwotICB9Ci0KLSAgcmV0dXJuIDA7Ci19Ci0KLWlu dCBEcm1Db21wb3NpdGlvbjo6U2V0RHBtc01vZGUoaW50IGRpc3BsYXksIHVpbnQzMl90IGRwbXNf bW9kZSkgewotICByZXR1cm4gY29tcG9zaXRpb25fbWFwX1tkaXNwbGF5XS0+U2V0RHBtc01vZGUo ZHBtc19tb2RlKTsKLX0KLQotaW50IERybUNvbXBvc2l0aW9uOjpTZXREaXNwbGF5TW9kZShpbnQg ZGlzcGxheSwgY29uc3QgRHJtTW9kZSAmZGlzcGxheV9tb2RlKSB7Ci0gIHJldHVybiBjb21wb3Np dGlvbl9tYXBfW2Rpc3BsYXldLT5TZXREaXNwbGF5TW9kZShkaXNwbGF5X21vZGUpOwotfQotCi1z dGQ6OnVuaXF1ZV9wdHI8RHJtRGlzcGxheUNvbXBvc2l0aW9uPiBEcm1Db21wb3NpdGlvbjo6VGFr ZURpc3BsYXlDb21wb3NpdGlvbigKLSAgICBpbnQgZGlzcGxheSkgewotICByZXR1cm4gc3RkOjpt b3ZlKGNvbXBvc2l0aW9uX21hcF9bZGlzcGxheV0pOwotfQotCi1pbnQgRHJtQ29tcG9zaXRpb246 OlBsYW4oc3RkOjptYXA8aW50LCBEcm1EaXNwbGF5Q29tcG9zaXRvcj4gJmNvbXBvc2l0b3JfbWFw KSB7Ci0gIGludCByZXQgPSAwOwotICBmb3IgKGF1dG8gJmNvbm4gOiBkcm1fLT5jb25uZWN0b3Jz KCkpIHsKLSAgICBpbnQgZGlzcGxheSA9IGNvbm4tPmRpc3BsYXkoKTsKLSAgICBEcm1EaXNwbGF5 Q29tcG9zaXRpb24gKmNvbXAgPSBHZXREaXNwbGF5Q29tcG9zaXRpb24oZGlzcGxheSk7Ci0gICAg cmV0ID0gY29tcC0+UGxhbihjb21wb3NpdG9yX21hcFtkaXNwbGF5XS5zcXVhc2hfc3RhdGUoKSwg JnByaW1hcnlfcGxhbmVzXywKLSAgICAgICAgICAgICAgICAgICAgICZvdmVybGF5X3BsYW5lc18p OwotICAgIGlmIChyZXQpIHsKLSAgICAgIEFMT0dFKCJGYWlsZWQgdG8gcGxhbiBjb21wb3NpdGlv biBmb3IgZGlzbGF5ICVkIiwgZGlzcGxheSk7Ci0gICAgICByZXR1cm4gcmV0OwotICAgIH0KLSAg fQotCi0gIHJldHVybiAwOwotfQotCi1pbnQgRHJtQ29tcG9zaXRpb246OkRpc2FibGVVbnVzZWRQ bGFuZXMoKSB7Ci0gIGZvciAoYXV0byAmY29ubiA6IGRybV8tPmNvbm5lY3RvcnMoKSkgewotICAg IGludCBkaXNwbGF5ID0gY29ubi0+ZGlzcGxheSgpOwotICAgIERybURpc3BsYXlDb21wb3NpdGlv biAqY29tcCA9IEdldERpc3BsYXlDb21wb3NpdGlvbihkaXNwbGF5KTsKLQotICAgIC8qCi0gICAg ICogTGVhdmUgZW1wdHkgY29tcG9zaXRpb25zIGFsb25lCi0gICAgICogVE9ETzogcmUtdmlzaXQg dGhpcyBhbmQgcG90ZW50aWFsbHkgZGlzYWJsZSBsZWZ0b3ZlciBwbGFuZXMgYWZ0ZXIgdGhlCi0g ICAgICogICAgICAgYWN0aXZlIGNvbXBvc2l0aW9ucyBoYXZlIGdvYmJsZWQgdXAgYWxsIHRoZXkg Y2FuCi0gICAgICovCi0gICAgaWYgKGNvbXAtPnR5cGUoKSA9PSBEUk1fQ09NUE9TSVRJT05fVFlQ RV9FTVBUWSB8fAotICAgICAgICBjb21wLT50eXBlKCkgPT0gRFJNX0NPTVBPU0lUSU9OX1RZUEVf TU9ERVNFVCkKLSAgICAgIGNvbnRpbnVlOwotCi0gICAgRHJtQ3J0YyAqY3J0YyA9IGRybV8tPkdl dENydGNGb3JEaXNwbGF5KGRpc3BsYXkpOwotICAgIGlmICghY3J0YykgewotICAgICAgQUxPR0Uo IkZhaWxlZCB0byBmaW5kIGNydGMgZm9yIGRpc3BsYXkgJWQiLCBkaXNwbGF5KTsKLSAgICAgIGNv bnRpbnVlOwotICAgIH0KLQotICAgIGZvciAoc3RkOjp2ZWN0b3I8RHJtUGxhbmUgKj46Oml0ZXJh dG9yIGl0ZXIgPSBwcmltYXJ5X3BsYW5lc18uYmVnaW4oKTsKLSAgICAgICAgIGl0ZXIgIT0gcHJp bWFyeV9wbGFuZXNfLmVuZCgpOyArK2l0ZXIpIHsKLSAgICAgIGlmICgoKml0ZXIpLT5HZXRDcnRj U3VwcG9ydGVkKCpjcnRjKSkgewotICAgICAgICBjb21wLT5BZGRQbGFuZURpc2FibGUoKml0ZXIp OwotICAgICAgICBwcmltYXJ5X3BsYW5lc18uZXJhc2UoaXRlcik7Ci0gICAgICAgIGJyZWFrOwot ICAgICAgfQotICAgIH0KLSAgICBmb3IgKHN0ZDo6dmVjdG9yPERybVBsYW5lICo+OjppdGVyYXRv ciBpdGVyID0gb3ZlcmxheV9wbGFuZXNfLmJlZ2luKCk7Ci0gICAgICAgICBpdGVyICE9IG92ZXJs YXlfcGxhbmVzXy5lbmQoKTspIHsKLSAgICAgIGlmICgoKml0ZXIpLT5HZXRDcnRjU3VwcG9ydGVk KCpjcnRjKSkgewotICAgICAgICBjb21wLT5BZGRQbGFuZURpc2FibGUoKml0ZXIpOwotICAgICAg ICBpdGVyID0gb3ZlcmxheV9wbGFuZXNfLmVyYXNlKGl0ZXIpOwotICAgICAgfSBlbHNlIHsKLSAg ICAgICAgaXRlcisrOwotICAgICAgfQotICAgIH0KLSAgfQotICByZXR1cm4gMDsKLX0KLQotRHJt RGlzcGxheUNvbXBvc2l0aW9uICpEcm1Db21wb3NpdGlvbjo6R2V0RGlzcGxheUNvbXBvc2l0aW9u KGludCBkaXNwbGF5KSB7Ci0gIHJldHVybiBjb21wb3NpdGlvbl9tYXBfW2Rpc3BsYXldLmdldCgp OwotfQotfQpkaWZmIC0tZ2l0IGEvZHJtY29tcG9zaXRpb24uaCBiL2RybWNvbXBvc2l0aW9uLmgK ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVhZThjZGUuLjAwMDAwMDAKLS0tIGEvZHJt Y29tcG9zaXRpb24uaAorKysgL2Rldi9udWxsCkBAIC0xLDc5ICswLDAgQEAKLS8qCi0gKiBDb3B5 cmlnaHQgKEMpIDIwMTUgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICoKLSAqIExp Y2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5z ZSIpOwotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3 aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNl IGF0Ci0gKgotICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0y LjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRv IGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBp cyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVT IE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0g KiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVy bWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi0j aWZuZGVmIEFORFJPSURfRFJNX0NPTVBPU0lUSU9OX0hfCi0jZGVmaW5lIEFORFJPSURfRFJNX0NP TVBPU0lUSU9OX0hfCi0KLSNpbmNsdWRlICJkcm1od2NvbXBvc2VyLmgiCi0jaW5jbHVkZSAiZHJt ZGlzcGxheWNvbXBvc2l0aW9uLmgiCi0jaW5jbHVkZSAiZHJtcGxhbmUuaCIKLSNpbmNsdWRlICJw bGF0Zm9ybS5oIgotCi0jaW5jbHVkZSA8bWFwPgotI2luY2x1ZGUgPHZlY3Rvcj4KLQotI2luY2x1 ZGUgPGhhcmR3YXJlL2hhcmR3YXJlLmg+Ci0jaW5jbHVkZSA8aGFyZHdhcmUvaHdjb21wb3Nlci5o PgotCi1uYW1lc3BhY2UgYW5kcm9pZCB7Ci0KLWNsYXNzIERybURpc3BsYXlDb21wb3NpdG9yOwot Ci1zdHJ1Y3QgRHJtQ29tcG9zaXRpb25EaXNwbGF5TGF5ZXJzTWFwIHsKLSAgaW50IGRpc3BsYXk7 Ci0gIGJvb2wgZ2VvbWV0cnlfY2hhbmdlZCA9IHRydWU7Ci0gIHN0ZDo6dmVjdG9yPERybUh3Y0xh eWVyPiBsYXllcnM7Ci0KLSAgRHJtQ29tcG9zaXRpb25EaXNwbGF5TGF5ZXJzTWFwKCkgPSBkZWZh dWx0OwotICBEcm1Db21wb3NpdGlvbkRpc3BsYXlMYXllcnNNYXAoRHJtQ29tcG9zaXRpb25EaXNw bGF5TGF5ZXJzTWFwICYmcmhzKSA9Ci0gICAgICBkZWZhdWx0OwotfTsKLQotY2xhc3MgRHJtQ29t cG9zaXRpb24gewotIHB1YmxpYzoKLSAgRHJtQ29tcG9zaXRpb24oRHJtUmVzb3VyY2VzICpkcm0s IEltcG9ydGVyICppbXBvcnRlciwgUGxhbm5lciAqcGxhbm5lcik7Ci0KLSAgaW50IEluaXQodWlu dDY0X3QgZnJhbWVfbm8pOwotCi0gIGludCBTZXRMYXllcnMoc2l6ZV90IG51bV9kaXNwbGF5cywg RHJtQ29tcG9zaXRpb25EaXNwbGF5TGF5ZXJzTWFwICptYXBzKTsKLSAgaW50IFNldERwbXNNb2Rl KGludCBkaXNwbGF5LCB1aW50MzJfdCBkcG1zX21vZGUpOwotICBpbnQgU2V0RGlzcGxheU1vZGUo aW50IGRpc3BsYXksIGNvbnN0IERybU1vZGUgJmRpc3BsYXlfbW9kZSk7Ci0KLSAgc3RkOjp1bmlx dWVfcHRyPERybURpc3BsYXlDb21wb3NpdGlvbj4gVGFrZURpc3BsYXlDb21wb3NpdGlvbihpbnQg ZGlzcGxheSk7Ci0gIERybURpc3BsYXlDb21wb3NpdGlvbiAqR2V0RGlzcGxheUNvbXBvc2l0aW9u KGludCBkaXNwbGF5KTsKLQotICBpbnQgUGxhbihzdGQ6Om1hcDxpbnQsIERybURpc3BsYXlDb21w b3NpdG9yPiAmY29tcG9zaXRvcl9tYXApOwotICBpbnQgRGlzYWJsZVVudXNlZFBsYW5lcygpOwot Ci0gcHJpdmF0ZToKLSAgRHJtQ29tcG9zaXRpb24oY29uc3QgRHJtQ29tcG9zaXRpb24gJikgPSBk ZWxldGU7Ci0KLSAgRHJtUmVzb3VyY2VzICpkcm1fOwotICBJbXBvcnRlciAqaW1wb3J0ZXJfOwot ICBQbGFubmVyICpwbGFubmVyXzsKLQotICBzdGQ6OnZlY3RvcjxEcm1QbGFuZSAqPiBwcmltYXJ5 X3BsYW5lc187Ci0gIHN0ZDo6dmVjdG9yPERybVBsYW5lICo+IG92ZXJsYXlfcGxhbmVzXzsKLQot ICAvKgotICAgKiBUaGlzIF9tdXN0XyBiZSByZWFkLW9ubHkgYWZ0ZXIgaXQncyBwYXNzZWQgdG8g UXVldWVDb21wb3NpdGlvbi4gT3RoZXJ3aXNlCi0gICAqIGxvY2tpbmcgaXMgcmVxdWlyZWQgdG8g bWFpbnRhaW4gY29uc2lzdGVuY3kgYWNyb3NzIHRoZSBjb21wb3NpdG9yIHRocmVhZHMuCi0gICAq LwotICBzdGQ6Om1hcDxpbnQsIHN0ZDo6dW5pcXVlX3B0cjxEcm1EaXNwbGF5Q29tcG9zaXRpb24+ PiBjb21wb3NpdGlvbl9tYXBfOwotfTsKLX0KLQotI2VuZGlmICAvLyBBTkRST0lEX0RSTV9DT01Q T1NJVElPTl9IXwpkaWZmIC0tZ2l0IGEvZHJtY29tcG9zaXRvci5jcHAgYi9kcm1jb21wb3NpdG9y LmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzFmM2VkOC4uMDAwMDAwMAotLS0g YS9kcm1jb21wb3NpdG9yLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDEwNiArMCwwIEBACi0vKgot ICogQ29weXJpZ2h0IChDKSAyMDE1IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSAq Ci0gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUg IkxpY2Vuc2UiKTsKLSAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBs aWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUg TGljZW5zZSBhdAotICoKLSAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJ Q0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFn cmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExp Y2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAqIFdJVEhPVVQgV0FS UkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBs aWVkLgotICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJu aW5nIHBlcm1pc3Npb25zIGFuZAotICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0g Ki8KLQotI2RlZmluZSBMT0dfVEFHICJod2MtZHJtLWNvbXBvc2l0b3IiCi0KLSNpbmNsdWRlICJk cm1jb21wb3NpdG9yLmgiCi0jaW5jbHVkZSAiZHJtZGlzcGxheWNvbXBvc2l0b3IuaCIKLSNpbmNs dWRlICJkcm1yZXNvdXJjZXMuaCIKLSNpbmNsdWRlICJwbGF0Zm9ybS5oIgotCi0jaW5jbHVkZSA8 c3N0cmVhbT4KLSNpbmNsdWRlIDxzdGRsaWIuaD4KLQotI2luY2x1ZGUgPGN1dGlscy9sb2cuaD4K LQotbmFtZXNwYWNlIGFuZHJvaWQgewotCi1Ecm1Db21wb3NpdG9yOjpEcm1Db21wb3NpdG9yKERy bVJlc291cmNlcyAqZHJtKSA6IGRybV8oZHJtKSwgZnJhbWVfbm9fKDApIHsKLX0KLQotRHJtQ29t cG9zaXRvcjo6fkRybUNvbXBvc2l0b3IoKSB7Ci19Ci0KLWludCBEcm1Db21wb3NpdG9yOjpJbml0 KCkgewotICBmb3IgKGF1dG8gJmNvbm4gOiBkcm1fLT5jb25uZWN0b3JzKCkpIHsKLSAgICBpbnQg ZGlzcGxheSA9IGNvbm4tPmRpc3BsYXkoKTsKLSAgICBpbnQgcmV0ID0gY29tcG9zaXRvcl9tYXBf W2Rpc3BsYXldLkluaXQoZHJtXywgZGlzcGxheSk7Ci0gICAgaWYgKHJldCkgewotICAgICAgQUxP R0UoIkZhaWxlZCB0byBpbml0aWFsaXplIGRpc3BsYXkgY29tcG9zaXRvciBmb3IgJWQiLCBkaXNw bGF5KTsKLSAgICAgIHJldHVybiByZXQ7Ci0gICAgfQotICB9Ci0gIHBsYW5uZXJfID0gUGxhbm5l cjo6Q3JlYXRlSW5zdGFuY2UoZHJtXyk7Ci0gIGlmICghcGxhbm5lcl8pIHsKLSAgICBBTE9HRSgi RmFpbGVkIHRvIGNyZWF0ZSBwbGFubmVyIGluc3RhbmNlIGZvciBjb21wb3NpdGlvbiIpOwotICAg IHJldHVybiAtRU5PTUVNOwotICB9Ci0KLSAgcmV0dXJuIDA7Ci19Ci0KLXN0ZDo6dW5pcXVlX3B0 cjxEcm1Db21wb3NpdGlvbj4gRHJtQ29tcG9zaXRvcjo6Q3JlYXRlQ29tcG9zaXRpb24oCi0gICAg SW1wb3J0ZXIgKmltcG9ydGVyKSB7Ci0gIHN0ZDo6dW5pcXVlX3B0cjxEcm1Db21wb3NpdGlvbj4g Y29tcG9zaXRpb24oCi0gICAgICBuZXcgRHJtQ29tcG9zaXRpb24oZHJtXywgaW1wb3J0ZXIsIHBs YW5uZXJfLmdldCgpKSk7Ci0gIGludCByZXQgPSBjb21wb3NpdGlvbi0+SW5pdCgrK2ZyYW1lX25v Xyk7Ci0gIGlmIChyZXQpIHsKLSAgICBBTE9HRSgiRmFpbGVkIHRvIGluaXRpYWxpemUgZHJtIGNv bXBvc2l0aW9uICVkIiwgcmV0KTsKLSAgICByZXR1cm4gbnVsbHB0cjsKLSAgfQotICByZXR1cm4g Y29tcG9zaXRpb247Ci19Ci0KLWludCBEcm1Db21wb3NpdG9yOjpRdWV1ZUNvbXBvc2l0aW9uKAot ICAgIHN0ZDo6dW5pcXVlX3B0cjxEcm1Db21wb3NpdGlvbj4gY29tcG9zaXRpb24pIHsKLSAgaW50 IHJldDsKLQotICByZXQgPSBjb21wb3NpdGlvbi0+UGxhbihjb21wb3NpdG9yX21hcF8pOwotICBp ZiAocmV0KQotICAgIHJldHVybiByZXQ7Ci0KLSAgcmV0ID0gY29tcG9zaXRpb24tPkRpc2FibGVV bnVzZWRQbGFuZXMoKTsKLSAgaWYgKHJldCkKLSAgICByZXR1cm4gcmV0OwotCi0gIGZvciAoYXV0 byAmY29ubiA6IGRybV8tPmNvbm5lY3RvcnMoKSkgewotICAgIGludCBkaXNwbGF5ID0gY29ubi0+ ZGlzcGxheSgpOwotICAgIGludCByZXQgPSBjb21wb3NpdG9yX21hcF9bZGlzcGxheV0uUXVldWVD b21wb3NpdGlvbigKLSAgICAgICAgY29tcG9zaXRpb24tPlRha2VEaXNwbGF5Q29tcG9zaXRpb24o ZGlzcGxheSkpOwotICAgIGlmIChyZXQpIHsKLSAgICAgIEFMT0dFKCJGYWlsZWQgdG8gcXVldWUg Y29tcG9zaXRpb24gZm9yIGRpc3BsYXkgJWQgKCVkKSIsIGRpc3BsYXksIHJldCk7Ci0gICAgICBy ZXR1cm4gcmV0OwotICAgIH0KLSAgfQotCi0gIHJldHVybiAwOwotfQotCi1pbnQgRHJtQ29tcG9z aXRvcjo6Q29tcG9zaXRlKCkgewotICAvKgotICAgKiBUaGlzIHNob3VsZG4ndCBiZSBjYWxsZWQs IHdlIHNob3VsZCBiZSBjYWxsaW5nIENvbXBvc2l0ZSgpIG9uIHRoZSBkaXNwbGF5Ci0gICAqIGNv bXBvc2l0b3JzIGRpcmVjdGx5LgotICAgKi8KLSAgQUxPR0UoIkNhbGxpbmcgYmFzZSBkcm0gY29t cG9zaXRvciBDb21wb3NpdGUoKSBmdW5jdGlvbiIpOwotICByZXR1cm4gLUVJTlZBTDsKLX0KLQot dm9pZCBEcm1Db21wb3NpdG9yOjpEdW1wKHN0ZDo6b3N0cmluZ3N0cmVhbSAqb3V0KSBjb25zdCB7 Ci0gICpvdXQgPDwgIkRybUNvbXBvc2l0b3Igc3RhdHM6XG4iOwotICBmb3IgKGF1dG8gJmNvbm4g OiBkcm1fLT5jb25uZWN0b3JzKCkpCi0gICAgY29tcG9zaXRvcl9tYXBfW2Nvbm4tPmRpc3BsYXko KV0uRHVtcChvdXQpOwotfQotfQpkaWZmIC0tZ2l0IGEvZHJtY29tcG9zaXRvci5oIGIvZHJtY29t cG9zaXRvci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxOTI3MWI1Li4wMDAwMDAw Ci0tLSBhL2RybWNvbXBvc2l0b3IuaAorKysgL2Rldi9udWxsCkBAIC0xLDU2ICswLDAgQEAKLS8q Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTUgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAot ICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRo ZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29t cGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRo ZSBMaWNlbnNlIGF0Ci0gKgotICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMv TElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3Ig YWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUg TGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBX QVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGlt cGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zl cm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4K LSAqLwotCi0jaWZuZGVmIEFORFJPSURfRFJNX0NPTVBPU0lUT1JfSF8KLSNkZWZpbmUgQU5EUk9J RF9EUk1fQ09NUE9TSVRPUl9IXwotCi0jaW5jbHVkZSAiZHJtY29tcG9zaXRpb24uaCIKLSNpbmNs dWRlICJkcm1kaXNwbGF5Y29tcG9zaXRvci5oIgotI2luY2x1ZGUgInBsYXRmb3JtLmgiCi0KLSNp bmNsdWRlIDxtYXA+Ci0jaW5jbHVkZSA8bWVtb3J5PgotI2luY2x1ZGUgPHNzdHJlYW0+Ci0KLW5h bWVzcGFjZSBhbmRyb2lkIHsKLQotY2xhc3MgRHJtQ29tcG9zaXRvciB7Ci0gcHVibGljOgotICBE cm1Db21wb3NpdG9yKERybVJlc291cmNlcyAqZHJtKTsKLSAgfkRybUNvbXBvc2l0b3IoKTsKLQot ICBpbnQgSW5pdCgpOwotCi0gIHN0ZDo6dW5pcXVlX3B0cjxEcm1Db21wb3NpdGlvbj4gQ3JlYXRl Q29tcG9zaXRpb24oSW1wb3J0ZXIgKmltcG9ydGVyKTsKLQotICBpbnQgUXVldWVDb21wb3NpdGlv bihzdGQ6OnVuaXF1ZV9wdHI8RHJtQ29tcG9zaXRpb24+IGNvbXBvc2l0aW9uKTsKLSAgaW50IENv bXBvc2l0ZSgpOwotICB2b2lkIER1bXAoc3RkOjpvc3RyaW5nc3RyZWFtICpvdXQpIGNvbnN0Owot Ci0gcHJpdmF0ZToKLSAgRHJtQ29tcG9zaXRvcihjb25zdCBEcm1Db21wb3NpdG9yICYpID0gZGVs ZXRlOwotCi0gIERybVJlc291cmNlcyAqZHJtXzsKLSAgc3RkOjp1bmlxdWVfcHRyPFBsYW5uZXI+ IHBsYW5uZXJfOwotCi0gIHVpbnQ2NF90IGZyYW1lX25vXzsKLQotICAvLyBtdXRhYmxlIGZvciBE dW1wKCkgcHJvcGFnYXRpb24KLSAgbXV0YWJsZSBzdGQ6Om1hcDxpbnQsIERybURpc3BsYXlDb21w b3NpdG9yPiBjb21wb3NpdG9yX21hcF87Ci19OwotfQotCi0jZW5kaWYgIC8vIEFORFJPSURfRFJN X0NPTVBPU0lUT1JfSF8KZGlmZiAtLWdpdCBhL2RybWNvbXBvc2l0b3J3b3JrZXIuaCBiL2RybWNv bXBvc2l0b3J3b3JrZXIuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzMxYmM2NS4u MDAwMDAwMAotLS0gYS9kcm1jb21wb3NpdG9yd29ya2VyLmgKKysrIC9kZXYvbnVsbApAQCAtMSw0 MSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE1IFRoZSBBbmRyb2lkIE9wZW4gU291 cmNlIFByb2plY3QKLSAqCi0gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZl cnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUg ZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAqIFlvdSBtYXkgb2J0YWlu IGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUu b3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxp Y2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICogZGlzdHJpYnV0 ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywK LSAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIg ZXhwcmVzcyBvciBpbXBsaWVkLgotICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMg bGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICogbGltaXRhdGlvbnMgdW5kZXIg dGhlIExpY2Vuc2UuCi0gKi8KLQotI2lmbmRlZiBBTkRST0lEX0RSTV9DT01QT1NJVE9SX1dPUktF Ul9IXwotI2RlZmluZSBBTkRST0lEX0RSTV9DT01QT1NJVE9SX1dPUktFUl9IXwotCi0jaW5jbHVk ZSAid29ya2VyLmgiCi0KLW5hbWVzcGFjZSBhbmRyb2lkIHsKLQotY2xhc3MgRHJtRGlzcGxheUNv bXBvc2l0b3I7Ci0KLWNsYXNzIERybUNvbXBvc2l0b3JXb3JrZXIgOiBwdWJsaWMgV29ya2VyIHsK LSBwdWJsaWM6Ci0gIERybUNvbXBvc2l0b3JXb3JrZXIoRHJtRGlzcGxheUNvbXBvc2l0b3IgKmNv bXBvc2l0b3IpOwotICB+RHJtQ29tcG9zaXRvcldvcmtlcigpIG92ZXJyaWRlOwotCi0gIGludCBJ bml0KCk7Ci0KLSBwcm90ZWN0ZWQ6Ci0gIHZvaWQgUm91dGluZSgpIG92ZXJyaWRlOwotCi0gIERy bURpc3BsYXlDb21wb3NpdG9yICpjb21wb3NpdG9yXzsKLSAgYm9vbCBkaWRfc3F1YXNoX2FsbF8g PSBmYWxzZTsKLX07Ci19Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJtZGlzcGxheWNvbXBvc2l0 aW9uLmNwcCBiL2RybWRpc3BsYXljb21wb3NpdGlvbi5jcHAKaW5kZXggMGY4MDg0Yi4uNjZlNjdh NCAxMDA2NDQKLS0tIGEvZHJtZGlzcGxheWNvbXBvc2l0aW9uLmNwcAorKysgYi9kcm1kaXNwbGF5 Y29tcG9zaXRpb24uY3BwCkBAIC0xNyw2ICsxNyw3IEBACiAjZGVmaW5lIExPR19UQUcgImh3Yy1k cm0tZGlzcGxheS1jb21wb3NpdGlvbiIKIAogI2luY2x1ZGUgImRybWRpc3BsYXljb21wb3NpdGlv bi5oIgorI2luY2x1ZGUgImRybWRpc3BsYXljb21wb3NpdG9yLmgiCiAjaW5jbHVkZSAiZHJtY3J0 Yy5oIgogI2luY2x1ZGUgImRybXBsYW5lLmgiCiAjaW5jbHVkZSAiZHJtcmVzb3VyY2VzLmgiCmRp ZmYgLS1naXQgYS9kcm1kaXNwbGF5Y29tcG9zaXRpb24uaCBiL2RybWRpc3BsYXljb21wb3NpdGlv bi5oCmluZGV4IDEzZGExOWQuLmIxNjVhZGMgMTAwNjQ0Ci0tLSBhL2RybWRpc3BsYXljb21wb3Np dGlvbi5oCisrKyBiL2RybWRpc3BsYXljb21wb3NpdGlvbi5oCkBAIC00Miw2ICs0MiwxNiBAQCBl bnVtIERybUNvbXBvc2l0aW9uVHlwZSB7CiAgIERSTV9DT01QT1NJVElPTl9UWVBFX01PREVTRVQs CiB9OwogCitzdHJ1Y3QgRHJtQ29tcG9zaXRpb25EaXNwbGF5TGF5ZXJzTWFwIHsKKyAgaW50IGRp c3BsYXk7CisgIGJvb2wgZ2VvbWV0cnlfY2hhbmdlZCA9IHRydWU7CisgIHN0ZDo6dmVjdG9yPERy bUh3Y0xheWVyPiBsYXllcnM7CisKKyAgRHJtQ29tcG9zaXRpb25EaXNwbGF5TGF5ZXJzTWFwKCkg PSBkZWZhdWx0OworICBEcm1Db21wb3NpdGlvbkRpc3BsYXlMYXllcnNNYXAoRHJtQ29tcG9zaXRp b25EaXNwbGF5TGF5ZXJzTWFwICYmcmhzKSA9CisgICAgICBkZWZhdWx0OworfTsKKwogc3RydWN0 IERybUNvbXBvc2l0aW9uUmVnaW9uIHsKICAgRHJtSHdjUmVjdDxpbnQ+IGZyYW1lOwogICBzdGQ6 OnZlY3RvcjxzaXplX3Q+IHNvdXJjZV9sYXllcnM7CmRpZmYgLS1naXQgYS9kcm1kaXNwbGF5Y29t cG9zaXRvci5jcHAgYi9kcm1kaXNwbGF5Y29tcG9zaXRvci5jcHAKaW5kZXggYTFiYWVkMS4uYmQ2 NzBjZiAxMDA2NDQKLS0tIGEvZHJtZGlzcGxheWNvbXBvc2l0b3IuY3BwCisrKyBiL2RybWRpc3Bs YXljb21wb3NpdG9yLmNwcApAQCAtMzcsOCArMzcsNiBAQAogI2luY2x1ZGUgImRybXJlc291cmNl cy5oIgogI2luY2x1ZGUgImdsd29ya2VyLmgiCiAKLSNkZWZpbmUgRFJNX0RJU1BMQVlfQ09NUE9T SVRPUl9NQVhfUVVFVUVfREVQVEggMgotCiBuYW1lc3BhY2UgYW5kcm9pZCB7CiAKIHZvaWQgU3F1 YXNoU3RhdGU6OkluaXQoRHJtSHdjTGF5ZXIgKmxheWVycywgc2l6ZV90IG51bV9sYXllcnMpIHsK QEAgLTE3Niw1OCArMTc0LDkgQEAgc3RhdGljIGJvb2wgVXNlc1NxdWFzaChjb25zdCBzdGQ6OnZl Y3RvcjxEcm1Db21wb3NpdGlvblBsYW5lPiAmY29tcF9wbGFuZXMpIHsKICAgfSk7CiB9CiAKLURy bURpc3BsYXlDb21wb3NpdG9yOjpGcmFtZVdvcmtlcjo6RnJhbWVXb3JrZXIoRHJtRGlzcGxheUNv bXBvc2l0b3IgKmNvbXBvc2l0b3IpCi0gICAgOiBXb3JrZXIoImZyYW1lLXdvcmtlciIsIEhBTF9Q UklPUklUWV9VUkdFTlRfRElTUExBWSksCi0gICAgICBjb21wb3NpdG9yXyhjb21wb3NpdG9yKSB7 Ci19Ci0KLURybURpc3BsYXlDb21wb3NpdG9yOjpGcmFtZVdvcmtlcjo6fkZyYW1lV29ya2VyKCkg ewotfQotCi1pbnQgRHJtRGlzcGxheUNvbXBvc2l0b3I6OkZyYW1lV29ya2VyOjpJbml0KCkgewot ICByZXR1cm4gSW5pdFdvcmtlcigpOwotfQotCi12b2lkIERybURpc3BsYXlDb21wb3NpdG9yOjpG cmFtZVdvcmtlcjo6UXVldWVGcmFtZSgKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8RHJtRGlzcGxheUNv bXBvc2l0aW9uPiBjb21wb3NpdGlvbiwgaW50IHN0YXR1cykgewotICBMb2NrKCk7Ci0gIEZyYW1l U3RhdGUgZnJhbWU7Ci0gIGZyYW1lLmNvbXBvc2l0aW9uID0gc3RkOjptb3ZlKGNvbXBvc2l0aW9u KTsKLSAgZnJhbWUuc3RhdHVzID0gc3RhdHVzOwotICBmcmFtZV9xdWV1ZV8ucHVzaChzdGQ6Om1v dmUoZnJhbWUpKTsKLSAgVW5sb2NrKCk7Ci0gIFNpZ25hbCgpOwotfQotCi12b2lkIERybURpc3Bs YXlDb21wb3NpdG9yOjpGcmFtZVdvcmtlcjo6Um91dGluZSgpIHsKLSAgaW50IHdhaXRfcmV0ID0g MDsKLQotICBMb2NrKCk7Ci0gIGlmIChmcmFtZV9xdWV1ZV8uZW1wdHkoKSkgewotICAgIHdhaXRf cmV0ID0gV2FpdEZvclNpZ25hbE9yRXhpdExvY2tlZCgpOwotICB9Ci0KLSAgRnJhbWVTdGF0ZSBm cmFtZTsKLSAgaWYgKCFmcmFtZV9xdWV1ZV8uZW1wdHkoKSkgewotICAgIGZyYW1lID0gc3RkOjpt b3ZlKGZyYW1lX3F1ZXVlXy5mcm9udCgpKTsKLSAgICBmcmFtZV9xdWV1ZV8ucG9wKCk7Ci0gIH0K LSAgVW5sb2NrKCk7Ci0KLSAgaWYgKHdhaXRfcmV0ID09IC1FSU5UUikgewotICAgIHJldHVybjsK LSAgfSBlbHNlIGlmICh3YWl0X3JldCkgewotICAgIEFMT0dFKCJGYWlsZWQgdG8gd2FpdCBmb3Ig c2lnbmFsLCAlZCIsIHdhaXRfcmV0KTsKLSAgICByZXR1cm47Ci0gIH0KLSAgY29tcG9zaXRvcl8t PkFwcGx5RnJhbWUoc3RkOjptb3ZlKGZyYW1lLmNvbXBvc2l0aW9uKSwgZnJhbWUuc3RhdHVzKTsK LX0KLQogRHJtRGlzcGxheUNvbXBvc2l0b3I6OkRybURpc3BsYXlDb21wb3NpdG9yKCkKICAgICA6 IGRybV8oTlVMTCksCiAgICAgICBkaXNwbGF5XygtMSksCi0gICAgICB3b3JrZXJfKHRoaXMpLAot ICAgICAgZnJhbWVfd29ya2VyXyh0aGlzKSwKICAgICAgIGluaXRpYWxpemVkXyhmYWxzZSksCiAg ICAgICBhY3RpdmVfKGZhbHNlKSwKICAgICAgIHVzZV9od19vdmVybGF5c18odHJ1ZSksCkBAIC0y NDUsOSArMTk0LDYgQEAgRHJtRGlzcGxheUNvbXBvc2l0b3I6On5Ecm1EaXNwbGF5Q29tcG9zaXRv cigpIHsKICAgaWYgKCFpbml0aWFsaXplZF8pCiAgICAgcmV0dXJuOwogCi0gIHdvcmtlcl8uRXhp dCgpOwotICBmcmFtZV93b3JrZXJfLkV4aXQoKTsKLQogICBpbnQgcmV0ID0gcHRocmVhZF9tdXRl eF9sb2NrKCZsb2NrXyk7CiAgIGlmIChyZXQpCiAgICAgQUxPR0UoIkZhaWxlZCB0byBhY3F1aXJl IGNvbXBvc2l0b3IgbG9jayAlZCIsIHJldCk7CkBAIC0yNTcsMTAgKzIwMyw2IEBAIERybURpc3Bs YXlDb21wb3NpdG9yOjp+RHJtRGlzcGxheUNvbXBvc2l0b3IoKSB7CiAgIGlmIChtb2RlXy5vbGRf YmxvYl9pZCkKICAgICBkcm1fLT5EZXN0cm95UHJvcGVydHlCbG9iKG1vZGVfLm9sZF9ibG9iX2lk KTsKIAotICB3aGlsZSAoIWNvbXBvc2l0ZV9xdWV1ZV8uZW1wdHkoKSkgewotICAgIGNvbXBvc2l0 ZV9xdWV1ZV8uZnJvbnQoKS5yZXNldCgpOwotICAgIGNvbXBvc2l0ZV9xdWV1ZV8ucG9wKCk7Ci0g IH0KICAgYWN0aXZlX2NvbXBvc2l0aW9uXy5yZXNldCgpOwogCiAgIHJldCA9IHB0aHJlYWRfbXV0 ZXhfdW5sb2NrKCZsb2NrXyk7CkBAIC0yNzksMTggKzIyMSw2IEBAIGludCBEcm1EaXNwbGF5Q29t cG9zaXRvcjo6SW5pdChEcm1SZXNvdXJjZXMgKmRybSwgaW50IGRpc3BsYXkpIHsKICAgICBBTE9H RSgiRmFpbGVkIHRvIGluaXRpYWxpemUgZHJtIGNvbXBvc2l0b3IgbG9jayAlZFxuIiwgcmV0KTsK ICAgICByZXR1cm4gcmV0OwogICB9Ci0gIHJldCA9IHdvcmtlcl8uSW5pdCgpOwotICBpZiAocmV0 KSB7Ci0gICAgcHRocmVhZF9tdXRleF9kZXN0cm95KCZsb2NrXyk7Ci0gICAgQUxPR0UoIkZhaWxl ZCB0byBpbml0aWFsaXplIGNvbXBvc2l0b3Igd29ya2VyICVkXG4iLCByZXQpOwotICAgIHJldHVy biByZXQ7Ci0gIH0KLSAgcmV0ID0gZnJhbWVfd29ya2VyXy5Jbml0KCk7Ci0gIGlmIChyZXQpIHsK LSAgICBwdGhyZWFkX211dGV4X2Rlc3Ryb3koJmxvY2tfKTsKLSAgICBBTE9HRSgiRmFpbGVkIHRv IGluaXRpYWxpemUgZnJhbWUgd29ya2VyICVkXG4iLCByZXQpOwotICAgIHJldHVybiByZXQ7Ci0g IH0KIAogICBpbml0aWFsaXplZF8gPSB0cnVlOwogICByZXR1cm4gMDsKQEAgLTMwMSw1NSArMjMx LDYgQEAgc3RkOjp1bmlxdWVfcHRyPERybURpc3BsYXlDb21wb3NpdGlvbj4gRHJtRGlzcGxheUNv bXBvc2l0b3I6OkNyZWF0ZUNvbXBvc2l0aW9uKCkKICAgcmV0dXJuIHN0ZDo6dW5pcXVlX3B0cjxE cm1EaXNwbGF5Q29tcG9zaXRpb24+KG5ldyBEcm1EaXNwbGF5Q29tcG9zaXRpb24oKSk7CiB9CiAK LWludCBEcm1EaXNwbGF5Q29tcG9zaXRvcjo6UXVldWVDb21wb3NpdGlvbigKLSAgICBzdGQ6OnVu aXF1ZV9wdHI8RHJtRGlzcGxheUNvbXBvc2l0aW9uPiBjb21wb3NpdGlvbikgewotICBzd2l0Y2gg KGNvbXBvc2l0aW9uLT50eXBlKCkpIHsKLSAgICBjYXNlIERSTV9DT01QT1NJVElPTl9UWVBFX0ZS QU1FOgotICAgICAgaWYgKCFhY3RpdmVfKQotICAgICAgICByZXR1cm4gLUVOT0RFVjsKLSAgICAg IGJyZWFrOwotICAgIGNhc2UgRFJNX0NPTVBPU0lUSU9OX1RZUEVfRFBNUzoKLSAgICAgIC8qCi0g ICAgICAgKiBVcGRhdGUgdGhlIHN0YXRlIGFzIHNvb24gYXMgd2UgZ2V0IGl0IHNvIHdlIGNhbiBz dGFydC9zdG9wIHF1ZXVpbmcKLSAgICAgICAqIGZyYW1lcyBhc2FwLgotICAgICAgICovCi0gICAg ICBhY3RpdmVfID0gKGNvbXBvc2l0aW9uLT5kcG1zX21vZGUoKSA9PSBEUk1fTU9ERV9EUE1TX09O KTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgRFJNX0NPTVBPU0lUSU9OX1RZUEVfTU9ERVNFVDoK LSAgICAgIGJyZWFrOwotICAgIGNhc2UgRFJNX0NPTVBPU0lUSU9OX1RZUEVfRU1QVFk6Ci0gICAg ICByZXR1cm4gMDsKLSAgICBkZWZhdWx0OgotICAgICAgQUxPR0UoIlVua25vd24gY29tcG9zaXRp b24gdHlwZSAlZC8lZCIsIGNvbXBvc2l0aW9uLT50eXBlKCksIGRpc3BsYXlfKTsKLSAgICAgIHJl dHVybiAtRU5PRU5UOwotICB9Ci0KLSAgaW50IHJldCA9IHB0aHJlYWRfbXV0ZXhfbG9jaygmbG9j a18pOwotICBpZiAocmV0KSB7Ci0gICAgQUxPR0UoIkZhaWxlZCB0byBhY3F1aXJlIGNvbXBvc2l0 b3IgbG9jayAlZCIsIHJldCk7Ci0gICAgcmV0dXJuIHJldDsKLSAgfQotCi0gIC8vIEJsb2NrIHRo ZSBxdWV1ZSBpZiBpdCBnZXRzIHRvbyBsYXJnZS4gT3RoZXJ3aXNlLCBTdXJmYWNlRmxpbmdlciB3 aWxsIHN0YXJ0Ci0gIC8vIHRvIGVhdCBvdXIgYnVmZmVyIGhhbmRsZXMgd2hlbiB3ZSBnZXQgYWJv dXQgMSBzZWNvbmQgYmVoaW5kLgotICB3aGlsZSAoY29tcG9zaXRlX3F1ZXVlXy5zaXplKCkgPj0g RFJNX0RJU1BMQVlfQ09NUE9TSVRPUl9NQVhfUVVFVUVfREVQVEgpIHsKLSAgICBwdGhyZWFkX211 dGV4X3VubG9jaygmbG9ja18pOwotICAgIHNjaGVkX3lpZWxkKCk7Ci0gICAgcHRocmVhZF9tdXRl eF9sb2NrKCZsb2NrXyk7Ci0gIH0KLQotICBjb21wb3NpdGVfcXVldWVfLnB1c2goc3RkOjptb3Zl KGNvbXBvc2l0aW9uKSk7Ci0KLSAgcmV0ID0gcHRocmVhZF9tdXRleF91bmxvY2soJmxvY2tfKTsK LSAgaWYgKHJldCkgewotICAgIEFMT0dFKCJGYWlsZWQgdG8gcmVsZWFzZSBjb21wb3NpdG9yIGxv Y2sgJWQiLCByZXQpOwotICAgIHJldHVybiByZXQ7Ci0gIH0KLQotICB3b3JrZXJfLlNpZ25hbCgp OwotICByZXR1cm4gMDsKLX0KLQogc3RkOjp0dXBsZTx1aW50MzJfdCwgdWludDMyX3QsIGludD4K IERybURpc3BsYXlDb21wb3NpdG9yOjpHZXRBY3RpdmVNb2RlUmVzb2x1dGlvbigpIHsKICAgRHJt Q29ubmVjdG9yICpjb25uZWN0b3IgPSBkcm1fLT5HZXRDb25uZWN0b3JGb3JEaXNwbGF5KGRpc3Bs YXlfKTsKQEAgLTUxNCw2ICszOTUsMTUgQEAgaW50IERybURpc3BsYXlDb21wb3NpdG9yOjpQcmVw YXJlRnJhbWUoRHJtRGlzcGxheUNvbXBvc2l0aW9uICpkaXNwbGF5X2NvbXApIHsKICAgc3RkOjp2 ZWN0b3I8RHJtQ29tcG9zaXRpb25SZWdpb24+ICZwcmVfY29tcF9yZWdpb25zID0KICAgICAgIGRp c3BsYXlfY29tcC0+cHJlX2NvbXBfcmVnaW9ucygpOwogCisgIGlmICghcHJlX2NvbXBvc2l0b3Jf KSB7CisgICAgcHJlX2NvbXBvc2l0b3JfLnJlc2V0KG5ldyBHTFdvcmtlckNvbXBvc2l0b3IoKSk7 CisgICAgaW50IHJldCA9IHByZV9jb21wb3NpdG9yXy0+SW5pdCgpOworICAgIGlmIChyZXQpIHsK KyAgICAgIEFMT0dFKCJGYWlsZWQgdG8gaW5pdGlhbGl6ZSBPcGVuR0wgY29tcG9zaXRvciAlZCIs IHJldCk7CisgICAgICByZXR1cm4gcmV0OworICAgIH0KKyAgfQorCiAgIGludCBzcXVhc2hfbGF5 ZXJfaW5kZXggPSAtMTsKICAgaWYgKHNxdWFzaF9yZWdpb25zLnNpemUoKSA+IDApIHsKICAgICBz cXVhc2hfZnJhbWVidWZmZXJfaW5kZXhfID0gKHNxdWFzaF9mcmFtZWJ1ZmZlcl9pbmRleF8gKyAx KSAlIDI7CkBAIC05MDYsNDEgKzc5Niw5IEBAIHZvaWQgRHJtRGlzcGxheUNvbXBvc2l0b3I6OkFw cGx5RnJhbWUoCiAgICAgQUxPR0UoIkZhaWxlZCB0byByZWxlYXNlIGxvY2sgZm9yIGFjdGl2ZV9j b21wb3NpdGlvbiBzd2FwIik7CiB9CiAKLWludCBEcm1EaXNwbGF5Q29tcG9zaXRvcjo6Q29tcG9z aXRlKCkgewotICBBVFJBQ0VfQ0FMTCgpOwotCi0gIGlmICghcHJlX2NvbXBvc2l0b3JfKSB7Ci0g ICAgcHJlX2NvbXBvc2l0b3JfLnJlc2V0KG5ldyBHTFdvcmtlckNvbXBvc2l0b3IoKSk7Ci0gICAg aW50IHJldCA9IHByZV9jb21wb3NpdG9yXy0+SW5pdCgpOwotICAgIGlmIChyZXQpIHsKLSAgICAg IEFMT0dFKCJGYWlsZWQgdG8gaW5pdGlhbGl6ZSBPcGVuR0wgY29tcG9zaXRvciAlZCIsIHJldCk7 Ci0gICAgICByZXR1cm4gcmV0OwotICAgIH0KLSAgfQotCi0gIGludCByZXQgPSBwdGhyZWFkX211 dGV4X2xvY2soJmxvY2tfKTsKLSAgaWYgKHJldCkgewotICAgIEFMT0dFKCJGYWlsZWQgdG8gYWNx dWlyZSBjb21wb3NpdG9yIGxvY2sgJWQiLCByZXQpOwotICAgIHJldHVybiByZXQ7Ci0gIH0KLSAg aWYgKGNvbXBvc2l0ZV9xdWV1ZV8uZW1wdHkoKSkgewotICAgIHJldCA9IHB0aHJlYWRfbXV0ZXhf dW5sb2NrKCZsb2NrXyk7Ci0gICAgaWYgKHJldCkKLSAgICAgIEFMT0dFKCJGYWlsZWQgdG8gcmVs ZWFzZSBjb21wb3NpdG9yIGxvY2sgJWQiLCByZXQpOwotICAgIHJldHVybiByZXQ7Ci0gIH0KLQot ICBzdGQ6OnVuaXF1ZV9wdHI8RHJtRGlzcGxheUNvbXBvc2l0aW9uPiBjb21wb3NpdGlvbigKLSAg ICAgIHN0ZDo6bW92ZShjb21wb3NpdGVfcXVldWVfLmZyb250KCkpKTsKLQotICBjb21wb3NpdGVf cXVldWVfLnBvcCgpOwotCi0gIHJldCA9IHB0aHJlYWRfbXV0ZXhfdW5sb2NrKCZsb2NrXyk7Ci0g IGlmIChyZXQpIHsKLSAgICBBTE9HRSgiRmFpbGVkIHRvIHJlbGVhc2UgY29tcG9zaXRvciBsb2Nr ICVkIiwgcmV0KTsKLSAgICByZXR1cm4gcmV0OwotICB9Ci0KK2ludCBEcm1EaXNwbGF5Q29tcG9z aXRvcjo6QXBwbHlDb21wb3NpdGlvbigKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8RHJtRGlzcGxheUNv bXBvc2l0aW9uPiBjb21wb3NpdGlvbikgeworICBpbnQgcmV0ID0gMDsKICAgc3dpdGNoIChjb21w b3NpdGlvbi0+dHlwZSgpKSB7CiAgICAgY2FzZSBEUk1fQ09NUE9TSVRJT05fVFlQRV9GUkFNRToK ICAgICAgIHJldCA9IFByZXBhcmVGcmFtZShjb21wb3NpdGlvbi5nZXQoKSk7CkBAIC05NTksNyAr ODE3LDcgQEAgaW50IERybURpc3BsYXlDb21wb3NpdG9yOjpDb21wb3NpdGUoKSB7CiAgICAgICB9 CiAKICAgICAgIC8vIElmIHVzZV9od19vdmVybGF5c18gaXMgZmFsc2UsIHdlIGNhbid0IHVzZSBo YXJkd2FyZSB0byBjb21wb3NpdGUgdGhlCi0gICAgICAvLyBmcmFtZS4gU28gc3F1YXNoIGFsbCBs YXllcnMgaW50byBhIHNpbmdsZSBjb21wb3NpdGlvbiBhbmQgcXVldWUgdGhhdAorICAgICAgLy8g ZnJhbWUuIFNvIHNxdWFzaCBhbGwgbGF5ZXJzIGludG8gYSBzaW5nbGUgY29tcG9zaXRpb24gYW5k IGFwcGx5IHRoYXQKICAgICAgIC8vIGluc3RlYWQuCiAgICAgICBpZiAoIXVzZV9od19vdmVybGF5 c18pIHsKICAgICAgICAgc3RkOjp1bmlxdWVfcHRyPERybURpc3BsYXlDb21wb3NpdGlvbj4gc3F1 YXNoZWQgPSBDcmVhdGVDb21wb3NpdGlvbigpOwpAQCAtOTc1LDkgKzgzMywxMCBAQCBpbnQgRHJt RGlzcGxheUNvbXBvc2l0b3I6OkNvbXBvc2l0ZSgpIHsKICAgICAgICAgICByZXR1cm4gcmV0Owog ICAgICAgICB9CiAgICAgICB9Ci0gICAgICBmcmFtZV93b3JrZXJfLlF1ZXVlRnJhbWUoc3RkOjpt b3ZlKGNvbXBvc2l0aW9uKSwgcmV0KTsKKyAgICAgIEFwcGx5RnJhbWUoc3RkOjptb3ZlKGNvbXBv c2l0aW9uKSwgcmV0KTsKICAgICAgIGJyZWFrOwogICAgIGNhc2UgRFJNX0NPTVBPU0lUSU9OX1RZ UEVfRFBNUzoKKyAgICAgIGFjdGl2ZV8gPSAoY29tcG9zaXRpb24tPmRwbXNfbW9kZSgpID09IERS TV9NT0RFX0RQTVNfT04pOwogICAgICAgcmV0ID0gQXBwbHlEcG1zKGNvbXBvc2l0aW9uLmdldCgp KTsKICAgICAgIGlmIChyZXQpCiAgICAgICAgIEFMT0dFKCJGYWlsZWQgdG8gYXBwbHkgZHBtcyBm b3IgZGlzcGxheSAlZCIsIGRpc3BsYXlfKTsKQEAgLTEwMDEsMjQgKzg2MCw2IEBAIGludCBEcm1E aXNwbGF5Q29tcG9zaXRvcjo6Q29tcG9zaXRlKCkgewogICByZXR1cm4gcmV0OwogfQogCi1ib29s IERybURpc3BsYXlDb21wb3NpdG9yOjpIYXZlUXVldWVkQ29tcG9zaXRlcygpIGNvbnN0IHsKLSAg aW50IHJldCA9IHB0aHJlYWRfbXV0ZXhfbG9jaygmbG9ja18pOwotICBpZiAocmV0KSB7Ci0gICAg QUxPR0UoIkZhaWxlZCB0byBhY3F1aXJlIGNvbXBvc2l0b3IgbG9jayAlZCIsIHJldCk7Ci0gICAg cmV0dXJuIGZhbHNlOwotICB9Ci0KLSAgYm9vbCBlbXB0eV9yZXQgPSAhY29tcG9zaXRlX3F1ZXVl Xy5lbXB0eSgpOwotCi0gIHJldCA9IHB0aHJlYWRfbXV0ZXhfdW5sb2NrKCZsb2NrXyk7Ci0gIGlm IChyZXQpIHsKLSAgICBBTE9HRSgiRmFpbGVkIHRvIHJlbGVhc2UgY29tcG9zaXRvciBsb2NrICVk IiwgcmV0KTsKLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLQotICByZXR1cm4gZW1wdHlfcmV0Owot fQotCiBpbnQgRHJtRGlzcGxheUNvbXBvc2l0b3I6OlNxdWFzaEFsbCgpIHsKICAgQXV0b0xvY2sg bG9jaygmbG9ja18sICJjb21wb3NpdG9yIik7CiAgIGludCByZXQgPSBsb2NrLkxvY2soKTsKZGlm ZiAtLWdpdCBhL2RybWRpc3BsYXljb21wb3NpdG9yLmggYi9kcm1kaXNwbGF5Y29tcG9zaXRvci5o CmluZGV4IDk0ODdjYWMuLmYxOTY1ZmIgMTAwNjQ0Ci0tLSBhL2RybWRpc3BsYXljb21wb3NpdG9y LmgKKysrIGIvZHJtZGlzcGxheWNvbXBvc2l0b3IuaApAQCAtMTgsMTQgKzE4LDEyIEBACiAjZGVm aW5lIEFORFJPSURfRFJNX0RJU1BMQVlfQ09NUE9TSVRPUl9IXwogCiAjaW5jbHVkZSAiZHJtaHdj b21wb3Nlci5oIgotI2luY2x1ZGUgImRybWNvbXBvc2l0aW9uLmgiCi0jaW5jbHVkZSAiZHJtY29t cG9zaXRvcndvcmtlci5oIgorI2luY2x1ZGUgImRybWRpc3BsYXljb21wb3NpdGlvbi5oIgogI2lu Y2x1ZGUgImRybWZyYW1lYnVmZmVyLmgiCiAjaW5jbHVkZSAic2VwYXJhdGVfcmVjdHMuaCIKIAog I2luY2x1ZGUgPHB0aHJlYWQuaD4KICNpbmNsdWRlIDxtZW1vcnk+Ci0jaW5jbHVkZSA8cXVldWU+ CiAjaW5jbHVkZSA8c3N0cmVhbT4KICNpbmNsdWRlIDx0dXBsZT4KIApAQCAtODksNDIgKzg3LDE4 IEBAIGNsYXNzIERybURpc3BsYXlDb21wb3NpdG9yIHsKICAgaW50IEluaXQoRHJtUmVzb3VyY2Vz ICpkcm0sIGludCBkaXNwbGF5KTsKIAogICBzdGQ6OnVuaXF1ZV9wdHI8RHJtRGlzcGxheUNvbXBv c2l0aW9uPiBDcmVhdGVDb21wb3NpdGlvbigpIGNvbnN0OwotICBpbnQgUXVldWVDb21wb3NpdGlv bihzdGQ6OnVuaXF1ZV9wdHI8RHJtRGlzcGxheUNvbXBvc2l0aW9uPiBjb21wb3NpdGlvbik7Cisg IGludCBBcHBseUNvbXBvc2l0aW9uKHN0ZDo6dW5pcXVlX3B0cjxEcm1EaXNwbGF5Q29tcG9zaXRp b24+IGNvbXBvc2l0aW9uKTsKICAgaW50IENvbXBvc2l0ZSgpOwogICBpbnQgU3F1YXNoQWxsKCk7 CiAgIHZvaWQgRHVtcChzdGQ6Om9zdHJpbmdzdHJlYW0gKm91dCkgY29uc3Q7CiAKICAgc3RkOjp0 dXBsZTx1aW50MzJfdCwgdWludDMyX3QsIGludD4gR2V0QWN0aXZlTW9kZVJlc29sdXRpb24oKTsK IAotICBib29sIEhhdmVRdWV1ZWRDb21wb3NpdGVzKCkgY29uc3Q7Ci0KICAgU3F1YXNoU3RhdGUg KnNxdWFzaF9zdGF0ZSgpIHsKICAgICByZXR1cm4gJnNxdWFzaF9zdGF0ZV87CiAgIH0KIAogIHBy aXZhdGU6Ci0gIHN0cnVjdCBGcmFtZVN0YXRlIHsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8RHJtRGlz cGxheUNvbXBvc2l0aW9uPiBjb21wb3NpdGlvbjsKLSAgICBpbnQgc3RhdHVzID0gMDsKLSAgfTsK LQotICBjbGFzcyBGcmFtZVdvcmtlciA6IHB1YmxpYyBXb3JrZXIgewotICAgcHVibGljOgotICAg IEZyYW1lV29ya2VyKERybURpc3BsYXlDb21wb3NpdG9yICpjb21wb3NpdG9yKTsKLSAgICB+RnJh bWVXb3JrZXIoKSBvdmVycmlkZTsKLQotICAgIGludCBJbml0KCk7Ci0gICAgdm9pZCBRdWV1ZUZy YW1lKHN0ZDo6dW5pcXVlX3B0cjxEcm1EaXNwbGF5Q29tcG9zaXRpb24+IGNvbXBvc2l0aW9uLAot ICAgICAgICAgICAgICAgICAgICBpbnQgc3RhdHVzKTsKLQotICAgcHJvdGVjdGVkOgotICAgIHZv aWQgUm91dGluZSgpIG92ZXJyaWRlOwotCi0gICBwcml2YXRlOgotICAgIERybURpc3BsYXlDb21w b3NpdG9yICpjb21wb3NpdG9yXzsKLSAgICBzdGQ6OnF1ZXVlPEZyYW1lU3RhdGU+IGZyYW1lX3F1 ZXVlXzsKLSAgfTsKLQogICBzdHJ1Y3QgTW9kZVN0YXRlIHsKICAgICBib29sIG5lZWRzX21vZGVz ZXQgPSBmYWxzZTsKICAgICBEcm1Nb2RlIG1vZGU7CkBAIC0xNTgsMTAgKzEzMiw2IEBAIGNsYXNz IERybURpc3BsYXlDb21wb3NpdG9yIHsKICAgRHJtUmVzb3VyY2VzICpkcm1fOwogICBpbnQgZGlz cGxheV87CiAKLSAgRHJtQ29tcG9zaXRvcldvcmtlciB3b3JrZXJfOwotICBGcmFtZVdvcmtlciBm cmFtZV93b3JrZXJfOwotCi0gIHN0ZDo6cXVldWU8c3RkOjp1bmlxdWVfcHRyPERybURpc3BsYXlD b21wb3NpdGlvbj4+IGNvbXBvc2l0ZV9xdWV1ZV87CiAgIHN0ZDo6dW5pcXVlX3B0cjxEcm1EaXNw bGF5Q29tcG9zaXRpb24+IGFjdGl2ZV9jb21wb3NpdGlvbl87CiAKICAgYm9vbCBpbml0aWFsaXpl ZF87CkBAIC0xNzgsNyArMTQ4LDcgQEAgY2xhc3MgRHJtRGlzcGxheUNvbXBvc2l0b3IgewogICBp bnQgc3F1YXNoX2ZyYW1lYnVmZmVyX2luZGV4XzsKICAgRHJtRnJhbWVidWZmZXIgc3F1YXNoX2Zy YW1lYnVmZmVyc19bMl07CiAKLSAgLy8gbXV0YWJsZSBzaW5jZSB3ZSBuZWVkIHRvIGFjcXVpcmUg aW4gSGF2ZVF1ZXVlZENvbXBvc2l0ZXMKKyAgLy8gbXV0YWJsZSBzaW5jZSB3ZSBuZWVkIHRvIGFj cXVpcmUgaW4gRHVtcCgpCiAgIG11dGFibGUgcHRocmVhZF9tdXRleF90IGxvY2tfOwogCiAgIC8v IFN0YXRlIHRyYWNraW5nIHByb2dyZXNzIHNpbmNlIG91ciBsYXN0IER1bXAoKS4gVGhlc2UgYXJl IG11dGFibGUgc2luY2UKZGlmZiAtLWdpdCBhL2RybWV2ZW50bGlzdGVuZXIuY3BwIGIvZHJtZXZl bnRsaXN0ZW5lci5jcHAKaW5kZXggMDUxNGFhNi4uOTg0ZDFkZCAxMDA2NDQKLS0tIGEvZHJtZXZl bnRsaXN0ZW5lci5jcHAKKysrIGIvZHJtZXZlbnRsaXN0ZW5lci5jcHAKQEAgLTIwLDEwICsyMCwx MyBAQAogI2luY2x1ZGUgImRybXJlc291cmNlcy5oIgogCiAjaW5jbHVkZSA8YXNzZXJ0Lmg+Cisj aW5jbHVkZSA8ZXJybm8uaD4KICNpbmNsdWRlIDxsaW51eC9uZXRsaW5rLmg+CiAjaW5jbHVkZSA8 c3lzL3NvY2tldC5oPgogCiAjaW5jbHVkZSA8Y3V0aWxzL2xvZy5oPgorI2luY2x1ZGUgPGhhcmR3 YXJlL2hhcmR3YXJlLmg+CisjaW5jbHVkZSA8aGFyZHdhcmUvaHdjb21wb3Nlci5oPgogI2luY2x1 ZGUgPHhmODZkcm0uaD4KIAogbmFtZXNwYWNlIGFuZHJvaWQgewpkaWZmIC0tZ2l0IGEvZHJtaHdj dHdvLmNwcCBiL2RybWh3Y3R3by5jcHAKaW5kZXggOGM4NTNmNC4uNzYyZWU4YyAxMDA2NDQKLS0t IGEvZHJtaHdjdHdvLmNwcAorKysgYi9kcm1od2N0d28uY3BwCkBAIC01NTcsNyArNTU3LDcgQEAg SFdDMjo6RXJyb3IgRHJtSHdjVHdvOjpId2NEaXNwbGF5OjpQcmVzZW50RGlzcGxheShpbnQzMl90 ICpyZXRpcmVfZmVuY2UpIHsKICAgICBpID0gb3ZlcmxheV9wbGFuZXMuZXJhc2UoaSk7CiAgIH0K IAotICByZXQgPSBjb21wb3NpdG9yXy5RdWV1ZUNvbXBvc2l0aW9uKHN0ZDo6bW92ZShjb21wb3Np dGlvbikpOworICByZXQgPSBjb21wb3NpdG9yXy5BcHBseUNvbXBvc2l0aW9uKHN0ZDo6bW92ZShj b21wb3NpdGlvbikpOwogICBpZiAocmV0KSB7CiAgICAgQUxPR0UoIkZhaWxlZCB0byBhcHBseSB0 aGUgZnJhbWUgY29tcG9zaXRpb24gcmV0PSVkIiwgcmV0KTsKICAgICByZXR1cm4gSFdDMjo6RXJy b3I6OkJhZFBhcmFtZXRlcjsKQEAgLTU5Myw3ICs1OTMsNyBAQCBIV0MyOjpFcnJvciBEcm1Id2NU d286Okh3Y0Rpc3BsYXk6OlNldEFjdGl2ZUNvbmZpZyhod2MyX2NvbmZpZ190IGNvbmZpZykgewog ICAgICAgY29tcG9zaXRvcl8uQ3JlYXRlQ29tcG9zaXRpb24oKTsKICAgY29tcG9zaXRpb24tPklu aXQoZHJtXywgY3J0Y18sIGltcG9ydGVyXy5nZXQoKSwgcGxhbm5lcl8uZ2V0KCksIGZyYW1lX25v Xyk7CiAgIGludCByZXQgPSBjb21wb3NpdGlvbi0+U2V0RGlzcGxheU1vZGUoKm1vZGUpOwotICBy ZXQgPSBjb21wb3NpdG9yXy5RdWV1ZUNvbXBvc2l0aW9uKHN0ZDo6bW92ZShjb21wb3NpdGlvbikp OworICByZXQgPSBjb21wb3NpdG9yXy5BcHBseUNvbXBvc2l0aW9uKHN0ZDo6bW92ZShjb21wb3Np dGlvbikpOwogICBpZiAocmV0KSB7CiAgICAgQUxPR0UoIkZhaWxlZCB0byBxdWV1ZSBkcG1zIGNv bXBvc2l0aW9uIG9uICVkIiwgcmV0KTsKICAgICByZXR1cm4gSFdDMjo6RXJyb3I6OkJhZENvbmZp ZzsKQEAgLTY3Myw3ICs2NzMsNyBAQCBIV0MyOjpFcnJvciBEcm1Id2NUd286Okh3Y0Rpc3BsYXk6 OlNldFBvd2VyTW9kZShpbnQzMl90IG1vZGVfaW4pIHsKICAgICAgIGNvbXBvc2l0b3JfLkNyZWF0 ZUNvbXBvc2l0aW9uKCk7CiAgIGNvbXBvc2l0aW9uLT5Jbml0KGRybV8sIGNydGNfLCBpbXBvcnRl cl8uZ2V0KCksIHBsYW5uZXJfLmdldCgpLCBmcmFtZV9ub18pOwogICBjb21wb3NpdGlvbi0+U2V0 RHBtc01vZGUoZHBtc192YWx1ZSk7Ci0gIGludCByZXQgPSBjb21wb3NpdG9yXy5RdWV1ZUNvbXBv c2l0aW9uKHN0ZDo6bW92ZShjb21wb3NpdGlvbikpOworICBpbnQgcmV0ID0gY29tcG9zaXRvcl8u QXBwbHlDb21wb3NpdGlvbihzdGQ6Om1vdmUoY29tcG9zaXRpb24pKTsKICAgaWYgKHJldCkgewog ICAgIEFMT0dFKCJGYWlsZWQgdG8gYXBwbHkgdGhlIGRwbXMgY29tcG9zaXRpb24gcmV0PSVkIiwg cmV0KTsKICAgICByZXR1cm4gSFdDMjo6RXJyb3I6OkJhZFBhcmFtZXRlcjsKZGlmZiAtLWdpdCBh L2RybXJlc291cmNlcy5jcHAgYi9kcm1yZXNvdXJjZXMuY3BwCmluZGV4IDZiOGVkMDMuLjc2MmY1 ZWYgMTAwNjQ0Ci0tLSBhL2RybXJlc291cmNlcy5jcHAKKysrIGIvZHJtcmVzb3VyY2VzLmNwcApA QCAtMzUsNyArMzUsNyBAQAogCiBuYW1lc3BhY2UgYW5kcm9pZCB7CiAKLURybVJlc291cmNlczo6 RHJtUmVzb3VyY2VzKCkgOiBjb21wb3NpdG9yXyh0aGlzKSwgZXZlbnRfbGlzdGVuZXJfKHRoaXMp IHsKK0RybVJlc291cmNlczo6RHJtUmVzb3VyY2VzKCkgOiBldmVudF9saXN0ZW5lcl8odGhpcykg ewogfQogCiBEcm1SZXNvdXJjZXM6On5Ecm1SZXNvdXJjZXMoKSB7CkBAIC0yMDEsMTAgKzIwMSw2 IEBAIGludCBEcm1SZXNvdXJjZXM6OkluaXQoKSB7CiAgIGlmIChyZXQpCiAgICAgcmV0dXJuIHJl dDsKIAotICByZXQgPSBjb21wb3NpdG9yXy5Jbml0KCk7Ci0gIGlmIChyZXQpCi0gICAgcmV0dXJu IHJldDsKLQogICByZXQgPSBldmVudF9saXN0ZW5lcl8uSW5pdCgpOwogICBpZiAocmV0KSB7CiAg ICAgQUxPR0UoIkNhbid0IGluaXRpYWxpemUgZXZlbnQgbGlzdGVuZXIgJWQiLCByZXQpOwpAQCAt MzMzLDU0ICszMjksNiBAQCBpbnQgRHJtUmVzb3VyY2VzOjpEZXN0cm95UHJvcGVydHlCbG9iKHVp bnQzMl90IGJsb2JfaWQpIHsKICAgcmV0dXJuIDA7CiB9CiAKLWludCBEcm1SZXNvdXJjZXM6OlNl dERpc3BsYXlBY3RpdmVNb2RlKGludCBkaXNwbGF5LCBjb25zdCBEcm1Nb2RlICZtb2RlKSB7Ci0g IHN0ZDo6dW5pcXVlX3B0cjxEcm1Db21wb3NpdGlvbj4gY29tcChjb21wb3NpdG9yXy5DcmVhdGVD b21wb3NpdGlvbihOVUxMKSk7Ci0gIGlmICghY29tcCkgewotICAgIEFMT0dFKCJGYWlsZWQgdG8g Y3JlYXRlIGNvbXBvc2l0aW9uIGZvciBkcG1zIG9uICVkIiwgZGlzcGxheSk7Ci0gICAgcmV0dXJu IC1FTk9NRU07Ci0gIH0KLSAgaW50IHJldCA9IGNvbXAtPlNldERpc3BsYXlNb2RlKGRpc3BsYXks IG1vZGUpOwotICBpZiAocmV0KSB7Ci0gICAgQUxPR0UoIkZhaWxlZCB0byBhZGQgbW9kZSB0byBj b21wb3NpdGlvbiBvbiAlZCAlZCIsIGRpc3BsYXksIHJldCk7Ci0gICAgcmV0dXJuIHJldDsKLSAg fQotICByZXQgPSBjb21wb3NpdG9yXy5RdWV1ZUNvbXBvc2l0aW9uKHN0ZDo6bW92ZShjb21wKSk7 Ci0gIGlmIChyZXQpIHsKLSAgICBBTE9HRSgiRmFpbGVkIHRvIHF1ZXVlIGRwbXMgY29tcG9zaXRp b24gb24gJWQgJWQiLCBkaXNwbGF5LCByZXQpOwotICAgIHJldHVybiByZXQ7Ci0gIH0KLSAgcmV0 dXJuIDA7Ci19Ci0KLWludCBEcm1SZXNvdXJjZXM6OlNldERwbXNNb2RlKGludCBkaXNwbGF5LCB1 aW50NjRfdCBtb2RlKSB7Ci0gIGlmIChtb2RlICE9IERSTV9NT0RFX0RQTVNfT04gJiYgbW9kZSAh PSBEUk1fTU9ERV9EUE1TX09GRikgewotICAgIEFMT0dFKCJJbnZhbGlkIGRwbXMgbW9kZSAlIiBQ Ukl1NjQsIG1vZGUpOwotICAgIHJldHVybiAtRUlOVkFMOwotICB9Ci0KLSAgc3RkOjp1bmlxdWVf cHRyPERybUNvbXBvc2l0aW9uPiBjb21wKGNvbXBvc2l0b3JfLkNyZWF0ZUNvbXBvc2l0aW9uKE5V TEwpKTsKLSAgaWYgKCFjb21wKSB7Ci0gICAgQUxPR0UoIkZhaWxlZCB0byBjcmVhdGUgY29tcG9z aXRpb24gZm9yIGRwbXMgb24gJWQiLCBkaXNwbGF5KTsKLSAgICByZXR1cm4gLUVOT01FTTsKLSAg fQotICBpbnQgcmV0ID0gY29tcC0+U2V0RHBtc01vZGUoZGlzcGxheSwgbW9kZSk7Ci0gIGlmIChy ZXQpIHsKLSAgICBBTE9HRSgiRmFpbGVkIHRvIGFkZCBkcG1zICUiIFBSSXU2NCAiIHRvIGNvbXBv c2l0aW9uIG9uICVkICVkIiwgbW9kZSwKLSAgICAgICAgICBkaXNwbGF5LCByZXQpOwotICAgIHJl dHVybiByZXQ7Ci0gIH0KLSAgcmV0ID0gY29tcG9zaXRvcl8uUXVldWVDb21wb3NpdGlvbihzdGQ6 Om1vdmUoY29tcCkpOwotICBpZiAocmV0KSB7Ci0gICAgQUxPR0UoIkZhaWxlZCB0byBxdWV1ZSBk cG1zIGNvbXBvc2l0aW9uIG9uICVkICVkIiwgZGlzcGxheSwgcmV0KTsKLSAgICByZXR1cm4gcmV0 OwotICB9Ci0gIHJldHVybiAwOwotfQotCi1Ecm1Db21wb3NpdG9yICpEcm1SZXNvdXJjZXM6OmNv bXBvc2l0b3IoKSB7Ci0gIHJldHVybiAmY29tcG9zaXRvcl87Ci19Ci0KIERybUV2ZW50TGlzdGVu ZXIgKkRybVJlc291cmNlczo6ZXZlbnRfbGlzdGVuZXIoKSB7CiAgIHJldHVybiAmZXZlbnRfbGlz dGVuZXJfOwogfQpkaWZmIC0tZ2l0IGEvZHJtcmVzb3VyY2VzLmggYi9kcm1yZXNvdXJjZXMuaApp bmRleCAwMTFmODdlLi5hMmQ4ZDE2IDEwMDY0NAotLS0gYS9kcm1yZXNvdXJjZXMuaAorKysgYi9k cm1yZXNvdXJjZXMuaApAQCAtMTcsNyArMTcsNiBAQAogI2lmbmRlZiBBTkRST0lEX0RSTV9IXwog I2RlZmluZSBBTkRST0lEX0RSTV9IXwogCi0jaW5jbHVkZSAiZHJtY29tcG9zaXRvci5oIgogI2lu Y2x1ZGUgImRybWNvbm5lY3Rvci5oIgogI2luY2x1ZGUgImRybWNydGMuaCIKICNpbmNsdWRlICJk cm1lbmNvZGVyLmgiCkBAIC01OCw3ICs1Nyw2IEBAIGNsYXNzIERybVJlc291cmNlcyB7CiAgIERy bUNvbm5lY3RvciAqR2V0Q29ubmVjdG9yRm9yRGlzcGxheShpbnQgZGlzcGxheSkgY29uc3Q7CiAg IERybUNydGMgKkdldENydGNGb3JEaXNwbGF5KGludCBkaXNwbGF5KSBjb25zdDsKICAgRHJtUGxh bmUgKkdldFBsYW5lKHVpbnQzMl90IGlkKSBjb25zdDsKLSAgRHJtQ29tcG9zaXRvciAqY29tcG9z aXRvcigpOwogICBEcm1FdmVudExpc3RlbmVyICpldmVudF9saXN0ZW5lcigpOwogCiAgIGludCBH ZXRQbGFuZVByb3BlcnR5KGNvbnN0IERybVBsYW5lICZwbGFuZSwgY29uc3QgY2hhciAqcHJvcF9u YW1lLApAQCAtNjksOCArNjcsNiBAQCBjbGFzcyBEcm1SZXNvdXJjZXMgewogICAgICAgICAgICAg ICAgICAgICAgICAgICAgRHJtUHJvcGVydHkgKnByb3BlcnR5KTsKIAogICB1aW50MzJfdCBuZXh0 X21vZGVfaWQoKTsKLSAgaW50IFNldERpc3BsYXlBY3RpdmVNb2RlKGludCBkaXNwbGF5LCBjb25z dCBEcm1Nb2RlICZtb2RlKTsKLSAgaW50IFNldERwbXNNb2RlKGludCBkaXNwbGF5LCB1aW50NjRf dCBtb2RlKTsKIAogICBpbnQgQ3JlYXRlUHJvcGVydHlCbG9iKHZvaWQgKmRhdGEsIHNpemVfdCBs ZW5ndGgsIHVpbnQzMl90ICpibG9iX2lkKTsKICAgaW50IERlc3Ryb3lQcm9wZXJ0eUJsb2IodWlu dDMyX3QgYmxvYl9pZCk7CkBAIC04OSw3ICs4NSw2IEBAIGNsYXNzIERybVJlc291cmNlcyB7CiAg IHN0ZDo6dmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxEcm1FbmNvZGVyPj4gZW5jb2RlcnNfOwogICBz dGQ6OnZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8RHJtQ3J0Yz4+IGNydGNzXzsKICAgc3RkOjp2ZWN0 b3I8c3RkOjp1bmlxdWVfcHRyPERybVBsYW5lPj4gcGxhbmVzXzsKLSAgRHJtQ29tcG9zaXRvciBj b21wb3NpdG9yXzsKICAgRHJtRXZlbnRMaXN0ZW5lciBldmVudF9saXN0ZW5lcl87CiAKICAgc3Rk OjpwYWlyPHVpbnQzMl90LCB1aW50MzJfdD4gbWluX3Jlc29sdXRpb25fOwpkaWZmIC0tZ2l0IGEv Z2x3b3JrZXIuY3BwIGIvZ2x3b3JrZXIuY3BwCmluZGV4IGUxMjk5NWUuLmU5MDU3NmEgMTAwNjQ0 Ci0tLSBhL2dsd29ya2VyLmNwcAorKysgYi9nbHdvcmtlci5jcHAKQEAgLTE0Myw2ICsxNDMsMzgg QEAgc3RhdGljIGJvb2wgSGFzRXh0ZW5zaW9uKGNvbnN0IGNoYXIgKmV4dGVuc2lvbiwgY29uc3Qg Y2hhciAqZXh0ZW5zaW9ucykgewogICByZXR1cm4gZmFsc2U7CiB9CiAKK2ludCBHTFdvcmtlckNv bXBvc2l0b3I6OkJlZ2luQ29udGV4dCgpIHsKKyAgcHJpdmF0ZV8uc2F2ZWRfZWdsX2Rpc3BsYXkg PSBlZ2xHZXRDdXJyZW50RGlzcGxheSgpOworICBwcml2YXRlXy5zYXZlZF9lZ2xfY3R4ID0gZWds R2V0Q3VycmVudENvbnRleHQoKTsKKworICBpZiAocHJpdmF0ZV8uc2F2ZWRfZWdsX2Rpc3BsYXkg IT0gZWdsX2Rpc3BsYXlfIHx8CisgICAgICBwcml2YXRlXy5zYXZlZF9lZ2xfY3R4ICE9IGVnbF9j dHhfKSB7CisgICAgcHJpdmF0ZV8uc2F2ZWRfZWdsX3JlYWQgPSBlZ2xHZXRDdXJyZW50U3VyZmFj ZShFR0xfUkVBRCk7CisgICAgcHJpdmF0ZV8uc2F2ZWRfZWdsX2RyYXcgPSBlZ2xHZXRDdXJyZW50 U3VyZmFjZShFR0xfRFJBVyk7CisgIH0gZWxzZSB7CisgICAgcmV0dXJuIDA7CisgIH0KKworICBp ZiAoIWVnbE1ha2VDdXJyZW50KGVnbF9kaXNwbGF5XywgRUdMX05PX1NVUkZBQ0UsIEVHTF9OT19T VVJGQUNFLCBlZ2xfY3R4XykpIHsKKyAgICBBTE9HRSgiQmVnaW5Db250ZXh0IGZhaWxlZDogJXMi LCBHZXRFR0xFcnJvcigpKTsKKyAgICByZXR1cm4gMTsKKyAgfQorICByZXR1cm4gMDsKK30KKwor aW50IEdMV29ya2VyQ29tcG9zaXRvcjo6RW5kQ29udGV4dCgpIHsKKyAgaWYgKHByaXZhdGVfLnNh dmVkX2VnbF9kaXNwbGF5ICE9IGVnbEdldEN1cnJlbnREaXNwbGF5KCkgfHwKKyAgICAgIHByaXZh dGVfLnNhdmVkX2VnbF9jdHggIT0gZWdsR2V0Q3VycmVudENvbnRleHQoKSkgeworICAgIGlmICgh ZWdsTWFrZUN1cnJlbnQocHJpdmF0ZV8uc2F2ZWRfZWdsX2Rpc3BsYXksIHByaXZhdGVfLnNhdmVk X2VnbF9yZWFkLAorICAgICAgICAgICAgICAgICAgICAgICAgcHJpdmF0ZV8uc2F2ZWRfZWdsX2Ry YXcsIHByaXZhdGVfLnNhdmVkX2VnbF9jdHgpKSB7CisgICAgICBBTE9HRSgiRW5kQ29udGV4dCBm YWlsZWQ6ICVzIiwgR2V0RUdMRXJyb3IoKSk7CisgICAgICByZXR1cm4gMTsKKyAgICB9CisgIH0K KworICByZXR1cm4gMDsKK30KKwogc3RhdGljIEF1dG9HTFNoYWRlciBDb21waWxlQW5kQ2hlY2tT aGFkZXIoR0xlbnVtIHR5cGUsIHVuc2lnbmVkIHNvdXJjZV9jb3VudCwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEdMY2hhciAqKnNvdXJjZXMsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6Om9zdHJpbmdzdHJlYW0g KnNoYWRlcl9sb2cpIHsKQEAgLTUwOCwxMCArNTQwLDkgQEAgaW50IEdMV29ya2VyQ29tcG9zaXRv cjo6SW5pdCgpIHsKICAgICByZXR1cm4gMTsKICAgfQogCi0gIGlmICghZWdsTWFrZUN1cnJlbnQo ZWdsX2Rpc3BsYXlfLCBFR0xfTk9fU1VSRkFDRSwgRUdMX05PX1NVUkZBQ0UsIGVnbF9jdHhfKSkg ewotICAgIEFMT0dFKCJGYWlsZWQgdG8gbWFrZSB0aGUgT3BlbkdMIEVTIENvbnRleHQgY3VycmVu dDogJXMiLCBHZXRFR0xFcnJvcigpKTsKLSAgICByZXR1cm4gMTsKLSAgfQorICByZXQgPSBCZWdp bkNvbnRleHQoKTsKKyAgaWYgKHJldCkKKyAgICByZXR1cm4gcmV0OwogCiAgIGdsX2V4dGVuc2lv bnMgPSAoY29uc3QgY2hhciAqKWdsR2V0U3RyaW5nKEdMX0VYVEVOU0lPTlMpOwogCkBAIC01MzAs NiArNTYxLDkgQEAgaW50IEdMV29ya2VyQ29tcG9zaXRvcjo6SW5pdCgpIHsKIAogICBzdGQ6Om9z dHJpbmdzdHJlYW0gc2hhZGVyX2xvZzsKICAgYmxlbmRfcHJvZ3JhbXNfLmVtcGxhY2VfYmFjayhH ZW5lcmF0ZVByb2dyYW0oMSwgJnNoYWRlcl9sb2cpKTsKKworICBFbmRDb250ZXh0KCk7CisKICAg aWYgKGJsZW5kX3Byb2dyYW1zXy5iYWNrKCkuZ2V0KCkgPT0gMCkgewogICAgIEFMT0dFKCIlcyIs IHNoYWRlcl9sb2cuc3RyKCkuY19zdHIoKSk7CiAgICAgcmV0dXJuIDE7CkBAIC01NTgsMTIgKzU5 MiwxNyBAQCBpbnQgR0xXb3JrZXJDb21wb3NpdG9yOjpDb21wb3NpdGUoRHJtSHdjTGF5ZXIgKmxh eWVycywKICAgICByZXR1cm4gLUVBTFJFQURZOwogICB9CiAKKyAgcmV0ID0gQmVnaW5Db250ZXh0 KCk7CisgIGlmIChyZXQpCisgICAgcmV0dXJuIC0xOworCiAgIEdMaW50IGZyYW1lX3dpZHRoID0g ZnJhbWVidWZmZXItPmdldFdpZHRoKCk7CiAgIEdMaW50IGZyYW1lX2hlaWdodCA9IGZyYW1lYnVm ZmVyLT5nZXRIZWlnaHQoKTsKICAgQ2FjaGVkRnJhbWVidWZmZXIgKmNhY2hlZF9mcmFtZWJ1ZmZl ciA9CiAgICAgICBQcmVwYXJlQW5kQ2FjaGVGcmFtZWJ1ZmZlcihmcmFtZWJ1ZmZlcik7CiAgIGlm IChjYWNoZWRfZnJhbWVidWZmZXIgPT0gTlVMTCkgewogICAgIEFMT0dFKCJDb21wb3NpdGUgZmFp bGVkIGJlY2F1c2Ugb2YgZmFpbGVkIGZyYW1lYnVmZmVyIik7CisgICAgRW5kQ29udGV4dCgpOwog ICAgIHJldHVybiAtRUlOVkFMOwogICB9CiAKQEAgLTU5Nyw4ICs2MzYsMTAgQEAgaW50IEdMV29y a2VyQ29tcG9zaXRvcjo6Q29tcG9zaXRlKERybUh3Y0xheWVyICpsYXllcnMsCiAgICAgfQogICB9 CiAKLSAgaWYgKHJldCkKKyAgaWYgKHJldCkgeworICAgIEVuZENvbnRleHQoKTsKICAgICByZXR1 cm4gcmV0OworICB9CiAKICAgZ2xWaWV3cG9ydCgwLCAwLCBmcmFtZV93aWR0aCwgZnJhbWVfaGVp Z2h0KTsKIApAQCAtNjc2LDYgKzcxNyw3IEBAIGludCBHTFdvcmtlckNvbXBvc2l0b3I6OkNvbXBv c2l0ZShEcm1Id2NMYXllciAqbGF5ZXJzLAogCiAgIGdsQmluZEZyYW1lYnVmZmVyKEdMX0ZSQU1F QlVGRkVSLCAwKTsKIAorICBFbmRDb250ZXh0KCk7CiAgIHJldHVybiByZXQ7CiB9CiAKZGlmZiAt LWdpdCBhL2dsd29ya2VyLmggYi9nbHdvcmtlci5oCmluZGV4IDE1ODQ5MGMuLjI2ZGU1NWQgMTAw NjQ0Ci0tLSBhL2dsd29ya2VyLmgKKysrIGIvZ2x3b3JrZXIuaApAQCAtNjQsNiArNjQsMTYgQEAg Y2xhc3MgR0xXb3JrZXJDb21wb3NpdG9yIHsKICAgICBib29sIFByb21vdGUoKTsKICAgfTsKIAor ICBzdHJ1Y3QgeworICAgIEVHTERpc3BsYXkgc2F2ZWRfZWdsX2Rpc3BsYXkgPSBFR0xfTk9fRElT UExBWTsKKyAgICBFR0xDb250ZXh0IHNhdmVkX2VnbF9jdHggPSBFR0xfTk9fQ09OVEVYVDsKKyAg ICBFR0xTdXJmYWNlIHNhdmVkX2VnbF9yZWFkID0gRUdMX05PX1NVUkZBQ0U7CisgICAgRUdMU3Vy ZmFjZSBzYXZlZF9lZ2xfZHJhdyA9IEVHTF9OT19TVVJGQUNFOworICB9IHByaXZhdGVfOworCisg IGludCBCZWdpbkNvbnRleHQoKTsKKyAgaW50IEVuZENvbnRleHQoKTsKKwogICBDYWNoZWRGcmFt ZWJ1ZmZlciAqRmluZENhY2hlZEZyYW1lYnVmZmVyKAogICAgICAgY29uc3Qgc3A8R3JhcGhpY0J1 ZmZlcj4gJmZyYW1lYnVmZmVyKTsKICAgQ2FjaGVkRnJhbWVidWZmZXIgKlByZXBhcmVBbmRDYWNo ZUZyYW1lYnVmZmVyKAotLSAKMi4xMS4wCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fXwpkcmktZGV2ZWwgbWFpbGluZyBsaXN0CmRyaS1kZXZlbEBsaXN0cy5m cmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0 aW5mby9kcmktZGV2ZWwK