ZGlmZiAtLWdpdCBhL3NyYy9NYWtlX21pbmcubWFrIGIvc3JjL01ha2VfbWluZy5tYWsKaW5kZXggOWU2NmMwNS4uYWE1Y2YwMCAxMDA2NDQKLS0tIGEvc3JjL01ha2VfbWluZy5tYWsKKysrIGIvc3JjL01ha2VfbWluZy5tYWsKQEAgLTg3LDcgKzg3LDcgQEAKIAogIyBJZiB5b3UgYXJlIHVzaW5nIGdldHRleHQtMC4xMC4zNSBmcm9tIGh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcHJvamVjdHMvZ2V0dGV4dAogIyBvciBnZXR0ZXh0LTAuMTAuMzcgZnJvbSBodHRwOi8vc291cmNlZm9yZ2UubmV0L3Byb2plY3RzL21pbmd3cmVwLwotIyB1bmNvbW1lbnQgdGhlIGZvbGxvd2luZywgYnV0IEkgY2FuJ3QgYnVpbGQgYSBzdGF0aWMgdmVyc2nzbiB3aXRoIHRoZW0sID8tKHwKKyMgdW5jb21tZW50IHRoZSBmb2xsb3dpbmcsIGJ1dCBJIGNhbid0IGJ1aWxkIGEgc3RhdGljIHZlcnNpb24gd2l0aCB0aGVtLCA/LSh8CiAjR0VUVEVYVD1jOi9nZXR0ZXh0LTAuMTAuMzctMjAwMTA0MzAKICNTVEFUSUNfR0VUVEVYVD1VU0VfU1RBVElDX0dFVFRFWFQKICNEWU5BTUlDX0dFVFRFWFQ9RFlOQU1JQ19HRVRURVhUCmRpZmYgLS1naXQgYS9zcmMvb3NfbXN3aW4uYyBiL3NyYy9vc19tc3dpbi5jCmluZGV4IDFhNmNjYjUuLjFjMTM0OGEgMTAwNjQ0Ci0tLSBhL3NyYy9vc19tc3dpbi5jCisrKyBiL3NyYy9vc19tc3dpbi5jCkBAIC0xMTA1LDEzMiArMTEwNSw2IEBACiAgICAgcmV0dXJuIHJldDsKIH0KIAotI2lmIGRlZmluZWQoRkVBVF9NQllURSkgfHwgZGVmaW5lZChQUk9UTykKLS8qCi0gKiBOb3RlOiB0aGUgZm9sbG93aW5nIHR3byBmdW5jdGlvbnMgYXJlIG9ubHkgZ3VhcmFudGVlZCB0byB3b3JrIHdoZW4gdXNpbmcKLSAqIHZhbGlkIE1TLVdpbmRvd3MgY29kZXBhZ2VzIG9yIHdoZW4gaWNvbnYoKSBpcyBhdmFpbGFibGUuCi0gKi8KLQotLyoKLSAqIENvbnZlcnQgInN0ciIgZnJvbSAnZW5jb2RpbmcnIHRvIFVURi0xNi4KLSAqIElucHV0IGluICJzdHIiIHdpdGggbGVuZ3RoICIqbGVucCIuICBXaGVuICJsZW5wIiBpcyBOVUxMLCB1c2Ugc3RybGVuKCkuCi0gKiBPdXRwdXQgaXMgcmV0dXJuZWQgYXMgYW4gYWxsb2NhdGVkIHN0cmluZy4gICIqbGVucCIgaXMgc2V0IHRvIHRoZSBsZW5ndGggb2YKLSAqIHRoZSByZXN1bHQuICBBIHRyYWlsaW5nIE5VTCBpcyBhbHdheXMgYWRkZWQuCi0gKiBSZXR1cm5zIE5VTEwgd2hlbiBvdXQgb2YgbWVtb3J5LgotICovCi0gICAgc2hvcnRfdSAqCi1lbmNfdG9fdXRmMTYoY2hhcl91ICpzdHIsIGludCAqbGVucCkKLXsKLSAgICB2aW1jb252X1QJY29udjsKLSAgICBXQ0hBUgkqcmV0OwotICAgIGNoYXJfdQkqYWxsb2NidWYgPSBOVUxMOwotICAgIGludAkJbGVuX2xvYzsKLSAgICBpbnQJCWxlbmd0aDsKLQotICAgIGlmIChsZW5wID09IE5VTEwpCi0gICAgewotCWxlbl9sb2MgPSAoaW50KVNUUkxFTihzdHIpICsgMTsKLQlsZW5wID0gJmxlbl9sb2M7Ci0gICAgfQotCi0gICAgaWYgKGVuY19jb2RlcGFnZSA+IDApCi0gICAgewotCS8qIFdlIGNhbiBkbyBhbnkgQ1AjIyMgLT4gVVRGLTE2IGluIG9uZSBwYXNzLCBhbmQgd2UgY2FuIGRvIGl0Ci0JICogd2l0aG91dCBpY29udigpIChjb252ZXJ0XyogbWF5IG5lZWQgaWNvbnYpLiAqLwotCU11bHRpQnl0ZVRvV2lkZUNoYXJfYWxsb2MoZW5jX2NvZGVwYWdlLCAwLCBzdHIsICpsZW5wLCAmcmV0LCAmbGVuZ3RoKTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLQkvKiBVc2UgImxhdGluMSIgYnkgZGVmYXVsdCwgd2UgbWlnaHQgYmUgY2FsbGVkIGJlZm9yZSB3ZSBoYXZlIHBfZW5jCi0JICogc2V0IHVwLiAgQ29udmVydCB0byB1dGYtOCBmaXJzdCwgd29ya3MgYmV0dGVyIHdpdGggaWNvbnYoKS4gIERvZXMKLQkgKiBub3RoaW5nIGlmICdlbmNvZGluZycgaXMgInV0Zi04Ii4gKi8KLQljb252LnZjX3R5cGUgPSBDT05WX05PTkU7Ci0JaWYgKGNvbnZlcnRfc2V0dXAoJmNvbnYsIHBfZW5jID8gcF9lbmMgOiAoY2hhcl91ICopImxhdGluMSIsCi0JCQkJCQkgICAoY2hhcl91ICopInV0Zi04IikgPT0gRkFJTCkKLQkgICAgcmV0dXJuIE5VTEw7Ci0JaWYgKGNvbnYudmNfdHlwZSAhPSBDT05WX05PTkUpCi0JewotCSAgICBzdHIgPSBhbGxvY2J1ZiA9IHN0cmluZ19jb252ZXJ0KCZjb252LCBzdHIsIGxlbnApOwotCSAgICBpZiAoc3RyID09IE5VTEwpCi0JCXJldHVybiBOVUxMOwotCX0KLQljb252ZXJ0X3NldHVwKCZjb252LCBOVUxMLCBOVUxMKTsKLQotCWxlbmd0aCA9IHV0ZjhfdG9fdXRmMTYoc3RyLCAqbGVucCwgTlVMTCwgTlVMTCk7Ci0JcmV0ID0gKFdDSEFSICopYWxsb2MoKHVuc2lnbmVkKSgobGVuZ3RoICsgMSkgKiBzaXplb2YoV0NIQVIpKSk7Ci0JaWYgKHJldCAhPSBOVUxMKQotCXsKLQkgICAgdXRmOF90b191dGYxNihzdHIsICpsZW5wLCAoc2hvcnRfdSAqKXJldCwgTlVMTCk7Ci0JICAgIHJldFtsZW5ndGhdID0gMDsKLQl9Ci0KLQl2aW1fZnJlZShhbGxvY2J1Zik7Ci0gICAgfQotCi0gICAgKmxlbnAgPSBsZW5ndGg7Ci0gICAgcmV0dXJuIChzaG9ydF91ICopcmV0OwotfQotCi0vKgotICogQ29udmVydCBhbiBVVEYtMTYgc3RyaW5nIHRvICdlbmNvZGluZycuCi0gKiBJbnB1dCBpbiAic3RyIiB3aXRoIGxlbmd0aCAoY291bnRlZCBpbiB3aWRlIGNoYXJhY3RlcnMpICIqbGVucCIuICBXaGVuCi0gKiAibGVucCIgaXMgTlVMTCwgdXNlIHdjc2xlbigpLgotICogT3V0cHV0IGlzIHJldHVybmVkIGFzIGFuIGFsbG9jYXRlZCBzdHJpbmcuICBJZiAiKmxlbnAiIGlzIG5vdCBOVUxMIGl0IGlzCi0gKiBzZXQgdG8gdGhlIGxlbmd0aCBvZiB0aGUgcmVzdWx0LgotICogUmV0dXJucyBOVUxMIHdoZW4gb3V0IG9mIG1lbW9yeS4KLSAqLwotICAgIGNoYXJfdSAqCi11dGYxNl90b19lbmMoc2hvcnRfdSAqc3RyLCBpbnQgKmxlbnApCi17Ci0gICAgdmltY29udl9UCWNvbnY7Ci0gICAgY2hhcl91CSp1dGY4X3N0ciA9IE5VTEwsICplbmNfc3RyID0gTlVMTDsKLSAgICBpbnQJCWxlbl9sb2M7Ci0KLSAgICBpZiAobGVucCA9PSBOVUxMKQotICAgIHsKLQlsZW5fbG9jID0gKGludCl3Y3NsZW4oc3RyKSArIDE7Ci0JbGVucCA9ICZsZW5fbG9jOwotICAgIH0KLQotICAgIGlmIChlbmNfY29kZXBhZ2UgPiAwKQotICAgIHsKLQkvKiBXZSBjYW4gZG8gYW55IFVURi0xNiAtPiBDUCMjIyBpbiBvbmUgcGFzcy4gKi8KLQlpbnQgbGVuZ3RoOwotCi0JV2lkZUNoYXJUb011bHRpQnl0ZV9hbGxvYyhlbmNfY29kZXBhZ2UsIDAsIHN0ciwgKmxlbnAsCi0JCQkJCSAgICAoTFBTVFIgKikmZW5jX3N0ciwgJmxlbmd0aCwgMCwgMCk7Ci0JKmxlbnAgPSBsZW5ndGg7Ci0JcmV0dXJuIGVuY19zdHI7Ci0gICAgfQotCi0gICAgLyogQXZvaWQgYWxsb2NhdGluZyB6ZXJvIGJ5dGVzLCBpdCBnZW5lcmF0ZXMgYW4gZXJyb3IgbWVzc2FnZS4gKi8KLSAgICB1dGY4X3N0ciA9IGFsbG9jKHV0ZjE2X3RvX3V0Zjgoc3RyLCAqbGVucCA9PSAwID8gMSA6ICpsZW5wLCBOVUxMKSk7Ci0gICAgaWYgKHV0Zjhfc3RyICE9IE5VTEwpCi0gICAgewotCSpsZW5wID0gdXRmMTZfdG9fdXRmOChzdHIsICpsZW5wLCB1dGY4X3N0cik7Ci0KLQkvKiBXZSBtaWdodCBiZSBjYWxsZWQgYmVmb3JlIHdlIGhhdmUgcF9lbmMgc2V0IHVwLiAqLwotCWNvbnYudmNfdHlwZSA9IENPTlZfTk9ORTsKLQljb252ZXJ0X3NldHVwKCZjb252LCAoY2hhcl91ICopInV0Zi04IiwKLQkJCQkJICAgIHBfZW5jPyBwX2VuYzogKGNoYXJfdSAqKSJsYXRpbjEiKTsKLQlpZiAoY29udi52Y190eXBlID09IENPTlZfTk9ORSkKLQl7Ci0JICAgIC8qIHBfZW5jIGlzIHV0Zi04LCBzbyB3ZSdyZSBkb25lLiAqLwotCSAgICBlbmNfc3RyID0gdXRmOF9zdHI7Ci0JfQotCWVsc2UKLQl7Ci0JICAgIGVuY19zdHIgPSBzdHJpbmdfY29udmVydCgmY29udiwgdXRmOF9zdHIsIGxlbnApOwotCSAgICB2aW1fZnJlZSh1dGY4X3N0cik7Ci0JfQotCi0JY29udmVydF9zZXR1cCgmY29udiwgTlVMTCwgTlVMTCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIGVuY19zdHI7Ci19Ci0jZW5kaWYgLyogRkVBVF9NQllURSAqLwotCiAvKgogICogV2FpdCBmb3IgYW5vdGhlciBwcm9jZXNzIHRvIENsb3NlIHRoZSBDbGlwYm9hcmQuCiAgKiBSZXR1cm5zIFRSVUUgZm9yIHN1Y2Nlc3MuCkBAIC0xNDM2LDMyICsxMzEwLDYgQEAKICNlbmRpZgogfQogCi0jaWYgKGRlZmluZWQoRkVBVF9NQllURSkgJiYgZGVmaW5lZChXSU4zMjY0KSkgfHwgZGVmaW5lZChQUk9UTykKLS8qCi0gKiBDb252ZXJ0IGZyb20gdGhlIGFjdGl2ZSBjb2RlcGFnZSB0byAnZW5jb2RpbmcnLgotICogSW5wdXQgaXMgInN0cltzdHJfc2l6ZV0iLgotICogVGhlIHJlc3VsdCBpcyBpbiBhbGxvY2F0ZWQgbWVtb3J5OiAib3V0W291dGxlbl0iLiAgV2l0aCB0ZXJtaW5hdGluZyBOVUwuCi0gKi8KLSAgICB2b2lkCi1hY3BfdG9fZW5jKHN0ciwgc3RyX3NpemUsIG91dCwgb3V0bGVuKQotICAgIGNoYXJfdQkqc3RyOwotICAgIGludAkJc3RyX3NpemU7Ci0gICAgY2hhcl91CSoqb3V0OwotICAgIGludAkJKm91dGxlbjsKLQotewotICAgIExQV1NUUgl3aWRlc3RyOwotCi0gICAgTXVsdGlCeXRlVG9XaWRlQ2hhcl9hbGxvYyhHZXRBQ1AoKSwgMCwgc3RyLCBzdHJfc2l6ZSwgJndpZGVzdHIsIG91dGxlbik7Ci0gICAgaWYgKHdpZGVzdHIgIT0gTlVMTCkKLSAgICB7Ci0JKysqb3V0bGVuOwkvKiBJbmNsdWRlIHRoZSAwIGFmdGVyIHRoZSBzdHJpbmcgKi8KLQkqb3V0ID0gdXRmMTZfdG9fZW5jKChzaG9ydF91ICopd2lkZXN0ciwgb3V0bGVuKTsKLQl2aW1fZnJlZSh3aWRlc3RyKTsKLSAgICB9Ci19Ci0jZW5kaWYKLQogLyoKICAqIFNlbmQgdGhlIGN1cnJlbnQgc2VsZWN0aW9uIHRvIHRoZSBjbGlwYm9hcmQuCiAgKi8KQEAgLTE2MjYsNiArMTQ3NCwxNTggQEAKIAogI2VuZGlmIC8qIEZFQVRfQ0xJUEJPQVJEICovCiAKKyNpZiBkZWZpbmVkKEZFQVRfTUJZVEUpIHx8IGRlZmluZWQoUFJPVE8pCisvKgorICogTm90ZTogdGhlIGZvbGxvd2luZyB0d28gZnVuY3Rpb25zIGFyZSBvbmx5IGd1YXJhbnRlZWQgdG8gd29yayB3aGVuIHVzaW5nCisgKiB2YWxpZCBNUy1XaW5kb3dzIGNvZGVwYWdlcyBvciB3aGVuIGljb252KCkgaXMgYXZhaWxhYmxlLgorICovCisKKy8qCisgKiBDb252ZXJ0ICJzdHIiIGZyb20gJ2VuY29kaW5nJyB0byBVVEYtMTYuCisgKiBJbnB1dCBpbiAic3RyIiB3aXRoIGxlbmd0aCAiKmxlbnAiLiAgV2hlbiAibGVucCIgaXMgTlVMTCwgdXNlIHN0cmxlbigpLgorICogT3V0cHV0IGlzIHJldHVybmVkIGFzIGFuIGFsbG9jYXRlZCBzdHJpbmcuICAiKmxlbnAiIGlzIHNldCB0byB0aGUgbGVuZ3RoIG9mCisgKiB0aGUgcmVzdWx0LiAgQSB0cmFpbGluZyBOVUwgaXMgYWx3YXlzIGFkZGVkLgorICogUmV0dXJucyBOVUxMIHdoZW4gb3V0IG9mIG1lbW9yeS4KKyAqLworICAgIHNob3J0X3UgKgorZW5jX3RvX3V0ZjE2KGNoYXJfdSAqc3RyLCBpbnQgKmxlbnApCit7CisgICAgdmltY29udl9UCWNvbnY7CisgICAgV0NIQVIJKnJldDsKKyAgICBjaGFyX3UJKmFsbG9jYnVmID0gTlVMTDsKKyAgICBpbnQJCWxlbl9sb2M7CisgICAgaW50CQlsZW5ndGg7CisKKyAgICBpZiAobGVucCA9PSBOVUxMKQorICAgIHsKKwlsZW5fbG9jID0gKGludClTVFJMRU4oc3RyKSArIDE7CisJbGVucCA9ICZsZW5fbG9jOworICAgIH0KKworICAgIGlmIChlbmNfY29kZXBhZ2UgPiAwKQorICAgIHsKKwkvKiBXZSBjYW4gZG8gYW55IENQIyMjIC0+IFVURi0xNiBpbiBvbmUgcGFzcywgYW5kIHdlIGNhbiBkbyBpdAorCSAqIHdpdGhvdXQgaWNvbnYoKSAoY29udmVydF8qIG1heSBuZWVkIGljb252KS4gKi8KKwlNdWx0aUJ5dGVUb1dpZGVDaGFyX2FsbG9jKGVuY19jb2RlcGFnZSwgMCwgc3RyLCAqbGVucCwgJnJldCwgJmxlbmd0aCk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisJLyogVXNlICJsYXRpbjEiIGJ5IGRlZmF1bHQsIHdlIG1pZ2h0IGJlIGNhbGxlZCBiZWZvcmUgd2UgaGF2ZSBwX2VuYworCSAqIHNldCB1cC4gIENvbnZlcnQgdG8gdXRmLTggZmlyc3QsIHdvcmtzIGJldHRlciB3aXRoIGljb252KCkuICBEb2VzCisJICogbm90aGluZyBpZiAnZW5jb2RpbmcnIGlzICJ1dGYtOCIuICovCisJY29udi52Y190eXBlID0gQ09OVl9OT05FOworCWlmIChjb252ZXJ0X3NldHVwKCZjb252LCBwX2VuYyA/IHBfZW5jIDogKGNoYXJfdSAqKSJsYXRpbjEiLAorCQkJCQkJICAgKGNoYXJfdSAqKSJ1dGYtOCIpID09IEZBSUwpCisJICAgIHJldHVybiBOVUxMOworCWlmIChjb252LnZjX3R5cGUgIT0gQ09OVl9OT05FKQorCXsKKwkgICAgc3RyID0gYWxsb2NidWYgPSBzdHJpbmdfY29udmVydCgmY29udiwgc3RyLCBsZW5wKTsKKwkgICAgaWYgKHN0ciA9PSBOVUxMKQorCQlyZXR1cm4gTlVMTDsKKwl9CisJY29udmVydF9zZXR1cCgmY29udiwgTlVMTCwgTlVMTCk7CisKKwlsZW5ndGggPSB1dGY4X3RvX3V0ZjE2KHN0ciwgKmxlbnAsIE5VTEwsIE5VTEwpOworCXJldCA9IChXQ0hBUiAqKWFsbG9jKCh1bnNpZ25lZCkoKGxlbmd0aCArIDEpICogc2l6ZW9mKFdDSEFSKSkpOworCWlmIChyZXQgIT0gTlVMTCkKKwl7CisJICAgIHV0ZjhfdG9fdXRmMTYoc3RyLCAqbGVucCwgKHNob3J0X3UgKilyZXQsIE5VTEwpOworCSAgICByZXRbbGVuZ3RoXSA9IDA7CisJfQorCisJdmltX2ZyZWUoYWxsb2NidWYpOworICAgIH0KKworICAgICpsZW5wID0gbGVuZ3RoOworICAgIHJldHVybiAoc2hvcnRfdSAqKXJldDsKK30KKworLyoKKyAqIENvbnZlcnQgYW4gVVRGLTE2IHN0cmluZyB0byAnZW5jb2RpbmcnLgorICogSW5wdXQgaW4gInN0ciIgd2l0aCBsZW5ndGggKGNvdW50ZWQgaW4gd2lkZSBjaGFyYWN0ZXJzKSAiKmxlbnAiLiAgV2hlbgorICogImxlbnAiIGlzIE5VTEwsIHVzZSB3Y3NsZW4oKS4KKyAqIE91dHB1dCBpcyByZXR1cm5lZCBhcyBhbiBhbGxvY2F0ZWQgc3RyaW5nLiAgSWYgIipsZW5wIiBpcyBub3QgTlVMTCBpdCBpcworICogc2V0IHRvIHRoZSBsZW5ndGggb2YgdGhlIHJlc3VsdC4KKyAqIFJldHVybnMgTlVMTCB3aGVuIG91dCBvZiBtZW1vcnkuCisgKi8KKyAgICBjaGFyX3UgKgordXRmMTZfdG9fZW5jKHNob3J0X3UgKnN0ciwgaW50ICpsZW5wKQoreworICAgIHZpbWNvbnZfVAljb252OworICAgIGNoYXJfdQkqdXRmOF9zdHIgPSBOVUxMLCAqZW5jX3N0ciA9IE5VTEw7CisgICAgaW50CQlsZW5fbG9jOworCisgICAgaWYgKGxlbnAgPT0gTlVMTCkKKyAgICB7CisJbGVuX2xvYyA9IChpbnQpd2NzbGVuKHN0cikgKyAxOworCWxlbnAgPSAmbGVuX2xvYzsKKyAgICB9CisKKyAgICBpZiAoZW5jX2NvZGVwYWdlID4gMCkKKyAgICB7CisJLyogV2UgY2FuIGRvIGFueSBVVEYtMTYgLT4gQ1AjIyMgaW4gb25lIHBhc3MuICovCisJaW50IGxlbmd0aDsKKworCVdpZGVDaGFyVG9NdWx0aUJ5dGVfYWxsb2MoZW5jX2NvZGVwYWdlLCAwLCBzdHIsICpsZW5wLAorCQkJCQkgICAgKExQU1RSICopJmVuY19zdHIsICZsZW5ndGgsIDAsIDApOworCSpsZW5wID0gbGVuZ3RoOworCXJldHVybiBlbmNfc3RyOworICAgIH0KKworICAgIC8qIEF2b2lkIGFsbG9jYXRpbmcgemVybyBieXRlcywgaXQgZ2VuZXJhdGVzIGFuIGVycm9yIG1lc3NhZ2UuICovCisgICAgdXRmOF9zdHIgPSBhbGxvYyh1dGYxNl90b191dGY4KHN0ciwgKmxlbnAgPT0gMCA/IDEgOiAqbGVucCwgTlVMTCkpOworICAgIGlmICh1dGY4X3N0ciAhPSBOVUxMKQorICAgIHsKKwkqbGVucCA9IHV0ZjE2X3RvX3V0Zjgoc3RyLCAqbGVucCwgdXRmOF9zdHIpOworCisJLyogV2UgbWlnaHQgYmUgY2FsbGVkIGJlZm9yZSB3ZSBoYXZlIHBfZW5jIHNldCB1cC4gKi8KKwljb252LnZjX3R5cGUgPSBDT05WX05PTkU7CisJY29udmVydF9zZXR1cCgmY29udiwgKGNoYXJfdSAqKSJ1dGYtOCIsCisJCQkJCSAgICBwX2VuYz8gcF9lbmM6IChjaGFyX3UgKikibGF0aW4xIik7CisJaWYgKGNvbnYudmNfdHlwZSA9PSBDT05WX05PTkUpCisJeworCSAgICAvKiBwX2VuYyBpcyB1dGYtOCwgc28gd2UncmUgZG9uZS4gKi8KKwkgICAgZW5jX3N0ciA9IHV0Zjhfc3RyOworCX0KKwllbHNlCisJeworCSAgICBlbmNfc3RyID0gc3RyaW5nX2NvbnZlcnQoJmNvbnYsIHV0Zjhfc3RyLCBsZW5wKTsKKwkgICAgdmltX2ZyZWUodXRmOF9zdHIpOworCX0KKworCWNvbnZlcnRfc2V0dXAoJmNvbnYsIE5VTEwsIE5VTEwpOworICAgIH0KKworICAgIHJldHVybiBlbmNfc3RyOworfQorI2VuZGlmIC8qIEZFQVRfTUJZVEUgKi8KKworI2lmIChkZWZpbmVkKEZFQVRfTUJZVEUpICYmIGRlZmluZWQoV0lOMzI2NCkpIHx8IGRlZmluZWQoUFJPVE8pCisvKgorICogQ29udmVydCBmcm9tIHRoZSBhY3RpdmUgY29kZXBhZ2UgdG8gJ2VuY29kaW5nJy4KKyAqIElucHV0IGlzICJzdHJbc3RyX3NpemVdIi4KKyAqIFRoZSByZXN1bHQgaXMgaW4gYWxsb2NhdGVkIG1lbW9yeTogIm91dFtvdXRsZW5dIi4gIFdpdGggdGVybWluYXRpbmcgTlVMLgorICovCisgICAgdm9pZAorYWNwX3RvX2VuYyhzdHIsIHN0cl9zaXplLCBvdXQsIG91dGxlbikKKyAgICBjaGFyX3UJKnN0cjsKKyAgICBpbnQJCXN0cl9zaXplOworICAgIGNoYXJfdQkqKm91dDsKKyAgICBpbnQJCSpvdXRsZW47CisKK3sKKyAgICBMUFdTVFIJd2lkZXN0cjsKKworICAgIE11bHRpQnl0ZVRvV2lkZUNoYXJfYWxsb2MoR2V0QUNQKCksIDAsIHN0ciwgc3RyX3NpemUsICZ3aWRlc3RyLCBvdXRsZW4pOworICAgIGlmICh3aWRlc3RyICE9IE5VTEwpCisgICAgeworCSsrKm91dGxlbjsJLyogSW5jbHVkZSB0aGUgMCBhZnRlciB0aGUgc3RyaW5nICovCisJKm91dCA9IHV0ZjE2X3RvX2VuYygoc2hvcnRfdSAqKXdpZGVzdHIsIG91dGxlbik7CisJdmltX2ZyZWUod2lkZXN0cik7CisgICAgfQorfQorI2VuZGlmCisKIAogLyoKICAqIERlYnVnZ2luZyBoZWxwZXI6IGV4cG9zZSB0aGUgTUNIX1dSSVRFX0RVTVAgc3R1ZmYgdG8gb3RoZXIgbW9kdWxlcwpkaWZmIC0tZ2l0IGEvc3JjL3ZlcnNpb24uYyBiL3NyYy92ZXJzaW9uLmMKaW5kZXggMGJkOTFkZS4uYjZmMTk2NSAxMDA2NDQKLS0tIGEvc3JjL3ZlcnNpb24uYworKysgYi9zcmMvdmVyc2lvbi5jCkBAIC03MTAsNiArNzEwLDggQEAKIHN0YXRpYyBpbnQgaW5jbHVkZWRfcGF0Y2hlc1tdID0KIHsgICAvKiBBZGQgbmV3IHBhdGNoIG51bWJlciBiZWxvdyB0aGlzIGxpbmUgKi8KIC8qKi8KKyAgICAyMjMsCisvKiovCiAgICAgMjIyLAogLyoqLwogICAgIDIyMSwK