From mboxrd@z Thu Jan 1 00:00:00 1970 From: Wei Liu Subject: [PATCH 25/29] xl: split out miscellaneous functions Date: Fri, 24 Feb 2017 16:13:10 +0000 Message-ID: <20170224161314.22154-26-wei.liu2@citrix.com> References: <20170224161314.22154-1-wei.liu2@citrix.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail6.bemta5.messagelabs.com ([195.245.231.135]) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1chIXw-0006b6-8H for xen-devel@lists.xenproject.org; Fri, 24 Feb 2017 16:16:40 +0000 In-Reply-To: <20170224161314.22154-1-wei.liu2@citrix.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" To: Xen-devel Cc: Wei Liu , Ian Jackson List-Id: xen-devel@lists.xenproject.org QSBjb2xsZWN0aW9ucyBvZiBmdW5jdGlvbnMgdGhhdCBkb24ndCB3YXJyYW50IHRoZWlyIG93biBm aWxlcy4KCk1vdmluZyBtYWluX2RldmQgdGhlcmUgcmVxdWlyZXMgbGlmdGluZyBkb19kYWVtb25p emUgdG8geGxfdXRpbHMuYy4KClNpZ25lZC1vZmYtYnk6IFdlaSBMaXUgPHdlaS5saXUyQGNpdHJp eC5jb20+Ci0tLQogdG9vbHMveGwvTWFrZWZpbGUgICAgIHwgICAyICstCiB0b29scy94bC94bF9j bWRpbXBsLmMgfCAzOTAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0KIHRvb2xzL3hsL3hsX21pc2MuYyAgICB8IDM1NSArKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysKIHRvb2xzL3hsL3hsX3V0aWxzLmMgICB8ICA3MCAr KysrKysrKysKIHRvb2xzL3hsL3hsX3V0aWxzLmggICB8ICAgMSArCiA1IGZpbGVzIGNoYW5nZWQs IDQyNyBpbnNlcnRpb25zKCspLCAzOTEgZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQg dG9vbHMveGwveGxfbWlzYy5jCgpkaWZmIC0tZ2l0IGEvdG9vbHMveGwvTWFrZWZpbGUgYi90b29s cy94bC9NYWtlZmlsZQppbmRleCBiNDllMmNkY2FiLi4zZTgzNjFiMTIxIDEwMDY0NAotLS0gYS90 b29scy94bC9NYWtlZmlsZQorKysgYi90b29scy94bC9NYWtlZmlsZQpAQCAtMTksNyArMTksNyBA QCBYTF9PQkpTID0geGwubyB4bF9jbWRpbXBsLm8geGxfY21kdGFibGUubyB4bF9zeHAubyB4bF91 dGlscy5vCiBYTF9PQkpTICs9IHhsX3RtZW0ubyB4bF9wYXJzZS5vIHhsX2NwdXBvb2wubyB4bF9m bGFzay5vCiBYTF9PQkpTICs9IHhsX3Z0cG0ubyB4bF9ibG9jay5vIHhsX25pYy5vIHhsX3VzYi5v CiBYTF9PQkpTICs9IHhsX3NjaGVkLm8geGxfcGNpLm8geGxfdmNwdS5vIHhsX2NkLm8geGxfbWVt Lm8KLVhMX09CSlMgKz0geGxfcHNyLm8geGxfaW5mby5vIHhsX2NvbnNvbGUubworWExfT0JKUyAr PSB4bF9wc3IubyB4bF9pbmZvLm8geGxfY29uc29sZS5vIHhsX21pc2MubwogCiAkKFhMX09CSlMp OiBDRkxBR1MgKz0gJChDRkxBR1NfbGlieGVudG9vbGxvZykKICQoWExfT0JKUyk6IENGTEFHUyAr PSAkKENGTEFHU19YTCkKZGlmZiAtLWdpdCBhL3Rvb2xzL3hsL3hsX2NtZGltcGwuYyBiL3Rvb2xz L3hsL3hsX2NtZGltcGwuYwppbmRleCBkMzJlN2ZlNmYxLi43ODUxZmMwM2Q0IDEwMDY0NAotLS0g YS90b29scy94bC94bF9jbWRpbXBsLmMKKysrIGIvdG9vbHMveGwveGxfY21kaW1wbC5jCkBAIC0y MjIsNzQgKzIyMiw2IEBAIHJlbGVhc2VfbG9jazoKICAgICByZXR1cm4gcmM7CiB9CiAKLXN0YXRp YyBpbnQgZG9fZGFlbW9uaXplKGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnBpZGZpbGUpCi17Ci0g ICAgY2hhciAqZnVsbG5hbWU7Ci0gICAgcGlkX3QgY2hpbGQxOwotICAgIGludCBudWxsZmQsIHJl dCA9IDA7Ci0KLSAgICBjaGlsZDEgPSB4bF9mb3JrKGNoaWxkX3dhaXRkYWVtb24sICJkb21haW4g bW9uaXRvcmluZyBkYWVtb25pemluZyBjaGlsZCIpOwotICAgIGlmIChjaGlsZDEpIHsKLSAgICAg ICAgcmV0ID0gY2hpbGRfcmVwb3J0KGNoaWxkX3dhaXRkYWVtb24pOwotICAgICAgICBpZiAocmV0 KSBnb3RvIG91dDsKLSAgICAgICAgcmV0ID0gMTsKLSAgICAgICAgZ290byBvdXQ7Ci0gICAgfQot Ci0gICAgcG9zdGZvcmsoKTsKLQotICAgIHJldCA9IGxpYnhsX2NyZWF0ZV9sb2dmaWxlKGN0eCwg bmFtZSwgJmZ1bGxuYW1lKTsKLSAgICBpZiAocmV0KSB7Ci0gICAgICAgIExPRygiZmFpbGVkIHRv IG9wZW4gbG9nZmlsZSAlczogJXMiLGZ1bGxuYW1lLHN0cmVycm9yKGVycm5vKSk7Ci0gICAgICAg IGV4aXQoLTEpOwotICAgIH0KLQotICAgIENIS19TWVNDQUxMKGxvZ2ZpbGUgPSBvcGVuKGZ1bGxu YW1lLCBPX1dST05MWXxPX0NSRUFUfE9fQVBQRU5ELCAwNjQ0KSk7Ci0gICAgZnJlZShmdWxsbmFt ZSk7Ci0gICAgYXNzZXJ0KGxvZ2ZpbGUgPj0gMyk7Ci0KLSAgICBDSEtfU1lTQ0FMTChudWxsZmQg PSBvcGVuKCIvZGV2L251bGwiLCBPX1JET05MWSkpOwotICAgIGFzc2VydChudWxsZmQgPj0gMyk7 Ci0KLSAgICBkdXAyKG51bGxmZCwgMCk7Ci0gICAgZHVwMihsb2dmaWxlLCAxKTsKLSAgICBkdXAy KGxvZ2ZpbGUsIDIpOwotCi0gICAgY2xvc2UobnVsbGZkKTsKLQotICAgIENIS19TWVNDQUxMKGRh ZW1vbigwLCAxKSk7Ci0KLSAgICBpZiAocGlkZmlsZSkgewotICAgICAgICBpbnQgZmQgPSBvcGVu KHBpZGZpbGUsIE9fUkRXUiB8IE9fQ1JFQVQsIFNfSVJVU1J8U19JV1VTUik7Ci0gICAgICAgIGNo YXIgKnBpZCA9IE5VTEw7Ci0KLSAgICAgICAgaWYgKGZkID09IC0xKSB7Ci0gICAgICAgICAgICBw ZXJyb3IoIlVuYWJsZSB0byBvcGVuIHBpZGZpbGUiKTsKLSAgICAgICAgICAgIGV4aXQoMSk7Ci0g ICAgICAgIH0KLQotICAgICAgICBpZiAoYXNwcmludGYoJnBpZCwgIiVsZFxuIiwgKGxvbmcpZ2V0 cGlkKCkpID09IC0xKSB7Ci0gICAgICAgICAgICBwZXJyb3IoIkZvcm1hdHRpbmcgcGlkIik7Ci0g ICAgICAgICAgICBleGl0KDEpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHdyaXRlKGZkLCBw aWQsIHN0cmxlbihwaWQpKSA8IDApIHsKLSAgICAgICAgICAgIHBlcnJvcigiV3JpdGluZyBwaWQi KTsKLSAgICAgICAgICAgIGV4aXQoMSk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoY2xvc2Uo ZmQpIDwgMCkgewotICAgICAgICAgICAgcGVycm9yKCJDbG9zaW5nIHBpZGZpbGUiKTsKLSAgICAg ICAgICAgIGV4aXQoMSk7Ci0gICAgICAgIH0KLQotICAgICAgICBmcmVlKHBpZCk7Ci0gICAgfQot Ci1vdXQ6Ci0gICAgcmV0dXJuIHJldDsKLX0KLQogc3RhdGljIHZvaWQgcmVsb2FkX2RvbWFpbl9j b25maWcodWludDMyX3QgZG9taWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBs aWJ4bF9kb21haW5fY29uZmlnICpkX2NvbmZpZykKIHsKQEAgLTExOTIsMTQgKzExMjQsNiBAQCBz dGF0aWMgdm9pZCByZWJvb3RfZG9tYWluKHVpbnQzMl90IGRvbWlkLCBsaWJ4bF9ldmdlbl9kb21h aW5fZGVhdGggKipkZWF0aHcsCiAgICAgfQogfQogCi1zdGF0aWMgdm9pZCBjb3JlX2R1bXBfZG9t YWluKHVpbnQzMl90IGRvbWlkLCBjb25zdCBjaGFyICpmaWxlbmFtZSkKLXsKLSAgICBpbnQgcmM7 Ci0KLSAgICByYz1saWJ4bF9kb21haW5fY29yZV9kdW1wKGN0eCwgZG9taWQsIGZpbGVuYW1lLCBO VUxMKTsKLSAgICBpZiAocmMpIHsgZnByaW50ZihzdGRlcnIsImNvcmUgZHVtcCBmYWlsZWQgKHJj PSVkKVxuIixyYyk7ZXhpdChFWElUX0ZBSUxVUkUpOyB9Ci19Ci0KICNpZm5kZWYgTElCWExfSEFW RV9OT19TVVNQRU5EX1JFU1VNRQogc3RhdGljIHZvaWQgc2F2ZV9kb21haW5fY29yZV9iZWdpbih1 aW50MzJfdCBkb21pZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg Y2hhciAqb3ZlcnJpZGVfY29uZmlnX2ZpbGUsCkBAIC0xOTkxLDE4ICsxOTE1LDYgQEAgaW50IG1h aW5fbWlncmF0ZShpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiB9CiAjZW5kaWYKIAotaW50IG1haW5f ZHVtcF9jb3JlKGludCBhcmdjLCBjaGFyICoqYXJndikKLXsKLSAgICBpbnQgb3B0OwotCi0gICAg U1dJVENIX0ZPUkVBQ0hfT1BUKG9wdCwgIiIsIE5VTEwsICJkdW1wLWNvcmUiLCAyKSB7Ci0gICAg ICAgIC8qIE5vIG9wdGlvbnMgKi8KLSAgICB9Ci0KLSAgICBjb3JlX2R1bXBfZG9tYWluKHhmaW5k X2RvbWFpbihhcmd2W29wdGluZF0pLCBhcmd2W29wdGluZCArIDFdKTsKLSAgICByZXR1cm4gRVhJ VF9TVUNDRVNTOwotfQotCiBpbnQgbWFpbl9wYXVzZShpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiB7 CiAgICAgaW50IG9wdDsKQEAgLTIyMjAsMjQ2ICsyMTMyLDYgQEAgaW50IG1haW5fY3JlYXRlKGlu dCBhcmdjLCBjaGFyICoqYXJndikKICAgICByZXR1cm4gMDsKIH0KIAotZXh0ZXJuIHZvaWQgcHJp bnRmX2luZm8oZW51bSBvdXRwdXRfZm9ybWF0IG91dHB1dF9mb3JtYXQsCi0gICAgICAgICAgICAg ICAgICAgICAgICBpbnQgZG9taWQsCi0gICAgICAgICAgICAgICAgICAgICAgICBsaWJ4bF9kb21h aW5fY29uZmlnICpkX2NvbmZpZywgRklMRSAqZmgpOwotaW50IG1haW5fY29uZmlnX3VwZGF0ZShp bnQgYXJnYywgY2hhciAqKmFyZ3YpCi17Ci0gICAgdWludDMyX3QgZG9taWQ7Ci0gICAgY29uc3Qg Y2hhciAqZmlsZW5hbWUgPSBOVUxMOwotICAgIGNoYXIgKmV4dHJhX2NvbmZpZyA9IE5VTEw7Ci0g ICAgdm9pZCAqY29uZmlnX2RhdGEgPSAwOwotICAgIGludCBjb25maWdfbGVuID0gMDsKLSAgICBs aWJ4bF9kb21haW5fY29uZmlnIGRfY29uZmlnOwotICAgIGludCBvcHQsIHJjOwotICAgIGludCBk ZWJ1ZyA9IDA7Ci0gICAgc3RhdGljIHN0cnVjdCBvcHRpb24gb3B0c1tdID0gewotICAgICAgICB7 ImRlZmNvbmZpZyIsIDEsIDAsICdmJ30sCi0gICAgICAgIENPTU1PTl9MT05HX09QVFMKLSAgICB9 OwotCi0gICAgaWYgKGFyZ2MgPCAyKSB7Ci0gICAgICAgIGZwcmludGYoc3RkZXJyLCAieGwgY29u ZmlnLXVwZGF0ZSByZXF1aXJlcyBhIGRvbWFpbiBhcmd1bWVudFxuIik7Ci0gICAgICAgIGhlbHAo ImNvbmZpZy11cGRhdGUiKTsKLSAgICAgICAgZXhpdCgxKTsKLSAgICB9Ci0KLSAgICBmcHJpbnRm KHN0ZGVyciwgIldBUk5JTkc6IHhsIG5vdyBoYXMgYmV0dGVyIGNhcGFiaWxpdHkgdG8gbWFuYWdl IGRvbWFpbiBjb25maWd1cmF0aW9uLCAiCi0gICAgICAgICAgICAiYXZvaWQgdXNpbmcgdGhpcyBj b21tYW5kIHdoZW4gcG9zc2libGVcbiIpOwotCi0gICAgZG9taWQgPSB4ZmluZF9kb21haW4oYXJn dlsxXSk7Ci0gICAgYXJnYy0tOyBhcmd2Kys7Ci0KLSAgICBpZiAoYXJndlsxXSAmJiBhcmd2WzFd WzBdICE9ICctJyAmJiAhc3RyY2hyKGFyZ3ZbMV0sICc9JykpIHsKLSAgICAgICAgZmlsZW5hbWUg PSBhcmd2WzFdOwotICAgICAgICBhcmdjLS07IGFyZ3YrKzsKLSAgICB9Ci0KLSAgICBTV0lUQ0hf Rk9SRUFDSF9PUFQob3B0LCAiZHFmOiIsIG9wdHMsICJjb25maWdfdXBkYXRlIiwgMCkgewotICAg IGNhc2UgJ2QnOgotICAgICAgICBkZWJ1ZyA9IDE7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2Ug J2YnOgotICAgICAgICBmaWxlbmFtZSA9IG9wdGFyZzsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQot Ci0gICAgZm9yICg7IG9wdGluZCA8IGFyZ2M7IG9wdGluZCsrKSB7Ci0gICAgICAgIGlmIChzdHJj aHIoYXJndltvcHRpbmRdLCAnPScpICE9IE5VTEwpIHsKLSAgICAgICAgICAgIHhzdHJpbmdfcmVh bGxvY19hcHBlbmQoJmV4dHJhX2NvbmZpZywgYXJndltvcHRpbmRdKTsKLSAgICAgICAgICAgIHhz dHJpbmdfcmVhbGxvY19hcHBlbmQoJmV4dHJhX2NvbmZpZywgIlxuIik7Ci0gICAgICAgIH0gZWxz ZSBpZiAoIWZpbGVuYW1lKSB7Ci0gICAgICAgICAgICBmaWxlbmFtZSA9IGFyZ3Zbb3B0aW5kXTsK LSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGhlbHAoImNyZWF0ZSIpOwotICAgICAgICAg ICAgZnJlZShleHRyYV9jb25maWcpOwotICAgICAgICAgICAgcmV0dXJuIDI7Ci0gICAgICAgIH0K LSAgICB9Ci0gICAgaWYgKGZpbGVuYW1lKSB7Ci0gICAgICAgIGZyZWUoY29uZmlnX2RhdGEpOyAg Y29uZmlnX2RhdGEgPSAwOwotICAgICAgICByYyA9IGxpYnhsX3JlYWRfZmlsZV9jb250ZW50cyhj dHgsIGZpbGVuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmY29u ZmlnX2RhdGEsICZjb25maWdfbGVuKTsKLSAgICAgICAgaWYgKHJjKSB7IGZwcmludGYoc3RkZXJy LCAiRmFpbGVkIHRvIHJlYWQgY29uZmlnIGZpbGU6ICVzOiAlc1xuIiwKLSAgICAgICAgICAgICAg ICAgICAgICAgICAgIGZpbGVuYW1lLCBzdHJlcnJvcihlcnJubykpOwotICAgICAgICAgICAgICAg ICAgZnJlZShleHRyYV9jb25maWcpOyByZXR1cm4gRVJST1JfRkFJTDsgfQotICAgICAgICBpZiAo ZXh0cmFfY29uZmlnICYmIHN0cmxlbihleHRyYV9jb25maWcpKSB7Ci0gICAgICAgICAgICBpZiAo Y29uZmlnX2xlbiA+IElOVF9NQVggLSAoc3RybGVuKGV4dHJhX2NvbmZpZykgKyAyICsgMSkpIHsK LSAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkZhaWxlZCB0byBhdHRhY2ggZXh0cmEg Y29uZmlndXJhdGlvblxuIik7Ci0gICAgICAgICAgICAgICAgZXhpdCgxKTsKLSAgICAgICAgICAg IH0KLSAgICAgICAgICAgIC8qIGFsbG9jYXRlIHNwYWNlIGZvciB0aGUgZXh0cmEgY29uZmlnIHBs dXMgdHdvIEVPTHMgcGx1cyBcMCAqLwotICAgICAgICAgICAgY29uZmlnX2RhdGEgPSByZWFsbG9j KGNvbmZpZ19kYXRhLCBjb25maWdfbGVuCi0gICAgICAgICAgICAgICAgKyBzdHJsZW4oZXh0cmFf Y29uZmlnKSArIDIgKyAxKTsKLSAgICAgICAgICAgIGlmICghY29uZmlnX2RhdGEpIHsKLSAgICAg ICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkZhaWxlZCB0byByZWFsbG9jIGNvbmZpZ19kYXRh XG4iKTsKLSAgICAgICAgICAgICAgICBleGl0KDEpOwotICAgICAgICAgICAgfQotICAgICAgICAg ICAgY29uZmlnX2xlbiArPSBzcHJpbnRmKGNvbmZpZ19kYXRhICsgY29uZmlnX2xlbiwgIlxuJXNc biIsCi0gICAgICAgICAgICAgICAgZXh0cmFfY29uZmlnKTsKLSAgICAgICAgfQotICAgIH0gZWxz ZSB7Ci0gICAgICAgIGZwcmludGYoc3RkZXJyLCAiQ29uZmlnIGZpbGUgbm90IHNwZWNpZmllZFxu Iik7Ci0gICAgICAgIGV4aXQoMSk7Ci0gICAgfQotCi0gICAgbGlieGxfZG9tYWluX2NvbmZpZ19p bml0KCZkX2NvbmZpZyk7Ci0KLSAgICBwYXJzZV9jb25maWdfZGF0YShmaWxlbmFtZSwgY29uZmln X2RhdGEsIGNvbmZpZ19sZW4sICZkX2NvbmZpZyk7Ci0KLSAgICBpZiAoZGVidWcgfHwgZHJ5cnVu X29ubHkpCi0gICAgICAgIHByaW50Zl9pbmZvKGRlZmF1bHRfb3V0cHV0X2Zvcm1hdCwgLTEsICZk X2NvbmZpZywgc3Rkb3V0KTsKLQotICAgIGlmICghZHJ5cnVuX29ubHkpIHsKLSAgICAgICAgZnBy aW50ZihzdGRlcnIsICJzZXR0aW5nIGRvbSV1IGNvbmZpZ3VyYXRpb25cbiIsIGRvbWlkKTsKLSAg ICAgICAgcmMgPSBsaWJ4bF91c2VyZGF0YV9zdG9yZShjdHgsIGRvbWlkLCAieGwiLAotICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maWdfZGF0YSwgY29uZmlnX2xlbik7Ci0g ICAgICAgIGlmIChyYykgewotICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJmYWlsZWQgdG8g dXBkYXRlIGNvbmZpZ3VyYXRpb25cbiIpOwotICAgICAgICAgICAgZXhpdCgxKTsKLSAgICAgICAg fQotICAgIH0KLQotICAgIGxpYnhsX2RvbWFpbl9jb25maWdfZGlzcG9zZSgmZF9jb25maWcpOwot Ci0gICAgZnJlZShjb25maWdfZGF0YSk7Ci0gICAgZnJlZShleHRyYV9jb25maWcpOwotICAgIHJl dHVybiAwOwotfQotCi1zdGF0aWMgdm9pZCBidXR0b25fcHJlc3ModWludDMyX3QgZG9taWQsIGNv bnN0IGNoYXIgKmIpCi17Ci0gICAgbGlieGxfdHJpZ2dlciB0cmlnZ2VyOwotCi0gICAgaWYgKCFz dHJjbXAoYiwgInBvd2VyIikpIHsKLSAgICAgICAgdHJpZ2dlciA9IExJQlhMX1RSSUdHRVJfUE9X RVI7Ci0gICAgfSBlbHNlIGlmICghc3RyY21wKGIsICJzbGVlcCIpKSB7Ci0gICAgICAgIHRyaWdn ZXIgPSBMSUJYTF9UUklHR0VSX1NMRUVQOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGZwcmludGYo c3RkZXJyLCAiJXMgaXMgYW4gaW52YWxpZCBidXR0b24gaWRlbnRpZmllclxuIiwgYik7Ci0gICAg ICAgIGV4aXQoRVhJVF9GQUlMVVJFKTsKLSAgICB9Ci0KLSAgICBsaWJ4bF9zZW5kX3RyaWdnZXIo Y3R4LCBkb21pZCwgdHJpZ2dlciwgMCk7Ci19Ci0KLWludCBtYWluX2J1dHRvbl9wcmVzcyhpbnQg YXJnYywgY2hhciAqKmFyZ3YpCi17Ci0gICAgaW50IG9wdDsKLQotICAgIGZwcmludGYoc3RkZXJy LCAiV0FSTklORzogXCJidXR0b24tcHJlc3NcIiBpcyBkZXByZWNhdGVkLiAiCi0gICAgICAgICAg ICAiUGxlYXNlIHVzZSBcInRyaWdnZXJcIlxuIik7Ci0KLQotICAgIFNXSVRDSF9GT1JFQUNIX09Q VChvcHQsICIiLCBOVUxMLCAiYnV0dG9uLXByZXNzIiwgMikgewotICAgICAgICAvKiBObyBvcHRp b25zICovCi0gICAgfQotCi0gICAgYnV0dG9uX3ByZXNzKHhmaW5kX2RvbWFpbihhcmd2W29wdGlu ZF0pLCBhcmd2W29wdGluZCArIDFdKTsKLQotICAgIHJldHVybiAwOwotfQotCi1pbnQgbWFpbl9y ZW5hbWUoaW50IGFyZ2MsIGNoYXIgKiphcmd2KQotewotICAgIHVpbnQzMl90IGRvbWlkOwotICAg IGludCBvcHQ7Ci0gICAgY29uc3QgY2hhciAqZG9tLCAqbmV3X25hbWU7Ci0KLSAgICBTV0lUQ0hf Rk9SRUFDSF9PUFQob3B0LCAiIiwgTlVMTCwgInJlbmFtZSIsIDIpIHsKLSAgICAgICAgLyogTm8g b3B0aW9ucyAqLwotICAgIH0KLQotICAgIGRvbSA9IGFyZ3Zbb3B0aW5kKytdOwotICAgIG5ld19u YW1lID0gYXJndltvcHRpbmRdOwotCi0gICAgZG9taWQgPSB4ZmluZF9kb21haW4oZG9tKTsKLSAg ICBpZiAobGlieGxfZG9tYWluX3JlbmFtZShjdHgsIGRvbWlkLCBjb21tb25fZG9tbmFtZSwgbmV3 X25hbWUpKSB7Ci0gICAgICAgIGZwcmludGYoc3RkZXJyLCAiQ2FuJ3QgcmVuYW1lIGRvbWFpbiAn JXMnLlxuIiwgZG9tKTsKLSAgICAgICAgcmV0dXJuIDE7Ci0gICAgfQotCi0gICAgcmV0dXJuIDA7 Ci19Ci0KLWludCBtYWluX3RyaWdnZXIoaW50IGFyZ2MsIGNoYXIgKiphcmd2KQotewotICAgIHVp bnQzMl90IGRvbWlkOwotICAgIGludCBvcHQ7Ci0gICAgY2hhciAqZW5kcHRyID0gTlVMTDsKLSAg ICBpbnQgdmNwdWlkID0gMDsKLSAgICBjb25zdCBjaGFyICp0cmlnZ2VyX25hbWUgPSBOVUxMOwot ICAgIGxpYnhsX3RyaWdnZXIgdHJpZ2dlcjsKLQotICAgIFNXSVRDSF9GT1JFQUNIX09QVChvcHQs ICIiLCBOVUxMLCAidHJpZ2dlciIsIDIpIHsKLSAgICAgICAgLyogTm8gb3B0aW9ucyAqLwotICAg IH0KLQotICAgIGRvbWlkID0geGZpbmRfZG9tYWluKGFyZ3Zbb3B0aW5kKytdKTsKLQotICAgIHRy aWdnZXJfbmFtZSA9IGFyZ3Zbb3B0aW5kKytdOwotICAgIGlmIChsaWJ4bF90cmlnZ2VyX2Zyb21f c3RyaW5nKHRyaWdnZXJfbmFtZSwgJnRyaWdnZXIpKSB7Ci0gICAgICAgIGZwcmludGYoc3RkZXJy LCAiSW52YWxpZCB0cmlnZ2VyIFwiJXNcIlxuIiwgdHJpZ2dlcl9uYW1lKTsKLSAgICAgICAgcmV0 dXJuIEVYSVRfRkFJTFVSRTsKLSAgICB9Ci0KLSAgICBpZiAoYXJndltvcHRpbmRdKSB7Ci0gICAg ICAgIHZjcHVpZCA9IHN0cnRvbChhcmd2W29wdGluZF0sICZlbmRwdHIsIDEwKTsKLSAgICAgICAg aWYgKHZjcHVpZCA9PSAwICYmICFzdHJjbXAoZW5kcHRyLCBhcmd2W29wdGluZF0pKSB7Ci0gICAg ICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkludmFsaWQgdmNwdWlkLCB1c2luZyBkZWZhdWx0IHZj cHVpZD0wLlxuXG4iKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGxpYnhsX3NlbmRfdHJpZ2dl cihjdHgsIGRvbWlkLCB0cmlnZ2VyLCB2Y3B1aWQpOwotCi0gICAgcmV0dXJuIEVYSVRfU1VDQ0VT UzsKLX0KLQotCi1pbnQgbWFpbl9zeXNycShpbnQgYXJnYywgY2hhciAqKmFyZ3YpCi17Ci0gICAg dWludDMyX3QgZG9taWQ7Ci0gICAgaW50IG9wdDsKLSAgICBjb25zdCBjaGFyICpzeXNycSA9IE5V TEw7Ci0KLSAgICBTV0lUQ0hfRk9SRUFDSF9PUFQob3B0LCAiIiwgTlVMTCwgInN5c3JxIiwgMikg ewotICAgICAgICAvKiBObyBvcHRpb25zICovCi0gICAgfQotCi0gICAgZG9taWQgPSB4ZmluZF9k b21haW4oYXJndltvcHRpbmQrK10pOwotCi0gICAgc3lzcnEgPSBhcmd2W29wdGluZF07Ci0KLSAg ICBpZiAoc3lzcnFbMV0gIT0gJ1wwJykgewotICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkludmFs aWQgc3lzcnEuXG5cbiIpOwotICAgICAgICBoZWxwKCJzeXNycSIpOwotICAgICAgICByZXR1cm4g RVhJVF9GQUlMVVJFOwotICAgIH0KLQotICAgIGxpYnhsX3NlbmRfc3lzcnEoY3R4LCBkb21pZCwg c3lzcnFbMF0pOwotCi0gICAgcmV0dXJuIEVYSVRfU1VDQ0VTUzsKLX0KLQotaW50IG1haW5fZGVi dWdfa2V5cyhpbnQgYXJnYywgY2hhciAqKmFyZ3YpCi17Ci0gICAgaW50IG9wdDsKLSAgICBjaGFy ICprZXlzOwotCi0gICAgU1dJVENIX0ZPUkVBQ0hfT1BUKG9wdCwgIiIsIE5VTEwsICJkZWJ1Zy1r ZXlzIiwgMSkgewotICAgICAgICAvKiBObyBvcHRpb25zICovCi0gICAgfQotCi0gICAga2V5cyA9 IGFyZ3Zbb3B0aW5kXTsKLQotICAgIGlmIChsaWJ4bF9zZW5kX2RlYnVnX2tleXMoY3R4LCBrZXlz KSkgewotICAgICAgICBmcHJpbnRmKHN0ZGVyciwgImNhbm5vdCBzZW5kIGRlYnVnIGtleXM6ICVz XG4iLCBrZXlzKTsKLSAgICAgICAgcmV0dXJuIEVYSVRfRkFJTFVSRTsKLSAgICB9Ci0KLSAgICBy ZXR1cm4gRVhJVF9TVUNDRVNTOwotfQotCiAjaWZuZGVmIExJQlhMX0hBVkVfTk9fU1VTUEVORF9S RVNVTUUKIGludCBtYWluX3JlbXVzKGludCBhcmdjLCBjaGFyICoqYXJndikKIHsKQEAgLTI2MTEs NjggKzIyODMsNiBAQCBpbnQgbWFpbl9yZW11cyhpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiB9CiAj ZW5kaWYKIAotaW50IG1haW5fZGV2ZChpbnQgYXJnYywgY2hhciAqKmFyZ3YpCi17Ci0gICAgaW50 IHJldCA9IDAsIG9wdCA9IDAsIGRhZW1vbml6ZSA9IDE7Ci0gICAgY29uc3QgY2hhciAqcGlkZmls ZSA9IE5VTEw7Ci0gICAgc3RhdGljIGNvbnN0IHN0cnVjdCBvcHRpb24gb3B0c1tdID0gewotICAg ICAgICB7InBpZGZpbGUiLCAxLCAwLCAncCd9LAotICAgICAgICBDT01NT05fTE9OR19PUFRTLAot ICAgICAgICB7MCwgMCwgMCwgMH0KLSAgICB9OwotCi0gICAgU1dJVENIX0ZPUkVBQ0hfT1BUKG9w dCwgIkZwOiIsIG9wdHMsICJkZXZkIiwgMCkgewotICAgIGNhc2UgJ0YnOgotICAgICAgICBkYWVt b25pemUgPSAwOwotICAgICAgICBicmVhazsKLSAgICBjYXNlICdwJzoKLSAgICAgICAgcGlkZmls ZSA9IG9wdGFyZzsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgaWYgKGRhZW1vbml6ZSkg ewotICAgICAgICByZXQgPSBkb19kYWVtb25pemUoInhsZGV2ZCIsIHBpZGZpbGUpOwotICAgICAg ICBpZiAocmV0KSB7Ci0gICAgICAgICAgICByZXQgPSAocmV0ID09IDEpID8gMCA6IHJldDsKLSAg ICAgICAgICAgIGdvdG8gb3V0OwotICAgICAgICB9Ci0gICAgfQotCi0gICAgbGlieGxfZGV2aWNl X2V2ZW50c19oYW5kbGVyKGN0eCwgMCk7Ci0KLW91dDoKLSAgICByZXR1cm4gcmV0OwotfQotCi1p bnQgbWFpbl9xZW11X21vbml0b3JfY29tbWFuZChpbnQgYXJnYywgY2hhciAqKmFyZ3YpCi17Ci0g ICAgaW50IG9wdDsKLSAgICB1aW50MzJfdCBkb21pZDsKLSAgICBjaGFyICpjbWQ7Ci0gICAgY2hh ciAqb3V0cHV0OwotICAgIGludCByZXQ7Ci0KLSAgICBTV0lUQ0hfRk9SRUFDSF9PUFQob3B0LCAi IiwgTlVMTCwgInFlbXUtbW9uaXRvci1jb21tYW5kIiwgMikgewotICAgICAgICAvKiBObyBvcHRp b25zICovCi0gICAgfQotCi0gICAgZG9taWQgPSB4ZmluZF9kb21haW4oYXJndltvcHRpbmRdKTsK LSAgICBjbWQgPSBhcmd2W29wdGluZCArIDFdOwotCi0gICAgaWYgKGFyZ2MgLSBvcHRpbmQgPiAy KSB7Ci0gICAgICAgIGZwcmludGYoc3RkZXJyLCAiSW52YWxpZCBhcmd1bWVudHMuXG4iKTsKLSAg ICAgICAgcmV0dXJuIEVYSVRfRkFJTFVSRTsKLSAgICB9Ci0KLSAgICByZXQgPSBsaWJ4bF9xZW11 X21vbml0b3JfY29tbWFuZChjdHgsIGRvbWlkLCBjbWQsICZvdXRwdXQpOwotICAgIGlmICghcmV0 ICYmIG91dHB1dCkgewotICAgICAgICBwcmludGYoIiVzXG4iLCBvdXRwdXQpOwotICAgICAgICBm cmVlKG91dHB1dCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIHJldCA/IEVYSVRfRkFJTFVSRSA6IEVY SVRfU1VDQ0VTUzsKLX0KLQogLyoKICAqIExvY2FsIHZhcmlhYmxlczoKICAqIG1vZGU6IEMKZGlm ZiAtLWdpdCBhL3Rvb2xzL3hsL3hsX21pc2MuYyBiL3Rvb2xzL3hsL3hsX21pc2MuYwpuZXcgZmls ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwLi4wYmYzMzdkOGY3Ci0tLSAvZGV2L251bGwK KysrIGIvdG9vbHMveGwveGxfbWlzYy5jCkBAIC0wLDAgKzEsMzU1IEBACisvKgorICogQ29weXJp Z2h0IDIwMDktMjAxNyBDaXRyaXggTHRkIGFuZCBvdGhlciBjb250cmlidXRvcnMKKyAqCisgKiBU aGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k L29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVy YWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkCisgKiBieSB0aGUgRnJlZSBTb2Z0d2FyZSBG b3VuZGF0aW9uOyB2ZXJzaW9uIDIuMSBvbmx5LiB3aXRoIHRoZSBzcGVjaWFsCisgKiBleGNlcHRp b24gb24gbGlua2luZyBkZXNjcmliZWQgaW4gZmlsZSBMSUNFTlNFLgorICoKKyAqIFRoaXMgcHJv Z3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAor ICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy cmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg UFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm b3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpbmNsdWRlIDxsaW1pdHMuaD4KKyNpbmNsdWRlIDxz dGRsaWIuaD4KKworI2luY2x1ZGUgPGxpYnhsLmg+CisjaW5jbHVkZSA8bGlieGxfdXRpbHMuaD4K KyNpbmNsdWRlIDxsaWJ4bHV0aWwuaD4KKworI2luY2x1ZGUgInhsLmgiCisjaW5jbHVkZSAieGxf dXRpbHMuaCIKKyNpbmNsdWRlICJ4bF9wYXJzZS5oIgorCitleHRlcm4gY29uc3QgY2hhciAqY29t bW9uX2RvbW5hbWU7CisKK3N0YXRpYyB2b2lkIGJ1dHRvbl9wcmVzcyh1aW50MzJfdCBkb21pZCwg Y29uc3QgY2hhciAqYikKK3sKKyAgICBsaWJ4bF90cmlnZ2VyIHRyaWdnZXI7CisKKyAgICBpZiAo IXN0cmNtcChiLCAicG93ZXIiKSkgeworICAgICAgICB0cmlnZ2VyID0gTElCWExfVFJJR0dFUl9Q T1dFUjsKKyAgICB9IGVsc2UgaWYgKCFzdHJjbXAoYiwgInNsZWVwIikpIHsKKyAgICAgICAgdHJp Z2dlciA9IExJQlhMX1RSSUdHRVJfU0xFRVA7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZnByaW50 ZihzdGRlcnIsICIlcyBpcyBhbiBpbnZhbGlkIGJ1dHRvbiBpZGVudGlmaWVyXG4iLCBiKTsKKyAg ICAgICAgZXhpdChFWElUX0ZBSUxVUkUpOworICAgIH0KKworICAgIGxpYnhsX3NlbmRfdHJpZ2dl cihjdHgsIGRvbWlkLCB0cmlnZ2VyLCAwKTsKK30KKworaW50IG1haW5fYnV0dG9uX3ByZXNzKGlu dCBhcmdjLCBjaGFyICoqYXJndikKK3sKKyAgICBpbnQgb3B0OworCisgICAgZnByaW50ZihzdGRl cnIsICJXQVJOSU5HOiBcImJ1dHRvbi1wcmVzc1wiIGlzIGRlcHJlY2F0ZWQuICIKKyAgICAgICAg ICAgICJQbGVhc2UgdXNlIFwidHJpZ2dlclwiXG4iKTsKKworCisgICAgU1dJVENIX0ZPUkVBQ0hf T1BUKG9wdCwgIiIsIE5VTEwsICJidXR0b24tcHJlc3MiLCAyKSB7CisgICAgICAgIC8qIE5vIG9w dGlvbnMgKi8KKyAgICB9CisKKyAgICBidXR0b25fcHJlc3MoeGZpbmRfZG9tYWluKGFyZ3Zbb3B0 aW5kXSksIGFyZ3Zbb3B0aW5kICsgMV0pOworCisgICAgcmV0dXJuIDA7Cit9CisKK2ludCBtYWlu X3JlbmFtZShpbnQgYXJnYywgY2hhciAqKmFyZ3YpCit7CisgICAgdWludDMyX3QgZG9taWQ7Cisg ICAgaW50IG9wdDsKKyAgICBjb25zdCBjaGFyICpkb20sICpuZXdfbmFtZTsKKworICAgIFNXSVRD SF9GT1JFQUNIX09QVChvcHQsICIiLCBOVUxMLCAicmVuYW1lIiwgMikgeworICAgICAgICAvKiBO byBvcHRpb25zICovCisgICAgfQorCisgICAgZG9tID0gYXJndltvcHRpbmQrK107CisgICAgbmV3 X25hbWUgPSBhcmd2W29wdGluZF07CisKKyAgICBkb21pZCA9IHhmaW5kX2RvbWFpbihkb20pOwor ICAgIGlmIChsaWJ4bF9kb21haW5fcmVuYW1lKGN0eCwgZG9taWQsIGNvbW1vbl9kb21uYW1lLCBu ZXdfbmFtZSkpIHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJDYW4ndCByZW5hbWUgZG9tYWlu ICclcycuXG4iLCBkb20pOworICAgICAgICByZXR1cm4gMTsKKyAgICB9CisKKyAgICByZXR1cm4g MDsKK30KKworaW50IG1haW5fdHJpZ2dlcihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCit7CisgICAg dWludDMyX3QgZG9taWQ7CisgICAgaW50IG9wdDsKKyAgICBjaGFyICplbmRwdHIgPSBOVUxMOwor ICAgIGludCB2Y3B1aWQgPSAwOworICAgIGNvbnN0IGNoYXIgKnRyaWdnZXJfbmFtZSA9IE5VTEw7 CisgICAgbGlieGxfdHJpZ2dlciB0cmlnZ2VyOworCisgICAgU1dJVENIX0ZPUkVBQ0hfT1BUKG9w dCwgIiIsIE5VTEwsICJ0cmlnZ2VyIiwgMikgeworICAgICAgICAvKiBObyBvcHRpb25zICovCisg ICAgfQorCisgICAgZG9taWQgPSB4ZmluZF9kb21haW4oYXJndltvcHRpbmQrK10pOworCisgICAg dHJpZ2dlcl9uYW1lID0gYXJndltvcHRpbmQrK107CisgICAgaWYgKGxpYnhsX3RyaWdnZXJfZnJv bV9zdHJpbmcodHJpZ2dlcl9uYW1lLCAmdHJpZ2dlcikpIHsKKyAgICAgICAgZnByaW50ZihzdGRl cnIsICJJbnZhbGlkIHRyaWdnZXIgXCIlc1wiXG4iLCB0cmlnZ2VyX25hbWUpOworICAgICAgICBy ZXR1cm4gRVhJVF9GQUlMVVJFOworICAgIH0KKworICAgIGlmIChhcmd2W29wdGluZF0pIHsKKyAg ICAgICAgdmNwdWlkID0gc3RydG9sKGFyZ3Zbb3B0aW5kXSwgJmVuZHB0ciwgMTApOworICAgICAg ICBpZiAodmNwdWlkID09IDAgJiYgIXN0cmNtcChlbmRwdHIsIGFyZ3Zbb3B0aW5kXSkpIHsKKyAg ICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiSW52YWxpZCB2Y3B1aWQsIHVzaW5nIGRlZmF1bHQg dmNwdWlkPTAuXG5cbiIpOworICAgICAgICB9CisgICAgfQorCisgICAgbGlieGxfc2VuZF90cmln Z2VyKGN0eCwgZG9taWQsIHRyaWdnZXIsIHZjcHVpZCk7CisKKyAgICByZXR1cm4gRVhJVF9TVUND RVNTOworfQorCitpbnQgbWFpbl9zeXNycShpbnQgYXJnYywgY2hhciAqKmFyZ3YpCit7CisgICAg dWludDMyX3QgZG9taWQ7CisgICAgaW50IG9wdDsKKyAgICBjb25zdCBjaGFyICpzeXNycSA9IE5V TEw7CisKKyAgICBTV0lUQ0hfRk9SRUFDSF9PUFQob3B0LCAiIiwgTlVMTCwgInN5c3JxIiwgMikg eworICAgICAgICAvKiBObyBvcHRpb25zICovCisgICAgfQorCisgICAgZG9taWQgPSB4ZmluZF9k b21haW4oYXJndltvcHRpbmQrK10pOworCisgICAgc3lzcnEgPSBhcmd2W29wdGluZF07CisKKyAg ICBpZiAoc3lzcnFbMV0gIT0gJ1wwJykgeworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkludmFs aWQgc3lzcnEuXG5cbiIpOworICAgICAgICBoZWxwKCJzeXNycSIpOworICAgICAgICByZXR1cm4g RVhJVF9GQUlMVVJFOworICAgIH0KKworICAgIGxpYnhsX3NlbmRfc3lzcnEoY3R4LCBkb21pZCwg c3lzcnFbMF0pOworCisgICAgcmV0dXJuIEVYSVRfU1VDQ0VTUzsKK30KKworaW50IG1haW5fZGVi dWdfa2V5cyhpbnQgYXJnYywgY2hhciAqKmFyZ3YpCit7CisgICAgaW50IG9wdDsKKyAgICBjaGFy ICprZXlzOworCisgICAgU1dJVENIX0ZPUkVBQ0hfT1BUKG9wdCwgIiIsIE5VTEwsICJkZWJ1Zy1r ZXlzIiwgMSkgeworICAgICAgICAvKiBObyBvcHRpb25zICovCisgICAgfQorCisgICAga2V5cyA9 IGFyZ3Zbb3B0aW5kXTsKKworICAgIGlmIChsaWJ4bF9zZW5kX2RlYnVnX2tleXMoY3R4LCBrZXlz KSkgeworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgImNhbm5vdCBzZW5kIGRlYnVnIGtleXM6ICVz XG4iLCBrZXlzKTsKKyAgICAgICAgcmV0dXJuIEVYSVRfRkFJTFVSRTsKKyAgICB9CisKKyAgICBy ZXR1cm4gRVhJVF9TVUNDRVNTOworfQorCitpbnQgbWFpbl9kZXZkKGludCBhcmdjLCBjaGFyICoq YXJndikKK3sKKyAgICBpbnQgcmV0ID0gMCwgb3B0ID0gMCwgZGFlbW9uaXplID0gMTsKKyAgICBj b25zdCBjaGFyICpwaWRmaWxlID0gTlVMTDsKKyAgICBzdGF0aWMgY29uc3Qgc3RydWN0IG9wdGlv biBvcHRzW10gPSB7CisgICAgICAgIHsicGlkZmlsZSIsIDEsIDAsICdwJ30sCisgICAgICAgIENP TU1PTl9MT05HX09QVFMsCisgICAgICAgIHswLCAwLCAwLCAwfQorICAgIH07CisKKyAgICBTV0lU Q0hfRk9SRUFDSF9PUFQob3B0LCAiRnA6Iiwgb3B0cywgImRldmQiLCAwKSB7CisgICAgY2FzZSAn Ric6CisgICAgICAgIGRhZW1vbml6ZSA9IDA7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgJ3An OgorICAgICAgICBwaWRmaWxlID0gb3B0YXJnOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAg ICBpZiAoZGFlbW9uaXplKSB7CisgICAgICAgIHJldCA9IGRvX2RhZW1vbml6ZSgieGxkZXZkIiwg cGlkZmlsZSk7CisgICAgICAgIGlmIChyZXQpIHsKKyAgICAgICAgICAgIHJldCA9IChyZXQgPT0g MSkgPyAwIDogcmV0OworICAgICAgICAgICAgZ290byBvdXQ7CisgICAgICAgIH0KKyAgICB9CisK KyAgICBsaWJ4bF9kZXZpY2VfZXZlbnRzX2hhbmRsZXIoY3R4LCAwKTsKKworb3V0OgorICAgIHJl dHVybiByZXQ7Cit9CisKK2ludCBtYWluX3FlbXVfbW9uaXRvcl9jb21tYW5kKGludCBhcmdjLCBj aGFyICoqYXJndikKK3sKKyAgICBpbnQgb3B0OworICAgIHVpbnQzMl90IGRvbWlkOworICAgIGNo YXIgKmNtZDsKKyAgICBjaGFyICpvdXRwdXQ7CisgICAgaW50IHJldDsKKworICAgIFNXSVRDSF9G T1JFQUNIX09QVChvcHQsICIiLCBOVUxMLCAicWVtdS1tb25pdG9yLWNvbW1hbmQiLCAyKSB7Cisg ICAgICAgIC8qIE5vIG9wdGlvbnMgKi8KKyAgICB9CisKKyAgICBkb21pZCA9IHhmaW5kX2RvbWFp bihhcmd2W29wdGluZF0pOworICAgIGNtZCA9IGFyZ3Zbb3B0aW5kICsgMV07CisKKyAgICBpZiAo YXJnYyAtIG9wdGluZCA+IDIpIHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJJbnZhbGlkIGFy Z3VtZW50cy5cbiIpOworICAgICAgICByZXR1cm4gRVhJVF9GQUlMVVJFOworICAgIH0KKworICAg IHJldCA9IGxpYnhsX3FlbXVfbW9uaXRvcl9jb21tYW5kKGN0eCwgZG9taWQsIGNtZCwgJm91dHB1 dCk7CisgICAgaWYgKCFyZXQgJiYgb3V0cHV0KSB7CisgICAgICAgIHByaW50ZigiJXNcbiIsIG91 dHB1dCk7CisgICAgICAgIGZyZWUob3V0cHV0KTsKKyAgICB9CisKKyAgICByZXR1cm4gcmV0ID8g RVhJVF9GQUlMVVJFIDogRVhJVF9TVUNDRVNTOworfQorCitzdGF0aWMgdm9pZCBjb3JlX2R1bXBf ZG9tYWluKHVpbnQzMl90IGRvbWlkLCBjb25zdCBjaGFyICpmaWxlbmFtZSkKK3sKKyAgICBpbnQg cmM7CisKKyAgICByYz1saWJ4bF9kb21haW5fY29yZV9kdW1wKGN0eCwgZG9taWQsIGZpbGVuYW1l LCBOVUxMKTsKKyAgICBpZiAocmMpIHsgZnByaW50ZihzdGRlcnIsImNvcmUgZHVtcCBmYWlsZWQg KHJjPSVkKVxuIixyYyk7ZXhpdChFWElUX0ZBSUxVUkUpOyB9Cit9CisKK2ludCBtYWluX2R1bXBf Y29yZShpbnQgYXJnYywgY2hhciAqKmFyZ3YpCit7CisgICAgaW50IG9wdDsKKworICAgIFNXSVRD SF9GT1JFQUNIX09QVChvcHQsICIiLCBOVUxMLCAiZHVtcC1jb3JlIiwgMikgeworICAgICAgICAv KiBObyBvcHRpb25zICovCisgICAgfQorCisgICAgY29yZV9kdW1wX2RvbWFpbih4ZmluZF9kb21h aW4oYXJndltvcHRpbmRdKSwgYXJndltvcHRpbmQgKyAxXSk7CisgICAgcmV0dXJuIEVYSVRfU1VD Q0VTUzsKK30KKworZXh0ZXJuIHZvaWQgcHJpbnRmX2luZm8oZW51bSBvdXRwdXRfZm9ybWF0IG91 dHB1dF9mb3JtYXQsCisgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZG9taWQsCisgICAgICAg ICAgICAgICAgICAgICAgICBsaWJ4bF9kb21haW5fY29uZmlnICpkX2NvbmZpZywgRklMRSAqZmgp OworaW50IG1haW5fY29uZmlnX3VwZGF0ZShpbnQgYXJnYywgY2hhciAqKmFyZ3YpCit7CisgICAg dWludDMyX3QgZG9taWQ7CisgICAgY29uc3QgY2hhciAqZmlsZW5hbWUgPSBOVUxMOworICAgIGNo YXIgKmV4dHJhX2NvbmZpZyA9IE5VTEw7CisgICAgdm9pZCAqY29uZmlnX2RhdGEgPSAwOworICAg IGludCBjb25maWdfbGVuID0gMDsKKyAgICBsaWJ4bF9kb21haW5fY29uZmlnIGRfY29uZmlnOwor ICAgIGludCBvcHQsIHJjOworICAgIGludCBkZWJ1ZyA9IDA7CisgICAgc3RhdGljIHN0cnVjdCBv cHRpb24gb3B0c1tdID0geworICAgICAgICB7ImRlZmNvbmZpZyIsIDEsIDAsICdmJ30sCisgICAg ICAgIENPTU1PTl9MT05HX09QVFMKKyAgICB9OworCisgICAgaWYgKGFyZ2MgPCAyKSB7CisgICAg ICAgIGZwcmludGYoc3RkZXJyLCAieGwgY29uZmlnLXVwZGF0ZSByZXF1aXJlcyBhIGRvbWFpbiBh cmd1bWVudFxuIik7CisgICAgICAgIGhlbHAoImNvbmZpZy11cGRhdGUiKTsKKyAgICAgICAgZXhp dCgxKTsKKyAgICB9CisKKyAgICBmcHJpbnRmKHN0ZGVyciwgIldBUk5JTkc6IHhsIG5vdyBoYXMg YmV0dGVyIGNhcGFiaWxpdHkgdG8gbWFuYWdlIGRvbWFpbiBjb25maWd1cmF0aW9uLCAiCisgICAg ICAgICAgICAiYXZvaWQgdXNpbmcgdGhpcyBjb21tYW5kIHdoZW4gcG9zc2libGVcbiIpOworCisg ICAgZG9taWQgPSB4ZmluZF9kb21haW4oYXJndlsxXSk7CisgICAgYXJnYy0tOyBhcmd2Kys7CisK KyAgICBpZiAoYXJndlsxXSAmJiBhcmd2WzFdWzBdICE9ICctJyAmJiAhc3RyY2hyKGFyZ3ZbMV0s ICc9JykpIHsKKyAgICAgICAgZmlsZW5hbWUgPSBhcmd2WzFdOworICAgICAgICBhcmdjLS07IGFy Z3YrKzsKKyAgICB9CisKKyAgICBTV0lUQ0hfRk9SRUFDSF9PUFQob3B0LCAiZHFmOiIsIG9wdHMs ICJjb25maWdfdXBkYXRlIiwgMCkgeworICAgIGNhc2UgJ2QnOgorICAgICAgICBkZWJ1ZyA9IDE7 CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgJ2YnOgorICAgICAgICBmaWxlbmFtZSA9IG9wdGFy ZzsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgZm9yICg7IG9wdGluZCA8IGFyZ2M7IG9w dGluZCsrKSB7CisgICAgICAgIGlmIChzdHJjaHIoYXJndltvcHRpbmRdLCAnPScpICE9IE5VTEwp IHsKKyAgICAgICAgICAgIHhzdHJpbmdfcmVhbGxvY19hcHBlbmQoJmV4dHJhX2NvbmZpZywgYXJn dltvcHRpbmRdKTsKKyAgICAgICAgICAgIHhzdHJpbmdfcmVhbGxvY19hcHBlbmQoJmV4dHJhX2Nv bmZpZywgIlxuIik7CisgICAgICAgIH0gZWxzZSBpZiAoIWZpbGVuYW1lKSB7CisgICAgICAgICAg ICBmaWxlbmFtZSA9IGFyZ3Zbb3B0aW5kXTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg IGhlbHAoImNyZWF0ZSIpOworICAgICAgICAgICAgZnJlZShleHRyYV9jb25maWcpOworICAgICAg ICAgICAgcmV0dXJuIDI7CisgICAgICAgIH0KKyAgICB9CisgICAgaWYgKGZpbGVuYW1lKSB7Cisg ICAgICAgIGZyZWUoY29uZmlnX2RhdGEpOyAgY29uZmlnX2RhdGEgPSAwOworICAgICAgICByYyA9 IGxpYnhsX3JlYWRfZmlsZV9jb250ZW50cyhjdHgsIGZpbGVuYW1lLAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAmY29uZmlnX2RhdGEsICZjb25maWdfbGVuKTsKKyAgICAg ICAgaWYgKHJjKSB7IGZwcmludGYoc3RkZXJyLCAiRmFpbGVkIHRvIHJlYWQgY29uZmlnIGZpbGU6 ICVzOiAlc1xuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVuYW1lLCBzdHJlcnJv cihlcnJubykpOworICAgICAgICAgICAgICAgICAgZnJlZShleHRyYV9jb25maWcpOyByZXR1cm4g RVJST1JfRkFJTDsgfQorICAgICAgICBpZiAoZXh0cmFfY29uZmlnICYmIHN0cmxlbihleHRyYV9j b25maWcpKSB7CisgICAgICAgICAgICBpZiAoY29uZmlnX2xlbiA+IElOVF9NQVggLSAoc3RybGVu KGV4dHJhX2NvbmZpZykgKyAyICsgMSkpIHsKKyAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVy ciwgIkZhaWxlZCB0byBhdHRhY2ggZXh0cmEgY29uZmlndXJhdGlvblxuIik7CisgICAgICAgICAg ICAgICAgZXhpdCgxKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIC8qIGFsbG9jYXRlIHNw YWNlIGZvciB0aGUgZXh0cmEgY29uZmlnIHBsdXMgdHdvIEVPTHMgcGx1cyBcMCAqLworICAgICAg ICAgICAgY29uZmlnX2RhdGEgPSByZWFsbG9jKGNvbmZpZ19kYXRhLCBjb25maWdfbGVuCisgICAg ICAgICAgICAgICAgKyBzdHJsZW4oZXh0cmFfY29uZmlnKSArIDIgKyAxKTsKKyAgICAgICAgICAg IGlmICghY29uZmlnX2RhdGEpIHsKKyAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkZh aWxlZCB0byByZWFsbG9jIGNvbmZpZ19kYXRhXG4iKTsKKyAgICAgICAgICAgICAgICBleGl0KDEp OworICAgICAgICAgICAgfQorICAgICAgICAgICAgY29uZmlnX2xlbiArPSBzcHJpbnRmKGNvbmZp Z19kYXRhICsgY29uZmlnX2xlbiwgIlxuJXNcbiIsCisgICAgICAgICAgICAgICAgZXh0cmFfY29u ZmlnKTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAi Q29uZmlnIGZpbGUgbm90IHNwZWNpZmllZFxuIik7CisgICAgICAgIGV4aXQoMSk7CisgICAgfQor CisgICAgbGlieGxfZG9tYWluX2NvbmZpZ19pbml0KCZkX2NvbmZpZyk7CisKKyAgICBwYXJzZV9j b25maWdfZGF0YShmaWxlbmFtZSwgY29uZmlnX2RhdGEsIGNvbmZpZ19sZW4sICZkX2NvbmZpZyk7 CisKKyAgICBpZiAoZGVidWcgfHwgZHJ5cnVuX29ubHkpCisgICAgICAgIHByaW50Zl9pbmZvKGRl ZmF1bHRfb3V0cHV0X2Zvcm1hdCwgLTEsICZkX2NvbmZpZywgc3Rkb3V0KTsKKworICAgIGlmICgh ZHJ5cnVuX29ubHkpIHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJzZXR0aW5nIGRvbSV1IGNv bmZpZ3VyYXRpb25cbiIsIGRvbWlkKTsKKyAgICAgICAgcmMgPSBsaWJ4bF91c2VyZGF0YV9zdG9y ZShjdHgsIGRvbWlkLCAieGwiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj b25maWdfZGF0YSwgY29uZmlnX2xlbik7CisgICAgICAgIGlmIChyYykgeworICAgICAgICAgICAg ZnByaW50ZihzdGRlcnIsICJmYWlsZWQgdG8gdXBkYXRlIGNvbmZpZ3VyYXRpb25cbiIpOworICAg ICAgICAgICAgZXhpdCgxKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGxpYnhsX2RvbWFpbl9j b25maWdfZGlzcG9zZSgmZF9jb25maWcpOworCisgICAgZnJlZShjb25maWdfZGF0YSk7CisgICAg ZnJlZShleHRyYV9jb25maWcpOworICAgIHJldHVybiAwOworfQorCisvKgorICogTG9jYWwgdmFy aWFibGVzOgorICogbW9kZTogQworICogYy1iYXNpYy1vZmZzZXQ6IDQKKyAqIGluZGVudC10YWJz LW1vZGU6IG5pbAorICogRW5kOgorICovCmRpZmYgLS1naXQgYS90b29scy94bC94bF91dGlscy5j IGIvdG9vbHMveGwveGxfdXRpbHMuYwppbmRleCBlMGI0Y2IyNTQ3Li5lM2FlMWI4YmY1IDEwMDY0 NAotLS0gYS90b29scy94bC94bF91dGlscy5jCisrKyBiL3Rvb2xzL3hsL3hsX3V0aWxzLmMKQEAg LTE0LDggKzE0LDExIEBACiAKICNkZWZpbmUgX0dOVV9TT1VSQ0UKIAorI2luY2x1ZGUgPGZjbnRs Lmg+CiAjaW5jbHVkZSA8bGltaXRzLmg+CiAjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8 c3lzL3N0YXQuaD4KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KICNpbmNsdWRlIDx1bmlzdGQuaD4K IAogI2luY2x1ZGUgPGxpYnhsLmg+CkBAIC0yNDgsNiArMjUxLDczIEBAIHZvaWQgcHJpbnRfYml0 bWFwKHVpbnQ4X3QgKm1hcCwgaW50IG1hcGxlbiwgRklMRSAqc3RyZWFtKQogICAgIH0KIH0KIAor aW50IGRvX2RhZW1vbml6ZShjaGFyICpuYW1lLCBjb25zdCBjaGFyICpwaWRmaWxlKQoreworICAg IGNoYXIgKmZ1bGxuYW1lOworICAgIHBpZF90IGNoaWxkMTsKKyAgICBpbnQgbnVsbGZkLCByZXQg PSAwOworCisgICAgY2hpbGQxID0geGxfZm9yayhjaGlsZF93YWl0ZGFlbW9uLCAiZG9tYWluIG1v bml0b3JpbmcgZGFlbW9uaXppbmcgY2hpbGQiKTsKKyAgICBpZiAoY2hpbGQxKSB7CisgICAgICAg IHJldCA9IGNoaWxkX3JlcG9ydChjaGlsZF93YWl0ZGFlbW9uKTsKKyAgICAgICAgaWYgKHJldCkg Z290byBvdXQ7CisgICAgICAgIHJldCA9IDE7CisgICAgICAgIGdvdG8gb3V0OworICAgIH0KKwor ICAgIHBvc3Rmb3JrKCk7CisKKyAgICByZXQgPSBsaWJ4bF9jcmVhdGVfbG9nZmlsZShjdHgsIG5h bWUsICZmdWxsbmFtZSk7CisgICAgaWYgKHJldCkgeworICAgICAgICBMT0coImZhaWxlZCB0byBv cGVuIGxvZ2ZpbGUgJXM6ICVzIixmdWxsbmFtZSxzdHJlcnJvcihlcnJubykpOworICAgICAgICBl eGl0KC0xKTsKKyAgICB9CisKKyAgICBDSEtfU1lTQ0FMTChsb2dmaWxlID0gb3BlbihmdWxsbmFt ZSwgT19XUk9OTFl8T19DUkVBVHxPX0FQUEVORCwgMDY0NCkpOworICAgIGZyZWUoZnVsbG5hbWUp OworICAgIGFzc2VydChsb2dmaWxlID49IDMpOworCisgICAgQ0hLX1NZU0NBTEwobnVsbGZkID0g b3BlbigiL2Rldi9udWxsIiwgT19SRE9OTFkpKTsKKyAgICBhc3NlcnQobnVsbGZkID49IDMpOwor CisgICAgZHVwMihudWxsZmQsIDApOworICAgIGR1cDIobG9nZmlsZSwgMSk7CisgICAgZHVwMihs b2dmaWxlLCAyKTsKKworICAgIGNsb3NlKG51bGxmZCk7CisKKyAgICBDSEtfU1lTQ0FMTChkYWVt b24oMCwgMSkpOworCisgICAgaWYgKHBpZGZpbGUpIHsKKyAgICAgICAgaW50IGZkID0gb3Blbihw aWRmaWxlLCBPX1JEV1IgfCBPX0NSRUFULCBTX0lSVVNSfFNfSVdVU1IpOworICAgICAgICBjaGFy ICpwaWQgPSBOVUxMOworCisgICAgICAgIGlmIChmZCA9PSAtMSkgeworICAgICAgICAgICAgcGVy cm9yKCJVbmFibGUgdG8gb3BlbiBwaWRmaWxlIik7CisgICAgICAgICAgICBleGl0KDEpOworICAg ICAgICB9CisKKyAgICAgICAgaWYgKGFzcHJpbnRmKCZwaWQsICIlbGRcbiIsIChsb25nKWdldHBp ZCgpKSA9PSAtMSkgeworICAgICAgICAgICAgcGVycm9yKCJGb3JtYXR0aW5nIHBpZCIpOworICAg ICAgICAgICAgZXhpdCgxKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICh3cml0ZShmZCwgcGlk LCBzdHJsZW4ocGlkKSkgPCAwKSB7CisgICAgICAgICAgICBwZXJyb3IoIldyaXRpbmcgcGlkIik7 CisgICAgICAgICAgICBleGl0KDEpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGNsb3NlKGZk KSA8IDApIHsKKyAgICAgICAgICAgIHBlcnJvcigiQ2xvc2luZyBwaWRmaWxlIik7CisgICAgICAg ICAgICBleGl0KDEpOworICAgICAgICB9CisKKyAgICAgICAgZnJlZShwaWQpOworICAgIH0KKwor b3V0OgorICAgIHJldHVybiByZXQ7Cit9CiAKIC8qCiAgKiBMb2NhbCB2YXJpYWJsZXM6CmRpZmYg LS1naXQgYS90b29scy94bC94bF91dGlscy5oIGIvdG9vbHMveGwveGxfdXRpbHMuaAppbmRleCAy Nzg2ZjdjM2NkLi5hMTU5Mjg3ZjVlIDEwMDY0NAotLS0gYS90b29scy94bC94bF91dGlscy5oCisr KyBiL3Rvb2xzL3hsL3hsX3V0aWxzLmgKQEAgLTE0NSw2ICsxNDUsNyBAQCB1aW50MzJfdCB4Zmlu ZF9kb21haW4oY29uc3QgY2hhciAqcCkgX19hdHRyaWJ1dGVfXygod2Fybl91bnVzZWRfcmVzdWx0 KSk7CiAKIHZvaWQgcHJpbnRfYml0bWFwKHVpbnQ4X3QgKm1hcCwgaW50IG1hcGxlbiwgRklMRSAq c3RyZWFtKTsKIAoraW50IGRvX2RhZW1vbml6ZShjaGFyICpuYW1lLCBjb25zdCBjaGFyICpwaWRm aWxlKTsKICNlbmRpZiAvKiBYTF9VVElMU19IICovCiAKIC8qCi0tIAoyLjExLjAKCgpfX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpYZW4tZGV2ZWwgbWFpbGlu ZyBsaXN0Clhlbi1kZXZlbEBsaXN0cy54ZW4ub3JnCmh0dHBzOi8vbGlzdHMueGVuLm9yZy94ZW4t ZGV2ZWwK