From mboxrd@z Thu Jan 1 00:00:00 1970 From: "Jan Beulich" Subject: [PATCH v5 02/47] x86emul: support basic AVX512 moves Date: Mon, 19 Nov 2018 03:13:50 -0700 Message-ID: <5BF28CDE02000078001FD402@prv1-mh.provo.novell.com> References: <5B6BF83602000078001DC548@prv1-mh.provo.novell.com> <5BF289D802000078001FD3DF@prv1-mh.provo.novell.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from us1-rack-dfw2.inumbo.com ([104.130.134.6]) by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from ) id 1gOgZ3-0005MR-9F for xen-devel@lists.xenproject.org; Mon, 19 Nov 2018 10:13:57 +0000 In-Reply-To: <5BF289D802000078001FD3DF@prv1-mh.provo.novell.com> Content-Disposition: inline List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Sender: "Xen-devel" To: xen-devel Cc: George Dunlap , Andrew Cooper , Wei Liu , Roger Pau Monne List-Id: xen-devel@lists.xenproject.org Tm90ZTogU0RNIFZvbCAyIHJldiAwNjcgaXMgbm90IHJlYWxseSBjb25zaXN0ZW50IGFib3V0IEVW RVguTCdMIGZvciBMSUcKICAgICAgaW5zbnMgLSB0aGUgb25seSBwbGFjZSB3aGVyZSB0aGlzIGlz IG1hZGUgZXhwbGljaXQgaXMgYSB0YWJsZSBpbgogICAgICB0aGUgc2VjdGlvbiB0aXRsZWQgIlZl Y3RvciBMZW5ndGggT3J0aG9nb25hbGl0eSI6IFdoaWxlIHRoZXkKICAgICAgdG9sZXJhdGUgMCwg MSwgYW5kIDIsIGEgdmFsdWUgb2YgMyB1bmlmb3JtbHkgbGVhZHMgdG8gI1VELgoKU2lnbmVkLW9m Zi1ieTogSmFuIEJldWxpY2ggPGpiZXVsaWNoQHN1c2UuY29tPgotLS0KdjU6IFVzZSBJTVBPU1NJ QkxFKCkgdG8gZ3VhcmQgYWdhaW5zdCBkaXZpc2lvbiBieSB6ZXJvLiBDb3JyZWN0IHN0eWxlLgog ICAgUmUtYmFzZS4KdjQ6IEludHJvZHVjZSBkOHNfZHE2NCB0byBkZWFsIHdpdGggMzItYml0IG1v ZGUgVk1PVkQgd2l0aCBFVkVYLlcgc2V0LgogICAgQWRqdXN0IGEgY29tbWVudC4KdjM6IFJlc3Ry aWN0IGstcmVnIHJlYWRpbmcgdG8gaW5zbnMgd2l0aCBtZW1vcnkgb3BlcmFuZC4gU2hyaW5rIHNj b3BlIG9mCiAgICAiZGlzcDhzY2FsZSIuCnYyOiBNb3ZlICJmdWxsIiBpbnRvIG1vcmUgbmFycm93 IHNjb3BlLgoKLS0tIGEvdG9vbHMvdGVzdHMveDg2X2VtdWxhdG9yL3Rlc3RfeDg2X2VtdWxhdG9y LmMKKysrIGIvdG9vbHMvdGVzdHMveDg2X2VtdWxhdG9yL3Rlc3RfeDg2X2VtdWxhdG9yLmMKQEAg LTE5ODUsNiArMTk4NSw1MyBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiAgICAg ZWxzZQogICAgICAgICBwcmludGYoInNraXBwZWRcbiIpOwogCisgICAgcHJpbnRmKCIlLTQwcyIs ICJUZXN0aW5nIHtldmV4fSB2bW92cSAleG1tMSwzMiglZWR4KS4uLiIpOworICAgIGlmICggc3Rh Y2tfZXhlYyAmJiBjcHVfaGFzX2F2eDUxMmYgKQorICAgIHsKKyAgICAgICAgZGVjbF9pbnNuKGV2 ZXhfdm1vdnFfdG9fbWVtKTsKKworICAgICAgICBhc20gdm9sYXRpbGUgKCAicGNtcGd0YiAlJXht bTEsICUleG1tMVxuIgorICAgICAgICAgICAgICAgICAgICAgICBwdXRfaW5zbihldmV4X3Ztb3Zx X3RvX21lbSwgIiV7ZXZleCV9IHZtb3ZxICUleG1tMSwgMzIoJTApIikKKyAgICAgICAgICAgICAg ICAgICAgICAgOjogImQiIChOVUxMKSApOworCisgICAgICAgIG1lbXNldChyZXMsIDB4ZGIsIDY0 KTsKKyAgICAgICAgc2V0X2luc24oZXZleF92bW92cV90b19tZW0pOworICAgICAgICByZWdzLmVj eCA9IDA7CisgICAgICAgIHJlZ3MuZWR4ID0gKHVuc2lnbmVkIGxvbmcpcmVzOworICAgICAgICBy YyA9IHg4Nl9lbXVsYXRlKCZjdHh0LCAmZW11bG9wcyk7CisgICAgICAgIGlmICggcmMgIT0gWDg2 RU1VTF9PS0FZIHx8ICFjaGVja19laXAoZXZleF92bW92cV90b19tZW0pIHx8CisgICAgICAgICAg ICAgKigodWludDY0X3QgKilyZXMgKyA0KSB8fAorICAgICAgICAgICAgIG1lbWNtcChyZXMsIHJl cyArIDEwLCAyNCkgfHwKKyAgICAgICAgICAgICBtZW1jbXAocmVzLCByZXMgKyA2LCA4KSApCisg ICAgICAgICAgICBnb3RvIGZhaWw7CisgICAgICAgIHByaW50Zigib2theVxuIik7CisgICAgfQor ICAgIGVsc2UKKyAgICAgICAgcHJpbnRmKCJza2lwcGVkXG4iKTsKKworICAgIHByaW50ZigiJS00 MHMiLCAiVGVzdGluZyB7ZXZleH0gdm1vdnEgMzIoJWVkeCksJXhtbTAuLi4iKTsKKyAgICBpZiAo IHN0YWNrX2V4ZWMgJiYgY3B1X2hhc19hdng1MTJmICkKKyAgICB7CisgICAgICAgIGRlY2xfaW5z bihldmV4X3Ztb3ZxX2Zyb21fbWVtKTsKKworICAgICAgICBhc20gdm9sYXRpbGUgKCAicGNtcGVx YiAlJXhtbTAsICUleG1tMFxuIgorICAgICAgICAgICAgICAgICAgICAgICBwdXRfaW5zbihldmV4 X3Ztb3ZxX2Zyb21fbWVtLCAiJXtldmV4JX0gdm1vdnEgMzIoJTApLCAlJXhtbTAiKQorICAgICAg ICAgICAgICAgICAgICAgICA6OiAiZCIgKE5VTEwpICk7CisKKyAgICAgICAgc2V0X2luc24oZXZl eF92bW92cV9mcm9tX21lbSk7CisgICAgICAgIHJjID0geDg2X2VtdWxhdGUoJmN0eHQsICZlbXVs b3BzKTsKKyAgICAgICAgaWYgKCByYyAhPSBYODZFTVVMX09LQVkgfHwgIWNoZWNrX2VpcChldmV4 X3Ztb3ZxX2Zyb21fbWVtKSApCisgICAgICAgICAgICBnb3RvIGZhaWw7CisgICAgICAgIGFzbSAo ICJ2bW92cSAlMSwgJSV4bW0xXG5cdCIKKyAgICAgICAgICAgICAgInZwY21wZXFxICUlem1tMCwg JSV6bW0xLCAlJWswXG4iCisgICAgICAgICAgICAgICJrbW92dyAlJWswLCAlMCIgOiAiPXIiIChy YykgOiAibSIgKHJlc1s4XSkgKTsKKyAgICAgICAgaWYgKCByYyAhPSAweGZmICkKKyAgICAgICAg ICAgIGdvdG8gZmFpbDsKKyAgICAgICAgcHJpbnRmKCJva2F5XG4iKTsKKyAgICB9CisgICAgZWxz ZQorICAgICAgICBwcmludGYoInNraXBwZWRcbiIpOworCiAgICAgcHJpbnRmKCIlLTQwcyIsICJU ZXN0aW5nIG1vdmRxdSAleG1tMiwoJWVjeCkuLi4iKTsKICAgICBpZiAoIHN0YWNrX2V4ZWMgJiYg Y3B1X2hhc19zc2UyICkKICAgICB7CkBAIC0yMDg1LDYgKzIxMzIsMTE4IEBAIGludCBtYWluKGlu dCBhcmdjLCBjaGFyICoqYXJndikKICAgICBlbHNlCiAgICAgICAgIHByaW50Zigic2tpcHBlZFxu Iik7CiAKKyAgICBwcmludGYoIiUtNDBzIiwgIlRlc3Rpbmcgdm1vdmRxdTMyICV6bW0yLCglZWN4 KXslazF9Li4uIik7CisgICAgaWYgKCBzdGFja19leGVjICYmIGNwdV9oYXNfYXZ4NTEyZiApCisg ICAgeworICAgICAgICBkZWNsX2luc24odm1vdmRxdTMyX3RvX21lbSk7CisKKyAgICAgICAgbWVt c2V0KHJlcywgMHg1NSwgMTI4KTsKKworICAgICAgICBhc20gdm9sYXRpbGUgKCAidnBjbXBlcWQg JSV5bW0yLCAlJXltbTIsICUleW1tMlxuXHQiCisgICAgICAgICAgICAgICAgICAgICAgICJrbW92 dyAlMSwlJWsxXG4iCisgICAgICAgICAgICAgICAgICAgICAgIHB1dF9pbnNuKHZtb3ZkcXUzMl90 b19tZW0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ2bW92ZHF1MzIgJSV6bW0y LCAoJTApJXslJWsxJX0iKQorICAgICAgICAgICAgICAgICAgICAgICA6OiAiYyIgKE5VTEwpLCAi cm0iIChyZXNbMF0pICk7CisgICAgICAgIHNldF9pbnNuKHZtb3ZkcXUzMl90b19tZW0pOworCisg ICAgICAgIHJlZ3MuZWN4ID0gKHVuc2lnbmVkIGxvbmcpcmVzOworICAgICAgICByYyA9IHg4Nl9l bXVsYXRlKCZjdHh0LCAmZW11bG9wcyk7CisgICAgICAgIGlmICggKHJjICE9IFg4NkVNVUxfT0tB WSkgfHwgbWVtY21wKHJlcyArIDE2LCByZXMgKyAyNCwgMzIpIHx8CisgICAgICAgICAgICAgIWNo ZWNrX2VpcCh2bW92ZHF1MzJfdG9fbWVtKSApCisgICAgICAgICAgICBnb3RvIGZhaWw7CisKKyAg ICAgICAgcmVzWzE2XSA9IH4wOyByZXNbMThdID0gfjA7IHJlc1syMF0gPSB+MDsgcmVzWzIyXSA9 IH4wOworICAgICAgICByZXNbMjRdID0gIDA7IHJlc1syNl0gPSAgMDsgcmVzWzI4XSA9ICAwOyBy ZXNbMzBdID0gIDA7CisgICAgICAgIGlmICggbWVtY21wKHJlcywgcmVzICsgMTYsIDY0KSApCisg ICAgICAgICAgICBnb3RvIGZhaWw7CisKKyAgICAgICAgcHJpbnRmKCJva2F5XG4iKTsKKyAgICB9 CisgICAgZWxzZQorICAgICAgICBwcmludGYoInNraXBwZWRcbiIpOworCisgICAgcHJpbnRmKCIl LTQwcyIsICJUZXN0aW5nIHZtb3ZkcXUzMiA2NCglZWR4KSwlem1tMnslazJ9Li4uIik7CisgICAg aWYgKCBzdGFja19leGVjICYmIGNwdV9oYXNfYXZ4NTEyZiApCisgICAgeworICAgICAgICBkZWNs X2luc24odm1vdmRxdTMyX2Zyb21fbWVtKTsKKworICAgICAgICBhc20gdm9sYXRpbGUgKCAia25v dHcgJSVrMSwgJSVrMlxuIgorICAgICAgICAgICAgICAgICAgICAgICBwdXRfaW5zbih2bW92ZHF1 MzJfZnJvbV9tZW0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ2bW92ZHF1MzIg NjQoJTApLCAlJXptbTIleyUlazIlfSIpCisgICAgICAgICAgICAgICAgICAgICAgIDo6ICJkIiAo TlVMTCkgKTsKKworICAgICAgICBzZXRfaW5zbih2bW92ZHF1MzJfZnJvbV9tZW0pOworICAgICAg ICByZWdzLmVjeCA9IDA7CisgICAgICAgIHJlZ3MuZWR4ID0gKHVuc2lnbmVkIGxvbmcpcmVzOwor ICAgICAgICByYyA9IHg4Nl9lbXVsYXRlKCZjdHh0LCAmZW11bG9wcyk7CisgICAgICAgIGlmICgg cmMgIT0gWDg2RU1VTF9PS0FZIHx8ICFjaGVja19laXAodm1vdmRxdTMyX2Zyb21fbWVtKSApCisg ICAgICAgICAgICBnb3RvIGZhaWw7CisgICAgICAgIGFzbSAoICJ2cGNtcGVxZCAlMSwgJSV6bW0y LCAlJWswXG5cdCIKKyAgICAgICAgICAgICAgImttb3Z3ICUlazAsICUwIiA6ICI9ciIgKHJjKSA6 ICJtIiAocmVzWzBdKSApOworICAgICAgICBpZiAoIHJjICE9IDB4ZmZmZiApCisgICAgICAgICAg ICBnb3RvIGZhaWw7CisgICAgICAgIHByaW50Zigib2theVxuIik7CisgICAgfQorICAgIGVsc2UK KyAgICAgICAgcHJpbnRmKCJza2lwcGVkXG4iKTsKKworICAgIHByaW50ZigiJS00MHMiLCAiVGVz dGluZyB2bW92ZHF1MTYgJXptbTMsKCVlY3gpeyVrMX0uLi4iKTsKKyAgICBpZiAoIHN0YWNrX2V4 ZWMgJiYgY3B1X2hhc19hdng1MTJidyApCisgICAgeworICAgICAgICBkZWNsX2luc24odm1vdmRx dTE2X3RvX21lbSk7CisKKyAgICAgICAgbWVtc2V0KHJlcywgMHg1NSwgMTI4KTsKKworICAgICAg ICBhc20gdm9sYXRpbGUgKCAidnBjbXBlcXcgJSV5bW0zLCAlJXltbTMsICUleW1tM1xuXHQiCisg ICAgICAgICAgICAgICAgICAgICAgICJrbW92ZCAlMSwlJWsxXG4iCisgICAgICAgICAgICAgICAg ICAgICAgIHB1dF9pbnNuKHZtb3ZkcXUxNl90b19tZW0sCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICJ2bW92ZHF1MTYgJSV6bW0zLCAoJTApJXslJWsxJX0iKQorICAgICAgICAgICAg ICAgICAgICAgICA6OiAiYyIgKE5VTEwpLCAicm0iIChyZXNbMF0pICk7CisgICAgICAgIHNldF9p bnNuKHZtb3ZkcXUxNl90b19tZW0pOworCisgICAgICAgIHJlZ3MuZWN4ID0gKHVuc2lnbmVkIGxv bmcpcmVzOworICAgICAgICByYyA9IHg4Nl9lbXVsYXRlKCZjdHh0LCAmZW11bG9wcyk7CisgICAg ICAgIGlmICggKHJjICE9IFg4NkVNVUxfT0tBWSkgfHwgbWVtY21wKHJlcyArIDE2LCByZXMgKyAy NCwgMzIpIHx8CisgICAgICAgICAgICAgIWNoZWNrX2VpcCh2bW92ZHF1MTZfdG9fbWVtKSApCisg ICAgICAgICAgICBnb3RvIGZhaWw7CisKKyAgICAgICAgZm9yICggaSA9IDE2OyBpIDwgMjQ7ICsr aSApCisgICAgICAgICAgICByZXNbaV0gfD0gMHgwMDAwZmZmZjsKKyAgICAgICAgZm9yICggOyBp IDwgMzI7ICsraSApCisgICAgICAgICAgICByZXNbaV0gJj0gMHhmZmZmMDAwMDsKKyAgICAgICAg aWYgKCBtZW1jbXAocmVzLCByZXMgKyAxNiwgNjQpICkKKyAgICAgICAgICAgIGdvdG8gZmFpbDsK KworICAgICAgICBwcmludGYoIm9rYXlcbiIpOworICAgIH0KKyAgICBlbHNlCisgICAgICAgIHBy aW50Zigic2tpcHBlZFxuIik7CisKKyAgICBwcmludGYoIiUtNDBzIiwgIlRlc3Rpbmcgdm1vdmRx dTE2IDY0KCVlZHgpLCV6bW0zeyVrMn0uLi4iKTsKKyAgICBpZiAoIHN0YWNrX2V4ZWMgJiYgY3B1 X2hhc19hdng1MTJidyApCisgICAgeworICAgICAgICBkZWNsX2luc24odm1vdmRxdTE2X2Zyb21f bWVtKTsKKworICAgICAgICBhc20gdm9sYXRpbGUgKCAia25vdGQgJSVrMSwgJSVrMlxuIgorICAg ICAgICAgICAgICAgICAgICAgICBwdXRfaW5zbih2bW92ZHF1MTZfZnJvbV9tZW0sCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICJ2bW92ZHF1MTYgNjQoJTApLCAlJXptbTMleyUlazIl fSIpCisgICAgICAgICAgICAgICAgICAgICAgIDo6ICJkIiAoTlVMTCkgKTsKKworICAgICAgICBz ZXRfaW5zbih2bW92ZHF1MTZfZnJvbV9tZW0pOworICAgICAgICByZWdzLmVjeCA9IDA7CisgICAg ICAgIHJlZ3MuZWR4ID0gKHVuc2lnbmVkIGxvbmcpcmVzOworICAgICAgICByYyA9IHg4Nl9lbXVs YXRlKCZjdHh0LCAmZW11bG9wcyk7CisgICAgICAgIGlmICggcmMgIT0gWDg2RU1VTF9PS0FZIHx8 ICFjaGVja19laXAodm1vdmRxdTE2X2Zyb21fbWVtKSApCisgICAgICAgICAgICBnb3RvIGZhaWw7 CisgICAgICAgIGFzbSAoICJ2cGNtcGVxdyAlMSwgJSV6bW0zLCAlJWswXG5cdCIKKyAgICAgICAg ICAgICAgImttb3ZkICUlazAsICUwIiA6ICI9ciIgKHJjKSA6ICJtIiAocmVzWzBdKSApOworICAg ICAgICBpZiAoIHJjICE9IDB4ZmZmZmZmZmYgKQorICAgICAgICAgICAgZ290byBmYWlsOworICAg ICAgICBwcmludGYoIm9rYXlcbiIpOworICAgIH0KKyAgICBlbHNlCisgICAgICAgIHByaW50Zigi c2tpcHBlZFxuIik7CisKICAgICBwcmludGYoIiUtNDBzIiwgIlRlc3RpbmcgbW92c2QgJXhtbTUs KCVlY3gpLi4uIik7CiAgICAgbWVtc2V0KHJlcywgMHg3NywgNjQpOwogICAgIG1lbXNldChyZXMg KyAxMCwgMHg2NiwgOCk7CkBAIC0yMTg2LDYgKzIzNDUsNzEgQEAgaW50IG1haW4oaW50IGFyZ2Ms IGNoYXIgKiphcmd2KQogICAgIGVsc2UKICAgICAgICAgcHJpbnRmKCJza2lwcGVkXG4iKTsKIAor ICAgIHByaW50ZigiJS00MHMiLCAiVGVzdGluZyB2bW92c2QgJXhtbTUsMTYoJWVjeCl7JWszfS4u LiIpOworICAgIG1lbXNldChyZXMsIDB4ODgsIDEyOCk7CisgICAgbWVtc2V0KHJlcyArIDIwLCAw eDc3LCA4KTsKKyAgICBpZiAoIHN0YWNrX2V4ZWMgJiYgY3B1X2hhc19hdng1MTJmICkKKyAgICB7 CisgICAgICAgIGRlY2xfaW5zbih2bW92c2RfbWFza2VkX3RvX21lbSk7CisKKyAgICAgICAgYXNt IHZvbGF0aWxlICggInZicm9hZGNhc3RzZCAlMCwgJSV5bW01XG5cdCIKKyAgICAgICAgICAgICAg ICAgICAgICAgImt4b3J3ICUlazMsICUlazMsICUlazNcbiIKKyAgICAgICAgICAgICAgICAgICAg ICAgcHV0X2luc24odm1vdnNkX21hc2tlZF90b19tZW0sCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICJ2bW92c2QgJSV4bW01LCAxNiglMSkleyUlazMlfSIpCisgICAgICAgICAgICAg ICAgICAgICAgIDo6ICJtIiAocmVzWzIwXSksICJjIiAoTlVMTCkgKTsKKworICAgICAgICBzZXRf aW5zbih2bW92c2RfbWFza2VkX3RvX21lbSk7CisgICAgICAgIHJlZ3MuZWN4ID0gMDsKKyAgICAg ICAgcmVncy5lZHggPSAwOworICAgICAgICByYyA9IHg4Nl9lbXVsYXRlKCZjdHh0LCAmZW11bG9w cyk7CisgICAgICAgIGlmICggKHJjICE9IFg4NkVNVUxfT0tBWSkgfHwgIWNoZWNrX2VpcCh2bW92 c2RfbWFza2VkX3RvX21lbSkgKQorICAgICAgICAgICAgZ290byBmYWlsOworCisgICAgICAgIGFz bSB2b2xhdGlsZSAoICJrbW92dyAlMCwgJSVrM1xuIiA6OiAibSIgKHJlc1syMF0pICk7CisKKyAg ICAgICAgc2V0X2luc24odm1vdnNkX21hc2tlZF90b19tZW0pOworICAgICAgICByZWdzLmVjeCA9 ICh1bnNpZ25lZCBsb25nKXJlczsKKyAgICAgICAgcmMgPSB4ODZfZW11bGF0ZSgmY3R4dCwgJmVt dWxvcHMpOworICAgICAgICBpZiAoIChyYyAhPSBYODZFTVVMX09LQVkpIHx8ICFjaGVja19laXAo dm1vdnNkX21hc2tlZF90b19tZW0pIHx8CisgICAgICAgICAgICAgbWVtY21wKHJlcywgcmVzICsg MTYsIDY0KSApCisgICAgICAgICAgICBnb3RvIGZhaWw7CisKKyAgICAgICAgcHJpbnRmKCJva2F5 XG4iKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgcHJpbnRmKCJza2lwcGVkXG4i KTsKKyAgICAgICAgbWVtc2V0KHJlcyArIDQsIDB4NzcsIDgpOworICAgIH0KKworICAgIHByaW50 ZigiJS00MHMiLCAiVGVzdGluZyB2bW92YXBzICglZWR4KSwlem1tN3slazN9e3p9Li4uIik7Cisg ICAgaWYgKCBzdGFja19leGVjICYmIGNwdV9oYXNfYXZ4NTEyZiApCisgICAgeworICAgICAgICBk ZWNsX2luc24odm1vdmFwc19tYXNrZWRfZnJvbV9tZW0pOworCisgICAgICAgIGFzbSB2b2xhdGls ZSAoICJ2cGNtcGVxZCAlJXhtbTcsICUleG1tNywgJSV4bW03XG5cdCIKKyAgICAgICAgICAgICAg ICAgICAgICAgInZicm9hZGNhc3RzcyAlJXhtbTcsICUlem1tN1xuIgorICAgICAgICAgICAgICAg ICAgICAgICBwdXRfaW5zbih2bW92YXBzX21hc2tlZF9mcm9tX21lbSwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgInZtb3ZhcHMgKCUwKSwgJSV6bW03JXslJWszJX0le3olfSIpCisg ICAgICAgICAgICAgICAgICAgICAgIDo6ICJkIiAoTlVMTCkgKTsKKworICAgICAgICBzZXRfaW5z bih2bW92YXBzX21hc2tlZF9mcm9tX21lbSk7CisgICAgICAgIHJlZ3MuZWR4ID0gKHVuc2lnbmVk IGxvbmcpcmVzOworICAgICAgICByYyA9IHg4Nl9lbXVsYXRlKCZjdHh0LCAmZW11bG9wcyk7Cisg ICAgICAgIGlmICggcmMgIT0gWDg2RU1VTF9PS0FZIHx8ICFjaGVja19laXAodm1vdmFwc19tYXNr ZWRfZnJvbV9tZW0pICkKKyAgICAgICAgICAgIGdvdG8gZmFpbDsKKyAgICAgICAgYXNtICggInZj bXBlcXBzICUxLCAlJXptbTcsICUlazBcblx0IgorICAgICAgICAgICAgICAidnhvcnBzICUleG1t MCwgJSV4bW0wLCAlJXhtbTBcblx0IgorICAgICAgICAgICAgICAidmNtcGVxcHMgJSV6bW0wLCAl JXptbTcsICUlazFcblx0IgorICAgICAgICAgICAgICAia3hvcncgJSVrMSwgJSVrMCwgJSVrMFxu XHQiCisgICAgICAgICAgICAgICJrbW92dyAlJWswLCAlMCIgOiAiPXIiIChyYykgOiAibSIgKHJl c1sxNl0pICk7CisgICAgICAgIGlmICggcmMgIT0gMHhmZmZmICkKKyAgICAgICAgICAgIGdvdG8g ZmFpbDsKKyAgICAgICAgcHJpbnRmKCJva2F5XG4iKTsKKyAgICB9CisgICAgZWxzZQorICAgICAg ICBwcmludGYoInNraXBwZWRcbiIpOworCiAgICAgcHJpbnRmKCIlLTQwcyIsICJUZXN0aW5nIG1v dmQgJW1tMywzMiglZWN4KS4uLiIpOwogICAgIGlmICggc3RhY2tfZXhlYyAmJiBjcHVfaGFzX21t eCApCiAgICAgewpAQCAtMjM0MSw2ICsyNTY1LDU1IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFy ICoqYXJndikKICAgICBlbHNlCiAgICAgICAgIHByaW50Zigic2tpcHBlZFxuIik7CiAKKyAgICBw cmludGYoIiUtNDBzIiwgIlRlc3Rpbmcge2V2ZXh9IHZtb3ZkICV4bW0zLDMyKCVlY3gpLi4uIik7 CisgICAgaWYgKCBzdGFja19leGVjICYmIGNwdV9oYXNfYXZ4NTEyZiApCisgICAgeworICAgICAg ICBkZWNsX2luc24oZXZleF92bW92ZF90b19tZW0pOworCisgICAgICAgIGFzbSB2b2xhdGlsZSAo ICJwY21wZXFiICUleG1tMywgJSV4bW0zXG4iCisgICAgICAgICAgICAgICAgICAgICAgIHB1dF9p bnNuKGV2ZXhfdm1vdmRfdG9fbWVtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAi JXtldmV4JX0gdm1vdmQgJSV4bW0zLCAzMiglMCkiKQorICAgICAgICAgICAgICAgICAgICAgICA6 OiAiYyIgKE5VTEwpICk7CisKKyAgICAgICAgbWVtc2V0KHJlcywgMHhiZCwgNjQpOworICAgICAg ICBzZXRfaW5zbihldmV4X3Ztb3ZkX3RvX21lbSk7CisgICAgICAgIHJlZ3MuZWN4ID0gKHVuc2ln bmVkIGxvbmcpcmVzOworICAgICAgICByZWdzLmVkeCA9IDA7CisgICAgICAgIHJjID0geDg2X2Vt dWxhdGUoJmN0eHQsICZlbXVsb3BzKTsKKyAgICAgICAgaWYgKCByYyAhPSBYODZFTVVMX09LQVkg fHwgIWNoZWNrX2VpcChldmV4X3Ztb3ZkX3RvX21lbSkgfHwKKyAgICAgICAgICAgICByZXNbOF0g KyAxIHx8CisgICAgICAgICAgICAgbWVtY21wKHJlcywgcmVzICsgOSwgMjgpIHx8CisgICAgICAg ICAgICAgbWVtY21wKHJlcywgcmVzICsgNiwgOCkgKQorICAgICAgICAgICAgZ290byBmYWlsOwor ICAgICAgICBwcmludGYoIm9rYXlcbiIpOworICAgIH0KKyAgICBlbHNlCisgICAgICAgIHByaW50 Zigic2tpcHBlZFxuIik7CisKKyAgICBwcmludGYoIiUtNDBzIiwgIlRlc3Rpbmcge2V2ZXh9IHZt b3ZkIDMyKCVlY3gpLCV4bW00Li4uIik7CisgICAgaWYgKCBzdGFja19leGVjICYmIGNwdV9oYXNf YXZ4NTEyZiApCisgICAgeworICAgICAgICBkZWNsX2luc24oZXZleF92bW92ZF9mcm9tX21lbSk7 CisKKyAgICAgICAgYXNtIHZvbGF0aWxlICggInBjbXBlcWIgJSV4bW00LCAlJXhtbTRcbiIKKyAg ICAgICAgICAgICAgICAgICAgICAgcHV0X2luc24oZXZleF92bW92ZF9mcm9tX21lbSwKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIiV7ZXZleCV9IHZtb3ZkIDMyKCUwKSwgJSV4bW00 IikKKyAgICAgICAgICAgICAgICAgICAgICAgOjogImMiIChOVUxMKSApOworCisgICAgICAgIHNl dF9pbnNuKGV2ZXhfdm1vdmRfZnJvbV9tZW0pOworICAgICAgICByYyA9IHg4Nl9lbXVsYXRlKCZj dHh0LCAmZW11bG9wcyk7CisgICAgICAgIGlmICggcmMgIT0gWDg2RU1VTF9PS0FZIHx8ICFjaGVj a19laXAoZXZleF92bW92ZF9mcm9tX21lbSkgKQorICAgICAgICAgICAgZ290byBmYWlsOworICAg ICAgICBhc20gKCAidm1vdmQgJTEsICUleG1tMFxuXHQiCisgICAgICAgICAgICAgICJ2cGNtcGVx ZCAlJXptbTQsICUlem1tMCwgJSVrMFxuXHQiCisgICAgICAgICAgICAgICJrbW92dyAlJWswLCAl MCIgOiAiPXIiIChyYykgOiAibSIgKHJlc1s4XSkgKTsKKyAgICAgICAgaWYgKCByYyAhPSAweGZm ZmYgKQorICAgICAgICAgICAgZ290byBmYWlsOworICAgICAgICBwcmludGYoIm9rYXlcbiIpOwor ICAgIH0KKyAgICBlbHNlCisgICAgICAgIHByaW50Zigic2tpcHBlZFxuIik7CisKICAgICBwcmlu dGYoIiUtNDBzIiwgIlRlc3RpbmcgbW92ZCAlbW0zLCVlYnguLi4iKTsKICAgICBpZiAoIHN0YWNr X2V4ZWMgJiYgY3B1X2hhc19tbXggKQogICAgIHsKQEAgLTI1MDcsNiArMjc4MCw1NyBAQCBpbnQg bWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiAgICAgZWxzZQogICAgICAgICBwcmludGYoInNr aXBwZWRcbiIpOwogCisgICAgcHJpbnRmKCIlLTQwcyIsICJUZXN0aW5nIHtldmV4fSB2bW92ZCAl eG1tMiwlZWJ4Li4uIik7CisgICAgaWYgKCBzdGFja19leGVjICYmIGNwdV9oYXNfYXZ4NTEyZiAp CisgICAgeworICAgICAgICBkZWNsX2luc24oZXZleF92bW92ZF90b19yZWcpOworCisgICAgICAg IC8qIFNlZSBjb21tZW50IG5leHQgdG8gbW92ZCBhYm92ZS4gKi8KKyAgICAgICAgYXNtIHZvbGF0 aWxlICggInBjbXBlcWIgJSV4bW0yLCAlJXhtbTJcbiIKKyAgICAgICAgICAgICAgICAgICAgICAg cHV0X2luc24oZXZleF92bW92ZF90b19yZWcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICIle2V2ZXglfSB2bW92ZCAlJXhtbTIsICUlZWJ4IikKKyAgICAgICAgICAgICAgICAgICAg ICAgOjogKTsKKworICAgICAgICBzZXRfaW5zbihldmV4X3Ztb3ZkX3RvX3JlZyk7CisjaWZkZWYg X194ODZfNjRfXworICAgICAgICByZWdzLnJieCA9IDB4YmRiZGJkYmRiZGJkYmRiZFVMOworI2Vs c2UKKyAgICAgICAgcmVncy5lYnggPSAweGJkYmRiZGJkVUw7CisjZW5kaWYKKyAgICAgICAgcmMg PSB4ODZfZW11bGF0ZSgmY3R4dCwgJmVtdWxvcHMpOworICAgICAgICBpZiAoIChyYyAhPSBYODZF TVVMX09LQVkpIHx8ICFjaGVja19laXAoZXZleF92bW92ZF90b19yZWcpIHx8CisgICAgICAgICAg ICAgcmVncy5lYnggIT0gMHhmZmZmZmZmZiApCisgICAgICAgICAgICBnb3RvIGZhaWw7CisgICAg ICAgIHByaW50Zigib2theVxuIik7CisgICAgfQorICAgIGVsc2UKKyAgICAgICAgcHJpbnRmKCJz a2lwcGVkXG4iKTsKKworICAgIHByaW50ZigiJS00MHMiLCAiVGVzdGluZyB7ZXZleH0gdm1vdmQg JWVieCwleG1tMS4uLiIpOworICAgIGlmICggc3RhY2tfZXhlYyAmJiBjcHVfaGFzX2F2eDUxMmYg KQorICAgIHsKKyAgICAgICAgZGVjbF9pbnNuKGV2ZXhfdm1vdmRfZnJvbV9yZWcpOworCisgICAg ICAgIC8qIFNlZSBjb21tZW50IG5leHQgdG8gbW92ZCBhYm92ZS4gKi8KKyAgICAgICAgYXNtIHZv bGF0aWxlICggInBjbXBndGIgJSV4bW0xLCAlJXhtbTFcbiIKKyAgICAgICAgICAgICAgICAgICAg ICAgcHV0X2luc24oZXZleF92bW92ZF9mcm9tX3JlZywKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIiV7ZXZleCV9IHZtb3ZkICUlZWJ4LCAlJXhtbTEiKQorICAgICAgICAgICAgICAg ICAgICAgICA6OiApOworCisgICAgICAgIHNldF9pbnNuKGV2ZXhfdm1vdmRfZnJvbV9yZWcpOwor ICAgICAgICByYyA9IHg4Nl9lbXVsYXRlKCZjdHh0LCAmZW11bG9wcyk7CisgICAgICAgIGlmICgg KHJjICE9IFg4NkVNVUxfT0tBWSkgfHwgIWNoZWNrX2VpcChldmV4X3Ztb3ZkX2Zyb21fcmVnKSAp CisgICAgICAgICAgICBnb3RvIGZhaWw7CisgICAgICAgIGFzbSAoICJ2bW92ZCAlMSwgJSV4bW0w XG5cdCIKKyAgICAgICAgICAgICAgInZwY21wZXFkICUlem1tMSwgJSV6bW0wLCAlJWswXG5cdCIK KyAgICAgICAgICAgICAgImttb3Z3ICUlazAsICUwIiA6ICI9ciIgKHJjKSA6ICJtIiAocmVzWzhd KSApOworICAgICAgICBpZiAoIHJjICE9IDB4ZmZmZiApCisgICAgICAgICAgICBnb3RvIGZhaWw7 CisgICAgICAgIHByaW50Zigib2theVxuIik7CisgICAgfQorICAgIGVsc2UKKyAgICAgICAgcHJp bnRmKCJza2lwcGVkXG4iKTsKKwogI2lmZGVmIF9feDg2XzY0X18KICAgICBwcmludGYoIiUtNDBz IiwgIlRlc3RpbmcgbW92cSAlbW0zLDMyKCVlY3gpLi4uIik7CiAgICAgaWYgKCBzdGFja19leGVj ICYmIGNwdV9oYXNfbW14ICkKQEAgLTI1ODQsNiArMjkwOCwzNiBAQCBpbnQgbWFpbihpbnQgYXJn YywgY2hhciAqKmFyZ3YpCiAgICAgZWxzZQogICAgICAgICBwcmludGYoInNraXBwZWRcbiIpOwog CisgICAgcHJpbnRmKCIlLTQwcyIsICJUZXN0aW5nIHtldmV4fSB2bW92cSAleG1tMTEsMzIoJWVj eCkuLi4iKTsKKyAgICBpZiAoIHN0YWNrX2V4ZWMgJiYgY3B1X2hhc19hdng1MTJmICkKKyAgICB7 CisgICAgICAgIGRlY2xfaW5zbihldmV4X3Ztb3ZxX3RvX21lbTIpOworCisgICAgICAgIGFzbSB2 b2xhdGlsZSAoICJwY21wZXFiICUleG1tMTEsICUleG1tMTFcbiIKKyNpZiAwIC8qIFRoaXMgbWF5 IG5vdCB3b3JrLCBhcyB0aGUgYXNzZW1ibGVyIG1pZ2h0IHBpY2sgb3Bjb2RlIEQ2LiAqLworICAg ICAgICAgICAgICAgICAgICAgICBwdXRfaW5zbihldmV4X3Ztb3ZxX3RvX21lbTIsCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICJ7ZXZleH0gdm1vdnEgJSV4bW0xMSwgMzIoJTApIikK KyNlbHNlCisgICAgICAgICAgICAgICAgICAgICAgIHB1dF9pbnNuKGV2ZXhfdm1vdnFfdG9fbWVt MiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi5ieXRlIDB4NjIsIDB4ZjEsIDB4 ZmQsIDB4MDgsIDB4N2UsIDB4NDksIDB4MDQiKQorI2VuZGlmCisgICAgICAgICAgICAgICAgICAg ICAgIDo6ICJjIiAoTlVMTCkgKTsKKworICAgICAgICBtZW1zZXQocmVzLCAweGJkLCA2NCk7Cisg ICAgICAgIHNldF9pbnNuKGV2ZXhfdm1vdnFfdG9fbWVtMik7CisgICAgICAgIHJlZ3MuZWN4ID0g KHVuc2lnbmVkIGxvbmcpcmVzOworICAgICAgICByZWdzLmVkeCA9IDA7CisgICAgICAgIHJjID0g eDg2X2VtdWxhdGUoJmN0eHQsICZlbXVsb3BzKTsKKyAgICAgICAgaWYgKCByYyAhPSBYODZFTVVM X09LQVkgfHwgIWNoZWNrX2VpcChldmV4X3Ztb3ZxX3RvX21lbTIpIHx8CisgICAgICAgICAgICAg KigobG9uZyAqKXJlcyArIDQpICsgMSB8fAorICAgICAgICAgICAgIG1lbWNtcChyZXMsIHJlcyAr IDEwLCAyNCkgfHwKKyAgICAgICAgICAgICBtZW1jbXAocmVzLCByZXMgKyA2LCA4KSApCisgICAg ICAgICAgICBnb3RvIGZhaWw7CisgICAgICAgIHByaW50Zigib2theVxuIik7CisgICAgfQorICAg IGVsc2UKKyAgICAgICAgcHJpbnRmKCJza2lwcGVkXG4iKTsKKwogICAgIHByaW50ZigiJS00MHMi LCAiVGVzdGluZyBtb3ZxICVtbTMsJXJieC4uLiIpOwogICAgIGlmICggc3RhY2tfZXhlYyAmJiBj cHVfaGFzX21teCApCiAgICAgewpAQCAtMjY0Myw2ICsyOTk3LDI4IEBAIGludCBtYWluKGludCBh cmdjLCBjaGFyICoqYXJndikKICAgICB9CiAgICAgZWxzZQogICAgICAgICBwcmludGYoInNraXBw ZWRcbiIpOworCisgICAgcHJpbnRmKCIlLTQwcyIsICJUZXN0aW5nIHZtb3ZxICV4bW0yMiwlcmJ4 Li4uIik7CisgICAgaWYgKCBzdGFja19leGVjICYmIGNwdV9oYXNfYXZ4NTEyZiApCisgICAgewor ICAgICAgICBkZWNsX2luc24oZXZleF92bW92cV90b19yZWcpOworCisgICAgICAgIC8qIFNlZSBj b21tZW50IG5leHQgdG8gbW92ZCBhYm92ZS4gKi8KKyAgICAgICAgYXNtIHZvbGF0aWxlICggInBj bXBlcXEgJSV4bW0yLCAlJXhtbTJcblx0IgorICAgICAgICAgICAgICAgICAgICAgICAidm1vdnEg JSV4bW0yLCAlJXhtbTIyXG4iCisgICAgICAgICAgICAgICAgICAgICAgIHB1dF9pbnNuKGV2ZXhf dm1vdnFfdG9fcmVnLCAidm1vdnEgJSV4bW0yMiwgJSVyYngiKQorICAgICAgICAgICAgICAgICAg ICAgICA6OiApOworCisgICAgICAgIHNldF9pbnNuKGV2ZXhfdm1vdnFfdG9fcmVnKTsKKyAgICAg ICAgcmVncy5yYnggPSAweGJkYmRiZGJkYmRiZGJkYmRVTDsKKyAgICAgICAgcmMgPSB4ODZfZW11 bGF0ZSgmY3R4dCwgJmVtdWxvcHMpOworICAgICAgICBpZiAoIHJjICE9IFg4NkVNVUxfT0tBWSB8 fCAhY2hlY2tfZWlwKGV2ZXhfdm1vdnFfdG9fcmVnKSB8fAorICAgICAgICAgICAgIHJlZ3MucmJ4 ICsgMSApCisgICAgICAgICAgICBnb3RvIGZhaWw7CisgICAgICAgIHByaW50Zigib2theVxuIik7 CisgICAgfQorICAgIGVsc2UKKyAgICAgICAgcHJpbnRmKCJza2lwcGVkXG4iKTsKICNlbmRpZgog CiAgICAgcHJpbnRmKCIlLTQwcyIsICJUZXN0aW5nIG1hc2ttb3ZxICVtbTQsJW1tNC4uLiIpOwpA QCAtMjgxMiw2ICszMTg4LDMyIEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKICAg ICAgICAgICAgIGdvdG8gZmFpbDsKICAgICAgICAgcHJpbnRmKCJva2F5XG4iKTsKICAgICB9Cisg ICAgZWxzZQorICAgICAgICBwcmludGYoInNraXBwZWRcbiIpOworCisgICAgcHJpbnRmKCIlLTQw cyIsICJUZXN0aW5nIHZtb3ZudGRxYSA2NCglZWN4KSwlem1tNC4uLiIpOworICAgIGlmICggc3Rh Y2tfZXhlYyAmJiBjcHVfaGFzX2F2eDUxMmYgKQorICAgIHsKKyAgICAgICAgZGVjbF9pbnNuKGV2 ZXhfdm1vdm50ZHFhKTsKKworICAgICAgICBhc20gdm9sYXRpbGUgKCAidnB4b3IgJSV4bW00LCAl JXhtbTQsICUleG1tNFxuIgorICAgICAgICAgICAgICAgICAgICAgICBwdXRfaW5zbihldmV4X3Zt b3ZudGRxYSwgInZtb3ZudGRxYSA2NCglMCksICUlem1tNCIpCisgICAgICAgICAgICAgICAgICAg ICAgIDo6ICJjIiAoTlVMTCkgKTsKKworICAgICAgICBzZXRfaW5zbihldmV4X3Ztb3ZudGRxYSk7 CisgICAgICAgIG1lbXNldChyZXMsIDB4NTUsIDE5Mik7CisgICAgICAgIG1lbXNldChyZXMgKyAx NiwgMHhmZiwgNjQpOworICAgICAgICByZWdzLmVjeCA9ICh1bnNpZ25lZCBsb25nKXJlczsKKyAg ICAgICAgcmMgPSB4ODZfZW11bGF0ZSgmY3R4dCwgJmVtdWxvcHMpOworICAgICAgICBpZiAoIHJj ICE9IFg4NkVNVUxfT0tBWSB8fCAhY2hlY2tfZWlwKGV2ZXhfdm1vdm50ZHFhKSApCisgICAgICAg ICAgICBnb3RvIGZhaWw7CisgICAgICAgIGFzbSAoICJ2cGJyb2FkY2FzdGQgJTEsICUlem1tMlxu XHQiCisgICAgICAgICAgICAgICJ2cGNtcGVxZCAlJXptbTQsICUlem1tMiwgJSVrMFxuXHQiCisg ICAgICAgICAgICAgICJrbW92dyAlJWswLCAlMCIgOiAiPXIiIChyYykgOiAiMCIgKH4wKSApOwor ICAgICAgICBpZiAoIHJjICE9IDB4ZmZmZiApCisgICAgICAgICAgICBnb3RvIGZhaWw7CisgICAg ICAgIHByaW50Zigib2theVxuIik7CisgICAgfQogICAgIGVsc2UKICAgICAgICAgcHJpbnRmKCJz a2lwcGVkXG4iKTsKIAotLS0gYS90b29scy90ZXN0cy94ODZfZW11bGF0b3IveDg2LWVtdWxhdGUu YworKysgYi90b29scy90ZXN0cy94ODZfZW11bGF0b3IveDg2LWVtdWxhdGUuYwpAQCAtMjIyLDYg KzIyMiw3IEBAIGludCBlbXVsX3Rlc3RfZ2V0X2ZwdSgKICAgICAgICAgaWYgKCBjcHVfaGFzX2F2 eCApCiAgICAgICAgICAgICBicmVhazsKICAgICBjYXNlIFg4NkVNVUxfRlBVX29wbWFzazoKKyAg ICBjYXNlIFg4NkVNVUxfRlBVX3ptbToKICAgICAgICAgaWYgKCBjcHVfaGFzX2F2eDUxMmYgKQog ICAgICAgICAgICAgYnJlYWs7CiAgICAgZGVmYXVsdDoKLS0tIGEvdG9vbHMvdGVzdHMveDg2X2Vt dWxhdG9yL3g4Ni1lbXVsYXRlLmgKKysrIGIvdG9vbHMvdGVzdHMveDg2X2VtdWxhdG9yL3g4Ni1l bXVsYXRlLmgKQEAgLTEzMiw2ICsxMzIsNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgeGNyMF9tYXNr KHVpbnQ2NF90IG1hCiAjZGVmaW5lIGNwdV9oYXNfYXZ4NTEyZiAgIChjcC5mZWF0LmF2eDUxMmYg ICYmIHhjcjBfbWFzaygweGU2KSkKICNkZWZpbmUgY3B1X2hhc19hdng1MTJkcSAgKGNwLmZlYXQu YXZ4NTEyZHEgJiYgeGNyMF9tYXNrKDB4ZTYpKQogI2RlZmluZSBjcHVfaGFzX2F2eDUxMmJ3ICAo Y3AuZmVhdC5hdng1MTJidyAmJiB4Y3IwX21hc2soMHhlNikpCisjZGVmaW5lIGNwdV9oYXNfYXZ4 NTEydmwgIChjcC5mZWF0LmF2eDUxMnZsICYmIHhjcjBfbWFzaygweGU2KSkKIAogI2RlZmluZSBj cHVfaGFzX3hnZXRidjEgICAoY3B1X2hhc194c2F2ZSAmJiBjcC54c3RhdGUueGdldGJ2MSkKIAot LS0gYS94ZW4vYXJjaC94ODYveDg2X2VtdWxhdGUveDg2X2VtdWxhdGUuYworKysgYi94ZW4vYXJj aC94ODYveDg2X2VtdWxhdGUveDg2X2VtdWxhdGUuYwpAQCAtMjQzLDkgKzI0MywyNyBAQCBlbnVt IHNpbWRfb3BzaXplIHsKIH07CiB0eXBlZGVmIHVpbnQ4X3Qgc2ltZF9vcHNpemVfdDsKIAorZW51 bSBkaXNwOHNjYWxlIHsKKyAgICAvKiBWYWx1ZXMgMCAuLi4gNCBhcmUgZXhwbGljaXQgc2l6ZXMu ICovCisgICAgZDhzX2J3ID0gNSwKKyAgICBkOHNfZHEsCisgICAgLyogRVZFWC5XIGlnbm9yZWQg b3V0c2lkZSBvZiA2NC1iaXQgbW9kZSAqLworICAgIGQ4c19kcTY0LAorICAgIC8qCisgICAgICog QWxsIGZ1cnRoZXIgdmFsdWVzIG11c3Qgc3RyaWN0bHkgYmUgbGFzdCBhbmQgaW4gdGhlIG9yZGVy CisgICAgICogZ2l2ZW4gc28gdGhhdCBhcml0aG1ldGljIG9uIHRoZSB2YWx1ZXMgd29ya3MuCisg ICAgICovCisgICAgZDhzX3ZsLAorICAgIGQ4c192bF9ieV8yLAorICAgIGQ4c192bF9ieV80LAor ICAgIGQ4c192bF9ieV84LAorfTsKK3R5cGVkZWYgdWludDhfdCBkaXNwOHNjYWxlX3Q7CisKIHN0 YXRpYyBjb25zdCBzdHJ1Y3QgdHdvYnl0ZV90YWJsZSB7CiAgICAgb3Bjb2RlX2Rlc2NfdCBkZXNj OwotICAgIHNpbWRfb3BzaXplX3Qgc2l6ZTsKKyAgICBzaW1kX29wc2l6ZV90IHNpemU6NDsKKyAg ICBkaXNwOHNjYWxlX3QgZDhzOjQ7CiB9IHR3b2J5dGVfdGFibGVbMjU2XSA9IHsKICAgICBbMHgw MF0gPSB7IE1vZFJNIH0sCiAgICAgWzB4MDFdID0geyBJbXBsaWNpdE9wc3xNb2RSTSB9LApAQCAt MjYwLDggKzI3OCw4IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgdHdvYnl0ZV90YWJsZSB7CiAgICAg WzB4MGRdID0geyBJbXBsaWNpdE9wc3xNb2RSTSB9LAogICAgIFsweDBlXSA9IHsgSW1wbGljaXRP cHMgfSwKICAgICBbMHgwZl0gPSB7IE1vZFJNfFNyY0ltbUJ5dGUgfSwKLSAgICBbMHgxMF0gPSB7 IERzdEltcGxpY2l0fFNyY01lbXxNb2RSTXxNb3YsIHNpbWRfYW55X2ZwIH0sCi0gICAgWzB4MTFd ID0geyBEc3RNZW18U3JjSW1wbGljaXR8TW9kUk18TW92LCBzaW1kX2FueV9mcCB9LAorICAgIFsw eDEwXSA9IHsgRHN0SW1wbGljaXR8U3JjTWVtfE1vZFJNfE1vdiwgc2ltZF9hbnlfZnAsIGQ4c192 bCB9LAorICAgIFsweDExXSA9IHsgRHN0TWVtfFNyY0ltcGxpY2l0fE1vZFJNfE1vdiwgc2ltZF9h bnlfZnAsIGQ4c192bCB9LAogICAgIFsweDEyXSA9IHsgRHN0SW1wbGljaXR8U3JjTWVtfE1vZFJN fE1vdiwgc2ltZF9vdGhlciB9LAogICAgIFsweDEzXSA9IHsgRHN0TWVtfFNyY0ltcGxpY2l0fE1v ZFJNfE1vdiwgc2ltZF9vdGhlciB9LAogICAgIFsweDE0IC4uLiAweDE1XSA9IHsgRHN0SW1wbGlj aXR8U3JjTWVtfE1vZFJNLCBzaW1kX3BhY2tlZF9mcCB9LApAQCAtMjcwLDEwICsyODgsMTAgQEAg c3RhdGljIGNvbnN0IHN0cnVjdCB0d29ieXRlX3RhYmxlIHsKICAgICBbMHgxOCAuLi4gMHgxZl0g PSB7IEltcGxpY2l0T3BzfE1vZFJNIH0sCiAgICAgWzB4MjAgLi4uIDB4MjFdID0geyBEc3RNZW18 U3JjSW1wbGljaXR8TW9kUk0gfSwKICAgICBbMHgyMiAuLi4gMHgyM10gPSB7IERzdEltcGxpY2l0 fFNyY01lbXxNb2RSTSB9LAotICAgIFsweDI4XSA9IHsgRHN0SW1wbGljaXR8U3JjTWVtfE1vZFJN fE1vdiwgc2ltZF9wYWNrZWRfZnAgfSwKLSAgICBbMHgyOV0gPSB7IERzdE1lbXxTcmNJbXBsaWNp dHxNb2RSTXxNb3YsIHNpbWRfcGFja2VkX2ZwIH0sCisgICAgWzB4MjhdID0geyBEc3RJbXBsaWNp dHxTcmNNZW18TW9kUk18TW92LCBzaW1kX3BhY2tlZF9mcCwgZDhzX3ZsIH0sCisgICAgWzB4Mjld ID0geyBEc3RNZW18U3JjSW1wbGljaXR8TW9kUk18TW92LCBzaW1kX3BhY2tlZF9mcCwgZDhzX3Zs IH0sCiAgICAgWzB4MmFdID0geyBEc3RJbXBsaWNpdHxTcmNNZW18TW9kUk18TW92LCBzaW1kX290 aGVyIH0sCi0gICAgWzB4MmJdID0geyBEc3RNZW18U3JjSW1wbGljaXR8TW9kUk18TW92LCBzaW1k X2FueV9mcCB9LAorICAgIFsweDJiXSA9IHsgRHN0TWVtfFNyY0ltcGxpY2l0fE1vZFJNfE1vdiwg c2ltZF9hbnlfZnAsIGQ4c192bCB9LAogICAgIFsweDJjIC4uLiAweDJkXSA9IHsgRHN0SW1wbGlj aXR8U3JjTWVtfE1vZFJNfE1vdiwgc2ltZF9vdGhlciB9LAogICAgIFsweDJlIC4uLiAweDJmXSA9 IHsgSW1wbGljaXRPcHN8TW9kUk18VHdvT3AgfSwKICAgICBbMHgzMCAuLi4gMHgzNV0gPSB7IElt cGxpY2l0T3BzIH0sCkBAIC0yOTIsOCArMzEwLDggQEAgc3RhdGljIGNvbnN0IHN0cnVjdCB0d29i eXRlX3RhYmxlIHsKICAgICBbMHg2MyAuLi4gMHg2N10gPSB7IERzdEltcGxpY2l0fFNyY01lbXxN b2RSTSwgc2ltZF9wYWNrZWRfaW50IH0sCiAgICAgWzB4NjggLi4uIDB4NmFdID0geyBEc3RJbXBs aWNpdHxTcmNNZW18TW9kUk0sIHNpbWRfb3RoZXIgfSwKICAgICBbMHg2YiAuLi4gMHg2ZF0gPSB7 IERzdEltcGxpY2l0fFNyY01lbXxNb2RSTSwgc2ltZF9wYWNrZWRfaW50IH0sCi0gICAgWzB4NmVd ID0geyBEc3RJbXBsaWNpdHxTcmNNZW18TW9kUk18TW92IH0sCi0gICAgWzB4NmZdID0geyBEc3RJ bXBsaWNpdHxTcmNNZW18TW9kUk18TW92LCBzaW1kX3BhY2tlZF9pbnQgfSwKKyAgICBbMHg2ZV0g PSB7IERzdEltcGxpY2l0fFNyY01lbXxNb2RSTXxNb3YsIHNpbWRfbm9uZSwgZDhzX2RxNjQgfSwK KyAgICBbMHg2Zl0gPSB7IERzdEltcGxpY2l0fFNyY01lbXxNb2RSTXxNb3YsIHNpbWRfcGFja2Vk X2ludCwgZDhzX3ZsIH0sCiAgICAgWzB4NzBdID0geyBTcmNJbW1CeXRlfE1vZFJNfFR3b09wLCBz aW1kX290aGVyIH0sCiAgICAgWzB4NzEgLi4uIDB4NzNdID0geyBEc3RJbXBsaWNpdHxTcmNJbW1C eXRlfE1vZFJNIH0sCiAgICAgWzB4NzQgLi4uIDB4NzZdID0geyBEc3RJbXBsaWNpdHxTcmNNZW18 TW9kUk0sIHNpbWRfcGFja2VkX2ludCB9LApAQCAtMzAxLDggKzMxOSw4IEBAIHN0YXRpYyBjb25z dCBzdHJ1Y3QgdHdvYnl0ZV90YWJsZSB7CiAgICAgWzB4NzhdID0geyBJbXBsaWNpdE9wc3xNb2RS TSB9LAogICAgIFsweDc5XSA9IHsgRHN0UmVnfFNyY01lbXxNb2RSTSwgc2ltZF9wYWNrZWRfaW50 IH0sCiAgICAgWzB4N2MgLi4uIDB4N2RdID0geyBEc3RJbXBsaWNpdHxTcmNNZW18TW9kUk0sIHNp bWRfb3RoZXIgfSwKLSAgICBbMHg3ZV0gPSB7IERzdE1lbXxTcmNJbXBsaWNpdHxNb2RSTXxNb3Yg fSwKLSAgICBbMHg3Zl0gPSB7IERzdE1lbXxTcmNJbXBsaWNpdHxNb2RSTXxNb3YsIHNpbWRfcGFj a2VkX2ludCB9LAorICAgIFsweDdlXSA9IHsgRHN0TWVtfFNyY0ltcGxpY2l0fE1vZFJNfE1vdiwg c2ltZF9ub25lLCBkOHNfZHE2NCB9LAorICAgIFsweDdmXSA9IHsgRHN0TWVtfFNyY0ltcGxpY2l0 fE1vZFJNfE1vdiwgc2ltZF9wYWNrZWRfaW50LCBkOHNfdmwgfSwKICAgICBbMHg4MCAuLi4gMHg4 Zl0gPSB7IERzdEltcGxpY2l0fFNyY0ltbSB9LAogICAgIFsweDkwIC4uLiAweDlmXSA9IHsgQnl0 ZU9wfERzdE1lbXxTcmNOb25lfE1vZFJNfE1vdiB9LAogICAgIFsweGEwIC4uLiAweGExXSA9IHsg SW1wbGljaXRPcHN8TW92IH0sCkBAIC0zNDQsMTQgKzM2MiwxNCBAQCBzdGF0aWMgY29uc3Qgc3Ry dWN0IHR3b2J5dGVfdGFibGUgewogICAgIFsweGQwXSA9IHsgRHN0SW1wbGljaXR8U3JjTWVtfE1v ZFJNLCBzaW1kX290aGVyIH0sCiAgICAgWzB4ZDEgLi4uIDB4ZDNdID0geyBEc3RJbXBsaWNpdHxT cmNNZW18TW9kUk0sIHNpbWRfb3RoZXIgfSwKICAgICBbMHhkNCAuLi4gMHhkNV0gPSB7IERzdElt cGxpY2l0fFNyY01lbXxNb2RSTSwgc2ltZF9wYWNrZWRfaW50IH0sCi0gICAgWzB4ZDZdID0geyBE c3RNZW18U3JjSW1wbGljaXR8TW9kUk18TW92LCBzaW1kX290aGVyIH0sCisgICAgWzB4ZDZdID0g eyBEc3RNZW18U3JjSW1wbGljaXR8TW9kUk18TW92LCBzaW1kX290aGVyLCAzIH0sCiAgICAgWzB4 ZDddID0geyBEc3RSZWd8U3JjSW1wbGljaXR8TW9kUk18TW92IH0sCiAgICAgWzB4ZDggLi4uIDB4 ZGZdID0geyBEc3RJbXBsaWNpdHxTcmNNZW18TW9kUk0sIHNpbWRfcGFja2VkX2ludCB9LAogICAg IFsweGUwXSA9IHsgRHN0SW1wbGljaXR8U3JjTWVtfE1vZFJNLCBzaW1kX3BhY2tlZF9pbnQgfSwK ICAgICBbMHhlMSAuLi4gMHhlMl0gPSB7IERzdEltcGxpY2l0fFNyY01lbXxNb2RSTSwgc2ltZF9v dGhlciB9LAogICAgIFsweGUzIC4uLiAweGU1XSA9IHsgRHN0SW1wbGljaXR8U3JjTWVtfE1vZFJN LCBzaW1kX3BhY2tlZF9pbnQgfSwKICAgICBbMHhlNl0gPSB7IERzdEltcGxpY2l0fFNyY01lbXxN b2RSTXxNb3YsIHNpbWRfb3RoZXIgfSwKLSAgICBbMHhlN10gPSB7IERzdE1lbXxTcmNJbXBsaWNp dHxNb2RSTXxNb3YsIHNpbWRfcGFja2VkX2ludCB9LAorICAgIFsweGU3XSA9IHsgRHN0TWVtfFNy Y0ltcGxpY2l0fE1vZFJNfE1vdiwgc2ltZF9wYWNrZWRfaW50LCBkOHNfdmwgfSwKICAgICBbMHhl OCAuLi4gMHhlZl0gPSB7IERzdEltcGxpY2l0fFNyY01lbXxNb2RSTSwgc2ltZF9wYWNrZWRfaW50 IH0sCiAgICAgWzB4ZjBdID0geyBEc3RJbXBsaWNpdHxTcmNNZW18TW9kUk18TW92LCBzaW1kX290 aGVyIH0sCiAgICAgWzB4ZjEgLi4uIDB4ZjNdID0geyBEc3RJbXBsaWNpdHxTcmNNZW18TW9kUk0s IHNpbWRfb3RoZXIgfSwKQEAgLTQwNiw2ICs0MjQsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGV4 dDBmMzhfdGFibGUgewogICAgIHVpbnQ4X3QgdG9fbWVtOjE7CiAgICAgdWludDhfdCB0d29fb3A6 MTsKICAgICB1aW50OF90IHZzaWI6MTsKKyAgICBkaXNwOHNjYWxlX3QgZDhzOjQ7CiB9IGV4dDBm MzhfdGFibGVbMjU2XSA9IHsKICAgICBbMHgwMCAuLi4gMHgwYl0gPSB7IC5zaW1kX3NpemUgPSBz aW1kX3BhY2tlZF9pbnQgfSwKICAgICBbMHgwYyAuLi4gMHgwZl0gPSB7IC5zaW1kX3NpemUgPSBz aW1kX3BhY2tlZF9mcCB9LApAQCAtNDE4LDcgKzQzNyw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3Qg ZXh0MGYzOF90YWJsZSB7CiAgICAgWzB4MWMgLi4uIDB4MWVdID0geyAuc2ltZF9zaXplID0gc2lt ZF9wYWNrZWRfaW50LCAudHdvX29wID0gMSB9LAogICAgIFsweDIwIC4uLiAweDI1XSA9IHsgLnNp bWRfc2l6ZSA9IHNpbWRfb3RoZXIsIC50d29fb3AgPSAxIH0sCiAgICAgWzB4MjggLi4uIDB4Mjld ID0geyAuc2ltZF9zaXplID0gc2ltZF9wYWNrZWRfaW50IH0sCi0gICAgWzB4MmFdID0geyAuc2lt ZF9zaXplID0gc2ltZF9wYWNrZWRfaW50LCAudHdvX29wID0gMSB9LAorICAgIFsweDJhXSA9IHsg LnNpbWRfc2l6ZSA9IHNpbWRfcGFja2VkX2ludCwgLnR3b19vcCA9IDEsIC5kOHMgPSBkOHNfdmwg fSwKICAgICBbMHgyYl0gPSB7IC5zaW1kX3NpemUgPSBzaW1kX3BhY2tlZF9pbnQgfSwKICAgICBb MHgyYyAuLi4gMHgyZF0gPSB7IC5zaW1kX3NpemUgPSBzaW1kX290aGVyIH0sCiAgICAgWzB4MmUg Li4uIDB4MmZdID0geyAuc2ltZF9zaXplID0gc2ltZF9vdGhlciwgLnRvX21lbSA9IDEgfSwKQEAg LTY1Niw2ICs2NzUsMjIgQEAgdW5pb24gZXZleCB7CiAgICAgfTsKIH07CiAKKyNkZWZpbmUgRVZF WF9QRlhfQllURVMgNAorI2RlZmluZSBpbml0X2V2ZXgoc3R1YikgKHsgXAorICAgIHVpbnQ4X3Qg KmJ1Zl8gPSBnZXRfc3R1YihzdHViKTsgXAorICAgIGJ1Zl9bMF0gPSAweDYyOyBcCisgICAgYnVm XyArIEVWRVhfUEZYX0JZVEVTOyBcCit9KQorCisjZGVmaW5lIGNvcHlfRVZFWChwdHIsIGV2ZXgp ICh7IFwKKyAgICBpZiAoICFtb2RlXzY0Yml0KCkgKSBcCisgICAgICAgIChldmV4KS5yZWcgfD0g ODsgXAorICAgIChwdHIpWzEgLSBFVkVYX1BGWF9CWVRFU10gPSAoZXZleCkucmF3WzBdOyBcCisg ICAgKHB0cilbMiAtIEVWRVhfUEZYX0JZVEVTXSA9IChldmV4KS5yYXdbMV07IFwKKyAgICAocHRy KVszIC0gRVZFWF9QRlhfQllURVNdID0gKGV2ZXgpLnJhd1syXTsgXAorICAgIGNvbnRhaW5lcl9v ZigocHRyKSArIDEgLSBFVkVYX1BGWF9CWVRFUywgdHlwZW9mKGV2ZXgpLCByYXdbMF0pOyBcCit9 KQorCiAjZGVmaW5lIHJlcF9wcmVmaXgoKSAgICh2ZXgucGZ4ID49IHZleF9mMykKICNkZWZpbmUg cmVwZV9wcmVmaXgoKSAgKHZleC5wZnggPT0gdmV4X2YzKQogI2RlZmluZSByZXBuZV9wcmVmaXgo KSAodmV4LnBmeCA9PSB2ZXhfZjIpCkBAIC03NjgsNiArODAzLDcgQEAgdHlwZWRlZiB1bmlvbiB7 CiAgICAgdWludDY0X3QgbW14OwogICAgIHVpbnQ2NF90IF9fYXR0cmlidXRlX18gKChhbGlnbmVk KDE2KSkpIHhtbVsyXTsKICAgICB1aW50NjRfdCBfX2F0dHJpYnV0ZV9fICgoYWxpZ25lZCgzMikp KSB5bW1bNF07CisgICAgdWludDY0X3QgX19hdHRyaWJ1dGVfXyAoKGFsaWduZWQoNjQpKSkgem1t WzhdOwogfSBtbXZhbF90OwogCiAvKgpAQCAtMTIwMSw2ICsxMjM3LDExIEBAIHN0YXRpYyBpbnQg X2dldF9mcHUoCiAKICAgICBzd2l0Y2ggKCB0eXBlICkKICAgICB7CisgICAgY2FzZSBYODZFTVVM X0ZQVV96bW06CisgICAgICAgIGlmICggISh4Y3IwICYgWDg2X1hDUjBfWk1NKSB8fCAhKHhjcjAg JiBYODZfWENSMF9ISV9aTU0pIHx8CisgICAgICAgICAgICAgISh4Y3IwICYgWDg2X1hDUjBfT1BN QVNLKSApCisgICAgICAgICAgICByZXR1cm4gWDg2RU1VTF9VTkhBTkRMRUFCTEU7CisgICAgICAg IC8qIGZhbGwgdGhyb3VnaCAqLwogICAgIGNhc2UgWDg2RU1VTF9GUFVfeW1tOgogICAgICAgICBp ZiAoICEoeGNyMCAmIFg4Nl9YQ1IwX1NTRSkgfHwgISh4Y3IwICYgWDg2X1hDUjBfWU1NKSApCiAg ICAgICAgICAgICByZXR1cm4gWDg2RU1VTF9VTkhBTkRMRUFCTEU7CkBAIC0xNzg3LDYgKzE4Mjgs NyBAQCBzdGF0aWMgYm9vbCB2Y3B1X2hhcygKICNkZWZpbmUgdmNwdV9oYXNfY2x3YigpICAgICAg ICB2Y3B1X2hhcyggICAgICAgICA3LCBFQlgsIDI0LCBjdHh0LCBvcHMpCiAjZGVmaW5lIHZjcHVf aGFzX3NoYSgpICAgICAgICAgdmNwdV9oYXMoICAgICAgICAgNywgRUJYLCAyOSwgY3R4dCwgb3Bz KQogI2RlZmluZSB2Y3B1X2hhc19hdng1MTJidygpICAgIHZjcHVfaGFzKCAgICAgICAgIDcsIEVC WCwgMzAsIGN0eHQsIG9wcykKKyNkZWZpbmUgdmNwdV9oYXNfYXZ4NTEydmwoKSAgICB2Y3B1X2hh cyggICAgICAgICA3LCBFQlgsIDMxLCBjdHh0LCBvcHMpCiAjZGVmaW5lIHZjcHVfaGFzX3JkcGlk KCkgICAgICAgdmNwdV9oYXMoICAgICAgICAgNywgRUNYLCAyMiwgY3R4dCwgb3BzKQogI2RlZmlu ZSB2Y3B1X2hhc19jbHplcm8oKSAgICAgIHZjcHVfaGFzKDB4ODAwMDAwMDgsIEVCWCwgIDAsIGN0 eHQsIG9wcykKIApAQCAtMjE2MCw2ICsyMjAyLDY1IEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nICpk ZWNvZGVfdmV4X2dwcigKICAgICByZXR1cm4gZGVjb2RlX2dwcihyZWdzLCB+dmV4X3JlZyAmICht b2RlXzY0Yml0KCkgPyAweGYgOiA3KSk7CiB9CiAKK3N0YXRpYyB1bnNpZ25lZCBpbnQgZGVjb2Rl X2Rpc3A4c2NhbGUoZW51bSBkaXNwOHNjYWxlIHNjYWxlLAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3QgeDg2X2VtdWxhdGVfc3RhdGUgKnN0YXRlKQor eworICAgIHN3aXRjaCAoIHNjYWxlICkKKyAgICB7CisgICAgY2FzZSBkOHNfYnc6CisgICAgICAg IHJldHVybiBzdGF0ZS0+ZXZleC53OworCisgICAgZGVmYXVsdDoKKyAgICAgICAgaWYgKCBzY2Fs ZSA8IGQ4c192bCApCisgICAgICAgICAgICByZXR1cm4gc2NhbGU7CisgICAgICAgIGlmICggc3Rh dGUtPmV2ZXguYnIgKQorICAgICAgICB7CisgICAgY2FzZSBkOHNfZHE6CisgICAgICAgICAgICBy ZXR1cm4gMiArIHN0YXRlLT5ldmV4Lnc7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisKKyAg ICBjYXNlIGQ4c19kcTY0OgorICAgICAgICByZXR1cm4gMiArIChzdGF0ZS0+b3BfYnl0ZXMgPT0g OCk7CisgICAgfQorCisgICAgc3dpdGNoICggc3RhdGUtPnNpbWRfc2l6ZSApCisgICAgeworICAg IGNhc2Ugc2ltZF9hbnlfZnA6CisgICAgY2FzZSBzaW1kX3NpbmdsZV9mcDoKKyAgICAgICAgaWYg KCAhKHN0YXRlLT5ldmV4LnBmeCAmIFZFWF9QUkVGSVhfU0NBTEFSX01BU0spICkKKyAgICAgICAg ICAgIGJyZWFrOworICAgICAgICAvKiBmYWxsIHRocm91Z2ggKi8KKyAgICBjYXNlIHNpbWRfc2Nh bGFyX29wYzoKKyAgICBjYXNlIHNpbWRfc2NhbGFyX3ZleHc6CisgICAgICAgIHJldHVybiAyICsg c3RhdGUtPmV2ZXgudzsKKworICAgIGNhc2Ugc2ltZF8xMjg6CisgICAgICAgIC8qIFRoZXNlIHNo b3VsZCBoYXZlIGFuIGV4cGxpY2l0IHNpemUgc3BlY2lmaWVkLiAqLworICAgICAgICBBU1NFUlRf VU5SRUFDSEFCTEUoKTsKKyAgICAgICAgcmV0dXJuIDQ7CisKKyAgICBkZWZhdWx0OgorICAgICAg ICBicmVhazsKKyAgICB9CisKKyAgICByZXR1cm4gNCArIHN0YXRlLT5ldmV4LmxyIC0gKHNjYWxl IC0gZDhzX3ZsKTsKK30KKworI2RlZmluZSBhdng1MTJfdmxlbl9jaGVjayhsaWcpIGRvIHsgXAor ICAgIHN3aXRjaCAoIGV2ZXgubHIgKSBcCisgICAgeyBcCisgICAgZGVmYXVsdDogXAorICAgICAg ICBnZW5lcmF0ZV9leGNlcHRpb24oRVhDX1VEKTsgXAorICAgIGNhc2UgMjogXAorICAgICAgICBi cmVhazsgXAorICAgIGNhc2UgMDogY2FzZSAxOiBcCisgICAgICAgIGlmICggIShsaWcpICkgXAor ICAgICAgICAgICAgaG9zdF9hbmRfdmNwdV9tdXN0X2hhdmUoYXZ4NTEydmwpOyBcCisgICAgICAg IGJyZWFrOyBcCisgICAgfSBcCit9IHdoaWxlICggZmFsc2UgKQorCiBzdGF0aWMgYm9vbCBpc19h bGlnbmVkKGVudW0geDg2X3NlZ21lbnQgc2VnLCB1bnNpZ25lZCBsb25nIG9mZnMsCiAgICAgICAg ICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBzaXplLCBzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4 dCAqY3R4dCwKICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0IHg4Nl9lbXVsYXRl X29wcyAqb3BzKQpAQCAtMjQwNiw2ICsyNTA3LDcgQEAgeDg2X2RlY29kZV90d29ieXRlKAogICAg ICAgICBpZiAoIHZleC5wZnggPT0gdmV4X2YzICkgLyogbW92cSB4bW0vbTY0LHhtbSAqLwogICAg ICAgICB7CiAgICAgY2FzZSBYODZFTVVMX09QQ19WRVhfRjMoMCwgMHg3ZSk6IC8qIHZtb3ZxIHht bS9tNjQseG1tICovCisgICAgY2FzZSBYODZFTVVMX09QQ19FVkVYX0YzKDAsIDB4N2UpOiAvKiB2 bW92cSB4bW0vbTY0LHhtbSAqLwogICAgICAgICAgICAgc3RhdGUtPmRlc2MgPSBEc3RJbXBsaWNp dCB8IFNyY01lbSB8IFR3b09wOwogICAgICAgICAgICAgc3RhdGUtPnNpbWRfc2l6ZSA9IHNpbWRf b3RoZXI7CiAgICAgICAgICAgICAvKiBBdm9pZCB0aGUgc3RhdGUtPmRlc2MgY2xvYmJlcmluZyBv ZiBUd29PcCBiZWxvdy4gKi8KQEAgLTI0NzYsNyArMjU3OCw3IEBAIHg4Nl9kZWNvZGVfdHdvYnl0 ZSgKICAgICB9CiAKICAgICAvKgotICAgICAqIFNjYWxhciBmb3JtcyBvZiBtb3N0IFZFWC1lbmNv ZGVkIFR3b09wIGluc3RydWN0aW9ucyBoYXZlCisgICAgICogU2NhbGFyIGZvcm1zIG9mIG1vc3Qg VkVYLS9FVkVYLWVuY29kZWQgVHdvT3AgaW5zdHJ1Y3Rpb25zIGhhdmUKICAgICAgKiB0aHJlZSBv cGVyYW5kcy4gIFRob3NlIHdoaWNoIGRvIHJlYWxseSBoYXZlIHR3byBvcGVyYW5kcwogICAgICAq IHNob3VsZCBoYXZlIGV4aXRlZCBlYXJsaWVyLgogICAgICAqLwpAQCAtMjg0MSw2ICsyOTQzLDgg QEAgeDg2X2RlY29kZSgKIAogICAgIGlmICggZCAmIE1vZFJNICkKICAgICB7CisgICAgICAgIHVu c2lnbmVkIGludCBkaXNwOHNjYWxlID0gMDsKKwogICAgICAgICBkICY9IH5Nb2RSTTsKICN1bmRl ZiBNb2RSTSAvKiBPbmx5IGl0cyBhbGlhc2VzIGFyZSB2YWxpZCB0byB1c2UgZnJvbSBoZXJlIG9u LiAqLwogICAgICAgICBtb2RybV9yZWcgPSAoKHJleF9wcmVmaXggJiA0KSA8PCAxKSB8ICgobW9k cm0gJiAweDM4KSA+PiAzKTsKQEAgLTI4ODMsNiArMjk4Nyw5IEBAIHg4Nl9kZWNvZGUoCiAgICAg ICAgICAgICBicmVhazsKIAogICAgICAgICBjYXNlIGV4dF8wZjoKKyAgICAgICAgICAgIGlmICgg ZXZleF9lbmNvZGVkKCkgKQorICAgICAgICAgICAgICAgIGRpc3A4c2NhbGUgPSBkZWNvZGVfZGlz cDhzY2FsZSh0d29ieXRlX3RhYmxlW2JdLmQ4cywgc3RhdGUpOworCiAgICAgICAgICAgICBzd2l0 Y2ggKCBiICkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgIGNhc2UgMHgyMDogLyogbW92IGNy LHJlZyAqLwpAQCAtMjg5Niw2ICszMDAzLDExIEBAIHg4Nl9kZWNvZGUoCiAgICAgICAgICAgICAg ICAgICovCiAgICAgICAgICAgICAgICAgbW9kcm1fbW9kID0gMzsKICAgICAgICAgICAgICAgICBi cmVhazsKKworICAgICAgICAgICAgY2FzZSAweDdlOiAvKiB2bW92cSB4bW0vbTY0LHhtbSBuZWVk cyBzcGVjaWFsIGNhc2luZyAqLworICAgICAgICAgICAgICAgIGlmICggZGlzcDhzY2FsZSA9PSAy ICYmIGV2ZXgucGZ4ID09IHZleF9mMyApCisgICAgICAgICAgICAgICAgICAgIGRpc3A4c2NhbGUg PSAzOworICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICAgICAg YnJlYWs7CiAKQEAgLTI5MDcsNiArMzAxOSw4IEBAIHg4Nl9kZWNvZGUoCiAgICAgICAgICAgICBp ZiAoIGV4dDBmMzhfdGFibGVbYl0udnNpYiApCiAgICAgICAgICAgICAgICAgZCB8PSB2U0lCOwog ICAgICAgICAgICAgc3RhdGUtPnNpbWRfc2l6ZSA9IGV4dDBmMzhfdGFibGVbYl0uc2ltZF9zaXpl OworICAgICAgICAgICAgaWYgKCBldmV4X2VuY29kZWQoKSApCisgICAgICAgICAgICAgICAgZGlz cDhzY2FsZSA9IGRlY29kZV9kaXNwOHNjYWxlKGV4dDBmMzhfdGFibGVbYl0uZDhzLCBzdGF0ZSk7 CiAgICAgICAgICAgICBicmVhazsKIAogICAgICAgICBjYXNlIGV4dF84ZjA5OgpAQCAtMjk3NSw3 ICszMDg5LDcgQEAgeDg2X2RlY29kZSgKICAgICAgICAgICAgICAgICAgICAgZWEubWVtLm9mZiA9 IGluc25fZmV0Y2hfdHlwZShpbnQxNl90KTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAg ICAgICAgIGNhc2UgMToKLSAgICAgICAgICAgICAgICBlYS5tZW0ub2ZmICs9IGluc25fZmV0Y2hf dHlwZShpbnQ4X3QpOworICAgICAgICAgICAgICAgIGVhLm1lbS5vZmYgKz0gaW5zbl9mZXRjaF90 eXBlKGludDhfdCkgPDwgZGlzcDhzY2FsZTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAg ICAgICAgIGNhc2UgMjoKICAgICAgICAgICAgICAgICBlYS5tZW0ub2ZmICs9IGluc25fZmV0Y2hf dHlwZShpbnQxNl90KTsKQEAgLTMwMzQsNyArMzE0OCw3IEBAIHg4Nl9kZWNvZGUoCiAgICAgICAg ICAgICAgICAgcGNfcmVsID0gbW9kZV82NGJpdCgpOwogICAgICAgICAgICAgICAgIGJyZWFrOwog ICAgICAgICAgICAgY2FzZSAxOgotICAgICAgICAgICAgICAgIGVhLm1lbS5vZmYgKz0gaW5zbl9m ZXRjaF90eXBlKGludDhfdCk7CisgICAgICAgICAgICAgICAgZWEubWVtLm9mZiArPSBpbnNuX2Zl dGNoX3R5cGUoaW50OF90KSA8PCBkaXNwOHNjYWxlOwogICAgICAgICAgICAgICAgIGJyZWFrOwog ICAgICAgICAgICAgY2FzZSAyOgogICAgICAgICAgICAgICAgIGVhLm1lbS5vZmYgKz0gaW5zbl9m ZXRjaF90eXBlKGludDMyX3QpOwpAQCAtMzIzNSwxMCArMzM0OSwxMSBAQCB4ODZfZW11bGF0ZSgK ICAgICBzdHJ1Y3QgeDg2X2VtdWxhdGVfc3RhdGUgc3RhdGU7CiAgICAgaW50IHJjLCBjcjRfcmM7 CiAgICAgdWludDhfdCBiLCBkLCAqb3BjID0gTlVMTDsKLSAgICB1bnNpZ25lZCBpbnQgZmlyc3Rf Ynl0ZSA9IDAsIGluc25fYnl0ZXMgPSAwOworICAgIHVuc2lnbmVkIGludCBmaXJzdF9ieXRlID0g MCwgZWxlbV9ieXRlcywgaW5zbl9ieXRlcyA9IDA7CisgICAgdWludDY0X3Qgb3BfbWFzayA9IH4w VUxMOwogICAgIGJvb2wgc2luZ2xlc3RlcCA9IChfcmVncy5lZmxhZ3MgJiBYODZfRUZMQUdTX1RG KSAmJgogCSAgICAhaXNfYnJhbmNoX3N0ZXAoY3R4dCwgb3BzKTsKLSAgICBib29sIHNmZW5jZSA9 IGZhbHNlOworICAgIGJvb2wgc2ZlbmNlID0gZmFsc2UsIGZhdWx0X3N1cHByZXNzaW9uID0gZmFs c2U7CiAgICAgc3RydWN0IG9wZXJhbmQgc3JjID0geyAucmVnID0gUFRSX1BPSVNPTiB9OwogICAg IHN0cnVjdCBvcGVyYW5kIGRzdCA9IHsgLnJlZyA9IFBUUl9QT0lTT04gfTsKICAgICB1bnNpZ25l ZCBsb25nIGNyNCA9IDA7CkBAIC0zMjg2LDYgKzM0MDEsNyBAQCB4ODZfZW11bGF0ZSgKICAgICBi ID0gY3R4dC0+b3Bjb2RlOwogICAgIGQgPSBzdGF0ZS5kZXNjOwogI2RlZmluZSBzdGF0ZSAoJnN0 YXRlKQorICAgIGVsZW1fYnl0ZXMgPSA0IDw8IGV2ZXgudzsKIAogICAgIGdlbmVyYXRlX2V4Y2Vw dGlvbl9pZihzdGF0ZS0+bm90XzY0Yml0ICYmIG1vZGVfNjRiaXQoKSwgRVhDX1VEKTsKIApAQCAt MzM2MCw2ICszNDc2LDI4IEBAIHg4Nl9lbXVsYXRlKAogICAgICAgICBicmVhazsKICAgICB9CiAK KyAgICAvKiBXaXRoIGEgbWVtb3J5IG9wZXJhbmQsIGZldGNoIHRoZSBtYXNrIHJlZ2lzdGVyIGlu IHVzZSAoaWYgYW55KS4gKi8KKyAgICBpZiAoIGVhLnR5cGUgPT0gT1BfTUVNICYmIGV2ZXgub3Bt c2sgKQorICAgIHsKKyAgICAgICAgdWludDhfdCAqc3RiID0gZ2V0X3N0dWIoc3R1Yik7CisKKyAg ICAgICAgLyogS01PVntXLFF9ICVrPG4+LCAoJXJheCkgKi8KKyAgICAgICAgc3RiWzBdID0gMHhj NDsKKyAgICAgICAgc3RiWzFdID0gMHhlMTsKKyAgICAgICAgc3RiWzJdID0gY3B1X2hhc19hdng1 MTJidyA/IDB4ZjggOiAweDc4OworICAgICAgICBzdGJbM10gPSAweDkxOworICAgICAgICBzdGJb NF0gPSBldmV4Lm9wbXNrIDw8IDM7CisgICAgICAgIGluc25fYnl0ZXMgPSA1OworICAgICAgICBz dGJbNV0gPSAweGMzOworCisgICAgICAgIGludm9rZV9zdHViKCIiLCAiIiwgIittIiAob3BfbWFz aykgOiAiYSIgKCZvcF9tYXNrKSk7CisKKyAgICAgICAgaW5zbl9ieXRlcyA9IDA7CisgICAgICAg IHB1dF9zdHViKHN0dWIpOworCisgICAgICAgIGZhdWx0X3N1cHByZXNzaW9uID0gdHJ1ZTsKKyAg ICB9CisKICAgICAvKiBEZWNvZGUgKGJ1dCBkb24ndCBmZXRjaCkgdGhlIGRlc3RpbmF0aW9uIG9w ZXJhbmQ6IHJlZ2lzdGVyIG9yIG1lbW9yeS4gKi8KICAgICBzd2l0Y2ggKCBkICYgRHN0TWFzayAp CiAgICAgewpAQCAtNTcxNiw2ICs1ODU0LDQxIEBAIHg4Nl9lbXVsYXRlKAogICAgICAgICBpbnNu X2J5dGVzID0gUEZYX0JZVEVTICsgMjsKICAgICAgICAgYnJlYWs7CiAKKyAgICBDQVNFX1NJTURf UEFDS0VEX0ZQKF9FVkVYLCAweDBmLCAweDJiKTogLyogdm1vdm50cHtzLGR9IFt4eXpdbW0sbWVt ICovCisgICAgICAgIGdlbmVyYXRlX2V4Y2VwdGlvbl9pZihlYS50eXBlICE9IE9QX01FTSB8fCBl dmV4Lm9wbXNrLCBFWENfVUQpOworICAgICAgICBzZmVuY2UgPSB0cnVlOworICAgICAgICBmYXVs dF9zdXBwcmVzc2lvbiA9IGZhbHNlOworICAgICAgICAvKiBmYWxsIHRocm91Z2ggKi8KKyAgICBD QVNFX1NJTURfUEFDS0VEX0ZQKF9FVkVYLCAweDBmLCAweDEwKTogLyogdm1vdnVwe3MsZH0gW3h5 el1tbS9tZW0sW3h5el1tbXtrfSAqLworICAgIENBU0VfU0lNRF9TQ0FMQVJfRlAoX0VWRVgsIDB4 MGYsIDB4MTApOiAvKiB2bW92c3tzLGR9IG1lbSx4bW17a30gKi8KKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdm1vdnN7cyxkfSB4bW0seG1tLHhtbXtrfSAq LworICAgIENBU0VfU0lNRF9QQUNLRURfRlAoX0VWRVgsIDB4MGYsIDB4MTEpOiAvKiB2bW92dXB7 cyxkfSBbeHl6XW1tLFt4eXpdbW0vbWVte2t9ICovCisgICAgQ0FTRV9TSU1EX1NDQUxBUl9GUChf RVZFWCwgMHgwZiwgMHgxMSk6IC8qIHZtb3Zze3MsZH0geG1tLG1lbXtrfSAqLworICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB2bW92c3tzLGR9IHhtbSx4bW0s eG1te2t9ICovCisgICAgQ0FTRV9TSU1EX1BBQ0tFRF9GUChfRVZFWCwgMHgwZiwgMHgyOCk6IC8q IHZtb3ZhcHtzLGR9IFt4eXpdbW0vbWVtLFt4eXpdbW17a30gKi8KKyAgICBDQVNFX1NJTURfUEFD S0VEX0ZQKF9FVkVYLCAweDBmLCAweDI5KTogLyogdm1vdmFwe3MsZH0gW3h5el1tbSxbeHl6XW1t L21lbXtrfSAqLworICAgICAgICAvKiB2bW92c3tzLGR9IHRvL2Zyb20gbWVtb3J5IGhhdmUgb25s eSB0d28gb3BlcmFuZHMuICovCisgICAgICAgIGlmICggKGIgJiB+MSkgPT0gMHgxMCAmJiBlYS50 eXBlID09IE9QX01FTSApCisgICAgICAgICAgICBkIHw9IFR3b09wOworICAgICAgICBnZW5lcmF0 ZV9leGNlcHRpb25faWYoZXZleC5iciwgRVhDX1VEKTsKKyAgICAgICAgZ2VuZXJhdGVfZXhjZXB0 aW9uX2lmKGV2ZXgudyAhPSAoZXZleC5wZnggJiBWRVhfUFJFRklYX0RPVUJMRV9NQVNLKSwKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVYQ19VRCk7CisgICAgICAgIGhvc3RfYW5kX3Zj cHVfbXVzdF9oYXZlKGF2eDUxMmYpOworICAgICAgICBhdng1MTJfdmxlbl9jaGVjayhldmV4LnBm eCAmIFZFWF9QUkVGSVhfU0NBTEFSX01BU0spOworICAgIHNpbWRfem1tOgorICAgICAgICBnZXRf ZnB1KFg4NkVNVUxfRlBVX3ptbSk7CisgICAgICAgIG9wYyA9IGluaXRfZXZleChzdHViKTsKKyAg ICAgICAgb3BjWzBdID0gYjsKKyAgICAgICAgb3BjWzFdID0gbW9kcm07CisgICAgICAgIGlmICgg ZWEudHlwZSA9PSBPUF9NRU0gKQorICAgICAgICB7CisgICAgICAgICAgICAvKiBjb252ZXJ0IG1l bW9yeSBvcGVyYW5kIHRvICglckFYKSAqLworICAgICAgICAgICAgZXZleC5iID0gMTsKKyAgICAg ICAgICAgIG9wY1sxXSAmPSAweDM4OworICAgICAgICB9CisgICAgICAgIGluc25fYnl0ZXMgPSBF VkVYX1BGWF9CWVRFUyArIDI7CisgICAgICAgIGJyZWFrOworCiAgICAgY2FzZSBYODZFTVVMX09Q Q182NigweDBmLCAweDEyKTogICAgICAgLyogbW92bHBkIG02NCx4bW0gKi8KICAgICBjYXNlIFg4 NkVNVUxfT1BDX1ZFWF82NigweDBmLCAweDEyKTogICAvKiB2bW92bHBkIG02NCx4bW0seG1tICov CiAgICAgQ0FTRV9TSU1EX1BBQ0tFRF9GUCgsIDB4MGYsIDB4MTMpOiAgICAgLyogbW92bHB7cyxk fSB4bW0sbTY0ICovCkBAIC02MzU1LDYgKzY1MjgsNDEgQEAgeDg2X2VtdWxhdGUoCiAgICAgICAg IEFTU0VSVCghc3RhdGUtPnNpbWRfc2l6ZSk7CiAgICAgICAgIGJyZWFrOwogCisgICAgY2FzZSBY ODZFTVVMX09QQ19FVkVYXzY2KDB4MGYsIDB4NmUpOiAvKiB2bW92e2QscX0gci9tLHhtbSAqLwor ICAgIGNhc2UgWDg2RU1VTF9PUENfRVZFWF82NigweDBmLCAweDdlKTogLyogdm1vdntkLHF9IHht bSxyL20gKi8KKyAgICAgICAgZ2VuZXJhdGVfZXhjZXB0aW9uX2lmKChldmV4LmxyIHx8IGV2ZXgu b3Btc2sgfHwgZXZleC5iciB8fAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV2ZXgu cmVnICE9IDB4ZiB8fCAhZXZleC5SWCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBF WENfVUQpOworICAgICAgICBob3N0X2FuZF92Y3B1X211c3RfaGF2ZShhdng1MTJmKTsKKyAgICAg ICAgZ2V0X2ZwdShYODZFTVVMX0ZQVV96bW0pOworCisgICAgICAgIG9wYyA9IGluaXRfZXZleChz dHViKTsKKyAgICAgICAgb3BjWzBdID0gYjsKKyAgICAgICAgLyogQ29udmVydCBtZW1vcnkvR1BS IG9wZXJhbmQgdG8gKCVyQVgpLiAqLworICAgICAgICBldmV4LmIgPSAxOworICAgICAgICBpZiAo ICFtb2RlXzY0Yml0KCkgKQorICAgICAgICAgICAgZXZleC53ID0gMDsKKyAgICAgICAgb3BjWzFd ID0gbW9kcm0gJiAweDM4OworICAgICAgICBpbnNuX2J5dGVzID0gRVZFWF9QRlhfQllURVMgKyAy OworICAgICAgICBvcGNbMl0gPSAweGMzOworCisgICAgICAgIGNvcHlfRVZFWChvcGMsIGV2ZXgp OworICAgICAgICBpbnZva2Vfc3R1YigiIiwgIiIsICIrbSIgKHNyYy52YWwpIDogImEiICgmc3Jj LnZhbCkpOworICAgICAgICBkc3QudmFsID0gc3JjLnZhbDsKKworICAgICAgICBwdXRfc3R1Yihz dHViKTsKKyAgICAgICAgQVNTRVJUKCFzdGF0ZS0+c2ltZF9zaXplKTsKKyAgICAgICAgYnJlYWs7 CisKKyAgICBjYXNlIFg4NkVNVUxfT1BDX0VWRVhfRjMoMHgwZiwgMHg3ZSk6IC8qIHZtb3ZxIHht bS9tNjQseG1tICovCisgICAgY2FzZSBYODZFTVVMX09QQ19FVkVYXzY2KDB4MGYsIDB4ZDYpOiAv KiB2bW92cSB4bW0seG1tL202NCAqLworICAgICAgICBnZW5lcmF0ZV9leGNlcHRpb25faWYoZXZl eC5sciB8fCAhZXZleC53IHx8IGV2ZXgub3Btc2sgfHwgZXZleC5iciwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIEVYQ19VRCk7CisgICAgICAgIGhvc3RfYW5kX3ZjcHVfbXVzdF9oYXZl KGF2eDUxMmYpOworICAgICAgICBkIHw9IFR3b09wOworICAgICAgICBvcF9ieXRlcyA9IDg7Cisg ICAgICAgIGdvdG8gc2ltZF96bW07CisKICAgICBjYXNlIFg4NkVNVUxfT1BDXzY2KDB4MGYsIDB4 ZTcpOiAgICAgLyogbW92bnRkcSB4bW0sbTEyOCAqLwogICAgIGNhc2UgWDg2RU1VTF9PUENfVkVY XzY2KDB4MGYsIDB4ZTcpOiAvKiB2bW92bnRkcSB7eCx5fW1tLG1lbSAqLwogICAgICAgICBnZW5l cmF0ZV9leGNlcHRpb25faWYoZWEudHlwZSAhPSBPUF9NRU0sIEVYQ19VRCk7CkBAIC02Mzc1LDYg KzY1ODMsMzAgQEAgeDg2X2VtdWxhdGUoCiAgICAgICAgICAgICBnb3RvIHNpbWRfMGZfYXZ4Owog ICAgICAgICBnb3RvIHNpbWRfMGZfc3NlMjsKIAorICAgIGNhc2UgWDg2RU1VTF9PUENfRVZFWF82 NigweDBmLCAweGU3KTogLyogdm1vdm50ZHEgW3h5el1tbSxtZW0gKi8KKyAgICAgICAgZ2VuZXJh dGVfZXhjZXB0aW9uX2lmKGVhLnR5cGUgIT0gT1BfTUVNIHx8IGV2ZXgub3Btc2sgfHwgZXZleC53 LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRVhDX1VEKTsKKyAgICAgICAgc2ZlbmNl ID0gdHJ1ZTsKKyAgICAgICAgZmF1bHRfc3VwcHJlc3Npb24gPSBmYWxzZTsKKyAgICAgICAgLyog ZmFsbCB0aHJvdWdoICovCisgICAgY2FzZSBYODZFTVVMX09QQ19FVkVYXzY2KDB4MGYsIDB4NmYp OiAvKiB2bW92ZHFhezMyLDY0fSBbeHl6XW1tL21lbSxbeHl6XW1te2t9ICovCisgICAgY2FzZSBY ODZFTVVMX09QQ19FVkVYX0YzKDB4MGYsIDB4NmYpOiAvKiB2bW92ZHF1ezMyLDY0fSBbeHl6XW1t L21lbSxbeHl6XW1te2t9ICovCisgICAgY2FzZSBYODZFTVVMX09QQ19FVkVYXzY2KDB4MGYsIDB4 N2YpOiAvKiB2bW92ZHFhezMyLDY0fSBbeHl6XW1tLFt4eXpdbW0vbWVte2t9ICovCisgICAgY2Fz ZSBYODZFTVVMX09QQ19FVkVYX0YzKDB4MGYsIDB4N2YpOiAvKiB2bW92ZHF1ezMyLDY0fSBbeHl6 XW1tLFt4eXpdbW0vbWVte2t9ICovCisgICAgdm1vdmRxYToKKyAgICAgICAgZ2VuZXJhdGVfZXhj ZXB0aW9uX2lmKGV2ZXguYnIsIEVYQ19VRCk7CisgICAgICAgIGhvc3RfYW5kX3ZjcHVfbXVzdF9o YXZlKGF2eDUxMmYpOworICAgICAgICBhdng1MTJfdmxlbl9jaGVjayhmYWxzZSk7CisgICAgICAg IGQgfD0gVHdvT3A7CisgICAgICAgIG9wX2J5dGVzID0gMTYgPDwgZXZleC5scjsKKyAgICAgICAg Z290byBzaW1kX3ptbTsKKworICAgIGNhc2UgWDg2RU1VTF9PUENfRVZFWF9GMigweDBmLCAweDZm KTogLyogdm1vdmRxdXs4LDE2fSBbeHl6XW1tL21lbSxbeHl6XW1te2t9ICovCisgICAgY2FzZSBY ODZFTVVMX09QQ19FVkVYX0YyKDB4MGYsIDB4N2YpOiAvKiB2bW92ZHF1ezgsMTZ9IFt4eXpdbW0s W3h5el1tbS9tZW17a30gKi8KKyAgICAgICAgaG9zdF9hbmRfdmNwdV9tdXN0X2hhdmUoYXZ4NTEy YncpOworICAgICAgICBlbGVtX2J5dGVzID0gMSA8PCBldmV4Lnc7CisgICAgICAgIGdvdG8gdm1v dmRxYTsKKwogICAgIGNhc2UgWDg2RU1VTF9PUENfVkVYXzY2KDB4MGYsIDB4ZDYpOiAvKiB2bW92 cSB4bW0seG1tL202NCAqLwogICAgICAgICBnZW5lcmF0ZV9leGNlcHRpb25faWYodmV4LmwsIEVY Q19VRCk7CiAgICAgICAgIGQgfD0gVHdvT3A7CkBAIC03NzM5LDYgKzc5NzEsMTUgQEAgeDg2X2Vt dWxhdGUoCiAgICAgICAgIH0KICAgICAgICAgZ290byBtb3ZkcWE7CiAKKyAgICBjYXNlIFg4NkVN VUxfT1BDX0VWRVhfNjYoMHgwZjM4LCAweDJhKTogLyogdm1vdm50ZHFhIG1lbSxbeHl6XW1tICov CisgICAgICAgIGdlbmVyYXRlX2V4Y2VwdGlvbl9pZihlYS50eXBlICE9IE9QX01FTSB8fCBldmV4 Lm9wbXNrIHx8IGV2ZXgudywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVYQ19VRCk7 CisgICAgICAgIC8qIElnbm9yZSB0aGUgbm9uLXRlbXBvcmFsIGhpbnQgZm9yIG5vdywgdXNpbmcg dm1vdmRxYTMyIGluc3RlYWQuICovCisgICAgICAgIGFzbSB2b2xhdGlsZSAoICJtZmVuY2UiIDo6 OiAibWVtb3J5IiApOworICAgICAgICBiID0gMHg2ZjsKKyAgICAgICAgZXZleC5vcGN4ID0gdmV4 XzBmOworICAgICAgICBnb3RvIHZtb3ZkcWE7CisKICAgICBjYXNlIFg4NkVNVUxfT1BDX1ZFWF82 NigweDBmMzgsIDB4MmMpOiAvKiB2bWFza21vdnBzIG1lbSx7eCx5fW1tLHt4LHl9bW0gKi8KICAg ICBjYXNlIFg4NkVNVUxfT1BDX1ZFWF82NigweDBmMzgsIDB4MmQpOiAvKiB2bWFza21vdnBkIG1l bSx7eCx5fW1tLHt4LHl9bW0gKi8KICAgICBjYXNlIFg4NkVNVUxfT1BDX1ZFWF82NigweDBmMzgs IDB4MmUpOiAvKiB2bWFza21vdnBzIHt4LHl9bW0se3gseX1tbSxtZW0gKi8KQEAgLTg3OTIsMTcg KzkwMzMsMjcgQEAgeDg2X2VtdWxhdGUoCiAgICAgZWxzZSBpZiAoIHN0YXRlLT5zaW1kX3NpemUg KQogICAgIHsKICAgICAgICAgZ2VuZXJhdGVfZXhjZXB0aW9uX2lmKCFvcF9ieXRlcywgRVhDX1VE KTsKLSAgICAgICAgZ2VuZXJhdGVfZXhjZXB0aW9uX2lmKHZleC5vcGN4ICYmIChkICYgVHdvT3Ap ICYmIHZleC5yZWcgIT0gMHhmLAorICAgICAgICBnZW5lcmF0ZV9leGNlcHRpb25faWYoKHZleC5v cGN4ICYmIChkICYgVHdvT3ApICYmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZl eC5yZWcgIT0gMHhmIHx8IChldmV4X2VuY29kZWQoKSAmJiAhZXZleC5SWCkpKSwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIEVYQ19VRCk7CiAKICAgICAgICAgaWYgKCAhb3BjICkKICAg ICAgICAgICAgIEJVRygpOwotICAgICAgICBvcGNbaW5zbl9ieXRlcyAtIFBGWF9CWVRFU10gPSAw eGMzOwotICAgICAgICBjb3B5X1JFWF9WRVgob3BjLCByZXhfcHJlZml4LCB2ZXgpOworICAgICAg ICBpZiAoIGV2ZXhfZW5jb2RlZCgpICkKKyAgICAgICAgeworICAgICAgICAgICAgb3BjW2luc25f Ynl0ZXMgLSBFVkVYX1BGWF9CWVRFU10gPSAweGMzOworICAgICAgICAgICAgY29weV9FVkVYKG9w YywgZXZleCk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAg ICBvcGNbaW5zbl9ieXRlcyAtIFBGWF9CWVRFU10gPSAweGMzOworICAgICAgICAgICAgY29weV9S RVhfVkVYKG9wYywgcmV4X3ByZWZpeCwgdmV4KTsKKyAgICAgICAgfQogCiAgICAgICAgIGlmICgg ZWEudHlwZSA9PSBPUF9NRU0gKQogICAgICAgICB7CiAgICAgICAgICAgICB1aW50MzJfdCBteGNz ciA9IDA7CisgICAgICAgICAgICB1aW50NjRfdCBmdWxsID0gMDsKIAogICAgICAgICAgICAgaWYg KCBvcF9ieXRlcyA8IDE2IHx8CiAgICAgICAgICAgICAgICAgICh2ZXgub3BjeApAQCAtODgyNCw2 ICs5MDc1LDQ1IEBAIHg4Nl9lbXVsYXRlKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICFpc19hbGlnbmVkKGVhLm1lbS5zZWcsIGVhLm1lbS5vZmYsIG9wX2J5dGVzLAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0eHQsIG9wcyksCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRVhDX0dQLCAwKTsKKworICAgICAgICAgICAg SU1QT1NTSUJMRShlbGVtX2J5dGVzIDw9IDApOworICAgICAgICAgICAgaWYgKCBldmV4LmJyICkK KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBBU1NFUlQoKGQgJiBEc3RNYXNrKSAhPSBE c3RNZW0pOworICAgICAgICAgICAgICAgIG9wX2J5dGVzID0gZWxlbV9ieXRlczsKKyAgICAgICAg ICAgIH0KKyAgICAgICAgICAgIGlmICggZXZleC5vcG1zayApCisgICAgICAgICAgICB7CisgICAg ICAgICAgICAgICAgQVNTRVJUKCEob3BfYnl0ZXMgJSBlbGVtX2J5dGVzKSk7CisgICAgICAgICAg ICAgICAgZnVsbCA9IH4wVUxMID4+ICg2NCAtIG9wX2J5dGVzIC8gZWxlbV9ieXRlcyk7CisgICAg ICAgICAgICAgICAgb3BfbWFzayAmPSBmdWxsOworICAgICAgICAgICAgfQorICAgICAgICAgICAg aWYgKCBmYXVsdF9zdXBwcmVzc2lvbiApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg aWYgKCAhb3BfbWFzayApCisgICAgICAgICAgICAgICAgICAgIGdvdG8gc2ltZF9ub19tZW07Cisg ICAgICAgICAgICAgICAgaWYgKCAhZXZleC5iciApCisgICAgICAgICAgICAgICAgeworICAgICAg ICAgICAgICAgICAgICBmaXJzdF9ieXRlID0gX19idWlsdGluX2N0emxsKG9wX21hc2spOworICAg ICAgICAgICAgICAgICAgICBvcF9tYXNrID4+PSBmaXJzdF9ieXRlOworICAgICAgICAgICAgICAg ICAgICBmdWxsID4+PSBmaXJzdF9ieXRlOworICAgICAgICAgICAgICAgICAgICBmaXJzdF9ieXRl ICo9IGVsZW1fYnl0ZXM7CisgICAgICAgICAgICAgICAgICAgIG9wX2J5dGVzID0gKDY0IC0gX19i dWlsdGluX2NsemxsKG9wX21hc2spKSAqIGVsZW1fYnl0ZXM7CisgICAgICAgICAgICAgICAgfQor ICAgICAgICAgICAgfQorICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAqIEluZGVwZW5kZW50 IG9mIGZhdWx0IHN1cHByZXNzaW9uIHdlIG1heSBuZWVkIHRvIHJlYWQgKHBhcnRzIG9mKQorICAg ICAgICAgICAgICogdGhlIG1lbW9yeSBvcGVyYW5kIGZvciB0aGUgcHVycG9zZSBvZiBtZXJnaW5n IHdpdGhvdXQgc3BsaXR0aW5nCisgICAgICAgICAgICAgKiB0aGUgd3JpdGUgYmVsb3cgaW50byBt dWx0aXBsZSBvbmVzLiBOb3RlIHRoYXQgdGhlIEVWRVguWiBjaGVjaworICAgICAgICAgICAgICog aGVyZSBpc24ndCBzdHJpY3RseSBuZWVkZWQsIGR1ZSB0byB0aGVyZSBub3QgY3VycmVudGx5IGJl aW5nCisgICAgICAgICAgICAgKiBhbnkgaW5zdHJ1Y3Rpb25zIGFsbG93aW5nIHplcm9pbmctbWVy Z2luZyBvbiBtZW1vcnkgd3JpdGVzIChhbmQKKyAgICAgICAgICAgICAqIHdlIHJhaXNlICNVRCBk dXJpbmcgRHN0TWVtIHByb2Nlc3NpbmcgZmFyIGFib3ZlIGluIHRoaXMgY2FzZSksCisgICAgICAg ICAgICAgKiB5ZXQgY29uY2VwdHVhbGx5IHRoZSByZWFkIGlzIHRoZW4gdW5uZWNlc3NhcnkuCisg ICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIGlmICggZXZleC5vcG1zayAmJiAhZXZleC56ICYm IChkICYgRHN0TWFzaykgPT0gRHN0TWVtICYmCisgICAgICAgICAgICAgICAgIG9wX21hc2sgIT0g ZnVsbCApCisgICAgICAgICAgICAgICAgZCA9IChkICYgflNyY01hc2spIHwgU3JjTWVtOworCiAg ICAgICAgICAgICBzd2l0Y2ggKCBkICYgU3JjTWFzayApCiAgICAgICAgICAgICB7CiAgICAgICAg ICAgICBjYXNlIFNyY01lbToKQEAgLTg4NjUsNyArOTE1NSwxMCBAQCB4ODZfZW11bGF0ZSgKICAg ICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAg c2ltZF9ub19tZW06CiAgICAgICAgICAgICBkc3QudHlwZSA9IE9QX05PTkU7CisgICAgICAgIH0K IAogICAgICAgICAvKiB7LHZ9bWFza21vdntxLGRxdX0sIGFzIGFuIGV4Y2VwdGlvbiwgdXNlcyBy REkuICovCiAgICAgICAgIGlmICggbGlrZWx5KChjdHh0LT5vcGNvZGUgJiB+KFg4NkVNVUxfT1BD X1BGWF9NQVNLIHwKLS0tIGEveGVuL2FyY2gveDg2L3g4Nl9lbXVsYXRlL3g4Nl9lbXVsYXRlLmgK KysrIGIveGVuL2FyY2gveDg2L3g4Nl9lbXVsYXRlL3g4Nl9lbXVsYXRlLmgKQEAgLTE3MSw2ICsx NzEsNyBAQCBlbnVtIHg4Nl9lbXVsYXRlX2ZwdV90eXBlIHsKICAgICBYODZFTVVMX0ZQVV94bW0s IC8qIFNTRSBpbnN0cnVjdGlvbiBzZXQgKCV4bW0wLSV4bW03LzE1KSAqLwogICAgIFg4NkVNVUxf RlBVX3ltbSwgLyogQVZYL1hPUCBpbnN0cnVjdGlvbiBzZXQgKCV5bW0wLSV5bW03LzE1KSAqLwog ICAgIFg4NkVNVUxfRlBVX29wbWFzaywgLyogQVZYNTEyIG9wbWFzayBpbnN0cnVjdGlvbiBzZXQg KCVrMC0lazcpICovCisgICAgWDg2RU1VTF9GUFVfem1tLCAvKiBBVlg1MTIgaW5zdHJ1Y3Rpb24g c2V0ICglem1tMC0lem1tNy8zMSkgKi8KICAgICAvKiBUaGlzIHNlbnRpbmVsIHdpbGwgbmV2ZXIg YmUgcGFzc2VkIHRvIC0+Z2V0X2ZwdSgpLiAqLwogICAgIFg4NkVNVUxfRlBVX25vbmUKIH07Ci0t LSBhL3hlbi9pbmNsdWRlL2FzbS14ODYvY3B1ZmVhdHVyZS5oCisrKyBiL3hlbi9pbmNsdWRlL2Fz bS14ODYvY3B1ZmVhdHVyZS5oCkBAIC0xMDUsNiArMTA1LDcgQEAKICNkZWZpbmUgY3B1X2hhc19z bWFwICAgICAgICAgICAgYm9vdF9jcHVfaGFzKFg4Nl9GRUFUVVJFX1NNQVApCiAjZGVmaW5lIGNw dV9oYXNfc2hhICAgICAgICAgICAgIGJvb3RfY3B1X2hhcyhYODZfRkVBVFVSRV9TSEEpCiAjZGVm aW5lIGNwdV9oYXNfYXZ4NTEyYncgICAgICAgIGJvb3RfY3B1X2hhcyhYODZfRkVBVFVSRV9BVlg1 MTJCVykKKyNkZWZpbmUgY3B1X2hhc19hdng1MTJ2bCAgICAgICAgYm9vdF9jcHVfaGFzKFg4Nl9G RUFUVVJFX0FWWDUxMlZMKQogCiAvKiBDUFVJRCBsZXZlbCAweDgwMDAwMDA3LmVkeCAqLwogI2Rl ZmluZSBjcHVfaGFzX2l0c2MgICAgICAgICAgICBib290X2NwdV9oYXMoWDg2X0ZFQVRVUkVfSVRT QykKCgoKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fClhl bi1kZXZlbCBtYWlsaW5nIGxpc3QKWGVuLWRldmVsQGxpc3RzLnhlbnByb2plY3Qub3JnCmh0dHBz Oi8vbGlzdHMueGVucHJvamVjdC5vcmcvbWFpbG1hbi9saXN0aW5mby94ZW4tZGV2ZWw=